diff --git a/.hgignore b/.hgignore
index 1221b80357b399f9d0a0a208ac76640d22f34e31..51b864651b26f47a11bf81095ad9d903a914c8a0 100644
--- a/.hgignore
+++ b/.hgignore
@@ -11,7 +11,10 @@ syntax: glob
 *.DS_Store
 LICENSES
 indra/.distcc
-indra/build-darwin-*
+build-linux-*
+build-darwin-*
+build-vc80/
+build-vc100/
 indra/build-vc[0-9]*
 indra/CMakeFiles
 indra/lib/mono/1.0/*.dll
diff --git a/.hgtags b/.hgtags
index 98e4c7675791440dc844a7b7bcbc47b2dae52395..59bb25c228b9eb934877e0e4a6aff2cb81afb46d 100644
--- a/.hgtags
+++ b/.hgtags
@@ -52,6 +52,7 @@ a82e5b1e22c7f90e3c7977d146b80588f004ed0d 2.5.0-start
 345b17e7cf630db77e840b4fe3451bd476d750a3 76f586a8e22b
 0000000000000000000000000000000000000000 76f586a8e22b
 54d772d8687c69b1d773f6ce14bbc7bdc9d6c05f 2.5.0-beta2
+b542f8134a2bb5dd054ff4e509a44b2ee463b1bf nat-eventapi2-base
 7076e22f9f43f479a4ea75eac447a36364bead5a DRTVWR-5_2.2.0-beta1
 9822eb3e25f7fe0c28ffd8aba45c507caa383cbc DRTVWR-3_2.2.0-beta2
 b0cd7e150009809a0b5b0a9d5785cd4bb230413a DRTVWR-7_2.2.0-beta3
@@ -70,5 +71,39 @@ b723921b5c711bd24dbe77dc76ef488b544dac78 DRTVWR-34_2.5.0-beta3
 b723921b5c711bd24dbe77dc76ef488b544dac78 2.5.0-release
 b723921b5c711bd24dbe77dc76ef488b544dac78 DRTVWR-31_2.5.0-release
 92e58e51776a4f8c29069b1a62ff21454d2085f0 2.6.0-start
+3178e311da3a8739a85363665006ea3c4610cad4 dons-headless-hackathon-work
 63a6aedfce785a6c760377bf685b2dae616797d2 2.5.1-start
 4dede9ae1ec74d41f6887719f6f1de7340d8578d 2.5.1-release
+4dede9ae1ec74d41f6887719f6f1de7340d8578d DRTVWR-37_2.5.1-release
+b53a0576eec80614d7767ed72b40ed67aeff27c9 DRTVWR-38_2.5.2-release
+b53a0576eec80614d7767ed72b40ed67aeff27c9 2.5.2-release
+92e58e51776a4f8c29069b1a62ff21454d2085f0 2.6.0-start
+f1827b441e05bf37c68e2c15ebc6d09e9b03f527 2.6.0-start
+f1827b441e05bf37c68e2c15ebc6d09e9b03f527 2.6.0-start
+4e9eec6a347f89b2b3f295beb72f1cf7837dff66 2.6.0-start
+9283d6d1d7eb71dfe4c330e7c9144857e7356bde 2.6.0-beta1
+9283d6d1d7eb71dfe4c330e7c9144857e7356bde DRTVWR-40_2.6.0-beta1
+9e4641f4a7870c0f565a25a2971368d5a29516a1 DRTVWR-41_2.6.0-beta2
+9e4641f4a7870c0f565a25a2971368d5a29516a1 2.6.0-beta2
+c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-start
+c5bdef3aaa2744626aef3c217ce29e1900d357b3 DRTVWR-43_2.6.1-beta1
+c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-beta1
+c9182ed77d427c759cfacf49a7b71a2e20d522aa DRTVWR-42_2.6.1-release
+c9182ed77d427c759cfacf49a7b71a2e20d522aa 2.6.1-release
+56b2778c743c2a964d82e1caf11084d76a87de2c 2.6.2-start
+42f32494bac475d0737799346f6831558ae8bf5d DRTVWR-39_2.6.0-release
+42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release
+d1203046bb653b763f835b04d184646949d8dd5c DRTVWR-45_2.6.2-beta1
+d1203046bb653b763f835b04d184646949d8dd5c 2.6.2-beta1
+214180ad5714ce8392b82bbebcc92f4babd98300 DRTVWR-44_2.6.2-release
+214180ad5714ce8392b82bbebcc92f4babd98300 2.6.2-release
+52b2263ab28f0976c689fd0b76c55a9eb027cdbf end-of-develop.py
+ec32f1045e7c2644015245df3a9933620aa194b8 2.6.3-start
+d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc DRTVWR-47_2.6.3-beta1
+d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc 2.6.3-beta1
+0630e977504af5ea320c58d33cae4e1ddee793e9 DRTVWR-48_2.6.3-beta2
+0630e977504af5ea320c58d33cae4e1ddee793e9 2.6.3-beta2
+74cd32a06837b0c2cb793b2e8d4d82f5d49462b2 2.6.4-start
+74cd32a06837b0c2cb793b2e8d4d82f5d49462b2 2.6.4-start
+f632f87bb71b0f13d21f2f64b0c42cedb008c749 2.6.4-start
+800cefce8d364ffdd2f383cbecb91294da3ea424 2.6.6-start
diff --git a/BuildParams b/BuildParams
index 8e036ab56bdf18b1c5415fcbd9d3f1cdc65e1dc7..2cb58755e513dccf0c5937b195acaed0ed6a28ef 100644
--- a/BuildParams
+++ b/BuildParams
@@ -48,6 +48,12 @@ viewer-beta.login_channel = "Second Life Beta Viewer"
 viewer-beta.build_debug_release_separately = true
 viewer-beta.build_viewer_update_version_manager = true
 
+viewer-pre-beta.viewer_channel = "Second Life Beta Viewer"
+viewer-pre-beta.login_channel = "Second Life Beta Viewer"
+viewer-pre-beta.build_debug_release_separately = true
+viewer-pre-beta.build_viewer_update_version_manager = true
+
+
 # ========================================
 # Viewer Release
 # ========================================
@@ -55,20 +61,18 @@ viewer-release.viewer_channel = "Second Life Release"
 viewer-release.login_channel = "Second Life Release"
 viewer-release.build_debug_release_separately = true
 viewer-release.build_viewer_update_version_manager = true
-viewer-release.release-viewer.jira = DRTVWR-13
 
-# ========================================
-# aimee
-# ========================================
+viewer-pre-release.viewer_channel = "Second Life Release"
+viewer-pre-release.login_channel = "Second Life Release"
+viewer-pre-release.build_debug_release_separately = true
+viewer-pre-release.build_viewer_update_version_manager = true
+#viewer-pre-release.release-viewer.jira = DRTVWR-13
+viewer-pre-release.release-viewer.jira = DRTVWR-46
 
-viewer-development-import.build_debug_release_separately = true
-viewer-development-fixes.build_debug_release_separately = true
-viewer-development-tweaks.build_debug_release_separately = true
 
 # =======================================
 # brad
 # ========================================
-
 debug-halting.email = cg@lindenlab.com
 debug-halting.build_server = false
 debug-halting.build_server_tests = false
@@ -152,56 +156,13 @@ media.build_viewer_update_version_manager = false
 # oz
 # ================
 
-oz_viewer-review1_coverity.coverity_product = viewer
-
-oz_viewer-review1.build_Linux = true
-oz_viewer-review1_debug.build_Linux = false
-oz_viewer-review1_coverity.build_Linux = false
-
-oz_viewer-review1.build_Darwin = true
-oz_viewer-review1_debug.build_Darwin = false
-oz_viewer-review1_coverity.build_Darwin = false
-
-oz_viewer-review1.build_CYGWIN = true
-oz_viewer-review1.build_CYGWIN_Debug = false
-oz_viewer-review1.build_CYGWIN_RelWithDebInfo = false
-oz_viewer-review1.build_CYGWIN_Release = true
-oz_viewer-review1_debug.build_CYGWIN_Debug = true
-oz_viewer-review1_debug.build_CYGWIN_RelWithDebInfo = true
-oz_viewer-review1_debug.build_CYGWIN_Release = false
-oz_viewer-review1_coverity.build_coverity = true
-oz_viewer-review1_coverity.build_CYGWIN_Debug = false
-oz_viewer-review1_coverity.build_CYGWIN_RelWithDebInfo = false
-oz_viewer-review1_coverity.build_CYGWIN_Release = false
-
-oz_viewer-review2_coverity.coverity_product = viewer
-
-oz_viewer-review2.build_Linux = true
-oz_viewer-review2_debug.build_Linux = false
-oz_viewer-review2_coverity.build_Linux = false
-
-oz_viewer-review2.build_Darwin = true
-oz_viewer-review2_debug.build_Darwin = false
-oz_viewer-review2_coverity.build_Darwin = false
-
-oz_viewer-review2.build_CYGWIN = true
-oz_viewer-review2.build_CYGWIN_Debug = false
-oz_viewer-review2.build_CYGWIN_RelWithDebInfo = false
-oz_viewer-review2.build_CYGWIN_Release = true
-oz_viewer-review2_debug.build_CYGWIN_Debug = true
-oz_viewer-review2_debug.build_CYGWIN_RelWithDebInfo = true
-oz_viewer-review2_debug.build_CYGWIN_Release = false
-oz_viewer-review2_coverity.build_coverity = true
-oz_viewer-review2_coverity.build_CYGWIN_Debug = false
-oz_viewer-review2_coverity.build_CYGWIN_RelWithDebInfo = false
-oz_viewer-review2_coverity.build_CYGWIN_Release = false
-
-# ========================================
-# tofu
-# ========================================
+oz_viewer-devreview.build_debug_release_separately = true
+oz_project-1.build_debug_release_separately = true
+oz_project-2.build_debug_release_separately = true
+oz-project-3.build_debug_release_separately = true
 
-tofu_viewer-development-staging.email = tofu.linden@lindenlab.com
 
+oz_viewer-beta-review.build_debug_release_separately = true
 # ========================================
 # enus
 # ========================================
@@ -234,5 +195,23 @@ viewer-asset-delivery-metrics.email = monty@lindenlab.com
 viewer-asset-delivery-metrics.build_server = false
 viewer-asset-delivery-metrics.build_server_tests = false
 
+#==============================================================================
+# autobuild viewers
+#==============================================================================
+viewer-autobuild2010.build_debug_release_separately = true
+viewer-autobuild2010.viewer_channel = "Project Viewer - VS2010"
+viewer-autobuild2010.login_channel = "Project Viewer - VS2010"
+viewer-autobuild2010.viewer_grid = agni
+viewer-autobuild2010.build_link_parallel = false
+
+#======================================== 
+# VS2010 
+#======================================== 
+viewer-vs2010.viewer_channel = "Project Viewer - VS2010"
+viewer-vs2010.login_channel = "Project Viewer - VS2010"
+viewer-vs2010.viewer_grid = agni
+viewer-vs2010.build_debug_release_separately = true
+viewer-vs2010.build_viewer_update_version_manager = false
+viewer-vs2010.build_link_parallel = false
 
 # eof
diff --git a/autobuild.xml b/autobuild.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2ac869b20afb0fb52e611189d530f31e4a900920
--- /dev/null
+++ b/autobuild.xml
@@ -0,0 +1,2303 @@
+<?xml version="1.0" ?>
+<llsd>
+<map>
+    <key>installables</key>
+    <map>
+      <key>GL</key>
+      <map>
+        <key>license</key>
+        <string>GL</string>
+        <key>license_file</key>
+        <string>LICENSES/GL.txt</string>
+        <key>name</key>
+        <string>GL</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>0b7c1d43dc2b39301fef6c05948fb826</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-darwin-20101004.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>d85d88088360aee5b67105ad93b5ad16</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-linux-20100929.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>f8d98cbe78d5aafbc7aaabf840325aaf</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/GL-0.0.0-windows-20110303.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>SDL</key>
+      <map>
+        <key>license</key>
+        <string>lgpl</string>
+        <key>license_file</key>
+        <string>LICENSES/SDL.txt</string>
+        <key>name</key>
+        <string>SDL</string>
+        <key>platforms</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>69ae3b1c9cdb0ebc0d0e1ac8413e3eb7</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/SDL-1.2.14-linux-20110309.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+        </map>
+      </map>
+      <key>apr_suite</key>
+      <map>
+        <key>license</key>
+        <string>apache</string>
+        <key>license_file</key>
+        <string>LICENSES/apr_suite.txt</string>
+        <key>name</key>
+        <string>apr_suite</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>9868bfa0b6954e4884c49c6f30068c80</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.4.2-darwin-20110217.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>ff62946c518a247c86e1066c1e9a5855</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.4.2-linux-20110309.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>73785c200a5b4ef74a1230b028bb680d</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/apr_suite-1.4.2-windows-20110217.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>ares</key>
+      <map>
+        <key>license</key>
+        <string>c-ares</string>
+        <key>license_file</key>
+        <string>LICENSES/c-ares.txt</string>
+        <key>name</key>
+        <string>ares</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>e6caaeea16131e1f2343ecd7765e3147</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ares-1.7.1-darwin-20110217.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>0745872db83d45f4ab3bdc697d98e264</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/223275/arch/Linux/installer/ares-1.7.1-linux-20110310.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>1dcec6babd249a2597114d4ac226c461</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-ares/rev/220963/arch/CYGWIN/installer/ares-1.7.1-windows-20110211.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>boost</key>
+      <map>
+        <key>license</key>
+        <string>boost</string>
+        <key>license_file</key>
+        <string>LICENSES/boost.txt</string>
+        <key>name</key>
+        <string>boost</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>d98078791ce345bf6168ce9ba53ca2d7</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/222752/arch/Darwin/installer/boost-1.45.0-darwin-20110304.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>a34e7fffdb94a6a4d8a2966b1f216da3</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.45.0-linux-20110310.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>98be22c8833aa2bca184b9fa09fbb82b</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/boost-1.45.0-windows-20110124.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>curl</key>
+      <map>
+        <key>license</key>
+        <string>curl</string>
+        <key>license_file</key>
+        <string>LICENSES/curl.txt</string>
+        <key>name</key>
+        <string>curl</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>aaea644191807f51051cefa2fac11069</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-darwin-20110316.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>2d9377951d99a1aa4735cea8d4b5aa71</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-linux-20110316.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>fea96aa2a7d513397317194f3d6c979b</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/curl-7.21.1-windows-20110211.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>db</key>
+      <map>
+        <key>license</key>
+        <string>bsd</string>
+        <key>license_file</key>
+        <string>LICENSES/db.txt</string>
+        <key>name</key>
+        <string>db</string>
+        <key>platforms</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>8f57c413e0786681cbcb9ed2fb8a6d37</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/db-5.1.25-linux-20110309.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+        </map>
+      </map>
+      <key>dbusglib</key>
+      <map>
+        <key>license</key>
+        <string>AFL2.1</string>
+        <key>license_file</key>
+        <string>LICENSES/dbus-glib.txt</string>
+        <key>name</key>
+        <string>dbusglib</string>
+        <key>platforms</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>94b058b9a81114dc4567bd78e4335425</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/dbus_glib-0.76-linux-20110310.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+        </map>
+      </map>
+      <key>elfio</key>
+      <map>
+        <key>license</key>
+        <string>lgpl</string>
+        <key>license_file</key>
+        <string>LICENSES/elfio.txt</string>
+        <key>name</key>
+        <string>elfio</string>
+        <key>platforms</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>031e6315a5c0829c9b9a2ec18aeb7ae3</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-elfio/rev/222074/arch/Linux/installer/elfio-1.0.3-linux-20110225.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+        </map>
+      </map>
+      <key>expat</key>
+      <map>
+        <key>license</key>
+        <string>mit</string>
+        <key>license_file</key>
+        <string>LICENSES/expat.txt</string>
+        <key>name</key>
+        <string>expat</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>180e03d0be1f1acfc3244e78742d7bef</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-expat/rev/221695/arch/Darwin/installer/expat-2.0.1-darwin-20110218.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>9bd79781b58e556ab1c36084ec4a1c0c</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-expat/rev/221695/arch/Linux/installer/expat-2.0.1-linux-20110219.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>e72db1bda49b205ebdf4945d4ed2b8f8</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/expat-2.0.1-windows-20110215.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>fmod</key>
+      <map>
+        <key>license</key>
+        <string>fmod</string>
+        <key>license_file</key>
+        <string>LICENSES/fmod.txt</string>
+        <key>name</key>
+        <string>fmod</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>61ead113e6479452e6b690c84b4e9d30</string>
+              <key>url</key>
+              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/Darwin/installer/fmod-3.75-darwin-20110222.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>0c61d643db54d2e5999be8254569d8b3</string>
+              <key>url</key>
+              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/Linux/installer/fmod-3.75-linux-20110223.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>d9a9a6ad86895353bcd63374a4c1a91d</string>
+              <key>url</key>
+              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/CYGWIN/installer/fmod-3.75-windows-20110222.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>fontconfig</key>
+      <map>
+        <key>license</key>
+        <string>mit</string>
+        <key>license_file</key>
+        <string>LICENSES/fontconfig.txt</string>
+        <key>name</key>
+        <string>fontconfig</string>
+        <key>platforms</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>d8b08b657247566bde5fd853c7622478</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/fontconfig-2.8.0-linux-20110311.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+        </map>
+      </map>
+      <key>freeglut</key>
+      <map>
+        <key>license</key>
+        <string>mit</string>
+        <key>license_file</key>
+        <string>LICENSES/freeglut.txt</string>
+        <key>name</key>
+        <string>freeglut</string>
+        <key>platforms</key>
+        <map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>825d5a9bafcc5bfe28dc4c1c4f87c576</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-freeglut/rev/221064/arch/CYGWIN/installer/freeglut-2.6.0-windows-20110214.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>freetype</key>
+      <map>
+        <key>license</key>
+        <string>freetype</string>
+        <key>license_file</key>
+        <string>LICENSES/freetype.txt</string>
+        <key>name</key>
+        <string>freetype</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>c0eacb6348e032fbc69cfdc4bd215ee4</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-darwin-20110307.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>9f8a9dc39fd7c3da0fb3533782d1fddf</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-freetype/rev/226814/arch/Linux/installer/freetype-2.3.9-linux-20110418.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>271349827b939406162ce42e42cd18e0</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/freetype-2.4.4-windows-20110218.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>glh_linear</key>
+      <map>
+        <key>license</key>
+        <string>glh_linear</string>
+        <key>license_file</key>
+        <string>LICENSES/glh_linear.txt</string>
+        <key>name</key>
+        <string>glh_linear</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>366f940f2634b0e05954646927620bfd</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-darwin-20101004.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>26f2df1f0b0fa01e94e0253e322f3583</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-linux-20101001.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>57f8be28bbaa2505ae3b59deb2c77cdf</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glh_linear-windows-20101011.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>glui</key>
+      <map>
+        <key>license</key>
+        <string>lgpl</string>
+        <key>license_file</key>
+        <string>LICENSES/glui.txt</string>
+        <key>name</key>
+        <string>glui</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>bd2f84ef8bd308570e2e532a371dc2ef</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-darwin-20110309.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>e006635a741420a15f40bbdac13bd8d7</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/glui-2.36-windows-20110214.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>google-perftools</key>
+      <map>
+        <key>license</key>
+        <string>bsd</string>
+        <key>license_file</key>
+        <string>LICENSES/google-perftools.txt</string>
+        <key>name</key>
+        <string>google-perftools</string>
+        <key>platforms</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>cf513fc2eec4a414cc804cf408932a45</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_perftools-1.7-linux-20110315.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>8108bffe1c814be9d035b47dac3d4541</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google-perftools-1.0-windows-20101001b.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>google_breakpad</key>
+      <map>
+        <key>license</key>
+        <string>bsd</string>
+        <key>license_file</key>
+        <string>LICENSES/google_breakpad.txt</string>
+        <key>name</key>
+        <string>google_breakpad</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>21babc394dbf8572830f2e85adec7b9f</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-darwin-20110202.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>204b02a9480c411232255798839431a2</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-linux-20110311.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>627c51136e14e64c5d39933f3abd3bdf</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-windows-20110218.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>googlemock</key>
+      <map>
+        <key>license</key>
+        <string>bsd</string>
+        <key>license_file</key>
+        <string>LICENSES/gmock.txt</string>
+        <key>name</key>
+        <string>googlemock</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>886ee428f058005ab7f90f61784ec9d9</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-darwin-20101004.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>782ca04e56d8eab755adcae297cafa7c</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/googlemock-1.1.0-linux-20101001.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>212701468920519f3989677cea9ca4f1</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gmock-1.5.0-windows-20110224.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>gstreamer</key>
+      <map>
+        <key>license</key>
+        <string>lgpl</string>
+        <key>license_file</key>
+        <string>LICENSES/gstreamer.txt</string>
+        <key>name</key>
+        <string>gstreamer</string>
+        <key>platforms</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>ddbc0a64ad788107877fee777403592c</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gstreamer-linux-20101013.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+        </map>
+      </map>
+      <key>gtk-atk-pango-glib</key>
+      <map>
+        <key>license</key>
+        <string>lgpl</string>
+        <key>license_file</key>
+        <string>LICENSES/gtk.txt</string>
+        <key>name</key>
+        <string>gtk-atk-pango-glib</string>
+        <key>platforms</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>03694ade27f53199229c03cbbda89214</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-linux-20101001.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>c257d718abdde8cfe8a0af26175161a7</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gtk-atk-pango-glib-windows-20101001a.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>jpeglib</key>
+      <map>
+        <key>license</key>
+        <string>jpeglib</string>
+        <key>license_file</key>
+        <string>LICENSES/jpeglib.txt</string>
+        <key>name</key>
+        <string>jpeglib</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>71bd6efbf508e1f2e7d98a6195a93e9e</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-8c-darwin-20110228.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>dcca1db348831cdb7c6b26dc4076c597</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-jpeglib/rev/224895/arch/Linux/installer/jpeglib-8c-linux-20110323.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>a202ec58cef9097c94acfa958ed6da8d</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jpeglib-8c-windows-20110217.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>jsoncpp</key>
+      <map>
+        <key>license</key>
+        <string>jsoncpp</string>
+        <key>license_file</key>
+        <string>LICENSES/jsoncpp.txt</string>
+        <key>name</key>
+        <string>jsoncpp</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>de8b96120c274e052abb4f692861be46</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-darwin-20110131.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>840cd9455638c0ea52c613cfddd07d5b</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-linux-20110315.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>afff2018e6a887c281b072eecdd9343e</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/jsoncpp-0.5.0-windows-20110208.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>kdu</key>
+      <map>
+        <key>license</key>
+        <string>kdu</string>
+        <key>license_file</key>
+        <string>LICENSES/kdu.txt</string>
+        <key>name</key>
+        <string>kdu</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>d91e1f483209cd3eba04135c6a59e829</string>
+              <key>url</key>
+              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/221672/arch/Darwin/installer/kdu-6.4.1-darwin-20110218.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>fbf8a4f78dff986d7c16b3a0437e033e</string>
+              <key>url</key>
+              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/223538/arch/Linux/installer/kdu-6.4.1-linux-20110311.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>6cd9f36465ef73a3df34bf2b3bba2ced</string>
+              <key>url</key>
+              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-kdu-private/rev/221672/arch/CYGWIN/installer/kdu-6.4.1-windows-20110218.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>libpng</key>
+      <map>
+        <key>license</key>
+        <string>libpng</string>
+        <key>license_file</key>
+        <string>LICENSES/libpng.txt</string>
+        <key>name</key>
+        <string>libpng</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>6fe1adf12d98bce9111f60ee762007b9</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-darwin-20110222.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>0681ab7e1988dfdbdad7dd9edb7760ee</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-linux-20110223.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>735a955e6442733e2342ab12c1087488</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libpng-1.5.1-windows-20110221.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>libuuid</key>
+      <map>
+        <key>license</key>
+        <string>lgpl</string>
+        <key>license_file</key>
+        <string>LICENSES/libuuid.txt</string>
+        <key>name</key>
+        <string>libuuid</string>
+        <key>platforms</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>873e8e99d29711df2efa30646dca1795</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/uuid-1.6.2-linux-20110315.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+        </map>
+      </map>
+      <key>libxml</key>
+      <map>
+        <key>license</key>
+        <string>mit</string>
+        <key>license_file</key>
+        <string>LICENSES/libxml.txt</string>
+        <key>name</key>
+        <string>libxml</string>
+        <key>platforms</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>6414642528f42dac1cd9a012c99cd748</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libxml-2.6.24-linux-20101013.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+        </map>
+      </map>
+      <key>llqtwebkit</key>
+      <map>
+        <key>license</key>
+        <string>lgpl</string>
+        <key>license_file</key>
+        <string>LICENSES/llqtwebkit.txt</string>
+        <key>name</key>
+        <string>llqtwebkit</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>76c1015eafcba5ca9932c3009533b51c</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/225273/arch/Darwin/installer/llqtwebkit-4.7.1-darwin-20110329.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>c05a33ee8b6f253b5a744596dfc3707d</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/llqtwebkit-linux-qt4.6-20101013.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>1b1b8e104e39c542d69eb37b5ee81818</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llqtwebkit/rev/225249/arch/CYGWIN/installer/llqtwebkit-4.7.1-windows-20110329.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>mesa</key>
+      <map>
+        <key>license</key>
+        <string>mesa</string>
+        <key>license_file</key>
+        <string>LICENSES/mesa.txt</string>
+        <key>name</key>
+        <string>mesa</string>
+        <key>platforms</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>1f600840463c7327ea17486821425750</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/mesa-7.0-linux-20100930.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+        </map>
+      </map>
+      <key>ndofdev</key>
+      <map>
+        <key>license</key>
+        <string>linden</string>
+        <key>license_file</key>
+        <string>LICENSES/libndofdev.txt</string>
+        <key>name</key>
+        <string>ndofdev</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>674d37d2ba76a2df7f18c47bf50b5d03</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libndofdev-0.1-darwin-20110308.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>c81bacf922bb3b540d92b660364c48ce</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ndofdev-linux-0.2-20101013.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>3a4bec9562ed6ac53e85abcb1afc5fc0</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/libndofdev-0.1-windows-20110223.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>ogg-vorbis</key>
+      <map>
+        <key>license</key>
+        <string>ogg-vorbis</string>
+        <key>license_file</key>
+        <string>LICENSES/ogg-vorbis.txt</string>
+        <key>name</key>
+        <string>ogg-vorbis</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>57f32a1a670f06a4dc036eb1164ad9d7</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg_vorbis-1.1.3-1.2.0-darwin-20110222.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>17c000ceef32c0623d038b4c73791bee</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg_vorbis-1.1.3-1.2.0-linux-20110307.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>c8fccf7eeb25fd45cb7e04399c0b83ee</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/ogg_vorbis-1.1.3-1.2.0-windows-20110222.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>openSSL</key>
+      <map>
+        <key>license</key>
+        <string>openSSL</string>
+        <key>license_file</key>
+        <string>LICENSES/openssl.txt</string>
+        <key>name</key>
+        <string>openSSL</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>facee34b8bd57ad602157e65a5af1a49</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openssl-0.9.8q-darwin-20110211.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>3d40be8566fa4b9df9a38e2a0f9ea467</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/226882/arch/Linux/installer/openssl-1.0.0d-linux-20110418.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>774c7f0a0312bee3054757a623e227bc</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-openssl/rev/220986/arch/CYGWIN/installer/openssl-0.9.8q-windows-20110211.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>openal_soft</key>
+      <map>
+        <key>license</key>
+        <string>lgpl</string>
+        <key>license_file</key>
+        <string>LICENSES/OPENAL.txt</string>
+        <key>name</key>
+        <string>openal_soft</string>
+        <key>platforms</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>fccdca18a950ac9363c6fb39118b80e1</string>
+              <key>hash_algorithm</key>
+              <string>md5</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-3ad86a1c-linux-20110114.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>04df406f3e5d04cf176660bdac66c3a1</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openal-1.12.854-1.1.0-windows-20110301.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+        <key>version</key>
+        <string>3ad86a1c</string>
+      </map>
+      <key>openjpeg</key>
+      <map>
+        <key>license</key>
+        <string>openjpeg</string>
+        <key>license_file</key>
+        <string>LICENSES/openjpeg.txt</string>
+        <key>name</key>
+        <string>openjpeg</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>4be51c7cca7d84831e30b63279df7ae5</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-darwin-20110302.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>fb2382014c79e0049746e4e29bd834f9</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-linux-20110314.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>ca5765af55f798724d601720afdf6953</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/openjpeg-1.4-windows-20110302.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>pth</key>
+      <map>
+        <key>license</key>
+        <string>lgpl</string>
+        <key>license_file</key>
+        <string>LICENSES/pth.txt</string>
+        <key>name</key>
+        <string>pth</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>2172379794217d0ffba0db09b2ac17bf</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/pth-2.0.7-darwin-20110303.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+        </map>
+      </map>
+      <key>quicktime</key>
+      <map>
+        <key>license</key>
+        <string>quicktime</string>
+        <key>license_file</key>
+        <string>LICENSES/quicktime.txt</string>
+        <key>name</key>
+        <string>quicktime</string>
+        <key>platforms</key>
+        <map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>52e49ab6937b09882389da0dbaec17f5</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/quicktime-7.3-windows-20110127.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>slvoice</key>
+      <map>
+        <key>license</key>
+        <string>vivox</string>
+        <key>license_file</key>
+        <string>LICENSES/slvoice.txt</string>
+        <key>name</key>
+        <string>slvoice</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>e19576af3c0affc71293d8f0bcce2606</string>
+              <key>url</key>
+              <string> http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-darwin-20110120.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>53fefed8120d7c6a0eb6778edae6fa32</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-linux-20110120.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>44f84b3b45f7067a104a7c34d50d62f0</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/slvoice-3.2.0002.9361-windows-20110120.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>tut</key>
+      <map>
+        <key>license</key>
+        <string>bsd</string>
+        <key>license_file</key>
+        <string>LICENSES/tut.txt</string>
+        <key>name</key>
+        <string>tut</string>
+        <key>platforms</key>
+        <map>
+          <key>common</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>5c6d3e606f027e78f056cb77b20f228e</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/tut-2008-11-30-common-20101001.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>common</string>
+          </map>
+        </map>
+      </map>
+      <key>xmlrpc-epi</key>
+      <map>
+        <key>license</key>
+        <string>xmlrpc-epi</string>
+        <key>license_file</key>
+        <string>LICENSES/xmlrpc-epi.txt</string>
+        <key>name</key>
+        <string>xmlrpc-epi</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>a3e0fb4b4a51b01690a99747a1cca531</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-darwin-20110307.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>174ab797440157956eda7061dae37564</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-linux-20110314.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>5181d1a8f2516928ac064d72acf164a4</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/xmlrpc_epi-0.54.1-windows-20110224.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>zlib</key>
+      <map>
+        <key>license</key>
+        <string>zlib</string>
+        <key>license_file</key>
+        <string>LICENSES/zlib.txt</string>
+        <key>name</key>
+        <string>zlib</string>
+        <key>platforms</key>
+        <map>
+          <key>darwin</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>49b8de20f3bb43537f51311894a72de1</string>
+              <key>url</key>
+              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/zlib-1.2.5-darwin-20110211.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin</string>
+          </map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>7b4cf3aa2c04937d0a20761516587896</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-zlib/rev/223739/arch/Linux/installer/zlib-1.2.5-linux-20110314.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>5852192646681817fc3c3a8c95e91c1e</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-zlib/rev/220983/arch/CYGWIN/installer/zlib-1.2.5-windows-20110211.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+    </map>
+    <key>package_description</key>
+    <map>
+      <key>name</key>
+      <string>viewer_development</string>
+      <key>platforms</key>
+      <map>
+        <key>common</key>
+        <map>
+          <key>configurations</key>
+          <map>
+            <key>Debug</key>
+            <map>
+              <key>build</key>
+              <map>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>command</key>
+                <string>cmake</string>
+                <key>options</key>
+                <array>
+                  <string>-DCMAKE_BUILD_TYPE:STRING=Debug</string>
+                  <string>-DWORD_SIZE:STRING=32</string>
+                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
+                  <string>-DINSTALL_PROPRIETARY=TRUE</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>Debug</string>
+            </map>
+            <key>DebugOS</key>
+            <map>
+              <key>configure</key>
+              <map>
+                <key>command</key>
+                <string>cmake</string>
+                <key>options</key>
+                <array>
+                  <string>-DCMAKE_BUILD_TYPE:STRING=Debug</string>
+                  <string>-DWORD_SIZE:STRING=32</string>
+                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
+                  <string>-DINSTALL_PROPRIETARY=FALSE</string>
+                </array>
+                <key>arguments</key>
+                <array>
+                  <string>../indra</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>DebugOS</string>
+            </map>
+            <key>RelWithDebInfo</key>
+            <map>
+              <key>build</key>
+              <map>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>command</key>
+                <string>cmake</string>
+                <key>options</key>
+                <array>
+                  <string>-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo</string>
+                  <string>-DWORD_SIZE:STRING=32</string>
+                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
+                  <string>-DINSTALL_PROPRIETARY=TRUE</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>RelWithDebInfo</string>
+            </map>
+            <key>RelWithDebInfoOS</key>
+            <map>
+              <key>configure</key>
+              <map>
+                <key>command</key>
+                <string>cmake</string>
+                <key>options</key>
+                <array>
+                  <string>-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo</string>
+                  <string>-DWORD_SIZE:STRING=32</string>
+                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
+                  <string>-DINSTALL_PROPRIETARY=FALSE</string>
+                </array>
+                <key>arguments</key>
+                <array>
+                  <string>../indra</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>RelWithDebInfoOS</string>
+            </map>
+            <key>Release</key>
+            <map>
+              <key>build</key>
+              <map>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>command</key>
+                <string>cmake</string>
+                <key>options</key>
+                <array>
+                  <string>-DCMAKE_BUILD_TYPE:STRING=Release</string>
+                  <string>-DWORD_SIZE:STRING=32</string>
+                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>Release</string>
+            </map>
+            <key>ReleaseOS</key>
+            <map>
+              <key>configure</key>
+              <map>
+                <key>command</key>
+                <string>cmake</string>
+                <key>options</key>
+                <array>
+                  <string>-DCMAKE_BUILD_TYPE:STRING=Release</string>
+                  <string>-DWORD_SIZE:STRING=32</string>
+                  <string>-DROOT_PROJECT_NAME:STRING=SecondLife</string>
+                  <string>-DINSTALL_PROPRIETARY=FALSE</string>
+                  <string>-DLL_RELEASE_FOR_DOWNLOAD:BOOL=YES</string>
+                </array>
+                <key>arguments</key>
+                <array>
+                  <string>../indra</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>ReleaseOS</string>
+            </map>
+          </map>
+          <key>name</key>
+          <string>common</string>
+        </map>
+        <key>darwin</key>
+        <map>
+          <key>build_directory</key>
+          <string>build-darwin-i386</string>
+          <key>configurations</key>
+          <map>
+            <key>Debug</key>
+            <map>
+              <key>build</key>
+              <map>
+                <key>arguments</key>
+                <array>
+                  <string>|</string>
+                  <string>grep</string>
+                  <string>-v</string>
+                  <string>setenv</string>
+                </array>
+                <key>command</key>
+                <string>xcodebuild</string>
+                <key>options</key>
+                <array>
+                  <string>-configuration Debug</string>
+                  <string>-project SecondLife.xcodeproj</string>
+                </array>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>arguments</key>
+                <array>
+                  <string>../indra</string>
+                </array>
+                <key>options</key>
+                <array>
+                  <string>-G</string>
+                  <string>'Xcode'</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>Debug</string>
+            </map>
+            <key>DebugOS</key>
+            <map>
+              <key>build</key>
+              <map>
+                <key>command</key>
+                <string>xcodebuild</string>
+                <key>options</key>
+                <array>
+                  <string>-configuration Debug</string>
+                  <string>-project SecondLife.xcodeproj</string>
+                </array>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>options</key>
+                <array>
+                  <string>-G</string>
+                  <string>'Xcode'</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>DebugOS</string>
+            </map>
+            <key>RelWithDebInfo</key>
+            <map>
+              <key>build</key>
+              <map>
+                <key>arguments</key>
+                <array>
+                  <string>|</string>
+                  <string>grep</string>
+                  <string>-v</string>
+                  <string>setenv</string>
+                </array>
+                <key>command</key>
+                <string>xcodebuild</string>
+                <key>options</key>
+                <array>
+                  <string>-configuration RelWithDebInfo</string>
+                  <string>-project SecondLife.xcodeproj</string>
+                </array>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>arguments</key>
+                <array>
+                  <string>../indra</string>
+                </array>
+                <key>options</key>
+                <array>
+                  <string>-G</string>
+                  <string>'Xcode'</string>
+                </array>
+              </map>
+              <key>default</key>
+              <string>True</string>
+              <key>name</key>
+              <string>RelWithDebInfo</string>
+            </map>
+            <key>RelWithDebInfoOS</key>
+            <map>
+              <key>build</key>
+              <map>
+                <key>command</key>
+                <string>xcodebuild</string>
+                <key>options</key>
+                <array>
+                  <string>-configuration RelWithDebInfo</string>
+                  <string>-project SecondLife.xcodeproj</string>
+                </array>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>options</key>
+                <array>
+                  <string>-G</string>
+                  <string>'Xcode'</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>RelWithDebInfoOS</string>
+            </map>
+            <key>Release</key>
+            <map>
+              <key>build</key>
+              <map>
+                <key>arguments</key>
+                <array>
+                  <string>|</string>
+                  <string>grep</string>
+                  <string>-v</string>
+                  <string>setenv</string>
+                </array>
+                <key>command</key>
+                <string>xcodebuild</string>
+                <key>options</key>
+                <array>
+                  <string>-configuration Release</string>
+                  <string>-project SecondLife.xcodeproj</string>
+                </array>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>arguments</key>
+                <array>
+                  <string>../indra</string>
+                </array>
+                <key>options</key>
+                <array>
+                  <string>-G</string>
+                  <string>'Xcode'</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>Release</string>
+            </map>
+            <key>ReleaseOS</key>
+            <map>
+              <key>build</key>
+              <map>
+                <key>command</key>
+                <string>xcodebuild</string>
+                <key>options</key>
+                <array>
+                  <string>-configuration Release</string>
+                  <string>-project SecondLife.xcodeproj</string>
+                </array>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>options</key>
+                <array>
+                  <string>-G</string>
+                  <string>'Xcode'</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>ReleaseOS</string>
+            </map>
+          </map>
+          <key>name</key>
+          <string>darwin</string>
+        </map>
+        <key>linux</key>
+        <map>
+          <key>build_directory</key>
+          <string>build-linux-i686</string>
+          <key>configurations</key>
+          <map>
+            <key>Debug</key>
+            <map>
+              <key>build</key>
+              <map>
+                <key>command</key>
+                <string>make</string>
+                <key>options</key>
+                <array>
+                  <string>-j 12</string>
+                </array>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>arguments</key>
+                <array>
+                  <string>../indra</string>
+                </array>
+                <key>options</key>
+                <array>
+                  <string>-G</string>
+                  <string>'Unix Makefiles'</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>Debug</string>
+            </map>
+            <key>DebugOS</key>
+            <map>
+              <key>build</key>
+              <map>
+                <key>command</key>
+                <string>make</string>
+                <key>options</key>
+                <array>
+                  <string>-j 2</string>
+                </array>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>options</key>
+                <array>
+                  <string>-G</string>
+                  <string>'Unix Makefiles'</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>DebugOS</string>
+            </map>
+            <key>RelWithDebInfo</key>
+            <map>
+              <key>build</key>
+              <map>
+                <key>command</key>
+                <string>make</string>
+                <key>options</key>
+                <array>
+                  <string>-j 12</string>
+                </array>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>arguments</key>
+                <array>
+                  <string>../indra</string>
+                </array>
+                <key>options</key>
+                <array>
+                  <string>-G</string>
+                  <string>'Unix Makefiles'</string>
+                </array>
+              </map>
+              <key>default</key>
+              <string>True</string>
+              <key>name</key>
+              <string>RelWithDebInfo</string>
+            </map>
+            <key>RelWithDebInfoOS</key>
+            <map>
+              <key>build</key>
+              <map>
+                <key>command</key>
+                <string>make</string>
+                <key>options</key>
+                <array>
+                  <string>-j 2</string>
+                </array>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>options</key>
+                <array>
+                  <string>-G</string>
+                  <string>'Unix Makefiles'</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>RelWithDebInfoOS</string>
+            </map>
+            <key>Release</key>
+            <map>
+              <key>build</key>
+              <map>
+                <key>command</key>
+                <string>make</string>
+                <key>options</key>
+                <array>
+                  <string>-j 12</string>
+                </array>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>arguments</key>
+                <array>
+                  <string>../indra</string>
+                </array>
+                <key>options</key>
+                <array>
+                  <string>-G</string>
+                  <string>'Unix Makefiles'</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>Release</string>
+            </map>
+            <key>ReleaseOS</key>
+            <map>
+              <key>build</key>
+              <map>
+                <key>command</key>
+                <string>make</string>
+                <key>options</key>
+                <array>
+                  <string>-j 2</string>
+                </array>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>options</key>
+                <array>
+                  <string>-G</string>
+                  <string>'Unix Makefiles'</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>ReleaseOS</string>
+            </map>
+            <key>default</key>
+            <map>
+              <key>build</key>
+              <map>
+              </map>
+              <key>name</key>
+              <string>default</string>
+            </map>
+          </map>
+          <key>name</key>
+          <string>linux</string>
+        </map>
+        <key>windows</key>
+        <map>
+          <key>build_directory</key>
+          <string>build-vc100</string>
+          <key>configurations</key>
+          <map>
+            <key>Debug</key>
+            <map>
+              <key>build</key>
+              <map>
+                <key>arguments</key>
+                <array>
+                  <string>SecondLife.sln</string>
+                </array>
+                <key>command</key>
+                <string>BuildConsole</string>
+                <key>options</key>
+                <array>
+                  <string>/build</string>
+                  <string>"/cfg=Debug|Win32"</string>
+                </array>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>arguments</key>
+                <array>
+                  <string>..\indra</string>
+                  <string>&amp;&amp;</string>
+                  <string>..\indra\tools\vstool\VSTool.exe</string>
+                  <string>--solution</string>
+                  <string>SecondLife.sln</string>
+                  <string>--config</string>
+                  <string>Debug</string>
+                  <string>--startup</string>
+                  <string>secondlife-bin</string>
+                </array>
+                <key>options</key>
+                <array>
+                  <string>-G</string>
+                  <string>"Visual Studio 10"</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>Debug</string>
+            </map>
+            <key>DebugOS</key>
+            <map>
+              <key>build</key>
+              <map>
+                <key>arguments</key>
+                <array>
+                  <string>SecondLife.sln</string>
+                </array>
+                <key>command</key>
+                <string>msbuild.exe</string>
+                <key>options</key>
+                <array>
+                  <string>/p:Configuration=Debug</string>
+                  <string>/p:Platform=Win32</string>
+                  <string>/t:Build</string>
+                  <string>/p:useenv=true</string>
+                  <string>/verbosity:minimal</string>
+                  <string>/toolsversion:4.0</string>
+                  <string>/p:"VCBuildAdditionalOptions= /incremental"</string>
+                </array>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>options</key>
+                <array>
+                  <string>-G</string>
+                  <string>"Visual Studio 10"</string>
+                  <string>-DUNATTENDED:BOOL=ON</string>
+                  <string>-DUSE_PRECOMPILED_HEADERS=ON</string>
+                  <string>-DINSTALL_PROPRIETARY=TRUE</string>
+                  <string>-DUSE_KDU=FALSE</string>
+                  <string>-DFMOD=FALSE</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>DebugOS</string>
+            </map>
+            <key>RelWithDebInfo</key>
+            <map>
+              <key>build</key>
+              <map>
+                <key>arguments</key>
+                <array>
+                  <string>SecondLife.sln</string>
+                </array>
+                <key>command</key>
+                <string>BuildConsole</string>
+                <key>options</key>
+                <array>
+                  <string>/build</string>
+                  <string>"/cfg=RelWithDebInfo|Win32"</string>
+                </array>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>arguments</key>
+                <array>
+                  <string>..\indra</string>
+                  <string>&amp;&amp;</string>
+                  <string>..\indra\tools\vstool\VSTool.exe</string>
+                  <string>--solution</string>
+                  <string>SecondLife.sln</string>
+                  <string>--config</string>
+                  <string>RelWithDebInfo</string>
+                  <string>--startup</string>
+                  <string>secondlife-bin</string>
+                </array>
+                <key>options</key>
+                <array>
+                  <string>-G</string>
+                  <string>"Visual Studio 10"</string>
+                </array>
+              </map>
+              <key>default</key>
+              <string>True</string>
+              <key>name</key>
+              <string>RelWithDebInfo</string>
+            </map>
+            <key>RelWithDebInfoOS</key>
+            <map>
+              <key>build</key>
+              <map>
+                <key>arguments</key>
+                <array>
+                  <string>SecondLife.sln</string>
+                </array>
+                <key>command</key>
+                <string>msbuild.exe</string>
+                <key>options</key>
+                <array>
+                  <string>/p:Configuration=RelWithDebInfo</string>
+                  <string>/p:Platform=Win32</string>
+                  <string>/t:Build</string>
+                  <string>/p:useenv=true</string>
+                  <string>/verbosity:minimal</string>
+                  <string>/toolsversion:4.0</string>
+                  <string>/p:"VCBuildAdditionalOptions= /incremental"</string>
+                </array>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>options</key>
+                <array>
+                  <string>-G</string>
+                  <string>"Visual Studio 10"</string>
+                  <string>-DUNATTENDED:BOOL=ON</string>
+                  <string>-DUSE_PRECOMPILED_HEADERS=ON</string>
+                  <string>-DINSTALL_PROPRIETARY=TRUE</string>
+                  <string>-DUSE_KDU=FALSE</string>
+                  <string>-DFMOD=FALSE</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>RelWithDebInfoOS</string>
+            </map>
+            <key>Release</key>
+            <map>
+              <key>build</key>
+              <map>
+                <key>arguments</key>
+                <array>
+                  <string>SecondLife.sln</string>
+                </array>
+                <key>command</key>
+                <string>BuildConsole</string>
+                <key>options</key>
+                <array>
+                  <string>/build</string>
+                  <string>"/cfg=Release|Win32"</string>
+                  <string>"/CL_ADD=/m:1"</string>
+                </array>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>arguments</key>
+                <array>
+                  <string>..\indra</string>
+                  <string>&amp;&amp;</string>
+                  <string>..\indra\tools\vstool\VSTool.exe</string>
+                  <string>--solution</string>
+                  <string>SecondLife.sln</string>
+                  <string>--config</string>
+                  <string>Release</string>
+                  <string>--startup</string>
+                  <string>secondlife-bin</string>
+                </array>
+                <key>options</key>
+                <array>
+                  <string>-G</string>
+                  <string>"Visual Studio 10"</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>Release</string>
+            </map>
+            <key>ReleaseOS</key>
+            <map>
+              <key>build</key>
+              <map>
+                <key>arguments</key>
+                <array>
+                  <string>SecondLife.sln</string>
+                </array>
+                <key>command</key>
+                <string>msbuild.exe</string>
+                <key>options</key>
+                <array>
+                  <string>/p:Configuration=Release</string>
+                  <string>/p:Platform=Win32</string>
+                  <string>/t:Build</string>
+                  <string>/p:useenv=true</string>
+                  <string>/verbosity:minimal</string>
+                  <string>/toolsversion:4.0</string>
+                  <string>/p:"VCBuildAdditionalOptions= /incremental"</string>
+                </array>
+              </map>
+              <key>configure</key>
+              <map>
+                <key>options</key>
+                <array>
+                  <string>-G</string>
+                  <string>"Visual Studio 10"</string>
+                  <string>-DUNATTENDED:BOOL=ON</string>
+                  <string>-DUSE_PRECOMPILED_HEADERS=ON</string>
+                  <string>-DINSTALL_PROPRIETARY=TRUE</string>
+                  <string>-DUSE_KDU=FALSE</string>
+                  <string>-DFMOD=FALSE</string>
+                </array>
+              </map>
+              <key>name</key>
+              <string>ReleaseOS</string>
+            </map>
+          </map>
+          <key>name</key>
+          <string>windows</string>
+        </map>
+      </map>
+    </map>
+    <key>type</key>
+    <string>autobuild</string>
+    <key>version</key>
+    <string>1.2</string>
+  </map>
+</llsd>
diff --git a/build.sh b/build.sh
index 1c28f5a25596fe6dba76c0e8bca5a08bbee18191..d112e5ea1ca52f03b19bf7b73890d22729dad286 100755
--- a/build.sh
+++ b/build.sh
@@ -22,12 +22,12 @@ build_dir_Darwin()
 
 build_dir_Linux()
 {
-  echo viewer-linux-i686-$(echo $1 | tr A-Z a-z)
+  echo build-linux-i686
 }
 
 build_dir_CYGWIN()
 {
-  echo build-vc80
+  echo build-vc100
 }
 
 installer_Darwin()
@@ -50,47 +50,30 @@ installer_CYGWIN()
 pre_build()
 {
   local variant="$1"
-  local build_dir="$2"
   begin_section "Pre$variant"
-  #export PATH="/cygdrive/c/Program Files/Microsoft Visual Studio 8/Common7/IDE/:$PATH"
-  python develop.py \
-    --incredibuild \
-    --unattended \
-    -t $variant \
-    -G "$cmake_generator" \
-   configure \
-    -DGRID:STRING="$viewer_grid" \
-    -DVIEWER_CHANNEL:STRING="$viewer_channel" \
-    -DVIEWER_LOGIN_CHANNEL:STRING="$login_channel" \
-    -DINSTALL_PROPRIETARY:BOOL=ON \
-    -DRELEASE_CRASH_REPORTING:BOOL=ON \
-    -DLOCALIZESETUP:BOOL=ON \
-    -DPACKAGE:BOOL=ON \
-    -DCMAKE_VERBOSE_MAKEFILE:BOOL=TRUE \
-    -DLL_TESTS:BOOL="$run_tests"
-  end_section "Pre$variant"
+    [ -n "$master_message_template_checkout" ] \
+    && [ -r "$master_message_template_checkout/message_template.msg" ] \
+    && template_verifier_master_url="-DTEMPLATE_VERIFIER_MASTER_URL=file://$master_message_template_checkout/message_template.msg"
+
+    "$AUTOBUILD" configure -c $variant -- \
+     -DPACKAGE:BOOL=ON \
+     -DRELEASE_CRASH_REPORTING:BOOL=ON \
+     -DUSE_PRECOMPILED_HEADERS=FALSE \
+     -DVIEWER_CHANNEL:STRING="\"$viewer_channel\"" \
+     -DVIEWER_LOGIN_CHANNEL:STRING="\"$viewer_login_channel\"" \
+     -DGRID:STRING="\"$viewer_grid\"" \
+     -DLL_TESTS:BOOL="$run_tests" \
+     -DTEMPLATE_VERIFIER_OPTIONS:STRING="$template_verifier_options" $template_verifier_master_url
+ end_section "Pre$variant"
 }
 
 build()
 {
   local variant="$1"
-  local build_dir="$2"
   if $build_viewer
   then
     begin_section "Viewer$variant"
-    if python develop.py \
-      --incredibuild \
-      --unattended \
-      -t $variant \
-      -G "$cmake_generator" \
-      build package
-#     && \
-#      python develop.py \
-#        --incredibuild \
-#      --unattended \
-#      -t $variant \
-#      -G "$cmake_generator" \
-#      build package
+    if "$AUTOBUILD" build --no-configure -c $variant
     then
       echo true >"$build_dir"/build_ok
     else
@@ -110,6 +93,7 @@ build_docs()
   end_section Docs
 }
 
+
 # Check to see if we were invoked from the wrapper, if not, re-exec ourselves from there
 if [ "x$arch" = x ]
 then
@@ -117,15 +101,11 @@ then
   if [ -x "$top/../buildscripts/hg/bin/build.sh" ]
   then
     exec "$top/../buildscripts/hg/bin/build.sh" "$top"
-  elif [ -r "$top/README" ]
-  then
-    cat "$top/README"
-    exit 1
   else
     cat <<EOF
 This script, if called in a development environment, requires that the branch
 independent build script repository be checked out next to this repository.
-This repository is located at http://hg.secondlife.com/buildscripts
+This repository is located at http://hg.lindenlab.com/parabuild/buildscripts
 EOF
     exit 1
   fi
@@ -138,21 +118,65 @@ eval '$build_'"$arch" || pass
 # File no longer exists in code-sep branch, so let's make sure it exists in order to use it.
 if test -f scripts/update_version_files.py ; then
   begin_section UpdateVer
-  scripts/update_version_files.py \
-          --channel="$viewer_channel" \
-          --server_channel="$server_channel" \
-          --revision=$revision \
-            --verbose \
+  eval $(python scripts/update_version_files.py \
+                --channel="$viewer_channel" \
+                --server_channel="$server_channel" \
+                --revision=$revision \
+                --verbose \
+         | sed -n -e "s,Setting viewer channel/version: '\([^']*\)' / '\([^']*\)',VIEWER_CHANNEL='\1';VIEWER_VERSION='\2',p")\
   || fail update_version_files.py
   end_section UpdateVer
 fi
 
 # Now retrieve the version for use in the version manager
 # First three parts only, $revision will be appended automatically.
-build_viewer_update_version_manager_version=`scripts/get_version.py --viewer-version | sed 's/\.[0-9]*$//'`
+build_viewer_update_version_manager_version=`python scripts/get_version.py --viewer-version | sed 's/\.[0-9]*$//'`
+
+if [ -z "$AUTOBUILD" ]
+then
+  export autobuild_dir="$here/../../../autobuild/bin/"
+  if [ -d "$autobuild_dir" ]
+  then
+    export AUTOBUILD="$autobuild_dir"autobuild
+    if [ -x "$AUTOBUILD" ]
+    then
+      # *HACK - bash doesn't know how to pass real pathnames to native windows python
+      case "$arch" in
+      CYGWIN) AUTOBUILD=$(cygpath -u $AUTOBUILD.cmd) ;;
+      esac
+    else
+      record_failure "Not executable: $AUTOBUILD"
+      exit 1
+    fi
+  else
+    record_failure "Not found: $autobuild_dir"
+    exit 1
+  fi
+fi
+
+# load autbuild provided shell functions and variables
+# Merov: going back to the previous code that passes even if it fails catching a failure
+# TODO: use the correct code here under and fix the llbase import in python code
+#if "$AUTOBUILD" source_environment > source_environment
+#then
+#  . source_environment
+#else
+  # dump environment variables for debugging
+#  env|sort
+#  record_failure "autobuild source_environment failed"
+#  cat source_environment >&3
+#  exit 1
+#fi
+eval "$("$AUTOBUILD" source_environment)"
+
+# dump environment variables for debugging
+env|sort
+
+
+# Install packages.
+"$AUTOBUILD" install --skip-license-check
 
 # Now run the build
-cd indra
 succeeded=true
 build_processes=
 last_built_variant=
@@ -169,59 +193,11 @@ do
   build_dir_stubs="$build_dir/win_setup/$variant"
   rm -rf "$build_dir"
   mkdir -p "$build_dir"
+  mkdir -p "$build_dir/tmp"
+  #export TMP="$build_dir/tmp"
   if pre_build "$variant" "$build_dir" >> "$build_log" 2>&1
   then
-    if $build_coverity
-    then
-      mkdir -p "$build_dir/cvbuild"
-      coverity_config=`cygpath --windows "$coverity_dir/config/coverity_config.xml"`
-      coverity_tmpdir=`cygpath --windows "$build_dir/cvbuild"`
-      coverity_root=`cygpath --windows "$top/latest"`
-      case "$variant" in
-      Release)
-        begin_section Coverity
-        begin_section CovBuild
-        "$coverity_dir"/bin/cov-build\
-           --verbose 4 \
-           --config "$coverity_config"\
-           --dir "$coverity_tmpdir"\
-             python develop.py -t $variant -G "$cmake_generator" build "$coverity_product"\
-          >> "$build_log" 2>&1\
-         &&\
-        end_section CovBuild\
-         &&\
-        begin_section CovAnalyze\
-         &&\
-        "$coverity_dir"/bin/cov-analyze\
-           --security\
-           --concurrency\
-           --dir "$coverity_tmpdir"\
-          >> "$build_log" 2>&1\
-         &&\
-        end_section CovAnalyze\
-         &&\
-        begin_section CovCommit\
-         &&\
-        "$coverity_dir"/bin/cov-commit-defects\
-           --stream "$coverity_product"\
-           --dir "$coverity_tmpdir"\
-           --host "$coverity_server"\
-           --strip-path "$coverity_root"\
-           --target "$branch/$arch"\
-           --version "$revision"\
-           --description "$repo: $variant $revision"\
-           --user admin --password coverity\
-          >> "$build_log" 2>&1\
-          || record_failure "Coverity Build Failed"
-        # since any step could have failed, rely on the enclosing block to close any pending sub-blocks
-        end_section Coverity
-       ;;
-      esac
-      if test -r "$build_dir"/cvbuild/build-log.txt
-      then
-        upload_item log "$build_dir"/cvbuild/build-log.txt text/plain
-      fi
-    elif $build_link_parallel
+    if $build_link_parallel
     then
       begin_section BuildParallel
       ( build "$variant" "$build_dir" > "$build_dir/build.log" 2>&1 ) &
@@ -229,10 +205,7 @@ do
       end_section BuildParallel
     else
       begin_section "Build$variant"
-      build "$variant" "$build_dir" >> "$build_log" 2>&1
-      begin_section Tests
-      grep --line-buffered "^##teamcity" "$build_log"
-      end_section Tests
+      build "$variant" "$build_dir" 2>&1 | tee -a "$build_log" | grep --line-buffered "^##teamcity"
       if `cat "$build_dir/build_ok"`
       then
         echo so far so good.
@@ -261,15 +234,13 @@ then
     begin_section "Build$variant"
     build_dir=`build_dir_$arch $variant`
     build_dir_stubs="$build_dir/win_setup/$variant"
+    tee -a $build_log < "$build_dir/build.log" | grep --line-buffered "^##teamcity"
     if `cat "$build_dir/build_ok"`
     then
       echo so far so good.
     else
       record_failure "Parallel build of \"$variant\" failed."
     fi
-    begin_section Tests
-    tee -a $build_log < "$build_dir/build.log" | grep --line-buffered "^##teamcity"
-    end_section Tests
     end_section "Build$variant"
   done
   end_section WaitParallel
@@ -292,6 +263,9 @@ then
       upload_item installer "$package" binary/octet-stream
       upload_item quicklink "$package" binary/octet-stream
 
+      echo "{\"Type\":\"viewer\",\"Version\":\"${VIEWER_VERSION}\"}" > summary.json
+      upload_item installer summary.json text/plain
+
       # Upload crash reporter files.
       case "$last_built_variant" in
       Release)
diff --git a/doc/contributions.txt b/doc/contributions.txt
index ae10957b24146af5af698447fa0fb66293cf646c..957d02d153fccc29630c18fb00ae307fcbd28690 100644
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -1,8 +1,7 @@
 Linden Lab would like to acknowledge source code contributions from the
 following residents. The Second Life resident name is given below,
 along with the issue identifier corresponding to the patches we've
-received from them. To see more about these contributions, visit the
-browsable version: http://wiki.secondlife.com/wiki/Source_contributions
+received from them.
 
 Able Whitman
 	VWR-650
@@ -84,10 +83,12 @@ Aleric Inglewood
 	VWR-24315
 	VWR-24317
 	VWR-24320
-    VWR-24321
+	VWR-24321
+	VWR-24337
  	VWR-24354
 	VWR-24366
 	VWR-24519
+	VWR-24520
 	SNOW-84
 	SNOW-477
 	SNOW-744
@@ -154,6 +155,8 @@ Angus Boyd
 	VWR-592
 Ann Congrejo
 	CT-193
+Ansariel Hiller
+	STORM-1101
 Ardy Lay
 	VWR-19499
 	VWR-24917
@@ -192,6 +195,7 @@ blino Nakamura
 	VWR-17
 Boroondas Gupte
 	OPEN-29
+	OPEN-39
 	SNOW-278
 	SNOW-503
 	SNOW-510
@@ -204,6 +208,7 @@ Boroondas Gupte
 	VWR-20583
 	VWR-20891
 	VWR-23455
+	VWR-24487
 	WEB-262
 Bulli Schumann
 	CT-218
@@ -237,6 +242,7 @@ Coaldust Numbers
     VWR-1095
 Cron Stardust
 	VWR-10579
+	VWR-25120
 	STORM-1075
 Cypren Christenson
 	STORM-417
@@ -407,7 +413,19 @@ Jonathan Yap
 	STORM-1040
 	VWR-17801
 	VWR-24347
-	STORM-990
+	STORM-975
+	STORM-1019
+	STORM-844
+	STORM-643
+	STORM-1020
+	STORM-1064
+	STORM-960
+	STORM-1101
+	STORM-1108
+	STORM-1094
+	STORM-1077
+	STORM-953
+	STORM-1095
 Kage Pixel
 	VWR-11
 Ken March
@@ -424,10 +442,13 @@ Kitty Barnett
 	STORM-288
 	STORM-799
 	STORM-800
+	STORM-1001
     VWR-24217
 Kunnis Basiat
 	VWR-82
 	VWR-102
+Lance Corrimal
+	VWR-25269
 Latif Khalifa
 	VWR-5370
 Lisa Lowe
@@ -567,6 +588,10 @@ Nicholaz Beresford
 	VWR-2412
 	VWR-2682
 	VWR-2684
+Nicky Perian
+	OPEN-1
+	STORM-1087
+	STORM-1090
 Nounouch Hapmouche
 	VWR-238
 Patric Mills
@@ -636,6 +661,8 @@ Robin Cornelius
 	SNOW-747
 	STORM-422
 	STORM-960
+	STORM-1019
+	STORM-1095
 	VWR-2488
 	VWR-9557
 	VWR-10579
@@ -686,6 +713,7 @@ Shawn Kaufmat
 	SNOW-240
 Siana Gearz
 	STORM-960
+	STORM-1088
 SignpostMarv Martin
 	VWR-153
 	VWR-154
@@ -772,6 +800,7 @@ Thickbrick Sleaford
 	VWR-13483
 	VWR-13947
 	VWR-24420
+	STORM-1147
 Thraxis Epsilon
 	SVC-371
 	VWR-383
@@ -830,6 +859,8 @@ Whoops Babii
 Wilton Lundquist
 	VWR-7682
 WolfPup Lowenhar
+	OPEN-1
+	OPEN-37
 	SNOW-622
 	SNOW-772
 	STORM-102
@@ -845,6 +876,7 @@ WolfPup Lowenhar
 	STORM-674
 	STORM-776
 	STORM-825
+	STORM-1098
 	VWR-20741
 	VWR-20933
 Zai Lynch
diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt
index 7ba43f4b134c7a12c7e3fbd69ec45894e1469d93..310e6cbdd42a7b16c70b5fe227d95b674e0d811a 100644
--- a/indra/CMakeLists.txt
+++ b/indra/CMakeLists.txt
@@ -103,7 +103,7 @@ if (VIEWER)
 endif (VIEWER)
 
 # Linux builds the viewer and server in 2 separate projects
-# In order for ./develop.py build server to work on linux, 
+# In order for build server to work on linux, 
 # the viewer project needs a server target.
 # This is not true for mac and windows.
 if (LINUX) 
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index dbe0cf5cd051eb02b865210c6c39e104fc1caa6e..15b827b217d9f96abac1085d4a640aaf819fa8d8 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -7,10 +7,10 @@ include(Variables)
 # Portable compilation flags.
 set(CMAKE_CXX_FLAGS_DEBUG "-D_DEBUG -DLL_DEBUG=1")
 set(CMAKE_CXX_FLAGS_RELEASE
-    "-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -D_SECURE_SCL=0 -DNDEBUG") 
+    "-DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 -DNDEBUG") 
 
 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO 
-    "-DLL_RELEASE=1 -D_SECURE_SCL=0 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1")
+    "-DLL_RELEASE=1 -DNDEBUG -DLL_RELEASE_WITH_DEBUG_INFO=1")
 
 # Configure crash reporting
 set(RELEASE_CRASH_REPORTING OFF CACHE BOOL "Enable use of crash reporting in release builds")
@@ -36,13 +36,13 @@ if (WINDOWS)
   # Don't build DLLs.
   set(BUILD_SHARED_LIBS OFF)
 
-  set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd /MP"
+  set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Od /Zi /MDd /MP -D_SCL_SECURE_NO_WARNINGS=1"
       CACHE STRING "C++ compiler debug options" FORCE)
   set(CMAKE_CXX_FLAGS_RELWITHDEBINFO 
-      "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP /Ob2"
+      "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Od /Zi /MD /MP /Ob2 -D_SECURE_STL=0"
       CACHE STRING "C++ compiler release-with-debug options" FORCE)
   set(CMAKE_CXX_FLAGS_RELEASE
-      "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /Ob2"
+      "${CMAKE_CXX_FLAGS_RELEASE} ${LL_CXX_FLAGS} /O2 /Zi /MD /MP /Ob2 -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
       CACHE STRING "C++ compiler release options" FORCE)
 
   set(CMAKE_CXX_STANDARD_LIBRARIES "")
@@ -59,18 +59,9 @@ if (WINDOWS)
       /Zc:forScope
       /nologo
       /Oy-
-      )
-     
-  if(MSVC80 OR MSVC90)
-    set(CMAKE_CXX_FLAGS_RELEASE
-      "${CMAKE_CXX_FLAGS_RELEASE} -D_SECURE_STL=0 -D_HAS_ITERATOR_DEBUGGING=0"
-      CACHE STRING "C++ compiler release options" FORCE)
-   
-    add_definitions(
       /Zc:wchar_t-
       )
-  endif (MSVC80 OR MSVC90)
-  
+     
   # Are we using the crummy Visual Studio KDU build workaround?
   if (NOT VS_DISABLE_FATAL_WARNINGS)
     add_definitions(/WX)
diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake
index 180504d2862691fe937a7db6d2811e0d907f5e89..daafa00fe27ef5e8d7093a4661683bf915e597fe 100644
--- a/indra/cmake/APR.cmake
+++ b/indra/cmake/APR.cmake
@@ -32,27 +32,21 @@ else (STANDALONE)
       )
   elseif (DARWIN)
     if (LLCOMMON_LINK_SHARED)
-      set(APR_selector     "0.3.7.dylib")
-      set(APRUTIL_selector "0.3.8.dylib")
+      set(APR_selector     "0.dylib")
+      set(APRUTIL_selector "0.dylib")
     else (LLCOMMON_LINK_SHARED)
       set(APR_selector     "a")
       set(APRUTIL_selector "a")
     endif (LLCOMMON_LINK_SHARED)
-    set(APR_LIBRARIES 
-      debug ${ARCH_PREBUILT_DIRS_DEBUG}/libapr-1.${APR_selector}
-      optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libapr-1.${APR_selector}
-      )
-    set(APRUTIL_LIBRARIES 
-      debug ${ARCH_PREBUILT_DIRS_DEBUG}/libaprutil-1.${APRUTIL_selector}
-      optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libaprutil-1.${APRUTIL_selector}
-      )
+    set(APR_LIBRARIES libapr-1.${APR_selector})
+    set(APRUTIL_LIBRARIES libaprutil-1.${APRUTIL_selector})
     set(APRICONV_LIBRARIES iconv)
   else (WINDOWS)
     set(APR_LIBRARIES apr-1)
     set(APRUTIL_LIBRARIES aprutil-1)
     set(APRICONV_LIBRARIES iconv)
   endif (WINDOWS)
-  set(APR_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/apr-1)
+  set(APR_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/apr-1)
 
   if (LINUX)
     if (VIEWER)
diff --git a/indra/cmake/BerkeleyDB.cmake b/indra/cmake/BerkeleyDB.cmake
index e3ca0fd77d62c55e08165c53ace8e9564526cf64..57b53f46ffbadd93e28fc1c468ba95f21d6270b8 100644
--- a/indra/cmake/BerkeleyDB.cmake
+++ b/indra/cmake/BerkeleyDB.cmake
@@ -8,7 +8,8 @@ if (STANDALONE)
 else (STANDALONE)
   if (LINUX)
     # Need to add dependency pthread explicitely to support ld.gold.
-    set(DB_LIBRARIES db-4.2 pthread)
+    use_prebuilt_binary(db)
+    set(DB_LIBRARIES db-5.1 pthread)
   else (LINUX)
     set(DB_LIBRARIES db-4.2)
   endif (LINUX)
diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake
index 7ce57a5572336c4927a7f2b6e4e97d4e3aecb745..2135f0584c6520a57de8eb6bc07950abfd35b891 100644
--- a/indra/cmake/Boost.cmake
+++ b/indra/cmake/Boost.cmake
@@ -10,23 +10,15 @@ if (STANDALONE)
   set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt)
   set(BOOST_REGEX_LIBRARY boost_regex-mt)
   set(BOOST_SIGNALS_LIBRARY boost_signals-mt)
+  set(BOOST_SYSTEM_LIBRARY boost_system-mt)
+  set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt)
 else (STANDALONE)
   use_prebuilt_binary(boost)
   set(Boost_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
 
   if (WINDOWS)
-    set(BOOST_VERSION 1_39)
-    if (MSVC71)
-      set(BOOST_PROGRAM_OPTIONS_LIBRARY 
-          optimized libboost_program_options-vc71-mt-s-${BOOST_VERSION}
-          debug libboost_program_options-vc71-mt-sgd-${BOOST_VERSION})
-      set(BOOST_REGEX_LIBRARY
-          optimized libboost_regex-vc71-mt-s-${BOOST_VERSION}
-          debug libboost_regex-vc71-mt-sgd-${BOOST_VERSION})
-      set(BOOST_SIGNALS_LIBRARY 
-          optimized libboost_signals-vc71-mt-s-${BOOST_VERSION}
-          debug libboost_signals-vc71-mt-sgd-${BOOST_VERSION})
-    else (MSVC71)
+    set(BOOST_VERSION 1_45)
+    if(MSVC80)
       set(BOOST_PROGRAM_OPTIONS_LIBRARY 
           optimized libboost_program_options-vc80-mt-${BOOST_VERSION}
           debug libboost_program_options-vc80-mt-gd-${BOOST_VERSION})
@@ -36,14 +28,31 @@ else (STANDALONE)
       set(BOOST_SIGNALS_LIBRARY 
           optimized libboost_signals-vc80-mt-${BOOST_VERSION}
           debug libboost_signals-vc80-mt-gd-${BOOST_VERSION})
-    endif (MSVC71)
-  elseif (DARWIN)
-    set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-xgcc40-mt)
-    set(BOOST_REGEX_LIBRARY boost_regex-xgcc40-mt)
-    set(BOOST_SIGNALS_LIBRARY boost_signals-xgcc40-mt)
-  elseif (LINUX)
-    set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-gcc41-mt)
-    set(BOOST_REGEX_LIBRARY boost_regex-gcc41-mt)
-    set(BOOST_SIGNALS_LIBRARY boost_signals-gcc41-mt)
+      set(BOOST_SYSTEM_LIBRARY 
+          optimized libboost_system-vc80-mt-${BOOST_VERSION}
+          debug libboost_system-vc80-mt-gd-${BOOST_VERSION})
+      set(BOOST_FILESYSTEM_LIBRARY 
+          optimized libboost_filesystem-vc80-mt-${BOOST_VERSION}
+          debug libboost_filesystem-vc80-mt-gd-${BOOST_VERSION})
+    else(MSVC80)
+      # MSVC 10.0 config
+      set(BOOST_PROGRAM_OPTIONS_LIBRARY 
+          optimized libboost_program_options-vc100-mt-${BOOST_VERSION}
+          debug libboost_program_options-vc100-mt-gd-${BOOST_VERSION})
+      set(BOOST_REGEX_LIBRARY
+          optimized libboost_regex-vc100-mt-${BOOST_VERSION}
+          debug libboost_regex-vc100-mt-gd-${BOOST_VERSION})
+      set(BOOST_SYSTEM_LIBRARY 
+          optimized libboost_system-vc100-mt-${BOOST_VERSION}
+          debug libboost_system-vc100-mt-gd-${BOOST_VERSION})
+      set(BOOST_FILESYSTEM_LIBRARY 
+          optimized libboost_filesystem-vc100-mt-${BOOST_VERSION}
+          debug libboost_filesystem-vc100-mt-gd-${BOOST_VERSION})    
+    endif (MSVC80)
+  elseif (DARWIN OR LINUX)
+    set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options)
+    set(BOOST_REGEX_LIBRARY boost_regex)
+    set(BOOST_SYSTEM_LIBRARY boost_system)
+    set(BOOST_FILESYSTEM_LIBRARY boost_filesystem)
   endif (WINDOWS)
 endif (STANDALONE)
diff --git a/indra/cmake/CARes.cmake b/indra/cmake/CARes.cmake
index 1850b706acca093b191aa78db6a55371bdbd8796..b0dac5b12fb7c8919ae6145ab86de8dd1c862b4d 100644
--- a/indra/cmake/CARes.cmake
+++ b/indra/cmake/CARes.cmake
@@ -13,10 +13,7 @@ else (STANDALONE)
     if (WINDOWS)
         set(CARES_LIBRARIES areslib)
     elseif (DARWIN)
-        set(CARES_LIBRARIES
-          optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libcares.a
-          debug ${ARCH_PREBUILT_DIRS_DEBUG}/libcares.a
-          )
+       set(CARES_LIBRARIES cares)
     else (WINDOWS)
         set(CARES_LIBRARIES cares)
     endif (WINDOWS)
diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt
index 3f421b270b92507fc3295cf14a99000de2e9595c..89c1c3691ab5539efb0b5d99657c370c00261996 100644
--- a/indra/cmake/CMakeLists.txt
+++ b/indra/cmake/CMakeLists.txt
@@ -20,7 +20,6 @@ set(cmake_SOURCE_FILES
     CSharpMacros.cmake
     DBusGlib.cmake
     DirectX.cmake
-    ELFIO.cmake
     EXPAT.cmake
     FindAPR.cmake
     FindBerkeleyDB.cmake
@@ -29,7 +28,6 @@ set(cmake_SOURCE_FILES
     FindFMOD.cmake
     FindGooglePerfTools.cmake
     FindMono.cmake
-    FindMT.cmake
     FindMySQL.cmake
     FindOpenJPEG.cmake
     FindXmlRpcEpi.cmake
@@ -85,7 +83,6 @@ source_group("Shared Rules" FILES ${cmake_SOURCE_FILES})
 
 set(master_SOURCE_FILES
     ../CMakeLists.txt
-    ../develop.py
     )
 
 if (SERVER)
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index 1b08c3fd2ed359c0be4ee14e6ad8dd55674c5f38..1c43c4ce12d760cbcccc4f17d6fb7472b0f197f3 100644
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -5,6 +5,7 @@
 # VisualStudio.
 
 include(CMakeCopyIfDifferent)
+include(Linking)
 
 ###################################################################
 # set up platform specific lists of files that need to be copied
@@ -16,7 +17,7 @@ if(WINDOWS)
 
     #*******************************
     # VIVOX - *NOTE: no debug version
-    set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-win32")
+    set(vivox_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
     set(vivox_files
         SLVoice.exe
         libsndfile-1.dll
@@ -30,24 +31,24 @@ if(WINDOWS)
     #*******************************
     # Misc shared libs 
 
-    # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
-    # or ARCH_PREBUILT_DIRS
-    set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug")
+    set(debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}")
     set(debug_files
         openjpegd.dll
         libapr-1.dll
         libaprutil-1.dll
         libapriconv-1.dll
+        ssleay32.dll
+        libeay32.dll
         )
 
-    # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
-    # or ARCH_PREBUILT_DIRS
-    set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release")
+    set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
     set(release_files
         openjpeg.dll
         libapr-1.dll
         libaprutil-1.dll
         libapriconv-1.dll
+        ssleay32.dll
+        libeay32.dll
         )
 
     if(USE_GOOGLE_PERFTOOLS)
@@ -121,6 +122,62 @@ if (MSVC80)
         set(third_party_targets ${third_party_targets} ${out_targets})
           
     endif (EXISTS ${release_msvc8_redist_path})
+elseif (MSVC_VERSION EQUAL 1600) # VisualStudio 2010
+    FIND_PATH(debug_msvc10_redist_path msvcr100d.dll
+        PATHS
+        ${MSVC_DEBUG_REDIST_PATH}
+         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC100.DebugCRT
+        NO_DEFAULT_PATH
+        NO_DEFAULT_PATH
+        )
+
+    if(EXISTS ${debug_msvc10_redist_path})
+        set(debug_msvc10_files
+            msvcr100d.dll
+            msvcp100d.dll
+            )
+
+        copy_if_different(
+            ${debug_msvc10_redist_path}
+            "${SHARED_LIB_STAGING_DIR_DEBUG}"
+            out_targets
+            ${debug_msvc10_files}
+            )
+        set(third_party_targets ${third_party_targets} ${out_targets})
+
+    endif ()
+
+    FIND_PATH(release_msvc10_redist_path msvcr100.dll
+        PATHS
+        ${MSVC_REDIST_PATH}
+         [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC100.CRT
+        NO_DEFAULT_PATH
+        NO_DEFAULT_PATH
+        )
+
+    if(EXISTS ${release_msvc10_redist_path})
+        set(release_msvc10_files
+            msvcr100.dll
+            msvcp100.dll
+            )
+
+        copy_if_different(
+            ${release_msvc10_redist_path}
+            "${SHARED_LIB_STAGING_DIR_RELEASE}"
+            out_targets
+            ${release_msvc10_files}
+            )
+        set(third_party_targets ${third_party_targets} ${out_targets})
+
+        copy_if_different(
+            ${release_msvc10_redist_path}
+            "${SHARED_LIB_STAGING_DIR_RELWITHDEBINFO}"
+            out_targets
+            ${release_msvc10_files}
+            )
+        set(third_party_targets ${third_party_targets} ${out_targets})
+          
+    endif ()
 endif (MSVC80)
 
 elseif(DARWIN)
@@ -128,7 +185,7 @@ elseif(DARWIN)
     set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO   "${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/Resources")
     set(SHARED_LIB_STAGING_DIR_RELEASE          "${SHARED_LIB_STAGING_DIR}/Release/Resources")
 
-    set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/universal-darwin")
+    set(vivox_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
     set(vivox_files
         SLVoice
         libsndfile.dylib
@@ -137,20 +194,16 @@ elseif(DARWIN)
         libvivoxplatform.dylib
         libvivoxsdk.dylib
        )
-    # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
-    # or ARCH_PREBUILT_DIRS
-    set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_debug")
+    set(debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}")
     set(debug_files
        )
-    # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
-    # or ARCH_PREBUILT_DIRS
-    set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release")
+    set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
     set(release_files
-        libapr-1.0.3.7.dylib
+        libapr-1.0.dylib
         libapr-1.dylib
-        libaprutil-1.0.3.8.dylib
+        libaprutil-1.0.dylib
         libaprutil-1.dylib
-        libexpat.0.5.0.dylib
+        libexpat.1.5.2.dylib
         libexpat.dylib
         libllqtwebkit.dylib
         libndofdev.dylib
@@ -167,7 +220,7 @@ elseif(LINUX)
     set(SHARED_LIB_STAGING_DIR_RELWITHDEBINFO   "${SHARED_LIB_STAGING_DIR}")
     set(SHARED_LIB_STAGING_DIR_RELEASE          "${SHARED_LIB_STAGING_DIR}")
 
-    set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-linux")
+    set(vivox_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
     set(vivox_files
         libsndfile.so.1
         libortp.so
@@ -178,20 +231,20 @@ elseif(LINUX)
        )
     # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
     # or ARCH_PREBUILT_DIRS
-    set(debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib_debug")
+    set(debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}")
     set(debug_files
        )
     # *TODO - update this to use LIBS_PREBUILT_DIR and LL_ARCH_DIR variables
     # or ARCH_PREBUILT_DIRS
-    set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib_release_client")
+    set(release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
     # *FIX - figure out what to do with duplicate libalut.so here -brad
     set(release_files
         libapr-1.so.0
         libaprutil-1.so.0
         libatk-1.0.so
         libbreakpad_client.so.0
-        libcrypto.so.0.9.7
-        libdb-4.2.so
+        libcrypto.so.1.0.0
+        libdb-5.1.so
         libexpat.so
         libexpat.so.1
         libgmock_main.so
@@ -203,10 +256,11 @@ elseif(LINUX)
         libopenal.so
         libopenjpeg.so
         libssl.so
-        libstacktrace.so
         libtcmalloc.so
-        libuuid.so.1
-        libssl.so.0.9.7
+        libuuid.so.16
+        libuuid.so.16.0.22
+        libssl.so.1.0.0
+        libfontconfig.so.1.4.4
        )
 
     if (FMOD)
diff --git a/indra/cmake/DBusGlib.cmake b/indra/cmake/DBusGlib.cmake
index cfc4ccd404fa4541284fe057b7760654bd58604f..83c08d3350926ce85359a23cce4d33eb45e2d760 100644
--- a/indra/cmake/DBusGlib.cmake
+++ b/indra/cmake/DBusGlib.cmake
@@ -10,7 +10,7 @@ elseif (LINUX)
   use_prebuilt_binary(dbusglib)
   set(DBUSGLIB_FOUND ON FORCE BOOL)
   set(DBUSGLIB_INCLUDE_DIRS
-      ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/glib-2.0
+      ${LIBS_PREBUILT_DIR}/include/dbus
       )
   # We don't need to explicitly link against dbus-glib itself, because
   # the viewer probes for the system's copy at runtime.
diff --git a/indra/cmake/DirectX.cmake b/indra/cmake/DirectX.cmake
index 29724ee2fc97aa7047ce6362057574e6408d7357..b2a18805d478fc5cd12633a1464999d7900cda72 100644
--- a/indra/cmake/DirectX.cmake
+++ b/indra/cmake/DirectX.cmake
@@ -3,6 +3,7 @@
 if (VIEWER AND WINDOWS)
   find_path(DIRECTX_INCLUDE_DIR dxdiag.h
             "$ENV{DXSDK_DIR}/Include"
+            "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (August 2009)/Include"
             "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (March 2009)/Include"
             "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (August 2008)/Include"
             "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (June 2008)/Include"
@@ -24,6 +25,7 @@ if (VIEWER AND WINDOWS)
 
   find_path(DIRECTX_LIBRARY_DIR dxguid.lib
             "$ENV{DXSDK_DIR}/Lib/x86"
+            "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (August 2009)/Lib/x86"
             "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (March 2009)/Lib/x86"
             "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (August 2008)/Lib/x86"
             "$ENV{PROGRAMFILES}/Microsoft DirectX SDK (June 2008)/Lib/x86"
diff --git a/indra/cmake/ELFIO.cmake b/indra/cmake/ELFIO.cmake
deleted file mode 100644
index e51993b0f7d70a1f2c3e129daa7d1c510a322032..0000000000000000000000000000000000000000
--- a/indra/cmake/ELFIO.cmake
+++ /dev/null
@@ -1,19 +0,0 @@
-# -*- cmake -*-
-include(Prebuilt)
-
-set(ELFIO_FIND_QUIETLY ON)
-
-if (STANDALONE)
-  include(FindELFIO)
-elseif (LINUX)
-  use_prebuilt_binary(elfio)
-  set(ELFIO_LIBRARIES ELFIO)
-  set(ELFIO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
-  set(ELFIO_FOUND "YES")
-endif (STANDALONE)
-
-if (ELFIO_FOUND)
-  add_definitions(-DLL_ELFBIN=1)
-else (ELFIO_FOUND)
-  set(ELFIO_INCLUDE_DIR "")
-endif (ELFIO_FOUND)
diff --git a/indra/cmake/FMOD.cmake b/indra/cmake/FMOD.cmake
old mode 100644
new mode 100755
index dcf44cd64237b3e49e94be3c5932eef2142f6d77..cb5124812d130746146927e0c32fd99f0b97d1a2
--- a/indra/cmake/FMOD.cmake
+++ b/indra/cmake/FMOD.cmake
@@ -1,26 +1,39 @@
 # -*- cmake -*-
 
-set(FMOD ON CACHE BOOL "Use FMOD sound library.")
+# FMOD can be set when launching the make using the argument -DFMOD:BOOL=ON
+# When building using proprietary binaries though (i.e. having access to LL private servers),
+# we always build with FMOD.
+# Open source devs should use the -DFMOD:BOOL=ON then if they want to build with FMOD, whether
+# they are using STANDALONE or not.
+if (INSTALL_PROPRIETARY)
+  set(FMOD ON CACHE BOOL "Use FMOD sound library.")
+endif (INSTALL_PROPRIETARY)
 
 if (FMOD)
   if (STANDALONE)
+    # In that case, we use the version of the library installed on the system
     set(FMOD_FIND_REQUIRED ON)
     include(FindFMOD)
   else (STANDALONE)
-    if (INSTALL_PROPRIETARY)
-      include(Prebuilt)
-      use_prebuilt_binary(fmod)
-    endif (INSTALL_PROPRIETARY)
-    
-    if (WINDOWS)
-      set(FMOD_LIBRARY fmod)
-    elseif (DARWIN)
-      set(FMOD_LIBRARY fmod)
-    elseif (LINUX)
-      set(FMOD_LIBRARY fmod-3.75)
-    endif (WINDOWS)
-
-    SET(FMOD_LIBRARIES ${FMOD_LIBRARY})
-    set(FMOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
+    if (FMOD_LIBRARY AND FMOD_INCLUDE_DIR)
+	  # If the path have been specified in the arguments, use that
+      set(FMOD_LIBRARIES ${FMOD_LIBRARY})
+	  MESSAGE(STATUS "Using FMOD path: ${FMOD_LIBRARIES}, ${FMOD_INCLUDE_DIR}")
+    else (FMOD_LIBRARY AND FMOD_INCLUDE_DIR)
+	  # If not, we're going to try to get the package listed in autobuild.xml
+	  # Note: if you're not using INSTALL_PROPRIETARY, the package URL should be local (file:/// URL) 
+	  # as accessing the private LL location will fail if you don't have the credential
+	  include(Prebuilt)
+	  use_prebuilt_binary(fmod)    
+      if (WINDOWS)
+        set(FMOD_LIBRARY fmod)
+      elseif (DARWIN)
+        set(FMOD_LIBRARY fmod)
+      elseif (LINUX)
+        set(FMOD_LIBRARY fmod-3.75)
+      endif (WINDOWS)
+      set(FMOD_LIBRARIES ${FMOD_LIBRARY})
+      set(FMOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
+    endif (FMOD_LIBRARY AND FMOD_INCLUDE_DIR)
   endif (STANDALONE)
 endif (FMOD)
diff --git a/indra/cmake/FindAutobuild.cmake b/indra/cmake/FindAutobuild.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..45db2b6ed0e19bffd3e58c3feb0b6309ee4e1fcf
--- /dev/null
+++ b/indra/cmake/FindAutobuild.cmake
@@ -0,0 +1,41 @@
+# -*- cmake -*-
+#
+# Find the autobuild tool
+#
+# Output variables:
+#
+#   AUTOBUILD_EXECUTABLE - path to autobuild or pautobuild executable
+
+# *TODO - if cmake was executed by autobuild, autobuild will have set the AUTOBUILD env var
+# update this to check for that case
+
+IF (NOT AUTOBUILD_EXECUTABLE)
+    IF(WIN32)
+      SET(AUTOBUILD_EXE_NAMES autobuild.cmd autobuild.exe)
+    ELSE(WIN32)
+      SET(AUTOBUILD_EXE_NAMES autobuild)
+    ENDIF(WIN32)
+
+    SET(AUTOBUILD_EXECUTABLE)
+    FIND_PROGRAM(
+      AUTOBUILD_EXECUTABLE 
+      NAMES ${AUTOBUILD_EXE_NAMES}
+      PATHS 
+	ENV PATH
+	${CMAKE_SOURCE_DIR}/.. 
+	${CMAKE_SOURCE_DIR}/../..
+	${CMAKE_SOURCE_DIR}/../../..
+      PATH_SUFFIXES "/autobuild/bin/"
+    )
+
+    IF (AUTOBUILD_EXECUTABLE)
+      GET_FILENAME_COMPONENT(_autobuild_name ${AUTOBUILD_EXECUTABLE} NAME_WE)
+      MESSAGE(STATUS "Using autobuild at: ${AUTOBUILD_EXECUTABLE}")
+    ELSE (AUTOBUILD_EXECUTABLE)
+      IF (AUTOBUILD_FIND_REQUIRED)
+	MESSAGE(FATAL_ERROR "Could not find autobuild executable")
+      ENDIF (AUTOBUILD_FIND_REQUIRED)
+    ENDIF (AUTOBUILD_EXECUTABLE)
+
+    MARK_AS_ADVANCED(AUTOBUILD_EXECUTABLE)
+ENDIF (NOT AUTOBUILD_EXECUTABLE)
diff --git a/indra/cmake/FindFMOD.cmake b/indra/cmake/FindFMOD.cmake
index e60b386027a7a40556038fa713f116fe7b131ac8..1ebbc8c96e5e3627f2de7d434ff2e73e5add235c 100644
--- a/indra/cmake/FindFMOD.cmake
+++ b/indra/cmake/FindFMOD.cmake
@@ -11,7 +11,7 @@
 
 FIND_PATH(FMOD_INCLUDE_DIR fmod.h PATH_SUFFIXES fmod)
 
-SET(FMOD_NAMES ${FMOD_NAMES} fmod fmodvc fmod-3.75)
+SET(FMOD_NAMES ${FMOD_NAMES} fmod fmodvc fmodex fmod-3.75)
 FIND_LIBRARY(FMOD_LIBRARY
   NAMES ${FMOD_NAMES}
   PATH_SUFFIXES fmod
diff --git a/indra/cmake/FindLLQtWebkit.cmake b/indra/cmake/FindLLQtWebkit.cmake
index c747ec32a2850957f45ccb5fe239b6f995cb611c..4bf5f5cb7340cabccd7f6e29736959308d88bcd2 100644
--- a/indra/cmake/FindLLQtWebkit.cmake
+++ b/indra/cmake/FindLLQtWebkit.cmake
@@ -22,9 +22,9 @@ if (PKG_CONFIG_FOUND)
     else (LLQtWebkit_FIND_REQUIRED AND LLQtWebkit_FIND_VERSION)
         set(_PACKAGE_ARGS libllqtwebkit)
     endif (LLQtWebkit_FIND_REQUIRED AND LLQtWebkit_FIND_VERSION)
-    if (NOT "${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" VERSION_LESS "2.8")
+    if (NOT "${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}" VERSION_LESS "2.8.2")
       # As virtually nobody will have a pkg-config file for this, do this check always quiet.
-      # Unfortunately cmake 2.8 or higher is required for pkg_check_modules to have a 'QUIET'.
+      # Unfortunately cmake 2.8.2 or higher is required for pkg_check_modules to have a 'QUIET'.
       set(_PACKAGE_ARGS ${_PACKAGE_ARGS} QUIET)
     endif ()
     pkg_check_modules(LLQTWEBKIT ${_PACKAGE_ARGS})
diff --git a/indra/cmake/FreeType.cmake b/indra/cmake/FreeType.cmake
index 5f1aa26e89169d1dc42550cbf7b26545b3e7ee35..43a9d282d0e95d6cc7cc8f75e4bd5d03a45e3ecb 100644
--- a/indra/cmake/FreeType.cmake
+++ b/indra/cmake/FreeType.cmake
@@ -9,7 +9,7 @@ else (STANDALONE)
   use_prebuilt_binary(freetype)
   if (LINUX)
     set(FREETYPE_INCLUDE_DIRS
-        ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
+        ${LIBS_PREBUILT_DIR}/include)
   else (LINUX)
     set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
   endif (LINUX)
diff --git a/indra/cmake/GStreamer010Plugin.cmake b/indra/cmake/GStreamer010Plugin.cmake
index 0ca432da184cbbe3264784912ab5db394cdf3816..d2d0699bcd72fc5de4bc751809af9074099953c3 100644
--- a/indra/cmake/GStreamer010Plugin.cmake
+++ b/indra/cmake/GStreamer010Plugin.cmake
@@ -13,9 +13,9 @@ elseif (LINUX)
   set(GSTREAMER010_FOUND ON FORCE BOOL)
   set(GSTREAMER010_PLUGINS_BASE_FOUND ON FORCE BOOL)
   set(GSTREAMER010_INCLUDE_DIRS
-      ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/gstreamer-0.10
-      ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/glib-2.0
-      ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/libxml2
+      ${LIBS_PREBUILT_DIR}/include/gstreamer-0.10
+      ${LIBS_PREBUILT_DIR}/include/glib-2.0
+      ${LIBS_PREBUILT_DIR}/include/libxml2
       )
   # We don't need to explicitly link against gstreamer itself, because
   # LLMediaImplGStreamer probes for the system's copy at runtime.
diff --git a/indra/cmake/GooglePerfTools.cmake b/indra/cmake/GooglePerfTools.cmake
index 946fc6b375edc1599712b4bde9f2fda19876b4ec..6c784a3a76984be4e58e2a30eb9cc57cee83883d 100644
--- a/indra/cmake/GooglePerfTools.cmake
+++ b/indra/cmake/GooglePerfTools.cmake
@@ -4,7 +4,6 @@ include(Prebuilt)
 if (STANDALONE)
   include(FindGooglePerfTools)
 else (STANDALONE)
-  use_prebuilt_binary(google)
   if (WINDOWS)
     use_prebuilt_binary(google-perftools)
     set(TCMALLOC_LIBRARIES 
@@ -13,11 +12,11 @@ else (STANDALONE)
     set(GOOGLE_PERFTOOLS_FOUND "YES")
   endif (WINDOWS)
   if (LINUX)
+    use_prebuilt_binary(google-perftools)
     set(TCMALLOC_LIBRARIES tcmalloc)
-    set(STACKTRACE_LIBRARIES stacktrace)
     set(PROFILER_LIBRARIES profiler)
     set(GOOGLE_PERFTOOLS_INCLUDE_DIR
-        ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
+        ${LIBS_PREBUILT_DIR}/include)
     set(GOOGLE_PERFTOOLS_FOUND "YES")
   endif (LINUX)
 endif (STANDALONE)
diff --git a/indra/cmake/JPEG.cmake b/indra/cmake/JPEG.cmake
index 9514d59f64b459eb095028d6a457f00e144ee0c5..4f99efd60276218d50268fb068e7df1b58f6d7f6 100644
--- a/indra/cmake/JPEG.cmake
+++ b/indra/cmake/JPEG.cmake
@@ -12,10 +12,7 @@ else (STANDALONE)
   if (LINUX)
     set(JPEG_LIBRARIES jpeg)
   elseif (DARWIN)
-    set(JPEG_LIBRARIES
-      optimized ${ARCH_PREBUILT_DIRS_RELEASE}/liblljpeg.a
-      debug ${ARCH_PREBUILT_DIRS_DEBUG}/liblljpeg.a
-      )
+    set(JPEG_LIBRARIES jpeg)
   elseif (WINDOWS)
     set(JPEG_LIBRARIES jpeglib)
   endif (LINUX)
diff --git a/indra/cmake/JsonCpp.cmake b/indra/cmake/JsonCpp.cmake
index 7dd565be7cef495d842f30caf8e9c2191c94b5e2..499b00fb444328bfc46f2b2493a7de4b3216744d 100644
--- a/indra/cmake/JsonCpp.cmake
+++ b/indra/cmake/JsonCpp.cmake
@@ -11,12 +11,12 @@ else (STANDALONE)
   use_prebuilt_binary(jsoncpp)
   if (WINDOWS)
     set(JSONCPP_LIBRARIES 
-      debug json_vc80d
-      optimized json_vc80)
+      debug json_vc100debug_libmt.lib
+      optimized json_vc100_libmt)
   elseif (DARWIN)
-    set(JSONCPP_LIBRARIES json_mac-universal-gcc_libmt)
+    set(JSONCPP_LIBRARIES libjson_linux-gcc-4.0.1_libmt.a)
   elseif (LINUX)
-    set(JSONCPP_LIBRARIES jsoncpp)
+    set(JSONCPP_LIBRARIES libjson_linux-gcc-4.1.3_libmt.a)
   endif (WINDOWS)
-  set(JSONCPP_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/jsoncpp)
+  set(JSONCPP_INCLUDE_DIRS "${LIBS_PREBUILT_DIR}/include/jsoncpp" "${LIBS_PREBUILT_DIR}/include/json")
 endif (STANDALONE)
diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake
index cd0eada2d0dbddc0fa804cfe04731cd2bdff1b45..3f259f6382e078b92dff9fe223058e501df6f51a 100644
--- a/indra/cmake/LLAddBuildTest.cmake
+++ b/indra/cmake/LLAddBuildTest.cmake
@@ -1,6 +1,7 @@
 # -*- cmake -*-
 include(LLTestCommand)
 include(GoogleMock)
+include(Tut)
 
 MACRO(LL_ADD_PROJECT_UNIT_TESTS project sources)
   # Given a project name and a list of sourcefiles (with optional properties on each),
diff --git a/indra/cmake/LLKDU.cmake b/indra/cmake/LLKDU.cmake
index f5cbad03a6174607ae5e7f0d29e21b5181d3812c..e478b01f84ae872422c3c073dda80d9d6a6dd7a1 100644
--- a/indra/cmake/LLKDU.cmake
+++ b/indra/cmake/LLKDU.cmake
@@ -1,20 +1,21 @@
 # -*- cmake -*-
-include(Prebuilt)
 
-# USE_KDU can be set when launching cmake or develop.py as an option using the argument -DUSE_KDU:BOOL=ON
-# When building using proprietary binaries though (i.e. having access to LL private servers), we always build with KDU
-if (INSTALL_PROPRIETARY AND NOT STANDALONE)
-  set(USE_KDU ON)
-endif (INSTALL_PROPRIETARY AND NOT STANDALONE)
+# USE_KDU can be set when launching cmake as an option using the argument -DUSE_KDU:BOOL=ON
+# When building using proprietary binaries though (i.e. having access to LL private servers), 
+# we always build with KDU
+if (INSTALL_PROPRIETARY)
+  set(USE_KDU ON CACHE BOOL "Use Kakadu library.")
+endif (INSTALL_PROPRIETARY)
 
 if (USE_KDU)
+  include(Prebuilt)
   use_prebuilt_binary(kdu)
   if (WINDOWS)
     set(KDU_LIBRARY kdu.lib)
   else (WINDOWS)
     set(KDU_LIBRARY libkdu.a)
   endif (WINDOWS)
-  set(KDU_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/kdu)
+  set(KDU_INCLUDE_DIR ${AUTOBUILD_INSTALL_DIR}/include/kdu)
   set(LLKDU_INCLUDE_DIRS ${LIBS_OPEN_DIR}/llkdu)
   set(LLKDU_LIBRARIES llkdu)
 endif (USE_KDU)
diff --git a/indra/cmake/LLWindow.cmake b/indra/cmake/LLWindow.cmake
index a5b9cf47a425a113f210e488208196edc00580e2..b4bb9a078a9c8dbac63312638d2839842ac54aaa 100644
--- a/indra/cmake/LLWindow.cmake
+++ b/indra/cmake/LLWindow.cmake
@@ -18,7 +18,7 @@ else (STANDALONE)
     use_prebuilt_binary(SDL)
     set (SDL_FOUND TRUE)
     set (SDL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/i686-linux)
-    set (SDL_LIBRARY SDL)
+    set (SDL_LIBRARY SDL directfb fusion direct)
   endif (LINUX AND VIEWER)
 endif (STANDALONE)
 
diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake
index bca99caf2a521b0c4284c6cb36c449262f5a1857..07db6ab257eab7735bbf57896379afd2241ca55b 100644
--- a/indra/cmake/Linking.cmake
+++ b/indra/cmake/Linking.cmake
@@ -1,32 +1,43 @@
 # -*- cmake -*-
 
+include(Variables)
+
+
 if (NOT STANDALONE)
+  set(ARCH_PREBUILT_DIRS ${AUTOBUILD_INSTALL_DIR}/lib)
+  set(ARCH_PREBUILT_DIRS_RELEASE ${AUTOBUILD_INSTALL_DIR}/lib/release)
+  set(ARCH_PREBUILT_DIRS_DEBUG ${AUTOBUILD_INSTALL_DIR}/lib/debug)
   if (WINDOWS)
-    set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib)
-    set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/release)
-    set(ARCH_PREBUILT_DIRS_DEBUG ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib/debug)
-    set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged DLLs")
-    set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged executables")
+    set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs)
+    set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs)
   elseif (LINUX)
-    if (VIEWER)
-      set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release_client)
-    else (VIEWER)
-      set(ARCH_PREBUILT_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release)
-    endif (VIEWER)
-    set(ARCH_PREBUILT_DIRS_RELEASE ${ARCH_PREBUILT_DIRS})
-    set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS})
-    set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/lib CACHE FILEPATH "Location of staged .sos")
-    set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/bin CACHE FILEPATH "Location of staged executables")
+    set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/lib)
+    set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/bin)
   elseif (DARWIN)
-    set(ARCH_PREBUILT_DIRS_RELEASE ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/lib_release)
-    set(ARCH_PREBUILT_DIRS ${ARCH_PREBUILT_DIRS_RELEASE})
-    set(ARCH_PREBUILT_DIRS_DEBUG ${ARCH_PREBUILT_DIRS_RELEASE})
-    set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs CACHE FILEPATH "Location of staged DLLs")
-    set(EXE_STAGING_DIR "${CMAKE_BINARY_DIR}/sharedlibs/\$(CONFIGURATION)" CACHE FILEPATH "Location of staged executables")
+    set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs)
+    set(EXE_STAGING_DIR "${CMAKE_BINARY_DIR}/sharedlibs/\$(CONFIGURATION)")
   endif (WINDOWS)
 endif (NOT STANDALONE)
 
-link_directories(${ARCH_PREBUILT_DIRS})
+# Autobuild packages must provide 'release' versions of libraries, but may provide versions for
+# specific build types.  AUTOBUILD_LIBS_INSTALL_DIRS lists first the build type directory and then
+# the 'release' directory (as a default fallback).
+# *NOTE - we have to take special care to use CMAKE_CFG_INTDIR on IDE generators (like mac and
+# windows) and CMAKE_BUILD_TYPE on Makefile based generators (like linux).  The reason for this is
+# that CMAKE_BUILD_TYPE is essentially meaningless at configuration time for IDE generators and
+# CMAKE_CFG_INTDIR is meaningless at build time for Makefile generators
+if(WINDOWS OR DARWIN)
+  # the cmake xcode and VS generators implicitly append ${CMAKE_CFG_INTDIR} to the library paths for us
+  # fortunately both windows and darwin are case insensitive filesystems so this works.
+  set(AUTOBUILD_LIBS_INSTALL_DIRS "${AUTOBUILD_INSTALL_DIR}/lib/")
+else(WINDOWS OR DARWIN)
+  # else block is for linux and any other makefile based generators
+  string(TOLOWER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_LOWER)
+  set(AUTOBUILD_LIBS_INSTALL_DIRS ${AUTOBUILD_INSTALL_DIR}/lib/${CMAKE_BUILD_TYPE_LOWER})
+endif(WINDOWS OR DARWIN)
+
+list(APPEND AUTOBUILD_LIBS_INSTALL_DIRS ${ARCH_PREBUILT_DIRS_RELEASE})
+link_directories(${AUTOBUILD_LIBS_INSTALL_DIRS})
 
 if (LINUX)
   set(DL_LIBRARY dl)
diff --git a/indra/cmake/MonoEmbed.cmake b/indra/cmake/MonoEmbed.cmake
index 0f1f23309c35200b8f3eb063eb10212b83716fc9..30890aed217ad31b262fe4803ba716fae1617df5 100644
--- a/indra/cmake/MonoEmbed.cmake
+++ b/indra/cmake/MonoEmbed.cmake
@@ -37,9 +37,9 @@ IF (DARWIN)
 
 ELSE (DARWIN)
 
-  SET(MONO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)  
+  SET(MONO_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)  
   SET(GLIB_2_0_PLATFORM_INCLUDE_DIR
-    ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/glib-2.0)
+    ${LIBS_PREBUILT_DIR}/include/glib-2.0)
   SET(GLIB_2_0_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/glib-2.0)
 
   INCLUDE_DIRECTORIES(
diff --git a/indra/cmake/MySQL.cmake b/indra/cmake/MySQL.cmake
index e591fbc3d83e4a85d686dc558cc07eaa3da96f7a..218482449dc0daa6a02596ebf4de274cbb7d2114 100644
--- a/indra/cmake/MySQL.cmake
+++ b/indra/cmake/MySQL.cmake
@@ -7,7 +7,7 @@ use_prebuilt_binary(mysql)
 if (LINUX)
   if (WORD_SIZE EQUAL 32 OR DEBIAN_VERSION STREQUAL "3.1")
     set(MYSQL_LIBRARIES mysqlclient)
-    set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
+    set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
   else (WORD_SIZE EQUAL 32 OR DEBIAN_VERSION STREQUAL "3.1")
     # Use the native MySQL library on a 64-bit system.
     set(MYSQL_FIND_QUIETLY ON)
@@ -16,9 +16,9 @@ if (LINUX)
   endif (WORD_SIZE EQUAL 32 OR DEBIAN_VERSION STREQUAL "3.1")
 elseif (WINDOWS)
   set(MYSQL_LIBRARIES mysqlclient)
-  set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
+  set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
 elseif (DARWIN)
-  set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
+  set(MYSQL_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
   set(MYSQL_LIBRARIES
     optimized ${ARCH_PREBUILT_DIRS_RELEASE}/libmysqlclient.a
     debug ${ARCH_PREBUILT_DIRS_DEBUG}/libmysqlclient.a
diff --git a/indra/cmake/OPENAL.cmake b/indra/cmake/OPENAL.cmake
index d01c680ed1119064c50906e5cff13d2ddad18e53..a3e1fb924edfb7930db00ea06b74e0e02a960e91 100644
--- a/indra/cmake/OPENAL.cmake
+++ b/indra/cmake/OPENAL.cmake
@@ -9,18 +9,26 @@ else (LINUX)
 endif (LINUX)
 
 if (OPENAL)
+  set(OPENAL_LIB_INCLUDE_DIRS "${LIBS_PREBUILT_DIR}/include/AL")
   if (STANDALONE)
     include(FindPkgConfig)
     include(FindOpenAL)
     pkg_check_modules(OPENAL_LIB REQUIRED openal)
     pkg_check_modules(FREEALUT_LIB REQUIRED freealut)
   else (STANDALONE)
-    use_prebuilt_binary(openal-soft)
+    use_prebuilt_binary(openal_soft)
   endif (STANDALONE)
-  set(OPENAL_LIBRARIES 
-    openal
-    alut
+  if(WINDOWS)
+    set(OPENAL_LIBRARIES 
+      OpenAL32
+      alut
     )
+  else()
+    set(OPENAL_LIBRARIES 
+      openal
+      alut
+    )
+  endif()
 endif (OPENAL)
 
 if (OPENAL)
diff --git a/indra/cmake/OpenGL.cmake b/indra/cmake/OpenGL.cmake
index 6a2b6811af6f9799c61625e0d3590cca2d64cc28..661666f00d1317c74cbc1902a3fdf8fe04de7aa8 100644
--- a/indra/cmake/OpenGL.cmake
+++ b/indra/cmake/OpenGL.cmake
@@ -5,5 +5,5 @@ if (NOT STANDALONE)
   use_prebuilt_binary(GL)
   # possible glh_linear should have its own .cmake file instead
   use_prebuilt_binary(glh_linear)
-  set(GLEXT_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
+  set(GLEXT_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
 endif (NOT STANDALONE)
diff --git a/indra/cmake/OpenSSL.cmake b/indra/cmake/OpenSSL.cmake
index 81584c09ea6d3499dfee6ff2e1a5943ec93f82d1..5982ee9a49833c8eb4db5af3901a110c2273c6e2 100644
--- a/indra/cmake/OpenSSL.cmake
+++ b/indra/cmake/OpenSSL.cmake
@@ -13,11 +13,11 @@ else (STANDALONE)
   else (WINDOWS)
     set(OPENSSL_LIBRARIES ssl)
   endif (WINDOWS)
-  set(OPENSSL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include)
+  set(OPENSSL_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
 endif (STANDALONE)
 
 if (LINUX)
   set(CRYPTO_LIBRARIES crypto)
 elseif (DARWIN)
-  set(CRYPTO_LIBRARIES llcrypto)
+  set(CRYPTO_LIBRARIES crypto)
 endif (LINUX)
diff --git a/indra/cmake/PNG.cmake b/indra/cmake/PNG.cmake
index f6522d9e2fd397acfcf594d0a012496b4bde5c02..913c5756727cde3dfa901da43353fa39423d1370 100644
--- a/indra/cmake/PNG.cmake
+++ b/indra/cmake/PNG.cmake
@@ -8,6 +8,14 @@ if (STANDALONE)
   include(FindPNG)
 else (STANDALONE)
   use_prebuilt_binary(libpng)
-  set(PNG_LIBRARIES png12)
-  set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng12)
+  if (WINDOWS)
+    set(PNG_LIBRARIES libpng15)
+    set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng15)
+  elseif(DARWIN)
+    set(PNG_LIBRARIES png15)
+    set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng15)
+  else()
+    set(PNG_LIBRARIES png15)
+    set(PNG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/libpng15)
+  endif()
 endif (STANDALONE)
diff --git a/indra/cmake/Prebuilt.cmake b/indra/cmake/Prebuilt.cmake
index a91519278ca3162f000ba39e9f857d7ee17d4085..1b60d176f11d141269c664a50b71a189a2e1448a 100644
--- a/indra/cmake/Prebuilt.cmake
+++ b/indra/cmake/Prebuilt.cmake
@@ -1,36 +1,31 @@
 # -*- cmake -*-
 
-include(Python)
-include(FindSCP)
+include(FindAutobuild)
 
 macro (use_prebuilt_binary _binary)
-  if (NOT STANDALONE)
+  if (NOT DEFINED STANDALONE_${_binary})
+    set(STANDALONE_${_binary} ${STANDALONE})
+  endif (NOT DEFINED STANDALONE_${_binary})
+
+  if (NOT STANDALONE_${_binary})
     if(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed)
       if(INSTALL_PROPRIETARY)
         include(FindSCP)
-        if(DEBUG_PREBUILT)
-          message("cd ${SCRIPTS_DIR} && ${PYTHON_EXECUTABLE} install.py --install-dir=${CMAKE_SOURCE_DIR}/.. --scp=${SCP_EXECUTABLE} ${_binary}")
-        endif(DEBUG_PREBUILT)
-        execute_process(COMMAND ${PYTHON_EXECUTABLE}
-          install.py 
-          --install-dir=${CMAKE_SOURCE_DIR}/..
-          --scp=${SCP_EXECUTABLE}
-          ${_binary}
-          WORKING_DIRECTORY ${SCRIPTS_DIR}
-          RESULT_VARIABLE ${_binary}_installed
-          )
-      else(INSTALL_PROPRIETARY)
-        if(DEBUG_PREBUILT)
-          message("cd ${SCRIPTS_DIR} && ${PYTHON_EXECUTABLE} install.py --install-dir=${CMAKE_SOURCE_DIR}/.. ${_binary}")
-        endif(DEBUG_PREBUILT)
-        execute_process(COMMAND ${PYTHON_EXECUTABLE}
-          install.py 
-          --install-dir=${CMAKE_SOURCE_DIR}/..
-          ${_binary}
-          WORKING_DIRECTORY ${SCRIPTS_DIR}
-          RESULT_VARIABLE ${_binary}_installed
-          )
       endif(INSTALL_PROPRIETARY)
+	  if(DEBUG_PREBUILT)
+		message("cd ${CMAKE_SOURCE_DIR} && ${AUTOBUILD_EXECUTABLE} install
+		--install-dir=${AUTOBUILD_INSTALL_DIR}
+		--skip-license-check
+		${_binary} ")
+	  endif(DEBUG_PREBUILT)
+	  execute_process(COMMAND "${AUTOBUILD_EXECUTABLE}"
+		install
+		--install-dir=${AUTOBUILD_INSTALL_DIR}
+		--skip-license-check
+		${_binary}
+		WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+		RESULT_VARIABLE ${_binary}_installed
+		)
       file(WRITE ${CMAKE_BINARY_DIR}/temp/${_binary}_installed "${${_binary}_installed}")
     else(${CMAKE_BINARY_DIR}/temp/sentinel_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/${_binary}_installed)
       set(${_binary}_installed 0)
@@ -40,5 +35,5 @@ macro (use_prebuilt_binary _binary)
               "Failed to download or unpack prebuilt '${_binary}'."
               " Process returned ${${_binary}_installed}.")
     endif (NOT ${_binary}_installed EQUAL 0)
-  endif (NOT STANDALONE)
+  endif (NOT STANDALONE_${_binary})
 endmacro (use_prebuilt_binary _binary)
diff --git a/indra/cmake/QuickTimePlugin.cmake b/indra/cmake/QuickTimePlugin.cmake
index 02f432e3c10a486bea7e35221116fc765a263a32..012f4e20d8d9d079422872022eab7b3a037f394f 100644
--- a/indra/cmake/QuickTimePlugin.cmake
+++ b/indra/cmake/QuickTimePlugin.cmake
@@ -33,7 +33,7 @@ elseif (WINDOWS)
   endif (DEBUG_QUICKTIME_LIBRARY AND RELEASE_QUICKTIME_LIBRARY)
   
   include_directories(
-    ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/quicktime
+    ${LIBS_PREBUILT_DIR}/include/quicktime
     "${QUICKTIME_SDK_DIR}\\CIncludes"
     )
 endif (DARWIN)
diff --git a/indra/cmake/TemplateCheck.cmake b/indra/cmake/TemplateCheck.cmake
index 90d58d93ad4bd652f0260d48f03ec9e04239edea..2fada2eda979e9eb17072bd54ee554ed6446a641 100644
--- a/indra/cmake/TemplateCheck.cmake
+++ b/indra/cmake/TemplateCheck.cmake
@@ -5,11 +5,10 @@ include(Python)
 macro (check_message_template _target)
   add_custom_command(
       TARGET ${_target}
-      POST_BUILD
+      PRE_LINK
       COMMAND ${PYTHON_EXECUTABLE}
-      ARGS ${SCRIPTS_DIR}/md5check.py
-           3f19d130400c547de36278a6b6f9b028
-           ${SCRIPTS_DIR}/messages/message_template.msg
+      ARGS ${SCRIPTS_DIR}/template_verifier.py
+           --mode=development --cache_master --master_url=${TEMPLATE_VERIFIER_MASTER_URL} ${TEMPLATE_VERIFIER_OPTIONS}
       COMMENT "Verifying message template - See http://wiki.secondlife.com/wiki/Template_verifier.py"
       )
 endmacro (check_message_template)
diff --git a/indra/cmake/UI.cmake b/indra/cmake/UI.cmake
index f529f5b6440a3834953b756289cc7fd6888cdb5d..91e5258fb704ed7169e4d5e7bba61b7ca652f53b 100644
--- a/indra/cmake/UI.cmake
+++ b/indra/cmake/UI.cmake
@@ -51,11 +51,11 @@ else (STANDALONE)
   endif (LINUX)
 
   include_directories (
-      ${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include
+      ${LIBS_PREBUILT_DIR}/include
       ${LIBS_PREBUILT_DIR}/include
       )
   foreach(include ${${LL_ARCH}_INCLUDES})
-      include_directories(${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/include/${include})
+      include_directories(${LIBS_PREBUILT_DIR}/include/${include})
   endforeach(include)
 endif (STANDALONE)
 
diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake
index 5dc0cabf03e38da22767f435c0d9a4e6949a9f3c..03428691cfcd815744b055a28925eecc68a1acf2 100644
--- a/indra/cmake/Variables.cmake
+++ b/indra/cmake/Variables.cmake
@@ -17,6 +17,10 @@
 
 # Relative and absolute paths to subtrees.
 
+if(NOT DEFINED COMMON_CMAKE_DIR)
+    set(COMMON_CMAKE_DIR "${CMAKE_SOURCE_DIR}/cmake")
+endif(NOT DEFINED COMMON_CMAKE_DIR)
+
 set(LIBS_CLOSED_PREFIX)
 set(LIBS_OPEN_PREFIX)
 set(LIBS_SERVER_PREFIX)
@@ -26,21 +30,39 @@ set(VIEWER_PREFIX)
 set(INTEGRATION_TESTS_PREFIX)
 set(LL_TESTS ON CACHE BOOL "Build and run unit and integration tests (disable for build timing runs to reduce variation")
 
-set(LIBS_CLOSED_DIR ${CMAKE_SOURCE_DIR}/${LIBS_CLOSED_PREFIX})
-set(LIBS_OPEN_DIR ${CMAKE_SOURCE_DIR}/${LIBS_OPEN_PREFIX})
+if(LIBS_CLOSED_DIR)
+  file(TO_CMAKE_PATH "${LIBS_CLOSED_DIR}" LIBS_CLOSED_DIR)
+else(LIBS_CLOSED_DIR)
+  set(LIBS_CLOSED_DIR ${CMAKE_SOURCE_DIR}/${LIBS_CLOSED_PREFIX})
+endif(LIBS_CLOSED_DIR)
+if(LIBS_COMMON_DIR)
+  file(TO_CMAKE_PATH "${LIBS_COMMON_DIR}" LIBS_COMMON_DIR)
+else(LIBS_COMMON_DIR)
+  set(LIBS_COMMON_DIR ${CMAKE_SOURCE_DIR}/${LIBS_OPEN_PREFIX})
+endif(LIBS_COMMON_DIR)
+set(LIBS_OPEN_DIR ${LIBS_COMMON_DIR})
+
 set(LIBS_SERVER_DIR ${CMAKE_SOURCE_DIR}/${LIBS_SERVER_PREFIX})
 set(SCRIPTS_DIR ${CMAKE_SOURCE_DIR}/${SCRIPTS_PREFIX})
 set(SERVER_DIR ${CMAKE_SOURCE_DIR}/${SERVER_PREFIX})
 set(VIEWER_DIR ${CMAKE_SOURCE_DIR}/${VIEWER_PREFIX})
 
-set(LIBS_PREBUILT_DIR ${CMAKE_SOURCE_DIR}/../libraries CACHE PATH
+set(AUTOBUILD_INSTALL_DIR ${CMAKE_BINARY_DIR}/packages)
+
+set(LIBS_PREBUILT_DIR ${AUTOBUILD_INSTALL_DIR} CACHE PATH
     "Location of prebuilt libraries.")
 
 if (EXISTS ${CMAKE_SOURCE_DIR}/Server.cmake)
   # We use this as a marker that you can try to use the proprietary libraries.
   set(INSTALL_PROPRIETARY ON CACHE BOOL "Install proprietary binaries")
 endif (EXISTS ${CMAKE_SOURCE_DIR}/Server.cmake)
+set(TEMPLATE_VERIFIER_OPTIONS "" CACHE STRING "Options for scripts/template_verifier.py")
+set(TEMPLATE_VERIFIER_MASTER_URL "http://bitbucket.org/lindenlab/master-message-template/raw/tip/message_template.msg" CACHE STRING "Location of the master message template")
 
+if (NOT CMAKE_BUILD_TYPE)
+  set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
+      "Build type.  One of: Debug Release RelWithDebInfo" FORCE)
+endif (NOT CMAKE_BUILD_TYPE)
 
 if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
   set(WINDOWS ON BOOL FORCE)
@@ -54,20 +76,19 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
   set(LINUX ON BOOl FORCE)
 
   # If someone has specified a word size, use that to determine the
-  # architecture.  Otherwise, let the compiler specify the word size.
-  # Using uname will break under chroots and other cross arch compiles. RC
+  # architecture.  Otherwise, let the architecture specify the word size.
   if (WORD_SIZE EQUAL 32)
     set(ARCH i686)
   elseif (WORD_SIZE EQUAL 64)
     set(ARCH x86_64)
   else (WORD_SIZE EQUAL 32)
-    if(CMAKE_SIZEOF_VOID_P MATCHES 4)
-      set(ARCH i686)
-      set(WORD_SIZE 32)
-    else(CMAKE_SIZEOF_VOID_P MATCHES 4)
-      set(ARCH x86_64)
+    execute_process(COMMAND uname -m COMMAND sed s/i.86/i686/
+                    OUTPUT_VARIABLE ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
+    if (ARCH STREQUAL x86_64)
       set(WORD_SIZE 64)
-    endif(CMAKE_SIZEOF_VOID_P MATCHES 4)
+    else (ARCH STREQUAL x86_64)
+      set(WORD_SIZE 32)
+    endif (ARCH STREQUAL x86_64)
   endif (WORD_SIZE EQUAL 32)
 
   set(LL_ARCH ${ARCH}_linux)
@@ -76,25 +97,12 @@ endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
 
 if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
   set(DARWIN 1)
-
-  # NOTE: If specifying a different SDK with CMAKE_OSX_SYSROOT at configure
-  # time you should also specify CMAKE_OSX_DEPLOYMENT_TARGET explicitly,
-  # otherwise CMAKE_OSX_SYSROOT will be overridden here. We can't just check
-  # for it being unset, as it gets set to the system default :(
-
-  # Default to building against the 10.4 SDK if no deployment target is
-  # specified.
-  if (NOT CMAKE_OSX_DEPLOYMENT_TARGET)
-    # NOTE: setting -isysroot is NOT adequate: http://lists.apple.com/archives/Xcode-users/2007/Oct/msg00696.html
-    # see http://public.kitware.com/Bug/view.php?id=9959 + poppy
-    set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk)
-    set(CMAKE_OSX_DEPLOYMENT_TARGET 10.4)
-  endif (NOT CMAKE_OSX_DEPLOYMENT_TARGET)
-
-  # GCC 4.2 is incompatible with the MacOSX 10.4 SDK
-  if (${CMAKE_OSX_SYSROOT} MATCHES "10.4u")
-    set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "4.0")
-  endif (${CMAKE_OSX_SYSROOT} MATCHES "10.4u")
+  
+  # To support a different SDK update these Xcode settings:
+  set(CMAKE_OSX_DEPLOYMENT_TARGET 10.5)
+  set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk)
+  set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "4.2")
+  set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT dwarf-with-dsym)
 
   # NOTE: To attempt an i386/PPC Universal build, add this on the configure line:
   # -DCMAKE_OSX_ARCHITECTURES:STRING='i386;ppc'
@@ -125,7 +133,9 @@ set(VIEWER ON CACHE BOOL "Build Second Life viewer.")
 set(VIEWER_CHANNEL "LindenDeveloper" CACHE STRING "Viewer Channel Name")
 set(VIEWER_LOGIN_CHANNEL ${VIEWER_CHANNEL} CACHE STRING "Fake login channel for A/B Testing")
 
+set(VERSION_BUILD "0" CACHE STRING "Revision number passed in from the outside")
 set(STANDALONE OFF CACHE BOOL "Do not use Linden-supplied prebuilt libraries.")
+set(UNATTENDED OFF CACHE BOOL "Should be set to ON for building with VC Express editions.")
 
 if (NOT STANDALONE AND EXISTS ${CMAKE_SOURCE_DIR}/llphysics)
     set(SERVER ON CACHE BOOL "Build Second Life server software.")
@@ -141,6 +151,7 @@ For more information, please see JIRA DEV-14943 - Cmake Linux cannot build both
 endif (LINUX AND SERVER AND VIEWER)
 
 
-set(USE_PRECOMPILED_HEADERS ON CACHE BOOL "Enable use of precompiled header directives where supported.")
+set(USE_PRECOMPILED_HEADERS OFF CACHE BOOL "Enable use of precompiled header directives where supported.")
 
 source_group("CMake Rules" FILES CMakeLists.txt)
+
diff --git a/indra/cmake/WebKitLibPlugin.cmake b/indra/cmake/WebKitLibPlugin.cmake
index 1f5b0f5d84b65d8dd2bd937cc8f7bec1c4ef5a50..0f5a81c0203e4b1c867ad30fa278d7c4e7118c9b 100644
--- a/indra/cmake/WebKitLibPlugin.cmake
+++ b/indra/cmake/WebKitLibPlugin.cmake
@@ -62,16 +62,13 @@ elseif (LINUX)
   else (STANDALONE)
     set(WEBKIT_PLUGIN_LIBRARIES
         llqtwebkit
-
-        qgif
-        qjpeg
-
         QtWebKit
         QtOpenGL
         QtNetwork
         QtGui
         QtCore
-
+        qgif
+        qjpeg
         jpeg
         fontconfig
         X11
diff --git a/indra/cmake/XmlRpcEpi.cmake b/indra/cmake/XmlRpcEpi.cmake
index 107d1926bae597cbbc702923a53b3efa5320c107..5bd48482450415f829336eb962d8d141d4611ab4 100644
--- a/indra/cmake/XmlRpcEpi.cmake
+++ b/indra/cmake/XmlRpcEpi.cmake
@@ -9,7 +9,10 @@ if (STANDALONE)
 else (STANDALONE)
     use_prebuilt_binary(xmlrpc-epi)
     if (WINDOWS)
-        set(XMLRPCEPI_LIBRARIES xmlrpcepi)
+        set(XMLRPCEPI_LIBRARIES 
+            debug xmlrpc-epid
+            optimized xmlrpc-epi
+        )
     else (WINDOWS)
         set(XMLRPCEPI_LIBRARIES xmlrpc-epi)
     endif (WINDOWS)
diff --git a/indra/cmake/run_build_test.py b/indra/cmake/run_build_test.py
old mode 100644
new mode 100755
diff --git a/indra/develop.py b/indra/develop.py
deleted file mode 100755
index d9a66352f339f6b03e450da20fcf1af4048c6998..0000000000000000000000000000000000000000
--- a/indra/develop.py
+++ /dev/null
@@ -1,863 +0,0 @@
-#!/usr/bin/env python
-"""\
-@file develop.py
-@authors Bryan O'Sullivan, Mark Palange, Aaron Brashears
-@brief Fire and forget script to appropriately configure cmake for SL.
-
-$LicenseInfo:firstyear=2007&license=viewerlgpl$
-Second Life Viewer Source Code
-Copyright (C) 2007-2011, Linden Research, Inc.
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation;
-version 2.1 of the License only.
-
-This library 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
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-
-Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
-$/LicenseInfo$
-"""
-
-
-import errno
-import getopt
-import os
-import random
-import re
-import shutil
-import socket
-import sys
-import commands
-import subprocess
-
-class CommandError(Exception):
-    pass
-
-
-def mkdir(path):
-    try:
-        os.mkdir(path)
-        return path
-    except OSError, err:
-        if err.errno != errno.EEXIST or not os.path.isdir(path):
-            raise
-
-def getcwd():
-    cwd = os.getcwd()
-    if 'a' <= cwd[0] <= 'z' and cwd[1] == ':':
-        # CMake wants DOS drive letters to be in uppercase.  The above
-        # condition never asserts on platforms whose full path names
-        # always begin with a slash, so we don't need to test whether
-        # we are running on Windows.
-        cwd = cwd[0].upper() + cwd[1:]
-    return cwd
-
-def quote(opts):
-    return '"' + '" "'.join([ opt.replace('"', '') for opt in opts ]) + '"'
-
-class PlatformSetup(object):
-    generator = None
-    build_types = {}
-    for t in ('Debug', 'Release', 'RelWithDebInfo'):
-        build_types[t.lower()] = t
-
-    build_type = build_types['relwithdebinfo']
-    standalone = 'OFF'
-    unattended = 'OFF'
-    universal = 'OFF'
-    project_name = 'SecondLife'
-    distcc = True
-    cmake_opts = []
-    word_size = 32
-    using_express = False
-
-    def __init__(self):
-        self.script_dir = os.path.realpath(
-            os.path.dirname(__import__(__name__).__file__))
-
-    def os(self):
-        '''Return the name of the OS.'''
-
-        raise NotImplemented('os')
-
-    def arch(self):
-        '''Return the CPU architecture.'''
-
-        return None
-
-    def platform(self):
-        '''Return a stringified two-tuple of the OS name and CPU
-        architecture.'''
-
-        ret = self.os()
-        if self.arch():
-            ret += '-' + self.arch()
-        return ret 
-
-    def build_dirs(self):
-        '''Return the top-level directories in which builds occur.
-
-        This can return more than one directory, e.g. if doing a
-        32-bit viewer and server build on Linux.'''
-
-        return ['build-' + self.platform()]
-
-    def cmake_commandline(self, src_dir, build_dir, opts, simple):
-        '''Return the command line to run cmake with.'''
-
-        args = dict(
-            dir=src_dir,
-            generator=self.generator,
-            opts=quote(opts),
-            standalone=self.standalone,
-            unattended=self.unattended,
-            word_size=self.word_size,
-            type=self.build_type.upper(),
-            )
-        #if simple:
-        #    return 'cmake %(opts)s %(dir)r' % args
-        return ('cmake -DCMAKE_BUILD_TYPE:STRING=%(type)s '
-                '-DSTANDALONE:BOOL=%(standalone)s '
-                '-DUNATTENDED:BOOL=%(unattended)s '
-                '-DWORD_SIZE:STRING=%(word_size)s '
-                '-G %(generator)r %(opts)s %(dir)r' % args)
-
-    def run_cmake(self, args=[]):
-        '''Run cmake.'''
-
-        # do a sanity check to make sure we have a generator
-        if not hasattr(self, 'generator'):
-            raise "No generator available for '%s'" % (self.__name__,)
-        cwd = getcwd()
-        created = []
-        try:
-            for d in self.build_dirs():
-                simple = True
-                if mkdir(d):
-                    created.append(d)
-                    simple = False
-                try:
-                    os.chdir(d)
-                    cmd = self.cmake_commandline(cwd, d, args, simple)
-                    print 'Running %r in %r' % (cmd, d)
-                    self.run(cmd, 'cmake')
-                finally:
-                    os.chdir(cwd)
-        except:
-            # If we created a directory in which to run cmake and
-            # something went wrong, the directory probably just
-            # contains garbage, so delete it.
-            os.chdir(cwd)
-            for d in created:
-                print 'Cleaning %r' % d
-                shutil.rmtree(d)
-            raise
-
-    def parse_build_opts(self, arguments):
-        opts, targets = getopt.getopt(arguments, 'o:', ['option='])
-        build_opts = []
-        for o, a in opts:
-            if o in ('-o', '--option'):
-                build_opts.append(a)
-        return build_opts, targets
-
-    def run_build(self, opts, targets):
-        '''Build the default targets for this platform.'''
-
-        raise NotImplemented('run_build')
-
-    def cleanup(self):
-        '''Delete all build directories.'''
-
-        cleaned = 0
-        for d in self.build_dirs():
-            if os.path.isdir(d):
-                print 'Cleaning %r' % d
-                shutil.rmtree(d)
-                cleaned += 1
-        if not cleaned:
-            print 'Nothing to clean up!'
-
-    def is_internal_tree(self):
-        '''Indicate whether we are building in an internal source tree.'''
-
-        return os.path.isdir(os.path.join(self.script_dir, 'newsim'))
-
-    def find_in_path(self, name, defval=None, basename=False):
-        for ext in self.exe_suffixes:
-            name_ext = name + ext
-            if os.sep in name_ext:
-                path = os.path.abspath(name_ext)
-                if os.access(path, os.X_OK):
-                    return [basename and os.path.basename(path) or path]
-            for p in os.getenv('PATH', self.search_path).split(os.pathsep):
-                path = os.path.join(p, name_ext)
-                if os.access(path, os.X_OK):
-                    return [basename and os.path.basename(path) or path]
-        if defval:
-            return [defval]
-        return []
-
-
-class UnixSetup(PlatformSetup):
-    '''Generic Unixy build instructions.'''
-
-    search_path = '/usr/bin:/usr/local/bin'
-    exe_suffixes = ('',)
-
-    def __init__(self):
-        super(UnixSetup, self).__init__()
-        self.generator = 'Unix Makefiles'
-
-    def os(self):
-        return 'unix'
-
-    def arch(self):
-        cpu = os.uname()[-1]
-        if cpu.endswith('386'):
-            cpu = 'i386'
-        elif cpu.endswith('86'):
-            cpu = 'i686'
-        elif cpu in ('athlon',):
-            cpu = 'i686'
-        elif cpu == 'Power Macintosh':
-            cpu = 'ppc'
-        elif cpu == 'x86_64' and self.word_size == 32:
-            cpu = 'i686'
-        return cpu
-
-    def run(self, command, name=None):
-        '''Run a program.  If the program fails, raise an exception.'''
-        sys.stdout.flush()
-        ret = os.system(command)
-        if ret:
-            if name is None:
-                name = command.split(None, 1)[0]
-            if os.WIFEXITED(ret):
-                st = os.WEXITSTATUS(ret)
-                if st == 127:
-                    event = 'was not found'
-                else:
-                    event = 'exited with status %d' % st
-            elif os.WIFSIGNALED(ret):
-                event = 'was killed by signal %d' % os.WTERMSIG(ret)
-            else:
-                event = 'died unexpectedly (!?) with 16-bit status %d' % ret
-            raise CommandError('the command %r %s' %
-                               (name, event))
-
-
-class LinuxSetup(UnixSetup):
-    def __init__(self):
-        super(LinuxSetup, self).__init__()
-        try:
-            self.debian_sarge = open('/etc/debian_version').read().strip() == '3.1'
-        except:
-            self.debian_sarge = False
-
-    def os(self):
-        return 'linux'
-
-    def build_dirs(self):
-        # Only build the server code if we have it.
-        platform_build = '%s-%s' % (self.platform(), self.build_type.lower())
-
-        if self.arch() == 'i686' and self.is_internal_tree():
-            return ['viewer-' + platform_build, 'server-' + platform_build]
-        elif self.arch() == 'x86_64' and self.is_internal_tree():
-            # the viewer does not build in 64bit -- kdu5 issues
-            # we can either use openjpeg, or overhaul our viewer to handle kdu5 or higher
-            # doug knows about kdu issues
-            return ['server-' + platform_build]
-        else:
-            return ['viewer-' + platform_build]
-
-    def cmake_commandline(self, src_dir, build_dir, opts, simple):
-        args = dict(
-            dir=src_dir,
-            generator=self.generator,
-            opts=quote(opts),
-            standalone=self.standalone,
-            unattended=self.unattended,
-            type=self.build_type.upper(),
-            project_name=self.project_name,
-            word_size=self.word_size,
-            )
-        if not self.is_internal_tree():
-            args.update({'cxx':'g++', 'server':'OFF', 'viewer':'ON'})
-        else:
-            if self.distcc:
-                distcc = self.find_in_path('distcc')
-                baseonly = True
-            else:
-                distcc = []
-                baseonly = False
-            if 'server' in build_dir:
-                gcc = distcc + self.find_in_path(
-                    self.debian_sarge and 'g++-3.3' or 'g++-4.1',
-                    'g++', baseonly)
-                args.update({'cxx': ' '.join(gcc), 'server': 'ON',
-                             'viewer': 'OFF'})
-            else:
-                gcc41 = distcc + self.find_in_path('g++-4.1', 'g++', baseonly)
-                args.update({'cxx': ' '.join(gcc41),
-                             'server': 'OFF',
-                             'viewer': 'ON'})
-        cmd = (('cmake -DCMAKE_BUILD_TYPE:STRING=%(type)s '
-                '-G %(generator)r -DSERVER:BOOL=%(server)s '
-                '-DVIEWER:BOOL=%(viewer)s -DSTANDALONE:BOOL=%(standalone)s '
-                '-DUNATTENDED:BOOL=%(unattended)s '
-                '-DWORD_SIZE:STRING=%(word_size)s '
-                '-DROOT_PROJECT_NAME:STRING=%(project_name)s '
-                '%(opts)s %(dir)r')
-               % args)
-        if 'CXX' not in os.environ:
-            args.update({'cmd':cmd})
-            cmd = ('CXX=%(cxx)r %(cmd)s' % args)
-        return cmd
-
-    def run_build(self, opts, targets):
-        job_count = None
-
-        for i in range(len(opts)):
-            if opts[i].startswith('-j'):
-                try:
-                    job_count = int(opts[i][2:])
-                except ValueError:
-                    try:
-                        job_count = int(opts[i+1])
-                    except ValueError:
-                        job_count = True
-
-        def get_cpu_count():
-            count = 0
-            for line in open('/proc/cpuinfo'):
-                if re.match(r'processor\s*:', line):
-                    count += 1
-            return count
-
-        def localhost():
-            count = get_cpu_count()
-            return 'localhost/' + str(count), count
-
-        def get_distcc_hosts():
-            try:
-                hosts = []
-                name = os.getenv('DISTCC_DIR', '/etc/distcc') + '/hosts'
-                for l in open(name):
-                    l = l[l.find('#')+1:].strip()
-                    if l: hosts.append(l)
-                return hosts
-            except IOError:
-                return (os.getenv('DISTCC_HOSTS', '').split() or
-                        [localhost()[0]])
-
-        def count_distcc_hosts():
-            cpus = 0
-            hosts = 0
-            for host in get_distcc_hosts():
-                m = re.match(r'.*/(\d+)', host)
-                hosts += 1
-                cpus += m and int(m.group(1)) or 1
-            return hosts, cpus
-
-        def mk_distcc_hosts(basename, range, num_cpus):
-            '''Generate a list of LL-internal machines to build on.'''
-            loc_entry, cpus = localhost()
-            hosts = [loc_entry]
-            dead = []
-            stations = [s for s in xrange(range) if s not in dead]
-            random.shuffle(stations)
-            hosts += ['%s%d.lindenlab.com/%d,lzo' % (basename, s, num_cpus) for s in stations]
-            cpus += 2 * len(stations)
-            return ' '.join(hosts), cpus
-
-        if job_count is None:
-            hosts, job_count = count_distcc_hosts()
-            hostname = socket.gethostname()
-            if hosts == 1:
-                if hostname.startswith('station'):
-                    hosts, job_count = mk_distcc_hosts('station', 36, 2)
-                    os.environ['DISTCC_HOSTS'] = hosts
-                if hostname.startswith('eniac'):
-                    hosts, job_count = mk_distcc_hosts('eniac', 71, 2)
-                    os.environ['DISTCC_HOSTS'] = hosts
-            if hostname.startswith('build'):
-                max_jobs = 6
-            else:
-                max_jobs = 12
-            if job_count > max_jobs:
-                job_count = max_jobs;
-            opts.extend(['-j', str(job_count)])
-
-        if targets:
-            targets = ' '.join(targets)
-        else:
-            targets = 'all'
-
-        for d in self.build_dirs():
-            cmd = 'make -C %r %s %s' % (d, ' '.join(opts), targets)
-            print 'Running %r' % cmd
-            self.run(cmd)
-
-        
-class DarwinSetup(UnixSetup):
-    def __init__(self):
-        super(DarwinSetup, self).__init__()
-        self.generator = 'Xcode'
-
-    def os(self):
-        return 'darwin'
-
-    def arch(self):
-        if self.universal == 'ON':
-            return 'universal'
-        else:
-            return UnixSetup.arch(self)
-
-    def cmake_commandline(self, src_dir, build_dir, opts, simple):
-        args = dict(
-            dir=src_dir,
-            generator=self.generator,
-            opts=quote(opts),
-            standalone=self.standalone,
-            word_size=self.word_size,
-            unattended=self.unattended,
-            project_name=self.project_name,
-            universal=self.universal,
-            type=self.build_type.upper(),
-            )
-        if self.universal == 'ON':
-            args['universal'] = '-DCMAKE_OSX_ARCHITECTURES:STRING=\'i386;ppc\''
-        #if simple:
-        #    return 'cmake %(opts)s %(dir)r' % args
-        return ('cmake -G %(generator)r '
-                '-DCMAKE_BUILD_TYPE:STRING=%(type)s '
-                '-DSTANDALONE:BOOL=%(standalone)s '
-                '-DUNATTENDED:BOOL=%(unattended)s '
-                '-DWORD_SIZE:STRING=%(word_size)s '
-                '-DROOT_PROJECT_NAME:STRING=%(project_name)s '
-                '%(universal)s '
-                '%(opts)s %(dir)r' % args)
-
-    def run_build(self, opts, targets):
-        cwd = getcwd()
-        if targets:
-            targets = ' '.join(['-target ' + repr(t) for t in targets])
-        else:
-            targets = ''
-        cmd = ('xcodebuild -configuration %s %s %s | grep -v "^[[:space:]]*setenv" ; exit ${PIPESTATUS[0]}' %
-               (self.build_type, ' '.join(opts), targets))
-        for d in self.build_dirs():
-            try:
-                os.chdir(d)
-                print 'Running %r in %r' % (cmd, d)
-                self.run(cmd)
-            finally:
-                os.chdir(cwd)
-
-
-class WindowsSetup(PlatformSetup):
-    gens = {
-        'vc71' : {
-            'gen' : r'Visual Studio 7 .NET 2003',
-            'ver' : r'7.1'
-            },
-        'vc80' : {
-            'gen' : r'Visual Studio 8 2005',
-            'ver' : r'8.0'
-            },
-        'vc90' : {
-            'gen' : r'Visual Studio 9 2008',
-            'ver' : r'9.0'
-            }
-        }
-    gens['vs2003'] = gens['vc71']
-    gens['vs2005'] = gens['vc80']
-    gens['vs2008'] = gens['vc90']
-
-    search_path = r'C:\windows'
-    exe_suffixes = ('.exe', '.bat', '.com')
-
-    def __init__(self):
-        super(WindowsSetup, self).__init__()
-        self._generator = None
-        self.incredibuild = False
-
-    def _get_generator(self):
-        if self._generator is None:
-            for version in 'vc80 vc90 vc71'.split():
-                if self.find_visual_studio(version):
-                    self._generator = version
-                    print 'Building with ', self.gens[version]['gen']
-                    break
-                else:
-                    print >> sys.stderr, 'Cannot find a Visual Studio installation, testing for express editions'
-                    for version in 'vc80 vc90 vc71'.split():
-                        if self.find_visual_studio_express(version):
-                            self._generator = version
-                            self.using_express = True
-                            print 'Building with ', self.gens[version]['gen'] , "Express edition"
-                            break
-                        else:
-                            print >> sys.stderr, 'Cannot find any Visual Studio installation'
-                            sys.exit(1)
-        return self._generator
-
-    def _set_generator(self, gen):
-        self._generator = gen
-
-    generator = property(_get_generator, _set_generator)
-
-    def os(self):
-        return 'win32'
-
-    def build_dirs(self):
-        return ['build-' + self.generator]
-
-    def cmake_commandline(self, src_dir, build_dir, opts, simple):
-        args = dict(
-            dir=src_dir,
-            generator=self.gens[self.generator.lower()]['gen'],
-            opts=quote(opts),
-            standalone=self.standalone,
-            unattended=self.unattended,
-            project_name=self.project_name,
-            word_size=self.word_size,
-            )
-        #if simple:
-        #    return 'cmake %(opts)s "%(dir)s"' % args
-        return ('cmake -G "%(generator)s" '
-                '-DSTANDALONE:BOOL=%(standalone)s '
-                '-DUNATTENDED:BOOL=%(unattended)s '
-                '-DWORD_SIZE:STRING=%(word_size)s '
-                '-DROOT_PROJECT_NAME:STRING=%(project_name)s '
-                '%(opts)s "%(dir)s"' % args)
-
-    def get_HKLM_registry_value(self, key_str, value_str):
-        import _winreg
-        reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
-        key = _winreg.OpenKey(reg, key_str)
-        value = _winreg.QueryValueEx(key, value_str)[0]
-        print 'Found: %s' % value
-        return value
-        
-    def find_visual_studio(self, gen=None):
-        if gen is None:
-            gen = self._generator
-        gen = gen.lower()
-        value_str = (r'EnvironmentDirectory')
-        key_str = (r'SOFTWARE\Microsoft\VisualStudio\%s\Setup\VS' %
-                   self.gens[gen]['ver'])
-        print ('Reading VS environment from HKEY_LOCAL_MACHINE\%s\%s' %
-               (key_str, value_str))
-        try:
-            return self.get_HKLM_registry_value(key_str, value_str)           
-        except WindowsError, err:
-            key_str = (r'SOFTWARE\Wow6432Node\Microsoft\VisualStudio\%s\Setup\VS' %
-                       self.gens[gen]['ver'])
-
-        try:
-            return self.get_HKLM_registry_value(key_str, value_str)
-        except:
-            print >> sys.stderr, "Didn't find ", self.gens[gen]['gen']
-            
-        return ''
-
-    def find_visual_studio_express(self, gen=None):
-        if gen is None:
-            gen = self._generator
-        gen = gen.lower()
-        try:
-            import _winreg
-            key_str = (r'SOFTWARE\Microsoft\VCEXpress\%s\Setup\VC' %
-                       self.gens[gen]['ver'])
-            value_str = (r'ProductDir')
-            print ('Reading VS environment from HKEY_LOCAL_MACHINE\%s\%s' %
-                   (key_str, value_str))
-            print key_str
-
-            reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
-            key = _winreg.OpenKey(reg, key_str)
-            value = _winreg.QueryValueEx(key, value_str)[0]+"IDE"
-            print 'Found: %s' % value
-            return value
-        except WindowsError, err:
-            print >> sys.stderr, "Didn't find ", self.gens[gen]['gen']
-            return ''
-
-    def get_build_cmd(self):
-        if self.incredibuild:
-            config = self.build_type
-            if self.gens[self.generator]['ver'] in [ r'8.0', r'9.0' ]:
-                config = '\"%s|Win32\"' % config
-
-            executable = 'buildconsole'
-            cmd = "%(bin)s %(prj)s.sln /build /cfg=%(cfg)s" % {'prj': self.project_name, 'cfg': config, 'bin': executable}
-            return (executable, cmd)
-
-        environment = self.find_visual_studio()
-        if environment == '':
-            environment = self.find_visual_studio_express()
-            if environment == '':
-                print >> sys.stderr, "Something went very wrong during build stage, could not find a Visual Studio installation."
-            else:
-                build_dirs=self.build_dirs();
-                print >> sys.stderr, "\nSolution generation complete, it can can now be found in:", build_dirs[0]
-                print >> sys.stderr, "\nPlease see https://wiki.secondlife.com/wiki/Microsoft_Visual_Studio#Extra_steps_for_Visual_Studio_Express_editions for express specific information"
-                exit(0)
-
-        # devenv.com is CLI friendly, devenv.exe... not so much.
-        executable = '%sdevenv.com' % (self.find_visual_studio(),)
-        cmd = ('"%s" %s.sln /build %s' % 
-                (executable, self.project_name, self.build_type))
-        return (executable, cmd)
-
-    def run(self, command, name=None, retry_on=None, retries=1):
-        '''Run a program.  If the program fails, raise an exception.'''
-        assert name is not None, 'On windows an executable path must be given in name. [DEV-44838]'
-        if os.path.isfile(name):
-            path = name
-        else:
-            path = self.find_in_path(name)[0]
-        while retries:
-            retries = retries - 1
-            print "develop.py tries to run:", command
-            ret = subprocess.call(command, executable=path)
-            print "got ret", ret, "from", command
-            if ret == 0:
-                break
-            else:
-                error = 'exited with status %d' % ret
-                if retry_on is not None and retry_on == ret:
-                    print "Retrying... the command %r %s" % (name, error)
-                else:
-                    raise CommandError('the command %r %s' % (name, error))
-
-    def run_cmake(self, args=[]):
-        '''Override to add the vstool.exe call after running cmake.'''
-        PlatformSetup.run_cmake(self, args)
-        if self.unattended == 'OFF':
-            if self.using_express == False:
-                self.run_vstool()
-
-    def run_vstool(self):
-        for build_dir in self.build_dirs():
-            stamp = os.path.join(build_dir, 'vstool.txt')
-            try:
-                prev_build = open(stamp).read().strip()
-            except IOError:
-                prev_build = ''
-            if prev_build == self.build_type:
-                # Only run vstool if the build type has changed.
-                continue
-            executable = os.path.join('tools','vstool','VSTool.exe')
-            vstool_cmd = (executable +
-                          ' --solution ' +
-                          os.path.join(build_dir,'SecondLife.sln') +
-                          ' --config ' + self.build_type +
-                          ' --startup secondlife-bin')
-            print 'Running %r in %r' % (vstool_cmd, getcwd())
-            self.run(vstool_cmd, name=executable)        
-            print >> open(stamp, 'w'), self.build_type
-        
-    def run_build(self, opts, targets):
-        for t in targets:
-            assert t.strip(), 'Unexpected empty targets: ' + repr(targets)
-        cwd = getcwd()
-        executable, build_cmd = self.get_build_cmd()
-
-        for d in self.build_dirs():
-            try:
-                os.chdir(d)
-                if targets:
-                    for t in targets:
-                        cmd = '%s /project %s %s' % (build_cmd, t, ' '.join(opts))
-                        print 'Running %r in %r' % (cmd, d)
-                        self.run(cmd, name=executable, retry_on=4, retries=3)
-                else:
-                    cmd = '%s %s' % (build_cmd, ' '.join(opts))
-                    print 'Running %r in %r' % (cmd, d)
-                    self.run(cmd, name=executable, retry_on=4, retries=3)
-            finally:
-                os.chdir(cwd)
-                
-class CygwinSetup(WindowsSetup):
-    def __init__(self):
-        super(CygwinSetup, self).__init__()
-        self.generator = 'vc80'
-
-    def cmake_commandline(self, src_dir, build_dir, opts, simple):
-        dos_dir = commands.getoutput("cygpath -w %s" % src_dir)
-        args = dict(
-            dir=dos_dir,
-            generator=self.gens[self.generator.lower()]['gen'],
-            opts=quote(opts),
-            standalone=self.standalone,
-            unattended=self.unattended,
-            project_name=self.project_name,
-            word_size=self.word_size,
-            )
-        #if simple:
-        #    return 'cmake %(opts)s "%(dir)s"' % args
-        return ('cmake -G "%(generator)s" '
-                '-DUNATTENDED:BOOl=%(unattended)s '
-                '-DSTANDALONE:BOOL=%(standalone)s '
-                '-DWORD_SIZE:STRING=%(word_size)s '
-                '-DROOT_PROJECT_NAME:STRING=%(project_name)s '
-                '%(opts)s "%(dir)s"' % args)
-
-setup_platform = {
-    'darwin': DarwinSetup,
-    'linux2': LinuxSetup,
-    'win32' : WindowsSetup,
-    'cygwin' : CygwinSetup
-    }
-
-
-usage_msg = '''
-Usage:   develop.py [options] [command [command-options]]
-
-Options:
-  -h | --help           print this help message
-       --standalone     build standalone, without Linden prebuild libraries
-       --unattended     build unattended, do not invoke any tools requiring
-                        a human response
-       --universal      build a universal binary on Mac OS X (unsupported)
-  -t | --type=NAME      build type ("Debug", "Release", or "RelWithDebInfo")
-  -m32 | -m64           build architecture (32-bit or 64-bit)
-  -N | --no-distcc      disable use of distcc
-  -G | --generator=NAME generator name
-                        Windows: VC71 or VS2003 (default), VC80 (VS2005) or 
-                          VC90 (VS2008)
-                        Mac OS X: Xcode (default), Unix Makefiles
-                        Linux: Unix Makefiles (default), KDevelop3
-  -p | --project=NAME   set the root project name. (Doesn't effect makefiles)
-                        
-Commands:
-  build           configure and build default target
-  clean           delete all build directories, does not affect sources
-  configure       configure project by running cmake (default if none given)
-  printbuilddirs  print the build directory that will be used
-
-Command-options for "configure":
-  We use cmake variables to change the build configuration.
-  -DSERVER:BOOL=OFF        Don't configure simulator/dataserver/etc
-  -DVIEWER:BOOL=OFF        Don't configure the viewer
-  -DPACKAGE:BOOL=ON        Create "package" target to make installers
-  -DLOCALIZESETUP:BOOL=ON  Create one win_setup target per supported language
-
-Examples:
-  Set up a viewer-only project for your system:
-    develop.py configure -DSERVER:BOOL=OFF
-  
-  Set up a Visual Studio 2005 project with "package" target:
-    develop.py -G vc80 configure -DPACKAGE:BOOL=ON
-'''
-
-def main(arguments):
-    setup = setup_platform[sys.platform]()
-    try:
-        opts, args = getopt.getopt(
-            arguments,
-            '?hNt:p:G:m:',
-            ['help', 'standalone', 'no-distcc', 'unattended', 'universal', 'type=', 'incredibuild', 'generator=', 'project='])
-    except getopt.GetoptError, err:
-        print >> sys.stderr, 'Error:', err
-        print >> sys.stderr, """
-Note: You must pass -D options to cmake after the "configure" command
-For example: develop.py configure -DSERVER:BOOL=OFF"""
-        print >> sys.stderr, usage_msg.strip()
-        sys.exit(1)
-
-    for o, a in opts:
-        if o in ('-?', '-h', '--help'):
-            print usage_msg.strip()
-            sys.exit(0)
-        elif o in ('--standalone',):
-            setup.standalone = 'ON'
-        elif o in ('--unattended',):
-            setup.unattended = 'ON'
-        elif o in ('--universal',):
-            setup.universal = 'ON'
-        elif o in ('-m',):
-            if a in ('32', '64'):
-                setup.word_size = int(a)
-            else:
-                print >> sys.stderr, 'Error: unknown word size', repr(a)
-                print >> sys.stderr, 'Supported word sizes: 32, 64'
-                sys.exit(1)
-        elif o in ('-t', '--type'):
-            try:
-                setup.build_type = setup.build_types[a.lower()]
-            except KeyError:
-                print >> sys.stderr, 'Error: unknown build type', repr(a)
-                print >> sys.stderr, 'Supported build types:'
-                types = setup.build_types.values()
-                types.sort()
-                for t in types:
-                    print ' ', t
-                sys.exit(1)
-        elif o in ('-G', '--generator'):
-            setup.generator = a
-        elif o in ('-N', '--no-distcc'):
-            setup.distcc = False
-        elif o in ('-p', '--project'):
-            setup.project_name = a
-        elif o in ('--incredibuild'):
-            setup.incredibuild = True
-        else:
-            print >> sys.stderr, 'INTERNAL ERROR: unhandled option', repr(o)
-            sys.exit(1)
-    if not args:
-        setup.run_cmake()
-        return
-    try:
-        cmd = args.pop(0)
-        if cmd in ('cmake', 'configure'):
-            setup.run_cmake(args)
-        elif cmd == 'build':
-            if os.getenv('DISTCC_DIR') is None:
-                distcc_dir = os.path.join(getcwd(), '.distcc')
-                if not os.path.exists(distcc_dir):
-                    os.mkdir(distcc_dir)
-                print "setting DISTCC_DIR to %s" % distcc_dir
-                os.environ['DISTCC_DIR'] = distcc_dir
-            else:
-                print "DISTCC_DIR is set to %s" % os.getenv('DISTCC_DIR')
-            for d in setup.build_dirs():
-                if not os.path.exists(d):
-                    raise CommandError('run "develop.py cmake" first')
-            setup.run_cmake()
-            opts, targets = setup.parse_build_opts(args)
-            setup.run_build(opts, targets)
-        elif cmd == 'clean':
-            if args:
-                raise CommandError('clean takes no arguments')
-            setup.cleanup()
-        elif cmd == 'printbuilddirs':
-            for d in setup.build_dirs():
-                print >> sys.stdout, d
-        else:
-            print >> sys.stderr, 'Error: unknown subcommand', repr(cmd)
-            print >> sys.stderr, "(run 'develop.py --help' for help)"
-            sys.exit(1)
-    except getopt.GetoptError, err:
-        print >> sys.stderr, 'Error with %r subcommand: %s' % (cmd, err)
-        sys.exit(1)
-
-
-if __name__ == '__main__':
-    try:
-        main(sys.argv[1:])
-    except CommandError, err:
-        print >> sys.stderr, 'Error:', err
-        sys.exit(1)
diff --git a/indra/integration_tests/CMakeLists.txt b/indra/integration_tests/CMakeLists.txt
index 67e8fbf1f2c0cd6fbaf6d9d7c9076a8281c6494a..ced2b3dbcfb5ef5b0a086ab93a56bf11a9b444d4 100644
--- a/indra/integration_tests/CMakeLists.txt
+++ b/indra/integration_tests/CMakeLists.txt
@@ -1,3 +1,8 @@
 # -*- cmake -*-
-
 add_subdirectory(llui_libtest)
+IF (LLIMAGE_LIBTEST)
+  MESSAGE(STATUS "Build llimage_libtest")
+  add_subdirectory(llimage_libtest)
+ELSE (LLIMAGE_LIBTEST)
+  MESSAGE(STATUS "Skip llimage_libtest")
+ENDIF (LLIMAGE_LIBTEST)
diff --git a/indra/integration_tests/llimage_libtest/CMakeLists.txt b/indra/integration_tests/llimage_libtest/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a687e606104d359890c7a4ab22c2e8c57e2c6a3d
--- /dev/null
+++ b/indra/integration_tests/llimage_libtest/CMakeLists.txt
@@ -0,0 +1,125 @@
+# -*- cmake -*-
+
+# Integration tests of the llimage library (JPEG2000, PNG, jpeg, etc... images reading and writing)
+
+project (llimage_libtest)
+
+include(00-Common)
+include(LLCommon)
+include(LLImage)
+include(LLImageJ2COJ) 
+include(LLKDU)
+include(LLVFS)
+
+include_directories(
+    ${LLCOMMON_INCLUDE_DIRS}
+    ${LLVFS_INCLUDE_DIRS}
+    ${LLIMAGE_INCLUDE_DIRS}
+    )
+
+set(llimage_libtest_SOURCE_FILES
+    llimage_libtest.cpp
+    )
+
+set(llimage_libtest_HEADER_FILES
+    CMakeLists.txt
+    llimage_libtest.h
+    )
+
+set_source_files_properties(${llimage_libtest_HEADER_FILES}
+                            PROPERTIES HEADER_FILE_ONLY TRUE)
+
+list(APPEND llimage_libtest_SOURCE_FILES ${llimage_libtest_HEADER_FILES})
+
+add_executable(llimage_libtest
+    WIN32
+    MACOSX_BUNDLE
+    ${llimage_libtest_SOURCE_FILES}
+)
+
+set_target_properties(llimage_libtest
+    PROPERTIES
+    WIN32_EXECUTABLE
+    FALSE
+)
+
+# OS-specific libraries
+if (DARWIN)
+  include(CMakeFindFrameworks)
+  find_library(COREFOUNDATION_LIBRARY CoreFoundation)
+  set(OS_LIBRARIES ${COREFOUNDATION_LIBRARY})
+elseif (WINDOWS)
+  set(OS_LIBRARIES)
+elseif (LINUX)
+  set(OS_LIBRARIES)
+else (DARWIN)
+  message(FATAL_ERROR "Unknown platform")
+endif (DARWIN)
+
+# Libraries on which this application depends on
+# Sort by high-level to low-level
+target_link_libraries(llimage_libtest
+	${LLCOMMON_LIBRARIES}
+	${LLVFS_LIBRARIES}
+    ${LLIMAGE_LIBRARIES}
+    ${LLKDU_LIBRARIES}
+    ${KDU_LIBRARY}
+    ${LLIMAGEJ2COJ_LIBRARIES}
+    ${OS_LIBRARIES}
+    )
+	
+if (DARWIN)
+  # Path inside the app bundle where we'll need to copy libraries
+  set(LLIMAGE_LIBTEST_DESTINATION_DIR
+    ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llimage_libtest.app/Contents/Resources
+  )
+  # Create the Contents/Resources directory
+  add_custom_command(
+    TARGET llimage_libtest POST_BUILD
+    COMMAND ${CMAKE_COMMAND}
+    ARGS
+      -E
+      make_directory
+      ${LLIMAGE_LIBTEST_DESTINATION_DIR}
+    COMMENT "Creating Resources directory in app bundle."
+  ) 
+else (DARWIN)
+  set(LLIMAGE_LIBTEST_DESTINATION_DIR
+    ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/
+  )
+endif (DARWIN)
+
+get_target_property(BUILT_LLCOMMON llcommon LOCATION)
+add_custom_command(TARGET llimage_libtest POST_BUILD
+  COMMAND ${CMAKE_COMMAND} -E copy ${BUILT_LLCOMMON}  ${LLIMAGE_LIBTEST_DESTINATION_DIR}
+  DEPENDS ${BUILT_LLCOMMON}
+)
+
+if (DARWIN)
+  # Copy the required libraries to the package app
+  add_custom_command(TARGET llimage_libtest POST_BUILD
+    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libapr-1.0.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR}
+    DEPENDS ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libapr-1.0.dylib
+  )
+  add_custom_command(TARGET llimage_libtest POST_BUILD
+    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libaprutil-1.0.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR}
+    DEPENDS ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libaprutil-1.0.dylib
+  )
+  add_custom_command(TARGET llimage_libtest POST_BUILD
+    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libexception_handler.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR}
+    DEPENDS ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libexception_handler.dylib
+  )
+  add_custom_command(TARGET llimage_libtest POST_BUILD
+    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libexpat.1.5.2.dylib ${LLIMAGE_LIBTEST_DESTINATION_DIR}
+    DEPENDS ${CMAKE_SOURCE_DIR}/../build-darwin-i386/packages/lib/release/libexpat.1.5.2.dylib
+  )
+endif (DARWIN)
+
+if (WINDOWS)
+  # Check indra/test_apps/llplugintest/CMakeLists.txt for an example of what to copy over for Windows and how
+endif (WINDOWS)
+
+# Ensure people working on the viewer don't break this library
+# *NOTE: This could be removed, or only built by TeamCity, if the build
+# and link times become too long.
+add_dependencies(viewer llimage_libtest)
diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..60ddf63b218992e25fc0eb6a258209c5f7ada6e5
--- /dev/null
+++ b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp
@@ -0,0 +1,540 @@
+/** 
+ * @file llimage_libtest.cpp
+ * @author Merov Linden
+ * @brief Integration test for the llimage library
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+#include "linden_common.h"
+#include "llpointer.h"
+#include "lltimer.h"
+
+#include "llimage_libtest.h"
+
+// Linden library includes
+#include "llimage.h"
+#include "llimagejpeg.h"
+#include "llimagepng.h"
+#include "llimagebmp.h"
+#include "llimagetga.h"
+#include "llimagej2c.h"
+#include "lldir.h"
+
+// system libraries
+#include <iostream>
+
+// doc string provided when invoking the program with --help 
+static const char USAGE[] = "\n"
+"usage:\tllimage_libtest [options]\n"
+"\n"
+" -h, --help\n"
+"        Print this help\n"
+" -i, --input <file1 .. file2>\n"
+"        List of image files to load and convert. Patterns with wild cards can be used.\n"
+" -o, --output <file1 .. file2> OR <type>\n"
+"        List of image files to create (assumes same order as for input files)\n"
+"        OR 3 letters file type extension to convert each input file into.\n"
+" -r, --region <x0, y0, x1, y1>\n"
+"        Crop region applied to the input files in pixels.\n"
+"        Only used for j2c images. Default is no region cropping.\n"
+" -d, --discard_level <n>\n"
+"        Discard level max used on input. 0 is highest resolution. Max discard level is 5.\n"
+"        This allows the input image to be clamped in resolution when loading.\n"
+"        Only valid for j2c images. Default is no discard.\n"
+" -p, --precincts <n>\n"
+"        Dimension of precincts in pixels. Precincts are assumed square and identical for\n"
+"        all levels. Note that this option also add PLT and tile markers to the codestream, \n"
+"        and uses RPCL order. Power of 2 must be used.\n"
+"        Only valid for output j2c images. Default is no precincts used.\n"
+" -b, --blocks <n>\n"
+"        Dimension of coding blocks in pixels. Blocks are assumed square. Power of 2 must\n"
+"        be used. Blocks must be smaller than precincts. Like precincts, this option adds\n"
+"        PLT, tile markers and uses RPCL.\n"
+"        Only valid for output j2c images. Default is 64.\n"
+" -rev, --reversible\n"
+"        Set the compression to be lossless (reversible in j2c parlance).\n"
+"        Only valid for output j2c images.\n"
+" -log, --logmetrics <metric>\n"
+"        Log performance data for <metric>. Results in <metric>.slp\n"
+"        Note: so far, only ImageCompressionTester has been tested.\n"
+" -a, --analyzeperformance\n"
+"        Create a report comparing <metric>_baseline.slp with current <metric>.slp\n"
+"        Results in <metric>_report.csv\n"
+" -s, --image-stats\n"
+"        Output stats for each input and output image.\n"
+"\n";
+
+// true when all image loading is done. Used by metric logging thread to know when to stop the thread.
+static bool sAllDone = false;
+
+// Create an empty formatted image instance of the correct type from the filename
+LLPointer<LLImageFormatted> create_image(const std::string &filename)
+{
+	std::string exten = gDirUtilp->getExtension(filename);	
+	LLPointer<LLImageFormatted> image = LLImageFormatted::createFromExtension(exten);
+	return image;
+}
+
+void output_image_stats(LLPointer<LLImageFormatted> image, const std::string &filename)
+{
+	// Print out some statistical data on the image
+	std::cout << "Image stats for : " << filename << ", extension : " << image->getExtension() << std::endl;
+
+	std::cout << "    with : " << (int)(image->getWidth())       << ", height : " << (int)(image->getHeight())       << std::endl;
+	std::cout << "    comp : " << (int)(image->getComponents())  << ", levels : " << (int)(image->getDiscardLevel()) << std::endl;
+	std::cout << "    head : " << (int)(image->calcHeaderSize()) << ",   data : " << (int)(image->getDataSize())     << std::endl;
+
+	return;
+}
+
+// Load an image from file and return a raw (decompressed) instance of its data
+LLPointer<LLImageRaw> load_image(const std::string &src_filename, int discard_level, int* region, bool output_stats)
+{
+	LLPointer<LLImageFormatted> image = create_image(src_filename);
+	
+	// This just loads the image file stream into a buffer. No decoding done.
+	if (!image->load(src_filename))
+	{
+		return NULL;
+	}
+	
+	if(	(image->getComponents() != 3) && (image->getComponents() != 4) )
+	{
+		std::cout << "Image files with less than 3 or more than 4 components are not supported\n";
+		return NULL;
+	}
+	
+	if (output_stats)
+	{
+		output_image_stats(image, src_filename);
+	}
+	
+	LLPointer<LLImageRaw> raw_image = new LLImageRaw;
+	
+	// Set the image restriction on load in the case of a j2c image
+	if ((image->getCodec() == IMG_CODEC_J2C) && ((discard_level != -1) || (region != NULL)))
+	{
+		// That method doesn't exist (and likely, doesn't make sense) for any other image file format
+		// hence the required cryptic cast.
+		((LLImageJ2C*)(image.get()))->initDecode(*raw_image, discard_level, region);
+	}
+	
+	if (!image->decode(raw_image, 0.0f))
+	{
+		return NULL;
+	}
+	
+	return raw_image;
+}
+
+// Save a raw image instance into a file
+bool save_image(const std::string &dest_filename, LLPointer<LLImageRaw> raw_image, int blocks_size, int precincts_size, bool reversible, bool output_stats)
+{
+	LLPointer<LLImageFormatted> image = create_image(dest_filename);
+	
+	// Set the image codestream parameters on output in the case of a j2c image
+	if (image->getCodec() == IMG_CODEC_J2C)
+	{
+		// That method doesn't exist (and likely, doesn't make sense) for any other image file format
+		// hence the required cryptic cast.
+		if ((blocks_size != -1) || (precincts_size != -1))
+		{
+			((LLImageJ2C*)(image.get()))->initEncode(*raw_image, blocks_size, precincts_size);
+		}
+		((LLImageJ2C*)(image.get()))->setReversible(reversible);
+	}
+	
+	if (!image->encode(raw_image, 0.0f))
+	{
+		return false;
+	}
+	
+	if (output_stats)
+	{
+		output_image_stats(image, dest_filename);
+	}
+
+	return image->save(dest_filename);
+}
+
+void store_input_file(std::list<std::string> &input_filenames, const std::string &path)
+{
+	// Break the incoming path in its components
+	std::string dir = gDirUtilp->getDirName(path);
+	std::string name = gDirUtilp->getBaseFileName(path);
+	std::string exten = gDirUtilp->getExtension(path);
+
+	// std::cout << "store_input_file : " << path << ", dir : " << dir << ", name : " << name << ", exten : " << exten << std::endl;
+	
+	// If extension is not an image type or "*", exit
+	// Note: we don't support complex patterns for the extension like "j??"
+	// Note: on most shells, the pattern expansion is done by the shell so that pattern matching limitation is actually not a problem
+	if ((exten.compare("*") != 0) && (LLImageBase::getCodecFromExtension(exten) == IMG_CODEC_INVALID))
+	{
+		return;
+	}
+
+	if ((name.find('*') != -1) || ((name.find('?') != -1)))
+	{
+		// If file name is a pattern, iterate to get each file name and store
+		std::string next_name;
+		while (gDirUtilp->getNextFileInDir(dir,name,next_name))
+		{
+			std::string file_name = dir + gDirUtilp->getDirDelimiter() + next_name;
+			input_filenames.push_back(file_name);
+		}
+	}
+	else
+	{
+		// Verify that the file does exist before storing 
+		if (gDirUtilp->fileExists(path))
+		{
+			input_filenames.push_back(path);
+		}
+		else
+		{
+			std::cout << "store_input_file : the file " << path << " could not be found" << std::endl;
+		}
+	}	
+}
+
+void store_output_file(std::list<std::string> &output_filenames, std::list<std::string> &input_filenames, const std::string &path)
+{
+	// Break the incoming path in its components
+	std::string dir = gDirUtilp->getDirName(path);
+	std::string name = gDirUtilp->getBaseFileName(path);
+	std::string exten = gDirUtilp->getExtension(path);
+	
+	// std::cout << "store_output_file : " << path << ", dir : " << dir << ", name : " << name << ", exten : " << exten << std::endl;
+	
+	if (dir.empty() && exten.empty())
+	{
+		// If dir and exten are empty, we interpret the name as a file extension type name and will iterate through input list to populate the output list
+		exten = name;
+		// Make sure the extension is an image type
+		if (LLImageBase::getCodecFromExtension(exten) == IMG_CODEC_INVALID)
+		{
+			return;
+		}
+		std::string delim = gDirUtilp->getDirDelimiter();
+		std::list<std::string>::iterator in_file  = input_filenames.begin();
+		std::list<std::string>::iterator end = input_filenames.end();
+		for (; in_file != end; ++in_file)
+		{
+			dir = gDirUtilp->getDirName(*in_file);
+			name = gDirUtilp->getBaseFileName(*in_file,true);
+			std::string file_name;
+			if (!dir.empty())
+			{
+				file_name = dir + delim + name + "." + exten;
+			}
+			else
+			{
+				file_name = name + "." + exten;
+			}
+			output_filenames.push_back(file_name);
+		}
+	}
+	else
+	{
+		// Make sure the extension is an image type
+		if (LLImageBase::getCodecFromExtension(exten) == IMG_CODEC_INVALID)
+		{
+			return;
+		}
+		// Store the path
+		output_filenames.push_back(path);
+	}
+}
+
+// Holds the metric gathering output in a thread safe way
+class LogThread : public LLThread
+{
+public:
+	std::string mFile;
+
+	LogThread(std::string& test_name) : LLThread("llimage_libtest log")
+	{
+		std::string file_name = test_name + std::string(".slp");
+		mFile = file_name;
+	}
+		
+	void run()
+	{
+		std::ofstream os(mFile.c_str());
+			
+		while (!sAllDone)
+		{
+			LLFastTimer::writeLog(os);
+			os.flush();
+			ms_sleep(32);
+		}
+		LLFastTimer::writeLog(os);
+		os.flush();
+		os.close();
+	}		
+};
+
+int main(int argc, char** argv)
+{
+	// List of input and output files
+	std::list<std::string> input_filenames;
+	std::list<std::string> output_filenames;
+	// Other optional parsed arguments
+	bool analyze_performance = false;
+	bool image_stats = false;
+	int* region = NULL;
+	int discard_level = -1;
+	int precincts_size = -1;
+	int blocks_size = -1;
+	bool reversible = false;
+
+	// Init whatever is necessary
+	ll_init_apr();
+	LLImage::initClass();
+	LogThread* fast_timer_log_thread = NULL;	// For performance and metric gathering
+
+	// Analyze command line arguments
+	for (int arg = 1; arg < argc; ++arg)
+	{
+		if (!strcmp(argv[arg], "--help") || !strcmp(argv[arg], "-h"))
+		{
+            // Send the usage to standard out
+            std::cout << USAGE << std::endl;
+			return 0;
+		}
+		else if ((!strcmp(argv[arg], "--input") || !strcmp(argv[arg], "-i")) && arg < argc-1)
+		{
+			std::string file_name = argv[arg+1];
+			while (file_name[0] != '-')		// if arg starts with '-', we consider it's not a file name but some other argument
+			{
+				// std::cout << "input file name : " << file_name << std::endl;				
+				store_input_file(input_filenames, file_name);
+				arg += 1;					// Skip that arg now we know it's a file name
+				if ((arg + 1) == argc)		// Break out of the loop if we reach the end of the arg list
+					break;
+				file_name = argv[arg+1];	// Next argument and loop over
+			}
+		}
+		else if ((!strcmp(argv[arg], "--output") || !strcmp(argv[arg], "-o")) && arg < argc-1)
+		{
+			std::string file_name = argv[arg+1];
+			while (file_name[0] != '-')		// if arg starts with '-', we consider it's not a file name but some other argument
+			{
+				// std::cout << "output file name : " << file_name << std::endl;				
+				store_output_file(output_filenames, input_filenames, file_name);
+				arg += 1;					// Skip that arg now we know it's a file name
+				if ((arg + 1) == argc)		// Break out of the loop if we reach the end of the arg list
+					break;
+				file_name = argv[arg+1];	// Next argument and loop over
+			}
+		}
+		else if ((!strcmp(argv[arg], "--region") || !strcmp(argv[arg], "-r")) && arg < argc-1)
+		{
+			std::string value_str = argv[arg+1];
+			int index = 0;
+			region = new int[4];
+			while (value_str[0] != '-')		// if arg starts with '-', it's the next option
+			{
+				int value = atoi(value_str.c_str());
+				region[index++] = value;
+				arg += 1;					// Definitely skip that arg now we know it's a number
+				if ((arg + 1) == argc)		// Break out of the loop if we reach the end of the arg list
+					break;
+				if (index == 4)				// Break out of the loop if we captured 4 values already
+					break;
+				value_str = argv[arg+1];	// Next argument and loop over
+			}
+			if (index != 4)
+			{
+				std::cout << "--region arguments invalid" << std::endl;
+				delete [] region;
+				region = NULL;
+			}
+		}
+		else if (!strcmp(argv[arg], "--discard_level") || !strcmp(argv[arg], "-d"))
+		{
+			std::string value_str;
+			if ((arg + 1) < argc)
+			{
+				value_str = argv[arg+1];
+			}
+			if (((arg + 1) >= argc) || (value_str[0] == '-'))
+			{
+				std::cout << "No valid --discard_level argument given, discard_level ignored" << std::endl;
+			}
+			else
+			{
+				discard_level = atoi(value_str.c_str());
+				// Clamp to the values accepted by the viewer
+				discard_level = llclamp(discard_level,0,5);
+			}
+		}
+		else if (!strcmp(argv[arg], "--precincts") || !strcmp(argv[arg], "-p"))
+		{
+			std::string value_str;
+			if ((arg + 1) < argc)
+			{
+				value_str = argv[arg+1];
+			}
+			if (((arg + 1) >= argc) || (value_str[0] == '-'))
+			{
+				std::cout << "No valid --precincts argument given, precincts ignored" << std::endl;
+			}
+			else
+			{
+				precincts_size = atoi(value_str.c_str());
+				// *TODO: make sure precincts_size is a power of 2
+			}
+		}
+		else if (!strcmp(argv[arg], "--blocks") || !strcmp(argv[arg], "-b"))
+		{
+			std::string value_str;
+			if ((arg + 1) < argc)
+			{
+				value_str = argv[arg+1];
+			}
+			if (((arg + 1) >= argc) || (value_str[0] == '-'))
+			{
+				std::cout << "No valid --blocks argument given, blocks ignored" << std::endl;
+			}
+			else
+			{
+				blocks_size = atoi(value_str.c_str());
+				// *TODO: make sure blocks_size is a power of 2
+			}
+		}
+		else if (!strcmp(argv[arg], "--reversible") || !strcmp(argv[arg], "-rev"))
+		{
+			reversible = true;
+		}
+		else if (!strcmp(argv[arg], "--logmetrics") || !strcmp(argv[arg], "-log"))
+		{
+			// '--logmetrics' needs to be specified with a named test metric argument
+			// Note: for the moment, only ImageCompressionTester has been tested
+			std::string test_name;
+			if ((arg + 1) < argc)
+			{
+				test_name = argv[arg+1];
+			}
+			if (((arg + 1) >= argc) || (test_name[0] == '-'))
+			{
+				// We don't have an argument left in the arg list or the next argument is another option
+				std::cout << "No --logmetrics argument given, no perf data will be gathered" << std::endl;
+			}
+			else
+			{
+				LLFastTimer::sMetricLog = TRUE;
+				LLFastTimer::sLogName = test_name;
+				arg += 1;					// Skip that arg now we know it's a valid test name
+				if ((arg + 1) == argc)		// Break out of the loop if we reach the end of the arg list
+					break;
+			}
+		}
+		else if (!strcmp(argv[arg], "--analyzeperformance") || !strcmp(argv[arg], "-a"))
+		{
+			analyze_performance = true;
+		}
+		else if (!strcmp(argv[arg], "--image-stats") || !strcmp(argv[arg], "-s"))
+		{
+			image_stats = true;
+		}
+	}
+		
+	// Check arguments consistency. Exit with proper message if inconsistent.
+	if (input_filenames.size() == 0)
+	{
+		std::cout << "No input file, nothing to do -> exit" << std::endl;
+		return 0;
+	}
+	if (analyze_performance && !LLFastTimer::sMetricLog)
+	{
+		std::cout << "Cannot create perf report if no perf gathered (i.e. use argument -log <perf> with -a) -> exit" << std::endl;
+		return 0;
+	}
+	
+
+	// Create the logging thread if required
+	if (LLFastTimer::sMetricLog)
+	{
+		LLFastTimer::sLogLock = new LLMutex(NULL);
+		fast_timer_log_thread = new LogThread(LLFastTimer::sLogName);
+		fast_timer_log_thread->start();
+	}
+	
+	// Perform action on each input file
+	std::list<std::string>::iterator in_file  = input_filenames.begin();
+	std::list<std::string>::iterator out_file = output_filenames.begin();
+	std::list<std::string>::iterator in_end = input_filenames.end();
+	std::list<std::string>::iterator out_end = output_filenames.end();
+	for (; in_file != in_end; ++in_file, ++out_file)
+	{
+		// Load file
+		LLPointer<LLImageRaw> raw_image = load_image(*in_file, discard_level, region, image_stats);
+		if (!raw_image)
+		{
+			std::cout << "Error: Image " << *in_file << " could not be loaded" << std::endl;
+			continue;
+		}
+	
+		// Save file
+		if (out_file != out_end)
+		{
+			if (!save_image(*out_file, raw_image, blocks_size, precincts_size, reversible, image_stats))
+			{
+				std::cout << "Error: Image " << *out_file << " could not be saved" << std::endl;
+			}
+			else
+			{
+				std::cout << *in_file << " -> " << *out_file << std::endl;
+			}
+		}
+	}
+
+	// Output perf data if requested by user
+	if (analyze_performance)
+	{
+		std::string baseline_name = LLFastTimer::sLogName + "_baseline.slp";
+		std::string current_name  = LLFastTimer::sLogName + ".slp"; 
+		std::string report_name   = LLFastTimer::sLogName + "_report.csv";
+		
+		std::cout << "Analyzing performance, check report in : " << report_name << std::endl;
+
+		LLMetricPerformanceTesterBasic::doAnalysisMetrics(baseline_name, current_name, report_name);
+	}
+	
+	// Stop the perf gathering system if needed
+	if (LLFastTimer::sMetricLog)
+	{
+		LLMetricPerformanceTesterBasic::deleteTester(LLFastTimer::sLogName);
+		sAllDone = true;
+	}
+	
+	// Cleanup and exit
+	LLImage::cleanupClass();
+	if (fast_timer_log_thread)
+	{
+		fast_timer_log_thread->shutdown();
+	}
+	
+	return 0;
+}
diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.h b/indra/integration_tests/llimage_libtest/llimage_libtest.h
new file mode 100644
index 0000000000000000000000000000000000000000..63f3d46b50b4710c3dc006789b35e6f065075182
--- /dev/null
+++ b/indra/integration_tests/llimage_libtest/llimage_libtest.h
@@ -0,0 +1,29 @@
+/** 
+ * @file llimage_libtest.h
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+#ifndef LLIMAGE_LIBTEST_H
+#define LLIMAGE_LIBTEST_H
+
+
+#endif
diff --git a/indra/integration_tests/llui_libtest/CMakeLists.txt b/indra/integration_tests/llui_libtest/CMakeLists.txt
index e0772e55ca35990697e0d7d103297eb0f665d8ad..df471671545f6320df38f292d42bb9dddff3cff4 100644
--- a/indra/integration_tests/llui_libtest/CMakeLists.txt
+++ b/indra/integration_tests/llui_libtest/CMakeLists.txt
@@ -91,14 +91,14 @@ if (WINDOWS)
     # Copy over OpenJPEG.dll
     # *NOTE: On Windows with VS2005, only the first comment prints
     set(OPENJPEG_RELEASE
-        "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release/openjpeg.dll")
+        "${ARCH_PREBUILT_DIRS_RELEASE}/openjpeg.dll")
     add_custom_command( TARGET llui_libtest POST_BUILD
         COMMAND ${CMAKE_COMMAND} -E copy_if_different 
             ${OPENJPEG_RELEASE} ${CMAKE_CURRENT_BINARY_DIR}
         COMMENT "Copying OpenJPEG DLLs to binary directory"
         )
     set(OPENJPEG_DEBUG
-        "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug/openjpegd.dll")
+        "${ARCH_PREBUILT_DIRS_DEBUG}/openjpegd.dll")
     add_custom_command( TARGET llui_libtest POST_BUILD
         COMMAND ${CMAKE_COMMAND} -E copy_if_different 
             ${OPENJPEG_DEBUG} ${CMAKE_CURRENT_BINARY_DIR}
diff --git a/indra/linux_updater/linux_updater.cpp b/indra/linux_updater/linux_updater.cpp
index d909516bf8fbce6872458eec049e0b4c836df6ae..a81de0223c8f432b3740894fbc6dce824f5b3089 100644
--- a/indra/linux_updater/linux_updater.cpp
+++ b/indra/linux_updater/linux_updater.cpp
@@ -88,9 +88,16 @@ bool translate_init(std::string comma_delim_path_list,
 	std::vector<std::string> paths;
 	LLStringUtil::getTokens(comma_delim_path_list, paths, ","); // split over ','
 
+	for(std::vector<std::string>::iterator it = paths.begin(), end_it = paths.end();
+		it != end_it;
+		++it)
+	{
+		(*it) = gDirUtilp->findSkinnedFilename(*it, base_xml_name);
+	}
+
 	// suck the translation xml files into memory
 	LLXMLNodePtr root;
-	bool success = LLXMLNode::getLayeredXMLNode(base_xml_name, root, paths);
+	bool success = LLXMLNode::getLayeredXMLNode(root, paths);
 	if (!success)
 	{
 		// couldn't load string table XML
diff --git a/indra/llaudio/CMakeLists.txt b/indra/llaudio/CMakeLists.txt
index 21ec6228197fd118f25cc3e0a448e864f8829693..632e5d46e3338b45d644191c5a5eb0bc94f68b86 100644
--- a/indra/llaudio/CMakeLists.txt
+++ b/indra/llaudio/CMakeLists.txt
@@ -24,6 +24,7 @@ include_directories(
     ${VORBIS_INCLUDE_DIRS}
     ${OPENAL_LIB_INCLUDE_DIRS}
     ${FREEAULT_LIB_INCLUDE_DIRS}
+    ${FMOD_INCLUDE_DIR}
     )
 
 set(llaudio_SOURCE_FILES
diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp
index 01dfd03c188a903fd6cfb58716faf9d7caa8e607..f0b44f97d28b0d15f3728a4546c77f32e4464b77 100644
--- a/indra/llaudio/llaudiodecodemgr.cpp
+++ b/indra/llaudio/llaudiodecodemgr.cpp
@@ -680,4 +680,10 @@ BOOL LLAudioDecodeMgr::addDecodeRequest(const LLUUID &uuid)
 	return FALSE;
 }
 
-
+#if LL_DARWIN || LL_LINUX
+// HACK: to fool the compiler into not emitting unused warnings.
+namespace {
+	const ov_callbacks callback_array[4] = {OV_CALLBACKS_DEFAULT, OV_CALLBACKS_NOCLOSE, OV_CALLBACKS_STREAMONLY, 
+		OV_CALLBACKS_STREAMONLY_NOCLOSE};
+}
+#endif
diff --git a/indra/llaudio/llaudioengine_openal.cpp b/indra/llaudio/llaudioengine_openal.cpp
index e352045291830d110851f7d298b2a8995828e2d5..34a057dcc0f64a4048cc8ca676d080ce57965799 100644
--- a/indra/llaudio/llaudioengine_openal.cpp
+++ b/indra/llaudio/llaudioengine_openal.cpp
@@ -32,6 +32,8 @@
 #include "lllistener_openal.h"
 
 
+const float LLAudioEngine_OpenAL::WIND_BUFFER_SIZE_SEC = 0.05f;
+
 LLAudioEngine_OpenAL::LLAudioEngine_OpenAL()
 	:
 	mWindGen(NULL),
diff --git a/indra/llaudio/llaudioengine_openal.h b/indra/llaudio/llaudioengine_openal.h
index 258febb1a8c497321cc72c0169e7fab2e6fcd8c0..6639d9dfe648772a5b718c552284765463cffbcf 100644
--- a/indra/llaudio/llaudioengine_openal.h
+++ b/indra/llaudio/llaudioengine_openal.h
@@ -67,7 +67,7 @@ class LLAudioEngine_OpenAL : public LLAudioEngine
         int mNumEmptyWindALBuffers;
 
     	static const int MAX_NUM_WIND_BUFFERS = 80;
-    	static const float WIND_BUFFER_SIZE_SEC = 0.05f; // 1/20th sec
+    	static const float WIND_BUFFER_SIZE_SEC; // 1/20th sec
 };
 
 class LLAudioChannelOpenAL : public LLAudioChannel
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 9342a22d46f9d0a3a0b0017544af3aa6a19383bd..22e0705036f3622239fa5ebb7ae498df6f566180 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -12,6 +12,7 @@ include(LLSharedLibs)
 include(GoogleBreakpad)
 include(GooglePerfTools)
 include(Copy3rdPartyLibs)
+include(ZLIB)
 
 include_directories(
     ${EXPAT_INCLUDE_DIRS}
@@ -62,6 +63,7 @@ set(llcommon_SOURCE_FILES
     llformat.cpp
     llframetimer.cpp
     llheartbeat.cpp
+    llinstancetracker.cpp
     llliveappconfig.cpp
     lllivefile.cpp
     lllog.cpp
@@ -313,6 +315,7 @@ if (LL_TESTS)
   LL_ADD_INTEGRATION_TEST(lluri "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(reflection "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(stringize "" "${test_libs}")
+  LL_ADD_INTEGRATION_TEST(lleventdispatcher "" "${test_libs}")
 
   # *TODO - reenable these once tcmalloc libs no longer break the build.
   #ADD_BUILD_TEST(llallocator llcommon)
diff --git a/indra/llcommon/lleventdispatcher.cpp b/indra/llcommon/lleventdispatcher.cpp
index d6e820d793c38de10bfbf249d0dff316b5af61a4..5b6d4efbe98b8259d09197444b7cc914d80bf554 100644
--- a/indra/llcommon/lleventdispatcher.cpp
+++ b/indra/llcommon/lleventdispatcher.cpp
@@ -41,6 +41,354 @@
 #include "llevents.h"
 #include "llerror.h"
 #include "llsdutil.h"
+#include "stringize.h"
+#include <memory>                   // std::auto_ptr
+
+/*****************************************************************************
+*   LLSDArgsSource
+*****************************************************************************/
+/**
+ * Store an LLSD array, producing its elements one at a time. Die with LL_ERRS
+ * if the consumer requests more elements than the array contains.
+ */
+class LL_COMMON_API LLSDArgsSource
+{
+public:
+    LLSDArgsSource(const std::string function, const LLSD& args);
+    ~LLSDArgsSource();
+
+    LLSD next();
+
+    void done() const;
+
+private:
+    std::string _function;
+    LLSD _args;
+    LLSD::Integer _index;
+};
+
+LLSDArgsSource::LLSDArgsSource(const std::string function, const LLSD& args):
+    _function(function),
+    _args(args),
+    _index(0)
+{
+    if (! (_args.isUndefined() || _args.isArray()))
+    {
+        LL_ERRS("LLSDArgsSource") << _function << " needs an args array instead of "
+                                  << _args << LL_ENDL;
+    }
+}
+
+LLSDArgsSource::~LLSDArgsSource()
+{
+    done();
+}
+
+LLSD LLSDArgsSource::next()
+{
+    if (_index >= _args.size())
+    {
+        LL_ERRS("LLSDArgsSource") << _function << " requires more arguments than the "
+                                  << _args.size() << " provided: " << _args << LL_ENDL;
+    }
+    return _args[_index++];
+}
+
+void LLSDArgsSource::done() const
+{
+    if (_index < _args.size())
+    {
+        LL_WARNS("LLSDArgsSource") << _function << " only consumed " << _index
+                                   << " of the " << _args.size() << " arguments provided: "
+                                   << _args << LL_ENDL;
+    }
+}
+
+/*****************************************************************************
+*   LLSDArgsMapper
+*****************************************************************************/
+/**
+ * From a formal parameters description and a map of arguments, construct an
+ * arguments array.
+ *
+ * That is, given:
+ * - an LLSD array of length n containing parameter-name strings,
+ *   corresponding to the arguments of a function of interest
+ * - an LLSD collection specifying default parameter values, either:
+ *   - an LLSD array of length m <= n, matching the rightmost m params, or
+ *   - an LLSD map explicitly stating default name=value pairs
+ * - an LLSD map of parameter names and actual values for a particular
+ *   function call
+ * construct an LLSD array of actual argument values for this function call.
+ *
+ * The parameter-names array and the defaults collection describe the function
+ * being called. The map might vary with every call, providing argument values
+ * for the described parameters.
+ *
+ * The array of parameter names must match the number of parameters expected
+ * by the function of interest.
+ *
+ * If you pass a map of default parameter values, it provides default values
+ * as you might expect. It is an error to specify a default value for a name
+ * not listed in the parameters array.
+ *
+ * If you pass an array of default parameter values, it is mapped to the
+ * rightmost m of the n parameter names. It is an error if the default-values
+ * array is longer than the parameter-names array. Consider the following
+ * parameter names: ["a", "b", "c", "d"].
+ *
+ * - An empty array of default values (or an isUndefined() value) asserts that
+ *   every one of the above parameter names is required.
+ * - An array of four default values [1, 2, 3, 4] asserts that every one of
+ *   the above parameters is optional. If the current parameter map is empty,
+ *   they will be passed to the function as [1, 2, 3, 4].
+ * - An array of two default values [11, 12] asserts that parameters "a" and
+ *   "b" are required, while "c" and "d" are optional, having default values
+ *   "c"=11 and "d"=12.
+ *
+ * The arguments array is constructed as follows:
+ *
+ * - Arguments-map keys not found in the parameter-names array are ignored.
+ * - Entries from the map provide values for an improper subset of the
+ *   parameters named in the parameter-names array. This results in a
+ *   tentative values array with "holes." (size of map) + (number of holes) =
+ *   (size of names array)
+ * - Holes are filled with the default values.
+ * - Any remaining holes constitute an error.
+ */
+class LL_COMMON_API LLSDArgsMapper
+{
+public:
+    /// Accept description of function: function name, param names, param
+    /// default values
+    LLSDArgsMapper(const std::string& function, const LLSD& names, const LLSD& defaults);
+
+    /// Given arguments map, return LLSD::Array of parameter values, or LL_ERRS.
+    LLSD map(const LLSD& argsmap) const;
+
+private:
+    static std::string formatlist(const LLSD&);
+
+    // The function-name string is purely descriptive. We want error messages
+    // to be able to indicate which function's LLSDArgsMapper has the problem.
+    std::string _function;
+    // Store the names array pretty much as given.
+    LLSD _names;
+    // Though we're handed an array of name strings, it's more useful to us to
+    // store it as a map from name string to position index. Of course that's
+    // easy to generate from the incoming names array, but why do it more than
+    // once?
+    typedef std::map<LLSD::String, LLSD::Integer> IndexMap;
+    IndexMap _indexes;
+    // Generated array of default values, aligned with the array of param names.
+    LLSD _defaults;
+    // Indicate whether we have a default value for each param.
+    typedef std::vector<char> FilledVector;
+    FilledVector _has_dft;
+};
+
+LLSDArgsMapper::LLSDArgsMapper(const std::string& function,
+                               const LLSD& names, const LLSD& defaults):
+    _function(function),
+    _names(names),
+    _has_dft(names.size())
+{
+    if (! (_names.isUndefined() || _names.isArray()))
+    {
+        LL_ERRS("LLSDArgsMapper") << function << " names must be an array, not " << names << LL_ENDL;
+    }
+    LLSD::Integer nparams(_names.size());
+    // From _names generate _indexes.
+    for (LLSD::Integer ni = 0, nend = _names.size(); ni < nend; ++ni)
+    {
+        _indexes[_names[ni]] = ni;
+    }
+
+    // Presize _defaults() array so we don't have to resize it more than once.
+    // All entries are initialized to LLSD(); but since _has_dft is still all
+    // 0, they're all "holes" for now.
+    if (nparams)
+    {
+        _defaults[nparams - 1] = LLSD();
+    }
+
+    if (defaults.isUndefined() || defaults.isArray())
+    {
+        LLSD::Integer ndefaults = defaults.size();
+        // defaults is a (possibly empty) array. Right-align it with names.
+        if (ndefaults > nparams)
+        {
+            LL_ERRS("LLSDArgsMapper") << function << " names array " << names
+                                      << " shorter than defaults array " << defaults << LL_ENDL;
+        }
+
+        // Offset by which we slide defaults array right to right-align with
+        // _names array
+        LLSD::Integer offset = nparams - ndefaults;
+        // Fill rightmost _defaults entries from defaults, and mark them as
+        // filled
+        for (LLSD::Integer i = 0, iend = ndefaults; i < iend; ++i)
+        {
+            _defaults[i + offset] = defaults[i];
+            _has_dft[i + offset] = 1;
+        }
+    }
+    else if (defaults.isMap())
+    {
+        // defaults is a map. Use it to populate the _defaults array.
+        LLSD bogus;
+        for (LLSD::map_const_iterator mi(defaults.beginMap()), mend(defaults.endMap());
+             mi != mend; ++mi)
+        {
+            IndexMap::const_iterator ixit(_indexes.find(mi->first));
+            if (ixit == _indexes.end())
+            {
+                bogus.append(mi->first);
+                continue;
+            }
+
+            LLSD::Integer pos = ixit->second;
+            // Store default value at that position in the _defaults array.
+            _defaults[pos] = mi->second;
+            // Don't forget to record the fact that we've filled this
+            // position.
+            _has_dft[pos] = 1;
+        }
+        if (bogus.size())
+        {
+            LL_ERRS("LLSDArgsMapper") << function << " defaults specified for nonexistent params "
+                                      << formatlist(bogus) << LL_ENDL;
+        }
+    }
+    else
+    {
+        LL_ERRS("LLSDArgsMapper") << function << " defaults must be a map or an array, not "
+                                  << defaults << LL_ENDL;
+    }
+}
+
+LLSD LLSDArgsMapper::map(const LLSD& argsmap) const
+{
+    if (! (argsmap.isUndefined() || argsmap.isMap() || argsmap.isArray()))
+    {
+        LL_ERRS("LLSDArgsMapper") << _function << " map() needs a map or array, not "
+                                  << argsmap << LL_ENDL;
+    }
+    // Initialize the args array. Indexing a non-const LLSD array grows it
+    // to appropriate size, but we don't want to resize this one on each
+    // new operation. Just make it as big as we need before we start
+    // stuffing values into it.
+    LLSD args(LLSD::emptyArray());
+    if (_defaults.size() == 0)
+    {
+        // If this function requires no arguments, fast exit. (Don't try to
+        // assign to args[-1].)
+        return args;
+    }
+    args[_defaults.size() - 1] = LLSD();
+
+    // Get a vector of chars to indicate holes. It's tempting to just scan
+    // for LLSD::isUndefined() values after filling the args array from
+    // the map, but it's plausible for caller to explicitly pass
+    // isUndefined() as the value of some parameter name. That's legal
+    // since isUndefined() has well-defined conversions (default value)
+    // for LLSD data types. So use a whole separate array for detecting
+    // holes. (Avoid std::vector<bool> which is known to be odd -- can we
+    // iterate?)
+    FilledVector filled(args.size());
+
+    if (argsmap.isArray())
+    {
+        // Fill args from array. If there are too many args in passed array,
+        // ignore the rest.
+        LLSD::Integer size(argsmap.size());
+        if (size > args.size())
+        {
+            // We don't just use std::min() because we want to sneak in this
+            // warning if caller passes too many args.
+            LL_WARNS("LLSDArgsMapper") << _function << " needs " << args.size()
+                                       << " params, ignoring last " << (size - args.size())
+                                       << " of passed " << size << ": " << argsmap << LL_ENDL;
+            size = args.size();
+        }
+        for (LLSD::Integer i(0); i < size; ++i)
+        {
+            // Copy the actual argument from argsmap
+            args[i] = argsmap[i];
+            // Note that it's been filled
+            filled[i] = 1;
+        }
+    }
+    else
+    {
+        // argsmap is in fact a map. Walk the map.
+        for (LLSD::map_const_iterator mi(argsmap.beginMap()), mend(argsmap.endMap());
+             mi != mend; ++mi)
+        {
+            // mi->first is a parameter-name string, with mi->second its
+            // value. Look up the name's position index in _indexes.
+            IndexMap::const_iterator ixit(_indexes.find(mi->first));
+            if (ixit == _indexes.end())
+            {
+                // Allow for a map containing more params than were passed in
+                // our names array. Caller typically receives a map containing
+                // the function name, cruft such as reqid, etc. Ignore keys
+                // not defined in _indexes.
+                LL_DEBUGS("LLSDArgsMapper") << _function << " ignoring "
+                                            << mi->first << "=" << mi->second << LL_ENDL;
+                continue;
+            }
+            LLSD::Integer pos = ixit->second;
+            // Store the value at that position in the args array.
+            args[pos] = mi->second;
+            // Don't forget to record the fact that we've filled this
+            // position.
+            filled[pos] = 1;
+        }
+    }
+
+    // Fill any remaining holes from _defaults.
+    LLSD unfilled(LLSD::emptyArray());
+    for (LLSD::Integer i = 0, iend = args.size(); i < iend; ++i)
+    {
+        if (! filled[i])
+        {
+            // If there's no default value for this parameter, that's an
+            // error.
+            if (! _has_dft[i])
+            {
+                unfilled.append(_names[i]);
+            }
+            else
+            {
+                args[i] = _defaults[i];
+            }
+        }
+    }
+    // If any required args -- args without defaults -- were left unfilled
+    // by argsmap, that's a problem.
+    if (unfilled.size())
+    {
+        LL_ERRS("LLSDArgsMapper") << _function << " missing required arguments "
+                                  << formatlist(unfilled) << " from " << argsmap << LL_ENDL;
+    }
+
+    // done
+    return args;
+}
+
+std::string LLSDArgsMapper::formatlist(const LLSD& list)
+{
+    std::ostringstream out;
+    const char* delim = "";
+    for (LLSD::array_const_iterator li(list.beginArray()), lend(list.endArray());
+         li != lend; ++li)
+    {
+        out << delim << li->asString();
+        delim = ", ";
+    }
+    return out.str();
+}
 
 LLEventDispatcher::LLEventDispatcher(const std::string& desc, const std::string& key):
     mDesc(desc),
@@ -52,12 +400,181 @@ LLEventDispatcher::~LLEventDispatcher()
 {
 }
 
+/**
+ * DispatchEntry subclass used for callables accepting(const LLSD&)
+ */
+struct LLEventDispatcher::LLSDDispatchEntry: public LLEventDispatcher::DispatchEntry
+{
+    LLSDDispatchEntry(const std::string& desc, const Callable& func, const LLSD& required):
+        DispatchEntry(desc),
+        mFunc(func),
+        mRequired(required)
+    {}
+
+    Callable mFunc;
+    LLSD mRequired;
+
+    virtual void call(const std::string& desc, const LLSD& event) const
+    {
+        // Validate the syntax of the event itself.
+        std::string mismatch(llsd_matches(mRequired, event));
+        if (! mismatch.empty())
+        {
+            LL_ERRS("LLEventDispatcher") << desc << ": bad request: " << mismatch << LL_ENDL;
+        }
+        // Event syntax looks good, go for it!
+        mFunc(event);
+    }
+
+    virtual LLSD addMetadata(LLSD meta) const
+    {
+        meta["required"] = mRequired;
+        return meta;
+    }
+};
+
+/**
+ * DispatchEntry subclass for passing LLSD to functions accepting
+ * arbitrary argument types (convertible via LLSDParam)
+ */
+struct LLEventDispatcher::ParamsDispatchEntry: public LLEventDispatcher::DispatchEntry
+{
+    ParamsDispatchEntry(const std::string& desc, const invoker_function& func):
+        DispatchEntry(desc),
+        mInvoker(func)
+    {}
+
+    invoker_function mInvoker;
+
+    virtual void call(const std::string& desc, const LLSD& event) const
+    {
+        LLSDArgsSource src(desc, event);
+        mInvoker(boost::bind(&LLSDArgsSource::next, boost::ref(src)));
+    }
+};
+
+/**
+ * DispatchEntry subclass for dispatching LLSD::Array to functions accepting
+ * arbitrary argument types (convertible via LLSDParam)
+ */
+struct LLEventDispatcher::ArrayParamsDispatchEntry: public LLEventDispatcher::ParamsDispatchEntry
+{
+    ArrayParamsDispatchEntry(const std::string& desc, const invoker_function& func,
+                             LLSD::Integer arity):
+        ParamsDispatchEntry(desc, func),
+        mArity(arity)
+    {}
+
+    LLSD::Integer mArity;
+
+    virtual LLSD addMetadata(LLSD meta) const
+    {
+        LLSD array(LLSD::emptyArray());
+        // Resize to number of arguments required
+        if (mArity)
+            array[mArity - 1] = LLSD();
+        llassert_always(array.size() == mArity);
+        meta["required"] = array;
+        return meta;
+    }
+};
+
+/**
+ * DispatchEntry subclass for dispatching LLSD::Map to functions accepting
+ * arbitrary argument types (convertible via LLSDParam)
+ */
+struct LLEventDispatcher::MapParamsDispatchEntry: public LLEventDispatcher::ParamsDispatchEntry
+{
+    MapParamsDispatchEntry(const std::string& name, const std::string& desc,
+                           const invoker_function& func,
+                           const LLSD& params, const LLSD& defaults):
+        ParamsDispatchEntry(desc, func),
+        mMapper(name, params, defaults),
+        mRequired(LLSD::emptyMap())
+    {
+        // Build the set of all param keys, then delete the ones that are
+        // optional. What's left are the ones that are required.
+        for (LLSD::array_const_iterator pi(params.beginArray()), pend(params.endArray());
+             pi != pend; ++pi)
+        {
+            mRequired[pi->asString()] = LLSD();
+        }
+
+        if (defaults.isArray() || defaults.isUndefined())
+        {
+            // Right-align the params and defaults arrays.
+            LLSD::Integer offset = params.size() - defaults.size();
+            // Now the name of every defaults[i] is at params[i + offset].
+            for (LLSD::Integer i(0), iend(defaults.size()); i < iend; ++i)
+            {
+                // Erase this optional param from mRequired.
+                mRequired.erase(params[i + offset].asString());
+                // Instead, make an entry in mOptional with the default
+                // param's name and value.
+                mOptional[params[i + offset].asString()] = defaults[i];
+            }
+        }
+        else if (defaults.isMap())
+        {
+            // if defaults is already a map, then it's already in the form we
+            // intend to deliver in metadata
+            mOptional = defaults;
+            // Just delete from mRequired every key appearing in mOptional.
+            for (LLSD::map_const_iterator mi(mOptional.beginMap()), mend(mOptional.endMap());
+                 mi != mend; ++mi)
+            {
+                mRequired.erase(mi->first);
+            }
+        }
+    }
+
+    LLSDArgsMapper mMapper;
+    LLSD mRequired;
+    LLSD mOptional;
+
+    virtual void call(const std::string& desc, const LLSD& event) const
+    {
+        // Just convert from LLSD::Map to LLSD::Array using mMapper, then pass
+        // to base-class call() method.
+        ParamsDispatchEntry::call(desc, mMapper.map(event));
+    }
+
+    virtual LLSD addMetadata(LLSD meta) const
+    {
+        meta["required"] = mRequired;
+        meta["optional"] = mOptional;
+        return meta;
+    }
+};
+
+void LLEventDispatcher::addArrayParamsDispatchEntry(const std::string& name,
+                                                    const std::string& desc,
+                                                    const invoker_function& invoker,
+                                                    LLSD::Integer arity)
+{
+    mDispatch.insert(
+        DispatchMap::value_type(name, DispatchMap::mapped_type(
+                                    new ArrayParamsDispatchEntry(desc, invoker, arity))));
+}
+
+void LLEventDispatcher::addMapParamsDispatchEntry(const std::string& name,
+                                                  const std::string& desc,
+                                                  const invoker_function& invoker,
+                                                  const LLSD& params,
+                                                  const LLSD& defaults)
+{
+    mDispatch.insert(
+        DispatchMap::value_type(name, DispatchMap::mapped_type(
+                                    new MapParamsDispatchEntry(name, desc, invoker, params, defaults))));
+}
+
 /// Register a callable by name
 void LLEventDispatcher::add(const std::string& name, const std::string& desc,
                             const Callable& callable, const LLSD& required)
 {
-    mDispatch.insert(DispatchMap::value_type(name,
-                                             DispatchMap::mapped_type(callable, desc, required)));
+    mDispatch.insert(
+        DispatchMap::value_type(name, DispatchMap::mapped_type(
+                                    new LLSDDispatchEntry(desc, callable, required))));
 }
 
 void LLEventDispatcher::addFail(const std::string& name, const std::string& classname) const
@@ -83,7 +600,7 @@ bool LLEventDispatcher::remove(const std::string& name)
 /// such callable exists, die with LL_ERRS.
 void LLEventDispatcher::operator()(const std::string& name, const LLSD& event) const
 {
-    if (! attemptCall(name, event))
+    if (! try_call(name, event))
     {
         LL_ERRS("LLEventDispatcher") << "LLEventDispatcher(" << mDesc << "): '" << name
                                      << "' not found" << LL_ENDL;
@@ -98,44 +615,29 @@ void LLEventDispatcher::operator()(const LLSD& event) const
     // This could/should be implemented in terms of the two-arg overload.
     // However -- we can produce a more informative error message.
     std::string name(event[mKey]);
-    if (! attemptCall(name, event))
+    if (! try_call(name, event))
     {
         LL_ERRS("LLEventDispatcher") << "LLEventDispatcher(" << mDesc << "): bad " << mKey
                                      << " value '" << name << "'" << LL_ENDL;
     }
 }
 
-bool LLEventDispatcher::attemptCall(const std::string& name, const LLSD& event) const
+bool LLEventDispatcher::try_call(const LLSD& event) const
 {
-    DispatchMap::const_iterator found = mDispatch.find(name);
-    if (found == mDispatch.end())
-    {
-        // The reason we only return false, leaving it up to our caller to die
-        // with LL_ERRS, is that different callers have different amounts of
-        // available information.
-        return false;
-    }
-    // Found the name, so it's plausible to even attempt the call. But first,
-    // validate the syntax of the event itself.
-    std::string mismatch(llsd_matches(found->second.mRequired, event));
-    if (! mismatch.empty())
-    {
-        LL_ERRS("LLEventDispatcher") << "LLEventDispatcher(" << mDesc << ") calling '" << name
-                                     << "': bad request: " << mismatch << LL_ENDL;
-    }
-    // Event syntax looks good, go for it!
-    (found->second.mFunc)(event);
-    return true;                    // tell caller we were able to call
+    return try_call(event[mKey], event);
 }
 
-LLEventDispatcher::Callable LLEventDispatcher::get(const std::string& name) const
+bool LLEventDispatcher::try_call(const std::string& name, const LLSD& event) const
 {
     DispatchMap::const_iterator found = mDispatch.find(name);
     if (found == mDispatch.end())
     {
-        return Callable();
+        return false;
     }
-    return found->second.mFunc;
+    // Found the name, so it's plausible to even attempt the call.
+    found->second->call(STRINGIZE("LLEventDispatcher(" << mDesc << ") calling '" << name << "'"),
+                        event);
+    return true;                    // tell caller we were able to call
 }
 
 LLSD LLEventDispatcher::getMetadata(const std::string& name) const
@@ -147,9 +649,8 @@ LLSD LLEventDispatcher::getMetadata(const std::string& name) const
     }
     LLSD meta;
     meta["name"] = name;
-    meta["desc"] = found->second.mDesc;
-    meta["required"] = found->second.mRequired;
-    return meta;
+    meta["desc"] = found->second->mDesc;
+    return found->second->addMetadata(meta);
 }
 
 LLDispatchListener::LLDispatchListener(const std::string& pumpname, const std::string& key):
@@ -164,3 +665,8 @@ bool LLDispatchListener::process(const LLSD& event)
     (*this)(event);
     return false;
 }
+
+LLEventDispatcher::DispatchEntry::DispatchEntry(const std::string& desc):
+    mDesc(desc)
+{}
+
diff --git a/indra/llcommon/lleventdispatcher.h b/indra/llcommon/lleventdispatcher.h
index dfffd59eb6481cc0064494832db7b62d41de6d22..7acc61de4ecd76b3a02a01741857b48d3cb1c23f 100644
--- a/indra/llcommon/lleventdispatcher.h
+++ b/indra/llcommon/lleventdispatcher.h
@@ -27,18 +27,56 @@
  * 
  * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
+ *
+ * The invoker machinery that constructs a boost::fusion argument list for use
+ * with boost::fusion::invoke() is derived from
+ * http://www.boost.org/doc/libs/1_45_0/libs/function_types/example/interpreter.hpp
+ * whose license information is copied below:
+ *
+ * "(C) Copyright Tobias Schwinger
+ *
+ * Use modification and distribution are subject to the boost Software License,
+ * Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt)."
  */
 
 #if ! defined(LL_LLEVENTDISPATCHER_H)
 #define LL_LLEVENTDISPATCHER_H
 
+// nil is too generic a term to be allowed to be a global macro. In
+// particular, boost::fusion defines a 'class nil' (properly encapsulated in a
+// namespace) that a global 'nil' macro breaks badly.
+#if defined(nil)
+// Capture the value of the macro 'nil', hoping int is an appropriate type.
+static const int nil_(nil);
+// Now forget the macro.
+#undef nil
+// Finally, reintroduce 'nil' as a properly-scoped alias for the previously-
+// defined const 'nil_'. Make it static since otherwise it produces duplicate-
+// symbol link errors later.
+static const int& nil(nil_);
+#endif
+
 #include <string>
-#include <map>
+#include <boost/shared_ptr.hpp>
 #include <boost/function.hpp>
 #include <boost/bind.hpp>
 #include <boost/iterator/transform_iterator.hpp>
+#include <boost/utility/enable_if.hpp>
+#include <boost/function_types/is_nonmember_callable_builtin.hpp>
+#include <boost/function_types/parameter_types.hpp>
+#include <boost/function_types/function_arity.hpp>
+#include <boost/type_traits/remove_cv.hpp>
+#include <boost/type_traits/remove_reference.hpp>
+#include <boost/fusion/include/push_back.hpp>
+#include <boost/fusion/include/cons.hpp>
+#include <boost/fusion/include/invoke.hpp>
+#include <boost/mpl/begin.hpp>
+#include <boost/mpl/end.hpp>
+#include <boost/mpl/next.hpp>
+#include <boost/mpl/deref.hpp>
 #include <typeinfo>
 #include "llevents.h"
+#include "llsdutil.h"
 
 class LLSD;
 
@@ -54,12 +92,18 @@ class LL_COMMON_API LLEventDispatcher
     LLEventDispatcher(const std::string& desc, const std::string& key);
     virtual ~LLEventDispatcher();
 
-    /// Accept any C++ callable, typically a boost::bind() expression
+    /// @name Register functions accepting(const LLSD&)
+    //@{
+
+    /// Accept any C++ callable with the right signature, typically a
+    /// boost::bind() expression
     typedef boost::function<void(const LLSD&)> Callable;
 
     /**
-     * Register a @a callable by @a name. The optional @a required parameter
-     * is used to validate the structure of each incoming event (see
+     * Register a @a callable by @a name. The passed @a callable accepts a
+     * single LLSD value and uses it in any way desired, e.g. extract
+     * parameters and call some other function. The optional @a required
+     * parameter is used to validate the structure of each incoming event (see
      * llsd_matches()).
      */
     void add(const std::string& name,
@@ -67,10 +111,24 @@ class LL_COMMON_API LLEventDispatcher
              const Callable& callable,
              const LLSD& required=LLSD());
 
+    /**
+     * The case of a free function (or static method) accepting(const LLSD&)
+     * could also be intercepted by the arbitrary-args overload below. Ensure
+     * that it's directed to the Callable overload above instead.
+     */
+    void add(const std::string& name,
+             const std::string& desc,
+             void (*f)(const LLSD&),
+             const LLSD& required=LLSD())
+    {
+        add(name, desc, Callable(f), required);
+    }
+
     /**
      * Special case: a subclass of this class can pass an unbound member
-     * function pointer without explicitly specifying the
-     * <tt>boost::bind()</tt> expression.
+     * function pointer (of an LLEventDispatcher subclass) without explicitly
+     * specifying the <tt>boost::bind()</tt> expression. The passed @a method
+     * accepts a single LLSD value, presumably containing other parameters.
      */
     template <class CLASS>
     void add(const std::string& name,
@@ -81,7 +139,8 @@ class LL_COMMON_API LLEventDispatcher
         addMethod<CLASS>(name, desc, method, required);
     }
 
-    /// Overload for both const and non-const methods
+    /// Overload for both const and non-const methods. The passed @a method
+    /// accepts a single LLSD value, presumably containing other parameters.
     template <class CLASS>
     void add(const std::string& name,
              const std::string& desc,
@@ -91,15 +150,106 @@ class LL_COMMON_API LLEventDispatcher
         addMethod<CLASS>(name, desc, method, required);
     }
 
-    /// Convenience: for LLEventDispatcher, not every callable needs a
-    /// documentation string.
-    template <typename CALLABLE>
-    void add(const std::string& name,
-             CALLABLE callable,
-             const LLSD& required=LLSD())
-    {
-        add(name, "", callable, required);
-    }
+    //@}
+
+    /// @name Register functions with arbitrary param lists
+    //@{
+
+    /**
+     * Register a free function with arbitrary parameters. (This also works
+     * for static class methods.)
+     *
+     * @note This supports functions with up to about 6 parameters -- after
+     * that you start getting dismaying compile errors in which
+     * boost::fusion::joint_view is mentioned a surprising number of times.
+     *
+     * When calling this name, pass an LLSD::Array. Each entry in turn will be
+     * converted to the corresponding parameter type using LLSDParam.
+     */
+    template<typename Function>
+    typename boost::enable_if< boost::function_types::is_nonmember_callable_builtin<Function>
+                               >::type add(const std::string& name,
+                                           const std::string& desc,
+                                           Function f);
+
+    /**
+     * Register a nonstatic class method with arbitrary parameters.
+     *
+     * @note This supports functions with up to about 6 parameters -- after
+     * that you start getting dismaying compile errors in which
+     * boost::fusion::joint_view is mentioned a surprising number of times.
+     *
+     * To cover cases such as a method on an LLSingleton we don't yet want to
+     * instantiate, instead of directly storing an instance pointer, accept a
+     * nullary callable returning a pointer/reference to the desired class
+     * instance. If you already have an instance in hand,
+     * boost::lambda::var(instance) or boost::lambda::constant(instance_ptr)
+     * produce suitable callables.
+     *
+     * When calling this name, pass an LLSD::Array. Each entry in turn will be
+     * converted to the corresponding parameter type using LLSDParam.
+     */
+    template<typename Method, typename InstanceGetter>
+    typename boost::enable_if< boost::function_types::is_member_function_pointer<Method>
+                               >::type add(const std::string& name,
+                                           const std::string& desc,
+                                           Method f,
+                                           const InstanceGetter& getter);
+
+    /**
+     * Register a free function with arbitrary parameters. (This also works
+     * for static class methods.)
+     *
+     * @note This supports functions with up to about 6 parameters -- after
+     * that you start getting dismaying compile errors in which
+     * boost::fusion::joint_view is mentioned a surprising number of times.
+     *
+     * Pass an LLSD::Array of parameter names, and optionally another
+     * LLSD::Array of default parameter values, a la LLSDArgsMapper.
+     *
+     * When calling this name, pass an LLSD::Map. We will internally generate
+     * an LLSD::Array using LLSDArgsMapper and then convert each entry in turn
+     * to the corresponding parameter type using LLSDParam.
+     */
+    template<typename Function>
+    typename boost::enable_if< boost::function_types::is_nonmember_callable_builtin<Function>
+                               >::type add(const std::string& name,
+                                           const std::string& desc,
+                                           Function f,
+                                           const LLSD& params,
+                                           const LLSD& defaults=LLSD());
+
+    /**
+     * Register a nonstatic class method with arbitrary parameters.
+     *
+     * @note This supports functions with up to about 6 parameters -- after
+     * that you start getting dismaying compile errors in which
+     * boost::fusion::joint_view is mentioned a surprising number of times.
+     *
+     * To cover cases such as a method on an LLSingleton we don't yet want to
+     * instantiate, instead of directly storing an instance pointer, accept a
+     * nullary callable returning a pointer/reference to the desired class
+     * instance. If you already have an instance in hand,
+     * boost::lambda::var(instance) or boost::lambda::constant(instance_ptr)
+     * produce suitable callables.
+     *
+     * Pass an LLSD::Array of parameter names, and optionally another
+     * LLSD::Array of default parameter values, a la LLSDArgsMapper.
+     *
+     * When calling this name, pass an LLSD::Map. We will internally generate
+     * an LLSD::Array using LLSDArgsMapper and then convert each entry in turn
+     * to the corresponding parameter type using LLSDParam.
+     */
+    template<typename Method, typename InstanceGetter>
+    typename boost::enable_if< boost::function_types::is_member_function_pointer<Method>
+                               >::type add(const std::string& name,
+                                           const std::string& desc,
+                                           Method f,
+                                           const InstanceGetter& getter,
+                                           const LLSD& params,
+                                           const LLSD& defaults=LLSD());
+
+    //@}    
 
     /// Unregister a callable
     bool remove(const std::string& name);
@@ -109,12 +259,25 @@ class LL_COMMON_API LLEventDispatcher
     /// the @a required prototype specified at add() time, die with LL_ERRS.
     void operator()(const std::string& name, const LLSD& event) const;
 
+    /// Call a registered callable with an explicitly-specified name and
+    /// return <tt>true</tt>. If no such callable exists, return
+    /// <tt>false</tt>. If the @a event fails to match the @a required
+    /// prototype specified at add() time, die with LL_ERRS.
+    bool try_call(const std::string& name, const LLSD& event) const;
+
     /// Extract the @a key value from the incoming @a event, and call the
     /// callable whose name is specified by that map @a key. If no such
     /// callable exists, die with LL_ERRS. If the @a event fails to match the
     /// @a required prototype specified at add() time, die with LL_ERRS.
     void operator()(const LLSD& event) const;
 
+    /// Extract the @a key value from the incoming @a event, call the callable
+    /// whose name is specified by that map @a key and return <tt>true</tt>.
+    /// If no such callable exists, return <tt>false</tt>. If the @a event
+    /// fails to match the @a required prototype specified at add() time, die
+    /// with LL_ERRS.
+    bool try_call(const LLSD& event) const;
+
     /// @name Iterate over defined names
     //@{
     typedef std::pair<std::string, std::string> NameDesc;
@@ -122,16 +285,22 @@ class LL_COMMON_API LLEventDispatcher
 private:
     struct DispatchEntry
     {
-        DispatchEntry(const Callable& func, const std::string& desc, const LLSD& required):
-            mFunc(func),
-            mDesc(desc),
-            mRequired(required)
-        {}
-        Callable mFunc;
+        DispatchEntry(const std::string& desc);
+        virtual ~DispatchEntry() {} // suppress MSVC warning, sigh
+
         std::string mDesc;
-        LLSD mRequired;
+
+        virtual void call(const std::string& desc, const LLSD& event) const = 0;
+        virtual LLSD addMetadata(LLSD) const = 0;
     };
-    typedef std::map<std::string, DispatchEntry> DispatchMap;
+    // Tried using boost::ptr_map<std::string, DispatchEntry>, but ptr_map<>
+    // wants its value type to be "clonable," even just to dereference an
+    // iterator. I don't want to clone entries -- if I have to copy an entry
+    // around, I want it to continue pointing to the same DispatchEntry
+    // subclass object. However, I definitely want DispatchMap to destroy
+    // DispatchEntry if no references are outstanding at the time an entry is
+    // removed. This looks like a job for boost::shared_ptr.
+    typedef std::map<std::string, boost::shared_ptr<DispatchEntry> > DispatchMap;
 
 public:
     /// We want the flexibility to redefine what data we store per name,
@@ -149,10 +318,6 @@ class LL_COMMON_API LLEventDispatcher
     }
     //@}
 
-    /// Fetch the Callable for the specified name. If no such name was
-    /// registered, return an empty() Callable.
-    Callable get(const std::string& name) const;
-
     /// Get information about a specific Callable
     LLSD getMetadata(const std::string& name) const;
 
@@ -175,18 +340,184 @@ class LL_COMMON_API LLEventDispatcher
         }
     }
     void addFail(const std::string& name, const std::string& classname) const;
-    /// try to dispatch, return @c true if success
-    bool attemptCall(const std::string& name, const LLSD& event) const;
 
     std::string mDesc, mKey;
     DispatchMap mDispatch;
 
     static NameDesc makeNameDesc(const DispatchMap::value_type& item)
     {
-        return NameDesc(item.first, item.second.mDesc);
+        return NameDesc(item.first, item.second->mDesc);
+    }
+
+    struct LLSDDispatchEntry;
+    struct ParamsDispatchEntry;
+    struct ArrayParamsDispatchEntry;
+    struct MapParamsDispatchEntry;
+
+    // Step 2 of parameter analysis. Instantiating invoker<some_function_type>
+    // implicitly sets its From and To parameters to the (compile time) begin
+    // and end iterators over that function's parameter types.
+    template< typename Function
+              , class From = typename boost::mpl::begin< boost::function_types::parameter_types<Function> >::type
+              , class To   = typename boost::mpl::end< boost::function_types::parameter_types<Function> >::type
+              >
+    struct invoker;
+
+    // deliver LLSD arguments one at a time
+    typedef boost::function<LLSD()> args_source;
+    // obtain args from an args_source to build param list and call target
+    // function
+    typedef boost::function<void(const args_source&)> invoker_function;
+
+    template <typename Function>
+    invoker_function make_invoker(Function f);
+    template <typename Method, typename InstanceGetter>
+    invoker_function make_invoker(Method f, const InstanceGetter& getter);
+    void addArrayParamsDispatchEntry(const std::string& name,
+                                     const std::string& desc,
+                                     const invoker_function& invoker,
+                                     LLSD::Integer arity);
+    void addMapParamsDispatchEntry(const std::string& name,
+                                   const std::string& desc,
+                                   const invoker_function& invoker,
+                                   const LLSD& params,
+                                   const LLSD& defaults);
+};
+
+/*****************************************************************************
+*   LLEventDispatcher template implementation details
+*****************************************************************************/
+// Step 3 of parameter analysis, the recursive case.
+template<typename Function, class From, class To>
+struct LLEventDispatcher::invoker
+{
+    template<typename T>
+    struct remove_cv_ref
+        : boost::remove_cv< typename boost::remove_reference<T>::type >
+    { };
+
+    // apply() accepts an arbitrary boost::fusion sequence as args. It
+    // examines the next parameter type in the parameter-types sequence
+    // bounded by From and To, obtains the next LLSD object from the passed
+    // args_source and constructs an LLSDParam of appropriate type to try
+    // to convert the value. It then recurs with the next parameter-types
+    // iterator, passing the args sequence thus far.
+    template<typename Args>
+    static inline
+    void apply(Function func, const args_source& argsrc, Args const & args)
+    {
+        typedef typename boost::mpl::deref<From>::type arg_type;
+        typedef typename boost::mpl::next<From>::type next_iter_type;
+        typedef typename remove_cv_ref<arg_type>::type plain_arg_type;
+
+        invoker<Function, next_iter_type, To>::apply
+        ( func, argsrc, boost::fusion::push_back(args, LLSDParam<plain_arg_type>(argsrc())));
+    }
+
+    // Special treatment for instance (first) parameter of a non-static member
+    // function. Accept the instance-getter callable, calling that to produce
+    // the first args value. Since we know we're at the top of the recursion
+    // chain, we need not also require a partial args sequence from our caller.
+    template <typename InstanceGetter>
+    static inline
+    void method_apply(Function func, const args_source& argsrc, const InstanceGetter& getter)
+    {
+        typedef typename boost::mpl::next<From>::type next_iter_type;
+
+        // Instead of grabbing the first item from argsrc and making an
+        // LLSDParam of it, call getter() and pass that as the instance param.
+        invoker<Function, next_iter_type, To>::apply
+        ( func, argsrc, boost::fusion::push_back(boost::fusion::nil(), boost::ref(getter())));
+    }
+};
+
+// Step 4 of parameter analysis, the leaf case. When the general
+// invoker<Function, From, To> logic has advanced From until it matches To,
+// the compiler will pick this template specialization.
+template<typename Function, class To>
+struct LLEventDispatcher::invoker<Function,To,To>
+{
+    // the argument list is complete, now call the function
+    template<typename Args>
+    static inline
+    void apply(Function func, const args_source&, Args const & args)
+    {
+        boost::fusion::invoke(func, args);
     }
 };
 
+template<typename Function>
+typename boost::enable_if< boost::function_types::is_nonmember_callable_builtin<Function> >::type
+LLEventDispatcher::add(const std::string& name, const std::string& desc, Function f)
+{
+    // Construct an invoker_function, a callable accepting const args_source&.
+    // Add to DispatchMap an ArrayParamsDispatchEntry that will handle the
+    // caller's LLSD::Array.
+    addArrayParamsDispatchEntry(name, desc, make_invoker(f),
+                                boost::function_types::function_arity<Function>::value);
+}
+
+template<typename Method, typename InstanceGetter>
+typename boost::enable_if< boost::function_types::is_member_function_pointer<Method> >::type
+LLEventDispatcher::add(const std::string& name, const std::string& desc, Method f,
+                       const InstanceGetter& getter)
+{
+    // Subtract 1 from the compile-time arity because the getter takes care of
+    // the first parameter. We only need (arity - 1) additional arguments.
+    addArrayParamsDispatchEntry(name, desc, make_invoker(f, getter),
+                                boost::function_types::function_arity<Method>::value - 1);
+}
+
+template<typename Function>
+typename boost::enable_if< boost::function_types::is_nonmember_callable_builtin<Function> >::type
+LLEventDispatcher::add(const std::string& name, const std::string& desc, Function f,
+                       const LLSD& params, const LLSD& defaults)
+{
+    // See comments for previous is_nonmember_callable_builtin add().
+    addMapParamsDispatchEntry(name, desc, make_invoker(f), params, defaults);
+}
+
+template<typename Method, typename InstanceGetter>
+typename boost::enable_if< boost::function_types::is_member_function_pointer<Method> >::type
+LLEventDispatcher::add(const std::string& name, const std::string& desc, Method f,
+                       const InstanceGetter& getter,
+                       const LLSD& params, const LLSD& defaults)
+{
+    addMapParamsDispatchEntry(name, desc, make_invoker(f, getter), params, defaults);
+}
+
+template <typename Function>
+LLEventDispatcher::invoker_function
+LLEventDispatcher::make_invoker(Function f)
+{
+    // Step 1 of parameter analysis, the top of the recursion. Passing a
+    // suitable f (see add()'s enable_if condition) to this method causes it
+    // to infer the function type; specifying that function type to invoker<>
+    // causes it to fill in the begin/end MPL iterators over the function's
+    // list of parameter types.
+    // While normally invoker::apply() could infer its template type from the
+    // boost::fusion::nil parameter value, here we must be explicit since
+    // we're boost::bind()ing it rather than calling it directly.
+    return boost::bind(&invoker<Function>::template apply<boost::fusion::nil>,
+                       f,
+                       _1,
+                       boost::fusion::nil());
+}
+
+template <typename Method, typename InstanceGetter>
+LLEventDispatcher::invoker_function
+LLEventDispatcher::make_invoker(Method f, const InstanceGetter& getter)
+{
+    // Use invoker::method_apply() to treat the instance (first) arg specially.
+    return boost::bind(&invoker<Method>::template method_apply<InstanceGetter>,
+                       f,
+                       _1,
+                       getter);
+}
+
+/*****************************************************************************
+*   LLDispatchListener
+*****************************************************************************/
 /**
  * Bundle an LLEventPump and a listener with an LLEventDispatcher. A class
  * that contains (or derives from) LLDispatchListener need only specify the
diff --git a/indra/llcommon/llevents.cpp b/indra/llcommon/llevents.cpp
index 97e2bdeb5754288521d26fe379b987f19312a2d0..ff03506e841a8771913895f0a065934cd5f840ef 100644
--- a/indra/llcommon/llevents.cpp
+++ b/indra/llcommon/llevents.cpp
@@ -588,3 +588,16 @@ void LLReqID::stamp(LLSD& response) const
     }
     response["reqid"] = mReqid;
 }
+
+bool sendReply(const LLSD& reply, const LLSD& request, const std::string& replyKey)
+{
+    // Copy 'reply' to modify it.
+    LLSD newreply(reply);
+    // Get the ["reqid"] element from request
+    LLReqID reqID(request);
+    // and copy it to 'newreply'.
+    reqID.stamp(newreply);
+    // Send reply on LLEventPump named in request[replyKey]. Don't forget to
+    // send the modified 'newreply' instead of the original 'reply'.
+    return LLEventPumps::instance().obtain(request[replyKey]).post(newreply);
+}
diff --git a/indra/llcommon/llevents.h b/indra/llcommon/llevents.h
index 2491cf1371f6821bb72f94ee3f12692321e2b9aa..65b0fef354eab6f78efaea6103d01f27dc1104d8 100644
--- a/indra/llcommon/llevents.h
+++ b/indra/llcommon/llevents.h
@@ -691,6 +691,20 @@ class LL_COMMON_API LLReqID
     LLSD mReqid;
 };
 
+/**
+ * Conventionally send a reply to a request event.
+ *
+ * @a reply is the LLSD reply event to send
+ * @a request is the corresponding LLSD request event
+ * @a replyKey is the key in the @a request event, conventionally ["reply"],
+ * whose value is the name of the LLEventPump on which to send the reply.
+ *
+ * Before sending the reply event, sendReply() copies the ["reqid"] item from
+ * the request to the reply.
+ */
+LL_COMMON_API bool sendReply(const LLSD& reply, const LLSD& request,
+                             const std::string& replyKey="reply");
+
 /**
  * Base class for LLListenerWrapper. See visit_and_connect() and llwrap(). We
  * provide virtual @c accept_xxx() methods, customization points allowing a
diff --git a/indra/llcommon/llinstancetracker.cpp b/indra/llcommon/llinstancetracker.cpp
index 89bc6cca390d16277bab5da740b99d0b02bc1532..f57620451117ab40509dae0ef013d8eaf41c6f68 100644
--- a/indra/llcommon/llinstancetracker.cpp
+++ b/indra/llcommon/llinstancetracker.cpp
@@ -32,6 +32,17 @@
 // external library headers
 // other Linden headers
 
-// llinstancetracker.h is presently header-only. This file exists only because our CMake
-// test macro ADD_BUILD_TEST requires it.
-int dummy = 0;
+//static 
+void * & LLInstanceTrackerBase::getInstances(std::type_info const & info)
+{
+	static std::map<std::string, void *> instances;
+
+	std::string k = info.name();
+	if(instances.find(k) == instances.end())
+	{
+		instances[k] = NULL;
+	}
+
+	return instances[k];
+}
+
diff --git a/indra/llcommon/llinstancetracker.h b/indra/llcommon/llinstancetracker.h
index 4945461d626718562a27e1c8b225e0c88a4cee44..b971b2f9145c06fa6c41b417dac855b96635eb74 100644
--- a/indra/llcommon/llinstancetracker.h
+++ b/indra/llcommon/llinstancetracker.h
@@ -37,14 +37,21 @@
 #include <boost/iterator/transform_iterator.hpp>
 #include <boost/iterator/indirect_iterator.hpp>
 
+class LL_COMMON_API LLInstanceTrackerBase : public boost::noncopyable
+{
+	protected:
+		static void * & getInstances(std::type_info const & info);
+};
+
 /// This mix-in class adds support for tracking all instances of the specified class parameter T
 /// The (optional) key associates a value of type KEY with a given instance of T, for quick lookup
 /// If KEY is not provided, then instances are stored in a simple set
 /// @NOTE: see explicit specialization below for default KEY==T* case
 template<typename T, typename KEY = T*>
-class LLInstanceTracker : boost::noncopyable
+class LLInstanceTracker : public LLInstanceTrackerBase
 {
 	typedef typename std::map<KEY, T*> InstanceMap;
+	typedef LLInstanceTracker<T, KEY> MyT;
 	typedef boost::function<const KEY&(typename InstanceMap::value_type&)> KeyGetter;
 	typedef boost::function<T*(typename InstanceMap::value_type&)> InstancePtrGetter;
 public:
@@ -99,25 +106,26 @@ class LLInstanceTracker : boost::noncopyable
 
     static InstanceMap& getMap_()
     {
-        if (! sInstances)
+		void * & instances = getInstances(typeid(MyT));
+        if (! instances)
         {
-            sInstances = new InstanceMap;
+            instances = new InstanceMap;
         }
-        return *sInstances;
+        return * static_cast<InstanceMap*>(instances);
     }
 
 private:
 
 	KEY mKey;
-	static InstanceMap* sInstances;
 };
 
 /// explicit specialization for default case where KEY is T*
 /// use a simple std::set<T*>
 template<typename T>
-class LLInstanceTracker<T, T*>
+class LLInstanceTracker<T, T*> : public LLInstanceTrackerBase
 {
 	typedef typename std::set<T*> InstanceSet;
+	typedef LLInstanceTracker<T, T*> MyT;
 public:
 	/// Dereferencing key_iter gives you a T* (since T* is the key)
 	typedef typename InstanceSet::iterator key_iter;
@@ -172,19 +180,17 @@ class LLInstanceTracker<T, T*>
 
 	static InstanceSet& getSet_()
 	{
-		if (! sInstances)
+		void * & instances = getInstances(typeid(MyT));
+		if (! instances)
 		{
-			sInstances = new InstanceSet;
+			instances = new InstanceSet;
 		}
-		return *sInstances;
+		return * static_cast<InstanceSet *>(instances);
 	}
 
-	static InstanceSet* sInstances;
 	static S32 sIterationNestDepth;
 };
 
-template <typename T, typename KEY> typename LLInstanceTracker<T, KEY>::InstanceMap* LLInstanceTracker<T, KEY>::sInstances = NULL;
-template <typename T> typename LLInstanceTracker<T, T*>::InstanceSet* LLInstanceTracker<T, T*>::sInstances = NULL;
 template <typename T> S32 LLInstanceTracker<T, T*>::sIterationNestDepth = 0;
 
 #endif
diff --git a/indra/llcommon/llmetricperformancetester.cpp b/indra/llcommon/llmetricperformancetester.cpp
index 5fa3a5ea070bfaeea313ba1a11d948d36dcc0f09..41d3eb0bf369881da267876ef9224e7bcfaf9446 100644
--- a/indra/llcommon/llmetricperformancetester.cpp
+++ b/indra/llcommon/llmetricperformancetester.cpp
@@ -63,7 +63,18 @@ BOOL LLMetricPerformanceTesterBasic::addTester(LLMetricPerformanceTesterBasic* t
 	sTesterMap.insert(std::make_pair(name, tester));
 	return TRUE;
 }
-	
+
+/*static*/ 
+void LLMetricPerformanceTesterBasic::deleteTester(std::string name)
+{
+	name_tester_map_t::iterator tester = sTesterMap.find(name);
+	if (tester != sTesterMap.end())
+	{
+		delete tester->second;
+		sTesterMap.erase(tester);
+	}
+}
+
 /*static*/ 
 LLMetricPerformanceTesterBasic* LLMetricPerformanceTesterBasic::getTester(std::string name) 
 {
@@ -83,7 +94,78 @@ BOOL LLMetricPerformanceTesterBasic::isMetricLogRequested(std::string name)
 	return (LLFastTimer::sMetricLog && ((LLFastTimer::sLogName == name) || (LLFastTimer::sLogName == DEFAULT_METRIC_NAME)));
 }
 
+/*static*/ 
+LLSD LLMetricPerformanceTesterBasic::analyzeMetricPerformanceLog(std::istream& is)
+{
+	LLSD ret;
+	LLSD cur;
+	
+	while (!is.eof() && LLSDSerialize::fromXML(cur, is))
+	{
+		for (LLSD::map_iterator iter = cur.beginMap(); iter != cur.endMap(); ++iter)
+		{
+			std::string label = iter->first;
+			
+			LLMetricPerformanceTesterBasic* tester = LLMetricPerformanceTesterBasic::getTester(iter->second["Name"].asString()) ;
+			if(tester)
+			{
+				ret[label]["Name"] = iter->second["Name"] ;
+				
+				S32 num_of_metrics = tester->getNumberOfMetrics() ;
+				for(S32 index = 0 ; index < num_of_metrics ; index++)
+				{
+					ret[label][ tester->getMetricName(index) ] = iter->second[ tester->getMetricName(index) ] ;
+				}
+			}
+		}
+	}
+	
+	return ret;
+}
+
+/*static*/ 
+void LLMetricPerformanceTesterBasic::doAnalysisMetrics(std::string baseline, std::string target, std::string output)
+{
+	if(!LLMetricPerformanceTesterBasic::hasMetricPerformanceTesters())
+	{
+		return ;
+	}
+	
+	// Open baseline and current target, exit if one is inexistent
+	std::ifstream base_is(baseline.c_str());
+	std::ifstream target_is(target.c_str());
+	if (!base_is.is_open() || !target_is.is_open())
+	{
+		llwarns << "'-analyzeperformance' error : baseline or current target file inexistent" << llendl;
+		base_is.close();
+		target_is.close();
+		return;
+	}
 	
+	//analyze baseline
+	LLSD base = analyzeMetricPerformanceLog(base_is);
+	base_is.close();
+	
+	//analyze current
+	LLSD current = analyzeMetricPerformanceLog(target_is);
+	target_is.close();
+	
+	//output comparision
+	std::ofstream os(output.c_str());
+	
+	os << "Label, Metric, Base(B), Target(T), Diff(T-B), Percentage(100*T/B)\n"; 
+	for(LLMetricPerformanceTesterBasic::name_tester_map_t::iterator iter = LLMetricPerformanceTesterBasic::sTesterMap.begin() ; 
+		iter != LLMetricPerformanceTesterBasic::sTesterMap.end() ; ++iter)
+	{
+		LLMetricPerformanceTesterBasic* tester = ((LLMetricPerformanceTesterBasic*)iter->second) ;	
+		tester->analyzePerformance(&os, &base, &current) ;
+	}
+	
+	os.flush();
+	os.close();
+}
+
+
 //----------------------------------------------------------------------------------------------
 // LLMetricPerformanceTesterBasic : Tester instance methods
 //----------------------------------------------------------------------------------------------
diff --git a/indra/llcommon/llmetricperformancetester.h b/indra/llcommon/llmetricperformancetester.h
index 1372f48dcfec7da703e21ce1412137b09c9890b4..1a18cdf36fbf3a55e31f6c7c6cf5bd6a422332ab 100644
--- a/indra/llcommon/llmetricperformancetester.h
+++ b/indra/llcommon/llmetricperformancetester.h
@@ -62,6 +62,8 @@ class LL_COMMON_API LLMetricPerformanceTesterBasic
 	 */
 	virtual void analyzePerformance(std::ofstream* os, LLSD* base, LLSD* current) ;
 
+	static void doAnalysisMetrics(std::string baseline, std::string target, std::string output) ;
+
 	/**
 	 * @return Returns the number of the test metrics in this tester instance.
 	 */
@@ -116,6 +118,7 @@ class LL_COMMON_API LLMetricPerformanceTesterBasic
 private:
 	void preOutputTestResults(LLSD* sd) ;
 	void postOutputTestResults(LLSD* sd) ;
+	static LLSD analyzeMetricPerformanceLog(std::istream& is) ;
 
 	std::string mName ;							// Name of this tester instance
 	S32 mCount ;								// Current record count
@@ -134,6 +137,12 @@ class LL_COMMON_API LLMetricPerformanceTesterBasic
 	 */
 	static LLMetricPerformanceTesterBasic* getTester(std::string name) ;
 	
+	/**
+	 * @return Delete the named tester from the list 
+	 * @param[in] name - Name of the tester instance to delete.
+	 */
+	static void deleteTester(std::string name);
+
 	/**
 	 * @return Returns TRUE if that metric *or* the default catch all metric has been requested to be logged
 	 * @param[in] name - Name of the tester queried.
diff --git a/indra/llcommon/llprocesslauncher.cpp b/indra/llcommon/llprocesslauncher.cpp
index 4b0f6b02511ecd46f46a889262c4c2017b4f8b2c..10950181fd30bf0f182d19e5954a3847eb8ec1a7 100644
--- a/indra/llcommon/llprocesslauncher.cpp
+++ b/indra/llcommon/llprocesslauncher.cpp
@@ -103,10 +103,30 @@ int LLProcessLauncher::launch(void)
 	char *args2 = new char[args.size() + 1];
 	strcpy(args2, args.c_str());
 
-	if( ! CreateProcessA( NULL, args2, NULL, NULL, FALSE, 0, NULL, NULL, &sinfo, &pinfo ) )
+	const char * working_directory = 0;
+	if(!mWorkingDir.empty()) working_directory = mWorkingDir.c_str();
+	if( ! CreateProcessA( NULL, args2, NULL, NULL, FALSE, 0, NULL, working_directory, &sinfo, &pinfo ) )
 	{
-		// TODO: do better than returning the OS-specific error code on failure...
 		result = GetLastError();
+
+		LPTSTR error_str = 0;
+		if(
+			FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+				NULL,
+				result,
+				0,
+				(LPTSTR)&error_str,
+				0,
+				NULL) 
+			!= 0) 
+		{
+			char message[256];
+			wcstombs(message, error_str, 256);
+			message[255] = 0;
+			llwarns << "CreateProcessA failed: " << message << llendl;
+			LocalFree(error_str);
+		}
+
 		if(result == 0)
 		{
 			// Make absolutely certain we return a non-zero value on failure.
diff --git a/indra/llcommon/llsdutil.cpp b/indra/llcommon/llsdutil.cpp
index f8f9ece058cdcc8182f02b48be1511a778704d0a..803417d368b899d81a9cc8c8aca09e925103a097 100644
--- a/indra/llcommon/llsdutil.cpp
+++ b/indra/llcommon/llsdutil.cpp
@@ -41,6 +41,7 @@
 
 #include "llsdserialize.h"
 #include "stringize.h"
+#include "is_approx_equal_fraction.h"
 
 #include <map>
 #include <set>
@@ -571,7 +572,7 @@ std::string llsd_matches(const LLSD& prototype, const LLSD& data, const std::str
     return match_types(prototype.type(), TypeVector(), data.type(), pfx);
 }
 
-bool llsd_equals(const LLSD& lhs, const LLSD& rhs)
+bool llsd_equals(const LLSD& lhs, const LLSD& rhs, unsigned bits)
 {
     // We're comparing strict equality of LLSD representation rather than
     // performing any conversions. So if the types aren't equal, the LLSD
@@ -588,6 +589,20 @@ bool llsd_equals(const LLSD& lhs, const LLSD& rhs)
         // Both are TypeUndefined. There's nothing more to know.
         return true;
 
+    case LLSD::TypeReal:
+        // This is where the 'bits' argument comes in handy. If passed
+        // explicitly, it means to use is_approx_equal_fraction() to compare.
+        if (bits >= 0)
+        {
+            return is_approx_equal_fraction(lhs.asReal(), rhs.asReal(), bits);
+        }
+        // Otherwise we compare bit representations, and the usual caveats
+        // about comparing floating-point numbers apply. Omitting 'bits' when
+        // comparing Real values is only useful when we expect identical bit
+        // representation for a given Real value, e.g. for integer-valued
+        // Reals.
+        return (lhs.asReal() == rhs.asReal());
+
 #define COMPARE_SCALAR(type)                                    \
     case LLSD::Type##type:                                      \
         /* LLSD::URI has operator!=() but not operator==() */   \
@@ -596,10 +611,6 @@ bool llsd_equals(const LLSD& lhs, const LLSD& rhs)
 
     COMPARE_SCALAR(Boolean);
     COMPARE_SCALAR(Integer);
-    // The usual caveats about comparing floating-point numbers apply. This is
-    // only useful when we expect identical bit representation for a given
-    // Real value, e.g. for integer-valued Reals.
-    COMPARE_SCALAR(Real);
     COMPARE_SCALAR(String);
     COMPARE_SCALAR(UUID);
     COMPARE_SCALAR(Date);
@@ -617,7 +628,7 @@ bool llsd_equals(const LLSD& lhs, const LLSD& rhs)
         for ( ; lai != laend && rai != raend; ++lai, ++rai)
         {
             // If any one array element is unequal, the arrays are unequal.
-            if (! llsd_equals(*lai, *rai))
+            if (! llsd_equals(*lai, *rai, bits))
                 return false;
         }
         // Here we've reached the end of one or the other array. They're equal
@@ -644,7 +655,7 @@ bool llsd_equals(const LLSD& lhs, const LLSD& rhs)
             if (rhskeys.erase(lmi->first) != 1)
                 return false;
             // Both maps have the current key. Compare values.
-            if (! llsd_equals(lmi->second, rhs[lmi->first]))
+            if (! llsd_equals(lmi->second, rhs[lmi->first], bits))
                 return false;
         }
         // We've now established that all the lhs keys have equal values in
@@ -657,7 +668,7 @@ bool llsd_equals(const LLSD& lhs, const LLSD& rhs)
         // We expect that every possible type() value is specifically handled
         // above. Failing to extend this switch to support a new LLSD type is
         // an error that must be brought to the coder's attention.
-        LL_ERRS("llsd_equals") << "llsd_equals(" << lhs << ", " << rhs << "): "
+        LL_ERRS("llsd_equals") << "llsd_equals(" << lhs << ", " << rhs << ", " << bits << "): "
             "unknown type " << lhs.type() << LL_ENDL;
         return false;               // pacify the compiler
     }
diff --git a/indra/llcommon/llsdutil.h b/indra/llcommon/llsdutil.h
index bb8c0690b13ed8b922e883f00f267c66ff90d0e1..65c7297cbf8a7151db93f6d20935717b05e62bb8 100644
--- a/indra/llcommon/llsdutil.h
+++ b/indra/llcommon/llsdutil.h
@@ -123,8 +123,10 @@ LL_COMMON_API BOOL compare_llsd_with_template(
  */
 LL_COMMON_API std::string llsd_matches(const LLSD& prototype, const LLSD& data, const std::string& pfx="");
 
-/// Deep equality
-LL_COMMON_API bool llsd_equals(const LLSD& lhs, const LLSD& rhs);
+/// Deep equality. If you want to compare LLSD::Real values for approximate
+/// equality rather than bitwise equality, pass @a bits as for
+/// is_approx_equal_fraction().
+LL_COMMON_API bool llsd_equals(const LLSD& lhs, const LLSD& rhs, unsigned bits=-1);
 
 // Simple function to copy data out of input & output iterators if
 // there is no need for casting.
@@ -138,4 +140,283 @@ template<typename Input> LLSD llsd_copy_array(Input iter, Input end)
 	return dest;
 }
 
+/*****************************************************************************
+*   LLSDArray
+*****************************************************************************/
+/**
+ * Construct an LLSD::Array inline, with implicit conversion to LLSD. Usage:
+ *
+ * @code
+ * void somefunc(const LLSD&);
+ * ...
+ * somefunc(LLSDArray("text")(17)(3.14));
+ * @endcode
+ *
+ * For completeness, LLSDArray() with no args constructs an empty array, so
+ * <tt>LLSDArray()("text")(17)(3.14)</tt> produces an array equivalent to the
+ * above. But for most purposes, LLSD() is already equivalent to an empty
+ * array, and if you explicitly want an empty isArray(), there's
+ * LLSD::emptyArray(). However, supporting a no-args LLSDArray() constructor
+ * follows the principle of least astonishment.
+ */
+class LLSDArray
+{
+public:
+    LLSDArray():
+        _data(LLSD::emptyArray())
+    {}
+
+    /**
+     * Need an explicit copy constructor. Consider the following:
+     *
+     * @code
+     * LLSD array_of_arrays(LLSDArray(LLSDArray(17)(34))
+     *                               (LLSDArray("x")("y")));
+     * @endcode
+     *
+     * The coder intends to construct [[17, 34], ["x", "y"]].
+     *
+     * With the compiler's implicit copy constructor, s/he gets instead
+     * [17, 34, ["x", "y"]].
+     *
+     * The expression LLSDArray(17)(34) constructs an LLSDArray with those two
+     * values. The reader assumes it should be converted to LLSD, as we always
+     * want with LLSDArray, before passing it to the @em outer LLSDArray
+     * constructor! This copy constructor makes that happen.
+     */
+    LLSDArray(const LLSDArray& inner):
+        _data(LLSD::emptyArray())
+    {
+        _data.append(inner);
+    }
+
+    LLSDArray(const LLSD& value):
+        _data(LLSD::emptyArray())
+    {
+        _data.append(value);
+    }
+
+    LLSDArray& operator()(const LLSD& value)
+    {
+        _data.append(value);
+        return *this;
+    }
+
+    operator LLSD() const { return _data; }
+    LLSD get() const { return _data; }
+
+private:
+    LLSD _data;
+};
+
+/*****************************************************************************
+*   LLSDMap
+*****************************************************************************/
+/**
+ * Construct an LLSD::Map inline, with implicit conversion to LLSD. Usage:
+ *
+ * @code
+ * void somefunc(const LLSD&);
+ * ...
+ * somefunc(LLSDMap("alpha", "abc")("number", 17)("pi", 3.14));
+ * @endcode
+ *
+ * For completeness, LLSDMap() with no args constructs an empty map, so
+ * <tt>LLSDMap()("alpha", "abc")("number", 17)("pi", 3.14)</tt> produces a map
+ * equivalent to the above. But for most purposes, LLSD() is already
+ * equivalent to an empty map, and if you explicitly want an empty isMap(),
+ * there's LLSD::emptyMap(). However, supporting a no-args LLSDMap()
+ * constructor follows the principle of least astonishment.
+ */
+class LLSDMap
+{
+public:
+    LLSDMap():
+        _data(LLSD::emptyMap())
+    {}
+    LLSDMap(const LLSD::String& key, const LLSD& value):
+        _data(LLSD::emptyMap())
+    {
+        _data[key] = value;
+    }
+
+    LLSDMap& operator()(const LLSD::String& key, const LLSD& value)
+    {
+        _data[key] = value;
+        return *this;
+    }
+
+    operator LLSD() const { return _data; }
+    LLSD get() const { return _data; }
+
+private:
+    LLSD _data;
+};
+
+/*****************************************************************************
+*   LLSDParam
+*****************************************************************************/
+/**
+ * LLSDParam is a customization point for passing LLSD values to function
+ * parameters of more or less arbitrary type. LLSD provides a small set of
+ * native conversions; but if a generic algorithm explicitly constructs an
+ * LLSDParam object in the function's argument list, a consumer can provide
+ * LLSDParam specializations to support more different parameter types than
+ * LLSD's native conversions.
+ *
+ * Usage:
+ *
+ * @code
+ * void somefunc(const paramtype&);
+ * ...
+ * somefunc(..., LLSDParam<paramtype>(someLLSD), ...);
+ * @endcode
+ */
+template <typename T>
+class LLSDParam
+{
+public:
+    /**
+     * Default implementation converts to T on construction, saves converted
+     * value for later retrieval
+     */
+    LLSDParam(const LLSD& value):
+        _value(value)
+    {}
+
+    operator T() const { return _value; }
+
+private:
+    T _value;
+};
+
+/**
+ * Turns out that several target types could accept an LLSD param using any of
+ * a few different conversions, e.g. LLUUID's constructor can accept LLUUID or
+ * std::string. Therefore, the compiler can't decide which LLSD conversion
+ * operator to choose, even though to us it seems obvious. But that's okay, we
+ * can specialize LLSDParam for such target types, explicitly specifying the
+ * desired conversion -- that's part of what LLSDParam is all about. Turns out
+ * we have to do that enough to make it worthwhile generalizing. Use a macro
+ * because I need to specify one of the asReal, etc., explicit conversion
+ * methods as well as a type. If I'm overlooking a clever way to implement
+ * that using a template instead, feel free to reimplement.
+ */
+#define LLSDParam_for(T, AS)                    \
+template <>                                     \
+class LLSDParam<T>                              \
+{                                               \
+public:                                         \
+    LLSDParam(const LLSD& value):               \
+        _value(value.AS())                      \
+    {}                                          \
+                                                \
+    operator T() const { return _value; }       \
+                                                \
+private:                                        \
+    T _value;                                   \
+}
+
+LLSDParam_for(float,        asReal);
+LLSDParam_for(LLUUID,       asUUID);
+LLSDParam_for(LLDate,       asDate);
+LLSDParam_for(LLURI,        asURI);
+LLSDParam_for(LLSD::Binary, asBinary);
+
+/**
+ * LLSDParam<const char*> is an example of the kind of conversion you can
+ * support with LLSDParam beyond native LLSD conversions. Normally you can't
+ * pass an LLSD object to a function accepting const char* -- but you can
+ * safely pass an LLSDParam<const char*>(yourLLSD).
+ */
+template <>
+class LLSDParam<const char*>
+{
+private:
+    // The difference here is that we store a std::string rather than a const
+    // char*. It's important that the LLSDParam object own the std::string.
+    std::string _value;
+    // We don't bother storing the incoming LLSD object, but we do have to
+    // distinguish whether _value is an empty string because the LLSD object
+    // contains an empty string or because it's isUndefined().
+    bool _undefined;
+
+public:
+    LLSDParam(const LLSD& value):
+        _value(value),
+        _undefined(value.isUndefined())
+    {}
+
+    // The const char* we retrieve is for storage owned by our _value member.
+    // That's how we guarantee that the const char* is valid for the lifetime
+    // of this LLSDParam object. Constructing your LLSDParam in the argument
+    // list should ensure that the LLSDParam object will persist for the
+    // duration of the function call.
+    operator const char*() const
+    {
+        if (_undefined)
+        {
+            // By default, an isUndefined() LLSD object's asString() method
+            // will produce an empty string. But for a function accepting
+            // const char*, it's often important to be able to pass NULL, and
+            // isUndefined() seems like the best way. If you want to pass an
+            // empty string, you can still pass LLSD(""). Without this special
+            // case, though, no LLSD value could pass NULL.
+            return NULL;
+        }
+        return _value.c_str();
+    }
+};
+
+namespace llsd
+{
+
+/*****************************************************************************
+*   BOOST_FOREACH() helpers for LLSD
+*****************************************************************************/
+/// Usage: BOOST_FOREACH(LLSD item, inArray(someLLSDarray)) { ... }
+class inArray
+{
+public:
+    inArray(const LLSD& array):
+        _array(array)
+    {}
+
+    typedef LLSD::array_const_iterator const_iterator;
+    typedef LLSD::array_iterator iterator;
+
+    iterator begin() { return _array.beginArray(); }
+    iterator end()   { return _array.endArray(); }
+    const_iterator begin() const { return _array.beginArray(); }
+    const_iterator end()   const { return _array.endArray(); }
+
+private:
+    LLSD _array;
+};
+
+/// MapEntry is what you get from dereferencing an LLSD::map_[const_]iterator.
+typedef std::map<LLSD::String, LLSD>::value_type MapEntry;
+
+/// Usage: BOOST_FOREACH([const] MapEntry& e, inMap(someLLSDmap)) { ... }
+class inMap
+{
+public:
+    inMap(const LLSD& map):
+        _map(map)
+    {}
+
+    typedef LLSD::map_const_iterator const_iterator;
+    typedef LLSD::map_iterator iterator;
+
+    iterator begin() { return _map.beginMap(); }
+    iterator end()   { return _map.endMap(); }
+    const_iterator begin() const { return _map.beginMap(); }
+    const_iterator end()   const { return _map.endMap(); }
+
+private:
+    LLSD _map;
+};
+
+} // namespace llsd
+
 #endif // LL_LLSDUTIL_H
diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h
index 3838b2b16cee95e5fd878cc6847476807f9298d0..58f96df8ab49102dcda26d0e16cd350df33d16b0 100644
--- a/indra/llcommon/llversionviewer.h
+++ b/indra/llcommon/llversionviewer.h
@@ -28,8 +28,8 @@
 #define LL_LLVERSIONVIEWER_H
 
 const S32 LL_VERSION_MAJOR = 2;
-const S32 LL_VERSION_MINOR = 5;
-const S32 LL_VERSION_PATCH = 3;
+const S32 LL_VERSION_MINOR = 6;
+const S32 LL_VERSION_PATCH = 7;
 const S32 LL_VERSION_BUILD = 0;
 
 const char * const LL_CHANNEL = "Second Life Developer";
diff --git a/indra/llcommon/tests/lldependencies_test.cpp b/indra/llcommon/tests/lldependencies_test.cpp
index e40743ccf75d7babba03d80b10174b227987e2d7..5395d785b6b92f991700bbaed0cdc7c62917921d 100644
--- a/indra/llcommon/tests/lldependencies_test.cpp
+++ b/indra/llcommon/tests/lldependencies_test.cpp
@@ -258,10 +258,10 @@ namespace tut
         ++const_iterator;
         ensure_equals(const_iterator->first, "def");
         ensure_equals(const_iterator->second, 2);
-        NameIndexDeps::node_range node_range(nideps.get_node_range());
-        ensure_equals(instance_from_range<std::vector<int> >(node_range), make< std::vector<int> >(list_of(1)(2)(3)));
-        *node_range.begin() = 0;
-        *node_range.begin() = 1;
+//        NameIndexDeps::node_range node_range(nideps.get_node_range());
+//        ensure_equals(instance_from_range<std::vector<int> >(node_range), make< std::vector<int> >(list_of(1)(2)(3)));
+//        *node_range.begin() = 0;
+//        *node_range.begin() = 1;
         NameIndexDeps::const_node_range const_node_range(const_nideps.get_node_range());
         ensure_equals(instance_from_range<std::vector<int> >(const_node_range), make< std::vector<int> >(list_of(1)(2)(3)));
         NameIndexDeps::const_key_range const_key_range(const_nideps.get_key_range());
@@ -278,8 +278,8 @@ namespace tut
                       def);
         ensure_equals(instance_from_range<StringList>(const_nideps.get_after_range(const_nideps.get_range().begin())),
                       def);
-        ensure_equals(instance_from_range<StringList>(nideps.get_after_range(nideps.get_node_range().begin())),
-                      def);
+//        ensure_equals(instance_from_range<StringList>(nideps.get_after_range(nideps.get_node_range().begin())),
+//                      def);
         ensure_equals(instance_from_range<StringList>(const_nideps.get_after_range(const_nideps.get_node_range().begin())),
                       def);
         ensure_equals(instance_from_range<StringList>(nideps.get_after_range(nideps.get_key_range().begin())),
diff --git a/indra/llcommon/tests/llerror_test.cpp b/indra/llcommon/tests/llerror_test.cpp
index 1ef8fc9712034a36ff6ac4d54badd935de61f157..09a20231dea2d309e74f58d97ab193fdd1604783 100644
--- a/indra/llcommon/tests/llerror_test.cpp
+++ b/indra/llcommon/tests/llerror_test.cpp
@@ -48,7 +48,10 @@ namespace
 {
 	static bool fatalWasCalled;
 	void fatalCall(const std::string&) { fatalWasCalled = true; }
+}
 	
+namespace tut
+{
 	class TestRecorder : public LLError::Recorder
 	{
 	public:
@@ -56,7 +59,7 @@ namespace
 		~TestRecorder() { LLError::removeRecorder(this); }
 		
 		void recordMessage(LLError::ELevel level,
-							const std::string& message)
+						   const std::string& message)
 		{
 			mMessages.push_back(message);
 		}
@@ -66,12 +69,12 @@ namespace
 		
 		void setWantsTime(bool t)	{ mWantsTime = t; }
 		bool wantsTime()			{ return mWantsTime; }
-
+		
 		std::string message(int n)
 		{
 			std::ostringstream test_name;
 			test_name << "testing message " << n << ", not enough messages";
-
+			
 			tut::ensure(test_name.str(), n < countMessages());
 			return mMessages[n];
 		}
@@ -82,10 +85,7 @@ namespace
 		
 		bool mWantsTime;
 	};
-}
-	
-namespace tut
-{
+
 	struct ErrorTestData
 	{
 		TestRecorder mRecorder;
@@ -381,7 +381,7 @@ namespace
 	}
 	
 	typedef std::string (*LogFromFunction)(bool);
-	void testLogName(TestRecorder& recorder, LogFromFunction f,
+	void testLogName(tut::TestRecorder& recorder, LogFromFunction f,
 		const std::string& class_name = "")
 	{
 		recorder.clearMessages();
diff --git a/indra/llcommon/tests/lleventdispatcher_test.cpp b/indra/llcommon/tests/lleventdispatcher_test.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..263c9b171f97cab9d30e844e016f5e565f6a5524
--- /dev/null
+++ b/indra/llcommon/tests/lleventdispatcher_test.cpp
@@ -0,0 +1,1324 @@
+/**
+ * @file   lleventdispatcher_test.cpp
+ * @author Nat Goodspeed
+ * @date   2011-01-20
+ * @brief  Test for lleventdispatcher.
+ * 
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Copyright (c) 2011, Linden Research, Inc.
+ * $/LicenseInfo$
+ */
+
+// Precompiled header
+#include "linden_common.h"
+// associated header
+#include "lleventdispatcher.h"
+// STL headers
+// std headers
+// external library headers
+// other Linden headers
+#include "../test/lltut.h"
+#include "llsd.h"
+#include "llsdutil.h"
+#include "stringize.h"
+#include "tests/wrapllerrs.h"
+
+#include <map>
+#include <string>
+#include <stdexcept>
+
+#include <boost/bind.hpp>
+#include <boost/function.hpp>
+#include <boost/range.hpp>
+#include <boost/foreach.hpp>
+#define foreach BOOST_FOREACH
+
+#include <boost/lambda/lambda.hpp>
+
+#include <iostream>
+#include <iomanip>
+
+using boost::lambda::constant;
+using boost::lambda::constant_ref;
+using boost::lambda::var;
+
+using namespace llsd;
+
+/*****************************************************************************
+*   Output control
+*****************************************************************************/
+#ifdef DEBUG_ON
+using std::cout;
+#else
+static std::ostringstream cout;
+#endif
+
+/*****************************************************************************
+*   Example data, functions, classes
+*****************************************************************************/
+// We don't need a whole lot of different arbitrary-params methods, just (no |
+// (const LLSD&) | arbitrary) args (function | static method | non-static
+// method), where 'arbitrary' is (every LLSD datatype + (const char*)).
+// But we need to register each one under different names for the different
+// registration styles. Don't forget LLEventDispatcher subclass methods(const
+// LLSD&).
+
+// However, the number of target parameter conversions we want to try exceeds
+// boost::fusion::invoke()'s supported parameter-list size. Break out two
+// different lists.
+#define NPARAMSa bool b, int i, float f, double d, const char* cp
+#define NPARAMSb const std::string& s, const LLUUID& uuid, const LLDate& date, \
+                 const LLURI& uri, const std::vector<U8>& bin
+#define NARGSa   b, i, f, d, cp
+#define NARGSb   s, uuid, date, uri, bin
+
+// For some registration methods we need methods on a subclass of
+// LLEventDispatcher. To simplify things, we'll use this Dispatcher subclass
+// for all our testing, including testing its own methods.
+class Dispatcher: public LLEventDispatcher
+{
+public:
+    Dispatcher(const std::string& name, const std::string& key):
+        LLEventDispatcher(name, key)
+    {}
+
+    // sensing member, mutable because we want to know when we've reached our
+    // const method too
+    mutable LLSD llsd;
+
+    void method1(const LLSD& obj) { llsd = obj; }
+    void cmethod1(const LLSD& obj) const { llsd = obj; }
+};
+
+// sensing vars, captured in a struct to make it convenient to clear them
+struct Vars
+{
+    LLSD llsd;
+    bool b;
+    int i;
+    float f;
+    double d;
+    // Capture param passed as char*. But merely storing a char* received from
+    // our caller, possibly the .c_str() from a concatenation expression,
+    // would be Bad: the pointer will be invalidated long before we can query
+    // it. We could allocate a new chunk of memory, copy the string data and
+    // point to that instead -- but hey, guess what, we already have a class
+    // that does that!
+    std::string cp;
+    std::string s;
+    LLUUID uuid;
+    LLDate date;
+    LLURI uri;
+    std::vector<U8> bin;
+
+    Vars():
+        // Only need to initialize the POD types, the rest should take care of
+        // default-constructing themselves.
+        b(false),
+        i(0),
+        f(0),
+        d(0)
+    {}
+
+    // Detect any non-default values for convenient testing
+    LLSD inspect() const
+    {
+        LLSD result;
+
+        if (llsd.isDefined())
+            result["llsd"] = llsd;
+        if (b)
+            result["b"] = b;
+        if (i)
+            result["i"] = i;
+        if (f)
+            result["f"] = f;
+        if (d)
+            result["d"] = d;
+        if (! cp.empty())
+            result["cp"] = cp;
+        if (! s.empty())
+            result["s"] = s;
+        if (uuid != LLUUID())
+            result["uuid"] = uuid;
+        if (date != LLDate())
+            result["date"] = date;
+        if (uri != LLURI())
+            result["uri"] = uri;
+        if (! bin.empty())
+            result["bin"] = bin;
+
+        return result;
+    }
+
+    /*------------- no-args (non-const, const, static) methods -------------*/
+    void method0()
+    {
+        cout << "method0()\n";
+        i = 17;
+    }
+
+    void cmethod0() const
+    {
+        cout << 'c';
+        const_cast<Vars*>(this)->method0();
+    }
+
+    static void smethod0();
+
+    /*------------ Callable (non-const, const, static) methods -------------*/
+    void method1(const LLSD& obj)
+    {
+        cout << "method1(" << obj << ")\n";
+        llsd = obj;
+    }
+
+    void cmethod1(const LLSD& obj) const
+    {
+        cout << 'c';
+        const_cast<Vars*>(this)->method1(obj);
+    }
+
+    static void smethod1(const LLSD& obj);
+
+    /*-------- Arbitrary-params (non-const, const, static) methods ---------*/
+    void methodna(NPARAMSa)
+    {
+        // Because our const char* param cp might be NULL, and because we
+        // intend to capture the value in a std::string, have to distinguish
+        // between the NULL value and any non-NULL value. Use a convention
+        // easy for a human reader: enclose any non-NULL value in single
+        // quotes, reserving the unquoted string "NULL" to represent a NULL ptr.
+        std::string vcp;
+        if (cp == NULL)
+            vcp = "NULL";
+        else
+            vcp = std::string("'") + cp + "'";
+
+        cout << "methodna(" << b
+             << ", " << i
+             << ", " << f
+             << ", " << d
+             << ", " << vcp
+             << ")\n";
+
+        this->b = b;
+        this->i = i;
+        this->f = f;
+        this->d = d;
+        this->cp = vcp;
+    }
+
+    void methodnb(NPARAMSb)
+    {
+        std::ostringstream vbin;
+        foreach(U8 byte, bin)
+        {
+            vbin << std::hex << std::setfill('0') << std::setw(2) << unsigned(byte);
+        }
+
+        cout << "methodnb(" << "'" << s << "'"
+             << ", " << uuid
+             << ", " << date
+             << ", '" << uri << "'"
+             << ", " << vbin.str()
+             << ")\n";
+
+        this->s = s;
+        this->uuid = uuid;
+        this->date = date;
+        this->uri = uri;
+        this->bin = bin;
+    }
+
+    void cmethodna(NPARAMSa) const
+    {
+        cout << 'c';
+        const_cast<Vars*>(this)->methodna(NARGSa);
+    }
+
+    void cmethodnb(NPARAMSb) const
+    {
+        cout << 'c';
+        const_cast<Vars*>(this)->methodnb(NARGSb);
+    }
+
+    static void smethodna(NPARAMSa);
+    static void smethodnb(NPARAMSb);
+};
+/*------- Global Vars instance for free functions and static methods -------*/
+static Vars g;
+
+/*------------ Static Vars method implementations reference 'g' ------------*/
+void Vars::smethod0()
+{
+    cout << "smethod0() -> ";
+    g.method0();
+}
+
+void Vars::smethod1(const LLSD& obj)
+{
+    cout << "smethod1(" << obj << ") -> ";
+    g.method1(obj);
+}
+
+void Vars::smethodna(NPARAMSa)
+{
+    cout << "smethodna(...) -> ";
+    g.methodna(NARGSa);
+}
+
+void Vars::smethodnb(NPARAMSb)
+{
+    cout << "smethodnb(...) -> ";
+    g.methodnb(NARGSb);
+}
+
+/*--------------------------- Reset global Vars ----------------------------*/
+void clear()
+{
+    g = Vars();
+}
+
+/*------------------- Free functions also reference 'g' --------------------*/
+void free0()
+{
+    cout << "free0() -> ";
+    g.method0();
+}
+
+void free1(const LLSD& obj)
+{
+    cout << "free1(" << obj << ") -> ";
+    g.method1(obj);
+}
+
+void freena(NPARAMSa)
+{
+    cout << "freena(...) -> ";
+    g.methodna(NARGSa);
+}
+
+void freenb(NPARAMSb)
+{
+    cout << "freenb(...) -> ";
+    g.methodnb(NARGSb);
+}
+
+/*****************************************************************************
+*   TUT
+*****************************************************************************/
+namespace tut
+{
+    struct lleventdispatcher_data
+    {
+        WrapLL_ERRS redirect;
+        Dispatcher work;
+        Vars v;
+        std::string name, desc;
+        // Capture our own copy of all registered functions' descriptions
+        typedef std::map<std::string, std::string> DescMap;
+        DescMap descs;
+        // Capture the Vars instance on which we expect each function to operate
+        typedef std::map<std::string, Vars*> VarsMap;
+        VarsMap funcvars;
+        // Required structure for Callables with requirements
+        LLSD required;
+        // Parameter names for freena(), freenb()
+        LLSD params;
+        // Full, partial defaults arrays for params for freena(), freenb()
+        LLSD dft_array_full, dft_array_partial;
+        // Start index of partial defaults arrays
+        const LLSD::Integer partial_offset;
+        // Full, partial defaults maps for params for freena(), freenb()
+        LLSD dft_map_full, dft_map_partial;
+        // Most of the above are indexed by "a" or "b". Useful to have an
+        // array containing those strings for iterating.
+        std::vector<LLSD::String> ab;
+
+        lleventdispatcher_data():
+            work("test dispatcher", "op"),
+            // map {d=double, array=[3 elements]}
+            required(LLSDMap("d", LLSD::Real(0))("array", LLSDArray(LLSD())(LLSD())(LLSD()))),
+            // first several params are required, last couple optional
+            partial_offset(3)
+        {
+            // This object is reconstructed for every test<n> method. But
+            // clear global variables every time too.
+            ::clear();
+
+            const char* abs[] = { "a", "b" };
+            ab.assign(boost::begin(abs), boost::end(abs));
+
+            // Registration cases:
+            // - (Callable | subclass const method | subclass non-const method |
+            //   non-subclass method) (with | without) required
+            // - (Free function | static method | non-static method), (no | arbitrary) params,
+            //   array style
+            // - (Free function | static method | non-static method), (no | arbitrary) params,
+            //   map style, (empty | partial | full) (array | map) defaults
+            // - Map-style errors:
+            //   - (scalar | map) param names
+            //   - defaults scalar
+            //   - defaults array longer than params array
+            //   - defaults map with plural unknown param names
+
+            // I hate to have to write things twice, because of having to keep
+            // them consistent. If we had variadic functions, addf() would be
+            // a variadic method, capturing the name and desc and passing them
+            // plus "everything else" to work.add(). If I could return a pair
+            // and use that pair as the first two args to work.add(), I'd do
+            // that. But the best I can do with present C++ is to set two
+            // instance variables as a side effect of addf(), and pass those
+            // variables to each work.add() call. :-P
+
+            /*------------------------- Callables --------------------------*/
+
+            // Arbitrary Callable with/out required params
+            addf("free1", "free1", &g);
+            work.add(name, desc, free1);
+            addf("free1_req", "free1", &g);
+            work.add(name, desc, free1, required);
+            // Subclass non-const method with/out required params
+            addf("Dmethod1", "method1", NULL);
+            work.add(name, desc, &Dispatcher::method1);
+            addf("Dmethod1_req", "method1", NULL);
+            work.add(name, desc, &Dispatcher::method1, required);
+            // Subclass const method with/out required params
+            addf("Dcmethod1", "cmethod1", NULL);
+            work.add(name, desc, &Dispatcher::cmethod1);
+            addf("Dcmethod1_req", "cmethod1", NULL);
+            work.add(name, desc, &Dispatcher::cmethod1, required);
+            // Non-subclass method with/out required params
+            addf("method1", "method1", &v);
+            work.add(name, desc, boost::bind(&Vars::method1, boost::ref(v), _1));
+            addf("method1_req", "method1", &v);
+            work.add(name, desc, boost::bind(&Vars::method1, boost::ref(v), _1), required);
+
+            /*--------------- Arbitrary params, array style ----------------*/
+
+            // (Free function | static method) with (no | arbitrary) params, array style
+            addf("free0_array", "free0", &g);
+            work.add(name, desc, free0);
+            addf("freena_array", "freena", &g);
+            work.add(name, desc, freena);
+            addf("freenb_array", "freenb", &g);
+            work.add(name, desc, freenb);
+            addf("smethod0_array", "smethod0", &g);
+            work.add(name, desc, &Vars::smethod0);
+            addf("smethodna_array", "smethodna", &g);
+            work.add(name, desc, &Vars::smethodna);
+            addf("smethodnb_array", "smethodnb", &g);
+            work.add(name, desc, &Vars::smethodnb);
+            // Non-static method with (no | arbitrary) params, array style
+            addf("method0_array", "method0", &v);
+            work.add(name, desc, &Vars::method0, boost::lambda::var(v));
+            addf("methodna_array", "methodna", &v);
+            work.add(name, desc, &Vars::methodna, boost::lambda::var(v));
+            addf("methodnb_array", "methodnb", &v);
+            work.add(name, desc, &Vars::methodnb, boost::lambda::var(v));
+
+            /*---------------- Arbitrary params, map style -----------------*/
+
+            // We lay out each params list as an array, also each array of
+            // default values we'll register. We'll zip these into
+            // (param=value) maps. Why not define them as maps and just
+            // extract the keys and values to arrays? Because that wouldn't
+            // give us the right params-list order.
+
+            // freena(), methodna(), cmethodna(), smethodna() all take same param list.
+            // Same for freenb() et al.
+            params = LLSDMap("a", LLSDArray("b")("i")("f")("d")("cp"))
+                            ("b", LLSDArray("s")("uuid")("date")("uri")("bin"));
+            cout << "params:\n" << params << "\nparams[\"a\"]:\n" << params["a"] << "\nparams[\"b\"]:\n" << params["b"] << std::endl;
+            // default LLSD::Binary value   
+            std::vector<U8> binary;
+            for (size_t ix = 0, h = 0xaa; ix < 6; ++ix, h += 0x11)
+            {
+                binary.push_back(h);
+            }
+            // Full defaults arrays. We actually don't care what the LLUUID or
+            // LLDate values are, as long as they're different from the
+            // LLUUID() and LLDate() default values so inspect() will report
+            // them.
+            dft_array_full = LLSDMap("a", LLSDArray(true)(17)(3.14)(123456.78)("classic"))
+                                    ("b", LLSDArray("string")
+                                                   (LLUUID::generateNewID())
+                                                   (LLDate::now())
+                                                   (LLURI("http://www.ietf.org/rfc/rfc3986.txt"))
+                                                   (binary));
+            cout << "dft_array_full:\n" << dft_array_full << std::endl;
+            // Partial defaults arrays.
+            foreach(LLSD::String a, ab)
+            {
+                LLSD::Integer partition(std::min(partial_offset, dft_array_full[a].size()));
+                dft_array_partial[a] =
+                    llsd_copy_array(dft_array_full[a].beginArray() + partition,
+                                    dft_array_full[a].endArray());
+            }
+            cout << "dft_array_partial:\n" << dft_array_partial << std::endl;
+
+            foreach(LLSD::String a, ab)
+            {
+                // Generate full defaults maps by zipping (params, dft_array_full).
+                dft_map_full[a] = zipmap(params[a], dft_array_full[a]);
+
+                // Generate partial defaults map by zipping alternate entries from
+                // (params, dft_array_full). Part of the point of using map-style
+                // defaults is to allow any subset of the target function's
+                // parameters to be optional, not just the rightmost.
+                for (LLSD::Integer ix = 0, ixend = params[a].size(); ix < ixend; ix += 2)
+                {
+                    dft_map_partial[a][params[a][ix].asString()] = dft_array_full[a][ix];
+                }
+            }
+            cout << "dft_map_full:\n" << dft_map_full << "\ndft_map_partial:\n" << dft_map_partial << '\n';
+
+            // (Free function | static method) with (no | arbitrary) params,
+            // map style, no (empty array) defaults
+            addf("free0_map", "free0", &g);
+            work.add(name, desc, free0, LLSD::emptyArray());
+            addf("smethod0_map", "smethod0", &g);
+            work.add(name, desc, &Vars::smethod0, LLSD::emptyArray());
+            addf("freena_map_allreq", "freena", &g);
+            work.add(name, desc, freena, params["a"]);
+            addf("freenb_map_allreq", "freenb", &g);
+            work.add(name, desc, freenb, params["b"]);
+            addf("smethodna_map_allreq", "smethodna", &g);
+            work.add(name, desc, &Vars::smethodna, params["a"]);
+            addf("smethodnb_map_allreq", "smethodnb", &g);
+            work.add(name, desc, &Vars::smethodnb, params["b"]);
+            // Non-static method with (no | arbitrary) params, map style, no
+            // (empty array) defaults
+            addf("method0_map", "method0", &v);
+            work.add(name, desc, &Vars::method0, var(v), LLSD::emptyArray());
+            addf("methodna_map_allreq", "methodna", &v);
+            work.add(name, desc, &Vars::methodna, var(v), params["a"]);
+            addf("methodnb_map_allreq", "methodnb", &v);
+            work.add(name, desc, &Vars::methodnb, var(v), params["b"]);
+
+            // Except for the "more (array | map) defaults than params" error
+            // cases, tested separately below, the (partial | full)(array |
+            // map) defaults cases don't apply to no-params functions/methods.
+            // So eliminate free0, smethod0, method0 from the cases below.
+
+            // (Free function | static method) with arbitrary params, map
+            // style, partial (array | map) defaults
+            addf("freena_map_leftreq", "freena", &g);
+            work.add(name, desc, freena, params["a"], dft_array_partial["a"]);
+            addf("freenb_map_leftreq", "freenb", &g);
+            work.add(name, desc, freenb, params["b"], dft_array_partial["b"]);
+            addf("smethodna_map_leftreq", "smethodna", &g);
+            work.add(name, desc, &Vars::smethodna, params["a"], dft_array_partial["a"]);
+            addf("smethodnb_map_leftreq", "smethodnb", &g);
+            work.add(name, desc, &Vars::smethodnb, params["b"], dft_array_partial["b"]);
+            addf("freena_map_skipreq", "freena", &g);
+            work.add(name, desc, freena, params["a"], dft_map_partial["a"]);
+            addf("freenb_map_skipreq", "freenb", &g);
+            work.add(name, desc, freenb, params["b"], dft_map_partial["b"]);
+            addf("smethodna_map_skipreq", "smethodna", &g);
+            work.add(name, desc, &Vars::smethodna, params["a"], dft_map_partial["a"]);
+            addf("smethodnb_map_skipreq", "smethodnb", &g);
+            work.add(name, desc, &Vars::smethodnb, params["b"], dft_map_partial["b"]);
+            // Non-static method with arbitrary params, map style, partial
+            // (array | map) defaults
+            addf("methodna_map_leftreq", "methodna", &v);
+            work.add(name, desc, &Vars::methodna, var(v), params["a"], dft_array_partial["a"]);
+            addf("methodnb_map_leftreq", "methodnb", &v);
+            work.add(name, desc, &Vars::methodnb, var(v), params["b"], dft_array_partial["b"]);
+            addf("methodna_map_skipreq", "methodna", &v);
+            work.add(name, desc, &Vars::methodna, var(v), params["a"], dft_map_partial["a"]);
+            addf("methodnb_map_skipreq", "methodnb", &v);
+            work.add(name, desc, &Vars::methodnb, var(v), params["b"], dft_map_partial["b"]);
+
+            // (Free function | static method) with arbitrary params, map
+            // style, full (array | map) defaults
+            addf("freena_map_adft", "freena", &g);
+            work.add(name, desc, freena, params["a"], dft_array_full["a"]);
+            addf("freenb_map_adft", "freenb", &g);
+            work.add(name, desc, freenb, params["b"], dft_array_full["b"]);
+            addf("smethodna_map_adft", "smethodna", &g);
+            work.add(name, desc, &Vars::smethodna, params["a"], dft_array_full["a"]);
+            addf("smethodnb_map_adft", "smethodnb", &g);
+            work.add(name, desc, &Vars::smethodnb, params["b"], dft_array_full["b"]);
+            addf("freena_map_mdft", "freena", &g);
+            work.add(name, desc, freena, params["a"], dft_map_full["a"]);
+            addf("freenb_map_mdft", "freenb", &g);
+            work.add(name, desc, freenb, params["b"], dft_map_full["b"]);
+            addf("smethodna_map_mdft", "smethodna", &g);
+            work.add(name, desc, &Vars::smethodna, params["a"], dft_map_full["a"]);
+            addf("smethodnb_map_mdft", "smethodnb", &g);
+            work.add(name, desc, &Vars::smethodnb, params["b"], dft_map_full["b"]);
+            // Non-static method with arbitrary params, map style, full
+            // (array | map) defaults
+            addf("methodna_map_adft", "methodna", &v);
+            work.add(name, desc, &Vars::methodna, var(v), params["a"], dft_array_full["a"]);
+            addf("methodnb_map_adft", "methodnb", &v);
+            work.add(name, desc, &Vars::methodnb, var(v), params["b"], dft_array_full["b"]);
+            addf("methodna_map_mdft", "methodna", &v);
+            work.add(name, desc, &Vars::methodna, var(v), params["a"], dft_map_full["a"]);
+            addf("methodnb_map_mdft", "methodnb", &v);
+            work.add(name, desc, &Vars::methodnb, var(v), params["b"], dft_map_full["b"]);
+
+            // All the above are expected to succeed, and are setup for the
+            // tests to follow. Registration error cases are exercised as
+            // tests rather than as test setup.
+        }
+
+        void addf(const std::string& n, const std::string& d, Vars* v)
+        {
+            // This method is to capture in our own DescMap the name and
+            // description of every registered function, for metadata query
+            // testing.
+            descs[n] = d;
+            // Also capture the Vars instance on which each function should operate.
+            funcvars[n] = v;
+            // See constructor for rationale for setting these instance vars.
+            this->name = n;
+            this->desc = d;
+        }
+
+        void verify_descs()
+        {
+            // Copy descs to a temp map of same type.
+            DescMap forgotten(descs.begin(), descs.end());
+            // LLEventDispatcher intentionally provides only const_iterator:
+            // since dereferencing that iterator generates values on the fly,
+            // it's meaningless to have a modifiable iterator. But since our
+            // 'work' object isn't const, by default BOOST_FOREACH() wants to
+            // use non-const iterators. Persuade it to use the const_iterator.
+            foreach(LLEventDispatcher::NameDesc nd, const_cast<const Dispatcher&>(work))
+            {
+                DescMap::iterator found = forgotten.find(nd.first);
+                ensure(STRINGIZE("LLEventDispatcher records function '" << nd.first
+                                 << "' we didn't enter"),
+                       found != forgotten.end());
+                ensure_equals(STRINGIZE("LLEventDispatcher desc '" << nd.second <<
+                                        "' doesn't match what we entered: '" << found->second << "'"),
+                              nd.second, found->second);
+                // found in our map the name from LLEventDispatcher, good, erase
+                // our map entry
+                forgotten.erase(found);
+            }
+            if (! forgotten.empty())
+            {
+                std::ostringstream out;
+                out << "LLEventDispatcher failed to report";
+                const char* delim = ": ";
+                foreach(const DescMap::value_type& fme, forgotten)
+                {
+                    out << delim << fme.first;
+                    delim = ", ";
+                }
+                ensure(out.str(), false);
+            }
+        }
+
+        Vars* varsfor(const std::string& name)
+        {
+            VarsMap::const_iterator found = funcvars.find(name);
+            ensure(STRINGIZE("No Vars* for " << name), found != funcvars.end());
+            ensure(STRINGIZE("NULL Vars* for " << name), found->second);
+            return found->second;
+        }
+
+        void ensure_has(const std::string& outer, const std::string& inner)
+        {
+            ensure(STRINGIZE("'" << outer << "' does not contain '" << inner << "'").c_str(),
+                   outer.find(inner) != std::string::npos);
+        }
+
+        void call_exc(const std::string& func, const LLSD& args, const std::string& exc_frag)
+        {
+            std::string threw;
+            try
+            {
+                work(func, args);
+            }
+            catch (const std::runtime_error& e)
+            {
+                cout << "*** " << e.what() << '\n';
+                threw = e.what();
+            }
+            ensure_has(threw, exc_frag);
+        }
+
+        LLSD getMetadata(const std::string& name)
+        {
+            LLSD meta(work.getMetadata(name));
+            ensure(STRINGIZE("No metadata for " << name), meta.isDefined());
+            return meta;
+        }
+
+        // From two related LLSD arrays, e.g. a param-names array and a values
+        // array, zip them together into an LLSD map.
+        LLSD zipmap(const LLSD& keys, const LLSD& values)
+        {
+            LLSD map;
+            for (LLSD::Integer i = 0, iend = keys.size(); i < iend; ++i)
+            {
+                // Have to select asString() since you can index an LLSD
+                // object with either String or Integer.
+                map[keys[i].asString()] = values[i];
+            }
+            return map;
+        }
+
+        // If I call this ensure_equals(), it blocks visibility of all other
+        // ensure_equals() overloads. Normally I could say 'using
+        // baseclass::ensure_equals;' and fix that, but I don't know what the
+        // base class is!
+        void ensure_llsd(const std::string& msg, const LLSD& actual, const LLSD& expected, U32 bits)
+        {
+            std::ostringstream out;
+            if (! msg.empty())
+            {
+                out << msg << ": ";
+            }
+            out << "expected " << expected << ", actual " << actual;
+            ensure(out.str(), llsd_equals(actual, expected, bits));
+        }
+
+        void ensure_llsd(const LLSD& actual, const LLSD& expected, U32 bits)
+        {
+            ensure_llsd("", actual, expected, bits);
+        }
+    };
+    typedef test_group<lleventdispatcher_data> lleventdispatcher_group;
+    typedef lleventdispatcher_group::object object;
+    lleventdispatcher_group lleventdispatchergrp("lleventdispatcher");
+
+    // Call cases:
+    // - (try_call | call) (explicit name | event key) (real | bogus) name
+    // - Callable with args that (do | do not) match required
+    // - (Free function | non-static method), no args, (array | map) style
+    // - (Free function | non-static method), arbitrary args,
+    //   (array style with (scalar | map) | map style with scalar)
+    // - (Free function | non-static method), arbitrary args, array style with
+    //   array (too short | too long | just right)
+    //   [trap LL_WARNS for too-long case?]
+    // - (Free function | non-static method), arbitrary args, map style with
+    //   (array | map) (all | too many | holes (with | without) defaults)
+    // - const char* param gets ("" | NULL)
+
+    // Query cases:
+    // - Iterate over all (with | without) remove()
+    // - getDispatchKey()
+    // - Callable style (with | without) required
+    // - (Free function | non-static method), array style, (no | arbitrary) params
+    // - (Free function | non-static method), map style, (no | arbitrary) params,
+    //   (empty | full | partial (array | map)) defaults
+
+    template<> template<>
+    void object::test<1>()
+    {
+        set_test_name("map-style registration with non-array params");
+        // Pass "param names" as scalar or as map
+        LLSD attempts(LLSDArray(17)(LLSDMap("pi", 3.14)("two", 2)));
+        foreach(LLSD ae, inArray(attempts))
+        {
+            std::string threw;
+            try
+            {
+                work.add("freena_err", "freena", freena, ae);
+            }
+            catch (const std::exception& e)
+            {
+                threw = e.what();
+            }
+            ensure_has(threw, "must be an array");
+        }
+    }
+
+    template<> template<>
+    void object::test<2>()
+    {
+        set_test_name("map-style registration with badly-formed defaults");
+        std::string threw;
+        try
+        {
+            work.add("freena_err", "freena", freena, LLSDArray("a")("b"), 17);
+        }
+        catch (const std::exception& e)
+        {
+            threw = e.what();
+        }
+        ensure_has(threw, "must be a map or an array");
+    }
+
+    template<> template<>
+    void object::test<3>()
+    {
+        set_test_name("map-style registration with too many array defaults");
+        std::string threw;
+        try
+        {
+            work.add("freena_err", "freena", freena,
+                     LLSDArray("a")("b"),
+                     LLSDArray(17)(0.9)("gack"));
+        }
+        catch (const std::exception& e)
+        {
+            threw = e.what();
+        }
+        ensure_has(threw, "shorter than");
+    }
+
+    template<> template<>
+    void object::test<4>()
+    {
+        set_test_name("map-style registration with too many map defaults");
+        std::string threw;
+        try
+        {
+            work.add("freena_err", "freena", freena,
+                     LLSDArray("a")("b"),
+                     LLSDMap("b", 17)("foo", 3.14)("bar", "sinister"));
+        }
+        catch (const std::exception& e)
+        {
+            threw = e.what();
+        }
+        ensure_has(threw, "nonexistent params");
+        ensure_has(threw, "foo");
+        ensure_has(threw, "bar");
+    }
+
+    template<> template<>
+    void object::test<5>()
+    {
+        set_test_name("query all");
+        verify_descs();
+    }
+
+    template<> template<>
+    void object::test<6>()
+    {
+        set_test_name("query all with remove()");
+        ensure("remove('bogus') returned true", ! work.remove("bogus"));
+        ensure("remove('real') returned false", work.remove("free1"));
+        // Of course, remove that from 'descs' too...
+        descs.erase("free1");
+        verify_descs();
+    }
+
+    template<> template<>
+    void object::test<7>()
+    {
+        set_test_name("getDispatchKey()");
+        ensure_equals(work.getDispatchKey(), "op");
+    }
+
+    template<> template<>
+    void object::test<8>()
+    {
+        set_test_name("query Callables with/out required params");
+        LLSD names(LLSDArray("free1")("Dmethod1")("Dcmethod1")("method1"));
+        foreach(LLSD nm, inArray(names))
+        {
+            LLSD metadata(getMetadata(nm));
+            ensure_equals("name mismatch", metadata["name"], nm);
+            ensure_equals(metadata["desc"].asString(), descs[nm]);
+            ensure("should not have required structure", metadata["required"].isUndefined());
+            ensure("should not have optional", metadata["optional"].isUndefined());
+
+            std::string name_req(nm.asString() + "_req");
+            metadata = getMetadata(name_req);
+            ensure_equals(metadata["name"].asString(), name_req);
+            ensure_equals(metadata["desc"].asString(), descs[name_req]);
+            ensure_equals("required mismatch", required, metadata["required"]);
+            ensure("should not have optional", metadata["optional"].isUndefined());
+        }
+    }
+
+    template<> template<>
+    void object::test<9>()
+    {
+        set_test_name("query array-style functions/methods");
+        // Associate each registered name with expected arity.
+        LLSD expected(LLSDArray
+                      (LLSDArray
+                       (0)(LLSDArray("free0_array")("smethod0_array")("method0_array")))
+                      (LLSDArray
+                       (5)(LLSDArray("freena_array")("smethodna_array")("methodna_array")))
+                      (LLSDArray
+                       (5)(LLSDArray("freenb_array")("smethodnb_array")("methodnb_array"))));
+        foreach(LLSD ae, inArray(expected))
+        {
+            LLSD::Integer arity(ae[0].asInteger());
+            LLSD names(ae[1]);
+            LLSD req(LLSD::emptyArray());
+            if (arity)
+                req[arity - 1] = LLSD();
+            foreach(LLSD nm, inArray(names))
+            {
+                LLSD metadata(getMetadata(nm));
+                ensure_equals("name mismatch", metadata["name"], nm);
+                ensure_equals(metadata["desc"].asString(), descs[nm]);
+                ensure_equals(STRINGIZE("mismatched required for " << nm.asString()),
+                              metadata["required"], req);
+                ensure("should not have optional", metadata["optional"].isUndefined());
+            }
+        }
+    }
+
+    template<> template<>
+    void object::test<10>()
+    {
+        set_test_name("query map-style no-params functions/methods");
+        // - (Free function | non-static method), map style, no params (ergo
+        //   no defaults)
+        LLSD names(LLSDArray("free0_map")("smethod0_map")("method0_map"));
+        foreach(LLSD nm, inArray(names))
+        {
+            LLSD metadata(getMetadata(nm));
+            ensure_equals("name mismatch", metadata["name"], nm);
+            ensure_equals(metadata["desc"].asString(), descs[nm]);
+            ensure("should not have required",
+                   (metadata["required"].isUndefined() || metadata["required"].size() == 0));
+            ensure("should not have optional", metadata["optional"].isUndefined());
+        }
+    }
+
+    template<> template<>
+    void object::test<11>()
+    {
+        set_test_name("query map-style arbitrary-params functions/methods: "
+                      "full array defaults vs. full map defaults");
+        // With functions registered with no defaults ("_allreq" suffixes),
+        // there is of course no difference between array defaults and map
+        // defaults. (We don't even bother registering with LLSD::emptyArray()
+        // vs. LLSD::emptyMap().) With functions registered with all defaults,
+        // there should (!) be no difference beween array defaults and map
+        // defaults. Verify, so we can ignore the distinction for all other
+        // tests.
+        LLSD equivalences(LLSDArray
+                          (LLSDArray("freena_map_adft")("freena_map_mdft"))
+                          (LLSDArray("freenb_map_adft")("freenb_map_mdft"))
+                          (LLSDArray("smethodna_map_adft")("smethodna_map_mdft"))
+                          (LLSDArray("smethodnb_map_adft")("smethodnb_map_mdft"))
+                          (LLSDArray("methodna_map_adft")("methodna_map_mdft"))
+                          (LLSDArray("methodnb_map_adft")("methodnb_map_mdft")));
+        foreach(LLSD eq, inArray(equivalences))
+        {
+            LLSD adft(eq[0]);
+            LLSD mdft(eq[1]);
+            // We can't just compare the results of the two getMetadata()
+            // calls, because they contain ["name"], which are different. So
+            // capture them, verify that each ["name"] is as expected, then
+            // remove for comparing the rest.
+            LLSD ameta(getMetadata(adft));
+            LLSD mmeta(getMetadata(mdft));
+            ensure_equals("adft name", adft, ameta["name"]);
+            ensure_equals("mdft name", mdft, mmeta["name"]);
+            ameta.erase("name");
+            mmeta.erase("name");
+            ensure_equals(STRINGIZE("metadata for " << adft.asString()
+                                    << " vs. " << mdft.asString()),
+                          ameta, mmeta);
+        }
+    }
+
+    template<> template<>
+    void object::test<12>()
+    {
+        set_test_name("query map-style arbitrary-params functions/methods");
+        // - (Free function | non-static method), map style, arbitrary params,
+        //   (empty | full | partial (array | map)) defaults
+
+        // Generate maps containing all parameter names for cases in which all
+        // params are required. Also maps containing left requirements for
+        // partial defaults arrays. Also defaults maps from defaults arrays.
+        LLSD allreq, leftreq, rightdft;
+        foreach(LLSD::String a, ab)
+        {
+            // The map in which all params are required uses params[a] as
+            // keys, with all isUndefined() as values. We can accomplish that
+            // by passing zipmap() an empty values array.
+            allreq[a] = zipmap(params[a], LLSD::emptyArray());
+            // Same for leftreq, save that we use the subset of the params not
+            // supplied by dft_array_partial[a].
+            LLSD::Integer partition(params[a].size() - dft_array_partial[a].size());
+            leftreq[a] = zipmap(llsd_copy_array(params[a].beginArray(),
+                                                params[a].beginArray() + partition),
+                                LLSD::emptyArray());
+            // Generate map pairing dft_array_partial[a] values with their
+            // param names.
+            rightdft[a] = zipmap(llsd_copy_array(params[a].beginArray() + partition,
+                                                 params[a].endArray()),
+                                 dft_array_partial[a]);
+        }
+        cout << "allreq:\n" << allreq << "\nleftreq:\n" << leftreq << "\nrightdft:\n" << rightdft << std::endl;
+
+        // Generate maps containing parameter names not provided by the
+        // dft_map_partial maps.
+        LLSD skipreq(allreq);
+        foreach(LLSD::String a, ab)
+        {
+            foreach(const MapEntry& me, inMap(dft_map_partial[a]))
+            {
+                skipreq[a].erase(me.first);
+            }
+        }
+        cout << "skipreq:\n" << skipreq << std::endl;
+
+        LLSD groups(LLSDArray       // array of groups
+
+                    (LLSDArray      // group
+                     (LLSDArray("freena_map_allreq")("smethodna_map_allreq")("methodna_map_allreq"))
+                     (LLSDArray(allreq["a"])(LLSD()))) // required, optional
+
+                    (LLSDArray        // group
+                     (LLSDArray("freenb_map_allreq")("smethodnb_map_allreq")("methodnb_map_allreq"))
+                     (LLSDArray(allreq["b"])(LLSD()))) // required, optional
+
+                    (LLSDArray        // group
+                     (LLSDArray("freena_map_leftreq")("smethodna_map_leftreq")("methodna_map_leftreq"))
+                     (LLSDArray(leftreq["a"])(rightdft["a"]))) // required, optional
+
+                    (LLSDArray        // group
+                     (LLSDArray("freenb_map_leftreq")("smethodnb_map_leftreq")("methodnb_map_leftreq"))
+                     (LLSDArray(leftreq["b"])(rightdft["b"]))) // required, optional
+
+                    (LLSDArray        // group
+                     (LLSDArray("freena_map_skipreq")("smethodna_map_skipreq")("methodna_map_skipreq"))
+                     (LLSDArray(skipreq["a"])(dft_map_partial["a"]))) // required, optional
+
+                    (LLSDArray        // group
+                     (LLSDArray("freenb_map_skipreq")("smethodnb_map_skipreq")("methodnb_map_skipreq"))
+                     (LLSDArray(skipreq["b"])(dft_map_partial["b"]))) // required, optional
+
+                    // We only need mention the full-map-defaults ("_mdft" suffix)
+                    // registrations, having established their equivalence with the
+                    // full-array-defaults ("_adft" suffix) registrations in another test.
+                    (LLSDArray        // group
+                     (LLSDArray("freena_map_mdft")("smethodna_map_mdft")("methodna_map_mdft"))
+                     (LLSDArray(LLSD::emptyMap())(dft_map_full["a"]))) // required, optional
+
+                    (LLSDArray        // group
+                     (LLSDArray("freenb_map_mdft")("smethodnb_map_mdft")("methodnb_map_mdft"))
+                     (LLSDArray(LLSD::emptyMap())(dft_map_full["b"])))); // required, optional
+
+        foreach(LLSD grp, inArray(groups))
+        {
+            // Internal structure of each group in 'groups':
+            LLSD names(grp[0]);
+            LLSD required(grp[1][0]);
+            LLSD optional(grp[1][1]);
+            cout << "For " << names << ",\n" << "required:\n" << required << "\noptional:\n" << optional << std::endl;
+
+            // Loop through 'names'
+            foreach(LLSD nm, inArray(names))
+            {
+                LLSD metadata(getMetadata(nm));
+                ensure_equals("name mismatch", metadata["name"], nm);
+                ensure_equals(nm.asString(), metadata["desc"].asString(), descs[nm]);
+                ensure_equals(STRINGIZE(nm << " required mismatch"),
+                              metadata["required"], required);
+                ensure_equals(STRINGIZE(nm << " optional mismatch"),
+                              metadata["optional"], optional);
+            }
+        }
+    }
+
+    template<> template<>
+    void object::test<13>()
+    {
+        set_test_name("try_call()");
+        ensure("try_call(bogus name, LLSD()) returned true", ! work.try_call("freek", LLSD()));
+        ensure("try_call(bogus name) returned true", ! work.try_call(LLSDMap("op", "freek")));
+        ensure("try_call(real name, LLSD()) returned false", work.try_call("free0_array", LLSD()));
+        ensure("try_call(real name) returned false", work.try_call(LLSDMap("op", "free0_map")));
+    }
+
+    template<> template<>
+    void object::test<14>()
+    {
+        set_test_name("call with bad name");
+        call_exc("freek", LLSD(), "not found");
+        // We don't have a comparable helper function for the one-arg
+        // operator() method, and it's not worth building one just for this
+        // case. Write it out.
+        std::string threw;
+        try
+        {
+            work(LLSDMap("op", "freek"));
+        }
+        catch (const std::runtime_error& e)
+        {
+            cout << "*** " << e.what() << "\n";
+            threw = e.what();
+        }
+        ensure_has(threw, "bad");
+        ensure_has(threw, "op");
+        ensure_has(threw, "freek");
+    }
+
+    template<> template<>
+    void object::test<15>()
+    {
+        set_test_name("call with event key");
+        // We don't need a separate test for operator()(string, LLSD) with
+        // valid name, because all the rest of the tests exercise that case.
+        // The one we don't exercise elsewhere is operator()(LLSD) with valid
+        // name, so here it is.
+        work(LLSDMap("op", "free0_map"));
+        ensure_equals(g.i, 17);
+    }
+
+    // Cannot be defined inside function body... remind me again why we use C++...  :-P
+    struct CallablesTriple
+    {
+        std::string name, name_req;
+        LLSD& llsd;
+    };
+
+    template<> template<>
+    void object::test<16>()
+    {
+        set_test_name("call Callables");
+        CallablesTriple tests[] =
+        {
+            { "free1",     "free1_req",     g.llsd },
+            { "Dmethod1",  "Dmethod1_req",  work.llsd },
+            { "Dcmethod1", "Dcmethod1_req", work.llsd },
+            { "method1",   "method1_req",   v.llsd }
+        };
+        // Arbitrary LLSD value that we should be able to pass to Callables
+        // without 'required', but should not be able to pass to Callables
+        // with 'required'.
+        LLSD answer(42);
+        // LLSD value matching 'required' according to llsd_matches() rules.
+        LLSD matching(LLSDMap("d", 3.14)("array", LLSDArray("answer")(true)(answer)));
+        // Okay, walk through 'tests'.
+        foreach(const CallablesTriple& tr, tests)
+        {
+            // Should be able to pass 'answer' to Callables registered
+            // without 'required'.
+            work(tr.name, answer);
+            ensure_equals("answer mismatch", tr.llsd, answer);
+            // Should NOT be able to pass 'answer' to Callables registered
+            // with 'required'.
+            call_exc(tr.name_req, answer, "bad request");
+            // But SHOULD be able to pass 'matching' to Callables registered
+            // with 'required'.
+            work(tr.name_req, matching);
+            ensure_equals("matching mismatch", tr.llsd, matching);
+        }
+    }
+
+    template<> template<>
+    void object::test<17>()
+    {
+        set_test_name("passing wrong args to (map | array)-style registrations");
+
+        // Pass scalar/map to array-style functions, scalar/array to map-style
+        // functions. As that validation happens well before we engage the
+        // argument magic, it seems pointless to repeat this with every
+        // variation: (free function | non-static method), (no | arbitrary)
+        // args. We should only need to engage it for one map-style
+        // registration and one array-style registration.
+        std::string array_exc("needs an args array");
+        call_exc("free0_array", 17, array_exc);
+        call_exc("free0_array", LLSDMap("pi", 3.14), array_exc);
+
+        std::string map_exc("needs a map");
+        call_exc("free0_map", 17, map_exc);
+        // Passing an array to a map-style function works now! No longer an
+        // error case!
+//      call_exc("free0_map", LLSDArray("a")("b"), map_exc);
+    }
+
+    template<> template<>
+    void object::test<18>()
+    {
+        set_test_name("call no-args functions");
+        LLSD names(LLSDArray
+                   ("free0_array")("free0_map")
+                   ("smethod0_array")("smethod0_map")
+                   ("method0_array")("method0_map"));
+        foreach(LLSD name, inArray(names))
+        {
+            // Look up the Vars instance for this function.
+            Vars* vars(varsfor(name));
+            // Both the global and stack Vars instances are automatically
+            // cleared at the start of each test<n> method. But since we're
+            // calling these things several different times in the same
+            // test<n> method, manually reset the Vars between each.
+            *vars = Vars();
+            ensure_equals(vars->i, 0);
+            // call function with empty array (or LLSD(), should be equivalent)
+            work(name, LLSD());
+            ensure_equals(vars->i, 17);
+        }
+    }
+
+    // Break out this data because we use it in a couple different tests.
+    LLSD array_funcs(LLSDArray
+                     (LLSDMap("a", "freena_array")   ("b", "freenb_array"))
+                     (LLSDMap("a", "smethodna_array")("b", "smethodnb_array"))
+                     (LLSDMap("a", "methodna_array") ("b", "methodnb_array")));
+
+    template<> template<>
+    void object::test<19>()
+    {
+        set_test_name("call array-style functions with too-short arrays");
+        // Could have two different too-short arrays, one for *na and one for
+        // *nb, but since they both take 5 params...
+        LLSD tooshort(LLSDArray("this")("array")("too")("short"));
+        foreach(const LLSD& funcsab, inArray(array_funcs))
+        {
+            foreach(const llsd::MapEntry& e, inMap(funcsab))
+            {
+                call_exc(e.second, tooshort, "requires more arguments");
+            }
+        }
+    }
+
+    template<> template<>
+    void object::test<20>()
+    {
+        set_test_name("call array-style functions with (just right | too long) arrays");
+        std::vector<U8> binary;
+        for (size_t h(0x01), i(0); i < 5; h+= 0x22, ++i)
+        {
+            binary.push_back(h);
+        }
+        LLSD args(LLSDMap("a", LLSDArray(true)(17)(3.14)(123.456)("char*"))
+                         ("b", LLSDArray("string")
+                                        (LLUUID("01234567-89ab-cdef-0123-456789abcdef"))
+                                        (LLDate("2011-02-03T15:07:00Z"))
+                                        (LLURI("http://secondlife.com"))
+                                        (binary)));
+        LLSD argsplus(args);
+        argsplus["a"].append("bogus");
+        argsplus["b"].append("bogus");
+        LLSD expect;
+        foreach(LLSD::String a, ab)
+        {
+            expect[a] = zipmap(params[a], args[a]);
+        }
+        // Adjust expect["a"]["cp"] for special Vars::cp treatment.
+        expect["a"]["cp"] = std::string("'") + expect["a"]["cp"].asString() + "'";
+        cout << "expect: " << expect << '\n';
+
+        // Use substantially the same logic for args and argsplus
+        LLSD argsarrays(LLSDArray(args)(argsplus));
+        // So i==0 selects 'args', i==1 selects argsplus
+        for (LLSD::Integer i(0), iend(argsarrays.size()); i < iend; ++i)
+        {
+            foreach(const LLSD& funcsab, inArray(array_funcs))
+            {
+                foreach(LLSD::String a, ab)
+                {
+                    // Reset the Vars instance before each call
+                    Vars* vars(varsfor(funcsab[a]));
+                    *vars = Vars();
+                    work(funcsab[a], argsarrays[i][a]);
+                    ensure_llsd(STRINGIZE(funcsab[a].asString() <<
+                                          ": expect[\"" << a << "\"] mismatch"),
+                                vars->inspect(), expect[a], 7); // 7 bits ~= 2 decimal digits
+
+                    // TODO: in the i==1 or argsplus case, intercept LL_WARNS
+                    // output? Even without that, using argsplus verifies that
+                    // passing too many args isn't fatal; it works -- but
+                    // would be nice to notice the warning too.
+                }
+            }
+        }
+    }
+
+    template<> template<>
+    void object::test<21>()
+    {
+        set_test_name("verify that passing LLSD() to const char* sends NULL");
+
+        ensure_equals("Vars::cp init", v.cp, "");
+        work("methodna_map_mdft", LLSDMap("cp", LLSD()));
+        ensure_equals("passing LLSD()", v.cp, "NULL");
+        work("methodna_map_mdft", LLSDMap("cp", ""));
+        ensure_equals("passing \"\"", v.cp, "''");
+        work("methodna_map_mdft", LLSDMap("cp", "non-NULL"));
+        ensure_equals("passing \"non-NULL\"", v.cp, "'non-NULL'");
+    }
+
+    template<> template<>
+    void object::test<22>()
+    {
+        set_test_name("call map-style functions with (full | oversized) (arrays | maps)");
+        const char binary[] = "\x99\x88\x77\x66\x55";
+        LLSD array_full(LLSDMap
+                        ("a", LLSDArray(false)(255)(98.6)(1024.5)("pointer"))
+                        ("b", LLSDArray("object")(LLUUID::generateNewID())(LLDate::now())(LLURI("http://wiki.lindenlab.com/wiki"))(LLSD::Binary(boost::begin(binary), boost::end(binary)))));
+        LLSD array_overfull(array_full);
+        foreach(LLSD::String a, ab)
+        {
+            array_overfull[a].append("bogus");
+        }
+        cout << "array_full: " << array_full << "\narray_overfull: " << array_overfull << std::endl;
+        // We rather hope that LLDate::now() will generate a timestamp
+        // distinct from the one it generated in the constructor, moments ago.
+        ensure_not_equals("Timestamps too close",
+                          array_full["b"][2].asDate(), dft_array_full["b"][2].asDate());
+        // We /insist/ that LLUUID::generateNewID() do so.
+        ensure_not_equals("UUID collision",
+                          array_full["b"][1].asUUID(), dft_array_full["b"][1].asUUID());
+        LLSD map_full, map_overfull;
+        foreach(LLSD::String a, ab)
+        {
+            map_full[a] = zipmap(params[a], array_full[a]);
+            map_overfull[a] = map_full[a];
+            map_overfull[a]["extra"] = "ignore";
+        }
+        cout << "map_full: " << map_full << "\nmap_overfull: " << map_overfull << std::endl;
+        LLSD expect(map_full);
+        // Twiddle the const char* param.
+        expect["a"]["cp"] = std::string("'") + expect["a"]["cp"].asString() + "'";
+        // Another adjustment. For each data type, we're trying to distinguish
+        // three values: the Vars member's initial value (member wasn't
+        // stored; control never reached the set function), the registered
+        // default param value from dft_array_full, and the array_full value
+        // in this test. But bool can only distinguish two values. In this
+        // case, we want to differentiate the local array_full value from the
+        // dft_array_full value, so we use 'false'. However, that means
+        // Vars::inspect() doesn't differentiate it from the initial value,
+        // so won't bother returning it. Predict that behavior to match the
+        // LLSD values.
+        expect["a"].erase("b");
+        cout << "expect: " << expect << std::endl;
+        // For this test, calling functions registered with different sets of
+        // parameter defaults should make NO DIFFERENCE WHATSOEVER. Every call
+        // should pass all params.
+        LLSD names(LLSDMap
+                   ("a", LLSDArray
+                         ("freena_map_allreq") ("smethodna_map_allreq") ("methodna_map_allreq")
+                         ("freena_map_leftreq")("smethodna_map_leftreq")("methodna_map_leftreq")
+                         ("freena_map_skipreq")("smethodna_map_skipreq")("methodna_map_skipreq")
+                         ("freena_map_adft")   ("smethodna_map_adft")   ("methodna_map_adft")
+                         ("freena_map_mdft")   ("smethodna_map_mdft")   ("methodna_map_mdft"))
+                   ("b", LLSDArray
+                         ("freenb_map_allreq") ("smethodnb_map_allreq") ("methodnb_map_allreq")
+                         ("freenb_map_leftreq")("smethodnb_map_leftreq")("methodnb_map_leftreq")
+                         ("freenb_map_skipreq")("smethodnb_map_skipreq")("methodnb_map_skipreq")
+                         ("freenb_map_adft")   ("smethodnb_map_adft")   ("methodnb_map_adft")
+                         ("freenb_map_mdft")   ("smethodnb_map_mdft")   ("methodnb_map_mdft")));
+        // Treat (full | overfull) (array | map) the same.
+        LLSD argssets(LLSDArray(array_full)(array_overfull)(map_full)(map_overfull));
+        foreach(const LLSD& args, inArray(argssets))
+        {
+            foreach(LLSD::String a, ab)
+            {
+                foreach(LLSD::String name, inArray(names[a]))
+                {
+                    // Reset the Vars instance
+                    Vars* vars(varsfor(name));
+                    *vars = Vars();
+                    work(name, args[a]);
+                    ensure_llsd(STRINGIZE(name << ": expect[\"" << a << "\"] mismatch"),
+                                vars->inspect(), expect[a], 7); // 7 bits, 2 decimal digits
+                    // intercept LL_WARNS for the two overfull cases?
+                }
+            }
+        }
+    }
+} // namespace tut
diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp
index 770443da1dd1c73fa15bb86b8f8f71a3ff08ede3..7b4c7d6a48652edb1e2bcfd4428ec5faecfdbc18 100644
--- a/indra/llcommon/tests/llsdserialize_test.cpp
+++ b/indra/llcommon/tests/llsdserialize_test.cpp
@@ -452,7 +452,7 @@ namespace tut
 		checkRoundTrip(msg + " nested arrays", v);
 
 		v = LLSD::emptyMap();
-		fillmap(v, 10, 6); // 10^6 maps
+		fillmap(v, 10, 3); // 10^6 maps
 		checkRoundTrip(msg + " many nested maps", v);
 	}
 	
diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp
index 39211bf7fa5158f1ccce04111f67a3d3159fd1c6..f0d15d9607f6d49597337da5cfcba535c0b2bcf6 100644
--- a/indra/llimage/llimage.cpp
+++ b/indra/llimage/llimage.cpp
@@ -1254,28 +1254,7 @@ bool LLImageRaw::createFromFile(const std::string &filename, bool j2c_lowest_mip
 		return false;
 	}
 	
-	LLPointer<LLImageFormatted> image;
-	switch(codec)
-	{
-	  //case IMG_CODEC_RGB:
-	  case IMG_CODEC_BMP:
-		image = new LLImageBMP();
-		break;
-	  case IMG_CODEC_TGA:
-		image = new LLImageTGA();
-		break;
-	  case IMG_CODEC_JPEG:
-		image = new LLImageJPEG();
-		break;
-	  case IMG_CODEC_J2C:
-		image = new LLImageJ2C();
-		break;
-	  case IMG_CODEC_DXT:
-		image = new LLImageDXT();
-		break;
-	  default:
-		return false;
-	}
+	LLPointer<LLImageFormatted> image = LLImageFormatted::createFromType(codec);
 	llassert(image.notNull());
 
 	U8 *buffer = image->allocateData(length);
diff --git a/indra/llimage/llimage.h b/indra/llimage/llimage.h
index 825b9aab1a49cefd54b092e05d869d00b15a32b7..18444f393415b572c4e20140409ea8bf753b8eb9 100644
--- a/indra/llimage/llimage.h
+++ b/indra/llimage/llimage.h
@@ -266,13 +266,13 @@ class LLImageFormatted : public LLImageBase
 	// subclasses must return a prefered file extension (lowercase without a leading dot)
 	virtual std::string getExtension() = 0;
 	// calcHeaderSize() returns the maximum size of header;
-	//   0 indicates we don't know have a header and have to lead the entire file
+	//   0 indicates we don't have a header and have to read the entire file
 	virtual S32 calcHeaderSize() { return 0; };
 	// calcDataSize() returns how many bytes to read to load discard_level (including header)
 	virtual S32 calcDataSize(S32 discard_level);
 	// calcDiscardLevelBytes() returns the smallest valid discard level based on the number of input bytes
 	virtual S32 calcDiscardLevelBytes(S32 bytes);
-	// getRawDiscardLevel()by default returns mDiscardLevel, but may be overridden (LLImageJ2C)
+	// getRawDiscardLevel() by default returns mDiscardLevel, but may be overridden (LLImageJ2C)
 	virtual S8  getRawDiscardLevel() { return mDiscardLevel; }
 	
 	BOOL load(const std::string& filename);
diff --git a/indra/llimage/llimagedimensionsinfo.cpp b/indra/llimage/llimagedimensionsinfo.cpp
index 835664c60ff403f36caf7d8c164e396ec7e7975a..c6bfa50b403a3babfb42c30096e8a3f188456632 100644
--- a/indra/llimage/llimagedimensionsinfo.cpp
+++ b/indra/llimage/llimagedimensionsinfo.cpp
@@ -73,9 +73,28 @@ bool LLImageDimensionsInfo::load(const std::string& src_filename,U32 codec)
 
 bool LLImageDimensionsInfo::getImageDimensionsBmp()
 {
-	const S32 BMP_FILE_HEADER_SIZE = 14;
+	// Make sure the file is long enough.
+	const S32 DATA_LEN = 26; // BMP header (14) + DIB header size (4) + width (4) + height (4)
+	if (!checkFileLength(DATA_LEN))
+	{
+		llwarns << "Premature end of file" << llendl;
+		return false;
+	}
+
+	// Read BMP signature.
+	U8 signature[2];
+	mInfile.read((void*)signature, sizeof(signature)/sizeof(signature[0]));
+
+	// Make sure this is actually a BMP file.
+	// We only support Windows bitmaps (BM), according to LLImageBMP::updateData().
+	if (signature[0] != 'B' || signature[1] != 'M')
+	{
+		llwarns << "Not a BMP" << llendl;
+		return false;
+	}
 
-	mInfile.seek(APR_CUR,BMP_FILE_HEADER_SIZE+4);
+	// Read image dimensions.
+	mInfile.seek(APR_CUR, 16);
 	mWidth = read_reverse_s32();
 	mHeight = read_reverse_s32();
 
@@ -86,6 +105,14 @@ bool LLImageDimensionsInfo::getImageDimensionsTga()
 {
 	const S32 TGA_FILE_HEADER_SIZE = 12;
 
+	// Make sure the file is long enough.
+	if (!checkFileLength(TGA_FILE_HEADER_SIZE + 1 /* width */ + 1 /* height */))
+	{
+		llwarns << "Premature end of file" << llendl;
+		return false;
+	}
+
+	// *TODO: Detect non-TGA files somehow.
 	mInfile.seek(APR_CUR,TGA_FILE_HEADER_SIZE);
 	mWidth = read_byte() | read_byte() << 8;
 	mHeight = read_byte() | read_byte() << 8;
@@ -95,9 +122,29 @@ bool LLImageDimensionsInfo::getImageDimensionsTga()
 
 bool LLImageDimensionsInfo::getImageDimensionsPng()
 {
-	const S32 PNG_FILE_MARKER_SIZE = 8;
+	const S32 PNG_MAGIC_SIZE = 8;
+
+	// Make sure the file is long enough.
+	if (!checkFileLength(PNG_MAGIC_SIZE + 8 + sizeof(S32) * 2 /* width, height */))
+	{
+		llwarns << "Premature end of file" << llendl;
+		return false;
+	}
 
-	mInfile.seek(APR_CUR,PNG_FILE_MARKER_SIZE + 8/*header offset+chunk length+chunk type*/);
+	// Read PNG signature.
+	const U8 png_magic[PNG_MAGIC_SIZE] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A};
+	U8 signature[PNG_MAGIC_SIZE];
+	mInfile.read((void*)signature, PNG_MAGIC_SIZE);
+
+	// Make sure it's a PNG file.
+	if (memcmp(signature, png_magic, PNG_MAGIC_SIZE) != 0)
+	{
+		llwarns << "Not a PNG" << llendl;
+		return false;
+	}
+
+	// Read image dimensions.
+	mInfile.seek(APR_CUR, 8 /* chunk length + chunk type */);
 	mWidth = read_s32();
 	mHeight = read_s32();
 
@@ -122,6 +169,24 @@ bool LLImageDimensionsInfo::getImageDimensionsJpeg()
 		setLastError("Unable to open file for reading", mSrcFilename);
 		return false;
 	}
+
+	/* Make sure this is a JPEG file. */
+	const size_t JPEG_MAGIC_SIZE = 2;
+	const uint8_t jpeg_magic[JPEG_MAGIC_SIZE] = {0xFF, 0xD8};
+	uint8_t signature[JPEG_MAGIC_SIZE];
+
+	if (fread(signature, sizeof(signature), 1, fp) != 1)
+	{
+		llwarns << "Premature end of file" << llendl;
+		return false;
+	}
+	if (memcmp(signature, jpeg_magic, JPEG_MAGIC_SIZE) != 0)
+	{
+		llwarns << "Not a JPEG" << llendl;
+		return false;
+	}
+	fseek(fp, 0, SEEK_SET); // go back to start of the file
+
 	/* Init jpeg */
 	jpeg_error_mgr jerr;
 	jpeg_decompress_struct cinfo;
@@ -145,3 +210,13 @@ bool LLImageDimensionsInfo::getImageDimensionsJpeg()
 	return !sJpegErrorEncountered;
 }
 
+bool LLImageDimensionsInfo::checkFileLength(S32 min_len)
+{
+	// Make sure the file is not shorter than min_len bytes.
+	// so that we don't have to check value returned by each read() or seek().
+	char* buf = new char[min_len];
+	int nread = mInfile.read(buf, min_len);
+	delete[] buf;
+	mInfile.seek(APR_SET, 0);
+	return nread == min_len;
+}
diff --git a/indra/llimage/llimagedimensionsinfo.h b/indra/llimage/llimagedimensionsinfo.h
index 5384faf3f432c14d3751c3e7a1105748b010ec4b..382fdb2a0e029d752a53c24d2ce4564f847b17df 100644
--- a/indra/llimage/llimagedimensionsinfo.h
+++ b/indra/llimage/llimagedimensionsinfo.h
@@ -119,6 +119,9 @@ class LLImageDimensionsInfo
 		return read_byte() << 8 | read_byte();
 	}
 
+	/// Check if the file is not shorter than min_len bytes.
+	bool checkFileLength(S32 min_len);
+
 protected:
 	LLAPRFile mInfile ;
 	std::string mSrcFilename;
diff --git a/indra/llimage/llimagej2c.cpp b/indra/llimage/llimagej2c.cpp
index cb2a85fa917afa683954f342d45c488a3e284ec4..a90df0f1c17139eb320d40e4dd8d22873a07dc8b 100644
--- a/indra/llimage/llimagej2c.cpp
+++ b/indra/llimage/llimagej2c.cpp
@@ -139,6 +139,15 @@ BOOL LLImageJ2C::updateData()
 	return res;
 }
 
+BOOL LLImageJ2C::initDecode(LLImageRaw &raw_image, int discard_level, int* region)
+{
+	return mImpl->initDecode(*this,raw_image,discard_level,region);
+}
+
+BOOL LLImageJ2C::initEncode(LLImageRaw &raw_image, int blocks_size, int precincts_size)
+{
+	return mImpl->initEncode(*this,raw_image,blocks_size,precincts_size);
+}
 
 BOOL LLImageJ2C::decode(LLImageRaw *raw_imagep, F32 decode_time)
 {
@@ -251,6 +260,9 @@ S32 LLImageJ2C::calcHeaderSizeJ2C()
 //static
 S32 LLImageJ2C::calcDataSizeJ2C(S32 w, S32 h, S32 comp, S32 discard_level, F32 rate)
 {
+	// Note: this only provides an *estimate* of the size in bytes of an image level
+	// *TODO: find a way to read the true size (when available) and convey the fact
+	// that the result is an estimate in the other cases
 	if (rate <= 0.f) rate = .125f;
 	while (discard_level > 0)
 	{
@@ -474,6 +486,7 @@ LLImageCompressionTester::LLImageCompressionTester() : LLMetricPerformanceTester
 
 LLImageCompressionTester::~LLImageCompressionTester()
 {
+	outputTestResults();
 	LLImageJ2C::sTesterp = NULL;
 }
 
diff --git a/indra/llimage/llimagej2c.h b/indra/llimage/llimagej2c.h
index dd5bec8b2e2cc0bfb8086d99c587ed7bb84e0fa0..6bba81aab539a54b1264bc7dfa2ea0ccf2339267 100644
--- a/indra/llimage/llimagej2c.h
+++ b/indra/llimage/llimagej2c.h
@@ -56,6 +56,8 @@ class LLImageJ2C : public LLImageFormatted
 	/*virtual*/ void resetLastError();
 	/*virtual*/ void setLastError(const std::string& message, const std::string& filename = std::string());
 	
+	BOOL initDecode(LLImageRaw &raw_image, int discard_level, int* region);
+	BOOL initEncode(LLImageRaw &raw_image, int blocks_size, int precincts_size);
 	
 	// Encode with comment text 
 	BOOL encode(const LLImageRaw *raw_imagep, const char* comment_text, F32 encode_time=0.0);
@@ -117,6 +119,8 @@ class LLImageJ2CImpl
 	virtual BOOL decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decode_time, S32 first_channel, S32 max_channel_count) = 0;
 	virtual BOOL encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, const char* comment_text, F32 encode_time=0.0,
 							BOOL reversible=FALSE) = 0;
+	virtual BOOL initDecode(LLImageJ2C &base, LLImageRaw &raw_image, int discard_level = -1, int* region = NULL) = 0;
+	virtual BOOL initEncode(LLImageJ2C &base, LLImageRaw &raw_image, int blocks_size = -1, int precincts_size = -1) = 0;
 
 	friend class LLImageJ2C;
 };
diff --git a/indra/llimagej2coj/llimagej2coj.cpp b/indra/llimagej2coj/llimagej2coj.cpp
index 13b12c0928c27d4a542e40c90bd15edaabc5eaa9..8288fa1f5c383270ec326ebf0d6632768f083c68 100644
--- a/indra/llimagej2coj/llimagej2coj.cpp
+++ b/indra/llimagej2coj/llimagej2coj.cpp
@@ -107,6 +107,17 @@ LLImageJ2COJ::~LLImageJ2COJ()
 {
 }
 
+BOOL LLImageJ2COJ::initDecode(LLImageJ2C &base, LLImageRaw &raw_image, int discard_level, int* region)
+{
+	// No specific implementation for this method in the OpenJpeg case
+	return FALSE;
+}
+
+BOOL LLImageJ2COJ::initEncode(LLImageJ2C &base, LLImageRaw &raw_image, int blocks_size, int precincts_size)
+{
+	// No specific implementation for this method in the OpenJpeg case
+	return FALSE;
+}
 
 BOOL LLImageJ2COJ::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decode_time, S32 first_channel, S32 max_channel_count)
 {
diff --git a/indra/llimagej2coj/llimagej2coj.h b/indra/llimagej2coj/llimagej2coj.h
index 9476665ccbb57ed034ee4d4e594775f4539dc8f2..9c7cc09fcbcacdd1c35222d05f01f28aa58b606c 100644
--- a/indra/llimagej2coj/llimagej2coj.h
+++ b/indra/llimagej2coj/llimagej2coj.h
@@ -39,6 +39,8 @@ class LLImageJ2COJ : public LLImageJ2CImpl
 	/*virtual*/ BOOL decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decode_time, S32 first_channel, S32 max_channel_count);
 	/*virtual*/ BOOL encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, const char* comment_text, F32 encode_time=0.0,
 								BOOL reversible = FALSE);
+	/*virtual*/ BOOL initDecode(LLImageJ2C &base, LLImageRaw &raw_image, int discard_level = -1, int* region = NULL);
+	/*virtual*/ BOOL initEncode(LLImageJ2C &base, LLImageRaw &raw_image, int blocks_size = -1, int precincts_size = -1);
 };
 
 #endif
diff --git a/indra/llkdu/CMakeLists.txt b/indra/llkdu/CMakeLists.txt
index 7ed1c6c694a23bb13d0fb643ef41445fe043b5af..046629b514dfebc0bc98802aa2395655e95a315b 100644
--- a/indra/llkdu/CMakeLists.txt
+++ b/indra/llkdu/CMakeLists.txt
@@ -19,6 +19,7 @@ include_directories(
     ${LLCOMMON_INCLUDE_DIRS}
     ${LLIMAGE_INCLUDE_DIRS}
     ${KDU_INCLUDE_DIR}
+    ${LLKDU_INCLUDE_DIRS}
     ${LLMATH_INCLUDE_DIRS}
     )
 
@@ -49,6 +50,15 @@ if (USE_KDU)
     SET(llkdu_TEST_SOURCE_FILES
       llimagej2ckdu.cpp
       )
+    SET(llkdu_test_additional_HEADER_FILES
+      llimagej2ckdu.h
+      llkdumem.h
+      lltut.h
+      )
+    SET(llkdu_test_additional_INCLUDE_DIRS
+      ${KDU_INCLUDE_DIR}
+      ${LLKDU_INCLUDE_DIRS}
+    )
     LL_ADD_PROJECT_UNIT_TESTS(llkdu "${llkdu_TEST_SOURCE_FILES}")
   endif (LL_TESTS)
 
diff --git a/indra/llkdu/llimagej2ckdu.cpp b/indra/llkdu/llimagej2ckdu.cpp
index 10ea5685e86ca797d26da2a5a8f4767c7f933576..ae456a48be68fafbd283cc3fc7627cec0d596fd4 100644
--- a/indra/llkdu/llimagej2ckdu.cpp
+++ b/indra/llkdu/llimagej2ckdu.cpp
@@ -34,35 +34,35 @@
 
 class kdc_flow_control {
 	
-public: // Member functions
-    kdc_flow_control(kdu_image_in_base *img_in, kdu_codestream codestream);
-    ~kdc_flow_control();
-    bool advance_components();
-    void process_components();
+public:
+	kdc_flow_control(kdu_image_in_base *img_in, kdu_codestream codestream);
+	~kdc_flow_control();
+	bool advance_components();
+	void process_components();
+	
+private:
 	
-private: // Data
-    
-    struct kdc_component_flow_control {
-    public: // Data
-        kdu_image_in_base *reader;
-        int vert_subsampling;
-        int ratio_counter;  /*  Initialized to 0, decremented by `count_delta';
+	struct kdc_component_flow_control {
+	public:
+		kdu_image_in_base *reader;
+		int vert_subsampling;
+		int ratio_counter;  /*  Initialized to 0, decremented by `count_delta';
                                 when < 0, a new line must be processed, after
                                 which it is incremented by `vert_subsampling'.  */
-        int initial_lines;
-        int remaining_lines;
-        kdu_line_buf *line;
-    };
-    
-    kdu_codestream codestream;
-    kdu_dims valid_tile_indices;
-    kdu_coords tile_idx;
-    kdu_tile tile;
-    int num_components;
-    kdc_component_flow_control *components;
-    int count_delta; // Holds the minimum of the `vert_subsampling' fields
-    kdu_multi_analysis engine;
-    kdu_long max_buffer_memory;
+		int initial_lines;
+		int remaining_lines;
+		kdu_line_buf *line;
+	};
+	
+	kdu_codestream codestream;
+	kdu_dims valid_tile_indices;
+	kdu_coords tile_idx;
+	kdu_tile tile;
+	int num_components;
+	kdc_component_flow_control *components;
+	int count_delta; // Holds the minimum of the `vert_subsampling' fields
+	kdu_multi_analysis engine;
+	kdu_long max_buffer_memory;
 };
 
 //
@@ -72,7 +72,8 @@ void set_default_colour_weights(kdu_params *siz);
 
 const char* engineInfoLLImageJ2CKDU()
 {
-	return "KDU v6.4.1";
+	std::string version = llformat("KDU %s", KDU_CORE_VERSION);
+	return version.c_str();
 }
 
 LLImageJ2CKDU* createLLImageJ2CKDU()
@@ -105,7 +106,11 @@ const char* fallbackEngineInfoLLImageJ2CImpl()
 class LLKDUDecodeState
 {
 public:
+	LLKDUDecodeState(kdu_tile tile, kdu_byte *buf, S32 row_gap);
+	~LLKDUDecodeState();
+	BOOL processTileDecode(F32 decode_time, BOOL limit_time = TRUE);
 
+private:
 	S32 mNumComponents;
 	BOOL mUseYCC;
 	kdu_dims mDims;
@@ -113,22 +118,12 @@ class LLKDUDecodeState
 	kdu_tile_comp mComps[4];
 	kdu_line_buf mLines[4];
 	kdu_pull_ifc mEngines[4];
-	bool mReversible[4]; // Some components may be reversible and others not.
-	int mBitDepths[4]; // Original bit-depth may be quite different from 8.
-
+	bool mReversible[4]; // Some components may be reversible and others not
+	int mBitDepths[4];   // Original bit-depth may be quite different from 8
+	
 	kdu_tile mTile;
 	kdu_byte *mBuf;
 	S32 mRowGap;
-
-	LLKDUDecodeState(kdu_tile tile, kdu_byte *buf, S32 row_gap);
-	~LLKDUDecodeState();
-	BOOL processTileDecode(F32 decode_time, BOOL limit_time = TRUE);
-
-public:
-	int *AssignLayerBytes(siz_params *siz, int &num_specs);
-
-	void setupCodeStream(BOOL keep_codestream, LLImageJ2CKDU::ECodeStreamMode mode);
-	BOOL initDecode(LLImageRaw &raw_image, F32 decode_time, LLImageJ2CKDU::ECodeStreamMode mode, S32 first_channel, S32 max_channel_count );
 };
 
 void ll_kdu_error( void )
@@ -153,7 +148,7 @@ class LLKDUMessageError : public kdu_message
 public:
 	/*virtual*/ void put_text(const char *s);
 	/*virtual*/ void put_text(const kdu_uint16 *s);
-	/*virtual*/ void flush(bool end_of_message=false);
+	/*virtual*/ void flush(bool end_of_message = false);
 	static LLKDUMessageError sDefaultMessage;
 };
 
@@ -179,7 +174,7 @@ void LLKDUMessageError::put_text(const kdu_uint16 *s)
 
 void LLKDUMessageError::flush(bool end_of_message)
 {
-	if( end_of_message ) 
+	if (end_of_message) 
 	{
 		throw "KDU throwing an exception";
 	}
@@ -195,7 +190,9 @@ mCodeStreamp(NULL),
 mTPosp(NULL),
 mTileIndicesp(NULL),
 mRawImagep(NULL),
-mDecodeState(NULL)
+mDecodeState(NULL),
+mBlocksSize(-1),
+mPrecinctsSize(-1)
 {
 }
 
@@ -210,7 +207,7 @@ void transfer_bytes(kdu_byte *dest, kdu_line_buf &src, int gap, int precision);
 void LLImageJ2CKDU::setupCodeStream(LLImageJ2C &base, BOOL keep_codestream, ECodeStreamMode mode)
 {
 	S32 data_size = base.getDataSize();
-	S32 max_bytes = base.getMaxBytes() ? base.getMaxBytes() : data_size;
+	S32 max_bytes = (base.getMaxBytes() ? base.getMaxBytes() : data_size);
 
 	//
 	//  Initialization
@@ -247,21 +244,21 @@ void LLImageJ2CKDU::setupCodeStream(LLImageJ2C &base, BOOL keep_codestream, ECod
 	// Set the maximum number of bytes to use from the codestream
 	mCodeStreamp->set_max_bytes(max_bytes);
 
-	//    If you want to flip or rotate the image for some reason, change
+	//	If you want to flip or rotate the image for some reason, change
 	// the resolution, or identify a restricted region of interest, this is
 	// the place to do it.  You may use "kdu_codestream::change_appearance"
 	// and "kdu_codestream::apply_input_restrictions" for this purpose.
-	//    If you wish to truncate the code-stream prior to decompression, you
+	//	If you wish to truncate the code-stream prior to decompression, you
 	// may use "kdu_codestream::set_max_bytes".
-	//    If you wish to retain all compressed data so that the material
+	//	If you wish to retain all compressed data so that the material
 	// can be decompressed multiple times, possibly with different appearance
 	// parameters, you should call "kdu_codestream::set_persistent" here.
-	//    There are a variety of other features which must be enabled at
+	//	There are a variety of other features which must be enabled at
 	// this point if you want to take advantage of them.  See the
 	// descriptions appearing with the "kdu_codestream" interface functions
 	// in "kdu_compressed.h" for an itemized account of these capabilities.
 
-	switch( mode )
+	switch (mode)
 	{
 	case MODE_FAST:
 		mCodeStreamp->set_fast();
@@ -326,7 +323,19 @@ void LLImageJ2CKDU::cleanupCodeStream()
 	mTileIndicesp = NULL;
 }
 
-BOOL LLImageJ2CKDU::initDecode(LLImageJ2C &base, LLImageRaw &raw_image, F32 decode_time, ECodeStreamMode mode, S32 first_channel, S32 max_channel_count )
+BOOL LLImageJ2CKDU::initDecode(LLImageJ2C &base, LLImageRaw &raw_image, int discard_level, int* region)
+{
+	return initDecode(base,raw_image,0.0f,MODE_FAST,0,4,discard_level,region);
+}
+
+BOOL LLImageJ2CKDU::initEncode(LLImageJ2C &base, LLImageRaw &raw_image, int blocks_size, int precincts_size)
+{
+	mBlocksSize = blocks_size;
+	mPrecinctsSize = precincts_size;
+	return TRUE;
+}
+
+BOOL LLImageJ2CKDU::initDecode(LLImageJ2C &base, LLImageRaw &raw_image, F32 decode_time, ECodeStreamMode mode, S32 first_channel, S32 max_channel_count, int discard_level, int* region)
 {
 	base.resetLastError();
 
@@ -339,17 +348,36 @@ BOOL LLImageJ2CKDU::initDecode(LLImageJ2C &base, LLImageRaw &raw_image, F32 deco
 
 		mRawImagep = &raw_image;
 		mCodeStreamp->change_appearance(false, true, false);
-		mCodeStreamp->apply_input_restrictions(first_channel,max_channel_count,base.getRawDiscardLevel(),0,NULL);
 
-		kdu_dims dims; mCodeStreamp->get_dims(0,dims);
-		S32 channels = base.getComponents() - first_channel;
-		if( channels > max_channel_count )
+		// Apply loading discard level and cropping if required
+		kdu_dims* region_kdu = NULL;
+		if (region != NULL)
 		{
-			channels = max_channel_count;
+			region_kdu = new kdu_dims;
+			region_kdu->pos.x  = region[0];
+			region_kdu->pos.y  = region[1];
+			region_kdu->size.x = region[2] - region[0];
+			region_kdu->size.y = region[3] - region[1];
 		}
+		int discard = (discard_level != -1 ? discard_level : base.getRawDiscardLevel());
+		
+		// Apply loading restrictions
+		mCodeStreamp->apply_input_restrictions( first_channel, max_channel_count, discard, 0, region_kdu);
+		
+		// Clean-up
+		if (region_kdu)
+		{
+			delete region_kdu;
+			region_kdu = NULL;
+		}
+
+		// Resize raw_image according to the image to be decoded
+		kdu_dims dims; mCodeStreamp->get_dims(0,dims);
+		S32 channels = base.getComponents() - first_channel;
+		channels = llmin(channels,max_channel_count);
 		raw_image.resize(dims.size.x, dims.size.y, channels);
+		//	llinfos << "Resizing raw_image to " << dims.size.x << ":" << dims.size.y << llendl;
 
-		//	llinfos << "Resizing to " << dims.size.x << ":" << dims.size.y << llendl;
 		if (!mTileIndicesp)
 		{
 			mTileIndicesp = new kdu_dims;
@@ -426,7 +454,7 @@ BOOL LLImageJ2CKDU::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 deco
 					// canvas coordinate system.  Comparing the two tells
 					// us where the current tile is in the buffer.
 					S32 channels = base.getComponents() - first_channel;
-					if( channels > max_channel_count )
+					if (channels > max_channel_count)
 					{
 						channels = max_channel_count;
 					}
@@ -452,14 +480,14 @@ BOOL LLImageJ2CKDU::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 deco
 					return FALSE;
 				}
 			}
-			catch( const char* msg )
+			catch (const char* msg)
 			{
 				base.setLastError(ll_safe_string(msg));
 				base.decodeFailed();
 				cleanupCodeStream();
 				return TRUE; // done
 			}
-			catch( ... )
+			catch (...)
 			{
 				base.setLastError( "Unknown J2C error" );
 				base.decodeFailed();
@@ -482,28 +510,17 @@ BOOL LLImageJ2CKDU::decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 deco
 
 BOOL LLImageJ2CKDU::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, const char* comment_text, F32 encode_time, BOOL reversible)
 {
-	// Collect simple arguments.
-	bool transpose, vflip, hflip;
-	bool allow_rate_prediction, mem, quiet, no_weights;
-	int cpu_iterations;
-	std::ostream *record_stream;
-
-	transpose = false;
-	record_stream = NULL;
-	allow_rate_prediction = true;
-	no_weights = false;
-	cpu_iterations = -1;
-	mem = false;
-	quiet = false;
-	vflip = true;
-	hflip = false;
+	// Declare and set simple arguments
+	bool transpose = false;
+	bool vflip = true;
+	bool hflip = false;
 
 	try
 	{
-		// Set up input image files.
+		// Set up input image files
 		siz_params siz;
 		
-		// Should set rate someplace here.
+		// Should set rate someplace here
 		LLKDUMemIn mem_in(raw_image.getData(),
 			raw_image.getDataSize(),
 			raw_image.getWidth(),
@@ -521,26 +538,17 @@ BOOL LLImageJ2CKDU::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, co
 		siz.set(Sprecision,0,0,8);  // Image samples have original bit-depth of 8
 		siz.set(Ssigned,0,0,false); // Image samples are originally unsigned
 
-		kdu_params *siz_ref = &siz; siz_ref->finalize();
-		siz_params transformed_siz; // Use this one to construct code-strea
+		kdu_params *siz_ref = &siz; 
+		siz_ref->finalize();
+		siz_params transformed_siz; // Use this one to construct code-stream
 		transformed_siz.copy_from(&siz,-1,-1,-1,0,transpose,false,false);
 
-		// Construct the `kdu_codestream' object and parse all remaining arguments.
-
+		// Construct the `kdu_codestream' object and parse all remaining arguments
 		U32 max_output_size = base.getWidth()*base.getHeight()*base.getComponents();
-		if (max_output_size < 1000)
-		{
-			max_output_size = 1000;
-		}
+		max_output_size = (max_output_size < 1000 ? 1000 : max_output_size);
 		U8 *output_buffer = new U8[max_output_size];
-
-		U32 output_size = max_output_size; // gets modified
-		LLKDUMemTarget output(output_buffer, output_size, base.getWidth()*base.getHeight()*base.getComponents());
-		if (output_size > max_output_size)
-		{
-			llerrs << llformat("LLImageJ2C::encode output_size(%d) > max_output_size(%d)",
-				output_size,max_output_size) << llendl;
-		}
+		U32 output_size = 0; // Address updated by LLKDUMemTarget to give the final compressed buffer size
+		LLKDUMemTarget output(output_buffer, output_size, max_output_size);
 
 		kdu_codestream codestream;
 		codestream.create(&transformed_siz,&output);
@@ -558,16 +566,22 @@ BOOL LLImageJ2CKDU::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, co
 		kdu_long layer_bytes[64];
 		U32 max_bytes = 0;
 
-		if ((num_components >= 3) && !no_weights)
+		if (num_components >= 3)
 		{
+			// Note that we always use YCC and not YUV
+			// *TODO: Verify this doesn't screws up reversible textures (like sculpties) as YCC is not reversible but YUV is...
 			set_default_colour_weights(codestream.access_siz());
 		}
 
 		if (reversible)
 		{
-			// If we're doing reversible, assume we're not using quality layers.
-			// Yes, I know this is incorrect!
 			codestream.access_siz()->parse_string("Creversible=yes");
+			// *TODO: we should use yuv in reversible mode and one level since those images are small. 
+			// Don't turn this on now though as both create problems on decoding for the moment
+			//codestream.access_siz()->parse_string("Clevels=1");
+			//codestream.access_siz()->parse_string("Cycc=no");
+			// If we're doing reversible (i.e. lossless compression), assumes we're not using quality layers.
+			// *TODO: this is incorrect and unecessary. Try using the regular layer setting.
 			codestream.access_siz()->parse_string("Clayers=1");
 			num_layer_specs = 1;
 			layer_bytes[0] = 0;
@@ -577,6 +591,7 @@ BOOL LLImageJ2CKDU::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, co
 			// Rate is the argument passed into the LLImageJ2C which
 			// specifies the target compression rate.  The default is 8:1.
 			// Possibly if max_bytes < 500, we should just use the default setting?
+			// *TODO: mRate is actually always 8:1 in the viewer. Test different values. Also force to reversible for small (< 500 bytes) textures.
 			if (base.mRate != 0.f)
 			{
 				max_bytes = (U32)(base.mRate*base.getWidth()*base.getHeight()*base.getComponents());
@@ -617,42 +632,56 @@ BOOL LLImageJ2CKDU::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, co
 				codestream.access_siz()->parse_string(layer_string.c_str());
 			}
 		}
-		codestream.access_siz()->finalize_all();
-		if (cpu_iterations >= 0)
+		
+		// Set up data ordering, markers, etc... if precincts or blocks specified
+		if ((mBlocksSize != -1) || (mPrecinctsSize != -1))
 		{
-			codestream.collect_timing_stats(cpu_iterations);
+			if (mPrecinctsSize != -1)
+			{
+				std::string precincts_string = llformat("Cprecincts={%d,%d}",mPrecinctsSize,mPrecinctsSize);
+				codestream.access_siz()->parse_string(precincts_string.c_str());
+			}
+			if (mBlocksSize != -1)
+			{
+				std::string blocks_string = llformat("Cblk={%d,%d}",mBlocksSize,mBlocksSize);
+				codestream.access_siz()->parse_string(blocks_string.c_str());
+			}
+			std::string ordering_string = llformat("Corder=RPCL");
+			codestream.access_siz()->parse_string(ordering_string.c_str());
+			std::string PLT_string = llformat("ORGgen_plt=yes");
+			codestream.access_siz()->parse_string(PLT_string.c_str());
+			std::string Parts_string = llformat("ORGtparts=R");
+			codestream.access_siz()->parse_string(Parts_string.c_str());
 		}
+		
+		codestream.access_siz()->finalize_all();
 		codestream.change_appearance(transpose,vflip,hflip);
 
 		// Now we are ready for sample data processing.
-        kdc_flow_control *tile = new kdc_flow_control(&mem_in,codestream);
-        bool done = false;
-        while (!done)
-        { 
-            // Process line by line
-            done = true;
-            if (tile->advance_components())
-            {
-                done = false;
-                tile->process_components();
-            }
-        }
+		kdc_flow_control *tile = new kdc_flow_control(&mem_in,codestream);
+		bool done = false;
+		while (!done)
+		{ 
+			// Process line by line
+			if (tile->advance_components())
+			{
+				tile->process_components();
+			}
+			else
+			{
+				done = true;
+			}
+		}
 
 		// Produce the compressed output
-        codestream.flush(layer_bytes,num_layer_specs);
+		codestream.flush(layer_bytes,num_layer_specs);
 
 		// Cleanup
-        delete tile;
-
+		delete tile;
 		codestream.destroy();
-		if (record_stream != NULL)
-		{
-			delete record_stream;
-		}
 
 		// Now that we're done encoding, create the new data buffer for the compressed
 		// image and stick it there.
-
 		base.copyData(output_buffer, output_size);
 		base.updateData(); // set width, height
 		delete[] output_buffer;
@@ -674,19 +703,19 @@ BOOL LLImageJ2CKDU::encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, co
 BOOL LLImageJ2CKDU::getMetadata(LLImageJ2C &base)
 {
 	// *FIX: kdu calls our callback function if there's an error, and
-	// then bombs.  To regain control, we throw an exception, and
+	// then bombs. To regain control, we throw an exception, and
 	// catch it here.
 	try
 	{
 		setupCodeStream(base, FALSE, MODE_FAST);
 		return TRUE;
 	}
-	catch( const char* msg )
+	catch (const char* msg)
 	{
 		base.setLastError(ll_safe_string(msg));
 		return FALSE;
 	}
-	catch( ... )
+	catch (...)
 	{
 		base.setLastError( "Unknown J2C error" );
 		return FALSE;
@@ -699,37 +728,49 @@ void set_default_colour_weights(kdu_params *siz)
 	assert(cod != NULL);
 
 	bool can_use_ycc = true;
-	bool rev0=false;
-	int depth0=0, sub_x0=1, sub_y0=1;
-	for (int c=0; c < 3; c++)
+	bool rev0 = false;
+	int depth0 = 0, sub_x0 = 1, sub_y0 = 1;
+	for (int c = 0; c < 3; c++)
 	{
-		int depth=0; siz->get(Sprecision,c,0,depth);
-		int sub_y=1; siz->get(Ssampling,c,0,sub_y);
-		int sub_x=1; siz->get(Ssampling,c,1,sub_x);
+		int depth = 0; siz->get(Sprecision,c,0,depth);
+		int sub_y = 1; siz->get(Ssampling,c,0,sub_y);
+		int sub_x = 1; siz->get(Ssampling,c,1,sub_x);
 		kdu_params *coc = cod->access_relation(-1,c);
-		bool rev=false; coc->get(Creversible,0,0,rev);
+		bool rev = false; coc->get(Creversible,0,0,rev);
 		if (c == 0)
-		{ rev0=rev; depth0=depth; sub_x0=sub_x; sub_y0=sub_y; }
-		else if ((rev != rev0) || (depth != depth0) ||
-			(sub_x != sub_x0) || (sub_y != sub_y0))
+		{
+			rev0 = rev; depth0 = depth; sub_x0 = sub_x; sub_y0 = sub_y;
+		}
+		else if ((rev != rev0) || (depth != depth0) || 
+				 (sub_x != sub_x0) || (sub_y != sub_y0))
+		{
 			can_use_ycc = false;
+		}
 	}
 	if (!can_use_ycc)
+	{
 		return;
+	}
 
 	bool use_ycc;
 	if (!cod->get(Cycc,0,0,use_ycc))
+	{
 		cod->set(Cycc,0,0,use_ycc=true);
+	}
 	if (!use_ycc)
+	{
 		return;
+	}
 	float weight;
-	if (cod->get(Clev_weights,0,0,weight) ||
-		cod->get(Cband_weights,0,0,weight))
-		return; // Weights already specified explicitly.
+	if (cod->get(Clev_weights,0,0,weight) || cod->get(Cband_weights,0,0,weight))
+	{
+		// Weights already specified explicitly -> nothing to do
+		return; 
+	}
 
-	/* These example weights are adapted from numbers generated by Marcus Nadenau
-	at EPFL, for a viewing distance of 15 cm and a display resolution of
-	300 DPI. */
+	// These example weights are adapted from numbers generated by Marcus Nadenau
+	// at EPFL, for a viewing distance of 15 cm and a display resolution of
+	// 300 DPI.
 
 	cod->parse_string("Cband_weights:C0="
 		"{0.0901},{0.2758},{0.2758},"
@@ -775,7 +816,7 @@ all necessary level shifting, type conversion, rounding and truncation. */
 				val += 128;
 				if (val & ((-1)<<8))
 				{
-					val = (val<0)?0:255;
+					val = (val < 0 ? 0 : 255);
 				}
 				*dest = (kdu_byte) val;
 			}
@@ -793,7 +834,7 @@ all necessary level shifting, type conversion, rounding and truncation. */
 				val += 128;
 				if (val & ((-1)<<8))
 				{
-					val = (val<0)?0:255;
+					val = (val < 0 ? 0 : 255);
 				}
 				*dest = (kdu_byte) val;
 			}
@@ -816,7 +857,7 @@ all necessary level shifting, type conversion, rounding and truncation. */
 					val += 128;
 					if (val & ((-1)<<8))
 					{
-						val = (val<0)?0:255;
+						val = (val < 0 ? 0 : 255);
 					}
 					*dest = (kdu_byte) val;
 				}
@@ -835,7 +876,7 @@ all necessary level shifting, type conversion, rounding and truncation. */
 					val += 128;
 					if (val & ((-1)<<8))
 					{
-						val = (val<0)?0:(256-(1<<upshift));
+						val = (val < 0 ? 0 : 256 - (1<<upshift));
 					}
 					*dest = (kdu_byte) val;
 				}
@@ -857,7 +898,7 @@ all necessary level shifting, type conversion, rounding and truncation. */
 					val += 128;
 					if (val & ((-1)<<8))
 					{
-						val = (val<0)?0:255;
+						val = (val < 0 ? 0 : 255);
 					}
 					*dest = (kdu_byte) val;
 				}
@@ -873,7 +914,7 @@ all necessary level shifting, type conversion, rounding and truncation. */
 					val += 128;
 					if (val & ((-1)<<8))
 					{
-						val = (val<0)?0:(256-(1<<upshift));
+						val = (val < 0 ? 0 : 256 - (1<<upshift));
 					}
 					*dest = (kdu_byte) val;
 				}
@@ -892,17 +933,17 @@ LLKDUDecodeState::LLKDUDecodeState(kdu_tile tile, kdu_byte *buf, S32 row_gap)
 
 	mNumComponents = tile.get_num_components();
 
-	llassert(mNumComponents<=4);
+	llassert(mNumComponents <= 4);
 	mUseYCC = tile.get_ycc();
 
-	for (c=0; c<4; ++c)
+	for (c = 0; c < 4; ++c)
 	{
 		mReversible[c] = false;
 		mBitDepths[c] = 0;
 	}
 
 	// Open tile-components and create processing engines and resources
-	for (c=0; c < mNumComponents; c++)
+	for (c = 0; c < mNumComponents; c++)
 	{
 		mComps[c] = mTile.access_component(c);
 		mReversible[c] = mComps[c].get_reversible();
@@ -929,7 +970,7 @@ LLKDUDecodeState::LLKDUDecodeState(kdu_tile tile, kdu_byte *buf, S32 row_gap)
 		}
 	}
 	mAllocator.finalize(); // Actually creates buffering resources
-	for (c=0; c < mNumComponents; c++)
+	for (c = 0; c < mNumComponents; c++)
 	{
 		mLines[c].create(); // Grabs resources from the allocator.
 	}
@@ -937,13 +978,11 @@ LLKDUDecodeState::LLKDUDecodeState(kdu_tile tile, kdu_byte *buf, S32 row_gap)
 
 LLKDUDecodeState::~LLKDUDecodeState()
 {
-	S32 c;
 	// Cleanup
-	for (c=0; c < mNumComponents; c++)
+	for (S32 c = 0; c < mNumComponents; c++)
 	{
 		mEngines[c].destroy(); // engines are interfaces; no default destructors
 	}
-
 	mTile.close();
 }
 
@@ -962,7 +1001,7 @@ separation between consecutive rows in the real buffer. */
 	LLTimer decode_timer;
 	while (mDims.size.y--)
 	{
-		for (c=0; c < mNumComponents; c++)
+		for (c = 0; c < mNumComponents; c++)
 		{
 			mEngines[c].pull(mLines[c],true);
 		}
@@ -970,7 +1009,7 @@ separation between consecutive rows in the real buffer. */
 		{
 			kdu_convert_ycc_to_rgb(mLines[0],mLines[1],mLines[2]);
 		}
-		for (c=0; c < mNumComponents; c++)
+		for (c = 0; c < mNumComponents; c++)
 		{
 			transfer_bytes(mBuf+c,mLines[c],mNumComponents,mBitDepths[c]);
 		}
@@ -990,96 +1029,100 @@ separation between consecutive rows in the real buffer. */
 
 kdc_flow_control::kdc_flow_control (kdu_image_in_base *img_in, kdu_codestream codestream)
 {
-    int n;
-    
-    this->codestream = codestream;
-    codestream.get_valid_tiles(valid_tile_indices);
-    tile_idx = valid_tile_indices.pos;
-    tile = codestream.open_tile(tile_idx,NULL);
-    
-    // Set up the individual components
-    num_components = codestream.get_num_components(true);
-    components = new kdc_component_flow_control[num_components];
-    count_delta = 0;
-    kdc_component_flow_control *comp = components;
-    for (n = 0; n < num_components; n++, comp++)
-    {
-        comp->line = NULL;
-        comp->reader = img_in;
-        kdu_coords subsampling;  
-        codestream.get_subsampling(n,subsampling,true);
-        kdu_dims dims;  
-        codestream.get_tile_dims(tile_idx,n,dims,true);
-        comp->vert_subsampling = subsampling.y;
-        if ((n == 0) || (comp->vert_subsampling < count_delta))
-        {
-            count_delta = comp->vert_subsampling;
-        }
-        comp->ratio_counter = 0;
-        comp->remaining_lines = comp->initial_lines = dims.size.y;
-    }
-    assert(num_components >= 0);
-    
-    tile.set_components_of_interest(num_components);
-    max_buffer_memory = engine.create(codestream,tile,false,NULL,false,1,NULL,NULL,false);
+	int n;
+	
+	this->codestream = codestream;
+	codestream.get_valid_tiles(valid_tile_indices);
+	tile_idx = valid_tile_indices.pos;
+	tile = codestream.open_tile(tile_idx,NULL);
+	
+	// Set up the individual components
+	num_components = codestream.get_num_components(true);
+	components = new kdc_component_flow_control[num_components];
+	count_delta = 0;
+	kdc_component_flow_control *comp = components;
+	for (n = 0; n < num_components; n++, comp++)
+	{
+		comp->line = NULL;
+		comp->reader = img_in;
+		kdu_coords subsampling;  
+		codestream.get_subsampling(n,subsampling,true);
+		kdu_dims dims;  
+		codestream.get_tile_dims(tile_idx,n,dims,true);
+		comp->vert_subsampling = subsampling.y;
+		if ((n == 0) || (comp->vert_subsampling < count_delta))
+		{
+			count_delta = comp->vert_subsampling;
+		}
+		comp->ratio_counter = 0;
+		comp->remaining_lines = comp->initial_lines = dims.size.y;
+	}
+	assert(num_components >= 0);
+	
+	tile.set_components_of_interest(num_components);
+	max_buffer_memory = engine.create(codestream,tile,false,NULL,false,1,NULL,NULL,false);
 }
 
 kdc_flow_control::~kdc_flow_control()
 {
-    if (components != NULL)
-        delete[] components;
-    if (engine.exists())
-        engine.destroy();
+	if (components != NULL)
+	{
+		delete[] components;
+	}
+	if (engine.exists())
+	{
+		engine.destroy();
+	}
 }
 
 bool kdc_flow_control::advance_components()
 {
-    bool found_line = false;
-    while (!found_line)
-    {
-        bool all_done = true;
-        kdc_component_flow_control *comp = components;
-        for (int n = 0; n < num_components; n++, comp++)
-        {
-            assert(comp->ratio_counter >= 0);
-            if (comp->remaining_lines > 0)
-            {
-                all_done = false;
-                comp->ratio_counter -= count_delta;
-                if (comp->ratio_counter < 0)
-                {
-                    found_line = true;
-                    comp->line = engine.exchange_line(n,NULL,NULL);
-                    assert(comp->line != NULL);
+	bool found_line = false;
+	while (!found_line)
+	{
+		bool all_done = true;
+		kdc_component_flow_control *comp = components;
+		for (int n = 0; n < num_components; n++, comp++)
+		{
+			assert(comp->ratio_counter >= 0);
+			if (comp->remaining_lines > 0)
+			{
+				all_done = false;
+				comp->ratio_counter -= count_delta;
+				if (comp->ratio_counter < 0)
+				{
+					found_line = true;
+					comp->line = engine.exchange_line(n,NULL,NULL);
+					assert(comp->line != NULL);
 					if (comp->line->get_width())
 					{
 						comp->reader->get(n,*(comp->line),0);
 					}
-                }
-            }
-        }
-        if (all_done)
-        {
-            return false;
-        }
-    }
-    return true;
+				}
+			}
+		}
+		if (all_done)
+		{
+			return false;
+		}
+	}
+	return true;
 }
 
 void kdc_flow_control::process_components()
 {
-    kdc_component_flow_control *comp = components;
-    for (int n = 0; n < num_components; n++, comp++)
-    {
-        if (comp->ratio_counter < 0)
-        {
-            comp->ratio_counter += comp->vert_subsampling;
-            assert(comp->ratio_counter >= 0);
-            assert(comp->remaining_lines > 0);
-            comp->remaining_lines--;
-            assert(comp->line != NULL);
-            engine.exchange_line(n,comp->line,NULL);
-            comp->line = NULL;
-        }
-    }
+	kdc_component_flow_control *comp = components;
+	for (int n = 0; n < num_components; n++, comp++)
+	{
+		if (comp->ratio_counter < 0)
+		{
+			comp->ratio_counter += comp->vert_subsampling;
+			assert(comp->ratio_counter >= 0);
+			assert(comp->remaining_lines > 0);
+			comp->remaining_lines--;
+			assert(comp->line != NULL);
+			engine.exchange_line(n,comp->line,NULL);
+			comp->line = NULL;
+		}
+	}
 }
diff --git a/indra/llkdu/llimagej2ckdu.h b/indra/llkdu/llimagej2ckdu.h
index 5628f69eeb6b44796af332978547f31bce0d2493..9fce58b76258a3ea77512d606755e5f22ad2f96b 100644
--- a/indra/llkdu/llimagej2ckdu.h
+++ b/indra/llkdu/llimagej2ckdu.h
@@ -58,17 +58,21 @@ class LLImageJ2CKDU : public LLImageJ2CImpl
 	/*virtual*/ BOOL decodeImpl(LLImageJ2C &base, LLImageRaw &raw_image, F32 decode_time, S32 first_channel, S32 max_channel_count);
 	/*virtual*/ BOOL encodeImpl(LLImageJ2C &base, const LLImageRaw &raw_image, const char* comment_text, F32 encode_time=0.0,
 								BOOL reversible=FALSE);
+	/*virtual*/ BOOL initDecode(LLImageJ2C &base, LLImageRaw &raw_image, int discard_level = -1, int* region = NULL);
+	/*virtual*/ BOOL initEncode(LLImageJ2C &base, LLImageRaw &raw_image, int blocks_size = -1, int precincts_size = -1);
 
 private:
+	BOOL initDecode(LLImageJ2C &base, LLImageRaw &raw_image, F32 decode_time, ECodeStreamMode mode, S32 first_channel, S32 max_channel_count, int discard_level = -1, int* region = NULL);
 	void setupCodeStream(LLImageJ2C &base, BOOL keep_codestream, ECodeStreamMode mode);
 	void cleanupCodeStream();
-	BOOL initDecode(LLImageJ2C &base, LLImageRaw &raw_image, F32 decode_time, ECodeStreamMode mode, S32 first_channel, S32 max_channel_count );
 
 	// Encode variable
 	LLKDUMemSource *mInputp;
 	kdu_codestream *mCodeStreamp;
 	kdu_coords *mTPosp; // tile position
 	kdu_dims *mTileIndicesp;
+	int mBlocksSize;
+	int mPrecinctsSize;
 
 	// Temporary variables for in-progress decodes...
 	LLImageRaw *mRawImagep;
diff --git a/indra/llkdu/llkdumem.cpp b/indra/llkdu/llkdumem.cpp
index 1f549cbbe0daa23c0f439f976bc60ef55ce9f818..0347475559d8844c2530c0ce63905c31ba9cf566 100644
--- a/indra/llkdu/llkdumem.cpp
+++ b/indra/llkdu/llkdumem.cpp
@@ -47,12 +47,12 @@ LLKDUMemIn::LLKDUMemIn(const U8 *data,
 	num_components = in_num_components;
 	alignment_bytes = 0;
 
-	for (n=0; n<3; ++n)
+	for (n = 0; n < 3; ++n)
 	{
 		precision[n] = 0;
 	}
 
-	for (n=0; n < num_components; ++n)
+	for (n = 0; n < num_components; ++n)
 	{
 		siz->set(Sdims,n,0,rows);
 		siz->set(Sdims,n,1,cols);
@@ -80,12 +80,12 @@ LLKDUMemIn::~LLKDUMemIn()
 	}
 	image_line_buf *tmp;
 	while ((tmp=incomplete_lines) != NULL)
-    {
+	{
 		incomplete_lines = tmp->next;
 		delete tmp; 
 	}
 	while ((tmp=free_lines) != NULL)
-    {
+	{
 		free_lines = tmp->next;
 		delete tmp;
 	}
@@ -98,16 +98,16 @@ bool LLKDUMemIn::get(int comp_idx, kdu_line_buf &line, int x_tnum)
 	assert((idx >= 0) && (idx < num_components));
 	x_tnum = x_tnum*num_components+idx;
 	image_line_buf *scan, *prev=NULL;
-	for (scan=incomplete_lines; scan != NULL; prev=scan, scan=scan->next)
-    {
+	for (scan = incomplete_lines; scan != NULL; prev = scan, scan = scan->next)
+	{
 		assert(scan->next_x_tnum >= x_tnum);
 		if (scan->next_x_tnum == x_tnum)
 		{
 			break;
 		}
-    }
+	}
 	if (scan == NULL)
-    { // Need to read a new image line.
+	{ // Need to read a new image line.
 		assert(x_tnum == 0); // Must consume in very specific order.
 		if (num_unread_rows == 0)
 		{
@@ -134,7 +134,7 @@ bool LLKDUMemIn::get(int comp_idx, kdu_line_buf &line, int x_tnum)
 		num_unread_rows--;
 		scan->accessed_samples = 0;
 		scan->next_x_tnum = 0;
-    }
+	}
 
 	assert((cols-scan->accessed_samples) >= line.get_width());
 
@@ -161,7 +161,7 @@ bool LLKDUMemIn::get(int comp_idx, kdu_line_buf &line, int x_tnum)
 		}
 	}
 	else
-    {
+	{
 		kdu_sample16 *dp = line.get_buf16();
 		if (line.is_absolute())
 		{ // 16-bit absolute integers
@@ -177,7 +177,7 @@ bool LLKDUMemIn::get(int comp_idx, kdu_line_buf &line, int x_tnum)
 				dp->ival = (((kdu_int16)(*sp)) - 128) << (KDU_FIX_POINT-8);
 			}
 		}
-    }
+	}
 
 	scan->next_x_tnum++;
 	if (idx == (num_components-1))
diff --git a/indra/llkdu/llkdumem.h b/indra/llkdu/llkdumem.h
index 7064de4408d682aa87972804c592cfd917646bfd..9d923fc3674b2a7cfdb5ab0cf527270e4efae136 100644
--- a/indra/llkdu/llkdumem.h
+++ b/indra/llkdu/llkdumem.h
@@ -39,7 +39,7 @@
 
 class LLKDUMemSource: public kdu_compressed_source
 {
-public: // Member functions
+public:
 	LLKDUMemSource(U8 *input_buffer, U32 size)
 	{
 		mData = input_buffer;
@@ -47,11 +47,11 @@ class LLKDUMemSource: public kdu_compressed_source
 		mCurPos = 0;
 	}
 
-    ~LLKDUMemSource()
+	~LLKDUMemSource()
 	{
 	}
 
-    int read(kdu_byte *buf, int num_bytes)
+	int read(kdu_byte *buf, int num_bytes)
 	{
 		U32 num_out;
 		num_out = num_bytes;
@@ -70,7 +70,7 @@ class LLKDUMemSource: public kdu_compressed_source
 		mCurPos = 0;
 	}
 
-private: // Data
+private:
 	U8 *mData;
 	U32 mSize;
 	U32 mCurPos;
@@ -78,7 +78,7 @@ class LLKDUMemSource: public kdu_compressed_source
 
 class LLKDUMemTarget: public kdu_compressed_target
 {
-public: // Member functions
+public:
 	LLKDUMemTarget(U8 *output_buffer, U32 &output_size, const U32 buffer_size)
 	{
 		mData = output_buffer;
@@ -87,11 +87,11 @@ class LLKDUMemTarget: public kdu_compressed_target
 		mOutputSize = &output_size;
 	}
 
-    ~LLKDUMemTarget()
-    {
+	~LLKDUMemTarget()
+	{
 	}
 
-    bool write(const kdu_byte *buf, int num_bytes)
+	bool write(const kdu_byte *buf, int num_bytes)
 	{
 		U32 num_out;
 		num_out = num_bytes;
@@ -108,7 +108,7 @@ class LLKDUMemTarget: public kdu_compressed_target
 		return true;
 	}
 	
-private: // Data
+private:
 	U8 *mData;
 	U32 mSize;
 	U32 mCurPos;
@@ -117,27 +117,27 @@ class LLKDUMemTarget: public kdu_compressed_target
 
 class LLKDUMemIn : public kdu_image_in_base
 {
-public: // Member functions
-    LLKDUMemIn(const U8 *data,
+public:
+	LLKDUMemIn(const U8 *data,
 				const U32 size,
 				const U16 rows,
 				const U16 cols,
 				U8 in_num_components,
 				siz_params *siz);
-    ~LLKDUMemIn();
+	~LLKDUMemIn();
 
-    bool get(int comp_idx, kdu_line_buf &line, int x_tnum);
+	bool get(int comp_idx, kdu_line_buf &line, int x_tnum);
 
-private: // Data
+private:
 	const U8 *mData;
-    int first_comp_idx;
-    int num_components;
-    int rows, cols;
-    int alignment_bytes; // Number of 0's at end of each line.
-    int precision[3];
-    image_line_buf *incomplete_lines; // Each "sample" represents a full pixel
-    image_line_buf *free_lines;
-    int num_unread_rows;
+	int first_comp_idx;
+	int num_components;
+	int rows, cols;
+	int alignment_bytes; // Number of 0's at end of each line.
+	int precision[3];
+	image_line_buf *incomplete_lines; // Each "sample" represents a full pixel
+	image_line_buf *free_lines;
+	int num_unread_rows;
 
 	U32 mCurPos;
 	U32 mDataSize;
diff --git a/indra/llkdu/tests/llimagej2ckdu_test.cpp b/indra/llkdu/tests/llimagej2ckdu_test.cpp
index 1ccee4bb647445c17babb176106096135abee1a4..7ac24a969a09cccd04710710951e67ede9504ded 100644
--- a/indra/llkdu/tests/llimagej2ckdu_test.cpp
+++ b/indra/llkdu/tests/llimagej2ckdu_test.cpp
@@ -27,10 +27,10 @@
 
 #include "linden_common.h"
 // Class to test 
-#include "../llimagej2ckdu.h"
-#include "../llkdumem.h"
+#include "llimagej2ckdu.h"
+#include "llkdumem.h"
 // Tut header
-#include "../test/lltut.h"
+#include "lltut.h"
 
 // -------------------------------------------------------------------------------------------
 // Stubbing: Declarations required to link and run the class being tested
diff --git a/indra/llmath/tests/m3math_test.cpp b/indra/llmath/tests/m3math_test.cpp
index e4d31996a3629963bd7185efa0306d279f485000..1ca2b005d996b039dc0fd63e79b0dafbc8de54c7 100644
--- a/indra/llmath/tests/m3math_test.cpp
+++ b/indra/llmath/tests/m3math_test.cpp
@@ -37,6 +37,16 @@
 
 #include "../test/lltut.h"
 
+#if LL_WINDOWS
+// disable unreachable code warnings caused by usage of skip.
+#pragma warning(disable: 4702)
+#endif
+
+#if LL_WINDOWS
+// disable unreachable code warnings caused by usage of skip.
+#pragma warning(disable: 4702)
+#endif
+
 namespace tut
 {
 	struct m3math_test
@@ -277,19 +287,21 @@ namespace tut
 		LLVector3 llvec2(1, 2, 0);
 		LLVector3 llvec3(2, 4, 2);
 
+        skip("This test fails depending on architecture. Need to fix comparison operation, is_approx_equal, to work on more than one platform.");
+
 		llmat_obj.setRows(llvec1, llvec2, llvec3);
 		llmat_obj.orthogonalize();
 
 		ensure("LLMatrix3::orthogonalize failed ",
-		       is_approx_equal(0.19611613f, llmat_obj.mMatrix[0][0]) &&
+		       is_approx_equal(0.19611614f, llmat_obj.mMatrix[0][0]) &&
 		       is_approx_equal(0.78446454f, llmat_obj.mMatrix[0][1]) &&
-		       is_approx_equal(0.58834839f, llmat_obj.mMatrix[0][2]) &&
-		       is_approx_equal(0.47628206f, llmat_obj.mMatrix[1][0]) &&
-		       is_approx_equal(0.44826555f, llmat_obj.mMatrix[1][1]) &&
-		       is_approx_equal(-0.75644791f, llmat_obj.mMatrix[1][2]) &&
-		       is_approx_equal(-0.85714287f, llmat_obj.mMatrix[2][0]) &&
+		       is_approx_equal(0.58834841f, llmat_obj.mMatrix[0][2]) &&
+		       is_approx_equal(0.47628204f, llmat_obj.mMatrix[1][0]) &&
+		       is_approx_equal(0.44826545f, llmat_obj.mMatrix[1][1]) &&
+		       is_approx_equal(-0.75644795f, llmat_obj.mMatrix[1][2]) &&
+		       is_approx_equal(-0.85714286f, llmat_obj.mMatrix[2][0]) &&
 		       is_approx_equal(0.42857143f, llmat_obj.mMatrix[2][1]) &&
-		       is_approx_equal(-0.28571427f, llmat_obj.mMatrix[2][2]));
+		       is_approx_equal(-0.28571429f, llmat_obj.mMatrix[2][2]));
 	}
 
 	//test case for adjointTranspose() fn.
diff --git a/indra/llmath/v3math.cpp b/indra/llmath/v3math.cpp
index fd08df02d800880f47c9e5aaafbe03689d6bf903..18b15e08c4c89b3f62ce36d3cb4c9621f0110d72 100644
--- a/indra/llmath/v3math.cpp
+++ b/indra/llmath/v3math.cpp
@@ -134,6 +134,21 @@ BOOL LLVector3::clampLength( F32 length_limit )
 	return changed;
 }
 
+BOOL LLVector3::clamp(const LLVector3 &min_vec, const LLVector3 &max_vec)
+{
+	BOOL ret = FALSE;
+
+	if (mV[0] < min_vec[0]) { mV[0] = min_vec[0]; ret = TRUE; }
+	if (mV[1] < min_vec[1]) { mV[1] = min_vec[1]; ret = TRUE; }
+	if (mV[2] < min_vec[2]) { mV[2] = min_vec[2]; ret = TRUE; }
+
+	if (mV[0] > max_vec[0]) { mV[0] = max_vec[0]; ret = TRUE; }
+	if (mV[1] > max_vec[1]) { mV[1] = max_vec[1]; ret = TRUE; }
+	if (mV[2] > max_vec[2]) { mV[2] = max_vec[2]; ret = TRUE; }
+
+	return ret;
+}
+
 
 // Sets all values to absolute value of their original values
 // Returns TRUE if data changed
diff --git a/indra/llmath/v3math.h b/indra/llmath/v3math.h
index dbd38c1c3f03d202845029bfd0e70533c4bc6446..4b3efe739407f3e2b4e51a76a8d616de46f6b42a 100644
--- a/indra/llmath/v3math.h
+++ b/indra/llmath/v3math.h
@@ -69,6 +69,7 @@ class LLVector3
 
 		inline BOOL isFinite() const;									// checks to see if all values of LLVector3 are finite
 		BOOL		clamp(F32 min, F32 max);		// Clamps all values to (min,max), returns TRUE if data changed
+		BOOL		clamp(const LLVector3 &min_vec, const LLVector3 &max_vec); // Scales vector by another vector
 		BOOL		clampLength( F32 length_limit );					// Scales vector to limit length to a value
 
 		void		quantize16(F32 lowerxy, F32 upperxy, F32 lowerz, F32 upperz);	// changes the vector to reflect quatization
@@ -156,6 +157,8 @@ F32	dist_vec(const LLVector3 &a, const LLVector3 &b);		// Returns distance betwe
 F32	dist_vec_squared(const LLVector3 &a, const LLVector3 &b);// Returns distance squared between a and b
 F32	dist_vec_squared2D(const LLVector3 &a, const LLVector3 &b);// Returns distance squared between a and b ignoring Z component
 LLVector3 projected_vec(const LLVector3 &a, const LLVector3 &b); // Returns vector a projected on vector b
+LLVector3 parallel_component(const LLVector3 &a, const LLVector3 &b); // Returns vector a projected on vector b (same as projected_vec)
+LLVector3 orthogonal_component(const LLVector3 &a, const LLVector3 &b); // Returns component of vector a not parallel to vector b (same as projected_vec)
 LLVector3 lerp(const LLVector3 &a, const LLVector3 &b, F32 u); // Returns a vector that is a linear interpolation between a and b
 
 inline LLVector3::LLVector3(void)
@@ -490,6 +493,17 @@ inline LLVector3 projected_vec(const LLVector3 &a, const LLVector3 &b)
 	return project_axis * (a * project_axis);
 }
 
+inline LLVector3 parallel_component(const LLVector3 &a, const LLVector3 &b)
+{
+	return projected_vec(a, b);
+}
+
+inline LLVector3 orthogonal_component(const LLVector3 &a, const LLVector3 &b)
+{
+	return a - projected_vec(a, b);
+}
+
+
 inline LLVector3 lerp(const LLVector3 &a, const LLVector3 &b, F32 u)
 {
 	return LLVector3(
diff --git a/indra/llmessage/CMakeLists.txt b/indra/llmessage/CMakeLists.txt
index 1cad0f6d22df836cef6f8ef776a73f58822fefc6..c5f82cf0527dd7c9c454d71d5345323e834ded07 100644
--- a/indra/llmessage/CMakeLists.txt
+++ b/indra/llmessage/CMakeLists.txt
@@ -10,7 +10,9 @@ include(LLMath)
 include(LLMessage)
 include(LLVFS)
 include(LLAddBuildTest)
+include(Python)
 include(Tut)
+include(Python)
 
 include_directories (${CMAKE_CURRENT_SOURCE_DIR})
 
diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp
index 767001b6337ad05a358914ef3406331aa3effa4a..33e67099833e6f6c2e360acf7330a2dabccfd92b 100644
--- a/indra/llmessage/llavatarnamecache.cpp
+++ b/indra/llmessage/llavatarnamecache.cpp
@@ -553,12 +553,10 @@ void LLAvatarNameCache::eraseUnrefreshed()
     if (!sLastExpireCheck || sLastExpireCheck < max_unrefreshed)
     {
         sLastExpireCheck = now;
-        cache_t::iterator it = sCache.begin();
-        while (it != sCache.end())
+
+        for (cache_t::iterator it = sCache.begin(); it != sCache.end(); ++it)
         {
-            cache_t::iterator cur = it;
-            ++it;
-            const LLAvatarName& av_name = cur->second;
+            const LLAvatarName& av_name = it->second;
             if (av_name.mExpires < max_unrefreshed)
             {
                 const LLUUID& agent_id = it->first;
@@ -566,7 +564,7 @@ void LLAvatarNameCache::eraseUnrefreshed()
                                          << " user '" << av_name.mUsername << "' "
                                          << "expired " << now - av_name.mExpires << " secs ago"
                                          << LL_ENDL;
-                sCache.erase(cur);
+                sCache.erase(it);
             }
         }
         LL_INFOS("AvNameCache") << sCache.size() << " cached avatar names" << LL_ENDL;
diff --git a/indra/llmessage/llurlrequest.cpp b/indra/llmessage/llurlrequest.cpp
index cb9d1c3731faa614b0fa7473f32fe1e1d9461722..28bd09fc4cb10615f60d1f224411b2249fa1770a 100644
--- a/indra/llmessage/llurlrequest.cpp
+++ b/indra/llmessage/llurlrequest.cpp
@@ -440,6 +440,9 @@ bool LLURLRequest::configure()
 	case HTTP_GET:
 		mDetail->mCurlRequest->setopt(CURLOPT_HTTPGET, 1);
 		mDetail->mCurlRequest->setopt(CURLOPT_FOLLOWLOCATION, 1);
+
+		// Set Accept-Encoding to allow response compression
+		mDetail->mCurlRequest->setoptString(CURLOPT_ENCODING, "");
 		rv = true;
 		break;
 
@@ -464,6 +467,9 @@ bool LLURLRequest::configure()
 
 		// Set the handle for an http post
 		mDetail->mCurlRequest->setPost(NULL, bytes);
+
+		// Set Accept-Encoding to allow response compression
+		mDetail->mCurlRequest->setoptString(CURLOPT_ENCODING, "");
 		rv = true;
 		break;
 
diff --git a/indra/llmessage/message.cpp b/indra/llmessage/message.cpp
index 2f0d815be5267c89844b2683060fb9fb33190066..d0b0e178b83625400f790737d0f45eb1d5aba00a 100644
--- a/indra/llmessage/message.cpp
+++ b/indra/llmessage/message.cpp
@@ -2441,12 +2441,12 @@ void dump_prehash_files()
 			" * Generated from message template version number %.3f\n"
 			" */\n",
 			gMessageSystem->mMessageFileVersionNumber);
-		fprintf(fp, "\n\nextern F32 gPrehashVersionNumber;\n\n");
+		fprintf(fp, "\n\nextern F32 const gPrehashVersionNumber;\n\n");
 		for (i = 0; i < MESSAGE_NUMBER_OF_HASH_BUCKETS; i++)
 		{
 			if (!LLMessageStringTable::getInstance()->mEmpty[i] && LLMessageStringTable::getInstance()->mString[i][0] != '.')
 			{
-				fprintf(fp, "extern char * _PREHASH_%s;\n", LLMessageStringTable::getInstance()->mString[i]);
+				fprintf(fp, "extern char const* const _PREHASH_%s;\n", LLMessageStringTable::getInstance()->mString[i]);
 			}
 		}
 		fprintf(fp, "\n\n#endif\n");
@@ -2471,12 +2471,12 @@ void dump_prehash_files()
 			gMessageSystem->mMessageFileVersionNumber);
 		fprintf(fp, "#include \"linden_common.h\"\n");
 		fprintf(fp, "#include \"message.h\"\n\n");
-		fprintf(fp, "\n\nF32 gPrehashVersionNumber = %.3ff;\n\n", gMessageSystem->mMessageFileVersionNumber);
+		fprintf(fp, "\n\nF32 const gPrehashVersionNumber = %.3ff;\n\n", gMessageSystem->mMessageFileVersionNumber);
 		for (i = 0; i < MESSAGE_NUMBER_OF_HASH_BUCKETS; i++)
 		{
 			if (!LLMessageStringTable::getInstance()->mEmpty[i] && LLMessageStringTable::getInstance()->mString[i][0] != '.')
 			{
-				fprintf(fp, "char * _PREHASH_%s = LLMessageStringTable::getInstance()->getString(\"%s\");\n", LLMessageStringTable::getInstance()->mString[i], LLMessageStringTable::getInstance()->mString[i]);
+				fprintf(fp, "char const* const _PREHASH_%s = LLMessageStringTable::getInstance()->getString(\"%s\");\n", LLMessageStringTable::getInstance()->mString[i], LLMessageStringTable::getInstance()->mString[i]);
 			}
 		}
 		fclose(fp);
diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp
index eb1e366149e2bceaeb4ad75bde396ccd554bc201..5d03615e5333bdef27d8873ea92b6e48c872e0ec 100644
--- a/indra/llmessage/message_prehash.cpp
+++ b/indra/llmessage/message_prehash.cpp
@@ -32,1346 +32,1346 @@
 
 
 
-F32 gPrehashVersionNumber = 2.000f;
+F32 const gPrehashVersionNumber = 2.000f;
 
-char* _PREHASH_X = LLMessageStringTable::getInstance()->getString("X");
-char* _PREHASH_Y = LLMessageStringTable::getInstance()->getString("Y");
-char* _PREHASH_Z = LLMessageStringTable::getInstance()->getString("Z");
-char* _PREHASH_AddFlags = LLMessageStringTable::getInstance()->getString("AddFlags");
-char* _PREHASH_FailureInfo = LLMessageStringTable::getInstance()->getString("FailureInfo");
-char* _PREHASH_MapData = LLMessageStringTable::getInstance()->getString("MapData");
-char* _PREHASH_AddItem = LLMessageStringTable::getInstance()->getString("AddItem");
-char* _PREHASH_MeanCollision = LLMessageStringTable::getInstance()->getString("MeanCollision");
-char* _PREHASH_RezScript = LLMessageStringTable::getInstance()->getString("RezScript");
-char* _PREHASH_AvatarSitResponse = LLMessageStringTable::getInstance()->getString("AvatarSitResponse");
-char* _PREHASH_InventoryAssetResponse = LLMessageStringTable::getInstance()->getString("InventoryAssetResponse");
-char* _PREHASH_KillObject = LLMessageStringTable::getInstance()->getString("KillObject");
-char* _PREHASH_ProposalID = LLMessageStringTable::getInstance()->getString("ProposalID");
-char* _PREHASH_SerialNum = LLMessageStringTable::getInstance()->getString("SerialNum");
-char* _PREHASH_Duration = LLMessageStringTable::getInstance()->getString("Duration");
-char* _PREHASH_ScriptQuestion = LLMessageStringTable::getInstance()->getString("ScriptQuestion");
-char* _PREHASH_AddCircuitCode = LLMessageStringTable::getInstance()->getString("AddCircuitCode");
-char* _PREHASH_UseCircuitCode = LLMessageStringTable::getInstance()->getString("UseCircuitCode");
-char* _PREHASH_ViewerCircuitCode = LLMessageStringTable::getInstance()->getString("ViewerCircuitCode");
-char* _PREHASH_ScriptAnswerYes = LLMessageStringTable::getInstance()->getString("ScriptAnswerYes");
-char* _PREHASH_PartnerID = LLMessageStringTable::getInstance()->getString("PartnerID");
-char* _PREHASH_DirLandQuery = LLMessageStringTable::getInstance()->getString("DirLandQuery");
-char* _PREHASH_TeleportStart = LLMessageStringTable::getInstance()->getString("TeleportStart");
-char* _PREHASH_AboutText = LLMessageStringTable::getInstance()->getString("AboutText");
-char* _PREHASH_VisualParam = LLMessageStringTable::getInstance()->getString("VisualParam");
-char* _PREHASH_GroupPrims = LLMessageStringTable::getInstance()->getString("GroupPrims");
-char* _PREHASH_SelectedPrims = LLMessageStringTable::getInstance()->getString("SelectedPrims");
-char* _PREHASH_ID = LLMessageStringTable::getInstance()->getString("ID");
-char* _PREHASH_UUIDNameRequest = LLMessageStringTable::getInstance()->getString("UUIDNameRequest");
-char* _PREHASH_UUIDGroupNameRequest = LLMessageStringTable::getInstance()->getString("UUIDGroupNameRequest");
-char* _PREHASH_GroupAccountTransactionsRequest = LLMessageStringTable::getInstance()->getString("GroupAccountTransactionsRequest");
-char* _PREHASH_MapNameRequest = LLMessageStringTable::getInstance()->getString("MapNameRequest");
-char* _PREHASH_UpdateSimulator = LLMessageStringTable::getInstance()->getString("UpdateSimulator");
-char* _PREHASH_BillableFactor = LLMessageStringTable::getInstance()->getString("BillableFactor");
-char* _PREHASH_ObjectBonusFactor = LLMessageStringTable::getInstance()->getString("ObjectBonusFactor");
-char* _PREHASH_EnableSimulator = LLMessageStringTable::getInstance()->getString("EnableSimulator");
-char* _PREHASH_DisableSimulator = LLMessageStringTable::getInstance()->getString("DisableSimulator");
-char* _PREHASH_ConfirmEnableSimulator = LLMessageStringTable::getInstance()->getString("ConfirmEnableSimulator");
-char* _PREHASH_LayerType = LLMessageStringTable::getInstance()->getString("LayerType");
-char* _PREHASH_OwnerRole = LLMessageStringTable::getInstance()->getString("OwnerRole");
-char* _PREHASH_ParcelOverlay = LLMessageStringTable::getInstance()->getString("ParcelOverlay");
-char* _PREHASH_GroupOwned = LLMessageStringTable::getInstance()->getString("GroupOwned");
-char* _PREHASH_IP = LLMessageStringTable::getInstance()->getString("IP");
-char* _PREHASH_ChatFromViewer = LLMessageStringTable::getInstance()->getString("ChatFromViewer");
-char* _PREHASH_AvgAgentsInView = LLMessageStringTable::getInstance()->getString("AvgAgentsInView");
-char* _PREHASH_AgentsInView = LLMessageStringTable::getInstance()->getString("AgentsInView");
-char* _PREHASH_GroupTitle = LLMessageStringTable::getInstance()->getString("GroupTitle");
-char* _PREHASH_MapLayerReply = LLMessageStringTable::getInstance()->getString("MapLayerReply");
-char* _PREHASH_CompoundMsgID = LLMessageStringTable::getInstance()->getString("CompoundMsgID");
-char* _PREHASH_CameraConstraint = LLMessageStringTable::getInstance()->getString("CameraConstraint");
-char* _PREHASH_DownloadTotals = LLMessageStringTable::getInstance()->getString("DownloadTotals");
-char* _PREHASH_GenCounter = LLMessageStringTable::getInstance()->getString("GenCounter");
-char* _PREHASH_FrozenData = LLMessageStringTable::getInstance()->getString("FrozenData");
-char* _PREHASH_ChildAgentDying = LLMessageStringTable::getInstance()->getString("ChildAgentDying");
-char* _PREHASH_To = LLMessageStringTable::getInstance()->getString("To");
-char* _PREHASH_CopyInventoryFromNotecard = LLMessageStringTable::getInstance()->getString("CopyInventoryFromNotecard");
-char* _PREHASH_RezObjectFromNotecard = LLMessageStringTable::getInstance()->getString("RezObjectFromNotecard");
-char* _PREHASH_ParcelDirFeeCurrent = LLMessageStringTable::getInstance()->getString("ParcelDirFeeCurrent");
-char* _PREHASH_SeedCapability = LLMessageStringTable::getInstance()->getString("SeedCapability");
-char* _PREHASH_ObjectDuplicate = LLMessageStringTable::getInstance()->getString("ObjectDuplicate");
-char* _PREHASH_InventoryData = LLMessageStringTable::getInstance()->getString("InventoryData");
-char* _PREHASH_ReplyData = LLMessageStringTable::getInstance()->getString("ReplyData");
-char* _PREHASH_ResetList = LLMessageStringTable::getInstance()->getString("ResetList");
-char* _PREHASH_MediaID = LLMessageStringTable::getInstance()->getString("MediaID");
-char* _PREHASH_RelatedRights = LLMessageStringTable::getInstance()->getString("RelatedRights");
-char* _PREHASH_RedirectGridX = LLMessageStringTable::getInstance()->getString("RedirectGridX");
-char* _PREHASH_RedirectGridY = LLMessageStringTable::getInstance()->getString("RedirectGridY");
-char* _PREHASH_TransferID = LLMessageStringTable::getInstance()->getString("TransferID");
-char* _PREHASH_TexturesChanged = LLMessageStringTable::getInstance()->getString("TexturesChanged");
-char* _PREHASH_UserLookAt = LLMessageStringTable::getInstance()->getString("UserLookAt");
-char* _PREHASH_TestBlock1 = LLMessageStringTable::getInstance()->getString("TestBlock1");
-char* _PREHASH_SensedData = LLMessageStringTable::getInstance()->getString("SensedData");
-char* _PREHASH_UpdateBlock = LLMessageStringTable::getInstance()->getString("UpdateBlock");
-char* _PREHASH_ClassifiedGodDelete = LLMessageStringTable::getInstance()->getString("ClassifiedGodDelete");
-char* _PREHASH_ObjectGrabUpdate = LLMessageStringTable::getInstance()->getString("ObjectGrabUpdate");
-char* _PREHASH_LocationPos = LLMessageStringTable::getInstance()->getString("LocationPos");
-char* _PREHASH_TaxDate = LLMessageStringTable::getInstance()->getString("TaxDate");
-char* _PREHASH_StartDateTime = LLMessageStringTable::getInstance()->getString("StartDateTime");
-char* _PREHASH_ObjectUpdateCached = LLMessageStringTable::getInstance()->getString("ObjectUpdateCached");
-char* _PREHASH_Packets = LLMessageStringTable::getInstance()->getString("Packets");
-char* _PREHASH_FailureType = LLMessageStringTable::getInstance()->getString("FailureType");
-char* _PREHASH_UpdateGroupInfo = LLMessageStringTable::getInstance()->getString("UpdateGroupInfo");
-char* _PREHASH_ObjectPermissions = LLMessageStringTable::getInstance()->getString("ObjectPermissions");
-char* _PREHASH_RevokePermissions = LLMessageStringTable::getInstance()->getString("RevokePermissions");
-char* _PREHASH_UpdateFlags = LLMessageStringTable::getInstance()->getString("UpdateFlags");
-char* _PREHASH_ObjectExportSelected = LLMessageStringTable::getInstance()->getString("ObjectExportSelected");
-char* _PREHASH_RezSelected = LLMessageStringTable::getInstance()->getString("RezSelected");
-char* _PREHASH_AutoPilot = LLMessageStringTable::getInstance()->getString("AutoPilot");
-char* _PREHASH_UpdateMuteListEntry = LLMessageStringTable::getInstance()->getString("UpdateMuteListEntry");
-char* _PREHASH_RemoveMuteListEntry = LLMessageStringTable::getInstance()->getString("RemoveMuteListEntry");
-char* _PREHASH_SetSimStatusInDatabase = LLMessageStringTable::getInstance()->getString("SetSimStatusInDatabase");
-char* _PREHASH_SetSimPresenceInDatabase = LLMessageStringTable::getInstance()->getString("SetSimPresenceInDatabase");
-char* _PREHASH_CameraProperty = LLMessageStringTable::getInstance()->getString("CameraProperty");
-char* _PREHASH_BrushSize = LLMessageStringTable::getInstance()->getString("BrushSize");
-char* _PREHASH_SimulatorSetMap = LLMessageStringTable::getInstance()->getString("SimulatorSetMap");
-char* _PREHASH_RegionPresenceRequestByRegionID = LLMessageStringTable::getInstance()->getString("RegionPresenceRequestByRegionID");
-char* _PREHASH_ParcelObjectOwnersReply = LLMessageStringTable::getInstance()->getString("ParcelObjectOwnersReply");
-char* _PREHASH_GroupMembersReply = LLMessageStringTable::getInstance()->getString("GroupMembersReply");
-char* _PREHASH_GroupRoleMembersReply = LLMessageStringTable::getInstance()->getString("GroupRoleMembersReply");
-char* _PREHASH_RequestRegionInfo = LLMessageStringTable::getInstance()->getString("RequestRegionInfo");
-char* _PREHASH_AABBMax = LLMessageStringTable::getInstance()->getString("AABBMax");
-char* _PREHASH_RequestPayPrice = LLMessageStringTable::getInstance()->getString("RequestPayPrice");
-char* _PREHASH_SimulatorPresentAtLocation = LLMessageStringTable::getInstance()->getString("SimulatorPresentAtLocation");
-char* _PREHASH_AgentRequestSit = LLMessageStringTable::getInstance()->getString("AgentRequestSit");
-char* _PREHASH_AABBMin = LLMessageStringTable::getInstance()->getString("AABBMin");
-char* _PREHASH_ClassifiedFlags = LLMessageStringTable::getInstance()->getString("ClassifiedFlags");
-char* _PREHASH_ControlFlags = LLMessageStringTable::getInstance()->getString("ControlFlags");
-char* _PREHASH_TeleportRequest = LLMessageStringTable::getInstance()->getString("TeleportRequest");
-char* _PREHASH_ScriptTeleportRequest = LLMessageStringTable::getInstance()->getString("ScriptTeleportRequest");
-char* _PREHASH_EstateCovenantRequest = LLMessageStringTable::getInstance()->getString("EstateCovenantRequest");
-char* _PREHASH_DateUTC = LLMessageStringTable::getInstance()->getString("DateUTC");
-char* _PREHASH_TaskIDs = LLMessageStringTable::getInstance()->getString("TaskIDs");
-char* _PREHASH_RequestResult = LLMessageStringTable::getInstance()->getString("RequestResult");
-char* _PREHASH_CanAcceptAgents = LLMessageStringTable::getInstance()->getString("CanAcceptAgents");
-char* _PREHASH_ObjectSaleInfo = LLMessageStringTable::getInstance()->getString("ObjectSaleInfo");
-char* _PREHASH_KillChildAgents = LLMessageStringTable::getInstance()->getString("KillChildAgents");
-char* _PREHASH_Balance = LLMessageStringTable::getInstance()->getString("Balance");
-char* _PREHASH_DerezContainer = LLMessageStringTable::getInstance()->getString("DerezContainer");
-char* _PREHASH_ObjectData = LLMessageStringTable::getInstance()->getString("ObjectData");
-char* _PREHASH_CameraAtAxis = LLMessageStringTable::getInstance()->getString("CameraAtAxis");
-char* _PREHASH_InfoBlock = LLMessageStringTable::getInstance()->getString("InfoBlock");
-char* _PREHASH_OwnershipCost = LLMessageStringTable::getInstance()->getString("OwnershipCost");
-char* _PREHASH_AvatarNotesUpdate = LLMessageStringTable::getInstance()->getString("AvatarNotesUpdate");
-char* _PREHASH_PID = LLMessageStringTable::getInstance()->getString("PID");
-char* _PREHASH_DirPopularReply = LLMessageStringTable::getInstance()->getString("DirPopularReply");
-char* _PREHASH_TerrainHeightRange00 = LLMessageStringTable::getInstance()->getString("TerrainHeightRange00");
-char* _PREHASH_SimData = LLMessageStringTable::getInstance()->getString("SimData");
-char* _PREHASH_TerrainHeightRange01 = LLMessageStringTable::getInstance()->getString("TerrainHeightRange01");
-char* _PREHASH_TerrainHeightRange10 = LLMessageStringTable::getInstance()->getString("TerrainHeightRange10");
-char* _PREHASH_TerrainHeightRange11 = LLMessageStringTable::getInstance()->getString("TerrainHeightRange11");
-char* _PREHASH_UpdateInventoryItem = LLMessageStringTable::getInstance()->getString("UpdateInventoryItem");
-char* _PREHASH_UpdateCreateInventoryItem = LLMessageStringTable::getInstance()->getString("UpdateCreateInventoryItem");
-char* _PREHASH_MoveInventoryItem = LLMessageStringTable::getInstance()->getString("MoveInventoryItem");
-char* _PREHASH_CopyInventoryItem = LLMessageStringTable::getInstance()->getString("CopyInventoryItem");
-char* _PREHASH_LinkInventoryItem = LLMessageStringTable::getInstance()->getString("LinkInventoryItem");
-char* _PREHASH_RemoveInventoryItem = LLMessageStringTable::getInstance()->getString("RemoveInventoryItem");
-char* _PREHASH_CreateInventoryItem = LLMessageStringTable::getInstance()->getString("CreateInventoryItem");
-char* _PREHASH_PathTwistBegin = LLMessageStringTable::getInstance()->getString("PathTwistBegin");
-char* _PREHASH_CRC = LLMessageStringTable::getInstance()->getString("CRC");
-char* _PREHASH_AttachmentPoint = LLMessageStringTable::getInstance()->getString("AttachmentPoint");
-char* _PREHASH_TelehubBlock = LLMessageStringTable::getInstance()->getString("TelehubBlock");
-char* _PREHASH_FOVBlock = LLMessageStringTable::getInstance()->getString("FOVBlock");
-char* _PREHASH_StartLocationData = LLMessageStringTable::getInstance()->getString("StartLocationData");
-char* _PREHASH_PositionData = LLMessageStringTable::getInstance()->getString("PositionData");
-char* _PREHASH_TimeSinceLast = LLMessageStringTable::getInstance()->getString("TimeSinceLast");
-char* _PREHASH_MapImage = LLMessageStringTable::getInstance()->getString("MapImage");
-char* _PREHASH_Objects = LLMessageStringTable::getInstance()->getString("Objects");
-char* _PREHASH_URL = LLMessageStringTable::getInstance()->getString("URL");
-char* _PREHASH_CreationDate = LLMessageStringTable::getInstance()->getString("CreationDate");
-char* _PREHASH_JointPivot = LLMessageStringTable::getInstance()->getString("JointPivot");
-char* _PREHASH_FPS = LLMessageStringTable::getInstance()->getString("FPS");
-char* _PREHASH_HasTelehub = LLMessageStringTable::getInstance()->getString("HasTelehub");
-char* _PREHASH_PathEnd = LLMessageStringTable::getInstance()->getString("PathEnd");
-char* _PREHASH_ScriptDataReply = LLMessageStringTable::getInstance()->getString("ScriptDataReply");
-char* _PREHASH_MapBlockReply = LLMessageStringTable::getInstance()->getString("MapBlockReply");
-char* _PREHASH_PropertiesData = LLMessageStringTable::getInstance()->getString("PropertiesData");
-char* _PREHASH_ViewerEffect = LLMessageStringTable::getInstance()->getString("ViewerEffect");
-char* _PREHASH_FreezeUser = LLMessageStringTable::getInstance()->getString("FreezeUser");
-char* _PREHASH_OwnerPrims = LLMessageStringTable::getInstance()->getString("OwnerPrims");
-char* _PREHASH_ObjectGrab = LLMessageStringTable::getInstance()->getString("ObjectGrab");
-char* _PREHASH_ToAgentID = LLMessageStringTable::getInstance()->getString("ToAgentID");
-char* _PREHASH_SimulatorMapUpdate = LLMessageStringTable::getInstance()->getString("SimulatorMapUpdate");
-char* _PREHASH_TransferPacket = LLMessageStringTable::getInstance()->getString("TransferPacket");
-char* _PREHASH_ObjectName = LLMessageStringTable::getInstance()->getString("ObjectName");
-char* _PREHASH_GroupPowers = LLMessageStringTable::getInstance()->getString("GroupPowers");
-char* _PREHASH_OriginalName = LLMessageStringTable::getInstance()->getString("OriginalName");
-char* _PREHASH_CompletePingCheck = LLMessageStringTable::getInstance()->getString("CompletePingCheck");
-char* _PREHASH_OnlineStatus = LLMessageStringTable::getInstance()->getString("OnlineStatus");
-char* _PREHASH_ObjectDrop = LLMessageStringTable::getInstance()->getString("ObjectDrop");
-char* _PREHASH_UseBigPackets = LLMessageStringTable::getInstance()->getString("UseBigPackets");
-char* _PREHASH_GroupNoticesListReply = LLMessageStringTable::getInstance()->getString("GroupNoticesListReply");
-char* _PREHASH_ParcelAccessListReply = LLMessageStringTable::getInstance()->getString("ParcelAccessListReply");
-char* _PREHASH_RpcChannelReply = LLMessageStringTable::getInstance()->getString("RpcChannelReply");
-char* _PREHASH_RegionPresenceResponse = LLMessageStringTable::getInstance()->getString("RegionPresenceResponse");
-char* _PREHASH_CharterMember = LLMessageStringTable::getInstance()->getString("CharterMember");
-char* _PREHASH_EdgeData = LLMessageStringTable::getInstance()->getString("EdgeData");
-char* _PREHASH_NameData = LLMessageStringTable::getInstance()->getString("NameData");
-char* _PREHASH_RegionPushOverride = LLMessageStringTable::getInstance()->getString("RegionPushOverride");
-char* _PREHASH_SimName = LLMessageStringTable::getInstance()->getString("SimName");
-char* _PREHASH_UserReport = LLMessageStringTable::getInstance()->getString("UserReport");
-char* _PREHASH_DownloadPriority = LLMessageStringTable::getInstance()->getString("DownloadPriority");
-char* _PREHASH_ToAgentId = LLMessageStringTable::getInstance()->getString("ToAgentId");
-char* _PREHASH_DirPopularQuery = LLMessageStringTable::getInstance()->getString("DirPopularQuery");
-char* _PREHASH_Mag = LLMessageStringTable::getInstance()->getString("Mag");
-char* _PREHASH_ParcelPropertiesRequestByID = LLMessageStringTable::getInstance()->getString("ParcelPropertiesRequestByID");
-char* _PREHASH_ObjectLink = LLMessageStringTable::getInstance()->getString("ObjectLink");
-char* _PREHASH_RpcScriptReplyInbound = LLMessageStringTable::getInstance()->getString("RpcScriptReplyInbound");
-char* _PREHASH_RezData = LLMessageStringTable::getInstance()->getString("RezData");
-char* _PREHASH_RemoveInventoryObjects = LLMessageStringTable::getInstance()->getString("RemoveInventoryObjects");
-char* _PREHASH_GroupProposalBallot = LLMessageStringTable::getInstance()->getString("GroupProposalBallot");
-char* _PREHASH_RPCServerIP = LLMessageStringTable::getInstance()->getString("RPCServerIP");
-char* _PREHASH_Far = LLMessageStringTable::getInstance()->getString("Far");
-char* _PREHASH_GodSessionID = LLMessageStringTable::getInstance()->getString("GodSessionID");
-char* _PREHASH_FLAboutText = LLMessageStringTable::getInstance()->getString("FLAboutText");
-char* _PREHASH_RegionHandshakeReply = LLMessageStringTable::getInstance()->getString("RegionHandshakeReply");
-char* _PREHASH_GroupActiveProposalItemReply = LLMessageStringTable::getInstance()->getString("GroupActiveProposalItemReply");
-char* _PREHASH_MapItemReply = LLMessageStringTable::getInstance()->getString("MapItemReply");
-char* _PREHASH_Seconds = LLMessageStringTable::getInstance()->getString("Seconds");
-char* _PREHASH_UpdateUserInfo = LLMessageStringTable::getInstance()->getString("UpdateUserInfo");
-char* _PREHASH_AggregatePermTexturesOwner = LLMessageStringTable::getInstance()->getString("AggregatePermTexturesOwner");
-char* _PREHASH_Set = LLMessageStringTable::getInstance()->getString("Set");
-char* _PREHASH_NewName = LLMessageStringTable::getInstance()->getString("NewName");
-char* _PREHASH_Key = LLMessageStringTable::getInstance()->getString("Key");
-char* _PREHASH_AgentID = LLMessageStringTable::getInstance()->getString("AgentID");
-char* _PREHASH_EventNotificationRemoveRequest = LLMessageStringTable::getInstance()->getString("EventNotificationRemoveRequest");
-char* _PREHASH_NewFolderID = LLMessageStringTable::getInstance()->getString("NewFolderID");
-char* _PREHASH_Arc = LLMessageStringTable::getInstance()->getString("Arc");
-char* _PREHASH_RegionX = LLMessageStringTable::getInstance()->getString("RegionX");
-char* _PREHASH_RegionY = LLMessageStringTable::getInstance()->getString("RegionY");
-char* _PREHASH_RequestData = LLMessageStringTable::getInstance()->getString("RequestData");
-char* _PREHASH_Msg = LLMessageStringTable::getInstance()->getString("Msg");
-char* _PREHASH_Top = LLMessageStringTable::getInstance()->getString("Top");
-char* _PREHASH_MiscStats = LLMessageStringTable::getInstance()->getString("MiscStats");
-char* _PREHASH_ImageID = LLMessageStringTable::getInstance()->getString("ImageID");
-char* _PREHASH_DataPacket = LLMessageStringTable::getInstance()->getString("DataPacket");
-char* _PREHASH_You = LLMessageStringTable::getInstance()->getString("You");
-char* _PREHASH_ScriptControlChange = LLMessageStringTable::getInstance()->getString("ScriptControlChange");
-char* _PREHASH_LoadURL = LLMessageStringTable::getInstance()->getString("LoadURL");
-char* _PREHASH_SetCPURatio = LLMessageStringTable::getInstance()->getString("SetCPURatio");
-char* _PREHASH_NameValueData = LLMessageStringTable::getInstance()->getString("NameValueData");
-char* _PREHASH_AtomicPassObject = LLMessageStringTable::getInstance()->getString("AtomicPassObject");
-char* _PREHASH_ErrorMessage = LLMessageStringTable::getInstance()->getString("ErrorMessage");
-char* _PREHASH_ViewerFrozenMessage = LLMessageStringTable::getInstance()->getString("ViewerFrozenMessage");
-char* _PREHASH_HealthMessage = LLMessageStringTable::getInstance()->getString("HealthMessage");
-char* _PREHASH_LogTextMessage = LLMessageStringTable::getInstance()->getString("LogTextMessage");
-char* _PREHASH_TimeDilation = LLMessageStringTable::getInstance()->getString("TimeDilation");
-char* _PREHASH_RemoveContribution = LLMessageStringTable::getInstance()->getString("RemoveContribution");
-char* _PREHASH_Contribution = LLMessageStringTable::getInstance()->getString("Contribution");
-char* _PREHASH_SetGroupContribution = LLMessageStringTable::getInstance()->getString("SetGroupContribution");
-char* _PREHASH_Offline = LLMessageStringTable::getInstance()->getString("Offline");
-char* _PREHASH_AgentIsNowWearing = LLMessageStringTable::getInstance()->getString("AgentIsNowWearing");
-char* _PREHASH_Members = LLMessageStringTable::getInstance()->getString("Members");
-char* _PREHASH_FailedResends = LLMessageStringTable::getInstance()->getString("FailedResends");
-char* _PREHASH_SecPerDay = LLMessageStringTable::getInstance()->getString("SecPerDay");
-char* _PREHASH_CameraCenter = LLMessageStringTable::getInstance()->getString("CameraCenter");
-char* _PREHASH_CameraLeftAxis = LLMessageStringTable::getInstance()->getString("CameraLeftAxis");
-char* _PREHASH_ExBlock = LLMessageStringTable::getInstance()->getString("ExBlock");
-char* _PREHASH_Channel = LLMessageStringTable::getInstance()->getString("Channel");
-char* _PREHASH_NetTest = LLMessageStringTable::getInstance()->getString("NetTest");
-char* _PREHASH_DiscardLevel = LLMessageStringTable::getInstance()->getString("DiscardLevel");
-char* _PREHASH_LayerID = LLMessageStringTable::getInstance()->getString("LayerID");
-char* _PREHASH_GrabOffset = LLMessageStringTable::getInstance()->getString("GrabOffset");
-char* _PREHASH_SimPort = LLMessageStringTable::getInstance()->getString("SimPort");
-char* _PREHASH_PricePerMeter = LLMessageStringTable::getInstance()->getString("PricePerMeter");
-char* _PREHASH_RegionFlags = LLMessageStringTable::getInstance()->getString("RegionFlags");
-char* _PREHASH_VoteResult = LLMessageStringTable::getInstance()->getString("VoteResult");
-char* _PREHASH_ParcelDirFeeEstimate = LLMessageStringTable::getInstance()->getString("ParcelDirFeeEstimate");
-char* _PREHASH_ModifyBlock = LLMessageStringTable::getInstance()->getString("ModifyBlock");
-char* _PREHASH_InventoryBlock = LLMessageStringTable::getInstance()->getString("InventoryBlock");
-char* _PREHASH_ReplyBlock = LLMessageStringTable::getInstance()->getString("ReplyBlock");
-char* _PREHASH_ValidUntil = LLMessageStringTable::getInstance()->getString("ValidUntil");
-char* _PREHASH_VelocityInterpolateOn = LLMessageStringTable::getInstance()->getString("VelocityInterpolateOn");
-char* _PREHASH_ClassifiedDelete = LLMessageStringTable::getInstance()->getString("ClassifiedDelete");
-char* _PREHASH_RegionDenyAnonymous = LLMessageStringTable::getInstance()->getString("RegionDenyAnonymous");
-char* _PREHASH_FLImageID = LLMessageStringTable::getInstance()->getString("FLImageID");
-char* _PREHASH_AllowPublish = LLMessageStringTable::getInstance()->getString("AllowPublish");
-char* _PREHASH_SitName = LLMessageStringTable::getInstance()->getString("SitName");
-char* _PREHASH_RegionsVisited = LLMessageStringTable::getInstance()->getString("RegionsVisited");
-char* _PREHASH_DirClassifiedReply = LLMessageStringTable::getInstance()->getString("DirClassifiedReply");
-char* _PREHASH_AvatarClassifiedReply = LLMessageStringTable::getInstance()->getString("AvatarClassifiedReply");
-char* _PREHASH_MediaURL = LLMessageStringTable::getInstance()->getString("MediaURL");
-char* _PREHASH_CompleteAgentMovement = LLMessageStringTable::getInstance()->getString("CompleteAgentMovement");
-char* _PREHASH_ClassifiedID = LLMessageStringTable::getInstance()->getString("ClassifiedID");
-char* _PREHASH_LocalID = LLMessageStringTable::getInstance()->getString("LocalID");
-char* _PREHASH_SpaceIP = LLMessageStringTable::getInstance()->getString("SpaceIP");
-char* _PREHASH_RemoveItem = LLMessageStringTable::getInstance()->getString("RemoveItem");
-char* _PREHASH_LogFailedMoneyTransaction = LLMessageStringTable::getInstance()->getString("LogFailedMoneyTransaction");
-char* _PREHASH_ViewerStartAuction = LLMessageStringTable::getInstance()->getString("ViewerStartAuction");
-char* _PREHASH_StartAuction = LLMessageStringTable::getInstance()->getString("StartAuction");
-char* _PREHASH_DuplicateFlags = LLMessageStringTable::getInstance()->getString("DuplicateFlags");
-char* _PREHASH_RegionInfo2 = LLMessageStringTable::getInstance()->getString("RegionInfo2");
-char* _PREHASH_TextColor = LLMessageStringTable::getInstance()->getString("TextColor");
-char* _PREHASH_SlaveID = LLMessageStringTable::getInstance()->getString("SlaveID");
-char* _PREHASH_Charter = LLMessageStringTable::getInstance()->getString("Charter");
-char* _PREHASH_AlertData = LLMessageStringTable::getInstance()->getString("AlertData");
-char* _PREHASH_AlertInfo = LLMessageStringTable::getInstance()->getString("AlertInfo");
-char* _PREHASH_TargetBlock = LLMessageStringTable::getInstance()->getString("TargetBlock");
-char* _PREHASH_CheckParcelAuctions = LLMessageStringTable::getInstance()->getString("CheckParcelAuctions");
-char* _PREHASH_ParcelAuctions = LLMessageStringTable::getInstance()->getString("ParcelAuctions");
-char* _PREHASH_OwnerIsGroup = LLMessageStringTable::getInstance()->getString("OwnerIsGroup");
-char* _PREHASH_NameValuePair = LLMessageStringTable::getInstance()->getString("NameValuePair");
-char* _PREHASH_RemoveNameValuePair = LLMessageStringTable::getInstance()->getString("RemoveNameValuePair");
-char* _PREHASH_BulkUpdateInventory = LLMessageStringTable::getInstance()->getString("BulkUpdateInventory");
-char* _PREHASH_UpdateTaskInventory = LLMessageStringTable::getInstance()->getString("UpdateTaskInventory");
-char* _PREHASH_RemoveTaskInventory = LLMessageStringTable::getInstance()->getString("RemoveTaskInventory");
-char* _PREHASH_MoveTaskInventory = LLMessageStringTable::getInstance()->getString("MoveTaskInventory");
-char* _PREHASH_RequestTaskInventory = LLMessageStringTable::getInstance()->getString("RequestTaskInventory");
-char* _PREHASH_ReplyTaskInventory = LLMessageStringTable::getInstance()->getString("ReplyTaskInventory");
-char* _PREHASH_AggregatePermInventory = LLMessageStringTable::getInstance()->getString("AggregatePermInventory");
-char* _PREHASH_GroupAccountTransactionsReply = LLMessageStringTable::getInstance()->getString("GroupAccountTransactionsReply");
-char* _PREHASH_SimulatorInfo = LLMessageStringTable::getInstance()->getString("SimulatorInfo");
-char* _PREHASH_WearableData = LLMessageStringTable::getInstance()->getString("WearableData");
-char* _PREHASH_Enabled = LLMessageStringTable::getInstance()->getString("Enabled");
-char* _PREHASH_Savings = LLMessageStringTable::getInstance()->getString("Savings");
-char* _PREHASH_SimulatorLoad = LLMessageStringTable::getInstance()->getString("SimulatorLoad");
-char* _PREHASH_InternalRegionIP = LLMessageStringTable::getInstance()->getString("InternalRegionIP");
-char* _PREHASH_ExternalRegionIP = LLMessageStringTable::getInstance()->getString("ExternalRegionIP");
-char* _PREHASH_TotalPairs = LLMessageStringTable::getInstance()->getString("TotalPairs");
-char* _PREHASH_CreateGroupRequest = LLMessageStringTable::getInstance()->getString("CreateGroupRequest");
-char* _PREHASH_JoinGroupRequest = LLMessageStringTable::getInstance()->getString("JoinGroupRequest");
-char* _PREHASH_LeaveGroupRequest = LLMessageStringTable::getInstance()->getString("LeaveGroupRequest");
-char* _PREHASH_InviteGroupRequest = LLMessageStringTable::getInstance()->getString("InviteGroupRequest");
-char* _PREHASH_LiveHelpGroupRequest = LLMessageStringTable::getInstance()->getString("LiveHelpGroupRequest");
-char* _PREHASH_PriceParcelClaimFactor = LLMessageStringTable::getInstance()->getString("PriceParcelClaimFactor");
-char* _PREHASH_BillableArea = LLMessageStringTable::getInstance()->getString("BillableArea");
-char* _PREHASH_ObjectID = LLMessageStringTable::getInstance()->getString("ObjectID");
-char* _PREHASH_ObjectFlagUpdate = LLMessageStringTable::getInstance()->getString("ObjectFlagUpdate");
-char* _PREHASH_GroupRoleUpdate = LLMessageStringTable::getInstance()->getString("GroupRoleUpdate");
-char* _PREHASH_RequestInventoryAsset = LLMessageStringTable::getInstance()->getString("RequestInventoryAsset");
-char* _PREHASH_ChangedGrid = LLMessageStringTable::getInstance()->getString("ChangedGrid");
-char* _PREHASH_AgentDropGroup = LLMessageStringTable::getInstance()->getString("AgentDropGroup");
-char* _PREHASH_Details = LLMessageStringTable::getInstance()->getString("Details");
-char* _PREHASH_LocationX = LLMessageStringTable::getInstance()->getString("LocationX");
-char* _PREHASH_SaleType = LLMessageStringTable::getInstance()->getString("SaleType");
-char* _PREHASH_LocationY = LLMessageStringTable::getInstance()->getString("LocationY");
-char* _PREHASH_LocationZ = LLMessageStringTable::getInstance()->getString("LocationZ");
-char* _PREHASH_EconomyData = LLMessageStringTable::getInstance()->getString("EconomyData");
-char* _PREHASH_HeadRotation = LLMessageStringTable::getInstance()->getString("HeadRotation");
-char* _PREHASH_DeleteOnCompletion = LLMessageStringTable::getInstance()->getString("DeleteOnCompletion");
-char* _PREHASH_PublicPort = LLMessageStringTable::getInstance()->getString("PublicPort");
-char* _PREHASH_DirClassifiedQuery = LLMessageStringTable::getInstance()->getString("DirClassifiedQuery");
-char* _PREHASH_CallbackID = LLMessageStringTable::getInstance()->getString("CallbackID");
-char* _PREHASH_RequestParcelTransfer = LLMessageStringTable::getInstance()->getString("RequestParcelTransfer");
-char* _PREHASH_RoleCount = LLMessageStringTable::getInstance()->getString("RoleCount");
-char* _PREHASH_ObjectCapacity = LLMessageStringTable::getInstance()->getString("ObjectCapacity");
-char* _PREHASH_RequestID = LLMessageStringTable::getInstance()->getString("RequestID");
-char* _PREHASH_RequestXfer = LLMessageStringTable::getInstance()->getString("RequestXfer");
-char* _PREHASH_ObjectTaxCurrent = LLMessageStringTable::getInstance()->getString("ObjectTaxCurrent");
-char* _PREHASH_LightTaxCurrent = LLMessageStringTable::getInstance()->getString("LightTaxCurrent");
-char* _PREHASH_LandTaxCurrent = LLMessageStringTable::getInstance()->getString("LandTaxCurrent");
-char* _PREHASH_GroupTaxCurrent = LLMessageStringTable::getInstance()->getString("GroupTaxCurrent");
-char* _PREHASH_FetchInventoryDescendents = LLMessageStringTable::getInstance()->getString("FetchInventoryDescendents");
-char* _PREHASH_InventoryDescendents = LLMessageStringTable::getInstance()->getString("InventoryDescendents");
-char* _PREHASH_Descendents = LLMessageStringTable::getInstance()->getString("Descendents");
-char* _PREHASH_PurgeInventoryDescendents = LLMessageStringTable::getInstance()->getString("PurgeInventoryDescendents");
-char* _PREHASH_ShowDir = LLMessageStringTable::getInstance()->getString("ShowDir");
-char* _PREHASH_IsOwner = LLMessageStringTable::getInstance()->getString("IsOwner");
-char* _PREHASH_Timestamp = LLMessageStringTable::getInstance()->getString("Timestamp");
-char* _PREHASH_GlobalPos = LLMessageStringTable::getInstance()->getString("GlobalPos");
-char* _PREHASH_GrabOffsetInitial = LLMessageStringTable::getInstance()->getString("GrabOffsetInitial");
-char* _PREHASH_IsTrial = LLMessageStringTable::getInstance()->getString("IsTrial");
-char* _PREHASH_ObjectDuplicateOnRay = LLMessageStringTable::getInstance()->getString("ObjectDuplicateOnRay");
-char* _PREHASH_GroupMembershipCount = LLMessageStringTable::getInstance()->getString("GroupMembershipCount");
-char* _PREHASH_MethodData = LLMessageStringTable::getInstance()->getString("MethodData");
-char* _PREHASH_ActivateGestures = LLMessageStringTable::getInstance()->getString("ActivateGestures");
-char* _PREHASH_DeactivateGestures = LLMessageStringTable::getInstance()->getString("DeactivateGestures");
-char* _PREHASH_ProposalData = LLMessageStringTable::getInstance()->getString("ProposalData");
-char* _PREHASH_PosGlobal = LLMessageStringTable::getInstance()->getString("PosGlobal");
-char* _PREHASH_SearchID = LLMessageStringTable::getInstance()->getString("SearchID");
-char* _PREHASH_RezMultipleAttachmentsFromInv = LLMessageStringTable::getInstance()->getString("RezMultipleAttachmentsFromInv");
-char* _PREHASH_SearchName = LLMessageStringTable::getInstance()->getString("SearchName");
-char* _PREHASH_VersionString = LLMessageStringTable::getInstance()->getString("VersionString");
-char* _PREHASH_CreateGroupReply = LLMessageStringTable::getInstance()->getString("CreateGroupReply");
-char* _PREHASH_LeaveGroupReply = LLMessageStringTable::getInstance()->getString("LeaveGroupReply");
-char* _PREHASH_ActualArea = LLMessageStringTable::getInstance()->getString("ActualArea");
-char* _PREHASH_Message = LLMessageStringTable::getInstance()->getString("Message");
-char* _PREHASH_ClickAction = LLMessageStringTable::getInstance()->getString("ClickAction");
-char* _PREHASH_AssetUploadComplete = LLMessageStringTable::getInstance()->getString("AssetUploadComplete");
-char* _PREHASH_RequestType = LLMessageStringTable::getInstance()->getString("RequestType");
-char* _PREHASH_UUID = LLMessageStringTable::getInstance()->getString("UUID");
-char* _PREHASH_BaseMask = LLMessageStringTable::getInstance()->getString("BaseMask");
-char* _PREHASH_NetBlock = LLMessageStringTable::getInstance()->getString("NetBlock");
-char* _PREHASH_GlobalX = LLMessageStringTable::getInstance()->getString("GlobalX");
-char* _PREHASH_GlobalY = LLMessageStringTable::getInstance()->getString("GlobalY");
-char* _PREHASH_CopyRotates = LLMessageStringTable::getInstance()->getString("CopyRotates");
-char* _PREHASH_KickUserAck = LLMessageStringTable::getInstance()->getString("KickUserAck");
-char* _PREHASH_TopPick = LLMessageStringTable::getInstance()->getString("TopPick"); 	//legacy var  need to be deleted -angela
-char* _PREHASH_SessionID = LLMessageStringTable::getInstance()->getString("SessionID");
-char* _PREHASH_GlobalZ = LLMessageStringTable::getInstance()->getString("GlobalZ");
-char* _PREHASH_DeclineFriendship = LLMessageStringTable::getInstance()->getString("DeclineFriendship");
-char* _PREHASH_FormFriendship = LLMessageStringTable::getInstance()->getString("FormFriendship");
-char* _PREHASH_TerminateFriendship = LLMessageStringTable::getInstance()->getString("TerminateFriendship");
-char* _PREHASH_TaskData = LLMessageStringTable::getInstance()->getString("TaskData");
-char* _PREHASH_SimWideMaxPrims = LLMessageStringTable::getInstance()->getString("SimWideMaxPrims");
-char* _PREHASH_TotalPrims = LLMessageStringTable::getInstance()->getString("TotalPrims");
-char* _PREHASH_ProfileBegin = LLMessageStringTable::getInstance()->getString("ProfileBegin");
-char* _PREHASH_Request = LLMessageStringTable::getInstance()->getString("Request");
-char* _PREHASH_GroupAccountDetailsRequest = LLMessageStringTable::getInstance()->getString("GroupAccountDetailsRequest");
-char* _PREHASH_GroupActiveProposalsRequest = LLMessageStringTable::getInstance()->getString("GroupActiveProposalsRequest");
-char* _PREHASH_StringValue = LLMessageStringTable::getInstance()->getString("StringValue");
-char* _PREHASH_Version = LLMessageStringTable::getInstance()->getString("Version");
-char* _PREHASH_OtherCount = LLMessageStringTable::getInstance()->getString("OtherCount");
-char* _PREHASH_MemberCount = LLMessageStringTable::getInstance()->getString("MemberCount");
-char* _PREHASH_ChatData = LLMessageStringTable::getInstance()->getString("ChatData");
-char* _PREHASH_IsGroupOwned = LLMessageStringTable::getInstance()->getString("IsGroupOwned");
-char* _PREHASH_EnergyEfficiency = LLMessageStringTable::getInstance()->getString("EnergyEfficiency");
-char* _PREHASH_PickInfoUpdate = LLMessageStringTable::getInstance()->getString("PickInfoUpdate");
-char* _PREHASH_PickDelete = LLMessageStringTable::getInstance()->getString("PickDelete");
-char* _PREHASH_ScriptReset = LLMessageStringTable::getInstance()->getString("ScriptReset");
-char* _PREHASH_Requester = LLMessageStringTable::getInstance()->getString("Requester");
-char* _PREHASH_ForSale = LLMessageStringTable::getInstance()->getString("ForSale");
-char* _PREHASH_NearestLandingRegionReply = LLMessageStringTable::getInstance()->getString("NearestLandingRegionReply");
-char* _PREHASH_ParcelID = LLMessageStringTable::getInstance()->getString("ParcelID");
-char* _PREHASH_Godlike = LLMessageStringTable::getInstance()->getString("Godlike");
-char* _PREHASH_TotalDebits = LLMessageStringTable::getInstance()->getString("TotalDebits");
-char* _PREHASH_Direction = LLMessageStringTable::getInstance()->getString("Direction");
-char* _PREHASH_HealthData = LLMessageStringTable::getInstance()->getString("HealthData");
-char* _PREHASH_LeftAxis = LLMessageStringTable::getInstance()->getString("LeftAxis");
-char* _PREHASH_LocationBlock = LLMessageStringTable::getInstance()->getString("LocationBlock");
-char* _PREHASH_ObjectImage = LLMessageStringTable::getInstance()->getString("ObjectImage");
-char* _PREHASH_TerrainStartHeight00 = LLMessageStringTable::getInstance()->getString("TerrainStartHeight00");
-char* _PREHASH_TerrainStartHeight01 = LLMessageStringTable::getInstance()->getString("TerrainStartHeight01");
-char* _PREHASH_TerrainStartHeight10 = LLMessageStringTable::getInstance()->getString("TerrainStartHeight10");
-char* _PREHASH_TerrainStartHeight11 = LLMessageStringTable::getInstance()->getString("TerrainStartHeight11");
-char* _PREHASH_WaterHeight = LLMessageStringTable::getInstance()->getString("WaterHeight");
-char* _PREHASH_FetchInventoryReply = LLMessageStringTable::getInstance()->getString("FetchInventoryReply");
-char* _PREHASH_GroupAccountSummaryReply = LLMessageStringTable::getInstance()->getString("GroupAccountSummaryReply");
-char* _PREHASH_AttachedSound = LLMessageStringTable::getInstance()->getString("AttachedSound");
-char* _PREHASH_ParamInUse = LLMessageStringTable::getInstance()->getString("ParamInUse");
-char* _PREHASH_GodKickUser = LLMessageStringTable::getInstance()->getString("GodKickUser");
-char* _PREHASH_PickName = LLMessageStringTable::getInstance()->getString("PickName");
-char* _PREHASH_TaskName = LLMessageStringTable::getInstance()->getString("TaskName");
-char* _PREHASH_ObjectCount = LLMessageStringTable::getInstance()->getString("ObjectCount");
-char* _PREHASH_RegionPresenceRequestByHandle = LLMessageStringTable::getInstance()->getString("RegionPresenceRequestByHandle");
-char* _PREHASH_RezSingleAttachmentFromInv = LLMessageStringTable::getInstance()->getString("RezSingleAttachmentFromInv");
-char* _PREHASH_ChildAgentUpdate = LLMessageStringTable::getInstance()->getString("ChildAgentUpdate");
-char* _PREHASH_IsOwnerGroup = LLMessageStringTable::getInstance()->getString("IsOwnerGroup");
-char* _PREHASH_AgentHeightWidth = LLMessageStringTable::getInstance()->getString("AgentHeightWidth");
-char* _PREHASH_VerticalAngle = LLMessageStringTable::getInstance()->getString("VerticalAngle");
-char* _PREHASH_WearableType = LLMessageStringTable::getInstance()->getString("WearableType");
-char* _PREHASH_AggregatePermNextOwner = LLMessageStringTable::getInstance()->getString("AggregatePermNextOwner");
-char* _PREHASH_ShowInList = LLMessageStringTable::getInstance()->getString("ShowInList");
-char* _PREHASH_UpdateParcel = LLMessageStringTable::getInstance()->getString("UpdateParcel");
-char* _PREHASH_SetAlwaysRun = LLMessageStringTable::getInstance()->getString("SetAlwaysRun");
-char* _PREHASH_NVPair = LLMessageStringTable::getInstance()->getString("NVPair");
-char* _PREHASH_SearchType = LLMessageStringTable::getInstance()->getString("SearchType");
-char* _PREHASH_ObjectSpinStart = LLMessageStringTable::getInstance()->getString("ObjectSpinStart");
-char* _PREHASH_UseEstateSun = LLMessageStringTable::getInstance()->getString("UseEstateSun");
-char* _PREHASH_RegionID = LLMessageStringTable::getInstance()->getString("RegionID");
-char* _PREHASH_AbuseRegionID = LLMessageStringTable::getInstance()->getString("AbuseRegionID");
-char* _PREHASH_Creator = LLMessageStringTable::getInstance()->getString("Creator");
-char* _PREHASH_ProposalText = LLMessageStringTable::getInstance()->getString("ProposalText");
-char* _PREHASH_DirEventsReply = LLMessageStringTable::getInstance()->getString("DirEventsReply");
-char* _PREHASH_EventInfoReply = LLMessageStringTable::getInstance()->getString("EventInfoReply");
-char* _PREHASH_UserInfoReply = LLMessageStringTable::getInstance()->getString("UserInfoReply");
-char* _PREHASH_PathRadiusOffset = LLMessageStringTable::getInstance()->getString("PathRadiusOffset");
-char* _PREHASH_TextureData = LLMessageStringTable::getInstance()->getString("TextureData");
-char* _PREHASH_ChatPass = LLMessageStringTable::getInstance()->getString("ChatPass");
-char* _PREHASH_TargetID = LLMessageStringTable::getInstance()->getString("TargetID");
-char* _PREHASH_DefaultPayPrice = LLMessageStringTable::getInstance()->getString("DefaultPayPrice");
-char* _PREHASH_UserLocation = LLMessageStringTable::getInstance()->getString("UserLocation");
-char* _PREHASH_MaxPrims = LLMessageStringTable::getInstance()->getString("MaxPrims");
-char* _PREHASH_LandmarkID = LLMessageStringTable::getInstance()->getString("LandmarkID");
-char* _PREHASH_InitiateDownload = LLMessageStringTable::getInstance()->getString("InitiateDownload");
-char* _PREHASH_Name = LLMessageStringTable::getInstance()->getString("Name");
-char* _PREHASH_OtherCleanTime = LLMessageStringTable::getInstance()->getString("OtherCleanTime");
-char* _PREHASH_ParcelSetOtherCleanTime = LLMessageStringTable::getInstance()->getString("ParcelSetOtherCleanTime");
-char* _PREHASH_TeleportPriceExponent = LLMessageStringTable::getInstance()->getString("TeleportPriceExponent");
-char* _PREHASH_Gain = LLMessageStringTable::getInstance()->getString("Gain");
-char* _PREHASH_PacketAck = LLMessageStringTable::getInstance()->getString("PacketAck");
-char* _PREHASH_PathSkew = LLMessageStringTable::getInstance()->getString("PathSkew");
-char* _PREHASH_SimulatorShutdownRequest = LLMessageStringTable::getInstance()->getString("SimulatorShutdownRequest");
-char* _PREHASH_NearestLandingRegionRequest = LLMessageStringTable::getInstance()->getString("NearestLandingRegionRequest");
-char* _PREHASH_OtherID = LLMessageStringTable::getInstance()->getString("OtherID");
-char* _PREHASH_MemberID = LLMessageStringTable::getInstance()->getString("MemberID");
-char* _PREHASH_MapLayerRequest = LLMessageStringTable::getInstance()->getString("MapLayerRequest");
-char* _PREHASH_ObjectScale = LLMessageStringTable::getInstance()->getString("ObjectScale");
-char* _PREHASH_TargetIP = LLMessageStringTable::getInstance()->getString("TargetIP");
-char* _PREHASH_Redo = LLMessageStringTable::getInstance()->getString("Redo");
-char* _PREHASH_MoneyBalance = LLMessageStringTable::getInstance()->getString("MoneyBalance");
-char* _PREHASH_TrackAgent = LLMessageStringTable::getInstance()->getString("TrackAgent");
-char* _PREHASH_MaxX = LLMessageStringTable::getInstance()->getString("MaxX");
-char* _PREHASH_Data = LLMessageStringTable::getInstance()->getString("Data");
-char* _PREHASH_MaxY = LLMessageStringTable::getInstance()->getString("MaxY");
-char* _PREHASH_TextureAnim = LLMessageStringTable::getInstance()->getString("TextureAnim");
-char* _PREHASH_ReturnIDs = LLMessageStringTable::getInstance()->getString("ReturnIDs");
-char* _PREHASH_Date = LLMessageStringTable::getInstance()->getString("Date");
-char* _PREHASH_AgentWearablesUpdate = LLMessageStringTable::getInstance()->getString("AgentWearablesUpdate");
-char* _PREHASH_AgentDataUpdate = LLMessageStringTable::getInstance()->getString("AgentDataUpdate");
-char* _PREHASH_GroupDataUpdate = LLMessageStringTable::getInstance()->getString("GroupDataUpdate");
-char* _PREHASH_Hash = LLMessageStringTable::getInstance()->getString("Hash");
-char* _PREHASH_AgentGroupDataUpdate = LLMessageStringTable::getInstance()->getString("AgentGroupDataUpdate");
-char* _PREHASH_Left = LLMessageStringTable::getInstance()->getString("Left");
-char* _PREHASH_Mask = LLMessageStringTable::getInstance()->getString("Mask");
-char* _PREHASH_ForceMouselook = LLMessageStringTable::getInstance()->getString("ForceMouselook");
-char* _PREHASH_Success = LLMessageStringTable::getInstance()->getString("Success");
-char* _PREHASH_ObjectGroup = LLMessageStringTable::getInstance()->getString("ObjectGroup");
-char* _PREHASH_SunHour = LLMessageStringTable::getInstance()->getString("SunHour");
-char* _PREHASH_MinX = LLMessageStringTable::getInstance()->getString("MinX");
-char* _PREHASH_ScriptSensorReply = LLMessageStringTable::getInstance()->getString("ScriptSensorReply");
-char* _PREHASH_MinY = LLMessageStringTable::getInstance()->getString("MinY");
-char* _PREHASH_Command = LLMessageStringTable::getInstance()->getString("Command");
-char* _PREHASH_Desc = LLMessageStringTable::getInstance()->getString("Desc");
-char* _PREHASH_AttachmentNeedsSave = LLMessageStringTable::getInstance()->getString("AttachmentNeedsSave");
-char* _PREHASH_HistoryItemData = LLMessageStringTable::getInstance()->getString("HistoryItemData");
-char* _PREHASH_AgentCachedTexture = LLMessageStringTable::getInstance()->getString("AgentCachedTexture");
-char* _PREHASH_Subject = LLMessageStringTable::getInstance()->getString("Subject");
-char* _PREHASH_East = LLMessageStringTable::getInstance()->getString("East");
-char* _PREHASH_QueryReplies = LLMessageStringTable::getInstance()->getString("QueryReplies");
-char* _PREHASH_ObjectCategory = LLMessageStringTable::getInstance()->getString("ObjectCategory");
-char* _PREHASH_Time = LLMessageStringTable::getInstance()->getString("Time");
-char* _PREHASH_CreateLandmarkForEvent = LLMessageStringTable::getInstance()->getString("CreateLandmarkForEvent");
-char* _PREHASH_ParentID = LLMessageStringTable::getInstance()->getString("ParentID");
-char* _PREHASH_Ping = LLMessageStringTable::getInstance()->getString("Ping");
-char* _PREHASH_Perp = LLMessageStringTable::getInstance()->getString("Perp");
-char* _PREHASH_Code = LLMessageStringTable::getInstance()->getString("Code");
-char* _PREHASH_InvType = LLMessageStringTable::getInstance()->getString("InvType");
-char* _PREHASH_AgentFOV = LLMessageStringTable::getInstance()->getString("AgentFOV");
-char* _PREHASH_Audible = LLMessageStringTable::getInstance()->getString("Audible");
-char* _PREHASH_AuctionData = LLMessageStringTable::getInstance()->getString("AuctionData");
-char* _PREHASH_IDBlock = LLMessageStringTable::getInstance()->getString("IDBlock");
-char* _PREHASH_West = LLMessageStringTable::getInstance()->getString("West");
-char* _PREHASH_Undo = LLMessageStringTable::getInstance()->getString("Undo");
-char* _PREHASH_TotalNumItems = LLMessageStringTable::getInstance()->getString("TotalNumItems");
-char* _PREHASH_Info = LLMessageStringTable::getInstance()->getString("Info");
-char* _PREHASH_Area = LLMessageStringTable::getInstance()->getString("Area");
-char* _PREHASH_SimCrashed = LLMessageStringTable::getInstance()->getString("SimCrashed");
-char* _PREHASH_Text = LLMessageStringTable::getInstance()->getString("Text");
-char* _PREHASH_PriceGroupCreate = LLMessageStringTable::getInstance()->getString("PriceGroupCreate");
-char* _PREHASH_ObjectShape = LLMessageStringTable::getInstance()->getString("ObjectShape");
-char* _PREHASH_GroupRoleDataReply = LLMessageStringTable::getInstance()->getString("GroupRoleDataReply");
-char* _PREHASH_MuteCRC = LLMessageStringTable::getInstance()->getString("MuteCRC");
-char* _PREHASH_Size = LLMessageStringTable::getInstance()->getString("Size");
-char* _PREHASH_FromAddress = LLMessageStringTable::getInstance()->getString("FromAddress");
-char* _PREHASH_Body = LLMessageStringTable::getInstance()->getString("Body");
-char* _PREHASH_FileData = LLMessageStringTable::getInstance()->getString("FileData");
-char* _PREHASH_List = LLMessageStringTable::getInstance()->getString("List");
-char* _PREHASH_KickUser = LLMessageStringTable::getInstance()->getString("KickUser");
-char* _PREHASH_OtherPrims = LLMessageStringTable::getInstance()->getString("OtherPrims");
-char* _PREHASH_RunTime = LLMessageStringTable::getInstance()->getString("RunTime");
-char* _PREHASH_GrantUserRights = LLMessageStringTable::getInstance()->getString("GrantUserRights");
-char* _PREHASH_RpcScriptRequestInboundForward = LLMessageStringTable::getInstance()->getString("RpcScriptRequestInboundForward");
-char* _PREHASH_More = LLMessageStringTable::getInstance()->getString("More");
-char* _PREHASH_Majority = LLMessageStringTable::getInstance()->getString("Majority");
-char* _PREHASH_MetersTraveled = LLMessageStringTable::getInstance()->getString("MetersTraveled");
-char* _PREHASH_Stat = LLMessageStringTable::getInstance()->getString("Stat");
-char* _PREHASH_SoundID = LLMessageStringTable::getInstance()->getString("SoundID");
-char* _PREHASH_Item = LLMessageStringTable::getInstance()->getString("Item");
-char* _PREHASH_User = LLMessageStringTable::getInstance()->getString("User");
-char* _PREHASH_Prey = LLMessageStringTable::getInstance()->getString("Prey");
-char* _PREHASH_RayStart = LLMessageStringTable::getInstance()->getString("RayStart");
-char* _PREHASH_UsecSinceStart = LLMessageStringTable::getInstance()->getString("UsecSinceStart");
-char* _PREHASH_ParcelData = LLMessageStringTable::getInstance()->getString("ParcelData");
-char* _PREHASH_CameraUpAxis = LLMessageStringTable::getInstance()->getString("CameraUpAxis");
-char* _PREHASH_ScriptDialog = LLMessageStringTable::getInstance()->getString("ScriptDialog");
-char* _PREHASH_MasterParcelData = LLMessageStringTable::getInstance()->getString("MasterParcelData");
-char* _PREHASH_Invalid = LLMessageStringTable::getInstance()->getString("Invalid");
-char* _PREHASH_ProfileCurve = LLMessageStringTable::getInstance()->getString("ProfileCurve");
-char* _PREHASH_ParcelAccessListUpdate = LLMessageStringTable::getInstance()->getString("ParcelAccessListUpdate");
-char* _PREHASH_MuteListUpdate = LLMessageStringTable::getInstance()->getString("MuteListUpdate");
-char* _PREHASH_SendPacket = LLMessageStringTable::getInstance()->getString("SendPacket");
-char* _PREHASH_SendXferPacket = LLMessageStringTable::getInstance()->getString("SendXferPacket");
-char* _PREHASH_RegionDenyIdentified = LLMessageStringTable::getInstance()->getString("RegionDenyIdentified");
-char* _PREHASH_NotecardItemID = LLMessageStringTable::getInstance()->getString("NotecardItemID");
-char* _PREHASH_LastName = LLMessageStringTable::getInstance()->getString("LastName");
-char* _PREHASH_From = LLMessageStringTable::getInstance()->getString("From");
-char* _PREHASH_RoleChange = LLMessageStringTable::getInstance()->getString("RoleChange");
-char* _PREHASH_Port = LLMessageStringTable::getInstance()->getString("Port");
-char* _PREHASH_MemberTitle = LLMessageStringTable::getInstance()->getString("MemberTitle");
-char* _PREHASH_LogParcelChanges = LLMessageStringTable::getInstance()->getString("LogParcelChanges");
-char* _PREHASH_AgentCachedTextureResponse = LLMessageStringTable::getInstance()->getString("AgentCachedTextureResponse");
-char* _PREHASH_DeRezObject = LLMessageStringTable::getInstance()->getString("DeRezObject");
-char* _PREHASH_IsTemporary = LLMessageStringTable::getInstance()->getString("IsTemporary");
-char* _PREHASH_InsigniaID = LLMessageStringTable::getInstance()->getString("InsigniaID");
-char* _PREHASH_CheckFlags = LLMessageStringTable::getInstance()->getString("CheckFlags");
-char* _PREHASH_EventID = LLMessageStringTable::getInstance()->getString("EventID");
-char* _PREHASH_Selected = LLMessageStringTable::getInstance()->getString("Selected");
-char* _PREHASH_FromAgentId = LLMessageStringTable::getInstance()->getString("FromAgentId");
-char* _PREHASH_Type = LLMessageStringTable::getInstance()->getString("Type");
-char* _PREHASH_ChatType = LLMessageStringTable::getInstance()->getString("ChatType");
-char* _PREHASH_ReportData = LLMessageStringTable::getInstance()->getString("ReportData");
-char* _PREHASH_RequestBlock = LLMessageStringTable::getInstance()->getString("RequestBlock");
-char* _PREHASH_GrantData = LLMessageStringTable::getInstance()->getString("GrantData");
-char* _PREHASH_DetachAttachmentIntoInv = LLMessageStringTable::getInstance()->getString("DetachAttachmentIntoInv");
-char* _PREHASH_ParcelDisableObjects = LLMessageStringTable::getInstance()->getString("ParcelDisableObjects");
-char* _PREHASH_Sections = LLMessageStringTable::getInstance()->getString("Sections");
-char* _PREHASH_GodLevel = LLMessageStringTable::getInstance()->getString("GodLevel");
-char* _PREHASH_PayPriceReply = LLMessageStringTable::getInstance()->getString("PayPriceReply");
-char* _PREHASH_QueryID = LLMessageStringTable::getInstance()->getString("QueryID");
-char* _PREHASH_CameraEyeOffset = LLMessageStringTable::getInstance()->getString("CameraEyeOffset");
-char* _PREHASH_AgentPosition = LLMessageStringTable::getInstance()->getString("AgentPosition");
-char* _PREHASH_GrabPosition = LLMessageStringTable::getInstance()->getString("GrabPosition");
-char* _PREHASH_OnlineNotification = LLMessageStringTable::getInstance()->getString("OnlineNotification");
-char* _PREHASH_OfflineNotification = LLMessageStringTable::getInstance()->getString("OfflineNotification");
-char* _PREHASH_SendPostcard = LLMessageStringTable::getInstance()->getString("SendPostcard");
-char* _PREHASH_RequestFlags = LLMessageStringTable::getInstance()->getString("RequestFlags");
-char* _PREHASH_GroupAccountSummaryRequest = LLMessageStringTable::getInstance()->getString("GroupAccountSummaryRequest");
-char* _PREHASH_GroupVoteHistoryRequest = LLMessageStringTable::getInstance()->getString("GroupVoteHistoryRequest");
-char* _PREHASH_ParamValue = LLMessageStringTable::getInstance()->getString("ParamValue");
-char* _PREHASH_MaxAgents = LLMessageStringTable::getInstance()->getString("MaxAgents");
-char* _PREHASH_CreateNewOutfitAttachments = LLMessageStringTable::getInstance()->getString("CreateNewOutfitAttachments");
-char* _PREHASH_RegionHandle = LLMessageStringTable::getInstance()->getString("RegionHandle");
-char* _PREHASH_TeleportProgress = LLMessageStringTable::getInstance()->getString("TeleportProgress");
-char* _PREHASH_AgentQuitCopy = LLMessageStringTable::getInstance()->getString("AgentQuitCopy");
-char* _PREHASH_AvatarInterestsUpdate = LLMessageStringTable::getInstance()->getString("AvatarInterestsUpdate");
-char* _PREHASH_GroupNoticeID = LLMessageStringTable::getInstance()->getString("GroupNoticeID");
-char* _PREHASH_ParcelName = LLMessageStringTable::getInstance()->getString("ParcelName");
-char* _PREHASH_PriceObjectRent = LLMessageStringTable::getInstance()->getString("PriceObjectRent");
-char* _PREHASH_OfferCallingCard = LLMessageStringTable::getInstance()->getString("OfferCallingCard");
-char* _PREHASH_AcceptCallingCard = LLMessageStringTable::getInstance()->getString("AcceptCallingCard");
-char* _PREHASH_DeclineCallingCard = LLMessageStringTable::getInstance()->getString("DeclineCallingCard");
-char* _PREHASH_AgentAccess = LLMessageStringTable::getInstance()->getString("AgentAccess");
-char* _PREHASH_AgentLegacyAccess = LLMessageStringTable::getInstance()->getString("AgentLegacyAccess");
-char* _PREHASH_AgentMaxAccess = LLMessageStringTable::getInstance()->getString("AgentMaxAccess");
-char* _PREHASH_DataHomeLocationReply = LLMessageStringTable::getInstance()->getString("DataHomeLocationReply");
-char* _PREHASH_EventLocationReply = LLMessageStringTable::getInstance()->getString("EventLocationReply");
-char* _PREHASH_TerseDateID = LLMessageStringTable::getInstance()->getString("TerseDateID");
-char* _PREHASH_ObjectOwner = LLMessageStringTable::getInstance()->getString("ObjectOwner");
-char* _PREHASH_AssetID = LLMessageStringTable::getInstance()->getString("AssetID");
-char* _PREHASH_AlertMessage = LLMessageStringTable::getInstance()->getString("AlertMessage");
-char* _PREHASH_AgentAlertMessage = LLMessageStringTable::getInstance()->getString("AgentAlertMessage");
-char* _PREHASH_EstateOwnerMessage = LLMessageStringTable::getInstance()->getString("EstateOwnerMessage");
-char* _PREHASH_ParcelMediaCommandMessage = LLMessageStringTable::getInstance()->getString("ParcelMediaCommandMessage");
-char* _PREHASH_Auction = LLMessageStringTable::getInstance()->getString("Auction");
-char* _PREHASH_Category = LLMessageStringTable::getInstance()->getString("Category");
-char* _PREHASH_FilePath = LLMessageStringTable::getInstance()->getString("FilePath");
-char* _PREHASH_ItemFlags = LLMessageStringTable::getInstance()->getString("ItemFlags");
-char* _PREHASH_Invoice = LLMessageStringTable::getInstance()->getString("Invoice");
-char* _PREHASH_IntervalDays = LLMessageStringTable::getInstance()->getString("IntervalDays");
-char* _PREHASH_PathScaleX = LLMessageStringTable::getInstance()->getString("PathScaleX");
-char* _PREHASH_FromTaskID = LLMessageStringTable::getInstance()->getString("FromTaskID");
-char* _PREHASH_PathScaleY = LLMessageStringTable::getInstance()->getString("PathScaleY");
-char* _PREHASH_TimeInfo = LLMessageStringTable::getInstance()->getString("TimeInfo");
-char* _PREHASH_PublicCount = LLMessageStringTable::getInstance()->getString("PublicCount");
-char* _PREHASH_ParcelJoin = LLMessageStringTable::getInstance()->getString("ParcelJoin");
-char* _PREHASH_GroupRolesCount = LLMessageStringTable::getInstance()->getString("GroupRolesCount");
-char* _PREHASH_SimulatorBlock = LLMessageStringTable::getInstance()->getString("SimulatorBlock");
-char* _PREHASH_GroupID = LLMessageStringTable::getInstance()->getString("GroupID");
-char* _PREHASH_AgentVel = LLMessageStringTable::getInstance()->getString("AgentVel");
-char* _PREHASH_RequestImage = LLMessageStringTable::getInstance()->getString("RequestImage");
-char* _PREHASH_NetStats = LLMessageStringTable::getInstance()->getString("NetStats");
-char* _PREHASH_AgentPos = LLMessageStringTable::getInstance()->getString("AgentPos");
-char* _PREHASH_AgentSit = LLMessageStringTable::getInstance()->getString("AgentSit");
-char* _PREHASH_Material = LLMessageStringTable::getInstance()->getString("Material");
-char* _PREHASH_ObjectDeGrab = LLMessageStringTable::getInstance()->getString("ObjectDeGrab");
-char* _PREHASH_VelocityInterpolateOff = LLMessageStringTable::getInstance()->getString("VelocityInterpolateOff");
-char* _PREHASH_AuthorizedBuyerID = LLMessageStringTable::getInstance()->getString("AuthorizedBuyerID");
-char* _PREHASH_AvatarPropertiesReply = LLMessageStringTable::getInstance()->getString("AvatarPropertiesReply");
-char* _PREHASH_GroupProfileReply = LLMessageStringTable::getInstance()->getString("GroupProfileReply");
-char* _PREHASH_SimOwner = LLMessageStringTable::getInstance()->getString("SimOwner");
-char* _PREHASH_SalePrice = LLMessageStringTable::getInstance()->getString("SalePrice");
-char* _PREHASH_Animation = LLMessageStringTable::getInstance()->getString("Animation");
-char* _PREHASH_OwnerID = LLMessageStringTable::getInstance()->getString("OwnerID");
-char* _PREHASH_NearestLandingRegionUpdated = LLMessageStringTable::getInstance()->getString("NearestLandingRegionUpdated");
-char* _PREHASH_PassToAgent = LLMessageStringTable::getInstance()->getString("PassToAgent");
-char* _PREHASH_PreyAgent = LLMessageStringTable::getInstance()->getString("PreyAgent");
-char* _PREHASH_SimStats = LLMessageStringTable::getInstance()->getString("SimStats");
-char* _PREHASH_LogoutReply = LLMessageStringTable::getInstance()->getString("LogoutReply");
-char* _PREHASH_FeatureDisabled = LLMessageStringTable::getInstance()->getString("FeatureDisabled");
-char* _PREHASH_PhysicalAvatarEventList = LLMessageStringTable::getInstance()->getString("PhysicalAvatarEventList");
-char* _PREHASH_ObjectLocalID = LLMessageStringTable::getInstance()->getString("ObjectLocalID");
-char* _PREHASH_Dropped = LLMessageStringTable::getInstance()->getString("Dropped");
-char* _PREHASH_WebProfilesDisabled = LLMessageStringTable::getInstance()->getString("WebProfilesDisabled");
-char* _PREHASH_Destination = LLMessageStringTable::getInstance()->getString("Destination");
-char* _PREHASH_MasterID = LLMessageStringTable::getInstance()->getString("MasterID");
-char* _PREHASH_TransferData = LLMessageStringTable::getInstance()->getString("TransferData");
-char* _PREHASH_WantToMask = LLMessageStringTable::getInstance()->getString("WantToMask");
-char* _PREHASH_ParcelSelectObjects = LLMessageStringTable::getInstance()->getString("ParcelSelectObjects");
-char* _PREHASH_ExtraParams = LLMessageStringTable::getInstance()->getString("ExtraParams");
-char* _PREHASH_CreatorID = LLMessageStringTable::getInstance()->getString("CreatorID");
-char* _PREHASH_Summary = LLMessageStringTable::getInstance()->getString("Summary");
-char* _PREHASH_BuyObjectInventory = LLMessageStringTable::getInstance()->getString("BuyObjectInventory");
-char* _PREHASH_FetchInventory = LLMessageStringTable::getInstance()->getString("FetchInventory");
-char* _PREHASH_InventoryID = LLMessageStringTable::getInstance()->getString("InventoryID");
-char* _PREHASH_PacketNumber = LLMessageStringTable::getInstance()->getString("PacketNumber");
-char* _PREHASH_SetFollowCamProperties = LLMessageStringTable::getInstance()->getString("SetFollowCamProperties");
-char* _PREHASH_ClearFollowCamProperties = LLMessageStringTable::getInstance()->getString("ClearFollowCamProperties");
-char* _PREHASH_SequenceID = LLMessageStringTable::getInstance()->getString("SequenceID");
-char* _PREHASH_DataServerLogout = LLMessageStringTable::getInstance()->getString("DataServerLogout");
-char* _PREHASH_NameValue = LLMessageStringTable::getInstance()->getString("NameValue");
-char* _PREHASH_PathShearX = LLMessageStringTable::getInstance()->getString("PathShearX");
-char* _PREHASH_PathShearY = LLMessageStringTable::getInstance()->getString("PathShearY");
-char* _PREHASH_Velocity = LLMessageStringTable::getInstance()->getString("Velocity");
-char* _PREHASH_SecPerYear = LLMessageStringTable::getInstance()->getString("SecPerYear");
-char* _PREHASH_FirstName = LLMessageStringTable::getInstance()->getString("FirstName");
-char* _PREHASH_AttachedSoundGainChange = LLMessageStringTable::getInstance()->getString("AttachedSoundGainChange");
-char* _PREHASH_LocationID = LLMessageStringTable::getInstance()->getString("LocationID");
-char* _PREHASH_Running = LLMessageStringTable::getInstance()->getString("Running");
-char* _PREHASH_AgentThrottle = LLMessageStringTable::getInstance()->getString("AgentThrottle");
-char* _PREHASH_NeighborList = LLMessageStringTable::getInstance()->getString("NeighborList");
-char* _PREHASH_PathTaperX = LLMessageStringTable::getInstance()->getString("PathTaperX");
-char* _PREHASH_PathTaperY = LLMessageStringTable::getInstance()->getString("PathTaperY");
-char* _PREHASH_AgentRelated = LLMessageStringTable::getInstance()->getString("AgentRelated");
-char* _PREHASH_GranterBlock = LLMessageStringTable::getInstance()->getString("GranterBlock");
-char* _PREHASH_UseCachedMuteList = LLMessageStringTable::getInstance()->getString("UseCachedMuteList");
-char* _PREHASH_FailStats = LLMessageStringTable::getInstance()->getString("FailStats");
-char* _PREHASH_Tempfile = LLMessageStringTable::getInstance()->getString("Tempfile");
-char* _PREHASH_BuyerID = LLMessageStringTable::getInstance()->getString("BuyerID");
-char* _PREHASH_DirPeopleReply = LLMessageStringTable::getInstance()->getString("DirPeopleReply");
-char* _PREHASH_TransferInfo = LLMessageStringTable::getInstance()->getString("TransferInfo");
-char* _PREHASH_AvatarPickerRequestBackend = LLMessageStringTable::getInstance()->getString("AvatarPickerRequestBackend");
-char* _PREHASH_AvatarPropertiesRequestBackend = LLMessageStringTable::getInstance()->getString("AvatarPropertiesRequestBackend");
-char* _PREHASH_UpdateData = LLMessageStringTable::getInstance()->getString("UpdateData");
-char* _PREHASH_SimFPS = LLMessageStringTable::getInstance()->getString("SimFPS");
-char* _PREHASH_ReporterID = LLMessageStringTable::getInstance()->getString("ReporterID");
-char* _PREHASH_ButtonLabel = LLMessageStringTable::getInstance()->getString("ButtonLabel");
-char* _PREHASH_GranterID = LLMessageStringTable::getInstance()->getString("GranterID");
-char* _PREHASH_WantToText = LLMessageStringTable::getInstance()->getString("WantToText");
-char* _PREHASH_ReportType = LLMessageStringTable::getInstance()->getString("ReportType");
-char* _PREHASH_SimulatorReady = LLMessageStringTable::getInstance()->getString("SimulatorReady");
-char* _PREHASH_DataBlock = LLMessageStringTable::getInstance()->getString("DataBlock");
-char* _PREHASH_AnimationSourceList = LLMessageStringTable::getInstance()->getString("AnimationSourceList");
-char* _PREHASH_SubscribeLoad = LLMessageStringTable::getInstance()->getString("SubscribeLoad");
-char* _PREHASH_UnsubscribeLoad = LLMessageStringTable::getInstance()->getString("UnsubscribeLoad");
-char* _PREHASH_Packet = LLMessageStringTable::getInstance()->getString("Packet");
-char* _PREHASH_UndoLand = LLMessageStringTable::getInstance()->getString("UndoLand");
-char* _PREHASH_SimAccess = LLMessageStringTable::getInstance()->getString("SimAccess");
-char* _PREHASH_AbuserID = LLMessageStringTable::getInstance()->getString("AbuserID");
-char* _PREHASH_MembershipFee = LLMessageStringTable::getInstance()->getString("MembershipFee");
-char* _PREHASH_InviteGroupResponse = LLMessageStringTable::getInstance()->getString("InviteGroupResponse");
-char* _PREHASH_CreateInventoryFolder = LLMessageStringTable::getInstance()->getString("CreateInventoryFolder");
-char* _PREHASH_UpdateInventoryFolder = LLMessageStringTable::getInstance()->getString("UpdateInventoryFolder");
-char* _PREHASH_MoveInventoryFolder = LLMessageStringTable::getInstance()->getString("MoveInventoryFolder");
-char* _PREHASH_RemoveInventoryFolder = LLMessageStringTable::getInstance()->getString("RemoveInventoryFolder");
-char* _PREHASH_MoneyData = LLMessageStringTable::getInstance()->getString("MoneyData");
-char* _PREHASH_ObjectDeselect = LLMessageStringTable::getInstance()->getString("ObjectDeselect");
-char* _PREHASH_NewAssetID = LLMessageStringTable::getInstance()->getString("NewAssetID");
-char* _PREHASH_ObjectAdd = LLMessageStringTable::getInstance()->getString("ObjectAdd");
-char* _PREHASH_RayEndIsIntersection = LLMessageStringTable::getInstance()->getString("RayEndIsIntersection");
-char* _PREHASH_CompleteAuction = LLMessageStringTable::getInstance()->getString("CompleteAuction");
-char* _PREHASH_CircuitCode = LLMessageStringTable::getInstance()->getString("CircuitCode");
-char* _PREHASH_AgentMovementComplete = LLMessageStringTable::getInstance()->getString("AgentMovementComplete");
-char* _PREHASH_ViewerIP = LLMessageStringTable::getInstance()->getString("ViewerIP");
-char* _PREHASH_Header = LLMessageStringTable::getInstance()->getString("Header");
-char* _PREHASH_GestureFlags = LLMessageStringTable::getInstance()->getString("GestureFlags");
-char* _PREHASH_XferID = LLMessageStringTable::getInstance()->getString("XferID");
-char* _PREHASH_StatValue = LLMessageStringTable::getInstance()->getString("StatValue");
-char* _PREHASH_TaskID = LLMessageStringTable::getInstance()->getString("TaskID");
-char* _PREHASH_PickID = LLMessageStringTable::getInstance()->getString("PickID");
-char* _PREHASH_RayEnd = LLMessageStringTable::getInstance()->getString("RayEnd");
-char* _PREHASH_Throttles = LLMessageStringTable::getInstance()->getString("Throttles");
-char* _PREHASH_RebakeAvatarTextures = LLMessageStringTable::getInstance()->getString("RebakeAvatarTextures");
-char* _PREHASH_UpAxis = LLMessageStringTable::getInstance()->getString("UpAxis");
-char* _PREHASH_AgentTextures = LLMessageStringTable::getInstance()->getString("AgentTextures");
-char* _PREHASH_NotecardData = LLMessageStringTable::getInstance()->getString("NotecardData");
-char* _PREHASH_Radius = LLMessageStringTable::getInstance()->getString("Radius");
-char* _PREHASH_OffCircuit = LLMessageStringTable::getInstance()->getString("OffCircuit");
-char* _PREHASH_Access = LLMessageStringTable::getInstance()->getString("Access");
-char* _PREHASH_TitleRoleID = LLMessageStringTable::getInstance()->getString("TitleRoleID");
-char* _PREHASH_SquareMetersCredit = LLMessageStringTable::getInstance()->getString("SquareMetersCredit");
-char* _PREHASH_Filename = LLMessageStringTable::getInstance()->getString("Filename");
-char* _PREHASH_ClassifiedInfoRequest = LLMessageStringTable::getInstance()->getString("ClassifiedInfoRequest");
-char* _PREHASH_ParcelInfoRequest = LLMessageStringTable::getInstance()->getString("ParcelInfoRequest");
-char* _PREHASH_ParcelObjectOwnersRequest = LLMessageStringTable::getInstance()->getString("ParcelObjectOwnersRequest");
-char* _PREHASH_TeleportLandmarkRequest = LLMessageStringTable::getInstance()->getString("TeleportLandmarkRequest");
-char* _PREHASH_EventInfoRequest = LLMessageStringTable::getInstance()->getString("EventInfoRequest");
-char* _PREHASH_MoneyBalanceRequest = LLMessageStringTable::getInstance()->getString("MoneyBalanceRequest");
-char* _PREHASH_GroupMembersRequest = LLMessageStringTable::getInstance()->getString("GroupMembersRequest");
-char* _PREHASH_GroupRoleMembersRequest = LLMessageStringTable::getInstance()->getString("GroupRoleMembersRequest");
-char* _PREHASH_ChatFromSimulator = LLMessageStringTable::getInstance()->getString("ChatFromSimulator");
-char* _PREHASH_OldFolderID = LLMessageStringTable::getInstance()->getString("OldFolderID");
-char* _PREHASH_UserInfoRequest = LLMessageStringTable::getInstance()->getString("UserInfoRequest");
-char* _PREHASH_TextureID = LLMessageStringTable::getInstance()->getString("TextureID");
-char* _PREHASH_ProfileURL = LLMessageStringTable::getInstance()->getString("ProfileURL");
-char* _PREHASH_Handle = LLMessageStringTable::getInstance()->getString("Handle");
-char* _PREHASH_ButtonIndex = LLMessageStringTable::getInstance()->getString("ButtonIndex");
-char* _PREHASH_GetScriptRunning = LLMessageStringTable::getInstance()->getString("GetScriptRunning");
-char* _PREHASH_SetScriptRunning = LLMessageStringTable::getInstance()->getString("SetScriptRunning");
-char* _PREHASH_Health = LLMessageStringTable::getInstance()->getString("Health");
-char* _PREHASH_CircuitInfo = LLMessageStringTable::getInstance()->getString("CircuitInfo");
-char* _PREHASH_ObjectBuy = LLMessageStringTable::getInstance()->getString("ObjectBuy");
-char* _PREHASH_ProfileEnd = LLMessageStringTable::getInstance()->getString("ProfileEnd");
-char* _PREHASH_Effect = LLMessageStringTable::getInstance()->getString("Effect");
-char* _PREHASH_TestMessage = LLMessageStringTable::getInstance()->getString("TestMessage");
-char* _PREHASH_ScriptMailRegistration = LLMessageStringTable::getInstance()->getString("ScriptMailRegistration");
-char* _PREHASH_AgentSetAppearance = LLMessageStringTable::getInstance()->getString("AgentSetAppearance");
-char* _PREHASH_AvatarAppearance = LLMessageStringTable::getInstance()->getString("AvatarAppearance");
-char* _PREHASH_RegionData = LLMessageStringTable::getInstance()->getString("RegionData");
-char* _PREHASH_RequestingRegionData = LLMessageStringTable::getInstance()->getString("RequestingRegionData");
-char* _PREHASH_LandingRegionData = LLMessageStringTable::getInstance()->getString("LandingRegionData");
-char* _PREHASH_SitTransform = LLMessageStringTable::getInstance()->getString("SitTransform");
-char* _PREHASH_TerrainBase0 = LLMessageStringTable::getInstance()->getString("TerrainBase0");
-char* _PREHASH_SkillsMask = LLMessageStringTable::getInstance()->getString("SkillsMask");
-char* _PREHASH_AtAxis = LLMessageStringTable::getInstance()->getString("AtAxis");
-char* _PREHASH_TerrainBase1 = LLMessageStringTable::getInstance()->getString("TerrainBase1");
-char* _PREHASH_Reason = LLMessageStringTable::getInstance()->getString("Reason");
-char* _PREHASH_TerrainBase2 = LLMessageStringTable::getInstance()->getString("TerrainBase2");
-char* _PREHASH_TerrainBase3 = LLMessageStringTable::getInstance()->getString("TerrainBase3");
-char* _PREHASH_Params = LLMessageStringTable::getInstance()->getString("Params");
-char* _PREHASH_PingID = LLMessageStringTable::getInstance()->getString("PingID");
-char* _PREHASH_Change = LLMessageStringTable::getInstance()->getString("Change");
-char* _PREHASH_Height = LLMessageStringTable::getInstance()->getString("Height");
-char* _PREHASH_Region = LLMessageStringTable::getInstance()->getString("Region");
-char* _PREHASH_TelehubInfo = LLMessageStringTable::getInstance()->getString("TelehubInfo");
-char* _PREHASH_StateSave = LLMessageStringTable::getInstance()->getString("StateSave");
-char* _PREHASH_RoleData = LLMessageStringTable::getInstance()->getString("RoleData");
-char* _PREHASH_AgentAnimation = LLMessageStringTable::getInstance()->getString("AgentAnimation");
-char* _PREHASH_AvatarAnimation = LLMessageStringTable::getInstance()->getString("AvatarAnimation");
-char* _PREHASH_LogDwellTime = LLMessageStringTable::getInstance()->getString("LogDwellTime");
-char* _PREHASH_ParcelGodMarkAsContent = LLMessageStringTable::getInstance()->getString("ParcelGodMarkAsContent");
-char* _PREHASH_UsePhysics = LLMessageStringTable::getInstance()->getString("UsePhysics");
-char* _PREHASH_RegionDenyTransacted = LLMessageStringTable::getInstance()->getString("RegionDenyTransacted");
-char* _PREHASH_JointType = LLMessageStringTable::getInstance()->getString("JointType");
-char* _PREHASH_ObjectTaxEstimate = LLMessageStringTable::getInstance()->getString("ObjectTaxEstimate");
-char* _PREHASH_LightTaxEstimate = LLMessageStringTable::getInstance()->getString("LightTaxEstimate");
-char* _PREHASH_LandTaxEstimate = LLMessageStringTable::getInstance()->getString("LandTaxEstimate");
-char* _PREHASH_TeleportLandingStatusChanged = LLMessageStringTable::getInstance()->getString("TeleportLandingStatusChanged");
-char* _PREHASH_GroupTaxEstimate = LLMessageStringTable::getInstance()->getString("GroupTaxEstimate");
-char* _PREHASH_AvgViewerFPS = LLMessageStringTable::getInstance()->getString("AvgViewerFPS");
-char* _PREHASH_Buttons = LLMessageStringTable::getInstance()->getString("Buttons");
-char* _PREHASH_Sender = LLMessageStringTable::getInstance()->getString("Sender");
-char* _PREHASH_Dialog = LLMessageStringTable::getInstance()->getString("Dialog");
-char* _PREHASH_TargetData = LLMessageStringTable::getInstance()->getString("TargetData");
-char* _PREHASH_DestID = LLMessageStringTable::getInstance()->getString("DestID");
-char* _PREHASH_PricePublicObjectDelete = LLMessageStringTable::getInstance()->getString("PricePublicObjectDelete");
-char* _PREHASH_ObjectDelete = LLMessageStringTable::getInstance()->getString("ObjectDelete");
-char* _PREHASH_Delete = LLMessageStringTable::getInstance()->getString("Delete");
-char* _PREHASH_EventGodDelete = LLMessageStringTable::getInstance()->getString("EventGodDelete");
-char* _PREHASH_LastTaxDate = LLMessageStringTable::getInstance()->getString("LastTaxDate");
-char* _PREHASH_MapImageID = LLMessageStringTable::getInstance()->getString("MapImageID");
-char* _PREHASH_EndDateTime = LLMessageStringTable::getInstance()->getString("EndDateTime");
-char* _PREHASH_TerrainDetail0 = LLMessageStringTable::getInstance()->getString("TerrainDetail0");
-char* _PREHASH_TerrainDetail1 = LLMessageStringTable::getInstance()->getString("TerrainDetail1");
-char* _PREHASH_TerrainDetail2 = LLMessageStringTable::getInstance()->getString("TerrainDetail2");
-char* _PREHASH_TerrainDetail3 = LLMessageStringTable::getInstance()->getString("TerrainDetail3");
-char* _PREHASH_Offset = LLMessageStringTable::getInstance()->getString("Offset");
-char* _PREHASH_ObjectDelink = LLMessageStringTable::getInstance()->getString("ObjectDelink");
-char* _PREHASH_TargetObject = LLMessageStringTable::getInstance()->getString("TargetObject");
-char* _PREHASH_IsEstateManager = LLMessageStringTable::getInstance()->getString("IsEstateManager");
-char* _PREHASH_CancelAuction = LLMessageStringTable::getInstance()->getString("CancelAuction");
-char* _PREHASH_ObjectDetach = LLMessageStringTable::getInstance()->getString("ObjectDetach");
-char* _PREHASH_Compressed = LLMessageStringTable::getInstance()->getString("Compressed");
-char* _PREHASH_PathBegin = LLMessageStringTable::getInstance()->getString("PathBegin");
-char* _PREHASH_BypassRaycast = LLMessageStringTable::getInstance()->getString("BypassRaycast");
-char* _PREHASH_WinnerID = LLMessageStringTable::getInstance()->getString("WinnerID");
-char* _PREHASH_ChannelType = LLMessageStringTable::getInstance()->getString("ChannelType");
-char* _PREHASH_NonExemptMembers = LLMessageStringTable::getInstance()->getString("NonExemptMembers");
-char* _PREHASH_Agents = LLMessageStringTable::getInstance()->getString("Agents");
-char* _PREHASH_MemberData = LLMessageStringTable::getInstance()->getString("MemberData");
-char* _PREHASH_ToGroupID = LLMessageStringTable::getInstance()->getString("ToGroupID");
-char* _PREHASH_ImageNotInDatabase = LLMessageStringTable::getInstance()->getString("ImageNotInDatabase");
-char* _PREHASH_StartDate = LLMessageStringTable::getInstance()->getString("StartDate");
-char* _PREHASH_AnimID = LLMessageStringTable::getInstance()->getString("AnimID");
-char* _PREHASH_Serial = LLMessageStringTable::getInstance()->getString("Serial");
-char* _PREHASH_AbuseRegionName = LLMessageStringTable::getInstance()->getString("AbuseRegionName");
-char* _PREHASH_ModifyLand = LLMessageStringTable::getInstance()->getString("ModifyLand");
-char* _PREHASH_Digest = LLMessageStringTable::getInstance()->getString("Digest");
-char* _PREHASH_Victim = LLMessageStringTable::getInstance()->getString("Victim");
-char* _PREHASH_Script = LLMessageStringTable::getInstance()->getString("Script");
-char* _PREHASH_PickInfoReply = LLMessageStringTable::getInstance()->getString("PickInfoReply");
-char* _PREHASH_MoneyBalanceReply = LLMessageStringTable::getInstance()->getString("MoneyBalanceReply");
-char* _PREHASH_RoutedMoneyBalanceReply = LLMessageStringTable::getInstance()->getString("RoutedMoneyBalanceReply");
-char* _PREHASH_RoleID = LLMessageStringTable::getInstance()->getString("RoleID");
-char* _PREHASH_RegionInfo = LLMessageStringTable::getInstance()->getString("RegionInfo");
-char* _PREHASH_GodUpdateRegionInfo = LLMessageStringTable::getInstance()->getString("GodUpdateRegionInfo");
-char* _PREHASH_StartAnim = LLMessageStringTable::getInstance()->getString("StartAnim");
-char* _PREHASH_Action = LLMessageStringTable::getInstance()->getString("Action");
-char* _PREHASH_Location = LLMessageStringTable::getInstance()->getString("Location");
-char* _PREHASH_Rights = LLMessageStringTable::getInstance()->getString("Rights");
-char* _PREHASH_SearchDir = LLMessageStringTable::getInstance()->getString("SearchDir");
-char* _PREHASH_TransferRequest = LLMessageStringTable::getInstance()->getString("TransferRequest");
-char* _PREHASH_ScriptSensorRequest = LLMessageStringTable::getInstance()->getString("ScriptSensorRequest");
-char* _PREHASH_MoneyTransferRequest = LLMessageStringTable::getInstance()->getString("MoneyTransferRequest");
-char* _PREHASH_EjectGroupMemberRequest = LLMessageStringTable::getInstance()->getString("EjectGroupMemberRequest");
-char* _PREHASH_SkillsText = LLMessageStringTable::getInstance()->getString("SkillsText");
-char* _PREHASH_Resent = LLMessageStringTable::getInstance()->getString("Resent");
-char* _PREHASH_Center = LLMessageStringTable::getInstance()->getString("Center");
-char* _PREHASH_SharedData = LLMessageStringTable::getInstance()->getString("SharedData");
-char* _PREHASH_PSBlock = LLMessageStringTable::getInstance()->getString("PSBlock");
-char* _PREHASH_UUIDNameBlock = LLMessageStringTable::getInstance()->getString("UUIDNameBlock");
-char* _PREHASH_GroupTitleUpdate = LLMessageStringTable::getInstance()->getString("GroupTitleUpdate");
-char* _PREHASH_Method = LLMessageStringTable::getInstance()->getString("Method");
-char* _PREHASH_TouchName = LLMessageStringTable::getInstance()->getString("TouchName");
-char* _PREHASH_UpdateType = LLMessageStringTable::getInstance()->getString("UpdateType");
-char* _PREHASH_KickedFromEstateID = LLMessageStringTable::getInstance()->getString("KickedFromEstateID");
-char* _PREHASH_CandidateID = LLMessageStringTable::getInstance()->getString("CandidateID");
-char* _PREHASH_ParamData = LLMessageStringTable::getInstance()->getString("ParamData");
-char* _PREHASH_GodlikeMessage = LLMessageStringTable::getInstance()->getString("GodlikeMessage");
-char* _PREHASH_SystemMessage = LLMessageStringTable::getInstance()->getString("SystemMessage");
-char* _PREHASH_BodyRotation = LLMessageStringTable::getInstance()->getString("BodyRotation");
-char* _PREHASH_SearchRegions = LLMessageStringTable::getInstance()->getString("SearchRegions");
-char* _PREHASH_AnimationData = LLMessageStringTable::getInstance()->getString("AnimationData");
-char* _PREHASH_StatID = LLMessageStringTable::getInstance()->getString("StatID");
-char* _PREHASH_ItemID = LLMessageStringTable::getInstance()->getString("ItemID");
-char* _PREHASH_ScriptDialogReply = LLMessageStringTable::getInstance()->getString("ScriptDialogReply");
-char* _PREHASH_RegionIDAndHandleReply = LLMessageStringTable::getInstance()->getString("RegionIDAndHandleReply");
-char* _PREHASH_CameraAtOffset = LLMessageStringTable::getInstance()->getString("CameraAtOffset");
-char* _PREHASH_VoteID = LLMessageStringTable::getInstance()->getString("VoteID");
-char* _PREHASH_ParcelGodForceOwner = LLMessageStringTable::getInstance()->getString("ParcelGodForceOwner");
-char* _PREHASH_Filter = LLMessageStringTable::getInstance()->getString("Filter");
-char* _PREHASH_InviteData = LLMessageStringTable::getInstance()->getString("InviteData");
-char* _PREHASH_PCode = LLMessageStringTable::getInstance()->getString("PCode");
-char* _PREHASH_SearchPos = LLMessageStringTable::getInstance()->getString("SearchPos");
-char* _PREHASH_PreyID = LLMessageStringTable::getInstance()->getString("PreyID");
-char* _PREHASH_TerrainLowerLimit = LLMessageStringTable::getInstance()->getString("TerrainLowerLimit");
-char* _PREHASH_EventFlags = LLMessageStringTable::getInstance()->getString("EventFlags");
-char* _PREHASH_TallyVotes = LLMessageStringTable::getInstance()->getString("TallyVotes");
-char* _PREHASH_Result = LLMessageStringTable::getInstance()->getString("Result");
-char* _PREHASH_LookAt = LLMessageStringTable::getInstance()->getString("LookAt");
-char* _PREHASH_SearchOrder = LLMessageStringTable::getInstance()->getString("SearchOrder");
-char* _PREHASH_PayButton = LLMessageStringTable::getInstance()->getString("PayButton");
-char* _PREHASH_SelfCount = LLMessageStringTable::getInstance()->getString("SelfCount");
-char* _PREHASH_PacketCount = LLMessageStringTable::getInstance()->getString("PacketCount");
-char* _PREHASH_ParcelBuyPass = LLMessageStringTable::getInstance()->getString("ParcelBuyPass");
-char* _PREHASH_OldItemID = LLMessageStringTable::getInstance()->getString("OldItemID");
-char* _PREHASH_RegionPort = LLMessageStringTable::getInstance()->getString("RegionPort");
-char* _PREHASH_PriceEnergyUnit = LLMessageStringTable::getInstance()->getString("PriceEnergyUnit");
-char* _PREHASH_Bitmap = LLMessageStringTable::getInstance()->getString("Bitmap");
-char* _PREHASH_CacheMissType = LLMessageStringTable::getInstance()->getString("CacheMissType");
-char* _PREHASH_VFileID = LLMessageStringTable::getInstance()->getString("VFileID");
-char* _PREHASH_GroupInsigniaID = LLMessageStringTable::getInstance()->getString("GroupInsigniaID");
-char* _PREHASH_Online = LLMessageStringTable::getInstance()->getString("Online");
-char* _PREHASH_KickFlags = LLMessageStringTable::getInstance()->getString("KickFlags");
-char* _PREHASH_CovenantID = LLMessageStringTable::getInstance()->getString("CovenantID");
-char* _PREHASH_SysCPU = LLMessageStringTable::getInstance()->getString("SysCPU");
-char* _PREHASH_EMail = LLMessageStringTable::getInstance()->getString("EMail");
-char* _PREHASH_AggregatePermTextures = LLMessageStringTable::getInstance()->getString("AggregatePermTextures");
-char* _PREHASH_ChatChannel = LLMessageStringTable::getInstance()->getString("ChatChannel");
-char* _PREHASH_ReturnID = LLMessageStringTable::getInstance()->getString("ReturnID");
-char* _PREHASH_ObjectAttach = LLMessageStringTable::getInstance()->getString("ObjectAttach");
-char* _PREHASH_TargetPort = LLMessageStringTable::getInstance()->getString("TargetPort");
-char* _PREHASH_ObjectSpinStop = LLMessageStringTable::getInstance()->getString("ObjectSpinStop");
-char* _PREHASH_FullID = LLMessageStringTable::getInstance()->getString("FullID");
-char* _PREHASH_ActivateGroup = LLMessageStringTable::getInstance()->getString("ActivateGroup");
-char* _PREHASH_SysGPU = LLMessageStringTable::getInstance()->getString("SysGPU");
-char* _PREHASH_AvatarInterestsReply = LLMessageStringTable::getInstance()->getString("AvatarInterestsReply");
-char* _PREHASH_StartLure = LLMessageStringTable::getInstance()->getString("StartLure");
-char* _PREHASH_SysRAM = LLMessageStringTable::getInstance()->getString("SysRAM");
-char* _PREHASH_ObjectPosition = LLMessageStringTable::getInstance()->getString("ObjectPosition");
-char* _PREHASH_SitPosition = LLMessageStringTable::getInstance()->getString("SitPosition");
-char* _PREHASH_StartTime = LLMessageStringTable::getInstance()->getString("StartTime");
-char* _PREHASH_BornOn = LLMessageStringTable::getInstance()->getString("BornOn");
-char* _PREHASH_CameraCollidePlane = LLMessageStringTable::getInstance()->getString("CameraCollidePlane");
-char* _PREHASH_EconomyDataRequest = LLMessageStringTable::getInstance()->getString("EconomyDataRequest");
-char* _PREHASH_TeleportLureRequest = LLMessageStringTable::getInstance()->getString("TeleportLureRequest");
-char* _PREHASH_FolderID = LLMessageStringTable::getInstance()->getString("FolderID");
-char* _PREHASH_RegionHandleRequest = LLMessageStringTable::getInstance()->getString("RegionHandleRequest");
-char* _PREHASH_ScriptDataRequest = LLMessageStringTable::getInstance()->getString("ScriptDataRequest");
-char* _PREHASH_GroupRoleDataRequest = LLMessageStringTable::getInstance()->getString("GroupRoleDataRequest");
-char* _PREHASH_GroupTitlesRequest = LLMessageStringTable::getInstance()->getString("GroupTitlesRequest");
-char* _PREHASH_AgentWearablesRequest = LLMessageStringTable::getInstance()->getString("AgentWearablesRequest");
-char* _PREHASH_MapBlockRequest = LLMessageStringTable::getInstance()->getString("MapBlockRequest");
-char* _PREHASH_LureID = LLMessageStringTable::getInstance()->getString("LureID");
-char* _PREHASH_CopyCenters = LLMessageStringTable::getInstance()->getString("CopyCenters");
-char* _PREHASH_ParamList = LLMessageStringTable::getInstance()->getString("ParamList");
-char* _PREHASH_InventorySerial = LLMessageStringTable::getInstance()->getString("InventorySerial");
-char* _PREHASH_EdgeDataPacket = LLMessageStringTable::getInstance()->getString("EdgeDataPacket");
-char* _PREHASH_AvatarPickerReply = LLMessageStringTable::getInstance()->getString("AvatarPickerReply");
-char* _PREHASH_ParcelDwellReply = LLMessageStringTable::getInstance()->getString("ParcelDwellReply");
-char* _PREHASH_IsForSale = LLMessageStringTable::getInstance()->getString("IsForSale");
-char* _PREHASH_MuteID = LLMessageStringTable::getInstance()->getString("MuteID");
-char* _PREHASH_MeanCollisionAlert = LLMessageStringTable::getInstance()->getString("MeanCollisionAlert");
-char* _PREHASH_CanAcceptTasks = LLMessageStringTable::getInstance()->getString("CanAcceptTasks");
-char* _PREHASH_ItemData = LLMessageStringTable::getInstance()->getString("ItemData");
-char* _PREHASH_AnimationList = LLMessageStringTable::getInstance()->getString("AnimationList");
-char* _PREHASH_Reputation = LLMessageStringTable::getInstance()->getString("Reputation");
-char* _PREHASH_IntValue = LLMessageStringTable::getInstance()->getString("IntValue");
-char* _PREHASH_TargetType = LLMessageStringTable::getInstance()->getString("TargetType");
-char* _PREHASH_Amount = LLMessageStringTable::getInstance()->getString("Amount");
-char* _PREHASH_HasAttachment = LLMessageStringTable::getInstance()->getString("HasAttachment");
-char* _PREHASH_UpdateAttachment = LLMessageStringTable::getInstance()->getString("UpdateAttachment");
-char* _PREHASH_RemoveAttachment = LLMessageStringTable::getInstance()->getString("RemoveAttachment");
-char* _PREHASH_HeightWidthBlock = LLMessageStringTable::getInstance()->getString("HeightWidthBlock");
-char* _PREHASH_RequestObjectPropertiesFamily = LLMessageStringTable::getInstance()->getString("RequestObjectPropertiesFamily");
-char* _PREHASH_ObjectPropertiesFamily = LLMessageStringTable::getInstance()->getString("ObjectPropertiesFamily");
-char* _PREHASH_UserData = LLMessageStringTable::getInstance()->getString("UserData");
-char* _PREHASH_IsReadable = LLMessageStringTable::getInstance()->getString("IsReadable");
-char* _PREHASH_PathCurve = LLMessageStringTable::getInstance()->getString("PathCurve");
-char* _PREHASH_Status = LLMessageStringTable::getInstance()->getString("Status");
-char* _PREHASH_FromGroup = LLMessageStringTable::getInstance()->getString("FromGroup");
-char* _PREHASH_AlreadyVoted = LLMessageStringTable::getInstance()->getString("AlreadyVoted");
-char* _PREHASH_PlacesReply = LLMessageStringTable::getInstance()->getString("PlacesReply");
-char* _PREHASH_DirPlacesReply = LLMessageStringTable::getInstance()->getString("DirPlacesReply");
-char* _PREHASH_ParcelBuy = LLMessageStringTable::getInstance()->getString("ParcelBuy");
-char* _PREHASH_DirFindQueryBackend = LLMessageStringTable::getInstance()->getString("DirFindQueryBackend");
-char* _PREHASH_DirPlacesQueryBackend = LLMessageStringTable::getInstance()->getString("DirPlacesQueryBackend");
-char* _PREHASH_DirClassifiedQueryBackend = LLMessageStringTable::getInstance()->getString("DirClassifiedQueryBackend");
-char* _PREHASH_DirLandQueryBackend = LLMessageStringTable::getInstance()->getString("DirLandQueryBackend");
-char* _PREHASH_DirPopularQueryBackend = LLMessageStringTable::getInstance()->getString("DirPopularQueryBackend");
-char* _PREHASH_HistoryData = LLMessageStringTable::getInstance()->getString("HistoryData");
-char* _PREHASH_SnapshotID = LLMessageStringTable::getInstance()->getString("SnapshotID");
-char* _PREHASH_Aspect = LLMessageStringTable::getInstance()->getString("Aspect");
-char* _PREHASH_ParamSize = LLMessageStringTable::getInstance()->getString("ParamSize");
-char* _PREHASH_VoteCast = LLMessageStringTable::getInstance()->getString("VoteCast");
-char* _PREHASH_CastsShadows = LLMessageStringTable::getInstance()->getString("CastsShadows");
-char* _PREHASH_EveryoneMask = LLMessageStringTable::getInstance()->getString("EveryoneMask");
-char* _PREHASH_ObjectSpinUpdate = LLMessageStringTable::getInstance()->getString("ObjectSpinUpdate");
-char* _PREHASH_MaturePublish = LLMessageStringTable::getInstance()->getString("MaturePublish");
-char* _PREHASH_UseExistingAsset = LLMessageStringTable::getInstance()->getString("UseExistingAsset");
-char* _PREHASH_Powers = LLMessageStringTable::getInstance()->getString("Powers");
-char* _PREHASH_ParcelLocalID = LLMessageStringTable::getInstance()->getString("ParcelLocalID");
-char* _PREHASH_TeleportCancel = LLMessageStringTable::getInstance()->getString("TeleportCancel");
-char* _PREHASH_UnixTime = LLMessageStringTable::getInstance()->getString("UnixTime");
-char* _PREHASH_QueryFlags = LLMessageStringTable::getInstance()->getString("QueryFlags");
-char* _PREHASH_AlwaysRun = LLMessageStringTable::getInstance()->getString("AlwaysRun");
-char* _PREHASH_Bottom = LLMessageStringTable::getInstance()->getString("Bottom");
-char* _PREHASH_ButtonData = LLMessageStringTable::getInstance()->getString("ButtonData");
-char* _PREHASH_SoundData = LLMessageStringTable::getInstance()->getString("SoundData");
-char* _PREHASH_ViewerStats = LLMessageStringTable::getInstance()->getString("ViewerStats");
-char* _PREHASH_RegionHandshake = LLMessageStringTable::getInstance()->getString("RegionHandshake");
-char* _PREHASH_ObjectDescription = LLMessageStringTable::getInstance()->getString("ObjectDescription");
-char* _PREHASH_Description = LLMessageStringTable::getInstance()->getString("Description");
-char* _PREHASH_ParamType = LLMessageStringTable::getInstance()->getString("ParamType");
-char* _PREHASH_UUIDNameReply = LLMessageStringTable::getInstance()->getString("UUIDNameReply");
-char* _PREHASH_UUIDGroupNameReply = LLMessageStringTable::getInstance()->getString("UUIDGroupNameReply");
-char* _PREHASH_SaveAssetIntoInventory = LLMessageStringTable::getInstance()->getString("SaveAssetIntoInventory");
-char* _PREHASH_UserInfo = LLMessageStringTable::getInstance()->getString("UserInfo");
-char* _PREHASH_AnimSequenceID = LLMessageStringTable::getInstance()->getString("AnimSequenceID");
-char* _PREHASH_NVPairs = LLMessageStringTable::getInstance()->getString("NVPairs");
-char* _PREHASH_GroupNoticesListRequest = LLMessageStringTable::getInstance()->getString("GroupNoticesListRequest");
-char* _PREHASH_ParcelAccessListRequest = LLMessageStringTable::getInstance()->getString("ParcelAccessListRequest");
-char* _PREHASH_MuteListRequest = LLMessageStringTable::getInstance()->getString("MuteListRequest");
-char* _PREHASH_RpcChannelRequest = LLMessageStringTable::getInstance()->getString("RpcChannelRequest");
-char* _PREHASH_LandStatRequest = LLMessageStringTable::getInstance()->getString("LandStatRequest");
-char* _PREHASH_PlacesQuery = LLMessageStringTable::getInstance()->getString("PlacesQuery");
-char* _PREHASH_DirPlacesQuery = LLMessageStringTable::getInstance()->getString("DirPlacesQuery");
-char* _PREHASH_SortOrder = LLMessageStringTable::getInstance()->getString("SortOrder");
-char* _PREHASH_Hunter = LLMessageStringTable::getInstance()->getString("Hunter");
-char* _PREHASH_SunAngVelocity = LLMessageStringTable::getInstance()->getString("SunAngVelocity");
-char* _PREHASH_BinaryBucket = LLMessageStringTable::getInstance()->getString("BinaryBucket");
-char* _PREHASH_ImagePacket = LLMessageStringTable::getInstance()->getString("ImagePacket");
-char* _PREHASH_StartGroupProposal = LLMessageStringTable::getInstance()->getString("StartGroupProposal");
-char* _PREHASH_EnergyLevel = LLMessageStringTable::getInstance()->getString("EnergyLevel");
-char* _PREHASH_PriceForListing = LLMessageStringTable::getInstance()->getString("PriceForListing");
-char* _PREHASH_Scale = LLMessageStringTable::getInstance()->getString("Scale");
-char* _PREHASH_EstateCovenantReply = LLMessageStringTable::getInstance()->getString("EstateCovenantReply");
-char* _PREHASH_ParentEstateID = LLMessageStringTable::getInstance()->getString("ParentEstateID");
-char* _PREHASH_Extra2 = LLMessageStringTable::getInstance()->getString("Extra2");
-char* _PREHASH_Throttle = LLMessageStringTable::getInstance()->getString("Throttle");
-char* _PREHASH_SimIP = LLMessageStringTable::getInstance()->getString("SimIP");
-char* _PREHASH_GodID = LLMessageStringTable::getInstance()->getString("GodID");
-char* _PREHASH_TeleportMinPrice = LLMessageStringTable::getInstance()->getString("TeleportMinPrice");
-char* _PREHASH_VoteItem = LLMessageStringTable::getInstance()->getString("VoteItem");
-char* _PREHASH_ObjectRotation = LLMessageStringTable::getInstance()->getString("ObjectRotation");
-char* _PREHASH_SitRotation = LLMessageStringTable::getInstance()->getString("SitRotation");
-char* _PREHASH_SnapSelection = LLMessageStringTable::getInstance()->getString("SnapSelection");
-char* _PREHASH_SoundTrigger = LLMessageStringTable::getInstance()->getString("SoundTrigger");
-char* _PREHASH_TerrainRaiseLimit = LLMessageStringTable::getInstance()->getString("TerrainRaiseLimit");
-char* _PREHASH_Quorum = LLMessageStringTable::getInstance()->getString("Quorum");
-char* _PREHASH_AgentBlock = LLMessageStringTable::getInstance()->getString("AgentBlock");
-char* _PREHASH_CommandBlock = LLMessageStringTable::getInstance()->getString("CommandBlock");
-char* _PREHASH_PricePublicObjectDecay = LLMessageStringTable::getInstance()->getString("PricePublicObjectDecay");
-char* _PREHASH_SpawnPointPos = LLMessageStringTable::getInstance()->getString("SpawnPointPos");
-char* _PREHASH_VolumeDetail = LLMessageStringTable::getInstance()->getString("VolumeDetail");
-char* _PREHASH_FromAgentName = LLMessageStringTable::getInstance()->getString("FromAgentName");
-char* _PREHASH_Range = LLMessageStringTable::getInstance()->getString("Range");
-char* _PREHASH_DirectoryVisibility = LLMessageStringTable::getInstance()->getString("DirectoryVisibility");
-char* _PREHASH_PublicIP = LLMessageStringTable::getInstance()->getString("PublicIP");
-char* _PREHASH_TeleportFailed = LLMessageStringTable::getInstance()->getString("TeleportFailed");
-char* _PREHASH_PreloadSound = LLMessageStringTable::getInstance()->getString("PreloadSound");
-char* _PREHASH_ScreenshotID = LLMessageStringTable::getInstance()->getString("ScreenshotID");
-char* _PREHASH_CovenantTimestamp = LLMessageStringTable::getInstance()->getString("CovenantTimestamp");
-char* _PREHASH_OldestUnacked = LLMessageStringTable::getInstance()->getString("OldestUnacked");
-char* _PREHASH_SimulatorIP = LLMessageStringTable::getInstance()->getString("SimulatorIP");
-char* _PREHASH_Value = LLMessageStringTable::getInstance()->getString("Value");
-char* _PREHASH_JointAxisOrAnchor = LLMessageStringTable::getInstance()->getString("JointAxisOrAnchor");
-char* _PREHASH_Test0 = LLMessageStringTable::getInstance()->getString("Test0");
-char* _PREHASH_Test1 = LLMessageStringTable::getInstance()->getString("Test1");
-char* _PREHASH_Test2 = LLMessageStringTable::getInstance()->getString("Test2");
-char* _PREHASH_SunPhase = LLMessageStringTable::getInstance()->getString("SunPhase");
-char* _PREHASH_ParcelDivide = LLMessageStringTable::getInstance()->getString("ParcelDivide");
-char* _PREHASH_PriceObjectClaim = LLMessageStringTable::getInstance()->getString("PriceObjectClaim");
-char* _PREHASH_Field = LLMessageStringTable::getInstance()->getString("Field");
-char* _PREHASH_Ratio = LLMessageStringTable::getInstance()->getString("Ratio");
-char* _PREHASH_JoinGroupReply = LLMessageStringTable::getInstance()->getString("JoinGroupReply");
-char* _PREHASH_LiveHelpGroupReply = LLMessageStringTable::getInstance()->getString("LiveHelpGroupReply");
-char* _PREHASH_Score = LLMessageStringTable::getInstance()->getString("Score");
-char* _PREHASH_Image = LLMessageStringTable::getInstance()->getString("Image");
-char* _PREHASH_ObjectClickAction = LLMessageStringTable::getInstance()->getString("ObjectClickAction");
-char* _PREHASH_Parameter = LLMessageStringTable::getInstance()->getString("Parameter");
-char* _PREHASH_Flags = LLMessageStringTable::getInstance()->getString("Flags");
-char* _PREHASH_Plane = LLMessageStringTable::getInstance()->getString("Plane");
-char* _PREHASH_Width = LLMessageStringTable::getInstance()->getString("Width");
-char* _PREHASH_Right = LLMessageStringTable::getInstance()->getString("Right");
-char* _PREHASH_DirFindQuery = LLMessageStringTable::getInstance()->getString("DirFindQuery");
-char* _PREHASH_Textures = LLMessageStringTable::getInstance()->getString("Textures");
-char* _PREHASH_EventData = LLMessageStringTable::getInstance()->getString("EventData");
-char* _PREHASH_Final = LLMessageStringTable::getInstance()->getString("Final");
-char* _PREHASH_System = LLMessageStringTable::getInstance()->getString("System");
-char* _PREHASH_TelehubPos = LLMessageStringTable::getInstance()->getString("TelehubPos");
-char* _PREHASH_ReportAutosaveCrash = LLMessageStringTable::getInstance()->getString("ReportAutosaveCrash");
-char* _PREHASH_CreateTrustedCircuit = LLMessageStringTable::getInstance()->getString("CreateTrustedCircuit");
-char* _PREHASH_DenyTrustedCircuit = LLMessageStringTable::getInstance()->getString("DenyTrustedCircuit");
-char* _PREHASH_RequestTrustedCircuit = LLMessageStringTable::getInstance()->getString("RequestTrustedCircuit");
-char* _PREHASH_Codec = LLMessageStringTable::getInstance()->getString("Codec");
-char* _PREHASH_Modal = LLMessageStringTable::getInstance()->getString("Modal");
-char* _PREHASH_ChildAgentUnknown = LLMessageStringTable::getInstance()->getString("ChildAgentUnknown");
-char* _PREHASH_LandingType = LLMessageStringTable::getInstance()->getString("LandingType");
-char* _PREHASH_ScriptRunningReply = LLMessageStringTable::getInstance()->getString("ScriptRunningReply");
-char* _PREHASH_Reply = LLMessageStringTable::getInstance()->getString("Reply");
-char* _PREHASH_GroupAccountDetailsReply = LLMessageStringTable::getInstance()->getString("GroupAccountDetailsReply");
-char* _PREHASH_TelehubRot = LLMessageStringTable::getInstance()->getString("TelehubRot");
-char* _PREHASH_AcceptFriendship = LLMessageStringTable::getInstance()->getString("AcceptFriendship");
-char* _PREHASH_ItemType = LLMessageStringTable::getInstance()->getString("ItemType");
-char* _PREHASH_DwellInfo = LLMessageStringTable::getInstance()->getString("DwellInfo");
-char* _PREHASH_AgentResume = LLMessageStringTable::getInstance()->getString("AgentResume");
-char* _PREHASH_MailFilter = LLMessageStringTable::getInstance()->getString("MailFilter");
-char* _PREHASH_Disconnect = LLMessageStringTable::getInstance()->getString("Disconnect");
-char* _PREHASH_SimPosition = LLMessageStringTable::getInstance()->getString("SimPosition");
-char* _PREHASH_SimWideTotalPrims = LLMessageStringTable::getInstance()->getString("SimWideTotalPrims");
-char* _PREHASH_Index = LLMessageStringTable::getInstance()->getString("Index");
-char* _PREHASH_SimFilename = LLMessageStringTable::getInstance()->getString("SimFilename");
-char* _PREHASH_LastOwnerID = LLMessageStringTable::getInstance()->getString("LastOwnerID");
-char* _PREHASH_GroupNoticeRequest = LLMessageStringTable::getInstance()->getString("GroupNoticeRequest");
-char* _PREHASH_EmailMessageRequest = LLMessageStringTable::getInstance()->getString("EmailMessageRequest");
-char* _PREHASH_MapItemRequest = LLMessageStringTable::getInstance()->getString("MapItemRequest");
-char* _PREHASH_AgentCount = LLMessageStringTable::getInstance()->getString("AgentCount");
-char* _PREHASH_MessageBlock = LLMessageStringTable::getInstance()->getString("MessageBlock");
-char* _PREHASH_FuseBlock = LLMessageStringTable::getInstance()->getString("FuseBlock");
-char* _PREHASH_AgentGroupData = LLMessageStringTable::getInstance()->getString("AgentGroupData");
-char* _PREHASH_ClassifiedInfoUpdate = LLMessageStringTable::getInstance()->getString("ClassifiedInfoUpdate");
-char* _PREHASH_RegionPos = LLMessageStringTable::getInstance()->getString("RegionPos");
-char* _PREHASH_ParcelMediaUpdate = LLMessageStringTable::getInstance()->getString("ParcelMediaUpdate");
-char* _PREHASH_NoticeID = LLMessageStringTable::getInstance()->getString("NoticeID");
-char* _PREHASH_GridX = LLMessageStringTable::getInstance()->getString("GridX");
-char* _PREHASH_GridY = LLMessageStringTable::getInstance()->getString("GridY");
-char* _PREHASH_Title = LLMessageStringTable::getInstance()->getString("Title");
-char* _PREHASH_AuctionID = LLMessageStringTable::getInstance()->getString("AuctionID");
-char* _PREHASH_VoteType = LLMessageStringTable::getInstance()->getString("VoteType");
-char* _PREHASH_CategoryID = LLMessageStringTable::getInstance()->getString("CategoryID");
-char* _PREHASH_Token = LLMessageStringTable::getInstance()->getString("Token");
-char* _PREHASH_AggregatePerms = LLMessageStringTable::getInstance()->getString("AggregatePerms");
-char* _PREHASH_ObjectSelect = LLMessageStringTable::getInstance()->getString("ObjectSelect");
-char* _PREHASH_ForceObjectSelect = LLMessageStringTable::getInstance()->getString("ForceObjectSelect");
-char* _PREHASH_Price = LLMessageStringTable::getInstance()->getString("Price");
-char* _PREHASH_SunDirection = LLMessageStringTable::getInstance()->getString("SunDirection");
-char* _PREHASH_FromName = LLMessageStringTable::getInstance()->getString("FromName");
-char* _PREHASH_ChangeInventoryItemFlags = LLMessageStringTable::getInstance()->getString("ChangLLInventoryItemFlags");
-char* _PREHASH_Force = LLMessageStringTable::getInstance()->getString("Force");
-char* _PREHASH_TransactionBlock = LLMessageStringTable::getInstance()->getString("TransactionBlock");
-char* _PREHASH_PowersMask = LLMessageStringTable::getInstance()->getString("PowersMask");
-char* _PREHASH_Stamp = LLMessageStringTable::getInstance()->getString("Stamp");
-char* _PREHASH_TotalCredits = LLMessageStringTable::getInstance()->getString("TotalCredits");
-char* _PREHASH_State = LLMessageStringTable::getInstance()->getString("State");
-char* _PREHASH_TextureIndex = LLMessageStringTable::getInstance()->getString("TextureIndex");
-char* _PREHASH_InviteeID = LLMessageStringTable::getInstance()->getString("InviteeID");
-char* _PREHASH_ParcelReclaim = LLMessageStringTable::getInstance()->getString("ParcelReclaim");
-char* _PREHASH_Money = LLMessageStringTable::getInstance()->getString("Money");
-char* _PREHASH_PathTwist = LLMessageStringTable::getInstance()->getString("PathTwist");
-char* _PREHASH_AuthBuyerID = LLMessageStringTable::getInstance()->getString("AuthBuyerID");
-char* _PREHASH_Color = LLMessageStringTable::getInstance()->getString("Color");
-char* _PREHASH_SourceType = LLMessageStringTable::getInstance()->getString("SourceType");
-char* _PREHASH_World = LLMessageStringTable::getInstance()->getString("World");
-char* _PREHASH_QueryData = LLMessageStringTable::getInstance()->getString("QueryData");
-char* _PREHASH_Users = LLMessageStringTable::getInstance()->getString("Users");
-char* _PREHASH_SysOS = LLMessageStringTable::getInstance()->getString("SysOS");
-char* _PREHASH_Notes = LLMessageStringTable::getInstance()->getString("Notes");
-char* _PREHASH_AvatarID = LLMessageStringTable::getInstance()->getString("AvatarID");
-char* _PREHASH_FounderID = LLMessageStringTable::getInstance()->getString("FounderID");
-char* _PREHASH_EndPointID = LLMessageStringTable::getInstance()->getString("EndPointID");
-char* _PREHASH_LocationLookAt = LLMessageStringTable::getInstance()->getString("LocationLookAt");
-char* _PREHASH_Sound = LLMessageStringTable::getInstance()->getString("Sound");
-char* _PREHASH_Cover = LLMessageStringTable::getInstance()->getString("Cover");
-char* _PREHASH_TotalObjectCount = LLMessageStringTable::getInstance()->getString("TotalObjectCount");
-char* _PREHASH_TextureEntry = LLMessageStringTable::getInstance()->getString("TextureEntry");
-char* _PREHASH_SquareMetersCommitted = LLMessageStringTable::getInstance()->getString("SquareMetersCommitted");
-char* _PREHASH_ChannelID = LLMessageStringTable::getInstance()->getString("ChannelID");
-char* _PREHASH_Dwell = LLMessageStringTable::getInstance()->getString("Dwell");
-char* _PREHASH_North = LLMessageStringTable::getInstance()->getString("North");
-char* _PREHASH_AgentUpdate = LLMessageStringTable::getInstance()->getString("AgentUpdate");
-char* _PREHASH_PickGodDelete = LLMessageStringTable::getInstance()->getString("PickGodDelete");
-char* _PREHASH_HostName = LLMessageStringTable::getInstance()->getString("HostName");
-char* _PREHASH_PriceParcelClaim = LLMessageStringTable::getInstance()->getString("PriceParcelClaim");
-char* _PREHASH_ParcelClaim = LLMessageStringTable::getInstance()->getString("ParcelClaim");
-char* _PREHASH_AgentPowers = LLMessageStringTable::getInstance()->getString("AgentPowers");
-char* _PREHASH_ProfileHollow = LLMessageStringTable::getInstance()->getString("ProfileHollow");
-char* _PREHASH_GroupRoleChanges = LLMessageStringTable::getInstance()->getString("GroupRoleChanges");
-char* _PREHASH_Count = LLMessageStringTable::getInstance()->getString("Count");
-char* _PREHASH_South = LLMessageStringTable::getInstance()->getString("South");
-char* _PREHASH_ObjectUpdateCompressed = LLMessageStringTable::getInstance()->getString("ObjectUpdateCompressed");
-char* _PREHASH_MuteFlags = LLMessageStringTable::getInstance()->getString("MuteFlags");
-char* _PREHASH_Group = LLMessageStringTable::getInstance()->getString("Group");
-char* _PREHASH_AgentPause = LLMessageStringTable::getInstance()->getString("AgentPause");
-char* _PREHASH_LanguagesText = LLMessageStringTable::getInstance()->getString("LanguagesText");
-char* _PREHASH_Error = LLMessageStringTable::getInstance()->getString("Error");
-char* _PREHASH_InternalScriptMail = LLMessageStringTable::getInstance()->getString("InternalScriptMail");
-char* _PREHASH_FindAgent = LLMessageStringTable::getInstance()->getString("FindAgent");
-char* _PREHASH_AgentData = LLMessageStringTable::getInstance()->getString("AgentData");
-char* _PREHASH_FolderData = LLMessageStringTable::getInstance()->getString("FolderData");
-char* _PREHASH_AssetBlock = LLMessageStringTable::getInstance()->getString("AssetBlock");
-char* _PREHASH_AcceptNotices = LLMessageStringTable::getInstance()->getString("AcceptNotices");
-char* _PREHASH_SetGroupAcceptNotices = LLMessageStringTable::getInstance()->getString("SetGroupAcceptNotices");
-char* _PREHASH_CloseCircuit = LLMessageStringTable::getInstance()->getString("CloseCircuit");
-char* _PREHASH_TeleportFinish = LLMessageStringTable::getInstance()->getString("TeleportFinish");
-char* _PREHASH_PathRevolutions = LLMessageStringTable::getInstance()->getString("PathRevolutions");
-char* _PREHASH_ClassifiedInfoReply = LLMessageStringTable::getInstance()->getString("ClassifiedInfoReply");
-char* _PREHASH_ParcelInfoReply = LLMessageStringTable::getInstance()->getString("ParcelInfoReply");
-char* _PREHASH_AutosaveData = LLMessageStringTable::getInstance()->getString("AutosaveData");
-char* _PREHASH_SetStartLocation = LLMessageStringTable::getInstance()->getString("SetStartLocation");
-char* _PREHASH_PassHours = LLMessageStringTable::getInstance()->getString("PassHours");
-char* _PREHASH_AttachmentPt = LLMessageStringTable::getInstance()->getString("AttachmentPt");
-char* _PREHASH_ParcelFlags = LLMessageStringTable::getInstance()->getString("ParcelFlags");
-char* _PREHASH_NumVotes = LLMessageStringTable::getInstance()->getString("NumVotes");
-char* _PREHASH_AvatarPickerRequest = LLMessageStringTable::getInstance()->getString("AvatarPickerRequest");
-char* _PREHASH_TeleportLocationRequest = LLMessageStringTable::getInstance()->getString("TeleportLocationRequest");
-char* _PREHASH_DataHomeLocationRequest = LLMessageStringTable::getInstance()->getString("DataHomeLocationRequest");
-char* _PREHASH_EventNotificationAddRequest = LLMessageStringTable::getInstance()->getString("EventNotificationAddRequest");
-char* _PREHASH_ParcelDwellRequest = LLMessageStringTable::getInstance()->getString("ParcelDwellRequest");
-char* _PREHASH_EventLocationRequest = LLMessageStringTable::getInstance()->getString("EventLocationRequest");
-char* _PREHASH_SetStartLocationRequest = LLMessageStringTable::getInstance()->getString("SetStartLocationRequest");
-char* _PREHASH_QueryStart = LLMessageStringTable::getInstance()->getString("QueryStart");
-char* _PREHASH_EjectData = LLMessageStringTable::getInstance()->getString("EjectData");
-char* _PREHASH_AvatarTextureUpdate = LLMessageStringTable::getInstance()->getString("AvatarTextureUpdate");
-char* _PREHASH_RPCServerPort = LLMessageStringTable::getInstance()->getString("RPCServerPort");
-char* _PREHASH_Bytes = LLMessageStringTable::getInstance()->getString("Bytes");
-char* _PREHASH_Extra = LLMessageStringTable::getInstance()->getString("Extra");
-char* _PREHASH_ForceScriptControlRelease = LLMessageStringTable::getInstance()->getString("ForceScriptControlRelease");
-char* _PREHASH_ParcelRelease = LLMessageStringTable::getInstance()->getString("ParcelRelease");
-char* _PREHASH_VFileType = LLMessageStringTable::getInstance()->getString("VFileType");
-char* _PREHASH_EjectGroupMemberReply = LLMessageStringTable::getInstance()->getString("EjectGroupMemberReply");
-char* _PREHASH_ImageData = LLMessageStringTable::getInstance()->getString("ImageData");
-char* _PREHASH_SimulatorViewerTimeMessage = LLMessageStringTable::getInstance()->getString("SimulatorViewerTimeMessage");
-char* _PREHASH_Rotation = LLMessageStringTable::getInstance()->getString("Rotation");
-char* _PREHASH_Selection = LLMessageStringTable::getInstance()->getString("Selection");
-char* _PREHASH_TransactionData = LLMessageStringTable::getInstance()->getString("TransactionData");
-char* _PREHASH_OperationData = LLMessageStringTable::getInstance()->getString("OperationData");
-char* _PREHASH_ExpirationDate = LLMessageStringTable::getInstance()->getString("ExpirationDate");
-char* _PREHASH_ParcelDeedToGroup = LLMessageStringTable::getInstance()->getString("ParcelDeedToGroup");
-char* _PREHASH_AvatarPicksReply = LLMessageStringTable::getInstance()->getString("AvatarPicksReply");
-char* _PREHASH_GroupTitlesReply = LLMessageStringTable::getInstance()->getString("GroupTitlesReply");
-char* _PREHASH_AgentInfo = LLMessageStringTable::getInstance()->getString("AgentInfo");
-char* _PREHASH_MoneyTransferBackend = LLMessageStringTable::getInstance()->getString("MoneyTransferBackend");
-char* _PREHASH_NextOwnerMask = LLMessageStringTable::getInstance()->getString("NextOwnerMask");
-char* _PREHASH_MuteData = LLMessageStringTable::getInstance()->getString("MuteData");
-char* _PREHASH_PassPrice = LLMessageStringTable::getInstance()->getString("PassPrice");
-char* _PREHASH_SourceID = LLMessageStringTable::getInstance()->getString("SourceID");
-char* _PREHASH_ChangeUserRights = LLMessageStringTable::getInstance()->getString("ChangeUserRights");
-char* _PREHASH_TeleportFlags = LLMessageStringTable::getInstance()->getString("TeleportFlags");
-char* _PREHASH_SlaveParcelData = LLMessageStringTable::getInstance()->getString("SlaveParcelData");
-char* _PREHASH_AssetData = LLMessageStringTable::getInstance()->getString("AssetData");
-char* _PREHASH_MultipleObjectUpdate = LLMessageStringTable::getInstance()->getString("MultipleObjectUpdate");
-char* _PREHASH_ObjectUpdate = LLMessageStringTable::getInstance()->getString("ObjectUpdate");
-char* _PREHASH_ImprovedTerseObjectUpdate = LLMessageStringTable::getInstance()->getString("ImprovedTerseObjectUpdate");
-char* _PREHASH_ConfirmXferPacket = LLMessageStringTable::getInstance()->getString("ConfirmXferPacket");
-char* _PREHASH_StartPingCheck = LLMessageStringTable::getInstance()->getString("StartPingCheck");
-char* _PREHASH_SimWideDeletes = LLMessageStringTable::getInstance()->getString("SimWideDeletes");
-char* _PREHASH_LandStatReply = LLMessageStringTable::getInstance()->getString("LandStatReply");
-char* _PREHASH_IsPhantom = LLMessageStringTable::getInstance()->getString("IsPhantom");
-char* _PREHASH_AgentList = LLMessageStringTable::getInstance()->getString("AgentList");
-char* _PREHASH_SimApproved = LLMessageStringTable::getInstance()->getString("SimApproved");
-char* _PREHASH_RezObject = LLMessageStringTable::getInstance()->getString("RezObject");
-char* _PREHASH_TaskLocalID = LLMessageStringTable::getInstance()->getString("TaskLocalID");
-char* _PREHASH_ClaimDate = LLMessageStringTable::getInstance()->getString("ClaimDate");
-char* _PREHASH_MergeParcel = LLMessageStringTable::getInstance()->getString("MergeParcel");
-char* _PREHASH_Priority = LLMessageStringTable::getInstance()->getString("Priority");
-char* _PREHASH_QueryText = LLMessageStringTable::getInstance()->getString("QueryText");
-char* _PREHASH_GroupNoticeAdd = LLMessageStringTable::getInstance()->getString("GroupNoticeAdd");
-char* _PREHASH_ReturnType = LLMessageStringTable::getInstance()->getString("ReturnType");
-char* _PREHASH_FetchFolders = LLMessageStringTable::getInstance()->getString("FetchFolders");
-char* _PREHASH_SimulatorPublicHostBlock = LLMessageStringTable::getInstance()->getString("SimulatorPublicHostBlock");
-char* _PREHASH_HeaderData = LLMessageStringTable::getInstance()->getString("HeaderData");
-char* _PREHASH_RequestMultipleObjects = LLMessageStringTable::getInstance()->getString("RequestMultipleObjects");
-char* _PREHASH_RetrieveInstantMessages = LLMessageStringTable::getInstance()->getString("RetrieveInstantMessages");
-char* _PREHASH_OpenCircuit = LLMessageStringTable::getInstance()->getString("OpenCircuit");
-char* _PREHASH_CrossedRegion = LLMessageStringTable::getInstance()->getString("CrossedRegion");
-char* _PREHASH_DirGroupsReply = LLMessageStringTable::getInstance()->getString("DirGroupsReply");
-char* _PREHASH_AvatarGroupsReply = LLMessageStringTable::getInstance()->getString("AvatarGroupsReply");
-char* _PREHASH_EmailMessageReply = LLMessageStringTable::getInstance()->getString("EmailMessageReply");
-char* _PREHASH_GroupVoteHistoryItemReply = LLMessageStringTable::getInstance()->getString("GroupVoteHistoryItemReply");
-char* _PREHASH_ViewerPosition = LLMessageStringTable::getInstance()->getString("ViewerPosition");
-char* _PREHASH_Position = LLMessageStringTable::getInstance()->getString("Position");
-char* _PREHASH_ParentEstate = LLMessageStringTable::getInstance()->getString("ParentEstate");
-char* _PREHASH_EstateName = LLMessageStringTable::getInstance()->getString("EstateName");
-char* _PREHASH_MuteName = LLMessageStringTable::getInstance()->getString("MuteName");
-char* _PREHASH_ParcelRename = LLMessageStringTable::getInstance()->getString("ParcelRename");
-char* _PREHASH_ViewerFilename = LLMessageStringTable::getInstance()->getString("ViewerFilename");
-char* _PREHASH_UserReportInternal = LLMessageStringTable::getInstance()->getString("UserReportInternal");
-char* _PREHASH_AvatarPropertiesRequest = LLMessageStringTable::getInstance()->getString("AvatarPropertiesRequest");
-char* _PREHASH_ParcelPropertiesRequest = LLMessageStringTable::getInstance()->getString("ParcelPropertiesRequest");
-char* _PREHASH_GroupProfileRequest = LLMessageStringTable::getInstance()->getString("GroupProfileRequest");
-char* _PREHASH_AgentDataUpdateRequest = LLMessageStringTable::getInstance()->getString("AgentDataUpdateRequest");
-char* _PREHASH_PriceObjectScaleFactor = LLMessageStringTable::getInstance()->getString("PriceObjectScaleFactor");
-char* _PREHASH_OpenEnrollment = LLMessageStringTable::getInstance()->getString("OpenEnrollment");
-char* _PREHASH_GroupData = LLMessageStringTable::getInstance()->getString("GroupData");
-char* _PREHASH_RequestGodlikePowers = LLMessageStringTable::getInstance()->getString("RequestGodlikePowers");
-char* _PREHASH_GrantGodlikePowers = LLMessageStringTable::getInstance()->getString("GrantGodlikePowers");
-char* _PREHASH_TransactionID = LLMessageStringTable::getInstance()->getString("TransactionID");
-char* _PREHASH_DestinationID = LLMessageStringTable::getInstance()->getString("DestinationID");
-char* _PREHASH_Controls = LLMessageStringTable::getInstance()->getString("Controls");
-char* _PREHASH_FirstDetachAll = LLMessageStringTable::getInstance()->getString("FirstDetachAll");
-char* _PREHASH_EstateID = LLMessageStringTable::getInstance()->getString("EstateID");
-char* _PREHASH_ImprovedInstantMessage = LLMessageStringTable::getInstance()->getString("ImprovedInstantMessage");
-char* _PREHASH_CheckParcelSales = LLMessageStringTable::getInstance()->getString("CheckParcelSales");
-char* _PREHASH_ParcelSales = LLMessageStringTable::getInstance()->getString("ParcelSales");
-char* _PREHASH_CurrentInterval = LLMessageStringTable::getInstance()->getString("CurrentInterval");
-char* _PREHASH_PriceRentLight = LLMessageStringTable::getInstance()->getString("PriceRentLight");
-char* _PREHASH_MediaAutoScale = LLMessageStringTable::getInstance()->getString("MediaAutoScale");
-char* _PREHASH_NeighborBlock = LLMessageStringTable::getInstance()->getString("NeighborBlock");
-char* _PREHASH_LayerData = LLMessageStringTable::getInstance()->getString("LayerData");
-char* _PREHASH_NVPairData = LLMessageStringTable::getInstance()->getString("NVPairData");
-char* _PREHASH_TeleportLocal = LLMessageStringTable::getInstance()->getString("TeleportLocal");
-char* _PREHASH_EjecteeID = LLMessageStringTable::getInstance()->getString("EjecteeID");
-char* _PREHASH_VoteInitiator = LLMessageStringTable::getInstance()->getString("VoteInitiator");
-char* _PREHASH_TypeData = LLMessageStringTable::getInstance()->getString("TypeData");
-char* _PREHASH_OwnerIDs = LLMessageStringTable::getInstance()->getString("OwnerIDs");
-char* _PREHASH_SystemKickUser = LLMessageStringTable::getInstance()->getString("SystemKickUser");
-char* _PREHASH_TransactionTime = LLMessageStringTable::getInstance()->getString("TransactionTime");
-char* _PREHASH_TimeToLive = LLMessageStringTable::getInstance()->getString("TimeToLive");
-char* _PREHASH_OldAgentID = LLMessageStringTable::getInstance()->getString("OldAgentID");
-char* _PREHASH_MusicURL = LLMessageStringTable::getInstance()->getString("MusicURL");
-char* _PREHASH_ParcelPrimBonus = LLMessageStringTable::getInstance()->getString("ParcelPrimBonus");
-char* _PREHASH_EjectUser = LLMessageStringTable::getInstance()->getString("EjectUser");
-char* _PREHASH_CoarseLocationUpdate = LLMessageStringTable::getInstance()->getString("CoarseLocationUpdate");
-char* _PREHASH_ChildAgentPositionUpdate = LLMessageStringTable::getInstance()->getString("ChildAgentPositionUpdate");
-char* _PREHASH_StoreLocal = LLMessageStringTable::getInstance()->getString("StoreLocal");
-char* _PREHASH_GroupName = LLMessageStringTable::getInstance()->getString("GroupName");
-char* _PREHASH_PriceParcelRent = LLMessageStringTable::getInstance()->getString("PriceParcelRent");
-char* _PREHASH_SimStatus = LLMessageStringTable::getInstance()->getString("SimStatus");
-char* _PREHASH_TransactionSuccess = LLMessageStringTable::getInstance()->getString("TransactionSuccess");
-char* _PREHASH_LureType = LLMessageStringTable::getInstance()->getString("LureType");
-char* _PREHASH_GroupMask = LLMessageStringTable::getInstance()->getString("GroupMask");
-char* _PREHASH_SitObject = LLMessageStringTable::getInstance()->getString("SitObject");
-char* _PREHASH_Override = LLMessageStringTable::getInstance()->getString("Override");
-char* _PREHASH_LocomotionState = LLMessageStringTable::getInstance()->getString("LocomotionState");
-char* _PREHASH_PriceUpload = LLMessageStringTable::getInstance()->getString("PriceUpload");
-char* _PREHASH_RemoveParcel = LLMessageStringTable::getInstance()->getString("RemoveParcel");
-char* _PREHASH_ConfirmAuctionStart = LLMessageStringTable::getInstance()->getString("ConfirmAuctionStart");
-char* _PREHASH_RpcScriptRequestInbound = LLMessageStringTable::getInstance()->getString("RpcScriptRequestInbound");
-char* _PREHASH_ActiveGroupID = LLMessageStringTable::getInstance()->getString("ActiveGroupID");
-char* _PREHASH_ParcelReturnObjects = LLMessageStringTable::getInstance()->getString("ParcelReturnObjects");
-char* _PREHASH_TotalObjects = LLMessageStringTable::getInstance()->getString("TotalObjects");
-char* _PREHASH_ObjectExtraParams = LLMessageStringTable::getInstance()->getString("ObjectExtraParams");
-char* _PREHASH_Questions = LLMessageStringTable::getInstance()->getString("Questions");
-char* _PREHASH_TransferAbort = LLMessageStringTable::getInstance()->getString("TransferAbort");
-char* _PREHASH_TransferInventory = LLMessageStringTable::getInstance()->getString("TransferInventory");
-char* _PREHASH_RayTargetID = LLMessageStringTable::getInstance()->getString("RayTargetID");
-char* _PREHASH_ClaimPrice = LLMessageStringTable::getInstance()->getString("ClaimPrice");
-char* _PREHASH_ObjectProperties = LLMessageStringTable::getInstance()->getString("ObjectProperties");
-char* _PREHASH_ParcelProperties = LLMessageStringTable::getInstance()->getString("ParcelProperties");
-char* _PREHASH_EstateOwnerID = LLMessageStringTable::getInstance()->getString("EstateOwnerID");
-char* _PREHASH_LogoutRequest = LLMessageStringTable::getInstance()->getString("LogoutRequest");
-char* _PREHASH_AssetUploadRequest = LLMessageStringTable::getInstance()->getString("AssetUploadRequest");
-char* _PREHASH_TransactionType = LLMessageStringTable::getInstance()->getString("TransactionType");
-char* _PREHASH_AvatarPropertiesUpdate = LLMessageStringTable::getInstance()->getString("AvatarPropertiesUpdate");
-char* _PREHASH_ParcelPropertiesUpdate = LLMessageStringTable::getInstance()->getString("ParcelPropertiesUpdate");
-char* _PREHASH_FetchItems = LLMessageStringTable::getInstance()->getString("FetchItems");
-char* _PREHASH_AbortXfer = LLMessageStringTable::getInstance()->getString("AbortXfer");
-char* _PREHASH_DeRezAck = LLMessageStringTable::getInstance()->getString("DeRezAck");
-char* _PREHASH_TakeControls = LLMessageStringTable::getInstance()->getString("TakeControls");
-char* _PREHASH_DirLandReply = LLMessageStringTable::getInstance()->getString("DirLandReply");
-char* _PREHASH_MuteType = LLMessageStringTable::getInstance()->getString("MuteType");
-char* _PREHASH_IMViaEMail = LLMessageStringTable::getInstance()->getString("IMViaEMail");
-char* _PREHASH_RentPrice = LLMessageStringTable::getInstance()->getString("RentPrice");
-char* _PREHASH_GenericMessage = LLMessageStringTable::getInstance()->getString("GenericMessage");
-char* _PREHASH_ChildAgentAlive = LLMessageStringTable::getInstance()->getString("ChildAgentAlive");
-char* _PREHASH_AssetType = LLMessageStringTable::getInstance()->getString("AssetType");
-char* _PREHASH_SpawnPointBlock = LLMessageStringTable::getInstance()->getString("SpawnPointBlock");
-char* _PREHASH_AttachmentBlock = LLMessageStringTable::getInstance()->getString("AttachmentBlock");
-char* _PREHASH_ObjectMaterial = LLMessageStringTable::getInstance()->getString("ObjectMaterial");
-char* _PREHASH_OwnerName = LLMessageStringTable::getInstance()->getString("OwnerName");
-char* _PREHASH_AvatarNotesReply = LLMessageStringTable::getInstance()->getString("AvatarNotesReply");
-char* _PREHASH_CacheID = LLMessageStringTable::getInstance()->getString("CacheID");
-char* _PREHASH_OwnerMask = LLMessageStringTable::getInstance()->getString("OwnerMask");
-char* _PREHASH_TransferInventoryAck = LLMessageStringTable::getInstance()->getString("TransferInventoryAck");
-char* _PREHASH_RegionDenyAgeUnverified = LLMessageStringTable::getInstance()->getString("RegionDenyAgeUnverified");
-char* _PREHASH_AgeVerificationBlock = LLMessageStringTable::getInstance()->getString("AgeVerificationBlock");
-char* _PREHASH_UCoord = LLMessageStringTable::getInstance()->getString("UCoord");
-char* _PREHASH_VCoord = LLMessageStringTable::getInstance()->getString("VCoord");
-char* _PREHASH_FaceIndex = LLMessageStringTable::getInstance()->getString("FaceIndex");
-char* _PREHASH_StatusData = LLMessageStringTable::getInstance()->getString("StatusData");
-char* _PREHASH_ProductSKU = LLMessageStringTable::getInstance()->getString("ProductSKU");
+char const* const _PREHASH_X = LLMessageStringTable::getInstance()->getString("X");
+char const* const _PREHASH_Y = LLMessageStringTable::getInstance()->getString("Y");
+char const* const _PREHASH_Z = LLMessageStringTable::getInstance()->getString("Z");
+char const* const _PREHASH_AddFlags = LLMessageStringTable::getInstance()->getString("AddFlags");
+char const* const _PREHASH_FailureInfo = LLMessageStringTable::getInstance()->getString("FailureInfo");
+char const* const _PREHASH_MapData = LLMessageStringTable::getInstance()->getString("MapData");
+char const* const _PREHASH_AddItem = LLMessageStringTable::getInstance()->getString("AddItem");
+char const* const _PREHASH_MeanCollision = LLMessageStringTable::getInstance()->getString("MeanCollision");
+char const* const _PREHASH_RezScript = LLMessageStringTable::getInstance()->getString("RezScript");
+char const* const _PREHASH_AvatarSitResponse = LLMessageStringTable::getInstance()->getString("AvatarSitResponse");
+char const* const _PREHASH_InventoryAssetResponse = LLMessageStringTable::getInstance()->getString("InventoryAssetResponse");
+char const* const _PREHASH_KillObject = LLMessageStringTable::getInstance()->getString("KillObject");
+char const* const _PREHASH_ProposalID = LLMessageStringTable::getInstance()->getString("ProposalID");
+char const* const _PREHASH_SerialNum = LLMessageStringTable::getInstance()->getString("SerialNum");
+char const* const _PREHASH_Duration = LLMessageStringTable::getInstance()->getString("Duration");
+char const* const _PREHASH_ScriptQuestion = LLMessageStringTable::getInstance()->getString("ScriptQuestion");
+char const* const _PREHASH_AddCircuitCode = LLMessageStringTable::getInstance()->getString("AddCircuitCode");
+char const* const _PREHASH_UseCircuitCode = LLMessageStringTable::getInstance()->getString("UseCircuitCode");
+char const* const _PREHASH_ViewerCircuitCode = LLMessageStringTable::getInstance()->getString("ViewerCircuitCode");
+char const* const _PREHASH_ScriptAnswerYes = LLMessageStringTable::getInstance()->getString("ScriptAnswerYes");
+char const* const _PREHASH_PartnerID = LLMessageStringTable::getInstance()->getString("PartnerID");
+char const* const _PREHASH_DirLandQuery = LLMessageStringTable::getInstance()->getString("DirLandQuery");
+char const* const _PREHASH_TeleportStart = LLMessageStringTable::getInstance()->getString("TeleportStart");
+char const* const _PREHASH_AboutText = LLMessageStringTable::getInstance()->getString("AboutText");
+char const* const _PREHASH_VisualParam = LLMessageStringTable::getInstance()->getString("VisualParam");
+char const* const _PREHASH_GroupPrims = LLMessageStringTable::getInstance()->getString("GroupPrims");
+char const* const _PREHASH_SelectedPrims = LLMessageStringTable::getInstance()->getString("SelectedPrims");
+char const* const _PREHASH_ID = LLMessageStringTable::getInstance()->getString("ID");
+char const* const _PREHASH_UUIDNameRequest = LLMessageStringTable::getInstance()->getString("UUIDNameRequest");
+char const* const _PREHASH_UUIDGroupNameRequest = LLMessageStringTable::getInstance()->getString("UUIDGroupNameRequest");
+char const* const _PREHASH_GroupAccountTransactionsRequest = LLMessageStringTable::getInstance()->getString("GroupAccountTransactionsRequest");
+char const* const _PREHASH_MapNameRequest = LLMessageStringTable::getInstance()->getString("MapNameRequest");
+char const* const _PREHASH_UpdateSimulator = LLMessageStringTable::getInstance()->getString("UpdateSimulator");
+char const* const _PREHASH_BillableFactor = LLMessageStringTable::getInstance()->getString("BillableFactor");
+char const* const _PREHASH_ObjectBonusFactor = LLMessageStringTable::getInstance()->getString("ObjectBonusFactor");
+char const* const _PREHASH_EnableSimulator = LLMessageStringTable::getInstance()->getString("EnableSimulator");
+char const* const _PREHASH_DisableSimulator = LLMessageStringTable::getInstance()->getString("DisableSimulator");
+char const* const _PREHASH_ConfirmEnableSimulator = LLMessageStringTable::getInstance()->getString("ConfirmEnableSimulator");
+char const* const _PREHASH_LayerType = LLMessageStringTable::getInstance()->getString("LayerType");
+char const* const _PREHASH_OwnerRole = LLMessageStringTable::getInstance()->getString("OwnerRole");
+char const* const _PREHASH_ParcelOverlay = LLMessageStringTable::getInstance()->getString("ParcelOverlay");
+char const* const _PREHASH_GroupOwned = LLMessageStringTable::getInstance()->getString("GroupOwned");
+char const* const _PREHASH_IP = LLMessageStringTable::getInstance()->getString("IP");
+char const* const _PREHASH_ChatFromViewer = LLMessageStringTable::getInstance()->getString("ChatFromViewer");
+char const* const _PREHASH_AvgAgentsInView = LLMessageStringTable::getInstance()->getString("AvgAgentsInView");
+char const* const _PREHASH_AgentsInView = LLMessageStringTable::getInstance()->getString("AgentsInView");
+char const* const _PREHASH_GroupTitle = LLMessageStringTable::getInstance()->getString("GroupTitle");
+char const* const _PREHASH_MapLayerReply = LLMessageStringTable::getInstance()->getString("MapLayerReply");
+char const* const _PREHASH_CompoundMsgID = LLMessageStringTable::getInstance()->getString("CompoundMsgID");
+char const* const _PREHASH_CameraConstraint = LLMessageStringTable::getInstance()->getString("CameraConstraint");
+char const* const _PREHASH_DownloadTotals = LLMessageStringTable::getInstance()->getString("DownloadTotals");
+char const* const _PREHASH_GenCounter = LLMessageStringTable::getInstance()->getString("GenCounter");
+char const* const _PREHASH_FrozenData = LLMessageStringTable::getInstance()->getString("FrozenData");
+char const* const _PREHASH_ChildAgentDying = LLMessageStringTable::getInstance()->getString("ChildAgentDying");
+char const* const _PREHASH_To = LLMessageStringTable::getInstance()->getString("To");
+char const* const _PREHASH_CopyInventoryFromNotecard = LLMessageStringTable::getInstance()->getString("CopyInventoryFromNotecard");
+char const* const _PREHASH_RezObjectFromNotecard = LLMessageStringTable::getInstance()->getString("RezObjectFromNotecard");
+char const* const _PREHASH_ParcelDirFeeCurrent = LLMessageStringTable::getInstance()->getString("ParcelDirFeeCurrent");
+char const* const _PREHASH_SeedCapability = LLMessageStringTable::getInstance()->getString("SeedCapability");
+char const* const _PREHASH_ObjectDuplicate = LLMessageStringTable::getInstance()->getString("ObjectDuplicate");
+char const* const _PREHASH_InventoryData = LLMessageStringTable::getInstance()->getString("InventoryData");
+char const* const _PREHASH_ReplyData = LLMessageStringTable::getInstance()->getString("ReplyData");
+char const* const _PREHASH_ResetList = LLMessageStringTable::getInstance()->getString("ResetList");
+char const* const _PREHASH_MediaID = LLMessageStringTable::getInstance()->getString("MediaID");
+char const* const _PREHASH_RelatedRights = LLMessageStringTable::getInstance()->getString("RelatedRights");
+char const* const _PREHASH_RedirectGridX = LLMessageStringTable::getInstance()->getString("RedirectGridX");
+char const* const _PREHASH_RedirectGridY = LLMessageStringTable::getInstance()->getString("RedirectGridY");
+char const* const _PREHASH_TransferID = LLMessageStringTable::getInstance()->getString("TransferID");
+char const* const _PREHASH_TexturesChanged = LLMessageStringTable::getInstance()->getString("TexturesChanged");
+char const* const _PREHASH_UserLookAt = LLMessageStringTable::getInstance()->getString("UserLookAt");
+char const* const _PREHASH_TestBlock1 = LLMessageStringTable::getInstance()->getString("TestBlock1");
+char const* const _PREHASH_SensedData = LLMessageStringTable::getInstance()->getString("SensedData");
+char const* const _PREHASH_UpdateBlock = LLMessageStringTable::getInstance()->getString("UpdateBlock");
+char const* const _PREHASH_ClassifiedGodDelete = LLMessageStringTable::getInstance()->getString("ClassifiedGodDelete");
+char const* const _PREHASH_ObjectGrabUpdate = LLMessageStringTable::getInstance()->getString("ObjectGrabUpdate");
+char const* const _PREHASH_LocationPos = LLMessageStringTable::getInstance()->getString("LocationPos");
+char const* const _PREHASH_TaxDate = LLMessageStringTable::getInstance()->getString("TaxDate");
+char const* const _PREHASH_StartDateTime = LLMessageStringTable::getInstance()->getString("StartDateTime");
+char const* const _PREHASH_ObjectUpdateCached = LLMessageStringTable::getInstance()->getString("ObjectUpdateCached");
+char const* const _PREHASH_Packets = LLMessageStringTable::getInstance()->getString("Packets");
+char const* const _PREHASH_FailureType = LLMessageStringTable::getInstance()->getString("FailureType");
+char const* const _PREHASH_UpdateGroupInfo = LLMessageStringTable::getInstance()->getString("UpdateGroupInfo");
+char const* const _PREHASH_ObjectPermissions = LLMessageStringTable::getInstance()->getString("ObjectPermissions");
+char const* const _PREHASH_RevokePermissions = LLMessageStringTable::getInstance()->getString("RevokePermissions");
+char const* const _PREHASH_UpdateFlags = LLMessageStringTable::getInstance()->getString("UpdateFlags");
+char const* const _PREHASH_ObjectExportSelected = LLMessageStringTable::getInstance()->getString("ObjectExportSelected");
+char const* const _PREHASH_RezSelected = LLMessageStringTable::getInstance()->getString("RezSelected");
+char const* const _PREHASH_AutoPilot = LLMessageStringTable::getInstance()->getString("AutoPilot");
+char const* const _PREHASH_UpdateMuteListEntry = LLMessageStringTable::getInstance()->getString("UpdateMuteListEntry");
+char const* const _PREHASH_RemoveMuteListEntry = LLMessageStringTable::getInstance()->getString("RemoveMuteListEntry");
+char const* const _PREHASH_SetSimStatusInDatabase = LLMessageStringTable::getInstance()->getString("SetSimStatusInDatabase");
+char const* const _PREHASH_SetSimPresenceInDatabase = LLMessageStringTable::getInstance()->getString("SetSimPresenceInDatabase");
+char const* const _PREHASH_CameraProperty = LLMessageStringTable::getInstance()->getString("CameraProperty");
+char const* const _PREHASH_BrushSize = LLMessageStringTable::getInstance()->getString("BrushSize");
+char const* const _PREHASH_SimulatorSetMap = LLMessageStringTable::getInstance()->getString("SimulatorSetMap");
+char const* const _PREHASH_RegionPresenceRequestByRegionID = LLMessageStringTable::getInstance()->getString("RegionPresenceRequestByRegionID");
+char const* const _PREHASH_ParcelObjectOwnersReply = LLMessageStringTable::getInstance()->getString("ParcelObjectOwnersReply");
+char const* const _PREHASH_GroupMembersReply = LLMessageStringTable::getInstance()->getString("GroupMembersReply");
+char const* const _PREHASH_GroupRoleMembersReply = LLMessageStringTable::getInstance()->getString("GroupRoleMembersReply");
+char const* const _PREHASH_RequestRegionInfo = LLMessageStringTable::getInstance()->getString("RequestRegionInfo");
+char const* const _PREHASH_AABBMax = LLMessageStringTable::getInstance()->getString("AABBMax");
+char const* const _PREHASH_RequestPayPrice = LLMessageStringTable::getInstance()->getString("RequestPayPrice");
+char const* const _PREHASH_SimulatorPresentAtLocation = LLMessageStringTable::getInstance()->getString("SimulatorPresentAtLocation");
+char const* const _PREHASH_AgentRequestSit = LLMessageStringTable::getInstance()->getString("AgentRequestSit");
+char const* const _PREHASH_AABBMin = LLMessageStringTable::getInstance()->getString("AABBMin");
+char const* const _PREHASH_ClassifiedFlags = LLMessageStringTable::getInstance()->getString("ClassifiedFlags");
+char const* const _PREHASH_ControlFlags = LLMessageStringTable::getInstance()->getString("ControlFlags");
+char const* const _PREHASH_TeleportRequest = LLMessageStringTable::getInstance()->getString("TeleportRequest");
+char const* const _PREHASH_ScriptTeleportRequest = LLMessageStringTable::getInstance()->getString("ScriptTeleportRequest");
+char const* const _PREHASH_EstateCovenantRequest = LLMessageStringTable::getInstance()->getString("EstateCovenantRequest");
+char const* const _PREHASH_DateUTC = LLMessageStringTable::getInstance()->getString("DateUTC");
+char const* const _PREHASH_TaskIDs = LLMessageStringTable::getInstance()->getString("TaskIDs");
+char const* const _PREHASH_RequestResult = LLMessageStringTable::getInstance()->getString("RequestResult");
+char const* const _PREHASH_CanAcceptAgents = LLMessageStringTable::getInstance()->getString("CanAcceptAgents");
+char const* const _PREHASH_ObjectSaleInfo = LLMessageStringTable::getInstance()->getString("ObjectSaleInfo");
+char const* const _PREHASH_KillChildAgents = LLMessageStringTable::getInstance()->getString("KillChildAgents");
+char const* const _PREHASH_Balance = LLMessageStringTable::getInstance()->getString("Balance");
+char const* const _PREHASH_DerezContainer = LLMessageStringTable::getInstance()->getString("DerezContainer");
+char const* const _PREHASH_ObjectData = LLMessageStringTable::getInstance()->getString("ObjectData");
+char const* const _PREHASH_CameraAtAxis = LLMessageStringTable::getInstance()->getString("CameraAtAxis");
+char const* const _PREHASH_InfoBlock = LLMessageStringTable::getInstance()->getString("InfoBlock");
+char const* const _PREHASH_OwnershipCost = LLMessageStringTable::getInstance()->getString("OwnershipCost");
+char const* const _PREHASH_AvatarNotesUpdate = LLMessageStringTable::getInstance()->getString("AvatarNotesUpdate");
+char const* const _PREHASH_PID = LLMessageStringTable::getInstance()->getString("PID");
+char const* const _PREHASH_DirPopularReply = LLMessageStringTable::getInstance()->getString("DirPopularReply");
+char const* const _PREHASH_TerrainHeightRange00 = LLMessageStringTable::getInstance()->getString("TerrainHeightRange00");
+char const* const _PREHASH_SimData = LLMessageStringTable::getInstance()->getString("SimData");
+char const* const _PREHASH_TerrainHeightRange01 = LLMessageStringTable::getInstance()->getString("TerrainHeightRange01");
+char const* const _PREHASH_TerrainHeightRange10 = LLMessageStringTable::getInstance()->getString("TerrainHeightRange10");
+char const* const _PREHASH_TerrainHeightRange11 = LLMessageStringTable::getInstance()->getString("TerrainHeightRange11");
+char const* const _PREHASH_UpdateInventoryItem = LLMessageStringTable::getInstance()->getString("UpdateInventoryItem");
+char const* const _PREHASH_UpdateCreateInventoryItem = LLMessageStringTable::getInstance()->getString("UpdateCreateInventoryItem");
+char const* const _PREHASH_MoveInventoryItem = LLMessageStringTable::getInstance()->getString("MoveInventoryItem");
+char const* const _PREHASH_CopyInventoryItem = LLMessageStringTable::getInstance()->getString("CopyInventoryItem");
+char const* const _PREHASH_LinkInventoryItem = LLMessageStringTable::getInstance()->getString("LinkInventoryItem");
+char const* const _PREHASH_RemoveInventoryItem = LLMessageStringTable::getInstance()->getString("RemoveInventoryItem");
+char const* const _PREHASH_CreateInventoryItem = LLMessageStringTable::getInstance()->getString("CreateInventoryItem");
+char const* const _PREHASH_PathTwistBegin = LLMessageStringTable::getInstance()->getString("PathTwistBegin");
+char const* const _PREHASH_CRC = LLMessageStringTable::getInstance()->getString("CRC");
+char const* const _PREHASH_AttachmentPoint = LLMessageStringTable::getInstance()->getString("AttachmentPoint");
+char const* const _PREHASH_TelehubBlock = LLMessageStringTable::getInstance()->getString("TelehubBlock");
+char const* const _PREHASH_FOVBlock = LLMessageStringTable::getInstance()->getString("FOVBlock");
+char const* const _PREHASH_StartLocationData = LLMessageStringTable::getInstance()->getString("StartLocationData");
+char const* const _PREHASH_PositionData = LLMessageStringTable::getInstance()->getString("PositionData");
+char const* const _PREHASH_TimeSinceLast = LLMessageStringTable::getInstance()->getString("TimeSinceLast");
+char const* const _PREHASH_MapImage = LLMessageStringTable::getInstance()->getString("MapImage");
+char const* const _PREHASH_Objects = LLMessageStringTable::getInstance()->getString("Objects");
+char const* const _PREHASH_URL = LLMessageStringTable::getInstance()->getString("URL");
+char const* const _PREHASH_CreationDate = LLMessageStringTable::getInstance()->getString("CreationDate");
+char const* const _PREHASH_JointPivot = LLMessageStringTable::getInstance()->getString("JointPivot");
+char const* const _PREHASH_FPS = LLMessageStringTable::getInstance()->getString("FPS");
+char const* const _PREHASH_HasTelehub = LLMessageStringTable::getInstance()->getString("HasTelehub");
+char const* const _PREHASH_PathEnd = LLMessageStringTable::getInstance()->getString("PathEnd");
+char const* const _PREHASH_ScriptDataReply = LLMessageStringTable::getInstance()->getString("ScriptDataReply");
+char const* const _PREHASH_MapBlockReply = LLMessageStringTable::getInstance()->getString("MapBlockReply");
+char const* const _PREHASH_PropertiesData = LLMessageStringTable::getInstance()->getString("PropertiesData");
+char const* const _PREHASH_ViewerEffect = LLMessageStringTable::getInstance()->getString("ViewerEffect");
+char const* const _PREHASH_FreezeUser = LLMessageStringTable::getInstance()->getString("FreezeUser");
+char const* const _PREHASH_OwnerPrims = LLMessageStringTable::getInstance()->getString("OwnerPrims");
+char const* const _PREHASH_ObjectGrab = LLMessageStringTable::getInstance()->getString("ObjectGrab");
+char const* const _PREHASH_ToAgentID = LLMessageStringTable::getInstance()->getString("ToAgentID");
+char const* const _PREHASH_SimulatorMapUpdate = LLMessageStringTable::getInstance()->getString("SimulatorMapUpdate");
+char const* const _PREHASH_TransferPacket = LLMessageStringTable::getInstance()->getString("TransferPacket");
+char const* const _PREHASH_ObjectName = LLMessageStringTable::getInstance()->getString("ObjectName");
+char const* const _PREHASH_GroupPowers = LLMessageStringTable::getInstance()->getString("GroupPowers");
+char const* const _PREHASH_OriginalName = LLMessageStringTable::getInstance()->getString("OriginalName");
+char const* const _PREHASH_CompletePingCheck = LLMessageStringTable::getInstance()->getString("CompletePingCheck");
+char const* const _PREHASH_OnlineStatus = LLMessageStringTable::getInstance()->getString("OnlineStatus");
+char const* const _PREHASH_ObjectDrop = LLMessageStringTable::getInstance()->getString("ObjectDrop");
+char const* const _PREHASH_UseBigPackets = LLMessageStringTable::getInstance()->getString("UseBigPackets");
+char const* const _PREHASH_GroupNoticesListReply = LLMessageStringTable::getInstance()->getString("GroupNoticesListReply");
+char const* const _PREHASH_ParcelAccessListReply = LLMessageStringTable::getInstance()->getString("ParcelAccessListReply");
+char const* const _PREHASH_RpcChannelReply = LLMessageStringTable::getInstance()->getString("RpcChannelReply");
+char const* const _PREHASH_RegionPresenceResponse = LLMessageStringTable::getInstance()->getString("RegionPresenceResponse");
+char const* const _PREHASH_CharterMember = LLMessageStringTable::getInstance()->getString("CharterMember");
+char const* const _PREHASH_EdgeData = LLMessageStringTable::getInstance()->getString("EdgeData");
+char const* const _PREHASH_NameData = LLMessageStringTable::getInstance()->getString("NameData");
+char const* const _PREHASH_RegionPushOverride = LLMessageStringTable::getInstance()->getString("RegionPushOverride");
+char const* const _PREHASH_SimName = LLMessageStringTable::getInstance()->getString("SimName");
+char const* const _PREHASH_UserReport = LLMessageStringTable::getInstance()->getString("UserReport");
+char const* const _PREHASH_DownloadPriority = LLMessageStringTable::getInstance()->getString("DownloadPriority");
+char const* const _PREHASH_ToAgentId = LLMessageStringTable::getInstance()->getString("ToAgentId");
+char const* const _PREHASH_DirPopularQuery = LLMessageStringTable::getInstance()->getString("DirPopularQuery");
+char const* const _PREHASH_Mag = LLMessageStringTable::getInstance()->getString("Mag");
+char const* const _PREHASH_ParcelPropertiesRequestByID = LLMessageStringTable::getInstance()->getString("ParcelPropertiesRequestByID");
+char const* const _PREHASH_ObjectLink = LLMessageStringTable::getInstance()->getString("ObjectLink");
+char const* const _PREHASH_RpcScriptReplyInbound = LLMessageStringTable::getInstance()->getString("RpcScriptReplyInbound");
+char const* const _PREHASH_RezData = LLMessageStringTable::getInstance()->getString("RezData");
+char const* const _PREHASH_RemoveInventoryObjects = LLMessageStringTable::getInstance()->getString("RemoveInventoryObjects");
+char const* const _PREHASH_GroupProposalBallot = LLMessageStringTable::getInstance()->getString("GroupProposalBallot");
+char const* const _PREHASH_RPCServerIP = LLMessageStringTable::getInstance()->getString("RPCServerIP");
+char const* const _PREHASH_Far = LLMessageStringTable::getInstance()->getString("Far");
+char const* const _PREHASH_GodSessionID = LLMessageStringTable::getInstance()->getString("GodSessionID");
+char const* const _PREHASH_FLAboutText = LLMessageStringTable::getInstance()->getString("FLAboutText");
+char const* const _PREHASH_RegionHandshakeReply = LLMessageStringTable::getInstance()->getString("RegionHandshakeReply");
+char const* const _PREHASH_GroupActiveProposalItemReply = LLMessageStringTable::getInstance()->getString("GroupActiveProposalItemReply");
+char const* const _PREHASH_MapItemReply = LLMessageStringTable::getInstance()->getString("MapItemReply");
+char const* const _PREHASH_Seconds = LLMessageStringTable::getInstance()->getString("Seconds");
+char const* const _PREHASH_UpdateUserInfo = LLMessageStringTable::getInstance()->getString("UpdateUserInfo");
+char const* const _PREHASH_AggregatePermTexturesOwner = LLMessageStringTable::getInstance()->getString("AggregatePermTexturesOwner");
+char const* const _PREHASH_Set = LLMessageStringTable::getInstance()->getString("Set");
+char const* const _PREHASH_NewName = LLMessageStringTable::getInstance()->getString("NewName");
+char const* const _PREHASH_Key = LLMessageStringTable::getInstance()->getString("Key");
+char const* const _PREHASH_AgentID = LLMessageStringTable::getInstance()->getString("AgentID");
+char const* const _PREHASH_EventNotificationRemoveRequest = LLMessageStringTable::getInstance()->getString("EventNotificationRemoveRequest");
+char const* const _PREHASH_NewFolderID = LLMessageStringTable::getInstance()->getString("NewFolderID");
+char const* const _PREHASH_Arc = LLMessageStringTable::getInstance()->getString("Arc");
+char const* const _PREHASH_RegionX = LLMessageStringTable::getInstance()->getString("RegionX");
+char const* const _PREHASH_RegionY = LLMessageStringTable::getInstance()->getString("RegionY");
+char const* const _PREHASH_RequestData = LLMessageStringTable::getInstance()->getString("RequestData");
+char const* const _PREHASH_Msg = LLMessageStringTable::getInstance()->getString("Msg");
+char const* const _PREHASH_Top = LLMessageStringTable::getInstance()->getString("Top");
+char const* const _PREHASH_MiscStats = LLMessageStringTable::getInstance()->getString("MiscStats");
+char const* const _PREHASH_ImageID = LLMessageStringTable::getInstance()->getString("ImageID");
+char const* const _PREHASH_DataPacket = LLMessageStringTable::getInstance()->getString("DataPacket");
+char const* const _PREHASH_You = LLMessageStringTable::getInstance()->getString("You");
+char const* const _PREHASH_ScriptControlChange = LLMessageStringTable::getInstance()->getString("ScriptControlChange");
+char const* const _PREHASH_LoadURL = LLMessageStringTable::getInstance()->getString("LoadURL");
+char const* const _PREHASH_SetCPURatio = LLMessageStringTable::getInstance()->getString("SetCPURatio");
+char const* const _PREHASH_NameValueData = LLMessageStringTable::getInstance()->getString("NameValueData");
+char const* const _PREHASH_AtomicPassObject = LLMessageStringTable::getInstance()->getString("AtomicPassObject");
+char const* const _PREHASH_ErrorMessage = LLMessageStringTable::getInstance()->getString("ErrorMessage");
+char const* const _PREHASH_ViewerFrozenMessage = LLMessageStringTable::getInstance()->getString("ViewerFrozenMessage");
+char const* const _PREHASH_HealthMessage = LLMessageStringTable::getInstance()->getString("HealthMessage");
+char const* const _PREHASH_LogTextMessage = LLMessageStringTable::getInstance()->getString("LogTextMessage");
+char const* const _PREHASH_TimeDilation = LLMessageStringTable::getInstance()->getString("TimeDilation");
+char const* const _PREHASH_RemoveContribution = LLMessageStringTable::getInstance()->getString("RemoveContribution");
+char const* const _PREHASH_Contribution = LLMessageStringTable::getInstance()->getString("Contribution");
+char const* const _PREHASH_SetGroupContribution = LLMessageStringTable::getInstance()->getString("SetGroupContribution");
+char const* const _PREHASH_Offline = LLMessageStringTable::getInstance()->getString("Offline");
+char const* const _PREHASH_AgentIsNowWearing = LLMessageStringTable::getInstance()->getString("AgentIsNowWearing");
+char const* const _PREHASH_Members = LLMessageStringTable::getInstance()->getString("Members");
+char const* const _PREHASH_FailedResends = LLMessageStringTable::getInstance()->getString("FailedResends");
+char const* const _PREHASH_SecPerDay = LLMessageStringTable::getInstance()->getString("SecPerDay");
+char const* const _PREHASH_CameraCenter = LLMessageStringTable::getInstance()->getString("CameraCenter");
+char const* const _PREHASH_CameraLeftAxis = LLMessageStringTable::getInstance()->getString("CameraLeftAxis");
+char const* const _PREHASH_ExBlock = LLMessageStringTable::getInstance()->getString("ExBlock");
+char const* const _PREHASH_Channel = LLMessageStringTable::getInstance()->getString("Channel");
+char const* const _PREHASH_NetTest = LLMessageStringTable::getInstance()->getString("NetTest");
+char const* const _PREHASH_DiscardLevel = LLMessageStringTable::getInstance()->getString("DiscardLevel");
+char const* const _PREHASH_LayerID = LLMessageStringTable::getInstance()->getString("LayerID");
+char const* const _PREHASH_GrabOffset = LLMessageStringTable::getInstance()->getString("GrabOffset");
+char const* const _PREHASH_SimPort = LLMessageStringTable::getInstance()->getString("SimPort");
+char const* const _PREHASH_PricePerMeter = LLMessageStringTable::getInstance()->getString("PricePerMeter");
+char const* const _PREHASH_RegionFlags = LLMessageStringTable::getInstance()->getString("RegionFlags");
+char const* const _PREHASH_VoteResult = LLMessageStringTable::getInstance()->getString("VoteResult");
+char const* const _PREHASH_ParcelDirFeeEstimate = LLMessageStringTable::getInstance()->getString("ParcelDirFeeEstimate");
+char const* const _PREHASH_ModifyBlock = LLMessageStringTable::getInstance()->getString("ModifyBlock");
+char const* const _PREHASH_InventoryBlock = LLMessageStringTable::getInstance()->getString("InventoryBlock");
+char const* const _PREHASH_ReplyBlock = LLMessageStringTable::getInstance()->getString("ReplyBlock");
+char const* const _PREHASH_ValidUntil = LLMessageStringTable::getInstance()->getString("ValidUntil");
+char const* const _PREHASH_VelocityInterpolateOn = LLMessageStringTable::getInstance()->getString("VelocityInterpolateOn");
+char const* const _PREHASH_ClassifiedDelete = LLMessageStringTable::getInstance()->getString("ClassifiedDelete");
+char const* const _PREHASH_RegionDenyAnonymous = LLMessageStringTable::getInstance()->getString("RegionDenyAnonymous");
+char const* const _PREHASH_FLImageID = LLMessageStringTable::getInstance()->getString("FLImageID");
+char const* const _PREHASH_AllowPublish = LLMessageStringTable::getInstance()->getString("AllowPublish");
+char const* const _PREHASH_SitName = LLMessageStringTable::getInstance()->getString("SitName");
+char const* const _PREHASH_RegionsVisited = LLMessageStringTable::getInstance()->getString("RegionsVisited");
+char const* const _PREHASH_DirClassifiedReply = LLMessageStringTable::getInstance()->getString("DirClassifiedReply");
+char const* const _PREHASH_AvatarClassifiedReply = LLMessageStringTable::getInstance()->getString("AvatarClassifiedReply");
+char const* const _PREHASH_MediaURL = LLMessageStringTable::getInstance()->getString("MediaURL");
+char const* const _PREHASH_CompleteAgentMovement = LLMessageStringTable::getInstance()->getString("CompleteAgentMovement");
+char const* const _PREHASH_ClassifiedID = LLMessageStringTable::getInstance()->getString("ClassifiedID");
+char const* const _PREHASH_LocalID = LLMessageStringTable::getInstance()->getString("LocalID");
+char const* const _PREHASH_SpaceIP = LLMessageStringTable::getInstance()->getString("SpaceIP");
+char const* const _PREHASH_RemoveItem = LLMessageStringTable::getInstance()->getString("RemoveItem");
+char const* const _PREHASH_LogFailedMoneyTransaction = LLMessageStringTable::getInstance()->getString("LogFailedMoneyTransaction");
+char const* const _PREHASH_ViewerStartAuction = LLMessageStringTable::getInstance()->getString("ViewerStartAuction");
+char const* const _PREHASH_StartAuction = LLMessageStringTable::getInstance()->getString("StartAuction");
+char const* const _PREHASH_DuplicateFlags = LLMessageStringTable::getInstance()->getString("DuplicateFlags");
+char const* const _PREHASH_RegionInfo2 = LLMessageStringTable::getInstance()->getString("RegionInfo2");
+char const* const _PREHASH_TextColor = LLMessageStringTable::getInstance()->getString("TextColor");
+char const* const _PREHASH_SlaveID = LLMessageStringTable::getInstance()->getString("SlaveID");
+char const* const _PREHASH_Charter = LLMessageStringTable::getInstance()->getString("Charter");
+char const* const _PREHASH_AlertData = LLMessageStringTable::getInstance()->getString("AlertData");
+char const* const _PREHASH_AlertInfo = LLMessageStringTable::getInstance()->getString("AlertInfo");
+char const* const _PREHASH_TargetBlock = LLMessageStringTable::getInstance()->getString("TargetBlock");
+char const* const _PREHASH_CheckParcelAuctions = LLMessageStringTable::getInstance()->getString("CheckParcelAuctions");
+char const* const _PREHASH_ParcelAuctions = LLMessageStringTable::getInstance()->getString("ParcelAuctions");
+char const* const _PREHASH_OwnerIsGroup = LLMessageStringTable::getInstance()->getString("OwnerIsGroup");
+char const* const _PREHASH_NameValuePair = LLMessageStringTable::getInstance()->getString("NameValuePair");
+char const* const _PREHASH_RemoveNameValuePair = LLMessageStringTable::getInstance()->getString("RemoveNameValuePair");
+char const* const _PREHASH_BulkUpdateInventory = LLMessageStringTable::getInstance()->getString("BulkUpdateInventory");
+char const* const _PREHASH_UpdateTaskInventory = LLMessageStringTable::getInstance()->getString("UpdateTaskInventory");
+char const* const _PREHASH_RemoveTaskInventory = LLMessageStringTable::getInstance()->getString("RemoveTaskInventory");
+char const* const _PREHASH_MoveTaskInventory = LLMessageStringTable::getInstance()->getString("MoveTaskInventory");
+char const* const _PREHASH_RequestTaskInventory = LLMessageStringTable::getInstance()->getString("RequestTaskInventory");
+char const* const _PREHASH_ReplyTaskInventory = LLMessageStringTable::getInstance()->getString("ReplyTaskInventory");
+char const* const _PREHASH_AggregatePermInventory = LLMessageStringTable::getInstance()->getString("AggregatePermInventory");
+char const* const _PREHASH_GroupAccountTransactionsReply = LLMessageStringTable::getInstance()->getString("GroupAccountTransactionsReply");
+char const* const _PREHASH_SimulatorInfo = LLMessageStringTable::getInstance()->getString("SimulatorInfo");
+char const* const _PREHASH_WearableData = LLMessageStringTable::getInstance()->getString("WearableData");
+char const* const _PREHASH_Enabled = LLMessageStringTable::getInstance()->getString("Enabled");
+char const* const _PREHASH_Savings = LLMessageStringTable::getInstance()->getString("Savings");
+char const* const _PREHASH_SimulatorLoad = LLMessageStringTable::getInstance()->getString("SimulatorLoad");
+char const* const _PREHASH_InternalRegionIP = LLMessageStringTable::getInstance()->getString("InternalRegionIP");
+char const* const _PREHASH_ExternalRegionIP = LLMessageStringTable::getInstance()->getString("ExternalRegionIP");
+char const* const _PREHASH_TotalPairs = LLMessageStringTable::getInstance()->getString("TotalPairs");
+char const* const _PREHASH_CreateGroupRequest = LLMessageStringTable::getInstance()->getString("CreateGroupRequest");
+char const* const _PREHASH_JoinGroupRequest = LLMessageStringTable::getInstance()->getString("JoinGroupRequest");
+char const* const _PREHASH_LeaveGroupRequest = LLMessageStringTable::getInstance()->getString("LeaveGroupRequest");
+char const* const _PREHASH_InviteGroupRequest = LLMessageStringTable::getInstance()->getString("InviteGroupRequest");
+char const* const _PREHASH_LiveHelpGroupRequest = LLMessageStringTable::getInstance()->getString("LiveHelpGroupRequest");
+char const* const _PREHASH_PriceParcelClaimFactor = LLMessageStringTable::getInstance()->getString("PriceParcelClaimFactor");
+char const* const _PREHASH_BillableArea = LLMessageStringTable::getInstance()->getString("BillableArea");
+char const* const _PREHASH_ObjectID = LLMessageStringTable::getInstance()->getString("ObjectID");
+char const* const _PREHASH_ObjectFlagUpdate = LLMessageStringTable::getInstance()->getString("ObjectFlagUpdate");
+char const* const _PREHASH_GroupRoleUpdate = LLMessageStringTable::getInstance()->getString("GroupRoleUpdate");
+char const* const _PREHASH_RequestInventoryAsset = LLMessageStringTable::getInstance()->getString("RequestInventoryAsset");
+char const* const _PREHASH_ChangedGrid = LLMessageStringTable::getInstance()->getString("ChangedGrid");
+char const* const _PREHASH_AgentDropGroup = LLMessageStringTable::getInstance()->getString("AgentDropGroup");
+char const* const _PREHASH_Details = LLMessageStringTable::getInstance()->getString("Details");
+char const* const _PREHASH_LocationX = LLMessageStringTable::getInstance()->getString("LocationX");
+char const* const _PREHASH_SaleType = LLMessageStringTable::getInstance()->getString("SaleType");
+char const* const _PREHASH_LocationY = LLMessageStringTable::getInstance()->getString("LocationY");
+char const* const _PREHASH_LocationZ = LLMessageStringTable::getInstance()->getString("LocationZ");
+char const* const _PREHASH_EconomyData = LLMessageStringTable::getInstance()->getString("EconomyData");
+char const* const _PREHASH_HeadRotation = LLMessageStringTable::getInstance()->getString("HeadRotation");
+char const* const _PREHASH_DeleteOnCompletion = LLMessageStringTable::getInstance()->getString("DeleteOnCompletion");
+char const* const _PREHASH_PublicPort = LLMessageStringTable::getInstance()->getString("PublicPort");
+char const* const _PREHASH_DirClassifiedQuery = LLMessageStringTable::getInstance()->getString("DirClassifiedQuery");
+char const* const _PREHASH_CallbackID = LLMessageStringTable::getInstance()->getString("CallbackID");
+char const* const _PREHASH_RequestParcelTransfer = LLMessageStringTable::getInstance()->getString("RequestParcelTransfer");
+char const* const _PREHASH_RoleCount = LLMessageStringTable::getInstance()->getString("RoleCount");
+char const* const _PREHASH_ObjectCapacity = LLMessageStringTable::getInstance()->getString("ObjectCapacity");
+char const* const _PREHASH_RequestID = LLMessageStringTable::getInstance()->getString("RequestID");
+char const* const _PREHASH_RequestXfer = LLMessageStringTable::getInstance()->getString("RequestXfer");
+char const* const _PREHASH_ObjectTaxCurrent = LLMessageStringTable::getInstance()->getString("ObjectTaxCurrent");
+char const* const _PREHASH_LightTaxCurrent = LLMessageStringTable::getInstance()->getString("LightTaxCurrent");
+char const* const _PREHASH_LandTaxCurrent = LLMessageStringTable::getInstance()->getString("LandTaxCurrent");
+char const* const _PREHASH_GroupTaxCurrent = LLMessageStringTable::getInstance()->getString("GroupTaxCurrent");
+char const* const _PREHASH_FetchInventoryDescendents = LLMessageStringTable::getInstance()->getString("FetchInventoryDescendents");
+char const* const _PREHASH_InventoryDescendents = LLMessageStringTable::getInstance()->getString("InventoryDescendents");
+char const* const _PREHASH_Descendents = LLMessageStringTable::getInstance()->getString("Descendents");
+char const* const _PREHASH_PurgeInventoryDescendents = LLMessageStringTable::getInstance()->getString("PurgeInventoryDescendents");
+char const* const _PREHASH_ShowDir = LLMessageStringTable::getInstance()->getString("ShowDir");
+char const* const _PREHASH_IsOwner = LLMessageStringTable::getInstance()->getString("IsOwner");
+char const* const _PREHASH_Timestamp = LLMessageStringTable::getInstance()->getString("Timestamp");
+char const* const _PREHASH_GlobalPos = LLMessageStringTable::getInstance()->getString("GlobalPos");
+char const* const _PREHASH_GrabOffsetInitial = LLMessageStringTable::getInstance()->getString("GrabOffsetInitial");
+char const* const _PREHASH_IsTrial = LLMessageStringTable::getInstance()->getString("IsTrial");
+char const* const _PREHASH_ObjectDuplicateOnRay = LLMessageStringTable::getInstance()->getString("ObjectDuplicateOnRay");
+char const* const _PREHASH_GroupMembershipCount = LLMessageStringTable::getInstance()->getString("GroupMembershipCount");
+char const* const _PREHASH_MethodData = LLMessageStringTable::getInstance()->getString("MethodData");
+char const* const _PREHASH_ActivateGestures = LLMessageStringTable::getInstance()->getString("ActivateGestures");
+char const* const _PREHASH_DeactivateGestures = LLMessageStringTable::getInstance()->getString("DeactivateGestures");
+char const* const _PREHASH_ProposalData = LLMessageStringTable::getInstance()->getString("ProposalData");
+char const* const _PREHASH_PosGlobal = LLMessageStringTable::getInstance()->getString("PosGlobal");
+char const* const _PREHASH_SearchID = LLMessageStringTable::getInstance()->getString("SearchID");
+char const* const _PREHASH_RezMultipleAttachmentsFromInv = LLMessageStringTable::getInstance()->getString("RezMultipleAttachmentsFromInv");
+char const* const _PREHASH_SearchName = LLMessageStringTable::getInstance()->getString("SearchName");
+char const* const _PREHASH_VersionString = LLMessageStringTable::getInstance()->getString("VersionString");
+char const* const _PREHASH_CreateGroupReply = LLMessageStringTable::getInstance()->getString("CreateGroupReply");
+char const* const _PREHASH_LeaveGroupReply = LLMessageStringTable::getInstance()->getString("LeaveGroupReply");
+char const* const _PREHASH_ActualArea = LLMessageStringTable::getInstance()->getString("ActualArea");
+char const* const _PREHASH_Message = LLMessageStringTable::getInstance()->getString("Message");
+char const* const _PREHASH_ClickAction = LLMessageStringTable::getInstance()->getString("ClickAction");
+char const* const _PREHASH_AssetUploadComplete = LLMessageStringTable::getInstance()->getString("AssetUploadComplete");
+char const* const _PREHASH_RequestType = LLMessageStringTable::getInstance()->getString("RequestType");
+char const* const _PREHASH_UUID = LLMessageStringTable::getInstance()->getString("UUID");
+char const* const _PREHASH_BaseMask = LLMessageStringTable::getInstance()->getString("BaseMask");
+char const* const _PREHASH_NetBlock = LLMessageStringTable::getInstance()->getString("NetBlock");
+char const* const _PREHASH_GlobalX = LLMessageStringTable::getInstance()->getString("GlobalX");
+char const* const _PREHASH_GlobalY = LLMessageStringTable::getInstance()->getString("GlobalY");
+char const* const _PREHASH_CopyRotates = LLMessageStringTable::getInstance()->getString("CopyRotates");
+char const* const _PREHASH_KickUserAck = LLMessageStringTable::getInstance()->getString("KickUserAck");
+char const* const _PREHASH_TopPick = LLMessageStringTable::getInstance()->getString("TopPick"); 	//legacy var  need to be deleted -angela
+char const* const _PREHASH_SessionID = LLMessageStringTable::getInstance()->getString("SessionID");
+char const* const _PREHASH_GlobalZ = LLMessageStringTable::getInstance()->getString("GlobalZ");
+char const* const _PREHASH_DeclineFriendship = LLMessageStringTable::getInstance()->getString("DeclineFriendship");
+char const* const _PREHASH_FormFriendship = LLMessageStringTable::getInstance()->getString("FormFriendship");
+char const* const _PREHASH_TerminateFriendship = LLMessageStringTable::getInstance()->getString("TerminateFriendship");
+char const* const _PREHASH_TaskData = LLMessageStringTable::getInstance()->getString("TaskData");
+char const* const _PREHASH_SimWideMaxPrims = LLMessageStringTable::getInstance()->getString("SimWideMaxPrims");
+char const* const _PREHASH_TotalPrims = LLMessageStringTable::getInstance()->getString("TotalPrims");
+char const* const _PREHASH_ProfileBegin = LLMessageStringTable::getInstance()->getString("ProfileBegin");
+char const* const _PREHASH_Request = LLMessageStringTable::getInstance()->getString("Request");
+char const* const _PREHASH_GroupAccountDetailsRequest = LLMessageStringTable::getInstance()->getString("GroupAccountDetailsRequest");
+char const* const _PREHASH_GroupActiveProposalsRequest = LLMessageStringTable::getInstance()->getString("GroupActiveProposalsRequest");
+char const* const _PREHASH_StringValue = LLMessageStringTable::getInstance()->getString("StringValue");
+char const* const _PREHASH_Version = LLMessageStringTable::getInstance()->getString("Version");
+char const* const _PREHASH_OtherCount = LLMessageStringTable::getInstance()->getString("OtherCount");
+char const* const _PREHASH_MemberCount = LLMessageStringTable::getInstance()->getString("MemberCount");
+char const* const _PREHASH_ChatData = LLMessageStringTable::getInstance()->getString("ChatData");
+char const* const _PREHASH_IsGroupOwned = LLMessageStringTable::getInstance()->getString("IsGroupOwned");
+char const* const _PREHASH_EnergyEfficiency = LLMessageStringTable::getInstance()->getString("EnergyEfficiency");
+char const* const _PREHASH_PickInfoUpdate = LLMessageStringTable::getInstance()->getString("PickInfoUpdate");
+char const* const _PREHASH_PickDelete = LLMessageStringTable::getInstance()->getString("PickDelete");
+char const* const _PREHASH_ScriptReset = LLMessageStringTable::getInstance()->getString("ScriptReset");
+char const* const _PREHASH_Requester = LLMessageStringTable::getInstance()->getString("Requester");
+char const* const _PREHASH_ForSale = LLMessageStringTable::getInstance()->getString("ForSale");
+char const* const _PREHASH_NearestLandingRegionReply = LLMessageStringTable::getInstance()->getString("NearestLandingRegionReply");
+char const* const _PREHASH_ParcelID = LLMessageStringTable::getInstance()->getString("ParcelID");
+char const* const _PREHASH_Godlike = LLMessageStringTable::getInstance()->getString("Godlike");
+char const* const _PREHASH_TotalDebits = LLMessageStringTable::getInstance()->getString("TotalDebits");
+char const* const _PREHASH_Direction = LLMessageStringTable::getInstance()->getString("Direction");
+char const* const _PREHASH_HealthData = LLMessageStringTable::getInstance()->getString("HealthData");
+char const* const _PREHASH_LeftAxis = LLMessageStringTable::getInstance()->getString("LeftAxis");
+char const* const _PREHASH_LocationBlock = LLMessageStringTable::getInstance()->getString("LocationBlock");
+char const* const _PREHASH_ObjectImage = LLMessageStringTable::getInstance()->getString("ObjectImage");
+char const* const _PREHASH_TerrainStartHeight00 = LLMessageStringTable::getInstance()->getString("TerrainStartHeight00");
+char const* const _PREHASH_TerrainStartHeight01 = LLMessageStringTable::getInstance()->getString("TerrainStartHeight01");
+char const* const _PREHASH_TerrainStartHeight10 = LLMessageStringTable::getInstance()->getString("TerrainStartHeight10");
+char const* const _PREHASH_TerrainStartHeight11 = LLMessageStringTable::getInstance()->getString("TerrainStartHeight11");
+char const* const _PREHASH_WaterHeight = LLMessageStringTable::getInstance()->getString("WaterHeight");
+char const* const _PREHASH_FetchInventoryReply = LLMessageStringTable::getInstance()->getString("FetchInventoryReply");
+char const* const _PREHASH_GroupAccountSummaryReply = LLMessageStringTable::getInstance()->getString("GroupAccountSummaryReply");
+char const* const _PREHASH_AttachedSound = LLMessageStringTable::getInstance()->getString("AttachedSound");
+char const* const _PREHASH_ParamInUse = LLMessageStringTable::getInstance()->getString("ParamInUse");
+char const* const _PREHASH_GodKickUser = LLMessageStringTable::getInstance()->getString("GodKickUser");
+char const* const _PREHASH_PickName = LLMessageStringTable::getInstance()->getString("PickName");
+char const* const _PREHASH_TaskName = LLMessageStringTable::getInstance()->getString("TaskName");
+char const* const _PREHASH_ObjectCount = LLMessageStringTable::getInstance()->getString("ObjectCount");
+char const* const _PREHASH_RegionPresenceRequestByHandle = LLMessageStringTable::getInstance()->getString("RegionPresenceRequestByHandle");
+char const* const _PREHASH_RezSingleAttachmentFromInv = LLMessageStringTable::getInstance()->getString("RezSingleAttachmentFromInv");
+char const* const _PREHASH_ChildAgentUpdate = LLMessageStringTable::getInstance()->getString("ChildAgentUpdate");
+char const* const _PREHASH_IsOwnerGroup = LLMessageStringTable::getInstance()->getString("IsOwnerGroup");
+char const* const _PREHASH_AgentHeightWidth = LLMessageStringTable::getInstance()->getString("AgentHeightWidth");
+char const* const _PREHASH_VerticalAngle = LLMessageStringTable::getInstance()->getString("VerticalAngle");
+char const* const _PREHASH_WearableType = LLMessageStringTable::getInstance()->getString("WearableType");
+char const* const _PREHASH_AggregatePermNextOwner = LLMessageStringTable::getInstance()->getString("AggregatePermNextOwner");
+char const* const _PREHASH_ShowInList = LLMessageStringTable::getInstance()->getString("ShowInList");
+char const* const _PREHASH_UpdateParcel = LLMessageStringTable::getInstance()->getString("UpdateParcel");
+char const* const _PREHASH_SetAlwaysRun = LLMessageStringTable::getInstance()->getString("SetAlwaysRun");
+char const* const _PREHASH_NVPair = LLMessageStringTable::getInstance()->getString("NVPair");
+char const* const _PREHASH_SearchType = LLMessageStringTable::getInstance()->getString("SearchType");
+char const* const _PREHASH_ObjectSpinStart = LLMessageStringTable::getInstance()->getString("ObjectSpinStart");
+char const* const _PREHASH_UseEstateSun = LLMessageStringTable::getInstance()->getString("UseEstateSun");
+char const* const _PREHASH_RegionID = LLMessageStringTable::getInstance()->getString("RegionID");
+char const* const _PREHASH_AbuseRegionID = LLMessageStringTable::getInstance()->getString("AbuseRegionID");
+char const* const _PREHASH_Creator = LLMessageStringTable::getInstance()->getString("Creator");
+char const* const _PREHASH_ProposalText = LLMessageStringTable::getInstance()->getString("ProposalText");
+char const* const _PREHASH_DirEventsReply = LLMessageStringTable::getInstance()->getString("DirEventsReply");
+char const* const _PREHASH_EventInfoReply = LLMessageStringTable::getInstance()->getString("EventInfoReply");
+char const* const _PREHASH_UserInfoReply = LLMessageStringTable::getInstance()->getString("UserInfoReply");
+char const* const _PREHASH_PathRadiusOffset = LLMessageStringTable::getInstance()->getString("PathRadiusOffset");
+char const* const _PREHASH_TextureData = LLMessageStringTable::getInstance()->getString("TextureData");
+char const* const _PREHASH_ChatPass = LLMessageStringTable::getInstance()->getString("ChatPass");
+char const* const _PREHASH_TargetID = LLMessageStringTable::getInstance()->getString("TargetID");
+char const* const _PREHASH_DefaultPayPrice = LLMessageStringTable::getInstance()->getString("DefaultPayPrice");
+char const* const _PREHASH_UserLocation = LLMessageStringTable::getInstance()->getString("UserLocation");
+char const* const _PREHASH_MaxPrims = LLMessageStringTable::getInstance()->getString("MaxPrims");
+char const* const _PREHASH_LandmarkID = LLMessageStringTable::getInstance()->getString("LandmarkID");
+char const* const _PREHASH_InitiateDownload = LLMessageStringTable::getInstance()->getString("InitiateDownload");
+char const* const _PREHASH_Name = LLMessageStringTable::getInstance()->getString("Name");
+char const* const _PREHASH_OtherCleanTime = LLMessageStringTable::getInstance()->getString("OtherCleanTime");
+char const* const _PREHASH_ParcelSetOtherCleanTime = LLMessageStringTable::getInstance()->getString("ParcelSetOtherCleanTime");
+char const* const _PREHASH_TeleportPriceExponent = LLMessageStringTable::getInstance()->getString("TeleportPriceExponent");
+char const* const _PREHASH_Gain = LLMessageStringTable::getInstance()->getString("Gain");
+char const* const _PREHASH_PacketAck = LLMessageStringTable::getInstance()->getString("PacketAck");
+char const* const _PREHASH_PathSkew = LLMessageStringTable::getInstance()->getString("PathSkew");
+char const* const _PREHASH_SimulatorShutdownRequest = LLMessageStringTable::getInstance()->getString("SimulatorShutdownRequest");
+char const* const _PREHASH_NearestLandingRegionRequest = LLMessageStringTable::getInstance()->getString("NearestLandingRegionRequest");
+char const* const _PREHASH_OtherID = LLMessageStringTable::getInstance()->getString("OtherID");
+char const* const _PREHASH_MemberID = LLMessageStringTable::getInstance()->getString("MemberID");
+char const* const _PREHASH_MapLayerRequest = LLMessageStringTable::getInstance()->getString("MapLayerRequest");
+char const* const _PREHASH_ObjectScale = LLMessageStringTable::getInstance()->getString("ObjectScale");
+char const* const _PREHASH_TargetIP = LLMessageStringTable::getInstance()->getString("TargetIP");
+char const* const _PREHASH_Redo = LLMessageStringTable::getInstance()->getString("Redo");
+char const* const _PREHASH_MoneyBalance = LLMessageStringTable::getInstance()->getString("MoneyBalance");
+char const* const _PREHASH_TrackAgent = LLMessageStringTable::getInstance()->getString("TrackAgent");
+char const* const _PREHASH_MaxX = LLMessageStringTable::getInstance()->getString("MaxX");
+char const* const _PREHASH_Data = LLMessageStringTable::getInstance()->getString("Data");
+char const* const _PREHASH_MaxY = LLMessageStringTable::getInstance()->getString("MaxY");
+char const* const _PREHASH_TextureAnim = LLMessageStringTable::getInstance()->getString("TextureAnim");
+char const* const _PREHASH_ReturnIDs = LLMessageStringTable::getInstance()->getString("ReturnIDs");
+char const* const _PREHASH_Date = LLMessageStringTable::getInstance()->getString("Date");
+char const* const _PREHASH_AgentWearablesUpdate = LLMessageStringTable::getInstance()->getString("AgentWearablesUpdate");
+char const* const _PREHASH_AgentDataUpdate = LLMessageStringTable::getInstance()->getString("AgentDataUpdate");
+char const* const _PREHASH_GroupDataUpdate = LLMessageStringTable::getInstance()->getString("GroupDataUpdate");
+char const* const _PREHASH_Hash = LLMessageStringTable::getInstance()->getString("Hash");
+char const* const _PREHASH_AgentGroupDataUpdate = LLMessageStringTable::getInstance()->getString("AgentGroupDataUpdate");
+char const* const _PREHASH_Left = LLMessageStringTable::getInstance()->getString("Left");
+char const* const _PREHASH_Mask = LLMessageStringTable::getInstance()->getString("Mask");
+char const* const _PREHASH_ForceMouselook = LLMessageStringTable::getInstance()->getString("ForceMouselook");
+char const* const _PREHASH_Success = LLMessageStringTable::getInstance()->getString("Success");
+char const* const _PREHASH_ObjectGroup = LLMessageStringTable::getInstance()->getString("ObjectGroup");
+char const* const _PREHASH_SunHour = LLMessageStringTable::getInstance()->getString("SunHour");
+char const* const _PREHASH_MinX = LLMessageStringTable::getInstance()->getString("MinX");
+char const* const _PREHASH_ScriptSensorReply = LLMessageStringTable::getInstance()->getString("ScriptSensorReply");
+char const* const _PREHASH_MinY = LLMessageStringTable::getInstance()->getString("MinY");
+char const* const _PREHASH_Command = LLMessageStringTable::getInstance()->getString("Command");
+char const* const _PREHASH_Desc = LLMessageStringTable::getInstance()->getString("Desc");
+char const* const _PREHASH_AttachmentNeedsSave = LLMessageStringTable::getInstance()->getString("AttachmentNeedsSave");
+char const* const _PREHASH_HistoryItemData = LLMessageStringTable::getInstance()->getString("HistoryItemData");
+char const* const _PREHASH_AgentCachedTexture = LLMessageStringTable::getInstance()->getString("AgentCachedTexture");
+char const* const _PREHASH_Subject = LLMessageStringTable::getInstance()->getString("Subject");
+char const* const _PREHASH_East = LLMessageStringTable::getInstance()->getString("East");
+char const* const _PREHASH_QueryReplies = LLMessageStringTable::getInstance()->getString("QueryReplies");
+char const* const _PREHASH_ObjectCategory = LLMessageStringTable::getInstance()->getString("ObjectCategory");
+char const* const _PREHASH_Time = LLMessageStringTable::getInstance()->getString("Time");
+char const* const _PREHASH_CreateLandmarkForEvent = LLMessageStringTable::getInstance()->getString("CreateLandmarkForEvent");
+char const* const _PREHASH_ParentID = LLMessageStringTable::getInstance()->getString("ParentID");
+char const* const _PREHASH_Ping = LLMessageStringTable::getInstance()->getString("Ping");
+char const* const _PREHASH_Perp = LLMessageStringTable::getInstance()->getString("Perp");
+char const* const _PREHASH_Code = LLMessageStringTable::getInstance()->getString("Code");
+char const* const _PREHASH_InvType = LLMessageStringTable::getInstance()->getString("InvType");
+char const* const _PREHASH_AgentFOV = LLMessageStringTable::getInstance()->getString("AgentFOV");
+char const* const _PREHASH_Audible = LLMessageStringTable::getInstance()->getString("Audible");
+char const* const _PREHASH_AuctionData = LLMessageStringTable::getInstance()->getString("AuctionData");
+char const* const _PREHASH_IDBlock = LLMessageStringTable::getInstance()->getString("IDBlock");
+char const* const _PREHASH_West = LLMessageStringTable::getInstance()->getString("West");
+char const* const _PREHASH_Undo = LLMessageStringTable::getInstance()->getString("Undo");
+char const* const _PREHASH_TotalNumItems = LLMessageStringTable::getInstance()->getString("TotalNumItems");
+char const* const _PREHASH_Info = LLMessageStringTable::getInstance()->getString("Info");
+char const* const _PREHASH_Area = LLMessageStringTable::getInstance()->getString("Area");
+char const* const _PREHASH_SimCrashed = LLMessageStringTable::getInstance()->getString("SimCrashed");
+char const* const _PREHASH_Text = LLMessageStringTable::getInstance()->getString("Text");
+char const* const _PREHASH_PriceGroupCreate = LLMessageStringTable::getInstance()->getString("PriceGroupCreate");
+char const* const _PREHASH_ObjectShape = LLMessageStringTable::getInstance()->getString("ObjectShape");
+char const* const _PREHASH_GroupRoleDataReply = LLMessageStringTable::getInstance()->getString("GroupRoleDataReply");
+char const* const _PREHASH_MuteCRC = LLMessageStringTable::getInstance()->getString("MuteCRC");
+char const* const _PREHASH_Size = LLMessageStringTable::getInstance()->getString("Size");
+char const* const _PREHASH_FromAddress = LLMessageStringTable::getInstance()->getString("FromAddress");
+char const* const _PREHASH_Body = LLMessageStringTable::getInstance()->getString("Body");
+char const* const _PREHASH_FileData = LLMessageStringTable::getInstance()->getString("FileData");
+char const* const _PREHASH_List = LLMessageStringTable::getInstance()->getString("List");
+char const* const _PREHASH_KickUser = LLMessageStringTable::getInstance()->getString("KickUser");
+char const* const _PREHASH_OtherPrims = LLMessageStringTable::getInstance()->getString("OtherPrims");
+char const* const _PREHASH_RunTime = LLMessageStringTable::getInstance()->getString("RunTime");
+char const* const _PREHASH_GrantUserRights = LLMessageStringTable::getInstance()->getString("GrantUserRights");
+char const* const _PREHASH_RpcScriptRequestInboundForward = LLMessageStringTable::getInstance()->getString("RpcScriptRequestInboundForward");
+char const* const _PREHASH_More = LLMessageStringTable::getInstance()->getString("More");
+char const* const _PREHASH_Majority = LLMessageStringTable::getInstance()->getString("Majority");
+char const* const _PREHASH_MetersTraveled = LLMessageStringTable::getInstance()->getString("MetersTraveled");
+char const* const _PREHASH_Stat = LLMessageStringTable::getInstance()->getString("Stat");
+char const* const _PREHASH_SoundID = LLMessageStringTable::getInstance()->getString("SoundID");
+char const* const _PREHASH_Item = LLMessageStringTable::getInstance()->getString("Item");
+char const* const _PREHASH_User = LLMessageStringTable::getInstance()->getString("User");
+char const* const _PREHASH_Prey = LLMessageStringTable::getInstance()->getString("Prey");
+char const* const _PREHASH_RayStart = LLMessageStringTable::getInstance()->getString("RayStart");
+char const* const _PREHASH_UsecSinceStart = LLMessageStringTable::getInstance()->getString("UsecSinceStart");
+char const* const _PREHASH_ParcelData = LLMessageStringTable::getInstance()->getString("ParcelData");
+char const* const _PREHASH_CameraUpAxis = LLMessageStringTable::getInstance()->getString("CameraUpAxis");
+char const* const _PREHASH_ScriptDialog = LLMessageStringTable::getInstance()->getString("ScriptDialog");
+char const* const _PREHASH_MasterParcelData = LLMessageStringTable::getInstance()->getString("MasterParcelData");
+char const* const _PREHASH_Invalid = LLMessageStringTable::getInstance()->getString("Invalid");
+char const* const _PREHASH_ProfileCurve = LLMessageStringTable::getInstance()->getString("ProfileCurve");
+char const* const _PREHASH_ParcelAccessListUpdate = LLMessageStringTable::getInstance()->getString("ParcelAccessListUpdate");
+char const* const _PREHASH_MuteListUpdate = LLMessageStringTable::getInstance()->getString("MuteListUpdate");
+char const* const _PREHASH_SendPacket = LLMessageStringTable::getInstance()->getString("SendPacket");
+char const* const _PREHASH_SendXferPacket = LLMessageStringTable::getInstance()->getString("SendXferPacket");
+char const* const _PREHASH_RegionDenyIdentified = LLMessageStringTable::getInstance()->getString("RegionDenyIdentified");
+char const* const _PREHASH_NotecardItemID = LLMessageStringTable::getInstance()->getString("NotecardItemID");
+char const* const _PREHASH_LastName = LLMessageStringTable::getInstance()->getString("LastName");
+char const* const _PREHASH_From = LLMessageStringTable::getInstance()->getString("From");
+char const* const _PREHASH_RoleChange = LLMessageStringTable::getInstance()->getString("RoleChange");
+char const* const _PREHASH_Port = LLMessageStringTable::getInstance()->getString("Port");
+char const* const _PREHASH_MemberTitle = LLMessageStringTable::getInstance()->getString("MemberTitle");
+char const* const _PREHASH_LogParcelChanges = LLMessageStringTable::getInstance()->getString("LogParcelChanges");
+char const* const _PREHASH_AgentCachedTextureResponse = LLMessageStringTable::getInstance()->getString("AgentCachedTextureResponse");
+char const* const _PREHASH_DeRezObject = LLMessageStringTable::getInstance()->getString("DeRezObject");
+char const* const _PREHASH_IsTemporary = LLMessageStringTable::getInstance()->getString("IsTemporary");
+char const* const _PREHASH_InsigniaID = LLMessageStringTable::getInstance()->getString("InsigniaID");
+char const* const _PREHASH_CheckFlags = LLMessageStringTable::getInstance()->getString("CheckFlags");
+char const* const _PREHASH_EventID = LLMessageStringTable::getInstance()->getString("EventID");
+char const* const _PREHASH_Selected = LLMessageStringTable::getInstance()->getString("Selected");
+char const* const _PREHASH_FromAgentId = LLMessageStringTable::getInstance()->getString("FromAgentId");
+char const* const _PREHASH_Type = LLMessageStringTable::getInstance()->getString("Type");
+char const* const _PREHASH_ChatType = LLMessageStringTable::getInstance()->getString("ChatType");
+char const* const _PREHASH_ReportData = LLMessageStringTable::getInstance()->getString("ReportData");
+char const* const _PREHASH_RequestBlock = LLMessageStringTable::getInstance()->getString("RequestBlock");
+char const* const _PREHASH_GrantData = LLMessageStringTable::getInstance()->getString("GrantData");
+char const* const _PREHASH_DetachAttachmentIntoInv = LLMessageStringTable::getInstance()->getString("DetachAttachmentIntoInv");
+char const* const _PREHASH_ParcelDisableObjects = LLMessageStringTable::getInstance()->getString("ParcelDisableObjects");
+char const* const _PREHASH_Sections = LLMessageStringTable::getInstance()->getString("Sections");
+char const* const _PREHASH_GodLevel = LLMessageStringTable::getInstance()->getString("GodLevel");
+char const* const _PREHASH_PayPriceReply = LLMessageStringTable::getInstance()->getString("PayPriceReply");
+char const* const _PREHASH_QueryID = LLMessageStringTable::getInstance()->getString("QueryID");
+char const* const _PREHASH_CameraEyeOffset = LLMessageStringTable::getInstance()->getString("CameraEyeOffset");
+char const* const _PREHASH_AgentPosition = LLMessageStringTable::getInstance()->getString("AgentPosition");
+char const* const _PREHASH_GrabPosition = LLMessageStringTable::getInstance()->getString("GrabPosition");
+char const* const _PREHASH_OnlineNotification = LLMessageStringTable::getInstance()->getString("OnlineNotification");
+char const* const _PREHASH_OfflineNotification = LLMessageStringTable::getInstance()->getString("OfflineNotification");
+char const* const _PREHASH_SendPostcard = LLMessageStringTable::getInstance()->getString("SendPostcard");
+char const* const _PREHASH_RequestFlags = LLMessageStringTable::getInstance()->getString("RequestFlags");
+char const* const _PREHASH_GroupAccountSummaryRequest = LLMessageStringTable::getInstance()->getString("GroupAccountSummaryRequest");
+char const* const _PREHASH_GroupVoteHistoryRequest = LLMessageStringTable::getInstance()->getString("GroupVoteHistoryRequest");
+char const* const _PREHASH_ParamValue = LLMessageStringTable::getInstance()->getString("ParamValue");
+char const* const _PREHASH_MaxAgents = LLMessageStringTable::getInstance()->getString("MaxAgents");
+char const* const _PREHASH_CreateNewOutfitAttachments = LLMessageStringTable::getInstance()->getString("CreateNewOutfitAttachments");
+char const* const _PREHASH_RegionHandle = LLMessageStringTable::getInstance()->getString("RegionHandle");
+char const* const _PREHASH_TeleportProgress = LLMessageStringTable::getInstance()->getString("TeleportProgress");
+char const* const _PREHASH_AgentQuitCopy = LLMessageStringTable::getInstance()->getString("AgentQuitCopy");
+char const* const _PREHASH_AvatarInterestsUpdate = LLMessageStringTable::getInstance()->getString("AvatarInterestsUpdate");
+char const* const _PREHASH_GroupNoticeID = LLMessageStringTable::getInstance()->getString("GroupNoticeID");
+char const* const _PREHASH_ParcelName = LLMessageStringTable::getInstance()->getString("ParcelName");
+char const* const _PREHASH_PriceObjectRent = LLMessageStringTable::getInstance()->getString("PriceObjectRent");
+char const* const _PREHASH_OfferCallingCard = LLMessageStringTable::getInstance()->getString("OfferCallingCard");
+char const* const _PREHASH_AcceptCallingCard = LLMessageStringTable::getInstance()->getString("AcceptCallingCard");
+char const* const _PREHASH_DeclineCallingCard = LLMessageStringTable::getInstance()->getString("DeclineCallingCard");
+char const* const _PREHASH_AgentAccess = LLMessageStringTable::getInstance()->getString("AgentAccess");
+char const* const _PREHASH_AgentLegacyAccess = LLMessageStringTable::getInstance()->getString("AgentLegacyAccess");
+char const* const _PREHASH_AgentMaxAccess = LLMessageStringTable::getInstance()->getString("AgentMaxAccess");
+char const* const _PREHASH_DataHomeLocationReply = LLMessageStringTable::getInstance()->getString("DataHomeLocationReply");
+char const* const _PREHASH_EventLocationReply = LLMessageStringTable::getInstance()->getString("EventLocationReply");
+char const* const _PREHASH_TerseDateID = LLMessageStringTable::getInstance()->getString("TerseDateID");
+char const* const _PREHASH_ObjectOwner = LLMessageStringTable::getInstance()->getString("ObjectOwner");
+char const* const _PREHASH_AssetID = LLMessageStringTable::getInstance()->getString("AssetID");
+char const* const _PREHASH_AlertMessage = LLMessageStringTable::getInstance()->getString("AlertMessage");
+char const* const _PREHASH_AgentAlertMessage = LLMessageStringTable::getInstance()->getString("AgentAlertMessage");
+char const* const _PREHASH_EstateOwnerMessage = LLMessageStringTable::getInstance()->getString("EstateOwnerMessage");
+char const* const _PREHASH_ParcelMediaCommandMessage = LLMessageStringTable::getInstance()->getString("ParcelMediaCommandMessage");
+char const* const _PREHASH_Auction = LLMessageStringTable::getInstance()->getString("Auction");
+char const* const _PREHASH_Category = LLMessageStringTable::getInstance()->getString("Category");
+char const* const _PREHASH_FilePath = LLMessageStringTable::getInstance()->getString("FilePath");
+char const* const _PREHASH_ItemFlags = LLMessageStringTable::getInstance()->getString("ItemFlags");
+char const* const _PREHASH_Invoice = LLMessageStringTable::getInstance()->getString("Invoice");
+char const* const _PREHASH_IntervalDays = LLMessageStringTable::getInstance()->getString("IntervalDays");
+char const* const _PREHASH_PathScaleX = LLMessageStringTable::getInstance()->getString("PathScaleX");
+char const* const _PREHASH_FromTaskID = LLMessageStringTable::getInstance()->getString("FromTaskID");
+char const* const _PREHASH_PathScaleY = LLMessageStringTable::getInstance()->getString("PathScaleY");
+char const* const _PREHASH_TimeInfo = LLMessageStringTable::getInstance()->getString("TimeInfo");
+char const* const _PREHASH_PublicCount = LLMessageStringTable::getInstance()->getString("PublicCount");
+char const* const _PREHASH_ParcelJoin = LLMessageStringTable::getInstance()->getString("ParcelJoin");
+char const* const _PREHASH_GroupRolesCount = LLMessageStringTable::getInstance()->getString("GroupRolesCount");
+char const* const _PREHASH_SimulatorBlock = LLMessageStringTable::getInstance()->getString("SimulatorBlock");
+char const* const _PREHASH_GroupID = LLMessageStringTable::getInstance()->getString("GroupID");
+char const* const _PREHASH_AgentVel = LLMessageStringTable::getInstance()->getString("AgentVel");
+char const* const _PREHASH_RequestImage = LLMessageStringTable::getInstance()->getString("RequestImage");
+char const* const _PREHASH_NetStats = LLMessageStringTable::getInstance()->getString("NetStats");
+char const* const _PREHASH_AgentPos = LLMessageStringTable::getInstance()->getString("AgentPos");
+char const* const _PREHASH_AgentSit = LLMessageStringTable::getInstance()->getString("AgentSit");
+char const* const _PREHASH_Material = LLMessageStringTable::getInstance()->getString("Material");
+char const* const _PREHASH_ObjectDeGrab = LLMessageStringTable::getInstance()->getString("ObjectDeGrab");
+char const* const _PREHASH_VelocityInterpolateOff = LLMessageStringTable::getInstance()->getString("VelocityInterpolateOff");
+char const* const _PREHASH_AuthorizedBuyerID = LLMessageStringTable::getInstance()->getString("AuthorizedBuyerID");
+char const* const _PREHASH_AvatarPropertiesReply = LLMessageStringTable::getInstance()->getString("AvatarPropertiesReply");
+char const* const _PREHASH_GroupProfileReply = LLMessageStringTable::getInstance()->getString("GroupProfileReply");
+char const* const _PREHASH_SimOwner = LLMessageStringTable::getInstance()->getString("SimOwner");
+char const* const _PREHASH_SalePrice = LLMessageStringTable::getInstance()->getString("SalePrice");
+char const* const _PREHASH_Animation = LLMessageStringTable::getInstance()->getString("Animation");
+char const* const _PREHASH_OwnerID = LLMessageStringTable::getInstance()->getString("OwnerID");
+char const* const _PREHASH_NearestLandingRegionUpdated = LLMessageStringTable::getInstance()->getString("NearestLandingRegionUpdated");
+char const* const _PREHASH_PassToAgent = LLMessageStringTable::getInstance()->getString("PassToAgent");
+char const* const _PREHASH_PreyAgent = LLMessageStringTable::getInstance()->getString("PreyAgent");
+char const* const _PREHASH_SimStats = LLMessageStringTable::getInstance()->getString("SimStats");
+char const* const _PREHASH_LogoutReply = LLMessageStringTable::getInstance()->getString("LogoutReply");
+char const* const _PREHASH_FeatureDisabled = LLMessageStringTable::getInstance()->getString("FeatureDisabled");
+char const* const _PREHASH_PhysicalAvatarEventList = LLMessageStringTable::getInstance()->getString("PhysicalAvatarEventList");
+char const* const _PREHASH_ObjectLocalID = LLMessageStringTable::getInstance()->getString("ObjectLocalID");
+char const* const _PREHASH_Dropped = LLMessageStringTable::getInstance()->getString("Dropped");
+char const* const _PREHASH_WebProfilesDisabled = LLMessageStringTable::getInstance()->getString("WebProfilesDisabled");
+char const* const _PREHASH_Destination = LLMessageStringTable::getInstance()->getString("Destination");
+char const* const _PREHASH_MasterID = LLMessageStringTable::getInstance()->getString("MasterID");
+char const* const _PREHASH_TransferData = LLMessageStringTable::getInstance()->getString("TransferData");
+char const* const _PREHASH_WantToMask = LLMessageStringTable::getInstance()->getString("WantToMask");
+char const* const _PREHASH_ParcelSelectObjects = LLMessageStringTable::getInstance()->getString("ParcelSelectObjects");
+char const* const _PREHASH_ExtraParams = LLMessageStringTable::getInstance()->getString("ExtraParams");
+char const* const _PREHASH_CreatorID = LLMessageStringTable::getInstance()->getString("CreatorID");
+char const* const _PREHASH_Summary = LLMessageStringTable::getInstance()->getString("Summary");
+char const* const _PREHASH_BuyObjectInventory = LLMessageStringTable::getInstance()->getString("BuyObjectInventory");
+char const* const _PREHASH_FetchInventory = LLMessageStringTable::getInstance()->getString("FetchInventory");
+char const* const _PREHASH_InventoryID = LLMessageStringTable::getInstance()->getString("InventoryID");
+char const* const _PREHASH_PacketNumber = LLMessageStringTable::getInstance()->getString("PacketNumber");
+char const* const _PREHASH_SetFollowCamProperties = LLMessageStringTable::getInstance()->getString("SetFollowCamProperties");
+char const* const _PREHASH_ClearFollowCamProperties = LLMessageStringTable::getInstance()->getString("ClearFollowCamProperties");
+char const* const _PREHASH_SequenceID = LLMessageStringTable::getInstance()->getString("SequenceID");
+char const* const _PREHASH_DataServerLogout = LLMessageStringTable::getInstance()->getString("DataServerLogout");
+char const* const _PREHASH_NameValue = LLMessageStringTable::getInstance()->getString("NameValue");
+char const* const _PREHASH_PathShearX = LLMessageStringTable::getInstance()->getString("PathShearX");
+char const* const _PREHASH_PathShearY = LLMessageStringTable::getInstance()->getString("PathShearY");
+char const* const _PREHASH_Velocity = LLMessageStringTable::getInstance()->getString("Velocity");
+char const* const _PREHASH_SecPerYear = LLMessageStringTable::getInstance()->getString("SecPerYear");
+char const* const _PREHASH_FirstName = LLMessageStringTable::getInstance()->getString("FirstName");
+char const* const _PREHASH_AttachedSoundGainChange = LLMessageStringTable::getInstance()->getString("AttachedSoundGainChange");
+char const* const _PREHASH_LocationID = LLMessageStringTable::getInstance()->getString("LocationID");
+char const* const _PREHASH_Running = LLMessageStringTable::getInstance()->getString("Running");
+char const* const _PREHASH_AgentThrottle = LLMessageStringTable::getInstance()->getString("AgentThrottle");
+char const* const _PREHASH_NeighborList = LLMessageStringTable::getInstance()->getString("NeighborList");
+char const* const _PREHASH_PathTaperX = LLMessageStringTable::getInstance()->getString("PathTaperX");
+char const* const _PREHASH_PathTaperY = LLMessageStringTable::getInstance()->getString("PathTaperY");
+char const* const _PREHASH_AgentRelated = LLMessageStringTable::getInstance()->getString("AgentRelated");
+char const* const _PREHASH_GranterBlock = LLMessageStringTable::getInstance()->getString("GranterBlock");
+char const* const _PREHASH_UseCachedMuteList = LLMessageStringTable::getInstance()->getString("UseCachedMuteList");
+char const* const _PREHASH_FailStats = LLMessageStringTable::getInstance()->getString("FailStats");
+char const* const _PREHASH_Tempfile = LLMessageStringTable::getInstance()->getString("Tempfile");
+char const* const _PREHASH_BuyerID = LLMessageStringTable::getInstance()->getString("BuyerID");
+char const* const _PREHASH_DirPeopleReply = LLMessageStringTable::getInstance()->getString("DirPeopleReply");
+char const* const _PREHASH_TransferInfo = LLMessageStringTable::getInstance()->getString("TransferInfo");
+char const* const _PREHASH_AvatarPickerRequestBackend = LLMessageStringTable::getInstance()->getString("AvatarPickerRequestBackend");
+char const* const _PREHASH_AvatarPropertiesRequestBackend = LLMessageStringTable::getInstance()->getString("AvatarPropertiesRequestBackend");
+char const* const _PREHASH_UpdateData = LLMessageStringTable::getInstance()->getString("UpdateData");
+char const* const _PREHASH_SimFPS = LLMessageStringTable::getInstance()->getString("SimFPS");
+char const* const _PREHASH_ReporterID = LLMessageStringTable::getInstance()->getString("ReporterID");
+char const* const _PREHASH_ButtonLabel = LLMessageStringTable::getInstance()->getString("ButtonLabel");
+char const* const _PREHASH_GranterID = LLMessageStringTable::getInstance()->getString("GranterID");
+char const* const _PREHASH_WantToText = LLMessageStringTable::getInstance()->getString("WantToText");
+char const* const _PREHASH_ReportType = LLMessageStringTable::getInstance()->getString("ReportType");
+char const* const _PREHASH_SimulatorReady = LLMessageStringTable::getInstance()->getString("SimulatorReady");
+char const* const _PREHASH_DataBlock = LLMessageStringTable::getInstance()->getString("DataBlock");
+char const* const _PREHASH_AnimationSourceList = LLMessageStringTable::getInstance()->getString("AnimationSourceList");
+char const* const _PREHASH_SubscribeLoad = LLMessageStringTable::getInstance()->getString("SubscribeLoad");
+char const* const _PREHASH_UnsubscribeLoad = LLMessageStringTable::getInstance()->getString("UnsubscribeLoad");
+char const* const _PREHASH_Packet = LLMessageStringTable::getInstance()->getString("Packet");
+char const* const _PREHASH_UndoLand = LLMessageStringTable::getInstance()->getString("UndoLand");
+char const* const _PREHASH_SimAccess = LLMessageStringTable::getInstance()->getString("SimAccess");
+char const* const _PREHASH_AbuserID = LLMessageStringTable::getInstance()->getString("AbuserID");
+char const* const _PREHASH_MembershipFee = LLMessageStringTable::getInstance()->getString("MembershipFee");
+char const* const _PREHASH_InviteGroupResponse = LLMessageStringTable::getInstance()->getString("InviteGroupResponse");
+char const* const _PREHASH_CreateInventoryFolder = LLMessageStringTable::getInstance()->getString("CreateInventoryFolder");
+char const* const _PREHASH_UpdateInventoryFolder = LLMessageStringTable::getInstance()->getString("UpdateInventoryFolder");
+char const* const _PREHASH_MoveInventoryFolder = LLMessageStringTable::getInstance()->getString("MoveInventoryFolder");
+char const* const _PREHASH_RemoveInventoryFolder = LLMessageStringTable::getInstance()->getString("RemoveInventoryFolder");
+char const* const _PREHASH_MoneyData = LLMessageStringTable::getInstance()->getString("MoneyData");
+char const* const _PREHASH_ObjectDeselect = LLMessageStringTable::getInstance()->getString("ObjectDeselect");
+char const* const _PREHASH_NewAssetID = LLMessageStringTable::getInstance()->getString("NewAssetID");
+char const* const _PREHASH_ObjectAdd = LLMessageStringTable::getInstance()->getString("ObjectAdd");
+char const* const _PREHASH_RayEndIsIntersection = LLMessageStringTable::getInstance()->getString("RayEndIsIntersection");
+char const* const _PREHASH_CompleteAuction = LLMessageStringTable::getInstance()->getString("CompleteAuction");
+char const* const _PREHASH_CircuitCode = LLMessageStringTable::getInstance()->getString("CircuitCode");
+char const* const _PREHASH_AgentMovementComplete = LLMessageStringTable::getInstance()->getString("AgentMovementComplete");
+char const* const _PREHASH_ViewerIP = LLMessageStringTable::getInstance()->getString("ViewerIP");
+char const* const _PREHASH_Header = LLMessageStringTable::getInstance()->getString("Header");
+char const* const _PREHASH_GestureFlags = LLMessageStringTable::getInstance()->getString("GestureFlags");
+char const* const _PREHASH_XferID = LLMessageStringTable::getInstance()->getString("XferID");
+char const* const _PREHASH_StatValue = LLMessageStringTable::getInstance()->getString("StatValue");
+char const* const _PREHASH_TaskID = LLMessageStringTable::getInstance()->getString("TaskID");
+char const* const _PREHASH_PickID = LLMessageStringTable::getInstance()->getString("PickID");
+char const* const _PREHASH_RayEnd = LLMessageStringTable::getInstance()->getString("RayEnd");
+char const* const _PREHASH_Throttles = LLMessageStringTable::getInstance()->getString("Throttles");
+char const* const _PREHASH_RebakeAvatarTextures = LLMessageStringTable::getInstance()->getString("RebakeAvatarTextures");
+char const* const _PREHASH_UpAxis = LLMessageStringTable::getInstance()->getString("UpAxis");
+char const* const _PREHASH_AgentTextures = LLMessageStringTable::getInstance()->getString("AgentTextures");
+char const* const _PREHASH_NotecardData = LLMessageStringTable::getInstance()->getString("NotecardData");
+char const* const _PREHASH_Radius = LLMessageStringTable::getInstance()->getString("Radius");
+char const* const _PREHASH_OffCircuit = LLMessageStringTable::getInstance()->getString("OffCircuit");
+char const* const _PREHASH_Access = LLMessageStringTable::getInstance()->getString("Access");
+char const* const _PREHASH_TitleRoleID = LLMessageStringTable::getInstance()->getString("TitleRoleID");
+char const* const _PREHASH_SquareMetersCredit = LLMessageStringTable::getInstance()->getString("SquareMetersCredit");
+char const* const _PREHASH_Filename = LLMessageStringTable::getInstance()->getString("Filename");
+char const* const _PREHASH_ClassifiedInfoRequest = LLMessageStringTable::getInstance()->getString("ClassifiedInfoRequest");
+char const* const _PREHASH_ParcelInfoRequest = LLMessageStringTable::getInstance()->getString("ParcelInfoRequest");
+char const* const _PREHASH_ParcelObjectOwnersRequest = LLMessageStringTable::getInstance()->getString("ParcelObjectOwnersRequest");
+char const* const _PREHASH_TeleportLandmarkRequest = LLMessageStringTable::getInstance()->getString("TeleportLandmarkRequest");
+char const* const _PREHASH_EventInfoRequest = LLMessageStringTable::getInstance()->getString("EventInfoRequest");
+char const* const _PREHASH_MoneyBalanceRequest = LLMessageStringTable::getInstance()->getString("MoneyBalanceRequest");
+char const* const _PREHASH_GroupMembersRequest = LLMessageStringTable::getInstance()->getString("GroupMembersRequest");
+char const* const _PREHASH_GroupRoleMembersRequest = LLMessageStringTable::getInstance()->getString("GroupRoleMembersRequest");
+char const* const _PREHASH_ChatFromSimulator = LLMessageStringTable::getInstance()->getString("ChatFromSimulator");
+char const* const _PREHASH_OldFolderID = LLMessageStringTable::getInstance()->getString("OldFolderID");
+char const* const _PREHASH_UserInfoRequest = LLMessageStringTable::getInstance()->getString("UserInfoRequest");
+char const* const _PREHASH_TextureID = LLMessageStringTable::getInstance()->getString("TextureID");
+char const* const _PREHASH_ProfileURL = LLMessageStringTable::getInstance()->getString("ProfileURL");
+char const* const _PREHASH_Handle = LLMessageStringTable::getInstance()->getString("Handle");
+char const* const _PREHASH_ButtonIndex = LLMessageStringTable::getInstance()->getString("ButtonIndex");
+char const* const _PREHASH_GetScriptRunning = LLMessageStringTable::getInstance()->getString("GetScriptRunning");
+char const* const _PREHASH_SetScriptRunning = LLMessageStringTable::getInstance()->getString("SetScriptRunning");
+char const* const _PREHASH_Health = LLMessageStringTable::getInstance()->getString("Health");
+char const* const _PREHASH_CircuitInfo = LLMessageStringTable::getInstance()->getString("CircuitInfo");
+char const* const _PREHASH_ObjectBuy = LLMessageStringTable::getInstance()->getString("ObjectBuy");
+char const* const _PREHASH_ProfileEnd = LLMessageStringTable::getInstance()->getString("ProfileEnd");
+char const* const _PREHASH_Effect = LLMessageStringTable::getInstance()->getString("Effect");
+char const* const _PREHASH_TestMessage = LLMessageStringTable::getInstance()->getString("TestMessage");
+char const* const _PREHASH_ScriptMailRegistration = LLMessageStringTable::getInstance()->getString("ScriptMailRegistration");
+char const* const _PREHASH_AgentSetAppearance = LLMessageStringTable::getInstance()->getString("AgentSetAppearance");
+char const* const _PREHASH_AvatarAppearance = LLMessageStringTable::getInstance()->getString("AvatarAppearance");
+char const* const _PREHASH_RegionData = LLMessageStringTable::getInstance()->getString("RegionData");
+char const* const _PREHASH_RequestingRegionData = LLMessageStringTable::getInstance()->getString("RequestingRegionData");
+char const* const _PREHASH_LandingRegionData = LLMessageStringTable::getInstance()->getString("LandingRegionData");
+char const* const _PREHASH_SitTransform = LLMessageStringTable::getInstance()->getString("SitTransform");
+char const* const _PREHASH_TerrainBase0 = LLMessageStringTable::getInstance()->getString("TerrainBase0");
+char const* const _PREHASH_SkillsMask = LLMessageStringTable::getInstance()->getString("SkillsMask");
+char const* const _PREHASH_AtAxis = LLMessageStringTable::getInstance()->getString("AtAxis");
+char const* const _PREHASH_TerrainBase1 = LLMessageStringTable::getInstance()->getString("TerrainBase1");
+char const* const _PREHASH_Reason = LLMessageStringTable::getInstance()->getString("Reason");
+char const* const _PREHASH_TerrainBase2 = LLMessageStringTable::getInstance()->getString("TerrainBase2");
+char const* const _PREHASH_TerrainBase3 = LLMessageStringTable::getInstance()->getString("TerrainBase3");
+char const* const _PREHASH_Params = LLMessageStringTable::getInstance()->getString("Params");
+char const* const _PREHASH_PingID = LLMessageStringTable::getInstance()->getString("PingID");
+char const* const _PREHASH_Change = LLMessageStringTable::getInstance()->getString("Change");
+char const* const _PREHASH_Height = LLMessageStringTable::getInstance()->getString("Height");
+char const* const _PREHASH_Region = LLMessageStringTable::getInstance()->getString("Region");
+char const* const _PREHASH_TelehubInfo = LLMessageStringTable::getInstance()->getString("TelehubInfo");
+char const* const _PREHASH_StateSave = LLMessageStringTable::getInstance()->getString("StateSave");
+char const* const _PREHASH_RoleData = LLMessageStringTable::getInstance()->getString("RoleData");
+char const* const _PREHASH_AgentAnimation = LLMessageStringTable::getInstance()->getString("AgentAnimation");
+char const* const _PREHASH_AvatarAnimation = LLMessageStringTable::getInstance()->getString("AvatarAnimation");
+char const* const _PREHASH_LogDwellTime = LLMessageStringTable::getInstance()->getString("LogDwellTime");
+char const* const _PREHASH_ParcelGodMarkAsContent = LLMessageStringTable::getInstance()->getString("ParcelGodMarkAsContent");
+char const* const _PREHASH_UsePhysics = LLMessageStringTable::getInstance()->getString("UsePhysics");
+char const* const _PREHASH_RegionDenyTransacted = LLMessageStringTable::getInstance()->getString("RegionDenyTransacted");
+char const* const _PREHASH_JointType = LLMessageStringTable::getInstance()->getString("JointType");
+char const* const _PREHASH_ObjectTaxEstimate = LLMessageStringTable::getInstance()->getString("ObjectTaxEstimate");
+char const* const _PREHASH_LightTaxEstimate = LLMessageStringTable::getInstance()->getString("LightTaxEstimate");
+char const* const _PREHASH_LandTaxEstimate = LLMessageStringTable::getInstance()->getString("LandTaxEstimate");
+char const* const _PREHASH_TeleportLandingStatusChanged = LLMessageStringTable::getInstance()->getString("TeleportLandingStatusChanged");
+char const* const _PREHASH_GroupTaxEstimate = LLMessageStringTable::getInstance()->getString("GroupTaxEstimate");
+char const* const _PREHASH_AvgViewerFPS = LLMessageStringTable::getInstance()->getString("AvgViewerFPS");
+char const* const _PREHASH_Buttons = LLMessageStringTable::getInstance()->getString("Buttons");
+char const* const _PREHASH_Sender = LLMessageStringTable::getInstance()->getString("Sender");
+char const* const _PREHASH_Dialog = LLMessageStringTable::getInstance()->getString("Dialog");
+char const* const _PREHASH_TargetData = LLMessageStringTable::getInstance()->getString("TargetData");
+char const* const _PREHASH_DestID = LLMessageStringTable::getInstance()->getString("DestID");
+char const* const _PREHASH_PricePublicObjectDelete = LLMessageStringTable::getInstance()->getString("PricePublicObjectDelete");
+char const* const _PREHASH_ObjectDelete = LLMessageStringTable::getInstance()->getString("ObjectDelete");
+char const* const _PREHASH_Delete = LLMessageStringTable::getInstance()->getString("Delete");
+char const* const _PREHASH_EventGodDelete = LLMessageStringTable::getInstance()->getString("EventGodDelete");
+char const* const _PREHASH_LastTaxDate = LLMessageStringTable::getInstance()->getString("LastTaxDate");
+char const* const _PREHASH_MapImageID = LLMessageStringTable::getInstance()->getString("MapImageID");
+char const* const _PREHASH_EndDateTime = LLMessageStringTable::getInstance()->getString("EndDateTime");
+char const* const _PREHASH_TerrainDetail0 = LLMessageStringTable::getInstance()->getString("TerrainDetail0");
+char const* const _PREHASH_TerrainDetail1 = LLMessageStringTable::getInstance()->getString("TerrainDetail1");
+char const* const _PREHASH_TerrainDetail2 = LLMessageStringTable::getInstance()->getString("TerrainDetail2");
+char const* const _PREHASH_TerrainDetail3 = LLMessageStringTable::getInstance()->getString("TerrainDetail3");
+char const* const _PREHASH_Offset = LLMessageStringTable::getInstance()->getString("Offset");
+char const* const _PREHASH_ObjectDelink = LLMessageStringTable::getInstance()->getString("ObjectDelink");
+char const* const _PREHASH_TargetObject = LLMessageStringTable::getInstance()->getString("TargetObject");
+char const* const _PREHASH_IsEstateManager = LLMessageStringTable::getInstance()->getString("IsEstateManager");
+char const* const _PREHASH_CancelAuction = LLMessageStringTable::getInstance()->getString("CancelAuction");
+char const* const _PREHASH_ObjectDetach = LLMessageStringTable::getInstance()->getString("ObjectDetach");
+char const* const _PREHASH_Compressed = LLMessageStringTable::getInstance()->getString("Compressed");
+char const* const _PREHASH_PathBegin = LLMessageStringTable::getInstance()->getString("PathBegin");
+char const* const _PREHASH_BypassRaycast = LLMessageStringTable::getInstance()->getString("BypassRaycast");
+char const* const _PREHASH_WinnerID = LLMessageStringTable::getInstance()->getString("WinnerID");
+char const* const _PREHASH_ChannelType = LLMessageStringTable::getInstance()->getString("ChannelType");
+char const* const _PREHASH_NonExemptMembers = LLMessageStringTable::getInstance()->getString("NonExemptMembers");
+char const* const _PREHASH_Agents = LLMessageStringTable::getInstance()->getString("Agents");
+char const* const _PREHASH_MemberData = LLMessageStringTable::getInstance()->getString("MemberData");
+char const* const _PREHASH_ToGroupID = LLMessageStringTable::getInstance()->getString("ToGroupID");
+char const* const _PREHASH_ImageNotInDatabase = LLMessageStringTable::getInstance()->getString("ImageNotInDatabase");
+char const* const _PREHASH_StartDate = LLMessageStringTable::getInstance()->getString("StartDate");
+char const* const _PREHASH_AnimID = LLMessageStringTable::getInstance()->getString("AnimID");
+char const* const _PREHASH_Serial = LLMessageStringTable::getInstance()->getString("Serial");
+char const* const _PREHASH_AbuseRegionName = LLMessageStringTable::getInstance()->getString("AbuseRegionName");
+char const* const _PREHASH_ModifyLand = LLMessageStringTable::getInstance()->getString("ModifyLand");
+char const* const _PREHASH_Digest = LLMessageStringTable::getInstance()->getString("Digest");
+char const* const _PREHASH_Victim = LLMessageStringTable::getInstance()->getString("Victim");
+char const* const _PREHASH_Script = LLMessageStringTable::getInstance()->getString("Script");
+char const* const _PREHASH_PickInfoReply = LLMessageStringTable::getInstance()->getString("PickInfoReply");
+char const* const _PREHASH_MoneyBalanceReply = LLMessageStringTable::getInstance()->getString("MoneyBalanceReply");
+char const* const _PREHASH_RoutedMoneyBalanceReply = LLMessageStringTable::getInstance()->getString("RoutedMoneyBalanceReply");
+char const* const _PREHASH_RoleID = LLMessageStringTable::getInstance()->getString("RoleID");
+char const* const _PREHASH_RegionInfo = LLMessageStringTable::getInstance()->getString("RegionInfo");
+char const* const _PREHASH_GodUpdateRegionInfo = LLMessageStringTable::getInstance()->getString("GodUpdateRegionInfo");
+char const* const _PREHASH_StartAnim = LLMessageStringTable::getInstance()->getString("StartAnim");
+char const* const _PREHASH_Action = LLMessageStringTable::getInstance()->getString("Action");
+char const* const _PREHASH_Location = LLMessageStringTable::getInstance()->getString("Location");
+char const* const _PREHASH_Rights = LLMessageStringTable::getInstance()->getString("Rights");
+char const* const _PREHASH_SearchDir = LLMessageStringTable::getInstance()->getString("SearchDir");
+char const* const _PREHASH_TransferRequest = LLMessageStringTable::getInstance()->getString("TransferRequest");
+char const* const _PREHASH_ScriptSensorRequest = LLMessageStringTable::getInstance()->getString("ScriptSensorRequest");
+char const* const _PREHASH_MoneyTransferRequest = LLMessageStringTable::getInstance()->getString("MoneyTransferRequest");
+char const* const _PREHASH_EjectGroupMemberRequest = LLMessageStringTable::getInstance()->getString("EjectGroupMemberRequest");
+char const* const _PREHASH_SkillsText = LLMessageStringTable::getInstance()->getString("SkillsText");
+char const* const _PREHASH_Resent = LLMessageStringTable::getInstance()->getString("Resent");
+char const* const _PREHASH_Center = LLMessageStringTable::getInstance()->getString("Center");
+char const* const _PREHASH_SharedData = LLMessageStringTable::getInstance()->getString("SharedData");
+char const* const _PREHASH_PSBlock = LLMessageStringTable::getInstance()->getString("PSBlock");
+char const* const _PREHASH_UUIDNameBlock = LLMessageStringTable::getInstance()->getString("UUIDNameBlock");
+char const* const _PREHASH_GroupTitleUpdate = LLMessageStringTable::getInstance()->getString("GroupTitleUpdate");
+char const* const _PREHASH_Method = LLMessageStringTable::getInstance()->getString("Method");
+char const* const _PREHASH_TouchName = LLMessageStringTable::getInstance()->getString("TouchName");
+char const* const _PREHASH_UpdateType = LLMessageStringTable::getInstance()->getString("UpdateType");
+char const* const _PREHASH_KickedFromEstateID = LLMessageStringTable::getInstance()->getString("KickedFromEstateID");
+char const* const _PREHASH_CandidateID = LLMessageStringTable::getInstance()->getString("CandidateID");
+char const* const _PREHASH_ParamData = LLMessageStringTable::getInstance()->getString("ParamData");
+char const* const _PREHASH_GodlikeMessage = LLMessageStringTable::getInstance()->getString("GodlikeMessage");
+char const* const _PREHASH_SystemMessage = LLMessageStringTable::getInstance()->getString("SystemMessage");
+char const* const _PREHASH_BodyRotation = LLMessageStringTable::getInstance()->getString("BodyRotation");
+char const* const _PREHASH_SearchRegions = LLMessageStringTable::getInstance()->getString("SearchRegions");
+char const* const _PREHASH_AnimationData = LLMessageStringTable::getInstance()->getString("AnimationData");
+char const* const _PREHASH_StatID = LLMessageStringTable::getInstance()->getString("StatID");
+char const* const _PREHASH_ItemID = LLMessageStringTable::getInstance()->getString("ItemID");
+char const* const _PREHASH_ScriptDialogReply = LLMessageStringTable::getInstance()->getString("ScriptDialogReply");
+char const* const _PREHASH_RegionIDAndHandleReply = LLMessageStringTable::getInstance()->getString("RegionIDAndHandleReply");
+char const* const _PREHASH_CameraAtOffset = LLMessageStringTable::getInstance()->getString("CameraAtOffset");
+char const* const _PREHASH_VoteID = LLMessageStringTable::getInstance()->getString("VoteID");
+char const* const _PREHASH_ParcelGodForceOwner = LLMessageStringTable::getInstance()->getString("ParcelGodForceOwner");
+char const* const _PREHASH_Filter = LLMessageStringTable::getInstance()->getString("Filter");
+char const* const _PREHASH_InviteData = LLMessageStringTable::getInstance()->getString("InviteData");
+char const* const _PREHASH_PCode = LLMessageStringTable::getInstance()->getString("PCode");
+char const* const _PREHASH_SearchPos = LLMessageStringTable::getInstance()->getString("SearchPos");
+char const* const _PREHASH_PreyID = LLMessageStringTable::getInstance()->getString("PreyID");
+char const* const _PREHASH_TerrainLowerLimit = LLMessageStringTable::getInstance()->getString("TerrainLowerLimit");
+char const* const _PREHASH_EventFlags = LLMessageStringTable::getInstance()->getString("EventFlags");
+char const* const _PREHASH_TallyVotes = LLMessageStringTable::getInstance()->getString("TallyVotes");
+char const* const _PREHASH_Result = LLMessageStringTable::getInstance()->getString("Result");
+char const* const _PREHASH_LookAt = LLMessageStringTable::getInstance()->getString("LookAt");
+char const* const _PREHASH_SearchOrder = LLMessageStringTable::getInstance()->getString("SearchOrder");
+char const* const _PREHASH_PayButton = LLMessageStringTable::getInstance()->getString("PayButton");
+char const* const _PREHASH_SelfCount = LLMessageStringTable::getInstance()->getString("SelfCount");
+char const* const _PREHASH_PacketCount = LLMessageStringTable::getInstance()->getString("PacketCount");
+char const* const _PREHASH_ParcelBuyPass = LLMessageStringTable::getInstance()->getString("ParcelBuyPass");
+char const* const _PREHASH_OldItemID = LLMessageStringTable::getInstance()->getString("OldItemID");
+char const* const _PREHASH_RegionPort = LLMessageStringTable::getInstance()->getString("RegionPort");
+char const* const _PREHASH_PriceEnergyUnit = LLMessageStringTable::getInstance()->getString("PriceEnergyUnit");
+char const* const _PREHASH_Bitmap = LLMessageStringTable::getInstance()->getString("Bitmap");
+char const* const _PREHASH_CacheMissType = LLMessageStringTable::getInstance()->getString("CacheMissType");
+char const* const _PREHASH_VFileID = LLMessageStringTable::getInstance()->getString("VFileID");
+char const* const _PREHASH_GroupInsigniaID = LLMessageStringTable::getInstance()->getString("GroupInsigniaID");
+char const* const _PREHASH_Online = LLMessageStringTable::getInstance()->getString("Online");
+char const* const _PREHASH_KickFlags = LLMessageStringTable::getInstance()->getString("KickFlags");
+char const* const _PREHASH_CovenantID = LLMessageStringTable::getInstance()->getString("CovenantID");
+char const* const _PREHASH_SysCPU = LLMessageStringTable::getInstance()->getString("SysCPU");
+char const* const _PREHASH_EMail = LLMessageStringTable::getInstance()->getString("EMail");
+char const* const _PREHASH_AggregatePermTextures = LLMessageStringTable::getInstance()->getString("AggregatePermTextures");
+char const* const _PREHASH_ChatChannel = LLMessageStringTable::getInstance()->getString("ChatChannel");
+char const* const _PREHASH_ReturnID = LLMessageStringTable::getInstance()->getString("ReturnID");
+char const* const _PREHASH_ObjectAttach = LLMessageStringTable::getInstance()->getString("ObjectAttach");
+char const* const _PREHASH_TargetPort = LLMessageStringTable::getInstance()->getString("TargetPort");
+char const* const _PREHASH_ObjectSpinStop = LLMessageStringTable::getInstance()->getString("ObjectSpinStop");
+char const* const _PREHASH_FullID = LLMessageStringTable::getInstance()->getString("FullID");
+char const* const _PREHASH_ActivateGroup = LLMessageStringTable::getInstance()->getString("ActivateGroup");
+char const* const _PREHASH_SysGPU = LLMessageStringTable::getInstance()->getString("SysGPU");
+char const* const _PREHASH_AvatarInterestsReply = LLMessageStringTable::getInstance()->getString("AvatarInterestsReply");
+char const* const _PREHASH_StartLure = LLMessageStringTable::getInstance()->getString("StartLure");
+char const* const _PREHASH_SysRAM = LLMessageStringTable::getInstance()->getString("SysRAM");
+char const* const _PREHASH_ObjectPosition = LLMessageStringTable::getInstance()->getString("ObjectPosition");
+char const* const _PREHASH_SitPosition = LLMessageStringTable::getInstance()->getString("SitPosition");
+char const* const _PREHASH_StartTime = LLMessageStringTable::getInstance()->getString("StartTime");
+char const* const _PREHASH_BornOn = LLMessageStringTable::getInstance()->getString("BornOn");
+char const* const _PREHASH_CameraCollidePlane = LLMessageStringTable::getInstance()->getString("CameraCollidePlane");
+char const* const _PREHASH_EconomyDataRequest = LLMessageStringTable::getInstance()->getString("EconomyDataRequest");
+char const* const _PREHASH_TeleportLureRequest = LLMessageStringTable::getInstance()->getString("TeleportLureRequest");
+char const* const _PREHASH_FolderID = LLMessageStringTable::getInstance()->getString("FolderID");
+char const* const _PREHASH_RegionHandleRequest = LLMessageStringTable::getInstance()->getString("RegionHandleRequest");
+char const* const _PREHASH_ScriptDataRequest = LLMessageStringTable::getInstance()->getString("ScriptDataRequest");
+char const* const _PREHASH_GroupRoleDataRequest = LLMessageStringTable::getInstance()->getString("GroupRoleDataRequest");
+char const* const _PREHASH_GroupTitlesRequest = LLMessageStringTable::getInstance()->getString("GroupTitlesRequest");
+char const* const _PREHASH_AgentWearablesRequest = LLMessageStringTable::getInstance()->getString("AgentWearablesRequest");
+char const* const _PREHASH_MapBlockRequest = LLMessageStringTable::getInstance()->getString("MapBlockRequest");
+char const* const _PREHASH_LureID = LLMessageStringTable::getInstance()->getString("LureID");
+char const* const _PREHASH_CopyCenters = LLMessageStringTable::getInstance()->getString("CopyCenters");
+char const* const _PREHASH_ParamList = LLMessageStringTable::getInstance()->getString("ParamList");
+char const* const _PREHASH_InventorySerial = LLMessageStringTable::getInstance()->getString("InventorySerial");
+char const* const _PREHASH_EdgeDataPacket = LLMessageStringTable::getInstance()->getString("EdgeDataPacket");
+char const* const _PREHASH_AvatarPickerReply = LLMessageStringTable::getInstance()->getString("AvatarPickerReply");
+char const* const _PREHASH_ParcelDwellReply = LLMessageStringTable::getInstance()->getString("ParcelDwellReply");
+char const* const _PREHASH_IsForSale = LLMessageStringTable::getInstance()->getString("IsForSale");
+char const* const _PREHASH_MuteID = LLMessageStringTable::getInstance()->getString("MuteID");
+char const* const _PREHASH_MeanCollisionAlert = LLMessageStringTable::getInstance()->getString("MeanCollisionAlert");
+char const* const _PREHASH_CanAcceptTasks = LLMessageStringTable::getInstance()->getString("CanAcceptTasks");
+char const* const _PREHASH_ItemData = LLMessageStringTable::getInstance()->getString("ItemData");
+char const* const _PREHASH_AnimationList = LLMessageStringTable::getInstance()->getString("AnimationList");
+char const* const _PREHASH_Reputation = LLMessageStringTable::getInstance()->getString("Reputation");
+char const* const _PREHASH_IntValue = LLMessageStringTable::getInstance()->getString("IntValue");
+char const* const _PREHASH_TargetType = LLMessageStringTable::getInstance()->getString("TargetType");
+char const* const _PREHASH_Amount = LLMessageStringTable::getInstance()->getString("Amount");
+char const* const _PREHASH_HasAttachment = LLMessageStringTable::getInstance()->getString("HasAttachment");
+char const* const _PREHASH_UpdateAttachment = LLMessageStringTable::getInstance()->getString("UpdateAttachment");
+char const* const _PREHASH_RemoveAttachment = LLMessageStringTable::getInstance()->getString("RemoveAttachment");
+char const* const _PREHASH_HeightWidthBlock = LLMessageStringTable::getInstance()->getString("HeightWidthBlock");
+char const* const _PREHASH_RequestObjectPropertiesFamily = LLMessageStringTable::getInstance()->getString("RequestObjectPropertiesFamily");
+char const* const _PREHASH_ObjectPropertiesFamily = LLMessageStringTable::getInstance()->getString("ObjectPropertiesFamily");
+char const* const _PREHASH_UserData = LLMessageStringTable::getInstance()->getString("UserData");
+char const* const _PREHASH_IsReadable = LLMessageStringTable::getInstance()->getString("IsReadable");
+char const* const _PREHASH_PathCurve = LLMessageStringTable::getInstance()->getString("PathCurve");
+char const* const _PREHASH_Status = LLMessageStringTable::getInstance()->getString("Status");
+char const* const _PREHASH_FromGroup = LLMessageStringTable::getInstance()->getString("FromGroup");
+char const* const _PREHASH_AlreadyVoted = LLMessageStringTable::getInstance()->getString("AlreadyVoted");
+char const* const _PREHASH_PlacesReply = LLMessageStringTable::getInstance()->getString("PlacesReply");
+char const* const _PREHASH_DirPlacesReply = LLMessageStringTable::getInstance()->getString("DirPlacesReply");
+char const* const _PREHASH_ParcelBuy = LLMessageStringTable::getInstance()->getString("ParcelBuy");
+char const* const _PREHASH_DirFindQueryBackend = LLMessageStringTable::getInstance()->getString("DirFindQueryBackend");
+char const* const _PREHASH_DirPlacesQueryBackend = LLMessageStringTable::getInstance()->getString("DirPlacesQueryBackend");
+char const* const _PREHASH_DirClassifiedQueryBackend = LLMessageStringTable::getInstance()->getString("DirClassifiedQueryBackend");
+char const* const _PREHASH_DirLandQueryBackend = LLMessageStringTable::getInstance()->getString("DirLandQueryBackend");
+char const* const _PREHASH_DirPopularQueryBackend = LLMessageStringTable::getInstance()->getString("DirPopularQueryBackend");
+char const* const _PREHASH_HistoryData = LLMessageStringTable::getInstance()->getString("HistoryData");
+char const* const _PREHASH_SnapshotID = LLMessageStringTable::getInstance()->getString("SnapshotID");
+char const* const _PREHASH_Aspect = LLMessageStringTable::getInstance()->getString("Aspect");
+char const* const _PREHASH_ParamSize = LLMessageStringTable::getInstance()->getString("ParamSize");
+char const* const _PREHASH_VoteCast = LLMessageStringTable::getInstance()->getString("VoteCast");
+char const* const _PREHASH_CastsShadows = LLMessageStringTable::getInstance()->getString("CastsShadows");
+char const* const _PREHASH_EveryoneMask = LLMessageStringTable::getInstance()->getString("EveryoneMask");
+char const* const _PREHASH_ObjectSpinUpdate = LLMessageStringTable::getInstance()->getString("ObjectSpinUpdate");
+char const* const _PREHASH_MaturePublish = LLMessageStringTable::getInstance()->getString("MaturePublish");
+char const* const _PREHASH_UseExistingAsset = LLMessageStringTable::getInstance()->getString("UseExistingAsset");
+char const* const _PREHASH_Powers = LLMessageStringTable::getInstance()->getString("Powers");
+char const* const _PREHASH_ParcelLocalID = LLMessageStringTable::getInstance()->getString("ParcelLocalID");
+char const* const _PREHASH_TeleportCancel = LLMessageStringTable::getInstance()->getString("TeleportCancel");
+char const* const _PREHASH_UnixTime = LLMessageStringTable::getInstance()->getString("UnixTime");
+char const* const _PREHASH_QueryFlags = LLMessageStringTable::getInstance()->getString("QueryFlags");
+char const* const _PREHASH_AlwaysRun = LLMessageStringTable::getInstance()->getString("AlwaysRun");
+char const* const _PREHASH_Bottom = LLMessageStringTable::getInstance()->getString("Bottom");
+char const* const _PREHASH_ButtonData = LLMessageStringTable::getInstance()->getString("ButtonData");
+char const* const _PREHASH_SoundData = LLMessageStringTable::getInstance()->getString("SoundData");
+char const* const _PREHASH_ViewerStats = LLMessageStringTable::getInstance()->getString("ViewerStats");
+char const* const _PREHASH_RegionHandshake = LLMessageStringTable::getInstance()->getString("RegionHandshake");
+char const* const _PREHASH_ObjectDescription = LLMessageStringTable::getInstance()->getString("ObjectDescription");
+char const* const _PREHASH_Description = LLMessageStringTable::getInstance()->getString("Description");
+char const* const _PREHASH_ParamType = LLMessageStringTable::getInstance()->getString("ParamType");
+char const* const _PREHASH_UUIDNameReply = LLMessageStringTable::getInstance()->getString("UUIDNameReply");
+char const* const _PREHASH_UUIDGroupNameReply = LLMessageStringTable::getInstance()->getString("UUIDGroupNameReply");
+char const* const _PREHASH_SaveAssetIntoInventory = LLMessageStringTable::getInstance()->getString("SaveAssetIntoInventory");
+char const* const _PREHASH_UserInfo = LLMessageStringTable::getInstance()->getString("UserInfo");
+char const* const _PREHASH_AnimSequenceID = LLMessageStringTable::getInstance()->getString("AnimSequenceID");
+char const* const _PREHASH_NVPairs = LLMessageStringTable::getInstance()->getString("NVPairs");
+char const* const _PREHASH_GroupNoticesListRequest = LLMessageStringTable::getInstance()->getString("GroupNoticesListRequest");
+char const* const _PREHASH_ParcelAccessListRequest = LLMessageStringTable::getInstance()->getString("ParcelAccessListRequest");
+char const* const _PREHASH_MuteListRequest = LLMessageStringTable::getInstance()->getString("MuteListRequest");
+char const* const _PREHASH_RpcChannelRequest = LLMessageStringTable::getInstance()->getString("RpcChannelRequest");
+char const* const _PREHASH_LandStatRequest = LLMessageStringTable::getInstance()->getString("LandStatRequest");
+char const* const _PREHASH_PlacesQuery = LLMessageStringTable::getInstance()->getString("PlacesQuery");
+char const* const _PREHASH_DirPlacesQuery = LLMessageStringTable::getInstance()->getString("DirPlacesQuery");
+char const* const _PREHASH_SortOrder = LLMessageStringTable::getInstance()->getString("SortOrder");
+char const* const _PREHASH_Hunter = LLMessageStringTable::getInstance()->getString("Hunter");
+char const* const _PREHASH_SunAngVelocity = LLMessageStringTable::getInstance()->getString("SunAngVelocity");
+char const* const _PREHASH_BinaryBucket = LLMessageStringTable::getInstance()->getString("BinaryBucket");
+char const* const _PREHASH_ImagePacket = LLMessageStringTable::getInstance()->getString("ImagePacket");
+char const* const _PREHASH_StartGroupProposal = LLMessageStringTable::getInstance()->getString("StartGroupProposal");
+char const* const _PREHASH_EnergyLevel = LLMessageStringTable::getInstance()->getString("EnergyLevel");
+char const* const _PREHASH_PriceForListing = LLMessageStringTable::getInstance()->getString("PriceForListing");
+char const* const _PREHASH_Scale = LLMessageStringTable::getInstance()->getString("Scale");
+char const* const _PREHASH_EstateCovenantReply = LLMessageStringTable::getInstance()->getString("EstateCovenantReply");
+char const* const _PREHASH_ParentEstateID = LLMessageStringTable::getInstance()->getString("ParentEstateID");
+char const* const _PREHASH_Extra2 = LLMessageStringTable::getInstance()->getString("Extra2");
+char const* const _PREHASH_Throttle = LLMessageStringTable::getInstance()->getString("Throttle");
+char const* const _PREHASH_SimIP = LLMessageStringTable::getInstance()->getString("SimIP");
+char const* const _PREHASH_GodID = LLMessageStringTable::getInstance()->getString("GodID");
+char const* const _PREHASH_TeleportMinPrice = LLMessageStringTable::getInstance()->getString("TeleportMinPrice");
+char const* const _PREHASH_VoteItem = LLMessageStringTable::getInstance()->getString("VoteItem");
+char const* const _PREHASH_ObjectRotation = LLMessageStringTable::getInstance()->getString("ObjectRotation");
+char const* const _PREHASH_SitRotation = LLMessageStringTable::getInstance()->getString("SitRotation");
+char const* const _PREHASH_SnapSelection = LLMessageStringTable::getInstance()->getString("SnapSelection");
+char const* const _PREHASH_SoundTrigger = LLMessageStringTable::getInstance()->getString("SoundTrigger");
+char const* const _PREHASH_TerrainRaiseLimit = LLMessageStringTable::getInstance()->getString("TerrainRaiseLimit");
+char const* const _PREHASH_Quorum = LLMessageStringTable::getInstance()->getString("Quorum");
+char const* const _PREHASH_AgentBlock = LLMessageStringTable::getInstance()->getString("AgentBlock");
+char const* const _PREHASH_CommandBlock = LLMessageStringTable::getInstance()->getString("CommandBlock");
+char const* const _PREHASH_PricePublicObjectDecay = LLMessageStringTable::getInstance()->getString("PricePublicObjectDecay");
+char const* const _PREHASH_SpawnPointPos = LLMessageStringTable::getInstance()->getString("SpawnPointPos");
+char const* const _PREHASH_VolumeDetail = LLMessageStringTable::getInstance()->getString("VolumeDetail");
+char const* const _PREHASH_FromAgentName = LLMessageStringTable::getInstance()->getString("FromAgentName");
+char const* const _PREHASH_Range = LLMessageStringTable::getInstance()->getString("Range");
+char const* const _PREHASH_DirectoryVisibility = LLMessageStringTable::getInstance()->getString("DirectoryVisibility");
+char const* const _PREHASH_PublicIP = LLMessageStringTable::getInstance()->getString("PublicIP");
+char const* const _PREHASH_TeleportFailed = LLMessageStringTable::getInstance()->getString("TeleportFailed");
+char const* const _PREHASH_PreloadSound = LLMessageStringTable::getInstance()->getString("PreloadSound");
+char const* const _PREHASH_ScreenshotID = LLMessageStringTable::getInstance()->getString("ScreenshotID");
+char const* const _PREHASH_CovenantTimestamp = LLMessageStringTable::getInstance()->getString("CovenantTimestamp");
+char const* const _PREHASH_OldestUnacked = LLMessageStringTable::getInstance()->getString("OldestUnacked");
+char const* const _PREHASH_SimulatorIP = LLMessageStringTable::getInstance()->getString("SimulatorIP");
+char const* const _PREHASH_Value = LLMessageStringTable::getInstance()->getString("Value");
+char const* const _PREHASH_JointAxisOrAnchor = LLMessageStringTable::getInstance()->getString("JointAxisOrAnchor");
+char const* const _PREHASH_Test0 = LLMessageStringTable::getInstance()->getString("Test0");
+char const* const _PREHASH_Test1 = LLMessageStringTable::getInstance()->getString("Test1");
+char const* const _PREHASH_Test2 = LLMessageStringTable::getInstance()->getString("Test2");
+char const* const _PREHASH_SunPhase = LLMessageStringTable::getInstance()->getString("SunPhase");
+char const* const _PREHASH_ParcelDivide = LLMessageStringTable::getInstance()->getString("ParcelDivide");
+char const* const _PREHASH_PriceObjectClaim = LLMessageStringTable::getInstance()->getString("PriceObjectClaim");
+char const* const _PREHASH_Field = LLMessageStringTable::getInstance()->getString("Field");
+char const* const _PREHASH_Ratio = LLMessageStringTable::getInstance()->getString("Ratio");
+char const* const _PREHASH_JoinGroupReply = LLMessageStringTable::getInstance()->getString("JoinGroupReply");
+char const* const _PREHASH_LiveHelpGroupReply = LLMessageStringTable::getInstance()->getString("LiveHelpGroupReply");
+char const* const _PREHASH_Score = LLMessageStringTable::getInstance()->getString("Score");
+char const* const _PREHASH_Image = LLMessageStringTable::getInstance()->getString("Image");
+char const* const _PREHASH_ObjectClickAction = LLMessageStringTable::getInstance()->getString("ObjectClickAction");
+char const* const _PREHASH_Parameter = LLMessageStringTable::getInstance()->getString("Parameter");
+char const* const _PREHASH_Flags = LLMessageStringTable::getInstance()->getString("Flags");
+char const* const _PREHASH_Plane = LLMessageStringTable::getInstance()->getString("Plane");
+char const* const _PREHASH_Width = LLMessageStringTable::getInstance()->getString("Width");
+char const* const _PREHASH_Right = LLMessageStringTable::getInstance()->getString("Right");
+char const* const _PREHASH_DirFindQuery = LLMessageStringTable::getInstance()->getString("DirFindQuery");
+char const* const _PREHASH_Textures = LLMessageStringTable::getInstance()->getString("Textures");
+char const* const _PREHASH_EventData = LLMessageStringTable::getInstance()->getString("EventData");
+char const* const _PREHASH_Final = LLMessageStringTable::getInstance()->getString("Final");
+char const* const _PREHASH_System = LLMessageStringTable::getInstance()->getString("System");
+char const* const _PREHASH_TelehubPos = LLMessageStringTable::getInstance()->getString("TelehubPos");
+char const* const _PREHASH_ReportAutosaveCrash = LLMessageStringTable::getInstance()->getString("ReportAutosaveCrash");
+char const* const _PREHASH_CreateTrustedCircuit = LLMessageStringTable::getInstance()->getString("CreateTrustedCircuit");
+char const* const _PREHASH_DenyTrustedCircuit = LLMessageStringTable::getInstance()->getString("DenyTrustedCircuit");
+char const* const _PREHASH_RequestTrustedCircuit = LLMessageStringTable::getInstance()->getString("RequestTrustedCircuit");
+char const* const _PREHASH_Codec = LLMessageStringTable::getInstance()->getString("Codec");
+char const* const _PREHASH_Modal = LLMessageStringTable::getInstance()->getString("Modal");
+char const* const _PREHASH_ChildAgentUnknown = LLMessageStringTable::getInstance()->getString("ChildAgentUnknown");
+char const* const _PREHASH_LandingType = LLMessageStringTable::getInstance()->getString("LandingType");
+char const* const _PREHASH_ScriptRunningReply = LLMessageStringTable::getInstance()->getString("ScriptRunningReply");
+char const* const _PREHASH_Reply = LLMessageStringTable::getInstance()->getString("Reply");
+char const* const _PREHASH_GroupAccountDetailsReply = LLMessageStringTable::getInstance()->getString("GroupAccountDetailsReply");
+char const* const _PREHASH_TelehubRot = LLMessageStringTable::getInstance()->getString("TelehubRot");
+char const* const _PREHASH_AcceptFriendship = LLMessageStringTable::getInstance()->getString("AcceptFriendship");
+char const* const _PREHASH_ItemType = LLMessageStringTable::getInstance()->getString("ItemType");
+char const* const _PREHASH_DwellInfo = LLMessageStringTable::getInstance()->getString("DwellInfo");
+char const* const _PREHASH_AgentResume = LLMessageStringTable::getInstance()->getString("AgentResume");
+char const* const _PREHASH_MailFilter = LLMessageStringTable::getInstance()->getString("MailFilter");
+char const* const _PREHASH_Disconnect = LLMessageStringTable::getInstance()->getString("Disconnect");
+char const* const _PREHASH_SimPosition = LLMessageStringTable::getInstance()->getString("SimPosition");
+char const* const _PREHASH_SimWideTotalPrims = LLMessageStringTable::getInstance()->getString("SimWideTotalPrims");
+char const* const _PREHASH_Index = LLMessageStringTable::getInstance()->getString("Index");
+char const* const _PREHASH_SimFilename = LLMessageStringTable::getInstance()->getString("SimFilename");
+char const* const _PREHASH_LastOwnerID = LLMessageStringTable::getInstance()->getString("LastOwnerID");
+char const* const _PREHASH_GroupNoticeRequest = LLMessageStringTable::getInstance()->getString("GroupNoticeRequest");
+char const* const _PREHASH_EmailMessageRequest = LLMessageStringTable::getInstance()->getString("EmailMessageRequest");
+char const* const _PREHASH_MapItemRequest = LLMessageStringTable::getInstance()->getString("MapItemRequest");
+char const* const _PREHASH_AgentCount = LLMessageStringTable::getInstance()->getString("AgentCount");
+char const* const _PREHASH_MessageBlock = LLMessageStringTable::getInstance()->getString("MessageBlock");
+char const* const _PREHASH_FuseBlock = LLMessageStringTable::getInstance()->getString("FuseBlock");
+char const* const _PREHASH_AgentGroupData = LLMessageStringTable::getInstance()->getString("AgentGroupData");
+char const* const _PREHASH_ClassifiedInfoUpdate = LLMessageStringTable::getInstance()->getString("ClassifiedInfoUpdate");
+char const* const _PREHASH_RegionPos = LLMessageStringTable::getInstance()->getString("RegionPos");
+char const* const _PREHASH_ParcelMediaUpdate = LLMessageStringTable::getInstance()->getString("ParcelMediaUpdate");
+char const* const _PREHASH_NoticeID = LLMessageStringTable::getInstance()->getString("NoticeID");
+char const* const _PREHASH_GridX = LLMessageStringTable::getInstance()->getString("GridX");
+char const* const _PREHASH_GridY = LLMessageStringTable::getInstance()->getString("GridY");
+char const* const _PREHASH_Title = LLMessageStringTable::getInstance()->getString("Title");
+char const* const _PREHASH_AuctionID = LLMessageStringTable::getInstance()->getString("AuctionID");
+char const* const _PREHASH_VoteType = LLMessageStringTable::getInstance()->getString("VoteType");
+char const* const _PREHASH_CategoryID = LLMessageStringTable::getInstance()->getString("CategoryID");
+char const* const _PREHASH_Token = LLMessageStringTable::getInstance()->getString("Token");
+char const* const _PREHASH_AggregatePerms = LLMessageStringTable::getInstance()->getString("AggregatePerms");
+char const* const _PREHASH_ObjectSelect = LLMessageStringTable::getInstance()->getString("ObjectSelect");
+char const* const _PREHASH_ForceObjectSelect = LLMessageStringTable::getInstance()->getString("ForceObjectSelect");
+char const* const _PREHASH_Price = LLMessageStringTable::getInstance()->getString("Price");
+char const* const _PREHASH_SunDirection = LLMessageStringTable::getInstance()->getString("SunDirection");
+char const* const _PREHASH_FromName = LLMessageStringTable::getInstance()->getString("FromName");
+char const* const _PREHASH_ChangeInventoryItemFlags = LLMessageStringTable::getInstance()->getString("ChangLLInventoryItemFlags");
+char const* const _PREHASH_Force = LLMessageStringTable::getInstance()->getString("Force");
+char const* const _PREHASH_TransactionBlock = LLMessageStringTable::getInstance()->getString("TransactionBlock");
+char const* const _PREHASH_PowersMask = LLMessageStringTable::getInstance()->getString("PowersMask");
+char const* const _PREHASH_Stamp = LLMessageStringTable::getInstance()->getString("Stamp");
+char const* const _PREHASH_TotalCredits = LLMessageStringTable::getInstance()->getString("TotalCredits");
+char const* const _PREHASH_State = LLMessageStringTable::getInstance()->getString("State");
+char const* const _PREHASH_TextureIndex = LLMessageStringTable::getInstance()->getString("TextureIndex");
+char const* const _PREHASH_InviteeID = LLMessageStringTable::getInstance()->getString("InviteeID");
+char const* const _PREHASH_ParcelReclaim = LLMessageStringTable::getInstance()->getString("ParcelReclaim");
+char const* const _PREHASH_Money = LLMessageStringTable::getInstance()->getString("Money");
+char const* const _PREHASH_PathTwist = LLMessageStringTable::getInstance()->getString("PathTwist");
+char const* const _PREHASH_AuthBuyerID = LLMessageStringTable::getInstance()->getString("AuthBuyerID");
+char const* const _PREHASH_Color = LLMessageStringTable::getInstance()->getString("Color");
+char const* const _PREHASH_SourceType = LLMessageStringTable::getInstance()->getString("SourceType");
+char const* const _PREHASH_World = LLMessageStringTable::getInstance()->getString("World");
+char const* const _PREHASH_QueryData = LLMessageStringTable::getInstance()->getString("QueryData");
+char const* const _PREHASH_Users = LLMessageStringTable::getInstance()->getString("Users");
+char const* const _PREHASH_SysOS = LLMessageStringTable::getInstance()->getString("SysOS");
+char const* const _PREHASH_Notes = LLMessageStringTable::getInstance()->getString("Notes");
+char const* const _PREHASH_AvatarID = LLMessageStringTable::getInstance()->getString("AvatarID");
+char const* const _PREHASH_FounderID = LLMessageStringTable::getInstance()->getString("FounderID");
+char const* const _PREHASH_EndPointID = LLMessageStringTable::getInstance()->getString("EndPointID");
+char const* const _PREHASH_LocationLookAt = LLMessageStringTable::getInstance()->getString("LocationLookAt");
+char const* const _PREHASH_Sound = LLMessageStringTable::getInstance()->getString("Sound");
+char const* const _PREHASH_Cover = LLMessageStringTable::getInstance()->getString("Cover");
+char const* const _PREHASH_TotalObjectCount = LLMessageStringTable::getInstance()->getString("TotalObjectCount");
+char const* const _PREHASH_TextureEntry = LLMessageStringTable::getInstance()->getString("TextureEntry");
+char const* const _PREHASH_SquareMetersCommitted = LLMessageStringTable::getInstance()->getString("SquareMetersCommitted");
+char const* const _PREHASH_ChannelID = LLMessageStringTable::getInstance()->getString("ChannelID");
+char const* const _PREHASH_Dwell = LLMessageStringTable::getInstance()->getString("Dwell");
+char const* const _PREHASH_North = LLMessageStringTable::getInstance()->getString("North");
+char const* const _PREHASH_AgentUpdate = LLMessageStringTable::getInstance()->getString("AgentUpdate");
+char const* const _PREHASH_PickGodDelete = LLMessageStringTable::getInstance()->getString("PickGodDelete");
+char const* const _PREHASH_HostName = LLMessageStringTable::getInstance()->getString("HostName");
+char const* const _PREHASH_PriceParcelClaim = LLMessageStringTable::getInstance()->getString("PriceParcelClaim");
+char const* const _PREHASH_ParcelClaim = LLMessageStringTable::getInstance()->getString("ParcelClaim");
+char const* const _PREHASH_AgentPowers = LLMessageStringTable::getInstance()->getString("AgentPowers");
+char const* const _PREHASH_ProfileHollow = LLMessageStringTable::getInstance()->getString("ProfileHollow");
+char const* const _PREHASH_GroupRoleChanges = LLMessageStringTable::getInstance()->getString("GroupRoleChanges");
+char const* const _PREHASH_Count = LLMessageStringTable::getInstance()->getString("Count");
+char const* const _PREHASH_South = LLMessageStringTable::getInstance()->getString("South");
+char const* const _PREHASH_ObjectUpdateCompressed = LLMessageStringTable::getInstance()->getString("ObjectUpdateCompressed");
+char const* const _PREHASH_MuteFlags = LLMessageStringTable::getInstance()->getString("MuteFlags");
+char const* const _PREHASH_Group = LLMessageStringTable::getInstance()->getString("Group");
+char const* const _PREHASH_AgentPause = LLMessageStringTable::getInstance()->getString("AgentPause");
+char const* const _PREHASH_LanguagesText = LLMessageStringTable::getInstance()->getString("LanguagesText");
+char const* const _PREHASH_Error = LLMessageStringTable::getInstance()->getString("Error");
+char const* const _PREHASH_InternalScriptMail = LLMessageStringTable::getInstance()->getString("InternalScriptMail");
+char const* const _PREHASH_FindAgent = LLMessageStringTable::getInstance()->getString("FindAgent");
+char const* const _PREHASH_AgentData = LLMessageStringTable::getInstance()->getString("AgentData");
+char const* const _PREHASH_FolderData = LLMessageStringTable::getInstance()->getString("FolderData");
+char const* const _PREHASH_AssetBlock = LLMessageStringTable::getInstance()->getString("AssetBlock");
+char const* const _PREHASH_AcceptNotices = LLMessageStringTable::getInstance()->getString("AcceptNotices");
+char const* const _PREHASH_SetGroupAcceptNotices = LLMessageStringTable::getInstance()->getString("SetGroupAcceptNotices");
+char const* const _PREHASH_CloseCircuit = LLMessageStringTable::getInstance()->getString("CloseCircuit");
+char const* const _PREHASH_TeleportFinish = LLMessageStringTable::getInstance()->getString("TeleportFinish");
+char const* const _PREHASH_PathRevolutions = LLMessageStringTable::getInstance()->getString("PathRevolutions");
+char const* const _PREHASH_ClassifiedInfoReply = LLMessageStringTable::getInstance()->getString("ClassifiedInfoReply");
+char const* const _PREHASH_ParcelInfoReply = LLMessageStringTable::getInstance()->getString("ParcelInfoReply");
+char const* const _PREHASH_AutosaveData = LLMessageStringTable::getInstance()->getString("AutosaveData");
+char const* const _PREHASH_SetStartLocation = LLMessageStringTable::getInstance()->getString("SetStartLocation");
+char const* const _PREHASH_PassHours = LLMessageStringTable::getInstance()->getString("PassHours");
+char const* const _PREHASH_AttachmentPt = LLMessageStringTable::getInstance()->getString("AttachmentPt");
+char const* const _PREHASH_ParcelFlags = LLMessageStringTable::getInstance()->getString("ParcelFlags");
+char const* const _PREHASH_NumVotes = LLMessageStringTable::getInstance()->getString("NumVotes");
+char const* const _PREHASH_AvatarPickerRequest = LLMessageStringTable::getInstance()->getString("AvatarPickerRequest");
+char const* const _PREHASH_TeleportLocationRequest = LLMessageStringTable::getInstance()->getString("TeleportLocationRequest");
+char const* const _PREHASH_DataHomeLocationRequest = LLMessageStringTable::getInstance()->getString("DataHomeLocationRequest");
+char const* const _PREHASH_EventNotificationAddRequest = LLMessageStringTable::getInstance()->getString("EventNotificationAddRequest");
+char const* const _PREHASH_ParcelDwellRequest = LLMessageStringTable::getInstance()->getString("ParcelDwellRequest");
+char const* const _PREHASH_EventLocationRequest = LLMessageStringTable::getInstance()->getString("EventLocationRequest");
+char const* const _PREHASH_SetStartLocationRequest = LLMessageStringTable::getInstance()->getString("SetStartLocationRequest");
+char const* const _PREHASH_QueryStart = LLMessageStringTable::getInstance()->getString("QueryStart");
+char const* const _PREHASH_EjectData = LLMessageStringTable::getInstance()->getString("EjectData");
+char const* const _PREHASH_AvatarTextureUpdate = LLMessageStringTable::getInstance()->getString("AvatarTextureUpdate");
+char const* const _PREHASH_RPCServerPort = LLMessageStringTable::getInstance()->getString("RPCServerPort");
+char const* const _PREHASH_Bytes = LLMessageStringTable::getInstance()->getString("Bytes");
+char const* const _PREHASH_Extra = LLMessageStringTable::getInstance()->getString("Extra");
+char const* const _PREHASH_ForceScriptControlRelease = LLMessageStringTable::getInstance()->getString("ForceScriptControlRelease");
+char const* const _PREHASH_ParcelRelease = LLMessageStringTable::getInstance()->getString("ParcelRelease");
+char const* const _PREHASH_VFileType = LLMessageStringTable::getInstance()->getString("VFileType");
+char const* const _PREHASH_EjectGroupMemberReply = LLMessageStringTable::getInstance()->getString("EjectGroupMemberReply");
+char const* const _PREHASH_ImageData = LLMessageStringTable::getInstance()->getString("ImageData");
+char const* const _PREHASH_SimulatorViewerTimeMessage = LLMessageStringTable::getInstance()->getString("SimulatorViewerTimeMessage");
+char const* const _PREHASH_Rotation = LLMessageStringTable::getInstance()->getString("Rotation");
+char const* const _PREHASH_Selection = LLMessageStringTable::getInstance()->getString("Selection");
+char const* const _PREHASH_TransactionData = LLMessageStringTable::getInstance()->getString("TransactionData");
+char const* const _PREHASH_OperationData = LLMessageStringTable::getInstance()->getString("OperationData");
+char const* const _PREHASH_ExpirationDate = LLMessageStringTable::getInstance()->getString("ExpirationDate");
+char const* const _PREHASH_ParcelDeedToGroup = LLMessageStringTable::getInstance()->getString("ParcelDeedToGroup");
+char const* const _PREHASH_AvatarPicksReply = LLMessageStringTable::getInstance()->getString("AvatarPicksReply");
+char const* const _PREHASH_GroupTitlesReply = LLMessageStringTable::getInstance()->getString("GroupTitlesReply");
+char const* const _PREHASH_AgentInfo = LLMessageStringTable::getInstance()->getString("AgentInfo");
+char const* const _PREHASH_MoneyTransferBackend = LLMessageStringTable::getInstance()->getString("MoneyTransferBackend");
+char const* const _PREHASH_NextOwnerMask = LLMessageStringTable::getInstance()->getString("NextOwnerMask");
+char const* const _PREHASH_MuteData = LLMessageStringTable::getInstance()->getString("MuteData");
+char const* const _PREHASH_PassPrice = LLMessageStringTable::getInstance()->getString("PassPrice");
+char const* const _PREHASH_SourceID = LLMessageStringTable::getInstance()->getString("SourceID");
+char const* const _PREHASH_ChangeUserRights = LLMessageStringTable::getInstance()->getString("ChangeUserRights");
+char const* const _PREHASH_TeleportFlags = LLMessageStringTable::getInstance()->getString("TeleportFlags");
+char const* const _PREHASH_SlaveParcelData = LLMessageStringTable::getInstance()->getString("SlaveParcelData");
+char const* const _PREHASH_AssetData = LLMessageStringTable::getInstance()->getString("AssetData");
+char const* const _PREHASH_MultipleObjectUpdate = LLMessageStringTable::getInstance()->getString("MultipleObjectUpdate");
+char const* const _PREHASH_ObjectUpdate = LLMessageStringTable::getInstance()->getString("ObjectUpdate");
+char const* const _PREHASH_ImprovedTerseObjectUpdate = LLMessageStringTable::getInstance()->getString("ImprovedTerseObjectUpdate");
+char const* const _PREHASH_ConfirmXferPacket = LLMessageStringTable::getInstance()->getString("ConfirmXferPacket");
+char const* const _PREHASH_StartPingCheck = LLMessageStringTable::getInstance()->getString("StartPingCheck");
+char const* const _PREHASH_SimWideDeletes = LLMessageStringTable::getInstance()->getString("SimWideDeletes");
+char const* const _PREHASH_LandStatReply = LLMessageStringTable::getInstance()->getString("LandStatReply");
+char const* const _PREHASH_IsPhantom = LLMessageStringTable::getInstance()->getString("IsPhantom");
+char const* const _PREHASH_AgentList = LLMessageStringTable::getInstance()->getString("AgentList");
+char const* const _PREHASH_SimApproved = LLMessageStringTable::getInstance()->getString("SimApproved");
+char const* const _PREHASH_RezObject = LLMessageStringTable::getInstance()->getString("RezObject");
+char const* const _PREHASH_TaskLocalID = LLMessageStringTable::getInstance()->getString("TaskLocalID");
+char const* const _PREHASH_ClaimDate = LLMessageStringTable::getInstance()->getString("ClaimDate");
+char const* const _PREHASH_MergeParcel = LLMessageStringTable::getInstance()->getString("MergeParcel");
+char const* const _PREHASH_Priority = LLMessageStringTable::getInstance()->getString("Priority");
+char const* const _PREHASH_QueryText = LLMessageStringTable::getInstance()->getString("QueryText");
+char const* const _PREHASH_GroupNoticeAdd = LLMessageStringTable::getInstance()->getString("GroupNoticeAdd");
+char const* const _PREHASH_ReturnType = LLMessageStringTable::getInstance()->getString("ReturnType");
+char const* const _PREHASH_FetchFolders = LLMessageStringTable::getInstance()->getString("FetchFolders");
+char const* const _PREHASH_SimulatorPublicHostBlock = LLMessageStringTable::getInstance()->getString("SimulatorPublicHostBlock");
+char const* const _PREHASH_HeaderData = LLMessageStringTable::getInstance()->getString("HeaderData");
+char const* const _PREHASH_RequestMultipleObjects = LLMessageStringTable::getInstance()->getString("RequestMultipleObjects");
+char const* const _PREHASH_RetrieveInstantMessages = LLMessageStringTable::getInstance()->getString("RetrieveInstantMessages");
+char const* const _PREHASH_OpenCircuit = LLMessageStringTable::getInstance()->getString("OpenCircuit");
+char const* const _PREHASH_CrossedRegion = LLMessageStringTable::getInstance()->getString("CrossedRegion");
+char const* const _PREHASH_DirGroupsReply = LLMessageStringTable::getInstance()->getString("DirGroupsReply");
+char const* const _PREHASH_AvatarGroupsReply = LLMessageStringTable::getInstance()->getString("AvatarGroupsReply");
+char const* const _PREHASH_EmailMessageReply = LLMessageStringTable::getInstance()->getString("EmailMessageReply");
+char const* const _PREHASH_GroupVoteHistoryItemReply = LLMessageStringTable::getInstance()->getString("GroupVoteHistoryItemReply");
+char const* const _PREHASH_ViewerPosition = LLMessageStringTable::getInstance()->getString("ViewerPosition");
+char const* const _PREHASH_Position = LLMessageStringTable::getInstance()->getString("Position");
+char const* const _PREHASH_ParentEstate = LLMessageStringTable::getInstance()->getString("ParentEstate");
+char const* const _PREHASH_EstateName = LLMessageStringTable::getInstance()->getString("EstateName");
+char const* const _PREHASH_MuteName = LLMessageStringTable::getInstance()->getString("MuteName");
+char const* const _PREHASH_ParcelRename = LLMessageStringTable::getInstance()->getString("ParcelRename");
+char const* const _PREHASH_ViewerFilename = LLMessageStringTable::getInstance()->getString("ViewerFilename");
+char const* const _PREHASH_UserReportInternal = LLMessageStringTable::getInstance()->getString("UserReportInternal");
+char const* const _PREHASH_AvatarPropertiesRequest = LLMessageStringTable::getInstance()->getString("AvatarPropertiesRequest");
+char const* const _PREHASH_ParcelPropertiesRequest = LLMessageStringTable::getInstance()->getString("ParcelPropertiesRequest");
+char const* const _PREHASH_GroupProfileRequest = LLMessageStringTable::getInstance()->getString("GroupProfileRequest");
+char const* const _PREHASH_AgentDataUpdateRequest = LLMessageStringTable::getInstance()->getString("AgentDataUpdateRequest");
+char const* const _PREHASH_PriceObjectScaleFactor = LLMessageStringTable::getInstance()->getString("PriceObjectScaleFactor");
+char const* const _PREHASH_OpenEnrollment = LLMessageStringTable::getInstance()->getString("OpenEnrollment");
+char const* const _PREHASH_GroupData = LLMessageStringTable::getInstance()->getString("GroupData");
+char const* const _PREHASH_RequestGodlikePowers = LLMessageStringTable::getInstance()->getString("RequestGodlikePowers");
+char const* const _PREHASH_GrantGodlikePowers = LLMessageStringTable::getInstance()->getString("GrantGodlikePowers");
+char const* const _PREHASH_TransactionID = LLMessageStringTable::getInstance()->getString("TransactionID");
+char const* const _PREHASH_DestinationID = LLMessageStringTable::getInstance()->getString("DestinationID");
+char const* const _PREHASH_Controls = LLMessageStringTable::getInstance()->getString("Controls");
+char const* const _PREHASH_FirstDetachAll = LLMessageStringTable::getInstance()->getString("FirstDetachAll");
+char const* const _PREHASH_EstateID = LLMessageStringTable::getInstance()->getString("EstateID");
+char const* const _PREHASH_ImprovedInstantMessage = LLMessageStringTable::getInstance()->getString("ImprovedInstantMessage");
+char const* const _PREHASH_CheckParcelSales = LLMessageStringTable::getInstance()->getString("CheckParcelSales");
+char const* const _PREHASH_ParcelSales = LLMessageStringTable::getInstance()->getString("ParcelSales");
+char const* const _PREHASH_CurrentInterval = LLMessageStringTable::getInstance()->getString("CurrentInterval");
+char const* const _PREHASH_PriceRentLight = LLMessageStringTable::getInstance()->getString("PriceRentLight");
+char const* const _PREHASH_MediaAutoScale = LLMessageStringTable::getInstance()->getString("MediaAutoScale");
+char const* const _PREHASH_NeighborBlock = LLMessageStringTable::getInstance()->getString("NeighborBlock");
+char const* const _PREHASH_LayerData = LLMessageStringTable::getInstance()->getString("LayerData");
+char const* const _PREHASH_NVPairData = LLMessageStringTable::getInstance()->getString("NVPairData");
+char const* const _PREHASH_TeleportLocal = LLMessageStringTable::getInstance()->getString("TeleportLocal");
+char const* const _PREHASH_EjecteeID = LLMessageStringTable::getInstance()->getString("EjecteeID");
+char const* const _PREHASH_VoteInitiator = LLMessageStringTable::getInstance()->getString("VoteInitiator");
+char const* const _PREHASH_TypeData = LLMessageStringTable::getInstance()->getString("TypeData");
+char const* const _PREHASH_OwnerIDs = LLMessageStringTable::getInstance()->getString("OwnerIDs");
+char const* const _PREHASH_SystemKickUser = LLMessageStringTable::getInstance()->getString("SystemKickUser");
+char const* const _PREHASH_TransactionTime = LLMessageStringTable::getInstance()->getString("TransactionTime");
+char const* const _PREHASH_TimeToLive = LLMessageStringTable::getInstance()->getString("TimeToLive");
+char const* const _PREHASH_OldAgentID = LLMessageStringTable::getInstance()->getString("OldAgentID");
+char const* const _PREHASH_MusicURL = LLMessageStringTable::getInstance()->getString("MusicURL");
+char const* const _PREHASH_ParcelPrimBonus = LLMessageStringTable::getInstance()->getString("ParcelPrimBonus");
+char const* const _PREHASH_EjectUser = LLMessageStringTable::getInstance()->getString("EjectUser");
+char const* const _PREHASH_CoarseLocationUpdate = LLMessageStringTable::getInstance()->getString("CoarseLocationUpdate");
+char const* const _PREHASH_ChildAgentPositionUpdate = LLMessageStringTable::getInstance()->getString("ChildAgentPositionUpdate");
+char const* const _PREHASH_StoreLocal = LLMessageStringTable::getInstance()->getString("StoreLocal");
+char const* const _PREHASH_GroupName = LLMessageStringTable::getInstance()->getString("GroupName");
+char const* const _PREHASH_PriceParcelRent = LLMessageStringTable::getInstance()->getString("PriceParcelRent");
+char const* const _PREHASH_SimStatus = LLMessageStringTable::getInstance()->getString("SimStatus");
+char const* const _PREHASH_TransactionSuccess = LLMessageStringTable::getInstance()->getString("TransactionSuccess");
+char const* const _PREHASH_LureType = LLMessageStringTable::getInstance()->getString("LureType");
+char const* const _PREHASH_GroupMask = LLMessageStringTable::getInstance()->getString("GroupMask");
+char const* const _PREHASH_SitObject = LLMessageStringTable::getInstance()->getString("SitObject");
+char const* const _PREHASH_Override = LLMessageStringTable::getInstance()->getString("Override");
+char const* const _PREHASH_LocomotionState = LLMessageStringTable::getInstance()->getString("LocomotionState");
+char const* const _PREHASH_PriceUpload = LLMessageStringTable::getInstance()->getString("PriceUpload");
+char const* const _PREHASH_RemoveParcel = LLMessageStringTable::getInstance()->getString("RemoveParcel");
+char const* const _PREHASH_ConfirmAuctionStart = LLMessageStringTable::getInstance()->getString("ConfirmAuctionStart");
+char const* const _PREHASH_RpcScriptRequestInbound = LLMessageStringTable::getInstance()->getString("RpcScriptRequestInbound");
+char const* const _PREHASH_ActiveGroupID = LLMessageStringTable::getInstance()->getString("ActiveGroupID");
+char const* const _PREHASH_ParcelReturnObjects = LLMessageStringTable::getInstance()->getString("ParcelReturnObjects");
+char const* const _PREHASH_TotalObjects = LLMessageStringTable::getInstance()->getString("TotalObjects");
+char const* const _PREHASH_ObjectExtraParams = LLMessageStringTable::getInstance()->getString("ObjectExtraParams");
+char const* const _PREHASH_Questions = LLMessageStringTable::getInstance()->getString("Questions");
+char const* const _PREHASH_TransferAbort = LLMessageStringTable::getInstance()->getString("TransferAbort");
+char const* const _PREHASH_TransferInventory = LLMessageStringTable::getInstance()->getString("TransferInventory");
+char const* const _PREHASH_RayTargetID = LLMessageStringTable::getInstance()->getString("RayTargetID");
+char const* const _PREHASH_ClaimPrice = LLMessageStringTable::getInstance()->getString("ClaimPrice");
+char const* const _PREHASH_ObjectProperties = LLMessageStringTable::getInstance()->getString("ObjectProperties");
+char const* const _PREHASH_ParcelProperties = LLMessageStringTable::getInstance()->getString("ParcelProperties");
+char const* const _PREHASH_EstateOwnerID = LLMessageStringTable::getInstance()->getString("EstateOwnerID");
+char const* const _PREHASH_LogoutRequest = LLMessageStringTable::getInstance()->getString("LogoutRequest");
+char const* const _PREHASH_AssetUploadRequest = LLMessageStringTable::getInstance()->getString("AssetUploadRequest");
+char const* const _PREHASH_TransactionType = LLMessageStringTable::getInstance()->getString("TransactionType");
+char const* const _PREHASH_AvatarPropertiesUpdate = LLMessageStringTable::getInstance()->getString("AvatarPropertiesUpdate");
+char const* const _PREHASH_ParcelPropertiesUpdate = LLMessageStringTable::getInstance()->getString("ParcelPropertiesUpdate");
+char const* const _PREHASH_FetchItems = LLMessageStringTable::getInstance()->getString("FetchItems");
+char const* const _PREHASH_AbortXfer = LLMessageStringTable::getInstance()->getString("AbortXfer");
+char const* const _PREHASH_DeRezAck = LLMessageStringTable::getInstance()->getString("DeRezAck");
+char const* const _PREHASH_TakeControls = LLMessageStringTable::getInstance()->getString("TakeControls");
+char const* const _PREHASH_DirLandReply = LLMessageStringTable::getInstance()->getString("DirLandReply");
+char const* const _PREHASH_MuteType = LLMessageStringTable::getInstance()->getString("MuteType");
+char const* const _PREHASH_IMViaEMail = LLMessageStringTable::getInstance()->getString("IMViaEMail");
+char const* const _PREHASH_RentPrice = LLMessageStringTable::getInstance()->getString("RentPrice");
+char const* const _PREHASH_GenericMessage = LLMessageStringTable::getInstance()->getString("GenericMessage");
+char const* const _PREHASH_ChildAgentAlive = LLMessageStringTable::getInstance()->getString("ChildAgentAlive");
+char const* const _PREHASH_AssetType = LLMessageStringTable::getInstance()->getString("AssetType");
+char const* const _PREHASH_SpawnPointBlock = LLMessageStringTable::getInstance()->getString("SpawnPointBlock");
+char const* const _PREHASH_AttachmentBlock = LLMessageStringTable::getInstance()->getString("AttachmentBlock");
+char const* const _PREHASH_ObjectMaterial = LLMessageStringTable::getInstance()->getString("ObjectMaterial");
+char const* const _PREHASH_OwnerName = LLMessageStringTable::getInstance()->getString("OwnerName");
+char const* const _PREHASH_AvatarNotesReply = LLMessageStringTable::getInstance()->getString("AvatarNotesReply");
+char const* const _PREHASH_CacheID = LLMessageStringTable::getInstance()->getString("CacheID");
+char const* const _PREHASH_OwnerMask = LLMessageStringTable::getInstance()->getString("OwnerMask");
+char const* const _PREHASH_TransferInventoryAck = LLMessageStringTable::getInstance()->getString("TransferInventoryAck");
+char const* const _PREHASH_RegionDenyAgeUnverified = LLMessageStringTable::getInstance()->getString("RegionDenyAgeUnverified");
+char const* const _PREHASH_AgeVerificationBlock = LLMessageStringTable::getInstance()->getString("AgeVerificationBlock");
+char const* const _PREHASH_UCoord = LLMessageStringTable::getInstance()->getString("UCoord");
+char const* const _PREHASH_VCoord = LLMessageStringTable::getInstance()->getString("VCoord");
+char const* const _PREHASH_FaceIndex = LLMessageStringTable::getInstance()->getString("FaceIndex");
+char const* const _PREHASH_StatusData = LLMessageStringTable::getInstance()->getString("StatusData");
+char const* const _PREHASH_ProductSKU = LLMessageStringTable::getInstance()->getString("ProductSKU");
diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h
index 08c74d22da0e0ffad37a5449352a0ebeada4de0b..8dc86601e6815093a99ea0ffb008f134187ebf42 100644
--- a/indra/llmessage/message_prehash.h
+++ b/indra/llmessage/message_prehash.h
@@ -32,1347 +32,1347 @@
  */
 
 
-extern F32 gPrehashVersionNumber;
+extern F32 const gPrehashVersionNumber;
 
-extern char * _PREHASH_X;
-extern char * _PREHASH_Y;
-extern char * _PREHASH_Z;
-extern char * _PREHASH_AddFlags;
-extern char * _PREHASH_FailureInfo;
-extern char * _PREHASH_MapData;
-extern char * _PREHASH_AddItem;
-extern char * _PREHASH_MeanCollision;
-extern char * _PREHASH_RezScript;
-extern char * _PREHASH_AvatarSitResponse;
-extern char * _PREHASH_InventoryAssetResponse;
-extern char * _PREHASH_KillObject;
-extern char * _PREHASH_ProposalID;
-extern char * _PREHASH_SerialNum;
-extern char * _PREHASH_Duration;
-extern char * _PREHASH_ScriptQuestion;
-extern char * _PREHASH_AddCircuitCode;
-extern char * _PREHASH_UseCircuitCode;
-extern char * _PREHASH_ViewerCircuitCode;
-extern char * _PREHASH_ScriptAnswerYes;
-extern char * _PREHASH_PartnerID;
-extern char * _PREHASH_DirLandQuery;
-extern char * _PREHASH_TeleportStart;
-extern char * _PREHASH_AboutText;
-extern char * _PREHASH_VisualParam;
-extern char * _PREHASH_GroupPrims;
-extern char * _PREHASH_SelectedPrims;
-extern char * _PREHASH_ID;
-extern char * _PREHASH_UUIDNameRequest;
-extern char * _PREHASH_UUIDGroupNameRequest;
-extern char * _PREHASH_GroupAccountTransactionsRequest;
-extern char * _PREHASH_MapNameRequest;
-extern char * _PREHASH_UpdateSimulator;
-extern char * _PREHASH_BillableFactor;
-extern char * _PREHASH_ObjectBonusFactor;
-extern char * _PREHASH_EnableSimulator;
-extern char * _PREHASH_DisableSimulator;
-extern char * _PREHASH_ConfirmEnableSimulator;
-extern char * _PREHASH_LayerType;
-extern char * _PREHASH_OwnerRole;
-extern char * _PREHASH_ParcelOverlay;
-extern char * _PREHASH_GroupOwned;
-extern char * _PREHASH_IP;
-extern char * _PREHASH_ChatFromViewer;
-extern char * _PREHASH_AvgAgentsInView;
-extern char * _PREHASH_AgentsInView;
-extern char * _PREHASH_GroupTitle;
-extern char * _PREHASH_MapLayerReply;
-extern char * _PREHASH_CompoundMsgID;
-extern char * _PREHASH_CameraConstraint;
-extern char * _PREHASH_DownloadTotals;
-extern char * _PREHASH_GenCounter;
-extern char * _PREHASH_FrozenData;
-extern char * _PREHASH_ChildAgentDying;
-extern char * _PREHASH_To;
-extern char * _PREHASH_CopyInventoryFromNotecard;
-extern char * _PREHASH_RezObjectFromNotecard;
-extern char * _PREHASH_ParcelDirFeeCurrent;
-extern char * _PREHASH_SeedCapability;
-extern char * _PREHASH_ObjectDuplicate;
-extern char * _PREHASH_InventoryData;
-extern char * _PREHASH_ReplyData;
-extern char * _PREHASH_ResetList;
-extern char * _PREHASH_MediaID;
-extern char * _PREHASH_RelatedRights;
-extern char * _PREHASH_RedirectGridX;
-extern char * _PREHASH_RedirectGridY;
-extern char * _PREHASH_TransferID;
-extern char * _PREHASH_TexturesChanged;
-extern char * _PREHASH_UserLookAt;
-extern char * _PREHASH_TestBlock1;
-extern char * _PREHASH_SensedData;
-extern char * _PREHASH_UpdateBlock;
-extern char * _PREHASH_ClassifiedGodDelete;
-extern char * _PREHASH_ObjectGrabUpdate;
-extern char * _PREHASH_LocationPos;
-extern char * _PREHASH_TaxDate;
-extern char * _PREHASH_StartDateTime;
-extern char * _PREHASH_ObjectUpdateCached;
-extern char * _PREHASH_Packets;
-extern char * _PREHASH_FailureType;
-extern char * _PREHASH_UpdateGroupInfo;
-extern char * _PREHASH_ObjectPermissions;
-extern char * _PREHASH_RevokePermissions;
-extern char * _PREHASH_UpdateFlags;
-extern char * _PREHASH_ObjectExportSelected;
-extern char * _PREHASH_RezSelected;
-extern char * _PREHASH_AutoPilot;
-extern char * _PREHASH_UpdateMuteListEntry;
-extern char * _PREHASH_RemoveMuteListEntry;
-extern char * _PREHASH_SetSimStatusInDatabase;
-extern char * _PREHASH_SetSimPresenceInDatabase;
-extern char * _PREHASH_CameraProperty;
-extern char * _PREHASH_BrushSize;
-extern char * _PREHASH_SimulatorSetMap;
-extern char * _PREHASH_RegionPresenceRequestByRegionID;
-extern char * _PREHASH_ParcelObjectOwnersReply;
-extern char * _PREHASH_GroupMembersReply;
-extern char * _PREHASH_GroupRoleMembersReply;
-extern char * _PREHASH_RequestRegionInfo;
-extern char * _PREHASH_AABBMax;
-extern char * _PREHASH_RequestPayPrice;
-extern char * _PREHASH_SimulatorPresentAtLocation;
-extern char * _PREHASH_AgentRequestSit;
-extern char * _PREHASH_AABBMin;
-extern char * _PREHASH_ClassifiedFlags;
-extern char * _PREHASH_ControlFlags;
-extern char * _PREHASH_TeleportRequest;
-extern char * _PREHASH_ScriptTeleportRequest;
-extern char * _PREHASH_EstateCovenantRequest;
-extern char * _PREHASH_DateUTC;
-extern char * _PREHASH_TaskIDs;
-extern char * _PREHASH_RequestResult;
-extern char * _PREHASH_CanAcceptAgents;
-extern char * _PREHASH_ObjectSaleInfo;
-extern char * _PREHASH_KillChildAgents;
-extern char * _PREHASH_Balance;
-extern char * _PREHASH_DerezContainer;
-extern char * _PREHASH_ObjectData;
-extern char * _PREHASH_CameraAtAxis;
-extern char * _PREHASH_InfoBlock;
-extern char * _PREHASH_OwnershipCost;
-extern char * _PREHASH_AvatarNotesUpdate;
-extern char * _PREHASH_PID;
-extern char * _PREHASH_DirPopularReply;
-extern char * _PREHASH_TerrainHeightRange00;
-extern char * _PREHASH_SimData;
-extern char * _PREHASH_TerrainHeightRange01;
-extern char * _PREHASH_TerrainHeightRange10;
-extern char * _PREHASH_TerrainHeightRange11;
-extern char * _PREHASH_UpdateInventoryItem;
-extern char * _PREHASH_UpdateCreateInventoryItem;
-extern char * _PREHASH_MoveInventoryItem;
-extern char * _PREHASH_CopyInventoryItem;
-extern char * _PREHASH_LinkInventoryItem;
-extern char * _PREHASH_RemoveInventoryItem;
-extern char * _PREHASH_CreateInventoryItem;
-extern char * _PREHASH_PathTwistBegin;
-extern char * _PREHASH_CRC;
-extern char * _PREHASH_AttachmentPoint;
-extern char * _PREHASH_TelehubBlock;
-extern char * _PREHASH_FOVBlock;
-extern char * _PREHASH_StartLocationData;
-extern char * _PREHASH_PositionData;
-extern char * _PREHASH_TimeSinceLast;
-extern char * _PREHASH_MapImage;
-extern char * _PREHASH_Objects;
-extern char * _PREHASH_URL;
-extern char * _PREHASH_CreationDate;
-extern char * _PREHASH_JointPivot;
-extern char * _PREHASH_FPS;
-extern char * _PREHASH_HasTelehub;
-extern char * _PREHASH_PathEnd;
-extern char * _PREHASH_ScriptDataReply;
-extern char * _PREHASH_MapBlockReply;
-extern char * _PREHASH_PropertiesData;
-extern char * _PREHASH_ViewerEffect;
-extern char * _PREHASH_FreezeUser;
-extern char * _PREHASH_OwnerPrims;
-extern char * _PREHASH_ObjectGrab;
-extern char * _PREHASH_ToAgentID;
-extern char * _PREHASH_SimulatorMapUpdate;
-extern char * _PREHASH_TransferPacket;
-extern char * _PREHASH_ObjectName;
-extern char * _PREHASH_GroupPowers;
-extern char * _PREHASH_OriginalName;
-extern char * _PREHASH_CompletePingCheck;
-extern char * _PREHASH_OnlineStatus;
-extern char * _PREHASH_ObjectDrop;
-extern char * _PREHASH_UseBigPackets;
-extern char * _PREHASH_GroupNoticesListReply;
-extern char * _PREHASH_ParcelAccessListReply;
-extern char * _PREHASH_RpcChannelReply;
-extern char * _PREHASH_RegionPresenceResponse;
-extern char * _PREHASH_CharterMember;
-extern char * _PREHASH_EdgeData;
-extern char * _PREHASH_NameData;
-extern char * _PREHASH_RegionPushOverride;
-extern char * _PREHASH_SimName;
-extern char * _PREHASH_UserReport;
-extern char * _PREHASH_DownloadPriority;
-extern char * _PREHASH_ToAgentId;
-extern char * _PREHASH_DirPopularQuery;
-extern char * _PREHASH_Mag;
-extern char * _PREHASH_ParcelPropertiesRequestByID;
-extern char * _PREHASH_ObjectLink;
-extern char * _PREHASH_RpcScriptReplyInbound;
-extern char * _PREHASH_RezData;
-extern char * _PREHASH_RemoveInventoryObjects;
-extern char * _PREHASH_GroupProposalBallot;
-extern char * _PREHASH_RPCServerIP;
-extern char * _PREHASH_Far;
-extern char * _PREHASH_GodSessionID;
-extern char * _PREHASH_FLAboutText;
-extern char * _PREHASH_RegionHandshakeReply;
-extern char * _PREHASH_GroupActiveProposalItemReply;
-extern char * _PREHASH_MapItemReply;
-extern char * _PREHASH_Seconds;
-extern char * _PREHASH_UpdateUserInfo;
-extern char * _PREHASH_AggregatePermTexturesOwner;
-extern char * _PREHASH_Set;
-extern char * _PREHASH_NewName;
-extern char * _PREHASH_Key;
-extern char * _PREHASH_AgentID;
-extern char * _PREHASH_EventNotificationRemoveRequest;
-extern char * _PREHASH_NewFolderID;
-extern char * _PREHASH_Arc;
-extern char * _PREHASH_RegionX;
-extern char * _PREHASH_RegionY;
-extern char * _PREHASH_RequestData;
-extern char * _PREHASH_Msg;
-extern char * _PREHASH_Top;
-extern char * _PREHASH_MiscStats;
-extern char * _PREHASH_ImageID;
-extern char * _PREHASH_DataPacket;
-extern char * _PREHASH_You;
-extern char * _PREHASH_ScriptControlChange;
-extern char * _PREHASH_LoadURL;
-extern char * _PREHASH_SetCPURatio;
-extern char * _PREHASH_NameValueData;
-extern char * _PREHASH_AtomicPassObject;
-extern char * _PREHASH_ErrorMessage;
-extern char * _PREHASH_ViewerFrozenMessage;
-extern char * _PREHASH_HealthMessage;
-extern char * _PREHASH_LogTextMessage;
-extern char * _PREHASH_TimeDilation;
-extern char * _PREHASH_RemoveContribution;
-extern char * _PREHASH_Contribution;
-extern char * _PREHASH_SetGroupContribution;
-extern char * _PREHASH_Offline;
-extern char * _PREHASH_AgentIsNowWearing;
-extern char * _PREHASH_Members;
-extern char * _PREHASH_FailedResends;
-extern char * _PREHASH_SecPerDay;
-extern char * _PREHASH_CameraCenter;
-extern char * _PREHASH_CameraLeftAxis;
-extern char * _PREHASH_ExBlock;
-extern char * _PREHASH_Channel;
-extern char * _PREHASH_NetTest;
-extern char * _PREHASH_DiscardLevel;
-extern char * _PREHASH_LayerID;
-extern char * _PREHASH_GrabOffset;
-extern char * _PREHASH_SimPort;
-extern char * _PREHASH_PricePerMeter;
-extern char * _PREHASH_RegionFlags;
-extern char * _PREHASH_VoteResult;
-extern char * _PREHASH_ParcelDirFeeEstimate;
-extern char * _PREHASH_ModifyBlock;
-extern char * _PREHASH_InventoryBlock;
-extern char * _PREHASH_ReplyBlock;
-extern char * _PREHASH_ValidUntil;
-extern char * _PREHASH_VelocityInterpolateOn;
-extern char * _PREHASH_ClassifiedDelete;
-extern char * _PREHASH_RegionDenyAnonymous;
-extern char * _PREHASH_FLImageID;
-extern char * _PREHASH_AllowPublish;
-extern char * _PREHASH_SitName;
-extern char * _PREHASH_RegionsVisited;
-extern char * _PREHASH_DirClassifiedReply;
-extern char * _PREHASH_AvatarClassifiedReply;
-extern char * _PREHASH_MediaURL;
-extern char * _PREHASH_CompleteAgentMovement;
-extern char * _PREHASH_ClassifiedID;
-extern char * _PREHASH_LocalID;
-extern char * _PREHASH_SpaceIP;
-extern char * _PREHASH_RemoveItem;
-extern char * _PREHASH_LogFailedMoneyTransaction;
-extern char * _PREHASH_ViewerStartAuction;
-extern char * _PREHASH_StartAuction;
-extern char * _PREHASH_DuplicateFlags;
-extern char * _PREHASH_RegionInfo2;
-extern char * _PREHASH_TextColor;
-extern char * _PREHASH_SlaveID;
-extern char * _PREHASH_Charter;
-extern char * _PREHASH_AlertData;
-extern char * _PREHASH_AlertInfo;
-extern char * _PREHASH_TargetBlock;
-extern char * _PREHASH_CheckParcelAuctions;
-extern char * _PREHASH_ParcelAuctions;
-extern char * _PREHASH_OwnerIsGroup;
-extern char * _PREHASH_NameValuePair;
-extern char * _PREHASH_RemoveNameValuePair;
-extern char * _PREHASH_BulkUpdateInventory;
-extern char * _PREHASH_UpdateTaskInventory;
-extern char * _PREHASH_RemoveTaskInventory;
-extern char * _PREHASH_MoveTaskInventory;
-extern char * _PREHASH_RequestTaskInventory;
-extern char * _PREHASH_ReplyTaskInventory;
-extern char * _PREHASH_AggregatePermInventory;
-extern char * _PREHASH_GroupAccountTransactionsReply;
-extern char * _PREHASH_SimulatorInfo;
-extern char * _PREHASH_WearableData;
-extern char * _PREHASH_Enabled;
-extern char * _PREHASH_Savings;
-extern char * _PREHASH_SimulatorLoad;
-extern char * _PREHASH_InternalRegionIP;
-extern char * _PREHASH_ExternalRegionIP;
-extern char * _PREHASH_TotalPairs;
-extern char * _PREHASH_CreateGroupRequest;
-extern char * _PREHASH_JoinGroupRequest;
-extern char * _PREHASH_LeaveGroupRequest;
-extern char * _PREHASH_InviteGroupRequest;
-extern char * _PREHASH_LiveHelpGroupRequest;
-extern char * _PREHASH_PriceParcelClaimFactor;
-extern char * _PREHASH_BillableArea;
-extern char * _PREHASH_ObjectID;
-extern char * _PREHASH_ObjectFlagUpdate;
-extern char * _PREHASH_GroupRoleUpdate;
-extern char * _PREHASH_RequestInventoryAsset;
-extern char * _PREHASH_ChangedGrid;
-extern char * _PREHASH_AgentDropGroup;
-extern char * _PREHASH_Details;
-extern char * _PREHASH_LocationX;
-extern char * _PREHASH_SaleType;
-extern char * _PREHASH_LocationY;
-extern char * _PREHASH_LocationZ;
-extern char * _PREHASH_EconomyData;
-extern char * _PREHASH_HeadRotation;
-extern char * _PREHASH_DeleteOnCompletion;
-extern char * _PREHASH_PublicPort;
-extern char * _PREHASH_DirClassifiedQuery;
-extern char * _PREHASH_CallbackID;
-extern char * _PREHASH_RequestParcelTransfer;
-extern char * _PREHASH_RoleCount;
-extern char * _PREHASH_ObjectCapacity;
-extern char * _PREHASH_RequestID;
-extern char * _PREHASH_RequestXfer;
-extern char * _PREHASH_ObjectTaxCurrent;
-extern char * _PREHASH_LightTaxCurrent;
-extern char * _PREHASH_LandTaxCurrent;
-extern char * _PREHASH_GroupTaxCurrent;
-extern char * _PREHASH_FetchInventoryDescendents;
-extern char * _PREHASH_InventoryDescendents;
-extern char * _PREHASH_Descendents;
-extern char * _PREHASH_PurgeInventoryDescendents;
-extern char * _PREHASH_ShowDir;
-extern char * _PREHASH_IsOwner;
-extern char * _PREHASH_Timestamp;
-extern char * _PREHASH_GlobalPos;
-extern char * _PREHASH_GrabOffsetInitial;
-extern char * _PREHASH_IsTrial;
-extern char * _PREHASH_ObjectDuplicateOnRay;
-extern char * _PREHASH_GroupMembershipCount;
-extern char * _PREHASH_MethodData;
-extern char * _PREHASH_ActivateGestures;
-extern char * _PREHASH_DeactivateGestures;
-extern char * _PREHASH_ProposalData;
-extern char * _PREHASH_PosGlobal;
-extern char * _PREHASH_SearchID;
-extern char * _PREHASH_RezMultipleAttachmentsFromInv;
-extern char * _PREHASH_SearchName;
-extern char * _PREHASH_VersionString;
-extern char * _PREHASH_CreateGroupReply;
-extern char * _PREHASH_LeaveGroupReply;
-extern char * _PREHASH_ActualArea;
-extern char * _PREHASH_Message;
-extern char * _PREHASH_ClickAction;
-extern char * _PREHASH_AssetUploadComplete;
-extern char * _PREHASH_RequestType;
-extern char * _PREHASH_UUID;
-extern char * _PREHASH_BaseMask;
-extern char * _PREHASH_NetBlock;
-extern char * _PREHASH_GlobalX;
-extern char * _PREHASH_GlobalY;
-extern char * _PREHASH_CopyRotates;
-extern char * _PREHASH_KickUserAck;
-extern char * _PREHASH_TopPick;
-extern char * _PREHASH_SessionID;
-extern char * _PREHASH_GlobalZ;
-extern char * _PREHASH_DeclineFriendship;
-extern char * _PREHASH_FormFriendship;
-extern char * _PREHASH_TerminateFriendship;
-extern char * _PREHASH_TaskData;
-extern char * _PREHASH_SimWideMaxPrims;
-extern char * _PREHASH_TotalPrims;
-extern char * _PREHASH_ProfileBegin;
-extern char * _PREHASH_Request;
-extern char * _PREHASH_GroupAccountDetailsRequest;
-extern char * _PREHASH_GroupActiveProposalsRequest;
-extern char * _PREHASH_StringValue;
-extern char * _PREHASH_Version;
-extern char * _PREHASH_OtherCount;
-extern char * _PREHASH_MemberCount;
-extern char * _PREHASH_ChatData;
-extern char * _PREHASH_IsGroupOwned;
-extern char * _PREHASH_EnergyEfficiency;
-extern char * _PREHASH_PickInfoUpdate;
-extern char * _PREHASH_PickDelete;
-extern char * _PREHASH_ScriptReset;
-extern char * _PREHASH_Requester;
-extern char * _PREHASH_ForSale;
-extern char * _PREHASH_NearestLandingRegionReply;
-extern char * _PREHASH_ParcelID;
-extern char * _PREHASH_Godlike;
-extern char * _PREHASH_TotalDebits;
-extern char * _PREHASH_Direction;
-extern char * _PREHASH_HealthData;
-extern char * _PREHASH_LeftAxis;
-extern char * _PREHASH_LocationBlock;
-extern char * _PREHASH_ObjectImage;
-extern char * _PREHASH_TerrainStartHeight00;
-extern char * _PREHASH_TerrainStartHeight01;
-extern char * _PREHASH_TerrainStartHeight10;
-extern char * _PREHASH_TerrainStartHeight11;
-extern char * _PREHASH_WaterHeight;
-extern char * _PREHASH_FetchInventoryReply;
-extern char * _PREHASH_GroupAccountSummaryReply;
-extern char * _PREHASH_AttachedSound;
-extern char * _PREHASH_ParamInUse;
-extern char * _PREHASH_GodKickUser;
-extern char * _PREHASH_PickName;
-extern char * _PREHASH_TaskName;
-extern char * _PREHASH_ObjectCount;
-extern char * _PREHASH_RegionPresenceRequestByHandle;
-extern char * _PREHASH_RezSingleAttachmentFromInv;
-extern char * _PREHASH_ChildAgentUpdate;
-extern char * _PREHASH_IsOwnerGroup;
-extern char * _PREHASH_AgentHeightWidth;
-extern char * _PREHASH_VerticalAngle;
-extern char * _PREHASH_WearableType;
-extern char * _PREHASH_AggregatePermNextOwner;
-extern char * _PREHASH_ShowInList;
-extern char * _PREHASH_UpdateParcel;
-extern char * _PREHASH_SetAlwaysRun;
-extern char * _PREHASH_NVPair;
-extern char * _PREHASH_SearchType;
-extern char * _PREHASH_ObjectSpinStart;
-extern char * _PREHASH_UseEstateSun;
-extern char * _PREHASH_RegionID;
-extern char * _PREHASH_AbuseRegionID;
-extern char * _PREHASH_Creator;
-extern char * _PREHASH_ProposalText;
-extern char * _PREHASH_DirEventsReply;
-extern char * _PREHASH_EventInfoReply;
-extern char * _PREHASH_UserInfoReply;
-extern char * _PREHASH_PathRadiusOffset;
-extern char * _PREHASH_TextureData;
-extern char * _PREHASH_ChatPass;
-extern char * _PREHASH_TargetID;
-extern char * _PREHASH_DefaultPayPrice;
-extern char * _PREHASH_UserLocation;
-extern char * _PREHASH_MaxPrims;
-extern char * _PREHASH_LandmarkID;
-extern char * _PREHASH_InitiateDownload;
-extern char * _PREHASH_Name;
-extern char * _PREHASH_OtherCleanTime;
-extern char * _PREHASH_ParcelSetOtherCleanTime;
-extern char * _PREHASH_TeleportPriceExponent;
-extern char * _PREHASH_Gain;
-extern char * _PREHASH_PacketAck;
-extern char * _PREHASH_PathSkew;
-extern char * _PREHASH_SimulatorShutdownRequest;
-extern char * _PREHASH_NearestLandingRegionRequest;
-extern char * _PREHASH_OtherID;
-extern char * _PREHASH_MemberID;
-extern char * _PREHASH_MapLayerRequest;
-extern char * _PREHASH_ObjectScale;
-extern char * _PREHASH_TargetIP;
-extern char * _PREHASH_Redo;
-extern char * _PREHASH_MoneyBalance;
-extern char * _PREHASH_TrackAgent;
-extern char * _PREHASH_MaxX;
-extern char * _PREHASH_Data;
-extern char * _PREHASH_MaxY;
-extern char * _PREHASH_TextureAnim;
-extern char * _PREHASH_ReturnIDs;
-extern char * _PREHASH_Date;
-extern char * _PREHASH_AgentWearablesUpdate;
-extern char * _PREHASH_AgentDataUpdate;
-extern char * _PREHASH_GroupDataUpdate;
-extern char * _PREHASH_Hash;
-extern char * _PREHASH_AgentGroupDataUpdate;
-extern char * _PREHASH_Left;
-extern char * _PREHASH_Mask;
-extern char * _PREHASH_ForceMouselook;
-extern char * _PREHASH_Success;
-extern char * _PREHASH_ObjectGroup;
-extern char * _PREHASH_SunHour;
-extern char * _PREHASH_MinX;
-extern char * _PREHASH_ScriptSensorReply;
-extern char * _PREHASH_MinY;
-extern char * _PREHASH_Command;
-extern char * _PREHASH_Desc;
-extern char * _PREHASH_AttachmentNeedsSave;
-extern char * _PREHASH_HistoryItemData;
-extern char * _PREHASH_AgentCachedTexture;
-extern char * _PREHASH_Subject;
-extern char * _PREHASH_East;
-extern char * _PREHASH_QueryReplies;
-extern char * _PREHASH_ObjectCategory;
-extern char * _PREHASH_Time;
-extern char * _PREHASH_CreateLandmarkForEvent;
-extern char * _PREHASH_ParentID;
-extern char * _PREHASH_Ping;
-extern char * _PREHASH_Perp;
-extern char * _PREHASH_Code;
-extern char * _PREHASH_InvType;
-extern char * _PREHASH_AgentFOV;
-extern char * _PREHASH_Audible;
-extern char * _PREHASH_AuctionData;
-extern char * _PREHASH_IDBlock;
-extern char * _PREHASH_West;
-extern char * _PREHASH_Undo;
-extern char * _PREHASH_TotalNumItems;
-extern char * _PREHASH_Info;
-extern char * _PREHASH_Area;
-extern char * _PREHASH_SimCrashed;
-extern char * _PREHASH_Text;
-extern char * _PREHASH_PriceGroupCreate;
-extern char * _PREHASH_ObjectShape;
-extern char * _PREHASH_GroupRoleDataReply;
-extern char * _PREHASH_MuteCRC;
-extern char * _PREHASH_Size;
-extern char * _PREHASH_FromAddress;
-extern char * _PREHASH_Body;
-extern char * _PREHASH_FileData;
-extern char * _PREHASH_List;
-extern char * _PREHASH_KickUser;
-extern char * _PREHASH_OtherPrims;
-extern char * _PREHASH_RunTime;
-extern char * _PREHASH_GrantUserRights;
-extern char * _PREHASH_RpcScriptRequestInboundForward;
-extern char * _PREHASH_More;
-extern char * _PREHASH_Majority;
-extern char * _PREHASH_MetersTraveled;
-extern char * _PREHASH_Stat;
-extern char * _PREHASH_SoundID;
-extern char * _PREHASH_Item;
-extern char * _PREHASH_User;
-extern char * _PREHASH_Prey;
-extern char * _PREHASH_RayStart;
-extern char * _PREHASH_UsecSinceStart;
-extern char * _PREHASH_ParcelData;
-extern char * _PREHASH_CameraUpAxis;
-extern char * _PREHASH_ScriptDialog;
-extern char * _PREHASH_MasterParcelData;
-extern char * _PREHASH_Invalid;
-extern char * _PREHASH_ProfileCurve;
-extern char * _PREHASH_ParcelAccessListUpdate;
-extern char * _PREHASH_MuteListUpdate;
-extern char * _PREHASH_SendPacket;
-extern char * _PREHASH_SendXferPacket;
-extern char * _PREHASH_RegionDenyIdentified;
-extern char * _PREHASH_NotecardItemID;
-extern char * _PREHASH_LastName;
-extern char * _PREHASH_From;
-extern char * _PREHASH_RoleChange;
-extern char * _PREHASH_Port;
-extern char * _PREHASH_MemberTitle;
-extern char * _PREHASH_LogParcelChanges;
-extern char * _PREHASH_AgentCachedTextureResponse;
-extern char * _PREHASH_DeRezObject;
-extern char * _PREHASH_IsTemporary;
-extern char * _PREHASH_InsigniaID;
-extern char * _PREHASH_CheckFlags;
-extern char * _PREHASH_EventID;
-extern char * _PREHASH_Selected;
-extern char * _PREHASH_FromAgentId;
-extern char * _PREHASH_Type;
-extern char * _PREHASH_ChatType;
-extern char * _PREHASH_ReportData;
-extern char * _PREHASH_RequestBlock;
-extern char * _PREHASH_GrantData;
-extern char * _PREHASH_DetachAttachmentIntoInv;
-extern char * _PREHASH_ParcelDisableObjects;
-extern char * _PREHASH_Sections;
-extern char * _PREHASH_GodLevel;
-extern char * _PREHASH_PayPriceReply;
-extern char * _PREHASH_QueryID;
-extern char * _PREHASH_CameraEyeOffset;
-extern char * _PREHASH_AgentPosition;
-extern char * _PREHASH_GrabPosition;
-extern char * _PREHASH_OnlineNotification;
-extern char * _PREHASH_OfflineNotification;
-extern char * _PREHASH_SendPostcard;
-extern char * _PREHASH_RequestFlags;
-extern char * _PREHASH_GroupAccountSummaryRequest;
-extern char * _PREHASH_GroupVoteHistoryRequest;
-extern char * _PREHASH_ParamValue;
-extern char * _PREHASH_MaxAgents;
-extern char * _PREHASH_CreateNewOutfitAttachments;
-extern char * _PREHASH_RegionHandle;
-extern char * _PREHASH_TeleportProgress;
-extern char * _PREHASH_AgentQuitCopy;
-extern char * _PREHASH_AvatarInterestsUpdate;
-extern char * _PREHASH_GroupNoticeID;
-extern char * _PREHASH_ParcelName;
-extern char * _PREHASH_PriceObjectRent;
-extern char * _PREHASH_OfferCallingCard;
-extern char * _PREHASH_AcceptCallingCard;
-extern char * _PREHASH_DeclineCallingCard;
-extern char * _PREHASH_AgentAccess;
-extern char * _PREHASH_AgentLegacyAccess;
-extern char * _PREHASH_AgentMaxAccess;
-extern char * _PREHASH_DataHomeLocationReply;
-extern char * _PREHASH_EventLocationReply;
-extern char * _PREHASH_TerseDateID;
-extern char * _PREHASH_ObjectOwner;
-extern char * _PREHASH_AssetID;
-extern char * _PREHASH_AlertMessage;
-extern char * _PREHASH_AgentAlertMessage;
-extern char * _PREHASH_EstateOwnerMessage;
-extern char * _PREHASH_ParcelMediaCommandMessage;
-extern char * _PREHASH_Auction;
-extern char * _PREHASH_Category;
-extern char * _PREHASH_FilePath;
-extern char * _PREHASH_ItemFlags;
-extern char * _PREHASH_Invoice;
-extern char * _PREHASH_IntervalDays;
-extern char * _PREHASH_PathScaleX;
-extern char * _PREHASH_FromTaskID;
-extern char * _PREHASH_PathScaleY;
-extern char * _PREHASH_TimeInfo;
-extern char * _PREHASH_PublicCount;
-extern char * _PREHASH_ParcelJoin;
-extern char * _PREHASH_GroupRolesCount;
-extern char * _PREHASH_SimulatorBlock;
-extern char * _PREHASH_GroupID;
-extern char * _PREHASH_AgentVel;
-extern char * _PREHASH_RequestImage;
-extern char * _PREHASH_NetStats;
-extern char * _PREHASH_AgentPos;
-extern char * _PREHASH_AgentSit;
-extern char * _PREHASH_Material;
-extern char * _PREHASH_ObjectDeGrab;
-extern char * _PREHASH_VelocityInterpolateOff;
-extern char * _PREHASH_AuthorizedBuyerID;
-extern char * _PREHASH_AvatarPropertiesReply;
-extern char * _PREHASH_GroupProfileReply;
-extern char * _PREHASH_SimOwner;
-extern char * _PREHASH_SalePrice;
-extern char * _PREHASH_Animation;
-extern char * _PREHASH_OwnerID;
-extern char * _PREHASH_NearestLandingRegionUpdated;
-extern char * _PREHASH_PassToAgent;
-extern char * _PREHASH_PreyAgent;
-extern char * _PREHASH_SimStats;
-extern char * _PREHASH_LogoutReply;
-extern char * _PREHASH_FeatureDisabled;
-extern char * _PREHASH_PhysicalAvatarEventList;
-extern char * _PREHASH_ObjectLocalID;
-extern char * _PREHASH_Dropped;
-extern char * _PREHASH_WebProfilesDisabled;
-extern char * _PREHASH_Destination;
-extern char * _PREHASH_MasterID;
-extern char * _PREHASH_TransferData;
-extern char * _PREHASH_WantToMask;
-extern char * _PREHASH_ParcelSelectObjects;
-extern char * _PREHASH_ExtraParams;
-extern char * _PREHASH_CreatorID;
-extern char * _PREHASH_Summary;
-extern char * _PREHASH_BuyObjectInventory;
-extern char * _PREHASH_FetchInventory;
-extern char * _PREHASH_InventoryID;
-extern char * _PREHASH_PacketNumber;
-extern char * _PREHASH_SetFollowCamProperties;
-extern char * _PREHASH_ClearFollowCamProperties;
-extern char * _PREHASH_SequenceID;
-extern char * _PREHASH_DataServerLogout;
-extern char * _PREHASH_NameValue;
-extern char * _PREHASH_PathShearX;
-extern char * _PREHASH_PathShearY;
-extern char * _PREHASH_Velocity;
-extern char * _PREHASH_SecPerYear;
-extern char * _PREHASH_FirstName;
-extern char * _PREHASH_AttachedSoundGainChange;
-extern char * _PREHASH_LocationID;
-extern char * _PREHASH_Running;
-extern char * _PREHASH_AgentThrottle;
-extern char * _PREHASH_NeighborList;
-extern char * _PREHASH_PathTaperX;
-extern char * _PREHASH_PathTaperY;
-extern char * _PREHASH_AgentRelated;
-extern char * _PREHASH_GranterBlock;
-extern char * _PREHASH_UseCachedMuteList;
-extern char * _PREHASH_FailStats;
-extern char * _PREHASH_Tempfile;
-extern char * _PREHASH_BuyerID;
-extern char * _PREHASH_DirPeopleReply;
-extern char * _PREHASH_TransferInfo;
-extern char * _PREHASH_AvatarPickerRequestBackend;
-extern char * _PREHASH_AvatarPropertiesRequestBackend;
-extern char * _PREHASH_UpdateData;
-extern char * _PREHASH_SimFPS;
-extern char * _PREHASH_ReporterID;
-extern char * _PREHASH_ButtonLabel;
-extern char * _PREHASH_GranterID;
-extern char * _PREHASH_WantToText;
-extern char * _PREHASH_ReportType;
-extern char * _PREHASH_SimulatorReady;
-extern char * _PREHASH_DataBlock;
-extern char * _PREHASH_AnimationSourceList;
-extern char * _PREHASH_SubscribeLoad;
-extern char * _PREHASH_UnsubscribeLoad;
-extern char * _PREHASH_Packet;
-extern char * _PREHASH_UndoLand;
-extern char * _PREHASH_SimAccess;
-extern char * _PREHASH_AbuserID;
-extern char * _PREHASH_MembershipFee;
-extern char * _PREHASH_InviteGroupResponse;
-extern char * _PREHASH_CreateInventoryFolder;
-extern char * _PREHASH_UpdateInventoryFolder;
-extern char * _PREHASH_MoveInventoryFolder;
-extern char * _PREHASH_RemoveInventoryFolder;
-extern char * _PREHASH_MoneyData;
-extern char * _PREHASH_ObjectDeselect;
-extern char * _PREHASH_NewAssetID;
-extern char * _PREHASH_ObjectAdd;
-extern char * _PREHASH_RayEndIsIntersection;
-extern char * _PREHASH_CompleteAuction;
-extern char * _PREHASH_CircuitCode;
-extern char * _PREHASH_AgentMovementComplete;
-extern char * _PREHASH_ViewerIP;
-extern char * _PREHASH_Header;
-extern char * _PREHASH_GestureFlags;
-extern char * _PREHASH_XferID;
-extern char * _PREHASH_StatValue;
-extern char * _PREHASH_TaskID;
-extern char * _PREHASH_PickID;
-extern char * _PREHASH_RayEnd;
-extern char * _PREHASH_Throttles;
-extern char * _PREHASH_RebakeAvatarTextures;
-extern char * _PREHASH_UpAxis;
-extern char * _PREHASH_AgentTextures;
-extern char * _PREHASH_NotecardData;
-extern char * _PREHASH_Radius;
-extern char * _PREHASH_OffCircuit;
-extern char * _PREHASH_Access;
-extern char * _PREHASH_TitleRoleID;
-extern char * _PREHASH_SquareMetersCredit;
-extern char * _PREHASH_Filename;
-extern char * _PREHASH_ClassifiedInfoRequest;
-extern char * _PREHASH_ParcelInfoRequest;
-extern char * _PREHASH_ParcelObjectOwnersRequest;
-extern char * _PREHASH_TeleportLandmarkRequest;
-extern char * _PREHASH_EventInfoRequest;
-extern char * _PREHASH_MoneyBalanceRequest;
-extern char * _PREHASH_GroupMembersRequest;
-extern char * _PREHASH_GroupRoleMembersRequest;
-extern char * _PREHASH_ChatFromSimulator;
-extern char * _PREHASH_OldFolderID;
-extern char * _PREHASH_UserInfoRequest;
-extern char * _PREHASH_TextureID;
-extern char * _PREHASH_ProfileURL;
-extern char * _PREHASH_Handle;
-extern char * _PREHASH_ButtonIndex;
-extern char * _PREHASH_GetScriptRunning;
-extern char * _PREHASH_SetScriptRunning;
-extern char * _PREHASH_Health;
-extern char * _PREHASH_CircuitInfo;
-extern char * _PREHASH_ObjectBuy;
-extern char * _PREHASH_ProfileEnd;
-extern char * _PREHASH_Effect;
-extern char * _PREHASH_TestMessage;
-extern char * _PREHASH_ScriptMailRegistration;
-extern char * _PREHASH_AgentSetAppearance;
-extern char * _PREHASH_AvatarAppearance;
-extern char * _PREHASH_RegionData;
-extern char * _PREHASH_RequestingRegionData;
-extern char * _PREHASH_LandingRegionData;
-extern char * _PREHASH_SitTransform;
-extern char * _PREHASH_TerrainBase0;
-extern char * _PREHASH_SkillsMask;
-extern char * _PREHASH_AtAxis;
-extern char * _PREHASH_TerrainBase1;
-extern char * _PREHASH_Reason;
-extern char * _PREHASH_TerrainBase2;
-extern char * _PREHASH_TerrainBase3;
-extern char * _PREHASH_Params;
-extern char * _PREHASH_PingID;
-extern char * _PREHASH_Change;
-extern char * _PREHASH_Height;
-extern char * _PREHASH_Region;
-extern char * _PREHASH_TelehubInfo;
-extern char * _PREHASH_StateSave;
-extern char * _PREHASH_RoleData;
-extern char * _PREHASH_AgentAnimation;
-extern char * _PREHASH_AvatarAnimation;
-extern char * _PREHASH_LogDwellTime;
-extern char * _PREHASH_ParcelGodMarkAsContent;
-extern char * _PREHASH_UsePhysics;
-extern char * _PREHASH_RegionDenyTransacted;
-extern char * _PREHASH_JointType;
-extern char * _PREHASH_ObjectTaxEstimate;
-extern char * _PREHASH_LightTaxEstimate;
-extern char * _PREHASH_LandTaxEstimate;
-extern char * _PREHASH_TeleportLandingStatusChanged;
-extern char * _PREHASH_GroupTaxEstimate;
-extern char * _PREHASH_AvgViewerFPS;
-extern char * _PREHASH_Buttons;
-extern char * _PREHASH_Sender;
-extern char * _PREHASH_Dialog;
-extern char * _PREHASH_TargetData;
-extern char * _PREHASH_DestID;
-extern char * _PREHASH_PricePublicObjectDelete;
-extern char * _PREHASH_ObjectDelete;
-extern char * _PREHASH_Delete;
-extern char * _PREHASH_EventGodDelete;
-extern char * _PREHASH_LastTaxDate;
-extern char * _PREHASH_MapImageID;
-extern char * _PREHASH_EndDateTime;
-extern char * _PREHASH_TerrainDetail0;
-extern char * _PREHASH_TerrainDetail1;
-extern char * _PREHASH_TerrainDetail2;
-extern char * _PREHASH_TerrainDetail3;
-extern char * _PREHASH_Offset;
-extern char * _PREHASH_ObjectDelink;
-extern char * _PREHASH_TargetObject;
-extern char * _PREHASH_IsEstateManager;
-extern char * _PREHASH_CancelAuction;
-extern char * _PREHASH_ObjectDetach;
-extern char * _PREHASH_Compressed;
-extern char * _PREHASH_PathBegin;
-extern char * _PREHASH_BypassRaycast;
-extern char * _PREHASH_WinnerID;
-extern char * _PREHASH_ChannelType;
-extern char * _PREHASH_NonExemptMembers;
-extern char * _PREHASH_Agents;
-extern char * _PREHASH_MemberData;
-extern char * _PREHASH_ToGroupID;
-extern char * _PREHASH_ImageNotInDatabase;
-extern char * _PREHASH_StartDate;
-extern char * _PREHASH_AnimID;
-extern char * _PREHASH_Serial;
-extern char * _PREHASH_AbuseRegionName;
-extern char * _PREHASH_ModifyLand;
-extern char * _PREHASH_Digest;
-extern char * _PREHASH_Victim;
-extern char * _PREHASH_Script;
-extern char * _PREHASH_PickInfoReply;
-extern char * _PREHASH_MoneyBalanceReply;
-extern char * _PREHASH_RoutedMoneyBalanceReply;
-extern char * _PREHASH_RoleID;
-extern char * _PREHASH_RegionInfo;
-extern char * _PREHASH_GodUpdateRegionInfo;
-extern char * _PREHASH_StartAnim;
-extern char * _PREHASH_Action;
-extern char * _PREHASH_Location;
-extern char * _PREHASH_Rights;
-extern char * _PREHASH_SearchDir;
-extern char * _PREHASH_TransferRequest;
-extern char * _PREHASH_ScriptSensorRequest;
-extern char * _PREHASH_MoneyTransferRequest;
-extern char * _PREHASH_EjectGroupMemberRequest;
-extern char * _PREHASH_SkillsText;
-extern char * _PREHASH_Resent;
-extern char * _PREHASH_Center;
-extern char * _PREHASH_SharedData;
-extern char * _PREHASH_PSBlock;
-extern char * _PREHASH_UUIDNameBlock;
-extern char * _PREHASH_GroupTitleUpdate;
-extern char * _PREHASH_Method;
-extern char * _PREHASH_TouchName;
-extern char * _PREHASH_UpdateType;
-extern char * _PREHASH_KickedFromEstateID;
-extern char * _PREHASH_CandidateID;
-extern char * _PREHASH_ParamData;
-extern char * _PREHASH_GodlikeMessage;
-extern char * _PREHASH_SystemMessage;
-extern char * _PREHASH_BodyRotation;
-extern char * _PREHASH_SearchRegions;
-extern char * _PREHASH_AnimationData;
-extern char * _PREHASH_StatID;
-extern char * _PREHASH_ItemID;
-extern char * _PREHASH_ScriptDialogReply;
-extern char * _PREHASH_RegionIDAndHandleReply;
-extern char * _PREHASH_CameraAtOffset;
-extern char * _PREHASH_VoteID;
-extern char * _PREHASH_ParcelGodForceOwner;
-extern char * _PREHASH_Filter;
-extern char * _PREHASH_InviteData;
-extern char * _PREHASH_PCode;
-extern char * _PREHASH_SearchPos;
-extern char * _PREHASH_PreyID;
-extern char * _PREHASH_TerrainLowerLimit;
-extern char * _PREHASH_EventFlags;
-extern char * _PREHASH_TallyVotes;
-extern char * _PREHASH_Result;
-extern char * _PREHASH_LookAt;
-extern char * _PREHASH_SearchOrder;
-extern char * _PREHASH_PayButton;
-extern char * _PREHASH_SelfCount;
-extern char * _PREHASH_PacketCount;
-extern char * _PREHASH_ParcelBuyPass;
-extern char * _PREHASH_OldItemID;
-extern char * _PREHASH_RegionPort;
-extern char * _PREHASH_PriceEnergyUnit;
-extern char * _PREHASH_Bitmap;
-extern char * _PREHASH_CacheMissType;
-extern char * _PREHASH_VFileID;
-extern char * _PREHASH_GroupInsigniaID;
-extern char * _PREHASH_Online;
-extern char * _PREHASH_KickFlags;
-extern char * _PREHASH_CovenantID;
-extern char * _PREHASH_SysCPU;
-extern char * _PREHASH_EMail;
-extern char * _PREHASH_AggregatePermTextures;
-extern char * _PREHASH_ChatChannel;
-extern char * _PREHASH_ReturnID;
-extern char * _PREHASH_ObjectAttach;
-extern char * _PREHASH_TargetPort;
-extern char * _PREHASH_ObjectSpinStop;
-extern char * _PREHASH_FullID;
-extern char * _PREHASH_ActivateGroup;
-extern char * _PREHASH_SysGPU;
-extern char * _PREHASH_AvatarInterestsReply;
-extern char * _PREHASH_StartLure;
-extern char * _PREHASH_SysRAM;
-extern char * _PREHASH_ObjectPosition;
-extern char * _PREHASH_SitPosition;
-extern char * _PREHASH_StartTime;
-extern char * _PREHASH_BornOn;
-extern char * _PREHASH_CameraCollidePlane;
-extern char * _PREHASH_EconomyDataRequest;
-extern char * _PREHASH_TeleportLureRequest;
-extern char * _PREHASH_FolderID;
-extern char * _PREHASH_RegionHandleRequest;
-extern char * _PREHASH_ScriptDataRequest;
-extern char * _PREHASH_GroupRoleDataRequest;
-extern char * _PREHASH_GroupTitlesRequest;
-extern char * _PREHASH_AgentWearablesRequest;
-extern char * _PREHASH_MapBlockRequest;
-extern char * _PREHASH_LureID;
-extern char * _PREHASH_CopyCenters;
-extern char * _PREHASH_ParamList;
-extern char * _PREHASH_InventorySerial;
-extern char * _PREHASH_EdgeDataPacket;
-extern char * _PREHASH_AvatarPickerReply;
-extern char * _PREHASH_ParcelDwellReply;
-extern char * _PREHASH_IsForSale;
-extern char * _PREHASH_MuteID;
-extern char * _PREHASH_MeanCollisionAlert;
-extern char * _PREHASH_CanAcceptTasks;
-extern char * _PREHASH_ItemData;
-extern char * _PREHASH_AnimationList;
-extern char * _PREHASH_Reputation;
-extern char * _PREHASH_IntValue;
-extern char * _PREHASH_TargetType;
-extern char * _PREHASH_Amount;
-extern char * _PREHASH_HasAttachment;
-extern char * _PREHASH_UpdateAttachment;
-extern char * _PREHASH_RemoveAttachment;
-extern char * _PREHASH_HeightWidthBlock;
-extern char * _PREHASH_RequestObjectPropertiesFamily;
-extern char * _PREHASH_ObjectPropertiesFamily;
-extern char * _PREHASH_UserData;
-extern char * _PREHASH_IsReadable;
-extern char * _PREHASH_PathCurve;
-extern char * _PREHASH_Status;
-extern char * _PREHASH_FromGroup;
-extern char * _PREHASH_AlreadyVoted;
-extern char * _PREHASH_PlacesReply;
-extern char * _PREHASH_DirPlacesReply;
-extern char * _PREHASH_ParcelBuy;
-extern char * _PREHASH_DirFindQueryBackend;
-extern char * _PREHASH_DirPlacesQueryBackend;
-extern char * _PREHASH_DirClassifiedQueryBackend;
-extern char * _PREHASH_DirLandQueryBackend;
-extern char * _PREHASH_DirPopularQueryBackend;
-extern char * _PREHASH_HistoryData;
-extern char * _PREHASH_SnapshotID;
-extern char * _PREHASH_Aspect;
-extern char * _PREHASH_ParamSize;
-extern char * _PREHASH_VoteCast;
-extern char * _PREHASH_CastsShadows;
-extern char * _PREHASH_EveryoneMask;
-extern char * _PREHASH_ObjectSpinUpdate;
-extern char * _PREHASH_MaturePublish;
-extern char * _PREHASH_UseExistingAsset;
-extern char * _PREHASH_Powers;
-extern char * _PREHASH_ParcelLocalID;
-extern char * _PREHASH_TeleportCancel;
-extern char * _PREHASH_UnixTime;
-extern char * _PREHASH_QueryFlags;
-extern char * _PREHASH_AlwaysRun;
-extern char * _PREHASH_Bottom;
-extern char * _PREHASH_ButtonData;
-extern char * _PREHASH_SoundData;
-extern char * _PREHASH_ViewerStats;
-extern char * _PREHASH_RegionHandshake;
-extern char * _PREHASH_ObjectDescription;
-extern char * _PREHASH_Description;
-extern char * _PREHASH_ParamType;
-extern char * _PREHASH_UUIDNameReply;
-extern char * _PREHASH_UUIDGroupNameReply;
-extern char * _PREHASH_SaveAssetIntoInventory;
-extern char * _PREHASH_UserInfo;
-extern char * _PREHASH_AnimSequenceID;
-extern char * _PREHASH_NVPairs;
-extern char * _PREHASH_GroupNoticesListRequest;
-extern char * _PREHASH_ParcelAccessListRequest;
-extern char * _PREHASH_MuteListRequest;
-extern char * _PREHASH_RpcChannelRequest;
-extern char * _PREHASH_LandStatRequest;
-extern char * _PREHASH_PlacesQuery;
-extern char * _PREHASH_DirPlacesQuery;
-extern char * _PREHASH_SortOrder;
-extern char * _PREHASH_Hunter;
-extern char * _PREHASH_SunAngVelocity;
-extern char * _PREHASH_BinaryBucket;
-extern char * _PREHASH_ImagePacket;
-extern char * _PREHASH_StartGroupProposal;
-extern char * _PREHASH_EnergyLevel;
-extern char * _PREHASH_PriceForListing;
-extern char * _PREHASH_Scale;
-extern char * _PREHASH_EstateCovenantReply;
-extern char * _PREHASH_ParentEstateID;
-extern char * _PREHASH_Extra2;
-extern char * _PREHASH_Throttle;
-extern char * _PREHASH_SimIP;
-extern char * _PREHASH_GodID;
-extern char * _PREHASH_TeleportMinPrice;
-extern char * _PREHASH_VoteItem;
-extern char * _PREHASH_ObjectRotation;
-extern char * _PREHASH_SitRotation;
-extern char * _PREHASH_SnapSelection;
-extern char * _PREHASH_SoundTrigger;
-extern char * _PREHASH_TerrainRaiseLimit;
-extern char * _PREHASH_Quorum;
-extern char * _PREHASH_AgentBlock;
-extern char * _PREHASH_CommandBlock;
-extern char * _PREHASH_PricePublicObjectDecay;
-extern char * _PREHASH_SpawnPointPos;
-extern char * _PREHASH_VolumeDetail;
-extern char * _PREHASH_FromAgentName;
-extern char * _PREHASH_Range;
-extern char * _PREHASH_DirectoryVisibility;
-extern char * _PREHASH_PublicIP;
-extern char * _PREHASH_TeleportFailed;
-extern char * _PREHASH_PreloadSound;
-extern char * _PREHASH_ScreenshotID;
-extern char * _PREHASH_CovenantTimestamp;
-extern char * _PREHASH_OldestUnacked;
-extern char * _PREHASH_SimulatorIP;
-extern char * _PREHASH_Value;
-extern char * _PREHASH_JointAxisOrAnchor;
-extern char * _PREHASH_Test0;
-extern char * _PREHASH_Test1;
-extern char * _PREHASH_Test2;
-extern char * _PREHASH_SunPhase;
-extern char * _PREHASH_ParcelDivide;
-extern char * _PREHASH_PriceObjectClaim;
-extern char * _PREHASH_Field;
-extern char * _PREHASH_Ratio;
-extern char * _PREHASH_JoinGroupReply;
-extern char * _PREHASH_LiveHelpGroupReply;
-extern char * _PREHASH_Score;
-extern char * _PREHASH_Image;
-extern char * _PREHASH_ObjectClickAction;
-extern char * _PREHASH_Parameter;
-extern char * _PREHASH_Flags;
-extern char * _PREHASH_Plane;
-extern char * _PREHASH_Width;
-extern char * _PREHASH_Right;
-extern char * _PREHASH_DirFindQuery;
-extern char * _PREHASH_Textures;
-extern char * _PREHASH_EventData;
-extern char * _PREHASH_Final;
-extern char * _PREHASH_System;
-extern char * _PREHASH_TelehubPos;
-extern char * _PREHASH_ReportAutosaveCrash;
-extern char * _PREHASH_CreateTrustedCircuit;
-extern char * _PREHASH_DenyTrustedCircuit;
-extern char * _PREHASH_RequestTrustedCircuit;
-extern char * _PREHASH_Codec;
-extern char * _PREHASH_Modal;
-extern char * _PREHASH_ChildAgentUnknown;
-extern char * _PREHASH_LandingType;
-extern char * _PREHASH_ScriptRunningReply;
-extern char * _PREHASH_Reply;
-extern char * _PREHASH_GroupAccountDetailsReply;
-extern char * _PREHASH_TelehubRot;
-extern char * _PREHASH_AcceptFriendship;
-extern char * _PREHASH_ItemType;
-extern char * _PREHASH_DwellInfo;
-extern char * _PREHASH_AgentResume;
-extern char * _PREHASH_MailFilter;
-extern char * _PREHASH_Disconnect;
-extern char * _PREHASH_SimPosition;
-extern char * _PREHASH_SimWideTotalPrims;
-extern char * _PREHASH_Index;
-extern char * _PREHASH_SimFilename;
-extern char * _PREHASH_LastOwnerID;
-extern char * _PREHASH_GroupNoticeRequest;
-extern char * _PREHASH_EmailMessageRequest;
-extern char * _PREHASH_MapItemRequest;
-extern char * _PREHASH_AgentCount;
-extern char * _PREHASH_MessageBlock;
-extern char * _PREHASH_FuseBlock;
-extern char * _PREHASH_AgentGroupData;
-extern char * _PREHASH_ClassifiedInfoUpdate;
-extern char * _PREHASH_RegionPos;
-extern char * _PREHASH_ParcelMediaUpdate;
-extern char * _PREHASH_NoticeID;
-extern char * _PREHASH_GridX;
-extern char * _PREHASH_GridY;
-extern char * _PREHASH_Title;
-extern char * _PREHASH_AuctionID;
-extern char * _PREHASH_VoteType;
-extern char * _PREHASH_CategoryID;
-extern char * _PREHASH_Token;
-extern char * _PREHASH_AggregatePerms;
-extern char * _PREHASH_ObjectSelect;
-extern char * _PREHASH_ForceObjectSelect;
-extern char * _PREHASH_Price;
-extern char * _PREHASH_SunDirection;
-extern char * _PREHASH_FromName;
-extern char * _PREHASH_ChangeInventoryItemFlags;
-extern char * _PREHASH_Force;
-extern char * _PREHASH_TransactionBlock;
-extern char * _PREHASH_PowersMask;
-extern char * _PREHASH_Stamp;
-extern char * _PREHASH_TotalCredits;
-extern char * _PREHASH_State;
-extern char * _PREHASH_TextureIndex;
-extern char * _PREHASH_InviteeID;
-extern char * _PREHASH_ParcelReclaim;
-extern char * _PREHASH_Money;
-extern char * _PREHASH_PathTwist;
-extern char * _PREHASH_AuthBuyerID;
-extern char * _PREHASH_Color;
-extern char * _PREHASH_SourceType;
-extern char * _PREHASH_World;
-extern char * _PREHASH_QueryData;
-extern char * _PREHASH_Users;
-extern char * _PREHASH_SysOS;
-extern char * _PREHASH_Notes;
-extern char * _PREHASH_AvatarID;
-extern char * _PREHASH_FounderID;
-extern char * _PREHASH_EndPointID;
-extern char * _PREHASH_LocationLookAt;
-extern char * _PREHASH_Sound;
-extern char * _PREHASH_Cover;
-extern char * _PREHASH_TotalObjectCount;
-extern char * _PREHASH_TextureEntry;
-extern char * _PREHASH_SquareMetersCommitted;
-extern char * _PREHASH_ChannelID;
-extern char * _PREHASH_Dwell;
-extern char * _PREHASH_North;
-extern char * _PREHASH_AgentUpdate;
-extern char * _PREHASH_PickGodDelete;
-extern char * _PREHASH_HostName;
-extern char * _PREHASH_PriceParcelClaim;
-extern char * _PREHASH_ParcelClaim;
-extern char * _PREHASH_AgentPowers;
-extern char * _PREHASH_ProfileHollow;
-extern char * _PREHASH_GroupRoleChanges;
-extern char * _PREHASH_Count;
-extern char * _PREHASH_South;
-extern char * _PREHASH_ObjectUpdateCompressed;
-extern char * _PREHASH_MuteFlags;
-extern char * _PREHASH_Group;
-extern char * _PREHASH_AgentPause;
-extern char * _PREHASH_LanguagesText;
-extern char * _PREHASH_Error;
-extern char * _PREHASH_InternalScriptMail;
-extern char * _PREHASH_FindAgent;
-extern char * _PREHASH_AgentData;
-extern char * _PREHASH_FolderData;
-extern char * _PREHASH_AssetBlock;
-extern char * _PREHASH_AcceptNotices;
-extern char * _PREHASH_SetGroupAcceptNotices;
-extern char * _PREHASH_CloseCircuit;
-extern char * _PREHASH_TeleportFinish;
-extern char * _PREHASH_PathRevolutions;
-extern char * _PREHASH_ClassifiedInfoReply;
-extern char * _PREHASH_ParcelInfoReply;
-extern char * _PREHASH_AutosaveData;
-extern char * _PREHASH_SetStartLocation;
-extern char * _PREHASH_PassHours;
-extern char * _PREHASH_AttachmentPt;
-extern char * _PREHASH_ParcelFlags;
-extern char * _PREHASH_NumVotes;
-extern char * _PREHASH_AvatarPickerRequest;
-extern char * _PREHASH_TeleportLocationRequest;
-extern char * _PREHASH_DataHomeLocationRequest;
-extern char * _PREHASH_EventNotificationAddRequest;
-extern char * _PREHASH_ParcelDwellRequest;
-extern char * _PREHASH_EventLocationRequest;
-extern char * _PREHASH_SetStartLocationRequest;
-extern char * _PREHASH_QueryStart;
-extern char * _PREHASH_EjectData;
-extern char * _PREHASH_AvatarTextureUpdate;
-extern char * _PREHASH_RPCServerPort;
-extern char * _PREHASH_Bytes;
-extern char * _PREHASH_Extra;
-extern char * _PREHASH_ForceScriptControlRelease;
-extern char * _PREHASH_ParcelRelease;
-extern char * _PREHASH_VFileType;
-extern char * _PREHASH_EjectGroupMemberReply;
-extern char * _PREHASH_ImageData;
-extern char * _PREHASH_SimulatorViewerTimeMessage;
-extern char * _PREHASH_Rotation;
-extern char * _PREHASH_Selection;
-extern char * _PREHASH_TransactionData;
-extern char * _PREHASH_OperationData;
-extern char * _PREHASH_ExpirationDate;
-extern char * _PREHASH_ParcelDeedToGroup;
-extern char * _PREHASH_AvatarPicksReply;
-extern char * _PREHASH_GroupTitlesReply;
-extern char * _PREHASH_AgentInfo;
-extern char * _PREHASH_MoneyTransferBackend;
-extern char * _PREHASH_NextOwnerMask;
-extern char * _PREHASH_MuteData;
-extern char * _PREHASH_PassPrice;
-extern char * _PREHASH_SourceID;
-extern char * _PREHASH_ChangeUserRights;
-extern char * _PREHASH_TeleportFlags;
-extern char * _PREHASH_SlaveParcelData;
-extern char * _PREHASH_AssetData;
-extern char * _PREHASH_MultipleObjectUpdate;
-extern char * _PREHASH_ObjectUpdate;
-extern char * _PREHASH_ImprovedTerseObjectUpdate;
-extern char * _PREHASH_ConfirmXferPacket;
-extern char * _PREHASH_StartPingCheck;
-extern char * _PREHASH_SimWideDeletes;
-extern char * _PREHASH_LandStatReply;
-extern char * _PREHASH_IsPhantom;
-extern char * _PREHASH_AgentList;
-extern char * _PREHASH_SimApproved;
-extern char * _PREHASH_RezObject;
-extern char * _PREHASH_TaskLocalID;
-extern char * _PREHASH_ClaimDate;
-extern char * _PREHASH_MergeParcel;
-extern char * _PREHASH_Priority;
-extern char * _PREHASH_QueryText;
-extern char * _PREHASH_GroupNoticeAdd;
-extern char * _PREHASH_ReturnType;
-extern char * _PREHASH_FetchFolders;
-extern char * _PREHASH_SimulatorPublicHostBlock;
-extern char * _PREHASH_HeaderData;
-extern char * _PREHASH_RequestMultipleObjects;
-extern char * _PREHASH_RetrieveInstantMessages;
-extern char * _PREHASH_OpenCircuit;
-extern char * _PREHASH_CrossedRegion;
-extern char * _PREHASH_DirGroupsReply;
-extern char * _PREHASH_AvatarGroupsReply;
-extern char * _PREHASH_EmailMessageReply;
-extern char * _PREHASH_GroupVoteHistoryItemReply;
-extern char * _PREHASH_ViewerPosition;
-extern char * _PREHASH_Position;
-extern char * _PREHASH_ParentEstate;
-extern char * _PREHASH_EstateName;
-extern char * _PREHASH_MuteName;
-extern char * _PREHASH_ParcelRename;
-extern char * _PREHASH_ViewerFilename;
-extern char * _PREHASH_UserReportInternal;
-extern char * _PREHASH_AvatarPropertiesRequest;
-extern char * _PREHASH_ParcelPropertiesRequest;
-extern char * _PREHASH_GroupProfileRequest;
-extern char * _PREHASH_AgentDataUpdateRequest;
-extern char * _PREHASH_PriceObjectScaleFactor;
-extern char * _PREHASH_OpenEnrollment;
-extern char * _PREHASH_GroupData;
-extern char * _PREHASH_RequestGodlikePowers;
-extern char * _PREHASH_GrantGodlikePowers;
-extern char * _PREHASH_TransactionID;
-extern char * _PREHASH_DestinationID;
-extern char * _PREHASH_Controls;
-extern char * _PREHASH_FirstDetachAll;
-extern char * _PREHASH_EstateID;
-extern char * _PREHASH_ImprovedInstantMessage;
-extern char * _PREHASH_CheckParcelSales;
-extern char * _PREHASH_ParcelSales;
-extern char * _PREHASH_CurrentInterval;
-extern char * _PREHASH_PriceRentLight;
-extern char * _PREHASH_MediaAutoScale;
-extern char * _PREHASH_NeighborBlock;
-extern char * _PREHASH_LayerData;
-extern char * _PREHASH_NVPairData;
-extern char * _PREHASH_TeleportLocal;
-extern char * _PREHASH_EjecteeID;
-extern char * _PREHASH_VoteInitiator;
-extern char * _PREHASH_TypeData;
-extern char * _PREHASH_OwnerIDs;
-extern char * _PREHASH_SystemKickUser;
-extern char * _PREHASH_TransactionTime;
-extern char * _PREHASH_TimeToLive;
-extern char * _PREHASH_OldAgentID;
-extern char * _PREHASH_MusicURL;
-extern char * _PREHASH_ParcelPrimBonus;
-extern char * _PREHASH_EjectUser;
-extern char * _PREHASH_CoarseLocationUpdate;
-extern char * _PREHASH_ChildAgentPositionUpdate;
-extern char * _PREHASH_StoreLocal;
-extern char * _PREHASH_GroupName;
-extern char * _PREHASH_PriceParcelRent;
-extern char * _PREHASH_SimStatus;
-extern char * _PREHASH_TransactionSuccess;
-extern char * _PREHASH_LureType;
-extern char * _PREHASH_GroupMask;
-extern char * _PREHASH_SitObject;
-extern char * _PREHASH_Override;
-extern char * _PREHASH_LocomotionState;
-extern char * _PREHASH_PriceUpload;
-extern char * _PREHASH_RemoveParcel;
-extern char * _PREHASH_ConfirmAuctionStart;
-extern char * _PREHASH_RpcScriptRequestInbound;
-extern char * _PREHASH_ActiveGroupID;
-extern char * _PREHASH_ParcelReturnObjects;
-extern char * _PREHASH_TotalObjects;
-extern char * _PREHASH_ObjectExtraParams;
-extern char * _PREHASH_Questions;
-extern char * _PREHASH_TransferAbort;
-extern char * _PREHASH_TransferInventory;
-extern char * _PREHASH_RayTargetID;
-extern char * _PREHASH_ClaimPrice;
-extern char * _PREHASH_ObjectProperties;
-extern char * _PREHASH_ParcelProperties;
-extern char * _PREHASH_EstateOwnerID;
-extern char * _PREHASH_LogoutRequest;
-extern char * _PREHASH_AssetUploadRequest;
-extern char * _PREHASH_TransactionType;
-extern char * _PREHASH_AvatarPropertiesUpdate;
-extern char * _PREHASH_ParcelPropertiesUpdate;
-extern char * _PREHASH_FetchItems;
-extern char * _PREHASH_AbortXfer;
-extern char * _PREHASH_DeRezAck;
-extern char * _PREHASH_TakeControls;
-extern char * _PREHASH_DirLandReply;
-extern char * _PREHASH_MuteType;
-extern char * _PREHASH_IMViaEMail;
-extern char * _PREHASH_RentPrice;
-extern char * _PREHASH_GenericMessage;
-extern char * _PREHASH_ChildAgentAlive;
-extern char * _PREHASH_AssetType;
-extern char * _PREHASH_SpawnPointBlock;
-extern char * _PREHASH_AttachmentBlock;
-extern char * _PREHASH_ObjectMaterial;
-extern char * _PREHASH_OwnerName;
-extern char * _PREHASH_AvatarNotesReply;
-extern char * _PREHASH_CacheID;
-extern char * _PREHASH_OwnerMask;
-extern char * _PREHASH_TransferInventoryAck;
-extern char * _PREHASH_RegionDenyAgeUnverified;
-extern char * _PREHASH_AgeVerificationBlock;
-extern char * _PREHASH_UCoord;
-extern char * _PREHASH_VCoord;
-extern char * _PREHASH_FaceIndex;
-extern char * _PREHASH_StatusData;
-extern char * _PREHASH_ProductSKU;
+extern char const* const _PREHASH_X;
+extern char const* const _PREHASH_Y;
+extern char const* const _PREHASH_Z;
+extern char const* const _PREHASH_AddFlags;
+extern char const* const _PREHASH_FailureInfo;
+extern char const* const _PREHASH_MapData;
+extern char const* const _PREHASH_AddItem;
+extern char const* const _PREHASH_MeanCollision;
+extern char const* const _PREHASH_RezScript;
+extern char const* const _PREHASH_AvatarSitResponse;
+extern char const* const _PREHASH_InventoryAssetResponse;
+extern char const* const _PREHASH_KillObject;
+extern char const* const _PREHASH_ProposalID;
+extern char const* const _PREHASH_SerialNum;
+extern char const* const _PREHASH_Duration;
+extern char const* const _PREHASH_ScriptQuestion;
+extern char const* const _PREHASH_AddCircuitCode;
+extern char const* const _PREHASH_UseCircuitCode;
+extern char const* const _PREHASH_ViewerCircuitCode;
+extern char const* const _PREHASH_ScriptAnswerYes;
+extern char const* const _PREHASH_PartnerID;
+extern char const* const _PREHASH_DirLandQuery;
+extern char const* const _PREHASH_TeleportStart;
+extern char const* const _PREHASH_AboutText;
+extern char const* const _PREHASH_VisualParam;
+extern char const* const _PREHASH_GroupPrims;
+extern char const* const _PREHASH_SelectedPrims;
+extern char const* const _PREHASH_ID;
+extern char const* const _PREHASH_UUIDNameRequest;
+extern char const* const _PREHASH_UUIDGroupNameRequest;
+extern char const* const _PREHASH_GroupAccountTransactionsRequest;
+extern char const* const _PREHASH_MapNameRequest;
+extern char const* const _PREHASH_UpdateSimulator;
+extern char const* const _PREHASH_BillableFactor;
+extern char const* const _PREHASH_ObjectBonusFactor;
+extern char const* const _PREHASH_EnableSimulator;
+extern char const* const _PREHASH_DisableSimulator;
+extern char const* const _PREHASH_ConfirmEnableSimulator;
+extern char const* const _PREHASH_LayerType;
+extern char const* const _PREHASH_OwnerRole;
+extern char const* const _PREHASH_ParcelOverlay;
+extern char const* const _PREHASH_GroupOwned;
+extern char const* const _PREHASH_IP;
+extern char const* const _PREHASH_ChatFromViewer;
+extern char const* const _PREHASH_AvgAgentsInView;
+extern char const* const _PREHASH_AgentsInView;
+extern char const* const _PREHASH_GroupTitle;
+extern char const* const _PREHASH_MapLayerReply;
+extern char const* const _PREHASH_CompoundMsgID;
+extern char const* const _PREHASH_CameraConstraint;
+extern char const* const _PREHASH_DownloadTotals;
+extern char const* const _PREHASH_GenCounter;
+extern char const* const _PREHASH_FrozenData;
+extern char const* const _PREHASH_ChildAgentDying;
+extern char const* const _PREHASH_To;
+extern char const* const _PREHASH_CopyInventoryFromNotecard;
+extern char const* const _PREHASH_RezObjectFromNotecard;
+extern char const* const _PREHASH_ParcelDirFeeCurrent;
+extern char const* const _PREHASH_SeedCapability;
+extern char const* const _PREHASH_ObjectDuplicate;
+extern char const* const _PREHASH_InventoryData;
+extern char const* const _PREHASH_ReplyData;
+extern char const* const _PREHASH_ResetList;
+extern char const* const _PREHASH_MediaID;
+extern char const* const _PREHASH_RelatedRights;
+extern char const* const _PREHASH_RedirectGridX;
+extern char const* const _PREHASH_RedirectGridY;
+extern char const* const _PREHASH_TransferID;
+extern char const* const _PREHASH_TexturesChanged;
+extern char const* const _PREHASH_UserLookAt;
+extern char const* const _PREHASH_TestBlock1;
+extern char const* const _PREHASH_SensedData;
+extern char const* const _PREHASH_UpdateBlock;
+extern char const* const _PREHASH_ClassifiedGodDelete;
+extern char const* const _PREHASH_ObjectGrabUpdate;
+extern char const* const _PREHASH_LocationPos;
+extern char const* const _PREHASH_TaxDate;
+extern char const* const _PREHASH_StartDateTime;
+extern char const* const _PREHASH_ObjectUpdateCached;
+extern char const* const _PREHASH_Packets;
+extern char const* const _PREHASH_FailureType;
+extern char const* const _PREHASH_UpdateGroupInfo;
+extern char const* const _PREHASH_ObjectPermissions;
+extern char const* const _PREHASH_RevokePermissions;
+extern char const* const _PREHASH_UpdateFlags;
+extern char const* const _PREHASH_ObjectExportSelected;
+extern char const* const _PREHASH_RezSelected;
+extern char const* const _PREHASH_AutoPilot;
+extern char const* const _PREHASH_UpdateMuteListEntry;
+extern char const* const _PREHASH_RemoveMuteListEntry;
+extern char const* const _PREHASH_SetSimStatusInDatabase;
+extern char const* const _PREHASH_SetSimPresenceInDatabase;
+extern char const* const _PREHASH_CameraProperty;
+extern char const* const _PREHASH_BrushSize;
+extern char const* const _PREHASH_SimulatorSetMap;
+extern char const* const _PREHASH_RegionPresenceRequestByRegionID;
+extern char const* const _PREHASH_ParcelObjectOwnersReply;
+extern char const* const _PREHASH_GroupMembersReply;
+extern char const* const _PREHASH_GroupRoleMembersReply;
+extern char const* const _PREHASH_RequestRegionInfo;
+extern char const* const _PREHASH_AABBMax;
+extern char const* const _PREHASH_RequestPayPrice;
+extern char const* const _PREHASH_SimulatorPresentAtLocation;
+extern char const* const _PREHASH_AgentRequestSit;
+extern char const* const _PREHASH_AABBMin;
+extern char const* const _PREHASH_ClassifiedFlags;
+extern char const* const _PREHASH_ControlFlags;
+extern char const* const _PREHASH_TeleportRequest;
+extern char const* const _PREHASH_ScriptTeleportRequest;
+extern char const* const _PREHASH_EstateCovenantRequest;
+extern char const* const _PREHASH_DateUTC;
+extern char const* const _PREHASH_TaskIDs;
+extern char const* const _PREHASH_RequestResult;
+extern char const* const _PREHASH_CanAcceptAgents;
+extern char const* const _PREHASH_ObjectSaleInfo;
+extern char const* const _PREHASH_KillChildAgents;
+extern char const* const _PREHASH_Balance;
+extern char const* const _PREHASH_DerezContainer;
+extern char const* const _PREHASH_ObjectData;
+extern char const* const _PREHASH_CameraAtAxis;
+extern char const* const _PREHASH_InfoBlock;
+extern char const* const _PREHASH_OwnershipCost;
+extern char const* const _PREHASH_AvatarNotesUpdate;
+extern char const* const _PREHASH_PID;
+extern char const* const _PREHASH_DirPopularReply;
+extern char const* const _PREHASH_TerrainHeightRange00;
+extern char const* const _PREHASH_SimData;
+extern char const* const _PREHASH_TerrainHeightRange01;
+extern char const* const _PREHASH_TerrainHeightRange10;
+extern char const* const _PREHASH_TerrainHeightRange11;
+extern char const* const _PREHASH_UpdateInventoryItem;
+extern char const* const _PREHASH_UpdateCreateInventoryItem;
+extern char const* const _PREHASH_MoveInventoryItem;
+extern char const* const _PREHASH_CopyInventoryItem;
+extern char const* const _PREHASH_LinkInventoryItem;
+extern char const* const _PREHASH_RemoveInventoryItem;
+extern char const* const _PREHASH_CreateInventoryItem;
+extern char const* const _PREHASH_PathTwistBegin;
+extern char const* const _PREHASH_CRC;
+extern char const* const _PREHASH_AttachmentPoint;
+extern char const* const _PREHASH_TelehubBlock;
+extern char const* const _PREHASH_FOVBlock;
+extern char const* const _PREHASH_StartLocationData;
+extern char const* const _PREHASH_PositionData;
+extern char const* const _PREHASH_TimeSinceLast;
+extern char const* const _PREHASH_MapImage;
+extern char const* const _PREHASH_Objects;
+extern char const* const _PREHASH_URL;
+extern char const* const _PREHASH_CreationDate;
+extern char const* const _PREHASH_JointPivot;
+extern char const* const _PREHASH_FPS;
+extern char const* const _PREHASH_HasTelehub;
+extern char const* const _PREHASH_PathEnd;
+extern char const* const _PREHASH_ScriptDataReply;
+extern char const* const _PREHASH_MapBlockReply;
+extern char const* const _PREHASH_PropertiesData;
+extern char const* const _PREHASH_ViewerEffect;
+extern char const* const _PREHASH_FreezeUser;
+extern char const* const _PREHASH_OwnerPrims;
+extern char const* const _PREHASH_ObjectGrab;
+extern char const* const _PREHASH_ToAgentID;
+extern char const* const _PREHASH_SimulatorMapUpdate;
+extern char const* const _PREHASH_TransferPacket;
+extern char const* const _PREHASH_ObjectName;
+extern char const* const _PREHASH_GroupPowers;
+extern char const* const _PREHASH_OriginalName;
+extern char const* const _PREHASH_CompletePingCheck;
+extern char const* const _PREHASH_OnlineStatus;
+extern char const* const _PREHASH_ObjectDrop;
+extern char const* const _PREHASH_UseBigPackets;
+extern char const* const _PREHASH_GroupNoticesListReply;
+extern char const* const _PREHASH_ParcelAccessListReply;
+extern char const* const _PREHASH_RpcChannelReply;
+extern char const* const _PREHASH_RegionPresenceResponse;
+extern char const* const _PREHASH_CharterMember;
+extern char const* const _PREHASH_EdgeData;
+extern char const* const _PREHASH_NameData;
+extern char const* const _PREHASH_RegionPushOverride;
+extern char const* const _PREHASH_SimName;
+extern char const* const _PREHASH_UserReport;
+extern char const* const _PREHASH_DownloadPriority;
+extern char const* const _PREHASH_ToAgentId;
+extern char const* const _PREHASH_DirPopularQuery;
+extern char const* const _PREHASH_Mag;
+extern char const* const _PREHASH_ParcelPropertiesRequestByID;
+extern char const* const _PREHASH_ObjectLink;
+extern char const* const _PREHASH_RpcScriptReplyInbound;
+extern char const* const _PREHASH_RezData;
+extern char const* const _PREHASH_RemoveInventoryObjects;
+extern char const* const _PREHASH_GroupProposalBallot;
+extern char const* const _PREHASH_RPCServerIP;
+extern char const* const _PREHASH_Far;
+extern char const* const _PREHASH_GodSessionID;
+extern char const* const _PREHASH_FLAboutText;
+extern char const* const _PREHASH_RegionHandshakeReply;
+extern char const* const _PREHASH_GroupActiveProposalItemReply;
+extern char const* const _PREHASH_MapItemReply;
+extern char const* const _PREHASH_Seconds;
+extern char const* const _PREHASH_UpdateUserInfo;
+extern char const* const _PREHASH_AggregatePermTexturesOwner;
+extern char const* const _PREHASH_Set;
+extern char const* const _PREHASH_NewName;
+extern char const* const _PREHASH_Key;
+extern char const* const _PREHASH_AgentID;
+extern char const* const _PREHASH_EventNotificationRemoveRequest;
+extern char const* const _PREHASH_NewFolderID;
+extern char const* const _PREHASH_Arc;
+extern char const* const _PREHASH_RegionX;
+extern char const* const _PREHASH_RegionY;
+extern char const* const _PREHASH_RequestData;
+extern char const* const _PREHASH_Msg;
+extern char const* const _PREHASH_Top;
+extern char const* const _PREHASH_MiscStats;
+extern char const* const _PREHASH_ImageID;
+extern char const* const _PREHASH_DataPacket;
+extern char const* const _PREHASH_You;
+extern char const* const _PREHASH_ScriptControlChange;
+extern char const* const _PREHASH_LoadURL;
+extern char const* const _PREHASH_SetCPURatio;
+extern char const* const _PREHASH_NameValueData;
+extern char const* const _PREHASH_AtomicPassObject;
+extern char const* const _PREHASH_ErrorMessage;
+extern char const* const _PREHASH_ViewerFrozenMessage;
+extern char const* const _PREHASH_HealthMessage;
+extern char const* const _PREHASH_LogTextMessage;
+extern char const* const _PREHASH_TimeDilation;
+extern char const* const _PREHASH_RemoveContribution;
+extern char const* const _PREHASH_Contribution;
+extern char const* const _PREHASH_SetGroupContribution;
+extern char const* const _PREHASH_Offline;
+extern char const* const _PREHASH_AgentIsNowWearing;
+extern char const* const _PREHASH_Members;
+extern char const* const _PREHASH_FailedResends;
+extern char const* const _PREHASH_SecPerDay;
+extern char const* const _PREHASH_CameraCenter;
+extern char const* const _PREHASH_CameraLeftAxis;
+extern char const* const _PREHASH_ExBlock;
+extern char const* const _PREHASH_Channel;
+extern char const* const _PREHASH_NetTest;
+extern char const* const _PREHASH_DiscardLevel;
+extern char const* const _PREHASH_LayerID;
+extern char const* const _PREHASH_GrabOffset;
+extern char const* const _PREHASH_SimPort;
+extern char const* const _PREHASH_PricePerMeter;
+extern char const* const _PREHASH_RegionFlags;
+extern char const* const _PREHASH_VoteResult;
+extern char const* const _PREHASH_ParcelDirFeeEstimate;
+extern char const* const _PREHASH_ModifyBlock;
+extern char const* const _PREHASH_InventoryBlock;
+extern char const* const _PREHASH_ReplyBlock;
+extern char const* const _PREHASH_ValidUntil;
+extern char const* const _PREHASH_VelocityInterpolateOn;
+extern char const* const _PREHASH_ClassifiedDelete;
+extern char const* const _PREHASH_RegionDenyAnonymous;
+extern char const* const _PREHASH_FLImageID;
+extern char const* const _PREHASH_AllowPublish;
+extern char const* const _PREHASH_SitName;
+extern char const* const _PREHASH_RegionsVisited;
+extern char const* const _PREHASH_DirClassifiedReply;
+extern char const* const _PREHASH_AvatarClassifiedReply;
+extern char const* const _PREHASH_MediaURL;
+extern char const* const _PREHASH_CompleteAgentMovement;
+extern char const* const _PREHASH_ClassifiedID;
+extern char const* const _PREHASH_LocalID;
+extern char const* const _PREHASH_SpaceIP;
+extern char const* const _PREHASH_RemoveItem;
+extern char const* const _PREHASH_LogFailedMoneyTransaction;
+extern char const* const _PREHASH_ViewerStartAuction;
+extern char const* const _PREHASH_StartAuction;
+extern char const* const _PREHASH_DuplicateFlags;
+extern char const* const _PREHASH_RegionInfo2;
+extern char const* const _PREHASH_TextColor;
+extern char const* const _PREHASH_SlaveID;
+extern char const* const _PREHASH_Charter;
+extern char const* const _PREHASH_AlertData;
+extern char const* const _PREHASH_AlertInfo;
+extern char const* const _PREHASH_TargetBlock;
+extern char const* const _PREHASH_CheckParcelAuctions;
+extern char const* const _PREHASH_ParcelAuctions;
+extern char const* const _PREHASH_OwnerIsGroup;
+extern char const* const _PREHASH_NameValuePair;
+extern char const* const _PREHASH_RemoveNameValuePair;
+extern char const* const _PREHASH_BulkUpdateInventory;
+extern char const* const _PREHASH_UpdateTaskInventory;
+extern char const* const _PREHASH_RemoveTaskInventory;
+extern char const* const _PREHASH_MoveTaskInventory;
+extern char const* const _PREHASH_RequestTaskInventory;
+extern char const* const _PREHASH_ReplyTaskInventory;
+extern char const* const _PREHASH_AggregatePermInventory;
+extern char const* const _PREHASH_GroupAccountTransactionsReply;
+extern char const* const _PREHASH_SimulatorInfo;
+extern char const* const _PREHASH_WearableData;
+extern char const* const _PREHASH_Enabled;
+extern char const* const _PREHASH_Savings;
+extern char const* const _PREHASH_SimulatorLoad;
+extern char const* const _PREHASH_InternalRegionIP;
+extern char const* const _PREHASH_ExternalRegionIP;
+extern char const* const _PREHASH_TotalPairs;
+extern char const* const _PREHASH_CreateGroupRequest;
+extern char const* const _PREHASH_JoinGroupRequest;
+extern char const* const _PREHASH_LeaveGroupRequest;
+extern char const* const _PREHASH_InviteGroupRequest;
+extern char const* const _PREHASH_LiveHelpGroupRequest;
+extern char const* const _PREHASH_PriceParcelClaimFactor;
+extern char const* const _PREHASH_BillableArea;
+extern char const* const _PREHASH_ObjectID;
+extern char const* const _PREHASH_ObjectFlagUpdate;
+extern char const* const _PREHASH_GroupRoleUpdate;
+extern char const* const _PREHASH_RequestInventoryAsset;
+extern char const* const _PREHASH_ChangedGrid;
+extern char const* const _PREHASH_AgentDropGroup;
+extern char const* const _PREHASH_Details;
+extern char const* const _PREHASH_LocationX;
+extern char const* const _PREHASH_SaleType;
+extern char const* const _PREHASH_LocationY;
+extern char const* const _PREHASH_LocationZ;
+extern char const* const _PREHASH_EconomyData;
+extern char const* const _PREHASH_HeadRotation;
+extern char const* const _PREHASH_DeleteOnCompletion;
+extern char const* const _PREHASH_PublicPort;
+extern char const* const _PREHASH_DirClassifiedQuery;
+extern char const* const _PREHASH_CallbackID;
+extern char const* const _PREHASH_RequestParcelTransfer;
+extern char const* const _PREHASH_RoleCount;
+extern char const* const _PREHASH_ObjectCapacity;
+extern char const* const _PREHASH_RequestID;
+extern char const* const _PREHASH_RequestXfer;
+extern char const* const _PREHASH_ObjectTaxCurrent;
+extern char const* const _PREHASH_LightTaxCurrent;
+extern char const* const _PREHASH_LandTaxCurrent;
+extern char const* const _PREHASH_GroupTaxCurrent;
+extern char const* const _PREHASH_FetchInventoryDescendents;
+extern char const* const _PREHASH_InventoryDescendents;
+extern char const* const _PREHASH_Descendents;
+extern char const* const _PREHASH_PurgeInventoryDescendents;
+extern char const* const _PREHASH_ShowDir;
+extern char const* const _PREHASH_IsOwner;
+extern char const* const _PREHASH_Timestamp;
+extern char const* const _PREHASH_GlobalPos;
+extern char const* const _PREHASH_GrabOffsetInitial;
+extern char const* const _PREHASH_IsTrial;
+extern char const* const _PREHASH_ObjectDuplicateOnRay;
+extern char const* const _PREHASH_GroupMembershipCount;
+extern char const* const _PREHASH_MethodData;
+extern char const* const _PREHASH_ActivateGestures;
+extern char const* const _PREHASH_DeactivateGestures;
+extern char const* const _PREHASH_ProposalData;
+extern char const* const _PREHASH_PosGlobal;
+extern char const* const _PREHASH_SearchID;
+extern char const* const _PREHASH_RezMultipleAttachmentsFromInv;
+extern char const* const _PREHASH_SearchName;
+extern char const* const _PREHASH_VersionString;
+extern char const* const _PREHASH_CreateGroupReply;
+extern char const* const _PREHASH_LeaveGroupReply;
+extern char const* const _PREHASH_ActualArea;
+extern char const* const _PREHASH_Message;
+extern char const* const _PREHASH_ClickAction;
+extern char const* const _PREHASH_AssetUploadComplete;
+extern char const* const _PREHASH_RequestType;
+extern char const* const _PREHASH_UUID;
+extern char const* const _PREHASH_BaseMask;
+extern char const* const _PREHASH_NetBlock;
+extern char const* const _PREHASH_GlobalX;
+extern char const* const _PREHASH_GlobalY;
+extern char const* const _PREHASH_CopyRotates;
+extern char const* const _PREHASH_KickUserAck;
+extern char const* const _PREHASH_TopPick;
+extern char const* const _PREHASH_SessionID;
+extern char const* const _PREHASH_GlobalZ;
+extern char const* const _PREHASH_DeclineFriendship;
+extern char const* const _PREHASH_FormFriendship;
+extern char const* const _PREHASH_TerminateFriendship;
+extern char const* const _PREHASH_TaskData;
+extern char const* const _PREHASH_SimWideMaxPrims;
+extern char const* const _PREHASH_TotalPrims;
+extern char const* const _PREHASH_ProfileBegin;
+extern char const* const _PREHASH_Request;
+extern char const* const _PREHASH_GroupAccountDetailsRequest;
+extern char const* const _PREHASH_GroupActiveProposalsRequest;
+extern char const* const _PREHASH_StringValue;
+extern char const* const _PREHASH_Version;
+extern char const* const _PREHASH_OtherCount;
+extern char const* const _PREHASH_MemberCount;
+extern char const* const _PREHASH_ChatData;
+extern char const* const _PREHASH_IsGroupOwned;
+extern char const* const _PREHASH_EnergyEfficiency;
+extern char const* const _PREHASH_PickInfoUpdate;
+extern char const* const _PREHASH_PickDelete;
+extern char const* const _PREHASH_ScriptReset;
+extern char const* const _PREHASH_Requester;
+extern char const* const _PREHASH_ForSale;
+extern char const* const _PREHASH_NearestLandingRegionReply;
+extern char const* const _PREHASH_ParcelID;
+extern char const* const _PREHASH_Godlike;
+extern char const* const _PREHASH_TotalDebits;
+extern char const* const _PREHASH_Direction;
+extern char const* const _PREHASH_HealthData;
+extern char const* const _PREHASH_LeftAxis;
+extern char const* const _PREHASH_LocationBlock;
+extern char const* const _PREHASH_ObjectImage;
+extern char const* const _PREHASH_TerrainStartHeight00;
+extern char const* const _PREHASH_TerrainStartHeight01;
+extern char const* const _PREHASH_TerrainStartHeight10;
+extern char const* const _PREHASH_TerrainStartHeight11;
+extern char const* const _PREHASH_WaterHeight;
+extern char const* const _PREHASH_FetchInventoryReply;
+extern char const* const _PREHASH_GroupAccountSummaryReply;
+extern char const* const _PREHASH_AttachedSound;
+extern char const* const _PREHASH_ParamInUse;
+extern char const* const _PREHASH_GodKickUser;
+extern char const* const _PREHASH_PickName;
+extern char const* const _PREHASH_TaskName;
+extern char const* const _PREHASH_ObjectCount;
+extern char const* const _PREHASH_RegionPresenceRequestByHandle;
+extern char const* const _PREHASH_RezSingleAttachmentFromInv;
+extern char const* const _PREHASH_ChildAgentUpdate;
+extern char const* const _PREHASH_IsOwnerGroup;
+extern char const* const _PREHASH_AgentHeightWidth;
+extern char const* const _PREHASH_VerticalAngle;
+extern char const* const _PREHASH_WearableType;
+extern char const* const _PREHASH_AggregatePermNextOwner;
+extern char const* const _PREHASH_ShowInList;
+extern char const* const _PREHASH_UpdateParcel;
+extern char const* const _PREHASH_SetAlwaysRun;
+extern char const* const _PREHASH_NVPair;
+extern char const* const _PREHASH_SearchType;
+extern char const* const _PREHASH_ObjectSpinStart;
+extern char const* const _PREHASH_UseEstateSun;
+extern char const* const _PREHASH_RegionID;
+extern char const* const _PREHASH_AbuseRegionID;
+extern char const* const _PREHASH_Creator;
+extern char const* const _PREHASH_ProposalText;
+extern char const* const _PREHASH_DirEventsReply;
+extern char const* const _PREHASH_EventInfoReply;
+extern char const* const _PREHASH_UserInfoReply;
+extern char const* const _PREHASH_PathRadiusOffset;
+extern char const* const _PREHASH_TextureData;
+extern char const* const _PREHASH_ChatPass;
+extern char const* const _PREHASH_TargetID;
+extern char const* const _PREHASH_DefaultPayPrice;
+extern char const* const _PREHASH_UserLocation;
+extern char const* const _PREHASH_MaxPrims;
+extern char const* const _PREHASH_LandmarkID;
+extern char const* const _PREHASH_InitiateDownload;
+extern char const* const _PREHASH_Name;
+extern char const* const _PREHASH_OtherCleanTime;
+extern char const* const _PREHASH_ParcelSetOtherCleanTime;
+extern char const* const _PREHASH_TeleportPriceExponent;
+extern char const* const _PREHASH_Gain;
+extern char const* const _PREHASH_PacketAck;
+extern char const* const _PREHASH_PathSkew;
+extern char const* const _PREHASH_SimulatorShutdownRequest;
+extern char const* const _PREHASH_NearestLandingRegionRequest;
+extern char const* const _PREHASH_OtherID;
+extern char const* const _PREHASH_MemberID;
+extern char const* const _PREHASH_MapLayerRequest;
+extern char const* const _PREHASH_ObjectScale;
+extern char const* const _PREHASH_TargetIP;
+extern char const* const _PREHASH_Redo;
+extern char const* const _PREHASH_MoneyBalance;
+extern char const* const _PREHASH_TrackAgent;
+extern char const* const _PREHASH_MaxX;
+extern char const* const _PREHASH_Data;
+extern char const* const _PREHASH_MaxY;
+extern char const* const _PREHASH_TextureAnim;
+extern char const* const _PREHASH_ReturnIDs;
+extern char const* const _PREHASH_Date;
+extern char const* const _PREHASH_AgentWearablesUpdate;
+extern char const* const _PREHASH_AgentDataUpdate;
+extern char const* const _PREHASH_GroupDataUpdate;
+extern char const* const _PREHASH_Hash;
+extern char const* const _PREHASH_AgentGroupDataUpdate;
+extern char const* const _PREHASH_Left;
+extern char const* const _PREHASH_Mask;
+extern char const* const _PREHASH_ForceMouselook;
+extern char const* const _PREHASH_Success;
+extern char const* const _PREHASH_ObjectGroup;
+extern char const* const _PREHASH_SunHour;
+extern char const* const _PREHASH_MinX;
+extern char const* const _PREHASH_ScriptSensorReply;
+extern char const* const _PREHASH_MinY;
+extern char const* const _PREHASH_Command;
+extern char const* const _PREHASH_Desc;
+extern char const* const _PREHASH_AttachmentNeedsSave;
+extern char const* const _PREHASH_HistoryItemData;
+extern char const* const _PREHASH_AgentCachedTexture;
+extern char const* const _PREHASH_Subject;
+extern char const* const _PREHASH_East;
+extern char const* const _PREHASH_QueryReplies;
+extern char const* const _PREHASH_ObjectCategory;
+extern char const* const _PREHASH_Time;
+extern char const* const _PREHASH_CreateLandmarkForEvent;
+extern char const* const _PREHASH_ParentID;
+extern char const* const _PREHASH_Ping;
+extern char const* const _PREHASH_Perp;
+extern char const* const _PREHASH_Code;
+extern char const* const _PREHASH_InvType;
+extern char const* const _PREHASH_AgentFOV;
+extern char const* const _PREHASH_Audible;
+extern char const* const _PREHASH_AuctionData;
+extern char const* const _PREHASH_IDBlock;
+extern char const* const _PREHASH_West;
+extern char const* const _PREHASH_Undo;
+extern char const* const _PREHASH_TotalNumItems;
+extern char const* const _PREHASH_Info;
+extern char const* const _PREHASH_Area;
+extern char const* const _PREHASH_SimCrashed;
+extern char const* const _PREHASH_Text;
+extern char const* const _PREHASH_PriceGroupCreate;
+extern char const* const _PREHASH_ObjectShape;
+extern char const* const _PREHASH_GroupRoleDataReply;
+extern char const* const _PREHASH_MuteCRC;
+extern char const* const _PREHASH_Size;
+extern char const* const _PREHASH_FromAddress;
+extern char const* const _PREHASH_Body;
+extern char const* const _PREHASH_FileData;
+extern char const* const _PREHASH_List;
+extern char const* const _PREHASH_KickUser;
+extern char const* const _PREHASH_OtherPrims;
+extern char const* const _PREHASH_RunTime;
+extern char const* const _PREHASH_GrantUserRights;
+extern char const* const _PREHASH_RpcScriptRequestInboundForward;
+extern char const* const _PREHASH_More;
+extern char const* const _PREHASH_Majority;
+extern char const* const _PREHASH_MetersTraveled;
+extern char const* const _PREHASH_Stat;
+extern char const* const _PREHASH_SoundID;
+extern char const* const _PREHASH_Item;
+extern char const* const _PREHASH_User;
+extern char const* const _PREHASH_Prey;
+extern char const* const _PREHASH_RayStart;
+extern char const* const _PREHASH_UsecSinceStart;
+extern char const* const _PREHASH_ParcelData;
+extern char const* const _PREHASH_CameraUpAxis;
+extern char const* const _PREHASH_ScriptDialog;
+extern char const* const _PREHASH_MasterParcelData;
+extern char const* const _PREHASH_Invalid;
+extern char const* const _PREHASH_ProfileCurve;
+extern char const* const _PREHASH_ParcelAccessListUpdate;
+extern char const* const _PREHASH_MuteListUpdate;
+extern char const* const _PREHASH_SendPacket;
+extern char const* const _PREHASH_SendXferPacket;
+extern char const* const _PREHASH_RegionDenyIdentified;
+extern char const* const _PREHASH_NotecardItemID;
+extern char const* const _PREHASH_LastName;
+extern char const* const _PREHASH_From;
+extern char const* const _PREHASH_RoleChange;
+extern char const* const _PREHASH_Port;
+extern char const* const _PREHASH_MemberTitle;
+extern char const* const _PREHASH_LogParcelChanges;
+extern char const* const _PREHASH_AgentCachedTextureResponse;
+extern char const* const _PREHASH_DeRezObject;
+extern char const* const _PREHASH_IsTemporary;
+extern char const* const _PREHASH_InsigniaID;
+extern char const* const _PREHASH_CheckFlags;
+extern char const* const _PREHASH_EventID;
+extern char const* const _PREHASH_Selected;
+extern char const* const _PREHASH_FromAgentId;
+extern char const* const _PREHASH_Type;
+extern char const* const _PREHASH_ChatType;
+extern char const* const _PREHASH_ReportData;
+extern char const* const _PREHASH_RequestBlock;
+extern char const* const _PREHASH_GrantData;
+extern char const* const _PREHASH_DetachAttachmentIntoInv;
+extern char const* const _PREHASH_ParcelDisableObjects;
+extern char const* const _PREHASH_Sections;
+extern char const* const _PREHASH_GodLevel;
+extern char const* const _PREHASH_PayPriceReply;
+extern char const* const _PREHASH_QueryID;
+extern char const* const _PREHASH_CameraEyeOffset;
+extern char const* const _PREHASH_AgentPosition;
+extern char const* const _PREHASH_GrabPosition;
+extern char const* const _PREHASH_OnlineNotification;
+extern char const* const _PREHASH_OfflineNotification;
+extern char const* const _PREHASH_SendPostcard;
+extern char const* const _PREHASH_RequestFlags;
+extern char const* const _PREHASH_GroupAccountSummaryRequest;
+extern char const* const _PREHASH_GroupVoteHistoryRequest;
+extern char const* const _PREHASH_ParamValue;
+extern char const* const _PREHASH_MaxAgents;
+extern char const* const _PREHASH_CreateNewOutfitAttachments;
+extern char const* const _PREHASH_RegionHandle;
+extern char const* const _PREHASH_TeleportProgress;
+extern char const* const _PREHASH_AgentQuitCopy;
+extern char const* const _PREHASH_AvatarInterestsUpdate;
+extern char const* const _PREHASH_GroupNoticeID;
+extern char const* const _PREHASH_ParcelName;
+extern char const* const _PREHASH_PriceObjectRent;
+extern char const* const _PREHASH_OfferCallingCard;
+extern char const* const _PREHASH_AcceptCallingCard;
+extern char const* const _PREHASH_DeclineCallingCard;
+extern char const* const _PREHASH_AgentAccess;
+extern char const* const _PREHASH_AgentLegacyAccess;
+extern char const* const _PREHASH_AgentMaxAccess;
+extern char const* const _PREHASH_DataHomeLocationReply;
+extern char const* const _PREHASH_EventLocationReply;
+extern char const* const _PREHASH_TerseDateID;
+extern char const* const _PREHASH_ObjectOwner;
+extern char const* const _PREHASH_AssetID;
+extern char const* const _PREHASH_AlertMessage;
+extern char const* const _PREHASH_AgentAlertMessage;
+extern char const* const _PREHASH_EstateOwnerMessage;
+extern char const* const _PREHASH_ParcelMediaCommandMessage;
+extern char const* const _PREHASH_Auction;
+extern char const* const _PREHASH_Category;
+extern char const* const _PREHASH_FilePath;
+extern char const* const _PREHASH_ItemFlags;
+extern char const* const _PREHASH_Invoice;
+extern char const* const _PREHASH_IntervalDays;
+extern char const* const _PREHASH_PathScaleX;
+extern char const* const _PREHASH_FromTaskID;
+extern char const* const _PREHASH_PathScaleY;
+extern char const* const _PREHASH_TimeInfo;
+extern char const* const _PREHASH_PublicCount;
+extern char const* const _PREHASH_ParcelJoin;
+extern char const* const _PREHASH_GroupRolesCount;
+extern char const* const _PREHASH_SimulatorBlock;
+extern char const* const _PREHASH_GroupID;
+extern char const* const _PREHASH_AgentVel;
+extern char const* const _PREHASH_RequestImage;
+extern char const* const _PREHASH_NetStats;
+extern char const* const _PREHASH_AgentPos;
+extern char const* const _PREHASH_AgentSit;
+extern char const* const _PREHASH_Material;
+extern char const* const _PREHASH_ObjectDeGrab;
+extern char const* const _PREHASH_VelocityInterpolateOff;
+extern char const* const _PREHASH_AuthorizedBuyerID;
+extern char const* const _PREHASH_AvatarPropertiesReply;
+extern char const* const _PREHASH_GroupProfileReply;
+extern char const* const _PREHASH_SimOwner;
+extern char const* const _PREHASH_SalePrice;
+extern char const* const _PREHASH_Animation;
+extern char const* const _PREHASH_OwnerID;
+extern char const* const _PREHASH_NearestLandingRegionUpdated;
+extern char const* const _PREHASH_PassToAgent;
+extern char const* const _PREHASH_PreyAgent;
+extern char const* const _PREHASH_SimStats;
+extern char const* const _PREHASH_LogoutReply;
+extern char const* const _PREHASH_FeatureDisabled;
+extern char const* const _PREHASH_PhysicalAvatarEventList;
+extern char const* const _PREHASH_ObjectLocalID;
+extern char const* const _PREHASH_Dropped;
+extern char const* const _PREHASH_WebProfilesDisabled;
+extern char const* const _PREHASH_Destination;
+extern char const* const _PREHASH_MasterID;
+extern char const* const _PREHASH_TransferData;
+extern char const* const _PREHASH_WantToMask;
+extern char const* const _PREHASH_ParcelSelectObjects;
+extern char const* const _PREHASH_ExtraParams;
+extern char const* const _PREHASH_CreatorID;
+extern char const* const _PREHASH_Summary;
+extern char const* const _PREHASH_BuyObjectInventory;
+extern char const* const _PREHASH_FetchInventory;
+extern char const* const _PREHASH_InventoryID;
+extern char const* const _PREHASH_PacketNumber;
+extern char const* const _PREHASH_SetFollowCamProperties;
+extern char const* const _PREHASH_ClearFollowCamProperties;
+extern char const* const _PREHASH_SequenceID;
+extern char const* const _PREHASH_DataServerLogout;
+extern char const* const _PREHASH_NameValue;
+extern char const* const _PREHASH_PathShearX;
+extern char const* const _PREHASH_PathShearY;
+extern char const* const _PREHASH_Velocity;
+extern char const* const _PREHASH_SecPerYear;
+extern char const* const _PREHASH_FirstName;
+extern char const* const _PREHASH_AttachedSoundGainChange;
+extern char const* const _PREHASH_LocationID;
+extern char const* const _PREHASH_Running;
+extern char const* const _PREHASH_AgentThrottle;
+extern char const* const _PREHASH_NeighborList;
+extern char const* const _PREHASH_PathTaperX;
+extern char const* const _PREHASH_PathTaperY;
+extern char const* const _PREHASH_AgentRelated;
+extern char const* const _PREHASH_GranterBlock;
+extern char const* const _PREHASH_UseCachedMuteList;
+extern char const* const _PREHASH_FailStats;
+extern char const* const _PREHASH_Tempfile;
+extern char const* const _PREHASH_BuyerID;
+extern char const* const _PREHASH_DirPeopleReply;
+extern char const* const _PREHASH_TransferInfo;
+extern char const* const _PREHASH_AvatarPickerRequestBackend;
+extern char const* const _PREHASH_AvatarPropertiesRequestBackend;
+extern char const* const _PREHASH_UpdateData;
+extern char const* const _PREHASH_SimFPS;
+extern char const* const _PREHASH_ReporterID;
+extern char const* const _PREHASH_ButtonLabel;
+extern char const* const _PREHASH_GranterID;
+extern char const* const _PREHASH_WantToText;
+extern char const* const _PREHASH_ReportType;
+extern char const* const _PREHASH_SimulatorReady;
+extern char const* const _PREHASH_DataBlock;
+extern char const* const _PREHASH_AnimationSourceList;
+extern char const* const _PREHASH_SubscribeLoad;
+extern char const* const _PREHASH_UnsubscribeLoad;
+extern char const* const _PREHASH_Packet;
+extern char const* const _PREHASH_UndoLand;
+extern char const* const _PREHASH_SimAccess;
+extern char const* const _PREHASH_AbuserID;
+extern char const* const _PREHASH_MembershipFee;
+extern char const* const _PREHASH_InviteGroupResponse;
+extern char const* const _PREHASH_CreateInventoryFolder;
+extern char const* const _PREHASH_UpdateInventoryFolder;
+extern char const* const _PREHASH_MoveInventoryFolder;
+extern char const* const _PREHASH_RemoveInventoryFolder;
+extern char const* const _PREHASH_MoneyData;
+extern char const* const _PREHASH_ObjectDeselect;
+extern char const* const _PREHASH_NewAssetID;
+extern char const* const _PREHASH_ObjectAdd;
+extern char const* const _PREHASH_RayEndIsIntersection;
+extern char const* const _PREHASH_CompleteAuction;
+extern char const* const _PREHASH_CircuitCode;
+extern char const* const _PREHASH_AgentMovementComplete;
+extern char const* const _PREHASH_ViewerIP;
+extern char const* const _PREHASH_Header;
+extern char const* const _PREHASH_GestureFlags;
+extern char const* const _PREHASH_XferID;
+extern char const* const _PREHASH_StatValue;
+extern char const* const _PREHASH_TaskID;
+extern char const* const _PREHASH_PickID;
+extern char const* const _PREHASH_RayEnd;
+extern char const* const _PREHASH_Throttles;
+extern char const* const _PREHASH_RebakeAvatarTextures;
+extern char const* const _PREHASH_UpAxis;
+extern char const* const _PREHASH_AgentTextures;
+extern char const* const _PREHASH_NotecardData;
+extern char const* const _PREHASH_Radius;
+extern char const* const _PREHASH_OffCircuit;
+extern char const* const _PREHASH_Access;
+extern char const* const _PREHASH_TitleRoleID;
+extern char const* const _PREHASH_SquareMetersCredit;
+extern char const* const _PREHASH_Filename;
+extern char const* const _PREHASH_ClassifiedInfoRequest;
+extern char const* const _PREHASH_ParcelInfoRequest;
+extern char const* const _PREHASH_ParcelObjectOwnersRequest;
+extern char const* const _PREHASH_TeleportLandmarkRequest;
+extern char const* const _PREHASH_EventInfoRequest;
+extern char const* const _PREHASH_MoneyBalanceRequest;
+extern char const* const _PREHASH_GroupMembersRequest;
+extern char const* const _PREHASH_GroupRoleMembersRequest;
+extern char const* const _PREHASH_ChatFromSimulator;
+extern char const* const _PREHASH_OldFolderID;
+extern char const* const _PREHASH_UserInfoRequest;
+extern char const* const _PREHASH_TextureID;
+extern char const* const _PREHASH_ProfileURL;
+extern char const* const _PREHASH_Handle;
+extern char const* const _PREHASH_ButtonIndex;
+extern char const* const _PREHASH_GetScriptRunning;
+extern char const* const _PREHASH_SetScriptRunning;
+extern char const* const _PREHASH_Health;
+extern char const* const _PREHASH_CircuitInfo;
+extern char const* const _PREHASH_ObjectBuy;
+extern char const* const _PREHASH_ProfileEnd;
+extern char const* const _PREHASH_Effect;
+extern char const* const _PREHASH_TestMessage;
+extern char const* const _PREHASH_ScriptMailRegistration;
+extern char const* const _PREHASH_AgentSetAppearance;
+extern char const* const _PREHASH_AvatarAppearance;
+extern char const* const _PREHASH_RegionData;
+extern char const* const _PREHASH_RequestingRegionData;
+extern char const* const _PREHASH_LandingRegionData;
+extern char const* const _PREHASH_SitTransform;
+extern char const* const _PREHASH_TerrainBase0;
+extern char const* const _PREHASH_SkillsMask;
+extern char const* const _PREHASH_AtAxis;
+extern char const* const _PREHASH_TerrainBase1;
+extern char const* const _PREHASH_Reason;
+extern char const* const _PREHASH_TerrainBase2;
+extern char const* const _PREHASH_TerrainBase3;
+extern char const* const _PREHASH_Params;
+extern char const* const _PREHASH_PingID;
+extern char const* const _PREHASH_Change;
+extern char const* const _PREHASH_Height;
+extern char const* const _PREHASH_Region;
+extern char const* const _PREHASH_TelehubInfo;
+extern char const* const _PREHASH_StateSave;
+extern char const* const _PREHASH_RoleData;
+extern char const* const _PREHASH_AgentAnimation;
+extern char const* const _PREHASH_AvatarAnimation;
+extern char const* const _PREHASH_LogDwellTime;
+extern char const* const _PREHASH_ParcelGodMarkAsContent;
+extern char const* const _PREHASH_UsePhysics;
+extern char const* const _PREHASH_RegionDenyTransacted;
+extern char const* const _PREHASH_JointType;
+extern char const* const _PREHASH_ObjectTaxEstimate;
+extern char const* const _PREHASH_LightTaxEstimate;
+extern char const* const _PREHASH_LandTaxEstimate;
+extern char const* const _PREHASH_TeleportLandingStatusChanged;
+extern char const* const _PREHASH_GroupTaxEstimate;
+extern char const* const _PREHASH_AvgViewerFPS;
+extern char const* const _PREHASH_Buttons;
+extern char const* const _PREHASH_Sender;
+extern char const* const _PREHASH_Dialog;
+extern char const* const _PREHASH_TargetData;
+extern char const* const _PREHASH_DestID;
+extern char const* const _PREHASH_PricePublicObjectDelete;
+extern char const* const _PREHASH_ObjectDelete;
+extern char const* const _PREHASH_Delete;
+extern char const* const _PREHASH_EventGodDelete;
+extern char const* const _PREHASH_LastTaxDate;
+extern char const* const _PREHASH_MapImageID;
+extern char const* const _PREHASH_EndDateTime;
+extern char const* const _PREHASH_TerrainDetail0;
+extern char const* const _PREHASH_TerrainDetail1;
+extern char const* const _PREHASH_TerrainDetail2;
+extern char const* const _PREHASH_TerrainDetail3;
+extern char const* const _PREHASH_Offset;
+extern char const* const _PREHASH_ObjectDelink;
+extern char const* const _PREHASH_TargetObject;
+extern char const* const _PREHASH_IsEstateManager;
+extern char const* const _PREHASH_CancelAuction;
+extern char const* const _PREHASH_ObjectDetach;
+extern char const* const _PREHASH_Compressed;
+extern char const* const _PREHASH_PathBegin;
+extern char const* const _PREHASH_BypassRaycast;
+extern char const* const _PREHASH_WinnerID;
+extern char const* const _PREHASH_ChannelType;
+extern char const* const _PREHASH_NonExemptMembers;
+extern char const* const _PREHASH_Agents;
+extern char const* const _PREHASH_MemberData;
+extern char const* const _PREHASH_ToGroupID;
+extern char const* const _PREHASH_ImageNotInDatabase;
+extern char const* const _PREHASH_StartDate;
+extern char const* const _PREHASH_AnimID;
+extern char const* const _PREHASH_Serial;
+extern char const* const _PREHASH_AbuseRegionName;
+extern char const* const _PREHASH_ModifyLand;
+extern char const* const _PREHASH_Digest;
+extern char const* const _PREHASH_Victim;
+extern char const* const _PREHASH_Script;
+extern char const* const _PREHASH_PickInfoReply;
+extern char const* const _PREHASH_MoneyBalanceReply;
+extern char const* const _PREHASH_RoutedMoneyBalanceReply;
+extern char const* const _PREHASH_RoleID;
+extern char const* const _PREHASH_RegionInfo;
+extern char const* const _PREHASH_GodUpdateRegionInfo;
+extern char const* const _PREHASH_StartAnim;
+extern char const* const _PREHASH_Action;
+extern char const* const _PREHASH_Location;
+extern char const* const _PREHASH_Rights;
+extern char const* const _PREHASH_SearchDir;
+extern char const* const _PREHASH_TransferRequest;
+extern char const* const _PREHASH_ScriptSensorRequest;
+extern char const* const _PREHASH_MoneyTransferRequest;
+extern char const* const _PREHASH_EjectGroupMemberRequest;
+extern char const* const _PREHASH_SkillsText;
+extern char const* const _PREHASH_Resent;
+extern char const* const _PREHASH_Center;
+extern char const* const _PREHASH_SharedData;
+extern char const* const _PREHASH_PSBlock;
+extern char const* const _PREHASH_UUIDNameBlock;
+extern char const* const _PREHASH_GroupTitleUpdate;
+extern char const* const _PREHASH_Method;
+extern char const* const _PREHASH_TouchName;
+extern char const* const _PREHASH_UpdateType;
+extern char const* const _PREHASH_KickedFromEstateID;
+extern char const* const _PREHASH_CandidateID;
+extern char const* const _PREHASH_ParamData;
+extern char const* const _PREHASH_GodlikeMessage;
+extern char const* const _PREHASH_SystemMessage;
+extern char const* const _PREHASH_BodyRotation;
+extern char const* const _PREHASH_SearchRegions;
+extern char const* const _PREHASH_AnimationData;
+extern char const* const _PREHASH_StatID;
+extern char const* const _PREHASH_ItemID;
+extern char const* const _PREHASH_ScriptDialogReply;
+extern char const* const _PREHASH_RegionIDAndHandleReply;
+extern char const* const _PREHASH_CameraAtOffset;
+extern char const* const _PREHASH_VoteID;
+extern char const* const _PREHASH_ParcelGodForceOwner;
+extern char const* const _PREHASH_Filter;
+extern char const* const _PREHASH_InviteData;
+extern char const* const _PREHASH_PCode;
+extern char const* const _PREHASH_SearchPos;
+extern char const* const _PREHASH_PreyID;
+extern char const* const _PREHASH_TerrainLowerLimit;
+extern char const* const _PREHASH_EventFlags;
+extern char const* const _PREHASH_TallyVotes;
+extern char const* const _PREHASH_Result;
+extern char const* const _PREHASH_LookAt;
+extern char const* const _PREHASH_SearchOrder;
+extern char const* const _PREHASH_PayButton;
+extern char const* const _PREHASH_SelfCount;
+extern char const* const _PREHASH_PacketCount;
+extern char const* const _PREHASH_ParcelBuyPass;
+extern char const* const _PREHASH_OldItemID;
+extern char const* const _PREHASH_RegionPort;
+extern char const* const _PREHASH_PriceEnergyUnit;
+extern char const* const _PREHASH_Bitmap;
+extern char const* const _PREHASH_CacheMissType;
+extern char const* const _PREHASH_VFileID;
+extern char const* const _PREHASH_GroupInsigniaID;
+extern char const* const _PREHASH_Online;
+extern char const* const _PREHASH_KickFlags;
+extern char const* const _PREHASH_CovenantID;
+extern char const* const _PREHASH_SysCPU;
+extern char const* const _PREHASH_EMail;
+extern char const* const _PREHASH_AggregatePermTextures;
+extern char const* const _PREHASH_ChatChannel;
+extern char const* const _PREHASH_ReturnID;
+extern char const* const _PREHASH_ObjectAttach;
+extern char const* const _PREHASH_TargetPort;
+extern char const* const _PREHASH_ObjectSpinStop;
+extern char const* const _PREHASH_FullID;
+extern char const* const _PREHASH_ActivateGroup;
+extern char const* const _PREHASH_SysGPU;
+extern char const* const _PREHASH_AvatarInterestsReply;
+extern char const* const _PREHASH_StartLure;
+extern char const* const _PREHASH_SysRAM;
+extern char const* const _PREHASH_ObjectPosition;
+extern char const* const _PREHASH_SitPosition;
+extern char const* const _PREHASH_StartTime;
+extern char const* const _PREHASH_BornOn;
+extern char const* const _PREHASH_CameraCollidePlane;
+extern char const* const _PREHASH_EconomyDataRequest;
+extern char const* const _PREHASH_TeleportLureRequest;
+extern char const* const _PREHASH_FolderID;
+extern char const* const _PREHASH_RegionHandleRequest;
+extern char const* const _PREHASH_ScriptDataRequest;
+extern char const* const _PREHASH_GroupRoleDataRequest;
+extern char const* const _PREHASH_GroupTitlesRequest;
+extern char const* const _PREHASH_AgentWearablesRequest;
+extern char const* const _PREHASH_MapBlockRequest;
+extern char const* const _PREHASH_LureID;
+extern char const* const _PREHASH_CopyCenters;
+extern char const* const _PREHASH_ParamList;
+extern char const* const _PREHASH_InventorySerial;
+extern char const* const _PREHASH_EdgeDataPacket;
+extern char const* const _PREHASH_AvatarPickerReply;
+extern char const* const _PREHASH_ParcelDwellReply;
+extern char const* const _PREHASH_IsForSale;
+extern char const* const _PREHASH_MuteID;
+extern char const* const _PREHASH_MeanCollisionAlert;
+extern char const* const _PREHASH_CanAcceptTasks;
+extern char const* const _PREHASH_ItemData;
+extern char const* const _PREHASH_AnimationList;
+extern char const* const _PREHASH_Reputation;
+extern char const* const _PREHASH_IntValue;
+extern char const* const _PREHASH_TargetType;
+extern char const* const _PREHASH_Amount;
+extern char const* const _PREHASH_HasAttachment;
+extern char const* const _PREHASH_UpdateAttachment;
+extern char const* const _PREHASH_RemoveAttachment;
+extern char const* const _PREHASH_HeightWidthBlock;
+extern char const* const _PREHASH_RequestObjectPropertiesFamily;
+extern char const* const _PREHASH_ObjectPropertiesFamily;
+extern char const* const _PREHASH_UserData;
+extern char const* const _PREHASH_IsReadable;
+extern char const* const _PREHASH_PathCurve;
+extern char const* const _PREHASH_Status;
+extern char const* const _PREHASH_FromGroup;
+extern char const* const _PREHASH_AlreadyVoted;
+extern char const* const _PREHASH_PlacesReply;
+extern char const* const _PREHASH_DirPlacesReply;
+extern char const* const _PREHASH_ParcelBuy;
+extern char const* const _PREHASH_DirFindQueryBackend;
+extern char const* const _PREHASH_DirPlacesQueryBackend;
+extern char const* const _PREHASH_DirClassifiedQueryBackend;
+extern char const* const _PREHASH_DirLandQueryBackend;
+extern char const* const _PREHASH_DirPopularQueryBackend;
+extern char const* const _PREHASH_HistoryData;
+extern char const* const _PREHASH_SnapshotID;
+extern char const* const _PREHASH_Aspect;
+extern char const* const _PREHASH_ParamSize;
+extern char const* const _PREHASH_VoteCast;
+extern char const* const _PREHASH_CastsShadows;
+extern char const* const _PREHASH_EveryoneMask;
+extern char const* const _PREHASH_ObjectSpinUpdate;
+extern char const* const _PREHASH_MaturePublish;
+extern char const* const _PREHASH_UseExistingAsset;
+extern char const* const _PREHASH_Powers;
+extern char const* const _PREHASH_ParcelLocalID;
+extern char const* const _PREHASH_TeleportCancel;
+extern char const* const _PREHASH_UnixTime;
+extern char const* const _PREHASH_QueryFlags;
+extern char const* const _PREHASH_AlwaysRun;
+extern char const* const _PREHASH_Bottom;
+extern char const* const _PREHASH_ButtonData;
+extern char const* const _PREHASH_SoundData;
+extern char const* const _PREHASH_ViewerStats;
+extern char const* const _PREHASH_RegionHandshake;
+extern char const* const _PREHASH_ObjectDescription;
+extern char const* const _PREHASH_Description;
+extern char const* const _PREHASH_ParamType;
+extern char const* const _PREHASH_UUIDNameReply;
+extern char const* const _PREHASH_UUIDGroupNameReply;
+extern char const* const _PREHASH_SaveAssetIntoInventory;
+extern char const* const _PREHASH_UserInfo;
+extern char const* const _PREHASH_AnimSequenceID;
+extern char const* const _PREHASH_NVPairs;
+extern char const* const _PREHASH_GroupNoticesListRequest;
+extern char const* const _PREHASH_ParcelAccessListRequest;
+extern char const* const _PREHASH_MuteListRequest;
+extern char const* const _PREHASH_RpcChannelRequest;
+extern char const* const _PREHASH_LandStatRequest;
+extern char const* const _PREHASH_PlacesQuery;
+extern char const* const _PREHASH_DirPlacesQuery;
+extern char const* const _PREHASH_SortOrder;
+extern char const* const _PREHASH_Hunter;
+extern char const* const _PREHASH_SunAngVelocity;
+extern char const* const _PREHASH_BinaryBucket;
+extern char const* const _PREHASH_ImagePacket;
+extern char const* const _PREHASH_StartGroupProposal;
+extern char const* const _PREHASH_EnergyLevel;
+extern char const* const _PREHASH_PriceForListing;
+extern char const* const _PREHASH_Scale;
+extern char const* const _PREHASH_EstateCovenantReply;
+extern char const* const _PREHASH_ParentEstateID;
+extern char const* const _PREHASH_Extra2;
+extern char const* const _PREHASH_Throttle;
+extern char const* const _PREHASH_SimIP;
+extern char const* const _PREHASH_GodID;
+extern char const* const _PREHASH_TeleportMinPrice;
+extern char const* const _PREHASH_VoteItem;
+extern char const* const _PREHASH_ObjectRotation;
+extern char const* const _PREHASH_SitRotation;
+extern char const* const _PREHASH_SnapSelection;
+extern char const* const _PREHASH_SoundTrigger;
+extern char const* const _PREHASH_TerrainRaiseLimit;
+extern char const* const _PREHASH_Quorum;
+extern char const* const _PREHASH_AgentBlock;
+extern char const* const _PREHASH_CommandBlock;
+extern char const* const _PREHASH_PricePublicObjectDecay;
+extern char const* const _PREHASH_SpawnPointPos;
+extern char const* const _PREHASH_VolumeDetail;
+extern char const* const _PREHASH_FromAgentName;
+extern char const* const _PREHASH_Range;
+extern char const* const _PREHASH_DirectoryVisibility;
+extern char const* const _PREHASH_PublicIP;
+extern char const* const _PREHASH_TeleportFailed;
+extern char const* const _PREHASH_PreloadSound;
+extern char const* const _PREHASH_ScreenshotID;
+extern char const* const _PREHASH_CovenantTimestamp;
+extern char const* const _PREHASH_OldestUnacked;
+extern char const* const _PREHASH_SimulatorIP;
+extern char const* const _PREHASH_Value;
+extern char const* const _PREHASH_JointAxisOrAnchor;
+extern char const* const _PREHASH_Test0;
+extern char const* const _PREHASH_Test1;
+extern char const* const _PREHASH_Test2;
+extern char const* const _PREHASH_SunPhase;
+extern char const* const _PREHASH_ParcelDivide;
+extern char const* const _PREHASH_PriceObjectClaim;
+extern char const* const _PREHASH_Field;
+extern char const* const _PREHASH_Ratio;
+extern char const* const _PREHASH_JoinGroupReply;
+extern char const* const _PREHASH_LiveHelpGroupReply;
+extern char const* const _PREHASH_Score;
+extern char const* const _PREHASH_Image;
+extern char const* const _PREHASH_ObjectClickAction;
+extern char const* const _PREHASH_Parameter;
+extern char const* const _PREHASH_Flags;
+extern char const* const _PREHASH_Plane;
+extern char const* const _PREHASH_Width;
+extern char const* const _PREHASH_Right;
+extern char const* const _PREHASH_DirFindQuery;
+extern char const* const _PREHASH_Textures;
+extern char const* const _PREHASH_EventData;
+extern char const* const _PREHASH_Final;
+extern char const* const _PREHASH_System;
+extern char const* const _PREHASH_TelehubPos;
+extern char const* const _PREHASH_ReportAutosaveCrash;
+extern char const* const _PREHASH_CreateTrustedCircuit;
+extern char const* const _PREHASH_DenyTrustedCircuit;
+extern char const* const _PREHASH_RequestTrustedCircuit;
+extern char const* const _PREHASH_Codec;
+extern char const* const _PREHASH_Modal;
+extern char const* const _PREHASH_ChildAgentUnknown;
+extern char const* const _PREHASH_LandingType;
+extern char const* const _PREHASH_ScriptRunningReply;
+extern char const* const _PREHASH_Reply;
+extern char const* const _PREHASH_GroupAccountDetailsReply;
+extern char const* const _PREHASH_TelehubRot;
+extern char const* const _PREHASH_AcceptFriendship;
+extern char const* const _PREHASH_ItemType;
+extern char const* const _PREHASH_DwellInfo;
+extern char const* const _PREHASH_AgentResume;
+extern char const* const _PREHASH_MailFilter;
+extern char const* const _PREHASH_Disconnect;
+extern char const* const _PREHASH_SimPosition;
+extern char const* const _PREHASH_SimWideTotalPrims;
+extern char const* const _PREHASH_Index;
+extern char const* const _PREHASH_SimFilename;
+extern char const* const _PREHASH_LastOwnerID;
+extern char const* const _PREHASH_GroupNoticeRequest;
+extern char const* const _PREHASH_EmailMessageRequest;
+extern char const* const _PREHASH_MapItemRequest;
+extern char const* const _PREHASH_AgentCount;
+extern char const* const _PREHASH_MessageBlock;
+extern char const* const _PREHASH_FuseBlock;
+extern char const* const _PREHASH_AgentGroupData;
+extern char const* const _PREHASH_ClassifiedInfoUpdate;
+extern char const* const _PREHASH_RegionPos;
+extern char const* const _PREHASH_ParcelMediaUpdate;
+extern char const* const _PREHASH_NoticeID;
+extern char const* const _PREHASH_GridX;
+extern char const* const _PREHASH_GridY;
+extern char const* const _PREHASH_Title;
+extern char const* const _PREHASH_AuctionID;
+extern char const* const _PREHASH_VoteType;
+extern char const* const _PREHASH_CategoryID;
+extern char const* const _PREHASH_Token;
+extern char const* const _PREHASH_AggregatePerms;
+extern char const* const _PREHASH_ObjectSelect;
+extern char const* const _PREHASH_ForceObjectSelect;
+extern char const* const _PREHASH_Price;
+extern char const* const _PREHASH_SunDirection;
+extern char const* const _PREHASH_FromName;
+extern char const* const _PREHASH_ChangeInventoryItemFlags;
+extern char const* const _PREHASH_Force;
+extern char const* const _PREHASH_TransactionBlock;
+extern char const* const _PREHASH_PowersMask;
+extern char const* const _PREHASH_Stamp;
+extern char const* const _PREHASH_TotalCredits;
+extern char const* const _PREHASH_State;
+extern char const* const _PREHASH_TextureIndex;
+extern char const* const _PREHASH_InviteeID;
+extern char const* const _PREHASH_ParcelReclaim;
+extern char const* const _PREHASH_Money;
+extern char const* const _PREHASH_PathTwist;
+extern char const* const _PREHASH_AuthBuyerID;
+extern char const* const _PREHASH_Color;
+extern char const* const _PREHASH_SourceType;
+extern char const* const _PREHASH_World;
+extern char const* const _PREHASH_QueryData;
+extern char const* const _PREHASH_Users;
+extern char const* const _PREHASH_SysOS;
+extern char const* const _PREHASH_Notes;
+extern char const* const _PREHASH_AvatarID;
+extern char const* const _PREHASH_FounderID;
+extern char const* const _PREHASH_EndPointID;
+extern char const* const _PREHASH_LocationLookAt;
+extern char const* const _PREHASH_Sound;
+extern char const* const _PREHASH_Cover;
+extern char const* const _PREHASH_TotalObjectCount;
+extern char const* const _PREHASH_TextureEntry;
+extern char const* const _PREHASH_SquareMetersCommitted;
+extern char const* const _PREHASH_ChannelID;
+extern char const* const _PREHASH_Dwell;
+extern char const* const _PREHASH_North;
+extern char const* const _PREHASH_AgentUpdate;
+extern char const* const _PREHASH_PickGodDelete;
+extern char const* const _PREHASH_HostName;
+extern char const* const _PREHASH_PriceParcelClaim;
+extern char const* const _PREHASH_ParcelClaim;
+extern char const* const _PREHASH_AgentPowers;
+extern char const* const _PREHASH_ProfileHollow;
+extern char const* const _PREHASH_GroupRoleChanges;
+extern char const* const _PREHASH_Count;
+extern char const* const _PREHASH_South;
+extern char const* const _PREHASH_ObjectUpdateCompressed;
+extern char const* const _PREHASH_MuteFlags;
+extern char const* const _PREHASH_Group;
+extern char const* const _PREHASH_AgentPause;
+extern char const* const _PREHASH_LanguagesText;
+extern char const* const _PREHASH_Error;
+extern char const* const _PREHASH_InternalScriptMail;
+extern char const* const _PREHASH_FindAgent;
+extern char const* const _PREHASH_AgentData;
+extern char const* const _PREHASH_FolderData;
+extern char const* const _PREHASH_AssetBlock;
+extern char const* const _PREHASH_AcceptNotices;
+extern char const* const _PREHASH_SetGroupAcceptNotices;
+extern char const* const _PREHASH_CloseCircuit;
+extern char const* const _PREHASH_TeleportFinish;
+extern char const* const _PREHASH_PathRevolutions;
+extern char const* const _PREHASH_ClassifiedInfoReply;
+extern char const* const _PREHASH_ParcelInfoReply;
+extern char const* const _PREHASH_AutosaveData;
+extern char const* const _PREHASH_SetStartLocation;
+extern char const* const _PREHASH_PassHours;
+extern char const* const _PREHASH_AttachmentPt;
+extern char const* const _PREHASH_ParcelFlags;
+extern char const* const _PREHASH_NumVotes;
+extern char const* const _PREHASH_AvatarPickerRequest;
+extern char const* const _PREHASH_TeleportLocationRequest;
+extern char const* const _PREHASH_DataHomeLocationRequest;
+extern char const* const _PREHASH_EventNotificationAddRequest;
+extern char const* const _PREHASH_ParcelDwellRequest;
+extern char const* const _PREHASH_EventLocationRequest;
+extern char const* const _PREHASH_SetStartLocationRequest;
+extern char const* const _PREHASH_QueryStart;
+extern char const* const _PREHASH_EjectData;
+extern char const* const _PREHASH_AvatarTextureUpdate;
+extern char const* const _PREHASH_RPCServerPort;
+extern char const* const _PREHASH_Bytes;
+extern char const* const _PREHASH_Extra;
+extern char const* const _PREHASH_ForceScriptControlRelease;
+extern char const* const _PREHASH_ParcelRelease;
+extern char const* const _PREHASH_VFileType;
+extern char const* const _PREHASH_EjectGroupMemberReply;
+extern char const* const _PREHASH_ImageData;
+extern char const* const _PREHASH_SimulatorViewerTimeMessage;
+extern char const* const _PREHASH_Rotation;
+extern char const* const _PREHASH_Selection;
+extern char const* const _PREHASH_TransactionData;
+extern char const* const _PREHASH_OperationData;
+extern char const* const _PREHASH_ExpirationDate;
+extern char const* const _PREHASH_ParcelDeedToGroup;
+extern char const* const _PREHASH_AvatarPicksReply;
+extern char const* const _PREHASH_GroupTitlesReply;
+extern char const* const _PREHASH_AgentInfo;
+extern char const* const _PREHASH_MoneyTransferBackend;
+extern char const* const _PREHASH_NextOwnerMask;
+extern char const* const _PREHASH_MuteData;
+extern char const* const _PREHASH_PassPrice;
+extern char const* const _PREHASH_SourceID;
+extern char const* const _PREHASH_ChangeUserRights;
+extern char const* const _PREHASH_TeleportFlags;
+extern char const* const _PREHASH_SlaveParcelData;
+extern char const* const _PREHASH_AssetData;
+extern char const* const _PREHASH_MultipleObjectUpdate;
+extern char const* const _PREHASH_ObjectUpdate;
+extern char const* const _PREHASH_ImprovedTerseObjectUpdate;
+extern char const* const _PREHASH_ConfirmXferPacket;
+extern char const* const _PREHASH_StartPingCheck;
+extern char const* const _PREHASH_SimWideDeletes;
+extern char const* const _PREHASH_LandStatReply;
+extern char const* const _PREHASH_IsPhantom;
+extern char const* const _PREHASH_AgentList;
+extern char const* const _PREHASH_SimApproved;
+extern char const* const _PREHASH_RezObject;
+extern char const* const _PREHASH_TaskLocalID;
+extern char const* const _PREHASH_ClaimDate;
+extern char const* const _PREHASH_MergeParcel;
+extern char const* const _PREHASH_Priority;
+extern char const* const _PREHASH_QueryText;
+extern char const* const _PREHASH_GroupNoticeAdd;
+extern char const* const _PREHASH_ReturnType;
+extern char const* const _PREHASH_FetchFolders;
+extern char const* const _PREHASH_SimulatorPublicHostBlock;
+extern char const* const _PREHASH_HeaderData;
+extern char const* const _PREHASH_RequestMultipleObjects;
+extern char const* const _PREHASH_RetrieveInstantMessages;
+extern char const* const _PREHASH_OpenCircuit;
+extern char const* const _PREHASH_CrossedRegion;
+extern char const* const _PREHASH_DirGroupsReply;
+extern char const* const _PREHASH_AvatarGroupsReply;
+extern char const* const _PREHASH_EmailMessageReply;
+extern char const* const _PREHASH_GroupVoteHistoryItemReply;
+extern char const* const _PREHASH_ViewerPosition;
+extern char const* const _PREHASH_Position;
+extern char const* const _PREHASH_ParentEstate;
+extern char const* const _PREHASH_EstateName;
+extern char const* const _PREHASH_MuteName;
+extern char const* const _PREHASH_ParcelRename;
+extern char const* const _PREHASH_ViewerFilename;
+extern char const* const _PREHASH_UserReportInternal;
+extern char const* const _PREHASH_AvatarPropertiesRequest;
+extern char const* const _PREHASH_ParcelPropertiesRequest;
+extern char const* const _PREHASH_GroupProfileRequest;
+extern char const* const _PREHASH_AgentDataUpdateRequest;
+extern char const* const _PREHASH_PriceObjectScaleFactor;
+extern char const* const _PREHASH_OpenEnrollment;
+extern char const* const _PREHASH_GroupData;
+extern char const* const _PREHASH_RequestGodlikePowers;
+extern char const* const _PREHASH_GrantGodlikePowers;
+extern char const* const _PREHASH_TransactionID;
+extern char const* const _PREHASH_DestinationID;
+extern char const* const _PREHASH_Controls;
+extern char const* const _PREHASH_FirstDetachAll;
+extern char const* const _PREHASH_EstateID;
+extern char const* const _PREHASH_ImprovedInstantMessage;
+extern char const* const _PREHASH_CheckParcelSales;
+extern char const* const _PREHASH_ParcelSales;
+extern char const* const _PREHASH_CurrentInterval;
+extern char const* const _PREHASH_PriceRentLight;
+extern char const* const _PREHASH_MediaAutoScale;
+extern char const* const _PREHASH_NeighborBlock;
+extern char const* const _PREHASH_LayerData;
+extern char const* const _PREHASH_NVPairData;
+extern char const* const _PREHASH_TeleportLocal;
+extern char const* const _PREHASH_EjecteeID;
+extern char const* const _PREHASH_VoteInitiator;
+extern char const* const _PREHASH_TypeData;
+extern char const* const _PREHASH_OwnerIDs;
+extern char const* const _PREHASH_SystemKickUser;
+extern char const* const _PREHASH_TransactionTime;
+extern char const* const _PREHASH_TimeToLive;
+extern char const* const _PREHASH_OldAgentID;
+extern char const* const _PREHASH_MusicURL;
+extern char const* const _PREHASH_ParcelPrimBonus;
+extern char const* const _PREHASH_EjectUser;
+extern char const* const _PREHASH_CoarseLocationUpdate;
+extern char const* const _PREHASH_ChildAgentPositionUpdate;
+extern char const* const _PREHASH_StoreLocal;
+extern char const* const _PREHASH_GroupName;
+extern char const* const _PREHASH_PriceParcelRent;
+extern char const* const _PREHASH_SimStatus;
+extern char const* const _PREHASH_TransactionSuccess;
+extern char const* const _PREHASH_LureType;
+extern char const* const _PREHASH_GroupMask;
+extern char const* const _PREHASH_SitObject;
+extern char const* const _PREHASH_Override;
+extern char const* const _PREHASH_LocomotionState;
+extern char const* const _PREHASH_PriceUpload;
+extern char const* const _PREHASH_RemoveParcel;
+extern char const* const _PREHASH_ConfirmAuctionStart;
+extern char const* const _PREHASH_RpcScriptRequestInbound;
+extern char const* const _PREHASH_ActiveGroupID;
+extern char const* const _PREHASH_ParcelReturnObjects;
+extern char const* const _PREHASH_TotalObjects;
+extern char const* const _PREHASH_ObjectExtraParams;
+extern char const* const _PREHASH_Questions;
+extern char const* const _PREHASH_TransferAbort;
+extern char const* const _PREHASH_TransferInventory;
+extern char const* const _PREHASH_RayTargetID;
+extern char const* const _PREHASH_ClaimPrice;
+extern char const* const _PREHASH_ObjectProperties;
+extern char const* const _PREHASH_ParcelProperties;
+extern char const* const _PREHASH_EstateOwnerID;
+extern char const* const _PREHASH_LogoutRequest;
+extern char const* const _PREHASH_AssetUploadRequest;
+extern char const* const _PREHASH_TransactionType;
+extern char const* const _PREHASH_AvatarPropertiesUpdate;
+extern char const* const _PREHASH_ParcelPropertiesUpdate;
+extern char const* const _PREHASH_FetchItems;
+extern char const* const _PREHASH_AbortXfer;
+extern char const* const _PREHASH_DeRezAck;
+extern char const* const _PREHASH_TakeControls;
+extern char const* const _PREHASH_DirLandReply;
+extern char const* const _PREHASH_MuteType;
+extern char const* const _PREHASH_IMViaEMail;
+extern char const* const _PREHASH_RentPrice;
+extern char const* const _PREHASH_GenericMessage;
+extern char const* const _PREHASH_ChildAgentAlive;
+extern char const* const _PREHASH_AssetType;
+extern char const* const _PREHASH_SpawnPointBlock;
+extern char const* const _PREHASH_AttachmentBlock;
+extern char const* const _PREHASH_ObjectMaterial;
+extern char const* const _PREHASH_OwnerName;
+extern char const* const _PREHASH_AvatarNotesReply;
+extern char const* const _PREHASH_CacheID;
+extern char const* const _PREHASH_OwnerMask;
+extern char const* const _PREHASH_TransferInventoryAck;
+extern char const* const _PREHASH_RegionDenyAgeUnverified;
+extern char const* const _PREHASH_AgeVerificationBlock;
+extern char const* const _PREHASH_UCoord;
+extern char const* const _PREHASH_VCoord;
+extern char const* const _PREHASH_FaceIndex;
+extern char const* const _PREHASH_StatusData;
+extern char const* const _PREHASH_ProductSKU;
 #endif
diff --git a/indra/llmessage/tests/llhost_test.cpp b/indra/llmessage/tests/llhost_test.cpp
index 705473b0c083d8766c358580d5c831e04d25347c..eadf83c428d3ccedd3545dacda311019a0a55097 100644
--- a/indra/llmessage/tests/llhost_test.cpp
+++ b/indra/llmessage/tests/llhost_test.cpp
@@ -151,6 +151,7 @@ namespace tut
 	template<> template<>
 	void host_object::test<9>()
 	{
+		skip("this test is flaky, but we should figure out why...");
 //		skip("setHostByName(\"google.com\"); getHostName() -> (e.g.) \"yx-in-f100.1e100.net\"");
 		std::string hostStr = "lindenlab.com";		
 		LLHost host;
diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp
index 26a20cede85f078874e306e2dda957b4ec8a8a78..210321653668bce67350d3b781d18cfffc42f385 100644
--- a/indra/llplugin/llpluginclassmedia.cpp
+++ b/indra/llplugin/llpluginclassmedia.cpp
@@ -144,8 +144,10 @@ void LLPluginClassMedia::reset()
 	mStatusText.clear();
 	mProgressPercent = 0;	
 	mClickURL.clear();
+	mClickNavType.clear();
 	mClickTarget.clear();
 	mClickUUID.clear();
+	mStatusCode = 0;
 	
 	// media_time class
 	mCurrentTime = 0.0f;
@@ -1024,9 +1026,15 @@ void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message)
 		else if(message_name == "click_nofollow")
 		{
 			mClickURL = message.getValue("uri");
+			mClickNavType = message.getValue("nav_type");
 			mClickTarget.clear();
 			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_NOFOLLOW);
 		}
+		else if(message_name == "navigate_error_page")
+		{
+			mStatusCode = message.getValueS32("status_code");
+			mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_ERROR_PAGE);
+		}
 		else if(message_name == "cookie_set")
 		{
 			if(mOwner)
@@ -1192,16 +1200,6 @@ void LLPluginClassMedia::browse_back()
 	sendMessage(message);
 }
 
-void LLPluginClassMedia::set_status_redirect(int code, const std::string &url)
-{
-	LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "set_status_redirect");
-
-	message.setValueS32("code", code);
-	message.setValue("url", url);
-
-	sendMessage(message);
-}
-
 void LLPluginClassMedia::setBrowserUserAgent(const std::string& user_agent)
 {
 	LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "set_user_agent");
diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h
index 618e928a086efcec7f5bdfc52c336af94198030f..cf8d8b26b9a3bc7e33bacb0e1cdd84f2dfe73694 100644
--- a/indra/llplugin/llpluginclassmedia.h
+++ b/indra/llplugin/llpluginclassmedia.h
@@ -199,7 +199,6 @@ class LLPluginClassMedia : public LLPluginProcessParentOwner
 	void browse_reload(bool ignore_cache = false);
 	void browse_forward();
 	void browse_back();
-	void set_status_redirect(int code, const std::string &url);
 	void setBrowserUserAgent(const std::string& user_agent);
 	void proxyWindowOpened(const std::string &target, const std::string &uuid);
 	void proxyWindowClosed(const std::string &uuid);
@@ -227,11 +226,17 @@ class LLPluginClassMedia : public LLPluginProcessParentOwner
 	// This is valid after MEDIA_EVENT_CLICK_LINK_HREF or MEDIA_EVENT_CLICK_LINK_NOFOLLOW
 	std::string getClickURL() const { return mClickURL; };
 
+	// This is valid after MEDIA_EVENT_CLICK_LINK_NOFOLLOW
+	std::string getClickNavType() const { return mClickNavType; };
+
 	// This is valid after MEDIA_EVENT_CLICK_LINK_HREF
 	std::string getClickTarget() const { return mClickTarget; };
 
 	// This is valid during MEDIA_EVENT_CLICK_LINK_HREF and MEDIA_EVENT_GEOMETRY_CHANGE
 	std::string getClickUUID() const { return mClickUUID; };
+
+	// This is valid after MEDIA_EVENT_NAVIGATE_ERROR_PAGE
+	S32 getStatusCode() const { return mStatusCode; };
 	
 	// These are valid during MEDIA_EVENT_GEOMETRY_CHANGE
 	S32 getGeometryX() const { return mGeometryX; };
@@ -378,12 +383,14 @@ class LLPluginClassMedia : public LLPluginProcessParentOwner
 	int				mProgressPercent;
 	std::string		mLocation;
 	std::string		mClickURL;
+	std::string		mClickNavType;
 	std::string		mClickTarget;
 	std::string		mClickUUID;
 	S32				mGeometryX;
 	S32				mGeometryY;
 	S32				mGeometryWidth;
 	S32				mGeometryHeight;
+	S32				mStatusCode;
 	std::string		mAuthURL;
 	std::string		mAuthRealm;
 	std::string		mHoverText;
diff --git a/indra/llplugin/llpluginclassmediaowner.h b/indra/llplugin/llpluginclassmediaowner.h
index 42e93cc6d7e12da5b69b30cd8d516b33fefa673e..5a4fb1ce906f8872a19604d62d307e0671ec0dee 100644
--- a/indra/llplugin/llpluginclassmediaowner.h
+++ b/indra/llplugin/llpluginclassmediaowner.h
@@ -52,12 +52,13 @@ class LLPluginClassMediaOwner
 		MEDIA_EVENT_STATUS_TEXT_CHANGED,	// browser has updated the status text
 		MEDIA_EVENT_NAME_CHANGED,			// browser has updated the name of the media (typically <title> tag)
 		MEDIA_EVENT_LOCATION_CHANGED,		// browser location (URL) has changed (maybe due to internal navagation/frames/etc)
+		MEDIA_EVENT_NAVIGATE_ERROR_PAGE,	// browser navigated to a page that resulted in an HTTP error
 		MEDIA_EVENT_CLICK_LINK_HREF,		// I'm not entirely sure what the semantics of these two are
 		MEDIA_EVENT_CLICK_LINK_NOFOLLOW,
 		MEDIA_EVENT_CLOSE_REQUEST,			// The plugin requested its window be closed (currently hooked up to javascript window.close in webkit)
 		MEDIA_EVENT_PICK_FILE_REQUEST,		// The plugin wants the user to pick a file
 		MEDIA_EVENT_GEOMETRY_CHANGE,		// The plugin requested its window geometry be changed (per the javascript window interface)
-		
+	
 		MEDIA_EVENT_PLUGIN_FAILED_LAUNCH,	// The plugin failed to launch 
 		MEDIA_EVENT_PLUGIN_FAILED,			// The plugin died unexpectedly
 
diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp
index db4b8b131611c149c0f2358f75aac1dd7586a7cb..315096d4fd77c4b88b8e69b04b4b45ae6bd22fe6 100644
--- a/indra/llplugin/llpluginprocessparent.cpp
+++ b/indra/llplugin/llpluginprocessparent.cpp
@@ -160,6 +160,7 @@ void LLPluginProcessParent::errorState(void)
 void LLPluginProcessParent::init(const std::string &launcher_filename, const std::string &plugin_dir, const std::string &plugin_filename, bool debug)
 {	
 	mProcess.setExecutable(launcher_filename);
+	mProcess.setWorkingDirectory(plugin_dir);
 	mPluginFile = plugin_filename;
 	mPluginDir = plugin_dir;
 	mCPUUsage = 0.0f;
diff --git a/indra/llprimitive/llprimitive.cpp b/indra/llprimitive/llprimitive.cpp
index 258c0c3c1558d609812a89ff7b6c561fcbc53bf4..f9ef897aa33626b5891eeaee3307c937a0541d8b 100644
--- a/indra/llprimitive/llprimitive.cpp
+++ b/indra/llprimitive/llprimitive.cpp
@@ -1216,12 +1216,12 @@ BOOL LLPrimitive::packTEMessage(LLDataPacker &dp) const
 	return FALSE;
 }
 
-S32 LLPrimitive::unpackTEMessage(LLMessageSystem *mesgsys, char *block_name)
+S32 LLPrimitive::unpackTEMessage(LLMessageSystem* mesgsys, char const* block_name)
 {
 	return(unpackTEMessage(mesgsys,block_name,-1));
 }
 
-S32 LLPrimitive::unpackTEMessage(LLMessageSystem *mesgsys, char *block_name, const S32 block_num)
+S32 LLPrimitive::unpackTEMessage(LLMessageSystem* mesgsys, char const* block_name, const S32 block_num)
 {
 	// use a negative block_num to indicate a single-block read (a non-variable block)
 	S32 retval = 0;
diff --git a/indra/llprimitive/llprimitive.h b/indra/llprimitive/llprimitive.h
index f535fb1672d2cadfe32457455af78d435a96c8cf..d981b248fae55d4e7c1d192fa9032bab0436b729 100644
--- a/indra/llprimitive/llprimitive.h
+++ b/indra/llprimitive/llprimitive.h
@@ -358,8 +358,8 @@ class LLPrimitive : public LLXform
 	S32 unpackTEField(U8 *cur_ptr, U8 *buffer_end, U8 *data_ptr, U8 data_size, U8 face_count, EMsgVariableType type);
 	BOOL packTEMessage(LLMessageSystem *mesgsys) const;
 	BOOL packTEMessage(LLDataPacker &dp) const;
-	S32 unpackTEMessage(LLMessageSystem *mesgsys, char *block_name);
-	S32 unpackTEMessage(LLMessageSystem *mesgsys, char *block_name, const S32 block_num); // Variable num of blocks
+	S32 unpackTEMessage(LLMessageSystem* mesgsys, char const* block_name);
+	S32 unpackTEMessage(LLMessageSystem* mesgsys, char const* block_name, const S32 block_num); // Variable num of blocks
 	BOOL unpackTEMessage(LLDataPacker &dp);
 	
 #ifdef CHECK_FOR_FINITE
diff --git a/indra/llprimitive/lltextureentry.cpp b/indra/llprimitive/lltextureentry.cpp
index 861bde5c89285bceae0bb9e730a233ab353ae812..34eff17519e60752304692a9845690ae56a48029 100644
--- a/indra/llprimitive/lltextureentry.cpp
+++ b/indra/llprimitive/lltextureentry.cpp
@@ -423,24 +423,10 @@ S32 LLTextureEntry::setBumpShinyFullbright(U8 bump)
 
 S32 LLTextureEntry::setMediaTexGen(U8 media)
 {
-	if (mMediaFlags != media)
-	{
-		mMediaFlags = media;
-
-		// Special code for media handling
-		if( hasMedia() && mMediaEntry == NULL)
-		{
-			mMediaEntry = new LLMediaEntry;
-		}
-        else if ( ! hasMedia() && mMediaEntry != NULL)
-        {
-            delete mMediaEntry;
-            mMediaEntry = NULL;
-        }
-
-		return TEM_CHANGE_MEDIA;
-	}
-	return TEM_CHANGE_NONE;
+	S32 result = TEM_CHANGE_NONE;
+	result |= setTexGen(media & TEM_TEX_GEN_MASK);
+	result |= setMediaFlags(media & TEM_MEDIA_MASK);
+	return result;
 }
 
 S32 LLTextureEntry::setBumpmap(U8 bump)
diff --git a/indra/llprimitive/llvolumemessage.cpp b/indra/llprimitive/llvolumemessage.cpp
index b6cae5c4dfa4d1f6d7da1c654e59de61ac7416b8..58b23bebd2562a26ccddee9bdaff6b66e339dc9c 100644
--- a/indra/llprimitive/llvolumemessage.cpp
+++ b/indra/llprimitive/llvolumemessage.cpp
@@ -94,7 +94,7 @@ bool LLVolumeMessage::packProfileParams(
 bool LLVolumeMessage::unpackProfileParams(
 	LLProfileParams* params,
 	LLMessageSystem* mesgsys,
-	char* block_name,
+	char const* block_name,
 	S32 block_num)
 {
 	bool ok = true;
@@ -322,7 +322,7 @@ bool LLVolumeMessage::packPathParams(
 bool LLVolumeMessage::unpackPathParams(
 	LLPathParams* params,
 	LLMessageSystem* mesgsys,
-	char* block_name,
+	char const* block_name,
 	S32 block_num)
 {
 	U8 curve;
@@ -522,7 +522,7 @@ bool LLVolumeMessage::packVolumeParams(const LLVolumeParams* params, LLDataPacke
 bool LLVolumeMessage::unpackVolumeParams(
 	LLVolumeParams* params,
 	LLMessageSystem* mesgsys,
-	char* block_name,
+	char const* block_name,
 	S32 block_num)
 {
 	bool ok = true;
diff --git a/indra/llprimitive/llvolumemessage.h b/indra/llprimitive/llvolumemessage.h
index 33562323c3f26d60dc1da3ce25849e4b3fcf267c..f59ee79c60277ca88cf72a2899dbfdddfa0d3f45 100644
--- a/indra/llprimitive/llvolumemessage.h
+++ b/indra/llprimitive/llvolumemessage.h
@@ -49,7 +49,7 @@ class LLVolumeMessage
 	static bool unpackProfileParams(
 		LLProfileParams* params,
 		LLMessageSystem* mesgsys,
-		char* block_name,
+		char const* block_name,
 		S32 block_num = 0);
 	static bool unpackProfileParams(LLProfileParams* params, LLDataPacker& dp);
 
@@ -60,7 +60,7 @@ class LLVolumeMessage
 	static bool unpackPathParams(
 		LLPathParams* params,
 		LLMessageSystem* mesgsys,
-		char* block_name,
+		char const* block_name,
 		S32 block_num = 0);
 	static bool unpackPathParams(LLPathParams* params, LLDataPacker& dp);
 
@@ -83,7 +83,7 @@ class LLVolumeMessage
 	static bool unpackVolumeParams(
 		LLVolumeParams* params,
 		LLMessageSystem* mesgsys,
-		char* block_name,
+		char const* block_name,
 		S32 block_num = 0);
 	static bool unpackVolumeParams(LLVolumeParams* params, LLDataPacker &dp);
 };
diff --git a/indra/llrender/llfontfreetype.cpp b/indra/llrender/llfontfreetype.cpp
index b84e696e2d7031e68e840459cb8c101915874020..91c8a37022aadbe6a8c06e5b10ae41b8bcde3b8d 100644
--- a/indra/llrender/llfontfreetype.cpp
+++ b/indra/llrender/llfontfreetype.cpp
@@ -482,7 +482,7 @@ void LLFontFreetype::renderGlyph(U32 glyph_index) const
 	if (mFTFace == NULL)
 		return;
 
-	int error = FT_Load_Glyph(mFTFace, glyph_index, FT_LOAD_DEFAULT );
+	int error = FT_Load_Glyph(mFTFace, glyph_index, FT_LOAD_FORCE_AUTOHINT );
 	llassert(!error);
 
 	error = FT_Render_Glyph(mFTFace->glyph, gFontRenderMode);
diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp
index 6ea63809f85e65b8318ce18f03652acf0a2eb7fd..c86c89fa9b30eba2f8933b1014bb74abe70d71bb 100644
--- a/indra/llrender/llgl.cpp
+++ b/indra/llrender/llgl.cpp
@@ -57,9 +57,12 @@
 BOOL gDebugSession = FALSE;
 BOOL gDebugGL = FALSE;
 BOOL gClothRipple = FALSE;
-BOOL gNoRender = FALSE;
+BOOL gHeadlessClient = FALSE;
 BOOL gGLActive = FALSE;
 
+static const std::string HEADLESS_VENDOR_STRING("Linden Lab");
+static const std::string HEADLESS_RENDERER_STRING("Headless");
+static const std::string HEADLESS_VERSION_STRING("1.0");
 
 std::ofstream gFailLog;
 
@@ -538,9 +541,19 @@ void LLGLManager::setToDebugGPU()
 
 void LLGLManager::getGLInfo(LLSD& info)
 {
-	info["GLInfo"]["GLVendor"] = std::string((const char *)glGetString(GL_VENDOR));
-	info["GLInfo"]["GLRenderer"] = std::string((const char *)glGetString(GL_RENDERER));
-	info["GLInfo"]["GLVersion"] = std::string((const char *)glGetString(GL_VERSION));
+	if (gHeadlessClient)
+	{
+		info["GLInfo"]["GLVendor"] = HEADLESS_VENDOR_STRING;
+		info["GLInfo"]["GLRenderer"] = HEADLESS_RENDERER_STRING;
+		info["GLInfo"]["GLVersion"] = HEADLESS_VERSION_STRING;
+		return;
+	}
+	else
+	{
+		info["GLInfo"]["GLVendor"] = std::string((const char *)glGetString(GL_VENDOR));
+		info["GLInfo"]["GLRenderer"] = std::string((const char *)glGetString(GL_RENDERER));
+		info["GLInfo"]["GLVersion"] = std::string((const char *)glGetString(GL_VERSION));
+	}
 
 #if !LL_MESA_HEADLESS
 	std::string all_exts = ll_safe_string((const char *)gGLHExts.mSysExts);
@@ -556,14 +569,22 @@ void LLGLManager::getGLInfo(LLSD& info)
 std::string LLGLManager::getGLInfoString()
 {
 	std::string info_str;
-	std::string all_exts, line;
 
-	info_str += std::string("GL_VENDOR      ") + ll_safe_string((const char *)glGetString(GL_VENDOR)) + std::string("\n");
-	info_str += std::string("GL_RENDERER    ") + ll_safe_string((const char *)glGetString(GL_RENDERER)) + std::string("\n");
-	info_str += std::string("GL_VERSION     ") + ll_safe_string((const char *)glGetString(GL_VERSION)) + std::string("\n");
+	if (gHeadlessClient)
+	{
+		info_str += std::string("GL_VENDOR      ") + HEADLESS_VENDOR_STRING + std::string("\n");
+		info_str += std::string("GL_RENDERER    ") + HEADLESS_RENDERER_STRING + std::string("\n");
+		info_str += std::string("GL_VERSION     ") + HEADLESS_VERSION_STRING + std::string("\n");
+	}
+	else
+	{
+		info_str += std::string("GL_VENDOR      ") + ll_safe_string((const char *)glGetString(GL_VENDOR)) + std::string("\n");
+		info_str += std::string("GL_RENDERER    ") + ll_safe_string((const char *)glGetString(GL_RENDERER)) + std::string("\n");
+		info_str += std::string("GL_VERSION     ") + ll_safe_string((const char *)glGetString(GL_VERSION)) + std::string("\n");
+	}
 
 #if !LL_MESA_HEADLESS 
-	all_exts = (const char *)gGLHExts.mSysExts;
+	std::string all_exts= ll_safe_string(((const char *)gGLHExts.mSysExts));
 	LLStringUtil::replaceChar(all_exts, ' ', '\n');
 	info_str += std::string("GL_EXTENSIONS:\n") + all_exts + std::string("\n");
 #endif
@@ -573,15 +594,21 @@ std::string LLGLManager::getGLInfoString()
 
 void LLGLManager::printGLInfoString()
 {
-	std::string info_str;
-	std::string all_exts, line;
-	
-	LL_INFOS("RenderInit") << "GL_VENDOR:     " << ((const char *)glGetString(GL_VENDOR)) << LL_ENDL;
-	LL_INFOS("RenderInit") << "GL_RENDERER:   " << ((const char *)glGetString(GL_RENDERER)) << LL_ENDL;
-	LL_INFOS("RenderInit") << "GL_VERSION:    " << ((const char *)glGetString(GL_VERSION)) << LL_ENDL;
+	if (gHeadlessClient)
+	{
+		LL_INFOS("RenderInit") << "GL_VENDOR:     " << HEADLESS_VENDOR_STRING << LL_ENDL;
+		LL_INFOS("RenderInit") << "GL_RENDERER:   " << HEADLESS_RENDERER_STRING << LL_ENDL;
+		LL_INFOS("RenderInit") << "GL_VERSION:    " << HEADLESS_VERSION_STRING << LL_ENDL;
+	}
+	else
+	{
+		LL_INFOS("RenderInit") << "GL_VENDOR:     " << ((const char *)glGetString(GL_VENDOR)) << LL_ENDL;
+		LL_INFOS("RenderInit") << "GL_RENDERER:   " << ((const char *)glGetString(GL_RENDERER)) << LL_ENDL;
+		LL_INFOS("RenderInit") << "GL_VERSION:    " << ((const char *)glGetString(GL_VERSION)) << LL_ENDL;
+	}
 
 #if !LL_MESA_HEADLESS
-	all_exts = std::string(gGLHExts.mSysExts);
+	std::string all_exts= ll_safe_string(((const char *)gGLHExts.mSysExts));
 	LLStringUtil::replaceChar(all_exts, ' ', '\n');
 	LL_DEBUGS("RenderInit") << "GL_EXTENSIONS:\n" << all_exts << LL_ENDL;
 #endif
@@ -590,7 +617,14 @@ void LLGLManager::printGLInfoString()
 std::string LLGLManager::getRawGLString()
 {
 	std::string gl_string;
-	gl_string = ll_safe_string((char*)glGetString(GL_VENDOR)) + " " + ll_safe_string((char*)glGetString(GL_RENDERER));
+	if (gHeadlessClient)
+	{
+		gl_string = HEADLESS_VENDOR_STRING + " " + HEADLESS_RENDERER_STRING;
+	}
+	else
+	{
+		gl_string = ll_safe_string((char*)glGetString(GL_VENDOR)) + " " + ll_safe_string((char*)glGetString(GL_RENDERER));
+	}
 	return gl_string;
 }
 
@@ -614,47 +648,47 @@ void LLGLManager::initExtensions()
 	mHasMultitexture = TRUE;
 # else
 	mHasMultitexture = FALSE;
-# endif
+# endif // GL_ARB_multitexture
 # ifdef GL_ARB_texture_env_combine
 	mHasARBEnvCombine = TRUE;	
 # else
 	mHasARBEnvCombine = FALSE;
-# endif
+# endif // GL_ARB_texture_env_combine
 # ifdef GL_ARB_texture_compression
 	mHasCompressedTextures = TRUE;
 # else
 	mHasCompressedTextures = FALSE;
-# endif
+# endif // GL_ARB_texture_compression
 # ifdef GL_ARB_vertex_buffer_object
 	mHasVertexBufferObject = TRUE;
 # else
 	mHasVertexBufferObject = FALSE;
-# endif
+# endif // GL_ARB_vertex_buffer_object
 # ifdef GL_EXT_framebuffer_object
 	mHasFramebufferObject = TRUE;
 # else
 	mHasFramebufferObject = FALSE;
-# endif
+# endif // GL_EXT_framebuffer_object
 # ifdef GL_EXT_framebuffer_multisample
 	mHasFramebufferMultisample = TRUE;
 # else
 	mHasFramebufferMultisample = FALSE;
-# endif
+# endif // GL_EXT_framebuffer_multisample
 # ifdef GL_ARB_draw_buffers
 	mHasDrawBuffers = TRUE;
 #else
 	mHasDrawBuffers = FALSE;
-# endif
+# endif // GL_ARB_draw_buffers
 # if defined(GL_NV_depth_clamp) || defined(GL_ARB_depth_clamp)
 	mHasDepthClamp = TRUE;
 #else
 	mHasDepthClamp = FALSE;
-#endif
+#endif // defined(GL_NV_depth_clamp) || defined(GL_ARB_depth_clamp)
 # if GL_EXT_blend_func_separate
 	mHasBlendFuncSeparate = TRUE;
 #else
 	mHasBlendFuncSeparate = FALSE;
-# endif
+# endif // GL_EXT_blend_func_separate
 	mHasMipMapGeneration = FALSE;
 	mHasSeparateSpecularColor = FALSE;
 	mHasAnisotropic = FALSE;
@@ -1145,7 +1179,7 @@ void assert_glerror()
 		}
 	}
 
-	if (!gNoRender && gDebugGL) 
+	if (gDebugGL) 
 	{
 		do_assert_glerror();
 	}
diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h
index 85fab7a0f82cfc1a3b0b80aa31f751c3b3caa886..684fd508834329eec9843d4ca74e8e70bb9931b5 100644
--- a/indra/llrender/llgl.h
+++ b/indra/llrender/llgl.h
@@ -415,7 +415,7 @@ void set_binormals(const S32 index, const U32 stride, const LLVector3 *binormals
 void parse_gl_version( S32* major, S32* minor, S32* release, std::string* vendor_specific );
 
 extern BOOL gClothRipple;
-extern BOOL gNoRender;
+extern BOOL gHeadlessClient;
 extern BOOL gGLActive;
 
 #endif // LL_LLGL_H
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index e8e98211f1c1db2e2380bfa848712946f5be6afc..d4ffd6f88e630cd94a32274606e2e06569f193dc 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -967,12 +967,14 @@ BOOL LLImageGL::setSubImage(const U8* datap, S32 data_width, S32 data_height, S3
 	}
 	if (mTexName == 0)
 	{
-		llwarns << "Setting subimage on image without GL texture" << llendl;
+		// *TODO: Re-enable warning?  Ran into thread locking issues? DK 2011-02-18
+		//llwarns << "Setting subimage on image without GL texture" << llendl;
 		return FALSE;
 	}
 	if (datap == NULL)
 	{
-		llwarns << "Setting subimage on image with NULL datap" << llendl;
+		// *TODO: Re-enable warning?  Ran into thread locking issues? DK 2011-02-18
+		//llwarns << "Setting subimage on image with NULL datap" << llendl;
 		return FALSE;
 	}
 	
@@ -1100,6 +1102,7 @@ void LLImageGL::setManualImage(U32 target, S32 miplevel, S32 intformat, S32 widt
 //the texture is assiciate with some image by calling glTexImage outside LLImageGL
 BOOL LLImageGL::createGLTexture()
 {
+	if (gHeadlessClient) return FALSE;
 	if (gGLManager.mIsDisabled)
 	{
 		llwarns << "Trying to create a texture while GL is disabled!" << llendl;
@@ -1128,6 +1131,7 @@ BOOL LLImageGL::createGLTexture()
 
 BOOL LLImageGL::createGLTexture(S32 discard_level, const LLImageRaw* imageraw, S32 usename/*=0*/, BOOL to_create, S32 category)
 {
+	if (gHeadlessClient) return FALSE;
 	if (gGLManager.mIsDisabled)
 	{
 		llwarns << "Trying to create a texture while GL is disabled!" << llendl;
diff --git a/indra/llui/lldockcontrol.cpp b/indra/llui/lldockcontrol.cpp
index 5ed2c27160e3d44ad1333a91d6b2b0d4a4e9798a..b1c27126d9b6d09410b7b4c3e160e31475c08a98 100644
--- a/indra/llui/lldockcontrol.cpp
+++ b/indra/llui/lldockcontrol.cpp
@@ -299,7 +299,7 @@ void LLDockControl::moveDockable()
 		break;
 	}
 
-	S32 max_available_height = rootRect.getHeight() - mDockTongueY - mDockTongue->getHeight();
+	S32 max_available_height = rootRect.getHeight() - (rootRect.mBottom -  mDockTongueY) - mDockTongue->getHeight();
 
 	// A floater should be shrunk so it doesn't cover a part of its docking tongue and
 	// there is a space between a dockable floater and a control to which it is docked.
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
index c4257827152fab8bf99420a3d2cb02e871f2f00b..d19e33ea5537df5dd759c54126b4015999222039 100644
--- a/indra/llui/llfloater.cpp
+++ b/indra/llui/llfloater.cpp
@@ -2590,9 +2590,13 @@ void LLFloaterView::draw()
 
 LLRect LLFloaterView::getSnapRect() const
 {
-	LLRect snap_rect = getRect();
-	snap_rect.mBottom += mSnapOffsetBottom;
-	snap_rect.mRight  -= mSnapOffsetRight;
+	LLRect snap_rect = getLocalRect();
+
+	LLView* snap_view = mSnapView.get();
+	if (snap_view)
+	{
+		snap_view->localRectToOtherView(snap_view->getLocalRect(), &snap_rect, this);
+	}
 
 	return snap_rect;
 }
@@ -2865,7 +2869,7 @@ void LLFloater::initFromParams(const LLFloater::Params& p)
 	// close callback 
 	if (p.close_callback.isProvided())
 	{
-		mCloseSignal.connect(initCommitCallback(p.close_callback));
+		setCloseCallback(initCommitCallback(p.close_callback));
 	}
 }
 
@@ -2875,6 +2879,11 @@ boost::signals2::connection LLFloater::setMinimizeCallback( const commit_signal_
 	return mMinimizeSignal->connect(cb); 
 }
 
+boost::signals2::connection LLFloater::setCloseCallback( const commit_signal_t::slot_type& cb )
+{
+	return mCloseSignal.connect(cb);
+}
+
 LLFastTimer::DeclareTimer POST_BUILD("Floater Post Build");
 
 bool LLFloater::initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::string& filename, LLXMLNodePtr output_node)
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
index bb96272d0269215560d858695ad695607d136c20..5b7b020881191258cbf728ef577f4e9128269571 100644
--- a/indra/llui/llfloater.h
+++ b/indra/llui/llfloater.h
@@ -144,6 +144,7 @@ friend class LLMultiFloater;
 	bool buildFromFile(const std::string &filename, LLXMLNodePtr output_node = NULL);
 
 	boost::signals2::connection setMinimizeCallback( const commit_signal_t::slot_type& cb );
+	boost::signals2::connection setCloseCallback( const commit_signal_t::slot_type& cb );
 
 	void initFromParams(const LLFloater::Params& p);
 	bool initFloaterXML(LLXMLNodePtr node, LLView *parent, const std::string& filename, LLXMLNodePtr output_node = NULL);
@@ -495,10 +496,10 @@ class LLFloaterView : public LLUICtrl
 	// value is not defined.
 	S32 getZOrder(LLFloater* child);
 
-	void setSnapOffsetBottom(S32 offset) { mSnapOffsetBottom = offset; }
-	void setSnapOffsetRight(S32 offset) { mSnapOffsetRight = offset; }
+	void setFloaterSnapView(LLHandle<LLView> snap_view) {mSnapView = snap_view; }
 
 private:
+	LLHandle<LLView>	mSnapView;
 	BOOL			mFocusCycleMode;
 	S32				mSnapOffsetBottom;
 	S32				mSnapOffsetRight;
diff --git a/indra/llui/llfloaterreglistener.cpp b/indra/llui/llfloaterreglistener.cpp
index 821d4543aef2dfa7fe33e79aa15d3a69297e45c2..7525b8cab3a7506fd7a39d8a91ac087a1959bd53 100644
--- a/indra/llui/llfloaterreglistener.cpp
+++ b/indra/llui/llfloaterreglistener.cpp
@@ -60,6 +60,11 @@ LLFloaterRegListener::LLFloaterRegListener():
         "Ask to toggle the state of the floater specified in [\"name\"]",
         &LLFloaterRegListener::toggleInstance,
         requiredName);
+    add("instanceVisible",
+        "Return on [\"reply\"] an event whose [\"visible\"] indicates the visibility "
+        "of the floater specified in [\"name\"]",
+        &LLFloaterRegListener::instanceVisible,
+        requiredName);
     LLSD requiredNameButton;
     requiredNameButton["name"] = LLSD();
     requiredNameButton["button"] = LLSD();
@@ -71,9 +76,7 @@ LLFloaterRegListener::LLFloaterRegListener():
 
 void LLFloaterRegListener::getBuildMap(const LLSD& event) const
 {
-    // Honor the "reqid" convention by echoing event["reqid"] in our reply packet.
-    LLReqID reqID(event);
-    LLSD reply(reqID.makeResponse());
+    LLSD reply;
     // Build an LLSD map that mirrors sBuildMap. Since we have no good way to
     // represent a C++ callable in LLSD, the only part of BuildData we can
     // store is the filename. For each LLSD map entry, it would be more
@@ -86,7 +89,7 @@ void LLFloaterRegListener::getBuildMap(const LLSD& event) const
         reply[mi->first] = mi->second.mFile;
     }
     // Send the reply to the LLEventPump named in event["reply"].
-    LLEventPumps::instance().obtain(event["reply"]).post(reply);
+    sendReply(reply, event);
 }
 
 void LLFloaterRegListener::showInstance(const LLSD& event) const
@@ -104,6 +107,12 @@ void LLFloaterRegListener::toggleInstance(const LLSD& event) const
     LLFloaterReg::toggleInstance(event["name"], event["key"]);
 }
 
+void LLFloaterRegListener::instanceVisible(const LLSD& event) const
+{
+    sendReply(LLSDMap("visible", LLFloaterReg::instanceVisible(event["name"], event["key"])),
+              event);
+}
+
 void LLFloaterRegListener::clickButton(const LLSD& event) const
 {
     // If the caller requests a reply, build the reply.
diff --git a/indra/llui/llfloaterreglistener.h b/indra/llui/llfloaterreglistener.h
index 586656667ce4656d0354decb3dd2936f84d91ef4..24311a2dfa2610797e63570640b80483bb05a6fe 100644
--- a/indra/llui/llfloaterreglistener.h
+++ b/indra/llui/llfloaterreglistener.h
@@ -47,6 +47,7 @@ class LLFloaterRegListener: public LLEventAPI
     void showInstance(const LLSD& event) const;
     void hideInstance(const LLSD& event) const;
     void toggleInstance(const LLSD& event) const;
+    void instanceVisible(const LLSD& event) const;
     void clickButton(const LLSD& event) const;
 };
 
diff --git a/indra/llui/lliconctrl.h b/indra/llui/lliconctrl.h
index e9bdab2d47711d6ff19bf6139f4493b85a1b2a08..669e126266adced8157b393ee4dd28dca1c905c0 100644
--- a/indra/llui/lliconctrl.h
+++ b/indra/llui/lliconctrl.h
@@ -69,6 +69,7 @@ class LLIconCtrl
 
 	void			setColor(const LLColor4& color) { mColor = color; }
 	void			setImage(LLPointer<LLUIImage> image) { mImagep = image; }
+	const LLPointer<LLUIImage> getImage() { return mImagep; }
 	
 private:
 	void setIconImageDrawSize() ;
diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp
index 7e348656a92a63fa5d2755af8e9bfdc280f9798f..d99ee5a545704d93fe43807c623281250facce50 100644
--- a/indra/llui/lllineeditor.cpp
+++ b/indra/llui/lllineeditor.cpp
@@ -2290,3 +2290,8 @@ void LLLineEditor::setContextMenu(LLContextMenu* new_context_menu)
 	else
 		mContextMenuHandle.markDead();
 }
+
+void LLLineEditor::setFont(const LLFontGL* font)
+{
+	mGLFont = font;
+}
diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h
index 723423a5b9c2e8ffd46850672109db076356bc11..7b5fa218f23ca775e306f395d22edfd533a67e86 100644
--- a/indra/llui/lllineeditor.h
+++ b/indra/llui/lllineeditor.h
@@ -201,6 +201,7 @@ class LLLineEditor
 	const LLColor4& getTentativeFgColor() const { return mTentativeFgColor.get(); }
 
 	const LLFontGL* getFont() const { return mGLFont; }
+	void setFont(const LLFontGL* font);
 
 	void			setIgnoreArrowKeys(BOOL b)		{ mIgnoreArrowKeys = b; }
 	void			setIgnoreTab(BOOL b)			{ mIgnoreTab = b; }
diff --git a/indra/llui/llloadingindicator.cpp b/indra/llui/llloadingindicator.cpp
index 7b29d92ea050eeb9523861dc515332eeb86c5185..c4eec1835cdce8178eea2c1acd5d8121be1f92ea 100644
--- a/indra/llui/llloadingindicator.cpp
+++ b/indra/llui/llloadingindicator.cpp
@@ -39,56 +39,24 @@
 //static LLDefaultChildRegistry::Register<LLLoadingIndicator> r("loading_indicator");
 
 ///////////////////////////////////////////////////////////////////////////////
-// LLLoadingIndicator::Data class
+// LLLoadingIndicator class
 ///////////////////////////////////////////////////////////////////////////////
 
-/**
- * Pre-loaded images shared by all instances of the widget
- */
-class LLLoadingIndicator::Data: public LLSingleton<LLLoadingIndicator::Data>
+LLLoadingIndicator::LLLoadingIndicator(const Params& p)
+:	LLUICtrl(p), 
+	mImagesPerSec(p.images_per_sec > 0 ? p.images_per_sec : 1.0f), 
+	mCurImageIdx(0)
 {
-public:
-	/*virtual*/ void		initSingleton(); // from LLSingleton
-
-	LLPointer<LLUIImage>	getNextImage(S8& idx) const;
-	U8						getImagesCount() const	{ return NIMAGES; }
-private:
-
-	static const U8			NIMAGES = 12;
-	LLPointer<LLUIImage>	mImages[NIMAGES];
-};
+}
 
-// virtual
-// Called right after the instance gets constructed.
-void LLLoadingIndicator::Data::initSingleton()
+void LLLoadingIndicator::initFromParams(const Params& p)
 {
-	// Load images.
-	for (U8 i = 0; i < NIMAGES; ++i)
+	for (LLInitParam::ParamIterator<LLUIImage*>::const_iterator it = p.images().image.begin(), end_it = p.images().image.end();
+		it != end_it;
+		++it)
 	{
-		std::string img_name = llformat("Progress_%d", i+1);
-		mImages[i] = LLUI::getUIImage(img_name, 0);
-		llassert(mImages[i]);
+		mImages.push_back(it->getValue());
 	}
-}
-
-LLPointer<LLUIImage> LLLoadingIndicator::Data::getNextImage(S8& idx) const
-{
-	// Calculate next index, performing array bounds checking.
-	idx = (idx >= NIMAGES || idx < 0) ? 0 : (idx + 1) % NIMAGES; 
-	return mImages[idx];
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// LLLoadingIndicator class
-///////////////////////////////////////////////////////////////////////////////
-
-LLLoadingIndicator::LLLoadingIndicator(const Params& p)
-:	LLUICtrl(p)
-	, mRotationsPerSec(p.rotations_per_sec > 0 ? p.rotations_per_sec : 1.0f)
-	, mCurImageIdx(-1)
-{
-	// Select initial image.
-	mCurImagep = Data::instance().getNextImage(mCurImageIdx);
 
 	// Start timer for switching images.
 	start();
@@ -100,16 +68,21 @@ void LLLoadingIndicator::draw()
 	if (mImageSwitchTimer.getStarted() && mImageSwitchTimer.hasExpired())
 	{
 		// Switch to the next image.
-		mCurImagep = Data::instance().getNextImage(mCurImageIdx);
+		if (!mImages.empty())
+		{
+			mCurImageIdx = (mCurImageIdx + 1) % mImages.size();
+		}
 
 		// Restart timer.
 		start();
 	}
 
+	LLUIImagePtr cur_image = mImages.empty() ? LLUIImagePtr(NULL) : mImages[mCurImageIdx];
+
 	// Draw current image.
-	if( mCurImagep.notNull() )
+	if( cur_image.notNull() )
 	{
-		mCurImagep->draw(getLocalRect(), LLColor4::white % getDrawContext().mAlpha);
+		cur_image->draw(getLocalRect(), LLColor4::white % getDrawContext().mAlpha);
 	}
 
 	LLUICtrl::draw();
@@ -123,6 +96,6 @@ void LLLoadingIndicator::stop()
 void LLLoadingIndicator::start()
 {
 	mImageSwitchTimer.start();
-	F32 period = 1.0f / (Data::instance().getImagesCount() * mRotationsPerSec);
+	F32 period = 1.0f / (mImages.size() * mImagesPerSec);
 	mImageSwitchTimer.setTimerExpirySec(period);
 }
diff --git a/indra/llui/llloadingindicator.h b/indra/llui/llloadingindicator.h
index 4e4a224ef6e70a450332953bdc7420cf1137c0e0..c0cb1cc74a9df96fc06566a07648e17c6e6cad24 100644
--- a/indra/llui/llloadingindicator.h
+++ b/indra/llui/llloadingindicator.h
@@ -36,8 +36,8 @@
 /**
  * Perpetual loading indicator (a la MacOSX or YouTube)
  * 
- * Number of rotations per second can be overriden
- * with the "roations_per_sec" parameter.
+ * Number of rotations per second can be overridden
+ * with the "images_per_sec" parameter.
  * 
  * Can start/stop spinning.
  * 
@@ -49,11 +49,24 @@ class LLLoadingIndicator
 {
 	LOG_CLASS(LLLoadingIndicator);
 public:
+
+	struct Images : public LLInitParam::Block<Images>
+	{
+		Multiple<LLUIImage*>	image;
+
+		Images()
+		:	image("image")
+		{}
+	};
+
 	struct Params : public LLInitParam::Block<Params, LLUICtrl::Params>
 	{
-		Optional<F32>	rotations_per_sec;
+		Optional<F32>			images_per_sec;
+		Batch<Images>			images;
+
 		Params()
-		:	rotations_per_sec("rotations_per_sec", 1.0f)
+		:	images_per_sec("images_per_sec", 1.0f),
+			images("images")
 		{}
 	};
 
@@ -74,14 +87,15 @@ class LLLoadingIndicator
 
 private:
 	LLLoadingIndicator(const Params&);
-	friend class LLUICtrlFactory;
+	void initFromParams(const Params&);
 
-	class Data;
+	friend class LLUICtrlFactory;
 
-	F32						mRotationsPerSec;
+	F32						mImagesPerSec;
 	S8						mCurImageIdx;
-	LLPointer<LLUIImage>	mCurImagep;
 	LLFrameTimer			mImageSwitchTimer;
+
+	std::vector<LLUIImagePtr> mImages;
 };
 
 #endif // LL_LLLOADINGINDICATOR_H
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 32d7be377a3386a34f769fbb20876712b7b0ef3f..8de9c769e299dfe749007a8bed1c2f1e5f1d4ff7 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -1936,9 +1936,15 @@ bool LLMenuGL::scrollItems(EScrollingDirection direction)
 	{
 		item_list_t::reverse_iterator first_visible_item_iter = mItems.rend();
 
+		// Need to scroll through number of actual existing items in menu.
+		// Otherwise viewer will hang for a time needed to scroll U32_MAX
+		// times in std::advance(). STORM-659.
+		size_t nitems = mItems.size();
+		U32 scrollable_items = nitems < mMaxScrollableItems ? nitems : mMaxScrollableItems;
+
 		// Advance by mMaxScrollableItems back from the end of the list
 		// to make the last item visible.
-		std::advance(first_visible_item_iter, mMaxScrollableItems);
+		std::advance(first_visible_item_iter, scrollable_items);
 		mFirstVisibleItem = *first_visible_item_iter;
 		break;
 	}
@@ -3099,9 +3105,6 @@ void LLMenuGL::showPopup(LLView* spawning_view, LLMenuGL* menu, S32 x, S32 y)
 		CURSOR_HEIGHT + MOUSE_CURSOR_PADDING * 2);
 	menu->translateIntoRectWithExclusion( menu_region_rect, mouse_rect, FALSE );
 	menu->getParent()->sendChildToFront(menu);
-
-
-
 }
 
 ///============================================================================
diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
index cc9edfcdeabbc92c1cc05a05962608cf5adf5b86..bdac125eb06e8caf0164860353b3044066da736c 100644
--- a/indra/llui/llnotifications.cpp
+++ b/indra/llui/llnotifications.cpp
@@ -1195,16 +1195,18 @@ bool LLNotifications::uniqueFilter(LLNotificationPtr pNotif)
 
 bool LLNotifications::uniqueHandler(const LLSD& payload)
 {
+	std::string cmd = payload["sigtype"];
+
 	LLNotificationPtr pNotif = LLNotifications::instance().find(payload["id"].asUUID());
 	if (pNotif && pNotif->hasUniquenessConstraints()) 
 	{
-		if (payload["sigtype"].asString() == "add")
+		if (cmd == "add")
 		{
 			// not a duplicate according to uniqueness criteria, so we keep it
 			// and store it for future uniqueness checks
 			mUniqueNotifications.insert(std::make_pair(pNotif->getName(), pNotif));
 		}
-		else if (payload["sigtype"].asString() == "delete")
+		else if (cmd == "delete")
 		{
 			mUniqueNotifications.erase(pNotif->getName());
 		}
@@ -1217,12 +1219,16 @@ bool LLNotifications::failedUniquenessTest(const LLSD& payload)
 {
 	LLNotificationPtr pNotif = LLNotifications::instance().find(payload["id"].asUUID());
 	
-	if (!pNotif || !pNotif->hasUniquenessConstraints())
+	std::string cmd = payload["sigtype"];
+
+	if (!pNotif || cmd != "add")
 	{
 		return false;
 	}
 
-	// checks against existing unique notifications
+	// Update the existing unique notification with the data from this particular instance...
+	// This guarantees that duplicate notifications will be collapsed to the one
+	// most recently triggered
 	for (LLNotificationMap::iterator existing_it = mUniqueNotifications.find(pNotif->getName());
 		existing_it != mUniqueNotifications.end();
 		++existing_it)
@@ -1235,7 +1241,7 @@ bool LLNotifications::failedUniquenessTest(const LLSD& payload)
 			// of this unique notification and update it
 			existing_notification->updateFrom(pNotif);
 			// then delete the new one
-			pNotif->cancel();
+			cancel(pNotif);
 		}
 	}
 
@@ -1300,26 +1306,14 @@ void LLNotifications::createDefaultChannels()
 	// usage LLStopWhenHandled combiner in LLStandardSignal
 	LLNotifications::instance().getChannel("Unique")->
         connectAtFrontChanged(boost::bind(&LLNotifications::uniqueHandler, this, _1));
-// failedUniquenessTest slot isn't necessary
-//	LLNotifications::instance().getChannel("Unique")->
-//        connectFailedFilter(boost::bind(&LLNotifications::failedUniquenessTest, this, _1));
+	LLNotifications::instance().getChannel("Unique")->
+        connectFailedFilter(boost::bind(&LLNotifications::failedUniquenessTest, this, _1));
 	LLNotifications::instance().getChannel("Ignore")->
 		connectFailedFilter(&handleIgnoredNotification);
 	LLNotifications::instance().getChannel("VisibilityRules")->
 		connectFailedFilter(&visibilityRuleMached);
 }
 
-bool LLNotifications::addTemplate(const std::string &name, 
-								  LLNotificationTemplatePtr theTemplate)
-{
-	if (mTemplates.count(name))
-	{
-		llwarns << "LLNotifications -- attempted to add template '" << name << "' twice." << llendl;
-		return false;
-	}
-	mTemplates[name] = theTemplate;
-	return true;
-}
 
 LLNotificationTemplatePtr LLNotifications::getTemplate(const std::string& name)
 {
@@ -1416,27 +1410,45 @@ void replaceFormText(LLNotificationForm::Params& form, const std::string& patter
 	}
 }
 
+void addPathIfExists(const std::string& new_path, std::vector<std::string>& paths)
+{
+	if (gDirUtilp->fileExists(new_path))
+	{
+		paths.push_back(new_path);
+	}
+}
+
 bool LLNotifications::loadTemplates()
 {
-	const std::string xml_filename = "notifications.xml";
-	std::string full_filename = gDirUtilp->findSkinnedFilename(LLUI::getXUIPaths().front(), xml_filename);
+	std::vector<std::string> search_paths;
+	
+	std::string skin_relative_path = gDirUtilp->getDirDelimiter() + LLUI::getSkinPath() + gDirUtilp->getDirDelimiter() + "notifications.xml";
+	std::string localized_skin_relative_path = gDirUtilp->getDirDelimiter() + LLUI::getLocalizedSkinPath() + gDirUtilp->getDirDelimiter() + "notifications.xml";
+
+	addPathIfExists(gDirUtilp->getDefaultSkinDir() + skin_relative_path, search_paths);
+	addPathIfExists(gDirUtilp->getDefaultSkinDir() + localized_skin_relative_path, search_paths);
+	addPathIfExists(gDirUtilp->getSkinDir() + skin_relative_path, search_paths);
+	addPathIfExists(gDirUtilp->getSkinDir() + localized_skin_relative_path, search_paths);
+	addPathIfExists(gDirUtilp->getUserSkinDir() + skin_relative_path, search_paths);
+	addPathIfExists(gDirUtilp->getUserSkinDir() + localized_skin_relative_path, search_paths);
 
+	std::string base_filename = search_paths.front();
 	LLXMLNodePtr root;
-	BOOL success  = LLUICtrlFactory::getLayeredXMLNode(xml_filename, root);
+	BOOL success  = LLXMLNode::getLayeredXMLNode(root, search_paths);
 	
 	if (!success || root.isNull() || !root->hasName( "notifications" ))
 	{
-		llerrs << "Problem reading UI Notifications file: " << full_filename << llendl;
+		llerrs << "Problem reading UI Notifications file: " << base_filename << llendl;
 		return false;
 	}
 
 	LLNotificationTemplate::Notifications params;
 	LLXUIParser parser;
-	parser.readXUI(root, params, full_filename);
+	parser.readXUI(root, params, base_filename);
 
 	if(!params.validateBlock())
 	{
-		llerrs << "Problem reading UI Notifications file: " << full_filename << llendl;
+		llerrs << "Problem reading UI Notifications file: " << base_filename << llendl;
 		return false;
 	}
 
@@ -1483,7 +1495,7 @@ bool LLNotifications::loadTemplates()
 				replaceFormText(it->form_ref.form, "$ignoretext", it->form_ref.form_template.ignore_text);
 			}
 		}
-		addTemplate(it->name, LLNotificationTemplatePtr(new LLNotificationTemplate(*it)));
+		mTemplates[it->name] = LLNotificationTemplatePtr(new LLNotificationTemplate(*it));
 	}
 
 	return true;
@@ -1578,7 +1590,7 @@ void LLNotifications::add(const LLNotificationPtr pNotif)
 
 void LLNotifications::cancel(LLNotificationPtr pNotif)
 {
-	if (pNotif == NULL) return;
+	if (pNotif == NULL || pNotif->isCancelled()) return;
 
 	LLNotificationSet::iterator it=mItems.find(pNotif);
 	if (it == mItems.end())
@@ -1680,7 +1692,6 @@ bool LLNotifications::isVisibleByRules(LLNotificationPtr n)
 	for(it = mVisibilityRules.begin(); it != mVisibilityRules.end(); it++)
 	{
 		// An empty type/tag/name string will match any notification, so only do the comparison when the string is non-empty in the rule.
-
 		lldebugs 
 			<< "notification \"" << n->getName() << "\" " 
 			<< "testing against " << ((*it)->mVisible?"show":"hide") << " rule, "
@@ -1728,7 +1739,7 @@ bool LLNotifications::isVisibleByRules(LLNotificationPtr n)
 				// Response property is empty.  Cancel this notification.
 				lldebugs << "cancelling notification " << n->getName() << llendl;
 
-				n->cancel();
+				cancel(n);
 			}
 			else
 			{
diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h
index 34d3537781ba66df29fa789df743739e507605ed..0c4d4fc897ab187fe36b944cdad4b9fdcff2d12f 100644
--- a/indra/llui/llnotifications.h
+++ b/indra/llui/llnotifications.h
@@ -863,10 +863,11 @@ class LLNotifications :
 
 	friend class LLSingleton<LLNotifications>;
 public:
-	// load notification descriptions from file; 
-	// OK to call more than once because it will reload
-	bool loadTemplates();  
-	
+	// load all notification descriptions from file
+	// calling more than once will overwrite existing templates
+	// but never delete a template
+	bool loadTemplates();
+
 	// load visibility rules from file; 
 	// OK to call more than once because it will reload
 	bool loadVisibilityRules();  
@@ -950,8 +951,6 @@ class LLNotifications :
 	LLNotificationChannelPtr pHistoryChannel;
 	LLNotificationChannelPtr pExpirationChannel;
 	
-	// put your template in
-	bool addTemplate(const std::string& name, LLNotificationTemplatePtr theTemplate);
 	TemplateMap mTemplates;
 
 	VisibilityRuleList mVisibilityRules;
diff --git a/indra/llui/llradiogroup.cpp b/indra/llui/llradiogroup.cpp
index 6e9586369f30aeb418d3b7d64269ca0f2888a72a..3a12debf7e058b79335b1340a89eebf202bd9695 100644
--- a/indra/llui/llradiogroup.cpp
+++ b/indra/llui/llradiogroup.cpp
@@ -346,7 +346,7 @@ void LLRadioGroup::setValue( const LLSD& value )
 		}
 		else
 		{
-			llwarns << "LLRadioGroup::setValue: value not found: " << value.asString() << llendl;
+			setSelectedIndex(-1, TRUE);
 		}
 	}
 }
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
index 49537ef78fc2c1cf11df3c96a63cbcdc2da533c1..fd7bb699f851502b01349fed08826e696843b7e5 100644
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -157,6 +157,7 @@ LLTextBase::Params::Params()
 	read_only("read_only", false),
 	v_pad("v_pad", 0),
 	h_pad("h_pad", 0),
+	clip("clip", true),
 	clip_partial("clip_partial", true),
 	line_spacing("line_spacing"),
 	max_text_length("max_length", 255),
@@ -199,6 +200,7 @@ LLTextBase::LLTextBase(const LLTextBase::Params &p)
 	mVAlign(p.font_valign),
 	mLineSpacingMult(p.line_spacing.multiple),
 	mLineSpacingPixels(p.line_spacing.pixels),
+	mClip(p.clip),
 	mClipPartial(p.clip_partial && !p.allow_scroll),
 	mTrackEnd( p.track_end ),
 	mScrollIndex(-1),
@@ -334,7 +336,7 @@ void LLTextBase::drawSelectionBackground()
 
 		// binary search for line that starts before top of visible buffer
 		line_list_t::const_iterator line_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), content_display_rect.mTop, compare_bottom());
-		line_list_t::const_iterator end_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), content_display_rect.mBottom, compare_top());
+		line_list_t::const_iterator end_iter = std::upper_bound(mLineInfoList.begin(), mLineInfoList.end(), content_display_rect.mBottom, compare_top());
 
 		bool done = false;
 
@@ -512,7 +514,6 @@ void LLTextBase::drawText()
 		selection_right = llmax( mSelectionStart, mSelectionEnd );
 	}
 
-	LLRect scrolled_view_rect = getVisibleDocumentRect();
 	std::pair<S32, S32> line_range = getVisibleLines(mClipPartial);
 	S32 first_line = line_range.first;
 	S32 last_line = line_range.second;
@@ -545,10 +546,10 @@ void LLTextBase::drawText()
 			line_end = next_start;
 		}
 
-		LLRect text_rect(line.mRect.mLeft + mVisibleTextRect.mLeft - scrolled_view_rect.mLeft,
-						line.mRect.mTop - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom,
-						llmin(mDocumentView->getRect().getWidth(), line.mRect.mRight) - scrolled_view_rect.mLeft,
-						line.mRect.mBottom - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom);
+		LLRect text_rect(line.mRect);
+		text_rect.mRight = llmin(mDocumentView->getRect().getWidth(), text_rect.mRight); // clamp right edge to document extents
+		text_rect.translate(mVisibleTextRect.mLeft, mVisibleTextRect.mBottom); // translate into display region of text widget
+		text_rect.translate(mDocumentView->getRect().mLeft, mDocumentView->getRect().mBottom); // adjust by scroll position
 
 		// draw a single line of text
 		S32 seg_start = line_start;
@@ -993,14 +994,28 @@ void LLTextBase::draw()
 		updateScrollFromCursor();
 	}
 
-	LLRect doc_rect;
+	LLRect text_rect;
 	if (mScroller)
 	{
-		mScroller->localRectToOtherView(mScroller->getContentWindowRect(), &doc_rect, this);
+		mScroller->localRectToOtherView(mScroller->getContentWindowRect(), &text_rect, this);
 	}
 	else
 	{
-		doc_rect = getLocalRect();
+		LLRect visible_lines_rect;
+		std::pair<S32, S32> line_range = getVisibleLines(mClipPartial);
+		for (S32 i = line_range.first; i < line_range.second; i++)
+		{
+			if (visible_lines_rect.isEmpty())
+			{
+				visible_lines_rect = mLineInfoList[i].mRect;
+			}
+			else
+			{
+				visible_lines_rect.unionWith(mLineInfoList[i].mRect);
+			}
+		}
+		text_rect = visible_lines_rect;
+		text_rect.translate(mDocumentView->getRect().mLeft, mDocumentView->getRect().mBottom);
 	}
 
 	if (mBGVisible)
@@ -1010,28 +1025,37 @@ void LLTextBase::draw()
 		LLRect bg_rect = mVisibleTextRect;
 		if (mScroller)
 		{
-			bg_rect.intersectWith(doc_rect);
+			bg_rect.intersectWith(text_rect);
 		}
 		LLColor4 bg_color = mReadOnly 
 							? mReadOnlyBgColor.get()
 							: hasFocus() 
 								? mFocusBgColor.get() 
 								: mWriteableBgColor.get();
-		gl_rect_2d(doc_rect, bg_color % alpha, TRUE);
+		gl_rect_2d(text_rect, bg_color % alpha, TRUE);
 	}
 
-	// draw document view
-	LLUICtrl::draw();
-
-	{
-		// only clip if we support scrolling...
-		// since convention is that text boxes never vertically truncate their contents
-		// regardless of rect bounds
-		LLLocalClipRect clip(doc_rect, mScroller != NULL);
+ 	bool should_clip = mClip || mScroller != NULL;
+ 	{ LLLocalClipRect clip(text_rect, should_clip);
+ 
+ 		// draw document view
+ 		if (mScroller)
+		{
+ 			drawChild(mScroller);
+ 		}
+ 		else
+ 		{
+ 			drawChild(mDocumentView);
+ 		}
+ 
 		drawSelectionBackground();
 		drawText();
 		drawCursor();
 	}
+ 
+ 	mDocumentView->setVisible(FALSE);
+ 	LLUICtrl::draw();
+ 	mDocumentView->setVisible(TRUE);
 }
 
 
@@ -1415,7 +1439,7 @@ S32	LLTextBase::getFirstVisibleLine() const
 	return iter - mLineInfoList.begin();
 }
 
-std::pair<S32, S32>	LLTextBase::getVisibleLines(bool fully_visible) 
+std::pair<S32, S32>	LLTextBase::getVisibleLines(bool require_fully_visible) 
 {
 	LLRect visible_region = getVisibleDocumentRect();
 	line_list_t::const_iterator first_iter;
@@ -1424,14 +1448,14 @@ std::pair<S32, S32>	LLTextBase::getVisibleLines(bool fully_visible)
 	// make sure we have an up-to-date mLineInfoList
 	reflow();
 
-	if (fully_visible)
+	if (require_fully_visible)
 	{
 		first_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mTop, compare_top());
-		last_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mBottom, compare_bottom());
+		last_iter = std::upper_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mBottom, compare_bottom());
 	}
 	else
 	{
-		first_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mTop, compare_bottom());
+		first_iter = std::upper_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mTop, compare_bottom());
 		last_iter = std::lower_bound(mLineInfoList.begin(), mLineInfoList.end(), visible_region.mBottom, compare_top());
 	}
 	return std::pair<S32, S32>(first_iter - mLineInfoList.begin(), last_iter - mLineInfoList.begin());
@@ -1998,11 +2022,10 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round,
 			pos = segment_line_start + offset;
 			break;
 		}
-		else if (hit_past_end_of_line && segmentp->getEnd() > line_iter->mDocIndexEnd - 1)	
+		else if (hit_past_end_of_line && segmentp->getEnd() >= line_iter->mDocIndexEnd)
 		{
 			// segment wraps to next line, so just set doc pos to the end of the line
-			// segment wraps to next line, so just set doc pos to start of next line (represented by mDocIndexEnd)
-			pos = llmin(getLength(), line_iter->mDocIndexEnd);
+			pos = llclamp(line_iter->mDocIndexEnd - 1, 0, getLength());
 			break;
 		}
 		start_x += text_width;
@@ -2405,14 +2428,41 @@ LLRect LLTextBase::getVisibleDocumentRect() const
 	{
 		return mScroller->getVisibleContentRect();
 	}
-	else
+	else if (mClip)
 	{
-		// entire document rect is visible when not scrolling
+		LLRect visible_text_rect = getVisibleTextRect();
+		LLRect doc_rect = mDocumentView->getRect();
+		visible_text_rect.translate(-doc_rect.mLeft, -doc_rect.mBottom);
+
+		// reject partially visible lines
+		LLRect visible_lines_rect;
+		for (line_list_t::const_iterator it = mLineInfoList.begin(), end_it = mLineInfoList.end();
+			it != end_it;
+			++it)
+		{
+			bool line_visible = mClipPartial ? visible_text_rect.contains(it->mRect) : visible_text_rect.overlaps(it->mRect);
+			if (line_visible)
+			{
+				if (visible_lines_rect.isEmpty())
+				{
+					visible_lines_rect = it->mRect;
+				}
+				else
+				{
+					visible_lines_rect.unionWith(it->mRect);
+				}
+			}
+		}
+		return visible_lines_rect;
+	}
+	else
+	{	// entire document rect is visible
 		// but offset according to height of widget
+	
 		LLRect doc_rect = mDocumentView->getLocalRect();
 		doc_rect.mLeft -= mDocumentView->getRect().mLeft;
 		// adjust for height of text above widget baseline
-		doc_rect.mBottom = doc_rect.getHeight() - mVisibleTextRect.getHeight();
+		doc_rect.mBottom = llmin(0, doc_rect.getHeight() - mVisibleTextRect.getHeight());
 		return doc_rect;
 	}
 }
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
index aafcf8ceb0095421518f6faa548a7478a8f09432..7d545a1ba61970dd4a0e2ad0746a556119b75a33 100644
--- a/indra/llui/lltextbase.h
+++ b/indra/llui/lltextbase.h
@@ -265,6 +265,7 @@ class LLTextBase
 								use_ellipses,
 								parse_urls,
 								parse_highlights,
+								clip,
 								clip_partial;
 								
 		Optional<S32>			v_pad,
@@ -338,7 +339,7 @@ class LLTextBase
 	void					addDocumentChild(LLView* view);
 	void					removeDocumentChild(LLView* view);
 	const LLView*			getDocumentView() const { return mDocumentView; }
-	LLRect					getVisibleTextRect() { return mVisibleTextRect; }
+	LLRect					getVisibleTextRect() const { return mVisibleTextRect; }
 	LLRect					getTextBoundingRect();
 	LLRect					getVisibleDocumentRect() const;
 
@@ -552,6 +553,7 @@ class LLTextBase
 	bool						mTrackEnd;			// if true, keeps scroll position at end of document during resize
 	bool						mReadOnly;
 	bool						mBGVisible;			// render background?
+	bool						mClip;				// clip text to widget rect
 	bool						mClipPartial;		// false if we show lines that are partially inside bounding rect
 	bool						mPlainText;			// didn't use Image or Icon segments
 	S32							mMaxTextByteLength;	// Maximum length mText is allowed to be in bytes
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index c300fe55d9388f46b99e9346dda5bba9e7279b82..8020ca802bd2df162653bc2acd89318fd088c58a 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -61,6 +61,8 @@
 // for XUIParse
 #include "llquaternion.h"
 #include <boost/tokenizer.hpp>
+#include <boost/algorithm/string/find_iterator.hpp>
+#include <boost/algorithm/string/finder.hpp>
 
 //
 // Globals
@@ -1624,8 +1626,8 @@ void LLUI::cleanupClass()
 {
 	if(sImageProvider)
 	{
-		sImageProvider->cleanUp();
-	}
+	sImageProvider->cleanUp();
+}
 }
 
 void LLUI::setPopupFuncs(const add_popup_t& add_popup, const remove_popup_t& remove_popup,  const clear_popups_t& clear_popups)
@@ -2020,37 +2022,84 @@ void LLUI::positionViewNearMouse(LLView* view, S32 spawn_x, S32 spawn_y)
 	view->translateIntoRectWithExclusion( virtual_window_rect, mouse_rect, FALSE );
 }
 
+LLView* LLUI::resolvePath(LLView* context, const std::string& path)
+{
+	// Nothing about resolvePath() should require non-const LLView*. If caller
+	// wants non-const, call the const flavor and then cast away const-ness.
+	return const_cast<LLView*>(resolvePath(const_cast<const LLView*>(context), path));
+}
+
+const LLView* LLUI::resolvePath(const LLView* context, const std::string& path)
+{
+	// Create an iterator over slash-separated parts of 'path'. Dereferencing
+	// this iterator returns an iterator_range over the substring. Unlike
+	// LLStringUtil::getTokens(), this split_iterator doesn't combine adjacent
+	// delimiters: leading/trailing slash produces an empty substring, double
+	// slash produces an empty substring. That's what we need.
+	boost::split_iterator<std::string::const_iterator> ti(path, boost::first_finder("/")), tend;
+
+	if (ti == tend)
+	{
+		// 'path' is completely empty, no navigation
+		return context;
+	}
+
+	// leading / means "start at root"
+	if (ti->empty())
+	{
+		context = getRootView();
+		++ti;
+	}
+
+	bool recurse = false;
+	for (; ti != tend && context; ++ti)
+	{
+		if (ti->empty()) 
+		{
+			recurse = true;
+		}
+		else
+		{
+			std::string part(ti->begin(), ti->end());
+			context = context->findChildView(part, recurse);
+			recurse = false;
+		}
+	}
+
+	return context;
+}
+
 
 // LLLocalClipRect and LLScreenClipRect moved to lllocalcliprect.h/cpp
 
 namespace LLInitParam
 {
-	TypedParam<LLUIColor >::TypedParam(BlockDescriptor& descriptor, const char* name, const LLUIColor& value, ParamDescriptor::validation_func_t func, S32 min_count, S32 max_count)
-	:	super_t(descriptor, name, value, func, min_count, max_count),
+	ParamValue<LLUIColor, TypeValues<LLUIColor> >::ParamValue(const LLUIColor& color)
+	:	super_t(color),
 		red("red"),
 		green("green"),
 		blue("blue"),
 		alpha("alpha"),
 		control("")
 	{
-		setBlockFromValue();
+		updateBlockFromValue();
 	}
 
-	void TypedParam<LLUIColor>::setValueFromBlock() const
+	void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateValueFromBlock()
 	{
 		if (control.isProvided())
 		{
-			mData.mValue = LLUIColorTable::instance().getColor(control);
+			updateValue(LLUIColorTable::instance().getColor(control));
 		}
 		else
 		{
-			mData.mValue = LLColor4(red, green, blue, alpha);
+			updateValue(LLColor4(red, green, blue, alpha));
 		}
 	}
 	
-	void TypedParam<LLUIColor>::setBlockFromValue()
+	void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateBlockFromValue()
 	{
-		LLColor4 color = mData.mValue.get();
+		LLColor4 color = getValue();
 		red.set(color.mV[VRED], false);
 		green.set(color.mV[VGREEN], false);
 		blue.set(color.mV[VBLUE], false);
@@ -2058,38 +2107,32 @@ namespace LLInitParam
 		control.set("", false);
 	}
 
-	void TypeValues<LLUIColor>::declareValues()
-	{
-		declare("white", LLColor4::white);
-		declare("black", LLColor4::black);
-		declare("red", LLColor4::red);
-		declare("green", LLColor4::green);
-		declare("blue", LLColor4::blue);
-	}
-
 	bool ParamCompare<const LLFontGL*, false>::equals(const LLFontGL* a, const LLFontGL* b)
 	{
 		return !(a->getFontDesc() < b->getFontDesc())
 			&& !(b->getFontDesc() < a->getFontDesc());
 	}
 
-	TypedParam<const LLFontGL*>::TypedParam(BlockDescriptor& descriptor, const char* _name, const LLFontGL*const value, ParamDescriptor::validation_func_t func, S32 min_count, S32 max_count)
-	:	super_t(descriptor, _name, value, func, min_count, max_count),
+	ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::ParamValue(const LLFontGL* fontp)
+	:	super_t(fontp),
 		name("name"),
 		size("size"),
 		style("style")
 	{
-		setBlockFromValue();
+		if (!fontp)
+		{
+			updateValue(LLFontGL::getFontDefault());
+		}
 		addSynonym(name, "");
-		setBlockFromValue();
+		updateBlockFromValue();
 	}
 
-	void TypedParam<const LLFontGL*>::setValueFromBlock() const
+	void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateValueFromBlock()
 	{
 		const LLFontGL* res_fontp = LLFontGL::getFontByName(name);
 		if (res_fontp)
 		{
-			mData.mValue = res_fontp;
+			updateValue(res_fontp);
 			return;
 		}
 
@@ -2099,22 +2142,26 @@ namespace LLInitParam
 		const LLFontGL* fontp = LLFontGL::getFont(desc);
 		if (fontp)
 		{
-			mData.mValue = fontp;
-		}		
+			updateValue(fontp);
+		}
+		else
+		{
+			updateValue(LLFontGL::getFontDefault());
+		}
 	}
 	
-	void TypedParam<const LLFontGL*>::setBlockFromValue()
+	void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateBlockFromValue()
 	{
-		if (mData.mValue)
+		if (getValue())
 		{
-			name.set(LLFontGL::nameFromFont(mData.mValue), false);
-			size.set(LLFontGL::sizeFromFont(mData.mValue), false);
-			style.set(LLFontGL::getStringFromStyle(mData.mValue->getFontDesc().getStyle()), false);
+			name.set(LLFontGL::nameFromFont(getValue()), false);
+			size.set(LLFontGL::sizeFromFont(getValue()), false);
+			style.set(LLFontGL::getStringFromStyle(getValue()->getFontDesc().getStyle()), false);
 		}
 	}
 
-	TypedParam<LLRect>::TypedParam(BlockDescriptor& descriptor, const char* name, const LLRect& value, ParamDescriptor::validation_func_t func, S32 min_count, S32 max_count)
-	:	super_t(descriptor, name, value, func, min_count, max_count),
+	ParamValue<LLRect, TypeValues<LLRect> >::ParamValue(const LLRect& rect)
+	:	super_t(rect),
 		left("left"),
 		top("top"),
 		right("right"),
@@ -2122,10 +2169,10 @@ namespace LLInitParam
 		width("width"),
 		height("height")
 	{
-		setBlockFromValue();
+		updateBlockFromValue();
 	}
 
-	void TypedParam<LLRect>::setValueFromBlock() const
+	void ParamValue<LLRect, TypeValues<LLRect> >::updateValueFromBlock()
 	{
 		LLRect rect;
 
@@ -2186,40 +2233,41 @@ namespace LLInitParam
 			rect.mBottom = bottom;
 			rect.mTop = top;
 		}
-		mData.mValue = rect;
+		updateValue(rect);
 	}
 	
-	void TypedParam<LLRect>::setBlockFromValue()
+	void ParamValue<LLRect, TypeValues<LLRect> >::updateBlockFromValue()
 	{
 		// because of the ambiguity in specifying a rect by position and/or dimensions
 		// we clear the "provided" flag so that values from xui/etc have priority
 		// over those calculated from the rect object
 
-		left.set(mData.mValue.mLeft, false);
-		right.set(mData.mValue.mRight, false);
-		bottom.set(mData.mValue.mBottom, false);
-		top.set(mData.mValue.mTop, false);
-		width.set(mData.mValue.getWidth(), false);
-		height.set(mData.mValue.getHeight(), false);
+		LLRect& value = getValue();
+		left.set(value.mLeft, false);
+		right.set(value.mRight, false);
+		bottom.set(value.mBottom, false);
+		top.set(value.mTop, false);
+		width.set(value.getWidth(), false);
+		height.set(value.getHeight(), false);
 	}
 
-	TypedParam<LLCoordGL>::TypedParam(BlockDescriptor& descriptor, const char* name, LLCoordGL value, ParamDescriptor::validation_func_t func, S32 min_count, S32 max_count)
-	:	super_t(descriptor, name, value, func, min_count, max_count),
+	ParamValue<LLCoordGL, TypeValues<LLCoordGL> >::ParamValue(const LLCoordGL& coord)
+	:	super_t(coord),
 		x("x"),
 		y("y")
 	{
-		setBlockFromValue();
+		updateBlockFromValue();
 	}
 
-	void TypedParam<LLCoordGL>::setValueFromBlock() const
+	void ParamValue<LLCoordGL, TypeValues<LLCoordGL> >::updateValueFromBlock()
 	{
-		mData.mValue.set(x, y);
+		updateValue(LLCoordGL(x, y));
 	}
 	
-	void TypedParam<LLCoordGL>::setBlockFromValue()
+	void ParamValue<LLCoordGL, TypeValues<LLCoordGL> >::updateBlockFromValue()
 	{
-		x.set(mData.mValue.mX, false);
-		y.set(mData.mValue.mY, false);
+		x.set(getValue().mX, false);
+		y.set(getValue().mY, false);
 	}
 
 
diff --git a/indra/llui/llui.h b/indra/llui/llui.h
index 62d10df8b28852db94925ffdffa401f9c12c7d46..6a43477693b0f54b488ec8e0b1c0af75f4308faa 100644
--- a/indra/llui/llui.h
+++ b/indra/llui/llui.h
@@ -185,6 +185,33 @@ class LLUI
 	//helper functions (should probably move free standing rendering helper functions here)
 	static LLView* getRootView() { return sRootView; }
 	static void setRootView(LLView* view) { sRootView = view; }
+	/**
+	 * Walk the LLView tree to resolve a path
+	 * Paths can be discovered using Develop > XUI > Show XUI Paths
+	 *
+	 * A leading "/" indicates the root of the tree is the starting
+	 * position of the search, (otherwise the context node is used)
+	 *
+	 * Adjacent "//" mean that the next level of the search is done
+	 * recursively ("descendant" rather than "child").
+	 *
+	 * Return values: If no match is found, NULL is returned,
+	 * otherwise the matching LLView* is returned.
+	 *
+	 * Examples:
+	 *
+	 * "/" -> return the root view
+	 * "/foo" -> find "foo" as a direct child of the root
+	 * "foo" -> find "foo" as a direct child of the context node
+	 * "//foo" -> find the first "foo" child anywhere in the tree
+	 * "/foo/bar" -> find "foo" as direct child of the root, and
+	 *      "bar" as a direct child of "foo"
+	 * "//foo//bar/baz" -> find the first "foo" anywhere in the
+	 *      tree, the first "bar" anywhere under it, and "baz"
+	 *      as a direct child of that
+	 */
+	static const LLView* resolvePath(const LLView* context, const std::string& path);
+	static LLView* resolvePath(LLView* context, const std::string& path);
 	static std::string locateSkin(const std::string& filename);
 	static void setMousePositionScreen(S32 x, S32 y);
 	static void getMousePositionScreen(S32 *x, S32 *y);
@@ -371,10 +398,10 @@ class LLUICachedControl : public LLCachedControl<T>
 namespace LLInitParam
 {
 	template<>
-	class TypedParam<LLRect> 
-	:	public BlockValue<LLRect>
+	class ParamValue<LLRect, TypeValues<LLRect> > 
+	:	public CustomParamValue<LLRect>
 	{
-        typedef BlockValue<LLRect> super_t;
+        typedef CustomParamValue<LLRect> super_t;
 	public:
 		Optional<S32>	left,
 						top,
@@ -383,62 +410,43 @@ namespace LLInitParam
 						width,
 						height;
 
-		TypedParam(BlockDescriptor& descriptor, const char* name, const LLRect& value, ParamDescriptor::validation_func_t func, S32 min_count, S32 max_count);
+		ParamValue(const LLRect& value);
 
-		void setValueFromBlock() const;
-		void setBlockFromValue();
+		void updateValueFromBlock();
+		void updateBlockFromValue();
 	};
 
 	template<>
-	struct TypeValues<LLUIColor> : public TypeValuesHelper<LLUIColor>
+	class ParamValue<LLUIColor, TypeValues<LLUIColor> > 
+	:	public CustomParamValue<LLUIColor>
 	{
-		static void declareValues();
-	};
+        typedef CustomParamValue<LLUIColor> super_t;
 
-	template<>
-	class TypedParam<LLUIColor> 
-	:	public BlockValue<LLUIColor>
-	{
-        typedef BlockValue<LLUIColor> super_t;
 	public:
-		Optional<F32>	red,
-						green,
-						blue,
-						alpha;
-		Optional<std::string> control;
-
-		TypedParam(BlockDescriptor& descriptor, const char* name, const LLUIColor& value, ParamDescriptor::validation_func_t func, S32 min_count, S32 max_count);
-		void setValueFromBlock() const;
-		void setBlockFromValue();
+		Optional<F32>			red,
+								green,
+								blue,
+								alpha;
+		Optional<std::string>	control;
+
+		ParamValue(const LLUIColor& color);
+		void updateValueFromBlock();
+		void updateBlockFromValue();
 	};
 
-	// provide a better default for Optional<const LLFontGL*> than NULL
-	template <>
-	struct DefaultInitializer<const LLFontGL*>
-	{
-		// return reference to a single default instance of T
-		// built-in types will be initialized to zero, default constructor otherwise
-		static const LLFontGL* get() 
-		{ 
-			static const LLFontGL* sDefaultFont = LLFontGL::getFontDefault();  
-			return sDefaultFont;
-		} 
-	};
-
-
 	template<>
-	class TypedParam<const LLFontGL*> 
-	:	public BlockValue<const LLFontGL*>
+	class ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> > 
+	:	public CustomParamValue<const LLFontGL* >
 	{
-        typedef BlockValue<const LLFontGL*> super_t;
+        typedef CustomParamValue<const LLFontGL*> super_t;
 	public:
 		Optional<std::string>	name,
 								size,
 								style;
 
-		TypedParam(BlockDescriptor& descriptor, const char* name, const LLFontGL* const value, ParamDescriptor::validation_func_t func, S32 min_count, S32 max_count);
-		void setValueFromBlock() const;
-		void setBlockFromValue();
+		ParamValue(const LLFontGL* value);
+		void updateValueFromBlock();
+		void updateBlockFromValue();
 	};
 
 	template<>
@@ -467,17 +475,17 @@ namespace LLInitParam
 
 
 	template<>
-	class TypedParam<LLCoordGL>
-	:	public BlockValue<LLCoordGL>
+	class ParamValue<LLCoordGL, TypeValues<LLCoordGL> >
+	:	public CustomParamValue<LLCoordGL>
 	{
-		typedef BlockValue<LLCoordGL> super_t;
+		typedef CustomParamValue<LLCoordGL> super_t;
 	public:
 		Optional<S32>	x,
 						y;
 
-		TypedParam(BlockDescriptor& descriptor, const char* name, LLCoordGL value, ParamDescriptor::validation_func_t func, S32 min_count, S32 max_count);
-		void setValueFromBlock() const;
-		void setBlockFromValue();
+		ParamValue(const LLCoordGL& val);
+		void updateValueFromBlock();
+		void updateBlockFromValue();
 	};
 }
 
diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp
index 5de96f9d48a0eaf588dffb5acdcf0fea50664256..25e7a31e9073de346c6a1bc43f2d37d1925d1b47 100644
--- a/indra/llui/lluictrlfactory.cpp
+++ b/indra/llui/lluictrlfactory.cpp
@@ -152,7 +152,27 @@ static LLFastTimer::DeclareTimer FTM_XML_PARSE("XML Reading/Parsing");
 bool LLUICtrlFactory::getLayeredXMLNode(const std::string &xui_filename, LLXMLNodePtr& root)
 {
 	LLFastTimer timer(FTM_XML_PARSE);
-	return LLXMLNode::getLayeredXMLNode(xui_filename, root, LLUI::getXUIPaths());
+	
+	std::vector<std::string> paths;
+	std::string path = gDirUtilp->findSkinnedFilename(LLUI::getSkinPath(), xui_filename);
+	if (!path.empty())
+	{
+		paths.push_back(path);
+	}
+
+	std::string localize_path = gDirUtilp->findSkinnedFilename(LLUI::getLocalizedSkinPath(), xui_filename);
+	if (!localize_path.empty() && localize_path != path)
+	{
+		paths.push_back(localize_path);
+	}
+
+	if (paths.empty())
+	{
+		// sometimes whole path is passed in as filename
+		paths.push_back(xui_filename);
+	}
+
+	return LLXMLNode::getLayeredXMLNode(root, paths);
 }
 
 
@@ -214,7 +234,7 @@ LLView *LLUICtrlFactory::createFromXML(LLXMLNodePtr node, LLView* parent, const
 
 std::string LLUICtrlFactory::getCurFileName() 
 { 
-	return mFileNames.empty() ? "" : gDirUtilp->getWorkingDir() + gDirUtilp->getDirDelimiter() + mFileNames.back(); 
+	return mFileNames.empty() ? "" : mFileNames.back(); 
 }
 
 
diff --git a/indra/llui/lluiimage.cpp b/indra/llui/lluiimage.cpp
index 1ffad4806e3bf5913c83d526998bc11d56f3fa55..f37947a50b6774a7f12b36d3acd124e04d38eda5 100644
--- a/indra/llui/lluiimage.cpp
+++ b/indra/llui/lluiimage.cpp
@@ -155,32 +155,32 @@ void LLUIImage::onImageLoaded()
 
 namespace LLInitParam
 {
-	void TypedParam<LLUIImage*>::setValueFromBlock() const
+	void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateValueFromBlock()
 	{
 		// The keyword "none" is specifically requesting a null image
 		// do not default to current value. Used to overwrite template images. 
 		if (name() == "none")
 		{
-			mData.mValue = NULL;
+			updateValue(NULL);
 			return;
 		}
 
 		LLUIImage* imagep =  LLUI::getUIImage(name());
 		if (imagep)
 		{
-			mData.mValue = imagep;
+			updateValue(imagep);
 		}
 	}
 	
-	void TypedParam<LLUIImage*>::setBlockFromValue()
+	void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateBlockFromValue()
 	{
-		if (mData.mValue == NULL)
+		if (getValue() == NULL)
 		{
 			name.set("none", false);
 		}
 		else
 		{
-			name.set(mData.mValue->getName(), false);
+			name.set(getValue()->getName(), false);
 		}
 	}
 
diff --git a/indra/llui/lluiimage.h b/indra/llui/lluiimage.h
index 38107c112d71edfcccf3e0f6d2386938dd32082a..139d88e0ac65f51c11237a1a127c989998a278ea 100644
--- a/indra/llui/lluiimage.h
+++ b/indra/llui/lluiimage.h
@@ -92,22 +92,23 @@ class LLUIImage : public LLRefCount
 namespace LLInitParam
 {
 	template<>
-	class TypedParam<LLUIImage*, TypeValues<LLUIImage*>, false> 
-	:	public BlockValue<LLUIImage*>
+	class ParamValue<LLUIImage*, TypeValues<LLUIImage*> > 
+	:	public CustomParamValue<LLUIImage*>
 	{
 		typedef boost::add_reference<boost::add_const<LLUIImage*>::type>::type	T_const_ref;
-		typedef BlockValue<LLUIImage*> super_t;
+		typedef CustomParamValue<LLUIImage*> super_t;
 	public:
 		Optional<std::string> name;
 
-		TypedParam(BlockDescriptor& descriptor, const char* name, super_t::value_assignment_t value, ParamDescriptor::validation_func_t func, S32 min_count, S32 max_count)
-		:	super_t(descriptor, name, value, func, min_count, max_count)
+		ParamValue(LLUIImage* const& image)
+		:	super_t(image)
 		{
-			setBlockFromValue();
+			updateBlockFromValue();
+			addSynonym(name, "name");
 		}
 
-		void setValueFromBlock() const;
-		void setBlockFromValue();
+		void updateValueFromBlock();
+		void updateBlockFromValue();
 	};
 
 	// Need custom comparison function for our test app, which only loads
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 267640a2261fa5f10025c0e597c9782fab33205d..d73e87129e3eeabf728bd5ef0a3740d6b6359553 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -338,7 +338,7 @@ void LLView::removeChild(LLView* child)
 	}
 	else
 	{
-		llerrs << "LLView::removeChild called with non-child" << llendl;
+		llwarns << child->getName() << "is not a child of " << getName() << llendl;
 	}
 	updateBoundingRect();
 }
@@ -1958,7 +1958,7 @@ void LLView::centerWithin(const LLRect& bounds)
 	translate( left - getRect().mLeft, bottom - getRect().mBottom );
 }
 
-BOOL LLView::localPointToOtherView( S32 x, S32 y, S32 *other_x, S32 *other_y, LLView* other_view) const
+BOOL LLView::localPointToOtherView( S32 x, S32 y, S32 *other_x, S32 *other_y, const LLView* other_view) const
 {
 	const LLView* cur_view = this;
 	const LLView* root_view = NULL;
@@ -2001,7 +2001,7 @@ BOOL LLView::localPointToOtherView( S32 x, S32 y, S32 *other_x, S32 *other_y, LL
 	return FALSE;
 }
 
-BOOL LLView::localRectToOtherView( const LLRect& local, LLRect* other, LLView* other_view ) const
+BOOL LLView::localRectToOtherView( const LLRect& local, LLRect* other, const LLView* other_view ) const
 {
 	LLRect cur_rect = local;
 	const LLView* cur_view = this;
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index d2bbd663b85b3175cf44739fadfa458a511ea165..61dc4b80305eae6d223ea8220a0b90d550efe018 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -406,8 +406,8 @@ class LLView : public LLMouseHandler, public LLMortician, public LLFocusableElem
 	BOOL blockMouseEvent(S32 x, S32 y) const;
 
 	// See LLMouseHandler virtuals for screenPointToLocal and localPointToScreen
-	BOOL localPointToOtherView( S32 x, S32 y, S32 *other_x, S32 *other_y, LLView* other_view) const;
-	BOOL localRectToOtherView( const LLRect& local, LLRect* other, LLView* other_view ) const;
+	BOOL localPointToOtherView( S32 x, S32 y, S32 *other_x, S32 *other_y, const LLView* other_view) const;
+	BOOL localRectToOtherView( const LLRect& local, LLRect* other, const LLView* other_view ) const;
 	void screenRectToLocal( const LLRect& screen, LLRect* local ) const;
 	void localRectToScreen( const LLRect& local, LLRect* screen ) const;
 	
diff --git a/indra/llui/tests/llurlentry_stub.cpp b/indra/llui/tests/llurlentry_stub.cpp
index 96ebe83826c5137dd90cd0458620a15d2777a4c8..75946b241685ba7923d45633b3c8ca56c9927610 100644
--- a/indra/llui/tests/llurlentry_stub.cpp
+++ b/indra/llui/tests/llurlentry_stub.cpp
@@ -114,32 +114,30 @@ namespace LLInitParam
 		const U8* block_addr = reinterpret_cast<const U8*>(enclosing_block);
 		mEnclosingBlockOffset = (U16)(my_addr - block_addr);
 	}
-	void BaseBlock::setLastChangedParam(const Param& last_param, bool user_provided) {}
+	void BaseBlock::paramChanged(const Param& last_param, bool user_provided) {}
 
-	void BaseBlock::addParam(BlockDescriptor& block_data, const ParamDescriptor& in_param, const char* char_name){}
+	void BaseBlock::addParam(BlockDescriptor& block_data, const ParamDescriptorPtr in_param, const char* char_name){}
+	void BaseBlock::addSynonym(Param& param, const std::string& synonym) {}
 	param_handle_t BaseBlock::getHandleFromParam(const Param* param) const {return 0;}
 	
 	void BaseBlock::init(BlockDescriptor& descriptor, BlockDescriptor& base_descriptor, size_t block_size)
 	{
 		descriptor.mCurrentBlockPtr = this;
 	}
-	bool BaseBlock::deserializeBlock(Parser& p, Parser::name_stack_range_t name_stack){ return true; }
-	bool BaseBlock::serializeBlock(Parser& parser, Parser::name_stack_t name_stack, const LLInitParam::BaseBlock* diff_block) const { return true; }
-	bool BaseBlock::inspectBlock(Parser& parser, Parser::name_stack_t name_stack) const { return true; }
+	bool BaseBlock::deserializeBlock(Parser& p, Parser::name_stack_range_t name_stack, S32 generation){ return true; }
+	void BaseBlock::serializeBlock(Parser& parser, Parser::name_stack_t name_stack, const LLInitParam::BaseBlock* diff_block) const {}
+	bool BaseBlock::inspectBlock(Parser& parser, Parser::name_stack_t name_stack, S32 min_value, S32 max_value) const { return true; }
 	bool BaseBlock::merge(BlockDescriptor& block_data, const BaseBlock& other, bool overwrite) { return true; }
 	bool BaseBlock::validateBlock(bool emit_errors) const { return true; }
 
-	TypedParam<LLUIColor >::TypedParam(BlockDescriptor& descriptor, const char* name, const LLUIColor& value, ParamDescriptor::validation_func_t func, S32 min_count, S32 max_count)
-	:	super_t(descriptor, name, value, func, min_count, max_count)
+	ParamValue<LLUIColor, TypeValues<LLUIColor> >::ParamValue(const LLUIColor& color)
+	:	super_t(color)
 	{}
 
-	void TypedParam<LLUIColor>::setValueFromBlock() const
+	void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateValueFromBlock() 
 	{}
 	
-	void TypedParam<LLUIColor>::setBlockFromValue()
-	{}
-
-	void TypeValues<LLUIColor>::declareValues()
+	void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateBlockFromValue()
 	{}
 
 	bool ParamCompare<const LLFontGL*, false>::equals(const LLFontGL* a, const LLFontGL* b)
@@ -147,14 +145,14 @@ namespace LLInitParam
 		return false;
 	}
 
-	TypedParam<const LLFontGL*>::TypedParam(BlockDescriptor& descriptor, const char* _name, const LLFontGL*const value, ParamDescriptor::validation_func_t func, S32 min_count, S32 max_count)
-	:	super_t(descriptor, _name, value, func, min_count, max_count)
+	ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::ParamValue(const LLFontGL* fontp)
+	:	super_t(fontp)
 	{}
 
-	void TypedParam<const LLFontGL*>::setValueFromBlock() const
+	void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateValueFromBlock()
 	{}
 	
-	void TypedParam<const LLFontGL*>::setBlockFromValue()
+	void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateBlockFromValue()
 	{}
 
 	void TypeValues<LLFontGL::HAlign>::declareValues()
@@ -166,10 +164,10 @@ namespace LLInitParam
 	void TypeValues<LLFontGL::ShadowType>::declareValues()
 	{}
 
-	void TypedParam<LLUIImage*>::setValueFromBlock() const
+	void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateValueFromBlock()
 	{}
 	
-	void TypedParam<LLUIImage*>::setBlockFromValue()
+	void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateBlockFromValue()
 	{}
 
 	
@@ -193,8 +191,8 @@ LLFontGL* LLFontGL::getFontDefault()
 	return NULL; 
 }
 
-char* _PREHASH_AgentData = "AgentData";
-char* _PREHASH_AgentID = "AgentID";
+char const* const _PREHASH_AgentData = (char *)"AgentData";
+char const* const _PREHASH_AgentID = (char *)"AgentID";
 
 LLHost LLHost::invalid(INVALID_PORT,INVALID_HOST_IP_ADDRESS);
 
diff --git a/indra/llui/tests/llurlentry_test.cpp b/indra/llui/tests/llurlentry_test.cpp
index 8f0a48018fb26132f0ca1b5257a1110850dce4d3..2f814f4200cad8bcc9b5a53b017656579a77668f 100644
--- a/indra/llui/tests/llurlentry_test.cpp
+++ b/indra/llui/tests/llurlentry_test.cpp
@@ -70,6 +70,22 @@ S32 LLUIImage::getHeight() const
 	return 0;
 }
 
+namespace LLInitParam
+{
+	S32 Parser::sNextParseGeneration = 0;
+	BlockDescriptor::BlockDescriptor() {}
+	ParamDescriptor::ParamDescriptor(param_handle_t p, 
+						merge_func_t merge_func, 
+						deserialize_func_t deserialize_func, 
+						serialize_func_t serialize_func,
+						validation_func_t validation_func,
+						inspect_func_t inspect_func,
+						S32 min_count,
+						S32 max_count){}
+	ParamDescriptor::~ParamDescriptor() {}
+
+}
+
 namespace tut
 {
 	struct LLUrlEntryData
diff --git a/indra/llui/tests/llurlmatch_test.cpp b/indra/llui/tests/llurlmatch_test.cpp
index fdaab00f18bfc9787fecf42c4de5d76e1c2c137a..aea605c9f2ff0250f222e803aab90de7dae94fd1 100644
--- a/indra/llui/tests/llurlmatch_test.cpp
+++ b/indra/llui/tests/llurlmatch_test.cpp
@@ -66,11 +66,25 @@ namespace LLInitParam
 	BaseBlock::BaseBlock() {}
 	BaseBlock::~BaseBlock() {}
 
-	void BaseBlock::setLastChangedParam(const Param& last_param, bool user_provided) {}
-
-	void BaseBlock::addParam(BlockDescriptor& block_data, const ParamDescriptor& in_param, const char* char_name){}
+	S32 Parser::sNextParseGeneration = 0;
+
+	BlockDescriptor::BlockDescriptor() {}
+	ParamDescriptor::ParamDescriptor(param_handle_t p, 
+						merge_func_t merge_func, 
+						deserialize_func_t deserialize_func, 
+						serialize_func_t serialize_func,
+						validation_func_t validation_func,
+						inspect_func_t inspect_func,
+						S32 min_count,
+						S32 max_count){}
+	ParamDescriptor::~ParamDescriptor() {}
+
+	void BaseBlock::paramChanged(const Param& last_param, bool user_provided) {}
+
+	void BaseBlock::addParam(BlockDescriptor& block_data, const ParamDescriptorPtr in_param, const char* char_name){}
 	param_handle_t BaseBlock::getHandleFromParam(const Param* param) const {return 0;}
-	
+	void BaseBlock::addSynonym(Param& param, const std::string& synonym) {}
+
 	void BaseBlock::init(BlockDescriptor& descriptor, BlockDescriptor& base_descriptor, size_t block_size)
 	{
 		descriptor.mCurrentBlockPtr = this;
@@ -84,23 +98,20 @@ namespace LLInitParam
 		mEnclosingBlockOffset = (U16)(my_addr - block_addr);
 	}
 
-	bool BaseBlock::deserializeBlock(Parser& p, Parser::name_stack_range_t name_stack){ return true; }
-	bool BaseBlock::serializeBlock(Parser& parser, Parser::name_stack_t name_stack, const LLInitParam::BaseBlock* diff_block) const { return true; }
-	bool BaseBlock::inspectBlock(Parser& parser, Parser::name_stack_t name_stack) const { return true; }
+	bool BaseBlock::deserializeBlock(Parser& p, Parser::name_stack_range_t name_stack, S32 generation){ return true; }
+	void BaseBlock::serializeBlock(Parser& parser, Parser::name_stack_t name_stack, const LLInitParam::BaseBlock* diff_block) const {}
+	bool BaseBlock::inspectBlock(Parser& parser, Parser::name_stack_t name_stack, S32 min_count, S32 max_count) const { return true; }
 	bool BaseBlock::merge(BlockDescriptor& block_data, const BaseBlock& other, bool overwrite) { return true; }
 	bool BaseBlock::validateBlock(bool emit_errors) const { return true; }
 
-	TypedParam<LLUIColor >::TypedParam(BlockDescriptor& descriptor, const char* name, const LLUIColor& value, ParamDescriptor::validation_func_t func, S32 min_count, S32 max_count)
-	:	super_t(descriptor, name, value, func, min_count, max_count)
+	ParamValue<LLUIColor, TypeValues<LLUIColor> >::ParamValue(const LLUIColor& color)
+	:	super_t(color)
 	{}
 
-	void TypedParam<LLUIColor>::setValueFromBlock() const
+	void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateValueFromBlock()
 	{}
 	
-	void TypedParam<LLUIColor>::setBlockFromValue()
-	{}
-
-	void TypeValues<LLUIColor>::declareValues()
+	void ParamValue<LLUIColor, TypeValues<LLUIColor> >::updateBlockFromValue()
 	{}
 
 	bool ParamCompare<const LLFontGL*, false>::equals(const LLFontGL* a, const LLFontGL* b)
@@ -108,14 +119,15 @@ namespace LLInitParam
 		return false;
 	}
 
-	TypedParam<const LLFontGL*>::TypedParam(BlockDescriptor& descriptor, const char* _name, const LLFontGL*const value, ParamDescriptor::validation_func_t func, S32 min_count, S32 max_count)
-	:	super_t(descriptor, _name, value, func, min_count, max_count)
+
+	ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::ParamValue(const LLFontGL* fontp)
+	:	super_t(fontp)
 	{}
 
-	void TypedParam<const LLFontGL*>::setValueFromBlock() const
+	void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateValueFromBlock()
 	{}
 	
-	void TypedParam<const LLFontGL*>::setBlockFromValue()
+	void ParamValue<const LLFontGL*, TypeValues<const LLFontGL*> >::updateBlockFromValue()
 	{}
 
 	void TypeValues<LLFontGL::HAlign>::declareValues()
@@ -127,10 +139,10 @@ namespace LLInitParam
 	void TypeValues<LLFontGL::ShadowType>::declareValues()
 	{}
 
-	void TypedParam<LLUIImage*>::setValueFromBlock() const
+	void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateValueFromBlock()
 	{}
 	
-	void TypedParam<LLUIImage*>::setBlockFromValue()
+	void ParamValue<LLUIImage*, TypeValues<LLUIImage*> >::updateBlockFromValue()
 	{}
 	
 	bool ParamCompare<LLUIImage*, false>::equals(
diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp
index cb898e385f91b84a9d027eebce9923240526d92e..341c96f6ea7b9a4d9cd790cb6c71128dffbe2a7b 100644
--- a/indra/llvfs/lldir.cpp
+++ b/indra/llvfs/lldir.cpp
@@ -149,7 +149,11 @@ const std::string LLDir::findFile(const std::string& filename, const std::vector
 	{
 		if (!search_path_iter->empty())
 		{
-			std::string filename_and_path = (*search_path_iter) + getDirDelimiter() + filename;
+			std::string filename_and_path = (*search_path_iter);
+			if (!filename.empty())
+			{
+				filename_and_path += getDirDelimiter() + filename;
+			}
 			if (fileExists(filename_and_path))
 			{
 				return filename_and_path;
diff --git a/indra/llvfs/lldir_win32.cpp b/indra/llvfs/lldir_win32.cpp
index 33718e520d71b4c3e2595574187c22d0224c0ce7..4e2a55f4b30789f9ce8ce8eb6dc8fe0c721caca3 100644
--- a/indra/llvfs/lldir_win32.cpp
+++ b/indra/llvfs/lldir_win32.cpp
@@ -81,10 +81,11 @@ LLDir_Win32::LLDir_Win32()
 
 //	fprintf(stderr, "mTempDir = <%s>",mTempDir);
 
-#if 1
-	// Don't use the real app path for now, as we'll have to add parsing to detect if
-	// we're in a developer tree, which has a different structure from the installed product.
+	// Set working directory, for LLDir::getWorkingDir()
+	GetCurrentDirectory(MAX_PATH, w_str);
+	mWorkingDir = utf16str_to_utf8str(llutf16string(w_str));
 
+	// Set the executable directory
 	S32 size = GetModuleFileName(NULL, w_str, MAX_PATH);
 	if (size)
 	{
@@ -100,32 +101,35 @@ LLDir_Win32::LLDir_Win32()
 		{
 			mExecutableFilename = mExecutablePathAndName;
 		}
-		GetCurrentDirectory(MAX_PATH, w_str);
-		mWorkingDir = utf16str_to_utf8str(llutf16string(w_str));
 
 	}
 	else
 	{
 		fprintf(stderr, "Couldn't get APP path, assuming current directory!");
-		GetCurrentDirectory(MAX_PATH, w_str);
-		mExecutableDir = utf16str_to_utf8str(llutf16string(w_str));
+		mExecutableDir = mWorkingDir;
 		// Assume it's the current directory
 	}
-#else
-	GetCurrentDirectory(MAX_PATH, w_str);
-	mExecutableDir = utf16str_to_utf8str(llutf16string(w_str));
-#endif
 
-	if (mExecutableDir.find("indra") == std::string::npos)
+	// mAppRODataDir = ".";	
+
+	// Determine the location of the App-Read-Only-Data
+	// Try the working directory then the exe's dir.
+	mAppRODataDir = mWorkingDir;	
+
+
+//	if (mExecutableDir.find("indra") == std::string::npos)
+	
+	// *NOTE:Mani - It is a mistake to put viewer specific code in
+	// the LLDir implementation. The references to 'skins' and 
+	// 'llplugin' need to go somewhere else.
+	// alas... this also gets called during static initialization 
+	// time due to the construction of gDirUtil in lldir.cpp.
+	if(! LLFile::isdir(mAppRODataDir + mDirDelimiter + "skins"))
 	{
-		// Running from installed directory.  Make sure current
-		// directory isn't something crazy (e.g. if invoking from
-		// command line).
-		SetCurrentDirectory(utf8str_to_utf16str(mExecutableDir).c_str());
-		GetCurrentDirectory(MAX_PATH, w_str);
-		mWorkingDir = utf16str_to_utf8str(llutf16string(w_str));
+		// What? No skins in the working dir?
+		// Try the executable's directory.
+		mAppRODataDir = mExecutableDir;
 	}
-	mAppRODataDir = mWorkingDir;	
 
 	llinfos << "mAppRODataDir = " << mAppRODataDir << llendl;
 
@@ -249,7 +253,7 @@ BOOL LLDir_Win32::getNextFileInDir(const std::string &dirname, const std::string
 	if (pathname != mCurrentDir)
 	{
 		// different dir specified, close old search
-		if (mCurrentDir[0])
+		if (!mCurrentDir.empty())
 		{
 			FindClose(mDirSearch_h);
 		}
diff --git a/indra/llvfs/lldiriterator.cpp b/indra/llvfs/lldiriterator.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5536ed8f69a97c49721cf0242d8a97bf5d89ad1f
--- /dev/null
+++ b/indra/llvfs/lldiriterator.cpp
@@ -0,0 +1,203 @@
+/**
+ * @file lldiriterator.cpp
+ * @brief Iterator through directory entries matching the search pattern.
+ *
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "lldiriterator.h"
+
+#include <boost/filesystem.hpp>
+#include <boost/regex.hpp>
+
+namespace fs = boost::filesystem;
+
+static std::string glob_to_regex(const std::string& glob);
+
+class LLDirIterator::Impl
+{
+public:
+	Impl(const std::string &dirname, const std::string &mask);
+	~Impl();
+
+	bool next(std::string &fname);
+
+private:
+	boost::regex			mFilterExp;
+	fs::directory_iterator	mIter;
+	bool					mIsValid;
+};
+
+LLDirIterator::Impl::Impl(const std::string &dirname, const std::string &mask)
+	: mIsValid(false)
+{
+	fs::path dir_path(dirname);
+
+	// Check if path exists.
+	if (!fs::exists(dir_path))
+	{
+		llerrs << "Invalid path: \"" << dir_path.string() << "\"" << llendl;
+		return;
+	}
+
+	// Initialize the directory iterator for the given path.
+	try
+	{
+		mIter = fs::directory_iterator(dir_path);
+	}
+	catch (fs::basic_filesystem_error<fs::path>& e)
+	{
+		llerrs << e.what() << llendl;
+		return;
+	}
+
+	// Convert the glob mask to a regular expression
+	std::string exp = glob_to_regex(mask);
+
+	// Initialize boost::regex with the expression converted from
+	// the glob mask.
+	// An exception is thrown if the expression is not valid.
+	try
+	{
+		mFilterExp.assign(exp);
+	}
+	catch (boost::regex_error& e)
+	{
+		llerrs << "\"" << exp << "\" is not a valid regular expression: "
+				<< e.what() << llendl;
+		return;
+	}
+
+	mIsValid = true;
+}
+
+LLDirIterator::Impl::~Impl()
+{
+}
+
+bool LLDirIterator::Impl::next(std::string &fname)
+{
+	fname = "";
+
+	if (!mIsValid)
+	{
+		llerrs << "The iterator is not correctly initialized." << llendl;
+		return false;
+	}
+
+	fs::directory_iterator end_itr; // default construction yields past-the-end
+	bool found = false;
+	while (mIter != end_itr && !found)
+	{
+		boost::smatch match;
+		std::string name = mIter->path().filename();
+		if (found = boost::regex_match(name, match, mFilterExp))
+		{
+			fname = name;
+		}
+
+		++mIter;
+	}
+
+	return found;
+}
+
+std::string glob_to_regex(const std::string& glob)
+{
+	std::string regex;
+	regex.reserve(glob.size()<<1);
+	S32 braces = 0;
+	bool escaped = false;
+	bool square_brace_open = false;
+
+	for (std::string::const_iterator i = glob.begin(); i != glob.end(); ++i)
+	{
+		char c = *i;
+
+		switch (c)
+		{
+			case '.':
+				regex+="\\.";
+				break;
+			case '*':
+				if (glob.begin() == i)
+				{
+					regex+="[^.].*";
+				}
+				else
+				{
+					regex+= escaped ? "*" : ".*";
+				}
+				break;
+			case '?':
+				regex+= escaped ? '?' : '.';
+				break;
+			case '{':
+				braces++;
+				regex+='(';
+				break;
+			case '}':
+				if (!braces)
+				{
+					llerrs << "glob_to_regex: Closing brace without an equivalent opening brace: " << glob << llendl;
+				}
+
+				regex+=')';
+				braces--;
+				break;
+			case ',':
+				regex+= braces ? '|' : c;
+				break;
+			case '!':
+				regex+= square_brace_open ? '^' : c;
+				break;
+			default:
+				regex+=c;
+				break;
+		}
+
+		escaped = ('\\' == c);
+		square_brace_open = ('[' == c);
+	}
+
+	if (braces)
+	{
+		llerrs << "glob_to_regex: Unterminated brace expression: " << glob << llendl;
+	}
+
+	return regex;
+}
+
+LLDirIterator::LLDirIterator(const std::string &dirname, const std::string &mask)
+{
+	mImpl = new Impl(dirname, mask);
+}
+
+LLDirIterator::~LLDirIterator()
+{
+	delete mImpl;
+}
+
+bool LLDirIterator::next(std::string &fname)
+{
+	return mImpl->next(fname);
+}
diff --git a/indra/llvfs/lldiriterator.h b/indra/llvfs/lldiriterator.h
new file mode 100644
index 0000000000000000000000000000000000000000..0b48be41b321c71935957773ea5a43494c9d5959
--- /dev/null
+++ b/indra/llvfs/lldiriterator.h
@@ -0,0 +1,87 @@
+/**
+ * @file lldiriterator.h
+ * @brief Iterator through directory entries matching the search pattern.
+ *
+ * $LicenseInfo:firstyear=2010&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLDIRITERATOR_H
+#define LL_LLDIRITERATOR_H
+
+#include "linden_common.h"
+
+/**
+ * Class LLDirIterator
+ *
+ * Iterates through directory entries matching the search pattern.
+ */
+class LLDirIterator
+{
+public:
+	/**
+	 * Constructs LLDirIterator object to search for glob pattern
+	 * matches in a directory.
+	 *
+	 * @param dirname - name of a directory to search in.
+	 * @param mask - search pattern, a glob expression
+	 *
+	 * Wildcards supported in glob expressions:
+	 * --------------------------------------------------------------
+	 * | Wildcard 	| Matches										|
+	 * --------------------------------------------------------------
+	 * | 	* 		|zero or more characters						|
+	 * | 	?		|exactly one character							|
+	 * | [abcde]	|exactly one character listed					|
+	 * | [a-e]		|exactly one character in the given range		|
+	 * | [!abcde]	|any character that is not listed				|
+	 * | [!a-e]		|any character that is not in the given range	|
+	 * | {abc,xyz}	|exactly one entire word in the options given	|
+	 * --------------------------------------------------------------
+	 */
+	LLDirIterator(const std::string &dirname, const std::string &mask);
+
+	~LLDirIterator();
+
+	/**
+	 * Searches for the next directory entry matching the glob mask
+	 * specified upon iterator construction.
+	 * Returns true if a match is found, sets fname
+	 * parameter to the name of the matched directory entry and
+	 * increments the iterator position.
+	 *
+	 * Typical usage:
+	 * <code>
+	 * LLDirIterator iter(directory, pattern);
+	 * if ( iter.next(scanResult) )
+	 * </code>
+	 *
+	 * @param fname - name of the matched directory entry.
+	 * @return true if a match is found, false otherwise.
+	 */
+	bool next(std::string &fname);
+
+protected:
+	class Impl;
+	Impl* mImpl;
+};
+
+#endif //LL_LLDIRITERATOR_H
diff --git a/indra/llwindow/CMakeLists.txt b/indra/llwindow/CMakeLists.txt
index 4d2677fd91f062a2ea049ceefe7f22bb43c2ba45..3d89867bc1d626dce8a183047a687b295e7cbd07 100644
--- a/indra/llwindow/CMakeLists.txt
+++ b/indra/llwindow/CMakeLists.txt
@@ -30,20 +30,25 @@ include_directories(
     ${LLVFS_INCLUDE_DIRS}
     ${LLWINDOW_INCLUDE_DIRS}
     ${LLXML_INCLUDE_DIRS}
+    ${DIRECTX_INCLUDE_DIR}
     )
 
 set(llwindow_SOURCE_FILES
     llkeyboard.cpp
+    llkeyboardheadless.cpp
     llwindowheadless.cpp
     llwindowcallbacks.cpp
+    llwindowlistener.cpp
     )
 
 set(llwindow_HEADER_FILES
     CMakeLists.txt
 
     llkeyboard.h
+    llkeyboardheadless.h
     llwindowheadless.h
     llwindowcallbacks.h
+    llwindowlistener.h
     )
 
 set(viewer_SOURCE_FILES
diff --git a/indra/llwindow/llkeyboardheadless.cpp b/indra/llwindow/llkeyboardheadless.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4dfaaed4e184f4fcb058a3158ef5c69ec876e6be
--- /dev/null
+++ b/indra/llwindow/llkeyboardheadless.cpp
@@ -0,0 +1,50 @@
+/** 
+ * @file llkeyboardheadless.cpp
+ * @brief Handler for assignable key bindings
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+#include "llkeyboardheadless.h"
+#include "llwindowcallbacks.h"
+
+LLKeyboardHeadless::LLKeyboardHeadless()
+{ }
+
+void LLKeyboardHeadless::resetMaskKeys()
+{ }
+
+
+BOOL LLKeyboardHeadless::handleKeyDown(const U16 key, const U32 mask)
+{ return FALSE; }
+
+
+BOOL LLKeyboardHeadless::handleKeyUp(const U16 key, const U32 mask)
+{ return FALSE; }
+
+MASK LLKeyboardHeadless::currentMask(BOOL for_mouse_event)
+{ return MASK_NONE; }
+
+void LLKeyboardHeadless::scanKeyboard()
+{ } 
+ 
diff --git a/indra/llwindow/llkeyboardheadless.h b/indra/llwindow/llkeyboardheadless.h
new file mode 100644
index 0000000000000000000000000000000000000000..4e666f8ce8b541f0c0464773936ad3d194927987
--- /dev/null
+++ b/indra/llwindow/llkeyboardheadless.h
@@ -0,0 +1,45 @@
+/** 
+ * @file llkeyboardheadless.h
+ * @brief Handler for assignable key bindings
+ *
+ * $LicenseInfo:firstyear=2004&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLKEYBOARDHEADLESS_H
+#define LL_LLKEYBOARDHEADLESS_H
+
+#include "llkeyboard.h"
+
+class LLKeyboardHeadless : public LLKeyboard
+{
+public:
+	LLKeyboardHeadless();
+	/*virtual*/ ~LLKeyboardHeadless() {};
+
+	/*virtual*/ BOOL	handleKeyUp(const U16 key, MASK mask);
+	/*virtual*/ BOOL	handleKeyDown(const U16 key, MASK mask);
+	/*virtual*/ void	resetMaskKeys();
+	/*virtual*/ MASK	currentMask(BOOL for_mouse_event);
+	/*virtual*/ void	scanKeyboard();
+};
+
+#endif
diff --git a/indra/llwindow/llwindow.cpp b/indra/llwindow/llwindow.cpp
index 072f694c2465a4e4c0f2cee3ea66487c1a488825..71a5df910dabf4e1f7c2b5db32d23741f5f5e78b 100644
--- a/indra/llwindow/llwindow.cpp
+++ b/indra/llwindow/llwindow.cpp
@@ -41,6 +41,8 @@
 #include "llkeyboard.h"
 #include "linked_lists.h"
 #include "llwindowcallbacks.h"
+#include "llwindowlistener.h"
+#include <boost/lambda/core.hpp>
 
 
 //
@@ -115,10 +117,19 @@ LLWindow::LLWindow(LLWindowCallbacks* callbacks, BOOL fullscreen, U32 flags)
 	  mHideCursorPermanent(FALSE),
 	  mFlags(flags),
 	  mHighSurrogate(0)
-{ }
+{
+	// gKeyboard is still NULL, so it doesn't do LLWindowListener any good to
+	// pass its value right now. Instead, pass it a nullary function that
+	// will, when we later need it, return the value of gKeyboard.
+	// boost::lambda::var() constructs such a functor on the fly.
+	mListener = new LLWindowListener(callbacks, boost::lambda::var(gKeyboard));
+}
 
 LLWindow::~LLWindow()
-{ }
+{
+	delete mListener;
+	mListener = NULL;
+}
 
 //virtual
 BOOL LLWindow::isValid()
diff --git a/indra/llwindow/llwindow.h b/indra/llwindow/llwindow.h
index e8a86a188072c90f6563f47681d266a4e9eea196..6bdc01ae88fcd0fa45af3fd804635b7965c54527 100644
--- a/indra/llwindow/llwindow.h
+++ b/indra/llwindow/llwindow.h
@@ -36,6 +36,7 @@
 class LLSplashScreen;
 class LLPreeditor;
 class LLWindowCallbacks;
+class LLWindowListener;
 
 // Refer to llwindow_test in test/common/llwindow for usage example
 
@@ -188,6 +189,7 @@ class LLWindow
 	BOOL		mHideCursorPermanent;
 	U32			mFlags;
 	U16			mHighSurrogate;
+	LLWindowListener* mListener;
 
  	// Handle a UTF-16 encoding unit received from keyboard.
  	// Converting the series of UTF-16 encoding units to UTF-32 data,
diff --git a/indra/llwindow/llwindowheadless.cpp b/indra/llwindow/llwindowheadless.cpp
index 35398f1c099a628fb08b6528a711bebf899608bd..e6e6bc67ff0ee0bc9dbf13c0e22f19a2012f463c 100644
--- a/indra/llwindow/llwindowheadless.cpp
+++ b/indra/llwindow/llwindowheadless.cpp
@@ -28,6 +28,7 @@
 #include "indra_constants.h"
 
 #include "llwindowheadless.h"
+#include "llkeyboardheadless.h"
 
 //
 // LLWindowHeadless
@@ -37,6 +38,9 @@ LLWindowHeadless::LLWindowHeadless(LLWindowCallbacks* callbacks, const std::stri
 							 BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth)
 	: LLWindow(callbacks, fullscreen, flags)
 {
+	// Initialize a headless keyboard.
+	gKeyboard = new LLKeyboardHeadless();
+	gKeyboard->setCallbacks(callbacks);
 }
 
 
diff --git a/indra/llwindow/llwindowlistener.cpp b/indra/llwindow/llwindowlistener.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..91b99d83c6a2ebaa0191a0f4973be8c1705d1b18
--- /dev/null
+++ b/indra/llwindow/llwindowlistener.cpp
@@ -0,0 +1,307 @@
+/** 
+ * @file llwindowlistener.cpp
+ * @brief EventAPI interface for injecting input into LLWindow
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "llwindowlistener.h"
+
+#include "llcoord.h"
+#include "llkeyboard.h"
+#include "llwindowcallbacks.h"
+#include <map>
+
+LLWindowListener::LLWindowListener(LLWindowCallbacks *window, const KeyboardGetter& kbgetter)
+	: LLEventAPI("LLWindow", "Inject input events into the LLWindow instance"),
+	  mWindow(window),
+	  mKbGetter(kbgetter)
+{
+	std::string keySomething =
+		"Given [\"keysym\"], [\"keycode\"] or [\"char\"], inject the specified ";
+	std::string keyExplain =
+		"(integer keycode values, or keysym \"XXXX\" from any KEY_XXXX, in\n"
+		"http://hg.secondlife.com/viewer-development/src/tip/indra/llcommon/indra_constants.h )";
+	std::string mask =
+		"Specify optional [\"mask\"] as an array containing any of \"CONTROL\", \"ALT\",\n"
+		"\"SHIFT\" or \"MAC_CONTROL\"; the corresponding modifier bits will be combined\n"
+		"to form the mask used with the event.";
+
+	std::string mouseSomething =
+		"Given [\"button\"], [\"x\"] and [\"y\"], inject the given mouse ";
+	std::string mouseExplain =
+		"(button values \"LEFT\", \"MIDDLE\", \"RIGHT\")";
+
+	add("keyDown",
+		keySomething + "keypress event.\n" + keyExplain + '\n' + mask,
+		&LLWindowListener::keyDown);
+	add("keyUp",
+		keySomething + "key release event.\n" + keyExplain + '\n' + mask,
+		&LLWindowListener::keyUp);
+	add("mouseDown",
+		mouseSomething + "click event.\n" + mouseExplain + '\n' + mask,
+		&LLWindowListener::mouseDown);
+	add("mouseUp",
+		mouseSomething + "release event.\n" + mouseExplain + '\n' + mask,
+		&LLWindowListener::mouseUp);
+	add("mouseMove",
+		std::string("Given [\"x\"] and [\"y\"], inject the given mouse movement event.\n") +
+		mask,
+		&LLWindowListener::mouseMove);
+	add("mouseScroll",
+		"Given an integer number of [\"clicks\"], inject the given mouse scroll event.\n"
+		"(positive clicks moves downward through typical content)",
+		&LLWindowListener::mouseScroll);
+}
+
+template <typename MAPPED>
+class StringLookup
+{
+private:
+	std::string mDesc;
+	typedef std::map<std::string, MAPPED> Map;
+	Map mMap;
+
+public:
+	StringLookup(const std::string& desc): mDesc(desc) {}
+
+	MAPPED lookup(const typename Map::key_type& key) const
+	{
+		typename Map::const_iterator found = mMap.find(key);
+		if (found == mMap.end())
+		{
+			LL_WARNS("LLWindowListener") << "Unknown " << mDesc << " '" << key << "'" << LL_ENDL;
+			return MAPPED();
+		}
+		return found->second;
+	}
+
+protected:
+	void add(const typename Map::key_type& key, const typename Map::mapped_type& value)
+	{
+		mMap.insert(typename Map::value_type(key, value));
+	}
+};
+
+// for WhichKeysym. KeyProxy is like the typedef KEY, except that KeyProxy()
+// (default-constructed) is guaranteed to have the value KEY_NONE.
+class KeyProxy
+{
+public:
+	KeyProxy(KEY k): mKey(k) {}
+	KeyProxy(): mKey(KEY_NONE) {}
+	operator KEY() const { return mKey; }
+
+private:
+	KEY mKey;
+};
+
+struct WhichKeysym: public StringLookup<KeyProxy>
+{
+	WhichKeysym(): StringLookup<KeyProxy>("keysym")
+	{
+		add("RETURN",		KEY_RETURN);
+		add("LEFT",			KEY_LEFT);
+		add("RIGHT",		KEY_RIGHT);
+		add("UP",			KEY_UP);
+		add("DOWN",			KEY_DOWN);
+		add("ESCAPE",		KEY_ESCAPE);
+		add("BACKSPACE",	KEY_BACKSPACE);
+		add("DELETE",		KEY_DELETE);
+		add("SHIFT",		KEY_SHIFT);
+		add("CONTROL",		KEY_CONTROL);
+		add("ALT",			KEY_ALT);
+		add("HOME",			KEY_HOME);
+		add("END",			KEY_END);
+		add("PAGE_UP",		KEY_PAGE_UP);
+		add("PAGE_DOWN",	KEY_PAGE_DOWN);
+		add("HYPHEN",		KEY_HYPHEN);
+		add("EQUALS",		KEY_EQUALS);
+		add("INSERT",		KEY_INSERT);
+		add("CAPSLOCK",		KEY_CAPSLOCK);
+		add("TAB",			KEY_TAB);
+		add("ADD",			KEY_ADD);
+		add("SUBTRACT",		KEY_SUBTRACT);
+		add("MULTIPLY",		KEY_MULTIPLY);
+		add("DIVIDE",		KEY_DIVIDE);
+		add("F1",			KEY_F1);
+		add("F2",			KEY_F2);
+		add("F3",			KEY_F3);
+		add("F4",			KEY_F4);
+		add("F5",			KEY_F5);
+		add("F6",			KEY_F6);
+		add("F7",			KEY_F7);
+		add("F8",			KEY_F8);
+		add("F9",			KEY_F9);
+		add("F10",			KEY_F10);
+		add("F11",			KEY_F11);
+		add("F12",			KEY_F12);
+
+		add("PAD_UP",		KEY_PAD_UP);
+		add("PAD_DOWN",		KEY_PAD_DOWN);
+		add("PAD_LEFT",		KEY_PAD_LEFT);
+		add("PAD_RIGHT",	KEY_PAD_RIGHT);
+		add("PAD_HOME",		KEY_PAD_HOME);
+		add("PAD_END",		KEY_PAD_END);
+		add("PAD_PGUP",		KEY_PAD_PGUP);
+		add("PAD_PGDN",		KEY_PAD_PGDN);
+		add("PAD_CENTER",	KEY_PAD_CENTER); // the 5 in the middle
+		add("PAD_INS",		KEY_PAD_INS);
+		add("PAD_DEL",		KEY_PAD_DEL);
+		add("PAD_RETURN",	KEY_PAD_RETURN);
+		add("PAD_ADD",		KEY_PAD_ADD); // not used
+		add("PAD_SUBTRACT", KEY_PAD_SUBTRACT); // not used
+		add("PAD_MULTIPLY", KEY_PAD_MULTIPLY); // not used
+		add("PAD_DIVIDE",	KEY_PAD_DIVIDE); // not used
+
+		add("BUTTON0",		KEY_BUTTON0);
+		add("BUTTON1",		KEY_BUTTON1);
+		add("BUTTON2",		KEY_BUTTON2);
+		add("BUTTON3",		KEY_BUTTON3);
+		add("BUTTON4",		KEY_BUTTON4);
+		add("BUTTON5",		KEY_BUTTON5);
+		add("BUTTON6",		KEY_BUTTON6);
+		add("BUTTON7",		KEY_BUTTON7);
+		add("BUTTON8",		KEY_BUTTON8);
+		add("BUTTON9",		KEY_BUTTON9);
+		add("BUTTON10",		KEY_BUTTON10);
+		add("BUTTON11",		KEY_BUTTON11);
+		add("BUTTON12",		KEY_BUTTON12);
+		add("BUTTON13",		KEY_BUTTON13);
+		add("BUTTON14",		KEY_BUTTON14);
+		add("BUTTON15",		KEY_BUTTON15);
+	}
+};
+static WhichKeysym keysyms;
+
+struct WhichMask: public StringLookup<MASK>
+{
+	WhichMask(): StringLookup<MASK>("shift mask")
+	{
+		add("NONE",			MASK_NONE);
+		add("CONTROL",		MASK_CONTROL); // Mapped to cmd on Macs
+		add("ALT",			MASK_ALT);
+		add("SHIFT",		MASK_SHIFT);
+		add("MAC_CONTROL",	MASK_MAC_CONTROL); // Un-mapped Ctrl key on Macs, not used on Windows
+	}
+};
+static WhichMask masks;
+
+static MASK getMask(const LLSD& event)
+{
+	MASK mask(MASK_NONE);
+	LLSD masknames(event["mask"]);
+	for (LLSD::array_const_iterator ai(masknames.beginArray()), aend(masknames.endArray());
+		 ai != aend; ++ai)
+	{
+		mask |= masks.lookup(*ai);
+	}
+	return mask;
+}
+
+static KEY getKEY(const LLSD& event)
+{
+    if (event.has("keysym"))
+	{
+		return keysyms.lookup(event["keysym"]);
+	}
+	else if (event.has("keycode"))
+	{
+		return KEY(event["keycode"].asInteger());
+	}
+	else
+	{
+		return KEY(event["char"].asString()[0]);
+	}
+}
+
+void LLWindowListener::keyDown(LLSD const & evt)
+{
+	mKbGetter()->handleTranslatedKeyDown(getKEY(evt), getMask(evt));
+}
+
+void LLWindowListener::keyUp(LLSD const & evt)
+{
+	mKbGetter()->handleTranslatedKeyUp(getKEY(evt), getMask(evt));
+}
+
+// for WhichButton
+typedef BOOL (LLWindowCallbacks::*MouseFunc)(LLWindow *, LLCoordGL, MASK);
+struct Actions
+{
+	Actions(const MouseFunc& d, const MouseFunc& u): down(d), up(u), valid(true) {}
+	Actions(): valid(false) {}
+	MouseFunc down, up;
+	bool valid;
+};
+
+struct WhichButton: public StringLookup<Actions>
+{
+	WhichButton(): StringLookup<Actions>("mouse button")
+	{
+		add("LEFT",		Actions(&LLWindowCallbacks::handleMouseDown,
+								&LLWindowCallbacks::handleMouseUp));
+		add("RIGHT",	Actions(&LLWindowCallbacks::handleRightMouseDown,
+								&LLWindowCallbacks::handleRightMouseUp));
+		add("MIDDLE",	Actions(&LLWindowCallbacks::handleMiddleMouseDown,
+								&LLWindowCallbacks::handleMiddleMouseUp));
+	}
+};
+static WhichButton buttons;
+
+static LLCoordGL getPos(const LLSD& event)
+{
+	return LLCoordGL(event["x"].asInteger(), event["y"].asInteger());
+}
+
+void LLWindowListener::mouseDown(LLSD const & evt)
+{
+	Actions actions(buttons.lookup(evt["button"]));
+	if (actions.valid)
+	{
+		(mWindow->*(actions.down))(NULL, getPos(evt), getMask(evt));
+	}
+}
+
+void LLWindowListener::mouseUp(LLSD const & evt)
+{
+	Actions actions(buttons.lookup(evt["button"]));
+	if (actions.valid)
+	{
+		(mWindow->*(actions.up))(NULL, getPos(evt), getMask(evt));
+	}
+}
+
+void LLWindowListener::mouseMove(LLSD const & evt)
+{
+	mWindow->handleMouseMove(NULL, getPos(evt), getMask(evt));
+}
+
+void LLWindowListener::mouseScroll(LLSD const & evt)
+{
+	S32 clicks = evt["clicks"].asInteger();
+
+	mWindow->handleScrollWheel(NULL, clicks);
+}
+
diff --git a/indra/llwindow/llwindowlistener.h b/indra/llwindow/llwindowlistener.h
new file mode 100644
index 0000000000000000000000000000000000000000..74e577ff93a5ac3145108b91cced5707dce9c2e5
--- /dev/null
+++ b/indra/llwindow/llwindowlistener.h
@@ -0,0 +1,55 @@
+/** 
+ * @file llwindowlistener.h
+ * @brief EventAPI interface for injecting input into LLWindow
+ *
+ * $LicenseInfo:firstyear=2001&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLWINDOWLISTENER_H
+#define LL_LLWINDOWLISTENER_H
+
+#include "lleventapi.h"
+#include <boost/function.hpp>
+
+class LLKeyboard;
+class LLWindowCallbacks;
+
+class LLWindowListener : public LLEventAPI
+{
+public:
+	typedef boost::function<LLKeyboard*()> KeyboardGetter;
+	LLWindowListener(LLWindowCallbacks * window, const KeyboardGetter& kbgetter);
+
+	void keyDown(LLSD const & evt);
+	void keyUp(LLSD const & evt);
+	void mouseDown(LLSD const & evt);
+	void mouseUp(LLSD const & evt);
+	void mouseMove(LLSD const & evt);
+	void mouseScroll(LLSD const & evt);
+
+private:
+	LLWindowCallbacks * mWindow;
+	KeyboardGetter mKbGetter;
+};
+
+
+#endif // LL_LLWINDOWLISTENER_H
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
index ab089081e6f147313b6022ab74662dcc20c1472b..551d487cc8727ad1399d64db2632a357635bc006 100644
--- a/indra/llwindow/llwindowwin32.cpp
+++ b/indra/llwindow/llwindowwin32.cpp
@@ -500,6 +500,8 @@ LLWindowWin32::LLWindowWin32(LLWindowCallbacks* callbacks,
 	//-----------------------------------------------------------------------
 
 	DEVMODE dev_mode;
+	::ZeroMemory(&dev_mode, sizeof(DEVMODE));
+	dev_mode.dmSize = sizeof(DEVMODE);
 	DWORD current_refresh;
 	if (EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dev_mode))
 	{
@@ -878,6 +880,8 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO
 {
 	GLuint	pixel_format;
 	DEVMODE dev_mode;
+	::ZeroMemory(&dev_mode, sizeof(DEVMODE));
+	dev_mode.dmSize = sizeof(DEVMODE);
 	DWORD	current_refresh;
 	DWORD	dw_ex_style;
 	DWORD	dw_style;
@@ -2711,6 +2715,8 @@ LLWindow::LLWindowResolution* LLWindowWin32::getSupportedResolutions(S32 &num_re
 	{
 		mSupportedResolutions = new LLWindowResolution[MAX_NUM_RESOLUTIONS];
 		DEVMODE dev_mode;
+		::ZeroMemory(&dev_mode, sizeof(DEVMODE));
+		dev_mode.dmSize = sizeof(DEVMODE);
 
 		mNumSupportedResolutions = 0;
 		for (S32 mode_num = 0; mNumSupportedResolutions < MAX_NUM_RESOLUTIONS; mode_num++)
@@ -2786,7 +2792,8 @@ F32 LLWindowWin32::getPixelAspectRatio()
 BOOL LLWindowWin32::setDisplayResolution(S32 width, S32 height, S32 bits, S32 refresh)
 {
 	DEVMODE dev_mode;
-	dev_mode.dmSize = sizeof(dev_mode);
+	::ZeroMemory(&dev_mode, sizeof(DEVMODE));
+	dev_mode.dmSize = sizeof(DEVMODE);
 	BOOL success = FALSE;
 
 	// Don't change anything if we don't have to
diff --git a/indra/llxml/llcontrol.cpp b/indra/llxml/llcontrol.cpp
index 6c726091223fed987392652a96ea24849ee74aac..6e4364a20d294d27db4c4b84d8490fe7b2acd891 100644
--- a/indra/llxml/llcontrol.cpp
+++ b/indra/llxml/llcontrol.cpp
@@ -835,7 +835,7 @@ U32 LLControlGroup::saveToFile(const std::string& filename, BOOL nondefault_only
 	return num_saved;
 }
 
-U32 LLControlGroup::loadFromFile(const std::string& filename, bool set_default_values)
+U32 LLControlGroup::loadFromFile(const std::string& filename, bool set_default_values, bool save_values)
 {
 	std::string name;
 	LLSD settings;
@@ -908,8 +908,7 @@ U32 LLControlGroup::loadFromFile(const std::string& filename, bool set_default_v
 			}
 			else if(existing_control->isPersisted())
 			{
-				
-				existing_control->setValue(control_map["Value"]);
+				existing_control->setValue(control_map["Value"], save_values);
 			}
 			// *NOTE: If not persisted and not setting defaults, 
 			// the value should not get loaded.
diff --git a/indra/llxml/llcontrol.h b/indra/llxml/llcontrol.h
index 93975579ccd5a9095dd4a3291fd0d5c9333094ee..e402061e1f55902c0798bca0121f141778e0dc3d 100644
--- a/indra/llxml/llcontrol.h
+++ b/indra/llxml/llcontrol.h
@@ -289,7 +289,7 @@ class LLControlGroup : public LLInstanceTracker<LLControlGroup, std::string>
 	// as the given type.
 	U32	loadFromFileLegacy(const std::string& filename, BOOL require_declaration = TRUE, eControlType declare_as = TYPE_STRING);
  	U32 saveToFile(const std::string& filename, BOOL nondefault_only);
- 	U32	loadFromFile(const std::string& filename, bool default_values = false);
+ 	U32	loadFromFile(const std::string& filename, bool default_values = false, bool save_values = true);
 	void	resetToDefaults();
 };
 
diff --git a/indra/llxml/llxmlnode.cpp b/indra/llxml/llxmlnode.cpp
index 8168f968cdc2480d3479d61d5dcc1eab0c39f25e..9f1e249ddda37f0f9a6d40d53f3d4857061951d3 100644
--- a/indra/llxml/llxmlnode.cpp
+++ b/indra/llxml/llxmlnode.cpp
@@ -859,23 +859,21 @@ BOOL LLXMLNode::isFullyDefault()
 }
 
 // static
-bool LLXMLNode::getLayeredXMLNode(const std::string &xui_filename, LLXMLNodePtr& root,
+bool LLXMLNode::getLayeredXMLNode(LLXMLNodePtr& root,
 								  const std::vector<std::string>& paths)
 {
-	std::string full_filename = gDirUtilp->findSkinnedFilename(paths.front(), xui_filename);
-	if (full_filename.empty())
+	if (paths.empty()) return false;
+
+	std::string filename = paths.front();
+	if (filename.empty())
 	{
 		return false;
 	}
-
-	if (!LLXMLNode::parseFile(full_filename, root, NULL))
+	
+	if (!LLXMLNode::parseFile(filename, root, NULL))
 	{
-		// try filename as passed in since sometimes we load an xml file from a user-supplied path
-		if (!LLXMLNode::parseFile(xui_filename, root, NULL))
-		{
-			llwarns << "Problem reading UI description file: " << xui_filename << llendl;
-			return false;
-		}
+		llwarns << "Problem reading UI description file: " << filename << llendl;
+		return false;
 	}
 
 	LLXMLNodePtr updateRoot;
@@ -887,7 +885,7 @@ bool LLXMLNode::getLayeredXMLNode(const std::string &xui_filename, LLXMLNodePtr&
 		std::string nodeName;
 		std::string updateName;
 
-		std::string layer_filename = gDirUtilp->findSkinnedFilename((*itor), xui_filename);
+		std::string layer_filename = *itor;
 		if(layer_filename.empty())
 		{
 			// no localized version of this file, that's ok, keep looking
@@ -896,7 +894,7 @@ bool LLXMLNode::getLayeredXMLNode(const std::string &xui_filename, LLXMLNodePtr&
 
 		if (!LLXMLNode::parseFile(layer_filename, updateRoot, NULL))
 		{
-			llwarns << "Problem reading localized UI description file: " << (*itor) + gDirUtilp->getDirDelimiter() + xui_filename << llendl;
+			llwarns << "Problem reading localized UI description file: " << layer_filename << llendl;
 			return false;
 		}
 
diff --git a/indra/llxml/llxmlnode.h b/indra/llxml/llxmlnode.h
index 9df37ccb6f207200f7d310e068670533ffcae484..e3da7169e7e7e99c7463e7387095cfd6b34c20aa 100644
--- a/indra/llxml/llxmlnode.h
+++ b/indra/llxml/llxmlnode.h
@@ -149,8 +149,7 @@ class LLXMLNode : public LLThreadSafeRefCount
 		LLXMLNodePtr& update_node);
 	static LLXMLNodePtr replaceNode(LLXMLNodePtr node, LLXMLNodePtr replacement_node);
 	
-	static bool getLayeredXMLNode(const std::string &xui_filename, LLXMLNodePtr& root,
-								  const std::vector<std::string>& paths);
+	static bool getLayeredXMLNode(LLXMLNodePtr& root, const std::vector<std::string>& paths);
 	
 	
 	// Write standard XML file header:
diff --git a/indra/llxuixml/llinitparam.cpp b/indra/llxuixml/llinitparam.cpp
index fcdbaa430973d93b62eda9283ee7f99f835c4246..3c4eb70a5d985836d336ecc8d05184c4c84f2ab1 100644
--- a/indra/llxuixml/llinitparam.cpp
+++ b/indra/llxuixml/llinitparam.cpp
@@ -43,9 +43,52 @@ namespace LLInitParam
 		mEnclosingBlockOffset = (U16)(my_addr - block_addr);
 	}
 
+	//
+	// ParamDescriptor
+	//
+	ParamDescriptor::ParamDescriptor(param_handle_t p, 
+									merge_func_t merge_func, 
+									deserialize_func_t deserialize_func, 
+									serialize_func_t serialize_func,
+									validation_func_t validation_func,
+									inspect_func_t inspect_func,
+									S32 min_count,
+									S32 max_count)
+	:	mParamHandle(p),
+		mMergeFunc(merge_func),
+		mDeserializeFunc(deserialize_func),
+		mSerializeFunc(serialize_func),
+		mValidationFunc(validation_func),
+		mInspectFunc(inspect_func),
+		mMinCount(min_count),
+		mMaxCount(max_count),
+		mGeneration(0),
+		mUserData(NULL)
+	{}
+
+	ParamDescriptor::ParamDescriptor()
+	:	mParamHandle(0),
+		mMergeFunc(NULL),
+		mDeserializeFunc(NULL),
+		mSerializeFunc(NULL),
+		mValidationFunc(NULL),
+		mInspectFunc(NULL),
+		mMinCount(0),
+		mMaxCount(0),
+		mGeneration(0),
+		mUserData(NULL)
+	{}
+
+	ParamDescriptor::~ParamDescriptor()
+	{
+		delete mUserData;
+	}
+
 	//
 	// Parser
 	//
+	S32 Parser::sNextParseGeneration = 0;
+
 	Parser::~Parser()
 	{}
 
@@ -73,6 +116,12 @@ namespace LLInitParam
 		std::copy(src_block_data.mAllParams.begin(), src_block_data.mAllParams.end(), std::back_inserter(mAllParams));
 	}
 
+	BlockDescriptor::BlockDescriptor()
+	:	mMaxParamOffset(0),
+		mInitializationState(UNINITIALIZED),
+		mCurrentBlockPtr(NULL)
+	{}
+
 	//
 	// BaseBlock
 	//
@@ -115,7 +164,7 @@ namespace LLInitParam
 
 	bool BaseBlock::submitValue(const Parser::name_stack_t& name_stack, Parser& p, bool silent)
 	{
-		if (!deserializeBlock(p, std::make_pair(name_stack.begin(), name_stack.end())))
+		if (!deserializeBlock(p, std::make_pair(name_stack.begin(), name_stack.end()), -1))
 		{
 			if (!silent)
 			{
@@ -145,7 +194,7 @@ namespace LLInitParam
 		return true;
 	}
 
-	bool BaseBlock::serializeBlock(Parser& parser, Parser::name_stack_t name_stack, const LLInitParam::BaseBlock* diff_block) const
+	void BaseBlock::serializeBlock(Parser& parser, Parser::name_stack_t name_stack, const LLInitParam::BaseBlock* diff_block) const
 	{
 		// named param is one like LLView::Params::follows
 		// unnamed param is like LLView::Params::rect - implicit
@@ -212,11 +261,9 @@ namespace LLInitParam
 				name_stack.pop_back();
 			}
 		}
-
-		return true;
 	}
 
-	bool BaseBlock::inspectBlock(Parser& parser, Parser::name_stack_t name_stack) const
+	bool BaseBlock::inspectBlock(Parser& parser, Parser::name_stack_t name_stack, S32 min_count, S32 max_count) const
 	{
 		// named param is one like LLView::Params::follows
 		// unnamed param is like LLView::Params::rect - implicit
@@ -273,11 +320,13 @@ namespace LLInitParam
 		return true;
 	}
 
-	bool BaseBlock::deserializeBlock(Parser& p, Parser::name_stack_range_t name_stack)
+	bool BaseBlock::deserializeBlock(Parser& p, Parser::name_stack_range_t name_stack, S32 parent_generation)
 	{
 		BlockDescriptor& block_data = mostDerivedBlockDescriptor();
 		bool names_left = name_stack.first != name_stack.second;
 
+		S32 parse_generation = name_stack.first == name_stack.second ? -1 : name_stack.first->second;
+
 		if (names_left)
 		{
 			const std::string& top_name = name_stack.first->first;
@@ -294,7 +343,7 @@ namespace LLInitParam
 					
 				Parser::name_stack_range_t new_name_stack(name_stack.first, name_stack.second);
 				++new_name_stack.first;
-				return deserialize_func(*paramp, p, new_name_stack, name_stack.first == name_stack.second ? -1 : name_stack.first->second);
+				return deserialize_func(*paramp, p, new_name_stack, parse_generation);
 			}
 		}
 
@@ -306,7 +355,7 @@ namespace LLInitParam
 			Param* paramp = getParamFromHandle((*it)->mParamHandle);
 			ParamDescriptor::deserialize_func_t deserialize_func = (*it)->mDeserializeFunc;
 
-			if (deserialize_func && deserialize_func(*paramp, p, name_stack, name_stack.first == name_stack.second ? -1 : name_stack.first->second))
+			if (deserialize_func && deserialize_func(*paramp, p, name_stack, parse_generation))
 			{
 				return true;
 			}
@@ -324,32 +373,32 @@ namespace LLInitParam
 	}
 
 	//static 
-	void BaseBlock::addParam(BlockDescriptor& block_data, const ParamDescriptor& in_param, const char* char_name)
+	void BaseBlock::addParam(BlockDescriptor& block_data, const ParamDescriptorPtr in_param, const char* char_name)
 	{
 		// create a copy of the paramdescriptor in allparams
 		// so other data structures can store a pointer to it
 		block_data.mAllParams.push_back(in_param);
-		ParamDescriptor& param(block_data.mAllParams.back());
+		ParamDescriptorPtr param(block_data.mAllParams.back());
 
 		std::string name(char_name);
-		if ((size_t)param.mParamHandle > block_data.mMaxParamOffset)
+		if ((size_t)param->mParamHandle > block_data.mMaxParamOffset)
 		{
 			llerrs << "Attempted to register param with block defined for parent class, make sure to derive from LLInitParam::Block<YOUR_CLASS, PARAM_BLOCK_BASE_CLASS>" << llendl;
 		}
 
 		if (name.empty())
 		{
-			block_data.mUnnamedParams.push_back(&param);
+			block_data.mUnnamedParams.push_back(param);
 		}
 		else
 		{
 			// don't use insert, since we want to overwrite existing entries
-			block_data.mNamedParams[name] = &param;
+			block_data.mNamedParams[name] = param;
 		}
 
-		if (param.mValidationFunc)
+		if (param->mValidationFunc)
 		{
-			block_data.mValidationList.push_back(std::make_pair(param.mParamHandle, param.mValidationFunc));
+			block_data.mValidationList.push_back(std::make_pair(param->mParamHandle, param->mValidationFunc));
 		}
 	}
 
@@ -367,7 +416,7 @@ namespace LLInitParam
 				llerrs << "Attempted to register param with block defined for parent class, make sure to derive from LLInitParam::Block<YOUR_CLASS, PARAM_BLOCK_BASE_CLASS>" << llendl;
 			}
 
-			ParamDescriptor* param_descriptor = findParamDescriptor(handle);
+			ParamDescriptorPtr param_descriptor = findParamDescriptor(param);
 			if (param_descriptor)
 			{
 				if (synonym.empty())
@@ -382,7 +431,7 @@ namespace LLInitParam
 		}
 	}
 
-	void BaseBlock::setLastChangedParam(const Param& last_param, bool user_provided)
+	void BaseBlock::paramChanged(const Param& changed_param, bool user_provided)
 	{ 
 		if (user_provided)
 		{
@@ -404,17 +453,18 @@ namespace LLInitParam
 		return LLStringUtil::null;
 	}
 
-	ParamDescriptor* BaseBlock::findParamDescriptor(param_handle_t handle)
+	ParamDescriptorPtr BaseBlock::findParamDescriptor(const Param& param)
 	{
+		param_handle_t handle = getHandleFromParam(&param);
 		BlockDescriptor& descriptor = mostDerivedBlockDescriptor();
 		BlockDescriptor::all_params_list_t::iterator end_it = descriptor.mAllParams.end();
 		for (BlockDescriptor::all_params_list_t::iterator it = descriptor.mAllParams.begin();
 			it != end_it;
 			++it)
 		{
-			if (it->mParamHandle == handle) return &(*it);
+			if ((*it)->mParamHandle == handle) return *it;
 		}
-		return NULL;
+		return ParamDescriptorPtr();
 	}
 
 	// take all provided params from other and apply to self
@@ -427,19 +477,14 @@ namespace LLInitParam
 			it != end_it;
 			++it)
 		{
-			const Param* other_paramp = other.getParamFromHandle(it->mParamHandle);
-			ParamDescriptor::merge_func_t merge_func = it->mMergeFunc;
+			const Param* other_paramp = other.getParamFromHandle((*it)->mParamHandle);
+			ParamDescriptor::merge_func_t merge_func = (*it)->mMergeFunc;
 			if (merge_func)
 			{
-				Param* paramp = getParamFromHandle(it->mParamHandle);
+				Param* paramp = getParamFromHandle((*it)->mParamHandle);
 				some_param_changed |= merge_func(*paramp, *other_paramp, overwrite);
 			}
 		}
 		return some_param_changed;
 	}
-
-	bool ParamCompare<LLSD, false>::equals(const LLSD &a, const LLSD &b)
-	{
-		return false;
-	}
 }
diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h
index 1f9045754a9c8b32d698ff6dd6a57f33edbb5575..858f8405b458525c000ecf99ae30b87b816ded91 100644
--- a/indra/llxuixml/llinitparam.h
+++ b/indra/llxuixml/llinitparam.h
@@ -1,5 +1,5 @@
 /** 
-f * @file llinitparam.h
+ * @file llinitparam.h
  * @brief parameter block abstraction for creating complex objects and 
  * parsing construction parameters from xml and LLSD
  *
@@ -29,18 +29,14 @@ f * @file llinitparam.h
 #define LL_LLPARAM_H
 
 #include <vector>
-
-#include <stddef.h>
 #include <boost/function.hpp>
-#include <boost/bind.hpp>
 #include <boost/type_traits/is_convertible.hpp>
 #include <boost/unordered_map.hpp>
-#include "llregistry.h"
-#include "llmemory.h"
-
+#include <boost/shared_ptr.hpp>
 
 namespace LLInitParam
 {
+	template<typename T> const T& defaultValue() { static T value; return value; }
 
 	template <typename T, bool IS_BOOST_FUNCTION = boost::is_convertible<T, boost::function_base>::value >
     struct ParamCompare 
@@ -61,122 +57,119 @@ namespace LLInitParam
 		}
 	};
 
-	// default constructor adaptor for InitParam Values
-	// constructs default instances of the given type, returned by const reference
-	template <typename T>
-	struct DefaultInitializer
+	template<> 
+	struct ParamCompare<LLSD, false>
 	{
-		typedef const T&			T_const_ref;
-		// return reference to a single default instance of T
-		// built-in types will be initialized to zero, default constructor otherwise
-		static T_const_ref get() { static T t = T(); return t; } 
+		static bool equals(const LLSD &a, const LLSD &b) { return false; }
 	};
 
 	// helper functions and classes
 	typedef ptrdiff_t param_handle_t;
 
+	// empty default implementation of key cache
+	// leverages empty base class optimization
 	template <typename T>
 	class TypeValues
 	{
 	public:
-		// empty default implemenation of key cache
-		class KeyCache
+		typedef std::map<std::string, T> value_name_map_t;
+
+		void setValueName(const std::string& key) {}
+		std::string getValueName() const { return ""; }
+		void clearValueName() const {}
+
+		static bool getValueFromName(const std::string& name, T& value)
 		{
-		public:
-			void setKey(const std::string& key) {}
-			std::string getKey() const { return ""; }
-			void clearKey(){}
-		};
+			return false;
+		}
 
-		static bool get(const std::string& name, T& value)
+		static bool valueNamesExist()
 		{
 			return false;
 		}
 
-		static bool empty()
+		static std::vector<std::string>* getPossibleValues()
 		{
-			return true;
+			return NULL;
 		}
 
-		static std::vector<std::string>* getPossibleValues() { return NULL; }
+		static value_name_map_t* getValueNames() {return NULL;}
 	};
 
 	template <typename T, typename DERIVED_TYPE = TypeValues<T> >
 	class TypeValuesHelper
-	:	public LLRegistrySingleton<std::string, T, DERIVED_TYPE >
 	{
-		typedef LLRegistrySingleton<std::string, T, DERIVED_TYPE>	super_t;
-		typedef LLSingleton<DERIVED_TYPE>							singleton_t;
 	public:
+		typedef typename std::map<std::string, T> value_name_map_t;
 
 		//TODO: cache key by index to save on param block size
-		class KeyCache
+		void setValueName(const std::string& value_name) 
 		{
-		public:
-			void setKey(const std::string& key) 
-			{
-				mKey = key; 
-			}
-
-			void clearKey()
-			{
-				mKey = "";
-			}
+			mValueName = value_name; 
+		}
 
-			std::string getKey() const
-			{ 
-				return mKey; 
-			}
+		std::string getValueName() const
+		{ 
+			return mValueName; 
+		}
 
-		private:
-			std::string mKey;
-		};
+		void clearValueName() const
+		{
+			mValueName.clear();
+		}
 
-		static bool get(const std::string& name, T& value)
+		static bool getValueFromName(const std::string& name, T& value)
 		{
-			if (!singleton_t::instance().exists(name)) return false;
+			value_name_map_t* map = getValueNames();
+			typename value_name_map_t::iterator found_it = map->find(name);
+			if (found_it == map->end()) return false;
 
-			value = *singleton_t::instance().getValue(name);
+			value = found_it->second;
 			return true;
 		}
 
-		static bool empty()
+		static bool valueNamesExist()
 		{
-			return singleton_t::instance().LLRegistry<std::string, T>::empty();
+			return !getValueNames()->empty();
 		}
 	
-		//override this to add name value pairs
-		static void declareValues() {}
-	
-		void initSingleton()
+		static value_name_map_t* getValueNames()
 		{
-			DERIVED_TYPE::declareValues();
-		}
+			static value_name_map_t sMap;
+			static bool sInitialized = false;
 
-		static const std::vector<std::string>* getPossibleValues() 
-		{ 
-			// in order to return a pointer to a member, we lazily
-			// evaluate the result and store it in mValues here
-			if (singleton_t::instance().mValues.empty())
+			if (!sInitialized)
 			{
-				typename super_t::Registrar::registry_map_t::const_iterator it;
-				for (it = super_t::defaultRegistrar().beginItems(); it != super_t::defaultRegistrar().endItems(); ++it)
-				{
-					singleton_t::instance().mValues.push_back(it->first);
-				}
+				sInitialized = true;
+				DERIVED_TYPE::declareValues();
 			}
-			return &singleton_t::instance().mValues; 
+			return &sMap;
 		}
 
+		static std::vector<std::string>* getPossibleValues()
+		{
+			static std::vector<std::string> sValues;
+
+			value_name_map_t* map = getValueNames();
+			for (typename value_name_map_t::iterator it = map->begin(), end_it = map->end();
+				 it != end_it;
+				 ++it)
+			{
+				sValues.push_back(it->first);
+			}
+			return &sValues;
+		}
 
-	protected:
 		static void declare(const std::string& name, const T& value)
 		{
-			super_t::defaultRegistrar().add(name, value);
+			(*getValueNames())[name] = value;
 		}
 
-	private:
-		std::vector<std::string> mValues;
+	protected:
+		static void getName(const std::string& name, const T& value)
+		{}
+
+		mutable std::string	mValueName;
 	};
 
 	class Parser
@@ -193,9 +186,9 @@ namespace LLInitParam
 			}
 		};
 
-		typedef std::vector<std::pair<std::string, S32> >			name_stack_t;
+		typedef std::vector<std::pair<std::string, S32> >								name_stack_t;
 		typedef std::pair<name_stack_t::const_iterator, name_stack_t::const_iterator>	name_stack_range_t;
-		typedef std::vector<std::string>							possible_values_t;
+		typedef std::vector<std::string>												possible_values_t;
 
 		typedef bool (*parser_read_func_t)(Parser& parser, void* output);
 		typedef bool (*parser_write_func_t)(Parser& parser, const void*, const name_stack_t&);
@@ -207,7 +200,7 @@ namespace LLInitParam
 
 		Parser(parser_read_func_map_t& read_map, parser_write_func_map_t& write_map, parser_inspect_func_map_t& inspect_map)
 		:	mParseSilently(false),
-			mParseGeneration(0),
+			mParseGeneration(sNextParseGeneration),
 			mParserReadFuncs(&read_map),
 			mParserWriteFuncs(&write_map),
 			mParserInspectFuncs(&inspect_map)
@@ -252,7 +245,7 @@ namespace LLInitParam
 		void setParseSilently(bool silent) { mParseSilently = silent; }
 
 		S32 getParseGeneration() { return mParseGeneration; }
-		S32 newParseGeneration() { return ++mParseGeneration; }
+		S32 newParseGeneration() { return mParseGeneration = ++sNextParseGeneration; }
 
 
 	protected:
@@ -276,6 +269,8 @@ namespace LLInitParam
 		parser_write_func_map_t*	mParserWriteFuncs;
 		parser_inspect_func_map_t*	mParserInspectFuncs;
 		S32	mParseGeneration;
+
+		static S32					sNextParseGeneration;
 	};
 
 	// used to indicate no matching value to a given name when parsing
@@ -295,12 +290,13 @@ namespace LLInitParam
 		Param(class BaseBlock* enclosing_block);
 
 		// store pointer to enclosing block as offset to reduce space and allow for quick copying
-		BaseBlock& enclosingBlock() const
+		class BaseBlock& enclosingBlock() const
 		{ 
 			const U8* my_addr = reinterpret_cast<const U8*>(this);
 			// get address of enclosing BLOCK class using stored offset to enclosing BaseBlock class
-			return *const_cast<BaseBlock*>(
-							reinterpret_cast<const BaseBlock*>(my_addr - (ptrdiff_t)(S32)mEnclosingBlockOffset));
+			return *const_cast<class BaseBlock*>
+				(reinterpret_cast<const class BaseBlock*>
+					(my_addr - (ptrdiff_t)(S32)mEnclosingBlockOffset));
 		}
 
 	private:
@@ -313,7 +309,11 @@ namespace LLInitParam
 	// various callbacks and constraints associated with an individual param
 	struct ParamDescriptor
 	{
-	public:
+		struct UserData
+		{
+			virtual ~UserData() {}
+		};
+
 		typedef bool(*merge_func_t)(Param&, const Param&, bool);
 		typedef bool(*deserialize_func_t)(Param&, Parser&, const Parser::name_stack_range_t&, S32);
 		typedef void(*serialize_func_t)(const Param&, Parser&, Parser::name_stack_t&, const Param* diff_param);
@@ -321,40 +321,18 @@ namespace LLInitParam
 		typedef bool(*validation_func_t)(const Param*);
 
 		ParamDescriptor(param_handle_t p, 
-				merge_func_t merge_func, 
-				deserialize_func_t deserialize_func, 
-				serialize_func_t serialize_func,
-				validation_func_t validation_func,
-				inspect_func_t inspect_func,
-				S32 min_count,
-				S32 max_count)
-		:	mParamHandle(p),
-			mMergeFunc(merge_func),
-			mDeserializeFunc(deserialize_func),
-			mSerializeFunc(serialize_func),
-			mValidationFunc(validation_func),
-			mInspectFunc(inspect_func),
-			mMinCount(min_count),
-			mMaxCount(max_count),
-			mGeneration(0),
-			mNumRefs(0)
-		{}
+						merge_func_t merge_func, 
+						deserialize_func_t deserialize_func, 
+						serialize_func_t serialize_func,
+						validation_func_t validation_func,
+						inspect_func_t inspect_func,
+						S32 min_count,
+						S32 max_count);
 
-		ParamDescriptor()
-		:	mParamHandle(0),
-			mMergeFunc(NULL),
-			mDeserializeFunc(NULL),
-			mSerializeFunc(NULL),
-			mValidationFunc(NULL),
-			mInspectFunc(NULL),
-			mMinCount(0),
-			mMaxCount(0),
-			mGeneration(0),
-			mNumRefs(0)
-		{}
+		ParamDescriptor();
+		~ParamDescriptor();
 
 		param_handle_t		mParamHandle;
-	
 		merge_func_t		mMergeFunc;
 		deserialize_func_t	mDeserializeFunc;
 		serialize_func_t	mSerializeFunc;
@@ -364,17 +342,16 @@ namespace LLInitParam
 		S32					mMaxCount;
 		S32					mGeneration;
 		S32					mNumRefs;
+		UserData*			mUserData;
 	};
 
+	typedef boost::shared_ptr<ParamDescriptor> ParamDescriptorPtr;
+
 	// each derived Block class keeps a static data structure maintaining offsets to various params
 	class BlockDescriptor
 	{
 	public:
-		BlockDescriptor()
-		:	mMaxParamOffset(0),
-			mInitializationState(UNINITIALIZED),
-			mCurrentBlockPtr(NULL)
-		{}
+		BlockDescriptor();
 
 		typedef enum e_initialization_state
 		{
@@ -385,12 +362,10 @@ namespace LLInitParam
 
 		void aggregateBlockData(BlockDescriptor& src_block_data);
 
-	public:
-		typedef boost::unordered_map<const std::string, ParamDescriptor*> param_map_t; // references param descriptors stored in mAllParams
-		typedef std::vector<ParamDescriptor*> param_list_t; 
-
-		typedef std::list<ParamDescriptor> all_params_list_t;// references param descriptors stored in mAllParams
-		typedef std::vector<std::pair<param_handle_t, ParamDescriptor::validation_func_t> > param_validation_list_t;
+		typedef boost::unordered_map<const std::string, ParamDescriptorPtr>						param_map_t; 
+		typedef std::vector<ParamDescriptorPtr>													param_list_t; 
+		typedef std::list<ParamDescriptorPtr>														all_params_list_t;
+		typedef std::vector<std::pair<param_handle_t, ParamDescriptor::validation_func_t> >		param_validation_list_t;
 
 		param_map_t						mNamedParams;			// parameters with associated names
 		param_list_t					mUnnamedParams;			// parameters with_out_ associated names
@@ -456,6 +431,7 @@ namespace LLInitParam
 		Param* getParamFromHandle(const param_handle_t param_handle)
 		{
 			if (param_handle == 0) return NULL;
+
 			U8* baseblock_address = reinterpret_cast<U8*>(this);
 			return reinterpret_cast<Param*>(baseblock_address + param_handle);
 		}
@@ -469,14 +445,13 @@ namespace LLInitParam
 		void addSynonym(Param& param, const std::string& synonym);
 
 		// Blocks can override this to do custom tracking of changes
-		virtual void setLastChangedParam(const Param& last_param, bool user_provided);
+		virtual void paramChanged(const Param& changed_param, bool user_provided);
 
 		S32 getLastChangeVersion() const { return mChangeVersion; }
-		bool isDefault() const { return mChangeVersion == 0; }
 
-		bool deserializeBlock(Parser& p, Parser::name_stack_range_t name_stack);
-		bool serializeBlock(Parser& p, Parser::name_stack_t name_stack = Parser::name_stack_t(), const BaseBlock* diff_block = NULL) const;
-		bool inspectBlock(Parser& p, Parser::name_stack_t name_stack = Parser::name_stack_t()) const;
+		bool deserializeBlock(Parser& p, Parser::name_stack_range_t name_stack, S32 generation);
+		void serializeBlock(Parser& p, Parser::name_stack_t name_stack = Parser::name_stack_t(), const BaseBlock* diff_block = NULL) const;
+		bool inspectBlock(Parser& p, Parser::name_stack_t name_stack = Parser::name_stack_t(), S32 min_count = 0, S32 max_count = S32_MAX) const;
 
 		virtual const BlockDescriptor& mostDerivedBlockDescriptor() const { return selfBlockDescriptor(); }
 		virtual BlockDescriptor& mostDerivedBlockDescriptor() { return selfBlockDescriptor(); }
@@ -493,7 +468,10 @@ namespace LLInitParam
 			return false;
 		}
 
-		static void addParam(BlockDescriptor& block_data, const ParamDescriptor& param, const char* name);
+		static void addParam(BlockDescriptor& block_data, ParamDescriptorPtr param, const char* name);
+
+		ParamDescriptorPtr findParamDescriptor(const Param& param);
+
 	protected:
 		void init(BlockDescriptor& descriptor, BlockDescriptor& base_descriptor, size_t block_size);
 
@@ -512,63 +490,133 @@ namespace LLInitParam
 
 	private:
 		const std::string& getParamName(const BlockDescriptor& block_data, const Param* paramp) const;
-		ParamDescriptor* findParamDescriptor(param_handle_t handle);
-	};
-
-
-	template<typename T>
-	struct ParamIterator
-	{
-		typedef typename std::vector<T>::const_iterator		const_iterator;
-		typedef typename std::vector<T>::iterator			iterator;
 	};
 
 	// these templates allow us to distinguish between template parameters
 	// that derive from BaseBlock and those that don't
-	// this is supposedly faster than boost::is_convertible and its ilk
 	template<typename T, typename Void = void>
-	struct IsBaseBlock
+	struct IsBlock
 	{
 		static const bool value = false;
 	};
 
 	template<typename T>
-	struct IsBaseBlock<T, typename T::baseblock_base_class_t>
+	struct IsBlock<T, typename T::baseblock_base_class_t>
 	{
 		static const bool value = true;
 	};
 
+	template<typename T, typename NAME_VALUE_LOOKUP, bool VALUE_IS_BLOCK = IsBlock<T>::value>
+	class ParamValue : public NAME_VALUE_LOOKUP
+	{
+	public:
+		typedef const T&							value_assignment_t;
+
+		ParamValue(): mValue() {}
+		ParamValue(const T& other) : mValue(other) {}
+
+		void setValue(value_assignment_t val)
+		{
+			mValue = val;
+		}
+
+		value_assignment_t getValue() const
+		{
+			return mValue;
+		}
+
+		T& getValue()
+		{
+			return mValue;
+		}
+
+	private:
+		T mValue;
+	};
+
+	template<typename T, typename NAME_VALUE_LOOKUP>
+	class ParamValue<T, NAME_VALUE_LOOKUP, true> 
+	:	public T,
+		public NAME_VALUE_LOOKUP
+	{
+	public:
+		typedef const T&							value_assignment_t;
+
+		S32 			mKeyVersion;
+		mutable S32 	mValidatedVersion;
+		mutable bool 	mValidated; // lazy validation flag
+
+		ParamValue() 
+		:	T(),
+			mKeyVersion(0),
+			mValidatedVersion(-1),
+			mValidated(false)
+		{}
+
+		ParamValue(const T& other)
+		:	T(other),
+			mKeyVersion(0),
+			mValidatedVersion(-1),
+			mValidated(false)
+		{
+		}
+
+		void setValue(value_assignment_t val)
+		{
+			*this = val;
+		}
+
+		value_assignment_t getValue() const
+		{
+			return *this;
+		}
+
+		T& getValue()
+		{
+			return *this;
+		}
+	};
+
+	template<typename T, typename NAME_VALUE_LOOKUP = TypeValues<T> >
+	struct ParamIterator
+	{
+		typedef typename std::vector<ParamValue<T, NAME_VALUE_LOOKUP> >::const_iterator		const_iterator;
+		typedef typename std::vector<ParamValue<T, NAME_VALUE_LOOKUP> >::iterator			iterator;
+	};
+
 	// specialize for custom parsing/decomposition of specific classes
 	// e.g. TypedParam<LLRect> has left, top, right, bottom, etc...
 	template<typename	T,
 			typename	NAME_VALUE_LOOKUP = TypeValues<T>,
 			bool		HAS_MULTIPLE_VALUES = false,
-			bool		VALUE_IS_BLOCK = IsBaseBlock<T>::value>
+			bool		VALUE_IS_BLOCK = IsBlock<ParamValue<T, NAME_VALUE_LOOKUP> >::value>
 	class TypedParam 
-	:	public Param
+	:	public Param, 
+		public ParamValue<T, NAME_VALUE_LOOKUP>
 	{
 	public:
-		typedef const T&																	value_const_ref_t;
-		typedef value_const_ref_t															value_assignment_t;
-		typedef typename NAME_VALUE_LOOKUP::KeyCache										key_cache_t;
+		typedef const T&																	value_assignment_t;
 		typedef	TypedParam<T, NAME_VALUE_LOOKUP, HAS_MULTIPLE_VALUES, VALUE_IS_BLOCK>		self_t;
+		typedef NAME_VALUE_LOOKUP															name_value_lookup_t;
+		typedef ParamValue<T, NAME_VALUE_LOOKUP>											param_value_t;
 
 		TypedParam(BlockDescriptor& block_descriptor, const char* name, value_assignment_t value, ParamDescriptor::validation_func_t validate_func, S32 min_count, S32 max_count) 
 		:	Param(block_descriptor.mCurrentBlockPtr)
 		{
 			if (LL_UNLIKELY(block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING))
 			{
-				ParamDescriptor param_descriptor(block_descriptor.mCurrentBlockPtr->getHandleFromParam(this),
+ 				ParamDescriptorPtr param_descriptor = ParamDescriptorPtr(new ParamDescriptor(
+												block_descriptor.mCurrentBlockPtr->getHandleFromParam(this),
 												&mergeWith,
 												&deserializeParam,
 												&serializeParam,
 												validate_func,
 												&inspectParam,
-												min_count, max_count);
+												min_count, max_count));
 				BaseBlock::addParam(block_descriptor, param_descriptor, name);
 			}
 
-			mData.mValue = value;
+			setValue(value);
 		} 
 
 		bool isProvided() const { return Param::anyProvided(); }
@@ -579,27 +627,27 @@ namespace LLInitParam
 			// no further names in stack, attempt to parse value now
 			if (name_stack.first == name_stack.second)
 			{
-				if (parser.readValue(typed_param.mData.mValue))
+				if (parser.readValue(typed_param.getValue()))
 				{
-					typed_param.mData.clearKey();
+					typed_param.clearValueName();
 					typed_param.setProvided(true);
-					typed_param.enclosingBlock().setLastChangedParam(param, true);
+					typed_param.enclosingBlock().paramChanged(param, true);
 					return true;
 				}
 				
 				// try to parse a known named value
-				if(!NAME_VALUE_LOOKUP::empty())
+				if(name_value_lookup_t::valueNamesExist())
 				{
 					// try to parse a known named value
 					std::string name;
 					if (parser.readValue(name))
 					{
 						// try to parse a per type named value
-						if (NAME_VALUE_LOOKUP::get(name, typed_param.mData.mValue))
+						if (name_value_lookup_t::getValueFromName(name, typed_param.getValue()))
 						{
-							typed_param.mData.setKey(name);
+							typed_param.setValueName(name);
 							typed_param.setProvided(true);
-							typed_param.enclosingBlock().setLastChangedParam(param, true);
+							typed_param.enclosingBlock().paramChanged(param, true);
 							return true;
 						}
 
@@ -619,13 +667,13 @@ namespace LLInitParam
 				name_stack.back().second = parser.newParseGeneration();
 			}
 
-			std::string key = typed_param.mData.getKey();
+			std::string key = typed_param.getValueName();
 
 			// first try to write out name of name/value pair
 
 			if (!key.empty())
 			{
-				if (!diff_param || !ParamCompare<std::string>::equals(static_cast<const self_t*>(diff_param)->mData.getKey(), key))
+				if (!diff_param || !ParamCompare<std::string>::equals(static_cast<const self_t*>(diff_param)->getValueName(), key))
 				{
 					if (!parser.writeValue(key, name_stack))
 					{
@@ -634,8 +682,9 @@ namespace LLInitParam
 				}
 			}
 			// then try to serialize value directly
-			else if (!diff_param || !ParamCompare<T>::equals(typed_param.get(), static_cast<const self_t*>(diff_param)->get()))					{
-				if (!parser.writeValue(typed_param.mData.mValue, name_stack)) 
+			else if (!diff_param || !ParamCompare<T>::equals(typed_param.getValue(), static_cast<const self_t*>(diff_param)->getValue()))
+			{
+				if (!parser.writeValue(typed_param.getValue(), name_stack)) 
 				{
 					return;
 				}
@@ -647,18 +696,18 @@ namespace LLInitParam
 			// tell parser about our actual type
 			parser.inspectValue<T>(name_stack, min_count, max_count, NULL);
 			// then tell it about string-based alternatives ("red", "blue", etc. for LLColor4)
-			if (NAME_VALUE_LOOKUP::getPossibleValues())
+			if (name_value_lookup_t::getPossibleValues())
 			{
-				parser.inspectValue<std::string>(name_stack, min_count, max_count, NAME_VALUE_LOOKUP::getPossibleValues());
+				parser.inspectValue<std::string>(name_stack, min_count, max_count, name_value_lookup_t::getPossibleValues());
 			}
 		}
 
 		void set(value_assignment_t val, bool flag_as_provided = true)
 		{
-			mData.mValue = val;
-			mData.clearKey();
+			setValue(val);
+			param_value_t::clearValueName();
 			setProvided(flag_as_provided);
-			Param::enclosingBlock().setLastChangedParam(*this, flag_as_provided);
+			Param::enclosingBlock().paramChanged(*this, flag_as_provided);
 		}
 
 		void setIfNotProvided(value_assignment_t val, bool flag_as_provided = true)
@@ -670,65 +719,56 @@ namespace LLInitParam
 		}
 
 		// implicit conversion
-		operator value_assignment_t() const { return get(); } 
+		operator value_assignment_t() const { return param_value_t::getValue(); } 
 		// explicit conversion
-		value_assignment_t operator()() const { return get(); } 
+		value_assignment_t operator()() const { return param_value_t::getValue(); } 
 
 	protected:
-		value_assignment_t get() const
-		{
-			return mData.mValue;
-		}
 
 		static bool mergeWith(Param& dst, const Param& src, bool overwrite)
 		{
 			const self_t& src_typed_param = static_cast<const self_t&>(src);
 			self_t& dst_typed_param = static_cast<self_t&>(dst);
+
 			if (src_typed_param.isProvided()
 				&& (overwrite || !dst_typed_param.isProvided()))
 			{
-				dst_typed_param.mData.clearKey();
-				dst_typed_param.set(src_typed_param.get());
+				dst_typed_param.clearValueName();
+				dst_typed_param.set(src_typed_param.getValue());
 				return true;
 			}
 			return false;
 		}
-
-		struct Data : public key_cache_t
-		{
-			T mValue;
-		};
-
-		Data		mData;
 	};
 
 	// parameter that is a block
 	template <typename T, typename NAME_VALUE_LOOKUP>
 	class TypedParam<T, NAME_VALUE_LOOKUP, false, true> 
-	:	public T,
-		public Param
+	:	public Param,
+		public ParamValue<T, NAME_VALUE_LOOKUP>
 	{
 	public:
 		typedef const T											value_const_t;
 		typedef T												value_t;
-		typedef value_const_t&									value_const_ref_t;
-		typedef value_const_ref_t								value_assignment_t;
-		typedef typename NAME_VALUE_LOOKUP::KeyCache			key_cache_t;
+		typedef value_const_t&									value_assignment_t;
 		typedef TypedParam<T, NAME_VALUE_LOOKUP, false, true>	self_t;
+		typedef NAME_VALUE_LOOKUP								name_value_lookup_t;
+		typedef ParamValue<T, NAME_VALUE_LOOKUP>				param_value_t;
 
 		TypedParam(BlockDescriptor& block_descriptor, const char* name, value_assignment_t value, ParamDescriptor::validation_func_t validate_func, S32 min_count, S32 max_count)
 		:	Param(block_descriptor.mCurrentBlockPtr),
-			T(value)
+			param_value_t(value)
 		{
 			if (LL_UNLIKELY(block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING))
 			{
-				ParamDescriptor param_descriptor(block_descriptor.mCurrentBlockPtr->getHandleFromParam(this),
+				ParamDescriptorPtr param_descriptor = ParamDescriptorPtr(new ParamDescriptor(
+												block_descriptor.mCurrentBlockPtr->getHandleFromParam(this),
 												&mergeWith,
 												&deserializeParam,
 												&serializeParam,
 												validate_func, 
 												&inspectParam,
-												min_count, max_count);
+												min_count, max_count));
 				BaseBlock::addParam(block_descriptor, param_descriptor, name);
 			}
 		}
@@ -737,25 +777,27 @@ namespace LLInitParam
 		{ 
 			self_t& typed_param = static_cast<self_t&>(param);
 			// attempt to parse block...
-			if(typed_param.deserializeBlock(parser, name_stack))
+			if(typed_param.deserializeBlock(parser, name_stack, generation))
 			{
-				typed_param.mData.clearKey();
-				typed_param.enclosingBlock().setLastChangedParam(param, true);
+				typed_param.clearValueName();
+				typed_param.enclosingBlock().paramChanged(param, true);
+				typed_param.setProvided(true);
 				return true;
 			}
 
-			if(!NAME_VALUE_LOOKUP::empty())
+			if(name_value_lookup_t::valueNamesExist())
 			{
 				// try to parse a known named value
 				std::string name;
 				if (parser.readValue(name))
 				{
 					// try to parse a per type named value
-					if (NAME_VALUE_LOOKUP::get(name, typed_param))
+					if (name_value_lookup_t::getValueFromName(name, typed_param.getValue()))
 					{
-						typed_param.enclosingBlock().setLastChangedParam(param, true);
-						typed_param.mData.setKey(name);
-						typed_param.mData.mKeyVersion = typed_param.getLastChangeVersion();
+						typed_param.enclosingBlock().paramChanged(param, true);
+						typed_param.setValueName(name);
+						typed_param.setProvided(true);
+						typed_param.mKeyVersion = typed_param.getLastChangeVersion();
 						return true;
 					}
 
@@ -767,13 +809,15 @@ namespace LLInitParam
 		static void serializeParam(const Param& param, Parser& parser, Parser::name_stack_t& name_stack, const Param* diff_param)
 		{
 			const self_t& typed_param = static_cast<const self_t&>(param);
+			if (!typed_param.isProvided()) return;
+
 			if (!name_stack.empty())
 			{
 				name_stack.back().second = parser.newParseGeneration();
 			}
 
-			std::string key = typed_param.mData.getKey();
-			if (!key.empty() && typed_param.mData.mKeyVersion == typed_param.getLastChangeVersion())
+			std::string key = typed_param.getValueName();
+			if (!key.empty() && typed_param.mKeyVersion == typed_param.getLastChangeVersion())
 			{
 				if (!parser.writeValue(key, name_stack))
 				{
@@ -790,33 +834,33 @@ namespace LLInitParam
 		{
 			// I am a param that is also a block, so just recurse into my contents
 			const self_t& typed_param = static_cast<const self_t&>(param);
-			typed_param.inspectBlock(parser, name_stack);
+			typed_param.inspectBlock(parser, name_stack, min_count, max_count);
 		}
 
 		// a param-that-is-a-block is provided when the user has set one of its child params
 		// *and* the block as a whole validates
 		bool isProvided() const 
 		{ 
-			// only validate block when it hasn't already passed validation and user has supplied *some* value
-			if (Param::anyProvided() && mData.mValidatedVersion < T::getLastChangeVersion())
+			// only validate block when it hasn't already passed validation with current data
+			if (Param::anyProvided() && param_value_t::mValidatedVersion < param_value_t::getLastChangeVersion())
 			{
 				// a sub-block is "provided" when it has been filled in enough to be valid
-				mData.mValidated = T::validateBlock(false);
-				mData.mValidatedVersion = T::getLastChangeVersion();
+				param_value_t::mValidated = param_value_t::validateBlock(false);
+				param_value_t::mValidatedVersion = param_value_t::getLastChangeVersion();
 			}
-			return Param::anyProvided() && mData.mValidated;
+			return Param::anyProvided() && param_value_t::mValidated;
 		}
 
 		// assign block contents to this param-that-is-a-block
 		void set(value_assignment_t val, bool flag_as_provided = true)
 		{
-			value_t::operator=(val);
-			mData.clearKey();
+			setValue(val);
+			param_value_t::clearValueName();
 			// force revalidation of block by clearing known provided version
 			// next call to isProvided() will update provision status based on validity
-			mData.mValidatedVersion = 0;
+			param_value_t::mValidatedVersion = -1;
 			setProvided(flag_as_provided);
-			Param::enclosingBlock().setLastChangedParam(*this, flag_as_provided);
+			Param::enclosingBlock().paramChanged(*this, flag_as_provided);
 		}
 
 		void setIfNotProvided(value_assignment_t val, bool flag_as_provided = true)
@@ -828,10 +872,10 @@ namespace LLInitParam
 		}
 
 		// propagate changed status up to enclosing block
-		/*virtual*/ void setLastChangedParam(const Param& last_param, bool user_provided)
+		/*virtual*/ void paramChanged(const Param& changed_param, bool user_provided)
 		{ 
-			T::setLastChangedParam(last_param, user_provided);
-			Param::enclosingBlock().setLastChangedParam(*this, user_provided);
+			ParamValue<T, NAME_VALUE_LOOKUP>::paramChanged(changed_param, user_provided);
+			Param::enclosingBlock().paramChanged(*this, user_provided);
 			if (user_provided)
 			{
 				// a child param has been explicitly changed
@@ -841,41 +885,28 @@ namespace LLInitParam
 		}
 
 		// implicit conversion
-		operator value_assignment_t() const { return get(); } 
+		operator value_assignment_t() const { return param_value_t::getValue(); } 
 		// explicit conversion
-		value_assignment_t operator()() const { return get(); } 
+		value_assignment_t operator()() const { return param_value_t::getValue(); } 
 
 	protected:
-		value_assignment_t get() const
-		{
-			return *this;
-		}
 
 		static bool mergeWith(Param& dst, const Param& src, bool overwrite)
 		{
 			const self_t& src_typed_param = static_cast<const self_t&>(src);
 			self_t& dst_typed_param = static_cast<self_t&>(dst);
-			if (dst_typed_param.T::merge(T::selfBlockDescriptor(), src_typed_param, overwrite))
+
+			if (src_typed_param.isProvided()
+				&& (overwrite || !dst_typed_param.isProvided()))
 			{
-				dst_typed_param.mData.clearKey();
-				return true;
+				if (dst_typed_param.merge(param_value_t::selfBlockDescriptor(), src_typed_param, overwrite))
+				{
+					dst_typed_param.clearValueName();
+					return true;
+				}
 			}
 			return false;
 		}
-
-		struct Data : public key_cache_t
-		{
-			S32 			mKeyVersion;
-			mutable S32 	mValidatedVersion;
-			mutable bool 	mValidated; // lazy validation flag
-
-			Data() 
-			:	mKeyVersion(0),
-				mValidatedVersion(0),
-				mValidated(false)
-			{}
-		};
-		Data	mData;
 	};
 
 	// container of non-block parameters
@@ -885,29 +916,28 @@ namespace LLInitParam
 	{
 	public:
 		typedef TypedParam<VALUE_TYPE, NAME_VALUE_LOOKUP, true, false>		self_t;
-		typedef typename std::vector<VALUE_TYPE>							container_t;
+		typedef ParamValue<VALUE_TYPE, NAME_VALUE_LOOKUP>			param_value_t;
+		typedef typename std::vector<param_value_t>							container_t;
 		typedef const container_t&											value_assignment_t;
 
 		typedef VALUE_TYPE													value_t;
-		typedef value_t&													value_ref_t;
-		typedef const value_t&												value_const_ref_t;
+		typedef NAME_VALUE_LOOKUP											name_value_lookup_t;
 		
-		typedef typename NAME_VALUE_LOOKUP::KeyCache						key_cache_t;
-
 		TypedParam(BlockDescriptor& block_descriptor, const char* name, value_assignment_t value, ParamDescriptor::validation_func_t validate_func, S32 min_count, S32 max_count) 
-		:	Param(block_descriptor.mCurrentBlockPtr),
-			mValues(value)
+		:	Param(block_descriptor.mCurrentBlockPtr)
 		{
-			mCachedKeys.resize(mValues.size());
+			std::copy(value.begin(), value.end(), std::back_inserter(mValues));
+
 			if (LL_UNLIKELY(block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING))
 			{
-				ParamDescriptor param_descriptor(block_descriptor.mCurrentBlockPtr->getHandleFromParam(this),
+				ParamDescriptorPtr param_descriptor = ParamDescriptorPtr(new ParamDescriptor(
+												block_descriptor.mCurrentBlockPtr->getHandleFromParam(this),
 												&mergeWith,
 												&deserializeParam,
 												&serializeParam,
 												validate_func,
 												&inspectParam,
-												min_count, max_count);
+												min_count, max_count));
 				BaseBlock::addParam(block_descriptor, param_descriptor, name);
 			}
 		} 
@@ -924,29 +954,22 @@ namespace LLInitParam
 				// attempt to read value directly
 				if (parser.readValue(value))
 				{
-					typed_param.mValues.push_back(value);
-					// save an empty name/value key as a placeholder
-					typed_param.mCachedKeys.push_back(key_cache_t());
-					typed_param.enclosingBlock().setLastChangedParam(param, true);
-					typed_param.setProvided(true);
+					typed_param.add(value);
 					return true;
 				}
 				
 				// try to parse a known named value
-				if(!NAME_VALUE_LOOKUP::empty())
+				if(name_value_lookup_t::valueNamesExist())
 				{
 					// try to parse a known named value
 					std::string name;
 					if (parser.readValue(name))
 					{
 						// try to parse a per type named value
-						if (NAME_VALUE_LOOKUP::get(name, typed_param.mValues))
+						if (name_value_lookup_t::getValueFromName(name, typed_param.mValues))
 						{
-							typed_param.mValues.push_back(value);
-							typed_param.mCachedKeys.push_back(key_cache_t());
-							typed_param.mCachedKeys.back().setKey(name);
-							typed_param.enclosingBlock().setLastChangedParam(param, true);
-							typed_param.setProvided(true);
+							typed_param.add(value);
+							typed_param.mValues.back().setValueName(name);
 							return true;
 						}
 
@@ -961,25 +984,27 @@ namespace LLInitParam
 			const self_t& typed_param = static_cast<const self_t&>(param);
 			if (!typed_param.isProvided() || name_stack.empty()) return;
 
-			const_iterator it = typed_param.mValues.begin();
-			for (typename std::vector<key_cache_t>::const_iterator key_it = typed_param.mCachedKeys.begin();
-				it != typed_param.mValues.end();
-				++key_it, ++it)
+			for (const_iterator it = typed_param.mValues.begin(), end_it = typed_param.mValues.end();
+				it != end_it;
+				++it)
 			{
-				std::string key = key_it->get();
+				std::string key = it->getValue();
 				name_stack.back().second = parser.newParseGeneration();
 
-				if(!key.empty())
+				if(key.empty())
+				// not parsed via name values, write out value directly
 				{
-					if(!parser.writeValue(key, name_stack))
+					if (!parser.writeValue(*it, name_stack))
 					{
-						return;
+						break;
 					}
 				}
-				// not parse via name values, write out value directly
-				else if (!parser.writeValue(*it, name_stack))
+				else 
 				{
-					return;
+					if(!parser.writeValue(key, name_stack))
+					{
+						break;
+					}
 				}
 			}
 		}
@@ -987,19 +1012,17 @@ namespace LLInitParam
 		static void inspectParam(const Param& param, Parser& parser, Parser::name_stack_t& name_stack, S32 min_count, S32 max_count)
 		{
 			parser.inspectValue<VALUE_TYPE>(name_stack, min_count, max_count, NULL);
-			if (NAME_VALUE_LOOKUP::getPossibleValues())
+			if (name_value_lookup_t::getPossibleValues())
 			{
-				parser.inspectValue<std::string>(name_stack, min_count, max_count, NAME_VALUE_LOOKUP::getPossibleValues());
+				parser.inspectValue<std::string>(name_stack, min_count, max_count, name_value_lookup_t::getPossibleValues());
 			}
 		}
 
 		void set(value_assignment_t val, bool flag_as_provided = true)
 		{
 			mValues = val;
-			mCachedKeys.clear();
-			mCachedKeys.resize(mValues.size());
 			setProvided(flag_as_provided);
-			Param::enclosingBlock().setLastChangedParam(*this, flag_as_provided);
+			Param::enclosingBlock().paramChanged(*this, flag_as_provided);
 		}
 
 
@@ -1011,23 +1034,23 @@ namespace LLInitParam
 			}
 		}
 
-		value_ref_t add()
+		value_t& add()
 		{
-			mValues.push_back(value_t());
-			mCachedKeys.push_back(key_cache_t());
+			mValues.push_back(param_value_t(value_t()));
 			setProvided(true);
+			Param::enclosingBlock().paramChanged(*this, true);
 			return mValues.back();
 		}
 
-		void add(value_const_ref_t item)
+		void add(const value_t& item)
 		{
-			mValues.push_back(item);
-			mCachedKeys.push_back(key_cache_t());
+			mValues.push_back(param_value_t(item));
 			setProvided(true);
+			Param::enclosingBlock().paramChanged(*this, true);
 		}
 
 		// implicit conversion
-		operator value_assignment_t() const { return self_t::get(); } 
+		operator value_assignment_t() const { return mValues; } 
 
 		typedef typename container_t::iterator iterator;
 		typedef typename container_t::const_iterator const_iterator;
@@ -1044,27 +1067,25 @@ namespace LLInitParam
 		}
 
 	protected:
-		value_assignment_t get() const
-		{
-			return mValues;
-		}
-
 		static bool mergeWith(Param& dst, const Param& src, bool overwrite)
 		{
 			const self_t& src_typed_param = static_cast<const self_t&>(src);
 			self_t& dst_typed_param = static_cast<self_t&>(dst);
 
-			if (src_typed_param.isProvided()
-				&& (overwrite || !dst_typed_param.isProvided()))
+			if (overwrite)
 			{
-				dst_typed_param.set(src_typed_param.get());
-				return true;
+				std::copy(src_typed_param.begin(), src_typed_param.end(), std::back_inserter(dst_typed_param.mValues));
 			}
-			return false;
+			else
+			{
+				container_t new_values(src_typed_param.mValues);
+				std::copy(dst_typed_param.begin(), dst_typed_param.end(), std::back_inserter(new_values));
+				std::swap(dst_typed_param.mValues, new_values);
+			}
+			return true;
 		}
 
 		container_t		mValues;
-		std::vector<key_cache_t>	mCachedKeys;
 	};
 
 	// container of block parameters
@@ -1074,80 +1095,76 @@ namespace LLInitParam
 	{
 	public:
 		typedef TypedParam<VALUE_TYPE, NAME_VALUE_LOOKUP, true, true>	self_t;
-		typedef typename std::vector<VALUE_TYPE>						container_t;
+		typedef ParamValue<VALUE_TYPE, NAME_VALUE_LOOKUP>				param_value_t;
+		typedef typename std::vector<param_value_t>						container_t;
 		typedef const container_t&										value_assignment_t;
-
 		typedef VALUE_TYPE												value_t;
-		typedef value_t&												value_ref_t;
-		typedef const value_t&											value_const_ref_t;
-
-		typedef typename NAME_VALUE_LOOKUP::KeyCache					key_cache_t;
+		typedef NAME_VALUE_LOOKUP										name_value_lookup_t;
 
 		TypedParam(BlockDescriptor& block_descriptor, const char* name, value_assignment_t value, ParamDescriptor::validation_func_t validate_func, S32 min_count, S32 max_count) 
 		:	Param(block_descriptor.mCurrentBlockPtr),
-			mValues(value),
-			mLastParamGeneration(0)
+			mLastParseGeneration(0)
 		{
-			mCachedKeys.resize(mValues.size());
+			std::copy(value.begin(), value.end(), back_inserter(mValues));
+
 			if (LL_UNLIKELY(block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING))
 			{
-				ParamDescriptor param_descriptor(block_descriptor.mCurrentBlockPtr->getHandleFromParam(this),
+				ParamDescriptorPtr param_descriptor = ParamDescriptorPtr(new ParamDescriptor(
+												block_descriptor.mCurrentBlockPtr->getHandleFromParam(this),
 												&mergeWith,
 												&deserializeParam,
 												&serializeParam,
 												validate_func,
 												&inspectParam,
-												min_count, max_count);
+												min_count, max_count));
 				BaseBlock::addParam(block_descriptor, param_descriptor, name);
 			}
 		} 
 
 		bool isProvided() const { return Param::anyProvided(); }
 
-		value_ref_t operator[](S32 index) { return mValues[index]; }
-		value_const_ref_t operator[](S32 index) const { return mValues[index]; }
-
 		static bool deserializeParam(Param& param, Parser& parser, const Parser::name_stack_range_t& name_stack, S32 generation) 
 		{ 
 			self_t& typed_param = static_cast<self_t&>(param);
 			bool new_value = false;
-			if (generation != typed_param.mLastParamGeneration || typed_param.mValues.empty())
+
+			if (generation != typed_param.mLastParseGeneration 
+				|| typed_param.mValues.empty())
 			{
 				new_value = true;
 				typed_param.mValues.push_back(value_t());
-				typed_param.mCachedKeys.push_back(Data());
 			}
 
-			value_ref_t value = typed_param.mValues.back();
+			param_value_t& value = typed_param.mValues.back();
 
 			// attempt to parse block...
-			if(value.deserializeBlock(parser, name_stack))
+			if(value.deserializeBlock(parser, name_stack, generation))
 			{
 				if (new_value)
 				{	// successfully parsed new value, let's keep it
-					typed_param.mLastParamGeneration = generation;
+					typed_param.mLastParseGeneration = generation;
 				}
-				typed_param.enclosingBlock().setLastChangedParam(param, true);
+				typed_param.enclosingBlock().paramChanged(param, true);
 				typed_param.setProvided(true);
 				return true;
 			}
-			else if(!NAME_VALUE_LOOKUP::empty())
+			else if(name_value_lookup_t::valueNamesExist())
 			{
 				// try to parse a known named value
 				std::string name;
 				if (parser.readValue(name))
 				{
 					// try to parse a per type named value
-					if (NAME_VALUE_LOOKUP::get(name, value))
+					if (name_value_lookup_t::getValueFromName(name, value.getValue()))
 					{
 						if (new_value)
 						{	// successfully parsed new value, let's keep it
-							typed_param.mLastParamGeneration = generation;
+							typed_param.mLastParseGeneration = generation;
 						}
 
-						typed_param.mCachedKeys.back().setKey(name);
-						typed_param.mCachedKeys.back().mKeyVersion = value.getLastChangeVersion();
-						typed_param.enclosingBlock().setLastChangedParam(param, true);
+						typed_param.mValues.back().setValueName(name);
+						typed_param.mValues.back().mKeyVersion = value.getLastChangeVersion();
+						typed_param.enclosingBlock().paramChanged(param, true);
 						typed_param.setProvided(true);
 						return true;
 					}
@@ -1158,7 +1175,6 @@ namespace LLInitParam
 			if (new_value)
 			{	// failed to parse new value, pop it off
 				typed_param.mValues.pop_back();
-				typed_param.mCachedKeys.pop_back();
 			}
 
 			return false;
@@ -1169,26 +1185,22 @@ namespace LLInitParam
 			const self_t& typed_param = static_cast<const self_t&>(param);
 			if (!typed_param.isProvided() || name_stack.empty()) return;
 
-			const_iterator it = typed_param.mValues.begin();
-			for (typename std::vector<Data>::const_iterator key_it = typed_param.mCachedKeys.begin();
-				it != typed_param.mValues.end();
-				++key_it, ++it)
+			for (const_iterator it = typed_param.mValues.begin(), end_it = typed_param.mValues.end();
+				it != end_it;
+				++it)
 			{
 				name_stack.back().second = parser.newParseGeneration();
 
-				std::string key = key_it->getKey();
-				if (!key.empty() && key_it->mKeyVersion == it->getLastChangeVersion())
+				std::string key = it->getValueName();
+				if (!key.empty() && it->mKeyVersion == it->getLastChangeVersion())
 				{
-					if(!parser.writeValue(key, name_stack))
-					{
-						return;
-					}
+					parser.writeValue(key, name_stack);
 				}
 				// Not parsed via named values, write out value directly
 				// NOTE: currently we don't worry about removing default values in Multiple
-				else if (!it->serializeBlock(parser, name_stack, NULL))
+				else 
 				{
-					return;
+					it->serializeBlock(parser, name_stack, NULL);
 				}
 			}
 		}
@@ -1196,16 +1208,14 @@ namespace LLInitParam
 		static void inspectParam(const Param& param, Parser& parser, Parser::name_stack_t& name_stack, S32 min_count, S32 max_count)
 		{
 			// I am a vector of blocks, so describe my contents recursively
-			value_t().inspectBlock(parser, name_stack);
+			param_value_t(value_t()).inspectBlock(parser, name_stack, min_count, max_count);
 		}
 
 		void set(value_assignment_t val, bool flag_as_provided = true)
 		{
 			mValues = val;
-			mCachedKeys.clear();
-			mCachedKeys.resize(mValues.size());
 			setProvided(flag_as_provided);
-			Param::enclosingBlock().setLastChangedParam(*this, flag_as_provided);
+			Param::enclosingBlock().paramChanged(*this, flag_as_provided);
 		}
 
 		void setIfNotProvided(value_assignment_t val, bool flag_as_provided = true)
@@ -1216,23 +1226,23 @@ namespace LLInitParam
 			}
 		}
 
-		value_ref_t add()
+		value_t& add()
 		{
 			mValues.push_back(value_t());
-			mCachedKeys.push_back(Data());
 			setProvided(true);
+			Param::enclosingBlock().paramChanged(*this, true);
 			return mValues.back();
 		}
 
-		void add(value_const_ref_t item)
+		void add(const value_t& item)
 		{
 			mValues.push_back(item);
-			mCachedKeys.push_back(Data());
 			setProvided(true);
+			Param::enclosingBlock().paramChanged(*this, true);
 		}
 
 		// implicit conversion
-		operator value_assignment_t() const { return self_t::get(); } 
+		operator value_assignment_t() const { return mValues; } 
 
 		typedef typename container_t::iterator iterator;
 		typedef typename container_t::const_iterator const_iterator;
@@ -1246,8 +1256,8 @@ namespace LLInitParam
 		U32 numValidElements() const
 		{
 			U32 count = 0;
-			for (const_iterator it = mValues.begin();
-				it != mValues.end();
+			for (const_iterator it = mValues.begin(), end_it = mValues.end();
+				it != end_it;
 				++it)
 			{
 				if(it->validateBlock(false)) count++;
@@ -1256,43 +1266,35 @@ namespace LLInitParam
 		}
 
 	protected:
-		value_assignment_t get() const
-		{
-			return mValues;
-		}
 
 		static bool mergeWith(Param& dst, const Param& src, bool overwrite)
 		{
 			const self_t& src_typed_param = static_cast<const self_t&>(src);
 			self_t& dst_typed_param = static_cast<self_t&>(dst);
 
-			if (src_typed_param.isProvided()
-				&& (overwrite || !dst_typed_param.isProvided()))
+			if (overwrite)
 			{
-				dst_typed_param.set(src_typed_param.get());
-				return true;
+				std::copy(src_typed_param.begin(), src_typed_param.end(), std::back_inserter(dst_typed_param.mValues));
 			}
-			return false;
+			else
+			{
+				container_t new_values(src_typed_param.mValues);
+				std::copy(dst_typed_param.begin(), dst_typed_param.end(), std::back_inserter(new_values));
+				std::swap(dst_typed_param.mValues, new_values);
+			}
+			return true;
 		}
 
-		struct Data : public key_cache_t
-		{
-			S32 mKeyVersion;	// version of block for which key was last valid
-
-			Data() : mKeyVersion(0) {}
-		};
-
 		container_t			mValues;
-		std::vector<Data>	mCachedKeys;
 
-		S32			mLastParamGeneration;
+		S32			mLastParseGeneration;
 	};
 
 	template <typename DERIVED_BLOCK>
 	class Choice : public BaseBlock
 	{
-		typedef Choice<DERIVED_BLOCK> self_t;
-		typedef Choice<DERIVED_BLOCK> enclosing_block_t;
+		typedef Choice<DERIVED_BLOCK>	self_t;
+		typedef Choice<DERIVED_BLOCK>	enclosing_block_t;
 		
 		LOG_CLASS(self_t);
 	public:
@@ -1321,9 +1323,9 @@ namespace LLInitParam
 		}
 
 		// clear out old choice when param has changed
-		/*virtual*/ void setLastChangedParam(const Param& last_param, bool user_provided)
+		/*virtual*/ void paramChanged(const Param& changed_param, bool user_provided)
 		{ 
-			param_handle_t changed_param_handle = BaseBlock::getHandleFromParam(&last_param);
+			param_handle_t changed_param_handle = BaseBlock::getHandleFromParam(&changed_param);
 			// if we have a new choice...
 			if (changed_param_handle != mCurChoice)
 			{
@@ -1335,7 +1337,7 @@ namespace LLInitParam
 				}
 				mCurChoice = changed_param_handle;
 			}
-			BaseBlock::setLastChangedParam(last_param, user_provided);
+			BaseBlock::paramChanged(changed_param, user_provided);
 		}
 
 		virtual const BlockDescriptor& mostDerivedBlockDescriptor() const { return selfBlockDescriptor(); }
@@ -1358,20 +1360,21 @@ namespace LLInitParam
 			friend class Choice<DERIVED_BLOCK>;
 
 			typedef Alternative<T, NAME_VALUE_LOOKUP>									self_t;
-			typedef TypedParam<T, NAME_VALUE_LOOKUP, false, IsBaseBlock<T>::value>		super_t;
+			typedef TypedParam<T, NAME_VALUE_LOOKUP, false, IsBlock<ParamValue<T, NAME_VALUE_LOOKUP> >::value>		super_t;
 			typedef typename super_t::value_assignment_t								value_assignment_t;
 
-			explicit Alternative(const char* name, value_assignment_t val = DefaultInitializer<T>::get())
+			explicit Alternative(const char* name, value_assignment_t val = defaultValue<T>())
 			:	super_t(DERIVED_BLOCK::selfBlockDescriptor(), name, val, NULL, 0, 1),
 				mOriginalValue(val)
 			{
 				// assign initial choice to first declared option
 				DERIVED_BLOCK* blockp = ((DERIVED_BLOCK*)DERIVED_BLOCK::selfBlockDescriptor().mCurrentBlockPtr);
-				if (LL_UNLIKELY(
-						DERIVED_BLOCK::selfBlockDescriptor().mInitializationState == BlockDescriptor::INITIALIZING
-							&& blockp->mCurChoice == 0))
+				if (LL_UNLIKELY(DERIVED_BLOCK::selfBlockDescriptor().mInitializationState == BlockDescriptor::INITIALIZING))
 				{
-					blockp->mCurChoice = Param::enclosingBlock().getHandleFromParam(this);
+					if(blockp->mCurChoice == 0)
+					{
+						blockp->mCurChoice = Param::enclosingBlock().getHandleFromParam(this);
+					}
 				}
 			}
 
@@ -1390,7 +1393,7 @@ namespace LLInitParam
 			{ 
 				if (static_cast<enclosing_block_t&>(Param::enclosingBlock()).getCurrentChoice() == this)
 				{
-					return super_t::get(); 
+					return super_t::getValue(); 
 				}
 				return mOriginalValue;
 			} 
@@ -1399,7 +1402,7 @@ namespace LLInitParam
 			{ 
 				if (static_cast<enclosing_block_t&>(Param::enclosingBlock()).getCurrentChoice() == this)
 				{
-					return super_t::get(); 
+					return super_t::getValue(); 
 				}
 				return mOriginalValue;
 			} 
@@ -1433,8 +1436,8 @@ namespace LLInitParam
 	class Block 
 	:	public BASE_BLOCK
 	{
-		typedef Block<DERIVED_BLOCK, BASE_BLOCK> self_t;
-		typedef Block<DERIVED_BLOCK, BASE_BLOCK> block_t;
+		typedef Block<DERIVED_BLOCK, BASE_BLOCK>	self_t;
+		typedef Block<DERIVED_BLOCK, BASE_BLOCK>	block_t;
 
 	public:
 		typedef BASE_BLOCK base_block_t;
@@ -1442,13 +1445,13 @@ namespace LLInitParam
 		// take all provided params from other and apply to self
 		bool overwriteFrom(const self_t& other)
 		{
-			return BaseBlock::merge(selfBlockDescriptor(), other, true);
+			return static_cast<DERIVED_BLOCK*>(this)->merge(selfBlockDescriptor(), other, true);
 		}
 
 		// take all provided params that are not already provided, and apply to self
 		bool fillFrom(const self_t& other)
 		{
-			return BaseBlock::merge(selfBlockDescriptor(), other, false);
+			return static_cast<DERIVED_BLOCK*>(this)->merge(selfBlockDescriptor(), other, false);
 		}
 
 		virtual const BlockDescriptor& mostDerivedBlockDescriptor() const { return selfBlockDescriptor(); }
@@ -1468,10 +1471,10 @@ namespace LLInitParam
 		class Optional : public TypedParam<T, NAME_VALUE_LOOKUP, false>
 		{
 		public:
-			typedef TypedParam<T, NAME_VALUE_LOOKUP, false, IsBaseBlock<T>::value>		super_t;
+			typedef TypedParam<T, NAME_VALUE_LOOKUP, false, IsBlock<ParamValue<T, NAME_VALUE_LOOKUP> >::value>		super_t;
 			typedef typename super_t::value_assignment_t								value_assignment_t;
 
-			explicit Optional(const char* name = "", value_assignment_t val = DefaultInitializer<T>::get())
+			explicit Optional(const char* name = "", value_assignment_t val = defaultValue<T>())
 			:	super_t(DERIVED_BLOCK::selfBlockDescriptor(), name, val, NULL, 0, 1)
 			{
 				//#pragma message("Parsing LLInitParam::Block::Optional")
@@ -1483,7 +1486,7 @@ namespace LLInitParam
 				return *this;
 			}
 
-			DERIVED_BLOCK& operator()(typename super_t::value_assignment_t val)
+			DERIVED_BLOCK& operator()(value_assignment_t val)
 			{
 				super_t::set(val);
 				return static_cast<DERIVED_BLOCK&>(Param::enclosingBlock());
@@ -1495,12 +1498,12 @@ namespace LLInitParam
 		class Mandatory : public TypedParam<T, NAME_VALUE_LOOKUP, false>
 		{
 		public:
-			typedef TypedParam<T, NAME_VALUE_LOOKUP, false, IsBaseBlock<T>::value>		super_t;
+			typedef TypedParam<T, NAME_VALUE_LOOKUP, false, IsBlock<ParamValue<T, NAME_VALUE_LOOKUP> >::value>		super_t;
 			typedef Mandatory<T, NAME_VALUE_LOOKUP>										self_t;
 			typedef typename super_t::value_assignment_t								value_assignment_t;
 
 			// mandatory parameters require a name to be parseable
-			explicit Mandatory(const char* name = "", value_assignment_t val = DefaultInitializer<T>::get())
+			explicit Mandatory(const char* name = "", value_assignment_t val = defaultValue<T>())
 			:	super_t(DERIVED_BLOCK::selfBlockDescriptor(), name, val, &validate, 1, 1)
 			{}
 
@@ -1529,15 +1532,15 @@ namespace LLInitParam
 		class Multiple : public TypedParam<T, NAME_VALUE_LOOKUP, true>
 		{
 		public:
-			typedef TypedParam<T, NAME_VALUE_LOOKUP, true, IsBaseBlock<T>::value>	super_t;
+			typedef TypedParam<T, NAME_VALUE_LOOKUP, true, IsBlock<ParamValue<T, NAME_VALUE_LOOKUP> >::value>	super_t;
 			typedef Multiple<T, RANGE, NAME_VALUE_LOOKUP>							self_t;
 			typedef typename super_t::container_t									container_t;
 			typedef typename super_t::value_assignment_t							value_assignment_t;
 			typedef typename super_t::iterator										iterator;
 			typedef typename super_t::const_iterator								const_iterator;
 
-			explicit Multiple(const char* name = "", value_assignment_t val = DefaultInitializer<container_t>::get())
-			:	super_t(DERIVED_BLOCK::selfBlockDescriptor(), name, val, &validate, RANGE::minCount(), RANGE::maxCount())
+			explicit Multiple(const char* name = "")
+			:	super_t(DERIVED_BLOCK::selfBlockDescriptor(), name, container_t(), &validate, RANGE::minCount(), RANGE::maxCount())
 			{}
 
 			Multiple& operator=(value_assignment_t val)
@@ -1545,7 +1548,7 @@ namespace LLInitParam
 				set(val);
 				return *this;
 			}
-			
+
 			DERIVED_BLOCK& operator()(typename super_t::value_assignment_t val)
 			{
 				super_t::set(val);
@@ -1559,6 +1562,96 @@ namespace LLInitParam
 			}
 		};
 
+		template <typename T, typename RANGE = BaseBlock::AnyAmount, typename NAME_VALUE_LOOKUP = TypeValues<T> >
+		class Batch : private TypedParam<T, NAME_VALUE_LOOKUP, false>
+		{
+		public:
+			typedef ParamValue<T, NAME_VALUE_LOOKUP>										param_value_t;
+			typedef TypedParam<T, NAME_VALUE_LOOKUP, false, IsBlock<param_value_t>::value>	super_t;
+			typedef Batch<T, RANGE, NAME_VALUE_LOOKUP>										self_t;
+			typedef typename super_t::value_assignment_t									value_assignment_t;
+			typedef typename super_t::value_t												value_t;
+
+			struct BatchDefaultValue : public ParamDescriptor::UserData
+			{
+				BatchDefaultValue(const T& value)
+				:	mValue(value)
+				{}
+
+				T mValue;
+			};
+
+			explicit Batch(const char* name, value_assignment_t val)
+			:	super_t(DERIVED_BLOCK::selfBlockDescriptor(), name, val, NULL, 0, 1),
+				mLastParseGeneration(-1)
+			{
+				BlockDescriptor& block_descriptor = DERIVED_BLOCK::selfBlockDescriptor();
+				if (LL_UNLIKELY(block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING))
+				{
+					ParamDescriptorPtr param_descriptorp = block_descriptor.mCurrentBlockPtr->findParamDescriptor(*this);
+
+					if (param_descriptorp)
+					{
+						param_descriptorp->mDeserializeFunc = &deserializeParam;
+						param_descriptorp->mUserData = new BatchDefaultValue(new param_value_t(val));
+					}
+				}
+			}
+
+			explicit Batch(const char* name = "")
+			:	super_t(DERIVED_BLOCK::selfBlockDescriptor(), name, defaultValue<T>(), NULL, 0, 1),
+				mLastParseGeneration(-1)
+			{
+				BlockDescriptor& block_descriptor = DERIVED_BLOCK::selfBlockDescriptor();
+				if (LL_UNLIKELY(block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING))
+				{
+					ParamDescriptorPtr param_descriptorp = block_descriptor.mCurrentBlockPtr->findParamDescriptor(*this);
+
+					if (param_descriptorp)
+					{
+						param_descriptorp->mDeserializeFunc = &deserializeParam;
+					}
+				}
+			}
+
+			Batch& operator=(value_assignment_t val)
+			{
+				set(val);
+				return *this;
+			}
+
+			DERIVED_BLOCK& operator()(value_assignment_t val)
+			{
+				super_t::set(val);
+				return static_cast<DERIVED_BLOCK&>(Param::enclosingBlock());
+			}
+
+			using super_t::operator();
+
+		private:
+			static bool deserializeParam(Param& param, Parser& parser, const Parser::name_stack_range_t& name_stack, S32 generation) 
+			{
+				self_t& typed_param = static_cast<self_t&>(param);
+
+				if (generation != typed_param.mLastParseGeneration)
+				{
+					ParamDescriptorPtr descriptor = typed_param.enclosingBlock().findParamDescriptor(param);
+					if (descriptor && static_cast<BatchDefaultValue*>(descriptor->mUserData))
+					{
+						static_cast<param_value_t&>(typed_param) = (static_cast<BatchDefaultValue*>(descriptor->mUserData))->mValue;
+					}
+					else
+					{
+						static_cast<param_value_t&>(typed_param) = param_value_t(value_t());
+					}
+					typed_param.mLastParseGeneration = generation;
+				}
+				return super_t::deserializeParam(param, parser, name_stack, generation);
+			}
+
+			S32 mLastParseGeneration;
+		};
+
 		class Deprecated : public Param
 		{
 		public:
@@ -1568,13 +1661,14 @@ namespace LLInitParam
 				BlockDescriptor& block_descriptor = DERIVED_BLOCK::selfBlockDescriptor();
 				if (LL_UNLIKELY(block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING))
 				{
-					ParamDescriptor param_descriptor(block_descriptor.mCurrentBlockPtr->getHandleFromParam(this),
+					ParamDescriptorPtr param_descriptor = ParamDescriptorPtr(new ParamDescriptor(
+													block_descriptor.mCurrentBlockPtr->getHandleFromParam(this),
 													NULL,
 													&deserializeParam,
 													NULL,
 													NULL,
 													NULL, 
-													0, S32_MAX);
+													0, S32_MAX));
 					BaseBlock::addParam(block_descriptor, param_descriptor, name);
 				}
 			}
@@ -1602,137 +1696,91 @@ namespace LLInitParam
 		}
 	};
 	
-	template<typename T, typename DERIVED = TypedParam<T> >
-	class BlockValue
-	:	public Block<TypedParam<T, TypeValues<T>, false> >,
-		public Param
+	template<typename T>
+	class CustomParamValue
+	:	public Block<ParamValue<T, TypeValues<T> > >,
+		public TypeValues<T>
 	{
 	public:
 		typedef enum e_value_age
 		{	
-			OLDER_THAN_BLOCK,	// mData.mValue needs to be refreshed from the block parameters
-			NEWER_THAN_BLOCK,	// mData.mValue holds the authoritative value (which has been replicated to the block parameters via setBlockFromValue)
-			SAME_AS_BLOCK		// mData.mValue is derived from the block parameters, which are authoritative
+			VALUE_NEEDS_UPDATE,		// mValue needs to be refreshed from the block parameters
+			VALUE_AUTHORITATIVE,	// mValue holds the authoritative value (which has been replicated to the block parameters via updateBlockFromValue)
+			BLOCK_AUTHORITATIVE		// mValue is derived from the block parameters, which are authoritative
 		} EValueAge;
 
-		typedef BlockValue<T>										self_t;
-		typedef Block<TypedParam<T, TypeValues<T>, false> >			block_t;
-		typedef const T&											value_const_ref_t;
-		typedef value_const_ref_t									value_assignment_t;
-		typedef typename TypeValues<T>::KeyCache					key_cache_t;
-
-		BlockValue(BlockDescriptor& block_descriptor, const char* name, value_assignment_t value, ParamDescriptor::validation_func_t validate_func, S32 min_count, S32 max_count)
-		:	Param(block_descriptor.mCurrentBlockPtr),
-			mData(value, NEWER_THAN_BLOCK)
-		{
-			if (LL_UNLIKELY(block_descriptor.mInitializationState == BlockDescriptor::INITIALIZING))
-			{
-				ParamDescriptor param_descriptor(block_descriptor.mCurrentBlockPtr->getHandleFromParam(this),
-												&mergeWith,
-												&deserializeParam,
-												&serializeParam,
-												validate_func,
-												&inspectParam,
-												min_count, max_count);
-				BaseBlock::addParam(block_descriptor, param_descriptor, name);
-			}
-		}
+		typedef ParamValue<T, TypeValues<T> >	derived_t;
+		typedef CustomParamValue<T>				self_t;
+		typedef Block<derived_t>		block_t;
+		typedef const T&						value_assignment_t;
 
-		// implicit conversion
-		operator value_assignment_t() const { return get(); } 
-		// explicit conversion
-		value_assignment_t operator()() const { return get(); } 
+		CustomParamValue(const T& value = T())
+		:	mValue(value),
+			mValueAge(VALUE_AUTHORITATIVE),
+			mKeyVersion(0),
+			mValidatedVersion(-1)
+		{}
 
-		static bool deserializeParam(Param& param, Parser& parser, const Parser::name_stack_range_t& name_stack, S32 generation)
+		bool deserializeBlock(Parser& parser, Parser::name_stack_range_t name_stack, S32 generation)
 		{
-			DERIVED& typed_param = static_cast<DERIVED&>(param);
+			derived_t& typed_param = static_cast<derived_t&>(*this);
 			// type to apply parse direct value T
 			if (name_stack.first == name_stack.second)
 			{
-				if(parser.readValue(typed_param.mData.mValue))
+				if(parser.readValue(typed_param.mValue))
 				{
-					typed_param.enclosingBlock().setLastChangedParam(param, true);
-					typed_param.setProvided(true);
-					typed_param.mData.clearKey();
-					typed_param.mData.mValueAge = NEWER_THAN_BLOCK;
-					typed_param.setBlockFromValue();
+					typed_param.clearValueName();
+					typed_param.mValueAge = VALUE_AUTHORITATIVE;
+					typed_param.updateBlockFromValue();
 
 					return true;
 				}
-
-				if(!TypeValues<T>::empty())
-				{
-					// try to parse a known named value
-					std::string name;
-					if (parser.readValue(name))
-					{
-						// try to parse a per type named value
-						if (TypeValues<T>::get(name, typed_param.mData.mValue))
-						{
-							typed_param.mData.setKey(name);
-							typed_param.enclosingBlock().setLastChangedParam(param, true);
-							typed_param.setProvided(true);
-							typed_param.mData.mValueAge = NEWER_THAN_BLOCK;
-							typed_param.setBlockFromValue();
-
-							return true;
-						}
-					}
-				}
 			}
 
 			// fall back on parsing block components for T
 			// if we deserialized at least one component...
-			if (typed_param.BaseBlock::deserializeBlock(parser, name_stack))
+			if (typed_param.BaseBlock::deserializeBlock(parser, name_stack, generation))
 			{
-				// ...our block is provided, and considered changed
-				typed_param.enclosingBlock().setLastChangedParam(param, true);
-				typed_param.setProvided(true);
 				return true;
 			}
+
 			return false;
 		}
 
-		static void serializeParam(const Param& param, Parser& parser, Parser::name_stack_t& name_stack, const Param* diff_param)
+		void serializeBlock(Parser& parser, Parser::name_stack_t name_stack = Parser::name_stack_t(), const BaseBlock* diff_block = NULL) const
 		{
-			const self_t& typed_param = static_cast<const self_t&>(param);
+			const self_t& typed_param = static_cast<const self_t&>(*this);
+			const self_t* diff_param = static_cast<const self_t*>(diff_block);
 			
-			if (!typed_param.isProvided()) return;
-			
-			std::string key = typed_param.mData.getKey();
+			std::string key = typed_param.getValueName();
 
 			// first try to write out name of name/value pair
 			if (!key.empty())
 			{
-				if (!diff_param || !ParamCompare<std::string>::equals(static_cast<const self_t*>(diff_param)->mData.getKey(), key))
+				if (!diff_param || !ParamCompare<std::string>::equals(diff_param->getValueName(), key))
 				{
-					if (!parser.writeValue(key, name_stack))
-					{
-						return;
-					}
+					parser.writeValue(key, name_stack);
 				}
 			}
 			// then try to serialize value directly
-			else if (!diff_param || !ParamCompare<T>::equals(typed_param.get(), (static_cast<const self_t*>(diff_param))->get()))	
+			else if (!diff_param || !ParamCompare<T>::equals(typed_param.getValue(), diff_param->getValue()))
             {
 				
-				if (parser.writeValue(typed_param.mData.mValue, name_stack)) 
+				if (!parser.writeValue(typed_param.getValue(), name_stack)) 
 				{
-					return;
+					//RN: *always* serialize provided components of BlockValue (don't pass diff_param on),
+					// since these tend to be viewed as the constructor arguments for the value T.  It seems
+					// cleaner to treat the uniqueness of a BlockValue according to the generated value, and
+					// not the individual components.  This way <color red="0" green="1" blue="0"/> will not
+					// be exported as <color green="1"/>, since it was probably the intent of the user to 
+					// be specific about the RGB color values.  This also fixes an issue where we distinguish
+					// between rect.left not being provided and rect.left being explicitly set to 0 (same as default)
+					block_t::serializeBlock(parser, name_stack, NULL);
 				}
-
-				//RN: *always* serialize provided components of BlockValue (don't pass diff_param on),
-				// since these tend to be viewed as the constructor arguments for the value T.  It seems
-				// cleaner to treat the uniqueness of a BlockValue according to the generated value, and
-				// not the individual components.  This way <color red="0" green="1" blue="0"/> will not
-				// be exported as <color green="1"/>, since it was probably the intent of the user to 
-				// be specific about the RGB color values.  This also fixes an issue where we distinguish
-				// between rect.left not being provided and rect.left being explicitly set to 0 (same as default)
-				typed_param.BaseBlock::serializeBlock(parser, name_stack, NULL);
 			}
 		}
 
-		static void inspectParam(const Param& param, Parser& parser, Parser::name_stack_t& name_stack, S32 min_count, S32 max_count)
+		bool inspectBlock(Parser& parser, Parser::name_stack_t name_stack = Parser::name_stack_t(), S32 min_count = 0, S32 max_count = S32_MAX) const
 		{
 			// first, inspect with actual type...
 			parser.inspectValue<T>(name_stack, min_count, max_count, NULL);
@@ -1742,25 +1790,19 @@ namespace LLInitParam
 				parser.inspectValue<std::string>(name_stack, min_count, max_count, TypeValues<T>::getPossibleValues());
 			}
 			// then recursively inspect contents...
-			const self_t& typed_param = static_cast<const self_t&>(param);
-			typed_param.inspectBlock(parser, name_stack);
+			return block_t::inspectBlock(parser, name_stack, min_count, max_count);
 		}
 
-
-		bool isProvided() const 
+		bool validateBlock(bool emit_errors = true) const
 		{
-			if (!Param::anyProvided()) return false;
-
-			// block has an updated parameter
-			// if cached value is stale, regenerate from params
-			if (mData.mValueAge == OLDER_THAN_BLOCK)
+			if (mValueAge == VALUE_NEEDS_UPDATE)
 			{
-				if (block_t::validateBlock(false))
+				if (block_t::validateBlock(emit_errors))
 				{
-					static_cast<const DERIVED*>(this)->setValueFromBlock();
 					// clear stale keyword associated with old value
-					mData.clearKey();
-					mData.mValueAge = SAME_AS_BLOCK;
+					TypeValues<T>::clearValueName();
+					mValueAge = BLOCK_AUTHORITATIVE;
+					static_cast<derived_t*>(const_cast<self_t*>(this))->updateValueFromBlock();
 					return true;
 				}
 				else
@@ -1777,104 +1819,75 @@ namespace LLInitParam
 			}
 		}
 
-		void set(value_assignment_t val, bool flag_as_provided = true)
-		{
-			Param::enclosingBlock().setLastChangedParam(*this, flag_as_provided);
-			
-			// set param version number to be up to date, so we ignore block contents
-			mData.mValueAge = NEWER_THAN_BLOCK;
-
-			mData.mValue = val;
-			mData.clearKey();
-			setProvided(flag_as_provided);
-			static_cast<DERIVED*>(this)->setBlockFromValue();
-		}
-
-		void setIfNotProvided(value_assignment_t val, bool flag_as_provided = true)
-		{
-			// don't override any user provided value
-			if (!isProvided())
-			{
-				set(val, flag_as_provided);
-			}
-		}
-
  		// propagate change status up to enclosing block
-		/*virtual*/ void setLastChangedParam(const Param& last_param, bool user_provided)
+		/*virtual*/ void paramChanged(const Param& changed_param, bool user_provided)
 		{ 
-			BaseBlock::setLastChangedParam(last_param, user_provided);
-			Param::enclosingBlock().setLastChangedParam(*this, user_provided);
+			BaseBlock::paramChanged(changed_param, user_provided);
 			if (user_provided)
-			{
-				setProvided(true);  // some component provided
+		{
 				// a parameter changed, so our value is out of date
-				mData.mValueAge = OLDER_THAN_BLOCK;
+				mValueAge = VALUE_NEEDS_UPDATE;
 			}
 		}
-
-	protected:
-		value_assignment_t get() const
+			
+		void setValue(value_assignment_t val)
 		{
-			// if some parameters were provided, issue warnings on invalid blocks
-			if (Param::anyProvided() && (mData.mValueAge == OLDER_THAN_BLOCK))
-			{
-				// go ahead and issue warnings at this point if any param is invalid
-				if(block_t::validateBlock(true))
-				{
-					static_cast<const DERIVED*>(this)->setValueFromBlock();
-					mData.clearKey();
-					mData.mValueAge = SAME_AS_BLOCK;
-				}
-			}
-
-			return mData.mValue;
+			derived_t& typed_param = static_cast<derived_t&>(*this);
+			// set param version number to be up to date, so we ignore block contents
+			mValueAge = VALUE_AUTHORITATIVE;
+			mValue = val;
+			typed_param.clearValueName();
+			static_cast<derived_t*>(const_cast<self_t*>(this))->updateBlockFromValue();
 		}
 
+		value_assignment_t getValue() const
+		{
+			validateBlock(true);
+			return mValue;
+		}
 
-		struct Data : public key_cache_t
+		T& getValue() 
 		{
-			Data(const T& value, EValueAge age) 
-			:	mValue(value),
-				mValueAge(age)
-			{}
+			validateBlock(true);
+			return mValue;
+		}
 
-			T			mValue;
-			EValueAge	mValueAge;
-		};
+		S32 				mKeyVersion;
 
-		// mutable to allow lazy updates on get
-		mutable Data		mData;
+	protected:
 
-	private:
-		static bool mergeWith(Param& dst, const Param& src, bool overwrite)
+		// use this from within updateValueFromBlock() to set the value without making it authoritative
+		void updateValue(value_assignment_t value)
 		{
-			const DERIVED& src_typed_param = static_cast<const DERIVED&>(src);
-			DERIVED& dst_typed_param = static_cast<DERIVED&>(dst);
+			mValue = value;
+		}
 
-			if (src_typed_param.isProvided()
-				&& (overwrite || !dst_typed_param.isProvided()))
+		bool merge(BlockDescriptor& block_data, const BaseBlock& other, bool overwrite)
+		{
+			const derived_t& src_typed_param = static_cast<const derived_t&>(other);
+
+			if (src_typed_param.mValueAge == VALUE_AUTHORITATIVE)
 			{
-				if (src_typed_param.mData.mValueAge == NEWER_THAN_BLOCK)
-				{
-					// copy value over
-					dst_typed_param.set(src_typed_param.get());
-				}
-				else
-				{
-					// merge individual parameters into destination
-					dst_typed_param.merge(block_t::selfBlockDescriptor(), src_typed_param, overwrite);
-				}
+				// copy value over
+				setValue(src_typed_param.getValue());
 				return true;
 			}
-			return false;
+			else
+			{
+				// merge individual parameters into destination
+				return block_t::merge(block_t::selfBlockDescriptor(), src_typed_param, overwrite);
+			}
 		}
-	};
 
-	template<> 
-	struct ParamCompare<LLSD, false>
-	{
-		static bool equals(const LLSD &a, const LLSD &b);
+		mutable S32			mValidatedVersion;
+		mutable bool 		mValidated; // lazy validation flag
+
+	private:
+
+		mutable T			mValue;
+		mutable EValueAge	mValueAge;
 	};
 }
 
+
 #endif // LL_LLPARAM_H
diff --git a/indra/llxuixml/lltrans.cpp b/indra/llxuixml/lltrans.cpp
index 11127a53f52d2ca4e0fa25e52a807fb73223a1e3..e13d73c6401e48364932f838f6799eff8cf87a44 100644
--- a/indra/llxuixml/lltrans.cpp
+++ b/indra/llxuixml/lltrans.cpp
@@ -255,3 +255,8 @@ std::string LLTrans::getCountString(const std::string& language, const std::stri
 	std::string key = llformat("%s%s", xml_desc.c_str(), form);
 	return getString(key, args);
 }
+
+void LLTrans::setDefaultArg(const std::string& name, const std::string& value)
+{
+	sDefaultArgs[name] = value;
+}
diff --git a/indra/llxuixml/lltrans.h b/indra/llxuixml/lltrans.h
index 42c27b6976eb13eb908fc1499f6c7eee9c9e8d02..5b127b53cff94472f2f388448d7bcf430ee64dd8 100644
--- a/indra/llxuixml/lltrans.h
+++ b/indra/llxuixml/lltrans.h
@@ -110,6 +110,8 @@ class LLTrans
 		return sDefaultArgs;
 	}
 
+	static void setDefaultArg(const std::string& name, const std::string& value);
+
 	// insert default args into an arg list
 	static void getArgs(LLStringUtil::format_map_t& args)
 	{
diff --git a/indra/lscript/lscript_compile/indra.l b/indra/lscript/lscript_compile/indra.l
index 8fe9f5ed29c1f9752addde37f2b8f3fd5c2c4d42..188c9e1950a0bbfffd2c3d2792875a376045150f 100644
--- a/indra/lscript/lscript_compile/indra.l
+++ b/indra/lscript/lscript_compile/indra.l
@@ -8,8 +8,11 @@ FS			(f|F)
 %n 4000
 %p 5000
 
+%top {
+	#include "linden_common.h"
+}
+
 %{
-#include "linden_common.h"
 // Deal with the fact that lex/yacc generates unreachable code
 #ifdef LL_WINDOWS
 #pragma warning (disable : 4018) // warning C4018: signed/unsigned mismatch
diff --git a/indra/mac_updater/CMakeLists.txt b/indra/mac_updater/CMakeLists.txt
index a4a6b50c6c14fbfc18e733b043a9c5485b143804..00dcedecaa90560272fabefa6d52e599db9aaff9 100644
--- a/indra/mac_updater/CMakeLists.txt
+++ b/indra/mac_updater/CMakeLists.txt
@@ -5,6 +5,7 @@ project(mac_updater)
 include(00-Common)
 include(OpenSSL)
 include(CURL)
+include(CARes)
 include(LLCommon)
 include(LLVFS)
 include(Linking)
@@ -12,6 +13,8 @@ include(Linking)
 include_directories(
     ${LLCOMMON_INCLUDE_DIRS}
     ${LLVFS_INCLUDE_DIRS}
+    ${CURL_INCLUDE_DIRS}
+    ${CARES_INCLUDE_DIRS}
     )
 
 set(mac_updater_SOURCE_FILES
@@ -53,6 +56,7 @@ target_link_libraries(mac-updater
     ${OPENSSL_LIBRARIES}
     ${CRYPTO_LIBRARIES}
     ${CURL_LIBRARIES}
+    ${CARES_LIBRARIES}
     ${LLCOMMON_LIBRARIES}
     )
 
diff --git a/indra/mac_updater/mac_updater.cpp b/indra/mac_updater/mac_updater.cpp
index 5d19e8a8899b0eb3ca3bd36d558cf6ca5d5a7b4c..809f66cb1d443dfe793440726361baab49d7c1ca 100644
--- a/indra/mac_updater/mac_updater.cpp
+++ b/indra/mac_updater/mac_updater.cpp
@@ -1230,20 +1230,14 @@ void *updatethreadproc(void*)
 	// Move work directory to the trash
 	if(tempDir[0] != 0)
 	{
-//		chdir("/");
-//		FSDeleteObjects(tempDirRef);
-
 		llinfos << "Moving work directory to the trash." << llendl;
 
-		err = FSMoveObject(&tempDirRef, &trashFolderRef, NULL);
+		FSRef trashRef;
+		OSStatus err = FSMoveObjectToTrashSync(&tempDirRef, &trashRef, 0); 
 		if(err != noErr) {
 			llwarns << "failed to move files to trash, (error code " <<
 				err << ")" << llendl;
 		}
-
-//		snprintf(temp, sizeof(temp), "rm -rf '%s'", tempDir);
-//		printf("%s\n", temp);
-//		system(temp);
 	}
 	
 	if(!gCancelled  && !gFailure && (target[0] != 0))
diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt
index 3b1f6795401cd2a35558e492a07688d470e3ea3a..b36291f0e8686d771c6b6edf4f40eaa7e94518b1 100644
--- a/indra/media_plugins/webkit/CMakeLists.txt
+++ b/indra/media_plugins/webkit/CMakeLists.txt
@@ -121,8 +121,8 @@ if (DARWIN)
   add_custom_command(
     TARGET media_plugin_webkit POST_BUILD
 #    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/libllqtwebkit.dylib
-    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/
-    DEPENDS media_plugin_webkit ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib
+    COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/
+    DEPENDS media_plugin_webkit ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
     )
     
 endif (DARWIN)
diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
index d6f8ae3e16ae6d3b6a6aa58310cd06c4fe554ec3..9ba8edbb5907ed3faa2e062e9cb7d7221dd1e744 100644
--- a/indra/media_plugins/webkit/media_plugin_webkit.cpp
+++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp
@@ -490,6 +490,15 @@ class MediaPluginWebKit :
 		}
 	}
 
+	////////////////////////////////////////////////////////////////////////////////
+	// virtual
+	void onNavigateErrorPage(const EventType& event)
+	{
+		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_error_page");
+		message.setValueS32("status_code", event.getIntValue());
+		sendMessage(message);
+	}
+	
 	////////////////////////////////////////////////////////////////////////////////
 	// virtual
 	void onLocationChange(const EventType& event)
@@ -519,6 +528,11 @@ class MediaPluginWebKit :
 	{
 		LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_nofollow");
 		message.setValue("uri", event.getEventUri());
+#if LLQTWEBKIT_API_VERSION >= 7
+		message.setValue("nav_type", event.getNavigationType());
+#else
+		message.setValue("nav_type", "clicked");
+#endif
 		sendMessage(message);
 	}
 	
@@ -1231,7 +1245,9 @@ void MediaPluginWebKit::receiveMessage(const char *message_string)
 				std::string url = message_in.getValue("url");
 				if ( 404 == code )	// browser lib only supports 404 right now
 				{
-					LLQtWebKit::getInstance()->set404RedirectUrl( mBrowserWindowId, url );
+#if LLQTWEBKIT_API_VERSION < 8
+				 	LLQtWebKit::getInstance()->set404RedirectUrl( mBrowserWindowId, url );
+#endif
 				};
 			}
 			else if(message_name == "set_user_agent")
diff --git a/indra/media_plugins/winmmshim/CMakeLists.txt b/indra/media_plugins/winmmshim/CMakeLists.txt
index 387214088f16f474ab4582827d5304d6e4ad1cb6..bf74f818093d60144e59752d215c6f669ef01ce6 100644
--- a/indra/media_plugins/winmmshim/CMakeLists.txt
+++ b/indra/media_plugins/winmmshim/CMakeLists.txt
@@ -3,6 +3,12 @@
 project(winmm_shim)
 
 ### winmm_shim
+# *HACK - override msvcrt implementation (intialized on 00-Common) to be
+# statically linked for winmm.dll this relies on vc taking the last flag on
+# the command line
+set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
+set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT")
+set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
 
 set(winmm_shim_SOURCE_FILES
     forwarding_api.cpp
diff --git a/indra/media_plugins/winmmshim/forwarding_api.cpp b/indra/media_plugins/winmmshim/forwarding_api.cpp
index eff7e204516cc91f169d01bcc6c4b001108c4d14..495e08942b14cf91bf2abf7d5bb2fa4a6971b224 100644
--- a/indra/media_plugins/winmmshim/forwarding_api.cpp
+++ b/indra/media_plugins/winmmshim/forwarding_api.cpp
@@ -389,90 +389,105 @@ void init_function_pointers(HMODULE winmm_handle)
 extern "C" {
 	LRESULT   WINAPI CloseDriver( HDRVR hDriver, LPARAM lParam1, LPARAM lParam2)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"CloseDriver\n");
 		return CloseDriver_orig( hDriver, lParam1, lParam2);
 	}
 
 	HDRVR     WINAPI OpenDriver( LPCWSTR szDriverName, LPCWSTR szSectionName, LPARAM lParam2)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"OpenDriver\n");
 		return OpenDriver_orig( szDriverName, szSectionName, lParam2);
 	}
 
 	LRESULT   WINAPI SendDriverMessage( HDRVR hDriver, UINT message, LPARAM lParam1, LPARAM lParam2)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"SendDriverMessage\n");
 		return SendDriverMessage_orig( hDriver, message, lParam1, lParam2);
 	}
 
 	HMODULE   WINAPI DrvGetModuleHandle( HDRVR hDriver)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"DrvGetModuleHandle\n");
 		return DrvGetModuleHandle_orig( hDriver);
 	}
 
 	HMODULE   WINAPI GetDriverModuleHandle( HDRVR hDriver)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"GetDriverModuleHandle\n");
 		return GetDriverModuleHandle_orig( hDriver);
 	}
 
 	LRESULT   WINAPI DefDriverProc( DWORD_PTR dwDriverIdentifier, HDRVR hdrvr, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"DefDriverProc\n");
 		return DefDriverProc_orig( dwDriverIdentifier, hdrvr, uMsg, lParam1, lParam2);
 	}
 
 	BOOL WINAPI DriverCallback( DWORD dwCallBack, DWORD dwFlags, HDRVR hdrvr, DWORD msg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"DriverCallback\n");
 		return DriverCallback_orig(dwCallBack, dwFlags, hdrvr, msg, dwUser, dwParam1, dwParam2);
 	}
 
 	UINT WINAPI mmsystemGetVersion(void)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmsystemGetVersion\n");
 		return mmsystemGetVersion_orig();
 	}
 
 	BOOL WINAPI sndPlaySoundA( LPCSTR pszSound, UINT fuSound)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"sndPlaySoundA\n");
 		return sndPlaySoundA_orig( pszSound, fuSound);
 	}
 
 	BOOL WINAPI sndPlaySoundW( LPCWSTR pszSound, UINT fuSound)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"sndPlaySoundW\n");
 		return sndPlaySoundW_orig( pszSound, fuSound);
 	}
 
 	BOOL WINAPI PlaySoundA( LPCSTR pszSound, HMODULE hmod, DWORD fdwSound)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"PlaySoundA\n");
 		return PlaySoundA_orig( pszSound, hmod, fdwSound);
 	}
 
 	BOOL WINAPI PlaySoundW( LPCWSTR pszSound, HMODULE hmod, DWORD fdwSound)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"PlaySoundW\n");
 		return PlaySoundW_orig( pszSound, hmod, fdwSound);
 	}
 
 	UINT WINAPI waveOutGetNumDevs(void)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutGetNumDevs\n");
 		return waveOutGetNumDevs_orig();
 	}
 
 	MMRESULT WINAPI waveOutGetDevCapsA( UINT_PTR uDeviceID, LPWAVEOUTCAPSA pwoc, UINT cbwoc)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutGetDevCapsA\n");
 		return waveOutGetDevCapsA_orig( uDeviceID, pwoc, cbwoc);
 	}
 
 	MMRESULT WINAPI waveOutGetDevCapsW( UINT_PTR uDeviceID, LPWAVEOUTCAPSW pwoc, UINT cbwoc)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutGetDevCapsW\n");
 		return waveOutGetDevCapsW_orig( uDeviceID, pwoc, cbwoc);
 	}
@@ -480,24 +495,28 @@ extern "C" {
 
 	MMRESULT WINAPI waveOutGetVolume( HWAVEOUT hwo, LPDWORD pdwVolume)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutGetVolume\n");
 		return waveOutGetVolume_orig( hwo, pdwVolume);
 	}
 
 	MMRESULT WINAPI waveOutSetVolume( HWAVEOUT hwo, DWORD dwVolume)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutSetVolume\n");
 		return waveOutSetVolume_orig( hwo, dwVolume);
 	}
 
 	MMRESULT WINAPI waveOutGetErrorTextA( MMRESULT mmrError, LPSTR pszText, UINT cchText)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutGetErrorTextA\n");
 		return waveOutGetErrorTextA_orig( mmrError, pszText, cchText);
 	}
 
 	MMRESULT WINAPI waveOutGetErrorTextW( MMRESULT mmrError, LPWSTR pszText, UINT cchText)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutGetErrorTextW\n");
 		return waveOutGetErrorTextW_orig( mmrError, pszText, cchText);
 	}
@@ -516,12 +535,14 @@ extern "C" {
 
 	MMRESULT WINAPI waveOutPrepareHeader( HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutPrepareHeader\n");
 		return waveOutPrepareHeader_orig( hwo, pwh, cbwh);
 	}
 
 	MMRESULT WINAPI waveOutUnprepareHeader( HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutUnprepareHeader\n");
 		return waveOutUnprepareHeader_orig( hwo, pwh, cbwh);
 	}
@@ -535,834 +556,973 @@ extern "C" {
 
 	MMRESULT WINAPI waveOutPause( HWAVEOUT hwo)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutPause\n");
 		return waveOutPause_orig( hwo);
 	}
 
 	MMRESULT WINAPI waveOutRestart( HWAVEOUT hwo)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutRestart\n");
 		return waveOutRestart_orig( hwo);
 	}
 
 	MMRESULT WINAPI waveOutReset( HWAVEOUT hwo)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutReset\n");
 		return waveOutReset_orig( hwo);
 	}
 
 	MMRESULT WINAPI waveOutBreakLoop( HWAVEOUT hwo)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutBreakLoop\n");
 		return waveOutBreakLoop_orig( hwo);
 	}
 
 	MMRESULT WINAPI waveOutGetPosition( HWAVEOUT hwo, LPMMTIME pmmt, UINT cbmmt)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutGetPosition\n");
 		return waveOutGetPosition_orig( hwo, pmmt, cbmmt);
 	}
 
 	MMRESULT WINAPI waveOutGetPitch( HWAVEOUT hwo, LPDWORD pdwPitch)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutGetPitch\n");
 		return waveOutGetPitch_orig( hwo, pdwPitch);
 	}
 
 	MMRESULT WINAPI waveOutSetPitch( HWAVEOUT hwo, DWORD dwPitch)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutSetPitch\n");
 		return waveOutSetPitch_orig( hwo, dwPitch);
 	}
 
 	MMRESULT WINAPI waveOutGetPlaybackRate( HWAVEOUT hwo, LPDWORD pdwRate)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutGetPlaybackRate\n");
 		return waveOutGetPlaybackRate_orig( hwo, pdwRate);
 	}
 
 	MMRESULT WINAPI waveOutSetPlaybackRate( HWAVEOUT hwo, DWORD dwRate)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutSetPlaybackRate\n");
 		return waveOutSetPlaybackRate_orig( hwo, dwRate);
 	}
 
 	MMRESULT WINAPI waveOutGetID( HWAVEOUT hwo, LPUINT puDeviceID)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutGetID\n");
 		return waveOutGetID_orig( hwo, puDeviceID);
 	}
 
 	MMRESULT WINAPI waveOutMessage( HWAVEOUT hwo, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveOutMessage\n");
 		return waveOutMessage_orig( hwo, uMsg, dw1, dw2);
 	}
 
 	UINT WINAPI waveInGetNumDevs(void)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveInGetNumDevs\n");
 		return waveInGetNumDevs_orig();
 	}
 
 	MMRESULT WINAPI waveInGetDevCapsA( UINT_PTR uDeviceID, LPWAVEINCAPSA pwic, UINT cbwic)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveInGetDevCapsA\n");
 		return waveInGetDevCapsA_orig( uDeviceID, pwic, cbwic);
 	}
 
 	MMRESULT WINAPI waveInGetDevCapsW( UINT_PTR uDeviceID, LPWAVEINCAPSW pwic, UINT cbwic)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveInGetDevCapsW\n");
 		return waveInGetDevCapsW_orig( uDeviceID, pwic, cbwic);
 	}
 
 	MMRESULT WINAPI waveInGetErrorTextA(MMRESULT mmrError, LPSTR pszText, UINT cchText)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveInGetErrorTextA\n");
 		return waveInGetErrorTextA_orig(mmrError, pszText, cchText);
 	}
 
 	MMRESULT WINAPI waveInGetErrorTextW(MMRESULT mmrError, LPWSTR pszText, UINT cchText)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveInGetErrorTextW\n");
 		return waveInGetErrorTextW_orig(mmrError, pszText, cchText);
 	}
 
 	MMRESULT WINAPI waveInOpen( LPHWAVEIN phwi, UINT uDeviceID, LPCWAVEFORMATEX pwfx, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveInOpen\n");
 		return waveInOpen_orig(phwi, uDeviceID, pwfx, dwCallback, dwInstance, fdwOpen);
 	}
 
 	MMRESULT WINAPI waveInClose( HWAVEIN hwi)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveInClose\n");
 		return waveInClose_orig( hwi);
 	}
 
 	MMRESULT WINAPI waveInPrepareHeader( HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveInPrepareHeader\n");
 		return waveInPrepareHeader_orig( hwi, pwh, cbwh);
 	}
 
 	MMRESULT WINAPI waveInUnprepareHeader( HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveInUnprepareHeader\n");
 		return waveInUnprepareHeader_orig( hwi, pwh, cbwh);
 	}
 
 	MMRESULT WINAPI waveInAddBuffer( HWAVEIN hwi, LPWAVEHDR pwh, UINT cbwh)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveInAddBuffer\n");
 		return waveInAddBuffer_orig( hwi, pwh, cbwh);
 	}
 
 	MMRESULT WINAPI waveInStart( HWAVEIN hwi)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveInStart\n");
 		return waveInStart_orig( hwi);
 	}
 
 	MMRESULT WINAPI waveInStop( HWAVEIN hwi)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveInStop\n");
 		return waveInStop_orig(hwi);
 	}
 
 	MMRESULT WINAPI waveInReset( HWAVEIN hwi)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveInReset\n");
 		return waveInReset_orig(hwi);
 	}
 
 	MMRESULT WINAPI waveInGetPosition( HWAVEIN hwi, LPMMTIME pmmt, UINT cbmmt)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveInGetPosition\n");
 		return waveInGetPosition_orig( hwi, pmmt, cbmmt);
 	}
 
 	MMRESULT WINAPI waveInGetID( HWAVEIN hwi, LPUINT puDeviceID)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveInGetID\n");
 		return waveInGetID_orig( hwi, puDeviceID);
 	}
 
 	MMRESULT WINAPI waveInMessage( HWAVEIN hwi, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"waveInMessage\n");
 		return waveInMessage_orig( hwi, uMsg, dw1, dw2);
 	}
 
 	UINT WINAPI midiOutGetNumDevs(void)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiOutGetNumDevs\n");
 		return midiOutGetNumDevs_orig();
 	}
 
 	MMRESULT WINAPI midiStreamOpen( LPHMIDISTRM phms, LPUINT puDeviceID, DWORD cMidi, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiStreamOpen\n");
 		return midiStreamOpen_orig( phms, puDeviceID, cMidi, dwCallback, dwInstance, fdwOpen);
 	}
 
 	MMRESULT WINAPI midiStreamClose( HMIDISTRM hms)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiStreamClose\n");
 		return midiStreamClose_orig( hms);
 	}
 
 	MMRESULT WINAPI midiStreamProperty( HMIDISTRM hms, LPBYTE lppropdata, DWORD dwProperty)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiStreamProperty\n");
 		return midiStreamProperty_orig( hms, lppropdata, dwProperty);
 	}
 
 	MMRESULT WINAPI midiStreamPosition( HMIDISTRM hms, LPMMTIME lpmmt, UINT cbmmt)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiStreamPosition\n");
 		return midiStreamPosition_orig( hms, lpmmt, cbmmt);
 	}
 
 	MMRESULT WINAPI midiStreamOut( HMIDISTRM hms, LPMIDIHDR pmh, UINT cbmh)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiStreamOut\n");
 		return midiStreamOut_orig( hms, pmh, cbmh);
 	}
 
 	MMRESULT WINAPI midiStreamPause( HMIDISTRM hms)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiStreamPause\n");
 		return midiStreamPause_orig( hms);
 	}
 
 	MMRESULT WINAPI midiStreamRestart( HMIDISTRM hms)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiStreamRestart\n");
 		return midiStreamRestart_orig( hms);
 	}
 
 	MMRESULT WINAPI midiStreamStop( HMIDISTRM hms)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiStreamStop\n");
 		return midiStreamStop_orig( hms);
 	}
 
 	MMRESULT WINAPI midiConnect( HMIDI hmi, HMIDIOUT hmo, LPVOID pReserved)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiConnect\n");
 		return midiConnect_orig( hmi, hmo, pReserved);
 	}
 
 	MMRESULT WINAPI midiDisconnect( HMIDI hmi, HMIDIOUT hmo, LPVOID pReserved)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiDisconnect\n");
 		return midiDisconnect_orig( hmi, hmo, pReserved);
 	}
 
 	MMRESULT WINAPI midiOutGetDevCapsA( UINT_PTR uDeviceID, LPMIDIOUTCAPSA pmoc, UINT cbmoc)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiOutGetDevCapsA\n");
 		return midiOutGetDevCapsA_orig( uDeviceID, pmoc, cbmoc);
 	}
 
 	MMRESULT WINAPI midiOutGetDevCapsW( UINT_PTR uDeviceID, LPMIDIOUTCAPSW pmoc, UINT cbmoc)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiOutGetDevCapsW\n");
 		return midiOutGetDevCapsW_orig( uDeviceID, pmoc, cbmoc);
 	}
 
 	MMRESULT WINAPI midiOutGetVolume( HMIDIOUT hmo, LPDWORD pdwVolume)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiOutGetVolume\n");
 		return midiOutGetVolume_orig( hmo, pdwVolume);
 	}
 
 	MMRESULT WINAPI midiOutSetVolume( HMIDIOUT hmo, DWORD dwVolume)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiOutSetVolume\n");
 		return midiOutSetVolume_orig( hmo, dwVolume);
 	}
 
 	MMRESULT WINAPI midiOutGetErrorTextA( MMRESULT mmrError, LPSTR pszText, UINT cchText)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiOutGetErrorTextA\n");
 		return midiOutGetErrorTextA_orig( mmrError, pszText, cchText);
 	}
 
 	MMRESULT WINAPI midiOutGetErrorTextW( MMRESULT mmrError, LPWSTR pszText, UINT cchText)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiOutGetErrorTextW\n");
 		return midiOutGetErrorTextW_orig( mmrError, pszText, cchText);
 	}
 
 	MMRESULT WINAPI midiOutOpen( LPHMIDIOUT phmo, UINT uDeviceID, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiOutOpen\n");
 		return midiOutOpen_orig(phmo, uDeviceID, dwCallback, dwInstance, fdwOpen);
 	}
 
 	MMRESULT WINAPI midiOutClose( HMIDIOUT hmo)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiOutClose\n");
 		return midiOutClose_orig( hmo);
 	}
 
 	MMRESULT WINAPI midiOutPrepareHeader( HMIDIOUT hmo, LPMIDIHDR pmh, UINT cbmh)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiOutPrepareHeader\n");
 		return midiOutPrepareHeader_orig( hmo, pmh, cbmh);
 	}
 
 	MMRESULT WINAPI midiOutUnprepareHeader(HMIDIOUT hmo, LPMIDIHDR pmh, UINT cbmh)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiOutUnprepareHeader\n");
 		return midiOutUnprepareHeader_orig(hmo, pmh, cbmh);
 	}
 
 	MMRESULT WINAPI midiOutShortMsg( HMIDIOUT hmo, DWORD dwMsg)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiOutShortMsg\n");
 		return midiOutShortMsg_orig( hmo, dwMsg);
 	}
 
 	MMRESULT WINAPI midiOutLongMsg(HMIDIOUT hmo, LPMIDIHDR pmh, UINT cbmh)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiOutLongMsg\n");
 		return midiOutLongMsg_orig(hmo, pmh, cbmh);
 	}
 
 	MMRESULT WINAPI midiOutReset( HMIDIOUT hmo)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiOutReset\n");
 		return midiOutReset_orig( hmo);
 	}
 
 	MMRESULT WINAPI midiOutCachePatches( HMIDIOUT hmo, UINT uBank, LPWORD pwpa, UINT fuCache)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiOutCachePatches\n");
 		return midiOutCachePatches_orig( hmo, uBank, pwpa, fuCache);
 	}
 
 	MMRESULT WINAPI midiOutCacheDrumPatches( HMIDIOUT hmo, UINT uPatch, LPWORD pwkya, UINT fuCache)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiOutCacheDrumPatches\n");
 		return midiOutCacheDrumPatches_orig( hmo, uPatch, pwkya, fuCache);
 	}
 
 	MMRESULT WINAPI midiOutGetID( HMIDIOUT hmo, LPUINT puDeviceID)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiOutGetID\n");
 		return midiOutGetID_orig( hmo, puDeviceID);
 	}
 
 	MMRESULT WINAPI midiOutMessage( HMIDIOUT hmo, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiOutMessage\n");
 		return midiOutMessage_orig( hmo, uMsg, dw1, dw2);
 	}
 
 	UINT WINAPI midiInGetNumDevs(void)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiInGetNumDevs\n");
 		return midiInGetNumDevs_orig();
 	}
 
 	MMRESULT WINAPI midiInGetDevCapsA( UINT_PTR uDeviceID, LPMIDIINCAPSA pmic, UINT cbmic)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiInGetDevCapsA\n");
 		return midiInGetDevCapsA_orig( uDeviceID, pmic, cbmic);
 	}
 
 	MMRESULT WINAPI midiInGetDevCapsW( UINT_PTR uDeviceID, LPMIDIINCAPSW pmic, UINT cbmic)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiInGetDevCapsW\n");
 		return midiInGetDevCapsW_orig( uDeviceID, pmic, cbmic);
 	}
 
 	MMRESULT WINAPI midiInGetErrorTextA( MMRESULT mmrError, LPSTR pszText, UINT cchText)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiInGetErrorTextA\n");
 		return midiInGetErrorTextA_orig( mmrError, pszText, cchText);
 	}
 
 	MMRESULT WINAPI midiInGetErrorTextW( MMRESULT mmrError, LPWSTR pszText, UINT cchText)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiInGetErrorTextW\n");
 		return midiInGetErrorTextW_orig( mmrError, pszText, cchText);
 	}
 
 	MMRESULT WINAPI midiInOpen( LPHMIDIIN phmi, UINT uDeviceID, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiInOpen\n");
 		return midiInOpen_orig(phmi, uDeviceID, dwCallback, dwInstance, fdwOpen);
 	}
 
 	MMRESULT WINAPI midiInClose( HMIDIIN hmi)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiInClose\n");
 		return midiInClose_orig( hmi);
 	}
 
 	MMRESULT WINAPI midiInPrepareHeader( HMIDIIN hmi, LPMIDIHDR pmh, UINT cbmh)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiInPrepareHeader\n");
 		return midiInPrepareHeader_orig( hmi, pmh, cbmh);
 	}
 
 	MMRESULT WINAPI midiInUnprepareHeader( HMIDIIN hmi, LPMIDIHDR pmh, UINT cbmh)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiInUnprepareHeader\n");
 		return midiInUnprepareHeader_orig( hmi, pmh, cbmh);
 	}
 
 	MMRESULT WINAPI midiInAddBuffer( HMIDIIN hmi, LPMIDIHDR pmh, UINT cbmh)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiInAddBuffer\n");
 		return midiInAddBuffer_orig( hmi, pmh, cbmh);
 	}
 
 	MMRESULT WINAPI midiInStart( HMIDIIN hmi)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiInStart\n");
 		return midiInStart_orig( hmi);
 	}
 
 	MMRESULT WINAPI midiInStop( HMIDIIN hmi)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiInStop\n");
 		return midiInStop_orig(hmi);
 	}
 
 	MMRESULT WINAPI midiInReset( HMIDIIN hmi)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiInReset\n");
 		return midiInReset_orig( hmi);
 	}
 
 	MMRESULT WINAPI midiInGetID( HMIDIIN hmi, LPUINT puDeviceID)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiInGetID\n");
 		return midiInGetID_orig( hmi, puDeviceID);
 	}
 
 	MMRESULT WINAPI midiInMessage( HMIDIIN hmi, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"midiInMessage\n");
 		return midiInMessage_orig( hmi, uMsg, dw1, dw2);
 	}
 
 	UINT WINAPI auxGetNumDevs(void)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"auxGetNumDevs\n");
 		return auxGetNumDevs_orig();
 	}
 
 	MMRESULT WINAPI auxGetDevCapsA( UINT_PTR uDeviceID, LPAUXCAPSA pac, UINT cbac)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"auxGetDevCapsA\n");
 		return auxGetDevCapsA_orig( uDeviceID, pac, cbac);
 	}
 
 	MMRESULT WINAPI auxGetDevCapsW( UINT_PTR uDeviceID, LPAUXCAPSW pac, UINT cbac)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"auxGetDevCapsW\n");
 		return auxGetDevCapsW_orig( uDeviceID, pac, cbac);
 	}
 
 	MMRESULT WINAPI auxSetVolume( UINT uDeviceID, DWORD dwVolume)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"auxSetVolume\n");
 		return auxSetVolume_orig( uDeviceID, dwVolume);
 	}
 
 	MMRESULT WINAPI auxGetVolume( UINT uDeviceID, LPDWORD pdwVolume)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"auxGetVolume\n");
 		return auxGetVolume_orig( uDeviceID, pdwVolume);
 	}
 
 	MMRESULT WINAPI auxOutMessage( UINT uDeviceID, UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"auxOutMessage\n");
 		return auxOutMessage_orig( uDeviceID, uMsg, dw1, dw2);
 	}
 
 	UINT WINAPI mixerGetNumDevs(void)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mixerGetNumDevs\n");
 		return mixerGetNumDevs_orig();
 	}
 
 	MMRESULT WINAPI mixerGetDevCapsA( UINT_PTR uMxId, LPMIXERCAPSA pmxcaps, UINT cbmxcaps)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mixerGetDevCapsA\n");
 		return mixerGetDevCapsA_orig( uMxId, pmxcaps, cbmxcaps);
 	}
 
 	MMRESULT WINAPI mixerGetDevCapsW( UINT_PTR uMxId, LPMIXERCAPSW pmxcaps, UINT cbmxcaps)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mixerGetDevCapsW\n");
 		return mixerGetDevCapsW_orig( uMxId, pmxcaps, cbmxcaps);
 	}
 
 	MMRESULT WINAPI mixerOpen( LPHMIXER phmx, UINT uMxId, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mixerOpen\n");
 		return mixerOpen_orig( phmx, uMxId, dwCallback, dwInstance, fdwOpen);
 	}
 
 	MMRESULT WINAPI mixerClose( HMIXER hmx)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mixerClose\n");
 		return mixerClose_orig( hmx);
 	}
 
 	DWORD WINAPI mixerMessage( HMIXER hmx, UINT uMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mixerMessage\n");
 		return mixerMessage_orig( hmx, uMsg, dwParam1, dwParam2);
 	}
 
 	MMRESULT WINAPI mixerGetLineInfoA( HMIXEROBJ hmxobj, LPMIXERLINEA pmxl, DWORD fdwInfo)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mixerGetLineInfoA\n");
 		return mixerGetLineInfoA_orig( hmxobj, pmxl, fdwInfo);
 	}
 
 	MMRESULT WINAPI mixerGetLineInfoW( HMIXEROBJ hmxobj, LPMIXERLINEW pmxl, DWORD fdwInfo)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mixerGetLineInfoW\n");
 		return mixerGetLineInfoW_orig( hmxobj, pmxl, fdwInfo);
 	}
 
 	MMRESULT WINAPI mixerGetID( HMIXEROBJ hmxobj, UINT FAR *puMxId, DWORD fdwId)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mixerGetID\n");
 		return mixerGetID_orig( hmxobj, puMxId, fdwId);
 	}
 
 	MMRESULT WINAPI mixerGetLineControlsA( HMIXEROBJ hmxobj, LPMIXERLINECONTROLSA pmxlc, DWORD fdwControls)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mixerGetLineControlsA\n");
 		return mixerGetLineControlsA_orig( hmxobj, pmxlc, fdwControls);
 	}
 
 	MMRESULT WINAPI mixerGetLineControlsW( HMIXEROBJ hmxobj, LPMIXERLINECONTROLSW pmxlc, DWORD fdwControls)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mixerGetLineControlsW\n");
 		return mixerGetLineControlsW_orig( hmxobj, pmxlc, fdwControls);
 	}
 
 	MMRESULT WINAPI mixerGetControlDetailsA( HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mixerGetControlDetailsA\n");
 		return mixerGetControlDetailsA_orig( hmxobj, pmxcd, fdwDetails);
 	}
 
 	MMRESULT WINAPI mixerGetControlDetailsW( HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mixerGetControlDetailsW\n");
 		return mixerGetControlDetailsW_orig( hmxobj, pmxcd, fdwDetails);
 	}
 
 	MMRESULT WINAPI mixerSetControlDetails( HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mixerSetControlDetails\n");
 		return mixerSetControlDetails_orig( hmxobj, pmxcd, fdwDetails);
 	}
 
 	DWORD    WINAPI mmGetCurrentTask(void)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmGetCurrentTask\n");
 		return mmGetCurrentTask_orig();
 	}
 
 	void WINAPI mmTaskBlock(DWORD val)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmTaskBlock\n");
 		return mmTaskBlock_orig(val);
 	}
 
 	UINT WINAPI mmTaskCreate(LPTASKCALLBACK a, HANDLE* b, DWORD_PTR c)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmTaskCreate\n");
 		return mmTaskCreate_orig(a, b, c);
 	}
 
 	BOOL WINAPI mmTaskSignal(DWORD a)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmTaskSignal\n");
 		return mmTaskSignal_orig(a);
 	}
 
 	VOID WINAPI mmTaskYield()
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmTaskYield\n");
 		mmTaskYield_orig();
 	}
 
 	MMRESULT WINAPI timeGetSystemTime( LPMMTIME pmmt, UINT cbmmt)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"timeGetSystemTime\n");
 		return timeGetSystemTime_orig( pmmt, cbmmt);
 	}
 
 	DWORD WINAPI timeGetTime(void)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"timeGetTime\n");
 		return timeGetTime_orig();
 	}
 
 	MMRESULT WINAPI timeSetEvent( UINT uDelay, UINT uResolution, LPTIMECALLBACK fptc, DWORD_PTR dwUser, UINT fuEvent)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"timeSetEvent\n");
 		return timeSetEvent_orig(uDelay, uResolution, fptc, dwUser, fuEvent);
 	}
 
 	MMRESULT WINAPI timeKillEvent( UINT uTimerID)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"timeKillEvent\n");
 		return timeKillEvent_orig( uTimerID);
 	}
 
 	MMRESULT WINAPI timeGetDevCaps( LPTIMECAPS ptc, UINT cbtc)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"timeGetDevCaps\n");
 		return timeGetDevCaps_orig( ptc, cbtc);
 	}
 
 	MMRESULT WINAPI timeBeginPeriod( UINT uPeriod)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"timeBeginPeriod\n");
 		return timeBeginPeriod_orig( uPeriod);
 	}
 
 	MMRESULT WINAPI timeEndPeriod( UINT uPeriod)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"timeEndPeriod\n");
 		return timeEndPeriod_orig( uPeriod);
 	}
 
 	UINT WINAPI joyGetNumDevs(void)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"joyGetNumDevs\n");
 		return joyGetNumDevs_orig();
 	}
 
 	MMRESULT WINAPI joyConfigChanged(DWORD dwFlags)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"joyConfigChanged\n");
 		return joyConfigChanged_orig(dwFlags);
 	}
 
 	MMRESULT WINAPI joyGetDevCapsA( UINT_PTR uJoyID, LPJOYCAPSA pjc, UINT cbjc)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"joyGetDevCapsA\n");
 		return joyGetDevCapsA_orig( uJoyID, pjc, cbjc);
 	}
 
 	MMRESULT WINAPI joyGetDevCapsW( UINT_PTR uJoyID, LPJOYCAPSW pjc, UINT cbjc)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"joyGetDevCapsW\n");
 		return joyGetDevCapsW_orig( uJoyID, pjc, cbjc);
 	}
 
 	MMRESULT WINAPI joyGetPos( UINT uJoyID, LPJOYINFO pji)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"joyGetPos\n");
 		return joyGetPos_orig( uJoyID, pji);
 	}
 
 	MMRESULT WINAPI joyGetPosEx( UINT uJoyID, LPJOYINFOEX pji)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"joyGetPosEx\n");
 		return joyGetPosEx_orig( uJoyID, pji);
 	}
 
 	MMRESULT WINAPI joyGetThreshold( UINT uJoyID, LPUINT puThreshold)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"joyGetThreshold\n");
 		return joyGetThreshold_orig( uJoyID, puThreshold);
 	}
 
 	MMRESULT WINAPI joyReleaseCapture( UINT uJoyID)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"joyReleaseCapture\n");
 		return joyReleaseCapture_orig( uJoyID);
 	}
 
 	MMRESULT WINAPI joySetCapture( HWND hwnd, UINT uJoyID, UINT uPeriod, BOOL fChanged)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"joySetCapture\n");
 		return joySetCapture_orig(hwnd, uJoyID, uPeriod, fChanged);
 	}
 
 	MMRESULT WINAPI joySetThreshold( UINT uJoyID, UINT uThreshold)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"joySetThreshold\n");
 		return joySetThreshold_orig( uJoyID, uThreshold);
 	}
 
 	BOOL WINAPI  mciDriverNotify(HWND hwndCallback, UINT uDeviceID, UINT uStatus)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciDriverNotify\n");
 		return mciDriverNotify_orig(hwndCallback, uDeviceID, uStatus);
 	}
 
 	UINT WINAPI  mciDriverYield(UINT uDeviceID)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciDriverYield\n");
 		return mciDriverYield_orig(uDeviceID);
 	}	
 
 	FOURCC WINAPI mmioStringToFOURCCA( LPCSTR sz, UINT uFlags)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioStringToFOURCCA\n");
 		return mmioStringToFOURCCA_orig( sz, uFlags);
 	}
 
 	FOURCC WINAPI mmioStringToFOURCCW( LPCWSTR sz, UINT uFlags)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioStringToFOURCCW\n");
 		return mmioStringToFOURCCW_orig( sz, uFlags);
 	}
 
 	LPMMIOPROC WINAPI mmioInstallIOProcA( FOURCC fccIOProc, LPMMIOPROC pIOProc, DWORD dwFlags)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioInstallIOProcA\n");
 		return mmioInstallIOProcA_orig( fccIOProc, pIOProc, dwFlags);
 	}
 
 	LPMMIOPROC WINAPI mmioInstallIOProcW( FOURCC fccIOProc, LPMMIOPROC pIOProc, DWORD dwFlags)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioInstallIOProcW\n");
 		return mmioInstallIOProcW_orig( fccIOProc, pIOProc, dwFlags);
 	}
 
 	HMMIO WINAPI mmioOpenA( LPSTR pszFileName, LPMMIOINFO pmmioinfo, DWORD fdwOpen)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioOpenA\n");
 		return mmioOpenA_orig( pszFileName, pmmioinfo, fdwOpen);
 	}
 
 	HMMIO WINAPI mmioOpenW( LPWSTR pszFileName, LPMMIOINFO pmmioinfo, DWORD fdwOpen)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioOpenW\n");
 		return mmioOpenW_orig( pszFileName, pmmioinfo, fdwOpen);
 	}
 
 	MMRESULT WINAPI mmioRenameA( LPCSTR pszFileName, LPCSTR pszNewFileName, LPCMMIOINFO pmmioinfo, DWORD fdwRename)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioRenameA\n");
 		return mmioRenameA_orig( pszFileName, pszNewFileName, pmmioinfo, fdwRename);
 	}
 
 	MMRESULT WINAPI mmioRenameW( LPCWSTR pszFileName, LPCWSTR pszNewFileName, LPCMMIOINFO pmmioinfo, DWORD fdwRename)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioRenameW\n");
 		return mmioRenameW_orig( pszFileName, pszNewFileName, pmmioinfo, fdwRename);
 	}
 
 	MMRESULT WINAPI mmioClose( HMMIO hmmio, UINT fuClose)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioClose\n");
 		return mmioClose_orig( hmmio, fuClose);
 	}
 
 	LONG WINAPI mmioRead( HMMIO hmmio, HPSTR pch, LONG cch)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioRead\n");
 		return mmioRead_orig( hmmio, pch, cch);
 	}
 
 	LONG WINAPI mmioWrite( HMMIO hmmio, const char _huge* pch, LONG cch)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioWrite\n");
 		return mmioWrite_orig( hmmio, pch, cch);
 	}
 
 	LONG WINAPI mmioSeek( HMMIO hmmio, LONG lOffset, int iOrigin)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioSeek\n");
 		return mmioSeek_orig(hmmio, lOffset, iOrigin);
 	}
 
 	MMRESULT WINAPI mmioGetInfo( HMMIO hmmio, LPMMIOINFO pmmioinfo, UINT fuInfo)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioGetInfo\n");
 		return mmioGetInfo_orig( hmmio, pmmioinfo, fuInfo);
 	}
 
 	MMRESULT WINAPI mmioSetInfo( HMMIO hmmio, LPCMMIOINFO pmmioinfo, UINT fuInfo)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioSetInfo\n");
 		return mmioSetInfo_orig( hmmio, pmmioinfo, fuInfo);
 	}
 
 	MMRESULT WINAPI mmioSetBuffer( HMMIO hmmio, LPSTR pchBuffer, LONG cchBuffer, UINT fuBuffer)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioSetBuffer\n");
 		return mmioSetBuffer_orig(hmmio, pchBuffer, cchBuffer, fuBuffer);
 	}
 
 	MMRESULT WINAPI mmioFlush( HMMIO hmmio, UINT fuFlush)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioFlush\n");
 		return mmioFlush_orig( hmmio, fuFlush);
 	}
 
 	MMRESULT WINAPI mmioAdvance( HMMIO hmmio, LPMMIOINFO pmmioinfo, UINT fuAdvance)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioAdvance\n");
 		return mmioAdvance_orig( hmmio, pmmioinfo, fuAdvance);
 	}
 
 	LRESULT WINAPI mmioSendMessage( HMMIO hmmio, UINT uMsg, LPARAM lParam1, LPARAM lParam2)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioSendMessage\n");
 		return mmioSendMessage_orig(hmmio, uMsg, lParam1, lParam2);
 	}
 
 	MMRESULT WINAPI mmioDescend( HMMIO hmmio, LPMMCKINFO pmmcki, const MMCKINFO FAR* pmmckiParent, UINT fuDescend)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioDescend\n");
 		return mmioDescend_orig(hmmio, pmmcki, pmmckiParent, fuDescend);
 	}
 
 	MMRESULT WINAPI mmioAscend( HMMIO hmmio, LPMMCKINFO pmmcki, UINT fuAscend)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioAscend\n");
 		return mmioAscend_orig( hmmio, pmmcki, fuAscend);
 	}
 
 	MMRESULT WINAPI mmioCreateChunk(HMMIO hmmio, LPMMCKINFO pmmcki, UINT fuCreate)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mmioCreateChunk\n");
 		return mmioCreateChunk_orig(hmmio, pmmcki, fuCreate);
 	}
 
 	MCIERROR WINAPI mciSendCommandA( MCIDEVICEID mciId, UINT uMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciSendCommandA\n");
 		return mciSendCommandA_orig( mciId, uMsg, dwParam1, dwParam2);
 	}
 
 	MCIERROR WINAPI mciSendCommandW( MCIDEVICEID mciId, UINT uMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciSendCommandW\n");
 		return mciSendCommandW_orig( mciId, uMsg, dwParam1, dwParam2);
 	}
 
 	MCIERROR  WINAPI mciSendStringA( LPCSTR lpstrCommand, LPSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciSendStringA\n");
 		return mciSendStringA_orig( lpstrCommand, lpstrReturnString, uReturnLength, hwndCallback);
 	}
 
 	MCIERROR  WINAPI mciSendStringW( LPCWSTR lpstrCommand, LPWSTR lpstrReturnString, UINT uReturnLength, HWND hwndCallback)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciSendStringW\n");
 		return mciSendStringW_orig( lpstrCommand, lpstrReturnString, uReturnLength, hwndCallback);
 	}
@@ -1375,72 +1535,84 @@ extern "C" {
 
 	MCIDEVICEID WINAPI mciGetDeviceIDW( LPCWSTR pszDevice)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciGetDeviceIDW\n");
 		return mciGetDeviceIDW_orig( pszDevice);
 	}
 
 	MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDA( DWORD dwElementID, LPCSTR lpstrType )
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciGetDeviceIDFromElementIDA\n");
 		return mciGetDeviceIDFromElementIDA_orig( dwElementID, lpstrType );
 	}
 
 	MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDW( DWORD dwElementID, LPCWSTR lpstrType )
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciGetDeviceIDFromElementIDW\n");
 		return mciGetDeviceIDFromElementIDW_orig( dwElementID, lpstrType );
 	}
 
 	DWORD_PTR WINAPI  mciGetDriverData(UINT uDeviceID)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciGetDriverData\n");
 		return mciGetDriverData_orig(uDeviceID);
 	}
 
 	BOOL WINAPI mciGetErrorStringA( MCIERROR mcierr, LPSTR pszText, UINT cchText)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciGetErrorStringA\n");
 		return mciGetErrorStringA_orig( mcierr, pszText, cchText);
 	}
 
 	BOOL WINAPI mciGetErrorStringW( MCIERROR mcierr, LPWSTR pszText, UINT cchText)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciGetErrorStringW\n");
 		return mciGetErrorStringW_orig( mcierr, pszText, cchText);
 	}
 
 	BOOL WINAPI  mciSetDriverData(UINT uDeviceID, DWORD_PTR dwData)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciSetDriverData_type\n");
 		return mciSetDriverData_orig( uDeviceID, dwData );
 	}
 
 	BOOL WINAPI mciSetYieldProc( MCIDEVICEID mciId, YIELDPROC fpYieldProc, DWORD dwYieldData)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciSetYieldProc\n");
 		return mciSetYieldProc_orig(mciId, fpYieldProc, dwYieldData);
 	}
 
 	BOOL WINAPI  mciFreeCommandResource(UINT uTable)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciFreeCommandResource\n");
 		return mciFreeCommandResource_orig(uTable);
 	}
 
 	HTASK WINAPI mciGetCreatorTask( MCIDEVICEID mciId)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciGetCreatorTask\n");
 		return mciGetCreatorTask_orig( mciId);
 	}
 
 	YIELDPROC WINAPI mciGetYieldProc( MCIDEVICEID mciId, LPDWORD pdwYieldData)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciGetYieldProc\n");
 		return mciGetYieldProc_orig( mciId, pdwYieldData);
 	}
 
 	UINT WINAPI mciLoadCommandResource(HINSTANCE hInstance, LPCWSTR lpResName, UINT uType)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciLoadCommandResource");
 		return mciLoadCommandResource_orig(hInstance, lpResName, uType);
 	}
@@ -1448,6 +1620,7 @@ extern "C" {
 
 	BOOL WINAPI mciExecute(LPCSTR pszCommand)
 	{
+		ll_winmm_shim_initialize();
 		//OutputDebugString(L"mciExecute\n");
 		return mciExecute_orig(pszCommand);
 	}
diff --git a/indra/media_plugins/winmmshim/forwarding_api.h b/indra/media_plugins/winmmshim/forwarding_api.h
index 89a6b347f3c2e13057fa4d673bc21bac96df5369..076a08f7696bc0637bfdf4eba4913682fe1f68c2 100644
--- a/indra/media_plugins/winmmshim/forwarding_api.h
+++ b/indra/media_plugins/winmmshim/forwarding_api.h
@@ -30,6 +30,7 @@
 #include <mmsystem.h>
 
 void init_function_pointers(HMODULE winmm_handle);
+void ll_winmm_shim_initialize();
 
 typedef VOID (*LPTASKCALLBACK)(DWORD_PTR dwInst);
 
diff --git a/indra/media_plugins/winmmshim/winmm_shim.cpp b/indra/media_plugins/winmmshim/winmm_shim.cpp
index 9563a3b6646d306bd8454c2c47a5073d0734b7f8..47a1e5c0187acf98e37cad50e763433170f8c27a 100644
--- a/indra/media_plugins/winmmshim/winmm_shim.cpp
+++ b/indra/media_plugins/winmmshim/winmm_shim.cpp
@@ -32,14 +32,21 @@ using std::wstring;
 
 static float sVolumeLevel = 1.f;
 static bool sMute = false;
+static CRITICAL_SECTION sCriticalSection;
 
 BOOL APIENTRY DllMain( HMODULE hModule,
                        DWORD  ul_reason_for_call,
                        LPVOID lpReserved
 					 )
 {
+	InitializeCriticalSection(&sCriticalSection);
+	return TRUE;
+}
+
+void ll_winmm_shim_initialize(){
 	static bool initialized = false;
 	// do this only once
+	EnterCriticalSection(&sCriticalSection);
 	if (!initialized)
 	{	// bind to original winmm.dll
 		TCHAR system_path[MAX_PATH];
@@ -54,13 +61,15 @@ BOOL APIENTRY DllMain( HMODULE hModule,
 		{	// we have a dll, let's get out pointers!
 			initialized = true;
 			init_function_pointers(winmm_handle);
-			return true;
+			::OutputDebugStringA("WINMM_SHIM.DLL: real winmm.dll initialized successfully\n");
+		}
+		else
+		{
+			// failed to initialize real winmm.dll
+			::OutputDebugStringA("WINMM_SHIM.DLL: Failed to initialize real winmm.dll\n");
 		}
-
-		// failed to initialize real winmm.dll
-		return false;
 	}
-	return true;
+	LeaveCriticalSection(&sCriticalSection);
 }
 
 
@@ -79,6 +88,7 @@ extern "C"
 
 	MMRESULT WINAPI waveOutOpen( LPHWAVEOUT phwo, UINT uDeviceID, LPCWAVEFORMATEX pwfx, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen)
 	{
+		ll_winmm_shim_initialize();
 		if (pwfx->wFormatTag != WAVE_FORMAT_PCM
 			|| (pwfx->wBitsPerSample != 8 && pwfx->wBitsPerSample != 16))
 		{ // uncompressed 8 and 16 bit sound are the only types we support
@@ -97,6 +107,7 @@ extern "C"
 
 	MMRESULT WINAPI waveOutClose( HWAVEOUT hwo)
 	{
+		ll_winmm_shim_initialize();
 		wave_out_map_t::iterator found_it = sWaveOuts.find(hwo);
 		if (found_it != sWaveOuts.end())
 		{	// forget what we know about this handle
@@ -108,6 +119,7 @@ extern "C"
 
 	MMRESULT WINAPI waveOutWrite( HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh)
 	{
+		ll_winmm_shim_initialize();
 		MMRESULT result = MMSYSERR_NOERROR;
 
 		if (sMute)
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index af6beacdfa9a69e6f2bc3858dde7a6ff7f8b9cee..b1cb10665ba348166f4287b9558339a3f43c17f7 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -9,7 +9,7 @@ include(DBusGlib)
 include(DirectX)
 include(OpenSSL)
 include(DragDrop)
-include(ELFIO)
+include(EXPAT)
 include(FMOD)
 include(OPENAL)
 include(FindOpenGL)
@@ -44,11 +44,11 @@ include(CMakeCopyIfDifferent)
 
 include_directories(
     ${DBUSGLIB_INCLUDE_DIRS}
-    ${ELFIO_INCLUDE_DIR}
     ${JSONCPP_INCLUDE_DIRS}
     ${LLAUDIO_INCLUDE_DIRS}
     ${LLCHARACTER_INCLUDE_DIRS}
     ${LLCOMMON_INCLUDE_DIRS}
+    ${FMOD_INCLUDE_DIR}
     ${LLIMAGE_INCLUDE_DIRS}
     ${LLKDU_INCLUDE_DIRS}
     ${LLINVENTORY_INCLUDE_DIRS}
@@ -66,6 +66,7 @@ include_directories(
     ${LSCRIPT_INCLUDE_DIRS}/lscript_compile
     ${LLLOGIN_INCLUDE_DIRS}
     ${UPDATER_INCLUDE_DIRS}
+    ${OPENAL_LIB_INCLUDE_DIRS}
     )
 
 set(viewer_SOURCE_FILES
@@ -246,6 +247,7 @@ set(viewer_SOURCE_FILES
     llhudeffectlookat.cpp
     llhudeffectpointat.cpp
     llhudeffecttrail.cpp
+    llhudeffectblob.cpp
     llhudicon.cpp
     llhudmanager.cpp
     llhudnametag.cpp
@@ -378,6 +380,7 @@ set(viewer_SOURCE_FILES
     llparcelselection.cpp
     llparticipantlist.cpp
     llpatchvertexarray.cpp
+    llphysicsmotion.cpp
     llplacesinventorybridge.cpp
     llplacesinventorypanel.cpp
     llpopupview.cpp
@@ -400,6 +403,7 @@ set(viewer_SOURCE_FILES
     llscreenchannel.cpp
     llscriptfloater.cpp
     llscrollingpanelparam.cpp
+    llscrollingpanelparambase.cpp
     llsearchcombobox.cpp
     llsearchhistory.cpp
     llsecapi.cpp
@@ -412,6 +416,7 @@ set(viewer_SOURCE_FILES
     llsidepaneliteminfo.cpp
     llsidepaneltaskinfo.cpp
     llsidetray.cpp
+    llsidetraylistener.cpp
     llsidetraypanelcontainer.cpp
     llsky.cpp
     llslurl.cpp
@@ -786,6 +791,7 @@ set(viewer_HEADER_FILES
     llhudeffectlookat.h
     llhudeffectpointat.h
     llhudeffecttrail.h
+    llhudeffectblob.h
     llhudicon.h
     llhudmanager.h
     llhudnametag.h
@@ -912,6 +918,7 @@ set(viewer_HEADER_FILES
     llparcelselection.h
     llparticipantlist.h
     llpatchvertexarray.h
+    llphysicsmotion.h
     llplacesinventorybridge.h
     llplacesinventorypanel.h
     llpolymesh.h
@@ -936,6 +943,7 @@ set(viewer_HEADER_FILES
     llscreenchannel.h
     llscriptfloater.h
     llscrollingpanelparam.h
+    llscrollingpanelparambase.h
     llsearchcombobox.h
     llsearchhistory.h
     llsecapi.h
@@ -947,6 +955,7 @@ set(viewer_HEADER_FILES
     llsidepaneliteminfo.h
     llsidepaneltaskinfo.h
     llsidetray.h
+    llsidetraylistener.h
     llsidetraypanelcontainer.h
     llsky.h
     llslurl.h
@@ -1289,8 +1298,6 @@ if (WINDOWS)
     if (INTEL_MEMOPS_LIBRARY)
       list(APPEND viewer_LIBRARIES ${INTEL_MEMOPS_LIBRARY})
     endif (INTEL_MEMOPS_LIBRARY)
-
-    use_prebuilt_binary(dbghelp)
 endif (WINDOWS)
 
 # Add the xui files. This is handy for searching for xui elements
@@ -1298,22 +1305,20 @@ endif (WINDOWS)
 set(viewer_XUI_FILES
     skins/default/colors.xml
     skins/default/textures/textures.xml
+    skins/minimal/colors.xml
+    skins/minimal/textures/textures.xml
 
 
 
     )
 file(GLOB DEFAULT_XUI_FILE_GLOB_LIST
-     ${CMAKE_CURRENT_SOURCE_DIR}/skins/default/xui/en/*.xml)
+     ${CMAKE_CURRENT_SOURCE_DIR}/skins/*/xui/en/*.xml)
 list(APPEND viewer_XUI_FILES ${DEFAULT_XUI_FILE_GLOB_LIST})
 
 file(GLOB DEFAULT_WIDGET_FILE_GLOB_LIST
-     ${CMAKE_CURRENT_SOURCE_DIR}/skins/default/xui/en/widgets/*.xml)
+     ${CMAKE_CURRENT_SOURCE_DIR}/skins/*/xui/en/widgets/*.xml)
 list(APPEND viewer_XUI_FILES ${DEFAULT_WIDGET_FILE_GLOB_LIST})
 
-file(GLOB SILVER_XUI_FILE_GLOB_LIST
-     ${CMAKE_CURRENT_SOURCE_DIR}/skins/silver/xui/en-us/*.xml)
-list(APPEND viewer_XUI_FILES ${SILVER_XUI_FILE_GLOB_LIST})
-
 # Cannot append empty lists in CMake, wait until we have files here.
 #file(GLOB SILVER_WIDGET_FILE_GLOB_LIST
 #     ${CMAKE_CURRENT_SOURCE_DIR}/skins/silver/xui/en-us/widgets/*.xml)
@@ -1343,6 +1348,7 @@ set(viewer_APPSETTINGS_FILES
     app_settings/settings_crash_behavior.xml
     app_settings/settings_files.xml
     app_settings/settings_per_account.xml
+    app_settings/settings_minimal.xml
     app_settings/std_bump.ini
     app_settings/trees.xml
     app_settings/ultra_graphics.xml
@@ -1433,19 +1439,13 @@ set(PACKAGE ON CACHE BOOL
     "Add a package target that builds an installer package.")
 
 if (WINDOWS)
-    if(MSVC71)
-        set(release_flags "/MAP:Release/${VIEWER_BINARY_NAME}.map /MAPINFO:LINES")
-    else(MSVC71)
-        set(release_flags "/MAP:Release/${VIEWER_BINARY_NAME}.map")
-    endif(MSVC71)
-    
     set_target_properties(${VIEWER_BINARY_NAME}
         PROPERTIES
         # *TODO -reenable this once we get server usage sorted out
         #LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS /INCLUDE:\"__tcmalloc\""
         LINK_FLAGS "/debug /NODEFAULTLIB:LIBCMT /SUBSYSTEM:WINDOWS"
         LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMT;LIBCMTD;MSVCRT\" /INCREMENTAL:NO"
-        LINK_FLAGS_RELEASE ${release_flags}
+        LINK_FLAGS_RELEASE ""
         )
     if(USE_PRECOMPILED_HEADERS)
         set_target_properties(
@@ -1488,15 +1488,12 @@ if (WINDOWS)
       ${SHARED_LIB_STAGING_DIR}/Release/fmod.dll
       ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/fmod.dll
       ${SHARED_LIB_STAGING_DIR}/Debug/fmod.dll
-      ${SHARED_LIB_STAGING_DIR}/Release/msvcr80.dll
-      ${SHARED_LIB_STAGING_DIR}/Release/msvcp80.dll
-      ${SHARED_LIB_STAGING_DIR}/Release/Microsoft.VC80.CRT.manifest
-      ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/msvcr80.dll
-      ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/msvcp80.dll
-      ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/Microsoft.VC80.CRT.manifest
-      ${SHARED_LIB_STAGING_DIR}/Debug/msvcr80d.dll
-      ${SHARED_LIB_STAGING_DIR}/Debug/msvcp80d.dll
-      ${SHARED_LIB_STAGING_DIR}/Debug/Microsoft.VC80.DebugCRT.manifest
+      ${SHARED_LIB_STAGING_DIR}/Release/msvcr100.dll
+      ${SHARED_LIB_STAGING_DIR}/Release/msvcp100.dll
+      ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/msvcr100.dll
+      ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/msvcp100.dll
+      ${SHARED_LIB_STAGING_DIR}/Debug/msvcr100d.dll
+      ${SHARED_LIB_STAGING_DIR}/Debug/msvcp100d.dll
       ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/SLVoice.exe
       ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/vivoxsdk.dll
       ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/ortp.dll
@@ -1508,7 +1505,6 @@ if (WINDOWS)
       ${CMAKE_CURRENT_SOURCE_DIR}/licenses-win32.txt
       ${CMAKE_CURRENT_SOURCE_DIR}/featuretable.txt
       ${CMAKE_CURRENT_SOURCE_DIR}/featuretable_xp.txt
-      ${CMAKE_CURRENT_SOURCE_DIR}/dbghelp.dll
       ${ARCH_PREBUILT_DIRS_RELEASE}/libeay32.dll
       ${ARCH_PREBUILT_DIRS_RELEASE}/qtcore4.dll
       ${ARCH_PREBUILT_DIRS_RELEASE}/qtgui4.dll
@@ -1647,8 +1643,6 @@ if (WINDOWS)
         # sorted out on the parabuild cluster...
         #${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/event_host.tar.bz2)
 
-      check_message_template(package)
-
     endif (PACKAGE)
 endif (WINDOWS)
 
@@ -1690,8 +1684,8 @@ target_link_libraries(${VIEWER_BINARY_NAME}
     ${SMARTHEAP_LIBRARY}
     ${UI_LIBRARIES}
     ${WINDOWS_LIBRARIES}
+    ${EXPAT_LIBRARIES}
     ${XMLRPCEPI_LIBRARIES}
-    ${ELFIO_LIBRARIES}
     ${OPENSSL_LIBRARIES}
     ${CRYPTO_LIBRARIES}
     ${LLLOGIN_LIBRARIES}
@@ -1770,7 +1764,7 @@ if (LINUX)
       ${COPY_INPUT_DEPENDENCIES}
     COMMENT "Performing viewer_manifest copy"
     )
-
+    
   add_custom_target(copy_l_viewer_manifest ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.copy_touched) 
 
   if (PACKAGE)
@@ -1817,7 +1811,6 @@ if (DARWIN)
 
   if (PACKAGE)
       add_custom_target(package ALL DEPENDS ${VIEWER_BINARY_NAME}) 
-      check_message_template(package)
 
       add_custom_command(
         TARGET package POST_BUILD
@@ -1848,7 +1841,9 @@ if (PACKAGE)
   if (WINDOWS)
     set(VIEWER_DIST_DIR "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}")
     set(VIEWER_SYMBOL_FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-symbols-windows.tar.bz2")
-    set(VIEWER_EXE_GLOBS "${VIEWER_BINARY_NAME}${CMAKE_EXECUTABLE_SUFFIX} slplugin.exe")
+    # slplugin.exe failing symbols dump - need to debug, might have to do with updated version of google breakpad
+    # set(VIEWER_EXE_GLOBS "${VIEWER_BINARY_NAME}${CMAKE_EXECUTABLE_SUFFIX} slplugin.exe")
+    set(VIEWER_EXE_GLOBS "${VIEWER_BINARY_NAME}${CMAKE_EXECUTABLE_SUFFIX}")
     set(VIEWER_LIB_GLOB "*${CMAKE_SHARED_MODULE_SUFFIX}")
     set(VIEWER_COPY_MANIFEST copy_w_viewer_manifest)
   endif (WINDOWS)
@@ -1882,7 +1877,7 @@ if (PACKAGE)
       "${VIEWER_DIST_DIR}"
       "${VIEWER_EXE_GLOBS}"
       "${VIEWER_LIB_GLOB}"
-      "${LIBS_PREBUILT_DIR}/${LL_ARCH_DIR}/bin/dump_syms"
+      "${AUTOBUILD_INSTALL_DIR}/bin/dump_syms"
       "${VIEWER_SYMBOL_FILE}"
     DEPENDS generate_breakpad_symbols.py
         VERBATIM)
@@ -2000,4 +1995,5 @@ if (LL_TESTS)
 
 endif (LL_TESTS)
 
+check_message_template(${VIEWER_BINARY_NAME})
 
diff --git a/indra/newview/app_settings/CA.pem b/indra/newview/app_settings/CA.pem
index 11825bf9067090b5f8294a7f9979f760123986ab..63bb036c92b91c634da5b79a21e682a3bd693a3a 100644
--- a/indra/newview/app_settings/CA.pem
+++ b/indra/newview/app_settings/CA.pem
@@ -128,2094 +128,999 @@ TBA+9zBb6xD1KM2DdY7r4GiyYItN0BKLfuWbh9LXGbl1C+f4P11g+m2MPiavIeCe
 1iazG5pcS3KoTLACsYlEX24TINtg4kcuS81XdllcnsV3Kdts0nIqPj6uhTTZD0k=
 -----END CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
-MIIDtTCCAp2gAwIBAgIRANAeQJAAAEZSAAAAAQAAAAQwDQYJKoZIhvcNAQEF
-BQAwgYkxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJEQzETMBEGA1UEBxMKV2Fz
-aGluZ3RvbjEXMBUGA1UEChMOQUJBLkVDT00sIElOQy4xGTAXBgNVBAMTEEFC
-QS5FQ09NIFJvb3QgQ0ExJDAiBgkqhkiG9w0BCQEWFWFkbWluQGRpZ3NpZ3Ry
-dXN0LmNvbTAeFw05OTA3MTIxNzMzNTNaFw0wOTA3MDkxNzMzNTNaMIGJMQsw
-CQYDVQQGEwJVUzELMAkGA1UECBMCREMxEzARBgNVBAcTCldhc2hpbmd0b24x
-FzAVBgNVBAoTDkFCQS5FQ09NLCBJTkMuMRkwFwYDVQQDExBBQkEuRUNPTSBS
-b290IENBMSQwIgYJKoZIhvcNAQkBFhVhZG1pbkBkaWdzaWd0cnVzdC5jb20w
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx0xHgeVVDBwhMywVC
-AOINg0Y95JO6tgbTDVm9PsHOQ2cBiiGo77zM0KLMsFWWU4RmBQDaREmA2FQK
-pSWGlO1jVv9wbKOhGdJ4vmgqRF4vz8wYXke8OrFGPR7wuSw0X4x8TAgpnUBV
-6zx9g9618PeKgw6hTLQ6pbNfWiKX7BmbwQVo/ea3qZGULOR4SCQaJRk665Wc
-OQqKz0Ky8BzVX/tr7WhWezkscjiw7pOp03t3POtxA6k4ShZsiSrK2jMTecJV
-jO2cu/LLWxD4LmE1xilMKtAqY9FlWbT4zfn0AIS2V0KFnTKo+SpU+/94Qby9
-cSj0u5C8/5Y0BONFnqFGKECBAgMBAAGjFjAUMBIGA1UdEwEB/wQIMAYBAf8C
-AQgwDQYJKoZIhvcNAQEFBQADggEBAARvJYbk5pYntNlCwNDJALF/VD6Hsm0k
-qS8Kfv2kRLD4VAe9G52dyntQJHsRW0mjpr8SdNWJt7cvmGQlFLdh6X9ggGvT
-ZOirvRrWUfrAtF13Gn9kCF55xgVM8XrdTX3O5kh7VNJhkoHWG9YA8A6eKHeg
-TYjHInYZw8eeG6Z3ePhfm1bR8PIXrI6dWeYf/le22V7hXZ9F7GFoGUHhsiAm
-/lowdiT/QHI8eZ98IkirRs3bs4Ysj78FQdPB4xTjQRcm0HyncUwZ6EoPclgx
-fexgeqMiKL0ZJGA/O4dzwGvky663qyVDslUte6sGDnVdNOVdc22esnVApVnJ
-TzFxiNmIf1Q=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJT
-RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4
-dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5h
-bCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzEL
-MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1B
-ZGRUcnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1
-c3QgRXh0ZXJuYWwgQ0EgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBALf3GjPm8gAELTngTlvtH7xsD821+iO2zt6bETOXpClMfZOfvUq8
-k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfwTz/oMp50
-ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504
-B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDez
-eWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5
-aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0WicCAwEAAaOB
-3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0PBAQD
-AgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6
-xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
-cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdv
-cmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJ
-KoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
-j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5R
-xNKWt9x+Tu5w/Rw56wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjT
-K3rMUUKhemPR5ruhxSvCNr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1
-n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHx
-REzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49O
-hgQ=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJT
-RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRU
-UCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3Qw
-HhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJT
-RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRU
-UCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3Qw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwze
-xODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY654eyNAbFvAWlA3yCyykQruGI
-gb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWroulpOj0O
-M3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1Lc
-sRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5
-mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG
-9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0OBBYEFJWxtPCU
-tr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTADAQH/
-MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQsw
-CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
-ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAx
-IENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0
-MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
-iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9
-tTEv2dB8Xfjea4MYeDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL
-/bscVjby/rK25Xa71SJlpz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlV
-g3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6
-tkD9xOQ14R0WHNC8K47Wcdk=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJT
-RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRU
-UCBOZXR3b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAe
-Fw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNF
-MRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
-IE5ldHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+
-A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c
-+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1id9NEHif2
-P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKX
-C1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8R
-s3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9
-BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQWBBSBPjfYkrAf
-d59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zCB
-jgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkG
-A1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
-cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmu
-G7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
-+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbj
-PGsye/Kf8Lb93/AoGEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bY
-GozH7ZxOmuASu7VqTITh4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6
-NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9HEufOX1362Kqx
-My3ZdvJOOjMMK7MtkAY=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJT
-RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRU
-UCBOZXR3b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9v
-dDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYT
-AlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3Qg
-VFRQIE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBS
-b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoek
-n0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKk
-IhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3KP0q6p6z
-sLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1t
-UvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R
-+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvES
-a0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0GA1UdDgQWBBQ5
-lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkw
-ZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
-ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVh
-bGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2Vh
-lRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
-GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx9
-5dr6h+sNNVJn0J6XdgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKF
-Yqa0p9m9N5xotS1WfbC3P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVA
-wRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQw
-dOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJV
-UzEcMBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1l
-cmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4X
-DTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMx
-HDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJp
-Y2EgT25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCa
-xlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CGv2BlnEtUiMJIxUo5vxTjWVXl
-GbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44zDyL9Hy7n
-BzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145Lcx
-VR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiE
-mf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCu
-JKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
-HQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Zo/Z5
-9m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUA
-A4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
-Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOM
-IOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTI
-dGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g
-Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j
-8uB9Gr784N/Xx6dssPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJV
-UzEcMBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1l
-cmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4X
-DTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMx
-HDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJp
-Y2EgT25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssN
-t79Hc9PwVU3dxgz6sWYFas14tNwC206B89enfHG8dWOgXeMHDEjsJcQDIPT/
-DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8f3SkWq7x
-uhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE
-18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxr
-kJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMD
-bi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8BPeraunzgWGcX
-uVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn6KVu
-Y8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9
-W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
-o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48
-ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124Hhn
-AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op
-aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNee
-MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypL
-M7PmG2tZTiLMubekJcmnxPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qf
-tIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjR
-Ywu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R
-+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr
-+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVM
-nNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMADjMSW7yV5TKQqLPGbIOt
-d+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh1NolNscI
-WC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZ
-ZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y
-3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz
-2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
+MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
+IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
+MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
+FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
+bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
+dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
+H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
+uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
+mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
+a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
+E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
+WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
+VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
+Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
+cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
+IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
+AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
+YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
+6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
+Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
+c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
+mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
+b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
+MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
+QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
+VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
+A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
+CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
+tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
+dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
+PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
++Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
+BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
+BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
+MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
+ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
+IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
+7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
+43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
+eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
+pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
+WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
+b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
+MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
+ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
+BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
+AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
+6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
+GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
+dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
+1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
+62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
+BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
+AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
+MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
+cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
+b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
+IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
+iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
+GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
+4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
+XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
+MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
+b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
+MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
+EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
+BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
+xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
+87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
+2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
+WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
+0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
+A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
+AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
+pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
+ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
+aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
+hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
+hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
+dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
+P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
+iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
+xqE=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
+bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2
+MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
+ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk
+hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym
+1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW
+OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb
+2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko
+O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
+AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU
+AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
+BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
+Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb
+LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir
+oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C
+MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
+sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
+bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
+MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
+ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
+Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
+ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
+206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
+KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
+JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
+BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
+Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
+PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
+Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
+Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
+o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
++L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
+YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
+FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
+AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
+xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
+LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
+obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
+CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
+IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
+DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
+AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
+Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
+AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
+Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
 RY8mkaKO/qk=
 -----END CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMC
-VVMxHTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNB
-bWVyaWNhIE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIg
-Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyOTA2MDAw
-MFoXDTM3MTEyMDE1MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRB
-T0wgVGltZSBXYXJuZXIgSW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUg
-SW5jLjE3MDUGA1UEAxMuQU9MIFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U0pPlLYnKhHw/EEMbjIt8hFj4JHxI
-zyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItITuLCxFlpMGK2MKKMCxGZYTVt
-fu/FsRkGIBKOQuHfD5YQUqjPnF+VFNivO3ULMSAfRC+iYkGzuxgh28pxPIzs
-trkNn+9R7017EvILDOGsQI93f7DKeHEMXRZxcKLXwjqFzQ6axOAAsNUl6twr
-5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQIfHNlIAqhBC4aMqiaILGc
-LCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEAAaNjMGEw
-DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jYPXy+
-XxIwHwYDVR0jBBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/
-BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQCKIBilvrMvtKaEAEAwKfq0FHNM
-eUWn9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u0FIy2VkyvNp5ctZ7
-CegCgTXTCt8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77Bf
-WgDrvq2g+EQFZ7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oT
-LW4jYYehY0KswsuXn2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCz
-vhGbRWeDhhmH05i9CBoWH1iCC+GWaQVLjuyDUTEH1dSf/1l7qG6Fz9NLqUmw
-X7A5KGgOc90lmt4S
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMC
-VVMxHTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNB
-bWVyaWNhIE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIg
-Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyOTA2MDAw
-MFoXDTM3MDkyODIzNDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRB
-T0wgVGltZSBXYXJuZXIgSW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUg
-SW5jLjE3MDUGA1UEAxMuQU9MIFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
-ggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ7ouZzU9AhqS2TcnZsdw8TQ2FTBVs
-RotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilbm2BPJoPRYxJWSXakFsKlnUWs
-i4SVqBax7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOYxFSMFkpBd4aVdQxHAWZg
-/BXxD+r1FHjHDtdugRxev17nOirYlxcwfACtCJ0zr7iZYYCLqJV+FNwSbKTQ
-2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2wTPDaRrbqJS5Gr42whTg0
-ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fxI2rSAG2X
-+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETzkxml
-J85per5n0/xQpCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFh
-EVsVS6kkUfykXPcXnbDS+gfpj1bkGoxoigTTfFrjnqKhynFbotSg5ymFXQNo
-Kk/SBtc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuWCpTehTacyH+BCQJJ
-Kg71ZDIMgtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1Ex
-MVCgyhwn2RAurda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMB
-Af8wHQYDVR0OBBYEFE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaA
-FE9pbQN+nZ8HGEO8txBO1b+pxCAoMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
-9w0BAQUFAAOCAgEAO/Ouyuguh4X7ZVnnrREUpVe8WJ8kEle7+z802u6teio0
-cnAxa8cZmIDJgt43d15Ui47y6mdPyXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRF
-ASbI5Rq8NEQh3q0l/HYWdyGQgJhXnU7q7C+qPBR7V8F+GBRn7iTGvboVsNIY
-vbdVgaxTwOjdaRITQrcCtQVBynlQboIOcXKTRuidDV29rs4prWPVVRaAMCf/
-drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ68W/ClTluUI8JPu3B5wwn3la
-5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyBM5kYJRF3p+v9WAks
-mWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQmy8YJPamTQr5
-O8t1wswvziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xOAU++CrYD
-062KRffaJ00psUjf5BHklka9bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT9Y41
-xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4oGKQWDzH9OmwjkyB24f0H
-hdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2uBOL
-Z8/5fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQG
-EwJJRTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0
-MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUx
-MjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNV
-BAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZ
-QmFsdGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAKMEuyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+h
-Xe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gR
-QKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/CG9VwcPCP
-wBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1
-pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNT
-Px8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkC
-AwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1BE3wMBIGA1Ud
-EwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUA
-A4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkT
-I7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
-jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/
-oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67
-G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
-RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFajCCBFKgAwIBAgIEPLU9RjANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQK
-EwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEG
-A1UEAxMqYmVUUlVTVGVkIFJvb3QgQ0EtQmFsdGltb3JlIEltcGxlbWVudGF0
-aW9uMB4XDTAyMDQxMTA3Mzg1MVoXDTIyMDQxMTA3Mzg1MVowZjESMBAGA1UE
-ChMJYmVUUlVTVGVkMRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAx
-BgNVBAMTKmJlVFJVU1RlZCBSb290IENBLUJhbHRpbW9yZSBJbXBsZW1lbnRh
-dGlvbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALx+xDmcjOPW
-HIb/ymKt4H8wRXqOGrO4x/nRNv8i805qX4QQ+2aBw5R5MdKR4XeOGCrDFN5R
-9U+jK7wYFuK13XneIviCfsuBH/0nLI/6l2Qijvj/YaOcGx6Sj8CoCd8JEey3
-fTGaGuqDIQY8n7pc/5TqarjDa1U0Tz0yH92BFODEPM2dMPgwqZfT7syj0B9f
-HBOB1BirlNFjw55/NZKeX0Tq7PQiXLfoPX2k+YmpkbIq2eszh+6l/ePazIjm
-iSZuxyuC0F6dWdsU7JGDBcNeDsYq0ATdcT0gTlgn/FP7eHgZFLL8kFKJOGJg
-B7Sg7KxrUNb9uShr71ItOrL/8QFArDcCAwEAAaOCAh4wggIaMA8GA1UdEwEB
-/wQFMAMBAf8wggG1BgNVHSAEggGsMIIBqDCCAaQGDysGAQQBsT4AAAEJKIOR
-MTCCAY8wggFIBggrBgEFBQcCAjCCAToaggE2UmVsaWFuY2Ugb24gb3IgdXNl
-IG9mIHRoaXMgQ2VydGlmaWNhdGUgY3JlYXRlcyBhbiBhY2tub3dsZWRnbWVu
-dCBhbmQgYWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5k
-YXJkIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwgdGhlIENlcnRpZmlj
-YXRpb24gUHJhY3RpY2UgU3RhdGVtZW50IGFuZCB0aGUgUmVseWluZyBQYXJ0
-eSBBZ3JlZW1lbnQsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdCB0aGUgYmVUUlVT
-VGVkIHdlYiBzaXRlLCBodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20vcHJvZHVj
-dHNfc2VydmljZXMvaW5kZXguaHRtbDBBBggrBgEFBQcCARY1aHR0cDovL3d3
-dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2VzL2luZGV4Lmh0bWww
-HQYDVR0OBBYEFEU9w6nR3D8kVpgccxiIav+DR+22MB8GA1UdIwQYMBaAFEU9
-w6nR3D8kVpgccxiIav+DR+22MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0B
-AQUFAAOCAQEASZK8o+6svfoNyYt5hhwjdrCAWXf82n+0S9/DZEtqTg6t8n1Z
-dwWtColzsPq8y9yNAIiPpqCy6qxSJ7+hSHyXEHu67RMdmgduyzFiEuhjA6p9
-beP4G3YheBufS0OM00mG9htc9i5gFdPp43t1P9ACg9AYgkHNZTfqjjJ+vWuZ
-XTARyNtIVBw74acT02pIk/c9jH8F6M7ziCpjBLjqflh8AXtb4cV97yHgjQ5d
-UX2xZ/2jvTg2xvI4hocalmhgRvsoFEdV4aeADGvi6t9NfJBIoDa9CReJf8Py
-05yc493EG931t3GzUwWJBtDLSoDByFOQtTwxiBdQn8nEDovYqAJjDQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFLDCCBBSgAwIBAgIEOU99hzANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQG
-EwJXVzESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQDExJiZVRSVVNUZWQg
-Um9vdCBDQXMxGjAYBgNVBAMTEWJlVFJVU1RlZCBSb290IENBMB4XDTAwMDYy
-MDE0MjEwNFoXDTEwMDYyMDEzMjEwNFowWjELMAkGA1UEBhMCV1cxEjAQBgNV
-BAoTCWJlVFJVU1RlZDEbMBkGA1UEAxMSYmVUUlVTVGVkIFJvb3QgQ0FzMRow
-GAYDVQQDExFiZVRSVVNUZWQgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBANS0c3oTCjhVAb6JVuGUntS+WutKNHUbYSnE4a0IYCF4
-SP+00PpeQY1hRIfo7clY+vyTmt9P6j41ffgzeubx181vSUs9Ty1uDoM6GHh3
-o8/n9E1z2Jo7Gh2+lVPPIJfCzz4kUmwMjmVZxXH/YgmPqsWPzGCgc0rXOD8V
-cr+il7dw6K/ifhYGTPWqZCZyByWtNfwYsSbX2P8ZDoMbjNx4RWc0PfSvHI3k
-bWvtILNnmrRhyxdviTX/507AMhLn7uzf/5cwdO2NR47rtMNE5qdMf1ZD6Li8
-tr76g5fmu/vEtpO+GRg+jIG5c4gW9JZDnGdzF5DYCW5jrEq2I8QBoa2k5MUC
-AwEAAaOCAfgwggH0MA8GA1UdEwEB/wQFMAMBAf8wggFZBgNVHSAEggFQMIIB
-TDCCAUgGCisGAQQBsT4BAAAwggE4MIIBAQYIKwYBBQUHAgIwgfQagfFSZWxp
-YW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVz
-IGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0
-ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGFuZCBjZXJ0aWZpY2F0aW9u
-IHByYWN0aWNlIHN0YXRlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IGJl
-VFJVU1RlZCdzIHdlYiBzaXRlLCBodHRwczovL3d3dy5iZVRSVVNUZWQuY29t
-L3ZhdWx0L3Rlcm1zMDEGCCsGAQUFBwIBFiVodHRwczovL3d3dy5iZVRSVVNU
-ZWQuY29tL3ZhdWx0L3Rlcm1zMDQGA1UdHwQtMCswKaAnoCWkIzAhMRIwEAYD
-VQQKEwliZVRSVVNUZWQxCzAJBgNVBAYTAldXMB0GA1UdDgQWBBQquZtpLjub
-2M3eKjEENGvKBxirZzAfBgNVHSMEGDAWgBQquZtpLjub2M3eKjEENGvKBxir
-ZzAOBgNVHQ8BAf8EBAMCAf4wDQYJKoZIhvcNAQEFBQADggEBAHlh26Nebhax
-6nZR+csVm8tpvuaBa58oH2U+3RGFktToQb9+M70j5/Egv6S0phkBxoyNNXxl
-pE8JpNbYIxUFE6dDea/bow6be3ga8wSGWsb2jCBHOElQBp1yZzrwmAOtlmdE
-/D8QDYZN5AA7KXvOOzuZhmElQITcE2K3+spZ1gMe1lMBzW1MaFVA4e5rxyoA
-AEiCswoBw2AqDPeCNe5IhpbkdNQ96gFxugR1QKepfzk5mlWXKWWuGVUlBXJH
-0+gY3Ljpr0NzARJ0o+FcXxVdJPP55PS2Z2cS52QiivalQaYctmBjRYoQtLpG
-EK5BV2VsPyMQPyEQWbfkQN0mDCP2qq4=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGUTCCBTmgAwIBAgIEPLVPQDANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQK
-EwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEG
-A1UEAxMqYmVUUlVTVGVkIFJvb3QgQ0EgLSBFbnRydXN0IEltcGxlbWVudGF0
-aW9uMB4XDTAyMDQxMTA4MjQyN1oXDTIyMDQxMTA4NTQyN1owZjESMBAGA1UE
-ChMJYmVUUlVTVGVkMRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAx
-BgNVBAMTKmJlVFJVU1RlZCBSb290IENBIC0gRW50cnVzdCBJbXBsZW1lbnRh
-dGlvbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALr0RAOqEmq1
-Q+xVkrYwfTVXDNvzDSduTPdQqJtOK2/b9a0cS12zqcH+e0TrW6MFDR/FNCsw
-ACnxeECypP869AGIF37m1CbTukzqMvtDd5eHI8XbQ6P1KqNRXuE70mVpflUV
-m3rnafdE4Fe1FehmYA8NA/uCjqPoEXtsvsdjDheT389Lrm5zdeDzqrmkwAkb
-hepxKYhBMvnwKg5sCfJ0a2ZsUhMfGLzUPvfYbiCeyv78IZTuEyhL11xeDGbu
-6bsPwTSxfwh28z0mcMmLJR1iJAzqHHVOwBLkuhMdMCktVjMFu5dZfsZJT4nX
-LySotohAtWSSU1Yk5KKghbNekLQSM80CAwEAAaOCAwUwggMBMIIBtwYDVR0g
-BIIBrjCCAaowggGmBg8rBgEEAbE+AAACCSiDkTEwggGRMIIBSQYIKwYBBQUH
-AgIwggE7GoIBN1JlbGlhbmNlIG9uIG9yIHVzZSBvZiB0aGlzIENlcnRpZmlj
-YXRlIGNyZWF0ZXMgYW4gYWNrbm93bGVkZ21lbnQgYW5kIGFjY2VwdGFuY2Ug
-b2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29u
-ZGl0aW9ucyBvZiB1c2UsIHRoZSBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0
-YXRlbWVudCBhbmQgdGhlIFJlbHlpbmcgUGFydHkgQWdyZWVtZW50LCB3aGlj
-aCBjYW4gYmUgZm91bmQgYXQgdGhlIGJlVFJVU1RlZCB3ZWIgc2l0ZSwgaHR0
-cHM6Ly93d3cuYmV0cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9pbmRl
-eC5odG1sMEIGCCsGAQUFBwIBFjZodHRwczovL3d3dy5iZXRydXN0ZWQuY29t
-L3Byb2R1Y3RzX3NlcnZpY2VzL2luZGV4Lmh0bWwwEQYJYIZIAYb4QgEBBAQD
-AgAHMIGJBgNVHR8EgYEwfzB9oHugeaR3MHUxEjAQBgNVBAoTCWJlVFJVU1Rl
-ZDEbMBkGA1UECxMSYmVUUlVTVGVkIFJvb3QgQ0FzMTMwMQYDVQQDEypiZVRS
-VVNUZWQgUm9vdCBDQSAtIEVudHJ1c3QgSW1wbGVtZW50YXRpb24xDTALBgNV
-BAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMjA0MTEwODI0MjdagQ8yMDIyMDQx
-MTA4NTQyN1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFH1w5a44iwY/qhwa
-j/nPJDCqhIQWMB0GA1UdDgQWBBR9cOWuOIsGP6ocGo/5zyQwqoSEFjAMBgNV
-HRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkq
-hkiG9w0BAQUFAAOCAQEAKrgXzh8QlOu4mre5X+za95IkrNySO8cgjfKZ5V04
-ocI07cUTWVwFtStPYZuR+0H8/NU8TZh2BvWBfevdkObRVlTa4y0MnxEylCIB
-evZsLHRnBMylj44ss0O1lKLQfelifwa+JwGDnjr9iu6YQ0pr17WXOzq/T220
-Y/ozADQuLW2WyXvKmWO6vvT2MKAtmJbpVkQFqUSjYRDrgqFnXbxdJ3Wqiig2
-KjiS2d2kXgClzMx8KSreKJCrt+G2/30lC0DYqjSjLd4H61/OCt3Kfjp9JsFi
-aDrmLzfzgYYhxKlkqu9FNtEaZnz46TfW1mG+oq1I59/mdP7TbX3SJdysYlep
-9w==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFaDCCBFCgAwIBAgIQO1nHe81bV569N1KsdrSqGjANBgkqhkiG9w0BAQUF
-ADBiMRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBS
-b290IENBczEvMC0GA1UEAxMmYmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1w
-bGVtZW50YXRpb24wHhcNMDIwNDExMTExODEzWhcNMjIwNDEyMTEwNzI1WjBi
-MRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290
-IENBczEvMC0GA1UEAxMmYmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVt
-ZW50YXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkujQw
-CY5X0LkGLG9uJIAiv11DpvpPrILnHGhwhRujbrWqeNluB0s/6d/16uhUoWGK
-Di9pdRi3DOUUjXFumLhV/AyV0Jtu4S2I1DpAa5LxmZZk3tv/ePTulh1HiXzU
-vrmIdyM6CeYEnm2qXtLIvZpOGd+J6lsOfsPktPDgaTuID0GQ+NRxQyTBjyZL
-O1bp/4xsN+lFrYWMU8NghpBKlsmzVLC7F/AcRdnUGxlkVgoZ98zh/4avflhe
-rHqQH8koOUV7orbHnB/ahdQhhlkwk75TMzf270HPM8ercmsl9fNTGwxMLvF1
-S++gh/f+ihXQbNXL+WhTuXAVE8L1LvtDNXUtAgMBAAGjggIYMIICFDAMBgNV
-HRMEBTADAQH/MIIBtQYDVR0gBIIBrDCCAagwggGkBg8rBgEEAbE+AAADCSiD
-kTEwggGPMEEGCCsGAQUFBwIBFjVodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20v
-cHJvZHVjdHNfc2VydmljZXMvaW5kZXguaHRtbDCCAUgGCCsGAQUFBwICMIIB
-OhqCATZSZWxpYW5jZSBvbiBvciB1c2Ugb2YgdGhpcyBDZXJ0aWZpY2F0ZSBj
-cmVhdGVzIGFuIGFja25vd2xlZGdtZW50IGFuZCBhY2NlcHRhbmNlIG9mIHRo
-ZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlv
-bnMgb2YgdXNlLCB0aGUgQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1l
-bnQgYW5kIHRoZSBSZWx5aW5nIFBhcnR5IEFncmVlbWVudCwgd2hpY2ggY2Fu
-IGJlIGZvdW5kIGF0IHRoZSBiZVRSVVNUZWQgd2ViIHNpdGUsIGh0dHA6Ly93
-d3cuYmV0cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1s
-MAsGA1UdDwQEAwIBBjAfBgNVHSMEGDAWgBSp7BR++dlDzFMrFK3P9/BZiUHN
-GTAdBgNVHQ4EFgQUqewUfvnZQ8xTKxStz/fwWYlBzRkwDQYJKoZIhvcNAQEF
-BQADggEBANuXsHXqDMTBmMpWBcCorSZIry0g6IHHtt9DwSwddUvUQo3neqh0
-3GZCWYez9Wlt2ames30cMcH1VOJZJEnl7r05pmuKmET7m9cqg5c0Lcd9NUwt
-NLg+DcTsiCevnpL9UGGCqGAHFFPMZRPB9kdEadIxyKbdLrML3kqNWz2rDcI1
-UqJWN8wyiyiFQpyRQHpwKzg21eFzGh/l+n5f3NacOzDq28BbJ1zTcwfBwvNM
-m2+fG8oeqqg4MwlYsq78B+g23FW6L09A/nq9BqaBwZMifIYRCgZ3SK41ty8y
-mmFei74pnykkiFY5LKjSq5YDWtRIn7lAhAuYaPsBQ9Yb4gmxlxw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYT
-AlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNl
-cnR1bSBDQTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJ
-BgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNV
-BAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AM6xwS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYV
-M42sLQnFdvkrOYCJ5JdLkKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/Ox
-LjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE
-7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/KUz/iDsaW
-VhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu
-/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYD
-VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESS
-bLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQaTOs9qmdvLdTN
-/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvgGrZg
-FCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqT
-E5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
-O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYV
-IZQs6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJH
-QjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxm
-b3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFB
-IENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIz
-MTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
-Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENB
-IExpbWl0ZWQxITAfBgNVBAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCC
-ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL5AnfRu4ep2hxxNRUSO
-vkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhGC1Pqy0wk
-wLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfH
-dr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf04
-9vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULi
-mAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cmez6KJcfA3Z3m
-NWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEKIz6W
-8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB
-Af8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
-QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwu
-Y29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG
-9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
-7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHC
-v8S5dIa2LX1rzNLzRt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdV
-CYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAV
-GI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C12yxow+ev+to
-51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJH
-QjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxm
-b3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2Vj
-dXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4
-MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIg
-TWFuY2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2Rv
-IENBIExpbWl0ZWQxJDAiBgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2
-aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMBxM4KK0HDr
-c4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP9nQ95IDC
-+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8
-j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWC
-iIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtG
-Cd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz6YiO/O1R65Nx
-Tq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4EFgQU
-PNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB
-/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
-Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNo
-dHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNl
-cy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
-4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiF
-Gv45jN5bBAS0VPmjZ55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXG
-De+X3EyrEeFryzHRbPtIgKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsF
-Vy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfU
-a7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6s
-Cx1HRR3B7Hzs/Sk=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJH
-QjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxm
-b3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1
-c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0y
-ODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVy
-IE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9k
-byBDQSBMaW1pdGVkMSUwIwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNl
-cnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhT
-WvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh73TkVvFVI
-xO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9
-C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/
-oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW1O24zG71++IsWL1/
-T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7kUlcsutT6vif
-R4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1UdDgQW
-BBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
-ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2
-hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2Vy
-dmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
-uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdT
-mw7pSqBYaWcOrp32pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+C
-l5EfKNsYEYwq5GWDVxISjBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/g
-hhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVF
-wL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOj
-GM9O9y5Xt5hwXsjEeLBi
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQG
-EwJVUzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREw
-DwYDVQQLEwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQw
-MjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVy
-ZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEB
-AQUAA4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlR
-EmlvMVW5SXIACH7TpWJENySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+Lth
-zfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2io74CTADKAqjuAQIxZA9SLRN0
-dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBoBgNVHR8E
-YTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwg
-U2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNV
-BAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIx
-MDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5fpFpRhgTCgJ3
-pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAMBgNV
-HRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3
-DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN
-QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomA
-sH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6
-w4pl
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGp
-MQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBM
-YWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENv
-LjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDEx
-ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDEx
-ODE4NTVaFw0wODExMjgxODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UE
-CBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0Rp
-Z2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgWDEx
-FjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0BCQEWEmNhQGRp
-Z3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-ANLGJrbnpT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdfWvnTLnUv2Chi0ZMv/E3U
-q4flCMeZ55I/db3rJbQVwZsZPdJEjdd0IG03Ao9pk1uKxBmd9LIO/BZsubEF
-koPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGAvqPYUrBEzUNKcI5YhZXh
-TizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F5X5yP4Wd
-lGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMvOnNn
-7pTKBBMFYgZwI7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG
-9w0BAQUFAAOCAQEAojeyP2n714Z5VEkxlTMr89EJFEliYIalsBHiUMIdBlc+
-LegzZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2vAd5ZWRzfdd5ynvV
-WlHG4VMElo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX
-8ngvYzZAOONGDx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn8
-6Oawde3uPclwx12qgUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsT
-F7ANUkz+/m9c4pFuHf2kYtdo+o56T9II2pPc8JIRetDccpMMc5NihWjQ9A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQG
-EwJVUzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREw
-DwYDVQQLEwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3
-MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVy
-ZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEB
-AQUAA4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fB
-w18DW9Fvrn5C6mYjuGODVvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87e
-ZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd
-55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBoBgNVHR8E
-YTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwg
-U2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNV
-BAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIw
-OTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6CTShlgDzJQW6s
-NS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAMBgNV
-HRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3
-DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR
-xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLb
-dHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlih
-w6ID
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGp
-MQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBM
-YWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENv
-LjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIx
-ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAy
-MjQ2MTZaFw0wODExMjcyMjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UE
-CBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0Rp
-Z2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgWDIx
-FjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0BCQEWEmNhQGRp
-Z3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-ANx18IzAdZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbVp9oaBBg5kkp4o4HC9Xd6
-ULRw/5qrxsfKboNPQpj7Jgva3G3WqZlVUmfpKAOS3OWwBZoPFflrWXJW8vo5
-/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9kVySVGkl5WJp3OXuAFK9
-MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi3sOP17ih
-YqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+QVCv
-bK4iNC7Va26Dunm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG
-9w0BAQUFAAOCAQEAtTYOXeFhKFoRZcA/gwN5Tb4opgsHAlKFzfiR0BBstWog
-WxyQ2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT4EOvkTvRyyzYdFQ6
-HE3K1GjNI3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV
-6YyDfFk/xPEL553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8
-PzGn0EdzMzkbzE5q10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30
-sPDst2yC7S8xmUJMqbINuBVd8d+6ybVK1GSYsyapMMj9puyrliGtf8J4tg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UE
-ChMLRW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NB
-X0NQUyBpbmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsT
-HChjKSAyMDAwIEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1
-c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAy
-MDcxNjE2NDBaFw0yMDAyMDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0
-Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29y
-cC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAg
-RW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2xp
-ZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQCTdLS25MVL1qFof2LV7PdRV7NySpj10InJrWPNTTVRaoTU
-rcloeW+46xHbh65cJFET8VQlhK8pK5/jgOLZy93GRUk0iJBeAZfv6lOm3fzB
-3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKklWb1m9fkn5JVn1j+SgF7y
-NH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHdBgNVHR8E
-gdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUAw
-PgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSBy
-ZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0
-Lm5ldCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDbGllbnQgQ2Vy
-dGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw
-IoAPMjAwMDAyMDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQD
-AgEGMB8GA1UdIwQYMBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQW
-BBSEi3T9xY3A/ydtIDdFfP4tzrrTfTAMBgNVHRMEBTADAQH/MB0GCSqGSIb2
-fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQFAAOBgQBObzWA
-O9GK9Q6nIMstZVXQkvTnhLUGJoMShAusO7JE7r3PQNsgDrpuFOow4DtifH+L
-a3xKp9U1PL6oXOpLu5OOgGarDyn9TS2/GpsKkMWr2tGzhtQvJFJcem3G8v7l
-TRowjJDyutdKPkN+1MhQGof4T4HHdguEOnKdzmVml64mXg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UE
-ChMLRW50cnVzdC5uZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xf
-Q1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
-KGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVz
-dC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw0wMDAyMDQxNzIwMDBaFw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtF
-bnRydXN0Lm5ldDE/MD0GA1UECxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMg
-aW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykg
-MjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5l
-dCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0G
-CSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO8GCGD9JYf9Mzly0XonUw
-tZZkJi9ow0SrqHXmAGc0V55lxyKbc+bT3QgON1WqJUaBbL3+qPZ1V1eMkGxK
-wz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439PmrkDQYC2dWcTC5/oVzbI
-XQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4QgEBBAQD
-AgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoTC0Vu
-dHJ1c3QubmV0MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAy
-MDAwIEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0
-IFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNV
-BAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIw
-NDE3NTAwMFowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc
-/vuLkpyw8m4iMB0GA1UdDgQWBBTLbMBr47s+y/winP77i5KcsPJuIjAMBgNV
-HRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkq
-hkiG9w0BAQQFAAOBgQBi24GRzsiad0Iv7L0no1MPUBvqTpLwqa+poLpIYcvv
-yQbvH9X07t9WLebKahlzqlO+krNQAraFJnJj2HVQYnUUt7NQGj/KEQALhUVp
-bbalrlHhStyCP2yMNLJ3a9kC9n8O6mUE8c1UyrrJzOCE98g+EZfTYAkYvAX/
-bIkz8OwVDw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UE
-ChMLRW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNf
-MjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsT
-HChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1
-c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEy
-MjQxNzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0
-Lm5ldDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29y
-cC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkg
-RW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2Vy
-dGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4
-QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/EC
-DNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuXMlBvPci6Zgzj
-/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzWnLLP
-KQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZd
-enoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
-4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB
-0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJ
-FrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B
-AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFh
-fGPjK50xA3B20qMooPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVU
-KcgF7bISKo30Axv/55IQh7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaoho
-wXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2
-+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof888
-6ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UE
-BhMCVVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50
-cnVzdC5uZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBs
-aW1pdHMgbGlhYi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExp
-bWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0
-aW9uIEF1dGhvcml0eTAeFw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBa
-MIHJMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNV
-BAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5mby9DUFMgaW5jb3Jw
-LiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMpIDE5OTkgRW50
-cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GL
-ADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo6oT9n3V5z8GKUZSv
-x1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux5zDeg7K6PvHV
-iTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zmAqTmT173
-iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSCARkw
-ggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50
-cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0Ff
-SW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UE
-CxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50
-cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYD
-VQQDEwRDUkwxMCygKqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9D
-bGllbnQxLmNybDArBgNVHRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkx
-MDEyMTkyNDMwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW
-/O5bs8qZdIuV6kwwHQYDVR0OBBYEFMT7nCl7l81MlvzuW7PKmXSLlepMMAwG
-A1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
-hvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7pFuPeJoSSJn59DXeDDYHAmsQ
-OokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzzwy5E97BnRqqS5TvaHBkU
-ODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/aEkP/TOYGJqibGapE
-PHayXOw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UE
-BhMCVVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50
-cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
-MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UE
-AxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQsw
-CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3
-dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlh
-Yi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVkMTow
-OAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
-b24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0
-VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHIN
-iC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3wkrYKZImZNHk
-mGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcwggHT
-MBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHY
-pIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
-BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChs
-aW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBM
-aW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNo
-dHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAi
-gA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMC
-AQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYE
-FPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9
-B0EABAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKn
-CqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2Zcgx
-xufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd2cNgQ4xYDiKWL2KjLB+6
-rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQG
-EwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1
-cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4
-MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgx
-LTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0
-eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2R
-FGiYCh7+2gRvE4RiIcPRfM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO
-/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuv
-K9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAGA1UdHwRp
-MGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEt
-MCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
-MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjAL
-BgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gjIBBPM5iQn9Qw
-HQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMBAf8w
-GgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GB
-AFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
-7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2u
-FHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJV
-UzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1
-aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcN
-MjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZh
-eCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2lu
-ZXNzIENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fe
-k6lfWg0XTzQaDJj0ItlZ1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5
-/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4aIZX5UkxVWsUPOE9G+m34LjXW
-HXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBkMBEGCWCG
-SAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4
-MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBq
-R3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnm
-JXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+WB5Hh1Q+WKG1
-tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+KpYr
-tWKmpj29f5JZzVoqgrI3eQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQG
-EwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlm
-YXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5
-MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXgg
-U2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0Et
-MjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF
-7Y6yEb3+6+e0dMKP/wXn2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKD
-pkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HM
-HMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAGA1UdHwRp
-MGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBT
-ZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y
-MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjAL
-BgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBqy/3YIHqngnYw
-HQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMBAf8w
-GgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GB
-AAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
-0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkt
-y3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJV
-UzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1
-aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0
-MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoT
-E0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJl
-IEdsb2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
-gYkCgYEAuucXkAJlsTRVPEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQy
-td4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORR
-OhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxnhcXIw2EC
-AwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8w
-HwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6o
-oHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf
-2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkAZ70Br83gcfxa
-z2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIYNMR1
-pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYT
-AlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVz
-dCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBC
-MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UE
-AxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEH
-CIjaWC9mOSm9BXiLnTjoBbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlC
-GDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet8u5fa9IAjbkU+BQVNdnARqN7
-csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+VcT4wt/lAj
-Nvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdRe
-JivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQAB
-o1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9
-qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1luMrMTjANBgkq
-hkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Qzxpe
-R+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWV
-Yrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
-PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot
-2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeX
-xx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
-Mw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILAgAAAAAA1ni3lAUwDQYJKoZIhvcNAQEEBQAwVzEL
-MAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNV
-BAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05
-ODA5MDExMjAwMDBaFw0xNDAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkw
-FwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRsw
-GQYDVQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQDaDuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR
-4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc
-71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4
-bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgK
-OOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMW
-ea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DP
-AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIABjAdBgNVHQ4EFgQUYHtmGkUNl8qJ
-UC99BM00qP/8/UswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOC
-AQEArqqf/LfSyx9fOSkoGJ40yWxPbxrwZKJwSk8ThptgKJ7ogUmYfQq75bCd
-PTbbjwVR/wkxKh/diXeeDy5slQTthsu0AD+EAk2AaioteAuubyuig0SDH81Q
-gkwkr733pbTIWg/050deSY43lv6aiAU62cDbKYfmGZZHpzqmjIs8d/5GY6dT
-2iHRrH5Jokvmw2dZL7OKDrssvamqQnw1wdh/1acxOk5jQzmvCLBhNIzTmKlD
-NPYPhyk7ncJWWJh3w/cbrPad+D6qp1RF8PX51TFl/mtYnHGzHtdS6jIX/EBg
-Hcl5JLL2bP2oZg6C3ZjL2sJETy6ge/L3ayx2EYRGinij4w==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgw
-FgYDVQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRy
-dXN0IFNvbHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3Qg
-R2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1
-MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYD
-VQQLEx5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMT
-GkdURSBDeWJlclRydXN0IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUA
-A4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4usJTQGz0O9pTAipTHBsiQl8i4
-ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcqlHHK6XALn
-ZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8F
-LztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh3
-46B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq
-81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0PlZPvy5TYnh+d
-XIVtx6quTx8itc2VrbqnzPmrC3p/
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgw
-FgYDVQQKEw9HVEUgQ29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRy
-dXN0IFJvb3QwHhcNOTYwMjIzMjMwMTAwWhcNMDYwMjIzMjM1OTAwWjBFMQsw
-CQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMRwwGgYDVQQD
-ExNHVEUgQ3liZXJUcnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
-iQKBgQC45k+625h8cXyvRLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8K
-DPufpz+iCWaEVh43KRuH6X4MypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPw
-KfWVWgkWYXcKIiXUT0Wqx73llt/51KiOQswkwB6RJ0q1bQaAYznEol44AwID
-AQABMA0GCSqGSIb3DQEBBAUAA4GBABKzdcZfHeFhVYAA1IFLezEPI2PnPfMD
-+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWlIjeaY8JIILTbcuPI9tl8vrGv
-U9oUtCG41tWW4/5ODFlitppK+ULdjG+BqXH/9ApybW1EDp3zdHSo1TRJ6V6e
-6bR64eVaH4QwnNOfpSXY
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYT
-AkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEu
-MCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5s
-LjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1
-MjEzMDEGA1UECxMqSVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MTMwMQYDVQQDEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlw
-cy5lczAeFw0wMTEyMjkwMDUzNThaFw0yNTEyMjcwMDUzNThaMIIBHDELMAkG
-A1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vs
-b25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNl
-cyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYw
-OTI5NDUyMTMwMQYDVQQLEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBDQSBDaGFpbmVkIENBcyBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1h
-aWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcVpJJspQg
-vJhPUOtopKdJC7/SMejHT8KGC/po/UNaivNgkjWZOLtNA1IhW/A3mTXhQSCB
-hYEFcYGdtJUZqV92NC5jNzVXjrQfQj8VXOF6wV8TGDIxya2+o8eDZh65nAQT
-y2nBBt4wBrszo7Uf8I9vzv+W6FS+ZoCua9tBhDaiPQIDAQABo4IEQzCCBD8w
-HQYDVR0OBBYEFKGtMbH5PuEXpsirNPxShwkeYlJBMIIBTgYDVR0jBIIBRTCC
-AUGAFKGtMbH5PuEXpsirNPxShwkeYlJBoYIBJKSCASAwggEcMQswCQYDVQQG
-EwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmEx
-LjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMu
-bC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0
-NTIxMzAxBgNVBAsTKklQUyBDQSBDaGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9u
-IEF1dGhvcml0eTEzMDEGA1UEAxMqSVBTIENBIENoYWluZWQgQ0FzIENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5p
-cHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRk
-MGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggr
-BgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYK
-KwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBz
-QG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglg
-hkgBhvhCAQ0ENRYzQ2hhaW5lZCBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkg
-aHR0cDovL3d3dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8vd3d3
-Lmlwcy5lcy9pcHMyMDAyLzA3BglghkgBhvhCAQQEKhYoaHR0cDovL3d3dy5p
-cHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDA8BglghkgBhvhCAQMELxYt
-aHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0aW9uQ0FDLmh0bWw/
-MDkGCWCGSAGG+EIBBwQsFipodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jl
-bmV3YWxDQUMuaHRtbD8wNwYJYIZIAYb4QgEIBCoWKGh0dHA6Ly93d3cuaXBz
-LmVzL2lwczIwMDIvcG9saWN5Q0FDLmh0bWwwbQYDVR0fBGYwZDAuoCygKoYo
-aHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0FDLmNybDAyoDCg
-LoYsaHR0cDovL3d3d2JhY2suaXBzLmVzL2lwczIwMDIvaXBzMjAwMkNBQy5j
-cmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5p
-cHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAERyMJ1WWKJBGyi3leGmGpVfp3hA
-K+/blkr8THFj2XOVvQLiogbHvpcqk4A0hgP63Ng9HgfNHnNDJGD1HWHc3Jag
-vPsd4+cSACczAsDAK1M92GsDgaPb1pOVIO/Tln4mkImcJpvNb2ar7QMiRDjM
-Wb2f2/YHogF/JsRj9SVCXmK9
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYT
-AkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEu
-MCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5s
-LjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1
-MjEuMCwGA1UECxMlSVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eTEuMCwGA1UEAxMlSVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAx
-MTIyOTAwNTkzOFoXDTI1MTIyNzAwNTkzOFowggESMQswCQYDVQQGEwJFUzES
-MBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNV
-BAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzAp
-BgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxLjAs
-BgNVBAsTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
-LjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG
-9w0BAQEFAAOBjQAwgYkCgYEA4FEnpwvdr9G5Q1uCN0VWcu+atsIS7ywSzHb5
-BlmvXSHU0lq4oNTzav3KaY1mSPd05u42veiWkXWmcSjK5yISMmmwPh5r9FBS
-YmL9Yzt9fuzuOOpi9GyocY3h6YvJP8a1zZRCb92CRTzo3wno7wpVqVZHYUxJ
-ZHMQKD/Kvwn/xi8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBTrsxl588GlHKzc
-uh9morKbadB4CDCCAUQGA1UdIwSCATswggE3gBTrsxl588GlHKzcuh9morKb
-adB4CKGCARqkggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNl
-bG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJu
-ZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFp
-bC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0Eg
-Q0xBU0UxIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMg
-Q0EgQ0xBU0UxIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcN
-AQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8E
-BQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUH
-AwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIB
-FgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcw
-GgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0Bt
-YWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UxIENBIENlcnRpZmlj
-YXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
-BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQt
-FitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3Js
-MD8GCWCGSAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jl
-dm9jYXRpb25DTEFTRTEuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93
-d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFMS5odG1sPzA6BglghkgB
-hvhCAQgELRYraHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFT
-RTEuaHRtbDBzBgNVHR8EbDBqMDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9p
-cHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMDWgM6Axhi9odHRwOi8vd3d3YmFj
-ay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0UxLmNybDAvBggrBgEFBQcB
-AQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZI
-hvcNAQEFBQADgYEAK9Dr/drIyllq2tPMMi7JVBuKYn4VLenZMdMu9Ccj/1ur
-xUq2ckCuU3T0vAW0xtnIyXf7t/k0f3gA+Nak5FI/LEpjV4F1Wo7ojPsCwJTG
-Kbqz3Bzosq/SLmJbGqmODszFV0VRFOlOHIilkfSj945RyKm+hjM+5i9Ibq9U
-kE6tsSU=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYT
-AkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEu
-MCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5s
-LjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1
-MjEuMCwGA1UECxMlSVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eTEuMCwGA1UEAxMlSVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAx
-MTIyOTAxMDE0NFoXDTI1MTIyNzAxMDE0NFowggESMQswCQYDVQQGEwJFUzES
-MBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNV
-BAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzAp
-BgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxLjAs
-BgNVBAsTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
-LjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG
-9w0BAQEFAAOBjQAwgYkCgYEAqxf+DrDGaBtT8FK+n/ra+osTBLsBjzLZH49N
-zjaY2uQARIwo2BNEKqRrThckQpzTiKRBgtYj+4vJhuW5qYIF3PHeH+AMmVWY
-8jjsbJ0gA8DvqqPGZARRLXgNo9KoOtYkTOmWehisEyMiG3zoMRGzXwmqMHBx
-RiVrSXGAK5UBsh8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBS4k/8uy9wsjqLn
-ev42USGjmFsMNDCCAUQGA1UdIwSCATswggE3gBS4k/8uy9wsjqLnev42USGj
-mFsMNKGCARqkggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNl
-bG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJu
-ZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFp
-bC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0Eg
-Q0xBU0UzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMg
-Q0EgQ0xBU0UzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcN
-AQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8E
-BQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUH
-AwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIB
-FgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcw
-GgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0Bt
-YWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UzIENBIENlcnRpZmlj
-YXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
-BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQt
-FitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3Js
-MD8GCWCGSAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jl
-dm9jYXRpb25DTEFTRTMuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93
-d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFMy5odG1sPzA6BglghkgB
-hvhCAQgELRYraHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFT
-RTMuaHRtbDBzBgNVHR8EbDBqMDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9p
-cHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMDWgM6Axhi9odHRwOi8vd3d3YmFj
-ay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0UzLmNybDAvBggrBgEFBQcB
-AQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZI
-hvcNAQEFBQADgYEAF2VcmZVDAyevJuXr0LMXI/dDqsfwfewPxqmurpYPdikc
-4gYtfibFPPqhwYHOU7BC0ZdXGhd+pFFhxu7pXu8Fuuu9D6eSb9ijBmgpjnn1
-/7/5p6/ksc7C0YBCJwUENPjDfxZ4IwwHJPJGR607VNCv1TGyr33I6unUVtkO
-E7LFRVA=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYT
-AkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEu
-MCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5s
-LjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1
-MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRo
-b3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcN
-MDExMjI5MDEwNTMyWhcNMjUxMjI3MDEwNTMyWjCCARQxCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwG
-A1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjEr
-MCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEv
-MC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwgZ8wDQYJ
-KoZIhvcNAQEBBQADgY0AMIGJAoGBALsw19zQVL01Tp/FTILq0VA8R5j8m2md
-d81u4D/u6zJfX5/S0HnllXNEITLgCtud186Nq1KLK3jgm1t99P1tCeWu4Wwd
-ByOgF9H5fahGRpEiqLJpxq339fWUoTCUvQDMRH/uxJ7JweaPCjbB/SQ9AaD1
-e+J8eGZDi09Z8pvZ+kmzAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUZyaW56G/
-2LUDnf473P7yiuYV3TAwggFGBgNVHSMEggE9MIIBOYAUZyaW56G/2LUDnf47
-3P7yiuYV3TChggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlC
-YXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIElu
-dGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBz
-QG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBT
-IENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
-JklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJ
-KoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAM
-BgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYI
-KwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYB
-BAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEE
-BAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
-D2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMSBDQSBD
-ZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG
-SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgB
-hvhCAQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xB
-U0VBMS5jcmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lw
-czIwMDIvcmV2b2NhdGlvbkNMQVNFQTEuaHRtbD8wPQYJYIZIAYb4QgEHBDAW
-Lmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTEuaHRt
-bD8wOwYJYIZIAYb4QgEIBC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIv
-cG9saWN5Q0xBU0VBMS5odG1sMHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93
-d3cuaXBzLmVzL2lwczIwMDIvaXBzMjAwMkNMQVNFQTEuY3JsMDagNKAyhjBo
-dHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMS5j
-cmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5p
-cHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAH66iqyAAIQVCtWYUQxkxZwCWINm
-yq0eB81+atqAB98DNEock8RLWCA1NnHtogo1EqWmZaeFaQoO42Hu6r4okzPV
-7Oi+xNtff6j5YzHIa5biKcJboOeXNp13XjFr/tOn2yrb25aLH2betgPAK7N4
-1lUH5Y85UN4HI3LmvSAUS7SG
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYT
-AkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEu
-MCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5s
-LjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1
-MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRo
-b3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcN
-MDExMjI5MDEwNzUwWhcNMjUxMjI3MDEwNzUwWjCCARQxCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwG
-A1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjEr
-MCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEv
-MC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwgZ8wDQYJ
-KoZIhvcNAQEBBQADgY0AMIGJAoGBAO6AAPYaZC6tasiDsYun7o/ZttvNG7uG
-BiJ2MwwSbUhWYdLcgiViL5/SaTBlA0IjWLxH3GvWdV0XPOH/8lhneaDBgbHU
-VqLyjRGZ/fZ98cfEXgIqmuJKtROKAP2Md4bm15T1IHUuDky/dMQ/gT6DtKM4
-Ninn6Cr1jIhBqoCm42zvAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUHp9XUEe2
-YZM50yz82l09BXW3mQIwggFGBgNVHSMEggE9MIIBOYAUHp9XUEe2YZM50yz8
-2l09BXW3mQKhggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlC
-YXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIElu
-dGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBz
-QG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBT
-IENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
-JklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJ
-KoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAM
-BgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYI
-KwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYB
-BAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEE
-BAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
-D2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMyBDQSBD
-ZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG
-SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgB
-hvhCAQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xB
-U0VBMy5jcmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lw
-czIwMDIvcmV2b2NhdGlvbkNMQVNFQTMuaHRtbD8wPQYJYIZIAYb4QgEHBDAW
-Lmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTMuaHRt
-bD8wOwYJYIZIAYb4QgEIBC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIv
-cG9saWN5Q0xBU0VBMy5odG1sMHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93
-d3cuaXBzLmVzL2lwczIwMDIvaXBzMjAwMkNMQVNFQTMuY3JsMDagNKAyhjBo
-dHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMy5j
-cmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5p
-cHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAEo9IEca2on0eisxeewBwMwB9dbB
-/MjD81ACUZBYKp/nNQlbMAqBACVHr9QPDp5gJqiVp4MI3y2s6Q73nMify5NF
-8bpqxmdRSmlPa/59Cy9SKcJQrSRE7SOzSMtEQMEDlQwKeAYSAfWRMS1Jjbs/
-RU4s4OjNtckUFQzjB4ObJnXv
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICtzCCAiACAQAwDQYJKoZIhvcNAQEEBQAwgaMxCzAJBgNVBAYTAkVTMRIw
-EAYDVQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UE
-ChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVz
-MRcwFQYDVQQDEw5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBz
-QG1haWwuaXBzLmVzMB4XDTk4MDEwMTIzMjEwN1oXDTA5MTIyOTIzMjEwN1ow
-gaMxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCQVJDRUxPTkExEjAQBgNVBAcT
-CUJBUkNFTE9OQTEZMBcGA1UEChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYGA1UE
-CxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQDEw5JUFMgU0VSVklET1JFUzEe
-MBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQCsT1J0nznqjtwlxLyYXZhkJAk8IbPMGbWOlI6H0fg3
-PqHILVikgDVboXVsHUUMH2Fjal5vmwpMwci4YSM1gf/+rHhwLWjhOgeYlQJU
-3c0jt4BT18g3RXIGJBK6E2Ehim51KODFDzT9NthFf+G4Nu+z4cYgjui0OLzh
-PvYR3oydAQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBACzzw3lYJN7GO9HgQmm4
-7mSzPWIBubOE3yN93ZjPEKn+ANgilgUTB1RXxafey9m4iEL2mdsUdx+2/iU9
-4aI+A6mB0i1sR/WWRowiq8jMDQ6XXotBtDvECgZAHd1G9AHduoIuPD14cJ58
-GNCr+Lh3B0Zx8coLY1xq+XKU1QFPoNtC
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIIODCCB6GgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYT
-AkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEu
-MCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5s
-LjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1
-MjE0MDIGA1UECxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9u
-IEF1dGhvcml0eTE0MDIGA1UEAxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwu
-aXBzLmVzMB4XDTAxMTIyOTAxMTAxOFoXDTI1MTIyNzAxMTAxOFowggEeMQsw
-CQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJj
-ZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZp
-Y2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4gIEIt
-NjA5Mjk0NTIxNDAyBgNVBAsTK0lQUyBDQSBUaW1lc3RhbXBpbmcgQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkxNDAyBgNVBAMTK0lQUyBDQSBUaW1lc3RhbXBp
-bmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lw
-c0BtYWlsLmlwcy5lczCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLju
-VqWajOY2ycJioGaBjRrVetJznw6EZLqVtJCneK/K/lRhW86yIFcBrkSSQxA4
-Efdo/BdApWgnMjvEp+ZCccWZ73b/K5Uk9UmSGGjKALWkWi9uy9YbLA1UZ2t6
-KaFYq6JaANZbuxjC3/YeE1Z2m6Vo4pjOxgOKNNtMg0GmqaMCAwEAAaOCBIAw
-ggR8MB0GA1UdDgQWBBSL0BBQCYHynQnVDmB4AyKiP8jKZjCCAVAGA1UdIwSC
-AUcwggFDgBSL0BBQCYHynQnVDmB4AyKiP8jKZqGCASakggEiMIIBHjELMAkG
-A1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vs
-b25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNl
-cyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYw
-OTI5NDUyMTQwMgYDVQQLEytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MTQwMgYDVQQDEytJUFMgQ0EgVGltZXN0YW1waW5n
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNA
-bWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsG
-A1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUF
-BwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGC
-NwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMw
-EYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5l
-czBHBglghkgBhvhCAQ0EOhY4VGltZXN0YW1waW5nIENBIENlcnRpZmljYXRl
-IGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgECBBwW
-Gmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMEAGCWCGSAGG+EIBBAQzFjFo
-dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBpbmcu
-Y3JsMEUGCWCGSAGG+EIBAwQ4FjZodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAy
-L3Jldm9jYXRpb25UaW1lc3RhbXBpbmcuaHRtbD8wQgYJYIZIAYb4QgEHBDUW
-M2h0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmVuZXdhbFRpbWVzdGFtcGlu
-Zy5odG1sPzBABglghkgBhvhCAQgEMxYxaHR0cDovL3d3dy5pcHMuZXMvaXBz
-MjAwMi9wb2xpY3lUaW1lc3RhbXBpbmcuaHRtbDB/BgNVHR8EeDB2MDegNaAz
-hjFodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBp
-bmcuY3JsMDugOaA3hjVodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9p
-cHMyMDAyVGltZXN0YW1waW5nLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYB
-BQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEA
-ZbrBzAAalZHK6Ww6vzoeFAh8+4Pua2JR0zORtWB5fgTYXXk36MNbsMRnLWha
-sl8OCvrNPzpFoeo2zyYepxEoxZSPhExTCMWTs/zif/WN87GphV+I3pGW7hdb
-rqXqcGV4LCFkAZXOzkw+UPS2Wctjjba9GNSHSl/c7+lW8AoM6HU=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQG
-EwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9v
-dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMg
-Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNa
-Fw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9W
-YWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1
-lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMukJ0KX0J+D
-isPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj18
-2d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Sp
-x2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZ
-yH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospUxbF6lR1xHkop
-igPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4wPQYI
-KwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFk
-aXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
-ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlh
-bmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBw
-YXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
-ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRp
-ZmljYXRpb24gcHJhY3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmlj
-YXRlIFBvbGljeS4wIgYIKwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMu
-Ym0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYw
-gaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJN
-MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290
-IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCLMA4GA1UdDwEB/wQEAwIB
-BjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lofFIk3Wdv
-OXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10
-buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe
-/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6
-isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
-xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQ
-NiOKSnQ2+Q==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlD
-ZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
-Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRp
-b24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNv
-bS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYy
-NjAwMjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4x
-NTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24g
-QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8x
-IDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3
-DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2f
-NUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChM
-MFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqYJJgpp0lZpd34
-t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs3x/b
-e0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0Wu
-PIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
-PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUF
-ADA6MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0Eg
-U2VjdXJpdHkgMTAyNCBWMzAeFw0wMTAyMjIyMTAxNDlaFw0yNjAyMjIyMDAx
-NDlaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJT
-QSBTZWN1cml0eSAxMDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
-gQDV3f5mCc8kPD6ugU5OisRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dY
-rIMKo1W1exeQFYRMiu4mmdxY78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYt
-bzZUaMjShFbuklNhCbM/OZuoyZu9zp9+1BlqFikYvtc6adwlWzMaUQIDAQAB
-o2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSME
-GDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAdBgNVHQ4EFgQUxMAcpAeU/c1N
-AdRU2qUMX96uBVowDQYJKoZIhvcNAQEFBQADgYEAPy1q4yZDlX2Jl2X7deRy
-HUZXxGFraZ8SmyzVWujAovBDleMf6XbN3Ou8k6BlCsdNT1+nr6JGFLkM88y9
-am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNumU4/iXgDmMrzVcydro7B
-qkWY+o8aoI2II/EVQQ2lRj6RP4vr93E=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUF
-ADA6MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0Eg
-U2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5
-MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJT
-QSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37
-RqtBaB4Y6lXIL5F4iSj7Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E
-0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J
-6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iHKrtjEAMq
-s6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzD
-uvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2Mw
-YTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAW
-gBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NRMKSq6UWuNST6
-/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmYv/3V
-EhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5g
-EydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+
-f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJq
-aHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEk
-llgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
-pKnXwiJPZ9d37CAFYd4=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJK
-UDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0
-eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMw
-OTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1
-c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RD
-QTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8
-V6UMbXaKL0u/ZPtM7orw8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpx
-xpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uMDPpVmDvY6CKhS3E4eayXkmmz
-iX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX5HA49LY6
-tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819
-uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/L
-TX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZ
-aNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
-/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g0dNq
-/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94
-nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5
-Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNn
-PaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfci
-oU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
-FL39vmwLAw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJG
-STEPMA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENB
-MB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMC
-RkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBD
-QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue
-+H887dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mX
-y47vPxVnqIJyY1MPQYx9EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNY
-wBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JF
-hfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF6452F/NM8Ec
-yonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW
-1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB
-/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEB
-BQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuXZfsSZ9gqXLar
-5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxVyhbM
-p6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2
-nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv
-kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2y
-Ix4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJG
-STEPMA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENB
-MB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMC
-RkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBD
-QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE
-+hY3/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gX
-GM2RX/uJ4+q/Tl18GybTdXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQ
-TiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMGf+dJQMjFAbJUWmYdPfz56TwK
-noG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8PtOFCx4j1
-P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURr
-BGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB
-/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEB
-BQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zilzqsWuasvfDXL
-rNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEIcbCd
-jdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr4
-50kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
-Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkeja
-nZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQG
-EwJOTDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQD
-Ex1TdGFhdCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIz
-NDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVT
-dGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRl
-cmxhbmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAmNK1URF6gaYUmHFtvsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rF
-DBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02PjLwYdjeFnejKScfST5gTCaI+
-Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGcaC1Hoi6Ce
-UJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7l
-r7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4Zl
-kuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGO
-MAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDwwOgYIKwYBBQUH
-AgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9vdC1w
-b2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg
-0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k
-/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVF
-IGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0
-C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
-nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBp
-IzlWYGeQiy52OfsRiJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYV
-wSR8MnwDHTuhWEUykw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDXDCCAsWgAwIBAgICA+owDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYT
-AkRFMRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYD
-VQQKEzFUQyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3
-b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAyIENB
-MSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAe
-Fw05ODAzMDkxMTU5NTlaFw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJE
-RTEQMA4GA1UECBMHSGFtYnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UE
-ChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3VyaXR5IGluIERhdGEgTmV0d29y
-a3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTEp
-MCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVAdHJ1c3RjZW50ZXIuZGUwgZ8w
-DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANo46O0yAClxgwENv4wB3NrGrTmk
-qYov1YtcaF9QxmL1Zr3KkSLsqh1R1z2zUbKDTl3LSbDwTFXlay3HhQswHJJO
-gtTKAu33b77c4OMUuAVT8pr0VotanoWT0bSCVq5Nu6hLVxa8/vhYnvgpjbB7
-zXjJT6yLZwzxnPv8V5tXXE8NAgMBAAGjazBpMA8GA1UdEwEB/wQFMAMBAf8w
-DgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRy
-dXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G
-CSqGSIb3DQEBBAUAA4GBAIRS+yjf/x91AbwBvgRWl2p0QiQxg/lGsQaKic+W
-LDO/jLVfenKhhQbOhvgFjuj5Jcrag4wGrOs2bYWRNAQ29ELw+HkuCkhcq8xR
-T3h2oNmsGb0q0WkEKJHKNhAngFdb0lz1wlurZIFjdFH0l7/NEij3TWZ/p/Ac
-ASZ4smZHcFFk
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDXDCCAsWgAwIBAgICA+swDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYT
-AkRFMRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYD
-VQQKEzFUQyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3
-b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAzIENB
-MSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAe
-Fw05ODAzMDkxMTU5NTlaFw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJE
-RTEQMA4GA1UECBMHSGFtYnVyZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UE
-ChMxVEMgVHJ1c3RDZW50ZXIgZm9yIFNlY3VyaXR5IGluIERhdGEgTmV0d29y
-a3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTEp
-MCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVAdHJ1c3RjZW50ZXIuZGUwgZ8w
-DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALa0wTUFLg2N7KBAahwOJ6ZQkmtQ
-GwfeLud2zODa/ISoXoxjaitN2U4CdhHBC/KNecoAtvGwDtf7pBc9r6tpepYn
-v68zoZoqWarEtTcI8hKlMbZD9TKWcSgoq40oht+77uMMfTDWw1Krj10nnGvA
-o+cFa1dJRLNu6mTP0o56UHd3AgMBAAGjazBpMA8GA1UdEwEB/wQFMAMBAf8w
-DgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3LnRy
-dXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G
-CSqGSIb3DQEBBAUAA4GBABY9xs3Bu4VxhUafPiCPUSiZ7C1FIWMjWwS7TJC4
-iJIETb19AaM/9uzO8d7+feXhPrvGq14L3T2WxMup1Pkm5gZOngylerpuw3yC
-GdHHsbHD2w2Om0B8NwvxXej9H5CIpQ5ON2QhqE6NtJ/x3kit1VYYUimLRzQS
-CdS7kjXvD9s0
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQG
-EwJESzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50
-ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTda
-MEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNV
-BAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4Nr
-XceO+YQwzho7+vvOi20jxsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaq
-HF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5
-Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc5IogCSEW
-Vmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8n
-mHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwID
-AQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBY
-oFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIEludGVybmV0MR0w
-GwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JMMTAr
-BgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjAL
-BgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw
-HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8w
-HQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m
-gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKs
-LtB9KOy282A4aW8+2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7T
-mHnaCB4Mb7j4Fifvwm899qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE
-64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQ
-V0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQG
-EwJESzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0w
-MzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQww
-CgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSj
-hFuHnEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8
-z3sM8W9Hpg1DTeLpHTk0zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJH
-hNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvViGjaXbXqzRowwYCDdlCqT9HU
-3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBdedObaE+3p
-Hx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTw
-tyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
-Af8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYB
-BQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBvc2l0b3J5MIGd
-BggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBmcmEg
-ZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x
-LiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg
-T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEG
-A1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERD
-MRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm
-aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0Q
-BCQwIoAPMjAwMzAyMTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0j
-BBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4S
-GSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDAN
-BgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBu
-o7E4A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjND
-fZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8Aqt
-FxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoBmbgGglGBTvH1tJFUuSN6
-AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1AoLbrIyi
-gfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2Lq
-L19iUw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMC
-WkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3du
-MRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlm
-aWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBl
-cnNvbmFsIEJhc2ljIENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNp
-Y0B0aGF3dGUuY29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVow
-gcsxCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNV
-BAcTCUNhcGUgVG93bjEaMBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAm
-BgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24xITAfBgNV
-BAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBDQTEoMCYGCSqGSIb3DQEJARYZ
-cGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOB
-jQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53dXLdjUmbllegeNTK
-P1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdKwPQIcOk8RHtQ
-fmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7G1sY0b8j
-kyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOB
-gQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7
-c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95
-B21P9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMC
-WkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3du
-MRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlm
-aWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBl
-cnNvbmFsIEZyZWVtYWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1m
-cmVlbWFpbEB0aGF3dGUuY29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIz
-NTk1OVowgdExCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUx
-EjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UEChMRVGhhd3RlIENvbnN1bHRp
-bmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24x
-JDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBGcmVlbWFpbCBDQTErMCkGCSqG
-SIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhhd3RlLmNvbTCBnzANBgkq
-hkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfYDFG26nKRsIRefS0N
-j3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5ErHzmj+hND3Ef
-QDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVquzgkCGqY
-x7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
-hkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP
-MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgC
-neSa/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr
-5PjRzneigQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMC
-WkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3du
-MRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlm
-aWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBl
-cnNvbmFsIFByZW1pdW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXBy
-ZW1pdW1AdGhhd3RlLmNvbTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5
-NTlaMIHPMQswCQYDVQQGEwJaQTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIw
-EAYDVQQHEwlDYXBlIFRvd24xGjAYBgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5n
-MSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMSMw
-IQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJlbWl1bSBDQTEqMCgGCSqGSIb3
-DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUuY29tMIGfMA0GCSqGSIb3
-DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0VsBd/eJxZRNkERbGw7
-7f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWIEt12TfIa/G8j
-Hnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYDZicRFTuq
-W/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3
-DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH
-b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVx
-eTBhKXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1
-KzGJ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMC
-WkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3du
-MR0wGwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2Vy
-dGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3Rl
-IFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNl
-cnZlckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1
-OVowgc4xCzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQ
-BgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMUVGhhd3RlIENvbnN1bHRpbmcg
-Y2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2aXNpb24x
-ITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3
-DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhI
-NTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQug2SBhRz1JPL
-lyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/qgeN
-9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B
-AQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
-hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZ
-a4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcU
-Qg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMC
-WkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3du
-MR0wGwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2Vy
-dGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3Rl
-IFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0
-ZS5jb20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkG
-A1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2Fw
-ZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UE
-CxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQ
-VGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRz
-QHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I
-/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC
-6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCXL+eQbcAoQpnX
-TEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzARMA8G
-A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWD
-TSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
-QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdni
-TCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMC
-WkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmls
-bGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmlj
-YXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNOTcw
-MTAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTAT
-BgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzAN
-BgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24x
-HzAdBgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcN
-AQEBBQADgY0AMIGJAoGBANYrWHhhRYZT6jR7UZztsOYuGA7+4F+oJ9O0yeB8
-WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQaWt9MevPZQx08EHp5JduQ/vBR
-5zDWQQD9nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL8vg7ij5FrHGSALSQQZj7
-X+36ty6K+Ig3AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN
-AQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCouqoEiYbC9RAIDb/LogWK
-0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQpgCed/r8
-zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZCayJ
-SdM=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUF
-ADCBkzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
-IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEw
-HwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVU
-TiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2
-MzBaMIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNh
-bHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx
-ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTEbMBkGA1UEAxMS
-VVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+O
-GQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrr
-U0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrL
-Z9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykqlXvY8qdOD1R8
-oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv33i+
-Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4Gr
-MIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
-MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8v
-Y3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUE
-IzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
-DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHc
-rpY6CiM+iVnJowftGzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuM
-FrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1
-+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdO
-jtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jF
-VkwPDPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUF
-ADCBrjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
-IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEw
-HwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVU
-Ti1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAe
-Fw05OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJV
-UzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
-VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93
-d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJzdC1DbGll
-bnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxq
-mNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqk
-kqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6lL8/K2m2qL+us
-obNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHGTPNp
-saguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZU
-Ot4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws
-6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0G
-A1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJ
-hkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll
-bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEF
-BQcDAgYIKwYBBQUHAwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rk
-MPxTbyUkxsrt4jFcKw7u7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK
-2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/
-bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJR
-warVNZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf
-6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQ
-jvLzxq4oW6fw8zYX/MMF08oDSlQ=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUF
-ADCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
-IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEw
-HwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVU
-Ti1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5
-MTgxOTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQH
-Ew5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3
-b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNV
-BAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZ
-FvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6N
-q9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEH
-OG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNdoI6yqqr2jmmI
-BsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjfPe58
-BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhb
-AgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWG
-M2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3
-YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
-BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0o
-XnWO6y1n7k57K9cM//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjA
-bPLPSbtNk28GpgoiskliCE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59
-Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4f
-Fm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchq
-J/kniCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0q
-UZ6B+dQ7XnASfxAynB67nfhmqA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUF
-ADCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
-IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEw
-HwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVU
-Ti1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0
-ODM5WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgT
-AlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVT
-RVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVz
-dC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNh
-dGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZV
-hawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAb
-GHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZ
-NaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hAReYFmnjDRy7rh4
-xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwiP8vv
-/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7i
-gEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD
-AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf
-8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0
-LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G
-CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXh
-i6r/fWRRzwr/vH3YIWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUq
-f9FuVSTiuwL7MT++6LzsQCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAf
-hZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvP
-NximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+
-FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjis
-H8SE
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUF
-ADCBlTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
-IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEw
-HwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAbBgNVBAMTFFVU
-Ti1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4
-NDAzNlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMO
-U2FsdCBMYWtlIENpdHkxHjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29y
-azEhMB8GA1UECxMYaHR0cDovL3d3dy51c2VydHJ1c3QuY29tMR0wGwYDVQQD
-ExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r55
-96Uj71VRloTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc
-/EHSoTbL+z2RuufZcDX65OeQw5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2
-yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vulBe3/IW+pKvEHDHd17bR
-5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7RwvC
-bNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEA
-AaOBrzCBrDALBgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
-FgQU2u1kdBScFDyr3ZmpvVsoTYs8ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0
-cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmlyc3QtT2JqZWN0LmNy
-bDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw
-DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXF
-wfNfLEzIR1pp6ujwNTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T
-7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNOPmsnjtA6S4ULX9Ptaqd1y9Fahy85
-dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFEqmrPF3rPbw/U
-+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCA
-GKCGhU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2o
-Ps0AH8g=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlD
-ZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
-Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRp
-b24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNv
-bS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYy
-NTIyMjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4x
-NTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24g
-QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8x
-IDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3
-DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw
-8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m
-+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8YTfwggtFzVXSN
-dnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwGlN+V
-YH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8so
-gTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
-nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlD
-ZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
-Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRp
-b24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNv
-bS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYy
-NjAwMTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4x
-NTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24g
-QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8x
-IDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3
-DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc
-65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQ
-b7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QSv4dk+NoS/zcn
-wbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZSWI4
-OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZ
-oDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
-W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8x
-CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UE
-CxMuQ2xhc3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eTAeFw05NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNV
-BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
-c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCB
-nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3
-noaACpEO+jglr0aIguVzqKCbJF0NH8xlbgyw0FaEGIeaBpsQoXPftFg5a27B
-9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR4k5FVmkfeAKA2txHkSm7NsljXMXg
-1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATANBgkqhkiG9w0BAQIFAAOBgQBM
-P7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZoEWx8QszznC7EBz8UsA9P
-/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5FvjqBUuUfx3CHMjj
-t/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89FxlA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcEx
-CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UE
-CxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAt
-IEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBU
-cnVzdCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
-gcExCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoG
-A1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5j
-LiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2ln
-biBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq
-0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9
-Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSmFc/IReumXY6c
-PvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQABMA0G
-CSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9Zr
-bWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
-uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4i
-P/68DzFc6PLZ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHK
-MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNV
-BAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5
-IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBD
-BgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3
-MTYyMzU5NTlaMIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24s
-IEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNV
-BAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQg
-dXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFBy
-aW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRR
-ZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO8ESlV8dAWB6j
-Rx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJrKsh
-JlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7P
-oBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
-6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHh
-v2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQ
-BfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N
-y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUf
-xJM8/XmPBNQ+T+r3ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFM
-DSZl4kSAHsef493oCtrspSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5
-SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXV
-OBRgmaNL3gaWcSzy27YfpO8/7g==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQL
-Ey5DbGFzcyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UE
-BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGf
-MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZM
-JaLtVRKXxaeAufqDwSCg+i8VDXyhYGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvE
-erf4Zh+AVPy3wo5ZShRXRtGak75BkQO7FYCTXOvnzAhsPz6zSvz/S2wj1VCC
-JkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBAIob
-K/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxgJ8pFUs4W7z8GZOeUaHxg
-MxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Ncr6Pc5iaAIzy4RHT3
-Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHB
-MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNV
-BAsTM0NsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRo
-b3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4g
-LSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24g
-VHJ1c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTla
-MIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6
-BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNp
-Z24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-p4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkf
-rbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjwDqL7MWzJ5m+Z
-Jwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEAATAN
-BgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/
-7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
-rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6x
-RnInjBJ7xUS0rg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcox
-CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UE
-CxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkg
-VmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMG
-A1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcx
-NjIzNTk1OVowgcoxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwg
-SW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UE
-CxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1
-c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJp
-bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY8
-1nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDOJxOeBUebMXoT
-2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7C9UT
-AJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQ
-HgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
-qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVC
-YQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekh
-ktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf
-0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydE
-p85EXdQbkJgNHkKUsQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377B
-MnMiIYtYgXsVkXq642RIsH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab
-5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//jGHyJizNdrDPX
-p/naOlXJWBD5qu9ats9LS98q
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQL
-Ey5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UE
-BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGf
-MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69q
-RUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94f56TuZoAqiN91qyFomNFx3In
-zPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Olhec9vn2a
-/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtM
-EivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPw
-TtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzk
-uxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcEx
-CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UE
-CxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAt
-IEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBU
-cnVzdCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
-gcExCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoG
-A1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5j
-LiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2ln
-biBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDM
-XtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXX
-wc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg013gfqLptQ5GV
-j0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQABMA0G
-CSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01U
-bSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
-F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo
-1KpYoJ2daZH9
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHK
-MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNV
-BAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5
-IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBD
-BgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3
-MTYyMzU5NTlaMIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24s
-IEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNV
-BAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQg
-dXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFBy
-aW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2
-R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2tKmFZpGcmTNDo
-vFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUccLwg
-TS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+V
-k7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
-Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJ
-OxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my
-/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
-j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoA
-Wii/gt/4uhMdUIaC/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8S
-GhJouPtmmRQURVyu565pF4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbb
-o27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh
-/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcEx
-CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UE
-CxMzQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv
-cml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAt
-IEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBU
-cnVzdCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVow
-gcExCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoG
-A1UECxMzQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1
-dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5j
-LiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2ln
-biBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6
-8OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDMHO0oW369atyzkSTK
-QWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtKqsGgtG7rL+VX
-xbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwIDAQABMA0G
-CSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwjcSGI
-L4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y
-cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckzt
-ImRPT8qAkbYp
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHK
-MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNV
-BAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5
-IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBD
-BgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlm
-aWNhdGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3
-MTYyMzU5NTlaMIHKMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24s
-IEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNV
-BAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQg
-dXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFBy
-aW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYl
-S+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ+mGuqPKljYXC
-KtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM8BDc
-VHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdL
-MEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
-ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDD
-Zq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1Wr
-IhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
-mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csK
-vE+MW8VLADsfKoKmfjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluP
-QSjA1egtTaRezarZ7c7c2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kP
-mF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr
-9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzEL
-MAkGA1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMu
-MS4wLAYDVQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5MB4XDTk0MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UE
-BhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD
-VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGb
-MA0GCSqGSIb3DQEBAQUAA4GJADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6O
-LDfO6zV4ZFQD5YRAUcm/jwjiioII0haGN1XpsSECrXZogZoFokvJSyVmIlZs
-iAeP94FZbYQHZXATcXY+m3dM41CJVphIuR2nKRoTLkoRWZweFdVJVCxzOmmC
-sZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZIhvcNAQECBQADfgBl3X7hsuyw
-4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3YQO2WxZpO8ZECAyIUwxr
-l0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc1/p3yjkWWW8O6tO1
-g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDzTCCAzagAwIBAgIQU2GyYK7bcY6nlLMTM/QHCTANBgkqhkiG9w0BAQUF
-ADCBwTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTww
-OgYDVQQLEzNDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmswHhcNMDAwOTI2MDAwMDAwWhcNMTAwOTI1MjM1
-OTU5WjCBpTEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBh
-dCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTAwMSwwKgYDVQQD
-EyNWZXJpU2lnbiBUaW1lIFN0YW1waW5nIEF1dGhvcml0eSBDQTCBnzANBgkq
-hkiG9w0BAQEFAAOBjQAwgYkCgYEA0hmdZ8IAIVlizrQJIkRpivglWtvtDbc2
-fk7gu5Q+kCWHwmFHKdm9VLhjzCx9abQzNvQ3B5rB3UBU/OB4naCTuQk9I1F/
-RMIUdNsKvsvJMDRAmD7Q1yUQgZS9B0+c1lQn3y6ov8uQjI11S7zi6ESHzeZB
-CiVu6PQkAsVSD27smHUCAwEAAaOB3zCB3DAPBgNVHRMECDAGAQH/AgEAMEUG
-A1UdIAQ+MDwwOgYMYIZIAYb4RQEHFwEDMCowKAYIKwYBBQUHAgEWHGh0dHBz
-Oi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwMQYDVR0fBCowKDAmoCSgIoYgaHR0
-cDovL2NybC52ZXJpc2lnbi5jb20vcGNhMy5jcmwwCwYDVR0PBAQDAgEGMEIG
-CCsGAQUFBwEBBDYwNDAyBggrBgEFBQcwAaYmFiRodHRwOi8vb2NzcC52ZXJp
-c2lnbi5jb20vb2NzcC9zdGF0dXMwDQYJKoZIhvcNAQEFBQADgYEAgnBold+2
-DcIBcBlK0lRWHqzyRUyHuPU163hLBanInTsZIS5wNEqi9YngFXVF5yg3ADQn
-Keg3S/LvRJdrF1Eaw1adPBqK9kpGRjeM+sv1ZFo4aC4cw+9wzrhGBha/937n
-tag+RaypJXUie28/sJyU58dzq6wf7iWbwBbtt8pb8BQ=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUF
-ADBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlz
-YSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMT
-E1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0
-MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UE
-CxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAa
-BgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh
-28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8bRaVK7362
-rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81
-q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtF
-Wsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0
-lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaLdXe6YJ2E5/4t
-AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G
-A1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOC
-AQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
-zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKht
-cbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGI
-xHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
-YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/
-hC3euiInlhBx6yLt398znM/jra6O1I7mT1GvFpLgXPYHDw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDgDCCAmigAwIBAgICAx4wDQYJKoZIhvcNAQEFBQAwYTELMAkGA1UEBhMC
-VVMxDTALBgNVBAoTBFZJU0ExLzAtBgNVBAsTJlZpc2EgSW50ZXJuYXRpb25h
-bCBTZXJ2aWNlIEFzc29jaWF0aW9uMRIwEAYDVQQDEwlHUCBSb290IDIwHhcN
-MDAwODE2MjI1MTAwWhcNMjAwODE1MjM1OTAwWjBhMQswCQYDVQQGEwJVUzEN
-MAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNl
-cnZpY2UgQXNzb2NpYXRpb24xEjAQBgNVBAMTCUdQIFJvb3QgMjCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBAKkBcLWqxEDwq2omYXkZAPy/mzdZ
-DK9vZBv42pWUJGkzEXDK41Z0ohdXZFwgBuHW73G3O/erwWnQSaSxBNf0V2KJ
-XLB1LRckaeNCYOTudNargFbYiCjh+20i/SN8RnNPflRzHqgsVVh1t0zzWkWl
-Ahr62p3DRcMiXvOL8WAp0sdftAw6UYPvMPjU58fy+pmjIlC++QU3o63tmsPm
-7IgbthknGziLgE3sucfFicv8GjLtI/C1AVj59o/ghalMCXI5Etuz9c9OYmTa
-xhkVOmMd6RdVoUwiPDQyRvhlV7or7zaMavrZ2UT0qt2E1w0cslSsMoW0ZA3e
-QbuxNMYBhjJk1Z8CAwEAAaNCMEAwHQYDVR0OBBYEFJ59SzS/ca3CBfYDdYDO
-qU8axCRMMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqG
-SIb3DQEBBQUAA4IBAQAhpXYUVfmtJ3CPPPTVbMjMCqujmAuKBiPFyWHbmQdp
-NSYx/scuhMKZYdQN6X0uEyt8joW2hcdLzzW2LEc9zikv2G+fiRxkk78IvXbQ
-kIqUs38oW26sTTMs7WXcFsziza6kPWKSBpUmv9+55CCmc2rBvveURNZNbyoL
-axhNdBA2aGpawWqn3TYpjLgwi08hPwAuVDAHOrqK5MOeyti12HvOdUVmB/Rt
-Ldh6yumJivIj2C/LbgA2T/vwLwHMD8AiZfSr4k5hLQOCfZEWtTDVFN5ex5D8
-ofyrEK9ca3CnB+8phuiyJccg/ybdd+95RBTEvd07xQObdyPsoOy7Wjm1zK0G
+MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx
+HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh
+IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyOTA2MDAwMFoXDTM3MTEyMDE1
+MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg
+SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M
+IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U
+0pPlLYnKhHw/EEMbjIt8hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItI
+TuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkGIBKOQuHfD5YQUqjPnF+VFNivO3ULMSAf
+RC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93f7DKeHEMXRZxcKLXwjqF
+zQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQIfHNlIAqh
+BC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEA
+AaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jY
+PXy+XxIwHwYDVR0jBBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/
+BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn
+9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u0FIy2VkyvNp5ctZ7CegCgTXT
+Ct8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77BfWgDrvq2g+EQF
+Z7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX
+n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoW
+H1iCC+GWaQVLjuyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx
+HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh
+IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0
+aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyOTA2MDAwMFoXDTM3MDkyODIz
+NDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg
+SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M
+IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIw
+DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ
+7ouZzU9AhqS2TcnZsdw8TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilb
+m2BPJoPRYxJWSXakFsKlnUWsi4SVqBax7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOY
+xFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17nOirYlxcwfACtCJ0zr7iZ
+YYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2wTPDaRrbq
+JS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fx
+I2rSAG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETz
+kxmlJ85per5n0/xQpCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFh
+EVsVS6kkUfykXPcXnbDS+gfpj1bkGoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/S
+Btc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuWCpTehTacyH+BCQJJKg71ZDIM
+gtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1ExMVCgyhwn2RAu
+rda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
+FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO
+1b+pxCAoMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyugu
+h4X7ZVnnrREUpVe8WJ8kEle7+z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdP
+yXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI5Rq8NEQh3q0l/HYWdyGQgJhXnU7q
+7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcCtQVBynlQboIOcXKT
+RuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ68W/
+ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyB
+M5kYJRF3p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQ
+my8YJPamTQr5O8t1wswvziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xO
+AU++CrYD062KRffaJ00psUjf5BHklka9bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT
+9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4oGKQWDzH9OmwjkyB24f0H
+hdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2uBOLZ8/5
+fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
+RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
+VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
+DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
+ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
+VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
+mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
+IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
+mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
+XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
+dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
+jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
+BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
+DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
+9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
+jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
+Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
+ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
+R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFajCCBFKgAwIBAgIEPLU9RjANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwli
+ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMq
+YmVUUlVTVGVkIFJvb3QgQ0EtQmFsdGltb3JlIEltcGxlbWVudGF0aW9uMB4XDTAy
+MDQxMTA3Mzg1MVoXDTIyMDQxMTA3Mzg1MVowZjESMBAGA1UEChMJYmVUUlVTVGVk
+MRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNVBAMTKmJlVFJVU1Rl
+ZCBSb290IENBLUJhbHRpbW9yZSBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBALx+xDmcjOPWHIb/ymKt4H8wRXqOGrO4x/nRNv8i
+805qX4QQ+2aBw5R5MdKR4XeOGCrDFN5R9U+jK7wYFuK13XneIviCfsuBH/0nLI/6
+l2Qijvj/YaOcGx6Sj8CoCd8JEey3fTGaGuqDIQY8n7pc/5TqarjDa1U0Tz0yH92B
+FODEPM2dMPgwqZfT7syj0B9fHBOB1BirlNFjw55/NZKeX0Tq7PQiXLfoPX2k+Ymp
+kbIq2eszh+6l/ePazIjmiSZuxyuC0F6dWdsU7JGDBcNeDsYq0ATdcT0gTlgn/FP7
+eHgZFLL8kFKJOGJgB7Sg7KxrUNb9uShr71ItOrL/8QFArDcCAwEAAaOCAh4wggIa
+MA8GA1UdEwEB/wQFMAMBAf8wggG1BgNVHSAEggGsMIIBqDCCAaQGDysGAQQBsT4A
+AAEJKIORMTCCAY8wggFIBggrBgEFBQcCAjCCAToaggE2UmVsaWFuY2Ugb24gb3Ig
+dXNlIG9mIHRoaXMgQ2VydGlmaWNhdGUgY3JlYXRlcyBhbiBhY2tub3dsZWRnbWVu
+dCBhbmQgYWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJk
+IHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwgdGhlIENlcnRpZmljYXRpb24g
+UHJhY3RpY2UgU3RhdGVtZW50IGFuZCB0aGUgUmVseWluZyBQYXJ0eSBBZ3JlZW1l
+bnQsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdCB0aGUgYmVUUlVTVGVkIHdlYiBzaXRl
+LCBodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20vcHJvZHVjdHNfc2VydmljZXMvaW5k
+ZXguaHRtbDBBBggrBgEFBQcCARY1aHR0cDovL3d3dy5iZXRydXN0ZWQuY29tL3By
+b2R1Y3RzX3NlcnZpY2VzL2luZGV4Lmh0bWwwHQYDVR0OBBYEFEU9w6nR3D8kVpgc
+cxiIav+DR+22MB8GA1UdIwQYMBaAFEU9w6nR3D8kVpgccxiIav+DR+22MA4GA1Ud
+DwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEASZK8o+6svfoNyYt5hhwjdrCA
+WXf82n+0S9/DZEtqTg6t8n1ZdwWtColzsPq8y9yNAIiPpqCy6qxSJ7+hSHyXEHu6
+7RMdmgduyzFiEuhjA6p9beP4G3YheBufS0OM00mG9htc9i5gFdPp43t1P9ACg9AY
+gkHNZTfqjjJ+vWuZXTARyNtIVBw74acT02pIk/c9jH8F6M7ziCpjBLjqflh8AXtb
+4cV97yHgjQ5dUX2xZ/2jvTg2xvI4hocalmhgRvsoFEdV4aeADGvi6t9NfJBIoDa9
+CReJf8Py05yc493EG931t3GzUwWJBtDLSoDByFOQtTwxiBdQn8nEDovYqAJjDQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIGUTCCBTmgAwIBAgIEPLVPQDANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwli
+ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMq
+YmVUUlVTVGVkIFJvb3QgQ0EgLSBFbnRydXN0IEltcGxlbWVudGF0aW9uMB4XDTAy
+MDQxMTA4MjQyN1oXDTIyMDQxMTA4NTQyN1owZjESMBAGA1UEChMJYmVUUlVTVGVk
+MRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNVBAMTKmJlVFJVU1Rl
+ZCBSb290IENBIC0gRW50cnVzdCBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBALr0RAOqEmq1Q+xVkrYwfTVXDNvzDSduTPdQqJtO
+K2/b9a0cS12zqcH+e0TrW6MFDR/FNCswACnxeECypP869AGIF37m1CbTukzqMvtD
+d5eHI8XbQ6P1KqNRXuE70mVpflUVm3rnafdE4Fe1FehmYA8NA/uCjqPoEXtsvsdj
+DheT389Lrm5zdeDzqrmkwAkbhepxKYhBMvnwKg5sCfJ0a2ZsUhMfGLzUPvfYbiCe
+yv78IZTuEyhL11xeDGbu6bsPwTSxfwh28z0mcMmLJR1iJAzqHHVOwBLkuhMdMCkt
+VjMFu5dZfsZJT4nXLySotohAtWSSU1Yk5KKghbNekLQSM80CAwEAAaOCAwUwggMB
+MIIBtwYDVR0gBIIBrjCCAaowggGmBg8rBgEEAbE+AAACCSiDkTEwggGRMIIBSQYI
+KwYBBQUHAgIwggE7GoIBN1JlbGlhbmNlIG9uIG9yIHVzZSBvZiB0aGlzIENlcnRp
+ZmljYXRlIGNyZWF0ZXMgYW4gYWNrbm93bGVkZ21lbnQgYW5kIGFjY2VwdGFuY2Ug
+b2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0
+aW9ucyBvZiB1c2UsIHRoZSBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
+dCBhbmQgdGhlIFJlbHlpbmcgUGFydHkgQWdyZWVtZW50LCB3aGljaCBjYW4gYmUg
+Zm91bmQgYXQgdGhlIGJlVFJVU1RlZCB3ZWIgc2l0ZSwgaHR0cHM6Ly93d3cuYmV0
+cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMEIGCCsGAQUF
+BwIBFjZodHRwczovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2Vz
+L2luZGV4Lmh0bWwwEQYJYIZIAYb4QgEBBAQDAgAHMIGJBgNVHR8EgYEwfzB9oHug
+eaR3MHUxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UECxMSYmVUUlVTVGVkIFJv
+b3QgQ0FzMTMwMQYDVQQDEypiZVRSVVNUZWQgUm9vdCBDQSAtIEVudHJ1c3QgSW1w
+bGVtZW50YXRpb24xDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMjA0MTEw
+ODI0MjdagQ8yMDIyMDQxMTA4NTQyN1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaA
+FH1w5a44iwY/qhwaj/nPJDCqhIQWMB0GA1UdDgQWBBR9cOWuOIsGP6ocGo/5zyQw
+qoSEFjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIE
+kDANBgkqhkiG9w0BAQUFAAOCAQEAKrgXzh8QlOu4mre5X+za95IkrNySO8cgjfKZ
+5V04ocI07cUTWVwFtStPYZuR+0H8/NU8TZh2BvWBfevdkObRVlTa4y0MnxEylCIB
+evZsLHRnBMylj44ss0O1lKLQfelifwa+JwGDnjr9iu6YQ0pr17WXOzq/T220Y/oz
+ADQuLW2WyXvKmWO6vvT2MKAtmJbpVkQFqUSjYRDrgqFnXbxdJ3Wqiig2KjiS2d2k
+XgClzMx8KSreKJCrt+G2/30lC0DYqjSjLd4H61/OCt3Kfjp9JsFiaDrmLzfzgYYh
+xKlkqu9FNtEaZnz46TfW1mG+oq1I59/mdP7TbX3SJdysYlep9w==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFaDCCBFCgAwIBAgIQO1nHe81bV569N1KsdrSqGjANBgkqhkiG9w0BAQUFADBi
+MRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENB
+czEvMC0GA1UEAxMmYmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRp
+b24wHhcNMDIwNDExMTExODEzWhcNMjIwNDEyMTEwNzI1WjBiMRIwEAYDVQQKEwli
+ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEvMC0GA1UEAxMm
+YmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkujQwCY5X0LkGLG9uJIAiv11DpvpPrILn
+HGhwhRujbrWqeNluB0s/6d/16uhUoWGKDi9pdRi3DOUUjXFumLhV/AyV0Jtu4S2I
+1DpAa5LxmZZk3tv/ePTulh1HiXzUvrmIdyM6CeYEnm2qXtLIvZpOGd+J6lsOfsPk
+tPDgaTuID0GQ+NRxQyTBjyZLO1bp/4xsN+lFrYWMU8NghpBKlsmzVLC7F/AcRdnU
+GxlkVgoZ98zh/4avflherHqQH8koOUV7orbHnB/ahdQhhlkwk75TMzf270HPM8er
+cmsl9fNTGwxMLvF1S++gh/f+ihXQbNXL+WhTuXAVE8L1LvtDNXUtAgMBAAGjggIY
+MIICFDAMBgNVHRMEBTADAQH/MIIBtQYDVR0gBIIBrDCCAagwggGkBg8rBgEEAbE+
+AAADCSiDkTEwggGPMEEGCCsGAQUFBwIBFjVodHRwOi8vd3d3LmJldHJ1c3RlZC5j
+b20vcHJvZHVjdHNfc2VydmljZXMvaW5kZXguaHRtbDCCAUgGCCsGAQUFBwICMIIB
+OhqCATZSZWxpYW5jZSBvbiBvciB1c2Ugb2YgdGhpcyBDZXJ0aWZpY2F0ZSBjcmVh
+dGVzIGFuIGFja25vd2xlZGdtZW50IGFuZCBhY2NlcHRhbmNlIG9mIHRoZSB0aGVu
+IGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNl
+LCB0aGUgQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQgYW5kIHRoZSBS
+ZWx5aW5nIFBhcnR5IEFncmVlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IHRo
+ZSBiZVRSVVNUZWQgd2ViIHNpdGUsIGh0dHA6Ly93d3cuYmV0cnVzdGVkLmNvbS9w
+cm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMAsGA1UdDwQEAwIBBjAfBgNVHSME
+GDAWgBSp7BR++dlDzFMrFK3P9/BZiUHNGTAdBgNVHQ4EFgQUqewUfvnZQ8xTKxSt
+z/fwWYlBzRkwDQYJKoZIhvcNAQEFBQADggEBANuXsHXqDMTBmMpWBcCorSZIry0g
+6IHHtt9DwSwddUvUQo3neqh03GZCWYez9Wlt2ames30cMcH1VOJZJEnl7r05pmuK
+mET7m9cqg5c0Lcd9NUwtNLg+DcTsiCevnpL9UGGCqGAHFFPMZRPB9kdEadIxyKbd
+LrML3kqNWz2rDcI1UqJWN8wyiyiFQpyRQHpwKzg21eFzGh/l+n5f3NacOzDq28Bb
+J1zTcwfBwvNMm2+fG8oeqqg4MwlYsq78B+g23FW6L09A/nq9BqaBwZMifIYRCgZ3
+SK41ty8ymmFei74pnykkiFY5LKjSq5YDWtRIn7lAhAuYaPsBQ9Yb4gmxlxw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM
+MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
+QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM
+MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
+QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E
+jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo
+ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI
+ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu
+Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg
+AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7
+HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA
+uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa
+TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg
+xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q
+CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
+O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs
+6GAqm4VKQPNriiTsBhYscw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
+MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
+GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
+YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
+MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
+BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
+GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
+ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
+BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
+3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
+YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
+rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
+ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
+oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
+MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
+QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
+b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
+AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
+GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
+Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
+G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
+l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
+smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
+MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
+GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
+ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
+fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
+BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
+cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
+HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
+CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
+3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
+6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
+HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
+EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
+Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
+Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
+DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
+5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
+Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
+gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
+aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
+izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
+MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
+GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
+aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
+MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
+BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
+VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
+fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
+TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
+fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
+1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
+kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
+A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
+VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
+ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
+dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
+Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
+HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
+pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
+jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
+xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
+dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
+UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
+EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ
+BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
+ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg
+bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ
+j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV
+Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG
+SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
+JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
+RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw
+MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5
+fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i
++DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
+SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN
+QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+
+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
+UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
+EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ
+BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
+ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/
+k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso
+LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o
+TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG
+SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
+JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
+RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3
+MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C
+TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5
+WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
+SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR
+xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL
+B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChML
+RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw
+IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVu
+dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcxNjE2NDBaFw0yMDAy
+MDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
+LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
+YWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
+A1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTdLS25MVL1qFof2LV7PdRV7Ny
+Spj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQlhK8pK5/jgOLZy93GRUk0
+iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKklWb1m9fkn
+5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHd
+BgNVHR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0
+MUAwPgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSBy
+ZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5l
+dCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDbGllbnQgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAy
+MDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
+MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdF
+fP4tzrrTfTAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w
+AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMS
+hAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xKp9U1PL6oXOpLu5OOgGarDyn9TS2/
+GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQGof4T4HHdguEOnKd
+zmVml64mXg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChML
+RW50cnVzdC5uZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGlu
+Y29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAg
+RW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJl
+IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDQxNzIwMDBa
+Fw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0GA1UE
+CxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
+dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVk
+MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
+b24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO
+8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55lxyKbc+bT3QgON1WqJUaB
+bL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439PmrkDQYC2
+dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4
+QgEBBAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoT
+C0VudHJ1c3QubmV0MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw
+IEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3Vy
+ZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEw
+KwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD
+VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1Ud
+DgQWBBTLbMBr47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2
+fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsia
+d0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbvH9X07t9WLebKahlzqlO+krNQAraF
+JnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3a9kC9n8O6mUE8c1U
+yrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
+RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
+IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy
+MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
+LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
+YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
+A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
+K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
+sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
+MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
+XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
+HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
+4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA
+vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G
+CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA
+WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
+oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ
+h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18
+f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN
+B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy
+vUxFnmG6v4SBkgPR0ml8xQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u
+ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh
+Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
+BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
+Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU
+MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D
+bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl
+MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq
+RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G
+CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo
+6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux
+5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm
+AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC
+ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50
+cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m
+by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp
+IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg
+Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg
+KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV
+HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E
+BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE
+FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
+BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7
+pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz
+wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a
+EkP/TOYGJqibGapEPHayXOw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
+MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
+ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
+b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
+bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
+U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
+A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
+I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
+wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
+AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
+oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
+BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
+dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
+MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
+b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
+dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
+MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
+E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
+MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
+hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
+95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
+2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
+UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
+dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
+MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
+dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
+AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
+BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
+cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
+AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
+MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
+aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
+ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
+IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
+MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
+A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
+7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
+1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
+ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
+MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
+LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
+KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
+RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
+WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
+Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
+AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
+eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
+zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
+/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
+dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
+NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
+VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
+AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
+vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
+BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
+AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
+MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
+IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
+NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
+y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
+MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
+A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
+0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
+E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
+MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
+ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
+MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
+dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
+c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
+UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
+58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
+o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
+MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
+aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
+A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
+Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
+8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
+MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
+YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
+EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
+R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
+9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
+fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
+iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
+1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
+bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
+MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
+ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
+uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
+Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
+tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
+PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
+hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
+5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDdTCCAl2gAwIBAgILAgAAAAAA1ni3lAUwDQYJKoZIhvcNAQEEBQAwVzELMAkG
+A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
+b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
+MDBaFw0xNDAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
+YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
+aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
+jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
+xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
+1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
+snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
+U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
+9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIABjAdBgNVHQ4EFgQU
+YHtmGkUNl8qJUC99BM00qP/8/UswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B
+AQQFAAOCAQEArqqf/LfSyx9fOSkoGJ40yWxPbxrwZKJwSk8ThptgKJ7ogUmYfQq7
+5bCdPTbbjwVR/wkxKh/diXeeDy5slQTthsu0AD+EAk2AaioteAuubyuig0SDH81Q
+gkwkr733pbTIWg/050deSY43lv6aiAU62cDbKYfmGZZHpzqmjIs8d/5GY6dT2iHR
+rH5Jokvmw2dZL7OKDrssvamqQnw1wdh/1acxOk5jQzmvCLBhNIzTmKlDNPYPhyk7
+ncJWWJh3w/cbrPad+D6qp1RF8PX51TFl/mtYnHGzHtdS6jIX/EBgHcl5JLL2bP2o
+Zg6C3ZjL2sJETy6ge/L3ayx2EYRGinij4w==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
+VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
+bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
+b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
+UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
+cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
+b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
+iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
+r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
+04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
+GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
+3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
+lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEzMDEGA1UECxMq
+SVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYD
+VQQDEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
+HjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczAeFw0wMTEyMjkwMDUzNTha
+Fw0yNTEyMjcwMDUzNThaMIIBHDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNl
+bG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQg
+cHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMu
+ZXMgQy5JLkYuICBCLTYwOTI5NDUyMTMwMQYDVQQLEypJUFMgQ0EgQ2hhaW5lZCBD
+QXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBDQSBDaGFp
+bmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYP
+aXBzQG1haWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcVpJJ
+spQgvJhPUOtopKdJC7/SMejHT8KGC/po/UNaivNgkjWZOLtNA1IhW/A3mTXhQSCB
+hYEFcYGdtJUZqV92NC5jNzVXjrQfQj8VXOF6wV8TGDIxya2+o8eDZh65nAQTy2nB
+Bt4wBrszo7Uf8I9vzv+W6FS+ZoCua9tBhDaiPQIDAQABo4IEQzCCBD8wHQYDVR0O
+BBYEFKGtMbH5PuEXpsirNPxShwkeYlJBMIIBTgYDVR0jBIIBRTCCAUGAFKGtMbH5
+PuEXpsirNPxShwkeYlJBoYIBJKSCASAwggEcMQswCQYDVQQGEwJFUzESMBAGA1UE
+CBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJ
+bnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0Bt
+YWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxMzAxBgNVBAsTKklQUyBDQSBD
+aGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEzMDEGA1UEAxMqSVBT
+IENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
+hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8E
+BQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMG
+CCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYB
+BAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMw
+EYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBC
+BglghkgBhvhCAQ0ENRYzQ2hhaW5lZCBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkg
+aHR0cDovL3d3dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlw
+cy5lcy9pcHMyMDAyLzA3BglghkgBhvhCAQQEKhYoaHR0cDovL3d3dy5pcHMuZXMv
+aXBzMjAwMi9pcHMyMDAyQ0FDLmNybDA8BglghkgBhvhCAQMELxYtaHR0cDovL3d3
+dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0aW9uQ0FDLmh0bWw/MDkGCWCGSAGG+EIB
+BwQsFipodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3JlbmV3YWxDQUMuaHRtbD8w
+NwYJYIZIAYb4QgEIBCoWKGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5
+Q0FDLmh0bWwwbQYDVR0fBGYwZDAuoCygKoYoaHR0cDovL3d3dy5pcHMuZXMvaXBz
+MjAwMi9pcHMyMDAyQ0FDLmNybDAyoDCgLoYsaHR0cDovL3d3d2JhY2suaXBzLmVz
+L2lwczIwMDIvaXBzMjAwMkNBQy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
+BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAERyMJ1W
+WKJBGyi3leGmGpVfp3hAK+/blkr8THFj2XOVvQLiogbHvpcqk4A0hgP63Ng9HgfN
+HnNDJGD1HWHc3JagvPsd4+cSACczAsDAK1M92GsDgaPb1pOVIO/Tln4mkImcJpvN
+b2ar7QMiRDjMWb2f2/YHogF/JsRj9SVCXmK9
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl
+SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl
+SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3
+DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAwNTkzOFoXDTI1MTIyNzAw
+NTkzOFowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
+VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n
+IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
+IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4FEnpwvdr9G5Q1uCN0VWcu+atsIS7ywS
+zHb5BlmvXSHU0lq4oNTzav3KaY1mSPd05u42veiWkXWmcSjK5yISMmmwPh5r9FBS
+YmL9Yzt9fuzuOOpi9GyocY3h6YvJP8a1zZRCb92CRTzo3wno7wpVqVZHYUxJZHMQ
+KD/Kvwn/xi8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBTrsxl588GlHKzcuh9morKb
+adB4CDCCAUQGA1UdIwSCATswggE3gBTrsxl588GlHKzcuh9morKbadB4CKGCARqk
+ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
+BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT
+ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC
+LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD
+VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr
+BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
+FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC
+AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
+D2lwc0BtYWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UxIENBIENlcnRp
+ZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
+BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQtFito
+dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMD8GCWCG
+SAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25D
+TEFTRTEuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lw
+czIwMDIvcmVuZXdhbENMQVNFMS5odG1sPzA6BglghkgBhvhCAQgELRYraHR0cDov
+L3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTEuaHRtbDBzBgNVHR8EbDBq
+MDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEu
+Y3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
+Q0xBU0UxLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9v
+Y3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAK9Dr/drIyllq2tPMMi7JVBuK
+Yn4VLenZMdMu9Ccj/1urxUq2ckCuU3T0vAW0xtnIyXf7t/k0f3gA+Nak5FI/LEpj
+V4F1Wo7ojPsCwJTGKbqz3Bzosq/SLmJbGqmODszFV0VRFOlOHIilkfSj945RyKm+
+hjM+5i9Ibq9UkE6tsSU=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl
+SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl
+SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3
+DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMDE0NFoXDTI1MTIyNzAx
+MDE0NFowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
+VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n
+IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
+IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqxf+DrDGaBtT8FK+n/ra+osTBLsBjzLZ
+H49NzjaY2uQARIwo2BNEKqRrThckQpzTiKRBgtYj+4vJhuW5qYIF3PHeH+AMmVWY
+8jjsbJ0gA8DvqqPGZARRLXgNo9KoOtYkTOmWehisEyMiG3zoMRGzXwmqMHBxRiVr
+SXGAK5UBsh8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBS4k/8uy9wsjqLnev42USGj
+mFsMNDCCAUQGA1UdIwSCATswggE3gBS4k/8uy9wsjqLnev42USGjmFsMNKGCARqk
+ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
+BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT
+ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC
+LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g
+QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD
+VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr
+BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
+FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC
+AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
+D2lwc0BtYWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UzIENBIENlcnRp
+ZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
+BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQtFito
+dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMD8GCWCG
+SAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25D
+TEFTRTMuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lw
+czIwMDIvcmVuZXdhbENMQVNFMy5odG1sPzA6BglghkgBhvhCAQgELRYraHR0cDov
+L3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTMuaHRtbDBzBgNVHR8EbDBq
+MDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMu
+Y3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
+Q0xBU0UzLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9v
+Y3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAF2VcmZVDAyevJuXr0LMXI/dD
+qsfwfewPxqmurpYPdikc4gYtfibFPPqhwYHOU7BC0ZdXGhd+pFFhxu7pXu8Fuuu9
+D6eSb9ijBmgpjnn1/7/5p6/ksc7C0YBCJwUENPjDfxZ4IwwHJPJGR607VNCv1TGy
+r33I6unUVtkOE7LFRVA=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm
+SVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
+JklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
+hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNTMyWhcNMjUxMjI3
+MDEwNTMyWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
+BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
+bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
+LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw
+gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALsw19zQVL01Tp/FTILq0VA8R5j8
+m2mdd81u4D/u6zJfX5/S0HnllXNEITLgCtud186Nq1KLK3jgm1t99P1tCeWu4Wwd
+ByOgF9H5fahGRpEiqLJpxq339fWUoTCUvQDMRH/uxJ7JweaPCjbB/SQ9AaD1e+J8
+eGZDi09Z8pvZ+kmzAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUZyaW56G/2LUDnf47
+3P7yiuYV3TAwggFGBgNVHSMEggE9MIIBOYAUZyaW56G/2LUDnf473P7yiuYV3TCh
+ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
+BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
+bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
+LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC
+AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF
+BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB
+BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg
+hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
+EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMSBD
+QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG
+SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgBhvhC
+AQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMS5j
+cmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2
+b2NhdGlvbkNMQVNFQTEuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cu
+aXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTEuaHRtbD8wOwYJYIZIAYb4QgEI
+BC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VBMS5odG1s
+MHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvaXBz
+MjAwMkNMQVNFQTEuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
+MjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
+BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAH66iqyA
+AIQVCtWYUQxkxZwCWINmyq0eB81+atqAB98DNEock8RLWCA1NnHtogo1EqWmZaeF
+aQoO42Hu6r4okzPV7Oi+xNtff6j5YzHIa5biKcJboOeXNp13XjFr/tOn2yrb25aL
+H2betgPAK7N41lUH5Y85UN4HI3LmvSAUS7SG
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm
+SVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
+JklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
+hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNzUwWhcNMjUxMjI3
+MDEwNzUwWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
+BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
+bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
+LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw
+gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO6AAPYaZC6tasiDsYun7o/ZttvN
+G7uGBiJ2MwwSbUhWYdLcgiViL5/SaTBlA0IjWLxH3GvWdV0XPOH/8lhneaDBgbHU
+VqLyjRGZ/fZ98cfEXgIqmuJKtROKAP2Md4bm15T1IHUuDky/dMQ/gT6DtKM4Ninn
+6Cr1jIhBqoCm42zvAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUHp9XUEe2YZM50yz8
+2l09BXW3mQIwggFGBgNVHSMEggE9MIIBOYAUHp9XUEe2YZM50yz82l09BXW3mQKh
+ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
+BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
+bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
+LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC
+AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF
+BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB
+BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg
+hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
+EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMyBD
+QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG
+SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgBhvhC
+AQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMy5j
+cmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2
+b2NhdGlvbkNMQVNFQTMuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cu
+aXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTMuaHRtbD8wOwYJYIZIAYb4QgEI
+BC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VBMy5odG1s
+MHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvaXBz
+MjAwMkNMQVNFQTMuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
+MjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
+BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAEo9IEca
+2on0eisxeewBwMwB9dbB/MjD81ACUZBYKp/nNQlbMAqBACVHr9QPDp5gJqiVp4MI
+3y2s6Q73nMify5NF8bpqxmdRSmlPa/59Cy9SKcJQrSRE7SOzSMtEQMEDlQwKeAYS
+AfWRMS1Jjbs/RU4s4OjNtckUFQzjB4ObJnXv
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIIODCCB6GgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYTAkVT
+MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
+ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
+ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjE0MDIGA1UECxMr
+SVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE0MDIG
+A1UEAxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMTAx
+OFoXDTI1MTIyNzAxMTAxOFowggEeMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFy
+Y2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5l
+dCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlw
+cy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxNDAyBgNVBAsTK0lQUyBDQSBUaW1lc3Rh
+bXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxNDAyBgNVBAMTK0lQUyBDQSBU
+aW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0B
+CQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
+vLjuVqWajOY2ycJioGaBjRrVetJznw6EZLqVtJCneK/K/lRhW86yIFcBrkSSQxA4
+Efdo/BdApWgnMjvEp+ZCccWZ73b/K5Uk9UmSGGjKALWkWi9uy9YbLA1UZ2t6KaFY
+q6JaANZbuxjC3/YeE1Z2m6Vo4pjOxgOKNNtMg0GmqaMCAwEAAaOCBIAwggR8MB0G
+A1UdDgQWBBSL0BBQCYHynQnVDmB4AyKiP8jKZjCCAVAGA1UdIwSCAUcwggFDgBSL
+0BBQCYHynQnVDmB4AyKiP8jKZqGCASakggEiMIIBHjELMAkGA1UEBhMCRVMxEjAQ
+BgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJ
+UFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJp
+cHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTQwMgYDVQQLEytJUFMg
+Q0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTQwMgYDVQQD
+EytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4w
+HAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAM
+BgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYB
+BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIB
+FgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYD
+VR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlw
+cy5lczBHBglghkgBhvhCAQ0EOhY4VGltZXN0YW1waW5nIENBIENlcnRpZmljYXRl
+IGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgECBBwWGmh0
+dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMEAGCWCGSAGG+EIBBAQzFjFodHRwOi8v
+d3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMEUGCWCG
+SAGG+EIBAwQ4FjZodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25U
+aW1lc3RhbXBpbmcuaHRtbD8wQgYJYIZIAYb4QgEHBDUWM2h0dHA6Ly93d3cuaXBz
+LmVzL2lwczIwMDIvcmVuZXdhbFRpbWVzdGFtcGluZy5odG1sPzBABglghkgBhvhC
+AQgEMxYxaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lUaW1lc3RhbXBp
+bmcuaHRtbDB/BgNVHR8EeDB2MDegNaAzhjFodHRwOi8vd3d3Lmlwcy5lcy9pcHMy
+MDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMDugOaA3hjVodHRwOi8vd3d3YmFj
+ay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyVGltZXN0YW1waW5nLmNybDAvBggrBgEF
+BQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZI
+hvcNAQEFBQADgYEAZbrBzAAalZHK6Ww6vzoeFAh8+4Pua2JR0zORtWB5fgTYXXk3
+6MNbsMRnLWhasl8OCvrNPzpFoeo2zyYepxEoxZSPhExTCMWTs/zif/WN87GphV+I
+3pGW7hdbrqXqcGV4LCFkAZXOzkw+UPS2Wctjjba9GNSHSl/c7+lW8AoM6HU=
 -----END CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
 MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
@@ -2251,75 +1156,787 @@ mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
 xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK
 SnQ2+Q==
 -----END CERTIFICATE-----
-
------BEGIN CERTIFICATE-----
-MIIETzCCAzegAwIBAgIEO63vKTANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQTDEfMB0GA1UE
-ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg
-U2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBSb290Q0EwHhcNMDEwOTIzMTQxODE3WhcNMTEw
-OTIzMTMxODE3WjB1MQswCQYDVQQGEwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5v
-LjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWdu
-ZXQgLSBDQSBLbGFzYSAxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4SRW9Q58g5DY1Hw7h
-gCRKBEdPdGn0MFHsfw7rlu/oQm7IChI/uWd9q5wwo77YojtTDjRnpgZsjqBeynX8T90vFILqsY2K
-5CF1OESalwvVr3sZiQX79lisuFKat92u6hBFikFIVxfHHB67Af+g7u0dEHdDW7lwy81MwFYxBTRy
-9wIDAQABo4IBbTCCAWkwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwggEEBgNVHSAE
-gfwwgfkwgfYGDSsGAQQBvj8CAQoBAQAwgeQwgZoGCCsGAQUFBwICMIGNGoGKQ2VydHlmaWthdCB3
-eXN0YXdpb255IHpnb2RuaWUgeiBkb2t1bWVudGVtOiAiUG9saXR5a2EgQ2VydHlmaWthY2ppIGRs
-YSBSb290Q0EiLiBDZXJ0eWZpa2F0IHd5c3Rhd2lvbnkgcHJ6ZXogUm9vdENBIHcgaGllcmFyY2hp
-aSBDQyBTaWduZXQuMEUGCCsGAQUFBwIBFjlodHRwOi8vd3d3LnNpZ25ldC5wbC9yZXBvenl0b3Jp
-dW0vZG9rdW1lbnR5L3BjX3Jvb3RjYS50eHQwHwYDVR0jBBgwFoAUwJvFIw0C4aZOSGsfAOnjmhQb
-sa8wHQYDVR0OBBYEFMODHtVZd1T7TftXR/nEI1zR54njMA0GCSqGSIb3DQEBBQUAA4IBAQBRIHQB
-FIGh8Jpxt87AgSLwIEEk4+oGy769u3NtoaR0R3WNMdmt7fXTi0tyTQ9V4AIszxVjhnUPaKnF1KYy
-f8Tl+YTzk9ZfFkZ3kCdSaILZAOIrmqWNLPmjUQ5/JiMGho0e1YmWUcMci84+pIisTsytFzVP32/W
-+sz2H4FQAvOIMmxB7EJX9AdbnXn9EXZ+4nCqi0ft5z96ZqOJJiCB3vSaoYg+wdkcvb6souMJzuc2
-uptXtR1Xf3ihlHaGW+hmnpcwFA6AoNrom6Vgzk6U1ienx0Cw28BhRSKqzKkyXkuK8gRflZUx84uf
-tXncwKJrMiE3lvgOOBITRzcahirLer4c
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE9zCCA9+gAwIBAgIEPL/xoTANBgkqhkiG9w0BAQUFADB2MQswCQYDVQQGEwJQTDEfMB0GA1UE
-ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg
-U2lnbmV0MSAwHgYDVQQDExdDQyBTaWduZXQgLSBQQ0EgS2xhc2EgMjAeFw0wMjA0MTkxMDI5NTNa
-Fw0xNzA0MTgxMjUzMDdaMHUxCzAJBgNVBAYTAlBMMR8wHQYDVQQKExZUUCBJbnRlcm5ldCBTcC4g
-eiBvLm8uMSQwIgYDVQQLExtDZW50cnVtIENlcnR5ZmlrYWNqaSBTaWduZXQxHzAdBgNVBAMTFkND
-IFNpZ25ldCAtIENBIEtsYXNhIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqgLJu
-QqY4yavbSgHg8CyfKTx4BokNSDOVz4eD9vptUr11Kqd06ED1hlH7Sg0goBFAfntNU/QTKwSBaNui
-me7C4sSEdgsKrPoAhGb4Mq8y7Ty7RqZz7mkzNMqzL2L2U4yQ2QjvpH8MH0IBqOWEcpSkpwnrCDIm
-RoTfd+YlZWKi2JceQixUUYIQ45Ox8+x8hHbvvZdgqtcvo8PW27qoHkp/7hMuJ44kDAGrmxffBXl/
-OBRZp0uO1CSLcMcVJzyr2phKhy406MYdWrtNPEluGs0GFDzd0nrIctiWAO4cmct4S72S9Q6e//0G
-O9f3/Ca5Kb2I1xYLj/xE+HgjHX9aD2MhAgMBAAGjggGMMIIBiDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjCB4wYDVR0gBIHbMIHYMIHVBg0rBgEEAb4/AhQKAQEAMIHDMHUGCCsGAQUF
-BwICMGkaZ0NlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmllIHogZG9rdW1lbnRlbTogIlBvbGl0
-eWthIENlcnR5ZmlrYWNqaSBQQ0EyIC0gQ2VydHlmaWthdHkgVXJ6ZWRvdyBLbGFzeSAyIi4wSgYI
-KwYBBQUHAgEWPmh0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9kb2t1bWVudHkva2xh
-c2EyL3BjX3BjYTIudHh0MD8GA1UdHwQ4MDYwNKAyoDCGLmh0dHA6Ly93d3cuc2lnbmV0LnBsL3Jl
-cG96eXRvcml1bS9jcmwvcGNhMi5jcmwwHwYDVR0jBBgwFoAUwGxGyl2CfpYHRonE82AVXO08kMIw
-HQYDVR0OBBYEFLtFBlILy4HNKVSzvHxBTM0HDowlMA0GCSqGSIb3DQEBBQUAA4IBAQBWTsCbqXrX
-hBBev5v5cIuc6gJM8ww7oR0uMQRZoFSqvQUPWBYM2/TLI/f8UM9hSShUVj3zEsSj/vFHagUVmzuV
-Xo5u0WK8iaqATSyEVBhADHrPG6wYcLKJlagge/ILA0m+SieyP2sjYD9MUB9KZIEyBKv0429UuDTw
-6P7pslxMWJBSNyQxaLIs0SRKsqZZWkc7ZYAj2apSkBMX2Is1oHA+PwkF6jQMwCao/+CndXPUzfCF
-6caa9WwW31W26MlXCvSmJgfiTPwGvm4PkPmOnmWZ3CczzhHl4q7ztHFzshJH3sZWDnrWwBFjzz5e
-Pr3WHV1wA7EY6oT4zBx+2gT9XBTB
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEUzCCAzugAwIBAgIEPq+qjzANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJQTDE3MDUGA1UE
-ChMuQ1ppQyBDZW50cmFzdCBTQSB3IGltaWVuaXUgTWluaXN0cmEgR29zcG9kYXJraTEZMBcGA1UE
-AxMQQ1ppQyBDZW50cmFzdCBTQTAeFw0wMzA0MzAxMDUwNTVaFw0wODA0MjgxMDUwNTVaMGgxCzAJ
-BgNVBAYTAlBMMR8wHQYDVQQKExZUUCBJbnRlcm5ldCBTcC4geiBvLm8uMR8wHQYDVQQDExZDQyBT
-aWduZXQgLSBDQSBLbGFzYSAzMRcwFQYDVQQFEw5OdW1lciB3cGlzdTogNDCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBALVdeOM62cPH2NERFxbS5FIp/HSv3fgesdVsTUFxZbGtE+/E0RMl
-KZQJHH9emx7vRYubsi4EOLCjYsCOTFvgGRIpZzx7R7T5c0Di5XFkRU4gjBl7aHJoKb5SLzGlWdoX
-GsekVtl6keEACrizV2EafqjI8cnBWY7OxQ1ooLQp5AeFjXg+5PT0lO6TUZAubqjFbhVbxSWjqvdj
-93RGfyYE76MnNn4c2xWySD07n7uno06TC0IJe6+3WSX1h+76VsIFouWBXOoM7cxxiLjoqdBVu24+
-P8e81SukE7qEvOwDPmk9ZJFtt1nBNg8a1kaixcljrA/43XwOPz6qnJ+cIj/xywECAwEAAaOCAQow
-ggEGMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMDMGA1UdIAEB/wQpMCcwJQYEVR0g
-ADAdMBsGCCsGAQUFBwIBFg93d3cuY2VudHJhc3QucGwwgY4GA1UdIwSBhjCBg4AU2a7r85Cp1iJN
-W0Ca1LR6VG3996ShZaRjMGExCzAJBgNVBAYTAlBMMTcwNQYDVQQKEy5DWmlDIENlbnRyYXN0IFNB
-IHcgaW1pZW5pdSBNaW5pc3RyYSBHb3Nwb2RhcmtpMRkwFwYDVQQDExBDWmlDIENlbnRyYXN0IFNB
-ggQ9/0sQMB0GA1UdDgQWBBR7Y8wZkHq0zrY7nn1tFSdQ0PlJuTANBgkqhkiG9w0BAQUFAAOCAQEA
-ldt/svO5c1MU08FKgrOXCGEbEPbQxhpM0xcd6Iv3dCo6qugEgjEs9Qm5CwUNKMnFsvR27cJWUvZb
-MVcvwlwCwclOdwF6u/QRS8bC2HYErhYo9bp9yuxxzuow2A94c5fPqfVrjXy+vDouchAm6+A5Wjzv
-J8wxVFDCs+9iGACmyUWr/JGXCYiQIbQkwlkRKHHlan9ymKf1NvIej/3EpeT8fKr6ywxGuhAfqofW
-pg3WJY/RCB4lTzD8vZGNwfMFGkWhJkypad3i9w3lGmDVpsHaWtCgGfd0H7tUtWPkP+t7EjIRCD9J
-HYnTR+wbbewc5vOI+UobR15ynGfFIaSIiMTVtQ==
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
+IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
+BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
+aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
+9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
+NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
+azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
+Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
+cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
+cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
+2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
+JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
+Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
+n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
+PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUFADA6
+MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
+dHkgMTAyNCBWMzAeFw0wMTAyMjIyMTAxNDlaFw0yNjAyMjIyMDAxNDlaMDoxGTAX
+BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAx
+MDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV3f5mCc8kPD6ugU5O
+isRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dYrIMKo1W1exeQFYRMiu4mmdxY
+78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYtbzZUaMjShFbuklNhCbM/OZuoyZu9
+zp9+1BlqFikYvtc6adwlWzMaUQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4G
+A1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAd
+BgNVHQ4EFgQUxMAcpAeU/c1NAdRU2qUMX96uBVowDQYJKoZIhvcNAQEFBQADgYEA
+Py1q4yZDlX2Jl2X7deRyHUZXxGFraZ8SmyzVWujAovBDleMf6XbN3Ou8k6BlCsdN
+T1+nr6JGFLkM88y9am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNumU4/iXgD
+mMrzVcydro7BqkWY+o8aoI2II/EVQQ2lRj6RP4vr93E=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6
+MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
+dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX
+BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy
+MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp
+eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg
+/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl
+wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh
+AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2
+PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu
+AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
+BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR
+MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc
+HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/
+Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+
+f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO
+rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch
+6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3
+7CAFYd4=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY
+MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t
+dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5
+WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD
+VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8
+9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ
+DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9
+Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N
+QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ
+xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G
+A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T
+AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG
+kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr
+Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5
+Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU
+JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot
+RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
+MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx
+MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV
+BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG
+29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk
+oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk
+3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL
+qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN
+nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw
+DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG
+MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX
+ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H
+DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO
+TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv
+kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w
+zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
+MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
+MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV
+BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o
+Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt
+5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s
+3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej
+vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu
+8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw
+DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG
+MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil
+zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/
+3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD
+FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
+Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2
+ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO
+TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh
+dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy
+MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk
+ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn
+ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71
+9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO
+hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U
+tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o
+BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh
+SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww
+OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv
+cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA
+7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k
+/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm
+eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6
+u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy
+7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
+iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE
+SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg
+Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV
+BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl
+cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA
+vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu
+Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a
+0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1
+4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN
+eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD
+R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG
+A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu
+dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME
+Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3
+WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw
+HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ
+KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO
+Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX
+wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
+2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89
+9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0
+jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38
+aQNiuJkFBT1reBK9sG9l
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE
+SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw
+ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU
+REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr
+2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s
+2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU
+GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj
+dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r
+TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/
+BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB
+AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv
+c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl
+ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu
+MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg
+T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud
+HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD
+VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny
+bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
+MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ
+J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG
+SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom
+JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO
+inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y
+caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB
+mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ
+YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9
+BKNDLdr8C2LqL19iUw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
+VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
+ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj
+IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X
+DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw
+EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE
+ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
+dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD
+QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53
+dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK
+wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7
+G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF
+AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7
+c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P
+9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
+VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
+ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt
+YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu
+Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT
+AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa
+MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp
+b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG
+cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh
+d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY
+DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E
+rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq
+uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN
+BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP
+MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa
+/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei
+gQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
+VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
+ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p
+dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv
+bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa
+QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY
+BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u
+IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl
+bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu
+Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs
+Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI
+Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD
+ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
+SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH
+b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh
+KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
+VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
+biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
+dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
+MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
+MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
+A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
+b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
+cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
+bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
+VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
+ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
+uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
+9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
+hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
+pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
+VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
+biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
+MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
+MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
+DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
+dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
+cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
+DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
+gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
+yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
+L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
+EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
+7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
+QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
+qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkEx
+FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzAN
+BgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAd
+BgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNOTcwMTAxMDAwMDAwWhcN
+MjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4g
+Q2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG
+A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1l
+c3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT
+6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQa
+Wt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL
+8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMB
+Af8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCouqoEiYbC
+9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQ
+pgCed/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZ
+CayJSdM=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
+kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
+Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
+dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
+IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
+EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
+VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
+dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
+BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
+E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
+D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
+4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
+lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
+bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
+o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
+MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
+LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
+BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
+AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
+Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
+j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
+KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
+2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
+mfnGV/TJVTl4uix5yaaIK/QI
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB
+rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
+Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
+dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt
+Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa
+Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV
+BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l
+dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE
+AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B
+YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9
+hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l
+L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm
+SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM
+1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws
+6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
+DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw
+Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50
+aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
+AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u
+7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0
+xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ
+rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim
+eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk
+USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
+lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
+Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
+dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
+SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
+A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
+MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
+d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
+cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
+0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
+M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
+MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
+oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
+DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
+oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
+VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
+dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
+bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
+BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
+//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
+CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
+CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
+3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
+KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCB
+ozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
+Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
+dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3Qt
+TmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5WhcNMTkwNzA5MTg1
+NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
+IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYD
+VQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VS
+Rmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+DwAwggEKAoIBAQCz+5Gh5DZVhawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2
+N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCH
+iZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hARe
+YFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1
+axwiP8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6g
+yN7igEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD
+AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPh
+ahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V
+VE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0GCSqGSIb3DQEB
+BQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
+IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6Lzs
+QCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4
+ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qM
+YEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUb
+QErNaLly7HF27FSOH4UMAWr6pjisH8SE
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCB
+lTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
+Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
+dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAbBgNVBAMTFFVUTi1VU0VSRmlyc3Qt
+T2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAzNlowgZUxCzAJBgNV
+BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAc
+BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3
+dy51c2VydHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicP
+HxzfOpuCaDDASmEd8S8O+r5596Uj71VRloTN2+O5bj4x2AogZ8f02b+U60cEPgLO
+KqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQw5ujm9M89RKZd7G3CeBo
+5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vulBe3/IW+
+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehb
+kkj7RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUC
+AwEAAaOBrzCBrDALBgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
+FgQU2u1kdBScFDyr3ZmpvVsoTYs8ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDov
+L2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmlyc3QtT2JqZWN0LmNybDApBgNV
+HSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQwDQYJKoZIhvcN
+AQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw
+NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXB
+mMiKVl0+7kNOPmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU
+4U3GDZlDAQ0Slox4nb9QorFEqmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK5
+81OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCGhU3IfdeLA/5u1fedFqySLKAj5ZyR
+Uh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
+IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
+BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
+aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
+9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy
+NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
+azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
+Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
+cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y
+LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+
+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y
+TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0
+LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW
+I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
+nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
+IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
+BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
+aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
+9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
+NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
+azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
+YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
+Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
+cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
+dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
+WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
+v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
+UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
+IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
+W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
+c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05
+NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD
+VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp
+bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB
+jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N
+H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR
+4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN
+BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo
+EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5
+FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx
+lA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
+c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
+MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
+emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
+DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
+FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
+UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
+YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
+MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
+VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
+Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
+AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J
+h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
+uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68
+DzFc6PLZ
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
+nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
+8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
+ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
+PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
+6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
+n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
+qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
+wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
+ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
+pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
+E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh
+YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7
+FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G
+CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg
+J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc
+r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
+YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
+MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
+aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
+Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
+MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
+IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
+KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
+eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
+AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
+HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
+DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
+AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
+nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
+rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
+jBJ7xUS0rg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
+aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
+IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
+Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
+eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
+BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
+Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
+Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
+Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
+IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
+J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
+JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
+wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
+koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
+qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
+Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
+xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
+7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
+sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
+sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
+cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
+BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
+I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
+CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
+lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
+AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
+c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
+MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
+emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
+DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
+FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
+UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
+YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
+MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
+pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
+13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
+AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
+U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
+F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
+oJ2daZH9
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
+N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
+KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
+kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
+CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
+Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
+imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
+2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
+DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
+/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
+F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
+TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
+BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
+c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
+MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
+emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
+DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
+FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg
+UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
+YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
+MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
+AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM
+HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK
+qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID
+AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj
+cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y
+cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP
+T8qAkbYp
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
+CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
+cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
+LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
+aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
+VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
+aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
+bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
+IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
+LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
+GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
++mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
+U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
+NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
+ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
+ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
+CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
+g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
+fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
+2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
+bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
+MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl
+cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
+bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw
+CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h
+dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l
+cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h
+2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E
+lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV
+ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq
+299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t
+vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL
+dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
+AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF
+AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
+zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3
+LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd
+7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw
+++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
+398znM/jra6O1I7mT1GvFpLgXPYHDw==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDgDCCAmigAwIBAgICAx4wDQYJKoZIhvcNAQEFBQAwYTELMAkGA1UEBhMCVVMx
+DTALBgNVBAoTBFZJU0ExLzAtBgNVBAsTJlZpc2EgSW50ZXJuYXRpb25hbCBTZXJ2
+aWNlIEFzc29jaWF0aW9uMRIwEAYDVQQDEwlHUCBSb290IDIwHhcNMDAwODE2MjI1
+MTAwWhcNMjAwODE1MjM1OTAwWjBhMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklT
+QTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRp
+b24xEjAQBgNVBAMTCUdQIFJvb3QgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
+AQoCggEBAKkBcLWqxEDwq2omYXkZAPy/mzdZDK9vZBv42pWUJGkzEXDK41Z0ohdX
+ZFwgBuHW73G3O/erwWnQSaSxBNf0V2KJXLB1LRckaeNCYOTudNargFbYiCjh+20i
+/SN8RnNPflRzHqgsVVh1t0zzWkWlAhr62p3DRcMiXvOL8WAp0sdftAw6UYPvMPjU
+58fy+pmjIlC++QU3o63tmsPm7IgbthknGziLgE3sucfFicv8GjLtI/C1AVj59o/g
+halMCXI5Etuz9c9OYmTaxhkVOmMd6RdVoUwiPDQyRvhlV7or7zaMavrZ2UT0qt2E
+1w0cslSsMoW0ZA3eQbuxNMYBhjJk1Z8CAwEAAaNCMEAwHQYDVR0OBBYEFJ59SzS/
+ca3CBfYDdYDOqU8axCRMMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
+MA0GCSqGSIb3DQEBBQUAA4IBAQAhpXYUVfmtJ3CPPPTVbMjMCqujmAuKBiPFyWHb
+mQdpNSYx/scuhMKZYdQN6X0uEyt8joW2hcdLzzW2LEc9zikv2G+fiRxkk78IvXbQ
+kIqUs38oW26sTTMs7WXcFsziza6kPWKSBpUmv9+55CCmc2rBvveURNZNbyoLaxhN
+dBA2aGpawWqn3TYpjLgwi08hPwAuVDAHOrqK5MOeyti12HvOdUVmB/RtLdh6yumJ
+ivIj2C/LbgA2T/vwLwHMD8AiZfSr4k5hLQOCfZEWtTDVFN5ex5D8ofyrEK9ca3Cn
+B+8phuiyJccg/ybdd+95RBTEvd07xQObdyPsoOy7Wjm1zK0G
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIETzCCAzegAwIBAgIEO63vKTANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQ
+TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
+dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBS
+b290Q0EwHhcNMDEwOTIzMTQxODE3WhcNMTEwOTIzMTMxODE3WjB1MQswCQYDVQQG
+EwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMb
+Q2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQg
+LSBDQSBLbGFzYSAxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4SRW9Q58g
+5DY1Hw7hgCRKBEdPdGn0MFHsfw7rlu/oQm7IChI/uWd9q5wwo77YojtTDjRnpgZs
+jqBeynX8T90vFILqsY2K5CF1OESalwvVr3sZiQX79lisuFKat92u6hBFikFIVxfH
+HB67Af+g7u0dEHdDW7lwy81MwFYxBTRy9wIDAQABo4IBbTCCAWkwDwYDVR0TAQH/
+BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwggEEBgNVHSAEgfwwgfkwgfYGDSsGAQQB
+vj8CAQoBAQAwgeQwgZoGCCsGAQUFBwICMIGNGoGKQ2VydHlmaWthdCB3eXN0YXdp
+b255IHpnb2RuaWUgeiBkb2t1bWVudGVtOiAiUG9saXR5a2EgQ2VydHlmaWthY2pp
+IGRsYSBSb290Q0EiLiBDZXJ0eWZpa2F0IHd5c3Rhd2lvbnkgcHJ6ZXogUm9vdENB
+IHcgaGllcmFyY2hpaSBDQyBTaWduZXQuMEUGCCsGAQUFBwIBFjlodHRwOi8vd3d3
+LnNpZ25ldC5wbC9yZXBvenl0b3JpdW0vZG9rdW1lbnR5L3BjX3Jvb3RjYS50eHQw
+HwYDVR0jBBgwFoAUwJvFIw0C4aZOSGsfAOnjmhQbsa8wHQYDVR0OBBYEFMODHtVZ
+d1T7TftXR/nEI1zR54njMA0GCSqGSIb3DQEBBQUAA4IBAQBRIHQBFIGh8Jpxt87A
+gSLwIEEk4+oGy769u3NtoaR0R3WNMdmt7fXTi0tyTQ9V4AIszxVjhnUPaKnF1KYy
+f8Tl+YTzk9ZfFkZ3kCdSaILZAOIrmqWNLPmjUQ5/JiMGho0e1YmWUcMci84+pIis
+TsytFzVP32/W+sz2H4FQAvOIMmxB7EJX9AdbnXn9EXZ+4nCqi0ft5z96ZqOJJiCB
+3vSaoYg+wdkcvb6souMJzuc2uptXtR1Xf3ihlHaGW+hmnpcwFA6AoNrom6Vgzk6U
+1ienx0Cw28BhRSKqzKkyXkuK8gRflZUx84uftXncwKJrMiE3lvgOOBITRzcahirL
+er4c
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE9zCCA9+gAwIBAgIEPL/xoTANBgkqhkiG9w0BAQUFADB2MQswCQYDVQQGEwJQ
+TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
+dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWduZXQgLSBQ
+Q0EgS2xhc2EgMjAeFw0wMjA0MTkxMDI5NTNaFw0xNzA0MTgxMjUzMDdaMHUxCzAJ
+BgNVBAYTAlBMMR8wHQYDVQQKExZUUCBJbnRlcm5ldCBTcC4geiBvLm8uMSQwIgYD
+VQQLExtDZW50cnVtIENlcnR5ZmlrYWNqaSBTaWduZXQxHzAdBgNVBAMTFkNDIFNp
+Z25ldCAtIENBIEtsYXNhIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQCqgLJuQqY4yavbSgHg8CyfKTx4BokNSDOVz4eD9vptUr11Kqd06ED1hlH7Sg0g
+oBFAfntNU/QTKwSBaNuime7C4sSEdgsKrPoAhGb4Mq8y7Ty7RqZz7mkzNMqzL2L2
+U4yQ2QjvpH8MH0IBqOWEcpSkpwnrCDImRoTfd+YlZWKi2JceQixUUYIQ45Ox8+x8
+hHbvvZdgqtcvo8PW27qoHkp/7hMuJ44kDAGrmxffBXl/OBRZp0uO1CSLcMcVJzyr
+2phKhy406MYdWrtNPEluGs0GFDzd0nrIctiWAO4cmct4S72S9Q6e//0GO9f3/Ca5
+Kb2I1xYLj/xE+HgjHX9aD2MhAgMBAAGjggGMMIIBiDAPBgNVHRMBAf8EBTADAQH/
+MA4GA1UdDwEB/wQEAwIBBjCB4wYDVR0gBIHbMIHYMIHVBg0rBgEEAb4/AhQKAQEA
+MIHDMHUGCCsGAQUFBwICMGkaZ0NlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmll
+IHogZG9rdW1lbnRlbTogIlBvbGl0eWthIENlcnR5ZmlrYWNqaSBQQ0EyIC0gQ2Vy
+dHlmaWthdHkgVXJ6ZWRvdyBLbGFzeSAyIi4wSgYIKwYBBQUHAgEWPmh0dHA6Ly93
+d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9kb2t1bWVudHkva2xhc2EyL3BjX3Bj
+YTIudHh0MD8GA1UdHwQ4MDYwNKAyoDCGLmh0dHA6Ly93d3cuc2lnbmV0LnBsL3Jl
+cG96eXRvcml1bS9jcmwvcGNhMi5jcmwwHwYDVR0jBBgwFoAUwGxGyl2CfpYHRonE
+82AVXO08kMIwHQYDVR0OBBYEFLtFBlILy4HNKVSzvHxBTM0HDowlMA0GCSqGSIb3
+DQEBBQUAA4IBAQBWTsCbqXrXhBBev5v5cIuc6gJM8ww7oR0uMQRZoFSqvQUPWBYM
+2/TLI/f8UM9hSShUVj3zEsSj/vFHagUVmzuVXo5u0WK8iaqATSyEVBhADHrPG6wY
+cLKJlagge/ILA0m+SieyP2sjYD9MUB9KZIEyBKv0429UuDTw6P7pslxMWJBSNyQx
+aLIs0SRKsqZZWkc7ZYAj2apSkBMX2Is1oHA+PwkF6jQMwCao/+CndXPUzfCF6caa
+9WwW31W26MlXCvSmJgfiTPwGvm4PkPmOnmWZ3CczzhHl4q7ztHFzshJH3sZWDnrW
+wBFjzz5ePr3WHV1wA7EY6oT4zBx+2gT9XBTB
 -----END CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
 MIIEejCCA2KgAwIBAgIEP4vk6TANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJQ
@@ -2348,200 +1965,116 @@ ngRS506mdQ7vWrtApkh8zhhWp7duCkjcCo1O8JxqYr2qEW1fXmgOISe010v2mmuv
 hHxPyVwoAU4KkOw0nbXZn53yak0is5+XmAjh0wWue44AssHrjC9nUh3mkLt6eQ==
 -----END CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
-MIIEezCCA2OgAwIBAgIEP4vnLzANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJQ
-TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEfMB0GA1UEAxMWQ0Mg
-U2lnbmV0IC0gQ0EgS2xhc2EgMzEXMBUGA1UEBRMOTnVtZXIgd3Bpc3U6IDQwHhcN
-MDMxMDE0MTIwODAwWhcNMDgwNDI4MTA1MDU1WjB3MQswCQYDVQQGEwJQTDEfMB0G
-A1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBD
-ZXJ0eWZpa2FjamkgU2lnbmV0MSEwHwYDVQQDExhDQyBTaWduZXQgLSBPQ1NQIEts
-YXNhIDMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM/9GwvARNuCVN+PqZmO
-4FqH8vTqhenUyqRkmAVT4YhLu0a9AXeLAYVDu+NTkYzsAUMAfu55rIKHNLlm6WbF
-KvLiKKz4p4pbUr+ToPcwl/TDotidloUdBAxDg0SL+PmQqACZDe3seJho2IYf2vDL
-/G4TLMbKmNB0mlWFuN0f4fJNAgMBAAGjggGgMIIBnDAOBgNVHQ8BAf8EBAMCB4Aw
-EwYDVR0lBAwwCgYIKwYBBQUHAwkwTwYDVR0fBEgwRjBEoEKgQIY+aHR0cDovL3d3
-dy5zaWduZXQucGwva3dhbGlmaWtvd2FuZS9yZXBvenl0b3JpdW0vY3JsL2tsYXNh
-My5jcmwwgdgGA1UdIASB0DCBzTCBygYOKwYBBAG+PwKCLAoCAQAwgbcwbAYIKwYB
-BQUHAgIwYBpeQ2VydHlmaWthdCB3eWRhbnkgemdvZG5pZSB6IGRva3VtZW50ZW0g
-IlBvbGl0eWthIENlcnR5ZmlrYWNqaSAtIENlcnR5ZmlrYXR5IHJlc3BvbmRlcm93
-IE9DU1AiLjBHBggrBgEFBQcCARY7aHR0cDovL3d3dy5zaWduZXQucGwvcmVwb3p5
-dG9yaXVtL2Rva3VtZW50eS9wY19vY3NwXzFfMC5wZGYwHwYDVR0jBBgwFoAUe2PM
-GZB6tM62O559bRUnUND5SbkwHQYDVR0OBBYEFG4jnCMvBALRQXtmDn9TyXQ/EKP+
-MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQEFBQADggEBACXrKG5Def5lpRwmZom3UEDq
-bl7y4U3qomG4B+ok2FVZGgPZti+ZgvrenPj7PtbYCUBPsCSTNrznKinoT3gD9lQQ
-xkEHwdc6VD1GlFp+qI64u0+wS9Epatrdf7aBnizrOIB4LJd4E2TWQ6trspetjMIU
-upyWls1BmYUxB91R7QkTiAUSNZ87s3auhZuG4f0V0JLVCcg2rn7AN1rfMkgxCbHk
-GxiQbYWFljl6aatxR3odnnzVUe1I8uoY2JXpmmUcOG4dNGuQYziyKG3mtXCQWvug
-5qi9Mf3KUh1oSTKx6HfLjjNl1+wMB5Mdb8LF0XyZLdJM9yIZh7SBRsYm9QiXevY=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFGjCCBAKgAwIBAgIEPL7eEDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQTDEfMB0GA1UE
-ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg
-U2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBSb290Q0EwHhcNMDIwNDE4MTQ1NDA4WhcNMjYw
-OTIxMTU0MjE5WjB2MQswCQYDVQQGEwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5v
-LjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWdu
-ZXQgLSBQQ0EgS2xhc2EgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM7BrBlbN5ma
-M5eg0BOTqoZ+9NBDvU8Lm5rTdrMswFTCathzpVVLK/JD4K3+4oCZ9SRAspEXE4gvwb08ASY6w5s+
-HpRkeJw8YzMFR5kDZD5adgnCAy4vDfIXYZgppXPaTQ8wnfUZ7BZ7Zfa7QBemUIcJIzJBB0UqgtxW
-Ceol9IekpBRVmuuSA6QG0Jkm+pGDJ05yj2eQG8jTcBENM7sVA8rGRMyFA4skSZ+D0OG6FS2xC1i9
-JyN0ag1yII/LPx8HK5J4W9MaPRNjAEeaa2qI9EpchwrOxnyVbQfSedCG1VRJfAsE/9tT9CMUPZ3x
-W20QjQcSZJqVcmGW9gVsXKQOVLsCAwEAAaOCAbMwggGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
-AQH/BAQDAgEGMIIBBAYDVR0gBIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQEBMIHkMIGaBggrBgEFBQcC
-AjCBjRqBikNlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmllIHogZG9rdW1lbnRlbTogIlBvbGl0
-eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENBIi4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6
-IFJvb3RDQSB3IGhpZXJhcmNoaWkgQ0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5z
-aWduZXQucGwvcmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY19yb290Y2EudHh0MEQGA1UdHwQ9MDsw
-OaA3oDWGM2h0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9yb290Y2Evcm9vdGNhLmNy
-bDAfBgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAdBgNVHQ4EFgQUwGxGyl2CfpYHRonE
-82AVXO08kMIwDQYJKoZIhvcNAQEFBQADggEBABp1TAUsa+BeVWg4cjowc8yTJ5XN3GvN96GObMkx
-UGY7U9kVrLI71xBgoNVyzXTiMNDBvjh7vdPWjpl5SDiRpnnKiOFXA43HvNWzUaOkTu1mxjJsZsan
-ot1Xt6j0ZDC+03FjLHdYMyM9kSWp6afb4980EPYZCcSzgM5TOGfJmNii5Tq468VFKrX+52Aou1G2
-2Ohu+EEOlOrG7ylKv1hHUJJCjwN0ZVEIn1nDbrU9FeGCz8J9ihVUvnENEBbBkU37PWqWuHitKQDV
-tcwTwJJdR8cmKq3NmkwAm9fPacidQLpaw0WkuGrS+fEDhu1Nhy9xELP6NA9GRTCNxm/dXlcwnmY=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFGjCCBAKgAwIBAgIEPV0tNDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQTDEfMB0GA1UE
-ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg
-U2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBSb290Q0EwHhcNMDIwODE2MTY0OTU2WhcNMjYw
-OTIxMTU0MjE5WjB2MQswCQYDVQQGEwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5v
-LjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWdu
-ZXQgLSBQQ0EgS2xhc2EgMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALN3LanJtdue
-Ne6geWUTFENa+lEuzqELcoqhYB+a/tJcPEkc6TX/bYPzalRRjqs+quMP6KZTU0DixOrV+K7iWaqA
-iQ913HX5IBLmKDCrTVW/ZvSDpiBKbxlHfSNuJxAuVT6HdbzK7yAW38ssX+yS2tZYHZ5FhZcfqzPE
-OpO94mAKcBUhk6T/ki0evXX/ZvvktwmF3hKattzwtM4JMLurAEl8SInyEYULw5JdlfcBez2Tg6Db
-w34hA1A+ckTwhxzecrB8TUe2BnQKOs9vr2cCACpFFcOmPkM0Drtjctr1QHm1tYSqRFRf9VcV5tfC
-3P8QqoK4ONjtLPHc9x5NE1uK/FMCAwEAAaOCAbMwggGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
-AQH/BAQDAgEGMIIBBAYDVR0gBIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQECMIHkMIGaBggrBgEFBQcC
-AjCBjRqBikNlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmllIHogZG9rdW1lbnRlbTogIlBvbGl0
-eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENBIi4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6
-IFJvb3RDQSB3IGhpZXJhcmNoaWkgQ0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5z
-aWduZXQucGwvcmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY19yb290Y2EudHh0MEQGA1UdHwQ9MDsw
-OaA3oDWGM2h0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9yb290Y2Evcm9vdGNhLmNy
-bDAfBgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAdBgNVHQ4EFgQUXvthcPHlH5BgGhlM
-ErJNXWlhlgAwDQYJKoZIhvcNAQEFBQADggEBACIce95Mvn710KCAISA0CuHD4aznTU6pLoCDShW4
-7OR+GTpJUm1coTcUqlBHV9mra4VFrBcBuOkHZoBLq/jmE0QJWnpSEULDcH9J3mF0nqO9SM+mWyJG
-dsJF/XU/7smummgjMNQXwzQTtWORF+6v5KUbWX85anO2wR+M6YTBWC55zWpWi4RG3vkHFs5Ze2oF
-JTlpuxw9ZgxTnWlwI9QR2MvEhYIUMKMOWxw1nt0kKj+5TCNQQGh/VJJ1dsiroGh/io1DOcePEhKz
-1Ag52y6Wf0nJJB9yk0sFakqZH18F7eQecQImgZyyeRtsG95leNugB3BXWCW+KxwiBrtQTXv4dTE=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEzzCCA7egAwIBAgIEO6ocGTANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQTDEfMB0GA1UE
-ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg
-U2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBSb290Q0EwHhcNMDEwOTIwMTY0MjE5WhcNMjYw
-OTIxMTU0MjE5WjBxMQswCQYDVQQGEwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5v
-LjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWdu
-ZXQgLSBSb290Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrr2vydnNpELfGW3Ks
-ARiDhJvwDtUe4AbWev+OfMc3+vA29nX8ZmIwno3gmItjo5DbUCCRiCMq5c9epcGu+kg4a3BJChVX
-REl8gVh0ST15rr3RKrSc4VgsvQzl0ZUraeQLl8JoRT5PLsUj3qwF78jUCQVckiiLVcnGfZtFCm+D
-CJXliQBDMB9XFAUEiO/DtEBs0B7wJGx7lgJeJpQUcGiaOPjcJDYOk7rNAYmmD2gWeSlepufO8luU
-YG/YDxTC4mqhRqfa4MnVO5dqy+ICj2UvUpHbZDB0KfGRibgBYeQP1kuqgIzJN4UqknVAJb0aMBSP
-l+9k2fAUdchx1njlbdcbAgMBAAGjggFtMIIBaTAPBgNVHRMBAf8EBTADAQH/MIIBBAYDVR0gBIH8
-MIH5MIH2Bg0rBgEEAb4/AgEKAQEAMIHkMIGaBggrBgEFBQcCAjCBjRqBikNlcnR5ZmlrYXQgd3lz
-dGF3aW9ueSB6Z29kbmllIHogZG9rdW1lbnRlbTogIlBvbGl0eWthIENlcnR5ZmlrYWNqaSBkbGEg
-Um9vdENBIi4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6IFJvb3RDQSB3IGhpZXJhcmNoaWkg
-Q0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5zaWduZXQucGwvcmVwb3p5dG9yaXVt
-L2Rva3VtZW50eS9wY19yb290Y2EudHh0MB0GA1UdDgQWBBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAf
-BgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcN
-AQEFBQADggEBAGnY5QmYqnnO9OqFOWZxxb25UHRnaRF6IV9aaGit5BZufZj2Tq3v8L3SgE34GOoI
-cdRMMG5JEpEU4mN/Ef3oY6Eo+7HfqaPHI4KFmbDSPiK5s+wmf+bQSm0Yq5/h4ZOdcAESlLQeLSt1
-CQk2JoKQJ6pyAf6xJBgWEIlm4RXE4J3324PUiOp83kW6MDvaa1xY976WyInr4rwoLgxVl11LZeKW
-ha0RJJxJgw/NyWpKG7LWCm1fglF8JH51vZNndGYq1iKtfnrIOvLZq6bzaCiZm1EurD8HE6P7pmAB
-KK6o3C2OXlNfNIgwkDN/cDqk5TYsTkrpfriJPdxXBH8hQOkW89g=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID/TCCA2agAwIBAgIEP4/gkTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJQTDEfMB0GA1UE
-ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg
-U2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQgLSBDQSBLbGFzYSAxMB4XDTAzMTAxNzEyMjkwMloX
-DTExMDkyMzExMTgxN1owdjELMAkGA1UEBhMCUEwxHzAdBgNVBAoTFlRQIEludGVybmV0IFNwLiB6
-IG8uby4xJDAiBgNVBAsTG0NlbnRydW0gQ2VydHlmaWthY2ppIFNpZ25ldDEgMB4GA1UEAxMXQ0Mg
-U2lnbmV0IC0gVFNBIEtsYXNhIDEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOJYrISEtSsd
-uHajROh5/n7NGrkpYTT9NEaPe9+ucuQ37KxIbfJwXJjgUc1dw4wCkcQ12FJarD1X6mSQ4cfN/60v
-LfKI5ZD4nhJTMKlAj1pX9ScQ/MuyvKStCbn5WTkjPhjRAM0tdwXSnzuTEunfw0Oup559y3Iqxg1c
-ExflB6cfAgMBAAGjggGXMIIBkzBBBgNVHR8EOjA4MDagNKAyhjBodHRwOi8vd3d3LnNpZ25ldC5w
-bC9yZXBvenl0b3JpdW0vY3JsL2tsYXNhMS5jcmwwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQM
-MAoGCCsGAQUFBwMIMIHaBgNVHSAEgdIwgc8wgcwGDSsGAQQBvj8CZAoRAgEwgbowbwYIKwYBBQUH
-AgIwYxphQ2VydHlmaWthdCB3eXN0YXdpb255IHpnb2RuaWUgeiBkb2t1bWVudGVtICJQb2xpdHlr
-YSBDZXJ0eWZpa2FjamkgQ0MgU2lnbmV0IC0gWm5ha293YW5pZSBjemFzZW0iLjBHBggrBgEFBQcC
-ARY7aHR0cDovL3d3dy5zaWduZXQucGwvcmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY190c2ExXzJf
-MS5wZGYwHwYDVR0jBBgwFoAUw4Me1Vl3VPtN+1dH+cQjXNHnieMwHQYDVR0OBBYEFJdDwEqtcavO
-Yd9u9tej53vWXwNBMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQEFBQADgYEAnpiQkqLCJQYXUrqMHUEz
-+z3rOqS0XzSFnVVLhkVssvXc8S3FkJIiQTUrkScjI4CToCzujj3EyfNxH6yiLlMbskF8I31JxIeB
-vueqV+s+o76CZm3ycu9hb0I4lswuxoT+q5ZzPR8Irrb51rZXlolR+7KtwMg4sFDJZ8RNgOf7tbA=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
-IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
-IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
-Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
-BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
-MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
-ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
-8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
-zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
-fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
-w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
-G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
-epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
-laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
-QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
-fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
-YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w
-ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY
-gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe
-MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0
-IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
-dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw
-czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0
-dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl
-aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC
-AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg
-b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB
-ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc
-nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg
-18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c
-gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl
-Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY
-sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T
-SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF
-CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum
-GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
-zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
-omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGCDCCA/CgAwIBAgIBATANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
-IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
-IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
-Y2FjZXJ0Lm9yZzAeFw0wNTEwMTQwNzM2NTVaFw0zMzAzMjgwNzM2NTVaMFQxFDAS
-BgNVBAoTC0NBY2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5v
-cmcxHDAaBgNVBAMTE0NBY2VydCBDbGFzcyAzIFJvb3QwggIiMA0GCSqGSIb3DQEB
-AQUAA4ICDwAwggIKAoICAQCrSTURSHzSJn5TlM9Dqd0o10Iqi/OHeBlYfA+e2ol9
-4fvrcpANdKGWZKufoCSZc9riVXbHF3v1BKxGuMO+f2SNEGwk82GcwPKQ+lHm9WkB
-Y8MPVuJKQs/iRIwlKKjFeQl9RrmK8+nzNCkIReQcn8uUBByBqBSzmGXEQ+xOgo0J
-0b2qW42S0OzekMV/CsLj6+YxWl50PpczWejDAz1gM7/30W9HxM3uYoNSbi4ImqTZ
-FRiRpoWSR7CuSOtttyHshRpocjWr//AQXcD0lKdq1TuSfkyQBX6TwSyLpI5idBVx
-bgtxA+qvFTia1NIFcm+M+SvrWnIl+TlG43IbPgTDZCciECqKT1inA62+tC4T7V2q
-SNfVfdQqe1z6RgRQ5MwOQluM7dvyz/yWk+DbETZUYjQ4jwxgmzuXVjit89Jbi6Bb
-6k6WuHzX1aCGcEDTkSm3ojyt9Yy7zxqSiuQ0e8DYbF/pCsLDpyCaWt8sXVJcukfV
-m+8kKHA4IC/VfynAskEDaJLM4JzMl0tF7zoQCqtwOpiVcK01seqFK6QcgCExqa5g
-eoAmSAC4AcCTY1UikTxW56/bOiXzjzFU6iaLgVn5odFTEcV7nQP2dBHgbbEsPyyG
-kZlxmqZ3izRg0RS0LKydr4wQ05/EavhvE/xzWfdmQnQeiuP43NJvmJzLR5iVQAX7
-6QIDAQABo4G/MIG8MA8GA1UdEwEB/wQFMAMBAf8wXQYIKwYBBQUHAQEEUTBPMCMG
-CCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggrBgEFBQcwAoYc
-aHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBBMD8GCCsGAQQB
-gZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9yZy9pbmRleC5w
-aHA/aWQ9MTAwDQYJKoZIhvcNAQEEBQADggIBAH8IiKHaGlBJ2on7oQhy84r3HsQ6
-tHlbIDCxRd7CXdNlafHCXVRUPIVfuXtCkcKZ/RtRm6tGpaEQU55tiKxzbiwzpvD0
-nuB1wT6IRanhZkP+VlrRekF490DaSjrxC1uluxYG5sLnk7mFTZdPsR44Q4Dvmw2M
-77inYACHV30eRBzLI++bPJmdr7UpHEV5FpZNJ23xHGzDwlVks7wU4vOkHx4y/CcV
-Bc/dLq4+gmF78CEQGPZE6lM5+dzQmiDgxrvgu1pPxJnIB721vaLbLmINQjRBvP+L
-ivVRIqqIMADisNS8vmW61QNXeZvo3MhN+FDtkaVSKKKs+zZYPumUK5FQhxvWXtaM
-zPcPEAxSTtAWYeXlCmy/F8dyRlecmPVsYGN6b165Ti/Iubm7aoW8mA3t+T6XhDSU
-rgCvoeXnkm5OvfPi2RSLXNLrAWygF6UtEOucekq9ve7O/e0iQKtwOIj1CodqwqsF
-YMlIBdpTwd5Ed2qz8zw87YC8pjhKKSRf/lk7myV6VmMAZLldpGJ9VzZPrYPvH5JT
-oI53V93lYRE9IwCQTDz6o2CTBKOvNfYOao9PSmCnhQVsRqGP9Md246FZV/dxssRu
-FFxtbUFm3xuTsdQAw+7Lzzw9IYCpX2Nl/N3gX6T0K/CFcUHUZyX7GrGXrtaZghNB
-0m6lG5kngOcLqagA
+MIIFGjCCBAKgAwIBAgIEPL7eEDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQ
+TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
+dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBS
+b290Q0EwHhcNMDIwNDE4MTQ1NDA4WhcNMjYwOTIxMTU0MjE5WjB2MQswCQYDVQQG
+EwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMb
+Q2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWduZXQg
+LSBQQ0EgS2xhc2EgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM7B
+rBlbN5maM5eg0BOTqoZ+9NBDvU8Lm5rTdrMswFTCathzpVVLK/JD4K3+4oCZ9SRA
+spEXE4gvwb08ASY6w5s+HpRkeJw8YzMFR5kDZD5adgnCAy4vDfIXYZgppXPaTQ8w
+nfUZ7BZ7Zfa7QBemUIcJIzJBB0UqgtxWCeol9IekpBRVmuuSA6QG0Jkm+pGDJ05y
+j2eQG8jTcBENM7sVA8rGRMyFA4skSZ+D0OG6FS2xC1i9JyN0ag1yII/LPx8HK5J4
+W9MaPRNjAEeaa2qI9EpchwrOxnyVbQfSedCG1VRJfAsE/9tT9CMUPZ3xW20QjQcS
+ZJqVcmGW9gVsXKQOVLsCAwEAAaOCAbMwggGvMA8GA1UdEwEB/wQFMAMBAf8wDgYD
+VR0PAQH/BAQDAgEGMIIBBAYDVR0gBIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQEBMIHk
+MIGaBggrBgEFBQcCAjCBjRqBikNlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmll
+IHogZG9rdW1lbnRlbTogIlBvbGl0eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENB
+Ii4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6IFJvb3RDQSB3IGhpZXJhcmNo
+aWkgQ0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5zaWduZXQucGwv
+cmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY19yb290Y2EudHh0MEQGA1UdHwQ9MDsw
+OaA3oDWGM2h0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9yb290Y2Ev
+cm9vdGNhLmNybDAfBgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAdBgNV
+HQ4EFgQUwGxGyl2CfpYHRonE82AVXO08kMIwDQYJKoZIhvcNAQEFBQADggEBABp1
+TAUsa+BeVWg4cjowc8yTJ5XN3GvN96GObMkxUGY7U9kVrLI71xBgoNVyzXTiMNDB
+vjh7vdPWjpl5SDiRpnnKiOFXA43HvNWzUaOkTu1mxjJsZsanot1Xt6j0ZDC+03Fj
+LHdYMyM9kSWp6afb4980EPYZCcSzgM5TOGfJmNii5Tq468VFKrX+52Aou1G22Ohu
++EEOlOrG7ylKv1hHUJJCjwN0ZVEIn1nDbrU9FeGCz8J9ihVUvnENEBbBkU37PWqW
+uHitKQDVtcwTwJJdR8cmKq3NmkwAm9fPacidQLpaw0WkuGrS+fEDhu1Nhy9xELP6
+NA9GRTCNxm/dXlcwnmY=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFGjCCBAKgAwIBAgIEPV0tNDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQ
+TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
+dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBS
+b290Q0EwHhcNMDIwODE2MTY0OTU2WhcNMjYwOTIxMTU0MjE5WjB2MQswCQYDVQQG
+EwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMb
+Q2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWduZXQg
+LSBQQ0EgS2xhc2EgMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALN3
+LanJtdueNe6geWUTFENa+lEuzqELcoqhYB+a/tJcPEkc6TX/bYPzalRRjqs+quMP
+6KZTU0DixOrV+K7iWaqAiQ913HX5IBLmKDCrTVW/ZvSDpiBKbxlHfSNuJxAuVT6H
+dbzK7yAW38ssX+yS2tZYHZ5FhZcfqzPEOpO94mAKcBUhk6T/ki0evXX/ZvvktwmF
+3hKattzwtM4JMLurAEl8SInyEYULw5JdlfcBez2Tg6Dbw34hA1A+ckTwhxzecrB8
+TUe2BnQKOs9vr2cCACpFFcOmPkM0Drtjctr1QHm1tYSqRFRf9VcV5tfC3P8QqoK4
+ONjtLPHc9x5NE1uK/FMCAwEAAaOCAbMwggGvMA8GA1UdEwEB/wQFMAMBAf8wDgYD
+VR0PAQH/BAQDAgEGMIIBBAYDVR0gBIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQECMIHk
+MIGaBggrBgEFBQcCAjCBjRqBikNlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmll
+IHogZG9rdW1lbnRlbTogIlBvbGl0eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENB
+Ii4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6IFJvb3RDQSB3IGhpZXJhcmNo
+aWkgQ0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5zaWduZXQucGwv
+cmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY19yb290Y2EudHh0MEQGA1UdHwQ9MDsw
+OaA3oDWGM2h0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9yb290Y2Ev
+cm9vdGNhLmNybDAfBgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAdBgNV
+HQ4EFgQUXvthcPHlH5BgGhlMErJNXWlhlgAwDQYJKoZIhvcNAQEFBQADggEBACIc
+e95Mvn710KCAISA0CuHD4aznTU6pLoCDShW47OR+GTpJUm1coTcUqlBHV9mra4VF
+rBcBuOkHZoBLq/jmE0QJWnpSEULDcH9J3mF0nqO9SM+mWyJGdsJF/XU/7smummgj
+MNQXwzQTtWORF+6v5KUbWX85anO2wR+M6YTBWC55zWpWi4RG3vkHFs5Ze2oFJTlp
+uxw9ZgxTnWlwI9QR2MvEhYIUMKMOWxw1nt0kKj+5TCNQQGh/VJJ1dsiroGh/io1D
+OcePEhKz1Ag52y6Wf0nJJB9yk0sFakqZH18F7eQecQImgZyyeRtsG95leNugB3BX
+WCW+KxwiBrtQTXv4dTE=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEzzCCA7egAwIBAgIEO6ocGTANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQ
+TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
+dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBS
+b290Q0EwHhcNMDEwOTIwMTY0MjE5WhcNMjYwOTIxMTU0MjE5WjBxMQswCQYDVQQG
+EwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMb
+Q2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQg
+LSBSb290Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrr2vydnNp
+ELfGW3KsARiDhJvwDtUe4AbWev+OfMc3+vA29nX8ZmIwno3gmItjo5DbUCCRiCMq
+5c9epcGu+kg4a3BJChVXREl8gVh0ST15rr3RKrSc4VgsvQzl0ZUraeQLl8JoRT5P
+LsUj3qwF78jUCQVckiiLVcnGfZtFCm+DCJXliQBDMB9XFAUEiO/DtEBs0B7wJGx7
+lgJeJpQUcGiaOPjcJDYOk7rNAYmmD2gWeSlepufO8luUYG/YDxTC4mqhRqfa4MnV
+O5dqy+ICj2UvUpHbZDB0KfGRibgBYeQP1kuqgIzJN4UqknVAJb0aMBSPl+9k2fAU
+dchx1njlbdcbAgMBAAGjggFtMIIBaTAPBgNVHRMBAf8EBTADAQH/MIIBBAYDVR0g
+BIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQEAMIHkMIGaBggrBgEFBQcCAjCBjRqBikNl
+cnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmllIHogZG9rdW1lbnRlbTogIlBvbGl0
+eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENBIi4gQ2VydHlmaWthdCB3eXN0YXdp
+b255IHByemV6IFJvb3RDQSB3IGhpZXJhcmNoaWkgQ0MgU2lnbmV0LjBFBggrBgEF
+BQcCARY5aHR0cDovL3d3dy5zaWduZXQucGwvcmVwb3p5dG9yaXVtL2Rva3VtZW50
+eS9wY19yb290Y2EudHh0MB0GA1UdDgQWBBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAf
+BgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAOBgNVHQ8BAf8EBAMCAQYw
+DQYJKoZIhvcNAQEFBQADggEBAGnY5QmYqnnO9OqFOWZxxb25UHRnaRF6IV9aaGit
+5BZufZj2Tq3v8L3SgE34GOoIcdRMMG5JEpEU4mN/Ef3oY6Eo+7HfqaPHI4KFmbDS
+PiK5s+wmf+bQSm0Yq5/h4ZOdcAESlLQeLSt1CQk2JoKQJ6pyAf6xJBgWEIlm4RXE
+4J3324PUiOp83kW6MDvaa1xY976WyInr4rwoLgxVl11LZeKWha0RJJxJgw/NyWpK
+G7LWCm1fglF8JH51vZNndGYq1iKtfnrIOvLZq6bzaCiZm1EurD8HE6P7pmABKK6o
+3C2OXlNfNIgwkDN/cDqk5TYsTkrpfriJPdxXBH8hQOkW89g=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID/TCCA2agAwIBAgIEP4/gkTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJQ
+TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
+dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQgLSBD
+QSBLbGFzYSAxMB4XDTAzMTAxNzEyMjkwMloXDTExMDkyMzExMTgxN1owdjELMAkG
+A1UEBhMCUEwxHzAdBgNVBAoTFlRQIEludGVybmV0IFNwLiB6IG8uby4xJDAiBgNV
+BAsTG0NlbnRydW0gQ2VydHlmaWthY2ppIFNpZ25ldDEgMB4GA1UEAxMXQ0MgU2ln
+bmV0IC0gVFNBIEtsYXNhIDEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOJY
+rISEtSsduHajROh5/n7NGrkpYTT9NEaPe9+ucuQ37KxIbfJwXJjgUc1dw4wCkcQ1
+2FJarD1X6mSQ4cfN/60vLfKI5ZD4nhJTMKlAj1pX9ScQ/MuyvKStCbn5WTkjPhjR
+AM0tdwXSnzuTEunfw0Oup559y3Iqxg1cExflB6cfAgMBAAGjggGXMIIBkzBBBgNV
+HR8EOjA4MDagNKAyhjBodHRwOi8vd3d3LnNpZ25ldC5wbC9yZXBvenl0b3JpdW0v
+Y3JsL2tsYXNhMS5jcmwwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQMMAoGCCsG
+AQUFBwMIMIHaBgNVHSAEgdIwgc8wgcwGDSsGAQQBvj8CZAoRAgEwgbowbwYIKwYB
+BQUHAgIwYxphQ2VydHlmaWthdCB3eXN0YXdpb255IHpnb2RuaWUgeiBkb2t1bWVu
+dGVtICJQb2xpdHlrYSBDZXJ0eWZpa2FjamkgQ0MgU2lnbmV0IC0gWm5ha293YW5p
+ZSBjemFzZW0iLjBHBggrBgEFBQcCARY7aHR0cDovL3d3dy5zaWduZXQucGwvcmVw
+b3p5dG9yaXVtL2Rva3VtZW50eS9wY190c2ExXzJfMS5wZGYwHwYDVR0jBBgwFoAU
+w4Me1Vl3VPtN+1dH+cQjXNHnieMwHQYDVR0OBBYEFJdDwEqtcavOYd9u9tej53vW
+XwNBMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQEFBQADgYEAnpiQkqLCJQYXUrqMHUEz
++z3rOqS0XzSFnVVLhkVssvXc8S3FkJIiQTUrkScjI4CToCzujj3EyfNxH6yiLlMb
+skF8I31JxIeBvueqV+s+o76CZm3ycu9hb0I4lswuxoT+q5ZzPR8Irrb51rZXlolR
++7KtwMg4sFDJZ8RNgOf7tbA=
 -----END CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
 MIIDvjCCA3ygAwIBAgIFJQaThoEwCwYHKoZIzjgEAwUAMIGFMQswCQYDVQQGEwJG
@@ -2591,1179 +2124,1087 @@ NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R
 0982gaEbeC9xs/FZTEYYKKuF0mBWWg==
 -----END CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
-MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUF
-ADCBgTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3Rl
-cjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0
-ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJH
-QjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxm
-b3JkMRowGAYDVQQKExFDT01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09N
-T0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH+7uIzg3j
-Lz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/a
-N5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaa
-P+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC
-8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+DT+nHbrTUcEL
-pNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVIrLsm
-9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAO
-BgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
-PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0
-aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5
-t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
-OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYm
-uNg4ON8qa90SzMc/RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjs
-LjBOlDW0JB9LeGna8gI4zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV
-8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38
-NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJF
-VTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMw
-IQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZ
-Q2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0z
-NzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1l
-cmZpcm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cu
-Y2hhbWJlcnNpZ24ub3JnMSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJj
-ZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVd
-GDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlUxFF6tdpg
-6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41
-XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxa
-UWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUM
-I/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyXroDclDZK9D7O
-NhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1UdEwEB
-/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFt
-YmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p
-26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQE
-AwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3Jn
-MCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
-VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8v
-Y3BzLmNoYW1iZXJzaWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJ
-KoZIhvcNAQEFBQADggEBAAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0n
-bJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tG
-fToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QU
-u/wNUPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZB
-zu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+
-S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfutGWaIZDgqtCYvDi1czyL
-+Nw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJF
-VTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMw
-IQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMX
-R2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcw
-OTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJm
-aXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNo
-YW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJv
-b3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQCicKLQn0KuWxfH
-2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J1tPfnZda
-n5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH
-+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvu
-sZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8Co
-X6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWhz0hQpe/SyBoT
-+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/BAgw
-BgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJz
-aWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w
-TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQD
-AgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5v
-cmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
-ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0
-dHA6Ly9jcHMuY2hhbWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3Qu
-aHRtbDANBgkqhkiG9w0BAQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVP
-MvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONG
-kyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76Svpyk
-BMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+
-xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLT
-BQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/AYoFWpO+ocH/+OcOZ6RH
-SXZddZAa9SaP8A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEF
-BQAwPTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQD
-ExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2
-MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZ
-BgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxv
-c0NXYKwzCkTsA18cgCSR5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi
-8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZVg2v7tK8R1fjeUl7NIknJITe
-sezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFOYFWe2yMZ
-eVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupd
-M5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUC
-AwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNV
-HQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4QgEBBAQDAgEG
-MDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29tL0NS
-TC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9W
-M2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8
-yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzO
-UrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW
-2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
-//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4F
-TUcY1Rbpsda2ENW7l7+ijrRU
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUF
-ADBbMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUg
-VHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBD
-QSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNV
-BAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8G
-A1UECxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5
-WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzIDZBfZIGxqAgNTNj50wUoUrQB
-JcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCapCIlF3Po
-HuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKB
-Xy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvb
-UJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEITajV8fTXpLmaRcpPV
-MibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQFMAMBAf8wDgYD
-VR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3QuY29t
-MGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRw
-Oi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt
-aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJ
-KoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99
-Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
-Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8
-smk/f3rPanTK+gQqnExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir4
-2NInPRmJX1p7ijvMDNpRrscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvk
-yCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6
-mis=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUF
-ADA/MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAV
-BgNVBAMTDkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkz
-MDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qg
-Q28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdA
-wRgUi+DoM3ZJKuM/IUmTrE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJ
-o6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9UL2AZd+3UWODyOKIYepLYYHs
-Umu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRyxXtqqzTW
-MIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX
-69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/w
-Al0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
-HQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqGSIb3DQEBBQUA
-A4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikugdB/O
-EIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHR
-AosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
-R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJW
-FBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06Xyx
-V3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUF
-ADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD
-VQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1
-cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAw
-WjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD
-VQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1
-cmVkIElEIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWx
-KISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHyUmHfnyDX
-H+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNu
-RMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNs
-IumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcX
-xH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMBAAGjYzBhMA4G
-A1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF66Kv
-9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd
-823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
-dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthn
-gYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+
-fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
-8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwz
-Zr8TDRRu838fYxAe+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7m
-ULKn+gpFL6Lw8g==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUF
-ADBhMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD
-VQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9i
-YWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGEx
-CzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsT
-EHd3dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBS
-b290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLe
-qKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOnTjC3U/dDxGkAV53ijSLdhwZA
-AIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5BmV/Sl0f
-vBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1
-GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3O
-FBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSii
-cNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAOBgNVHQ8BAf8E
-BAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm8KPi
-GxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJ
-KoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
-hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV
-5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBA
-I+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
-UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDA
-GySj4dzp30d8tbQkCAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWV
-bd4=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUF
-ADBsMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD
-VQQLExB3d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdo
-IEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTEx
-MDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IElu
-YzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNl
-cnQgSGlnaCBBc3N1cmFuY2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAMbM5XPm+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRn
-ogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMSOO7zSW1x
-kX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9
-vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlK
-V9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5
-OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsgEsxBu24LUTi4
-S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8w
-HQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+
-w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
-nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehD
-LI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VH
-MWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
-mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E
-1CAx2/S6cCZdkGCevEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN
-7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5l
-bnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEf
-MB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50
-cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIw
-MjM0MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1FbnRydXN0LCBJbmMuMTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BT
-IGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAy
-MDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZm
-Lk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypo
-wCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9KlmaI5UXLEWe
-H25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68j6xS
-lkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94Dk
-Zfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
-sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAE
-JDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSME
-GDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
-hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0G
-CSqGSIb3DQEBBQUAA4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW
-+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ
-47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p
-8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE
-2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDN
-tGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/
-WrQ8
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMC
-RVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNV
-BAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9u
-YWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9m
-ZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCB
-nTELMAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJj
-ZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZp
-cm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYX
-Y2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8
-c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9Z
-pTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx
-/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPayBQC6haD9HThu
-y1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8NeTv
-tjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMB
-AAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv
-bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDEx
-MDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAd
-BgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD
-ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/Gz
-R0iLjJcG1+p+o1wqu00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvX
-wOaD7FnMP97/T2u3Z36mhoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6nt
-Bas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZ
-dBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/g
-e9YGVM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJV
-UzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
-R2xvYmFsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBE
-MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UE
-AxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6Csgncbz
-YEbYwbLVjDHZ3CB5JIG/NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96x
-PqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1kLUCgsBDTOEhGiKEMuzozKmKY
-+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFAVvqgx306
-E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdL
-Fnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMB
-AAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266
-ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUapEBVYIAUJMA4G
-A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7srJe
-rJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/Ngd
-RN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
-A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/q
-kZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa
-4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
-H4z1Ir+rzoPz4iIprn2DQKi6bA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUF
-ADBYMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8G
-A1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYT
-AlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVz
-dCBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHW
-AVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9ju
-apYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9nceJSOC7
-KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5
-X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7W
-inXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s
-0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE
-AwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZIhvcN
-AQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CeP
-bJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
-4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aV
-Il6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJly
-c1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
-1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJV
-UzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3Qg
-VW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFow
-RTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNV
-BAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckU
-HUWCq8YdgNY96xCcOq9tJPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430
-SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw
-8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs7tqqhZJm
-r/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD
-/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBO
-U5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xdVHppCZbW2xHBjXWo
-tM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCXteGYO8A3ZNY9
-lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hBZ3Ki
-KN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9F
-i1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
-nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8G
-A1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
-hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIaw
-C/yOsjmPRFWrZIRcaanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv
-9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7
-/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDV
-nVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG
-8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxr
-u18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2Hr
-rDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKWkoRepqO1pD4r2czYG0eq
-8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslKxfMnZmaG
-rGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9
-fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6
-ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJV
-UzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3Qg
-VW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAw
-WjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4G
-A1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEB
-AQUAA4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6Gq
-dHtXr0om/Nj1XqduGdt0DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQw
-Ax5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC
-5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8QJqVJwy7X
-QYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw7
-6L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC
-9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IEr
-KIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73y/Zl92zxlfgC
-OzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAnZqzw
-cEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgf
-ksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4
-Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAP
-BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQ
-KzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
-BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7
-WJtAJDday6sWSf+zdXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4s
-NcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjg
-AA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo
-4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEn
-cKpqA1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2R
-LrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8
-mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m1wk8OhwRDqZsN/etRIcs
-KMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7dFGdTbHFc
-JoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9
-VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSL
-akhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEg
-MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkds
-b2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAw
-WhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3Qg
-Q0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFs
-U2lnbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8o
-mUVCxKs+IVSbC9N/hHD6ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe
-+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1
-AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjNS7SgfQx5
-TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo
-4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99y
-qWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IHV2ccHsBqBt5Z
-tJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9iYWxz
-aWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0
-mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
-J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4
-h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRD
-LenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
-9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmg
-QWpzU/qlULRuJQ/7TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq
-/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJV
-UzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQL
-EyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
-DTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMx
-ITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMo
-R28gRGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAw
-DQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d
-/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9
-S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32qRe3H3I2
-TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVl
-OARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFA
-pMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44
-dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLEsNKR1EwRcbNh
-yz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2oatTj
-oWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdy
-b3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEF
-BQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYX
-MP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
-I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheab
-IZ0KbIIOqPjCDPoQHmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzr
-Tia2cyvk0/ZM/iZx4mERdEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBD
-pqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/bvZ8=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMC
-SFUxETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96
-YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9r
-MTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZh
-bnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQsw
-CQYDVQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExv
-Y2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZh
-bnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sgVXpsZXRpIChDbGFzcyBCKSBU
-YW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCx
-6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp
-2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5
-sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4IC
-nzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAAYwEQYJ
-YIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxF
-TSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3Mg
-U3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh
-bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5l
-dExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGku
-IEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg
-YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBl
-bGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIElu
-dGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2Rv
-Y3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5u
-ZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQg
-dGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhl
-IE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2Nr
-Lm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G
-CSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM43WIEJes
-sDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w
-2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgB
-azMpUIaD8QFI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMC
-SFUxETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96
-YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9r
-MTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0
-dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsx
-CzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0
-TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0
-dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9jayBFeHByZXNzeiAoQ2xhc3Mg
-QykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
-gYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qd
-QPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64
-gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEA
-AaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0PAQH/BAQDAgAG
-MBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJNRklH
-WUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxh
-bm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz
-b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQg
-YSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2
-ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0
-ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4g
-QXogZWxqYXJhcyBsZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0
-LiBJbnRlcm5ldCBob25sYXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5l
-dC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxv
-Y2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2Ug
-YW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRv
-IHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0
-bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQgY3BzQG5ldGxvY2submV0
-LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2xJZIwVzN
-mtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5N
-NwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeA
-yNDYpQcCNJgEjTME1A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYT
-AkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUG
-A1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQL
-ExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5
-em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0
-N1oXDTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdI
-dW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBI
-YWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtp
-YWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBBKSBU
-YW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbb
-O51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QV
-Or/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8WgD/qaiYdPv2
-LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7tqyF
-/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCub
-MvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC
-ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZI
-AYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEg
-RXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
-bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFw
-amFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv
-Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEg
-ZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXog
-ZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGph
-cmFzIGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVy
-bmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3Mg
-Y2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQg
-ZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl
-IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5l
-dExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5l
-dC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqG
-SIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO
-xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoU
-MaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJ
-MSEN1rUQQeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+u
-xdAu6tYPVuxkf1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q
-5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMC
-SFUxETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96
-YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9r
-MUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xh
-c3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9A
-bmV0bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJ
-MQswCQYDVQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5l
-dExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNp
-dHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0dCBLb3pq
-ZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3
-DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ul
-ZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQer7C8HORSjKAy
-r7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhbm+1b
-OdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrq
-OU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l
-mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9
-o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYw
-ggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2
-YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBT
-emFiYWx5emF0YWJhbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0
-LiBBIG1pbm9zaXRldHQgZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMg
-ZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0
-ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJh
-biwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9p
-cnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1
-bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3dy5uZXRsb2NrLmh1L2Rv
-Y3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2NrLm5ldCBl
-LW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVz
-ZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRM
-b2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5l
-dGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u
-ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEB
-BQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufA
-QTPGtpvQMznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68
-d4bDBsxafEp+NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yf
-uqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSj
-nLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR
-5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMC
-Qk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1Zh
-ZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNa
-MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRsw
-GQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4Gt
-Mh6QRr+jhiYaHv5+HBg6XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst
-/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yklvc/ulsrHHo1wtZn/qtmUItt
-KGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbBlDePSHFj
-IuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRc
-AitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJl
-cZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2
-BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIizPtGo/KPaHbDR
-sSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOhD7os
-FRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR
-7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI
-yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8G
-A1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwz
-JQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
-a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0
-ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcN
-AQEFBQADggIBAD4KFk2fBluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJ
-RqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQty
-U/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgt
-JodmVjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUs
-fU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1
-O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozchLsib9D45MY56QSIPMO6
-61V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1WVaj+ahJ
-efivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1
-B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6y
-hhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOT
-HcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza
+MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
+gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
+BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw
+MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
+YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
+RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
+UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
+2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
+Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
+nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW
+/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
+PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u
+QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY
+SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv
+IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
+RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4
+zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd
+BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
+ZQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn
+MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
+ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg
+b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa
+MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB
+ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw
+IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B
+AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb
+unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d
+BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq
+7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3
+0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX
+roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG
+A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j
+aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p
+26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA
+BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud
+EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN
+BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
+aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB
+AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd
+p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi
+1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc
+XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0
+eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu
+tGWaIZDgqtCYvDi1czyL+Nw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn
+MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
+ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo
+YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9
+MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy
+NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G
+A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA
+A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0
+Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s
+QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV
+eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795
+B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh
+z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T
+AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i
+ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w
+TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH
+MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD
+VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE
+VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
+bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B
+AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM
+bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi
+ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG
+VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c
+ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/
+AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw
+PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz
+cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9
+MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz
+IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ
+ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR
+VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL
+kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd
+EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas
+H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0
+HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud
+DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4
+QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu
+Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/
+AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8
+yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR
+FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA
+ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB
+kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
+l7+ijrRU
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb
+MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx
+ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w
+MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD
+VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx
+FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu
+ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7
+gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH
+fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a
+ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT
+ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF
+MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk
+c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto
+dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt
+aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI
+hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk
+QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/
+h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
+nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR
+rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2
+9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
+MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
+DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
+PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
+Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
+rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
+OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
+xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
+7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
+aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
+HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
+SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
+ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
+AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
+R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
+JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
+Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
+b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
+EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
+cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
+JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
+mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
+VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
+AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
+AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
+BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
+pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
+dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
+fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
+NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
+H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
+CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
+nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
+43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
+T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
+gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
+BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
+TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
+DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
+hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
+06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
+PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
+YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
+CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
+ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
+MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
+LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
+RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
+PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
+xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
+Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
+hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
+EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
+FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
+nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
+eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
+hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
+Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
+vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
++OkuE6N36B9K
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
+VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
+Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
+KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
+cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
+NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
+NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
+ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
+BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
+Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
+4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
+KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
+rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
+94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
+sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
+gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
+kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
+vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
+A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
+O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
+AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
+9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
+eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
+0vdXcDazv/wor3ElhVsT/h5/WrQ8
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx
+IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
+dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
+MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
+HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx
+IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
+dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
+MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
+ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u
+Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY
+rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z
+hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay
+BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL
+iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb
+AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv
+bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0
+MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
+FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n
+VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
+u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m
+hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl
+ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp
+QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5
+quGnM/b9Sh/22WA=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
+MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
+IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG
+EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
+R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A
+PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8
+Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL
+TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL
+5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7
+S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe
+2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
+FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap
+EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td
+EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv
+/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
+A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0
+abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF
+I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
+4iIprn2DQKi6bA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
+MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
+R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
+MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
+Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
+AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
+ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
+7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
+kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
+mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
+A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
+KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
+6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
+4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
+oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
+UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
+AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
+MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
+c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE
+BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0
+IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV
+VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8
+cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT
+QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh
+F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v
+c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w
+mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd
+VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX
+teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ
+f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe
+Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
+nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB
+/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY
+MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
+9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
+aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX
+IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn
+ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z
+uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN
+Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja
+QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW
+koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9
+ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt
+DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm
+bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW
+MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy
+c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD
+VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1
+c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81
+WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG
+FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq
+XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL
+se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb
+KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd
+IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73
+y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt
+hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc
+QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4
+Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV
+HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV
+HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ
+KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
+dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ
+L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr
+Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo
+ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY
+T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz
+GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m
+1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV
+OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH
+6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX
+QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
+A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
+Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
+MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
+A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
+hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
+v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
+eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
+tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
+C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
+zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
+mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
+V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
+bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
+3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
+J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
+291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
+ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
+AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
+TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
+MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
+YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
+MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
+ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
+MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
+ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
+PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
+wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
+EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
+avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
+sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
+/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
+IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
+ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
+OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
+TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
+HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
+dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
+ReYNnyicsbkqWletNw+vHX/bvZ8=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx
+ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
+b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD
+EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05
+OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G
+A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
+Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l
+dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG
+SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK
+gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX
+iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc
+Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E
+BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G
+SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu
+b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh
+bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv
+Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln
+aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0
+IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
+c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph
+biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo
+ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP
+UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj
+YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo
+dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA
+bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06
+sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa
+n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS
+NitjrFgBazMpUIaD8QFI
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx
+ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
+b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD
+EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X
+DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw
+DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u
+c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr
+TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA
+OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC
+2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW
+RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P
+AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW
+ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0
+YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz
+b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO
+ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB
+IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs
+b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
+ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s
+YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg
+a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g
+SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0
+aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg
+YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg
+Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY
+ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g
+pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4
+Fp1hBWeAyNDYpQcCNJgEjTME1A==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV
+MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe
+TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0
+dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB
+KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0
+N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC
+dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu
+MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL
+b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD
+zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi
+3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8
+WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY
+Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi
+NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC
+ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4
+QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0
+YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz
+aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
+IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm
+ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg
+ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs
+amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv
+IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3
+Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6
+ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1
+YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg
+dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs
+b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G
+CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO
+xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP
+0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ
+QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk
+f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK
+8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx
+ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
+b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD
+EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz
+aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w
+MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G
+A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
+Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l
+dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh
+bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq
+hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq
+eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe
+r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5
+3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd
+vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l
+mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC
+wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg
+hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0
+TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
+biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg
+ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg
+dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6
+b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl
+c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0
+ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3
+dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu
+ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh
+bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo
+ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3
+Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u
+ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA
+A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ
+MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+
+NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR
+VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY
+83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3
+macqaJVmlaut74nLYKkGEsaUR+ko
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
+GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
+b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV
+BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
+YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa
+GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg
+Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J
+WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB
+rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp
++ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1
+ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i
+Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz
+PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og
+/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH
+oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI
+yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud
+EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2
+A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL
+MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
+ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f
+BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn
+g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl
+fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K
+WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha
+B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc
+hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR
+TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD
+mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z
+ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y
+4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza
 8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
 -----END CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
-MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMC
-Qk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1Zh
-ZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRa
-MEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRsw
-GQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTP
-krgEQK0CSzGrvI2RaNggDhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9
-cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOijKTVopAFPD6QuN+8bv+OPEKhy
-q1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79KDDRMpsMh
-vVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRl
-lDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+
-pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJ
-k8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjcT5EOE7zelaTf
-i5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEXMJPp
-Govgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6ts
-gLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A
-4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEw
-DwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMw
-gcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
-YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJv
-b3QgQ0EgMyBDZXJ0aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFBy
-YWN0aWNlIFN0YXRlbWVudC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVv
-dmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLA
-E+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1
-XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMg
-TGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkq
-hkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM07ucp2sNbtrCD2dDQ4iH7
-82CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+shvzuXYO8
-BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM
-3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hR
-OJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54C
-rnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x
-DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPs
-MZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmi
-oHfRMJ6szHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRe
-cCocIdiP4b0jWy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEo
-kt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+
-ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUF
-ADBIMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9y
-YXRpb24xFzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzEx
-OFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1Nl
-Y3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBD
-QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7C
-T8rU4niVWJxB4Q2ZQCQXOZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/je
-p4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9tDWccV9cGrcrI9f4Or2YlSASW
-C12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uHGFaAJsTQ
-3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobv
-omuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcW
-NFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIE
-Bh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
-FgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYjaHR0
-cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUB
-BAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3
-6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s
-7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cp
-rp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
-nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZG
-BlSm8jIKYyYwa5vR3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShL
-HZ4swrhovO0C7jE=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUF
-ADBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9y
-YXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0
-MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMX
-U2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9i
-YWwgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxV
-aQZx5RNoJLNP2MwhR/jxYDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7H
-fAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQbqR8JNGuQsiWUGMu4P51/pin
-X0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g8NEXLJXr
-9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz
-+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvU
-d+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGC
-NxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAnoCWG
-I2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQB
-gjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L
-URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X
-+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895
-P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
-3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNsp
-nWzFacxHVaIw98xcf8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJP
-Ix/abKwfROHdI3hRW8cW
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJV
-UzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
-A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQG
-EwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEy
-MDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRo
-b3JpdHkwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGm
-BIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1
-KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZJRRU6ybH
-838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4Q
-yDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmC
-uDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W
-93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0GA1UdDgQWBBS/
-X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0fhvRb
-Vazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJm
-aWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
-bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMB
-Af8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1ep
-oXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
-PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L
-7ShZ3U0WixeDyLJlxy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMt
-lb71cZBDzI0fmgAKhynpVSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl9
-0TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/
-D5fs4C8fF5Q=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJ
-TDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERp
-Z2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20g
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYw
-OTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20g
-THRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2ln
-bmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDBiNsJvGxGfHif
-lXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1yo4UcodM9
-tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1
-YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srh
-JosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d
-5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNiHzvEvqBTViVs
-UQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z6+hs
-TXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2Oq
-qGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
-Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3v
-wmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOz
-EmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
-37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMC
-Aa4wHQYDVR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFsw
-LKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3Js
-MCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3Js
-MIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYB
-BQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUG
-CCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRp
-YXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3RhcnQgQ29tbWVyY2lhbCAo
-U3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5LCByZWFk
-IHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0
-Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUg
-YXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZI
-AYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT
-TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEA
-FmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArex
-mvclmAk8jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPle
-WKYK34wGmkUWFjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8
-rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNm
-ezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
-fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZ
-tWgo+2EuvoSoOMCZEoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0
-yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+PwqyvqCUqDvr0tVk+vBtfAii6w0TiYi
-BKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl1njFmUNj403g
-dy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/
-7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/Fl
-UQqmMGqz9IgcgA38corog14=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMC
-SUwxDzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoT
-DVN0YXJ0Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkw
-JwYDVQQDEyBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8G
-CSqGSIb3DQEJARYSYWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA1MDMxNzE3Mzc0
-OFoXDTM1MDMxMDE3Mzc0OFowgbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJ
-c3JhZWwxDjAMBgNVBAcTBUVpbGF0MRYwFAYDVQQKEw1TdGFydENvbSBMdGQu
-MRowGAYDVQQLExFDQSBBdXRob3JpdHkgRGVwLjEpMCcGA1UEAxMgRnJlZSBT
-U0wgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEmFk
-bWluQHN0YXJ0Y29tLm9yZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-7YRgACOeyEpRKSfeOqE5tWmrCbIvNP1h3D3TsM+x18LEwrHkllbEvqoUDufM
-OlDIOmKdw6OsWXuO7lUaHEe+o5c5s7XvIywI6Nivcy+5yYPo7QAPyHWlLzRM
-GOh2iCNJitu27Wjaw7ViKUylS7eYtAkUEKD4/mJ2IhULpNYILzUCAwEAAaOC
-AjwwggI4MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMB0GA1UdDgQW
-BBQcicOWzL3+MtUNjIExtpidjShkjTCB3QYDVR0jBIHVMIHSgBQcicOWzL3+
-MtUNjIExtpidjShkjaGBtqSBszCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgT
-BklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0
-ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBGcmVl
-IFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
-YWRtaW5Ac3RhcnRjb20ub3JnggEAMB0GA1UdEQQWMBSBEmFkbWluQHN0YXJ0
-Y29tLm9yZzAdBgNVHRIEFjAUgRJhZG1pbkBzdGFydGNvbS5vcmcwEQYJYIZI
-AYb4QgEBBAQDAgAHMC8GCWCGSAGG+EIBDQQiFiBGcmVlIFNTTCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eTAyBglghkgBhvhCAQQEJRYjaHR0cDovL2NlcnQu
-c3RhcnRjb20ub3JnL2NhLWNybC5jcmwwKAYJYIZIAYb4QgECBBsWGWh0dHA6
-Ly9jZXJ0LnN0YXJ0Y29tLm9yZy8wOQYJYIZIAYb4QgEIBCwWKmh0dHA6Ly9j
-ZXJ0LnN0YXJ0Y29tLm9yZy9pbmRleC5waHA/YXBwPTExMTANBgkqhkiG9w0B
-AQQFAAOBgQBscSXhnjSRIe/bbL0BCFaPiNhBOlP1ct8nV0t2hPdopP7rPwl+
-KLhX6h/BquL/lp9JmeaylXOWxkjHXo0Hclb4g4+fd68p00UOpO6wNnQt8M2Y
-I3s3S9r+UZjEHjQ8iP2ZO1CnwYszx8JSFhKVU2Ui77qLzmLbcCOxgN8aIDjn
-fg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJ
-BgNVBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3
-aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1
-MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFH
-MR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG
-9w0BAQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJC
-Eyq8ZVeCQD5XJM1QiyUqt2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9
-lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5CjCA12UNNhPqE21Is8w4ndwtr
-vxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpgvd21mWRT
-uKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbL
-tK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpK
-xVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdV
-xVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02yMszYF9rNt85m
-ndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkOpeUD
-DniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59
-je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM
-gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOB
-rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
-FgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
-OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEF
-BQcCARYgaHR0cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZI
-hvcNAQEFBQADggIBACe645R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhW
-fvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g
-7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8
-AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS
-2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5
-JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a77KwPJ+HbBIrZXAVUjEa
-JM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJkvC24JdVU
-orgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7X
-dVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG
-2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEB
-nunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt
+MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
+GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
+b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV
+BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
+YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM
+V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB
+4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr
+H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd
+8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv
+vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT
+mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe
+btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc
+T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt
+WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ
+c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A
+4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD
+VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG
+CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0
+aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
+aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
+dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw
+czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G
+A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC
+TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg
+Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0
+7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem
+d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd
++LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B
+4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN
+t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x
+DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57
+k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s
+zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j
+Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT
+mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK
+4SVhM7JZG+Ju1zdXtg2pEto=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI
+MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
+FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz
+MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv
+cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN
+AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz
+Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO
+0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao
+wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj
+7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS
+8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT
+BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
+/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg
+JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC
+NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3
+6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/
+3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm
+D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS
+CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
+3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK
+MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
+GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx
+MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg
+Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ
+iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa
+/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ
+jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI
+HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7
+sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w
+gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF
+MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw
+KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG
+AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L
+URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO
+H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm
+I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY
+iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
+f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
+MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
+U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
+NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
+ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
+ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
+DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
+8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
+X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
+K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
+1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
+A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
+zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
+YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
+bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
+DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
+L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
+eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
+xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
+VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
+WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW
+MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
+Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9
+MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
+U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
+cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
+A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
+pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
+OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
+Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
+Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
+HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
+Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
++2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
+Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
+26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
+AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
+FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j
+ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js
+LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM
+BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0
+Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy
+dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh
+cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh
+YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg
+dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp
+bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ
+YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT
+TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ
+9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8
+jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW
+FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz
+ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1
+ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L
+EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu
+L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
+yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC
+O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V
+um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh
+NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwx
+DzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0
+Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBG
+cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
+YWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA1MDMxNzE3Mzc0OFoXDTM1MDMxMDE3Mzc0
+OFowgbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJc3JhZWwxDjAMBgNVBAcTBUVp
+bGF0MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMRowGAYDVQQLExFDQSBBdXRob3Jp
+dHkgRGVwLjEpMCcGA1UEAxMgRnJlZSBTU0wgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
+dHkxITAfBgkqhkiG9w0BCQEWEmFkbWluQHN0YXJ0Y29tLm9yZzCBnzANBgkqhkiG
+9w0BAQEFAAOBjQAwgYkCgYEA7YRgACOeyEpRKSfeOqE5tWmrCbIvNP1h3D3TsM+x
+18LEwrHkllbEvqoUDufMOlDIOmKdw6OsWXuO7lUaHEe+o5c5s7XvIywI6Nivcy+5
+yYPo7QAPyHWlLzRMGOh2iCNJitu27Wjaw7ViKUylS7eYtAkUEKD4/mJ2IhULpNYI
+LzUCAwEAAaOCAjwwggI4MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMB0G
+A1UdDgQWBBQcicOWzL3+MtUNjIExtpidjShkjTCB3QYDVR0jBIHVMIHSgBQcicOW
+zL3+MtUNjIExtpidjShkjaGBtqSBszCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgT
+BklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4x
+GjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBGcmVlIFNTTCBD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSYWRtaW5Ac3Rh
+cnRjb20ub3JnggEAMB0GA1UdEQQWMBSBEmFkbWluQHN0YXJ0Y29tLm9yZzAdBgNV
+HRIEFjAUgRJhZG1pbkBzdGFydGNvbS5vcmcwEQYJYIZIAYb4QgEBBAQDAgAHMC8G
+CWCGSAGG+EIBDQQiFiBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAy
+BglghkgBhvhCAQQEJRYjaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL2NhLWNybC5j
+cmwwKAYJYIZIAYb4QgECBBsWGWh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy8wOQYJ
+YIZIAYb4QgEIBCwWKmh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9pbmRleC5waHA/
+YXBwPTExMTANBgkqhkiG9w0BAQQFAAOBgQBscSXhnjSRIe/bbL0BCFaPiNhBOlP1
+ct8nV0t2hPdopP7rPwl+KLhX6h/BquL/lp9JmeaylXOWxkjHXo0Hclb4g4+fd68p
+00UOpO6wNnQt8M2YI3s3S9r+UZjEHjQ8iP2ZO1CnwYszx8JSFhKVU2Ui77qLzmLb
+cCOxgN8aIDjnfg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
+BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln
+biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF
+MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT
+d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8
+76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+
+bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c
+6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE
+emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd
+MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt
+MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y
+MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y
+FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi
+aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM
+gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB
+qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7
+lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn
+8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
+L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6
+45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO
+UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5
+O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC
+bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv
+GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a
+77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC
+hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3
+92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp
+Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w
+ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt
 Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
 -----END CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
-MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkG
-A1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dp
-c3NTaWduIFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYx
-MDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWdu
-IEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZc
-ZB/HL37PZ/pEQtZ2Y5Wu669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeT
-IsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UFeNSH2XFwMyVTtIc7KZAoNppV
-RDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kneWCqv9hbr
-S3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky
-6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4E
-LE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/Q
-KTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrYzt3oEBSa/m0j
-h26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjydomy
-ExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3
-HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW
-ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGeP
-AgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
-HQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv
-zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4w
-LAYIKwYBBQUHAgEWIGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20v
-MA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfF
-wUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQX
-OHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vl
-pqD4U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/Fqd
-Oxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cb
-OQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8DYSjFyMsSoEJL+WuICI20
-MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1BaYEUtLS1
-7Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyII
-oK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0Ne
-bvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsy
-mxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z
+MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
+BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu
+IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw
+WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD
+ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD
+ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y
+IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn
+IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+
+6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob
+jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw
+izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl
++zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY
+zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP
+pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF
+KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW
+ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB
+AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
+BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0
+ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
+IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA
+A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0
+uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+
+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7
+jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/
+u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D
+YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1
+puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa
+icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG
+DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x
+kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z
 Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
 -----END CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
-MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkG
-A1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dp
-c3NTaWduIFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAy
-NTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBB
-RzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkq
-hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dO
-cbpLj6VzHVxumK4DV644N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gRE
-pzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm+/pe7R20nqA1W6GSy/BJkv6F
-CgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH6INaUFjp
-iou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2
-kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aD
-Cyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jM
-qDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJMoBgs5PAKrYY
-C51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBsROop
-N4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFu
-sB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6
-5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEA
-AaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
-HQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
-tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggr
-BgEFBQcCARYgaHR0cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJ
-KoZIhvcNAQEFBQADggIBAHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ
-1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEG
-DyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcS
-H9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpH
-kXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE
-790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8aRl5xB9+lwW/xekkUV7U
-1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqPe97Dh4kQ
-mUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNV
-V4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29
-MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm
-0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy
+MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE
+BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu
+IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow
+RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY
+U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
+MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv
+Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br
+YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF
+nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH
+6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt
+eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/
+c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ
+MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH
+HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf
+jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6
+5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB
+rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU
+F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c
+wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
+cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB
+AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp
+WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9
+xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ
+2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ
+IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8
+aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X
+em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR
+dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/
+OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+
+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy
 tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
 -----END CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUF
-ADBkMQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsT
-HERpZ2l0YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNz
-Y29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBa
-MGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMc
-RGlnaXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Nj
-b20gUm9vdCBDQSAxMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
-0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJ
-kCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyFNDhhSbEA
-n9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj
-/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxz
-h+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJ
-vbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBuHYwadzVcFh4r
-Ux80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbNcA78
-yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AO
-eCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC
-L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoI
-lmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p
-/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
-HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYB
-Af8CAQcwHwYDVR0jBBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0O
-BBYEFAMlL95vggE6XCzcK6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1
-EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734e
-dAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzn
-eAXQMbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXb
-D8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrE
-qdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsRls/bxig5OgjOR1tTWsWZ
-/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascClOS5cfGni
-LLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFb
-jCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBa
-ZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZh
-vnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y
-zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E
-0F/6MBr1mmz0DlP5OlvRHA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2
-VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xh
-ecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYD
-VQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
-QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1
-MTMxMDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RS
-VVNUIEVsZWt0cm9uaWsgU2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFz
-xLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZBTktBUkExVjBUBgNVBAoMTShj
-KSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBCaWxpxZ9p
-bSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9
-InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1
-cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35JYbOG7E6mQW6E
-vAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ8y1U
-iBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm
-5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51
-b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IB
-AQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd
-82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
-q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oS
-N7wBGjSFvW5P55FyB0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8
-KsF8kOipKMDTkcatKIdAaLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq0
-7Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2
-VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xh
-ecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYD
-VQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0g
-R8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUw
-HhcNMDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2
-VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xh
-ecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYD
-VQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0g
-R8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjH
-WHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9
-irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdhR3n9wFHxwZnn
-3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2gQrSd
-iVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHps
-mxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p
-zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Z
-z58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMB
-Af8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
-Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWo
-lKMiVW4XSf/SKfE4Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbc
-oCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4
-nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsg
-OqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9R
-nuk5UrbnBEI=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUF
-ADA/MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIw
-NTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQg
-Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEB
-BQADggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN8
-6aXfTEc2pBsBHH8eV4qNw8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UK
-IXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/
-cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O1RGvqa/l
-mr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq
-16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdL
-iYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUq
-dULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FCVGqY8A2tl+lS
-XunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1tB6iE
-fC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKX
-TiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN
-Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0G
-A1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkG
-BGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
-09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2
-WPWus4MzeKR6dBcZTulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2Jyf
-tB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3gh
-qMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKb
-xkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1
-AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephg
-IqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7m
-XQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6MmnD+iMsJKxYEYMRBWqoTv
-LQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk7tfGOB5j
-GxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJI
-oRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v
-3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYs
-fPQS
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUF
-ADCByjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8w
-HQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykg
-MjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcN
-MzYwNzE2MjM1OTU5WjCByjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlT
-aWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTow
-OAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1Ymxp
-YyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0G
-CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8
-RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbext0uz/o9+B1fs
-70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhDY2pS
-S9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+Q
-ueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
-rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMK
-z10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNV
-HQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
-Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0
-cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/T
-ZafC3ey78DAJ80M5+gKvMzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP
-2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGq
-CBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU
-7qKEKQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqV
-ir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4o
-tp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8NhnacRHr2lVz2XTIIM6RU
-thg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
-BhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBG
-YXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMg
-RmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0
-MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoT
-C1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0
-aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0
-aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
-AoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mXx3Oqfz1c
-QJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93O
-vRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjB
-qAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43
-YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCEAQgAFG5Uhpq6
-zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGjYTBf
-MA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAy
-MDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw
-b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7k
-uxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZW
-ohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R
-OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zk
-r8QA1dhYJPz1j+zxx32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01
-QIroTmMatukgalHizqSQ33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ
-1dZPIWU7Sn9Ho/s=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUF
-ADCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5
-LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0w
-KwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
-HhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMC
-VVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMb
-WFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBH
-bG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEB
-AQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwuIR1cRN8h
-XX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9K
-mHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavn
-HTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3
-hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRaJSKNNCyy9mgd
-Em3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvryxS3T
-/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQD
-AgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
-jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1
-cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcN
-AQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
-/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYS
-Nrsf16GBBEYgoyxtqZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT
-5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGP
-urt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd
-50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUF
-ADCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYG
-A1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UE
-CxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYx
-MTE3MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTAT
-BgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
-ZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0
-ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
-AoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQ
-LZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29
-dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk6KHYcWUNo1F7
-7rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/KaAcd
-HJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR3
-2HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7
-W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7OR
-tvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
-uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQ
-aEfZYGDm/Ac9IiAXxPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqd
-E8hhuvU5HIe6uL17In/2/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+
-MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+
-fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEFTCCA36gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBvjELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UE
-ChMfU29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9z
-dG1hc3RlcjEgMB4GA1UEAxMXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJTAjBgkq
-hkiG9w0BCQEWFmhvc3RtYXN0ZXJAc3BpLWluYy5vcmcwHhcNMDMwMTE1MTYyOTE3
-WhcNMDcwMTE0MTYyOTE3WjCBvjELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0luZGlh
-bmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMfU29mdHdhcmUgaW4g
-dGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1hc3RlcjEgMB4GA1UE
-AxMXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJTAjBgkqhkiG9w0BCQEWFmhvc3Rt
-YXN0ZXJAc3BpLWluYy5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAPB6
-rdoiLR3RodtM22LMcfwfqb5OrJNl7fwmvskgF7yP6sdD2bOfDIXhg9852jhY8/kL
-VOFe1ELAL2OyN4RAxk0rliZQVgeTgqvgkOVIBbNwgnjN6mqtuWzFiPL+NXQExq40
-I3whM+4lEiwSHaV+MYxWanMdhc+kImT50LKfkxcdAgMBAAGjggEfMIIBGzAdBgNV
-HQ4EFgQUB63oQR1/vda/G4F6P4xLiN4E0vowgesGA1UdIwSB4zCB4IAUB63oQR1/
-vda/G4F6P4xLiN4E0vqhgcSkgcEwgb4xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdJ
-bmRpYW5hMRUwEwYDVQQHEwxJbmRpYW5hcG9saXMxKDAmBgNVBAoTH1NvZnR3YXJl
-IGluIHRoZSBQdWJsaWMgSW50ZXJlc3QxEzARBgNVBAsTCmhvc3RtYXN0ZXIxIDAe
-BgNVBAMTF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MSUwIwYJKoZIhvcNAQkBFhZo
-b3N0bWFzdGVyQHNwaS1pbmMub3JnggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcN
-AQEEBQADgYEAm/Abn8c2y1nO3fgpAIslxvi9iNBZDhQtJ0VQZY6wgSfANyDOR4DW
-iexO/AlorB49KnkFS7TjCAoLOZhcg5FaNiKnlstMI5krQmau1Qnb/vGSNsE/UGms
-1ts+QYPUs0KmGEAFUri2XzLy+aQo9Kw74VBvqnxvaaMeY5yMcKNOieY=
+MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk
+MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0
+YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg
+Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT
+AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp
+Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN
+BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9
+m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih
+FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/
+TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F
+EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco
+kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu
+HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF
+vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo
+19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC
+L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW
+bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX
+JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw
+FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
+BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc
+K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf
+ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik
+Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB
+sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e
+3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR
+ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip
+mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH
+b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf
+rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms
+hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y
+zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6
+MBr1mmz0DlP5OlvRHA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc
+UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
+c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg
+MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8
+dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz
+MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy
+dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD
+VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg
+xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu
+xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7
+XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k
+heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J
+YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C
+urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1
+JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51
+b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV
+9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7
+kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh
+fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
+B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA
+aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS
+RGQDJereW26fyfJOrN3H
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc
+UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
+c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS
+S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
+SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3
+WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv
+bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU
+UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw
+bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe
+LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef
+J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh
+R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ
+Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX
+JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p
+zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S
+Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
+KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq
+ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
+Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz
+gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH
+uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS
+y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/
+MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow
+PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp
+Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
+AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR
+IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q
+gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy
+yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts
+F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2
+jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx
+ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC
+VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK
+YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH
+EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN
+Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud
+DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE
+MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK
+UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
+TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf
+qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK
+ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE
+JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7
+hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1
+EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm
+nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX
+udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz
+ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe
+LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl
+pYYsfPQS
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
+yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
+ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
+U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
+ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
+aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
+MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
+ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
+biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
+U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
+aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
+nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
+t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
+SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
+BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
+rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
+NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
+BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
+BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
+aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
+MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
+p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
+5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
+WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
+4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
+hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD
+ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v
+dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0
+MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww
+KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G
+A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi
+MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13
+5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE
+SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O
+JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu
+ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE
+AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB
+AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB
+CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw
+b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo
+7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/
+0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7
+nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
+x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ
+33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
+gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
+MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
+UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
+NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
+dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
+dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
+38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
+KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
+DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
+qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
+JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
+PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
+BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
+jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
+eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
+ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
+vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
+qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
+IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
+i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
+O+7ETPTsJ3xCwnR8gooJybQDJbw=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
+qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
+Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
+MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
+BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
+NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
+LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
+A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
+W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
+3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
+6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
+Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
+NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
+r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
+DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
+YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
+xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
+/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
+LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
+jVaMaA==
 -----END CERTIFICATE-----
 -----BEGIN CERTIFICATE-----
 MIIIDjCCBfagAwIBAgIJAOiOtsn4KhQoMA0GCSqGSIb3DQEBBQUAMIG8MQswCQYD
@@ -3833,7 +3274,6 @@ IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl
 xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
 Cm26OWMohpLzGITY+9HPBVZkVw==
 -----END CERTIFICATE-----
-
 -----BEGIN CERTIFICATE-----
 MIIGJDCCBY2gAwIBAgIEQoaroDANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
 VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml
index e4ac455e7cb659ecb95274e2390e271ebb9315bf..89e5949fbe93ba3f8b6644d79b9c0e9804c4bccc 100644
--- a/indra/newview/app_settings/cmd_line.xml
+++ b/indra/newview/app_settings/cmd_line.xml
@@ -261,6 +261,24 @@
       <!-- Special case. Mapped to settings procedurally. -->
     </map>
 
+    <key>sessionsettings</key>
+    <map>
+      <key>desc</key>
+      <string>Specify the filename of a configuration file that contains temporary per-session configuration overrides.</string>
+      <key>count</key>
+      <integer>1</integer>
+      <!-- Special case. Mapped to settings procedurally. -->
+    </map>
+
+    <key>usersessionsettings</key>
+    <map>
+      <key>desc</key>
+      <string>Specify the filename of a configuration file that contains temporary per-session configuration user overrides.</string>
+      <key>count</key>
+      <integer>1</integer>
+      <!-- Special case. Mapped to settings procedurally. -->
+    </map>
+    
     <key>login</key>
     <map>
       <key>desc</key>
diff --git a/indra/newview/app_settings/high_graphics.xml b/indra/newview/app_settings/high_graphics.xml
index 4da2b0fd0014a31759bc1c819df9e99783ce55c1..4e137d971a6635f6ceafab8437569850bee3e1ef 100644
--- a/indra/newview/app_settings/high_graphics.xml
+++ b/indra/newview/app_settings/high_graphics.xml
@@ -4,6 +4,8 @@
 	<RenderAvatarCloth value="FALSE"/>
 	<!--Default for now-->
 	<RenderAvatarLODFactor value="1.0"/>
+  <!--Default for now-->
+  <RenderAvatarPhysicsLODFactor value="0.9"/>
 	<!--NO SHADERS-->
 	<RenderAvatarVP value="TRUE"/>
 	<!--Short Range-->
diff --git a/indra/newview/app_settings/ignorable_dialogs.xml b/indra/newview/app_settings/ignorable_dialogs.xml
index 89fd4e59358ceb9aa21b6d5f4a6f605d4f5248a3..17d3d3c9c5ba339193cc300a27e8d30fa19c7d22 100644
--- a/indra/newview/app_settings/ignorable_dialogs.xml
+++ b/indra/newview/app_settings/ignorable_dialogs.xml
@@ -122,7 +122,17 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
-
+    <key>FirstSpeak</key>
+    <map>
+      <key>Comment</key>
+      <string>Shows hint for Speak button</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>FirstSit</key>
     <map>
       <key>Comment</key>
diff --git a/indra/newview/app_settings/low_graphics.xml b/indra/newview/app_settings/low_graphics.xml
index 136087f69b81d0a2817de0d3d8d8cbb3618382fa..79463b475c4ca010a5ed25499d1cc8a0586aea3d 100644
--- a/indra/newview/app_settings/low_graphics.xml
+++ b/indra/newview/app_settings/low_graphics.xml
@@ -5,6 +5,8 @@
 	<!--Default for now-->
 	<RenderAvatarLODFactor value="0.5"/>
   <!--Default for now-->
+  <RenderAvatarPhysicsLODFactor value="0.0"/>
+  <!--Default for now-->
   <RenderAvatarMaxVisible value="3"/>
 	<!--NO SHADERS-->
 	<RenderAvatarVP value="FALSE"/>
diff --git a/indra/newview/app_settings/mid_graphics.xml b/indra/newview/app_settings/mid_graphics.xml
index c150a87cdf92d97f4a22331eb9e70c3ad62336db..ab1e2a2e1ca2fecba46d70ca766eaa26c787c152 100644
--- a/indra/newview/app_settings/mid_graphics.xml
+++ b/indra/newview/app_settings/mid_graphics.xml
@@ -4,6 +4,8 @@
 	<RenderAvatarCloth value="FALSE"/>
 	<!--Default for now-->
 	<RenderAvatarLODFactor value="0.5"/>
+  <!--Default for now-->
+  <RenderAvatarPhysicsLODFactor value="0.75"/>
 	<!--NO SHADERS-->
 	<RenderAvatarVP value="TRUE"/>
 	<!--Short Range-->
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index a0105240911876bf85482b7f7389a1866e3c45be..4e666952ce90fd0d30c62dab8e95b1a7e889033a 100644
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -617,7 +617,7 @@
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>http://interest.secondlife.com/viewer/avatar</string>
+      <string></string>
     </map>
     <key>AvatarBakedTextureUploadTimeout</key>
     <map>
@@ -641,7 +641,17 @@
       <key>Value</key>
       <integer>10</integer>
     </map>
-
+    <key>AvatarPhysics</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable avatar physics.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>AvatarSex</key>
     <map>
       <key>Comment</key>
@@ -653,6 +663,7 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+
     <key>BackgroundYieldTime</key>
     <map>
       <key>Comment</key>
@@ -2566,7 +2577,7 @@
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>http://www.secondlife.com</string>
+      <string></string>
     </map>
   <key>DisableCameraConstraints</key>
     <map>
@@ -2601,10 +2612,10 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
-    <key>DisableRendering</key>
+    <key>HeadlessClient</key>
     <map>
       <key>Comment</key>
-      <string>Disable GL rendering and GUI (load testing)</string>
+      <string>Run in headless mode by disabling GL rendering, keyboard, etc</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -2810,6 +2821,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>DoubleClickShowWorldMap</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable double-click to show world map from mini map</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
     <key>DragAndDropToolTipDelay</key>
     <map>
       <key>Comment</key>
@@ -3187,7 +3209,18 @@
     <key>FirstRunThisInstall</key>
     <map>
       <key>Comment</key>
-      <string>Specifies that you have not run the viewer since you installed the latest update</string>
+      <string>Specifies that you have not run the viewer since you performed a clean install</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+  <key>FirstLoginThisInstall</key>
+  <map>
+    <key>Comment</key>
+    <string>Specifies that you have not logged in with the viewer since you performed a clean install</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -3888,6 +3921,17 @@
       <key>Value</key>
       <string>https://my.secondlife.com/[AGENT_NAME]</string>
     </map>
+	<key>WebProfileNonProductionURL</key>
+	<map>
+		<key>Comment</key>
+		<string>URL for Web Profiles on Non-Production grids</string>
+		<key>Persist</key>
+		<integer>0</integer>
+		<key>Type</key>
+		<string>String</string>
+		<key>Value</key>
+		<string>https://my-demo.secondlife.com/[AGENT_NAME]</string>
+	</map>
     <key>HighResSnapshot</key>
     <map>
       <key>Comment</key>
@@ -6767,6 +6811,17 @@
       <key>Value</key>
       <integer>12</integer>
     </map>
+    <key>RenderAvatarPhysicsLODFactor</key>
+    <map>
+      <key>Comment</key>
+      <string>Controls level of detail of avatar physics (such as breast physics).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <integer>1.0</integer>
+    </map>
     <key>RenderAvatarVP</key>
     <map>
       <key>Comment</key>
@@ -9491,7 +9546,7 @@
     <key>ShowNetStats</key>
     <map>
       <key>Comment</key>
-      <string>Show the Search Bar in the Status Overlay</string>
+      <string>Show the Status Indicators for the Viewer and Network Usage in the Status Overlay</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -11484,7 +11539,7 @@
       <key>Type</key>
       <string>F32</string>
       <key>Value</key>
-      <integer>3.0</integer>
+      <integer>3</integer>
     </map>
     <key>InterpolationPhaseOut</key>
     <map>
@@ -11495,7 +11550,7 @@
       <key>Type</key>
       <string>F32</string>
       <key>Value</key>
-      <integer>1.0</integer>
+      <integer>1</integer>
     </map>
     <key>VerboseLogs</key>
     <map>
@@ -11860,6 +11915,33 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>WaterFogColor</key>
+    <map>
+      <key>Comment</key>
+      <string>Water fog color</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Color4</string>
+      <key>Value</key>
+      <array>
+        <real>0.0863</real>
+        <real>0.168</real>
+        <real>0.212</real>
+        <real>0</real>
+      </array>
+    </map>
+    <key>WaterFogDensity</key>
+    <map>
+      <key>Comment</key>
+      <string>Water fog density</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>16.0</real>
+    </map>
     <key>WaterGLFogDensityScale</key>
     <map>
       <key>Comment</key>
@@ -12069,6 +12151,17 @@
       <key>Value</key>
       <real>0.40000000596</real>
     </map>
+	<key>moapbeacon</key>
+	<map>
+		<key>Comment</key>
+		<string>Beacon / Highlight media on a prim sources</string>
+		<key>Persist</key>
+		<integer>1</integer>
+		<key>Type</key>
+		<string>Boolean</string>
+		<key>Value</key>
+		<integer>0</integer>
+	</map>
     <key>particlesbeacon</key>
     <map>
       <key>Comment</key>
@@ -12344,38 +12437,280 @@
       <key>Value</key>
       <real>1200.0</real>
     </map>
-    <key>AvatarPickerHintTimeout</key>
+    <key>SidePanelHintTimeout</key>
     <map>
       <key>Comment</key>
-      <string>Number of seconds to wait before telling resident about avatar picker.</string>
+      <string>Number of seconds to wait before telling resident about side panel.</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
       <string>F32</string>
       <key>Value</key>
-      <real>600.0</real>
+      <real>300.0</real>
     </map>
-    <key>SidePanelHintTimeout</key>
+    <key>GroupMembersSortOrder</key>
     <map>
       <key>Comment</key>
-      <string>Number of seconds to wait before telling resident about side panel.</string>
+      <string>The order by which group members will be sorted (name|donated|online)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>name</string>
+    </map>
+    <key>SessionSettingsFile</key>
+    <map>
+      <key>Comment</key>
+      <string>Settings that are a applied per session (not saved).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string></string>
+    </map>
+    <key>UserSessionSettingsFile</key>
+    <map>
+      <key>Comment</key>
+      <string>User settings that are a applied per session (not saved).</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string />
+    </map>
+    <key>OpenSidePanelsInFloaters</key>
+    <map>
+      <key>Comment</key>
+      <string>If true, will always open side panel contents in a floater.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>AvatarInspectorTooltipDelay</key>
+    <map>
+      <key>Comment</key>
+      <string>Seconds before displaying avatar inspector tooltip</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
       <string>F32</string>
       <key>Value</key>
-      <real>300.0</real>
+      <real>0.35</real>
     </map>
-    <key>GroupMembersSortOrder</key>
+    <key>ObjectInspectorTooltipDelay</key>
     <map>
       <key>Comment</key>
-      <string>The order by which group members will be sorted (name|donated|online)</string>
+      <string>Seconds before displaying object inspector tooltip</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.35</real>
+    </map>
+    <key>SLURLTeleportDirectly</key>
+    <map>
+      <key>Comment</key>
+      <string>Clicking on a slurl will teleport you directly instead of opening places panel</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>EnableClassifieds</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable creation of new classified ads from web link</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>EnableGroupInfo</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable viewing and editing of group info from web link</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>EnablePicks</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable editing of picks from web link</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>EnableWorldMap</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable opening world map from web link</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+  <key>EnableAvatarPay</key>
+  <map>
+    <key>Comment</key>
+    <string>Enable paying other avatars from web link</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>1</integer>
+  </map>
+  <key>EnableVoiceCall</key>
+  <map>
+    <key>Comment</key>
+    <string>Enable voice calls from web link</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>1</integer>
+  </map>
+  <key>EnableAvatarShare</key>
+  <map>
+    <key>Comment</key>
+    <string>Enable sharing from web link</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>1</integer>
+  </map>
+  <key>EnableInventory</key>
+  <map>
+    <key>Comment</key>
+    <string>Enable opening inventory from web link</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>1</integer>
+  </map>
+  <key>EnableSearch</key>
+  <map>
+    <key>Comment</key>
+    <string>Enable opening search from web link</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>1</integer>
+  </map>
+  <key>EnableAppearance</key>
+  <map>
+    <key>Comment</key>
+    <string>Enable opening appearance from web link</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>1</integer>
+  </map>
+    <key>SearchFromAddressBar</key>
+    <map>
+      <key>Comment</key>
+      <string>Can enter search queries into navigation address bar</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>LogInventoryDecline</key>
+    <map>
+      <key>Comment</key>
+      <string>Log in system chat whenever an inventory offer is declined</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>UseHTTPInventory</key>
+    <map>
+      <key>Comment</key>
+      <string>Allow use of http inventory transfers instead of UDP</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>ClickToWalk</key>
+    <map>
+      <key>Comment</key>
+      <string>Click in world to walk to location</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>ShowOfferedInventory</key>
+    <map>
+      <key>Comment</key>
+      <string>Show inventory window with last inventory offer selected when receiving inventory from other users.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>GenericErrorPageURL</key>
+    <map>
+      <key>Comment</key>
+      <string>URL to set as a property on LLMediaControl to navigate to if the a page completes with a 400-499 HTTP status code</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
       <string>String</string>
       <key>Value</key>
-      <string>name</string>
+      <string>http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/404.html</string>
+    </map>
+    <key>DestinationsAndAvatarsVisibility</key>
+    <map>
+      <key>Comment</key>
+      <string>Whether destination panel or avatar picker are open (0=destination guide, 1=avatar picker, default=nothing)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>0</integer>
     </map>
 </map>
 </llsd>
diff --git a/indra/newview/app_settings/settings_files.xml b/indra/newview/app_settings/settings_files.xml
index aa5b301959c917f14d4cdc407185f02720b2f920..079a54f95780d88d88b78f3287233c8721592f3d 100644
--- a/indra/newview/app_settings/settings_files.xml
+++ b/indra/newview/app_settings/settings_files.xml
@@ -1,148 +1,64 @@
-<llsd>
-  <map>
-    <key>Locations</key>
-    <map>
-      <!--
-      The Locations LLSD block specifies the usage pattern of 
-      the settings file types
-      Each location is represented by a LLSD containing the following values:
-      PathIndex = hard coded path indicies.
-      Files = map of files to load
-        Each file can have:
-        Requirement = level of necessity for loading. 
-          0 ( or Req. no key) = do not load
-          1 = required, fail if not found
-        NameFromSetting = Use the given setting to specify the name. Not valid for
-                          "Default"
-      -->
-      <key>Comment</key>
-      <string>List location from which to load files, and the rules about loading those files.</string>
-      <key>Persist</key>
-      <integer>0</integer>
-      <key>Type</key>
-      <string>LLSD</string>
-      <key>Value</key>
-      <map>
-        <key>Default</key>
-        <map>
-          <key>PathIndex</key>
-          <integer>2</integer>
-          <key>Files</key>
-          <map>
-            <key>Global</key>
-            <map>
-              <key>Name</key>
-              <string>settings.xml</string>
-              <key>Requirement</key>
-              <integer>1</integer>
-            </map>
-            <key>PerAccount</key>
-            <map>
-              <key>Name</key>
-              <string>settings_per_account.xml</string>
-              <key>Requirement</key>
-              <integer>1</integer>
-            </map>
-            <key>CrashSettings</key>
-            <map>
-              <key>Name</key>
-              <string>settings_crash_behavior.xml</string>
-              <key>Requirement</key>
-              <integer>1</integer>
-            </map>
-            <key>Warnings</key>
-            <map>
-              <key>Name</key>
-              <string>ignorable_dialogs.xml</string>
-              <key>Requirement</key>
-              <integer>1</integer>
-            </map>
-          </map>
-        </map>
-        <key>User</key>
-        <map>
-          <key>PathIndex</key>
-          <integer>1</integer>
-          <key>Files</key>
-          <map>
-            <key>Global</key>
-            <map>
-              <key>Name</key>
-              <string>settings.xml</string>
-              <key>NameFromSetting</key>
-              <string>ClientSettingsFile</string>
-            </map>
-            <key>CrashSettings</key>
-            <map>
-              <key>Name</key>
-              <string>settings_crash_behavior.xml</string>
-            </map>
-            <key>Warnings</key>
-            <map>
-              <key>Name</key>
-              <string>ignorable_dialogs.xml</string>
-              <key>NameFromSetting</key>
-              <string>WarningSettingsFile</string>
-            </map>
-          </map>
-        </map>
-        <key>Account</key>
-        <map>
-          <key>PathIndex</key>
-          <integer>3</integer>
-          <key>Files</key>
-          <map>
-            <key>PerAccount</key>
-            <map>
-              <key>Name</key>
-              <string>settings_per_account.xml</string>
-              <key>NameFromSetting</key>
-              <string>PerAccountSettingsFile</string>
-            </map>
-          </map>
-        </map>
-        <key>DefaultSkin</key>
-        <map>
-          <key>PathIndex</key>
-          <integer>17</integer>
-          <key>Files</key>
-          <map>
-            <key>Skinning</key>
-            <map>
-              <key>Name</key>
-              <string>colors.xml</string>
-            </map>
-          </map>
-        </map>
-        <key>CurrentSkin</key>
-        <map>
-          <key>PathIndex</key>
-          <integer>10</integer>
-          <key>Files</key>
-          <map>
-            <key>Skinning</key>
-            <map>
-              <key>Name</key>
-              <string>colors.xml</string>
-            </map>
-          </map>
-        </map>
-        <key>UserSkin</key>
-        <map>
-          <key>PathIndex</key>
-          <integer>14</integer>
-          <key>Files</key>
-          <map>
-            <key>Skinning</key>
-            <map>
-              <key>Name</key>
-              <string>colors.xml</string>
-              <key>NameFromSetting</key>
-              <string>SkinningSettingsFile</string>
-            </map>
-          </map>
-        </map>
-      </map>
-    </map>
-  </map>
-</llsd>
+<settings_files>
+  <group name="Default"
+         path_index="2">
+    <file name="Global"
+          file_name="settings.xml"
+          required="true"/>
+    <file name="PerAccount"
+          file_name="settings_per_account.xml"
+          required="true"/>
+    <file name="CrashSettings"
+          file_name="settings_crash_behavior.xml"
+          required="true"/>
+    <file name="Warnings"
+          file_name="ignorable_dialogs.xml"
+          required="true"/>
+  </group>
+  <group name="User"
+         path_index="1">
+    <file name="Global"
+          file_name="settings.xml"
+          file_name_setting="ClientSettingsFile"/>
+    <file name="CrashSettings"
+          file_name="settings_crash_behavior"/>
+    <file name="Warnings"
+          file_name="ignorable_dialogs.xml"
+          file_name_setting="WarningSettingsFile"/>
+  </group>
+  <group name="Account"
+         path_index="3">
+    <file name="PerAccount"
+          file_name="settings_per_account.xml"
+          file_name_setting="PerAccountSettingsFile"/>
+  </group>
+  <group name="Session"
+         path_index="2">
+      <file name="Global"
+            file_name="session.xml" 
+            file_name_setting="SessionSettingsFile"
+            persistent="false"/>
+  </group>
+  <group name="UserSession"
+         path_index="1">
+    <file name="Global"
+          file_name="session.xml" 
+          file_name_setting="UserSessionSettingsFile"
+          persistent="false"/>
+  </group>
+  <group name="DefaultSkin"
+         path_index="17">
+    <file name="Skinning"
+          file_name="colors.xml"/>
+  </group>
+  <group name="CurrentSkin"
+         path_index="10">
+    <file name="Skinning"
+          file_name="colors.xml"/>
+  </group>
+  <group name="UserSkin"
+         path_index="14">
+    <file name="Skinning"
+          file_name="colors.xml"
+          file_name_setting="SkinningSettingsFile"/>
+  </group>
+</settings_files>
\ No newline at end of file
diff --git a/indra/newview/app_settings/settings_minimal.xml b/indra/newview/app_settings/settings_minimal.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bc97ec00e9bad376dc5a40e889a8e28c8f81a56c
--- /dev/null
+++ b/indra/newview/app_settings/settings_minimal.xml
@@ -0,0 +1,439 @@
+<llsd>
+  <map>
+    <key>ChannelBottomPanelMargin</key>
+        <map>
+        <key>Comment</key>
+            <string>Space from a lower toast to the Bottom Tray</string>
+        <key>Type</key>
+            <string>S32</string>
+        <key>Value</key>
+            <integer>2</integer>
+        </map>
+    <key>ClickActionBuyEnabled</key>
+        <map>
+        <key>Comment</key>
+            <string>Enable click to buy actions in tool pie menu</string>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>0</integer>
+        </map>
+    <key>ClickActionPayEnabled</key>
+        <map>
+        <key>Comment</key>
+            <string>Enable click to pay actions in tool pie menu</string>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>0</integer>
+        </map>
+    <key>EnableGrab</key>
+        <map>
+        <key>Comment</key>
+            <string>Use Ctrl+mouse to grab and manipulate objects</string>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>0</integer>
+        </map>
+    <key>EnableMouselook</key>
+        <map>
+        <key>Comment</key>
+            <string>Allow first person perspective and mouse control of camera</string>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>0</integer>
+        </map>
+    <key>EnableVoiceChat</key>
+        <map>
+        <key>Comment</key>
+            <string>Enable talking to other residents with a microphone</string>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>0</integer>
+        </map>
+    <key>HelpURLFormat</key>
+        <map>
+        <key>Comment</key>
+            <string>URL pattern for help page; arguments will be encoded; see llviewerhelp.cpp:buildHelpURL for arguments</string>
+        <key>Type</key>
+            <string>String</string>
+        <key>Value</key>
+            <string>http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/howto/index.html?topic=[TOPIC]</string>
+        </map>
+    <key>PreferredMaturity</key>
+        <map>
+        <key>Comment</key>
+            <string>Setting for the user&apos;s preferred maturity level (consts in indra_constants.h)</string>
+        <key>Type</key>
+            <string>U32</string>
+        <key>Value</key>
+            <integer>21</integer>
+        </map>
+    <key>RenderTrackerBeacon</key>
+        <map>
+        <key>Comment</key>
+            <string>Display tracking arrow and beacon to target avatar, teleport destination</string>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>0</integer>
+        </map>
+    <key>ShowScriptErrors</key>
+        <map>
+        <key>Comment</key>
+            <string>Show script errors</string>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>0</integer>
+        </map>
+    <key>ShowScriptErrorsLocation</key>
+        <map>
+        <key>Comment</key>
+            <string>Show script error in chat or window</string>
+        <key>Type</key>
+            <string>S32</string>
+        <key>Value</key>
+            <integer>0</integer>
+        </map>
+    <key>SkinCurrent</key>
+        <map>
+        <key>Comment</key>
+            <string>The currently selected skin.</string>
+        <key>Type</key>
+            <string>String</string>
+        <key>Value</key>
+            <string>minimal</string>
+        </map>
+    <key>UseExternalBrowser</key>
+        <map>
+        <key>Comment</key>
+            <string>Use default browser when opening web pages instead of in-world browser.</string>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>0</integer>
+        </map>
+    <key>VoiceCallsRejectAll</key>
+        <map>
+        <key>Comment</key>
+            <string>Silently reject all incoming voice calls.</string>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>1</integer>
+        </map>
+    <key>VoiceDisableMic</key>
+        <map>
+        <key>Comment</key>
+            <string>Completely disable the ability to open the mic.</string>
+        <key>Type</key>
+            <string>Boolean</string>
+        <key>Value</key>
+            <integer>1</integer>
+        </map>
+      <key>ScriptsCanShowUI</key>
+      <map>
+        <key>Comment</key>
+        <string>Allow LSL calls (such as LLMapDestination) to spawn viewer UI</string>
+        <key>Persist</key>
+        <integer>1</integer>
+        <key>Type</key>
+        <string>Boolean</string>
+        <key>Value</key>
+        <integer>0</integer>
+      </map>
+      <key>ChatFontSize</key>
+      <map>
+        <key>Comment</key>
+        <string>Size of chat text in chat console (0 = small, 1 = big, 2 = extra large)</string>
+        <key>Persist</key>
+        <integer>1</integer>
+        <key>Type</key>
+        <string>S32</string>
+        <key>Value</key>
+        <integer>1</integer>
+      </map>
+      <key>AvatarPickerHintTimeout</key>
+      <map>
+        <key>Comment</key>
+        <string>Number of seconds to wait before telling resident about avatar picker.</string>
+        <key>Persist</key>
+        <integer>1</integer>
+        <key>Type</key>
+        <string>F32</string>
+        <key>Value</key>
+        <real>0.0</real>
+      </map>
+    <key>RenderShowGroupTitleAll</key>
+    <map>
+      <key>Comment</key>
+      <string>Show group titles in name labels</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>OpenSidePanelsInFloaters</key>
+    <map>
+      <key>Comment</key>
+      <string>If true, will always open side panel contents in a floater.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>AvatarInspectorTooltipDelay</key>
+    <map>
+      <key>Comment</key>
+      <string>Seconds before displaying avatar inspector tooltip</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>0.1</real>
+    </map>
+    <key>AFKTimeout</key>
+    <map>
+      <key>Comment</key>
+      <string>
+        Time before automatically setting AFK (away from keyboard) mode (seconds, 0=never).
+        Valid values are: 0, 120, 300, 600, 1800
+      </string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <real>0</real>
+    </map>
+    <key>SLURLTeleportDirectly</key>
+    <map>
+      <key>Comment</key>
+      <string>Clicking on a slurl will teleport you directly instead of opening places panel</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>EnableClassifieds</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable creation of new classified ads</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>EnableGroupInfo</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable viewing and editing of group info.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>EnablePicks</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable editing of picks</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>EnableWorldMap</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable opening world map from web link</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>EnableAvatarPay</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable paying other avatars from web link</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>EnableVoiceCall</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable voice calls from web link</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>EnableAvatarShare</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable sharing from web link</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>EnableInventory</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable opening inventory from web link</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>EnableSearch</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable opening search from web link</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>EnableAppearance</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable opening appearance from web link</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>DoubleClickShowWorldMap</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable double-click to show world map from mini map</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>EnableGroupChatPopups</key>
+    <map>
+      <key>Comment</key>
+      <string>Enable Incoming Group Chat Popups</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>SearchFromAddressBar</key>
+    <map>
+      <key>Comment</key>
+      <string>Can enter search queries into navigation address bar</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>DestinationGuideURL</key>
+    <map>
+      <key>Comment</key>
+      <string>Destination guide contents</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/guide.html</string>
+    </map>
+    <key>AvatarPickerURL</key>
+    <map>
+      <key>Comment</key>
+      <string>Avatar picker contents</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>String</string>
+      <key>Value</key>
+      <string>http://common-flash-secondlife-com.s3.amazonaws.com/viewer/v2.6/agni/avatars.html</string>
+    </map>
+    <key>LogInventoryDecline</key>
+    <map>
+      <key>Comment</key>
+      <string>Log in system chat whenever an inventory offer is declined</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>UseHTTPInventory</key>
+    <map>
+      <key>Comment</key>
+      <string>Allow use of http inventory transfers instead of UDP</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+    <key>ClickToWalk</key>
+    <map>
+      <key>Comment</key>
+      <string>Click in world to walk to location</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>1</integer>
+    </map>
+    <key>ShowOfferedInventory</key>
+    <map>
+      <key>Comment</key>
+      <string>Show inventory window with last inventory offer selected when receiving inventory from other users.</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>Boolean</string>
+      <key>Value</key>
+      <integer>0</integer>
+    </map>
+  </map>
+</llsd>
diff --git a/indra/newview/app_settings/ultra_graphics.xml b/indra/newview/app_settings/ultra_graphics.xml
index e7dce3b9896d749a5c2100fbc798e92429170a3a..e1f3ca5769995e5b7327c54b964b317a4a994f6c 100644
--- a/indra/newview/app_settings/ultra_graphics.xml
+++ b/indra/newview/app_settings/ultra_graphics.xml
@@ -4,6 +4,8 @@
 	<RenderAvatarCloth value="TRUE"/>
 	<!--Default for now-->
 	<RenderAvatarLODFactor value="1.0"/>
+  <!--Default for now-->
+  <RenderAvatarPhysicsLODFactor value="1.0"/>
 	<!--NO SHADERS-->
 	<RenderAvatarVP value="TRUE"/>
 	<!--Short Range-->
diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
index a9b4ff02c5a872280149aed393dee873a4db3c11..ce15c4b8f7e98cf6ad20ceaa6a7784da48274520 100644
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -612,7 +612,7 @@
      id="36"
      group="0"
      name="Shoulders"
-   label="Shoulders"
+     label="Shoulders"
      wearable="shape"
      edit_group="shape_torso"
      edit_group_order="4"
@@ -4040,7 +4040,6 @@
           scale="0.0 0.0 0.01"
           pos="0 0 -0.01"/>
       </param_morph>
-
     </param>
 
     <param
@@ -4061,7 +4060,7 @@
      camera_distance=".8">
       <param_morph />
     </param>
-
+    
     <param
      id="628"
      group="1"
@@ -4130,7 +4129,7 @@
      camera_distance=".8">
       <param_morph />
     </param>
-
+    
     <param
      id="685"
      group="0"
@@ -4327,9 +4326,67 @@
       <param_morph />
     </param>
 
+    <!--
+            #############
+            # physics morphs (not user controlled)
+            #############
+            -->
+    <param
+     id="1200"
+     group="1"
+     sex="female"
+     name="Breast_Physics_UpDown_Driven"
+     wearable="shape"
+     edit_group="driven"
+     value_default="0"
+     value_min="-3"
+     value_max="3">
+      <param_morph />
+    </param>
+
+    <param
+     id="1201"
+     group="1"
+     sex="female"
+     name="Breast_Physics_InOut_Driven"
+     wearable="shape"
+     edit_group="driven"
+     value_default="0"
+     value_min="-1.25"
+     value_max="1.25">
+      <param_morph />
+    </param>
+
+    <param
+     id="1204"
+     group="1"
+     name="Belly_Physics_Torso_UpDown_Driven"
+     wearable="physics"
+     cross_wearable="true"
+     edit_group="driven"
+     value_default="0"
+     value_min="-1"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="1207"
+     group="1"
+     name="Breast_Physics_LeftRight_Driven"
+     wearable="physics"
+     cross_wearable="true"
+     edit_group="driven"
+     value_default="0"
+     value_min="-2"
+     value_max="2">
+      <param_morph />
+    </param>
+
     <!--
          #end morph targets
           -->
+
   </mesh>
 
   <mesh
@@ -4390,6 +4447,7 @@
       <param_morph />
     </param>
 
+
     <param
      id="151"
      group="1"
@@ -4828,9 +4886,54 @@
       <param_morph />
     </param>
 
+    <!--
+            #############
+            # physics morphs (not user controlled)
+            #############
+            -->
+    <param
+     id="1202"
+     group="1"
+     name="Belly_Physics_Legs_UpDown_Driven"
+     wearable="physics"
+     cross_wearable="true"
+     edit_group="driven"
+     value_min="-1"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    
+    <param
+     id="1205"
+     group="1"
+     name="Butt_Physics_UpDown_Driven"
+     wearable="physics"
+     cross_wearable="true"
+     edit_group="driven"
+     value_default="0"
+     value_min="-1"
+     value_max="1">
+      <param_morph />
+    </param>
+
+    <param
+     id="1206"
+     group="1"
+     name="Butt_Physics_LeftRight_Driven"
+     wearable="physics"
+     cross_wearable="true"
+     edit_group="driven"
+     value_default="0"
+     value_min="-1"
+     value_max="1">
+      <param_morph />
+    </param>
+
     <!--
             #end morph targets
             -->
+
   </mesh>
 
   <mesh
@@ -5199,6 +5302,25 @@
      value_max="1"> 
       <param_morph />
     </param>
+
+    <!--
+            #############
+            # physics morphs (not user controlled)
+            #############
+            -->
+    <param
+     id="1203"
+     group="1"
+     name="Belly_Physics_Skirt_UpDown_Driven"
+     wearable="physics"
+     cross_wearable="true"
+     edit_group="driven"
+     value_default="0"
+     value_min="-1"
+     value_max="1">
+      <param_morph />
+    </param>
+
   </mesh>
 
   <mesh
@@ -9074,12 +9196,13 @@ render_pass="bump">
 
   <!-- =========================================================== -->
   <driver_parameters>
+
     <param
      id="828"
      group="0"
      name="Loose Upper Clothing"
      label="Shirt Fit"
-   show_simple="true"
+	 show_simple="true"
      wearable="shirt"
      edit_group="shirt"
      edit_group_order="4"
@@ -11631,6 +11754,523 @@ render_pass="bump">
       </param_driver>
     </param>
 
+  <!-- ==PHYSICS PARAMETERS======================================= -->
+
+   <param
+     id="1100"
+     group="1"
+     sex="female"
+     wearable="physics"
+     name="Breast_Physics_UpDown_Controller"
+     label="Breast Physics UpDown Controller"
+     value_min="-1"
+     value_max="1"
+     value_default="0">
+      <param_driver>
+        <driven
+         id="1200" />
+	</param_driver>
+    </param>
+
+   <param
+     id="1101"
+     group="1"
+     sex="female"
+     wearable="physics"
+     name="Breast_Physics_InOut_Controller"
+     label="Breast Physics InOut Controller"
+     value_min="-1"
+     value_max="1"
+     value_default="0">
+      <param_driver>
+        <driven
+         id="1201" />
+	</param_driver>
+    </param>
+
+    <param
+     id="1102"
+     group="1"
+     wearable="physics"
+     name="Belly_Physics_UpDown_Controller"
+     label="Belly Physics UpDown Controller"
+     value_min="-1"
+     value_max="1"
+     value_default="0">
+      <param_driver>
+        <driven
+         id="1202" />
+        <driven
+         id="1203" />
+        <driven
+         id="1204" />
+      </param_driver>
+    </param>
+
+    <param
+     id="1103"
+     group="1"
+     wearable="shape"
+     name="Butt_Physics_UpDown_Controller"
+     label="Butt Physics UpDown Controller"
+     value_min="-1"
+     value_max="1"
+     value_default="0">
+      <param_driver>
+        <driven
+         id="1205" />
+      </param_driver>
+    </param>
+
+    <param
+     id="1104"
+     group="1"
+     wearable="shape"
+     name="Butt_Physics_LeftRight_Controller"
+     label="Butt Physics LeftRight Controller"
+     value_min="-1"
+     value_max="1"
+     value_default="0">
+      <param_driver>
+        <driven
+         id="1206" />
+      </param_driver>
+    </param>
+
+    <param
+     id="1105"
+     group="1"
+     wearable="shape"
+     name="Breast_Physics_LeftRight_Controller"
+     label="Breast Physics LeftRight Controller"
+     value_min="-1"
+     value_max="1"
+     value_default="0">
+      <param_driver>
+        <driven
+         id="1207" />
+      </param_driver>
+    </param>
+
+    <param
+     id="10000"
+     group="0"
+     sex="female"
+     name="Breast_Physics_Mass"
+     label="Breast Physics Mass"
+     wearable="physics"
+     edit_group="physics_advanced"
+     value_default=".1"
+     value_min=".1"
+     value_max="1">
+	 <param_driver />
+    </param>
+    <param
+     id="10001"
+     group="0"
+     sex="female"
+     name="Breast_Physics_Gravity"
+     label="Breast Physics Gravity"
+     wearable="physics"
+     edit_group="physics_advanced"
+     value_default="0"
+     value_min="0"
+     value_max="30">
+	 <param_driver />
+    </param>
+
+   <param
+     id="10002"
+     group="0"
+     sex="female"
+     name="Breast_Physics_Drag"
+     label="Breast Physics Drag"
+     wearable="physics"
+     edit_group="physics_advanced"
+     value_default="1"
+     value_min="0"
+     value_max="10">
+	 <param_driver />
+    </param>
+
+   <param
+     id="10003"
+     group="0"
+     sex="female"
+     name="Breast_Physics_UpDown_Max_Effect"
+     label="Breast Physics UpDown Max Effect"
+     wearable="physics"
+     edit_group="physics_breasts_updown"
+     value_default="0"
+     value_min="0"
+     value_max="1">
+	 <param_driver />
+    </param>
+    <param
+     id="10004"
+     group="0"
+     sex="female"
+     name="Breast_Physics_UpDown_Spring"
+     label="Breast Physics UpDown Spring"
+     wearable="physics"
+     edit_group="physics_breasts_updown"
+     value_default="10"
+     value_min="0"
+     value_max="100">
+	 <param_driver />
+    </param>
+    <param
+     id="10005"
+     group="0"
+     sex="female"
+     name="Breast_Physics_UpDown_Gain"
+     label="Breast Physics UpDown Gain"
+     wearable="physics"
+     edit_group="physics_breasts_updown"
+     value_default="10"
+     value_min="1"
+     value_max="100">
+	 <param_driver />
+    </param>
+    <param
+     id="10006"
+     group="0"
+     sex="female"
+     name="Breast_Physics_UpDown_Damping"
+     label="Breast Physics UpDown Damping"
+     wearable="physics"
+     edit_group="physics_breasts_updown"
+     value_default=".2"
+     value_min="0"
+     value_max="1">
+	 <param_driver />
+    </param>
+
+   <param
+     id="10007"
+     group="0"
+     sex="female"
+     name="Breast_Physics_InOut_Max_Effect"
+     label="Breast Physics InOut Max Effect"
+     wearable="physics"
+     edit_group="physics_breasts_inout"
+     value_default="0"
+     value_min="0"
+     value_max="1">
+	 <param_driver />
+    </param>
+    <param
+     id="10008"
+     group="0"
+     sex="female"
+     name="Breast_Physics_InOut_Spring"
+     label="Breast Physics InOut Spring"
+     wearable="physics"
+     edit_group="physics_breasts_inout"
+     value_default="10"
+     value_min="0"
+     value_max="100">
+	 <param_driver />
+    </param>
+    <param
+     id="10009"
+     group="0"
+     sex="female"
+     name="Breast_Physics_InOut_Gain"
+     label="Breast Physics InOut Gain"
+     wearable="physics"
+     edit_group="physics_breasts_inout"
+     value_default="10"
+     value_min="1"
+     value_max="100">
+	 <param_driver />
+    </param>
+    <param
+     id="10010"
+     group="0"
+     sex="female"
+     name="Breast_Physics_InOut_Damping"
+     label="Breast Physics InOut Damping"
+     wearable="physics"
+     edit_group="physics_breasts_inout"
+     value_default=".2"
+     value_min="0"
+     value_max="1">
+	 <param_driver />
+    </param>
+
+    <param
+     id="10011"
+     group="0"
+     name="Belly_Physics_Mass"
+     label="Belly Physics Mass"
+     wearable="physics"
+     edit_group="physics_advanced"
+     value_default=".1"
+     value_min=".1"
+     value_max="1">
+	 <param_driver />
+    </param>
+    <param
+     id="10012"
+     group="0"
+     name="Belly_Physics_Gravity"
+     label="Belly Physics Gravity"
+     wearable="physics"
+     edit_group="physics_advanced"
+     value_default="0"
+     value_min="0"
+     value_max="30">
+	 <param_driver />
+    </param>
+   <param
+     id="10013"
+     group="0"
+     name="Belly_Physics_Drag"
+     label="Belly Physics Drag"
+     wearable="physics"
+     edit_group="physics_advanced"
+     value_default="1"
+     value_min="0"
+     value_max="10">
+	 <param_driver />
+    </param>
+   <param
+     id="10014"
+     group="0"
+     name="Belly_Physics_UpDown_Max_Effect"
+     label="Belly Physics UpDown Max Effect"
+     wearable="physics"
+     edit_group="physics_belly_updown"
+     value_default="0"
+     value_min="0"
+     value_max="1">
+	 <param_driver />
+    </param>
+    <param
+     id="10015"
+     group="0"
+     name="Belly_Physics_UpDown_Spring"
+     label="Belly Physics UpDown Spring"
+     wearable="physics"
+     edit_group="physics_belly_updown"
+     value_default="10"
+     value_min="0"
+     value_max="100">
+	 <param_driver />
+    </param>
+    <param
+     id="10016"
+     group="0"
+     name="Belly_Physics_UpDown_Gain"
+     label="Belly Physics UpDown Gain"
+     wearable="physics"
+     edit_group="physics_belly_updown"
+     value_default="10"
+     value_min="1"
+     value_max="100">
+	 <param_driver />
+    </param>
+    <param
+     id="10017"
+     group="0"
+     name="Belly_Physics_UpDown_Damping"
+     label="Belly Physics UpDown Damping"
+     wearable="physics"
+     edit_group="physics_belly_updown"
+     value_default=".2"
+     value_min="0"
+     value_max="1">
+	 <param_driver />
+    </param>
+
+    <param
+     id="10018"
+     group="0"
+     name="Butt_Physics_Mass"
+     label="Butt Physics Mass"
+     wearable="physics"
+     edit_group="physics_advanced"
+     value_default=".1"
+     value_min=".1"
+     value_max="1">
+	 <param_driver />
+    </param>
+    <param
+     id="10019"
+     group="0"
+     name="Butt_Physics_Gravity"
+     label="Butt Physics Gravity"
+     wearable="physics"
+     edit_group="physics_advanced"
+     value_default="0"
+     value_min="0"
+     value_max="30">
+	 <param_driver />
+    </param>
+   <param
+     id="10020"
+     group="0"
+     name="Butt_Physics_Drag"
+     label="Butt Physics Drag"
+     wearable="physics"
+     edit_group="physics_advanced"
+     value_default="1"
+     value_min="0"
+     value_max="10">
+	 <param_driver />
+    </param>
+
+   <param
+     id="10021"
+     group="0"
+     name="Butt_Physics_UpDown_Max_Effect"
+     label="Butt Physics UpDown Max Effect"
+     wearable="physics"
+     edit_group="physics_butt_updown"
+     value_default="0"
+     value_min="0"
+     value_max="1">
+	 <param_driver />
+    </param>
+    <param
+     id="10022"
+     group="0"
+     name="Butt_Physics_UpDown_Spring"
+     label="Butt Physics UpDown Spring"
+     wearable="physics"
+     edit_group="physics_butt_updown"
+     value_default="10"
+     value_min="0"
+     value_max="100">
+	 <param_driver />
+    </param>
+    <param
+     id="10023"
+     group="0"
+     name="Butt_Physics_UpDown_Gain"
+     label="Butt Physics UpDown Gain"
+     wearable="physics"
+     edit_group="physics_butt_updown"
+     value_default="10"
+     value_min="1"
+     value_max="100">
+	 <param_driver />
+    </param>
+    <param
+     id="10024"
+     group="0"
+     name="Butt_Physics_UpDown_Damping"
+     label="Butt Physics UpDown Damping"
+     wearable="physics"
+     edit_group="physics_butt_updown"
+     value_default=".2"
+     value_min="0"
+     value_max="1">
+	 <param_driver />
+    </param>
+
+   <param
+     id="10025"
+     group="0"
+     name="Butt_Physics_LeftRight_Max_Effect"
+     label="Butt Physics LeftRight Max Effect"
+     wearable="physics"
+     edit_group="physics_butt_leftright"
+     value_default="0"
+     value_min="0"
+     value_max="1">
+	 <param_driver />
+    </param>
+    <param
+     id="10026"
+     group="0"
+     name="Butt_Physics_LeftRight_Spring"
+     label="Butt Physics LeftRight Spring"
+     wearable="physics"
+     edit_group="physics_butt_leftright"
+     value_default="10"
+     value_min="0"
+     value_max="100">
+	 <param_driver />
+    </param>
+    <param
+     id="10027"
+     group="0"
+     name="Butt_Physics_LeftRight_Gain"
+     label="Butt Physics LeftRight Gain"
+     wearable="physics"
+     edit_group="physics_butt_leftright"
+     value_default="10"
+     value_min="1"
+     value_max="100">
+	 <param_driver />
+    </param>
+    <param
+     id="10028"
+     group="0"
+     name="Butt_Physics_LeftRight_Damping"
+     label="Butt Physics LeftRight Damping"
+     wearable="physics"
+     edit_group="physics_butt_leftright"
+     value_default=".2"
+     value_min="0"
+     value_max="1">
+	 <param_driver />
+    </param>
+
+   <param
+     id="10029"
+     group="0"
+     sex="female"
+     name="Breast_Physics_LeftRight_Max_Effect"
+     label="Breast Physics LeftRight Max Effect"
+     wearable="physics"
+     edit_group="physics_breasts_leftright"
+     value_default="0"
+     value_min="0"
+     value_max="1">
+	 <param_driver />
+    </param>
+    <param
+     id="10030"
+     group="0"
+     sex="female"
+     name="Breast_Physics_LeftRight_Spring"
+     label="Breast Physics LeftRight Spring"
+     wearable="physics"
+     edit_group="physics_breasts_leftright"
+     value_default="10"
+     value_min="0"
+     value_max="100">
+	 <param_driver />
+    </param>
+    <param
+     id="10031"
+     group="0"
+     sex="female"
+     name="Breast_Physics_LeftRight_Gain"
+     label="Breast Physics LeftRight Gain"
+     wearable="physics"
+     edit_group="physics_breasts_leftright"
+     value_default="10"
+     value_min="1"
+     value_max="100">
+	 <param_driver />
+    </param>
+    <param
+     id="10032"
+     group="0"
+     sex="female"
+     name="Breast_Physics_LeftRight_Damping"
+     label="Breast Physics LeftRight Damping"
+     wearable="physics"
+     edit_group="physics_breasts_leftright"
+     value_default=".2"
+     value_min="0"
+     value_max="1">
+	 <param_driver />
+    </param>
 
   </driver_parameters>
 
diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
index a82c3da4c568abf85d2f27034668ec0b7dc050d5..af2d951bf70988de588ac7949c342213f46222d4 100644
--- a/indra/newview/featuretable.txt
+++ b/indra/newview/featuretable.txt
@@ -26,6 +26,7 @@ list all
 RenderAnisotropic			1	1
 RenderAvatarCloth			1	1
 RenderAvatarLODFactor		1	1.0
+RenderAvatarPhysicsLODFactor 1	1.0
 RenderAvatarMaxVisible      1   12
 RenderAvatarVP				1	1
 RenderCubeMap				1	1
@@ -71,6 +72,7 @@ list Low
 RenderAnisotropic			1	0
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	0
+RenderAvatarPhysicsLODFactor 1	0
 RenderAvatarMaxVisible      1   3
 RenderAvatarVP				1	0
 RenderFarClip				1	64
@@ -101,6 +103,7 @@ list Mid
 RenderAnisotropic			1	0
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	0.5
+RenderAvatarPhysicsLODFactor 1	0.75
 RenderAvatarVP				1	1
 RenderFarClip				1	96
 RenderFlexTimeFactor		1	1.0
@@ -129,6 +132,7 @@ list High
 RenderAnisotropic			1	1
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	1.0
+RenderAvatarPhysicsLODFactor 1	1.0
 RenderAvatarVP				1	1
 RenderFarClip				1	128
 RenderFlexTimeFactor		1	1.0
diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt
index a2cd4b834c0845ed899f975c40d3ebfa5a96aa30..5da1495da9aade25f555de0420daef2a3675b4a6 100644
--- a/indra/newview/featuretable_linux.txt
+++ b/indra/newview/featuretable_linux.txt
@@ -26,6 +26,7 @@ list all
 RenderAnisotropic			1	1
 RenderAvatarCloth			1	1
 RenderAvatarLODFactor		1	1.0
+RenderAvatarPhysicsLODFactor 1	1.0
 RenderAvatarMaxVisible      1   12
 RenderAvatarVP				1	1
 RenderCubeMap				1	1
@@ -70,6 +71,7 @@ list Low
 RenderAnisotropic			1	0
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	0
+RenderAvatarPhysicsLODFactor 1	0
 RenderAvatarMaxVisible      1   3
 RenderAvatarVP				1	0
 RenderFarClip				1	64
@@ -100,6 +102,7 @@ list Mid
 RenderAnisotropic			1	0
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	0.5
+RenderAvatarPhysicsLODFactor 1	0.75
 RenderAvatarVP				1	1
 RenderFarClip				1	96
 RenderFlexTimeFactor		1	1.0
@@ -128,6 +131,7 @@ list High
 RenderAnisotropic			1	1
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	1.0
+RenderAvatarPhysicsLODFactor 1	1.0
 RenderAvatarVP				1	1
 RenderFarClip				1	128
 RenderFlexTimeFactor		1	1.0
@@ -156,6 +160,7 @@ list Ultra
 RenderAnisotropic			1	1
 RenderAvatarCloth			1	1
 RenderAvatarLODFactor		1	1.0
+RenderAvatarPhysicsLODFactor 1	1.0
 RenderAvatarVP				1	1
 RenderFarClip				1	256
 RenderFlexTimeFactor		1	1.0
diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt
index 3ad7f4e89275cfbcb44fd5bc742ee296503e8376..421f9c097391b8e6326a30ea02f278fd06557fa8 100644
--- a/indra/newview/featuretable_mac.txt
+++ b/indra/newview/featuretable_mac.txt
@@ -26,6 +26,7 @@ list all
 RenderAnisotropic				1	0
 RenderAvatarCloth				0	0
 RenderAvatarLODFactor			1	1.0
+RenderAvatarPhysicsLODFactor 1	1.0
 RenderAvatarMaxVisible          1   12
 RenderAvatarVP					1	0
 RenderCubeMap					1	1
@@ -70,6 +71,7 @@ list Low
 RenderAnisotropic			1	0
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	0
+RenderAvatarPhysicsLODFactor 1	0
 RenderAvatarMaxVisible      1   3
 RenderAvatarVP				1	0
 RenderFarClip				1	64
@@ -99,6 +101,7 @@ list Mid
 RenderAnisotropic			1	0
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	0.5
+RenderAvatarPhysicsLODFactor 1	0.75
 RenderAvatarVP				1	1
 RenderFarClip				1	96
 RenderFlexTimeFactor		1	1.0
@@ -126,6 +129,7 @@ list High
 RenderAnisotropic			1	1
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	1.0
+RenderAvatarPhysicsLODFactor 1	1.0
 RenderAvatarVP				1	1
 RenderFarClip				1	128
 RenderFlexTimeFactor		1	1.0
@@ -153,6 +157,7 @@ list Ultra
 RenderAnisotropic			1	1
 RenderAvatarCloth			1	1
 RenderAvatarLODFactor		1	1.0
+RenderAvatarPhysicsLODFactor 1	1.0
 RenderAvatarVP				1	1
 RenderFarClip				1	256
 RenderFlexTimeFactor		1	1.0
diff --git a/indra/newview/featuretable_xp.txt b/indra/newview/featuretable_xp.txt
index 38e6bb1e5e9d01ce083277708836f2ce21743db0..c2e5dfff9fe17fa6df246b167449a8ed763cab9b 100644
--- a/indra/newview/featuretable_xp.txt
+++ b/indra/newview/featuretable_xp.txt
@@ -26,6 +26,7 @@ list all
 RenderAnisotropic			1	1
 RenderAvatarCloth			1	1
 RenderAvatarLODFactor		1	1.0
+RenderAvatarPhysicsLODFactor 1	1.0
 RenderAvatarMaxVisible      1   12
 RenderAvatarVP				1	1
 RenderCubeMap				1	1
@@ -71,6 +72,7 @@ list Low
 RenderAnisotropic			1	0
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	0
+RenderAvatarPhysicsLODFactor 1	0
 RenderAvatarMaxVisible      1   3
 RenderAvatarVP				1	0
 RenderFarClip				1	64
@@ -101,6 +103,7 @@ list Mid
 RenderAnisotropic			1	0
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	0.5
+RenderAvatarPhysicsLODFactor 1	0.75
 RenderAvatarVP				1	1
 RenderFarClip				1	96
 RenderFlexTimeFactor		1	1.0
@@ -129,6 +132,7 @@ list High
 RenderAnisotropic			1	1
 RenderAvatarCloth			1	0
 RenderAvatarLODFactor		1	1.0
+RenderAvatarPhysicsLODFactor 1	1.0
 RenderAvatarVP				1	1
 RenderFarClip				1	128
 RenderFlexTimeFactor		1	1.0
@@ -157,6 +161,7 @@ list Ultra
 RenderAnisotropic			1	1
 RenderAvatarCloth			1	1
 RenderAvatarLODFactor		1	1.0
+RenderAvatarPhysicsLODFactor 1	1.0
 RenderAvatarVP				1	1
 RenderFarClip				1	256
 RenderFlexTimeFactor		1	1.0
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index f3f036a0d8223bfcb2fc778c5d4e3111f74e50c3..aea4e78436279602b43de48214df2e70e1626464 100644
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -1119,12 +1119,6 @@ void LLAgent::resetControlFlags()
 //-----------------------------------------------------------------------------
 void LLAgent::setAFK()
 {
-	// Drones can't go AFK
-	if (gNoRender)
-	{
-		return;
-	}
-
 	if (!gAgent.getRegion())
 	{
 		// Don't set AFK if we're not talking to a region yet.
@@ -1684,11 +1678,6 @@ void LLAgent::clearRenderState(U8 clearstate)
 //-----------------------------------------------------------------------------
 U8 LLAgent::getRenderState()
 {
-	if (gNoRender || gKeyboard == NULL)
-	{
-		return 0;
-	}
-
 	// *FIX: don't do stuff in a getter!  This is infinite loop city!
 	if ((mTypingTimer.getElapsedTimeF32() > TYPING_TIMEOUT_SECS) 
 		&& (mRenderState & AGENT_STATE_TYPING))
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
index f01d5ff1f539121e87b6c3ce373b9fbdb6e2e2d5..6c5c3bcdab1b54242d4435d2c019eb87b2b60366 100644
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -282,25 +282,22 @@ void LLAgentCamera::resetView(BOOL reset_camera, BOOL change_camera)
 		gAgent.stopAutoPilot(TRUE);
 	}
 
-	if (!gNoRender)
-	{
-		LLSelectMgr::getInstance()->unhighlightAll();
+	LLSelectMgr::getInstance()->unhighlightAll();
 
-		// By popular request, keep land selection while walking around. JC
-		// LLViewerParcelMgr::getInstance()->deselectLand();
+	// By popular request, keep land selection while walking around. JC
+	// LLViewerParcelMgr::getInstance()->deselectLand();
 
-		// force deselect when walking and attachment is selected
-		// this is so people don't wig out when their avatar moves without animating
-		if (LLSelectMgr::getInstance()->getSelection()->isAttachment())
-		{
-			LLSelectMgr::getInstance()->deselectAll();
-		}
+	// force deselect when walking and attachment is selected
+	// this is so people don't wig out when their avatar moves without animating
+	if (LLSelectMgr::getInstance()->getSelection()->isAttachment())
+	{
+		LLSelectMgr::getInstance()->deselectAll();
+	}
 
-		if (gMenuHolder != NULL)
-		{
-			// Hide all popup menus
-			gMenuHolder->hideMenus();
-		}
+	if (gMenuHolder != NULL)
+	{
+		// Hide all popup menus
+		gMenuHolder->hideMenus();
 	}
 
 	if (change_camera && !gSavedSettings.getBOOL("FreezeTime"))
diff --git a/indra/newview/llagentlistener.cpp b/indra/newview/llagentlistener.cpp
index d520debc31f9f37e70b53f552b815f2c75661b09..ed24febf417d49b1a698e3e58e3e4ad948e97568 100644
--- a/indra/newview/llagentlistener.cpp
+++ b/indra/newview/llagentlistener.cpp
@@ -37,6 +37,8 @@
 #include "llviewerobject.h"
 #include "llviewerobjectlist.h"
 #include "llviewerregion.h"
+#include "llsdutil.h"
+#include "llsdutil_math.h"
 
 LLAgentListener::LLAgentListener(LLAgent &agent)
   : LLEventAPI("LLAgent",
@@ -53,6 +55,15 @@ LLAgentListener::LLAgentListener(LLAgent &agent)
 	add("requestStand",
         "Ask to stand up",
         &LLAgentListener::requestStand);
+    add("resetAxes",
+        "Set the agent to a fixed orientation (optionally specify [\"lookat\"] = array of [x, y, z])",
+        &LLAgentListener::resetAxes);
+    add("getAxes",
+        "Send information about the agent's orientation on [\"reply\"]:\n"
+        "[\"euler\"]: map of {roll, pitch, yaw}\n"
+        "[\"quat\"]:  array of [x, y, z, w] quaternion values",
+        &LLAgentListener::getAxes,
+        LLSDMap("reply", LLSD()));
 }
 
 void LLAgentListener::requestTeleport(LLSD const & event_data) const
@@ -64,7 +75,7 @@ void LLAgentListener::requestTeleport(LLSD const & event_data) const
 		params.append(event_data["x"]);
 		params.append(event_data["y"]);
 		params.append(event_data["z"]);
-		LLCommandDispatcher::dispatch("teleport", params, LLSD(), NULL, true);
+		LLCommandDispatcher::dispatch("teleport", params, LLSD(), NULL, "clicked", true);
 		// *TODO - lookup other LLCommandHandlers for "agent", "classified", "event", "group", "floater", "parcel", "login", login_refresh", "balance", "chat"
 		// should we just compose LLCommandHandler and LLDispatchListener?
 	}
@@ -74,7 +85,7 @@ void LLAgentListener::requestTeleport(LLSD const & event_data) const
 								  LLVector3(event_data["x"].asReal(), 
 											event_data["y"].asReal(), 
 											event_data["z"].asReal())).getSLURLString();
-		LLURLDispatcher::dispatch(url, NULL, false);
+		LLURLDispatcher::dispatch(url, "clicked", NULL, false);
 	}
 }
 
@@ -104,3 +115,28 @@ void LLAgentListener::requestStand(LLSD const & event_data) const
 	mAgent.setControlFlags(AGENT_CONTROL_STAND_UP);
 }
 
+void LLAgentListener::resetAxes(const LLSD& event) const
+{
+    if (event.has("lookat"))
+    {
+        mAgent.resetAxes(ll_vector3_from_sd(event["lookat"]));
+    }
+    else
+    {
+        // no "lookat", default call
+        mAgent.resetAxes();
+    }
+}
+
+void LLAgentListener::getAxes(const LLSD& event) const
+{
+    LLQuaternion quat(mAgent.getQuat());
+    F32 roll, pitch, yaw;
+    quat.getEulerAngles(&roll, &pitch, &yaw);
+    // The official query API for LLQuaternion's [x, y, z, w] values is its
+    // public member mQ...
+    sendReply(LLSDMap
+              ("quat", llsd_copy_array(boost::begin(quat.mQ), boost::end(quat.mQ)))
+              ("euler", LLSDMap("roll", roll)("pitch", pitch)("yaw", yaw)),
+              event);
+}
diff --git a/indra/newview/llagentlistener.h b/indra/newview/llagentlistener.h
index 9b585152f4c3bebcaebcaffe4881f4e27122efc4..0aa58d0b16fdaf06796a4c0546b605f4caa7657f 100644
--- a/indra/newview/llagentlistener.h
+++ b/indra/newview/llagentlistener.h
@@ -44,6 +44,8 @@ class LLAgentListener : public LLEventAPI
 	void requestTeleport(LLSD const & event_data) const;
 	void requestSit(LLSD const & event_data) const;
 	void requestStand(LLSD const & event_data) const;
+	void resetAxes(const LLSD& event) const;
+	void getAxes(const LLSD& event) const;
 
 private:
 	LLAgent & mAgent;
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index 055be4cae28a0a75e03a6e2cad1bde6c028bf308..d426afb17cc23af8b547dea7f1631cd63d5bbadb 100644
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -821,7 +821,7 @@ void LLAgentWearables::popWearable(const LLWearableType::EType type, U32 index)
 	}
 }
 
-U32	LLAgentWearables::getWearableIndex(LLWearable *wearable)
+U32	LLAgentWearables::getWearableIndex(const LLWearable *wearable) const
 {
 	if (wearable == NULL)
 	{
@@ -2045,8 +2045,9 @@ void LLAgentWearables::editWearable(const LLUUID& item_id)
 		return;
 	}
 
+	const BOOL disable_camera_switch = LLWearableType::getDisableCameraSwitch(wearable->getType());
 	LLPanel* panel = LLSideTray::getInstance()->getPanel("sidepanel_appearance");
-	LLSidepanelAppearance::editWearable(wearable, panel);
+	LLSidepanelAppearance::editWearable(wearable, panel, disable_camera_switch);
 }
 
 // Request editing the item after it gets worn.
diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h
index d7e77a5a5bd9a323e53a6fb8fbbd0941d42ed0af..3ef50f14da45b8c13e844004a2e748adb7bdd2fe 100644
--- a/indra/newview/llagentwearables.h
+++ b/indra/newview/llagentwearables.h
@@ -124,7 +124,7 @@ class LLAgentWearables : public LLInitClass<LLAgentWearables>
 	void			setWearableOutfit(const LLInventoryItem::item_array_t& items, const LLDynamicArray< LLWearable* >& wearables, BOOL remove);
 	void			setWearableName(const LLUUID& item_id, const std::string& new_name);
 	void			addLocalTextureObject(const LLWearableType::EType wearable_type, const LLVOAvatarDefines::ETextureIndex texture_type, U32 wearable_index);
-	U32				getWearableIndex(LLWearable *wearable);
+	U32				getWearableIndex(const LLWearable *wearable) const;
 
 protected:
 	void			setWearableFinal(LLInventoryItem* new_item, LLWearable* new_wearable, bool do_append = false);
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index f40fed5ad3450010bbfbc964f2b0b0332592cb84..f9e850899ac68b450bb86faee71a5b9af3900388 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -110,6 +110,12 @@ class LLAppearanceHandler : public LLCommandHandler
 	{
 		// support secondlife:///app/appearance/show, but for now we just
 		// make all secondlife:///app/appearance SLapps behave this way
+		if (!LLUI::sSettingGroups["config"]->getBOOL("EnableAppearance"))
+		{
+			LLNotificationsUtil::add("NoAppearance", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
+			return true;
+		}
+
 		LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD());
 		return true;
 	}
@@ -2979,6 +2985,9 @@ class LLWearFolderHandler : public LLCommandHandler
 			gAgent.setGenderChosen(TRUE);
 		}
 
+		// release avatar picker keyboard focus
+		gFocusMgr.setKeyboardFocus( NULL );
+
 		return true;
 	}
 };
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index 327a5ad698a807653483e75902bc5ba206175d3b..9de2941c4a5db2ffbafbfe98fb09300e941a2d6f 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -1,4 +1,4 @@
-/** 
+	/** 
  * @file llappviewer.cpp
  * @brief The LLAppViewer class definitions
  *
@@ -78,7 +78,6 @@
 #include "llvoicechannel.h"
 #include "llvoavatarself.h"
 #include "llsidetray.h"
-#include "llfeaturemanager.h"
 #include "llurlmatch.h"
 #include "lltextutil.h"
 #include "lllogininstance.h"
@@ -337,6 +336,46 @@ void init_default_trans_args()
 const char *VFS_DATA_FILE_BASE = "data.db2.x.";
 const char *VFS_INDEX_FILE_BASE = "index.db2.x.";
 
+
+struct SettingsFile : public LLInitParam::Block<SettingsFile>
+{
+	Mandatory<std::string>	name;
+	Optional<std::string>	file_name;
+	Optional<bool>			required,
+							persistent;
+	Optional<std::string>	file_name_setting;
+
+	SettingsFile()
+	:	name("name"),
+		file_name("file_name"),
+		required("required", false),
+		persistent("persistent", true),
+		file_name_setting("file_name_setting")
+	{}
+};
+
+struct SettingsGroup : public LLInitParam::Block<SettingsGroup>
+{
+	Mandatory<std::string>	name;
+	Mandatory<S32>			path_index;
+	Multiple<SettingsFile>	files;
+
+	SettingsGroup()
+	:	name("name"),
+		path_index("path_index"),
+		files("file")
+	{}
+};
+
+struct SettingsFiles : public LLInitParam::Block<SettingsFiles>
+{
+	Multiple<SettingsGroup>	groups;
+
+	SettingsFiles()
+	: groups("group")
+	{}
+};
+
 static std::string gWindowTitle;
 
 LLAppViewer::LLUpdaterInfo *LLAppViewer::sUpdaterInfo = NULL ;
@@ -458,6 +497,7 @@ static void settings_to_globals()
 	LLVolumeImplFlexible::sUpdateFactor = gSavedSettings.getF32("RenderFlexTimeFactor");
 	LLVOTree::sTreeFactor				= gSavedSettings.getF32("RenderTreeLODFactor");
 	LLVOAvatar::sLODFactor				= gSavedSettings.getF32("RenderAvatarLODFactor");
+	LLVOAvatar::sPhysicsLODFactor		= gSavedSettings.getF32("RenderAvatarPhysicsLODFactor");
 	LLVOAvatar::sMaxVisible				= (U32)gSavedSettings.getS32("RenderAvatarMaxVisible");
 	LLVOAvatar::sVisibleInFirstPerson	= gSavedSettings.getBOOL("FirstPersonAvatarVisible");
 	// clamp auto-open time to some minimum usable value
@@ -594,7 +634,8 @@ LLAppViewer::LLAppViewer() :
 	mRandomizeFramerate(LLCachedControl<bool>(gSavedSettings,"Randomize Framerate", FALSE)),
 	mPeriodicSlowFrame(LLCachedControl<bool>(gSavedSettings,"Periodic Slow Frame", FALSE)),
 	mFastTimerLogThread(NULL),
-	mUpdater(new LLUpdaterService())
+	mUpdater(new LLUpdaterService()),
+	mSettingsLocationList(NULL)
 {
 	if(NULL != sInstance)
 	{
@@ -610,6 +651,8 @@ LLAppViewer::LLAppViewer() :
 
 LLAppViewer::~LLAppViewer()
 {
+	delete mSettingsLocationList;
+
 	LLLoginInstance::instance().setUpdaterService(0);
 	
 	destroyMainloopTimeout();
@@ -712,7 +755,7 @@ bool LLAppViewer::init()
 	
 	//
 	// Various introspection concerning the libs we're using - particularly
-        // the libs involved in getting to a full login screen.
+	// the libs involved in getting to a full login screen.
 	//
 	LL_INFOS("InitInfo") << "J2C Engine is: " << LLImageJ2C::getEngineInfo() << LL_ENDL;
 	LL_INFOS("InitInfo") << "libcurl version is: " << LLCurl::getVersionString() << LL_ENDL;
@@ -881,7 +924,7 @@ bool LLAppViewer::init()
 	}
 
 	// If we don't have the right GL requirements, exit.
-	if (!gGLManager.mHasRequirements && !gNoRender)
+	if (!gGLManager.mHasRequirements)
 	{	
 		// can't use an alert here since we're exiting and
 		// all hell breaks lose.
@@ -1171,7 +1214,8 @@ bool LLAppViewer::mainLoop()
 				}
 
 				// Render scene.
-				if (!LLApp::isExiting())
+				// *TODO: Should we run display() even during gHeadlessClient?  DK 2011-02-18
+				if (!LLApp::isExiting() && !gHeadlessClient)
 				{
 					pingMainloopTimeout("Main:Display");
 					gGLActive = TRUE;
@@ -1199,8 +1243,7 @@ bool LLAppViewer::mainLoop()
 				}
 
 				// yield cooperatively when not running as foreground window
-				if (   gNoRender
-					   || (gViewerWindow && !gViewerWindow->mWindow->getVisible())
+				if (   (gViewerWindow && !gViewerWindow->mWindow->getVisible())
 						|| !gFocusMgr.getAppHasFocus())
 				{
 					// Sleep if we're not rendering, or the window is minimized.
@@ -1879,85 +1922,80 @@ bool LLAppViewer::initLogging()
 bool LLAppViewer::loadSettingsFromDirectory(const std::string& location_key,
 					    bool set_defaults)
 {	
-	// Find and vet the location key.
-	if(!mSettingsLocationList.has(location_key))
-	{
-		llerrs << "Requested unknown location: " << location_key << llendl;
-		return false;
-	}
-
-	LLSD location = mSettingsLocationList.get(location_key);
-
-	if(!location.has("PathIndex"))
+	if (!mSettingsLocationList)
 	{
-		llerrs << "Settings location is missing PathIndex value. Settings cannot be loaded." << llendl;
-		return false;
-	}
-	ELLPath path_index = (ELLPath)(location.get("PathIndex").asInteger());
-	if(path_index <= LL_PATH_NONE || path_index >= LL_PATH_LAST)
-	{
-		llerrs << "Out of range path index in app_settings/settings_files.xml" << llendl;
-		return false;
+		llerrs << "Invalid settings location list" << llendl;
 	}
 
-	// Iterate through the locations list of files.
-	LLSD files = location.get("Files");
-	for(LLSD::map_iterator itr = files.beginMap(); itr != files.endMap(); ++itr)
+	LLControlGroup* global_settings = LLControlGroup::getInstance(sGlobalSettingsName);  
+	for(LLInitParam::ParamIterator<SettingsGroup>::const_iterator it = mSettingsLocationList->groups.begin(), end_it = mSettingsLocationList->groups.end();
+		it != end_it;
+		++it)
 	{
-		std::string settings_group = (*itr).first;
-		llinfos << "Attempting to load settings for the group " << settings_group 
-			    << " - from location " << location_key << llendl;
+		// skip settings groups that aren't the one we requested
+		if (it->name() != location_key) continue;
 
-		if(!LLControlGroup::getInstance(settings_group))
+		ELLPath path_index = (ELLPath)it->path_index();
+		if(path_index <= LL_PATH_NONE || path_index >= LL_PATH_LAST)
 		{
-			llwarns << "No matching settings group for name " << settings_group << llendl;
-			continue;
+			llerrs << "Out of range path index in app_settings/settings_files.xml" << llendl;
+			return false;
 		}
 
-		LLSD file = (*itr).second;
-
-		std::string full_settings_path;
-		if(file.has("NameFromSetting"))
+		LLInitParam::ParamIterator<SettingsFile>::const_iterator file_it, end_file_it;
+		for (file_it = it->files.begin(), end_file_it = it->files.end();
+			file_it != end_file_it;
+			++file_it)
 		{
-			std::string custom_name_setting = file.get("NameFromSetting");
-			// *NOTE: Regardless of the group currently being lodaed,
-			// this setting is always read from the Global settings.
-			if(LLControlGroup::getInstance(sGlobalSettingsName)->controlExists(custom_name_setting))
+			llinfos << "Attempting to load settings for the group " << file_it->name()
+			    << " - from location " << location_key << llendl;
+
+			LLControlGroup* settings_group = LLControlGroup::getInstance(file_it->name);
+			if(!settings_group)
 			{
-				std::string file_name = 
-					LLControlGroup::getInstance(sGlobalSettingsName)->getString(custom_name_setting);
-				full_settings_path = file_name;
+				llwarns << "No matching settings group for name " << file_it->name() << llendl;
+				continue;
 			}
-		}
 
-		if(full_settings_path.empty())
-		{
-			std::string file_name = file.get("Name");
-			full_settings_path = gDirUtilp->getExpandedFilename(path_index, file_name);
-		}
+			std::string full_settings_path;
 
-		int requirement = 0;
-		if(file.has("Requirement"))
-		{
-			requirement = file.get("Requirement").asInteger();
-		}
-		
-		if(!LLControlGroup::getInstance(settings_group)->loadFromFile(full_settings_path, set_defaults))
-		{
-			if(requirement == 1)
+			if (file_it->file_name_setting.isProvided() 
+				&& global_settings->controlExists(file_it->file_name_setting))
 			{
-				llwarns << "Error: Cannot load required settings file from: " 
-						<< full_settings_path << llendl;
-				return false;
+				// try to find filename stored in file_name_setting control
+				full_settings_path = global_settings->getString(file_it->file_name_setting);
+				if (!gDirUtilp->fileExists(full_settings_path))
+				{
+					// search in default path
+					full_settings_path = gDirUtilp->getExpandedFilename((ELLPath)path_index, full_settings_path);
+				}
 			}
 			else
 			{
-				llinfos << "Cannot load " << full_settings_path << " - No settings found." << llendl;
+				// by default, use specified file name
+				full_settings_path = gDirUtilp->getExpandedFilename((ELLPath)path_index, file_it->file_name());
+			}
+
+			if(settings_group->loadFromFile(full_settings_path, set_defaults, file_it->persistent))
+			{	// success!
+				llinfos << "Loaded settings file " << full_settings_path << llendl;
+			}
+			else
+			{	// failed to load
+				if(file_it->required)
+				{
+					llerrs << "Error: Cannot load required settings file from: " << full_settings_path << llendl;
+					return false;
+				}
+				else
+				{
+					// only complain if we actually have a filename at this point
+					if (!full_settings_path.empty())
+					{
+						llinfos << "Cannot load " << full_settings_path << " - No settings found." << llendl;
+					}
+				}
 			}
-		}
-		else
-		{
-			llinfos << "Loaded settings file " << full_settings_path << llendl;
 		}
 	}
 
@@ -1967,18 +2005,25 @@ bool LLAppViewer::loadSettingsFromDirectory(const std::string& location_key,
 std::string LLAppViewer::getSettingsFilename(const std::string& location_key,
 											 const std::string& file)
 {
-	if(mSettingsLocationList.has(location_key))
+	for(LLInitParam::ParamIterator<SettingsGroup>::const_iterator it = mSettingsLocationList->groups.begin(), end_it = mSettingsLocationList->groups.end();
+		it != end_it;
+		++it)
 	{
-		LLSD location = mSettingsLocationList.get(location_key);
-		if(location.has("Files"))
+		if (it->name() == location_key)
 		{
-			LLSD files = location.get("Files");
-			if(files.has(file) && files[file].has("Name"))
+			LLInitParam::ParamIterator<SettingsFile>::const_iterator file_it, end_file_it;
+			for (file_it = it->files.begin(), end_file_it = it->files.end();
+				file_it != end_file_it;
+				++file_it)
 			{
-				return files.get(file).get("Name").asString();
+				if (file_it->name() == file)
+				{
+					return file_it->file_name;
+				}
 			}
 		}
 	}
+
 	return std::string();
 }
 
@@ -1991,14 +2036,29 @@ bool LLAppViewer::initConfiguration()
 {	
 	//Load settings files list
 	std::string settings_file_list = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "settings_files.xml");
-	LLControlGroup settings_control("SettingsFiles");
-	llinfos << "Loading settings file list " << settings_file_list << llendl;
-	if (0 == settings_control.loadFromFile(settings_file_list))
+	//LLControlGroup settings_control("SettingsFiles");
+	//llinfos << "Loading settings file list " << settings_file_list << llendl;
+	//if (0 == settings_control.loadFromFile(settings_file_list))
+	//{
+ //       llerrs << "Cannot load default configuration file " << settings_file_list << llendl;
+	//}
+
+	LLXMLNodePtr root;
+	BOOL success  = LLXMLNode::parseFile(settings_file_list, root, NULL);
+	if (!success)
 	{
         llerrs << "Cannot load default configuration file " << settings_file_list << llendl;
 	}
 
-	mSettingsLocationList = settings_control.getLLSD("Locations");
+	mSettingsLocationList = new SettingsFiles();
+
+	LLXUIParser parser;
+	parser.readXUI(root, *mSettingsLocationList, settings_file_list);
+
+	if (!mSettingsLocationList->validateBlock())
+	{
+        llerrs << "Invalid settings file list " << settings_file_list << llendl;
+	}
 		
 	// The settings and command line parsing have a fragile
 	// order-of-operation:
@@ -2107,6 +2167,32 @@ bool LLAppViewer::initConfiguration()
 
 	// - load overrides from user_settings 
 	loadSettingsFromDirectory("User");
+
+	if (gSavedSettings.getBOOL("FirstRunThisInstall"))
+	{
+		gSavedSettings.setString("SessionSettingsFile", "settings_minimal.xml");
+		gSavedSettings.setBOOL("FirstRunThisInstall", FALSE);
+	}
+
+	if (clp.hasOption("sessionsettings"))
+	{
+		std::string session_settings_filename = clp.getOption("sessionsettings")[0];		
+		gSavedSettings.setString("SessionSettingsFile", session_settings_filename);
+		llinfos	<< "Using session settings filename: " 
+			<< session_settings_filename << llendl;
+	}
+	loadSettingsFromDirectory("Session");
+
+	if (clp.hasOption("usersessionsettings"))
+	{
+		std::string user_session_settings_filename = clp.getOption("usersessionsettings")[0];		
+		gSavedSettings.setString("UserSessionSettingsFile", user_session_settings_filename);
+		llinfos	<< "Using user session settings filename: " 
+			<< user_session_settings_filename << llendl;
+
+	}
+	loadSettingsFromDirectory("UserSession");
+
 	// - apply command line settings 
 	clp.notify(); 
 
@@ -2381,6 +2467,14 @@ bool LLAppViewer::initConfiguration()
 		}
 	}
 
+	// If automatic login from command line with --login switch
+	// init StartSLURL location. In interactive login, LLPanelLogin
+	// will take care of it.
+	if ((clp.hasOption("login") || clp.hasOption("autologin")) && !clp.hasOption("url") && !clp.hasOption("slurl"))
+	{
+		LLStartUp::setStartSLURL(LLSLURL(gSavedSettings.getString("LoginLocation")));
+	}
+
 	if (!gSavedSettings.getBOOL("AllowMultipleViewers"))
 	{
 	    //
@@ -2645,12 +2739,26 @@ void LLAppViewer::checkForCrash(void)
     
 }
 
+//
+// This function decides whether the client machine meets the minimum requirements to
+// run in a maximized window, per the consensus of davep, boa and nyx on 3/30/2011.
+//
+bool LLAppViewer::meetsRequirementsForMaximizedStart()
+{
+	bool maximizedOk = (LLFeatureManager::getInstance()->getGPUClass() >= GPU_CLASS_2);
+
+	const U32 one_gigabyte_kb = 1024 * 1024;
+	maximizedOk &= (gSysMemory.getPhysicalMemoryKB() >= one_gigabyte_kb);
+
+	return maximizedOk;
+}
+
 bool LLAppViewer::initWindow()
 {
 	LL_INFOS("AppInit") << "Initializing window..." << LL_ENDL;
 
 	// store setting in a global for easy access and modification
-	gNoRender = gSavedSettings.getBOOL("DisableRendering");
+	gHeadlessClient = gSavedSettings.getBOOL("HeadlessClient");
 
 	// always start windowed
 	BOOL ignorePixelDepth = gSavedSettings.getBOOL("IgnorePixelDepth");
@@ -2664,7 +2772,8 @@ bool LLAppViewer::initWindow()
 	const S32 NEVER_SUBMIT_REPORT = 2;
 	bool use_watchdog = false;
 	int watchdog_enabled_setting = gSavedSettings.getS32("WatchdogEnabled");
-	if(watchdog_enabled_setting == -1){
+	if(watchdog_enabled_setting == -1)
+	{
 		use_watchdog = !LLFeatureManager::getInstance()->isFeatureAvailable("WatchdogDisabled");
 	}
 	else
@@ -2686,28 +2795,25 @@ bool LLAppViewer::initWindow()
 		gViewerWindow->mWindow->maximize();
 	}
 
-	if (!gNoRender)
+	//
+	// Initialize GL stuff
+	//
+
+	if (mForceGraphicsDetail)
 	{
-		//
-		// Initialize GL stuff
-		//
+		LLFeatureManager::getInstance()->setGraphicsLevel(gSavedSettings.getU32("RenderQualityPerformance"), false);
+	}
+			
+	// Set this flag in case we crash while initializing GL
+	gSavedSettings.setBOOL("RenderInitError", TRUE);
+	gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
 
-		if (mForceGraphicsDetail)
-		{
-			LLFeatureManager::getInstance()->setGraphicsLevel(gSavedSettings.getU32("RenderQualityPerformance"), false);
-		}
-				
-		// Set this flag in case we crash while initializing GL
-		gSavedSettings.setBOOL("RenderInitError", TRUE);
-		gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
-	
-		gPipeline.init();
-		stop_glerror();
-		gViewerWindow->initGLDefaults();
+	gPipeline.init();
+	stop_glerror();
+	gViewerWindow->initGLDefaults();
 
-		gSavedSettings.setBOOL("RenderInitError", FALSE);
-		gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
-	}
+	gSavedSettings.setBOOL("RenderInitError", FALSE);
+	gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );
 
 	//If we have a startup crash, it's usually near GL initialization, so simulate that.
 	if(gCrashOnStartup)
@@ -2715,6 +2821,21 @@ bool LLAppViewer::initWindow()
 		LLAppViewer::instance()->forceErrorLLError();
 	}
 
+	//
+	// Determine if the window should start maximized on initial run based
+	// on graphics capability
+	//
+	if (gSavedSettings.getBOOL("FirstLoginThisInstall") && meetsRequirementsForMaximizedStart())
+	{
+		LL_INFOS("AppInit") << "This client met the requirements for a maximized initial screen." << LL_ENDL;
+		gSavedSettings.setBOOL("WindowMaximized", TRUE);
+	}
+
+	if (gSavedSettings.getBOOL("WindowMaximized"))
+	{
+		gViewerWindow->mWindow->maximize();
+	}
+
 	LLUI::sWindow = gViewerWindow->getWindow();
 
 	// Show watch cursor
@@ -2749,12 +2870,9 @@ void LLAppViewer::cleanupSavedSettings()
 		
 	gSavedSettings.setBOOL("ShowObjectUpdates", gShowObjectUpdates);
 	
-	if (!gNoRender)
+	if (gDebugView)
 	{
-		if (gDebugView)
-		{
-			gSavedSettings.setBOOL("ShowDebugConsole", gDebugView->mDebugConsolep->getVisible());
-		}
+		gSavedSettings.setBOOL("ShowDebugConsole", gDebugView->mDebugConsolep->getVisible());
 	}
 
 	// save window position if not maximized
@@ -3226,6 +3344,20 @@ static bool finish_quit(const LLSD& notification, const LLSD& response)
 }
 static LLNotificationFunctorRegistration finish_quit_reg("ConfirmQuit", finish_quit);
 
+static bool switch_standard_skin_and_quit(const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+
+	if (option == 0)
+	{
+		gSavedSettings.setString("SessionSettingsFile", "");
+		LLAppViewer::instance()->requestQuit();
+	}
+	return false;
+}
+
+static LLNotificationFunctorRegistration standard_skin_quit_reg("SwitchToStandardSkinAndQuit", switch_standard_skin_and_quit);
+
 void LLAppViewer::userQuit()
 {
 	if (gDisconnected || gViewerWindow->getProgressView()->getVisible())
@@ -3399,10 +3531,10 @@ bool LLAppViewer::initCache()
 	LLAppViewer::getTextureCache()->setReadOnly(read_only) ;
 	LLVOCache::getInstance()->setReadOnly(read_only);
 
-	BOOL texture_cache_mismatch = FALSE ;
+	bool texture_cache_mismatch = false;
 	if (gSavedSettings.getS32("LocalCacheVersion") != LLAppViewer::getTextureCacheVersion()) 
 	{
-		texture_cache_mismatch = TRUE ;
+		texture_cache_mismatch = true;
 		if(!read_only) 
 		{
 			gSavedSettings.setS32("LocalCacheVersion", LLAppViewer::getTextureCacheVersion());
@@ -3416,7 +3548,9 @@ bool LLAppViewer::initCache()
 			gSavedSettings.getBOOL("PurgeCacheOnNextStartup"))
 		{
 			gSavedSettings.setBOOL("PurgeCacheOnNextStartup", false);
-		mPurgeCache = true;
+			mPurgeCache = true;
+			// STORM-1141 force purgeAllTextures to get called to prevent a crash here. -brad
+			texture_cache_mismatch = true;
 		}
 	
 		// We have moved the location of the cache directory over time.
@@ -3721,7 +3855,7 @@ void LLAppViewer::badNetworkHandler()
 // is destroyed.
 void LLAppViewer::saveFinalSnapshot()
 {
-	if (!mSavedFinalSnapshot && !gNoRender)
+	if (!mSavedFinalSnapshot)
 	{
 		gSavedSettings.setVector3d("FocusPosOnLogout", gAgentCamera.calcFocusPositionTargetGlobal());
 		gSavedSettings.setVector3d("CameraPosOnLogout", gAgentCamera.calcCameraPositionTargetGlobal());
@@ -4125,34 +4259,31 @@ void LLAppViewer::idle()
 	//
 	// Update weather effects
 	//
-	if (!gNoRender)
-	{
-		LLWorld::getInstance()->updateClouds(gFrameDTClamped);
-		gSky.propagateHeavenlyBodies(gFrameDTClamped);				// moves sun, moon, and planets
+	LLWorld::getInstance()->updateClouds(gFrameDTClamped);
+	gSky.propagateHeavenlyBodies(gFrameDTClamped);				// moves sun, moon, and planets
 
-		// Update wind vector 
-		LLVector3 wind_position_region;
-		static LLVector3 average_wind;
+	// Update wind vector 
+	LLVector3 wind_position_region;
+	static LLVector3 average_wind;
 
-		LLViewerRegion *regionp;
-		regionp = LLWorld::getInstance()->resolveRegionGlobal(wind_position_region, gAgent.getPositionGlobal());	// puts agent's local coords into wind_position	
-		if (regionp)
-		{
-			gWindVec = regionp->mWind.getVelocity(wind_position_region);
+	LLViewerRegion *regionp;
+	regionp = LLWorld::getInstance()->resolveRegionGlobal(wind_position_region, gAgent.getPositionGlobal());	// puts agent's local coords into wind_position	
+	if (regionp)
+	{
+		gWindVec = regionp->mWind.getVelocity(wind_position_region);
 
-			// Compute average wind and use to drive motion of water
-			
-			average_wind = regionp->mWind.getAverage();
-			F32 cloud_density = regionp->mCloudLayer.getDensityRegion(wind_position_region);
-			
-			gSky.setCloudDensityAtAgent(cloud_density);
-			gSky.setWind(average_wind);
-			//LLVOWater::setWind(average_wind);
-		}
-		else
-		{
-			gWindVec.setVec(0.0f, 0.0f, 0.0f);
-		}
+		// Compute average wind and use to drive motion of water
+		
+		average_wind = regionp->mWind.getAverage();
+		F32 cloud_density = regionp->mCloudLayer.getDensityRegion(wind_position_region);
+		
+		gSky.setCloudDensityAtAgent(cloud_density);
+		gSky.setWind(average_wind);
+		//LLVOWater::setWind(average_wind);
+	}
+	else
+	{
+		gWindVec.setVec(0.0f, 0.0f, 0.0f);
 	}
 	
 	//////////////////////////////////////
@@ -4161,13 +4292,10 @@ void LLAppViewer::idle()
 	// Here, particles are updated and drawables are moved.
 	//
 	
-	if (!gNoRender)
-	{
-		LLFastTimer t(FTM_WORLD_UPDATE);
-		gPipeline.updateMove();
+	LLFastTimer t(FTM_WORLD_UPDATE);
+	gPipeline.updateMove();
 
-		LLWorld::getInstance()->updateParticles();
-	}
+	LLWorld::getInstance()->updateParticles();
 
 	if (LLViewerJoystick::getInstance()->getOverrideCamera())
 	{
@@ -4533,12 +4661,9 @@ void LLAppViewer::disconnectViewer()
 	gSavedSettings.setBOOL("FlyingAtExit", gAgent.getFlying() );
 
 	// Un-minimize all windows so they don't get saved minimized
-	if (!gNoRender)
+	if (gFloaterView)
 	{
-		if (gFloaterView)
-		{
-			gFloaterView->restoreAll();
-		}
+		gFloaterView->restoreAll();
 	}
 
 	if (LLSelectMgr::getInstance())
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
index a18e6cbb028153a5fffa9eb225bbb50542d6218b..61ee6a7cf14072b2af6bf713c1eebb36832abfa0 100644
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -187,6 +187,7 @@ class LLAppViewer : public LLApp
 
 	virtual std::string generateSerialNumber() = 0; // Platforms specific classes generate this.
 
+	virtual bool meetsRequirementsForMaximizedStart(); // Used on first login to decide to launch maximized
 
 private:
 
@@ -253,7 +254,7 @@ class LLAppViewer : public LLApp
     bool mQuitRequested;				// User wants to quit, may have modified documents open.
     bool mLogoutRequestSent;			// Disconnect message sent to simulator, no longer safe to send messages to the sim.
     S32 mYieldTime;
-	LLSD mSettingsLocationList;
+	struct SettingsFiles* mSettingsLocationList;
 
 	LLWatchdogTimeout* mMainloopTimeout;
 
diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp
index 898cc1c0ba8686bc615b685e2d17353c5d51dbb9..523c2e3adf8113425f6926c9434100d52a8688ef 100644
--- a/indra/newview/llappviewerlinux.cpp
+++ b/indra/newview/llappviewerlinux.cpp
@@ -233,7 +233,7 @@ gboolean viewer_app_api_GoSLURL(ViewerAppAPI *obj, gchar *slurl, gboolean **succ
 	std::string url = slurl;
 	LLMediaCtrl* web = NULL;
 	const bool trusted_browser = false;
-	if (LLURLDispatcher::dispatch(url, web, trusted_browser))
+	if (LLURLDispatcher::dispatch(url, "", web, trusted_browser))
 	{
 		// bring window to foreground, as it has just been "launched" from a URL
 		// todo: hmm, how to get there from here?
diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp
index 1cd80986d8cbef91410bcac44d284bb6d7608e36..c2916717bd415f80fa6243c4780ec117229f145e 100644
--- a/indra/newview/llappviewermacosx.cpp
+++ b/indra/newview/llappviewermacosx.cpp
@@ -500,7 +500,7 @@ OSErr AEGURLHandler(const AppleEvent *messagein, AppleEvent *reply, long refIn)
 		
 		LLMediaCtrl* web = NULL;
 		const bool trusted_browser = false;
-		LLURLDispatcher::dispatch(url, web, trusted_browser);
+		LLURLDispatcher::dispatch(url, "", web, trusted_browser);
 	}
 	
 	return(result);
diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp
old mode 100755
new mode 100644
index f3f0cde221353bb0a77af4252e94cc3a83cb1514..ca7ec7cc30a7ce8727ceb25ec4e3400b97aac762
--- a/indra/newview/llavataractions.cpp
+++ b/indra/newview/llavataractions.cpp
@@ -47,6 +47,7 @@
 #include "llfloatergroups.h"
 #include "llfloaterreg.h"
 #include "llfloaterpay.h"
+#include "llfloaterwebcontent.h"
 #include "llfloaterworldmap.h"
 #include "llgiveinventory.h"
 #include "llinventorybridge.h"
@@ -278,7 +279,7 @@ bool LLAvatarActions::isCalling(const LLUUID &id)
 //static
 bool LLAvatarActions::canCall()
 {
-		return LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking();
+	return LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking();
 }
 
 // static
@@ -299,40 +300,39 @@ void LLAvatarActions::startConference(const uuid_vec_t& ids)
 	make_ui_sound("UISndStartIM");
 }
 
+static void on_avatar_name_show_profile(const LLUUID& agent_id, const LLAvatarName& av_name)
+{
+	llinfos << "opening web profile for " << av_name.mUsername << llendl;		
+	std::string url = getProfileURL(av_name.mUsername);
+
+	// PROFILES: open in webkit window
+	LLWeb::loadWebURLInternal(url, "", agent_id.asString());
+}
+
 // static
 void LLAvatarActions::showProfile(const LLUUID& id)
 {
 	if (id.notNull())
 	{
-		LLSD params;
-		params["id"] = id;
-		params["open_tab_name"] = "panel_profile";
+		LLAvatarNameCache::get(id, boost::bind(&on_avatar_name_show_profile, _1, _2));
+	}
+}
 
-		// PROFILES: open in webkit window
-		std::string full_name;
-		if (gCacheName->getFullName(id,full_name))
-		{
-			std::string agent_name = LLCacheName::buildUsername(full_name);
-			llinfos << "opening web profile for " << agent_name << llendl;		
-			std::string url = getProfileURL(agent_name);
-			LLWeb::loadWebURLInternal(url);
-		}
-		else
-		{
-			llwarns << "no name info for agent id " << id << llendl;
-		}
-#if 0
-		//Show own profile
-		if(gAgent.getID() == id)
-		{
-			LLSideTray::getInstance()->showPanel("panel_me", params);
-		}
-		//Show other user profile
-		else
-		{
-			LLSideTray::getInstance()->showPanel("panel_profile_view", params);
-		}
-#endif
+//static 
+bool LLAvatarActions::profileVisible(const LLUUID& id)
+{
+	LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::findInstance("web_content", id.asString()));
+	return browser && browser->isShown();
+}
+
+
+//static 
+void LLAvatarActions::hideProfile(const LLUUID& id)
+{
+	LLFloaterWebContent *browser = dynamic_cast<LLFloaterWebContent*> (LLFloaterReg::findInstance("web_content", id.asString()));
+	if (browser)
+	{
+		browser->closeFloater();
 	}
 }
 
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
index 2db2918eed4cf1835c45687fd6a1378d58478057..956fed746147e569f5557b5d7c1b55993953b2b8 100644
--- a/indra/newview/llavataractions.h
+++ b/indra/newview/llavataractions.h
@@ -93,6 +93,8 @@ class LLAvatarActions
 	 * Show avatar profile.
 	 */
 	static void showProfile(const LLUUID& id);
+	static void hideProfile(const LLUUID& id);
+	static bool profileVisible(const LLUUID& id);
 
 	/**
 	 * Show avatar on world map.
diff --git a/indra/newview/llavatarpropertiesprocessor.cpp b/indra/newview/llavatarpropertiesprocessor.cpp
index 99aeb4cbadad02c91853e523c1352d8524b9f7ef..b1cd83a1fba65a706b50e09e48290f711b2a6bb4 100644
--- a/indra/newview/llavatarpropertiesprocessor.cpp
+++ b/indra/newview/llavatarpropertiesprocessor.cpp
@@ -160,6 +160,12 @@ void LLAvatarPropertiesProcessor::sendAvatarClassifiedsRequest(const LLUUID& ava
 
 void LLAvatarPropertiesProcessor::sendAvatarPropertiesUpdate(const LLAvatarData* avatar_props)
 {
+	if (!gAgent.isInitialized() || (gAgent.getID() == LLUUID::null))
+	{
+		llwarns << "Sending avatarinfo update DENIED - invalid agent" << llendl;
+		return;
+	}
+
 	llinfos << "Sending avatarinfo update" << llendl;
 
 	// This value is required by sendAvatarPropertiesUpdate method.
@@ -168,20 +174,21 @@ void LLAvatarPropertiesProcessor::sendAvatarPropertiesUpdate(const LLAvatarData*
 
 	LLMessageSystem *msg = gMessageSystem;
 
-	msg->newMessageFast(_PREHASH_AvatarPropertiesUpdate);
-	msg->nextBlockFast(_PREHASH_AgentData);
-	msg->addUUIDFast(	_PREHASH_AgentID,		gAgent.getID() );
-	msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID() );
-	msg->nextBlockFast(_PREHASH_PropertiesData);
+	msg->newMessageFast	(_PREHASH_AvatarPropertiesUpdate);
+	msg->nextBlockFast	(_PREHASH_AgentData);
+	msg->addUUIDFast		(_PREHASH_AgentID,		gAgent.getID() );
+	msg->addUUIDFast		(_PREHASH_SessionID,	gAgent.getSessionID() );
+	msg->nextBlockFast	(_PREHASH_PropertiesData);
 
-	msg->addUUIDFast(	_PREHASH_ImageID,	avatar_props->image_id);
-	msg->addUUIDFast(	_PREHASH_FLImageID,		avatar_props->fl_image_id);
-	msg->addStringFast(	_PREHASH_AboutText,		avatar_props->about_text);
-	msg->addStringFast(	_PREHASH_FLAboutText,	avatar_props->fl_about_text);
+	msg->addUUIDFast		(_PREHASH_ImageID,		avatar_props->image_id);
+	msg->addUUIDFast		(_PREHASH_FLImageID,	avatar_props->fl_image_id);
+	msg->addStringFast	(_PREHASH_AboutText,	avatar_props->about_text);
+	msg->addStringFast	(_PREHASH_FLAboutText,	avatar_props->fl_about_text);
 
 	msg->addBOOL(_PREHASH_AllowPublish, avatar_props->allow_publish);
 	msg->addBOOL(_PREHASH_MaturePublish, mature);
 	msg->addString(_PREHASH_ProfileURL, avatar_props->profile_url);
+
 	gAgent.sendReliableMessage();
 }
 
diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp
index d8ec4b605c11980ccf9dc602583675f975e62092..b6482e0ec473d7eec8ee85cdf935e374d0e726a8 100644
--- a/indra/newview/llbottomtray.cpp
+++ b/indra/newview/llbottomtray.cpp
@@ -38,12 +38,15 @@
 #include "lltexteditor.h"
 
 // newview includes
+#include "llagent.h"
 #include "llagentcamera.h"
+#include "llavataractions.h"
 #include "llchiclet.h"
 #include "llfloatercamera.h"
 #include "llhints.h"
 #include "llimfloater.h" // for LLIMFloater
 #include "llnearbychatbar.h"
+#include "llsidetray.h"
 #include "llspeakbutton.h"
 #include "llsplitbutton.h"
 #include "llsyswellwindow.h"
@@ -52,6 +55,7 @@
 
 #include "llviewerwindow.h"
 #include "llsdserialize.h"
+#include "llfirstuse.h"
 
 // Distance from mouse down on which drag'n'drop should be started.
 #define DRAG_START_DISTANCE 3
@@ -378,7 +382,12 @@ void LLBottomTray::onChange(EStatusType status, const std::string &channelURI, b
 	// skipped to avoid button blinking
 	if (status != STATUS_JOINING && status!= STATUS_LEFT_CHANNEL)
 	{
-		mSpeakBtn->setFlyoutBtnEnabled(LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking());
+		bool voice_status = LLVoiceClient::getInstance()->voiceEnabled() && LLVoiceClient::getInstance()->isVoiceWorking();
+		mSpeakBtn->setFlyoutBtnEnabled(voice_status);
+		if (voice_status)
+		{
+			LLFirstUse::speak(true);
+		}
 	}
 }
 
@@ -418,10 +427,6 @@ void LLBottomTray::setVisible(BOOL visible)
 	{
 		LLPanel::setVisible(visible);
 	}
-	if(visible)
-		gFloaterView->setSnapOffsetBottom(getRect().getHeight());
-	else
-		gFloaterView->setSnapOffsetBottom(0);
 }
 
 S32 LLBottomTray::notifyParent(const LLSD& info)
@@ -487,26 +492,6 @@ void LLBottomTray::updateContextMenu(S32 x, S32 y, MASK mask)
 	mBottomTrayContextMenu->setItemVisible("NearbyChatBar_Select_All", in_edit_box);
 }
 
-void LLBottomTray::showGestureButton(BOOL visible)
-{
-	setTrayButtonVisibleIfPossible(RS_BUTTON_GESTURES, visible);
-}
-
-void LLBottomTray::showMoveButton(BOOL visible)
-{
-	setTrayButtonVisibleIfPossible(RS_BUTTON_MOVEMENT, visible);
-}
-
-void LLBottomTray::showCameraButton(BOOL visible)
-{
-	setTrayButtonVisibleIfPossible(RS_BUTTON_CAMERA, visible);
-}
-
-void LLBottomTray::showSnapshotButton(BOOL visible)
-{
-	setTrayButtonVisibleIfPossible(RS_BUTTON_SNAPSHOT, visible);
-}
-
 void LLBottomTray::showSpeakButton(bool visible)
 {
 	// Show/hide the button
@@ -562,6 +547,7 @@ BOOL LLBottomTray::postBuild()
 
 	mSpeakPanel = getChild<LLPanel>("speak_panel");
 	mSpeakBtn = getChild<LLSpeakButton>("talk");
+	LLHints::registerHintTarget("speak_btn", mSpeakBtn->getHandle());
 
 	// Both parts of speak button should be initially disabled because
 	// it takes some time between logging in to world and connecting to voice channel.
@@ -849,6 +835,24 @@ void LLBottomTray::draw()
 		LLRect rect = mLandingTab->calcScreenRect();
 		mImageDragIndication->draw(rect.mLeft - w/2, rect.getHeight(), w, h);
 	}
+	getChild<LLButton>("show_profile_btn")->setToggleState(LLAvatarActions::profileVisible(gAgent.getID()));
+
+	LLPanel* panel = LLSideTray::getInstance()->getPanel("panel_people");
+	if (panel && panel->isInVisibleChain())
+	{
+		getChild<LLButton>("show_people_button")->setToggleState(true);
+	}
+	else
+	{
+		getChild<LLButton>("show_people_button")->setToggleState(false);
+	}
+
+	LLFloater* help_browser = (LLFloaterReg::findInstance("help_browser"));
+	bool help_floater_visible = (help_browser && help_browser->isInVisibleChain());
+
+	getChild<LLButton>("show_help_btn")->setToggleState(help_floater_visible);
+
+
 }
 
 bool LLBottomTray::onContextMenuItemEnabled(const LLSD& userdata)
@@ -912,15 +916,14 @@ void LLBottomTray::log(LLView* panel, const std::string& descr)
 {
 	if (NULL == panel) return;
 	LLView* layout = panel->getParent();
-	lldebugs << descr << ": "
+	LL_DEBUGS("Bottom Tray Rects") << descr << ": "
 		<< "panel: " << panel->getName()
 		<< ", rect: " << panel->getRect()
  
  
-		<< "layout: " << layout->getName()
+		<< " layout: " << layout->getName()
 		<< ", rect: " << layout->getRect()
-		<< llendl
-		; 
+		<< LL_ENDL;
 }
 
 void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent)
@@ -940,7 +943,9 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent)
 	if (mNearbyChatBar)			log(mNearbyChatBar, "before");
 	if (mChicletPanel)			log(mChicletPanel, "before");
 
-	// stores width size on which bottom tray is less than width required by its children. EXT-991
+	// Difference between bottom tray width required to fit its children and the actual width. (see EXT-991)
+	// Positive value means that bottom tray is not wide enough.
+	// Negative value means that there is free space.
 	static S32 extra_shrink_width = 0;
 	bool should_be_reshaped = true;
 
@@ -962,11 +967,9 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent)
 		// bottom tray is narrowed
 		if (delta_width < 0)
 		{
-			if (extra_shrink_width > 0)
+			if (extra_shrink_width > 0) // not enough space
 			{
-				// is world rect was extra shrunk and decreasing again only update this value
-				// to delta_width negative
-				extra_shrink_width -= delta_width; // use "-=" because delta_width is negative
+				extra_shrink_width += llabs(delta_width);
 				should_be_reshaped = false;
 			}
 			else
@@ -977,13 +980,13 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent)
 				width += extra_shrink_width;
 			}
 		}
-		// bottom tray is widen
+		// bottom tray is widened
 		else
 		{
 			if (extra_shrink_width > delta_width)
 			{
-				// Less than minimum width is more than increasing (delta_width) 
-				// only reduce it value and make no reshape
+				// Still not enough space.
+				// Only subtract the delta from the required delta and don't reshape.
 				extra_shrink_width -= delta_width;
 				should_be_reshaped = false;
 			}
@@ -1023,6 +1026,7 @@ void LLBottomTray::reshape(S32 width, S32 height, BOOL called_from_parent)
 		{
 			mDesiredNearbyChatWidth = new_width;
 			processChatbarCustomization(new_width);
+			lldebugs << "Setting nearby chat bar width to " << new_width << " px" << llendl;
 			mChatBarContainer->reshape(new_width, mChatBarContainer->getRect().getHeight());
 		}
 		needs_restore_custom_state = false;
@@ -1034,30 +1038,28 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 {
 	bool still_should_be_processed = true;
 
-	const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth();
-	const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth();
+	const S32 chiclet_panel_shrink_headroom = getChicletPanelShrinkHeadroom();
 
 	// There are four steps of processing width decrease. If in one of them required width was reached,
 	// further are not needed.
 	// 1. Decreasing width of chiclet panel.
-	if (chiclet_panel_width > chiclet_panel_min_width)
+	if (chiclet_panel_shrink_headroom > 0)
 	{
 		// we have some space to decrease chiclet panel
-		S32 panel_delta_min = chiclet_panel_width - chiclet_panel_min_width;
-
-		S32 delta_panel = llmin(-delta_width, panel_delta_min);
+		S32 shrink_by = llmin(-delta_width, chiclet_panel_shrink_headroom);
 
 		lldebugs << "delta_width: " << delta_width
-			<< ", panel_delta_min: " << panel_delta_min
-			<< ", delta_panel: " << delta_panel
+			<< ", panel_delta_min: " << chiclet_panel_shrink_headroom
+			<< ", shrink_by: " << shrink_by
 			<< llendl;
 
-		// is chiclet panel width enough to process resizing?
-		delta_width += panel_delta_min;
+		// is chiclet panel wide enough to process resizing?
+		delta_width += chiclet_panel_shrink_headroom;
 
 		still_should_be_processed = delta_width < 0;
 
-		mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - delta_panel, mChicletPanel->getParent()->getRect().getHeight());
+		lldebugs << "Shrinking chiclet panel by " << shrink_by << " px" << llendl;
+		mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - shrink_by, mChicletPanel->getParent()->getRect().getHeight());
 		log(mChicletPanel, "after processing panel decreasing via chiclet panel");
 
 		lldebugs << "RS_CHICLET_PANEL" 
@@ -1081,7 +1083,7 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 
 		S32 delta_panel = llmin(-delta_width, panel_delta_min);
 
-		// whether chatbar panel width is enough to process resizing?
+		// is chatbar panel wide enough to process resizing?
 		delta_width += panel_delta_min;
 
 		still_should_be_processed = delta_width < 0;
@@ -1089,6 +1091,7 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 		// chatbar should only be shrunk here, not stretched
 		if(delta_panel > 0)
 		{
+			lldebugs << "Shrinking nearby chat bar by " << delta_panel << " px " << llendl;
 			mChatBarContainer->reshape(mNearbyChatBar->getRect().getWidth() - delta_panel, mChatBarContainer->getRect().getHeight());
 		}
 
@@ -1120,6 +1123,7 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width)
 			{
 				S32 compensative_width = nearby_needed_width > buttons_freed_width ? buttons_freed_width : nearby_needed_width; 
 				log(mNearbyChatBar, "before applying compensative width");
+				lldebugs << "Extending nearby chat bar by " << compensative_width << " px" << llendl;
 				mChatBarContainer->reshape(mChatBarContainer->getRect().getWidth() + compensative_width, mChatBarContainer->getRect().getHeight() );
 				log(mNearbyChatBar, "after applying compensative width");
 				lldebugs << buttons_freed_width << llendl;
@@ -1134,52 +1138,46 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
 {
 	if (delta_width <= 0) return;
 
-	const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth();
-	static const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth();
-
-	const S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width;
+	// how much room we have to show hidden buttons
+	S32 available_width = delta_width + getChicletPanelShrinkHeadroom();
 
-	// how many room we have to show hidden buttons
-	S32 total_available_width = delta_width + available_width_chiclet;
+	lldebugs << "Distributing (" << getChicletPanelShrinkHeadroom()
+		<< " + " << delta_width << ") = " << available_width << " px" << llendl;
 
-	lldebugs << "Processing extending, available width:"
-		<< ", chiclets - " << available_width_chiclet
-		<< ", total - " << total_available_width
-		<< llendl;
-
-	S32 available_width = total_available_width;
+	// 1. Try showing buttons that have been auto-hidden.
+	S32 processed_width = processShowButtons(available_width);
+	lldebugs << "processed_width = " << processed_width << ", delta_width = " << delta_width << llendl;
 
-	processShowButtons(available_width);
+	lldebugs << "Available_width after showing buttons: " << available_width << llendl;
 
-	// if we have to show/extend some buttons but resized delta width is not enough...
-	S32 processed_width = total_available_width - available_width;
+	// If the newly shown buttons have consumed more than delta_width pixels,
+	// shrink the chiclet panel.
 	if (processed_width > delta_width)
 	{
-		// ... let's shrink nearby chat & chiclet panels
-		S32 required_to_process_width = processed_width;
-
 		// 1. use delta width of resizing
-		required_to_process_width -= delta_width;
+		S32 shrink_by = processed_width - delta_width;
 
 		// 2. use width available via decreasing of chiclet panel
-		if (required_to_process_width > 0)
+		if (shrink_by > 0)
 		{
-			mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - required_to_process_width, mChicletPanel->getParent()->getRect().getHeight());
+			lldebugs << "Shrinking chiclet panel by " << shrink_by << " px" << llendl;
+			mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - shrink_by, mChicletPanel->getParent()->getRect().getHeight());
 			log(mChicletPanel, "after applying compensative width for chiclets: ");
-			lldebugs << required_to_process_width << llendl;
+			lldebugs << shrink_by << llendl;
 		}
 
+		// shown buttons take some space, rest should be processed by nearby chatbar & chiclet panels
+		delta_width -= processed_width;
 	}
 
-	// shown buttons take some space, rest should be processed by nearby chatbar & chiclet panels
-	delta_width -= processed_width;
-
-
-	// how many space can nearby chatbar take?
-	S32 chatbar_panel_width_ = mChatBarContainer->getRect().getWidth();
-	if (delta_width > 0 && chatbar_panel_width_ < mDesiredNearbyChatWidth)
+	// 2. Expand the nearby chat bar if needed.
+	S32 chatbar_panel_width = mChatBarContainer->getRect().getWidth();
+	lldebugs << "delta_width = " << delta_width
+		<< ", chatbar_panel_width = " << chatbar_panel_width
+		<< ", mDesiredNearbyChatWidth = " << mDesiredNearbyChatWidth << llendl;
+	if (delta_width > 0 && chatbar_panel_width < mDesiredNearbyChatWidth)
 	{
-		S32 delta_panel_max = mDesiredNearbyChatWidth - chatbar_panel_width_;
+		S32 delta_panel_max = mDesiredNearbyChatWidth - chatbar_panel_width;
 		S32 delta_panel = llmin(delta_width, delta_panel_max);
 		lldebugs << "Unprocesed delta width: " << delta_width
 			<< ", can be applied to chatbar: " << delta_panel_max
@@ -1187,17 +1185,25 @@ void LLBottomTray::processWidthIncreased(S32 delta_width)
 			<< llendl;
 
 		delta_width -= delta_panel_max;
-		mChatBarContainer->reshape(chatbar_panel_width_ + delta_panel, mChatBarContainer->getRect().getHeight());
+		lldebugs << "Extending nearby chat bar by " << delta_panel << " px " << llendl;
+		mChatBarContainer->reshape(chatbar_panel_width + delta_panel, mChatBarContainer->getRect().getHeight());
 		log(mNearbyChatBar, "applied unprocessed delta width");
 	}
+
+	// 3. Expand buttons that have been auto-shrunk,
+	// if we haven't yet consumed all the available headroom.
 	if (delta_width > 0)
 	{
-		processExtendButtons(delta_width);
+		S32 available_width = delta_width + getChicletPanelShrinkHeadroom();
+		processExtendButtons(available_width);
 	}
 }
 
-void LLBottomTray::processShowButtons(S32& available_width)
+S32 LLBottomTray::processShowButtons(S32& available_width)
 {
+	lldebugs << "Distributing " << available_width << " px" << llendl;
+	S32 original_available_width = available_width;
+
 	// process buttons from left to right
 	resize_state_vec_t::const_iterator it = mButtonsProcessOrder.begin();
 	const resize_state_vec_t::const_iterator it_end = mButtonsProcessOrder.end();
@@ -1210,37 +1216,20 @@ void LLBottomTray::processShowButtons(S32& available_width)
 		// try to show next button
 		processShowButton(*it, available_width);
 	}
+
+	return original_available_width - available_width;
 }
 
 bool LLBottomTray::processShowButton(EResizeState shown_object_type, S32& available_width)
 {
-	lldebugs << "Trying to show object type: " << shown_object_type << llendl;
-
-	LLPanel* panel = getButtonPanel(shown_object_type);
-	if (NULL == panel)
+	// Check if the button was previously auto-hidden (due to lack of space).
+	if (!isAutoHidden(shown_object_type))
 	{
-		lldebugs << "There is no object to process for state: " << shown_object_type << llendl;
 		return false;
 	}
-	bool can_be_shown = canButtonBeShown(shown_object_type);
-	if (can_be_shown)
-	{
-		//validate if we have enough room to show this button
-		const S32 required_width = panel->getRect().getWidth();
-		can_be_shown = available_width >= required_width;
-		if (can_be_shown)
-		{
-			available_width -= required_width;
 
-			setTrayButtonVisible(shown_object_type, true);
-
-			lldebugs << "processed object type: " << shown_object_type
-				<< ", rest available width: " << available_width
-				<< llendl;
-			mResizeState &= ~shown_object_type;
-		}
-	}
-	return can_be_shown;
+	// Ok. Try showing the button.
+	return showButton(shown_object_type, available_width);
 }
 
 void LLBottomTray::processHideButtons(S32& required_width, S32& buttons_freed_width)
@@ -1265,7 +1254,6 @@ void LLBottomTray::processHideButton(EResizeState processed_object_type, S32& re
 	LLPanel* panel = getButtonPanel(processed_object_type);
 	if (NULL == panel)
 	{
-		lldebugs << "There is no object to process for state: " << processed_object_type << llendl;
 		return;
 	}
 
@@ -1280,7 +1268,7 @@ void LLBottomTray::processHideButton(EResizeState processed_object_type, S32& re
 
 		setTrayButtonVisible(processed_object_type, false);
 
-		mResizeState |= processed_object_type;
+		setAutoHidden(processed_object_type, true);
 
 		lldebugs << "processing object type: " << processed_object_type
 			<< ", buttons_freed_width: " << buttons_freed_width
@@ -1345,7 +1333,6 @@ void LLBottomTray::processShrinkButton(EResizeState processed_object_type, S32&
 	LLPanel* panel = getButtonPanel(processed_object_type);
 	if (NULL == panel)
 	{
-		lldebugs << "There is no object to process for type: " << processed_object_type << llendl;
 		return;
 	}
 
@@ -1390,122 +1377,130 @@ void LLBottomTray::processShrinkButton(EResizeState processed_object_type, S32&
 void LLBottomTray::processExtendButtons(S32& available_width)
 {
 	// do not allow extending any buttons if we have some buttons hidden via resize
-	if (mResizeState & RS_BUTTONS_CAN_BE_HIDDEN) return;
+	if (isAutoHidden(RS_BUTTONS_CAN_BE_HIDDEN)) return;
 
-	// process buttons from left to right
-	resize_state_vec_t::const_iterator it = mButtonsProcessOrder.begin();
-	const resize_state_vec_t::const_iterator it_end = mButtonsProcessOrder.end();
+	lldebugs << "Distributing " << available_width << " px" << llendl;
 
-	// iterate through buttons in the mButtonsProcessOrder first
-	for (; it != it_end; ++it)
+	// First try extending the Speak button.
+	if (available_width > 0)
 	{
-		// is there available space?
-		if (available_width <= 0) break;
-
-		// try to extend next button
-		processExtendButton(*it, available_width);
+		if (!processExtendSpeakButton(available_width))
+		{
+			// The Speak button needs extension but lacks some space.
+			// Don't extend other buttons in this case: the Speak button
+			// should consume the available headroom first.
+			return;
+		}
 	}
 
-	const S32 chiclet_panel_width = mChicletPanel->getParent()->getRect().getWidth();
-	static const S32 chiclet_panel_min_width = mChicletPanel->getMinWidth();
-	const S32 available_width_chiclet = chiclet_panel_width - chiclet_panel_min_width;
+	// Then process the other buttons from left to right.
+	if (available_width > 0)
+	{
+		resize_state_vec_t::const_iterator it = mButtonsProcessOrder.begin();
+		const resize_state_vec_t::const_iterator it_end = mButtonsProcessOrder.end();
 
-	// then try to extend Speak button
-	if (available_width > 0 || available_width_chiclet > 0)
+		// iterate through buttons in the mButtonsProcessOrder first
+		for (; it != it_end; ++it)
+		{
+			// is there available space?
+			if (available_width <= 0) break;
+
+			// try to extend next button
+			processExtendButton(*it, available_width);
+		}
+	}
+}
+
+bool LLBottomTray::processExtendSpeakButton(S32& available_width)
+{
+	if (available_width <= 0)
 	{
-		S32 panel_max_width = mObjectDefaultWidthMap[RS_BUTTON_SPEAK];
-		S32 panel_width = mSpeakPanel->getRect().getWidth();
-		S32 possible_extend_width = panel_max_width - panel_width;
+		llassert(available_width > 0);
+		return true;
+	}
 
-		if (possible_extend_width >= 0 && possible_extend_width <= available_width + available_width_chiclet)  // HACK: this button doesn't change size so possible_extend_width will be 0
+	const S32 panel_max_width = mObjectDefaultWidthMap[RS_BUTTON_SPEAK];
+	const S32 panel_width = mSpeakPanel->getRect().getWidth();
+	const S32 required_headroom = panel_max_width - panel_width;
+
+	if (panel_width < panel_max_width) // if the button isn't extended already
+	{
+		if (available_width < required_headroom) // not enough space
 		{
-			mSpeakBtn->setLabelVisible(true);
-			mSpeakPanel->reshape(panel_max_width, mSpeakPanel->getRect().getHeight());
-			log(mSpeakBtn, "speak button is extended");
+			lldebugs << "Need (" << required_headroom << " - " << available_width << ") = "
+				<< (required_headroom - available_width) << " more px"
+				<< " to extend the Speak button"<< llendl;
 
-			if( available_width > possible_extend_width)
-			{
-				available_width -= possible_extend_width;
-			}
-			else
-			{
-				S32 required_width = possible_extend_width - available_width;
-				available_width = 0;
-				mChicletPanel->getParent()->reshape(mChicletPanel->getParent()->getRect().getWidth() - required_width, mChicletPanel->getParent()->getRect().getHeight());
-			}
-			lldebugs << "Extending Speak button panel: " << mSpeakPanel->getName()
-				<< ", extended width: " << possible_extend_width
-				<< ", rest width to process: " << available_width
-				<< llendl;
+			return false; // Don't extend other buttons until we extend Speak.
 		}
+
+		// Reshape the Speak button to its maximum width.
+		mSpeakBtn->setLabelVisible(true);
+		mSpeakPanel->reshape(panel_max_width, mSpeakPanel->getRect().getHeight());
+
+		available_width -= required_headroom;
+		llassert(available_width >= 0);
+
+		lldebugs << "Extending Speak button panel: " << mSpeakPanel->getName()
+			<< ", extended width: " << required_headroom
+			<< ", rest width to process: " << available_width
+			<< llendl;
 	}
+
+	return true;
 }
 
 void LLBottomTray::processExtendButton(EResizeState processed_object_type, S32& available_width)
 {
+	llassert(available_width >= 0);
+
 	LLPanel* panel = getButtonPanel(processed_object_type);
 	if (NULL == panel)
 	{
-		lldebugs << "There is no object to process for type: " << processed_object_type << llendl;
 		return;
 	}
 
 	if (!panel->getVisible()) return;
 
+	// Widen the button up to its maximum width, but by not more than <available_width> px.
 	S32 panel_max_width = mObjectDefaultWidthMap[processed_object_type];
 	S32 panel_width = panel->getRect().getWidth();
-	S32 possible_extend_width = panel_max_width - panel_width;
+	S32 required_headroom = panel_max_width - panel_width;
 
-	if (possible_extend_width > 0)
+	S32 extend_by = llmin(available_width, required_headroom);
+	if (extend_by > 0)
 	{
-		// let calculate real width to extend
+		panel->reshape(panel_width + extend_by, panel->getRect().getHeight());
 
-		// 1. apply all possible width
-		available_width -= possible_extend_width;
-
-		// 2. it it is too much... 
-		if (available_width < 0)
-		{
-			// reduce applied extended width to the excessive value.
-			possible_extend_width += available_width;
-			available_width = 0;
-		}
-		panel->reshape(panel_width + possible_extend_width, panel->getRect().getHeight());
+		// Decrease amount of headroom available for other panels.
+		available_width -= extend_by;
 
-		lldebugs << "Extending panel: " << panel->getName()
-			<< ", extended width: " << possible_extend_width
-			<< ", rest width to process: " << available_width
+		lldebugs << "Extending " << panel->getName()
+			<< " by " << extend_by
+			<< " px; remaining available width: " << available_width
 			<< llendl;
 	}
 }
 
 bool LLBottomTray::canButtonBeShown(EResizeState processed_object_type) const
 {
-	// 0. Check if passed button was previously hidden on resize
-	bool can_be_shown = mResizeState & processed_object_type;
-	if (can_be_shown)
-	{
-		// Yes, it was. Lets now check that all buttons before it (that can be hidden on resize)
-		// are already shown
-
-		// process buttons in direct order (from left to right)
-		resize_state_vec_t::const_iterator it = mButtonsProcessOrder.begin();
-		const resize_state_vec_t::const_iterator it_end = mButtonsProcessOrder.end();
+	// Check that all buttons (that can be hidden on resize)
+	// to the left of the given one are already shown.
 
-		// 1. Find and accumulate all buttons types before one passed into the method.
-		MASK buttons_before_mask = RS_NORESIZE;
-		for (; it != it_end; ++it)
-		{
-			const EResizeState button_type = *it;
-			if (button_type == processed_object_type) break;
+	// process buttons in direct order (from left to right)
+	resize_state_vec_t::const_iterator it = mButtonsProcessOrder.begin();
+	const resize_state_vec_t::const_iterator it_end = mButtonsProcessOrder.end();
 
-			buttons_before_mask |= button_type;
-		}
+	MASK buttons_before_mask = RS_NORESIZE;
+	for (; it != it_end; ++it)
+	{
+		const EResizeState button_type = *it;
+		if (button_type == processed_object_type) break;
 
-		// 2. Check if some previous buttons are still hidden on resize
-		can_be_shown = !(buttons_before_mask & mResizeState);
+		buttons_before_mask |= button_type;
 	}
-	return can_be_shown;
+
+	return !isAutoHidden(buttons_before_mask);
 }
 
 void LLBottomTray::initResizeStateContainers()
@@ -1568,6 +1563,7 @@ void LLBottomTray::initButtonsVisibility()
 	setVisibleAndFitWidths(RS_BUTTON_SEARCH, gSavedSettings.getBOOL("ShowSearchButton"));
 	setVisibleAndFitWidths(RS_BUTTON_WORLD_MAP, gSavedSettings.getBOOL("ShowWorldMapButton"));
 	setVisibleAndFitWidths(RS_BUTTON_MINI_MAP, gSavedSettings.getBOOL("ShowMiniMapButton"));
+	lldebugs << "mResizeState = " << resizeStateMaskToString(mResizeState) << llendl;
 }
 
 void LLBottomTray::setButtonsControlsAndListeners()
@@ -1599,12 +1595,53 @@ bool LLBottomTray::toggleShowButton(LLBottomTray::EResizeState button_type, cons
 	return true;
 }
 
+bool LLBottomTray::showButton(EResizeState button_type, S32& available_width)
+{
+	LLPanel* panel = getButtonPanel(button_type);
+	if (NULL == panel)
+	{
+		return false;
+	}
+
+	if (panel->getVisible())
+	{
+		return false;
+	}
+
+	// Check if none of the buttons to the left of the given one was auto-hidden.
+	// (we auto-show the buttons left to right).
+	if (!canButtonBeShown(button_type))
+	{
+		return false;
+	}
+
+	// Make sure we have enough room to show this button.
+	const S32 required_width = panel->getRect().getWidth();
+	if (available_width < required_width)
+	{
+		lldebugs << "Need " << (required_width - available_width) << " more px to show " << resizeStateToString(button_type) << llendl;
+		return false;
+	}
+
+	// All good. Show the button.
+	setTrayButtonVisible(button_type, true);
+
+	// Let the caller know that there is now less available space.
+	available_width -= required_width;
+
+	lldebugs << "Showing button " << resizeStateToString(button_type)
+		<< ", remaining available width: " << available_width
+		<< llendl;
+	setAutoHidden(button_type, false);
+
+	return true;
+}
+
 void LLBottomTray::setTrayButtonVisible(EResizeState shown_object_type, bool visible)
 {
 	LLPanel* panel = getButtonPanel(shown_object_type);
 	if (NULL == panel)
 	{
-		lldebugs << "There is no object to show for state: " << shown_object_type << llendl;
 		return;
 	}
 
@@ -1635,7 +1672,6 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible
 	LLPanel* cur_panel = getButtonPanel(object_type);
 	if (NULL == cur_panel)
 	{
-		lldebugs << "There is no object to process for state: " << object_type << llendl;
 		return false;
 	}
 
@@ -1644,17 +1680,13 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible
 	if (visible)
 	{
 		// Assume that only chiclet panel can be auto-resized
-		const S32 available_width =
-			mChicletPanel->getParent()->getRect().getWidth() - mChicletPanel->getMinWidth();
+		const S32 available_width = getChicletPanelShrinkHeadroom();
 
 		S32 preferred_width = mObjectDefaultWidthMap[object_type];
 		S32 current_width = cur_panel->getRect().getWidth();
 		S32 result_width = 0;
 		bool decrease_width = false;
 
-		// Mark this button to be shown
-		mResizeState |= object_type;
-
 		if (preferred_width > 0 && available_width >= preferred_width)
 		{
 			result_width = preferred_width;
@@ -1698,7 +1730,11 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible
 			}
 			else
 			{
-				// Nothing can be done, give up...
+				lldebugs << "Need " << (minimal_width - available_width - possible_shrunk_width)
+					<< " more px to show " << resizeStateToString(object_type) << llendl;
+
+				// Make the button uppear when we have more available space.
+				setAutoHidden(object_type, true);
 				return false;
 			}
 		}
@@ -1709,7 +1745,7 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible
 			current_width = result_width;
 		}
 
-		is_set = processShowButton(object_type, current_width);
+		is_set = showButton(object_type, current_width);
 
 		// Shrink buttons if needed
 		if (is_set && decrease_width)
@@ -1724,7 +1760,8 @@ bool LLBottomTray::setVisibleAndFitWidths(EResizeState object_type, bool visible
 		setTrayButtonVisible(object_type, false);
 
 		// Mark button NOT to show while future bottom tray extending
-		mResizeState &= ~object_type;
+		lldebugs << "Removing " << resizeStateToString(object_type) << " from mResizeState" << llendl;
+		setAutoHidden(object_type, false);
 
 		// Extend other buttons if need
 		if (delta_width)
@@ -1781,12 +1818,14 @@ void LLBottomTray::processChatbarCustomization(S32 new_width)
 
 	if (delta_width == 0) return;
 
+	{
+		static unsigned dbg_cnt = 0;
+		lldebugs << llformat("*** (%03d) ************************************* %d", delta_width, ++dbg_cnt) << llendl;
+	}
+
 	mDesiredNearbyChatWidth = new_width;
 
-	LLView * chiclet_layout_panel = mChicletPanel->getParent();
-	const S32 chiclet_min_width = get_panel_min_width(mToolbarStack, chiclet_layout_panel);
-	const S32 chiclet_panel_width = chiclet_layout_panel->getRect().getWidth();
-	const S32 available_chiclet_shrink_width = chiclet_panel_width - chiclet_min_width;
+	const S32 available_chiclet_shrink_width = getChicletPanelShrinkHeadroom();
 	llassert(available_chiclet_shrink_width >= 0);
 
 	if (delta_width > 0) // panel gets narrowly
@@ -1805,6 +1844,16 @@ void LLBottomTray::processChatbarCustomization(S32 new_width)
 	}
 }
 
+S32 LLBottomTray::getChicletPanelShrinkHeadroom() const
+{
+	static const S32 min_width = mChicletPanel->getMinWidth();
+	const S32 cur_width = mChicletPanel->getParent()->getRect().getWidth();
+
+	S32 shrink_headroom = cur_width - min_width;
+	llassert(shrink_headroom >= 0); // the panel cannot get narrower than the minimum
+	return shrink_headroom;
+}
+
 // static
 std::string LLBottomTray::resizeStateToString(EResizeState state)
 {
@@ -1830,4 +1879,54 @@ std::string LLBottomTray::resizeStateToString(EResizeState state)
 	return "UNKNOWN_BUTTON";
 }
 
+// static
+std::string LLBottomTray::resizeStateMaskToString(MASK mask)
+{
+	std::string res;
+
+	bool add_delimiter = false;
+    for (U32 i = 0; i < 16; i++)
+    {
+    	EResizeState state = (EResizeState) (1 << i);
+    	if (mask & state)
+    	{
+    		if (!add_delimiter)
+    		{
+    			add_delimiter = true;
+    		}
+    		else
+    		{
+    			res += ", ";
+    		}
+
+			res += resizeStateToString(state);
+    	}
+    }
+
+    if (res.empty())
+    {
+    	res = resizeStateToString(RS_NORESIZE);
+    }
+
+    res += llformat(" (0x%X)", mask);
+    return res;
+}
+
+bool LLBottomTray::isAutoHidden(MASK button_types) const
+{
+	return (mResizeState & button_types) != 0;
+}
+
+void LLBottomTray::setAutoHidden(MASK button_types, bool hide)
+{
+	if (hide)
+	{
+		mResizeState |= button_types;
+	}
+	else
+	{
+		mResizeState &= ~button_types;
+	}
+}
+
 //EOF
diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h
index 04e5f5e9e07f478b25c4e520c29c77717551ada9..52bcd2ddacf90d3db0d72a885f366843794e6b57 100644
--- a/indra/newview/llbottomtray.h
+++ b/indra/newview/llbottomtray.h
@@ -112,10 +112,6 @@ class LLBottomTray
 
 	void showBottomTrayContextMenu(S32 x, S32 y, MASK mask);
 
-	void showGestureButton(BOOL visible);
-	void showMoveButton(BOOL visible);
-	void showCameraButton(BOOL visible);
-	void showSnapshotButton(BOOL visible);
 	void showSpeakButton(bool visible);
 
 	void toggleMovementControls();
@@ -240,8 +236,9 @@ class LLBottomTray
 	 *
 	 * @params[in, out] available_width - reference to available width to be used to show buttons.
 	 * @see processShowButton()
+	 * @return consumed pixels (difference in available width).
 	 */
-	void processShowButtons(S32& available_width);
+	S32 processShowButtons(S32& available_width);
 
 	/**
 	 * Tries to show panel with specified button using available width.
@@ -316,6 +313,20 @@ class LLBottomTray
 	 */
 	void processExtendButtons(S32& available_width);
 
+	/**
+	 * Extends the Speak button if there is anough headroom.
+	 *
+	 * Unlike other buttons, the Speak buttons has only two possible widths:
+	 * the minimal one (without label) and the maximal (default) one.
+	 *
+	 * If the button is at its minimum width there is not enough headroom to
+	 * reshape it to the maximum width, the method does nothing.
+	 *
+	 * @param available_width Available headroom.
+	 * @return false if the button requires extension but there's not enough headroom, true otherwise.
+	 */
+	bool processExtendSpeakButton(S32& available_width);
+
 	/**
 	 * Extends shown button to increase total taken space.
 	 *
@@ -364,6 +375,16 @@ class LLBottomTray
 	 */
 	static bool toggleShowButton(EResizeState button_type, const LLSD& new_visibility);
 
+	/**
+	 * Show the button if there is enough space.
+	 *
+	 * @param[in]      button_type -    type of button to be shown.
+	 * @param[in, out] available_width  amount of available space on the bottom bar.
+	 *
+	 * @return true if button was shown, false that's not possible (not enough space, etc)
+	 */
+	bool showButton(EResizeState button_type, S32& available_width);
+
 	/**
 	 * Sets passed visibility to object specified by resize type.
 	 */
@@ -417,9 +438,27 @@ class LLBottomTray
 	 */
 	void processChatbarCustomization(S32 new_width);
 
+	/**
+	 * @return difference between current chiclet panel width and the minimum.
+	 */
+	S32 getChicletPanelShrinkHeadroom() const;
+
 	/// Get button name for debugging.
 	static std::string resizeStateToString(EResizeState state);
 
+	/// Dump a mask for debugging
+	static std::string resizeStateMaskToString(MASK mask);
+
+	/// @return true if any of the the passed buttons have been auto-hidden due to lack of available space.
+	bool isAutoHidden(MASK button_types) const;
+
+	/**
+	 * (Un)Mark the buttons as hidden.
+	 *
+	 * Auto-hidden buttons are those that re-appear as soon as we have enough available space.
+	 */
+	void setAutoHidden(MASK button_types, bool hide);
+
 	/// Buttons automatically hidden due to lack of space.
 	MASK mResizeState;
 
diff --git a/indra/newview/llbreastmotion.cpp b/indra/newview/llbreastmotion.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..9a8cd5ceae0ceea0313889dfeee2841a8e738f20
--- /dev/null
+++ b/indra/newview/llbreastmotion.cpp
@@ -0,0 +1,396 @@
+/** 
+ * @file llbreastmotion.cpp
+ * @brief Implementation of LLBreastMotion class.
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+//-----------------------------------------------------------------------------
+// Header Files
+//-----------------------------------------------------------------------------
+#include "llviewerprecompiledheaders.h"
+#include "linden_common.h"
+
+#include "m3math.h"
+#include "v3dmath.h"
+
+#include "llbreastmotion.h"
+#include "llcharacter.h"
+#include "llviewercontrol.h"
+#include "llviewervisualparam.h"
+#include "llvoavatarself.h"
+
+#define MIN_REQUIRED_PIXEL_AREA_BREAST_MOTION 0.f;
+
+#define N_PARAMS 2
+
+// User-set params
+static const std::string breast_param_names_user[N_PARAMS] =
+{
+	"Breast_Female_Cleavage_Driver",
+	"Breast_Gravity_Driver"
+};
+
+// Params driven by this algorithm
+static const std::string breast_param_names_driven[N_PARAMS] =
+{
+	"Breast_Female_Cleavage",
+	"Breast_Gravity"
+};
+
+
+
+LLBreastMotion::LLBreastMotion(const LLUUID &id) : 
+	LLMotion(id),
+	mCharacter(NULL)
+{
+	mName = "breast_motion";
+	mChestState = new LLJointState;
+
+	mBreastMassParam = (F32)1.0;
+	mBreastDragParam = LLVector3((F32)0.1, (F32)0.1, (F32)0.1);
+	mBreastSmoothingParam = (U32)2;
+	mBreastGravityParam = (F32)0.0;
+
+	mBreastSpringParam = LLVector3((F32)3.0, (F32)0.0, (F32)3.0);
+	mBreastGainParam = LLVector3((F32)50.0, (F32)0.0, (F32)50.0);
+	mBreastDampingParam = LLVector3((F32)0.3, (F32)0.0, (F32)0.3);
+	mBreastMaxVelocityParam = LLVector3((F32)10.0, (F32)0.0, (F32)10.0);
+
+	mBreastParamsUser[0] = mBreastParamsUser[1] = mBreastParamsUser[2] = NULL;
+	mBreastParamsDriven[0] = mBreastParamsDriven[1] = mBreastParamsDriven[2] = NULL;
+
+	mCharLastPosition_world_pt = LLVector3(0,0,0);
+	mCharLastVelocity_local_vec = LLVector3(0,0,0);
+	mCharLastAcceleration_local_vec = LLVector3(0,0,0);
+	mBreastLastPosition_local_pt = LLVector3(0,0,0);
+	mBreastLastUpdatePosition_local_pt = LLVector3(0,0,0);
+	mBreastVelocity_local_vec = LLVector3(0,0,0);
+}
+
+LLBreastMotion::~LLBreastMotion()
+{
+}
+
+BOOL LLBreastMotion::onActivate() 
+{ 
+	return TRUE; 
+}
+
+void LLBreastMotion::onDeactivate() 
+{
+}
+
+LLMotion::LLMotionInitStatus LLBreastMotion::onInitialize(LLCharacter *character)
+{
+	mCharacter = character;
+
+	if (!mChestState->setJoint(character->getJoint("mChest")))
+	{
+		return STATUS_FAILURE;
+	}
+
+	mChestState->setUsage(LLJointState::ROT);
+	addJointState( mChestState );
+	
+	for (U32 i=0; i < N_PARAMS; i++)
+	{
+		mBreastParamsUser[i] = NULL;
+		mBreastParamsDriven[i] = NULL;
+		mBreastParamsMin[i] = 0;
+		mBreastParamsMax[i] = 0;
+		if (breast_param_names_user[i] != "" && breast_param_names_driven[i] != "")
+		{
+			mBreastParamsUser[i] = (LLViewerVisualParam*)mCharacter->getVisualParam(breast_param_names_user[i].c_str());
+			mBreastParamsDriven[i] = (LLViewerVisualParam*)mCharacter->getVisualParam(breast_param_names_driven[i].c_str());
+			if (mBreastParamsDriven[i])
+			{
+				mBreastParamsMin[i] = mBreastParamsDriven[i]->getMinWeight();
+				mBreastParamsMax[i] = mBreastParamsDriven[i]->getMaxWeight();
+			}
+		}
+	}
+	
+	mTimer.reset();
+	return STATUS_SUCCESS;
+}
+
+F32 LLBreastMotion::getMinPixelArea() 
+{
+	return MIN_REQUIRED_PIXEL_AREA_BREAST_MOTION;
+}
+	
+
+F32 LLBreastMotion::calculateTimeDelta()
+{
+	const F32 time = mTimer.getElapsedTimeF32();
+	const F32 time_delta = time - mLastTime;
+	mLastTime = time;
+	return time_delta;
+}
+
+// Local space means "parameter space".
+LLVector3 LLBreastMotion::toLocal(const LLVector3 &world_vector)
+{
+	LLVector3 local_vec(0,0,0);
+
+	LLJoint *chest_joint = mChestState->getJoint();
+	const LLQuaternion world_rot = chest_joint->getWorldRotation();
+	
+	// Cleavage
+	LLVector3 breast_dir_world_vec = LLVector3(-1,0,0) * world_rot; // -1 b/c cleavage param changes opposite to direction
+	breast_dir_world_vec.normalize();
+	local_vec[0] = world_vector * breast_dir_world_vec;
+	
+	// Up-Down Bounce
+	LLVector3 breast_up_dir_world_vec = LLVector3(0,0,1) * world_rot;
+	breast_up_dir_world_vec.normalize();
+	local_vec[1] = world_vector * breast_up_dir_world_vec;
+
+	return local_vec;
+}
+
+LLVector3 LLBreastMotion::calculateVelocity_local(const F32 time_delta)
+{
+	LLJoint *chest_joint = mChestState->getJoint();
+	const LLVector3 world_pos_pt = chest_joint->getWorldPosition();
+	const LLQuaternion world_rot = chest_joint->getWorldRotation();
+	const LLVector3 last_world_pos_pt = mCharLastPosition_world_pt;
+	const LLVector3 char_velocity_world_vec = (world_pos_pt-last_world_pos_pt) / time_delta;
+	const LLVector3 char_velocity_local_vec = toLocal(char_velocity_world_vec);
+
+	return char_velocity_local_vec;
+}
+
+LLVector3 LLBreastMotion::calculateAcceleration_local(const LLVector3 &new_char_velocity_local_vec,
+													  const F32 time_delta)
+{
+	LLVector3 char_acceleration_local_vec = new_char_velocity_local_vec - mCharLastVelocity_local_vec;
+	
+	char_acceleration_local_vec = 
+		char_acceleration_local_vec * 1.0/mBreastSmoothingParam + 
+		mCharLastAcceleration_local_vec * (mBreastSmoothingParam-1.0)/mBreastSmoothingParam;
+
+	mCharLastAcceleration_local_vec = char_acceleration_local_vec;
+
+	return char_acceleration_local_vec;
+}
+
+BOOL LLBreastMotion::onUpdate(F32 time, U8* joint_mask)
+{
+	// Skip if disabled globally.
+	if (!gSavedSettings.getBOOL("AvatarPhysics"))
+	{
+		return TRUE;
+	}
+
+	// Higher LOD is better.  This controls the granularity
+	// and frequency of updates for the motions.
+	const F32 lod_factor = LLVOAvatar::sPhysicsLODFactor;
+	if (lod_factor == 0)
+	{
+		return TRUE;
+	}
+	
+	if (mCharacter->getSex() != SEX_FEMALE) return TRUE;
+	const F32 time_delta = calculateTimeDelta();
+	if (time_delta < .01 || time_delta > 10.0) return TRUE;
+
+
+	////////////////////////////////////////////////////////////////////////////////
+	// Get all parameters and settings
+	//
+
+	mBreastMassParam = mCharacter->getVisualParamWeight("Breast_Physics_Mass");
+	mBreastSmoothingParam = (U32)(mCharacter->getVisualParamWeight("Breast_Physics_Smoothing"));
+	mBreastGravityParam = mCharacter->getVisualParamWeight("Breast_Physics_Gravity");
+
+	mBreastSpringParam[0] = mCharacter->getVisualParamWeight("Breast_Physics_Side_Spring");
+	mBreastGainParam[0] = mCharacter->getVisualParamWeight("Breast_Physics_Side_Gain");
+	mBreastDampingParam[0] = mCharacter->getVisualParamWeight("Breast_Physics_Side_Damping");
+	mBreastMaxVelocityParam[0] = mCharacter->getVisualParamWeight("Breast_Physics_Side_Max_Velocity");
+	mBreastDragParam[0] = mCharacter->getVisualParamWeight("Breast_Physics_Side_Drag");
+
+	mBreastSpringParam[1] = mCharacter->getVisualParamWeight("Breast_Physics_UpDown_Spring");
+	mBreastGainParam[1] = mCharacter->getVisualParamWeight("Breast_Physics_UpDown_Gain");
+	mBreastDampingParam[1] = mCharacter->getVisualParamWeight("Breast_Physics_UpDown_Damping");
+	mBreastMaxVelocityParam[1] = mCharacter->getVisualParamWeight("Breast_Physics_UpDown_Max_Velocity");
+	mBreastDragParam[1] = mCharacter->getVisualParamWeight("Breast_Physics_UpDown_Drag");
+
+
+	// Get the current morph parameters.
+	LLVector3 breast_user_local_pt(0,0,0);
+	for (U32 i=0; i < N_PARAMS; i++)
+	{
+		if (mBreastParamsUser[i] != NULL)
+		{
+			breast_user_local_pt[i] = mBreastParamsUser[i]->getWeight();
+		}
+	}
+	
+	LLVector3 breast_current_local_pt = mBreastLastPosition_local_pt;
+
+	//
+	// End parameters and settings
+	////////////////////////////////////////////////////////////////////////////////
+
+
+	////////////////////////////////////////////////////////////////////////////////
+	// Calculate velocity and acceleration in parameter space.
+	//
+
+	const LLVector3 char_velocity_local_vec = calculateVelocity_local(time_delta);
+	const LLVector3 char_acceleration_local_vec = calculateAcceleration_local(char_velocity_local_vec, time_delta);
+	mCharLastVelocity_local_vec = char_velocity_local_vec;
+
+	LLJoint *chest_joint = mChestState->getJoint();
+	mCharLastPosition_world_pt = chest_joint->getWorldPosition();
+
+	//
+	// End velocity and acceleration
+	////////////////////////////////////////////////////////////////////////////////
+
+
+	////////////////////////////////////////////////////////////////////////////////
+	// Calculate the total force 
+	//
+
+	// Spring force is a restoring force towards the original user-set breast position.
+	// F = kx
+	const LLVector3 spring_length_local = breast_current_local_pt-breast_user_local_pt;
+	LLVector3 force_spring_local_vec = -spring_length_local; force_spring_local_vec *= mBreastSpringParam;
+
+	// Acceleration is the force that comes from the change in velocity of the torso.
+	// F = ma + mg
+	LLVector3 force_accel_local_vec = char_acceleration_local_vec * mBreastMassParam;
+	const LLVector3 force_gravity_local_vec = toLocal(LLVector3(0,0,1))* mBreastGravityParam * mBreastMassParam;
+	force_accel_local_vec += force_gravity_local_vec;
+	force_accel_local_vec *= mBreastGainParam;
+
+	// Damping is a restoring force that opposes the current velocity.
+	// F = -kv
+	LLVector3 force_damping_local_vec = -mBreastDampingParam; 
+	force_damping_local_vec *= mBreastVelocity_local_vec;
+	
+	// Drag is a force imparted by velocity, intuitively it is similar to wind resistance.
+	// F = .5v*v
+	LLVector3 force_drag_local_vec = .5*char_velocity_local_vec;
+	force_drag_local_vec *= char_velocity_local_vec;
+	force_drag_local_vec *= mBreastDragParam[0];
+
+	LLVector3 force_net_local_vec = 
+		force_accel_local_vec + 
+		force_gravity_local_vec +
+		force_spring_local_vec + 
+		force_damping_local_vec + 
+		force_drag_local_vec;
+
+	//
+	// End total force
+	////////////////////////////////////////////////////////////////////////////////
+
+	
+	////////////////////////////////////////////////////////////////////////////////
+	// Calculate new params
+	//
+
+	// Calculate the new acceleration based on the net force.
+	// a = F/m
+	LLVector3 acceleration_local_vec = force_net_local_vec / mBreastMassParam;
+	mBreastVelocity_local_vec += acceleration_local_vec;
+	mBreastVelocity_local_vec.clamp(-mBreastMaxVelocityParam*100.0, mBreastMaxVelocityParam*100.0);
+
+	// Temporary debugging setting to cause all avatars to move, for profiling purposes.
+	if (gSavedSettings.getBOOL("AvatarPhysicsTest"))
+	{
+		mBreastVelocity_local_vec[0] = sin(mTimer.getElapsedTimeF32()*4.0)*5.0;
+		mBreastVelocity_local_vec[1] = sin(mTimer.getElapsedTimeF32()*3.0)*5.0;
+	}
+	// Calculate the new parameters and clamp them to the min/max ranges.
+	LLVector3 new_local_pt = breast_current_local_pt + mBreastVelocity_local_vec*time_delta;
+	new_local_pt.clamp(mBreastParamsMin,mBreastParamsMax);
+		
+	// Set the new parameters.
+	for (U32 i=0; i < 3; i++)
+	{
+		// If the param is disabled, just set the param to the user value.
+		if (mBreastMaxVelocityParam[i] == 0)
+		{
+			new_local_pt[i] = breast_user_local_pt[i];
+		}
+		if (mBreastParamsDriven[i])
+		{
+			mCharacter->setVisualParamWeight(mBreastParamsDriven[i],
+											 new_local_pt[i],
+											 FALSE);
+		}
+	}
+
+	mBreastLastPosition_local_pt = new_local_pt;
+	
+	//
+	// End calculate new params
+	////////////////////////////////////////////////////////////////////////////////
+	
+
+	////////////////////////////////////////////////////////////////////////////////
+	// Conditionally update the visual params
+	//
+
+	// Updating the visual params (i.e. what the user sees) is fairly expensive.
+	// So only update if the params have changed enough, and also take into account
+	// the graphics LOD settings.
+	
+	// For non-self, if the avatar is small enough visually, then don't update.
+	const BOOL is_self = (dynamic_cast<LLVOAvatarSelf *>(this) != NULL);
+	if (!is_self)
+	{
+		const F32 area_for_max_settings = 0.0;
+		const F32 area_for_min_settings = 1400.0;
+
+		const F32 area_for_this_setting = area_for_max_settings + (area_for_min_settings-area_for_max_settings)*(1.0-lod_factor);
+		const F32 pixel_area = fsqrtf(mCharacter->getPixelArea());
+		if (pixel_area < area_for_this_setting)
+		{
+			return TRUE;
+		}
+	}
+
+	// If the parameter hasn't changed enough, then don't update.
+	LLVector3 position_diff = mBreastLastUpdatePosition_local_pt-new_local_pt;
+	for (U32 i=0; i < 3; i++)
+	{
+		const F32 min_delta = (1.0-lod_factor)*(mBreastParamsMax[i]-mBreastParamsMin[i])/2.0;
+		if (llabs(position_diff[i]) > min_delta)
+		{
+			mCharacter->updateVisualParams();
+			mBreastLastUpdatePosition_local_pt = new_local_pt;
+			return TRUE;
+		}
+	}
+	
+	//
+	// End update visual params
+	////////////////////////////////////////////////////////////////////////////////
+
+	return TRUE;
+}
diff --git a/indra/newview/llbreastmotion.h b/indra/newview/llbreastmotion.h
new file mode 100644
index 0000000000000000000000000000000000000000..aa0fdf9f8b155f36af0623de8020fbaf687e5aa7
--- /dev/null
+++ b/indra/newview/llbreastmotion.h
@@ -0,0 +1,154 @@
+/** 
+ * @file llbreastmotion.h
+ * @brief Implementation of LLBreastMotion class.
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLBREASTMOTION_H
+#define LL_LLBREASTMOTION_H
+
+//-----------------------------------------------------------------------------
+// Header files
+//-----------------------------------------------------------------------------
+#include "llmotion.h"
+#include "llframetimer.h"
+
+#define BREAST_MOTION_FADEIN_TIME 1.0f
+#define BREAST_MOTION_FADEOUT_TIME 1.0f
+
+class LLViewerVisualParam;
+
+//-----------------------------------------------------------------------------
+// class LLBreastMotion
+//-----------------------------------------------------------------------------
+class LLBreastMotion :
+	public LLMotion
+{
+public:
+	// Constructor
+	LLBreastMotion(const LLUUID &id);
+
+	// Destructor
+	virtual ~LLBreastMotion();
+
+public:
+	//-------------------------------------------------------------------------
+	// functions to support MotionController and MotionRegistry
+	//-------------------------------------------------------------------------
+
+	// static constructor
+	// all subclasses must implement such a function and register it
+	static LLMotion *create(const LLUUID &id) { return new LLBreastMotion(id); }
+
+public:
+	//-------------------------------------------------------------------------
+	// animation callbacks to be implemented by subclasses
+	//-------------------------------------------------------------------------
+
+	// motions must specify whether or not they loop
+	virtual BOOL getLoop() { return TRUE; }
+
+	// motions must report their total duration
+	virtual F32 getDuration() { return 0.0; }
+
+	// motions must report their "ease in" duration
+	virtual F32 getEaseInDuration() { return BREAST_MOTION_FADEIN_TIME; }
+
+	// motions must report their "ease out" duration.
+	virtual F32 getEaseOutDuration() { return BREAST_MOTION_FADEOUT_TIME; }
+
+	// called to determine when a motion should be activated/deactivated based on avatar pixel coverage
+	virtual F32 getMinPixelArea();
+
+	// motions must report their priority
+	virtual LLJoint::JointPriority getPriority() { return LLJoint::MEDIUM_PRIORITY; }
+
+	virtual LLMotionBlendType getBlendType() { return ADDITIVE_BLEND; }
+
+	// run-time (post constructor) initialization,
+	// called after parameters have been set
+	// must return true to indicate success and be available for activation
+	virtual LLMotionInitStatus onInitialize(LLCharacter *character);
+
+	// called when a motion is activated
+	// must return TRUE to indicate success, or else
+	// it will be deactivated
+	virtual BOOL onActivate();
+
+	// called per time step
+	// must return TRUE while it is active, and
+	// must return FALSE when the motion is completed.
+	virtual BOOL onUpdate(F32 time, U8* joint_mask);
+
+	// called when a motion is deactivated
+	virtual void onDeactivate();
+
+protected:
+	LLVector3 toLocal(const LLVector3 &world_vector);
+	LLVector3 calculateVelocity_local(const F32 time_delta);
+	LLVector3 calculateAcceleration_local(const LLVector3 &new_char_velocity_local_vec,
+										  const F32 time_delta);
+	F32 calculateTimeDelta();
+private:
+	//-------------------------------------------------------------------------
+	// joint states to be animated
+	//-------------------------------------------------------------------------
+	LLPointer<LLJointState> mChestState;
+	LLCharacter*		mCharacter;
+
+
+	//-------------------------------------------------------------------------
+	// miscellaneous parameters
+	//-------------------------------------------------------------------------
+	LLViewerVisualParam *mBreastParamsUser[3];
+	LLViewerVisualParam *mBreastParamsDriven[3];
+	LLVector3           mBreastParamsMin;
+	LLVector3           mBreastParamsMax;
+
+	LLVector3           mCharLastPosition_world_pt; // Last position of the avatar
+	LLVector3			mCharLastVelocity_local_vec; // How fast the character is moving
+	LLVector3           mCharLastAcceleration_local_vec; // Change in character velocity
+
+	LLVector3           mBreastLastPosition_local_pt; // Last parameters for breast
+	LLVector3           mBreastVelocity_local_vec; // How fast the breast params are moving
+	LLVector3           mBreastLastUpdatePosition_local_pt; // Last parameters when visual update was sent
+
+
+	F32 mBreastMassParam;
+	F32 mBreastGravityParam;
+	U32 mBreastSmoothingParam;
+
+	LLVector3 mBreastSpringParam;
+	LLVector3 mBreastDampingParam;
+	LLVector3 mBreastGainParam;
+	LLVector3 mBreastMaxVelocityParam;
+	LLVector3 mBreastDragParam;
+
+	LLFrameTimer	mTimer;
+	F32             mLastTime;
+	
+	U32            mFileTicks;
+};
+
+#endif // LL_LLBREASTMOTION_H
+
diff --git a/indra/newview/llcallfloater.cpp b/indra/newview/llcallfloater.cpp
index 328c3262787a2f94f83cbecb1650e892757253ac..945a760d059d51daf24628f4b9c744ca408a3dcb 100644
--- a/indra/newview/llcallfloater.cpp
+++ b/indra/newview/llcallfloater.cpp
@@ -50,6 +50,7 @@
 #include "llviewerwindow.h"
 #include "llvoicechannel.h"
 #include "llviewerparcelmgr.h"
+#include "llfirstuse.h"
 
 static void get_voice_participants_uuids(uuid_vec_t& speakers_uuids);
 void reshape_floater(LLCallFloater* floater, S32 delta_height);
@@ -170,13 +171,13 @@ BOOL LLCallFloater::postBuild()
 	updateTransparency(TT_ACTIVE); // force using active floater transparency (STORM-730)
 	
 	updateSession();
-
 	return TRUE;
 }
 
 // virtual
 void LLCallFloater::onOpen(const LLSD& /*key*/)
 {
+	LLFirstUse::speak(false);
 }
 
 // virtual
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 5ff22f89ab0d2dac22bd055fa2f42362698a0d43..c0c9ea145164b27d65ee4a0d0e201043e78d80d9 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -138,10 +138,7 @@ class LLChatHistoryHeader: public LLPanel
 
 		if (level == "profile")
 		{
-			LLSD params;
-			params["object_id"] = getAvatarId();
-
-			LLFloaterReg::showInstance("inspect_object", params);
+			LLFloaterReg::showInstance("inspect_remote_object", mObjectData);
 		}
 		else if (level == "block")
 		{
@@ -229,7 +226,7 @@ class LLChatHistoryHeader: public LLPanel
 		
 		if (mSourceType == CHAT_SOURCE_OBJECT)
 		{
-			LLFloaterReg::showInstance("inspect_object", LLSD().with("object_id", mAvatarID));
+			LLFloaterReg::showInstance("inspect_remote_object", mObjectData);
 		}
 		else if (mSourceType == CHAT_SOURCE_AGENT)
 		{
@@ -251,7 +248,7 @@ class LLChatHistoryHeader: public LLPanel
 
 	const LLUUID&		getAvatarId () const { return mAvatarID;}
 
-	void setup(const LLChat& chat,const LLStyle::Params& style_params) 
+	void setup(const LLChat& chat, const LLStyle::Params& style_params, const LLSD& args)
 	{
 		mAvatarID = chat.mFromID;
 		mSessionID = chat.mSessionID;
@@ -332,7 +329,8 @@ class LLChatHistoryHeader: public LLPanel
 
 
 		setTimeField(chat);
-		
+
+		// Set up the icon.
 		LLAvatarIconCtrl* icon = getChild<LLAvatarIconCtrl>("avatar_icon");
 
 		if(mSourceType != CHAT_SOURCE_AGENT ||	mAvatarID.isNull())
@@ -352,6 +350,30 @@ class LLChatHistoryHeader: public LLPanel
 			case CHAT_SOURCE_UNKNOWN: 
 				icon->setValue(LLSD("Unknown_Icon"));
 		}
+
+		// In case the message came from an object, save the object info
+		// to be able properly show its profile.
+		if ( chat.mSourceType == CHAT_SOURCE_OBJECT)
+		{
+			std::string slurl = args["slurl"].asString();
+			if (slurl.empty())
+			{
+				LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosAgent(chat.mPosAgent);
+				if(region)
+				{
+					LLSLURL region_slurl(region->getName(), chat.mPosAgent);
+					slurl = region_slurl.getLocationString();
+				}
+			}
+
+			LLSD payload;
+			payload["object_id"]	= chat.mFromID;
+			payload["name"]			= chat.mFromName;
+			payload["owner_id"]		= chat.mOwnerID;
+			payload["slurl"]		= LLWeb::escapeURL(slurl);
+
+			mObjectData = payload;
+		}
 	}
 
 	/*virtual*/ void draw()
@@ -540,6 +562,7 @@ class LLChatHistoryHeader: public LLPanel
 	static LLUICtrl*	sInfoCtrl;
 
 	LLUUID			    mAvatarID;
+	LLSD				mObjectData;
 	EChatSourceType		mSourceType;
 	std::string			mFrom;
 	LLUUID				mSessionID;
@@ -649,10 +672,10 @@ LLView* LLChatHistory::getSeparator()
 	return separator;
 }
 
-LLView* LLChatHistory::getHeader(const LLChat& chat,const LLStyle::Params& style_params)
+LLView* LLChatHistory::getHeader(const LLChat& chat,const LLStyle::Params& style_params, const LLSD& args)
 {
 	LLChatHistoryHeader* header = LLChatHistoryHeader::createInstance(mMessageHeaderFilename);
-	header->setup(chat,style_params);
+	header->setup(chat, style_params, args);
 	return header;
 }
 
@@ -770,21 +793,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
 			if ( chat.mSourceType == CHAT_SOURCE_OBJECT && chat.mFromID.notNull())
 			{
 				// for object IMs, create a secondlife:///app/objectim SLapp
-				std::string url = LLSLURL("objectim", chat.mFromID, "").getSLURLString();
-				url += "?name=" + chat.mFromName;
-				url += "&owner=" + chat.mOwnerID.asString();
-
-				std::string slurl = args["slurl"].asString();
-				if (slurl.empty())
-				{
-				    LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosAgent(chat.mPosAgent);
-				    if(region)
-				      {
-					LLSLURL region_slurl(region->getName(), chat.mPosAgent);
-					slurl = region_slurl.getLocationString();
-				      }
-				}
-				url += "&slurl=" + LLURI::escape(slurl);
+				std::string url = LLViewerChat::getSenderSLURL(chat, args);
 
 				// set the link for the object name to be the objectim SLapp
 				// (don't let object names with hyperlinks override our objectim Url)
@@ -834,7 +843,7 @@ void LLChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
 		}
 		else
 		{
-			view = getHeader(chat, style_params);
+			view = getHeader(chat, style_params, args);
 			if (mEditor->getText().size() == 0)
 				p.top_pad = 0;
 			else
diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h
index ac48d7bf29b82640ba1865dd9860525a7127b304..28344e6a1028f1c1bfaa4c5ba5632a263902a345 100644
--- a/indra/newview/llchathistory.h
+++ b/indra/newview/llchathistory.h
@@ -94,7 +94,7 @@ class LLChatHistory : public LLUICtrl
 		 * Builds a message header.
 		 * @return pointer to LLView header object.
 		 */
-		LLView* getHeader(const LLChat& chat,const LLStyle::Params& style_params);
+		LLView* getHeader(const LLChat& chat,const LLStyle::Params& style_params, const LLSD& args);
 
 		void onClickMoreText();
 
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
index 899e0431e7c29634dd37c8e7ddd7c759151b8eca..8584885bc974e842e63d916ead326abf9e76db4d 100644
--- a/indra/newview/llchatitemscontainerctrl.cpp
+++ b/indra/newview/llchatitemscontainerctrl.cpp
@@ -213,17 +213,6 @@ void LLNearbyChatToastPanel::init(LLSD& notification)
 		{
 			LLStyle::Params style_params_name;
 
-			std::string href;
-
-			if (mSourceType == CHAT_SOURCE_AGENT)
-			{
-				href = LLSLURL("agent", mFromID, "about").getSLURLString();
-			}
-			else
-			{
-				href = LLSLURL("object", mFromID, "inspect").getSLURLString();
-			}
-
 			LLColor4 user_name_color = LLUIColorTable::instance().getColor("HTMLLinkColor");
 			style_params_name.color(user_name_color);
 
@@ -232,7 +221,7 @@ void LLNearbyChatToastPanel::init(LLSD& notification)
 			style_params_name.font.name(font_name);
 			style_params_name.font.size(font_style_size);
 
-			style_params_name.link_href = href;
+			style_params_name.link_href = notification["sender_slurl"].asString();
 			style_params_name.is_link = true;
 
 			msg_text->appendText(str_sender, FALSE, style_params_name);
diff --git a/indra/newview/llcommanddispatcherlistener.cpp b/indra/newview/llcommanddispatcherlistener.cpp
index 5744d055a91db0907f6dc94d43f0e05837c5fccf..586f45fd8f41c8b7dc028c4f2e667cce9b71b3d0 100644
--- a/indra/newview/llcommanddispatcherlistener.cpp
+++ b/indra/newview/llcommanddispatcherlistener.cpp
@@ -65,7 +65,7 @@ void LLCommandDispatcherListener::dispatch(const LLSD& params) const
         trusted_browser = params["trusted"].asBoolean();
     }
     LLCommandDispatcher::dispatch(params["cmd"], params["params"], params["query"], NULL,
-                                  trusted_browser);
+                                  "clicked", trusted_browser);
 }
 
 void LLCommandDispatcherListener::enumerate(const LLSD& params) const
diff --git a/indra/newview/llcommandhandler.cpp b/indra/newview/llcommandhandler.cpp
old mode 100755
new mode 100644
index 360ba080ac9c67c8b1019a19635bdbc8095e5d88..19dba3f9173a0a210736d92f620a96f5ad6283c7
--- a/indra/newview/llcommandhandler.cpp
+++ b/indra/newview/llcommandhandler.cpp
@@ -35,7 +35,7 @@
 // system includes
 #include <boost/tokenizer.hpp>
 
-#define THROTTLE_PERIOD    15    // required secs between throttled commands
+#define THROTTLE_PERIOD    5    // required seconds between throttled commands
 
 static LLCommandDispatcherListener sCommandDispatcherListener;
 
@@ -59,6 +59,7 @@ class LLCommandHandlerRegistry
 				  const LLSD& params,
 				  const LLSD& query_map,
 				  LLMediaCtrl* web,
+				  const std::string& nav_type,
 				  bool trusted_browser);
 
 private:
@@ -91,6 +92,7 @@ bool LLCommandHandlerRegistry::dispatch(const std::string& cmd,
 										const LLSD& params,
 										const LLSD& query_map,
 										LLMediaCtrl* web,
+										const std::string& nav_type,
 										bool trusted_browser)
 {
 	static bool slurl_blocked = false;
@@ -120,11 +122,19 @@ bool LLCommandHandlerRegistry::dispatch(const std::string& cmd,
 			return true;
 
 		case LLCommandHandler::UNTRUSTED_THROTTLE:
+			// if users actually click on a link, we don't need to throttle it
+			// (throttling mechanism is used to prevent an avalanche of clicks via
+			// javascript
+			if ( nav_type == "clicked" )
+			{
+				break;
+			}
+
 			cur_time = LLTimer::getElapsedSeconds();
 			if (cur_time < last_throttle_time + THROTTLE_PERIOD)
 			{
 				// block request from external browser if it happened
-				// within THROTTLE_PERIOD secs of the last command
+				// within THROTTLE_PERIOD seconds of the last command
 				LL_WARNS_ONCE("SLURL") << "Throttled SLURL command from untrusted browser" << LL_ENDL;
 				if (! slurl_throttled)
 				{
@@ -166,10 +176,11 @@ bool LLCommandDispatcher::dispatch(const std::string& cmd,
 								   const LLSD& params,
 								   const LLSD& query_map,
 								   LLMediaCtrl* web,
+								   const std::string& nav_type,
 								   bool trusted_browser)
 {
 	return LLCommandHandlerRegistry::instance().dispatch(
-		cmd, params, query_map, web, trusted_browser);
+		cmd, params, query_map, web, nav_type, trusted_browser);
 }
 
 static std::string lookup(LLCommandHandler::EUntrustedAccess value);
diff --git a/indra/newview/llcommandhandler.h b/indra/newview/llcommandhandler.h
index 1e65b6de239add3af088bd60c7015b31eb911fb8..1e0895565afc13b94de1ac0db0fdfa7d12289b2a 100644
--- a/indra/newview/llcommandhandler.h
+++ b/indra/newview/llcommandhandler.h
@@ -95,6 +95,7 @@ class LLCommandDispatcher
 						 const LLSD& params,
 						 const LLSD& query_map,
 						 LLMediaCtrl* web,
+						 const std::string& nav_type,
 						 bool trusted_browser);
 		// Execute a command registered via the above mechanism,
 		// passing string parameters.
diff --git a/indra/newview/lldateutil.cpp b/indra/newview/lldateutil.cpp
index fcc73a07bc639c915a1c74eb3170b054ac7f0bf8..18ae6107e7d74e8aa1d6106c03291499b9e122e4 100644
--- a/indra/newview/lldateutil.cpp
+++ b/indra/newview/lldateutil.cpp
@@ -32,9 +32,9 @@
 #include "llui.h"
 
 static S32 DAYS_PER_MONTH_NOLEAP[] =
-	{ 31, 28, 21, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+	{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 static S32 DAYS_PER_MONTH_LEAP[] =
-	{ 31, 29, 21, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+	{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 
 static S32 days_from_month(S32 year, S32 month)
 {
diff --git a/indra/newview/lldriverparam.h b/indra/newview/lldriverparam.h
index a0e45cf5e5654091cd282f06969a712863e2fec1..fb1b44458ce76a4eedf162517f278a646abccd17 100644
--- a/indra/newview/lldriverparam.h
+++ b/indra/newview/lldriverparam.h
@@ -30,6 +30,7 @@
 #include "llviewervisualparam.h"
 #include "llwearabletype.h"
 
+class LLPhysicsMotion;
 class LLVOAvatar;
 class LLWearable;
 
@@ -76,6 +77,7 @@ class LLDriverParamInfo : public LLViewerVisualParamInfo
 
 class LLDriverParam : public LLViewerVisualParam
 {
+	friend class LLPhysicsMotion; // physics motion needs to access driven params directly.
 public:
 	LLDriverParam(LLVOAvatar *avatarp);
 	LLDriverParam(LLWearable *wearablep);
diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp
index 5e10f60aba0b972a938bd5f46cc32054476cd8bc..5501b8c2ac24639da7e1b1a55fe84b992e9e57f8 100644
--- a/indra/newview/llexpandabletextbox.cpp
+++ b/indra/newview/llexpandabletextbox.cpp
@@ -123,10 +123,7 @@ void LLExpandableTextBox::LLTextBoxEx::reshape(S32 width, S32 height, BOOL calle
 {
 	LLTextEditor::reshape(width, height, called_from_parent);
 
-	if (getTextPixelHeight() > getRect().getHeight())
-	{
-		showExpandText();
-	}
+	hideOrShowExpandTextAsNeeded();
 }
 
 void LLExpandableTextBox::LLTextBoxEx::setText(const LLStringExplicit& text,const LLStyle::Params& input_params)
@@ -136,17 +133,7 @@ void LLExpandableTextBox::LLTextBoxEx::setText(const LLStringExplicit& text,cons
 	mExpanderVisible = false;
 	LLTextEditor::setText(text, input_params);
 
-	// text contents have changed, segments are cleared out
-	// so hide the expander and determine if we need it
-	//mExpanderVisible = false;
-	if (getTextPixelHeight() > getRect().getHeight())
-	{
-		showExpandText();
-	}
-	else
-	{
-		hideExpandText();
-	}
+	hideOrShowExpandTextAsNeeded();
 }
 
 
@@ -200,6 +187,22 @@ S32 LLExpandableTextBox::LLTextBoxEx::getTextPixelHeight()
 	return getTextBoundingRect().getHeight();
 }
 
+void LLExpandableTextBox::LLTextBoxEx::hideOrShowExpandTextAsNeeded()
+{
+	// Restore the text box contents to calculate the text height properly,
+	// otherwise if a part of the text is hidden under "More" link
+	// getTextPixelHeight() returns only the height of currently visible text
+	// including the "More" link. See STORM-250.
+	hideExpandText();
+
+	// Show the expander a.k.a. "More" link if we need it, depending on text
+	// contents height. If not, keep it hidden.
+	if (getTextPixelHeight() > getRect().getHeight())
+	{
+		showExpandText();
+	}
+}
+
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
 //////////////////////////////////////////////////////////////////////////
diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h
index bce77225c4863d583058b574d46f5431b2cf19a9..f75ef954ffa6210f9f1cf6bcb8c679dd17f64e76 100644
--- a/indra/newview/llexpandabletextbox.h
+++ b/indra/newview/llexpandabletextbox.h
@@ -77,6 +77,12 @@ class LLExpandableTextBox : public LLUICtrl
 		 */
 		void hideExpandText();
 
+		/**
+		 * Shows the "More" link if the text is too high to be completely
+		 * visible without expanding the text box. Hides that link otherwise.
+		 */
+		void hideOrShowExpandTextAsNeeded();
+
 	protected:
 
 		LLTextBoxEx(const Params& p);
diff --git a/indra/newview/llexternaleditor.cpp b/indra/newview/llexternaleditor.cpp
index 54968841ab1521461002482ad0631f39aecfa46f..ed1d7e860a0cfa672fe78857a6b8861059c5169f 100644
--- a/indra/newview/llexternaleditor.cpp
+++ b/indra/newview/llexternaleditor.cpp
@@ -27,6 +27,7 @@
 #include "llviewerprecompiledheaders.h"
 #include "llexternaleditor.h"
 
+#include "lltrans.h"
 #include "llui.h"
 
 // static
@@ -35,13 +36,13 @@ const std::string LLExternalEditor::sFilenameMarker = "%s";
 // static
 const std::string LLExternalEditor::sSetting = "ExternalEditor";
 
-bool LLExternalEditor::setCommand(const std::string& env_var, const std::string& override)
+LLExternalEditor::EErrorCode LLExternalEditor::setCommand(const std::string& env_var, const std::string& override)
 {
 	std::string cmd = findCommand(env_var, override);
 	if (cmd.empty())
 	{
-		llwarns << "Empty editor command" << llendl;
-		return false;
+		llwarns << "Editor command is empty or not set" << llendl;
+		return EC_NOT_SPECIFIED;
 	}
 
 	// Add the filename marker if missing.
@@ -55,7 +56,7 @@ bool LLExternalEditor::setCommand(const std::string& env_var, const std::string&
 	if (tokenize(tokens, cmd) < 2) // 2 = bin + at least one arg (%s)
 	{
 		llwarns << "Error parsing editor command" << llendl;
-		return false;
+		return EC_PARSE_ERROR;
 	}
 
 	// Check executable for existence.
@@ -63,7 +64,7 @@ bool LLExternalEditor::setCommand(const std::string& env_var, const std::string&
 	if (!LLFile::isfile(bin_path))
 	{
 		llwarns << "Editor binary [" << bin_path << "] not found" << llendl;
-		return false;
+		return EC_BINARY_NOT_FOUND;
 	}
 
 	// Save command.
@@ -76,16 +77,16 @@ bool LLExternalEditor::setCommand(const std::string& env_var, const std::string&
 	}
 	llinfos << "Setting command [" << bin_path << " " << mArgs << "]" << llendl;
 
-	return true;
+	return EC_SUCCESS;
 }
 
-bool LLExternalEditor::run(const std::string& file_path)
+LLExternalEditor::EErrorCode LLExternalEditor::run(const std::string& file_path)
 {
 	std::string args = mArgs;
 	if (mProcess.getExecutable().empty() || args.empty())
 	{
 		llwarns << "Editor command not set" << llendl;
-		return false;
+		return EC_NOT_SPECIFIED;
 	}
 
 	// Substitute the filename marker in the command with the actual passed file name.
@@ -111,7 +112,22 @@ bool LLExternalEditor::run(const std::string& file_path)
 		mProcess.orphan();
 	}
 
-	return result == 0;
+	return result == 0 ? EC_SUCCESS : EC_FAILED_TO_RUN;
+}
+
+// static
+std::string LLExternalEditor::getErrorMessage(EErrorCode code)
+{
+	switch (code)
+	{
+	case EC_SUCCESS: 			return LLTrans::getString("ok");
+	case EC_NOT_SPECIFIED: 		return LLTrans::getString("ExternalEditorNotSet");
+	case EC_PARSE_ERROR:		return LLTrans::getString("ExternalEditorCommandParseError");
+	case EC_BINARY_NOT_FOUND:	return LLTrans::getString("ExternalEditorNotFound");
+	case EC_FAILED_TO_RUN:		return LLTrans::getString("ExternalEditorFailedToRun");
+	}
+
+	return LLTrans::getString("Unknown");
 }
 
 // static
diff --git a/indra/newview/llexternaleditor.h b/indra/newview/llexternaleditor.h
index 6ea210d5e222d69dfc81ed3d4d9ab23758ad520b..ef5db56c6ee056e6ed1ee560c20ae2e1abe51e92 100644
--- a/indra/newview/llexternaleditor.h
+++ b/indra/newview/llexternaleditor.h
@@ -42,6 +42,14 @@ class LLExternalEditor
 
 public:
 
+	typedef enum e_error_code {
+		EC_SUCCESS,				/// No error.
+		EC_NOT_SPECIFIED,		/// Editor path not specified.
+		EC_PARSE_ERROR,			/// Editor command parsing error.
+		EC_BINARY_NOT_FOUND,	/// Could find the editor binary (missing or not quoted).
+		EC_FAILED_TO_RUN,		/// Could not execute the editor binary.
+	} EErrorCode;
+
 	/**
 	 * Set editor command.
 	 *
@@ -51,19 +59,25 @@ class LLExternalEditor
 	 * First tries the override, then a predefined setting (sSetting),
 	 * then the environment variable.
 	 *
-	 * @return Command if found, empty string otherwise.
+	 * @return EC_SUCCESS if command is valid and refers to an existing executable,
+	 *         EC_NOT_SPECIFIED or EC_FAILED_TO_RUNan on error.
 	 *
 	 * @see sSetting
 	 */
-	bool setCommand(const std::string& env_var, const std::string& override = LLStringUtil::null);
+	EErrorCode setCommand(const std::string& env_var, const std::string& override = LLStringUtil::null);
 
 	/**
 	 * Run the editor with the given file.
 	 *
 	 * @param file_path File to edit.
-	 * @return true on success, false on error.
+	 * @return EC_SUCCESS on success, error code on error.
+	 */
+	EErrorCode run(const std::string& file_path);
+
+	/**
+	 * Get a meaningful error message for the given status code.
 	 */
-	bool run(const std::string& file_path);
+	static std::string getErrorMessage(EErrorCode code);
 
 private:
 
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
index 92a3b9b2f5716627f58e4785df7bbf7314c0d6c7..279904b74013201b5cf9ff88d81ee90aecccecfa 100644
--- a/indra/newview/llfasttimerview.cpp
+++ b/indra/newview/llfasttimerview.cpp
@@ -1149,36 +1149,6 @@ void LLFastTimerView::doAnalysisDefault(std::string baseline, std::string target
 	os.close();
 }
 
-//-------------------------
-//static
-LLSD LLFastTimerView::analyzeMetricPerformanceLog(std::istream& is)
-{
-	LLSD ret;
-	LLSD cur;
-
-	while (!is.eof() && LLSDSerialize::fromXML(cur, is))
-	{
-		for (LLSD::map_iterator iter = cur.beginMap(); iter != cur.endMap(); ++iter)
-		{
-			std::string label = iter->first;
-
-			LLMetricPerformanceTesterBasic* tester = LLMetricPerformanceTesterBasic::getTester(iter->second["Name"].asString()) ;
-			if(tester)
-			{
-				ret[label]["Name"] = iter->second["Name"] ;
-
-				S32 num_of_metrics = tester->getNumberOfMetrics() ;
-				for(S32 index = 0 ; index < num_of_metrics ; index++)
-				{
-					ret[label][ tester->getMetricName(index) ] = iter->second[ tester->getMetricName(index) ] ;
-				}
-			}
-		}
-	}
-		
-	return ret;
-}
-
 //static
 void LLFastTimerView::outputAllMetrics()
 {
@@ -1193,48 +1163,6 @@ void LLFastTimerView::outputAllMetrics()
 	}
 }
 
-//static
-void LLFastTimerView::doAnalysisMetrics(std::string baseline, std::string target, std::string output)
-{
-	if(!LLMetricPerformanceTesterBasic::hasMetricPerformanceTesters())
-	{
-		return ;
-	}
-
-	// Open baseline and current target, exit if one is inexistent
-	std::ifstream base_is(baseline.c_str());
-	std::ifstream target_is(target.c_str());
-	if (!base_is.is_open() || !target_is.is_open())
-	{
-		llwarns << "'-analyzeperformance' error : baseline or current target file inexistent" << llendl;
-		base_is.close();
-		target_is.close();
-		return;
-	}
-
-	//analyze baseline
-	LLSD base = analyzeMetricPerformanceLog(base_is);
-	base_is.close();
-
-	//analyze current
-	LLSD current = analyzeMetricPerformanceLog(target_is);
-	target_is.close();
-
-	//output comparision
-	std::ofstream os(output.c_str());
-	
-	os << "Label, Metric, Base(B), Target(T), Diff(T-B), Percentage(100*T/B)\n"; 
-	for(LLMetricPerformanceTesterBasic::name_tester_map_t::iterator iter = LLMetricPerformanceTesterBasic::sTesterMap.begin() ; 
-		iter != LLMetricPerformanceTesterBasic::sTesterMap.end() ; ++iter)
-	{
-		LLMetricPerformanceTesterBasic* tester = ((LLMetricPerformanceTesterBasic*)iter->second) ;	
-		tester->analyzePerformance(&os, &base, &current) ;
-	}
-	
-	os.flush();
-	os.close();
-}
-
 //static
 void LLFastTimerView::doAnalysis(std::string baseline, std::string target, std::string output)
 {
@@ -1246,7 +1174,7 @@ void LLFastTimerView::doAnalysis(std::string baseline, std::string target, std::
 
 	if(LLFastTimer::sMetricLog)
 	{
-		doAnalysisMetrics(baseline, target, output) ;
+		LLMetricPerformanceTesterBasic::doAnalysisMetrics(baseline, target, output) ;
 		return ;
 	}
 }
diff --git a/indra/newview/llfasttimerview.h b/indra/newview/llfasttimerview.h
index 1a54a53f09660975035eb5e17cacfcaeeaca4f64..b40d7ffc1a20642b39636c6936565fe3a71fa702 100644
--- a/indra/newview/llfasttimerview.h
+++ b/indra/newview/llfasttimerview.h
@@ -42,8 +42,6 @@ class LLFastTimerView : public LLFloater
 
 private:
 	static void doAnalysisDefault(std::string baseline, std::string target, std::string output) ;
-	static void doAnalysisMetrics(std::string baseline, std::string target, std::string output) ;
-	static LLSD analyzeMetricPerformanceLog(std::istream& is) ;
 	static LLSD analyzePerformanceLogDefault(std::istream& is) ;
 
 public:
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
index 4d252dc662f80652b6c697427d592fbc301cd707..2c4153688a2709f1d875333857b8a5f2fa245ed1 100644
--- a/indra/newview/llfirstuse.cpp
+++ b/indra/newview/llfirstuse.cpp
@@ -41,36 +41,35 @@
 
 
 // static
-//std::set<std::string> LLFirstUse::sConfigVariables;
-std::set<std::string> LLFirstUse::sConfigVariablesEnabled;
+std::set<std::string> LLFirstUse::sConfigVariables;
 
 // static
-//void LLFirstUse::addConfigVariable(const std::string& var)
-//{
-//	sConfigVariables.insert(var);
-//}
+void LLFirstUse::addConfigVariable(const std::string& var)
+{
+	sConfigVariables.insert(var);
+}
 
 // static
-//void LLFirstUse::disableFirstUse()
-//{
-//	// Set all first-use warnings to disabled
-//	for (std::set<std::string>::iterator iter = sConfigVariables.begin();
-//		 iter != sConfigVariables.end(); ++iter)
-//	{
-//		gWarningSettings.setBOOL(*iter, FALSE);
-//	}
-//}
+void LLFirstUse::disableFirstUse()
+{
+	// Set all first-use warnings to disabled
+	for (std::set<std::string>::iterator iter = sConfigVariables.begin();
+		 iter != sConfigVariables.end(); ++iter)
+	{
+		gWarningSettings.setBOOL(*iter, FALSE);
+	}
+}
 
 // static
-//void LLFirstUse::resetFirstUse()
-//{
-//	// Set all first-use warnings to disabled
-//	for (std::set<std::string>::iterator iter = sConfigVariables.begin();
-//		 iter != sConfigVariables.end(); ++iter)
-//	{
-//		gWarningSettings.setBOOL(*iter, TRUE);
-//	}
-//}
+void LLFirstUse::resetFirstUse()
+{
+	// Set all first-use warnings to disabled
+	for (std::set<std::string>::iterator iter = sConfigVariables.begin();
+		 iter != sConfigVariables.end(); ++iter)
+	{
+		gWarningSettings.setBOOL(*iter, TRUE);
+	}
+}
 
 // static
 void LLFirstUse::otherAvatarChatFirst(bool enable)
@@ -78,6 +77,12 @@ void LLFirstUse::otherAvatarChatFirst(bool enable)
 	firstUseNotification("FirstOtherChatBeforeUser", enable, "HintChat", LLSD(), LLSD().with("target", "chat_bar").with("direction", "top_right").with("distance", 24));
 }
 
+// static
+void LLFirstUse::speak(bool enable)
+{
+	firstUseNotification("FirstSpeak", enable, "HintSpeak", LLSD(), LLSD().with("target", "speak_btn").with("direction", "top"));
+}
+
 // static
 void LLFirstUse::sit(bool enable)
 {
@@ -104,13 +109,6 @@ void LLFirstUse::notUsingDestinationGuide(bool enable)
 	firstUseNotification("FirstNotUseDestinationGuide", enable, "HintDestinationGuide", LLSD(), LLSD().with("target", "dest_guide_btn").with("direction", "top"));
 }
 
-void LLFirstUse::notUsingAvatarPicker(bool enable)
-{
-	// not doing this yet
-	firstUseNotification("FirstNotUseAvatarPicker", enable, "HintAvatarPicker", LLSD(), LLSD().with("target", "avatar_picker_btn").with("direction", "top"));
-}
-
-
 // static
 void LLFirstUse::notUsingSidePanel(bool enable)
 {
@@ -123,7 +121,11 @@ void LLFirstUse::notMoving(bool enable)
 {
 	// fire off 2 notifications and rely on filtering to select the relevant one
 	firstUseNotification("FirstNotMoving", enable, "HintMove", LLSD(), LLSD().with("target", "move_btn").with("direction", "top"));
-	firstUseNotification("FirstNotMoving", enable, "HintMoveArrows", LLSD(), LLSD().with("target", "bottom_tray").with("direction", "top").with("hint_image", "arrow_keys.png").with("down_arrow", ""));
+	firstUseNotification("FirstNotMoving", enable, "HintMoveClick", LLSD(), LLSD()
+		.with("target", "nav_bar")
+		.with("direction", "bottom")
+		.with("hint_image", "click_to_move.png")
+		.with("up_arrow", ""));
 }
 
 // static
@@ -152,21 +154,13 @@ void LLFirstUse::firstUseNotification(const std::string& control_var, bool enabl
 
 	if (enable)
 	{
-		if(sConfigVariablesEnabled.find(control_var) != sConfigVariablesEnabled.end())
-		{
-			return ; //already added
-		}
-
 		if (gSavedSettings.getBOOL("EnableUIHints"))
 		{
 			LL_DEBUGS("LLFirstUse") << "Trigger first use notification " << notification_name << LL_ENDL;
 
 			// if notification doesn't already exist and this notification hasn't been disabled...
 			if (gWarningSettings.getBOOL(control_var))
-			{ 
-				sConfigVariablesEnabled.insert(control_var) ;
-
-				// create new notification
+			{ // create new notification
 				LLNotifications::instance().add(LLNotification::Params().name(notification_name).substitutions(args).payload(payload.with("control_var", control_var)));
 			}
 		}
@@ -178,6 +172,7 @@ void LLFirstUse::firstUseNotification(const std::string& control_var, bool enabl
 		// redundantly clear settings var here, in case there are no notifications to cancel
 		gWarningSettings.setBOOL(control_var, FALSE);
 	}
+
 }
 
 // static
diff --git a/indra/newview/llfirstuse.h b/indra/newview/llfirstuse.h
index 489f58626a07c849ccfa2800dead70365a51e5a3..4c8c9d3cde6b00fd622014652d3cedc13e45b95f 100644
--- a/indra/newview/llfirstuse.h
+++ b/indra/newview/llfirstuse.h
@@ -68,6 +68,8 @@ object or from inventory.
 13. First time you open the debug menus (ctrl-alt-shift D)
 
 14. First time you create/edit a sculpted prim.
+
+15. Explanation of Speak&flyout buttons.
 */
 
 class LLNotification;
@@ -78,16 +80,16 @@ class LLFirstUse
 public:
 
 	// Add a config variable to be reset on resetFirstUse()
-	//static void addConfigVariable(const std::string& var);
+	static void addConfigVariable(const std::string& var);
 	
 	// Sets all controls back to show the dialogs.
-	//static void disableFirstUse();
-	//static void resetFirstUse();
+	static void disableFirstUse();
+	static void resetFirstUse();
 
 	static void otherAvatarChatFirst(bool enable = true);
+	static void speak(bool enable = true);
 	static void sit(bool enable = true);
 	static void notUsingDestinationGuide(bool enable = true);
-	static void notUsingAvatarPicker(bool enable = true);
 	static void notUsingSidePanel(bool enable = true);
 	static void notMoving(bool enable = true);
 	static void viewPopup(bool enable = true);
@@ -98,8 +100,7 @@ class LLFirstUse
 	
 protected:
 	static void firstUseNotification(const std::string& control_var, bool enable, const std::string& notification_name, LLSD args = LLSD(), LLSD payload = LLSD());
-	//static std::set<std::string> sConfigVariables;
-	static std::set<std::string> sConfigVariablesEnabled;
+	static std::set<std::string> sConfigVariables;
 
 	static void init();
 	static bool processNotification(const LLSD& notify);
diff --git a/indra/newview/llfloaterbeacons.cpp b/indra/newview/llfloaterbeacons.cpp
index e24df948c42857e0bb39bf749caca6f5bb2cd139..316294a477408d700e5019d709b79232e7327aa0 100644
--- a/indra/newview/llfloaterbeacons.cpp
+++ b/indra/newview/llfloaterbeacons.cpp
@@ -48,6 +48,7 @@ LLFloaterBeacons::LLFloaterBeacons(const LLSD& seed)
 	LLPipeline::setRenderParticleBeacons(     gSavedSettings.getBOOL("particlesbeacon"));
 	LLPipeline::setRenderHighlights(          gSavedSettings.getBOOL("renderhighlights"));
 	LLPipeline::setRenderBeacons(             gSavedSettings.getBOOL("renderbeacons"));
+	LLPipeline::setRenderMOAPBeacons(		  gSavedSettings.getBOOL("moapbeacon"));
 	mCommitCallbackRegistrar.add("Beacons.UICheck",	boost::bind(&LLFloaterBeacons::onClickUICheck, this,_1));
 }
 
@@ -96,6 +97,7 @@ void LLFloaterBeacons::onClickUICheck(LLUICtrl *ctrl)
 	else if(name == "physical")       LLPipeline::setRenderPhysicalBeacons(check->get());
 	else if(name == "sounds")         LLPipeline::setRenderSoundBeacons(check->get());
 	else if(name == "particles")      LLPipeline::setRenderParticleBeacons(check->get());
+	else if(name == "moapbeacon")     LLPipeline::setRenderMOAPBeacons(check->get());
 	else if(name == "highlights")
 	{
 		LLPipeline::toggleRenderHighlights(NULL);
diff --git a/indra/newview/llfloaterbump.cpp b/indra/newview/llfloaterbump.cpp
index 61cf4dad93a762a7cd7b9b463e649c50b4db7075..eeb81085bbbf017855e1c63eaffabfba95fd6ed1 100644
--- a/indra/newview/llfloaterbump.cpp
+++ b/indra/newview/llfloaterbump.cpp
@@ -38,13 +38,11 @@
 ///----------------------------------------------------------------------------
 /// Class LLFloaterBump
 ///----------------------------------------------------------------------------
-extern BOOL gNoRender;
 
 // Default constructor
 LLFloaterBump::LLFloaterBump(const LLSD& key) 
 :	LLFloater(key)
 {
-	if(gNoRender) return;
 }
 
 
diff --git a/indra/newview/llfloaterhelpbrowser.cpp b/indra/newview/llfloaterhelpbrowser.cpp
index a650886d89f60d08b31bdb2487349f0206ee38ad..627defd006890cb965fb47f52ccae1cd7d931788 100644
--- a/indra/newview/llfloaterhelpbrowser.cpp
+++ b/indra/newview/llfloaterhelpbrowser.cpp
@@ -50,6 +50,7 @@ BOOL LLFloaterHelpBrowser::postBuild()
 {
 	mBrowser = getChild<LLMediaCtrl>("browser");
 	mBrowser->addObserver(this);
+	mBrowser->setErrorPageURL(gSavedSettings.getString("GenericErrorPageURL"));
 
 	childSetAction("open_browser", onClickOpenWebBrowser, this);
 
diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp
index c7fbdd57459a322e887f6c5546637dc366c18bd8..d76e7885bcac273a836836fe434db460c721afe2 100644
--- a/indra/newview/llfloaterimagepreview.cpp
+++ b/indra/newview/llfloaterimagepreview.cpp
@@ -325,122 +325,51 @@ void LLFloaterImagePreview::draw()
 bool LLFloaterImagePreview::loadImage(const std::string& src_filename)
 {
 	std::string exten = gDirUtilp->getExtension(src_filename);
-	
-	U32 codec = IMG_CODEC_INVALID;
-	std::string temp_str;
-	if( exten == "bmp")
-	{
-		codec = IMG_CODEC_BMP;
-	}
-	else if( exten == "tga")
-	{
-		codec = IMG_CODEC_TGA;
-	}
-	else if( exten == "jpg" || exten == "jpeg")
-	{
-		codec = IMG_CODEC_JPEG;
-	}
-	else if( exten == "png" )
-	{
-		codec = IMG_CODEC_PNG;
-	}
+	U32 codec = LLImageBase::getCodecFromExtension(exten);
 
 	LLImageDimensionsInfo image_info;
-	if(!image_info.load(src_filename,codec))
+	if (!image_info.load(src_filename,codec))
 	{
 		mImageLoadError = image_info.getLastError();
 		return false;
 	}
 
 	S32 max_width = gSavedSettings.getS32("max_texture_dimension_X");
-	S32 max_heigh = gSavedSettings.getS32("max_texture_dimension_Y");
+	S32 max_height = gSavedSettings.getS32("max_texture_dimension_Y");
 
-	if(image_info.getWidth() > max_width|| image_info.getHeight() > max_heigh)
+	if ((image_info.getWidth() > max_width) || (image_info.getHeight() > max_height))
 	{
 		LLStringUtil::format_map_t args;
 		args["WIDTH"] = llformat("%d", max_width);
-		args["HEIGHT"] = llformat("%d", max_heigh);
+		args["HEIGHT"] = llformat("%d", max_height);
 
 		mImageLoadError = LLTrans::getString("texture_load_dimensions_error", args);
 		return false;
 	}
 	
-
+	// Load the image
+	LLPointer<LLImageFormatted> image = LLImageFormatted::createFromType(codec);
+	if (image.isNull())
+	{
+		return false;
+	}
+	if (!image->load(src_filename))
+	{
+		return false;
+	}
+	// Decompress or expand it in a raw image structure
 	LLPointer<LLImageRaw> raw_image = new LLImageRaw;
-
-	switch (codec)
+	if (!image->decode(raw_image, 0.0f))
 	{
-	case IMG_CODEC_BMP:
-		{
-			LLPointer<LLImageBMP> bmp_image = new LLImageBMP;
-
-			if (!bmp_image->load(src_filename))
-			{
-				return false;
-			}
-			
-			if (!bmp_image->decode(raw_image, 0.0f))
-			{
-				return false;
-			}
-		}
-		break;
-	case IMG_CODEC_TGA:
-		{
-			LLPointer<LLImageTGA> tga_image = new LLImageTGA;
-
-			if (!tga_image->load(src_filename))
-			{
-				return false;
-			}
-			
-			if (!tga_image->decode(raw_image))
-			{
-				return false;
-			}
-
-			if(	(tga_image->getComponents() != 3) &&
-				(tga_image->getComponents() != 4) )
-			{
-				tga_image->setLastError( "Image files with less than 3 or more than 4 components are not supported." );
-				return false;
-			}
-		}
-		break;
-	case IMG_CODEC_JPEG:
-		{
-			LLPointer<LLImageJPEG> jpeg_image = new LLImageJPEG;
-
-			if (!jpeg_image->load(src_filename))
-			{
-				return false;
-			}
-			
-			if (!jpeg_image->decode(raw_image, 0.0f))
-			{
-				return false;
-			}
-		}
-		break;
-	case IMG_CODEC_PNG:
-		{
-			LLPointer<LLImagePNG> png_image = new LLImagePNG;
-
-			if (!png_image->load(src_filename))
-			{
-				return false;
-			}
-			
-			if (!png_image->decode(raw_image, 0.0f))
-			{
-				return false;
-			}
-		}
-		break;
-	default:
 		return false;
 	}
-
+	// Check the image constraints
+	if ((image->getComponents() != 3) && (image->getComponents() != 4))
+	{
+		image->setLastError("Image files with less than 3 or more than 4 components are not supported.");
+		return false;
+	}
+	
 	raw_image->biasedScaleToPowerOfTwo(1024);
 	mRawImagep = raw_image;
 	
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
index a6025661b75c79263acb3fd50b4a40dffb748ed9..7be4ebc6908406a5904c2c1c4392ba18fcc69874 100644
--- a/indra/newview/llfloaterland.cpp
+++ b/indra/newview/llfloaterland.cpp
@@ -2871,7 +2871,10 @@ void LLPanelLandCovenant::refresh()
 	LLTextBox* region_landtype = getChild<LLTextBox>("region_landtype_text");
 	if (region_landtype)
 	{
-		region_landtype->setText(region->getSimProductName());
+		std::string land_type;
+		bool is_land_type_localized = LLTrans::findString(land_type, region->getSimProductName());
+
+		region_landtype->setText(is_land_type_localized ? land_type : region->getSimProductName());
 	}
 	
 	LLTextBox* region_maturity = getChild<LLTextBox>("region_maturity_text");
diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp
index 80920c80d650b9d13d71a71eb2c0c60b0a1b6900..641e64247bab0c98ce43a27cb51c1e2a70eee00e 100644
--- a/indra/newview/llfloatermap.cpp
+++ b/indra/newview/llfloatermap.cpp
@@ -42,7 +42,6 @@
 #include "llviewercamera.h"
 #include "lldraghandle.h"
 #include "lltextbox.h"
-#include "llviewermenu.h"
 #include "llfloaterworldmap.h"
 #include "llagent.h"
 
@@ -63,7 +62,6 @@ const S32 MAP_PADDING_BOTTOM = 0;
 
 LLFloaterMap::LLFloaterMap(const LLSD& key) 
 	: LLFloater(key),
-	  mPopupMenu(NULL),
 	  mTextBoxEast(NULL),
 	  mTextBoxNorth(NULL),
 	  mTextBoxWest(NULL),
@@ -83,8 +81,14 @@ LLFloaterMap::~LLFloaterMap()
 BOOL LLFloaterMap::postBuild()
 {
 	mMap = getChild<LLNetMap>("Net Map");
-	mMap->setToolTipMsg(gSavedSettings.getBOOL("DoubleClickTeleport") ? 
-		getString("AltToolTipMsg") : getString("ToolTipMsg"));
+	if (gSavedSettings.getBOOL("DoubleClickTeleport"))
+	{
+		mMap->setToolTipMsg(getString("AltToolTipMsg"));
+	}
+	else if (gSavedSettings.getBOOL("DoubleClickShowWorldMap"))
+	{
+		mMap->setToolTipMsg(getString("ToolTipMsg"));
+	}
 	sendChildToBack(mMap);
 	
 	mTextBoxNorth = getChild<LLTextBox> ("floater_map_north");
@@ -96,17 +100,6 @@ BOOL LLFloaterMap::postBuild()
 	mTextBoxSouthWest = getChild<LLTextBox> ("floater_map_southwest");
 	mTextBoxNorthWest = getChild<LLTextBox> ("floater_map_northwest");
 
-	LLUICtrl::CommitCallbackRegistry::ScopedRegistrar registrar;
-	
-	registrar.add("Minimap.Zoom", boost::bind(&LLFloaterMap::handleZoom, this, _2));
-	registrar.add("Minimap.Tracker", boost::bind(&LLFloaterMap::handleStopTracking, this, _2));
-
-	mPopupMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_mini_map.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
-	if (mPopupMenu && !LLTracker::isTracking(0))
-	{
-		mPopupMenu->setItemEnabled ("Stop Tracking", false);
-	}
-
 	stretchMiniMap(getRect().getWidth() - MAP_PADDING_LEFT - MAP_PADDING_RIGHT
 		,getRect().getHeight() - MAP_PADDING_TOP - MAP_PADDING_BOTTOM);
 
@@ -150,24 +143,13 @@ BOOL LLFloaterMap::handleDoubleClick(S32 x, S32 y, MASK mask)
 		// If DoubleClickTeleport is on, double clicking the minimap will teleport there
 		gAgent.teleportViaLocationLookAt(pos_global);
 	}
-	else 
+	else if (gSavedSettings.getBOOL("DoubleClickShowWorldMap"))
 	{
 		LLFloaterReg::showInstance("world_map");
 	}
 	return TRUE;
 }
 
-BOOL LLFloaterMap::handleRightMouseDown(S32 x, S32 y, MASK mask)
-{
-	if (mPopupMenu)
-	{
-		mPopupMenu->buildDrawLabels();
-		mPopupMenu->updateParent(LLMenuGL::sMenuContainer);
-		LLMenuGL::showPopup(this, mPopupMenu, x, y);
-	}
-	return TRUE;
-}
-
 void LLFloaterMap::setDirectionPos( LLTextBox* text_box, F32 rotation )
 {
 	// Rotation is in radians.
@@ -238,11 +220,6 @@ void LLFloaterMap::draw()
 		getDragHandle()->setMouseOpaque(TRUE);
 	}
 	
-	if (LLTracker::isTracking(0))
-	{
-		mPopupMenu->setItemEnabled ("Stop Tracking", true);
-	}
-	
 	LLFloater::draw();
 }
 
@@ -309,14 +286,6 @@ void LLFloaterMap::handleZoom(const LLSD& userdata)
 	}
 }
 
-void LLFloaterMap::handleStopTracking (const LLSD& userdata)
-{
-	if (mPopupMenu)
-	{
-		mPopupMenu->setItemEnabled ("Stop Tracking", false);
-		LLTracker::stopTracking ((void*)LLTracker::isTracking(NULL));
-	}
-}
 void	LLFloaterMap::setMinimized(BOOL b)
 {
 	LLFloater::setMinimized(b);
diff --git a/indra/newview/llfloatermap.h b/indra/newview/llfloatermap.h
index 4cbb48fb3e1989335f8a4975f0386797d37f7545..5cf66a594bf249f9683f70b0621869e1e761b068 100644
--- a/indra/newview/llfloatermap.h
+++ b/indra/newview/llfloatermap.h
@@ -29,7 +29,6 @@
 
 #include "llfloater.h"
 
-class LLMenuGL;
 class LLNetMap;
 class LLTextBox;
 
@@ -44,7 +43,6 @@ class LLFloaterMap : public LLFloater
 	
 	/*virtual*/ BOOL 	postBuild();
 	/*virtual*/ BOOL	handleDoubleClick( S32 x, S32 y, MASK mask );
-	/*virtual*/ BOOL	handleRightMouseDown( S32 x, S32 y, MASK mask );
 	/*virtual*/ void	reshape(S32 width, S32 height, BOOL called_from_parent = TRUE);
 	/*virtual*/ void	draw();
 	/*virtual*/ void	onFocusLost();
@@ -54,14 +52,11 @@ class LLFloaterMap : public LLFloater
 	
 private:
 	void handleZoom(const LLSD& userdata);
-	void handleStopTracking (const LLSD& userdata);
 	void setDirectionPos( LLTextBox* text_box, F32 rotation );
 	void updateMinorDirections();
 
 	void stretchMiniMap(S32 width,S32 height);
 	
-	LLMenuGL*		mPopupMenu;
-
 	LLTextBox*		mTextBoxEast;
 	LLTextBox*		mTextBoxNorth;
 	LLTextBox*		mTextBoxWest;
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
old mode 100755
new mode 100644
index 724096b443a11c2ee7927733b5ec4839c6608707..c7fce83b03117a8afc61086c316612da60506488
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -43,6 +43,7 @@
 #include "llcombobox.h"
 #include "llcommandhandler.h"
 #include "lldirpicker.h"
+#include "lleventtimer.h"
 #include "llfeaturemanager.h"
 #include "llfocusmgr.h"
 //#include "llfirstuse.h"
@@ -73,6 +74,7 @@
 #include "llviewerwindow.h"
 #include "llviewermessage.h"
 #include "llviewershadermgr.h"
+#include "llviewerthrottle.h"
 #include "llvotree.h"
 #include "llvosky.h"
 
@@ -109,6 +111,7 @@
 
 const F32 MAX_USER_FAR_CLIP = 512.f;
 const F32 MIN_USER_FAR_CLIP = 64.f;
+const F32 BANDWIDTH_UPDATER_TIMEOUT = 0.5f;
 
 //control value for middle mouse as talk2push button
 const static std::string MIDDLE_MOUSE_CV = "MiddleMouse";
@@ -285,8 +288,8 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key)
 	mGotPersonalInfo(false),
 	mOriginalIMViaEmail(false),
 	mLanguageChanged(false),
-	mDoubleClickActionDirty(false),
-	mFavoritesRecordMayExist(false)
+	mAvatarDataInitialized(false),
+	mDoubleClickActionDirty(false)
 {
 	
 	//Build Floater is now Called from 	LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPreference>);
@@ -343,7 +346,7 @@ void LLFloaterPreference::processProperties( void* pData, EAvatarProcessorType t
 	if ( APT_PROPERTIES == type )
 	{
 		const LLAvatarData* pAvatarData = static_cast<const LLAvatarData*>( pData );
-		if( pAvatarData && gAgent.getID() == pAvatarData->avatar_id )
+		if (pAvatarData && (gAgent.getID() == pAvatarData->avatar_id) && (pAvatarData->avatar_id != LLUUID::null))
 		{
 			storeAvatarProperties( pAvatarData );
 			processProfileProperties( pAvatarData );
@@ -353,14 +356,19 @@ void LLFloaterPreference::processProperties( void* pData, EAvatarProcessorType t
 
 void LLFloaterPreference::storeAvatarProperties( const LLAvatarData* pAvatarData )
 {
-	mAvatarProperties.avatar_id		= gAgent.getID();
-	mAvatarProperties.image_id		= pAvatarData->image_id;
-	mAvatarProperties.fl_image_id   = pAvatarData->fl_image_id;
-	mAvatarProperties.about_text	= pAvatarData->about_text;
-	mAvatarProperties.fl_about_text = pAvatarData->fl_about_text;
-	mAvatarProperties.profile_url   = pAvatarData->profile_url;
-	mAvatarProperties.flags		    = pAvatarData->flags;
-	mAvatarProperties.allow_publish	= pAvatarData->flags & AVATAR_ALLOW_PUBLISH;
+	if (LLStartUp::getStartupState() == STATE_STARTED)
+	{
+		mAvatarProperties.avatar_id		= pAvatarData->avatar_id;
+		mAvatarProperties.image_id		= pAvatarData->image_id;
+		mAvatarProperties.fl_image_id   = pAvatarData->fl_image_id;
+		mAvatarProperties.about_text	= pAvatarData->about_text;
+		mAvatarProperties.fl_about_text = pAvatarData->fl_about_text;
+		mAvatarProperties.profile_url   = pAvatarData->profile_url;
+		mAvatarProperties.flags		    = pAvatarData->flags;
+		mAvatarProperties.allow_publish	= pAvatarData->flags & AVATAR_ALLOW_PUBLISH;
+
+		mAvatarDataInitialized = true;
+	}
 }
 
 void LLFloaterPreference::processProfileProperties(const LLAvatarData* pAvatarData )
@@ -370,15 +378,31 @@ void LLFloaterPreference::processProfileProperties(const LLAvatarData* pAvatarDa
 
 void LLFloaterPreference::saveAvatarProperties( void )
 {
-	mAvatarProperties.allow_publish = getChild<LLUICtrl>("online_searchresults")->getValue();
-	if ( mAvatarProperties.allow_publish )
+	const BOOL allowPublish = getChild<LLUICtrl>("online_searchresults")->getValue();
+
+	if (allowPublish)
 	{
 		mAvatarProperties.flags |= AVATAR_ALLOW_PUBLISH;
 	}
-	
-	LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesUpdate( &mAvatarProperties );
-}
 
+	//
+	// NOTE: We really don't want to send the avatar properties unless we absolutely
+	//       need to so we can avoid the accidental profile reset bug, so, if we're
+	//       logged in, the avatar data has been initialized and we have a state change
+	//       for the "allow publish" flag, then set the flag to its new value and send
+	//       the properties update.
+	//
+	// NOTE: The only reason we can not remove this update altogether is because of the
+	//       "allow publish" flag, the last remaining profile setting in the viewer
+	//       that doesn't exist in the web profile.
+	//
+	if ((LLStartUp::getStartupState() == STATE_STARTED) && mAvatarDataInitialized && (allowPublish != mAvatarProperties.allow_publish))
+	{
+		mAvatarProperties.allow_publish = allowPublish;
+
+		LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesUpdate( &mAvatarProperties );
+	}
+}
 
 BOOL LLFloaterPreference::postBuild()
 {
@@ -390,6 +414,8 @@ BOOL LLFloaterPreference::postBuild()
 
 	gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&LLNearbyChat::processChatHistoryStyleUpdate, _2));
 
+	gSavedSettings.getControl("ChatFontSize")->getSignal()->connect(boost::bind(&LLViewerChat::signalChatFontChanged));
+
 	gSavedSettings.getControl("ChatBubbleOpacity")->getSignal()->connect(boost::bind(&LLFloaterPreference::onNameTagOpacityChange, this, _2));
 
 	LLTabContainer* tabcontainer = getChild<LLTabContainer>("pref core");
@@ -543,34 +569,6 @@ void LLFloaterPreference::apply()
 		updateDoubleClickSettings();
 		mDoubleClickActionDirty = false;
 	}
-
-	if (mFavoritesRecordMayExist && !gSavedPerAccountSettings.getBOOL("ShowFavoritesOnLogin"))
-	{
-		removeFavoritesRecordOfUser();		
-	}
-}
-
-void LLFloaterPreference::removeFavoritesRecordOfUser()
-{
-	mFavoritesRecordMayExist = false;
-	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");
-	LLSD fav_llsd;
-	llifstream file;
-	file.open(filename);
-	if (!file.is_open()) return;
-	LLSDSerialize::fromXML(fav_llsd, file);
-	
-	LLAvatarName av_name;
-	LLAvatarNameCache::get( gAgentID, &av_name );
-	if (fav_llsd.has(av_name.getLegacyName()))
-	{
-		fav_llsd.erase(av_name.getLegacyName());
-	}
-	
-	llofstream out_file;
-	out_file.open(filename);
-	LLSDSerialize::toPrettyXML(fav_llsd, out_file);
-
 }
 
 void LLFloaterPreference::cancel()
@@ -656,11 +654,6 @@ void LLFloaterPreference::onOpen(const LLSD& key)
 		getChildView("maturity_desired_combobox")->setVisible( false);
 	}
 
-	if (LLStartUp::getStartupState() == STATE_STARTED)
-	{
-		mFavoritesRecordMayExist = gSavedPerAccountSettings.getBOOL("ShowFavoritesOnLogin");
-	}
-
 	// Forget previous language changes.
 	mLanguageChanged = false;
 
@@ -1200,6 +1193,7 @@ void LLFloaterPreference::refresh()
 	updateSliderText(getChild<LLSliderCtrl>("FlexibleMeshDetail",	true), getChild<LLTextBox>("FlexibleMeshDetailText",	true));
 	updateSliderText(getChild<LLSliderCtrl>("TreeMeshDetail",		true), getChild<LLTextBox>("TreeMeshDetailText",		true));
 	updateSliderText(getChild<LLSliderCtrl>("AvatarMeshDetail",		true), getChild<LLTextBox>("AvatarMeshDetailText",		true));
+	updateSliderText(getChild<LLSliderCtrl>("AvatarPhysicsDetail",	true), getChild<LLTextBox>("AvatarPhysicsDetailText",		true));
 	updateSliderText(getChild<LLSliderCtrl>("TerrainMeshDetail",	true), getChild<LLTextBox>("TerrainMeshDetailText",		true));
 	updateSliderText(getChild<LLSliderCtrl>("RenderPostProcess",	true), getChild<LLTextBox>("PostProcessText",			true));
 	updateSliderText(getChild<LLSliderCtrl>("SkyMeshDetail",		true), getChild<LLTextBox>("SkyMeshDetailText",			true));
@@ -1354,6 +1348,8 @@ void LLFloaterPreference::setPersonalInfo(const std::string& visibility, bool im
 		mOriginalHideOnlineStatus = true;
 	}
 	
+	getChild<LLUICtrl>("online_searchresults")->setEnabled(TRUE);
+
 	getChildView("include_im_in_chat_history")->setEnabled(TRUE);
 	getChildView("show_timestamps_check_im")->setEnabled(TRUE);
 	getChildView("friends_online_notify_checkbox")->setEnabled(TRUE);
@@ -1533,10 +1529,56 @@ void LLFloaterPreference::setCacheLocation(const LLStringExplicit& location)
 	cache_location_editor->setToolTip(location);
 }
 
+//------------------------------Updater---------------------------------------
+
+static bool handleBandwidthChanged(const LLSD& newvalue)
+{
+	gViewerThrottle.setMaxBandwidth((F32) newvalue.asReal());
+	return true;
+}
+
+class LLPanelPreference::Updater : public LLEventTimer
+{
+
+public:
+
+	typedef boost::function<bool(const LLSD&)> callback_t;
+
+	Updater(callback_t cb, F32 period)
+	:LLEventTimer(period),
+	 mCallback(cb)
+	{
+		mEventTimer.stop();
+	}
+
+	virtual ~Updater(){}
+
+	void update(const LLSD& new_value)
+	{
+		mNewValue = new_value;
+		mEventTimer.start();
+	}
+
+protected:
+
+	BOOL tick()
+	{
+		mCallback(mNewValue);
+		mEventTimer.stop();
+
+		return FALSE;
+	}
+
+private:
+
+	LLSD mNewValue;
+	callback_t mCallback;
+};
 //----------------------------------------------------------------------------
 static LLRegisterPanelClassWrapper<LLPanelPreference> t_places("panel_preference");
 LLPanelPreference::LLPanelPreference()
-: LLPanel()
+: LLPanel(),
+  mBandWidthUpdater(NULL)
 {
 	mCommitCallbackRegistrar.add("Pref.setControlFalse",	boost::bind(&LLPanelPreference::setControlFalse,this, _2));
 	mCommitCallbackRegistrar.add("Pref.updateMediaAutoPlayCheckbox",	boost::bind(&LLPanelPreference::updateMediaAutoPlayCheckbox, this, _1));
@@ -1606,10 +1648,24 @@ BOOL LLPanelPreference::postBuild()
 		}
 	}
 
+	//////////////////////PanelSetup ///////////////////
+	if (hasChild("max_bandwidth"))
+	{
+		mBandWidthUpdater = new LLPanelPreference::Updater(boost::bind(&handleBandwidthChanged, _1), BANDWIDTH_UPDATER_TIMEOUT);
+		gSavedSettings.getControl("ThrottleBandwidthKBPS")->getSignal()->connect(boost::bind(&LLPanelPreference::Updater::update, mBandWidthUpdater, _2));
+	}
+
 	apply();
 	return true;
 }
 
+LLPanelPreference::~LLPanelPreference()
+{
+	if (mBandWidthUpdater)
+	{
+		delete mBandWidthUpdater;
+	}
+}
 void LLPanelPreference::apply()
 {
 	// no-op
@@ -1733,7 +1789,6 @@ void LLPanelPreferenceGraphics::draw()
 		bool enable = hasDirtyChilds();
 
 		button_apply->setEnabled(enable);
-
 	}
 }
 bool LLPanelPreferenceGraphics::hasDirtyChilds()
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
index 46014804ec37725fdf028dd2472f9fb7e4cb62f2..5fe509fb37e0c3bef082b050a1ef1f4b49cc3489 100644
--- a/indra/newview/llfloaterpreference.h
+++ b/indra/newview/llfloaterpreference.h
@@ -159,8 +159,6 @@ class LLFloaterPreference : public LLFloater, public LLAvatarPropertiesObserver
 	
 	void buildPopupLists();
 	static void refreshSkin(void* data);
-	// Remove record of current user's favorites from file on disk.
-	void removeFavoritesRecordOfUser();
 private:
 	static std::string sSkin;
 	// set true if state of double-click action checkbox or radio-group was changed by user
@@ -169,10 +167,9 @@ class LLFloaterPreference : public LLFloater, public LLAvatarPropertiesObserver
 	bool mGotPersonalInfo;
 	bool mOriginalIMViaEmail;
 	bool mLanguageChanged;
+	bool mAvatarDataInitialized;
 	
 	bool mOriginalHideOnlineStatus;
-	// Record of current user's favorites may be stored in file on disk.
-	bool mFavoritesRecordMayExist;
 	std::string mDirectoryVisibility;
 	
 	LLAvatarData mAvatarProperties;
@@ -184,6 +181,8 @@ class LLPanelPreference : public LLPanel
 	LLPanelPreference();
 	/*virtual*/ BOOL postBuild();
 	
+	virtual ~LLPanelPreference();
+
 	virtual void apply();
 	virtual void cancel();
 	void setControlFalse(const LLSD& user_data);
@@ -197,6 +196,7 @@ class LLPanelPreference : public LLPanel
 	// cancel() can restore them.
 	virtual void saveSettings();
 	
+	class Updater;
 private:
 	//for "Only friends and groups can call or IM me"
 	static void showFriendsOnlyWarning(LLUICtrl*, const LLSD&);
@@ -208,6 +208,8 @@ class LLPanelPreference : public LLPanel
 
 	typedef std::map<std::string, LLColor4> string_color_map_t;
 	string_color_map_t mSavedColors;
+
+	Updater* mBandWidthUpdater;
 };
 
 class LLPanelPreferenceGraphics : public LLPanelPreference
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
index 2041fac8d8d165cbfd878e5201c2443cceeb50ab..d5806e375c18ab8e02dd623467d65c3c63b28f22 100644
--- a/indra/newview/llfloatersearch.cpp
+++ b/indra/newview/llfloatersearch.cpp
@@ -31,6 +31,7 @@
 #include "llfloaterreg.h"
 #include "llfloatersearch.h"
 #include "llmediactrl.h"
+#include "llnotificationsutil.h"
 #include "lllogininstance.h"
 #include "lluri.h"
 #include "llagent.h"
@@ -46,6 +47,12 @@ class LLSearchHandler : public LLCommandHandler
 	LLSearchHandler() : LLCommandHandler("search", UNTRUSTED_THROTTLE) { }
 	bool handle(const LLSD& tokens, const LLSD& query_map, LLMediaCtrl* web)
 	{
+		if (!LLUI::sSettingGroups["config"]->getBOOL("EnableSearch"))
+		{
+			LLNotificationsUtil::add("NoSearch", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
+			return true;
+		}
+
 		const size_t parts = tokens.size();
 
 		// get the (optional) category for the search
diff --git a/indra/newview/llfloatersidetraytab.cpp b/indra/newview/llfloatersidetraytab.cpp
index f13b4db3a062e45679a17be31ff39f1d1ff1bd4f..94407e6da046ad0b903488d31a6e2cb7b133ff24 100644
--- a/indra/newview/llfloatersidetraytab.cpp
+++ b/indra/newview/llfloatersidetraytab.cpp
@@ -30,6 +30,7 @@
 
 // newview includes
 #include "lltransientfloatermgr.h"
+#include "llsidetray.h"
 
 LLFloaterSideTrayTab::LLFloaterSideTrayTab(const LLSD& key, const Params& params)
 :	LLFloater(key, params)
@@ -43,3 +44,8 @@ LLFloaterSideTrayTab::~LLFloaterSideTrayTab()
 {
 	LLTransientFloaterMgr::getInstance()->removeControlView(LLTransientFloaterMgr::GLOBAL, this);
 }
+
+void LLFloaterSideTrayTab::onClose(bool app_quitting)
+{
+	LLSideTray::getInstance()->setTabDocked(getName(), true);
+}
diff --git a/indra/newview/llfloatersidetraytab.h b/indra/newview/llfloatersidetraytab.h
index e47f82e8ba250c47f0ad890ae2f4c69cc2f116bd..89f2444a0e4fa34829db7ecb7990c5cc51499211 100644
--- a/indra/newview/llfloatersidetraytab.h
+++ b/indra/newview/llfloatersidetraytab.h
@@ -42,6 +42,8 @@ class LLFloaterSideTrayTab : public LLFloater
 public:
 	LLFloaterSideTrayTab(const LLSD& key, const Params& params = getDefaultParams());
 	~LLFloaterSideTrayTab();
+
+	void onClose(bool app_quitting);
 };
 
 #endif // LL_LLFLOATERSIDETRAYTAB_H
diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp
index 2aaf403d5f76348bcf4fcf37af4a2013c14e4a66..87d048c15b4dbedd7665584cfc8ea4e34a92439e 100644
--- a/indra/newview/llfloatertopobjects.cpp
+++ b/indra/newview/llfloatertopobjects.cpp
@@ -185,7 +185,7 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
 			have_extended_data = true;
 			msg->getU32("DataExtended", "TimeStamp", time_stamp, block);
 			msg->getF32("DataExtended", "MonoScore", mono_score, block);
-			msg->getS32(_PREHASH_ReportData,"PublicURLs",public_urls,block);
+			msg->getS32("DataExtended", "PublicURLs", public_urls, block);
 		}
 
 		LLSD element;
@@ -223,7 +223,8 @@ void LLFloaterTopObjects::handleReply(LLMessageSystem *msg, void** data)
 		columns[3]["value"] = llformat("<%0.1f,%0.1f,%0.1f>", location_x, location_y, location_z);
 		columns[3]["font"] = "SANSSERIF";
 		columns[4]["column"] = "time";
-		columns[4]["value"] = formatted_time((time_t)time_stamp);
+		columns[4]["type"] = "date";
+		columns[4]["value"] = LLDate((time_t)time_stamp);
 		columns[4]["font"] = "SANSSERIF";
 
 		if (mCurrentMode == STAT_REPORT_TOP_SCRIPTS
diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp
index 11b3379814a52d3de44e343675abd7196417e5e9..0d8601410a1413677a645d24a3143315722f41d0 100644
--- a/indra/newview/llfloateruipreview.cpp
+++ b/indra/newview/llfloateruipreview.cpp
@@ -1037,18 +1037,29 @@ void LLFloaterUIPreview::onClickEditFloater()
 			cmd_override = bin + " " + args;
 		}
 	}
-	if (!mExternalEditor.setCommand("LL_XUI_EDITOR", cmd_override))
+
+	LLExternalEditor::EErrorCode status = mExternalEditor.setCommand("LL_XUI_EDITOR", cmd_override);
+	if (status != LLExternalEditor::EC_SUCCESS)
 	{
-		std::string warning = "Select an editor by setting the environment variable LL_XUI_EDITOR "
-			"or the ExternalEditor setting or specifying its path in the \"Editor Path\" field.";
+		std::string warning;
+
+		if (status == LLExternalEditor::EC_NOT_SPECIFIED) // Use custom message for this error.
+		{
+			warning = getString("ExternalEditorNotSet");
+		}
+		else
+		{
+			warning = LLExternalEditor::getErrorMessage(status);
+		}
+
 		popupAndPrintWarning(warning);
 		return;
 	}
 
 	// Run the editor.
-	if (!mExternalEditor.run(file_path))
+	if (mExternalEditor.run(file_path) != LLExternalEditor::EC_SUCCESS)
 	{
-		popupAndPrintWarning("Failed to run editor");
+		popupAndPrintWarning(LLExternalEditor::getErrorMessage(status));
 		return;
 	}
 }
diff --git a/indra/newview/llfloaterworldmap.cpp b/indra/newview/llfloaterworldmap.cpp
old mode 100755
new mode 100644
index 017cd2fc490eff31d687fc7b4c5fcafbc9eec742..03cf0332a98aa6362aeed7e48a550eb1deee8b78
--- a/indra/newview/llfloaterworldmap.cpp
+++ b/indra/newview/llfloaterworldmap.cpp
@@ -110,6 +110,12 @@ class LLWorldMapHandler : public LLCommandHandler
 	bool handle(const LLSD& params, const LLSD& query_map,
 				LLMediaCtrl* web)
 	{
+		if (!LLUI::sSettingGroups["config"]->getBOOL("EnableWorldMap"))
+		{
+			LLNotificationsUtil::add("NoWorldMap", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
+			return true;
+		}
+
 		if (params.size() == 0)
 		{
 			// support the secondlife:///app/worldmap SLapp
@@ -142,6 +148,12 @@ class LLMapTrackAvatarHandler : public LLCommandHandler
 	
 	bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
 	{
+		if (!LLUI::sSettingGroups["config"]->getBOOL("EnableWorldMap"))
+		{
+			LLNotificationsUtil::add("NoWorldMap", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
+			return true;
+		}
+		
 		//Make sure we have some parameters
 		if (params.size() == 0)
 		{
diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp
index 70e789f490992adbae3e74f603cb7ffa46cc5248..11401d6c68b82761ea85ca8030dcdfe633e3fb07 100644
--- a/indra/newview/llfriendcard.cpp
+++ b/indra/newview/llfriendcard.cpp
@@ -95,6 +95,36 @@ const LLUUID& get_folder_uuid(const LLUUID& parentFolderUUID, LLInventoryCollect
 	return (cats_count >= 1) ? cats.get(0)->getUUID() : LLUUID::null;
 }
 
+/**
+ * Class LLFindAgentCallingCard
+ *
+ * An inventory collector functor for checking that agent's own calling card
+ * exists within the Calling Cards category and its sub-folders.
+ */
+class LLFindAgentCallingCard : public LLInventoryCollectFunctor
+{
+public:
+	LLFindAgentCallingCard() : mIsAgentCallingCardFound(false) {}
+	virtual ~LLFindAgentCallingCard() {}
+	virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item);
+	bool isAgentCallingCardFound() { return mIsAgentCallingCardFound; }
+
+private:
+	bool mIsAgentCallingCardFound;
+};
+
+bool LLFindAgentCallingCard::operator()(LLInventoryCategory* cat, LLInventoryItem* item)
+{
+	if (mIsAgentCallingCardFound) return true;
+
+	if (item && item->getType() == LLAssetType::AT_CALLINGCARD && item->getCreatorUUID() == gAgentID)
+	{
+		mIsAgentCallingCardFound = true;
+	}
+
+	return mIsAgentCallingCardFound;
+}
+
 /**
  * Class for fetching initial friend cards data
  *
@@ -449,32 +479,22 @@ void LLFriendCardsManager::syncFriendsFolder()
 	LLAvatarTracker::instance().copyBuddyList(all_buddies);
 
 	// 1. Check if own calling card exists
+	const LLUUID calling_cards_folder_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_CALLINGCARD);
+
 	LLInventoryModel::cat_array_t cats;
 	LLInventoryModel::item_array_t items;
-
-	LLUUID friends_all_folder_id = findFriendAllSubfolderUUIDImpl();
-	gInventory.collectDescendents(friends_all_folder_id, cats, items, LLInventoryModel::EXCLUDE_TRASH);
-
-	bool own_callingcard_found = false;
-	LLInventoryModel::item_array_t::const_iterator it;
-	for (it = items.begin(); it != items.end(); ++it)
-	{
-		if ((*it)->getCreatorUUID() == gAgentID)
-		{
-			own_callingcard_found = true;
-			break;
-		}
-	}
+	LLFindAgentCallingCard collector;
+	gInventory.collectDescendentsIf(calling_cards_folder_id, cats, items, LLInventoryModel::EXCLUDE_TRASH, collector);
 
 	// Create own calling card if it was not found in Friends/All folder
-	if (!own_callingcard_found)
+	if (!collector.isAgentCallingCardFound())
 	{
 		LLAvatarName av_name;
 		LLAvatarNameCache::get( gAgentID, &av_name );
 
 		create_inventory_item(gAgentID,
 							  gAgent.getSessionID(),
-							  friends_all_folder_id,
+							  calling_cards_folder_id,
 							  LLTransactionID::tnull,
 							  av_name.getCompleteName(),
 							  gAgentID.asString(),
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
index 5393678a6b04c11dce321c699e7a968f302d783c..7c56e610ce5906a61c708431fdd5cab9d6250034 100644
--- a/indra/newview/llgroupactions.cpp
+++ b/indra/newview/llgroupactions.cpp
@@ -53,6 +53,12 @@ class LLGroupHandler : public LLCommandHandler
 	bool handle(const LLSD& tokens, const LLSD& query_map,
 				LLMediaCtrl* web)
 	{
+		if (!LLUI::sSettingGroups["config"]->getBOOL("EnableGroupInfo"))
+		{
+			LLNotificationsUtil::add("NoGroupInfo", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
+			return true;
+		}
+
 		if (tokens.size() < 1)
 		{
 			return false;
diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp
index 7546c070ea6070559d2a96611d897bc01b419a9b..ce936a9924cac208cd6da38db143bbc3e6e94dfc 100644
--- a/indra/newview/llgroupmgr.cpp
+++ b/indra/newview/llgroupmgr.cpp
@@ -52,6 +52,7 @@
 #include <boost/regex.hpp>
 
 #if LL_MSVC
+#pragma warning(push)   
 // disable boost::lexical_cast warning
 #pragma warning (disable:4702)
 #endif
diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
index c4dcaf11f9044d4a4ea7cab2678a172cdb4c5936..e15862e2a4d6fd2662395142bbeeb3759437eb54 100644
--- a/indra/newview/llhints.cpp
+++ b/indra/newview/llhints.cpp
@@ -191,6 +191,8 @@ BOOL LLHintPopup::postBuild()
 	LLRect text_bounds = hint_text.getTextBoundingRect();
 	S32 delta_height = text_bounds.getHeight() - hint_text.getRect().getHeight();
 	reshape(getRect().getWidth(), getRect().getHeight() + delta_height);
+	hint_text.reshape(hint_text.getRect().getWidth(), hint_text.getRect().getHeight() + delta_height);
+//	hint_text.translate(0, -delta_height);
 	return TRUE;
 }
 
@@ -211,6 +213,24 @@ void LLHintPopup::draw()
 		alpha = clamp_rescale(mFadeTimer.getElapsedTimeF32(), 0.f, mFadeInTime, 0.f, 1.f);
 	}
 	
+	LLIconCtrl* hint_icon = findChild<LLIconCtrl>("hint_image");
+
+	if (hint_icon)
+	{
+		LLUIImagePtr hint_image = hint_icon->getImage();
+		S32 image_height = hint_image.isNull() ? 0 : hint_image->getHeight();
+		S32 image_width = hint_image.isNull() ? 0 : hint_image->getWidth();
+
+		LLView* layout_stack = hint_icon->getParent()->getParent();
+		S32 delta_height = image_height - layout_stack->getRect().getHeight();
+		hint_icon->getParent()->reshape(image_width, hint_icon->getParent()->getRect().getHeight());
+		layout_stack->reshape(layout_stack->getRect().getWidth(), image_height);
+		layout_stack->translate(0, -delta_height);
+
+		LLRect hint_rect = getLocalRect();
+		reshape(hint_rect.getWidth(), hint_rect.getHeight() + delta_height);
+	}
+
 	{	LLViewDrawContext context(alpha); 
 
 		if (mTarget.empty())
diff --git a/indra/newview/llhudeffectblob.cpp b/indra/newview/llhudeffectblob.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d8687eed8db022ba8267a0863b73c231d1d1b0db
--- /dev/null
+++ b/indra/newview/llhudeffectblob.cpp
@@ -0,0 +1,90 @@
+/** 
+ * @file llhudeffecttrail.cpp
+ * @brief LLHUDEffectSpiral class implementation
+ *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llhudeffectblob.h"
+
+#include "llagent.h"
+#include "llviewercamera.h"
+#include "llui.h"
+
+LLHUDEffectBlob::LLHUDEffectBlob(const U8 type) 
+:	LLHUDEffect(type), 
+	mPixelSize(10)
+{
+	mTimer.start();
+	mImage = LLUI::getUIImage("Camera_Drag_Dot");
+}
+
+LLHUDEffectBlob::~LLHUDEffectBlob()
+{
+}
+
+void LLHUDEffectBlob::render()
+{
+	F32 time = mTimer.getElapsedTimeF32();
+	if (mDuration < time)
+	{
+		markDead();
+	}
+
+	LLVector3 pos_agent = gAgent.getPosAgentFromGlobal(mPositionGlobal);
+
+	LLVector3 pixel_up, pixel_right;
+
+	LLViewerCamera::instance().getPixelVectors(pos_agent, pixel_up, pixel_right);
+
+	LLGLSPipelineAlpha gls_pipeline_alpha;
+	gGL.getTexUnit(0)->bind(mImage->getImage());
+
+	LLColor4U color = mColor;
+	color.mV[VALPHA] = (U8)clamp_rescale(time, 0.f, mDuration, 255.f, 0.f);
+	gGL.color4ubv(color.mV);
+
+	{ gGL.pushMatrix();
+		gGL.translatef(pos_agent.mV[0], pos_agent.mV[1], pos_agent.mV[2]);
+		LLVector3 u_scale = pixel_right * (F32)mPixelSize;
+		LLVector3 v_scale = pixel_up * (F32)mPixelSize;
+		
+		{ gGL.begin(LLRender::QUADS);
+			gGL.texCoord2f(0.f, 1.f);
+			gGL.vertex3fv((v_scale - u_scale).mV);
+			gGL.texCoord2f(0.f, 0.f);
+			gGL.vertex3fv((-v_scale - u_scale).mV);
+			gGL.texCoord2f(1.f, 0.f);
+			gGL.vertex3fv((-v_scale + u_scale).mV);
+			gGL.texCoord2f(1.f, 1.f);
+			gGL.vertex3fv((v_scale + u_scale).mV);
+		} gGL.end();
+
+	} gGL.popMatrix();
+}
+
+void LLHUDEffectBlob::renderForTimer()
+{
+}
+
diff --git a/indra/newview/llhudeffectblob.h b/indra/newview/llhudeffectblob.h
new file mode 100644
index 0000000000000000000000000000000000000000..f4c1691108fded588d05c7c4335f275f0b28e32d
--- /dev/null
+++ b/indra/newview/llhudeffectblob.h
@@ -0,0 +1,52 @@
+/** 
+ * @file llhudeffectblob.h
+ * @brief LLHUDEffectBlob class definition
+ *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLHUDEFFECTBLOB_H
+#define LL_LLHUDEFFECTBLOB_H
+
+#include "llhudeffect.h"
+#include "lluiimage.h"
+
+class LLHUDEffectBlob : public LLHUDEffect
+{
+public:
+	friend class LLHUDObject;
+
+	void setPixelSize(S32 pixels) { mPixelSize = pixels; }
+
+protected:
+	LLHUDEffectBlob(const U8 type);
+	~LLHUDEffectBlob();
+
+	/*virtual*/ void render();
+	/*virtual*/ void renderForTimer();
+private:
+	S32				mPixelSize;
+	LLFrameTimer	mTimer;
+	LLPointer<LLUIImage> mImage;
+};
+
+#endif // LL_LLHUDEFFECTBLOB_H
diff --git a/indra/newview/llhudeffectlookat.cpp b/indra/newview/llhudeffectlookat.cpp
index 882c0cf2e2b10cfb62901027ae0c0c3204571c0b..b380b3fe2020abe4edb2ae026099ee31a06d05e6 100644
--- a/indra/newview/llhudeffectlookat.cpp
+++ b/indra/newview/llhudeffectlookat.cpp
@@ -587,11 +587,6 @@ void LLHUDEffectLookAt::update()
  */
 bool LLHUDEffectLookAt::calcTargetPosition()
 {
-	if (gNoRender)
-	{
-		return false;
-	}
-
 	LLViewerObject *target_obj = (LLViewerObject *)mTargetObject;
 	LLVector3 local_offset;
 	
diff --git a/indra/newview/llhudmanager.cpp b/indra/newview/llhudmanager.cpp
index 5f3178b95553b0ba7c2ba3bcb19837901c3df574..8f14b53db0a14bcc37bfccac9fa5b918502469e5 100644
--- a/indra/newview/llhudmanager.cpp
+++ b/indra/newview/llhudmanager.cpp
@@ -38,8 +38,6 @@
 #include "llviewercontrol.h"
 #include "llviewerobjectlist.h"
 
-extern BOOL gNoRender;
-
 // These are loaded from saved settings.
 LLColor4 LLHUDManager::sParentColor;
 LLColor4 LLHUDManager::sChildColor;
@@ -150,11 +148,6 @@ LLHUDEffect *LLHUDManager::createViewerEffect(const U8 type, BOOL send_to_sim, B
 //static
 void LLHUDManager::processViewerEffect(LLMessageSystem *mesgsys, void **user_data)
 {
-	if (gNoRender)
-	{
-		return;
-	}
-
 	LLHUDEffect *effectp = NULL;
 	LLUUID effect_id;
 	U8 effect_type = 0;
diff --git a/indra/newview/llhudobject.cpp b/indra/newview/llhudobject.cpp
index 5e762ee03719c9ba969b7ed4f3c6a6999b367710..95d57d08d853c1d2c79f39c00c858b1065d83b0c 100644
--- a/indra/newview/llhudobject.cpp
+++ b/indra/newview/llhudobject.cpp
@@ -32,6 +32,7 @@
 #include "llhudtext.h"
 #include "llhudicon.h"
 #include "llhudeffectbeam.h"
+#include "llhudeffectblob.h"
 #include "llhudeffecttrail.h"
 #include "llhudeffectlookat.h"
 #include "llhudeffectpointat.h"
@@ -237,6 +238,9 @@ LLHUDEffect *LLHUDObject::addHUDEffect(const U8 type)
 	case LL_HUD_EFFECT_POINTAT:
 		hud_objectp = new LLHUDEffectPointAt(type);
 		break;
+	case LL_HUD_EFFECT_BLOB:
+		hud_objectp = new LLHUDEffectBlob(type);
+		break;
 	default:
 		llwarns << "Unknown type of hud effect:" << (U32) type << llendl;
 	}
diff --git a/indra/newview/llhudobject.h b/indra/newview/llhudobject.h
index 33e6394445354b322d8a1f05c69f355200a1695f..2f7a98c86cf9de08a916fd41d2316871aa5bd2a2 100644
--- a/indra/newview/llhudobject.h
+++ b/indra/newview/llhudobject.h
@@ -95,7 +95,8 @@ class LLHUDObject : public LLRefCount
 		LL_HUD_EFFECT_LOOKAT,
 		LL_HUD_EFFECT_POINTAT,
 		LL_HUD_EFFECT_VOICE_VISUALIZER,	// Ventrella
-		LL_HUD_NAME_TAG
+		LL_HUD_NAME_TAG,
+		LL_HUD_EFFECT_BLOB
 	};
 protected:
 	static void sortObjects();
diff --git a/indra/newview/llimfloater.cpp b/indra/newview/llimfloater.cpp
index f74ae92a7be67679acff65e255d8f6ad3008c8ec..50a9c56518a5b5ae4e937df26d0c596d6b8e9a6f 100644
--- a/indra/newview/llimfloater.cpp
+++ b/indra/newview/llimfloater.cpp
@@ -56,6 +56,7 @@
 #include "llrootview.h"
 #include "llspeakers.h"
 #include "llsidetray.h"
+#include "llviewerchat.h"
 
 
 static const S32 RECT_PADDING_NOT_INIT = -1;
@@ -266,7 +267,9 @@ BOOL LLIMFloater::postBuild()
 	mInputEditor->setMaxTextLength(1023);
 	// enable line history support for instant message bar
 	mInputEditor->setEnableLineHistory(TRUE);
-	
+
+	LLFontGL* font = LLViewerChat::getChatFont();
+	mInputEditor->setFont(font);	
 	
 	mInputEditor->setFocusReceivedCallback( boost::bind(onInputEditorFocusReceived, _1, this) );
 	mInputEditor->setFocusLostCallback( boost::bind(onInputEditorFocusLost, _1, this) );
@@ -891,6 +894,7 @@ void LLIMFloater::updateChatHistoryStyle()
 
 void LLIMFloater::processChatHistoryStyleUpdate(const LLSD& newvalue)
 {
+	LLFontGL* font = LLViewerChat::getChatFont();
 	LLFloaterReg::const_instance_list_t& inst_list = LLFloaterReg::getFloaterList("impanel");
 	for (LLFloaterReg::const_instance_list_t::const_iterator iter = inst_list.begin();
 		 iter != inst_list.end(); ++iter)
@@ -899,6 +903,7 @@ void LLIMFloater::processChatHistoryStyleUpdate(const LLSD& newvalue)
 		if (floater)
 		{
 			floater->updateChatHistoryStyle();
+			floater->mInputEditor->setFont(font);
 		}
 	}
 
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index 0ef502b81b543b46759c406d70ab0905fcef33be..ec3fe481511cc3afb491c1cd3ae48761238f6f80 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -3183,10 +3183,6 @@ class LLViewerChatterBoxInvitation : public LLHTTPNode
 			//just like a normal IM
 			//this is just replicated code from process_improved_im
 			//and should really go in it's own function -jwolk
-			if (gNoRender)
-			{
-				return;
-			}
 			LLChat chat;
 
 			std::string message = message_params["message"].asString();
@@ -3263,11 +3259,6 @@ class LLViewerChatterBoxInvitation : public LLHTTPNode
 		} //end if invitation has instant message
 		else if ( input["body"].has("voice") )
 		{
-			if (gNoRender)
-			{
-				return;
-			}
-			
 			if(!LLVoiceClient::getInstance()->voiceEnabled() || !LLVoiceClient::getInstance()->isVoiceWorking())
 			{
 				// Don't display voice invites unless the user has voice enabled.
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 4c2e0fa709993ef1c8695ec913f1812d59ac0f8a..bdb9f6167a5be741a3bddbb065426725f96a50d4 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -4674,10 +4674,18 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 					else
 					{
 						items.push_back(std::string("Wearable And Object Wear"));
-						items.push_back(std::string("Wearable Add"));
 						disabled_items.push_back(std::string("Take Off"));
 						disabled_items.push_back(std::string("Wearable Edit"));
 					}
+
+					if (LLWearableType::getAllowMultiwear(mWearableType))
+					{
+						items.push_back(std::string("Wearable Add"));
+						if (gAgentWearables.getWearableCount(mWearableType) >= LLAgentWearables::MAX_CLOTHING_PER_TYPE)
+						{
+							disabled_items.push_back(std::string("Wearable Add"));
+						}
+					}
 					break;
 				default:
 					break;
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
index e22363c2f63bdd0e95da0ca4bbc8bf97044cbfa4..dee15a1efdc55c609879e9891f08ac33e2e3d775 100644
--- a/indra/newview/llinventoryfilter.cpp
+++ b/indra/newview/llinventoryfilter.cpp
@@ -510,9 +510,15 @@ void LLInventoryFilter::setHoursAgo(U32 hours)
 {
 	if (mFilterOps.mHoursAgo != hours)
 	{
+		bool are_date_limits_valid = mFilterOps.mMinDate == time_min() && mFilterOps.mMaxDate == time_max();
+
+		bool is_increasing = hours > mFilterOps.mHoursAgo;
+		bool is_increasing_from_zero = is_increasing && !mFilterOps.mHoursAgo;
+
 		// *NOTE: need to cache last filter time, in case filter goes stale
-		BOOL less_restrictive = (mFilterOps.mMinDate == time_min() && mFilterOps.mMaxDate == time_max() && hours > mFilterOps.mHoursAgo);
-		BOOL more_restrictive = (mFilterOps.mMinDate == time_min() && mFilterOps.mMaxDate == time_max() && hours <= mFilterOps.mHoursAgo);
+		BOOL less_restrictive = (are_date_limits_valid && ((is_increasing && mFilterOps.mHoursAgo)) || !hours);
+		BOOL more_restrictive = (are_date_limits_valid && (!is_increasing && hours) || is_increasing_from_zero);
+
 		mFilterOps.mHoursAgo = hours;
 		mFilterOps.mMinDate = time_min();
 		mFilterOps.mMaxDate = time_max();
diff --git a/indra/newview/llinventoryicon.cpp b/indra/newview/llinventoryicon.cpp
index 3f4f33e88db9267a7becde099a9b5353c24b70c2..95dea219a8e9c52e6eb093880100a8389564b01a 100644
--- a/indra/newview/llinventoryicon.cpp
+++ b/indra/newview/llinventoryicon.cpp
@@ -82,6 +82,8 @@ LLIconDictionary::LLIconDictionary()
 	addEntry(LLInventoryIcon::ICONNAME_ANIMATION, 				new IconEntry("Inv_Animation"));
 	addEntry(LLInventoryIcon::ICONNAME_GESTURE, 				new IconEntry("Inv_Gesture"));
 
+	addEntry(LLInventoryIcon::ICONNAME_CLOTHING_PHYSICS, 		new IconEntry("Inv_Physics"));
+
 	addEntry(LLInventoryIcon::ICONNAME_LINKITEM, 				new IconEntry("Inv_LinkItem"));
 	addEntry(LLInventoryIcon::ICONNAME_LINKFOLDER, 				new IconEntry("Inv_LinkFolder"));
 
diff --git a/indra/newview/llinventoryicon.h b/indra/newview/llinventoryicon.h
index 9a2cc080955577616c3c7f8b30f191a894a43e8c..694b56d57275d83308e6a1d521ad0abb287a3c86 100644
--- a/indra/newview/llinventoryicon.h
+++ b/indra/newview/llinventoryicon.h
@@ -66,9 +66,11 @@ class LLInventoryIcon
 		ICONNAME_CLOTHING_SKIRT,
 		ICONNAME_CLOTHING_ALPHA,
 		ICONNAME_CLOTHING_TATTOO,
-		
+
 		ICONNAME_ANIMATION,
 		ICONNAME_GESTURE,
+
+		ICONNAME_CLOTHING_PHYSICS,
 		
 		ICONNAME_LINKITEM,
 		ICONNAME_LINKFOLDER,
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index 53835f0166ebed6a4cb51644243d84661d3f8527..b1975c726193752354e3c2da0bb20cb5af6b8661 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -1059,12 +1059,11 @@ void LLInventoryModel::idleNotifyObservers()
 	{
 		return;
 	}
-	notifyObservers("");
+	notifyObservers();
 }
 
 // Call this method when it's time to update everyone on a new state.
-// The optional argument 'service_name' is used by Agent Inventory Service [DEV-20328]
-void LLInventoryModel::notifyObservers(const std::string service_name)
+void LLInventoryModel::notifyObservers()
 {
 	if (mIsNotifyObservers)
 	{
@@ -1081,15 +1080,7 @@ void LLInventoryModel::notifyObservers(const std::string service_name)
 	{
 		LLInventoryObserver* observer = *iter;
 		
-		if (service_name.empty())
-		{
-			observer->changed(mModifyMask);
-		}
-		else
-		{
-			observer->mMessageName = service_name;
-			observer->changed(mModifyMask);
-		}
+		observer->changed(mModifyMask);
 
 		// safe way to increment since changed may delete entries! (@!##%@!@&*!)
 		iter = mObservers.upper_bound(observer); 
@@ -1187,7 +1178,7 @@ void  LLInventoryModel::fetchInventoryResponder::result(const LLSD& content)
 	{
 		changes |= gInventory.updateItem(*it);
 	}
-	gInventory.notifyObservers("fetchinventory");
+	gInventory.notifyObservers();
 	gViewerWindow->getWindow()->decBusyCount();
 }
 
@@ -1196,7 +1187,7 @@ void LLInventoryModel::fetchInventoryResponder::error(U32 status, const std::str
 {
 	llinfos << "fetchInventory::error "
 		<< status << ": " << reason << llendl;
-	gInventory.notifyObservers("fetchinventory");
+	gInventory.notifyObservers();
 }
 
 bool LLInventoryModel::fetchDescendentsOf(const LLUUID& folder_id) const
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
index f6728fd5758f812730837d3c9e06f8693d1ae7db..15da09990ff67c26206aa4b0dbd59dc4cd972702 100644
--- a/indra/newview/llinventorymodel.h
+++ b/indra/newview/llinventorymodel.h
@@ -425,9 +425,8 @@ class LLInventoryModel
 	// has been indicated.
 	void idleNotifyObservers();
 
-	// Call to explicitly update everyone on a new state.  The optional argument
-	// 'service_name' is used by Agent Inventory Service [DEV-20328]
-	void notifyObservers(const std::string service_name="");
+	// Call to explicitly update everyone on a new state.
+	void notifyObservers();
 
 	// Allows outsiders to tell the inventory if something has
 	// been changed 'under the hood', but outside the control of the
diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp
index 570e48d52694ab47f0fe1ec0dfa5090fc5bb9ef8..7b1ff102e704ce89afb7cabd15f25e338cdfecb2 100644
--- a/indra/newview/llinventorymodelbackgroundfetch.cpp
+++ b/indra/newview/llinventorymodelbackgroundfetch.cpp
@@ -182,7 +182,7 @@ void LLInventoryModelBackgroundFetch::backgroundFetch()
 	{
 		// If we'll be using the capability, we'll be sending batches and the background thing isn't as important.
 		std::string url = gAgent.getRegion()->getCapability("FetchInventoryDescendents2");   
-		if (!url.empty()) 
+		if (gSavedSettings.getBOOL("UseHTTPInventory") && !url.empty()) 
 		{
 			bulkFetch(url);
 			return;
@@ -388,7 +388,7 @@ void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content)
                         titem->setParent(lost_uuid);
                         titem->updateParentOnServer(FALSE);
                         gInventory.updateItem(titem);
-                        gInventory.notifyObservers("fetchDescendents");
+                        gInventory.notifyObservers();
                         
                     }
                 }
@@ -464,7 +464,7 @@ void LLInventoryModelFetchDescendentsResponder::result(const LLSD& content)
 		fetcher->setAllFoldersFetched();
 	}
 	
-	gInventory.notifyObservers("fetchDescendents");
+	gInventory.notifyObservers();
 }
 
 // If we get back an error (not found, etc...), handle it here.
@@ -496,7 +496,7 @@ void LLInventoryModelFetchDescendentsResponder::error(U32 status, const std::str
 			fetcher->setAllFoldersFetched();
 		}
 	}
-	gInventory.notifyObservers("fetchDescendents");
+	gInventory.notifyObservers();
 }
 
 BOOL LLInventoryModelFetchDescendentsResponder::getIsRecursive(const LLUUID& cat_id) const
diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp
index 0fd4b2bee54fabc12bba9eb36cbe57899bb4e835..6bf19e346db340cc7adfee84908fd92f99e124b0 100644
--- a/indra/newview/llinventoryobserver.cpp
+++ b/indra/newview/llinventoryobserver.cpp
@@ -572,16 +572,7 @@ void LLInventoryAddedObserver::changed(U32 mask)
 	// the network, figure out which item was updated.
 	LLMessageSystem* msg = gMessageSystem;
 
-	std::string msg_name;
-	if (mMessageName.empty())
-	{
-		msg_name = msg->getMessageName();
-	}
-	else
-	{
-		msg_name = mMessageName;
-	}
-
+	std::string msg_name = msg->getMessageName();
 	if (msg_name.empty())
 	{
 		return;
diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h
index f2a2049a51f7e86cb95f062d74a8dbd26699a2fc..2d9021961e2e72497a333f904f181af8af281f98 100644
--- a/indra/newview/llinventoryobserver.h
+++ b/indra/newview/llinventoryobserver.h
@@ -63,7 +63,6 @@ class LLInventoryObserver
 	LLInventoryObserver();
 	virtual ~LLInventoryObserver();
 	virtual void changed(U32 mask) = 0;
-	std::string mMessageName; // used by Agent Inventory Service only. [DEV-20328]
 };
 
 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
index 55164f609494e7e1214fb29cc1b50b2f6faa196c..5c65dcec34b2076fdb5e2879db143f21ef871d63 100644
--- a/indra/newview/lllocationinputctrl.cpp
+++ b/indra/newview/lllocationinputctrl.cpp
@@ -211,7 +211,6 @@ LLLocationInputCtrl::LLLocationInputCtrl(const LLLocationInputCtrl::Params& p)
 {
 	// Lets replace default LLLineEditor with LLLocationLineEditor
 	// to make needed escaping while copying and cutting url
-	this->removeChild(mTextEntry);
 	delete mTextEntry;
 
 	// Can't access old mTextEntry fields as they are protected, so lets build new params
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index 9adf374c71642fc0f3525b36453d93572c7af1b2..2df683861a92582c65628e6436456d92ba5ed0ae 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -41,6 +41,7 @@
 #include <boost/regex/v4/match_results.hpp>
 
 #if LL_MSVC
+#pragma warning(push)  
 // disable warning about boost::lexical_cast unreachable code
 // when it fails to parse the string
 #pragma warning (disable:4702)
diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp
index 33e051bfab8e6286f73c64862a8fe6ee05019c54..36c5d12897d55bebd0181e74e6a0427d92bfdb6f 100644
--- a/indra/newview/lllogininstance.cpp
+++ b/indra/newview/lllogininstance.cpp
@@ -480,10 +480,12 @@ LLLoginInstance::LLLoginInstance() :
 {
 	mLoginModule->getEventPump().listen("lllogininstance", 
 		boost::bind(&LLLoginInstance::handleLoginEvent, this, _1));
-	mDispatcher.add("fail.login", boost::bind(&LLLoginInstance::handleLoginFailure, this, _1));
-	mDispatcher.add("connect",    boost::bind(&LLLoginInstance::handleLoginSuccess, this, _1));
-	mDispatcher.add("disconnect", boost::bind(&LLLoginInstance::handleDisconnect, this, _1));
-	mDispatcher.add("indeterminate", boost::bind(&LLLoginInstance::handleIndeterminate, this, _1));
+	// This internal use of LLEventDispatcher doesn't really need
+	// per-function descriptions.
+	mDispatcher.add("fail.login", "", boost::bind(&LLLoginInstance::handleLoginFailure, this, _1));
+	mDispatcher.add("connect",    "", boost::bind(&LLLoginInstance::handleLoginSuccess, this, _1));
+	mDispatcher.add("disconnect", "", boost::bind(&LLLoginInstance::handleDisconnect, this, _1));
+	mDispatcher.add("indeterminate", "", boost::bind(&LLLoginInstance::handleIndeterminate, this, _1));
 }
 
 LLLoginInstance::~LLLoginInstance()
@@ -556,6 +558,18 @@ void LLLoginInstance::constructAuthParams(LLPointer<LLCredential> user_credentia
 	requested_options.append("buddy-list");
 	requested_options.append("newuser-config");
 	requested_options.append("ui-config");
+
+	//send this info to login.cgi for stats gathering 
+	//since viewerstats isn't reliable enough
+	if (gSavedSettings.getString("SessionSettingsFile").empty())
+	{
+		requested_options.append("advanced-mode");
+	}
+	else
+	{
+		requested_options.append("basic-mode");
+	}
+
 #endif
 	requested_options.append("max-agent-groups");	
 	requested_options.append("map-server-url");	
@@ -625,11 +639,7 @@ bool LLLoginInstance::handleLoginEvent(const LLSD& event)
 
 	// Call the method registered in constructor, if any, for more specific
 	// handling
-	LLEventDispatcher::Callable method(mDispatcher.get(event["change"]));
-	if (! method.empty())
-	{
-		method(event);
-	}
+	mDispatcher.try_call(event);
 	return false;
 }
 
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 9493fddf5044107e0aa502e02ffeea1b967737e8..5007f1c17acb70b59236368c21afe62ab9841c16 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -44,6 +44,7 @@
 #include "llslurl.h"
 #include "lluictrlfactory.h"	// LLDefaultChildRegistry
 #include "llkeyboard.h"
+#include "llviewermenu.h"
 
 // linden library includes
 #include "llfocusmgr.h"
@@ -73,6 +74,7 @@ LLMediaCtrl::Params::Params()
 	texture_height("texture_height", 1024),
 	caret_color("caret_color"),
 	initial_mime_type("initial_mime_type"),
+	error_page_url("error_page_url"),
 	media_id("media_id"),
 	trusted_content("trusted_content", false),
 	focus_on_click("focus_on_click", true)
@@ -102,9 +104,11 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :
 	mTextureHeight ( 1024 ),
 	mClearCache(false),
 	mHomePageMimeType(p.initial_mime_type),
+	mErrorPageURL(p.error_page_url),
 	mTrusted(p.trusted_content),
 	mWindowShade(NULL),
-	mHoverTextChanged(false)
+	mHoverTextChanged(false),
+	mContextMenu(NULL)
 {
 	{
 		LLColor4 color = p.caret_color().get();
@@ -149,7 +153,6 @@ LLMediaCtrl::LLMediaCtrl( const Params& p) :
 
 LLMediaCtrl::~LLMediaCtrl()
 {
-
 	if (mMediaSource)
 	{
 		mMediaSource->remObserver( this );
@@ -304,10 +307,12 @@ BOOL LLMediaCtrl::handleRightMouseUp( S32 x, S32 y, MASK mask )
 BOOL LLMediaCtrl::handleRightMouseDown( S32 x, S32 y, MASK mask )
 {
 	if (LLPanel::handleRightMouseDown(x, y, mask)) return TRUE;
-	convertInputCoords(x, y);
+
+	S32 media_x = x, media_y = y;
+	convertInputCoords(media_x, media_y);
 
 	if (mMediaSource)
-		mMediaSource->mouseDown(x, y, mask, 1);
+		mMediaSource->mouseDown(media_x, media_y, mask, 1);
 	
 	gFocusMgr.setMouseCapture( this );
 
@@ -316,6 +321,12 @@ BOOL LLMediaCtrl::handleRightMouseDown( S32 x, S32 y, MASK mask )
 		setFocus( TRUE );
 	}
 
+	if (mContextMenu)
+	{
+		mContextMenu->show(x, y);
+		LLMenuGL::showPopup(this, mContextMenu, x, y);
+	}
+
 	return TRUE;
 }
 
@@ -378,6 +389,8 @@ void LLMediaCtrl::onFocusLost()
 //
 BOOL LLMediaCtrl::postBuild ()
 {
+	mContextMenu = LLUICtrlFactory::getInstance()->createFromFile<LLContextMenu>(
+		"menu_media_ctrl.xml", LLMenuGL::sMenuContainer, LLViewerMenuHolderGL::child_registry_t::instance());
 	setVisibleCallback(boost::bind(&LLMediaCtrl::onVisibilityChange, this, _2));
 	return TRUE;
 }
@@ -501,22 +514,6 @@ bool LLMediaCtrl::canNavigateForward()
 		return false;
 }
 
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLMediaCtrl::set404RedirectUrl( std::string redirect_url )
-{
-	if(mMediaSource && mMediaSource->hasMedia())
-		mMediaSource->getMediaPlugin()->set_status_redirect( 404, redirect_url );
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//
-void LLMediaCtrl::clr404RedirectUrl()
-{
-	if(mMediaSource && mMediaSource->hasMedia())
-		mMediaSource->getMediaPlugin()->set_status_redirect(404, "");
-}
-
 ////////////////////////////////////////////////////////////////////////////////
 //
 void LLMediaCtrl::clearCache()
@@ -626,6 +623,16 @@ void LLMediaCtrl::setTarget(const std::string& target)
 	}
 }
 
+void LLMediaCtrl::setErrorPageURL(const std::string& url)
+{
+	mErrorPageURL = url;
+}
+
+const std::string& LLMediaCtrl::getErrorPageURL()
+{
+	return mErrorPageURL;
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 //
 bool LLMediaCtrl::setCaretColor(unsigned int red, unsigned int green, unsigned int blue)
@@ -976,6 +983,16 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
 		};
 		break;
 
+		case MEDIA_EVENT_NAVIGATE_ERROR_PAGE:
+		{
+			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_NAVIGATE_ERROR_PAGE" << LL_ENDL;
+			if ( mErrorPageURL.length() > 0 )
+			{
+				navigateTo(mErrorPageURL, "text/html");
+			};
+		};
+		break;
+
 		case MEDIA_EVENT_CLICK_LINK_HREF:
 		{
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_CLICK_LINK_HREF, target is \"" << self->getClickTarget() << "\", uri is " << self->getClickURL() << LL_ENDL;
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
index 38a74f90d3cf6a2ed5040ced04d1e78bc2ce44d0..28666e620f310799a3347c20f6f478e54c36a404 100644
--- a/indra/newview/llmediactrl.h
+++ b/indra/newview/llmediactrl.h
@@ -34,6 +34,7 @@
 
 class LLViewBorder;
 class LLUICtrlFactory;
+class LLContextMenu;
 
 ////////////////////////////////////////////////////////////////////////////////
 //
@@ -63,6 +64,7 @@ class LLMediaCtrl :
 
 		Optional<std::string>	initial_mime_type;
 		Optional<std::string>	media_id;
+		Optional<std::string>	error_page_url;
 		
 		Params();
 	};
@@ -113,10 +115,9 @@ class LLMediaCtrl :
 
 		void setTarget(const std::string& target);
 
-		// set/clear URL to visit when a 404 page is reached
-		void set404RedirectUrl( std::string redirect_url );
-		void clr404RedirectUrl();
-		
+		void setErrorPageURL(const std::string& url);
+		const std::string& getErrorPageURL();
+
 		// Clear the browser cache when the instance gets loaded
 		void clearCache();
 
@@ -179,6 +180,7 @@ class LLMediaCtrl :
 		std::string mHomePageUrl;
 		std::string mHomePageMimeType;
 		std::string mCurrentNavUrl;
+		std::string mErrorPageURL;
 		std::string mTarget;
 		bool mIgnoreUIScale;
 		bool mAlwaysRefresh;
@@ -194,6 +196,7 @@ class LLMediaCtrl :
 		bool mClearCache;
 		class LLWindowShade* mWindowShade;
 		bool mHoverTextChanged;
+		LLContextMenu* mContextMenu;
 };
 
 #endif // LL_LLMediaCtrl_H
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
index e4f83ce6b99495bfced31e95fd0ed987e93d5920..b8832dfd8e4a738d4e09c100e2bb4f2e9eb7c43e 100644
--- a/indra/newview/llnavigationbar.cpp
+++ b/indra/newview/llnavigationbar.cpp
@@ -57,6 +57,7 @@
 #include "llviewercontrol.h"
 #include "llfloatermediabrowser.h"
 #include "llweb.h"
+#include "llhints.h"
 
 #include "llinventorymodel.h"
 #include "lllandmarkactions.h"
@@ -324,6 +325,8 @@ BOOL LLNavigationBar::postBuild()
 	LLTeleportHistory::getInstance()->setHistoryChangedCallback(
 			boost::bind(&LLNavigationBar::onTeleportHistoryChanged, this));
 
+	LLHints::registerHintTarget("nav_bar", LLView::getHandle());
+
 	return TRUE;
 }
 
@@ -636,18 +639,19 @@ void LLNavigationBar::onRegionNameResponse(
 		U64 region_handle, const std::string& url, const LLUUID& snapshot_id, bool teleport)
 {
 	// Invalid location?
-	if (!region_handle)
+	if (region_handle)
+	{
+		// Teleport to the location.
+		LLVector3d region_pos = from_region_handle(region_handle);
+		LLVector3d global_pos = region_pos + (LLVector3d) local_coords;
+
+		llinfos << "Teleporting to: " << LLSLURL(region_name,	global_pos).getSLURLString()  << llendl;
+		gAgent.teleportViaLocation(global_pos);
+	}
+	else if (gSavedSettings.getBOOL("SearchFromAddressBar"))
 	{
 		invokeSearch(typed_location);
-		return;
 	}
-
-	// Teleport to the location.
-	LLVector3d region_pos = from_region_handle(region_handle);
-	LLVector3d global_pos = region_pos + (LLVector3d) local_coords;
-
-	llinfos << "Teleporting to: " << LLSLURL(region_name,	global_pos).getSLURLString()  << llendl;
-	gAgent.teleportViaLocation(global_pos);
 }
 
 void	LLNavigationBar::showTeleportHistoryMenu(LLUICtrl* btn_ctrl)
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index 572eeb8fc7702c0ae437524b3d6565cb854e9cf4..03ebc344f17d4087c21a9b1e2051347cc048762b 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -250,9 +250,13 @@ void LLNearbyChat::getAllowedRect(LLRect& rect)
 void LLNearbyChat::updateChatHistoryStyle()
 {
 	mChatHistory->clear();
+
+	LLSD do_not_log;
+	do_not_log["do_not_log"] = true;
 	for(std::vector<LLChat>::iterator it = mMessageArchive.begin();it!=mMessageArchive.end();++it)
 	{
-		addMessage(*it,false);
+		// Update the messages without re-writing them to a log file.
+		addMessage(*it,false, do_not_log);
 	}
 }
 
diff --git a/indra/newview/llnearbychatbar.cpp b/indra/newview/llnearbychatbar.cpp
index 836ae9a0cfc49f7cbf88e0a214c0041828387736..d3fd959152c0ebde5c4897d260bc887b96055248 100644
--- a/indra/newview/llnearbychatbar.cpp
+++ b/indra/newview/llnearbychatbar.cpp
@@ -47,6 +47,7 @@
 #include "llwindow.h"
 #include "llviewerwindow.h"
 #include "llrootview.h"
+#include "llviewerchat.h"
 
 S32 LLNearbyChatBar::sLastSpecialChatChannel = 0;
 
@@ -157,6 +158,16 @@ BOOL LLGestureComboList::handleKeyHere(KEY key, MASK mask)
 	return handled; 		
 }
 
+void LLGestureComboList::draw()
+{
+	LLUICtrl::draw();
+
+	if(mButton->getToggleState())
+	{
+		showList();
+	}
+}
+
 void LLGestureComboList::showList()
 {
 	LLRect rect = mList->getRect();
@@ -180,6 +191,7 @@ void LLGestureComboList::showList()
 	// Show the list and push the button down
 	mButton->setToggleState(TRUE);
 	mList->setVisible(TRUE);
+	sendChildToFront(mList);
 	LLUI::addPopup(mList);
 }
 
@@ -422,13 +434,26 @@ BOOL LLNearbyChatBar::postBuild()
 	mChatBox->setPassDelete(TRUE);
 	mChatBox->setReplaceNewlinesWithSpaces(FALSE);
 	mChatBox->setEnableLineHistory(TRUE);
+	mChatBox->setFont(LLViewerChat::getChatFont());
 
 	mOutputMonitor = getChild<LLOutputMonitorCtrl>("chat_zone_indicator");
 	mOutputMonitor->setVisible(FALSE);
 
+	// Register for font change notifications
+	LLViewerChat::setFontChangedCallback(boost::bind(&LLNearbyChatBar::onChatFontChange, this, _1));
+
 	return TRUE;
 }
 
+void LLNearbyChatBar::onChatFontChange(LLFontGL* fontp)
+{
+	// Update things with the new font whohoo
+	if (mChatBox)
+	{
+		mChatBox->setFont(fontp);
+	}
+}
+
 //static
 LLNearbyChatBar* LLNearbyChatBar::getInstance()
 {
diff --git a/indra/newview/llnearbychatbar.h b/indra/newview/llnearbychatbar.h
index 033d1dd5a2c8d1962d23fb210888fad8774b5223..efddec942fd49e3ba9bca4f1283391ebbe53da79 100644
--- a/indra/newview/llnearbychatbar.h
+++ b/indra/newview/llnearbychatbar.h
@@ -72,6 +72,8 @@ class LLGestureComboList
 	virtual void	hideList();
 	virtual BOOL	handleKeyHere(KEY key, MASK mask);
 
+	virtual void	draw();
+
 	S32				getCurrentIndex() const;
 	void			onItemSelected(const LLSD& data);
 	void			sortByName(bool ascending = true);
@@ -125,6 +127,7 @@ class LLNearbyChatBar
 
 	void sendChat( EChatType type );
 	void onChatBoxCommit();
+	void onChatFontChange(LLFontGL* fontp);
 
 	static LLWString stripChannelNumber(const LLWString &mesg, S32* channel);
 	EChatType processChatTypeTriggers(EChatType type, std::string &str);
diff --git a/indra/newview/llnearbychathandler.cpp b/indra/newview/llnearbychathandler.cpp
index de5439e4e03e5a88002a454a74e790cd503548db..b56fb65a4c8906b2fd96d3873adca2fde4d38e1c 100644
--- a/indra/newview/llnearbychathandler.cpp
+++ b/indra/newview/llnearbychathandler.cpp
@@ -523,6 +523,10 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
 		&& chat_msg.mFromID != gAgentID)
 	{
  		LLFirstUse::otherAvatarChatFirst();
+
+ 		// Add sender to the recent people list.
+ 		LLRecentPeople::instance().add(chat_msg.mFromID);
+
 	}
 
 	if( nearby_chat->getVisible()
@@ -558,6 +562,7 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
 	}
 	*/
 
+	// Add a nearby chat toast.
 	LLUUID id;
 	id.generate();
 
@@ -583,6 +588,10 @@ void LLNearbyChatHandler::processChat(const LLChat& chat_msg, const LLSD &args)
 		notification["text_color"] = r_color_name;
 		notification["color_alpha"] = r_color_alpha;
 		notification["font_size"] = (S32)LLViewerChat::getChatFontSize() ;
+
+		// Pass sender info so that it can be rendered properly (STORM-1021).
+		notification["sender_slurl"] = LLViewerChat::getSenderSLURL(chat_msg, args);
+
 		channel->addNotification(notification);	
 	}
 
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
index bd4f152ded3f8e2dc84b0565c2c7bf113435fd7b..5fe5c9b1e8a4e03c0073cd053ee3599f8f1d3633 100644
--- a/indra/newview/llnetmap.cpp
+++ b/indra/newview/llnetmap.cpp
@@ -112,10 +112,6 @@ BOOL LLNetMap::postBuild()
 	registrar.add("Minimap.Tracker", boost::bind(&LLNetMap::handleStopTracking, this, _2));
 
 	mPopupMenu = LLUICtrlFactory::getInstance()->createFromFile<LLMenuGL>("menu_mini_map.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance());
-	if (mPopupMenu && !LLTracker::isTracking(0))
-	{
-		mPopupMenu->setItemEnabled ("Stop Tracking", false);
-	}
 	return TRUE;
 }
 
@@ -510,13 +506,6 @@ void LLNetMap::draw()
 	gGL.popUIMatrix();
 
 	LLUICtrl::draw();
-
-	if (LLTracker::isTracking(0))
-	{
-		mPopupMenu->setItemEnabled ("Stop Tracking", true);
-	}
-	
-
 }
 
 void LLNetMap::reshape(S32 width, S32 height, BOOL called_from_parent)
@@ -886,6 +875,7 @@ BOOL LLNetMap::handleRightMouseDown(S32 x, S32 y, MASK mask)
 	{
 		mPopupMenu->buildDrawLabels();
 		mPopupMenu->updateParent(LLMenuGL::sMenuContainer);
+		mPopupMenu->setItemEnabled("Stop Tracking", LLTracker::isTracking(0));
 		LLMenuGL::showPopup(this, mPopupMenu, x, y);
 	}
 	return TRUE;
@@ -904,23 +894,29 @@ BOOL LLNetMap::handleClick(S32 x, S32 y, MASK mask)
 BOOL LLNetMap::handleDoubleClick(S32 x, S32 y, MASK mask)
 {
 	LLVector3d pos_global = viewPosToGlobal(x, y);
-	
-	// If we're not tracking a beacon already, double-click will set one 
-	if (!LLTracker::isTracking(NULL))
+
+	bool double_click_teleport = gSavedSettings.getBOOL("DoubleClickTeleport");
+	bool double_click_show_world_map = gSavedSettings.getBOOL("DoubleClickShowWorldMap");
+
+	if (double_click_teleport || double_click_show_world_map)
 	{
-		LLFloaterWorldMap* world_map = LLFloaterWorldMap::getInstance();
-		if (world_map)
+		// If we're not tracking a beacon already, double-click will set one 
+		if (!LLTracker::isTracking(NULL))
 		{
-			world_map->trackLocation(pos_global);
+			LLFloaterWorldMap* world_map = LLFloaterWorldMap::getInstance();
+			if (world_map)
+			{
+				world_map->trackLocation(pos_global);
+			}
 		}
 	}
-	
-	if (gSavedSettings.getBOOL("DoubleClickTeleport"))
+
+	if (double_click_teleport)
 	{
 		// If DoubleClickTeleport is on, double clicking the minimap will teleport there
 		gAgent.teleportViaLocationLookAt(pos_global);
 	}
-	else 
+	else if (double_click_show_world_map)
 	{
 		LLFloaterReg::showInstance("world_map");
 	}
diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp
index 45590c3cdba6b1794e97dc73fa45039b0bee7e83..bbb4d03768b09e6809e0b615762dd5b3e21f3a6b 100644
--- a/indra/newview/llnotificationscripthandler.cpp
+++ b/indra/newview/llnotificationscripthandler.cpp
@@ -88,7 +88,7 @@ bool LLScriptHandler::processNotification(const LLSD& notify)
 		initChannel();
 	}
 	
-	if(notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change")
+	if(notify["sigtype"].asString() == "add")
 	{
 		if (LLHandlerUtil::canLogToIM(notification))
 		{
diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp
index 4a74b7925c1965afd7313369e74301d356d52df3..b73d97e4c41f13d8fb639a65befb2fcc545eecc6 100644
--- a/indra/newview/llpaneleditwearable.cpp
+++ b/indra/newview/llpaneleditwearable.cpp
@@ -51,7 +51,7 @@
 #include "llcolorswatch.h"
 #include "lltexturectrl.h"
 #include "lltextureentry.h"
-#include "llviewercontrol.h"	// gSavedSettings
+#include "llviewercontrol.h"    // gSavedSettings
 #include "llviewertexturelist.h"
 #include "llagentcamera.h"
 #include "llmorphview.h"
@@ -65,36 +65,43 @@ static LLRegisterPanelClassWrapper<LLPanelEditWearable> t_edit_wearable("panel_e
 
 // subparts of the UI for focus, camera position, etc.
 enum ESubpart {
-	SUBPART_SHAPE_HEAD = 1, // avoid 0
-	SUBPART_SHAPE_EYES,
-	SUBPART_SHAPE_EARS,
-	SUBPART_SHAPE_NOSE,
-	SUBPART_SHAPE_MOUTH,
-	SUBPART_SHAPE_CHIN,
-	SUBPART_SHAPE_TORSO,
-	SUBPART_SHAPE_LEGS,
-	SUBPART_SHAPE_WHOLE,
-	SUBPART_SHAPE_DETAIL,
-	SUBPART_SKIN_COLOR,
-	SUBPART_SKIN_FACEDETAIL,
-	SUBPART_SKIN_MAKEUP,
-	SUBPART_SKIN_BODYDETAIL,
-	SUBPART_HAIR_COLOR,
-	SUBPART_HAIR_STYLE,
-	SUBPART_HAIR_EYEBROWS,
-	SUBPART_HAIR_FACIAL,
-	SUBPART_EYES,
-	SUBPART_SHIRT,
-	SUBPART_PANTS,
-	SUBPART_SHOES,
-	SUBPART_SOCKS,
-	SUBPART_JACKET,
-	SUBPART_GLOVES,
-	SUBPART_UNDERSHIRT,
-	SUBPART_UNDERPANTS,
-	SUBPART_SKIRT,
-	SUBPART_ALPHA,
-	SUBPART_TATTOO
+        SUBPART_SHAPE_HEAD = 1, // avoid 0
+        SUBPART_SHAPE_EYES,
+        SUBPART_SHAPE_EARS,
+        SUBPART_SHAPE_NOSE,
+        SUBPART_SHAPE_MOUTH,
+        SUBPART_SHAPE_CHIN,
+        SUBPART_SHAPE_TORSO,
+        SUBPART_SHAPE_LEGS,
+        SUBPART_SHAPE_WHOLE,
+        SUBPART_SHAPE_DETAIL,
+        SUBPART_SKIN_COLOR,
+        SUBPART_SKIN_FACEDETAIL,
+        SUBPART_SKIN_MAKEUP,
+        SUBPART_SKIN_BODYDETAIL,
+        SUBPART_HAIR_COLOR,
+        SUBPART_HAIR_STYLE,
+        SUBPART_HAIR_EYEBROWS,
+        SUBPART_HAIR_FACIAL,
+        SUBPART_EYES,
+        SUBPART_SHIRT,
+        SUBPART_PANTS,
+        SUBPART_SHOES,
+        SUBPART_SOCKS,
+        SUBPART_JACKET,
+        SUBPART_GLOVES,
+        SUBPART_UNDERSHIRT,
+        SUBPART_UNDERPANTS,
+        SUBPART_SKIRT,
+        SUBPART_ALPHA,
+        SUBPART_TATTOO,
+        SUBPART_PHYSICS_BREASTS_UPDOWN,
+        SUBPART_PHYSICS_BREASTS_INOUT,
+        SUBPART_PHYSICS_BREASTS_LEFTRIGHT,
+        SUBPART_PHYSICS_BELLY_UPDOWN,
+        SUBPART_PHYSICS_BUTT_UPDOWN,
+        SUBPART_PHYSICS_BUTT_LEFTRIGHT,
+        SUBPART_PHYSICS_ADVANCED,
  };
 
 using namespace LLVOAvatarDefines;
@@ -105,102 +112,102 @@ typedef std::vector<ESubpart> subpart_vec_t;
 
 class LLEditWearableDictionary : public LLSingleton<LLEditWearableDictionary>
 {
-	//--------------------------------------------------------------------
-	// Constructors and Destructors
-	//--------------------------------------------------------------------
+        //--------------------------------------------------------------------
+        // Constructors and Destructors
+        //--------------------------------------------------------------------
 public:
-	LLEditWearableDictionary();
-	virtual ~LLEditWearableDictionary();
-	
-	//--------------------------------------------------------------------
-	// Wearable Types
-	//--------------------------------------------------------------------
+        LLEditWearableDictionary();
+        virtual ~LLEditWearableDictionary();
+        
+        //--------------------------------------------------------------------
+        // Wearable Types
+        //--------------------------------------------------------------------
 public:
-	struct WearableEntry : public LLDictionaryEntry
-	{
-		WearableEntry(LLWearableType::EType type,
-					  const std::string &title,
-					  const std::string &desc_title,
-					  U8 num_color_swatches,  // number of 'color_swatches'
-					  U8 num_texture_pickers, // number of 'texture_pickers'
-					  U8 num_subparts, ... ); // number of subparts followed by a list of ETextureIndex and ESubparts
-
-
-		const LLWearableType::EType mWearableType;
-		const std::string   mTitle;
-		const std::string	mDescTitle;
-		subpart_vec_t		mSubparts;
-		texture_vec_t		mColorSwatchCtrls;
-		texture_vec_t		mTextureCtrls;
-	};
-
-	struct Wearables : public LLDictionary<LLWearableType::EType, WearableEntry>
-	{
-		Wearables();
-	} mWearables;
-
-	const WearableEntry*	getWearable(LLWearableType::EType type) const { return mWearables.lookup(type); }
-
-	//--------------------------------------------------------------------
-	// Subparts
-	//--------------------------------------------------------------------
+        struct WearableEntry : public LLDictionaryEntry
+        {
+                WearableEntry(LLWearableType::EType type,
+                                          const std::string &title,
+                                          const std::string &desc_title,
+                                          U8 num_color_swatches,  // number of 'color_swatches'
+                                          U8 num_texture_pickers, // number of 'texture_pickers'
+                                          U8 num_subparts, ... ); // number of subparts followed by a list of ETextureIndex and ESubparts
+
+
+                const LLWearableType::EType mWearableType;
+                const std::string   mTitle;
+                const std::string       mDescTitle;
+                subpart_vec_t           mSubparts;
+                texture_vec_t           mColorSwatchCtrls;
+                texture_vec_t           mTextureCtrls;
+        };
+
+        struct Wearables : public LLDictionary<LLWearableType::EType, WearableEntry>
+        {
+                Wearables();
+        } mWearables;
+
+        const WearableEntry*    getWearable(LLWearableType::EType type) const { return mWearables.lookup(type); }
+
+        //--------------------------------------------------------------------
+        // Subparts
+        //--------------------------------------------------------------------
 public:
-	struct SubpartEntry : public LLDictionaryEntry
-	{
-		SubpartEntry(ESubpart part,
-					 const std::string &joint,
-					 const std::string &edit_group,
-					 const std::string &param_list,
-					 const std::string &accordion_tab,
-					 const LLVector3d  &target_offset,
-					 const LLVector3d  &camera_offset,
-					 const ESex 	   &sex);
-
-		ESubpart			mSubpart;
-		std::string			mTargetJoint;
-		std::string			mEditGroup;
-		std::string			mParamList;
-		std::string			mAccordionTab;
-		LLVector3d			mTargetOffset;
-		LLVector3d			mCameraOffset;
-		ESex				mSex;
-	};
-
-	struct Subparts : public LLDictionary<ESubpart, SubpartEntry>
-	{
-		Subparts();
-	} mSubparts;
-
-	const SubpartEntry*  getSubpart(ESubpart subpart) const { return mSubparts.lookup(subpart); }
-
-	//--------------------------------------------------------------------
-	// Picker Control Entries
-	//--------------------------------------------------------------------
+        struct SubpartEntry : public LLDictionaryEntry
+        {
+                SubpartEntry(ESubpart part,
+                                         const std::string &joint,
+                                         const std::string &edit_group,
+                                         const std::string &param_list,
+                                         const std::string &accordion_tab,
+                                         const LLVector3d  &target_offset,
+                                         const LLVector3d  &camera_offset,
+                                         const ESex        &sex);
+
+                ESubpart                        mSubpart;
+                std::string                     mTargetJoint;
+                std::string                     mEditGroup;
+                std::string                     mParamList;
+                std::string                     mAccordionTab;
+                LLVector3d                      mTargetOffset;
+                LLVector3d                      mCameraOffset;
+                ESex                            mSex;
+        };
+
+        struct Subparts : public LLDictionary<ESubpart, SubpartEntry>
+        {
+                Subparts();
+        } mSubparts;
+
+        const SubpartEntry*  getSubpart(ESubpart subpart) const { return mSubparts.lookup(subpart); }
+
+        //--------------------------------------------------------------------
+        // Picker Control Entries
+        //--------------------------------------------------------------------
 public:
-	struct PickerControlEntry : public LLDictionaryEntry
-	{
-		PickerControlEntry(ETextureIndex tex_index,
-						   const std::string name,
-						   const LLUUID default_image_id = LLUUID::null,
-						   const bool allow_no_texture = false);
-		ETextureIndex		mTextureIndex;
-		const std::string	mControlName;
-		const LLUUID		mDefaultImageId;
-		const bool			mAllowNoTexture;
-	};
-
-	struct ColorSwatchCtrls : public LLDictionary<ETextureIndex, PickerControlEntry>
-	{
-		ColorSwatchCtrls();
-	} mColorSwatchCtrls;
-
-	struct TextureCtrls : public LLDictionary<ETextureIndex, PickerControlEntry>
-	{
-		TextureCtrls();
-	} mTextureCtrls;
-
-	const PickerControlEntry* getTexturePicker(ETextureIndex index) const { return mTextureCtrls.lookup(index); }
-	const PickerControlEntry* getColorSwatch(ETextureIndex index) const { return mColorSwatchCtrls.lookup(index); }
+        struct PickerControlEntry : public LLDictionaryEntry
+        {
+                PickerControlEntry(ETextureIndex tex_index,
+                                                   const std::string name,
+                                                   const LLUUID default_image_id = LLUUID::null,
+                                                   const bool allow_no_texture = false);
+                ETextureIndex           mTextureIndex;
+                const std::string       mControlName;
+                const LLUUID            mDefaultImageId;
+                const bool                      mAllowNoTexture;
+        };
+
+        struct ColorSwatchCtrls : public LLDictionary<ETextureIndex, PickerControlEntry>
+        {
+                ColorSwatchCtrls();
+        } mColorSwatchCtrls;
+
+        struct TextureCtrls : public LLDictionary<ETextureIndex, PickerControlEntry>
+        {
+                TextureCtrls();
+        } mTextureCtrls;
+
+        const PickerControlEntry* getTexturePicker(ETextureIndex index) const { return mTextureCtrls.lookup(index); }
+        const PickerControlEntry* getColorSwatch(ETextureIndex index) const { return mColorSwatchCtrls.lookup(index); }
 };
 
 LLEditWearableDictionary::LLEditWearableDictionary()
@@ -215,166 +222,174 @@ LLEditWearableDictionary::~LLEditWearableDictionary()
 
 LLEditWearableDictionary::Wearables::Wearables()
 {
-	// note the subpart that is listed first is treated as "default", regardless of what order is in enum.
-	// Please match the order presented in XUI. -Nyx
-	// this will affect what camera angle is shown when first editing a wearable
-	addEntry(LLWearableType::WT_SHAPE, 		new WearableEntry(LLWearableType::WT_SHAPE,"edit_shape_title","shape_desc_text",0,0,9,	SUBPART_SHAPE_WHOLE, SUBPART_SHAPE_HEAD,	SUBPART_SHAPE_EYES,	SUBPART_SHAPE_EARS,	SUBPART_SHAPE_NOSE,	SUBPART_SHAPE_MOUTH, SUBPART_SHAPE_CHIN, SUBPART_SHAPE_TORSO, SUBPART_SHAPE_LEGS ));
-	addEntry(LLWearableType::WT_SKIN, 		new WearableEntry(LLWearableType::WT_SKIN,"edit_skin_title","skin_desc_text",0,3,4, TEX_HEAD_BODYPAINT, TEX_UPPER_BODYPAINT, TEX_LOWER_BODYPAINT, SUBPART_SKIN_COLOR, SUBPART_SKIN_FACEDETAIL, SUBPART_SKIN_MAKEUP, SUBPART_SKIN_BODYDETAIL));
-	addEntry(LLWearableType::WT_HAIR, 		new WearableEntry(LLWearableType::WT_HAIR,"edit_hair_title","hair_desc_text",0,1,4, TEX_HAIR, SUBPART_HAIR_COLOR,	SUBPART_HAIR_STYLE,	SUBPART_HAIR_EYEBROWS, SUBPART_HAIR_FACIAL));
-	addEntry(LLWearableType::WT_EYES, 		new WearableEntry(LLWearableType::WT_EYES,"edit_eyes_title","eyes_desc_text",0,1,1, TEX_EYES_IRIS, SUBPART_EYES));
-	addEntry(LLWearableType::WT_SHIRT, 		new WearableEntry(LLWearableType::WT_SHIRT,"edit_shirt_title","shirt_desc_text",1,1,1, TEX_UPPER_SHIRT, TEX_UPPER_SHIRT, SUBPART_SHIRT));
-	addEntry(LLWearableType::WT_PANTS, 		new WearableEntry(LLWearableType::WT_PANTS,"edit_pants_title","pants_desc_text",1,1,1, TEX_LOWER_PANTS, TEX_LOWER_PANTS, SUBPART_PANTS));
-	addEntry(LLWearableType::WT_SHOES, 		new WearableEntry(LLWearableType::WT_SHOES,"edit_shoes_title","shoes_desc_text",1,1,1, TEX_LOWER_SHOES, TEX_LOWER_SHOES, SUBPART_SHOES));
-	addEntry(LLWearableType::WT_SOCKS, 		new WearableEntry(LLWearableType::WT_SOCKS,"edit_socks_title","socks_desc_text",1,1,1, TEX_LOWER_SOCKS, TEX_LOWER_SOCKS, SUBPART_SOCKS));
-	addEntry(LLWearableType::WT_JACKET, 	new WearableEntry(LLWearableType::WT_JACKET,"edit_jacket_title","jacket_desc_text",1,2,1, TEX_UPPER_JACKET, TEX_UPPER_JACKET, TEX_LOWER_JACKET, SUBPART_JACKET));
-	addEntry(LLWearableType::WT_GLOVES, 	new WearableEntry(LLWearableType::WT_GLOVES,"edit_gloves_title","gloves_desc_text",1,1,1, TEX_UPPER_GLOVES, TEX_UPPER_GLOVES, SUBPART_GLOVES));
-	addEntry(LLWearableType::WT_UNDERSHIRT, new WearableEntry(LLWearableType::WT_UNDERSHIRT,"edit_undershirt_title","undershirt_desc_text",1,1,1, TEX_UPPER_UNDERSHIRT, TEX_UPPER_UNDERSHIRT, SUBPART_UNDERSHIRT));
-	addEntry(LLWearableType::WT_UNDERPANTS, new WearableEntry(LLWearableType::WT_UNDERPANTS,"edit_underpants_title","underpants_desc_text",1,1,1, TEX_LOWER_UNDERPANTS, TEX_LOWER_UNDERPANTS, SUBPART_UNDERPANTS));
-	addEntry(LLWearableType::WT_SKIRT, 		new WearableEntry(LLWearableType::WT_SKIRT,"edit_skirt_title","skirt_desc_text",1,1,1, TEX_SKIRT, TEX_SKIRT, SUBPART_SKIRT));
-	addEntry(LLWearableType::WT_ALPHA, 		new WearableEntry(LLWearableType::WT_ALPHA,"edit_alpha_title","alpha_desc_text",0,5,1, TEX_LOWER_ALPHA, TEX_UPPER_ALPHA, TEX_HEAD_ALPHA, TEX_EYES_ALPHA, TEX_HAIR_ALPHA, SUBPART_ALPHA));
-	addEntry(LLWearableType::WT_TATTOO, 	new WearableEntry(LLWearableType::WT_TATTOO,"edit_tattoo_title","tattoo_desc_text",1,3,1, TEX_HEAD_TATTOO, TEX_LOWER_TATTOO, TEX_UPPER_TATTOO, TEX_HEAD_TATTOO, SUBPART_TATTOO));
+        // note the subpart that is listed first is treated as "default", regardless of what order is in enum.
+        // Please match the order presented in XUI. -Nyx
+        // this will affect what camera angle is shown when first editing a wearable
+        addEntry(LLWearableType::WT_SHAPE,              new WearableEntry(LLWearableType::WT_SHAPE,"edit_shape_title","shape_desc_text",0,0,9,  SUBPART_SHAPE_WHOLE, SUBPART_SHAPE_HEAD,        SUBPART_SHAPE_EYES,     SUBPART_SHAPE_EARS,     SUBPART_SHAPE_NOSE,     SUBPART_SHAPE_MOUTH, SUBPART_SHAPE_CHIN, SUBPART_SHAPE_TORSO, SUBPART_SHAPE_LEGS));
+        addEntry(LLWearableType::WT_SKIN,               new WearableEntry(LLWearableType::WT_SKIN,"edit_skin_title","skin_desc_text",0,3,4, TEX_HEAD_BODYPAINT, TEX_UPPER_BODYPAINT, TEX_LOWER_BODYPAINT, SUBPART_SKIN_COLOR, SUBPART_SKIN_FACEDETAIL, SUBPART_SKIN_MAKEUP, SUBPART_SKIN_BODYDETAIL));
+        addEntry(LLWearableType::WT_HAIR,               new WearableEntry(LLWearableType::WT_HAIR,"edit_hair_title","hair_desc_text",0,1,4, TEX_HAIR, SUBPART_HAIR_COLOR,       SUBPART_HAIR_STYLE,     SUBPART_HAIR_EYEBROWS, SUBPART_HAIR_FACIAL));
+        addEntry(LLWearableType::WT_EYES,               new WearableEntry(LLWearableType::WT_EYES,"edit_eyes_title","eyes_desc_text",0,1,1, TEX_EYES_IRIS, SUBPART_EYES));
+        addEntry(LLWearableType::WT_SHIRT,              new WearableEntry(LLWearableType::WT_SHIRT,"edit_shirt_title","shirt_desc_text",1,1,1, TEX_UPPER_SHIRT, TEX_UPPER_SHIRT, SUBPART_SHIRT));
+        addEntry(LLWearableType::WT_PANTS,              new WearableEntry(LLWearableType::WT_PANTS,"edit_pants_title","pants_desc_text",1,1,1, TEX_LOWER_PANTS, TEX_LOWER_PANTS, SUBPART_PANTS));
+        addEntry(LLWearableType::WT_SHOES,              new WearableEntry(LLWearableType::WT_SHOES,"edit_shoes_title","shoes_desc_text",1,1,1, TEX_LOWER_SHOES, TEX_LOWER_SHOES, SUBPART_SHOES));
+        addEntry(LLWearableType::WT_SOCKS,              new WearableEntry(LLWearableType::WT_SOCKS,"edit_socks_title","socks_desc_text",1,1,1, TEX_LOWER_SOCKS, TEX_LOWER_SOCKS, SUBPART_SOCKS));
+        addEntry(LLWearableType::WT_JACKET,     new WearableEntry(LLWearableType::WT_JACKET,"edit_jacket_title","jacket_desc_text",1,2,1, TEX_UPPER_JACKET, TEX_UPPER_JACKET, TEX_LOWER_JACKET, SUBPART_JACKET));
+        addEntry(LLWearableType::WT_GLOVES,     new WearableEntry(LLWearableType::WT_GLOVES,"edit_gloves_title","gloves_desc_text",1,1,1, TEX_UPPER_GLOVES, TEX_UPPER_GLOVES, SUBPART_GLOVES));
+        addEntry(LLWearableType::WT_UNDERSHIRT, new WearableEntry(LLWearableType::WT_UNDERSHIRT,"edit_undershirt_title","undershirt_desc_text",1,1,1, TEX_UPPER_UNDERSHIRT, TEX_UPPER_UNDERSHIRT, SUBPART_UNDERSHIRT));
+        addEntry(LLWearableType::WT_UNDERPANTS, new WearableEntry(LLWearableType::WT_UNDERPANTS,"edit_underpants_title","underpants_desc_text",1,1,1, TEX_LOWER_UNDERPANTS, TEX_LOWER_UNDERPANTS, SUBPART_UNDERPANTS));
+        addEntry(LLWearableType::WT_SKIRT,              new WearableEntry(LLWearableType::WT_SKIRT,"edit_skirt_title","skirt_desc_text",1,1,1, TEX_SKIRT, TEX_SKIRT, SUBPART_SKIRT));
+        addEntry(LLWearableType::WT_ALPHA,              new WearableEntry(LLWearableType::WT_ALPHA,"edit_alpha_title","alpha_desc_text",0,5,1, TEX_LOWER_ALPHA, TEX_UPPER_ALPHA, TEX_HEAD_ALPHA, TEX_EYES_ALPHA, TEX_HAIR_ALPHA, SUBPART_ALPHA));
+        addEntry(LLWearableType::WT_TATTOO,     new WearableEntry(LLWearableType::WT_TATTOO,"edit_tattoo_title","tattoo_desc_text",1,3,1, TEX_HEAD_TATTOO, TEX_LOWER_TATTOO, TEX_UPPER_TATTOO, TEX_HEAD_TATTOO, SUBPART_TATTOO));
+        addEntry(LLWearableType::WT_PHYSICS,    new WearableEntry(LLWearableType::WT_PHYSICS,"edit_physics_title","physics_desc_text",0,0,7, SUBPART_PHYSICS_BREASTS_UPDOWN, SUBPART_PHYSICS_BREASTS_INOUT, SUBPART_PHYSICS_BREASTS_LEFTRIGHT, SUBPART_PHYSICS_BELLY_UPDOWN, SUBPART_PHYSICS_BUTT_UPDOWN, SUBPART_PHYSICS_BUTT_LEFTRIGHT, SUBPART_PHYSICS_ADVANCED));
 }
 
 LLEditWearableDictionary::WearableEntry::WearableEntry(LLWearableType::EType type,
-					  const std::string &title,
-					  const std::string &desc_title,
-					  U8 num_color_swatches,
-					  U8 num_texture_pickers,
-					  U8 num_subparts, ... ) :
-	LLDictionaryEntry(title),
-	mWearableType(type),
-	mTitle(title),
-	mDescTitle(desc_title)
-{
-	va_list argp;
-	va_start(argp, num_subparts);
-
-	for (U8 i = 0; i < num_color_swatches; ++i)
-	{
-		ETextureIndex index = (ETextureIndex)va_arg(argp,int);
-		mColorSwatchCtrls.push_back(index);
-	}
-
-	for (U8 i = 0; i < num_texture_pickers; ++i)
-	{
-		ETextureIndex index = (ETextureIndex)va_arg(argp,int);
-		mTextureCtrls.push_back(index);
-	}
-
-	for (U8 i = 0; i < num_subparts; ++i)
-	{
-		ESubpart part = (ESubpart)va_arg(argp,int);
-		mSubparts.push_back(part);
-	}
+                                          const std::string &title,
+                                          const std::string &desc_title,
+                                          U8 num_color_swatches,
+                                          U8 num_texture_pickers,
+                                          U8 num_subparts, ... ) :
+        LLDictionaryEntry(title),
+        mWearableType(type),
+        mTitle(title),
+        mDescTitle(desc_title)
+{
+        va_list argp;
+        va_start(argp, num_subparts);
+
+        for (U8 i = 0; i < num_color_swatches; ++i)
+        {
+                ETextureIndex index = (ETextureIndex)va_arg(argp,int);
+                mColorSwatchCtrls.push_back(index);
+        }
+
+        for (U8 i = 0; i < num_texture_pickers; ++i)
+        {
+                ETextureIndex index = (ETextureIndex)va_arg(argp,int);
+                mTextureCtrls.push_back(index);
+        }
+
+        for (U8 i = 0; i < num_subparts; ++i)
+        {
+                ESubpart part = (ESubpart)va_arg(argp,int);
+                mSubparts.push_back(part);
+        }
 }
 
 LLEditWearableDictionary::Subparts::Subparts()
 {
-	addEntry(SUBPART_SHAPE_WHOLE, new SubpartEntry(SUBPART_SHAPE_WHOLE, "mPelvis", "shape_body","shape_body_param_list", "shape_body_tab", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH));
-	addEntry(SUBPART_SHAPE_HEAD, new SubpartEntry(SUBPART_SHAPE_HEAD, "mHead", "shape_head", "shape_head_param_list", "shape_head_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
-	addEntry(SUBPART_SHAPE_EYES, new SubpartEntry(SUBPART_SHAPE_EYES, "mHead", "shape_eyes", "shape_eyes_param_list", "shape_eyes_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
-	addEntry(SUBPART_SHAPE_EARS, new SubpartEntry(SUBPART_SHAPE_EARS, "mHead", "shape_ears", "shape_ears_param_list", "shape_ears_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
-	addEntry(SUBPART_SHAPE_NOSE, new SubpartEntry(SUBPART_SHAPE_NOSE, "mHead", "shape_nose", "shape_nose_param_list", "shape_nose_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
-	addEntry(SUBPART_SHAPE_MOUTH, new SubpartEntry(SUBPART_SHAPE_MOUTH, "mHead", "shape_mouth", "shape_mouth_param_list", "shape_mouth_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
-	addEntry(SUBPART_SHAPE_CHIN, new SubpartEntry(SUBPART_SHAPE_CHIN, "mHead", "shape_chin", "shape_chin_param_list", "shape_chin_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
-	addEntry(SUBPART_SHAPE_TORSO, new SubpartEntry(SUBPART_SHAPE_TORSO, "mTorso", "shape_torso", "shape_torso_param_list", "shape_torso_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(-1.f, 0.15f, 0.3f),SEX_BOTH));
-	addEntry(SUBPART_SHAPE_LEGS, new SubpartEntry(SUBPART_SHAPE_LEGS, "mPelvis", "shape_legs", "shape_legs_param_list", "shape_legs_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
-
-	addEntry(SUBPART_SKIN_COLOR, new SubpartEntry(SUBPART_SKIN_COLOR, "mHead", "skin_color", "skin_color_param_list", "skin_color_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
-	addEntry(SUBPART_SKIN_FACEDETAIL, new SubpartEntry(SUBPART_SKIN_FACEDETAIL, "mHead", "skin_facedetail", "skin_face_param_list", "skin_face_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
-	addEntry(SUBPART_SKIN_MAKEUP, new SubpartEntry(SUBPART_SKIN_MAKEUP, "mHead", "skin_makeup", "skin_makeup_param_list", "skin_makeup_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
-	addEntry(SUBPART_SKIN_BODYDETAIL, new SubpartEntry(SUBPART_SKIN_BODYDETAIL, "mPelvis", "skin_bodydetail", "skin_body_param_list", "skin_body_tab", LLVector3d(0.f, 0.f, -0.2f), LLVector3d(-2.5f, 0.5f, 0.5f),SEX_BOTH));
-
-	addEntry(SUBPART_HAIR_COLOR, new SubpartEntry(SUBPART_HAIR_COLOR, "mHead", "hair_color", "hair_color_param_list", "hair_color_tab", LLVector3d(0.f, 0.f, 0.10f), LLVector3d(-0.4f, 0.05f, 0.10f),SEX_BOTH));
-	addEntry(SUBPART_HAIR_STYLE, new SubpartEntry(SUBPART_HAIR_STYLE, "mHead", "hair_style", "hair_style_param_list", "hair_style_tab", LLVector3d(0.f, 0.f, 0.10f), LLVector3d(-0.4f, 0.05f, 0.10f),SEX_BOTH));
-	addEntry(SUBPART_HAIR_EYEBROWS, new SubpartEntry(SUBPART_HAIR_EYEBROWS, "mHead", "hair_eyebrows", "hair_eyebrows_param_list", "hair_eyebrows_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
-	addEntry(SUBPART_HAIR_FACIAL, new SubpartEntry(SUBPART_HAIR_FACIAL, "mHead", "hair_facial", "hair_facial_param_list", "hair_facial_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_MALE));
-
-	addEntry(SUBPART_EYES, new SubpartEntry(SUBPART_EYES, "mHead", "eyes", "eyes_main_param_list", "eyes_main_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
-
-	addEntry(SUBPART_SHIRT, new SubpartEntry(SUBPART_SHIRT, "mTorso", "shirt", "shirt_main_param_list", "shirt_main_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(-1.f, 0.15f, 0.3f),SEX_BOTH));
-	addEntry(SUBPART_PANTS, new SubpartEntry(SUBPART_PANTS, "mPelvis", "pants", "pants_main_param_list", "pants_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
-	addEntry(SUBPART_SHOES, new SubpartEntry(SUBPART_SHOES, "mPelvis", "shoes", "shoes_main_param_list", "shoes_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
-	addEntry(SUBPART_SOCKS, new SubpartEntry(SUBPART_SOCKS, "mPelvis", "socks", "socks_main_param_list", "socks_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
-	addEntry(SUBPART_JACKET, new SubpartEntry(SUBPART_JACKET, "mTorso", "jacket", "jacket_main_param_list", "jacket_main_tab", LLVector3d(0.f, 0.f, 0.f), LLVector3d(-2.f, 0.1f, 0.3f),SEX_BOTH));
-	addEntry(SUBPART_SKIRT, new SubpartEntry(SUBPART_SKIRT, "mPelvis", "skirt", "skirt_main_param_list", "skirt_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
-	addEntry(SUBPART_GLOVES, new SubpartEntry(SUBPART_GLOVES, "mTorso", "gloves", "gloves_main_param_list", "gloves_main_tab", LLVector3d(0.f, 0.f, 0.f), LLVector3d(-1.f, 0.15f, 0.f),SEX_BOTH));
-	addEntry(SUBPART_UNDERSHIRT, new SubpartEntry(SUBPART_UNDERSHIRT, "mTorso", "undershirt", "undershirt_main_param_list", "undershirt_main_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(-1.f, 0.15f, 0.3f),SEX_BOTH));
-	addEntry(SUBPART_UNDERPANTS, new SubpartEntry(SUBPART_UNDERPANTS, "mPelvis", "underpants", "underpants_main_param_list", "underpants_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
-	addEntry(SUBPART_ALPHA, new SubpartEntry(SUBPART_ALPHA, "mPelvis", "alpha", "alpha_main_param_list", "alpha_main_tab", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH));
-	addEntry(SUBPART_TATTOO, new SubpartEntry(SUBPART_TATTOO, "mPelvis", "tattoo", "tattoo_main_param_list", "tattoo_main_tab", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH));
+        addEntry(SUBPART_SHAPE_WHOLE, new SubpartEntry(SUBPART_SHAPE_WHOLE, "mPelvis", "shape_body","shape_body_param_list", "shape_body_tab", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH));
+        addEntry(SUBPART_SHAPE_HEAD, new SubpartEntry(SUBPART_SHAPE_HEAD, "mHead", "shape_head", "shape_head_param_list", "shape_head_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+        addEntry(SUBPART_SHAPE_EYES, new SubpartEntry(SUBPART_SHAPE_EYES, "mHead", "shape_eyes", "shape_eyes_param_list", "shape_eyes_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+        addEntry(SUBPART_SHAPE_EARS, new SubpartEntry(SUBPART_SHAPE_EARS, "mHead", "shape_ears", "shape_ears_param_list", "shape_ears_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+        addEntry(SUBPART_SHAPE_NOSE, new SubpartEntry(SUBPART_SHAPE_NOSE, "mHead", "shape_nose", "shape_nose_param_list", "shape_nose_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+        addEntry(SUBPART_SHAPE_MOUTH, new SubpartEntry(SUBPART_SHAPE_MOUTH, "mHead", "shape_mouth", "shape_mouth_param_list", "shape_mouth_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+        addEntry(SUBPART_SHAPE_CHIN, new SubpartEntry(SUBPART_SHAPE_CHIN, "mHead", "shape_chin", "shape_chin_param_list", "shape_chin_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+        addEntry(SUBPART_SHAPE_TORSO, new SubpartEntry(SUBPART_SHAPE_TORSO, "mTorso", "shape_torso", "shape_torso_param_list", "shape_torso_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(-1.f, 0.15f, 0.3f),SEX_BOTH));
+        addEntry(SUBPART_SHAPE_LEGS, new SubpartEntry(SUBPART_SHAPE_LEGS, "mPelvis", "shape_legs", "shape_legs_param_list", "shape_legs_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
+
+        addEntry(SUBPART_SKIN_COLOR, new SubpartEntry(SUBPART_SKIN_COLOR, "mHead", "skin_color", "skin_color_param_list", "skin_color_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+        addEntry(SUBPART_SKIN_FACEDETAIL, new SubpartEntry(SUBPART_SKIN_FACEDETAIL, "mHead", "skin_facedetail", "skin_face_param_list", "skin_face_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+        addEntry(SUBPART_SKIN_MAKEUP, new SubpartEntry(SUBPART_SKIN_MAKEUP, "mHead", "skin_makeup", "skin_makeup_param_list", "skin_makeup_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+        addEntry(SUBPART_SKIN_BODYDETAIL, new SubpartEntry(SUBPART_SKIN_BODYDETAIL, "mPelvis", "skin_bodydetail", "skin_body_param_list", "skin_body_tab", LLVector3d(0.f, 0.f, -0.2f), LLVector3d(-2.5f, 0.5f, 0.5f),SEX_BOTH));
+
+        addEntry(SUBPART_HAIR_COLOR, new SubpartEntry(SUBPART_HAIR_COLOR, "mHead", "hair_color", "hair_color_param_list", "hair_color_tab", LLVector3d(0.f, 0.f, 0.10f), LLVector3d(-0.4f, 0.05f, 0.10f),SEX_BOTH));
+        addEntry(SUBPART_HAIR_STYLE, new SubpartEntry(SUBPART_HAIR_STYLE, "mHead", "hair_style", "hair_style_param_list", "hair_style_tab", LLVector3d(0.f, 0.f, 0.10f), LLVector3d(-0.4f, 0.05f, 0.10f),SEX_BOTH));
+        addEntry(SUBPART_HAIR_EYEBROWS, new SubpartEntry(SUBPART_HAIR_EYEBROWS, "mHead", "hair_eyebrows", "hair_eyebrows_param_list", "hair_eyebrows_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+        addEntry(SUBPART_HAIR_FACIAL, new SubpartEntry(SUBPART_HAIR_FACIAL, "mHead", "hair_facial", "hair_facial_param_list", "hair_facial_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_MALE));
+
+        addEntry(SUBPART_EYES, new SubpartEntry(SUBPART_EYES, "mHead", "eyes", "eyes_main_param_list", "eyes_main_tab", LLVector3d(0.f, 0.f, 0.05f), LLVector3d(-0.5f, 0.05f, 0.07f),SEX_BOTH));
+
+        addEntry(SUBPART_SHIRT, new SubpartEntry(SUBPART_SHIRT, "mTorso", "shirt", "shirt_main_param_list", "shirt_main_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(-1.f, 0.15f, 0.3f),SEX_BOTH));
+        addEntry(SUBPART_PANTS, new SubpartEntry(SUBPART_PANTS, "mPelvis", "pants", "pants_main_param_list", "pants_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
+        addEntry(SUBPART_SHOES, new SubpartEntry(SUBPART_SHOES, "mPelvis", "shoes", "shoes_main_param_list", "shoes_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
+        addEntry(SUBPART_SOCKS, new SubpartEntry(SUBPART_SOCKS, "mPelvis", "socks", "socks_main_param_list", "socks_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
+        addEntry(SUBPART_JACKET, new SubpartEntry(SUBPART_JACKET, "mTorso", "jacket", "jacket_main_param_list", "jacket_main_tab", LLVector3d(0.f, 0.f, 0.f), LLVector3d(-2.f, 0.1f, 0.3f),SEX_BOTH));
+        addEntry(SUBPART_SKIRT, new SubpartEntry(SUBPART_SKIRT, "mPelvis", "skirt", "skirt_main_param_list", "skirt_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
+        addEntry(SUBPART_GLOVES, new SubpartEntry(SUBPART_GLOVES, "mTorso", "gloves", "gloves_main_param_list", "gloves_main_tab", LLVector3d(0.f, 0.f, 0.f), LLVector3d(-1.f, 0.15f, 0.f),SEX_BOTH));
+        addEntry(SUBPART_UNDERSHIRT, new SubpartEntry(SUBPART_UNDERSHIRT, "mTorso", "undershirt", "undershirt_main_param_list", "undershirt_main_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(-1.f, 0.15f, 0.3f),SEX_BOTH));
+        addEntry(SUBPART_UNDERPANTS, new SubpartEntry(SUBPART_UNDERPANTS, "mPelvis", "underpants", "underpants_main_param_list", "underpants_main_tab", LLVector3d(0.f, 0.f, -0.5f), LLVector3d(-1.6f, 0.15f, -0.5f),SEX_BOTH));
+        addEntry(SUBPART_ALPHA, new SubpartEntry(SUBPART_ALPHA, "mPelvis", "alpha", "alpha_main_param_list", "alpha_main_tab", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH));
+        addEntry(SUBPART_TATTOO, new SubpartEntry(SUBPART_TATTOO, "mPelvis", "tattoo", "tattoo_main_param_list", "tattoo_main_tab", LLVector3d(0.f, 0.f, 0.1f), LLVector3d(-2.5f, 0.5f, 0.8f),SEX_BOTH));
+        addEntry(SUBPART_PHYSICS_BREASTS_UPDOWN, new SubpartEntry(SUBPART_PHYSICS_BREASTS_UPDOWN, "mTorso", "physics_breasts_updown", "physics_breasts_updown_param_list", "physics_breasts_updown_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(0.f, 0.f, 0.f),SEX_FEMALE));
+        addEntry(SUBPART_PHYSICS_BREASTS_INOUT, new SubpartEntry(SUBPART_PHYSICS_BREASTS_INOUT, "mTorso", "physics_breasts_inout", "physics_breasts_inout_param_list", "physics_breasts_inout_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(0.f, 0.f, 0.f),SEX_FEMALE));
+        addEntry(SUBPART_PHYSICS_BREASTS_LEFTRIGHT, new SubpartEntry(SUBPART_PHYSICS_BREASTS_LEFTRIGHT, "mTorso", "physics_breasts_leftright", "physics_breasts_leftright_param_list", "physics_breasts_leftright_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(0.f, 0.f, 0.f),SEX_FEMALE));
+        addEntry(SUBPART_PHYSICS_BELLY_UPDOWN, new SubpartEntry(SUBPART_PHYSICS_BELLY_UPDOWN, "mTorso", "physics_belly_updown", "physics_belly_updown_param_list", "physics_belly_updown_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(0.f, 0.f, 0.f),SEX_BOTH));
+        addEntry(SUBPART_PHYSICS_BUTT_UPDOWN, new SubpartEntry(SUBPART_PHYSICS_BUTT_UPDOWN, "mTorso", "physics_butt_updown", "physics_butt_updown_param_list", "physics_butt_updown_tab", LLVector3d(0.f, 0.f, 0.3f), LLVector3d(0.f, 0.f, 0.f),SEX_BOTH));
+        addEntry(SUBPART_PHYSICS_BUTT_LEFTRIGHT, new SubpartEntry(SUBPART_PHYSICS_BUTT_LEFTRIGHT, "mTorso", "physics_butt_leftright", "physics_butt_leftright_param_list", "physics_butt_leftright_tab", LLVector3d(0.f, 0.f, 0.f), LLVector3d(0.f, 0.f, 0.f),SEX_BOTH));
+        addEntry(SUBPART_PHYSICS_ADVANCED, new SubpartEntry(SUBPART_PHYSICS_ADVANCED, "mTorso", "physics_advanced", "physics_advanced_param_list", "physics_advanced_tab", LLVector3d(0.f, 0.f, 0.f), LLVector3d(0.f, 0.f, 0.f),SEX_BOTH));
 }
 
 LLEditWearableDictionary::SubpartEntry::SubpartEntry(ESubpart part,
-					 const std::string &joint,
-					 const std::string &edit_group,
-					 const std::string &param_list,
-					 const std::string &accordion_tab,
-					 const LLVector3d  &target_offset,
-					 const LLVector3d  &camera_offset,
-					 const ESex 	   &sex) :
-	LLDictionaryEntry(edit_group),
-	mSubpart(part),
-	mTargetJoint(joint),
-	mEditGroup(edit_group),
-	mParamList(param_list),
-	mAccordionTab(accordion_tab),
-	mTargetOffset(target_offset),
-	mCameraOffset(camera_offset),
-	mSex(sex)
+                                         const std::string &joint,
+                                         const std::string &edit_group,
+                                         const std::string &param_list,
+                                         const std::string &accordion_tab,
+                                         const LLVector3d  &target_offset,
+                                         const LLVector3d  &camera_offset,
+                                         const ESex        &sex) :
+        LLDictionaryEntry(edit_group),
+        mSubpart(part),
+        mTargetJoint(joint),
+        mEditGroup(edit_group),
+        mParamList(param_list),
+        mAccordionTab(accordion_tab),
+        mTargetOffset(target_offset),
+        mCameraOffset(camera_offset),
+        mSex(sex)
 {
 }
 
 LLEditWearableDictionary::ColorSwatchCtrls::ColorSwatchCtrls()
 {
-	addEntry ( TEX_UPPER_SHIRT,  new PickerControlEntry (TEX_UPPER_SHIRT, "Color/Tint" ));
-	addEntry ( TEX_LOWER_PANTS,  new PickerControlEntry (TEX_LOWER_PANTS, "Color/Tint" ));
-	addEntry ( TEX_LOWER_SHOES,  new PickerControlEntry (TEX_LOWER_SHOES, "Color/Tint" ));
-	addEntry ( TEX_LOWER_SOCKS,  new PickerControlEntry (TEX_LOWER_SOCKS, "Color/Tint" ));
-	addEntry ( TEX_UPPER_JACKET, new PickerControlEntry (TEX_UPPER_JACKET, "Color/Tint" ));
-	addEntry ( TEX_SKIRT,  new PickerControlEntry (TEX_SKIRT, "Color/Tint" ));
-	addEntry ( TEX_UPPER_GLOVES, new PickerControlEntry (TEX_UPPER_GLOVES, "Color/Tint" ));
-	addEntry ( TEX_UPPER_UNDERSHIRT, new PickerControlEntry (TEX_UPPER_UNDERSHIRT, "Color/Tint" ));
-	addEntry ( TEX_LOWER_UNDERPANTS, new PickerControlEntry (TEX_LOWER_UNDERPANTS, "Color/Tint" ));
-	addEntry ( TEX_HEAD_TATTOO, new PickerControlEntry(TEX_HEAD_TATTOO, "Color/Tint" ));
+        addEntry ( TEX_UPPER_SHIRT,  new PickerControlEntry (TEX_UPPER_SHIRT, "Color/Tint" ));
+        addEntry ( TEX_LOWER_PANTS,  new PickerControlEntry (TEX_LOWER_PANTS, "Color/Tint" ));
+        addEntry ( TEX_LOWER_SHOES,  new PickerControlEntry (TEX_LOWER_SHOES, "Color/Tint" ));
+        addEntry ( TEX_LOWER_SOCKS,  new PickerControlEntry (TEX_LOWER_SOCKS, "Color/Tint" ));
+        addEntry ( TEX_UPPER_JACKET, new PickerControlEntry (TEX_UPPER_JACKET, "Color/Tint" ));
+        addEntry ( TEX_SKIRT,  new PickerControlEntry (TEX_SKIRT, "Color/Tint" ));
+        addEntry ( TEX_UPPER_GLOVES, new PickerControlEntry (TEX_UPPER_GLOVES, "Color/Tint" ));
+        addEntry ( TEX_UPPER_UNDERSHIRT, new PickerControlEntry (TEX_UPPER_UNDERSHIRT, "Color/Tint" ));
+        addEntry ( TEX_LOWER_UNDERPANTS, new PickerControlEntry (TEX_LOWER_UNDERPANTS, "Color/Tint" ));
+        addEntry ( TEX_HEAD_TATTOO, new PickerControlEntry(TEX_HEAD_TATTOO, "Color/Tint" ));
 }
 
 LLEditWearableDictionary::TextureCtrls::TextureCtrls()
 {
-	addEntry ( TEX_HEAD_BODYPAINT,  new PickerControlEntry (TEX_HEAD_BODYPAINT,  "Head Tattoos", LLUUID::null, TRUE ));
-	addEntry ( TEX_UPPER_BODYPAINT, new PickerControlEntry (TEX_UPPER_BODYPAINT, "Upper Tattoos", LLUUID::null, TRUE ));
-	addEntry ( TEX_LOWER_BODYPAINT, new PickerControlEntry (TEX_LOWER_BODYPAINT, "Lower Tattoos", LLUUID::null, TRUE ));
-	addEntry ( TEX_HAIR, new PickerControlEntry (TEX_HAIR, "Texture", LLUUID( gSavedSettings.getString( "UIImgDefaultHairUUID" ) ), FALSE ));
-	addEntry ( TEX_EYES_IRIS, new PickerControlEntry (TEX_EYES_IRIS, "Iris", LLUUID( gSavedSettings.getString( "UIImgDefaultEyesUUID" ) ), FALSE ));
-	addEntry ( TEX_UPPER_SHIRT, new PickerControlEntry (TEX_UPPER_SHIRT, "Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultShirtUUID" ) ), FALSE ));
-	addEntry ( TEX_LOWER_PANTS, new PickerControlEntry (TEX_LOWER_PANTS, "Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultPantsUUID" ) ), FALSE ));
-	addEntry ( TEX_LOWER_SHOES, new PickerControlEntry (TEX_LOWER_SHOES, "Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultShoesUUID" ) ), FALSE ));
-	addEntry ( TEX_LOWER_SOCKS, new PickerControlEntry (TEX_LOWER_SOCKS, "Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultSocksUUID" ) ), FALSE ));
-	addEntry ( TEX_UPPER_JACKET, new PickerControlEntry (TEX_UPPER_JACKET, "Upper Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultJacketUUID" ) ), FALSE ));
-	addEntry ( TEX_LOWER_JACKET, new PickerControlEntry (TEX_LOWER_JACKET, "Lower Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultJacketUUID" ) ), FALSE ));
-	addEntry ( TEX_SKIRT, new PickerControlEntry (TEX_SKIRT, "Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultSkirtUUID" ) ), FALSE ));
-	addEntry ( TEX_UPPER_GLOVES, new PickerControlEntry (TEX_UPPER_GLOVES, "Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultGlovesUUID" ) ), FALSE ));
-	addEntry ( TEX_UPPER_UNDERSHIRT, new PickerControlEntry (TEX_UPPER_UNDERSHIRT, "Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultUnderwearUUID" ) ), FALSE ));
-	addEntry ( TEX_LOWER_UNDERPANTS, new PickerControlEntry (TEX_LOWER_UNDERPANTS, "Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultUnderwearUUID" ) ), FALSE ));
-	addEntry ( TEX_LOWER_ALPHA, new PickerControlEntry (TEX_LOWER_ALPHA, "Lower Alpha", LLUUID( gSavedSettings.getString( "UIImgDefaultAlphaUUID" ) ), TRUE ));
-	addEntry ( TEX_UPPER_ALPHA, new PickerControlEntry (TEX_UPPER_ALPHA, "Upper Alpha", LLUUID( gSavedSettings.getString( "UIImgDefaultAlphaUUID" ) ), TRUE ));
-	addEntry ( TEX_HEAD_ALPHA, new PickerControlEntry (TEX_HEAD_ALPHA, "Head Alpha", LLUUID( gSavedSettings.getString( "UIImgDefaultAlphaUUID" ) ), TRUE ));
-	addEntry ( TEX_EYES_ALPHA, new PickerControlEntry (TEX_EYES_ALPHA, "Eye Alpha", LLUUID( gSavedSettings.getString( "UIImgDefaultAlphaUUID" ) ), TRUE ));
-	addEntry ( TEX_HAIR_ALPHA, new PickerControlEntry (TEX_HAIR_ALPHA, "Hair Alpha", LLUUID( gSavedSettings.getString( "UIImgDefaultAlphaUUID" ) ), TRUE ));
-	addEntry ( TEX_LOWER_TATTOO, new PickerControlEntry (TEX_LOWER_TATTOO, "Lower Tattoo", LLUUID::null, TRUE ));
-	addEntry ( TEX_UPPER_TATTOO, new PickerControlEntry (TEX_UPPER_TATTOO, "Upper Tattoo", LLUUID::null, TRUE ));
-	addEntry ( TEX_HEAD_TATTOO, new PickerControlEntry (TEX_HEAD_TATTOO, "Head Tattoo", LLUUID::null, TRUE ));
+        addEntry ( TEX_HEAD_BODYPAINT,  new PickerControlEntry (TEX_HEAD_BODYPAINT,  "Head Tattoos", LLUUID::null, TRUE ));
+        addEntry ( TEX_UPPER_BODYPAINT, new PickerControlEntry (TEX_UPPER_BODYPAINT, "Upper Tattoos", LLUUID::null, TRUE ));
+        addEntry ( TEX_LOWER_BODYPAINT, new PickerControlEntry (TEX_LOWER_BODYPAINT, "Lower Tattoos", LLUUID::null, TRUE ));
+        addEntry ( TEX_HAIR, new PickerControlEntry (TEX_HAIR, "Texture", LLUUID( gSavedSettings.getString( "UIImgDefaultHairUUID" ) ), FALSE ));
+        addEntry ( TEX_EYES_IRIS, new PickerControlEntry (TEX_EYES_IRIS, "Iris", LLUUID( gSavedSettings.getString( "UIImgDefaultEyesUUID" ) ), FALSE ));
+        addEntry ( TEX_UPPER_SHIRT, new PickerControlEntry (TEX_UPPER_SHIRT, "Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultShirtUUID" ) ), FALSE ));
+        addEntry ( TEX_LOWER_PANTS, new PickerControlEntry (TEX_LOWER_PANTS, "Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultPantsUUID" ) ), FALSE ));
+        addEntry ( TEX_LOWER_SHOES, new PickerControlEntry (TEX_LOWER_SHOES, "Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultShoesUUID" ) ), FALSE ));
+        addEntry ( TEX_LOWER_SOCKS, new PickerControlEntry (TEX_LOWER_SOCKS, "Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultSocksUUID" ) ), FALSE ));
+        addEntry ( TEX_UPPER_JACKET, new PickerControlEntry (TEX_UPPER_JACKET, "Upper Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultJacketUUID" ) ), FALSE ));
+        addEntry ( TEX_LOWER_JACKET, new PickerControlEntry (TEX_LOWER_JACKET, "Lower Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultJacketUUID" ) ), FALSE ));
+        addEntry ( TEX_SKIRT, new PickerControlEntry (TEX_SKIRT, "Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultSkirtUUID" ) ), FALSE ));
+        addEntry ( TEX_UPPER_GLOVES, new PickerControlEntry (TEX_UPPER_GLOVES, "Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultGlovesUUID" ) ), FALSE ));
+        addEntry ( TEX_UPPER_UNDERSHIRT, new PickerControlEntry (TEX_UPPER_UNDERSHIRT, "Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultUnderwearUUID" ) ), FALSE ));
+        addEntry ( TEX_LOWER_UNDERPANTS, new PickerControlEntry (TEX_LOWER_UNDERPANTS, "Fabric", LLUUID( gSavedSettings.getString( "UIImgDefaultUnderwearUUID" ) ), FALSE ));
+        addEntry ( TEX_LOWER_ALPHA, new PickerControlEntry (TEX_LOWER_ALPHA, "Lower Alpha", LLUUID( gSavedSettings.getString( "UIImgDefaultAlphaUUID" ) ), TRUE ));
+        addEntry ( TEX_UPPER_ALPHA, new PickerControlEntry (TEX_UPPER_ALPHA, "Upper Alpha", LLUUID( gSavedSettings.getString( "UIImgDefaultAlphaUUID" ) ), TRUE ));
+        addEntry ( TEX_HEAD_ALPHA, new PickerControlEntry (TEX_HEAD_ALPHA, "Head Alpha", LLUUID( gSavedSettings.getString( "UIImgDefaultAlphaUUID" ) ), TRUE ));
+        addEntry ( TEX_EYES_ALPHA, new PickerControlEntry (TEX_EYES_ALPHA, "Eye Alpha", LLUUID( gSavedSettings.getString( "UIImgDefaultAlphaUUID" ) ), TRUE ));
+        addEntry ( TEX_HAIR_ALPHA, new PickerControlEntry (TEX_HAIR_ALPHA, "Hair Alpha", LLUUID( gSavedSettings.getString( "UIImgDefaultAlphaUUID" ) ), TRUE ));
+        addEntry ( TEX_LOWER_TATTOO, new PickerControlEntry (TEX_LOWER_TATTOO, "Lower Tattoo", LLUUID::null, TRUE ));
+        addEntry ( TEX_UPPER_TATTOO, new PickerControlEntry (TEX_UPPER_TATTOO, "Upper Tattoo", LLUUID::null, TRUE ));
+        addEntry ( TEX_HEAD_TATTOO, new PickerControlEntry (TEX_HEAD_TATTOO, "Head Tattoo", LLUUID::null, TRUE ));
 }
 
 LLEditWearableDictionary::PickerControlEntry::PickerControlEntry(ETextureIndex tex_index,
-					 const std::string name,
-					 const LLUUID default_image_id,
-					 const bool allow_no_texture) :
-	LLDictionaryEntry(name),
-	mTextureIndex(tex_index),
-	mControlName(name),
-	mDefaultImageId(default_image_id),
-	mAllowNoTexture(allow_no_texture)
+                                         const std::string name,
+                                         const LLUUID default_image_id,
+                                         const bool allow_no_texture) :
+        LLDictionaryEntry(name),
+        mTextureIndex(tex_index),
+        mControlName(name),
+        mDefaultImageId(default_image_id),
+        mAllowNoTexture(allow_no_texture)
 {
 }
 
@@ -384,13 +399,13 @@ LLEditWearableDictionary::PickerControlEntry::PickerControlEntry(ETextureIndex t
 class LLLabledBackButton : public LLButton
 {
 public:
-	struct Params : public LLInitParam::Block<Params, LLButton::Params>
-	{
-		Params() {}
-	};
+        struct Params : public LLInitParam::Block<Params, LLButton::Params>
+        {
+                Params() {}
+        };
 protected:
-	friend class LLUICtrlFactory;
-	LLLabledBackButton(const Params&);
+        friend class LLUICtrlFactory;
+        LLLabledBackButton(const Params&);
 };
 
 static LLDefaultChildRegistry::Register<LLLabledBackButton> labeled_back_btn("labeled_back_button");
@@ -398,9 +413,9 @@ static LLDefaultChildRegistry::Register<LLLabledBackButton> labeled_back_btn("la
 LLLabledBackButton::LLLabledBackButton(const Params& params)
 : LLButton(params)
 {
-	// override hack in LLButton's constructor to use paddings have been set in xml
-	setLeftHPad(params.pad_left);
-	setRightHPad(params.pad_right);
+        // override hack in LLButton's constructor to use paddings have been set in xml
+        setLeftHPad(params.pad_left);
+        setRightHPad(params.pad_right);
 }
 
 // Helper functions.
@@ -421,13 +436,13 @@ typedef boost::function<void(LLPanel* panel, const LLEditWearableDictionary::Pic
 
 typedef struct PickerControlEntryNamePredicate
 {
-	PickerControlEntryNamePredicate(const std::string name) : mName (name) {};
-	bool operator()(const LLEditWearableDictionary::PickerControlEntry* entry) const
-	{
-		return (entry && entry->mName == mName);
-	}
+        PickerControlEntryNamePredicate(const std::string name) : mName (name) {};
+        bool operator()(const LLEditWearableDictionary::PickerControlEntry* entry) const
+        {
+                return (entry && entry->mName == mName);
+        }
 private:
-	const std::string mName;
+        const std::string mName;
 } PickerControlEntryNamePredicate;
 
 // A full specialization of get_pickers_indexes for LLColorSwatchCtrl
@@ -435,12 +450,12 @@ template <>
 const texture_vec_t&
 get_pickers_indexes<LLColorSwatchCtrl> (const LLEditWearableDictionary::WearableEntry *wearable_entry)
 {
-	if (!wearable_entry)
-	{
-		llwarns << "could not get LLColorSwatchCtrl indexes for null wearable entry." << llendl;
-		return null_texture_vec;
-	}
-	return wearable_entry->mColorSwatchCtrls;
+        if (!wearable_entry)
+        {
+                llwarns << "could not get LLColorSwatchCtrl indexes for null wearable entry." << llendl;
+                return null_texture_vec;
+        }
+        return wearable_entry->mColorSwatchCtrls;
 }
 
 // A full specialization of get_pickers_indexes for LLTextureCtrl
@@ -448,12 +463,12 @@ template <>
 const texture_vec_t&
 get_pickers_indexes<LLTextureCtrl> (const LLEditWearableDictionary::WearableEntry *wearable_entry)
 {
-	if (!wearable_entry)
-	{
-		llwarns << "could not get LLTextureCtrl indexes for null wearable entry." << llendl;
-		return null_texture_vec;
-	}
-	return wearable_entry->mTextureCtrls;
+        if (!wearable_entry)
+        {
+                llwarns << "could not get LLTextureCtrl indexes for null wearable entry." << llendl;
+                return null_texture_vec;
+        }
+        return wearable_entry->mTextureCtrls;
 }
 
 // A full specialization of get_picker_entry for LLColorSwatchCtrl
@@ -461,7 +476,7 @@ template <>
 const LLEditWearableDictionary::PickerControlEntry*
 get_picker_entry<LLColorSwatchCtrl> (const ETextureIndex index)
 {
-	return LLEditWearableDictionary::getInstance()->getColorSwatch(index);
+        return LLEditWearableDictionary::getInstance()->getColorSwatch(index);
 }
 
 // A full specialization of get_picker_entry for LLTextureCtrl
@@ -469,162 +484,162 @@ template <>
 const LLEditWearableDictionary::PickerControlEntry*
 get_picker_entry<LLTextureCtrl> (const ETextureIndex index)
 {
-	return LLEditWearableDictionary::getInstance()->getTexturePicker(index);
+        return LLEditWearableDictionary::getInstance()->getTexturePicker(index);
 }
 
 template <typename CtrlType, class Predicate>
 const LLEditWearableDictionary::PickerControlEntry*
 find_picker_ctrl_entry_if(LLWearableType::EType type, const Predicate pred)
 {
-	const LLEditWearableDictionary::WearableEntry *wearable_entry
-		= LLEditWearableDictionary::getInstance()->getWearable(type);
-	if (!wearable_entry)
-	{
-		llwarns << "could not get wearable dictionary entry for wearable of type: " << type << llendl;
-		return NULL;
-	}
-	const texture_vec_t& indexes = get_pickers_indexes<CtrlType>(wearable_entry);
-	for (texture_vec_t::const_iterator
-			 iter = indexes.begin(),
-			 iter_end = indexes.end();
-		 iter != iter_end; ++iter)
-	{
-		const ETextureIndex te = *iter;
-		const LLEditWearableDictionary::PickerControlEntry*	entry
-			= get_picker_entry<CtrlType>(te);
-		if (!entry)
-		{
-			llwarns << "could not get picker dictionary entry (" << te << ") for wearable of type: " << type << llendl;
-			continue;
-		}
-		if (pred(entry))
-		{
-			return entry;
-		}
-	}
-	return NULL;
+        const LLEditWearableDictionary::WearableEntry *wearable_entry
+                = LLEditWearableDictionary::getInstance()->getWearable(type);
+        if (!wearable_entry)
+        {
+                llwarns << "could not get wearable dictionary entry for wearable of type: " << type << llendl;
+                return NULL;
+        }
+        const texture_vec_t& indexes = get_pickers_indexes<CtrlType>(wearable_entry);
+        for (texture_vec_t::const_iterator
+                         iter = indexes.begin(),
+                         iter_end = indexes.end();
+                 iter != iter_end; ++iter)
+        {
+                const ETextureIndex te = *iter;
+                const LLEditWearableDictionary::PickerControlEntry*     entry
+                        = get_picker_entry<CtrlType>(te);
+                if (!entry)
+                {
+                        llwarns << "could not get picker dictionary entry (" << te << ") for wearable of type: " << type << llendl;
+                        continue;
+                }
+                if (pred(entry))
+                {
+                        return entry;
+                }
+        }
+        return NULL;
 }
 
 template <typename CtrlType>
 void
 for_each_picker_ctrl_entry(LLPanel* panel, LLWearableType::EType type, function_t fun)
 {
-	if (!panel)
-	{
-		llwarns << "the panel wasn't passed for wearable of type: " << type << llendl;
-		return;
-	}
-	const LLEditWearableDictionary::WearableEntry *wearable_entry
-		= LLEditWearableDictionary::getInstance()->getWearable(type);
-	if (!wearable_entry)
-	{
-		llwarns << "could not get wearable dictionary entry for wearable of type: " << type << llendl;
-		return;
-	}
-	const texture_vec_t& indexes = get_pickers_indexes<CtrlType>(wearable_entry);
-	for (texture_vec_t::const_iterator
-			 iter = indexes.begin(),
-			 iter_end = indexes.end();
-		 iter != iter_end; ++iter)
-	{
-		const ETextureIndex te = *iter;
-		const LLEditWearableDictionary::PickerControlEntry*	entry
-			= get_picker_entry<CtrlType>(te);
-		if (!entry)
-		{
-			llwarns << "could not get picker dictionary entry (" << te << ") for wearable of type: " << type << llendl;
-			continue;
-		}
-		fun (panel, entry);
-	}
+        if (!panel)
+        {
+                llwarns << "the panel wasn't passed for wearable of type: " << type << llendl;
+                return;
+        }
+        const LLEditWearableDictionary::WearableEntry *wearable_entry
+                = LLEditWearableDictionary::getInstance()->getWearable(type);
+        if (!wearable_entry)
+        {
+                llwarns << "could not get wearable dictionary entry for wearable of type: " << type << llendl;
+                return;
+        }
+        const texture_vec_t& indexes = get_pickers_indexes<CtrlType>(wearable_entry);
+        for (texture_vec_t::const_iterator
+                         iter = indexes.begin(),
+                         iter_end = indexes.end();
+                 iter != iter_end; ++iter)
+        {
+                const ETextureIndex te = *iter;
+                const LLEditWearableDictionary::PickerControlEntry*     entry
+                        = get_picker_entry<CtrlType>(te);
+                if (!entry)
+                {
+                        llwarns << "could not get picker dictionary entry (" << te << ") for wearable of type: " << type << llendl;
+                        continue;
+                }
+                fun (panel, entry);
+        }
 }
 
 // The helper functions for pickers management
 static void init_color_swatch_ctrl(LLPanelEditWearable* self, LLPanel* panel, const LLEditWearableDictionary::PickerControlEntry* entry)
 {
-	LLColorSwatchCtrl* color_swatch_ctrl = panel->getChild<LLColorSwatchCtrl>(entry->mControlName);
-	if (color_swatch_ctrl)
-	{
-		// Can't get the color from the wearable here, since the wearable may not be set when this is called.
-		color_swatch_ctrl->setOriginal(LLColor4::white);
-	}
+        LLColorSwatchCtrl* color_swatch_ctrl = panel->getChild<LLColorSwatchCtrl>(entry->mControlName);
+        if (color_swatch_ctrl)
+        {
+                // Can't get the color from the wearable here, since the wearable may not be set when this is called.
+                color_swatch_ctrl->setOriginal(LLColor4::white);
+        }
 }
 
 static void init_texture_ctrl(LLPanelEditWearable* self, LLPanel* panel, const LLEditWearableDictionary::PickerControlEntry* entry)
 {
-	LLTextureCtrl* texture_ctrl = panel->getChild<LLTextureCtrl>(entry->mControlName);
-	if (texture_ctrl)
-	{
-		texture_ctrl->setDefaultImageAssetID(entry->mDefaultImageId);
-		texture_ctrl->setAllowNoTexture(entry->mAllowNoTexture);
-		// Don't allow (no copy) or (notransfer) textures to be selected.
-		texture_ctrl->setImmediateFilterPermMask(PERM_NONE);
-		texture_ctrl->setNonImmediateFilterPermMask(PERM_NONE);
-	}
+        LLTextureCtrl* texture_ctrl = panel->getChild<LLTextureCtrl>(entry->mControlName);
+        if (texture_ctrl)
+        {
+                texture_ctrl->setDefaultImageAssetID(entry->mDefaultImageId);
+                texture_ctrl->setAllowNoTexture(entry->mAllowNoTexture);
+                // Don't allow (no copy) or (notransfer) textures to be selected.
+                texture_ctrl->setImmediateFilterPermMask(PERM_NONE);
+                texture_ctrl->setNonImmediateFilterPermMask(PERM_NONE);
+        }
 }
 
 static void update_color_swatch_ctrl(LLPanelEditWearable* self, LLPanel* panel, const LLEditWearableDictionary::PickerControlEntry* entry)
 {
-	LLColorSwatchCtrl* color_swatch_ctrl = panel->getChild<LLColorSwatchCtrl>(entry->mControlName);
-	if (color_swatch_ctrl)
-	{
-		color_swatch_ctrl->set(self->getWearable()->getClothesColor(entry->mTextureIndex));
-		color_swatch_ctrl->closeFloaterColorPicker();
-	}
+        LLColorSwatchCtrl* color_swatch_ctrl = panel->getChild<LLColorSwatchCtrl>(entry->mControlName);
+        if (color_swatch_ctrl)
+        {
+                color_swatch_ctrl->set(self->getWearable()->getClothesColor(entry->mTextureIndex));
+                color_swatch_ctrl->closeFloaterColorPicker();
+        }
 }
 
 static void update_texture_ctrl(LLPanelEditWearable* self, LLPanel* panel, const LLEditWearableDictionary::PickerControlEntry* entry)
 {
-	LLTextureCtrl* texture_ctrl = panel->getChild<LLTextureCtrl>(entry->mControlName);
-	if (texture_ctrl)
-	{
-		LLUUID new_id;
-		LLLocalTextureObject *lto = self->getWearable()->getLocalTextureObject(entry->mTextureIndex);
-		if( lto && (lto->getID() != IMG_DEFAULT_AVATAR) )
-		{
-			new_id = lto->getID();
-		}
-		else
-		{
-			new_id = LLUUID::null;
-		}
-		LLUUID old_id = texture_ctrl->getImageAssetID();
-		if (old_id != new_id)
-		{
-			// texture has changed, close the floater to avoid DEV-22461
-			texture_ctrl->closeDependentFloater();
-		}
-		texture_ctrl->setImageAssetID(new_id);
-	}
+        LLTextureCtrl* texture_ctrl = panel->getChild<LLTextureCtrl>(entry->mControlName);
+        if (texture_ctrl)
+        {
+                LLUUID new_id;
+                LLLocalTextureObject *lto = self->getWearable()->getLocalTextureObject(entry->mTextureIndex);
+                if( lto && (lto->getID() != IMG_DEFAULT_AVATAR) )
+                {
+                        new_id = lto->getID();
+                }
+                else
+                {
+                        new_id = LLUUID::null;
+                }
+                LLUUID old_id = texture_ctrl->getImageAssetID();
+                if (old_id != new_id)
+                {
+                        // texture has changed, close the floater to avoid DEV-22461
+                        texture_ctrl->closeDependentFloater();
+                }
+                texture_ctrl->setImageAssetID(new_id);
+        }
 }
 
 static void set_enabled_color_swatch_ctrl(bool enabled, LLPanel* panel, const LLEditWearableDictionary::PickerControlEntry* entry)
 {
-	LLColorSwatchCtrl* color_swatch_ctrl = panel->getChild<LLColorSwatchCtrl>(entry->mControlName);
-	if (color_swatch_ctrl)
-	{
-		color_swatch_ctrl->setEnabled(enabled);
-	}
+        LLColorSwatchCtrl* color_swatch_ctrl = panel->getChild<LLColorSwatchCtrl>(entry->mControlName);
+        if (color_swatch_ctrl)
+        {
+                color_swatch_ctrl->setEnabled(enabled);
+        }
 }
 
 static void set_enabled_texture_ctrl(bool enabled, LLPanel* panel, const LLEditWearableDictionary::PickerControlEntry* entry)
 {
-	LLTextureCtrl* texture_ctrl = panel->getChild<LLTextureCtrl>(entry->mControlName);
-	if (texture_ctrl)
-	{
-		texture_ctrl->setEnabled(enabled);
-	}
+        LLTextureCtrl* texture_ctrl = panel->getChild<LLTextureCtrl>(entry->mControlName);
+        if (texture_ctrl)
+        {
+                texture_ctrl->setEnabled(enabled);
+        }
 }
 
 // LLPanelEditWearable
 
 LLPanelEditWearable::LLPanelEditWearable()
-	: LLPanel()
-	, mWearablePtr(NULL)
-	, mWearableItem(NULL)
+        : LLPanel()
+        , mWearablePtr(NULL)
+        , mWearableItem(NULL)
 {
-	mCommitCallbackRegistrar.add("ColorSwatch.Commit", boost::bind(&LLPanelEditWearable::onColorSwatchCommit, this, _1));
-	mCommitCallbackRegistrar.add("TexturePicker.Commit", boost::bind(&LLPanelEditWearable::onTexturePickerCommit, this, _1));
+        mCommitCallbackRegistrar.add("ColorSwatch.Commit", boost::bind(&LLPanelEditWearable::onColorSwatchCommit, this, _1));
+        mCommitCallbackRegistrar.add("TexturePicker.Commit", boost::bind(&LLPanelEditWearable::onTexturePickerCommit, this, _1));
 }
 
 //virtual
@@ -635,917 +650,952 @@ LLPanelEditWearable::~LLPanelEditWearable()
 
 bool LLPanelEditWearable::changeHeightUnits(const LLSD& new_value)
 {
-	updateMetricLayout( new_value.asBoolean() );
-	updateTypeSpecificControls(LLWearableType::WT_SHAPE);
-	return true;
+        updateMetricLayout( new_value.asBoolean() );
+        updateTypeSpecificControls(LLWearableType::WT_SHAPE);
+        return true;
 }
 
 void LLPanelEditWearable::updateMetricLayout(BOOL new_value)
 {
-	LLUIString current_metric, replacment_metric;
-	current_metric = new_value ? mMeters : mFeet;
-	replacment_metric = new_value ? mFeet : mMeters;
-	mHeigthValue.setArg( "[METRIC1]", current_metric.getString() );
-	mReplacementMetricUrl.setArg( "[URL_METRIC2]", std::string("[secondlife:///app/metricsystem ") + replacment_metric.getString() + std::string("]"));
+        LLUIString current_metric, replacment_metric;
+        current_metric = new_value ? mMeters : mFeet;
+        replacment_metric = new_value ? mFeet : mMeters;
+        mHeigthValue.setArg( "[METRIC1]", current_metric.getString() );
+        mReplacementMetricUrl.setArg( "[URL_METRIC2]", std::string("[secondlife:///app/metricsystem ") + replacment_metric.getString() + std::string("]"));
 }
 
 void LLPanelEditWearable::updateAvatarHeightLabel()
 {
-	mTxtAvatarHeight->setText(LLStringUtil::null);
-	LLStyle::Params param;
-	param.color = mAvatarHeigthLabelColor;
-	mTxtAvatarHeight->appendText(mHeigth, false, param);
-	param.color = mAvatarHeigthValueLabelColor;
-	mTxtAvatarHeight->appendText(mHeigthValue, false, param);
-	param.color = mAvatarHeigthLabelColor; // using mAvatarHeigthLabelColor for '/' separator
-	mTxtAvatarHeight->appendText(" / ", false, param);
-	mTxtAvatarHeight->appendText(this->mReplacementMetricUrl, false, param);
+        mTxtAvatarHeight->setText(LLStringUtil::null);
+        LLStyle::Params param;
+        param.color = mAvatarHeigthLabelColor;
+        mTxtAvatarHeight->appendText(mHeigth, false, param);
+        param.color = mAvatarHeigthValueLabelColor;
+        mTxtAvatarHeight->appendText(mHeigthValue, false, param);
+        param.color = mAvatarHeigthLabelColor; // using mAvatarHeigthLabelColor for '/' separator
+        mTxtAvatarHeight->appendText(" / ", false, param);
+        mTxtAvatarHeight->appendText(this->mReplacementMetricUrl, false, param);
 }
 
 void LLPanelEditWearable::onWearablePanelVisibilityChange(const LLSD &in_visible_chain, LLAccordionCtrl* accordion_ctrl)
 {
-	if (in_visible_chain.asBoolean() && accordion_ctrl != NULL)
-	{
-		accordion_ctrl->expandDefaultTab();
-	}
+        if (in_visible_chain.asBoolean() && accordion_ctrl != NULL)
+        {
+                accordion_ctrl->expandDefaultTab();
+        }
 }
 
 void LLPanelEditWearable::setWearablePanelVisibilityChangeCallback(LLPanel* bodypart_panel)
 {
-	if (bodypart_panel != NULL)
-	{
-		LLAccordionCtrl* accordion_ctrl = bodypart_panel->getChild<LLAccordionCtrl>("wearable_accordion");
-
-		if (accordion_ctrl != NULL)
-		{
-			bodypart_panel->setVisibleCallback(
-					boost::bind(&LLPanelEditWearable::onWearablePanelVisibilityChange, this, _2, accordion_ctrl));
-		}
-		else
-		{
-			llwarns << "accordion_ctrl is NULL" << llendl;
-		}
-	}
-	else
-	{
-		llwarns << "bodypart_panel is NULL" << llendl;
-	}
+        if (bodypart_panel != NULL)
+        {
+                LLAccordionCtrl* accordion_ctrl = bodypart_panel->getChild<LLAccordionCtrl>("wearable_accordion");
+
+                if (accordion_ctrl != NULL)
+                {
+                        bodypart_panel->setVisibleCallback(
+                                        boost::bind(&LLPanelEditWearable::onWearablePanelVisibilityChange, this, _2, accordion_ctrl));
+                }
+                else
+                {
+                        llwarns << "accordion_ctrl is NULL" << llendl;
+                }
+        }
+        else
+        {
+                llwarns << "bodypart_panel is NULL" << llendl;
+        }
 }
 
 // virtual 
 BOOL LLPanelEditWearable::postBuild()
 {
-	// buttons
-	mBtnRevert = getChild<LLButton>("revert_button");
-	mBtnRevert->setClickedCallback(boost::bind(&LLPanelEditWearable::onRevertButtonClicked, this));
-
-	mBtnBack = getChild<LLButton>("back_btn");
-	mBackBtnLabel = mBtnBack->getLabelUnselected();
-	mBtnBack->setLabel(LLStringUtil::null);
-	// handled at appearance panel level?
-	//mBtnBack->setClickedCallback(boost::bind(&LLPanelEditWearable::onBackButtonClicked, this));
-
-	mNameEditor = getChild<LLLineEditor>("description");
-
-	mPanelTitle = getChild<LLTextBox>("edit_wearable_title");
-	mDescTitle = getChild<LLTextBox>("description_text");
-
-	getChild<LLRadioGroup>("sex_radio")->setCommitCallback(boost::bind(&LLPanelEditWearable::onCommitSexChange, this));
-	getChild<LLButton>("save_as_button")->setCommitCallback(boost::bind(&LLPanelEditWearable::onSaveAsButtonClicked, this));
-
-	// The following panels will be shown/hidden based on what wearable we're editing
-	// body parts
-	mPanelShape = getChild<LLPanel>("edit_shape_panel");
-	mPanelSkin = getChild<LLPanel>("edit_skin_panel");
-	mPanelEyes = getChild<LLPanel>("edit_eyes_panel");
-	mPanelHair = getChild<LLPanel>("edit_hair_panel");
-
-	// Setting the visibility callback is applied only to the bodyparts panel
-	// because currently they are the only ones whose 'wearable_accordion' has
-	// multiple accordion tabs (see EXT-8164 for details).
-	setWearablePanelVisibilityChangeCallback(mPanelShape);
-	setWearablePanelVisibilityChangeCallback(mPanelSkin);
-	setWearablePanelVisibilityChangeCallback(mPanelEyes);
-	setWearablePanelVisibilityChangeCallback(mPanelHair);
-
-	//clothes
-	mPanelShirt = getChild<LLPanel>("edit_shirt_panel");
-	mPanelPants = getChild<LLPanel>("edit_pants_panel");
-	mPanelShoes = getChild<LLPanel>("edit_shoes_panel");
-	mPanelSocks = getChild<LLPanel>("edit_socks_panel");
-	mPanelJacket = getChild<LLPanel>("edit_jacket_panel");
-	mPanelGloves = getChild<LLPanel>("edit_gloves_panel");
-	mPanelUndershirt = getChild<LLPanel>("edit_undershirt_panel");
-	mPanelUnderpants = getChild<LLPanel>("edit_underpants_panel");
-	mPanelSkirt = getChild<LLPanel>("edit_skirt_panel");
-	mPanelAlpha = getChild<LLPanel>("edit_alpha_panel");
-	mPanelTattoo = getChild<LLPanel>("edit_tattoo_panel");
-
-	mTxtAvatarHeight = mPanelShape->getChild<LLTextBox>("avatar_height");
-
-	mWearablePtr = NULL;
-
-	configureAlphaCheckbox(LLVOAvatarDefines::TEX_LOWER_ALPHA, "lower alpha texture invisible");
-	configureAlphaCheckbox(LLVOAvatarDefines::TEX_UPPER_ALPHA, "upper alpha texture invisible");
-	configureAlphaCheckbox(LLVOAvatarDefines::TEX_HEAD_ALPHA, "head alpha texture invisible");
-	configureAlphaCheckbox(LLVOAvatarDefines::TEX_EYES_ALPHA, "eye alpha texture invisible");
-	configureAlphaCheckbox(LLVOAvatarDefines::TEX_HAIR_ALPHA, "hair alpha texture invisible");
-
-	// configure tab expanded callbacks
-	for (U32 type_index = 0; type_index < (U32)LLWearableType::WT_COUNT; ++type_index)
-	{
-		LLWearableType::EType type = (LLWearableType::EType) type_index;
-		const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(type);
-		if (!wearable_entry)
-		{
-			llwarns << "could not get wearable dictionary entry for wearable of type: " << type << llendl;
-			continue;
-		}
-		U8 num_subparts = wearable_entry->mSubparts.size();
-	
-		for (U8 index = 0; index < num_subparts; ++index)
-		{
-			// dive into data structures to get the panel we need
-			ESubpart subpart_e = wearable_entry->mSubparts[index];
-			const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e);
-	
-			if (!subpart_entry)
-			{
-				llwarns << "could not get wearable subpart dictionary entry for subpart: " << subpart_e << llendl;
-				continue;
-			}
-	
-			const std::string accordion_tab = subpart_entry->mAccordionTab;
-	
-			LLAccordionCtrlTab *tab = getChild<LLAccordionCtrlTab>(accordion_tab);
-	
-			if (!tab)
-			{
-				llwarns << "could not get llaccordionctrltab from UI with name: " << accordion_tab << llendl;
-				continue;
-			}
-	
-			// initialize callback to ensure camera view changes appropriately.
-			tab->setDropDownStateChangedCallback(boost::bind(&LLPanelEditWearable::onTabExpandedCollapsed,this,_2,index));
-		}
-
-		// initialize texture and color picker controls
-		for_each_picker_ctrl_entry <LLColorSwatchCtrl> (getPanel(type), type, boost::bind(init_color_swatch_ctrl, this, _1, _2));
-		for_each_picker_ctrl_entry <LLTextureCtrl>     (getPanel(type), type, boost::bind(init_texture_ctrl, this, _1, _2));
-	}
-
-	// init all strings
-	mMeters		= mPanelShape->getString("meters");
-	mFeet		= mPanelShape->getString("feet");
-	mHeigth		= mPanelShape->getString("height") + " ";
-	mHeigthValue	= "[HEIGHT] [METRIC1]";
-	mReplacementMetricUrl	= "[URL_METRIC2]";
-
-	std::string color = mPanelShape->getString("heigth_label_color");
-	mAvatarHeigthLabelColor = LLUIColorTable::instance().getColor(color, LLColor4::green);
-	color = mPanelShape->getString("heigth_value_label_color");
-	mAvatarHeigthValueLabelColor = LLUIColorTable::instance().getColor(color, LLColor4::green);
-	gSavedSettings.getControl("HeightUnits")->getSignal()->connect(boost::bind(&LLPanelEditWearable::changeHeightUnits, this, _2));
-	updateMetricLayout(gSavedSettings.getBOOL("HeightUnits"));
-
-	return TRUE;
+        // buttons
+        mBtnRevert = getChild<LLButton>("revert_button");
+        mBtnRevert->setClickedCallback(boost::bind(&LLPanelEditWearable::onRevertButtonClicked, this));
+
+        mBtnBack = getChild<LLButton>("back_btn");
+        mBackBtnLabel = mBtnBack->getLabelUnselected();
+        mBtnBack->setLabel(LLStringUtil::null);
+        // handled at appearance panel level?
+        //mBtnBack->setClickedCallback(boost::bind(&LLPanelEditWearable::onBackButtonClicked, this));
+
+        mNameEditor = getChild<LLLineEditor>("description");
+
+        mPanelTitle = getChild<LLTextBox>("edit_wearable_title");
+        mDescTitle = getChild<LLTextBox>("description_text");
+
+        getChild<LLRadioGroup>("sex_radio")->setCommitCallback(boost::bind(&LLPanelEditWearable::onCommitSexChange, this));
+        getChild<LLButton>("save_as_button")->setCommitCallback(boost::bind(&LLPanelEditWearable::onSaveAsButtonClicked, this));
+
+        // The following panels will be shown/hidden based on what wearable we're editing
+        // body parts
+        mPanelShape = getChild<LLPanel>("edit_shape_panel");
+        mPanelSkin = getChild<LLPanel>("edit_skin_panel");
+        mPanelEyes = getChild<LLPanel>("edit_eyes_panel");
+        mPanelHair = getChild<LLPanel>("edit_hair_panel");
+
+        // Setting the visibility callback is applied only to the bodyparts panel
+        // because currently they are the only ones whose 'wearable_accordion' has
+        // multiple accordion tabs (see EXT-8164 for details).
+        setWearablePanelVisibilityChangeCallback(mPanelShape);
+        setWearablePanelVisibilityChangeCallback(mPanelSkin);
+        setWearablePanelVisibilityChangeCallback(mPanelEyes);
+        setWearablePanelVisibilityChangeCallback(mPanelHair);
+
+        //clothes
+        mPanelShirt = getChild<LLPanel>("edit_shirt_panel");
+        mPanelPants = getChild<LLPanel>("edit_pants_panel");
+        mPanelShoes = getChild<LLPanel>("edit_shoes_panel");
+        mPanelSocks = getChild<LLPanel>("edit_socks_panel");
+        mPanelJacket = getChild<LLPanel>("edit_jacket_panel");
+        mPanelGloves = getChild<LLPanel>("edit_gloves_panel");
+        mPanelUndershirt = getChild<LLPanel>("edit_undershirt_panel");
+        mPanelUnderpants = getChild<LLPanel>("edit_underpants_panel");
+        mPanelSkirt = getChild<LLPanel>("edit_skirt_panel");
+        mPanelAlpha = getChild<LLPanel>("edit_alpha_panel");
+        mPanelTattoo = getChild<LLPanel>("edit_tattoo_panel");
+        mPanelPhysics = getChild<LLPanel>("edit_physics_panel");
+
+        mTxtAvatarHeight = mPanelShape->getChild<LLTextBox>("avatar_height");
+
+        mWearablePtr = NULL;
+
+        configureAlphaCheckbox(LLVOAvatarDefines::TEX_LOWER_ALPHA, "lower alpha texture invisible");
+        configureAlphaCheckbox(LLVOAvatarDefines::TEX_UPPER_ALPHA, "upper alpha texture invisible");
+        configureAlphaCheckbox(LLVOAvatarDefines::TEX_HEAD_ALPHA, "head alpha texture invisible");
+        configureAlphaCheckbox(LLVOAvatarDefines::TEX_EYES_ALPHA, "eye alpha texture invisible");
+        configureAlphaCheckbox(LLVOAvatarDefines::TEX_HAIR_ALPHA, "hair alpha texture invisible");
+
+        // configure tab expanded callbacks
+        for (U32 type_index = 0; type_index < (U32)LLWearableType::WT_COUNT; ++type_index)
+        {
+                LLWearableType::EType type = (LLWearableType::EType) type_index;
+                const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(type);
+                if (!wearable_entry)
+                {
+                        llwarns << "could not get wearable dictionary entry for wearable of type: " << type << llendl;
+                        continue;
+                }
+                U8 num_subparts = wearable_entry->mSubparts.size();
+        
+                for (U8 index = 0; index < num_subparts; ++index)
+                {
+                        // dive into data structures to get the panel we need
+                        ESubpart subpart_e = wearable_entry->mSubparts[index];
+                        const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e);
+        
+                        if (!subpart_entry)
+                        {
+                                llwarns << "could not get wearable subpart dictionary entry for subpart: " << subpart_e << llendl;
+                                continue;
+                        }
+        
+                        const std::string accordion_tab = subpart_entry->mAccordionTab;
+        
+                        LLAccordionCtrlTab *tab = getChild<LLAccordionCtrlTab>(accordion_tab);
+        
+                        if (!tab)
+                        {
+                                llwarns << "could not get llaccordionctrltab from UI with name: " << accordion_tab << llendl;
+                                continue;
+                        }
+        
+                        // initialize callback to ensure camera view changes appropriately.
+                        tab->setDropDownStateChangedCallback(boost::bind(&LLPanelEditWearable::onTabExpandedCollapsed,this,_2,index));
+                }
+
+                // initialize texture and color picker controls
+                for_each_picker_ctrl_entry <LLColorSwatchCtrl> (getPanel(type), type, boost::bind(init_color_swatch_ctrl, this, _1, _2));
+                for_each_picker_ctrl_entry <LLTextureCtrl>     (getPanel(type), type, boost::bind(init_texture_ctrl, this, _1, _2));
+        }
+
+        // init all strings
+        mMeters         = mPanelShape->getString("meters");
+        mFeet           = mPanelShape->getString("feet");
+        mHeigth         = mPanelShape->getString("height") + " ";
+        mHeigthValue    = "[HEIGHT] [METRIC1]";
+        mReplacementMetricUrl   = "[URL_METRIC2]";
+
+        std::string color = mPanelShape->getString("heigth_label_color");
+        mAvatarHeigthLabelColor = LLUIColorTable::instance().getColor(color, LLColor4::green);
+        color = mPanelShape->getString("heigth_value_label_color");
+        mAvatarHeigthValueLabelColor = LLUIColorTable::instance().getColor(color, LLColor4::green);
+        gSavedSettings.getControl("HeightUnits")->getSignal()->connect(boost::bind(&LLPanelEditWearable::changeHeightUnits, this, _2));
+        updateMetricLayout(gSavedSettings.getBOOL("HeightUnits"));
+
+        return TRUE;
 }
 
 // virtual 
 // LLUICtrl
 BOOL LLPanelEditWearable::isDirty() const
 {
-	BOOL isDirty = FALSE;
-	if (mWearablePtr)
-	{
-		if (mWearablePtr->isDirty() ||
-			mWearableItem->getName().compare(mNameEditor->getText()) != 0)
-		{
-			isDirty = TRUE;
-		}
-	}
-	return isDirty;
+        BOOL isDirty = FALSE;
+        if (mWearablePtr)
+        {
+                if (mWearablePtr->isDirty() ||
+                        mWearableItem->getName().compare(mNameEditor->getText()) != 0)
+                {
+                        isDirty = TRUE;
+                }
+        }
+        return isDirty;
 }
 //virtual
 void LLPanelEditWearable::draw()
 {
-	updateVerbs();
-	if (getWearable() && getWearable()->getType() == LLWearableType::WT_SHAPE)
-	{
-		//updating avatar height
-		updateTypeSpecificControls(LLWearableType::WT_SHAPE);
-	}
+        updateVerbs();
+        if (getWearable() && getWearable()->getType() == LLWearableType::WT_SHAPE)
+        {
+                //updating avatar height
+                updateTypeSpecificControls(LLWearableType::WT_SHAPE);
+        }
 
-	LLPanel::draw();
+        LLPanel::draw();
 }
 
 void LLPanelEditWearable::setVisible(BOOL visible)
 {
-	if (!visible)
-	{
-		showWearable(mWearablePtr, FALSE);
-	}
-	LLPanel::setVisible(visible);
+        if (!visible)
+        {
+                showWearable(mWearablePtr, FALSE);
+        }
+        LLPanel::setVisible(visible);
 }
 
-void LLPanelEditWearable::setWearable(LLWearable *wearable)
+void LLPanelEditWearable::setWearable(LLWearable *wearable, BOOL disable_camera_switch)
 {
-	showWearable(mWearablePtr, FALSE);
-	mWearablePtr = wearable;
-	showWearable(mWearablePtr, TRUE);
+        showWearable(mWearablePtr, FALSE, disable_camera_switch);
+        mWearablePtr = wearable;
+        showWearable(mWearablePtr, TRUE, disable_camera_switch);
 }
 
 
 //static 
 void LLPanelEditWearable::onRevertButtonClicked(void* userdata)
 {
-	LLPanelEditWearable *panel = (LLPanelEditWearable*) userdata;
-	panel->revertChanges();
+        LLPanelEditWearable *panel = (LLPanelEditWearable*) userdata;
+        panel->revertChanges();
 }
 
 void LLPanelEditWearable::onSaveAsButtonClicked()
 {
-	LLSD args;
-	args["DESC"] = mNameEditor->getText();
+        LLSD args;
+        args["DESC"] = mNameEditor->getText();
 
-	LLNotificationsUtil::add("SaveWearableAs", args, LLSD(), boost::bind(&LLPanelEditWearable::saveAsCallback, this, _1, _2));
+        LLNotificationsUtil::add("SaveWearableAs", args, LLSD(), boost::bind(&LLPanelEditWearable::saveAsCallback, this, _1, _2));
 }
 
 void LLPanelEditWearable::saveAsCallback(const LLSD& notification, const LLSD& response)
 {
-	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
-	if (0 == option)
-	{
-		std::string wearable_name = response["message"].asString();
-		LLStringUtil::trim(wearable_name);
-		if( !wearable_name.empty() )
-		{
-			mNameEditor->setText(wearable_name);
-			saveChanges(true);
-		}
-	}
+        S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+        if (0 == option)
+        {
+                std::string wearable_name = response["message"].asString();
+                LLStringUtil::trim(wearable_name);
+                if( !wearable_name.empty() )
+                {
+                        mNameEditor->setText(wearable_name);
+                        saveChanges(true);
+                }
+        }
 }
 
 void LLPanelEditWearable::onCommitSexChange()
 {
-	if (!isAgentAvatarValid()) return;
+        if (!isAgentAvatarValid()) return;
 
-	LLWearableType::EType type = mWearablePtr->getType();
-	U32 index = gAgentWearables.getWearableIndex(mWearablePtr);
+        LLWearableType::EType type = mWearablePtr->getType();
+        U32 index = gAgentWearables.getWearableIndex(mWearablePtr);
 
-	if( !gAgentWearables.isWearableModifiable(type, index))
-	{
-		return;
-	}
+        if( !gAgentWearables.isWearableModifiable(type, index))
+        {
+                return;
+        }
 
-	LLViewerVisualParam* param = static_cast<LLViewerVisualParam*>(gAgentAvatarp->getVisualParam( "male" ));
-	if( !param )
-	{
-		return;
-	}
+        LLViewerVisualParam* param = static_cast<LLViewerVisualParam*>(gAgentAvatarp->getVisualParam( "male" ));
+        if( !param )
+        {
+                return;
+        }
 
-	bool is_new_sex_male = (gSavedSettings.getU32("AvatarSex") ? SEX_MALE : SEX_FEMALE) == SEX_MALE;
-	LLWearable*	wearable = gAgentWearables.getWearable(type, index);
-	if (wearable)
-	{
-		wearable->setVisualParamWeight(param->getID(), is_new_sex_male, FALSE);
-	}
-	param->setWeight( is_new_sex_male, FALSE );
+        bool is_new_sex_male = (gSavedSettings.getU32("AvatarSex") ? SEX_MALE : SEX_FEMALE) == SEX_MALE;
+        LLWearable*     wearable = gAgentWearables.getWearable(type, index);
+        if (wearable)
+        {
+                wearable->setVisualParamWeight(param->getID(), is_new_sex_male, FALSE);
+        }
+        param->setWeight( is_new_sex_male, FALSE );
 
-	gAgentAvatarp->updateSexDependentLayerSets( FALSE );
+        gAgentAvatarp->updateSexDependentLayerSets( FALSE );
 
-	gAgentAvatarp->updateVisualParams();
+        gAgentAvatarp->updateVisualParams();
 
-	updateScrollingPanelUI();
+        updateScrollingPanelUI();
 }
 
 void LLPanelEditWearable::onTexturePickerCommit(const LLUICtrl* ctrl)
 {
-	const LLTextureCtrl* texture_ctrl = dynamic_cast<const LLTextureCtrl*>(ctrl);
-	if (!texture_ctrl)
-	{
-		llwarns << "got commit signal from not LLTextureCtrl." << llendl;
-		return;
-	}
-
-	if (getWearable())
-	{
-		LLWearableType::EType type = getWearable()->getType();
-		const PickerControlEntryNamePredicate name_pred(texture_ctrl->getName());
-		const LLEditWearableDictionary::PickerControlEntry* entry
-			= find_picker_ctrl_entry_if<LLTextureCtrl, PickerControlEntryNamePredicate>(type, name_pred);
-		if (entry)
-		{
-			// Set the new version
-			LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(texture_ctrl->getImageAssetID());
-			if( image->getID() == IMG_DEFAULT )
-			{
-				image = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT_AVATAR);
-			}
-			if (getWearable())
-			{
-				U32 index = gAgentWearables.getWearableIndex(getWearable());
-				gAgentAvatarp->setLocalTexture(entry->mTextureIndex, image, FALSE, index);
-				LLVisualParamHint::requestHintUpdates();
-				gAgentAvatarp->wearableUpdated(type, FALSE);
-			}
-		}
-		else
-		{
-			llwarns << "could not get texture picker dictionary entry for wearable of type: " << type << llendl;
-		}
-	}
+        const LLTextureCtrl* texture_ctrl = dynamic_cast<const LLTextureCtrl*>(ctrl);
+        if (!texture_ctrl)
+        {
+                llwarns << "got commit signal from not LLTextureCtrl." << llendl;
+                return;
+        }
+
+        if (getWearable())
+        {
+                LLWearableType::EType type = getWearable()->getType();
+                const PickerControlEntryNamePredicate name_pred(texture_ctrl->getName());
+                const LLEditWearableDictionary::PickerControlEntry* entry
+                        = find_picker_ctrl_entry_if<LLTextureCtrl, PickerControlEntryNamePredicate>(type, name_pred);
+                if (entry)
+                {
+                        // Set the new version
+                        LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(texture_ctrl->getImageAssetID());
+                        if( image->getID() == IMG_DEFAULT )
+                        {
+                                image = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT_AVATAR);
+                        }
+                        if (getWearable())
+                        {
+                                U32 index = gAgentWearables.getWearableIndex(getWearable());
+                                gAgentAvatarp->setLocalTexture(entry->mTextureIndex, image, FALSE, index);
+                                LLVisualParamHint::requestHintUpdates();
+                                gAgentAvatarp->wearableUpdated(type, FALSE);
+                        }
+                }
+                else
+                {
+                        llwarns << "could not get texture picker dictionary entry for wearable of type: " << type << llendl;
+                }
+        }
 }
 
 void LLPanelEditWearable::onColorSwatchCommit(const LLUICtrl* ctrl)
 {
-	if (getWearable())
-	{
-		LLWearableType::EType type = getWearable()->getType();
-		const PickerControlEntryNamePredicate name_pred(ctrl->getName());
-		const LLEditWearableDictionary::PickerControlEntry* entry
-			= find_picker_ctrl_entry_if<LLColorSwatchCtrl, PickerControlEntryNamePredicate>(type, name_pred);
-		if (entry)
-		{
-			const LLColor4& old_color = getWearable()->getClothesColor(entry->mTextureIndex);
-			const LLColor4& new_color = LLColor4(ctrl->getValue());
-			if( old_color != new_color )
-			{
-				getWearable()->setClothesColor(entry->mTextureIndex, new_color, TRUE);
-				LLVisualParamHint::requestHintUpdates();
-				gAgentAvatarp->wearableUpdated(getWearable()->getType(), FALSE);
-			}
-		}
-		else
-		{
-			llwarns << "could not get color swatch dictionary entry for wearable of type: " << type << llendl;
-		}
-	}
+        if (getWearable())
+        {
+                LLWearableType::EType type = getWearable()->getType();
+                const PickerControlEntryNamePredicate name_pred(ctrl->getName());
+                const LLEditWearableDictionary::PickerControlEntry* entry
+                        = find_picker_ctrl_entry_if<LLColorSwatchCtrl, PickerControlEntryNamePredicate>(type, name_pred);
+                if (entry)
+                {
+                        const LLColor4& old_color = getWearable()->getClothesColor(entry->mTextureIndex);
+                        const LLColor4& new_color = LLColor4(ctrl->getValue());
+                        if( old_color != new_color )
+                        {
+                                getWearable()->setClothesColor(entry->mTextureIndex, new_color, TRUE);
+                                LLVisualParamHint::requestHintUpdates();
+                                gAgentAvatarp->wearableUpdated(getWearable()->getType(), FALSE);
+                        }
+                }
+                else
+                {
+                        llwarns << "could not get color swatch dictionary entry for wearable of type: " << type << llendl;
+                }
+        }
 }
 
 void LLPanelEditWearable::updatePanelPickerControls(LLWearableType::EType type)
 {
-	LLPanel* panel = getPanel(type);
-	if (!panel)
-		return;
-
-	bool is_modifiable = false;
-	bool is_copyable   = false;
-
-	if(mWearableItem)
-	{
-		const LLPermissions& perm = mWearableItem->getPermissions();
-		is_modifiable = perm.allowModifyBy(gAgent.getID(), gAgent.getGroupID());
-		is_copyable = perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID());
-	}
-
-	if (is_modifiable)
-	{
-		// Update picker controls
-		for_each_picker_ctrl_entry <LLColorSwatchCtrl> (panel, type, boost::bind(update_color_swatch_ctrl, this, _1, _2));
-		for_each_picker_ctrl_entry <LLTextureCtrl>     (panel, type, boost::bind(update_texture_ctrl, this, _1, _2));
-	}
-	else
-	{
-		// Disable controls
-		for_each_picker_ctrl_entry <LLColorSwatchCtrl> (panel, type, boost::bind(set_enabled_color_swatch_ctrl, false, _1, _2));
-		for_each_picker_ctrl_entry <LLTextureCtrl>     (panel, type, boost::bind(set_enabled_texture_ctrl, false, _1, _2));
-	}
+        LLPanel* panel = getPanel(type);
+        if (!panel)
+                return;
+
+        bool is_modifiable = false;
+        bool is_copyable   = false;
+
+        if(mWearableItem)
+        {
+                const LLPermissions& perm = mWearableItem->getPermissions();
+                is_modifiable = perm.allowModifyBy(gAgent.getID(), gAgent.getGroupID());
+                is_copyable = perm.allowCopyBy(gAgent.getID(), gAgent.getGroupID());
+        }
+
+        if (is_modifiable)
+        {
+                // Update picker controls
+                for_each_picker_ctrl_entry <LLColorSwatchCtrl> (panel, type, boost::bind(update_color_swatch_ctrl, this, _1, _2));
+                for_each_picker_ctrl_entry <LLTextureCtrl>     (panel, type, boost::bind(update_texture_ctrl, this, _1, _2));
+        }
+        else
+        {
+                // Disable controls
+                for_each_picker_ctrl_entry <LLColorSwatchCtrl> (panel, type, boost::bind(set_enabled_color_swatch_ctrl, false, _1, _2));
+                for_each_picker_ctrl_entry <LLTextureCtrl>     (panel, type, boost::bind(set_enabled_texture_ctrl, false, _1, _2));
+        }
 }
 
 void LLPanelEditWearable::saveChanges(bool force_save_as)
 {
-	if (!mWearablePtr || !isDirty())
-	{
-		// do nothing if no unsaved changes
-		return;
-	}
-
-	U32 index = gAgentWearables.getWearableIndex(mWearablePtr);
-
-	std::string new_name = mNameEditor->getText();
-	if (force_save_as)
-	{
-		// the name of the wearable has changed, re-save wearable with new name
-		LLAppearanceMgr::instance().removeCOFItemLinks(mWearablePtr->getItemID(),false);
-		gAgentWearables.saveWearableAs(mWearablePtr->getType(), index, new_name, FALSE);
-		mNameEditor->setText(mWearableItem->getName());
-	}
-	else
-	{
-		gAgentWearables.saveWearable(mWearablePtr->getType(), index, TRUE, new_name);
-	}
+        if (!mWearablePtr || !isDirty())
+        {
+                // do nothing if no unsaved changes
+                return;
+        }
+
+        U32 index = gAgentWearables.getWearableIndex(mWearablePtr);
+
+        std::string new_name = mNameEditor->getText();
+        if (force_save_as)
+        {
+                // the name of the wearable has changed, re-save wearable with new name
+                LLAppearanceMgr::instance().removeCOFItemLinks(mWearablePtr->getItemID(),false);
+                gAgentWearables.saveWearableAs(mWearablePtr->getType(), index, new_name, FALSE);
+                mNameEditor->setText(mWearableItem->getName());
+        }
+        else
+        {
+                gAgentWearables.saveWearable(mWearablePtr->getType(), index, TRUE, new_name);
+        }
 }
 
 void LLPanelEditWearable::revertChanges()
 {
-	if (!mWearablePtr || !isDirty())
-	{
-		// no unsaved changes to revert
-		return;
-	}
-
-	mWearablePtr->revertValues();
-	mNameEditor->setText(mWearableItem->getName());
-	updatePanelPickerControls(mWearablePtr->getType());
-	updateTypeSpecificControls(mWearablePtr->getType());
-	gAgentAvatarp->wearableUpdated(mWearablePtr->getType(), FALSE);
+        if (!mWearablePtr || !isDirty())
+        {
+                // no unsaved changes to revert
+                return;
+        }
+
+        mWearablePtr->revertValues();
+        mNameEditor->setText(mWearableItem->getName());
+        updatePanelPickerControls(mWearablePtr->getType());
+        updateTypeSpecificControls(mWearablePtr->getType());
+        gAgentAvatarp->wearableUpdated(mWearablePtr->getType(), FALSE);
 }
 
-void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show)
-{
-	if (!wearable)
-	{
-		return;
-	}
-
-	mWearableItem = gInventory.getItem(mWearablePtr->getItemID());
-	llassert(mWearableItem);
-
-	LLWearableType::EType type = wearable->getType();
-	LLPanel *targetPanel = NULL;
-	std::string title;
-	std::string description_title;
-
-	const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(type);
-	if (!wearable_entry)
-	{
-		llwarns << "called LLPanelEditWearable::showWearable with an invalid wearable type! (" << type << ")" << llendl;
-		return;
-	}
-
-	targetPanel = getPanel(type);
-	title = getString(wearable_entry->mTitle);
-	description_title = getString(wearable_entry->mDescTitle);
-
-	// Update picker controls state
-	for_each_picker_ctrl_entry <LLColorSwatchCtrl> (targetPanel, type, boost::bind(set_enabled_color_swatch_ctrl, show, _1, _2));
-	for_each_picker_ctrl_entry <LLTextureCtrl>     (targetPanel, type, boost::bind(set_enabled_texture_ctrl, show, _1, _2));
-
-	targetPanel->setVisible(show);
-	toggleTypeSpecificControls(type);
-
-	if (show)
-	{
-		mPanelTitle->setText(title);
-		mPanelTitle->setToolTip(title);
-		mDescTitle->setText(description_title);
-		
-		// set name
-		mNameEditor->setText(mWearableItem->getName());
-
-		updatePanelPickerControls(type);
-		updateTypeSpecificControls(type);
-
-		// clear and rebuild visual param list
-		U8 num_subparts = wearable_entry->mSubparts.size();
-	
-		for (U8 index = 0; index < num_subparts; ++index)
-		{
-			// dive into data structures to get the panel we need
-			ESubpart subpart_e = wearable_entry->mSubparts[index];
-			const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e);
-	
-			if (!subpart_entry)
-			{
-				llwarns << "could not get wearable subpart dictionary entry for subpart: " << subpart_e << llendl;
-				continue;
-			}
-	
-			const std::string scrolling_panel = subpart_entry->mParamList;
-			const std::string accordion_tab = subpart_entry->mAccordionTab;
-	
-			LLScrollingPanelList *panel_list = getChild<LLScrollingPanelList>(scrolling_panel);
-			LLAccordionCtrlTab *tab = getChild<LLAccordionCtrlTab>(accordion_tab);
-	
-			if (!panel_list)
-			{
-				llwarns << "could not get scrolling panel list: " << scrolling_panel << llendl;
-				continue;
-			}
-	
-			if (!tab)
+void LLPanelEditWearable::showWearable(LLWearable* wearable, BOOL show, BOOL disable_camera_switch)
+{
+        if (!wearable)
+        {
+                return;
+        }
+
+        mWearableItem = gInventory.getItem(mWearablePtr->getItemID());
+        llassert(mWearableItem);
+
+        LLWearableType::EType type = wearable->getType();
+        LLPanel *targetPanel = NULL;
+        std::string title;
+        std::string description_title;
+
+        const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(type);
+        if (!wearable_entry)
+        {
+                llwarns << "called LLPanelEditWearable::showWearable with an invalid wearable type! (" << type << ")" << llendl;
+                return;
+        }
+
+        targetPanel = getPanel(type);
+        title = getString(wearable_entry->mTitle);
+        description_title = getString(wearable_entry->mDescTitle);
+
+        // Update picker controls state
+        for_each_picker_ctrl_entry <LLColorSwatchCtrl> (targetPanel, type, boost::bind(set_enabled_color_swatch_ctrl, show, _1, _2));
+        for_each_picker_ctrl_entry <LLTextureCtrl>     (targetPanel, type, boost::bind(set_enabled_texture_ctrl, show, _1, _2));
+
+        targetPanel->setVisible(show);
+        toggleTypeSpecificControls(type);
+
+        if (show)
+        {
+                mPanelTitle->setText(title);
+                mPanelTitle->setToolTip(title);
+                mDescTitle->setText(description_title);
+                
+                // set name
+                mNameEditor->setText(mWearableItem->getName());
+
+                updatePanelPickerControls(type);
+                updateTypeSpecificControls(type);
+
+                // clear and rebuild visual param list
+                U8 num_subparts = wearable_entry->mSubparts.size();
+        
+                for (U8 index = 0; index < num_subparts; ++index)
+                {
+                        // dive into data structures to get the panel we need
+                        ESubpart subpart_e = wearable_entry->mSubparts[index];
+                        const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e);
+        
+                        if (!subpart_entry)
+                        {
+                                llwarns << "could not get wearable subpart dictionary entry for subpart: " << subpart_e << llendl;
+                                continue;
+                        }
+        
+                        const std::string scrolling_panel = subpart_entry->mParamList;
+                        const std::string accordion_tab = subpart_entry->mAccordionTab;
+        
+                        LLScrollingPanelList *panel_list = getChild<LLScrollingPanelList>(scrolling_panel);
+                        LLAccordionCtrlTab *tab = getChild<LLAccordionCtrlTab>(accordion_tab);
+			
+                        if (!panel_list)
+                        {
+                                llwarns << "could not get scrolling panel list: " << scrolling_panel << llendl;
+                                continue;
+                        }
+        
+                        if (!tab)
+                        {
+                                llwarns << "could not get llaccordionctrltab from UI with name: " << accordion_tab << llendl;
+                                continue;
+                        }
+
+			// Don't show female subparts if you're not female, etc.
+			if (!(gAgentAvatarp->getSex() & subpart_entry->mSex))
 			{
-				llwarns << "could not get llaccordionctrltab from UI with name: " << accordion_tab << llendl;
+				tab->setVisible(FALSE);
 				continue;
 			}
-	
-			// what edit group do we want to extract params for?
-			const std::string edit_group = subpart_entry->mEditGroup;
-	
-			// storage for ordered list of visual params
-			value_map_t sorted_params;
-			getSortedParams(sorted_params, edit_group);
-
-			LLJoint* jointp = gAgentAvatarp->getJoint( subpart_entry->mTargetJoint );
-			if (!jointp)
+			else
 			{
-				jointp = gAgentAvatarp->getJoint("mHead");
+				tab->setVisible(TRUE);
 			}
-
-			buildParamList(panel_list, sorted_params, tab, jointp);
-	
-			updateScrollingPanelUI();
-		}
-		showDefaultSubpart();
-
-		updateVerbs();
-	}
+			
+                        // what edit group do we want to extract params for?
+                        const std::string edit_group = subpart_entry->mEditGroup;
+        
+                        // storage for ordered list of visual params
+                        value_map_t sorted_params;
+                        getSortedParams(sorted_params, edit_group);
+
+                        LLJoint* jointp = gAgentAvatarp->getJoint( subpart_entry->mTargetJoint );
+                        if (!jointp)
+                        {
+                                jointp = gAgentAvatarp->getJoint("mHead");
+                        }
+
+                        buildParamList(panel_list, sorted_params, tab, jointp);
+        
+                        updateScrollingPanelUI();
+                }
+                if (!disable_camera_switch)
+                {
+                        showDefaultSubpart();
+                }
+
+                updateVerbs();
+        }
 }
 
 void LLPanelEditWearable::showDefaultSubpart()
 {
-	changeCamera(0);
+        changeCamera(3);
 }
 
 void LLPanelEditWearable::onTabExpandedCollapsed(const LLSD& param, U8 index)
 {
-	bool expanded = param.asBoolean();
+        bool expanded = param.asBoolean();
 
-	if (!mWearablePtr || !gAgentCamera.cameraCustomizeAvatar())
-	{
-		// we don't have a valid wearable we're editing, or we've left the wearable editor
-		return;
-	}
+        if (!mWearablePtr || !gAgentCamera.cameraCustomizeAvatar())
+        {
+                // we don't have a valid wearable we're editing, or we've left the wearable editor
+                return;
+        }
 
-	if (expanded)
-	{
-		changeCamera(index);
-	}
+        if (expanded)
+        {
+                changeCamera(index);
+        }
 
 }
 
 void LLPanelEditWearable::changeCamera(U8 subpart)
 {
-	const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(mWearablePtr->getType());
-	if (!wearable_entry)
-	{
-		llinfos << "could not get wearable dictionary entry for wearable type: " << mWearablePtr->getType() << llendl;
-		return;
-	}
-
-	if (subpart >= wearable_entry->mSubparts.size())
-	{
-		llinfos << "accordion tab expanded for invalid subpart. Wearable type: " << mWearablePtr->getType() << " subpart num: " << subpart << llendl;
-		return;
-	}
-
-	ESubpart subpart_e = wearable_entry->mSubparts[subpart];
-	const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e);
-
-	if (!subpart_entry)
+	// Don't change the camera if this type doesn't have a camera switch.
+	// Useful for wearables like physics that don't have an associated physical body part.
+	if (LLWearableType::getDisableCameraSwitch(mWearablePtr->getType()))
 	{
-		llwarns << "could not get wearable subpart dictionary entry for subpart: " << subpart_e << llendl;
 		return;
 	}
-
-	// Update the camera
-	gMorphView->setCameraTargetJoint( gAgentAvatarp->getJoint( subpart_entry->mTargetJoint ) );
-	gMorphView->setCameraTargetOffset( subpart_entry->mTargetOffset );
-	gMorphView->setCameraOffset( subpart_entry->mCameraOffset );
-	if (gSavedSettings.getBOOL("AppearanceCameraMovement"))
-	{
-		gMorphView->updateCamera();
-	}
+        const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(mWearablePtr->getType());
+        if (!wearable_entry)
+        {
+                llinfos << "could not get wearable dictionary entry for wearable type: " << mWearablePtr->getType() << llendl;
+                return;
+        }
+
+        if (subpart >= wearable_entry->mSubparts.size())
+        {
+                llinfos << "accordion tab expanded for invalid subpart. Wearable type: " << mWearablePtr->getType() << " subpart num: " << subpart << llendl;
+                return;
+        }
+
+        ESubpart subpart_e = wearable_entry->mSubparts[subpart];
+        const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e);
+
+        if (!subpart_entry)
+        {
+                llwarns << "could not get wearable subpart dictionary entry for subpart: " << subpart_e << llendl;
+                return;
+        }
+
+        // Update the camera
+        gMorphView->setCameraTargetJoint( gAgentAvatarp->getJoint( subpart_entry->mTargetJoint ) );
+        gMorphView->setCameraTargetOffset( subpart_entry->mTargetOffset );
+        gMorphView->setCameraOffset( subpart_entry->mCameraOffset );
+        if (gSavedSettings.getBOOL("AppearanceCameraMovement"))
+        {
+                gMorphView->updateCamera();
+        }
 }
 
 void LLPanelEditWearable::updateScrollingPanelList()
 {
-	updateScrollingPanelUI();
+        updateScrollingPanelUI();
 }
 
 void LLPanelEditWearable::toggleTypeSpecificControls(LLWearableType::EType type)
 {
-	// Toggle controls specific to shape editing panel.
-	{
-		bool is_shape = (type == LLWearableType::WT_SHAPE);
-		getChildView("sex_radio")->setVisible( is_shape);
-		getChildView("female_icon")->setVisible( is_shape);
-		getChildView("male_icon")->setVisible( is_shape);
-	}
+        // Toggle controls specific to shape editing panel.
+        {
+                bool is_shape = (type == LLWearableType::WT_SHAPE);
+                getChildView("sex_radio")->setVisible( is_shape);
+                getChildView("female_icon")->setVisible( is_shape);
+                getChildView("male_icon")->setVisible( is_shape);
+        }
 }
 
 void LLPanelEditWearable::updateTypeSpecificControls(LLWearableType::EType type)
 {
-	const F32 ONE_METER = 1.0;
-	const F32 ONE_FOOT = 0.3048 * ONE_METER; // in meters
-	// Update controls specific to shape editing panel.
-	if (type == LLWearableType::WT_SHAPE)
-	{
-		// Update avatar height
-		F32 new_size = gAgentAvatarp->mBodySize.mV[VZ];
-		if (gSavedSettings.getBOOL("HeightUnits") == FALSE)
-		{
-			// convert meters to feet
-			new_size = new_size / ONE_FOOT;
-		}
-
-		std::string avatar_height_str = llformat("%.2f", new_size);
-		mHeigthValue.setArg("[HEIGHT]", avatar_height_str);
-		updateAvatarHeightLabel();
-	}
-
-	if (LLWearableType::WT_ALPHA == type)
-	{
-		updateAlphaCheckboxes();
-
-		initPreviousAlphaTextures();
-	}
+        const F32 ONE_METER = 1.0;
+        const F32 ONE_FOOT = 0.3048 * ONE_METER; // in meters
+        // Update controls specific to shape editing panel.
+        if (type == LLWearableType::WT_SHAPE)
+        {
+                // Update avatar height
+                F32 new_size = gAgentAvatarp->mBodySize.mV[VZ];
+                if (gSavedSettings.getBOOL("HeightUnits") == FALSE)
+                {
+                        // convert meters to feet
+                        new_size = new_size / ONE_FOOT;
+                }
+
+                std::string avatar_height_str = llformat("%.2f", new_size);
+                mHeigthValue.setArg("[HEIGHT]", avatar_height_str);
+                updateAvatarHeightLabel();
+        }
+
+        if (LLWearableType::WT_ALPHA == type)
+        {
+                updateAlphaCheckboxes();
+
+                initPreviousAlphaTextures();
+        }
 }
 
 void LLPanelEditWearable::updateScrollingPanelUI()
 {
-	// do nothing if we don't have a valid wearable we're editing
-	if (mWearablePtr == NULL)
-	{
-		return;
-	}
-
-	LLWearableType::EType type = mWearablePtr->getType();
-	LLPanel *panel = getPanel(type);
-
-	if(panel && (mWearablePtr->getItemID().notNull()))
-	{
-		const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(type);
-		llassert(wearable_entry);
-		if (!wearable_entry) return;
-		U8 num_subparts = wearable_entry->mSubparts.size();
-
-		LLScrollingPanelParam::sUpdateDelayFrames = 0;
-		for (U8 index = 0; index < num_subparts; ++index)
-		{
-			// dive into data structures to get the panel we need
-			ESubpart subpart_e = wearable_entry->mSubparts[index];
-			const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e);
-
-			const std::string scrolling_panel = subpart_entry->mParamList;
-
-			LLScrollingPanelList *panel_list = getChild<LLScrollingPanelList>(scrolling_panel);
-	
-			if (!panel_list)
-			{
-				llwarns << "could not get scrolling panel list: " << scrolling_panel << llendl;
-				continue;
-			}
-			
-			panel_list->updatePanels(TRUE);
-		}
-	}
+        // do nothing if we don't have a valid wearable we're editing
+        if (mWearablePtr == NULL)
+        {
+                return;
+        }
+
+        LLWearableType::EType type = mWearablePtr->getType();
+        LLPanel *panel = getPanel(type);
+
+        if(panel && (mWearablePtr->getItemID().notNull()))
+        {
+                const LLEditWearableDictionary::WearableEntry *wearable_entry = LLEditWearableDictionary::getInstance()->getWearable(type);
+                llassert(wearable_entry);
+                if (!wearable_entry) return;
+                U8 num_subparts = wearable_entry->mSubparts.size();
+
+                LLScrollingPanelParam::sUpdateDelayFrames = 0;
+                for (U8 index = 0; index < num_subparts; ++index)
+                {
+                        // dive into data structures to get the panel we need
+                        ESubpart subpart_e = wearable_entry->mSubparts[index];
+                        const LLEditWearableDictionary::SubpartEntry *subpart_entry = LLEditWearableDictionary::getInstance()->getSubpart(subpart_e);
+
+                        const std::string scrolling_panel = subpart_entry->mParamList;
+
+                        LLScrollingPanelList *panel_list = getChild<LLScrollingPanelList>(scrolling_panel);
+        
+                        if (!panel_list)
+                        {
+                                llwarns << "could not get scrolling panel list: " << scrolling_panel << llendl;
+                                continue;
+                        }
+                        
+                        panel_list->updatePanels(TRUE);
+                }
+        }
 }
 
 LLPanel* LLPanelEditWearable::getPanel(LLWearableType::EType type)
 {
-	switch (type)
-	{
-		case LLWearableType::WT_SHAPE:
-			return mPanelShape;
-			break;
-
-		case LLWearableType::WT_SKIN:
-			return mPanelSkin;
-			break;
-
-		case LLWearableType::WT_HAIR:
-			return mPanelHair;
-			break;
-
-		case LLWearableType::WT_EYES:
-			return mPanelEyes;
-			break;
-
-		case LLWearableType::WT_SHIRT:
-			return mPanelShirt;
-			break;
-
-		case LLWearableType::WT_PANTS:
-			return mPanelPants;
-			break;
-
-		case LLWearableType::WT_SHOES:
-			return mPanelShoes;
-			break;
-
-		case LLWearableType::WT_SOCKS:
-			return mPanelSocks;
-			break;
-
-		case LLWearableType::WT_JACKET:
-			return mPanelJacket;
-			break;
-
-		case LLWearableType::WT_GLOVES:
-			return mPanelGloves;
-			break;
-
-		case LLWearableType::WT_UNDERSHIRT:
-			return mPanelUndershirt;
-			break;
-
-		case LLWearableType::WT_UNDERPANTS:
-			return mPanelUnderpants;
-			break;
-
-		case LLWearableType::WT_SKIRT:
-			return mPanelSkirt;
-			break;
-
-		case LLWearableType::WT_ALPHA:
-			return mPanelAlpha;
-			break;
-
-		case LLWearableType::WT_TATTOO:
-			return mPanelTattoo;
-			break;
-		default:
-			break;
-	}
-	return NULL;
+        switch (type)
+        {
+                case LLWearableType::WT_SHAPE:
+                        return mPanelShape;
+                        break;
+
+                case LLWearableType::WT_SKIN:
+                        return mPanelSkin;
+                        break;
+
+                case LLWearableType::WT_HAIR:
+                        return mPanelHair;
+                        break;
+
+                case LLWearableType::WT_EYES:
+                        return mPanelEyes;
+                        break;
+
+                case LLWearableType::WT_SHIRT:
+                        return mPanelShirt;
+                        break;
+
+                case LLWearableType::WT_PANTS:
+                        return mPanelPants;
+                        break;
+
+                case LLWearableType::WT_SHOES:
+                        return mPanelShoes;
+                        break;
+
+                case LLWearableType::WT_SOCKS:
+                        return mPanelSocks;
+                        break;
+
+                case LLWearableType::WT_JACKET:
+                        return mPanelJacket;
+                        break;
+
+                case LLWearableType::WT_GLOVES:
+                        return mPanelGloves;
+                        break;
+
+                case LLWearableType::WT_UNDERSHIRT:
+                        return mPanelUndershirt;
+                        break;
+
+                case LLWearableType::WT_UNDERPANTS:
+                        return mPanelUnderpants;
+                        break;
+
+                case LLWearableType::WT_SKIRT:
+                        return mPanelSkirt;
+                        break;
+
+                case LLWearableType::WT_ALPHA:
+                        return mPanelAlpha;
+                        break;
+
+                case LLWearableType::WT_TATTOO:
+                        return mPanelTattoo;
+                        break;
+
+                case LLWearableType::WT_PHYSICS:
+                        return mPanelPhysics;
+                        break;
+
+                default:
+                        break;
+        }
+        return NULL;
 }
 
 void LLPanelEditWearable::getSortedParams(value_map_t &sorted_params, const std::string &edit_group)
 {
-	LLWearable::visual_param_vec_t param_list;
-	ESex avatar_sex = gAgentAvatarp->getSex();
-
-	mWearablePtr->getVisualParams(param_list);
-
-	for (LLWearable::visual_param_vec_t::iterator iter = param_list.begin();
-		iter != param_list.end();
-		++iter)
-	{
-		LLViewerVisualParam *param = (LLViewerVisualParam*) *iter;
-
-		if (param->getID() == -1 
-			|| !param->isTweakable()
-			|| param->getEditGroup() != edit_group 
-			|| !(param->getSex() & avatar_sex))
-		{
-			continue;
-		}
-
-		value_map_t::value_type vt(-param->getDisplayOrder(), param);
-		llassert( sorted_params.find(-param->getDisplayOrder()) == sorted_params.end() ); //check for duplicates
-		sorted_params.insert(vt);
-	}
+        LLWearable::visual_param_vec_t param_list;
+        ESex avatar_sex = gAgentAvatarp->getSex();
+
+        mWearablePtr->getVisualParams(param_list);
+
+        for (LLWearable::visual_param_vec_t::iterator iter = param_list.begin();
+                iter != param_list.end();
+                ++iter)
+        {
+                LLViewerVisualParam *param = (LLViewerVisualParam*) *iter;
+
+                if (param->getID() == -1 
+                        || !param->isTweakable()
+                        || param->getEditGroup() != edit_group 
+                        || !(param->getSex() & avatar_sex))
+                {
+                        continue;
+                }
+
+                value_map_t::value_type vt(-param->getDisplayOrder(), param);
+                llassert( sorted_params.find(-param->getDisplayOrder()) == sorted_params.end() ); //check for duplicates
+                sorted_params.insert(vt);
+        }
 }
 
 void LLPanelEditWearable::buildParamList(LLScrollingPanelList *panel_list, value_map_t &sorted_params, LLAccordionCtrlTab *tab, LLJoint* jointp)
 {
-	// sorted_params is sorted according to magnitude of effect from
-	// least to greatest.  Adding to the front of the child list
-	// reverses that order.
-	if( panel_list )
-	{
-		panel_list->clearPanels();
-		value_map_t::iterator end = sorted_params.end();
-		S32 height = 0;
-		for(value_map_t::iterator it = sorted_params.begin(); it != end; ++it)
-		{
-			LLPanel::Params p;
-			p.name("LLScrollingPanelParam");
-			LLScrollingPanelParam* panel_param = new LLScrollingPanelParam( p, NULL, (*it).second, TRUE, this->getWearable(), jointp);
-			height = panel_list->addPanel( panel_param );
-		}
-	}
+        // sorted_params is sorted according to magnitude of effect from
+        // least to greatest.  Adding to the front of the child list
+        // reverses that order.
+        if( panel_list )
+        {
+                panel_list->clearPanels();
+                value_map_t::iterator end = sorted_params.end();
+                S32 height = 0;
+                for(value_map_t::iterator it = sorted_params.begin(); it != end; ++it)
+                {
+                        LLPanel::Params p;
+                        p.name("LLScrollingPanelParam");
+                        LLWearable *wearable = this->getWearable();
+                        LLScrollingPanelParamBase *panel_param = NULL;
+                        if (wearable && wearable->getType() == LLWearableType::WT_PHYSICS) // Hack to show a different panel for physics.  Should generalize this later.
+                        {
+                                panel_param = new LLScrollingPanelParamBase( p, NULL, (*it).second, TRUE, this->getWearable(), jointp);
+                        }
+                        else
+                        {
+                                panel_param = new LLScrollingPanelParam( p, NULL, (*it).second, TRUE, this->getWearable(), jointp);
+                        }
+                        height = panel_list->addPanel( panel_param );
+                }
+        }
 }
 
 void LLPanelEditWearable::updateVerbs()
 {
-	bool can_copy = false;
+        bool can_copy = false;
 
-	if(mWearableItem)
-	{
-		can_copy = mWearableItem->getPermissions().allowCopyBy(gAgentID);
-	}
+        if(mWearableItem)
+        {
+                can_copy = mWearableItem->getPermissions().allowCopyBy(gAgentID);
+        }
 
-	BOOL is_dirty = isDirty();
+        BOOL is_dirty = isDirty();
 
-	mBtnRevert->setEnabled(is_dirty);
-	getChildView("save_as_button")->setEnabled(is_dirty && can_copy);
+        mBtnRevert->setEnabled(is_dirty);
+        getChildView("save_as_button")->setEnabled(is_dirty && can_copy);
 
-	if(isAgentAvatarValid())
-	{
-		// Update viewer's radio buttons (of RadioGroup with control_name="AvatarSex") of Avatar's gender
-		// with value from "AvatarSex" setting
-		gSavedSettings.setU32("AvatarSex", (gAgentAvatarp->getSex() == SEX_MALE) );
-	}
+        if(isAgentAvatarValid())
+        {
+                // Update viewer's radio buttons (of RadioGroup with control_name="AvatarSex") of Avatar's gender
+                // with value from "AvatarSex" setting
+                gSavedSettings.setU32("AvatarSex", (gAgentAvatarp->getSex() == SEX_MALE) );
+        }
 
-	// update back button and title according to dirty state.
-	static BOOL was_dirty = FALSE;
-	if (was_dirty != is_dirty) // to avoid redundant changes because this method is called from draw
-	{
-		static S32 label_width = mBtnBack->getFont()->getWidth(mBackBtnLabel);
-		const std::string& label = is_dirty ? mBackBtnLabel : LLStringUtil::null;
-		const S32 delta_width = is_dirty ? label_width : -label_width;
+        // update back button and title according to dirty state.
+        static BOOL was_dirty = FALSE;
+        if (was_dirty != is_dirty) // to avoid redundant changes because this method is called from draw
+        {
+                static S32 label_width = mBtnBack->getFont()->getWidth(mBackBtnLabel);
+                const std::string& label = is_dirty ? mBackBtnLabel : LLStringUtil::null;
+                const S32 delta_width = is_dirty ? label_width : -label_width;
 
-		mBtnBack->setLabel(label);
+                mBtnBack->setLabel(label);
 
-		// update rect according to label width
-		LLRect rect = mBtnBack->getRect();
-		rect.mRight += delta_width;
-		mBtnBack->setShape(rect);
+                // update rect according to label width
+                LLRect rect = mBtnBack->getRect();
+                rect.mRight += delta_width;
+                mBtnBack->setShape(rect);
 
-		// update title rect according to back button width
-		rect = mPanelTitle->getRect();
-		rect.mLeft += delta_width;
-		mPanelTitle->setShape(rect);
+                // update title rect according to back button width
+                rect = mPanelTitle->getRect();
+                rect.mLeft += delta_width;
+                mPanelTitle->setShape(rect);
 
-		was_dirty = is_dirty;
-	}
+                was_dirty = is_dirty;
+        }
 }
 
 void LLPanelEditWearable::configureAlphaCheckbox(LLVOAvatarDefines::ETextureIndex te, const std::string& name)
 {
-	LLCheckBoxCtrl* checkbox = mPanelAlpha->getChild<LLCheckBoxCtrl>(name);
-	checkbox->setCommitCallback(boost::bind(&LLPanelEditWearable::onInvisibilityCommit, this, checkbox, te));
+        LLCheckBoxCtrl* checkbox = mPanelAlpha->getChild<LLCheckBoxCtrl>(name);
+        checkbox->setCommitCallback(boost::bind(&LLPanelEditWearable::onInvisibilityCommit, this, checkbox, te));
 
-	mAlphaCheckbox2Index[name] = te;
+        mAlphaCheckbox2Index[name] = te;
 }
 
 void LLPanelEditWearable::onInvisibilityCommit(LLCheckBoxCtrl* checkbox_ctrl, LLVOAvatarDefines::ETextureIndex te)
 {
-	if (!checkbox_ctrl) return;
-	if (!getWearable()) return;
-
-	llinfos << "onInvisibilityCommit, self " << this << " checkbox_ctrl " << checkbox_ctrl << llendl;
-
-	bool new_invis_state = checkbox_ctrl->get();
-	if (new_invis_state)
-	{
-		LLLocalTextureObject *lto = getWearable()->getLocalTextureObject(te);
-		mPreviousAlphaTexture[te] = lto->getID();
-		
-		LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture( IMG_INVISIBLE );
-		U32 index = gAgentWearables.getWearableIndex(getWearable());
-		gAgentAvatarp->setLocalTexture(te, image, FALSE, index);
-		gAgentAvatarp->wearableUpdated(getWearable()->getType(), FALSE);
-	}
-	else
-	{
-		// Try to restore previous texture, if any.
-		LLUUID prev_id = mPreviousAlphaTexture[te];
-		if (prev_id.isNull() || (prev_id == IMG_INVISIBLE))
-		{
-			prev_id = LLUUID( gSavedSettings.getString( "UIImgDefaultAlphaUUID" ) );
-		}
-		if (prev_id.isNull()) return;
-		
-		LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(prev_id);
-		if (!image) return;
-
-		U32 index = gAgentWearables.getWearableIndex(getWearable());
-		gAgentAvatarp->setLocalTexture(te, image, FALSE, index);
-		gAgentAvatarp->wearableUpdated(getWearable()->getType(), FALSE);
-	}
-
-	updatePanelPickerControls(getWearable()->getType());
+        if (!checkbox_ctrl) return;
+        if (!getWearable()) return;
+
+        llinfos << "onInvisibilityCommit, self " << this << " checkbox_ctrl " << checkbox_ctrl << llendl;
+
+        bool new_invis_state = checkbox_ctrl->get();
+        if (new_invis_state)
+        {
+                LLLocalTextureObject *lto = getWearable()->getLocalTextureObject(te);
+                mPreviousAlphaTexture[te] = lto->getID();
+                
+                LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture( IMG_INVISIBLE );
+                U32 index = gAgentWearables.getWearableIndex(getWearable());
+                gAgentAvatarp->setLocalTexture(te, image, FALSE, index);
+                gAgentAvatarp->wearableUpdated(getWearable()->getType(), FALSE);
+        }
+        else
+        {
+                // Try to restore previous texture, if any.
+                LLUUID prev_id = mPreviousAlphaTexture[te];
+                if (prev_id.isNull() || (prev_id == IMG_INVISIBLE))
+                {
+                        prev_id = LLUUID( gSavedSettings.getString( "UIImgDefaultAlphaUUID" ) );
+                }
+                if (prev_id.isNull()) return;
+                
+                LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(prev_id);
+                if (!image) return;
+
+                U32 index = gAgentWearables.getWearableIndex(getWearable());
+                gAgentAvatarp->setLocalTexture(te, image, FALSE, index);
+                gAgentAvatarp->wearableUpdated(getWearable()->getType(), FALSE);
+        }
+
+        updatePanelPickerControls(getWearable()->getType());
 }
 
 void LLPanelEditWearable::updateAlphaCheckboxes()
 {
-	for(string_texture_index_map_t::iterator iter = mAlphaCheckbox2Index.begin();
-		iter != mAlphaCheckbox2Index.end(); ++iter )
-	{
-		LLVOAvatarDefines::ETextureIndex te = (LLVOAvatarDefines::ETextureIndex)iter->second;
-		LLCheckBoxCtrl* ctrl = mPanelAlpha->getChild<LLCheckBoxCtrl>(iter->first);
-		if (ctrl)
-		{
-			ctrl->set(!gAgentAvatarp->isTextureVisible(te, mWearablePtr));
-		}
-	}
+        for(string_texture_index_map_t::iterator iter = mAlphaCheckbox2Index.begin();
+                iter != mAlphaCheckbox2Index.end(); ++iter )
+        {
+                LLVOAvatarDefines::ETextureIndex te = (LLVOAvatarDefines::ETextureIndex)iter->second;
+                LLCheckBoxCtrl* ctrl = mPanelAlpha->getChild<LLCheckBoxCtrl>(iter->first);
+                if (ctrl)
+                {
+                        ctrl->set(!gAgentAvatarp->isTextureVisible(te, mWearablePtr));
+                }
+        }
 }
 
 void LLPanelEditWearable::initPreviousAlphaTextures()
 {
-	initPreviousAlphaTextureEntry(TEX_LOWER_ALPHA);
-	initPreviousAlphaTextureEntry(TEX_UPPER_ALPHA);
-	initPreviousAlphaTextureEntry(TEX_HEAD_ALPHA);
-	initPreviousAlphaTextureEntry(TEX_EYES_ALPHA);
-	initPreviousAlphaTextureEntry(TEX_LOWER_ALPHA);
+        initPreviousAlphaTextureEntry(TEX_LOWER_ALPHA);
+        initPreviousAlphaTextureEntry(TEX_UPPER_ALPHA);
+        initPreviousAlphaTextureEntry(TEX_HEAD_ALPHA);
+        initPreviousAlphaTextureEntry(TEX_EYES_ALPHA);
+        initPreviousAlphaTextureEntry(TEX_LOWER_ALPHA);
 }
 
 void LLPanelEditWearable::initPreviousAlphaTextureEntry(LLVOAvatarDefines::ETextureIndex te)
 {
-	LLLocalTextureObject *lto = getWearable()->getLocalTextureObject(te);
-	if (lto)
-	{
-		mPreviousAlphaTexture[te] = lto->getID();
-	}
+        LLLocalTextureObject *lto = getWearable()->getLocalTextureObject(te);
+        if (lto)
+        {
+                mPreviousAlphaTexture[te] = lto->getID();
+        }
 }
 
 // handle secondlife:///app/metricsystem
 class LLMetricSystemHandler : public LLCommandHandler
 {
 public:
-	LLMetricSystemHandler() : LLCommandHandler("metricsystem", UNTRUSTED_THROTTLE) { }
-
-	bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
-	{
-		// change height units TRUE for meters and FALSE for feet
-		BOOL new_value = (gSavedSettings.getBOOL("HeightUnits") == FALSE) ? TRUE : FALSE;
-		gSavedSettings.setBOOL("HeightUnits", new_value);
-		return true;
-	}
+        LLMetricSystemHandler() : LLCommandHandler("metricsystem", UNTRUSTED_THROTTLE) { }
+
+        bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
+        {
+                // change height units TRUE for meters and FALSE for feet
+                BOOL new_value = (gSavedSettings.getBOOL("HeightUnits") == FALSE) ? TRUE : FALSE;
+                gSavedSettings.setBOOL("HeightUnits", new_value);
+                return true;
+        }
 };
 
 LLMetricSystemHandler gMetricSystemHandler;
diff --git a/indra/newview/llpaneleditwearable.h b/indra/newview/llpaneleditwearable.h
index 43513d8ab3fb4d61585d04f28bae7c06e9ff3e04..692a7ce90fa06df8939da6d094ca1acbb3ec9614 100644
--- a/indra/newview/llpaneleditwearable.h
+++ b/indra/newview/llpaneleditwearable.h
@@ -55,8 +55,11 @@ class LLPanelEditWearable : public LLPanel
 	/*virtual*/ BOOL		isDirty() const;	// LLUICtrl
 	/*virtual*/ void		draw();	
 
+	// changes camera angle to default for selected subpart
+	void				changeCamera(U8 subpart);
+
 	LLWearable* 		getWearable() { return mWearablePtr; }
-	void				setWearable(LLWearable *wearable);
+	void				setWearable(LLWearable *wearable, BOOL disable_camera_switch = FALSE);
 
 	void				saveChanges(bool force_save_as = false);
 	void				revertChanges();
@@ -77,7 +80,7 @@ class LLPanelEditWearable : public LLPanel
 private:
 	typedef std::map<F32, LLViewerVisualParam*> value_map_t;
 
-	void				showWearable(LLWearable* wearable, BOOL show);
+	void				showWearable(LLWearable* wearable, BOOL show, BOOL disable_camera_switch = FALSE);
 	void				updateScrollingPanelUI();
 	LLPanel*			getPanel(LLWearableType::EType type);
 	void				getSortedParams(value_map_t &sorted_params, const std::string &edit_group);
@@ -91,9 +94,6 @@ class LLPanelEditWearable : public LLPanel
 	void				toggleTypeSpecificControls(LLWearableType::EType type);
 	void				updateTypeSpecificControls(LLWearableType::EType type);
 
-	// changes camera angle to default for selected subpart
-	void				changeCamera(U8 subpart);
-
 	//alpha mask checkboxes
 	void configureAlphaCheckbox(LLVOAvatarDefines::ETextureIndex te, const std::string& name);
 	void onInvisibilityCommit(LLCheckBoxCtrl* checkbox_ctrl, LLVOAvatarDefines::ETextureIndex te);
@@ -163,6 +163,7 @@ class LLPanelEditWearable : public LLPanel
 	LLPanel *mPanelSkirt;
 	LLPanel *mPanelAlpha;
 	LLPanel *mPanelTattoo;
+	LLPanel *mPanelPhysics;
 
 	typedef std::map<std::string, LLVOAvatarDefines::ETextureIndex> string_texture_index_map_t;
 	string_texture_index_map_t mAlphaCheckbox2Index;
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
index 3b5830f8e0c71204998e6ae1e395f963a69d50f3..979d96ca0de72147b920809c6c6a3894f278e4c9 100644
--- a/indra/newview/llpanellogin.cpp
+++ b/indra/newview/llpanellogin.cpp
@@ -217,6 +217,10 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
 	}
 	updateLocationCombo(false);
 
+	LLUICtrl& mode_combo = getChildRef<LLUICtrl>("mode_combo");
+	mode_combo.setValue(gSavedSettings.getString("SessionSettingsFile"));
+	mode_combo.setCommitCallback(boost::bind(&LLPanelLogin::onModeChange, this, getChild<LLUICtrl>("mode_combo")->getValue(), _2));
+
 	LLComboBox* server_choice_combo = sInstance->getChild<LLComboBox>("server_combo");
 	server_choice_combo->setCommitCallback(onSelectServer, NULL);
 	server_choice_combo->setFocusLostCallback(boost::bind(onServerComboLostFocus, _1));
@@ -1167,6 +1171,32 @@ void LLPanelLogin::updateLoginPanelLinks()
 	sInstance->getChildView("forgot_password_text")->setVisible( system_grid);
 }
 
+void LLPanelLogin::onModeChange(const LLSD& original_value, const LLSD& new_value)
+{
+	if (original_value.asString() != new_value.asString())
+	{
+		LLNotificationsUtil::add("ModeChange", LLSD(), LLSD(), boost::bind(&LLPanelLogin::onModeChangeConfirm, this, original_value, new_value, _1, _2));
+	}
+}
+
+void LLPanelLogin::onModeChangeConfirm(const LLSD& original_value, const LLSD& new_value, const LLSD& notification, const LLSD& response)
+{
+	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
+	switch (option)
+	{
+	case 0:
+		gSavedSettings.getControl("SessionSettingsFile")->set(new_value);
+		LLAppViewer::instance()->forceQuit();
+		break;
+	case 1:
+		// revert to original value
+		getChild<LLUICtrl>("mode_combo")->setValue(original_value);
+		break;
+	default:
+		break;
+	}
+}
+
 std::string canonicalize_username(const std::string& name)
 {
 	std::string cname = name;
diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h
index 1ef6539ecc5432d5ebb2d18af8547a4771816a0c..9cc5e3456abea4664d1ca72151451135ab041bf9 100644
--- a/indra/newview/llpanellogin.h
+++ b/indra/newview/llpanellogin.h
@@ -98,6 +98,8 @@ class LLPanelLogin:
 	static void onServerComboLostFocus(LLFocusableElement*);
 	static void updateServerCombo();
 	static void updateStartSLURL();
+	void onModeChange(const LLSD& original_value, const LLSD& new_value);
+	void onModeChangeConfirm(const LLSD& original_value, const LLSD& new_value, const LLSD& notification, const LLSD& response);
 	
 	static void updateLoginPanelLinks();
 
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
index 0c3f2f3e311baf1032b5c24a6756dfbcc8332d40..90617b7dc72546fd904ec7bbe64e14198b83c8ed 100644
--- a/indra/newview/llpanelmaininventory.cpp
+++ b/indra/newview/llpanelmaininventory.cpp
@@ -81,7 +81,6 @@ class LLFloaterInventoryFinder : public LLFloater
 	BOOL getCheckSinceLogoff();
 
 	static void onTimeAgo(LLUICtrl*, void *);
-	static void onCheckSinceLogoff(LLUICtrl*, void *);
 	static void onCloseBtn(void* user_data);
 	static void selectAllTypes(void* user_data);
 	static void selectNoTypes(void* user_data);
@@ -619,20 +618,6 @@ LLFloaterInventoryFinder::LLFloaterInventoryFinder(LLPanelMainInventory* invento
 	updateElementsFromFilter();
 }
 
-
-void LLFloaterInventoryFinder::onCheckSinceLogoff(LLUICtrl *ctrl, void *user_data)
-{
-	LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data;
-	if (!self) return;
-
-	bool since_logoff= self->getChild<LLUICtrl>("check_since_logoff")->getValue();
-	
-	if (!since_logoff && 
-	    !(  self->mSpinSinceDays->get() ||  self->mSpinSinceHours->get() ) )
-	{
-		self->mSpinSinceHours->set(1.0f);
-	}	
-}
 BOOL LLFloaterInventoryFinder::postBuild()
 {
 	const LLRect& viewrect = mPanelMainInventory->getRect();
@@ -647,9 +632,6 @@ BOOL LLFloaterInventoryFinder::postBuild()
 	mSpinSinceDays = getChild<LLSpinCtrl>("spin_days_ago");
 	childSetCommitCallback("spin_days_ago", onTimeAgo, this);
 
-	//	mCheckSinceLogoff   = getChild<LLSpinCtrl>("check_since_logoff");
-	childSetCommitCallback("check_since_logoff", onCheckSinceLogoff, this);
-
 	childSetAction("Close", onCloseBtn, this);
 
 	updateElementsFromFilter();
@@ -660,12 +642,10 @@ void LLFloaterInventoryFinder::onTimeAgo(LLUICtrl *ctrl, void *user_data)
 	LLFloaterInventoryFinder *self = (LLFloaterInventoryFinder *)user_data;
 	if (!self) return;
 	
-	bool since_logoff=true;
 	if ( self->mSpinSinceDays->get() ||  self->mSpinSinceHours->get() )
 	{
-		since_logoff = false;
+		self->getChild<LLUICtrl>("check_since_logoff")->setValue(false);
 	}
-	self->getChild<LLUICtrl>("check_since_logoff")->setValue(since_logoff);
 }
 
 void LLFloaterInventoryFinder::changeFilter(LLInventoryFilter* filter)
diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
index d3c9c3e1314014e3309d8a1631b52092d6872aef..1347a02a520703885558903a29c51eca3e5be023 100644
--- a/indra/newview/llpanelme.cpp
+++ b/indra/newview/llpanelme.cpp
@@ -67,8 +67,6 @@ BOOL LLPanelMe::postBuild()
 {
 	LLPanelProfile::postBuild();
 
-	getTabContainer()[PANEL_PROFILE]->childSetAction("edit_profile_btn", boost::bind(&LLPanelMe::onEditProfileClicked, this), this);
-
 	return TRUE;
 }
 
@@ -135,7 +133,11 @@ void LLPanelMe::buildEditPanel()
 	if (NULL == mEditPanel)
 	{
 		mEditPanel = new LLPanelMyProfileEdit();
-		mEditPanel->childSetAction("save_btn", boost::bind(&LLPanelMe::onSaveChangesClicked, this), this);
+
+		// Note: Remove support for editing profile through this method.
+		//       All profile editing should go through the web.
+		//mEditPanel->childSetAction("save_btn", boost::bind(&LLPanelMe::onSaveChangesClicked, this), this);
+
 		mEditPanel->childSetAction("cancel_btn", boost::bind(&LLPanelMe::onCancelClicked, this), this);
 	}
 }
@@ -147,22 +149,6 @@ void LLPanelMe::onEditProfileClicked()
 	togglePanel(mEditPanel, getAvatarId()); // open
 }
 
-void LLPanelMe::onSaveChangesClicked()
-{
-	LLAvatarData data = LLAvatarData();
-	data.avatar_id = gAgent.getID();
-	data.image_id = mEditPanel->getChild<LLTextureCtrl>(PICKER_SECOND_LIFE)->getImageAssetID();
-	data.fl_image_id = mEditPanel->getChild<LLTextureCtrl>(PICKER_FIRST_LIFE)->getImageAssetID();
-	data.about_text = mEditPanel->getChild<LLUICtrl>("sl_description_edit")->getValue().asString();
-	data.fl_about_text = mEditPanel->getChild<LLUICtrl>("fl_description_edit")->getValue().asString();
-	data.profile_url = mEditPanel->getChild<LLUICtrl>("homepage_edit")->getValue().asString();
-	data.allow_publish = mEditPanel->getChild<LLUICtrl>("show_in_search_checkbox")->getValue();
-
-	LLAvatarPropertiesProcessor::getInstance()->sendAvatarPropertiesUpdate(&data);
-	togglePanel(mEditPanel); // close
-	onOpen(getAvatarId());
-}
-
 void LLPanelMe::onCancelClicked()
 {
 	togglePanel(mEditPanel); // close
diff --git a/indra/newview/llpanelme.h b/indra/newview/llpanelme.h
index d5b2fee869e925e6ecbe167c4df186244ba1eebc..f27f5a268e756b3315e1d6c82a3056235bb1f845 100644
--- a/indra/newview/llpanelme.h
+++ b/indra/newview/llpanelme.h
@@ -58,7 +58,6 @@ class LLPanelMe : public LLPanelProfile
 	void buildEditPanel();
 
 	void onEditProfileClicked();
-	void onSaveChangesClicked();
 	void onCancelClicked();
 
 	LLPanelMyProfileEdit *  mEditPanel;
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
index c10c21683b4faafc5c1404c989326b8c8f48b724..62f582c34366c9e4a92fca6aa8e196ba922c285e 100644
--- a/indra/newview/llpaneloutfitedit.cpp
+++ b/indra/newview/llpaneloutfitedit.cpp
@@ -466,6 +466,7 @@ BOOL LLPanelOutfitEdit::postBuild()
 	mListViewItemTypes.push_back(new LLFilterItem(LLTrans::getString("skirt"), new LLFindActualWearablesOfType(LLWearableType::WT_SKIRT)));
 	mListViewItemTypes.push_back(new LLFilterItem(LLTrans::getString("alpha"), new LLFindActualWearablesOfType(LLWearableType::WT_ALPHA)));
 	mListViewItemTypes.push_back(new LLFilterItem(LLTrans::getString("tattoo"), new LLFindActualWearablesOfType(LLWearableType::WT_TATTOO)));
+	mListViewItemTypes.push_back(new LLFilterItem(LLTrans::getString("physics"), new LLFindActualWearablesOfType(LLWearableType::WT_PHYSICS)));
 
 	mCurrentOutfitName = getChild<LLTextBox>("curr_outfit_name"); 
 	mStatus = getChild<LLTextBox>("status");
@@ -1323,19 +1324,19 @@ void LLPanelOutfitEdit::getCurrentItemUUID(LLUUID& selected_id)
 
 void LLPanelOutfitEdit::getSelectedItemsUUID(uuid_vec_t& uuid_list)
 {
+	void (uuid_vec_t::* tmp)(LLUUID const &) = &uuid_vec_t::push_back;
 	if (mInventoryItemsPanel->getVisible())
 	{
 		std::set<LLUUID> item_set = mInventoryItemsPanel->getRootFolder()->getSelectionList();
 
-		std::for_each(item_set.begin(), item_set.end(), boost::bind( &uuid_vec_t::push_back, &uuid_list, _1));
+		std::for_each(item_set.begin(), item_set.end(), boost::bind( tmp, &uuid_list, _1));
 	}
 	else if (mWearablesListViewPanel->getVisible())
 	{
 		std::vector<LLSD> item_set;
 		mWearableItemsList->getSelectedValues(item_set);
 
-		std::for_each(item_set.begin(), item_set.end(), boost::bind( &uuid_vec_t::push_back, &uuid_list, boost::bind(&LLSD::asUUID, _1 )));
-
+		std::for_each(item_set.begin(), item_set.end(), boost::bind( tmp, &uuid_list, boost::bind(&LLSD::asUUID, _1 )));
 	}
 
 //	return selected_id;
diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h
index fd366e9cbce518e6e029305d7adc46a26ac82255..5d4b8d46444e773a30a913934b5874f6dbae304b 100644
--- a/indra/newview/llpaneloutfitedit.h
+++ b/indra/newview/llpaneloutfitedit.h
@@ -97,6 +97,7 @@ class LLPanelOutfitEdit : public LLPanel
 		LVIT_SKIRT,
 		LVIT_ALPHA,
 		LVIT_TATTOO,
+		LVIT_PHYSICS,
 		NUM_LIST_VIEW_ITEM_TYPES
 	} EListViewItemType; 
 
diff --git a/indra/newview/llpanelpicks.cpp b/indra/newview/llpanelpicks.cpp
old mode 100755
new mode 100644
index c4f3866cad95386478d35f5739504185f82a9e2f..ddce83c616dbd216191b8ecf26f6e3d74e9e4b1d
--- a/indra/newview/llpanelpicks.cpp
+++ b/indra/newview/llpanelpicks.cpp
@@ -70,6 +70,7 @@ static const std::string CLASSIFIED_NAME("classified_name");
 
 static LLRegisterPanelClassWrapper<LLPanelPicks> t_panel_picks("panel_picks");
 
+
 class LLPickHandler : public LLCommandHandler,
 					  public LLAvatarPropertiesObserver
 {
@@ -83,6 +84,12 @@ class LLPickHandler : public LLCommandHandler,
 	bool handle(const LLSD& params, const LLSD& query_map,
 		LLMediaCtrl* web)
 	{
+		if (!LLUI::sSettingGroups["config"]->getBOOL("EnablePicks"))
+		{
+			LLNotificationsUtil::add("NoPicks", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
+			return true;
+		}
+
 		// handle app/classified/create urls first
 		if (params.size() == 1 && params[0].asString() == "create")
 		{
@@ -189,6 +196,12 @@ class LLClassifiedHandler :
 	
 	bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
 	{
+		if (!LLUI::sSettingGroups["config"]->getBOOL("EnableClassifieds"))
+		{
+			LLNotificationsUtil::add("NoClassifieds", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
+			return true;
+		}
+
 		// handle app/classified/create urls first
 		if (params.size() == 1 && params[0].asString() == "create")
 		{
diff --git a/indra/newview/llpanelpicks.h b/indra/newview/llpanelpicks.h
old mode 100755
new mode 100644
diff --git a/indra/newview/llpanelprofile.cpp b/indra/newview/llpanelprofile.cpp
old mode 100755
new mode 100644
index 4f13c0c022e42d4cefe30c665b48c746b407b2b8..fd5c3362bb7f5fd1c82a328fd77fff207a5fedd8
--- a/indra/newview/llpanelprofile.cpp
+++ b/indra/newview/llpanelprofile.cpp
@@ -31,16 +31,27 @@
 #include "llavataractions.h"
 #include "llfloaterreg.h"
 #include "llcommandhandler.h"
+#include "llnotificationsutil.h"
 #include "llpanelpicks.h"
 #include "lltabcontainer.h"
 #include "llviewercontrol.h"
+#include "llviewernetwork.h"
 
 static const std::string PANEL_PICKS = "panel_picks";
 static const std::string PANEL_PROFILE = "panel_profile";
 
 std::string getProfileURL(const std::string& agent_name)
 {
-	std::string url = gSavedSettings.getString("WebProfileURL");
+	std::string url;
+
+	if (LLGridManager::getInstance()->isInProductionGrid())
+	{
+		url = gSavedSettings.getString("WebProfileURL");
+	}
+	else
+	{
+		url = gSavedSettings.getString("WebProfileNonProductionURL");
+	}
 	LLSD subs;
 	subs["AGENT_NAME"] = agent_name;
 	url = LLWeb::expandURLSubstitutions(url,subs);
@@ -105,6 +116,12 @@ class LLAgentHandler : public LLCommandHandler
 
 		if (verb == "pay")
 		{
+			if (!LLUI::sSettingGroups["config"]->getBOOL("EnableAvatarPay"))
+			{
+				LLNotificationsUtil::add("NoAvatarPay", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
+				return true;
+			}
+
 			LLAvatarActions::pay(avatar_id);
 			return true;
 		}
diff --git a/indra/newview/llpanelprofile.h b/indra/newview/llpanelprofile.h
old mode 100755
new mode 100644
diff --git a/indra/newview/llphysicsmotion.cpp b/indra/newview/llphysicsmotion.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..30a04109bc819357c83bfd49579187f269154d92
--- /dev/null
+++ b/indra/newview/llphysicsmotion.cpp
@@ -0,0 +1,732 @@
+/** 
+ * @file llphysicsmotion.cpp
+ * @brief Implementation of LLPhysicsMotion class.
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+//-----------------------------------------------------------------------------
+// Header Files
+//-----------------------------------------------------------------------------
+#include "llviewerprecompiledheaders.h"
+#include "linden_common.h"
+
+#include "m3math.h"
+#include "v3dmath.h"
+
+#include "llphysicsmotion.h"
+#include "llagent.h"
+#include "llcharacter.h"
+#include "llviewercontrol.h"
+#include "llviewervisualparam.h"
+#include "llvoavatarself.h"
+
+typedef std::map<std::string, std::string> controller_map_t;
+typedef std::map<std::string, F32> default_controller_map_t;
+
+#define MIN_REQUIRED_PIXEL_AREA_AVATAR_PHYSICS_MOTION 0.f
+#define TIME_ITERATION_STEP 0.1f
+
+inline F64 llsgn(const F64 a)
+{
+        if (a >= 0)
+                return 1;
+        return -1;
+}
+
+/* 
+   At a high level, this works by setting temporary parameters that are not stored
+   in the avatar's list of params, and are not conveyed to other users.  We accomplish
+   this by creating some new temporary driven params inside avatar_lad that are then driven
+   by the actual params that the user sees and sets.  For example, in the old system,
+   the user sets a param called breast bouyancy, which controls the Z value of the breasts.
+   In our new system, the user still sets the breast bouyancy, but that param is redefined
+   as a driver param so that affects a new temporary driven param that the bounce is applied
+   to.
+*/
+
+class LLPhysicsMotion
+{
+public:
+        /*
+          param_driver_name: The param that controls the params that are being affected by the physics.
+          joint_name: The joint that the body part is attached to.  The joint is
+          used to determine the orientation (rotation) of the body part.
+
+          character: The avatar that this physics affects.
+
+          motion_direction_vec: The direction (in world coordinates) that determines the
+          motion.  For example, (0,0,1) is up-down, and means that up-down motion is what
+          determines how this joint moves.
+
+          controllers: The various settings (e.g. spring force, mass) that determine how
+          the body part behaves.
+        */
+        LLPhysicsMotion(const std::string &param_driver_name, 
+                        const std::string &joint_name,
+                        LLCharacter *character,
+                        const LLVector3 &motion_direction_vec,
+                        const controller_map_t &controllers) :
+                mParamDriverName(param_driver_name),
+                mJointName(joint_name),
+                mMotionDirectionVec(motion_direction_vec),
+                mParamDriver(NULL),
+                mParamControllers(controllers),
+                mCharacter(character),
+                mLastTime(0),
+                mPosition_local(0),
+                mVelocityJoint_local(0),
+                mPositionLastUpdate_local(0)
+        {
+                mJointState = new LLJointState;
+        }
+
+        BOOL initialize();
+
+        ~LLPhysicsMotion() {}
+
+        BOOL onUpdate(F32 time);
+
+        LLPointer<LLJointState> getJointState() 
+        {
+                return mJointState;
+        }
+protected:
+        F32 getParamValue(const std::string& controller_key)
+        {
+                const controller_map_t::const_iterator& entry = mParamControllers.find(controller_key);
+                if (entry == mParamControllers.end())
+                {
+                        return sDefaultController[controller_key];
+                }
+                const std::string& param_name = (*entry).second.c_str();
+                return mCharacter->getVisualParamWeight(param_name.c_str());
+        }
+        void setParamValue(LLViewerVisualParam *param,
+                           const F32 new_value_local,
+                                                   F32 behavior_maxeffect);
+
+        F32 toLocal(const LLVector3 &world);
+        F32 calculateVelocity_local();
+        F32 calculateAcceleration_local(F32 velocity_local);
+private:
+        const std::string mParamDriverName;
+        const std::string mParamControllerName;
+        const LLVector3 mMotionDirectionVec;
+        const std::string mJointName;
+
+        F32 mPosition_local;
+        F32 mVelocityJoint_local; // How fast the joint is moving
+        F32 mAccelerationJoint_local; // Acceleration on the joint
+
+        F32 mVelocity_local; // How fast the param is moving
+        F32 mPositionLastUpdate_local;
+        LLVector3 mPosition_world;
+
+        LLViewerVisualParam *mParamDriver;
+        const controller_map_t mParamControllers;
+        
+        LLPointer<LLJointState> mJointState;
+        LLCharacter *mCharacter;
+
+        F32 mLastTime;
+        
+        static default_controller_map_t sDefaultController;
+};
+
+default_controller_map_t initDefaultController()
+{
+        default_controller_map_t controller;
+        controller["Mass"] = 0.2f;
+        controller["Gravity"] = 0.0f;
+        controller["Damping"] = .05f;
+        controller["Drag"] = 0.15f;
+        controller["MaxEffect"] = 0.1f;
+        controller["Spring"] = 0.1f;
+        controller["Gain"] = 10.0f;
+        return controller;
+}
+
+default_controller_map_t LLPhysicsMotion::sDefaultController = initDefaultController();
+
+BOOL LLPhysicsMotion::initialize()
+{
+        if (!mJointState->setJoint(mCharacter->getJoint(mJointName.c_str())))
+                return FALSE;
+        mJointState->setUsage(LLJointState::ROT);
+
+        mParamDriver = (LLViewerVisualParam*)mCharacter->getVisualParam(mParamDriverName.c_str());
+        if (mParamDriver == NULL)
+        {
+                llinfos << "Failure reading in  [ " << mParamDriverName << " ]" << llendl;
+                return FALSE;
+        }
+
+        return TRUE;
+}
+
+LLPhysicsMotionController::LLPhysicsMotionController(const LLUUID &id) : 
+        LLMotion(id),
+        mCharacter(NULL)
+{
+        mName = "breast_motion";
+}
+
+LLPhysicsMotionController::~LLPhysicsMotionController()
+{
+        for (motion_vec_t::iterator iter = mMotions.begin();
+             iter != mMotions.end();
+             ++iter)
+        {
+                delete (*iter);
+        }
+}
+
+BOOL LLPhysicsMotionController::onActivate() 
+{ 
+        return TRUE; 
+}
+
+void LLPhysicsMotionController::onDeactivate() 
+{
+}
+
+LLMotion::LLMotionInitStatus LLPhysicsMotionController::onInitialize(LLCharacter *character)
+{
+        mCharacter = character;
+
+        mMotions.clear();
+
+        // Breast Cleavage
+        {
+                controller_map_t controller;
+                controller["Mass"] = "Breast_Physics_Mass";
+                controller["Gravity"] = "Breast_Physics_Gravity";
+                controller["Drag"] = "Breast_Physics_Drag";
+                controller["Damping"] = "Breast_Physics_InOut_Damping";
+                controller["MaxEffect"] = "Breast_Physics_InOut_Max_Effect";
+                controller["Spring"] = "Breast_Physics_InOut_Spring";
+                controller["Gain"] = "Breast_Physics_InOut_Gain";
+                LLPhysicsMotion *motion = new LLPhysicsMotion("Breast_Physics_InOut_Controller",
+                                                                                                          "mChest",
+                                                                                                          character,
+                                                                                                          LLVector3(-1,0,0),
+                                                                                                          controller);
+                if (!motion->initialize())
+                {
+                        llassert_always(FALSE);
+                        return STATUS_FAILURE;
+                }
+                addMotion(motion);
+        }
+
+        // Breast Bounce
+        {
+                controller_map_t controller;
+                controller["Mass"] = "Breast_Physics_Mass";
+                controller["Gravity"] = "Breast_Physics_Gravity";
+                controller["Drag"] = "Breast_Physics_Drag";
+                controller["Damping"] = "Breast_Physics_UpDown_Damping";
+                controller["MaxEffect"] = "Breast_Physics_UpDown_Max_Effect";
+                controller["Spring"] = "Breast_Physics_UpDown_Spring";
+                controller["Gain"] = "Breast_Physics_UpDown_Gain";
+                LLPhysicsMotion *motion = new LLPhysicsMotion("Breast_Physics_UpDown_Controller",
+                                                                                                          "mChest",
+                                                                                                          character,
+                                                                                                          LLVector3(0,0,1),
+                                                                                                          controller);
+                if (!motion->initialize())
+                {
+                        llassert_always(FALSE);
+                        return STATUS_FAILURE;
+                }
+                addMotion(motion);
+        }
+
+        // Breast Sway
+        {
+                controller_map_t controller;
+                controller["Mass"] = "Breast_Physics_Mass";
+                controller["Gravity"] = "Breast_Physics_Gravity";
+                controller["Drag"] = "Breast_Physics_Drag";
+                controller["Damping"] = "Breast_Physics_LeftRight_Damping";
+                controller["MaxEffect"] = "Breast_Physics_LeftRight_Max_Effect";
+                controller["Spring"] = "Breast_Physics_LeftRight_Spring";
+                controller["Gain"] = "Breast_Physics_LeftRight_Gain";
+                LLPhysicsMotion *motion = new LLPhysicsMotion("Breast_Physics_LeftRight_Controller",
+                                                                                                          "mChest",
+                                                                                                          character,
+                                                                                                          LLVector3(0,-1,0),
+                                                                                                          controller);
+                if (!motion->initialize())
+                {
+                        llassert_always(FALSE);
+                        return STATUS_FAILURE;
+                }
+                addMotion(motion);
+        }
+        // Butt Bounce
+        {
+                controller_map_t controller;
+                controller["Mass"] = "Butt_Physics_Mass";
+                controller["Gravity"] = "Butt_Physics_Gravity";
+                controller["Drag"] = "Butt_Physics_Drag";
+                controller["Damping"] = "Butt_Physics_UpDown_Damping";
+                controller["MaxEffect"] = "Butt_Physics_UpDown_Max_Effect";
+                controller["Spring"] = "Butt_Physics_UpDown_Spring";
+                controller["Gain"] = "Butt_Physics_UpDown_Gain";
+                LLPhysicsMotion *motion = new LLPhysicsMotion("Butt_Physics_UpDown_Controller",
+                                                                                                          "mPelvis",
+                                                                                                          character,
+                                                                                                          LLVector3(0,0,-1),
+                                                                                                          controller);
+                if (!motion->initialize())
+                {
+                        llassert_always(FALSE);
+                        return STATUS_FAILURE;
+                }
+                addMotion(motion);
+        }
+
+        // Butt LeftRight
+        {
+                controller_map_t controller;
+                controller["Mass"] = "Butt_Physics_Mass";
+                controller["Gravity"] = "Butt_Physics_Gravity";
+                controller["Drag"] = "Butt_Physics_Drag";
+                controller["Damping"] = "Butt_Physics_LeftRight_Damping";
+                controller["MaxEffect"] = "Butt_Physics_LeftRight_Max_Effect";
+                controller["Spring"] = "Butt_Physics_LeftRight_Spring";
+                controller["Gain"] = "Butt_Physics_LeftRight_Gain";
+                LLPhysicsMotion *motion = new LLPhysicsMotion("Butt_Physics_LeftRight_Controller",
+                                                                                                          "mPelvis",
+                                                                                                          character,
+                                                                                                          LLVector3(0,-1,0),
+                                                                                                          controller);
+                if (!motion->initialize())
+                {
+                        llassert_always(FALSE);
+                        return STATUS_FAILURE;
+                }
+                addMotion(motion);
+        }
+
+        // Belly Bounce
+        {
+                controller_map_t controller;
+                controller["Mass"] = "Belly_Physics_Mass";
+                controller["Gravity"] = "Belly_Physics_Gravity";
+                controller["Drag"] = "Belly_Physics_Drag";
+                controller["Damping"] = "Belly_Physics_UpDown_Damping";
+                controller["MaxEffect"] = "Belly_Physics_UpDown_Max_Effect";
+                controller["Spring"] = "Belly_Physics_UpDown_Spring";
+                controller["Gain"] = "Belly_Physics_UpDown_Gain";
+                LLPhysicsMotion *motion = new LLPhysicsMotion("Belly_Physics_UpDown_Controller",
+                                                                                                          "mPelvis",
+                                                                                                          character,
+                                                                                                          LLVector3(0,0,-1),
+                                                                                                          controller);
+                if (!motion->initialize())
+                {
+                        llassert_always(FALSE);
+                        return STATUS_FAILURE;
+                }
+                addMotion(motion);
+        }
+        
+        return STATUS_SUCCESS;
+}
+
+void LLPhysicsMotionController::addMotion(LLPhysicsMotion *motion)
+{
+        addJointState(motion->getJointState());
+        mMotions.push_back(motion);
+}
+
+F32 LLPhysicsMotionController::getMinPixelArea() 
+{
+        return MIN_REQUIRED_PIXEL_AREA_AVATAR_PHYSICS_MOTION;
+}
+
+// Local space means "parameter space".
+F32 LLPhysicsMotion::toLocal(const LLVector3 &world)
+{
+        LLJoint *joint = mJointState->getJoint();
+        const LLQuaternion rotation_world = joint->getWorldRotation();
+        
+        LLVector3 dir_world = mMotionDirectionVec * rotation_world;
+        dir_world.normalize();
+        return world * dir_world;
+}
+
+F32 LLPhysicsMotion::calculateVelocity_local()
+{
+	const F32 world_to_model_scale = 100.0f;
+        LLJoint *joint = mJointState->getJoint();
+        const LLVector3 position_world = joint->getWorldPosition();
+        const LLQuaternion rotation_world = joint->getWorldRotation();
+        const LLVector3 last_position_world = mPosition_world;
+	const LLVector3 positionchange_world = (position_world-last_position_world) * world_to_model_scale;
+        const LLVector3 velocity_world = positionchange_world;
+        const F32 velocity_local = toLocal(velocity_world);
+        return velocity_local;
+}
+
+F32 LLPhysicsMotion::calculateAcceleration_local(const F32 velocity_local)
+{
+//        const F32 smoothing = getParamValue("Smoothing");
+        static const F32 smoothing = 3.0f; // Removed smoothing param since it's probably not necessary
+        const F32 acceleration_local = velocity_local - mVelocityJoint_local;
+        
+        const F32 smoothed_acceleration_local = 
+                acceleration_local * 1.0/smoothing + 
+                mAccelerationJoint_local * (smoothing-1.0)/smoothing;
+        
+        return smoothed_acceleration_local;
+}
+
+BOOL LLPhysicsMotionController::onUpdate(F32 time, U8* joint_mask)
+{
+        // Skip if disabled globally.
+        if (!gSavedSettings.getBOOL("AvatarPhysics"))
+        {
+                return TRUE;
+        }
+        
+        BOOL update_visuals = FALSE;
+        for (motion_vec_t::iterator iter = mMotions.begin();
+             iter != mMotions.end();
+             ++iter)
+        {
+                LLPhysicsMotion *motion = (*iter);
+                update_visuals |= motion->onUpdate(time);
+        }
+                
+        if (update_visuals)
+                mCharacter->updateVisualParams();
+        
+        return TRUE;
+}
+
+
+// Return TRUE if character has to update visual params.
+BOOL LLPhysicsMotion::onUpdate(F32 time)
+{
+        // static FILE *mFileWrite = fopen("c:\\temp\\avatar_data.txt","w");
+        
+        if (!mParamDriver)
+                return FALSE;
+
+        if (!mLastTime)
+        {
+                mLastTime = time;
+                return FALSE;
+        }
+
+        ////////////////////////////////////////////////////////////////////////////////
+        // Get all parameters and settings
+        //
+
+        const F32 time_delta = time - mLastTime;
+
+	// Don't update too frequently, to avoid precision errors from small time slices.
+	if (time_delta <= .01)
+	{
+		return FALSE;
+	}
+	
+	// If less than 1FPS, we don't want to be spending time updating physics at all.
+        if (time_delta > 1.0)
+        {
+                mLastTime = time;
+                return FALSE;
+        }
+
+        // Higher LOD is better.  This controls the granularity
+        // and frequency of updates for the motions.
+        const F32 lod_factor = LLVOAvatar::sPhysicsLODFactor;
+        if (lod_factor == 0)
+        {
+                return TRUE;
+        }
+
+        LLJoint *joint = mJointState->getJoint();
+
+        const F32 behavior_mass = getParamValue("Mass");
+        const F32 behavior_gravity = getParamValue("Gravity");
+        const F32 behavior_spring = getParamValue("Spring");
+        const F32 behavior_gain = getParamValue("Gain");
+        const F32 behavior_damping = getParamValue("Damping");
+        const F32 behavior_drag = getParamValue("Drag");
+        const BOOL physics_test = FALSE; // Enable this to simulate bouncing on all parts.
+        
+        F32 behavior_maxeffect = getParamValue("MaxEffect");
+        if (physics_test)
+                behavior_maxeffect = 1.0f;
+
+	// Normalize the param position to be from [0,1].
+	// We have to use normalized values because there may be more than one driven param,
+	// and each of these driven params may have its own range.
+	// This means we'll do all our calculations in normalized [0,1] local coordinates.
+	const F32 position_user_local = (mParamDriver->getWeight() - mParamDriver->getMinWeight()) / (mParamDriver->getMaxWeight() - mParamDriver->getMinWeight());
+       	
+	//
+	// End parameters and settings
+	////////////////////////////////////////////////////////////////////////////////
+	
+	
+	////////////////////////////////////////////////////////////////////////////////
+	// Calculate velocity and acceleration in parameter space.
+	//
+        
+	//const F32 velocity_joint_local = calculateVelocity_local(time_iteration_step);
+	const F32 velocity_joint_local = calculateVelocity_local();
+	const F32 acceleration_joint_local = calculateAcceleration_local(velocity_joint_local);
+	
+	//
+	// End velocity and acceleration
+	////////////////////////////////////////////////////////////////////////////////
+	
+	BOOL update_visuals = FALSE;
+	
+	// Break up the physics into a bunch of iterations so that differing framerates will show
+	// roughly the same behavior.
+	for (F32 time_iteration = 0; time_iteration <= time_delta; time_iteration += TIME_ITERATION_STEP)
+	{
+		F32 time_iteration_step = TIME_ITERATION_STEP;
+		if (time_iteration + TIME_ITERATION_STEP > time_delta)
+		{
+			time_iteration_step = time_delta-time_iteration;
+		}
+		
+		// mPositon_local should be in normalized 0,1 range already.  Just making sure...
+		const F32 position_current_local = llclamp(mPosition_local,
+							   0.0f,
+							   1.0f);
+		// If the effect is turned off then don't process unless we need one more update
+		// to set the position to the default (i.e. user) position.
+		if ((behavior_maxeffect == 0) && (position_current_local == position_user_local))
+		{
+			return update_visuals;
+		}
+
+		////////////////////////////////////////////////////////////////////////////////
+		// Calculate the total force 
+		//
+
+		// Spring force is a restoring force towards the original user-set breast position.
+		// F = kx
+		const F32 spring_length = position_current_local - position_user_local;
+		const F32 force_spring = -spring_length * behavior_spring;
+
+		// Acceleration is the force that comes from the change in velocity of the torso.
+		// F = ma
+		const F32 force_accel = behavior_gain * (acceleration_joint_local * behavior_mass);
+
+		// Gravity always points downward in world space.
+		// F = mg
+		const LLVector3 gravity_world(0,0,1);
+		const F32 force_gravity = (toLocal(gravity_world) * behavior_gravity * behavior_mass);
+                
+		// Damping is a restoring force that opposes the current velocity.
+		// F = -kv
+		const F32 force_damping = -behavior_damping * mVelocity_local;
+                
+		// Drag is a force imparted by velocity (intuitively it is similar to wind resistance)
+		// F = .5kv^2
+		const F32 force_drag = .5*behavior_drag*velocity_joint_local*velocity_joint_local*llsgn(velocity_joint_local);
+
+		const F32 force_net = (force_accel + 
+				       force_gravity +
+				       force_spring + 
+				       force_damping + 
+				       force_drag);
+
+		//
+		// End total force
+		////////////////////////////////////////////////////////////////////////////////
+
+        
+		////////////////////////////////////////////////////////////////////////////////
+		// Calculate new params
+		//
+
+		// Calculate the new acceleration based on the net force.
+		// a = F/m
+		const F32 acceleration_new_local = force_net / behavior_mass;
+		static const F32 max_velocity = 100.0f; // magic number, used to be customizable.
+		F32 velocity_new_local = mVelocity_local + acceleration_new_local*time_iteration_step;
+		velocity_new_local = llclamp(velocity_new_local, 
+					     -max_velocity, max_velocity);
+        
+		// Temporary debugging setting to cause all avatars to move, for profiling purposes.
+		if (physics_test)
+		{
+			velocity_new_local = sin(time*4.0);
+		}
+		// Calculate the new parameters, or remain unchanged if max speed is 0.
+		F32 position_new_local = position_current_local + velocity_new_local*time_iteration_step;
+		if (behavior_maxeffect == 0)
+			position_new_local = position_user_local;
+
+		// Zero out the velocity if the param is being pushed beyond its limits.
+		if ((position_new_local < 0 && velocity_new_local < 0) || 
+		    (position_new_local > 1 && velocity_new_local > 0))
+		{
+			velocity_new_local = 0;
+		}
+	
+		// Check for NaN values.  A NaN value is detected if the variables doesn't equal itself.  
+		// If NaN, then reset everything.
+		if ((mPosition_local != mPosition_local) ||
+		    (mVelocity_local != mVelocity_local) ||
+		    (position_new_local != position_new_local))
+		{
+			position_new_local = 0;
+			mVelocity_local = 0;
+			mVelocityJoint_local = 0;
+			mAccelerationJoint_local = 0;
+			mPosition_local = 0;
+			mPosition_world = LLVector3(0,0,0);
+		}
+
+		const F32 position_new_local_clamped = llclamp(position_new_local,
+							       0.0f,
+							       1.0f);
+
+		LLDriverParam *driver_param = dynamic_cast<LLDriverParam *>(mParamDriver);
+		llassert_always(driver_param);
+		if (driver_param)
+		{
+			// If this is one of our "hidden" driver params, then make sure it's
+			// the default value.
+			if ((driver_param->getGroup() != VISUAL_PARAM_GROUP_TWEAKABLE) &&
+			    (driver_param->getGroup() != VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT))
+			{
+				mCharacter->setVisualParamWeight(driver_param,
+								 0,
+								 FALSE);
+			}
+			for (LLDriverParam::entry_list_t::iterator iter = driver_param->mDriven.begin();
+			     iter != driver_param->mDriven.end();
+			     ++iter)
+			{
+				LLDrivenEntry &entry = (*iter);
+				LLViewerVisualParam *driven_param = entry.mParam;
+				setParamValue(driven_param,position_new_local_clamped, behavior_maxeffect);
+			}
+		}
+        
+		//
+		// End calculate new params
+		////////////////////////////////////////////////////////////////////////////////
+
+		////////////////////////////////////////////////////////////////////////////////
+		// Conditionally update the visual params
+		//
+        
+		// Updating the visual params (i.e. what the user sees) is fairly expensive.
+		// So only update if the params have changed enough, and also take into account
+		// the graphics LOD settings.
+        
+		// For non-self, if the avatar is small enough visually, then don't update.
+		const F32 area_for_max_settings = 0.0;
+		const F32 area_for_min_settings = 1400.0;
+		const F32 area_for_this_setting = area_for_max_settings + (area_for_min_settings-area_for_max_settings)*(1.0-lod_factor);
+		const F32 pixel_area = fsqrtf(mCharacter->getPixelArea());
+        
+		const BOOL is_self = (dynamic_cast<LLVOAvatarSelf *>(mCharacter) != NULL);
+		if ((pixel_area > area_for_this_setting) || is_self)
+		{
+			const F32 position_diff_local = llabs(mPositionLastUpdate_local-position_new_local_clamped);
+			const F32 min_delta = (1.0001f-lod_factor)*0.4f;
+			if (llabs(position_diff_local) > min_delta)
+			{
+				update_visuals = TRUE;
+				mPositionLastUpdate_local = position_new_local;
+			}
+		}
+
+		//
+		// End update visual params
+		////////////////////////////////////////////////////////////////////////////////
+
+		mVelocity_local = velocity_new_local;
+		mAccelerationJoint_local = acceleration_joint_local;
+		mPosition_local = position_new_local;
+	}
+	mLastTime = time;
+	mPosition_world = joint->getWorldPosition();
+	mVelocityJoint_local = velocity_joint_local;
+
+
+        /*
+          // Write out debugging info into a spreadsheet.
+          if (mFileWrite != NULL && is_self)
+          {
+          fprintf(mFileWrite,"%f\t%f\t%f \t\t%f \t\t%f\t%f\t%f\t \t\t%f\t%f\t%f\t%f\t%f \t\t%f\t%f\t%f\n",
+          position_new_local,
+          velocity_new_local,
+          acceleration_new_local,
+
+          time_delta,
+
+          mPosition_world[0],
+          mPosition_world[1],
+          mPosition_world[2],
+
+          force_net,
+          force_spring,
+          force_accel,
+          force_damping,
+          force_drag,
+
+          spring_length,
+          velocity_joint_local,
+          acceleration_joint_local
+          );
+          }
+        */
+
+        return update_visuals;
+}
+
+// Range of new_value_local is assumed to be [0 , 1] normalized.
+void LLPhysicsMotion::setParamValue(LLViewerVisualParam *param,
+                                    F32 new_value_normalized,
+				    F32 behavior_maxeffect)
+{
+        const F32 value_min_local = param->getMinWeight();
+        const F32 value_max_local = param->getMaxWeight();
+        const F32 min_val = 0.5f-behavior_maxeffect/2.0;
+        const F32 max_val = 0.5f+behavior_maxeffect/2.0;
+
+	// Scale from [0,1] to [min_val,max_val]
+	const F32 new_value_rescaled = min_val + (max_val-min_val) * new_value_normalized;
+	
+	// Scale from [0,1] to [value_min_local,value_max_local]
+        const F32 new_value_local = value_min_local + (value_max_local-value_min_local) * new_value_rescaled;
+
+        mCharacter->setVisualParamWeight(param,
+                                         new_value_local,
+                                         FALSE);
+}
diff --git a/indra/newview/llphysicsmotion.h b/indra/newview/llphysicsmotion.h
new file mode 100644
index 0000000000000000000000000000000000000000..b246fa99bb5e8190bb99f5b6a9736c544c8a0d03
--- /dev/null
+++ b/indra/newview/llphysicsmotion.h
@@ -0,0 +1,118 @@
+/** 
+ * @file llphysicsmotion.h
+ * @brief Implementation of LLPhysicsMotion class.
+ *
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLPHYSICSMOTIONCONTROLLER_H
+#define LL_LLPHYSICSMOTIONCONTROLLER_H
+
+//-----------------------------------------------------------------------------
+// Header files
+//-----------------------------------------------------------------------------
+#include "llmotion.h"
+#include "llframetimer.h"
+
+#define PHYSICS_MOTION_FADEIN_TIME 1.0f
+#define PHYSICS_MOTION_FADEOUT_TIME 1.0f
+
+class LLPhysicsMotion;
+
+//-----------------------------------------------------------------------------
+// class LLPhysicsMotion
+//-----------------------------------------------------------------------------
+class LLPhysicsMotionController :
+	public LLMotion
+{
+public:
+	// Constructor
+	LLPhysicsMotionController(const LLUUID &id);
+
+	// Destructor
+	virtual ~LLPhysicsMotionController();
+
+public:
+	//-------------------------------------------------------------------------
+	// functions to support MotionController and MotionRegistry
+	//-------------------------------------------------------------------------
+
+	// static constructor
+	// all subclasses must implement such a function and register it
+	static LLMotion *create(const LLUUID &id) { return new LLPhysicsMotionController(id); }
+
+public:
+	//-------------------------------------------------------------------------
+	// animation callbacks to be implemented by subclasses
+	//-------------------------------------------------------------------------
+
+	// motions must specify whether or not they loop
+	virtual BOOL getLoop() { return TRUE; }
+
+	// motions must report their total duration
+	virtual F32 getDuration() { return 0.0; }
+
+	// motions must report their "ease in" duration
+	virtual F32 getEaseInDuration() { return PHYSICS_MOTION_FADEIN_TIME; }
+
+	// motions must report their "ease out" duration.
+	virtual F32 getEaseOutDuration() { return PHYSICS_MOTION_FADEOUT_TIME; }
+
+	// called to determine when a motion should be activated/deactivated based on avatar pixel coverage
+	virtual F32 getMinPixelArea();
+
+	// motions must report their priority
+	virtual LLJoint::JointPriority getPriority() { return LLJoint::MEDIUM_PRIORITY; }
+
+	virtual LLMotionBlendType getBlendType() { return ADDITIVE_BLEND; }
+
+	// run-time (post constructor) initialization,
+	// called after parameters have been set
+	// must return true to indicate success and be available for activation
+	virtual LLMotionInitStatus onInitialize(LLCharacter *character);
+
+	// called when a motion is activated
+	// must return TRUE to indicate success, or else
+	// it will be deactivated
+	virtual BOOL onActivate();
+
+	// called per time step
+	// must return TRUE while it is active, and
+	// must return FALSE when the motion is completed.
+	virtual BOOL onUpdate(F32 time, U8* joint_mask);
+
+	// called when a motion is deactivated
+	virtual void onDeactivate();
+
+	LLCharacter* getCharacter() { return mCharacter; }
+
+protected:
+	void addMotion(LLPhysicsMotion *motion);
+private:
+	LLCharacter*		mCharacter;
+
+	typedef std::vector<LLPhysicsMotion *> motion_vec_t;
+	motion_vec_t mMotions;
+};
+
+#endif // LL_LLPHYSICSMOTION_H
+
diff --git a/indra/newview/llpolymesh.cpp b/indra/newview/llpolymesh.cpp
index 363b0b8e9d18185969120fc4d24f7e091a9a70d6..bacaa0cd761e9bea5f48294807a637c33d12b4a6 100644
--- a/indra/newview/llpolymesh.cpp
+++ b/indra/newview/llpolymesh.cpp
@@ -44,7 +44,16 @@
 #define HEADER_ASCII "Linden Mesh 1.0"
 #define HEADER_BINARY "Linden Binary Mesh 1.0"
 
-extern LLControlGroup gSavedSettings;				// read only
+extern LLControlGroup gSavedSettings;                           // read only
+
+LLPolyMorphData *clone_morph_param_duplicate(const LLPolyMorphData *src_data,
+					     const std::string &name);
+LLPolyMorphData *clone_morph_param_direction(const LLPolyMorphData *src_data,
+					     const LLVector3 &direction,
+					     const std::string &name);
+LLPolyMorphData *clone_morph_param_cleavage(const LLPolyMorphData *src_data,
+                                            F32 scale,
+                                            const std::string &name);
 
 //-----------------------------------------------------------------------------
 // Global table of loaded LLPolyMeshes
@@ -56,28 +65,28 @@ LLPolyMesh::LLPolyMeshSharedDataTable LLPolyMesh::sGlobalSharedMeshList;
 //-----------------------------------------------------------------------------
 LLPolyMeshSharedData::LLPolyMeshSharedData()
 {
-	mNumVertices = 0;
-	mBaseCoords = NULL;
-	mBaseNormals = NULL;
-	mBaseBinormals = NULL;
-	mTexCoords = NULL;
-	mDetailTexCoords = NULL;
-	mWeights = NULL;
-	mHasWeights = FALSE;
-	mHasDetailTexCoords = FALSE;
+        mNumVertices = 0;
+        mBaseCoords = NULL;
+        mBaseNormals = NULL;
+        mBaseBinormals = NULL;
+        mTexCoords = NULL;
+        mDetailTexCoords = NULL;
+        mWeights = NULL;
+        mHasWeights = FALSE;
+        mHasDetailTexCoords = FALSE;
 
-	mNumFaces = 0;
-	mFaces = NULL;
+        mNumFaces = 0;
+        mFaces = NULL;
 
-	mNumJointNames = 0;
-	mJointNames = NULL;
+        mNumJointNames = 0;
+        mJointNames = NULL;
 
-	mTriangleIndices = NULL;
-	mNumTriangleIndices = 0;
+        mTriangleIndices = NULL;
+        mNumTriangleIndices = 0;
 
-	mReferenceData = NULL;
+        mReferenceData = NULL;
 
-	mLastIndexOffset = -1;
+        mLastIndexOffset = -1;
 }
 
 //-----------------------------------------------------------------------------
@@ -85,9 +94,9 @@ LLPolyMeshSharedData::LLPolyMeshSharedData()
 //-----------------------------------------------------------------------------
 LLPolyMeshSharedData::~LLPolyMeshSharedData()
 {
-	freeMeshData();
-	for_each(mMorphData.begin(), mMorphData.end(), DeletePointer());
-	mMorphData.clear();
+        freeMeshData();
+        for_each(mMorphData.begin(), mMorphData.end(), DeletePointer());
+        mMorphData.clear();
 }
 
 //-----------------------------------------------------------------------------
@@ -95,19 +104,19 @@ LLPolyMeshSharedData::~LLPolyMeshSharedData()
 //-----------------------------------------------------------------------------
 void LLPolyMeshSharedData::setupLOD(LLPolyMeshSharedData* reference_data)
 {
-	mReferenceData = reference_data;
-
-	if (reference_data)
-	{
-		mBaseCoords = reference_data->mBaseCoords;
-		mBaseNormals = reference_data->mBaseNormals;
-		mBaseBinormals = reference_data->mBaseBinormals;
-		mTexCoords = reference_data->mTexCoords;
-		mDetailTexCoords = reference_data->mDetailTexCoords;
-		mWeights = reference_data->mWeights;
-		mHasWeights = reference_data->mHasWeights;
-		mHasDetailTexCoords = reference_data->mHasDetailTexCoords;
-	}
+        mReferenceData = reference_data;
+
+        if (reference_data)
+        {
+                mBaseCoords = reference_data->mBaseCoords;
+                mBaseNormals = reference_data->mBaseNormals;
+                mBaseBinormals = reference_data->mBaseBinormals;
+                mTexCoords = reference_data->mTexCoords;
+                mDetailTexCoords = reference_data->mDetailTexCoords;
+                mWeights = reference_data->mWeights;
+                mHasWeights = reference_data->mHasWeights;
+                mHasDetailTexCoords = reference_data->mHasDetailTexCoords;
+        }
 }
 
 //-----------------------------------------------------------------------------
@@ -115,41 +124,41 @@ void LLPolyMeshSharedData::setupLOD(LLPolyMeshSharedData* reference_data)
 //-----------------------------------------------------------------------------
 void LLPolyMeshSharedData::freeMeshData()
 {
-	if (!mReferenceData)
-	{
-		mNumVertices = 0;
+        if (!mReferenceData)
+        {
+                mNumVertices = 0;
 
-		delete [] mBaseCoords;
-		mBaseCoords = NULL;
+                delete [] mBaseCoords;
+                mBaseCoords = NULL;
 
-		delete [] mBaseNormals;
-		mBaseNormals = NULL;
+                delete [] mBaseNormals;
+                mBaseNormals = NULL;
 
-		delete [] mBaseBinormals;
-		mBaseBinormals = NULL;
+                delete [] mBaseBinormals;
+                mBaseBinormals = NULL;
 
-		delete [] mTexCoords;
-		mTexCoords = NULL;
+                delete [] mTexCoords;
+                mTexCoords = NULL;
 
-		delete [] mDetailTexCoords;
-		mDetailTexCoords = NULL;
+                delete [] mDetailTexCoords;
+                mDetailTexCoords = NULL;
 
-		delete [] mWeights;
-		mWeights = NULL;
-	}
+                delete [] mWeights;
+                mWeights = NULL;
+        }
 
-	mNumFaces = 0;
-	delete [] mFaces;
-	mFaces = NULL;
+        mNumFaces = 0;
+        delete [] mFaces;
+        mFaces = NULL;
 
-	mNumJointNames = 0;
-	delete [] mJointNames;
-	mJointNames = NULL;
+        mNumJointNames = 0;
+        delete [] mJointNames;
+        mJointNames = NULL;
 
-	delete [] mTriangleIndices;
-	mTriangleIndices = NULL;
+        delete [] mTriangleIndices;
+        mTriangleIndices = NULL;
 
-//	mVertFaceMap.deleteAllData();
+//      mVertFaceMap.deleteAllData();
 }
 
 // compate_int is used by the qsort function to sort the index array
@@ -160,26 +169,26 @@ int compare_int(const void *a, const void *b);
 //-----------------------------------------------------------------------------
 void LLPolyMeshSharedData::genIndices(S32 index_offset)
 {
-	if (index_offset == mLastIndexOffset)
-	{
-		return;
-	}
-
-	delete []mTriangleIndices;
-	mTriangleIndices = new U32[mNumTriangleIndices];
-
-	S32 cur_index = 0;
-	for (S32 i = 0; i < mNumFaces; i++)
-	{
-		mTriangleIndices[cur_index] = mFaces[i][0] + index_offset;
-		cur_index++;
-		mTriangleIndices[cur_index] = mFaces[i][1] + index_offset;
-		cur_index++;
-		mTriangleIndices[cur_index] = mFaces[i][2] + index_offset;
-		cur_index++;
-	}
-
-	mLastIndexOffset = index_offset;
+        if (index_offset == mLastIndexOffset)
+        {
+                return;
+        }
+
+        delete []mTriangleIndices;
+        mTriangleIndices = new U32[mNumTriangleIndices];
+
+        S32 cur_index = 0;
+        for (S32 i = 0; i < mNumFaces; i++)
+        {
+                mTriangleIndices[cur_index] = mFaces[i][0] + index_offset;
+                cur_index++;
+                mTriangleIndices[cur_index] = mFaces[i][1] + index_offset;
+                cur_index++;
+                mTriangleIndices[cur_index] = mFaces[i][2] + index_offset;
+                cur_index++;
+        }
+
+        mLastIndexOffset = index_offset;
 }
 
 //--------------------------------------------------------------------
@@ -187,30 +196,30 @@ void LLPolyMeshSharedData::genIndices(S32 index_offset)
 //--------------------------------------------------------------------
 U32 LLPolyMeshSharedData::getNumKB()
 {
-	U32 num_kb = sizeof(LLPolyMesh);
-
-	if (!isLOD())
-	{
-		num_kb += mNumVertices *
-					( sizeof(LLVector3) +	// coords
-					sizeof(LLVector3) +		// normals
-					sizeof(LLVector2) );	// texCoords
-	}
-
-	if (mHasDetailTexCoords && !isLOD())
-	{
-		num_kb += mNumVertices * sizeof(LLVector2);	// detailTexCoords
-	}
-
-	if (mHasWeights && !isLOD())
-	{
-		num_kb += mNumVertices * sizeof(float);		// weights
-	}
-
-	num_kb += mNumFaces * sizeof(LLPolyFace);	// faces
-
-	num_kb /= 1024;
-	return num_kb;
+        U32 num_kb = sizeof(LLPolyMesh);
+
+        if (!isLOD())
+        {
+                num_kb += mNumVertices *
+                        ( sizeof(LLVector3) +   // coords
+                          sizeof(LLVector3) +             // normals
+                          sizeof(LLVector2) );    // texCoords
+        }
+
+        if (mHasDetailTexCoords && !isLOD())
+        {
+                num_kb += mNumVertices * sizeof(LLVector2);     // detailTexCoords
+        }
+
+        if (mHasWeights && !isLOD())
+        {
+                num_kb += mNumVertices * sizeof(float);         // weights
+        }
+
+        num_kb += mNumFaces * sizeof(LLPolyFace);       // faces
+
+        num_kb /= 1024;
+        return num_kb;
 }
 
 //-----------------------------------------------------------------------------
@@ -218,19 +227,19 @@ U32 LLPolyMeshSharedData::getNumKB()
 //-----------------------------------------------------------------------------
 BOOL LLPolyMeshSharedData::allocateVertexData( U32 numVertices )
 {
-	U32 i;
-	mBaseCoords = new LLVector3[ numVertices ];
-	mBaseNormals = new LLVector3[ numVertices ];
-	mBaseBinormals = new LLVector3[ numVertices ];
-	mTexCoords = new LLVector2[ numVertices ];
-	mDetailTexCoords = new LLVector2[ numVertices ];
-	mWeights = new F32[ numVertices ];
-	for (i = 0; i < numVertices; i++)
-	{
-		mWeights[i] = 0.f;
-	}
-	mNumVertices = numVertices;
-	return TRUE;
+        U32 i;
+        mBaseCoords = new LLVector3[ numVertices ];
+        mBaseNormals = new LLVector3[ numVertices ];
+        mBaseBinormals = new LLVector3[ numVertices ];
+        mTexCoords = new LLVector2[ numVertices ];
+        mDetailTexCoords = new LLVector2[ numVertices ];
+        mWeights = new F32[ numVertices ];
+        for (i = 0; i < numVertices; i++)
+        {
+                mWeights[i] = 0.f;
+        }
+        mNumVertices = numVertices;
+        return TRUE;
 }
 
 //-----------------------------------------------------------------------------
@@ -238,10 +247,10 @@ BOOL LLPolyMeshSharedData::allocateVertexData( U32 numVertices )
 //-----------------------------------------------------------------------------
 BOOL LLPolyMeshSharedData::allocateFaceData( U32 numFaces )
 {
-	mFaces = new LLPolyFace[ numFaces ];
-	mNumFaces = numFaces;
-	mNumTriangleIndices = mNumFaces * 3;
-	return TRUE;
+        mFaces = new LLPolyFace[ numFaces ];
+        mNumFaces = numFaces;
+        mNumTriangleIndices = mNumFaces * 3;
+        return TRUE;
 }
 
 //-----------------------------------------------------------------------------
@@ -249,9 +258,9 @@ BOOL LLPolyMeshSharedData::allocateFaceData( U32 numFaces )
 //-----------------------------------------------------------------------------
 BOOL LLPolyMeshSharedData::allocateJointNames( U32 numJointNames )
 {
-	mJointNames = new std::string[ numJointNames ];
-	mNumJointNames = numJointNames;
-	return TRUE;
+        mJointNames = new std::string[ numJointNames ];
+        mNumJointNames = numJointNames;
+        return TRUE;
 }
 
 //--------------------------------------------------------------------
@@ -259,393 +268,445 @@ BOOL LLPolyMeshSharedData::allocateJointNames( U32 numJointNames )
 //--------------------------------------------------------------------
 BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
 {
-	//-------------------------------------------------------------------------
-	// Open the file
-	//-------------------------------------------------------------------------
-	if(fileName.empty())
-	{
-		llerrs << "Filename is Empty!" << llendl;
-		return FALSE;
-	}
-	LLFILE* fp = LLFile::fopen(fileName, "rb");			/*Flawfinder: ignore*/
-	if (!fp)
-	{
-		llerrs << "can't open: " << fileName << llendl;
-		return FALSE;
-	}
-
-	//-------------------------------------------------------------------------
-	// Read a chunk
-	//-------------------------------------------------------------------------
-	char header[128];		/*Flawfinder: ignore*/
-	if (fread(header, sizeof(char), 128, fp) != 128)
-	{
-		llwarns << "Short read" << llendl;
-	}
-
-	//-------------------------------------------------------------------------
-	// Check for proper binary header
-	//-------------------------------------------------------------------------
-	BOOL status = FALSE;
-	if ( strncmp(header, HEADER_BINARY, strlen(HEADER_BINARY)) == 0 )	/*Flawfinder: ignore*/
-	{
-		lldebugs << "Loading " << fileName << llendl;
-
-		//----------------------------------------------------------------
-		// File Header (seek past it)
-		//----------------------------------------------------------------
-		fseek(fp, 24, SEEK_SET);
-
-		//----------------------------------------------------------------
-		// HasWeights
-		//----------------------------------------------------------------
-		U8 hasWeights;
-		size_t numRead = fread(&hasWeights, sizeof(U8), 1, fp);
-		if (numRead != 1)
-		{
-			llerrs << "can't read HasWeights flag from " << fileName << llendl;
-			return FALSE;
-		}
-		if (!isLOD())
-		{
-			mHasWeights = (hasWeights==0) ? FALSE : TRUE;
-		}
-
-		//----------------------------------------------------------------
-		// HasDetailTexCoords
-		//----------------------------------------------------------------
-		U8 hasDetailTexCoords;
-		numRead = fread(&hasDetailTexCoords, sizeof(U8), 1, fp);
-		if (numRead != 1)
-		{
-			llerrs << "can't read HasDetailTexCoords flag from " << fileName << llendl;
-			return FALSE;
-		}
-
-		//----------------------------------------------------------------
-		// Position
-		//----------------------------------------------------------------
-		LLVector3 position;
-		numRead = fread(position.mV, sizeof(float), 3, fp);
-		llendianswizzle(position.mV, sizeof(float), 3);
-		if (numRead != 3)
-		{
-			llerrs << "can't read Position from " << fileName << llendl;
-			return FALSE;
-		}
-		setPosition( position );
-
-		//----------------------------------------------------------------
-		// Rotation
-		//----------------------------------------------------------------
-		LLVector3 rotationAngles;
-		numRead = fread(rotationAngles.mV, sizeof(float), 3, fp);
-		llendianswizzle(rotationAngles.mV, sizeof(float), 3);
-		if (numRead != 3)
-		{
-			llerrs << "can't read RotationAngles from " << fileName << llendl;
-			return FALSE;
-		}
-
-		U8 rotationOrder;
-		numRead = fread(&rotationOrder, sizeof(U8), 1, fp);
-
-		if (numRead != 1)
-		{
-			llerrs << "can't read RotationOrder from " << fileName << llendl;
-			return FALSE;
-		}
-
-		rotationOrder = 0;
-
-		setRotation( mayaQ(	rotationAngles.mV[0],
-							rotationAngles.mV[1],
-							rotationAngles.mV[2],
-							(LLQuaternion::Order)rotationOrder ) );
-
-		//----------------------------------------------------------------
-		// Scale
-		//----------------------------------------------------------------
-		LLVector3 scale;
-		numRead = fread(scale.mV, sizeof(float), 3, fp);
-		llendianswizzle(scale.mV, sizeof(float), 3);
-		if (numRead != 3)
-		{
-			llerrs << "can't read Scale from " << fileName << llendl;
-			return FALSE;
-		}
-		setScale( scale );
-
-		//-------------------------------------------------------------------------
-		// Release any existing mesh geometry
-		//-------------------------------------------------------------------------
-		freeMeshData();
-
-		U16 numVertices = 0;
-
-		//----------------------------------------------------------------
-		// NumVertices
-		//----------------------------------------------------------------
-		if (!isLOD())
-		{
-			numRead = fread(&numVertices, sizeof(U16), 1, fp);
-			llendianswizzle(&numVertices, sizeof(U16), 1);
-			if (numRead != 1)
-			{
-				llerrs << "can't read NumVertices from " << fileName << llendl;
-				return FALSE;
-			}
-
-			allocateVertexData( numVertices );	
-
-			//----------------------------------------------------------------
-			// Coords
-			//----------------------------------------------------------------
-			numRead = fread(mBaseCoords, 3*sizeof(float), numVertices, fp);
-			llendianswizzle(mBaseCoords, sizeof(float), 3*numVertices);
-			if (numRead != numVertices)
-			{
-				llerrs << "can't read Coordinates from " << fileName << llendl;
-				return FALSE;
-			}
-
-			//----------------------------------------------------------------
-			// Normals
-			//----------------------------------------------------------------
-			numRead = fread(mBaseNormals, 3*sizeof(float), numVertices, fp);
-			llendianswizzle(mBaseNormals, sizeof(float), 3*numVertices);
-			if (numRead != numVertices)
-			{
-				llerrs << " can't read Normals from " << fileName << llendl;
-				return FALSE;
-			}
-
-			//----------------------------------------------------------------
-			// Binormals
-			//----------------------------------------------------------------
-			numRead = fread(mBaseBinormals, 3*sizeof(float), numVertices, fp);
-			llendianswizzle(mBaseBinormals, sizeof(float), 3*numVertices);
-			if (numRead != numVertices)
-			{
-				llerrs << " can't read Binormals from " << fileName << llendl;
-				return FALSE;
-			}
-
-
-			//----------------------------------------------------------------
-			// TexCoords
-			//----------------------------------------------------------------
-			numRead = fread(mTexCoords, 2*sizeof(float), numVertices, fp);
-			llendianswizzle(mTexCoords, sizeof(float), 2*numVertices);
-			if (numRead != numVertices)
-			{
-				llerrs << "can't read TexCoords from " << fileName << llendl;
-				return FALSE;
-			}
-
-			//----------------------------------------------------------------
-			// DetailTexCoords
-			//----------------------------------------------------------------
-			if (mHasDetailTexCoords)
-			{
-				numRead = fread(mDetailTexCoords, 2*sizeof(float), numVertices, fp);
-				llendianswizzle(mDetailTexCoords, sizeof(float), 2*numVertices);
-				if (numRead != numVertices)
-				{
-					llerrs << "can't read DetailTexCoords from " << fileName << llendl;
-					return FALSE;
-				}
-			}
-
-			//----------------------------------------------------------------
-			// Weights
-			//----------------------------------------------------------------
-			if (mHasWeights)
-			{
-				numRead = fread(mWeights, sizeof(float), numVertices, fp);
-				llendianswizzle(mWeights, sizeof(float), numVertices);
-				if (numRead != numVertices)
-				{
-					llerrs << "can't read Weights from " << fileName << llendl;
-					return FALSE;
-				}
-			}
-		}
-
-		//----------------------------------------------------------------
-		// NumFaces
-		//----------------------------------------------------------------
-		U16 numFaces;
-		numRead = fread(&numFaces, sizeof(U16), 1, fp);
-		llendianswizzle(&numFaces, sizeof(U16), 1);
-		if (numRead != 1)
-		{
-			llerrs << "can't read NumFaces from " << fileName << llendl;
-			return FALSE;
-		}
-		allocateFaceData( numFaces );
-
-
-		//----------------------------------------------------------------
-		// Faces
-		//----------------------------------------------------------------
-		U32 i;
-		U32 numTris = 0;
-		for (i = 0; i < numFaces; i++)
-		{
-			S16 face[3];
-			numRead = fread(face, sizeof(U16), 3, fp);
-			llendianswizzle(face, sizeof(U16), 3);
-			if (numRead != 3)
-			{
-				llerrs << "can't read Face[" << i << "] from " << fileName << llendl;
-				return FALSE;
-			}
-			if (mReferenceData)
-			{
-				llassert(face[0] < mReferenceData->mNumVertices);
-				llassert(face[1] < mReferenceData->mNumVertices);
-				llassert(face[2] < mReferenceData->mNumVertices);
-			}
-			
-			if (isLOD())
-			{
-				// store largest index in case of LODs
-				for (S32 j = 0; j < 3; j++)
-				{
-					if (face[j] > mNumVertices - 1)
-					{
-						mNumVertices = face[j] + 1;
-					}
-				}
-			}
-			mFaces[i][0] = face[0];
-			mFaces[i][1] = face[1];
-			mFaces[i][2] = face[2];
-
-//			S32 j;
-//			for(j = 0; j < 3; j++)
-//			{
-//				LLDynamicArray<S32> *face_list = mVertFaceMap.getIfThere(face[j]);
-//				if (!face_list)
-//				{
-//					face_list = new LLDynamicArray<S32>;
-//					mVertFaceMap.addData(face[j], face_list);
-//				}
-//				face_list->put(i);
-//			}
-
-			numTris++;
-		}
-
-		lldebugs << "verts: " << numVertices 
-			<< ", faces: "   << numFaces
-			<< ", tris: "    << numTris
-			<< llendl;
-
-		//----------------------------------------------------------------
-		// NumSkinJoints
-		//----------------------------------------------------------------
-		if (!isLOD())
-		{
-			U16 numSkinJoints = 0;
-			if ( mHasWeights )
-			{
-				numRead = fread(&numSkinJoints, sizeof(U16), 1, fp);
-				llendianswizzle(&numSkinJoints, sizeof(U16), 1);
-				if (numRead != 1)
-				{
-					llerrs << "can't read NumSkinJoints from " << fileName << llendl;
-					return FALSE;
-				}
-				allocateJointNames( numSkinJoints );
-			}
-
-			//----------------------------------------------------------------
-			// SkinJoints
-			//----------------------------------------------------------------
-			for (i=0; i < numSkinJoints; i++)
-			{
-				char jointName[64+1];
-				numRead = fread(jointName, sizeof(jointName)-1, 1, fp);
-				jointName[sizeof(jointName)-1] = '\0'; // ensure nul-termination
-				if (numRead != 1)
-				{
-					llerrs << "can't read Skin[" << i << "].Name from " << fileName << llendl;
-					return FALSE;
-				}
-
-				std::string *jn = &mJointNames[i];
-				*jn = jointName;
-			}
-
-			//-------------------------------------------------------------------------
-			// look for morph section
-			//-------------------------------------------------------------------------
-			char morphName[64+1];
-			morphName[sizeof(morphName)-1] = '\0'; // ensure nul-termination
-			while(fread(&morphName, sizeof(char), 64, fp) == 64)
-			{
-				if (!strcmp(morphName, "End Morphs"))
-				{
-					// we reached the end of the morphs
-					break;
-				}
-				LLPolyMorphData* morph_data = new LLPolyMorphData(std::string(morphName));
-
-				BOOL result = morph_data->loadBinary(fp, this);
-
-				if (!result)
-				{
-					delete morph_data;
-					continue;
-				}
-
-				mMorphData.insert(morph_data);
-			}
-
-			S32 numRemaps;
-			if (fread(&numRemaps, sizeof(S32), 1, fp) == 1)
-			{
-				llendianswizzle(&numRemaps, sizeof(S32), 1);
-				for (S32 i = 0; i < numRemaps; i++)
-				{
-					S32 remapSrc;
-					S32 remapDst;
-					if (fread(&remapSrc, sizeof(S32), 1, fp) != 1)
-					{
-						llerrs << "can't read source vertex in vertex remap data" << llendl;
-						break;
-					}
-					if (fread(&remapDst, sizeof(S32), 1, fp) != 1)
-					{
-						llerrs << "can't read destination vertex in vertex remap data" << llendl;
-						break;
-					}
-					llendianswizzle(&remapSrc, sizeof(S32), 1);
-					llendianswizzle(&remapDst, sizeof(S32), 1);
-
-					mSharedVerts[remapSrc] = remapDst;
-				}
-			}
-		}
-
-		status = TRUE;
-	}
-	else
-	{
-		llerrs << "invalid mesh file header: " << fileName << llendl;
-		status = FALSE;
-	}
-
-	if (0 == mNumJointNames)
-	{
-		allocateJointNames(1);
-	}
-
-	fclose( fp );
-
-	return status;
+        //-------------------------------------------------------------------------
+        // Open the file
+        //-------------------------------------------------------------------------
+        if(fileName.empty())
+        {
+                llerrs << "Filename is Empty!" << llendl;
+                return FALSE;
+        }
+        LLFILE* fp = LLFile::fopen(fileName, "rb");                     /*Flawfinder: ignore*/
+        if (!fp)
+        {
+                llerrs << "can't open: " << fileName << llendl;
+                return FALSE;
+        }
+
+        //-------------------------------------------------------------------------
+        // Read a chunk
+        //-------------------------------------------------------------------------
+        char header[128];               /*Flawfinder: ignore*/
+        if (fread(header, sizeof(char), 128, fp) != 128)
+        {
+                llwarns << "Short read" << llendl;
+        }
+
+        //-------------------------------------------------------------------------
+        // Check for proper binary header
+        //-------------------------------------------------------------------------
+        BOOL status = FALSE;
+        if ( strncmp(header, HEADER_BINARY, strlen(HEADER_BINARY)) == 0 )       /*Flawfinder: ignore*/
+        {
+                lldebugs << "Loading " << fileName << llendl;
+
+                //----------------------------------------------------------------
+                // File Header (seek past it)
+                //----------------------------------------------------------------
+                fseek(fp, 24, SEEK_SET);
+
+                //----------------------------------------------------------------
+                // HasWeights
+                //----------------------------------------------------------------
+                U8 hasWeights;
+                size_t numRead = fread(&hasWeights, sizeof(U8), 1, fp);
+                if (numRead != 1)
+                {
+                        llerrs << "can't read HasWeights flag from " << fileName << llendl;
+                        return FALSE;
+                }
+                if (!isLOD())
+                {
+                        mHasWeights = (hasWeights==0) ? FALSE : TRUE;
+                }
+
+                //----------------------------------------------------------------
+                // HasDetailTexCoords
+                //----------------------------------------------------------------
+                U8 hasDetailTexCoords;
+                numRead = fread(&hasDetailTexCoords, sizeof(U8), 1, fp);
+                if (numRead != 1)
+                {
+                        llerrs << "can't read HasDetailTexCoords flag from " << fileName << llendl;
+                        return FALSE;
+                }
+
+                //----------------------------------------------------------------
+                // Position
+                //----------------------------------------------------------------
+                LLVector3 position;
+                numRead = fread(position.mV, sizeof(float), 3, fp);
+                llendianswizzle(position.mV, sizeof(float), 3);
+                if (numRead != 3)
+                {
+                        llerrs << "can't read Position from " << fileName << llendl;
+                        return FALSE;
+                }
+                setPosition( position );
+
+                //----------------------------------------------------------------
+                // Rotation
+                //----------------------------------------------------------------
+                LLVector3 rotationAngles;
+                numRead = fread(rotationAngles.mV, sizeof(float), 3, fp);
+                llendianswizzle(rotationAngles.mV, sizeof(float), 3);
+                if (numRead != 3)
+                {
+                        llerrs << "can't read RotationAngles from " << fileName << llendl;
+                        return FALSE;
+                }
+
+                U8 rotationOrder;
+                numRead = fread(&rotationOrder, sizeof(U8), 1, fp);
+
+                if (numRead != 1)
+                {
+                        llerrs << "can't read RotationOrder from " << fileName << llendl;
+                        return FALSE;
+                }
+
+                rotationOrder = 0;
+
+                setRotation( mayaQ(     rotationAngles.mV[0],
+                                        rotationAngles.mV[1],
+                                        rotationAngles.mV[2],
+                                        (LLQuaternion::Order)rotationOrder ) );
+
+                //----------------------------------------------------------------
+                // Scale
+                //----------------------------------------------------------------
+                LLVector3 scale;
+                numRead = fread(scale.mV, sizeof(float), 3, fp);
+                llendianswizzle(scale.mV, sizeof(float), 3);
+                if (numRead != 3)
+                {
+                        llerrs << "can't read Scale from " << fileName << llendl;
+                        return FALSE;
+                }
+                setScale( scale );
+
+                //-------------------------------------------------------------------------
+                // Release any existing mesh geometry
+                //-------------------------------------------------------------------------
+                freeMeshData();
+
+                U16 numVertices = 0;
+
+                //----------------------------------------------------------------
+                // NumVertices
+                //----------------------------------------------------------------
+                if (!isLOD())
+                {
+                        numRead = fread(&numVertices, sizeof(U16), 1, fp);
+                        llendianswizzle(&numVertices, sizeof(U16), 1);
+                        if (numRead != 1)
+                        {
+                                llerrs << "can't read NumVertices from " << fileName << llendl;
+                                return FALSE;
+                        }
+
+                        allocateVertexData( numVertices );      
+
+                        //----------------------------------------------------------------
+                        // Coords
+                        //----------------------------------------------------------------
+                        numRead = fread(mBaseCoords, 3*sizeof(float), numVertices, fp);
+                        llendianswizzle(mBaseCoords, sizeof(float), 3*numVertices);
+                        if (numRead != numVertices)
+                        {
+                                llerrs << "can't read Coordinates from " << fileName << llendl;
+                                return FALSE;
+                        }
+
+                        //----------------------------------------------------------------
+                        // Normals
+                        //----------------------------------------------------------------
+                        numRead = fread(mBaseNormals, 3*sizeof(float), numVertices, fp);
+                        llendianswizzle(mBaseNormals, sizeof(float), 3*numVertices);
+                        if (numRead != numVertices)
+                        {
+                                llerrs << " can't read Normals from " << fileName << llendl;
+                                return FALSE;
+                        }
+
+                        //----------------------------------------------------------------
+                        // Binormals
+                        //----------------------------------------------------------------
+                        numRead = fread(mBaseBinormals, 3*sizeof(float), numVertices, fp);
+                        llendianswizzle(mBaseBinormals, sizeof(float), 3*numVertices);
+                        if (numRead != numVertices)
+                        {
+                                llerrs << " can't read Binormals from " << fileName << llendl;
+                                return FALSE;
+                        }
+
+
+                        //----------------------------------------------------------------
+                        // TexCoords
+                        //----------------------------------------------------------------
+                        numRead = fread(mTexCoords, 2*sizeof(float), numVertices, fp);
+                        llendianswizzle(mTexCoords, sizeof(float), 2*numVertices);
+                        if (numRead != numVertices)
+                        {
+                                llerrs << "can't read TexCoords from " << fileName << llendl;
+                                return FALSE;
+                        }
+
+                        //----------------------------------------------------------------
+                        // DetailTexCoords
+                        //----------------------------------------------------------------
+                        if (mHasDetailTexCoords)
+                        {
+                                numRead = fread(mDetailTexCoords, 2*sizeof(float), numVertices, fp);
+                                llendianswizzle(mDetailTexCoords, sizeof(float), 2*numVertices);
+                                if (numRead != numVertices)
+                                {
+                                        llerrs << "can't read DetailTexCoords from " << fileName << llendl;
+                                        return FALSE;
+                                }
+                        }
+
+                        //----------------------------------------------------------------
+                        // Weights
+                        //----------------------------------------------------------------
+                        if (mHasWeights)
+                        {
+                                numRead = fread(mWeights, sizeof(float), numVertices, fp);
+                                llendianswizzle(mWeights, sizeof(float), numVertices);
+                                if (numRead != numVertices)
+                                {
+                                        llerrs << "can't read Weights from " << fileName << llendl;
+                                        return FALSE;
+                                }
+                        }
+                }
+
+                //----------------------------------------------------------------
+                // NumFaces
+                //----------------------------------------------------------------
+                U16 numFaces;
+                numRead = fread(&numFaces, sizeof(U16), 1, fp);
+                llendianswizzle(&numFaces, sizeof(U16), 1);
+                if (numRead != 1)
+                {
+                        llerrs << "can't read NumFaces from " << fileName << llendl;
+                        return FALSE;
+                }
+                allocateFaceData( numFaces );
+
+
+                //----------------------------------------------------------------
+                // Faces
+                //----------------------------------------------------------------
+                U32 i;
+                U32 numTris = 0;
+                for (i = 0; i < numFaces; i++)
+                {
+                        S16 face[3];
+                        numRead = fread(face, sizeof(U16), 3, fp);
+                        llendianswizzle(face, sizeof(U16), 3);
+                        if (numRead != 3)
+                        {
+                                llerrs << "can't read Face[" << i << "] from " << fileName << llendl;
+                                return FALSE;
+                        }
+                        if (mReferenceData)
+                        {
+                                llassert(face[0] < mReferenceData->mNumVertices);
+                                llassert(face[1] < mReferenceData->mNumVertices);
+                                llassert(face[2] < mReferenceData->mNumVertices);
+                        }
+                        
+                        if (isLOD())
+                        {
+                                // store largest index in case of LODs
+                                for (S32 j = 0; j < 3; j++)
+                                {
+                                        if (face[j] > mNumVertices - 1)
+                                        {
+                                                mNumVertices = face[j] + 1;
+                                        }
+                                }
+                        }
+                        mFaces[i][0] = face[0];
+                        mFaces[i][1] = face[1];
+                        mFaces[i][2] = face[2];
+
+//                      S32 j;
+//                      for(j = 0; j < 3; j++)
+//                      {
+//                              LLDynamicArray<S32> *face_list = mVertFaceMap.getIfThere(face[j]);
+//                              if (!face_list)
+//                              {
+//                                      face_list = new LLDynamicArray<S32>;
+//                                      mVertFaceMap.addData(face[j], face_list);
+//                              }
+//                              face_list->put(i);
+//                      }
+
+                        numTris++;
+                }
+
+                lldebugs << "verts: " << numVertices 
+                         << ", faces: "   << numFaces
+                         << ", tris: "    << numTris
+                         << llendl;
+
+                //----------------------------------------------------------------
+                // NumSkinJoints
+                //----------------------------------------------------------------
+                if (!isLOD())
+                {
+                        U16 numSkinJoints = 0;
+                        if ( mHasWeights )
+                        {
+                                numRead = fread(&numSkinJoints, sizeof(U16), 1, fp);
+                                llendianswizzle(&numSkinJoints, sizeof(U16), 1);
+                                if (numRead != 1)
+                                {
+                                        llerrs << "can't read NumSkinJoints from " << fileName << llendl;
+                                        return FALSE;
+                                }
+                                allocateJointNames( numSkinJoints );
+                        }
+
+                        //----------------------------------------------------------------
+                        // SkinJoints
+                        //----------------------------------------------------------------
+                        for (i=0; i < numSkinJoints; i++)
+                        {
+                                char jointName[64+1];
+                                numRead = fread(jointName, sizeof(jointName)-1, 1, fp);
+                                jointName[sizeof(jointName)-1] = '\0'; // ensure nul-termination
+                                if (numRead != 1)
+                                {
+                                        llerrs << "can't read Skin[" << i << "].Name from " << fileName << llendl;
+                                        return FALSE;
+                                }
+
+                                std::string *jn = &mJointNames[i];
+                                *jn = jointName;
+                        }
+
+                        //-------------------------------------------------------------------------
+                        // look for morph section
+                        //-------------------------------------------------------------------------
+                        char morphName[64+1];
+                        morphName[sizeof(morphName)-1] = '\0'; // ensure nul-termination
+                        while(fread(&morphName, sizeof(char), 64, fp) == 64)
+                        {
+                                if (!strcmp(morphName, "End Morphs"))
+                                {
+                                        // we reached the end of the morphs
+                                        break;
+                                }
+                                LLPolyMorphData* morph_data = new LLPolyMorphData(std::string(morphName));
+
+                                BOOL result = morph_data->loadBinary(fp, this);
+
+                                if (!result)
+                                {
+                                        delete morph_data;
+                                        continue;
+                                }
+
+                                mMorphData.insert(morph_data);
+
+                                if (!strcmp(morphName, "Breast_Female_Cleavage"))
+                                {
+                                        mMorphData.insert(clone_morph_param_cleavage(morph_data,
+                                                                                     .75f,
+                                                                                     "Breast_Physics_LeftRight_Driven"));
+                                }
+
+                                if (!strcmp(morphName, "Breast_Female_Cleavage"))
+                                {
+                                        mMorphData.insert(clone_morph_param_duplicate(morph_data,
+										      "Breast_Physics_InOut_Driven"));
+                                }
+                                if (!strcmp(morphName, "Breast_Gravity"))
+                                {
+                                        mMorphData.insert(clone_morph_param_duplicate(morph_data,
+										      "Breast_Physics_UpDown_Driven"));
+                                }
+
+                                if (!strcmp(morphName, "Big_Belly_Torso"))
+                                {
+                                        mMorphData.insert(clone_morph_param_direction(morph_data,
+										      LLVector3(0,0,0.05f),
+										      "Belly_Physics_Torso_UpDown_Driven"));
+                                }
+
+                                if (!strcmp(morphName, "Big_Belly_Legs"))
+                                {
+                                        mMorphData.insert(clone_morph_param_direction(morph_data,
+										      LLVector3(0,0,0.05f),
+										      "Belly_Physics_Legs_UpDown_Driven"));
+                                }
+
+                                if (!strcmp(morphName, "skirt_belly"))
+                                {
+                                        mMorphData.insert(clone_morph_param_direction(morph_data,
+										      LLVector3(0,0,0.05f),
+										      "Belly_Physics_Skirt_UpDown_Driven"));
+                                }
+
+                                if (!strcmp(morphName, "Small_Butt"))
+                                {
+                                        mMorphData.insert(clone_morph_param_direction(morph_data,
+										      LLVector3(0,0,0.05f),
+										      "Butt_Physics_UpDown_Driven"));
+                                }
+                                if (!strcmp(morphName, "Small_Butt"))
+                                {
+                                        mMorphData.insert(clone_morph_param_direction(morph_data,
+										      LLVector3(0,0.03f,0),
+										      "Butt_Physics_LeftRight_Driven"));
+                                }
+                        }
+
+                        S32 numRemaps;
+                        if (fread(&numRemaps, sizeof(S32), 1, fp) == 1)
+                        {
+                                llendianswizzle(&numRemaps, sizeof(S32), 1);
+                                for (S32 i = 0; i < numRemaps; i++)
+                                {
+                                        S32 remapSrc;
+                                        S32 remapDst;
+                                        if (fread(&remapSrc, sizeof(S32), 1, fp) != 1)
+                                        {
+                                                llerrs << "can't read source vertex in vertex remap data" << llendl;
+                                                break;
+                                        }
+                                        if (fread(&remapDst, sizeof(S32), 1, fp) != 1)
+                                        {
+                                                llerrs << "can't read destination vertex in vertex remap data" << llendl;
+                                                break;
+                                        }
+                                        llendianswizzle(&remapSrc, sizeof(S32), 1);
+                                        llendianswizzle(&remapDst, sizeof(S32), 1);
+
+                                        mSharedVerts[remapSrc] = remapDst;
+                                }
+                        }
+                }
+
+                status = TRUE;
+        }
+        else
+        {
+                llerrs << "invalid mesh file header: " << fileName << llendl;
+                status = FALSE;
+        }
+
+        if (0 == mNumJointNames)
+        {
+                allocateJointNames(1);
+        }
+
+        fclose( fp );
+
+        return status;
 }
 
 //-----------------------------------------------------------------------------
@@ -653,11 +714,11 @@ BOOL LLPolyMeshSharedData::loadMesh( const std::string& fileName )
 //-----------------------------------------------------------------------------
 const S32 *LLPolyMeshSharedData::getSharedVert(S32 vert)
 {
-	if (mSharedVerts.count(vert) > 0)
-	{
-		return &mSharedVerts[vert];
-	}
-	return NULL;
+        if (mSharedVerts.count(vert) > 0)
+        {
+                return &mSharedVerts[vert];
+        }
+        return NULL;
 }
 
 //-----------------------------------------------------------------------------
@@ -665,69 +726,69 @@ const S32 *LLPolyMeshSharedData::getSharedVert(S32 vert)
 //-----------------------------------------------------------------------------
 const LLVector2 &LLPolyMeshSharedData::getUVs(U32 index)
 {
-	// TODO: convert all index variables to S32
-	llassert((S32)index < mNumVertices);
+        // TODO: convert all index variables to S32
+        llassert((S32)index < mNumVertices);
 
-	return mTexCoords[index];
+        return mTexCoords[index];
 }
 
 //-----------------------------------------------------------------------------
 // LLPolyMesh()
 //-----------------------------------------------------------------------------
 LLPolyMesh::LLPolyMesh(LLPolyMeshSharedData *shared_data, LLPolyMesh *reference_mesh)
-{	
-	LLMemType mt(LLMemType::MTYPE_AVATAR_MESH);
-
-	llassert(shared_data);
-
-	mSharedData = shared_data;
-	mReferenceMesh = reference_mesh;
-	mAvatarp = NULL;
-	mVertexData = NULL;
-
-	mCurVertexCount = 0;
-	mFaceIndexCount = 0;
-	mFaceIndexOffset = 0;
-	mFaceVertexCount = 0;
-	mFaceVertexOffset = 0;
-
-	if (shared_data->isLOD() && reference_mesh)
-	{
-		mCoords = reference_mesh->mCoords;
-		mNormals = reference_mesh->mNormals;
-		mScaledNormals = reference_mesh->mScaledNormals;
-		mBinormals = reference_mesh->mBinormals;
-		mScaledBinormals = reference_mesh->mScaledBinormals;
-		mTexCoords = reference_mesh->mTexCoords;
-		mClothingWeights = reference_mesh->mClothingWeights;
-	}
-	else
-	{
-#if 1	// Allocate memory without initializing every vector
-		// NOTE: This makes asusmptions about the size of LLVector[234]
-		int nverts = mSharedData->mNumVertices;
-		int nfloats = nverts * (3*5 + 2 + 4);
-		mVertexData = new F32[nfloats];
-		int offset = 0;
-		mCoords = 				(LLVector3*)(mVertexData + offset); offset += 3*nverts;
-		mNormals = 				(LLVector3*)(mVertexData + offset); offset += 3*nverts;
-		mScaledNormals = 		(LLVector3*)(mVertexData + offset); offset += 3*nverts;
-		mBinormals = 			(LLVector3*)(mVertexData + offset); offset += 3*nverts;
-		mScaledBinormals = 		(LLVector3*)(mVertexData + offset); offset += 3*nverts;
-		mTexCoords = 			(LLVector2*)(mVertexData + offset); offset += 2*nverts;
-		mClothingWeights = 	(LLVector4*)(mVertexData + offset); offset += 4*nverts;
+{       
+        LLMemType mt(LLMemType::MTYPE_AVATAR_MESH);
+
+        llassert(shared_data);
+
+        mSharedData = shared_data;
+        mReferenceMesh = reference_mesh;
+        mAvatarp = NULL;
+        mVertexData = NULL;
+
+        mCurVertexCount = 0;
+        mFaceIndexCount = 0;
+        mFaceIndexOffset = 0;
+        mFaceVertexCount = 0;
+        mFaceVertexOffset = 0;
+
+        if (shared_data->isLOD() && reference_mesh)
+        {
+                mCoords = reference_mesh->mCoords;
+                mNormals = reference_mesh->mNormals;
+                mScaledNormals = reference_mesh->mScaledNormals;
+                mBinormals = reference_mesh->mBinormals;
+                mScaledBinormals = reference_mesh->mScaledBinormals;
+                mTexCoords = reference_mesh->mTexCoords;
+                mClothingWeights = reference_mesh->mClothingWeights;
+        }
+        else
+        {
+#if 1   // Allocate memory without initializing every vector
+                // NOTE: This makes asusmptions about the size of LLVector[234]
+                int nverts = mSharedData->mNumVertices;
+                int nfloats = nverts * (3*5 + 2 + 4);
+                mVertexData = new F32[nfloats];
+                int offset = 0;
+                mCoords =                               (LLVector3*)(mVertexData + offset); offset += 3*nverts;
+                mNormals =                              (LLVector3*)(mVertexData + offset); offset += 3*nverts;
+                mScaledNormals =                (LLVector3*)(mVertexData + offset); offset += 3*nverts;
+                mBinormals =                    (LLVector3*)(mVertexData + offset); offset += 3*nverts;
+                mScaledBinormals =              (LLVector3*)(mVertexData + offset); offset += 3*nverts;
+                mTexCoords =                    (LLVector2*)(mVertexData + offset); offset += 2*nverts;
+                mClothingWeights =      (LLVector4*)(mVertexData + offset); offset += 4*nverts;
 #else
-		mCoords = new LLVector3[mSharedData->mNumVertices];
-		mNormals = new LLVector3[mSharedData->mNumVertices];
-		mScaledNormals = new LLVector3[mSharedData->mNumVertices];
-		mBinormals = new LLVector3[mSharedData->mNumVertices];
-		mScaledBinormals = new LLVector3[mSharedData->mNumVertices];
-		mTexCoords = new LLVector2[mSharedData->mNumVertices];
-		mClothingWeights = new LLVector4[mSharedData->mNumVertices];
-		memset(mClothingWeights, 0, sizeof(LLVector4) * mSharedData->mNumVertices);
+                mCoords = new LLVector3[mSharedData->mNumVertices];
+                mNormals = new LLVector3[mSharedData->mNumVertices];
+                mScaledNormals = new LLVector3[mSharedData->mNumVertices];
+                mBinormals = new LLVector3[mSharedData->mNumVertices];
+                mScaledBinormals = new LLVector3[mSharedData->mNumVertices];
+                mTexCoords = new LLVector2[mSharedData->mNumVertices];
+                mClothingWeights = new LLVector4[mSharedData->mNumVertices];
+                memset(mClothingWeights, 0, sizeof(LLVector4) * mSharedData->mNumVertices);
 #endif
-		initializeForMorph();
-	}
+                initializeForMorph();
+        }
 }
 
 
@@ -736,22 +797,22 @@ LLPolyMesh::LLPolyMesh(LLPolyMeshSharedData *shared_data, LLPolyMesh *reference_
 //-----------------------------------------------------------------------------
 LLPolyMesh::~LLPolyMesh()
 {
-	S32 i;
-	for (i = 0; i < mJointRenderData.count(); i++)
-	{
-		delete mJointRenderData[i];
-		mJointRenderData[i] = NULL;
-	}
+        S32 i;
+        for (i = 0; i < mJointRenderData.count(); i++)
+        {
+                delete mJointRenderData[i];
+                mJointRenderData[i] = NULL;
+        }
 #if 0 // These are now allocated as one big uninitialized chunk
-	delete [] mCoords;
-	delete [] mNormals;
-	delete [] mScaledNormals;
-	delete [] mBinormals;
-	delete [] mScaledBinormals;
-	delete [] mClothingWeights;
-	delete [] mTexCoords;
+        delete [] mCoords;
+        delete [] mNormals;
+        delete [] mScaledNormals;
+        delete [] mBinormals;
+        delete [] mScaledBinormals;
+        delete [] mClothingWeights;
+        delete [] mTexCoords;
 #else
-	delete [] mVertexData;
+        delete [] mVertexData;
 #endif
 }
 
@@ -761,40 +822,40 @@ LLPolyMesh::~LLPolyMesh()
 //-----------------------------------------------------------------------------
 LLPolyMesh *LLPolyMesh::getMesh(const std::string &name, LLPolyMesh* reference_mesh)
 {
-	//-------------------------------------------------------------------------
-	// search for an existing mesh by this name
-	//-------------------------------------------------------------------------
-	LLPolyMeshSharedData* meshSharedData = get_if_there(sGlobalSharedMeshList, name, (LLPolyMeshSharedData*)NULL);
-	if (meshSharedData)
-	{
-//		llinfos << "Polymesh " << name << " found in global mesh table." << llendl;
-		LLPolyMesh *poly_mesh = new LLPolyMesh(meshSharedData, reference_mesh);
-		return poly_mesh;
-	}
-
-	//-------------------------------------------------------------------------
-	// if not found, create a new one, add it to the list
-	//-------------------------------------------------------------------------
-	std::string full_path;
-	full_path = gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER,name);
-
-	LLPolyMeshSharedData *mesh_data = new LLPolyMeshSharedData();
-	if (reference_mesh)
-	{
-		mesh_data->setupLOD(reference_mesh->getSharedData());
-	}
-	if ( ! mesh_data->loadMesh( full_path ) )
-	{
-		delete mesh_data;
-		return NULL;
-	}
-
-	LLPolyMesh *poly_mesh = new LLPolyMesh(mesh_data, reference_mesh);
-
-//	llinfos << "Polymesh " << name << " added to global mesh table." << llendl;
-	sGlobalSharedMeshList[name] = poly_mesh->mSharedData;
-
-	return poly_mesh;
+        //-------------------------------------------------------------------------
+        // search for an existing mesh by this name
+        //-------------------------------------------------------------------------
+        LLPolyMeshSharedData* meshSharedData = get_if_there(sGlobalSharedMeshList, name, (LLPolyMeshSharedData*)NULL);
+        if (meshSharedData)
+        {
+//              llinfos << "Polymesh " << name << " found in global mesh table." << llendl;
+                LLPolyMesh *poly_mesh = new LLPolyMesh(meshSharedData, reference_mesh);
+                return poly_mesh;
+        }
+
+        //-------------------------------------------------------------------------
+        // if not found, create a new one, add it to the list
+        //-------------------------------------------------------------------------
+        std::string full_path;
+        full_path = gDirUtilp->getExpandedFilename(LL_PATH_CHARACTER,name);
+
+        LLPolyMeshSharedData *mesh_data = new LLPolyMeshSharedData();
+        if (reference_mesh)
+        {
+                mesh_data->setupLOD(reference_mesh->getSharedData());
+        }
+        if ( ! mesh_data->loadMesh( full_path ) )
+        {
+                delete mesh_data;
+                return NULL;
+        }
+
+        LLPolyMesh *poly_mesh = new LLPolyMesh(mesh_data, reference_mesh);
+
+//      llinfos << "Polymesh " << name << " added to global mesh table." << llendl;
+        sGlobalSharedMeshList[name] = poly_mesh->mSharedData;
+
+        return poly_mesh;
 }
 
 //-----------------------------------------------------------------------------
@@ -802,14 +863,14 @@ LLPolyMesh *LLPolyMesh::getMesh(const std::string &name, LLPolyMesh* reference_m
 //-----------------------------------------------------------------------------
 void LLPolyMesh::freeAllMeshes()
 {
-	// delete each item in the global lists
-	for_each(sGlobalSharedMeshList.begin(), sGlobalSharedMeshList.end(), DeletePairedPointer());
-	sGlobalSharedMeshList.clear();
+        // delete each item in the global lists
+        for_each(sGlobalSharedMeshList.begin(), sGlobalSharedMeshList.end(), DeletePairedPointer());
+        sGlobalSharedMeshList.clear();
 }
 
 LLPolyMeshSharedData *LLPolyMesh::getSharedData() const
 {
-	return mSharedData;
+        return mSharedData;
 }
 
 
@@ -818,41 +879,41 @@ LLPolyMeshSharedData *LLPolyMesh::getSharedData() const
 //--------------------------------------------------------------------
 void LLPolyMesh::dumpDiagInfo()
 {
-	// keep track of totals
-	U32 total_verts = 0;
-	U32 total_faces = 0;
-	U32 total_kb = 0;
-
-	std::string buf;
-
-	llinfos << "-----------------------------------------------------" << llendl;
-	llinfos << "       Global PolyMesh Table (DEBUG only)" << llendl;
-	llinfos << "   Verts    Faces  Mem(KB) Name" << llendl;
-	llinfos << "-----------------------------------------------------" << llendl;
-
-	// print each loaded mesh, and it's memory usage
-	for(LLPolyMeshSharedDataTable::iterator iter = sGlobalSharedMeshList.begin();
-		iter != sGlobalSharedMeshList.end(); ++iter)
-	{
-		const std::string& mesh_name = iter->first;
-		LLPolyMeshSharedData* mesh = iter->second;
-
-		S32 num_verts = mesh->mNumVertices;
-		S32 num_faces = mesh->mNumFaces;
-		U32 num_kb = mesh->getNumKB();
-
-		buf = llformat("%8d %8d %8d %s", num_verts, num_faces, num_kb, mesh_name.c_str());
-		llinfos << buf << llendl;
-
-		total_verts += num_verts;
-		total_faces += num_faces;
-		total_kb += num_kb;
-	}
-
-	llinfos << "-----------------------------------------------------" << llendl;
-	buf = llformat("%8d %8d %8d TOTAL", total_verts, total_faces, total_kb );
-	llinfos << buf << llendl;
-	llinfos << "-----------------------------------------------------" << llendl;
+        // keep track of totals
+        U32 total_verts = 0;
+        U32 total_faces = 0;
+        U32 total_kb = 0;
+
+        std::string buf;
+
+        llinfos << "-----------------------------------------------------" << llendl;
+        llinfos << "       Global PolyMesh Table (DEBUG only)" << llendl;
+        llinfos << "   Verts    Faces  Mem(KB) Name" << llendl;
+        llinfos << "-----------------------------------------------------" << llendl;
+
+        // print each loaded mesh, and it's memory usage
+        for(LLPolyMeshSharedDataTable::iterator iter = sGlobalSharedMeshList.begin();
+            iter != sGlobalSharedMeshList.end(); ++iter)
+        {
+                const std::string& mesh_name = iter->first;
+                LLPolyMeshSharedData* mesh = iter->second;
+
+                S32 num_verts = mesh->mNumVertices;
+                S32 num_faces = mesh->mNumFaces;
+                U32 num_kb = mesh->getNumKB();
+
+                buf = llformat("%8d %8d %8d %s", num_verts, num_faces, num_kb, mesh_name.c_str());
+                llinfos << buf << llendl;
+
+                total_verts += num_verts;
+                total_faces += num_faces;
+                total_kb += num_kb;
+        }
+
+        llinfos << "-----------------------------------------------------" << llendl;
+        buf = llformat("%8d %8d %8d TOTAL", total_verts, total_faces, total_kb );
+        llinfos << buf << llendl;
+        llinfos << "-----------------------------------------------------" << llendl;
 }
 
 //-----------------------------------------------------------------------------
@@ -860,7 +921,7 @@ void LLPolyMesh::dumpDiagInfo()
 //-----------------------------------------------------------------------------
 LLVector3 *LLPolyMesh::getWritableCoords()
 {
-	return mCoords;
+        return mCoords;
 }
 
 //-----------------------------------------------------------------------------
@@ -868,7 +929,7 @@ LLVector3 *LLPolyMesh::getWritableCoords()
 //-----------------------------------------------------------------------------
 LLVector3 *LLPolyMesh::getWritableNormals()
 {
-	return mNormals;
+        return mNormals;
 }
 
 //-----------------------------------------------------------------------------
@@ -876,24 +937,24 @@ LLVector3 *LLPolyMesh::getWritableNormals()
 //-----------------------------------------------------------------------------
 LLVector3 *LLPolyMesh::getWritableBinormals()
 {
-	return mBinormals;
+        return mBinormals;
 }
 
 
 //-----------------------------------------------------------------------------
 // getWritableClothingWeights()
 //-----------------------------------------------------------------------------
-LLVector4	*LLPolyMesh::getWritableClothingWeights()
+LLVector4       *LLPolyMesh::getWritableClothingWeights()
 {
-	return mClothingWeights;
+        return mClothingWeights;
 }
 
 //-----------------------------------------------------------------------------
 // getWritableTexCoords()
 //-----------------------------------------------------------------------------
-LLVector2	*LLPolyMesh::getWritableTexCoords()
+LLVector2       *LLPolyMesh::getWritableTexCoords()
 {
-	return mTexCoords;
+        return mTexCoords;
 }
 
 //-----------------------------------------------------------------------------
@@ -901,7 +962,7 @@ LLVector2	*LLPolyMesh::getWritableTexCoords()
 //-----------------------------------------------------------------------------
 LLVector3 *LLPolyMesh::getScaledNormals()
 {
-	return mScaledNormals;
+        return mScaledNormals;
 }
 
 //-----------------------------------------------------------------------------
@@ -909,7 +970,7 @@ LLVector3 *LLPolyMesh::getScaledNormals()
 //-----------------------------------------------------------------------------
 LLVector3 *LLPolyMesh::getScaledBinormals()
 {
-	return mScaledBinormals;
+        return mScaledBinormals;
 }
 
 
@@ -918,66 +979,66 @@ LLVector3 *LLPolyMesh::getScaledBinormals()
 //-----------------------------------------------------------------------------
 void LLPolyMesh::initializeForMorph()
 {
-	if (!mSharedData)
-		return;
-
-	memcpy(mCoords, mSharedData->mBaseCoords, sizeof(LLVector3) * mSharedData->mNumVertices);	/*Flawfinder: ignore*/
-	memcpy(mNormals, mSharedData->mBaseNormals, sizeof(LLVector3) * mSharedData->mNumVertices);	/*Flawfinder: ignore*/
-	memcpy(mScaledNormals, mSharedData->mBaseNormals, sizeof(LLVector3) * mSharedData->mNumVertices);	/*Flawfinder: ignore*/
-	memcpy(mBinormals, mSharedData->mBaseBinormals, sizeof(LLVector3) * mSharedData->mNumVertices);	/*Flawfinder: ignore*/
-	memcpy(mScaledBinormals, mSharedData->mBaseBinormals, sizeof(LLVector3) * mSharedData->mNumVertices);		/*Flawfinder: ignore*/
-	memcpy(mTexCoords, mSharedData->mTexCoords, sizeof(LLVector2) * mSharedData->mNumVertices);		/*Flawfinder: ignore*/
-	memset(mClothingWeights, 0, sizeof(LLVector4) * mSharedData->mNumVertices);
+        if (!mSharedData)
+                return;
+
+        memcpy(mCoords, mSharedData->mBaseCoords, sizeof(LLVector3) * mSharedData->mNumVertices);       /*Flawfinder: ignore*/
+        memcpy(mNormals, mSharedData->mBaseNormals, sizeof(LLVector3) * mSharedData->mNumVertices);     /*Flawfinder: ignore*/
+        memcpy(mScaledNormals, mSharedData->mBaseNormals, sizeof(LLVector3) * mSharedData->mNumVertices);       /*Flawfinder: ignore*/
+        memcpy(mBinormals, mSharedData->mBaseBinormals, sizeof(LLVector3) * mSharedData->mNumVertices); /*Flawfinder: ignore*/
+        memcpy(mScaledBinormals, mSharedData->mBaseBinormals, sizeof(LLVector3) * mSharedData->mNumVertices);           /*Flawfinder: ignore*/
+        memcpy(mTexCoords, mSharedData->mTexCoords, sizeof(LLVector2) * mSharedData->mNumVertices);             /*Flawfinder: ignore*/
+        memset(mClothingWeights, 0, sizeof(LLVector4) * mSharedData->mNumVertices);
 }
 
 //-----------------------------------------------------------------------------
 // getMorphData()
 //-----------------------------------------------------------------------------
-LLPolyMorphData*	LLPolyMesh::getMorphData(const std::string& morph_name)
+LLPolyMorphData*        LLPolyMesh::getMorphData(const std::string& morph_name)
 {
-	if (!mSharedData)
-		return NULL;
-	for (LLPolyMeshSharedData::morphdata_list_t::iterator iter = mSharedData->mMorphData.begin();
-		 iter != mSharedData->mMorphData.end(); ++iter)
-	{
-		LLPolyMorphData *morph_data = *iter;
-		if (morph_data->getName() == morph_name)
-		{
-			return morph_data;
-		}
-	}
-	return NULL;
+        if (!mSharedData)
+                return NULL;
+        for (LLPolyMeshSharedData::morphdata_list_t::iterator iter = mSharedData->mMorphData.begin();
+             iter != mSharedData->mMorphData.end(); ++iter)
+        {
+                LLPolyMorphData *morph_data = *iter;
+                if (morph_data->getName() == morph_name)
+                {
+                        return morph_data;
+                }
+        }
+        return NULL;
 }
 
 //-----------------------------------------------------------------------------
 // removeMorphData()
 //-----------------------------------------------------------------------------
 // // erasing but not deleting seems bad, but fortunately we don't actually use this...
-// void	LLPolyMesh::removeMorphData(LLPolyMorphData *morph_target)
+// void LLPolyMesh::removeMorphData(LLPolyMorphData *morph_target)
 // {
-// 	if (!mSharedData)
-// 		return;
-// 	mSharedData->mMorphData.erase(morph_target);
+//      if (!mSharedData)
+//              return;
+//      mSharedData->mMorphData.erase(morph_target);
 // }
 
 //-----------------------------------------------------------------------------
 // deleteAllMorphData()
 //-----------------------------------------------------------------------------
-// void	LLPolyMesh::deleteAllMorphData()
+// void LLPolyMesh::deleteAllMorphData()
 // {
-// 	if (!mSharedData)
-// 		return;
+//      if (!mSharedData)
+//              return;
 
-// 	for_each(mSharedData->mMorphData.begin(), mSharedData->mMorphData.end(), DeletePointer());
-// 	mSharedData->mMorphData.clear();
+//      for_each(mSharedData->mMorphData.begin(), mSharedData->mMorphData.end(), DeletePointer());
+//      mSharedData->mMorphData.clear();
 // }
 
 //-----------------------------------------------------------------------------
 // getWritableWeights()
 //-----------------------------------------------------------------------------
-F32*	LLPolyMesh::getWritableWeights() const
+F32*    LLPolyMesh::getWritableWeights() const
 {
-	return mSharedData->mWeights;
+        return mSharedData->mWeights;
 }
 
 //-----------------------------------------------------------------------------
@@ -989,58 +1050,58 @@ LLPolySkeletalDistortionInfo::LLPolySkeletalDistortionInfo()
 
 BOOL LLPolySkeletalDistortionInfo::parseXml(LLXmlTreeNode* node)
 {
-	llassert( node->hasName( "param" ) && node->getChildByName( "param_skeleton" ) );
-	
-	if (!LLViewerVisualParamInfo::parseXml(node))
-		return FALSE;
-
-	LLXmlTreeNode* skeletalParam = node->getChildByName("param_skeleton");
-
-	if (NULL == skeletalParam)
-	{
-		llwarns << "Failed to getChildByName(\"param_skeleton\")"
-			<< llendl;
-		return FALSE;
-	}
-
-	for( LLXmlTreeNode* bone = skeletalParam->getFirstChild(); bone; bone = skeletalParam->getNextChild() )
-	{
-		if (bone->hasName("bone"))
-		{
-			std::string name;
-			LLVector3 scale;
-			LLVector3 pos;
-			BOOL haspos = FALSE;
-			
-			static LLStdStringHandle name_string = LLXmlTree::addAttributeString("name");
-			if (!bone->getFastAttributeString(name_string, name))
-			{
-				llwarns << "No bone name specified for skeletal param." << llendl;
-				continue;
-			}
-
-			static LLStdStringHandle scale_string = LLXmlTree::addAttributeString("scale");
-			if (!bone->getFastAttributeVector3(scale_string, scale))
-			{
-				llwarns << "No scale specified for bone " << name << "." << llendl;
-				continue;
-			}
-
-			// optional offset deformation (translation)
-			static LLStdStringHandle offset_string = LLXmlTree::addAttributeString("offset");
-			if (bone->getFastAttributeVector3(offset_string, pos))
-			{
-				haspos = TRUE;
-			}
-			mBoneInfoList.push_back(LLPolySkeletalBoneInfo(name, scale, pos, haspos));
-		}
-		else
-		{
-			llwarns << "Unrecognized element " << bone->getName() << " in skeletal distortion" << llendl;
-			continue;
-		}
-	}
-	return TRUE;
+        llassert( node->hasName( "param" ) && node->getChildByName( "param_skeleton" ) );
+        
+        if (!LLViewerVisualParamInfo::parseXml(node))
+                return FALSE;
+
+        LLXmlTreeNode* skeletalParam = node->getChildByName("param_skeleton");
+
+        if (NULL == skeletalParam)
+        {
+                llwarns << "Failed to getChildByName(\"param_skeleton\")"
+                        << llendl;
+                return FALSE;
+        }
+
+        for( LLXmlTreeNode* bone = skeletalParam->getFirstChild(); bone; bone = skeletalParam->getNextChild() )
+        {
+                if (bone->hasName("bone"))
+                {
+                        std::string name;
+                        LLVector3 scale;
+                        LLVector3 pos;
+                        BOOL haspos = FALSE;
+                        
+                        static LLStdStringHandle name_string = LLXmlTree::addAttributeString("name");
+                        if (!bone->getFastAttributeString(name_string, name))
+                        {
+                                llwarns << "No bone name specified for skeletal param." << llendl;
+                                continue;
+                        }
+
+                        static LLStdStringHandle scale_string = LLXmlTree::addAttributeString("scale");
+                        if (!bone->getFastAttributeVector3(scale_string, scale))
+                        {
+                                llwarns << "No scale specified for bone " << name << "." << llendl;
+                                continue;
+                        }
+
+                        // optional offset deformation (translation)
+                        static LLStdStringHandle offset_string = LLXmlTree::addAttributeString("offset");
+                        if (bone->getFastAttributeVector3(offset_string, pos))
+                        {
+                                haspos = TRUE;
+                        }
+                        mBoneInfoList.push_back(LLPolySkeletalBoneInfo(name, scale, pos, haspos));
+                }
+                else
+                {
+                        llwarns << "Unrecognized element " << bone->getName() << " in skeletal distortion" << llendl;
+                        continue;
+                }
+        }
+        return TRUE;
 }
 
 //-----------------------------------------------------------------------------
@@ -1048,8 +1109,8 @@ BOOL LLPolySkeletalDistortionInfo::parseXml(LLXmlTreeNode* node)
 //-----------------------------------------------------------------------------
 LLPolySkeletalDistortion::LLPolySkeletalDistortion(LLVOAvatar *avatarp)
 {
-	mAvatar = avatarp;
-	mDefaultVec.setVec(0.001f, 0.001f, 0.001f);
+        mAvatar = avatarp;
+        mDefaultVec.setVec(0.001f, 0.001f, 0.001f);
 }
 
 //-----------------------------------------------------------------------------
@@ -1061,62 +1122,62 @@ LLPolySkeletalDistortion::~LLPolySkeletalDistortion()
 
 BOOL LLPolySkeletalDistortion::setInfo(LLPolySkeletalDistortionInfo *info)
 {
-	llassert(mInfo == NULL);
-	if (info->mID < 0)
-		return FALSE;
-	mInfo = info;
-	mID = info->mID;
-	setWeight(getDefaultWeight(), FALSE );
-
-	LLPolySkeletalDistortionInfo::bone_info_list_t::iterator iter;
-	for (iter = getInfo()->mBoneInfoList.begin(); iter != getInfo()->mBoneInfoList.end(); iter++)
-	{
-		LLPolySkeletalBoneInfo *bone_info = &(*iter);
-		LLJoint* joint = mAvatar->getJoint(bone_info->mBoneName);
-		if (!joint)
-		{
-			llwarns << "Joint " << bone_info->mBoneName << " not found." << llendl;
-			continue;
-		}
-
-		if (mJointScales.find(joint) != mJointScales.end())
-		{
-			llwarns << "Scale deformation already supplied for joint " << joint->getName() << "." << llendl;
-		}
-
-		// store it
-		mJointScales[joint] = bone_info->mScaleDeformation;
-
-		// apply to children that need to inherit it
-		for (LLJoint::child_list_t::iterator iter = joint->mChildren.begin();
-			 iter != joint->mChildren.end(); ++iter)
-		{
-			LLViewerJoint* child_joint = (LLViewerJoint*)(*iter);
-			if (child_joint->inheritScale())
-			{
-				LLVector3 childDeformation = LLVector3(child_joint->getScale());
-				childDeformation.scaleVec(bone_info->mScaleDeformation);
-				mJointScales[child_joint] = childDeformation;
-			}
-		}
-
-		if (bone_info->mHasPositionDeformation)
-		{
-			if (mJointOffsets.find(joint) != mJointOffsets.end())
-			{
-				llwarns << "Offset deformation already supplied for joint " << joint->getName() << "." << llendl;
-			}
-			mJointOffsets[joint] = bone_info->mPositionDeformation;
-		}
-	}
-	return TRUE;
+        llassert(mInfo == NULL);
+        if (info->mID < 0)
+                return FALSE;
+        mInfo = info;
+        mID = info->mID;
+        setWeight(getDefaultWeight(), FALSE );
+
+        LLPolySkeletalDistortionInfo::bone_info_list_t::iterator iter;
+        for (iter = getInfo()->mBoneInfoList.begin(); iter != getInfo()->mBoneInfoList.end(); iter++)
+        {
+                LLPolySkeletalBoneInfo *bone_info = &(*iter);
+                LLJoint* joint = mAvatar->getJoint(bone_info->mBoneName);
+                if (!joint)
+                {
+                        llwarns << "Joint " << bone_info->mBoneName << " not found." << llendl;
+                        continue;
+                }
+
+                if (mJointScales.find(joint) != mJointScales.end())
+                {
+                        llwarns << "Scale deformation already supplied for joint " << joint->getName() << "." << llendl;
+                }
+
+                // store it
+                mJointScales[joint] = bone_info->mScaleDeformation;
+
+                // apply to children that need to inherit it
+                for (LLJoint::child_list_t::iterator iter = joint->mChildren.begin();
+                     iter != joint->mChildren.end(); ++iter)
+                {
+                        LLViewerJoint* child_joint = (LLViewerJoint*)(*iter);
+                        if (child_joint->inheritScale())
+                        {
+                                LLVector3 childDeformation = LLVector3(child_joint->getScale());
+                                childDeformation.scaleVec(bone_info->mScaleDeformation);
+                                mJointScales[child_joint] = childDeformation;
+                        }
+                }
+
+                if (bone_info->mHasPositionDeformation)
+                {
+                        if (mJointOffsets.find(joint) != mJointOffsets.end())
+                        {
+                                llwarns << "Offset deformation already supplied for joint " << joint->getName() << "." << llendl;
+                        }
+                        mJointOffsets[joint] = bone_info->mPositionDeformation;
+                }
+        }
+        return TRUE;
 }
 
 /*virtual*/ LLViewerVisualParam* LLPolySkeletalDistortion::cloneParam(LLWearable* wearable) const
 {
-	LLPolySkeletalDistortion *new_param = new LLPolySkeletalDistortion(mAvatar);
-	*new_param = *this;
-	return new_param;
+        LLPolySkeletalDistortion *new_param = new LLPolySkeletalDistortion(mAvatar);
+        *new_param = *this;
+        return new_param;
 }
 
 //-----------------------------------------------------------------------------
@@ -1124,38 +1185,89 @@ BOOL LLPolySkeletalDistortion::setInfo(LLPolySkeletalDistortionInfo *info)
 //-----------------------------------------------------------------------------
 void LLPolySkeletalDistortion::apply( ESex avatar_sex )
 {
-	F32 effective_weight = ( getSex() & avatar_sex ) ? mCurWeight : getDefaultWeight();
-
-	LLJoint* joint;
-	joint_vec_map_t::iterator iter;
-
-	for (iter = mJointScales.begin();
-		 iter != mJointScales.end();
-		 iter++)
-	{
-		joint = iter->first;
-		LLVector3 newScale = joint->getScale();
-		LLVector3 scaleDelta = iter->second;
-		newScale = newScale + (effective_weight * scaleDelta) - (mLastWeight * scaleDelta);
-		joint->setScale(newScale);
-	}
-
-	for (iter = mJointOffsets.begin();
-		 iter != mJointOffsets.end();
-		 iter++)
-	{
-		joint = iter->first;
-		LLVector3 newPosition = joint->getPosition();
-		LLVector3 positionDelta = iter->second;
-		newPosition = newPosition + (effective_weight * positionDelta) - (mLastWeight * positionDelta);
-		joint->setPosition(newPosition);
-	}
-
-	if (mLastWeight != mCurWeight && !mIsAnimating)
-	{
-		mAvatar->setSkeletonSerialNum(mAvatar->getSkeletonSerialNum() + 1);
-	}
-	mLastWeight = mCurWeight;
+        F32 effective_weight = ( getSex() & avatar_sex ) ? mCurWeight : getDefaultWeight();
+
+        LLJoint* joint;
+        joint_vec_map_t::iterator iter;
+
+        for (iter = mJointScales.begin();
+             iter != mJointScales.end();
+             iter++)
+        {
+                joint = iter->first;
+                LLVector3 newScale = joint->getScale();
+                LLVector3 scaleDelta = iter->second;
+                newScale = newScale + (effective_weight * scaleDelta) - (mLastWeight * scaleDelta);
+                joint->setScale(newScale);
+        }
+
+        for (iter = mJointOffsets.begin();
+             iter != mJointOffsets.end();
+             iter++)
+        {
+                joint = iter->first;
+                LLVector3 newPosition = joint->getPosition();
+                LLVector3 positionDelta = iter->second;
+                newPosition = newPosition + (effective_weight * positionDelta) - (mLastWeight * positionDelta);
+                joint->setPosition(newPosition);
+        }
+
+        if (mLastWeight != mCurWeight && !mIsAnimating)
+        {
+                mAvatar->setSkeletonSerialNum(mAvatar->getSkeletonSerialNum() + 1);
+        }
+        mLastWeight = mCurWeight;
+}
+
+
+LLPolyMorphData *clone_morph_param_duplicate(const LLPolyMorphData *src_data,
+					     const std::string &name)
+{
+        LLPolyMorphData* cloned_morph_data = new LLPolyMorphData(*src_data);
+        cloned_morph_data->mName = name;
+        for (U32 v=0; v < cloned_morph_data->mNumIndices; v++)
+        {
+                cloned_morph_data->mCoords[v] = src_data->mCoords[v];
+                cloned_morph_data->mNormals[v] = src_data->mNormals[v];
+                cloned_morph_data->mBinormals[v] = src_data->mBinormals[v];
+        }
+        return cloned_morph_data;
+}
+
+LLPolyMorphData *clone_morph_param_direction(const LLPolyMorphData *src_data,
+					     const LLVector3 &direction,
+					     const std::string &name)
+{
+        LLPolyMorphData* cloned_morph_data = new LLPolyMorphData(*src_data);
+        cloned_morph_data->mName = name;
+        for (U32 v=0; v < cloned_morph_data->mNumIndices; v++)
+        {
+                cloned_morph_data->mCoords[v] = direction;
+                cloned_morph_data->mNormals[v] = LLVector3(0,0,0);
+                cloned_morph_data->mBinormals[v] = LLVector3(0,0,0);
+        }
+        return cloned_morph_data;
+}
+
+LLPolyMorphData *clone_morph_param_cleavage(const LLPolyMorphData *src_data,
+                                            F32 scale,
+                                            const std::string &name)
+{
+        LLPolyMorphData* cloned_morph_data = new LLPolyMorphData(*src_data);
+        cloned_morph_data->mName = name;
+        for (U32 v=0; v < cloned_morph_data->mNumIndices; v++)
+        {
+                cloned_morph_data->mCoords[v] = src_data->mCoords[v]*scale;
+                cloned_morph_data->mNormals[v] = src_data->mNormals[v]*scale;
+                cloned_morph_data->mBinormals[v] = src_data->mBinormals[v]*scale;
+                if (cloned_morph_data->mCoords[v][1] < 0)
+                {
+                        cloned_morph_data->mCoords[v][1] *= -1;
+                        cloned_morph_data->mNormals[v][1] *= -1;
+                        cloned_morph_data->mBinormals[v][1] *= -1;
+                }
+        }
+        return cloned_morph_data;
 }
 
 // End
diff --git a/indra/newview/llpolymorph.cpp b/indra/newview/llpolymorph.cpp
index 0ffe1c635f143a5780be304fbb4c7ffa3c4c055b..36f8c8d13e49109c90a576294c1b162aba6be307 100644
--- a/indra/newview/llpolymorph.cpp
+++ b/indra/newview/llpolymorph.cpp
@@ -59,6 +59,37 @@ LLPolyMorphData::LLPolyMorphData(const std::string& morph_name)
 	mMesh = NULL;
 }
 
+LLPolyMorphData::LLPolyMorphData(const LLPolyMorphData &rhs) :
+	mName(rhs.mName),
+	mNumIndices(rhs.mNumIndices),
+	mTotalDistortion(rhs.mTotalDistortion),
+	mAvgDistortion(rhs.mAvgDistortion),
+	mMaxDistortion(rhs.mMaxDistortion),
+	mVertexIndices(NULL),
+	mCoords(NULL),
+	mNormals(NULL),
+	mBinormals(NULL),
+	mTexCoords(NULL)
+{
+	const S32 numVertices = mNumIndices;
+
+	mCoords = new LLVector3[numVertices];
+	mNormals = new LLVector3[numVertices];
+	mBinormals = new LLVector3[numVertices];
+	mTexCoords = new LLVector2[numVertices];
+	mVertexIndices = new U32[numVertices];
+	
+	for (S32 v=0; v < numVertices; v++)
+	{
+		mCoords[v] = rhs.mCoords[v];
+		mNormals[v] = rhs.mNormals[v];
+		mBinormals[v] = rhs.mBinormals[v];
+		mTexCoords[v] = rhs.mTexCoords[v];
+		mVertexIndices[v] = rhs.mVertexIndices[v];
+	}
+}
+
+
 //-----------------------------------------------------------------------------
 // ~LLPolyMorphData()
 //-----------------------------------------------------------------------------
@@ -287,10 +318,22 @@ BOOL LLPolyMorphTarget::setInfo(LLPolyMorphTargetInfo* info)
 		}
 	}
 
-	mMorphData = mMesh->getMorphData(getInfo()->mMorphName);
+	std::string morph_param_name = getInfo()->mMorphName;
+	
+	mMorphData = mMesh->getMorphData(morph_param_name);
+	if (!mMorphData)
+	{
+		const std::string driven_tag = "_Driven";
+		U32 pos = morph_param_name.find(driven_tag);
+		if (pos > 0)
+		{
+			morph_param_name = morph_param_name.substr(0,pos);
+			mMorphData = mMesh->getMorphData(morph_param_name);
+		}
+	}
 	if (!mMorphData)
 	{
-		llwarns << "No morph target named " << getInfo()->mMorphName << " found in mesh." << llendl;
+		llwarns << "No morph target named " << morph_param_name << " found in mesh." << llendl;
 		return FALSE;  // Continue, ignoring this tag
 	}
 	return TRUE;
@@ -447,6 +490,16 @@ void LLPolyMorphTarget::apply( ESex avatar_sex )
 
 	mLastSex = avatar_sex;
 
+	// Check for NaN condition (NaN is detected if a variable doesn't equal itself.
+	if (mCurWeight != mCurWeight)
+	{
+		mCurWeight = 0.0;
+	}
+	if (mLastWeight != mLastWeight)
+	{
+		mLastWeight = mCurWeight+.001;
+	}
+
 	// perform differential update of morph
 	F32 delta_weight = ( getSex() & avatar_sex ) ? (mCurWeight - mLastWeight) : (getDefaultWeight() - mLastWeight);
 	// store last weight
diff --git a/indra/newview/llpolymorph.h b/indra/newview/llpolymorph.h
index bc111882b709d8a67593f0d8dd5074662a95d2ba..8a024f2e9e05c55b83bb987f0f36a2d98ff3d86a 100644
--- a/indra/newview/llpolymorph.h
+++ b/indra/newview/llpolymorph.h
@@ -46,6 +46,7 @@ class LLPolyMorphData
 public:
 	LLPolyMorphData(const std::string& morph_name);
 	~LLPolyMorphData();
+	LLPolyMorphData(const LLPolyMorphData &rhs);
 
 	BOOL			loadBinary(LLFILE* fp, LLPolyMeshSharedData *mesh);
 	const std::string& getName() { return mName; }
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
index 22ff362b5a66d5c2c3869e78a7614ff7d1ed45e2..b19bf5d234c36544e12aee92ac14709ccc038add 100644
--- a/indra/newview/llpreviewscript.cpp
+++ b/indra/newview/llpreviewscript.cpp
@@ -956,16 +956,31 @@ void LLScriptEdCore::openInExternalEditor()
 	// Open it in external editor.
 	{
 		LLExternalEditor ed;
+		LLExternalEditor::EErrorCode status;
+		std::string msg;
 
-		if (!ed.setCommand("LL_SCRIPT_EDITOR"))
+		status = ed.setCommand("LL_SCRIPT_EDITOR");
+		if (status != LLExternalEditor::EC_SUCCESS)
 		{
-			std::string msg = "Select an editor by setting the environment variable LL_SCRIPT_EDITOR "
-				"or the ExternalEditor setting"; // *TODO: localize
+			if (status == LLExternalEditor::EC_NOT_SPECIFIED) // Use custom message for this error.
+			{
+				msg = getString("external_editor_not_set");
+			}
+			else
+			{
+				msg = LLExternalEditor::getErrorMessage(status);
+			}
+
 			LLNotificationsUtil::add("GenericAlert", LLSD().with("MESSAGE", msg));
 			return;
 		}
 
-		ed.run(filename);
+		status = ed.run(filename);
+		if (status != LLExternalEditor::EC_SUCCESS)
+		{
+			msg = LLExternalEditor::getErrorMessage(status);
+			LLNotificationsUtil::add("GenericAlert", LLSD().with("MESSAGE", msg));
+		}
 	}
 }
 
diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
index 6cfb708112ab10ab270e7eaa90ac6672e8af4427..18d6731fcb2c997b21773a04b32c371beb080c53 100644
--- a/indra/newview/llpreviewtexture.cpp
+++ b/indra/newview/llpreviewtexture.cpp
@@ -143,10 +143,7 @@ void LLPreviewTexture::onSaveAsBtn(void* data)
 
 void LLPreviewTexture::draw()
 {
-	if (mUpdateDimensions)
-	{
-		updateDimensions();
-	}
+	updateDimensions();
 	
 	LLPreview::draw();
 
@@ -396,27 +393,32 @@ void LLPreviewTexture::onFileLoadedForSave(BOOL success,
 void LLPreviewTexture::updateDimensions()
 {
 	if (!mImage)
+	{
 		return;
-
-	if(mImage->getFullWidth() == 0 || mImage->getFullHeight() == 0)
+	}
+	if ((mImage->getFullWidth() * mImage->getFullHeight()) == 0)
 	{
 		return;
 	}
 	
-	mUpdateDimensions = FALSE;
-
-	getChild<LLUICtrl>("dimensions")->setTextArg("[WIDTH]", llformat("%d", mImage->getFullWidth()));
+	// Update the width/height display every time
+	getChild<LLUICtrl>("dimensions")->setTextArg("[WIDTH]",  llformat("%d", mImage->getFullWidth()));
 	getChild<LLUICtrl>("dimensions")->setTextArg("[HEIGHT]", llformat("%d", mImage->getFullHeight()));
 
-	
-	//reshape floater
-	reshape(getRect().getWidth(), getRect().getHeight());
+	// Reshape the floater only when required
+	if (mUpdateDimensions)
+	{
+		mUpdateDimensions = FALSE;
+		
+		//reshape floater
+		reshape(getRect().getWidth(), getRect().getHeight());
 
-	gFloaterView->adjustToFitScreen(this, FALSE);
+		gFloaterView->adjustToFitScreen(this, FALSE);
 
-	LLRect dim_rect(getChildView("dimensions")->getRect());
-	LLRect aspect_label_rect(getChildView("aspect_ratio")->getRect());
-	getChildView("aspect_ratio")->setVisible( dim_rect.mRight < aspect_label_rect.mLeft);
+		LLRect dim_rect(getChildView("dimensions")->getRect());
+		LLRect aspect_label_rect(getChildView("aspect_ratio")->getRect());
+		getChildView("aspect_ratio")->setVisible( dim_rect.mRight < aspect_label_rect.mLeft);
+	}
 }
 
 
diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp
index f8c20dada07429cef4a4b1e5689558b31efd2442..05b82ba967e3dfda182491e45553b80da7d32c42 100644
--- a/indra/newview/llscrollingpanelparam.cpp
+++ b/indra/newview/llscrollingpanelparam.cpp
@@ -50,14 +50,9 @@ const S32 LLScrollingPanelParam::PARAM_HINT_HEIGHT = 128;
 S32 LLScrollingPanelParam::sUpdateDelayFrames = 0;
 
 LLScrollingPanelParam::LLScrollingPanelParam( const LLPanel::Params& panel_params,
-											  LLViewerJointMesh* mesh, LLViewerVisualParam* param, BOOL allow_modify, LLWearable* wearable, LLJoint* jointp )
-	: LLScrollingPanel( panel_params ),
-	  mParam(param),
-	  mAllowModify(allow_modify),
-	  mWearable(wearable)
+					      LLViewerJointMesh* mesh, LLViewerVisualParam* param, BOOL allow_modify, LLWearable* wearable, LLJoint* jointp, BOOL use_hints )
+    : LLScrollingPanelParamBase( panel_params, mesh, param, allow_modify, wearable, jointp, use_hints)
 {
-	buildFromFile( "panel_scrolling_param.xml");
-
 	// *HACK To avoid hard coding texture position, lets use border's position for texture. 
 	LLViewBorder* left_border = getChild<LLViewBorder>("left_border");
 
@@ -73,12 +68,6 @@ LLScrollingPanelParam::LLScrollingPanelParam( const LLPanel::Params& panel_param
 	
 	mHintMin->setAllowsUpdates( FALSE );
 	mHintMax->setAllowsUpdates( FALSE );
-	getChild<LLUICtrl>("param slider")->setValue(weightToPercent(param->getWeight()));
-
-	std::string display_name = LLTrans::getString(param->getDisplayName());
-	getChild<LLUICtrl>("param slider")->setLabelArg("[DESC]", display_name);
-	getChildView("param slider")->setEnabled(mAllowModify);
-	childSetCommitCallback("param slider", LLScrollingPanelParam::onSliderMoved, this);
 
 	std::string min_name = LLTrans::getString(param->getMinDisplayName());
 	std::string max_name = LLTrans::getString(param->getMaxDisplayName());
@@ -112,20 +101,15 @@ LLScrollingPanelParam::~LLScrollingPanelParam()
 }
 void LLScrollingPanelParam::updatePanel(BOOL allow_modify)
 {
-	LLViewerVisualParam* param = mHintMin->getVisualParam();
-
 	if (!mWearable)
 	{
 		// not editing a wearable just now, no update necessary
 		return;
 	}
-	F32 current_weight = mWearable->getVisualParamWeight( param->getID() );
-	getChild<LLUICtrl>("param slider")->setValue(weightToPercent( current_weight ) );
+	LLScrollingPanelParamBase::updatePanel(allow_modify);
+
 	mHintMin->requestUpdate( sUpdateDelayFrames++ );
 	mHintMax->requestUpdate( sUpdateDelayFrames++ );
-
-	mAllowModify = allow_modify;
-	getChildView("param slider")->setEnabled(mAllowModify);
 	getChildView("less")->setEnabled(mAllowModify);
 	getChildView("more")->setEnabled(mAllowModify);
 }
@@ -135,13 +119,17 @@ void LLScrollingPanelParam::setVisible( BOOL visible )
 	if( getVisible() != visible )
 	{
 		LLPanel::setVisible( visible );
-		mHintMin->setAllowsUpdates( visible );
-		mHintMax->setAllowsUpdates( visible );
+		if (mHintMin)
+			mHintMin->setAllowsUpdates( visible );
+		if (mHintMax)
+			mHintMax->setAllowsUpdates( visible );
 
 		if( visible )
 		{
-			mHintMin->setUpdateDelayFrames( sUpdateDelayFrames++ );
-			mHintMax->setUpdateDelayFrames( sUpdateDelayFrames++ );
+			if (mHintMin)
+				mHintMin->setUpdateDelayFrames( sUpdateDelayFrames++ );
+			if (mHintMax)
+				mHintMax->setUpdateDelayFrames( sUpdateDelayFrames++ );
 		}
 	}
 }
@@ -164,7 +152,7 @@ void LLScrollingPanelParam::draw()
 	getChildView("min param text")->setVisible( FALSE );
 	getChildView("max param text")->setVisible( FALSE );
 	LLPanel::draw();
-
+	
 	// If we're in a focused floater, don't apply the floater's alpha to visual param hint,
 	// making its behavior similar to texture controls'.
 	F32 alpha = getTransparencyType() == TT_ACTIVE ? 1.0f : getCurrentTransparency();
@@ -195,23 +183,6 @@ void LLScrollingPanelParam::draw()
 	drawChild(getChild<LLView>("max param text"));
 }
 
-// static
-void LLScrollingPanelParam::onSliderMoved(LLUICtrl* ctrl, void* userdata)
-{
-	LLSliderCtrl* slider = (LLSliderCtrl*) ctrl;
-	LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata;
-	LLViewerVisualParam* param = self->mParam;
-	
-	F32 current_weight = self->mWearable->getVisualParamWeight( param->getID() );
-	F32 new_weight = self->percentToWeight( (F32)slider->getValue().asReal() );
-	if (current_weight != new_weight )
-	{
-		self->mWearable->setVisualParamWeight( param->getID(), new_weight, FALSE );
-		self->mWearable->writeToAvatar();
-		gAgentAvatarp->updateVisualParams();
-	}
-}
-
 // static
 void LLScrollingPanelParam::onSliderMouseDown(LLUICtrl* ctrl, void* userdata)
 {
@@ -221,7 +192,6 @@ void LLScrollingPanelParam::onSliderMouseDown(LLUICtrl* ctrl, void* userdata)
 void LLScrollingPanelParam::onSliderMouseUp(LLUICtrl* ctrl, void* userdata)
 {
 	LLScrollingPanelParam* self = (LLScrollingPanelParam*) userdata;
-
 	LLVisualParamHint::requestHintUpdates( self->mHintMin, self->mHintMax );
 }
 
diff --git a/indra/newview/llscrollingpanelparam.h b/indra/newview/llscrollingpanelparam.h
index 1cbc64f45a9c6ec468fe77eff83c1dd68d29ae7b..c7a47d5c7a585fe924de09d0ea07ed269d99ac01 100644
--- a/indra/newview/llscrollingpanelparam.h
+++ b/indra/newview/llscrollingpanelparam.h
@@ -28,8 +28,7 @@
 #ifndef LL_SCROLLINGPANELPARAM_H
 #define LL_SCROLLINGPANELPARAM_H
 
-#include "llpanel.h"
-#include "llscrollingpanellist.h"
+#include "llscrollingpanelparambase.h"
 
 class LLViewerJointMesh;
 class LLViewerVisualParam;
@@ -38,11 +37,11 @@ class LLVisualParamHint;
 class LLViewerVisualParam;
 class LLJoint;
 
-class LLScrollingPanelParam : public LLScrollingPanel
+class LLScrollingPanelParam : public LLScrollingPanelParamBase
 {
 public:
 	LLScrollingPanelParam( const LLPanel::Params& panel_params,
-						   LLViewerJointMesh* mesh, LLViewerVisualParam* param, BOOL allow_modify, LLWearable* wearable, LLJoint* jointp );
+			       LLViewerJointMesh* mesh, LLViewerVisualParam* param, BOOL allow_modify, LLWearable* wearable, LLJoint* jointp, BOOL use_hints = TRUE );
 	virtual ~LLScrollingPanelParam();
 
 	virtual void		draw();
@@ -50,7 +49,6 @@ class LLScrollingPanelParam : public LLScrollingPanel
 	virtual void		updatePanel(BOOL allow_modify);
 
 	static void			onSliderMouseDown(LLUICtrl* ctrl, void* userdata);
-	static void			onSliderMoved(LLUICtrl* ctrl, void* userdata);
 	static void			onSliderMouseUp(LLUICtrl* ctrl, void* userdata);
 
 	static void			onHintMinMouseDown(void* userdata);
@@ -74,7 +72,6 @@ class LLScrollingPanelParam : public LLScrollingPanel
 	const static S32 PARAM_HINT_HEIGHT;
 
 public:
-	LLViewerVisualParam* mParam;
 	LLPointer<LLVisualParamHint>	mHintMin;
 	LLPointer<LLVisualParamHint>	mHintMax;
 	static S32 			sUpdateDelayFrames;
@@ -82,9 +79,7 @@ class LLScrollingPanelParam : public LLScrollingPanel
 protected:
 	LLTimer				mMouseDownTimer;	// timer for how long mouse has been held down on a hint.
 	F32					mLastHeldTime;
-
 	BOOL mAllowModify;
-	LLWearable *mWearable;
 }; 
 
 #endif
diff --git a/indra/newview/llscrollingpanelparambase.cpp b/indra/newview/llscrollingpanelparambase.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..62e3039d2fe67ea1f2183395b18bfbd17ae13af3
--- /dev/null
+++ b/indra/newview/llscrollingpanelparambase.cpp
@@ -0,0 +1,112 @@
+/** 
+ * @file llscrollingpanelparam.cpp
+ * @brief UI panel for a list of visual param panels
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llscrollingpanelparambase.h"
+#include "llviewerjointmesh.h"
+#include "llviewervisualparam.h"
+#include "llwearable.h"
+#include "llviewervisualparam.h"
+#include "lltoolmorph.h"
+#include "lltrans.h"
+#include "llbutton.h"
+#include "llsliderctrl.h"
+#include "llagent.h"
+#include "llviewborder.h"
+#include "llvoavatarself.h"
+
+LLScrollingPanelParamBase::LLScrollingPanelParamBase( const LLPanel::Params& panel_params,
+						      LLViewerJointMesh* mesh, LLViewerVisualParam* param, BOOL allow_modify, LLWearable* wearable, LLJoint* jointp, BOOL use_hints)
+	: LLScrollingPanel( panel_params ),
+	  mParam(param),
+	  mAllowModify(allow_modify),
+	  mWearable(wearable)
+{
+	if (use_hints)
+		buildFromFile( "panel_scrolling_param.xml");
+	else
+		buildFromFile( "panel_scrolling_param_base.xml");
+	
+	getChild<LLUICtrl>("param slider")->setValue(weightToPercent(param->getWeight()));
+
+	std::string display_name = LLTrans::getString(param->getDisplayName());
+	getChild<LLUICtrl>("param slider")->setLabelArg("[DESC]", display_name);
+	getChildView("param slider")->setEnabled(mAllowModify);
+	childSetCommitCallback("param slider", LLScrollingPanelParamBase::onSliderMoved, this);
+
+	setVisible(FALSE);
+	setBorderVisible( FALSE );
+}
+
+LLScrollingPanelParamBase::~LLScrollingPanelParamBase()
+{
+}
+
+void LLScrollingPanelParamBase::updatePanel(BOOL allow_modify)
+{
+	LLViewerVisualParam* param = mParam;
+
+	if (!mWearable)
+	{
+		// not editing a wearable just now, no update necessary
+		return;
+	}
+
+	F32 current_weight = mWearable->getVisualParamWeight( param->getID() );
+	getChild<LLUICtrl>("param slider")->setValue(weightToPercent( current_weight ) );
+	mAllowModify = allow_modify;
+	getChildView("param slider")->setEnabled(mAllowModify);
+}
+
+// static
+void LLScrollingPanelParamBase::onSliderMoved(LLUICtrl* ctrl, void* userdata)
+{
+	LLSliderCtrl* slider = (LLSliderCtrl*) ctrl;
+	LLScrollingPanelParamBase* self = (LLScrollingPanelParamBase*) userdata;
+	LLViewerVisualParam* param = self->mParam;
+	
+	F32 current_weight = self->mWearable->getVisualParamWeight( param->getID() );
+	F32 new_weight = self->percentToWeight( (F32)slider->getValue().asReal() );
+	if (current_weight != new_weight )
+	{
+		self->mWearable->setVisualParamWeight( param->getID(), new_weight, FALSE );
+		self->mWearable->writeToAvatar();
+		gAgentAvatarp->updateVisualParams();
+	}
+}
+
+F32 LLScrollingPanelParamBase::weightToPercent( F32 weight )
+{
+	LLViewerVisualParam* param = mParam;
+	return (weight - param->getMinWeight()) /  (param->getMaxWeight() - param->getMinWeight()) * 100.f;
+}
+
+F32 LLScrollingPanelParamBase::percentToWeight( F32 percent )
+{
+	LLViewerVisualParam* param = mParam;
+	return percent / 100.f * (param->getMaxWeight() - param->getMinWeight()) + param->getMinWeight();
+}
diff --git a/indra/newview/llscrollingpanelparambase.h b/indra/newview/llscrollingpanelparambase.h
new file mode 100644
index 0000000000000000000000000000000000000000..95388262514bc455c4e6f0170157d9c9c366fd37
--- /dev/null
+++ b/indra/newview/llscrollingpanelparambase.h
@@ -0,0 +1,62 @@
+/** 
+ * @file llscrollingpanelparam.h
+ * @brief the scrolling panel containing a list of visual param 
+ *  	  panels
+ *
+ * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_SCROLLINGPANELPARAMBASE_H
+#define LL_SCROLLINGPANELPARAMBASE_H
+
+#include "llpanel.h"
+#include "llscrollingpanellist.h"
+
+class LLViewerJointMesh;
+class LLViewerVisualParam;
+class LLWearable;
+class LLVisualParamHint;
+class LLViewerVisualParam;
+class LLJoint;
+
+class LLScrollingPanelParamBase : public LLScrollingPanel
+{
+public:
+	LLScrollingPanelParamBase( const LLPanel::Params& panel_params,
+				   LLViewerJointMesh* mesh, LLViewerVisualParam* param, BOOL allow_modify, LLWearable* wearable, LLJoint* jointp, BOOL use_hints = FALSE );
+	virtual ~LLScrollingPanelParamBase();
+
+	virtual void		updatePanel(BOOL allow_modify);
+
+	static void			onSliderMoved(LLUICtrl* ctrl, void* userdata);
+
+	F32					weightToPercent( F32 weight );
+	F32					percentToWeight( F32 percent );
+
+public:
+	LLViewerVisualParam* mParam;
+protected:
+	BOOL mAllowModify;
+	LLWearable *mWearable;
+}; 
+
+#endif
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 96468c0b21cd6c02541355bdd49e31c8e43f57d7..f05892d9b0943524997e3577b93600b9aa32c749 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -517,17 +517,15 @@ BOOL LLSelectMgr::removeObjectFromSelections(const LLUUID &id)
 {
 	BOOL object_found = FALSE;
 	LLTool *tool = NULL;
-	if (!gNoRender)
-	{
-		tool = LLToolMgr::getInstance()->getCurrentTool();
 
-		// It's possible that the tool is editing an object that is not selected
-		LLViewerObject* tool_editing_object = tool->getEditingObject();
-		if( tool_editing_object && tool_editing_object->mID == id)
-		{
-			tool->stopEditing();
-			object_found = TRUE;
-		}
+	tool = LLToolMgr::getInstance()->getCurrentTool();
+
+	// It's possible that the tool is editing an object that is not selected
+	LLViewerObject* tool_editing_object = tool->getEditingObject();
+	if( tool_editing_object && tool_editing_object->mID == id)
+	{
+		tool->stopEditing();
+		object_found = TRUE;
 	}
 
 	// Iterate through selected objects list and kill the object
diff --git a/indra/newview/llshareavatarhandler.cpp b/indra/newview/llshareavatarhandler.cpp
index 34194970b82c9dee53170fb58cd3ce2f72f96bdf..6b4f1d3dc67859466c6f20cf82d1ad3c23bb293b 100644
--- a/indra/newview/llshareavatarhandler.cpp
+++ b/indra/newview/llshareavatarhandler.cpp
@@ -27,6 +27,8 @@
 #include "llviewerprecompiledheaders.h"
 #include "llcommandhandler.h"
 #include "llavataractions.h"
+#include "llnotificationsutil.h"
+#include "llui.h"
 
 class LLShareWithAvatarHandler : public LLCommandHandler
 {
@@ -38,6 +40,12 @@ class LLShareWithAvatarHandler : public LLCommandHandler
 	
 	bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
 	{
+		if (!LLUI::sSettingGroups["config"]->getBOOL("EnableAvatarShare"))
+		{
+			LLNotificationsUtil::add("NoAvatarShare", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
+			return true;
+		}
+
 		//Make sure we have some parameters
 		if (params.size() == 0)
 		{
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index 363fe5f12b80f6a6b1453130458c183ae588ce7b..16729f045a0d4e91d1182b5a9b017b0af30e7f34 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -193,18 +193,28 @@ void LLSidepanelAppearance::updateToVisibility(const LLSD &new_visibility)
 {
 	if (new_visibility["visible"].asBoolean())
 	{
-		bool is_outfit_edit_visible = mOutfitEdit && mOutfitEdit->getVisible();
-		bool is_wearable_edit_visible = mEditWearable && mEditWearable->getVisible();
+		const BOOL is_outfit_edit_visible = mOutfitEdit && mOutfitEdit->getVisible();
+		const BOOL is_wearable_edit_visible = mEditWearable && mEditWearable->getVisible();
 
 		if (is_outfit_edit_visible || is_wearable_edit_visible)
 		{
-			if (!gAgentCamera.cameraCustomizeAvatar() && gSavedSettings.getBOOL("AppearanceCameraMovement"))
+			const LLWearable *wearable_ptr = mEditWearable->getWearable();
+			if (!wearable_ptr)
+			{
+				llwarns << "Visibility change to invalid wearable" << llendl;
+				return;
+			}
+			// Disable camera switch is currently just for WT_PHYSICS type since we don't want to freeze the avatar
+			// when editing its physics.
+			const BOOL disable_camera_motion = LLWearableType::getDisableCameraSwitch(wearable_ptr->getType());
+			if (!gAgentCamera.cameraCustomizeAvatar() && 
+				!disable_camera_motion &&
+				gSavedSettings.getBOOL("AppearanceCameraMovement"))
 			{
 				gAgentCamera.changeCameraToCustomizeAvatar();
 			}
 			if (is_wearable_edit_visible)
 			{
-				LLWearable *wearable_ptr = mEditWearable->getWearable();
 				if (gAgentWearables.getWearableIndex(wearable_ptr) == LLAgentWearables::MAX_CLOTHING_PER_TYPE)
 				{
 					// we're no longer wearing the wearable we were last editing, switch back to outfit editor
@@ -289,7 +299,7 @@ void LLSidepanelAppearance::showOutfitsInventoryPanel()
 {
 	toggleWearableEditPanel(FALSE);
 	toggleOutfitEditPanel(FALSE);
-	togglMyOutfitsPanel(TRUE);
+	toggleMyOutfitsPanel(TRUE);
 }
 
 void LLSidepanelAppearance::showOutfitEditPanel()
@@ -305,19 +315,28 @@ void LLSidepanelAppearance::showOutfitEditPanel()
 		mOutfitEdit->resetAccordionState();
 	}
 
-	togglMyOutfitsPanel(FALSE);
+	// If we're exiting the edit wearable view, and the camera was not focused on the avatar
+	// (e.g. such as if we were editing a physics param), then skip the outfits edit mode since
+	// otherwise this would trigger the camera focus mode.
+	if (mEditWearable != NULL && mEditWearable->getVisible() && !gAgentCamera.cameraCustomizeAvatar())
+	{
+		showOutfitsInventoryPanel();
+		return;
+	}
+
+	toggleMyOutfitsPanel(FALSE);
 	toggleWearableEditPanel(FALSE, NULL, TRUE); // don't switch out of edit appearance mode
 	toggleOutfitEditPanel(TRUE);
 }
 
-void LLSidepanelAppearance::showWearableEditPanel(LLWearable *wearable /* = NULL*/)
+void LLSidepanelAppearance::showWearableEditPanel(LLWearable *wearable /* = NULL*/, BOOL disable_camera_switch)
 {
-	togglMyOutfitsPanel(FALSE);
+	toggleMyOutfitsPanel(FALSE);
 	toggleOutfitEditPanel(FALSE, TRUE); // don't switch out of edit appearance mode
-	toggleWearableEditPanel(TRUE, wearable);
+	toggleWearableEditPanel(TRUE, wearable, disable_camera_switch);
 }
 
-void LLSidepanelAppearance::togglMyOutfitsPanel(BOOL visible)
+void LLSidepanelAppearance::toggleMyOutfitsPanel(BOOL visible)
 {
 	if (!mPanelOutfitsInventory || mPanelOutfitsInventory->getVisible() == visible)
 	{
@@ -390,7 +409,7 @@ void LLSidepanelAppearance::toggleWearableEditPanel(BOOL visible, LLWearable *we
 		{
 			gAgentCamera.changeCameraToCustomizeAvatar();
 		}
-		mEditWearable->setWearable(wearable);
+		mEditWearable->setWearable(wearable, disable_camera_switch);
 		mEditWearable->onOpen(LLSD()); // currently no-op, just for consistency
 	}
 	else
@@ -434,14 +453,14 @@ void LLSidepanelAppearance::refreshCurrentOutfitName(const std::string& name)
 }
 
 //static
-void LLSidepanelAppearance::editWearable(LLWearable *wearable, LLView *data)
+void LLSidepanelAppearance::editWearable(LLWearable *wearable, LLView *data, BOOL disable_camera_switch)
 {
 	LLSideTray::getInstance()->showPanel("sidepanel_appearance");
 
 	LLSidepanelAppearance *panel = dynamic_cast<LLSidepanelAppearance*>(data);
 	if (panel)
 	{
-		panel->showWearableEditPanel(wearable);
+		panel->showWearableEditPanel(wearable, disable_camera_switch);
 	}
 }
 
diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h
index 2a83dfbc9d1eb5a4bd3a4cb2d66cc7a43b8abb36..6dd35202665663707e7911ff330d717273b6ddb0 100644
--- a/indra/newview/llsidepanelappearance.h
+++ b/indra/newview/llsidepanelappearance.h
@@ -51,7 +51,7 @@ class LLSidepanelAppearance : public LLPanel
 
 	void refreshCurrentOutfitName(const std::string& name = "");
 
-	static void editWearable(LLWearable *wearable, LLView *data);
+	static void editWearable(LLWearable *wearable, LLView *data, BOOL disable_camera_switch = FALSE);
 
 	void fetchInventory();
 	void inventoryFetched();
@@ -59,7 +59,7 @@ class LLSidepanelAppearance : public LLPanel
 
 	void showOutfitsInventoryPanel();
 	void showOutfitEditPanel();
-	void showWearableEditPanel(LLWearable *wearable = NULL);
+	void showWearableEditPanel(LLWearable *wearable = NULL, BOOL disable_camera_switch = FALSE);
 	void setWearablesLoading(bool val);
 	void showDefaultSubpart();
 	void updateScrollingPanelList();
@@ -72,7 +72,7 @@ class LLSidepanelAppearance : public LLPanel
 	void onOpenOutfitButtonClicked();
 	void onEditAppearanceButtonClicked();
 
-	void togglMyOutfitsPanel(BOOL visible);
+	void toggleMyOutfitsPanel(BOOL visible);
 	void toggleOutfitEditPanel(BOOL visible, BOOL disable_camera_switch = FALSE);
 	void toggleWearableEditPanel(BOOL visible, LLWearable* wearable = NULL, BOOL disable_camera_switch = FALSE);
 
diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp
index eb537c7d7b987a8b6e5efa8ad9eab04adf2d0a0b..e4c2293938a2727df169ac997a2e9121dcd22c8f 100644
--- a/indra/newview/llsidetray.cpp
+++ b/indra/newview/llsidetray.cpp
@@ -53,6 +53,8 @@
 
 #include "llsidepanelappearance.h"
 
+#include "llsidetraylistener.h"
+
 //#include "llscrollcontainer.h"
 
 using namespace std;
@@ -71,6 +73,8 @@ static const std::string TAB_PANEL_CAPTION_TITLE_BOX = "sidetray_tab_title";
 
 LLSideTray* LLSideTray::sInstance = 0;
 
+static LLSideTrayListener sSideTrayListener(LLSideTray::getInstance);
+
 // static
 LLSideTray* LLSideTray::getInstance()
 {
@@ -96,6 +100,7 @@ bool	LLSideTray::instanceCreated	()
 
 class LLSideTrayTab: public LLPanel
 {
+	LOG_CLASS(LLSideTrayTab);
 	friend class LLUICtrlFactory;
 	friend class LLSideTray;
 public:
@@ -122,6 +127,8 @@ class LLSideTrayTab: public LLPanel
 	void			undock(LLFloater* floater_tab);
 
 	LLSideTray*		getSideTray();
+
+	void			onFloaterClose(LLSD::Boolean app_quitting);
 	
 public:
 	virtual ~LLSideTrayTab();
@@ -140,6 +147,8 @@ class LLSideTrayTab: public LLPanel
 	void			onOpen		(const LLSD& key);
 	
 	void			toggleTabDocked();
+	void			setDocked(bool dock);
+	bool			isDocked() const;
 
 	BOOL			handleScrollWheel(S32 x, S32 y, S32 clicks);
 
@@ -151,6 +160,7 @@ class LLSideTrayTab: public LLPanel
 	std::string	mDescription;
 	
 	LLView*	mMainPanel;
+	boost::signals2::connection mFloaterCloseConn;
 };
 
 LLSideTrayTab::LLSideTrayTab(const Params& p)
@@ -271,6 +281,35 @@ void LLSideTrayTab::toggleTabDocked()
 	LLFloaterReg::toggleInstance("side_bar_tab", tab_name);
 }
 
+// Same as toggleTabDocked() apart from making sure that we do exactly what we want.
+void LLSideTrayTab::setDocked(bool dock)
+{
+	if (isDocked() == dock)
+	{
+		llwarns << "Tab " << getName() << " is already " << (dock ? "docked" : "undocked") << llendl;
+		return;
+	}
+
+	toggleTabDocked();
+}
+
+bool LLSideTrayTab::isDocked() const
+{
+	return dynamic_cast<LLSideTray*>(getParent()) != NULL;
+}
+
+void LLSideTrayTab::onFloaterClose(LLSD::Boolean app_quitting)
+{
+	// If user presses Ctrl-Shift-W, handle that gracefully by docking all
+	// undocked tabs before their floaters get destroyed (STORM-1016).
+
+	// Don't dock on quit for the current dock state to be correctly saved.
+	if (app_quitting) return;
+
+	lldebugs << "Forcibly docking tab " << getName() << llendl;
+	setDocked(true);
+}
+
 BOOL LLSideTrayTab::handleScrollWheel(S32 x, S32 y, S32 clicks)
 {
 	// Let children handle the event
@@ -294,6 +333,7 @@ void LLSideTrayTab::dock(LLFloater* floater_tab)
 		return;
 	}
 
+	mFloaterCloseConn.disconnect();
 	setRect(side_tray->getLocalRect());
 	reshape(getRect().getWidth(), getRect().getHeight());
 
@@ -342,6 +382,7 @@ void LLSideTrayTab::undock(LLFloater* floater_tab)
 	}
 
 	floater_tab->addChild(this);
+	mFloaterCloseConn = floater_tab->setCloseCallback(boost::bind(&LLSideTrayTab::onFloaterClose, this, _2));
 	floater_tab->setTitle(mTabTitle);
 	floater_tab->setName(getName());
 
@@ -417,6 +458,11 @@ LLSideTrayTab*  LLSideTrayTab::createInstance	()
 	return tab;
 }
 
+// Now that we know the definition of LLSideTrayTab, we can implement
+// tab_cast.
+template <>
+LLPanel* tab_cast<LLPanel*>(LLSideTrayTab* tab) { return tab; }
+
 //////////////////////////////////////////////////////////////////////////////
 // LLSideTrayButton
 // Side Tray tab button with "tear off" handling.
@@ -530,6 +576,8 @@ LLSideTray::LLSideTray(const Params& params)
 	// register handler function to process data from the xml. 
 	// panel_name should be specified via "parameter" attribute.
 	commit.add("SideTray.ShowPanel", boost::bind(&LLSideTray::showPanel, this, _2, LLUUID::null));
+	commit.add("SideTray.Toggle", boost::bind(&LLSideTray::onToggleCollapse, this));
+	commit.add("SideTray.Collapse", boost::bind(&LLSideTray::collapseSideBar, this));
 	LLTransientFloaterMgr::getInstance()->addControlView(this);
 	LLView* side_bar_tabs  = gViewerWindow->getRootView()->getChildView("side_bar_tabs");
 	if (side_bar_tabs != NULL)
@@ -629,8 +677,16 @@ LLPanel* LLSideTray::openChildPanel(LLSideTrayTab* tab, const std::string& panel
 
 	std::string tab_name = tab->getName();
 
+	bool tab_attached = isTabAttached(tab_name);
+
+	if (tab_attached && LLUI::sSettingGroups["config"]->getBOOL("OpenSidePanelsInFloaters"))
+	{
+		tab->toggleTabDocked();
+		tab_attached = false;
+	}
+
 	// Select tab and expand Side Tray only when a tab is attached.
-	if (isTabAttached(tab_name))
+	if (tab_attached)
 	{
 		selectTabByName(tab_name);
 		if (mCollapsed)
@@ -641,14 +697,7 @@ LLPanel* LLSideTray::openChildPanel(LLSideTrayTab* tab, const std::string& panel
 		LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab_name);
 		if (!floater_tab) return NULL;
 
-		// Restore the floater if it was minimized.
-		if (floater_tab->isMinimized())
-		{
-			floater_tab->setMinimized(FALSE);
-		}
-
-		// Send the floater to the front.
-		floater_tab->setFrontmost();
+		floater_tab->openFloater(tab_name);
 	}
 
 	LLSideTrayPanelContainer* container = dynamic_cast<LLSideTrayPanelContainer*>(view->getParent());
@@ -979,16 +1028,7 @@ void LLSideTray::reflectCollapseChange()
 {
 	updateSidetrayVisibility();
 
-	if(mCollapsed)
-	{
-		gFloaterView->setSnapOffsetRight(0);
-		setFocus(FALSE);
-	}
-	else
-	{
-		gFloaterView->setSnapOffsetRight(getRect().getWidth());
-		setFocus(TRUE);
-	}
+	setFocus(!mCollapsed);
 
 	gFloaterView->refresh();
 }
@@ -1152,6 +1192,38 @@ void LLSideTray::reshape(S32 width, S32 height, BOOL called_from_parent)
 	arrange();
 }
 
+// This is just LLView::findChildView specialized to restrict the search to LLPanels.
+// Optimization for EXT-4068 to avoid searching down to the individual item level
+// when inventories are large.
+LLPanel *findChildPanel(LLPanel *panel, const std::string& name, bool recurse)
+{
+	for (LLView::child_list_const_iter_t child_it = panel->beginChild();
+		 child_it != panel->endChild(); ++child_it)
+	{
+		LLPanel *child_panel = dynamic_cast<LLPanel*>(*child_it);
+		if (!child_panel)
+			continue;
+		if (child_panel->getName() == name)
+			return child_panel;
+	}
+	if (recurse)
+	{
+		for (LLView::child_list_const_iter_t child_it = panel->beginChild();
+			 child_it != panel->endChild(); ++child_it)
+		{
+			LLPanel *child_panel = dynamic_cast<LLPanel*>(*child_it);
+			if (!child_panel)
+				continue;
+			LLPanel *found_panel = findChildPanel(child_panel,name,recurse);
+			if (found_panel)
+			{
+				return found_panel;
+			}
+		}
+	}
+	return NULL;
+}
+
 /**
  * Activate tab with "panel_name" panel
  * if no such tab - return false, otherwise true.
@@ -1161,21 +1233,68 @@ void LLSideTray::reshape(S32 width, S32 height, BOOL called_from_parent)
  */
 LLPanel*	LLSideTray::showPanel		(const std::string& panel_name, const LLSD& params)
 {
+	LLPanel* new_panel = NULL;
+
 	// Look up the tab in the list of detached tabs.
 	child_vector_const_iter_t child_it;
 	for ( child_it = mDetachedTabs.begin(); child_it != mDetachedTabs.end(); ++child_it)
 	{
-		LLPanel* panel = openChildPanel(*child_it, panel_name, params);
-		if (panel) return panel;
-			}
+		new_panel = openChildPanel(*child_it, panel_name, params);
+		if (new_panel) break;
+	}
 
 	// Look up the tab in the list of attached tabs.
 	for ( child_it = mTabs.begin(); child_it != mTabs.end(); ++child_it)
+	{
+		new_panel = openChildPanel(*child_it, panel_name, params);
+		if (new_panel) break;
+	}
+
+	return new_panel;
+}
+
+bool LLSideTray::hidePanel(const std::string& panel_name)
+{
+	bool panelHidden = false;
+	
+	LLPanel* panelp = getPanel(panel_name);
+
+	if (panelp)
+	{
+		LLView* parentp = panelp->getParent();
+		
+		// Collapse the side bar if the panel or the panel's parent is an attached tab
+		if (isTabAttached(panel_name) || (parentp && isTabAttached(parentp->getName())))
+		{
+			collapseSideBar();
+			panelHidden = true;
+		}
+		else
+		{
+			panelHidden = LLFloaterReg::hideInstance("side_bar_tab", panel_name);
+			
+			if (!panelHidden)
 			{
-		LLPanel* panel = openChildPanel(*child_it, panel_name, params);
-		if (panel) return panel;
+				// Look up the panel in the list of detached tabs.
+				for (child_vector_const_iter_t child_it = mDetachedTabs.begin(); child_it != mDetachedTabs.end(); ++child_it)
+				{
+					LLPanel *detached_panel = dynamic_cast<LLPanel*>(*child_it);
+					
+					if (detached_panel)
+					{
+						// Hide this detached panel if it is a parent of our panel
+						if (findChildPanel(detached_panel, panel_name, true) != NULL)
+						{
+							panelHidden = LLFloaterReg::hideInstance("side_bar_tab", detached_panel->getName());
+							break;
+						}
+					}
+				}
+			}
+		}
 	}
-	return NULL;
+	
+	return panelHidden;
 }
 
 void LLSideTray::togglePanel(LLPanel* &sub_panel, const std::string& panel_name, const LLSD& params)
@@ -1195,38 +1314,6 @@ void LLSideTray::togglePanel(LLPanel* &sub_panel, const std::string& panel_name,
 	}
 }
 
-// This is just LLView::findChildView specialized to restrict the search to LLPanels.
-// Optimization for EXT-4068 to avoid searching down to the individual item level
-// when inventories are large.
-LLPanel *findChildPanel(LLPanel *panel, const std::string& name, bool recurse)
-{
-	for (LLView::child_list_const_iter_t child_it = panel->beginChild();
-		 child_it != panel->endChild(); ++child_it)
-	{
-		LLPanel *child_panel = dynamic_cast<LLPanel*>(*child_it);
-		if (!child_panel)
-			continue;
-		if (child_panel->getName() == name)
-			return child_panel;
-	}
-	if (recurse)
-	{
-		for (LLView::child_list_const_iter_t child_it = panel->beginChild();
-			 child_it != panel->endChild(); ++child_it)
-		{
-			LLPanel *child_panel = dynamic_cast<LLPanel*>(*child_it);
-			if (!child_panel)
-				continue;
-			LLPanel *found_panel = findChildPanel(child_panel,name,recurse);
-			if (found_panel)
-			{
-				return found_panel;
-			}
-		}
-	}
-	return NULL;
-}
-
 LLPanel* LLSideTray::getPanel(const std::string& panel_name)
 {
 	// Look up the panel in the list of detached tabs.
@@ -1267,6 +1354,42 @@ bool		LLSideTray::isPanelActive(const std::string& panel_name)
 	return (panel->getName() == panel_name);
 }
 
+void LLSideTray::setTabDocked(const std::string& tab_name, bool dock)
+{
+	LLSideTrayTab* tab = getTab(tab_name);
+	if (!tab)
+	{	// not a docked tab, look through detached tabs
+		for(child_vector_iter_t tab_it = mDetachedTabs.begin(), tab_end_it = mDetachedTabs.end();
+			tab_it != tab_end_it;
+			++tab_it)
+		{
+			if ((*tab_it)->getName() == tab_name)
+			{
+				tab = *tab_it;
+				break;
+			}
+		}
+
+	}
+
+	if (tab)
+	{
+		bool tab_attached = isTabAttached(tab_name);
+		LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab_name);
+		if (!floater_tab) return;
+
+		if (dock && !tab_attached)
+		{
+			tab->dock(floater_tab);
+		}
+		else if (!dock && tab_attached)
+		{
+			tab->undock(floater_tab);
+		}
+	}
+}
+
+
 void	LLSideTray::updateSidetrayVisibility()
 {
 	// set visibility of parent container based on collapsed state
diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h
index 184d78845f8a7fd7e88d26e00fe416394d87121f..46765bfbcca57d84f66263a66892adeaa25b9148 100644
--- a/indra/newview/llsidetray.h
+++ b/indra/newview/llsidetray.h
@@ -33,6 +33,13 @@
 class LLAccordionCtrl;
 class LLSideTrayTab;
 
+// Deal with LLSideTrayTab being opaque. Generic do-nothing cast...
+template <class T>
+T tab_cast(LLSideTrayTab* tab) { return tab; }
+// specialized for implementation in presence of LLSideTrayTab definition
+template <>
+LLPanel* tab_cast<LLPanel*>(LLSideTrayTab* tab);
+
 // added inheritance from LLDestroyClass<LLSideTray> to enable Side Tray perform necessary actions 
 // while disconnecting viewer in LLAppViewer::disconnectViewer().
 // LLDestroyClassList::instance().fireCallbacks() calls destroyClass method. See EXT-245.
@@ -97,6 +104,8 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 	 */
 	LLPanel*	showPanel		(const std::string& panel_name, const LLSD& params = LLSD());
 
+	bool		hidePanel		(const std::string& panel_name);
+
 	/**
 	 * Toggling Side Tray tab which contains "sub_panel" child of "panel_name" panel.
 	 * If "sub_panel" is not visible Side Tray is opened to display it,
@@ -112,6 +121,8 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
     LLPanel*	getActivePanel	();
     bool		isPanelActive	(const std::string& panel_name);
 
+	void		setTabDocked(const std::string& tab_name, bool dock);
+
 	/*
 	 * get the panel of given type T (don't show it or do anything else with it)
 	 */
@@ -215,8 +226,11 @@ class LLSideTray : public LLPanel, private LLDestroyClass<LLSideTray>
 		if (LLSideTray::instanceCreated())
 			LLSideTray::getInstance()->setEnabled(FALSE);
 	}
-	
+
 private:
+	// Since we provide no public way to query mTabs and mDetachedTabs, give
+	// LLSideTrayListener friend access.
+	friend class LLSideTrayListener;
 	LLPanel*						mButtonsPanel;
 	typedef std::map<std::string,LLButton*> button_map_t;
 	button_map_t					mTabButtons;
diff --git a/indra/newview/llsidetraylistener.cpp b/indra/newview/llsidetraylistener.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..cd6fa28948f54ad4cc00b8048be6fb99eee0b649
--- /dev/null
+++ b/indra/newview/llsidetraylistener.cpp
@@ -0,0 +1,179 @@
+/**
+ * @file   llsidetraylistener.cpp
+ * @author Nat Goodspeed
+ * @date   2011-02-15
+ * @brief  Implementation for llsidetraylistener.
+ * 
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+// Precompiled header
+#include "llviewerprecompiledheaders.h"
+// associated header
+#include "llsidetraylistener.h"
+// STL headers
+// std headers
+// external library headers
+// other Linden headers
+#include "llsidetray.h"
+#include "llsdutil.h"
+
+LLSideTrayListener::LLSideTrayListener(const Getter& getter):
+    LLEventAPI("LLSideTray",
+               "Operations on side tray (e.g. query state, query tabs)"),
+    mGetter(getter)
+{
+    add("getCollapsed", "Send on [\"reply\"] an [\"open\"] Boolean",
+        &LLSideTrayListener::getCollapsed, LLSDMap("reply", LLSD()));
+    add("getTabs",
+        "Send on [\"reply\"] a map of tab names and info about them",
+        &LLSideTrayListener::getTabs, LLSDMap("reply", LLSD()));
+    add("getPanels",
+        "Send on [\"reply\"] data about panels available with SideTray.ShowPanel",
+        &LLSideTrayListener::getPanels, LLSDMap("reply", LLSD()));
+}
+
+void LLSideTrayListener::getCollapsed(const LLSD& event) const
+{
+    sendReply(LLSDMap("open", ! mGetter()->getCollapsed()), event);
+}
+
+void LLSideTrayListener::getTabs(const LLSD& event) const
+{
+    LLSD reply;
+
+    LLSideTray* tray = mGetter();
+    LLSD::Integer ord(0);
+    for (LLSideTray::child_list_const_iter_t chi(tray->beginChild()), chend(tray->endChild());
+         chi != chend; ++chi, ++ord)
+    {
+        LLView* child = *chi;
+        // How much info is important? Toss in as much as seems reasonable for
+        // each tab. But to me, at least for the moment, the most important
+        // item is the tab name.
+        LLSD info;
+        // I like the idea of returning a map keyed by tab name. But as
+        // compared to an array of maps, that loses sequence information.
+        // Address that by indicating the original order in each map entry.
+        info["ord"] = ord;
+        info["visible"] = bool(child->getVisible());
+        info["enabled"] = bool(child->getEnabled());
+        info["available"] = child->isAvailable();
+        reply[child->getName()] = info;
+    }
+
+    sendReply(reply, event);
+}
+
+static LLSD getTabInfo(LLPanel* tab)
+{
+    LLSD panels;
+    for (LLPanel::tree_iterator_t ti(tab->beginTreeDFS()), tend(tab->endTreeDFS());
+         ti != tend; ++ti)
+    {
+        // *ti is actually an LLView*, which had better not be NULL
+        LLView* view(*ti);
+        if (! view)
+        {
+            LL_ERRS("LLSideTrayListener") << "LLSideTrayTab '" << tab->getName()
+                                          << "' has a NULL child LLView*" << LL_ENDL;
+        }
+
+        // The logic we use to decide what "panel" names to return is heavily
+        // based on LLSideTray::showPanel(): the function that actually
+        // implements the "SideTray.ShowPanel" operation. showPanel(), in
+        // turn, depends on LLSideTray::openChildPanel(): when
+        // openChildPanel() returns non-NULL, showPanel() stops searching
+        // attached and detached LLSideTrayTab tabs.
+
+        // For each LLSideTrayTab, openChildPanel() first calls
+        // findChildView(panel_name, true). In other words, panel_name need
+        // not be a direct LLSideTrayTab child, it's sought recursively.
+        // That's why we use (begin|end)TreeDFS() in this loop.
+
+        // But this tree_iterator_t loop will actually traverse every widget
+        // in every panel. Returning all those names will not help our caller:
+        // passing most such names to openChildPanel() would not do what we
+        // want. Even though the code suggests that passing ANY valid
+        // side-panel widget name to openChildPanel() will open the tab
+        // containing that widget, results could get confusing since followup
+        // (onOpen()) logic wouldn't be invoked, and showPanel() wouldn't stop
+        // searching because openChildPanel() would return NULL.
+
+        // We must filter these LLView items, using logic that (sigh!) mirrors
+        // openChildPanel()'s own.
+
+        // openChildPanel() returns a non-NULL LLPanel* when either:
+        // - the LLView is a direct child of an LLSideTrayPanelContainer
+        // - the LLView is itself an LLPanel.
+        // But as LLSideTrayPanelContainer can directly contain LLView items
+        // that are NOT themselves LLPanels (e.g. "sidebar_me" contains an
+        // LLButton called "Jump Right Arrow"), we'd better focus only on
+        // LLSideTrayPanelContainer children that are themselves LLPanel
+        // items. Which means that the second test completely subsumes the
+        // first.
+        LLPanel* panel(dynamic_cast<LLPanel*>(view));
+        if (panel)
+        {
+            // Maybe it's overkill to construct an LLSD::Map for each panel, but
+            // the possibility remains that we might want to deliver more info
+            // about each panel than just its name.
+            panels.append(LLSDMap("name", panel->getName()));
+        }
+    }
+
+    return LLSDMap("panels", panels);
+}
+
+void LLSideTrayListener::getPanels(const LLSD& event) const
+{
+    LLSD reply;
+
+    LLSideTray* tray = mGetter();
+    // Iterate through the attached tabs.
+    LLSD::Integer ord(0);
+    for (LLSideTray::child_vector_t::const_iterator
+             ati(tray->mTabs.begin()), atend(tray->mTabs.end());
+         ati != atend; ++ati)
+    {
+        // We don't have access to LLSideTrayTab: the class definition is
+        // hidden in llsidetray.cpp. But as LLSideTrayTab isa LLPanel, use the
+        // LLPanel API. Unfortunately, without the LLSideTrayTab definition,
+        // the compiler doesn't even know this LLSideTrayTab* is an LLPanel*.
+        // Persuade it.
+        LLPanel* tab(tab_cast<LLPanel*>(*ati));
+        reply[tab->getName()] = getTabInfo(tab).with("attached", true).with("ord", ord);
+    }
+
+    // Now iterate over the detached tabs. These can also be opened via
+    // SideTray.ShowPanel.
+    ord = 0;
+    for (LLSideTray::child_vector_t::const_iterator
+             dti(tray->mDetachedTabs.begin()), dtend(tray->mDetachedTabs.end());
+         dti != dtend; ++dti)
+    {
+        LLPanel* tab(tab_cast<LLPanel*>(*dti));
+        reply[tab->getName()] = getTabInfo(tab).with("attached", false).with("ord", ord);
+    }
+
+    sendReply(reply, event);
+}
diff --git a/indra/newview/llsidetraylistener.h b/indra/newview/llsidetraylistener.h
new file mode 100644
index 0000000000000000000000000000000000000000..51e2137762ddcf479712463d721049a6d8f81637
--- /dev/null
+++ b/indra/newview/llsidetraylistener.h
@@ -0,0 +1,53 @@
+/**
+ * @file   llsidetraylistener.h
+ * @author Nat Goodspeed
+ * @date   2011-02-15
+ * @brief  
+ * 
+ * $LicenseInfo:firstyear=2011&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * This library 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#if ! defined(LL_LLSIDETRAYLISTENER_H)
+#define LL_LLSIDETRAYLISTENER_H
+
+#include "lleventapi.h"
+#include <boost/function.hpp>
+
+class LLSideTray;
+class LLSD;
+
+class LLSideTrayListener: public LLEventAPI
+{
+    typedef boost::function<LLSideTray*()> Getter;
+
+public:
+    LLSideTrayListener(const Getter& getter);
+
+private:
+    void getCollapsed(const LLSD& event) const;
+    void getTabs(const LLSD& event) const;
+    void getPanels(const LLSD& event) const;
+
+    Getter mGetter;
+};
+
+#endif /* ! defined(LL_LLSIDETRAYLISTENER_H) */
diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp
index c76ecae4a2b513d613ae616999d6f489269a9ddc..d52e0a6c8683c2214a138974eb73ed6c53b3e4fb 100644
--- a/indra/newview/llspeakbutton.cpp
+++ b/indra/newview/llspeakbutton.cpp
@@ -38,6 +38,7 @@
 #include "llspeakbutton.h"
 
 #include "llbottomtray.h"
+#include "llfirstuse.h"
 
 static LLDefaultChildRegistry::Register<LLSpeakButton> t1("talk_button");
 
@@ -176,6 +177,7 @@ void LLSpeakButton::onMouseDown_SpeakBtn()
 {
 	bool down = true;
 	LLVoiceClient::getInstance()->inputUserControlState(down); // this method knows/care about whether this translates into a toggle-to-talk or down-to-talk
+	LLFirstUse::speak(false);
 }
 void LLSpeakButton::onMouseUp_SpeakBtn()
 {
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
index 0eac7d5e2a7464127611cdf6225ba387b32fb14a..ca908ef8222df6587c8cec7d38ff68ff638e9ee6 100644
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -354,11 +354,8 @@ bool idle_startup()
 
 	LLStringUtil::setLocale (LLTrans::getString(system));
 
-	if (!gNoRender)
-	{
-		//note: Removing this line will cause incorrect button size in the login screen. -- bao.
-		gTextureList.updateImages(0.01f) ;
-	}
+	//note: Removing this line will cause incorrect button size in the login screen. -- bao.
+	gTextureList.updateImages(0.01f) ;
 
 	if ( STATE_FIRST == LLStartUp::getStartupState() )
 	{
@@ -673,6 +670,7 @@ bool idle_startup()
 		{
 			gUserCredential = gLoginHandler.initializeLoginInfo();
 		}
+		// Previous initializeLoginInfo may have generated user credentials.  Re-check them.
 		if (gUserCredential.isNull())
 		{
 			show_connect_box = TRUE;
@@ -722,6 +720,8 @@ bool idle_startup()
 
 		timeout_count = 0;
 
+		initialize_edit_menu();
+
 		if (show_connect_box)
 		{
 			// Load all the name information out of the login view
@@ -731,15 +731,13 @@ bool idle_startup()
 			{                                                                                                      
 				gUserCredential = gLoginHandler.initializeLoginInfo();                 
 			}     
-			if (gNoRender)
+			if (gHeadlessClient)
 			{
-				LL_ERRS("AppInit") << "Need to autologin or use command line with norender!" << LL_ENDL;
+				LL_WARNS("AppInit") << "Waiting at connection box in headless client.  Did you mean to add autologin params?" << LL_ENDL;
 			}
 			// Make sure the process dialog doesn't hide things
 			gViewerWindow->setShowProgress(FALSE);
 
-			initialize_edit_menu();
-
 			// Show the login dialog
 			login_show();
 			// connect dialog is already shown, so fill in the names
@@ -749,8 +747,6 @@ bool idle_startup()
 			}     
 			LLPanelLogin::giveFocus();
 
-			gSavedSettings.setBOOL("FirstRunThisInstall", FALSE);
-
 			LLStartUp::setStartupState( STATE_LOGIN_WAIT );		// Wait for user input
 		}
 		else
@@ -775,6 +771,7 @@ bool idle_startup()
 		gViewerWindow->setNormalControlsVisible( FALSE );	
 		gLoginMenuBarView->setVisible( TRUE );
 		gLoginMenuBarView->setEnabled( TRUE );
+		show_debug_menus();
 
 		// Hide the splash screen
 		LLSplashScreen::hide();
@@ -941,10 +938,7 @@ bool idle_startup()
 
 		gViewerWindow->getWindow()->setCursor(UI_CURSOR_WAIT);
 
-		if (!gNoRender)
-		{
-			init_start_screen(agent_location_id);
-		}
+		init_start_screen(agent_location_id);
 
 		// Display the startup progress bar.
 		gViewerWindow->setShowProgress(TRUE);
@@ -975,11 +969,6 @@ bool idle_startup()
 		// Setting initial values...
 		LLLoginInstance* login = LLLoginInstance::getInstance();
 		login->setNotificationsInterface(LLNotifications::getInstance());
-		if(gNoRender)
-		{
-			// HACK, skip optional updates if you're running drones
-			login->setSkipOptionalUpdate(true);
-		}
 
 		login->setSerialNumber(LLAppViewer::instance()->getSerialNumber());
 		login->setLastExecEvent(gLastExecEvent);
@@ -1265,14 +1254,11 @@ bool idle_startup()
 		gLoginMenuBarView->setVisible( FALSE );
 		gLoginMenuBarView->setEnabled( FALSE );
 
-		if (!gNoRender)
-		{
-			// direct logging to the debug console's line buffer
-			LLError::logToFixedBuffer(gDebugView->mDebugConsolep);
-			
-			// set initial visibility of debug console
-			gDebugView->mDebugConsolep->setVisible(gSavedSettings.getBOOL("ShowDebugConsole"));
-		}
+		// direct logging to the debug console's line buffer
+		LLError::logToFixedBuffer(gDebugView->mDebugConsolep);
+		
+		// set initial visibility of debug console
+		gDebugView->mDebugConsolep->setVisible(gSavedSettings.getBOOL("ShowDebugConsole"));
 
 		//
 		// Set message handlers
@@ -1300,7 +1286,7 @@ bool idle_startup()
 
 		//gCacheName is required for nearby chat history loading
 		//so I just moved nearby history loading a few states further
-		if (!gNoRender && gSavedPerAccountSettings.getBOOL("LogShowHistory"))
+		if (gSavedPerAccountSettings.getBOOL("LogShowHistory"))
 		{
 			LLNearbyChat* nearby_chat = LLNearbyChat::getInstance();
 			if (nearby_chat) nearby_chat->loadHistory();
@@ -1352,18 +1338,15 @@ bool idle_startup()
 		gAgentCamera.resetCamera();
 
 		// Initialize global class data needed for surfaces (i.e. textures)
-		if (!gNoRender)
-		{
-			LL_DEBUGS("AppInit") << "Initializing sky..." << LL_ENDL;
-			// Initialize all of the viewer object classes for the first time (doing things like texture fetches.
-			LLGLState::checkStates();
-			LLGLState::checkTextureChannels();
+		LL_DEBUGS("AppInit") << "Initializing sky..." << LL_ENDL;
+		// Initialize all of the viewer object classes for the first time (doing things like texture fetches.
+		LLGLState::checkStates();
+		LLGLState::checkTextureChannels();
 
-			gSky.init(initial_sun_direction);
+		gSky.init(initial_sun_direction);
 
-			LLGLState::checkStates();
-			LLGLState::checkTextureChannels();
-		}
+		LLGLState::checkStates();
+		LLGLState::checkTextureChannels();
 
 		LL_DEBUGS("AppInit") << "Decoding images..." << LL_ENDL;
 		// For all images pre-loaded into viewer cache, decode them.
@@ -1703,9 +1686,6 @@ bool idle_startup()
 			// Set the show start location to true, now that the user has logged
 			// on with this install.
 			gSavedSettings.setBOOL("ShowStartLocation", TRUE);
-			
-			LLSideTray::getInstance()->showPanel("panel_home", LLSD());
-
 		}
 
 		// We're successfully logged in.
@@ -1726,46 +1706,43 @@ bool idle_startup()
 			LLUIColorTable::instance().saveUserSettings();
 		};
 
-		if (!gNoRender)
-		{
-			// JC: Initializing audio requests many sounds for download.
-			init_audio();
-
-			// JC: Initialize "active" gestures.  This may also trigger
-			// many gesture downloads, if this is the user's first
-			// time on this machine or -purge has been run.
-			LLSD gesture_options 
-				= LLLoginInstance::getInstance()->getResponse("gestures");
-			if (gesture_options.isDefined())
+		// JC: Initializing audio requests many sounds for download.
+		init_audio();
+
+		// JC: Initialize "active" gestures.  This may also trigger
+		// many gesture downloads, if this is the user's first
+		// time on this machine or -purge has been run.
+		LLSD gesture_options 
+			= LLLoginInstance::getInstance()->getResponse("gestures");
+		if (gesture_options.isDefined())
+		{
+			LL_DEBUGS("AppInit") << "Gesture Manager loading " << gesture_options.size()
+				<< LL_ENDL;
+			uuid_vec_t item_ids;
+			for(LLSD::array_const_iterator resp_it = gesture_options.beginArray(),
+				end = gesture_options.endArray(); resp_it != end; ++resp_it)
 			{
-				LL_DEBUGS("AppInit") << "Gesture Manager loading " << gesture_options.size()
-					<< LL_ENDL;
-				uuid_vec_t item_ids;
-				for(LLSD::array_const_iterator resp_it = gesture_options.beginArray(),
-					end = gesture_options.endArray(); resp_it != end; ++resp_it)
-				{
-					// If the id is not specifed in the LLSD,
-					// the LLSD operator[]() will return a null LLUUID. 
-					LLUUID item_id = (*resp_it)["item_id"];
-					LLUUID asset_id = (*resp_it)["asset_id"];
+				// If the id is not specifed in the LLSD,
+				// the LLSD operator[]() will return a null LLUUID. 
+				LLUUID item_id = (*resp_it)["item_id"];
+				LLUUID asset_id = (*resp_it)["asset_id"];
 
-					if (item_id.notNull() && asset_id.notNull())
-					{
-						// Could schedule and delay these for later.
-						const BOOL no_inform_server = FALSE;
-						const BOOL no_deactivate_similar = FALSE;
-						LLGestureMgr::instance().activateGestureWithAsset(item_id, asset_id,
-											 no_inform_server,
-											 no_deactivate_similar);
-						// We need to fetch the inventory items for these gestures
-						// so we have the names to populate the UI.
-						item_ids.push_back(item_id);
-					}
+				if (item_id.notNull() && asset_id.notNull())
+				{
+					// Could schedule and delay these for later.
+					const BOOL no_inform_server = FALSE;
+					const BOOL no_deactivate_similar = FALSE;
+					LLGestureMgr::instance().activateGestureWithAsset(item_id, asset_id,
+										 no_inform_server,
+										 no_deactivate_similar);
+					// We need to fetch the inventory items for these gestures
+					// so we have the names to populate the UI.
+					item_ids.push_back(item_id);
 				}
-				// no need to add gesture to inventory observer, it's already made in constructor 
-				LLGestureMgr::instance().setFetchIDs(item_ids);
-				LLGestureMgr::instance().startFetch();
 			}
+			// no need to add gesture to inventory observer, it's already made in constructor 
+			LLGestureMgr::instance().setFetchIDs(item_ids);
+			LLGestureMgr::instance().startFetch();
 		}
 		gDisplaySwapBuffers = TRUE;
 
@@ -1786,13 +1763,6 @@ bool idle_startup()
 		// JC - 7/20/2002
 		gViewerWindow->sendShapeToSim();
 
-		
-		// Ignore stipend information for now.  Money history is on the web site.
-		// if needed, show the L$ history window
-		//if (stipend_since_login && !gNoRender)
-		//{
-		//}
-
 		// The reason we show the alert is because we want to
 		// reduce confusion for when you log in and your provided
 		// location is not your expected location. So, if this is
@@ -2721,7 +2691,7 @@ bool LLStartUp::dispatchURL()
 			|| (dx*dx > SLOP*SLOP)
 			|| (dy*dy > SLOP*SLOP) )
 		{
-			LLURLDispatcher::dispatch(getStartSLURL().getSLURLString(), 
+			LLURLDispatcher::dispatch(getStartSLURL().getSLURLString(), "clicked",
 						  NULL, false);
 		}
 		return true;
@@ -3218,7 +3188,7 @@ bool process_login_success_response()
 
 void transition_back_to_login_panel(const std::string& emsg)
 {
-	if (gNoRender)
+	if (gHeadlessClient && gSavedSettings.getBOOL("AutoLogin"))
 	{
 		LL_WARNS("AppInit") << "Failed to login!" << LL_ENDL;
 		LL_WARNS("AppInit") << emsg << LL_ENDL;
diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp
index 6fc8153b7783585e12d785f7605e4d5d0ff698b5..bccabe21a8521bc3d317e2f0ebf3446138a8ac9f 100644
--- a/indra/newview/llsurface.cpp
+++ b/indra/newview/llsurface.cpp
@@ -340,11 +340,6 @@ void LLSurface::connectNeighbor(LLSurface *neighborp, U32 direction)
 	S32 i;
 	LLSurfacePatch *patchp, *neighbor_patchp;
 
-	if (gNoRender)
-	{
-		return;
-	}
-
 	mNeighbors[direction] = neighborp;
 	neighborp->mNeighbors[gDirOpposite[direction]] = this;
 
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
index e7b5c13860afb3271b73ffe199a44fbc8a22b160..cb49976e5f5be5c940bb026e8ef281f0c469330a 100644
--- a/indra/newview/llsyswellwindow.cpp
+++ b/indra/newview/llsyswellwindow.cpp
@@ -310,7 +310,7 @@ void LLIMWellWindow::RowPanel::onChicletSizeChanged(LLChiclet* ctrl, const LLSD&
 	S32 new_text_left = mChiclet->getRect().mRight + CHICLET_HPAD;
 	LLRect text_rect = text->getRect(); 
 	text_rect.mLeft = new_text_left;
-	text->setRect(text_rect);
+	text->setShape(text_rect);
 }
 
 //---------------------------------------------------------------------------------
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp
index f54214b95cbc6e173270fe7d39cc544299171c9e..7fb52c1939565298476948049db4becb0659e19a 100644
--- a/indra/newview/lltexturecache.cpp
+++ b/indra/newview/lltexturecache.cpp
@@ -1419,22 +1419,21 @@ void LLTextureCache::readHeaderCache()
 					}
 				}
 			}
-			if (num_entries > sCacheMaxEntries)
+			if (num_entries - empty_entries > sCacheMaxEntries)
 			{
 				// Special case: cache size was reduced, need to remove entries
 				// Note: After we prune entries, we will call this again and create the LRU
-				U32 entries_to_purge = (num_entries-empty_entries) - sCacheMaxEntries;
+				U32 entries_to_purge = (num_entries - empty_entries) - sCacheMaxEntries;
 				llinfos << "Texture Cache Entries: " << num_entries << " Max: " << sCacheMaxEntries << " Empty: " << empty_entries << " Purging: " << entries_to_purge << llendl;
-				if (entries_to_purge > 0)
+				// We can exit the following loop with the given condition, since if we'd reach the end of the lru set we'd have:
+				// purge_list.size() = lru.size() = num_entries - empty_entries = entries_to_purge + sCacheMaxEntries >= entries_to_purge
+				// So, it's certain that iter will never reach lru.end() first.
+				std::set<lru_data_t>::iterator iter = lru.begin();
+				while (purge_list.size() < entries_to_purge)
 				{
-					for (std::set<lru_data_t>::iterator iter = lru.begin(); iter != lru.end(); ++iter)
-					{
-						purge_list.insert(iter->second);
-						if (purge_list.size() >= entries_to_purge)
-							break;
-					}
+					purge_list.insert(iter->second);
+					++iter;
 				}
-				llassert_always(purge_list.size() >= entries_to_purge);
 			}
 			else
 			{
diff --git a/indra/newview/lltexturestats.cpp b/indra/newview/lltexturestats.cpp
index dd35d5cf83309a055d5e5f392588c7f8aa8b849e..f820ae65df01713ab075b7ff682e3164b0af8f04 100644
--- a/indra/newview/lltexturestats.cpp
+++ b/indra/newview/lltexturestats.cpp
@@ -37,7 +37,7 @@ void send_texture_stats_to_sim(const LLSD &texture_stats)
 {
 	LLSD texture_stats_report;
 	// Only send stats if the agent is connected to a region.
-	if (!gAgent.getRegion() || gNoRender)
+	if (!gAgent.getRegion())
 	{
 		return;
 	}
diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
index fd5582d6f70109995b7bb434a170625239514a5e..e0b07ed408e9ab051656e9202effe2a9af3d3979 100644
--- a/indra/newview/lltoast.cpp
+++ b/indra/newview/lltoast.cpp
@@ -99,7 +99,6 @@ LLToast::Params::Params()
 
 LLToast::LLToast(const LLToast::Params& p) 
 :	LLModalDialog(LLSD(), p.is_modal),
-	mPanel(p.panel), 
 	mToastLifetime(p.lifetime_secs),
 	mToastFadingTime(p.fading_time_secs),
 	mNotificationID(p.notif_id),  
@@ -108,6 +107,7 @@ LLToast::LLToast(const LLToast::Params& p)
 	mCanBeStored(p.can_be_stored),
 	mHideBtnEnabled(p.enable_hide_btn),
 	mHideBtn(NULL),
+	mPanel(NULL),
 	mNotification(p.notification),
 	mIsHidden(false),
 	mHideBtnPressed(false),
@@ -128,9 +128,9 @@ LLToast::LLToast(const LLToast::Params& p)
 	setBackgroundOpaque(TRUE); // *TODO: obsolete
 	updateTransparency();
 
-	if(mPanel)
+	if(p.panel())
 	{
-		insertPanel(mPanel);
+		insertPanel(p.panel);
 	}
 
 	if(mHideBtnEnabled)
@@ -309,6 +309,7 @@ void LLToast::reshapeToPanel()
 
 void LLToast::insertPanel(LLPanel* panel)
 {
+	mPanel = panel;
 	mWrapperPanel->addChild(panel);	
 	reshapeToPanel();
 }
diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp
index 8b2f066d41aade66ceff604492dd62c0880652ae..0f337825e92b14c5fc63d0042329d1383e1eddeb 100644
--- a/indra/newview/lltoastalertpanel.cpp
+++ b/indra/newview/lltoastalertpanel.cpp
@@ -220,7 +220,6 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal
 	}
 
 	static LLUIColor alert_caution_text_color = LLUIColorTable::instance().getColor("AlertCautionTextColor");
-	static LLUIColor alert_text_color = LLUIColorTable::instance().getColor("AlertTextColor");
 	if (mCaution)
 	{
 		LLIconCtrl* icon = LLUICtrlFactory::getInstance()->createFromFile<LLIconCtrl>("alert_icon.xml", this, LLPanel::child_registry_t::instance());
@@ -233,10 +232,6 @@ LLToastAlertPanel::LLToastAlertPanel( LLNotificationPtr notification, bool modal
 		msg_x += 32 + HPAD;
 		msg_box->setColor( alert_caution_text_color );
 	}
-	else
-	{
-		msg_box->setColor( alert_text_color );
-	}
 
 	LLRect rect;
 	rect.setLeftTopAndSize( msg_x, msg_y, text_rect.getWidth(), text_rect.getHeight() );
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index 1c745906aa2b17f22cff5ba438f9bdc118ef5627..ba243f258a62d0fecc536089cfe45dd335e38a8c 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -1386,6 +1386,10 @@ EAcceptance LLToolDragAndDrop::willObjectAcceptInventory(LLViewerObject* obj, LL
 			worn = TRUE;
 		}
 		break;
+	case LLAssetType::AT_CALLINGCARD:
+		// Calling Cards in object are disabled for now
+		// because of incomplete LSL support. See STORM-1117.
+		return ACCEPT_NO;
 	default:
 			break;
 	}
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 562b9219b4427dfd1cbf0277a1ab71987d2ad9ae..06e0d17b8c5041e6a14f877ec312b96f0b3c4361 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -37,7 +37,7 @@
 #include "llavatarnamecache.h"
 #include "llviewercontrol.h"
 #include "llfocusmgr.h"
-//#include "llfirstuse.h"
+#include "llfirstuse.h"
 #include "llfloaterland.h"
 #include "llfloaterreg.h"
 #include "llfloaterscriptdebug.h"
@@ -79,8 +79,11 @@ static ECursorType cursor_from_parcel_media(U8 click_action);
 
 LLToolPie::LLToolPie()
 :	LLTool(std::string("Pie")),
-	mGrabMouseButtonDown( FALSE ),
-	mMouseOutsideSlop( FALSE ),
+	mMouseButtonDown( false ),
+	mMouseOutsideSlop( false ),
+	mMouseSteerX(-1),
+	mMouseSteerY(-1),
+	mBlockClickToWalk(false),
 	mClickAction(0),
 	mClickActionBuyEnabled( gSavedSettings.getBOOL("ClickActionBuyEnabled") ),
 	mClickActionPayEnabled( gSavedSettings.getBOOL("ClickActionPayEnabled") )
@@ -99,12 +102,17 @@ BOOL LLToolPie::handleAnyMouseClick(S32 x, S32 y, MASK mask, EClickType clicktyp
 
 BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask)
 {
+	mMouseOutsideSlop = FALSE;
+	mMouseDownX = x;
+	mMouseDownY = y;
+
 	//left mouse down always picks transparent
 	mPick = gViewerWindow->pickImmediate(x, y, TRUE);
 	mPick.mKeyMask = mask;
-	mGrabMouseButtonDown = TRUE;
+
+	mMouseButtonDown = true;
 	
-	pickLeftMouseDownCallback();
+	handleLeftClickPick();
 
 	return TRUE;
 }
@@ -119,7 +127,7 @@ BOOL LLToolPie::handleRightMouseDown(S32 x, S32 y, MASK mask)
 
 	// claim not handled so UI focus stays same
 	
-	pickRightMouseDownCallback();
+	handleRightClickPick();
 	
 	return FALSE;
 }
@@ -136,7 +144,7 @@ BOOL LLToolPie::handleScrollWheel(S32 x, S32 y, S32 clicks)
 }
 
 // True if you selected an object.
-BOOL LLToolPie::pickLeftMouseDownCallback()
+BOOL LLToolPie::handleLeftClickPick()
 {
 	S32 x = mPick.mMousePt.mX;
 	S32 y = mPick.mMousePt.mY;
@@ -292,7 +300,12 @@ BOOL LLToolPie::pickLeftMouseDownCallback()
 	}
 
 	// put focus back "in world"
-	gFocusMgr.setKeyboardFocus(NULL);
+	if (gFocusMgr.getKeyboardFocus())
+	{
+		// don't click to walk on attempt to give focus to world
+		mBlockClickToWalk = true;
+		gFocusMgr.setKeyboardFocus(NULL);
+	}
 
 	BOOL touchable = (object && object->flagHandleTouch()) 
 					 || (parent && parent->flagHandleTouch());
@@ -304,6 +317,7 @@ BOOL LLToolPie::pickLeftMouseDownCallback()
 		)
 	{
 		gGrabTransientTool = this;
+		mMouseButtonDown = false;
 		LLToolMgr::getInstance()->getCurrentToolset()->selectTool( LLToolGrab::getInstance() );
 		return LLToolGrab::getInstance()->handleObjectHit( mPick );
 	}
@@ -319,9 +333,9 @@ BOOL LLToolPie::pickLeftMouseDownCallback()
 	if (!gSavedSettings.getBOOL("LeftClickShowMenu"))
 	{
 		// mouse already released
-		if (!mGrabMouseButtonDown)
+		if (!mMouseButtonDown)
 		{
-			return TRUE;
+			return true;
 		}
 
 		while( object && object->isAttachment() && !object->flagHandleTouch())
@@ -333,9 +347,10 @@ BOOL LLToolPie::pickLeftMouseDownCallback()
 			}
 			object = (LLViewerObject*)object->getParent();
 		}
-		if (object && object == gAgentAvatarp)
+		if (object && object == gAgentAvatarp && !gSavedSettings.getBOOL("ClickToWalk"))
 		{
 			// we left clicked on avatar, switch to focus mode
+			mMouseButtonDown = false;
 			LLToolMgr::getInstance()->setTransientTool(LLToolCamera::getInstance());
 			gViewerWindow->hideCursor();
 			LLToolCamera::getInstance()->setMouseCapture(TRUE);
@@ -514,20 +529,16 @@ void LLToolPie::selectionPropertiesReceived()
 BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
 {
 	mHoverPick = gViewerWindow->pickImmediate(x, y, FALSE);
-	// perform a separate pick that detects transparent objects since they respond to 1-click actions
-	LLPickInfo click_action_pick = gViewerWindow->pickImmediate(x, y, TRUE);
-
-	// Show screen-space highlight glow effect
-	bool show_highlight = false;
 	LLViewerObject *parent = NULL;
 	LLViewerObject *object = mHoverPick.getObject();
-
 	if (object)
 	{
 		parent = object->getRootEdit();
 	}
 
-	LLViewerObject* click_action_object = click_action_pick.getObject();
+	// Show screen-space highlight glow effect
+	bool show_highlight = false;
+
 	if (handleMediaHover(mHoverPick))
 	{
 		// *NOTE: If you think the hover glow conflicts with the media outline, you
@@ -536,39 +547,70 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
 		// cursor set by media object
 		lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
 	}
-	else if (click_action_object && useClickAction(mask, click_action_object, click_action_object->getRootEdit()))
+	else if (!mMouseOutsideSlop 
+		&& mMouseButtonDown 
+		&& gSavedSettings.getBOOL("ClickToWalk"))
 	{
-		show_highlight = true;
-		ECursorType cursor = cursorFromObject(click_action_object);
-		gViewerWindow->setCursor(cursor);
-		lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
+		S32 delta_x = x - mMouseDownX;
+		S32 delta_y = y - mMouseDownY;
+		S32 threshold = gSavedSettings.getS32("DragAndDropDistanceThreshold");
+		if (delta_x * delta_x + delta_y * delta_y > threshold * threshold)
+		{
+			startCameraSteering();
+			steerCameraWithMouse(x, y);
+			gViewerWindow->setCursor(UI_CURSOR_TOOLGRAB);
+		}
+		else
+		{
+			gViewerWindow->setCursor(UI_CURSOR_ARROW);
+		}
 	}
-	
-	else if ((object && !object->isAvatar() && object->usePhysics()) 
-			 || (parent && !parent->isAvatar() && parent->usePhysics()))
+	else if (inCameraSteerMode())
 	{
-		show_highlight = true;
+		steerCameraWithMouse(x, y);
 		gViewerWindow->setCursor(UI_CURSOR_TOOLGRAB);
-		lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
-	}
-	else if ( (object && object->flagHandleTouch()) 
-			  || (parent && parent->flagHandleTouch()))
-	{
-		show_highlight = true;
-		gViewerWindow->setCursor(UI_CURSOR_HAND);
-		lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
 	}
 	else
 	{
-		gViewerWindow->setCursor(UI_CURSOR_ARROW);
-		lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
+		// perform a separate pick that detects transparent objects since they respond to 1-click actions
+		LLPickInfo click_action_pick = gViewerWindow->pickImmediate(x, y, TRUE);
+
+		LLViewerObject* click_action_object = click_action_pick.getObject();
 
-		if(!object)
+		if (click_action_object && useClickAction(mask, click_action_object, click_action_object->getRootEdit()))
+		{
+			show_highlight = true;
+			ECursorType cursor = cursorFromObject(click_action_object);
+			gViewerWindow->setCursor(cursor);
+			lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
+		}
+		
+		else if ((object && !object->isAvatar() && object->usePhysics()) 
+				 || (parent && !parent->isAvatar() && parent->usePhysics()))
+		{
+			show_highlight = true;
+			gViewerWindow->setCursor(UI_CURSOR_TOOLGRAB);
+			lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
+		}
+		else if ( (object && object->flagHandleTouch()) 
+				  || (parent && parent->flagHandleTouch()))
 		{
-			LLViewerMediaFocus::getInstance()->clearHover();
+			show_highlight = true;
+			gViewerWindow->setCursor(UI_CURSOR_HAND);
+			lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
+		}
+		else
+		{
+			gViewerWindow->setCursor(UI_CURSOR_ARROW);
+			lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPie (inactive)" << llendl;
 		}
 	}
 
+	if(!object)
+	{
+		LLViewerMediaFocus::getInstance()->clearHover();
+	}
+
 	static LLCachedControl<bool> enable_highlight(
 		gSavedSettings, "RenderHoverGlowEnable", false);
 	LLDrawable* drawable = NULL;
@@ -584,39 +626,65 @@ BOOL LLToolPie::handleHover(S32 x, S32 y, MASK mask)
 BOOL LLToolPie::handleMouseUp(S32 x, S32 y, MASK mask)
 {
 	LLViewerObject* obj = mPick.getObject();
-
-	handleMediaMouseUp();
-
 	U8 click_action = final_click_action(obj);
-	if (click_action != CLICK_ACTION_NONE)
+
+	// let media have first pass at click
+	if (handleMediaMouseUp() || LLViewerMediaFocus::getInstance()->getFocus())
 	{
-		switch(click_action)
+		mBlockClickToWalk = true;
+	}
+	stopCameraSteering();
+	mMouseButtonDown = false;
+
+	if (click_action == CLICK_ACTION_NONE				// not doing 1-click action
+		&& gSavedSettings.getBOOL("ClickToWalk")		// click to walk enabled
+		&& !gAgent.getFlying()							// don't auto-navigate while flying until that works
+		&& !gAgentAvatarp->isSitting()
+		&& !mBlockClickToWalk							// another behavior hasn't cancelled click to walk
+		&& !mPick.mPosGlobal.isExactlyZero()			// valid coordinates for pick
+		&& (mPick.mPickType == LLPickInfo::PICK_LAND	// we clicked on land
+			|| mPick.mObjectID.notNull()))				// or on an object
+	{
+		// handle special cases of steering picks
+		LLViewerObject* avatar_object = mPick.getObject();
+
+		// get pointer to avatar
+		while (avatar_object && !avatar_object->isAvatar())
 		{
-			// NOTE: mClickActionBuyEnabled flag enables/disables BUY action but setting cursor to default is okay
-		case CLICK_ACTION_BUY:
-			// NOTE: mClickActionPayEnabled flag enables/disables PAY action but setting cursor to default is okay
-		case CLICK_ACTION_PAY:
-		case CLICK_ACTION_OPEN:
-		case CLICK_ACTION_ZOOM:
-		case CLICK_ACTION_PLAY:
-		case CLICK_ACTION_OPEN_MEDIA:
-			// Because these actions open UI dialogs, we won't change
-			// the cursor again until the next hover and GL pick over
-			// the world.  Keep the cursor an arrow, assuming that 
-			// after the user moves off the UI, they won't be on the
-			// same object anymore.
-			gViewerWindow->setCursor(UI_CURSOR_ARROW);
-			// Make sure the hover-picked object is ignored.
-			//gToolTipView->resetLastHoverObject();
-			break;
-		default:
-			break;
+			avatar_object = (LLViewerObject*)avatar_object->getParent();
+		}
+
+		if (avatar_object && ((LLVOAvatar*)avatar_object)->isSelf())
+		{
+			const F64 SELF_CLICK_WALK_DISTANCE = 3.0;
+			// pretend we picked some point a bit in front of avatar
+			mPick.mPosGlobal = gAgent.getPositionGlobal() + LLVector3d(LLViewerCamera::instance().getAtAxis()) * SELF_CLICK_WALK_DISTANCE;
 		}
+		gAgentCamera.setFocusOnAvatar(TRUE, TRUE);
+		if(mAutoPilotDestination) { mAutoPilotDestination->markDead(); }
+		mAutoPilotDestination = (LLHUDEffectBlob *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BLOB, FALSE);
+		mAutoPilotDestination->setPositionGlobal(mPick.mPosGlobal);
+		mAutoPilotDestination->setPixelSize(5);
+		mAutoPilotDestination->setColor(LLColor4U(170, 210, 190));
+		mAutoPilotDestination->setDuration(3.f);
+
+		handle_go_to();
+		LLFirstUse::notMoving(false);
+
+		mBlockClickToWalk = false;
+
+		return TRUE;
+	}
+	gViewerWindow->setCursor(UI_CURSOR_ARROW);
+	if (hasMouseCapture())
+	{
+		setMouseCapture(FALSE);
 	}
 
-	mGrabMouseButtonDown = FALSE;
 	LLToolMgr::getInstance()->clearTransientTool();
 	gAgentCamera.setLookAt(LOOKAT_TARGET_CONVERSATION, obj); // maybe look at object/person clicked on
+
+	mBlockClickToWalk = false;
 	return LLTool::handleMouseUp(x, y, mask);
 }
 
@@ -936,7 +1004,7 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
 			p.click_callback(boost::bind(showAvatarInspector, hover_object->getID()));
 			p.visible_time_near(6.f);
 			p.visible_time_far(3.f);
-			p.delay_time(0.35f);
+			p.delay_time(gSavedSettings.getF32("AvatarInspectorTooltipDelay"));
 			p.wrap(false);
 			
 			LLToolTipMgr::instance().show(p);
@@ -1054,7 +1122,7 @@ BOOL LLToolPie::handleTooltipObject( LLViewerObject* hover_object, std::string l
 				p.click_homepage_callback(boost::bind(VisitHomePage, mHoverPick));
 				p.visible_time_near(6.f);
 				p.visible_time_far(3.f);
-				p.delay_time(0.35f);
+				p.delay_time(gSavedSettings.getF32("ObjectInspectorTooltipDelay"));
 				p.wrap(false);
 				
 				LLToolTipMgr::instance().show(p);
@@ -1237,6 +1305,11 @@ void LLToolPie::VisitHomePage(const LLPickInfo& info)
 	}
 }
 
+void LLToolPie::handleSelect()
+{
+	// tool is reselected when app gets focus, etc.
+	mBlockClickToWalk = true;	
+}
 
 void LLToolPie::handleDeselect()
 {
@@ -1275,10 +1348,20 @@ void LLToolPie::stopEditing()
 
 void LLToolPie::onMouseCaptureLost()
 {
-	mMouseOutsideSlop = FALSE;
+	stopCameraSteering();
+	mMouseButtonDown = false;
 	handleMediaMouseUp();
 }
 
+void LLToolPie::stopCameraSteering()
+{
+	mMouseOutsideSlop = false;
+}
+
+bool LLToolPie::inCameraSteerMode()
+{
+	return mMouseButtonDown && mMouseOutsideSlop && gSavedSettings.getBOOL("ClickToWalk");
+}
 
 // true if x,y outside small box around start_x,start_y
 BOOL LLToolPie::outsideSlop(S32 x, S32 y, S32 start_x, S32 start_y)
@@ -1356,6 +1439,7 @@ bool LLToolPie::handleMediaClick(const LLPickInfo& pick)
 		{
 			// Make sure keyboard focus is set to the media focus object.
 			gFocusMgr.setKeyboardFocus(LLViewerMediaFocus::getInstance());
+			LLEditMenuHandler::gEditMenuHandler = LLViewerMediaFocus::instance().getFocusedMediaImpl();
 			
 			media_impl->mouseDown(pick.mUVCoords, gKeyboard->currentMask(TRUE));
 			mMediaMouseCaptureID = mep->getMediaID();
@@ -1444,8 +1528,6 @@ bool LLToolPie::handleMediaMouseUp()
 		
 		mMediaMouseCaptureID.setNull();	
 
-		setMouseCapture(FALSE);
-
 		result = true;		
 	}	
 	
@@ -1508,7 +1590,7 @@ static ECursorType cursor_from_parcel_media(U8 click_action)
 
 
 // True if we handled the event.
-BOOL LLToolPie::pickRightMouseDownCallback()
+BOOL LLToolPie::handleRightClickPick()
 {
 	S32 x = mPick.mMousePt.mX;
 	S32 y = mPick.mMousePt.mY;
@@ -1630,10 +1712,173 @@ BOOL LLToolPie::pickRightMouseDownCallback()
 
 void LLToolPie::showVisualContextMenuEffect()
 {
-		// VEFFECT: ShowPie
-		LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_SPHERE, TRUE);
-		effectp->setPositionGlobal(mPick.mPosGlobal);
-		effectp->setColor(LLColor4U(gAgent.getEffectColor()));
-		effectp->setDuration(0.25f);
+	// VEFFECT: ShowPie
+	LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_SPHERE, TRUE);
+	effectp->setPositionGlobal(mPick.mPosGlobal);
+	effectp->setColor(LLColor4U(gAgent.getEffectColor()));
+	effectp->setDuration(0.25f);
+}
+
+typedef enum e_near_far
+{
+	NEAR_INTERSECTION,
+	FAR_INTERSECTION
+} ENearFar;
+
+bool intersect_ray_with_sphere( const LLVector3& ray_pt, const LLVector3& ray_dir, const LLVector3& sphere_center, F32 sphere_radius, e_near_far near_far, LLVector3& intersection_pt)
+{
+	// do ray/sphere intersection by solving quadratic equation
+	LLVector3 sphere_to_ray_start_vec = ray_pt - sphere_center;
+	F32 B = 2.f * ray_dir * sphere_to_ray_start_vec;
+	F32 C = sphere_to_ray_start_vec.lengthSquared() - (sphere_radius * sphere_radius);
+
+	F32 discriminant = B*B - 4.f*C;
+	if (discriminant >= 0.f)
+	{	// intersection detected, now find closest one
+		F32 t0 = (-B - sqrtf(discriminant)) / 2.f;
+
+		if (t0 > 0.f && near_far == NEAR_INTERSECTION)
+		{
+			intersection_pt = ray_pt + ray_dir * t0;
+		}
+		else
+		{
+			F32 t1 = (-B + sqrtf(discriminant)) / 2.f;
+			intersection_pt = ray_pt + ray_dir * t1;
+		}
+		return true;
+	}
+	else
+	{	// no intersection
+		return false;
+	}
+}
+
+void LLToolPie::startCameraSteering()
+{
+	LLFirstUse::notMoving(false);
+	mMouseOutsideSlop = true;
+	mBlockClickToWalk = true;
+
+	if (gAgentCamera.getFocusOnAvatar())
+	{
+		mSteerPick = mPick;
+
+		// handle special cases of steering picks
+		LLViewerObject* avatar_object = mSteerPick.getObject();
+
+		// get pointer to avatar
+		while (avatar_object && !avatar_object->isAvatar())
+		{
+			avatar_object = (LLViewerObject*)avatar_object->getParent();
+		}
+
+		// if clicking on own avatar...
+		if (avatar_object && ((LLVOAvatar*)avatar_object)->isSelf())
+		{
+			// ...project pick point a few meters in front of avatar
+			mSteerPick.mPosGlobal = gAgent.getPositionGlobal() + LLVector3d(LLViewerCamera::instance().getAtAxis()) * 3.0;
+		}
+
+		if (!mSteerPick.isValid())
+		{
+			mSteerPick.mPosGlobal = gAgent.getPosGlobalFromAgent(
+				LLViewerCamera::instance().getOrigin() + gViewerWindow->mouseDirectionGlobal(mSteerPick.mMousePt.mX, mSteerPick.mMousePt.mY) * 100.f);
+		}
+
+		setMouseCapture(TRUE);
+		
+		mMouseSteerX = mMouseDownX;
+		mMouseSteerY = mMouseDownY;
+		const LLVector3 camera_to_rotation_center	= gAgent.getFrameAgent().getOrigin() - LLViewerCamera::instance().getOrigin();
+		const LLVector3 rotation_center_to_pick		= gAgent.getPosAgentFromGlobal(mSteerPick.mPosGlobal) - gAgent.getFrameAgent().getOrigin();
+
+		mClockwise = camera_to_rotation_center * rotation_center_to_pick < 0.f;
+		if (mMouseSteerGrabPoint) { mMouseSteerGrabPoint->markDead(); }
+		mMouseSteerGrabPoint = (LLHUDEffectBlob *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BLOB, FALSE);
+		mMouseSteerGrabPoint->setPositionGlobal(mSteerPick.mPosGlobal);
+		mMouseSteerGrabPoint->setColor(LLColor4U(170, 210, 190));
+		mMouseSteerGrabPoint->setPixelSize(5);
+		mMouseSteerGrabPoint->setDuration(2.f);
+	}
+}
+
+void LLToolPie::steerCameraWithMouse(S32 x, S32 y)
+{
+	const LLViewerCamera& camera = LLViewerCamera::instance();
+	const LLCoordFrame& rotation_frame = gAgent.getFrameAgent();
+	const LLVector3 pick_pos = gAgent.getPosAgentFromGlobal(mSteerPick.mPosGlobal);
+	const LLVector3 pick_rotation_center = rotation_frame.getOrigin() + parallel_component(pick_pos - rotation_frame.getOrigin(), rotation_frame.getUpAxis());
+	const F32 MIN_ROTATION_RADIUS_FRACTION = 0.2f;
+	const F32 min_rotation_radius = MIN_ROTATION_RADIUS_FRACTION * dist_vec(pick_rotation_center, camera.getOrigin());;
+	const F32 pick_distance_from_rotation_center = llclamp(dist_vec(pick_pos, pick_rotation_center), min_rotation_radius, F32_MAX);
+	const LLVector3 camera_to_rotation_center = pick_rotation_center - camera.getOrigin();
+	const LLVector3 adjusted_camera_pos = LLViewerCamera::instance().getOrigin() + projected_vec(camera_to_rotation_center, rotation_frame.getUpAxis());
+	const F32 camera_distance_from_rotation_center = dist_vec(adjusted_camera_pos, pick_rotation_center);
+
+	LLVector3 mouse_ray = orthogonal_component(gViewerWindow->mouseDirectionGlobal(x, y), rotation_frame.getUpAxis());
+	mouse_ray.normalize();
+
+	LLVector3 old_mouse_ray = orthogonal_component(gViewerWindow->mouseDirectionGlobal(mMouseSteerX, mMouseSteerY), rotation_frame.getUpAxis());
+	old_mouse_ray.normalize();
+
+	F32 yaw_angle;
+	F32 old_yaw_angle;
+	LLVector3 mouse_on_sphere;
+	LLVector3 old_mouse_on_sphere;
+
+	if (intersect_ray_with_sphere(
+			adjusted_camera_pos,
+			mouse_ray,
+			pick_rotation_center,
+			pick_distance_from_rotation_center, 
+			FAR_INTERSECTION,
+			mouse_on_sphere))
+	{
+		LLVector3 mouse_sphere_offset = mouse_on_sphere - pick_rotation_center;
+		yaw_angle = atan2f(mouse_sphere_offset * rotation_frame.getLeftAxis(), mouse_sphere_offset * rotation_frame.getAtAxis());
+	}
+	else
+	{
+		yaw_angle = F_PI_BY_TWO + asinf(pick_distance_from_rotation_center / camera_distance_from_rotation_center);
+		if (mouse_ray * rotation_frame.getLeftAxis() < 0.f)
+		{
+			yaw_angle *= -1.f;
+		}
+	}
+
+	if (intersect_ray_with_sphere(
+			adjusted_camera_pos,
+			old_mouse_ray,
+			pick_rotation_center,
+			pick_distance_from_rotation_center,
+			FAR_INTERSECTION,
+			old_mouse_on_sphere))
+	{
+		LLVector3 mouse_sphere_offset = old_mouse_on_sphere - pick_rotation_center;
+		old_yaw_angle = atan2f(mouse_sphere_offset * rotation_frame.getLeftAxis(), mouse_sphere_offset * rotation_frame.getAtAxis());
+	}
+	else
+	{
+		old_yaw_angle = F_PI_BY_TWO + asinf(pick_distance_from_rotation_center / camera_distance_from_rotation_center);
+
+		if (mouse_ray * rotation_frame.getLeftAxis() < 0.f)
+		{
+			old_yaw_angle *= -1.f;
+		}
+	}
+
+	const F32 delta_angle = yaw_angle - old_yaw_angle;
+
+	if (mClockwise)
+	{
+		gAgent.yaw(delta_angle);
+	}
+	else
+	{
+		gAgent.yaw(-delta_angle);
+	}
 
+	mMouseSteerX = x;
+	mMouseSteerY = y;
 }
diff --git a/indra/newview/lltoolpie.h b/indra/newview/lltoolpie.h
index 77200a1da40a2bcc1c52e66aa031291959e6a85f..22359a6db841d665a2053a6de8bb3ae7d671bf97 100644
--- a/indra/newview/lltoolpie.h
+++ b/indra/newview/lltoolpie.h
@@ -30,6 +30,7 @@
 #include "lltool.h"
 #include "lluuid.h"
 #include "llviewerwindow.h" // for LLPickInfo
+#include "llhudeffectblob.h" // for LLPointer<LLHudEffectBlob>, apparently
 
 class LLViewerObject;
 class LLObjectSelection;
@@ -56,6 +57,7 @@ class LLToolPie : public LLTool, public LLSingleton<LLToolPie>
 	virtual void		stopEditing();
 
 	virtual void		onMouseCaptureLost();
+	virtual void		handleSelect();
 	virtual void		handleDeselect();
 	virtual LLTool*		getOverrideTool(MASK mask);
 
@@ -64,6 +66,7 @@ class LLToolPie : public LLTool, public LLSingleton<LLToolPie>
 	LLViewerObject*		getClickActionObject() { return mClickActionObject; }
 	LLObjectSelection*	getLeftClickSelection() { return (LLObjectSelection*)mLeftClickSelection; }
 	void 				resetSelection();
+	void				blockClickToWalk() { mBlockClickToWalk = true; }
 	
 	static void			selectionPropertiesReceived();
 
@@ -75,8 +78,8 @@ class LLToolPie : public LLTool, public LLSingleton<LLToolPie>
 	
 private:
 	BOOL outsideSlop		(S32 x, S32 y, S32 start_x, S32 start_y);
-	BOOL pickLeftMouseDownCallback();
-	BOOL pickRightMouseDownCallback();
+	BOOL handleLeftClickPick();
+	BOOL handleRightClickPick();
 	BOOL useClickAction		(MASK mask, LLViewerObject* object,LLViewerObject* parent);
 	
 	void showVisualContextMenuEffect();
@@ -88,12 +91,26 @@ class LLToolPie : public LLTool, public LLSingleton<LLToolPie>
 	BOOL handleTooltipLand(std::string line, std::string tooltip_msg);
 	BOOL handleTooltipObject( LLViewerObject* hover_object, std::string line, std::string tooltip_msg);
 
+	void steerCameraWithMouse(S32 x, S32 y);
+	void startCameraSteering();
+	void stopCameraSteering();
+	bool inCameraSteerMode();
+
 private:
-	BOOL				mGrabMouseButtonDown;
-	BOOL				mMouseOutsideSlop;				// for this drag, has mouse moved outside slop region
+	bool				mMouseButtonDown;
+	bool				mMouseOutsideSlop;		// for this drag, has mouse moved outside slop region
+	S32					mMouseDownX;
+	S32					mMouseDownY;
+	S32					mMouseSteerX;
+	S32					mMouseSteerY;
+	LLPointer<LLHUDEffectBlob>	mAutoPilotDestination;
+	LLPointer<LLHUDEffectBlob>	mMouseSteerGrabPoint;
+	bool				mClockwise;			
+	bool				mBlockClickToWalk;
 	LLUUID				mMediaMouseCaptureID;
 	LLPickInfo			mPick;
 	LLPickInfo			mHoverPick;
+	LLPickInfo			mSteerPick;
 	LLPointer<LLViewerObject> mClickActionObject;
 	U8					mClickAction;
 	LLSafeHandle<LLObjectSelection> mLeftClickSelection;
diff --git a/indra/newview/lltracker.h b/indra/newview/lltracker.h
index c0c154abe831dde4c86fd6518625f44bf8cf1b20..8e916af31580582017c4771049cfea962c495ffc 100644
--- a/indra/newview/lltracker.h
+++ b/indra/newview/lltracker.h
@@ -75,7 +75,7 @@ class LLTracker
 	// these are static so that they can be used a callbacks
 	static ETrackingStatus getTrackingStatus() { return instance()->mTrackingStatus; }
 	static ETrackingLocationType getTrackedLocationType() { return instance()->mTrackingLocationType; }
-	static BOOL isTracking(void*) { return (BOOL) instance()->mTrackingStatus; }
+	static BOOL isTracking(void*) { return instance()->mTrackingStatus != TRACKING_NOTHING; }
 	static void stopTracking(void*);
 	static void clearFocus();
 	
diff --git a/indra/newview/lltranslate.cpp b/indra/newview/lltranslate.cpp
index 011aa47e3101e812c7e4ddc99403db7525aaf276..2de7db38ed1cdd653f429312ceab877aa2875b54 100644
--- a/indra/newview/lltranslate.cpp
+++ b/indra/newview/lltranslate.cpp
@@ -33,7 +33,7 @@
 #include "llversioninfo.h"
 #include "llviewercontrol.h"
 
-#include "jsoncpp/reader.h"
+#include "reader.h"
 
 // These two are concatenated with the language specifiers to form a complete Google Translate URL
 const char* LLTranslate::m_GoogleURL = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=";
diff --git a/indra/newview/lluilistener.cpp b/indra/newview/lluilistener.cpp
index 4d6eac4958e25c95a46f6129a416fb859d0d6acf..6b2cd71d406ac4a493eb6de9dd66a6b9d2b2d2b5 100644
--- a/indra/newview/lluilistener.cpp
+++ b/indra/newview/lluilistener.cpp
@@ -34,9 +34,11 @@
 // std headers
 // external library headers
 // other Linden headers
+#include "llui.h" // getRootView(), resolvePath()
 #include "lluictrl.h"
 #include "llerror.h"
 
+
 LLUIListener::LLUIListener():
     LLEventAPI("UI",
                "LLUICtrl::CommitCallbackRegistry listener.\n"
@@ -47,6 +49,12 @@ LLUIListener::LLUIListener():
         "as if from a user gesture on a menu -- or a button click.",
         &LLUIListener::call,
         LLSD().with("function", LLSD()));
+
+    add("getValue",
+        "For the UI control identified by the path in [\"path\"], return the control's\n"
+        "current value as [\"value\"] reply.",
+        &LLUIListener::getValue,
+        LLSDMap("path", LLSD())("reply", LLSD()));
 }
 
 void LLUIListener::call(const LLSD& event) const
@@ -71,3 +79,23 @@ void LLUIListener::call(const LLSD& event) const
         (*func)(NULL, event["parameter"]);
     }
 }
+
+void LLUIListener::getValue(const LLSD&event) const
+{
+    LLSD reply = LLSD::emptyMap();
+
+    const LLView* root = LLUI::getRootView();
+    const LLView* view = LLUI::resolvePath(root, event["path"].asString());
+    const LLUICtrl* ctrl(dynamic_cast<const LLUICtrl*>(view));
+
+    if (ctrl) 
+    {
+        reply["value"] = ctrl->getValue();
+    }
+    else
+    {
+        // *TODO: ??? return something indicating failure to resolve
+    }
+    
+    sendReply(reply, event);
+}
diff --git a/indra/newview/lluilistener.h b/indra/newview/lluilistener.h
index e7847f01e8a3a4b6345364c63adf9db2c873a0e6..08724024dc84401b6add6c79d2f26bdf6d108ac0 100644
--- a/indra/newview/lluilistener.h
+++ b/indra/newview/lluilistener.h
@@ -41,6 +41,7 @@ class LLUIListener: public LLEventAPI
 
 private:
     void call(const LLSD& event) const;
+    void getValue(const LLSD&event) const;
 };
 
 #endif /* ! defined(LL_LLUILISTENER_H) */
diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp
index bd4d3c2b789cdb1c562bb1ad7205ae8a256f85b1..ed4d278e90656aec1ffa3025f16dd74ba84ea54d 100644
--- a/indra/newview/llurldispatcher.cpp
+++ b/indra/newview/llurldispatcher.cpp
@@ -53,6 +53,7 @@ class LLURLDispatcherImpl
 {
 public:
 	static bool dispatch(const LLSLURL& slurl,
+						 const std::string& nav_type,
 						 LLMediaCtrl* web,
 						 bool trusted_browser);
 		// returns true if handled or explicitly blocked.
@@ -61,6 +62,7 @@ class LLURLDispatcherImpl
 
 private:
 	static bool dispatchCore(const LLSLURL& slurl, 
+							 const std::string& nav_type,
 							 bool right_mouse,
 							 LLMediaCtrl* web,
 							 bool trusted_browser);
@@ -71,6 +73,7 @@ class LLURLDispatcherImpl
 		// Returns true if handled.
 
 	static bool dispatchApp(const LLSLURL& slurl,
+							const std::string& nav_type,
 							bool right_mouse,
 							LLMediaCtrl* web,
 							bool trusted_browser);
@@ -78,7 +81,7 @@ class LLURLDispatcherImpl
 		// by showing panel in Search floater.
 		// Returns true if handled or explicitly blocked.
 
-	static bool dispatchRegion(const LLSLURL& slurl, bool right_mouse);
+	static bool dispatchRegion(const LLSLURL& slurl, const std::string& nav_type, bool right_mouse);
 		// handles secondlife://Ahern/123/45/67/
 		// Returns true if handled.
 
@@ -97,6 +100,7 @@ class LLURLDispatcherImpl
 
 // static
 bool LLURLDispatcherImpl::dispatchCore(const LLSLURL& slurl,
+									   const std::string& nav_type,
 									   bool right_mouse,
 									   LLMediaCtrl* web,
 									   bool trusted_browser)
@@ -105,9 +109,9 @@ bool LLURLDispatcherImpl::dispatchCore(const LLSLURL& slurl,
 	switch(slurl.getType())
 	{
 		case LLSLURL::APP: 
-			return dispatchApp(slurl, right_mouse, web, trusted_browser);
+			return dispatchApp(slurl, nav_type, right_mouse, web, trusted_browser);
 		case LLSLURL::LOCATION:
-			return dispatchRegion(slurl, right_mouse);
+			return dispatchRegion(slurl, nav_type, right_mouse);
 		default:
 			return false;
 	}
@@ -122,11 +126,12 @@ bool LLURLDispatcherImpl::dispatchCore(const LLSLURL& slurl,
 
 // static
 bool LLURLDispatcherImpl::dispatch(const LLSLURL& slurl,
+								   const std::string& nav_type,
 								   LLMediaCtrl* web,
 								   bool trusted_browser)
 {
 	const bool right_click = false;
-	return dispatchCore(slurl, right_click, web, trusted_browser);
+	return dispatchCore(slurl, nav_type, right_click, web, trusted_browser);
 }
 
 // static
@@ -135,11 +140,12 @@ bool LLURLDispatcherImpl::dispatchRightClick(const LLSLURL& slurl)
 	const bool right_click = true;
 	LLMediaCtrl* web = NULL;
 	const bool trusted_browser = false;
-	return dispatchCore(slurl, right_click, web, trusted_browser);
+	return dispatchCore(slurl, "clicked", right_click, web, trusted_browser);
 }
 
 // static
 bool LLURLDispatcherImpl::dispatchApp(const LLSLURL& slurl, 
+									  const std::string& nav_type,
 									  bool right_mouse,
 									  LLMediaCtrl* web,
 									  bool trusted_browser)
@@ -147,7 +153,7 @@ bool LLURLDispatcherImpl::dispatchApp(const LLSLURL& slurl,
 	llinfos << "cmd: " << slurl.getAppCmd() << " path: " << slurl.getAppPath() << " query: " << slurl.getAppQuery() << llendl;
 	const LLSD& query_map = LLURI::queryMap(slurl.getAppQuery());
 	bool handled = LLCommandDispatcher::dispatch(
-			slurl.getAppCmd(), slurl.getAppPath(), query_map, web, trusted_browser);
+			slurl.getAppCmd(), slurl.getAppPath(), query_map, web, nav_type, trusted_browser);
 
 	// alert if we didn't handle this secondlife:///app/ SLURL
 	// (but still return true because it is a valid app SLURL)
@@ -159,7 +165,7 @@ bool LLURLDispatcherImpl::dispatchApp(const LLSLURL& slurl,
 }
 
 // static
-bool LLURLDispatcherImpl::dispatchRegion(const LLSLURL& slurl, bool right_mouse)
+bool LLURLDispatcherImpl::dispatchRegion(const LLSLURL& slurl, const std::string& nav_type, bool right_mouse)
 {
   if(slurl.getType() != LLSLURL::LOCATION)
     {
@@ -180,7 +186,7 @@ bool LLURLDispatcherImpl::dispatchRegion(const LLSLURL& slurl, bool right_mouse)
 	LLWorldMapMessage::getInstance()->sendNamedRegionRequest(slurl.getRegion(),
 									  LLURLDispatcherImpl::regionNameCallback,
 									  slurl.getSLURLString(),
-									  false);	// don't teleport
+									  LLUI::sSettingGroups["config"]->getBOOL("SLURLTeleportDirectly"));	// don't teleport
 	return true;
 }
 
@@ -287,10 +293,11 @@ LLTeleportHandler gTeleportHandler;
 
 // static
 bool LLURLDispatcher::dispatch(const std::string& slurl,
+							   const std::string& nav_type,
 							   LLMediaCtrl* web,
 							   bool trusted_browser)
 {
-	return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), web, trusted_browser);
+	return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), nav_type, web, trusted_browser);
 }
 
 // static
@@ -310,7 +317,7 @@ bool LLURLDispatcher::dispatchFromTextEditor(const std::string& slurl)
 	// *TODO: Make this trust model more refined.  JC
 	const bool trusted_browser = true;
 	LLMediaCtrl* web = NULL;
-	return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), web, trusted_browser);
+	return LLURLDispatcherImpl::dispatch(LLSLURL(slurl), "clicked", web, trusted_browser);
 }
 
 
diff --git a/indra/newview/llurldispatcher.h b/indra/newview/llurldispatcher.h
index b07db4da3f4591c3023c2f7f958aaab2968be1f3..6309a97af532dd4e63e283d34ed6471f2d901286 100644
--- a/indra/newview/llurldispatcher.h
+++ b/indra/newview/llurldispatcher.h
@@ -33,6 +33,7 @@ class LLURLDispatcher
 public:
 	
 	static bool dispatch(const std::string& slurl,
+						 const std::string& nav_type,
 						 LLMediaCtrl* web,
 						 bool trusted_browser);	
 		// At startup time and on clicks in internal web browsers,
@@ -41,6 +42,8 @@ class LLURLDispatcher
 		//   secondlife://RegionName/123/45/67/
 		//   secondlife:///app/agent/3d6181b0-6a4b-97ef-18d8-722652995cf1/show
 		//   sl://app/foo/bar
+		// @param nav_type
+		//   type of navigation type (see LLQtWebKit::LLWebPage::acceptNavigationRequest)
 		// @param web
 		//	 Pointer to LLMediaCtrl sending URL, can be NULL
 		// @param trusted_browser
diff --git a/indra/newview/llurldispatcherlistener.cpp b/indra/newview/llurldispatcherlistener.cpp
index d0441d7bfaa1a113ae93ca190567aac80828c138..c7b9afafefc2286fc61b99a89ef53c3ee9290c80 100644
--- a/indra/newview/llurldispatcherlistener.cpp
+++ b/indra/newview/llurldispatcherlistener.cpp
@@ -61,7 +61,7 @@ void LLURLDispatcherListener::dispatch(const LLSD& params) const
         // But for testing, allow a caller to specify untrusted.
         trusted_browser = params["trusted"].asBoolean();
     }
-    LLURLDispatcher::dispatch(params["url"], NULL, trusted_browser);
+    LLURLDispatcher::dispatch(params["url"], "clicked", NULL, trusted_browser);
 }
 
 void LLURLDispatcherListener::dispatchRightClick(const LLSD& params) const
diff --git a/indra/newview/llviewerchat.cpp b/indra/newview/llviewerchat.cpp
index 7cce2831c99d691ce6d497e084c5e6fd5c137a6c..e7a0d17c3a42ed3e1e385437e51bd4595bfa9db8 100644
--- a/indra/newview/llviewerchat.cpp
+++ b/indra/newview/llviewerchat.cpp
@@ -31,9 +31,12 @@
 #include "llagent.h" 	// gAgent		
 #include "lluicolortable.h"
 #include "llviewercontrol.h" // gSavedSettings
+#include "llviewerregion.h"
+#include "llworld.h"
 #include "llinstantmessage.h" //SYSTEM_FROM
 
 // LLViewerChat
+LLViewerChat::font_change_signal_t LLViewerChat::sChatFontChangedSignal;
 
 //static 
 void LLViewerChat::getChatColor(const LLChat& chat, LLColor4& r_color)
@@ -216,3 +219,56 @@ void LLViewerChat::formatChatMsg(const LLChat& chat, std::string& formated_msg)
 
 }
 
+//static
+std::string LLViewerChat::getSenderSLURL(const LLChat& chat, const LLSD& args)
+{
+	switch (chat.mSourceType)
+	{
+	case CHAT_SOURCE_AGENT:
+		return LLSLURL("agent", chat.mFromID, "about").getSLURLString();
+
+	case CHAT_SOURCE_OBJECT:
+		return getObjectImSLURL(chat, args);
+
+	default:
+		llwarns << "Getting SLURL for an unsupported sender type: " << chat.mSourceType << llendl;
+	}
+
+	return LLStringUtil::null;
+}
+
+//static
+std::string LLViewerChat::getObjectImSLURL(const LLChat& chat, const LLSD& args)
+{
+	std::string url = LLSLURL("objectim", chat.mFromID, "").getSLURLString();
+	url += "?name=" + chat.mFromName;
+	url += "&owner=" + chat.mOwnerID.asString();
+
+	std::string slurl = args["slurl"].asString();
+	if (slurl.empty())
+	{
+		LLViewerRegion *region = LLWorld::getInstance()->getRegionFromPosAgent(chat.mPosAgent);
+		if(region)
+		{
+			LLSLURL region_slurl(region->getName(), chat.mPosAgent);
+			slurl = region_slurl.getLocationString();
+		}
+	}
+
+	url += "&slurl=" + LLURI::escape(slurl);
+
+	return url;
+}
+
+//static 
+boost::signals2::connection LLViewerChat::setFontChangedCallback(const font_change_signal_t::slot_type& cb)
+{
+	return sChatFontChangedSignal.connect(cb);
+}
+
+//static
+void LLViewerChat::signalChatFontChanged()
+{
+	// Notify all observers that our font has changed
+	sChatFontChangedSignal(getChatFont());
+}
diff --git a/indra/newview/llviewerchat.h b/indra/newview/llviewerchat.h
index a9f9a98960f06b60cc7c07d7ae390bbca65b83d4..c05caf0a951fd62ce676e37cc0179576971709b2 100644
--- a/indra/newview/llviewerchat.h
+++ b/indra/newview/llviewerchat.h
@@ -35,11 +35,21 @@
 class LLViewerChat 
 {
 public:
+	typedef boost::signals2::signal<void (LLFontGL*)> font_change_signal_t;
+
 	static void getChatColor(const LLChat& chat, LLColor4& r_color);
 	static void getChatColor(const LLChat& chat, std::string& r_color_name, F32& r_color_alpha);
 	static LLFontGL* getChatFont();
 	static S32 getChatFontSize();
 	static void formatChatMsg(const LLChat& chat, std::string& formated_msg);
+	static std::string getSenderSLURL(const LLChat& chat, const LLSD& args);
+
+	static boost::signals2::connection setFontChangedCallback(const font_change_signal_t::slot_type& cb);
+	static void signalChatFontChanged();
+
+private:
+	static std::string getObjectImSLURL(const LLChat& chat, const LLSD& args);
+	static font_change_signal_t sChatFontChangedSignal;
 
 };
 
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
index 3c53e54203c889196be62a0590a015bd3a512fcb..06c152031460c550a49325bce328c243b3b49b0d 100644
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -164,6 +164,12 @@ static bool handleAvatarLODChanged(const LLSD& newvalue)
 	return true;
 }
 
+static bool handleAvatarPhysicsLODChanged(const LLSD& newvalue)
+{
+	LLVOAvatar::sPhysicsLODFactor = (F32) newvalue.asReal();
+	return true;
+}
+
 static bool handleAvatarMaxVisibleChanged(const LLSD& newvalue)
 {
 	LLVOAvatar::sMaxVisible = (U32) newvalue.asInteger();
@@ -233,12 +239,6 @@ static bool handleVideoMemoryChanged(const LLSD& newvalue)
 	return true;
 }
 
-static bool handleBandwidthChanged(const LLSD& newvalue)
-{
-	gViewerThrottle.setMaxBandwidth((F32) newvalue.asReal());
-	return true;
-}
-
 static bool handleChatFontSizeChanged(const LLSD& newvalue)
 {
 	if(gConsole)
@@ -552,10 +552,10 @@ void settings_setup_listeners()
 	gSavedSettings.getControl("RenderAvatarMaxVisible")->getSignal()->connect(boost::bind(&handleAvatarMaxVisibleChanged, _2));
 	gSavedSettings.getControl("RenderVolumeLODFactor")->getSignal()->connect(boost::bind(&handleVolumeLODChanged, _2));
 	gSavedSettings.getControl("RenderAvatarLODFactor")->getSignal()->connect(boost::bind(&handleAvatarLODChanged, _2));
+	gSavedSettings.getControl("RenderAvatarPhysicsLODFactor")->getSignal()->connect(boost::bind(&handleAvatarPhysicsLODChanged, _2));
 	gSavedSettings.getControl("RenderTerrainLODFactor")->getSignal()->connect(boost::bind(&handleTerrainLODChanged, _2));
 	gSavedSettings.getControl("RenderTreeLODFactor")->getSignal()->connect(boost::bind(&handleTreeLODChanged, _2));
 	gSavedSettings.getControl("RenderFlexTimeFactor")->getSignal()->connect(boost::bind(&handleFlexLODChanged, _2));
-	gSavedSettings.getControl("ThrottleBandwidthKBPS")->getSignal()->connect(boost::bind(&handleBandwidthChanged, _2));
 	gSavedSettings.getControl("RenderGamma")->getSignal()->connect(boost::bind(&handleGammaChanged, _2));
 	gSavedSettings.getControl("RenderFogRatio")->getSignal()->connect(boost::bind(&handleFogRatioChanged, _2));
 	gSavedSettings.getControl("RenderMaxPartCount")->getSignal()->connect(boost::bind(&handleMaxPartCountChanged, _2));
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index 41b7c1382618717ef21eba3bf059b0c2f0823cbd..8593c4cf79055c6d037932db299b2c80f0742b8e 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -115,8 +115,7 @@ void display_startup()
 {
 	if (   !gViewerWindow->getActive()
 		|| !gViewerWindow->mWindow->getVisible() 
-		|| gViewerWindow->mWindow->getMinimized()
-		|| gNoRender )
+		|| gViewerWindow->mWindow->getMinimized() )
 	{
 		return; 
 	}
@@ -294,7 +293,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	// Logic for forcing window updates if we're in drone mode.
 	//
 
-	if (gNoRender) 
+	// *TODO: Investigate running display() during gHeadlessClient.  See if this early exit is needed DK 2011-02-18
+	if (gHeadlessClient) 
 	{
 #if LL_WINDOWS
 		static F32 last_update_time = 0.f;
@@ -1066,8 +1066,8 @@ bool get_hud_matrices(const LLRect& screen_region, glh::matrix4f &proj, glh::mat
 		F32 scale_y = (F32)gViewerWindow->getWorldViewHeightScaled() / (F32)screen_region.getHeight();
 		mat.set_scale(glh::vec3f(scale_x, scale_y, 1.f));
 		mat.set_translate(
-			glh::vec3f(clamp_rescale((F32)screen_region.getCenterX(), 0.f, (F32)gViewerWindow->getWorldViewWidthScaled(), 0.5f * scale_x * aspect_ratio, -0.5f * scale_x * aspect_ratio),
-					   clamp_rescale((F32)screen_region.getCenterY(), 0.f, (F32)gViewerWindow->getWorldViewHeightScaled(), 0.5f * scale_y, -0.5f * scale_y),
+			glh::vec3f(clamp_rescale((F32)(screen_region.getCenterX() - screen_region.mLeft), 0.f, (F32)gViewerWindow->getWorldViewWidthScaled(), 0.5f * scale_x * aspect_ratio, -0.5f * scale_x * aspect_ratio),
+					   clamp_rescale((F32)(screen_region.getCenterY() - screen_region.mBottom), 0.f, (F32)gViewerWindow->getWorldViewHeightScaled(), 0.5f * scale_y, -0.5f * scale_y),
 					   0.f));
 		proj *= mat;
 		
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index cc851e676b7035e3248e3d3684bedcea64e95775..9e58acdcd35308ee1b4011b0f138ca821fca8529 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -89,6 +89,7 @@ class LLLocalizedInventoryItemsDictionary : public LLSingleton<LLLocalizedInvent
 		mInventoryItemsDict["New Skirt"]		= LLTrans::getString("New Skirt");
 		mInventoryItemsDict["New Alpha"]		= LLTrans::getString("New Alpha");
 		mInventoryItemsDict["New Tattoo"]		= LLTrans::getString("New Tattoo");
+		mInventoryItemsDict["New Physics"]		= LLTrans::getString("New Physics");
 		mInventoryItemsDict["Invalid Wearable"] = LLTrans::getString("Invalid Wearable");
 
 		mInventoryItemsDict["New Gesture"]		= LLTrans::getString("New Gesture");
@@ -182,6 +183,12 @@ class LLInventoryHandler : public LLCommandHandler
 			return false;
 		}
 
+		if (!LLUI::sSettingGroups["config"]->getBOOL("EnableInventory"))
+		{
+				LLNotificationsUtil::add("NoInventory", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
+				return true;
+		}
+
 		// support secondlife:///app/inventory/show
 		if (params[0].asString() == "show")
 		{
@@ -1449,6 +1456,9 @@ class LLFavoritesOrderStorage : public LLSingleton<LLFavoritesOrderStorage>
 
 	void saveFavoritesSLURLs();
 
+	// Remove record of current user's favorites from file on disk.
+	void removeFavoritesRecordOfUser();
+
 	void onLandmarkLoaded(const LLUUID& asset_id, LLLandmark* landmark);
 	void storeFavoriteSLURL(const LLUUID& asset_id, std::string& slurl);
 
@@ -1533,6 +1543,10 @@ void LLFavoritesOrderStorage::destroyClass()
 	{
 		LLFavoritesOrderStorage::instance().saveFavoritesSLURLs();
 	}
+	else
+	{
+		LLFavoritesOrderStorage::instance().removeFavoritesRecordOfUser();
+	}
 }
 
 void LLFavoritesOrderStorage::load()
@@ -1601,6 +1615,28 @@ void LLFavoritesOrderStorage::saveFavoritesSLURLs()
 	LLSDSerialize::toPrettyXML(fav_llsd, file);
 }
 
+void LLFavoritesOrderStorage::removeFavoritesRecordOfUser()
+{
+	std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, "stored_favorites.xml");
+	LLSD fav_llsd;
+	llifstream file;
+	file.open(filename);
+	if (!file.is_open()) return;
+	LLSDSerialize::fromXML(fav_llsd, file);
+
+	LLAvatarName av_name;
+	LLAvatarNameCache::get( gAgentID, &av_name );
+	if (fav_llsd.has(av_name.getLegacyName()))
+	{
+		fav_llsd.erase(av_name.getLegacyName());
+	}
+
+	llofstream out_file;
+	out_file.open(filename);
+	LLSDSerialize::toPrettyXML(fav_llsd, out_file);
+
+}
+
 void LLFavoritesOrderStorage::onLandmarkLoaded(const LLUUID& asset_id, LLLandmark* landmark)
 {
 	if (!landmark) return;
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
index 900081b8c6b9102f8984f582f451cb1e15e146fb..037e22584f31c1764f1b6742f427b8ef1678b26b 100644
--- a/indra/newview/llviewermedia.cpp
+++ b/indra/newview/llviewermedia.cpp
@@ -59,6 +59,8 @@
 #include "lluuid.h"
 #include "llkeyboard.h"
 #include "llmutelist.h"
+#include "llpanelprofile.h"
+#include "llappviewer.h"
 //#include "llfirstuse.h"
 #include "llwindow.h"
 
@@ -292,6 +294,43 @@ LOG_CLASS(LLViewerMediaOpenIDResponder);
 
 };
 
+class LLViewerMediaWebProfileResponder : public LLHTTPClient::Responder
+{
+LOG_CLASS(LLViewerMediaWebProfileResponder);
+public:
+	LLViewerMediaWebProfileResponder(std::string host)
+	{
+		mHost = host;
+	}
+
+	~LLViewerMediaWebProfileResponder()
+	{
+	}
+
+	/* virtual */ void completedHeader(U32 status, const std::string& reason, const LLSD& content)
+	{
+		LL_WARNS("MediaAuth") << "status = " << status << ", reason = " << reason << LL_ENDL;
+		LL_WARNS("MediaAuth") << content << LL_ENDL;
+
+		std::string cookie = content["set-cookie"].asString();
+
+		LLViewerMedia::getCookieStore()->setCookiesFromHost(cookie, mHost);
+	}
+
+	 void completedRaw(
+		U32 status,
+		const std::string& reason,
+		const LLChannelDescriptors& channels,
+		const LLIOPipe::buffer_ptr_t& buffer)
+	{
+		// This is just here to disable the default behavior (attempting to parse the response as llsd).
+		// We don't care about the content of the response, only the set-cookie header.
+	}
+
+	std::string mHost;
+};
+
+
 LLPluginCookieStore *LLViewerMedia::sCookieStore = NULL;
 LLURL LLViewerMedia::sOpenIDURL;
 std::string LLViewerMedia::sOpenIDCookie;
@@ -1351,6 +1390,19 @@ void LLViewerMedia::setOpenIDCookie()
 
 		// *HACK: Doing this here is nasty, find a better way.
 		LLWebSharing::instance().setOpenIDCookie(sOpenIDCookie);
+
+		// Do a web profile get so we can store the cookie 
+		LLSD headers = LLSD::emptyMap();
+		headers["Accept"] = "*/*";
+		headers["Cookie"] = sOpenIDCookie;
+		headers["User-Agent"] = getCurrentUserAgent();
+
+		std::string profile_url = getProfileURL("");
+		LLURL raw_profile_url( profile_url.c_str() );
+
+		LLHTTPClient::get(profile_url,  
+			new LLViewerMediaWebProfileResponder(raw_profile_url.getAuthority()),
+			headers);
 	}
 }
 
@@ -1833,17 +1885,12 @@ bool LLViewerMediaImpl::initializePlugin(const std::string& media_type)
 			media_source->ignore_ssl_cert_errors(true);
 		}
 
-		// NOTE: Removed as per STORM-927 - SSL handshake failed - setting local self-signed certs like this 
-		//       seems to screw things up big time. For now, devs will need to add these certs locally and Qt will pick them up.
-//		// start by assuming the default CA file will be used
-//		std::string ca_path = gDirUtilp->getExpandedFilename( LL_PATH_APP_SETTINGS, "lindenlab.pem" );
-//		// default turned off so pick up the user specified path
-//		if( ! gSavedSettings.getBOOL("BrowserUseDefaultCAFile"))
-//		{
-//			ca_path = gSavedSettings.getString("BrowserCAFilePath");
-//		}
-//		// set the path to the CA.pem file
-//		media_source->addCertificateFilePath( ca_path );
+		// the correct way to deal with certs it to load ours from CA.pem and append them to the ones
+		// Qt/WebKit loads from your system location.
+		// Note: This needs the new CA.pem file with the Equifax Secure Certificate Authority 
+		// cert at the bottom: (MIIDIDCCAomgAwIBAgIENd70zzANBg)
+		std::string ca_path = gDirUtilp->getExpandedFilename( LL_PATH_APP_SETTINGS, "CA.pem" );
+		media_source->addCertificateFilePath( ca_path );
 
 		media_source->proxy_setup(gSavedSettings.getBOOL("BrowserProxyEnabled"), gSavedSettings.getString("BrowserProxyAddress"), gSavedSettings.getS32("BrowserProxyPort"));
 		
@@ -2496,23 +2543,7 @@ bool LLViewerMediaImpl::handleKeyHere(KEY key, MASK mask)
 		// Menu keys should be handled by the menu system and not passed to UI elements, but this is how LLTextEditor and LLLineEditor do it...
 		if( MASK_CONTROL & mask )
 		{
-			if( 'C' == key )
-			{
-				mMediaSource->copy();
-				result = true;
-			}
-			else
-			if( 'V' == key )
-			{
-				mMediaSource->paste();
-				result = true;
-			}
-			else
-			if( 'X' == key )
-			{
-				mMediaSource->cut();
-				result = true;
-			}
+			result = true;
 		}
 		
 		if(!result)
@@ -2953,7 +2984,8 @@ void LLViewerMediaImpl::handleMediaEvent(LLPluginClassMedia* plugin, LLPluginCla
 		{
 			LL_DEBUGS("Media") << "MEDIA_EVENT_CLICK_LINK_NOFOLLOW, uri is: " << plugin->getClickURL() << LL_ENDL; 
 			std::string url = plugin->getClickURL();
-			LLURLDispatcher::dispatch(url, NULL, mTrustedBrowser);
+			std::string nav_type = plugin->getClickNavType();
+			LLURLDispatcher::dispatch(url, nav_type, NULL, mTrustedBrowser);
 		}
 		break;
 		case MEDIA_EVENT_CLICK_LINK_HREF:
diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp
index de52aa17d183675359c04131b1b1536e5ee3f09d..4543a1ba9a7933465401f2caf23aaff4762c8651 100644
--- a/indra/newview/llviewermediafocus.cpp
+++ b/indra/newview/llviewermediafocus.cpp
@@ -113,6 +113,11 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac
 
 		media_impl->focus(true);
 		gFocusMgr.setKeyboardFocus(this);
+		LLViewerMediaImpl* impl = getFocusedMediaImpl();
+		if (impl)
+		{
+			LLEditMenuHandler::gEditMenuHandler = impl;
+		}
 		
 		// We must do this before  processing the media HUD zoom, or it may zoom to the wrong face. 
 		update();
@@ -139,6 +144,13 @@ void LLViewerMediaFocus::setFocusFace(LLPointer<LLViewerObject> objectp, S32 fac
 		{
 			gFocusMgr.setKeyboardFocus(NULL);
 		}
+
+		LLViewerMediaImpl* impl = getFocusedMediaImpl();
+		if (LLEditMenuHandler::gEditMenuHandler == impl)
+		{
+			LLEditMenuHandler::gEditMenuHandler = NULL;
+		}
+
 		
 		mFocusedImplID = LLUUID::null;
 		if (objectp.notNull())
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 425fe4eafbccbe87e1a5a5e211f9cfef693f2a0a..5a3baf26505fc8e7cd6b371fca0367db2f2a027d 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -843,32 +843,48 @@ class LLAdvancedCheckFeature : public view_listener_t
 }
 };
 
-void LLDestinationAndAvatarShow(const LLSD& value)
+void toggle_destination_and_avatar_picker(const LLSD& show)
 {
-	S32 panel_idx = value.isDefined() ? value.asInteger() : -1;
-	LLView* container = gViewerWindow->getRootView()->getChildView("avatar_picker_and_destination_guide_container");
+	S32 panel_idx = show.isDefined() ? show.asInteger() : -1;
+	LLView* container = gViewerWindow->getRootView()->findChildView("avatar_picker_and_destination_guide_container");
+	if (!container) return;
+
 	LLMediaCtrl* destinations = container->findChild<LLMediaCtrl>("destination_guide_contents");
 	LLMediaCtrl* avatar_picker = container->findChild<LLMediaCtrl>("avatar_picker_contents");
+	if (!destinations || !avatar_picker) return;
 
-	switch(panel_idx)
-	{
-	case 0:
+	LLButton* avatar_btn = gViewerWindow->getRootView()->getChildView("bottom_tray")->getChild<LLButton>("avatar_btn");
+	LLButton* destination_btn = gViewerWindow->getRootView()->getChildView("bottom_tray")->getChild<LLButton>("destination_btn");
+
+	if (panel_idx == 0
+		&& !destinations->getVisible())
+	{	// opening destinations guide
 		container->setVisible(true);
 		destinations->setVisible(true);
 		avatar_picker->setVisible(false);
 		LLFirstUse::notUsingDestinationGuide(false);
-		break;
-	case 1:
+		avatar_btn->setToggleState(false);
+		destination_btn->setToggleState(true);
+		gSavedSettings.setS32("DestinationsAndAvatarsVisibility", 0);
+	}
+	else if (panel_idx == 1 
+		&& !avatar_picker->getVisible())
+	{	// opening avatar picker
 		container->setVisible(true);
 		destinations->setVisible(false);
 		avatar_picker->setVisible(true);
-		LLFirstUse::notUsingAvatarPicker(false);
-		break;
-	default:
+		avatar_btn->setToggleState(true);
+		destination_btn->setToggleState(false);
+		gSavedSettings.setS32("DestinationsAndAvatarsVisibility", 1);
+	}
+	else
+	{	// toggling off dest guide or avatar picker
 		container->setVisible(false);
 		destinations->setVisible(false);
 		avatar_picker->setVisible(false);
-		break;
+		avatar_btn->setToggleState(false);
+		destination_btn->setToggleState(false);
+		gSavedSettings.setS32("DestinationsAndAvatarsVisibility", -1);
 	}
 };
 
@@ -3620,6 +3636,15 @@ class LLEnableEditShape : public view_listener_t
 	}
 };
 
+class LLEnableEditPhysics : public view_listener_t
+{
+	bool handleEvent(const LLSD& userdata)
+	{
+		//return gAgentWearables.isWearableModifiable(LLWearableType::WT_SHAPE, 0);
+		return TRUE;
+	}
+};
+
 bool is_object_sittable()
 {
 	LLViewerObject* object = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
@@ -5506,6 +5531,11 @@ void handle_edit_shape()
 	LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_shape"));
 }
 
+void handle_edit_physics()
+{
+	LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_physics"));
+}
+
 void handle_report_abuse()
 {
 	// Prevent menu from appearing in screen shot.
@@ -5542,20 +5572,42 @@ class LLShowHelp : public view_listener_t
 	}
 };
 
-class LLShowSidetrayPanel : public view_listener_t
+class LLToggleHelp : public view_listener_t
 {
 	bool handleEvent(const LLSD& userdata)
 	{
-		std::string panel_name = userdata.asString();
-		// Toggle the panel
-		if (!LLSideTray::getInstance()->isPanelActive(panel_name))
+		LLFloater* help_browser = (LLFloaterReg::findInstance("help_browser"));
+		if (help_browser && help_browser->isInVisibleChain())
 		{
-			// LLFloaterInventory::showAgentInventory();
-			LLSideTray::getInstance()->showPanel(panel_name, LLSD());
+			help_browser->closeFloater();
 		}
 		else
 		{
-			LLSideTray::getInstance()->collapseSideBar();
+			std::string help_topic = userdata.asString();
+			LLViewerHelp* vhelp = LLViewerHelp::getInstance();
+			vhelp->showTopic(help_topic);
+		}
+		return true;
+	}
+};
+
+class LLShowSidetrayPanel : public view_listener_t
+{
+	bool handleEvent(const LLSD& userdata)
+	{
+		std::string panel_name = userdata.asString();
+
+		LLPanel* panel = LLSideTray::getInstance()->getPanel(panel_name);
+		if (panel)
+		{
+			if (panel->isInVisibleChain())
+			{
+				LLSideTray::getInstance()->hidePanel(panel_name);
+			}
+			else
+			{
+				LLSideTray::getInstance()->showPanel(panel_name);
+			}
 		}
 		return true;
 	}
@@ -5684,6 +5736,44 @@ class LLShowAgentProfile : public view_listener_t
 	}
 };
 
+class LLToggleAgentProfile : public view_listener_t
+{
+	bool handleEvent(const LLSD& userdata)
+	{
+		LLUUID agent_id;
+		if (userdata.asString() == "agent")
+		{
+			agent_id = gAgent.getID();
+		}
+		else if (userdata.asString() == "hit object")
+		{
+			LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getPrimaryObject();
+			if (objectp)
+			{
+				agent_id = objectp->getID();
+			}
+		}
+		else
+		{
+			agent_id = userdata.asUUID();
+		}
+
+		LLVOAvatar* avatar = find_avatar_from_object(agent_id);
+		if (avatar)
+		{
+			if (!LLAvatarActions::profileVisible(avatar->getID()))
+			{
+				LLAvatarActions::showProfile(avatar->getID());
+			}
+			else
+			{
+				LLAvatarActions::hideProfile(avatar->getID());
+			}
+		}
+		return true;
+	}
+};
+
 class LLLandEdit : public view_listener_t
 {
 	bool handleEvent(const LLSD& userdata)
@@ -6322,12 +6412,12 @@ class LLToolsSelectedScriptAction : public view_listener_t
 		else if (action == "start")
 		{
 			name = "start_queue";
-			msg = "Running";
+			msg = "SetRunning";
 		}
 		else if (action == "stop")
 		{
 			name = "stop_queue";
-			msg = "RunningNot";
+			msg = "SetRunningNot";
 		}
 		LLUUID id; id.generate();
 		
@@ -7082,7 +7172,13 @@ LLViewerMenuHolderGL::LLViewerMenuHolderGL(const LLViewerMenuHolderGL::Params& p
 
 BOOL LLViewerMenuHolderGL::hideMenus()
 {
-	BOOL handled = LLMenuHolderGL::hideMenus();
+	BOOL handled = FALSE;
+	
+	if (LLMenuHolderGL::hideMenus())
+	{
+		LLToolPie::instance().blockClickToWalk();
+		handled = TRUE;
+	}
 
 	// drop pie menu selection
 	mParcelSelection = NULL;
@@ -7252,6 +7348,11 @@ class LLViewToggleBeacon : public view_listener_t
 			LLPipeline::toggleRenderPhysicalBeacons(NULL);
 			gSavedSettings.setBOOL( "physicalbeacon", LLPipeline::getRenderPhysicalBeacons(NULL) );
 		}
+		else if (beacon == "moapbeacon")
+		{
+			LLPipeline::toggleRenderMOAPBeacons(NULL);
+			gSavedSettings.setBOOL( "moapbeacon", LLPipeline::getRenderMOAPBeacons(NULL) );
+		}
 		else if (beacon == "soundsbeacon")
 		{
 			LLPipeline::toggleRenderSoundBeacons(NULL);
@@ -7311,6 +7412,11 @@ class LLViewCheckBeaconEnabled : public view_listener_t
 			new_value = gSavedSettings.getBOOL( "scriptsbeacon");
 			LLPipeline::setRenderScriptedBeacons(new_value);
 		}
+		else if (beacon == "moapbeacon")
+		{
+			new_value = gSavedSettings.getBOOL( "moapbeacon");
+			LLPipeline::setRenderMOAPBeacons(new_value);
+		}
 		else if (beacon == "physicalbeacon")
 		{
 			new_value = gSavedSettings.getBOOL( "physicalbeacon");
@@ -7731,9 +7837,11 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLEditEnableTakeOff(), "Edit.EnableTakeOff");
 	view_listener_t::addMenu(new LLEditEnableCustomizeAvatar(), "Edit.EnableCustomizeAvatar");
 	view_listener_t::addMenu(new LLEnableEditShape(), "Edit.EnableEditShape");
+	view_listener_t::addMenu(new LLEnableEditPhysics(), "Edit.EnableEditPhysics");
 	commit.add("CustomizeAvatar", boost::bind(&handle_customize_avatar));
 	commit.add("EditOutfit", boost::bind(&handle_edit_outfit));
 	commit.add("EditShape", boost::bind(&handle_edit_shape));
+	commit.add("EditPhysics", boost::bind(&handle_edit_physics));
 
 	// View menu
 	view_listener_t::addMenu(new LLViewMouselook(), "View.Mouselook");
@@ -8078,8 +8186,10 @@ void initialize_menus()
 	commit.add("ReportAbuse", boost::bind(&handle_report_abuse));
 	commit.add("BuyCurrency", boost::bind(&handle_buy_currency));
 	view_listener_t::addMenu(new LLShowHelp(), "ShowHelp");
+	view_listener_t::addMenu(new LLToggleHelp(), "ToggleHelp");
 	view_listener_t::addMenu(new LLPromptShowURL(), "PromptShowURL");
 	view_listener_t::addMenu(new LLShowAgentProfile(), "ShowAgentProfile");
+	view_listener_t::addMenu(new LLToggleAgentProfile(), "ToggleAgentProfile");
 	view_listener_t::addMenu(new LLToggleControl(), "ToggleControl");
 	view_listener_t::addMenu(new LLCheckControl(), "CheckControl");
 	view_listener_t::addMenu(new LLGoToObject(), "GoToObject");
@@ -8100,5 +8210,6 @@ void initialize_menus()
 
 	view_listener_t::addMenu(new LLToggleUIHints(), "ToggleUIHints");
 
-	commit.add("DestinationAndAvatar.show", boost::bind(&LLDestinationAndAvatarShow, _2));
+	commit.add("Destination.show", boost::bind(&toggle_destination_and_avatar_picker, 0));
+	commit.add("Avatar.show", boost::bind(&toggle_destination_and_avatar_picker, 1));
 }
diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h
index 87cb4efbc44fd2411f550bd76b320d8af6518773..b4e239b0cd76daf17ae398dac083aafbf6df0f25 100644
--- a/indra/newview/llviewermenu.h
+++ b/indra/newview/llviewermenu.h
@@ -126,6 +126,8 @@ bool enable_pay_object();
 bool enable_buy_object();
 bool handle_go_to();
 
+void toggle_destination_and_avatar_picker(const LLSD& show);
+
 // Export to XML or Collada
 void handle_export_selected( void * );
 
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index fda291f3c1ce9e29f0e70b44a5ba7c60469ba77f..2cf8dbec89ec798e1a637eb8da2504aa78904def 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -493,6 +493,7 @@ void upload_new_resource(const std::string& src_filename, std::string name,
 	LLSD args;
 
 	std::string exten = gDirUtilp->getExtension(src_filename);
+	U32 codec = LLImageBase::getCodecFromExtension(exten);
 	LLAssetType::EType asset_type = LLAssetType::AT_NONE;
 	std::string error_message;
 
@@ -510,66 +511,20 @@ void upload_new_resource(const std::string& src_filename, std::string name,
  		upload_error(error_message, "NoFileExtension", filename, args);
 		return;
 	}
-	else if( exten == "bmp")
+	else if (codec != IMG_CODEC_INVALID)
 	{
+		// It's an image file, the upload procedure is the same for all
 		asset_type = LLAssetType::AT_TEXTURE;
-		if (!LLViewerTextureList::createUploadFile(src_filename,
-												 filename,
-												 IMG_CODEC_BMP ))
+		if (!LLViewerTextureList::createUploadFile(src_filename, filename, codec ))
 		{
 			error_message = llformat( "Problem with file %s:\n\n%s\n",
-					src_filename.c_str(), LLImage::getLastError().c_str());
+									 src_filename.c_str(), LLImage::getLastError().c_str());
 			args["FILE"] = src_filename;
 			args["ERROR"] = LLImage::getLastError();
 			upload_error(error_message, "ProblemWithFile", filename, args);
 			return;
 		}
 	}
-	else if( exten == "tga")
-	{
-		asset_type = LLAssetType::AT_TEXTURE;
-		if (!LLViewerTextureList::createUploadFile(src_filename,
-												 filename,
-												 IMG_CODEC_TGA ))
-		{
-			error_message = llformat("Problem with file %s:\n\n%s\n",
-					src_filename.c_str(), LLImage::getLastError().c_str());
-			args["FILE"] = src_filename;
-			args["ERROR"] = LLImage::getLastError();
-			upload_error(error_message, "ProblemWithFile", filename, args);
-			return;
-		}
-	}
-	else if( exten == "jpg" || exten == "jpeg")
-	{
-		asset_type = LLAssetType::AT_TEXTURE;
-		if (!LLViewerTextureList::createUploadFile(src_filename,
-												 filename,
-												 IMG_CODEC_JPEG ))
-		{
-			error_message = llformat("Problem with file %s:\n\n%s\n",
-					src_filename.c_str(), LLImage::getLastError().c_str());
-			args["FILE"] = src_filename;
-			args["ERROR"] = LLImage::getLastError();
-			upload_error(error_message, "ProblemWithFile", filename, args);
-			return;
-		}
-	}
- 	else if( exten == "png")
- 	{
- 		asset_type = LLAssetType::AT_TEXTURE;
- 		if (!LLViewerTextureList::createUploadFile(src_filename,
- 												 filename,
- 												 IMG_CODEC_PNG ))
- 		{
- 			error_message = llformat("Problem with file %s:\n\n%s\n",
- 					src_filename.c_str(), LLImage::getLastError().c_str());
- 			args["FILE"] = src_filename;
- 			args["ERROR"] = LLImage::getLastError();
- 			upload_error(error_message, "ProblemWithFile", filename, args);
- 			return;
- 		}
- 	}
 	else if(exten == "wav")
 	{
 		asset_type = LLAssetType::AT_SOUND;  // tag it as audio
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 4dd5a3f6f12479393c4b0399ba6977bfd4d8668a..3b32ad66e03a6e298e52a6a4600fcfdd8d53ad4b 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -344,12 +344,6 @@ void process_layer_data(LLMessageSystem *mesgsys, void **user_data)
 {
 	LLViewerRegion *regionp = LLWorld::getInstance()->getRegion(mesgsys->getSender());
 
-	if (!regionp || gNoRender)
-	{
-		return;
-	}
-
-
 	S32 size;
 	S8 type;
 
@@ -1200,7 +1194,6 @@ void open_inventory_offer(const uuid_vec_t& objects, const std::string& from_nam
 		// Highlight item
 		const BOOL auto_open = 
 			gSavedSettings.getBOOL("ShowInInventory") && // don't open if showininventory is false
-			!(asset_type == LLAssetType::AT_CALLINGCARD) && // don't open if it's a calling card
 			!from_name.empty(); // don't open if it's not from anyone.
 		LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(auto_open);
 		if(active_panel)
@@ -1464,15 +1457,18 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD&
 				// This is an offer from an agent. In this case, the back
 				// end has already copied the items into your inventory,
 				// so we can fetch it out of our inventory.
-				LLOpenAgentOffer* open_agent_offer = new LLOpenAgentOffer(mObjectID, from_string);
-				open_agent_offer->startFetch();
-				if(catp || (itemp && itemp->isFinished()))
+				if (gSavedSettings.getBOOL("ShowOfferedInventory"))
 				{
-					open_agent_offer->done();
-				}
-				else
-				{
-					opener = open_agent_offer;
+					LLOpenAgentOffer* open_agent_offer = new LLOpenAgentOffer(mObjectID, from_string);
+					open_agent_offer->startFetch();
+					if(catp || (itemp && itemp->isFinished()))
+					{
+						open_agent_offer->done();
+					}
+					else
+					{
+						opener = open_agent_offer;
+					}
 				}
 			}
 			break;
@@ -1716,15 +1712,18 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const
 			msg->addBinaryDataFast(_PREHASH_BinaryBucket, EMPTY_BINARY_BUCKET, EMPTY_BINARY_BUCKET_SIZE);
 			// send the message
 			msg->sendReliable(mHost);
+
+			if (gSavedSettings.getBOOL("LogInventoryDecline"))
 			{
 				LLStringUtil::format_map_t log_message_args;
 				log_message_args["DESC"] = mDesc;
 				log_message_args["NAME"] = mFromName;
 				log_message = LLTrans::getString("InvOfferDecline", log_message_args);
+
+				LLSD args;
+				args["MESSAGE"] = log_message;
+				LLNotificationsUtil::add("SystemMessage", args);
 			}
-			LLSD args;
-			args["MESSAGE"] = log_message;
-			LLNotificationsUtil::add("SystemMessage", args);
 			
 			if (busy &&	(!mFromGroup && !mFromObject))
 			{
@@ -2164,10 +2163,6 @@ void god_message_name_cb(const LLAvatarName& av_name, LLChat chat, std::string m
 
 void process_improved_im(LLMessageSystem *msg, void **user_data)
 {
-	if (gNoRender)
-	{
-		return;
-	}
 	LLUUID from_id;
 	BOOL from_group;
 	LLUUID to_id;
@@ -3956,7 +3951,9 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
 	// LBUTTON and ML_LBUTTON so that using the camera (alt-key) doesn't
 	// trigger a control event.
 	U32 control_flags = gAgent.getControlFlags();
+
 	MASK	key_mask = gKeyboard->currentMask(TRUE);
+
 	if (key_mask & MASK_ALT || key_mask & MASK_CONTROL)
 	{
 		control_flags &= ~(	AGENT_CONTROL_LBUTTON_DOWN |
@@ -4275,7 +4272,7 @@ void process_time_synch(LLMessageSystem *mesgsys, void **user_data)
 
 	gSky.setSunPhase(phase);
 	gSky.setSunTargetDirection(sun_direction, sun_ang_velocity);
-	if (!gNoRender && !(gSavedSettings.getBOOL("SkyOverrideSimSunPosition") || gSky.getOverrideSun()))
+	if ( !(gSavedSettings.getBOOL("SkyOverrideSimSunPosition") || gSky.getOverrideSun()) )
 	{
 		gSky.setSunDirection(sun_direction, sun_ang_velocity);
 	}
@@ -5527,7 +5524,11 @@ void process_alert_core(const std::string& message, BOOL modal)
 	{
 		LLSD args;
 		std::string new_msg =LLNotifications::instance().getGlobalString(message);
-		args["MESSAGE"] = new_msg;
+
+		std::string localized_msg;
+		bool is_message_localized = LLTrans::findString(localized_msg, new_msg);
+
+		args["MESSAGE"] = is_message_localized ? localized_msg : new_msg;
 		LLNotificationsUtil::add("SystemMessageTip", args);
 	}
 }
@@ -5537,21 +5538,12 @@ time_t								gLastDisplayedTime = 0;
 
 void handle_show_mean_events(void *)
 {
-	if (gNoRender)
-	{
-		return;
-	}
 	LLFloaterReg::showInstance("bumps");
 	//LLFloaterBump::showInstance();
 }
 
 void mean_name_callback(const LLUUID &id, const std::string& full_name, bool is_group)
 {
-	if (gNoRender)
-	{
-		return;
-	}
-
 	static const U32 max_collision_list_size = 20;
 	if (gMeanCollisionList.size() > max_collision_list_size)
 	{
diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp
index b91e407c6dc36734b5696082f5028921936cb4ad..a59afdc28a5832ade878bfe61cdb38c49850dfcb 100644
--- a/indra/newview/llviewernetwork.cpp
+++ b/indra/newview/llviewernetwork.cpp
@@ -31,6 +31,7 @@
 #include "llviewercontrol.h"
 #include "llsdserialize.h"
 #include "llsecapi.h"
+#include "lltrans.h"
 #include "llweb.h"
 
                                                             
@@ -504,7 +505,8 @@ void LLGridManager::setGridChoice(const std::string& grid)
 		addGrid(grid_data);		
 	}
 	mGrid = grid;
-	gSavedSettings.setString("CurrentGrid", grid); 
+	gSavedSettings.setString("CurrentGrid", grid);
+
 	updateIsInProductionGrid();
 }
 
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
index 32cd8dbb390d9ed818ac8d9a01883059aec85c15..e8828e63a967cad904ede0c4b63789f66b15938c 100644
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -469,11 +469,6 @@ void LLViewerObject::initVOClasses()
 	// Initialized shared class stuff first.
 	LLVOAvatar::initClass();
 	LLVOTree::initClass();
-	if (gNoRender)
-	{
-		// Don't init anything else in drone mode
-		return;
-	}
 	llinfos << "Viewer Object size: " << sizeof(LLViewerObject) << llendl;
 	LLVOGrass::initClass();
 	LLVOWater::initClass();
@@ -2150,12 +2145,6 @@ BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
 		}
 	}
 
-	if (gNoRender)
-	{
-		// Skip drawable stuff if not rendering.
-		return TRUE;
-	}
-
 	updateDrawable(FALSE);
 
 	return TRUE;
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
index 81479e8b491dd823fd358954a3eebfc9f18e311a..da95bacc41e6dca3f271ff399554a9b2276cd0e6 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -636,19 +636,16 @@ void LLViewerObjectList::updateApparentAngles(LLAgent &agent)
 	}
 
 
-	if (!gNoRender)
+	// Slam priorities for textures that we care about (hovered, selected, and focused)
+	// Hovered
+	// Assumes only one level deep of parenting
+	LLSelectNode* nodep = LLSelectMgr::instance().getHoverNode();
+	if (nodep)
 	{
-		// Slam priorities for textures that we care about (hovered, selected, and focused)
-		// Hovered
-		// Assumes only one level deep of parenting
-		LLSelectNode* nodep = LLSelectMgr::instance().getHoverNode();
-		if (nodep)
+		objectp = nodep->getObject();
+		if (objectp)
 		{
-			objectp = nodep->getObject();
-			if (objectp)
-			{
-				objectp->boostTexturePriority();
-			}
+			objectp->boostTexturePriority();
 		}
 	}
 
@@ -1100,7 +1097,7 @@ void LLViewerObjectList::shiftObjects(const LLVector3 &offset)
 	// We need to update many object caches, I'll document this more as I dig through the code
 	// cleaning things out...
 
-	if (gNoRender || 0 == offset.magVecSquared())
+	if (0 == offset.magVecSquared())
 	{
 		return;
 	}
@@ -1180,6 +1177,7 @@ void LLViewerObjectList::clearAllMapObjectsInRegion(LLViewerRegion* regionp)
 	}
 }
 
+
 void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap)
 {
 	LLColor4 above_water_color = LLUIColorTable::instance().getColor( "NetMapOtherOwnAboveWater" );
@@ -1199,7 +1197,6 @@ void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap)
 	{
 		LLViewerObject* objectp = *iter;
 
-		//llassert_always(!objectp->isDead());
 		if(objectp->isDead())//some dead objects somehow not cleaned.
 		{
 			continue ;
@@ -1568,11 +1565,6 @@ void LLViewerObjectList::orphanize(LLViewerObject *childp, U32 parent_id, U32 ip
 
 void LLViewerObjectList::findOrphans(LLViewerObject* objectp, U32 ip, U32 port)
 {
-	if (gNoRender)
-	{
-		return;
-	}
-
 	if (objectp->isDead())
 	{
 		llwarns << "Trying to find orphans for dead obj " << objectp->mID 
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
index 40f0b433132389ca31151802c440b2e80fdfd1b8..dfa35edef46b505135f8f792cb79a23f6722b992 100644
--- a/indra/newview/llviewerparcelmedia.cpp
+++ b/indra/newview/llviewerparcelmedia.cpp
@@ -539,6 +539,12 @@ void LLViewerParcelMedia::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent
 		};
 		break;
 
+		case MEDIA_EVENT_NAVIGATE_ERROR_PAGE:
+		{
+			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_NAVIGATE_ERROR_PAGE" << LL_ENDL;
+		};
+		break;
+
 		case MEDIA_EVENT_CLICK_LINK_HREF:
 		{
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_CLICK_LINK_HREF, target is \"" << self->getClickTarget() << "\", uri is " << self->getClickURL() << LL_ENDL;
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
index fccd1156d3f613821459969a6a74566615572461..e84e4a859a04df99b7130a4e0bca63aa63a9b0e8 100644
--- a/indra/newview/llviewerparcelmgr.cpp
+++ b/indra/newview/llviewerparcelmgr.cpp
@@ -1383,11 +1383,6 @@ void LLViewerParcelMgr::setHoverParcel(const LLVector3d& pos)
 // static
 void LLViewerParcelMgr::processParcelOverlay(LLMessageSystem *msg, void **user)
 {
-	if (gNoRender)
-	{
-		return;
-	}
-
 	// Extract the packed overlay information
 	S32 packed_overlay_size = msg->getSizeFast(_PREHASH_ParcelData, _PREHASH_Data);
 
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index 23b7b921b8ce1ca94a74b0c2953d8ac4cc8ae67d..c53fdc339338568347a32f0ce3c9e46f7710b05b 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -67,13 +67,12 @@
 #include "llworld.h"
 #include "llspatialpartition.h"
 #include "stringize.h"
+#include "llviewercontrol.h"
 
 #ifdef LL_WINDOWS
 	#pragma warning(disable:4355)
 #endif
 
-extern BOOL gNoRender;
-
 const F32 WATER_TEXTURE_SCALE = 8.f;			//  Number of times to repeat the water texture across a region
 const S16 MAX_MAP_DIST = 10;
 
@@ -110,7 +109,7 @@ class LLRegionHandler : public LLCommandHandler
 		}
 
 		// Process the SLapp as if it was a secondlife://{PLACE} SLurl
-		LLURLDispatcher::dispatch(url, web, true);
+		LLURLDispatcher::dispatch(url, "clicked", web, true);
 		return true;
 	}
 };
@@ -234,28 +233,19 @@ LLViewerRegion::LLViewerRegion(const U64 &handle,
 	updateRenderMatrix();
 
 	mLandp = new LLSurface('l', NULL);
-	if (!gNoRender)
-	{
-		// Create the composition layer for the surface
-		mCompositionp = new LLVLComposition(mLandp, grids_per_region_edge, region_width_meters/grids_per_region_edge);
-		mCompositionp->setSurface(mLandp);
-
-		// Create the surfaces
-		mLandp->setRegion(this);
-		mLandp->create(grids_per_region_edge,
-						grids_per_patch_edge,
-						mOriginGlobal,
-						mWidth);
-	}
 
-	if (!gNoRender)
-	{
-		mParcelOverlay = new LLViewerParcelOverlay(this, region_width_meters);
-	}
-	else
-	{
-		mParcelOverlay = NULL;
-	}
+	// Create the composition layer for the surface
+	mCompositionp = new LLVLComposition(mLandp, grids_per_region_edge, region_width_meters/grids_per_region_edge);
+	mCompositionp->setSurface(mLandp);
+
+	// Create the surfaces
+	mLandp->setRegion(this);
+	mLandp->create(grids_per_region_edge,
+					grids_per_patch_edge,
+					mOriginGlobal,
+					mWidth);
+
+	mParcelOverlay = new LLViewerParcelOverlay(this, region_width_meters);
 
 	setOriginGlobal(from_region_handle(handle));
 	calculateCenterGlobal();
@@ -1387,10 +1377,15 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
 	capabilityNames.append("EventQueueGet");
 	capabilityNames.append("ObjectMedia");
 	capabilityNames.append("ObjectMediaNavigate");
-	capabilityNames.append("FetchLib2");
-	capabilityNames.append("FetchLibDescendents2");
-	capabilityNames.append("FetchInventory2");
-	capabilityNames.append("FetchInventoryDescendents2");
+
+	if (gSavedSettings.getBOOL("UseHTTPInventory"))
+	{
+		capabilityNames.append("FetchLib2");
+		capabilityNames.append("FetchLibDescendents2");
+		capabilityNames.append("FetchInventory2");
+		capabilityNames.append("FetchInventoryDescendents2");
+	}
+
 	capabilityNames.append("GetDisplayNames");
 	capabilityNames.append("GetTexture");
 	capabilityNames.append("GroupProposalBallot");
diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp
index 546ee9a334b05646dae5492aa8aa71b01326d187..fa60e572ac44a268aed21aae4c200fbd807824ed 100644
--- a/indra/newview/llviewerstats.cpp
+++ b/indra/newview/llviewerstats.cpp
@@ -711,7 +711,7 @@ void send_stats()
 	// but that day is not today.
 
 	// Only send stats if the agent is connected to a region.
-	if (!gAgent.getRegion() || gNoRender)
+	if (!gAgent.getRegion())
 	{
 		return;
 	}
@@ -852,6 +852,8 @@ void send_stats()
 	body["DisplayNamesEnabled"] = gSavedSettings.getBOOL("UseDisplayNames");
 	body["DisplayNamesShowUsername"] = gSavedSettings.getBOOL("NameTagShowUsernames");
 	
+	body["MinimalSkin"] = !gSavedSettings.getString("SessionSettingsFile").empty();
+	
 	LLViewerStats::getInstance()->addToMessage(body);
 	LLHTTPClient::post(url, body, new ViewerStatsResponder());
 }
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index cf7f3f80adc11cd56ce166b649e56009d66bc24e..f5fb074992adce532399cc7f2d61dabd2a2e096f 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -1415,63 +1415,61 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/)
 // 						mRawImage->getWidth(), mRawImage->getHeight(),mRawImage->getDataSize())
 // 			<< mID.getString() << llendl;
 	BOOL res = TRUE;
-	if (!gNoRender)
-	{
-		// store original size only for locally-sourced images
-		if (mUrl.compare(0, 7, "file://") == 0)
-		{
-			mOrigWidth = mRawImage->getWidth();
-			mOrigHeight = mRawImage->getHeight();
 
-			// leave black border, do not scale image content
-			mRawImage->expandToPowerOfTwo(MAX_IMAGE_SIZE, FALSE);
-			
-			mFullWidth = mRawImage->getWidth();
-			mFullHeight = mRawImage->getHeight();
-			setTexelsPerImage();
-		}
-		else
-		{
-			mOrigWidth = mFullWidth;
-			mOrigHeight = mFullHeight;
-		}
+	// store original size only for locally-sourced images
+	if (mUrl.compare(0, 7, "file://") == 0)
+	{
+		mOrigWidth = mRawImage->getWidth();
+		mOrigHeight = mRawImage->getHeight();
 
-		bool size_okay = true;
+		// leave black border, do not scale image content
+		mRawImage->expandToPowerOfTwo(MAX_IMAGE_SIZE, FALSE);
 		
-		U32 raw_width = mRawImage->getWidth() << mRawDiscardLevel;
-		U32 raw_height = mRawImage->getHeight() << mRawDiscardLevel;
-		if( raw_width > MAX_IMAGE_SIZE || raw_height > MAX_IMAGE_SIZE )
-		{
-			llinfos << "Width or height is greater than " << MAX_IMAGE_SIZE << ": (" << raw_width << "," << raw_height << ")" << llendl;
-			size_okay = false;
-		}
-		
-		if (!LLImageGL::checkSize(mRawImage->getWidth(), mRawImage->getHeight()))
-		{
-			// A non power-of-two image was uploaded (through a non standard client)
-			llinfos << "Non power of two width or height: (" << mRawImage->getWidth() << "," << mRawImage->getHeight() << ")" << llendl;
-			size_okay = false;
-		}
-		
-		if( !size_okay )
-		{
-			// An inappropriately-sized image was uploaded (through a non standard client)
-			// We treat these images as missing assets which causes them to
-			// be renderd as 'missing image' and to stop requesting data
-			setIsMissingAsset();
-			destroyRawImage();
-			return FALSE;
-		}
-		
-		if(!(res = insertToAtlas()))
-		{
-			res = mGLTexturep->createGLTexture(mRawDiscardLevel, mRawImage, usename, TRUE, mBoostLevel);
-			resetFaceAtlas() ;
-		}
-		setActive() ;
+		mFullWidth = mRawImage->getWidth();
+		mFullHeight = mRawImage->getHeight();
+		setTexelsPerImage();
+	}
+	else
+	{
+		mOrigWidth = mFullWidth;
+		mOrigHeight = mFullHeight;
+	}
+
+	bool size_okay = true;
+	
+	U32 raw_width = mRawImage->getWidth() << mRawDiscardLevel;
+	U32 raw_height = mRawImage->getHeight() << mRawDiscardLevel;
+	if( raw_width > MAX_IMAGE_SIZE || raw_height > MAX_IMAGE_SIZE )
+	{
+		llinfos << "Width or height is greater than " << MAX_IMAGE_SIZE << ": (" << raw_width << "," << raw_height << ")" << llendl;
+		size_okay = false;
+	}
+	
+	if (!LLImageGL::checkSize(mRawImage->getWidth(), mRawImage->getHeight()))
+	{
+		// A non power-of-two image was uploaded (through a non standard client)
+		llinfos << "Non power of two width or height: (" << mRawImage->getWidth() << "," << mRawImage->getHeight() << ")" << llendl;
+		size_okay = false;
+	}
+	
+	if( !size_okay )
+	{
+		// An inappropriately-sized image was uploaded (through a non standard client)
+		// We treat these images as missing assets which causes them to
+		// be renderd as 'missing image' and to stop requesting data
+		setIsMissingAsset();
+		destroyRawImage();
+		return FALSE;
+	}
+	
+	if(!(res = insertToAtlas()))
+	{
+		res = mGLTexturep->createGLTexture(mRawDiscardLevel, mRawImage, usename, TRUE, mBoostLevel);
+		resetFaceAtlas() ;
 	}
+	setActive() ;
 
-	if (!mForceToSaveRawImage)
+	if (!needsToSaveRawImage())
 	{
 		mNeedsAux = FALSE;
 		destroyRawImage();
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
index 10126219f8b943f1e2da0c55d780da9e8af89070..5afed721acf819f672025ca463b0386cb1755021 100644
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -91,11 +91,6 @@ void LLViewerTextureList::init()
 	sNumImages = 0;
 	mMaxResidentTexMemInMegaBytes = 0;
 	mMaxTotalTextureMemInMegaBytes = 0 ;
-	if (gNoRender)
-	{
-		// Don't initialize GL stuff if we're not rendering.
-		return;
-	}
 	
 	mUpdateStats = TRUE;
 	
@@ -345,13 +340,6 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromUrl(const std::string&
 												   LLGLenum primary_format, 
 												   const LLUUID& force_id)
 {
-	if (gNoRender)
-	{
-		// Never mind that this ignores image_set_id;
-		// getImage() will handle that later.
-		return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLViewerTexture::BOOST_UI);
-	}
-
 	// generate UUID based on hash of filename
 	LLUUID new_id;
 	if (force_id.notNull())
@@ -741,7 +729,7 @@ static LLFastTimer::DeclareTimer FTM_IMAGE_CREATE("Create Images");
 
 F32 LLViewerTextureList::updateImagesCreateTextures(F32 max_time)
 {
-	if (gNoRender || gGLManager.mIsDisabled) return 0.0f;
+	if (gGLManager.mIsDisabled) return 0.0f;
 	
 	//
 	// Create GL textures for all textures that need them (images which have been
@@ -876,7 +864,6 @@ void LLViewerTextureList::updateImagesUpdateStats()
 void LLViewerTextureList::decodeAllImages(F32 max_time)
 {
 	LLTimer timer;
-	if(gNoRender) return;
 	
 	// Update texture stats and priorities
 	std::vector<LLPointer<LLViewerFetchedTexture> > image_list;
@@ -940,99 +927,43 @@ void LLViewerTextureList::decodeAllImages(F32 max_time)
 BOOL LLViewerTextureList::createUploadFile(const std::string& filename,
 										 const std::string& out_filename,
 										 const U8 codec)
-{
-	// First, load the image.
+{	
+	// Load the image
+	LLPointer<LLImageFormatted> image = LLImageFormatted::createFromType(codec);
+	if (image.isNull())
+	{
+		return FALSE;
+	}	
+	if (!image->load(filename))
+	{
+		return FALSE;
+	}
+	// Decompress or expand it in a raw image structure
 	LLPointer<LLImageRaw> raw_image = new LLImageRaw;
-	
-	switch (codec)
+	if (!image->decode(raw_image, 0.0f))
 	{
-		case IMG_CODEC_BMP:
-		{
-			LLPointer<LLImageBMP> bmp_image = new LLImageBMP;
-			
-			if (!bmp_image->load(filename))
-			{
-				return FALSE;
-			}
-			
-			if (!bmp_image->decode(raw_image, 0.0f))
-			{
-				return FALSE;
-			}
-		}
-			break;
-		case IMG_CODEC_TGA:
-		{
-			LLPointer<LLImageTGA> tga_image = new LLImageTGA;
-			
-			if (!tga_image->load(filename))
-			{
-				return FALSE;
-			}
-			
-			if (!tga_image->decode(raw_image))
-			{
-				return FALSE;
-			}
-			
-			if(	(tga_image->getComponents() != 3) &&
-			   (tga_image->getComponents() != 4) )
-			{
-				tga_image->setLastError( "Image files with less than 3 or more than 4 components are not supported." );
-				return FALSE;
-			}
-		}
-			break;
-		case IMG_CODEC_JPEG:
-		{
-			LLPointer<LLImageJPEG> jpeg_image = new LLImageJPEG;
-			
-			if (!jpeg_image->load(filename))
-			{
-				return FALSE;
-			}
-			
-			if (!jpeg_image->decode(raw_image, 0.0f))
-			{
-				return FALSE;
-			}
-		}
-			break;
-		case IMG_CODEC_PNG:
-		{
-			LLPointer<LLImagePNG> png_image = new LLImagePNG;
-			
-			if (!png_image->load(filename))
-			{
-				return FALSE;
-			}
-			
-			if (!png_image->decode(raw_image, 0.0f))
-			{
-				return FALSE;
-			}
-		}
-			break;
-		default:
-			return FALSE;
+		return FALSE;
 	}
-	
-	LLPointer<LLImageJ2C> compressedImage = convertToUploadFile(raw_image);
-	
-	if( !compressedImage->save(out_filename) )
+	// Check the image constraints
+	if ((image->getComponents() != 3) && (image->getComponents() != 4))
 	{
-		llinfos << "Couldn't create output file " << out_filename << llendl;
+		image->setLastError("Image files with less than 3 or more than 4 components are not supported.");
 		return FALSE;
 	}
-	
-	// test to see if the encode and save worked.
+	// Convert to j2c (JPEG2000) and save the file locally
+	LLPointer<LLImageJ2C> compressedImage = convertToUploadFile(raw_image);	
+	if (!compressedImage->save(out_filename))
+	{
+		llinfos << "Couldn't create output file : " << out_filename << llendl;
+		return FALSE;
+	}
+	// Test to see if the encode and save worked
 	LLPointer<LLImageJ2C> integrity_test = new LLImageJ2C;
-	if( !integrity_test->loadAndValidate( out_filename ) )
+	if (!integrity_test->loadAndValidate( out_filename ))
 	{
-		llinfos << "Image: " << out_filename << " is corrupt." << llendl;
+		llinfos << "Image file : " << out_filename << " is corrupt" << llendl;
 		return FALSE;
 	}
-	
 	return TRUE;
 }
 
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 62944a22e7e8ce9a46c5f568e996890b67f1b5d1..e0202968429b6f87fd0d4e54d4709ba729689667 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -572,21 +572,30 @@ class LLDebugText
 		// only display these messages if we are actually rendering beacons at this moment
 		if (LLPipeline::getRenderBeacons(NULL) && LLFloaterReg::instanceVisible("beacons"))
 		{
-			if (LLPipeline::getRenderParticleBeacons(NULL))
+			if (LLPipeline::getRenderMOAPBeacons(NULL))
 			{
-				addText(xpos, ypos, beacon_particle);
+				addText(xpos, ypos, "Viewing media beacons (white)");
 				ypos += y_inc;
 			}
+
 			if (LLPipeline::toggleRenderTypeControlNegated((void*)LLPipeline::RENDER_TYPE_PARTICLES))
 			{
 				addText(xpos, ypos, particle_hiding);
 				ypos += y_inc;
 			}
-			if (LLPipeline::getRenderPhysicalBeacons(NULL))
+
+			if (LLPipeline::getRenderParticleBeacons(NULL))
+			{
+				addText(xpos, ypos, "Viewing particle beacons (blue)");
+				ypos += y_inc;
+			}
+
+			if (LLPipeline::getRenderSoundBeacons(NULL))
 			{
-				addText(xpos, ypos, beacon_physical);
+				addText(xpos, ypos, "Viewing sound beacons (yellow)");
 				ypos += y_inc;
 			}
+
 			if (LLPipeline::getRenderScriptedBeacons(NULL))
 			{
 				addText(xpos, ypos, beacon_scripted);
@@ -598,9 +607,10 @@ class LLDebugText
 					addText(xpos, ypos, beacon_scripted_touch);
 					ypos += y_inc;
 				}
-			if (LLPipeline::getRenderSoundBeacons(NULL))
+
+			if (LLPipeline::getRenderPhysicalBeacons(NULL))
 			{
-				addText(xpos, ypos, beacon_sound);
+				addText(xpos, ypos, "Viewing physical object beacons (green)");
 				ypos += y_inc;
 			}
 		}
@@ -915,7 +925,7 @@ LLWindowCallbacks::DragNDropResult LLViewerWindow::handleDragNDrop( LLWindow *wi
 					{
 						if (drop)
 						{
-							LLURLDispatcher::dispatch( dropped_slurl.getSLURLString(), NULL, true );
+							LLURLDispatcher::dispatch( dropped_slurl.getSLURLString(), "clicked", NULL, true );
 							return LLWindowCallbacks::DND_MOVE;
 						}
 						return LLWindowCallbacks::DND_COPY;
@@ -1241,8 +1251,9 @@ void LLViewerWindow::handleMenuSelect(LLWindow *window,  S32 menu_item)
 
 BOOL LLViewerWindow::handlePaint(LLWindow *window,  S32 x,  S32 y, S32 width,  S32 height)
 {
+	// *TODO: Enable similar information output for other platforms?  DK 2011-02-18
 #if LL_WINDOWS
-	if (gNoRender)
+	if (gHeadlessClient)
 	{
 		HWND window_handle = (HWND)window->getPlatformWindow();
 		PAINTSTRUCT ps; 
@@ -1272,7 +1283,7 @@ BOOL LLViewerWindow::handlePaint(LLWindow *window,  S32 x,  S32 y, S32 width,  S
 		len = temp_str.length();
 		TextOutA(hdc, 0, 25, temp_str.c_str(), len); 
 
-		TextOutA(hdc, 0, 50, "Set \"DisableRendering FALSE\" in settings.ini file to reenable", 61);
+		TextOutA(hdc, 0, 50, "Set \"HeadlessClient FALSE\" in settings.ini file to reenable", 61);
 		EndPaint(window_handle, &ps); 
 		return TRUE;
 	}
@@ -1306,7 +1317,8 @@ void LLViewerWindow::handleDataCopy(LLWindow *window, S32 data_type, void *data)
 		std::string url = (const char*)data;
 		LLMediaCtrl* web = NULL;
 		const bool trusted_browser = false;
-		if (LLURLDispatcher::dispatch(url, web, trusted_browser))
+		// don't treat slapps coming from external browsers as "clicks" as this would bypass throttling
+		if (LLURLDispatcher::dispatch(url, "", web, trusted_browser))
 		{
 			// bring window to foreground, as it has just been "launched" from a URL
 			mWindow->bringToFront();
@@ -1420,9 +1432,9 @@ LLViewerWindow::LLViewerWindow(
 	mWindow = LLWindowManager::createWindow(this,
 		title, name, x, y, width, height, 0,
 		fullscreen, 
-		gNoRender,
+		gHeadlessClient,
 		gSavedSettings.getBOOL("DisableVerticalSync"),
-		!gNoRender,
+		!gHeadlessClient,
 		ignore_pixel_depth,
 		gSavedSettings.getBOOL("RenderUseFBO") ? 0 : gSavedSettings.getU32("RenderFSAASamples")); //don't use window level anti-aliasing if FBOs are enabled
 
@@ -1624,6 +1636,7 @@ void LLViewerWindow::initBase()
 
 	// Constrain floaters to inside the menu and status bar regions.
 	gFloaterView = main_view->getChild<LLFloaterView>("Floater View");
+	gFloaterView->setFloaterSnapView(main_view->getChild<LLView>("floater_snap_region")->getHandle());
 	gSnapshotFloaterView = main_view->getChild<LLSnapshotFloaterView>("Snapshot Floater View");
 	
 
@@ -1785,18 +1798,23 @@ void LLViewerWindow::initWorldUI()
 	buttons_panel_container->addChild(buttons_panel);
 
 	LLView* avatar_picker_destination_guide_container = gViewerWindow->getRootView()->getChild<LLView>("avatar_picker_and_destination_guide_container");
+	avatar_picker_destination_guide_container->getChild<LLButton>("close")->setCommitCallback(boost::bind(toggle_destination_and_avatar_picker, LLSD()));
 	LLMediaCtrl* destinations = avatar_picker_destination_guide_container->findChild<LLMediaCtrl>("destination_guide_contents");
 	LLMediaCtrl* avatar_picker = avatar_picker_destination_guide_container->findChild<LLMediaCtrl>("avatar_picker_contents");
 	if (destinations)
 	{
+		destinations->setErrorPageURL(gSavedSettings.getString("GenericErrorPageURL"));
 		destinations->navigateTo(gSavedSettings.getString("DestinationGuideURL"), "text/html");
 	}
 
 	if (avatar_picker)
 	{
+		avatar_picker->setErrorPageURL(gSavedSettings.getString("GenericErrorPageURL"));
 		avatar_picker->navigateTo(gSavedSettings.getString("AvatarPickerURL"), "text/html");
 	}
 
+	// show destinations by default
+	toggle_destination_and_avatar_picker(gSavedSettings.getS32("DestinationsAndAvatarsVisibility"));
 }
 
 // Destroy the UI
@@ -1878,11 +1896,8 @@ void LLViewerWindow::shutdownGL()
 	LLVertexBuffer::cleanupClass();
 
 	llinfos << "Stopping GL during shutdown" << llendl;
-	if (!gNoRender)
-	{
-		stopGL(FALSE);
-		stop_glerror();
-	}
+	stopGL(FALSE);
+	stop_glerror();
 
 	gGL.shutdown();
 }
@@ -1946,11 +1961,6 @@ void LLViewerWindow::reshape(S32 width, S32 height)
 	// may have been destructed.
 	if (!LLApp::isExiting())
 	{
-		if (gNoRender)
-		{
-			return;
-		}
-
 		gWindowResized = TRUE;
 
 		// update our window rectangle
@@ -2568,10 +2578,6 @@ void LLViewerWindow::updateUI()
 		{
 			LLFirstUse::notUsingDestinationGuide();
 		}
-		if (gLoggedInTime.getElapsedTimeF32() > gSavedSettings.getF32("AvatarPickerHintTimeout"))
-		{
-			LLFirstUse::notUsingAvatarPicker();
-		}
 		if (gLoggedInTime.getElapsedTimeF32() > gSavedSettings.getF32("SidePanelHintTimeout"))
 		{
 			LLFirstUse::notUsingSidePanel();
@@ -2591,12 +2597,8 @@ void LLViewerWindow::updateUI()
 
 	S32 x = mCurrentMousePoint.mX;
 	S32 y = mCurrentMousePoint.mY;
-	MASK mask = gKeyboard->currentMask(TRUE);
 
-	if (gNoRender)
-	{
-		return;
-	}
+	MASK	mask = gKeyboard->currentMask(TRUE);
 
 	if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_RAYCAST))
 	{
@@ -2987,7 +2989,8 @@ void LLViewerWindow::updateLayout()
 			}
 			// Update the location of the blue box tool popup
 			LLCoordGL select_center_screen;
-			gFloaterTools->updatePopup( select_center_screen, gKeyboard->currentMask(TRUE) );
+			MASK	mask = gKeyboard->currentMask(TRUE);
+			gFloaterTools->updatePopup( select_center_screen, mask );
 		}
 		else
 		{
@@ -3113,7 +3116,8 @@ void LLViewerWindow::updateKeyboardFocus()
 		// sync all floaters with their focus state
 		gFloaterView->highlightFocusedFloater();
 		gSnapshotFloaterView->highlightFocusedFloater();
-		if ((gKeyboard->currentMask(TRUE) & MASK_CONTROL) == 0)
+		MASK	mask = gKeyboard->currentMask(TRUE);
+		if ((mask & MASK_CONTROL) == 0)
 		{
 			// control key no longer held down, finish cycle mode
 			gFloaterView->setCycleMode(FALSE);
@@ -3426,11 +3430,6 @@ BOOL LLViewerWindow::clickPointOnSurfaceGlobal(const S32 x, const S32 y, LLViewe
 
 void LLViewerWindow::pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback)(const LLPickInfo& info), BOOL pick_transparent)
 {
-	if (gNoRender)
-	{
-		return;
-	}
-	
 	BOOL in_build_mode = LLFloaterReg::instanceVisible("build");
 	if (in_build_mode || LLDrawPoolAlpha::sShowDebugAlpha)
 	{
@@ -3466,11 +3465,6 @@ void LLViewerWindow::schedulePick(LLPickInfo& pick_info)
 
 void LLViewerWindow::performPick()
 {
-	if (gNoRender)
-	{
-		return;
-	}
-
 	if (!mPicks.empty())
 	{
 		std::vector<LLPickInfo>::iterator pick_it;
@@ -3502,11 +3496,6 @@ void LLViewerWindow::returnEmptyPicks()
 // Performs the GL object/land pick.
 LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot,  BOOL pick_transparent)
 {
-	if (gNoRender)
-	{
-		return LLPickInfo();
-	}
-
 	BOOL in_build_mode = LLFloaterReg::instanceVisible("build");
 	if (in_build_mode || LLDrawPoolAlpha::sShowDebugAlpha)
 	{
@@ -3516,7 +3505,8 @@ LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot,  BOOL pick_trans
 	}
 
 	// shortcut queueing in mPicks and just update mLastPick in place
-	mLastPick = LLPickInfo(LLCoordGL(x, y_from_bot), gKeyboard->currentMask(TRUE), pick_transparent, TRUE, NULL);
+	MASK	key_mask = gKeyboard->currentMask(TRUE);
+	mLastPick = LLPickInfo(LLCoordGL(x, y_from_bot), key_mask, pick_transparent, TRUE, NULL);
 	mLastPick.fetchResults();
 
 	return mLastPick;
@@ -3978,7 +3968,9 @@ BOOL LLViewerWindow::thumbnailSnapshot(LLImageRaw *raw, S32 preview_width, S32 p
 	return rawSnapshot(raw, preview_width, preview_height, FALSE, FALSE, show_ui, do_rebuild, type);
 }
 
-// Saves the image from the screen to the specified filename and path.
+// Saves the image from the screen to a raw image
+// Since the required size might be bigger than the available screen, this method rerenders the scene in parts (called subimages) and copy
+// the results over to the final raw image.
 BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_height, 
 								 BOOL keep_window_aspect, BOOL is_texture, BOOL show_ui, BOOL do_rebuild, ESnapshotType type, S32 max_size)
 {
@@ -3996,8 +3988,6 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 	// Hide all the UI widgets first and draw a frame
 	BOOL prev_draw_ui = gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI) ? TRUE : FALSE;
 
-	show_ui = show_ui ? TRUE : FALSE;
-
 	if ( prev_draw_ui != show_ui)
 	{
 		LLPipeline::toggleRenderDebugFeature((void*)LLPipeline::RENDER_DEBUG_FEATURE_UI);
@@ -4017,55 +4007,49 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 	// from window
 	LLRect window_rect = show_ui ? getWindowRectRaw() : getWorldViewRectRaw(); 
 
-	S32 snapshot_width = window_rect.getWidth();
+	S32 snapshot_width  = window_rect.getWidth();
 	S32 snapshot_height = window_rect.getHeight();
 	// SNAPSHOT
-	S32 window_width = snapshot_width;
+	S32 window_width  = snapshot_width;
 	S32 window_height = snapshot_height;
 	
+	// Note: Scaling of the UI is currently *not* supported so we limit the output size if UI is requested
 	if (show_ui)
 	{
-		image_width = llmin(image_width, window_width);
+		// If the user wants the UI, limit the output size to the available screen size
+		image_width  = llmin(image_width, window_width);
 		image_height = llmin(image_height, window_height);
 	}
 
 	F32 scale_factor = 1.0f ;
-	if(!keep_window_aspect) //image cropping
-	{		
+	if (!keep_window_aspect || (image_width > window_width) || (image_height > window_height))
+	{	
+		// if image cropping or need to enlarge the scene, compute a scale_factor
 		F32 ratio = llmin( (F32)window_width / image_width , (F32)window_height / image_height) ;
-		snapshot_width = (S32)(ratio * image_width) ;
+		snapshot_width  = (S32)(ratio * image_width) ;
 		snapshot_height = (S32)(ratio * image_height) ;
 		scale_factor = llmax(1.0f, 1.0f / ratio) ;
 	}
-	else //the scene(window) proportion needs to be maintained.
-	{
-		if(image_width > window_width || image_height > window_height) //need to enlarge the scene
-		{
-			F32 ratio = llmin( (F32)window_width / image_width , (F32)window_height / image_height) ;
-			snapshot_width = (S32)(ratio * image_width) ;
-			snapshot_height = (S32)(ratio * image_height) ;
-			scale_factor = llmax(1.0f, 1.0f / ratio) ;	
-		}
-	}
 	
 	if (show_ui && scale_factor > 1.f)
 	{
+		// Note: we should never get there...
 		llwarns << "over scaling UI not supported." << llendl;
 	}
 
-	S32 buffer_x_offset = llfloor(((window_width - snapshot_width) * scale_factor) / 2.f);
+	S32 buffer_x_offset = llfloor(((window_width  - snapshot_width)  * scale_factor) / 2.f);
 	S32 buffer_y_offset = llfloor(((window_height - snapshot_height) * scale_factor) / 2.f);
 
-	S32 image_buffer_x = llfloor(snapshot_width*scale_factor) ;
-	S32 image_buffer_y = llfloor(snapshot_height *scale_factor) ;
+	S32 image_buffer_x = llfloor(snapshot_width  * scale_factor) ;
+	S32 image_buffer_y = llfloor(snapshot_height * scale_factor) ;
 
-	if(image_buffer_x > max_size || image_buffer_y > max_size) //boundary check to avoid memory overflow
+	if ((image_buffer_x > max_size) || (image_buffer_y > max_size)) // boundary check to avoid memory overflow
 	{
 		scale_factor *= llmin((F32)max_size / image_buffer_x, (F32)max_size / image_buffer_y) ;
-		image_buffer_x = llfloor(snapshot_width*scale_factor) ;
-		image_buffer_y = llfloor(snapshot_height *scale_factor) ;
+		image_buffer_x = llfloor(snapshot_width  * scale_factor) ;
+		image_buffer_y = llfloor(snapshot_height * scale_factor) ;
 	}
-	if(image_buffer_x > 0 && image_buffer_y > 0)
+	if ((image_buffer_x > 0) && (image_buffer_y > 0))
 	{
 		raw->resize(image_buffer_x, image_buffer_y, 3);
 	}
@@ -4073,7 +4057,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 	{
 		return FALSE ;
 	}
-	if(raw->isBufferInvalid())
+	if (raw->isBufferInvalid())
 	{
 		return FALSE ;
 	}
@@ -4081,6 +4065,7 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 	BOOL high_res = scale_factor >= 2.f; // Font scaling is slow, only do so if rez is much higher
 	if (high_res && show_ui)
 	{
+		// Note: we should never get there...
 		llwarns << "High res UI snapshot not supported. " << llendl;
 		/*send_agent_pause();
 		//rescale fonts
@@ -4095,6 +4080,8 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 
 	gObjectList.generatePickList(*LLViewerCamera::getInstance());
 
+	// Subimages are in fact partial rendering of the final view. This happens when the final view is bigger than the screen.
+	// In most common cases, scale_factor is 1 and there's no more than 1 iteration on x and y
 	for (int subimage_y = 0; subimage_y < scale_factor; ++subimage_y)
 	{
 		S32 subimage_y_offset = llclamp(buffer_y_offset - (subimage_y * window_height), 0, window_height);;
@@ -4108,69 +4095,70 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei
 			gDisplaySwapBuffers = FALSE;
 			gDepthDirty = TRUE;
 
-			const U32 subfield = subimage_x+(subimage_y*llceil(scale_factor));
-
-			if (LLPipeline::sRenderDeferred)
-			{
-					display(do_rebuild, scale_factor, subfield, TRUE);
-			}
-			else
-			{
-				display(do_rebuild, scale_factor, subfield, TRUE);
-					// Required for showing the GUI in snapshots and performing bloom composite overlay
-					// Call even if show_ui is FALSE
-				render_ui(scale_factor, subfield);
-			}
-
 			S32 subimage_x_offset = llclamp(buffer_x_offset - (subimage_x * window_width), 0, window_width);
 			// handle fractional rows
 			U32 read_width = llmax(0, (window_width - subimage_x_offset) -
 									llmax(0, (window_width * (subimage_x + 1)) - (buffer_x_offset + raw->getWidth())));
-			for(U32 out_y = 0; out_y < read_height ; out_y++)
+			
+			// Skip rendering and sampling altogether if either width or height is degenerated to 0 (common in cropping cases)
+			if (read_width && read_height)
 			{
-				S32 output_buffer_offset = ( 
-							(out_y * (raw->getWidth())) // ...plus iterated y...
-							+ (window_width * subimage_x) // ...plus subimage start in x...
-							+ (raw->getWidth() * window_height * subimage_y) // ...plus subimage start in y...
-							- output_buffer_offset_x // ...minus buffer padding x...
-							- (output_buffer_offset_y * (raw->getWidth()))  // ...minus buffer padding y...
-						) * raw->getComponents();
+				const U32 subfield = subimage_x+(subimage_y*llceil(scale_factor));
+				display(do_rebuild, scale_factor, subfield, TRUE);
 				
-				// Ping the wathdog thread every 100 lines to keep us alive (arbitrary number, feel free to change)
-				if (out_y % 100 == 0)
+				if (!LLPipeline::sRenderDeferred)
 				{
-					LLAppViewer::instance()->pingMainloopTimeout("LLViewerWindow::rawSnapshot");
+					// Required for showing the GUI in snapshots and performing bloom composite overlay
+					// Call even if show_ui is FALSE
+					render_ui(scale_factor, subfield);
 				}
 				
-				if (type == SNAPSHOT_TYPE_COLOR)
+				for (U32 out_y = 0; out_y < read_height ; out_y++)
 				{
-					glReadPixels(
-						subimage_x_offset, out_y + subimage_y_offset,
-						read_width, 1,
-						GL_RGB, GL_UNSIGNED_BYTE,
-						raw->getData() + output_buffer_offset
-					);
-				}
-				else // SNAPSHOT_TYPE_DEPTH
-				{
-					LLPointer<LLImageRaw> depth_line_buffer = new LLImageRaw(read_width, 1, sizeof(GL_FLOAT)); // need to store floating point values
-					glReadPixels(
-						subimage_x_offset, out_y + subimage_y_offset,
-						read_width, 1,
-						GL_DEPTH_COMPONENT, GL_FLOAT,
-						depth_line_buffer->getData()// current output pixel is beginning of buffer...
-					);
-
-					for (S32 i = 0; i < (S32)read_width; i++)
+					S32 output_buffer_offset = ( 
+												(out_y * (raw->getWidth())) // ...plus iterated y...
+												+ (window_width * subimage_x) // ...plus subimage start in x...
+												+ (raw->getWidth() * window_height * subimage_y) // ...plus subimage start in y...
+												- output_buffer_offset_x // ...minus buffer padding x...
+												- (output_buffer_offset_y * (raw->getWidth()))  // ...minus buffer padding y...
+												) * raw->getComponents();
+				
+					// Ping the watchdog thread every 100 lines to keep us alive (arbitrary number, feel free to change)
+					if (out_y % 100 == 0)
 					{
-						F32 depth_float = *(F32*)(depth_line_buffer->getData() + (i * sizeof(F32)));
-					
-						F32 linear_depth_float = 1.f / (depth_conversion_factor_1 - (depth_float * depth_conversion_factor_2));
-						U8 depth_byte = F32_to_U8(linear_depth_float, LLViewerCamera::getInstance()->getNear(), LLViewerCamera::getInstance()->getFar());
-						//write converted scanline out to result image
-						for(S32 j = 0; j < raw->getComponents(); j++)
+						LLAppViewer::instance()->pingMainloopTimeout("LLViewerWindow::rawSnapshot");
+					}
+				
+					if (type == SNAPSHOT_TYPE_COLOR)
+					{
+						glReadPixels(
+									 subimage_x_offset, out_y + subimage_y_offset,
+									 read_width, 1,
+									 GL_RGB, GL_UNSIGNED_BYTE,
+									 raw->getData() + output_buffer_offset
+									 );
+					}
+					else // SNAPSHOT_TYPE_DEPTH
+					{
+						LLPointer<LLImageRaw> depth_line_buffer = new LLImageRaw(read_width, 1, sizeof(GL_FLOAT)); // need to store floating point values
+						glReadPixels(
+									 subimage_x_offset, out_y + subimage_y_offset,
+									 read_width, 1,
+									 GL_DEPTH_COMPONENT, GL_FLOAT,
+									 depth_line_buffer->getData()// current output pixel is beginning of buffer...
+									 );
+
+						for (S32 i = 0; i < (S32)read_width; i++)
 						{
-							*(raw->getData() + output_buffer_offset + (i * raw->getComponents()) + j) = depth_byte;
+							F32 depth_float = *(F32*)(depth_line_buffer->getData() + (i * sizeof(F32)));
+					
+							F32 linear_depth_float = 1.f / (depth_conversion_factor_1 - (depth_float * depth_conversion_factor_2));
+							U8 depth_byte = F32_to_U8(linear_depth_float, LLViewerCamera::getInstance()->getNear(), LLViewerCamera::getInstance()->getFar());
+							// write converted scanline out to result image
+							for (S32 j = 0; j < raw->getComponents(); j++)
+							{
+								*(raw->getData() + output_buffer_offset + (i * raw->getComponents()) + j) = depth_byte;
+							}
 						}
 					}
 				}
@@ -4772,12 +4760,9 @@ bool LLViewerWindow::onAlert(const LLSD& notify)
 {
 	LLNotificationPtr notification = LLNotifications::instance().find(notify["id"].asUUID());
 
-	if (gNoRender)
+	if (gHeadlessClient)
 	{
 		llinfos << "Alert: " << notification->getName() << llendl;
-		notification->respond(LLSD::emptyMap());
-		LLNotifications::instance().cancel(notification);
-		return false;
 	}
 
 	// If we're in mouselook, the mouse is hidden and so the user can't click 
diff --git a/indra/newview/llviewerwindowlistener.cpp b/indra/newview/llviewerwindowlistener.cpp
index 0b52948680ecab659bccfe972d3b7a57950f204f..1fe5fc9800c0591c0e2d072f2182c68904b20493 100644
--- a/indra/newview/llviewerwindowlistener.cpp
+++ b/indra/newview/llviewerwindowlistener.cpp
@@ -65,7 +65,6 @@ LLViewerWindowListener::LLViewerWindowListener(LLViewerWindow* llviewerwindow):
 
 void LLViewerWindowListener::saveSnapshot(const LLSD& event) const
 {
-    LLReqID reqid(event);
     typedef std::map<LLSD::String, LLViewerWindow::ESnapshotType> TypeMap;
     TypeMap types;
 #define tp(name) types[#name] = LLViewerWindow::SNAPSHOT_TYPE_##name
@@ -98,9 +97,7 @@ void LLViewerWindowListener::saveSnapshot(const LLSD& event) const
         type = found->second;
     }
     bool ok = mViewerWindow->saveSnapshot(event["filename"], width, height, showui, rebuild, type);
-    LLSD response(reqid.makeResponse());
-    response["ok"] = ok;
-    LLEventPumps::instance().obtain(event["reply"]).post(response);
+    sendReply(LLSDMap("ok", ok), event);
 }
 
 void LLViewerWindowListener::requestReshape(LLSD const & event_data) const
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 2e376e8568e3dc88c4df379ebb53cbc3a85a660c..f1934933b5422f12ded92fb1ddc253dc2c332134 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -48,6 +48,7 @@
 #include "llanimationstates.h"
 #include "llavatarnamecache.h"
 #include "llavatarpropertiesprocessor.h"
+#include "llphysicsmotion.h"
 #include "llviewercontrol.h"
 #include "llcallingcard.h"		// IDEVO for LLAvatarTracker
 #include "lldrawpoolavatar.h"
@@ -108,6 +109,8 @@ extern F32 ANIM_SPEED_MIN;
 
 #include <boost/lexical_cast.hpp>
 
+// #define OUTPUT_BREAST_DATA
+
 using namespace LLVOAvatarDefines;
 
 //-----------------------------------------------------------------------------
@@ -123,6 +126,7 @@ const LLUUID ANIM_AGENT_HEAD_ROT = LLUUID("e6e8d1dd-e643-fff7-b238-c6b4b056a68d"
 const LLUUID ANIM_AGENT_PELVIS_FIX = LLUUID("0c5dd2a2-514d-8893-d44d-05beffad208b");  //"pelvis_fix"
 const LLUUID ANIM_AGENT_TARGET = LLUUID("0e4896cb-fba4-926c-f355-8720189d5b55");  //"target"
 const LLUUID ANIM_AGENT_WALK_ADJUST	= LLUUID("829bc85b-02fc-ec41-be2e-74cc6dd7215d");  //"walk_adjust"
+const LLUUID ANIM_AGENT_PHYSICS_MOTION = LLUUID("7360e029-3cb8-ebc4-863e-212df440d987");  //"physics_motion"
 
 
 //-----------------------------------------------------------------------------
@@ -620,6 +624,7 @@ BOOL LLVOAvatar::sShowAnimationDebug = FALSE;
 BOOL LLVOAvatar::sShowFootPlane = FALSE;
 BOOL LLVOAvatar::sVisibleInFirstPerson = FALSE;
 F32 LLVOAvatar::sLODFactor = 1.f;
+F32 LLVOAvatar::sPhysicsLODFactor = 1.f;
 BOOL LLVOAvatar::sUseImpostors = FALSE;
 BOOL LLVOAvatar::sJointDebug = FALSE;
 
@@ -1144,6 +1149,7 @@ void LLVOAvatar::initClass()
 
 	gAnimLibrary.animStateSetString(ANIM_AGENT_BODY_NOISE,"body_noise");
 	gAnimLibrary.animStateSetString(ANIM_AGENT_BREATHE_ROT,"breathe_rot");
+	gAnimLibrary.animStateSetString(ANIM_AGENT_PHYSICS_MOTION,"physics_motion");
 	gAnimLibrary.animStateSetString(ANIM_AGENT_EDITING,"editing");
 	gAnimLibrary.animStateSetString(ANIM_AGENT_EYE,"eye");
 	gAnimLibrary.animStateSetString(ANIM_AGENT_FLY_ADJUST,"fly_adjust");
@@ -1282,6 +1288,7 @@ void LLVOAvatar::initInstance(void)
 		// motions without a start/stop bit
 		registerMotion( ANIM_AGENT_BODY_NOISE,				LLBodyNoiseMotion::create );
 		registerMotion( ANIM_AGENT_BREATHE_ROT,				LLBreatheMotionRot::create );
+		registerMotion( ANIM_AGENT_PHYSICS_MOTION,			LLPhysicsMotionController::create );
 		registerMotion( ANIM_AGENT_EDITING,					LLEditingMotion::create	);
 		registerMotion( ANIM_AGENT_EYE,						LLEyeMotion::create	);
 		registerMotion( ANIM_AGENT_FEMALE_WALK,				LLKeyframeWalkMotion::create );
@@ -1295,18 +1302,8 @@ void LLVOAvatar::initInstance(void)
 		
 	}
 	
-	if (gNoRender)
-	{
-		return;
-	}
-	
 	buildCharacter();
 	
-	if (gNoRender)
-	{
-		return;
-	}
-	
 	// preload specific motions here
 	createMotion( ANIM_AGENT_CUSTOMIZE);
 	createMotion( ANIM_AGENT_CUSTOMIZE_DONE);
@@ -1695,6 +1692,7 @@ void LLVOAvatar::startDefaultMotions()
 	startMotion( ANIM_AGENT_EYE );
 	startMotion( ANIM_AGENT_BODY_NOISE );
 	startMotion( ANIM_AGENT_BREATHE_ROT );
+	startMotion( ANIM_AGENT_PHYSICS_MOTION );
 	startMotion( ANIM_AGENT_HAND_MOTION );
 	startMotion( ANIM_AGENT_PELVIS_FIX );
 
@@ -1747,12 +1745,6 @@ void LLVOAvatar::buildCharacter()
 	BOOL status = loadAvatar();
 	stop_glerror();
 
-	if (gNoRender)
-	{
-		// Still want to load the avatar skeleton so visual parameters work.
-		return;
-	}
-
 // 	gPrintMessagesThisFrame = TRUE;
 	lldebugs << "Avatar load took " << timer.getElapsedTimeF32() << " seconds." << llendl;
 
@@ -2223,7 +2215,7 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
 	setPixelAreaAndAngle(gAgent);
 
 	// force asynchronous drawable update
-	if(mDrawable.notNull() && !gNoRender)
+	if(mDrawable.notNull())
 	{	
 		LLFastTimer t(FTM_JOINT_UPDATE);
 	
@@ -2280,11 +2272,6 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
 	LLVector3 root_pos_last = mRoot.getWorldPosition();
 	BOOL detailed_update = updateCharacter(agent);
 
-	if (gNoRender)
-	{
-		return TRUE;
-	}
-
 	static LLUICachedControl<bool> visualizers_in_calls("ShowVoiceVisualizersInCalls", false);
 	bool voice_enabled = (visualizers_in_calls || LLVoiceClient::getInstance()->inProximalChannel()) &&
 						 LLVoiceClient::getInstance()->getVoiceEnabled(mID);
@@ -3257,17 +3244,6 @@ BOOL LLVOAvatar::updateCharacter(LLAgent &agent)
 		}
 	}
 
-	if (gNoRender)
-	{
-		// Hack if we're running drones...
-		if (isSelf())
-		{
-			gAgent.setPositionAgent(getPositionAgent());
-		}
-		return FALSE;
-	}
-
-
 	LLVector3d root_pos_global;
 
 	if (!mIsBuilt)
@@ -4194,7 +4170,7 @@ void LLVOAvatar::updateTextures()
 {
 	BOOL render_avatar = TRUE;
 
-	if (mIsDummy || gNoRender)
+	if (mIsDummy)
 	{
 		return;
 	}
@@ -4468,11 +4444,6 @@ void LLVOAvatar::processAnimationStateChanges()
 {
 	LLMemType mt(LLMemType::MTYPE_AVATAR);
 	
-	if (gNoRender)
-	{
-		return;
-	}
-
 	if ( isAnyAnimationSignaled(AGENT_WALK_ANIMS, NUM_AGENT_WALK_ANIMS) )
 	{
 		startMotion(ANIM_AGENT_WALK_ADJUST);
@@ -4867,7 +4838,7 @@ void LLVOAvatar::getGround(const LLVector3 &in_pos_agent, LLVector3 &out_pos_age
 	LLVector3d z_vec(0.0f, 0.0f, 1.0f);
 	LLVector3d p0_global, p1_global;
 
-	if (gNoRender || mIsDummy)
+	if (mIsDummy)
 	{
 		outNorm.setVec(z_vec);
 		out_pos_agent = in_pos_agent;
@@ -5439,11 +5410,6 @@ BOOL LLVOAvatar::loadLayersets()
 //-----------------------------------------------------------------------------
 void LLVOAvatar::updateVisualParams()
 {
-	if (gNoRender)
-	{
-		return;
-	}
-
 	setSex( (getVisualParamWeight( "male" ) > 0.5f) ? SEX_MALE : SEX_FEMALE );
 
 	LLCharacter::updateVisualParams();
@@ -6174,8 +6140,6 @@ LLMotion* LLVOAvatar::findMotion(const LLUUID& id) const
 void LLVOAvatar::updateMeshTextures()
 {
     // llinfos << "updateMeshTextures" << llendl;
-	if (gNoRender) return;
-
 	// if user has never specified a texture, assign the default
 	for (U32 i=0; i < getNumTEs(); i++)
 	{
@@ -6211,11 +6175,9 @@ void LLVOAvatar::updateMeshTextures()
 			// When an avatar is changing clothes and not in Appearance mode,
 			// use the last-known good baked texture until it finish the first
 			// render of the new layerset.
-
 			const BOOL layerset_invalid = mBakedTextureDatas[i].mTexLayerSet 
 										  && ( !mBakedTextureDatas[i].mTexLayerSet->getComposite()->isInitialized()
 										  || !mBakedTextureDatas[i].mTexLayerSet->isLocalTextureDataAvailable() );
-
 			use_lkg_baked_layer[i] = (!is_layer_baked[i] 
 									  && (mBakedTextureDatas[i].mLastTextureIndex != IMG_DEFAULT_AVATAR) 
 									  && layerset_invalid);
@@ -6831,11 +6793,6 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
 		}
 	}
 
-	if (gNoRender)
-	{
-		return;
-	}
-
 	ESex old_sex = getSex();
 
 //	llinfos << "LLVOAvatar::processAvatarAppearance()" << llendl;
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index a779a1735c6f6fb952de98b69a238debbef64224..3659fb055f743f05ac9f22a4e7919c61c01a0b36 100644
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -50,6 +50,7 @@
 
 extern const LLUUID ANIM_AGENT_BODY_NOISE;
 extern const LLUUID ANIM_AGENT_BREATHE_ROT;
+extern const LLUUID ANIM_AGENT_PHYSICS_MOTION;
 extern const LLUUID ANIM_AGENT_EDITING;
 extern const LLUUID ANIM_AGENT_EYE;
 extern const LLUUID ANIM_AGENT_FLY_ADJUST;
@@ -240,6 +241,7 @@ class LLVOAvatar :
 	static BOOL		sDebugInvisible;
 	static BOOL		sShowAttachmentPoints;
 	static F32		sLODFactor; // user-settable LOD factor
+	static F32		sPhysicsLODFactor; // user-settable physics LOD factor
 	static BOOL		sJointDebug; // output total number of joints being touched for each avatar
 	static BOOL		sDebugAvatarRotation;
 
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index 5f9e34390702fb4d874706603d0fcfb29c9161cc..3b4066e3caa22a357d790e7e904960c38db2b17f 100644
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -1017,6 +1017,13 @@ void LLVOAvatarSelf::wearableUpdated( LLWearableType::EType type, BOOL upload_re
 			}
 		}
 	}
+	
+	// Physics type has no associated baked textures, but change of params needs to be sent to
+	// other avatars.
+	if (type == LLWearableType::WT_PHYSICS)
+	  {
+	    gAgent.sendAgentSetAppearance();
+	  }
 }
 
 //-----------------------------------------------------------------------------
@@ -2506,10 +2513,6 @@ bool LLVOAvatarSelf::sendAppearanceMessage(LLMessageSystem *mesgsys) const
 //------------------------------------------------------------------------
 BOOL LLVOAvatarSelf::needsRenderBeam()
 {
-	if (gNoRender)
-	{
-		return FALSE;
-	}
 	LLTool *tool = LLToolMgr::getInstance()->getCurrentTool();
 
 	BOOL is_touching_or_grabbing = (tool == LLToolGrab::getInstance() && LLToolGrab::getInstance()->isEditing());
diff --git a/indra/newview/llvoicecallhandler.cpp b/indra/newview/llvoicecallhandler.cpp
index 274bd75208b544461c27eee6c0338a1013b297b7..2050dab689abd1d2c88cfa2f8a8222abeea04792 100644
--- a/indra/newview/llvoicecallhandler.cpp
+++ b/indra/newview/llvoicecallhandler.cpp
@@ -27,6 +27,8 @@
 #include "llviewerprecompiledheaders.h"
 #include "llcommandhandler.h" 
 #include "llavataractions.h"
+#include "llnotificationsutil.h"
+#include "llui.h"
 
 class LLVoiceCallAvatarHandler : public LLCommandHandler
 {
@@ -38,6 +40,12 @@ class LLVoiceCallAvatarHandler : public LLCommandHandler
 	
 	bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
 	{
+		if (!LLUI::sSettingGroups["config"]->getBOOL("EnableVoiceCall"))
+		{
+			LLNotificationsUtil::add("NoVoiceCall", LLSD(), LLSD(), std::string("SwitchToStandardSkinAndQuit"));
+			return true;
+		}
+
 		//Make sure we have some parameters
 		if (params.size() == 0)
 		{
diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp
index d239347810648188b9b7dd2917a8030d8d6d99a7..4b3a9a4dc37b8c00a5b9303ec166004da00e1970 100644
--- a/indra/newview/llwaterparammanager.cpp
+++ b/indra/newview/llwaterparammanager.cpp
@@ -72,6 +72,8 @@ LLWaterParamManager::LLWaterParamManager() :
 	mWave1Dir(.5f, .5f, "wave1Dir"),
 	mWave2Dir(.5f, .5f, "wave2Dir"),
 	mDensitySliderValue(1.0f),
+	mPrevFogDensity(16.0f), // 2^4
+	mPrevFogColor(22.f/255.f, 43.f/255.f, 54.f/255.f, 0.0f),
 	mWaterFogKS(1.0f)
 {
 }
@@ -265,6 +267,20 @@ void LLWaterParamManager::update(LLViewerCamera * cam)
 	// update the shaders and the menu
 	propagateParameters();
 	
+	// If water fog color has been changed, save it.
+	if (mPrevFogColor != mFogColor)
+	{
+		gSavedSettings.setColor4("WaterFogColor", mFogColor);
+		mPrevFogColor = mFogColor;
+	}
+
+	// If water fog density has been changed, save it.
+	if (mPrevFogDensity != mFogDensity)
+	{
+		gSavedSettings.setF32("WaterFogDensity", mFogDensity);
+		mPrevFogDensity = mFogDensity;
+	}
+	
 	// sync menus if they exist
 	LLFloaterWater* waterfloater = LLFloaterReg::findTypedInstance<LLFloaterWater>("env_water");
 	if(waterfloater) 
@@ -449,7 +465,24 @@ LLWaterParamManager * LLWaterParamManager::instance()
 		sInstance->loadAllPresets(LLStringUtil::null);
 
 		sInstance->getParamSet("Default", sInstance->mCurParams);
+		sInstance->initOverrides();
 	}
 
 	return sInstance;
 }
+
+void LLWaterParamManager::initOverrides()
+{
+	// Override fog color from the current preset with the saved setting.
+	LLColor4 fog_color_override = gSavedSettings.getColor4("WaterFogColor");
+	mFogColor = fog_color_override;
+	mPrevFogColor = fog_color_override;
+	mCurParams.set("waterFogColor", fog_color_override);
+
+	// Do the same with fog density.
+	F32 fog_density = gSavedSettings.getF32("WaterFogDensity");
+	mPrevFogDensity = fog_density;
+	mFogDensity = fog_density;
+	mCurParams.set("waterFogDensity", fog_density);
+	setDensitySliderValue(mFogDensity.mExp);
+}
diff --git a/indra/newview/llwaterparammanager.h b/indra/newview/llwaterparammanager.h
index c479f1861cc644a0e0c80584a22955dbfb007acd..f465034c39e4a2c8debaf2d77e314bf3db58c45f 100644
--- a/indra/newview/llwaterparammanager.h
+++ b/indra/newview/llwaterparammanager.h
@@ -284,6 +284,9 @@ class LLWaterParamManager
 	// singleton pattern implementation
 	static LLWaterParamManager * instance();
 
+private:
+	void initOverrides();
+	
 public:
 
 	LLWaterParamSet mCurParams;
@@ -314,6 +317,9 @@ class LLWaterParamManager
 	LLVector4 mWaterPlane;
 	F32 mWaterFogKS;
 
+	LLColor4 mPrevFogColor;
+	F32      mPrevFogDensity;
+
 	// our parameter manager singleton instance
 	static LLWaterParamManager * sInstance;
 };
diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp
index 66a6ab5e94242a30cb0387196e1999856c46b550..92697fb2eb8334b4023801342cb168dd25d6b103 100644
--- a/indra/newview/llwearableitemslist.cpp
+++ b/indra/newview/llwearableitemslist.cpp
@@ -446,6 +446,7 @@ clothing_to_string_map_t init_clothing_string_map()
 	w_map.insert(std::make_pair(LLWearableType::WT_SKIRT, "skirt_not_worn"));
 	w_map.insert(std::make_pair(LLWearableType::WT_ALPHA, "alpha_not_worn"));
 	w_map.insert(std::make_pair(LLWearableType::WT_TATTOO, "tattoo_not_worn"));
+	w_map.insert(std::make_pair(LLWearableType::WT_PHYSICS, "physics_not_worn"));
 	return w_map;
 }
 
@@ -891,6 +892,7 @@ void LLWearableItemsList::ContextMenu::updateItemsVisibility(LLContextMenu* menu
 	setMenuItemVisible(menu, "edit",				!standalone && mask & (MASK_CLOTHING|MASK_BODYPART) && n_worn == n_items && n_worn == 1);
 	setMenuItemEnabled(menu, "edit",				n_editable == 1 && n_worn == 1 && n_items == 1);
 	setMenuItemVisible(menu, "create_new",			mask & (MASK_CLOTHING|MASK_BODYPART) && n_items == 1);
+	setMenuItemEnabled(menu, "create_new",			canAddWearables(ids));
 	setMenuItemVisible(menu, "show_original",		!standalone);
 	setMenuItemEnabled(menu, "show_original",		n_items == 1 && n_links == n_items);
 	setMenuItemVisible(menu, "take_off",			mask == MASK_CLOTHING && n_worn == n_items);
@@ -1041,6 +1043,10 @@ bool LLWearableItemsList::ContextMenu::canAddWearables(const uuid_vec_t& item_id
 		U32 n_clothes					= m_it->second;
 
 		U32 wearable_count = gAgentWearables.getWearableCount(w_type);
+		if ((wearable_count > 0) && !LLWearableType::getAllowMultiwear(w_type))
+		{
+			return false;
+		}
 		if ((wearable_count + n_clothes) > LLAgentWearables::MAX_CLOTHING_PER_TYPE)
 		{
 			return false;
diff --git a/indra/newview/llwearabletype.cpp b/indra/newview/llwearabletype.cpp
index 0d707d65bf8d52f3762ef33ba81a1aa599f6fe97..c090ab5c3dedeef17ec052b3c85eb810a54204f6 100644
--- a/indra/newview/llwearabletype.cpp
+++ b/indra/newview/llwearabletype.cpp
@@ -34,25 +34,27 @@ struct WearableEntry : public LLDictionaryEntry
 	WearableEntry(const std::string &name,
 				  const std::string& default_new_name,
 				  LLAssetType::EType assetType,
-				  LLInventoryIcon::EIconName iconName);
+				  LLInventoryIcon::EIconName iconName,
+				  BOOL disable_camera_switch = FALSE,
+				  BOOL allow_multiwear = TRUE) :
+		LLDictionaryEntry(name),
+		mAssetType(assetType),
+		mDefaultNewName(default_new_name),
+		mLabel(LLTrans::getString(name)),
+		mIconName(iconName),
+		mDisableCameraSwitch(disable_camera_switch),
+		mAllowMultiwear(allow_multiwear)
+	{
+		
+	}
 	const LLAssetType::EType mAssetType;
 	const std::string mLabel;
 	const std::string mDefaultNewName; //keep mLabel for backward compatibility
 	LLInventoryIcon::EIconName mIconName;
+	BOOL mDisableCameraSwitch;
+	BOOL mAllowMultiwear;
 };
 
-WearableEntry::WearableEntry(const std::string &name,
-							 const std::string& default_new_name,
-							 LLAssetType::EType assetType,
-							 LLInventoryIcon::EIconName iconName) :
-	LLDictionaryEntry(name),
-	mAssetType(assetType),
-	mDefaultNewName(default_new_name),
-	mLabel(LLTrans::getString(name)),
-	mIconName(iconName)
-{
-}
-
 class LLWearableDictionary : public LLSingleton<LLWearableDictionary>,
 							 public LLDictionary<LLWearableType::EType, WearableEntry>
 {
@@ -62,23 +64,26 @@ class LLWearableDictionary : public LLSingleton<LLWearableDictionary>,
 
 LLWearableDictionary::LLWearableDictionary()
 {
-	addEntry(LLWearableType::WT_SHAPE,        new WearableEntry("shape",       "New Shape",			LLAssetType::AT_BODYPART, 	LLInventoryIcon::ICONNAME_BODYPART_SHAPE));
-	addEntry(LLWearableType::WT_SKIN,         new WearableEntry("skin",        "New Skin",			LLAssetType::AT_BODYPART, 	LLInventoryIcon::ICONNAME_BODYPART_SKIN));
-	addEntry(LLWearableType::WT_HAIR,         new WearableEntry("hair",        "New Hair",			LLAssetType::AT_BODYPART, 	LLInventoryIcon::ICONNAME_BODYPART_HAIR));
-	addEntry(LLWearableType::WT_EYES,         new WearableEntry("eyes",        "New Eyes",			LLAssetType::AT_BODYPART, 	LLInventoryIcon::ICONNAME_BODYPART_EYES));
-	addEntry(LLWearableType::WT_SHIRT,        new WearableEntry("shirt",       "New Shirt",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_SHIRT));
-	addEntry(LLWearableType::WT_PANTS,        new WearableEntry("pants",       "New Pants",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_PANTS));
-	addEntry(LLWearableType::WT_SHOES,        new WearableEntry("shoes",       "New Shoes",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_SHOES));
-	addEntry(LLWearableType::WT_SOCKS,        new WearableEntry("socks",       "New Socks",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_SOCKS));
-	addEntry(LLWearableType::WT_JACKET,       new WearableEntry("jacket",      "New Jacket",		LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_JACKET));
-	addEntry(LLWearableType::WT_GLOVES,       new WearableEntry("gloves",      "New Gloves",		LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_GLOVES));
-	addEntry(LLWearableType::WT_UNDERSHIRT,   new WearableEntry("undershirt",  "New Undershirt",	LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_UNDERSHIRT));
-	addEntry(LLWearableType::WT_UNDERPANTS,   new WearableEntry("underpants",  "New Underpants",	LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_UNDERPANTS));
-	addEntry(LLWearableType::WT_SKIRT,        new WearableEntry("skirt",       "New Skirt",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_SKIRT));
-	addEntry(LLWearableType::WT_ALPHA,        new WearableEntry("alpha",       "New Alpha",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_ALPHA));
-	addEntry(LLWearableType::WT_TATTOO,       new WearableEntry("tattoo",      "New Tattoo",		LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_TATTOO));
-	addEntry(LLWearableType::WT_INVALID,      new WearableEntry("invalid",     "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryIcon::ICONNAME_INVALID));
-	addEntry(LLWearableType::WT_NONE,      	  new WearableEntry("none",        "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryIcon::ICONNAME_INVALID));
+	addEntry(LLWearableType::WT_SHAPE,        new WearableEntry("shape",       "New Shape",			LLAssetType::AT_BODYPART, 	LLInventoryIcon::ICONNAME_BODYPART_SHAPE, FALSE, FALSE));
+	addEntry(LLWearableType::WT_SKIN,         new WearableEntry("skin",        "New Skin",			LLAssetType::AT_BODYPART, 	LLInventoryIcon::ICONNAME_BODYPART_SKIN, FALSE, FALSE));
+	addEntry(LLWearableType::WT_HAIR,         new WearableEntry("hair",        "New Hair",			LLAssetType::AT_BODYPART, 	LLInventoryIcon::ICONNAME_BODYPART_HAIR, FALSE, FALSE));
+	addEntry(LLWearableType::WT_EYES,         new WearableEntry("eyes",        "New Eyes",			LLAssetType::AT_BODYPART, 	LLInventoryIcon::ICONNAME_BODYPART_EYES, FALSE, FALSE));
+	addEntry(LLWearableType::WT_SHIRT,        new WearableEntry("shirt",       "New Shirt",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_SHIRT, FALSE, TRUE));
+	addEntry(LLWearableType::WT_PANTS,        new WearableEntry("pants",       "New Pants",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_PANTS, FALSE, TRUE));
+	addEntry(LLWearableType::WT_SHOES,        new WearableEntry("shoes",       "New Shoes",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_SHOES, FALSE, TRUE));
+	addEntry(LLWearableType::WT_SOCKS,        new WearableEntry("socks",       "New Socks",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_SOCKS, FALSE, TRUE));
+	addEntry(LLWearableType::WT_JACKET,       new WearableEntry("jacket",      "New Jacket",		LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_JACKET, FALSE, TRUE));
+	addEntry(LLWearableType::WT_GLOVES,       new WearableEntry("gloves",      "New Gloves",		LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_GLOVES, FALSE, TRUE));
+	addEntry(LLWearableType::WT_UNDERSHIRT,   new WearableEntry("undershirt",  "New Undershirt",	LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_UNDERSHIRT, FALSE, TRUE));
+	addEntry(LLWearableType::WT_UNDERPANTS,   new WearableEntry("underpants",  "New Underpants",	LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_UNDERPANTS, FALSE, TRUE));
+	addEntry(LLWearableType::WT_SKIRT,        new WearableEntry("skirt",       "New Skirt",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_SKIRT, FALSE, TRUE));
+	addEntry(LLWearableType::WT_ALPHA,        new WearableEntry("alpha",       "New Alpha",			LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_ALPHA, FALSE, TRUE));
+	addEntry(LLWearableType::WT_TATTOO,       new WearableEntry("tattoo",      "New Tattoo",		LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_TATTOO, FALSE, TRUE));
+
+	addEntry(LLWearableType::WT_PHYSICS,      new WearableEntry("physics",     "New Physics",		LLAssetType::AT_CLOTHING, 	LLInventoryIcon::ICONNAME_CLOTHING_PHYSICS, TRUE, TRUE));
+
+	addEntry(LLWearableType::WT_INVALID,      new WearableEntry("invalid",     "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryIcon::ICONNAME_NONE, FALSE, FALSE));
+	addEntry(LLWearableType::WT_NONE,      	  new WearableEntry("none",        "Invalid Wearable", 	LLAssetType::AT_NONE, 		LLInventoryIcon::ICONNAME_NONE, FALSE, FALSE));
 }
 
 // static
@@ -134,3 +139,21 @@ LLInventoryIcon::EIconName LLWearableType::getIconName(LLWearableType::EType typ
 	return entry->mIconName;
 } 
 
+// static 
+BOOL LLWearableType::getDisableCameraSwitch(LLWearableType::EType type)
+{
+	const LLWearableDictionary *dict = LLWearableDictionary::getInstance();
+	const WearableEntry *entry = dict->lookup(type);
+	if (!entry) return FALSE;
+	return entry->mDisableCameraSwitch;
+}
+
+// static 
+BOOL LLWearableType::getAllowMultiwear(LLWearableType::EType type)
+{
+	const LLWearableDictionary *dict = LLWearableDictionary::getInstance();
+	const WearableEntry *entry = dict->lookup(type);
+	if (!entry) return FALSE;
+	return entry->mAllowMultiwear;
+}
+
diff --git a/indra/newview/llwearabletype.h b/indra/newview/llwearabletype.h
index 3bbf8ba0bdc92d47ebb8d9f170b713503e257d02..d633b4807ece113c630fca0250318a5d86a338fe 100644
--- a/indra/newview/llwearabletype.h
+++ b/indra/newview/llwearabletype.h
@@ -52,7 +52,8 @@ class LLWearableType
 		WT_SKIRT	  = 12,
 		WT_ALPHA	  = 13,
 		WT_TATTOO	  = 14,
-		WT_COUNT	  = 15,
+		WT_PHYSICS	  = 15,
+		WT_COUNT	  = 16,
 
 		WT_INVALID	  = 255,
 		WT_NONE		  = -1,
@@ -64,6 +65,8 @@ class LLWearableType
 	static LLAssetType::EType 			getAssetType(EType type);
 	static EType 						typeNameToType(const std::string& type_name);
 	static LLInventoryIcon::EIconName 	getIconName(EType type);
+	static BOOL 						getDisableCameraSwitch(EType type);
+	static BOOL 						getAllowMultiwear(EType type);
 
 protected:
 	LLWearableType() {}
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
index a21a7eac9e00889b568428879dfbc81c428d1b9e..8f500414745079de5f68f0cb4f63c98827b81f5a 100644
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -98,11 +98,6 @@ LLWorld::LLWorld() :
 		mEdgeWaterObjects[i] = NULL;
 	}
 
-	if (gNoRender)
-	{
-		return;
-	}
-
 	LLPointer<LLImageRaw> raw = new LLImageRaw(1,1,4);
 	U8 *default_texture = raw->getData();
 	*(default_texture++) = MAX_WATER_COLOR.mV[0];
@@ -626,10 +621,7 @@ void LLWorld::updateVisibilities()
 		if (LLViewerCamera::getInstance()->sphereInFrustum(regionp->getCenterAgent(), radius))
 		{
 			regionp->calculateCameraDistance();
-			if (!gNoRender)
-			{
-				regionp->getLand().updatePatchVisibilities(gAgent);
-			}
+			regionp->getLand().updatePatchVisibilities(gAgent);
 		}
 		else
 		{
@@ -1456,59 +1448,52 @@ void LLWorld::getAvatars(uuid_vec_t* avatar_ids, std::vector<LLVector3d>* positi
 	{
 		positions->clear();
 	}
-	for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
-		iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
+	// get the list of avatars from the character list first, so distances are correct
+	// when agent is above 1020m and other avatars are nearby
+	for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
+		iter != LLCharacter::sInstances.end(); ++iter)
 	{
-		LLViewerRegion* regionp = *iter;
-		const LLVector3d& origin_global = regionp->getOriginGlobal();
-		S32 count = regionp->mMapAvatars.count();
-		for (S32 i = 0; i < count; i++)
+		LLVOAvatar* pVOAvatar = (LLVOAvatar*) *iter;
+		if(!pVOAvatar->isDead() && !pVOAvatar->isSelf())
 		{
-			LLVector3d pos_global = unpackLocalToGlobalPosition(regionp->mMapAvatars.get(i), origin_global);
-			if(dist_vec_squared(pos_global, relative_to) <= radius_squared)
+			LLUUID uuid = pVOAvatar->getID();
+			if(!uuid.isNull())
 			{
-				if(positions != NULL)
+				LLVector3d pos_global = pVOAvatar->getPositionGlobal();
+				if(dist_vec_squared(pos_global, relative_to) <= radius_squared)
 				{
-					positions->push_back(pos_global);
-				}
-				if(avatar_ids != NULL)
-				{
-					avatar_ids->push_back(regionp->mMapAvatarIDs.get(i));
+					if(positions != NULL)
+					{
+						positions->push_back(pos_global);
+					}
+					if(avatar_ids !=NULL)
+					{
+						avatar_ids->push_back(uuid);
+					}
 				}
 			}
 		}
 	}
-	// retrieve the list of close avatars from viewer objects as well
-	// for when we are above 1000m, only do this when we are retrieving
-	// uuid's too as there could be duplicates
-	if(avatar_ids != NULL)
+	// region avatars added for situations where radius is greater than RenderFarClip
+	for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();
+		iter != LLWorld::getInstance()->getRegionList().end(); ++iter)
 	{
-		for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
-			iter != LLCharacter::sInstances.end(); ++iter)
+		LLViewerRegion* regionp = *iter;
+		const LLVector3d& origin_global = regionp->getOriginGlobal();
+		S32 count = regionp->mMapAvatars.count();
+		for (S32 i = 0; i < count; i++)
 		{
-			LLVOAvatar* pVOAvatar = (LLVOAvatar*) *iter;
-			if(pVOAvatar->isDead() || pVOAvatar->isSelf())
-				continue;
-			LLUUID uuid = pVOAvatar->getID();
-			if(uuid.isNull())
-				continue;
-			LLVector3d pos_global = pVOAvatar->getPositionGlobal();
+			LLVector3d pos_global = unpackLocalToGlobalPosition(regionp->mMapAvatars.get(i), origin_global);
 			if(dist_vec_squared(pos_global, relative_to) <= radius_squared)
 			{
-				bool found = false;
-				uuid_vec_t::iterator sel_iter = avatar_ids->begin();
-				for (; sel_iter != avatar_ids->end(); sel_iter++)
-				{
-					if(*sel_iter == uuid)
-					{
-						found = true;
-						break;
-					}
-				}
-				if(!found)
+				LLUUID uuid = regionp->mMapAvatarIDs.get(i);
+				// if this avatar doesn't already exist in the list, add it
+				if(uuid.notNull() && avatar_ids!=NULL && std::find(avatar_ids->begin(), avatar_ids->end(), uuid) == avatar_ids->end())
 				{
 					if(positions != NULL)
+					{
 						positions->push_back(pos_global);
+					}
 					avatar_ids->push_back(uuid);
 				}
 			}
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 8ef3a3b839330c34d32282d1d69aacb6402d03e9..8cdb615686ca4aa4838a4149ca705b24adec26f6 100644
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -1745,7 +1745,7 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask )
 				// Invoke the event details floater if someone is clicking on an event.
 				LLSD params(LLSD::emptyArray());
 				params.append(event_id);
-				LLCommandDispatcher::dispatch("event", params, LLSD(), NULL, true);
+				LLCommandDispatcher::dispatch("event", params, LLSD(), NULL, "clicked", true);
 				break;
 			}
 		case MAP_ITEM_LAND_FOR_SALE:
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 13e537fae59a4935c44557008cc3a8fc47fdd4d4..6dc8f28265950f49b73893f4965d577583b2f394 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -253,6 +253,7 @@ S32		LLPipeline::sCompiles = 0;
 BOOL	LLPipeline::sPickAvatar = TRUE;
 BOOL	LLPipeline::sDynamicLOD = TRUE;
 BOOL	LLPipeline::sShowHUDAttachments = TRUE;
+BOOL	LLPipeline::sRenderMOAPBeacons = FALSE;
 BOOL	LLPipeline::sRenderPhysicalBeacons = TRUE;
 BOOL	LLPipeline::sRenderScriptedBeacons = FALSE;
 BOOL	LLPipeline::sRenderScriptedTouchBeacons = TRUE;
@@ -1227,10 +1228,6 @@ void LLPipeline::unlinkDrawable(LLDrawable *drawable)
 U32 LLPipeline::addObject(LLViewerObject *vobj)
 {
 	LLMemType mt_ao(LLMemType::MTYPE_PIPELINE_ADD_OBJECT);
-	if (gNoRender)
-	{
-		return 0;
-	}
 
 	if (gSavedSettings.getBOOL("RenderDelayCreation"))
 	{
@@ -2510,6 +2507,42 @@ void renderPhysicalBeacons(LLDrawable* drawablep)
 	}
 }
 
+void renderMOAPBeacons(LLDrawable* drawablep)
+{
+	LLViewerObject *vobj = drawablep->getVObj();
+
+	if(!vobj || vobj->isAvatar())
+		return;
+
+	BOOL beacon=FALSE;
+	U8 tecount=vobj->getNumTEs();
+	for(int x=0;x<tecount;x++)
+	{
+		if(vobj->getTE(x)->hasMedia())
+		{
+			beacon=TRUE;
+			break;
+		}
+	}
+	if(beacon==TRUE)
+	{
+		if (gPipeline.sRenderBeacons)
+		{
+			gObjectList.addDebugBeacon(vobj->getPositionAgent(), "", LLColor4(1.f, 1.f, 1.f, 0.5f), LLColor4(1.f, 1.f, 1.f, 0.5f), gSavedSettings.getS32("DebugBeaconLineWidth"));
+		}
+
+		if (gPipeline.sRenderHighlight)
+		{
+			S32 face_id;
+			S32 count = drawablep->getNumFaces();
+			for (face_id = 0; face_id < count; face_id++)
+			{
+				gPipeline.mHighlightFaces.push_back(drawablep->getFace(face_id) );
+			}
+		}
+	}
+}
+
 void renderParticleBeacons(LLDrawable* drawablep)
 {
 	// Look for attachments, objects, etc.
@@ -2715,6 +2748,11 @@ void LLPipeline::postSort(LLCamera& camera)
 			forAllVisibleDrawables(renderPhysicalBeacons);
 		}
 
+		if(sRenderMOAPBeacons)
+		{
+			forAllVisibleDrawables(renderMOAPBeacons);
+		}
+
 		if (sRenderParticleBeacons)
 		{
 			forAllVisibleDrawables(renderParticleBeacons);
@@ -4937,6 +4975,24 @@ BOOL LLPipeline::getRenderScriptedTouchBeacons(void*)
 	return sRenderScriptedTouchBeacons;
 }
 
+// static
+void LLPipeline::setRenderMOAPBeacons(BOOL val)
+{
+	sRenderMOAPBeacons = val;
+}
+
+// static
+void LLPipeline::toggleRenderMOAPBeacons(void*)
+{
+	sRenderMOAPBeacons = !sRenderMOAPBeacons;
+}
+
+// static
+BOOL LLPipeline::getRenderMOAPBeacons(void*)
+{
+	return sRenderMOAPBeacons;
+}
+
 // static
 void LLPipeline::setRenderPhysicalBeacons(BOOL val)
 {
@@ -6851,7 +6907,6 @@ void LLPipeline::renderDeferredLighting()
 		{
 			// Render debugging beacons.
 			gObjectList.renderObjectBeacons();
-			LLHUDObject::renderAll();
 			gObjectList.resetObjectBeacons();
 		}
 	}
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
index e99b0d71e3f632163e0d03be3dd6f663089ebe1a..92ae40ebb077a5e8dfd67179885997c18da31df4 100644
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -312,6 +312,10 @@ class LLPipeline
 	static void toggleRenderSoundBeacons(void* data);
 	static BOOL getRenderSoundBeacons(void* data);
 
+	static void setRenderMOAPBeacons(BOOL val);
+	static void toggleRenderMOAPBeacons(void * data);
+	static BOOL getRenderMOAPBeacons(void * data);
+
 	static void setRenderPhysicalBeacons(BOOL val);
 	static void toggleRenderPhysicalBeacons(void* data);
 	static BOOL getRenderPhysicalBeacons(void* data);
@@ -698,6 +702,7 @@ class LLPipeline
 	S32						mLightingDetail;
 		
 	static BOOL				sRenderPhysicalBeacons;
+	static BOOL				sRenderMOAPBeacons;
 	static BOOL				sRenderScriptedTouchBeacons;
 	static BOOL				sRenderScriptedBeacons;
 	static BOOL				sRenderParticleBeacons;
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
index 75aec21f93b6c50732591715620b8d8e2bef8a97..a19eccf748cc52899f6231795473681af057e0c4 100644
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -114,9 +114,6 @@
     <color
      name="AlertCautionTextColor"
      reference="LtYellow" />
-    <color
-     name="AlertTextColor"
-     value="0.58 0.66 0.84 1" />
     <color
      name="AvatarListItemIconDefaultColor"
      reference="White" />
@@ -763,4 +760,21 @@
     <color
      name="MenuBarProjectBgColor"
      reference="MdBlue" />
+  
+    <!-- Generic color names (legacy) -->
+  <color
+    name="white"
+    value="1 1 1 1"/>
+  <color
+    name="black"
+    value="0 0 0 1"/>
+  <color
+    name="red"
+    value="1 0 0 1"/>
+  <color
+    name="green"
+    value="0 1 0 1"/>
+  <color
+    name="blue"
+    value="0 0 1 1"/>
 </colors>
diff --git a/indra/newview/skins/default/textures/icons/Inv_Physics.png b/indra/newview/skins/default/textures/icons/Inv_Physics.png
new file mode 100644
index 0000000000000000000000000000000000000000..360baec46d291923ec07f574df9022178f7c640a
Binary files /dev/null and b/indra/newview/skins/default/textures/icons/Inv_Physics.png differ
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
index cec2942b35af5f6d920c51a30f9f1a633b5f255a..1ca48b01a89b884167053810e7cc42c14fbe09ea 100644
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -226,6 +226,7 @@ with the same filename but different name
   <texture name="Inv_SysClosed" file_name="icons/Inv_SysClosed.png" preload="false" />
   <texture name="Inv_SysOpen" file_name="icons/Inv_SysOpen.png" preload="false" />
   <texture name="Inv_Tattoo" file_name="icons/Inv_Tattoo.png" preload="false" />
+  <texture name="Inv_Physics" file_name="icons/Inv_Physics.png" preload="false" />
   <texture name="Inv_Texture" file_name="icons/Inv_Texture.png" preload="false" />
   <texture name="Inv_TrashClosed" file_name="icons/Inv_TrashClosed.png" preload="false" />
   <texture name="Inv_TrashOpen" file_name="icons/Inv_TrashOpen.png" preload="false" />
@@ -673,4 +674,5 @@ with the same filename but different name
 
   <texture name="Yellow_Gradient" file_name="windows/yellow_gradient.png"/>
   <texture name="Popup_Caution" file_name="icons/pop_up_caution.png"/>
+  <texture name="Camera_Drag_Dot" file_name="world/CameraDragDot.png"/>
 </textures>
diff --git a/indra/newview/skins/default/textures/world/CameraDragDot.png b/indra/newview/skins/default/textures/world/CameraDragDot.png
new file mode 100644
index 0000000000000000000000000000000000000000..57698e19560dc119f045667b0ae3d49e611d3b36
Binary files /dev/null and b/indra/newview/skins/default/textures/world/CameraDragDot.png differ
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml
index 3705a5902a0380320ba6170211b1c39d6170c5fd..ed499619f691e1df6f5dc572ba23b8149f5dba99 100644
--- a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml
@@ -29,7 +29,8 @@
 	<check_box label="IM chats" name="EnableIMChatPopups" tool_tip="Vælg for at se popup vindue når personlige beskeder (IM) modtages"/>
 	<spinner label="Tid før chatvisning forsvinder:" name="nearby_toasts_lifetime"/>
 	<spinner label="Tid før chatvisning forsvinder:" name="nearby_toasts_fadingtime"/>
-	<check_box label="Benyt maskin-oversættelse ved chat (håndteret af Google)" name="translate_chat_checkbox"/>
+	<check_box name="translate_chat_checkbox"/>
+	<text name="translate_chb_label" >Benyt maskin-oversættelse ved chat (håndteret af Google)</text>
 	<text name="translate_language_text" width="110">
 		Oversæt chat til :
 	</text>
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_sound.xml b/indra/newview/skins/default/xui/da/panel_preferences_sound.xml
index 5810cc21e75881f3bc51741e6fc45ee53752bc76..067463be02cebd8f012636b66ad7d11ddac1b1b1 100644
--- a/indra/newview/skins/default/xui/da/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/da/panel_preferences_sound.xml
@@ -4,7 +4,8 @@
 		Midterste museknap
 	</panel.string>
 	<slider label="Generel" name="System Volume"/>
-	<check_box initial_value="true" label="Sluk lyd når minimeret" name="mute_when_minimized"/>
+	<check_box initial_value="true" name="mute_when_minimized"/>
+	<text name="mute_chb_label">Sluk lyd når minimeret</text>
 	<slider label="Knapper" name="UI Volume"/>
 	<slider label="Omgivelser" name="Wind Volume"/>
 	<slider label="Lyd effekter" name="SFX Volume"/>
diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml
index 8783b520136a84db6a1076cc3a30121386c6eec7..2d8459479a227a31d62e7a15d143e1c001077964 100644
--- a/indra/newview/skins/default/xui/de/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/de/floater_about_land.xml
@@ -348,6 +348,7 @@ Nur große Parzellen können in der Suche aufgeführt werden.
 				<combo_box.item label="Parks und Natur" name="item9"/>
 				<combo_box.item label="Wohngebiet" name="item10"/>
 				<combo_box.item label="Shopping" name="item11"/>
+				<combo_box.item label="Vermietung" name="item13"/>
 				<combo_box.item label="Sonstige" name="item12"/>
 			</combo_box>
 			<combo_box name="land category">
@@ -362,6 +363,7 @@ Nur große Parzellen können in der Suche aufgeführt werden.
 				<combo_box.item label="Parks und Natur" name="item9"/>
 				<combo_box.item label="Wohngebiet" name="item10"/>
 				<combo_box.item label="Shopping" name="item11"/>
+				<combo_box.item label="Vermietung" name="item13"/>
 				<combo_box.item label="Sonstige" name="item12"/>
 			</combo_box>
 			<check_box label="Moderater Inhalt" name="MatureCheck" tool_tip=""/>
@@ -437,7 +439,7 @@ Nur große Parzellen können in der Suche aufgeführt werden.
 				(Durch Grundbesitz festgelegt)
 			</panel.string>
 			<panel.string name="allow_public_access">
-				Öffentlichen Zugang erlauben ([MATURITY])
+				Öffentlichen Zugang erlauben ([MATURITY]) (Hinweis: Bei Deaktivierung dieser Option werden Bannlinien generiert)
 			</panel.string>
 			<panel.string name="estate_override">
 				Eine oder mehrere dieser Optionen gelten auf Grundbesitzebene
diff --git a/indra/newview/skins/default/xui/de/floater_map.xml b/indra/newview/skins/default/xui/de/floater_map.xml
index 217a641dec2e40c715be36600b992a8894335e95..f6d9db8d53a9c2d15ec27db4e13f84ccc0f53ad1 100644
--- a/indra/newview/skins/default/xui/de/floater_map.xml
+++ b/indra/newview/skins/default/xui/de/floater_map.xml
@@ -1,32 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="Map" title="">
-	<floater.string name="mini_map_north">
-		N
-	</floater.string>
-	<floater.string name="mini_map_east">
-		O
-	</floater.string>
-	<floater.string name="mini_map_west">
-		W
-	</floater.string>
-	<floater.string name="mini_map_south">
-		S
-	</floater.string>
-	<floater.string name="mini_map_southeast">
-		SO
-	</floater.string>
-	<floater.string name="mini_map_northeast">
-		NO
-	</floater.string>
-	<floater.string name="mini_map_southwest">
-		SW
-	</floater.string>
-	<floater.string name="mini_map_northwest">
-		NW
-	</floater.string>
 	<floater.string name="ToolTipMsg">
 		[REGION](Doppelklicken, um Karte zu öffnen; Umschalt-Taste gedrückt halten und ziehen, um zu schwenken)
 	</floater.string>
+	<floater.string name="AltToolTipMsg">
+		[REGION](Doppelklicken, um zu teleportieren; Umschalttaste gedrückt halten und ziehen, um zu schwenken)
+	</floater.string>
 	<floater.string name="mini_map_caption">
 		MINI-KARTE
 	</floater.string>
diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
index d201fc327cc670e02eb8c33d5430fce449ec16b0..d95d674df2d5bc255d7d863e68a005e24703234f 100644
--- a/indra/newview/skins/default/xui/de/floater_tools.xml
+++ b/indra/newview/skins/default/xui/de/floater_tools.xml
@@ -64,6 +64,8 @@
 		<radio_item label="Fläche auswählen" name="radio select face"/>
 	</radio_group>
 	<check_box label="Verknüpfte Teile bearbeiten" name="checkbox edit linked parts"/>
+	<button label="Link" name="link_btn"/>
+	<button label="Verknüpfung auflösen" name="unlink_btn"/>
 	<text name="RenderingCost" tool_tip="Zeigt die errechneten Wiedergabekosten für dieses Objekt">
 		þ: [COUNT]
 	</text>
diff --git a/indra/newview/skins/default/xui/de/menu_attachment_self.xml b/indra/newview/skins/default/xui/de/menu_attachment_self.xml
index 644fc68ba4e8c389b6e38723692ba005552c605c..325d52a22ec7bab82e16069396d376c0e38d70c8 100644
--- a/indra/newview/skins/default/xui/de/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/de/menu_attachment_self.xml
@@ -5,7 +5,7 @@
 	<menu_item_call label="Abnehmen" name="Detach"/>
 	<menu_item_call label="Hinsetzen" name="Sit Down Here"/>
 	<menu_item_call label="Aufstehen" name="Stand Up"/>
-	<menu_item_call label="Outfit ändern" name="Change Outfit"/>
+	<menu_item_call label="Mein Aussehen" name="Change Outfit"/>
 	<menu_item_call label="Mein Outfit bearbeiten" name="Edit Outfit"/>
 	<menu_item_call label="Meine Form bearbeiten" name="Edit My Shape"/>
 	<menu_item_call label="Meine Freunde" name="Friends..."/>
diff --git a/indra/newview/skins/default/xui/de/menu_avatar_self.xml b/indra/newview/skins/default/xui/de/menu_avatar_self.xml
index 582c76ac94556ad4c55655cb7dd2f18694aaaa84..40557b7ad83ecb4b6f413eca325f561e01c345b7 100644
--- a/indra/newview/skins/default/xui/de/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/de/menu_avatar_self.xml
@@ -21,7 +21,7 @@
 		<context_menu label="Abnehmen" name="Object Detach"/>
 		<menu_item_call label="Alles abnehmen" name="Detach All"/>
 	</context_menu>
-	<menu_item_call label="Outfit ändern" name="Chenge Outfit"/>
+	<menu_item_call label="Mein Aussehen" name="Chenge Outfit"/>
 	<menu_item_call label="Mein Outfit bearbeiten" name="Edit Outfit"/>
 	<menu_item_call label="Meine Form bearbeiten" name="Edit My Shape"/>
 	<menu_item_call label="Meine Freunde" name="Friends..."/>
diff --git a/indra/newview/skins/default/xui/de/menu_bottomtray.xml b/indra/newview/skins/default/xui/de/menu_bottomtray.xml
index 6c4308286a6127315f61ef644ec6bba56a4d2564..660cd2eaf346f15233f2f74ecc83ebfd1ec989e0 100644
--- a/indra/newview/skins/default/xui/de/menu_bottomtray.xml
+++ b/indra/newview/skins/default/xui/de/menu_bottomtray.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="hide_camera_move_controls_menu">
+	<menu_item_check label="Voice aktiviert" name="EnableVoiceChat"/>
 	<menu_item_check label="Schaltfläche Gesten" name="ShowGestureButton"/>
 	<menu_item_check label="Schaltfläche Bewegungssteuerung" name="ShowMoveButton"/>
 	<menu_item_check label="Schaltfläche Ansicht" name="ShowCameraButton"/>
 	<menu_item_check label="Schaltfläche Foto" name="ShowSnapshotButton"/>
-	<menu_item_check label="Schaltfläche „Seitenleiste“" name="ShowSidebarButton"/>
 	<menu_item_check label="Schaltfläche „Bauen“" name="ShowBuildButton"/>
 	<menu_item_check label="Schaltfläche „Suchen“" name="ShowSearchButton"/>
 	<menu_item_check label="Schaltfläche „Karte“" name="ShowWorldMapButton"/>
diff --git a/indra/newview/skins/default/xui/de/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/de/menu_inspect_avatar_gear.xml
index edad34a1d5a627375e17d7a9e46a71bec0d499c1..641a0ceebe926d50b72f0ee459856d6525453649 100644
--- a/indra/newview/skins/default/xui/de/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/de/menu_inspect_avatar_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<menu name="Gear Menu">
+<toggleable_menu name="Gear Menu">
 	<menu_item_call label="Profil anzeigen" name="view_profile"/>
 	<menu_item_call label="Freund hinzufügen" name="add_friend"/>
 	<menu_item_call label="IM" name="im"/>
@@ -11,9 +11,11 @@
 	<menu_item_call label="Melden" name="report"/>
 	<menu_item_call label="Einfrieren" name="freeze"/>
 	<menu_item_call label="Hinauswerfen" name="eject"/>
+	<menu_item_call label="Hinauswerfen" name="kick"/>
+	<menu_item_call label="CSR" name="csr"/>
 	<menu_item_call label="Fehler in Texturen beseitigen" name="debug"/>
 	<menu_item_call label="Auf Karte anzeigen" name="find_on_map"/>
 	<menu_item_call label="Hineinzoomen" name="zoom_in"/>
 	<menu_item_call label="Bezahlen" name="pay"/>
 	<menu_item_call label="Teilen" name="share"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml
index 851a96cc0997e4407964b42670548c61bdfac843..5979194bfb557c770e31c611210c31f99b6cb533 100644
--- a/indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml
@@ -1,10 +1,31 @@
-<?xml version="1.0" encoding="utf-8"?>
-<menu name="Gear Menu">
-	<menu_item_call label="Hinsetzen" name="sit_down_here"/>
-	<menu_item_call label="Aufstehen" name="stand_up"/>
-	<menu_item_call label="Outfit ändern" name="change_outfit"/>
-	<menu_item_call label="Mein Profil" name="my_profile"/>
-	<menu_item_call label="Meine Freunde" name="my_friends"/>
-	<menu_item_call label="Meine Gruppen" name="my_groups"/>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Gear Menu">
+	<menu_item_call label="Hinsetzen" name="Sit Down Here"/>
+	<menu_item_call label="Aufstehen" name="Stand Up"/>
+	<context_menu label="Ausziehen" name="Take Off &gt;">
+		<context_menu label="Kleidung" name="Clothes &gt;">
+			<menu_item_call label="Hemd" name="Shirt"/>
+			<menu_item_call label="Hose" name="Pants"/>
+			<menu_item_call label="Rock" name="Skirt"/>
+			<menu_item_call label="Schuhe" name="Shoes"/>
+			<menu_item_call label="Strümpfe" name="Socks"/>
+			<menu_item_call label="Jacke" name="Jacket"/>
+			<menu_item_call label="Handschuhe" name="Gloves"/>
+			<menu_item_call label="Unterhemd" name="Self Undershirt"/>
+			<menu_item_call label="Unterhose" name="Self Underpants"/>
+			<menu_item_call label="Tätowierung" name="Self Tattoo"/>
+			<menu_item_call label="Alpha" name="Self Alpha"/>
+			<menu_item_call label="Alle Kleider" name="All Clothes"/>
+		</context_menu>
+		<context_menu label="HUD" name="Object Detach HUD"/>
+		<context_menu label="Abnehmen" name="Object Detach"/>
+		<menu_item_call label="Alles abnehmen" name="Detach All"/>
+	</context_menu>
+	<menu_item_call label="Outfit ändern" name="Chenge Outfit"/>
+	<menu_item_call label="Mein Outfit bearbeiten" name="Edit Outfit"/>
+	<menu_item_call label="Meine Form bearbeiten" name="Edit My Shape"/>
+	<menu_item_call label="Meine Freunde" name="Friends..."/>
+	<menu_item_call label="Meine Gruppen" name="Groups..."/>
+	<menu_item_call label="Mein Profil" name="Profile..."/>
 	<menu_item_call label="Fehler in Texturen beseitigen" name="Debug..."/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/de/menu_inventory_gear_default.xml
index df86a5cf71c13ec4c1461fd839996793ce168c1c..48dec3e856cb60f9f07f9ef5612d56cc830bb903 100644
--- a/indra/newview/skins/default/xui/de/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/de/menu_inventory_gear_default.xml
@@ -3,6 +3,7 @@
 	<menu_item_call label="Neues Inventar-Fenster" name="new_window"/>
 	<menu_item_check label="Nach Name sortieren" name="sort_by_name"/>
 	<menu_item_check label="Nach aktuellesten Objekten sortieren" name="sort_by_recent"/>
+	<menu_item_check label="Ordner immer nach Namen sortieren" name="sort_folders_by_name"/>
 	<menu_item_check label="Systemordner nach oben" name="sort_system_folders_to_top"/>
 	<menu_item_call label="Filter anzeigen" name="show_filters"/>
 	<menu_item_call label="Filter zurücksetzen" name="reset_filters"/>
diff --git a/indra/newview/skins/default/xui/de/menu_object.xml b/indra/newview/skins/default/xui/de/menu_object.xml
index 19057d4228df5b65f1acc49d69ed108a53a55d5f..412bd3ac04e68bdce09f43b0931952bff6212379 100644
--- a/indra/newview/skins/default/xui/de/menu_object.xml
+++ b/indra/newview/skins/default/xui/de/menu_object.xml
@@ -16,14 +16,14 @@
 		<context_menu label="Anhängen" name="Object Attach"/>
 		<context_menu label="HUD anhängen" name="Object Attach HUD"/>
 	</context_menu>
-	<context_menu label="Entfernen" name="Remove">
+	<context_menu label="Verwalten" name="Remove">
 		<menu_item_call label="Missbrauch melden" name="Report Abuse..."/>
 		<menu_item_call label="Ignorieren" name="Object Mute"/>
 		<menu_item_call label="Zurückgeben" name="Return..."/>
-		<menu_item_call label="Löschen" name="Delete"/>
 	</context_menu>
 	<menu_item_call label="Nehmen" name="Pie Object Take"/>
 	<menu_item_call label="Kopie nehmen" name="Take Copy"/>
 	<menu_item_call label="Bezahlen" name="Pay..."/>
 	<menu_item_call label="Kaufen" name="Buy..."/>
+	<menu_item_call label="Löschen" name="Delete"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/de/menu_places_gear_folder.xml
index 132d3f6466d15e1d3ad35f1fa1b227131cf865bf..892f075d3c2858ebc3ea65703381b69e7a72981e 100644
--- a/indra/newview/skins/default/xui/de/menu_places_gear_folder.xml
+++ b/indra/newview/skins/default/xui/de/menu_places_gear_folder.xml
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_folder_gear">
+<toggleable_menu name="menu_folder_gear">
 	<menu_item_call label="Landmarke hinzufügen" name="add_landmark"/>
 	<menu_item_call label="Ordner hinzufügen" name="add_folder"/>
+	<menu_item_call label="Objekt wiederherstellen" name="restore_item"/>
 	<menu_item_call label="Ausschneiden" name="cut"/>
 	<menu_item_call label="Kopieren" name="copy_folder"/>
 	<menu_item_call label="Einfügen" name="paste"/>
@@ -12,4 +13,4 @@
 	<menu_item_call label="Alle Ordner aufklappen" name="expand_all"/>
 	<menu_item_call label="Alle Ordner schließen" name="collapse_all"/>
 	<menu_item_check label="Nach Datum sortieren" name="sort_by_date"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/de/menu_places_gear_landmark.xml
index 6af4d644af0846da036362727929c9950572786a..8955f797a24af231ada74bf18fd534517d70b484 100644
--- a/indra/newview/skins/default/xui/de/menu_places_gear_landmark.xml
+++ b/indra/newview/skins/default/xui/de/menu_places_gear_landmark.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_ladmark_gear">
+<toggleable_menu name="menu_ladmark_gear">
 	<menu_item_call label="Teleportieren" name="teleport"/>
 	<menu_item_call label="Weitere Informationen" name="more_info"/>
 	<menu_item_call label="Auf Karte zeigen" name="show_on_map"/>
 	<menu_item_call label="Landmarke hinzufügen" name="add_landmark"/>
 	<menu_item_call label="Ordner hinzufügen" name="add_folder"/>
+	<menu_item_call label="Objekt wiederherstellen" name="restore_item"/>
 	<menu_item_call label="Ausschneiden" name="cut"/>
 	<menu_item_call label="Landmarke kopieren" name="copy_landmark"/>
 	<menu_item_call label="SLurl kopieren" name="copy_slurl"/>
@@ -15,4 +16,4 @@
 	<menu_item_call label="Alle Ordner schließen" name="collapse_all"/>
 	<menu_item_check label="Nach Datum sortieren" name="sort_by_date"/>
 	<menu_item_call label="Auswahl erstellen" name="create_pick"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
index 4a043e1233ff30b15cc47b1fd333c009217b488b..17bcb013cc9e208389ad4a931c29a68374e5c457 100644
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -7,7 +7,7 @@
 		</menu_item_call>
 		<menu_item_call label="L$ kaufen" name="Buy and Sell L$"/>
 		<menu_item_call label="Mein Profil" name="Profile"/>
-		<menu_item_call label="Outfit ändern" name="ChangeOutfit"/>
+		<menu_item_call label="Mein Aussehen" name="ChangeOutfit"/>
 		<menu_item_check label="Mein Inventar" name="Inventory"/>
 		<menu_item_check label="Mein Inventar" name="ShowSidetrayInventory"/>
 		<menu_item_check label="Meine Gesten" name="Gestures"/>
@@ -35,6 +35,7 @@
 	<menu label="Welt" name="World">
 		<menu_item_check label="Minikarte" name="Mini-Map"/>
 		<menu_item_check label="Karte" name="World Map"/>
+		<menu_item_check label="Suchen" name="Search"/>
 		<menu_item_call label="Foto" name="Take Snapshot"/>
 		<menu_item_call label="Landmarke für diesen Ort setzen" name="Create Landmark Here"/>
 		<menu label="Ortsprofil" name="Land">
@@ -228,8 +229,10 @@
 		<menu label="Info anzeigen" name="Display Info">
 			<menu_item_check label="Zeit anzeigen" name="Show Time"/>
 			<menu_item_check label="Render-Info anzeigen" name="Show Render Info"/>
+			<menu_item_check label="Texturinfos anzeigen" name="Show Texture Info"/>
 			<menu_item_check label="Matrizen anzeigen" name="Show Matrices"/>
 			<menu_item_check label="Farbe unter Cursor anzeigen" name="Show Color Under Cursor"/>
+			<menu_item_check label="Speicher anzeigen" name="Show Memory"/>
 			<menu_item_check label="Akutalisierungen an Objekten anzeigen" name="Show Updates"/>
 		</menu>
 		<menu label="Fehler erzwingen" name="Force Errors">
@@ -254,6 +257,7 @@
 			<menu_item_check label="Shadow Frusta" name="Shadow Frusta"/>
 			<menu_item_check label="Okklusion" name="Occlusion"/>
 			<menu_item_check label="Bündel rendern" name="Render Batches"/>
+			<menu_item_check label="Typ aktualisieren" name="Update Type"/>
 			<menu_item_check label="Texture-Anim" name="Texture Anim"/>
 			<menu_item_check label="Textur-Priorität" name="Texture Priority"/>
 			<menu_item_check label="Texturbereich" name="Texture Area"/>
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
index b0ad989a59bc801675bec7cf355bacaa16c0e042..3c63c093d28731c3c3d02d550f0a7edc1cc227f8 100644
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -72,9 +72,9 @@ Fehlerdetails: The notification called &apos;[_NAME]&apos; was not found in noti
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
 	<notification name="LoginFailedNoNetwork">
-		Eine Verbindung zum [SECOND_LIFE_GRID] konnte nicht hergestellt werden.
-&apos;[DIAGNOSTIC]&apos;
-Bitte vergewissern Sie sich, dass Ihre Internetverbindung funktioniert.
+		Verbindung nicht möglich zum [SECOND_LIFE_GRID].
+    &apos;[DIAGNOSTIC]&apos;
+Stellen Sie sicher, dass Ihre Internetverbindung funktioniert.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
 	<notification name="MessageTemplateNotFound">
@@ -340,13 +340,6 @@ Sie benötigen ein Konto, um [SECOND_LIFE] betreten zu können. Möchten Sie jet
 	<notification name="InvalidCredentialFormat">
 		Sie müssen entweder den Benutzernamen oder den Vor- und Nachnamen Ihres Avatars in das Feld „Benutzername“ eingeben und die Anmeldung dann erneut versuchen.
 	</notification>
-	<notification name="AddClassified">
-		Anzeigen werden im Suchverzeichnis im Abschnitt „Anzeigen&quot; und auf [http://secondlife.com/community/classifieds secondlife.com] für eine Woche angezeigt.
-Füllen Sie Ihre Anzeige aus und klicken Sie auf &apos;Veröffentlichen...&apos;, um sie zum Verzeichnis hinzuzufügen.
-Sie werden gebeten für die Anzeige zu bezahlen, wenn Sie auf &apos;Veröffentlichen&apos; klicken.
-Wenn Sie mehr bezahlen, erscheint Ihre Anzeige weiter oben in der Liste, ebenso wenn ein Benutzer nach Ihren Suchbegriffen sucht.
-		<usetemplate ignoretext="So wird eine neue Anzeige erstellt" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
-	</notification>
 	<notification name="DeleteClassified">
 		Anzeige „[NAME]“ löschen?
 Gebühren werden nicht rückerstattet.
@@ -2768,11 +2761,11 @@ Die Schaltfläche wird angezeigt, wenn genügend Platz vorhanden ist.
 		Wählen Sie Einwohner aus, für die Sie das Objekt freigeben möchten.
 	</notification>
 	<notification name="ShareItemsConfirmation">
-		Möchten Sie diese Objekte wirklich für andere freigeben:
+		Möchten Sie wirklich die folgenden Objekte:
 
 &lt;nolink&gt;[ITEMS]&lt;/nolink&gt;
 
-Für folgende Einwohner:
+für folgende Einwohner freigeben:
 
 [RESIDENTS]
 		<usetemplate name="okcancelbuttons" notext="Abbrechen" yestext="OK"/>
@@ -2863,9 +2856,6 @@ Alle stummschalten?
 	<notification label="Welt erkunden" name="HintDestinationGuide">
 		Im Reiseführer finden Sie Tausende von interessanten Orten. Wählen Sie einfach einen Ort aus und klicken Sie auf „Teleportieren“.
 	</notification>
-	<notification label="Aussehen ändern" name="HintAvatarPicker">
-		Möchten Sie einen neuen Look ausprobieren? Klicken Sie auf die Schaltfläche unten, um mehr Avatare zu sehen.
-	</notification>
 	<notification label="Seitenleiste" name="HintSidePanel">
 		In der Seitenleiste können Sie schnell auf Ihr Inventar, Ihre Outfits, Ihre Profile u. ä. zugreifen.
 	</notification>
@@ -2903,6 +2893,38 @@ Alle stummschalten?
 			<button name="cancel" text="Abbrechen"/>
 		</form>
 	</notification>
+	<notification label="" name="ModeChange">
+		Zum Wechsel des Modus müssen Sie das Programm beenden und neu starten.
+		<usetemplate name="okcancelbuttons" notext="Nicht beenden" yestext="Beenden"/>
+	</notification>
+	<notification label="" name="NoClassifieds">
+		Die Erstellung und Bearbeitung von Anzeigen ist nur im Modus „Erweitert“ möglich. Möchten Sie das Programm beenden und den Modus wechseln? Die Modusauswahl ist auf dem Anmeldebildschirm zu finden.
+		<usetemplate name="okcancelbuttons" notext="Nicht beenden" yestext="Beenden"/>
+	</notification>
+	<notification label="" name="NoGroupInfo">
+		Die Erstellung und Bearbeitung von Gruppen ist nur im Modus „Erweitert“ möglich. Möchten Sie das Programm beenden und den Modus wechseln? Die Modusauswahl ist auf dem Anmeldebildschirm zu finden.
+		<usetemplate name="okcancelbuttons" notext="Nicht beenden" yestext="Beenden"/>
+	</notification>
+	<notification label="" name="NoPicks">
+		Die Erstellung und Bearbeitung von Auswahlen ist nur im Modus „Erweitert“ möglich. Möchten Sie das Programm beenden und den Modus wechseln? Die Modusauswahl ist auf dem Anmeldebildschirm zu finden.
+		<usetemplate name="okcancelbuttons" notext="Nicht beenden" yestext="Beenden"/>
+	</notification>
+	<notification label="" name="NoWorldMap">
+		Die Anzeige der Weltkarte ist nur im Modus „Erweitert“ möglich. Möchten Sie das Programm beenden und den Modus wechseln? Die Modusauswahl ist auf dem Anmeldebildschirm zu finden.
+		<usetemplate name="okcancelbuttons" notext="Nicht beenden" yestext="Beenden"/>
+	</notification>
+	<notification label="" name="NoVoiceCall">
+		Voice-Anrufe sind nur im Modus „Erweitert“ möglich. Möchten Sie sich abmelden und den Modus wechseln?
+		<usetemplate name="okcancelbuttons" notext="Nicht beenden" yestext="Beenden"/>
+	</notification>
+	<notification label="" name="NoAvatarShare">
+		Die Freigabe ist nur im Modus „Erweitert“ möglich. Möchten Sie sich abmelden und den Modus wechseln?
+		<usetemplate name="okcancelbuttons" notext="Nicht beenden" yestext="Beenden"/>
+	</notification>
+	<notification label="" name="NoAvatarPay">
+		Die Bezahlung anderer Einwohner ist nur im Modus „Erweitert“ möglich. Möchten Sie sich abmelden und den Modus wechseln?
+		<usetemplate name="okcancelbuttons" notext="Nicht beenden" yestext="Beenden"/>
+	</notification>
 	<global name="UnsupportedCPU">
 		- Ihre CPU-Geschwindigkeit entspricht nicht den Mindestanforderungen.
 	</global>
diff --git a/indra/newview/skins/default/xui/de/panel_login.xml b/indra/newview/skins/default/xui/de/panel_login.xml
index 1bee6b1ead257819e50dd818d3249d460d1ce014..553bd3e2ff74740f89327e53ab934b94ee90280d 100644
--- a/indra/newview/skins/default/xui/de/panel_login.xml
+++ b/indra/newview/skins/default/xui/de/panel_login.xml
@@ -17,6 +17,13 @@
 			</text>
 			<check_box label="Kennwort merken" name="remember_check"/>
 			<button label="Anmelden" name="connect_btn"/>
+			<text name="mode_selection_text">
+				Modus:
+			</text>
+			<combo_box name="mode_combo" tool_tip="Wählen Sie den gewünschten Modus aus. Basis: Second Life schnell und einfach erkunden und chatten. Erweitert: Zugriff auf zusätzliche Funktionen.">
+				<combo_box.item label="Basis" name="Basic"/>
+				<combo_box.item label="Erweitert" name="Advanced"/>
+			</combo_box>
 			<text name="start_location_text">
 				Hier anfangen:
 			</text>
diff --git a/indra/newview/skins/default/xui/de/panel_nearby_media.xml b/indra/newview/skins/default/xui/de/panel_nearby_media.xml
index ef66148902abecb34582c0f61a152709e09f3f59..90885c71924e1e7c0bfd011a5627d41b1819be3e 100644
--- a/indra/newview/skins/default/xui/de/panel_nearby_media.xml
+++ b/indra/newview/skins/default/xui/de/panel_nearby_media.xml
@@ -19,7 +19,7 @@
 		<button label="Stoppen" name="all_nearby_media_disable_btn" tool_tip="Alle Medien in der Nähe ausschalten"/>
 		<button label="Starten" name="all_nearby_media_enable_btn" tool_tip="Alle Medien in der Nähe einschalten"/>
 		<button name="open_prefs_btn" tool_tip="Medien-Einstellungen öffnen"/>
-		<button label="Mehr &gt;&gt;" label_selected="Weniger &lt;&lt;" name="more_btn" tool_tip="Erweiterte Steuerung"/>
+		<button label="Mehr &gt;&gt;" label_selected="&lt;&lt; Weniger" name="more_btn" tool_tip="Erweiterte Steuerung"/>
 		<button label="Mehr &gt;&gt;" label_selected="Weniger &lt;&lt;" name="less_btn" tool_tip="Erweiterte Steuerung"/>
 	</panel>
 	<panel name="nearby_media_panel">
diff --git a/indra/newview/skins/default/xui/de/panel_people.xml b/indra/newview/skins/default/xui/de/panel_people.xml
index 99e0b933b8648dbbbc9197979c56dfa7aaec3ccc..004792bbf531446352523b2c8e936925f1311cba 100644
--- a/indra/newview/skins/default/xui/de/panel_people.xml
+++ b/indra/newview/skins/default/xui/de/panel_people.xml
@@ -18,6 +18,8 @@ Sie suchen nach Leuten? Verwenden Sie die [secondlife:///app/worldmap Karte].
 	<string name="groups_filter_label" value="Nach Gruppen filtern"/>
 	<string name="no_filtered_groups_msg" value="Sie haben nicht das Richtige gefunden? Versuchen Sie es mit der [secondlife:///app/search/groups/[SEARCH_TERM] Suche]."/>
 	<string name="no_groups_msg" value="Suchen Sie nach Gruppen? Versuchen Sie es mit der [secondlife:///app/search/groups Suche]."/>
+	<string name="MiniMapToolTipMsg" value="[REGION](Doppelklicken, um Karte zu öffnen; Umschalttaste gedrückt halten und ziehen, um zu schwenken)"/>
+	<string name="AltMiniMapToolTipMsg" value="[REGION](Doppelklicken, um zu teleportieren; Umschalttaste gedrückt halten und ziehen, um zu schwenken)"/>
 	<filter_editor label="Filter" name="filter_input"/>
 	<tab_container name="tabs">
 		<panel label="IN DER NÄHE" name="nearby_panel">
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
index 8086128dd75d71335ac1145abc91ea72de96c48f..8c8cdd31fed7cf9614e3dede81a5d2eb60f81f2b 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
@@ -29,7 +29,8 @@
 	<check_box label="IM-Chats" name="EnableIMChatPopups" tool_tip="Markieren, um Popups zu sehen, wenn Instant Message eintrifft"/>
 	<spinner label="Lebenszeit von Toasts für Chat in der Nähe:" name="nearby_toasts_lifetime"/>
 	<spinner label="Ein-/Ausblenddauer von Toasts für Chat in der Nähe:" name="nearby_toasts_fadingtime"/>
-	<check_box label="Bei Chat Maschinenübersetzung verwenden (Service von Google)" name="translate_chat_checkbox"/>
+	<check_box name="translate_chat_checkbox"/>
+	<text name="translate_chb_label" >Bei Chat Maschinenübersetzung verwenden (Service von Google)</text>
 	<text name="translate_language_text">
 		Chat übersetzen in:
 	</text>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_sound.xml b/indra/newview/skins/default/xui/de/panel_preferences_sound.xml
index 0f029d8664ae09e1e20dfa353078ec5dec127d2e..07631b6a91146b3b09c22904cb9b190ee73e3fad 100644
--- a/indra/newview/skins/default/xui/de/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_sound.xml
@@ -4,7 +4,8 @@
 		Mittlere Maustaste
 	</panel.string>
 	<slider label="Master-Lautstärke" name="System Volume"/>
-	<check_box initial_value="true" label="Stummschalten, wenn minimiert" name="mute_when_minimized"/>
+	<check_box initial_value="true" name="mute_when_minimized"/>
+	<text name="mute_chb_label">Stummschalten, wenn minimiert</text>
 	<slider label="Schaltflächen" name="UI Volume"/>
 	<slider label="Umgebung" name="Wind Volume"/>
 	<slider label="Soundeffekte" name="SFX Volume"/>
diff --git a/indra/newview/skins/default/xui/de/panel_profile.xml b/indra/newview/skins/default/xui/de/panel_profile.xml
index 938631f65d398e115556259551a709010b66f3a9..b4c6e67108564f801305b05281f83bd2f40dae58 100644
--- a/indra/newview/skins/default/xui/de/panel_profile.xml
+++ b/indra/newview/skins/default/xui/de/panel_profile.xml
@@ -16,6 +16,12 @@
 	<string name="RegisterDateFormat">
 		[REG_DATE] ([AGE])
 	</string>
+	<string name="name_text_args">
+		[NAME]
+	</string>
+	<string name="display_name_text_args">
+		[DISPLAY_NAME]
+	</string>
 	<layout_stack name="layout">
 		<layout_panel name="profile_stack">
 			<scroll_container name="profile_scroll">
@@ -34,7 +40,7 @@
 					</text_editor>
 					<text name="title_partner_text" value="Partner:"/>
 					<panel name="partner_data_panel">
-						<name_box initial_value="(wird in Datenbank gesucht)" name="partner_text"/>
+						<text initial_value="(wird in Datenbank gesucht)" name="partner_text"/>
 					</panel>
 					<text name="title_groups_text" value="Gruppen:"/>
 				</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_script_ed.xml b/indra/newview/skins/default/xui/de/panel_script_ed.xml
index 73789f06d808fd186967dd5cff3ad7cf712ba9bd..adfe2a342b77a694e6130fecafef47d633099c1e 100644
--- a/indra/newview/skins/default/xui/de/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/de/panel_script_ed.xml
@@ -15,6 +15,9 @@
 	<panel.string name="Title">
 		Skript: [NAME]
 	</panel.string>
+	<panel.string name="external_editor_not_set">
+		Wählen Sie über die Umgebungsvariable „LL_SCRIPT_EDITOR“ oder die Einstellung „ExternalEditor“ einen Editor aus.
+	</panel.string>
 	<menu_bar name="script_menu">
 		<menu label="Datei" name="File">
 			<menu_item_call label="Speichern" name="Save"/>
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
index 7284e40be26cb87bbce31dc2ea5d27833c76ff81..0c621db6b0d448a8cf7178717c7fdaf17e4ced30 100644
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -1067,7 +1067,7 @@
 	<string name="PermNo">
 		Nein
 	</string>
-	<string name="Chat" value=" Chat:"/>
+	<string name="Chat Message" value="Chat:"/>
 	<string name="Sound" value=" Sound:"/>
 	<string name="Wait" value=" --- Warten:"/>
 	<string name="AnimFlagStop" value=" Animation stoppen:"/>
@@ -1864,12 +1864,6 @@ Gültige Formate: .wav, .tga, .bmp, .jpg, .jpeg oder .bvh
 	<string name="accel-win-shift">
 		Umschalt+
 	</string>
-	<string name="Esc">
-		Esc
-	</string>
-	<string name="Home">
-		Zuhause
-	</string>
 	<string name="FileSaved">
 		Datei wurde gespeichert
 	</string>
@@ -1898,7 +1892,7 @@ Gültige Formate: .wav, .tga, .bmp, .jpg, .jpeg oder .bvh
 		Rechts
 	</string>
 	<string name="Direction_Back">
-		Hinten
+		Zurück
 	</string>
 	<string name="Direction_North">
 		Norden
@@ -1987,6 +1981,9 @@ Gültige Formate: .wav, .tga, .bmp, .jpg, .jpeg oder .bvh
 	<string name="Other">
 		Sonstige
 	</string>
+	<string name="Rental">
+		Vermietung
+	</string>
 	<string name="Any">
 		Alle
 	</string>
@@ -3966,7 +3963,7 @@ Missbrauchsbericht
 	<string name="Notices">
 		Mitteilungen
 	</string>
-	<string name="Chat">
+	<string name="Chat" value=" Chat:">
 		Chat
 	</string>
 	<string name="DeleteItems">
@@ -3978,4 +3975,348 @@ Missbrauchsbericht
 	<string name="EmptyOutfitText">
 		Keine Objekte in diesem Outfit
 	</string>
+	<string name="ExternalEditorNotSet">
+		Wählen Sie über die Einstellung „ExternalEditor“ einen Editor aus
+	</string>
+	<string name="ExternalEditorNotFound">
+		Angegebener externer Editor nicht gefunden.
+Setzen Sie den Editorpfad in Anführungszeichen
+(z. B. &quot;/pfad/editor&quot; &quot;%s&quot;).
+	</string>
+	<string name="ExternalEditorCommandParseError">
+		Fehler beim Parsen des externen Editorbefehls.
+	</string>
+	<string name="ExternalEditorFailedToRun">
+		Externer Editor konnte nicht ausgeführt werden.
+	</string>
+	<string name="Esc">
+		Esc
+	</string>
+	<string name="Space">
+		Space
+	</string>
+	<string name="Enter">
+		Enter
+	</string>
+	<string name="Tab">
+		Tab
+	</string>
+	<string name="Ins">
+		Ins
+	</string>
+	<string name="Del">
+		Del
+	</string>
+	<string name="Backsp">
+		Backsp
+	</string>
+	<string name="Shift">
+		Shift
+	</string>
+	<string name="Ctrl">
+		Ctrl
+	</string>
+	<string name="Alt">
+		Alt
+	</string>
+	<string name="CapsLock">
+		CapsLock
+	</string>
+	<string name="Home">
+		Zuhause
+	</string>
+	<string name="End">
+		End
+	</string>
+	<string name="PgUp">
+		PgUp
+	</string>
+	<string name="PgDn">
+		PgDn
+	</string>
+	<string name="F1">
+		F1
+	</string>
+	<string name="F2">
+		F2
+	</string>
+	<string name="F3">
+		F3
+	</string>
+	<string name="F4">
+		F4
+	</string>
+	<string name="F5">
+		F5
+	</string>
+	<string name="F6">
+		F6
+	</string>
+	<string name="F7">
+		F7
+	</string>
+	<string name="F8">
+		F8
+	</string>
+	<string name="F9">
+		F9
+	</string>
+	<string name="F10">
+		F10
+	</string>
+	<string name="F11">
+		F11
+	</string>
+	<string name="F12">
+		F12
+	</string>
+	<string name="Add">
+		Addieren
+	</string>
+	<string name="Subtract">
+		Subtrahieren
+	</string>
+	<string name="Multiply">
+		Multiplizieren
+	</string>
+	<string name="Divide">
+		Dividieren
+	</string>
+	<string name="PAD_DIVIDE">
+		PAD_DIVIDE
+	</string>
+	<string name="PAD_LEFT">
+		PAD_LEFT
+	</string>
+	<string name="PAD_RIGHT">
+		PAD_RIGHT
+	</string>
+	<string name="PAD_DOWN">
+		PAD_DOWN
+	</string>
+	<string name="PAD_UP">
+		PAD_UP
+	</string>
+	<string name="PAD_HOME">
+		PAD_HOME
+	</string>
+	<string name="PAD_END">
+		PAD_END
+	</string>
+	<string name="PAD_PGUP">
+		PAD_PGUP
+	</string>
+	<string name="PAD_PGDN">
+		PAD_PGDN
+	</string>
+	<string name="PAD_CENTER">
+		PAD_CENTER
+	</string>
+	<string name="PAD_INS">
+		PAD_INS
+	</string>
+	<string name="PAD_DEL">
+		PAD_DEL
+	</string>
+	<string name="PAD_Enter">
+		PAD_Enter
+	</string>
+	<string name="PAD_BUTTON0">
+		PAD_BUTTON0
+	</string>
+	<string name="PAD_BUTTON1">
+		PAD_BUTTON1
+	</string>
+	<string name="PAD_BUTTON2">
+		PAD_BUTTON2
+	</string>
+	<string name="PAD_BUTTON3">
+		PAD_BUTTON3
+	</string>
+	<string name="PAD_BUTTON4">
+		PAD_BUTTON4
+	</string>
+	<string name="PAD_BUTTON5">
+		PAD_BUTTON5
+	</string>
+	<string name="PAD_BUTTON6">
+		PAD_BUTTON6
+	</string>
+	<string name="PAD_BUTTON7">
+		PAD_BUTTON7
+	</string>
+	<string name="PAD_BUTTON8">
+		PAD_BUTTON8
+	</string>
+	<string name="PAD_BUTTON9">
+		PAD_BUTTON9
+	</string>
+	<string name="PAD_BUTTON10">
+		PAD_BUTTON10
+	</string>
+	<string name="PAD_BUTTON11">
+		PAD_BUTTON11
+	</string>
+	<string name="PAD_BUTTON12">
+		PAD_BUTTON12
+	</string>
+	<string name="PAD_BUTTON13">
+		PAD_BUTTON13
+	</string>
+	<string name="PAD_BUTTON14">
+		PAD_BUTTON14
+	</string>
+	<string name="PAD_BUTTON15">
+		PAD_BUTTON15
+	</string>
+	<string name="-">
+		-
+	</string>
+	<string name="=">
+		=
+	</string>
+	<string name="`">
+		`
+	</string>
+	<string name=";">
+		;
+	</string>
+	<string name="[">
+		[
+	</string>
+	<string name="]">
+		]
+	</string>
+	<string name="\">
+		\
+	</string>
+	<string name="0">
+		0
+	</string>
+	<string name="1">
+		1
+	</string>
+	<string name="2">
+		2
+	</string>
+	<string name="3">
+		3
+	</string>
+	<string name="4">
+		4
+	</string>
+	<string name="5">
+		5
+	</string>
+	<string name="6">
+		6
+	</string>
+	<string name="7">
+		7
+	</string>
+	<string name="8">
+		8
+	</string>
+	<string name="9">
+		9
+	</string>
+	<string name="A">
+		A
+	</string>
+	<string name="B">
+		B
+	</string>
+	<string name="C">
+		C
+	</string>
+	<string name="D">
+		D
+	</string>
+	<string name="E">
+		E
+	</string>
+	<string name="F">
+		F
+	</string>
+	<string name="G">
+		G
+	</string>
+	<string name="H">
+		H
+	</string>
+	<string name="I">
+		I
+	</string>
+	<string name="J">
+		J
+	</string>
+	<string name="K">
+		K
+	</string>
+	<string name="L">
+		L
+	</string>
+	<string name="M">
+		M
+	</string>
+	<string name="N">
+		N
+	</string>
+	<string name="O">
+		O
+	</string>
+	<string name="P">
+		P
+	</string>
+	<string name="Q">
+		Q
+	</string>
+	<string name="R">
+		R
+	</string>
+	<string name="S">
+		S
+	</string>
+	<string name="T">
+		T
+	</string>
+	<string name="U">
+		U
+	</string>
+	<string name="V">
+		V
+	</string>
+	<string name="W">
+		W
+	</string>
+	<string name="X">
+		X
+	</string>
+	<string name="Y">
+		Y
+	</string>
+	<string name="Z">
+		Z
+	</string>
+	<string name="BeaconParticle">
+		Partikel-Beacons werden angezeigt (blau)
+	</string>
+	<string name="BeaconPhysical">
+		Beacons für physische Objekte werden angezeigt (grün)
+	</string>
+	<string name="BeaconScripted">
+		Beacons für Skriptobjekte werden angezeigt (rot)
+	</string>
+	<string name="BeaconScriptedTouch">
+		Beacons für Skriptobjekte mit Berührungsfunktion werden angezeigt (rot)
+	</string>
+	<string name="BeaconSound">
+		Sound-Beacons werden angezeigt (gelb)
+	</string>
+	<string name="BeaconMedia">
+		Medien-Beacons werden angezeigt (weiß)
+	</string>
+	<string name="ParticleHiding">
+		Partikel werden ausgeblendet
+	</string>
 </strings>
diff --git a/indra/newview/skins/default/xui/en/floater_beacons.xml b/indra/newview/skins/default/xui/en/floater_beacons.xml
index 4fc2b698d80a5d004b92eeeb6e4205322f43ac16..3d29356b2256a4de0d43e2a3e4406c00c375d1c1 100644
--- a/indra/newview/skins/default/xui/en/floater_beacons.xml
+++ b/indra/newview/skins/default/xui/en/floater_beacons.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <floater
  legacy_header_height="18"
- height="225"
+ height="245"
  layout="topleft"
  name="beacons"
  help_topic="beacons"
@@ -12,7 +12,7 @@
  width="240">
     <panel
      follows="left|top|right|bottom"
-     height="200"
+     height="240"
      layout="topleft"
      left="10"
      name="beacons_panel"
@@ -133,6 +133,16 @@
           <check_box.commit_callback
            function="Beacons.UICheck" />
         </check_box>
+         <check_box
+         control_name="moapbeacon"
+         height="16"
+         left="0"
+         label="Media sources"
+         layout="topleft"
+         name="moapbeacon" >
+          <check_box.commit_callback
+           function="Beacons.UICheck" />
+        </check_box>
 
     </panel>
 </floater>
diff --git a/indra/newview/skins/default/xui/en/floater_buy_contents.xml b/indra/newview/skins/default/xui/en/floater_buy_contents.xml
index babbf0f5ca4c9a80d00aaf0b7b5e0550e84f4fa4..92001534e7e349d0586788069eb061fe5191c27d 100644
--- a/indra/newview/skins/default/xui/en/floater_buy_contents.xml
+++ b/indra/newview/skins/default/xui/en/floater_buy_contents.xml
@@ -34,7 +34,7 @@
      layout="topleft"
      name="contains_text"
      width="276">
-        [NAME] contains:
+        &lt;nolink&gt;[NAME]&lt;/nolink&gt; contains:
     </text>
     <scroll_list
      background_visible="true"
diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml
index 8eee8f44b57dc2be4b019650193a29640791b517..dcfa8bc060d2ed541dbc6b0ea9b25826299b07d5 100644
--- a/indra/newview/skins/default/xui/en/floater_preferences.xml
+++ b/indra/newview/skins/default/xui/en/floater_preferences.xml
@@ -45,7 +45,7 @@
      name="pref core"
      tab_group="1"
      tab_position="left"
-     tab_width="115"
+     tab_width="140"
      tab_padding_right="0"
      top="21"
      width="658">
@@ -96,7 +96,7 @@
          filename="panel_preferences_colors.xml"
          label="Colors"
          layout="topleft"
-         help_topic="preferences_im_tab"
+         help_topic="preferences_colors_tab"
          name="colors" />
         <panel
 		 class="panel_preference"
diff --git a/indra/newview/skins/default/xui/en/floater_ui_preview.xml b/indra/newview/skins/default/xui/en/floater_ui_preview.xml
index 12c45617530885b9677f4c40f7920e35f816b5db..3921cfcd2c92ffff9e226d134457e9a36840df25 100644
--- a/indra/newview/skins/default/xui/en/floater_ui_preview.xml
+++ b/indra/newview/skins/default/xui/en/floater_ui_preview.xml
@@ -12,6 +12,10 @@
  title="XUI PREVIEW TOOL"
  translate="false"
  width="750">
+    <string name="ExternalEditorNotSet">
+Select an editor by setting the environment variable LL_XUI_EDITOR
+or the ExternalEditor setting
+or specifying its path in the "Editor Path" field.</string>
     <panel
      bottom="640"
      follows="left|top|right|bottom"
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
index d9991fcae96339fc9d65d74d10dd65fb678e0950..e5ae0b950a9d004c8dae3e5bcc3e8edaf517874e 100644
--- a/indra/newview/skins/default/xui/en/main_view.xml
+++ b/indra/newview/skins/default/xui/en/main_view.xml
@@ -80,6 +80,13 @@
                           user_resize="false" 
                           name="hud container"
                           width="500">
+              <view top="0"
+                    follows="all"
+                    height="500"
+                    left="0"
+                    mouse_opaque="false"
+                    name="floater_snap_region"
+                    width="500"/>
               <panel follows="left|top"
                      height="19"
                      left="0"
diff --git a/indra/newview/skins/default/xui/en/menu_attachment_self.xml b/indra/newview/skins/default/xui/en/menu_attachment_self.xml
index 84e81397beb465b0df1b180f7cd845ab60decc93..b8128da358631e2885fae37b4ebd0d72ba49eb66 100644
--- a/indra/newview/skins/default/xui/en/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/en/menu_attachment_self.xml
@@ -68,7 +68,7 @@ name="Stand Up">
      function="Self.EnableStandUp" />
   </menu_item_call>
   <menu_item_call
-  label="Change Outfit"
+  label="My Appearance"
   name="Change Outfit">
     <menu_item_call.on_click
      function="CustomizeAvatar" />
diff --git a/indra/newview/skins/default/xui/en/menu_avatar_self.xml b/indra/newview/skins/default/xui/en/menu_avatar_self.xml
index 2afa29ec100e4fcc500d3500feef858c2d16ac17..d9bdfece383b82c4f4188628694e1e0275c71a2e 100644
--- a/indra/newview/skins/default/xui/en/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/en/menu_avatar_self.xml
@@ -150,6 +150,18 @@
                      function="Edit.EnableTakeOff"
                      parameter="tattoo" />
                 </menu_item_call>
+               <menu_item_call
+                 enabled="false"
+                 label="Physics"
+                 layout="topleft"
+                 name="Self Physics">
+                    <menu_item_call.on_click
+                     function="Edit.TakeOff"
+                     parameter="physics" />
+                    <menu_item_call.on_enable
+                     function="Edit.EnableTakeOff"
+                     parameter="physics" />
+                </menu_item_call>
                <menu_item_call
                  enabled="false"
                  label="Alpha"
@@ -193,7 +205,7 @@
         </menu_item_call>
     </context_menu>
      <menu_item_call
-     label="Change Outfit"
+     label="My Appearance"
      layout="topleft"
      name="Chenge Outfit">
         <menu_item_call.on_click
diff --git a/indra/newview/skins/default/xui/en/menu_bottomtray.xml b/indra/newview/skins/default/xui/en/menu_bottomtray.xml
index 1b55fa4fd3c8aa1430b4552dfd09e2a35fd06ee6..07dabe1909e0618954fe2d56aebe7b685c88d75d 100644
--- a/indra/newview/skins/default/xui/en/menu_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/menu_bottomtray.xml
@@ -9,7 +9,7 @@
  visible="false"
  width="128">
     <menu_item_check
-         label="Voice Enabled"
+         label="Speak Button"
          layout="topleft"
          name="EnableVoiceChat">
            <menu_item_check.on_click
@@ -19,7 +19,6 @@
              function="CheckControl"
              parameter="EnableVoiceChat" />
     </menu_item_check>
-    <menu_item_separator/>
     <menu_item_check
          label="Gesture button"
          layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml
index 50ad3f834e8383655e493aef9bb24d9e3825399a..5e7b16ed4a2cbc40219a04fe2d520117fe30f8db 100644
--- a/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_inspect_self_gear.xml
@@ -1,63 +1,249 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <toggleable_menu
-         create_jump_keys="true"
-         layout="topleft"
-         mouse_opaque="false"
-         visible="false"
-         name="Gear Menu">
+ layout="topleft"
+ name="Self Pie">
   <menu_item_call
    label="Sit Down"
-   enabled="true"
-   name="sit_down_here">
+   layout="topleft"
+   name="Sit Down Here">
     <menu_item_call.on_click
      function="Self.SitDown"
      parameter="" />
-    <menu_item_call.on_visible
+    <menu_item_call.on_enable
      function="Self.EnableSitDown" />
   </menu_item_call>
   <menu_item_call
    label="Stand Up"
-   enabled="true"
-   name="stand_up">
+   layout="topleft"
+   name="Stand Up">
     <menu_item_call.on_click
      function="Self.StandUp"
      parameter="" />
-    <menu_item_call.on_visible
+    <menu_item_call.on_enable
      function="Self.EnableStandUp" />
   </menu_item_call>
+  <context_menu
+   label="Take Off"
+   layout="topleft"
+   name="Take Off &gt;">
+    <context_menu
+     label="Clothes"
+     layout="topleft"
+     name="Clothes &gt;">
+      <menu_item_call
+       enabled="false"
+       label="Shirt"
+       layout="topleft"
+       name="Shirt">
+        <menu_item_call.on_click
+         function="Edit.TakeOff"
+         parameter="shirt" />
+        <menu_item_call.on_enable
+         function="Edit.EnableTakeOff"
+         parameter="shirt" />
+      </menu_item_call>
+      <menu_item_call
+       enabled="false"
+       label="Pants"
+       layout="topleft"
+       name="Pants">
+        <menu_item_call.on_click
+         function="Edit.TakeOff"
+         parameter="pants" />
+        <menu_item_call.on_enable
+         function="Edit.EnableTakeOff"
+         parameter="pants" />
+      </menu_item_call>
+      <menu_item_call
+       enabled="false"
+       label="Skirt"
+       layout="topleft"
+       name="Skirt">
+        <menu_item_call.on_click
+         function="Edit.TakeOff"
+         parameter="skirt" />
+        <menu_item_call.on_enable
+         function="Edit.EnableTakeOff"
+         parameter="skirt" />
+      </menu_item_call>
+      <menu_item_call
+       enabled="false"
+       label="Shoes"
+       layout="topleft"
+       name="Shoes">
+        <menu_item_call.on_click
+         function="Edit.TakeOff"
+         parameter="shoes" />
+        <menu_item_call.on_enable
+         function="Edit.EnableTakeOff"
+         parameter="shoes" />
+      </menu_item_call>
+      <menu_item_call
+       enabled="false"
+       label="Socks"
+       layout="topleft"
+       name="Socks">
+        <menu_item_call.on_click
+         function="Edit.TakeOff"
+         parameter="socks" />
+        <menu_item_call.on_enable
+         function="Edit.EnableTakeOff"
+         parameter="socks" />
+      </menu_item_call>
+      <menu_item_call
+       enabled="false"
+       label="Jacket"
+       layout="topleft"
+       name="Jacket">
+        <menu_item_call.on_click
+         function="Edit.TakeOff"
+         parameter="jacket" />
+        <menu_item_call.on_enable
+         function="Edit.EnableTakeOff"
+         parameter="jacket" />
+      </menu_item_call>
+      <menu_item_call
+       enabled="false"
+       label="Gloves"
+       layout="topleft"
+       name="Gloves">
+        <menu_item_call.on_click
+         function="Edit.TakeOff"
+         parameter="gloves" />
+        <menu_item_call.on_enable
+         function="Edit.EnableTakeOff"
+         parameter="gloves" />
+      </menu_item_call>
+      <menu_item_call
+            enabled="false"
+            label="Undershirt"
+            layout="topleft"
+            name="Self Undershirt">
+        <menu_item_call.on_click
+         function="Edit.TakeOff"
+         parameter="undershirt" />
+        <menu_item_call.on_enable
+         function="Edit.EnableTakeOff"
+         parameter="undershirt" />
+      </menu_item_call>
+      <menu_item_call
+        enabled="false"
+        label="Underpants"
+        layout="topleft"
+        name="Self Underpants">
+        <menu_item_call.on_click
+         function="Edit.TakeOff"
+         parameter="underpants" />
+        <menu_item_call.on_enable
+         function="Edit.EnableTakeOff"
+         parameter="underpants" />
+      </menu_item_call>
+      <menu_item_call
+        enabled="false"
+        label="Tattoo"
+        layout="topleft"
+        name="Self Tattoo">
+        <menu_item_call.on_click
+         function="Edit.TakeOff"
+         parameter="tattoo" />
+        <menu_item_call.on_enable
+         function="Edit.EnableTakeOff"
+         parameter="tattoo" />
+      </menu_item_call>
+      <menu_item_call
+        enabled="false"
+        label="Alpha"
+        layout="topleft"
+        name="Self Alpha">
+        <menu_item_call.on_click
+         function="Edit.TakeOff"
+         parameter="alpha" />
+        <menu_item_call.on_enable
+         function="Edit.EnableTakeOff"
+         parameter="alpha" />
+      </menu_item_call>
+      <menu_item_separator
+       layout="topleft" />
+      <menu_item_call
+       label="All Clothes"
+       layout="topleft"
+       name="All Clothes">
+        <menu_item_call.on_click
+         function="Edit.TakeOff"
+         parameter="all" />
+      </menu_item_call>
+    </context_menu>
+    <context_menu
+     label="HUD"
+     layout="topleft"
+     name="Object Detach HUD" />
+    <context_menu
+     label="Detach"
+     layout="topleft"
+     name="Object Detach" />
+    <menu_item_call
+     label="Detach All"
+     layout="topleft"
+     name="Detach All">
+      <menu_item_call.on_click
+       function="Self.RemoveAllAttachments"
+       parameter="" />
+      <menu_item_call.on_enable
+       function="Self.EnableRemoveAllAttachments" />
+    </menu_item_call>
+  </context_menu>
   <menu_item_call
-   label="Change Outfit"
-   name="change_outfit">
+  label="Change Outfit"
+  layout="topleft"
+  name="Chenge Outfit">
     <menu_item_call.on_click
      function="CustomizeAvatar" />
     <menu_item_call.on_enable
      function="Edit.EnableCustomizeAvatar" />
   </menu_item_call>
-  <menu_item_call
-   label="My Profile"
-   enabled="true" 
-   name="my_profile">
+  <menu_item_call label="Edit My Outfit"
+  layout="topleft"
+  name="Edit Outfit">
     <menu_item_call.on_click
-     function="ShowAgentProfile"
-     parameter="agent" />
+     function="EditOutfit" />
+    <menu_item_call.on_enable
+     function="Edit.EnableCustomizeAvatar" />
+  </menu_item_call>
+  <menu_item_call label="Edit My Shape"
+  layout="topleft"
+  name="Edit My Shape">
+    <menu_item_call.on_click
+     function="EditShape" />
+    <menu_item_call.on_enable
+     function="Edit.EnableEditShape" />
   </menu_item_call>
   <menu_item_call
-   label="My Friends"
-   name="my_friends">
+    label="My Friends"
+    layout="topleft"
+    name="Friends...">
     <menu_item_call.on_click
-    function="SideTray.PanelPeopleTab"
-    parameter="friends_panel" />
+     function="SideTray.PanelPeopleTab"
+     parameter="friends_panel" />
   </menu_item_call>
   <menu_item_call
    label="My Groups"
-   name="my_groups">
+   layout="topleft"
+   name="Groups...">
     <menu_item_call.on_click
      function="SideTray.PanelPeopleTab"
      parameter="groups_panel" />
   </menu_item_call>
   <menu_item_call
- label="Debug Textures"
-     name="Debug...">
+    label="My Profile"
+    layout="topleft"
+    name="Profile...">
+    <menu_item_call.on_click
+     function="ShowAgentProfile"
+     parameter="agent" />
+  </menu_item_call>
+  <menu_item_call
+   label="Debug Textures"
+       name="Debug...">
     <menu_item_call.on_click
      function="Avatar.Debug" />
     <menu_item_call.on_visible
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
index c0046d8e2834bed314670daa691bd936c407c13a..e91f4458aee8d9c2954530f720fd577abba7fcb0 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory.xml
@@ -200,6 +200,14 @@
              function="Inventory.DoCreate"
              parameter="tattoo" />
         </menu_item_call>
+        <menu_item_call
+         label="New Physics"
+         layout="topleft"
+         name="New Physics">
+            <menu_item_call.on_click
+             function="Inventory.DoCreate"
+             parameter="physics" />
+        </menu_item_call>
     </menu>
     <menu
      label="New Body Parts"
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_add.xml b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
index ae98abf4fbce4403f1c93771d9549d8ed1428438..90e8db370910d601917395f20a48d98e19e24cce 100644
--- a/indra/newview/skins/default/xui/en/menu_inventory_add.xml
+++ b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
@@ -188,6 +188,14 @@
                      function="Inventory.DoCreate"
                      parameter="tattoo" />
                 </menu_item_call>
+                <menu_item_call
+                 label="New Physics"
+                 layout="topleft"
+                 name="New Physics">
+                    <menu_item_call.on_click
+                     function="Inventory.DoCreate"
+                     parameter="physics" />
+                </menu_item_call>
             </menu>
             <menu
              height="85"
diff --git a/indra/newview/skins/default/xui/en/menu_media_ctrl.xml b/indra/newview/skins/default/xui/en/menu_media_ctrl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c39c26f25f5278cc53619923df540bd565eedace
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/menu_media_ctrl.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ name="media ctrl context menu">
+  <menu_item_call
+   label="Cut"
+   layout="topleft"
+   name="Cut">
+    <menu_item_call.on_click
+     function="Edit.Cut" />
+    <menu_item_call.on_enable
+     function="Edit.EnableCut" />
+  </menu_item_call>
+  <menu_item_call
+   label="Copy"
+   layout="topleft"
+   name="Copy">
+    <menu_item_call.on_click
+     function="Edit.Copy" />
+    <menu_item_call.on_enable
+     function="Edit.EnableCopy" />
+  </menu_item_call>
+  <menu_item_call
+   label="Paste"
+   layout="topleft"
+   name="Paste">
+    <menu_item_call.on_click
+     function="Edit.Paste" />
+    <menu_item_call.on_enable
+     function="Edit.EnablePaste" />
+  </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/default/xui/en/menu_outfit_gear.xml b/indra/newview/skins/default/xui/en/menu_outfit_gear.xml
index 5fc25b8f0f9c68b738b7297f07c3fff6473d7952..fc7272b9047f8e5073d2bbfaae90abb9408fb6f2 100644
--- a/indra/newview/skins/default/xui/en/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/en/menu_outfit_gear.xml
@@ -132,6 +132,14 @@
                      function="Gear.Create"
                      parameter="alpha" />
                 </menu_item_call>
+                <menu_item_call
+                 label="New Physics"
+                 layout="topleft"
+                 name="New Physics">
+                    <menu_item_call.on_click
+                     function="Gear.Create"
+                     parameter="physics" />
+                </menu_item_call>
                 <menu_item_call
                  label="New Tattoo"
                  layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/menu_text_editor.xml b/indra/newview/skins/default/xui/en/menu_text_editor.xml
index ecd96088e739d95b22de12d3b3f69dcdafc6a207..fe8489166b927c9a490bf6b189b79a279797a27b 100644
--- a/indra/newview/skins/default/xui/en/menu_text_editor.xml
+++ b/indra/newview/skins/default/xui/en/menu_text_editor.xml
@@ -4,8 +4,7 @@
   <menu_item_call
    label="Cut"
    layout="topleft"
-   name="Cut"
-   shortcut="control|X">
+   name="Cut">
     <menu_item_call.on_click
      function="Edit.Cut" />
     <menu_item_call.on_enable
@@ -14,8 +13,7 @@
   <menu_item_call
    label="Copy"
    layout="topleft"
-   name="Copy"
-   shortcut="control|C">
+   name="Copy">
     <menu_item_call.on_click
      function="Edit.Copy" />
     <menu_item_call.on_enable
@@ -24,8 +22,7 @@
   <menu_item_call
    label="Paste"
    layout="topleft"
-   name="Paste"
-   shortcut="control|V">
+   name="Paste">
     <menu_item_call.on_click
      function="Edit.Paste" />
     <menu_item_call.on_enable
@@ -34,8 +31,7 @@
   <menu_item_call
    label="Delete"
    layout="topleft"
-   name="Delete"
-   shortcut="Del">
+   name="Delete">
     <menu_item_call.on_click
      function="Edit.Delete" />
     <menu_item_call.on_enable
@@ -44,8 +40,7 @@
   <menu_item_call
    label="Select All"
    layout="topleft"
-   name="Select All"
-   shortcut="control|A">
+   name="Select All">
     <menu_item_call.on_click
      function="Edit.SelectAll" />
     <menu_item_call.on_enable
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 606ff695991077a49c8ddb769e53acb9a2c49b03..a5115b0faaaa962ebc9f1542931efbac82cc6593 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -41,7 +41,7 @@
              parameter="agent" />
         </menu_item_call>
         <menu_item_call
-         label="Change Outfit"
+         label="My Appearance"
          name="ChangeOutfit">
             <menu_item_call.on_click
              function="CustomizeAvatar" />
@@ -261,6 +261,17 @@
              function="Floater.Toggle"
              parameter="world_map" />
         </menu_item_check>
+        <menu_item_check
+        label="Search"
+        name="Search"
+        shortcut="control|F">
+            <menu_item_check.on_check
+             function="Floater.Visible"
+             parameter="search" />
+            <menu_item_check.on_click
+             function="Floater.Toggle"
+             parameter="search" />
+            </menu_item_check>
         <menu_item_call
          label="Snapshot"
          name="Take Snapshot"
@@ -3102,6 +3113,16 @@
              function="ToggleControl"
              parameter="ImagePipelineUseHTTP" />
         </menu_item_check>
+        <menu_item_check
+         label="HTTP Inventory"
+         name="HTTP Inventory">
+            <menu_item_check.on_check
+             function="CheckControl"
+             parameter="UseHTTPInventory" />
+            <menu_item_check.on_click
+             function="ToggleControl"
+             parameter="UseHTTPInventory" />
+        </menu_item_check>
         <menu_item_call
          label="Compress Images"
          name="Compress Images">
@@ -3417,6 +3438,16 @@
                  function="Edit.EnableTakeOff"
                  parameter="tattoo" />
             </menu_item_call>
+            <menu_item_call
+             label="Physics"
+             name="Physics">
+                <menu_item_call.on_click
+                 function="Edit.TakeOff"
+                 parameter="physics" />
+                <menu_item_call.on_enable
+                 function="Edit.EnableTakeOff"
+                 parameter="physics" />
+            </menu_item_call>
             <menu_item_call
              label="All Clothes"
              name="All Clothes">
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index f008042a81c4e7d3edb0d355a9440ddf7ba83849..3fb3717e682e4c9bcac7a42fc93086d0ceb21090 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -104,6 +104,7 @@
 Your version of [APP_NAME] does not know how to display the notification it just received.  Please verify that you have the latest Viewer installed.
 
 Error details: The notification called &apos;[_NAME]&apos; was not found in notifications.xml.
+    <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -116,6 +117,7 @@ Error details: The notification called &apos;[_NAME]&apos; was not found in noti
 Floater error: Could not find the following controls:
 
 [CONTROLS]
+    <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -126,6 +128,7 @@ Floater error: Could not find the following controls:
    name="TutorialNotFound"
    type="alertmodal">
 No tutorial is currently available.
+    <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -154,6 +157,7 @@ No tutorial is currently available.
    name="BadInstallation"
    type="alertmodal">
  An error occurred while updating [APP_NAME].  Please [http://get.secondlife.com download the latest version] of the Viewer.
+    <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -163,8 +167,9 @@ No tutorial is currently available.
    icon="alertmodal.tga"
    name="LoginFailedNoNetwork"
    type="alertmodal">
-Could not connect to the [SECOND_LIFE_GRID].
-&apos;[DIAGNOSTIC]&apos;
+    <tag>fail</tag>
+    Could not connect to the [SECOND_LIFE_GRID].
+    &apos;[DIAGNOSTIC]&apos;
 Make sure your Internet connection is working properly.
 	<usetemplate
      name="okbutton"
@@ -176,6 +181,7 @@ Make sure your Internet connection is working properly.
    name="MessageTemplateNotFound"
    type="alertmodal">
 Message Template [PATH] not found.
+   <tag>fail</tag>
 	<usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -198,6 +204,7 @@ Save changes to current clothing/body part?
    name="CompileQueueSaveText"
    type="alertmodal">
 There was a problem uploading the text for a script due to the following reason: [REASON]. Please try again later.
+    <tag>fail</tag>
   </notification>
 
   <notification
@@ -205,6 +212,7 @@ There was a problem uploading the text for a script due to the following reason:
    name="CompileQueueSaveBytecode"
    type="alertmodal">
 There was a problem uploading the compiled script due to the following reason: [REASON]. Please try again later.
+    <tag>fail</tag>
   </notification>
 
   <notification
@@ -212,6 +220,7 @@ There was a problem uploading the compiled script due to the following reason: [
    name="WriteAnimationFail"
    type="alertmodal">
 There was a problem writing animation data.  Please try again later.
+    <tag>fail</tag>
   </notification>
 
   <notification
@@ -219,6 +228,7 @@ There was a problem writing animation data.  Please try again later.
    name="UploadAuctionSnapshotFail"
    type="alertmodal">
 There was a problem uploading the auction snapshot due to the following reason: [REASON]
+    <tag>fail</tag>
   </notification>
 
   <notification
@@ -227,6 +237,7 @@ There was a problem uploading the auction snapshot due to the following reason:
    type="alertmodal">
 Unable to view the contents of more than one item at a time.
 Please select only one object and try again.
+    <tag>fail</tag>
   </notification>
 
   <notification
@@ -234,7 +245,8 @@ Please select only one object and try again.
    name="SaveClothingBodyChanges"
    type="alertmodal">
 Save all changes to clothing/body parts?
-    <usetemplate
+<tag>confirm</tag>
+<usetemplate
      canceltext="Cancel"
      name="yesnocancelbuttons"
      notext="Don&apos;t Save"
@@ -267,6 +279,7 @@ Save all changes to clothing/body parts?
    type="alertmodal">
 Granting modify rights to another Resident allows them to change, delete or take ANY objects you may have in-world. Be VERY careful when handing out this permission.
 Do you want to grant modify rights for [NAME]?
+<tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="No"
@@ -279,6 +292,7 @@ Do you want to grant modify rights for [NAME]?
    type="alertmodal">
 Granting modify rights to another Resident allows them to change ANY objects you may have in-world. Be VERY careful when handing out this permission.
 Do you want to grant modify rights for the selected Residents?
+<tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="No"
@@ -290,6 +304,7 @@ Do you want to grant modify rights for the selected Residents?
    name="RevokeModifyRights"
    type="alertmodal">
 Do you want to revoke modify rights for [NAME]?
+<tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="No"
@@ -301,6 +316,7 @@ Do you want to revoke modify rights for [NAME]?
    name="RevokeModifyRightsMultiple"
    type="alertmodal">
 Do you want to revoke modify rights for the selected Residents?
+<tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="No"
@@ -313,7 +329,9 @@ Do you want to revoke modify rights for the selected Residents?
    type="alertmodal">
 Unable to create group.
 [MESSAGE]
-    <usetemplate
+    <tag>group</tag>
+    <tag>fail</tag>
+  <usetemplate
      name="okbutton"
      yestext="OK"/>
   </notification>
@@ -324,7 +342,9 @@ Unable to create group.
    type="alertmodal">
 [NEEDS_APPLY_MESSAGE]
 [WANT_APPLY_MESSAGE]
-    <usetemplate
+    <tag>confirm</tag>
+    <tag>group</tag>
+  <usetemplate
      canceltext="Cancel"
      name="yesnocancelbuttons"
      notext="Ignore Changes"
@@ -336,7 +356,9 @@ Unable to create group.
    name="MustSpecifyGroupNoticeSubject"
    type="alertmodal">
 You must specify a subject to send a group notice.
-    <usetemplate
+  <tag>group</tag>
+  <tag>fail</tag>
+  <usetemplate
      name="okbutton"
      yestext="OK"/>
   </notification>
@@ -349,6 +371,8 @@ You are about to add group members to the role of [ROLE_NAME].
 Members cannot be removed from that role.
 The members must resign from the role themselves.
 Are you sure you want to continue?
+    <tag>group</tag>
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Confirm before I add a new group Owner"
      name="okcancelignore"
@@ -394,6 +418,7 @@ Add this Ability to &apos;[ROLE_NAME]&apos;?
    type="alertmodal">
     You are about to drop your attachment.
     Are you sure you want to continue?
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Confirm before dropping attachments"
      name="okcancelignore"
@@ -406,6 +431,9 @@ Add this Ability to &apos;[ROLE_NAME]&apos;?
    type="alertmodal">
 Joining this group costs L$[COST].
 Do you wish to proceed?
+    <tag>confirm</tag>
+    <tag>funds</tag>
+    <tag>group</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -418,6 +446,8 @@ Do you wish to proceed?
    type="alertmodal">
 You are joining group [NAME].
 Do you wish to proceed?
+    <tag>group</tag>
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -431,6 +461,9 @@ Do you wish to proceed?
    type="alertmodal">
 Joining this group costs L$[COST].
 You do not have enough L$ to join this group.
+    <tag>group</tag>
+    <tag>fail</tag>
+    <tag>funds</tag>
   </notification>
 
   <notification
@@ -440,6 +473,8 @@ You do not have enough L$ to join this group.
 Creating this group will cost L$100.
 Groups need more than one member, or they are deleted forever.
 Please invite members within 48 hours.
+    <tag>group</tag>
+    <tag>funds</tag>
     <usetemplate
      canceltext="Cancel"
      name="okcancelbuttons"
@@ -453,6 +488,8 @@ Please invite members within 48 hours.
    type="alertmodal">
    <tag>fail</tag>
 For L$[COST] you can enter this land (&apos;[PARCEL_NAME]&apos;) for [TIME] hours.  Buy a pass?
+    <tag>funds</tag>
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -465,6 +502,7 @@ For L$[COST] you can enter this land (&apos;[PARCEL_NAME]&apos;) for [TIME] hour
    type="alertmodal">
 Sale price must be set to more than L$0 if selling to anyone.
 Please select an individual to sell to if selling for L$0.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -474,6 +512,7 @@ Please select an individual to sell to if selling for L$0.
    type="alertmodal">
 The selected [LAND_SIZE] m² land is being set for sale.
 Your selling price will be L$[SALE_PRICE] and will be authorized for sale to [NAME].
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -488,6 +527,7 @@ ATTENTION: Clicking &apos;sell to anyone&apos; makes your land available to the
 
 The selected [LAND_SIZE] m² land is being set for sale.
 Your selling price will be L$[SALE_PRICE] and will be authorized for sale to [NAME].
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -503,6 +543,8 @@ Are you sure you want to return all objects shared with the group &apos;[NAME]&a
 *WARNING* This will delete the non-transferable objects deeded to the group!
 
 Objects: [N]
+    <tag>confirm</tag>
+    <tag>group</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -516,6 +558,7 @@ Objects: [N]
 Are you sure you want to return all objects owned by the Resident &apos;[NAME]&apos; on this parcel of land back to their inventory?
 
 Objects: [N]
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -529,6 +572,7 @@ Objects: [N]
 Are you sure you want to return all objects owned by you on this parcel of land back to your inventory?
 
 Objects: [N]
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -545,6 +589,7 @@ Transferable objects deeded to a group will be returned to their previous owners
 *WARNING* This will delete the non-transferable objects deeded to the group!
 
 Objects: [N]
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -561,6 +606,7 @@ Transferable objects deeded to a group will be returned to their previous owners
 *WARNING* This will delete the non-transferable objects deeded to the group!
 
 Objects: [N]
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -572,6 +618,7 @@ Objects: [N]
    name="ReturnAllTopObjects"
    type="alertmodal">
 Are you sure you want to return all listed objects back to their owner&apos;s inventory?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -583,6 +630,7 @@ Are you sure you want to return all listed objects back to their owner&apos;s in
    name="DisableAllTopObjects"
    type="alertmodal">
 Are you sure you want to disable all objects in this region?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -596,6 +644,8 @@ Are you sure you want to disable all objects in this region?
 Return the objects on this parcel of land that are NOT shared with the group [NAME] back to their owners?
 
 Objects: [N]
+    <tag>confirm</tag>
+    <tag>group</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -609,6 +659,7 @@ Objects: [N]
 Can not disable scripts.
 This entire region is damage enabled.
 Scripts must be allowed to run for weapons to work.
+  <tag>fail</tag>
   </notification>
 
 <notification
@@ -618,6 +669,7 @@ Scripts must be allowed to run for weapons to work.
 Multiple faces are currently selected.
 If you continue this action, separate instances of media will be set on multiple faces of the object.
 To place the media on only one face, choose Select Face and click on the desired face of that object then click Add.
+    <tag>confirm</tag>
     <usetemplate
       ignoretext="Media will be set on multiple selected faces"
       name="okcancelignore"
@@ -630,6 +682,7 @@ To place the media on only one face, choose Select Face and click on the desired
    name="MustBeInParcel"
    type="alertmodal">
 You must be standing inside the land parcel to set its Landing Point.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -637,6 +690,7 @@ You must be standing inside the land parcel to set its Landing Point.
    name="PromptRecipientEmail"
    type="alertmodal">
 Please enter a valid email address for the recipient(s).
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -644,6 +698,7 @@ Please enter a valid email address for the recipient(s).
    name="PromptSelfEmail"
    type="alertmodal">
 Please enter your email address.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -651,6 +706,7 @@ Please enter your email address.
    name="PromptMissingSubjMsg"
    type="alertmodal">
 Email snapshot with the default subject or message?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -662,6 +718,7 @@ Email snapshot with the default subject or message?
    name="ErrorProcessingSnapshot"
    type="alertmodal">
 Error processing snapshot data
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -669,6 +726,7 @@ Error processing snapshot data
    name="ErrorEncodingSnapshot"
    type="alertmodal">
 Error encoding snapshot.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -676,6 +734,7 @@ Error encoding snapshot.
    name="ErrorUploadingPostcard"
    type="alertmodal">
 There was a problem sending a snapshot due to the following reason: [REASON]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -683,12 +742,14 @@ There was a problem sending a snapshot due to the following reason: [REASON]
    name="ErrorUploadingReportScreenshot"
    type="alertmodal">
 There was a problem uploading a report screenshot due to the following reason: [REASON]
+  <tag>fail</tag>
   </notification>
 
   <notification
    icon="alertmodal.tga"
    name="MustAgreeToLogIn"
    type="alertmodal">
+   <tag>fail</tag>
 You must agree to the Terms of Service to continue logging into [SECOND_LIFE].
   </notification>
 
@@ -698,6 +759,7 @@ You must agree to the Terms of Service to continue logging into [SECOND_LIFE].
    type="alertmodal">
 Could not put on outfit.
 The outfit folder contains no clothing, body parts, or attachments.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -705,6 +767,7 @@ The outfit folder contains no clothing, body parts, or attachments.
    name="CannotWearTrash"
    type="alertmodal">
 You can not wear clothes or body parts that are in the trash
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -713,6 +776,7 @@ You can not wear clothes or body parts that are in the trash
    type="alertmodal">
 Could not attach object.
 Exceeds the attachments limit of [MAX_ATTACHMENTS] objects. Please detach another object first.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -720,16 +784,19 @@ Exceeds the attachments limit of [MAX_ATTACHMENTS] objects. Please detach anothe
    name="CannotWearInfoNotComplete"
    type="alertmodal">
 You can not wear that item because it has not yet loaded. Please try again in a minute.
+  <tag>fail</tag>
   </notification>
 
   <notification
    icon="alertmodal.tga"
    name="MustHaveAccountToLogIn"
    type="alertmodal">
+   <tag>fail</tag>
 Oops! Something was left blank.
 You need to enter the Username name of your avatar.
 
 You need an account to enter [SECOND_LIFE]. Would you like to create one now?
+    <tag>confirm</tag>
     <url
 	option="0"
 	name="url"
@@ -747,31 +814,18 @@ You need an account to enter [SECOND_LIFE]. Would you like to create one now?
    icon="alertmodal.tga"
    name="InvalidCredentialFormat"
    type="alertmodal">
+   <tag>fail</tag>
 You need to enter either the Username or both the First and Last name of your avatar into the Username field, then login again.
   </notification>
   
 
-  <notification
-   icon="alertmodal.tga"
-   name="AddClassified"
-   type="alertmodal">
-Classified ads appear in the &apos;Classified&apos; section of the Search directory and on [http://secondlife.com/community/classifieds secondlife.com] for one week.
-Fill out your ad, then click &apos;Publish...&apos; to add it to the directory.
-You&apos;ll be asked for a price to pay when clicking Publish.
-Paying more makes your ad appear higher in the list, and also appear higher when people search for keywords.
-    <usetemplate
-     ignoretext="How to create a new Classified ad"
-     name="okcancelignore"
-     notext="Cancel"
-     yestext="OK"/>
-  </notification>
-
   <notification
    icon="alertmodal.tga"
    name="DeleteClassified"
    type="alertmodal">
 Delete classified &apos;[NAME]&apos;?
 There is no reimbursement for fees paid.
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -785,6 +839,7 @@ There is no reimbursement for fees paid.
    type="alertmodal">
 You have selected to delete the media associated with this face.
 Are you sure you want to continue?
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Confirm before I delete media from an object"
      name="okcancelignore"
@@ -797,6 +852,7 @@ Are you sure you want to continue?
    name="ClassifiedSave"
    type="alertmodal">
 Save changes to classified [NAME]?
+    <tag>confirm</tag>
     <usetemplate
      canceltext="Cancel"
      name="yesnocancelbuttons"
@@ -809,6 +865,7 @@ Save changes to classified [NAME]?
    name="ClassifiedInsufficientFunds"
    type="alertmodal">
 Insufficient funds to create classified.
+    <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -819,6 +876,7 @@ Insufficient funds to create classified.
    name="DeleteAvatarPick"
    type="alertmodal">
 Delete pick &lt;nolink&gt;[PICK]&lt;/nolink&gt;?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -830,6 +888,7 @@ Delete pick &lt;nolink&gt;[PICK]&lt;/nolink&gt;?
    name="DeleteOutfits"
    type="alertmodal">
     Delete the selected outfit?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -841,6 +900,7 @@ Delete pick &lt;nolink&gt;[PICK]&lt;/nolink&gt;?
    name="PromptGoToEventsPage"
    type="alertmodal">
 Go to the [SECOND_LIFE] events web page?
+    <tag>confirm</tag>
     <url option="0" name="url">
 
 			http://secondlife.com/events/
@@ -856,6 +916,7 @@ Go to the [SECOND_LIFE] events web page?
    name="SelectProposalToView"
    type="alertmodal">
 Please select a proposal to view.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -863,6 +924,7 @@ Please select a proposal to view.
    name="SelectHistoryItemToView"
    type="alertmodal">
 Please select a history item to view.
+  <tag>fail</tag>
   </notification>
 
 <!--
@@ -929,9 +991,9 @@ Changing language will take effect after you restart [APP_NAME].
    icon="alertmodal.tga"
    name="GoToAuctionPage"
    type="alertmodal">
-Go to the [SECOND_LIFE] web page to see auction details or make a bid?
+    Go to the [SECOND_LIFE] web page to see auction details or make a bid?
+    <tag>confirm</tag>
     <url option="0" name="url">
-
 			http://secondlife.com/auctions/auction-detail.php?id=[AUCTION_ID]
     </url>
     <usetemplate
@@ -945,6 +1007,7 @@ Go to the [SECOND_LIFE] web page to see auction details or make a bid?
    name="SaveChanges"
    type="alertmodal">
 Save Changes?
+    <tag>confirm</tag>
     <usetemplate
      canceltext="Cancel"
      name="yesnocancelbuttons"
@@ -959,6 +1022,7 @@ Save Changes?
 Gesture save failed.
 This gesture has too many steps.
 Try removing some steps, then save again.
+<tag>fail</tag>
   </notification>
 
   <notification
@@ -966,6 +1030,7 @@ Try removing some steps, then save again.
    name="GestureSaveFailedTryAgain"
    type="alertmodal">
 Gesture save failed.  Please try again in a minute.
+<tag>fail</tag>
   </notification>
 
   <notification
@@ -974,6 +1039,7 @@ Gesture save failed.  Please try again in a minute.
    type="alertmodal">
 Could not save gesture because the object or the associated object inventory could not be found.
 The object may be out of range or may have been deleted.
+<tag>fail</tag>
   </notification>
 
   <notification
@@ -981,6 +1047,7 @@ The object may be out of range or may have been deleted.
    name="GestureSaveFailedReason"
    type="alertmodal">
 There was a problem saving a gesture due to the following reason: [REASON].  Please try resaving the gesture later.
+<tag>fail</tag>
   </notification>
 
   <notification
@@ -989,6 +1056,7 @@ There was a problem saving a gesture due to the following reason: [REASON].  Ple
    type="alertmodal">
 Could not save notecard because the object or the associated object inventory could not be found.
 The object may be out of range or may have been deleted.
+<tag>fail</tag>
   </notification>
 
   <notification
@@ -996,6 +1064,7 @@ The object may be out of range or may have been deleted.
    name="SaveNotecardFailReason"
    type="alertmodal">
 There was a problem saving a notecard due to the following reason: [REASON].  Please try re-saving the notecard later.
+<tag>fail</tag>
   </notification>
 
   <notification
@@ -1005,6 +1074,7 @@ There was a problem saving a notecard due to the following reason: [REASON].  Pl
 Could not undo all changes in your version of the script.
 Would you like to load the server&apos;s last saved version?
 (**Warning** This operation cannot be undone.)
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -1016,6 +1086,7 @@ Would you like to load the server&apos;s last saved version?
    name="SaveScriptFailReason"
    type="alertmodal">
 There was a problem saving a script due to the following reason: [REASON].  Please try re-saving the script later.
+<tag>fail</tag>
   </notification>
 
   <notification
@@ -1024,6 +1095,7 @@ There was a problem saving a script due to the following reason: [REASON].  Plea
    type="alertmodal">
 Could not save the script because the object it is in could not be found.
 The object may be out of range or may have been deleted.
+<tag>fail</tag>
   </notification>
 
   <notification
@@ -1031,6 +1103,7 @@ The object may be out of range or may have been deleted.
    name="SaveBytecodeFailReason"
    type="alertmodal">
 There was a problem saving a compiled script due to the following reason: [REASON].  Please try re-saving the script later.
+<tag>fail</tag>
   </notification>
 
   <notification
@@ -1039,6 +1112,7 @@ There was a problem saving a compiled script due to the following reason: [REASO
    type="alertmodal">
 Oops, Your Start Region is not defined.
 Please type the Region name in Start Location box or choose My Last Location or My Home as your Start Location.
+<tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -1050,6 +1124,7 @@ Please type the Region name in Start Location box or choose My Last Location or
    type="alertmodal">
 Could not start or stop the script because the object it is on could not be found.
 The object may be out of range or may have been deleted.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1057,6 +1132,7 @@ The object may be out of range or may have been deleted.
    name="CannotDownloadFile"
    type="alertmodal">
 Unable to download file
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1064,6 +1140,7 @@ Unable to download file
    name="CannotWriteFile"
    type="alertmodal">
 Unable to write file [[FILE]]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1073,6 +1150,7 @@ Unable to write file [[FILE]]
 Just so you know, your computer does not meet [APP_NAME]&apos;s minimum system requirements. You may experience poor performance. Unfortunately, the [SUPPORT_SITE] can't provide technical support for unsupported system configurations.
 
 Visit [_URL] for more information?
+    <tag>confirm</tag>
     <url option="0" name="url">
 
 			http://www.secondlife.com/corporate/sysreqs.php
@@ -1082,6 +1160,7 @@ Visit [_URL] for more information?
      name="okcancelignore"
      notext="No"
      yestext="Yes"/>
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1095,6 +1174,7 @@ This is often the case with new hardware that hasn&apos;t been tested yet with [
       <ignore name="ignore"
        text="My graphics card could not be identified"/>
     </form>
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1105,6 +1185,7 @@ This is often the case with new hardware that hasn&apos;t been tested yet with [
 Graphics Quality will be set to Low to avoid some common driver errors. This will disable some graphics features.
 We recommend updating your graphics card drivers.
 Graphics Quality can be raised in Preferences &gt; Graphics.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1112,6 +1193,7 @@ Graphics Quality can be raised in Preferences &gt; Graphics.
    name="RegionNoTerraforming"
    type="alertmodal">
 The region [REGION] does not allow terraforming.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1121,10 +1203,12 @@ The region [REGION] does not allow terraforming.
 You do not have permission to copy the following items:
 [ITEMS]
 and will lose it from your inventory if you give it away. Do you really want to offer these items?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="No"
      yestext="Yes"/>
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1132,6 +1216,7 @@ and will lose it from your inventory if you give it away. Do you really want to
    name="CannotGiveItem"
    type="alertmodal">
 Unable to give inventory item.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1146,6 +1231,7 @@ Transaction cancelled.
    name="TooManyItems"
    type="alertmodal">
 Cannot give more than 42 items in a single inventory transfer.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1153,6 +1239,7 @@ Cannot give more than 42 items in a single inventory transfer.
    name="NoItems"
    type="alertmodal">
 You do not have permission to transfer the selected items.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1161,6 +1248,8 @@ You do not have permission to transfer the selected items.
    type="alertmodal">
 You do not have permission to copy [COUNT] of the selected items. You will lose these items from your inventory.
 Do you really want to give these items?
+    <tag>confirm</tag>
+  <tag>fail</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="No"
@@ -1172,6 +1261,7 @@ Do you really want to give these items?
    name="CannotGiveCategory"
    type="alertmodal">
 You do not have permission to transfer the selected folder.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1180,6 +1270,7 @@ You do not have permission to transfer the selected folder.
    type="alertmodal">
 Freeze this avatar?
 He or she will temporarily be unable to move, chat, or interact with the world.
+    <tag>confirm</tag>
     <usetemplate
      canceltext="Cancel"
      name="yesnocancelbuttons"
@@ -1193,6 +1284,7 @@ He or she will temporarily be unable to move, chat, or interact with the world.
    type="alertmodal">
 Freeze [AVATAR_NAME]?
 He or she will temporarily be unable to move, chat, or interact with the world.
+    <tag>confirm</tag>
     <usetemplate
      canceltext="Cancel"
      name="yesnocancelbuttons"
@@ -1205,6 +1297,7 @@ He or she will temporarily be unable to move, chat, or interact with the world.
    name="EjectAvatarFullname"
    type="alertmodal">
 Eject [AVATAR_NAME] from your land?
+    <tag>confirm</tag>
     <usetemplate
      canceltext="Cancel"
      name="yesnocancelbuttons"
@@ -1217,6 +1310,7 @@ Eject [AVATAR_NAME] from your land?
    name="EjectAvatarNoBan"
    type="alertmodal">
 Eject this avatar from your land?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -1228,6 +1322,7 @@ Eject this avatar from your land?
    name="EjectAvatarFullnameNoBan"
    type="alertmodal">
 Eject [AVATAR_NAME] from your land?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -1240,6 +1335,7 @@ Eject [AVATAR_NAME] from your land?
    persist="true"
    type="notify">
 You ejected [AVATAR_NAME] from group [GROUP_NAME]
+    <tag>group</tag>
   </notification>
 
   <notification
@@ -1247,6 +1343,7 @@ You ejected [AVATAR_NAME] from group [GROUP_NAME]
    name="AcquireErrorTooManyObjects"
    type="alertmodal">
 ACQUIRE ERROR: Too many objects selected.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1255,6 +1352,7 @@ ACQUIRE ERROR: Too many objects selected.
    type="alertmodal">
 ACQUIRE ERROR: Objects span more than one region.
 Please move all objects to be acquired onto the same region.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1264,6 +1362,7 @@ Please move all objects to be acquired onto the same region.
 [EXTRA]
 
 Go to [_URL] for information on purchasing L$?
+    <tag>confirm</tag>
     <url option="0" name="url">
 
 			http://secondlife.com/app/currency/
@@ -1280,6 +1379,7 @@ Go to [_URL] for information on purchasing L$?
    type="alertmodal">
 Unable to link these [COUNT] objects.
 You can link a maximum of [MAX] objects.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1287,6 +1387,7 @@ You can link a maximum of [MAX] objects.
    name="CannotLinkIncompleteSet"
    type="alertmodal">
 You can only link complete sets of objects, and must select more than one object.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1296,6 +1397,7 @@ You can only link complete sets of objects, and must select more than one object
 Unable to link because you don&apos;t have modify permission on all the objects.
 
 Please make sure none are locked, and that you own all of them.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1305,6 +1407,7 @@ Please make sure none are locked, and that you own all of them.
 Unable to link because not all of the objects have the same owner.
 
 Please make sure you own all of the selected objects.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1314,6 +1417,7 @@ Please make sure you own all of the selected objects.
 No file extension for the file: &apos;[FILE]&apos;
 
 Please make sure the file has a correct file extension.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1325,6 +1429,7 @@ Expected [VALIDS]
     <usetemplate
      name="okbutton"
      yestext="OK"/>
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1333,6 +1438,7 @@ Expected [VALIDS]
    type="alertmodal">
 Couldn&apos;t open uploaded sound file for reading:
 [FILE]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1341,6 +1447,7 @@ Couldn&apos;t open uploaded sound file for reading:
    type="alertmodal">
 File does not appear to be a RIFF WAVE file:
 [FILE]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1349,6 +1456,7 @@ File does not appear to be a RIFF WAVE file:
    type="alertmodal">
 File does not appear to be a PCM WAVE audio file:
 [FILE]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1357,6 +1465,7 @@ File does not appear to be a PCM WAVE audio file:
    type="alertmodal">
 File has invalid number of channels (must be mono or stereo):
 [FILE]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1365,6 +1474,7 @@ File has invalid number of channels (must be mono or stereo):
    type="alertmodal">
 File does not appear to be a supported sample rate (must be 44.1k):
 [FILE]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1373,6 +1483,7 @@ File does not appear to be a supported sample rate (must be 44.1k):
    type="alertmodal">
 File does not appear to be a supported word size (must be 8 or 16 bit):
 [FILE]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1381,6 +1492,7 @@ File does not appear to be a supported word size (must be 8 or 16 bit):
    type="alertmodal">
 Could not find &apos;data&apos; chunk in WAV header:
 [FILE]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1389,6 +1501,7 @@ Could not find &apos;data&apos; chunk in WAV header:
    type="alertmodal">
 Wrong chunk size in WAV file:
 [FILE]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1397,6 +1510,7 @@ Wrong chunk size in WAV file:
    type="alertmodal">
 Audio file is too long (10 second maximum):
 [FILE]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1406,6 +1520,7 @@ Audio file is too long (10 second maximum):
 Problem with file [FILE]:
 
 [ERROR]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1413,6 +1528,7 @@ Problem with file [FILE]:
    name="CannotOpenTemporarySoundFile"
    type="alertmodal">
 Couldn&apos;t open temporary compressed sound file for writing: [FILE]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1420,6 +1536,7 @@ Couldn&apos;t open temporary compressed sound file for writing: [FILE]
    name="UnknownVorbisEncodeFailure"
    type="alertmodal">
 Unknown Vorbis encode failure on: [FILE]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1427,6 +1544,7 @@ Unknown Vorbis encode failure on: [FILE]
    name="CannotEncodeFile"
    type="alertmodal">
 Unable to encode file: [FILE]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1435,6 +1553,7 @@ Unable to encode file: [FILE]
    type="alertmodal">
    We can't fill in your username and password.  This may happen when you change network setup
 
+  <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -1445,6 +1564,7 @@ Unable to encode file: [FILE]
    name="CorruptResourceFile"
    type="alertmodal">
 Corrupt resource file: [FILE]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1452,6 +1572,7 @@ Corrupt resource file: [FILE]
    name="UnknownResourceFileVersion"
    type="alertmodal">
 Unknown Linden resource file version in file: [FILE]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1459,6 +1580,7 @@ Unknown Linden resource file version in file: [FILE]
    name="UnableToCreateOutputFile"
    type="alertmodal">
 Unable to create output file: [FILE]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1466,6 +1588,7 @@ Unable to create output file: [FILE]
    name="DoNotSupportBulkAnimationUpload"
    type="alertmodal">
 [APP_NAME] does not currently support bulk upload of animation files.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1474,6 +1597,7 @@ Unable to create output file: [FILE]
    type="alertmodal">
 Unable to upload [FILE] due to the following reason: [REASON]
 Please try again later.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1491,6 +1615,7 @@ You already have a landmark for this location.
     <usetemplate
      name="okbutton"
      yestext="OK"/>
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1498,6 +1623,7 @@ You already have a landmark for this location.
    name="CannotCreateLandmarkNotOwner"
    type="alertmodal">
 You cannot create a landmark here because the owner of the land doesn&apos;t allow it.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1506,6 +1632,7 @@ You cannot create a landmark here because the owner of the land doesn&apos;t all
    type="alertmodal">
 Not able to perform &apos;recompilation&apos;.
 Select an object with a script.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1515,6 +1642,7 @@ Select an object with a script.
 Not able to perform &apos;recompilation&apos;.
 
 Select objects with scripts that you have permission to modify.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1524,6 +1652,7 @@ Select objects with scripts that you have permission to modify.
 Not able to perform &apos;reset&apos;.
 
 Select objects with scripts.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1533,6 +1662,7 @@ Select objects with scripts.
 Not able to perform &apos;reset&apos;.
 
 Select objects with scripts that you have permission to modify.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1540,6 +1670,7 @@ Select objects with scripts that you have permission to modify.
    name="CannotOpenScriptObjectNoMod"
    type="alertmodal">
     Unable to open script in object without modify permissions.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1549,6 +1680,7 @@ Select objects with scripts that you have permission to modify.
 Not able to set any scripts to &apos;running&apos;.
 
 Select objects with scripts.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1558,6 +1690,7 @@ Select objects with scripts.
 Unable to set any scripts to &apos;not running&apos;.
 
 Select objects with scripts.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1565,6 +1698,7 @@ Select objects with scripts.
    name="NoFrontmostFloater"
    type="alertmodal">
 No frontmost floater to save.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1581,6 +1715,7 @@ Searched for: [FINALQUERY]
    name="SeachFilteredOnShortWordsEmpty"
    type="alertmodal">
 Your search terms were too short so no search was performed.
+  <tag>fail</tag>
   </notification>
 
   <!-- Generic Teleport failure modes - strings will be inserted from
@@ -1591,6 +1726,7 @@ Your search terms were too short so no search was performed.
    type="alertmodal">
 Teleport failed.
 [REASON]
+  <tag>fail</tag>
   </notification>
 
   <!-- Teleport failure modes not delivered via the generic mechanism
@@ -1603,6 +1739,7 @@ Teleport failed.
    type="alertmodal">
 Problem encountered processing your teleport request. You may need to log back in before you can teleport.
 If you continue to get this message, please check the [SUPPORT_SITE].
+  <tag>fail</tag>
   </notification>
   <notification
    icon="alertmodal.tga"
@@ -1610,19 +1747,21 @@ If you continue to get this message, please check the [SUPPORT_SITE].
    type="alertmodal">
 Problem encountered processing your region crossing. You may need to log back in before you can cross regions.
 If you continue to get this message, please check the [SUPPORT_SITE].
+  <tag>fail</tag>
   </notification>
   <notification
    icon="alertmodal.tga"
    name="blocked_tport"
    type="alertmodal">
-   <tag>fail</tag>
 Sorry, teleport is currently blocked. Try again in a moment.  If you still cannot teleport, please log out and log back in to resolve the problem.
+  <tag>fail</tag>
   </notification>
   <notification
    icon="alertmodal.tga"
    name="nolandmark_tport"
    type="alertmodal">
 Sorry, but system was unable to locate landmark destination.
+  <tag>fail</tag>
   </notification>
   <notification
    icon="alertmodal.tga"
@@ -1678,6 +1817,7 @@ Unable to find teleport destination. The destination may be temporarily unavaila
    name="no_inventory_host"
    type="alertmodal">
 The inventory system is currently unavailable.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1686,6 +1826,7 @@ The inventory system is currently unavailable.
    type="alertmodal">
 Unable to set land owner:
 No parcel selected.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1693,6 +1834,7 @@ No parcel selected.
    name="CannotSetLandOwnerMultipleRegions"
    type="alertmodal">
 Unable to force land ownership because selection spans multiple regions. Please select a smaller area and try again.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1701,6 +1843,7 @@ Unable to force land ownership because selection spans multiple regions. Please
    type="alertmodal">
 This parcel is up for auction. Forcing ownership will cancel the auction and potentially make some Residents unhappy if bidding has begun.
 Force ownership?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -1713,6 +1856,7 @@ Force ownership?
    type="alertmodal">
 Unable to contentify:
 No parcel selected.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1721,6 +1865,7 @@ No parcel selected.
    type="alertmodal">
 Unable to contentify:
 No region selected.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1729,6 +1874,7 @@ No region selected.
    type="alertmodal">
 Unable to abandon land:
 No parcel selected.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1737,6 +1883,7 @@ No parcel selected.
    type="alertmodal">
 Unable to abandon land:
 Cannot find region.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1745,6 +1892,7 @@ Cannot find region.
    type="alertmodal">
 Unable to buy land:
 No parcel selected.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1753,6 +1901,7 @@ No parcel selected.
    type="alertmodal">
 Unable to buy land:
 Cannot find the region this land is in.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1760,6 +1909,7 @@ Cannot find the region this land is in.
    name="CannotCloseFloaterBuyLand"
    type="alertmodal">
 You cannot close the Buy Land window until [APP_NAME] estimates the price of this transaction.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1768,6 +1918,7 @@ You cannot close the Buy Land window until [APP_NAME] estimates the price of thi
    type="alertmodal">
 Unable to deed land:
 No parcel selected.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1776,6 +1927,8 @@ No parcel selected.
    type="alertmodal">
 Unable to deed land:
 No Group selected.
+    <tag>group</tag>
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1784,6 +1937,7 @@ No Group selected.
    type="alertmodal">
 Unable to deed land:
 Cannot find the region this land is in.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1794,6 +1948,7 @@ Unable to deed land:
 Multiple parcels selected.
 
 Try selecting a single parcel.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1804,6 +1959,7 @@ Unable to deed land:
 Waiting for server to report ownership.
 
 Please try again.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1812,6 +1968,7 @@ Please try again.
    type="alertmodal">
 Unable to deed land:
 The region [REGION] does not allow transfer of land.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1822,6 +1979,7 @@ Unable to abandon land:
 Waiting for server to update parcel information.
 
 Try again in a few seconds.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1832,6 +1990,7 @@ Unable to abandon land:
 You do not own all the parcels selected.
 
 Please select a single parcel.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1841,6 +2000,7 @@ Please select a single parcel.
 Unable to abandon land:
 You don&apos;t have permission to release this parcel.
 Parcels you own appear in green.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1849,6 +2009,7 @@ Parcels you own appear in green.
    type="alertmodal">
 Unable to abandon land:
 Cannot find the region this land is in.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1857,6 +2018,7 @@ Cannot find the region this land is in.
    type="alertmodal">
 Unable to abandon land:
 The region [REGION] does not allow transfer of land.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1867,6 +2029,7 @@ Unable to abandon land:
 You must select an entire parcel to release it.
 
 Select an entire parcel, or divide your parcel first.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1877,6 +2040,7 @@ You are about to release [AREA] m² of land.
 Releasing this parcel will remove it from your land holdings, but will not grant any L$.
 
 Release this land?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -1890,6 +2054,7 @@ Release this land?
 Unable to divide land:
 
 No parcels selected.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1900,6 +2065,7 @@ Unable to divide land:
 
 You have an entire parcel selected.
 Try selecting a part of the parcel.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1909,6 +2075,7 @@ Try selecting a part of the parcel.
 Dividing this land will split this parcel into two and each parcel can have its own settings. Some settings will be reset to defaults after the operation.
 
 Divide land?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -1921,6 +2088,7 @@ Divide land?
    type="alertmodal">
 Unable to divide land:
 Cannot find the region this land is in.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1929,6 +2097,7 @@ Cannot find the region this land is in.
    type="alertmodal">
 Unable to join land:
 Cannot find the region this land is in.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1937,6 +2106,7 @@ Cannot find the region this land is in.
    type="alertmodal">
 Unable to join land:
 No parcels selected.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1947,6 +2117,7 @@ Unable to join land:
 You only have one parcel selected.
 
 Select land across both parcels.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1957,6 +2128,7 @@ Unable to join land:
 You must select more than one parcel.
 
 Select land across both parcels.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -1967,6 +2139,7 @@ Joining this land will create one large parcel out of all parcels intersecting t
 You will need to reset the name and options of the new parcel.
 
 Join land?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -1978,6 +2151,7 @@ Join land?
    name="ConfirmNotecardSave"
    type="alertmodal">
 This notecard needs to be saved before the item can be copied or viewed. Save notecard?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -1989,6 +2163,7 @@ This notecard needs to be saved before the item can be copied or viewed. Save no
    name="ConfirmItemCopy"
    type="alertmodal">
 Copy this item to your inventory?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2000,6 +2175,7 @@ Copy this item to your inventory?
    name="ResolutionSwitchFail"
    type="alertmodal">
 Failed to switch resolution to [RESX] by [RESY]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -2007,6 +2183,7 @@ Failed to switch resolution to [RESX] by [RESY]
    name="ErrorUndefinedGrasses"
    type="alertmodal">
 Error: Undefined grasses: [SPECIES]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -2014,6 +2191,7 @@ Error: Undefined grasses: [SPECIES]
    name="ErrorUndefinedTrees"
    type="alertmodal">
 Error: Undefined trees: [SPECIES]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -2021,6 +2199,7 @@ Error: Undefined trees: [SPECIES]
    name="CannotSaveWearableOutOfSpace"
    type="alertmodal">
 Unable to save &apos;[NAME]&apos; to wearable file.  You will need to free up some space on your computer and save the wearable again.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -2029,6 +2208,7 @@ Unable to save &apos;[NAME]&apos; to wearable file.  You will need to free up so
    type="alertmodal">
 Unable to save [NAME] to central asset store.
 This is usually a temporary failure. Please customize and save the wearable again in a few minutes.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -2049,6 +2229,8 @@ Darn. You have been logged out of [SECOND_LIFE]
    type="alertmodal">
 Unable to buy land for the group:
 You do not have permission to buy land for your active group.
+    <tag>group</tag>
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -2056,9 +2238,11 @@ You do not have permission to buy land for your active group.
    label="Add Friend"
    name="AddFriendWithMessage"
    type="alertmodal">
+    <tag>friendship</tag>
 Friends can give permissions to track each other on the map and receive online status updates.
 
 Offer friendship to [NAME]?
+    <tag>confirm</tag>
     <form name="form">
       <input name="message" type="text">
 Would you be my friend?
@@ -2082,6 +2266,7 @@ Would you be my friend?
  type="alertmodal"
  unique="true">
     Save what I'm wearing as a new Outfit:
+    <tag>confirm</tag>
     <form name="form">
       <input name="message" type="text">
         [DESC] (new)
@@ -2104,6 +2289,7 @@ Would you be my friend?
  name="SaveWearableAs"
  type="alertmodal">
     Save item to my inventory as:
+    <tag>confirm</tag>
     <form name="form">
       <input name="message" type="text">
         [DESC] (new)
@@ -2127,6 +2313,7 @@ Would you be my friend?
    name="RenameOutfit"
    type="alertmodal">
     New outfit name:
+    <tag>confirm</tag>
     <form name="form">
       <input name="new_name" type="text" width="300">
         [NAME]
@@ -2147,7 +2334,9 @@ Would you be my friend?
    icon="alertmodal.tga"
    name="RemoveFromFriends"
    type="alertmodal">
+    <tag>friendship</tag>
 Do you want to remove [NAME] from your Friends List?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2158,7 +2347,9 @@ Do you want to remove [NAME] from your Friends List?
    icon="alertmodal.tga"
    name="RemoveMultipleFromFriends"
    type="alertmodal">
+    <tag>friendship</tag>
 Do you want to remove multiple friends from your Friends list?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2172,6 +2363,7 @@ Do you want to remove multiple friends from your Friends list?
 Are you sure you want to delete all scripted objects owned by
 ** [AVATAR_NAME] **
 on all others land in this sim?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2185,6 +2377,7 @@ on all others land in this sim?
 Are you sure you want to DELETE ALL scripted objects owned by
 ** [AVATAR_NAME] **
 on ALL LAND in this sim?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2198,6 +2391,7 @@ on ALL LAND in this sim?
 Are you sure you want to DELETE ALL objects (scripted or not) owned by
 ** [AVATAR_NAME] **
 on ALL LAND in this sim?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2209,6 +2403,7 @@ on ALL LAND in this sim?
    name="BlankClassifiedName"
    type="alertmodal">
 You must specify a name for your classified.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -2218,6 +2413,7 @@ You must specify a name for your classified.
 Price to pay for listing must be at least L$[MIN_PRICE].
 
 Please enter a higher price.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -2227,6 +2423,7 @@ Please enter a higher price.
 At least one of the items you has link items that point to it.  If you delete this item, its links will permanently stop working.  It is strongly advised to delete the links first.
 
 Are you sure you want to delete these items?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2240,6 +2437,7 @@ Are you sure you want to delete these items?
 At least one of the items you have selected is locked.
 
 Are you sure you want to delete these items?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2253,6 +2451,7 @@ Are you sure you want to delete these items?
 At least one of the items you have selected is not copyable.
 
 Are you sure you want to delete these items?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2266,6 +2465,7 @@ Are you sure you want to delete these items?
 You do not own least one of the items you have selected.
 
 Are you sure you want to delete these items?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2280,6 +2480,7 @@ At least one object is locked.
 At least one object is not copyable.
 
 Are you sure you want to delete these items?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2294,6 +2495,7 @@ At least one object is locked.
 You do not own least one object.
 
 Are you sure you want to delete these items?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2308,6 +2510,7 @@ At least one object is not copyable.
 You do not own least one object.
 
 Are you sure you want to delete these items?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2323,6 +2526,7 @@ At least one object is not copyable.
 You do not own least one object.
 
 Are you sure you want to delete these items?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="cancel"
@@ -2336,6 +2540,7 @@ Are you sure you want to delete these items?
 At least one object is locked.
 
 Are you sure you want to take these items?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2350,6 +2555,7 @@ You do not own all of the objects you are taking.
 If you continue, next owner permissions will be applied and possibly restrict your ability to modify or copy them.
 
 Are you sure you want to take these items?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2366,6 +2572,7 @@ If you continue, next owner permissions will be applied and possibly restrict yo
 However, you can take the current selection.
 
 Are you sure you want to take these items?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2379,6 +2586,7 @@ Are you sure you want to take these items?
 Unable to buy land because selection spans multiple regions.
 
 Please select a smaller area and try again.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -2389,6 +2597,8 @@ By deeding this parcel, the group will be required to have and maintain sufficie
 The purchase price of the land is not refunded to the owner. If a deeded parcel is sold, the sale price will be divided evenly among group members.
 
 Deed this [AREA] m² of land to the group &apos;[GROUP_NAME]&apos;?
+    <tag>group</tag>
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2404,6 +2614,8 @@ The deed will include a simultaneous land contribution to the group from &apos;[
 The purchase price of the land is not refunded to the owner. If a deeded parcel is sold, the sale price will be divided evenly among group members.
 
 Deed this [AREA] m² of land to the group &apos;[GROUP_NAME]&apos;?
+    <tag>group</tag>
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2429,6 +2641,7 @@ Display settings have been set to recommended levels based on your system config
    name="ErrorMessage"
    type="alertmodal">
 [ERROR_MESSAGE]
+  <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -2484,6 +2697,7 @@ You can use [SECOND_LIFE] normally and other people will see you correctly.
 
 If this is your first time using [SECOND_LIFE], you will need to create an account before you can log in.
 Return to [http://join.secondlife.com secondlife.com] to create a new account?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Continue"
@@ -2537,6 +2751,7 @@ Please choose the male or female avatar. You can change your mind later.
 		name="CantTeleportToGrid"
 		type="alertmodal">
 Could not teleport to [SLURL] as it's on a different grid ([GRID]) than the current grid ([CURRENT_GRID]).  Please close your viewer and try again.
+  <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -2557,6 +2772,7 @@ SHA1 Fingerprint: [MD5_DIGEST]
 Key Usage: [KEYUSAGE]
 Extended Key Usage: [EXTENDEDKEYUSAGE]
 Subject Key Identifier: [SUBJECTKEYIDENTIFIER]
+  <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -2579,6 +2795,7 @@ Extended Key Usage: [EXTENDEDKEYUSAGE]
 Subject Key Identifier: [SUBJECTKEYIDENTIFIER]
 
 Would you like to trust this authority?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2590,6 +2807,8 @@ Would you like to trust this authority?
    name="NotEnoughCurrency"
    type="alertmodal">
 [NAME] L$ [PRICE] You don&apos;t have enough L$ to do that.
+  <tag>fail</tag>
+  <tag>funds</tag>
   </notification>
 
   <notification
@@ -2626,6 +2845,7 @@ This is really only useful for debugging.
    name="BuyOneObjectOnly"
    type="alertmodal">
 Unable to buy more than one object at a time.  Please select only one object and try again.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -2634,6 +2854,7 @@ Unable to buy more than one object at a time.  Please select only one object and
    type="alertmodal">
 Unable to copy the contents of more than one item at a time.
 Please select only one object and try again.
+  <tag>fail</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2645,6 +2866,7 @@ Please select only one object and try again.
    name="KickUsersFromRegion"
    type="alertmodal">
 Teleport all Residents in this region home?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2656,6 +2878,7 @@ Teleport all Residents in this region home?
    name="EstateObjectReturn"
    type="alertmodal">
 Are you sure you want to return objects owned by [USER_NAME]?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2670,6 +2893,7 @@ Couldn&apos;t set region textures:
 Terrain texture [TEXTURE_NUM] has an invalid bit depth of [TEXTURE_BIT_DEPTH].
 
 Replace texture [TEXTURE_NUM] with a 24-bit 512x512 or smaller image then click &quot;Apply&quot; again.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -2694,6 +2918,7 @@ Upload started. It may take up to two minutes, depending on your connection spee
    name="ConfirmBakeTerrain"
    type="alertmodal">
 Do you really want to bake the current terrain, make it the center for terrain raise/lower limits and the default for the &apos;Revert&apos; tool?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2727,6 +2952,7 @@ Exceeds the [MAX_AGENTS] [LIST_TYPE] limit by [NUM_EXCESS].
    name="MaxAllowedGroupsOnRegion"
    type="alertmodal">
 You can only have [MAX_GROUPS] Allowed Groups.
+    <tag>group</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -2784,6 +3010,7 @@ Finished download of raw terrain file to:
 A new version of [APP_NAME] is available.
 [MESSAGE]
 You must download this update to use [APP_NAME].
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Quit"
@@ -2797,6 +3024,7 @@ You must download this update to use [APP_NAME].
 An updated version of [APP_NAME] is available.
 [MESSAGE]
 This update is not required, but we suggest you install it to improve performance and stability.
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Continue"
@@ -2810,6 +3038,7 @@ This update is not required, but we suggest you install it to improve performanc
 An updated version of [APP_NAME] is available.
 [MESSAGE]
 This update is not required, but we suggest you install it to improve performance and stability.
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Continue"
@@ -2823,6 +3052,7 @@ This update is not required, but we suggest you install it to improve performanc
 A new version of [APP_NAME] is available.
 [MESSAGE]
 You must download this update to use [APP_NAME].
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Quit"
@@ -2836,6 +3066,7 @@ You must download this update to use [APP_NAME].
 An updated version of [APP_NAME] is available.
 [MESSAGE]
 This update is not required, but we suggest you install it to improve performance and stability.
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Continue"
@@ -2849,6 +3080,7 @@ This update is not required, but we suggest you install it to improve performanc
 An updated version of [APP_NAME] is available.
 [MESSAGE]
 This update is not required, but we suggest you install it to improve performance and stability.
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Continue"
@@ -2864,6 +3096,7 @@ A new version of [APP_NAME] is available.
 You must download this update to use [APP_NAME].
 
 Download to your Applications folder?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Quit"
@@ -2879,6 +3112,7 @@ An updated version of [APP_NAME] is available.
 This update is not required, but we suggest you install it to improve performance and stability.
 
 Download to your Applications folder?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Continue"
@@ -2894,6 +3128,7 @@ An updated version of [APP_NAME] is available.
 This update is not required, but we suggest you install it to improve performance and stability.
 
 Download to your Applications folder?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Continue"
@@ -2921,6 +3156,7 @@ You will be unable to log in until [APP_NAME] has been updated.
 
 Please download and install the latest viewer from
 http://secondlife.com/download.
+  <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="Quit"/>
@@ -2934,6 +3170,7 @@ There is a required update for your Second Life Installation.
 
 You may download this update from http://www.secondlife.com/downloads
 or you can install it now.
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Quit Second Life"
@@ -2946,6 +3183,7 @@ or you can install it now.
    type="notify">
 We have downloaded an update to your [APP_NAME] installation.
 Version [VERSION] [[RELEASE_NOTES_FULL_URL] Information about this update]
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Later..."
@@ -2958,6 +3196,7 @@ Version [VERSION] [[RELEASE_NOTES_FULL_URL] Information about this update]
  type="alertmodal">
 We have downloaded an update to your [APP_NAME] installation.
 Version [VERSION] [[RELEASE_NOTES_FULL_URL] Information about this update]
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Later..."
@@ -2972,6 +3211,7 @@ We have downloaded a required software update.
 Version [VERSION]
 
 We must restart [APP_NAME] to install the update.
+    <tag>confirm</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -2982,6 +3222,7 @@ We must restart [APP_NAME] to install the update.
  name="RequiredUpdateDownloadedDialog"
  type="alertmodal">
 We must restart [APP_NAME] to install the update.
+    <tag>confirm</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -2993,6 +3234,8 @@ We must restart [APP_NAME] to install the update.
    type="alertmodal">
 Deeding this object will cause the group to:
 * Receive L$ paid into the object
+    <tag>group</tag>
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Confirm before I deed an object to a group"
      name="okcancelignore"
@@ -3005,6 +3248,7 @@ Deeding this object will cause the group to:
    name="WebLaunchExternalTarget"
    type="alertmodal">
 Do you want to open your Web browser to view this content?
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Launch my browser to view a web page"
      name="okcancelignore"
@@ -3017,6 +3261,7 @@ Do you want to open your Web browser to view this content?
    name="WebLaunchJoinNow"
    type="alertmodal">
 Go to your [http://secondlife.com/account/ Dashboard] to manage your account?
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Launch my browser to manage my account"
      name="okcancelignore"
@@ -3029,6 +3274,7 @@ Go to your [http://secondlife.com/account/ Dashboard] to manage your account?
    name="WebLaunchSecurityIssues"
    type="alertmodal">
 Visit the [SECOND_LIFE] Wiki for details of how to report a security issue.
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Launch my browser to learn how to report a Security Issue"
      name="okcancelignore"
@@ -3041,6 +3287,7 @@ Visit the [SECOND_LIFE] Wiki for details of how to report a security issue.
    name="WebLaunchQAWiki"
    type="alertmodal">
 Visit the [SECOND_LIFE] QA Wiki.
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Launch my browser to view the QA Wiki"
      name="okcancelignore"
@@ -3053,6 +3300,7 @@ Visit the [SECOND_LIFE] QA Wiki.
    name="WebLaunchPublicIssue"
    type="alertmodal">
 Visit the [SECOND_LIFE] Public Issue Tracker, where you can report bugs and other issues.
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Launch my browser to use the Public Issue Tracker"
      name="okcancelignore"
@@ -3065,6 +3313,7 @@ Visit the [SECOND_LIFE] Public Issue Tracker, where you can report bugs and othe
    name="WebLaunchSupportWiki"
    type="alertmodal">
 Go to the Official Linden Blog, for the latest news and information.
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Launch my browser to view the blog"
      name="okcancelignore"
@@ -3077,6 +3326,7 @@ Go to the Official Linden Blog, for the latest news and information.
    name="WebLaunchLSLGuide"
    type="alertmodal">
 Do you want to open the Scripting Guide for help with scripting?
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Launch my browser to view the Scripting Guide"
      name="okcancelignore"
@@ -3089,6 +3339,7 @@ Do you want to open the Scripting Guide for help with scripting?
    name="WebLaunchLSLWiki"
    type="alertmodal">
 Do you want to visit the LSL Portal for help with scripting?
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Launch my browser to view the LSL Portal"
      name="okcancelignore"
@@ -3103,6 +3354,7 @@ Do you want to visit the LSL Portal for help with scripting?
 Are you sure you want to return the selected objects to their owners? Transferable deeded objects will be returned to their previous owners.
 
 *WARNING* No-transfer deeded objects will be deleted!
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Confirm before I return objects to their owners"
      name="okcancelignore"
@@ -3116,6 +3368,8 @@ Are you sure you want to return the selected objects to their owners? Transferab
    type="alert">
 You are currently a member of the group [GROUP].
 Leave Group?
+    <tag>group</tag>
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -3127,6 +3381,7 @@ Leave Group?
    name="ConfirmKick"
    type="alert">
 Do you REALLY want to kick all Residents off the grid?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -3138,6 +3393,7 @@ Do you REALLY want to kick all Residents off the grid?
    name="MuteLinden"
    type="alertmodal">
 Sorry, you cannot block a Linden.
+  <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -3147,7 +3403,8 @@ Sorry, you cannot block a Linden.
    icon="alertmodal.tga"
    name="CannotStartAuctionAlreadyForSale"
    type="alertmodal">
-You cannot start an auction on a parcel which is already set for sale.  Disable the land sale if you are sure you want to start an auction.
+    You cannot start an auction on a parcel which is already set for sale.  Disable the land sale if you are sure you want to start an auction.
+    <tag>fail</tag>
   </notification>
 
   <notification
@@ -3156,6 +3413,7 @@ You cannot start an auction on a parcel which is already set for sale.  Disable
    name="MuteByNameFailed"
    type="alertmodal">
 You already have blocked this name.
+  <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -3166,6 +3424,7 @@ You already have blocked this name.
    name="RemoveItemWarn"
    type="alert">
 Though permitted, deleting contents may damage the object. Do you want to delete that item?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -3177,6 +3436,7 @@ Though permitted, deleting contents may damage the object. Do you want to delete
    name="CantOfferCallingCard"
    type="alert">
 Cannot offer a calling card at this time. Please try again in a moment.
+    <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -3186,6 +3446,8 @@ Cannot offer a calling card at this time. Please try again in a moment.
    icon="alert.tga"
    name="CantOfferFriendship"
    type="alert">
+    <tag>friendship</tag>
+    <tag>fail</tag>
 Cannot offer friendship at this time. Please try again in a moment.
     <usetemplate
      name="okbutton"
@@ -3210,6 +3472,8 @@ Chat and instant messages will be hidden. Instant messages will get your Busy mo
    type="alert">
 You have reached your maximum number of groups. Please leave another group before joining this one, or decline the offer.
 [NAME] has invited you to join a group as a member.
+    <tag>group</tag>
+    <tag>fail</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Decline"
@@ -3221,6 +3485,8 @@ You have reached your maximum number of groups. Please leave another group befor
    name="JoinedTooManyGroups"
    type="alert">
 You have reached your maximum number of groups. Please leave some group before joining or creating a new one.
+    <tag>group</tag>
+    <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -3232,6 +3498,7 @@ You have reached your maximum number of groups. Please leave some group before j
    type="alert">
    <tag>win</tag>
 Kick this Resident with what message?
+    <tag>confirm</tag>
     <form name="form">
       <input name="message" type="text">
 An administrator has logged you off.
@@ -3254,6 +3521,7 @@ An administrator has logged you off.
    type="alert">
    <tag>win</tag>
 Kick everyone currently on the grid with what message?
+    <tag>confirm</tag>
     <form name="form">
       <input name="message" type="text">
 An administrator has logged you off.
@@ -3274,7 +3542,8 @@ An administrator has logged you off.
    icon="alert.tga"
    name="FreezeUser"
    type="alert">
-   <tag>win</tag>
+    <tag>win</tag>
+    <tag>confirm</tag>
 Freeze this Resident with what message?
     <form name="form">
       <input name="message" type="text">
@@ -3297,6 +3566,7 @@ You have been frozen. You cannot move or chat. An administrator will contact you
    name="UnFreezeUser"
    type="alert">
    <tag>win</tag>
+    <tag>confirm</tag>
 Unfreeze this Resident with what message?
     <form name="form">
       <input name="message" type="text">
@@ -3328,6 +3598,7 @@ Just like in real life, it takes a while for everyone to learn about a new name.
  name="SetDisplayNameBlocked"
  type="alert">
 Sorry, you cannot change your display name. If you feel this is in error, please contact support.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -3337,6 +3608,7 @@ Sorry, you cannot change your display name. If you feel this is in error, please
 Sorry, that name is too long.  Display names can have a maximum of [LENGTH] characters.
 
 Please try a shorter name.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -3344,6 +3616,7 @@ Please try a shorter name.
    name="SetDisplayNameFailedGeneric"
    type="alertmodal">
     Sorry, we could not set your display name.  Please try again later.
+    <tag>fail</tag>
   </notification>
 
   <notification
@@ -3351,6 +3624,7 @@ Please try a shorter name.
    name="SetDisplayNameMismatch"
    type="alertmodal">
     The display names you entered do not match. Please re-enter.
+    <tag>fail</tag>
   </notification>
 
   <!-- *NOTE: This should never happen -->
@@ -3363,6 +3637,7 @@ Sorry, you have to wait longer before you can change your display name.
 See http://wiki.secondlife.com/wiki/Setting_your_display_name
 
 Please try again later.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -3372,6 +3647,7 @@ Please try again later.
  Sorry, we could not set your requested name because it contains a banned word.
  
  Please try a different name.
+ <tag>fail</tag>
   </notification>
 
   <notification
@@ -3379,6 +3655,7 @@ Please try again later.
  name="AgentDisplayNameSetInvalidUnicode"
  type="alertmodal">
     The display name you wish to set contains invalid characters.
+    <tag>fail</tag>
   </notification>
 
   <notification
@@ -3386,6 +3663,7 @@ Please try again later.
  name="AgentDisplayNameSetOnlyPunctuation"
  type="alertmodal">
     Your display name must contain letters other than punctuation.
+    <tag>fail</tag>
   </notification>
 
 
@@ -3401,6 +3679,7 @@ Please try again later.
    name="OfferTeleport"
    type="alertmodal">
 Offer a teleport to your location with the following message?
+    <tag>confirm</tag>
     <form name="form">
       <input name="message" type="text">
 Join me in [REGION]
@@ -3422,6 +3701,7 @@ Join me in [REGION]
    name="OfferTeleportFromGod"
    type="alertmodal">
 God summon Resident to your location?
+    <tag>confirm</tag>
     <form name="form">
       <input name="message" type="text">
 Join me in [REGION]
@@ -3443,6 +3723,7 @@ Join me in [REGION]
    name="TeleportFromLandmark"
    type="alertmodal">
 Are you sure you want to teleport to &lt;nolink&gt;[LOCATION]&lt;/nolink&gt;?
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Confirm that I want to teleport to a landmark"
      name="okcancelignore"
@@ -3454,7 +3735,8 @@ Are you sure you want to teleport to &lt;nolink&gt;[LOCATION]&lt;/nolink&gt;?
    icon="alertmodal.tga"
    name="TeleportToPick"
    type="alertmodal">
-Teleport to [PICK]?
+    Teleport to [PICK]?
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Confirm that I want to teleport to a location in Picks"
      name="okcancelignore"
@@ -3467,6 +3749,7 @@ Teleport to [PICK]?
    name="TeleportToClassified"
    type="alertmodal">
     Teleport to [CLASSIFIED]?
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Confirm that I want to teleport to a location in Classifieds"
      name="okcancelignore"
@@ -3479,6 +3762,7 @@ Teleport to [PICK]?
    name="TeleportToHistoryEntry"
    type="alertmodal">
 Teleport to [HISTORY_ENTRY]?
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Confirm that I want to teleport to a history location"
      name="okcancelignore"
@@ -3492,6 +3776,7 @@ Teleport to [HISTORY_ENTRY]?
    name="MessageEstate"
    type="alert">
 Type a short announcement which will be sent to everyone currently in your estate.
+    <tag>confirm</tag>
     <form name="form">
       <input name="message" type="text"/>
       <button
@@ -3516,6 +3801,7 @@ You are about to change a Linden owned estate (mainland, teen grid, orientation,
 This is EXTREMELY DANGEROUS because it can fundamentally affect the Resident experience.  On the mainland, it will change thousands of regions and make the spaceserver hiccup.
 
 Proceed?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -3531,6 +3817,7 @@ You are about to change the access list for a Linden owned estate (mainland, tee
 
 This is DANGEROUS and should only be done to invoke the hack allowing objects/L$ to be transfered in/out of a grid.
 It will change thousands of regions and make the spaceserver hiccup.
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -3543,6 +3830,7 @@ It will change thousands of regions and make the spaceserver hiccup.
    name="EstateAllowedAgentAdd"
    type="alert">
 Add to allowed list for this estate only or for [ALL_ESTATES]?
+    <tag>confirm</tag>
     <usetemplate
      canceltext="Cancel"
      name="yesnocancelbuttons"
@@ -3556,6 +3844,7 @@ Add to allowed list for this estate only or for [ALL_ESTATES]?
    name="EstateAllowedAgentRemove"
    type="alert">
 Remove from allowed list for this estate only or for [ALL_ESTATES]?
+    <tag>confirm</tag>
     <usetemplate
      canceltext="Cancel"
      name="yesnocancelbuttons"
@@ -3569,6 +3858,8 @@ Remove from allowed list for this estate only or for [ALL_ESTATES]?
    name="EstateAllowedGroupAdd"
    type="alert">
 Add to group allowed list for this estate only or for [ALL_ESTATES]?
+    <tag>group</tag>
+    <tag>confirm</tag>
     <usetemplate
      canceltext="Cancel"
      name="yesnocancelbuttons"
@@ -3582,6 +3873,8 @@ Add to group allowed list for this estate only or for [ALL_ESTATES]?
    name="EstateAllowedGroupRemove"
    type="alert">
 Remove from group allowed list for this estate only or [ALL_ESTATES]?
+    <tag>group</tag>
+    <tag>confirm</tag>
     <usetemplate
      canceltext="Cancel"
      name="yesnocancelbuttons"
@@ -3595,6 +3888,7 @@ Remove from group allowed list for this estate only or [ALL_ESTATES]?
    name="EstateBannedAgentAdd"
    type="alert">
 Deny access for this estate only or for [ALL_ESTATES]?
+    <tag>confirm</tag>
     <usetemplate
      canceltext="Cancel"
      name="yesnocancelbuttons"
@@ -3608,6 +3902,7 @@ Deny access for this estate only or for [ALL_ESTATES]?
    name="EstateBannedAgentRemove"
    type="alert">
 Remove this Resident from the ban list for  access for this estate only or for [ALL_ESTATES]?
+    <tag>confirm</tag>
     <usetemplate
      canceltext="Cancel"
      name="yesnocancelbuttons"
@@ -3621,6 +3916,7 @@ Remove this Resident from the ban list for  access for this estate only or for [
    name="EstateManagerAdd"
    type="alert">
 Add estate manager for this estate only or for [ALL_ESTATES]?
+    <tag>confirm</tag>
     <usetemplate
      canceltext="Cancel"
      name="yesnocancelbuttons"
@@ -3634,6 +3930,7 @@ Add estate manager for this estate only or for [ALL_ESTATES]?
    name="EstateManagerRemove"
    type="alert">
 Remove estate manager for this estate only or for [ALL_ESTATES]?
+    <tag>confirm</tag>
     <usetemplate
      canceltext="Cancel"
      name="yesnocancelbuttons"
@@ -3647,6 +3944,7 @@ Remove estate manager for this estate only or for [ALL_ESTATES]?
    name="EstateKickUser"
    type="alert">
 Kick [EVIL_USER] from this estate?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -3658,6 +3956,7 @@ Kick [EVIL_USER] from this estate?
    name="EstateChangeCovenant"
    type="alertmodal">
 Are you sure you want to change the Estate Covenant?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -3682,6 +3981,7 @@ Please verify you have the latest Viewer installed, and go to the Knowledge Base
    name="RegionEntryAccessBlocked_KB"
    type="alertmodal">
    <tag>fail</tag>
+    <tag>confirm</tag>
 You are not allowed in that region due to your maturity Rating.
 
 Go to the Knowledge Base for more information about maturity Ratings?
@@ -3708,6 +4008,7 @@ You are not allowed in that region due to your maturity Rating.
    name="RegionEntryAccessBlocked_Change"
    type="alertmodal">
    <tag>fail</tag>
+    <tag>confirm</tag>
 You are not allowed in that Region due to your maturity Rating preference.
 
 To enter the desired region, please change your maturity Rating preference. This will allow you to search for and access [REGIONMATURITY] content. To undo any changes, go to Me &gt; Preferences &gt; General.
@@ -3739,6 +4040,7 @@ Your maturity Rating preference is now [RATING].
 You cannot claim this land due to your maturity Rating. This may be a result of a lack of information validating your age.
 
 Please verify you have the latest Viewer installed, and go to the Knowledge Base for details on accessing areas with this maturity rating.
+  <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -3751,6 +4053,8 @@ Please verify you have the latest Viewer installed, and go to the Knowledge Base
 You cannot claim this land due to your maturity Rating.
 
 Go to the Knowledge Base for more information about maturity Ratings?
+  <tag>fail</tag>
+    <tag>confirm</tag>
     <url option="0" name="url">
 		http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview
     </url>
@@ -3766,6 +4070,7 @@ Go to the Knowledge Base for more information about maturity Ratings?
    name="LandClaimAccessBlocked_Notify"
    type="notifytip">
 You cannot claim this land due to your maturity Rating.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -3775,6 +4080,8 @@ You cannot claim this land due to your maturity Rating.
 You cannot claim this land due to your maturity Rating preference.
 
 You can click &apos;Change Preference&apos; to raise your maturity Rating preference now and allow you to enter. You will be able to search and access [REGIONMATURITY] content from now on. If you later want to change this setting back, go to Me &gt; Preferences &gt; General.
+    <tag>fail</tag>
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelignore"
      yestext="Change Preference"
@@ -3789,6 +4096,7 @@ You can click &apos;Change Preference&apos; to raise your maturity Rating prefer
 You cannot buy this land due to your maturity Rating. This may be a result of a lack of information validating your age.
 
 Please verify you have the latest Viewer installed, and go to the Knowledge Base for details on accessing areas with this maturity rating.
+  <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -3801,6 +4109,8 @@ Please verify you have the latest Viewer installed, and go to the Knowledge Base
 You cannot buy this land due to your maturity Rating.
 
 Go to the Knowledge Base for more information about maturity Ratings?
+    <tag>confirm</tag>
+  <tag>fail</tag>
     <url option="0" name="url">
 		http://wiki.secondlife.com/wiki/Linden_Lab_Official:Maturity_ratings:_an_overview
     </url>
@@ -3816,6 +4126,7 @@ Go to the Knowledge Base for more information about maturity Ratings?
    name="LandBuyAccessBlocked_Notify"
    type="notifytip">
 You cannot buy this land due to your maturity Rating.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -3825,6 +4136,8 @@ You cannot buy this land due to your maturity Rating.
 You cannot buy this land due to your maturity Rating preference.
 
 You can click &apos;Change Preference&apos; to raise your maturity Rating preference now and allow you to enter. You will be able to search and access [REGIONMATURITY] content from now on. If you later want to change this setting back, go to Me &gt; Preferences &gt; General.
+    <tag>confirm</tag>
+    <tag>fail</tag>
     <usetemplate
      name="okcancelignore"
      yestext="Change Preference"
@@ -3837,6 +4150,7 @@ You can click &apos;Change Preference&apos; to raise your maturity Rating prefer
 	  name="TooManyPrimsSelected"
 	  type="alertmodal">
 There are too many prims selected.  Please select [MAX_PRIM_COUNT] or fewer prims and try again
+  <tag>fail</tag>
 		<usetemplate
 		 name="okbutton"
 		 yestext="OK"/>
@@ -3847,6 +4161,7 @@ There are too many prims selected.  Please select [MAX_PRIM_COUNT] or fewer prim
    name="ProblemImportingEstateCovenant"
    type="alertmodal">
 Problem importing estate covenant.
+  <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -3857,6 +4172,7 @@ Problem importing estate covenant.
    name="ProblemAddingEstateManager"
    type="alertmodal">
 Problems adding a new estate manager.  One or more estates may have a full manager list.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -3864,6 +4180,7 @@ Problems adding a new estate manager.  One or more estates may have a full manag
    name="ProblemAddingEstateGeneric"
    type="alertmodal">
 Problems adding to this estate list.  One or more estates may have a full list.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -3874,6 +4191,7 @@ Unable to load notecard&apos;s asset at this time.
     <usetemplate
      name="okbutton"
      yestext="OK"/>
+    <tag>fail</tag>
   </notification>
 
   <notification
@@ -3884,6 +4202,7 @@ Insufficient permissions to view notecard associated with asset ID requested.
     <usetemplate
      name="okbutton"
      yestext="OK"/>
+    <tag>fail</tag>
   </notification>
 
   <notification
@@ -3891,6 +4210,7 @@ Insufficient permissions to view notecard associated with asset ID requested.
    name="MissingNotecardAssetID"
    type="alertmodal">
 Asset ID for notecard is missing from database.
+  <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -3903,6 +4223,8 @@ Asset ID for notecard is missing from database.
 Remember: Classified ad fees are non-refundable.
 
 Publish this classified now for L$[AMOUNT]?
+    <tag>confirm</tag>
+  <tag>funds</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -3914,6 +4236,7 @@ Publish this classified now for L$[AMOUNT]?
    name="SetClassifiedMature"
    type="alertmodal">
 Does this classified contain Moderate content?
+    <tag>confirm</tag>
     <usetemplate
      canceltext="Cancel"
      name="yesnocancelbuttons"
@@ -3926,6 +4249,8 @@ Does this classified contain Moderate content?
    name="SetGroupMature"
    type="alertmodal">
 Does this group contain Moderate content?
+    <tag>group</tag>
+    <tag>confirm</tag>
     <usetemplate
      canceltext="Cancel"
      name="yesnocancelbuttons"
@@ -3939,6 +4264,7 @@ Does this group contain Moderate content?
    name="ConfirmRestart"
    type="alert">
 Do you really want to restart this region in 2 minutes?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -3951,6 +4277,7 @@ Do you really want to restart this region in 2 minutes?
    name="MessageRegion"
    type="alert">
 Type a short announcement which will be sent to everyone in this region.
+    <tag>confirm</tag>
     <form name="form">
       <input name="message" type="text"/>
       <button
@@ -3982,6 +4309,8 @@ To enter Adult regions, Residents must be Account Verified, either by age-verifi
    name="VoiceVersionMismatch"
    type="alertmodal">
 This version of [APP_NAME] is not compatible with the Voice Chat feature in this region. In order for Voice Chat to function correctly you will need to update [APP_NAME].
+  <tag>fail</tag>
+  <tag>voice</tag>
   </notification>
 
   <notification
@@ -3991,6 +4320,7 @@ This version of [APP_NAME] is not compatible with the Voice Chat feature in this
    type="alertmodal">
 Cannot buy objects from different owners at the same time.
 Please select only one object and try again.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4000,6 +4330,7 @@ Please select only one object and try again.
    type="alertmodal">
 Unable to buy the contents of more than one object at a time.
 Please select only one object and try again.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4009,6 +4340,7 @@ Please select only one object and try again.
    type="alertmodal">
 Cannot buy objects from different owners at the same time.
 Please select only one object and try again.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4021,6 +4353,8 @@ You will be able to:
  Modify: [MODIFYPERM]
  Copy: [COPYPERM]
  Resell or Give Away: [RESELLPERM]
+  <tag>confirm</tag>
+  <tag>funds</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -4037,6 +4371,8 @@ You will be able to:
  Modify: [MODIFYPERM]
  Copy: [COPYPERM]
  Resell or Give Away: [RESELLPERM]
+  <tag>confirm</tag>
+  <tag>funds</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -4053,6 +4389,8 @@ You will be able to:
  Modify: [MODIFYPERM]
  Copy: [COPYPERM]
  Resell or Give Away: [RESELLPERM]
+  <tag>confirm</tag>
+  <tag>funds</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -4069,6 +4407,8 @@ You will be able to:
  Modify: [MODIFYPERM]
  Copy: [COPYPERM]
  Resell or Give Away: [RESELLPERM]
+  <tag>confirm</tag>
+  <tag>funds</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -4081,6 +4421,8 @@ You will be able to:
    type="alertmodal">
 Buy contents from [OWNER] for L$[PRICE]?
 They will be copied to your inventory.
+  <tag>confirm</tag>
+  <tag>funds</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -4093,6 +4435,8 @@ They will be copied to your inventory.
    type="alertmodal">
 Buy contents for L$[PRICE]?
 They will be copied to your inventory.
+  <tag>confirm</tag>
+  <tag>funds</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -4107,6 +4451,8 @@ This transaction will:
 [ACTION]
 
 Are you sure you want to proceed with this purchase?
+    <tag>confirm</tag>
+    <tag>funds</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -4122,6 +4468,8 @@ This transaction will:
 
 Are you sure you want to proceed with this purchase?
 Please re-enter your password and click OK.
+    <tag>funds</tag>
+    <tag>confirm</tag>
     <form name="form">
       <input
        name="message"
@@ -4157,6 +4505,7 @@ You have selected &apos;no copy&apos; inventory items.
 These items will be moved to your inventory, not copied.
 
 Move the inventory item(s)?
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Warn me before I move &apos;no-copy&apos; items from an object"
      name="okcancelignore"
@@ -4171,7 +4520,8 @@ Move the inventory item(s)?
 You have selected &apos;no copy&apos; inventory items.  These items will be moved to your inventory, not copied.
 Because this object is scripted, moving these items to your inventory may cause the script to malfunction.
 
-Move the inventory item(s)?
+Move the inventory item(s)?    
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Warn me before I move &apos;no-copy&apos; items which might break a scripted object"
      name="okcancelignore"
@@ -4195,6 +4545,7 @@ Warning: The &apos;Pay object&apos; click action has been set, but it will only
    name="OpenObjectCannotCopy"
    type="alertmodal">
 There are no items in this object that you are allowed to copy.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4202,6 +4553,7 @@ There are no items in this object that you are allowed to copy.
    name="WebLaunchAccountHistory"
    type="alertmodal">
 Go to your [http://secondlife.com/account/ Dashboard] to see your account history?
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Launch my browser to see my account history"
      name="okcancelignore"
@@ -4215,6 +4567,7 @@ Go to your [http://secondlife.com/account/ Dashboard] to see your account histor
    type="alertmodal"
    unique="true">
 Are you sure you want to quit?
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Confirm before I quit"
      name="okcancelignore"
@@ -4228,6 +4581,7 @@ Are you sure you want to quit?
    type="alertmodal"
    unique="true">
     [QUESTION]
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Confirm before deleting items"
      name="okcancelignore"
@@ -4251,6 +4605,7 @@ All reported abuses are investigated and resolved.
    type="alertmodal">
 Please select a category for this abuse report.
 Selecting a category helps us file and process abuse reports.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4259,6 +4614,7 @@ Selecting a category helps us file and process abuse reports.
    type="alertmodal">
 Please enter the name of the abuser.
 Entering an accurate value helps us file and process abuse reports.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4267,6 +4623,7 @@ Entering an accurate value helps us file and process abuse reports.
    type="alertmodal">
 Please enter the location where the abuse took place.
 Entering an accurate value helps us file and process abuse reports.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4275,6 +4632,7 @@ Entering an accurate value helps us file and process abuse reports.
    type="alertmodal">
 Please enter a summary of the abuse that took place.
 Entering an accurate summary helps us file and process abuse reports.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4284,6 +4642,7 @@ Entering an accurate summary helps us file and process abuse reports.
 Please enter a detailed description of the abuse that took place.
 Be as specific as you can, including names and the details of the incident you are reporting.
 Entering an accurate description helps us file and process abuse reports.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4311,6 +4670,7 @@ Linden Lab
    type="alertmodal">
 The following required components are missing from [FLOATER]:
 [COMPONENTS]
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4320,6 +4680,7 @@ The following required components are missing from [FLOATER]:
    type="alert">
 There is already an object attached to this point on your body.
 Do you want to replace it with the selected object?
+    <tag>confirm</tag>
     <form name="form">
       <ignore name="ignore"
        save_option="true"
@@ -4346,6 +4707,7 @@ Do you want to replace it with the selected object?
 You are in Busy Mode, which means you will not receive any items offered in exchange for this payment.
 
 Would you like to leave Busy Mode before completing this transaction?
+    <tag>confirm</tag>
     <form name="form">
       <ignore name="ignore"
        save_option="true"
@@ -4369,6 +4731,7 @@ Would you like to leave Busy Mode before completing this transaction?
    name="ConfirmDeleteProtectedCategory"
    type="alertmodal">
 The folder &apos;[FOLDERNAME]&apos; is a system folder. Deleting system folders can cause instability.  Are you sure you want to delete it?
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Confirm before I delete a system folder"
      name="okcancelignore"
@@ -4381,6 +4744,7 @@ The folder &apos;[FOLDERNAME]&apos; is a system folder. Deleting system folders
    name="ConfirmEmptyTrash"
    type="alertmodal">
 Are you sure you want to permanently delete the contents of your Trash?
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Confirm before I empty the inventory Trash folder"
      name="okcancelignore"
@@ -4393,6 +4757,7 @@ Are you sure you want to permanently delete the contents of your Trash?
    name="ConfirmClearBrowserCache"
    type="alertmodal">
 Are you sure you want to delete your travel, web, and search history?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -4404,6 +4769,7 @@ Are you sure you want to delete your travel, web, and search history?
    name="ConfirmClearCookies"
    type="alertmodal">
 Are you sure you want to clear your cookies?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -4415,6 +4781,7 @@ Are you sure you want to clear your cookies?
    name="ConfirmClearMediaUrlList"
    type="alertmodal">
 Are you sure you want to clear your list of saved URLs?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -4426,6 +4793,7 @@ Are you sure you want to clear your list of saved URLs?
    name="ConfirmEmptyLostAndFound"
    type="alertmodal">
 Are you sure you want to permanently delete the contents of your Lost And Found?
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Confirm before I empty the inventory Lost And Found folder"
      name="okcancelignore"
@@ -4452,6 +4820,7 @@ Link to this from a web page to give others easy access to this location, or try
    name="WLSavePresetAlert"
    type="alertmodal">
 Do you wish to overwrite the saved preset?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="No"
@@ -4463,6 +4832,7 @@ Do you wish to overwrite the saved preset?
    name="WLDeletePresetAlert"
    type="alertmodal">
 Do you wish to delete [SKY]?
+    <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="No"
@@ -4474,6 +4844,7 @@ Do you wish to delete [SKY]?
    name="WLNoEditDefault"
    type="alertmodal">
 You cannot edit or delete a default preset.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4481,6 +4852,7 @@ You cannot edit or delete a default preset.
    name="WLMissingSky"
    type="alertmodal">
 This day cycle file references a missing sky file: [SKY].
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4499,6 +4871,7 @@ PostProcess Effect exists. Do you still wish overwrite it?
    name="NewSkyPreset"
    type="alert">
 Give me a name for the new sky.
+    <tag>confirm</tag>
     <form name="form">
       <input name="message" type="text">
 New Preset
@@ -4520,6 +4893,7 @@ New Preset
    name="ExistsSkyPresetAlert"
    type="alertmodal">
 Preset already exists!
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4527,6 +4901,7 @@ Preset already exists!
    name="NewWaterPreset"
    type="alert">
 Give me a name for the new water preset.
+    <tag>confirm</tag>
     <form name="form">
       <input name="message" type="text">
 New Preset
@@ -4548,6 +4923,7 @@ New Preset
    name="ExistsWaterPresetAlert"
    type="alertmodal">
 Preset already exists!
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4555,6 +4931,7 @@ Preset already exists!
    name="WaterNoEditDefault"
    type="alertmodal">
 You cannot edit or delete a default preset.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4563,6 +4940,7 @@ You cannot edit or delete a default preset.
    type="alertmodal">
 Unable to start a new chat session with [RECIPIENT].
 [REASON]
+  <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -4574,6 +4952,7 @@ Unable to start a new chat session with [RECIPIENT].
    type="alertmodal">
 [EVENT]
 [REASON]
+  <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -4595,6 +4974,7 @@ Your chat session with [NAME] must close.
    name="Cannot_Purchase_an_Attachment"
    type="alertmodal">
 You can&apos;t buy an object while it is attached.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4613,6 +4993,7 @@ Granting this request gives a script ongoing permission to take Linden dollars (
    name="AutoWearNewClothing"
    type="alertmodal">
 Would you like to automatically wear the clothing you are about to create?
+    <tag>confirm</tag>
     <usetemplate
      ignoretext="Wear the clothing I create while editing My Appearance"
      name="okcancelignore"
@@ -4628,6 +5009,7 @@ Would you like to automatically wear the clothing you are about to create?
 You must be age-verified to visit this area.  Do you want to go to the [SECOND_LIFE] website and verify your age?
 
 [_URL]
+    <tag>confirm</tag>
     <url option="0" name="url">
 
 	    https://secondlife.com/account/verification.php
@@ -4646,6 +5028,7 @@ You must be age-verified to visit this area.  Do you want to go to the [SECOND_L
 You must have payment information on file to visit this area.  Do you want to go to the [SECOND_LIFE] website and set this up?
 
 [_URL]
+    <tag>confirm</tag>
     <url option="0" name="url">
 
 			https://secondlife.com/account/
@@ -4662,6 +5045,7 @@ You must have payment information on file to visit this area.  Do you want to go
    name="MissingString"
    type="alertmodal">
 The string [STRING_NAME] is missing from strings.xml
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4712,12 +5096,14 @@ Replaced missing clothing/body part with default.
    persist="true"
    type="groupnotify">
 Topic: [SUBJECT], Message: [MESSAGE]
+    <tag>group</tag>
   </notification>
 
   <notification
    icon="notifytip.tga"
    name="FriendOnline"
    type="notifytip">
+    <tag>friendship</tag>
 [NAME] is Online
   </notification>
 
@@ -4725,6 +5111,7 @@ Topic: [SUBJECT], Message: [MESSAGE]
    icon="notifytip.tga"
    name="FriendOffline"
    type="notifytip">
+    <tag>friendship</tag>
 [NAME] is Offline
   </notification>
 
@@ -4732,6 +5119,7 @@ Topic: [SUBJECT], Message: [MESSAGE]
    icon="notifytip.tga"
    name="AddSelfFriend"
    type="notifytip">
+    <tag>friendship</tag>
 Although you&apos;re very nice, you can&apos;t add yourself as a friend.
   </notification>
 
@@ -4749,6 +5137,7 @@ Uploading in-world and web site snapshots...
    persist="true"
    type="notify">
 You paid L$[AMOUNT] to upload.
+<tag>funds</tag>
   </notification>
 
   <notification
@@ -4777,6 +5166,7 @@ Terrain.raw downloaded
    name="GestureMissing"
    type="notifytip">
 Hmm. Gesture [NAME] is missing from the database.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4784,6 +5174,7 @@ Hmm. Gesture [NAME] is missing from the database.
    name="UnableToLoadGesture"
    type="notifytip">
 Unable to load gesture [NAME].
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4791,6 +5182,7 @@ Unable to load gesture [NAME].
    name="LandmarkMissing"
    type="notifytip">
 Landmark is missing from database.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4798,6 +5190,7 @@ Landmark is missing from database.
    name="UnableToLoadLandmark"
    type="notifytip">
 Unable to load landmark.  Please try again.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4813,6 +5206,7 @@ This might affect your password.
    name="NotecardMissing"
    type="notifytip">
 Notecard is missing from database.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4820,6 +5214,7 @@ Notecard is missing from database.
    name="NotecardNoPermissions"
    type="notifytip">
 You don&apos;t have permission to view this notecard.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4827,6 +5222,7 @@ You don&apos;t have permission to view this notecard.
    name="RezItemNoPermissions"
    type="notifytip">
 Insufficient permissions to rez object.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4835,6 +5231,7 @@ Insufficient permissions to rez object.
    type="notifytip">
 Unable to load notecard.
 Please try again.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4842,6 +5239,7 @@ Please try again.
    name="ScriptMissing"
    type="notifytip">
 Script is missing from database.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4849,6 +5247,7 @@ Script is missing from database.
    name="ScriptNoPermissions"
    type="notifytip">
 Insufficient permissions to view script.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4856,6 +5255,7 @@ Insufficient permissions to view script.
    name="UnableToLoadScript"
    type="notifytip">
 Unable to load script.  Please try again.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4863,6 +5263,7 @@ Unable to load script.  Please try again.
    name="IncompleteInventory"
    type="notifytip">
 The complete contents you are offering are not yet locally available. Please try offering those items again in a minute.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4870,6 +5271,7 @@ The complete contents you are offering are not yet locally available. Please try
    name="CannotModifyProtectedCategories"
    type="notifytip">
 You cannot modify protected categories.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4877,6 +5279,7 @@ You cannot modify protected categories.
    name="CannotRemoveProtectedCategories"
    type="notifytip">
 You cannot remove protected categories.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4885,6 +5288,7 @@ You cannot remove protected categories.
    type="notifytip">
 Unable to buy while downloading object data.
 Please try again.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4893,6 +5297,7 @@ Please try again.
    type="notifytip">
 Unable to link while downloading object data.
 Please try again.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4901,6 +5306,7 @@ Please try again.
    type="notifytip">
 You can only buy objects from one owner at a time.
 Please select a single object.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4908,6 +5314,7 @@ Please select a single object.
    name="ObjectNotForSale"
    type="notifytip">
 This object is not for sale.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4929,6 +5336,7 @@ Now leaving god mode, level [LEVEL]
    name="CopyFailed"
    type="notifytip">
 You don&apos;t have permission to copy this.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4990,6 +5398,7 @@ Select the Resident from the list, then click &apos;IM&apos; at the bottom of th
    type="notifytip">
 Can&apos;t select land across server boundaries.
 Try selecting a smaller piece of land.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -4997,6 +5406,7 @@ Try selecting a smaller piece of land.
    name="SearchWordBanned"
    type="notifytip">
 Some terms in your search query were excluded due to content restrictions as clarified in the Community Standards.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -5004,6 +5414,7 @@ Some terms in your search query were excluded due to content restrictions as cla
    name="NoContentToSearch"
    type="notifytip">
 Please select at least one type of content to search (General, Moderate, or Adult).
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -5019,6 +5430,7 @@ Please select at least one type of content to search (General, Moderate, or Adul
    name="PaymentReceived"
    persist="true"
    type="notify">
+    <tag>funds</tag>
 [MESSAGE]
   </notification>
 
@@ -5027,6 +5439,7 @@ Please select at least one type of content to search (General, Moderate, or Adul
    name="PaymentSent"
    persist="true"
    type="notify">
+    <tag>funds</tag>
 [MESSAGE]
   </notification>
 
@@ -5084,13 +5497,16 @@ Deactivated gestures with same trigger:
    type="notify">
 Apple&apos;s QuickTime software does not appear to be installed on your system.
 If you want to view streaming media on parcels that support it you should go to the [http://www.apple.com/quicktime QuickTime site] and install the QuickTime Player.
+  <tag>fail</tag>
   </notification>
+
   <notification
    icon="notify.tga"
    name="NoPlugin"
    persist="true"
    type="notify">
 No Media Plugin was found to handle the "[MIME_TYPE]" mime type.  Media of this type will be unavailable.
+  <tag>fail</tag>
     <unique>
       <context>MIME_TYPE</context>
     </unique>
@@ -5104,6 +5520,7 @@ The following Media Plugin has failed:
     [PLUGIN]
 
 Please re-install the plugin or contact the vendor if you continue to experience problems.
+  <tag>fail</tag>
     <form name="form">
       <ignore name="ignore"
        text="A Media Plugin fails to run"/>
@@ -5141,6 +5558,7 @@ The objects on the selected parcel of land owned by the Resident &apos;[NAME]&ap
 The objects on the selected parcel of land shared with the group [GROUPNAME] have been returned back to their owner&apos;s inventory.
 Transferable deeded objects have been returned to their previous owners.
 Non-transferable objects that are deeded to the group have been deleted.
+    <tag>group</tag>
   </notification>
 
   <notification
@@ -5197,6 +5615,7 @@ This area does not allow pushing. You can&apos;t push others here unless you own
    type="notify"
    unique="true">
 This area has voice chat disabled. You won&apos;t be able to hear anyone talking.
+    <tag>voice</tag>
   </notification>
 
   <notification
@@ -5241,6 +5660,7 @@ No scripts will work here except those belonging to the land owner.
    persist="true"
    type="notify">
 You can only claim public land in the Region you&apos;re in.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -5529,6 +5949,7 @@ An object named &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; owned by [NAME_SLU
    name="JoinGroup"
    persist="true"
    type="notify">
+    <tag>group</tag>
 [MESSAGE]
     <form name="form">
       <button
@@ -5553,6 +5974,7 @@ An object named &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; owned by [NAME_SLU
 [NAME_SLURL] has offered to teleport you to their location:
 
 [MESSAGE] - [MATURITY_STR] &lt;icon&gt;[MATURITY_ICON]&lt;/icon&gt;
+    <tag>confirm</tag>
     <form name="form">
       <button
        index="0"
@@ -5596,6 +6018,8 @@ An object named &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; owned by [NAME_SLU
    icon="notify.tga"
    name="OfferFriendship"
    type="offer">
+    <tag>friendship</tag>
+    <tag>confirm</tag>
 [NAME_SLURL] is offering friendship.
 
 [MESSAGE]
@@ -5617,6 +6041,7 @@ An object named &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; owned by [NAME_SLU
    icon="notify.tga"
    name="FriendshipOffered"
    type="offer">
+    <tag>friendship</tag>
 	You have offered friendship to [TO_NAME]
   </notification>
 
@@ -5625,6 +6050,7 @@ An object named &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; owned by [NAME_SLU
    name="OfferFriendshipNoMessage"
    persist="true"
    type="notify">
+    <tag>friendship</tag>
 [NAME_SLURL] is offering friendship.
 
 (By default, you will be able to see each other&apos;s online status.)
@@ -5644,6 +6070,7 @@ An object named &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; owned by [NAME_SLU
    icon="notify.tga"
    name="FriendshipAccepted"
    type="offer">
+    <tag>friendship</tag>
 [NAME] accepted your friendship offer.
   </notification>
 
@@ -5652,6 +6079,7 @@ An object named &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; owned by [NAME_SLU
    name="FriendshipDeclined"
    persist="true"
    type="notify">
+    <tag>friendship</tag>
 [NAME] declined your friendship offer.
   </notification>
   
@@ -5659,6 +6087,7 @@ An object named &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; owned by [NAME_SLU
    icon="notify.tga"
    name="FriendshipAcceptedByMe"
    type="offer">
+    <tag>friendship</tag>
 Friendship offer accepted.
   </notification>
 
@@ -5666,6 +6095,7 @@ Friendship offer accepted.
    icon="notify.tga"
    name="FriendshipDeclinedByMe"
    type="offer">
+    <tag>friendship</tag>
 Friendship offer declined.
   </notification>
   
@@ -5719,6 +6149,7 @@ Load web page [URL]?
 [MESSAGE]
 
 From object: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, owner: [NAME]?
+    <tag>confirm</tag>
     <form name="form">
       <button
        index="0"
@@ -5737,6 +6168,7 @@ From object: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, owner: [NAME]?
    persist="true"
    type="notify">
 Failed to find [TYPE] in database.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -5745,6 +6177,7 @@ Failed to find [TYPE] in database.
    persist="true"
    type="notify">
 Failed to find [TYPE] named [DESC] in database.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -5753,6 +6186,7 @@ Failed to find [TYPE] named [DESC] in database.
    persist="true"
    type="notify">
 The item you are trying to wear uses a feature that your Viewer can&apos;t read. Please upgrade your version of [APP_NAME] to wear this item.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -5764,6 +6198,7 @@ The item you are trying to wear uses a feature that your Viewer can&apos;t read.
 
 [QUESTIONS]
 Is this OK?
+  <tag>confirm</tag>
     <form name="form">
       <button
        index="0"
@@ -5792,6 +6227,7 @@ An object named &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos;, owned by
 If you do not trust this object and its creator, you should deny the request.
 
 Grant this request?
+  <tag>confirm</tag>
     <form name="form">
       <button
        index="0"
@@ -5827,6 +6263,7 @@ Grant this request?
    icon="notify.tga"
    name="ScriptDialogGroup"
    type="notify">
+    <tag>group</tag>
 [GROUPNAME]&apos;s &apos;&lt;nolink&gt;[TITLE]&lt;/nolink&gt;&apos;
 [MESSAGE]
     <form name="form">
@@ -5863,6 +6300,7 @@ Your L$ balance is shown in the upper-right.
    name="BuyLindenDollarSuccess"
    persist="true"
    type="notify">
+    <tag>funds</tag>
 Thank you for your payment!
 
 Your L$ balance will be updated when processing completes. If processing takes more than 20 mins, your transaction may be cancelled. In that case, the purchase amount will be credited to your US$ balance.
@@ -5870,57 +6308,6 @@ Your L$ balance will be updated when processing completes. If processing takes m
 The status of your payment can be checked on your Transaction History page on your [http://secondlife.com/account/ Dashboard]
   </notification>
 
-<!--
-  <notification
-   icon="notify.tga"
-   name="FirstSit"
-   persist="true"
-   type="notify">
-You are sitting.
-Use your arrow keys (or AWSD) to look around.
-Click the &apos;Stand Up&apos; button to stand.
-  </notification>
-
-  <notification
-   icon="notify.tga"
-   name="FirstMap"
-   persist="true"
-   type="notify">
-Click and drag the map to look around.
-Double-click to teleport.
-Use the controls on the right to find things and display different backgrounds.
-  </notification>
-
-  <notification
-   icon="notify.tga"
-   name="FirstBuild"
-   persist="true"
-   type="notify">
-You have opened the Build Tools. Every object you see around you was created using these tools.
-  </notification>
--->
-
-<!--
-  <notification
-   icon="notify.tga"
-   name="FirstLeftClickNoHit"
-   persist="true"
-   type="notify">
-    Left-clicking interacts with special objects.
-    If the mouse pointer changes to a hand, you can interact with the object.
-    Right-click always shows a menu of things you can do.
-  </notification>
-
-  <notification
-   icon="notify.tga"
-   name="FirstTeleport"
-   persist="true"
-   type="notify">
-You can only teleport to certain areas in this region. The arrow points to your specific destination. Click the arrow to dismiss it.
-  </notification>
-
--->
-
   <notification
    icon="notify.tga"
    name="FirstOverrideKeys"
@@ -5932,30 +6319,6 @@ Some objects (like guns) require you to go into mouselook  to use them.
 Press &apos;M&apos; to do this.
   </notification>
 
-<!--
-  <notification
-   icon="notify.tga"
-   name="FirstAppearance"
-   persist="true"
-   type="notify">
-You are editing your Appearance.
-Use the arrow keys to look around.
-When you are done, press &apos;Save All&apos;.
-  </notification>
-
-  <notification
-   icon="notify.tga"
-   name="FirstInventory"
-   persist="true"
-   type="notify">
-This is your Inventory, which contains items you own.
-
-* To wear something, drag it onto yourself.
-* To rez something inworld, drag it onto the ground.
-* To read a notecard, double-click it.
-  </notification>
--->
-
   <notification
    icon="notify.tga"
    name="FirstSandbox"
@@ -5966,47 +6329,6 @@ This is a sandbox area, and is meant to help Residents learn how to build.
 Things you build here will be deleted after you leave, so don&apos;t forget to right-click and choose &apos;Take&apos; to move your creation to your Inventory.
   </notification>
 
-<!--
-  <notification
-   icon="notify.tga"
-   name="FirstFlexible"
-   persist="true"
-   type="notify">
-This object is flexible. Flexis must be phantom and not physical.
-  </notification>
-
-  <notification
-   icon="notify.tga"
-   name="FirstDebugMenus"
-   persist="true"
-   type="notify">
-You opened the Advanced menu.
-
-To toggle this menu,
-  Windows: Ctrl+Alt+D
-  Mac: &#8997;&#8984;D
-
-  </notification>
-
-  <notification
-   icon="notify.tga"
-   name="FirstSculptedPrim"
-   persist="true"
-   type="notify">
-You are editing a Sculpted prim. Sculpties require a special texture to define their shape.
-  </notification>
--->
-
-  <!--
-  <notification
-   icon="notify.tga"
-   name="FirstMedia"
-   persist="true"
-   type="notify">
-    You have begun playing media.  Media can set to play automatically in the preferences window under Audio / Video. Note that this can be a security risk for media sites you do not trust.
-  </notification>
-  -->
-
   <notification
    icon="notifytip.tga"
    name="MaxListSelectMessage"
@@ -6020,6 +6342,8 @@ You may only select up to [MAX_SELECT] items from this list.
    type="notify">
 [NAME] is inviting you to a Voice Chat call.
 Click Accept to join the call or Decline to decline the invitation. Click Block to block this caller.
+    <tag>confirm</tag>
+    <tag>voice</tag>
     <unique>
       <context>NAME</context>
     </unique>
@@ -6069,6 +6393,9 @@ Click Accept to join the call or Decline to decline the invitation. Click Block
    type="notify">
 [NAME] has joined a Voice Chat call with the group [GROUP].
 Click Accept to join the call or Decline to decline the invitation. Click Block to block this caller.
+    <tag>group</tag>
+    <tag>confirm</tag>
+    <tag>voice</tag>
     <unique>
       <context>NAME</context>
       <context>GROUP</context>
@@ -6095,6 +6422,8 @@ Click Accept to join the call or Decline to decline the invitation. Click Block
    type="notify">
 [NAME] has joined a voice chat call with a conference chat.
 Click Accept to join the call or Decline to decline the invitation. Click Block to block this caller.
+  <tag>confirm</tag>
+    <tag>voice</tag>
     <unique>
       <context>NAME</context>
     </unique>
@@ -6120,6 +6449,8 @@ Click Accept to join the call or Decline to decline the invitation. Click Block
    type="notify">
 [NAME] is inviting you to a conference chat.
 Click Accept to join the chat or Decline to decline the invitation. Click Block to block this caller.
+  <tag>confirm</tag>
+    <tag>voice</tag>
     <unique>
       <context>NAME</context>
     </unique>
@@ -6144,6 +6475,8 @@ Click Accept to join the chat or Decline to decline the invitation. Click Block
    name="VoiceChannelFull"
    type="notifytip">
 The voice call you are trying to join, [VOICE_CHANNEL_NAME], has reached maximum capacity. Please try again later.
+  <tag>fail</tag>
+    <tag>voice</tag>
     <unique>
       <context>VOICE_CHANNEL_NAME</context>
     </unique>
@@ -6154,7 +6487,9 @@ The voice call you are trying to join, [VOICE_CHANNEL_NAME], has reached maximum
    name="ProximalVoiceChannelFull"
    type="notifytip"
    unique="true">
-We&apos;re sorry.  This area has reached maximum capacity for voice conversations.  Please try to use voice in another area.
+    We&apos;re sorry.  This area has reached maximum capacity for voice conversations.  Please try to use voice in another area.
+    <tag>fail</tag>
+    <tag>voice</tag>
   </notification>
 
   <notification
@@ -6162,6 +6497,7 @@ We&apos;re sorry.  This area has reached maximum capacity for voice conversation
    name="VoiceChannelDisconnected"
    type="notifytip">
 You have been disconnected from [VOICE_CHANNEL_NAME].  You will now be reconnected to Nearby Voice Chat.
+    <tag>voice</tag>
     <unique>
       <context>VOICE_CHANNEL_NAME</context>
     </unique>
@@ -6172,6 +6508,7 @@ You have been disconnected from [VOICE_CHANNEL_NAME].  You will now be reconnect
    name="VoiceChannelDisconnectedP2P"
    type="notifytip">
 [VOICE_CHANNEL_NAME] has ended the call.  You will now be reconnected to Nearby Voice Chat.
+    <tag>voice</tag>
     <unique>
       <context>VOICE_CHANNEL_NAME</context>
     </unique>
@@ -6182,6 +6519,8 @@ You have been disconnected from [VOICE_CHANNEL_NAME].  You will now be reconnect
    name="P2PCallDeclined"
    type="notifytip">
 [VOICE_CHANNEL_NAME] has declined your call.  You will now be reconnected to Nearby Voice Chat.
+    <tag>voice</tag>
+    <tag>fail</tag>
     <unique>
       <context>VOICE_CHANNEL_NAME</context>
     </unique>
@@ -6192,6 +6531,8 @@ You have been disconnected from [VOICE_CHANNEL_NAME].  You will now be reconnect
    name="P2PCallNoAnswer"
    type="notifytip">
 [VOICE_CHANNEL_NAME] is not available to take your call.  You will now be reconnected to Nearby Voice Chat.
+    <tag>fail</tag>
+    <tag>voice</tag>
     <unique>
       <context>VOICE_CHANNEL_NAME</context>
     </unique>
@@ -6202,6 +6543,8 @@ You have been disconnected from [VOICE_CHANNEL_NAME].  You will now be reconnect
    name="VoiceChannelJoinFailed"
    type="notifytip">
 Failed to connect to [VOICE_CHANNEL_NAME], please try again later.  You will now be reconnected to Nearby Voice Chat.
+    <tag>fail</tag>
+    <tag>voice</tag>
     <unique>
       <context>VOICE_CHANNEL_NAME</context>
     </unique>
@@ -6214,6 +6557,8 @@ Failed to connect to [VOICE_CHANNEL_NAME], please try again later.  You will now
    type="notifytip"
    unique="true">
 We are creating a voice channel for you. This may take up to one minute.
+  <tag>status</tag>
+  <tag>voice</tag>
   </notification>
 
   <notification
@@ -6225,6 +6570,8 @@ We are creating a voice channel for you. This may take up to one minute.
    unique="true">
 One or more of your subscribed Voice Morphs has expired.
 [[URL] Click here] to renew your subscription.
+  <tag>fail</tag>
+  <tag>voice</tag>
   </notification>
 
   <notification
@@ -6236,6 +6583,8 @@ One or more of your subscribed Voice Morphs has expired.
    unique="true">
 The active Voice Morph has expired, your normal voice settings have been applied.
 [[URL] Click here] to renew your subscription.
+    <tag>fail</tag>
+    <tag>voice</tag>
   </notification>
 
   <notification
@@ -6247,6 +6596,8 @@ The active Voice Morph has expired, your normal voice settings have been applied
    unique="true">
 One or more of your Voice Morphs will expire in less than [INTERVAL] days.
 [[URL] Click here] to renew your subscription.
+  <tag>fail</tag>
+    <tag>voice</tag>
   </notification>
 
   <notification
@@ -6257,6 +6608,7 @@ One or more of your Voice Morphs will expire in less than [INTERVAL] days.
    type="notify"
    unique="true">
 New Voice Morphs are available!
+   <tag>voice</tag>
   </notification>
 
   <notification
@@ -6264,6 +6616,7 @@ New Voice Morphs are available!
    name="Cannot enter parcel: not a group member"
    type="notifytip">
    <tag>fail</tag>
+    <tag>group</tag>
 Only members of a certain group can visit this area.
   </notification>
 
@@ -6288,6 +6641,8 @@ Cannot enter parcel, you are not on the access list.
    name="VoiceNotAllowed"
    type="notifytip">
 You do not have permission to connect to voice chat for [VOICE_CHANNEL_NAME].
+  <tag>fail</tag>
+    <tag>voice</tag>
     <unique>
       <context>VOICE_CHANNEL_NAME</context>
     </unique>
@@ -6298,6 +6653,8 @@ You do not have permission to connect to voice chat for [VOICE_CHANNEL_NAME].
    name="VoiceCallGenericError"
    type="notifytip">
 An error has occurred while trying to connect to voice chat for [VOICE_CHANNEL_NAME].  Please try again later.
+  <tag>fail</tag>
+    <tag>voice</tag>
     <unique>
       <context>VOICE_CHANNEL_NAME</context>
     </unique>
@@ -6309,6 +6666,7 @@ An error has occurred while trying to connect to voice chat for [VOICE_CHANNEL_N
    priority="high"
    type="notifytip">
 The SLurl you clicked on is not supported.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -6316,7 +6674,7 @@ The SLurl you clicked on is not supported.
    name="BlockedSLURL"
    priority="high"
    type="notifytip">
-   <tag>win</tag>
+   <tag>security</tag>
 A SLurl was received from an untrusted browser and has been blocked for your security.
   </notification>
 
@@ -6325,6 +6683,7 @@ A SLurl was received from an untrusted browser and has been blocked for your sec
    name="ThrottledSLURL"
    priority="high"
    type="notifytip">
+   <tag>security</tag>
 Multiple SLurls were received from an untrusted browser within a short period.
 They will be blocked for a few seconds for your security.
   </notification>
@@ -6341,6 +6700,7 @@ They will be blocked for a few seconds for your security.
    name="ConfirmCloseAll"
    type="alertmodal">
 Are you sure you want to close all IMs?
+  <tag>confirm</tag>
     <usetemplate
      name="okcancelignore"
      notext="Cancel"
@@ -6358,6 +6718,7 @@ Attachment has been saved.
     name="UnableToFindHelpTopic"
     type="alertmodal">
 Unable to find the help topic for this element.
+  <tag>fail</tag>
   </notification>
 
     <notification
@@ -6366,6 +6727,7 @@ Unable to find the help topic for this element.
  type="alertmodal">
 Server Error: Media update or get failed.
 &apos;[ERROR]&apos;
+  <tag>fail</tag>
         <usetemplate
          name="okbutton"
          yestext="OK"/>
@@ -6386,6 +6748,7 @@ Your text chat has been muted by moderator.
  name="VoiceIsMutedByModerator"
  type="alertmodal">
 Your voice has been muted by moderator.
+    <tag>voice</tag>
         <usetemplate
          name="okbutton"
          yestext="OK"/>
@@ -6396,6 +6759,7 @@ Your voice has been muted by moderator.
    name="ConfirmClearTeleportHistory"
    type="alertmodal">
 Are you sure you want to delete your teleport history?
+  <tag>confirm</tag>
     <usetemplate
      name="okcancelbuttons"
      notext="Cancel"
@@ -6408,6 +6772,7 @@ Are you sure you want to delete your teleport history?
    type="alert">
 Selected button can not be shown right now.
 The button will be shown when there is enough space for it.
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -6427,22 +6792,27 @@ Are you sure you want to share the following items:
 With the following Residents:
 
 [RESIDENTS]
+  <tag>confirm</tag>
 	<usetemplate
      name="okcancelbuttons"
      notext="Cancel"
      yestext="Ok"/>
   </notification>
+  
   <notification
    icon="notifytip.tga"
    name="ItemsShared"
    type="notifytip">
 Items successfully shared.
   </notification>
+  
   <notification
    icon="notifytip.tga"
    name="DeedToGroupFail"
    type="notifytip">
 Deed to group failed.
+    <tag>group</tag>
+  <tag>fail</tag>
   </notification>
 
   <notification
@@ -6516,6 +6886,7 @@ Avatar '[NAME]' left appearance mode.
    type="alertmodal">
 We're having trouble connecting using [PROTOCOL] [HOSTID].
 Please check your network and firewall setup.
+  <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -6531,6 +6902,8 @@ We're having trouble connecting to your voice server:
 
 Voice communications will not be available.
 Please check your network and firewall setup.
+    <tag>voice</tag>
+  <tag>fail</tag>
     <usetemplate
      name="okbutton"
      yestext="OK"/>
@@ -6565,6 +6938,8 @@ You locally updated a [RESOLUTION] baked texture for '[BODYREGION]' after [TIME]
    name="ConfirmLeaveCall"
    type="alert">
 Are you sure you want to leave this call?
+    <tag>confirm</tag>
+    <tag>voice</tag>
     <usetemplate
      ignoretext="Confirm before I leave call"
      name="okcancelignore"
@@ -6582,6 +6957,9 @@ This will also cause all residents that later join the call to be
 muted, even after you have left the call.
 
 Mute everyone?
+    <tag>group</tag>
+    <tag>confirm</tag>
+    <tag>voice</tag>
     <usetemplate
      ignoretext="Confirm before I mute all participants in a group call"
      name="okcancelignore"
@@ -6600,6 +6978,7 @@ Mute everyone?
 
   <notification
   name="HintSit"
+  
   label="Stand"
   type="hint"
   unique="true">
@@ -6607,19 +6986,23 @@ Mute everyone?
   </notification>
 
   <notification
-  name="HintDestinationGuide"
-  label="Explore the World"
+  name="HintSpeak"
+  label="Speak"
   type="hint"
   unique="true">
-    The Destination Guide contains thousands of new places to discover. Select a location and choose Teleport to start exploring.
+Click the Speak button to turn your microphone on and off.
+
+Click on the up arrow to see the voice control panel.
+
+Hiding the Speak button will disable the voice feature.
   </notification>
 
   <notification
-  name="HintAvatarPicker"
-  label="Change your Look"
+  name="HintDestinationGuide"
+  label="Explore the World"
   type="hint"
   unique="true">
-    Would you like to try a new look? Click the button below to see more Avatars.
+    The Destination Guide contains thousands of new places to discover. Select a location and choose Teleport to start exploring.
   </notification>
 
   <notification
@@ -6639,22 +7022,27 @@ Mute everyone?
   </notification>
 
   <notification
-  name="HintDisplayName"
-  label="Display Name"
+  name="HintMoveClick"
+  label=""
   type="hint"
   unique="true">
-    Set your customizable display name here. This is in addition to your unique username, which can't be changed. You can change how you see other people's names in your preferences.
+1. Click to Walk
+Click anywhere on the ground to walk to that spot.
+
+2. Click and Drag to Rotate View
+Click and drag anywhere on the world to rotate your view
+    <tag>custom_skin</tag>
   </notification>
 
   <notification
-  name="HintMoveArrows"
-  label="Move"
+  name="HintDisplayName"
+  label="Display Name"
   type="hint"
   unique="true">
-    To walk, use the directional keys on your keyboard. You can run by pressing the Up arrow twice.
-    <tag>custom_skin</tag>
+    Set your customizable display name here. This is in addition to your unique username, which can't be changed. You can change how you see other people's names in your preferences.
   </notification>
 
+
   <notification
   name="HintView"
   label="View"
@@ -6678,6 +7066,7 @@ Mute everyone?
   type="hint"
   unique="true">
     Here's your current balance of L$. Click Buy L$ to purchase more Linden Dollars.
+    <tag>funds</tag>
   </notification>
 
   <notification
@@ -6701,6 +7090,7 @@ Mute everyone?
   name="AuthRequest"
   type="browser">
 The site at &apos;&lt;nolink&gt;[HOST_NAME]&lt;/nolink&gt;&apos; in realm &apos;[REALM]&apos; requires a user name and password.
+    <tag>confirm</tag>
     <form name="form">
       <input name="username" type="text" text="User Name"/>
       <input name="password" type="password" text="Password    "/>
@@ -6714,7 +7104,159 @@ The site at &apos;&lt;nolink&gt;[HOST_NAME]&lt;/nolink&gt;&apos; in realm &apos;
     </form>
   </notification>
 
+  <notification
+ name="ModeChange"
+ label=""
+ type="alertmodal"
+ unique="true">
+    Changing modes requires you to quit and restart.
+    <tag>confirm</tag>
+    <usetemplate
+   name="okcancelbuttons"
+   yestext="Quit"
+   notext="Don't Quit"/>
+    </notification>
+
+  <notification
+ name="NoClassifieds"
+ label=""
+ type="alertmodal"
+ unique="true">
+    <tag>fail</tag>
+    <tag>confirm</tag>
+    Creation and editing of Classifieds is only available in Advanced mode. Would you like to quit and change modes? The mode selector can be found on the login screen.
+    <usetemplate
+   name="okcancelbuttons"
+   yestext="Quit"
+   notext="Don't Quit"/>
+    </notification>
+
+  <notification
+ name="NoGroupInfo"
+ label=""
+ type="alertmodal"
+ unique="true">
+    <tag>fail</tag>
+    <tag>confirm</tag>
+    Creation and editing of Groups is only available in Advanced mode. Would you like to quit and change modes? The mode selector can be found on the login screen.
+    <usetemplate
+   name="okcancelbuttons"
+   yestext="Quit"
+   notext="Don't Quit"/>
+  </notification>
+
+  <notification
+ name="NoPicks"
+ label=""
+ type="alertmodal"
+ unique="true">
+    <tag>fail</tag>
+    <tag>confirm</tag>
+    Creation and editing of Picks is only available in Advanced mode. Would you like to quit and change modes? The mode selector can be found on the login screen.
+    <usetemplate
+   name="okcancelbuttons"
+   yestext="Quit"
+   notext="Don't Quit"/>
+  </notification>
+
+  <notification
+ name="NoWorldMap"
+ label=""
+ type="alertmodal"
+ unique="true">
+    <tag>fail</tag>
+    <tag>confirm</tag>
+    Viewing of the world map is only available in Advanced mode. Would you like to quit and change modes? The mode selector can be found on the login screen.
+    <usetemplate
+   name="okcancelbuttons"
+   yestext="Quit"
+   notext="Don't Quit"/>
+  </notification>
+
+  <notification
+ name="NoVoiceCall"
+ label=""
+ type="alertmodal"
+ unique="true">
+    <tag>fail</tag>
+    <tag>confirm</tag>
+    Voice calls are only available in Advanced mode. Would you like to logout and change modes?
+    <usetemplate
+   name="okcancelbuttons"
+   yestext="Quit"
+   notext="Don't Quit"/>
+  </notification>
+
+  <notification
+ name="NoAvatarShare"
+ label=""
+ type="alertmodal"
+ unique="true">
+    <tag>fail</tag>
+    <tag>confirm</tag>
+    Sharing is only available in Advanced mode. Would you like to logout and change modes?
+    <usetemplate
+   name="okcancelbuttons"
+   yestext="Quit"
+   notext="Don't Quit"/>
+  </notification>
   
+  <notification
+ name="NoAvatarPay"
+ label=""
+ type="alertmodal"
+ unique="true">
+    <tag>fail</tag>
+    <tag>confirm</tag>
+	  Paying other residents is only available in Advanced mode. Would you like to logout and change modes?
+	  <usetemplate
+   name="okcancelbuttons"
+   yestext="Quit"
+   notext="Don't Quit"/>
+  </notification>
+
+  <notification
+ name="NoInventory"
+ label=""
+ type="alertmodal"
+ unique="true">
+    <tag>fail</tag>
+    <tag>confirm</tag>
+    Viewing inventory is only available in Advanced mode. Would you like to logout and change modes?
+    <usetemplate
+   name="okcancelbuttons"
+   yestext="Quit"
+   notext="Don't Quit"/>
+  </notification>
+
+  <notification
+ name="NoAppearance"
+ label=""
+ type="alertmodal"
+ unique="true">
+    <tag>fail</tag>
+    <tag>confirm</tag>
+    The appearance editor is only available in Advanced mode. Would you like to logout and change modes?
+    <usetemplate
+   name="okcancelbuttons"
+   yestext="Quit"
+   notext="Don't Quit"/>
+  </notification>
+
+  <notification
+ name="NoSearch"
+ label=""
+ type="alertmodal"
+ unique="true">
+    <tag>fail</tag>
+    <tag>confirm</tag>
+    Search is only available in Advanced mode. Would you like to logout and change modes?
+    <usetemplate
+   name="okcancelbuttons"
+   yestext="Quit"
+   notext="Don't Quit"/>
+  </notification>
+
   <global name="UnsupportedCPU">
 - Your CPU speed does not meet the minimum requirements.
   </global>
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray.xml b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
index a92cc886e733563922160887dd8e1d1278ce0744..a6e5e7a219495e5906a385a953bc5dd4969ad57f 100644
--- a/indra/newview/skins/default/xui/en/panel_bottomtray.xml
+++ b/indra/newview/skins/default/xui/en/panel_bottomtray.xml
@@ -5,121 +5,121 @@
  bg_opaque_color="DkGray"
  chrome="true"
  follows="left|bottom|right"
- focus_root="true" 
+ focus_root="true"
  height="33"
  layout="topleft"
  left="0"
  name="bottom_tray"
  top="28"
  width="1310">
-    <string
+  <string
      name="DragIndicationImageName"
      value="Accordion_ArrowOpened_Off" />
-    <string
+  <string
      name="SpeakBtnToolTip"
      value="Turns microphone on/off" />
-    <string
+  <string
      name="VoiceControlBtnToolTip"
      value="Shows/hides voice control panel" />
-    <layout_stack
+  <layout_stack
      border_size="0"
      clip="false"
      follows="all"
      height="28"
-     layout="topleft"
-     left="0"
+   layout="topleft"
+   left="0"
      mouse_opaque="false"
      name="toolbar_stack"
      orientation="horizontal"
      top="0"
      width="1310">
-        <layout_panel
+    <layout_panel
          auto_resize="false"
-         user_resize="false" 
+         user_resize="false"
          min_width="2"
          width="2" />
-        <layout_panel
+    <layout_panel
          auto_resize="false"
          layout="topleft"
          max_width="320"
          min_width="214"
-         height="28" 
+         height="28"
          mouse_opaque="false"
-         name="chat_bar_layout_panel"
+		 name="chat_bar_layout_panel"
          user_resize="true"
-         width="310" >
+         width="250" >
           <panel
             name="chat_bar"
             filename="panel_nearby_chat_bar.xml"
             left="0"
             height="28"
-            width="308"
+            width="248"
             top="0"
             mouse_opaque="false"
             follows="left|right"
           />
-        </layout_panel>
-        <!--
+    </layout_panel>
+    <!--
          This 5px Panel is an indicator of where the resize handle is.
          The panel provides a gap between the resize handle icon and a button to the right.  
         -->
-        <layout_panel
-         auto_resize="false"
-         layout="topleft"
-         max_width="5" 
-         min_width="5"
-         name="chat_bar_resize_handle_panel"
-         user_resize="false"
-         width="5">
-            <icon
-             follows="top|right"
-             height="25"
-             image_name="ChatBarHandle"
-             layout="topleft"
-             left="-7"
-             name="resize_handle"
-             top="4"
-             width="5" />
-        </layout_panel>
-        <layout_panel
-         auto_resize="false"
-         follows="left|right"
-         height="28"
-         layout="topleft"
-         min_height="28"
-         min_width="59"
-         mouse_opaque="false"
-         name="speak_panel"
-         top_delta="0"
-         user_resize="false"
-         width="108">
-            <talk_button
-             follows="left|right"
-             height="23"
-             layout="topleft"
-             left="0"
-             name="talk"
-             top="5"
-             width="105">
-                <show_button
-                 tab_stop="true">
-                    <init_callback
-                     function="Button.SetDockableFloaterToggle"
-                     parameter="voice_controls" />
-                </show_button>
-                <!-- do not remove halign attribute with default value. otherwise it can't be overridden in other locales.
+    <layout_panel
+     auto_resize="false"
+     layout="topleft"
+     max_width="5"
+     min_width="5"
+     name="chat_bar_resize_handle_panel"
+     user_resize="false"
+     width="5">
+      <icon
+       follows="top|right"
+       height="25"
+       image_name="ChatBarHandle"
+       layout="topleft"
+       left="-7"
+       name="resize_handle"
+       top="4"
+       width="5" />
+    </layout_panel>
+    <layout_panel
+        auto_resize="false"
+        follows="left|right"
+        height="28"
+        layout="topleft"
+        min_height="28"
+        min_width="59"
+        mouse_opaque="false"
+        name="speak_panel"
+        top_delta="0"
+        user_resize="false"
+        width="108">
+      <talk_button
+       follows="left|right"
+       height="23"
+       layout="topleft"
+       left="0"
+       name="talk"
+       top="5"
+       width="105">
+        <show_button
+         tab_stop="true">
+          <init_callback
+           function="Button.SetDockableFloaterToggle"
+           parameter="voice_controls" />
+        </show_button>
+        <!-- do not remove halign attribute with default value. otherwise it can't be overridden in other locales.
                  & pad_right is default value for long label which can be right aligned. See EXT-6318 -->
-                <speak_button
-                 halign="center"
-                 label="Speak"
-                 label_selected="Speak"
-                 name="speak_btn"
-                 pad_right="20"
-                 tab_stop="true"
-                 use_ellipses="true" />
-            </talk_button>
-        </layout_panel>
-        <layout_panel
+        <speak_button
+         halign="center"
+         label="Speak"
+         label_selected="Speak"
+         name="speak_btn"
+         pad_right="20"
+         tab_stop="true"
+         use_ellipses="true" />
+      </talk_button>
+    </layout_panel>
+    <layout_panel
          auto_resize="false"
          follows="right"
          height="28"
@@ -131,7 +131,7 @@
          top_delta="0"
          user_resize="false"
          width="85">
-            <gesture_combo_list
+      <gesture_combo_list
              follows="left|right"
              height="23"
              label="Gesture"
@@ -141,46 +141,46 @@
              tool_tip="Shows/hides gestures"
              top="5"
              width="82">
-                <combo_button
+        <combo_button
                  pad_right="10"
                  use_ellipses="true" />
-                <combo_list
+        <combo_list
                  page_lines="17" />
-            </gesture_combo_list>
-        </layout_panel>
-        <layout_panel
+      </gesture_combo_list>
+    </layout_panel>
+    <layout_panel
          auto_resize="false"
-         follows="right"
-         height="28"
-         layout="topleft"
-         min_height="28"
-         min_width="52"
-         mouse_opaque="false"
-         name="movement_panel"
-         user_resize="false"
-         width="83">
-            <bottomtray_button
-             follows="left|right"
-             height="23"
-             image_pressed="PushButton_Press"
-             image_pressed_selected="PushButton_Selected_Press"
-             image_selected="PushButton_Selected_Press"
-             is_toggle="true"
-             label="Move"
-             layout="topleft"
-             name="movement_btn"
-             tool_tip="Shows/hides movement controls"
-             top="5"
-             use_ellipses="true"
-             width="80">
-                <init_callback
-                 function="Button.SetDockableFloaterToggle"
-                 parameter="moveview" />
-            </bottomtray_button>
+     follows="right"
+     height="28"
+     layout="topleft"
+     min_height="28"
+     min_width="52"
+     mouse_opaque="false"
+     name="movement_panel"
+     user_resize="false"
+     width="83">
+      <bottomtray_button
+       follows="left|right"
+       height="23"
+       image_pressed="PushButton_Press"
+       image_pressed_selected="PushButton_Selected_Press"
+       image_selected="PushButton_Selected_Press"
+       is_toggle="true"
+       label="Move"
+       layout="topleft"
+       name="movement_btn"
+       tool_tip="Shows/hides movement controls"
+       top="5"
+       use_ellipses="true"
+       width="80">
+        <init_callback
+         function="Button.SetDockableFloaterToggle"
+         parameter="moveview" />
+      </bottomtray_button>
 
-        </layout_panel>
-        <layout_panel
-         auto_resize="false"
+    </layout_panel>
+    <layout_panel
+     auto_resize="false"
          follows="left|right"
          height="28"
          layout="topleft"
@@ -190,7 +190,7 @@
          name="cam_panel"
          user_resize="false"
          width="83">
-            <bottomtray_button
+      <bottomtray_button
              follows="left|right"
              height="23"
              image_pressed="PushButton_Press"
@@ -205,83 +205,83 @@
              top="5"
              use_ellipses="true"
              width="80">
-                <init_callback
+        <init_callback
                  function="Button.SetDockableFloaterToggle"
                  parameter="camera" />
-            </bottomtray_button>
-        </layout_panel>
-        <layout_panel
+      </bottomtray_button>
+    </layout_panel>
+    <layout_panel
          auto_resize="false"
          follows="left|right"
          height="28"
          layout="topleft"
-         min_width="40"
-         mouse_opaque="false"
-         name="snapshot_panel"
-         user_resize="false"
-         width="39">
-            <bottomtray_button
-             follows="left|right"
-             height="23"
-             image_overlay="Snapshot_Off"
-             image_pressed="PushButton_Press"
-             image_pressed_selected="PushButton_Selected_Press"
-             image_selected="PushButton_Selected_Press"
-             is_toggle="true"
-             layout="topleft"
-             left="0"
-             name="snapshots"
-             tool_tip="Take snapshot"
-             top="5"
-             width="36">
-                <init_callback
-                 function="Button.SetFloaterToggle"
-                 parameter="snapshot" />
-            </bottomtray_button>
-        </layout_panel>
-        <layout_panel
-         auto_resize="false"
-         follows="left|right"
-         height="28"
-         layout="topleft"
-         min_height="28"
-         min_width="52"
-         mouse_opaque="false"
-         name="build_btn_panel"
-         user_resize="false"
-         width="83">
-<!--*FIX: Build Floater is not opened with default registration. Will be fixed soon.
+     min_width="40"
+		  mouse_opaque="false"
+     name="snapshot_panel"
+		  user_resize="false"
+     width="39">
+      <bottomtray_button
+			follows="left|right"
+			height="23"
+       image_overlay="Snapshot_Off"
+			image_pressed="PushButton_Press"
+			image_pressed_selected="PushButton_Selected_Press"
+			image_selected="PushButton_Selected_Press"
+       is_toggle="true"
+			layout="topleft"
+			left="0"
+       name="snapshots"
+       tool_tip="Take snapshot"
+			top="5"
+       width="36">
+        <init_callback
+         function="Button.SetFloaterToggle"
+         parameter="snapshot" />
+      </bottomtray_button>
+    </layout_panel>
+    <layout_panel
+		  auto_resize="false"
+		  follows="left|right"
+		  height="28"
+		  layout="topleft"
+		  min_height="28"
+     min_width="52"
+		  mouse_opaque="false"
+     name="build_btn_panel"
+		  user_resize="false"
+     width="83">
+      <!--*FIX: Build Floater is not opened with default registration. Will be fixed soon.
 Disabled for now.
 -->
-            <bottomtray_button
-             follows="left|right"
-             height="23"
-             image_pressed="PushButton_Press"
-             image_pressed_selected="PushButton_Selected_Press"
-             image_selected="PushButton_Selected_Press"
-             is_toggle="true"
-             label="Build"
-             layout="topleft"
-             left="0"
-             name="build_btn"
-             tool_tip="Shows/hides Build Tools"
-             top="5"
-             use_ellipses="true"
-             width="80">
-                <commit_callback
-                 function="Build.Toggle"
-                 parameter="build" />
-            </bottomtray_button>
-        </layout_panel>
-        <layout_panel
-         auto_resize="false"
-         follows="left|right"
-         height="28"
-         layout="topleft"
+      <bottomtray_button
+			follows="left|right"
+			height="23"
+			image_pressed="PushButton_Press"
+			image_pressed_selected="PushButton_Selected_Press"
+			image_selected="PushButton_Selected_Press"
+       is_toggle="true"
+       label="Build"
+			layout="topleft"
+			left="0"
+       name="build_btn"
+       tool_tip="Shows/hides Build Tools"
+			top="5"
+			use_ellipses="true"
+       width="80">
+        <commit_callback
+         function="Build.Toggle"
+         parameter="build" />
+      </bottomtray_button>
+    </layout_panel>
+    <layout_panel
+		  auto_resize="false"
+		  follows="left|right"
+		  height="28"
+		  layout="topleft"
          min_height="28"
-         min_width="52"
+     min_width="52"
          mouse_opaque="false"
-         name="search_btn_panel"
+     name="search_btn_panel"
          user_resize="false"
          width="83">
             <bottomtray_button
@@ -341,7 +341,7 @@ Disabled for now.
          height="28"
          layout="topleft"
          min_height="28"
-         min_width="52"
+         min_width="62"
          mouse_opaque="false"
          name="mini_map_btn_panel"
          user_resize="false"
@@ -378,7 +378,7 @@ Disabled for now.
          width="189">
 <!--*NOTE: min_width of the chiclet_panel (chiclet_list) must be the same
 as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly. EXT-991-->
-            <chiclet_panel
+      <chiclet_panel
              chiclet_padding="4"
              follows="left|right"
              height="24"
@@ -389,7 +389,7 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
              name="chiclet_list"
              top="7"
              width="189">
-                <button
+        <button
                  auto_resize="true"
                  follows="right"
                  height="29"
@@ -406,7 +406,7 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
                  top="-28"
                  visible="false"
                  width="7" />
-                <button
+        <button
                  auto_resize="true"
                  follows="right"
                  height="29"
@@ -423,13 +423,13 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
                  top="-28"
                  visible="false"
                  width="7" />
-            </chiclet_panel>
-        </layout_panel>
-        <layout_panel auto_resize="false"
-                      user_resize="false" 
+      </chiclet_panel>
+    </layout_panel>
+    <layout_panel auto_resize="false"
+                      user_resize="false"
                       width="4"
                       min_width="4"/>
-        <layout_panel
+    <layout_panel
          auto_resize="false"
          follows="right"
          height="28"
@@ -440,7 +440,7 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
          top="0"
          user_resize="false"
          width="37">
-            <chiclet_im_well
+      <chiclet_im_well
              follows="right"
              height="28"
              layout="topleft"
@@ -449,7 +449,7 @@ as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly.
              name="im_well"
              top="0"
              width="35">
-             <!--
+        <!--
 Emulate 4 states of button by background images, see details in EXT-3147. The same should be for notification_well button
 xml attribute           Description
 image_unselected        "Unlit" - there are no new messages
@@ -457,7 +457,7 @@ image_selected          "Unlit" + "Selected" - there are no new messages and the
 image_pressed           "Lit" - there are new messages
 image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well is open
              -->
-                <button
+        <button
                  auto_resize="true"
                  follows="right"
                  halign="center"
@@ -472,13 +472,13 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well
                  name="Unread IM messages"
                  tool_tip="Conversations"
                  width="34">
-                    <init_callback
+          <init_callback
                      function="Button.SetDockableFloaterToggle"
                      parameter="im_well_window" />
-                </button>
-            </chiclet_im_well>
-        </layout_panel>
-        <layout_panel
+        </button>
+      </chiclet_im_well>
+    </layout_panel>
+    <layout_panel
          auto_resize="false"
          follows="right"
          height="28"
@@ -489,7 +489,7 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well
          top="0"
          user_resize="false"
          width="37">
-            <chiclet_notification
+      <chiclet_notification
              follows="right"
              height="23"
              layout="topleft"
@@ -498,7 +498,7 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well
              name="notification_well"
              top="5"
              width="35">
-                <button
+        <button
                  auto_resize="true"
                  bottom_pad="3"
                  follows="right"
@@ -514,17 +514,17 @@ image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well
                  name="Unread"
                  tool_tip="Notifications"
                  width="34">
-                    <init_callback
+          <init_callback
                      function="Button.SetDockableFloaterToggle"
                      parameter="notification_well_window" />
-                </button>
-            </chiclet_notification>
-        </layout_panel>
-      <layout_panel
-         auto_resize="false"
-         user_resize="false" 
-         min_width="4"
-         name="DUMMY2"
-         width="8" />
-    </layout_stack>
+        </button>
+      </chiclet_notification>
+    </layout_panel>
+    <layout_panel
+		   auto_resize="false"
+		   user_resize="false"
+		   min_width="4"
+		   name="DUMMY2"
+		   width="8" />
+  </layout_stack>
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_edit_physics.xml b/indra/newview/skins/default/xui/en/panel_edit_physics.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0092ceb0ddcf8fc7b421e99456b1d5a3767a6d71
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_edit_physics.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+ <panel
+     background_visible="true"
+	 follows="all"
+	 height="400"
+	 layout="topleft"
+	 left="0"
+	 name="edit_physics_panel"
+	 top_pad="10"
+	 width="333" >
+     <panel
+         border="false"
+         bg_alpha_color="DkGray2"
+         bg_opaque_color="DkGray2"
+         background_visible="true"
+         background_opaque="true"
+         follows="all"
+         height="388"
+         label=""
+         layout="topleft"
+		 left="10"
+         name="accordion_panel"
+		 top_pad="0"
+         width="313">
+     <accordion
+        follows="all"
+        height ="388"
+        layout="topleft"
+        left="0"
+	single_expansion="true"
+        fit_parent="true"
+        name="physics_accordion"
+        top="0"
+        width="313">
+		<accordion_tab
+			layout="topleft"
+			fit_panel="false"
+			min_height="50"
+			name="physics_breasts_updown_tab"
+			title="Breasts Bounce">
+			<scrolling_panel_list
+				follows="all"
+				layout="topleft"
+				left="10"
+				name="physics_breasts_updown_param_list"
+				top="10"
+				width="303" />
+		</accordion_tab>
+		<accordion_tab
+			layout="topleft"
+			fit_panel="false"
+			min_height="50"
+			name="physics_breasts_inout_tab"
+			title="Breasts Cleavage">
+			<scrolling_panel_list
+				follows="all"
+				layout="topleft"
+				left="0"
+				name="physics_breasts_inout_param_list"
+				top_pad="50"
+				width="303" />
+		</accordion_tab>
+		<accordion_tab
+			layout="topleft"
+			fit_panel="false"
+			min_height="50"
+			name="physics_breasts_leftright_tab"
+			title="Breasts Sway">
+			<scrolling_panel_list
+				follows="all"
+				layout="topleft"
+				left="0"
+				name="physics_breasts_leftright_param_list"
+				top_pad="50"
+				width="303" />
+		</accordion_tab>
+		<accordion_tab
+			layout="topleft"
+			fit_panel="false"
+			min_height="50"
+			name="physics_belly_tab"
+			title="Belly Bounce">
+			<scrolling_panel_list
+				follows="all"
+				layout="topleft"
+				left="0"
+				name="physics_belly_updown_param_list"
+				top_pad="40"
+				width="303" />
+		</accordion_tab>
+
+		<accordion_tab
+			layout="topleft"
+			fit_panel="false"
+			min_height="50"
+			name="physics_butt_tab"
+			title="Butt Bounce">
+			<scrolling_panel_list
+				follows="all"
+				layout="topleft"
+				left="0"
+				name="physics_butt_updown_param_list"
+				top_pad="30"
+				width="303" />
+		</accordion_tab>
+
+		<accordion_tab
+			layout="topleft"
+			fit_panel="false"
+			min_height="50"
+			name="physics_butt_leftright_tab"
+			title="Butt Sway">
+			<scrolling_panel_list
+				follows="all"
+				layout="topleft"
+				left="0"
+				name="physics_butt_leftright_param_list"
+				top_pad="20"
+				width="303" />
+		</accordion_tab>
+		<accordion_tab
+			layout="topleft"
+			fit_panel="false"
+			min_height="50"
+			name="physics_advanced_tab"
+			title="Advanced Parameters">
+			<scrolling_panel_list
+				follows="all"
+				layout="topleft"
+				left="0"
+				name="physics_advanced_param_list"
+				top_pad="10"
+				width="303" />
+		</accordion_tab>
+	</accordion>
+    </panel>
+</panel>
+
diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
index ac8917d272d9364d12563200e33c52a1cd0777eb..c8764a6a8439501720773449f656b2e692e4c456 100644
--- a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
+++ b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
@@ -71,6 +71,10 @@
      name="edit_tattoo_title">
         Editing Tattoo
     </string>
+    <string
+     name="edit_physics_title">
+        Editing Physics
+    </string>
     <string
      name="shape_desc_text">
         Shape:
@@ -131,6 +135,10 @@
      name="tattoo_desc_text">
         Tattoo:
     </string>
+    <string
+     name="physics_desc_text">
+        Physics:
+    </string>
     <!-- Default width of the button should be to show it without label.
      Button will be extedned in code to show whole label when wearable is being changed.
     -->
@@ -410,6 +418,16 @@
          top="8"
          visible="false"
          width="333" />
+        <panel
+         filename="panel_edit_physics.xml"
+         follows="all"
+         height="425"
+         layout="topleft"
+         left="0"
+         name="edit_physics_panel"
+         top="8"
+         visible="false"
+         width="333" />
     </panel>
     <panel
      follows="bottom|left|right"
diff --git a/indra/newview/skins/default/xui/en/panel_hint.xml b/indra/newview/skins/default/xui/en/panel_hint.xml
index e2e9d0aef0941378a67896f9ef6836e8183f27f6..f7434f03307c18543d2d640b88dc1f13099119d8 100644
--- a/indra/newview/skins/default/xui/en/panel_hint.xml
+++ b/indra/newview/skins/default/xui/en/panel_hint.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
  width="205"
- height="100">
+ height="34">
   <text name="hint_title"
         font="SansSerifMedium" 
         left="8"
@@ -15,8 +15,8 @@
         left="8"
         right="197"
         top="26"
-        bottom="92"
-        follows="all" 
+        bottom="26"
+        follows="left|right|bottom" 
         text_color="Black"
         wrap="true"/>
   <button right="197" 
diff --git a/indra/newview/skins/default/xui/en/panel_hint_image.xml b/indra/newview/skins/default/xui/en/panel_hint_image.xml
index 00b6e4249716ccda54a56278f75fb3cecc096c5f..df05d50dc520c32fdbb983d44179587614a7adcc 100644
--- a/indra/newview/skins/default/xui/en/panel_hint_image.xml
+++ b/indra/newview/skins/default/xui/en/panel_hint_image.xml
@@ -1,33 +1,43 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
 <panel
- width="205"
- height="140"
+ width="305"
+ height="40"
  layout="topleft">
   <text name="hint_title"
         font="SansSerifMedium" 
         left="8"
-        right="180"
+        right="290"
         top="8"
         bottom="20"
         follows="left|right|top"
         text_color="Black"
         wrap="false"/>
-  <icon name="hint_image"
-        left="42"
-        top="25"
-        width="115"
-        height="86"
-        image_name="arrow_keys.png"
-        />
+  <layout_stack left="0"
+                top="25"
+                width="305"
+                height="0"
+                follows="left|top|right"
+                orientation="horizontal">
+    <layout_panel auto_resize="true" width="100"/>
+    <layout_panel auto_resize="true" width="0">
+      <icon name="hint_image"
+       top="0"
+       left="0"
+       height="0"
+       width="0"
+       follows="all"/>
+    </layout_panel>
+      <layout_panel auto_resize="true" width="100"/>
+    </layout_stack>
   <text name="hint_text"
         left="8"
-        right="197"
-        top_pad="5"
-        bottom="120"
-        follows="all" 
+        right="297"
+        top="30"
+        bottom="30"
+        follows="left|right|bottom" 
         text_color="Black"
         wrap="true"/>
-  <button right="197" 
+  <button right="297" 
           top="8"
           width="16" 
           height="16"
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
index 806182bcb4ea6054e66824469d17675bfd93202b..8d0f1437e642f4e2b5567b4c29df2212a6f7b1a0 100644
--- a/indra/newview/skins/default/xui/en/panel_login.xml
+++ b/indra/newview/skins/default/xui/en/panel_login.xml
@@ -47,8 +47,8 @@ auto_resize="false"
 follows="left|bottom"
 name="login"
 layout="topleft"
-width="695"
-min_width="695"
+width="705"
+min_width="705"
 user_resize="false"
 height="80">
 <text
@@ -67,8 +67,7 @@ follows="left|bottom"
 height="22"
 left_delta="0"
 max_chars="128"
-prevalidate_callback="ascii"
-select_on_focus="true"
+combo_editor.prevalidate_callback="ascii"
 tool_tip="The username you chose when you registered, like bobsmith12 or Steller Sunshine"
 top_pad="0"
 name="username_combo"
@@ -118,13 +117,40 @@ label="Remember password"
   name="connect_btn"
   top="35"
   width="90" />
+ <text
+  follows="left|bottom"
+  font="SansSerifSmall"
+  height="15"
+  left_pad="10"
+  name="mode_selection_text"
+  top="20"
+  width="130">
+       Mode:
+ </text>
+<combo_box
+  follows="left|bottom"
+  height="23"
+  max_chars="128"
+  tool_tip="Select your mode. Choose Basic for fast, easy exploration and chat. Choose Advanced to access more features."
+  top_pad="0"
+  name="mode_combo"
+  width="110">
+<combo_box.item
+  label="Basic"
+  name="Basic"
+  value="settings_minimal.xml" />
+<combo_box.item
+  label="Advanced"
+  name="Advanced"
+  value="" />
+</combo_box>
   <text
   follows="left|bottom"
   font="SansSerifSmall"
   height="15"
-  left_pad="18"
+  left_pad="8"
   name="start_location_text"
-top="20"
+  top="20"
   width="130">
        Start at:
  </text>
@@ -136,7 +162,7 @@ control_name="NextLoginLocation"
 max_chars="128"
 top_pad="0"
 name="start_location_combo"
-     width="170">
+     width="165">
 <combo_box.item
 label="My last location"
 name="MyLastLocation"
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
index 43431ea7c1c255a3151a3faf27a9e14f86b4de7c..1a00416b2a487a0e903f9058f8435c5c8b1fb4ca 100644
--- a/indra/newview/skins/default/xui/en/panel_people.xml
+++ b/indra/newview/skins/default/xui/en/panel_people.xml
@@ -76,7 +76,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
      follows="all"
      height="383"
      layout="topleft"
-     left="5"
+     left="3"
      name="tabs"
      tab_group="1"
      tab_min_width="70"
@@ -84,7 +84,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
      tab_position="top"
      top_pad="10"
      halign="center"
-     width="317">
+     width="319">
      	<panel
          background_opaque="true"
        background_visible="true"
@@ -106,20 +106,20 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
 			 left="3"
 			 mouse_opaque="false"
 			 name="Net Map"
-			 width="307"
+			 width="305"
 			 height="140"
-			 top="0"/>
+			 top="5"/>
 			<avatar_list
              allow_select="true"
              follows="top|left|bottom|right"
-             height="216"
+             height="211"
              ignore_online_status="true"
              layout="topleft"
              left="3"
              multi_select="true"
              name="avatar_list"
              top="145"
-             width="307" />
+             width="306" />
             <panel
              background_visible="true"
              follows="left|right|bottom"
@@ -165,7 +165,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
              layout="topleft"
              left_pad="1"
              name="dummy_icon"
-             width="241"
+             width="243"
              />
             </panel>
         </panel>
@@ -251,7 +251,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
 				   top_pad="1"
 				   left="0"
 				   name="bottom_panel"
-				   width="305">
+				   width="308">
 				      <layout_panel
 				       auto_resize="false"
 				       height="25"
@@ -300,7 +300,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
 				       layout="topleft"
 				       name="dummy_panel"
 				       user_resize="false"
-				       width="212">
+				       width="210">
 				          <icon
 				           follows="bottom|left|right"
 				           height="25"
@@ -309,7 +309,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
 				           left="0"
 				           top="0"
 				           name="dummy_icon"
-				           width="211" />
+				           width="210" />
 				      </layout_panel>
 				      <layout_panel
 				       auto_resize="false"
@@ -471,7 +471,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
              	 layout="topleft"
              	 left_pad="1"
              	 name="dummy_icon"
-             	 width="209"
+             	 width="212"
              />
             </panel>
         </panel>
@@ -506,7 +506,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
              height="27"
              label="bottom_panel"
              layout="topleft"
-             left="0"
+             left="3"
              name="bottom_panel"
              top_pad="0"
              width="313">
@@ -544,7 +544,7 @@ Looking for people to hang out with? Try the [secondlife:///app/worldmap World M
              	 layout="topleft"
              	 left_pad="1"
              	 name="dummy_icon"
-             	 width="241"
+             	 width="244"
              />
             </panel>
         </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
index 559df5bec946a8b0e7f16c28e1258d100ae92cd2..714dca7fac10c6462b3c9ee5804183ad8c27098a 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
@@ -67,7 +67,7 @@
      image_overlay="Arrow_Up"
      hover_glow_amount="0.15"
      layout="topleft"
-     left="180"
+     left="200"
      name="enable_this_popup"
      top_pad="5"
      width="40">
@@ -81,7 +81,7 @@
      image_overlay="Arrow_Down"
      hover_glow_amount="0.15"
      layout="topleft"
-     left_pad="40"
+     left_pad="20"
      name="disable_this_popup"
      top_delta="0"
      width="40">
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
index a1082d9c329685785de7c981a12787bae706e1f3..404537e1f2d4268e6a882cd9a00bd598d2c13f54 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
@@ -208,15 +208,27 @@
     <check_box
      control_name="TranslateChat"
      enabled="true"
-     height="16"
-     label="Use machine translation while chatting (powered by Google)"
+     height="16"     
      layout="topleft"
      left="30"
      name="translate_chat_checkbox"
-     bottom_delta="30"
+     top_pad="5"
      width="400" />
+     <!-- *HACK 
+     	After storm-1109 will be fixed: instead of using this text_box, word_wrap should be applied for "translate_chat_checkbox" check_box's label.-->
+     <text
+      follows="top|left"
+      height="15"
+      layout="topleft"
+      left="50"
+      name="translate_chb_label"
+      top_delta="1"
+      width="450"
+      wrap="true">
+      Use machine translation while chatting (powered by Google)
+     </text>
     <text
-     bottom_delta="30"
+     top_pad="20"
      name="translate_language_text"
      follows="left|top"
      layout="topleft"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
index 36f8f991789402b79939992a6e57177bc499235b..9c718fdb873e84f3185d362ee196ff49a3c359d6 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
@@ -307,17 +307,6 @@
 	 tool_tip="Check to use display names in chat, IM, name tags, etc."
 	 top_pad="3"/>
 	 
-	<check_box
-	 control_name="EnableUIHints"
-	 follows="top|left"
-	 height="16"
-	 label="Enable Viewer UI Hints"
-	 layout="topleft"
-	 left="27"
-	 name="viewer_hints_check"
-	 top_pad="5"
-	 width="237"/>
-	 
 	<text
 	 type="string"
 	 length="1"
@@ -326,7 +315,7 @@
 	 layout="topleft"
 	 left="30"
 	 name="inworld_typing_rg_label"
-	 top_pad="6"
+	 top_pad="1"
 	 width="400">
        Pressing letter keys:
    </text>
@@ -348,9 +337,9 @@
          width="150" />
         <radio_item
          label="Affects movement (i.e. WASD)"
-         left_pad="0"
+         left="0"
          layout="topleft"
-         top_delta="0" 
+         top="18" 
          height="16" 
          name="radio_move"
          value="0"
@@ -365,7 +354,7 @@
      layout="topleft"
      left="30"
      name="title_afk_text"
-     top_pad="4" 
+     top_pad="15" 
      width="190">
     	Away timeout:
     </text>
@@ -408,7 +397,7 @@
      left="30"
      mouse_opaque="false"
      name="text_box3"
-     top_pad="5"
+     top_pad="3"
      width="240">
        Busy mode response:
     </text>
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
index 6573822d1a1b493a5da26081806d590e2b4eab78..d74197d965b59833a5437d0923a9c73c990eb4b3 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -2,7 +2,7 @@
 <panel
  border="true"
  follows="left|top|right|bottom"
- height="408"
+ height="418"
  label="Graphics"
  layout="topleft"
  left="102"
@@ -327,6 +327,37 @@
              value="4"/>
         </combo_box>
     
+        <slider
+        control_name="RenderAvatarPhysicsLODFactor"
+        follows="left|top"
+        height="16"
+        initial_value="100"
+	increment=".05"
+        label="  Avatar Physics:"
+        label_width="85"
+        layout="topleft"
+        left_delta="-16"
+        name="AvatarPhysicsDetail"
+        show_text="false"
+        top_pad="12"
+        width="160">
+           <slider.commit_callback
+            function="Pref.UpdateSliderText"
+            parameter="AvatarPhysicsDetailText" />
+        </slider>
+        <text
+        type="string"
+        length="1"
+        follows="left|top"
+        height="12"
+        layout="topleft"
+        left_delta="165"
+        name="AvatarPhysicsDetailText"
+        top_pad="-16"
+        width="128">
+           Low
+        </text>
+
 		<slider
 		 control_name="RenderFarClip"
 		 decimal_digits="0"
@@ -618,6 +649,7 @@
          width="128">
             Low
         </text>
+
         <text
          type="string"
          length="1"
@@ -628,7 +660,7 @@
          name="AvatarRenderingText"
          top_pad="18"
          width="128">
-            Avatar rendering:
+        Avatar Rendering:
       </text>
       <check_box
        control_name="RenderUseImpostors"
@@ -672,7 +704,7 @@
        left="358"
        left_pad="-30"
        name="TerrainDetailText"
-       top="226"
+        top="250"
        width="155">
           Terrain detail:
       </text>
@@ -710,7 +742,7 @@
      layout="topleft"
      left="10"
      name="Apply"
-     top="383"
+     top="390"
      width="115">
         <button.commit_callback
          function="Pref.Apply" />
@@ -722,7 +754,7 @@
      layout="topleft"
      left_pad="3"
      name="Defaults"
-     top="383"
+     top="390"
      width="115">
         <button.commit_callback
          function="Pref.HardwareDefaults" />
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_move.xml b/indra/newview/skins/default/xui/en/panel_preferences_move.xml
index d2fc6ea09a3ae2a575e11abab399166c9b4e05cc..04412bdb9c2cc5de59f12792ae42737331237030 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_move.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_move.xml
@@ -120,12 +120,13 @@
    type="string"
    length="1"
    follows="left|top"
-   height="10"
+   height="15"
    layout="topleft"
    left_delta="3"
    name=" Mouse Sensitivity"
    top_pad="10"
-   width="160">
+   width="160"
+   wrap="true">
     Mouselook mouse sensitivity:
   </text>
   <slider
@@ -139,7 +140,7 @@
    max_val="15"
    name="mouse_sensitivity"
    top_delta="-1"
-   width="145" />
+   width="115" />
   <check_box
    control_name="InvertMouse"
    height="16"
@@ -158,7 +159,7 @@
    left="78"
    name="arrow_keys_move_avatar_check"
    width="237"
-   top_pad="1"/>
+   top_pad="10"/>
   <check_box
    control_name="AllowTapTapHoldRun"
    follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
index ef25588ca37c7909b5abb9ac75bf270020ee6060..30be5bc8533560aad1e3560dbad97af38e78401e 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
@@ -42,7 +42,7 @@
     </text>
     <check_box
 	 height="16"
-     enabled="true"
+     enabled="false"
      label="Show me in Search results"
      layout="topleft"
      left="30"
@@ -82,8 +82,8 @@
      control_name="ShowFavoritesOnLogin"
      enabled="false" 
      height="16"
-     label="Show my Favorite Landmarks at Login (via &apos;Start At&apos; drop-down menu)"
      layout="topleft"
+     label="Show my Favorite Landmarks at Login (via &apos;Start At&apos; drop-down menu)"
      left="30"
      name="favorites_on_login_check"
      top_pad="10"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
index 26af8dc29d848640a8a8d60038e6ecf242d8295d..f89494da72b993c0a9f232668bb73332ec5d56cd 100644
--- a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
@@ -50,12 +50,24 @@
      control_name="MuteWhenMinimized"
      height="15"
      initial_value="true"
-     label="Mute when minimized"
      layout="topleft"
      name="mute_when_minimized"
 	   top_delta="3"
      left_pad="5"
-     width="235" />
+     width="20" />
+     <!-- *HACK 
+     	After storm-1109 will be fixed: instead of using this text_box, word_wrap should be applied for "mute_when_minimized" check_box's label.-->
+     <text
+      follows="top|left"
+      height="15"
+      layout="topleft"
+      left_pad="0"
+      name="mute_chb_label"
+      top_delta="0"
+      width="150"
+      wrap="true">
+      Mute when minimized
+     </text>
 	<slider
 		control_name="AudioLevelUI"
 		disabled_control="MuteAudio"
diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml
index d36220385ddf68ec1c73d3b743952addd07c1148..cb701e03da35c826a958b4138a748708c8ea84e9 100644
--- a/indra/newview/skins/default/xui/en/panel_profile.xml
+++ b/indra/newview/skins/default/xui/en/panel_profile.xml
@@ -453,23 +453,6 @@
 				</layout_panel>
 		</layout_stack>
       </layout_panel>
-      <layout_panel
-         follows="bottom|left"
-         height="30"
-         layout="topleft"
-         name="profile_me_buttons_panel"
-         visible="false"
-	       width="313">
-        <button
-         follows="bottom|right"
-         height="23"
-         left="20"
-         top="0"
-         label="Edit Profile"
-         name="edit_profile_btn"
-         tool_tip="Edit your personal information"
-         width="130" />
-        </layout_panel>
      </layout_stack>
 
 </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml
index 627b12cfe17a71f088ff2293474425d03207f7ca..8d420243864c56e4cda3fa1d0f53e2b7ad2e00d1 100644
--- a/indra/newview/skins/default/xui/en/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml
@@ -28,6 +28,10 @@
      name="Title">
         Script: [NAME]
     </panel.string>
+    <panel.string
+     name="external_editor_not_set">
+        Select an editor by setting the environment variable LL_SCRIPT_EDITOR or the ExternalEditor setting.
+    </panel.string>
     <menu_bar
      bg_visible="false"
      follows="left|top"
diff --git a/indra/newview/skins/default/xui/en/panel_scrolling_param_base.xml b/indra/newview/skins/default/xui/en/panel_scrolling_param_base.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1351f75623e96293c4e3027cc7c972dfb010aa44
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_scrolling_param_base.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ layout="topleft"
+ left="0"
+ name="LLScrollingPanelParamBase"
+ height="16"
+ width="290">
+    <slider
+     can_edit_text="true"
+     decimal_digits="0"
+     enabled="false"
+     height="12"
+     increment="1"
+     initial_value="0"
+     label="[DESC]"
+     label_width="125"
+     layout="bottom|left"
+     left="16"
+     max_val="100"
+     name="param slider"
+     bottom="0"
+     width="264"
+     />
+</panel>
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index d0625d975579978820c61aeb1de426520b41314f..b0ede60fa0ee956c2a47f01402bf089c80405ab3 100644
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -1853,6 +1853,7 @@ Requests name of an avatar.  When data is available the dataserver event will be
 	<string name="skirt">Skirt</string>
 	<string name="alpha">Alpha</string>
 	<string name="tattoo">Tattoo</string>
+  <string name="physics">Physics</string>
   <string name="invalid">invalid</string>
   <string name="none">none</string>
   
@@ -1868,6 +1869,7 @@ Requests name of an avatar.  When data is available the dataserver event will be
 	<string name="skirt_not_worn">Skirt not worn</string>
 	<string name="alpha_not_worn">Alpha not worn</string>
 	<string name="tattoo_not_worn">Tattoo not worn</string>
+  <string name="physics_not_worn">Physics not worn</string>
 	<string name="invalid_not_worn">invalid</string>
 
 	<!-- Create new wearable of the specified type -->
@@ -1886,6 +1888,7 @@ Requests name of an avatar.  When data is available the dataserver event will be
 	<string name="create_new_skirt">Create new skirt</string>
 	<string name="create_new_alpha">Create new alpha</string>
 	<string name="create_new_tattoo">Create new tattoo</string>
+  <string name="create_new_physics">Create new physics</string>
 	<string name="create_new_invalid">invalid</string>
 
   <!-- Wearable List-->
@@ -2508,10 +2511,55 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 <string name="Bulbous">Bulbous</string>
 <string name="Bulbous Nose">Bulbous Nose</string>
 
+<string name="Breast Physics Mass">Breast Mass</string>
+<string name="Breast Physics Smoothing">Breast Smoothing</string>
+<string name="Breast Physics Gravity">Breast Gravity</string>
+<string name="Breast Physics Drag">Breast Drag</string>
+
+<string name="Breast Physics InOut Max Effect">Max Effect</string>
+<string name="Breast Physics InOut Spring">Spring</string>
+<string name="Breast Physics InOut Gain">Gain</string>
+<string name="Breast Physics InOut Damping">Damping</string>
+
+<string name="Breast Physics UpDown Max Effect">Max Effect</string>
+<string name="Breast Physics UpDown Spring">Spring</string>
+<string name="Breast Physics UpDown Gain">Gain</string>
+<string name="Breast Physics UpDown Damping">Damping</string>
+
+<string name="Breast Physics LeftRight Max Effect">Max Effect</string>
+<string name="Breast Physics LeftRight Spring">Spring</string>
+<string name="Breast Physics LeftRight Gain">Gain</string>
+<string name="Breast Physics LeftRight Damping">Damping</string>
+
+<string name="Belly Physics Mass">Belly Mass</string>
+<string name="Belly Physics Smoothing">Belly Smoothing</string>
+<string name="Belly Physics Gravity">Belly Gravity</string>
+<string name="Belly Physics Drag">Belly Drag</string>
+
+<string name="Belly Physics UpDown Max Effect">Max Effect</string>
+<string name="Belly Physics UpDown Spring">Spring</string>
+<string name="Belly Physics UpDown Gain">Gain</string>
+<string name="Belly Physics UpDown Damping">Damping</string>
+
+<string name="Butt Physics Mass">Butt Mass</string>
+<string name="Butt Physics Smoothing">Butt Smoothing</string>
+<string name="Butt Physics Gravity">Butt Gravity</string>
+<string name="Butt Physics Drag">Butt Drag</string>
+
+<string name="Butt Physics UpDown Max Effect">Max Effect</string>
+<string name="Butt Physics UpDown Spring">Spring</string>
+<string name="Butt Physics UpDown Gain">Gain</string>
+<string name="Butt Physics UpDown Damping">Damping</string>
+
+<string name="Butt Physics LeftRight Max Effect">Max Effect</string>
+<string name="Butt Physics LeftRight Spring">Spring</string>
+<string name="Butt Physics LeftRight Gain">Gain</string>
+<string name="Butt Physics LeftRight Damping">Damping</string>
 
 <string name="Bushy Eyebrows">Bushy Eyebrows</string>
 <string name="Bushy Hair">Bushy Hair</string>
 <string name="Butt Size">Butt Size</string>
+<string name="Butt Gravity">Butt Gravity</string>
 <string name="bustle skirt">Bustle Skirt</string>
 <string name="no bustle">No Bustle</string>
 <string name="more bustle">More Bustle</string>
@@ -3166,6 +3214,8 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 		The session initialization is timed out
 	</string>
   
+  <string name="Home position set.">Home position set.</string>
+  
   <string name="voice_morphing_url">http://secondlife.com/landing/voicemorphing</string>
 
   <!-- Financial operations strings -->
@@ -3215,6 +3265,7 @@ Abuse Report</string>
   <string name="New Skirt">New Skirt</string>
   <string name="New Alpha">New Alpha</string>
   <string name="New Tattoo">New Tattoo</string>
+  <string name="New Physics">New Physics</string>
   <string name="Invalid Wearable">Invalid Wearable</string>
   <string name="New Gesture">New Gesture</string>
   <string name="New Script">New Script</string>
@@ -3310,6 +3361,14 @@ Abuse Report</string>
   <string name="DeleteItem">Delete selected item?</string>
 
   <string name="EmptyOutfitText">There are no items in this outfit</string>
+ 
+ <!-- External editor status codes -->
+ <string name="ExternalEditorNotSet">Select an editor using the ExternalEditor setting.</string>
+ <string name="ExternalEditorNotFound">Cannot find the external editor you specified.
+Try enclosing path to the editor with double quotes.
+(e.g. "/path to my/editor" "%s")</string>
+ <string name="ExternalEditorCommandParseError">Error parsing the external editor command.</string>
+ <string name="ExternalEditorFailedToRun">External editor failed to run.</string>
 
   <!-- Key names begin -->
   <string name="Esc">Esc</string>
diff --git a/indra/newview/skins/default/xui/en/widgets/loading_indicator.xml b/indra/newview/skins/default/xui/en/widgets/loading_indicator.xml
index 6040d2412851b2ee21fd593dd4fcfc4afa024983..ea1d89c975c4eaed5802c8b93e46c75285193fb0 100644
--- a/indra/newview/skins/default/xui/en/widgets/loading_indicator.xml
+++ b/indra/newview/skins/default/xui/en/widgets/loading_indicator.xml
@@ -3,6 +3,20 @@
     follows="left|top"
     mouse_opaque="false"
     name="loading_indicator"
-    rotations_per_sec="1.0"
-    tab_stop="false"
-/>
+    images_per_sec="1.0"
+    tab_stop="false">
+  <images>
+    <image name="Progress_1"/>
+    <image name="Progress_2"/>
+    <image name="Progress_3"/>
+    <image name="Progress_4"/>
+    <image name="Progress_5"/>
+    <image name="Progress_6"/>
+    <image name="Progress_7"/>
+    <image name="Progress_8"/>
+    <image name="Progress_9"/>
+    <image name="Progress_10"/>
+    <image name="Progress_11"/>
+    <image name="Progress_12"/>
+  </images>
+</loading_indicator>
\ No newline at end of file
diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml
index 3f50437c133cf8b87c2c38b6e876bf057662243b..3df0f9284208143903fae2a0af77df71889cbaa4 100644
--- a/indra/newview/skins/default/xui/es/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/es/floater_about_land.xml
@@ -215,7 +215,7 @@ Vaya al menú Mundo &gt; Acerca del terreno o seleccione otra parcela para ver s
 			<text name="Simulator primitive usage:">
 				Uso de primitivas:
 			</text>
-			<text  name="objects_available">
+			<text name="objects_available">
 				[COUNT] de un máx. de [MAX] ([AVAILABLE] disponibles)
 			</text>
 			<text name="Primitives parcel supports:">
@@ -347,6 +347,7 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda.
 				<combo_box.item label="Parques y Naturaleza" name="item9"/>
 				<combo_box.item label="Residencial" name="item10"/>
 				<combo_box.item label="Compras" name="item11"/>
+				<combo_box.item label="Terreno en alquiler" name="item13"/>
 				<combo_box.item label="Otra" name="item12"/>
 			</combo_box>
 			<combo_box name="land category">
@@ -361,6 +362,7 @@ Sólo las parcelas más grandes pueden listarse en la búsqueda.
 				<combo_box.item label="Parques y Naturaleza" name="item9"/>
 				<combo_box.item label="Residencial" name="item10"/>
 				<combo_box.item label="Compras" name="item11"/>
+				<combo_box.item label="Terreno en alquiler" name="item13"/>
 				<combo_box.item label="Otra" name="item12"/>
 			</combo_box>
 			<check_box label="Contenido &apos;Mature&apos;" name="MatureCheck" tool_tip=""/>
@@ -439,7 +441,7 @@ los media:
 				(Definido por el Estado)
 			</panel.string>
 			<panel.string name="allow_public_access">
-				Permitir el acceso público ([MATURITY])
+				Permitir el acceso público ([MATURITY]) (Nota: Si no seleccionas esta opción, se crearán líneas de prohibición)
 			</panel.string>
 			<panel.string name="estate_override">
 				Una o más de esta opciones está configurada a nivel del estado
diff --git a/indra/newview/skins/default/xui/es/floater_map.xml b/indra/newview/skins/default/xui/es/floater_map.xml
index fa01a4a63552bf454577233a6b514a83aee30925..370b7f5053df72f5fe96d40bbe1dbeb938e2e02f 100644
--- a/indra/newview/skins/default/xui/es/floater_map.xml
+++ b/indra/newview/skins/default/xui/es/floater_map.xml
@@ -3,6 +3,9 @@
 	<floater.string name="ToolTipMsg">
 		[REGIÓN](Haz doble clic para abrir el mapa y pulsa la tecla Mayús y arrastra para obtener una vista panorámica)
 	</floater.string>
+	<floater.string name="AltToolTipMsg">
+		[REGION](Pulsa dos veces para teleportarte, pulsa mayús y arrastra para obtener una panorámica)
+	</floater.string>
 	<floater.string name="mini_map_caption">
 		MINIMAPA
 	</floater.string>
diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml
index e2ff4a25ce0753f5a44d2575f2c3fa27385f578d..fba969f2671b5b9cfd02eaeb2f5c5458f7ca96b9 100644
--- a/indra/newview/skins/default/xui/es/floater_tools.xml
+++ b/indra/newview/skins/default/xui/es/floater_tools.xml
@@ -64,6 +64,8 @@
 		<radio_item label="Elegir la cara" name="radio select face"/>
 	</radio_group>
 	<check_box label="Editar las partes enlazadas" name="checkbox edit linked parts"/>
+	<button label="Enlazar" name="link_btn"/>
+	<button label="Desenlazar" name="unlink_btn"/>
 	<text name="RenderingCost" tool_tip="Muestra cuánto se calcula que cuesta renderizar este objeto">
 		þ: [COUNT]
 	</text>
diff --git a/indra/newview/skins/default/xui/es/menu_attachment_self.xml b/indra/newview/skins/default/xui/es/menu_attachment_self.xml
index ab76c92d656eec08e0666a414a2fd497d0f8744a..0ba39378bb9e3317792c2b46b833b451377ef55e 100644
--- a/indra/newview/skins/default/xui/es/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/es/menu_attachment_self.xml
@@ -5,7 +5,7 @@
 	<menu_item_call label="Quitar" name="Detach"/>
 	<menu_item_call label="Sentarte" name="Sit Down Here"/>
 	<menu_item_call label="Levantarme" name="Stand Up"/>
-	<menu_item_call label="Cambiar vestuario" name="Change Outfit"/>
+	<menu_item_call label="Mi apariencia" name="Change Outfit"/>
 	<menu_item_call label="Editar mi vestuario" name="Edit Outfit"/>
 	<menu_item_call label="Editar mi anatomía" name="Edit My Shape"/>
 	<menu_item_call label="Mis amigos" name="Friends..."/>
diff --git a/indra/newview/skins/default/xui/es/menu_avatar_self.xml b/indra/newview/skins/default/xui/es/menu_avatar_self.xml
index 50f8384b0f265fb8da1d141000b72cb375e14380..a2d86d78c13bb6b465492aa166b186d18808df2b 100644
--- a/indra/newview/skins/default/xui/es/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/es/menu_avatar_self.xml
@@ -21,7 +21,7 @@
 		<context_menu label="Quitar" name="Object Detach"/>
 		<menu_item_call label="Quitarse todo" name="Detach All"/>
 	</context_menu>
-	<menu_item_call label="Cambiar vestuario" name="Chenge Outfit"/>
+	<menu_item_call label="Mi apariencia" name="Chenge Outfit"/>
 	<menu_item_call label="Editar mi vestuario" name="Edit Outfit"/>
 	<menu_item_call label="Editar mi anatomía" name="Edit My Shape"/>
 	<menu_item_call label="Mis amigos" name="Friends..."/>
diff --git a/indra/newview/skins/default/xui/es/menu_bottomtray.xml b/indra/newview/skins/default/xui/es/menu_bottomtray.xml
index 62683f3076b2b596e4dfc48842119618d4b26955..a16da5ae9e2555243a57d8f74c9128fbfc9a753c 100644
--- a/indra/newview/skins/default/xui/es/menu_bottomtray.xml
+++ b/indra/newview/skins/default/xui/es/menu_bottomtray.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="hide_camera_move_controls_menu">
+	<menu_item_check label="Voz activada" name="EnableVoiceChat"/>
 	<menu_item_check label="Botón Gestos" name="ShowGestureButton"/>
 	<menu_item_check label="Botón Moverse" name="ShowMoveButton"/>
 	<menu_item_check label="Botón Vista" name="ShowCameraButton"/>
 	<menu_item_check label="Botón Foto" name="ShowSnapshotButton"/>
-	<menu_item_check label="Botón Barra lateral" name="ShowSidebarButton"/>
 	<menu_item_check label="Botón Construir" name="ShowBuildButton"/>
 	<menu_item_check label="Botón Buscar" name="ShowSearchButton"/>
 	<menu_item_check label="Botón Mapa" name="ShowWorldMapButton"/>
diff --git a/indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml
index 236289f82a0ccd25e3448143fa53d3c51b80e767..bee4c61da2402bb64fd672783ca65194fccfdfac 100644
--- a/indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<menu name="Gear Menu">
+<toggleable_menu name="Gear Menu">
 	<menu_item_call label="Ver el perfil" name="view_profile"/>
 	<menu_item_call label="Añadir como amigo" name="add_friend"/>
 	<menu_item_call label="MI" name="im"/>
@@ -11,9 +11,11 @@
 	<menu_item_call label="Denunciar" name="report"/>
 	<menu_item_call label="Congelar" name="freeze"/>
 	<menu_item_call label="Expulsar" name="eject"/>
+	<menu_item_call label="Expulsar" name="kick"/>
+	<menu_item_call label="CSR" name="csr"/>
 	<menu_item_call label="Depurar las texturas" name="debug"/>
 	<menu_item_call label="Encontrar en el mapa" name="find_on_map"/>
 	<menu_item_call label="Acercar el zoom" name="zoom_in"/>
 	<menu_item_call label="Pagar" name="pay"/>
 	<menu_item_call label="Compartir" name="share"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml
index c8a1e9d9da82bda2da74bcba2e93cf7b7faf3fac..29ad718fdd3199b710ce16d28dbf0965f67b85ba 100644
--- a/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml
@@ -1,10 +1,31 @@
-<?xml version="1.0" encoding="utf-8"?>
-<menu name="Gear Menu">
-	<menu_item_call label="Sentarte" name="sit_down_here"/>
-	<menu_item_call label="Levantarme" name="stand_up"/>
-	<menu_item_call label="Cambiar vestuario" name="change_outfit"/>
-	<menu_item_call label="Mi perfil" name="my_profile"/>
-	<menu_item_call label="Mis amigos" name="my_friends"/>
-	<menu_item_call label="Mis grupos" name="my_groups"/>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Gear Menu">
+	<menu_item_call label="Sentarme" name="Sit Down Here"/>
+	<menu_item_call label="Levantarme" name="Stand Up"/>
+	<context_menu label="Quitarme" name="Take Off &gt;">
+		<context_menu label="Ropas" name="Clothes &gt;">
+			<menu_item_call label="Camisa" name="Shirt"/>
+			<menu_item_call label="Pantalones" name="Pants"/>
+			<menu_item_call label="Falda" name="Skirt"/>
+			<menu_item_call label="Zapatos" name="Shoes"/>
+			<menu_item_call label="Calcetines" name="Socks"/>
+			<menu_item_call label="Chaqueta" name="Jacket"/>
+			<menu_item_call label="Guantes" name="Gloves"/>
+			<menu_item_call label="Camiseta" name="Self Undershirt"/>
+			<menu_item_call label="Ropa interior" name="Self Underpants"/>
+			<menu_item_call label="Tatuaje" name="Self Tattoo"/>
+			<menu_item_call label="Alfa" name="Self Alpha"/>
+			<menu_item_call label="Toda la ropa" name="All Clothes"/>
+		</context_menu>
+		<context_menu label="HUD" name="Object Detach HUD"/>
+		<context_menu label="Quitar" name="Object Detach"/>
+		<menu_item_call label="Quitarse todo" name="Detach All"/>
+	</context_menu>
+	<menu_item_call label="Cambiar vestuario" name="Chenge Outfit"/>
+	<menu_item_call label="Editar mi vestuario" name="Edit Outfit"/>
+	<menu_item_call label="Editar mi anatomía" name="Edit My Shape"/>
+	<menu_item_call label="Mis amigos" name="Friends..."/>
+	<menu_item_call label="Mis grupos" name="Groups..."/>
+	<menu_item_call label="Mi perfil" name="Profile..."/>
 	<menu_item_call label="Depurar las texturas" name="Debug..."/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/es/menu_inventory_gear_default.xml
index 8e498fefba1434807b3cf337a30e2b8326994d4c..0e9644629e5b38471e125da3d2a3468dc486e253 100644
--- a/indra/newview/skins/default/xui/es/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/es/menu_inventory_gear_default.xml
@@ -3,6 +3,7 @@
 	<menu_item_call label="Nueva ventana del inventario" name="new_window"/>
 	<menu_item_check label="Ordenar alfabéticamente" name="sort_by_name"/>
 	<menu_item_check label="Ordenar por los más recientes" name="sort_by_recent"/>
+	<menu_item_check label="Ordenar las carpetas siempre alfabéticamente" name="sort_folders_by_name"/>
 	<menu_item_check label="Las carpetas del sistema, arriba" name="sort_system_folders_to_top"/>
 	<menu_item_call label="Ver los filtros" name="show_filters"/>
 	<menu_item_call label="Restablecer los filtros" name="reset_filters"/>
diff --git a/indra/newview/skins/default/xui/es/menu_object.xml b/indra/newview/skins/default/xui/es/menu_object.xml
index 06121e0c09a143e0d05e4a8b6c783bbae9caf7d3..d8c75eaf471e9fd0371596ed4b50e8d0a4e04332 100644
--- a/indra/newview/skins/default/xui/es/menu_object.xml
+++ b/indra/newview/skins/default/xui/es/menu_object.xml
@@ -16,14 +16,14 @@
 		<context_menu label="Anexar" name="Object Attach"/>
 		<context_menu label="Anexar el HUD" name="Object Attach HUD"/>
 	</context_menu>
-	<context_menu label="Quitar" name="Remove">
+	<context_menu label="Gestionar" name="Remove">
 		<menu_item_call label="Denunciar una infracción" name="Report Abuse..."/>
 		<menu_item_call label="Ignorar" name="Object Mute"/>
 		<menu_item_call label="Devolver" name="Return..."/>
-		<menu_item_call label="Eliminar" name="Delete"/>
 	</context_menu>
 	<menu_item_call label="Tomar" name="Pie Object Take"/>
 	<menu_item_call label="Coger una copia" name="Take Copy"/>
 	<menu_item_call label="Pagar" name="Pay..."/>
 	<menu_item_call label="Comprar" name="Buy..."/>
+	<menu_item_call label="Borrar" name="Delete"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/es/menu_places_gear_folder.xml
index bf46eb58e3cc4edaf90186f3c28a961ccceaca88..4051ff407522d3b2e8db597654fb08271d81edf0 100644
--- a/indra/newview/skins/default/xui/es/menu_places_gear_folder.xml
+++ b/indra/newview/skins/default/xui/es/menu_places_gear_folder.xml
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_folder_gear">
+<toggleable_menu name="menu_folder_gear">
 	<menu_item_call label="Añadir este hito" name="add_landmark"/>
 	<menu_item_call label="Añadir una carpeta" name="add_folder"/>
+	<menu_item_call label="Restaurar ítem" name="restore_item"/>
 	<menu_item_call label="Cortar" name="cut"/>
 	<menu_item_call label="Copiar" name="copy_folder"/>
 	<menu_item_call label="Pegar" name="paste"/>
@@ -12,4 +13,4 @@
 	<menu_item_call label="Abrir todas las carpetas" name="expand_all"/>
 	<menu_item_call label="Cerrar todas las carpetas" name="collapse_all"/>
 	<menu_item_check label="Ordenar por fecha" name="sort_by_date"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/es/menu_places_gear_landmark.xml
index eac85de846c5f965472b792033e2fa4cd6cccc66..c92bd19787f9d0a83a94ed61f67950710db05ba8 100644
--- a/indra/newview/skins/default/xui/es/menu_places_gear_landmark.xml
+++ b/indra/newview/skins/default/xui/es/menu_places_gear_landmark.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_ladmark_gear">
+<toggleable_menu name="menu_ladmark_gear">
 	<menu_item_call label="Teleportar" name="teleport"/>
 	<menu_item_call label="Más información" name="more_info"/>
 	<menu_item_call label="Mostrar en el mapa" name="show_on_map"/>
 	<menu_item_call label="Añadir un hito" name="add_landmark"/>
 	<menu_item_call label="Añadir una carpeta" name="add_folder"/>
+	<menu_item_call label="Restaurar ítem" name="restore_item"/>
 	<menu_item_call label="Cortar" name="cut"/>
 	<menu_item_call label="Copiar el hito" name="copy_landmark"/>
 	<menu_item_call label="Copiar la SLurl" name="copy_slurl"/>
@@ -15,4 +16,4 @@
 	<menu_item_call label="Cerrar todas las carpetas" name="collapse_all"/>
 	<menu_item_check label="Ordenar por fecha" name="sort_by_date"/>
 	<menu_item_call label="Crear un Destacado" name="create_pick"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
index 2fe7db10418ca00d0eb3c0ab5f0ab8b514239f34..c48203f95c93b9a40ba2ca162feffed569fa6633 100644
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -7,7 +7,7 @@
 		</menu_item_call>
 		<menu_item_call label="Comprar L$" name="Buy and Sell L$"/>
 		<menu_item_call label="Mi perfil" name="Profile"/>
-		<menu_item_call label="Cambiar vestuario" name="ChangeOutfit"/>
+		<menu_item_call label="Mi apariencia" name="ChangeOutfit"/>
 		<menu_item_check label="Mi Inventario" name="Inventory"/>
 		<menu_item_check label="Mi Inventario" name="ShowSidetrayInventory"/>
 		<menu_item_check label="Mis gestos" name="Gestures"/>
@@ -35,6 +35,7 @@
 	<menu label="Mundo" name="World">
 		<menu_item_check label="Minimapa" name="Mini-Map"/>
 		<menu_item_check label="Mapa del mundo" name="World Map"/>
+		<menu_item_check label="Buscar" name="Search"/>
 		<menu_item_call label="Foto" name="Take Snapshot"/>
 		<menu_item_call label="Crear un hito de este sitio" name="Create Landmark Here"/>
 		<menu label="Perfil del lugar" name="Land">
@@ -224,7 +225,9 @@
 		<menu label="Show Info" name="Display Info">
 			<menu_item_check label="Show Time" name="Show Time"/>
 			<menu_item_check label="Show Render Info" name="Show Render Info"/>
+			<menu_item_check label="Mostrar información de textura" name="Show Texture Info"/>
 			<menu_item_check label="Show Color Under Cursor" name="Show Color Under Cursor"/>
+			<menu_item_check label="Mostrar la memoria" name="Show Memory"/>
 			<menu_item_check label="Show Updates to Objects" name="Show Updates"/>
 		</menu>
 		<menu label="Force an Error" name="Force Errors">
@@ -242,6 +245,9 @@
 			<menu_item_check label="Randomize Framerate" name="Randomize Framerate"/>
 			<menu_item_check label="Frame Test" name="Frame Test"/>
 		</menu>
+		<menu label="Render Metadata" name="Render Metadata">
+			<menu_item_check label="Actualizar el tipo" name="Update Type"/>
+		</menu>
 		<menu label="Rendering" name="Rendering">
 			<menu_item_check label="Axes" name="Axes"/>
 			<menu_item_check label="Wireframe" name="Wireframe"/>
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
index 2bf36bb763fc00afdab6a8cc890bd4cc1d6a5142..1379f710c31fac20d37d369fca82784fc88b823b 100644
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -73,7 +73,7 @@ Detalles del error: la notificación de nombre &apos;[_NAME]&apos; no se ha enco
 	</notification>
 	<notification name="LoginFailedNoNetwork">
 		No se puede conectar con [SECOND_LIFE_GRID].
-&apos;[DIAGNOSTIC]&apos;
+    &apos;[DIAGNOSTIC]&apos;
 Asegúrate de que tu conexión a Internet está funcionando adecuadamente.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
@@ -330,13 +330,6 @@ Necesitas una cuenta para acceder a [SECOND_LIFE]. ¿Te gustaría crear una ahor
 	<notification name="InvalidCredentialFormat">
 		Escribe el nombre de usuario o el nombre y el apellido de tu avatar en el campo Nombre de usuario e inicia sesión otra vez.
 	</notification>
-	<notification name="AddClassified">
-		Los anuncios clasificados aparecen durante una semana en la sección &apos;Clasificados&apos; de la búsqueda y en [http://secondlife.com/community/classifieds secondlife.com].
-Rellena tu anuncio y pulsa &apos;Publicar...&apos; para añadirlo al directorio.
-Cuando pulses Publicar, se te preguntará por un precio a pagar.
-El pagar más hará que tu anuncio aparezca más arriba en la lista, y que también aparezca más arriba en la lista cuando la gente busque por palabras clave.
-		<usetemplate ignoretext="Cómo crear un anuncio clasificado nuevo." name="okcancelignore" notext="Cancelar" yestext="OK"/>
-	</notification>
 	<notification name="DeleteClassified">
 		¿Borrar el clasificado &apos;[NAME]&apos;?
 No se reembolsan las cuotas pagadas.
@@ -2851,9 +2844,6 @@ Si lo haces, todos los residentes que se unan posteriormente a la llamada tambi
 	<notification label="Explora el mundo" name="HintDestinationGuide">
 		La Guía de destinos contiene miles de nuevos lugares por descubrir. Selecciona una ubicación y elige Teleportarme para iniciar la exploración.
 	</notification>
-	<notification label="Cambiar de apariencia" name="HintAvatarPicker">
-		¿Te gustaría cambiar de apariencia? Haz clic en el botón que aparece a continuación para ver más avatares.
-	</notification>
 	<notification label="Panel lateral" name="HintSidePanel">
 		Accede de manera rápida a tu inventario, así como a tu ropa, los perfiles y el resto de la información disponible en el panel lateral.
 	</notification>
@@ -2891,6 +2881,38 @@ Si lo haces, todos los residentes que se unan posteriormente a la llamada tambi
 			<button name="cancel" text="Cancelar"/>
 		</form>
 	</notification>
+	<notification label="" name="ModeChange">
+		Para cambiar de modo tienes que salir y reiniciar.
+		<usetemplate name="okcancelbuttons" notext="No salir" yestext="Salir"/>
+	</notification>
+	<notification label="" name="NoClassifieds">
+		La creación y edición de clasificados sólo está disponible en el modo Avanzado. ¿Quieres salir y cambiar de modo? El selector de modo se encuentra en la pantalla de inicio de sesión.
+		<usetemplate name="okcancelbuttons" notext="No salir" yestext="Salir"/>
+	</notification>
+	<notification label="" name="NoGroupInfo">
+		La creación y edición de grupos sólo está disponible en el modo Avanzado. ¿Quieres salir y cambiar de modo? El selector de modo se encuentra en la pantalla de inicio de sesión.
+		<usetemplate name="okcancelbuttons" notext="No salir" yestext="Salir"/>
+	</notification>
+	<notification label="" name="NoPicks">
+		La creación y edición de Destacados sólo está disponible en el modo Avanzado. ¿Quieres salir y cambiar de modo? El selector de modo se encuentra en la pantalla de inicio de sesión.
+		<usetemplate name="okcancelbuttons" notext="No salir" yestext="Salir"/>
+	</notification>
+	<notification label="" name="NoWorldMap">
+		La visualización del mapa del mundo sólo está disponible en el modo Avanzado. ¿Quieres salir y cambiar de modo? El selector de modo se encuentra en la pantalla de inicio de sesión.
+		<usetemplate name="okcancelbuttons" notext="No salir" yestext="Salir"/>
+	</notification>
+	<notification label="" name="NoVoiceCall">
+		Las llamadas de voz sólo están disponibles en el modo Avanzado. ¿Quieres cerrar sesión y cambiar de modo?
+		<usetemplate name="okcancelbuttons" notext="No salir" yestext="Salir"/>
+	</notification>
+	<notification label="" name="NoAvatarShare">
+		Compartir sólo está disponible en el modo Avanzado. ¿Quieres cerrar sesión y cambiar de modo?
+		<usetemplate name="okcancelbuttons" notext="No salir" yestext="Salir"/>
+	</notification>
+	<notification label="" name="NoAvatarPay">
+		El pago a otros residentes sólo está disponible en el modo Avanzado. ¿Quieres cerrar sesión y cambiar de modo?
+		<usetemplate name="okcancelbuttons" notext="No salir" yestext="Salir"/>
+	</notification>
 	<global name="UnsupportedCPU">
 		- La velocidad de tu CPU no cumple los requerimientos mínimos.
 	</global>
diff --git a/indra/newview/skins/default/xui/es/panel_landmark_info.xml b/indra/newview/skins/default/xui/es/panel_landmark_info.xml
index 49a9f84cfe7cde9aa680d83353c7a58b872dd2ab..1a0ac3ba79c7d68c154105b63cde73a866a3f9af 100644
--- a/indra/newview/skins/default/xui/es/panel_landmark_info.xml
+++ b/indra/newview/skins/default/xui/es/panel_landmark_info.xml
@@ -19,7 +19,7 @@
 		[wkday,datetime,local][day,datetime,local] [mth,datetime,local] [year,datetime,local][hour,datetime,local]:[min,datetime,local]:[second,datetime,local]
 	</string>
 	<button name="back_btn" tool_tip="Atrás"/>
-	<text name="title" value="Añadir el perfil"/>
+	<text name="title" value="Perfil del lugar"/>
 	<scroll_container name="place_scroll">
 		<panel name="scrolling_panel">
 			<text name="maturity_value" value="desconocido"/>
diff --git a/indra/newview/skins/default/xui/es/panel_login.xml b/indra/newview/skins/default/xui/es/panel_login.xml
index ada964f33efc2f1432957824f9ba82b48180ac04..eee1844c46cde3ccb10509a4703feb724cc686ca 100644
--- a/indra/newview/skins/default/xui/es/panel_login.xml
+++ b/indra/newview/skins/default/xui/es/panel_login.xml
@@ -17,6 +17,13 @@
 			</text>
 			<check_box label="Recordar la contraseña" name="remember_check"/>
 			<button label="Iniciar sesión" name="connect_btn"/>
+			<text name="mode_selection_text">
+				Modo:
+			</text>
+			<combo_box name="mode_combo" tool_tip="Selecciona el modo. Elige Básico para una exploración rápida y fácil y para chatear. Elige Avanzado para tener acceso a más funciones.">
+				<combo_box.item label="Básico" name="Basic"/>
+				<combo_box.item label="Avanzado" name="Advanced"/>
+			</combo_box>
 			<text name="start_location_text">
 				Empezar en:
 			</text>
diff --git a/indra/newview/skins/default/xui/es/panel_nearby_media.xml b/indra/newview/skins/default/xui/es/panel_nearby_media.xml
index f65cae6e2065dc77bce148727ddc2e2b0b5a9457..8d4f9eda187507c25855d21ed6dacebb7c2df900 100644
--- a/indra/newview/skins/default/xui/es/panel_nearby_media.xml
+++ b/indra/newview/skins/default/xui/es/panel_nearby_media.xml
@@ -19,7 +19,7 @@
 		<button label="Parar todo" name="all_nearby_media_disable_btn" tool_tip="Apagar todos los media cercanos"/>
 		<button label="Iniciar todo" name="all_nearby_media_enable_btn" tool_tip="Encender todos los media cercanos"/>
 		<button name="open_prefs_btn" tool_tip="Abrir las preferencias de los media"/>
-		<button label="Más &gt;&gt;" label_selected="Menos &lt;&lt;" name="more_btn" tool_tip="Controles avanzados"/>
+		<button label="Más &gt;&gt;" label_selected="&lt;&lt; Menos" name="more_btn" tool_tip="Controles avanzados"/>
 		<button label="Más &gt;&gt;" label_selected="Menos &lt;&lt;" name="less_btn" tool_tip="Controles avanzados"/>
 	</panel>
 	<panel name="nearby_media_panel">
diff --git a/indra/newview/skins/default/xui/es/panel_people.xml b/indra/newview/skins/default/xui/es/panel_people.xml
index d0c80ebae531a9b56a4f283883b4ccbfca3d7cf2..01149e412ddcb63ea32684d84ea5152f4fb89abf 100644
--- a/indra/newview/skins/default/xui/es/panel_people.xml
+++ b/indra/newview/skins/default/xui/es/panel_people.xml
@@ -18,6 +18,8 @@
 	<string name="groups_filter_label" value="Filtrar a los grupos"/>
 	<string name="no_filtered_groups_msg" value="¿No encuentras lo que buscas? Prueba con [secondlife:///app/search/groups/[SEARCH_TERM] Buscar]."/>
 	<string name="no_groups_msg" value="¿Buscas grupos en que participar? Prueba la [secondlife:///app/search/groups Búsqueda]."/>
+	<string name="MiniMapToolTipMsg" value="[REGION](Pulsa dos veces para abrir el mapa, pulsa mayús y arrastra para obtener una panorámica)"/>
+	<string name="AltMiniMapToolTipMsg" value="[REGION](Pulsa dos veces para teleportarte, pulsa mayús y arrastra para obtener una panorámica)"/>
 	<filter_editor label="Filtrar" name="filter_input"/>
 	<tab_container name="tabs">
 		<panel label="CERCANA" name="nearby_panel">
diff --git a/indra/newview/skins/default/xui/es/panel_place_profile.xml b/indra/newview/skins/default/xui/es/panel_place_profile.xml
index 524ba2253b6fddec01442812752e196178177498..3c363859a40754b7f5ca4b0d723963fc4616e417 100644
--- a/indra/newview/skins/default/xui/es/panel_place_profile.xml
+++ b/indra/newview/skins/default/xui/es/panel_place_profile.xml
@@ -5,7 +5,7 @@
 	<string name="anyone" value="Cualquiera"/>
 	<string name="available" value="disponible"/>
 	<string name="allocated" value="asignados"/>
-	<string name="title_place" value="Añadir el perfil"/>
+	<string name="title_place" value="Perfil del lugar"/>
 	<string name="title_teleport_history" value="Historial de teleportes"/>
 	<string name="not_available" value="(No disp.)"/>
 	<string name="unknown" value="(desconocido)"/>
@@ -42,7 +42,7 @@
 		[wkday,datetime,local][day,datetime,local] [mth,datetime,local] [year,datetime,local][hour,datetime,local]:[min,datetime,local]:[second,datetime,local]
 	</string>
 	<button name="back_btn" tool_tip="Atrás"/>
-	<text name="title" value="Añadir el perfil"/>
+	<text name="title" value="Perfil del lugar"/>
 	<scroll_container name="place_scroll">
 		<panel name="scrolling_panel">
 			<text name="owner_label" value="Propietario:"/>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
index 67f9a929f68c2b58076977788ed8511386d86fb5..aba85f9ff1a37c2ee454995a49ee7d4246b5eccc 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
@@ -27,9 +27,10 @@
 	</text>
 	<check_box label="Chats de grupo" name="EnableGroupChatPopups" tool_tip="Activa esta casilla para ver una ventana emergente cada vez que recibas un mensaje de un grupo de chat"/>
 	<check_box label="Chats de MI" name="EnableIMChatPopups" tool_tip="Activa esta casilla para ver una ventana emergente cada vez que recibas un mensaje instantáneo"/>
-	<spinner label="Duración de los interlocutores favoritos en los chats:" name="nearby_toasts_lifetime"/>
-	<spinner label="Tiempo restante de los interlocutores favoritos en los chats:" name="nearby_toasts_fadingtime"/>
-	<check_box label="Utiliza la herramienta de traducción automática mientras utilizas el chat (mediante Google)" name="translate_chat_checkbox"/>
+	<spinner label="Duración de los interlocutores favoritos:" name="nearby_toasts_lifetime"/>
+	<spinner label="Tiempo de los otros interlocutores:" name="nearby_toasts_fadingtime"/>
+	<check_box name="translate_chat_checkbox"/>
+	<text name="translate_chb_label" >Usar la traducción automática (con Google) en el chat</text>
 	<text name="translate_language_text">
 		Traducir el chat al:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_general.xml b/indra/newview/skins/default/xui/es/panel_preferences_general.xml
index 91cf9524a3639b459044c78c5090320aa8fbd545..790c7be5819ca4eef20dd1a9eef09ddf4710855b 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_general.xml
@@ -55,7 +55,7 @@
 	</text>
 	<radio_group name="inworld_typing_preference">
 		<radio_item label="Inicia el chat local" name="radio_start_chat" value="1"/>
-		<radio_item label="Se verá afectado el movimiento (por ejemplo, mediante las teclas WASD)" name="radio_move" value="0"/>
+		<radio_item label="Afecta al movimiento (por ejemplo, en las teclas WASD)" name="radio_move" value="0"/>
 	</radio_group>
 	<text name="title_afk_text">
 		Ausente tras:
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml
index 5eaa345c988e2e1df63878b5895486f8ae3803ad..adc0862cf1dfbd3edd148a9db585bf6677678615 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml
@@ -11,7 +11,7 @@
 	<check_box label="Sólo saben si estoy conectado mis amigos y grupos" name="online_visibility"/>
 	<check_box label="Sólo pueden llamarme o mandarme un MI mis amigos y grupos" name="voice_call_friends_only_check"/>
 	<check_box label="Desconectar el micrófono cuando finalicen las llamadas" name="auto_disengage_mic_check"/>
-	<check_box label="Mostrar mis Hitos favoritos en Inicio de sesión (mediante el menú desplegable &quot;Empezar en&quot;)" name="favorites_on_login_check"/>
+	<check_box label="Mostrar mis Hitos favoritos al Inicio de sesión (menú desplegable &quot;Empezar en&quot;)" name="favorites_on_login_check"/>
 	<text name="Logs:">
 		Registros de chat:
 	</text>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml
index 68484645b7ed917043b7f9e09bde7dde8f2042b8..9b453fd807f98ace9c4c151b1767c8fa7422bbe4 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml
@@ -32,7 +32,7 @@
 	<check_box initial_value="true" label="Activar plugins" name="browser_plugins_enabled"/>
 	<check_box initial_value="true" label="Aceptar las &apos;cookies&apos;" name="cookies_enabled"/>
 	<check_box initial_value="true" label="Activar Javascript" name="browser_javascript_enabled"/>
-	<check_box initial_value="falso" label="Permitir ventanas emergentes de navegadores de medios" name="media_popup_enabled"/>
+	<check_box initial_value="falso" label="Permitir las ventanas emergentes en el navegador" name="media_popup_enabled"/>
 	<check_box initial_value="false" label="Activar web proxy" name="web_proxy_enabled"/>
 	<text name="Proxy location">
 		Localización del proxy:
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_sound.xml b/indra/newview/skins/default/xui/es/panel_preferences_sound.xml
index 6c4ab0f14f41ec81c1659cfcd58517d4f069ea61..2bc82307a8f26eaf963f1cf061b3719626d05ae8 100644
--- a/indra/newview/skins/default/xui/es/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_sound.xml
@@ -4,12 +4,13 @@
 		Botón medio del ratón
 	</panel.string>
 	<slider label="Volumen general" name="System Volume"/>
-	<check_box initial_value="true" label="Silenciar cuando minimice" name="mute_when_minimized"/>
+	<check_box initial_value="true" name="mute_when_minimized"/>
+	<text name="mute_chb_label">Silenciar cuando minimice</text>
 	<slider label="Botones" name="UI Volume"/>
 	<slider label="Ambiental" name="Wind Volume"/>
 	<slider label="Efectos de sonido" name="SFX Volume"/>
 	<slider label="Música en streaming" name="Music Volume"/>
-	<check_box label="Activada" name="enable_music"/>
+	<check_box label="Activados" name="enable_music"/>
 	<slider label="Multimedia" name="Media Volume"/>
 	<check_box label="Activada" name="enable_media"/>
 	<slider label="Chat de voz" name="Voice Volume"/>
diff --git a/indra/newview/skins/default/xui/es/panel_profile.xml b/indra/newview/skins/default/xui/es/panel_profile.xml
index 339a1f236bab167d78a4697812926f14dcd8ccae..334c0541af9bc7d65128a5d0f8bd1440d9597f0b 100644
--- a/indra/newview/skins/default/xui/es/panel_profile.xml
+++ b/indra/newview/skins/default/xui/es/panel_profile.xml
@@ -16,6 +16,12 @@
 	<string name="RegisterDateFormat">
 		[REG_DATE] ([AGE])
 	</string>
+	<string name="name_text_args">
+		[NAME]
+	</string>
+	<string name="display_name_text_args">
+		[DISPLAY_NAME]
+	</string>
 	<layout_stack name="layout">
 		<layout_panel name="profile_stack">
 			<scroll_container name="profile_scroll">
@@ -30,7 +36,7 @@
 					<text name="title_acc_status_text" value="Estado de la cuenta:"/>
 					<text name="title_partner_text" value="Compañero/a:"/>
 					<panel name="partner_data_panel">
-						<name_box initial_value="(obteniendo)" name="partner_text"/>
+						<text initial_value="(obteniendo)" name="partner_text"/>
 					</panel>
 					<text name="title_groups_text" value="Grupos:"/>
 				</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_script_ed.xml b/indra/newview/skins/default/xui/es/panel_script_ed.xml
index 5be25a286da070675bce79ead284e3773f5ce1ff..46952c6974ff27ae8ef164e52ab031506ff49219 100644
--- a/indra/newview/skins/default/xui/es/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/es/panel_script_ed.xml
@@ -15,6 +15,9 @@
 	<panel.string name="Title">
 		Script: [NAME]
 	</panel.string>
+	<panel.string name="external_editor_not_set">
+		Puedes seleccionar un editor configurando la variable de entorno LL_SCRIPT_EDITOR o mediante la configuración de ExternalEditor.
+	</panel.string>
 	<menu_bar name="script_menu">
 		<menu label="Archivo" name="File">
 			<menu_item_call label="Guardar" name="Save"/>
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
index df40a2b6b4374ef5b08377fb967af733ed64e5e0..cd1fb767c860adcf05f895d4cb58d0a3a60b6829 100644
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -1040,7 +1040,7 @@
 	</string>
 	<string name="WornOnAttachmentPoint" value="(lo llevas en: [ATTACHMENT_POINT])"/>
 	<string name="ActiveGesture" value="[GESLABEL] (activo)"/>
-	<string name="Chat" value="Chat :"/>
+	<string name="Chat Message" value="Chat:"/>
 	<string name="Sound" value="Sonido :"/>
 	<string name="Wait" value="--- Espera :"/>
 	<string name="AnimFlagStop" value="Parar la animación:"/>
@@ -1822,12 +1822,6 @@ Se esperaba .wav, .tga, .bmp, .jpg, .jpeg, o .bvh
 	<string name="accel-win-shift">
 		Mayús+
 	</string>
-	<string name="Esc">
-		Esc
-	</string>
-	<string name="Home">
-		Base
-	</string>
 	<string name="FileSaved">
 		Archivo guardado
 	</string>
@@ -1945,6 +1939,9 @@ Se esperaba .wav, .tga, .bmp, .jpg, .jpeg, o .bvh
 	<string name="Other">
 		Otra
 	</string>
+	<string name="Rental">
+		Terreno en alquiler
+	</string>
 	<string name="Any">
 		Cualquiera
 	</string>
@@ -3864,7 +3861,7 @@ Denuncia de infracción
 	<string name="Notices">
 		Avisos
 	</string>
-	<string name="Chat">
+	<string name="Chat" value="Chat :">
 		Chat
 	</string>
 	<string name="DeleteItems">
@@ -3876,4 +3873,348 @@ Denuncia de infracción
 	<string name="EmptyOutfitText">
 		No hay elementos en este vestuario
 	</string>
+	<string name="ExternalEditorNotSet">
+		Selecciona un editor mediante la configuración de ExternalEditor.
+	</string>
+	<string name="ExternalEditorNotFound">
+		No se encuentra el editor externo especificado.
+Inténtalo incluyendo la ruta de acceso al editor entre comillas
+(por ejemplo, &quot;/ruta a mi/editor&quot; &quot;%s&quot;).
+	</string>
+	<string name="ExternalEditorCommandParseError">
+		Error al analizar el comando de editor externo.
+	</string>
+	<string name="ExternalEditorFailedToRun">
+		Error al ejecutar el editor externo.
+	</string>
+	<string name="Esc">
+		Esc
+	</string>
+	<string name="Space">
+		Space
+	</string>
+	<string name="Enter">
+		Enter
+	</string>
+	<string name="Tab">
+		Tab
+	</string>
+	<string name="Ins">
+		Ins
+	</string>
+	<string name="Del">
+		Del
+	</string>
+	<string name="Backsp">
+		Backsp
+	</string>
+	<string name="Shift">
+		Shift
+	</string>
+	<string name="Ctrl">
+		Ctrl
+	</string>
+	<string name="Alt">
+		Alt
+	</string>
+	<string name="CapsLock">
+		CapsLock
+	</string>
+	<string name="Home">
+		Base
+	</string>
+	<string name="End">
+		End
+	</string>
+	<string name="PgUp">
+		PgUp
+	</string>
+	<string name="PgDn">
+		PgDn
+	</string>
+	<string name="F1">
+		F1
+	</string>
+	<string name="F2">
+		F2
+	</string>
+	<string name="F3">
+		F3
+	</string>
+	<string name="F4">
+		F4
+	</string>
+	<string name="F5">
+		F5
+	</string>
+	<string name="F6">
+		F6
+	</string>
+	<string name="F7">
+		F7
+	</string>
+	<string name="F8">
+		F8
+	</string>
+	<string name="F9">
+		F9
+	</string>
+	<string name="F10">
+		F10
+	</string>
+	<string name="F11">
+		F11
+	</string>
+	<string name="F12">
+		F12
+	</string>
+	<string name="Add">
+		Añadir
+	</string>
+	<string name="Subtract">
+		Restar
+	</string>
+	<string name="Multiply">
+		Multiplicar
+	</string>
+	<string name="Divide">
+		Dividir
+	</string>
+	<string name="PAD_DIVIDE">
+		PAD_DIVIDE
+	</string>
+	<string name="PAD_LEFT">
+		PAD_LEFT
+	</string>
+	<string name="PAD_RIGHT">
+		PAD_RIGHT
+	</string>
+	<string name="PAD_DOWN">
+		PAD_DOWN
+	</string>
+	<string name="PAD_UP">
+		PAD_UP
+	</string>
+	<string name="PAD_HOME">
+		PAD_HOME
+	</string>
+	<string name="PAD_END">
+		PAD_END
+	</string>
+	<string name="PAD_PGUP">
+		PAD_PGUP
+	</string>
+	<string name="PAD_PGDN">
+		PAD_PGDN
+	</string>
+	<string name="PAD_CENTER">
+		PAD_CENTER
+	</string>
+	<string name="PAD_INS">
+		PAD_INS
+	</string>
+	<string name="PAD_DEL">
+		PAD_DEL
+	</string>
+	<string name="PAD_Enter">
+		PAD_Enter
+	</string>
+	<string name="PAD_BUTTON0">
+		PAD_BUTTON0
+	</string>
+	<string name="PAD_BUTTON1">
+		PAD_BUTTON1
+	</string>
+	<string name="PAD_BUTTON2">
+		PAD_BUTTON2
+	</string>
+	<string name="PAD_BUTTON3">
+		PAD_BUTTON3
+	</string>
+	<string name="PAD_BUTTON4">
+		PAD_BUTTON4
+	</string>
+	<string name="PAD_BUTTON5">
+		PAD_BUTTON5
+	</string>
+	<string name="PAD_BUTTON6">
+		PAD_BUTTON6
+	</string>
+	<string name="PAD_BUTTON7">
+		PAD_BUTTON7
+	</string>
+	<string name="PAD_BUTTON8">
+		PAD_BUTTON8
+	</string>
+	<string name="PAD_BUTTON9">
+		PAD_BUTTON9
+	</string>
+	<string name="PAD_BUTTON10">
+		PAD_BUTTON10
+	</string>
+	<string name="PAD_BUTTON11">
+		PAD_BUTTON11
+	</string>
+	<string name="PAD_BUTTON12">
+		PAD_BUTTON12
+	</string>
+	<string name="PAD_BUTTON13">
+		PAD_BUTTON13
+	</string>
+	<string name="PAD_BUTTON14">
+		PAD_BUTTON14
+	</string>
+	<string name="PAD_BUTTON15">
+		PAD_BUTTON15
+	</string>
+	<string name="-">
+		-
+	</string>
+	<string name="=">
+		=
+	</string>
+	<string name="`">
+		`
+	</string>
+	<string name=";">
+		;
+	</string>
+	<string name="[">
+		[
+	</string>
+	<string name="]">
+		]
+	</string>
+	<string name="\">
+		\
+	</string>
+	<string name="0">
+		0
+	</string>
+	<string name="1">
+		1
+	</string>
+	<string name="2">
+		2
+	</string>
+	<string name="3">
+		3
+	</string>
+	<string name="4">
+		4
+	</string>
+	<string name="5">
+		5
+	</string>
+	<string name="6">
+		6
+	</string>
+	<string name="7">
+		7
+	</string>
+	<string name="8">
+		8
+	</string>
+	<string name="9">
+		9
+	</string>
+	<string name="A">
+		A
+	</string>
+	<string name="B">
+		B
+	</string>
+	<string name="C">
+		C
+	</string>
+	<string name="D">
+		D
+	</string>
+	<string name="E">
+		E
+	</string>
+	<string name="F">
+		F
+	</string>
+	<string name="G">
+		G
+	</string>
+	<string name="H">
+		H
+	</string>
+	<string name="I">
+		I
+	</string>
+	<string name="J">
+		J
+	</string>
+	<string name="K">
+		K
+	</string>
+	<string name="L">
+		L
+	</string>
+	<string name="M">
+		M
+	</string>
+	<string name="N">
+		N
+	</string>
+	<string name="O">
+		O
+	</string>
+	<string name="P">
+		P
+	</string>
+	<string name="Q">
+		Q
+	</string>
+	<string name="R">
+		R
+	</string>
+	<string name="S">
+		S
+	</string>
+	<string name="T">
+		T
+	</string>
+	<string name="U">
+		U
+	</string>
+	<string name="V">
+		V
+	</string>
+	<string name="W">
+		W
+	</string>
+	<string name="X">
+		X
+	</string>
+	<string name="Y">
+		Y
+	</string>
+	<string name="Z">
+		Z
+	</string>
+	<string name="BeaconParticle">
+		Viendo balizas de partículas (azules)
+	</string>
+	<string name="BeaconPhysical">
+		Viendo balizas de objetos materiales (verdes)
+	</string>
+	<string name="BeaconScripted">
+		Viendo balizas de objetos con script (rojas)
+	</string>
+	<string name="BeaconScriptedTouch">
+		Viendo el objeto con script con balizas de función táctil (rojas)
+	</string>
+	<string name="BeaconSound">
+		Viendo balizas de sonido (amarillas)
+	</string>
+	<string name="BeaconMedia">
+		Viendo balizas de medios (blancas)
+	</string>
+	<string name="ParticleHiding">
+		Ocultando las partículas
+	</string>
 </strings>
diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml
index 6e6409725fd97a2e0711325363a8f99af250bab2..a33c0344f73b546123a70504915c218eade294da 100644
--- a/indra/newview/skins/default/xui/fr/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/fr/floater_about_land.xml
@@ -248,7 +248,7 @@ ou divisé.
 			<text name="group_objects_text">
 				[COUNT]
 			</text>
-			<button label="Afficher" label_selected="Afficher" name="ShowGroup" />
+			<button label="Afficher" label_selected="Afficher" name="ShowGroup"/>
 			<button label="Retour" label_selected="Renvoyer..." name="ReturnGroup..." tool_tip="Renvoyer les objets à leurs propriétaires."/>
 			<text name="Owned by others:">
 				Appartenant à d&apos;autres :
@@ -336,7 +336,7 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche.
 				Options du terrain :
 			</text>
 			<check_box label="Sécurisé (pas de dégâts)" name="check safe" tool_tip="Si cette option est cochée, le terrain est sécurisé et il n&apos;y pas de risques de dommages causés par des combats. Si elle est décochée, des dommages causés par les combats peuvent avoir lieu."/>
-			<check_box  label="Pas de bousculades" name="PushRestrictCheck" tool_tip="Empêche l&apos;utilisation de scripts causant des bousculades. Cette option est utile pour empêcher les comportements abusifs sur votre terrain."/>
+			<check_box label="Pas de bousculades" name="PushRestrictCheck" tool_tip="Empêche l&apos;utilisation de scripts causant des bousculades. Cette option est utile pour empêcher les comportements abusifs sur votre terrain."/>
 			<check_box label="Afficher le lieu dans la recherche (30 L$/semaine)" name="ShowDirectoryCheck" tool_tip="Afficher la parcelle dans les résultats de recherche"/>
 			<combo_box name="land category with adult">
 				<combo_box.item label="Toutes catégories" name="item0"/>
@@ -351,6 +351,7 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche.
 				<combo_box.item label="Parcs et Nature" name="item9"/>
 				<combo_box.item label="Résidentiel" name="item10"/>
 				<combo_box.item label="Shopping" name="item11"/>
+				<combo_box.item label="Location" name="item13"/>
 				<combo_box.item label="Autre" name="item12"/>
 			</combo_box>
 			<combo_box name="land category">
@@ -365,6 +366,7 @@ Seules les parcelles de grande taille peuvent apparaître dans la recherche.
 				<combo_box.item label="Parcs et Nature" name="item9"/>
 				<combo_box.item label="Résidentiel" name="item10"/>
 				<combo_box.item label="Shopping" name="item11"/>
+				<combo_box.item label="Location" name="item13"/>
 				<combo_box.item label="Autre" name="item12"/>
 			</combo_box>
 			<check_box label="Contenu Modéré" name="MatureCheck" tool_tip=""/>
@@ -444,7 +446,7 @@ musique :
 				(défini par le domaine
 			</panel.string>
 			<panel.string name="allow_public_access">
-				Autoriser l&apos;accès public ([MATURITY])
+				Autoriser l&apos;accès public ([MATURITY]) (Remarque : des lignes d&apos;interdiction seront créées si cette case n&apos;est pas cochée)
 			</panel.string>
 			<panel.string name="estate_override">
 				Au moins une de ces options est définie au niveau du domaine.
diff --git a/indra/newview/skins/default/xui/fr/floater_map.xml b/indra/newview/skins/default/xui/fr/floater_map.xml
index 04afe89c7b4f3ceae0df5ca2552b6b23a9e17942..8675fb8ef9a155a08191ba720b59c2c7e8236acf 100644
--- a/indra/newview/skins/default/xui/fr/floater_map.xml
+++ b/indra/newview/skins/default/xui/fr/floater_map.xml
@@ -1,32 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="Map" title="">
-	<floater.string name="mini_map_north">
-		N
-	</floater.string>
-	<floater.string name="mini_map_east">
-		E
-	</floater.string>
-	<floater.string name="mini_map_west">
-		O
-	</floater.string>
-	<floater.string name="mini_map_south">
-		S
-	</floater.string>
-	<floater.string name="mini_map_southeast">
-		SE
-	</floater.string>
-	<floater.string name="mini_map_northeast">
-		NE
-	</floater.string>
-	<floater.string name="mini_map_southwest">
-		SO
-	</floater.string>
-	<floater.string name="mini_map_northwest">
-		NO
-	</floater.string>
 	<floater.string name="ToolTipMsg">
 		[REGION](Carte : double-clic ; Panoramique : Maj + faire glisser)
 	</floater.string>
+	<floater.string name="AltToolTipMsg">
+		[REGION](Téléportation : double-clic ; Panoramique : Maj + faire glisser)
+	</floater.string>
 	<floater.string name="mini_map_caption">
 		MINI-CARTE
 	</floater.string>
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
index 01274b4cbcc590ab4992c73b4a630f9fd0c1e8e9..fd72e6ac1531c137063257fb68f0df3f1cec53ef 100644
--- a/indra/newview/skins/default/xui/fr/floater_tools.xml
+++ b/indra/newview/skins/default/xui/fr/floater_tools.xml
@@ -64,6 +64,8 @@
 		<radio_item label="Choisir une face" name="radio select face"/>
 	</radio_group>
 	<check_box label="Modification liée" name="checkbox edit linked parts"/>
+	<button label="Lien" name="link_btn"/>
+	<button label="Annuler le lien" name="unlink_btn"/>
 	<text name="RenderingCost" tool_tip="Affiche le coût du rendu calculé pour cet objet">
 		þ : [COUNT]
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/menu_attachment_self.xml b/indra/newview/skins/default/xui/fr/menu_attachment_self.xml
index 78198fb5a8f6e2a8c2cec399b0aba8abcc50aebc..6af2064e440d0d397986dad0de776b590a285531 100644
--- a/indra/newview/skins/default/xui/fr/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/fr/menu_attachment_self.xml
@@ -5,7 +5,7 @@
 	<menu_item_call label="Détacher" name="Detach"/>
 	<menu_item_call label="M&apos;asseoir" name="Sit Down Here"/>
 	<menu_item_call label="Me lever" name="Stand Up"/>
-	<menu_item_call label="Changer de tenue" name="Change Outfit"/>
+	<menu_item_call label="Mon apparence" name="Change Outfit"/>
 	<menu_item_call label="Modifier ma tenue" name="Edit Outfit"/>
 	<menu_item_call label="Modifier ma silhouette" name="Edit My Shape"/>
 	<menu_item_call label="Mes amis" name="Friends..."/>
diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
index c7ee2e9f883428c773c5553e1b7bcb53e165297d..21528cd43b5cce2e6fad10f45ce1d38a632d1864 100644
--- a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
@@ -21,7 +21,7 @@
 		<context_menu label="Détacher" name="Object Detach"/>
 		<menu_item_call label="Tout détacher" name="Detach All"/>
 	</context_menu>
-	<menu_item_call label="Changer de tenue" name="Chenge Outfit"/>
+	<menu_item_call label="Mon apparence" name="Chenge Outfit"/>
 	<menu_item_call label="Modifier ma tenue" name="Edit Outfit"/>
 	<menu_item_call label="Modifier ma silhouette" name="Edit My Shape"/>
 	<menu_item_call label="Mes amis" name="Friends..."/>
diff --git a/indra/newview/skins/default/xui/fr/menu_bottomtray.xml b/indra/newview/skins/default/xui/fr/menu_bottomtray.xml
index bfdc89c5bbcf85b5ab9d0dffefd2fec7dcacfbca..ddaea517fce639e6c34e88b510afb61829e1b5cf 100644
--- a/indra/newview/skins/default/xui/fr/menu_bottomtray.xml
+++ b/indra/newview/skins/default/xui/fr/menu_bottomtray.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="hide_camera_move_controls_menu">
+	<menu_item_check label="Voix activée" name="EnableVoiceChat"/>
 	<menu_item_check label="Bouton Geste" name="ShowGestureButton"/>
 	<menu_item_check label="Bouton Bouger" name="ShowMoveButton"/>
 	<menu_item_check label="Bouton Affichage" name="ShowCameraButton"/>
 	<menu_item_check label="Bouton Photo" name="ShowSnapshotButton"/>
-	<menu_item_check label="Bouton Panneau latéral" name="ShowSidebarButton"/>
 	<menu_item_check label="Bouton Construire" name="ShowBuildButton"/>
 	<menu_item_check label="Bouton Rechercher" name="ShowSearchButton"/>
 	<menu_item_check label="Bouton Carte" name="ShowWorldMapButton"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml
index 17254ff325f1802100a79d37524276917b93acb5..53f22bb44a43420cf8e64ba7edba45506adc72fe 100644
--- a/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<menu name="Gear Menu">
+<toggleable_menu name="Gear Menu">
 	<menu_item_call label="Voir le profil" name="view_profile"/>
 	<menu_item_call label="Devenir amis" name="add_friend"/>
 	<menu_item_call label="IM" name="im"/>
@@ -11,9 +11,11 @@
 	<menu_item_call label="Signaler" name="report"/>
 	<menu_item_call label="Figer" name="freeze"/>
 	<menu_item_call label="Expulser" name="eject"/>
+	<menu_item_call label="Éjecter" name="kick"/>
+	<menu_item_call label="Représentant de l&apos;Assistance client" name="csr"/>
 	<menu_item_call label="Déboguer les textures" name="debug"/>
 	<menu_item_call label="Situer sur la carte" name="find_on_map"/>
 	<menu_item_call label="Zoomer en avant" name="zoom_in"/>
 	<menu_item_call label="Payer" name="pay"/>
 	<menu_item_call label="Partager" name="share"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml
index 3bc164788a6e193b8189ea20eada2aabafa93701..ac70df472df969c40c35d2b307b1eeddf52119e8 100644
--- a/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml
@@ -1,10 +1,31 @@
-<?xml version="1.0" encoding="utf-8"?>
-<menu name="Gear Menu">
-	<menu_item_call label="M&apos;asseoir" name="sit_down_here"/>
-	<menu_item_call label="Me lever" name="stand_up"/>
-	<menu_item_call label="Changer de tenue" name="change_outfit"/>
-	<menu_item_call label="Mon profil" name="my_profile"/>
-	<menu_item_call label="Mes amis" name="my_friends"/>
-	<menu_item_call label="Mes groupes" name="my_groups"/>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Gear Menu">
+	<menu_item_call label="M&apos;asseoir" name="Sit Down Here"/>
+	<menu_item_call label="Me lever" name="Stand Up"/>
+	<context_menu label="Enlever" name="Take Off &gt;">
+		<context_menu label="Habits" name="Clothes &gt;">
+			<menu_item_call label="Chemise" name="Shirt"/>
+			<menu_item_call label="Pantalon" name="Pants"/>
+			<menu_item_call label="Jupe" name="Skirt"/>
+			<menu_item_call label="Chaussures" name="Shoes"/>
+			<menu_item_call label="Chaussettes" name="Socks"/>
+			<menu_item_call label="Veste" name="Jacket"/>
+			<menu_item_call label="Gants" name="Gloves"/>
+			<menu_item_call label="Débardeur" name="Self Undershirt"/>
+			<menu_item_call label="Caleçon" name="Self Underpants"/>
+			<menu_item_call label="Tatouage" name="Self Tattoo"/>
+			<menu_item_call label="Alpha" name="Self Alpha"/>
+			<menu_item_call label="Tous les habits" name="All Clothes"/>
+		</context_menu>
+		<context_menu label="HUD" name="Object Detach HUD"/>
+		<context_menu label="Détacher" name="Object Detach"/>
+		<menu_item_call label="Tout détacher" name="Detach All"/>
+	</context_menu>
+	<menu_item_call label="Changer de tenue" name="Chenge Outfit"/>
+	<menu_item_call label="Modifier ma tenue" name="Edit Outfit"/>
+	<menu_item_call label="Modifier ma silhouette" name="Edit My Shape"/>
+	<menu_item_call label="Mes amis" name="Friends..."/>
+	<menu_item_call label="Mes groupes" name="Groups..."/>
+	<menu_item_call label="Mon profil" name="Profile..."/>
 	<menu_item_call label="Déboguer les textures" name="Debug..."/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/fr/menu_inventory_gear_default.xml
index f28918ae1421eebbac64771c05266973a8ed74f3..364872c875d2ec89e04f3e06031767d0474292b2 100644
--- a/indra/newview/skins/default/xui/fr/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/fr/menu_inventory_gear_default.xml
@@ -3,6 +3,7 @@
 	<menu_item_call label="Nouvelle fenêtre d&apos;inventaire" name="new_window"/>
 	<menu_item_check label="Trier par nom" name="sort_by_name"/>
 	<menu_item_check label="Trier en commençant par le plus récent" name="sort_by_recent"/>
+	<menu_item_check label="Toujours trier les dossiers par nom" name="sort_folders_by_name"/>
 	<menu_item_check label="Dossiers système en premier" name="sort_system_folders_to_top"/>
 	<menu_item_call label="Afficher les filtres" name="show_filters"/>
 	<menu_item_call label="Réinitialiser les filtres" name="reset_filters"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_object.xml b/indra/newview/skins/default/xui/fr/menu_object.xml
index a50a9df4b10dd5b88847aaa2fbac7204b603e53c..c6db48a31cfa1ad66c5f0152d0c278bcecce590b 100644
--- a/indra/newview/skins/default/xui/fr/menu_object.xml
+++ b/indra/newview/skins/default/xui/fr/menu_object.xml
@@ -16,14 +16,14 @@
 		<context_menu label="Attacher" name="Object Attach"/>
 		<context_menu label="Attacher HUD" name="Object Attach HUD"/>
 	</context_menu>
-	<context_menu label="Supprimer" name="Remove">
+	<context_menu label="Gérer" name="Remove">
 		<menu_item_call label="Signaler une infraction" name="Report Abuse..."/>
 		<menu_item_call label="Ignorer" name="Object Mute"/>
 		<menu_item_call label="Retour" name="Return..."/>
-		<menu_item_call label="Supprimer" name="Delete"/>
 	</context_menu>
 	<menu_item_call label="Prendre" name="Pie Object Take"/>
 	<menu_item_call label="Prendre une copie" name="Take Copy"/>
 	<menu_item_call label="Payer" name="Pay..."/>
 	<menu_item_call label="Acheter" name="Buy..."/>
+	<menu_item_call label="Supprimer" name="Delete"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/fr/menu_places_gear_folder.xml
index 3570bdec7f4b355fb4baceccfc4ed4a3f7921eeb..3fdf3bf3c495f31ba2ddc2b47f6a23de6180674e 100644
--- a/indra/newview/skins/default/xui/fr/menu_places_gear_folder.xml
+++ b/indra/newview/skins/default/xui/fr/menu_places_gear_folder.xml
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_folder_gear">
+<toggleable_menu name="menu_folder_gear">
 	<menu_item_call label="Ajouter un repère" name="add_landmark"/>
 	<menu_item_call label="Ajouter un dossier" name="add_folder"/>
+	<menu_item_call label="Restaurer l&apos;article" name="restore_item"/>
 	<menu_item_call label="Couper" name="cut"/>
 	<menu_item_call label="Copier" name="copy_folder"/>
 	<menu_item_call label="Coller" name="paste"/>
@@ -12,4 +13,4 @@
 	<menu_item_call label="Développer tous les dossiers" name="expand_all"/>
 	<menu_item_call label="Réduire tous les dossiers" name="collapse_all"/>
 	<menu_item_check label="Trier par date" name="sort_by_date"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/fr/menu_places_gear_landmark.xml
index 5491c1b3fcf7803e1073d1dd90eb68b5d039a7c9..b48f6ea693a81f7dc4ded91ba27b7954e66b58d6 100644
--- a/indra/newview/skins/default/xui/fr/menu_places_gear_landmark.xml
+++ b/indra/newview/skins/default/xui/fr/menu_places_gear_landmark.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_ladmark_gear">
+<toggleable_menu name="menu_ladmark_gear">
 	<menu_item_call label="Téléporter" name="teleport"/>
 	<menu_item_call label="Plus d&apos;informations" name="more_info"/>
 	<menu_item_call label="Voir sur la carte" name="show_on_map"/>
 	<menu_item_call label="Ajouter un repère" name="add_landmark"/>
 	<menu_item_call label="Ajouter un dossier" name="add_folder"/>
+	<menu_item_call label="Restaurer l&apos;article" name="restore_item"/>
 	<menu_item_call label="Couper" name="cut"/>
 	<menu_item_call label="Copier le repère" name="copy_landmark"/>
 	<menu_item_call label="Copier la SLurl" name="copy_slurl"/>
@@ -15,4 +16,4 @@
 	<menu_item_call label="Réduire tous les dossiers" name="collapse_all"/>
 	<menu_item_check label="Trier par date" name="sort_by_date"/>
 	<menu_item_call label="Créer un favori" name="create_pick"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
index 65a00c2e6c61d56e38ccc0176562d88dd8aabed1..ee1ab8c60181afd649de7f21dfd6570fd816cd0b 100644
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -7,7 +7,7 @@
 		</menu_item_call>
 		<menu_item_call label="Acheter des L$" name="Buy and Sell L$"/>
 		<menu_item_call label="Mon profil" name="Profile"/>
-		<menu_item_call label="Changer de tenue" name="ChangeOutfit"/>
+		<menu_item_call label="Mon apparence" name="ChangeOutfit"/>
 		<menu_item_check label="Mon inventaire" name="Inventory"/>
 		<menu_item_check label="Mon inventaire" name="ShowSidetrayInventory"/>
 		<menu_item_check label="Mes gestes" name="Gestures"/>
@@ -35,6 +35,7 @@
 	<menu label="Monde" name="World">
 		<menu_item_check label="Mini-carte" name="Mini-Map"/>
 		<menu_item_check label="Carte du monde" name="World Map"/>
+		<menu_item_check label="Rechercher" name="Search"/>
 		<menu_item_call label="Photo" name="Take Snapshot"/>
 		<menu_item_call label="Créer un repère pour ce lieu" name="Create Landmark Here"/>
 		<menu label="Profil du lieu" name="Land">
@@ -227,8 +228,10 @@
 		<menu label="Afficher les infos" name="Display Info">
 			<menu_item_check label="Afficher l&apos;heure" name="Show Time"/>
 			<menu_item_check label="Afficher les infos de rendu" name="Show Render Info"/>
+			<menu_item_check label="Afficher les infos de texture" name="Show Texture Info"/>
 			<menu_item_check label="Afficher les matrices" name="Show Matrices"/>
 			<menu_item_check label="Afficher la couleur sous le curseur" name="Show Color Under Cursor"/>
+			<menu_item_check label="Afficher la mémoire" name="Show Memory"/>
 			<menu_item_check label="Afficher les mises à jour des objets" name="Show Updates"/>
 		</menu>
 		<menu label="Forcer une erreur" name="Force Errors">
@@ -253,6 +256,7 @@
 			<menu_item_check label="Shadow Frusta" name="Shadow Frusta"/>
 			<menu_item_check label="Occlusion" name="Occlusion"/>
 			<menu_item_check label="Lots de rendu" name="Render Batches"/>
+			<menu_item_check label="Type de mise à jour" name="Update Type"/>
 			<menu_item_check label="Texture Anim" name="Texture Anim"/>
 			<menu_item_check label="Priorité de la texture" name="Texture Priority"/>
 			<menu_item_check label="Zone de texture" name="Texture Area"/>
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
index 603b8f0edcd3ba16d839480d95b114626abb609c..e984ea66ed2070ba90791d8addec90ce4fb98355 100644
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -73,7 +73,7 @@ Détails de l&apos;erreur : La notification, appelée &apos;[_NAME]&apos;, est i
 	</notification>
 	<notification name="LoginFailedNoNetwork">
 		Connexion à [SECOND_LIFE_GRID] impossible.
-&apos;[DIAGNOSTIC]&apos;
+    &apos;[DIAGNOSTIC]&apos;
 Veuillez vérifier votre connexion Internet.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
@@ -332,13 +332,6 @@ Pour entrer dans [SECOND_LIFE], vous devez disposer d&apos;un compte. Voulez-vou
 	<notification name="InvalidCredentialFormat">
 		Saisissez soit le nom d&apos;utilisateur soit à la fois le prénom et le nom de votre avatar dans le champ Nom d&apos;utilisateur, puis connectez-vous.
 	</notification>
-	<notification name="AddClassified">
-		Les petites annonces sont publiées à l&apos;onglet Petites annonces de la section Recherche et sur [http://secondlife.com/community/classifieds secondlife.com] pendant une semaine.
-Rédigez votre annonce, puis cliquez sur Publier pour l&apos;ajouter à la liste des annonces.
-Au moment de cliquer sur Publier, vous serez invité à payer des frais.
-Plus vous payez cher, plus votre annonce est visible dans la liste ainsi que dans les résultats de recherche de mots-clés.
-		<usetemplate ignoretext="Comment ajouter une nouvelle petite annonce" name="okcancelignore" notext="Annuler" yestext="OK"/>
-	</notification>
 	<notification name="DeleteClassified">
 		Supprimer l&apos;annonce [NAME] ?
 Une fois payés, les frais ne sont pas remboursables.
@@ -2848,9 +2841,6 @@ Ignorer les autres ?
 	<notification label="Explorer le monde" name="HintDestinationGuide">
 		Le Guide des destinations comprend des milliers d&apos;endroits nouveaux à découvrir. Sélectionnez-en un, puis cliquez sur Téléporter pour commencer à l&apos;explorer.
 	</notification>
-	<notification label="Changer d&apos;apparence" name="HintAvatarPicker">
-		Vous souhaitez changer de look ? Cliquez sur le bouton ci-dessous pour voir plus d&apos;avatars.
-	</notification>
 	<notification label="Panneau latéral" name="HintSidePanel">
 		Obtenir un accès rapide à votre inventaire, à vos habits, à vos profils et bien plus encore dans le panneau latéral.
 	</notification>
@@ -2888,6 +2878,38 @@ Ignorer les autres ?
 			<button name="cancel" text="Annuler"/>
 		</form>
 	</notification>
+	<notification label="" name="ModeChange">
+		Vous devez quitter et redémarrer l&apos;application afin de changer de mode.
+		<usetemplate name="okcancelbuttons" notext="Ne pas quitter" yestext="Quitter"/>
+	</notification>
+	<notification label="" name="NoClassifieds">
+		Pour créer et modifier des petites annonces, vous devez utiliser le mode Avancé. Voulez-vous quitter l&apos;application afin de changer de mode ? Le sélecteur de mode se trouve sur l&apos;écran de connexion.
+		<usetemplate name="okcancelbuttons" notext="Ne pas quitter" yestext="Quitter"/>
+	</notification>
+	<notification label="" name="NoGroupInfo">
+		Pour créer et modifier des groupes, vous devez utiliser le mode Avancé. Voulez-vous quitter l&apos;application afin de changer de mode ? Le sélecteur de mode se trouve sur l&apos;écran de connexion.
+		<usetemplate name="okcancelbuttons" notext="Ne pas quitter" yestext="Quitter"/>
+	</notification>
+	<notification label="" name="NoPicks">
+		Pour créer et modifier des favoris, vous devez utiliser le mode Avancé. Voulez-vous quitter l&apos;application afin de changer de mode ? Le sélecteur de mode se trouve sur l&apos;écran de connexion.
+		<usetemplate name="okcancelbuttons" notext="Ne pas quitter" yestext="Quitter"/>
+	</notification>
+	<notification label="" name="NoWorldMap">
+		Pour afficher la carte du monde, vous devez utiliser le mode Avancé. Voulez-vous quitter l&apos;application afin de changer de mode ? Le sélecteur de mode se trouve sur l&apos;écran de connexion.
+		<usetemplate name="okcancelbuttons" notext="Ne pas quitter" yestext="Quitter"/>
+	</notification>
+	<notification label="" name="NoVoiceCall">
+		Les appels vocaux sont uniquement disponibles en mode Avancé. Voulez-vous quitter l&apos;application afin de changer de mode ?
+		<usetemplate name="okcancelbuttons" notext="Ne pas quitter" yestext="Quitter"/>
+	</notification>
+	<notification label="" name="NoAvatarShare">
+		Le partage est uniquement disponible en mode Avancé. Voulez-vous quitter l&apos;application afin de changer de mode ?
+		<usetemplate name="okcancelbuttons" notext="Ne pas quitter" yestext="Quitter"/>
+	</notification>
+	<notification label="" name="NoAvatarPay">
+		Pour pouvoir payer d&apos;autres résidents, vous devez utiliser le mode Avancé. Voulez-vous quitter l&apos;application afin de changer de mode ?
+		<usetemplate name="okcancelbuttons" notext="Ne pas quitter" yestext="Quitter"/>
+	</notification>
 	<global name="UnsupportedCPU">
 		- Votre processeur ne remplit pas les conditions minimum requises.
 	</global>
diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml
index ef55ba7991da384d73fd7ed1cc010dc755fcbadd..e54b36644c207e57509b33d0cded081414d4948e 100644
--- a/indra/newview/skins/default/xui/fr/panel_login.xml
+++ b/indra/newview/skins/default/xui/fr/panel_login.xml
@@ -17,6 +17,13 @@
 			</text>
 			<check_box label="Enregistrer" name="remember_check"/>
 			<button label="Connexion" name="connect_btn"/>
+			<text name="mode_selection_text">
+				Mode :
+			</text>
+			<combo_box name="mode_combo" tool_tip="Sélectionnez un mode. Pour une exploration facile et rapide avec chat, choisissez Basique. Pour accéder à plus de fonctionnalités, choisissez Avancé.">
+				<combo_box.item label="Basique" name="Basic"/>
+				<combo_box.item label="Avancé" name="Advanced"/>
+			</combo_box>
 			<text name="start_location_text">
 				Lieu de départ :
 			</text>
diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_media.xml b/indra/newview/skins/default/xui/fr/panel_nearby_media.xml
index 66bfd01a2aa5fc6064e954caa459de2c097aa59f..7b7b67041a4343fac9967dee1e5f927d43ee2283 100644
--- a/indra/newview/skins/default/xui/fr/panel_nearby_media.xml
+++ b/indra/newview/skins/default/xui/fr/panel_nearby_media.xml
@@ -19,7 +19,7 @@
 		<button label="Arrêter" name="all_nearby_media_disable_btn" tool_tip="Désactiver tous les médias près de vous"/>
 		<button label="Lire" name="all_nearby_media_enable_btn" tool_tip="Activer tous les médias près de vous"/>
 		<button name="open_prefs_btn" tool_tip="Ouvrir les préférences de média"/>
-		<button label="Plus &gt;&gt;" label_selected="Moins &lt;&lt;" name="more_btn" tool_tip="Options avancées"/>
+		<button label="Plus &gt;&gt;" label_selected="&lt;&lt; Moins" name="more_btn" tool_tip="Options avancées"/>
 		<button label="Plus &gt;&gt;" label_selected="Moins &lt;&lt;" name="less_btn" tool_tip="Options avancées"/>
 	</panel>
 	<panel name="nearby_media_panel">
diff --git a/indra/newview/skins/default/xui/fr/panel_people.xml b/indra/newview/skins/default/xui/fr/panel_people.xml
index eecbabae2b3071eb3ca32cc230bc72ee9d57a63b..166f04b3e47ce7437342c57b6b7d4c910b6c663c 100644
--- a/indra/newview/skins/default/xui/fr/panel_people.xml
+++ b/indra/newview/skins/default/xui/fr/panel_people.xml
@@ -18,6 +18,8 @@ Pour rechercher des résidents avec qui passer du temps, utilisez [secondlife://
 	<string name="groups_filter_label" value="Filtrer les groupes"/>
 	<string name="no_filtered_groups_msg" value="Vous n&apos;avez pas trouvé ce que vous cherchiez ? Essayez [secondlife:///app/search/groups/[SEARCH_TERM] Rechercher]."/>
 	<string name="no_groups_msg" value="Vous souhaitez trouver des groupes à rejoindre ? Utilisez [secondlife:///app/search/groups Rechercher]."/>
+	<string name="MiniMapToolTipMsg" value="[REGION](Carte : double-clic ; Panoramique : Maj + faire glisser)"/>
+	<string name="AltMiniMapToolTipMsg" value="[REGION](Téléportation : double-clic ; Panoramique : Maj + faire glisser)"/>
 	<filter_editor label="Filtre" name="filter_input"/>
 	<tab_container name="tabs">
 		<panel label="PRÈS DE VOUS" name="nearby_panel">
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
index 4b3fc35150ded5bfac72ee11f5798d5500f97040..d5cecfc6982e103165dd72e3e5def7ff84f99eef 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
@@ -29,7 +29,8 @@
 	<check_box label="Chats IM" name="EnableIMChatPopups" tool_tip="Cocher cette case pour qu&apos;un popup s&apos;affiche à réception d&apos;un message instantané."/>
 	<spinner label="Durée de vie du popup Chat près de moi :" name="nearby_toasts_lifetime"/>
 	<spinner label="Disparition progressive du popup Chat près de moi :" name="nearby_toasts_fadingtime"/>
-	<check_box label="Utiliser la traduction automatique lors des chats (fournie par Google)" name="translate_chat_checkbox"/>
+	<check_box name="translate_chat_checkbox"/>
+	<text name="translate_chb_label" >Utiliser la traduction automatique lors des chats (fournie par Google)</text>
 	<text name="translate_language_text">
 		Traduire le chat en :
 	</text>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
index 48630918d7d4649e3c7dcc7f8162d386a1473c17..ac7f72d367db60fc82fcc6bdf69b8430ac9d223c 100644
--- a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
@@ -4,7 +4,8 @@
 		Bouton central de la souris
 	</panel.string>
 	<slider label="Volume principal" name="System Volume"/>
-	<check_box initial_value="true" label="Couper quand minimisé" name="mute_when_minimized"/>
+	<check_box initial_value="true" name="mute_when_minimized"/>
+	<text name="mute_chb_label">Couper quand minimisé</text>
 	<slider label="Boutons" name="UI Volume"/>
 	<slider label="Ambiant" name="Wind Volume"/>
 	<slider label="Effets sonores" name="SFX Volume"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_profile.xml b/indra/newview/skins/default/xui/fr/panel_profile.xml
index 6b611923af1f7d9f6d1aa81bd72a1689a422e054..9aa6fe97a1e7b1c4c09edb5345467682b0781337 100644
--- a/indra/newview/skins/default/xui/fr/panel_profile.xml
+++ b/indra/newview/skins/default/xui/fr/panel_profile.xml
@@ -16,6 +16,12 @@
 	<string name="RegisterDateFormat">
 		[REG_DATE] ([AGE])
 	</string>
+	<string name="name_text_args">
+		[NAME]
+	</string>
+	<string name="display_name_text_args">
+		[DISPLAY_NAME]
+	</string>
 	<layout_stack name="layout">
 		<layout_panel name="profile_stack">
 			<scroll_container name="profile_scroll">
@@ -34,7 +40,7 @@
 					</text_editor>
 					<text name="title_partner_text" value="Partenaire :"/>
 					<panel name="partner_data_panel">
-						<name_box initial_value="(récupération en cours)" name="partner_text"/>
+						<text initial_value="(récupération en cours)" name="partner_text"/>
 					</panel>
 					<text name="title_groups_text" value="Groupes :"/>
 				</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_script_ed.xml b/indra/newview/skins/default/xui/fr/panel_script_ed.xml
index 2c86dd72b65cc049f79df8950f7685fd471c0df3..2b08ae56c55885d15656e1782d986ccfa8c46b9e 100644
--- a/indra/newview/skins/default/xui/fr/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/fr/panel_script_ed.xml
@@ -15,6 +15,9 @@
 	<panel.string name="Title">
 		Script : [NAME]
 	</panel.string>
+	<panel.string name="external_editor_not_set">
+		Sélectionnez un éditeur en définissant la variable d&apos;environnement LL_SCRIPT_EDITOR ou le paramètre ExternalEditor.
+	</panel.string>
 	<menu_bar name="script_menu">
 		<menu label="Fichier" name="File">
 			<menu_item_call label="Enregistrer" name="Save"/>
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
index 74c1fd8622d46e296945cabb29825341dd761220..a7c71dc0f0b00df328133549ba4dc7b63e15957c 100644
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -1067,7 +1067,7 @@
 	<string name="PermNo">
 		Non
 	</string>
-	<string name="Chat" value=" Chat :"/>
+	<string name="Chat Message" value="Chat :"/>
 	<string name="Sound" value=" Son :"/>
 	<string name="Wait" value=" --- Attendre :"/>
 	<string name="AnimFlagStop" value=" Arrêter l&apos;animation :"/>
@@ -1864,12 +1864,6 @@
 	<string name="accel-win-shift">
 		Maj+
 	</string>
-	<string name="Esc">
-		Échap
-	</string>
-	<string name="Home">
-		Début
-	</string>
 	<string name="FileSaved">
 		Fichier enregistré
 	</string>
@@ -1889,7 +1883,7 @@
 		PDT
 	</string>
 	<string name="Direction_Forward">
-		Vers l&apos;avant
+		Avant
 	</string>
 	<string name="Direction_Left">
 		Gauche
@@ -1987,6 +1981,9 @@
 	<string name="Other">
 		Autre
 	</string>
+	<string name="Rental">
+		Location
+	</string>
 	<string name="Any">
 		Aucun
 	</string>
@@ -3966,7 +3963,7 @@ de l&apos;infraction signalée
 	<string name="Notices">
 		Notices
 	</string>
-	<string name="Chat">
+	<string name="Chat" value=" Chat :">
 		Chat
 	</string>
 	<string name="DeleteItems">
@@ -3978,4 +3975,348 @@ de l&apos;infraction signalée
 	<string name="EmptyOutfitText">
 		Cette tenue ne contient aucun article.
 	</string>
+	<string name="ExternalEditorNotSet">
+		Sélectionnez un éditeur à l&apos;aide du paramètre ExternalEditor.
+	</string>
+	<string name="ExternalEditorNotFound">
+		Éditeur externe spécifié introuvable.
+Essayez avec le chemin d&apos;accès à l&apos;éditeur entre guillemets doubles
+(par ex. : &quot;/chemin_accès/editor&quot; &quot;%s&quot;).
+	</string>
+	<string name="ExternalEditorCommandParseError">
+		Erreur lors de l&apos;analyse de la commande d&apos;éditeur externe.
+	</string>
+	<string name="ExternalEditorFailedToRun">
+		Échec d&apos;exécution de l&apos;éditeur externe.
+	</string>
+	<string name="Esc">
+		Échap
+	</string>
+	<string name="Space">
+		Space
+	</string>
+	<string name="Enter">
+		Enter
+	</string>
+	<string name="Tab">
+		Tab
+	</string>
+	<string name="Ins">
+		Ins
+	</string>
+	<string name="Del">
+		Del
+	</string>
+	<string name="Backsp">
+		Backsp
+	</string>
+	<string name="Shift">
+		Shift
+	</string>
+	<string name="Ctrl">
+		Ctrl
+	</string>
+	<string name="Alt">
+		Alt
+	</string>
+	<string name="CapsLock">
+		CapsLock
+	</string>
+	<string name="Home">
+		Début
+	</string>
+	<string name="End">
+		End
+	</string>
+	<string name="PgUp">
+		PgUp
+	</string>
+	<string name="PgDn">
+		PgDn
+	</string>
+	<string name="F1">
+		F1
+	</string>
+	<string name="F2">
+		F2
+	</string>
+	<string name="F3">
+		F3
+	</string>
+	<string name="F4">
+		F4
+	</string>
+	<string name="F5">
+		F5
+	</string>
+	<string name="F6">
+		F6
+	</string>
+	<string name="F7">
+		F7
+	</string>
+	<string name="F8">
+		F8
+	</string>
+	<string name="F9">
+		F9
+	</string>
+	<string name="F10">
+		F10
+	</string>
+	<string name="F11">
+		F11
+	</string>
+	<string name="F12">
+		F12
+	</string>
+	<string name="Add">
+		Ajouter
+	</string>
+	<string name="Subtract">
+		Soustraire
+	</string>
+	<string name="Multiply">
+		Multiplier
+	</string>
+	<string name="Divide">
+		Diviser
+	</string>
+	<string name="PAD_DIVIDE">
+		PAD_DIVIDE
+	</string>
+	<string name="PAD_LEFT">
+		PAD_LEFT
+	</string>
+	<string name="PAD_RIGHT">
+		PAD_RIGHT
+	</string>
+	<string name="PAD_DOWN">
+		PAD_DOWN
+	</string>
+	<string name="PAD_UP">
+		PAD_UP
+	</string>
+	<string name="PAD_HOME">
+		PAD_HOME
+	</string>
+	<string name="PAD_END">
+		PAD_END
+	</string>
+	<string name="PAD_PGUP">
+		PAD_PGUP
+	</string>
+	<string name="PAD_PGDN">
+		PAD_PGDN
+	</string>
+	<string name="PAD_CENTER">
+		PAD_CENTER
+	</string>
+	<string name="PAD_INS">
+		PAD_INS
+	</string>
+	<string name="PAD_DEL">
+		PAD_DEL
+	</string>
+	<string name="PAD_Enter">
+		PAD_Enter
+	</string>
+	<string name="PAD_BUTTON0">
+		PAD_BUTTON0
+	</string>
+	<string name="PAD_BUTTON1">
+		PAD_BUTTON1
+	</string>
+	<string name="PAD_BUTTON2">
+		PAD_BUTTON2
+	</string>
+	<string name="PAD_BUTTON3">
+		PAD_BUTTON3
+	</string>
+	<string name="PAD_BUTTON4">
+		PAD_BUTTON4
+	</string>
+	<string name="PAD_BUTTON5">
+		PAD_BUTTON5
+	</string>
+	<string name="PAD_BUTTON6">
+		PAD_BUTTON6
+	</string>
+	<string name="PAD_BUTTON7">
+		PAD_BUTTON7
+	</string>
+	<string name="PAD_BUTTON8">
+		PAD_BUTTON8
+	</string>
+	<string name="PAD_BUTTON9">
+		PAD_BUTTON9
+	</string>
+	<string name="PAD_BUTTON10">
+		PAD_BUTTON10
+	</string>
+	<string name="PAD_BUTTON11">
+		PAD_BUTTON11
+	</string>
+	<string name="PAD_BUTTON12">
+		PAD_BUTTON12
+	</string>
+	<string name="PAD_BUTTON13">
+		PAD_BUTTON13
+	</string>
+	<string name="PAD_BUTTON14">
+		PAD_BUTTON14
+	</string>
+	<string name="PAD_BUTTON15">
+		PAD_BUTTON15
+	</string>
+	<string name="-">
+		-
+	</string>
+	<string name="=">
+		=
+	</string>
+	<string name="`">
+		`
+	</string>
+	<string name=";">
+		;
+	</string>
+	<string name="[">
+		[
+	</string>
+	<string name="]">
+		]
+	</string>
+	<string name="\">
+		\
+	</string>
+	<string name="0">
+		0
+	</string>
+	<string name="1">
+		1
+	</string>
+	<string name="2">
+		2
+	</string>
+	<string name="3">
+		3
+	</string>
+	<string name="4">
+		4
+	</string>
+	<string name="5">
+		5
+	</string>
+	<string name="6">
+		6
+	</string>
+	<string name="7">
+		7
+	</string>
+	<string name="8">
+		8
+	</string>
+	<string name="9">
+		9
+	</string>
+	<string name="A">
+		A
+	</string>
+	<string name="B">
+		B
+	</string>
+	<string name="C">
+		C
+	</string>
+	<string name="D">
+		D
+	</string>
+	<string name="E">
+		E
+	</string>
+	<string name="F">
+		F
+	</string>
+	<string name="G">
+		G
+	</string>
+	<string name="H">
+		H
+	</string>
+	<string name="I">
+		I
+	</string>
+	<string name="J">
+		J
+	</string>
+	<string name="K">
+		K
+	</string>
+	<string name="L">
+		L
+	</string>
+	<string name="M">
+		M
+	</string>
+	<string name="N">
+		N
+	</string>
+	<string name="O">
+		O
+	</string>
+	<string name="P">
+		P
+	</string>
+	<string name="Q">
+		Q
+	</string>
+	<string name="R">
+		R
+	</string>
+	<string name="S">
+		S
+	</string>
+	<string name="T">
+		T
+	</string>
+	<string name="U">
+		U
+	</string>
+	<string name="V">
+		V
+	</string>
+	<string name="W">
+		W
+	</string>
+	<string name="X">
+		X
+	</string>
+	<string name="Y">
+		Y
+	</string>
+	<string name="Z">
+		Z
+	</string>
+	<string name="BeaconParticle">
+		Affichage des balises de particule (bleu)
+	</string>
+	<string name="BeaconPhysical">
+		Affichage des balises d&apos;objet physique (vert)
+	</string>
+	<string name="BeaconScripted">
+		Affichage des balises d&apos;objet scripté (rouge)
+	</string>
+	<string name="BeaconScriptedTouch">
+		Affichage des balises d&apos;objet scripté avec fonction de toucher (rouge)
+	</string>
+	<string name="BeaconSound">
+		Affichage des balises de son (jaune)
+	</string>
+	<string name="BeaconMedia">
+		Affichage des balises de média (blanc)
+	</string>
+	<string name="ParticleHiding">
+		Masquage des particules
+	</string>
 </strings>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
index 4a1bbdf64a93cc6bbde7ebd3d3adaab702bc8d46..208dd5ed28dee658b08cb0e01678220d60ec47e8 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
@@ -56,7 +56,8 @@
 		<radio_item label="Finestre separate" name="radio" value="0"/>
 		<radio_item label="Schede" name="radio2" value="1"/>
 	</radio_group>
-	<check_box label="Usa la traduzione meccanica durante le chat (tecnologia Google)" name="translate_chat_checkbox"/>
+	<check_box name="translate_chat_checkbox"/>
+	<text name="translate_chb_label" >Usa la traduzione meccanica durante le chat (tecnologia Google)</text>
 	<text name="translate_language_text" width="110">
 		Traduci chat in:
 	</text>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml
index 6e70a314c5825873dba31d015ae4efdc6566d69a..e2332b63d01aa21db174072711bd8b7ee91b1a83 100644
--- a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Suoni" name="Preference Media panel">
 	<slider label="Vol. principale" name="System Volume"/>
-	<check_box initial_value="true" label="Disatt. se a icona" name="mute_when_minimized"/>
+	<check_box initial_value="true" label="" name="mute_when_minimized"/>
+	<text name="mute_chb_label">Disatt. se a icona</text>
 	<slider label="Pulsanti" name="UI Volume"/>
 	<slider label="Ambiente" name="Wind Volume"/>
 	<slider label="Effetti sonori" name="SFX Volume"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
index c260cebef8b262d46665467279759989c24eb159..ce2a0f35e4ccd3c4012c8351555294248dd57373 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
@@ -56,7 +56,8 @@
 		<radio_item label="別々のウィンドウ" name="radio" value="0"/>
 		<radio_item label="タブ" name="radio2" value="1"/>
 	</radio_group>
-	<check_box label="チャット中に内容を機械翻訳する(Google翻訳)" name="translate_chat_checkbox"/>
+	<check_box name="translate_chat_checkbox"/>
+	<text name="translate_chb_label" >チャット中に内容を機械翻訳する(Google翻訳)</text>
 	<text name="translate_language_text">
 		翻訳する言語:
 	</text>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
index 9fbbd46220a468600183c13fdc3cc11c735ef174..74696a3b35a92693d7856c1f37809c1515e5ea19 100644
--- a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="サウンド" name="Preference Media panel">
 	<slider label="全体の音量" name="System Volume"/>
-	<check_box initial_value="true" label="最小化でミュート" name="mute_when_minimized"/>
+	<check_box initial_value="true" name="mute_when_minimized"/>
+	<text name="mute_chb_label">最小化でミュート</text>
 	<slider label="ボタン" name="UI Volume"/>
 	<slider label="風" name="Wind Volume"/>
 	<slider label="効果音" name="SFX Volume"/>
diff --git a/indra/newview/skins/default/xui/nl/panel_preferences_sound.xml b/indra/newview/skins/default/xui/nl/panel_preferences_sound.xml
index 2b709bde40ba47838b7f1cf67a625dc89c6a9b0d..5ded0158688f35daa5a588613c4d086a9dac8879 100644
--- a/indra/newview/skins/default/xui/nl/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/nl/panel_preferences_sound.xml
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Geluid" name="Preference Media panel">
 	<slider label="Hoofd volume" name="System Volume"/>
-	<check_box initial_value="true" label="Dempen indien geminimaliseerd" name="mute_when_minimized"/>
+	<check_box initial_value="true" name="mute_when_minimized"/>
+	<text name="mute_chb_label">Dempen indien geminimaliseerd</text>
 	<slider label="Omliggend" name="Wind Volume"/>
 	<slider label="Knoppen" name="UI Volume"/>
 	<slider label="Media" name="Media Volume"/>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml
index c7142c8419969df8242705a6699ed435466e41ba..4a4e6509ab0cc5e3b8b7b8fa29fc28503526d880 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml
@@ -29,7 +29,8 @@
 	<check_box label="Czat IM" name="EnableIMChatPopups" tool_tip="Zaznacz aby widzieć wyskakujące okienka kiedy IM się pojawia"/>
 	<spinner label="Czas widoczności czatu w pobliżu:" name="nearby_toasts_lifetime"/>
 	<spinner label="Czas znikania czatu w pobliżu:" name="nearby_toasts_fadingtime"/>
-	<check_box label="Używaj translatora podczas rozmowy (wspierany przez Google)" name="translate_chat_checkbox"/>
+	<check_box name="translate_chat_checkbox"/>
+	<text name="translate_chb_label" >Używaj translatora podczas rozmowy (wspierany przez Google)</text>
 	<text name="translate_language_text">
 		Przetłumacz czat na:
 	</text>
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml b/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml
index ac93949a1b8a9ce0811480115e3facf547cc6d29..692f24715bf9d03a073c10c589fa09c667e642d2 100644
--- a/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml
@@ -4,7 +4,8 @@
 		Åšrodkowy przycisk myszy
 	</panel.string>
 	<slider label="Główny" name="System Volume"/>
-	<check_box initial_value="true" label="Wycisz podczas minimalizacji" name="mute_when_minimized"/>
+	<check_box initial_value="true" name="mute_when_minimized"/>
+	<text name="mute_chb_label">Wycisz podczas minimalizacji</text>
 	<slider label="Interfejs" name="UI Volume"/>
 	<slider label="Otoczenie" name="Wind Volume"/>
 	<slider label="Efekty dźwiękowe" name="SFX Volume"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_about_land.xml b/indra/newview/skins/default/xui/pt/floater_about_land.xml
index ffd1cce76c61d98e97295ca0a77b4abb336fbbc2..7761c79864258ab17bbaac878f8780af6d995271 100644
--- a/indra/newview/skins/default/xui/pt/floater_about_land.xml
+++ b/indra/newview/skins/default/xui/pt/floater_about_land.xml
@@ -347,6 +347,7 @@ Apenas lotes maiores podem ser listados na busca.
 				<combo_box.item label="Parques &amp; Natureza" name="item9"/>
 				<combo_box.item label="Residencial" name="item10"/>
 				<combo_box.item label="Compras" name="item11"/>
+				<combo_box.item label="Aluguel" name="item13"/>
 				<combo_box.item label="Outros" name="item12"/>
 			</combo_box>
 			<combo_box name="land category">
@@ -361,6 +362,7 @@ Apenas lotes maiores podem ser listados na busca.
 				<combo_box.item label="Parques e Natureza" name="item9"/>
 				<combo_box.item label="Residencial" name="item10"/>
 				<combo_box.item label="Compras" name="item11"/>
+				<combo_box.item label="Aluguel" name="item13"/>
 				<combo_box.item label="Outros" name="item12"/>
 			</combo_box>
 			<check_box label="Conteúdo adulto" name="MatureCheck" tool_tip=""/>
@@ -439,7 +441,7 @@ Mídia:
 				(Definições do terreno)
 			</panel.string>
 			<panel.string name="allow_public_access">
-				Acesso para público: [MATURITY]
+				Acesso para público: [MATURITY]) (Desmarcar esse item cria limites)
 			</panel.string>
 			<panel.string name="estate_override">
 				Uma ou mais destas opções está definida no nível de propriedade.
diff --git a/indra/newview/skins/default/xui/pt/floater_map.xml b/indra/newview/skins/default/xui/pt/floater_map.xml
index 38c264719985e502e528ce252ab53634acb14163..faf9c7c1704599cb622edd107747c0a51db7a836 100644
--- a/indra/newview/skins/default/xui/pt/floater_map.xml
+++ b/indra/newview/skins/default/xui/pt/floater_map.xml
@@ -3,6 +3,9 @@
 	<floater.string name="ToolTipMsg">
 		[REGION](Clique duas vezes para abrir o mapa, shift+arraste para a visão pan)
 	</floater.string>
+	<floater.string name="AltToolTipMsg">
+		[REGION](Clique duas vezes para teletransportar, shift+arraste para a visão pan)
+	</floater.string>
 	<floater.string name="mini_map_caption">
 		MINIMAPA
 	</floater.string>
diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml
index f90097bf222182b75345c1939817e04ae9bd9755..7289b592fddc2299dca6cca9bd39752625083ef3 100644
--- a/indra/newview/skins/default/xui/pt/floater_tools.xml
+++ b/indra/newview/skins/default/xui/pt/floater_tools.xml
@@ -64,6 +64,8 @@
 		<radio_item label="Selecionar face" name="radio select face"/>
 	</radio_group>
 	<check_box label="Editar partes linkadas" name="checkbox edit linked parts"/>
+	<button label="Link" name="link_btn"/>
+	<button label="Desconectar links" name="unlink_btn"/>
 	<text name="RenderingCost" tool_tip="Mostra o cálculo do custo de renderização do objeto">
 		þ: [COUNT]
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/menu_attachment_self.xml b/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
index 09060cf3aeebee94d425b98017bd24a6785ec6b0..5b32784c32303f2b43a8946ebf9e625424ac352f 100644
--- a/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
+++ b/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
@@ -5,7 +5,7 @@
 	<menu_item_call label="Tirar" name="Detach"/>
 	<menu_item_call label="Sentar" name="Sit Down Here"/>
 	<menu_item_call label="Ficar de pé" name="Stand Up"/>
-	<menu_item_call label="Trocar de look" name="Change Outfit"/>
+	<menu_item_call label="Minha aparência" name="Change Outfit"/>
 	<menu_item_call label="Editar meu look" name="Edit Outfit"/>
 	<menu_item_call label="Editar meu corpo" name="Edit My Shape"/>
 	<menu_item_call label="Meus amigos" name="Friends..."/>
diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_self.xml b/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
index 6e203d5a259329db5a39691d7653089f0b478b09..e2fd61745f554168a9e3dbf38c99e588ea585e40 100644
--- a/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
+++ b/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
@@ -21,7 +21,7 @@
 		<context_menu label="Tirar" name="Object Detach"/>
 		<menu_item_call label="Tirar tudo" name="Detach All"/>
 	</context_menu>
-	<menu_item_call label="Trocar de look" name="Chenge Outfit"/>
+	<menu_item_call label="Minha aparência" name="Chenge Outfit"/>
 	<menu_item_call label="Editar meu look" name="Edit Outfit"/>
 	<menu_item_call label="Editar meu corpo" name="Edit My Shape"/>
 	<menu_item_call label="Meus amigos" name="Friends..."/>
diff --git a/indra/newview/skins/default/xui/pt/menu_bottomtray.xml b/indra/newview/skins/default/xui/pt/menu_bottomtray.xml
index 479d02512fb5f7a620419657cfe82abce1af14bd..bd628c94d38e21921e49a37393c33d2b4f8b8185 100644
--- a/indra/newview/skins/default/xui/pt/menu_bottomtray.xml
+++ b/indra/newview/skins/default/xui/pt/menu_bottomtray.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <menu name="hide_camera_move_controls_menu">
+	<menu_item_check label="Voz ativada" name="EnableVoiceChat"/>
 	<menu_item_check label="Botão de gestos" name="ShowGestureButton"/>
 	<menu_item_check label="Botão de movimento" name="ShowMoveButton"/>
 	<menu_item_check label="Botão de ver" name="ShowCameraButton"/>
 	<menu_item_check label="Botão de fotos" name="ShowSnapshotButton"/>
-	<menu_item_check label="Botão da Barra lateral" name="ShowSidebarButton"/>
 	<menu_item_check label="Botão Construir" name="ShowBuildButton"/>
 	<menu_item_check label="Botão Buscar" name="ShowSearchButton"/>
 	<menu_item_check label="Botão Mapa" name="ShowWorldMapButton"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml
index 6a511e6ab718d1929d40985647c3c9394e6ae4fe..2b5aa7508bf402b372ed7f582e6b5058f8eba300 100644
--- a/indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml
+++ b/indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<menu name="Gear Menu">
+<toggleable_menu name="Gear Menu">
 	<menu_item_call label="Ver perfil" name="view_profile"/>
 	<menu_item_call label="Adicionar amigo..." name="add_friend"/>
 	<menu_item_call label="MI" name="im"/>
@@ -11,9 +11,11 @@
 	<menu_item_call label="Denunciar" name="report"/>
 	<menu_item_call label="Congelar" name="freeze"/>
 	<menu_item_call label="Ejetar" name="eject"/>
+	<menu_item_call label="Chutar" name="kick"/>
+	<menu_item_call label="CSR" name="csr"/>
 	<menu_item_call label="Depurar texturas" name="debug"/>
 	<menu_item_call label="Localizar no mapa" name="find_on_map"/>
 	<menu_item_call label="Mais zoom" name="zoom_in"/>
 	<menu_item_call label="Pagar" name="pay"/>
 	<menu_item_call label="Compartilhar" name="share"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml
index 7e67f4cfd41556b197405452f418563a8970882c..e8fafa58a9a787754eea3e70694ef5085079c5e3 100644
--- a/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml
+++ b/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml
@@ -1,10 +1,31 @@
-<?xml version="1.0" encoding="utf-8"?>
-<menu name="Gear Menu">
-	<menu_item_call label="Sentar" name="sit_down_here"/>
-	<menu_item_call label="Ficar de pé" name="stand_up"/>
-	<menu_item_call label="Trocar de look" name="change_outfit"/>
-	<menu_item_call label="Meu perfil" name="my_profile"/>
-	<menu_item_call label="Meus amigos" name="my_friends"/>
-	<menu_item_call label="Meus grupos" name="my_groups"/>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Gear Menu">
+	<menu_item_call label="Sentar" name="Sit Down Here"/>
+	<menu_item_call label="Ficar de pé" name="Stand Up"/>
+	<context_menu label="Tirar" name="Take Off &gt;">
+		<context_menu label="Roupa" name="Clothes &gt;">
+			<menu_item_call label="Camisa" name="Shirt"/>
+			<menu_item_call label="Calças" name="Pants"/>
+			<menu_item_call label="Saia" name="Skirt"/>
+			<menu_item_call label="Sapatos" name="Shoes"/>
+			<menu_item_call label="Meias" name="Socks"/>
+			<menu_item_call label="Jaqueta" name="Jacket"/>
+			<menu_item_call label="Luvas" name="Gloves"/>
+			<menu_item_call label="Camiseta" name="Self Undershirt"/>
+			<menu_item_call label="Roupa de baixo" name="Self Underpants"/>
+			<menu_item_call label="Tatuagem" name="Self Tattoo"/>
+			<menu_item_call label="Alpha" name="Self Alpha"/>
+			<menu_item_call label="Todas as roupas" name="All Clothes"/>
+		</context_menu>
+		<context_menu label="HUD" name="Object Detach HUD"/>
+		<context_menu label="Separar" name="Object Detach"/>
+		<menu_item_call label="Separar tudo" name="Detach All"/>
+	</context_menu>
+	<menu_item_call label="Trocar de look" name="Chenge Outfit"/>
+	<menu_item_call label="Editar meu look" name="Edit Outfit"/>
+	<menu_item_call label="Editar meu corpo" name="Edit My Shape"/>
+	<menu_item_call label="Meus amigos" name="Friends..."/>
+	<menu_item_call label="Meus grupos" name="Groups..."/>
+	<menu_item_call label="Meu perfil" name="Profile..."/>
 	<menu_item_call label="Depurar texturas" name="Debug..."/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/pt/menu_inventory_gear_default.xml
index 3400578d9a939ce359d83ee7d1cbe115c1e5d966..6faea517fe9d8219a51543829a6c485b9e0d504b 100644
--- a/indra/newview/skins/default/xui/pt/menu_inventory_gear_default.xml
+++ b/indra/newview/skins/default/xui/pt/menu_inventory_gear_default.xml
@@ -3,6 +3,7 @@
 	<menu_item_call label="Nova janela de inventário" name="new_window"/>
 	<menu_item_check label="Ordenar por nome" name="sort_by_name"/>
 	<menu_item_check label="Ordenar por mais recente" name="sort_by_recent"/>
+	<menu_item_check label="Sempre ordenar pastas por nome" name="sort_folders_by_name"/>
 	<menu_item_check label="Pastas do sistema no topo" name="sort_system_folders_to_top"/>
 	<menu_item_call label="Mostrar filtros" name="show_filters"/>
 	<menu_item_call label="Restabelecer filtros" name="reset_filters"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_object.xml b/indra/newview/skins/default/xui/pt/menu_object.xml
index bf9485969987b7485e36fb531fad188c2aead187..f4919e0c1f0fb980ee311eb7f42efeaf82b4fc34 100644
--- a/indra/newview/skins/default/xui/pt/menu_object.xml
+++ b/indra/newview/skins/default/xui/pt/menu_object.xml
@@ -16,14 +16,14 @@
 		<context_menu label="Anexar" name="Object Attach"/>
 		<context_menu label="Anexar o HUD" name="Object Attach HUD"/>
 	</context_menu>
-	<context_menu label="Tirar" name="Remove">
+	<context_menu label="Gerenciar" name="Remove">
 		<menu_item_call label="Denunciar abuso" name="Report Abuse..."/>
 		<menu_item_call label="Bloquear" name="Object Mute"/>
 		<menu_item_call label="Devolver" name="Return..."/>
-		<menu_item_call label="Excluir" name="Delete"/>
 	</context_menu>
 	<menu_item_call label="Pegar" name="Pie Object Take"/>
 	<menu_item_call label="Pegar uma cópia" name="Take Copy"/>
 	<menu_item_call label="Pagar" name="Pay..."/>
 	<menu_item_call label="Comprar" name="Buy..."/>
+	<menu_item_call label="Excluir" name="Delete"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/pt/menu_places_gear_folder.xml
index 2059a9ed2d6347a002fd4537b4af55943becbfd1..7cba70a11064051fe9e3bee566d68442c1e84091 100644
--- a/indra/newview/skins/default/xui/pt/menu_places_gear_folder.xml
+++ b/indra/newview/skins/default/xui/pt/menu_places_gear_folder.xml
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_folder_gear">
+<toggleable_menu name="menu_folder_gear">
 	<menu_item_call label="Adicionar marco" name="add_landmark"/>
 	<menu_item_call label="Adicionar pasta" name="add_folder"/>
+	<menu_item_call label="Restaurar item" name="restore_item"/>
 	<menu_item_call label="Cortar" name="cut"/>
 	<menu_item_call label="Copiar" name="copy_folder"/>
 	<menu_item_call label="Colar" name="paste"/>
@@ -12,4 +13,4 @@
 	<menu_item_call label="Expandir todas as pastas" name="expand_all"/>
 	<menu_item_call label="Recolher todas as pastas" name="collapse_all"/>
 	<menu_item_check label="Ordenar por data" name="sort_by_date"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/pt/menu_places_gear_landmark.xml
index 52a9d1373599270c009e8253e2beeb7ecffa9d34..fec0911fcf5f659c5cebe5bf4a1f7f3442c748bf 100644
--- a/indra/newview/skins/default/xui/pt/menu_places_gear_landmark.xml
+++ b/indra/newview/skins/default/xui/pt/menu_places_gear_landmark.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="menu_ladmark_gear">
+<toggleable_menu name="menu_ladmark_gear">
 	<menu_item_call label="Teletransportar" name="teleport"/>
 	<menu_item_call label="Mais informações" name="more_info"/>
 	<menu_item_call label="Mostrar no mapa" name="show_on_map"/>
 	<menu_item_call label="Adicionar marco" name="add_landmark"/>
 	<menu_item_call label="Adicionar pasta" name="add_folder"/>
+	<menu_item_call label="Restaurar item" name="restore_item"/>
 	<menu_item_call label="Cortar" name="cut"/>
 	<menu_item_call label="Copiar marco" name="copy_landmark"/>
 	<menu_item_call label="Copiar SLurl" name="copy_slurl"/>
@@ -15,4 +16,4 @@
 	<menu_item_call label="Recolher todas as pastas" name="collapse_all"/>
 	<menu_item_check label="Ordenar por data" name="sort_by_date"/>
 	<menu_item_call label="Criar destaque" name="create_pick"/>
-</menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
index 3bbf2b66f223dc8b67bb756e90a9f34e520808aa..538b20e01f341186b1222c2912d2d591e6c83c55 100644
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -7,7 +7,7 @@
 		</menu_item_call>
 		<menu_item_call label="Comprar L$" name="Buy and Sell L$"/>
 		<menu_item_call label="Meu perfil" name="Profile"/>
-		<menu_item_call label="Trocar de look" name="ChangeOutfit"/>
+		<menu_item_call label="Minha aparência" name="ChangeOutfit"/>
 		<menu_item_check label="Meu inventário" name="Inventory"/>
 		<menu_item_check label="Meu inventário" name="ShowSidetrayInventory"/>
 		<menu_item_check label="Meus gestos" name="Gestures"/>
@@ -35,6 +35,7 @@
 	<menu label="Mundo" name="World">
 		<menu_item_check label="Mini Mapa" name="Mini-Map"/>
 		<menu_item_check label="Mapa-múndi" name="World Map"/>
+		<menu_item_check label="Busca" name="Search"/>
 		<menu_item_call label="Foto" name="Take Snapshot"/>
 		<menu_item_call label="Criar marco deste lugar" name="Create Landmark Here"/>
 		<menu label="Perfil da região" name="Land">
@@ -224,7 +225,9 @@
 		<menu label="Show Info" name="Display Info">
 			<menu_item_check label="Mostrar hora" name="Show Time"/>
 			<menu_item_check label="Dados de renderização" name="Show Render Info"/>
+			<menu_item_check label="Mostrar info da textura" name="Show Texture Info"/>
 			<menu_item_check label="Mostrar cor sob o cursor" name="Show Color Under Cursor"/>
+			<menu_item_check label="Mostrar memória" name="Show Memory"/>
 			<menu_item_check label="Mostrar mudanças a objetos" name="Show Updates"/>
 		</menu>
 		<menu label="Force an Error" name="Force Errors">
@@ -242,6 +245,9 @@
 			<menu_item_check label="Taxa de quadros aleatória" name="Randomize Framerate"/>
 			<menu_item_check label="Frame Test" name="Frame Test"/>
 		</menu>
+		<menu label="Render Metadata" name="Render Metadata">
+			<menu_item_check label="Tipo de atualização" name="Update Type"/>
+		</menu>
 		<menu label="Rendering" name="Rendering">
 			<menu_item_check label="Axes" name="Axes"/>
 			<menu_item_check label="Wireframe" name="Wireframe"/>
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
index 4b2e4bc5e0e342b072116b7858170a1efb9e21ad..31e29fb6c15eab8e7932dac7388b8b54a6425b85 100644
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -72,7 +72,7 @@ Detalhes do erro: O aviso &apos;[_NAME]&apos; não foi localizado no arquivo not
 	</notification>
 	<notification name="LoginFailedNoNetwork">
 		Falha de conexão com o [SECOND_LIFE_GRID].
-&apos;[DIAGNOSTIC]&apos;
+    &apos;[DIAGNOSTIC]&apos;
 Verifique se a conexão à internet está funcionando.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
@@ -330,13 +330,6 @@ Digite o nome de usuário de seu avatar.
 	<notification name="InvalidCredentialFormat">
 		Digite o nome de usuário ou o nome e sobrenome do seu avatar no campo Nome de usuário, depois entre em sua conta novamente.
 	</notification>
-	<notification name="AddClassified">
-		Os anúncios serão publicados na seção &apos;Classificados&apos; das buscas e em [http://secondlife.com/community/classifieds secondlife.com] durante uma semana.
-Escreva seu anúncio e clique em &apos;Publicar...&apos; 
-Depois, decida quanto deseja pagar pelo anúncio. 
-Quanto mais você pagar, mais alto será o posicionamento do seu anúncio nos classficados e nos resultados de busca das suas palavras-chave.
-		<usetemplate ignoretext="Como colocar um anúncio" name="okcancelignore" notext="Cancelar" yestext="OK"/>
-	</notification>
 	<notification name="DeleteClassified">
 		Apagar classificado&apos;[NAME]&apos;?
 Não há reembolso por taxas já pagas.
@@ -2832,9 +2825,6 @@ Silenciar todos?
 	<notification label="Explore o mundo" name="HintDestinationGuide">
 		O Guia de Destinos traz milhares de lugares novos para você explorar e conhecer. Selecione um lugar, clique em Teletransportar e comece suas descobertas.
 	</notification>
-	<notification label="Troque o visual" name="HintAvatarPicker">
-		Que tal mudar o visual? Clique o botão abaixo para ver Avatares diferentes.
-	</notification>
 	<notification label="Painel lateral" name="HintSidePanel">
 		Acesse rapidamente seu inventário, roupas, looks, perfis e mais no painel lateral.
 	</notification>
@@ -2872,6 +2862,38 @@ Silenciar todos?
 			<button name="cancel" text="Cancelar"/>
 		</form>
 	</notification>
+	<notification label="" name="ModeChange">
+		Para alterar o modo, é preciso fechar e reiniciar.
+		<usetemplate name="okcancelbuttons" notext="Não sair" yestext="Sair"/>
+	</notification>
+	<notification label="" name="NoClassifieds">
+		É preciso usar o modo Avançado para criar e editar anúncios classificados.  Desejar sair para mudar o modo? Selecione o modo na tela de login.
+		<usetemplate name="okcancelbuttons" notext="Não sair" yestext="Sair"/>
+	</notification>
+	<notification label="" name="NoGroupInfo">
+		É preciso usar o modo Avançado para criar e editar grupos.  Desejar sair para mudar o modo? Selecione o modo na tela de login.
+		<usetemplate name="okcancelbuttons" notext="Não sair" yestext="Sair"/>
+	</notification>
+	<notification label="" name="NoPicks">
+		É preciso usar o modo Avançado para criar e editar Destaques.  Desejar sair para mudar o modo? Selecione o modo na tela de login.
+		<usetemplate name="okcancelbuttons" notext="Não sair" yestext="Sair"/>
+	</notification>
+	<notification label="" name="NoWorldMap">
+		É preciso usar o modo Avançado para ver o mapa-múndi.  Desejar sair para mudar o modo? Selecione o modo na tela de login.
+		<usetemplate name="okcancelbuttons" notext="Não sair" yestext="Sair"/>
+	</notification>
+	<notification label="" name="NoVoiceCall">
+		Ligações de voz devem ser feitas no modo Avançado. Desejar sair para mudar o modo?
+		<usetemplate name="okcancelbuttons" notext="Não sair" yestext="Sair"/>
+	</notification>
+	<notification label="" name="NoAvatarShare">
+		É preciso estar no modo Avançado para compartilhar.  Desejar sair para mudar o modo?
+		<usetemplate name="okcancelbuttons" notext="Não sair" yestext="Sair"/>
+	</notification>
+	<notification label="" name="NoAvatarPay">
+		É preciso usar o modo Avançado para fazer pagamentos a outros residentes.  Desejar sair para mudar o modo?
+		<usetemplate name="okcancelbuttons" notext="Não sair" yestext="Sair"/>
+	</notification>
 	<global name="UnsupportedCPU">
 		- A velocidade da sua CPU não suporta os requisitos mínimos exigidos.
 	</global>
diff --git a/indra/newview/skins/default/xui/pt/panel_login.xml b/indra/newview/skins/default/xui/pt/panel_login.xml
index 42df93fd867d324870f02c13db968411884d6c96..f4af6a7108d6f54c7a426fb88778802cb9880f75 100644
--- a/indra/newview/skins/default/xui/pt/panel_login.xml
+++ b/indra/newview/skins/default/xui/pt/panel_login.xml
@@ -17,6 +17,13 @@
 			</text>
 			<check_box label="Lembrar senha" name="remember_check"/>
 			<button label="conectar" name="connect_btn"/>
+			<text name="mode_selection_text">
+				Modo:
+			</text>
+			<combo_box name="mode_combo" tool_tip="Selecione o modo. O modo Básico é mais rápido e ideal para explorar e conversar. Use o modo Avançado para acessar mais recursos.">
+				<combo_box.item label="Básico" name="Basic"/>
+				<combo_box.item label="Avançado" name="Advanced"/>
+			</combo_box>
 			<text name="start_location_text">
 				Começar em:
 			</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_nearby_media.xml b/indra/newview/skins/default/xui/pt/panel_nearby_media.xml
index 7d1b48ad76f2f32c5c3af9850d29293761f92313..43bf8f966155eec182cd4cd7628410b1742d22a3 100644
--- a/indra/newview/skins/default/xui/pt/panel_nearby_media.xml
+++ b/indra/newview/skins/default/xui/pt/panel_nearby_media.xml
@@ -19,7 +19,7 @@
 		<button label="Parar tudo" name="all_nearby_media_disable_btn" tool_tip="Desligar mídias por perto"/>
 		<button label="Executar tudo" name="all_nearby_media_enable_btn" tool_tip="Ligar mídias por perto"/>
 		<button name="open_prefs_btn" tool_tip="Preferências de mídia"/>
-		<button label="Mais &gt;&gt;" label_selected="Menos &lt;&lt;" name="more_btn" tool_tip="Controles avançados"/>
+		<button label="Mais &gt;&gt;" label_selected="&lt;&lt; Menos" name="more_btn" tool_tip="Controles avançados"/>
 		<button label="Mais &gt;&gt;" label_selected="Menos &lt;&lt;" name="less_btn" tool_tip="Controles avançados"/>
 	</panel>
 	<panel name="nearby_media_panel">
diff --git a/indra/newview/skins/default/xui/pt/panel_people.xml b/indra/newview/skins/default/xui/pt/panel_people.xml
index f1632729a91d50f4fe9855a051f55b6f03db0846..aece30738ba21c6e7c13a703ff8a0339a1624286 100644
--- a/indra/newview/skins/default/xui/pt/panel_people.xml
+++ b/indra/newview/skins/default/xui/pt/panel_people.xml
@@ -18,6 +18,8 @@ Em busca de alguém para conversar? Procure no [secondlife:///app/worldmap Mapa-
 	<string name="groups_filter_label" value="Filtro de grupos"/>
 	<string name="no_filtered_groups_msg" value="Não encontrou o que procura? Tente buscar no [secondlife:///app/search/groups/[SEARCH_TERM] Search]."/>
 	<string name="no_groups_msg" value="À procura de grupos interessantes? Tente fazer uma [secondlife:///app/search/groups Busca]."/>
+	<string name="MiniMapToolTipMsg" value="[REGION](Clique duas vezes para abrir o mapa, shift+arraste para a visão pan)"/>
+	<string name="AltMiniMapToolTipMsg" value="[REGION](Clique duas vezes para teletransportar, shift+arraste para a visão pan)"/>
 	<filter_editor label="Filtro" name="filter_input"/>
 	<tab_container name="tabs">
 		<panel label="PROXIMIDADE" name="nearby_panel">
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
index 368c474ee9d132b38599f9e6a5aa26d29d89067a..412bdbb13ed574f58b53dac901c3ccf61e0bad86 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
@@ -29,7 +29,8 @@
 	<check_box label="Bate-papos de MI" name="EnableIMChatPopups" tool_tip="Exibir pop-up de mensagens instantâneas novas"/>
 	<spinner label="Transição de avisos de bate-papos por perto:" name="nearby_toasts_lifetime"/>
 	<spinner label="Transição de avisos de bate-papos por perto:" name="nearby_toasts_fadingtime"/>
-	<check_box label="Traduzir bate-papo automaticamente (via Google)" name="translate_chat_checkbox"/>
+	<check_box name="translate_chat_checkbox"/>
+	<text name="translate_chb_label" >Traduzir bate-papo automaticamente (via Google)</text>
 	<text name="translate_language_text">
 		Traduzir bate-papo para:
 	</text>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml b/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml
index 3846bfb37715f67f52bfd09a80d188fffd807377..6053deb5b10f1ad937223000beccfc2527f77b07 100644
--- a/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml
@@ -4,7 +4,8 @@
 		Botão do meio do mouse
 	</panel.string>
 	<slider label="Volume principal" name="System Volume"/>
-	<check_box initial_value="true" label="Silenciar ao minimizar" name="mute_when_minimized"/>
+	<check_box initial_value="true" name="mute_when_minimized"/>
+	<text name="mute_chb_label">Silenciar ao minimizar</text>
 	<slider label="Botões" name="UI Volume"/>
 	<slider label="Ambiente" name="Wind Volume"/>
 	<slider label="Efeitos sonoros" name="SFX Volume"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_profile.xml b/indra/newview/skins/default/xui/pt/panel_profile.xml
index f984ed6a7be3268213d8930a5fc7c0927691543e..075ef55dee56999f8b0972bb9dee0ea2dd353fb3 100644
--- a/indra/newview/skins/default/xui/pt/panel_profile.xml
+++ b/indra/newview/skins/default/xui/pt/panel_profile.xml
@@ -16,6 +16,12 @@
 	<string name="RegisterDateFormat">
 		[REG_DATE] ([AGE])
 	</string>
+	<string name="name_text_args">
+		[NAME]
+	</string>
+	<string name="display_name_text_args">
+		[DISPLAY_NAME]
+	</string>
 	<layout_stack name="layout">
 		<layout_panel name="profile_stack">
 			<scroll_container name="profile_scroll">
@@ -30,7 +36,7 @@
 					<text name="title_acc_status_text" value="Conta:"/>
 					<text name="title_partner_text" value="Parceiro(a):"/>
 					<panel name="partner_data_panel">
-						<name_box initial_value="(pesquisando)" name="partner_text"/>
+						<text initial_value="(pesquisando)" name="partner_text"/>
 					</panel>
 					<text name="title_groups_text" value="Grupos:"/>
 				</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_script_ed.xml b/indra/newview/skins/default/xui/pt/panel_script_ed.xml
index 563f4fe054c81d5d1fffc48c6fddafa9bf7ecae6..a1acb18cb4118879844d3f4ee14ae4a4168f9e13 100644
--- a/indra/newview/skins/default/xui/pt/panel_script_ed.xml
+++ b/indra/newview/skins/default/xui/pt/panel_script_ed.xml
@@ -15,6 +15,9 @@
 	<panel.string name="Title">
 		Script: [NOME]
 	</panel.string>
+	<panel.string name="external_editor_not_set">
+		Selecione um editor configurando a variável de ambiente LL_SCRIPT_EDITOR ou o ExternalEditor.
+	</panel.string>
 	<menu_bar name="script_menu">
 		<menu label="Arquivo" name="File">
 			<menu_item_call label="Salvar" name="Save"/>
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
index 06123e0118b3c3c3af471d8616ea0427cd0addb7..47813604ff7f67e65a7fe0329fb180594a73adcc 100644
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -1040,7 +1040,7 @@
 	</string>
 	<string name="WornOnAttachmentPoint" value="(vestido em [ATTACHMENT_POINT])"/>
 	<string name="ActiveGesture" value="[GESLABEL] (ativado)"/>
-	<string name="Chat" value="Bate papo"/>
+	<string name="Chat Message" value="Bate-papo:"/>
 	<string name="Sound" value="Som"/>
 	<string name="Wait" value="--- Aguarde"/>
 	<string name="AnimFlagStop" value="Parar animação"/>
@@ -1822,12 +1822,6 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 	<string name="accel-win-shift">
 		Shift+
 	</string>
-	<string name="Esc">
-		Esc
-	</string>
-	<string name="Home">
-		Início
-	</string>
 	<string name="FileSaved">
 		Arquivo salvo
 	</string>
@@ -1847,7 +1841,7 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 		PDT
 	</string>
 	<string name="Direction_Forward">
-		Avante
+		Frente
 	</string>
 	<string name="Direction_Left">
 		Esquerda
@@ -1871,10 +1865,10 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 		Leste
 	</string>
 	<string name="Direction_Up">
-		Acima
+		P/ cima
 	</string>
 	<string name="Direction_Down">
-		Abaixo
+		P/ baixo
 	</string>
 	<string name="Any Category">
 		Qualquer categoria
@@ -1945,6 +1939,9 @@ Expected .wav, .tga, .bmp, .jpg, .jpeg, or .bvh
 	<string name="Other">
 		Outros
 	</string>
+	<string name="Rental">
+		Aluguel
+	</string>
 	<string name="Any">
 		Qualquer
 	</string>
@@ -3863,7 +3860,7 @@ Denunciar abuso
 	<string name="Notices">
 		Avisos
 	</string>
-	<string name="Chat">
+	<string name="Chat" value="Bate papo">
 		Bate-papo
 	</string>
 	<string name="DeleteItems">
@@ -3875,4 +3872,348 @@ Denunciar abuso
 	<string name="EmptyOutfitText">
 		Este look não possui nenhuma peça
 	</string>
+	<string name="ExternalEditorNotSet">
+		Selecione um editor utilizando a configuração ExternalEditor.
+	</string>
+	<string name="ExternalEditorNotFound">
+		O editor externo especificado não foi localizado.
+Tente colocar o caminho do editor entre aspas.
+(ex. &quot;/caminho para/editor&quot; &quot;%s&quot;)
+	</string>
+	<string name="ExternalEditorCommandParseError">
+		Error ao analisar o comando do editor externo.
+	</string>
+	<string name="ExternalEditorFailedToRun">
+		Falha de execução do editor externo.
+	</string>
+	<string name="Esc">
+		Esc
+	</string>
+	<string name="Space">
+		Space
+	</string>
+	<string name="Enter">
+		Enter
+	</string>
+	<string name="Tab">
+		Tab
+	</string>
+	<string name="Ins">
+		Ins
+	</string>
+	<string name="Del">
+		Del
+	</string>
+	<string name="Backsp">
+		Backsp
+	</string>
+	<string name="Shift">
+		Shift
+	</string>
+	<string name="Ctrl">
+		Ctrl
+	</string>
+	<string name="Alt">
+		Alt
+	</string>
+	<string name="CapsLock">
+		CapsLock
+	</string>
+	<string name="Home">
+		Início
+	</string>
+	<string name="End">
+		End
+	</string>
+	<string name="PgUp">
+		PgUp
+	</string>
+	<string name="PgDn">
+		PgDn
+	</string>
+	<string name="F1">
+		F1
+	</string>
+	<string name="F2">
+		F2
+	</string>
+	<string name="F3">
+		F3
+	</string>
+	<string name="F4">
+		F4
+	</string>
+	<string name="F5">
+		F5
+	</string>
+	<string name="F6">
+		F6
+	</string>
+	<string name="F7">
+		F7
+	</string>
+	<string name="F8">
+		F8
+	</string>
+	<string name="F9">
+		F9
+	</string>
+	<string name="F10">
+		F10
+	</string>
+	<string name="F11">
+		F11
+	</string>
+	<string name="F12">
+		F12
+	</string>
+	<string name="Add">
+		Adicionar
+	</string>
+	<string name="Subtract">
+		Subtrair
+	</string>
+	<string name="Multiply">
+		Multiplicar
+	</string>
+	<string name="Divide">
+		Dividir
+	</string>
+	<string name="PAD_DIVIDE">
+		PAD_DIVIDE
+	</string>
+	<string name="PAD_LEFT">
+		PAD_LEFT
+	</string>
+	<string name="PAD_RIGHT">
+		PAD_RIGHT
+	</string>
+	<string name="PAD_DOWN">
+		PAD_DOWN
+	</string>
+	<string name="PAD_UP">
+		PAD_UP
+	</string>
+	<string name="PAD_HOME">
+		PAD_HOME
+	</string>
+	<string name="PAD_END">
+		PAD_END
+	</string>
+	<string name="PAD_PGUP">
+		PAD_PGUP
+	</string>
+	<string name="PAD_PGDN">
+		PAD_PGDN
+	</string>
+	<string name="PAD_CENTER">
+		PAD_CENTER
+	</string>
+	<string name="PAD_INS">
+		PAD_INS
+	</string>
+	<string name="PAD_DEL">
+		PAD_DEL
+	</string>
+	<string name="PAD_Enter">
+		PAD_Enter
+	</string>
+	<string name="PAD_BUTTON0">
+		PAD_BUTTON0
+	</string>
+	<string name="PAD_BUTTON1">
+		PAD_BUTTON1
+	</string>
+	<string name="PAD_BUTTON2">
+		PAD_BUTTON2
+	</string>
+	<string name="PAD_BUTTON3">
+		PAD_BUTTON3
+	</string>
+	<string name="PAD_BUTTON4">
+		PAD_BUTTON4
+	</string>
+	<string name="PAD_BUTTON5">
+		PAD_BUTTON5
+	</string>
+	<string name="PAD_BUTTON6">
+		PAD_BUTTON6
+	</string>
+	<string name="PAD_BUTTON7">
+		PAD_BUTTON7
+	</string>
+	<string name="PAD_BUTTON8">
+		PAD_BUTTON8
+	</string>
+	<string name="PAD_BUTTON9">
+		PAD_BUTTON9
+	</string>
+	<string name="PAD_BUTTON10">
+		PAD_BUTTON10
+	</string>
+	<string name="PAD_BUTTON11">
+		PAD_BUTTON11
+	</string>
+	<string name="PAD_BUTTON12">
+		PAD_BUTTON12
+	</string>
+	<string name="PAD_BUTTON13">
+		PAD_BUTTON13
+	</string>
+	<string name="PAD_BUTTON14">
+		PAD_BUTTON14
+	</string>
+	<string name="PAD_BUTTON15">
+		PAD_BUTTON15
+	</string>
+	<string name="-">
+		-
+	</string>
+	<string name="=">
+		=
+	</string>
+	<string name="`">
+		`
+	</string>
+	<string name=";">
+		;
+	</string>
+	<string name="[">
+		[
+	</string>
+	<string name="]">
+		]
+	</string>
+	<string name="\">
+		\
+	</string>
+	<string name="0">
+		0
+	</string>
+	<string name="1">
+		1
+	</string>
+	<string name="2">
+		2
+	</string>
+	<string name="3">
+		3
+	</string>
+	<string name="4">
+		4
+	</string>
+	<string name="5">
+		5
+	</string>
+	<string name="6">
+		6
+	</string>
+	<string name="7">
+		7
+	</string>
+	<string name="8">
+		8
+	</string>
+	<string name="9">
+		9
+	</string>
+	<string name="A">
+		A
+	</string>
+	<string name="B">
+		B
+	</string>
+	<string name="C">
+		C
+	</string>
+	<string name="D">
+		D
+	</string>
+	<string name="E">
+		E
+	</string>
+	<string name="F">
+		F
+	</string>
+	<string name="G">
+		G
+	</string>
+	<string name="H">
+		H
+	</string>
+	<string name="I">
+		I
+	</string>
+	<string name="J">
+		J
+	</string>
+	<string name="K">
+		K
+	</string>
+	<string name="L">
+		L
+	</string>
+	<string name="M">
+		M
+	</string>
+	<string name="N">
+		N
+	</string>
+	<string name="O">
+		O
+	</string>
+	<string name="P">
+		P
+	</string>
+	<string name="Q">
+		Q
+	</string>
+	<string name="R">
+		R
+	</string>
+	<string name="S">
+		S
+	</string>
+	<string name="T">
+		T
+	</string>
+	<string name="U">
+		U
+	</string>
+	<string name="V">
+		V
+	</string>
+	<string name="W">
+		W
+	</string>
+	<string name="X">
+		X
+	</string>
+	<string name="Y">
+		Y
+	</string>
+	<string name="Z">
+		Z
+	</string>
+	<string name="BeaconParticle">
+		Vendo balizas de partículas (azul)
+	</string>
+	<string name="BeaconPhysical">
+		Vendo balizas de objetos físicos (verde)
+	</string>
+	<string name="BeaconScripted">
+		Vendo balizas de objetos com script (vermelho)
+	</string>
+	<string name="BeaconScriptedTouch">
+		Vendo objeto com script com balizas com funcionalidade de toque (vermelho)
+	</string>
+	<string name="BeaconSound">
+		Vendo balizas de som (amarelo)
+	</string>
+	<string name="BeaconMedia">
+		Vendo balizas de mídia (branco)
+	</string>
+	<string name="ParticleHiding">
+		Ocultar partículas
+	</string>
 </strings>
diff --git a/indra/newview/skins/minimal/colors.xml b/indra/newview/skins/minimal/colors.xml
new file mode 100644
index 0000000000000000000000000000000000000000..097a298ce5c2efd2316cca2b738691df213e489e
--- /dev/null
+++ b/indra/newview/skins/minimal/colors.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<colors>
+    <color
+     name="MenuBarBgColor"
+     value="0 0 0 0" />
+</colors>
diff --git a/indra/newview/skins/minimal/textures/arrow_keys.png b/indra/newview/skins/minimal/textures/arrow_keys.png
new file mode 100644
index 0000000000000000000000000000000000000000..f19af59251c46159a0aa6f5ec983a66df961c703
Binary files /dev/null and b/indra/newview/skins/minimal/textures/arrow_keys.png differ
diff --git a/indra/newview/skins/minimal/textures/bottomtray/button_separator.png b/indra/newview/skins/minimal/textures/bottomtray/button_separator.png
new file mode 100644
index 0000000000000000000000000000000000000000..71ed25f931b519d9d4f2a074b4ce150c5889e9ed
Binary files /dev/null and b/indra/newview/skins/minimal/textures/bottomtray/button_separator.png differ
diff --git a/indra/newview/skins/minimal/textures/bottomtray/close_off.png b/indra/newview/skins/minimal/textures/bottomtray/close_off.png
new file mode 100644
index 0000000000000000000000000000000000000000..241a24bde904c3a84f9f341858a382abef23330f
Binary files /dev/null and b/indra/newview/skins/minimal/textures/bottomtray/close_off.png differ
diff --git a/indra/newview/skins/minimal/textures/bottomtray/close_over.png b/indra/newview/skins/minimal/textures/bottomtray/close_over.png
new file mode 100644
index 0000000000000000000000000000000000000000..4630cb6dd69960bbf6de23c60014bbd91608d7ae
Binary files /dev/null and b/indra/newview/skins/minimal/textures/bottomtray/close_over.png differ
diff --git a/indra/newview/skins/minimal/textures/bottomtray/close_press.png b/indra/newview/skins/minimal/textures/bottomtray/close_press.png
new file mode 100644
index 0000000000000000000000000000000000000000..3ed9c99a26f13d93756eba2ba4dba9c1b3cba9d8
Binary files /dev/null and b/indra/newview/skins/minimal/textures/bottomtray/close_press.png differ
diff --git a/indra/newview/skins/minimal/textures/click_to_move.png b/indra/newview/skins/minimal/textures/click_to_move.png
new file mode 100644
index 0000000000000000000000000000000000000000..74e3faa8ffb62e2ce71f1898ef199f692c9b4da4
Binary files /dev/null and b/indra/newview/skins/minimal/textures/click_to_move.png differ
diff --git a/indra/newview/skins/minimal/textures/textures.xml b/indra/newview/skins/minimal/textures/textures.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b4848a0619694b0d5d7235e8ffe826506423797e
--- /dev/null
+++ b/indra/newview/skins/minimal/textures/textures.xml
@@ -0,0 +1,9 @@
+
+<textures version="101">
+  <texture name="Button_Separator" file_name="bottomtray/button_separator.png" preload="true" />
+  <texture name="arrow_keys.png"/>
+  <texture name="click_to_move" file_name="click_to_move.png"/>
+  <texture name="bottomtray_close_off" file_name="bottomtray/close_off.png" preload="true" />
+  <texture name="bottomtray_close_over" file_name="bottomtray/close_over.png" preload="true" />
+  <texture name="bottomtray_close_press" file_name="bottomtray/close_press.png" preload="true" />
+</textures>
diff --git a/indra/newview/skins/minimal/xui/de/floater_camera.xml b/indra/newview/skins/minimal/xui/de/floater_camera.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d49c207f98c0996d1715a618e54a55c6b2479682
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/floater_camera.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="camera_floater">
+	<floater.string name="rotate_tooltip">
+		Kamera um Fokus drehen
+	</floater.string>
+	<floater.string name="zoom_tooltip">
+		Kamera auf Fokus zoomen
+	</floater.string>
+	<floater.string name="move_tooltip">
+		Kamera nach oben, unten, links und rechts bewegen
+	</floater.string>
+	<floater.string name="camera_modes_title">
+		Kameramodi
+	</floater.string>
+	<floater.string name="pan_mode_title">
+		Kreisen - Zoomen - Schwenken
+	</floater.string>
+	<floater.string name="presets_mode_title">
+		Ansichten
+	</floater.string>
+	<floater.string name="free_mode_title">
+		Objekt ansehen
+	</floater.string>
+	<panel name="controls">
+		<panel name="preset_views_list">
+			<panel_camera_item name="front_view">
+				<panel_camera_item.text name="front_view_text">
+					Vorderansicht
+				</panel_camera_item.text>
+			</panel_camera_item>
+			<panel_camera_item name="group_view">
+				<panel_camera_item.text name="side_view_text">
+					Seitenansicht
+				</panel_camera_item.text>
+			</panel_camera_item>
+			<panel_camera_item name="rear_view">
+				<panel_camera_item.text name="rear_view_text">
+					Hinteransicht
+				</panel_camera_item.text>
+			</panel_camera_item>
+		</panel>
+		<panel name="camera_modes_list">
+			<panel_camera_item name="object_view">
+				<panel_camera_item.text name="object_view_text">
+					Objektansicht
+				</panel_camera_item.text>
+			</panel_camera_item>
+			<panel_camera_item name="mouselook_view">
+				<panel_camera_item.text name="mouselook_view_text">
+					Mouselook
+				</panel_camera_item.text>
+			</panel_camera_item>
+		</panel>
+		<panel name="zoom" tool_tip="Kamera auf Fokus zoomen">
+			<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus kreisen"/>
+			<slider_bar name="zoom_slider" tool_tip="Kamera auf Fokus zoomen"/>
+			<joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/>
+		</panel>
+	</panel>
+	<panel name="buttons">
+		<button label="" name="presets_btn" tool_tip="Ansichten"/>
+		<button label="" name="pan_btn" tool_tip="Kreisen - Zoomen - Schwenken"/>
+		<button label="" name="avatarview_btn" tool_tip="Kameramodi"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/de/floater_help_browser.xml b/indra/newview/skins/minimal/xui/de/floater_help_browser.xml
new file mode 100644
index 0000000000000000000000000000000000000000..459dfb66c0d0ff6f153e62800752ec544c34ad77
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/floater_help_browser.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_help_browser" title="ANWEISUNGEN">
+	<floater.string name="loading_text">
+		Wird geladen...
+	</floater.string>
+	<layout_stack name="stack1">
+		<layout_panel name="external_controls"/>
+	</layout_stack>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/de/floater_media_browser.xml b/indra/newview/skins/minimal/xui/de/floater_media_browser.xml
new file mode 100644
index 0000000000000000000000000000000000000000..63cf4a6cba3ea65b1e9d3dbca26ed33ff7034c7f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/floater_media_browser.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="MEDIEN-BROWSER">
+	<floater.string name="home_page_url">
+		http://www.secondlife.com
+	</floater.string>
+	<floater.string name="support_page_url">
+		http://support.secondlife.com
+	</floater.string>
+	<layout_stack name="stack1">
+		<layout_panel name="nav_controls">
+			<button label="Zurück" name="back"/>
+			<button label="Vorwärts" name="forward"/>
+			<button label="Neu laden" name="reload"/>
+			<button label="Los" name="go"/>
+		</layout_panel>
+		<layout_panel name="time_controls">
+			<button label="zurück" name="rewind"/>
+			<button label="anhalten" name="stop"/>
+			<button label="vorwärts" name="seek"/>
+		</layout_panel>
+		<layout_panel name="parcel_owner_controls">
+			<button label="Aktuelle Seite an Parzelle senden" name="assign"/>
+		</layout_panel>
+		<layout_panel name="external_controls">
+			<button label="In meinem Browser öffnen" name="open_browser"/>
+			<check_box label="Immer in meinem Browser öffnen" name="open_always"/>
+			<button label="Schließen" name="close"/>
+		</layout_panel>
+	</layout_stack>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/de/floater_nearby_chat.xml b/indra/newview/skins/minimal/xui/de/floater_nearby_chat.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bbb4114200d9c3707f5c5d81554cbfde3dd99364
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/floater_nearby_chat.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="nearby_chat" title="CHAT IN DER NÄHE">
+	<check_box label="Chat übersetzen (Service von Google)" name="translate_chat_checkbox"/>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/de/floater_web_content.xml b/indra/newview/skins/minimal/xui/de/floater_web_content.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6ab119eeab2b9a54049181e2b9af2a198e87019d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/floater_web_content.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_web_content" title="">
+	<layout_stack name="stack1">
+		<layout_panel name="nav_controls">
+			<button name="back" tool_tip="Rückwärts"/>
+			<button name="forward" tool_tip="Vorwärts"/>
+			<button name="stop" tool_tip="Navigation stoppen"/>
+			<button name="reload" tool_tip="Seite neu laden"/>
+			<combo_box name="address" tool_tip="URL hier eingeben"/>
+			<icon name="media_secure_lock_flag" tool_tip="Sicheres Browsen"/>
+			<button name="popexternal" tool_tip="Aktuelle URL im Desktop-Browser öffnen"/>
+		</layout_panel>
+	</layout_stack>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/de/inspect_avatar.xml b/indra/newview/skins/minimal/xui/de/inspect_avatar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4b8fd8a0ad1d125f28de057a1a06bc7119168385
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/inspect_avatar.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="inspect_avatar">
+	<string name="Subtitle">
+		[AGE]
+	</string>
+	<string name="Details">
+		[SL_PROFILE]
+	</string>
+	<text name="user_subtitle" value="11 Monate und 3 Tage alt"/>
+	<text name="user_details">
+		Dies ist meine Second Life-Beschreibung und ich finde sie wirklich gut! Meine Beschreibung ist deshalb so lang, weil ich gerne rede.
+	</text>
+	<slider name="volume_slider" tool_tip="Lautstärke" value="0.5"/>
+	<button label="Freund hinzufügen" name="add_friend_btn" width="110"/>
+	<button label="IM" name="im_btn"/>
+	<button label="Profil" left_delta="120" name="view_profile_btn" width="44"/>
+	<panel name="moderator_panel">
+		<button label="Voice deaktivieren" name="disable_voice"/>
+		<button label="Voice aktivieren" name="enable_voice"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/de/inspect_object.xml b/indra/newview/skins/minimal/xui/de/inspect_object.xml
new file mode 100644
index 0000000000000000000000000000000000000000..72b8235828e58e3280170ad4fbee0833a456780b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/inspect_object.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="inspect_object">
+	<string name="Creator">
+		Von [CREATOR]
+	</string>
+	<string name="CreatorAndOwner">
+		Von [CREATOR]
+Besitzer [OWNER]
+	</string>
+	<string name="Price">
+		[AMOUNT] L$
+	</string>
+	<string name="PriceFree">
+		Kostenlos!
+	</string>
+	<string name="Touch">
+		Berühren
+	</string>
+	<string name="Sit">
+		Sitzen
+	</string>
+	<text name="object_name" value="Test für ein Objektname der sehr lange ist und über zwei Zeilen geht."/>
+	<text name="object_creator">
+		von secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
+Besitzer secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
+	</text>
+	<text name="price_text">
+		30.000 L$
+	</text>
+	<text name="object_description">
+		Dies ist eine wirklich lange Beschreibung für ein Objekt, mindestens 80 Zeichen lang oder jetzt schon mindestens 120 Zeichen lang und länger als der englische Originaltext. Niemand weiß es genau.
+	</text>
+	<text name="object_media_url">
+		http://www.superdupertest.com
+	</text>
+	<button label="Kaufen" name="buy_btn"/>
+	<button label="Bezahlen" name="pay_btn"/>
+	<button label="Kopie nehmen" name="take_free_copy_btn" width="100"/>
+	<button label="Berühren" name="touch_btn"/>
+	<button label="Sitzen" name="sit_btn"/>
+	<button label="Öffnen" name="open_btn"/>
+	<icon name="secure_browsing" tool_tip="Sicheres Browsen"/>
+	<button label="Mehr" name="more_info_btn"/>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/de/menu_add_wearable_gear.xml b/indra/newview/skins/minimal/xui/de/menu_add_wearable_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f3775a05ec351aafa26a32b26741265ff78e6276
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_add_wearable_gear.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Add Wearable Gear Menu">
+	<menu_item_check label="Nach aktuellesten Objekten sortieren" name="sort_by_most_recent"/>
+	<menu_item_check label="Nach Name sortieren" name="sort_by_name"/>
+	<menu_item_check label="Nach Typ sortieren" name="sort_by_type"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_attachment_other.xml b/indra/newview/skins/minimal/xui/de/menu_attachment_other.xml
new file mode 100644
index 0000000000000000000000000000000000000000..237c92f7d260355ae8fdc337074b358fe91bf132
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_attachment_other.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- *NOTE: See also menu_avatar_other.xml -->
+<context_menu name="Avatar Pie">
+	<menu_item_call label="Profil anzeigen" name="Profile..."/>
+	<menu_item_call label="Freund hinzufügen" name="Add Friend"/>
+	<menu_item_call label="IM" name="Send IM..."/>
+	<menu_item_call label="Anrufen" name="Call"/>
+	<menu_item_call label="In Gruppe einladen" name="Invite..."/>
+	<menu_item_call label="Ignorieren" name="Avatar Mute"/>
+	<menu_item_call label="Melden" name="abuse"/>
+	<menu_item_call label="Einfrieren" name="Freeze..."/>
+	<menu_item_call label="Hinauswerfen" name="Eject..."/>
+	<menu_item_call label="Fehler in Texturen beseitigen" name="Debug..."/>
+	<menu_item_call label="Hineinzoomen" name="Zoom In"/>
+	<menu_item_call label="Bezahlen" name="Pay..."/>
+	<menu_item_call label="Objektprofil" name="Object Inspect"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_attachment_self.xml b/indra/newview/skins/minimal/xui/de/menu_attachment_self.xml
new file mode 100644
index 0000000000000000000000000000000000000000..644fc68ba4e8c389b6e38723692ba005552c605c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_attachment_self.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Attachment Pie">
+	<menu_item_call label="Berühren" name="Attachment Object Touch"/>
+	<menu_item_call label="Bearbeiten" name="Edit..."/>
+	<menu_item_call label="Abnehmen" name="Detach"/>
+	<menu_item_call label="Hinsetzen" name="Sit Down Here"/>
+	<menu_item_call label="Aufstehen" name="Stand Up"/>
+	<menu_item_call label="Outfit ändern" name="Change Outfit"/>
+	<menu_item_call label="Mein Outfit bearbeiten" name="Edit Outfit"/>
+	<menu_item_call label="Meine Form bearbeiten" name="Edit My Shape"/>
+	<menu_item_call label="Meine Freunde" name="Friends..."/>
+	<menu_item_call label="Meine Gruppen" name="Groups..."/>
+	<menu_item_call label="Mein Profil" name="Profile..."/>
+	<menu_item_call label="Fehler in Texturen beseitigen" name="Debug..."/>
+	<menu_item_call label="Fallen lassen" name="Drop"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_avatar_icon.xml b/indra/newview/skins/minimal/xui/de/menu_avatar_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c036cf5515e3c8ca08dca584b509cbd8d0f235cc
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_avatar_icon.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Avatar Icon Menu">
+	<menu_item_call label="Profil anzeigen" name="Show Profile"/>
+	<menu_item_call label="IM senden..." name="Send IM"/>
+	<menu_item_call label="Freund hinzufügen..." name="Add Friend"/>
+	<menu_item_call label="Freund entfernen..." name="Remove Friend"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_avatar_other.xml b/indra/newview/skins/minimal/xui/de/menu_avatar_other.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8aee0be3d2e1d8b6786cad226911dba60ff965c7
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_avatar_other.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- *NOTE: See also menu_attachment_other.xml -->
+<context_menu name="Avatar Pie">
+	<menu_item_call label="Profil anzeigen" name="Profile..."/>
+	<menu_item_call label="Freund hinzufügen" name="Add Friend"/>
+	<menu_item_call label="IM" name="Send IM..."/>
+	<menu_item_call label="Anrufen" name="Call"/>
+	<menu_item_call label="In Gruppe einladen" name="Invite..."/>
+	<menu_item_call label="Ignorieren" name="Avatar Mute"/>
+	<menu_item_call label="Melden" name="abuse"/>
+	<menu_item_call label="Einfrieren" name="Freeze..."/>
+	<menu_item_call label="Hinauswerfen" name="Eject..."/>
+	<menu_item_call label="Fehler in Texturen beseitigen" name="Debug..."/>
+	<menu_item_call label="Hineinzoomen" name="Zoom In"/>
+	<menu_item_call label="Bezahlen" name="Pay..."/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_avatar_self.xml b/indra/newview/skins/minimal/xui/de/menu_avatar_self.xml
new file mode 100644
index 0000000000000000000000000000000000000000..582c76ac94556ad4c55655cb7dd2f18694aaaa84
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_avatar_self.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Self Pie">
+	<menu_item_call label="Hinsetzen" name="Sit Down Here"/>
+	<menu_item_call label="Aufstehen" name="Stand Up"/>
+	<context_menu label="Ausziehen" name="Take Off &gt;">
+		<context_menu label="Kleidung" name="Clothes &gt;">
+			<menu_item_call label="Hemd" name="Shirt"/>
+			<menu_item_call label="Hose" name="Pants"/>
+			<menu_item_call label="Rock" name="Skirt"/>
+			<menu_item_call label="Schuhe" name="Shoes"/>
+			<menu_item_call label="Strümpfe" name="Socks"/>
+			<menu_item_call label="Jacke" name="Jacket"/>
+			<menu_item_call label="Handschuhe" name="Gloves"/>
+			<menu_item_call label="Unterhemd" name="Self Undershirt"/>
+			<menu_item_call label="Unterhose" name="Self Underpants"/>
+			<menu_item_call label="Tätowierung" name="Self Tattoo"/>
+			<menu_item_call label="Alpha" name="Self Alpha"/>
+			<menu_item_call label="Alle Kleider" name="All Clothes"/>
+		</context_menu>
+		<context_menu label="HUD" name="Object Detach HUD"/>
+		<context_menu label="Abnehmen" name="Object Detach"/>
+		<menu_item_call label="Alles abnehmen" name="Detach All"/>
+	</context_menu>
+	<menu_item_call label="Outfit ändern" name="Chenge Outfit"/>
+	<menu_item_call label="Mein Outfit bearbeiten" name="Edit Outfit"/>
+	<menu_item_call label="Meine Form bearbeiten" name="Edit My Shape"/>
+	<menu_item_call label="Meine Freunde" name="Friends..."/>
+	<menu_item_call label="Meine Gruppen" name="Groups..."/>
+	<menu_item_call label="Mein Profil" name="Profile..."/>
+	<menu_item_call label="Fehler in Texturen beseitigen" name="Debug..."/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_bottomtray.xml b/indra/newview/skins/minimal/xui/de/menu_bottomtray.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6c4308286a6127315f61ef644ec6bba56a4d2564
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_bottomtray.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="hide_camera_move_controls_menu">
+	<menu_item_check label="Schaltfläche Gesten" name="ShowGestureButton"/>
+	<menu_item_check label="Schaltfläche Bewegungssteuerung" name="ShowMoveButton"/>
+	<menu_item_check label="Schaltfläche Ansicht" name="ShowCameraButton"/>
+	<menu_item_check label="Schaltfläche Foto" name="ShowSnapshotButton"/>
+	<menu_item_check label="Schaltfläche „Seitenleiste“" name="ShowSidebarButton"/>
+	<menu_item_check label="Schaltfläche „Bauen“" name="ShowBuildButton"/>
+	<menu_item_check label="Schaltfläche „Suchen“" name="ShowSearchButton"/>
+	<menu_item_check label="Schaltfläche „Karte“" name="ShowWorldMapButton"/>
+	<menu_item_check label="Schaltfläche „Minikarte“" name="ShowMiniMapButton"/>
+	<menu_item_call label="Ausschneiden" name="NearbyChatBar_Cut"/>
+	<menu_item_call label="Kopieren" name="NearbyChatBar_Copy"/>
+	<menu_item_call label="Einfügen" name="NearbyChatBar_Paste"/>
+	<menu_item_call label="Löschen" name="NearbyChatBar_Delete"/>
+	<menu_item_call label="Alle auswählen" name="NearbyChatBar_Select_All"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_cof_attachment.xml b/indra/newview/skins/minimal/xui/de/menu_cof_attachment.xml
new file mode 100644
index 0000000000000000000000000000000000000000..05d3dfca9dde987eaa946f2ceb6b7bc15e254246
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_cof_attachment.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Attachment">
+	<menu_item_call label="Abnehmen" name="detach"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_cof_body_part.xml b/indra/newview/skins/minimal/xui/de/menu_cof_body_part.xml
new file mode 100644
index 0000000000000000000000000000000000000000..07960a525c7154adaa3a936b2b77ef5fafcaf397
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_cof_body_part.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Body">
+	<menu_item_call label="Ersetzen" name="replace"/>
+	<menu_item_call label="Bearbeiten" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_cof_clothing.xml b/indra/newview/skins/minimal/xui/de/menu_cof_clothing.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7fced273a7892774d6fbd5a94935c67eda5e02cf
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_cof_clothing.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Clothing">
+	<menu_item_call label="Ausziehen" name="take_off"/>
+	<menu_item_call label="Ersetzen" name="replace"/>
+	<menu_item_call label="Eine Kategorie nach oben" name="move_up"/>
+	<menu_item_call label="Eine Kategorie nach unten" name="move_down"/>
+	<menu_item_call label="Bearbeiten" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_cof_gear.xml b/indra/newview/skins/minimal/xui/de/menu_cof_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..54b218d22f73509627db704a0d965f5f2175a2ad
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_cof_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear COF">
+	<menu label="Neue Kleider" name="COF.Gear.New_Clothes"/>
+	<menu label="Neue Körperteile" name="COF.Geear.New_Body_Parts"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_edit.xml b/indra/newview/skins/minimal/xui/de/menu_edit.xml
new file mode 100644
index 0000000000000000000000000000000000000000..37f68d68d500f4d27b2b48a851121b2ff45dfbe4
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_edit.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu label="Bearbeiten" name="Edit">
+	<menu_item_call label="Rückgängig" name="Undo"/>
+	<menu_item_call label="Wiederherstellen" name="Redo"/>
+	<menu_item_call label="Ausschneiden" name="Cut"/>
+	<menu_item_call label="Kopieren" name="Copy"/>
+	<menu_item_call label="Einfügen" name="Paste"/>
+	<menu_item_call label="Löschen" name="Delete"/>
+	<menu_item_call label="Duplizieren" name="Duplicate"/>
+	<menu_item_call label="Alle auswählen" name="Select All"/>
+	<menu_item_call label="Auswahl aufheben" name="Deselect"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_favorites.xml b/indra/newview/skins/minimal/xui/de/menu_favorites.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0d0491d2ebce0eed87ae41cf424989c571cf3ee8
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_favorites.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Teleportieren" name="Teleport To Landmark"/>
+	<menu_item_call label="Landmarken anzeigen/bearbeiten" name="Landmark Open"/>
+	<menu_item_call label="SLurl kopieren" name="Copy slurl"/>
+	<menu_item_call label="Auf Karte zeigen" name="Show On Map"/>
+	<menu_item_call label="Kopieren" name="Landmark Copy"/>
+	<menu_item_call label="Einfügen" name="Landmark Paste"/>
+	<menu_item_call label="Löschen" name="Delete"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_gesture_gear.xml b/indra/newview/skins/minimal/xui/de/menu_gesture_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..953c0eeed579161f40c165931fcb8f762bd50218
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_gesture_gear.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_gesture_gear">
+	<menu_item_call label="Zu Favoriten hinzufügen/daraus entfernen" name="activate"/>
+	<menu_item_call label="Kopieren" name="copy_gesture"/>
+	<menu_item_call label="Einfügen" name="paste"/>
+	<menu_item_call label="UUID kopieren" name="copy_uuid"/>
+	<menu_item_call label="Aktuelles Outfit speichern" name="save_to_outfit"/>
+	<menu_item_call label="Bearbeiten" name="edit_gesture"/>
+	<menu_item_call label="Untersuchen" name="inspect"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_group_plus.xml b/indra/newview/skins/minimal/xui/de/menu_group_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..583ee793be67acaf65be10bf2f0b2da83d2ed43e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_group_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_call label="Werden Sie Mitglied..." name="item_join"/>
+	<menu_item_call label="Neue Gruppe..." name="item_new"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_hide_navbar.xml b/indra/newview/skins/minimal/xui/de/menu_hide_navbar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9acf96dc6d2145dc75c6817459553277c8090408
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_hide_navbar.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="hide_navbar_menu">
+	<menu_item_check label="Navigationsleiste anzeigen" name="ShowNavbarNavigationPanel"/>
+	<menu_item_check label="Favoritenleiste anzeigen" name="ShowNavbarFavoritesPanel"/>
+	<menu_item_check label="Mini-Standortleiste anzeigen" name="ShowMiniLocationPanel"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_im_well_button.xml b/indra/newview/skins/minimal/xui/de/menu_im_well_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f464b71f4a7062e50df3b217e40323ef2dff7912
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_im_well_button.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="IM Well Button Context Menu">
+	<menu_item_call label="Alle schließen" name="Close All"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_imchiclet_adhoc.xml b/indra/newview/skins/minimal/xui/de/menu_imchiclet_adhoc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..11f93f47b4717d0b7075205c63b414c5000151e5
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_imchiclet_adhoc.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="IMChiclet AdHoc Menu">
+	<menu_item_call label="Sitzung beenden" name="End Session"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_imchiclet_group.xml b/indra/newview/skins/minimal/xui/de/menu_imchiclet_group.xml
new file mode 100644
index 0000000000000000000000000000000000000000..81ef3b65692771d090c1db1f208959a6ef1ba815
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_imchiclet_group.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="IMChiclet Group Menu">
+	<menu_item_call label="Gruppeninfo" name="Show Profile"/>
+	<menu_item_call label="Sitzung anzeigen" name="Chat"/>
+	<menu_item_call label="Sitzung beenden" name="End Session"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_imchiclet_p2p.xml b/indra/newview/skins/minimal/xui/de/menu_imchiclet_p2p.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d1232382462e17060391a35156da65121c32bb2a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_imchiclet_p2p.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="IMChiclet P2P Menu">
+	<menu_item_call label="Profil anzeigen" name="Show Profile"/>
+	<menu_item_call label="Freund hinzufügen" name="Add Friend"/>
+	<menu_item_call label="Sitzung anzeigen" name="Send IM"/>
+	<menu_item_call label="Sitzung beenden" name="End Session"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_inspect_avatar_gear.xml b/indra/newview/skins/minimal/xui/de/menu_inspect_avatar_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fbc119c4833278ba2c7a41997676438ece734cf6
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_inspect_avatar_gear.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<toggleable_menu name="Gear Menu">
+	<menu_item_call label="Profil anzeigen" name="view_profile"/>
+	<menu_item_call label="Freund hinzufügen" name="add_friend"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="Teleportieren" name="teleport"/>
+	<menu_item_call label="Ignorieren" name="block"/>
+	<menu_item_call label="Freischalten" name="unblock"/>
+	<menu_item_call label="Melden" name="report"/>
+	<menu_item_call label="Einfrieren" name="freeze"/>
+	<menu_item_call label="Hinauswerfen" name="eject"/>
+	<menu_item_call label="Hinauswerfen" name="kick"/>
+	<menu_item_call label="CSR" name="csr"/>
+	<menu_item_call label="Fehler in Texturen beseitigen" name="debug"/>
+	<menu_item_call label="Auf Karte anzeigen" name="find_on_map"/>
+	<menu_item_call label="Hineinzoomen" name="zoom_in"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_inspect_object_gear.xml b/indra/newview/skins/minimal/xui/de/menu_inspect_object_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7c47913e30feaeec58d6c3fb55398c2f5c69ba5f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_inspect_object_gear.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu name="Gear Menu">
+	<menu_item_call label="Berühren" name="touch"/>
+	<menu_item_call label="Sitzen" name="sit"/>
+	<menu_item_call label="Bezahlen" name="pay"/>
+	<menu_item_call label="Kaufen" name="buy"/>
+	<menu_item_call label="Nehmen" name="take"/>
+	<menu_item_call label="Kopie nehmen" name="take_copy"/>
+	<menu_item_call label="Öffnen" name="open"/>
+	<menu_item_call label="Bearbeiten" name="edit"/>
+	<menu_item_call label="Anziehen" name="wear"/>
+	<menu_item_call label="Hinzufügen" name="add"/>
+	<menu_item_call label="Melden" name="report"/>
+	<menu_item_call label="Ignorieren" name="block"/>
+	<menu_item_call label="Hineinzoomen" name="zoom_in"/>
+	<menu_item_call label="Entfernen" name="remove"/>
+	<menu_item_call label="Weitere Infos" name="more_info"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_inspect_self_gear.xml b/indra/newview/skins/minimal/xui/de/menu_inspect_self_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..443092319b5049a5ea9d7a905d202c58c4d95d31
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_inspect_self_gear.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Self Pie">
+	<menu_item_call label="Hinsetzen" name="Sit Down Here"/>
+	<menu_item_call label="Aufstehen" name="Stand Up"/>
+	<menu_item_call label="Meine Freunde" name="Friends..."/>
+	<menu_item_call label="Mein Profil" name="Profile..."/>
+	<menu_item_call label="Fehler in Texturen beseitigen" name="Debug..."/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_inv_offer_chiclet.xml b/indra/newview/skins/minimal/xui/de/menu_inv_offer_chiclet.xml
new file mode 100644
index 0000000000000000000000000000000000000000..71cff7136bb571f98378c59375b10ecb56e0cb5f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_inv_offer_chiclet.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="InvOfferChiclet Menu">
+	<menu_item_call label="Schließen" name="Close"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_inventory.xml b/indra/newview/skins/minimal/xui/de/menu_inventory.xml
new file mode 100644
index 0000000000000000000000000000000000000000..43722e0dcf692bfb667dbc391a11aa2636077829
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_inventory.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Teilen" name="Share"/>
+	<menu_item_call label="Kaufen" name="Task Buy"/>
+	<menu_item_call label="Öffnen" name="Task Open"/>
+	<menu_item_call label="Abspielen" name="Task Play"/>
+	<menu_item_call label="Eigenschaften" name="Task Properties"/>
+	<menu_item_call label="Umbenennen" name="Task Rename"/>
+	<menu_item_call label="Löschen" name="Task Remove"/>
+	<menu_item_call label="Papierkorb ausleeren" name="Empty Trash"/>
+	<menu_item_call label="Fundstücke ausleeren" name="Empty Lost And Found"/>
+	<menu_item_call label="Neuer Ordner" name="New Folder"/>
+	<menu_item_call label="Neues Skript" name="New Script"/>
+	<menu_item_call label="Neue Notizkarte" name="New Note"/>
+	<menu_item_call label="Neue Geste" name="New Gesture"/>
+	<menu label="Neue Kleider" name="New Clothes">
+		<menu_item_call label="Neues Hemd" name="New Shirt"/>
+		<menu_item_call label="Neue Hose" name="New Pants"/>
+		<menu_item_call label="Neue Schuhe" name="New Shoes"/>
+		<menu_item_call label="Neue Socken" name="New Socks"/>
+		<menu_item_call label="Neue Jacke" name="New Jacket"/>
+		<menu_item_call label="Neuer Rock" name="New Skirt"/>
+		<menu_item_call label="Neue Handschuhe" name="New Gloves"/>
+		<menu_item_call label="Neues Unterhemd" name="New Undershirt"/>
+		<menu_item_call label="Neue Unterhose" name="New Underpants"/>
+		<menu_item_call label="Neue Alpha-Maske" name="New Alpha Mask"/>
+		<menu_item_call label="Neue Tätowierung" name="New Tattoo"/>
+	</menu>
+	<menu label="Neue Körperteile" name="New Body Parts">
+		<menu_item_call label="Neue Form/Gestalt" name="New Shape"/>
+		<menu_item_call label="Neue Haut" name="New Skin"/>
+		<menu_item_call label="Neues Haar" name="New Hair"/>
+		<menu_item_call label="Neue Augen" name="New Eyes"/>
+	</menu>
+	<menu label="Typ ändern" name="Change Type">
+		<menu_item_call label="Standard" name="Default"/>
+		<menu_item_call label="Handschuhe" name="Gloves"/>
+		<menu_item_call label="Jacke" name="Jacket"/>
+		<menu_item_call label="Hose" name="Pants"/>
+		<menu_item_call label="Form" name="Shape"/>
+		<menu_item_call label="Schuhe" name="Shoes"/>
+		<menu_item_call label="Hemd" name="Shirt"/>
+		<menu_item_call label="Rock" name="Skirt"/>
+		<menu_item_call label="Unterhose" name="Underpants"/>
+		<menu_item_call label="Unterhemd" name="Undershirt"/>
+	</menu>
+	<menu_item_call label="Teleportieren" name="Landmark Open"/>
+	<menu_item_call label="Öffnen" name="Animation Open"/>
+	<menu_item_call label="Öffnen" name="Sound Open"/>
+	<menu_item_call label="Aktuelles Outfit ersetzen" name="Replace Outfit"/>
+	<menu_item_call label="Zum aktuellen Outfit hinzufügen" name="Add To Outfit"/>
+	<menu_item_call label="Vom aktuellen Outfit entfernen" name="Remove From Outfit"/>
+	<menu_item_call label="Original suchen" name="Find Original"/>
+	<menu_item_call label="Objekt löschen" name="Purge Item"/>
+	<menu_item_call label="Objekt wiederherstellen" name="Restore Item"/>
+	<menu_item_call label="Öffnen" name="Open"/>
+	<menu_item_call label="Original öffnen" name="Open Original"/>
+	<menu_item_call label="Eigenschaften" name="Properties"/>
+	<menu_item_call label="Umbenennen" name="Rename"/>
+	<menu_item_call label="Asset-UUID kopieren" name="Copy Asset UUID"/>
+	<menu_item_call label="Kopieren" name="Copy"/>
+	<menu_item_call label="Einfügen" name="Paste"/>
+	<menu_item_call label="Als Link einfügen" name="Paste As Link"/>
+	<menu_item_call label="Löschen" name="Remove Link"/>
+	<menu_item_call label="Löschen" name="Delete"/>
+	<menu_item_call label="Systemordner löschen" name="Delete System Folder"/>
+	<menu_item_call label="Konferenz-Chat starten" name="Conference Chat Folder"/>
+	<menu_item_call label="Wiedergeben/Abspielen" name="Sound Play"/>
+	<menu_item_call label="Landmarken-Info" name="About Landmark"/>
+	<menu_item_call label="Inworld abspielen" name="Animation Play"/>
+	<menu_item_call label="Lokal abspielen" name="Animation Audition"/>
+	<menu_item_call label="Instant Message senden" name="Send Instant Message"/>
+	<menu_item_call label="Teleport anbieten..." name="Offer Teleport..."/>
+	<menu_item_call label="Konferenz-Chat starten" name="Conference Chat"/>
+	<menu_item_call label="Aktivieren" name="Activate"/>
+	<menu_item_call label="Deaktivieren" name="Deactivate"/>
+	<menu_item_call label="Speichern unter" name="Save As"/>
+	<menu_item_call label="Von Körper abnehmen" name="Detach From Yourself"/>
+	<menu_item_call label="Anziehen" name="Wearable And Object Wear"/>
+	<menu label="Anhängen an" name="Attach To"/>
+	<menu label="An HUD hängen" name="Attach To HUD"/>
+	<menu_item_call label="Bearbeiten" name="Wearable Edit"/>
+	<menu_item_call label="Hinzufügen" name="Wearable Add"/>
+	<menu_item_call label="Ausziehen" name="Take Off"/>
+	<menu_item_call label="--keine Optionen--" name="--no options--"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_inventory_add.xml b/indra/newview/skins/minimal/xui/de/menu_inventory_add.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dccee6712da5c2743e22f68615d2ebee3e3c348d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_inventory_add.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_inventory_add">
+	<menu label="Hochladen" name="upload">
+		<menu_item_call label="Bild ([COST] L$)..." name="Upload Image"/>
+		<menu_item_call label="Sound ([COST] L$)..." name="Upload Sound"/>
+		<menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/>
+		<menu_item_call label="Mehrfach-Upload ([COST] L$ pro Datei)..." name="Bulk Upload"/>
+		<menu_item_call label="Hochlade-Berechtigungen (Standard) festlegen" name="perm prefs"/>
+	</menu>
+	<menu_item_call label="Neuer Ordner" name="New Folder"/>
+	<menu_item_call label="Neues Skript" name="New Script"/>
+	<menu_item_call label="Neue Notizkarte" name="New Note"/>
+	<menu_item_call label="Neue Geste" name="New Gesture"/>
+	<menu label="Neue Kleider" name="New Clothes">
+		<menu_item_call label="Neues Hemd" name="New Shirt"/>
+		<menu_item_call label="Neue Hose" name="New Pants"/>
+		<menu_item_call label="Neue Schuhe" name="New Shoes"/>
+		<menu_item_call label="Neue Socken" name="New Socks"/>
+		<menu_item_call label="Neue Jacke" name="New Jacket"/>
+		<menu_item_call label="Neuer Rock" name="New Skirt"/>
+		<menu_item_call label="Neue Handschuhe" name="New Gloves"/>
+		<menu_item_call label="Neues Unterhemd" name="New Undershirt"/>
+		<menu_item_call label="Neue Unterhose" name="New Underpants"/>
+		<menu_item_call label="Neues Alpha" name="New Alpha"/>
+		<menu_item_call label="Neue Tätowierung" name="New Tattoo"/>
+	</menu>
+	<menu label="Neue Körperteile" name="New Body Parts">
+		<menu_item_call label="Neue Form/Gestalt" name="New Shape"/>
+		<menu_item_call label="Neue Haut" name="New Skin"/>
+		<menu_item_call label="Neues Haar" name="New Hair"/>
+		<menu_item_call label="Neue Augen" name="New Eyes"/>
+	</menu>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_inventory_gear_default.xml b/indra/newview/skins/minimal/xui/de/menu_inventory_gear_default.xml
new file mode 100644
index 0000000000000000000000000000000000000000..df86a5cf71c13ec4c1461fd839996793ce168c1c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_inventory_gear_default.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_gear_default">
+	<menu_item_call label="Neues Inventar-Fenster" name="new_window"/>
+	<menu_item_check label="Nach Name sortieren" name="sort_by_name"/>
+	<menu_item_check label="Nach aktuellesten Objekten sortieren" name="sort_by_recent"/>
+	<menu_item_check label="Systemordner nach oben" name="sort_system_folders_to_top"/>
+	<menu_item_call label="Filter anzeigen" name="show_filters"/>
+	<menu_item_call label="Filter zurücksetzen" name="reset_filters"/>
+	<menu_item_call label="Alle Ordner schließen" name="close_folders"/>
+	<menu_item_call label="Fundbüro ausleeren" name="empty_lostnfound"/>
+	<menu_item_call label="Textur speichern als" name="Save Texture As"/>
+	<menu_item_call label="Teilen" name="Share"/>
+	<menu_item_call label="Original suchen" name="Find Original"/>
+	<menu_item_call label="Alle Links suchen" name="Find All Links"/>
+	<menu_item_call label="Papierkorb ausleeren" name="empty_trash"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_land.xml b/indra/newview/skins/minimal/xui/de/menu_land.xml
new file mode 100644
index 0000000000000000000000000000000000000000..de679da3d8e8f0b4b67060128dedee3fe3dd5777
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_land.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Land Pie">
+	<menu_item_call label="Land-Info" name="Place Information..."/>
+	<menu_item_call label="Hier sitzen" name="Sit Here"/>
+	<menu_item_call label="Dieses Land kaufen" name="Land Buy"/>
+	<menu_item_call label="Pass kaufen" name="Land Buy Pass"/>
+	<menu_item_call label="Bauen" name="Create"/>
+	<menu_item_call label="Land bearbeiten" name="Edit Terrain"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_landmark.xml b/indra/newview/skins/minimal/xui/de/menu_landmark.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2aff0eec95807845d7d9d7e27c30bdfee684d6f2
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_landmark.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="landmark_overflow_menu">
+	<menu_item_call label="SLurl kopieren" name="copy"/>
+	<menu_item_call label="Löschen" name="delete"/>
+	<menu_item_call label="Auswahl erstellen" name="pick"/>
+	<menu_item_call label="Zu Favoritenleiste hinzufügen" name="add_to_favbar"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_login.xml b/indra/newview/skins/minimal/xui/de/menu_login.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a373e15338cfbf48542d28af416d46d167ffc902
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_login.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu_bar name="Login Menu">
+	<menu label="Ich" name="File">
+		<menu_item_call label="Einstellungen" name="Preferences..."/>
+		<menu_item_call label="[APP_NAME] schließen" name="Quit"/>
+	</menu>
+	<menu label="Hilfe" name="Help">
+		<menu_item_call label="[SECOND_LIFE]-Hilfe" name="Second Life Help"/>
+		<menu_item_call label="INFO ÃœBER [APP_NAME]" name="About Second Life"/>
+	</menu>
+	<menu_item_check label="Debug-Menü anzeigen" name="Show Debug Menu"/>
+	<menu label="Debug" name="Debug">
+		<menu_item_call label="Debug-Einstellungen anzeigen" name="Debug Settings"/>
+		<menu_item_call label="UI/Farb-Einstellungen" name="UI/Color Settings"/>
+		<menu_item_call label="XUI-Editor" name="UI Preview Tool"/>
+		<menu label="UI-Tests" name="UI Tests"/>
+		<menu_item_call label="Fenstergröße einstellen..." name="Set Window Size..."/>
+		<menu_item_call label="Servicebedingungen anzeigen" name="TOS"/>
+		<menu_item_call label="Wichtige Meldung anzeigen" name="Critical"/>
+		<menu_item_call label="Test Medienbrowser" name="Web Browser Test"/>
+		<menu_item_call label="Test Webinhalt-Floater" name="Web Content Floater Test"/>
+		<menu_item_check label="Grid-Auswahl anzeigen" name="Show Grid Picker"/>
+		<menu_item_call label="Benachrichtigungs-Konsole anzeigen" name="Show Notifications Console"/>
+	</menu>
+</menu_bar>
diff --git a/indra/newview/skins/minimal/xui/de/menu_mini_map.xml b/indra/newview/skins/minimal/xui/de/menu_mini_map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2e0d72c40c0d0420e0ba43cd9f81c02408b8c862
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_mini_map.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Zoom Nah" name="Zoom Close"/>
+	<menu_item_call label="Zoom Mittel" name="Zoom Medium"/>
+	<menu_item_call label="Zoom Weit" name="Zoom Far"/>
+	<menu_item_call label="Zoom-Standard" name="Zoom Default"/>
+	<menu_item_check label="Karte drehen" name="Rotate Map"/>
+	<menu_item_check label="Automatisch zentrieren" name="Auto Center"/>
+	<menu_item_call label="Verfolgung abschalten" name="Stop Tracking"/>
+	<menu_item_call label="Weltkarte" name="World Map"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_navbar.xml b/indra/newview/skins/minimal/xui/de/menu_navbar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5175f34b418b5bf7a4356705888ab27246e334e5
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_navbar.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Navbar Menu">
+	<menu_item_check label="Koordinaten anzeigen" name="Show Coordinates"/>
+	<menu_item_check label="Parzelleneigenschaften anzeigen" name="Show Parcel Properties"/>
+	<menu_item_call label="Landmarke" name="Landmark"/>
+	<menu_item_call label="Ausschneiden" name="Cut"/>
+	<menu_item_call label="Kopieren" name="Copy"/>
+	<menu_item_call label="Einfügen" name="Paste"/>
+	<menu_item_call label="Löschen" name="Delete"/>
+	<menu_item_call label="Alle auswählen" name="Select All"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_nearby_chat.xml b/indra/newview/skins/minimal/xui/de/menu_nearby_chat.xml
new file mode 100644
index 0000000000000000000000000000000000000000..99d6428c3f8d85da2f51d66eae2de9252503b3d2
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_nearby_chat.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="NearBy Chat Menu">
+	<menu_item_call label="Leute in der Nähe anzeigen..." name="nearby_people"/>
+	<menu_item_check label="Ignorierten Text anzeigen" name="muted_text"/>
+	<menu_item_check label="Bilder von Freunden anzeigen" name="show_buddy_icons"/>
+	<menu_item_check label="Namen anzeigen" name="show_names"/>
+	<menu_item_check label="Namen und Symbole anzeigen" name="show_icons_and_names"/>
+	<menu_item_call label="Schriftgröße" name="font_size"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_notification_well_button.xml b/indra/newview/skins/minimal/xui/de/menu_notification_well_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0f2784f16075b7c5755531a17f562c0b79b334a7
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_notification_well_button.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Notification Well Button Context Menu">
+	<menu_item_call label="Alle schließen" name="Close All"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_object.xml b/indra/newview/skins/minimal/xui/de/menu_object.xml
new file mode 100644
index 0000000000000000000000000000000000000000..19057d4228df5b65f1acc49d69ed108a53a55d5f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_object.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Object Pie">
+	<menu_item_call label="Berühren" name="Object Touch">
+		<menu_item_call.on_enable name="EnableTouch" parameter="Berühren"/>
+	</menu_item_call>
+	<menu_item_call label="Bearbeiten" name="Edit..."/>
+	<menu_item_call label="Bauen" name="Build"/>
+	<menu_item_call label="Öffnen" name="Open"/>
+	<menu_item_call label="Hier sitzen" name="Object Sit"/>
+	<menu_item_call label="Aufstehen" name="Object Stand Up"/>
+	<menu_item_call label="Objektprofil" name="Object Inspect"/>
+	<menu_item_call label="Hineinzoomen" name="Zoom In"/>
+	<context_menu label="Anziehen" name="Put On">
+		<menu_item_call label="Anziehen" name="Wear"/>
+		<menu_item_call label="Hinzufügen" name="Add"/>
+		<context_menu label="Anhängen" name="Object Attach"/>
+		<context_menu label="HUD anhängen" name="Object Attach HUD"/>
+	</context_menu>
+	<context_menu label="Entfernen" name="Remove">
+		<menu_item_call label="Missbrauch melden" name="Report Abuse..."/>
+		<menu_item_call label="Ignorieren" name="Object Mute"/>
+		<menu_item_call label="Zurückgeben" name="Return..."/>
+		<menu_item_call label="Löschen" name="Delete"/>
+	</context_menu>
+	<menu_item_call label="Nehmen" name="Pie Object Take"/>
+	<menu_item_call label="Kopie nehmen" name="Take Copy"/>
+	<menu_item_call label="Bezahlen" name="Pay..."/>
+	<menu_item_call label="Kaufen" name="Buy..."/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_object_icon.xml b/indra/newview/skins/minimal/xui/de/menu_object_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8b6c558416ba3ea6016c277f240b7cacfdcb595c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_object_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Object Icon Menu">
+	<menu_item_call label="Objektprofil..." name="Object Profile"/>
+	<menu_item_call label="Ignorieren..." name="Block"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_outfit_gear.xml b/indra/newview/skins/minimal/xui/de/menu_outfit_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..897154ec5626adfabcc1876e52633533cf29087b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_outfit_gear.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear Outfit">
+	<menu_item_call label="Anziehen - Aktuelles Outfit ersetzen" name="wear"/>
+	<menu_item_call label="Anziehen - Aktuelles Outfit hinzufügen" name="wear_add"/>
+	<menu_item_call label="Ausziehen - Aus aktuellem Outfit entfernen" name="take_off"/>
+	<menu label="Neue Kleider" name="New Clothes">
+		<menu_item_call label="Neues Hemd" name="New Shirt"/>
+		<menu_item_call label="Neue Hose" name="New Pants"/>
+		<menu_item_call label="Neue Schuhe" name="New Shoes"/>
+		<menu_item_call label="Neue Socken" name="New Socks"/>
+		<menu_item_call label="Neue Jacke" name="New Jacket"/>
+		<menu_item_call label="Neuer Rock" name="New Skirt"/>
+		<menu_item_call label="Neue Handschuhe" name="New Gloves"/>
+		<menu_item_call label="Neues Unterhemd" name="New Undershirt"/>
+		<menu_item_call label="Neue Unterhose" name="New Underpants"/>
+		<menu_item_call label="Neues Alpha" name="New Alpha"/>
+		<menu_item_call label="Neue Tätowierung" name="New Tattoo"/>
+	</menu>
+	<menu label="Neue Körperteile" name="New Body Parts">
+		<menu_item_call label="Neue Form" name="New Shape"/>
+		<menu_item_call label="Neue Haut" name="New Skin"/>
+		<menu_item_call label="Neues Haar" name="New Hair"/>
+		<menu_item_call label="Neue Augen" name="New Eyes"/>
+	</menu>
+	<menu_item_call label="Outfit neu benennen" name="rename"/>
+	<menu_item_call label="Outfit löschen" name="delete_outfit"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_outfit_tab.xml b/indra/newview/skins/minimal/xui/de/menu_outfit_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..32a65c96fc835f4b1b693fe689be14cf65d063be
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_outfit_tab.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit">
+	<menu_item_call label="Anziehen - Aktuelles Outfit ersetzen" name="wear_replace"/>
+	<menu_item_call label="Anziehen - Aktuelles Outfit hinzufügen" name="wear_add"/>
+	<menu_item_call label="Ausziehen - Aus aktuellem Outfit entfernen" name="take_off"/>
+	<menu_item_call label="Outfit bearbeiten" name="edit"/>
+	<menu_item_call label="Outfit neu benennen" name="rename"/>
+	<menu_item_call label="Outfit löschen" name="delete"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_participant_list.xml b/indra/newview/skins/minimal/xui/de/menu_participant_list.xml
new file mode 100644
index 0000000000000000000000000000000000000000..160f2f97bed39b97e968c367ffaf79704d0f2474
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_participant_list.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Participant List Context Menu">
+	<menu_item_check label="Nach Name sortieren" name="SortByName"/>
+	<menu_item_check label="Nach letzten Sprechern sortieren" name="SortByRecentSpeakers"/>
+	<menu_item_call label="Profil anzeigen" name="View Profile"/>
+	<menu_item_call label="Freund hinzufügen" name="Add Friend"/>
+	<menu_item_call label="IM" name="IM"/>
+	<menu_item_call label="Anrufen" name="Call"/>
+	<menu_item_call label="Teilen" name="Share"/>
+	<menu_item_call label="Bezahlen" name="Pay"/>
+	<menu_item_check label="Symbole für Personen anzeigen" name="View Icons"/>
+	<menu_item_check label="Voice ignorieren" name="Block/Unblock"/>
+	<menu_item_check label="Text ignorieren" name="MuteText"/>
+	<context_menu label="Moderator-Optionen" name="Moderator Options">
+		<menu_item_check label="Text-Chat zulassen" name="AllowTextChat"/>
+		<menu_item_call label="Diesen Teilnehmer stummschalten" name="ModerateVoiceMuteSelected"/>
+		<menu_item_call label="Stummschaltung für diesen Teilnehmer aufheben" name="ModerateVoiceUnMuteSelected"/>
+		<menu_item_call label="Alle stummschalten" name="ModerateVoiceMute"/>
+		<menu_item_call label="Alle freischalten" name="ModerateVoiceUnmute"/>
+	</context_menu>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_people_friends_view_sort.xml b/indra/newview/skins/minimal/xui/de/menu_people_friends_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..84d9d8938ce1317bf922b449a1ac8a65377b4705
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_people_friends_view_sort.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_check label="Nach Name sortieren" name="sort_name"/>
+	<menu_item_check label="Nach Status sortieren" name="sort_status"/>
+	<menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/>
+	<menu_item_check label="Erteilte Genehmigungen anzeigen" name="view_permissions"/>
+	<menu_item_call label="Ignorierte Einwohner &amp; Objekte anzeigen" name="show_blocked_list"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_people_groups.xml b/indra/newview/skins/minimal/xui/de/menu_people_groups.xml
new file mode 100644
index 0000000000000000000000000000000000000000..76225ba2414e10156718d78c14b0888bb7b09f49
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_people_groups.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_call label="Info anzeigen" name="View Info"/>
+	<menu_item_call label="Chat" name="Chat"/>
+	<menu_item_call label="Anrufen" name="Call"/>
+	<menu_item_call label="Aktivieren" name="Activate"/>
+	<menu_item_call label="Verlassen" name="Leave"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_people_groups_view_sort.xml b/indra/newview/skins/minimal/xui/de/menu_people_groups_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b68597d8aa1c6c06d835da39e1db7857c0332a68
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_people_groups_view_sort.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_check label="Gruppensymbole anzeigen" name="Display Group Icons"/>
+	<menu_item_call label="Ausgewählte Gruppe verlassen" name="Leave Selected Group"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_people_nearby.xml b/indra/newview/skins/minimal/xui/de/menu_people_nearby.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1db964357fe9bbcf2b561dc5586fa3b531a1d9dd
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_people_nearby.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Avatar Context Menu">
+	<menu_item_call label="Profil anzeigen" name="View Profile"/>
+	<menu_item_call label="Freund hinzufügen" name="Add Friend"/>
+	<menu_item_call label="Freund entfernen" name="Remove Friend"/>
+	<menu_item_call label="IM" name="IM"/>
+	<menu_item_call label="Anrufen" name="Call"/>
+	<menu_item_call label="Karte" name="Map"/>
+	<menu_item_call label="Teilen" name="Share"/>
+	<menu_item_call label="Bezahlen" name="Pay"/>
+	<menu_item_check label="Ignorieren/Freischalten" name="Block/Unblock"/>
+	<menu_item_call label="Teleport anbieten" name="teleport"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_people_nearby_multiselect.xml b/indra/newview/skins/minimal/xui/de/menu_people_nearby_multiselect.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b6e99edfe1fdfa716d31cf5484bdd7a8eab3af26
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_people_nearby_multiselect.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Multi-Selected People Context Menu">
+	<menu_item_call label="Freunde hinzufügen" name="Add Friends"/>
+	<menu_item_call label="Freunde entfernen" name="Remove Friend"/>
+	<menu_item_call label="IM" name="IM"/>
+	<menu_item_call label="Anrufen" name="Call"/>
+	<menu_item_call label="Teilen" name="Share"/>
+	<menu_item_call label="Bezahlen" name="Pay"/>
+	<menu_item_call label="Teleport anbieten" name="teleport"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_people_nearby_view_sort.xml b/indra/newview/skins/minimal/xui/de/menu_people_nearby_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0f252ab46d977ce46c7796b7e48b4dd47c97c9cd
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_people_nearby_view_sort.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_check label="Nach letzten Sprechern sortieren" name="sort_by_recent_speakers"/>
+	<menu_item_check label="Nach Name sortieren" name="sort_name"/>
+	<menu_item_check label="Nach Entfernung sortieren" name="sort_distance"/>
+	<menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/>
+	<menu_item_call label="Ignorierte Einwohner &amp; Objekte anzeigen" name="show_blocked_list"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_people_recent_view_sort.xml b/indra/newview/skins/minimal/xui/de/menu_people_recent_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1ef020f5e1cc9a1bdf251fed2b195a772b3e271f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_people_recent_view_sort.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_check label="Nach aktuellesten Sprechern sortieren" name="sort_most"/>
+	<menu_item_check label="Nach Name sortieren" name="sort_name"/>
+	<menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/>
+	<menu_item_call label="Ignorierte Einwohner &amp; Objekte anzeigen" name="show_blocked_list"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_picks.xml b/indra/newview/skins/minimal/xui/de/menu_picks.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9aec4c83b0ce2a28bed4079343bf3452c4f1533b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_picks.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Picks">
+	<menu_item_call label="Info" name="pick_info"/>
+	<menu_item_call label="Bearbeiten" name="pick_edit"/>
+	<menu_item_call label="Teleportieren" name="pick_teleport"/>
+	<menu_item_call label="Karte" name="pick_map"/>
+	<menu_item_call label="Löschen" name="pick_delete"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_picks_plus.xml b/indra/newview/skins/minimal/xui/de/menu_picks_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..385ff25b954bb9561ca07591a7e6d0425607aa11
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_picks_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="picks_plus_menu">
+	<menu_item_call label="Neue Auswahl" name="create_pick"/>
+	<menu_item_call label="Neue Anzeige" name="create_classified"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_place.xml b/indra/newview/skins/minimal/xui/de/menu_place.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d9c85f5b929687c4f59fb4785f9d367290783e8d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_place.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="place_overflow_menu">
+	<menu_item_call label="Eine Landmarke setzen" name="landmark"/>
+	<menu_item_call label="Auswahl erstellen" name="pick"/>
+	<menu_item_call label="Pass kaufen" name="pass"/>
+	<menu_item_call label="Bearbeiten" name="edit"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_place_add_button.xml b/indra/newview/skins/minimal/xui/de/menu_place_add_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7c0ff4a46a096a73b037cfcb9f627041f49b0215
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_place_add_button.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_folder_gear">
+	<menu_item_call label="Ordner hinzufügen" name="add_folder"/>
+	<menu_item_call label="Landmarke hinzufügen" name="add_landmark"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_places_gear_folder.xml b/indra/newview/skins/minimal/xui/de/menu_places_gear_folder.xml
new file mode 100644
index 0000000000000000000000000000000000000000..132d3f6466d15e1d3ad35f1fa1b227131cf865bf
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_places_gear_folder.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_folder_gear">
+	<menu_item_call label="Landmarke hinzufügen" name="add_landmark"/>
+	<menu_item_call label="Ordner hinzufügen" name="add_folder"/>
+	<menu_item_call label="Ausschneiden" name="cut"/>
+	<menu_item_call label="Kopieren" name="copy_folder"/>
+	<menu_item_call label="Einfügen" name="paste"/>
+	<menu_item_call label="Umbenennen" name="rename"/>
+	<menu_item_call label="Löschen" name="delete"/>
+	<menu_item_call label="Erweitern Sie sich" name="expand"/>
+	<menu_item_call label="Zuklappen" name="collapse"/>
+	<menu_item_call label="Alle Ordner aufklappen" name="expand_all"/>
+	<menu_item_call label="Alle Ordner schließen" name="collapse_all"/>
+	<menu_item_check label="Nach Datum sortieren" name="sort_by_date"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_places_gear_landmark.xml b/indra/newview/skins/minimal/xui/de/menu_places_gear_landmark.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6af4d644af0846da036362727929c9950572786a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_places_gear_landmark.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_ladmark_gear">
+	<menu_item_call label="Teleportieren" name="teleport"/>
+	<menu_item_call label="Weitere Informationen" name="more_info"/>
+	<menu_item_call label="Auf Karte zeigen" name="show_on_map"/>
+	<menu_item_call label="Landmarke hinzufügen" name="add_landmark"/>
+	<menu_item_call label="Ordner hinzufügen" name="add_folder"/>
+	<menu_item_call label="Ausschneiden" name="cut"/>
+	<menu_item_call label="Landmarke kopieren" name="copy_landmark"/>
+	<menu_item_call label="SLurl kopieren" name="copy_slurl"/>
+	<menu_item_call label="Einfügen" name="paste"/>
+	<menu_item_call label="Umbenennen" name="rename"/>
+	<menu_item_call label="Löschen" name="delete"/>
+	<menu_item_call label="Alle Ordner aufklappen" name="expand_all"/>
+	<menu_item_call label="Alle Ordner schließen" name="collapse_all"/>
+	<menu_item_check label="Nach Datum sortieren" name="sort_by_date"/>
+	<menu_item_call label="Auswahl erstellen" name="create_pick"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_profile_overflow.xml b/indra/newview/skins/minimal/xui/de/menu_profile_overflow.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9f3fcbca1d21856d26d0dae3c82135fb9219898d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_profile_overflow.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="profile_overflow_menu">
+	<menu_item_call label="Karte" name="show_on_map"/>
+	<menu_item_call label="Bezahlen" name="pay"/>
+	<menu_item_call label="Teilen" name="share"/>
+	<menu_item_call label="Ignorieren" name="block"/>
+	<menu_item_call label="Freischalten" name="unblock"/>
+	<menu_item_call label="Hinauswerfen" name="kick"/>
+	<menu_item_call label="Einfrieren" name="freeze"/>
+	<menu_item_call label="Auftauen" name="unfreeze"/>
+	<menu_item_call label="CSR" name="csr"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_save_outfit.xml b/indra/newview/skins/minimal/xui/de/menu_save_outfit.xml
new file mode 100644
index 0000000000000000000000000000000000000000..986c78b318ad409022b721e4b747ae2b1bbf54e0
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_save_outfit.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="save_outfit_menu">
+	<menu_item_call label="Speichern" name="save_outfit"/>
+	<menu_item_call label="Speichern unter" name="save_as_new_outfit"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_script_chiclet.xml b/indra/newview/skins/minimal/xui/de/menu_script_chiclet.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3256aa1a8778b47092cb0223de649226d32df24b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_script_chiclet.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="ScriptChiclet Menu">
+	<menu_item_call label="Schließen" name="Close"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_slurl.xml b/indra/newview/skins/minimal/xui/de/menu_slurl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b2ec017f9f3e929fb7f1008de3964dab42a07b5d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_slurl.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="URL-Info" name="about_url"/>
+	<menu_item_call label="Zu URL teleportieren" name="teleport_to_url"/>
+	<menu_item_call label="Karte" name="show_on_map"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_teleport_history_gear.xml b/indra/newview/skins/minimal/xui/de/menu_teleport_history_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..68b8e21802a5fb47faf5315279174e01d322d14e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_teleport_history_gear.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Teleport History Gear Context Menu">
+	<menu_item_call label="Alle Ordner aufklappen" name="Expand all folders"/>
+	<menu_item_call label="Alle Ordner schließen" name="Collapse all folders"/>
+	<menu_item_call label="Teleport-Liste löschen" name="Clear Teleport History"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_teleport_history_item.xml b/indra/newview/skins/minimal/xui/de/menu_teleport_history_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ff8fb0b1819ab755583804363d0522dddcf650a7
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_teleport_history_item.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Teleport History Item Context Menu">
+	<menu_item_call label="Teleportieren" name="Teleport"/>
+	<menu_item_call label="Weitere Informationen" name="More Information"/>
+	<menu_item_call label="In Zwischenablage kopieren" name="CopyToClipboard"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_teleport_history_tab.xml b/indra/newview/skins/minimal/xui/de/menu_teleport_history_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..194dd16fd14cc4040a39b6e547bbba0a7862eb6b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_teleport_history_tab.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Teleport History Item Context Menu">
+	<menu_item_call label="Öffnen" name="TabOpen"/>
+	<menu_item_call label="Schließen" name="TabClose"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_text_editor.xml b/indra/newview/skins/minimal/xui/de/menu_text_editor.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c00186c13e9d045e09400ab4e613e2aea40566d7
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_text_editor.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Text editor context menu">
+	<menu_item_call label="Ausschneiden" name="Cut"/>
+	<menu_item_call label="Kopieren" name="Copy"/>
+	<menu_item_call label="Einfügen" name="Paste"/>
+	<menu_item_call label="Löschen" name="Delete"/>
+	<menu_item_call label="Alle auswählen" name="Select All"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_topinfobar.xml b/indra/newview/skins/minimal/xui/de/menu_topinfobar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5b0a724244e583653280572d2b56a18c5e2a5fce
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_topinfobar.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_topinfobar">
+	<menu_item_check label="Koordinaten anzeigen" name="Show Coordinates"/>
+	<menu_item_check label="Parzellen-Eigenschaften anzeigen" name="Show Parcel Properties"/>
+	<menu_item_call label="Landmarke" name="Landmark"/>
+	<menu_item_call label="Kopieren" name="Copy"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_url_agent.xml b/indra/newview/skins/minimal/xui/de/menu_url_agent.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9a808088fbeebd8681eab0915973f1139b77b7b5
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_url_agent.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Einwohnerprofil anzeigen" name="show_agent"/>
+	<menu_item_call label="Name in Zwischenablage kopieren" name="url_copy_label"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_url_group.xml b/indra/newview/skins/minimal/xui/de/menu_url_group.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6bd86414bc10dd0a3da4bd886f23081b40cc3ac8
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_url_group.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Gruppeninformation anzeigen" name="show_group"/>
+	<menu_item_call label="Gruppe in Zwischenablage kopieren" name="url_copy_label"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_url_http.xml b/indra/newview/skins/minimal/xui/de/menu_url_http.xml
new file mode 100644
index 0000000000000000000000000000000000000000..30eb1668a54b0edb40f556f32dff0a4c75b799fb
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_url_http.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Webseite öffnen" name="url_open"/>
+	<menu_item_call label="Im internen Browser öffnen" name="url_open_internal"/>
+	<menu_item_call label="Im externen Browser öffnen" name="url_open_external"/>
+	<menu_item_call label="URL in Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_url_inventory.xml b/indra/newview/skins/minimal/xui/de/menu_url_inventory.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dc069df02b621a17d7fe14fb4a1aa29d8477dbbb
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_url_inventory.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Inventarobjekte anzeigen" name="show_item"/>
+	<menu_item_call label="Name in Zwischenablage kopieren" name="url_copy_label"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_url_map.xml b/indra/newview/skins/minimal/xui/de/menu_url_map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2f6ffcd450088f8d197bf37a601999b9e480a121
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_url_map.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Auf Karte zeigen" name="show_on_map"/>
+	<menu_item_call label="Zu Position teleportieren" name="teleport_to_location"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_url_objectim.xml b/indra/newview/skins/minimal/xui/de/menu_url_objectim.xml
new file mode 100644
index 0000000000000000000000000000000000000000..90d3763d9c0871d794cd9619c55b275057f11778
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_url_objectim.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Objektinformationen anzeigen" name="show_object"/>
+	<menu_item_call label="Auf Karte zeigen" name="show_on_map"/>
+	<menu_item_call label="Zu Objekt-Position teleportieren" name="teleport_to_object"/>
+	<menu_item_call label="Objektname in Zwischenablage kopieren" name="url_copy_label"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_url_parcel.xml b/indra/newview/skins/minimal/xui/de/menu_url_parcel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9169bca24f33933e3b5a943c240665fe582777ba
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_url_parcel.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Parzelleninformationen anzeigen" name="show_parcel"/>
+	<menu_item_call label="Auf Karte zeigen" name="show_on_map"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_url_slapp.xml b/indra/newview/skins/minimal/xui/de/menu_url_slapp.xml
new file mode 100644
index 0000000000000000000000000000000000000000..72e916b902dd8a2180a5816d07bb23a97c90186f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_url_slapp.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Diesen Befehl ausführen" name="run_slapp"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_url_slurl.xml b/indra/newview/skins/minimal/xui/de/menu_url_slurl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5d48230ebf84d4a8d8301846e7fac4058975624c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_url_slurl.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Ortsinformationen anzeigen" name="show_place"/>
+	<menu_item_call label="Auf Karte zeigen" name="show_on_map"/>
+	<menu_item_call label="Zu Position teleportieren" name="teleport_to_location"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_url_teleport.xml b/indra/newview/skins/minimal/xui/de/menu_url_teleport.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4cc1ecc70ea63f5558ea0d146c00a50422aa043e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_url_teleport.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="An diesen Standort teleportieren" name="teleport"/>
+	<menu_item_call label="Auf Karte zeigen" name="show_on_map"/>
+	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_viewer.xml b/indra/newview/skins/minimal/xui/de/menu_viewer.xml
new file mode 100644
index 0000000000000000000000000000000000000000..67dc618eb011f088cbd933cce8ebf09f49a9f35a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_viewer.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu_bar name="Main Menu">
+	<menu label="Hilfe" name="Help">
+		<menu_item_call label="[SECOND_LIFE]-Hilfe" name="Second Life Help"/>
+	</menu>
+	<menu label="Erweitert" name="Advanced">
+		<menu label="Tastaturkürzel" name="Shortcuts">
+			<menu_item_check label="Fliegen" name="Fly"/>
+			<menu_item_call label="Fenster schließen" name="Close Window"/>
+			<menu_item_call label="Alle Fenster schließen" name="Close All Windows"/>
+			<menu_item_call label="Ansicht zurücksetzen" name="Reset View"/>
+		</menu>
+	</menu>
+</menu_bar>
diff --git a/indra/newview/skins/minimal/xui/de/menu_wearable_list_item.xml b/indra/newview/skins/minimal/xui/de/menu_wearable_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..283e454a0647b72b3c9527ba00edc61d4ab5599c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_wearable_list_item.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit Wearable Context Menu">
+	<menu_item_call label="Ersetzen" name="wear_replace"/>
+	<menu_item_call label="Anziehen" name="wear_wear"/>
+	<menu_item_call label="Hinzufügen" name="wear_add"/>
+	<menu_item_call label="Ausziehen / Abnehmen" name="take_off_or_detach"/>
+	<menu_item_call label="Abnehmen" name="detach"/>
+	<context_menu label="Anhängen an" name="wearable_attach_to"/>
+	<context_menu label="An HUD hängen" name="wearable_attach_to_hud"/>
+	<menu_item_call label="Ausziehen" name="take_off"/>
+	<menu_item_call label="Bearbeiten" name="edit"/>
+	<menu_item_call label="Objektprofil" name="object_profile"/>
+	<menu_item_call label="Original anzeigen" name="show_original"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_wearing_gear.xml b/indra/newview/skins/minimal/xui/de/menu_wearing_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..80d4ff4d9fa0ff1a33604ccb928f53afb5ed8701
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_wearing_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear Wearing">
+	<menu_item_call label="Outfit bearbeiten" name="edit"/>
+	<menu_item_call label="Ausziehen" name="takeoff"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/de/menu_wearing_tab.xml b/indra/newview/skins/minimal/xui/de/menu_wearing_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..695451a105602b82daac79f9b5b6643096cae321
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/menu_wearing_tab.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Wearing">
+	<menu_item_call label="Ausziehen" name="take_off"/>
+	<menu_item_call label="Abnehmen" name="detach"/>
+	<menu_item_call label="Outfit bearbeiten" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/de/notifications.xml b/indra/newview/skins/minimal/xui/de/notifications.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1eee1d1c9b867b93e19c6d9ef6b139706fdf3a93
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/notifications.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<notifications>
+	<notification name="UserGiveItem">
+		[NAME_SLURL] bietet Ihnen [ITEM_SLURL] an. Zur Verwendung dieses Artikels müssen Sie in den erweiterten Modus umschalten, wo Sie den Artikel in Ihrem Inventar finden werden. Um in den erweiterten Modus umzuschalten, beenden Sie die Anwendung, starten Sie sie neu und ändern Sie die Moduseinstellung auf dem Anmeldebildschirm.
+		<form name="form">
+			<button name="Show" text="Artikel behalten"/>
+			<button name="Discard" text="Artikel ablehnen"/>
+			<button name="Mute" text="Benutzer blockieren"/>
+		</form>
+	</notification>
+	<notification name="ObjectGiveItem">
+		Ein Objekt namens &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, das [NAME_SLURL] gehört, bietet Ihnen [ITEM_SLURL] an. Zur Verwendung dieses Artikels müssen Sie in den erweiterten Modus umschalten, wo Sie den Artikel in Ihrem Inventar finden werden. Um in den erweiterten Modus umzuschalten, beenden Sie die Anwendung, starten Sie sie neu und ändern Sie die Moduseinstellung auf dem Anmeldebildschirm.
+		<form name="form">
+			<button name="Keep" text="Artikel behalten"/>
+			<button name="Discard" text="Artikel ablehnen"/>
+			<button name="Mute" text="Objekt blockieren"/>
+		</form>
+	</notification>
+</notifications>
diff --git a/indra/newview/skins/minimal/xui/de/panel_bottomtray.xml b/indra/newview/skins/minimal/xui/de/panel_bottomtray.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a4d80921ece5d14f326bb65fa99b6e2f7cf9ffd2
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/panel_bottomtray.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="bottom_tray">
+	<string name="DragIndicationImageName" value="Accordion_ArrowOpened_Off"/>
+	<string name="SpeakBtnToolTip" value="Schaltet Mikrofon ein/aus"/>
+	<string name="VoiceControlBtnToolTip" value="Voice-Chat-Steuerung anzeigen/ausblenden"/>
+	<layout_stack name="toolbar_stack">
+		<layout_panel name="gesture_panel">
+			<gesture_combo_list label="Gesten" name="Gesture" tool_tip="Gesten anzeigen/ausblenden"/>
+		</layout_panel>
+		<layout_panel name="cam_panel">
+			<bottomtray_button label="Ansicht" name="camera_btn" tool_tip="Kamerasteuerung anzeigen/ausblenden"/>
+		</layout_panel>
+		<layout_panel name="avatar_and_destinations_panel">
+			<bottomtray_button label="Ziele" name="destination_btn" tool_tip="Zeigt Leutefenster an"/>
+		</layout_panel>
+		<layout_panel name="avatar_and_destinations_panel">
+			<bottomtray_button label="Mein Avatar" name="avatar_btn"/>
+		</layout_panel>
+		<layout_panel name="people_panel">
+			<bottomtray_button label="Leute" name="show_people_button" tool_tip="Zeigt Leutefenster an"/>
+		</layout_panel>
+		<layout_panel name="profile_panel">
+			<bottomtray_button label="Profil" name="show_profile_btn" tool_tip="Zeigt Profilfenster an"/>
+		</layout_panel>
+		<layout_panel name="howto_panel">
+			<bottomtray_button label="Anweisungen" name="show_help_btn" tool_tip="Second Life-Anweisungsthemen öffnen"/>
+		</layout_panel>
+		<layout_panel name="im_well_panel">
+			<chiclet_im_well name="im_well">
+				<button name="Unread IM messages" tool_tip="IMs"/>
+			</chiclet_im_well>
+		</layout_panel>
+		<layout_panel name="notification_well_panel">
+			<chiclet_notification name="notification_well">
+				<button name="Unread" tool_tip="Benachrichtigungen"/>
+			</chiclet_notification>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/de/panel_group_control_panel.xml b/indra/newview/skins/minimal/xui/de/panel_group_control_panel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..81e6040f84174461f81c8aae0850f990e816e851
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/panel_group_control_panel.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+	<layout_stack name="vertical_stack">
+		<layout_panel name="end_call_btn_panel">
+			<button label="Anruf beenden" name="end_call_btn"/>
+		</layout_panel>
+		<layout_panel name="voice_ctrls_btn_panel">
+			<button label="Voice-Steuerung öffnen" name="voice_ctrls_btn"/>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/de/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/de/panel_im_control_panel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..abf8011d9d5a42dc8aa0df45b6430111626800ba
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/panel_im_control_panel.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+	<text name="avatar_name" value="Unbekannt"/>
+	<layout_stack name="button_stack">
+		<layout_panel name="view_profile_btn_panel">
+			<button label="Profil" name="view_profile_btn"/>
+		</layout_panel>
+		<layout_panel name="add_friend_btn_panel">
+			<button label="Freund hinzufügen" name="add_friend_btn"/>
+		</layout_panel>
+		<layout_panel name="teleport_btn_panel">
+			<button label="Teleportieren" name="teleport_btn" tool_tip="Dieser Person einen Teleport anbieten."/>
+		</layout_panel>
+		<layout_panel name="share_btn_panel">
+			<button label="Teilen" name="share_btn"/>
+		</layout_panel>
+		<layout_panel name="pay_btn_panel">
+			<button label="Bezahlen" name="pay_btn"/>
+		</layout_panel>
+		<layout_panel name="call_btn_panel">
+			<button label="Anrufen" name="call_btn"/>
+		</layout_panel>
+		<layout_panel name="end_call_btn_panel">
+			<button label="Anruf beenden" name="end_call_btn"/>
+		</layout_panel>
+		<layout_panel name="voice_ctrls_btn_panel">
+			<button label="Voice-Steuerung" name="voice_ctrls_btn"/>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/de/panel_login.xml b/indra/newview/skins/minimal/xui/de/panel_login.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2e82453aab1efee11edeaddecf0b18fa23e09c66
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/panel_login.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_login">
+	<panel.string name="create_account_url">
+		http://de.secondlife.com/registration/
+	</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php?lang=de
+	</panel.string>
+	<layout_stack name="login_widgets">
+		<layout_panel name="login">
+			<text name="username_text">
+				Benutzername:
+			</text>
+			<combo_box name="username_combo" tool_tip="Bei der Registrierung gewählter Benutzername wie „berndschmidt12“ oder „Liebe Sonne“"/>
+			<text name="password_text">
+				Kennwort:
+			</text>
+			<check_box label="Kennwort merken" name="remember_check"/>
+			<button label="Anmelden" name="connect_btn"/>
+			<text name="mode_selection_text">
+				Modus:
+			</text>
+			<combo_box name="mode_combo" tool_tip="Wählen Sie den gewünschten Modus aus. Basis: schnelles, einfaches Erkunden und Chatten. Erweitert: Zugriff auf zusätzliche Funktionen.">
+				<combo_box.item label="Basis" name="Basic"/>
+				<combo_box.item label="Erweitert" name="Advanced"/>
+			</combo_box>
+		</layout_panel>
+		<layout_panel name="links">
+			<text name="create_new_account_text">
+				Registrieren
+			</text>
+			<text name="forgot_password_text">
+				Benutzernamen oder Kennwort vergessen?
+			</text>
+			<text name="login_help">
+				Sie brauchen Hilfe?
+			</text>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/de/panel_navigation_bar.xml b/indra/newview/skins/minimal/xui/de/panel_navigation_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ee1a543aacb377371d97a80286c97341a17fed25
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/panel_navigation_bar.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="navigation_bar">
+	<panel name="navigation_panel">
+		<pull_button name="back_btn" tool_tip="Zurück zum vorherigen Standort teleportieren"/>
+		<pull_button name="forward_btn" tool_tip="Um einen Standort weiter teleportieren"/>
+		<button name="home_btn" tool_tip="Zu meinem Zuhause teleportieren"/>
+		<location_input label="Standort" name="location_combo"/>
+		<search_combo_box label="Suche" name="search_combo_box" tool_tip="Suche">
+			<combo_editor label="[SECOND_LIFE] durchsuchen" name="search_combo_editor"/>
+		</search_combo_box>
+	</panel>
+	<favorites_bar name="favorite" tool_tip="Ziehen Sie Landmarken hier hin, damit Sie schnell zu Ihren Lieblingsplätzen in Second Life gelangen können!">
+		<label name="favorites_bar_label" tool_tip="Ziehen Sie Landmarken hier hin, damit Sie schnell zu Ihren Lieblingsplätzen in Second Life gelangen können!">
+			Favoritenleiste
+		</label>
+		<chevron_button name="&gt;&gt;" tool_tip="Mehr meiner Favoriten anzeigen"/>
+	</favorites_bar>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/de/panel_people.xml b/indra/newview/skins/minimal/xui/de/panel_people.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c6253e17dee4b9f88ad74e7b43395cc752a1e5b3
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/panel_people.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- Side tray panel -->
+<panel label="Leute" name="people_panel">
+	<string name="no_recent_people" value="Sie haben in letzter Zeit mit niemandem interagiert. Suchen Sie nach Leuten, mit denen Sie sich unterhalten können? Klicken Sie unten auf die Schaltfläche „Ziele“."/>
+	<string name="no_filtered_recent_people" value="Es gibt keine Leute mit diesem Namen, mit denen Sie in letzter Zeit interagiert haben."/>
+	<string name="no_one_near" value="Es ist niemand in der Nähe. Suchen Sie nach Leuten, mit denen Sie sich unterhalten können? Klicken Sie unten auf die Schaltfläche „Ziele“."/>
+	<string name="no_one_filtered_near" value="Es ist niemand mit diesem Namen in der Nähe."/>
+	<string name="no_friends_online" value="Keine Freunde online"/>
+	<string name="no_friends" value="Keine Freunde"/>
+	<string name="no_friends_msg">
+		Klicken Sie mit der rechten Maustaste auf einen Einwohner, um ihn als Freund hinzuzufügen. Suchen Sie nach Leuten, mit denen Sie sich unterhalten können? Klicken Sie unten auf die Schaltfläche „Ziele“.
+	</string>
+	<string name="no_filtered_friends_msg">
+		Sie haben nicht das Richtige gefunden? Klicken Sie unten auf die Schaltfläche „Ziele“.
+	</string>
+	<string name="people_filter_label" value="Nach Leuten filtern"/>
+	<string name="groups_filter_label" value="Nach Gruppen filtern"/>
+	<string name="no_filtered_groups_msg" value="Sie haben nicht das Richtige gefunden? Versuchen Sie es mit der [secondlife:///app/search/groups/[SEARCH_TERM] Suche]."/>
+	<string name="no_groups_msg" value="Suchen Sie nach Gruppen? Versuchen Sie es mit der [secondlife:///app/search/groups Suche]."/>
+	<string name="MiniMapToolTipMsg" value="[REGION](Doppelklicken, um Karte zu öffnen; Umschalttaste gedrückt halten und ziehen, um zu schwenken)"/>
+	<string name="AltMiniMapToolTipMsg" value="[REGION](Doppelklicken, um zu teleportieren; Umschalttaste gedrückt halten und ziehen, um zu schwenken)"/>
+	<filter_editor label="Filter" name="filter_input"/>
+	<tab_container name="tabs">
+		<panel label="IN DER NÄHE" name="nearby_panel">
+			<panel label="bottom_panel" name="bottom_panel"/>
+		</panel>
+		<panel label="MEINE FREUNDE" name="friends_panel">
+			<accordion name="friends_accordion">
+				<accordion_tab name="tab_online" title="Online"/>
+				<accordion_tab name="tab_all" title="Alle"/>
+			</accordion>
+			<panel label="bottom_panel" name="bottom_panel">
+				<layout_stack name="bottom_panel">
+					<layout_panel name="trash_btn_panel">
+						<dnd_button name="del_btn" tool_tip="Ausgewählte Person aus Ihrer Freundesliste entfernen"/>
+					</layout_panel>
+				</layout_stack>
+			</panel>
+		</panel>
+		<panel label="AKTUELL" name="recent_panel">
+			<panel label="bottom_panel" name="bottom_panel">
+				<button name="add_friend_btn" tool_tip="Ausgewählten Einwohner zur Freundeliste hinzufügen"/>
+			</panel>
+		</panel>
+	</tab_container>
+	<panel name="button_bar">
+		<layout_stack name="bottom_bar_ls">
+			<layout_panel name="view_profile_btn_lp">
+				<button label="Profil" name="view_profile_btn" tool_tip="Bilder, Gruppen und andere Einwohner-Informationen anzeigen"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="IM" name="im_btn" tool_tip="Instant Messenger öffnen"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Teleportieren" name="teleport_btn" tool_tip="Teleport anbieten"/>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls1">
+			<layout_panel name="group_info_btn_lp">
+				<button label="Gruppenprofil" name="group_info_btn" tool_tip="Gruppeninformationen anzeigen"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Gruppen-Chat" name="chat_btn" tool_tip="Chat öffnen"/>
+			</layout_panel>
+			<layout_panel name="group_call_btn_lp">
+				<button label="Gruppe anrufen" name="group_call_btn" tool_tip="Diese Gruppe anrufen"/>
+			</layout_panel>
+		</layout_stack>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/de/panel_side_tray_tab_caption.xml b/indra/newview/skins/minimal/xui/de/panel_side_tray_tab_caption.xml
new file mode 100644
index 0000000000000000000000000000000000000000..652fb7c836053ba5c635af115206c5ac26067339
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/panel_side_tray_tab_caption.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="sidetray_tab_panel">
+	<text name="sidetray_tab_title" value="Klappmenü??"/>
+	<button name="undock" tool_tip="Abkoppeln"/>
+	<button name="dock" tool_tip="Andocken"/>
+	<button name="show_help" tool_tip="Hilfe anzeigen"/>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/de/panel_status_bar.xml b/indra/newview/skins/minimal/xui/de/panel_status_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..04ed58f9445e736154ceab74cf5c4c8be08c2e11
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/de/panel_status_bar.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="status">
+	<panel.string name="StatBarDaysOfWeek">
+		Sonntag:Montag:Dienstag:Mittwoch:Donnerstag:Freitag:Samstag
+	</panel.string>
+	<panel.string name="StatBarMonthsOfYear">
+		Januar:Februar:März:April:Mai:Juni:Juli:August:September:Oktober:November:Dezember
+	</panel.string>
+	<panel.string name="packet_loss_tooltip">
+		Paketverlust
+	</panel.string>
+	<panel.string name="bandwidth_tooltip">
+		Bandbreite
+	</panel.string>
+	<panel.string name="time">
+		[hour12, datetime, slt]:[min, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt]
+	</panel.string>
+	<panel.string name="timeTooltip">
+		[weekday, datetime, slt], [day, datetime, slt] [month, datetime, slt] [year, datetime, slt]
+	</panel.string>
+	<panel.string name="buycurrencylabel">
+		[AMT] L$
+	</panel.string>
+	<panel name="balance_bg">
+		<text name="balance" tool_tip="Klicken, um L$-Guthaben zu aktualisieren" value="20 L$"/>
+		<button label="L$ kaufen" name="buyL" tool_tip="Hier klicken, um mehr L$ zu kaufen"/>
+	</panel>
+	<text name="TimeText" tool_tip="Aktuelle Zeit (Pazifik)">
+		24:00 H PST
+	</text>
+	<button name="media_toggle_btn" tool_tip="Alle Medien starten/stoppen (Musik, Video, Webseiten)"/>
+	<button name="volume_btn" tool_tip="Steuerung der Gesamtlautstärke"/>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/en/floater_camera.xml b/indra/newview/skins/minimal/xui/en/floater_camera.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4cf792444f61d1ab07de297f3f4a369312b78211
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/floater_camera.xml
@@ -0,0 +1,284 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ can_dock="true"
+ can_minimize="true"
+ can_close="false"
+ follows="bottom"
+ height="164"
+ layout="topleft"
+ name="camera_floater"
+ save_rect="true"
+ save_visibility="true"
+ save_dock_state="true"
+ single_instance="true"
+ width="228">
+    <floater.string
+     name="rotate_tooltip">
+        Rotate Camera Around Focus
+    </floater.string>
+    <floater.string
+     name="zoom_tooltip">
+        Zoom Camera Towards Focus
+    </floater.string>
+    <floater.string
+     name="move_tooltip">
+        Move Camera Up and Down, Left and Right
+    </floater.string>
+    <floater.string
+     name="camera_modes_title">
+        Camera modes
+    </floater.string>
+    <floater.string
+     name="pan_mode_title">
+       Orbit Zoom Pan
+    </floater.string>
+    <floater.string
+     name="presets_mode_title">
+        Preset Views
+    </floater.string>
+    <floater.string
+     name="free_mode_title">
+        View Object
+    </floater.string>
+    <panel
+     border="false"
+     height="123"
+     layout="topleft"
+     left="2"
+     top="0"
+     mouse_opaque="false"
+     name="controls"
+     width="226">
+       <panel
+         color="Transparent"
+         follows="all"
+         height="102"
+         layout="topleft"
+         left="8"
+         name="preset_views_list"
+         opaque="true"
+         top="24"
+         width="212"
+         visible="false">
+        <panel_camera_item
+          name="front_view">
+          <panel_camera_item.mousedown_callback
+            function="CameraPresets.ChangeView"
+            parameter="front_view" />
+          <panel_camera_item.picture
+            image_name="Cam_Preset_Front_Off" />
+          <panel_camera_item.selected_picture
+            image_name="Cam_Preset_Front_On" />
+          <panel_camera_item.text
+            name="front_view_text">
+            Front View
+          </panel_camera_item.text>
+        </panel_camera_item>
+        <panel_camera_item
+          name="group_view"
+          top_pad="4">
+          <panel_camera_item.mousedown_callback
+            function="CameraPresets.ChangeView"
+            parameter="group_view" />
+          <panel_camera_item.picture
+            image_name="Cam_Preset_Side_Off" />
+          <panel_camera_item.selected_picture
+            image_name="Cam_Preset_Side_On" />
+          <panel_camera_item.text
+            name="side_view_text">
+            Side View
+          </panel_camera_item.text>
+        </panel_camera_item>
+        <panel_camera_item
+          name="rear_view"
+          layout="topleft"
+          top_pad="4">
+          <panel_camera_item.mousedown_callback
+            function="CameraPresets.ChangeView"
+            parameter="rear_view" />
+          <panel_camera_item.picture
+            image_name="Cam_Preset_Back_Off" />
+          <panel_camera_item.selected_picture
+            image_name="Cam_Preset_Back_On" />
+          <panel_camera_item.text
+            name="rear_view_text">
+            Rear View
+          </panel_camera_item.text>
+        </panel_camera_item>
+      </panel>
+      <panel
+          color="Transparent"
+          follows="all"
+          height="68"
+          item_pad="4"
+          layout="topleft"
+          left="8"
+          name="camera_modes_list"
+          opaque="true"
+          top="24"
+          width="212"
+          visible="false">
+        <panel_camera_item
+          name="object_view">
+          <panel_camera_item.mousedown_callback
+            function="CameraPresets.ChangeView"
+            parameter="object_view" />
+          <panel_camera_item.text
+            name="object_view_text">
+            Object View
+          </panel_camera_item.text>
+          <panel_camera_item.picture
+            image_name="Object_View_Off" />
+          <panel_camera_item.selected_picture
+            image_name="Object_View_On" />
+        </panel_camera_item>
+        <panel_camera_item
+          name="mouselook_view"
+          layout="topleft">
+          <panel_camera_item.mousedown_callback
+            function="CameraPresets.ChangeView"
+            parameter="mouselook_view" />
+          <panel_camera_item.text
+            name="mouselook_view_text">
+            Mouselook View
+          </panel_camera_item.text>
+          <panel_camera_item.picture
+            image_name="MouseLook_View_Off" />
+          <panel_camera_item.selected_picture
+            image_name="MouseLook_View_On" />
+        </panel_camera_item>
+      </panel>
+         <!--TODO: replace + - images -->
+         <panel
+            border="false"
+            class="camera_zoom_panel"
+            height="114"
+            layout="topleft"
+            left="0"
+            mouse_opaque="false"
+            name="zoom"
+            top="20"
+            width="226">
+           <joystick_rotate
+              follows="top|left"
+              height="78"
+              image_selected="Cam_Rotate_In"
+              image_unselected="Cam_Rotate_Out"
+              layout="topleft"
+              left="7"
+              mouse_opaque="false"
+              name="cam_rotate_stick"
+              quadrant="left"
+              scale_image="false"
+              sound_flags="3"
+              visible="true"
+              tool_tip="Orbit camera around focus"
+              top="20"
+              width="78">
+              <commit_callback
+	        function="Camera.rotate" />
+	      <mouse_held_callback
+	        function="Camera.rotate" />         
+            </joystick_rotate>
+           <button
+              follows="top|left"
+              height="18"
+              image_disabled="AddItem_Disabled"
+              image_selected="AddItem_Press"
+              image_unselected="AddItem_Off"
+              layout="topleft"
+              left_pad="14" 
+              name="zoom_plus_btn"
+              width="18"
+              top="18">
+             <commit_callback
+                function="Zoom.plus" />
+             <mouse_held_callback
+                function="Zoom.plus" />
+           </button>
+           <slider_bar
+              height="50"
+              layout="topleft"
+              name="zoom_slider"
+              orientation="vertical"
+              tool_tip="Zoom camera toward focus"
+              top_pad="0"
+              min_val="0"
+              max_val="1" 
+              width="18">
+             <commit_callback function="Slider.value_changed"/>
+           </slider_bar>
+           <button
+              follows="top|left"
+              height="18"
+              image_disabled="MinusItem_Disabled"
+              image_selected="MinusItem_Press"
+              image_unselected="MinusItem_Off"
+              layout="topleft"
+              name="zoom_minus_btn"
+              top_pad="0"
+              width="18">
+             <commit_callback
+                function="Zoom.minus" />
+             <mouse_held_callback
+                function="Zoom.minus" />
+           </button>
+         <joystick_track
+         follows="top|left"
+         height="78"
+         image_selected="Cam_Tracking_In"
+         image_unselected="Cam_Tracking_Out"
+         layout="topleft"
+         left="133"
+         name="cam_track_stick"
+         quadrant="left"
+         scale_image="false"
+         sound_flags="3"
+         tool_tip="Move camera up and down, left and right"
+         top="20"
+         width="78">
+         <commit_callback
+           function="Camera.track" />
+         <mouse_held_callback
+            function="Camera.track" />         
+         </joystick_track>
+        </panel>
+    </panel>
+    <panel
+     border="false"
+     height="42"
+     layout="topleft"
+     left="2"
+     top_pad="0"
+     name="buttons"
+     width="226">
+		<button
+         height="23"
+         label=""
+         layout="topleft"
+         left="83"
+         is_toggle="true"
+         image_overlay="Cam_Avatar_Off"
+         image_selected="PushButton_Selected_Press"
+         name="presets_btn"
+         tab_stop="false"
+         tool_tip="Preset Views"
+         top="13"
+         width="25">
+		</button>
+		<button
+         height="23"
+         label=""
+         layout="topleft"
+         left_pad="1"
+         is_toggle="true"
+         image_overlay="PanOrbit_Off"
+         image_selected="PushButton_Selected_Press"
+         name="pan_btn"
+         tab_stop="false"
+         tool_tip="Orbit Zoom Pan"
+         width="25">
+		</button>
+    </panel>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/en/floater_help_browser.xml b/indra/newview/skins/minimal/xui/en/floater_help_browser.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cc551f7d58448b75f4a0ce56a6d5604a9c273628
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/floater_help_browser.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ can_resize="true"
+ can_minimize="false" 
+ height="360"
+ layout="topleft"
+ min_height="360"
+ left="645"
+ top="10" 
+ min_width="345"
+ name="floater_help_browser"
+ save_rect="true"
+ single_instance="true"
+ title="HOW TO"
+ width="335">
+    <floater.string
+     name="loading_text">
+        Loading...
+    </floater.string>
+    <floater.string
+     name="done_text">
+    </floater.string>
+    <layout_stack
+     bottom="360"
+     follows="left|right|top|bottom"
+     layout="topleft"
+     left="5"
+     orientation="vertical" 
+     name="stack1"
+     top="20"
+     width="325">
+        <layout_panel
+         layout="topleft"
+         left_delta="0"
+         top_delta="0"
+         name="external_controls"
+         user_resize="false"
+         width="325">
+            <web_browser
+              trusted_content="true" 
+             bottom="-5"
+             follows="left|right|top|bottom"
+             layout="topleft"
+             left="0"
+             name="browser"
+             top="0"
+             height="300"
+             width="325" />
+        </layout_panel>
+    </layout_stack>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/en/floater_media_browser.xml b/indra/newview/skins/minimal/xui/en/floater_media_browser.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4862146c94e53f232aa658ff615a4c6efa2984be
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/floater_media_browser.xml
@@ -0,0 +1,242 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ legacy_header_height="18"
+ can_resize="true"
+ height="440"
+ layout="topleft"
+ min_height="140"
+ min_width="467"
+ name="floater_about"
+ save_rect="true"
+ auto_tile="true"
+ title="MEDIA BROWSER"
+ width="820">
+    <floater.string
+     name="home_page_url">
+        http://www.secondlife.com
+    </floater.string>
+    <floater.string
+     name="support_page_url">
+        http://support.secondlife.com
+    </floater.string>
+    <layout_stack
+     bottom="440"
+     follows="left|right|top|bottom"
+     layout="topleft"
+     left="10"
+     name="stack1"
+     orientation="vertical" 
+     top="20"
+     width="800">
+        <layout_panel
+         auto_resize="false"
+         default_tab_group="1" 
+         height="20"
+         layout="topleft"
+         left="0"
+         min_height="20"
+         name="nav_controls"
+         top="400"
+         user_resize="false"
+         width="800">
+            <button
+             follows="left|top"
+             height="20"
+             label="Back"
+             layout="topleft"
+             left="0"
+             name="back"
+             top="0"
+             width="55">
+				<button.commit_callback
+				function="MediaBrowser.Back" />
+			</button>
+            <button
+             follows="left|top"
+             height="20"
+             label="Forward"
+             layout="topleft"
+             left_pad="3"
+             name="forward"
+             top_delta="0"
+             width="68">
+				<button.commit_callback
+				function="MediaBrowser.Forward" />
+			</button>
+            <button
+             enabled="false"
+             follows="left|top"
+             height="20"
+             label="Reload"
+             layout="topleft"
+             left_pad="2"
+             name="reload"
+             top_delta="0"
+             width="70">
+				<button.commit_callback
+				function="MediaBrowser.Refresh" />
+			</button>
+            <combo_box
+             allow_text_entry="true"
+             follows="left|top|right"
+             tab_group="1"
+             height="20"
+             layout="topleft"
+             left_pad="5"
+             max_chars="1024"
+             name="address"
+             combo_editor.select_on_focus="true"
+             top_delta="0"
+             width="540">
+				<combo_box.commit_callback
+				function="MediaBrowser.EnterAddress" />
+			</combo_box>
+            <button
+             enabled="false"
+             follows="right|top"
+             height="20"
+             label="Go"
+             layout="topleft"
+             left_pad="5"
+             name="go"
+             top_delta="0"
+             width="50">
+				<button.commit_callback
+				function="MediaBrowser.Go" />
+			</button>
+        </layout_panel>
+        <layout_panel
+         auto_resize="false"
+         height="20"
+         layout="topleft"
+         left_delta="0"
+         min_height="20"         
+         name="time_controls"
+         top_delta="0"
+         user_resize="false"
+         width="800">
+            <button
+             follows="left|top"
+             height="20"
+             label="rewind"
+             layout="topleft"
+             left="0"
+             name="rewind"
+             top="0"
+             width="55" />
+            <button
+             follows="left|top"
+             height="20"
+             image_selected="button_anim_play_selected.tga"
+             image_unselected="button_anim_play.tga"
+             layout="topleft"
+             left_delta="55"
+             name="play"
+             top_delta="0"
+             width="55" />
+            <button
+             follows="left|top"
+             height="20"
+             image_selected="button_anim_pause_selected.tga"
+             image_unselected="button_anim_pause.tga"
+             layout="topleft"
+             left_delta="0"
+             name="pause"
+             top_delta="0"
+             width="55" />
+            <button
+             follows="left|top"
+             height="20"
+             label="stop"
+             layout="topleft"
+             left_pad="10"
+             name="stop"
+             top_delta="0"
+             width="55" />
+            <button
+             follows="left|top"
+             height="20"
+             label="forward"
+             layout="topleft"
+             left_pad="20"
+             name="seek"
+             top_delta="0"
+             width="55" />
+        </layout_panel>
+        <layout_panel
+         auto_resize="false"
+         height="20"
+         layout="topleft"
+         left_delta="0"
+         min_height="20"         
+         name="parcel_owner_controls"
+         top_delta="0"
+         user_resize="false"
+         width="540">
+            <button
+             enabled="false"
+             follows="left|top"
+             height="20"
+             label="Send Current Page to Parcel"
+             layout="topleft"
+             left="0"
+             name="assign"
+             top="0"
+             width="200">
+				<button.commit_callback
+				function="MediaBrowser.Assign" />
+			</button>
+        </layout_panel>
+        <layout_panel
+         height="40"
+         layout="topleft"
+         left_delta="0"
+         name="external_controls"
+         top_delta="0"
+         user_resize="false"
+         width="540">
+          <web_browser
+             bottom="-30"
+             follows="all"
+             layout="topleft"
+             left="0"
+             name="browser"
+             top="0"
+             width="540" />
+            <button
+             follows="bottom|left"
+             height="20"
+             label="Open in My Web Browser"
+             layout="topleft"
+             left_delta="0"
+             name="open_browser"
+             top_pad="5"
+             width="185">
+              <button.commit_callback
+                function="MediaBrowser.OpenWebBrowser" />
+            </button>
+            <check_box
+             control_name="UseExternalBrowser"
+             follows="bottom|left"
+             height="20"
+             label="Always open in my web browser"
+             layout="topleft"
+             left_pad="5"
+             name="open_always"
+             top_delta="0"
+             width="200" />
+            <button
+             follows="bottom|right"
+             height="20"
+             label="Close"
+             layout="topleft"
+             left_pad="80"
+             name="close"
+             top_delta="0"
+             width="70">
+				<button.commit_callback
+				function="MediaBrowser.Close" />
+			</button>
+        </layout_panel>
+    </layout_stack>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/en/floater_nearby_chat.xml b/indra/newview/skins/minimal/xui/en/floater_nearby_chat.xml
new file mode 100644
index 0000000000000000000000000000000000000000..74ac885202358fed788103d02335febd1bfc74bf
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/floater_nearby_chat.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater
+ border_visible="false"
+ border="false"
+ bg_opaque_image="Window_Foreground" 
+ bg_alpha_image="Window_Background" 
+ bg_alpha_image_overlay="DkGray_66" 
+ legacy_header_height="18"
+ can_minimize="true"
+ can_tear_off="false"
+ can_resize="true"
+ can_drag_on_left="false"
+ can_close="false"
+ can_dock="true"
+ bevel_style="in"
+ height="300"
+ min_width="235"
+ layout="topleft"
+ name="nearby_chat"
+ save_rect="true"
+ title="NEARBY CHAT"
+ save_dock_state="true"
+ save_visibility="true"
+ single_instance="true"
+ width="320">
+            <check_box
+             bottom_delta="36"
+             control_name="TranslateChat"
+             enabled="true"
+             height="16"
+             label="Translate chat (powered by Google)"
+             layout="topleft"
+             left="5"
+             name="translate_chat_checkbox"
+             width="230" />
+  <chat_history
+    parse_urls="true"
+    bg_readonly_color="ChatHistoryBgColor"
+    bg_writeable_color="ChatHistoryBgColor"
+    follows="all"
+    left="5"
+    top_delta="17"
+    layout="topleft"
+    height="260"
+    name="chat_history"
+    parse_highlights="true"
+    text_color="ChatHistoryTextColor"
+    text_readonly_color="ChatHistoryTextColor"
+    right_widget_pad="5"
+    left_widget_pad="0"
+    width="315" />
+</floater>
diff --git a/indra/newview/skins/minimal/xui/en/floater_side_bar_tab.xml b/indra/newview/skins/minimal/xui/en/floater_side_bar_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..83b1260620150305b850d5d185efc2eca416bf36
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/floater_side_bar_tab.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<floater
+ can_close="true"
+ can_resize="true"
+ min_width="333"
+ min_height="440"
+ save_rect="true"
+ save_visibility="true"
+ >
+</floater>
diff --git a/indra/newview/skins/minimal/xui/en/floater_web_content.xml b/indra/newview/skins/minimal/xui/en/floater_web_content.xml
new file mode 100644
index 0000000000000000000000000000000000000000..50cb5b14ce7c0c4f1d8ac60962e2cefdb7379059
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/floater_web_content.xml
@@ -0,0 +1,189 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+  legacy_header_height="18"
+  can_resize="true"
+  height="775"
+  layout="topleft"
+  min_height="400"
+  min_width="500"
+  name="floater_web_content"
+  save_rect="true"
+  auto_tile="true"
+  title=""
+  initial_mime_type="text/html"
+  width="780">
+  <layout_stack
+    bottom="775"
+    follows="left|right|top|bottom"
+    layout="topleft"
+    left="5"
+    name="stack1"
+    orientation="vertical"
+    top="20"
+    width="770">
+    <layout_panel
+      auto_resize="false"
+      default_tab_group="1"
+      height="22"
+      layout="topleft"
+      left="0"
+      min_height="20"
+      name="nav_controls"
+      top="400"
+      user_resize="false"
+      width="770">
+      <button
+        image_overlay="Arrow_Left_Off"
+		    image_disabled="PushButton_Disabled"
+		    image_disabled_selected="PushButton_Disabled"
+		    image_selected="PushButton_Selected"
+		    image_unselected="PushButton_Off"
+		    hover_glow_amount="0.15"
+        tool_tip="Navigate back"
+        follows="left|top"
+        height="22"
+        layout="topleft"
+        left="1"
+        name="back"
+        top="0"
+        width="22">
+        <button.commit_callback
+          function="WebContent.Back" />
+      </button>
+      <button
+        image_overlay="Arrow_Right_Off"
+		    image_disabled="PushButton_Disabled"
+		    image_disabled_selected="PushButton_Disabled"
+		    image_selected="PushButton_Selected"
+		    image_unselected="PushButton_Off"
+        tool_tip="Navigate forward"
+        follows="left|top"
+        height="22"
+        layout="topleft"
+        left="27"
+        name="forward"
+        top_delta="0"
+        width="22">
+        <button.commit_callback
+          function="WebContent.Forward" />
+      </button>
+      <button
+        image_overlay="Stop_Off"
+		    image_disabled="PushButton_Disabled"
+		    image_disabled_selected="PushButton_Disabled"
+		    image_selected="PushButton_Selected"
+		    image_unselected="PushButton_Off"
+        tool_tip="Stop navigation"
+        enabled="true"
+        follows="left|top"
+        height="22"
+        layout="topleft"
+        left="51"
+        name="stop"
+        top_delta="0"
+        width="22">
+        <button.commit_callback
+          function="WebContent.Stop" />
+      </button>
+      <button
+        image_overlay="Refresh_Off"
+		    image_disabled="PushButton_Disabled"
+		    image_disabled_selected="PushButton_Disabled"
+		    image_selected="PushButton_Selected"
+		    image_unselected="PushButton_Off"
+        tool_tip="Reload page"
+        follows="left|top"
+        height="22"
+        layout="topleft"
+        left="51"
+        name="reload"
+        top_delta="0"
+        width="22">
+        <button.commit_callback
+          function="WebContent.Reload" />
+      </button>
+      <combo_box
+        allow_text_entry="true"
+        follows="left|top|right"
+        tab_group="1"
+        height="22"
+        layout="topleft"
+        left_pad="4"
+        max_chars="1024"
+        name="address"
+        combo_editor.select_on_focus="true"
+        tool_tip="Enter URL here"
+        top_delta="0"
+        width="672">
+        <combo_box.commit_callback
+          function="WebContent.EnterAddress" />
+      </combo_box>
+      <icon
+        name="media_secure_lock_flag"
+        height="16"
+        follows="top|right"
+        image_name="Lock2"
+        layout="topleft"
+        left_delta="620"
+        top_delta="2"
+        visible="false" 
+        tool_tip="Secured Browsing"
+        width="16" />
+      <button
+        image_overlay="ExternalBrowser_Off"
+		    image_disabled="PushButton_Disabled"
+		    image_disabled_selected="PushButton_Disabled"
+		    image_selected="PushButton_Selected"
+		    image_unselected="PushButton_Off"
+        tool_tip="Open current URL in your desktop browser"
+        follows="right|top"
+        enabled="true" 
+        height="22"
+        layout="topleft"
+        name="popexternal"
+        right="770"
+        top_delta="-2"
+        width="22">
+        <button.commit_callback
+          function="WebContent.PopExternal" />
+      </button>
+    </layout_panel>
+    <layout_panel
+      height="40"
+      layout="topleft"
+      left_delta="0"
+      name="external_controls"
+      top_delta="0"
+      user_resize="false"
+      width="585">
+      <web_browser
+        bottom="-22"
+        follows="all"
+        layout="topleft"
+        left="0"
+        name="webbrowser"
+        top="0"/>
+      <text
+        type="string"
+        length="200"
+        follows="bottom|left"
+        height="20"
+        layout="topleft"
+        left_delta="0"
+        name="statusbartext"
+        parse_urls="false"
+        text_color="0.4 0.4 0.4 1"
+        top_pad="5"
+        width="495"/>
+      <progress_bar
+        color_bar="0.3 1.0 0.3 1"
+        follows="bottom|right"
+        height="16"
+        top_delta="-1"
+        left_pad="24"
+        layout="topleft"
+        name="statusbarprogress"
+        width="64"/>
+    </layout_panel>
+  </layout_stack>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/en/inspect_avatar.xml b/indra/newview/skins/minimal/xui/en/inspect_avatar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..853d5f8735fca90dbfbe67ecd89d2490d6a657ae
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/inspect_avatar.xml
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater
+ legacy_header_height="25"
+ bevel_style="in"
+ bg_opaque_image="Inspector_Background"
+ can_close="false"
+ can_minimize="false"
+ height="164"
+ layout="topleft"
+ name="inspect_avatar"
+ single_instance="true"
+ sound_flags="0"
+ visible="true"
+ width="245">
+  <!-- Allowed fields include:
+	[BORN_ON] ("12/3/2008")
+	[SL_PROFILE] (Second Life profile),
+    [RW_PROFILE] (real world profile),
+	[ACCTTYPE] ("Resident"),
+	[PAYMENTINFO] ("Payment Info on File"),
+	[AGE] ("1 year 2 months")
+   -->
+  <string
+   name="Subtitle">
+[AGE]
+  </string>
+  <string
+     name="Details">
+[SL_PROFILE]
+    </string>
+  <text
+     follows="top|left"
+     font="SansSerif"
+     height="20"
+     left="8"
+     name="user_name_small"
+     top="7"
+     text_color="White"
+     use_ellipses="true"
+     word_wrap="true"
+    visible="false" 
+     value="Grumpity ProductEngine with a long name"
+     width="185" />
+   <text
+    follows="top|left"
+    font="SansSerifBigLarge"
+    height="21"
+    left="8"
+    name="user_name"
+    top="10"
+    text_color="White"
+    use_ellipses="true"
+    value="Grumpity ProductEngine"
+    width="190" />
+   <text
+     follows="top|left"
+     height="16"
+     left="8"
+     name="user_slid"
+     font="SansSerifSmallBold"
+     text_color="EmphasisColor"
+     value="james.linden"
+     width="185"
+     use_ellipses="true" />
+    <text
+     follows="top|left"
+     height="16"
+     left="8"
+     name="user_subtitle"
+     font="SansSerifSmall"
+     text_color="White"
+     top_pad="0" 
+     value="11 Months, 3 days old"
+     width="175"
+     use_ellipses="true" />
+     <text
+     follows="left|top|right"
+     height="35"
+     left="8"
+     name="user_details"
+     right="-10"
+     word_wrap="true"
+     top_pad="4"
+     use_ellipses="true"
+     width="220">This is my second life description and I really think it is great. But for some reason my description is super extra long because I like to talk a whole lot
+    </text>
+    <slider
+     follows="top|left"
+     height="23"
+     increment="0.01"
+     left="1"
+     max_val="0.95"
+     min_val="0.05"
+     name="volume_slider"
+     show_text="false"
+     tool_tip="Voice volume"
+     top_pad="0"
+     value="0.5"
+     width="200" />
+    <button
+     follows="top|left"
+     height="16"
+     image_disabled="Audio_Off"
+     image_disabled_selected="AudioMute_Off"
+     image_hover_selected="AudioMute_Over"
+     image_selected="AudioMute_Off"
+     image_unselected="Audio_Off"
+     is_toggle="true"
+     left_pad="0"
+     top_delta="4"
+     name="mute_btn"
+     width="16" />
+    <avatar_icon
+     follows="top|left"
+     height="38"
+     right="-10"
+     bevel_style="in"
+     border_style="line"
+     mouse_opaque="true"
+     name="avatar_icon"
+     top="10"
+     width="38" />
+<!-- Overlapping buttons for default actions
+    llinspectavatar.cpp makes visible the most likely default action 
+-->
+    <button
+     follows="top|left"
+     height="20"
+     label="Add Friend"
+     left="8"
+     top="135"
+     name="add_friend_btn"
+     width="90" />
+    <button
+     follows="top|left"
+     height="20"
+     label="IM"
+     left_delta="0"
+     top_delta="0"
+     name="im_btn"
+     width="80"
+     commit_callback.function="InspectAvatar.IM"/>
+	<button
+     follows="top|left"
+     height="20"
+     label="Profile"
+     layout="topleft"
+     name="view_profile_btn"
+     left_delta="96"
+     top_delta="0"
+     tab_stop="false"
+     width="80" />
+      <!--  gear buttons here -->
+  <menu_button
+     follows="top|left"
+     height="20"
+     layout="topleft"
+     image_overlay="OptionsMenu_Off"
+     menu_filename="menu_inspect_avatar_gear.xml"
+     name="gear_btn"
+     right="-5"
+     top_delta="0"
+     width="35" />
+	<menu_button
+     follows="top|left"
+     height="20"
+     image_overlay="OptionsMenu_Off"
+     menu_filename="menu_inspect_self_gear.xml"
+     name="gear_self_btn"
+     right="-5"
+     top_delta="0"
+     width="35" />
+  <panel 
+    follows="top|left" 
+    top="164" 
+    left="0" 
+    height="60" 
+    width="228" 
+    visible="false"
+    background_visible="true"
+    name="moderator_panel"
+    background_opaque="true" 
+    bg_opaque_color="MouseGray">
+    <button
+      name="disable_voice"
+      label="Disable Voice"
+      top="20"
+      width="95"
+      height="20"
+      left="10"
+      commit_callback.function="InspectAvatar.DisableVoice"/>
+    <button
+      name="enable_voice"
+      label="Enable Voice"
+      top="20"
+      width="95"
+      height="20"
+      left="10"
+      visible="false" 
+      commit_callback.function="InspectAvatar.EnableVoice"/>
+  </panel>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/en/inspect_object.xml b/indra/newview/skins/minimal/xui/en/inspect_object.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f424069ec6760e612b9d02a75714d77583a35392
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/inspect_object.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater
+ legacy_header_height="25"
+ bevel_style="in"
+ bg_opaque_image="Inspector_Background"
+ can_close="false"
+ can_minimize="false"
+ height="150"
+ layout="topleft"
+ name="inspect_object"
+ single_instance="true"
+ sound_flags="0"
+ visible="true"
+ width="228">
+  <string name="Creator">By [CREATOR]</string>
+  <string name="CreatorAndOwner">
+By [CREATOR]
+Owner [OWNER]
+  </string>
+  <string name="Price">L$[AMOUNT]</string>
+  <string name="PriceFree">Free!</string>
+  <string name="Touch">Touch</string>
+  <string name="Sit">Sit</string>
+  <text
+     parse_urls="false"
+     follows="all"
+     font="SansSerifLarge"
+     height="30"
+     left="8"
+     name="object_name"
+     text_color="White"
+     top="6"
+     use_ellipses="true"
+     word_wrap="true"
+     width="220" />
+  <text
+   follows="all"
+   height="50"
+   left="8"
+   name="object_creator"
+   top_pad="6"
+   use_ellipses="true"
+   width="220">
+    by secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
+owner secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
+  </text>
+  <text
+   follows="all"
+   font="SansSerifSmall"
+   font.style="BOLD"
+   height="14"
+   halign="right"
+   right="-5"
+   name="price_text"
+   text_color="white"
+   top="60"
+   font_shadow="none"
+   width="60">
+L$30,000
+  </text>
+  <text
+   clip_partial="true"
+   follows="all"
+   font="SansSerifSmall"
+   height="25"
+   left="8"
+   name="object_description"
+   top="76"
+   use_ellipses="true"
+   width="220"
+   word_wrap="true">
+  </text>
+  <!-- Overlapping buttons for all default actions.  Show "Buy" if
+  for sale, "Sit" if can sit, etc. -->
+  <icon
+   name="secure_browsing"
+   image_name="Lock"
+   left="0"
+   visible="false"
+   width="18"
+   height="18"
+   top="103"
+   tool_tip="Secure Browsing"
+   follows="left|top" />
+   <text
+   follows="all"
+   font="SansSerifSmall"
+   height="13"
+   name="object_media_url"
+   width="207"
+   left_pad="2"
+   top_delta="0"
+   max_length = "50"
+   use_ellipses="true">
+   http://www.superdupertest.com
+</text>
+  <button
+   follows="top|left"
+   height="20"
+   label="Take Copy"
+   left_delta="0"
+   name="take_free_copy_btn"
+   top_delta="0"
+   width="80" />
+  <button
+   follows="top|left"
+   height="20"
+   label="Touch"
+   left_delta="0"
+   name="touch_btn"
+   top_delta="0"
+   width="80" />
+  <button
+   follows="top|left"
+   height="20"
+   label="Sit"
+   left_delta="0"
+   name="sit_btn"
+   top_delta="0"
+   width="80" />
+  <button
+   follows="top|left"
+   height="20"
+   label="Open"
+   left_delta="0"
+   name="open_btn"
+   top_delta="0"
+   width="80" />
+
+ <!--  non-overlapping buttons here -->
+  <menu_button
+     follows="top|left"
+     height="20"
+     image_overlay="OptionsMenu_Off"
+     menu_filename="menu_inspect_object_gear.xml"
+     name="gear_btn"
+     right="-5"
+     top_delta="0"
+     width="35" />
+</floater>
diff --git a/indra/newview/skins/minimal/xui/en/main_view.xml b/indra/newview/skins/minimal/xui/en/main_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..45ba785c1f90dc0feba4dcd01acb4e6ee0ef6e2a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/main_view.xml
@@ -0,0 +1,268 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ follows="left|right|top|bottom"
+ height="768"
+ layout="topleft"
+ left="0"
+ mouse_opaque="false"
+ tab_stop="false" 
+ name="main_view"
+ width="1024">
+  <panel top="0"
+   follows="all"
+   height="768"
+   mouse_opaque="false"
+   name="login_panel_holder"
+   width="1024"/>
+ 
+  <layout_stack border_size="0"
+                follows="all"
+                mouse_opaque="false"
+                height="768"
+                name="menu_stack"
+                orientation="vertical"
+                top="0">
+    <layout_panel auto_resize="false"
+                  height="30"
+                  mouse_opaque="false"
+                  name="nav_bar_container"
+                  tab_stop="false"
+                  min_height="0" 
+                  width="1024"
+                  user_resize="false" 
+                  visible="true">
+    </layout_panel>
+    <layout_panel auto_resize="true"
+                  follows="all"
+                  height="500"
+                  layout="topleft"
+                  mouse_opaque="false"
+                  tab_stop="false" 
+                  name="hud"
+                  width="1024">
+        <panel auto_resize="false"
+               follows="all"
+               height="500"
+               top="0" 
+               layout="topleft"
+               mouse_opaque="false"
+               tab_stop="false"
+               name="non_side_tray_view"
+               user_resize="false"
+               width="1024">
+
+          <layout_stack border_size="0"
+                        bottom="500"
+                        follows="all"
+                        height="500"
+                        left="0"
+                        top="0" 
+                        mouse_opaque="false"
+                        name="world_stack"
+                        open_time_constant="0.03"
+                        close_time_constant="0.03" 
+                        orientation="vertical">
+            <layout_panel auto_resize="true"
+                          follows="all"
+                          height="500"
+                          layout="topleft"
+                          tab_stop="false"
+                          mouse_opaque="false"
+                          user_resize="false" 
+                          name="hud container"
+                          width="500">
+              <view top="0"
+                    follows="all"
+                    height="500"
+                    left="0"
+                    mouse_opaque="false"
+                    name="floater_snap_region"
+                    width="500"/>
+              <panel follows="left|top"
+                     height="0"
+                     left="0"
+                     mouse_opaque="false"
+                     name="topinfo_bar_container"
+                     tab_stop="false"
+                     top="0"
+                     visible="false"
+                     width="1024"/>
+              <panel bottom="500"
+                     follows="left|right|bottom"
+                     height="25"
+                     left="0"
+                     mouse_opaque="false"
+                     tab_stop="false"
+                     name="stand_stop_flying_container"
+                     visible="false"
+                     width="500"/>
+              <panel follows="all"
+										 height="500"
+										 left="0"
+										 mouse_opaque="false"
+										 name="floater_view_holder"
+										 tab_group="-1"
+										 tab_stop="false"
+										 top="0"
+										 width="500">
+                <floater_view follows="all"
+															height="500"
+															left="0"
+															mouse_opaque="false"
+															name="Floater View"
+															tab_group="-1"
+															tab_stop="false"
+															top="0"
+															width="500"/>
+              </panel>
+              <panel bottom="500"
+                    follows="all"
+                    height="500"
+                    left="0"
+                    mouse_opaque="false"
+                    name="world_view_rect"
+                     top="0" 
+                    width="500"/>
+            </layout_panel>
+            <layout_panel auto_resize="false"
+                   min_height="33"
+                   height="33" 
+                   mouse_opaque="false"
+                   name="bottom_tray_container"
+                   visible="false"/>
+            <layout_panel auto_resize="false"
+                          height="215"
+                          mouse_opaque="false"
+                          user_resize="false"
+                          name="avatar_picker_and_destination_guide_container"
+                          visible="false">
+              <panel top="0"
+                     height="215"
+                     left="0"
+                     background_visible="true" 
+                     width="500"
+                     follows="all">
+                <web_browser
+                  top="0"
+                  height="200"
+                  follows="all"
+                  name="destination_guide_contents"
+                  trusted_content="true"
+                  visible="false"/>
+                <web_browser
+                  top="0"
+                  height="200"
+                  follows="all"
+                  name="avatar_picker_contents"
+                  visible="false"
+                  trusted_content="true"/>
+                <button
+                  name="close"
+                  width="22"
+                  height="23"
+                  right="-10" 
+                  top="2" 
+                  follows="top|right" 
+                  chrome="true" 
+                  tab_stop="false" 
+                  image_unselected="bottomtray_close_off"
+                  image_selected="bottomtray_close_press"
+                  />
+              </panel>
+            </layout_panel>
+          </layout_stack>
+        </panel>
+      <debug_view follows="all"
+                  left="0"
+                  top="0"
+                  mouse_opaque="false"
+                  height="500"
+                  name="DebugView"
+                  width="1024"/>
+    </layout_panel>
+  </layout_stack>
+  <panel mouse_opaque="false"
+       follows="right|top"
+       name="status_bar_container"
+       tab_stop="false"
+       height="30"
+       left="-70"
+       top="0"
+       width="70"
+       visible="false"/>
+  <panel follows="top|bottom"
+         height="500"
+         mouse_opaque="false"
+         tab_stop="false"
+         name="hidden_side_tray"
+         visible="false"
+         width="333">
+    <panel
+      name="side_tray_container"
+      width="333"
+      height="500"/>
+  </panel>
+
+  <panel top="0"
+        follows="all"
+        mouse_opaque="false"
+        left="0"
+        name="snapshot_floater_view_holder" 
+        width="1024"
+        height="798">
+    <snapshot_floater_view enabled="false"
+                           follows="all"
+                           height="768"
+                           left="0"
+                           mouse_opaque="false"
+                           name="Snapshot Floater View"
+                           tab_stop="false"
+                           top="0"
+                           visible="false"
+                           width="1024"/>
+  </panel>
+  <panel top="0"
+         follows="all"
+         height="768"
+         mouse_opaque="false"
+         name="popup_holder"
+         class="popup_holder"
+         width="1024">
+    <icon follows="right|bottom"
+      image_name="Resize_Corner"
+      right="-1"
+      name="resize_corner"
+      width="11"
+      bottom="-1"
+      height="11" />
+  </panel>
+  <view top="0"
+        left="0"
+        width="1024"
+        height="768"
+        name="hint_holder"
+        mouse_opaque="false"
+        follows="all"/>
+  <panel top="0"
+         follows="all"
+         height="768"
+         mouse_opaque="true"
+         name="progress_view"
+         filename="panel_progress.xml"
+         class="progress_view"
+         width="1024"
+         visible="false"/>
+  <menu_holder top="0"
+               follows="all"
+               height="768"
+               mouse_opaque="false"
+               name="Menu Holder"
+               width="1024"/>
+  <tooltip_view top="0"
+                follows="all"
+                height="768"
+                mouse_opaque="false"
+                name="tooltip view"
+                tab_group="-2"
+                width="1024"/>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/en/menu_add_wearable_gear.xml b/indra/newview/skins/minimal/xui/en/menu_add_wearable_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28c4762eaa349321958cbb1894c89c999cf1efb1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_add_wearable_gear.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_attachment_other.xml b/indra/newview/skins/minimal/xui/en/menu_attachment_other.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b55e6772761dfa0ffaadc8a462ee49428d020c10
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_attachment_other.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- *NOTE: See also menu_avatar_other.xml -->
+<context_menu
+ layout="topleft"
+ name="Avatar Pie">
+    <menu_item_call
+     label="View Profile"
+     name="Profile...">
+        <menu_item_call.on_click
+         function="ShowAgentProfile"
+         parameter="hit object" />
+    </menu_item_call>
+   <menu_item_call
+     enabled="false"
+     label="Add Friend"
+     name="Add Friend">
+        <menu_item_call.on_click
+         function="Avatar.AddFriend" />
+        <menu_item_call.on_enable
+         function="Avatar.EnableAddFriend" />
+    </menu_item_call>
+    <menu_item_call
+     label="IM"
+     name="Send IM...">
+        <menu_item_call.on_click
+         function="Avatar.SendIM" />
+    </menu_item_call>
+   <menu_item_separator />
+    <menu_item_call
+     enabled="false"
+     label="Block"
+     name="Avatar Mute">
+        <menu_item_call.on_click
+         function="Avatar.Mute" />
+        <menu_item_call.on_enable
+         function="Avatar.EnableMute" />
+    </menu_item_call>
+    <menu_item_call
+     label="Report"
+     name="abuse">
+        <menu_item_call.on_click
+         function="Avatar.ReportAbuse" />
+    </menu_item_call>
+        <menu_item_call
+         label="Freeze"
+         name="Freeze...">
+            <menu_item_call.on_click
+             function="Avatar.Freeze" />
+            <menu_item_call.on_visible
+             function="Avatar.EnableFreezeEject"/>
+        </menu_item_call>
+        <menu_item_call
+         label="Eject"
+         name="Eject...">
+            <menu_item_call.on_click
+             function="Avatar.Eject" />
+            <menu_item_call.on_visible
+             function="Avatar.EnableFreezeEject"/>
+        </menu_item_call>
+        <menu_item_call
+         label="Debug Textures"
+         name="Debug...">
+            <menu_item_call.on_click
+             function="Avatar.Debug" />
+            <menu_item_call.on_visible
+             function="IsGodCustomerService"/>
+        </menu_item_call>
+	    <menu_item_call
+         label="Zoom In"
+          name="Zoom In">
+        <menu_item_call.on_click
+           function="Tools.LookAtSelection"
+           parameter="zoom" />
+    </menu_item_call>
+   <menu_item_separator />
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/en/menu_attachment_self.xml b/indra/newview/skins/minimal/xui/en/menu_attachment_self.xml
new file mode 100644
index 0000000000000000000000000000000000000000..542a7dc7dc0f9df8b2c48a5acc6baa8ac2066da1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_attachment_self.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ layout="topleft"
+ name="Attachment Pie">
+  <menu_item_call
+   enabled="false"
+   label="Touch"
+   layout="topleft"
+   name="Attachment Object Touch">
+    <menu_item_call.on_click
+     function="Object.Touch" />
+    <menu_item_call.on_enable
+     function="Object.EnableTouch"
+     name="EnableTouch"/>
+  </menu_item_call>
+  <menu_item_call
+   enabled="false"
+   label="Detach"
+   layout="topleft"
+   name="Detach">
+    <menu_item_call.on_click
+     function="Attachment.Detach" />
+    <menu_item_call.on_enable
+     function="Attachment.EnableDetach" />
+  </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/en/menu_avatar_icon.xml b/indra/newview/skins/minimal/xui/en/menu_avatar_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_avatar_icon.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_avatar_other.xml b/indra/newview/skins/minimal/xui/en/menu_avatar_other.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b76629f401bfaacdd38e1b5ce720948ac90bd087
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_avatar_other.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- *NOTE: See also menu_attachment_other.xml -->
+<context_menu
+ layout="topleft"
+ name="Avatar Pie">
+    <menu_item_call
+     label="View Profile"
+     name="Profile...">
+        <menu_item_call.on_click
+         function="ShowAgentProfile"
+         parameter="hit object" />
+    </menu_item_call>
+   <menu_item_call
+     enabled="false"
+     label="Add Friend"
+     name="Add Friend">
+        <menu_item_call.on_click
+         function="Avatar.AddFriend" />
+        <menu_item_call.on_enable
+         function="Avatar.EnableAddFriend" />
+    </menu_item_call>
+    <menu_item_call
+     label="IM"
+     name="Send IM...">
+        <menu_item_call.on_click
+         function="Avatar.SendIM" />
+    </menu_item_call>
+   <menu_item_separator />
+    <menu_item_call
+     enabled="false"
+     label="Block"
+     name="Avatar Mute">
+        <menu_item_call.on_click
+         function="Avatar.Mute" />
+        <menu_item_call.on_enable
+         function="Avatar.EnableMute" />
+    </menu_item_call>
+    <menu_item_call
+     label="Report"
+     name="abuse">
+        <menu_item_call.on_click
+         function="Avatar.ReportAbuse" />
+    </menu_item_call>
+        <menu_item_call
+         label="Freeze"
+         name="Freeze...">
+            <menu_item_call.on_click
+             function="Avatar.Freeze" />
+            <menu_item_call.on_visible
+             function="Avatar.EnableFreezeEject"/>
+        </menu_item_call>
+        <menu_item_call
+         label="Eject"
+         name="Eject...">
+            <menu_item_call.on_click
+             function="Avatar.Eject" />
+            <menu_item_call.on_visible
+             function="Avatar.EnableFreezeEject"/>
+        </menu_item_call>
+        <menu_item_call
+         label="Debug Textures"
+         name="Debug...">
+            <menu_item_call.on_click
+             function="Avatar.Debug" />
+            <menu_item_call.on_visible
+             function="IsGodCustomerService"/>
+        </menu_item_call>
+	    <menu_item_call
+         label="Zoom In"
+          name="Zoom In">
+        <menu_item_call.on_click
+           function="Tools.LookAtSelection"
+           parameter="zoom" />
+    </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/en/menu_avatar_self.xml b/indra/newview/skins/minimal/xui/en/menu_avatar_self.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_avatar_self.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_bottomtray.xml b/indra/newview/skins/minimal/xui/en/menu_bottomtray.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_bottomtray.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_cof_attachment.xml b/indra/newview/skins/minimal/xui/en/menu_cof_attachment.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_cof_attachment.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_cof_body_part.xml b/indra/newview/skins/minimal/xui/en/menu_cof_body_part.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_cof_body_part.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_cof_clothing.xml b/indra/newview/skins/minimal/xui/en/menu_cof_clothing.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_cof_clothing.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_cof_gear.xml b/indra/newview/skins/minimal/xui/en/menu_cof_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28c4762eaa349321958cbb1894c89c999cf1efb1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_cof_gear.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_edit.xml b/indra/newview/skins/minimal/xui/en/menu_edit.xml
new file mode 100644
index 0000000000000000000000000000000000000000..747eb3fc6a6b17003beaa15d9d1377e2745caf5f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_edit.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu create_jump_keys="true"
+      label="Edit"
+      name="Edit"
+      visible="false">
+  <menu_item_call
+   label="Undo"
+   name="Undo"
+   shortcut="control|Z">
+    <menu_item_call.on_click
+     function="Edit.Undo" />
+    <menu_item_call.on_enable
+     function="Edit.EnableUndo" />
+  </menu_item_call>
+  <menu_item_call
+   label="Redo"
+   name="Redo"
+   shortcut="control|Y">
+    <menu_item_call.on_click
+     function="Edit.Redo" />
+    <menu_item_call.on_enable
+     function="Edit.EnableRedo" />
+  </menu_item_call>
+  <menu_item_separator/>
+  <menu_item_call
+   label="Cut"
+   name="Cut"
+   shortcut="control|X">
+    <menu_item_call.on_click
+     function="Edit.Cut" />
+    <menu_item_call.on_enable
+     function="Edit.EnableCut" />
+  </menu_item_call>
+  <menu_item_call
+   label="Copy"
+   name="Copy"
+   shortcut="control|C">
+    <menu_item_call.on_click
+     function="Edit.Copy" />
+    <menu_item_call.on_enable
+     function="Edit.EnableCopy" />
+  </menu_item_call>
+  <menu_item_call
+   label="Paste"
+   name="Paste"
+   shortcut="control|V">
+    <menu_item_call.on_click
+     function="Edit.Paste" />
+    <menu_item_call.on_enable
+     function="Edit.EnablePaste" />
+  </menu_item_call>
+  <menu_item_call
+   label="Delete"
+   name="Delete"
+   allow_key_repeat="true" 
+   shortcut="Del">
+    <menu_item_call.on_click
+     function="Edit.Delete" />
+    <menu_item_call.on_enable
+     function="Edit.EnableDelete" />
+  </menu_item_call>
+  <menu_item_call
+   label="Duplicate"
+   name="Duplicate"
+   shortcut="control|D">
+    <menu_item_call.on_click
+     function="Edit.Duplicate" />
+    <menu_item_call.on_enable
+     function="Edit.EnableDuplicate" />
+  </menu_item_call>
+  <menu_item_separator/>
+  <menu_item_call
+   label="Select All"
+   name="Select All"
+   shortcut="control|A">
+    <menu_item_call.on_click
+     function="Edit.SelectAll" />
+    <menu_item_call.on_enable
+     function="Edit.EnableSelectAll" />
+  </menu_item_call>
+  <menu_item_call
+   label="Deselect"
+   name="Deselect"
+   shortcut="control|E">
+    <menu_item_call.on_click
+     function="Edit.Deselect" />
+    <menu_item_call.on_enable
+     function="Edit.EnableDeselect" />
+  </menu_item_call>
+</menu>
\ No newline at end of file
diff --git a/indra/newview/skins/minimal/xui/en/menu_favorites.xml b/indra/newview/skins/minimal/xui/en/menu_favorites.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_favorites.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_gesture_gear.xml b/indra/newview/skins/minimal/xui/en/menu_gesture_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28c4762eaa349321958cbb1894c89c999cf1efb1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_gesture_gear.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_group_plus.xml b/indra/newview/skins/minimal/xui/en/menu_group_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_group_plus.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_hide_navbar.xml b/indra/newview/skins/minimal/xui/en/menu_hide_navbar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_hide_navbar.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_im_well_button.xml b/indra/newview/skins/minimal/xui/en/menu_im_well_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_im_well_button.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_imchiclet_adhoc.xml b/indra/newview/skins/minimal/xui/en/menu_imchiclet_adhoc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_imchiclet_adhoc.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_imchiclet_group.xml b/indra/newview/skins/minimal/xui/en/menu_imchiclet_group.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_imchiclet_group.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_imchiclet_p2p.xml b/indra/newview/skins/minimal/xui/en/menu_imchiclet_p2p.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_imchiclet_p2p.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_inspect_avatar_gear.xml b/indra/newview/skins/minimal/xui/en/menu_inspect_avatar_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5a4a0597810bd6a2c03eb725ccb9bea82cdf5074
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_inspect_avatar_gear.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="utf-8"?>
+<toggleable_menu
+         create_jump_keys="true"
+         layout="topleft"
+         mouse_opaque="false"
+         visible="false"
+         name="Gear Menu">
+  <menu_item_call
+   label="View Profile"
+   enabled="true" 
+   name="view_profile">
+    <menu_item_call.on_click
+     function="InspectAvatar.ViewProfile"/>
+  </menu_item_call>
+  <menu_item_call
+   label="Add Friend"
+   name="add_friend">
+    <menu_item_call.on_click
+     function="InspectAvatar.AddFriend"/>
+    <menu_item_call.on_enable
+     function="InspectAvatar.Gear.Enable"/>
+  </menu_item_call>
+  <menu_item_call
+   label="IM"
+   name="im">
+    <menu_item_call.on_click
+     function="InspectAvatar.IM"/>
+  </menu_item_call>
+  <menu_item_call
+   label="Teleport"
+   name="teleport">
+    <menu_item_call.on_click
+     function="InspectAvatar.Teleport"/>
+    <menu_item_call.on_enable
+     function="InspectAvatar.Gear.EnableTeleportOffer"/>
+  </menu_item_call>
+  <menu_item_separator />
+  <menu_item_call
+   label="Block"
+   name="block">
+    <menu_item_call.on_click
+     function="InspectAvatar.ToggleMute"/>
+    <menu_item_call.on_visible
+     function="InspectAvatar.EnableMute" />
+  </menu_item_call>
+  <menu_item_call
+   label="Unblock"
+   name="unblock">
+    <menu_item_call.on_click
+     function="InspectAvatar.ToggleMute"/>
+    <menu_item_call.on_visible
+     function="InspectAvatar.EnableUnmute" />
+  </menu_item_call>
+  <menu_item_call
+   label="Report"
+   name="report">
+    <menu_item_call.on_click
+     function="InspectAvatar.Report"/>
+  </menu_item_call>  
+  <menu_item_call
+   label="Freeze"
+   name="freeze">
+    <menu_item_call.on_click
+     function="InspectAvatar.Freeze"/>
+    <menu_item_call.on_visible
+     function="InspectAvatar.VisibleFreeze"/>
+  </menu_item_call>
+  <menu_item_call
+   label="Eject"
+   name="eject">
+    <menu_item_call.on_click
+     function="InspectAvatar.Eject"/>
+    <menu_item_call.on_visible
+     function="InspectAvatar.VisibleEject"/>
+  </menu_item_call>
+  <menu_item_call
+   label="Kick"
+   name="kick">
+    <menu_item_call.on_click
+     function="InspectAvatar.Kick"/>
+    <menu_item_call.on_visible
+     function="InspectAvatar.EnableGod"/>
+  </menu_item_call>
+  <menu_item_call
+  label="CSR"
+  name="csr">
+    <menu_item_call.on_click
+     function="InspectAvatar.CSR" />
+    <menu_item_call.on_visible
+     function="InspectAvatar.EnableGod" />
+  </menu_item_call>
+  <menu_item_call
+   label="Debug Textures"
+   name="debug">
+    <menu_item_call.on_click
+     function="Avatar.Debug"/>
+    <menu_item_call.on_visible
+     function="IsGodCustomerService"/>
+  </menu_item_call>
+  <menu_item_call
+   label="Find On Map"
+   name="find_on_map">
+    <menu_item_call.on_click
+     function="InspectAvatar.FindOnMap"/>
+    <menu_item_call.on_visible
+     function="InspectAvatar.VisibleFindOnMap"/>
+  </menu_item_call>
+  <menu_item_call
+   label="Zoom In"
+   name="zoom_in">
+    <menu_item_call.on_click
+     function="InspectAvatar.ZoomIn"/>
+    <menu_item_call.on_visible
+     function="InspectAvatar.VisibleZoomIn"/>
+  </menu_item_call>  
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/en/menu_inspect_object_gear.xml b/indra/newview/skins/minimal/xui/en/menu_inspect_object_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8ec360a604c6891126b1394050dea6a6bc5038e5
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_inspect_object_gear.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<toggleable_menu
+   create_jump_keys="true"
+   layout="topleft"
+   mouse_opaque="false"
+   visible="false"
+   name="Gear Menu">
+  <menu_item_call
+   label="Touch"
+   layout="topleft"
+   enabled="true"
+   name="touch">    
+    <menu_item_call.on_click
+     function="InspectObject.Touch"/>
+    <menu_item_call.on_visible
+     function="Object.EnableTouch" />
+  </menu_item_call>
+  <menu_item_call
+  label="Sit"
+  layout="topleft"
+  name="sit">
+    <menu_item_call.on_click
+     function="InspectObject.Sit"/>
+    <menu_item_call.on_visible
+     function="Object.EnableSit"/>
+  </menu_item_call>
+  <menu_item_call
+   label="Report"
+   layout="topleft"
+   name="report">
+    <menu_item_call.on_click
+     function="Object.ReportAbuse" />
+  </menu_item_call>
+  <menu_item_call
+   label="Block"
+   layout="topleft"
+   name="block">
+    <menu_item_call.on_click
+     function="Object.Mute" />
+    <menu_item_call.on_visible
+     function="Object.EnableMute" />
+  </menu_item_call>
+  <menu_item_call
+    label="Zoom In"
+    layout="topleft"
+   name="zoom_in">
+    <menu_item_call.on_click
+     function="InspectObject.ZoomIn" />
+  </menu_item_call>    
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/en/menu_inspect_self_gear.xml b/indra/newview/skins/minimal/xui/en/menu_inspect_self_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ae8b640d2694e47c539616436b495d27956a5fe1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_inspect_self_gear.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu
+ layout="topleft"
+ name="Self Pie">
+  <menu_item_call
+   label="Sit Down"
+   layout="topleft"
+   name="Sit Down Here">
+    <menu_item_call.on_click
+     function="Self.SitDown"
+     parameter="" />
+    <menu_item_call.on_enable
+     function="Self.EnableSitDown" />
+  </menu_item_call>
+  <menu_item_call
+   label="Stand Up"
+   layout="topleft"
+   name="Stand Up">
+    <menu_item_call.on_click
+     function="Self.StandUp"
+     parameter="" />
+    <menu_item_call.on_enable
+     function="Self.EnableStandUp" />
+  </menu_item_call>
+  <menu_item_call
+    label="My Friends"
+    layout="topleft"
+    name="Friends...">
+    <menu_item_call.on_click
+     function="SideTray.PanelPeopleTab"
+     parameter="friends_panel" />
+  </menu_item_call>
+  <menu_item_call
+    label="My Profile"
+    layout="topleft"
+    name="Profile...">
+    <menu_item_call.on_click
+     function="ShowAgentProfile"
+     parameter="agent" />
+  </menu_item_call>
+  <menu_item_call
+   label="Debug Textures"
+       name="Debug...">
+    <menu_item_call.on_click
+     function="Avatar.Debug" />
+    <menu_item_call.on_visible
+     function="IsGodCustomerService"/>
+  </menu_item_call>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/en/menu_inv_offer_chiclet.xml b/indra/newview/skins/minimal/xui/en/menu_inv_offer_chiclet.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_inv_offer_chiclet.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_inventory.xml b/indra/newview/skins/minimal/xui/en/menu_inventory.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_inventory.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_inventory_add.xml b/indra/newview/skins/minimal/xui/en/menu_inventory_add.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_inventory_add.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/minimal/xui/en/menu_inventory_gear_default.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28c4762eaa349321958cbb1894c89c999cf1efb1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_inventory_gear_default.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_land.xml b/indra/newview/skins/minimal/xui/en/menu_land.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_land.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_landmark.xml b/indra/newview/skins/minimal/xui/en/menu_landmark.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28c4762eaa349321958cbb1894c89c999cf1efb1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_landmark.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_login.xml b/indra/newview/skins/minimal/xui/en/menu_login.xml
new file mode 100644
index 0000000000000000000000000000000000000000..62dbce3f56557d38034d2f34dbdb618f2b9464ac
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_login.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu_bar/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_mini_map.xml b/indra/newview/skins/minimal/xui/en/menu_mini_map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_mini_map.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_navbar.xml b/indra/newview/skins/minimal/xui/en/menu_navbar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_navbar.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_nearby_chat.xml b/indra/newview/skins/minimal/xui/en/menu_nearby_chat.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_nearby_chat.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_notification_well_button.xml b/indra/newview/skins/minimal/xui/en/menu_notification_well_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_notification_well_button.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_object.xml b/indra/newview/skins/minimal/xui/en/menu_object.xml
new file mode 100644
index 0000000000000000000000000000000000000000..888ce42cf1690132e1ac7a0d831dc2ef6a99939f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_object.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ layout="topleft"
+ name="Object Pie">
+   <menu_item_call
+     enabled="false"
+     label="Sit Here"
+     name="Object Sit">
+        <menu_item_call.on_click
+         function="Object.SitOrStand" />
+        <menu_item_call.on_enable
+         function="Object.EnableSit" />
+   </menu_item_call>
+   <menu_item_call
+     enabled="false"
+     label="Stand Up"
+     name="Object Stand Up">
+        <menu_item_call.on_click
+         function="Object.SitOrStand" />
+        <menu_item_call.on_enable
+         function="Object.EnableStandUp" />
+   </menu_item_call>
+  <menu_item_call
+       label="Zoom In"
+       name="Zoom In">
+    <menu_item_call.on_click
+     function="Object.ZoomIn" />
+  </menu_item_call>
+  <menu_item_call
+    enabled="false"
+    label="Touch"
+    name="Object Touch">
+    <menu_item_call.on_click
+     function="Object.Touch" />
+    <menu_item_call.on_enable
+     function="Object.EnableTouch"
+     name="EnableTouch"
+     parameter="Touch" />
+  </menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/en/menu_object_icon.xml b/indra/newview/skins/minimal/xui/en/menu_object_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_object_icon.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_outfit_gear.xml b/indra/newview/skins/minimal/xui/en/menu_outfit_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28c4762eaa349321958cbb1894c89c999cf1efb1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_outfit_gear.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_outfit_tab.xml b/indra/newview/skins/minimal/xui/en/menu_outfit_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_outfit_tab.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_participant_list.xml b/indra/newview/skins/minimal/xui/en/menu_participant_list.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_participant_list.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_people_friends_view_sort.xml b/indra/newview/skins/minimal/xui/en/menu_people_friends_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28c4762eaa349321958cbb1894c89c999cf1efb1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_people_friends_view_sort.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_people_groups.xml b/indra/newview/skins/minimal/xui/en/menu_people_groups.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_people_groups.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_people_groups_view_sort.xml b/indra/newview/skins/minimal/xui/en/menu_people_groups_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28c4762eaa349321958cbb1894c89c999cf1efb1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_people_groups_view_sort.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_people_nearby.xml b/indra/newview/skins/minimal/xui/en/menu_people_nearby.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3d64133f5418b7430024c35501e71be94d16f1d8
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_people_nearby.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu
+ layout="topleft"
+ name="Avatar Context Menu">
+	<menu_item_call
+     label="View Profile"
+     layout="topleft"
+     name="View Profile">
+		<menu_item_call.on_click
+         function="Avatar.Profile" />
+	</menu_item_call>
+	<menu_item_call
+     label="Add Friend"
+     layout="topleft"
+     name="Add Friend">
+		<menu_item_call.on_click
+         function="Avatar.AddFriend" />
+		<menu_item_call.on_enable
+         function="Avatar.EnableItem"
+         parameter="can_add" />
+	</menu_item_call>
+	<menu_item_call
+     label="Remove Friend"
+     layout="topleft"
+     name="Remove Friend">
+		<menu_item_call.on_click
+         function="Avatar.RemoveFriend" />
+		<menu_item_call.on_enable
+         function="Avatar.EnableItem"
+         parameter="can_delete" />
+	</menu_item_call>
+	<menu_item_call
+     label="IM"
+     layout="topleft"
+     name="IM">
+		<menu_item_call.on_click
+         function="Avatar.IM" />
+	</menu_item_call>
+	<menu_item_check
+     label="Block/Unblock"
+     layout="topleft"
+     name="Block/Unblock">
+		<menu_item_check.on_click
+         function="Avatar.BlockUnblock" />
+		<menu_item_check.on_check
+         function="Avatar.CheckItem"
+         parameter="is_blocked" />
+		<menu_item_check.on_enable
+         function="Avatar.EnableItem"
+         parameter="can_block" />
+	</menu_item_check>
+	<menu_item_call
+    label="Offer Teleport"
+    name="teleport">
+		<menu_item_call.on_click
+		 function="Avatar.OfferTeleport"/>
+		<menu_item_call.on_enable
+		function="Avatar.EnableItem"
+		parameter="can_offer_teleport"/>
+	</menu_item_call>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/en/menu_people_nearby_multiselect.xml b/indra/newview/skins/minimal/xui/en/menu_people_nearby_multiselect.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_people_nearby_multiselect.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_people_nearby_view_sort.xml b/indra/newview/skins/minimal/xui/en/menu_people_nearby_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28c4762eaa349321958cbb1894c89c999cf1efb1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_people_nearby_view_sort.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_people_recent_view_sort.xml b/indra/newview/skins/minimal/xui/en/menu_people_recent_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28c4762eaa349321958cbb1894c89c999cf1efb1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_people_recent_view_sort.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_picks.xml b/indra/newview/skins/minimal/xui/en/menu_picks.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_picks.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_picks_plus.xml b/indra/newview/skins/minimal/xui/en/menu_picks_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28c4762eaa349321958cbb1894c89c999cf1efb1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_picks_plus.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_place.xml b/indra/newview/skins/minimal/xui/en/menu_place.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28c4762eaa349321958cbb1894c89c999cf1efb1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_place.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_place_add_button.xml b/indra/newview/skins/minimal/xui/en/menu_place_add_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_place_add_button.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_places_gear_folder.xml b/indra/newview/skins/minimal/xui/en/menu_places_gear_folder.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28c4762eaa349321958cbb1894c89c999cf1efb1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_places_gear_folder.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_places_gear_landmark.xml b/indra/newview/skins/minimal/xui/en/menu_places_gear_landmark.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28c4762eaa349321958cbb1894c89c999cf1efb1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_places_gear_landmark.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_profile_overflow.xml b/indra/newview/skins/minimal/xui/en/menu_profile_overflow.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28c4762eaa349321958cbb1894c89c999cf1efb1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_profile_overflow.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_save_outfit.xml b/indra/newview/skins/minimal/xui/en/menu_save_outfit.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28c4762eaa349321958cbb1894c89c999cf1efb1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_save_outfit.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_script_chiclet.xml b/indra/newview/skins/minimal/xui/en/menu_script_chiclet.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_script_chiclet.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_slurl.xml b/indra/newview/skins/minimal/xui/en/menu_slurl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_slurl.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_teleport_history_gear.xml b/indra/newview/skins/minimal/xui/en/menu_teleport_history_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28c4762eaa349321958cbb1894c89c999cf1efb1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_teleport_history_gear.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_teleport_history_item.xml b/indra/newview/skins/minimal/xui/en/menu_teleport_history_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_teleport_history_item.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_teleport_history_tab.xml b/indra/newview/skins/minimal/xui/en/menu_teleport_history_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_teleport_history_tab.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_text_editor.xml b/indra/newview/skins/minimal/xui/en/menu_text_editor.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_text_editor.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_topinfobar.xml b/indra/newview/skins/minimal/xui/en/menu_topinfobar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d3d9e2ef8af7f00c8ada970a219847aedeee27ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_topinfobar.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu visible="false"/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_url_agent.xml b/indra/newview/skins/minimal/xui/en/menu_url_agent.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_url_agent.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_url_group.xml b/indra/newview/skins/minimal/xui/en/menu_url_group.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_url_group.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_url_http.xml b/indra/newview/skins/minimal/xui/en/menu_url_http.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_url_http.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_url_inventory.xml b/indra/newview/skins/minimal/xui/en/menu_url_inventory.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_url_inventory.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_url_map.xml b/indra/newview/skins/minimal/xui/en/menu_url_map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_url_map.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_url_objectim.xml b/indra/newview/skins/minimal/xui/en/menu_url_objectim.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_url_objectim.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_url_parcel.xml b/indra/newview/skins/minimal/xui/en/menu_url_parcel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_url_parcel.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_url_slapp.xml b/indra/newview/skins/minimal/xui/en/menu_url_slapp.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_url_slapp.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_url_slurl.xml b/indra/newview/skins/minimal/xui/en/menu_url_slurl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_url_slurl.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_url_teleport.xml b/indra/newview/skins/minimal/xui/en/menu_url_teleport.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_url_teleport.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_viewer.xml b/indra/newview/skins/minimal/xui/en/menu_viewer.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cd83ea4e992f429d2535e0977a82bc7aab0ea952
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_viewer.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<menu_bar
+ bg_visible="false"
+ follows="left|top|right"
+ name="Main Menu">
+    <menu
+     create_jump_keys="true"
+     label="Help"
+     name="Help"
+     tear_off="true">
+        <menu_item_call
+         label="[SECOND_LIFE] Help"
+         name="Second Life Help"
+         shortcut="F1">
+            <menu_item_call.on_click
+             function="ShowHelp"
+             parameter="f1_help" />
+        </menu_item_call>
+    </menu>
+    <menu
+     create_jump_keys="true"
+     label="Advanced"
+     name="Advanced"
+     tear_off="true"
+     visible="false">
+        <menu
+         create_jump_keys="true"
+         label="Shortcuts"
+         name="Shortcuts"
+         tear_off="true"
+         visible="false">
+            <menu_item_check
+             label="Fly"
+             name="Fly"
+             shortcut="Home">
+                <menu_item_check.on_check
+                 function="Agent.getFlying" />
+                <menu_item_check.on_click
+                 function="Agent.toggleFlying" />
+                <menu_item_check.on_enable
+                 function="Agent.enableFlying" />
+            </menu_item_check>
+            <menu_item_call
+             label="Close Window"
+             name="Close Window"
+             shortcut="control|W">
+                <menu_item_call.on_click
+                 function="File.CloseWindow" />
+                <menu_item_call.on_enable
+                 function="File.EnableCloseWindow" />
+            </menu_item_call>
+            <menu_item_call
+             label="Close All Windows"
+             name="Close All Windows"
+             shortcut="control|shift|W">
+                <menu_item_call.on_click
+                 function="File.CloseAllWindows" />
+                <menu_item_call.on_enable
+                 function="File.EnableCloseAllWindows" />
+            </menu_item_call>
+
+            <menu_item_call
+             label="Reset View"
+             name="Reset View"
+             shortcut="Esc">
+                <menu_item_call.on_click
+                 function="View.ResetView" />
+            </menu_item_call>
+        </menu> <!--Shortcuts-->
+    </menu>
+</menu_bar>
diff --git a/indra/newview/skins/minimal/xui/en/menu_wearable_list_item.xml b/indra/newview/skins/minimal/xui/en/menu_wearable_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_wearable_list_item.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_wearing_gear.xml b/indra/newview/skins/minimal/xui/en/menu_wearing_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..28c4762eaa349321958cbb1894c89c999cf1efb1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_wearing_gear.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<toggleable_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/menu_wearing_tab.xml b/indra/newview/skins/minimal/xui/en/menu_wearing_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb19c5eb2cf851786cb00887e96c7ab1c130b167
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/menu_wearing_tab.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<context_menu/>
diff --git a/indra/newview/skins/minimal/xui/en/notification_visibility.xml b/indra/newview/skins/minimal/xui/en/notification_visibility.xml
new file mode 100644
index 0000000000000000000000000000000000000000..616b544847ec8830223ec49e323fa6a87abd579f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/notification_visibility.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" ?>
+<notification_visibility>
+  <respond name="VoiceInviteP2P" response="Decline"/>
+  <respond name="VoiceInviteAdHoc" response="Decline"/>
+  <respond name="VoiceInviteGroup" response="Decline"/>
+
+  <!-- group and voice are disabled features -->
+  <hide tag="group"/>
+  <hide tag="voice"/>
+
+  <!-- no spammy scripts -->
+  <!-- <hide name="ScriptDialog"/> -->
+
+  <!-- hints pertaining to UI we don't show -->
+  <hide name="FirstBalanceIncrease"/>
+  <hide name="FirstInventory"/>
+  <hide name="HintSidePanel"/>
+  <hide name="HintMove"/>
+  <hide name="HintDisplayName"/>
+  <hide name="HintInventory"/>
+  <hide name="HintLindenDollar"/>
+
+  <!-- spam from servers, such as "Autopilot cancelled" -->
+  <hide name="SystemMessageTip"/>
+  
+  <!-- show everything else -->
+  <show/>
+</notification_visibility>
+
diff --git a/indra/newview/skins/minimal/xui/en/notifications.xml b/indra/newview/skins/minimal/xui/en/notifications.xml
new file mode 100644
index 0000000000000000000000000000000000000000..84da9472cc8d05c3dcd4aee2724794af37ca2d0b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/notifications.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" ?>
+<notifications>
+  <notification
+ icon="notify.tga"
+ name="UserGiveItem"
+ type="offer">
+    [NAME_SLURL] is offering you [ITEM_SLURL].  Using this item requires you to switch to Advanced mode where you will find the item in your Inventory. To switch to Advanced mode, quit and restart this application and change the mode setting on the login screen.
+    <form name="form">
+      <button
+       index="4"
+       name="Show"
+       text="Keep Item"/>
+      <button
+       index="1"
+       name="Discard"
+       text="Reject Item"/>
+      <button
+       index="2"
+       name="Mute"
+       text="Block User"/>
+    </form>
+  </notification>
+  <notification
+   icon="notify.tga"
+   name="ObjectGiveItem"
+   type="offer">
+    An object named &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; owned by [NAME_SLURL] is offering you [ITEM_SLURL].  Using this item requires you to switch to Advanced mode where you will find the item in your Inventory. To switch to Advanced mode, quit and restart this application and change the mode setting on the login screen.
+    <form name="form">
+      <button
+       index="0"
+       name="Keep"
+       text="Keep Item"/>
+      <button
+       index="1"
+       name="Discard"
+       text="Reject Item"/>
+      <button
+       index="2"
+       name="Mute"
+       text="Block Object"/>
+    </form>
+  </notification>
+
+</notifications>
diff --git a/indra/newview/skins/minimal/xui/en/panel_adhoc_control_panel.xml b/indra/newview/skins/minimal/xui/en/panel_adhoc_control_panel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5730adab8ac390984b07baa035ad27628c4a0518
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/panel_adhoc_control_panel.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ border="false"
+ follows="all"
+ height="215"
+ name="panel_im_control_panel"
+ width="150">
+    <layout_stack
+     mouse_opaque="false"
+     border_size="0"
+     clip="false"
+     follows="all"
+     height="215"
+     layout="topleft"
+     left="3"
+     name="vertical_stack"
+     orientation="vertical"
+     top="0"
+     width="147">
+        <layout_panel
+         auto_resize="true"
+         follows="top|left"
+         height="130"
+         layout="topleft"
+         left="0"
+         min_height="0"
+         mouse_opaque="false"
+         width="147"
+         top="0"
+         name="speakers_list_panel"
+         user_resize="false">
+            <avatar_list
+             color="DkGray2"
+             follows="all"
+             height="130"
+             ignore_online_status="true"
+             layout="topleft"
+             name="speakers_list"
+             opaque="false"
+             show_info_btn="true"
+             show_profile_btn="false"
+             show_speaking_indicator="false"
+             width="147" />
+        </layout_panel>
+    </layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/en/panel_bottomtray.xml b/indra/newview/skins/minimal/xui/en/panel_bottomtray.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e0c0bd13d978097e34a0a06139b3cc524080b67e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/panel_bottomtray.xml
@@ -0,0 +1,483 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ bg_alpha_color="DkGray"
+ bg_opaque_color="DkGray"
+ chrome="true"
+ follows="left|bottom|right"
+ height="33"
+ layout="topleft"
+ left="0"
+ name="bottom_tray"
+ focus_root="true"
+ top="28"
+ width="1310">
+	<string
+     name="DragIndicationImageName"
+     value="Accordion_ArrowOpened_Off" />
+	<string
+     name="SpeakBtnToolTip"
+     value="Turns microphone on/off" />
+	<string
+     name="VoiceControlBtnToolTip"
+     value="Shows/hides voice control panel" />
+	<layout_stack
+     border_size="0"
+     clip="false"
+     follows="all"
+     height="28"
+     layout="topleft"
+     left="0"
+     mouse_opaque="false"
+     name="toolbar_stack"
+     orientation="horizontal"
+     top="0"
+     width="1310">
+		<layout_panel
+         auto_resize="false"
+         user_resize="false"
+         min_width="2"
+         width="2" />
+		<layout_panel
+         auto_resize="false"
+         layout="topleft"
+         max_width="320"
+         min_width="214"
+         height="28"
+         mouse_opaque="false"
+		 name="chat_bar_layout_panel"
+         user_resize="true"
+         width="308" >
+			<panel
+		   name="chat_bar"
+			  filename="panel_nearby_chat_bar.xml"
+			  left="0"
+			  height="28"
+			  width="306"
+			  top="0"
+			  mouse_opaque="false"
+			  follows="left|right"
+          />
+		</layout_panel>
+    <layout_panel
+        auto_resize="false"
+         follows="right"
+         height="28"
+         layout="topleft"
+         min_height="28"
+         min_width="65"
+         mouse_opaque="false"
+         name="gesture_panel"
+         top_delta="0"
+         user_resize="false"
+         width="85">
+			<gesture_combo_list
+             follows="left|right"
+             height="23"
+             label="Gesture"
+             layout="topleft"
+             get_more="false"
+             view_all="false"
+             left="0"
+             name="Gesture"
+             tool_tip="Shows/hides gestures"
+             top="5"
+             width="82">
+				<combo_button
+                 pad_right="10"
+                 can_drag="false"
+                 use_ellipses="true" />
+				<combo_list
+                 page_lines="17" />
+			</gesture_combo_list>
+		</layout_panel>
+		<layout_panel
+         auto_resize="false"
+         follows="left|right"
+         height="28"
+         layout="topleft"
+         min_height="28"
+         min_width="52"
+         mouse_opaque="false"
+         name="cam_panel"
+         user_resize="false"
+         width="83">
+			<bottomtray_button
+              can_drag="false"
+             follows="left|right"
+             height="23"
+             image_pressed="PushButton_Press"
+             image_pressed_selected="PushButton_Selected_Press"
+             image_selected="PushButton_Selected_Press"
+             is_toggle="true"
+             label="View"
+             layout="topleft"
+             left="0"
+             name="camera_btn"
+             tool_tip="Shows/hides camera controls"
+             top="5"
+             use_ellipses="true"
+             width="80">
+				<init_callback
+                 function="Button.SetDockableFloaterToggle"
+                 parameter="camera" />
+			</bottomtray_button>
+		</layout_panel>
+		<layout_panel
+         auto_resize="false"
+         follows="left|right"
+         height="28"
+         layout="topleft"
+         min_width="17"
+         name="splitter_panel"
+         user_resize="false"
+         width="17">
+			<icon
+             follows="left|bottom"
+             height="18"
+             width="2"
+             left="6"
+             image_name="Button_Separator"
+             name="separator"
+             top="7"/>
+		</layout_panel>
+		<layout_panel
+		  auto_resize="false"
+		  follows="left|right"
+		  height="28"
+		  layout="topleft"
+		  min_height="28"
+		  min_width="83"
+		  mouse_opaque="false"
+		  name="avatar_and_destinations_panel"
+		  user_resize="false"
+		  width="103">
+			<bottomtray_button
+			 can_drag="false"
+			follows="left|right"
+			height="23"
+			image_pressed="PushButton_Press"
+			image_pressed_selected="PushButton_Selected_Press"
+			image_selected="PushButton_Selected_Press"
+			label="Destinations"
+			layout="topleft"
+			left="0"
+			name="destination_btn"
+			tool_tip="Shows destinations window"
+			top="5"
+			is_toggle="true"
+			use_ellipses="true"
+			width="100">
+				<bottomtray_button.commit_callback
+				  function="Destination.show" />
+			</bottomtray_button>
+		</layout_panel>
+		<layout_panel
+		  auto_resize="false"
+		  follows="left|right"
+		  height="28"
+		  layout="topleft"
+		  min_height="28"
+		  min_width="73"
+		  mouse_opaque="false"
+		  name="avatar_and_destinations_panel"
+		  user_resize="false"
+		  width="103">
+			<bottomtray_button
+			 can_drag="false"
+			follows="left|right"
+			height="23"
+			image_pressed="PushButton_Press"
+			image_pressed_selected="PushButton_Selected_Press"
+			image_selected="PushButton_Selected_Press"
+			label="My Avatar"
+			layout="topleft"
+			left="0"
+			name="avatar_btn"
+			top="5"
+			is_toggle="true"
+			use_ellipses="true"
+			width="100">
+				<bottomtray_button.commit_callback
+				  function="Avatar.show" />
+			</bottomtray_button>
+		</layout_panel>
+		<layout_panel
+		  auto_resize="false"
+		  follows="left|right"
+		  height="28"
+		  layout="topleft"
+		  min_width="17"
+		  name="splitter_panel"
+		  user_resize="false"
+		  width="17">
+			<icon
+             follows="left|bottom"
+             height="18"
+             width="2"
+             left="6"
+             image_name="Button_Separator"
+             name="separator"
+             top="7"/>
+		</layout_panel>
+		<layout_panel
+         auto_resize="false"
+         follows="right"
+         height="28"
+         layout="topleft"
+         min_height="28"
+         min_width="65"
+         mouse_opaque="false"
+         name="people_panel"
+         top_delta="0"
+         user_resize="false"
+         width="105">
+			<bottomtray_button
+			   can_drag="false"
+			  follows="left|right"
+			  height="23"
+			  image_pressed="PushButton_Press"
+			  image_pressed_selected="PushButton_Selected_Press"
+			  image_selected="PushButton_Selected_Press"
+			  label="People"
+			  layout="topleft"
+			  left="0"
+			  name="show_people_button"
+			  tool_tip="Shows people window"
+			  top="5"
+			  is_toggle="true"
+			  use_ellipses="true"
+			  width="100">
+				<bottomtray_button.commit_callback
+				  function="ShowSidetrayPanel"
+				 parameter="panel_people" />
+			</bottomtray_button>
+		</layout_panel>
+		<layout_panel
+		   auto_resize="false"
+		   follows="right"
+		   height="28"
+		   layout="topleft"
+		   min_height="28"
+		   min_width="65"
+		   mouse_opaque="false"
+		   name="profile_panel"
+		   top_delta="0"
+		   user_resize="false"
+		   width="105">
+			<bottomtray_button
+			   can_drag="false"
+			  follows="left|right"
+			  height="23"
+			  image_pressed="PushButton_Press"
+			  image_pressed_selected="PushButton_Selected_Press"
+			  image_selected="PushButton_Selected_Press"
+			  label="Profile"
+			  layout="topleft"
+			  left="0"
+			  name="show_profile_btn"
+			  tool_tip="Shows profile window"
+			  is_toggle="true"
+			  top="5"
+			  use_ellipses="true"
+			  width="100">
+				<bottomtray_button.commit_callback
+				  function="ToggleAgentProfile"
+				  parameter="agent"/>
+			</bottomtray_button>
+		</layout_panel>
+		<layout_panel
+		   auto_resize="false"
+		   follows="right"
+		   height="28"
+		   layout="topleft"
+		   min_height="28"
+		   min_width="65"
+		   mouse_opaque="false"
+		   name="howto_panel"
+		   top_delta="0"
+		   user_resize="false"
+		   width="105">
+			<bottomtray_button
+			   can_drag="false"
+			  follows="left|right"
+			  height="23"
+			  image_pressed="PushButton_Press"
+			  image_pressed_selected="PushButton_Selected_Press"
+			  image_selected="PushButton_Selected_Press"
+			  label="How To"
+			  layout="topleft"
+			  left="0"
+			  name="show_help_btn"
+			  tool_tip="Open Second Life How To topics"
+			  is_toggle="true"
+			  top="5"
+			  use_ellipses="true"
+			  width="100">
+				<bottomtray_button.commit_callback
+				  function="ToggleHelp"
+				  parameter="f1_help" />
+			</bottomtray_button>
+		</layout_panel>
+		<layout_panel
+		   follows="left|right"
+		   height="30"
+		   layout="topleft"
+		   min_width="95"
+		   mouse_opaque="false"
+		   name="chiclet_list_panel"
+		   top="0"
+		   user_resize="false"
+		   width="189">
+			<!--*NOTE: min_width of the chiclet_panel (chiclet_list) must be the same
+as for parent layout_panel (chiclet_list_panel) to resize bottom tray properly. EXT-991-->
+			<chiclet_panel
+             chiclet_padding="4"
+             follows="left|right"
+             height="24"
+             layout="topleft"
+             left="1"
+             min_width="95"
+             mouse_opaque="false"
+             name="chiclet_list"
+             top="7"
+             width="189">
+				<button
+                 auto_resize="true"
+                 follows="right"
+                 height="29"
+                 image_hover_selected="SegmentedBtn_Left_Over"
+                 image_hover_unselected="SegmentedBtn_Left_Over"
+                 image_overlay="Arrow_Small_Left"
+                 image_pressed="SegmentedBtn_Left_Press"
+                 image_pressed_selected="SegmentedBtn_Left_Press"
+                 image_selected="SegmentedBtn_Left_Off"
+                 image_unselected="SegmentedBtn_Left_Off"
+                 layout="topleft"
+                 name="chicklet_left_scroll_button"
+                 tab_stop="false"
+                 top="-28"
+                 visible="false"
+                 width="7" />
+				<button
+                 auto_resize="true"
+                 follows="right"
+                 height="29"
+                 image_hover_selected="SegmentedBtn_Right_Over"
+                 image_hover_unselected="SegmentedBtn_Right_Over"
+                 image_overlay="Arrow_Small_Right"
+                 image_pressed="SegmentedBtn_Right_Press"
+                 image_pressed_selected="SegmentedBtn_Right_Press"
+                 image_selected="SegmentedBtn_Right_Off"
+                 image_unselected="SegmentedBtn_Right_Off"
+                 layout="topleft"
+                 name="chicklet_right_scroll_button"
+                 tab_stop="false"
+                 top="-28"
+                 visible="false"
+                 width="7" />
+			</chiclet_panel>
+		</layout_panel>
+		<layout_panel auto_resize="false"
+                      user_resize="false"
+                      width="4"
+                      min_width="4"/>
+		<layout_panel
+         auto_resize="false"
+         follows="right"
+         height="28"
+         layout="topleft"
+         min_height="28"
+         min_width="37"
+         name="im_well_panel"
+         top="0"
+         user_resize="false"
+         width="37">
+			<chiclet_im_well
+             follows="right"
+             height="28"
+             layout="topleft"
+             left="0"
+             max_displayed_count="99"
+             name="im_well"
+             top="0"
+             width="35">
+				<!--
+Emulate 4 states of button by background images, see details in EXT-3147. The same should be for notification_well button
+xml attribute           Description
+image_unselected        "Unlit" - there are no new messages
+image_selected          "Unlit" + "Selected" - there are no new messages and the Well is open
+image_pressed           "Lit" - there are new messages
+image_pressed_selected  "Lit" + "Selected" - there are new messages and the Well is open
+             -->
+				<button
+                 auto_resize="true"
+                 follows="right"
+                 halign="center"
+                 height="23"
+                 image_overlay="Unread_IM"
+                 image_overlay_alignment="center"
+                 image_pressed="WellButton_Lit"
+                 image_pressed_selected="WellButton_Lit_Selected"
+                 image_selected="PushButton_Press"
+                 label_color="Black"
+                 left="0"
+                 name="Unread IM messages"
+                 tool_tip="Conversations"
+                 width="34">
+					<init_callback
+                     function="Button.SetDockableFloaterToggle"
+                     parameter="im_well_window" />
+				</button>
+			</chiclet_im_well>
+		</layout_panel>
+		<layout_panel
+         auto_resize="false"
+         follows="right"
+         height="28"
+         layout="topleft"
+         min_height="28"
+         min_width="37"
+         name="notification_well_panel"
+         top="0"
+         user_resize="false"
+         width="37">
+			<chiclet_notification
+             follows="right"
+             height="23"
+             layout="topleft"
+             left="0"
+             max_displayed_count="99"
+             name="notification_well"
+             top="5"
+             width="35">
+				<button
+                 auto_resize="true"
+                 bottom_pad="3"
+                 follows="right"
+                 halign="center"
+                 height="23"
+                 image_overlay="Notices_Unread"
+                 image_overlay_alignment="center"
+                 image_pressed="WellButton_Lit"
+                 image_pressed_selected="WellButton_Lit_Selected"
+                 image_selected="PushButton_Press"
+                 label_color="Black"
+                 left="0"
+                 name="Unread"
+                 tool_tip="Notifications"
+                 width="34">
+					<init_callback
+                     function="Button.SetDockableFloaterToggle"
+                     parameter="notification_well_window" />
+				</button>
+			</chiclet_notification>
+		</layout_panel>
+		<layout_panel
+		   auto_resize="false"
+		   user_resize="false"
+		   min_width="4"
+		   name="DUMMY2"
+		   width="8" />
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/en/panel_group_control_panel.xml b/indra/newview/skins/minimal/xui/en/panel_group_control_panel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..abddc59296658916041ebaa2944dbe9368785f20
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/panel_group_control_panel.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ border="false"
+ follows="all"
+ height="238"
+ name="panel_im_control_panel"
+ width="150">
+    <layout_stack
+     mouse_opaque="false"
+     border_size="0"
+     clip="false"
+     follows="all"
+     height="238"
+     layout="topleft"
+     left="5"
+     name="vertical_stack"
+     orientation="vertical"
+     top="0"
+     width="145">
+        <layout_panel
+         auto_resize="true"
+         follows="top|left"
+         height="100"
+         layout="topleft"
+         min_height="0"
+         mouse_opaque="false"
+         width="145"
+         top="0"
+         name="speakers_list_panel"
+         user_resize="false">
+            <avatar_list
+             color="DkGray2"
+             follows="all"
+             height="100"
+             ignore_online_status="true"
+             layout="topleft"
+             name="speakers_list"
+             opaque="false"
+             show_info_btn="true"
+             show_profile_btn="false"
+             show_speaking_indicator="false"
+             width="145" />
+        </layout_panel>
+        <layout_panel
+         auto_resize="false"
+         follows="top|left|right"
+         height="28"
+         layout="topleft"
+         min_height="28"
+         width="130"
+         name="end_call_btn_panel"
+         user_resize="false"
+         visible="false">
+            <button
+             follows="all"
+             height="23"
+             label="Leave Call"
+             name="end_call_btn"
+             use_ellipses="true" />
+        </layout_panel>
+        <layout_panel
+         auto_resize="false"
+         follows="top|left|right"
+         height="28"
+         layout="topleft"
+         min_height="28"
+         width="130"
+         name="voice_ctrls_btn_panel"
+         user_resize="false"
+         visible="false">
+            <button
+             follows="all"
+             height="23"
+             label="Open Voice Controls"
+             name="voice_ctrls_btn"
+             use_ellipses="true" />
+        </layout_panel>
+    </layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/en/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/en/panel_im_control_panel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c3f46f11e06c53de9ce83323f9d1be1924410ec4
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/panel_im_control_panel.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ border="false"
+ height="300"
+ name="panel_im_control_panel"
+ width="150">
+    <avatar_icon
+     follows="left|top"
+     height="105"
+     left_delta="20"
+     name="avatar_icon"
+     top="-5"
+     width="114"/>
+    <layout_stack
+     mouse_opaque="false"
+     border_size="0"
+     clip="false"
+     follows="all"
+     height="183"
+     layout="topleft"
+     left="5"
+     name="button_stack"
+     orientation="vertical"
+     top_pad="5"
+     width="145">
+      <layout_panel
+       auto_resize="false"
+       follows="top|left|right"
+       height="20"
+       layout="topleft"
+       left="2"
+       min_height="20"
+       width="140"
+       name="view_profile_btn_panel"
+       top="0"
+       user_resize="false">
+        <button
+         follows="left|top|right"
+         height="23"
+         label="Profile"
+         name="view_profile_btn"
+         top="0"
+         width="140" />
+      </layout_panel>
+      <layout_panel
+       auto_resize="false"
+       follows="top|left|right"
+       height="25"
+       layout="topleft"
+       min_height="25"
+       width="140"
+       name="add_friend_btn_panel"
+       user_resize="false">
+        <button
+         follows="left|top|right"
+         height="23"
+         label="Add Friend"
+         name="add_friend_btn"
+         top="5"
+         width="140" />
+      </layout_panel>
+      <layout_panel
+       auto_resize="false"
+       follows="top|left|right"
+       height="25"
+       layout="topleft"
+       min_height="25"
+       width="140"
+       name="teleport_btn_panel"
+       user_resize="false">
+        <button
+             auto_resize="false"
+             follows="left|top|right"
+             height="23"
+             label="Teleport"
+             name="teleport_btn"
+             tool_tip = "Offer to teleport this person"
+             width="140" />
+      </layout_panel>
+      <layout_panel
+       mouse_opaque="false"
+       auto_resize="true"
+       follows="top|left"
+       height="0"
+       layout="topleft"
+       min_height="0"
+       width="140"
+       name="spacer"
+       user_resize="false" />
+    </layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/en/panel_login.xml b/indra/newview/skins/minimal/xui/en/panel_login.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3903658e71578fccf50f8bd4e2aa727596ff7ba6
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/panel_login.xml
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+follows="all"
+height="600"
+layout="topleft"
+left="0"
+name="panel_login"
+focus_root="true" 
+top="600"
+ width="996">
+<panel.string
+     name="create_account_url">
+       http://join.secondlife.com/
+</panel.string>
+<string name="reg_in_client_url" translate="false">
+     http://secondlife.eniac15.lindenlab.com/reg-in-client/
+</string>
+<panel.string
+     name="forgot_password_url">
+       http://secondlife.com/account/request.php
+</panel.string>
+<!-- *NOTE: Custom resize logic for login_html in llpanellogin.cpp -->
+<web_browser
+  tab_stop="false" 
+trusted_content="true" 
+bg_opaque_color="Black"
+border_visible="false"
+bottom="600"
+follows="all"
+hide_loading="true"
+left="0"
+name="login_html"
+start_url=""
+top="0"
+height="600"
+     width="980" />
+<layout_stack
+follows="left|bottom|right"
+name="login_widgets"
+layout="topleft"
+orientation="horizontal"
+top="519"
+width="996"
+height="80">
+<layout_panel
+auto_resize="false"
+follows="left|bottom"
+name="login"
+layout="topleft"
+width="570"
+min_width="570"
+user_resize="false"
+height="80">
+<text
+follows="left|bottom"
+font="SansSerifSmall"
+height="16"
+name="username_text"
+top="20"
+left="20"
+width="150">
+Username:
+</text>
+  <combo_box
+  allow_text_entry="true"
+  follows="left|bottom"
+  height="22"
+  left_delta="0"
+  max_chars="128"
+  combo_editor.prevalidate_callback="ascii"
+  tool_tip="The username you chose when you registered, like bobsmith12 or Steller Sunshine"
+  top_pad="0"
+  name="username_combo"
+  width="178">
+    <combo_box.combo_button
+     visible ="false"/>
+    <combo_box.drop_down_button
+     visible ="false"/>
+  </combo_box>
+<text
+follows="left|bottom"
+font="SansSerifSmall"
+height="15"
+left_pad="-19"
+name="password_text"
+top="20"
+    width="150">
+       Password:
+</text>
+<line_editor
+follows="left|bottom"
+  height="22"
+left_delta="0" 
+  max_length_bytes="16"
+name="password_edit"
+is_password="true"
+select_on_focus="true"
+  top_pad="0"
+  width="135" />
+ <check_box
+control_name="RememberPassword"
+follows="left|bottom"
+font="SansSerifSmall"
+height="16"
+label="Remember password"
+  top_pad="3"
+  name="remember_check"
+ width="135" />
+<button
+  follows="left|bottom"
+  height="23"
+  image_unselected="PushButton_On"
+  image_selected="PushButton_On_Selected"
+  label="Log In"
+  label_color="White"
+  layout="topleft"
+  left_pad="10"
+  name="connect_btn"
+  top="35"
+  width="90" />
+  <text
+  follows="left|bottom"
+  font="SansSerifSmall"
+  height="15"
+  left_pad="10"
+  name="mode_selection_text"
+top="20"
+  width="130">
+       Mode:
+ </text>
+<combo_box
+  follows="left|bottom"
+  height="23"
+  max_chars="128"
+  top_pad="0"
+  tool_tip="Select your mode. Choose Basic for fast, easy exploration and chat. Choose Advanced to access more features."
+  name="mode_combo"
+  width="120">
+<combo_box.item
+  label="Basic"
+  name="Basic"
+  value="settings_minimal.xml" />
+<combo_box.item
+  label="Advanced"
+  name="Advanced"
+  value="" />
+</combo_box>
+</layout_panel>
+<layout_panel
+tab_stop="false"
+follows="right|bottom"
+name="links"
+width="205"
+min_width="205"
+user_resize="false"
+height="80">
+   <text
+follows="right|bottom"
+font="SansSerifSmall"
+text_color="EmphasisColor"
+halign="right"
+height="16"
+top="12"
+right="-10"
+name="create_new_account_text"
+  width="200">
+       Sign up
+ </text>
+<text
+follows="right|bottom"
+font="SansSerifSmall"
+text_color="EmphasisColor"
+halign="right"
+height="16"
+name="forgot_password_text"
+top_pad="12"
+right="-10"
+  width="200">
+       Forgot your username or password?
+</text>
+<text
+follows="right|bottom"
+font="SansSerifSmall"
+text_color="EmphasisColor"
+halign="right"
+height="16"
+name="login_help"
+top_pad="2"
+right="-10"
+    width="200">
+       Need help logging in?   </text>
+<!--  <text
+    follows="right|bottom"
+    font="SansSerifSmall"
+    halign="right"
+    height="28"
+    top_pad="2"
+    name="channel_text"
+    width="180"
+    word_wrap="true">
+       [VERSION]
+   </text>-->
+   </layout_panel>
+</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/en/panel_navigation_bar.xml b/indra/newview/skins/minimal/xui/en/panel_navigation_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6dc1a1c9b021deaccc091c8f974a0eac2ced835b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/panel_navigation_bar.xml
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_opaque="true"
+ background_visible="true"
+ bg_opaque_color="MouseGray"
+ follows="left|top|right"
+ height="26"
+ layout="topleft"
+ name="navigation_bar"
+ chrome="true"
+ width="600">
+  <icon
+	 follows="all"
+	 image_name="NavBar_BG_NoFav_Bevel"
+	 mouse_opaque="false"
+	 name="bg_icon_no_fav_bevel"
+	 scale_image="true"
+	 visible="true"
+	 left="0"
+	 top="0"
+	 height="26"
+	 width="600"/>
+  <panel
+	 background_visible="false"
+	 follows="left|top|right"
+	 top="3"
+	 height="26"
+	 layout="topleft"
+	 name="navigation_panel"
+	 width="600">
+    <pull_button
+follows="left|top"
+direction="down"
+height="23"
+image_overlay="Arrow_Left_Off"
+image_bottom_pad="1"
+layout="topleft"
+left="10"
+name="back_btn"
+tool_tip="Go back to previous location"
+top="2"
+width="31" />
+    <pull_button
+     follows="left|top"
+     direction="down"
+     height="23"
+     image_overlay="Arrow_Right_Off"
+     image_bottom_pad="1"
+     layout="topleft"
+     left_pad="0"
+     name="forward_btn"
+     tool_tip="Go forward one location"
+     top_delta="0"
+     width="31" />
+    <location_input
+     follows="left|right|top"
+     halign="right"
+     height="23"
+     label="Location"
+     layout="topleft"
+     left_pad="7"
+     max_chars="254"
+     mouse_opaque="false"
+     name="location_combo"
+     top_delta="0"
+     width="440">
+    </location_input>
+    <icon follows="right"
+          height="20"
+          width="2"
+          left_pad="2"
+          image_name="Button_Separator"
+          name="separator"
+          top="2"/>
+  </panel>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/en/panel_people.xml b/indra/newview/skins/minimal/xui/en/panel_people.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4a72653d76cd60163ad1c6de19a2a67eb706aa40
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/panel_people.xml
@@ -0,0 +1,550 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!-- Side tray panel -->
+<panel
+ default_tab_group="1"
+ follows="all"
+ height="449"
+ label="People"
+ layout="topleft"
+ left="0"
+ min_height="350"
+ name="people_panel"
+ top="0"
+ width="333">
+    <string
+     name="no_recent_people"
+     value="No recent people. Looking for people to hang out with? Try the Destinations button below." />
+    <string
+     name="no_filtered_recent_people"
+     value="No recent people with that name." />
+    <string
+     name="no_one_near"
+     value="No one nearby. Looking for people to hang out with? Try the Destinations button below." />
+    <string
+     name="no_one_filtered_near"
+     value="No one nearby with that name." />
+    <string
+     name="no_friends_online"
+     value="No friends online" />
+    <string
+     name="no_friends"
+     value="No friends" />
+    <string
+     name="no_friends_msg">
+         Right-click on a Resident to add them as a friend.
+Looking for people to hang out with? Try the Destinations button below.
+    </string>
+    <string
+     name="no_filtered_friends_msg">
+      Didn't find what you're looking for? Try the Destinations button below..
+    </string>
+    <string
+     name="people_filter_label"
+     value="Filter People" />
+    <string
+     name="groups_filter_label"
+     value="Filter Groups" />
+     <!--
+     *WORKAROUND: for group_list.no_items_msg & group_list.no_filtered_items_msg attributes.
+     They are not defined as translatable in VLT. See EXT-5931
+     -->
+    <string
+     name="no_filtered_groups_msg"
+     value="Didn't find what you're looking for? Try [secondlife:///app/search/groups/[SEARCH_TERM] Search]." />
+    <string
+     name="no_groups_msg"
+     value="Looking for Groups to join? Try [secondlife:///app/search/groups Search]." />
+	<string
+	 name="MiniMapToolTipMsg"
+	 value="[REGION](Double-click to open Map, shift-drag to pan)"/>
+	<string
+	 name="AltMiniMapToolTipMsg"
+	 value="[REGION](Double-click to teleport, shift-drag to pan)"/>
+	<filter_editor
+     follows="left|top|right"
+     height="23"
+     layout="topleft"
+     left="10"
+     label="Filter"
+     max_length="300"
+     name="filter_input"
+     text_color="Black"
+     text_pad_left="10"
+     top="3"
+     width="303" />
+    <tab_container
+     follows="all"
+     height="383"
+     layout="topleft"
+     left="5"
+     name="tabs"
+     tab_group="1"
+     tab_min_width="70"
+     tab_height="30"
+     tab_position="top"
+     top_pad="10"
+     halign="center"
+     width="317">
+     	<panel
+         background_opaque="true"
+       background_visible="true"
+         bg_alpha_color="DkGray"
+         bg_opaque_color="DkGray"
+         follows="all"
+         height="383"
+         label="NEARBY"
+         layout="topleft"
+         left="0"
+         help_topic="people_nearby_tab"
+         name="nearby_panel"
+         top="0"
+         width="313">
+			<net_map
+			 bg_color="NetMapBackgroundColor"
+			 follows="top|left|right"
+			 layout="topleft"
+			 left="3"
+			 mouse_opaque="false"
+			 name="Net Map"
+			 width="307"
+			 height="140"
+			 top="0"/>
+			<avatar_list
+             allow_select="true"
+             follows="top|left|bottom|right"
+             height="216"
+             ignore_online_status="true"
+             layout="topleft"
+             left="3"
+             multi_select="true"
+             name="avatar_list"
+             top="145"
+             width="307" />
+            <panel
+             background_visible="true"
+             follows="left|right|bottom"
+             height="27"
+             label="bottom_panel"
+             layout="topleft"
+             left="3"
+             name="bottom_panel"
+             top_pad="0"
+             width="313">
+             <icon
+             follows="bottom|left|right"
+             height="25"
+             image_name="Toolbar_Right_Off"
+             layout="topleft"
+             left_pad="1"
+             name="dummy_icon"
+             width="241"
+             />
+            </panel>
+        </panel>
+        <panel
+         background_opaque="true"
+       background_visible="true"
+         bg_alpha_color="DkGray"
+         bg_opaque_color="DkGray"
+         follows="all"
+         height="383"
+         label="MY FRIENDS"
+         layout="topleft"
+         left="0"
+         help_topic="people_friends_tab"
+         name="friends_panel"
+         top="0"
+         width="313">
+            <accordion
+       		 background_visible="true"
+       		 bg_alpha_color="DkGray2"
+       		 bg_opaque_color="DkGray2"
+             follows="all"
+             height="356"
+             layout="topleft"
+             left="3"
+             name="friends_accordion"
+             top="0"
+             width="307">
+                <accordion_tab
+                 layout="topleft"
+                 height="172"
+                 min_height="150"
+                 name="tab_online"
+                 title="Online">
+                        <avatar_list
+                         allow_select="true"
+                         follows="all"
+                         height="172"
+                         layout="topleft"
+                         left="0"
+                         multi_select="true"
+                         name="avatars_online"
+                         show_permissions_granted="true"
+                         top="0"
+                         width="307" />
+                </accordion_tab>
+                <accordion_tab
+                 layout="topleft"
+                 height="173"
+                 name="tab_all"
+                 title="All">
+                        <avatar_list
+                         allow_select="true"
+                         follows="all"
+                         height="173"
+                         layout="topleft"
+                         left="0"
+                         multi_select="true"
+                         name="avatars_all"
+                         show_permissions_granted="true"
+                         top="0"
+                         width="307" />
+                </accordion_tab>
+            </accordion>
+            <panel
+             background_visible="true"
+             follows="left|right|bottom"
+             height="27"
+             label="bottom_panel"
+             layout="topleft"
+             left="3"
+             name="bottom_panel"
+             top_pad="0"
+             width="313">
+             
+             	  <layout_stack
+				   animate="false"
+				   border_size="0"
+				   follows="left|right|bottom"
+				   height="25"
+				   layout="topleft"
+				   orientation="horizontal"
+				   top_pad="1"
+				   left="0"
+				   name="bottom_panel"
+				   width="305">
+				      <layout_panel
+				       auto_resize="true"
+				       height="25"
+				       layout="topleft"
+				       name="dummy_panel"
+				       user_resize="false"
+				       width="212">
+				          <icon
+				           follows="bottom|left|right"
+				           height="25"
+				           image_name="Toolbar_Middle_Off"
+				           layout="topleft"
+				           left="0"
+				           top="0"
+				           name="dummy_icon"
+				           width="211" />
+				      </layout_panel>
+				      <layout_panel
+				       auto_resize="false"
+				       height="25"
+				       layout="topleft"
+				       name="trash_btn_panel"
+				       user_resize="false"
+				       width="31">
+				          <dnd_button
+				           follows="bottom|left"
+				           height="25"
+				           image_hover_unselected="Toolbar_Right_Over"
+				           image_overlay="TrashItem_Off"
+				           image_selected="Toolbar_Right_Selected"
+				           image_unselected="Toolbar_Right_Off"
+				           left="0"
+				           layout="topleft"
+				           name="del_btn"
+				           tool_tip="Remove selected person from your Friends list"
+				           top="0"
+				           width="31"/>
+				      </layout_panel>
+				  </layout_stack><!--
+             
+               <button
+               follows="bottom|left"
+               tool_tip="Options"
+               height="25"
+               image_hover_unselected="Toolbar_Left_Over"
+               image_overlay="OptionsMenu_Off"
+               image_selected="Toolbar_Left_Selected"
+               image_unselected="Toolbar_Left_Off"
+               layout="topleft"
+               left="0"
+               name="friends_viewsort_btn"
+               top="1"
+               width="31" />
+                <button
+                 follows="bottom|left"
+                 height="25"
+                 image_hover_unselected="Toolbar_Middle_Over"
+             	 image_overlay="AddItem_Off"
+             	 image_selected="Toolbar_Middle_Selected"
+             	 image_unselected="Toolbar_Middle_Off"
+                 layout="topleft"
+                 left_pad="1"
+                 name="add_btn"
+                 tool_tip="Offer friendship to a Resident"
+                 width="31" />
+                <icon
+             	 follows="bottom|left|right"
+             	 height="25"
+             	 image_name="Toolbar_Middle_Off"
+             	 layout="topleft"
+             	 left_pad="1"
+             	 name="dummy_icon"
+             	 width="209"
+             />
+                <button
+                 follows="bottom|left"
+                 height="25"
+                 image_hover_unselected="Toolbar_Right_Over"
+                 image_overlay="TrashItem_Off"
+                 image_selected="Toolbar_Right_Selected"
+                 image_unselected="Toolbar_Right_Off"
+                 layout="topleft"
+                 left_pad="1"
+                 name="del_btn"
+                 tool_tip="Remove selected person from your Friends list"
+                 width="31" />
+            --></panel>
+            <text
+             follows="all"
+             height="450"
+             left="13"
+             name="no_friends_help_text"
+             top="10"
+             width="293"
+             wrap="true" />
+        </panel>
+        <panel
+         background_opaque="true"
+       background_visible="true"
+         bg_alpha_color="DkGray"
+         bg_opaque_color="DkGray"
+         follows="all"
+         height="383"
+         label="RECENT"
+         layout="topleft"
+         left="0"
+         help_topic="people_recent_tab"
+         name="recent_panel"
+         top="0"
+         width="313">
+            <avatar_list
+             allow_select="true"
+             follows="all"
+             height="356"
+             layout="topleft"
+             left="3"
+             multi_select="true"
+             name="avatar_list"
+             show_last_interaction_time="true"
+             top="0"
+             width="307" />
+            <panel
+             background_visible="true"
+             follows="left|right|bottom"
+             height="27"
+             label="bottom_panel"
+             layout="topleft"
+             left="0"
+             name="bottom_panel"
+             top_pad="0"
+             width="313">
+              <button
+                 follows="bottom|left"
+                 height="25"
+                 image_hover_unselected="Toolbar_Middle_Over"
+                 image_overlay="AddItem_Off"
+                 image_selected="Toolbar_Middle_Selected"
+                 image_unselected="Toolbar_Middle_Off"
+                 layout="topleft"
+                 left_pad="1"
+                 name="add_friend_btn"
+                 tool_tip="Add selected Resident to your friends List"
+                 width="31">
+                <commit_callback
+                   function="People.addFriend" />
+              </button>
+              <icon
+             	 follows="bottom|left|right"
+             	 height="25"
+             	 image_name="Toolbar_Right_Off"
+             	 layout="topleft"
+             	 left_pad="1"
+             	 name="dummy_icon"
+             	 width="241"
+             />
+            </panel>
+        </panel>
+    </tab_container>
+    <panel
+     follows="bottom|left|right"
+     height="23"
+     layout="topleft"
+     left="8"
+     top_pad="4"
+     name="button_bar"
+     width="313">
+
+<!--********************************Profile; IM; Call, Share, Teleport********************************--> 	
+     	<layout_stack
+     	follows="bottom|left|right"
+		height="23"
+		layout="topleft"
+		name="bottom_bar_ls"
+		left="0"
+		orientation="horizontal"
+		top_pad="0"
+		width="313">
+
+			<layout_panel
+			follows="bottom|left|right"
+			height="23"
+			layout="bottomleft"
+			left="0"
+			name="view_profile_btn_lp"
+		    user_resize="false" 
+		    auto_resize="true"
+			width="68">
+				<button
+		         follows="bottom|left|right"
+		         height="23"
+		         label="Profile"
+		         layout="topleft"
+		         left="1"
+		         name="view_profile_btn"
+		         tool_tip="Show picture, groups, and other Residents information"
+		         top="0"
+		         width="67" />	
+			</layout_panel>
+			
+			<layout_panel
+			follows="bottom|left|right"
+			height="23"
+			layout="bottomleft"
+			left_pad="3"
+			name="chat_btn_lp"
+		    user_resize="false" 
+		    auto_resize="true"
+			width="41">
+				<button
+		         follows="bottom|left|right"
+		         left="1"
+		         height="23"
+		         label="IM"
+		         layout="topleft"
+		         name="im_btn"
+		         tool_tip="Open instant message session"
+		         top="0"
+		         width="40" />			
+			</layout_panel>
+		
+			<layout_panel
+			follows="bottom|left|right"
+			height="23"
+			layout="bottomleft"
+			left_pad="3"
+			name="chat_btn_lp"
+		    user_resize="false" 
+		    auto_resize="true"
+			width="77">
+				<button
+		         follows="bottom|left|right"
+		         left="1"
+		         height="23"
+		         label="Teleport"
+		         layout="topleft"
+		         name="teleport_btn"
+		         tool_tip="Offer teleport"
+		         top="0"
+		         width="76" />		
+			</layout_panel>
+		</layout_stack>
+		
+<!--********************************Group Profile; Group Chat; Group Call buttons************************-->			
+		<layout_stack
+     	follows="bottom|left|right"
+		height="23"
+		layout="topleft"
+		mouse_opaque="false"
+		name="bottom_bar_ls1"
+		left="0"
+		orientation="horizontal"
+		top="0"
+		width="313">	
+			<layout_panel
+			follows="bottom|left|right"
+			height="23"
+			layout="bottomleft"
+			left="0"			
+			mouse_opaque="false"
+			name="group_info_btn_lp"
+		    user_resize="false" 
+		    auto_resize="true"
+			width="108">
+				<button
+		        follows="bottom|left|right"
+		        left="1"
+		        height="23"
+		        label="Group Profile"
+		        layout="topleft"
+				mouse_opaque="false"
+		        name="group_info_btn"
+		        tool_tip="Show group information"
+		        top="0"
+		        width="107" />		
+			</layout_panel>
+			
+			<layout_panel
+			follows="bottom|left|right"
+			height="23"
+			layout="bottomleft"
+			left_pad="3"
+			mouse_opaque="false"
+			name="chat_btn_lp"
+		    user_resize="false" 
+		    auto_resize="true"
+			width="101">
+				<button
+		        follows="bottom|left|right"
+		        left="1"
+		        height="23"
+		        label="Group Chat"
+		        layout="topleft"
+				mouse_opaque="false"
+		        name="chat_btn"
+		        tool_tip="Open chat session"
+		        top="0"
+		        width="100" />			
+			</layout_panel>
+		
+			<layout_panel
+			follows="bottom|left|right"
+			height="23"
+			layout="bottomleft"
+			left_pad="3"
+			mouse_opaque="false"
+			name="group_call_btn_lp"
+		    user_resize="false" 
+		    auto_resize="true"
+			width="96">
+				<button
+				follows="bottom|left|right"
+				left="1"
+				height="23"
+         		label="Group Call"
+         		layout="topleft"
+				mouse_opaque="false"
+         		name="group_call_btn"
+         		tool_tip="Call this group"
+		        top="0"
+         		width="95" />			
+			</layout_panel>		
+		</layout_stack>
+    </panel>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/en/panel_side_tray_tab_caption.xml b/indra/newview/skins/minimal/xui/en/panel_side_tray_tab_caption.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9f2f41ba318e1039942790fad747f7f20d9ca3f3
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/panel_side_tray_tab_caption.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_visible="true"
+ bottom="0"
+ follows="left|top|right"
+ height="5"
+ width="333"
+ layout="topleft"
+ left="0"
+ name="sidetray_tab_panel">
+</panel>
diff --git a/indra/newview/skins/minimal/xui/en/panel_status_bar.xml b/indra/newview/skins/minimal/xui/en/panel_status_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6ccd0e938d7948c36e2aac871e5adb3ff251933e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/panel_status_bar.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_opaque="true"
+ background_visible="true"
+ bg_opaque_color="MouseGray"
+ chrome="true"
+ follows="top|right"
+ height="30"
+ layout="topleft"
+ left="0"
+ mouse_opaque="false"
+ name="status"
+ top="19"
+ tab_stop="false"
+ width="70">
+    <panel.string
+     name="packet_loss_tooltip">
+        Packet Loss
+    </panel.string>
+    <panel.string
+     name="bandwidth_tooltip">
+        Bandwidth
+    </panel.string>
+    <panel.string
+     name="time">
+        [hour12, datetime, slt]:[min, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt]
+    </panel.string>
+    <panel.string
+     name="timeTooltip">
+        [weekday, datetime, slt], [day, datetime, slt] [month, datetime, slt] [year, datetime, slt]
+    </panel.string>
+	<panel.string
+     name="buycurrencylabel">
+        L$ [AMT]
+    </panel.string>
+     <button
+     follows="right|top"
+     height="16"
+     image_selected="Play_Off"
+     image_unselected="Pause_Off"
+     image_pressed="Pause_Press"
+     image_pressed_selected="Play_Press"
+     is_toggle="true"
+     left="15"
+     top="7"
+     name="media_toggle_btn"
+     tool_tip="Start/Stop All Media (Music, Video, Web pages)"
+     width="16" >
+    </button>
+    <button
+     follows="right|top"
+     height="16"
+     image_selected="AudioMute_Off"
+     image_pressed="Audio_Press"
+     image_unselected="Audio_Off"
+     is_toggle="true"
+     left_pad="5"
+     top="8"
+     name="volume_btn"
+     tool_tip="Global Volume Control"
+     width="16" />
+</panel>
diff --git a/indra/newview/skins/minimal/xui/en/panel_volume_pulldown.xml b/indra/newview/skins/minimal/xui/en/panel_volume_pulldown.xml
new file mode 100644
index 0000000000000000000000000000000000000000..36ad39abe8a694f6cd331f13da66e330578b9455
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/panel_volume_pulldown.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+ background_opaque="true"
+ background_visible="true"
+ bg_opaque_image="Volume_Background" 
+ bg_alpha_image="Volume_Background" 
+ border_visible="false"
+ border="false"
+ chrome="true"
+ follows="bottom"
+ height="150"
+ layout="topleft"
+ name="volumepulldown_floater"
+ width="32">
+ <slider
+  control_name="AudioLevelMaster"
+  follows="left|top"
+  left="0"
+  top="1"
+  orientation="vertical"
+  height="140"
+  increment="0.05"
+  initial_value="0.5"
+  layout="topleft"
+  name="mastervolume"
+  show_text="false"
+  slider_label.halign="right"
+  top_pad="2"
+  volume="true">
+  <slider.commit_callback
+   function="Vol.setControlFalse"
+   parameter="MuteAudio" />
+  </slider>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/en/widgets/location_input.xml b/indra/newview/skins/minimal/xui/en/widgets/location_input.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fe06a2d81621541dbd53e546b7fb6f8a6a2853e3
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/en/widgets/location_input.xml
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<!--
+*TODO: Replace hardcoded buttons width/height with getting this info from the button images.
+       Currently that doesn't work because LLUIImage::getWidth/getHeight() return 1 for the images.
+-->
+<location_input font="SansSerifSmall"
+                maturity_help_topic="maturity_rating"
+                add_landmark_hpad="0"
+                icon_hpad="2"
+                allow_text_entry="true"
+                list_position="below"
+      	        show_text_as_tentative="false"
+                max_chars="20"
+                follows="left|top"
+                allow_new_values="true"
+                >
+  <!-- *NOTE: Tooltips are in strings.xml so they can be localized.
+  See LocationCtrlAddLandmarkTooltip etc. -->
+  <info_button
+    name="Place Information"
+    width="0"
+    height="0"
+    visible="false" 
+    left="6"
+    top="20"
+    follows="left|top"
+    hover_glow_amount="0.15" />
+  <add_landmark_button name="Add Landmark"
+                       hover_glow_amount="0.15"
+                       width="0"
+                       height="0"
+                       visible="false" 
+                       follows="right|top"
+                       scale_image="false"
+                       top="19"
+                       left="-3" />
+  <maturity_button
+    name="maturity_icon"
+    width="0"
+    height="0"
+    visible="false" 
+    top="20"
+    follows="left|top"
+    />
+  <for_sale_button
+    name="for_sale_btn"
+    width="0"
+    height="0"
+    visible="false" 
+    follows="right|top"
+    scale_image="false"
+    top="21"
+    />
+  <voice_icon
+    enabled="true"
+    name="voice_icon"
+    width="0"
+    height="0"
+    visible="false" 
+    top="21"
+    follows="right|top"
+    />
+  <fly_icon
+    name="fly_icon"
+    width="0"
+    height="0"
+    visible="false" 
+    top="21"
+    follows="right|top"
+    />
+  <push_icon
+    name="push_icon"
+    width="0"
+    height="0"
+    visible="false" 
+    top="21"
+    follows="right|top"
+    />
+  <build_icon
+    name="build_icon"
+    width="0"
+    height="0"
+    visible="false" 
+    top="21"
+    follows="right|top"
+    />
+  <scripts_icon
+    name="scripts_icon"
+    width="0"
+    height="0"
+    visible="false" 
+    top="21"
+    follows="right|top"
+    />
+  <damage_icon
+    name="damage_icon"
+    width="0"
+    height="0"
+    visible="false" 
+    top="19"
+    left="2"
+    follows="right|top"
+    />
+  <!-- Default text color is invisible on top of nav bar background -->
+  <damage_text
+    name="damage_text"
+    width="0"
+    height="0"
+    max_length="0" 
+    top="17"
+    follows="right|top"
+    halign="right"
+	  font="SansSerifSmall"
+	  text_color="TextFgColor"
+	/>
+  <combo_button
+		name="Location History"
+                label=""
+                pad_right="0"/>
+  <combo_list
+	      bg_writeable_color="MenuDefaultBgColor"
+	      page_lines="10"
+              scroll_bar_bg_visible="true" />
+  <combo_editor name="Combo Text Entry"
+                text_pad_left="4"
+                select_on_focus="false"
+                font="SansSerifSmall"
+                bevel_style="none"
+                border_style="line"
+                border.border_thickness="0" />
+</location_input>
diff --git a/indra/newview/skins/minimal/xui/es/floater_camera.xml b/indra/newview/skins/minimal/xui/es/floater_camera.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ccf3d4bf917461dcb594dc8925fa142cf61a9960
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/floater_camera.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="camera_floater" title="">
+	<floater.string name="rotate_tooltip">
+		Girar la cámara alrededor de lo enfocado
+	</floater.string>
+	<floater.string name="zoom_tooltip">
+		Hacer zoom con la cámara en lo enfocado
+	</floater.string>
+	<floater.string name="move_tooltip">
+		Mover la cámara arriba y abajo, izquierda y derecha
+	</floater.string>
+	<floater.string name="camera_modes_title">
+		Modos de cámara
+	</floater.string>
+	<floater.string name="pan_mode_title">
+		Orbital - Zoom - Panóramica
+	</floater.string>
+	<floater.string name="presets_mode_title">
+		Vistas predefinidas
+	</floater.string>
+	<floater.string name="free_mode_title">
+		Centrar el objeto
+	</floater.string>
+	<panel name="controls">
+		<panel name="preset_views_list">
+			<panel_camera_item name="front_view">
+				<panel_camera_item.text name="front_view_text">
+					De frente
+				</panel_camera_item.text>
+			</panel_camera_item>
+			<panel_camera_item name="group_view">
+				<panel_camera_item.text name="side_view_text">
+					Vista lateral
+				</panel_camera_item.text>
+			</panel_camera_item>
+			<panel_camera_item name="rear_view">
+				<panel_camera_item.text name="rear_view_text">
+					Desde detrás
+				</panel_camera_item.text>
+			</panel_camera_item>
+		</panel>
+		<panel name="camera_modes_list">
+			<panel_camera_item name="object_view">
+				<panel_camera_item.text name="object_view_text">
+					Vista de objeto
+				</panel_camera_item.text>
+			</panel_camera_item>
+			<panel_camera_item name="mouselook_view">
+				<panel_camera_item.text name="mouselook_view_text">
+					Vista subjetiva
+				</panel_camera_item.text>
+			</panel_camera_item>
+		</panel>
+		<panel name="zoom" tool_tip="Hacer zoom con la cámara en lo enfocado">
+			<joystick_rotate name="cam_rotate_stick" tool_tip="La cámara gira alrededor del punto de vista"/>
+			<slider_bar name="zoom_slider" tool_tip="Hacer zoom en lo enfocado"/>
+			<joystick_track name="cam_track_stick" tool_tip="Mueve la cámara arriba y abajo, a izquierda y derecha"/>
+		</panel>
+	</panel>
+	<panel name="buttons">
+		<button label="" name="presets_btn" tool_tip="Vistas predefinidas"/>
+		<button label="" name="pan_btn" tool_tip="Orbital - Zoom - Panóramica"/>
+		<button label="" name="avatarview_btn" tool_tip="Modos de cámara"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/es/floater_help_browser.xml b/indra/newview/skins/minimal/xui/es/floater_help_browser.xml
new file mode 100644
index 0000000000000000000000000000000000000000..67590ebfbb6fd5ff682f9fd34a279ae2b2946ec8
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/floater_help_browser.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_help_browser" title="INDICACIONES">
+	<floater.string name="loading_text">
+		Cargando...
+	</floater.string>
+	<layout_stack name="stack1">
+		<layout_panel name="external_controls"/>
+	</layout_stack>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/es/floater_media_browser.xml b/indra/newview/skins/minimal/xui/es/floater_media_browser.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a7086c2d6d25108179bf931a724b7fc79749cb01
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/floater_media_browser.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="EXPLORADOR DE MEDIA">
+	<floater.string name="home_page_url">
+		http://www.secondlife.com
+	</floater.string>
+	<floater.string name="support_page_url">
+		http://support.secondlife.com
+	</floater.string>
+	<layout_stack name="stack1">
+		<layout_panel name="nav_controls">
+			<button label="Atrás" name="back"/>
+			<button label="Adelante" name="forward"/>
+			<button label="Recargar" name="reload"/>
+			<button label="Ir" name="go"/>
+		</layout_panel>
+		<layout_panel name="time_controls">
+			<button label="rebobinar" name="rewind"/>
+			<button label="parar" name="stop"/>
+			<button label="avanzar" name="seek"/>
+		</layout_panel>
+		<layout_panel name="parcel_owner_controls">
+			<button label="Enviar a la parcela la página actual" name="assign"/>
+		</layout_panel>
+		<layout_panel name="external_controls">
+			<button label="Abrir en mi propio navegador" name="open_browser"/>
+			<check_box label="Abrir siempre en mi propio navegador" name="open_always"/>
+			<button label="Cerrar" name="close"/>
+		</layout_panel>
+	</layout_stack>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/es/floater_nearby_chat.xml b/indra/newview/skins/minimal/xui/es/floater_nearby_chat.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1fee9ab056668d2770445fd8f3a45dbf000cec78
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/floater_nearby_chat.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="nearby_chat" title="CHAT">
+	<check_box label="Traducir chat (mediante Google)" name="translate_chat_checkbox"/>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/es/floater_web_content.xml b/indra/newview/skins/minimal/xui/es/floater_web_content.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b0128096794af5d9ac9b8621066770b746bfee09
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/floater_web_content.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_web_content" title="">
+	<layout_stack name="stack1">
+		<layout_panel name="nav_controls">
+			<button name="back" tool_tip="Navegar hacia atrás"/>
+			<button name="forward" tool_tip="Navegar hacia adelante"/>
+			<button name="stop" tool_tip="Parar navegación"/>
+			<button name="reload" tool_tip="Recargar página"/>
+			<combo_box name="address" tool_tip="Escribe la URL aquí"/>
+			<icon name="media_secure_lock_flag" tool_tip="Navegación segura"/>
+			<button name="popexternal" tool_tip="Abrir la URL actual en tu explorador de escritorio"/>
+		</layout_panel>
+	</layout_stack>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/es/inspect_avatar.xml b/indra/newview/skins/minimal/xui/es/inspect_avatar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1d70fa6a90cb8d9f86a0287c1b53be7efaa8b6fe
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/inspect_avatar.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="inspect_avatar">
+	<string name="Subtitle">
+		[AGE]
+	</string>
+	<string name="Details">
+		[SL_PROFILE]
+	</string>
+	<text name="user_details">
+		Ésta es mi descripción de Second Life que, por cierto, me encanta. Pero, por lo que sea, me he enrollado más de la cuenta y la descripción es larguísima.
+	</text>
+	<slider name="volume_slider" tool_tip="Volumen de la voz" value="0.5"/>
+	<button label="Añadir como amigo" name="add_friend_btn"/>
+	<button label="MI" name="im_btn"/>
+	<button label="Perfil" name="view_profile_btn"/>
+	<panel name="moderator_panel">
+		<button label="Desactivar la voz" name="disable_voice"/>
+		<button label="Activar la voz" name="enable_voice"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/es/inspect_object.xml b/indra/newview/skins/minimal/xui/es/inspect_object.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d608b4a0f747c687c86c1fabdd304bb7fa47663b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/inspect_object.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="inspect_object">
+	<string name="Creator">
+		Por [CREATOR]
+	</string>
+	<string name="CreatorAndOwner">
+		Por [CREATOR]
+Propietario [OWNER]
+	</string>
+	<string name="Price">
+		[AMOUNT] L$
+	</string>
+	<string name="PriceFree">
+		¡Gratis!
+	</string>
+	<string name="Touch">
+		Tocar
+	</string>
+	<string name="Sit">
+		Sentarme
+	</string>
+	<text name="object_name" value="Test Object Name That Is actually two lines and Really Long"/>
+	<text name="price_text">
+		30.000 L$
+	</text>
+	<text name="object_description">
+		This is a really long description for an object being as how it is at least 80 characters in length and so but maybe more like 120 at this point. Who knows, really?
+	</text>
+	<button label="Comprar" name="buy_btn"/>
+	<button label="Pagar" name="pay_btn"/>
+	<button label="Coger una copia" name="take_free_copy_btn"/>
+	<button label="Tocar" name="touch_btn"/>
+	<button label="Sentarme" name="sit_btn"/>
+	<button label="Abrir" name="open_btn"/>
+	<icon name="secure_browsing" tool_tip="Navegación segura"/>
+	<button label="Más" name="more_info_btn"/>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/es/menu_add_wearable_gear.xml b/indra/newview/skins/minimal/xui/es/menu_add_wearable_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f2367c72a3c6961969b0ed4c335d2414ab83a6bf
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_add_wearable_gear.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Add Wearable Gear Menu">
+	<menu_item_check label="Ordenar por los más recientes" name="sort_by_most_recent"/>
+	<menu_item_check label="Ordenar alfabéticamente" name="sort_by_name"/>
+	<menu_item_check label="Ordenar por tipo" name="sort_by_type"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_attachment_other.xml b/indra/newview/skins/minimal/xui/es/menu_attachment_other.xml
new file mode 100644
index 0000000000000000000000000000000000000000..00bdb748813ee6d973b9e63ba014b449da8e429c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_attachment_other.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- *NOTE: See also menu_avatar_other.xml -->
+<context_menu name="Avatar Pie">
+	<menu_item_call label="Ver el perfil" name="Profile..."/>
+	<menu_item_call label="Añadir como amigo" name="Add Friend"/>
+	<menu_item_call label="MI" name="Send IM..."/>
+	<menu_item_call label="Llamada" name="Call"/>
+	<menu_item_call label="Invitar al grupo" name="Invite..."/>
+	<menu_item_call label="Ignorar" name="Avatar Mute"/>
+	<menu_item_call label="Denunciar" name="abuse"/>
+	<menu_item_call label="Congelar" name="Freeze..."/>
+	<menu_item_call label="Expulsar" name="Eject..."/>
+	<menu_item_call label="Depurar las texturas" name="Debug..."/>
+	<menu_item_call label="Acercar el zoom" name="Zoom In"/>
+	<menu_item_call label="Pagar" name="Pay..."/>
+	<menu_item_call label="Perfil del objeto" name="Object Inspect"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_attachment_self.xml b/indra/newview/skins/minimal/xui/es/menu_attachment_self.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ab76c92d656eec08e0666a414a2fd497d0f8744a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_attachment_self.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Attachment Pie">
+	<menu_item_call label="Tocar" name="Attachment Object Touch"/>
+	<menu_item_call label="Editar" name="Edit..."/>
+	<menu_item_call label="Quitar" name="Detach"/>
+	<menu_item_call label="Sentarte" name="Sit Down Here"/>
+	<menu_item_call label="Levantarme" name="Stand Up"/>
+	<menu_item_call label="Cambiar vestuario" name="Change Outfit"/>
+	<menu_item_call label="Editar mi vestuario" name="Edit Outfit"/>
+	<menu_item_call label="Editar mi anatomía" name="Edit My Shape"/>
+	<menu_item_call label="Mis amigos" name="Friends..."/>
+	<menu_item_call label="Mis grupos" name="Groups..."/>
+	<menu_item_call label="Mi perfil" name="Profile..."/>
+	<menu_item_call label="Depurar las texturas" name="Debug..."/>
+	<menu_item_call label="Soltar" name="Drop"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_avatar_icon.xml b/indra/newview/skins/minimal/xui/es/menu_avatar_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fe7331a1083d3b4028588df47bb152187444cc4c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_avatar_icon.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Avatar Icon Menu">
+	<menu_item_call label="Ver el perfil" name="Show Profile"/>
+	<menu_item_call label="Enviar un MI..." name="Send IM"/>
+	<menu_item_call label="Añadir como amigo..." name="Add Friend"/>
+	<menu_item_call label="Quitar de los amigos..." name="Remove Friend"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_avatar_other.xml b/indra/newview/skins/minimal/xui/es/menu_avatar_other.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7df2d7c4e08ea2e60ad228d224070a5876873f5e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_avatar_other.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- *NOTE: See also menu_attachment_other.xml -->
+<context_menu name="Avatar Pie">
+	<menu_item_call label="Ver el perfil" name="Profile..."/>
+	<menu_item_call label="Añadir como amigo" name="Add Friend"/>
+	<menu_item_call label="MI" name="Send IM..."/>
+	<menu_item_call label="Llamada" name="Call"/>
+	<menu_item_call label="Invitar al grupo" name="Invite..."/>
+	<menu_item_call label="Ignorar" name="Avatar Mute"/>
+	<menu_item_call label="Denunciar" name="abuse"/>
+	<menu_item_call label="Congelar" name="Freeze..."/>
+	<menu_item_call label="Expulsar" name="Eject..."/>
+	<menu_item_call label="Depurar las texturas" name="Debug..."/>
+	<menu_item_call label="Acercar el zoom" name="Zoom In"/>
+	<menu_item_call label="Pagar" name="Pay..."/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_avatar_self.xml b/indra/newview/skins/minimal/xui/es/menu_avatar_self.xml
new file mode 100644
index 0000000000000000000000000000000000000000..50f8384b0f265fb8da1d141000b72cb375e14380
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_avatar_self.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Self Pie">
+	<menu_item_call label="Sentarte" name="Sit Down Here"/>
+	<menu_item_call label="Levantarme" name="Stand Up"/>
+	<context_menu label="Quitarme" name="Take Off &gt;">
+		<context_menu label="Ropas" name="Clothes &gt;">
+			<menu_item_call label="Camisa" name="Shirt"/>
+			<menu_item_call label="Pantalón" name="Pants"/>
+			<menu_item_call label="Falda" name="Skirt"/>
+			<menu_item_call label="Zapatos" name="Shoes"/>
+			<menu_item_call label="Calcetines" name="Socks"/>
+			<menu_item_call label="Chaqueta" name="Jacket"/>
+			<menu_item_call label="Guantes" name="Gloves"/>
+			<menu_item_call label="Camiseta" name="Self Undershirt"/>
+			<menu_item_call label="Ropa interior" name="Self Underpants"/>
+			<menu_item_call label="Tatuaje" name="Self Tattoo"/>
+			<menu_item_call label="Alfa" name="Self Alpha"/>
+			<menu_item_call label="Toda la ropa" name="All Clothes"/>
+		</context_menu>
+		<context_menu label="HUD" name="Object Detach HUD"/>
+		<context_menu label="Quitar" name="Object Detach"/>
+		<menu_item_call label="Quitarse todo" name="Detach All"/>
+	</context_menu>
+	<menu_item_call label="Cambiar vestuario" name="Chenge Outfit"/>
+	<menu_item_call label="Editar mi vestuario" name="Edit Outfit"/>
+	<menu_item_call label="Editar mi anatomía" name="Edit My Shape"/>
+	<menu_item_call label="Mis amigos" name="Friends..."/>
+	<menu_item_call label="Mis grupos" name="Groups..."/>
+	<menu_item_call label="Mi perfil" name="Profile..."/>
+	<menu_item_call label="Depurar las texturas" name="Debug..."/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_bottomtray.xml b/indra/newview/skins/minimal/xui/es/menu_bottomtray.xml
new file mode 100644
index 0000000000000000000000000000000000000000..62683f3076b2b596e4dfc48842119618d4b26955
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_bottomtray.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="hide_camera_move_controls_menu">
+	<menu_item_check label="Botón Gestos" name="ShowGestureButton"/>
+	<menu_item_check label="Botón Moverse" name="ShowMoveButton"/>
+	<menu_item_check label="Botón Vista" name="ShowCameraButton"/>
+	<menu_item_check label="Botón Foto" name="ShowSnapshotButton"/>
+	<menu_item_check label="Botón Barra lateral" name="ShowSidebarButton"/>
+	<menu_item_check label="Botón Construir" name="ShowBuildButton"/>
+	<menu_item_check label="Botón Buscar" name="ShowSearchButton"/>
+	<menu_item_check label="Botón Mapa" name="ShowWorldMapButton"/>
+	<menu_item_check label="Botón Minimapa" name="ShowMiniMapButton"/>
+	<menu_item_call label="Cortar" name="NearbyChatBar_Cut"/>
+	<menu_item_call label="Copiar" name="NearbyChatBar_Copy"/>
+	<menu_item_call label="Pegar" name="NearbyChatBar_Paste"/>
+	<menu_item_call label="Borrar" name="NearbyChatBar_Delete"/>
+	<menu_item_call label="Seleccionar todo" name="NearbyChatBar_Select_All"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_cof_attachment.xml b/indra/newview/skins/minimal/xui/es/menu_cof_attachment.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7541530601dbd45ac04f9a2ba383c98a1f412535
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_cof_attachment.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Attachment">
+	<menu_item_call label="Quitar" name="detach"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_cof_body_part.xml b/indra/newview/skins/minimal/xui/es/menu_cof_body_part.xml
new file mode 100644
index 0000000000000000000000000000000000000000..56b95bdc3b6e395fc0d615cc56fbd9224f237e00
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_cof_body_part.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Body">
+	<menu_item_call label="Reemplazar" name="replace"/>
+	<menu_item_call label="Editar" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_cof_clothing.xml b/indra/newview/skins/minimal/xui/es/menu_cof_clothing.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3c0c5882843177fd813671dde43a2034701bb71d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_cof_clothing.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Clothing">
+	<menu_item_call label="Quitarme" name="take_off"/>
+	<menu_item_call label="Editar" name="edit"/>
+	<menu_item_call label="Reemplazar" name="replace"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_cof_gear.xml b/indra/newview/skins/minimal/xui/es/menu_cof_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ff8ad0977acd795d97daf4c52af4deb5c6a2aa6c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_cof_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear COF">
+	<menu label="Ropas nuevas" name="COF.Gear.New_Clothes"/>
+	<menu label="Nuevas partes del cuerpo" name="COF.Geear.New_Body_Parts"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_edit.xml b/indra/newview/skins/minimal/xui/es/menu_edit.xml
new file mode 100644
index 0000000000000000000000000000000000000000..96fc9d88813ec850f13b17ca15808164fb74fd25
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_edit.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu label="Editar" name="Edit">
+	<menu_item_call label="Deshacer" name="Undo"/>
+	<menu_item_call label="Rehacer" name="Redo"/>
+	<menu_item_call label="Cortar" name="Cut"/>
+	<menu_item_call label="Copiar" name="Copy"/>
+	<menu_item_call label="Pegar" name="Paste"/>
+	<menu_item_call label="Borrar" name="Delete"/>
+	<menu_item_call label="Duplicar" name="Duplicate"/>
+	<menu_item_call label="Seleccionar todo" name="Select All"/>
+	<menu_item_call label="Deseleccionar" name="Deselect"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_favorites.xml b/indra/newview/skins/minimal/xui/es/menu_favorites.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c8a7858ddb8a1d2f819481b5813b13f8ab3f445a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_favorites.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Teleportarse" name="Teleport To Landmark"/>
+	<menu_item_call label="Ver/Editar el hito" name="Landmark Open"/>
+	<menu_item_call label="Copiar la SLurl" name="Copy slurl"/>
+	<menu_item_call label="Mostrar en el mapa" name="Show On Map"/>
+	<menu_item_call label="Copiar" name="Landmark Copy"/>
+	<menu_item_call label="Pegar" name="Landmark Paste"/>
+	<menu_item_call label="Borrar" name="Delete"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_gesture_gear.xml b/indra/newview/skins/minimal/xui/es/menu_gesture_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..24706eb2c8c1831e79007104d211250955f928b9
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_gesture_gear.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_gesture_gear">
+	<menu_item_call label="Añadir a / Quitar de los favoritos" name="activate"/>
+	<menu_item_call label="Copiar" name="copy_gesture"/>
+	<menu_item_call label="Pegar" name="paste"/>
+	<menu_item_call label="Copiar la UUID" name="copy_uuid"/>
+	<menu_item_call label="Añadir al vestuario actual" name="save_to_outfit"/>
+	<menu_item_call label="Editar" name="edit_gesture"/>
+	<menu_item_call label="Inspeccionar" name="inspect"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_group_plus.xml b/indra/newview/skins/minimal/xui/es/menu_group_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6b26ba42c42de7f86794c37d920aabbc043c8e8e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_group_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_call label="Entrar al grupo..." name="item_join"/>
+	<menu_item_call label="Grupo nuevo..." name="item_new"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_hide_navbar.xml b/indra/newview/skins/minimal/xui/es/menu_hide_navbar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..22a1873234ad48c587bd32c40930a7774743d4a0
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_hide_navbar.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="hide_navbar_menu">
+	<menu_item_check label="Mostrar la barra de navegación" name="ShowNavbarNavigationPanel"/>
+	<menu_item_check label="Mostrar la barra de favoritos" name="ShowNavbarFavoritesPanel"/>
+	<menu_item_check label="Mostrar mini-barra de ubicación" name="ShowMiniLocationPanel"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_im_well_button.xml b/indra/newview/skins/minimal/xui/es/menu_im_well_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c8f6c217cc30da60175be58e89f4857273a2252a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_im_well_button.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="IM Well Button Context Menu">
+	<menu_item_call label="Cerrar todo" name="Close All"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_imchiclet_adhoc.xml b/indra/newview/skins/minimal/xui/es/menu_imchiclet_adhoc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e11e9bdc583a4c25d10b7a9e1a831f6f0e68e0e4
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_imchiclet_adhoc.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="IMChiclet AdHoc Menu">
+	<menu_item_call label="Acabar la sesión" name="End Session"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_imchiclet_group.xml b/indra/newview/skins/minimal/xui/es/menu_imchiclet_group.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a5e60ea40b7d9d3c9f3edf446c05b080fbb43f63
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_imchiclet_group.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="IMChiclet Group Menu">
+	<menu_item_call label="Información del grupo" name="Show Profile"/>
+	<menu_item_call label="Mostrar la sesión" name="Chat"/>
+	<menu_item_call label="Acabar la sesión" name="End Session"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_imchiclet_p2p.xml b/indra/newview/skins/minimal/xui/es/menu_imchiclet_p2p.xml
new file mode 100644
index 0000000000000000000000000000000000000000..492801026c962e1e6b5fba4a1e988368a6206164
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_imchiclet_p2p.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="IMChiclet P2P Menu">
+	<menu_item_call label="Ver el perfil" name="Show Profile"/>
+	<menu_item_call label="Añadir como amigo" name="Add Friend"/>
+	<menu_item_call label="Mostrar la sesión" name="Send IM"/>
+	<menu_item_call label="Acabar la sesión" name="End Session"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_inspect_avatar_gear.xml b/indra/newview/skins/minimal/xui/es/menu_inspect_avatar_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ebe33cea117140b49fe3199166ce688854d9c93d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_inspect_avatar_gear.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<toggleable_menu name="Gear Menu">
+	<menu_item_call label="Ver el perfil" name="view_profile"/>
+	<menu_item_call label="Añadir como amigo" name="add_friend"/>
+	<menu_item_call label="MI" name="im"/>
+	<menu_item_call label="Teleportarse" name="teleport"/>
+	<menu_item_call label="Ignorar" name="block"/>
+	<menu_item_call label="Designorar" name="unblock"/>
+	<menu_item_call label="Denunciar" name="report"/>
+	<menu_item_call label="Congelar" name="freeze"/>
+	<menu_item_call label="Expulsar" name="eject"/>
+	<menu_item_call label="Expulsar" name="kick"/>
+	<menu_item_call label="CSR" name="csr"/>
+	<menu_item_call label="Depurar las texturas" name="debug"/>
+	<menu_item_call label="Encontrar en el mapa" name="find_on_map"/>
+	<menu_item_call label="Acercar el zoom" name="zoom_in"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_inspect_object_gear.xml b/indra/newview/skins/minimal/xui/es/menu_inspect_object_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bcdc25894f4f609ae983a65424c272270e0abc54
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_inspect_object_gear.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu name="Gear Menu">
+	<menu_item_call label="Tocar" name="touch"/>
+	<menu_item_call label="Sentarse" name="sit"/>
+	<menu_item_call label="Pagar" name="pay"/>
+	<menu_item_call label="Comprar" name="buy"/>
+	<menu_item_call label="Tomar" name="take"/>
+	<menu_item_call label="Coger una copia" name="take_copy"/>
+	<menu_item_call label="Abrir" name="open"/>
+	<menu_item_call label="Editar" name="edit"/>
+	<menu_item_call label="Ponerse" name="wear"/>
+	<menu_item_call label="Añadir" name="add"/>
+	<menu_item_call label="Denunciar" name="report"/>
+	<menu_item_call label="Ignorar" name="block"/>
+	<menu_item_call label="Acercar el zoom" name="zoom_in"/>
+	<menu_item_call label="Quitar" name="remove"/>
+	<menu_item_call label="Más información" name="more_info"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_inspect_self_gear.xml b/indra/newview/skins/minimal/xui/es/menu_inspect_self_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1a49efb9d027903c07257b43dbd75b89f5a3838a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_inspect_self_gear.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Self Pie">
+	<menu_item_call label="Sentarme" name="Sit Down Here"/>
+	<menu_item_call label="Levantarme" name="Stand Up"/>
+	<menu_item_call label="Mis amigos" name="Friends..."/>
+	<menu_item_call label="Mi perfil" name="Profile..."/>
+	<menu_item_call label="Depurar texturas" name="Debug..."/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_inv_offer_chiclet.xml b/indra/newview/skins/minimal/xui/es/menu_inv_offer_chiclet.xml
new file mode 100644
index 0000000000000000000000000000000000000000..20d99afde11e8a606ef2252375567b9c457b6f7c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_inv_offer_chiclet.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="InvOfferChiclet Menu">
+	<menu_item_call label="Cerrar" name="Close"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_inventory.xml b/indra/newview/skins/minimal/xui/es/menu_inventory.xml
new file mode 100644
index 0000000000000000000000000000000000000000..94ee162bbce5d671111c5360368bea4cde4d5280
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_inventory.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Compartir" name="Share"/>
+	<menu_item_call label="Comprar" name="Task Buy"/>
+	<menu_item_call label="Abrir" name="Task Open"/>
+	<menu_item_call label="Ejecutar" name="Task Play"/>
+	<menu_item_call label="Propiedades" name="Task Properties"/>
+	<menu_item_call label="Renombrar" name="Task Rename"/>
+	<menu_item_call label="Borrar" name="Task Remove"/>
+	<menu_item_call label="Vaciar la papelera" name="Empty Trash"/>
+	<menu_item_call label="Vaciar Objetos Perdidos" name="Empty Lost And Found"/>
+	<menu_item_call label="Carpeta nueva" name="New Folder"/>
+	<menu_item_call label="Script nuevo" name="New Script"/>
+	<menu_item_call label="Nota nueva" name="New Note"/>
+	<menu_item_call label="Gesto nuevo" name="New Gesture"/>
+	<menu label="Ropas nuevas" name="New Clothes">
+		<menu_item_call label="Camisa nueva" name="New Shirt"/>
+		<menu_item_call label="Pantalones nuevos" name="New Pants"/>
+		<menu_item_call label="Zapatos nuevos" name="New Shoes"/>
+		<menu_item_call label="Calcetines nuevos" name="New Socks"/>
+		<menu_item_call label="Chaqueta nueva" name="New Jacket"/>
+		<menu_item_call label="Falda nueva" name="New Skirt"/>
+		<menu_item_call label="Guantes nuevos" name="New Gloves"/>
+		<menu_item_call label="Camiseta nueva" name="New Undershirt"/>
+		<menu_item_call label="Ropa interior nueva" name="New Underpants"/>
+		<menu_item_call label="Nueva capa Alpha" name="New Alpha Mask"/>
+		<menu_item_call label="Tatuaje nuevo" name="New Tattoo"/>
+	</menu>
+	<menu label="Nuevas partes del cuerpo" name="New Body Parts">
+		<menu_item_call label="Forma nueva" name="New Shape"/>
+		<menu_item_call label="Piel nueva" name="New Skin"/>
+		<menu_item_call label="Pelo nuevo" name="New Hair"/>
+		<menu_item_call label="Ojos nuevos" name="New Eyes"/>
+	</menu>
+	<menu label="Change Type" name="Change Type">
+		<menu_item_call label="Por defecto" name="Default"/>
+		<menu_item_call label="Guantes" name="Gloves"/>
+		<menu_item_call label="Chaqueta" name="Jacket"/>
+		<menu_item_call label="Pantalón" name="Pants"/>
+		<menu_item_call label="Forma" name="Shape"/>
+		<menu_item_call label="Zapatos" name="Shoes"/>
+		<menu_item_call label="Camisa" name="Shirt"/>
+		<menu_item_call label="Falda" name="Skirt"/>
+		<menu_item_call label="Ropa interior" name="Underpants"/>
+		<menu_item_call label="Camiseta" name="Undershirt"/>
+	</menu>
+	<menu_item_call label="Teleportar" name="Landmark Open"/>
+	<menu_item_call label="Abrir" name="Animation Open"/>
+	<menu_item_call label="Abrir" name="Sound Open"/>
+	<menu_item_call label="Reemplazar el vestuario" name="Replace Outfit"/>
+	<menu_item_call label="Añadir al vestuario" name="Add To Outfit"/>
+	<menu_item_call label="Quitar del vestuario actual" name="Remove From Outfit"/>
+	<menu_item_call label="Encontrar el original" name="Find Original"/>
+	<menu_item_call label="Eliminar el ítem" name="Purge Item"/>
+	<menu_item_call label="Restaurar el ítem" name="Restore Item"/>
+	<menu_item_call label="Abrir" name="Open"/>
+	<menu_item_call label="Abrir original" name="Open Original"/>
+	<menu_item_call label="Propiedades" name="Properties"/>
+	<menu_item_call label="Renombrar" name="Rename"/>
+	<menu_item_call label="Copiar la UUID" name="Copy Asset UUID"/>
+	<menu_item_call label="Copiar" name="Copy"/>
+	<menu_item_call label="Pegar" name="Paste"/>
+	<menu_item_call label="Pegar como enlace" name="Paste As Link"/>
+	<menu_item_call label="Borrar" name="Remove Link"/>
+	<menu_item_call label="Borrar" name="Delete"/>
+	<menu_item_call label="Borrar carpeta del sistema" name="Delete System Folder"/>
+	<menu_item_call label="Empezar multiconferencia" name="Conference Chat Folder"/>
+	<menu_item_call label="Escuchar" name="Sound Play"/>
+	<menu_item_call label="Acerca del hito" name="About Landmark"/>
+	<menu_item_call label="Escuchar en el mundo" name="Animation Play"/>
+	<menu_item_call label="Ejecutarla para usted" name="Animation Audition"/>
+	<menu_item_call label="Enviar un mensaje instantáneo" name="Send Instant Message"/>
+	<menu_item_call label="Ofrecer teleporte..." name="Offer Teleport..."/>
+	<menu_item_call label="Empezar multiconferencia" name="Conference Chat"/>
+	<menu_item_call label="Activar" name="Activate"/>
+	<menu_item_call label="Desactivar" name="Deactivate"/>
+	<menu_item_call label="Guardar como" name="Save As"/>
+	<menu_item_call label="Quitarse" name="Detach From Yourself"/>
+	<menu_item_call label="Ponerme" name="Wearable And Object Wear"/>
+	<menu label="Anexar a" name="Attach To"/>
+	<menu label="Anexar como HUD" name="Attach To HUD"/>
+	<menu_item_call label="Editar" name="Wearable Edit"/>
+	<menu_item_call label="Añadir" name="Wearable Add"/>
+	<menu_item_call label="Quitarse" name="Take Off"/>
+	<menu_item_call label="--sin opciones--" name="--no options--"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_inventory_add.xml b/indra/newview/skins/minimal/xui/es/menu_inventory_add.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ba106e8335d9133911b3d6e15c0a3c408fdf0338
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_inventory_add.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_inventory_add">
+	<menu label="Subir" name="upload">
+		<menu_item_call label="Imagen ([COST] L$)..." name="Upload Image"/>
+		<menu_item_call label="Sonido ([COST] L$)..." name="Upload Sound"/>
+		<menu_item_call label="Animación ([COST] L$)..." name="Upload Animation"/>
+		<menu_item_call label="Masivo ([COST] L$ por archivo)..." name="Bulk Upload"/>
+		<menu_item_call label="Configurar los permisos por defecto de subida" name="perm prefs"/>
+	</menu>
+	<menu_item_call label="Carpeta nueva" name="New Folder"/>
+	<menu_item_call label="Script nuevo" name="New Script"/>
+	<menu_item_call label="Nota nueva" name="New Note"/>
+	<menu_item_call label="Gesto nuevo" name="New Gesture"/>
+	<menu label="Ropas nuevas" name="New Clothes">
+		<menu_item_call label="Camisa nueva" name="New Shirt"/>
+		<menu_item_call label="Pantalón nuevo" name="New Pants"/>
+		<menu_item_call label="Zapatos nuevos" name="New Shoes"/>
+		<menu_item_call label="Calcetines nuevos" name="New Socks"/>
+		<menu_item_call label="Chaqueta nueva" name="New Jacket"/>
+		<menu_item_call label="Falda nueva" name="New Skirt"/>
+		<menu_item_call label="Guantes nuevos" name="New Gloves"/>
+		<menu_item_call label="Camiseta nueva" name="New Undershirt"/>
+		<menu_item_call label="Ropa interior nueva" name="New Underpants"/>
+		<menu_item_call label="Nueva Alfa" name="New Alpha"/>
+		<menu_item_call label="Tatuaje nuevo" name="New Tattoo"/>
+	</menu>
+	<menu label="Nuevas partes del cuerpo" name="New Body Parts">
+		<menu_item_call label="Forma nueva" name="New Shape"/>
+		<menu_item_call label="Piel nueva" name="New Skin"/>
+		<menu_item_call label="Pelo nuevo" name="New Hair"/>
+		<menu_item_call label="Ojos nuevos" name="New Eyes"/>
+	</menu>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_inventory_gear_default.xml b/indra/newview/skins/minimal/xui/es/menu_inventory_gear_default.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8e498fefba1434807b3cf337a30e2b8326994d4c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_inventory_gear_default.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_gear_default">
+	<menu_item_call label="Nueva ventana del inventario" name="new_window"/>
+	<menu_item_check label="Ordenar alfabéticamente" name="sort_by_name"/>
+	<menu_item_check label="Ordenar por los más recientes" name="sort_by_recent"/>
+	<menu_item_check label="Las carpetas del sistema, arriba" name="sort_system_folders_to_top"/>
+	<menu_item_call label="Ver los filtros" name="show_filters"/>
+	<menu_item_call label="Restablecer los filtros" name="reset_filters"/>
+	<menu_item_call label="Cerrar todas las carpetas" name="close_folders"/>
+	<menu_item_call label="Vaciar Objetos Perdidos" name="empty_lostnfound"/>
+	<menu_item_call label="Guardar la textura como" name="Save Texture As"/>
+	<menu_item_call label="Compartir" name="Share"/>
+	<menu_item_call label="Encontrar el original" name="Find Original"/>
+	<menu_item_call label="Encontrar todos los enlazados" name="Find All Links"/>
+	<menu_item_call label="Vaciar la Papelera" name="empty_trash"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_land.xml b/indra/newview/skins/minimal/xui/es/menu_land.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b0f15be1b637316dee2000c098dbb13739ff0da0
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_land.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Land Pie">
+	<menu_item_call label="Acerca del terreno" name="Place Information..."/>
+	<menu_item_call label="Sentarme aquí" name="Sit Here"/>
+	<menu_item_call label="Comprar este terreno" name="Land Buy"/>
+	<menu_item_call label="Comprar un pase" name="Land Buy Pass"/>
+	<menu_item_call label="Construir" name="Create"/>
+	<menu_item_call label="Modificar el terreno" name="Edit Terrain"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_landmark.xml b/indra/newview/skins/minimal/xui/es/menu_landmark.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f69b1539b82d1471b28168d31d05544fc6f4ad84
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_landmark.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="landmark_overflow_menu">
+	<menu_item_call label="Copiar la SLurl" name="copy"/>
+	<menu_item_call label="Borrar" name="delete"/>
+	<menu_item_call label="Crear un Destacado" name="pick"/>
+	<menu_item_call label="Añadir a la barra de favoritos" name="add_to_favbar"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_login.xml b/indra/newview/skins/minimal/xui/es/menu_login.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c27d6247324206eca98b8f563d0203df1213653f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_login.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu_bar name="Login Menu">
+	<menu label="Yo" name="File">
+		<menu_item_call label="Preferencias" name="Preferences..."/>
+		<menu_item_call label="Salir de [APP_NAME]" name="Quit"/>
+	</menu>
+	<menu label="Ayuda" name="Help">
+		<menu_item_call label="Ayuda de [SECOND_LIFE]" name="Second Life Help"/>
+		<menu_item_call label="Acerca de [APP_NAME]" name="About Second Life"/>
+	</menu>
+	<menu_item_check label="Mostrar el menú &apos;Debug&apos;" name="Show Debug Menu"/>
+	<menu label="Depurar" name="Debug">
+		<menu_item_call label="Mostrar las configuraciones del depurador" name="Debug Settings"/>
+		<menu_item_call label="Configuraciones del Visor/Color" name="UI/Color Settings"/>
+		<menu label="Pruebas de la interfaz" name="UI Tests"/>
+		<menu_item_call label="Definir el tamaño de la ventana..." name="Set Window Size..."/>
+		<menu_item_call label="Mostrar los &apos;TOS&apos;" name="TOS"/>
+		<menu_item_call label="Mostrar mensaje crítico" name="Critical"/>
+		<menu_item_call label="Prueba de navegadores de medios" name="Web Browser Test"/>
+		<menu_item_call label="Prueba de ventanas de contenidos web" name="Web Content Floater Test"/>
+		<menu_item_check label="Mostrar el selector de Grid" name="Show Grid Picker"/>
+		<menu_item_call label="Mostrar la consola de notificaciones" name="Show Notifications Console"/>
+	</menu>
+</menu_bar>
diff --git a/indra/newview/skins/minimal/xui/es/menu_mini_map.xml b/indra/newview/skins/minimal/xui/es/menu_mini_map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..07d1b08572936f0409098abbf2c2c9646c8648b6
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_mini_map.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Zoom cerca" name="Zoom Close"/>
+	<menu_item_call label="Zoom medio" name="Zoom Medium"/>
+	<menu_item_call label="Zoom lejos" name="Zoom Far"/>
+	<menu_item_call label="Zoom por defecto" name="Zoom Default"/>
+	<menu_item_check label="Girar el mapa" name="Rotate Map"/>
+	<menu_item_check label="Centrar automáticamente" name="Auto Center"/>
+	<menu_item_call label="Parar la búsqueda" name="Stop Tracking"/>
+	<menu_item_call label="Mapa del mundo" name="World Map"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_navbar.xml b/indra/newview/skins/minimal/xui/es/menu_navbar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..63e546802066090066b6bd18da31bcaf5a1a7e49
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_navbar.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Navbar Menu">
+	<menu_item_check label="Mostrar las coordenadas" name="Show Coordinates"/>
+	<menu_item_check label="Mostrar las propiedades de la parcela" name="Show Parcel Properties"/>
+	<menu_item_call label="Hito" name="Landmark"/>
+	<menu_item_call label="Cortar" name="Cut"/>
+	<menu_item_call label="Copiar" name="Copy"/>
+	<menu_item_call label="Pegar" name="Paste"/>
+	<menu_item_call label="Borrar" name="Delete"/>
+	<menu_item_call label="Seleccionar todo" name="Select All"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_nearby_chat.xml b/indra/newview/skins/minimal/xui/es/menu_nearby_chat.xml
new file mode 100644
index 0000000000000000000000000000000000000000..94b281b6c760edb4d4c22bb007dfaffbdf6f60d1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_nearby_chat.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="NearBy Chat Menu">
+	<menu_item_call label="Mostrar la gente que está cerca..." name="nearby_people"/>
+	<menu_item_check label="Ver el texto ignorado" name="muted_text"/>
+	<menu_item_check label="Mostrar los iconos del amigo" name="show_buddy_icons"/>
+	<menu_item_check label="Mostrar los nombres" name="show_names"/>
+	<menu_item_check label="Mostrar los iconos y los nombres" name="show_icons_and_names"/>
+	<menu_item_call label="Tamaño de la fuente" name="font_size"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_notification_well_button.xml b/indra/newview/skins/minimal/xui/es/menu_notification_well_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0562d35be72dc2054f0bd6f4c5a386c162ae1739
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_notification_well_button.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Notification Well Button Context Menu">
+	<menu_item_call label="Cerrar todo" name="Close All"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_object.xml b/indra/newview/skins/minimal/xui/es/menu_object.xml
new file mode 100644
index 0000000000000000000000000000000000000000..06121e0c09a143e0d05e4a8b6c783bbae9caf7d3
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_object.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Object Pie">
+	<menu_item_call label="Tocar" name="Object Touch">
+		<menu_item_call.on_enable name="EnableTouch" parameter="Tocar"/>
+	</menu_item_call>
+	<menu_item_call label="Editar" name="Edit..."/>
+	<menu_item_call label="Construir" name="Build"/>
+	<menu_item_call label="Abrir" name="Open"/>
+	<menu_item_call label="Sentarme aquí" name="Object Sit"/>
+	<menu_item_call label="Levantarme" name="Object Stand Up"/>
+	<menu_item_call label="Perfil del objeto" name="Object Inspect"/>
+	<menu_item_call label="Acercar el zoom" name="Zoom In"/>
+	<context_menu label="Ponerme" name="Put On">
+		<menu_item_call label="Ponerme" name="Wear"/>
+		<menu_item_call label="Añadir" name="Add"/>
+		<context_menu label="Anexar" name="Object Attach"/>
+		<context_menu label="Anexar el HUD" name="Object Attach HUD"/>
+	</context_menu>
+	<context_menu label="Quitar" name="Remove">
+		<menu_item_call label="Denunciar una infracción" name="Report Abuse..."/>
+		<menu_item_call label="Ignorar" name="Object Mute"/>
+		<menu_item_call label="Devolver" name="Return..."/>
+		<menu_item_call label="Eliminar" name="Delete"/>
+	</context_menu>
+	<menu_item_call label="Tomar" name="Pie Object Take"/>
+	<menu_item_call label="Coger una copia" name="Take Copy"/>
+	<menu_item_call label="Pagar" name="Pay..."/>
+	<menu_item_call label="Comprar" name="Buy..."/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_object_icon.xml b/indra/newview/skins/minimal/xui/es/menu_object_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7e4578b95040a45c287c053b4361dbf95ec8b1bb
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_object_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Object Icon Menu">
+	<menu_item_call label="Perfil del objeto..." name="Object Profile"/>
+	<menu_item_call label="Ignorar..." name="Block"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_outfit_gear.xml b/indra/newview/skins/minimal/xui/es/menu_outfit_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3b11bceecf6b7be459843d09a04ba63a3205df93
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_outfit_gear.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear Outfit">
+	<menu_item_call label="Ponerme - Reemplazar el vestuario actual" name="wear"/>
+	<menu_item_call label="Ponerme - Añadir al vestuario actual" name="wear_add"/>
+	<menu_item_call label="Quitarme - Quitar del vestuario actual" name="take_off"/>
+	<menu label="Ropas nuevas" name="New Clothes">
+		<menu_item_call label="Camisa nueva" name="New Shirt"/>
+		<menu_item_call label="Pantalón nuevo" name="New Pants"/>
+		<menu_item_call label="Zapatos nuevos" name="New Shoes"/>
+		<menu_item_call label="Calcetines nuevos" name="New Socks"/>
+		<menu_item_call label="Chaqueta nueva" name="New Jacket"/>
+		<menu_item_call label="Falda nueva" name="New Skirt"/>
+		<menu_item_call label="Guantes nuevos" name="New Gloves"/>
+		<menu_item_call label="Camiseta nueva" name="New Undershirt"/>
+		<menu_item_call label="Ropa interior nueva" name="New Underpants"/>
+		<menu_item_call label="Nueva Alfa" name="New Alpha"/>
+		<menu_item_call label="Tatuaje nuevo" name="New Tattoo"/>
+	</menu>
+	<menu label="Nuevas partes del cuerpo" name="New Body Parts">
+		<menu_item_call label="Anatomía nueva" name="New Shape"/>
+		<menu_item_call label="Piel nueva" name="New Skin"/>
+		<menu_item_call label="Pelo nuevo" name="New Hair"/>
+		<menu_item_call label="Ojos nuevos" name="New Eyes"/>
+	</menu>
+	<menu_item_call label="Renombrar el vestuario" name="rename"/>
+	<menu_item_call label="Borrar el vestuario" name="delete_outfit"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_outfit_tab.xml b/indra/newview/skins/minimal/xui/es/menu_outfit_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4136082a62fa9a08d5f08834468e38afc09eb1c5
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_outfit_tab.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit">
+	<menu_item_call label="Ponerme - Reemplazar el vestuario actual" name="wear_replace"/>
+	<menu_item_call label="Ponerme - Añadir al vestuario actual" name="wear_add"/>
+	<menu_item_call label="Quitarme - Quitar del vestuario actual" name="take_off"/>
+	<menu_item_call label="Editar el vestuario" name="edit"/>
+	<menu_item_call label="Renombrar el vestuario" name="rename"/>
+	<menu_item_call label="Borrar el vestuario" name="delete"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_participant_list.xml b/indra/newview/skins/minimal/xui/es/menu_participant_list.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f6eedd11705485a8a867c7b20cbc6bd3ea5c2b10
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_participant_list.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Participant List Context Menu">
+	<menu_item_check label="Ordenar alfabéticamente" name="SortByName"/>
+	<menu_item_check label="Ordenar según las intervenciones recientes" name="SortByRecentSpeakers"/>
+	<menu_item_call label="Ver el perfil" name="View Profile"/>
+	<menu_item_call label="Añadir como amigo" name="Add Friend"/>
+	<menu_item_call label="MI" name="IM"/>
+	<menu_item_call label="Llamar" name="Call"/>
+	<menu_item_call label="Compartir" name="Share"/>
+	<menu_item_call label="Pagar" name="Pay"/>
+	<menu_item_check label="Ver los iconos de la gente" name="View Icons"/>
+	<menu_item_check label="Ignorar la voz" name="Block/Unblock"/>
+	<menu_item_check label="Ignorar el texto" name="MuteText"/>
+	<context_menu label="Opciones del moderador" name="Moderator Options">
+		<menu_item_check label="Permitir el chat de texto" name="AllowTextChat"/>
+		<menu_item_call label="Ignorar a este participante" name="ModerateVoiceMuteSelected"/>
+		<menu_item_call label="Quitar el silencio a este participante" name="ModerateVoiceUnMuteSelected"/>
+		<menu_item_call label="Silenciar a todos" name="ModerateVoiceMute"/>
+		<menu_item_call label="Quitar el silencio a todos" name="ModerateVoiceUnmute"/>
+	</context_menu>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_people_friends_view_sort.xml b/indra/newview/skins/minimal/xui/es/menu_people_friends_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3899ad9e961cf13d9ca82a7f2a6740b27fb477c8
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_people_friends_view_sort.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_check label="Ordenar alfabéticamente" name="sort_name"/>
+	<menu_item_check label="Ordenar por estatus" name="sort_status"/>
+	<menu_item_check label="Ver los iconos de la gente" name="view_icons"/>
+	<menu_item_check label="Ver permisos concedidos" name="view_permissions"/>
+	<menu_item_call label="Ver la lista de Residentes y Objetos ignorados" name="show_blocked_list"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_people_groups.xml b/indra/newview/skins/minimal/xui/es/menu_people_groups.xml
new file mode 100644
index 0000000000000000000000000000000000000000..51bd2c720856c67d41dd2ef8a4953b50944482dc
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_people_groups.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_call label="Ver la información" name="View Info"/>
+	<menu_item_call label="Chat" name="Chat"/>
+	<menu_item_call label="Llamar" name="Call"/>
+	<menu_item_call label="Activar" name="Activate"/>
+	<menu_item_call label="Dejar" name="Leave"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_people_groups_view_sort.xml b/indra/newview/skins/minimal/xui/es/menu_people_groups_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1bd3efb61184ca61cee76af393f0a9b983f01635
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_people_groups_view_sort.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_check label="Mostrar los iconos de grupo" name="Display Group Icons"/>
+	<menu_item_call label="Dejar el grupo seleccionado" name="Leave Selected Group"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_people_nearby.xml b/indra/newview/skins/minimal/xui/es/menu_people_nearby.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dc1486d87960a2bf990ef1e60ac2ef6f64abf0ee
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_people_nearby.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Avatar Context Menu">
+	<menu_item_call label="Ver el perfil" name="View Profile"/>
+	<menu_item_call label="Añadir como amigo" name="Add Friend"/>
+	<menu_item_call label="Quitarle como amigo" name="Remove Friend"/>
+	<menu_item_call label="MI" name="IM"/>
+	<menu_item_call label="Llamar" name="Call"/>
+	<menu_item_call label="Mapa" name="Map"/>
+	<menu_item_call label="Compartir" name="Share"/>
+	<menu_item_call label="Pagar" name="Pay"/>
+	<menu_item_check label="Ignorar / No ignorar" name="Block/Unblock"/>
+	<menu_item_call label="Ofrecer teleporte" name="teleport"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_people_nearby_multiselect.xml b/indra/newview/skins/minimal/xui/es/menu_people_nearby_multiselect.xml
new file mode 100644
index 0000000000000000000000000000000000000000..227c5ebe58f06f321dfc9e70739fcf622d71a2d8
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_people_nearby_multiselect.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Multi-Selected People Context Menu">
+	<menu_item_call label="Añadir como amigos" name="Add Friends"/>
+	<menu_item_call label="Quitar amigos" name="Remove Friend"/>
+	<menu_item_call label="MI" name="IM"/>
+	<menu_item_call label="Llamar" name="Call"/>
+	<menu_item_call label="Compartir" name="Share"/>
+	<menu_item_call label="Pagar" name="Pay"/>
+	<menu_item_call label="Ofrecer teleporte" name="teleport"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_people_nearby_view_sort.xml b/indra/newview/skins/minimal/xui/es/menu_people_nearby_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f0fe383c0c39c5e11a96d8b6038d719e6c215b31
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_people_nearby_view_sort.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_check label="Ordenar según las intervenciones recientes" name="sort_by_recent_speakers"/>
+	<menu_item_check label="Ordenar alfabéticamente" name="sort_name"/>
+	<menu_item_check label="Ordenar según distancia" name="sort_distance"/>
+	<menu_item_check label="Ver los iconos de la gente" name="view_icons"/>
+	<menu_item_call label="Ver la lista de Residentes y Objetos ignorados" name="show_blocked_list"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_people_recent_view_sort.xml b/indra/newview/skins/minimal/xui/es/menu_people_recent_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e4aaa891109392fe1c060b8b48f9a41b1c323b0b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_people_recent_view_sort.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_check label="Ordenar por los más recientes" name="sort_most"/>
+	<menu_item_check label="Ordenar alfabéticamente" name="sort_name"/>
+	<menu_item_check label="Ver los iconos de la gente" name="view_icons"/>
+	<menu_item_call label="Ver la lista de Residentes y Objetos ignorados" name="show_blocked_list"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_picks.xml b/indra/newview/skins/minimal/xui/es/menu_picks.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9da68d7c9bf308fc89c146af3d14c57cd24d27ae
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_picks.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Picks">
+	<menu_item_call label="Información" name="pick_info"/>
+	<menu_item_call label="Editar" name="pick_edit"/>
+	<menu_item_call label="Teleportar" name="pick_teleport"/>
+	<menu_item_call label="Mapa" name="pick_map"/>
+	<menu_item_call label="Eliminar" name="pick_delete"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_picks_plus.xml b/indra/newview/skins/minimal/xui/es/menu_picks_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cc59bf1d292a5302e97219f8c2ae0d01e2e89a6a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_picks_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="picks_plus_menu">
+	<menu_item_call label="Destacado nuevo" name="create_pick"/>
+	<menu_item_call label="Clasificado nuevo" name="create_classified"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_place.xml b/indra/newview/skins/minimal/xui/es/menu_place.xml
new file mode 100644
index 0000000000000000000000000000000000000000..675f0699e9999dd4665ff290ee32ba74f7709d40
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_place.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="place_overflow_menu">
+	<menu_item_call label="Crear un hito" name="landmark"/>
+	<menu_item_call label="Crear un destacado" name="pick"/>
+	<menu_item_call label="Comprar un pase" name="pass"/>
+	<menu_item_call label="Editar" name="edit"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_place_add_button.xml b/indra/newview/skins/minimal/xui/es/menu_place_add_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4b2f908a06302fe1531c64185d7728780b1b1680
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_place_add_button.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_folder_gear">
+	<menu_item_call label="Añadir una carpeta" name="add_folder"/>
+	<menu_item_call label="Añadir este hito" name="add_landmark"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_places_gear_folder.xml b/indra/newview/skins/minimal/xui/es/menu_places_gear_folder.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bf46eb58e3cc4edaf90186f3c28a961ccceaca88
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_places_gear_folder.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_folder_gear">
+	<menu_item_call label="Añadir este hito" name="add_landmark"/>
+	<menu_item_call label="Añadir una carpeta" name="add_folder"/>
+	<menu_item_call label="Cortar" name="cut"/>
+	<menu_item_call label="Copiar" name="copy_folder"/>
+	<menu_item_call label="Pegar" name="paste"/>
+	<menu_item_call label="Renombrar" name="rename"/>
+	<menu_item_call label="Borrar" name="delete"/>
+	<menu_item_call label="Abrir" name="expand"/>
+	<menu_item_call label="Cerrar" name="collapse"/>
+	<menu_item_call label="Abrir todas las carpetas" name="expand_all"/>
+	<menu_item_call label="Cerrar todas las carpetas" name="collapse_all"/>
+	<menu_item_check label="Ordenar por fecha" name="sort_by_date"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_places_gear_landmark.xml b/indra/newview/skins/minimal/xui/es/menu_places_gear_landmark.xml
new file mode 100644
index 0000000000000000000000000000000000000000..eac85de846c5f965472b792033e2fa4cd6cccc66
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_places_gear_landmark.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_ladmark_gear">
+	<menu_item_call label="Teleportar" name="teleport"/>
+	<menu_item_call label="Más información" name="more_info"/>
+	<menu_item_call label="Mostrar en el mapa" name="show_on_map"/>
+	<menu_item_call label="Añadir un hito" name="add_landmark"/>
+	<menu_item_call label="Añadir una carpeta" name="add_folder"/>
+	<menu_item_call label="Cortar" name="cut"/>
+	<menu_item_call label="Copiar el hito" name="copy_landmark"/>
+	<menu_item_call label="Copiar la SLurl" name="copy_slurl"/>
+	<menu_item_call label="Pegar" name="paste"/>
+	<menu_item_call label="Renombrar" name="rename"/>
+	<menu_item_call label="Eliminar" name="delete"/>
+	<menu_item_call label="Abrir todas las carpetas" name="expand_all"/>
+	<menu_item_call label="Cerrar todas las carpetas" name="collapse_all"/>
+	<menu_item_check label="Ordenar por fecha" name="sort_by_date"/>
+	<menu_item_call label="Crear un Destacado" name="create_pick"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_profile_overflow.xml b/indra/newview/skins/minimal/xui/es/menu_profile_overflow.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5ee8c50949e1aec33c0cc0901210bf7e19fb092e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_profile_overflow.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="profile_overflow_menu">
+	<menu_item_call label="Mapa" name="show_on_map"/>
+	<menu_item_call label="Pagar" name="pay"/>
+	<menu_item_call label="Compartir" name="share"/>
+	<menu_item_call label="Ignorar" name="block"/>
+	<menu_item_call label="Designorar" name="unblock"/>
+	<menu_item_call label="Expulsar" name="kick"/>
+	<menu_item_call label="Congelar" name="freeze"/>
+	<menu_item_call label="Descongelar" name="unfreeze"/>
+	<menu_item_call label="CSR" name="csr"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_save_outfit.xml b/indra/newview/skins/minimal/xui/es/menu_save_outfit.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a04ec75b60a620bb630cf4e676410fa8c19bcb2d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_save_outfit.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="save_outfit_menu">
+	<menu_item_call label="Guardar" name="save_outfit"/>
+	<menu_item_call label="Guardar como" name="save_as_new_outfit"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_script_chiclet.xml b/indra/newview/skins/minimal/xui/es/menu_script_chiclet.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f517baf56626397bb956ed38c0287cd6ae0fe65c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_script_chiclet.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="ScriptChiclet Menu">
+	<menu_item_call label="Cerrar" name="Close"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_slurl.xml b/indra/newview/skins/minimal/xui/es/menu_slurl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ca19acec6e4e174861705aaa8e1e4fea64d621be
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_slurl.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Acerca de la URL" name="about_url"/>
+	<menu_item_call label="Teleportar a la URL" name="teleport_to_url"/>
+	<menu_item_call label="Mapa" name="show_on_map"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_teleport_history_gear.xml b/indra/newview/skins/minimal/xui/es/menu_teleport_history_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b708f3bc201a65ca088701b8a654bcc08d319e1c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_teleport_history_gear.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Teleport History Gear Context Menu">
+	<menu_item_call label="Abrir todas las carpetas" name="Expand all folders"/>
+	<menu_item_call label="Cerrar todas las carpetas" name="Collapse all folders"/>
+	<menu_item_call label="Limpiar el historial de teleportes" name="Clear Teleport History"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_teleport_history_item.xml b/indra/newview/skins/minimal/xui/es/menu_teleport_history_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ed33c55aca3612b49e9e7636427e7d3fb38f5d21
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_teleport_history_item.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Teleport History Item Context Menu">
+	<menu_item_call label="Teleportarse" name="Teleport"/>
+	<menu_item_call label="Más información" name="More Information"/>
+	<menu_item_call label="Copiar al portapapeles" name="CopyToClipboard"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_teleport_history_tab.xml b/indra/newview/skins/minimal/xui/es/menu_teleport_history_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..17e90422a5567fcefa0ebaafaba4f34a1eb47374
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_teleport_history_tab.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Teleport History Item Context Menu">
+	<menu_item_call label="Abrir" name="TabOpen"/>
+	<menu_item_call label="Cerrar" name="TabClose"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_text_editor.xml b/indra/newview/skins/minimal/xui/es/menu_text_editor.xml
new file mode 100644
index 0000000000000000000000000000000000000000..095e461734ea0b8f2b0532d08fe50c26856e51e0
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_text_editor.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Text editor context menu">
+	<menu_item_call label="Cortar" name="Cut"/>
+	<menu_item_call label="Copiar" name="Copy"/>
+	<menu_item_call label="Pegar" name="Paste"/>
+	<menu_item_call label="Borrar" name="Delete"/>
+	<menu_item_call label="Seleccionar todo" name="Select All"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_topinfobar.xml b/indra/newview/skins/minimal/xui/es/menu_topinfobar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2125fd51b223340758e8eafba9b759a4c51f653b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_topinfobar.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_topinfobar">
+	<menu_item_check label="Mostrar las coordenadas" name="Show Coordinates"/>
+	<menu_item_check label="Mostrar las propiedades de la parcela" name="Show Parcel Properties"/>
+	<menu_item_call label="Hito" name="Landmark"/>
+	<menu_item_call label="Copiar" name="Copy"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_url_agent.xml b/indra/newview/skins/minimal/xui/es/menu_url_agent.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a089c8f68e3b9a3496a3cbf89fb20f48bf23723a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_url_agent.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Mostrar el perfil del Residente" name="show_agent"/>
+	<menu_item_call label="Copiar el nombre al portapapeles" name="url_copy_label"/>
+	<menu_item_call label="Copiar la SLurl al portapapeles" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_url_group.xml b/indra/newview/skins/minimal/xui/es/menu_url_group.xml
new file mode 100644
index 0000000000000000000000000000000000000000..79374b973955da84ff6da07fc231115bed126b55
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_url_group.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Mostrar la información del grupo" name="show_group"/>
+	<menu_item_call label="Copiar el grupo al portapapeles" name="url_copy_label"/>
+	<menu_item_call label="Copiar la SLurl al portapapeles" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_url_http.xml b/indra/newview/skins/minimal/xui/es/menu_url_http.xml
new file mode 100644
index 0000000000000000000000000000000000000000..585c059ff31d8bad602bf584cc5dcff1b2ce3ac5
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_url_http.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Abrir la página web" name="url_open"/>
+	<menu_item_call label="Abrir en el navegador incorporado" name="url_open_internal"/>
+	<menu_item_call label="Abrir en mi navegador" name="url_open_external"/>
+	<menu_item_call label="Copiar la URL al portapapeles" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_url_inventory.xml b/indra/newview/skins/minimal/xui/es/menu_url_inventory.xml
new file mode 100644
index 0000000000000000000000000000000000000000..13a8711c761c71860a10083b53f76431be6b7d50
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_url_inventory.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Mostrar ítem del inventario" name="show_item"/>
+	<menu_item_call label="Copiar el nombre al portapapeles" name="url_copy_label"/>
+	<menu_item_call label="Copiar la SLurl al portapapeles" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_url_map.xml b/indra/newview/skins/minimal/xui/es/menu_url_map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f96a0c717060707ac6762ce3e370603510214dda
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_url_map.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Mostrar en el mapa" name="show_on_map"/>
+	<menu_item_call label="Teleportarse a la localización" name="teleport_to_location"/>
+	<menu_item_call label="Copiar la SLurl al portapapeles" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_url_objectim.xml b/indra/newview/skins/minimal/xui/es/menu_url_objectim.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8791a290af63de783c7e5fb419836e61c62514c9
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_url_objectim.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Mostrar la información del objeto" name="show_object"/>
+	<menu_item_call label="Mostrar en el mapa" name="show_on_map"/>
+	<menu_item_call label="Teleportarse a la posición del objeto" name="teleport_to_object"/>
+	<menu_item_call label="Copiar el nombre del objeto al portapapeles" name="url_copy_label"/>
+	<menu_item_call label="Copiar la SLurl al portapapeles" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_url_parcel.xml b/indra/newview/skins/minimal/xui/es/menu_url_parcel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9e789ef8ee8a6912a749959dccce0564c71ee617
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_url_parcel.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Mostrar la información de la parcela" name="show_parcel"/>
+	<menu_item_call label="Mostrar en el mapa" name="show_on_map"/>
+	<menu_item_call label="Copiar la SLurl al portapapeles" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_url_slapp.xml b/indra/newview/skins/minimal/xui/es/menu_url_slapp.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7147dcd3cff9b1c740354a1c309c730043273ce0
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_url_slapp.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Ejecutar este comando" name="run_slapp"/>
+	<menu_item_call label="Copiar la SLurl al portapapeles" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_url_slurl.xml b/indra/newview/skins/minimal/xui/es/menu_url_slurl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4ab47c2f61e404e608c953ccfb2627914141707b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_url_slurl.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Mostrar la información del lugar" name="show_place"/>
+	<menu_item_call label="Mostrar en el mapa" name="show_on_map"/>
+	<menu_item_call label="Teleportarse a este lugar" name="teleport_to_location"/>
+	<menu_item_call label="Copiar la SLurl al portapapeles" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_url_teleport.xml b/indra/newview/skins/minimal/xui/es/menu_url_teleport.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8f86a91be3025a0264130460a9edf9d1f3b5895b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_url_teleport.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Teleportarse a este lugar" name="teleport"/>
+	<menu_item_call label="Mostrar en el mapa" name="show_on_map"/>
+	<menu_item_call label="Copiar la SLurl al portapapeles" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_viewer.xml b/indra/newview/skins/minimal/xui/es/menu_viewer.xml
new file mode 100644
index 0000000000000000000000000000000000000000..776ccfe21bc4185bb49f2ef7985aca90941f6669
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_viewer.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu_bar name="Main Menu">
+	<menu label="Ayuda" name="Help">
+		<menu_item_call label="Ayuda de [SECOND_LIFE]" name="Second Life Help"/>
+	</menu>
+	<menu label="Avanzado" name="Advanced">
+		<menu label="Atajos de teclado" name="Shortcuts">
+			<menu_item_check label="Volar" name="Fly"/>
+			<menu_item_call label="Cerrar la ventana" name="Close Window"/>
+			<menu_item_call label="Cerrar todas las ventanas" name="Close All Windows"/>
+			<menu_item_call label="Volver a la vista por defecto" name="Reset View"/>
+		</menu>
+	</menu>
+</menu_bar>
diff --git a/indra/newview/skins/minimal/xui/es/menu_wearable_list_item.xml b/indra/newview/skins/minimal/xui/es/menu_wearable_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4bffa689e740237a76869534c4876f56dbf235d9
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_wearable_list_item.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit Wearable Context Menu">
+	<menu_item_call label="Reemplazar" name="wear_replace"/>
+	<menu_item_call label="Ponerme" name="wear_wear"/>
+	<menu_item_call label="Añadir" name="wear_add"/>
+	<menu_item_call label="Quitarme / Quitar" name="take_off_or_detach"/>
+	<menu_item_call label="Quitar" name="detach"/>
+	<context_menu label="Anexar a" name="wearable_attach_to"/>
+	<context_menu label="Anexar al HUD" name="wearable_attach_to_hud"/>
+	<menu_item_call label="Quitarme" name="take_off"/>
+	<menu_item_call label="Editar" name="edit"/>
+	<menu_item_call label="Perfil del elemento" name="object_profile"/>
+	<menu_item_call label="Mostrar original" name="show_original"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_wearing_gear.xml b/indra/newview/skins/minimal/xui/es/menu_wearing_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9d9ce75e5390b3958046209acabaf95f819c9e12
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_wearing_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear Wearing">
+	<menu_item_call label="Editar el vestuario" name="edit"/>
+	<menu_item_call label="Quitarme" name="takeoff"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/es/menu_wearing_tab.xml b/indra/newview/skins/minimal/xui/es/menu_wearing_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..64fd7ce4cf743c014b47403879af9092939dce0b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/menu_wearing_tab.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Wearing">
+	<menu_item_call label="Quitarme" name="take_off"/>
+	<menu_item_call label="Quitar" name="detach"/>
+	<menu_item_call label="Editar el vestuario" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/es/notifications.xml b/indra/newview/skins/minimal/xui/es/notifications.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b08ebb5f767be8ab80d59c2b86c36404b0b42435
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/notifications.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<notifications>
+	<notification name="UserGiveItem">
+		[NAME_SLURL] te ofrece un/a [ITEM_SLURL]. Para utilizar este ítem, cambia al modo Avanzado y búscalo en el inventario. Para cambiar al modo Avanzado, sal de la aplicación, reiníciala y cambia el ajuste de modo en la pantalla de inicio de sesión.
+		<form name="form">
+			<button name="Show" text="Conservar ítem"/>
+			<button name="Discard" text="Rechazar ítem"/>
+			<button name="Mute" text="Bloquear usuario"/>
+		</form>
+	</notification>
+	<notification name="ObjectGiveItem">
+		Un objeto de nombre &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, propiedad de [NAME_SLURL], te ofrece un/a [ITEM_SLURL]. Para utilizar este ítem, cambia al modo Avanzado y búscalo en el inventario. Para cambiar al modo Avanzado, sal de la aplicación, reiníciala y cambia el ajuste de modo en la pantalla de inicio de sesión.
+		<form name="form">
+			<button name="Keep" text="Conservar ítem"/>
+			<button name="Discard" text="Rechazar ítem"/>
+			<button name="Mute" text="Bloquear objeto"/>
+		</form>
+	</notification>
+</notifications>
diff --git a/indra/newview/skins/minimal/xui/es/panel_bottomtray.xml b/indra/newview/skins/minimal/xui/es/panel_bottomtray.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f782d66ae79609ed747d7ca92b6f7214c9592c48
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/panel_bottomtray.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="bottom_tray">
+	<string name="DragIndicationImageName" value="Accordion_ArrowOpened_Off"/>
+	<string name="SpeakBtnToolTip" value="Activa/Desactiva el micrófono"/>
+	<string name="VoiceControlBtnToolTip" value="Muestra/Oculta el panel del control de voz"/>
+	<layout_stack name="toolbar_stack">
+		<layout_panel name="gesture_panel">
+			<gesture_combo_list label="Gestos" name="Gesture" tool_tip="Muestra/Oculta los gestos"/>
+		</layout_panel>
+		<layout_panel name="cam_panel">
+			<bottomtray_button label="Visión" name="camera_btn" tool_tip="Muestra/Oculta los controles de la cámara"/>
+		</layout_panel>
+		<layout_panel name="avatar_and_destinations_panel">
+			<bottomtray_button label="Destinos" name="destination_btn" tool_tip="Muestra la ventana de gente"/>
+		</layout_panel>
+		<layout_panel name="avatar_and_destinations_panel">
+			<bottomtray_button label="Mi avatar" name="avatar_btn"/>
+		</layout_panel>
+		<layout_panel name="people_panel">
+			<bottomtray_button label="Gente" name="show_people_button" tool_tip="Muestra la ventana de gente"/>
+		</layout_panel>
+		<layout_panel name="profile_panel">
+			<bottomtray_button label="Perfil" name="show_profile_btn" tool_tip="Muestra la ventana del perfil"/>
+		</layout_panel>
+		<layout_panel name="howto_panel">
+			<bottomtray_button label="Indicaciones" name="show_help_btn" tool_tip="Abrir los temas sobre indicaciones de Second Life"/>
+		</layout_panel>
+		<layout_panel name="im_well_panel">
+			<chiclet_im_well name="im_well">
+				<button name="Unread IM messages" tool_tip="Conversaciones"/>
+			</chiclet_im_well>
+		</layout_panel>
+		<layout_panel name="notification_well_panel">
+			<chiclet_notification name="notification_well">
+				<button name="Unread" tool_tip="Notificaciones"/>
+			</chiclet_notification>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/es/panel_group_control_panel.xml b/indra/newview/skins/minimal/xui/es/panel_group_control_panel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e77156b0d415248d7c2dfe3a99ca668cb0945814
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/panel_group_control_panel.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+	<layout_stack name="vertical_stack">
+		<layout_panel name="end_call_btn_panel">
+			<button label="Colgar" name="end_call_btn"/>
+		</layout_panel>
+		<layout_panel name="voice_ctrls_btn_panel">
+			<button label="Abrir los controles de la voz" name="voice_ctrls_btn"/>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/es/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/es/panel_im_control_panel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7d4db6a630c22eb0fb771ef1e907ee25205b334e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/panel_im_control_panel.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+	<layout_stack name="button_stack">
+		<layout_panel name="view_profile_btn_panel">
+			<button label="Perfil" name="view_profile_btn"/>
+		</layout_panel>
+		<layout_panel name="add_friend_btn_panel">
+			<button label="Añadir como amigo" name="add_friend_btn"/>
+		</layout_panel>
+		<layout_panel name="teleport_btn_panel">
+			<button label="Teleportarme" name="teleport_btn" tool_tip="Ofrecer teleporte a esta persona"/>
+		</layout_panel>
+		<layout_panel name="share_btn_panel">
+			<button label="Compartir" name="share_btn"/>
+		</layout_panel>
+		<layout_panel name="pay_btn_panel">
+			<button label="Pagar" name="pay_btn"/>
+		</layout_panel>
+		<layout_panel name="call_btn_panel">
+			<button label="Llamar" name="call_btn"/>
+		</layout_panel>
+		<layout_panel name="end_call_btn_panel">
+			<button label="Colgar" name="end_call_btn"/>
+		</layout_panel>
+		<layout_panel name="voice_ctrls_btn_panel">
+			<button label="Controles de la voz" name="voice_ctrls_btn"/>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/es/panel_login.xml b/indra/newview/skins/minimal/xui/es/panel_login.xml
new file mode 100644
index 0000000000000000000000000000000000000000..689a71e277899738bba12b0adb353b9e1f420da1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/panel_login.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_login">
+	<panel.string name="create_account_url">
+		http://join.secondlife.com/index.php?lang=es-ES
+	</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php?lang=es
+	</panel.string>
+	<layout_stack name="login_widgets">
+		<layout_panel name="login">
+			<text name="username_text">
+				Nombre de usuario:
+			</text>
+			<combo_box name="username_combo" tool_tip="El nombre de usuario que elegiste al registrarte, como bobsmith12 o Steller Sunshine"/>
+			<text name="password_text">
+				Contraseña:
+			</text>
+			<check_box label="Recordar la contraseña" name="remember_check"/>
+			<button label="Iniciar sesión" name="connect_btn"/>
+			<text name="mode_selection_text">
+				Modo:
+			</text>
+			<combo_box name="mode_combo" tool_tip="Selecciona el modo. Elige Básico para una exploración rápida y fácil y para chatear. Elige Avanzado para tener acceso a más funciones.">
+				<combo_box.item label="Básico" name="Basic"/>
+				<combo_box.item label="Avanzado" name="Advanced"/>
+			</combo_box>
+		</layout_panel>
+		<layout_panel name="links">
+			<text name="create_new_account_text">
+				Registrarme
+			</text>
+			<text name="forgot_password_text">
+				¿Olvidaste el nombre de usuario o la contraseña?
+			</text>
+			<text name="login_help">
+				¿Necesitas ayuda para conectarte?
+			</text>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/es/panel_navigation_bar.xml b/indra/newview/skins/minimal/xui/es/panel_navigation_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e8e95c3bac3f98a18bbafc80ae913772759d1d24
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/panel_navigation_bar.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="navigation_bar">
+	<panel name="navigation_panel">
+		<pull_button name="back_btn" tool_tip="Volver a lo localización anterior"/>
+		<pull_button name="forward_btn" tool_tip="Ir una localización adelante"/>
+		<button name="home_btn" tool_tip="Teleportar a mi Base"/>
+		<location_input label="Localización" name="location_combo"/>
+		<search_combo_box label="Buscar" name="search_combo_box" tool_tip="Buscar">
+			<combo_editor label="Buscar en [SECOND_LIFE]" name="search_combo_editor"/>
+		</search_combo_box>
+	</panel>
+	<favorites_bar name="favorite" tool_tip="¡Accede rápidamente a tus lugares favoritos de Second Life arrastrando hitos hasta aquí!">
+		<label name="favorites_bar_label" tool_tip="¡Accede rápidamente a tus lugares favoritos de Second Life arrastrando hitos hasta aquí!">
+			Barra de Favoritos
+		</label>
+		<chevron_button name="&gt;&gt;" tool_tip="Ver más de Mis favoritos"/>
+	</favorites_bar>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/es/panel_people.xml b/indra/newview/skins/minimal/xui/es/panel_people.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7d3157ef451a7d86c2313c380b12307e5b8a7ca7
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/panel_people.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- Side tray panel -->
+<panel label="Gente" name="people_panel">
+	<string name="no_recent_people" value="No hay gente reciente. ¿Estás buscando gente con la que juntarte? Prueba con el botón Destinos que aparece a continuación."/>
+	<string name="no_filtered_recent_people" value="No hay gente reciente con ese nombre."/>
+	<string name="no_one_near" value="No hay nadie cerca. ¿Estás buscando gente con la que juntarte? Prueba con el botón Destinos que aparece a continuación."/>
+	<string name="no_one_filtered_near" value="No hay nadie cerca con ese nombre."/>
+	<string name="no_friends_online" value="No hay amigos conectados"/>
+	<string name="no_friends" value="No hay amigos"/>
+	<string name="no_friends_msg">
+		Haz clic con el botón derecho del ratón en un residente para agregarlo como amigo.
+¿Estás buscando gente con la que juntarte? Prueba con el botón Destinos que aparece a continuación.
+	</string>
+	<string name="no_filtered_friends_msg">
+		¿No encuentras lo que buscas? Prueba con el botón Destinos que aparece a continuación.
+	</string>
+	<string name="people_filter_label" value="Filtrar a la gente"/>
+	<string name="groups_filter_label" value="Filtrar a los grupos"/>
+	<string name="no_filtered_groups_msg" value="¿No encuentras lo que buscas? Prueba con [secondlife:///app/search/groups/[SEARCH_TERM] Buscar]."/>
+	<string name="no_groups_msg" value="¿Buscas grupos en que participar? Prueba la [secondlife:///app/search/groups Búsqueda]."/>
+	<string name="MiniMapToolTipMsg" value="[REGIÓN](Haz doble clic para abrir el mapa y pulsa la tecla Mayús y arrastra para obtener una vista panorámica)"/>
+	<string name="AltMiniMapToolTipMsg" value="[REGIÓN](Haz doble clic para teleportarte y pulsa la tecla Mayús y arrastra para obtener una vista panorámica)"/>
+	<filter_editor label="Filtrar" name="filter_input"/>
+	<tab_container name="tabs">
+		<panel label="CERCANA" name="nearby_panel">
+			<panel label="bottom_panel" name="bottom_panel"/>
+		</panel>
+		<panel label="MIS AMIGOS" name="friends_panel">
+			<accordion name="friends_accordion">
+				<accordion_tab name="tab_online" title="Conectado"/>
+				<accordion_tab name="tab_all" title="Todos"/>
+			</accordion>
+			<panel label="bottom_panel" name="bottom_panel">
+				<layout_stack name="bottom_panel">
+					<layout_panel name="trash_btn_panel">
+						<dnd_button name="del_btn" tool_tip="Quitar a la persona seleccionada de tu lista de amigos"/>
+					</layout_panel>
+				</layout_stack>
+			</panel>
+		</panel>
+		<panel label="RECIENTE" name="recent_panel">
+			<panel label="bottom_panel" name="bottom_panel">
+				<button name="add_friend_btn" tool_tip="Añadir al Residente seleccionado a la lista de tus amigos"/>
+			</panel>
+		</panel>
+	</tab_container>
+	<panel name="button_bar">
+		<layout_stack name="bottom_bar_ls">
+			<layout_panel name="view_profile_btn_lp">
+				<button label="Perfil" name="view_profile_btn" tool_tip="Mostrar imágenes, grupos y otra información del Residente"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="MI" name="im_btn" tool_tip="Abrir una sesión de mensajes instantáneos"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Teleporte" name="teleport_btn" tool_tip="Ofrecer teleporte"/>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls1">
+			<layout_panel name="group_info_btn_lp">
+				<button label="Perfil del grupo" name="group_info_btn" tool_tip="Ver la información del grupo"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Chat de grupo" name="chat_btn" tool_tip="Abrir el chat"/>
+			</layout_panel>
+			<layout_panel name="group_call_btn_lp">
+				<button label="Llamar al grupo" name="group_call_btn" tool_tip="Llama a este grupo"/>
+			</layout_panel>
+		</layout_stack>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/es/panel_side_tray_tab_caption.xml b/indra/newview/skins/minimal/xui/es/panel_side_tray_tab_caption.xml
new file mode 100644
index 0000000000000000000000000000000000000000..775e343dc9903443a6b387f9ef68ba806966655a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/panel_side_tray_tab_caption.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="sidetray_tab_panel">
+	<text name="sidetray_tab_title" value="Panel lateral"/>
+	<button name="undock" tool_tip="Soltar"/>
+	<button name="dock" tool_tip="Fijar"/>
+	<button name="show_help" tool_tip="Ver ayuda"/>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/es/panel_status_bar.xml b/indra/newview/skins/minimal/xui/es/panel_status_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ab76d3f994a4e0bdbb9e57769699d13d85c809f7
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/es/panel_status_bar.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="status">
+	<panel.string name="StatBarDaysOfWeek">
+		Domingo:Lunes:Martes:Miércoles:Jueves:Viernes:Sábado
+	</panel.string>
+	<panel.string name="StatBarMonthsOfYear">
+		Enero:Febrero:Marzo:Abril:Mayo:Junio:Julio:Agosto:Septiembre:Octubre:Noviembre:Diciembre
+	</panel.string>
+	<panel.string name="packet_loss_tooltip">
+		Pérdida de paquetes
+	</panel.string>
+	<panel.string name="bandwidth_tooltip">
+		Ancho de banda
+	</panel.string>
+	<panel.string name="time">
+		[hour12, datetime, slt]:[min, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt]
+	</panel.string>
+	<panel.string name="timeTooltip">
+		[weekday, datetime, slt], [day, datetime, slt] [month, datetime, slt] [year, datetime, slt]
+	</panel.string>
+	<panel.string name="buycurrencylabel">
+		[AMT] L$
+	</panel.string>
+	<panel name="balance_bg">
+		<text name="balance" tool_tip="Haz clic para actualizar tu saldo en L$" value="20 L$"/>
+		<button label="COMPRAR L$" name="buyL" tool_tip="Pulsa para comprar más L$"/>
+	</panel>
+	<text name="TimeText" tool_tip="Hora actual (Pacífico)">
+		24:00 AM PST
+	</text>
+	<button name="media_toggle_btn" tool_tip="Iniciar/Parar todos los media (música, vídeo, páginas web)"/>
+	<button name="volume_btn" tool_tip="Control general del volumen"/>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/fr/floater_camera.xml b/indra/newview/skins/minimal/xui/fr/floater_camera.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1d62a89ff2dbc026df6279a00a9a5c5f3743e912
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/floater_camera.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="camera_floater">
+	<floater.string name="rotate_tooltip">
+		Faire tourner la caméra autour du point central
+	</floater.string>
+	<floater.string name="zoom_tooltip">
+		Zoomer en direction du point central
+	</floater.string>
+	<floater.string name="move_tooltip">
+		Déplacer la caméra vers le haut et le bas, la gauche et la droite
+	</floater.string>
+	<floater.string name="camera_modes_title">
+		Modes
+	</floater.string>
+	<floater.string name="pan_mode_title">
+		Rotation - Zoom - Panoramique
+	</floater.string>
+	<floater.string name="presets_mode_title">
+		Préréglages
+	</floater.string>
+	<floater.string name="free_mode_title">
+		Voir l&apos;objet
+	</floater.string>
+	<panel name="controls">
+		<panel name="preset_views_list">
+			<panel_camera_item name="front_view">
+				<panel_camera_item.text name="front_view_text">
+					Vue frontale
+				</panel_camera_item.text>
+			</panel_camera_item>
+			<panel_camera_item name="group_view">
+				<panel_camera_item.text name="side_view_text">
+					Vue latérale
+				</panel_camera_item.text>
+			</panel_camera_item>
+			<panel_camera_item name="rear_view">
+				<panel_camera_item.text name="rear_view_text">
+					Vue arrière
+				</panel_camera_item.text>
+			</panel_camera_item>
+		</panel>
+		<panel name="camera_modes_list">
+			<panel_camera_item name="object_view">
+				<panel_camera_item.text name="object_view_text">
+					Vue de l&apos;objet
+				</panel_camera_item.text>
+			</panel_camera_item>
+			<panel_camera_item name="mouselook_view">
+				<panel_camera_item.text name="mouselook_view_text">
+					Vue subjective
+				</panel_camera_item.text>
+			</panel_camera_item>
+		</panel>
+		<panel name="zoom" tool_tip="Zoomer en direction du point central">
+			<joystick_rotate name="cam_rotate_stick" tool_tip="Faire tourner la caméra autour du point central"/>
+			<slider_bar name="zoom_slider" tool_tip="Zoomer en direction du point central"/>
+			<joystick_track name="cam_track_stick" tool_tip="Déplacer la caméra vers le haut et le bas, la gauche et la droite"/>
+		</panel>
+	</panel>
+	<panel name="buttons">
+		<button label="" name="presets_btn" tool_tip="Préréglages"/>
+		<button label="" name="pan_btn" tool_tip="Rotation - Zoom - Panoramique"/>
+		<button label="" name="avatarview_btn" tool_tip="Modes"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/fr/floater_help_browser.xml b/indra/newview/skins/minimal/xui/fr/floater_help_browser.xml
new file mode 100644
index 0000000000000000000000000000000000000000..09d763b809d2107697f1e2db32ede60ccd0f73ce
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/floater_help_browser.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_help_browser" title="AIDE RAPIDE">
+	<floater.string name="loading_text">
+		Chargement…
+	</floater.string>
+	<layout_stack name="stack1">
+		<layout_panel name="external_controls"/>
+	</layout_stack>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/fr/floater_media_browser.xml b/indra/newview/skins/minimal/xui/fr/floater_media_browser.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ba171c6363feb3d2c569fea2a9ef96268223c28b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/floater_media_browser.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="NAVIGATEUR DE MÉDIAS">
+	<floater.string name="home_page_url">
+		http://www.secondlife.com
+	</floater.string>
+	<floater.string name="support_page_url">
+		http://support.secondlife.com
+	</floater.string>
+	<layout_stack name="stack1">
+		<layout_panel name="nav_controls">
+			<button label="Préc." name="back"/>
+			<button label="Suiv." name="forward"/>
+			<button label="Recharger" name="reload"/>
+			<button label="OK" name="go"/>
+		</layout_panel>
+		<layout_panel name="time_controls">
+			<button label="retour" name="rewind"/>
+			<button label="stop" name="stop"/>
+			<button label="avance" name="seek"/>
+		</layout_panel>
+		<layout_panel name="parcel_owner_controls">
+			<button label="Envoyer la page actuelle à la parcelle" name="assign"/>
+		</layout_panel>
+		<layout_panel name="external_controls">
+			<button label="Ouvrir dans mon navigateur Web" name="open_browser"/>
+			<check_box label="Toujours ouvrir dans mon navigateur Web" name="open_always"/>
+			<button label="Fermer" name="close"/>
+		</layout_panel>
+	</layout_stack>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/fr/floater_nearby_chat.xml b/indra/newview/skins/minimal/xui/fr/floater_nearby_chat.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9b1b21c434b859c0e1de43a0c210605a4dd81fb5
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/floater_nearby_chat.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="nearby_chat" title="CHAT PRÈS DE MOI">
+	<check_box label="Traduction du chat (fournie par Google)" name="translate_chat_checkbox"/>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/fr/floater_web_content.xml b/indra/newview/skins/minimal/xui/fr/floater_web_content.xml
new file mode 100644
index 0000000000000000000000000000000000000000..71f44b6ec3686cbcfb440b45887179c092b081ef
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/floater_web_content.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_web_content" title="">
+	<layout_stack name="stack1">
+		<layout_panel name="nav_controls">
+			<button name="back" tool_tip="Précédente"/>
+			<button name="forward" tool_tip="Suivante"/>
+			<button name="stop" tool_tip="Arrêter"/>
+			<button name="reload" tool_tip="Recharger la page"/>
+			<combo_box name="address" tool_tip="Saisir une URL ici"/>
+			<icon name="media_secure_lock_flag" tool_tip="Navigation sécurisée"/>
+			<button name="popexternal" tool_tip="Ouvrir l&apos;URL actuelle dans votre navigateur de bureau"/>
+		</layout_panel>
+	</layout_stack>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/fr/inspect_avatar.xml b/indra/newview/skins/minimal/xui/fr/inspect_avatar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..553646f8e97afe51139fab7756b005236b88ee61
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/inspect_avatar.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="inspect_avatar">
+	<string name="Subtitle">
+		[AGE]
+	</string>
+	<string name="Details">
+		[SL_PROFILE]
+	</string>
+	<text name="user_subtitle" value="11 mois, 3 jours"/>
+	<text name="user_details">
+		This is my second life description and I really think it is great. But for some reason my description is super extra long because I like to talk a whole lot
+	</text>
+	<slider name="volume_slider" tool_tip="Volume de la voix" value="0.5"/>
+	<button label="Devenir amis" name="add_friend_btn"/>
+	<button label="IM" name="im_btn"/>
+	<button label="Profil" name="view_profile_btn"/>
+	<panel name="moderator_panel">
+		<button label="Désactiver le chat vocal" name="disable_voice"/>
+		<button label="Activer le chat vocal" name="enable_voice"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/fr/inspect_object.xml b/indra/newview/skins/minimal/xui/fr/inspect_object.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b66af7a2bf2083e60a5ae65bee5ab0396280ba22
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/inspect_object.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="inspect_object">
+	<string name="Creator">
+		Par [CREATOR]
+	</string>
+	<string name="CreatorAndOwner">
+		De [CREATOR]
+Propriétaire [OWNER]
+	</string>
+	<string name="Price">
+		[AMOUNT] L$
+	</string>
+	<string name="PriceFree">
+		Gratuit !
+	</string>
+	<string name="Touch">
+		Toucher
+	</string>
+	<string name="Sit">
+		M&apos;asseoir
+	</string>
+	<text name="object_name" value="Test Object Name That Is actually two lines and Really Long"/>
+	<text name="object_creator">
+		par secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
+owner secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
+	</text>
+	<text name="price_text">
+		30 000 L$
+	</text>
+	<text name="object_description">
+		This is a really long description for an object being as how it is at least 80 characters in length and so but maybe more like 120 at this point. Who knows, really?
+	</text>
+	<text name="object_media_url">
+		http://www.superdupertest.com
+	</text>
+	<button label="Acheter" name="buy_btn"/>
+	<button label="Payer" name="pay_btn"/>
+	<button label="Prendre une copie" name="take_free_copy_btn"/>
+	<button label="Toucher" name="touch_btn"/>
+	<button label="M&apos;asseoir" name="sit_btn"/>
+	<button label="Ouvert" name="open_btn"/>
+	<icon name="secure_browsing" tool_tip="Navigation sécurisée"/>
+	<button label="Plus" name="more_info_btn"/>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_add_wearable_gear.xml b/indra/newview/skins/minimal/xui/fr/menu_add_wearable_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7e7993175e7d827541f17f989e417b0c10f6f253
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_add_wearable_gear.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Add Wearable Gear Menu">
+	<menu_item_check label="Trier en commençant par le plus récent" name="sort_by_most_recent"/>
+	<menu_item_check label="Trier par nom" name="sort_by_name"/>
+	<menu_item_check label="Trier par type" name="sort_by_type"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_attachment_other.xml b/indra/newview/skins/minimal/xui/fr/menu_attachment_other.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f48513eb2b4005ae90d5d165c8f9a3f96d1267dd
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_attachment_other.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- *NOTE: See also menu_avatar_other.xml -->
+<context_menu name="Avatar Pie">
+	<menu_item_call label="Voir le profil" name="Profile..."/>
+	<menu_item_call label="Devenir amis" name="Add Friend"/>
+	<menu_item_call label="IM" name="Send IM..."/>
+	<menu_item_call label="Appeler" name="Call"/>
+	<menu_item_call label="Inviter dans le groupe" name="Invite..."/>
+	<menu_item_call label="Ignorer" name="Avatar Mute"/>
+	<menu_item_call label="Signaler" name="abuse"/>
+	<menu_item_call label="Figer" name="Freeze..."/>
+	<menu_item_call label="Expulser" name="Eject..."/>
+	<menu_item_call label="Déboguer les textures" name="Debug..."/>
+	<menu_item_call label="Zoomer en avant" name="Zoom In"/>
+	<menu_item_call label="Payer" name="Pay..."/>
+	<menu_item_call label="Profil de l&apos;objet" name="Object Inspect"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_attachment_self.xml b/indra/newview/skins/minimal/xui/fr/menu_attachment_self.xml
new file mode 100644
index 0000000000000000000000000000000000000000..78198fb5a8f6e2a8c2cec399b0aba8abcc50aebc
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_attachment_self.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Attachment Pie">
+	<menu_item_call label="Toucher" name="Attachment Object Touch"/>
+	<menu_item_call label="Modifier" name="Edit..."/>
+	<menu_item_call label="Détacher" name="Detach"/>
+	<menu_item_call label="M&apos;asseoir" name="Sit Down Here"/>
+	<menu_item_call label="Me lever" name="Stand Up"/>
+	<menu_item_call label="Changer de tenue" name="Change Outfit"/>
+	<menu_item_call label="Modifier ma tenue" name="Edit Outfit"/>
+	<menu_item_call label="Modifier ma silhouette" name="Edit My Shape"/>
+	<menu_item_call label="Mes amis" name="Friends..."/>
+	<menu_item_call label="Mes groupes" name="Groups..."/>
+	<menu_item_call label="Mon profil" name="Profile..."/>
+	<menu_item_call label="Déboguer les textures" name="Debug..."/>
+	<menu_item_call label="Lâcher" name="Drop"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_avatar_icon.xml b/indra/newview/skins/minimal/xui/fr/menu_avatar_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3bac25c79b82ef8770a29c044369f800f457beee
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_avatar_icon.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Avatar Icon Menu">
+	<menu_item_call label="Voir le profil" name="Show Profile"/>
+	<menu_item_call label="Envoyer IM..." name="Send IM"/>
+	<menu_item_call label="Devenir amis..." name="Add Friend"/>
+	<menu_item_call label="Supprimer cet ami..." name="Remove Friend"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_avatar_other.xml b/indra/newview/skins/minimal/xui/fr/menu_avatar_other.xml
new file mode 100644
index 0000000000000000000000000000000000000000..08d1a2036157606eaf25c9516188c6656ff51d2b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_avatar_other.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- *NOTE: See also menu_attachment_other.xml -->
+<context_menu name="Avatar Pie">
+	<menu_item_call label="Voir le profil" name="Profile..."/>
+	<menu_item_call label="Devenir amis" name="Add Friend"/>
+	<menu_item_call label="IM" name="Send IM..."/>
+	<menu_item_call label="Appeler" name="Call"/>
+	<menu_item_call label="Inviter dans le groupe" name="Invite..."/>
+	<menu_item_call label="Ignorer" name="Avatar Mute"/>
+	<menu_item_call label="Signaler" name="abuse"/>
+	<menu_item_call label="Figer" name="Freeze..."/>
+	<menu_item_call label="Expulser" name="Eject..."/>
+	<menu_item_call label="Déboguer les textures" name="Debug..."/>
+	<menu_item_call label="Zoomer en avant" name="Zoom In"/>
+	<menu_item_call label="Payer" name="Pay..."/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_avatar_self.xml b/indra/newview/skins/minimal/xui/fr/menu_avatar_self.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c7ee2e9f883428c773c5553e1b7bcb53e165297d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_avatar_self.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Self Pie">
+	<menu_item_call label="M&apos;asseoir" name="Sit Down Here"/>
+	<menu_item_call label="Me lever" name="Stand Up"/>
+	<context_menu label="Enlever" name="Take Off &gt;">
+		<context_menu label="Habits" name="Clothes &gt;">
+			<menu_item_call label="Chemise" name="Shirt"/>
+			<menu_item_call label="Pantalon" name="Pants"/>
+			<menu_item_call label="Jupe" name="Skirt"/>
+			<menu_item_call label="Chaussures" name="Shoes"/>
+			<menu_item_call label="Chaussettes" name="Socks"/>
+			<menu_item_call label="Veste" name="Jacket"/>
+			<menu_item_call label="Gants" name="Gloves"/>
+			<menu_item_call label="Débardeur" name="Self Undershirt"/>
+			<menu_item_call label="Caleçon" name="Self Underpants"/>
+			<menu_item_call label="Tatouage" name="Self Tattoo"/>
+			<menu_item_call label="Alpha" name="Self Alpha"/>
+			<menu_item_call label="Tous les habits" name="All Clothes"/>
+		</context_menu>
+		<context_menu label="HUD" name="Object Detach HUD"/>
+		<context_menu label="Détacher" name="Object Detach"/>
+		<menu_item_call label="Tout détacher" name="Detach All"/>
+	</context_menu>
+	<menu_item_call label="Changer de tenue" name="Chenge Outfit"/>
+	<menu_item_call label="Modifier ma tenue" name="Edit Outfit"/>
+	<menu_item_call label="Modifier ma silhouette" name="Edit My Shape"/>
+	<menu_item_call label="Mes amis" name="Friends..."/>
+	<menu_item_call label="Mes groupes" name="Groups..."/>
+	<menu_item_call label="Mon profil" name="Profile..."/>
+	<menu_item_call label="Déboguer les textures" name="Debug..."/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_bottomtray.xml b/indra/newview/skins/minimal/xui/fr/menu_bottomtray.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bfdc89c5bbcf85b5ab9d0dffefd2fec7dcacfbca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_bottomtray.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="hide_camera_move_controls_menu">
+	<menu_item_check label="Bouton Geste" name="ShowGestureButton"/>
+	<menu_item_check label="Bouton Bouger" name="ShowMoveButton"/>
+	<menu_item_check label="Bouton Affichage" name="ShowCameraButton"/>
+	<menu_item_check label="Bouton Photo" name="ShowSnapshotButton"/>
+	<menu_item_check label="Bouton Panneau latéral" name="ShowSidebarButton"/>
+	<menu_item_check label="Bouton Construire" name="ShowBuildButton"/>
+	<menu_item_check label="Bouton Rechercher" name="ShowSearchButton"/>
+	<menu_item_check label="Bouton Carte" name="ShowWorldMapButton"/>
+	<menu_item_check label="Bouton Mini-carte" name="ShowMiniMapButton"/>
+	<menu_item_call label="Couper" name="NearbyChatBar_Cut"/>
+	<menu_item_call label="Copier" name="NearbyChatBar_Copy"/>
+	<menu_item_call label="Coller" name="NearbyChatBar_Paste"/>
+	<menu_item_call label="Supprimer" name="NearbyChatBar_Delete"/>
+	<menu_item_call label="Tout sélectionner" name="NearbyChatBar_Select_All"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_cof_attachment.xml b/indra/newview/skins/minimal/xui/fr/menu_cof_attachment.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a4ead48b6b3b37c6ccb7188a13a20ab284efc284
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_cof_attachment.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Attachment">
+	<menu_item_call label="Détacher" name="detach"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_cof_body_part.xml b/indra/newview/skins/minimal/xui/fr/menu_cof_body_part.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4b6907fcc61391ca41ab4751c9107e4b705c0d8f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_cof_body_part.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Body">
+	<menu_item_call label="Remplacer" name="replace"/>
+	<menu_item_call label="Modifier" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_cof_clothing.xml b/indra/newview/skins/minimal/xui/fr/menu_cof_clothing.xml
new file mode 100644
index 0000000000000000000000000000000000000000..03cc569704b335f61dbe8acc207c1e486b593f77
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_cof_clothing.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Clothing">
+	<menu_item_call label="Enlever" name="take_off"/>
+	<menu_item_call label="Modifier" name="edit"/>
+	<menu_item_call label="Remplacer" name="replace"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_cof_gear.xml b/indra/newview/skins/minimal/xui/fr/menu_cof_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8276d570259774f7b543165aedf107842c5cd2a1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_cof_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear COF">
+	<menu label="Nouveaux habits" name="COF.Gear.New_Clothes"/>
+	<menu label="Nouvelles parties du corps" name="COF.Geear.New_Body_Parts"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_edit.xml b/indra/newview/skins/minimal/xui/fr/menu_edit.xml
new file mode 100644
index 0000000000000000000000000000000000000000..56669f31e187a18fb90c95c98fa8e9182d73e3c7
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_edit.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu label="Modifier" name="Edit">
+	<menu_item_call label="Annuler" name="Undo"/>
+	<menu_item_call label="Refaire" name="Redo"/>
+	<menu_item_call label="Couper" name="Cut"/>
+	<menu_item_call label="Copier" name="Copy"/>
+	<menu_item_call label="Coller" name="Paste"/>
+	<menu_item_call label="Supprimer" name="Delete"/>
+	<menu_item_call label="Dupliquer" name="Duplicate"/>
+	<menu_item_call label="Tout sélectionner" name="Select All"/>
+	<menu_item_call label="Désélectionner" name="Deselect"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_favorites.xml b/indra/newview/skins/minimal/xui/fr/menu_favorites.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5f1545fde7ff350dd5ed696c25b6dbb0d0bfee2f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_favorites.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Téléporter" name="Teleport To Landmark"/>
+	<menu_item_call label="Voir/Modifier le repère" name="Landmark Open"/>
+	<menu_item_call label="Copier la SLurl" name="Copy slurl"/>
+	<menu_item_call label="Voir sur la carte" name="Show On Map"/>
+	<menu_item_call label="Copier" name="Landmark Copy"/>
+	<menu_item_call label="Coller" name="Landmark Paste"/>
+	<menu_item_call label="Supprimer" name="Delete"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_gesture_gear.xml b/indra/newview/skins/minimal/xui/fr/menu_gesture_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..062dd0f00536dd5717ac5b506ad87c999f07af42
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_gesture_gear.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_gesture_gear">
+	<menu_item_call label="Ajouter/Supprimer des favoris" name="activate"/>
+	<menu_item_call label="Copier" name="copy_gesture"/>
+	<menu_item_call label="Coller" name="paste"/>
+	<menu_item_call label="Copier l&apos;UUID" name="copy_uuid"/>
+	<menu_item_call label="Enregistrer dans la tenue actuelle" name="save_to_outfit"/>
+	<menu_item_call label="Modifier" name="edit_gesture"/>
+	<menu_item_call label="Inspecter" name="inspect"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_group_plus.xml b/indra/newview/skins/minimal/xui/fr/menu_group_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0db5afedc795c54c793826fbd8752defc25c5785
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_group_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_call label="Rejoindre des groupes..." name="item_join"/>
+	<menu_item_call label="Nouveau groupe..." name="item_new"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_hide_navbar.xml b/indra/newview/skins/minimal/xui/fr/menu_hide_navbar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..20af901ddc6554814c4953979650a6873e109b48
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_hide_navbar.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="hide_navbar_menu">
+	<menu_item_check label="Afficher la barre de navigation" name="ShowNavbarNavigationPanel"/>
+	<menu_item_check label="Afficher la barre des favoris" name="ShowNavbarFavoritesPanel"/>
+	<menu_item_check label="Afficher la mini-barre d&apos;emplacement" name="ShowMiniLocationPanel"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_im_well_button.xml b/indra/newview/skins/minimal/xui/fr/menu_im_well_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8ef1529e6b44106431b4d5f4251c3410180993fe
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_im_well_button.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="IM Well Button Context Menu">
+	<menu_item_call label="Tout fermer" name="Close All"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_imchiclet_adhoc.xml b/indra/newview/skins/minimal/xui/fr/menu_imchiclet_adhoc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4d9a10305811dc578cc839c89f7bd87836bbac9e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_imchiclet_adhoc.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="IMChiclet AdHoc Menu">
+	<menu_item_call label="Mettre fin à la session" name="End Session"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_imchiclet_group.xml b/indra/newview/skins/minimal/xui/fr/menu_imchiclet_group.xml
new file mode 100644
index 0000000000000000000000000000000000000000..59f97d8b484f8d5d378cdeb19d5cb8b2f1302d59
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_imchiclet_group.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="IMChiclet Group Menu">
+	<menu_item_call label="Profil du groupe" name="Show Profile"/>
+	<menu_item_call label="Afficher la session" name="Chat"/>
+	<menu_item_call label="Mettre fin à la session" name="End Session"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_imchiclet_p2p.xml b/indra/newview/skins/minimal/xui/fr/menu_imchiclet_p2p.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ecc8cee4139a35bf47d5f4a7759b7fed9592e9c6
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_imchiclet_p2p.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="IMChiclet P2P Menu">
+	<menu_item_call label="Voir le profil" name="Show Profile"/>
+	<menu_item_call label="Devenir amis" name="Add Friend"/>
+	<menu_item_call label="Afficher la session" name="Send IM"/>
+	<menu_item_call label="Mettre fin à la session" name="End Session"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_inspect_avatar_gear.xml b/indra/newview/skins/minimal/xui/fr/menu_inspect_avatar_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..231a175ee5a303f67fd89c63725121ff2f097e6d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_inspect_avatar_gear.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<toggleable_menu name="Gear Menu">
+	<menu_item_call label="Voir le profil" name="view_profile"/>
+	<menu_item_call label="Devenir amis" name="add_friend"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="Téléporter" name="teleport"/>
+	<menu_item_call label="Ignorer" name="block"/>
+	<menu_item_call label="Ne plus ignorer" name="unblock"/>
+	<menu_item_call label="Signaler" name="report"/>
+	<menu_item_call label="Figer" name="freeze"/>
+	<menu_item_call label="Expulser" name="eject"/>
+	<menu_item_call label="Éjecter" name="kick"/>
+	<menu_item_call label="Représentant de l&apos;Assistance client" name="csr"/>
+	<menu_item_call label="Déboguer les textures" name="debug"/>
+	<menu_item_call label="Situer sur la carte" name="find_on_map"/>
+	<menu_item_call label="Zoomer en avant" name="zoom_in"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_inspect_object_gear.xml b/indra/newview/skins/minimal/xui/fr/menu_inspect_object_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..074bb54cdc512824bf538283af811694d7e2f007
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_inspect_object_gear.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu name="Gear Menu">
+	<menu_item_call label="Toucher" name="touch"/>
+	<menu_item_call label="M&apos;asseoir" name="sit"/>
+	<menu_item_call label="Payer" name="pay"/>
+	<menu_item_call label="Acheter" name="buy"/>
+	<menu_item_call label="Prendre" name="take"/>
+	<menu_item_call label="Prendre une copie" name="take_copy"/>
+	<menu_item_call label="Ouvrir" name="open"/>
+	<menu_item_call label="Modifier" name="edit"/>
+	<menu_item_call label="Porter" name="wear"/>
+	<menu_item_call label="Ajouter" name="add"/>
+	<menu_item_call label="Signaler" name="report"/>
+	<menu_item_call label="Ignorer" name="block"/>
+	<menu_item_call label="Zoomer en avant" name="zoom_in"/>
+	<menu_item_call label="Supprimer" name="remove"/>
+	<menu_item_call label="En savoir plus" name="more_info"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_inspect_self_gear.xml b/indra/newview/skins/minimal/xui/fr/menu_inspect_self_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fd48aa4f7d7bb76329cd11c989bff4ceab786e62
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_inspect_self_gear.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Self Pie">
+	<menu_item_call label="M&apos;asseoir" name="Sit Down Here"/>
+	<menu_item_call label="Me lever" name="Stand Up"/>
+	<menu_item_call label="Mes amis" name="Friends..."/>
+	<menu_item_call label="Mon profil" name="Profile..."/>
+	<menu_item_call label="Déboguer les textures" name="Debug..."/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_inv_offer_chiclet.xml b/indra/newview/skins/minimal/xui/fr/menu_inv_offer_chiclet.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a9b2883cca87235c2b8221dca043b545bd0b241d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_inv_offer_chiclet.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="InvOfferChiclet Menu">
+	<menu_item_call label="Fermer" name="Close"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_inventory.xml b/indra/newview/skins/minimal/xui/fr/menu_inventory.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a2279cf0ac4d91bed37ec79746a998c2042a46ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_inventory.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Partager" name="Share"/>
+	<menu_item_call label="Acheter" name="Task Buy"/>
+	<menu_item_call label="Ouvrir" name="Task Open"/>
+	<menu_item_call label="Jouer" name="Task Play"/>
+	<menu_item_call label="Propriétés" name="Task Properties"/>
+	<menu_item_call label="Renommer" name="Task Rename"/>
+	<menu_item_call label="Supprimer" name="Task Remove"/>
+	<menu_item_call label="Vider la corbeille" name="Empty Trash"/>
+	<menu_item_call label="Vider les objets trouvés" name="Empty Lost And Found"/>
+	<menu_item_call label="Nouveau dossier" name="New Folder"/>
+	<menu_item_call label="Nouveau script" name="New Script"/>
+	<menu_item_call label="Nouvelle note" name="New Note"/>
+	<menu_item_call label="Nouveau geste" name="New Gesture"/>
+	<menu label="Nouveaux habits" name="New Clothes">
+		<menu_item_call label="Nouvelle chemise" name="New Shirt"/>
+		<menu_item_call label="Nouveau pantalon" name="New Pants"/>
+		<menu_item_call label="Nouvelles chaussures" name="New Shoes"/>
+		<menu_item_call label="Nouvelles chaussettes" name="New Socks"/>
+		<menu_item_call label="Nouvelle veste" name="New Jacket"/>
+		<menu_item_call label="Nouvelle jupe" name="New Skirt"/>
+		<menu_item_call label="Nouveaux gants" name="New Gloves"/>
+		<menu_item_call label="Nouveau débardeur" name="New Undershirt"/>
+		<menu_item_call label="Nouveau caleçon" name="New Underpants"/>
+		<menu_item_call label="Nouveau masque alpha" name="New Alpha Mask"/>
+		<menu_item_call label="Nouveau tatouage" name="New Tattoo"/>
+	</menu>
+	<menu label="Nouvelles parties du corps" name="New Body Parts">
+		<menu_item_call label="Nouvelle silhouette" name="New Shape"/>
+		<menu_item_call label="Nouvelle peau" name="New Skin"/>
+		<menu_item_call label="Nouveaux cheveux" name="New Hair"/>
+		<menu_item_call label="Nouveaux yeux" name="New Eyes"/>
+	</menu>
+	<menu label="Changer de type" name="Change Type">
+		<menu_item_call label="Défaut" name="Default"/>
+		<menu_item_call label="Gants" name="Gloves"/>
+		<menu_item_call label="Veste" name="Jacket"/>
+		<menu_item_call label="Pantalon" name="Pants"/>
+		<menu_item_call label="Silhouette" name="Shape"/>
+		<menu_item_call label="Chaussures" name="Shoes"/>
+		<menu_item_call label="Chemise" name="Shirt"/>
+		<menu_item_call label="Jupe" name="Skirt"/>
+		<menu_item_call label="Caleçon" name="Underpants"/>
+		<menu_item_call label="Débardeur" name="Undershirt"/>
+	</menu>
+	<menu_item_call label="Téléporter" name="Landmark Open"/>
+	<menu_item_call label="Ouvrir" name="Animation Open"/>
+	<menu_item_call label="Ouvrir" name="Sound Open"/>
+	<menu_item_call label="Remplacer la tenue actuelle" name="Replace Outfit"/>
+	<menu_item_call label="Ajouter à la tenue actuelle" name="Add To Outfit"/>
+	<menu_item_call label="Enlever de la tenue actuelle" name="Remove From Outfit"/>
+	<menu_item_call label="Trouver l&apos;original" name="Find Original"/>
+	<menu_item_call label="Purger l&apos;objet" name="Purge Item"/>
+	<menu_item_call label="Restaurer l&apos;objet" name="Restore Item"/>
+	<menu_item_call label="Ouvrir" name="Open"/>
+	<menu_item_call label="Ouvrir l&apos;original" name="Open Original"/>
+	<menu_item_call label="Propriétés" name="Properties"/>
+	<menu_item_call label="Renommer" name="Rename"/>
+	<menu_item_call label="Copier l&apos;UUID (identifiant universel unique)" name="Copy Asset UUID"/>
+	<menu_item_call label="Copier" name="Copy"/>
+	<menu_item_call label="Coller" name="Paste"/>
+	<menu_item_call label="Coller comme lien" name="Paste As Link"/>
+	<menu_item_call label="Supprimer" name="Remove Link"/>
+	<menu_item_call label="Supprimer" name="Delete"/>
+	<menu_item_call label="Supprimer le dossier système" name="Delete System Folder"/>
+	<menu_item_call label="Démarrer le chat conférence" name="Conference Chat Folder"/>
+	<menu_item_call label="Jouer" name="Sound Play"/>
+	<menu_item_call label="À propos du repère" name="About Landmark"/>
+	<menu_item_call label="Jouer dans Second Life" name="Animation Play"/>
+	<menu_item_call label="Jouer localement" name="Animation Audition"/>
+	<menu_item_call label="Envoyer un message instantané" name="Send Instant Message"/>
+	<menu_item_call label="Offrir de téléporter..." name="Offer Teleport..."/>
+	<menu_item_call label="Démarrer le chat conférence" name="Conference Chat"/>
+	<menu_item_call label="Activer" name="Activate"/>
+	<menu_item_call label="Désactiver" name="Deactivate"/>
+	<menu_item_call label="Enregistrer sous" name="Save As"/>
+	<menu_item_call label="Détacher de vous" name="Detach From Yourself"/>
+	<menu_item_call label="Porter" name="Wearable And Object Wear"/>
+	<menu label="Attacher à" name="Attach To"/>
+	<menu label="Attacher au HUD " name="Attach To HUD"/>
+	<menu_item_call label="Modifier" name="Wearable Edit"/>
+	<menu_item_call label="Ajouter" name="Wearable Add"/>
+	<menu_item_call label="Enlever" name="Take Off"/>
+	<menu_item_call label="--aucune option--" name="--no options--"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_inventory_add.xml b/indra/newview/skins/minimal/xui/fr/menu_inventory_add.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fe096b4a7e1d3ab0287787a7e70a60be241e443b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_inventory_add.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_inventory_add">
+	<menu label="Importer" name="upload">
+		<menu_item_call label="Image ([COST] L$)..." name="Upload Image"/>
+		<menu_item_call label="Son ([COST] L$)..." name="Upload Sound"/>
+		<menu_item_call label="Animation ([COST] L$)..." name="Upload Animation"/>
+		<menu_item_call label="Lot ([COST] L$ par fichier)..." name="Bulk Upload"/>
+		<menu_item_call label="Définir les droits de chargement par défaut" name="perm prefs"/>
+	</menu>
+	<menu_item_call label="Nouveau dossier" name="New Folder"/>
+	<menu_item_call label="Nouveau script" name="New Script"/>
+	<menu_item_call label="Nouvelle note" name="New Note"/>
+	<menu_item_call label="Nouveau geste" name="New Gesture"/>
+	<menu label="Nouveaux habits" name="New Clothes">
+		<menu_item_call label="Nouvelle chemise" name="New Shirt"/>
+		<menu_item_call label="Nouveau pantalon" name="New Pants"/>
+		<menu_item_call label="Nouvelles chaussures" name="New Shoes"/>
+		<menu_item_call label="Nouvelles chaussettes" name="New Socks"/>
+		<menu_item_call label="Nouvelle veste" name="New Jacket"/>
+		<menu_item_call label="Nouvelle jupe" name="New Skirt"/>
+		<menu_item_call label="Nouveaux gants" name="New Gloves"/>
+		<menu_item_call label="Nouveau débardeur" name="New Undershirt"/>
+		<menu_item_call label="Nouveau caleçon" name="New Underpants"/>
+		<menu_item_call label="Nouvel alpha" name="New Alpha"/>
+		<menu_item_call label="Nouveau tatouage" name="New Tattoo"/>
+	</menu>
+	<menu label="Nouvelles parties du corps" name="New Body Parts">
+		<menu_item_call label="Nouvelle silhouette" name="New Shape"/>
+		<menu_item_call label="Nouvelle peau" name="New Skin"/>
+		<menu_item_call label="Nouveaux cheveux" name="New Hair"/>
+		<menu_item_call label="Nouveaux yeux" name="New Eyes"/>
+	</menu>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_inventory_gear_default.xml b/indra/newview/skins/minimal/xui/fr/menu_inventory_gear_default.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f28918ae1421eebbac64771c05266973a8ed74f3
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_inventory_gear_default.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_gear_default">
+	<menu_item_call label="Nouvelle fenêtre d&apos;inventaire" name="new_window"/>
+	<menu_item_check label="Trier par nom" name="sort_by_name"/>
+	<menu_item_check label="Trier en commençant par le plus récent" name="sort_by_recent"/>
+	<menu_item_check label="Dossiers système en premier" name="sort_system_folders_to_top"/>
+	<menu_item_call label="Afficher les filtres" name="show_filters"/>
+	<menu_item_call label="Réinitialiser les filtres" name="reset_filters"/>
+	<menu_item_call label="Fermer tous les dossiers" name="close_folders"/>
+	<menu_item_call label="Vider les objets trouvés" name="empty_lostnfound"/>
+	<menu_item_call label="Enregistrer la texture sous" name="Save Texture As"/>
+	<menu_item_call label="Partager" name="Share"/>
+	<menu_item_call label="Trouver l&apos;original" name="Find Original"/>
+	<menu_item_call label="Trouver tous les liens" name="Find All Links"/>
+	<menu_item_call label="Vider la corbeille" name="empty_trash"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_land.xml b/indra/newview/skins/minimal/xui/fr/menu_land.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b84daee3ae90862a9994a5b34b6420fc6b680a4f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_land.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Land Pie">
+	<menu_item_call label="À propos du terrain" name="Place Information..."/>
+	<menu_item_call label="M&apos;asseoir ici" name="Sit Here"/>
+	<menu_item_call label="Acheter ce terrain" name="Land Buy"/>
+	<menu_item_call label="Acheter un pass" name="Land Buy Pass"/>
+	<menu_item_call label="Construire" name="Create"/>
+	<menu_item_call label="Modifier le terrain" name="Edit Terrain"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_landmark.xml b/indra/newview/skins/minimal/xui/fr/menu_landmark.xml
new file mode 100644
index 0000000000000000000000000000000000000000..73eaa4af7e367f7d8624ed40dc278ee2eb4584ab
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_landmark.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="landmark_overflow_menu">
+	<menu_item_call label="Copier la SLurl" name="copy"/>
+	<menu_item_call label="Supprimer" name="delete"/>
+	<menu_item_call label="Créer un favori" name="pick"/>
+	<menu_item_call label="Ajouter à la barre des favoris" name="add_to_favbar"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_login.xml b/indra/newview/skins/minimal/xui/fr/menu_login.xml
new file mode 100644
index 0000000000000000000000000000000000000000..400c77e51a5746e102d3cd07295a9bfae67e1be4
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_login.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu_bar name="Login Menu">
+	<menu label="Moi" name="File">
+		<menu_item_call label="Préférences" name="Preferences..."/>
+		<menu_item_call label="Quitter [APP_NAME]" name="Quit"/>
+	</menu>
+	<menu label="Aide" name="Help">
+		<menu_item_call label="Aide de [SECOND_LIFE]" name="Second Life Help"/>
+		<menu_item_call label="À propos de [APP_NAME]" name="About Second Life"/>
+	</menu>
+	<menu_item_check label="Afficher le menu de débogage" name="Show Debug Menu"/>
+	<menu label="Débogage" name="Debug">
+		<menu_item_call label="Afficher les paramètres de débogage" name="Debug Settings"/>
+		<menu_item_call label="Paramètres de couleurs/interface" name="UI/Color Settings"/>
+		<menu_item_call label="Outil d&apos;aperçu XUI" name="UI Preview Tool"/>
+		<menu label="Tests de l&apos;interface" name="UI Tests"/>
+		<menu_item_call label="Définir la taille de la fenêtre..." name="Set Window Size..."/>
+		<menu_item_call label="Afficher les conditions d&apos;utilisation" name="TOS"/>
+		<menu_item_call label="Afficher le message critique" name="Critical"/>
+		<menu_item_call label="Test du navigateur de médias" name="Web Browser Test"/>
+		<menu_item_call label="Test de la fenêtre flottante du contenu Web" name="Web Content Floater Test"/>
+		<menu_item_check label="Afficher le sélecteur de grille" name="Show Grid Picker"/>
+		<menu_item_call label="Afficher la console des notifications" name="Show Notifications Console"/>
+	</menu>
+</menu_bar>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_mini_map.xml b/indra/newview/skins/minimal/xui/fr/menu_mini_map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b9d0a70383efa6577d6ff7a53b62561d804f9a59
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_mini_map.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Zoom rapproché" name="Zoom Close"/>
+	<menu_item_call label="Zoom moyen" name="Zoom Medium"/>
+	<menu_item_call label="Zoom éloigné" name="Zoom Far"/>
+	<menu_item_call label="Zoom par défaut" name="Zoom Default"/>
+	<menu_item_check label="Faire pivoter la carte" name="Rotate Map"/>
+	<menu_item_check label="Centrage auto" name="Auto Center"/>
+	<menu_item_call label="Arrêter de suivre" name="Stop Tracking"/>
+	<menu_item_call label="Carte du monde" name="World Map"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_navbar.xml b/indra/newview/skins/minimal/xui/fr/menu_navbar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..08d810b653cf7f8b0f93cc148f9409b44f3fdfd9
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_navbar.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Navbar Menu">
+	<menu_item_check label="Voir les coordonnées" name="Show Coordinates"/>
+	<menu_item_check label="Afficher les propriétés de la parcelle" name="Show Parcel Properties"/>
+	<menu_item_call label="Repère" name="Landmark"/>
+	<menu_item_call label="Couper" name="Cut"/>
+	<menu_item_call label="Copier" name="Copy"/>
+	<menu_item_call label="Coller" name="Paste"/>
+	<menu_item_call label="Supprimer" name="Delete"/>
+	<menu_item_call label="Tout sélectionner" name="Select All"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_nearby_chat.xml b/indra/newview/skins/minimal/xui/fr/menu_nearby_chat.xml
new file mode 100644
index 0000000000000000000000000000000000000000..99e22aeff744d2d199e00b831fbc0d49d2b85650
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_nearby_chat.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="NearBy Chat Menu">
+	<menu_item_call label="Afficher les personnes près de vous..." name="nearby_people"/>
+	<menu_item_check label="Afficher le texte ignoré" name="muted_text"/>
+	<menu_item_check label="Afficher les icônes des Buddy" name="show_buddy_icons"/>
+	<menu_item_check label="Afficher les noms" name="show_names"/>
+	<menu_item_check label="Afficher les icônes et les noms" name="show_icons_and_names"/>
+	<menu_item_call label="Taille de la police" name="font_size"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_notification_well_button.xml b/indra/newview/skins/minimal/xui/fr/menu_notification_well_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..323bfdbf165831da9cb17f451ec5c61eac895634
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_notification_well_button.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Notification Well Button Context Menu">
+	<menu_item_call label="Tout fermer" name="Close All"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_object.xml b/indra/newview/skins/minimal/xui/fr/menu_object.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a50a9df4b10dd5b88847aaa2fbac7204b603e53c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_object.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Object Pie">
+	<menu_item_call label="Toucher" name="Object Touch">
+		<menu_item_call.on_enable name="EnableTouch" parameter="Toucher"/>
+	</menu_item_call>
+	<menu_item_call label="Modifier" name="Edit..."/>
+	<menu_item_call label="Construire" name="Build"/>
+	<menu_item_call label="Ouvrir" name="Open"/>
+	<menu_item_call label="M&apos;asseoir ici" name="Object Sit"/>
+	<menu_item_call label="Me lever" name="Object Stand Up"/>
+	<menu_item_call label="Profil de l&apos;objet" name="Object Inspect"/>
+	<menu_item_call label="Zoomer en avant" name="Zoom In"/>
+	<context_menu label="Porter" name="Put On">
+		<menu_item_call label="Porter" name="Wear"/>
+		<menu_item_call label="Ajouter" name="Add"/>
+		<context_menu label="Attacher" name="Object Attach"/>
+		<context_menu label="Attacher HUD" name="Object Attach HUD"/>
+	</context_menu>
+	<context_menu label="Supprimer" name="Remove">
+		<menu_item_call label="Signaler une infraction" name="Report Abuse..."/>
+		<menu_item_call label="Ignorer" name="Object Mute"/>
+		<menu_item_call label="Retour" name="Return..."/>
+		<menu_item_call label="Supprimer" name="Delete"/>
+	</context_menu>
+	<menu_item_call label="Prendre" name="Pie Object Take"/>
+	<menu_item_call label="Prendre une copie" name="Take Copy"/>
+	<menu_item_call label="Payer" name="Pay..."/>
+	<menu_item_call label="Acheter" name="Buy..."/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_object_icon.xml b/indra/newview/skins/minimal/xui/fr/menu_object_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..69f8e88a0deb4f58475dab5c7850beaf115d00de
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_object_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Object Icon Menu">
+	<menu_item_call label="Profil de l&apos;objet..." name="Object Profile"/>
+	<menu_item_call label="Ignorer..." name="Block"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_outfit_gear.xml b/indra/newview/skins/minimal/xui/fr/menu_outfit_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5db7f176b544ea9c137fb2d9ef559b394f389def
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_outfit_gear.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear Outfit">
+	<menu_item_call label="Porter - Remplacer la tenue actuelle" name="wear"/>
+	<menu_item_call label="Porter - Ajouter à la tenue actuelle" name="wear_add"/>
+	<menu_item_call label="Enlever - Supprimer de la tenue actuelle" name="take_off"/>
+	<menu label="Nouveaux habits" name="New Clothes">
+		<menu_item_call label="Nouvelle chemise" name="New Shirt"/>
+		<menu_item_call label="Nouveau pantalon" name="New Pants"/>
+		<menu_item_call label="Nouvelles chaussures" name="New Shoes"/>
+		<menu_item_call label="Nouvelles chaussettes" name="New Socks"/>
+		<menu_item_call label="Nouvelle veste" name="New Jacket"/>
+		<menu_item_call label="Nouvelle jupe" name="New Skirt"/>
+		<menu_item_call label="Nouveaux gants" name="New Gloves"/>
+		<menu_item_call label="Nouveau débardeur" name="New Undershirt"/>
+		<menu_item_call label="Nouveau caleçon" name="New Underpants"/>
+		<menu_item_call label="Nouvel alpha" name="New Alpha"/>
+		<menu_item_call label="Nouveau tatouage" name="New Tattoo"/>
+	</menu>
+	<menu label="Nouvelles parties du corps" name="New Body Parts">
+		<menu_item_call label="Nouvelle silhouette" name="New Shape"/>
+		<menu_item_call label="Nouvelle peau" name="New Skin"/>
+		<menu_item_call label="Nouveaux cheveux" name="New Hair"/>
+		<menu_item_call label="Nouveaux yeux" name="New Eyes"/>
+	</menu>
+	<menu_item_call label="Renommer la tenue" name="rename"/>
+	<menu_item_call label="Supprimer la tenue" name="delete_outfit"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_outfit_tab.xml b/indra/newview/skins/minimal/xui/fr/menu_outfit_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2a7f618e0771562c896569050c466f663e9ad6c3
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_outfit_tab.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit">
+	<menu_item_call label="Porter - Remplacer la tenue actuelle" name="wear_replace"/>
+	<menu_item_call label="Porter - Ajouter à la tenue actuelle" name="wear_add"/>
+	<menu_item_call label="Enlever - Supprimer de la tenue actuelle" name="take_off"/>
+	<menu_item_call label="Modifier la tenue" name="edit"/>
+	<menu_item_call label="Renommer la tenue" name="rename"/>
+	<menu_item_call label="Supprimer la tenue" name="delete"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_participant_list.xml b/indra/newview/skins/minimal/xui/fr/menu_participant_list.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f91a30f6bb196bcc7acc8ac816af29c35dd8d302
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_participant_list.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Participant List Context Menu">
+	<menu_item_check label="Trier par nom" name="SortByName"/>
+	<menu_item_check label="Trier par intervenants récents" name="SortByRecentSpeakers"/>
+	<menu_item_call label="Voir le profil" name="View Profile"/>
+	<menu_item_call label="Devenir amis" name="Add Friend"/>
+	<menu_item_call label="IM" name="IM"/>
+	<menu_item_call label="Appeler" name="Call"/>
+	<menu_item_call label="Partager" name="Share"/>
+	<menu_item_call label="Payer" name="Pay"/>
+	<menu_item_check label="Afficher les icônes des résidents" name="View Icons"/>
+	<menu_item_check label="Bloquer le chat vocal" name="Block/Unblock"/>
+	<menu_item_check label="Ignorer le texte" name="MuteText"/>
+	<context_menu label="Options du modérateur" name="Moderator Options">
+		<menu_item_check label="Autoriser les chats écrits" name="AllowTextChat"/>
+		<menu_item_call label="Ignorer ce participant" name="ModerateVoiceMuteSelected"/>
+		<menu_item_call label="Ne plus ignorer ce participant" name="ModerateVoiceUnMuteSelected"/>
+		<menu_item_call label="Ignorer les autres" name="ModerateVoiceMute"/>
+		<menu_item_call label="Ne plus ignorer les autres" name="ModerateVoiceUnmute"/>
+	</context_menu>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_people_friends_view_sort.xml b/indra/newview/skins/minimal/xui/fr/menu_people_friends_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a6170a6c162ae199165b1d7375df4d81d58f04af
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_people_friends_view_sort.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_check label="Trier par nom" name="sort_name"/>
+	<menu_item_check label="Trier par statut" name="sort_status"/>
+	<menu_item_check label="Afficher les icônes des résidents" name="view_icons"/>
+	<menu_item_check label="Afficher les droits octroyés" name="view_permissions"/>
+	<menu_item_call label="Afficher les résidents et les objets ignorés" name="show_blocked_list"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_people_groups.xml b/indra/newview/skins/minimal/xui/fr/menu_people_groups.xml
new file mode 100644
index 0000000000000000000000000000000000000000..eb51b4cf7e8b485062e98ebf229f1ef3e624c589
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_people_groups.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_call label="Afficher les infos" name="View Info"/>
+	<menu_item_call label="Chat" name="Chat"/>
+	<menu_item_call label="Appeler" name="Call"/>
+	<menu_item_call label="Activer" name="Activate"/>
+	<menu_item_call label="Quitter" name="Leave"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_people_groups_view_sort.xml b/indra/newview/skins/minimal/xui/fr/menu_people_groups_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..34f949cf2ce9351a7a73f843adb036222e83ee65
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_people_groups_view_sort.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_check label="Afficher les icônes des groupes" name="Display Group Icons"/>
+	<menu_item_call label="Quitter le groupe sélectionné" name="Leave Selected Group"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_people_nearby.xml b/indra/newview/skins/minimal/xui/fr/menu_people_nearby.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f153ed15ae7610a6535ec3ddb0cc54ae7861923e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_people_nearby.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Avatar Context Menu">
+	<menu_item_call label="Voir le profil" name="View Profile"/>
+	<menu_item_call label="Devenir amis" name="Add Friend"/>
+	<menu_item_call label="Supprimer cet ami" name="Remove Friend"/>
+	<menu_item_call label="IM" name="IM"/>
+	<menu_item_call label="Appeler" name="Call"/>
+	<menu_item_call label="Carte" name="Map"/>
+	<menu_item_call label="Partager" name="Share"/>
+	<menu_item_call label="Payer" name="Pay"/>
+	<menu_item_check label="Ignorer/Ne plus ignorer" name="Block/Unblock"/>
+	<menu_item_call label="Téléporter" name="teleport"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_people_nearby_multiselect.xml b/indra/newview/skins/minimal/xui/fr/menu_people_nearby_multiselect.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8400ec0a14dcfe89812b4ecf7c0d4c6b92b39b8d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_people_nearby_multiselect.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Multi-Selected People Context Menu">
+	<menu_item_call label="Devenir amis" name="Add Friends"/>
+	<menu_item_call label="Supprimer des amis" name="Remove Friend"/>
+	<menu_item_call label="IM" name="IM"/>
+	<menu_item_call label="Appeler" name="Call"/>
+	<menu_item_call label="Partager" name="Share"/>
+	<menu_item_call label="Payer" name="Pay"/>
+	<menu_item_call label="Proposer une téléportation" name="teleport"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_people_nearby_view_sort.xml b/indra/newview/skins/minimal/xui/fr/menu_people_nearby_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..45f97e062e48271c99c3f22eba1fdd32a0dcd7b4
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_people_nearby_view_sort.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_check label="Trier par intervenants récents" name="sort_by_recent_speakers"/>
+	<menu_item_check label="Trier par nom" name="sort_name"/>
+	<menu_item_check label="Trier par distance" name="sort_distance"/>
+	<menu_item_check label="Afficher les icônes des résidents" name="view_icons"/>
+	<menu_item_call label="Afficher les résidents et les objets interdits" name="show_blocked_list"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_people_recent_view_sort.xml b/indra/newview/skins/minimal/xui/fr/menu_people_recent_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..93b90ae61cf503172c8e97f12a02566a5e65b055
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_people_recent_view_sort.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_check label="Trier en commençant par le plus récent" name="sort_most"/>
+	<menu_item_check label="Trier par nom" name="sort_name"/>
+	<menu_item_check label="Afficher les icônes des résidents" name="view_icons"/>
+	<menu_item_call label="Afficher les résidents et les objets ignorés" name="show_blocked_list"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_picks.xml b/indra/newview/skins/minimal/xui/fr/menu_picks.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7d7174d43ccad934af05bb513a5ae3dcb23ccd83
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_picks.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Picks">
+	<menu_item_call label="Infos" name="pick_info"/>
+	<menu_item_call label="Modifier" name="pick_edit"/>
+	<menu_item_call label="Téléporter" name="pick_teleport"/>
+	<menu_item_call label="Carte" name="pick_map"/>
+	<menu_item_call label="Supprimer" name="pick_delete"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_picks_plus.xml b/indra/newview/skins/minimal/xui/fr/menu_picks_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b6cde6d6e2260b7f3ffe7ec8377d196066487abd
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_picks_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="picks_plus_menu">
+	<menu_item_call label="Nouveau favori" name="create_pick"/>
+	<menu_item_call label="Nouvelle petite annonce" name="create_classified"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_place.xml b/indra/newview/skins/minimal/xui/fr/menu_place.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6b0f4db75267d22ee684d9cba8c0dafa5d3bf09a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_place.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="place_overflow_menu">
+	<menu_item_call label="Enregistrer comme repère" name="landmark"/>
+	<menu_item_call label="Créer un favori" name="pick"/>
+	<menu_item_call label="Acheter un pass" name="pass"/>
+	<menu_item_call label="Modifier" name="edit"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_place_add_button.xml b/indra/newview/skins/minimal/xui/fr/menu_place_add_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..92f9e7719d1aff1c526d713206354b730fa19098
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_place_add_button.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_folder_gear">
+	<menu_item_call label="Ajouter un dossier" name="add_folder"/>
+	<menu_item_call label="Ajouter un repère" name="add_landmark"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_places_gear_folder.xml b/indra/newview/skins/minimal/xui/fr/menu_places_gear_folder.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3570bdec7f4b355fb4baceccfc4ed4a3f7921eeb
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_places_gear_folder.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_folder_gear">
+	<menu_item_call label="Ajouter un repère" name="add_landmark"/>
+	<menu_item_call label="Ajouter un dossier" name="add_folder"/>
+	<menu_item_call label="Couper" name="cut"/>
+	<menu_item_call label="Copier" name="copy_folder"/>
+	<menu_item_call label="Coller" name="paste"/>
+	<menu_item_call label="Renommer" name="rename"/>
+	<menu_item_call label="Supprimer" name="delete"/>
+	<menu_item_call label="Agrandir" name="expand"/>
+	<menu_item_call label="Réduire" name="collapse"/>
+	<menu_item_call label="Développer tous les dossiers" name="expand_all"/>
+	<menu_item_call label="Réduire tous les dossiers" name="collapse_all"/>
+	<menu_item_check label="Trier par date" name="sort_by_date"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_places_gear_landmark.xml b/indra/newview/skins/minimal/xui/fr/menu_places_gear_landmark.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5491c1b3fcf7803e1073d1dd90eb68b5d039a7c9
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_places_gear_landmark.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_ladmark_gear">
+	<menu_item_call label="Téléporter" name="teleport"/>
+	<menu_item_call label="Plus d&apos;informations" name="more_info"/>
+	<menu_item_call label="Voir sur la carte" name="show_on_map"/>
+	<menu_item_call label="Ajouter un repère" name="add_landmark"/>
+	<menu_item_call label="Ajouter un dossier" name="add_folder"/>
+	<menu_item_call label="Couper" name="cut"/>
+	<menu_item_call label="Copier le repère" name="copy_landmark"/>
+	<menu_item_call label="Copier la SLurl" name="copy_slurl"/>
+	<menu_item_call label="Coller" name="paste"/>
+	<menu_item_call label="Renommer" name="rename"/>
+	<menu_item_call label="Supprimer" name="delete"/>
+	<menu_item_call label="Développer tous les dossiers" name="expand_all"/>
+	<menu_item_call label="Réduire tous les dossiers" name="collapse_all"/>
+	<menu_item_check label="Trier par date" name="sort_by_date"/>
+	<menu_item_call label="Créer un favori" name="create_pick"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_profile_overflow.xml b/indra/newview/skins/minimal/xui/fr/menu_profile_overflow.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ddf898b79164bd68d3234516fe68f0f86fa6a047
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_profile_overflow.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="profile_overflow_menu">
+	<menu_item_call label="Carte" name="show_on_map"/>
+	<menu_item_call label="Payer" name="pay"/>
+	<menu_item_call label="Partager" name="share"/>
+	<menu_item_call label="Ignorer" name="block"/>
+	<menu_item_call label="Ne plus ignorer" name="unblock"/>
+	<menu_item_call label="Éjecter" name="kick"/>
+	<menu_item_call label="Figer" name="freeze"/>
+	<menu_item_call label="Libérer" name="unfreeze"/>
+	<menu_item_call label="Représentant du service consommateur" name="csr"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_save_outfit.xml b/indra/newview/skins/minimal/xui/fr/menu_save_outfit.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f78db411b39e706be8abdcc8c87b8e280d93a6df
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_save_outfit.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="save_outfit_menu">
+	<menu_item_call label="Enregistrer" name="save_outfit"/>
+	<menu_item_call label="Enregistrer sous" name="save_as_new_outfit"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_script_chiclet.xml b/indra/newview/skins/minimal/xui/fr/menu_script_chiclet.xml
new file mode 100644
index 0000000000000000000000000000000000000000..46efa30bd662b14fb35ff6e94173d6f83a0e03a8
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_script_chiclet.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="ScriptChiclet Menu">
+	<menu_item_call label="Fermer" name="Close"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_slurl.xml b/indra/newview/skins/minimal/xui/fr/menu_slurl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ddfa5c0849c435c77139be7852942d804388de2d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_slurl.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="À propos de l&apos;URL" name="about_url"/>
+	<menu_item_call label="Téléporter vers l&apos;URL" name="teleport_to_url"/>
+	<menu_item_call label="Carte" name="show_on_map"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_teleport_history_gear.xml b/indra/newview/skins/minimal/xui/fr/menu_teleport_history_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3dea662cc24436a1e7c512a7eb42426aa92c5d7a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_teleport_history_gear.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Teleport History Gear Context Menu">
+	<menu_item_call label="Développer tous les dossiers" name="Expand all folders"/>
+	<menu_item_call label="Réduire tous les dossiers" name="Collapse all folders"/>
+	<menu_item_call label="Effacer l&apos;historique des téléportations" name="Clear Teleport History"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_teleport_history_item.xml b/indra/newview/skins/minimal/xui/fr/menu_teleport_history_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb4582dbce327c2d7bce04ff325cbcaf3deabe84
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_teleport_history_item.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Teleport History Item Context Menu">
+	<menu_item_call label="Téléporter" name="Teleport"/>
+	<menu_item_call label="Plus d&apos;informations" name="More Information"/>
+	<menu_item_call label="Copier dans le presse-papiers" name="CopyToClipboard"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_teleport_history_tab.xml b/indra/newview/skins/minimal/xui/fr/menu_teleport_history_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..369680985de1169a384d9418f46d3127589401de
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_teleport_history_tab.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Teleport History Item Context Menu">
+	<menu_item_call label="Ouvrir" name="TabOpen"/>
+	<menu_item_call label="Fermer" name="TabClose"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_text_editor.xml b/indra/newview/skins/minimal/xui/fr/menu_text_editor.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b6f429aec999c21257dec04622fd92e065e2b938
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_text_editor.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Text editor context menu">
+	<menu_item_call label="Couper" name="Cut"/>
+	<menu_item_call label="Copier" name="Copy"/>
+	<menu_item_call label="Coller" name="Paste"/>
+	<menu_item_call label="Supprimer" name="Delete"/>
+	<menu_item_call label="Tout sélectionner" name="Select All"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_topinfobar.xml b/indra/newview/skins/minimal/xui/fr/menu_topinfobar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dc68f40fe73db644230fd0b4e49440f72a651d0a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_topinfobar.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_topinfobar">
+	<menu_item_check label="Afficher les coordonnées" name="Show Coordinates"/>
+	<menu_item_check label="Afficher les propriétés de la parcelle" name="Show Parcel Properties"/>
+	<menu_item_call label="Repère" name="Landmark"/>
+	<menu_item_call label="Copier" name="Copy"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_url_agent.xml b/indra/newview/skins/minimal/xui/fr/menu_url_agent.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5ed627fbc336da58bbcd1bf9bcf89f55eeb66f4e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_url_agent.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Voir le profil du résident" name="show_agent"/>
+	<menu_item_call label="Copier le nom dans le presse-papiers" name="url_copy_label"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papiers" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_url_group.xml b/indra/newview/skins/minimal/xui/fr/menu_url_group.xml
new file mode 100644
index 0000000000000000000000000000000000000000..de90c3ff7e5b4551cdbf7831792353d0e817f5c6
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_url_group.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Voir le profil du groupe" name="show_group"/>
+	<menu_item_call label="Copier le groupe dans le presse-papiers" name="url_copy_label"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papiers" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_url_http.xml b/indra/newview/skins/minimal/xui/fr/menu_url_http.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5e963529998db8238df8c7c4edf9d2348c6a3fe6
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_url_http.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Ouvrir la page Web" name="url_open"/>
+	<menu_item_call label="Ouvrir dans un navigateur interne" name="url_open_internal"/>
+	<menu_item_call label="Ouvrir dans un navigateur externe" name="url_open_external"/>
+	<menu_item_call label="Copier l&apos;URL dans le presse-papiers" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_url_inventory.xml b/indra/newview/skins/minimal/xui/fr/menu_url_inventory.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8ab88b4be7b6858d3efe4f0f2b22e5161efed49d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_url_inventory.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Afficher l&apos;article d&apos;inventaire" name="show_item"/>
+	<menu_item_call label="Copier le nom dans le presse-papiers" name="url_copy_label"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papiers" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_url_map.xml b/indra/newview/skins/minimal/xui/fr/menu_url_map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..67e6986f5d920a14201d49f9bbfc24c7186af4b0
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_url_map.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Voir sur la carte" name="show_on_map"/>
+	<menu_item_call label="Me téléporter à cet endroit" name="teleport_to_location"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papiers" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_url_objectim.xml b/indra/newview/skins/minimal/xui/fr/menu_url_objectim.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f581c3ef9d8f24d51215f3f1fe9de5cd6736af2f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_url_objectim.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Afficher les informations sur l&apos;objet" name="show_object"/>
+	<menu_item_call label="Voir sur la carte" name="show_on_map"/>
+	<menu_item_call label="Me téléporter à l&apos;emplacement de l&apos;objet" name="teleport_to_object"/>
+	<menu_item_call label="Copier le nom de l&apos;objet dans le presse-papiers" name="url_copy_label"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papiers" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_url_parcel.xml b/indra/newview/skins/minimal/xui/fr/menu_url_parcel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..07b0eeca499ac122802ee00d3512948a9b398d1a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_url_parcel.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Afficher les informations sur la parcelle" name="show_parcel"/>
+	<menu_item_call label="Voir sur la carte" name="show_on_map"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papiers" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_url_slapp.xml b/indra/newview/skins/minimal/xui/fr/menu_url_slapp.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f4b7e212caf7a8c539d8303cf40fe5f424fbc8d8
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_url_slapp.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Exécuter cette commande" name="run_slapp"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papiers" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_url_slurl.xml b/indra/newview/skins/minimal/xui/fr/menu_url_slurl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e44943cf1568f90e7fba23b153ec731163b192fe
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_url_slurl.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Afficher les informations sur ce lieu" name="show_place"/>
+	<menu_item_call label="Voir sur la carte" name="show_on_map"/>
+	<menu_item_call label="Me téléporter à cet endroit" name="teleport_to_location"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papiers" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_url_teleport.xml b/indra/newview/skins/minimal/xui/fr/menu_url_teleport.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a5075a2740d2003df8d7bb4e05ccc7da4f257a79
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_url_teleport.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Me téléporter à cet endroit." name="teleport"/>
+	<menu_item_call label="Voir sur la carte" name="show_on_map"/>
+	<menu_item_call label="Copier la SLurl dans le presse-papiers" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_viewer.xml b/indra/newview/skins/minimal/xui/fr/menu_viewer.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bd1c077f529ab35c920b3220f8eb06ae94aa545f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_viewer.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu_bar name="Main Menu">
+	<menu label="Aide" name="Help">
+		<menu_item_call label="Aide de [SECOND_LIFE]" name="Second Life Help"/>
+	</menu>
+	<menu label="Avancé" name="Advanced">
+		<menu label="Raccourcis" name="Shortcuts">
+			<menu_item_check label="Voler" name="Fly"/>
+			<menu_item_call label="Fermer la fenêtre" name="Close Window"/>
+			<menu_item_call label="Fermer toutes les fenêtres" name="Close All Windows"/>
+			<menu_item_call label="Réinitialiser la vue" name="Reset View"/>
+		</menu>
+	</menu>
+</menu_bar>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_wearable_list_item.xml b/indra/newview/skins/minimal/xui/fr/menu_wearable_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..187cb4bcd2c996e45242d700cae939f068be0cec
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_wearable_list_item.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit Wearable Context Menu">
+	<menu_item_call label="Remplacer" name="wear_replace"/>
+	<menu_item_call label="Porter" name="wear_wear"/>
+	<menu_item_call label="Ajouter" name="wear_add"/>
+	<menu_item_call label="Enlever / Détacher" name="take_off_or_detach"/>
+	<menu_item_call label="Détacher" name="detach"/>
+	<context_menu label="Attacher à" name="wearable_attach_to"/>
+	<context_menu label="Attacher au HUD" name="wearable_attach_to_hud"/>
+	<menu_item_call label="Enlever" name="take_off"/>
+	<menu_item_call label="Modifier" name="edit"/>
+	<menu_item_call label="Profil de l&apos;article" name="object_profile"/>
+	<menu_item_call label="Afficher l&apos;original" name="show_original"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_wearing_gear.xml b/indra/newview/skins/minimal/xui/fr/menu_wearing_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0ca9fe18791d1bfe68ad9cc02f073fa7ba626fb0
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_wearing_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear Wearing">
+	<menu_item_call label="Modifier la tenue" name="edit"/>
+	<menu_item_call label="Enlever" name="takeoff"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/fr/menu_wearing_tab.xml b/indra/newview/skins/minimal/xui/fr/menu_wearing_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4d884455069e959664bba9e49e8c489b60069115
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/menu_wearing_tab.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Wearing">
+	<menu_item_call label="Enlever" name="take_off"/>
+	<menu_item_call label="Détacher" name="detach"/>
+	<menu_item_call label="Modifier la tenue" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/fr/notifications.xml b/indra/newview/skins/minimal/xui/fr/notifications.xml
new file mode 100644
index 0000000000000000000000000000000000000000..41dd42c39fbba205be5a4ebcb4da46afc755dc42
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/notifications.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<notifications>
+	<notification name="UserGiveItem">
+		[NAME_SLURL] vous offre [ITEM_SLURL]. Pour utiliser cet article, vous devez passer en mode Avancé. L&apos;article se trouve dans votre inventaire. Pour changer de mode, quittez l&apos;application, redémarrez-la, puis sélectionnez un autre mode sur l&apos;écran de connexion.
+		<form name="form">
+			<button name="Show" text="Garder l&apos;article"/>
+			<button name="Discard" text="Refuser l&apos;article"/>
+			<button name="Mute" text="Ignorer l&apos;utilisateur"/>
+		</form>
+	</notification>
+	<notification name="ObjectGiveItem">
+		Un objet nommé &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt; appartenant à [NAME_SLURL] vous offre [ITEM_SLURL]. Pour utiliser cet article, vous devez passer en mode Avancé. L&apos;article se trouve dans votre inventaire. Pour changer de mode, quittez l&apos;application, redémarrez-la, puis sélectionnez un autre mode sur l&apos;écran de connexion.
+		<form name="form">
+			<button name="Keep" text="Garder l&apos;article"/>
+			<button name="Discard" text="Refuser l&apos;article"/>
+			<button name="Mute" text="Ignorer l&apos;objet"/>
+		</form>
+	</notification>
+</notifications>
diff --git a/indra/newview/skins/minimal/xui/fr/panel_bottomtray.xml b/indra/newview/skins/minimal/xui/fr/panel_bottomtray.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ef62901e9912a590960bac6c846472280a90d5cd
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/panel_bottomtray.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="bottom_tray">
+	<string name="DragIndicationImageName" value="Accordion_ArrowOpened_Off"/>
+	<string name="SpeakBtnToolTip" value="Active/Désactive le micro"/>
+	<string name="VoiceControlBtnToolTip" value="Affiche/Masque le panneau de contrôle de la voix"/>
+	<layout_stack name="toolbar_stack">
+		<layout_panel name="gesture_panel">
+			<gesture_combo_list label="Geste" name="Gesture" tool_tip="Affiche/Masque les gestes"/>
+		</layout_panel>
+		<layout_panel name="cam_panel">
+			<bottomtray_button label="Affichage" name="camera_btn" tool_tip="Affiche/Masque le contrôle de la caméra"/>
+		</layout_panel>
+		<layout_panel name="avatar_and_destinations_panel">
+			<bottomtray_button label="Destinations" name="destination_btn" tool_tip="Afficher la fenêtre des personnes."/>
+		</layout_panel>
+		<layout_panel name="avatar_and_destinations_panel">
+			<bottomtray_button label="Mon avatar" name="avatar_btn"/>
+		</layout_panel>
+		<layout_panel name="people_panel">
+			<bottomtray_button label="Personnes" name="show_people_button" tool_tip="Afficher la fenêtre des personnes."/>
+		</layout_panel>
+		<layout_panel name="profile_panel">
+			<bottomtray_button label="Profil" name="show_profile_btn" tool_tip="Afficher la fenêtre de profil."/>
+		</layout_panel>
+		<layout_panel name="howto_panel">
+			<bottomtray_button label="Aide rapide" name="show_help_btn" tool_tip="Ouvrir les rubriques d&apos;aide rapide Second Life."/>
+		</layout_panel>
+		<layout_panel name="im_well_panel">
+			<chiclet_im_well name="im_well">
+				<button name="Unread IM messages" tool_tip="Conversations"/>
+			</chiclet_im_well>
+		</layout_panel>
+		<layout_panel name="notification_well_panel">
+			<chiclet_notification name="notification_well">
+				<button name="Unread" tool_tip="Notifications"/>
+			</chiclet_notification>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/fr/panel_group_control_panel.xml b/indra/newview/skins/minimal/xui/fr/panel_group_control_panel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..676fa1d2229c358bf76f0804e064ef90e4d277c0
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/panel_group_control_panel.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+	<layout_stack name="vertical_stack">
+		<layout_panel name="end_call_btn_panel">
+			<button label="Quitter l&apos;appel" name="end_call_btn"/>
+		</layout_panel>
+		<layout_panel name="voice_ctrls_btn_panel">
+			<button label="Ouvrir contrôles vocaux" name="voice_ctrls_btn"/>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/fr/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/fr/panel_im_control_panel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1f2169e22cabe5f802648ff3287c4bc2328196ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/panel_im_control_panel.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+	<text name="avatar_name" value="Inconnu"/>
+	<layout_stack name="button_stack">
+		<layout_panel name="view_profile_btn_panel">
+			<button label="Profil" name="view_profile_btn"/>
+		</layout_panel>
+		<layout_panel name="add_friend_btn_panel">
+			<button label="Devenir amis" name="add_friend_btn"/>
+		</layout_panel>
+		<layout_panel name="teleport_btn_panel">
+			<button label="Téléporter" name="teleport_btn" tool_tip="Proposer de téléporter cette personne"/>
+		</layout_panel>
+		<layout_panel name="share_btn_panel">
+			<button label="Partager" name="share_btn"/>
+		</layout_panel>
+		<layout_panel name="pay_btn_panel">
+			<button label="Payer" name="pay_btn"/>
+		</layout_panel>
+		<layout_panel name="call_btn_panel">
+			<button label="Appeler" name="call_btn"/>
+		</layout_panel>
+		<layout_panel name="end_call_btn_panel">
+			<button label="Quitter l&apos;appel" name="end_call_btn"/>
+		</layout_panel>
+		<layout_panel name="voice_ctrls_btn_panel">
+			<button label="Contrôles vocaux" name="voice_ctrls_btn"/>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/fr/panel_login.xml b/indra/newview/skins/minimal/xui/fr/panel_login.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0869778a547b7dfcb8929663678adf19159071a4
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/panel_login.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_login">
+	<panel.string name="create_account_url">
+		http://fr.secondlife.com/registration/
+	</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php?lang=fr
+	</panel.string>
+	<layout_stack name="login_widgets">
+		<layout_panel name="login">
+			<text name="username_text">
+				Nom d&apos;utilisateur :
+			</text>
+			<combo_box name="username_combo" tool_tip="Nom d&apos;utilisateur que vous avez choisi lors de votre inscription (par exemple, bobsmith12 ou Steller Sunshine)."/>
+			<text name="password_text">
+				Mot de passe :
+			</text>
+			<check_box label="Enregistrer" name="remember_check"/>
+			<button label="Connexion" name="connect_btn"/>
+			<text name="mode_selection_text">
+				Mode :
+			</text>
+			<combo_box name="mode_combo" tool_tip="Sélectionnez un mode. Pour une exploration facile et rapide avec chat, choisissez Basique. Pour accéder à plus de fonctionnalités, choisissez Avancé.">
+				<combo_box.item label="Basique" name="Basic"/>
+				<combo_box.item label="Avancé" name="Advanced"/>
+			</combo_box>
+		</layout_panel>
+		<layout_panel name="links">
+			<text name="create_new_account_text">
+				S&apos;inscrire
+			</text>
+			<text name="forgot_password_text">
+				Nom d&apos;utilisateur ou mot de passe oublié ?
+			</text>
+			<text name="login_help">
+				Besoin d&apos;aide ?
+			</text>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/fr/panel_navigation_bar.xml b/indra/newview/skins/minimal/xui/fr/panel_navigation_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..45caf2323d26adc0a5f80704c9d513685e989042
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/panel_navigation_bar.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="navigation_bar">
+	<panel name="navigation_panel">
+		<pull_button name="back_btn" tool_tip="Revenir à l&apos;emplacement précédent"/>
+		<pull_button name="forward_btn" tool_tip="Avancer d&apos;un emplacement"/>
+		<button name="home_btn" tool_tip="Me téléporter jusqu&apos;à mon domicile"/>
+		<location_input label="Emplacement" name="location_combo"/>
+		<search_combo_box label="Rechercher" name="search_combo_box" tool_tip="Rechercher">
+			<combo_editor label="Rechercher dans [SECOND_LIFE]" name="search_combo_editor"/>
+		</search_combo_box>
+	</panel>
+	<favorites_bar name="favorite" tool_tip="Faites glisser des repères ici pour un accès rapide à vos lieux favoris dans Second Life.">
+		<label name="favorites_bar_label" tool_tip="Faites glisser des repères ici pour un accès rapide à vos lieux favoris dans Second Life.">
+			Favoris
+		</label>
+		<chevron_button name="&gt;&gt;" tool_tip="Afficher d&apos;avantage de Favoris"/>
+	</favorites_bar>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/fr/panel_people.xml b/indra/newview/skins/minimal/xui/fr/panel_people.xml
new file mode 100644
index 0000000000000000000000000000000000000000..88409a2a8678efa7d8d2ea094a58e10f0915b4b9
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/panel_people.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- Side tray panel -->
+<panel label="Résidents" name="people_panel">
+	<string name="no_recent_people" value="Personne de récent. Vous recherchez des résidents avec qui passer du temps ? Essayez avec le bouton Destinations ci-dessous."/>
+	<string name="no_filtered_recent_people" value="Personne de récent portant ce nom."/>
+	<string name="no_one_near" value="Personne près de vous. Vous recherchez des résidents avec qui passer du temps ? Essayez avec le bouton Destinations ci-dessous."/>
+	<string name="no_one_filtered_near" value="Personne près de vous portant ce nom."/>
+	<string name="no_friends_online" value="Pas d&apos;amis connectés"/>
+	<string name="no_friends" value="Pas d&apos;amis"/>
+	<string name="no_friends_msg">
+		Pour ajouter un résident à votre liste d&apos;amis, cliquez-droit dessus.
+Vous recherchez des résidents avec qui passer du temps ? Essayez avec le bouton Destinations ci-dessous.
+	</string>
+	<string name="no_filtered_friends_msg">
+		Vous n&apos;avez pas trouvé ce que vous cherchiez ? Essayez avec le bouton Destinations ci-dessous.
+	</string>
+	<string name="people_filter_label" value="Filtrer les personnes"/>
+	<string name="groups_filter_label" value="Filtrer les groupes"/>
+	<string name="no_filtered_groups_msg" value="Vous n&apos;avez pas trouvé ce que vous cherchiez ? Essayez [secondlife:///app/search/groups/[SEARCH_TERM] Rechercher]."/>
+	<string name="no_groups_msg" value="Vous souhaitez trouver des groupes à rejoindre ? Utilisez [secondlife:///app/search/groups Rechercher]."/>
+	<string name="MiniMapToolTipMsg" value="[REGION](Carte : double-clic ; Panoramique : Maj + faire glisser)"/>
+	<string name="AltMiniMapToolTipMsg" value="[REGION](Téléportation : double-clic ; Panoramique : Maj + faire glisser)"/>
+	<filter_editor label="Filtre" name="filter_input"/>
+	<tab_container name="tabs">
+		<panel label="PRÈS DE VOUS" name="nearby_panel">
+			<panel label="bottom_panel" name="bottom_panel"/>
+		</panel>
+		<panel label="MES AMIS" name="friends_panel">
+			<accordion name="friends_accordion">
+				<accordion_tab name="tab_online" title="En ligne"/>
+				<accordion_tab name="tab_all" title="Tout"/>
+			</accordion>
+			<panel label="bottom_panel" name="bottom_panel">
+				<layout_stack name="bottom_panel">
+					<layout_panel name="trash_btn_panel">
+						<dnd_button name="del_btn" tool_tip="Supprimer le résident sélectionné de votre liste d&apos;amis."/>
+					</layout_panel>
+				</layout_stack>
+			</panel>
+		</panel>
+		<panel label="RÉCENT" name="recent_panel">
+			<panel label="bottom_panel" name="bottom_panel">
+				<button name="add_friend_btn" tool_tip="Ajouter le résident sélectionné à votre liste d&apos;amis"/>
+			</panel>
+		</panel>
+	</tab_container>
+	<panel name="button_bar">
+		<layout_stack name="bottom_bar_ls">
+			<layout_panel name="view_profile_btn_lp">
+				<button label="Profil" name="view_profile_btn" tool_tip="Afficher la photo, les groupes et autres infos des résidents"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="IM" name="im_btn" tool_tip="Ouvrir une session IM"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Téléporter" name="teleport_btn" tool_tip="Proposer une téléportation"/>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls1">
+			<layout_panel name="group_info_btn_lp">
+				<button label="Profil du groupe" name="group_info_btn" tool_tip="Afficher les informations sur le groupe"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Chat de groupe" name="chat_btn" tool_tip="Ouvrir une session de chat"/>
+			</layout_panel>
+			<layout_panel name="group_call_btn_lp">
+				<button label="Appel de groupe" name="group_call_btn" tool_tip="Appeler ce groupe"/>
+			</layout_panel>
+		</layout_stack>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/fr/panel_side_tray_tab_caption.xml b/indra/newview/skins/minimal/xui/fr/panel_side_tray_tab_caption.xml
new file mode 100644
index 0000000000000000000000000000000000000000..45efbdc980c5d94d40dedfa1b80630f1afb41618
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/panel_side_tray_tab_caption.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="sidetray_tab_panel">
+	<text name="sidetray_tab_title" value="Panneau latéral"/>
+	<button name="undock" tool_tip="Détacher"/>
+	<button name="dock" tool_tip="Attacher"/>
+	<button name="show_help" tool_tip="Afficher l&apos;aide"/>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/fr/panel_status_bar.xml b/indra/newview/skins/minimal/xui/fr/panel_status_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..69aec99e1d80d0e27136d85617a3a02a508c5eca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/fr/panel_status_bar.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="status">
+	<panel.string name="StatBarDaysOfWeek">
+		Sunday:Monday:Tuesday:Wednesday:Thursday:Friday:Saturday
+	</panel.string>
+	<panel.string name="StatBarMonthsOfYear">
+		January:February:March:April:May:June:July:August:September:October:November:December
+	</panel.string>
+	<panel.string name="packet_loss_tooltip">
+		Perte de paquets
+	</panel.string>
+	<panel.string name="bandwidth_tooltip">
+		Bande passante
+	</panel.string>
+	<panel.string name="time">
+		[hour12, datetime, slt]:[min, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt]
+	</panel.string>
+	<panel.string name="timeTooltip">
+		[weekday, datetime, slt] [sday, datetime, slt] [month, datetime, slt] [year, datetime, slt]
+	</panel.string>
+	<panel.string name="buycurrencylabel">
+		[AMT] L$
+	</panel.string>
+	<panel name="balance_bg">
+		<text name="balance" tool_tip="Cliquer sur ce bouton pour actualiser votre solde en L$." value="20 L$"/>
+		<button label="ACHETER L$" name="buyL" tool_tip="Cliquer pour acheter plus de L$"/>
+	</panel>
+	<text name="TimeText" tool_tip="Heure actuelle (Pacifique)">
+		00h00 PST
+	</text>
+	<button name="media_toggle_btn" tool_tip="Arrêter tous les médias (musique, vidéo, pages web)"/>
+	<button name="volume_btn" tool_tip="Contrôle du volume global"/>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/pt/floater_camera.xml b/indra/newview/skins/minimal/xui/pt/floater_camera.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4f3729c6231702ccdcd02f133468838076d31d6b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/floater_camera.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="camera_floater" title="">
+	<floater.string name="rotate_tooltip">
+		Girar a Câmera ao redor do Foco
+	</floater.string>
+	<floater.string name="zoom_tooltip">
+		Aproximar a Câmera in direção ao Foco
+	</floater.string>
+	<floater.string name="move_tooltip">
+		Mover a Câmera para Cima e para Baixo, para a Esquerda e para a Direita
+	</floater.string>
+	<floater.string name="camera_modes_title">
+		Modos de câmera
+	</floater.string>
+	<floater.string name="pan_mode_title">
+		Pan zoom orbital
+	</floater.string>
+	<floater.string name="presets_mode_title">
+		Ângulos predefinidos
+	</floater.string>
+	<floater.string name="free_mode_title">
+		Visualizar objeto
+	</floater.string>
+	<panel name="controls">
+		<panel name="preset_views_list">
+			<panel_camera_item name="front_view">
+				<panel_camera_item.text name="front_view_text">
+					Vista frontal
+				</panel_camera_item.text>
+			</panel_camera_item>
+			<panel_camera_item name="group_view">
+				<panel_camera_item.text name="side_view_text">
+					Vista lateral
+				</panel_camera_item.text>
+			</panel_camera_item>
+			<panel_camera_item name="rear_view">
+				<panel_camera_item.text name="rear_view_text">
+					Vista de trás
+				</panel_camera_item.text>
+			</panel_camera_item>
+		</panel>
+		<panel name="camera_modes_list">
+			<panel_camera_item name="object_view">
+				<panel_camera_item.text name="object_view_text">
+					Vista de objetos
+				</panel_camera_item.text>
+			</panel_camera_item>
+			<panel_camera_item name="mouselook_view">
+				<panel_camera_item.text name="mouselook_view_text">
+					Vista do mouse
+				</panel_camera_item.text>
+			</panel_camera_item>
+		</panel>
+		<panel name="zoom" tool_tip="Aproximar a Câmera in direção ao Foco">
+			<joystick_rotate name="cam_rotate_stick" tool_tip="Girar câmera ao redor do foco"/>
+			<slider_bar name="zoom_slider" tool_tip="Zoom de câmera para focalizar"/>
+			<joystick_track name="cam_track_stick" tool_tip="Move a câmera para cima e para baixo, direita e esquerda"/>
+		</panel>
+	</panel>
+	<panel name="buttons">
+		<button label="" name="presets_btn" tool_tip="Ângulos predefinidos"/>
+		<button label="" name="pan_btn" tool_tip="Pan zoom orbital"/>
+		<button label="" name="avatarview_btn" tool_tip="Modos de câmera"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/pt/floater_help_browser.xml b/indra/newview/skins/minimal/xui/pt/floater_help_browser.xml
new file mode 100644
index 0000000000000000000000000000000000000000..11428ff6516e7661ea35be08558086d5770bc235
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/floater_help_browser.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_help_browser" title="COMO">
+	<floater.string name="loading_text">
+		Carregando...
+	</floater.string>
+	<layout_stack name="stack1">
+		<layout_panel name="external_controls"/>
+	</layout_stack>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/pt/floater_media_browser.xml b/indra/newview/skins/minimal/xui/pt/floater_media_browser.xml
new file mode 100644
index 0000000000000000000000000000000000000000..da7428007e5b1e27f41e8b040940bb910d796662
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/floater_media_browser.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_about" title="NAVEGADOR DE MÍDIA">
+	<floater.string name="home_page_url">
+		http://www.secondlife.com
+	</floater.string>
+	<floater.string name="support_page_url">
+		http://support.secondlife.com
+	</floater.string>
+	<layout_stack name="stack1">
+		<layout_panel name="nav_controls">
+			<button label="Atrás" name="back"/>
+			<button label="Frente" name="forward"/>
+			<button label="Recarregar" name="reload"/>
+			<button label="OK" name="go"/>
+		</layout_panel>
+		<layout_panel name="time_controls">
+			<button label="p/ trás" name="rewind"/>
+			<button label="parar" name="stop"/>
+			<button label="p/ frente" name="seek"/>
+		</layout_panel>
+		<layout_panel name="parcel_owner_controls">
+			<button label="Enviar esta página para lote" name="assign"/>
+		</layout_panel>
+		<layout_panel name="external_controls">
+			<button label="Abrir no meu navegador" name="open_browser"/>
+			<check_box label="Abrir sempre no meu navegador" name="open_always"/>
+			<button label="Fechar" name="close"/>
+		</layout_panel>
+	</layout_stack>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/pt/floater_nearby_chat.xml b/indra/newview/skins/minimal/xui/pt/floater_nearby_chat.xml
new file mode 100644
index 0000000000000000000000000000000000000000..60edfa505fe43df2dc76ab4db7e4daf5e66d526d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/floater_nearby_chat.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="nearby_chat" title="Bate-papo local">
+	<check_box label="Traduzir bate-papo (via Google)" name="translate_chat_checkbox"/>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/pt/floater_web_content.xml b/indra/newview/skins/minimal/xui/pt/floater_web_content.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5101579c6f21e8fde127f7e08487b5f6c50a29b4
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/floater_web_content.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_web_content" title="">
+	<layout_stack name="stack1">
+		<layout_panel name="nav_controls">
+			<button name="back" tool_tip="Navegar para trás"/>
+			<button name="forward" tool_tip="Navegar para frente"/>
+			<button name="stop" tool_tip="Parar a navegação"/>
+			<button name="reload" tool_tip="Recarregar página"/>
+			<combo_box name="address" tool_tip="Digite a URL aqui"/>
+			<icon name="media_secure_lock_flag" tool_tip="Navegação segura"/>
+			<button name="popexternal" tool_tip="Abrir a URL atual no navegador do seu computador"/>
+		</layout_panel>
+	</layout_stack>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/pt/inspect_avatar.xml b/indra/newview/skins/minimal/xui/pt/inspect_avatar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a199c58c152ebbe58c9ad5de78a8044ff1d85f6b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/inspect_avatar.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="inspect_avatar">
+	<string name="Subtitle">
+		[IDADE]
+	</string>
+	<string name="Details">
+		[PERFIL_SL]
+	</string>
+	<text name="user_details">
+		This is my second life description and I really think it is great. But for some reason my description is super extra long because I like to talk a whole lot
+	</text>
+	<slider name="volume_slider" tool_tip="Volume de Voz" value="0.5"/>
+	<button label="Adicionar amigo" name="add_friend_btn"/>
+	<button label="MI" name="im_btn"/>
+	<button label="Perfil" name="view_profile_btn"/>
+	<panel name="moderator_panel">
+		<button label="Disabilitar Voz" name="disable_voice"/>
+		<button label="Habilitar Voz" name="enable_voice"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/pt/inspect_object.xml b/indra/newview/skins/minimal/xui/pt/inspect_object.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b72de7038d20cff5f1d70e596fe2fcdbd7d5394c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/inspect_object.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="inspect_object">
+	<string name="Creator">
+		Autor: [CREATOR]
+	</string>
+	<string name="CreatorAndOwner">
+		Autor [CREATOR]
+Proprietário [OWNER]
+	</string>
+	<string name="Price">
+		L$[AMOUNT]
+	</string>
+	<string name="PriceFree">
+		Grátis!
+	</string>
+	<string name="Touch">
+		Tocar
+	</string>
+	<string name="Sit">
+		Sentar
+	</string>
+	<text name="object_name" value="Test Object Name That Is actually two lines and Really Long"/>
+	<text name="price_text">
+		L$30.000
+	</text>
+	<text name="object_description">
+		This is a really long description for an object being as how it is at least 80 characters in length and so but maybe more like 120 at this point. Who knows, really?
+	</text>
+	<button label="Comprar" name="buy_btn"/>
+	<button label="Pagar" name="pay_btn"/>
+	<button label="Pegar uma cópia" name="take_free_copy_btn"/>
+	<button label="Tocar" name="touch_btn"/>
+	<button label="Sentar" name="sit_btn"/>
+	<button label="Abrir" name="open_btn"/>
+	<icon name="secure_browsing" tool_tip="Navegação segura"/>
+	<button label="Mais" name="more_info_btn"/>
+</floater>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_add_wearable_gear.xml b/indra/newview/skins/minimal/xui/pt/menu_add_wearable_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4b81276ab34c6b7f1ef3d8c8f40aff26992bb8c3
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_add_wearable_gear.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Add Wearable Gear Menu">
+	<menu_item_check label="Ordenar por mais recente" name="sort_by_most_recent"/>
+	<menu_item_check label="Ordenar por nome" name="sort_by_name"/>
+	<menu_item_check label="Ordenar por tipo" name="sort_by_type"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_attachment_other.xml b/indra/newview/skins/minimal/xui/pt/menu_attachment_other.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cfd69158bca1d8df952cac54ef469299e22f4cd5
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_attachment_other.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- *NOTE: See also menu_avatar_other.xml -->
+<context_menu name="Avatar Pie">
+	<menu_item_call label="Ver perfil" name="Profile..."/>
+	<menu_item_call label="Adicionar amigo..." name="Add Friend"/>
+	<menu_item_call label="MI" name="Send IM..."/>
+	<menu_item_call label="Ligar" name="Call"/>
+	<menu_item_call label="Convidar para entrar no grupo" name="Invite..."/>
+	<menu_item_call label="Bloquear" name="Avatar Mute"/>
+	<menu_item_call label="Denunciar" name="abuse"/>
+	<menu_item_call label="Congelar" name="Freeze..."/>
+	<menu_item_call label="Ejetar" name="Eject..."/>
+	<menu_item_call label="Depurar texturas" name="Debug..."/>
+	<menu_item_call label="Mais zoom" name="Zoom In"/>
+	<menu_item_call label="Pagar" name="Pay..."/>
+	<menu_item_call label="Perfil do objeto" name="Object Inspect"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_attachment_self.xml b/indra/newview/skins/minimal/xui/pt/menu_attachment_self.xml
new file mode 100644
index 0000000000000000000000000000000000000000..09060cf3aeebee94d425b98017bd24a6785ec6b0
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_attachment_self.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Attachment Pie">
+	<menu_item_call label="Tocar" name="Attachment Object Touch"/>
+	<menu_item_call label="Editar" name="Edit..."/>
+	<menu_item_call label="Tirar" name="Detach"/>
+	<menu_item_call label="Sentar" name="Sit Down Here"/>
+	<menu_item_call label="Ficar de pé" name="Stand Up"/>
+	<menu_item_call label="Trocar de look" name="Change Outfit"/>
+	<menu_item_call label="Editar meu look" name="Edit Outfit"/>
+	<menu_item_call label="Editar meu corpo" name="Edit My Shape"/>
+	<menu_item_call label="Meus amigos" name="Friends..."/>
+	<menu_item_call label="Meus grupos" name="Groups..."/>
+	<menu_item_call label="Meu perfil" name="Profile..."/>
+	<menu_item_call label="Depurar texturas" name="Debug..."/>
+	<menu_item_call label="Largar" name="Drop"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_avatar_icon.xml b/indra/newview/skins/minimal/xui/pt/menu_avatar_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..beba969b7ef529e7641eee5d971226c40cc73655
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_avatar_icon.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Avatar Icon Menu">
+	<menu_item_call label="Ver perfil" name="Show Profile"/>
+	<menu_item_call label="Enviar MI..." name="Send IM"/>
+	<menu_item_call label="Adicionar amigo..." name="Add Friend"/>
+	<menu_item_call label="Remover amigo..." name="Remove Friend"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_avatar_other.xml b/indra/newview/skins/minimal/xui/pt/menu_avatar_other.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a4a26144c7974061f046863b7da722af65a25d8d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_avatar_other.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- *NOTE: See also menu_attachment_other.xml -->
+<context_menu name="Avatar Pie">
+	<menu_item_call label="Ver perfil" name="Profile..."/>
+	<menu_item_call label="Adicionar amigo..." name="Add Friend"/>
+	<menu_item_call label="MI" name="Send IM..."/>
+	<menu_item_call label="Ligar" name="Call"/>
+	<menu_item_call label="Convidar para entrar no grupo" name="Invite..."/>
+	<menu_item_call label="Bloquear" name="Avatar Mute"/>
+	<menu_item_call label="Denunciar" name="abuse"/>
+	<menu_item_call label="Congelar" name="Freeze..."/>
+	<menu_item_call label="Ejetar" name="Eject..."/>
+	<menu_item_call label="Depurar texturas" name="Debug..."/>
+	<menu_item_call label="Mais zoom" name="Zoom In"/>
+	<menu_item_call label="Pagar" name="Pay..."/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_avatar_self.xml b/indra/newview/skins/minimal/xui/pt/menu_avatar_self.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6e203d5a259329db5a39691d7653089f0b478b09
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_avatar_self.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Self Pie">
+	<menu_item_call label="Sentar" name="Sit Down Here"/>
+	<menu_item_call label="Ficar de pé" name="Stand Up"/>
+	<context_menu label="Tirar" name="Take Off &gt;">
+		<context_menu label="Roupa" name="Clothes &gt;">
+			<menu_item_call label="Camisa" name="Shirt"/>
+			<menu_item_call label="Calças" name="Pants"/>
+			<menu_item_call label="Saia" name="Skirt"/>
+			<menu_item_call label="Sapatos" name="Shoes"/>
+			<menu_item_call label="Meias" name="Socks"/>
+			<menu_item_call label="Jaqueta" name="Jacket"/>
+			<menu_item_call label="Luvas" name="Gloves"/>
+			<menu_item_call label="Camiseta" name="Self Undershirt"/>
+			<menu_item_call label="Roupa de baixo" name="Self Underpants"/>
+			<menu_item_call label="Tatuagem" name="Self Tattoo"/>
+			<menu_item_call label="Alpha" name="Self Alpha"/>
+			<menu_item_call label="Todas as roupas" name="All Clothes"/>
+		</context_menu>
+		<context_menu label="HUD" name="Object Detach HUD"/>
+		<context_menu label="Tirar" name="Object Detach"/>
+		<menu_item_call label="Tirar tudo" name="Detach All"/>
+	</context_menu>
+	<menu_item_call label="Trocar de look" name="Chenge Outfit"/>
+	<menu_item_call label="Editar meu look" name="Edit Outfit"/>
+	<menu_item_call label="Editar meu corpo" name="Edit My Shape"/>
+	<menu_item_call label="Meus amigos" name="Friends..."/>
+	<menu_item_call label="Meus grupos" name="Groups..."/>
+	<menu_item_call label="Meu perfil" name="Profile..."/>
+	<menu_item_call label="Depurar texturas" name="Debug..."/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_bottomtray.xml b/indra/newview/skins/minimal/xui/pt/menu_bottomtray.xml
new file mode 100644
index 0000000000000000000000000000000000000000..479d02512fb5f7a620419657cfe82abce1af14bd
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_bottomtray.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="hide_camera_move_controls_menu">
+	<menu_item_check label="Botão de gestos" name="ShowGestureButton"/>
+	<menu_item_check label="Botão de movimento" name="ShowMoveButton"/>
+	<menu_item_check label="Botão de ver" name="ShowCameraButton"/>
+	<menu_item_check label="Botão de fotos" name="ShowSnapshotButton"/>
+	<menu_item_check label="Botão da Barra lateral" name="ShowSidebarButton"/>
+	<menu_item_check label="Botão Construir" name="ShowBuildButton"/>
+	<menu_item_check label="Botão Buscar" name="ShowSearchButton"/>
+	<menu_item_check label="Botão Mapa" name="ShowWorldMapButton"/>
+	<menu_item_check label="Botão do Mini Mapa" name="ShowMiniMapButton"/>
+	<menu_item_call label="Cortar" name="NearbyChatBar_Cut"/>
+	<menu_item_call label="Copiar" name="NearbyChatBar_Copy"/>
+	<menu_item_call label="Colar" name="NearbyChatBar_Paste"/>
+	<menu_item_call label="Excluir" name="NearbyChatBar_Delete"/>
+	<menu_item_call label="Selecionar tudo" name="NearbyChatBar_Select_All"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_cof_attachment.xml b/indra/newview/skins/minimal/xui/pt/menu_cof_attachment.xml
new file mode 100644
index 0000000000000000000000000000000000000000..527e3af3c937ac7a4ac365108036b35ecf5ff638
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_cof_attachment.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Attachment">
+	<menu_item_call label="Separar" name="detach"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_cof_body_part.xml b/indra/newview/skins/minimal/xui/pt/menu_cof_body_part.xml
new file mode 100644
index 0000000000000000000000000000000000000000..704fd226eb8bb3d75dbbcfb2b7c3687d8cdb1983
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_cof_body_part.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Body">
+	<menu_item_call label="Trocar" name="replace"/>
+	<menu_item_call label="Editar" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_cof_clothing.xml b/indra/newview/skins/minimal/xui/pt/menu_cof_clothing.xml
new file mode 100644
index 0000000000000000000000000000000000000000..051323ae6aafab4f9f01fac000eac6cc0fc98473
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_cof_clothing.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="COF Clothing">
+	<menu_item_call label="Tirar" name="take_off"/>
+	<menu_item_call label="Editar" name="edit"/>
+	<menu_item_call label="Trocar" name="replace"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_cof_gear.xml b/indra/newview/skins/minimal/xui/pt/menu_cof_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8716992a5e0389c3f1c0cdfba34f3c9e4bde2550
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_cof_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear COF">
+	<menu label="Roupas novas" name="COF.Gear.New_Clothes"/>
+	<menu label="Nova parte do corpo" name="COF.Geear.New_Body_Parts"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_edit.xml b/indra/newview/skins/minimal/xui/pt/menu_edit.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ff431c9a21e6e58996bd4aff57b0f7a6f8c3fb62
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_edit.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu label="Editar" name="Edit">
+	<menu_item_call label="Desfazer" name="Undo"/>
+	<menu_item_call label="Repetir" name="Redo"/>
+	<menu_item_call label="Cortar" name="Cut"/>
+	<menu_item_call label="Copiar" name="Copy"/>
+	<menu_item_call label="Colar" name="Paste"/>
+	<menu_item_call label="Excluir" name="Delete"/>
+	<menu_item_call label="Replicar" name="Duplicate"/>
+	<menu_item_call label="Selecionar tudo" name="Select All"/>
+	<menu_item_call label="Desfazer seleção" name="Deselect"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_favorites.xml b/indra/newview/skins/minimal/xui/pt/menu_favorites.xml
new file mode 100644
index 0000000000000000000000000000000000000000..062820fbca31fcfd9a41904250f5f4c21afcf6f7
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_favorites.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Teletransportar" name="Teleport To Landmark"/>
+	<menu_item_call label="Ver/Editar marco" name="Landmark Open"/>
+	<menu_item_call label="Copiar SLurl" name="Copy slurl"/>
+	<menu_item_call label="Mostrar no mapa" name="Show On Map"/>
+	<menu_item_call label="Copiar" name="Landmark Copy"/>
+	<menu_item_call label="Colar" name="Landmark Paste"/>
+	<menu_item_call label="Excluir" name="Delete"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_gesture_gear.xml b/indra/newview/skins/minimal/xui/pt/menu_gesture_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..70d8ae7a8e6b0ddfd530ce5c34b59bc5f61f9369
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_gesture_gear.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_gesture_gear">
+	<menu_item_call label="Adicionar/remover de favoritos" name="activate"/>
+	<menu_item_call label="Copiar" name="copy_gesture"/>
+	<menu_item_call label="Colar" name="paste"/>
+	<menu_item_call label="Copiar UUID" name="copy_uuid"/>
+	<menu_item_call label="Salvar para look atual" name="save_to_outfit"/>
+	<menu_item_call label="Editar" name="edit_gesture"/>
+	<menu_item_call label="Verificar" name="inspect"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_group_plus.xml b/indra/newview/skins/minimal/xui/pt/menu_group_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1083845d688937e7d32f3d4b3d2c4e1bad00e353
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_group_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_call label="Entrar no grupo..." name="item_join"/>
+	<menu_item_call label="Novo grupo..." name="item_new"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_hide_navbar.xml b/indra/newview/skins/minimal/xui/pt/menu_hide_navbar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c2b063193ec5fc637c609bc48eccda1edc63d7f4
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_hide_navbar.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="hide_navbar_menu">
+	<menu_item_check label="Mostrar barra de navegação" name="ShowNavbarNavigationPanel"/>
+	<menu_item_check label="Mostrar barra de favoritos" name="ShowNavbarFavoritesPanel"/>
+	<menu_item_check label="Mostrar minibarra de localização" name="ShowMiniLocationPanel"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_im_well_button.xml b/indra/newview/skins/minimal/xui/pt/menu_im_well_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2d37cefd6fec5f8e3a4b84713252bec4a68a235e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_im_well_button.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="IM Well Button Context Menu">
+	<menu_item_call label="Fechar tudo" name="Close All"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_imchiclet_adhoc.xml b/indra/newview/skins/minimal/xui/pt/menu_imchiclet_adhoc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ead949ba1311e4460629a38e169186b6f640d67b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_imchiclet_adhoc.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="IMChiclet AdHoc Menu">
+	<menu_item_call label="Encerrar esta sessão" name="End Session"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_imchiclet_group.xml b/indra/newview/skins/minimal/xui/pt/menu_imchiclet_group.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dd177d1b8daea4785dfd6502fe8e8d8c29d1a189
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_imchiclet_group.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="IMChiclet Group Menu">
+	<menu_item_call label="Sobre o grupo" name="Show Profile"/>
+	<menu_item_call label="Mostrar sessão" name="Chat"/>
+	<menu_item_call label="Encerrar esta sessão" name="End Session"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_imchiclet_p2p.xml b/indra/newview/skins/minimal/xui/pt/menu_imchiclet_p2p.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d821b3ded0cc644c9e24539e25c43bda59e94b43
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_imchiclet_p2p.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="IMChiclet P2P Menu">
+	<menu_item_call label="Ver perfil" name="Show Profile"/>
+	<menu_item_call label="Adicionar amigo..." name="Add Friend"/>
+	<menu_item_call label="Mostrar sessão" name="Send IM"/>
+	<menu_item_call label="Encerrar esta sessão" name="End Session"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_inspect_avatar_gear.xml b/indra/newview/skins/minimal/xui/pt/menu_inspect_avatar_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f7fe5640ef55e2ee5882c2b43e5b1201efea749f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_inspect_avatar_gear.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<toggleable_menu name="Gear Menu">
+	<menu_item_call label="Ver perfil" name="view_profile"/>
+	<menu_item_call label="Adicionar amigo..." name="add_friend"/>
+	<menu_item_call label="MI" name="im"/>
+	<menu_item_call label="Teletransportar" name="teleport"/>
+	<menu_item_call label="Bloquear" name="block"/>
+	<menu_item_call label="Desbloquear" name="unblock"/>
+	<menu_item_call label="Denunciar" name="report"/>
+	<menu_item_call label="Congelar" name="freeze"/>
+	<menu_item_call label="Ejetar" name="eject"/>
+	<menu_item_call label="Chutar" name="kick"/>
+	<menu_item_call label="CSR" name="csr"/>
+	<menu_item_call label="Depurar texturas" name="debug"/>
+	<menu_item_call label="Localizar no mapa" name="find_on_map"/>
+	<menu_item_call label="Mais zoom" name="zoom_in"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_inspect_object_gear.xml b/indra/newview/skins/minimal/xui/pt/menu_inspect_object_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..184db26538def0c429cf94c9c994e7f4f9ada8db
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_inspect_object_gear.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<menu name="Gear Menu">
+	<menu_item_call label="Tocar" name="touch"/>
+	<menu_item_call label="Sentar" name="sit"/>
+	<menu_item_call label="Pagar" name="pay"/>
+	<menu_item_call label="Comprar" name="buy"/>
+	<menu_item_call label="Pegar" name="take"/>
+	<menu_item_call label="Pegar uma cópia" name="take_copy"/>
+	<menu_item_call label="Abrir" name="open"/>
+	<menu_item_call label="Editar" name="edit"/>
+	<menu_item_call label="Vestir" name="wear"/>
+	<menu_item_call label="Adicionar" name="add"/>
+	<menu_item_call label="Denunciar" name="report"/>
+	<menu_item_call label="Bloquear" name="block"/>
+	<menu_item_call label="Mais zoom" name="zoom_in"/>
+	<menu_item_call label="Tirar" name="remove"/>
+	<menu_item_call label="Mais informações" name="more_info"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_inspect_self_gear.xml b/indra/newview/skins/minimal/xui/pt/menu_inspect_self_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c1f27e765d797fe223fc1042ae3940570ee0f400
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_inspect_self_gear.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Self Pie">
+	<menu_item_call label="Sentar" name="Sit Down Here"/>
+	<menu_item_call label="Ficar de pé" name="Stand Up"/>
+	<menu_item_call label="Meus amigos" name="Friends..."/>
+	<menu_item_call label="Meu perfil" name="Profile..."/>
+	<menu_item_call label="Depurar texturas" name="Debug..."/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_inv_offer_chiclet.xml b/indra/newview/skins/minimal/xui/pt/menu_inv_offer_chiclet.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c404719c956a1a206693d9e5fdfc0961d1fe01e1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_inv_offer_chiclet.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="InvOfferChiclet Menu">
+	<menu_item_call label="Fechar" name="Close"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_inventory.xml b/indra/newview/skins/minimal/xui/pt/menu_inventory.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1b1efd3270448befc153a9a2b5fc728f541690ca
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_inventory.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Compartilhar" name="Share"/>
+	<menu_item_call label="Comprar" name="Task Buy"/>
+	<menu_item_call label="Abrir" name="Task Open"/>
+	<menu_item_call label="Executar" name="Task Play"/>
+	<menu_item_call label="Propriedades" name="Task Properties"/>
+	<menu_item_call label="Renomear" name="Task Rename"/>
+	<menu_item_call label="Apagar" name="Task Remove"/>
+	<menu_item_call label="Limpar lixeira" name="Empty Trash"/>
+	<menu_item_call label="Limpar Achados &amp; perdidos" name="Empty Lost And Found"/>
+	<menu_item_call label="Nova pasta" name="New Folder"/>
+	<menu_item_call label="Novo script" name="New Script"/>
+	<menu_item_call label="Nova anotação" name="New Note"/>
+	<menu_item_call label="Novo gesto" name="New Gesture"/>
+	<menu label="Novas roupas" name="New Clothes">
+		<menu_item_call label="Nova camisa" name="New Shirt"/>
+		<menu_item_call label="Nova calça" name="New Pants"/>
+		<menu_item_call label="Novos sapatos" name="New Shoes"/>
+		<menu_item_call label="Novas meias" name="New Socks"/>
+		<menu_item_call label="Nova jaqueta" name="New Jacket"/>
+		<menu_item_call label="Nova saia" name="New Skirt"/>
+		<menu_item_call label="Novas luvas" name="New Gloves"/>
+		<menu_item_call label="Nova anágua" name="New Undershirt"/>
+		<menu_item_call label="Nova roupa de baixo" name="New Underpants"/>
+		<menu_item_call label="Nova máscara alfa" name="New Alpha Mask"/>
+		<menu_item_call label="Nova tatuagem" name="New Tattoo"/>
+	</menu>
+	<menu label="Nova parte do corpo" name="New Body Parts">
+		<menu_item_call label="Nova forma" name="New Shape"/>
+		<menu_item_call label="Nova pele" name="New Skin"/>
+		<menu_item_call label="Novo cabelo" name="New Hair"/>
+		<menu_item_call label="Novos olhos" name="New Eyes"/>
+	</menu>
+	<menu label="Alterar fonte" name="Change Type">
+		<menu_item_call label="Padrão" name="Default"/>
+		<menu_item_call label="Luvas" name="Gloves"/>
+		<menu_item_call label="Jaqueta" name="Jacket"/>
+		<menu_item_call label="Calças" name="Pants"/>
+		<menu_item_call label="Silhueta" name="Shape"/>
+		<menu_item_call label="Sapatos" name="Shoes"/>
+		<menu_item_call label="Camisa" name="Shirt"/>
+		<menu_item_call label="Saia" name="Skirt"/>
+		<menu_item_call label="Roupa de baixo" name="Underpants"/>
+		<menu_item_call label="Camiseta" name="Undershirt"/>
+	</menu>
+	<menu_item_call label="Teletransporte" name="Landmark Open"/>
+	<menu_item_call label="Abrir" name="Animation Open"/>
+	<menu_item_call label="Abrir" name="Sound Open"/>
+	<menu_item_call label="Substituir look" name="Replace Outfit"/>
+	<menu_item_call label="Adicionar a look" name="Add To Outfit"/>
+	<menu_item_call label="Tirar do look atual" name="Remove From Outfit"/>
+	<menu_item_call label="Encontrar original" name="Find Original"/>
+	<menu_item_call label="Remover item" name="Purge Item"/>
+	<menu_item_call label="Restaurar item" name="Restore Item"/>
+	<menu_item_call label="Abrir" name="Open"/>
+	<menu_item_call label="Abrir original" name="Open Original"/>
+	<menu_item_call label="Propriedades" name="Properties"/>
+	<menu_item_call label="Renomear" name="Rename"/>
+	<menu_item_call label="Copiar item UUID" name="Copy Asset UUID"/>
+	<menu_item_call label="Copiar" name="Copy"/>
+	<menu_item_call label="Colar" name="Paste"/>
+	<menu_item_call label="Colar como link" name="Paste As Link"/>
+	<menu_item_call label="Excluir" name="Remove Link"/>
+	<menu_item_call label="Apagar" name="Delete"/>
+	<menu_item_call label="Excluir pasta do sistema" name="Delete System Folder"/>
+	<menu_item_call label="Pasta conversa em conferência" name="Conference Chat Folder"/>
+	<menu_item_call label="Executar som" name="Sound Play"/>
+	<menu_item_call label="Sobre o marco" name="About Landmark"/>
+	<menu_item_call label="Executar animação" name="Animation Play"/>
+	<menu_item_call label="Executar áudio" name="Animation Audition"/>
+	<menu_item_call label="Mandar MI" name="Send Instant Message"/>
+	<menu_item_call label="Oferecer teletransporte..." name="Offer Teleport..."/>
+	<menu_item_call label="Bate-papo em conferência" name="Conference Chat"/>
+	<menu_item_call label="Ativar" name="Activate"/>
+	<menu_item_call label="Desativar" name="Deactivate"/>
+	<menu_item_call label="Salvar como" name="Save As"/>
+	<menu_item_call label="Tirar de si mesmo" name="Detach From Yourself"/>
+	<menu_item_call label="Vestir" name="Wearable And Object Wear"/>
+	<menu label="Anexar a" name="Attach To"/>
+	<menu label="Anexar ao HUD" name="Attach To HUD"/>
+	<menu_item_call label="Editar" name="Wearable Edit"/>
+	<menu_item_call label="Adicionar" name="Wearable Add"/>
+	<menu_item_call label="Tirar" name="Take Off"/>
+	<menu_item_call label="--Sem opções--" name="--no options--"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_inventory_add.xml b/indra/newview/skins/minimal/xui/pt/menu_inventory_add.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2723f39287d43544a58066c4b02ad5208d5088e4
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_inventory_add.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_inventory_add">
+	<menu label="Upload" name="upload">
+		<menu_item_call label="Imagem (L$[COST])..." name="Upload Image"/>
+		<menu_item_call label="Som (L$[COST])..." name="Upload Sound"/>
+		<menu_item_call label="Animação (L$[COST])..." name="Upload Animation"/>
+		<menu_item_call label="Volume (L$[COST] per file)..." name="Bulk Upload"/>
+		<menu_item_call label="Autorizações de upload padrão" name="perm prefs"/>
+	</menu>
+	<menu_item_call label="Nova pasta" name="New Folder"/>
+	<menu_item_call label="Novo script" name="New Script"/>
+	<menu_item_call label="Nova anotação" name="New Note"/>
+	<menu_item_call label="Novo gesto" name="New Gesture"/>
+	<menu label="Novas roupas" name="New Clothes">
+		<menu_item_call label="Nova camisa" name="New Shirt"/>
+		<menu_item_call label="Novas calças" name="New Pants"/>
+		<menu_item_call label="Novos sapatos" name="New Shoes"/>
+		<menu_item_call label="Novas meias" name="New Socks"/>
+		<menu_item_call label="Nova blusa" name="New Jacket"/>
+		<menu_item_call label="Nova saia" name="New Skirt"/>
+		<menu_item_call label="Novas luvas" name="New Gloves"/>
+		<menu_item_call label="Nova camiseta" name="New Undershirt"/>
+		<menu_item_call label="Novas roupa de baixo" name="New Underpants"/>
+		<menu_item_call label="Novo alpha" name="New Alpha"/>
+		<menu_item_call label="Nova tatuagem" name="New Tattoo"/>
+	</menu>
+	<menu label="Nova parte do corpo" name="New Body Parts">
+		<menu_item_call label="Nova forma" name="New Shape"/>
+		<menu_item_call label="Nova pele" name="New Skin"/>
+		<menu_item_call label="Novo cabelo" name="New Hair"/>
+		<menu_item_call label="Novos olhos" name="New Eyes"/>
+	</menu>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_inventory_gear_default.xml b/indra/newview/skins/minimal/xui/pt/menu_inventory_gear_default.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3400578d9a939ce359d83ee7d1cbe115c1e5d966
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_inventory_gear_default.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_gear_default">
+	<menu_item_call label="Nova janela de inventário" name="new_window"/>
+	<menu_item_check label="Ordenar por nome" name="sort_by_name"/>
+	<menu_item_check label="Ordenar por mais recente" name="sort_by_recent"/>
+	<menu_item_check label="Pastas do sistema no topo" name="sort_system_folders_to_top"/>
+	<menu_item_call label="Mostrar filtros" name="show_filters"/>
+	<menu_item_call label="Restabelecer filtros" name="reset_filters"/>
+	<menu_item_call label="Fechar todas as pastas" name="close_folders"/>
+	<menu_item_call label="Esvaziar achados e perdidos" name="empty_lostnfound"/>
+	<menu_item_call label="Salvar textura como" name="Save Texture As"/>
+	<menu_item_call label="Compartilhar" name="Share"/>
+	<menu_item_call label="Encontrar original" name="Find Original"/>
+	<menu_item_call label="Encontrar todos os links" name="Find All Links"/>
+	<menu_item_call label="Esvaziar lixeira" name="empty_trash"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_land.xml b/indra/newview/skins/minimal/xui/pt/menu_land.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9182ce321afab21db6190f0e29a8afec9dc4a70d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_land.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Land Pie">
+	<menu_item_call label="Sobre terrenos" name="Place Information..."/>
+	<menu_item_call label="Sentar aqui" name="Sit Here"/>
+	<menu_item_call label="Comprar este terreno" name="Land Buy"/>
+	<menu_item_call label="Comprar passe" name="Land Buy Pass"/>
+	<menu_item_call label="Construir" name="Create"/>
+	<menu_item_call label="Editar a topografia" name="Edit Terrain"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_landmark.xml b/indra/newview/skins/minimal/xui/pt/menu_landmark.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6accfebee7eab8e20ceadf0d54547337d2a4fa2e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_landmark.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="landmark_overflow_menu">
+	<menu_item_call label="Copiar SLurl" name="copy"/>
+	<menu_item_call label="Excluir" name="delete"/>
+	<menu_item_call label="Criar destaque" name="pick"/>
+	<menu_item_call label="Adicionar à barra de favoritos" name="add_to_favbar"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_login.xml b/indra/newview/skins/minimal/xui/pt/menu_login.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3dff3d7c8a96d76881d90f76718e9526c9572710
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_login.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu_bar name="Login Menu">
+	<menu label="Eu" name="File">
+		<menu_item_call label="Preferências" name="Preferences..."/>
+		<menu_item_call label="Sair do [APP_NAME]" name="Quit"/>
+	</menu>
+	<menu label="Ajuda" name="Help">
+		<menu_item_call label="Ajuda do [SECOND_LIFE]" name="Second Life Help"/>
+		<menu_item_call label="Sobre [APP_NAME]" name="About Second Life"/>
+	</menu>
+	<menu_item_check label="Exibir menu de depuração" name="Show Debug Menu"/>
+	<menu label="Depurar" name="Debug">
+		<menu_item_call label="Mostrar configurações" name="Debug Settings"/>
+		<menu_item_call label="Configurações da interface e cor" name="UI/Color Settings"/>
+		<menu label="Testes de UI" name="UI Tests"/>
+		<menu_item_call label="Definir tamanho da janela:" name="Set Window Size..."/>
+		<menu_item_call label="Mostrar TOS" name="TOS"/>
+		<menu_item_call label="Mostrar mensagem crítica" name="Critical"/>
+		<menu_item_call label="Teste de mídia do navegador" name="Web Browser Test"/>
+		<menu_item_call label="Teste de conteúdo web" name="Web Content Floater Test"/>
+		<menu_item_check label="Exibir seletor da grade" name="Show Grid Picker"/>
+		<menu_item_call label="Exibir painel de notificações" name="Show Notifications Console"/>
+	</menu>
+</menu_bar>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_mini_map.xml b/indra/newview/skins/minimal/xui/pt/menu_mini_map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6a3fe55de52df5be09679231de600e69391e76ba
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_mini_map.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Zoom Perto" name="Zoom Close"/>
+	<menu_item_call label="Zoom Médio" name="Zoom Medium"/>
+	<menu_item_call label="Zoom Longe" name="Zoom Far"/>
+	<menu_item_call label="Zoom padrão" name="Zoom Default"/>
+	<menu_item_check label="Girar mapa" name="Rotate Map"/>
+	<menu_item_check label="Auto Center" name="Auto Center"/>
+	<menu_item_call label="Parar Acompanhamento" name="Stop Tracking"/>
+	<menu_item_call label="Mapa-múndi" name="World Map"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_navbar.xml b/indra/newview/skins/minimal/xui/pt/menu_navbar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..57c1471de31699e1856bd9c9d2c1e04e34d36951
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_navbar.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Navbar Menu">
+	<menu_item_check label="Mostrar coordenadas" name="Show Coordinates"/>
+	<menu_item_check label="Mostrar as propriedades do terreno" name="Show Parcel Properties"/>
+	<menu_item_call label="Marco" name="Landmark"/>
+	<menu_item_call label="Cortar" name="Cut"/>
+	<menu_item_call label="Copiar" name="Copy"/>
+	<menu_item_call label="Colar" name="Paste"/>
+	<menu_item_call label="Excluir" name="Delete"/>
+	<menu_item_call label="Selecionar tudo" name="Select All"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_nearby_chat.xml b/indra/newview/skins/minimal/xui/pt/menu_nearby_chat.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f1ea83c837fe17c791490269328c5d8b7d39315e
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_nearby_chat.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="NearBy Chat Menu">
+	<menu_item_call label="Mostrar quem está aqui..." name="nearby_people"/>
+	<menu_item_check label="Mostrar texto bloqueado" name="muted_text"/>
+	<menu_item_check label="Mostrar ícones de amigos" name="show_buddy_icons"/>
+	<menu_item_check label="Mostrar nomes" name="show_names"/>
+	<menu_item_check label="Mostrar ícones e nomes" name="show_icons_and_names"/>
+	<menu_item_call label="Tamanho da fonte" name="font_size"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_notification_well_button.xml b/indra/newview/skins/minimal/xui/pt/menu_notification_well_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..43ad4134ec114139c73a9e0831d9825c64b7f93a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_notification_well_button.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Notification Well Button Context Menu">
+	<menu_item_call label="Fechar tudo" name="Close All"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_object.xml b/indra/newview/skins/minimal/xui/pt/menu_object.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bf9485969987b7485e36fb531fad188c2aead187
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_object.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Object Pie">
+	<menu_item_call label="Tocar" name="Object Touch">
+		<menu_item_call.on_enable name="EnableTouch" parameter="Tocar"/>
+	</menu_item_call>
+	<menu_item_call label="Editar" name="Edit..."/>
+	<menu_item_call label="Construir" name="Build"/>
+	<menu_item_call label="Abrir" name="Open"/>
+	<menu_item_call label="Sentar aqui" name="Object Sit"/>
+	<menu_item_call label="Ficar de pé" name="Object Stand Up"/>
+	<menu_item_call label="Perfil do objeto" name="Object Inspect"/>
+	<menu_item_call label="Mais zoom" name="Zoom In"/>
+	<context_menu label="Colocar no(a)" name="Put On">
+		<menu_item_call label="Vestir" name="Wear"/>
+		<menu_item_call label="Adicionar" name="Add"/>
+		<context_menu label="Anexar" name="Object Attach"/>
+		<context_menu label="Anexar o HUD" name="Object Attach HUD"/>
+	</context_menu>
+	<context_menu label="Tirar" name="Remove">
+		<menu_item_call label="Denunciar abuso" name="Report Abuse..."/>
+		<menu_item_call label="Bloquear" name="Object Mute"/>
+		<menu_item_call label="Devolver" name="Return..."/>
+		<menu_item_call label="Excluir" name="Delete"/>
+	</context_menu>
+	<menu_item_call label="Pegar" name="Pie Object Take"/>
+	<menu_item_call label="Pegar uma cópia" name="Take Copy"/>
+	<menu_item_call label="Pagar" name="Pay..."/>
+	<menu_item_call label="Comprar" name="Buy..."/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_object_icon.xml b/indra/newview/skins/minimal/xui/pt/menu_object_icon.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7af760a6ee4c7ed140fd8bdf3eba2254dd1eed70
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_object_icon.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Object Icon Menu">
+	<menu_item_call label="Perfil do objeto..." name="Object Profile"/>
+	<menu_item_call label="Bloquear..." name="Block"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_outfit_gear.xml b/indra/newview/skins/minimal/xui/pt/menu_outfit_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..11b3e653c66cc3b5734c5b3dfbadf97a81b5accb
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_outfit_gear.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear Outfit">
+	<menu_item_call label="Vestir - Substituir look atual" name="wear"/>
+	<menu_item_call label="Vestir - Adicionar ao look atual" name="wear_add"/>
+	<menu_item_call label="Tirar - Tirar do look atual" name="take_off"/>
+	<menu label="Roupas novas" name="New Clothes">
+		<menu_item_call label="Nova camisa" name="New Shirt"/>
+		<menu_item_call label="Novas calças" name="New Pants"/>
+		<menu_item_call label="Novos sapatos" name="New Shoes"/>
+		<menu_item_call label="Novas meias" name="New Socks"/>
+		<menu_item_call label="Nova blusa" name="New Jacket"/>
+		<menu_item_call label="Nova saia" name="New Skirt"/>
+		<menu_item_call label="Novas luvas" name="New Gloves"/>
+		<menu_item_call label="Nova camiseta" name="New Undershirt"/>
+		<menu_item_call label="Novas roupa de baixo" name="New Underpants"/>
+		<menu_item_call label="Novo alpha" name="New Alpha"/>
+		<menu_item_call label="Nova tatuagem" name="New Tattoo"/>
+	</menu>
+	<menu label="Nova parte do corpo" name="New Body Parts">
+		<menu_item_call label="Nova silhueta" name="New Shape"/>
+		<menu_item_call label="Nova pele" name="New Skin"/>
+		<menu_item_call label="Novo cabelo" name="New Hair"/>
+		<menu_item_call label="Novos olhos" name="New Eyes"/>
+	</menu>
+	<menu_item_call label="Renomear look" name="rename"/>
+	<menu_item_call label="Excluir visual" name="delete_outfit"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_outfit_tab.xml b/indra/newview/skins/minimal/xui/pt/menu_outfit_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8db5e405b3189a6944c574b0534debceb44e2d02
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_outfit_tab.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit">
+	<menu_item_call label="Vestir - Substituir look atual" name="wear_replace"/>
+	<menu_item_call label="Vestir - Sem tirar look atual" name="wear_add"/>
+	<menu_item_call label="Tirar - Tirar do look atual" name="take_off"/>
+	<menu_item_call label="Editar look" name="edit"/>
+	<menu_item_call label="Renomear look" name="rename"/>
+	<menu_item_call label="Excluir visual" name="delete"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_participant_list.xml b/indra/newview/skins/minimal/xui/pt/menu_participant_list.xml
new file mode 100644
index 0000000000000000000000000000000000000000..01f1d4ef8056fed91145dec7cc822d108a373a2d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_participant_list.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Participant List Context Menu">
+	<menu_item_check label="Ordenar por nome" name="SortByName"/>
+	<menu_item_check label="Ordenar por conversas mais recentes" name="SortByRecentSpeakers"/>
+	<menu_item_call label="Ver perfil" name="View Profile"/>
+	<menu_item_call label="Adicionar amigo..." name="Add Friend"/>
+	<menu_item_call label="MI" name="IM"/>
+	<menu_item_call label="Ligar" name="Call"/>
+	<menu_item_call label="Compartilhar" name="Share"/>
+	<menu_item_call label="Pagar" name="Pay"/>
+	<menu_item_check label="Ver ícones de pessoas" name="View Icons"/>
+	<menu_item_check label="Bloquear voz" name="Block/Unblock"/>
+	<menu_item_check label="Bloquear texto" name="MuteText"/>
+	<context_menu label="Opções do moderador &gt;" name="Moderator Options">
+		<menu_item_check label="Pode bater papo por escrito" name="AllowTextChat"/>
+		<menu_item_call label="Silenciar este participante" name="ModerateVoiceMuteSelected"/>
+		<menu_item_call label="Desfazer silenciar deste participante" name="ModerateVoiceUnMuteSelected"/>
+		<menu_item_call label="Silenciar todos" name="ModerateVoiceMute"/>
+		<menu_item_call label="Desfazer silenciar para todos" name="ModerateVoiceUnmute"/>
+	</context_menu>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_people_friends_view_sort.xml b/indra/newview/skins/minimal/xui/pt/menu_people_friends_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e7c325010fbe40a4ef29a6c2233179cca11ab181
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_people_friends_view_sort.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_check label="Ordenar por nome" name="sort_name"/>
+	<menu_item_check label="Ordenar por status" name="sort_status"/>
+	<menu_item_check label="Ver ícones de pessoas" name="view_icons"/>
+	<menu_item_check label="Autorizações de visualização dadas" name="view_permissions"/>
+	<menu_item_call label="Ver residentes e objetos bloqueados" name="show_blocked_list"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_people_groups.xml b/indra/newview/skins/minimal/xui/pt/menu_people_groups.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9a924ad7b93d23e68b284b160d1345d45b4cafad
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_people_groups.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_call label="Ver dados" name="View Info"/>
+	<menu_item_call label="Bate-papo" name="Chat"/>
+	<menu_item_call label="Ligar" name="Call"/>
+	<menu_item_call label="Ativar" name="Activate"/>
+	<menu_item_call label="Sair" name="Leave"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_people_groups_view_sort.xml b/indra/newview/skins/minimal/xui/pt/menu_people_groups_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..86a9d2263f303840a4bdab8a4b3cf12cc390303c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_people_groups_view_sort.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_check label="Mostrar ícones de grupos" name="Display Group Icons"/>
+	<menu_item_call label="Sair do grupo selecionado" name="Leave Selected Group"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_people_nearby.xml b/indra/newview/skins/minimal/xui/pt/menu_people_nearby.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b446a2fe81af14d3715688e821387716cb052f9a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_people_nearby.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Avatar Context Menu">
+	<menu_item_call label="Ver perfil" name="View Profile"/>
+	<menu_item_call label="Adicionar amigo" name="Add Friend"/>
+	<menu_item_call label="Remover amigo" name="Remove Friend"/>
+	<menu_item_call label="IM" name="IM"/>
+	<menu_item_call label="Ligar" name="Call"/>
+	<menu_item_call label="Mapa" name="Map"/>
+	<menu_item_call label="Compartilhar" name="Share"/>
+	<menu_item_call label="Pagar" name="Pay"/>
+	<menu_item_check label="Bloquear/desbloquear" name="Block/Unblock"/>
+	<menu_item_call label="Teletransportar?" name="teleport"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_people_nearby_multiselect.xml b/indra/newview/skins/minimal/xui/pt/menu_people_nearby_multiselect.xml
new file mode 100644
index 0000000000000000000000000000000000000000..79edb96b1c67aa651c516ec5b5cb7fce0b99b6f3
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_people_nearby_multiselect.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Multi-Selected People Context Menu">
+	<menu_item_call label="Adicionar amigo..." name="Add Friends"/>
+	<menu_item_call label="Remover amigo..." name="Remove Friend"/>
+	<menu_item_call label="MI" name="IM"/>
+	<menu_item_call label="Ligar" name="Call"/>
+	<menu_item_call label="Compartilhar" name="Share"/>
+	<menu_item_call label="Pagar" name="Pay"/>
+	<menu_item_call label="Teletransportar?" name="teleport"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_people_nearby_view_sort.xml b/indra/newview/skins/minimal/xui/pt/menu_people_nearby_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..228ce46a319c9e6909544a3e6c76bdf67ccf2e35
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_people_nearby_view_sort.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_check label="Ordenar por conversas mais recentes" name="sort_by_recent_speakers"/>
+	<menu_item_check label="Ordenar por nome" name="sort_name"/>
+	<menu_item_check label="Ordenar por distância" name="sort_distance"/>
+	<menu_item_check label="Ver ícones de pessoas" name="view_icons"/>
+	<menu_item_call label="Ver residentes e objetos bloqueados" name="show_blocked_list"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_people_recent_view_sort.xml b/indra/newview/skins/minimal/xui/pt/menu_people_recent_view_sort.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f3b89e01cd53534936ae4436a356ce989765e089
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_people_recent_view_sort.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_group_plus">
+	<menu_item_check label="Ordenar por mais recente" name="sort_most"/>
+	<menu_item_check label="Ordenar por nome" name="sort_name"/>
+	<menu_item_check label="Ver ícones de pessoas" name="view_icons"/>
+	<menu_item_call label="Ver residentes e objetos bloqueados" name="show_blocked_list"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_picks.xml b/indra/newview/skins/minimal/xui/pt/menu_picks.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8b9e10fc02a4480bc38287c6c9297b7e82b2c739
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_picks.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Picks">
+	<menu_item_call label="Info" name="pick_info"/>
+	<menu_item_call label="Editar" name="pick_edit"/>
+	<menu_item_call label="Teletransportar" name="pick_teleport"/>
+	<menu_item_call label="Mapa" name="pick_map"/>
+	<menu_item_call label="Excluir" name="pick_delete"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_picks_plus.xml b/indra/newview/skins/minimal/xui/pt/menu_picks_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..95a7c052623144c31f43f65b7b07e31cb632df24
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_picks_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="picks_plus_menu">
+	<menu_item_call label="Adicionar" name="create_pick"/>
+	<menu_item_call label="Novo anúncio" name="create_classified"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_place.xml b/indra/newview/skins/minimal/xui/pt/menu_place.xml
new file mode 100644
index 0000000000000000000000000000000000000000..282ea20a7a198b235c96ed982393c5856dbd17da
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_place.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="place_overflow_menu">
+	<menu_item_call label="Criar marco" name="landmark"/>
+	<menu_item_call label="Criar destaque" name="pick"/>
+	<menu_item_call label="Comprar passe" name="pass"/>
+	<menu_item_call label="Editar" name="edit"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_place_add_button.xml b/indra/newview/skins/minimal/xui/pt/menu_place_add_button.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d099d04f8d683bece5dc024834557a2c3a4f049d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_place_add_button.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_folder_gear">
+	<menu_item_call label="Adicionar pasta" name="add_folder"/>
+	<menu_item_call label="Adicionar marco" name="add_landmark"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_places_gear_folder.xml b/indra/newview/skins/minimal/xui/pt/menu_places_gear_folder.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2059a9ed2d6347a002fd4537b4af55943becbfd1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_places_gear_folder.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_folder_gear">
+	<menu_item_call label="Adicionar marco" name="add_landmark"/>
+	<menu_item_call label="Adicionar pasta" name="add_folder"/>
+	<menu_item_call label="Cortar" name="cut"/>
+	<menu_item_call label="Copiar" name="copy_folder"/>
+	<menu_item_call label="Colar" name="paste"/>
+	<menu_item_call label="Renomear" name="rename"/>
+	<menu_item_call label="Excluir" name="delete"/>
+	<menu_item_call label="Expanda" name="expand"/>
+	<menu_item_call label="Recolher" name="collapse"/>
+	<menu_item_call label="Expandir todas as pastas" name="expand_all"/>
+	<menu_item_call label="Recolher todas as pastas" name="collapse_all"/>
+	<menu_item_check label="Ordenar por data" name="sort_by_date"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_places_gear_landmark.xml b/indra/newview/skins/minimal/xui/pt/menu_places_gear_landmark.xml
new file mode 100644
index 0000000000000000000000000000000000000000..52a9d1373599270c009e8253e2beeb7ecffa9d34
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_places_gear_landmark.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_ladmark_gear">
+	<menu_item_call label="Teletransportar" name="teleport"/>
+	<menu_item_call label="Mais informações" name="more_info"/>
+	<menu_item_call label="Mostrar no mapa" name="show_on_map"/>
+	<menu_item_call label="Adicionar marco" name="add_landmark"/>
+	<menu_item_call label="Adicionar pasta" name="add_folder"/>
+	<menu_item_call label="Cortar" name="cut"/>
+	<menu_item_call label="Copiar marco" name="copy_landmark"/>
+	<menu_item_call label="Copiar SLurl" name="copy_slurl"/>
+	<menu_item_call label="Colar" name="paste"/>
+	<menu_item_call label="Renomear" name="rename"/>
+	<menu_item_call label="Excluir" name="delete"/>
+	<menu_item_call label="Expandir todas as pastas" name="expand_all"/>
+	<menu_item_call label="Recolher todas as pastas" name="collapse_all"/>
+	<menu_item_check label="Ordenar por data" name="sort_by_date"/>
+	<menu_item_call label="Criar destaque" name="create_pick"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_profile_overflow.xml b/indra/newview/skins/minimal/xui/pt/menu_profile_overflow.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d41ecbd75582571bfc0ad7d92e7747ca58a03d9f
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_profile_overflow.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="profile_overflow_menu">
+	<menu_item_call label="Mapa" name="show_on_map"/>
+	<menu_item_call label="Pagar" name="pay"/>
+	<menu_item_call label="Compartilhar" name="share"/>
+	<menu_item_call label="Bloquear" name="block"/>
+	<menu_item_call label="Desbloquear" name="unblock"/>
+	<menu_item_call label="Chutar" name="kick"/>
+	<menu_item_call label="Congelar" name="freeze"/>
+	<menu_item_call label="Descongelar" name="unfreeze"/>
+	<menu_item_call label="CSR" name="csr"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_save_outfit.xml b/indra/newview/skins/minimal/xui/pt/menu_save_outfit.xml
new file mode 100644
index 0000000000000000000000000000000000000000..61c6b9202f777a5b45ef84aebdeb81e8e8d08763
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_save_outfit.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="save_outfit_menu">
+	<menu_item_call label="Salvar" name="save_outfit"/>
+	<menu_item_call label="Salvar como" name="save_as_new_outfit"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_script_chiclet.xml b/indra/newview/skins/minimal/xui/pt/menu_script_chiclet.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ccf3878e1420c7ef1a81c7a1662a95308c27332b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_script_chiclet.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="ScriptChiclet Menu">
+	<menu_item_call label="Fechar" name="Close"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_slurl.xml b/indra/newview/skins/minimal/xui/pt/menu_slurl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6d4c84fc3c378efa94a9ce0e551b7fa38ab43d63
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_slurl.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Popup">
+	<menu_item_call label="Sobre a URL" name="about_url"/>
+	<menu_item_call label="Teletransporte para a URL" name="teleport_to_url"/>
+	<menu_item_call label="Mapa" name="show_on_map"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_teleport_history_gear.xml b/indra/newview/skins/minimal/xui/pt/menu_teleport_history_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f034509be867218aa9b98c6e0589f0c92e5f036d
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_teleport_history_gear.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Teleport History Gear Context Menu">
+	<menu_item_call label="Expandir todas as pastas" name="Expand all folders"/>
+	<menu_item_call label="Recolher todas as pastas" name="Collapse all folders"/>
+	<menu_item_call label="Limpar histórico de teletransporte" name="Clear Teleport History"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_teleport_history_item.xml b/indra/newview/skins/minimal/xui/pt/menu_teleport_history_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ec1e7a0950288a3ad0252f19826f2f10fb83e2eb
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_teleport_history_item.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Teleport History Item Context Menu">
+	<menu_item_call label="Teletransportar" name="Teleport"/>
+	<menu_item_call label="Mais informações" name="More Information"/>
+	<menu_item_call label="Copiar" name="CopyToClipboard"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_teleport_history_tab.xml b/indra/newview/skins/minimal/xui/pt/menu_teleport_history_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6a633cf74ceaf99367799febca6c87459741045b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_teleport_history_tab.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Teleport History Item Context Menu">
+	<menu_item_call label="Abrir" name="TabOpen"/>
+	<menu_item_call label="Fechar" name="TabClose"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_text_editor.xml b/indra/newview/skins/minimal/xui/pt/menu_text_editor.xml
new file mode 100644
index 0000000000000000000000000000000000000000..31c284c6eda0115daf759b1eac6ffc53ef328ce2
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_text_editor.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Text editor context menu">
+	<menu_item_call label="Cortar" name="Cut"/>
+	<menu_item_call label="Copiar" name="Copy"/>
+	<menu_item_call label="Colar" name="Paste"/>
+	<menu_item_call label="Excluir" name="Delete"/>
+	<menu_item_call label="Selecionar tudo" name="Select All"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_topinfobar.xml b/indra/newview/skins/minimal/xui/pt/menu_topinfobar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d9347950b12fe97f9617b9380fd6cff4b50935c1
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_topinfobar.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="menu_topinfobar">
+	<menu_item_check label="Mostrar coordenadas" name="Show Coordinates"/>
+	<menu_item_check label="Mostrar as propriedades do terreno" name="Show Parcel Properties"/>
+	<menu_item_call label="Marco" name="Landmark"/>
+	<menu_item_call label="Copiar" name="Copy"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_url_agent.xml b/indra/newview/skins/minimal/xui/pt/menu_url_agent.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ba5e0551248ad3a397771cffefcf83795d1a3f77
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_url_agent.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Mostrar perfil de residente" name="show_agent"/>
+	<menu_item_call label="Copiar nome para área de transferência" name="url_copy_label"/>
+	<menu_item_call label="Copiar SLurl para área de transferência" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_url_group.xml b/indra/newview/skins/minimal/xui/pt/menu_url_group.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5b67a69c9a1d59c62f645bcea31688040e1ba59c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_url_group.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Mostrar informações do grupo" name="show_group"/>
+	<menu_item_call label="Copiar SLurl para área de transferência" name="url_copy_label"/>
+	<menu_item_call label="Copiar SLurl para área de transferência" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_url_http.xml b/indra/newview/skins/minimal/xui/pt/menu_url_http.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e53a2572b82d976032a0683aff4a406175848cd8
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_url_http.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Abrir página da web" name="url_open"/>
+	<menu_item_call label="Abrir no navegador do SL" name="url_open_internal"/>
+	<menu_item_call label="Abrir no navegador externo" name="url_open_external"/>
+	<menu_item_call label="Copiar URL para área de transferência" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_url_inventory.xml b/indra/newview/skins/minimal/xui/pt/menu_url_inventory.xml
new file mode 100644
index 0000000000000000000000000000000000000000..45c14355d073cd2d7259fddad10e6bcc8c855d4b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_url_inventory.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Mostrar item de inventário" name="show_item"/>
+	<menu_item_call label="Copiar nome para área de transferência" name="url_copy_label"/>
+	<menu_item_call label="Copiar SLurl para área de transferência" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_url_map.xml b/indra/newview/skins/minimal/xui/pt/menu_url_map.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ba114cccaab11fbed0e4c776bc9efacc1e09fca6
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_url_map.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Mostrar no mapa" name="show_on_map"/>
+	<menu_item_call label="Teletransportar para este lugar" name="teleport_to_location"/>
+	<menu_item_call label="Copiar SLurl para área de transferência" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_url_objectim.xml b/indra/newview/skins/minimal/xui/pt/menu_url_objectim.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c19744418150e45814733f21c0e37a743a42f321
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_url_objectim.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Mostrar informações sobre o objeto" name="show_object"/>
+	<menu_item_call label="Mostrar no mapa" name="show_on_map"/>
+	<menu_item_call label="Teletransportar para lugar do objeto" name="teleport_to_object"/>
+	<menu_item_call label="Copiar nome do objeto para área de transferência" name="url_copy_label"/>
+	<menu_item_call label="Copiar SLurl para área de transferência" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_url_parcel.xml b/indra/newview/skins/minimal/xui/pt/menu_url_parcel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6cc668bfd3d5b1d3b33d2043beda189d5044526b
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_url_parcel.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Mostrar informações sobre este lote" name="show_parcel"/>
+	<menu_item_call label="Mostrar no mapa" name="show_on_map"/>
+	<menu_item_call label="Copiar SLurl para área de transferência" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_url_slapp.xml b/indra/newview/skins/minimal/xui/pt/menu_url_slapp.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d0784149acb88c67b0d092f5453644dc4b13a566
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_url_slapp.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Executar este comando" name="run_slapp"/>
+	<menu_item_call label="Copiar SLurl para área de transferência" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_url_slurl.xml b/indra/newview/skins/minimal/xui/pt/menu_url_slurl.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7216ccf0b305119f4842367f948ef69089827bbf
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_url_slurl.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Mostrar informações sobre este lugar" name="show_place"/>
+	<menu_item_call label="Mostrar no mapa" name="show_on_map"/>
+	<menu_item_call label="Teletransportar para este lugar" name="teleport_to_location"/>
+	<menu_item_call label="Copiar SLurl para área de transferência" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_url_teleport.xml b/indra/newview/skins/minimal/xui/pt/menu_url_teleport.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f007425646a9eeab0ac55e97961e6ab48e596120
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_url_teleport.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Url Popup">
+	<menu_item_call label="Teletransportar para este lugar" name="teleport"/>
+	<menu_item_call label="Mostrar no mapa" name="show_on_map"/>
+	<menu_item_call label="Copiar SLurl para área de transferência" name="url_copy"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_viewer.xml b/indra/newview/skins/minimal/xui/pt/menu_viewer.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2bd1e88279ef80777c97b2bc8cbe9b8059a93a16
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_viewer.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu_bar name="Main Menu">
+	<menu label="Ajuda" name="Help">
+		<menu_item_call label="[SECOND_LIFE] Ajuda" name="Second Life Help"/>
+	</menu>
+	<menu label="Avançado" name="Advanced">
+		<menu label="Atalhos" name="Shortcuts">
+			<menu_item_check label="Voar" name="Fly"/>
+			<menu_item_call label="Fechar janela" name="Close Window"/>
+			<menu_item_call label="Fechar todas as janelas" name="Close All Windows"/>
+			<menu_item_call label="Visão padrão" name="Reset View"/>
+		</menu>
+	</menu>
+</menu_bar>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_wearable_list_item.xml b/indra/newview/skins/minimal/xui/pt/menu_wearable_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2487f6779f6306dd610254cce7bb65b0102cb608
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_wearable_list_item.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Outfit Wearable Context Menu">
+	<menu_item_call label="Trocar" name="wear_replace"/>
+	<menu_item_call label="Vestir" name="wear_wear"/>
+	<menu_item_call label="Adicionar" name="wear_add"/>
+	<menu_item_call label="Tirar / Separar" name="take_off_or_detach"/>
+	<menu_item_call label="Separar" name="detach"/>
+	<context_menu label="Colocar em" name="wearable_attach_to"/>
+	<context_menu label="Anexar ao HUD" name="wearable_attach_to_hud"/>
+	<menu_item_call label="Tirar" name="take_off"/>
+	<menu_item_call label="Editar" name="edit"/>
+	<menu_item_call label="Perfil do item" name="object_profile"/>
+	<menu_item_call label="Mostrar original" name="show_original"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_wearing_gear.xml b/indra/newview/skins/minimal/xui/pt/menu_wearing_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7b6ce4d87ec8798c1efd50ad4aebbcddd5f7ce8a
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_wearing_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<menu name="Gear Wearing">
+	<menu_item_call label="Editar look" name="edit"/>
+	<menu_item_call label="Tirar" name="takeoff"/>
+</menu>
diff --git a/indra/newview/skins/minimal/xui/pt/menu_wearing_tab.xml b/indra/newview/skins/minimal/xui/pt/menu_wearing_tab.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4e6e52ebc7010f91d6fe21a9b448eeb45126305c
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/menu_wearing_tab.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<context_menu name="Wearing">
+	<menu_item_call label="Tirar" name="take_off"/>
+	<menu_item_call label="Tirar" name="detach"/>
+	<menu_item_call label="Editar look" name="edit"/>
+</context_menu>
diff --git a/indra/newview/skins/minimal/xui/pt/notifications.xml b/indra/newview/skins/minimal/xui/pt/notifications.xml
new file mode 100644
index 0000000000000000000000000000000000000000..30ba6f68bf2fcff2508ccd7072ccbd8c1d2bf727
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/notifications.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<notifications>
+	<notification name="UserGiveItem">
+		[NAME_SLURL] quer lhe dar [ITEM_SLURL].  Esta ação requer o modo Avançado. Passe para o modo avançado e você verá o item em seu inventário. Para passar para o modo avançado, feche e reinicialize esse aplicativo e mude o modo (indicado na tela de login).
+		<form name="form">
+			<button name="Show" text="Guardar item"/>
+			<button name="Discard" text="Recusar item"/>
+			<button name="Mute" text="Bloquear usuário"/>
+		</form>
+	</notification>
+	<notification name="ObjectGiveItem">
+		Um objeto chamado &lt;nolink&gt;[OBJECTFROMNAME]&lt;/nolink&gt;, de [NAME_SLURL], está lhe oferecendo [ITEM_SLURL].  Esta ação requer o modo Avançado. Passe para o modo Avançado e você verá o item em seu Inventário. Para passar para o modo Avançado, feche e reinicialize esse aplicativo e mude o modo (indicado na tela de login).
+		<form name="form">
+			<button name="Keep" text="Guardar item"/>
+			<button name="Discard" text="Recusar item"/>
+			<button name="Mute" text="Bloquear objeto"/>
+		</form>
+	</notification>
+</notifications>
diff --git a/indra/newview/skins/minimal/xui/pt/panel_adhoc_control_panel.xml b/indra/newview/skins/minimal/xui/pt/panel_adhoc_control_panel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bd50d4953d89da041fc8f3e6591e2fa68d1730fb
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/panel_adhoc_control_panel.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+	<layout_stack name="vertical_stack">
+		<layout_panel name="call_btn_panel">
+			<button label="Ligar" name="call_btn"/>
+		</layout_panel>
+		<layout_panel name="end_call_btn_panel">
+			<button label="Desligar" name="end_call_btn"/>
+		</layout_panel>
+		<layout_panel name="voice_ctrls_btn_panel">
+			<button label="Controles de voz" name="voice_ctrls_btn"/>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/pt/panel_bottomtray.xml b/indra/newview/skins/minimal/xui/pt/panel_bottomtray.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f67823dbd80dfc140b0f20d31f84b7c0eea3a940
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/panel_bottomtray.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="bottom_tray">
+	<string name="DragIndicationImageName" value="Accordion_ArrowOpened_Off"/>
+	<string name="SpeakBtnToolTip" value="Liga e desliga o microfone"/>
+	<string name="VoiceControlBtnToolTip" value="Mostra/oculta os controles de voz"/>
+	<layout_stack name="toolbar_stack">
+		<layout_panel name="gesture_panel">
+			<gesture_combo_list label="Gesto" name="Gesture" tool_tip="Mostra/oculta os gestos"/>
+		</layout_panel>
+		<layout_panel name="cam_panel">
+			<bottomtray_button label="Exibir" name="camera_btn" tool_tip="Mostra/oculta os controles da câmera"/>
+		</layout_panel>
+		<layout_panel name="avatar_and_destinations_panel">
+			<bottomtray_button label="Destinos" name="destination_btn" tool_tip="Exibe janela de pessoas"/>
+		</layout_panel>
+		<layout_panel name="avatar_and_destinations_panel">
+			<bottomtray_button label="Meu avatar" name="avatar_btn"/>
+		</layout_panel>
+		<layout_panel name="people_panel">
+			<bottomtray_button label="Pessoas" name="show_people_button" tool_tip="Exibe as pessoas"/>
+		</layout_panel>
+		<layout_panel name="profile_panel">
+			<bottomtray_button label="Perfil" name="show_profile_btn" tool_tip="Exibe o perfil"/>
+		</layout_panel>
+		<layout_panel name="howto_panel">
+			<bottomtray_button label="Como..." name="show_help_btn" tool_tip="Abrir &quot;Como...&quot; do Second Life"/>
+		</layout_panel>
+		<layout_panel name="im_well_panel">
+			<chiclet_im_well name="im_well">
+				<button name="Unread IM messages" tool_tip="Conversas"/>
+			</chiclet_im_well>
+		</layout_panel>
+		<layout_panel name="notification_well_panel">
+			<chiclet_notification name="notification_well">
+				<button name="Unread" tool_tip="Notificações"/>
+			</chiclet_notification>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/pt/panel_group_control_panel.xml b/indra/newview/skins/minimal/xui/pt/panel_group_control_panel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..177cee28a648d10fb6e28890de05b1eceb365923
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/panel_group_control_panel.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+	<layout_stack name="vertical_stack">
+		<layout_panel name="end_call_btn_panel">
+			<button label="Desligar" name="end_call_btn"/>
+		</layout_panel>
+		<layout_panel name="voice_ctrls_btn_panel">
+			<button label="Abrir controles de voz" name="voice_ctrls_btn"/>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/pt/panel_im_control_panel.xml b/indra/newview/skins/minimal/xui/pt/panel_im_control_panel.xml
new file mode 100644
index 0000000000000000000000000000000000000000..91b7d1b7cd08fefa9eb85d4d9939d11a80a058b9
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/panel_im_control_panel.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_im_control_panel">
+	<layout_stack name="button_stack">
+		<layout_panel name="view_profile_btn_panel">
+			<button label="Perfil" name="view_profile_btn"/>
+		</layout_panel>
+		<layout_panel name="add_friend_btn_panel">
+			<button label="Adicionar amigo" name="add_friend_btn"/>
+		</layout_panel>
+		<layout_panel name="teleport_btn_panel">
+			<button label="Teletransportar" name="teleport_btn" tool_tip="Oferecer teletransporte"/>
+		</layout_panel>
+		<layout_panel name="share_btn_panel">
+			<button label="Compartilhar" name="share_btn"/>
+		</layout_panel>
+		<layout_panel name="pay_btn_panel">
+			<button label="Pagar" name="pay_btn"/>
+		</layout_panel>
+		<layout_panel name="call_btn_panel">
+			<button label="Ligar" name="call_btn"/>
+		</layout_panel>
+		<layout_panel name="end_call_btn_panel">
+			<button label="Encerrar ligação" name="end_call_btn"/>
+		</layout_panel>
+		<layout_panel name="voice_ctrls_btn_panel">
+			<button label="Controles de voz" name="voice_ctrls_btn"/>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/pt/panel_login.xml b/indra/newview/skins/minimal/xui/pt/panel_login.xml
new file mode 100644
index 0000000000000000000000000000000000000000..de9717874f375926e4d46f25a17c74aec5c593f9
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/panel_login.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="panel_login">
+	<panel.string name="create_account_url">
+		http://join.secondlife.com/
+	</panel.string>
+	<panel.string name="forgot_password_url">
+		http://secondlife.com/account/request.php?lang=pt
+	</panel.string>
+	<layout_stack name="login_widgets">
+		<layout_panel name="login">
+			<text name="username_text">
+				Nome de usuário:
+			</text>
+			<combo_box name="username_combo" tool_tip="O nome de usuário que você escolheu ao fazer seu cadastro, como zecazc12 or Magia Solar"/>
+			<text name="password_text">
+				Senha:
+			</text>
+			<check_box label="Lembrar senha" name="remember_check"/>
+			<button label="conectar" name="connect_btn"/>
+			<text name="mode_selection_text">
+				Modo:
+			</text>
+			<combo_box name="mode_combo" tool_tip="Selecione o modo. O modo Básico é mais rápido e ideal para explorar e conversar. Use o modo Avançado para acessar mais recursos.">
+				<combo_box.item label="Básico" name="Basic"/>
+				<combo_box.item label="Avançado" name="Advanced"/>
+			</combo_box>
+		</layout_panel>
+		<layout_panel name="links">
+			<text name="create_new_account_text">
+				Cadastre-se
+			</text>
+			<text name="forgot_password_text">
+				Esqueceu seu nome ou senha?
+			</text>
+			<text name="login_help">
+				Precisa de ajuda ao conectar?
+			</text>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/pt/panel_navigation_bar.xml b/indra/newview/skins/minimal/xui/pt/panel_navigation_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..01930bf3b359fab76b6cca756aa29f9968c37dba
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/panel_navigation_bar.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="navigation_bar">
+	<panel name="navigation_panel">
+		<pull_button name="back_btn" tool_tip="Voltar para região anterior"/>
+		<pull_button name="forward_btn" tool_tip="Avançar uma região"/>
+		<button name="home_btn" tool_tip="Teletransportar para meu início"/>
+		<location_input label="Onde" name="location_combo"/>
+		<search_combo_box label="Busca" name="search_combo_box" tool_tip="Busca">
+			<combo_editor label="Buscar no [SECOND_LIFE]" name="search_combo_editor"/>
+		</search_combo_box>
+	</panel>
+	<favorites_bar name="favorite" tool_tip="Arraste marcos para cá para acessar seus lugares preferidos do Second Life!">
+		<label name="favorites_bar_label" tool_tip="Arraste marcos para cá para acessar seus lugares preferidos do Second Life!">
+			Barra Destaques
+		</label>
+		<chevron_button name="&gt;&gt;" tool_tip="Mostrar mais favoritos"/>
+	</favorites_bar>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/pt/panel_people.xml b/indra/newview/skins/minimal/xui/pt/panel_people.xml
new file mode 100644
index 0000000000000000000000000000000000000000..935ade2177b838ed4f04ed7d898be7f2a8de6c57
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/panel_people.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!-- Side tray panel -->
+<panel label="Pessoas" name="people_panel">
+	<string name="no_recent_people" value="Ninguém, recentemente. Em busca de alguém para conversar? Confira o botão Destinos abaixo."/>
+	<string name="no_filtered_recent_people" value="Não há ninguém com esse nome ultimamente."/>
+	<string name="no_one_near" value="Ninguém por perto Em busca de alguém para conversar? Confira o botão Destinos abaixo."/>
+	<string name="no_one_filtered_near" value="Não há ninguém com esse nome por perto."/>
+	<string name="no_friends_online" value="Nenhum amigo online"/>
+	<string name="no_friends" value="Nenhum amigo"/>
+	<string name="no_friends_msg">
+		Clique em um residente com o botão direito to mouse para adicioná-lo como amigo.
+Em busca de alguém para conversar? Confira o botão Destinos abaixo.
+	</string>
+	<string name="no_filtered_friends_msg">
+		Não encontrou o que procura? Confira o botão Destinos abaixo.
+	</string>
+	<string name="people_filter_label" value="Filtro de pessoas"/>
+	<string name="groups_filter_label" value="Filtro de grupos"/>
+	<string name="no_filtered_groups_msg" value="Não encontrou o que procura? Tente buscar no [secondlife:///app/search/groups/[SEARCH_TERM] Search]."/>
+	<string name="no_groups_msg" value="À procura de grupos interessantes? Tente fazer uma [secondlife:///app/search/groups Busca]."/>
+	<string name="MiniMapToolTipMsg" value="[REGION](Clique duplo para abrir o Mapa, botão Shift e arrastar para ver mais)"/>
+	<string name="AltMiniMapToolTipMsg" value="[REGION](Clique duplo para se teletransportar, botão Shift e arrastar para ver mais)"/>
+	<filter_editor label="Filtro" name="filter_input"/>
+	<tab_container name="tabs">
+		<panel label="PROXIMIDADE" name="nearby_panel">
+			<panel label="bottom_panel" name="bottom_panel"/>
+		</panel>
+		<panel label="MEUS AMIGOS" name="friends_panel">
+			<accordion name="friends_accordion">
+				<accordion_tab name="tab_online" title="Online"/>
+				<accordion_tab name="tab_all" title="Todos"/>
+			</accordion>
+			<panel label="bottom_panel" name="bottom_panel">
+				<layout_stack name="bottom_panel">
+					<layout_panel name="trash_btn_panel">
+						<dnd_button name="del_btn" tool_tip="Remover a pessoa selecionada da sua lista de amigos"/>
+					</layout_panel>
+				</layout_stack>
+			</panel>
+		</panel>
+		<panel label="RECENTE" name="recent_panel">
+			<panel label="bottom_panel" name="bottom_panel">
+				<button name="add_friend_btn" tool_tip="Adicionar o residente selecionado para sua lista de amigos"/>
+			</panel>
+		</panel>
+	</tab_container>
+	<panel name="button_bar">
+		<layout_stack name="bottom_bar_ls">
+			<layout_panel name="view_profile_btn_lp">
+				<button label="Perfil" name="view_profile_btn" tool_tip="Exibir fotografia, grupos e outras informações dos residentes"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="MI" name="im_btn" tool_tip="Abrir sessão de mensagem instantânea"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Teletransportar" name="teleport_btn" tool_tip="Oferecer teletransporte"/>
+			</layout_panel>
+		</layout_stack>
+		<layout_stack name="bottom_bar_ls1">
+			<layout_panel name="group_info_btn_lp">
+				<button label="Perfil do grupo" name="group_info_btn" tool_tip="Exibir dados do grupo"/>
+			</layout_panel>
+			<layout_panel name="chat_btn_lp">
+				<button label="Bate-papo de grupo" name="chat_btn" tool_tip="Nova sessão de bate-papo"/>
+			</layout_panel>
+			<layout_panel name="group_call_btn_lp">
+				<button label="Ligar para o grupo" name="group_call_btn" tool_tip="Ligar para este grupo"/>
+			</layout_panel>
+		</layout_stack>
+	</panel>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/pt/panel_side_tray_tab_caption.xml b/indra/newview/skins/minimal/xui/pt/panel_side_tray_tab_caption.xml
new file mode 100644
index 0000000000000000000000000000000000000000..09444a55356daa0efdf082e911f693d56956edf9
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/panel_side_tray_tab_caption.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="sidetray_tab_panel">
+	<text name="sidetray_tab_title" value="Bandeja lateral"/>
+	<button name="undock" tool_tip="Soltar janela"/>
+	<button name="dock" tool_tip="Ancorar janela"/>
+	<button name="show_help" tool_tip="Mostrar ajuda"/>
+</panel>
diff --git a/indra/newview/skins/minimal/xui/pt/panel_status_bar.xml b/indra/newview/skins/minimal/xui/pt/panel_status_bar.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f7890ae57d6b62e6b1b2289757730f69cb2fb2ff
--- /dev/null
+++ b/indra/newview/skins/minimal/xui/pt/panel_status_bar.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="status">
+	<panel.string name="StatBarDaysOfWeek">
+		Domingo:Segunda-feira:Terça-feira:Quarta-feira:Quinta-feira:Sexta-feira:Sábado
+	</panel.string>
+	<panel.string name="StatBarMonthsOfYear">
+		Janeiro:Fevereiro:Março:Abril:Maio:Junho:Julho:Agosto:Setembro:Outubro:Novembro:Dezembro
+	</panel.string>
+	<panel.string name="packet_loss_tooltip">
+		Perda de pacote
+	</panel.string>
+	<panel.string name="bandwidth_tooltip">
+		Banda
+	</panel.string>
+	<panel.string name="time">
+		[hour12, datetime, slt]:[min, datetime, slt] [ampm, datetime, slt] [timezone,datetime, slt]
+	</panel.string>
+	<panel.string name="timeTooltip">
+		[weekday, datetime, slt], [day, datetime, slt] [month, datetime, slt] [year, datetime, slt]
+	</panel.string>
+	<panel.string name="buycurrencylabel">
+		L$ [AMT]
+	</panel.string>
+	<panel name="balance_bg">
+		<text name="balance" tool_tip="Atualizar saldo de L$" value="L$20"/>
+		<button label="Comprar L$" name="buyL" tool_tip="Comprar mais L$"/>
+	</panel>
+	<text name="TimeText" tool_tip="Hora atual (Pacífico)">
+		24:00 AM PST
+	</text>
+	<button name="media_toggle_btn" tool_tip="Tocar/Pausar todas mídias (música, vídeo, páginas web)"/>
+	<button name="volume_btn" tool_tip="Volume geral"/>
+</panel>
diff --git a/indra/newview/tests/llremoteparcelrequest_test.cpp b/indra/newview/tests/llremoteparcelrequest_test.cpp
index 7862cce3a1de667ec909a8f26751c9f55a64dd36..9a6e08ee840e3adb99a024f3b74561dae119961e 100644
--- a/indra/newview/tests/llremoteparcelrequest_test.cpp
+++ b/indra/newview/tests/llremoteparcelrequest_test.cpp
@@ -61,8 +61,8 @@ void LLMessageSystem::addUUIDFast(char const *,LLUUID const &) { }
 void LLMessageSystem::nextBlockFast(char const *) { }
 void LLMessageSystem::newMessage(char const *) { }
 LLMessageSystem * gMessageSystem;
-char * _PREHASH_AgentID;
-char * _PREHASH_AgentData;
+char const* const _PREHASH_AgentID = 0;   // never dereferenced during this test
+char const* const _PREHASH_AgentData = 0; // never dereferenced during this test
 LLAgent gAgent;
 LLAgent::LLAgent() : mAgentAccess(s_saved_settings) { }
 LLAgent::~LLAgent() { }
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 1722c84d342831e2d03384f056581484a267b377..f671c770ea8804604cda99d5671b67dc5fd09e70 100644
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -221,22 +221,25 @@ def test_for_no_msvcrt_manifest_and_copy_action(self, src, dst):
         else:
             print "Doesn't exist:", src
         
-    def enable_crt_manifest_check(self):
-        if self.is_packaging_viewer():
-           WindowsManifest.copy_action = WindowsManifest.test_msvcrt_and_copy_action
+    ### DISABLED MANIFEST CHECKING for vs2010.  we may need to reenable this
+    # shortly.  If this hasn't been reenabled by the 2.9 viewer release then it
+    # should be deleted -brad
+    #def enable_crt_manifest_check(self):
+    #    if self.is_packaging_viewer():
+    #       WindowsManifest.copy_action = WindowsManifest.test_msvcrt_and_copy_action
 
-    def enable_no_crt_manifest_check(self):
-        if self.is_packaging_viewer():
-            WindowsManifest.copy_action = WindowsManifest.test_for_no_msvcrt_manifest_and_copy_action
+    #def enable_no_crt_manifest_check(self):
+    #    if self.is_packaging_viewer():
+    #        WindowsManifest.copy_action = WindowsManifest.test_for_no_msvcrt_manifest_and_copy_action
 
-    def disable_manifest_check(self):
-        if self.is_packaging_viewer():
-            del WindowsManifest.copy_action
+    #def disable_manifest_check(self):
+    #    if self.is_packaging_viewer():
+    #        del WindowsManifest.copy_action
 
     def construct(self):
         super(WindowsManifest, self).construct()
 
-        self.enable_crt_manifest_check()
+        #self.enable_crt_manifest_check()
 
         if self.is_packaging_viewer():
             # Find secondlife-bin.exe in the 'configuration' dir, then rename it to the result of final_exe.
@@ -247,7 +250,7 @@ def construct(self):
                                'llplugin', 'slplugin', self.args['configuration'], "slplugin.exe"),
                   "slplugin.exe")
         
-        self.disable_manifest_check()
+        #self.disable_manifest_check()
 
         self.path(src="../viewer_components/updater/scripts/windows/update_install.bat", dst="update_install.bat")
 
@@ -255,7 +258,7 @@ def construct(self):
         if self.prefix(src=os.path.join(os.pardir, 'sharedlibs', self.args['configuration']),
                        dst=""):
 
-            self.enable_crt_manifest_check()
+            #self.enable_crt_manifest_check()
 
             # Get llcommon and deps. If missing assume static linkage and continue.
             try:
@@ -267,7 +270,7 @@ def construct(self):
                 print err.message
                 print "Skipping llcommon.dll (assuming llcommon was linked statically)"
 
-            self.disable_manifest_check()
+            #self.disable_manifest_check()
 
             # Get fmod dll, continue if missing
             try:
@@ -284,13 +287,11 @@ def construct(self):
             # These need to be installed as a SxS assembly, currently a 'private' assembly.
             # See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx
             if self.args['configuration'].lower() == 'debug':
-                self.path("msvcr80d.dll")
-                self.path("msvcp80d.dll")
-                self.path("Microsoft.VC80.DebugCRT.manifest")
+                 self.path("msvcr100d.dll")
+                 self.path("msvcp100d.dll")
             else:
-                self.path("msvcr80.dll")
-                self.path("msvcp80.dll")
-                self.path("Microsoft.VC80.CRT.manifest")
+                 self.path("msvcr100.dll")
+                 self.path("msvcp100.dll")
 
             # Vivox runtimes
             self.path("SLVoice.exe")
@@ -300,6 +301,10 @@ def construct(self):
             self.path("zlib1.dll")
             self.path("vivoxplatform.dll")
             self.path("vivoxoal.dll")
+            
+            # Security
+            self.path("ssleay32.dll")
+            self.path("libeay32.dll")
 
             # For google-perftools tcmalloc allocator.
             try:
@@ -316,10 +321,7 @@ def construct(self):
         self.path("featuretable.txt")
         self.path("featuretable_xp.txt")
 
-        # For use in crash reporting (generates minidumps)
-        self.path("dbghelp.dll")
-
-        self.enable_no_crt_manifest_check()
+        #self.enable_no_crt_manifest_check()
         
         # Media plugins - QuickTime
         if self.prefix(src='../media_plugins/quicktime/%s' % self.args['configuration'], dst="llplugin"):
@@ -332,13 +334,13 @@ def construct(self):
             self.end_prefix()
 
         # winmm.dll shim
-        if self.prefix(src='../media_plugins/winmmshim/%s' % self.args['configuration'], dst="llplugin"):
+        if self.prefix(src='../media_plugins/winmmshim/%s' % self.args['configuration'], dst=""):
             self.path("winmm.dll")
             self.end_prefix()
 
 
         if self.args['configuration'].lower() == 'debug':
-            if self.prefix(src=os.path.join(os.pardir, os.pardir, 'libraries', 'i686-win32', 'lib', 'debug'),
+            if self.prefix(src=os.path.join(os.pardir, 'packages', 'lib', 'debug'),
                            dst="llplugin"):
                 self.path("libeay32.dll")
                 self.path("qtcored4.dll")
@@ -369,7 +371,7 @@ def construct(self):
 
                 self.end_prefix()
         else:
-            if self.prefix(src=os.path.join(os.pardir, os.pardir, 'libraries', 'i686-win32', 'lib', 'release'),
+            if self.prefix(src=os.path.join(os.pardir, 'packages', 'lib', 'release'),
                            dst="llplugin"):
                 self.path("libeay32.dll")
                 self.path("qtcore4.dll")
@@ -400,7 +402,7 @@ def construct(self):
 
                 self.end_prefix()
 
-        self.disable_manifest_check()
+        #self.disable_manifest_check()
 
         # pull in the crash logger and updater from other projects
         # tag:"crash-logger" here as a cue to the exporter
@@ -568,7 +570,7 @@ def construct(self):
             self.path("Info-SecondLife.plist", dst="Info.plist")
 
             # copy additional libs in <bundle>/Contents/MacOS/
-            self.path("../../libraries/universal-darwin/lib_release/libndofdev.dylib", dst="MacOS/libndofdev.dylib")
+            self.path("../packages/lib/release/libndofdev.dylib", dst="Resources/libndofdev.dylib")
 
             self.path("../viewer_components/updater/scripts/darwin/update_install", "MacOS/update_install")
 
@@ -610,15 +612,7 @@ def construct(self):
                 self.path("uk.lproj")
                 self.path("zh-Hans.lproj")
 
-                # SLVoice and vivox lols
-                self.path("vivox-runtime/universal-darwin/libsndfile.dylib", "libsndfile.dylib")
-                self.path("vivox-runtime/universal-darwin/libvivoxoal.dylib", "libvivoxoal.dylib")
-                self.path("vivox-runtime/universal-darwin/libortp.dylib", "libortp.dylib")
-                self.path("vivox-runtime/universal-darwin/libvivoxsdk.dylib", "libvivoxsdk.dylib")
-                self.path("vivox-runtime/universal-darwin/libvivoxplatform.dylib", "libvivoxplatform.dylib")
-                self.path("vivox-runtime/universal-darwin/SLVoice", "SLVoice")
-
-                libdir = "../../libraries/universal-darwin/lib_release"
+                libdir = "../packages/lib/release"
                 dylibs = {}
 
                 # Need to get the llcommon dll from any of the build directories as well
@@ -638,13 +632,18 @@ def construct(self):
                     dylibs[lib] = True
 
                 if dylibs["llcommon"]:
-                    for libfile in ("libapr-1.0.3.7.dylib",
-                                    "libaprutil-1.0.3.8.dylib",
-                                    "libexpat.0.5.0.dylib",
+                    for libfile in ("libapr-1.0.dylib",
+                                    "libaprutil-1.0.dylib",
+                                    "libexpat.1.5.2.dylib",
                                     "libexception_handler.dylib",
                                     ):
                         self.path(os.path.join(libdir, libfile), libfile)
 
+                # SLVoice and vivox lols
+                for libfile in ('libsndfile.dylib', 'libvivoxoal.dylib', 'libortp.dylib', \
+                    'libvivoxsdk.dylib', 'libvivoxplatform.dylib', 'SLVoice') :
+                     self.path(os.path.join(libdir, libfile), libfile)
+                
                 try:
                     # FMOD for sound
                     self.path(self.args['configuration'] + "/libfmodwrapper.dylib", "libfmodwrapper.dylib")
@@ -664,9 +663,9 @@ def construct(self):
                     mac_updater_res_path = self.dst_path_of("mac-updater.app/Contents/Resources")
                     slplugin_res_path = self.dst_path_of("SLPlugin.app/Contents/Resources")
                     for libfile in ("libllcommon.dylib",
-                                    "libapr-1.0.3.7.dylib",
-                                    "libaprutil-1.0.3.8.dylib",
-                                    "libexpat.0.5.0.dylib",
+                                    "libapr-1.0.dylib",
+                                    "libaprutil-1.0.dylib",
+                                    "libexpat.1.5.2.dylib",
                                     "libexception_handler.dylib",
                                     ):
                         target_lib = os.path.join('../../..', libfile)
@@ -687,7 +686,7 @@ def construct(self):
                 if self.prefix(src="", dst="llplugin"):
                     self.path("../media_plugins/quicktime/" + self.args['configuration'] + "/media_plugin_quicktime.dylib", "media_plugin_quicktime.dylib")
                     self.path("../media_plugins/webkit/" + self.args['configuration'] + "/media_plugin_webkit.dylib", "media_plugin_webkit.dylib")
-                    self.path("../../libraries/universal-darwin/lib_release/libllqtwebkit.dylib", "libllqtwebkit.dylib")
+                    self.path("../packages/lib/release/libllqtwebkit.dylib", "libllqtwebkit.dylib")
 
                     self.end_prefix("llplugin")
 
@@ -803,7 +802,7 @@ def package_finish(self):
                 self.run_command('SetFile -a V %r' % pathname)
 
             # Create the alias file (which is a resource file) from the .r
-            self.run_command('rez %r -o %r' %
+            self.run_command('Rez %r -o %r' %
                              (self.src_path_of("installers/darwin/release-dmg/Applications-alias.r"),
                               os.path.join(volpath, "Applications")))
 
@@ -927,21 +926,36 @@ class Linux_i686Manifest(LinuxManifest):
     def construct(self):
         super(Linux_i686Manifest, self).construct()
 
-        if self.prefix("../../libraries/i686-linux/lib_release_client", dst="lib"):
+        if self.prefix("../packages/lib/release", dst="lib"):
+            self.path("libapr-1.so")
             self.path("libapr-1.so.0")
+            self.path("libapr-1.so.0.4.2")
+            self.path("libaprutil-1.so")
             self.path("libaprutil-1.so.0")
-            self.path("libbreakpad_client.so.0.0.0", "libbreakpad_client.so.0")
-            self.path("libdb-4.2.so")
-            self.path("libcrypto.so.0.9.7")
-            self.path("libexpat.so.1")
-            self.path("libssl.so.0.9.7")
-            self.path("libuuid.so.1")
-            self.path("libSDL-1.2.so.0")
-            self.path("libELFIO.so")
-            self.path("libopenjpeg.so.1.3.0", "libopenjpeg.so.1.3")
+            self.path("libaprutil-1.so.0.3.10")
+            self.path("libbreakpad_client.so.0.0.0")
+            self.path("libbreakpad_client.so.0")
+            self.path("libbreakpad_client.so")
+            self.path("libdb-5.1.so")
+            self.path("libdb-5.so")
+            self.path("libdb.so")
+            self.path("libcrypto.so.1.0.0")
+            self.path("libexpat.so.1.5.2")
+            self.path("libssl.so.1.0.0")
+            self.path("libuuid.so")
+            self.path("libuuid.so.16")
+            self.path("libuuid.so.16.0.22")
+            self.path("libSDL-1.2.so.0.11.3")
+            self.path("libdirectfb-1.4.so.5.0.4")
+            self.path("libfusion-1.4.so.5.0.4")
+            self.path("libdirect-1.4.so.5.0.4")
+            self.path("libopenjpeg.so.1.4.0")
+            self.path("libopenjpeg.so.1")
+            self.path("libopenjpeg.so")
             self.path("libalut.so")
             self.path("libopenal.so", "libopenal.so.1")
             self.path("libopenal.so", "libvivoxoal.so.1") # vivox's sdk expects this soname
+            self.path("libfontconfig.so.1.4.4")
             try:
                     self.path("libfmod-3.75.so")
                     pass
@@ -951,10 +965,10 @@ def construct(self):
             self.end_prefix("lib")
 
             # Vivox runtimes
-            if self.prefix(src="vivox-runtime/i686-linux", dst="bin"):
+            if self.prefix(src="../packages/lib/release", dst="bin"):
                     self.path("SLVoice")
                     self.end_prefix()
-            if self.prefix(src="vivox-runtime/i686-linux", dst="lib"):
+            if self.prefix(src="../packages/lib/release", dst="lib"):
                     self.path("libortp.so")
                     self.path("libsndfile.so.1")
                     #self.path("libvivoxoal.so.1") # no - we'll re-use the viewer's own OpenAL lib
diff --git a/indra/test_apps/llplugintest/CMakeLists.txt b/indra/test_apps/llplugintest/CMakeLists.txt
index 02d7031b81834622d0fef264202556f2ccf43e3f..1211bb7e5a35bb1724bd52c7de0b5c5f117138bf 100644
--- a/indra/test_apps/llplugintest/CMakeLists.txt
+++ b/indra/test_apps/llplugintest/CMakeLists.txt
@@ -378,8 +378,8 @@ endif (DARWIN OR WINDOWS)
 
 if (DARWIN)
   add_custom_command(TARGET llmediaplugintest POST_BUILD
-    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${PLUGINS_DESTINATION_DIR}
-    DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib
+    COMMAND ${CMAKE_COMMAND} -E copy ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib ${PLUGINS_DESTINATION_DIR}
+    DEPENDS ${ARCH_PREBUILT_DIRS_RELEASE}/libllqtwebkit.dylib
   )
 endif (DARWIN)
 
@@ -388,7 +388,7 @@ if(WINDOWS)
   # Plugin test library deploy
   #
   # Debug config runtime files required for the plugin test mule
-  set(plugintest_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug")
+  set(plugintest_debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}")
   set(plugintest_debug_files
     libeay32.dll
     libglib-2.0-0.dll
@@ -411,7 +411,7 @@ if(WINDOWS)
   set(plugin_test_targets ${plugin_test_targets} ${out_targets})
   
   # Debug config runtime files required for the plugin test mule (Qt image format plugins)
-  set(plugintest_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug/imageformats")
+  set(plugintest_debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}/imageformats")
   set(plugintest_debug_files
     qgifd4.dll
     qicod4.dll
@@ -429,7 +429,7 @@ if(WINDOWS)
   set(plugin_test_targets ${plugin_test_targets} ${out_targets})
 
   # Debug config runtime files required for the plugin test mule (Qt codec plugins)
-  set(plugintest_debug_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug/codecs")
+  set(plugintest_debug_src_dir "${ARCH_PREBUILT_DIRS_DEBUG}/codecs")
   set(plugintest_debug_files
     qcncodecsd4.dll
     qjpcodecsd4.dll
@@ -445,7 +445,7 @@ if(WINDOWS)
   set(plugin_test_targets ${plugin_test_targets} ${out_targets})
  
   # Release & ReleaseDebInfo config runtime files required for the plugin test mule
-  set(plugintest_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release")
+  set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
   set(plugintest_release_files
     libeay32.dll
     libglib-2.0-0.dll
@@ -477,7 +477,7 @@ if(WINDOWS)
   set(plugin_test_targets ${plugin_test_targets} ${out_targets})
 
   # Release & ReleaseDebInfo config runtime files required for the plugin test mule (Qt image format plugins)
-  set(plugintest_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release/imageformats")
+  set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}/imageformats")
   set(plugintest_release_files
     qgif4.dll
     qico4.dll
@@ -503,7 +503,7 @@ if(WINDOWS)
   set(plugin_test_targets ${plugin_test_targets} ${out_targets})
 
   # Release & ReleaseDebInfo config runtime files required for the plugin test mule (Qt codec plugins)
-  set(plugintest_release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release/codecs")
+  set(plugintest_release_src_dir "${ARCH_PREBUILT_DIRS_RELEASE}/codecs")
   set(plugintest_release_files
     qcncodecs4.dll  
     qjpcodecs4.dll  
diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp
index e9d4d99753e23800d501f02ae9159721064514bf..884b00f0ccba6f96325047e51614638ffa24eb9d 100644
--- a/indra/test_apps/llplugintest/llmediaplugintest.cpp
+++ b/indra/test_apps/llplugintest/llmediaplugintest.cpp
@@ -4,7 +4,7 @@
  *
  * $LicenseInfo:firstyear=2008&license=viewerlgpl$
  * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2011, Linden Research, Inc.
  * 
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -2154,6 +2154,10 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e
 		}
 		break;
 
+		case MEDIA_EVENT_NAVIGATE_ERROR_PAGE:
+			std::cerr <<  "Media event:  MEDIA_EVENT_NAVIGATE_ERROR_PAGE, uri is: " << self->getClickURL() << std::endl;
+		break;
+			
 		case MEDIA_EVENT_CLICK_LINK_HREF:
 		{
 			std::cerr <<  "Media event:  MEDIA_EVENT_CLICK_LINK_HREF, uri is " << self->getClickURL() << ", target is " << self->getClickTarget() << std::endl;
@@ -2233,7 +2237,13 @@ void LLMediaPluginTest::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent e
 		case MEDIA_EVENT_LINK_HOVERED:
 		{
 			std::cerr <<  "Media event:  MEDIA_EVENT_LINK_HOVERED, hover text is: " << self->getHoverText() << std::endl;
-		};
+		}
+		break;
+
+		default:
+		{
+			std::cerr <<  "Media event:  <unknown>, code is: " << int(event) << std::endl;
+		}
 		break;
 	}
 }
diff --git a/indra/tools/vstool/VSTool.csproj b/indra/tools/vstool/VSTool.csproj
index 24f1031f81b6151db8ea20628ee974ff35d18626..7f431e85c73c2f960115bf0367ea5da103df4559 100644
--- a/indra/tools/vstool/VSTool.csproj
+++ b/indra/tools/vstool/VSTool.csproj
@@ -1,4 +1,5 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
   <PropertyGroup>
     <ProjectType>Local</ProjectType>
     <ProductVersion>8.0.50727</ProductVersion>
@@ -25,6 +26,8 @@
     </FileUpgradeFlags>
     <UpgradeBackupLocation>
     </UpgradeBackupLocation>
+    <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
+    <OldToolsVersion>2.0</OldToolsVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <OutputPath>.\</OutputPath>
diff --git a/indra/tools/vstool/VSTool.exe b/indra/tools/vstool/VSTool.exe
index 6d1497d5e5293408fc3018432382ec00dae438b8..8be428614eb7f89d82a64fae290936eec5fa49a2 100755
Binary files a/indra/tools/vstool/VSTool.exe and b/indra/tools/vstool/VSTool.exe differ
diff --git a/indra/tools/vstool/VSTool.sln b/indra/tools/vstool/VSTool.sln
index 88596718028cca0ba134e2b2cf11ba6c5a81cbdf..21e3d759719228e3bcd8a0f556c020f2fdb8afcb 100644
--- a/indra/tools/vstool/VSTool.sln
+++ b/indra/tools/vstool/VSTool.sln
@@ -1,5 +1,5 @@
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VSTool", "VSTool.csproj", "{96943E2D-1373-4617-A117-D0F997A94919}"
 EndProject
 Global
diff --git a/indra/tools/vstool/main.cs b/indra/tools/vstool/main.cs
index cc268d59d98f5b8a9b5be55d6dfa39bc3e0b0d73..cc73261e30ae1e598107fa080914eaa8d83b3cae 100644
--- a/indra/tools/vstool/main.cs
+++ b/indra/tools/vstool/main.cs
@@ -550,6 +550,11 @@ namespace VSTool
                     case "10.00":
                         version = "VC90";
                         break;
+
+                    case "11.00":
+                        version = "VC100";
+                        break;
+
                     default:
                         throw new ApplicationException("Unknown .sln version: " + format);
                 }
@@ -585,6 +590,11 @@ namespace VSTool
                 case "VC90":
                     progid = "VisualStudio.DTE.9.0";
                     break;
+
+                case "VC100":
+                    progid = "VisualStudio.DTE.10.0";
+                    break;
+
                 default:
                     throw new ApplicationException("Can't handle VS version: " + version);
             }
diff --git a/indra/win_crash_logger/llcrashloggerwindows.cpp b/indra/win_crash_logger/llcrashloggerwindows.cpp
index 354b7e6cc3818f3e7f6327709fa61c4ded70d7d4..51ff754c27af02ce7eac61277b277b2362032e08 100644
--- a/indra/win_crash_logger/llcrashloggerwindows.cpp
+++ b/indra/win_crash_logger/llcrashloggerwindows.cpp
@@ -34,7 +34,6 @@
 
 #include "boost/tokenizer.hpp"
 
-#include "dbghelp.h"
 #include "indra_constants.h"	// CRASH_BEHAVIOR_ASK, CRASH_SETTING_NAME
 #include "llerror.h"
 #include "llfile.h"
diff --git a/install.xml b/install.xml
index 13abaac1c1ce5a6ae5c9eecb3e2c00b2c7e42ad4..9658a4195a52198ec12a7a133961eb8ab1ad3004 100644
--- a/install.xml
+++ b/install.xml
@@ -981,9 +981,9 @@ anguage Infrstructure (CLI) international standard</string>
           <key>darwin</key>
           <map>
             <key>md5sum</key>
-            <string>66c46841825ab4969ec875b5c8f9b24c</string>
+            <string>f07b063cdc207479b111576dc74127f0</string>
             <key>url</key>
-            <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-darwin-qt4.7.1-20101221.tar.bz2</uri>
+            <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-darwin-qt4.7.1-20110322.tar.bz2</uri>
           </map>
           <key>linux</key>
           <map>
@@ -995,9 +995,9 @@ anguage Infrstructure (CLI) international standard</string>
           <key>windows</key>
           <map>
             <key>md5sum</key>
-            <string>b678c4d18ea8e4fab42b20f8d0b2629a</string>
+            <string>1e66b1ecab911a60ba50b59361ef62e1</string>
             <key>url</key>
-            <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.7.1-20101221.tar.bz2</uri>
+            <uri>http://viewer-source-downloads.s3.amazonaws.com/install_pkgs/llqtwebkit-windows-qt4.7.1-20110317.tar.bz2</uri>
           </map>
         </map>
       </map>
diff --git a/scripts/install.py b/scripts/install.py
deleted file mode 100755
index d3bdf52283778899aab8476a71862f012389bb20..0000000000000000000000000000000000000000
--- a/scripts/install.py
+++ /dev/null
@@ -1,1150 +0,0 @@
-#!/usr/bin/env python
-"""\
-@file install.py
-@author Phoenix
-@date 2008-01-27
-@brief Install files into an indra checkout.
-
-Install files as specified by:
-https://wiki.lindenlab.com/wiki/User:Phoenix/Library_Installation
-
-
-$LicenseInfo:firstyear=2007&license=mit$
-
-Copyright (c) 2007-2009, Linden Research, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-$/LicenseInfo$
-"""
-
-import sys
-import os.path
-
-# Look for indra/lib/python in all possible parent directories ...
-# This is an improvement over the setup-path.py method used previously:
-#  * the script may blocated anywhere inside the source tree
-#  * it doesn't depend on the current directory
-#  * it doesn't depend on another file being present.
-
-def add_indra_lib_path():
-    root = os.path.realpath(__file__)
-    # always insert the directory of the script in the search path
-    dir = os.path.dirname(root)
-    if dir not in sys.path:
-        sys.path.insert(0, dir)
-
-    # Now go look for indra/lib/python in the parent dies
-    while root != os.path.sep:
-        root = os.path.dirname(root)
-        dir = os.path.join(root, 'indra', 'lib', 'python')
-        if os.path.isdir(dir):
-            if dir not in sys.path:
-                sys.path.insert(0, dir)
-            return root
-    else:
-        print >>sys.stderr, "This script is not inside a valid installation."
-        sys.exit(1)
-
-base_dir = add_indra_lib_path()
-
-import copy
-import optparse
-import os
-import platform
-import pprint
-import shutil
-import tarfile
-import tempfile
-import urllib2
-import urlparse
-
-try:
-    # Python 2.6
-    from hashlib import md5
-except ImportError:
-    # Python 2.5 and earlier
-    from md5 import new as md5
-
-from indra.base import llsd
-from indra.util import helpformatter
-
-class InstallFile(object):
-    "This is just a handy way to throw around details on a file in memory."
-    def __init__(self, pkgname, url, md5sum, cache_dir, platform_path):
-        self.pkgname = pkgname
-        self.url = url
-        self.md5sum = md5sum
-        filename = urlparse.urlparse(url)[2].split('/')[-1]
-        self.filename = os.path.join(cache_dir, filename)
-        self.platform_path = platform_path
-
-    def __str__(self):
-        return "ifile{%s:%s}" % (self.pkgname, self.url)
-
-    def _is_md5sum_match(self):
-        hasher = md5(file(self.filename, 'rb').read())
-        if hasher.hexdigest() == self.md5sum:
-            return  True
-        return False
-
-    def is_match(self, platform):
-        """@brief Test to see if this ifile is part of platform
-        @param platform The target platform. Eg, windows or linux/i686/gcc/3.3
-        @return Returns True if the ifile is in the platform.
-        """
-        if self.platform_path[0] == 'common':
-            return True
-        req_platform_path = platform.split('/')
-        #print "platform:",req_platform_path
-        #print "path:",self.platform_path
-        # to match, every path part much match
-        match_count = min(len(req_platform_path), len(self.platform_path))
-        for ii in range(0, match_count):
-            if req_platform_path[ii] != self.platform_path[ii]:
-                return False
-        #print "match!"
-        return True
-
-    def fetch_local(self):
-        #print "Looking for:",self.filename
-        if not os.path.exists(self.filename):
-            pass
-        elif self.md5sum and not self._is_md5sum_match():
-            print "md5 mismatch:", self.filename
-            os.remove(self.filename)
-        else:
-            print "Found matching package:", self.filename
-            return
-        print "Downloading",self.url,"to local file",self.filename
-        file(self.filename, 'wb').write(urllib2.urlopen(self.url).read())
-        if self.md5sum and not self._is_md5sum_match():
-            raise RuntimeError("Error matching md5 for %s" % self.url)
-
-class LicenseDefinition(object):
-    def __init__(self, definition):
-        #probably looks like:
-        # { text : ...,
-        #   url : ...
-        #   blessed : ...
-        # }
-        self._definition = definition
-
-
-class InstallableDefinition(object):
-    def __init__(self, definition):
-        #probably looks like:
-        # { packages : {platform...},
-        #   copyright : ...
-        #   license : ...
-        #   description: ...
-        # }
-        self._definition = definition
-
-    def _ifiles_from(self, tree, pkgname, cache_dir):
-        return self._ifiles_from_path(tree, pkgname, cache_dir, [])
-
-    def _ifiles_from_path(self, tree, pkgname, cache_dir, path):
-        ifiles = []
-        if 'url' in tree:
-            ifiles.append(InstallFile(
-                pkgname,
-                tree['url'],
-                tree.get('md5sum', None),
-                cache_dir,
-                path))
-        else:
-            for key in tree:
-                platform_path = copy.copy(path)
-                platform_path.append(key)
-                ifiles.extend(
-                    self._ifiles_from_path(
-                        tree[key],
-                        pkgname,
-                        cache_dir,
-                        platform_path))
-        return ifiles
-
-    def ifiles(self, pkgname, platform, cache_dir):
-        """@brief return a list of appropriate InstallFile instances to install
-        @param pkgname The name of the package to be installed, eg 'tut'
-        @param platform The target platform. Eg, windows or linux/i686/gcc/3.3
-        @param cache_dir The directory to cache downloads.
-        @return Returns a list of InstallFiles which are part of this install
-        """
-        if 'packages' not in self._definition:
-            return []
-        all_ifiles = self._ifiles_from(
-            self._definition['packages'],
-            pkgname,
-            cache_dir)
-        if platform == 'all':
-            return all_ifiles
-        #print "Considering", len(all_ifiles), "packages for", pkgname
-        # split into 2 lines because pychecker thinks it might return none.
-        files = [ifile for ifile in all_ifiles if ifile.is_match(platform)]
-        return files
-
-class InstalledPackage(object):
-    def __init__(self, definition):
-        # looks like:
-        # { url1 : { files: [file1,file2,...], md5sum:... },
-        #   url2 : { files: [file1,file2,...], md5sum:... },...
-        # }
-        self._installed = {}
-        for url in definition:
-            self._installed[url] = definition[url]
-
-    def urls(self):
-        return self._installed.keys()
-
-    def files_in(self, url):
-        return self._installed[url].get('files', [])
-
-    def get_md5sum(self, url):
-        return self._installed[url].get('md5sum', None)
-
-    def remove(self, url):
-        self._installed.pop(url)
-
-    def add_files(self, url, files):
-        if url not in self._installed:
-            self._installed[url] = {}
-        self._installed[url]['files'] = files
-
-    def set_md5sum(self, url, md5sum):
-        if url not in self._installed:
-            self._installed[url] = {}
-        self._installed[url]['md5sum'] = md5sum
-
-class Installer(object):
-    def __init__(self, install_filename, installed_filename, dryrun):
-        self._install_filename = install_filename
-        self._install_changed = False
-        self._installed_filename = installed_filename
-        self._installed_changed = False
-        self._dryrun = dryrun
-        self._installables = {}
-        self._licenses = {}
-        self._installed = {}
-        self.load()
-
-    def load(self):
-        if os.path.exists(self._install_filename):
-            install = llsd.parse(file(self._install_filename, 'rb').read())
-            try:
-                for name in install['installables']:
-                    self._installables[name] = InstallableDefinition(
-                        install['installables'][name])
-            except KeyError:
-                pass
-            try:
-                for name in install['licenses']:
-                    self._licenses[name] = LicenseDefinition(install['licenses'][name])
-            except KeyError:
-                pass
-        if os.path.exists(self._installed_filename):
-            installed = llsd.parse(file(self._installed_filename, 'rb').read())
-            try:
-                bins = installed['installables']
-                for name in bins:
-                    self._installed[name] = InstalledPackage(bins[name])
-            except KeyError:
-                pass
-
-    def _write(self, filename, state):
-        print "Writing state to",filename
-        if not self._dryrun:
-            file(filename, 'wb').write(llsd.format_pretty_xml(state))
-
-    def save(self):
-        if self._install_changed:
-            state = {}
-            state['licenses'] = {}
-            for name in self._licenses:
-                state['licenses'][name] = self._licenses[name]._definition
-            #print "self._installables:",self._installables
-            state['installables'] = {}
-            for name in self._installables:
-                state['installables'][name] = \
-                                        self._installables[name]._definition
-            self._write(self._install_filename, state)
-        if self._installed_changed:
-            state = {}
-            state['installables'] = {}
-            bin = state['installables']
-            for name in self._installed:
-                #print "installed:",name,self._installed[name]._installed
-                bin[name] = self._installed[name]._installed
-            self._write(self._installed_filename, state)
-
-    def is_valid_license(self, bin):
-        "@brief retrun true if we have valid license info for installable."
-        installable = self._installables[bin]._definition
-        if 'license' not in installable:
-            print >>sys.stderr, "No license info found for", bin
-            print >>sys.stderr, 'Please add the license with the',
-            print >>sys.stderr, '--add-installable option. See', \
-                                 sys.argv[0], '--help'
-            return False
-        if installable['license'] not in self._licenses:
-            lic = installable['license']
-            print >>sys.stderr, "Missing license info for '" + lic + "'.",
-            print >>sys.stderr, 'Please add the license with the',
-            print >>sys.stderr, '--add-license option. See', sys.argv[0],
-            print >>sys.stderr, '--help'
-            return False
-        return True
-
-    def list_installables(self):
-        "Return a list of all known installables."
-        return sorted(self._installables.keys())
-
-    def detail_installable(self, name):
-        "Return a installable definition detail"
-        return self._installables[name]._definition
-
-    def list_licenses(self):
-        "Return a list of all known licenses."
-        return sorted(self._licenses.keys())
-
-    def detail_license(self, name):
-        "Return a license definition detail"
-        return self._licenses[name]._definition
-
-    def list_installed(self):
-        "Return a list of installed packages."
-        return sorted(self._installed.keys())
-
-    def detail_installed(self, name):
-        "Return file list for specific installed package."
-        filelist = []
-        for url in self._installed[name]._installed.keys():
-            filelist.extend(self._installed[name].files_in(url))
-        return filelist
-
-    def _update_field(self, description, field, value, multiline=False):
-        """Given a block and a field name, add or update it.
-        @param description a dict containing all the details of a description.
-        @param field the name of the field to update.
-        @param value the value of the field to update; if omitted, interview
-                     will ask for value.
-        @param multiline boolean specifying whether field is multiline or not.
-        """
-        if value:
-            description[field] = value
-        else:
-            if field in description:
-                print "Update value for '" + field + "'"
-                print "(Leave blank to keep current value)"
-                print "Current Value:  '" + description[field] + "'"
-            else:
-                print "Specify value for '" + field + "'"
-            if not multiline:
-                new_value = raw_input("Enter New Value: ")
-            else:
-                print "Please enter " + field + ". End input with EOF (^D)."
-                new_value = sys.stdin.read()
-
-            if field in description and not new_value:
-                pass
-            elif new_value:
-                description[field] = new_value
-
-        self._install_changed = True
-        return True
-
-    def _update_installable(self, name, platform, url, md5sum):
-        """Update installable entry with specific package information.
-        @param installable[in,out] a dict containing installable details. 
-        @param platform Platform info, i.e. linux/i686, windows/i686 etc.
-        @param url URL of tar file
-        @param md5sum md5sum of tar file
-        """
-        installable  = self._installables[name]._definition
-        path = platform.split('/')
-        if 'packages' not in  installable:
-            installable['packages'] = {}
-        update = installable['packages']
-        for child in path:
-            if child not in update:
-                update[child] = {}
-            parent = update
-            update = update[child]
-        parent[child]['url'] = llsd.uri(url)
-        parent[child]['md5sum'] = md5sum
-
-        self._install_changed = True
-        return True
-
-
-    def add_installable_package(self, name, **kwargs):
-        """Add an url for a platform path to the installable.
-        @param installable[in,out] a dict containing installable details.
-        """
-        platform_help_str = """\
-Please enter a new package location and url. Some examples:
-common -- specify a package for all platforms
-linux -- specify a package for all arch and compilers on linux
-darwin/universal -- specify a mac os x universal
-windows/i686/vs/2003 -- specify a windows visual studio 2003 package"""
-        if name not in self._installables:
-            print "Error: must add library with --add-installable or " \
-                  +"--add-installable-metadata before using " \
-                  +"--add-installable-package option"
-            return False
-        else:
-            print "Updating installable '" + name + "'."
-        for arg in ('platform', 'url', 'md5sum'):
-            if not kwargs[arg]:
-                if arg == 'platform': 
-                    print platform_help_str
-                kwargs[arg] = raw_input("Package "+arg+":")
-        #path = kwargs['platform'].split('/')
-
-        return self._update_installable(name, kwargs['platform'], 
-                        kwargs['url'], kwargs['md5sum'])
-
-    def add_installable_metadata(self, name, **kwargs):
-        """Interactively add (only) library metadata into install, 
-        w/o adding installable"""
-        if name not in self._installables:
-            print "Adding installable '" + name + "'."
-            self._installables[name] = InstallableDefinition({})
-        else:
-            print "Updating installable '" + name + "'."
-        installable  = self._installables[name]._definition
-        for field in ('copyright', 'license', 'description'):
-            self._update_field(installable, field, kwargs[field])
-        print "Added installable '" + name + "':"
-        pprint.pprint(self._installables[name])
-
-        return True
-
-    def add_installable(self, name, **kwargs):
-        "Interactively pull a new installable into the install"
-        ret_a = self.add_installable_metadata(name, **kwargs)
-        ret_b = self.add_installable_package(name, **kwargs)
-        return (ret_a and ret_b)
-
-    def remove_installable(self, name):
-        self._installables.pop(name)
-        self._install_changed = True
-
-    def add_license(self, name, **kwargs):
-        if name not in self._licenses:
-            print "Adding license '" + name + "'."
-            self._licenses[name] = LicenseDefinition({})
-        else:
-            print "Updating license '" + name + "'."
-        the_license  = self._licenses[name]._definition
-        for field in ('url', 'text'):
-            multiline = False
-            if field == 'text':
-                multiline = True
-            self._update_field(the_license, field, kwargs[field], multiline)
-        self._install_changed = True
-        return True
-
-    def remove_license(self, name):
-        self._licenses.pop(name)
-        self._install_changed = True
-
-    def _uninstall(self, installables):
-        """@brief Do the actual removal of files work.
-        *NOTE: This method is not transactionally safe -- ie, if it
-        raises an exception, internal state may be inconsistent. How
-        should we address this?
-        @param installables The package names to remove
-        """
-        remove_file_list = []
-        for pkgname in installables:
-            for url in self._installed[pkgname].urls():
-                remove_file_list.extend(
-                    self._installed[pkgname].files_in(url))
-                self._installed[pkgname].remove(url)
-                if not self._dryrun:
-                    self._installed_changed = True
-            if not self._dryrun:
-                self._installed.pop(pkgname)
-        remove_dir_set = set()
-        for filename in remove_file_list:
-            print "rm",filename
-            if not self._dryrun:
-                if os.path.lexists(filename):
-                    remove_dir_set.add(os.path.dirname(filename))
-                    try:
-                        os.remove(filename)
-                    except OSError:
-                        # This is just for cleanup, so we don't care
-                        # about normal failures.
-                        pass
-        for dirname in remove_dir_set:
-            try:
-                os.removedirs(dirname)
-            except OSError:
-                # This is just for cleanup, so we don't care about
-                # normal failures.
-                pass
-
-    def uninstall(self, installables, install_dir):
-        """@brief Remove the packages specified.
-        @param installables The package names to remove
-        @param install_dir The directory to work from
-        """
-        print "uninstall",installables,"from",install_dir
-        cwd = os.getcwdu()
-        os.chdir(install_dir)
-        try:
-            self._uninstall(installables)
-        finally:
-            os.chdir(cwd)
-
-    def _build_ifiles(self, platform, cache_dir):
-        """@brief determine what files to install
-        @param platform The target platform. Eg, windows or linux/i686/gcc/3.3
-        @param cache_dir The directory to cache downloads.
-        @return Returns the ifiles to install
-        """
-        ifiles = []
-        for bin in self._installables:
-            ifiles.extend(self._installables[bin].ifiles(bin, 
-                                                         platform, 
-                                                         cache_dir))
-        to_install = []
-        #print "self._installed",self._installed
-        for ifile in ifiles:
-            if ifile.pkgname not in self._installed:
-                to_install.append(ifile)
-            elif ifile.url not in self._installed[ifile.pkgname].urls():
-                to_install.append(ifile)
-            elif ifile.md5sum != \
-                 self._installed[ifile.pkgname].get_md5sum(ifile.url):
-                # *TODO: We may want to uninstall the old version too
-                # when we detect it is installed, but the md5 sum is
-                # different.
-                to_install.append(ifile)
-            else:
-                #print "Installation up to date:",
-                #        ifile.pkgname,ifile.platform_path
-                pass
-        #print "to_install",to_install
-        return to_install
-
-    def _install(self, to_install, install_dir):
-        for ifile in to_install:
-            tar = tarfile.open(ifile.filename, 'r')
-            print "Extracting",ifile.filename,"to",install_dir
-            if not self._dryrun:
-                # *NOTE: try to call extractall, which first appears
-                # in python 2.5. Phoenix 2008-01-28
-                try:
-                    tar.extractall(path=install_dir)
-                except AttributeError:
-                    _extractall(tar, path=install_dir)
-            if ifile.pkgname in self._installed:
-                self._installed[ifile.pkgname].add_files(
-                    ifile.url,
-                    tar.getnames())
-                self._installed[ifile.pkgname].set_md5sum(
-                    ifile.url,
-                    ifile.md5sum)
-            else:
-                # *HACK: this understands the installed package syntax.
-                definition = { ifile.url :
-                               {'files': tar.getnames(),
-                                'md5sum' : ifile.md5sum } }
-                self._installed[ifile.pkgname] = InstalledPackage(definition)
-            self._installed_changed = True
-
-    def install(self, installables, platform, install_dir, cache_dir):
-        """@brief Do the installation for for the platform.
-        @param installables The requested installables to install.
-        @param platform The target platform. Eg, windows or linux/i686/gcc/3.3
-        @param install_dir The root directory to install into. Created
-        if missing.
-        @param cache_dir The directory to cache downloads. Created if
-        missing.
-        """
-        # The ordering of steps in the method is to help reduce the
-        # likelihood that we break something.
-        install_dir = os.path.realpath(install_dir)
-        cache_dir = os.path.realpath(cache_dir)
-        _mkdir(install_dir)
-        _mkdir(cache_dir)
-        to_install = self._build_ifiles(platform, cache_dir)
-
-        # Filter for files which we actually requested to install.
-        to_install = [ifl for ifl in to_install if ifl.pkgname in installables]
-        for ifile in to_install:
-            ifile.fetch_local()
-        self._install(to_install, install_dir)
-
-    def do_install(self, installables, platform, install_dir, cache_dir=None, 
-                   check_license=True, scp=None):
-        """Determine what installables should be installed. If they were
-        passed in on the command line, use them, otherwise install
-        all known installables.
-        """
-        if not cache_dir: 
-            cache_dir = _default_installable_cache()
-        all_installables = self.list_installables()
-        if not len(installables):
-            install_installables = all_installables
-        else:
-            # passed in on the command line. We'll need to verify we
-            # know about them here.
-            install_installables = installables
-            for installable in install_installables:
-                if installable not in all_installables:
-                    raise RuntimeError('Unknown installable: %s' % 
-                                       (installable,))
-        if check_license:
-            # *TODO: check against a list of 'known good' licenses.
-            # *TODO: check for urls which conflict -- will lead to
-            # problems.
-            for installable in install_installables:
-                if not self.is_valid_license(installable):
-                    return 1
-    
-        # Set up the 'scp' handler
-        opener = urllib2.build_opener()
-        scp_or_http = SCPOrHTTPHandler(scp)
-        opener.add_handler(scp_or_http)
-        urllib2.install_opener(opener)
-    
-        # Do the work of installing the requested installables.
-        self.install(
-            install_installables,
-            platform,
-            install_dir,
-            cache_dir)
-        scp_or_http.cleanup()
-    
-    def do_uninstall(self, installables, install_dir):
-        # Do not bother to check license if we're uninstalling.
-        all_installed = self.list_installed()
-        if not len(installables):
-            uninstall_installables = all_installed
-        else:
-            # passed in on the command line. We'll need to verify we
-            # know about them here.
-            uninstall_installables = installables
-            for installable in uninstall_installables:
-                if installable not in all_installed:
-                    raise RuntimeError('Installable not installed: %s' % 
-                                       (installable,))
-        self.uninstall(uninstall_installables, install_dir)
-
-class SCPOrHTTPHandler(urllib2.BaseHandler):
-    """Evil hack to allow both the build system and developers consume
-    proprietary binaries.
-    To use http, export the environment variable:
-    INSTALL_USE_HTTP_FOR_SCP=true
-    """
-    def __init__(self, scp_binary):
-        self._scp = scp_binary
-        self._dir = None
-
-    def scp_open(self, request):
-        #scp:codex.lindenlab.com:/local/share/install_pkgs/package.tar.bz2
-        remote = request.get_full_url()[4:]
-        if os.getenv('INSTALL_USE_HTTP_FOR_SCP', None) == 'true':
-            return self.do_http(remote)
-        try:
-            return self.do_scp(remote)
-        except:
-            self.cleanup()
-            raise
-
-    def do_http(self, remote):
-        url = remote.split(':',1)
-        if not url[1].startswith('/'):
-            # in case it's in a homedir or something
-            url.insert(1, '/')
-        url.insert(0, "http://")
-        url = ''.join(url)
-        print "Using HTTP:",url
-        return urllib2.urlopen(url)
-
-    def do_scp(self, remote):
-        if not self._dir:
-            self._dir = tempfile.mkdtemp()
-        local = os.path.join(self._dir, remote.split('/')[-1:][0])
-        command = []
-        for part in (self._scp, remote, local):
-            if ' ' in part:
-                # I hate shell escaping.
-                part.replace('\\', '\\\\')
-                part.replace('"', '\\"')
-                command.append('"%s"' % part)
-            else:
-                command.append(part)
-        #print "forking:", command
-        rv = os.system(' '.join(command))
-        if rv != 0:
-            raise RuntimeError("Cannot fetch: %s" % remote)
-        return file(local, 'rb')
-
-    def cleanup(self):
-        if self._dir:
-            shutil.rmtree(self._dir)
-
-
-#
-# *NOTE: PULLED FROM PYTHON 2.5 tarfile.py Phoenix 2008-01-28
-#
-def _extractall(tar, path=".", members=None):
-    """Extract all members from the archive to the current working
-       directory and set owner, modification time and permissions on
-       directories afterwards. `path' specifies a different directory
-       to extract to. `members' is optional and must be a subset of the
-       list returned by getmembers().
-    """
-    directories = []
-
-    if members is None:
-        members = tar
-
-    for tarinfo in members:
-        if tarinfo.isdir():
-            # Extract directory with a safe mode, so that
-            # all files below can be extracted as well.
-            try:
-                os.makedirs(os.path.join(path, tarinfo.name), 0777)
-            except EnvironmentError:
-                pass
-            directories.append(tarinfo)
-        else:
-            tar.extract(tarinfo, path)
-
-    # Reverse sort directories.
-    directories.sort(lambda a, b: cmp(a.name, b.name))
-    directories.reverse()
-
-    # Set correct owner, mtime and filemode on directories.
-    for tarinfo in directories:
-        path = os.path.join(path, tarinfo.name)
-        try:
-            tar.chown(tarinfo, path)
-            tar.utime(tarinfo, path)
-            tar.chmod(tarinfo, path)
-        except tarfile.ExtractError, e:
-            if tar.errorlevel > 1:
-                raise
-            else:
-                tar._dbg(1, "tarfile: %s" % e)
-
-
-def _mkdir(directory):
-    "Safe, repeatable way to make a directory."
-    if not os.path.exists(directory):
-        os.makedirs(directory)
-
-def _get_platform():
-    "Return appropriate platform packages for the environment."
-    platform_map = {
-        'darwin': 'darwin',
-        'linux2': 'linux',
-        'win32' : 'windows',
-        'cygwin' : 'windows',
-        'solaris' : 'solaris'
-        }
-    this_platform = platform_map[sys.platform]
-    if this_platform == 'linux':
-        if platform.architecture()[0] == '64bit':
-            # TODO -- someday when install.py accepts a platform of the form 
-            # os/arch/compiler/compiler_version then we can replace the 
-            # 'linux64' platform with 'linux/x86_64/gcc/4.1'
-            this_platform = 'linux'
-    return this_platform
-
-def _getuser():
-    "Get the user"
-    try:
-        # Unix-only.
-        import getpass
-        return getpass.getuser()
-    except ImportError:
-        import ctypes
-        MAX_PATH = 260                  # according to a recent WinDef.h
-        name = ctypes.create_unicode_buffer(MAX_PATH)
-        namelen = ctypes.c_int(len(name)) # len in chars, NOT bytes
-        if not ctypes.windll.advapi32.GetUserNameW(name, ctypes.byref(namelen)):
-            raise ctypes.WinError()
-        return name.value
-
-def _default_installable_cache():
-    """In general, the installable files do not change much, so find a 
-    host/user specific location to cache files."""
-    user = _getuser()
-    cache_dir = "/var/tmp/%s/install.cache" % user
-    if _get_platform() == 'windows':
-        cache_dir = os.path.join(tempfile.gettempdir(), \
-                                 'install.cache.%s' % user)
-    return cache_dir
-
-def parse_args():
-    parser = optparse.OptionParser(
-        usage="usage: %prog [options] [installable1 [installable2...]]",
-        formatter = helpformatter.Formatter(),
-        description="""This script fetches and installs installable packages.
-It also handles uninstalling those packages and manages the mapping between
-packages and their license.
-
-The process is to open and read an install manifest file which specifies
-what files should be installed. For each installable to be installed.
- * make sure it has a license
- * check the installed version
- ** if not installed and needs to be, download and install
- ** if installed version differs, download & install
-
-If no installables are specified on the command line, then the defaut
-behavior is to install all known installables appropriate for the platform
-specified or uninstall all installables if --uninstall is set. You can specify
-more than one installable on the command line.
-
-When specifying a platform, you can specify 'all' to install all
-packages, or any platform of the form:
-
-OS[/arch[/compiler[/compiler_version]]]
-
-Where the supported values for each are:
-OS: darwin, linux, windows, solaris
-arch: i686, x86_64, ppc, universal
-compiler: vs, gcc
-compiler_version: 2003, 2005, 2008, 3.3, 3.4, 4.0, etc.
-
-No checks are made to ensure a valid combination of platform
-parts. Some exmples of valid platforms:
-
-windows
-windows/i686/vs/2005
-linux/x86_64/gcc/3.3
-linux/x86_64/gcc/4.0
-darwin/universal/gcc/4.0
-""")
-    parser.add_option(
-        '--dry-run', 
-        action='store_true',
-        default=False,
-        dest='dryrun',
-        help='Do not actually install files. Downloads will still happen.')
-    parser.add_option(
-        '--install-manifest', 
-        type='string',
-        default=os.path.join(base_dir, 'install.xml'),
-        dest='install_filename',
-        help='The file used to describe what should be installed.')
-    parser.add_option(
-        '--installed-manifest', 
-        type='string',
-        default=os.path.join(base_dir, 'installed.xml'),
-        dest='installed_filename',
-        help='The file used to record what is installed.')
-    parser.add_option(
-        '--export-manifest', 
-        action='store_true',
-        default=False,
-        dest='export_manifest',
-        help="Print the install manifest to stdout and exit.")
-    parser.add_option(
-        '-p', '--platform', 
-        type='string',
-        default=_get_platform(),
-        dest='platform',
-        help="""Override the automatically determined platform. \
-You can specify 'all' to do a installation of installables for all platforms.""")
-    parser.add_option(
-        '--cache-dir', 
-        type='string',
-        default=_default_installable_cache(),
-        dest='cache_dir',
-        help='Where to download files. Default: %s'% \
-             (_default_installable_cache()))
-    parser.add_option(
-        '--install-dir', 
-        type='string',
-        default=base_dir,
-        dest='install_dir',
-        help='Where to unpack the installed files.')
-    parser.add_option(
-        '--list-installed', 
-        action='store_true',
-        default=False,
-        dest='list_installed',
-        help="List the installed package names and exit.")
-    parser.add_option(
-        '--skip-license-check', 
-        action='store_false',
-        default=True,
-        dest='check_license',
-        help="Do not perform the license check.")
-    parser.add_option(
-        '--list-licenses', 
-        action='store_true',
-        default=False,
-        dest='list_licenses',
-        help="List known licenses and exit.")
-    parser.add_option(
-        '--detail-license', 
-        type='string',
-        default=None,
-        dest='detail_license',
-        help="Get detailed information on specified license and exit.")
-    parser.add_option(
-        '--add-license', 
-        type='string',
-        default=None,
-        dest='new_license',
-        help="""Add a license to the install file. Argument is the name of \
-license. Specify --license-url if the license is remote or specify \
---license-text, otherwse the license text will be read from standard \
-input.""")
-    parser.add_option(
-        '--license-url', 
-        type='string',
-        default=None,
-        dest='license_url',
-        help="""Put the specified url into an added license. \
-Ignored if --add-license is not specified.""")
-    parser.add_option(
-        '--license-text', 
-        type='string',
-        default=None,
-        dest='license_text',
-        help="""Put the text into an added license. \
-Ignored if --add-license is not specified.""")
-    parser.add_option(
-        '--remove-license', 
-        type='string',
-        default=None,
-        dest='remove_license',
-        help="Remove a named license.")
-    parser.add_option(
-        '--remove-installable', 
-        type='string',
-        default=None,
-        dest='remove_installable',
-        help="Remove a installable from the install file.")
-    parser.add_option(
-        '--add-installable', 
-        type='string',
-        default=None,
-        dest='add_installable',
-        help="""Add a installable into the install file. Argument is \ 
-the name of the installable to add.""")
-    parser.add_option(
-        '--add-installable-metadata', 
-        type='string',
-        default=None,
-        dest='add_installable_metadata',
-        help="""Add package for library into the install file. Argument is \
-the name of the library to add.""")
-    parser.add_option(
-        '--installable-copyright', 
-        type='string',
-        default=None,
-        dest='installable_copyright',
-        help="""Copyright for specified new package. Ignored if \
---add-installable is not specified.""")
-    parser.add_option(
-        '--installable-license', 
-        type='string',
-        default=None,
-        dest='installable_license',
-        help="""Name of license for specified new package. Ignored if \
---add-installable is not specified.""")
-    parser.add_option(
-        '--installable-description', 
-        type='string',
-        default=None,
-        dest='installable_description',
-        help="""Description for specified new package. Ignored if \
---add-installable is not specified.""")
-    parser.add_option(
-        '--add-installable-package', 
-        type='string',
-        default=None,
-        dest='add_installable_package',
-        help="""Add package for library into the install file. Argument is \
-the name of the library to add.""")
-    parser.add_option(
-        '--package-platform', 
-        type='string',
-        default=None,
-        dest='package_platform',
-        help="""Platform for specified new package. \
-Ignored if --add-installable or --add-installable-package is not specified.""")
-    parser.add_option(
-        '--package-url', 
-        type='string',
-        default=None,
-        dest='package_url',
-        help="""URL for specified package. \
-Ignored if --add-installable or --add-installable-package is not specified.""")
-    parser.add_option(
-        '--package-md5', 
-        type='string',
-        default=None,
-        dest='package_md5',
-        help="""md5sum for new package. \
-Ignored if --add-installable or --add-installable-package is not specified.""")
-    parser.add_option(
-        '--list', 
-        action='store_true',
-        default=False,
-        dest='list_installables',
-        help="List the installables in the install manifest and exit.")
-    parser.add_option(
-        '--detail', 
-        type='string',
-        default=None,
-        dest='detail_installable',
-        help="Get detailed information on specified installable and exit.")
-    parser.add_option(
-        '--detail-installed', 
-        type='string',
-        default=None,
-        dest='detail_installed',
-        help="Get list of files for specified installed installable and exit.")
-    parser.add_option(
-        '--uninstall', 
-        action='store_true',
-        default=False,
-        dest='uninstall',
-        help="""Remove the installables specified in the arguments. Just like \
-during installation, if no installables are listed then all installed \
-installables are removed.""")
-    parser.add_option(
-        '--scp', 
-        type='string',
-        default='scp',
-        dest='scp',
-        help="Specify the path to your scp program.")
-
-    return parser.parse_args()
-
-def main():
-    options, args = parse_args()
-    installer = Installer(
-        options.install_filename,
-        options.installed_filename,
-        options.dryrun)
-
-    #
-    # Handle the queries for information
-    #
-    if options.list_installed:
-        print "installed list:", installer.list_installed()
-        return 0
-    if options.list_installables:
-        print "installable list:", installer.list_installables()
-        return 0
-    if options.detail_installable:
-        try:
-            detail = installer.detail_installable(options.detail_installable)
-            print "Detail on installable",options.detail_installable+":"
-            pprint.pprint(detail)
-        except KeyError:
-            print "Installable '"+options.detail_installable+"' not found in",
-            print "install file."
-        return 0
-    if options.detail_installed:
-        try:
-            detail = installer.detail_installed(options.detail_installed)
-            #print "Detail on installed",options.detail_installed+":"
-            for line in detail:
-                print line
-        except:
-            raise
-            print "Installable '"+options.detail_installed+"' not found in ",
-            print "install file."
-        return 0
-    if options.list_licenses:
-        print "license list:", installer.list_licenses()
-        return 0
-    if options.detail_license:
-        try:
-            detail = installer.detail_license(options.detail_license)
-            print "Detail on license",options.detail_license+":"
-            pprint.pprint(detail)
-        except KeyError:
-            print "License '"+options.detail_license+"' not defined in",
-            print "install file."
-        return 0
-    if options.export_manifest:
-        # *HACK: just re-parse the install manifest and pretty print
-        # it. easier than looking at the datastructure designed for
-        # actually determining what to install
-        install = llsd.parse(file(options.install_filename, 'rb').read())
-        pprint.pprint(install)
-        return 0
-
-    #
-    # Handle updates -- can only do one of these
-    # *TODO: should this change the command line syntax?
-    #
-    if options.new_license:
-        if not installer.add_license(
-            options.new_license,
-            text=options.license_text,
-            url=options.license_url):
-            return 1
-    elif options.remove_license:
-        installer.remove_license(options.remove_license)
-    elif options.remove_installable:
-        installer.remove_installable(options.remove_installable)
-    elif options.add_installable:
-        if not installer.add_installable(
-            options.add_installable,
-            copyright=options.installable_copyright,
-            license=options.installable_license,
-            description=options.installable_description,
-            platform=options.package_platform,
-            url=options.package_url,
-            md5sum=options.package_md5):
-            return 1
-    elif options.add_installable_metadata:
-        if not installer.add_installable_metadata(
-            options.add_installable_metadata,
-            copyright=options.installable_copyright,
-            license=options.installable_license,
-            description=options.installable_description):
-            return 1
-    elif options.add_installable_package:
-        if not installer.add_installable_package(
-            options.add_installable_package,
-            platform=options.package_platform,
-            url=options.package_url,
-            md5sum=options.package_md5):
-            return 1
-    elif options.uninstall:
-        installer.do_uninstall(args, options.install_dir)
-    else:
-        installer.do_install(args, options.platform, options.install_dir, 
-                             options.cache_dir, options.check_license, 
-                             options.scp) 
-
-    # save out any changes
-    installer.save()
-    return 0
-
-if __name__ == '__main__':
-    #print sys.argv
-    sys.exit(main())
diff --git a/scripts/md5check.py b/scripts/md5check.py
old mode 100755
new mode 100644
diff --git a/scripts/messages/message_template.msg b/scripts/messages/message_template.msg
index 77dc940335cd13bad1a72b4ef61500cfebacf8ae..d292653d3f3a3356f90047628891f0ef30ea922e 100644
--- a/scripts/messages/message_template.msg
+++ b/scripts/messages/message_template.msg
@@ -2966,7 +2966,7 @@ version 2.0
 		{	BillableFactor		F32			}
 		{	ObjectBonusFactor 	F32			}
 		{	WaterHeight			F32			}
-		{   TerrainRaiseLimit	F32 		}
+		{	TerrainRaiseLimit	F32 		}
 		{	TerrainLowerLimit	F32 		}
 		{	PricePerMeter 		S32			}
 		{	RedirectGridX 		S32			}
@@ -4242,6 +4242,10 @@ version 2.0
 		Buttons	Variable
 		{	ButtonLabel		Variable	1	}
 	}
+	{
+		OwnerData Variable
+		{	OwnerID		LLUUID	}
+	}
 }
 
 
@@ -6762,6 +6766,8 @@ version 2.0
 }
 
 // And, the money transfer
+// *NOTE: Unused as of 2010-04-06, because all back-end money transactions
+// are done with web services via L$ API.  JC
 {
 	MoneyTransferBackend Low 312 Trusted Zerocoded
 	{
diff --git a/scripts/messages/message_template.msg.sha1 b/scripts/messages/message_template.msg.sha1
new file mode 100644
index 0000000000000000000000000000000000000000..41e70011af9bbd81cdd931893d9e8230b0025b68
--- /dev/null
+++ b/scripts/messages/message_template.msg.sha1
@@ -0,0 +1 @@
+ce3be58f4ea395c272fcfa3e6b6dad027c188e0d
\ No newline at end of file
diff --git a/scripts/template_verifier.py b/scripts/template_verifier.py
index 7f3fed88a92bc1ce2cb72e8f9159ad3f4288ec28..b44410cdd841a124c9ec7156fbffd35ad0bf681f 100644
--- a/scripts/template_verifier.py
+++ b/scripts/template_verifier.py
@@ -66,6 +66,7 @@ def add_indra_lib_path():
 import optparse
 import os
 import urllib
+import hashlib
 
 from indra.ipc import compatibility
 from indra.ipc import tokenstream
@@ -228,11 +229,14 @@ def run(sysargs):
 """)
     parser.add_option(
         '-u', '--master_url', type='string', dest='master_url',
-        default='http://secondlife.com/app/message_template/master_message_template.msg',
+        default='http://bitbucket.org/lindenlab/master-message-template/raw/tip/message_template.msg',
         help="""The url of the master message template.""")
     parser.add_option(
         '-c', '--cache_master', action='store_true', dest='cache_master',
         default=False,  help="""Set to true to attempt use local cached copy of the master template.""")
+    parser.add_option(
+        '-f', '--force', action='store_true', dest='force_verification',
+        default=False, help="""Set to true to skip the sha_1 check and force template verification.""")
 
     options, args = parser.parse_args(sysargs)
 
@@ -269,8 +273,18 @@ def run(sysargs):
         print "current:", current_filename
         current_url = 'file://%s' % current_filename
 
-    # retrieve the contents of the local template and check for syntax
+    # retrieve the contents of the local template
     current = fetch(current_url)
+    hexdigest = hashlib.sha1(current).hexdigest()
+    if not options.force_verification:
+        # Early exist if the template hasn't changed.
+        sha_url = "%s.sha1" % current_url
+        current_sha = fetch(sha_url)
+        if hexdigest == current_sha:
+            print "Message template SHA_1 has not changed."
+            sys.exit(0)
+
+    # and check for syntax
     current_parsed = llmessage.parseTemplateString(current)
 
     if options.cache_master:
@@ -301,6 +315,12 @@ def explain(header, compat):
 
     if acceptable:
         explain("--- PASS ---", compat)
+        if options.force_verification == False:
+            print "Updating sha1 to %s" % hexdigest
+            sha_filename = "%s.sha1" % current_filename
+            sha_file = open(sha_filename, 'w')
+            sha_file.write(hexdigest)
+            sha_file.close()
     else:
         explain("*** FAIL ***", compat)
         return 1