diff --git a/autobuild.xml b/autobuild.xml
index eb3adbbe68042690ffdc9659f2005732ab8364ad..2d5e3171fa99676f12ebb28762d744d3b5b7eb71 100644
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -49,26 +49,16 @@
         <string>apr_suite</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>0c53148aa00e51c06fa246c4130915be</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/apr_3p-update-apr/rev/297252/arch/Darwin/installer/apr_suite-1.4.5.297252-darwin-297252.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>9b8bcc3be6dbe40a04c9c81c313f70dc</string>
+              <string>045acdfadb2d3890f95182ad78bcc5c37d46fb2065982f5e10f69bf8e9319bcb747e8b0bc11268e8065123abe3ebd561</string>
+              <key>hash_algorithm</key>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/68333/658209/apr_suite-1.4.5.548882-darwin64-548882.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/111/packages/generic/apr_suite-668/1.7.0/apr_suite-1.7.0-darwin64-668.tar.xz</string>
             </map>
             <key>name</key>
             <string>darwin64</string>
@@ -78,9 +68,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>84a1a140f20b25d714949185e854d14b</string>
+              <string>7fdeae0b56042a597fb135c677dbf2952dda101a6e8dff326560672cc8637c8ea4bbf19feaefa73b2384ca12d14f6c1b</string>
+              <key>hash_algorithm</key>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/4811/15302/apr_suite-1.4.5.504800-linux64-504800.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/111/packages/generic/apr_suite-668/1.7.0/apr_suite-1.7.0-linux64-668.tar.xz</string>
             </map>
             <key>name</key>
             <string>linux64</string>
@@ -115,7 +107,7 @@
           </map>
         </map>
         <key>version</key>
-        <string>1.4.5.328</string>
+        <string>1.7.0</string>
       </map>
       <key>boost</key>
       <map>
@@ -131,18 +123,6 @@
         <string>boost</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>c296845cad075250c1ae2620f175a957</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/boost_3p-update-boost/rev/297445/arch/Darwin/installer/boost-1.57-darwin-297445.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
@@ -267,18 +247,6 @@
         <string>colladadom</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>726bc31e562752f081e95e8fcc70e405</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/colladadom_3p-update-colladadom/rev/297450/arch/Darwin/installer/colladadom-2.3.297450-darwin-297450.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
@@ -351,18 +319,6 @@
         <string>curl</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>ad0061db7188a1b9a974eb0512eeeb8d</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-curl/rev/312763/arch/Darwin/installer/curl-7.47.0.312763-darwin-312763.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
@@ -555,38 +511,16 @@
         <string>expat</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>452d1910ef853329cd59858e6c5b2c48</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/expat_3p-update-expat/rev/297014/arch/Darwin/installer/expat-2.0.1.297014-darwin-297014.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
-          <key>darwin64</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>3656b7f7b655cb267fd94f089d2e145c</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54860/510198/expat-2.1.1.538990-darwin64-538990.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin64</string>
-          </map>
           <key>linux64</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>5e1f025d1cebd12db542080aa755257f</string>
+              <string>29fa7170d908e84c6b456064ad51f1f9feba11effd12d7c0f9600597fb51085ec4d72eee8473420167568018b3c53282</string>
+              <key>hash_algorithm</key>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/380/943/expat-2.1.1.500375-linux64-500375.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/109/packages/generic/expat-658/2.2.10/expat-2.2.10-linux64-658.tar.xz</string>
             </map>
             <key>name</key>
             <string>linux64</string>
@@ -596,11 +530,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>4f6ce988932eb420afdb4eacd75dbce8</string>
+              <string>af1d89aa93916ee8ef9382f057b47abf31ebc6e44f1f9ecd8bc16193ef40a98669a821c2c0dd3c9368c14630a5144119</string>
               <key>hash_algorithm</key>
-              <string>md5</string>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>https://pkg.alchemyviewer.org/repository/autobuild-external/expat/windows/expat-2.2.9.323-windows-323.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/109/packages/generic/expat-658/2.2.10/expat-2.2.10-windows-658.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -610,18 +544,18 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>49dc81485705a32d345b4af6dab4ac1c</string>
+              <string>b8f16fdb8a3034a0c9ea616bb2ab4950ba88b2e597e92d4d346305ac6fbf4b9b8ff2b44db9696cd499641b80cf6cce28</string>
               <key>hash_algorithm</key>
-              <string>md5</string>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>https://pkg.alchemyviewer.org/repository/autobuild-external/expat/windows64/expat-2.2.9.323-windows64-323.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/109/packages/generic/expat-658/2.2.10/expat-2.2.10-windows64-658.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows64</string>
           </map>
         </map>
         <key>version</key>
-        <string>2.2.9.323</string>
+        <string>2.2.10</string>
       </map>
       <key>fmodstudio</key>
       <map>
@@ -637,30 +571,30 @@
         <string>fmodstudio</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
+          <key>darwin64</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>21610bcca4e2ff76b6483c1faae8b152</string>
+              <string>6102d745784c55c0e119ed1d5503f2db1475fdb0b219f7e5b78f4f142bb832aca9f5799acbde61b6dc357245300e2503</string>
               <key>hash_algorithm</key>
-              <string>md5</string>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>https://pkg.alchemyviewer.org/repository/autobuild-internal/fmodstudio/darwin/fmodstudio-2.00.07.4-darwin-4.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/49/packages/generic/fmodstudio-630/2.01.05/fmodstudio-2.01.05-darwin64-630.tar.xz</string>
             </map>
             <key>name</key>
-            <string>darwin</string>
+            <string>darwin64</string>
           </map>
           <key>linux64</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>fd9fa19902088cbcd4f4806b5868a12d6778767dc28df78f888896f41ec813be4a264ef08e6a2d5cbe03ea73101f575a</string>
+              <string>805a1ea614e3c50930ae788f8f4ee9fc9242d9f74227f5de02468fd91793e320b08caae69d0efd36112ea671b29b7518</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/49/packages/generic/fmodstudio-531/2.01.05/fmodstudio-2.01.05-linux64-531.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/49/packages/generic/fmodstudio-630/2.01.05/fmodstudio-2.01.05-linux64-630.tar.xz</string>
             </map>
             <key>name</key>
             <string>linux64</string>
@@ -670,11 +604,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>10c133dbe2741548c4e8df55b042cdb9a37805fdc97d4584b7790b7fc0b069d3dad465c74851a95a248f53e86b53d54d</string>
+              <string>99a4c03dbcb6f476288f9934a0c2e8b45db790905f0dc67395624cb78949d2cddf3ff46c3fcfa811f261bef90c656126</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/49/packages/generic/fmodstudio-531/2.01.05/fmodstudio-2.01.05-windows-531.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/49/packages/generic/fmodstudio-630/2.01.05/fmodstudio-2.01.05-windows-630.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -684,11 +618,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>85a598e8fdec15eb062050ec99e18f5895089e5d9305976e71a22ae7d47787985887be3065fe8f8e610eec1a75b66138</string>
+              <string>80223c0d181f12dc4870a6b82ba1943724f8411a6f1d49d9195379e6918c7b2298362193fb912bdf2714b808c4f58445</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/49/packages/generic/fmodstudio-531/2.01.05/fmodstudio-2.01.05-windows64-531.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/49/packages/generic/fmodstudio-630/2.01.05/fmodstudio-2.01.05-windows64-630.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows64</string>
@@ -711,18 +645,6 @@
         <string>freetype</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>83618d16d974eb0af93926a10ac13297</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/freetype_3p-update-freetype/rev/297053/arch/Darwin/installer/freetype-2.4.4.297053-darwin-297053.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
@@ -811,28 +733,16 @@
         <string>glod</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>71e678d70e276fc42a56926fc28a7abd</string>
-              <key>hash_algorithm</key>
-              <string>md5</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/glod_3p-update-glod/rev/296895/arch/Darwin/installer/glod-1.0pre4.296895-darwin-296895.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>343913fe1434da228c2210c23d2e3a1a</string>
+              <string>fbc9dbf283606b6511a9e6c70293c12ea3183c4ddb8e1e86533a7ecf9968d95002df708b3dfba380fbc3f4359a873b32</string>
+              <key>hash_algorithm</key>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54850/510134/glod-1.0pre3.538980-darwin64-538980.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/116/packages/generic/glod-648/1.0.3/glod-1.0.3-darwin64-648.tar.xz</string>
             </map>
             <key>name</key>
             <string>darwin64</string>
@@ -842,11 +752,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>bf368ecabce95e2daa6d71c74c09682167508e0e44848dea21ed78a16992b00cccfdb6cf4c31f6994317a3051420b3d9</string>
+              <string>487b26988bc04b6a5d4a5cd75999fad262d1ea3b31d9924e70deaa86e1be8c546aa95ce1fa006cfecd7319035b5c8e3c</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/116/packages/generic/glod-612/1.0.3/glod-1.0.3-linux64-612.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/116/packages/generic/glod-648/1.0.3/glod-1.0.3-linux64-648.tar.xz</string>
             </map>
             <key>name</key>
             <string>linux64</string>
@@ -856,11 +766,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>797a8e468b5fc69b367e8b71c154fe1783ef664bfe7a0502dc1be5c47f1dafb7a9292ff15f8223e9debdb5d30706541a</string>
+              <string>bee660e23463dbad9586d9c925b625807bea691cd3eb116cce6804c9f720775d54382931216673fb30c079cbb695a2e7</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/116/packages/generic/glod-612/1.0.3/glod-1.0.3-windows-612.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/116/packages/generic/glod-648/1.0.3/glod-1.0.3-windows-648.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -870,11 +780,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>3c8eb4e8dfa94cabc1a3948c850f077873d81afce6b0be5cdf22d53014f46ed47c64057f498cfd7dd4882736e392f12f</string>
+              <string>72580aa99a62e3c1162cc4e6710a6561e0b4bb609e3c31357e0bced8d94e258adf5038e0c07d60371f9f749047e7d474</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/116/packages/generic/glod-612/1.0.3/glod-1.0.3-windows64-612.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/116/packages/generic/glod-648/1.0.3/glod-1.0.3-windows64-648.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows64</string>
@@ -925,18 +835,6 @@
         <string>havok-source</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>5c5b4820999ae9e398801d6a46f45897</string>
-              <key>url</key>
-              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/havok-source_3p-update-havok-source/rev/297312/arch/Darwin/installer/havok_source-2012.1-darwin-297312.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
@@ -1003,18 +901,6 @@
         <string>kdu</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>3855bd40f950e3c22739ae8f3ee2afc9</string>
-              <key>url</key>
-              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/ct2/15258/98444/kdu-7.10.4.513518-darwin-513518.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
@@ -1085,16 +971,30 @@
         <string>libepoxy</string>
         <key>platforms</key>
         <map>
+          <key>darwin64</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>9c8631a1cf8e803784c749241278f6b202111e043b62336bb6cf23e54b6aadf7a114431bd86d45e3eee3031ba9f4b1e5</string>
+              <key>hash_algorithm</key>
+              <string>sha3_384</string>
+              <key>url</key>
+              <string>https://git.alchemyviewer.org/api/v4/projects/101/packages/generic/libepoxy-640/1.5.4/libepoxy-1.5.4-darwin64-640.tar.xz</string>
+            </map>
+            <key>name</key>
+            <string>darwin64</string>
+          </map>
           <key>linux64</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>086bc23ed894704f78cd5e5c8760c8d5989ea5950f60d8d8c49eb383e204e4d74469d55d9d7c2ead9d8aa2afe9d59752</string>
+              <string>3563e579c391ab4eb0179dd3ed1bfcc21de712a8f03eb39e0dc40d2cdf3d24184a6b014234b524089e23b313d8aed0d0</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/101/packages/generic/libepoxy-551/1.5.4/libepoxy-1.5.4-linux64-551.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/101/packages/generic/libepoxy-640/1.5.4/libepoxy-1.5.4-linux64-640.tar.xz</string>
             </map>
             <key>name</key>
             <string>linux64</string>
@@ -1104,11 +1004,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>1d2a5026e23d482165d7a490295e15caf9c6111c584b4ffbe195f551074a6f723f2d0dd35ac7b160edb59afff5bd6b29</string>
+              <string>c90213365bb006760385ccfcaaf1acedfff972a819c059300fec135b794eff371359d833dafcdb203cc32168575da24e</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/101/packages/generic/libepoxy-551/1.5.4/libepoxy-1.5.4-windows-551.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/101/packages/generic/libepoxy-640/1.5.4/libepoxy-1.5.4-windows-640.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -1118,11 +1018,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>92874f4f672d5f66845872eba7c05e26a8396a78ec1e31ef6c10938b530298009d9aca51bb83108a78afcab426c98bc3</string>
+              <string>ff3dedc57239ecfc45b97ccdf984e23cc40ee1c22af54527d2d9edade96fe7a7333b72b086622497eca88b49cc68cab1</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/101/packages/generic/libepoxy-551/1.5.4/libepoxy-1.5.4-windows64-551.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/101/packages/generic/libepoxy-640/1.5.4/libepoxy-1.5.4-windows64-640.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows64</string>
@@ -1145,26 +1045,16 @@
         <string>libhunspell</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>05eda16106df26a211f8bdd874d1fca5</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/hunspell_3p-update-hunspell/rev/296916/arch/Darwin/installer/libhunspell-1.3.2.296916-darwin-296916.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>c327e6d6573fc0a808677de47f08acd9</string>
+              <string>4450df2596f2b8248773d2c11080c8137b135bd5e17af4d4d9086d12e77af2affc88cfdb60ded02bd0355737b6287dd6</string>
+              <key>hash_algorithm</key>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54844/510092/libhunspell-1.3.2.538974-darwin64-538974.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/107/packages/generic/libhunspell-654/1.7.0/libhunspell-1.7.0-darwin64-654.tar.xz</string>
             </map>
             <key>name</key>
             <string>darwin64</string>
@@ -1174,11 +1064,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>bd802998bdfe6b1fdaef3092e3eea85e08e7f6da27133d5046812b4efc7505b53419ede488ec34da8660677be5556647</string>
+              <string>b19405654764890352ceb796f40ca56085c7e711e35cd1fb4fb3606d972de0c457698425c33cc36434c2e4a5a30d7ec5</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/107/packages/generic/libhunspell-535/1.7.0/libhunspell-1.7.0-linux64-535.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/107/packages/generic/libhunspell-654/1.7.0/libhunspell-1.7.0-linux64-654.tar.xz</string>
             </map>
             <key>name</key>
             <string>linux64</string>
@@ -1188,11 +1078,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>a3e08aa2140d1126c448b87c176dc4456971f5d3d2bd12dcd2a6ffd40b8686e26be324a5c86ae9147eeeaf14c26be5be</string>
+              <string>4b8b2f04113e39c762b582710fbc65f69e3e37bc5f868868198aea16e75af0b8cb8daa8e26cbe6bd337786bade67355d</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/107/packages/generic/libhunspell-535/1.7.0/libhunspell-1.7.0-windows-535.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/107/packages/generic/libhunspell-654/1.7.0/libhunspell-1.7.0-windows-654.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -1202,11 +1092,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>33d49d97447889e912355ca5db3958ba402b54926e511eb0c673b58be9f97475c9e6fcb4779da2640a0855a1e061cf53</string>
+              <string>0928658489a5010e983ec926ae77ef8a8bee9086b68d8dfc8350cbb5a4202042d8f71abae914c9c9ade8ce1c31225d1c</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/107/packages/generic/libhunspell-535/1.7.0/libhunspell-1.7.0-windows64-535.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/107/packages/generic/libhunspell-654/1.7.0/libhunspell-1.7.0-windows64-654.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows64</string>
@@ -1231,16 +1121,30 @@
         <string>libjpeg-turbo</string>
         <key>platforms</key>
         <map>
+          <key>darwin64</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>06b11aa572faaaf44df739bb46d980546ce69f0cb0983416b813b45b0836b7bd69476a6f948c91081300b87a673e0c6d</string>
+              <key>hash_algorithm</key>
+              <string>sha3_384</string>
+              <key>url</key>
+              <string>https://git.alchemyviewer.org/api/v4/projects/115/packages/generic/libjpeg-turbo-639/2.0.5/libjpeg_turbo-2.0.5-darwin64-639.tar.xz</string>
+            </map>
+            <key>name</key>
+            <string>darwin64</string>
+          </map>
           <key>linux64</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>a37a168d901e5826b616ee94e077bbe416b8f5f4f67322b5d4a846d085d94121f3905c758413c6931d2b98fa347a9a10</string>
+              <string>378bc4580f2382e150368d50412e65a360a76f4bb576fed64cea412ba7c355af9ab7a1f4027117eaf6aed5badec4df24</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/115/packages/generic/libjpeg-turbo-613/2.0.5/libjpeg_turbo-2.0.5-linux64-613.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/115/packages/generic/libjpeg-turbo-639/2.0.5/libjpeg_turbo-2.0.5-linux64-639.tar.xz</string>
             </map>
             <key>name</key>
             <string>linux64</string>
@@ -1250,11 +1154,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>914a5bff9495ab2fe919df3a4b755854cb2ec38e8e25b7ebae9b1fec9da8a6acbf404b09b5d7020af6d20373499f03ca</string>
+              <string>ea7f88129bb341d40408230e34d8cea32d531f9637906506fc5b173b47bf962cc4cbf531a8196a58228feaad419afb82</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/115/packages/generic/libjpeg-turbo-613/2.0.5/libjpeg_turbo-2.0.5-windows-613.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/115/packages/generic/libjpeg-turbo-639/2.0.5/libjpeg_turbo-2.0.5-windows-639.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -1264,11 +1168,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>ea030cef8238a7978b4a030aedecf8f996380e08035beeb8b8fe6a994a4b9f926a910c5418c66eb13b51723d220e8f44</string>
+              <string>97e62aee5f3250031dc9140f8d126a55de3d350eb7233029d8b6b6c06630d5462a9420df626a32170f2f37448dbb6697</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/115/packages/generic/libjpeg-turbo-613/2.0.5/libjpeg_turbo-2.0.5-windows64-613.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/115/packages/generic/libjpeg-turbo-639/2.0.5/libjpeg_turbo-2.0.5-windows64-639.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows64</string>
@@ -1291,26 +1195,16 @@
         <string>libndofdev</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>a01b411433dbf8a4b481de9e76d9a652</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libndofdev_3p-update-libndofdev/rev/297264/arch/Darwin/installer/libndofdev-0.1.297264-darwin-297264.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>bf765dfe0b928ef3c531cd9618fee89b</string>
+              <string>8922b3c06c9bccf5bb6e2cb47fb95f39f022a41ebce10d0de039bf2a28fbe916a11461f4c8c30aa3d5ce86d760933741</string>
+              <key>hash_algorithm</key>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54843/510085/libndofdev-0.1.538973-darwin64-538973.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/117/packages/generic/libndofdev-645/0.1.0/libndofdev-0.1.0-darwin64-645.tar.xz</string>
             </map>
             <key>name</key>
             <string>darwin64</string>
@@ -1320,11 +1214,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>cbb264744a5ef9bc4ae712f6e12037cef4d2f9ab1623550ac9310c1c164bba68220f43abc76ab18365f14bd177e4c5a4</string>
+              <string>d3d2b703280d166b358194395cc7d1c56c3877caec30fa7fbf7f97cc68aa1b249c75fbdaefc420c3b32bb8ec6a547cf3</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/117/packages/generic/libndofdev-539/0.1.0/libndofdev-0.1.0-windows-539.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/117/packages/generic/libndofdev-645/0.1.0/libndofdev-0.1.0-windows-645.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -1334,11 +1228,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>c42ec73239878eacf298a6cbc1b056cc896788bf31a0ab93897965bc53453dac8251e8ebd8ddb9edc53a46e24d8272b2</string>
+              <string>b947e7482408e17e89c81c4af06521286ba1b7a5d49b42e428bd3fb26126e4a4379bc0a29dc41259e87aacefb12c0515</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/117/packages/generic/libndofdev-539/0.1.0/libndofdev-0.1.0-windows64-539.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/117/packages/generic/libndofdev-645/0.1.0/libndofdev-0.1.0-windows64-645.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows64</string>
@@ -1361,18 +1255,6 @@
         <string>libpng</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>14cb5c8686a472e9e60179e46cd196f7</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libpng_3p-update-libpng/rev/297708/arch/Darwin/installer/libpng-1.6.8.297708-darwin-297708.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
@@ -1447,16 +1329,30 @@
         <string>libwebp</string>
         <key>platforms</key>
         <map>
+          <key>darwin64</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>cb9c58dc7a84ec6798fbb455fe76ff93848db5c424b57519a03eb7db10db8c1ddd25cb55a93761b6b205a5b88918e5fd</string>
+              <key>hash_algorithm</key>
+              <string>sha3_384</string>
+              <key>url</key>
+              <string>https://git.alchemyviewer.org/api/v4/projects/82/packages/generic/libwebp-653/1.1.0/libwebp-1.1.0-darwin64-653.tar.xz</string>
+            </map>
+            <key>name</key>
+            <string>darwin64</string>
+          </map>
           <key>linux64</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>abaddbba19b080576046434821d61316f36051084df83029ed8eaca9e4806ced2acfd4a9e40cae95addf06189c834973</string>
+              <string>c99702693f5918b87a66e13f84ea3bfeb37bcb0d244e74c602dc3e64f70139ec5b8ec21a3c87ea2595134fb8e05754ce</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/82/packages/generic/libwebp-547/1.1.0/libwebp-1.1.0-linux64-547.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/82/packages/generic/libwebp-653/1.1.0/libwebp-1.1.0-linux64-653.tar.xz</string>
             </map>
             <key>name</key>
             <string>linux64</string>
@@ -1466,11 +1362,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>e59adba5c4cf4b67f9e99a5f55933f3225f722d1ce17a20280e6158a6857f26d41cb7a0d17f142bcf6c44436b5c10870</string>
+              <string>e1b0f042dabbb65a9280b408eb3b577cd11264019ac4eb04d025edf44910b7382ba48ae50b6f9424c5a3acaaa2e03eca</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/82/packages/generic/libwebp-547/1.1.0/libwebp-1.1.0-windows-547.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/82/packages/generic/libwebp-653/1.1.0/libwebp-1.1.0-windows-653.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -1480,11 +1376,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>8c51f710ef23dacbd40e5ed55e96d5af6e9f1521e7a76e0446ccb9093174eeab7bc0f0a980f303263f9c49ed0b8c51ed</string>
+              <string>51384482c354420556b0f7f740ae2e6bdebcef2dbde093fa7fd59980a7b27c04779d8734d4ab35537ef1d5419c5f7c2c</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/82/packages/generic/libwebp-547/1.1.0/libwebp-1.1.0-windows64-547.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/82/packages/generic/libwebp-653/1.1.0/libwebp-1.1.0-windows64-653.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows64</string>
@@ -1507,18 +1403,6 @@
         <string>libxml2</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>9303f0dd174129e297eca6cc2eb1ab3f</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/libxml_3p-update-libxml/rev/297050/arch/Darwin/installer/libxml2-2.9.1.297050-darwin-297050.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
@@ -1846,16 +1730,30 @@
         <string>ndPhysicsStub</string>
         <key>platforms</key>
         <map>
+          <key>darwin64</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>2d73eb791ec9f0a739bbf86b2d55e6600c736b1a0109555df03256883298d6942cd3b51e022e49e70f57f5750b3c807a</string>
+              <key>hash_algorithm</key>
+              <string>sha3_384</string>
+              <key>url</key>
+              <string>https://git.alchemyviewer.org/api/v4/projects/127/packages/generic/ndPhysicsStub-642/0.1.2/ndPhysicsStub-0.1.2-darwin64-642.tar.xz</string>
+            </map>
+            <key>name</key>
+            <string>darwin64</string>
+          </map>
           <key>linux64</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>f49947e28fdfe84cb107ae17ea8f88fca3f2dde3c2868d0c8726e038e16d93f7ccd1158ac9c69f460bdd262c35cae33d</string>
+              <string>9c179321a1e61a55541eb3d156d935d4d2919c5ad928725f2e3b8ec8fcd110996e8fd876f7e0695f8849b70f435f72c4</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/127/packages/generic/ndPhysicsStub-537/0.1.2/ndPhysicsStub-0.1.2-linux64-537.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/127/packages/generic/ndPhysicsStub-642/0.1.2/ndPhysicsStub-0.1.2-linux64-642.tar.xz</string>
             </map>
             <key>name</key>
             <string>linux64</string>
@@ -1865,11 +1763,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>bdd8121de3054c37e6fc589dbd7e656da8aa81eff6852414388aef44a067c644eef891176df7044f895443b2003ab0b9</string>
+              <string>41548f8e9fc78cc6396c56f464bfc40875545ca6f6fe3faa58ee2da643d93072328d03be85510ecad17b3a45f9702671</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/127/packages/generic/ndPhysicsStub-537/0.1.2/ndPhysicsStub-0.1.2-windows-537.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/127/packages/generic/ndPhysicsStub-642/0.1.2/ndPhysicsStub-0.1.2-windows-642.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -1879,11 +1777,11 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>096b10a4c88519b7b8001f89c1bb34a3625268a6d9457bfbef21bffb4a12e439531331d53d2183c0f960da914d0524f8</string>
+              <string>3a7f09b873c8f63c5901e4fe6d98bb6e6d8a9f663d64ee77a056cfcb6c9bcea0edcbb1404933061c64c67b36b7696ea8</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/127/packages/generic/ndPhysicsStub-537/0.1.2/ndPhysicsStub-0.1.2-windows64-537.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/127/packages/generic/ndPhysicsStub-642/0.1.2/ndPhysicsStub-0.1.2-windows64-642.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows64</string>
@@ -2027,26 +1925,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
         <string>ogg_vorbis</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>07fca1531a27915f642a5c1d95008d54</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/oggvorbis_3p-update-oggvorbis/rev/296878/arch/Darwin/installer/ogg_vorbis-1.2.2-1.3.2.296878-darwin-296878.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>a066f1d12caee1d87fc72f48169f9677</string>
+              <string>906749c3c608897062b5f15fe640765efc57f16417b430acf5d07087b7855bc6ea5aaa5834e4260f84ce957904b4ed9e</string>
+              <key>hash_algorithm</key>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54841/510071/ogg_vorbis-1.3.3-1.3.6.538971-darwin64-538971.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/112/packages/generic/ogg_vorbis-652/1.3.4/ogg_vorbis-1.3.4-darwin64-652.tar.xz</string>
             </map>
             <key>name</key>
             <string>darwin64</string>
@@ -2056,11 +1944,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>ec0cff5e43a62c5814b97bd70499ae824ad937e0a5d6e7d04e39507766c8a4a955174aaccd201961a7fde9f200a08c1e</string>
+              <string>301cb0a8f1ce82c0bb7b4adddb78cdc9c7eb4dbddac2ccf64a76fab9aea9eb499236a28ccc8563fbca74858fc425d6af</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/112/packages/generic/ogg_vorbis-596/1.3.4/ogg_vorbis-1.3.4-linux64-596.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/112/packages/generic/ogg_vorbis-652/1.3.4/ogg_vorbis-1.3.4-linux64-652.tar.xz</string>
             </map>
             <key>name</key>
             <string>linux64</string>
@@ -2070,11 +1958,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>28187678704036e7f03f6438040d6fec6c233c0897cf708e6b62f40b9a2dce95fe9233c54788c368207609d7025e6420</string>
+              <string>3dc3502a40dd7865d3674fe84720b4919fa1c88920c300a302115e56f20404cf4aefe9204ba68f96cd4a42e38102560b</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/112/packages/generic/ogg_vorbis-596/1.3.4/ogg_vorbis-1.3.4-windows-596.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/112/packages/generic/ogg_vorbis-652/1.3.4/ogg_vorbis-1.3.4-windows-652.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -2084,11 +1972,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>976ecebc3dab7f1bdf0083de09164093e76be1755fc1f21a4a9ba58362fb542af586d4fc1d68ebb4a1d5886b3feffe9d</string>
+              <string>c042a72824bb14de08931c59280e044c282e751460301f6c5be19ac576dfbb69c85da4813c0cb7106848c9cf86292fe0</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/112/packages/generic/ogg_vorbis-596/1.3.4/ogg_vorbis-1.3.4-windows64-596.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/112/packages/generic/ogg_vorbis-652/1.3.4/ogg_vorbis-1.3.4-windows64-652.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows64</string>
@@ -2143,16 +2031,30 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
         <string>openal</string>
         <key>platforms</key>
         <map>
+          <key>darwin64</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>d91d311729c0530b4e3edebb582fc24bdd8444717c83b10ded87b45362c1be02cbfe82246b54533e49331116f356eb7e</string>
+              <key>hash_algorithm</key>
+              <string>sha3_384</string>
+              <key>url</key>
+              <string>https://git.alchemyviewer.org/api/v4/projects/141/packages/generic/openal-637/1.20.1/openal-1.20.1-darwin64-637.tar.xz</string>
+            </map>
+            <key>name</key>
+            <string>darwin64</string>
+          </map>
           <key>linux64</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>418f9bd3f8c221c0bcdfb8574c7fa223eba1d7146729a46b883e9ece7b4a164d4502ca4c7ee619b1f93d231ca124c69d</string>
+              <string>8d9c6080e0041c0da955b362d04e69abe4357ddf70d0985ef4c9ba752ffeef265359541e866381a34a749a5d575b5868</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/141/packages/generic/openal-603/1.20.1/openal-1.20.1-linux64-603.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/141/packages/generic/openal-637/1.20.1/openal-1.20.1-linux64-637.tar.xz</string>
             </map>
             <key>name</key>
             <string>linux64</string>
@@ -2162,11 +2064,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>a5ead11c24b4ac7182ddaff3287949308534e576cbcc71a18a51408d902f28d605801a596db40d2f3d056632f83f895f</string>
+              <string>aaf7c9fa67c70cf740a286483f0041a58da8b92be679a6b6106bdb7e7f7f3162c6a5e717f31df9206e043998cc6b871e</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/141/packages/generic/openal-603/1.20.1/openal-1.20.1-windows-603.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/141/packages/generic/openal-637/1.20.1/openal-1.20.1-windows-637.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -2176,11 +2078,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>c3ff4d0470b5c784624796bd70561e4ecfc8bb2ad0d5ce9dc7042713075a028719f82bb1d6f429e6d503510b016274c7</string>
+              <string>939620e0b14993f199017b957f17796b9ec1fcf7afd93b080cb8eeb6abd0e975bfdec12a9fc3f634b1db502849d53746</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/141/packages/generic/openal-603/1.20.1/openal-1.20.1-windows64-603.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/141/packages/generic/openal-637/1.20.1/openal-1.20.1-windows64-637.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows64</string>
@@ -2203,26 +2105,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
         <string>openjpeg</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>2adb5b8bd2493d576c5d02b992d8f819</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openjpeg_3p-update-openjpeg/rev/297018/arch/Darwin/installer/openjpeg-1.4.297018-darwin-297018.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>5abf2d9c0b250821c59cc60cd94fd8af</string>
+              <string>3d8435efb9a29d0e02db30221e58de512dde217fc0b6deda26543a102bdd1487d55658fc44b311d8eb1413d070fe3a07</string>
+              <key>hash_algorithm</key>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54840/510064/openjpeg-1.5.1.538970-darwin64-538970.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/105/packages/generic/openjpeg-641/1.5.1/openjpeg-1.5.1-darwin64-641.tar.xz</string>
             </map>
             <key>name</key>
             <string>darwin64</string>
@@ -2232,11 +2124,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>fc646fd26d43da18ab12af90d991676e8662e2cf2871082dbc7d77b96aea412d1e8c1edef736259749c2aa88bc2da21e</string>
+              <string>60a1ca9b97ad74a8e3a33d33caf503cdb5e7f1684d6316ed484471c02124d603878c8526f7166a16064cd7c88b9905db</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/105/packages/generic/openjpeg-534/1.5.1/openjpeg-1.5.1-linux64-534.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/105/packages/generic/openjpeg-641/1.5.1/openjpeg-1.5.1-linux64-641.tar.xz</string>
             </map>
             <key>name</key>
             <string>linux64</string>
@@ -2246,11 +2138,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>4a29e53aa16c31266df7ddfcd9028043a229cecac47b3165dbbc282875df2aaf232346db396ec430c0bc09dd4641b8d1</string>
+              <string>474913320ea038660a73810b6563d0b2174cef5a9445f3454fb6e8d9efac89fddb9fb0be007001a434ec3c8125917f6d</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/105/packages/generic/openjpeg-534/1.5.1/openjpeg-1.5.1-windows-534.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/105/packages/generic/openjpeg-641/1.5.1/openjpeg-1.5.1-windows-641.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -2260,11 +2152,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>a1a5eb80cc0995569c15647c5367bf9ddede03676e725562f6f1023351109c831d5cdbf9e732f4186e374d819f01a4d0</string>
+              <string>044b5655aecdc9e22f013509ec3a0a8297955cfc993465256e182d519876d55bc3b33df56b861f587a8086e79b8aa090</string>
               <key>hash_algorithm</key>
               <string>sha3_384</string>
               <key>url</key>
-              <string>https://git.alchemyviewer.org/api/v4/projects/105/packages/generic/openjpeg-534/1.5.1/openjpeg-1.5.1-windows64-534.tar.xz</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/105/packages/generic/openjpeg-641/1.5.1/openjpeg-1.5.1-windows64-641.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows64</string>
@@ -2287,18 +2179,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
         <string>openssl</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>0a77d56769e6075957f614be6575423e</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/openssl_3p-update-openssl/rev/297168/arch/Darwin/installer/openssl-1.0.1h.297168-darwin-297168.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
@@ -2357,32 +2237,98 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
         <key>version</key>
         <string>1.0.2u.315</string>
       </map>
-      <key>slvoice</key>
+      <key>pcre</key>
       <map>
         <key>copyright</key>
-        <string>2010 Vivox, including audio coding using Polycom¨ Siren14TM (ITU-T Rec. G.722.1 Annex C)</string>
+        <string>Copyright (c) 1997-2014 University of Cambridge; Copyright(c) 2009-2014 Zoltan Herczeg; Copyright (c) 2007-2012, Google Inc.</string>
         <key>description</key>
-        <string>Vivox SDK components</string>
+        <string>PCRE Perl-compatible regular expression library</string>
         <key>license</key>
-        <string>Mixed</string>
+        <string>bsd</string>
         <key>license_file</key>
-        <string>LICENSES/vivox_licenses.txt</string>
+        <string>LICENSES/pcre-license.txt</string>
         <key>name</key>
-        <string>slvoice</string>
+        <string>pcre</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
+          <key>darwin64</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>d8c0f97fe5abef43e72b6f84aba698b2</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54856/510176/pcre-8.35.538986-darwin64-538986.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>darwin64</string>
+          </map>
+          <key>linux</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>511a9c3fd4b6c76a8a737d06bba1c291</string>
+              <string>24a119b18e63017ad932ad54df8161bc</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/oz-426-slvoice/rev/330003/arch/Darwin/installer/slvoice-4.9.0002.27586.330003-darwin-330003.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/p64_3p-pcre/rev/314136/arch/Linux/installer/pcre-8.35.314136-linux-314136.tar.bz2</string>
             </map>
             <key>name</key>
-            <string>darwin</string>
+            <string>linux</string>
           </map>
+          <key>linux64</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>0f058ca2176e7d02d51e54c66a96f336</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/908/2010/pcre-8.35.500898-linux64-500898.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux64</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>3660db45793df3050b63920bfb7d8479</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55041/512002/pcre-8.35.538986-windows-538986.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows64</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>cdee8e8b48a66266550bf279c40abc22</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55038/511992/pcre-8.35.538986-windows64-538986.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows64</string>
+          </map>
+        </map>
+        <key>version</key>
+        <string>8.35.538986</string>
+      </map>
+      <key>slvoice</key>
+      <map>
+        <key>copyright</key>
+        <string>2010 Vivox, including audio coding using Polycom¨ Siren14TM (ITU-T Rec. G.722.1 Annex C)</string>
+        <key>description</key>
+        <string>Vivox SDK components</string>
+        <key>license</key>
+        <string>Mixed</string>
+        <key>license_file</key>
+        <string>LICENSES/vivox_licenses.txt</string>
+        <key>name</key>
+        <string>slvoice</string>
+        <key>platforms</key>
+        <map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
@@ -2485,26 +2431,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
         <string>uriparser</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>22608adaf54e8ddc9182a719ba6e2b32</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/uriparser_3p-update-uriparser/rev/299435/arch/Darwin/installer/uriparser-0.8.0.1-darwin-299435.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>d463360491b6b5cb7a57cd67a90ececb</string>
+              <string>860b03d04da117ec8fd5e56cbf10ece213e4880c7f02e07ddffa23e4c4c0d1333a1de5be960569ab71b4fbb52ea90255</string>
+              <key>hash_algorithm</key>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/54838/510050/uriparser-0.8.0.1-darwin64-538968.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/96/packages/generic/uriparser-655/0.9.4/uriparser-0.9.4-darwin64-655.tar.xz</string>
             </map>
             <key>name</key>
             <string>darwin64</string>
@@ -2514,11 +2450,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>66328f420630b1c67c7d68ca734bd557</string>
+              <string>f4b130c9d0fa4a8bbe407b2fdd65acfa6be1de2d01082d49cf23bc84f1b9069cf0a76d4334e232ecc0f02042b699ae64</string>
               <key>hash_algorithm</key>
-              <string>md5</string>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>https://pkg.alchemyviewer.org/repository/autobuild-external/uriparser/linux64/debian10/uriparser-0.9.4-linux64-202210514.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/96/packages/generic/uriparser-655/0.9.4/uriparser-0.9.4-linux64-655.tar.xz</string>
             </map>
             <key>name</key>
             <string>linux64</string>
@@ -2528,11 +2464,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>cc6ed6acc98c9ea36b14c3186002c38a</string>
+              <string>1c9aaaabd10a4db5a3e4104448db6a7213b954f5069ceaa12b1f550b9fa6b9b4414768e39ab8317604cab75f4021da68</string>
               <key>hash_algorithm</key>
-              <string>md5</string>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>https://pkg.alchemyviewer.org/repository/autobuild-external/uriparser/windows/uriparser-0.9.4-windows-310.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/96/packages/generic/uriparser-655/0.9.4/uriparser-0.9.4-windows-655.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -2542,11 +2478,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>4d83a9d415212138f7ddb656e490b0d5</string>
+              <string>f2ce84167d065d9105fcb76686664dde6965e16db49ca71acecf07f2452e16bc4ba1a14fe8641d1bf275bc9b67a413b7</string>
               <key>hash_algorithm</key>
-              <string>md5</string>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>https://pkg.alchemyviewer.org/repository/autobuild-external/uriparser/windows64/uriparser-0.9.4-windows64-310.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/96/packages/generic/uriparser-655/0.9.4/uriparser-0.9.4-windows64-655.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows64</string>
@@ -2671,26 +2607,16 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
         <string>xmlrpc-epi</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>ffd3aab8e0c0ff6dadbce49ca2809078</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/xmlrpc-emi_3p-update-xmlrpc-epi/rev/297075/arch/Darwin/installer/xmlrpc_epi-0.54.1.297075-darwin-297075.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>99ea1808ee9f5b55029daa9fdef86776</string>
+              <string>8363cf19c3218df7454f06227e32443f3fdbfc4cca945bec7987d4b0e42ef3e59df879d0d9387dc5675d56e5976f6e05</string>
+              <key>hash_algorithm</key>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/55063/512104/xmlrpc_epi-0.54.1.539072-darwin64-539072.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/110/packages/generic/xmlrpc-epi-669/0.54.1/xmlrpc_epi-0.54.1-darwin64-669.tar.xz</string>
             </map>
             <key>name</key>
             <string>darwin64</string>
@@ -2700,9 +2626,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>35df17c3eb673030dea4bde9191aa506</string>
+              <string>048906c305677f634b2fa05191ee312c201fe1030d050abdb3c161ca82e11c291bdc10969b99d8bb8286531eb49c48a7</string>
+              <key>hash_algorithm</key>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/ct2/727/1489/xmlrpc_epi-0.54.1.500719-linux64-500719.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/110/packages/generic/xmlrpc-epi-669/0.54.1/xmlrpc_epi-0.54.1-linux64-669.tar.xz</string>
             </map>
             <key>name</key>
             <string>linux64</string>
@@ -2712,11 +2640,11 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>eb26c5779a2bf53f2038a89282bed227</string>
+              <string>f1878aaff7046b5a44eb992bb9c1d3334b404f4a4cc2c3e04b16a91e00370c7c12676063bfed8e2f2445763f11da5400</string>
               <key>hash_algorithm</key>
-              <string>md5</string>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>https://pkg.alchemyviewer.org/repository/autobuild-external/xmlrpc-epi/windows/xmlrpc_epi-0.54.1.326-windows-326.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/110/packages/generic/xmlrpc-epi-669/0.54.1/xmlrpc_epi-0.54.1-windows-669.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -2726,18 +2654,18 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>e33a10439dbd430e158bdca16da2adc4</string>
+              <string>927932400fbede3bbaf7f8ba2ddfd46f1ea89029efeff595fc481a1a4fd9ee715f6653c6ae69719259b6b8d9ce50d925</string>
               <key>hash_algorithm</key>
-              <string>md5</string>
+              <string>sha3_384</string>
               <key>url</key>
-              <string>https://pkg.alchemyviewer.org/repository/autobuild-external/xmlrpc-epi/windows64/xmlrpc_epi-0.54.1.326-windows64-326.tar.bz2</string>
+              <string>https://git.alchemyviewer.org/api/v4/projects/110/packages/generic/xmlrpc-epi-669/0.54.1/xmlrpc_epi-0.54.1-windows64-669.tar.xz</string>
             </map>
             <key>name</key>
             <string>windows64</string>
           </map>
         </map>
         <key>version</key>
-        <string>0.54.1.326</string>
+        <string>0.54.1</string>
       </map>
       <key>zlib</key>
       <map>
@@ -2753,18 +2681,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
         <string>zlib</string>
         <key>platforms</key>
         <map>
-          <key>darwin</key>
-          <map>
-            <key>archive</key>
-            <map>
-              <key>hash</key>
-              <string>1a79eeac199c2d94e4ae4e5d0194e25f</string>
-              <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/zlib_3p-update-zlib/rev/296881/arch/Darwin/installer/zlib-1.2.8.296881-darwin-296881.tar.bz2</string>
-            </map>
-            <key>name</key>
-            <string>darwin</string>
-          </map>
           <key>darwin64</key>
           <map>
             <key>archive</key>
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
index 6fb6f819fef91c8e1eeeedc62dc3f2e46c284e76..de2181d3d4d2ac7d6470fb542f92c73f2ea6f886 100644
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -270,26 +270,16 @@ endif (LINUX)
 if (DARWIN)
   # Warnings should be fatal -- thanks, Nicky Perian, for spotting reversed default
   set(CLANG_DISABLE_FATAL_WARNINGS OFF)
+  add_definitions(-DLL_DARWIN=1 -DGL_SILENCE_DEPRECATION)
   set(CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names,-search_paths_first")
   set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_LINK_FLAGS}")
-  set(DARWIN_extra_cstar_flags "-Wno-unused-local-typedef -Wno-deprecated-declarations")
-  # Ensure that CMAKE_CXX_FLAGS has the correct -g debug information format --
-  # see Variables.cmake.
-  string(REPLACE "-gdwarf-2" "-g${CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT}"
-    CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
-  # The viewer code base can now be successfully compiled with -std=c++14. But
-  # turning that on in the generic viewer-build-variables/variables file would
-  # potentially require tweaking each of our ~50 third-party library builds.
-  # Until we decide to set -std=c++14 in viewer-build-variables/variables, set
-  # it locally here: we want to at least prevent inadvertently reintroducing
-  # viewer code that would fail with C++14.
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DARWIN_extra_cstar_flags} -std=c++14")
+  set(DARWIN_extra_cstar_flags "-gdwarf-2 -Wno-unused-local-typedef")
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DARWIN_extra_cstar_flags}")
   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  ${DARWIN_extra_cstar_flags}")
   # NOTE: it's critical that the optimization flag is put in front.
   # NOTE: it's critical to have both CXX_FLAGS and C_FLAGS covered.
-## Really?? On developer machines too?
-##set(ENABLE_SIGNING TRUE)
-##set(SIGNING_IDENTITY "Developer ID Application: Linden Research, Inc.")
+
+  add_definitions(-D_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR=1)
 endif (DARWIN)
 
 
diff --git a/indra/cmake/Audio.cmake b/indra/cmake/Audio.cmake
index 87740811b37fb72c9a3b1b9037a30decd383ddf3..6a2ffc1c1fa2fc770898377f6665285c94559a2d 100644
--- a/indra/cmake/Audio.cmake
+++ b/indra/cmake/Audio.cmake
@@ -30,10 +30,3 @@ else (USESYSTEMLIBS)
     set(VORBISFILE_LIBRARIES vorbisfile)
   endif (WINDOWS)
 endif (USESYSTEMLIBS)
-
-link_directories(
-    ${VORBIS_LIBRARY_DIRS}
-    ${VORBISENC_INCLUDE_DIRS}
-    ${VORBISFILE_LIBRARY_DIRS}
-    ${OGG_LIBRARY_DIRS}
-    )
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
index 7ddd609b8ea111c8aabc114eeaf990d94e6ab295..8b7ac2f71b2d3eae0237305fda7b429c287e58f7 100644
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -135,14 +135,18 @@ elseif(DARWIN)
         libapr-1.dylib
         libaprutil-1.0.dylib
         libaprutil-1.dylib
-        libexception_handler.dylib
         ${EXPAT_COPY}
         libGLOD.dylib
-        libhunspell-1.3.0.dylib
+        libhunspell-1.7.0.dylib
         libndofdev.dylib
         libnghttp2.dylib
         libnghttp2.14.dylib
         libnghttp2.14.19.0.dylib
+        liburiparser.dylib
+        liburiparser.1.dylib
+        liburiparser.1.0.27.dylib
+        libxmlrpc-epi.dylib
+        libxmlrpc-epi.0.dylib
        )
 
     if (USE_FMODSTUDIO)
diff --git a/indra/cmake/EXPAT.cmake b/indra/cmake/EXPAT.cmake
index 9e1242b5998b00f26fc43fa34f354da502ebb437..844cefd7413d010a3e92a58c386cb0955cf332c3 100644
--- a/indra/cmake/EXPAT.cmake
+++ b/indra/cmake/EXPAT.cmake
@@ -6,6 +6,8 @@ set(EXPAT_FIND_REQUIRED ON)
 
 if (USESYSTEMLIBS)
   include(FindEXPAT)
+elseif(DARWIN)
+  find_package(EXPAT REQUIRED)
 else (USESYSTEMLIBS)
     use_prebuilt_binary(expat)
     if (WINDOWS)
@@ -13,13 +15,9 @@ else (USESYSTEMLIBS)
             debug libexpatd.lib
             optimized libexpat.lib)
         set(EXPAT_COPY libexpat.dll)
-    else (WINDOWS)
+    else ()
         set(EXPAT_LIBRARIES expat)
-        if (DARWIN)
-            set(EXPAT_COPY libexpat.1.dylib libexpat.dylib)
-        else ()
-            set(EXPAT_COPY libexpat.so.1 libexpat.so)
-        endif ()
-    endif (WINDOWS)
+        set(EXPAT_COPY libexpat.so.1 libexpat.so)
+    endif ()
     set(EXPAT_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
 endif (USESYSTEMLIBS)
diff --git a/indra/cmake/FreeType.cmake b/indra/cmake/FreeType.cmake
index 02a48fd4b4e187abb03d3fdca3c0605e356b9437..8e418d01cc0cbd0742036e2dccc6614981f75066 100644
--- a/indra/cmake/FreeType.cmake
+++ b/indra/cmake/FreeType.cmake
@@ -8,8 +8,10 @@ if (LINUX OR USESYSTEMLIBS)
   pkg_check_modules(FONTCONFIG REQUIRED fontconfig)
 else ()
   use_prebuilt_binary(freetype)
-  set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/)
+  if(DARWIN)
+    set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/freetype2)
+  else()
+    set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include/)
+  endif()
   set(FREETYPE_LIBRARIES freetype)
 endif ()
-
-link_directories(${FREETYPE_LIBRARY_DIRS})
diff --git a/indra/cmake/Hunspell.cmake b/indra/cmake/Hunspell.cmake
index 7e4bd179585e5e591d395c365ddc717aa1493f04..a6098fddde1aeeeae53cbd38c3457bf05787ccb5 100644
--- a/indra/cmake/Hunspell.cmake
+++ b/indra/cmake/Hunspell.cmake
@@ -11,7 +11,7 @@ else (USESYSTEMLIBS)
   if (WINDOWS)
     set(HUNSPELL_LIBRARY libhunspell)
   elseif(DARWIN)
-    set(HUNSPELL_LIBRARY hunspell-1.3)
+    set(HUNSPELL_LIBRARY hunspell-1.7)
   elseif(LINUX)
     set(HUNSPELL_LIBRARY hunspell-1.7)
   else()
diff --git a/indra/cmake/JPEG.cmake b/indra/cmake/JPEG.cmake
index beee5132cb82acea7fcd1a6dbaf883fbe0772d5f..1e5b833719b571d41dde81b5fd43c898d6950564 100644
--- a/indra/cmake/JPEG.cmake
+++ b/indra/cmake/JPEG.cmake
@@ -8,14 +8,12 @@ set(JPEG_FIND_REQUIRED ON)
 if (USESYSTEMLIBS)
   include(FindJPEG)
 else (USESYSTEMLIBS)
+  use_prebuilt_binary(libjpeg-turbo)
   if (LINUX)
-    use_prebuilt_binary(libjpeg-turbo)
     set(JPEG_LIBRARIES jpeg)
   elseif (DARWIN)
-    use_prebuilt_binary(jpeglib)
     set(JPEG_LIBRARIES jpeg)
   elseif (WINDOWS)
-    use_prebuilt_binary(libjpeg-turbo)
     set(JPEG_LIBRARIES jpeg)
   endif (LINUX)
   set(JPEG_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake
index 9677eddefbdb57f15256657ea169f604091f8e83..60bffa5f9aca997721d02b70272316006f61255b 100644
--- a/indra/cmake/LLAddBuildTest.cmake
+++ b/indra/cmake/LLAddBuildTest.cmake
@@ -102,6 +102,13 @@ MACRO(LL_ADD_PROJECT_UNIT_TESTS project sources)
     # Setup target
     ADD_EXECUTABLE(PROJECT_${project}_TEST_${name} ${${name}_test_SOURCE_FILES})
     SET_TARGET_PROPERTIES(PROJECT_${project}_TEST_${name} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXE_STAGING_DIR}")
+    if (DARWIN)
+      SET_TARGET_PROPERTIES(PROJECT_${project}_TEST_${name} 
+          PROPERTIES
+          BUILD_WITH_INSTALL_RPATH 1
+          INSTALL_RPATH "@executable_path/Resources"
+          )
+    endif(DARWIN)
 
     #
     # Per-codefile additional / external project dep and lib dep property extraction
@@ -230,6 +237,14 @@ FUNCTION(LL_ADD_INTEGRATION_TEST
         )
   endif (WINDOWS)
 
+  if (DARWIN)
+    SET_TARGET_PROPERTIES(INTEGRATION_TEST_${testname}
+        PROPERTIES
+        BUILD_WITH_INSTALL_RPATH 1
+        INSTALL_RPATH "@executable_path/Resources"
+        )
+  endif(DARWIN)
+
   # Add link deps to the executable
   if(TEST_DEBUG)
     message(STATUS "TARGET_LINK_LIBRARIES(INTEGRATION_TEST_${testname} ${libraries})")
diff --git a/indra/cmake/LLSharedLibs.cmake b/indra/cmake/LLSharedLibs.cmake
index 0773e7587a4c803b1f544a86036ee4a43f2e5213..da9d389a60703125c740fa11b90d43fe6bb9be09 100644
--- a/indra/cmake/LLSharedLibs.cmake
+++ b/indra/cmake/LLSharedLibs.cmake
@@ -75,8 +75,8 @@ macro(ll_stage_sharedlib DSO_TARGET)
 
   if (DARWIN)
     set_target_properties(${DSO_TARGET} PROPERTIES
-      BUILD_WITH_INSTALL_RPATH 1
-      INSTALL_NAME_DIR "@executable_path/../Resources"
+      BUILD_WITH_INSTALL_NAME_DIR 1
+      INSTALL_NAME_DIR "@executable_path/../Frameworks"
       )
   endif(DARWIN)
 
diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake
index c7556f3f11582230b4656a673afc50dff1290ce3..88b5ea94acafa271aad64628e3766e0893b86fea 100644
--- a/indra/cmake/Variables.cmake
+++ b/indra/cmake/Variables.cmake
@@ -151,60 +151,41 @@ endif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
 if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
   set(DARWIN 1)
 
-  string(REGEX MATCH "-mmacosx-version-min=([^ ]+)" scratch "$ENV{LL_BUILD}")
-  set(CMAKE_OSX_DEPLOYMENT_TARGET "${CMAKE_MATCH_1}")
-  message(STATUS "CMAKE_OSX_DEPLOYMENT_TARGET = '${CMAKE_OSX_DEPLOYMENT_TARGET}'")
-
-  string(REGEX MATCH "-stdlib=([^ ]+)" scratch "$ENV{LL_BUILD}")
-  set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "${CMAKE_MATCH_1}")
-  message(STATUS "CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY = '${CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY}'")
-
-  string(REGEX MATCH " -g([^ ]*)" scratch "$ENV{LL_BUILD}")
-  set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT "${CMAKE_MATCH_1}")
-  # -gdwarf-2 is passed in LL_BUILD according to 00-COMPILE-LINK-RUN.txt.
-  # However, when CMake 3.9.2 sees -gdwarf-2, it silently deletes the whole -g
-  # switch, producing no symbols at all! The same thing happens if we specify
-  # plain -g ourselves, i.e. CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT is
-  # the empty string. Specifying -gdwarf-with-dsym or just -gdwarf drives a
-  # different CMake behavior: it substitutes plain -g. As of 2017-09-19,
-  # viewer-build-variables/variables still passes -gdwarf-2, which is the
-  # no-symbols case. Set -gdwarf, triggering CMake to substitute plain -g --
-  # at least that way we should get symbols, albeit mangled ones. It Would Be
-  # Nice if CMake's behavior could be predicted from a consistent mental
-  # model, instead of only observed experimentally.
-  string(REPLACE "dwarf-2" "dwarf"
-    CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT
-    "${CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT}")
-  message(STATUS "CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT = '${CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT}'")
-
-  string(REGEX MATCH "-O([^ ]*)" scratch "$ENV{LL_BUILD}")
-  set(CMAKE_XCODE_ATTRIBUTE_GCC_OPTIMIZATION_LEVEL "${CMAKE_MATCH_1}")
-  message(STATUS "CMAKE_XCODE_ATTRIBUTE_GCC_OPTIMIZATION_LEVEL = '${CMAKE_XCODE_ATTRIBUTE_GCC_OPTIMIZATION_LEVEL}'")
-
-  string(REGEX MATCHALL "[^ ]+" LL_BUILD_LIST "$ENV{LL_BUILD}")
-  list(FIND LL_BUILD_LIST "-iwithsysroot" sysroot_idx)
-  if ("${sysroot_idx}" LESS 0)
-    message(FATAL_ERROR "Environment variable LL_BUILD must contain '-iwithsysroot'")
+  # Xcode setup
+  if (XCODE_VERSION LESS 12.0.0)
+    message( FATAL_ERROR "Xcode 12.0.0 or greater is required." )
   endif ()
-  math(EXPR sysroot_idx "${sysroot_idx} + 1")
-  list(GET LL_BUILD_LIST "${sysroot_idx}" CMAKE_OSX_SYSROOT)
-  message(STATUS "CMAKE_OSX_SYSROOT = '${CMAKE_OSX_SYSROOT}'")
+  message( "Building with " ${CMAKE_OSX_SYSROOT} )
+  set(CMAKE_OSX_DEPLOYMENT_TARGET 10.13)
 
-  set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvm.clang.1_0")
+
+  set(CMAKE_XCODE_ATTRIBUTE_GCC_OPTIMIZATION_LEVEL fast)
+  set(CMAKE_XCODE_ATTRIBUTE_GCC_FAST_MATH YES)
   set(CMAKE_XCODE_ATTRIBUTE_GCC_STRICT_ALIASING NO)
-  set(CMAKE_XCODE_ATTRIBUTE_GCC_FAST_MATH NO)
-  set(CMAKE_XCODE_ATTRIBUTE_CLANG_X86_VECTOR_INSTRUCTIONS ssse3)
-  # we must hard code this to off for now.  xcode's built in signing does not
-  # handle embedded app bundles such as CEF and others. Any signing for local
-  # development must be done after the build as we do in viewer_manifest.py for
-  # released builds
-  # https://stackoverflow.com/a/54296008
-  # "-" represents "Sign to Run Locally" and empty string represents "Do Not Sign"
+  set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN YES)
+
+  set(CMAKE_XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS YES)
+  set(CMAKE_XCODE_ATTRIBUTE_DEBUG_INFORMATION_FORMAT dwarf-with-dsym)
+  set(CMAKE_XCODE_ATTRIBUTE_DEAD_CODE_STRIPPING YES)
+
+  set(CMAKE_XCODE_ATTRIBUTE_CLANG_X86_VECTOR_INSTRUCTIONS sse4.2)
+  # C++ specifics
+  set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++17")
+  set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
+
+  # Disable codesigning, for now it's handled with snake
+  set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED NO)
   set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "")
+  set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_ENTITLEMENTS "")
+
+  set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_NON_VIRTUAL_DESTRUCTOR YES)
+  set(CMAKE_XCODE_ATTRIBUTE_GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS YES)
+  set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_SUSPICIOUS_MOVE YES)
+  set(CMAKE_XCODE_ATTRIBUTE_CLANG_WARN_RANGE_LOOP_ANALYSIS YES)
 
-  set(CMAKE_OSX_ARCHITECTURES "${ARCH}")
-  string(REPLACE "i686"  "i386"   CMAKE_OSX_ARCHITECTURES "${CMAKE_OSX_ARCHITECTURES}")
-  string(REPLACE "AMD64" "x86_64" CMAKE_OSX_ARCHITECTURES "${CMAKE_OSX_ARCHITECTURES}")
+  set(ADDRESS_SIZE 64)
+  set(ARCH x86_64)
+  set(CMAKE_OSX_ARCHITECTURES x86_64)
 
   set(LL_ARCH ${ARCH}_darwin)
   set(LL_ARCH_DIR universal-darwin)
diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp
index bca72375122d7481fad0fa61e004de8eb25e3ec1..3a728785d74340197ac8e09298045433d14c2f09 100644
--- a/indra/llaudio/llaudiodecodemgr.cpp
+++ b/indra/llaudio/llaudiodecodemgr.cpp
@@ -567,8 +567,6 @@ class LLAudioDecodeMgr::Impl
 
 void LLAudioDecodeMgr::Impl::processQueue(const F32 num_secs)
 {
-	LLUUID uuid;
-
 	LLTimer decode_timer;
 
 	BOOL done = FALSE;
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
index 7ee687b20acea47a9bc60d5f8181455687132438..5c97de7ebf25bc07a6c5988bbd0f725d6582ccf3 100644
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -254,6 +254,11 @@ set(llcommon_HEADER_FILES
     StackWalker.h
     )
 
+if (DARWIN)
+  list(APPEND llcommon_HEADER_FILES llsys_objc.h)
+  list(APPEND llcommon_SOURCE_FILES llsys_objc.mm)
+endif (DARWIN)
+
 set_source_files_properties(${llcommon_HEADER_FILES}
                             PROPERTIES HEADER_FILE_ONLY TRUE)
 
@@ -294,12 +299,6 @@ target_link_libraries(
     ${RT_LIBRARY}
     )
 
-if (DARWIN)
-  include(CMakeFindFrameworks)
-  find_library(CARBON_LIBRARY Carbon)
-  target_link_libraries(llcommon ${CARBON_LIBRARY})
-endif (DARWIN)
-
 add_dependencies(llcommon stage_third_party_libs)
 
 if (LL_TESTS)
diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp
index e0c7702b1036dcd47c40a681c60727c1d9bb30fd..39b851ae3fa678fa03307cd73e6767607834f678 100644
--- a/indra/llcommon/llerror.cpp
+++ b/indra/llcommon/llerror.cpp
@@ -1302,15 +1302,14 @@ namespace {
 	bool checkLevelMap(const LevelMap& map, const std::string& key,
 						LLError::ELevel& level)
 	{
-		bool stop_checking;
 		LevelMap::const_iterator i = map.find(key);
 		if (i == map.end())
 		{
-			return stop_checking = false;
+			return false;
 		}
 		
 			level = i->second;
-		return stop_checking = true;
+		return true;
 	}
 	
 	bool checkLevelMap(	const LevelMap& map, 
diff --git a/indra/llcommon/llmemory.cpp b/indra/llcommon/llmemory.cpp
index 32dfc858537448c166284d504f9c73fb39fcc2a5..f80bb5001afa95d9e38bbec91904db8595972de7 100644
--- a/indra/llcommon/llmemory.cpp
+++ b/indra/llcommon/llmemory.cpp
@@ -33,6 +33,7 @@
 # include <psapi.h>
 #elif defined(LL_DARWIN)
 # include <sys/types.h>
+# include <mach/mach.h>
 # include <mach/task.h>
 # include <mach/mach_init.h>
 #elif LL_LINUX || LL_SOLARIS
diff --git a/indra/llcommon/llprocess.cpp b/indra/llcommon/llprocess.cpp
index abd151ac1054183b10fd39af9dba6bca30bbaa16..7e0d9ffe51832b80b633750a57520e956e6f323c 100644
--- a/indra/llcommon/llprocess.cpp
+++ b/indra/llcommon/llprocess.cpp
@@ -916,6 +916,7 @@ void LLProcess::status_callback(int reason, void* data, int status)
 	static_cast<LLProcess*>(data)->handle_status(reason, status);
 }
 
+#ifdef SHOW_DEBUG
 #define tabent(symbol) { symbol, #symbol }
 static struct ReasonCode
 {
@@ -931,11 +932,12 @@ static struct ReasonCode
 	tabent(APR_OC_REASON_RUNNING)
 };
 #undef tabent
+#endif
 
 // Object-oriented callback
 void LLProcess::handle_status(int reason, int status)
 {
-#if SHOW_DEBUG
+#ifdef SHOW_DEBUG
 	{
 		// This odd appearance of LL_DEBUGS is just to bracket a lookup that will
 		// only be performed if in fact we're going to produce the log message.
diff --git a/indra/llcommon/llsd.cpp b/indra/llcommon/llsd.cpp
index 01ea04b09982c3055baa629bb25ff39edbeacaa4..cce32f7eb63a0a37ef52fdf33120bac5ee1579f6 100644
--- a/indra/llcommon/llsd.cpp
+++ b/indra/llcommon/llsd.cpp
@@ -361,7 +361,7 @@ namespace
 	};
 
 
-	class ImplMap : public LLSD::Impl
+	class ImplMap final : public LLSD::Impl
 	{
 	private:
 		typedef LLSD::map_t	DataMap;
@@ -374,31 +374,31 @@ namespace
 	public:
 		ImplMap() { }
 		
-		virtual ImplMap& makeMap(LLSD::Impl*&);
+        ImplMap& makeMap(LLSD::Impl*&) override;
 
-		virtual LLSD::Type type() const { return LLSD::TypeMap; }
+        LLSD::Type type() const override { return LLSD::TypeMap; }
 
-		virtual LLSD::Boolean asBoolean() const { return !mData.empty(); }
+        LLSD::Boolean asBoolean() const override { return !mData.empty(); }
 
-		virtual bool has(const std::string_view) const;
+        bool has(const std::string_view) const override;
 
 		using LLSD::Impl::get; // Unhiding get(LLSD::Integer)
 		using LLSD::Impl::erase; // Unhiding erase(LLSD::Integer)
 		using LLSD::Impl::ref; // Unhiding ref(LLSD::Integer)
-		virtual LLSD get(const std::string_view) const;
-		virtual LLSD getKeys() const; 
+        LLSD get(const std::string_view) const override;
+        LLSD getKeys() const override;
 		        void insert(const LLSD::String& k, const LLSD& v);
-		virtual void erase(const LLSD::String&);
+        void erase(const LLSD::String&) override;
 		              LLSD& ref(const std::string_view);
-		virtual const LLSD& ref(const std::string_view) const;
+        const LLSD& ref(const std::string_view) const override;
 
-		virtual int size() const { return mData.size(); }
+        int size() const override { return mData.size(); }
 
 		DataMap& map() final override { return mData; }
 		const DataMap& map() const final override { return mData; }
 
-		virtual void dumpStats() const;
-		virtual void calcStats(S32 type_counts[], S32 share_counts[]) const;
+        void dumpStats() const override;
+        void calcStats(S32 type_counts[], S32 share_counts[]) const override;
 	};
 	
 	ImplMap& ImplMap::makeMap(LLSD::Impl*& var)
@@ -499,7 +499,7 @@ namespace
 	}
 
 
-	class ImplArray : public LLSD::Impl
+	class ImplArray final : public LLSD::Impl
 	{
 	private:
 		typedef std::vector<LLSD>	DataVector;
@@ -510,30 +510,30 @@ namespace
 		ImplArray(const DataVector& data) : mData(data) { }
 		
 	public:
-		ImplArray() { }
+        ImplArray() = default;
 		
-		virtual ImplArray& makeArray(Impl*&);
+        ImplArray& makeArray(Impl*&) override;
 
-		virtual LLSD::Type type() const { return LLSD::TypeArray; }
+        LLSD::Type type() const override { return LLSD::TypeArray; }
 
-		virtual LLSD::Boolean asBoolean() const { return !mData.empty(); }
+        LLSD::Boolean asBoolean() const override { return !mData.empty(); }
 
 		using LLSD::Impl::get; // Unhiding get(LLSD::String)
 		using LLSD::Impl::erase; // Unhiding erase(LLSD::String)
 		using LLSD::Impl::ref; // Unhiding ref(LLSD::String)
-		virtual int size() const; 
-		virtual LLSD get(LLSD::Integer) const;
+        int size() const override;
+        LLSD get(LLSD::Integer) const override;
 		        void set(LLSD::Integer, const LLSD&);
 		        void insert(LLSD::Integer, const LLSD&);
 		        LLSD& append(const LLSD&);
-		virtual void erase(LLSD::Integer);
+        void erase(LLSD::Integer) override;
 		              LLSD& ref(LLSD::Integer);
-		virtual const LLSD& ref(LLSD::Integer) const; 
+        const LLSD& ref(LLSD::Integer) const override;
 
 		DataVector& array() final override { return mData; }
 		const DataVector& array() const final override { return mData; }
 
-		virtual void calcStats(S32 type_counts[], S32 share_counts[]) const;
+        void calcStats(S32 type_counts[], S32 share_counts[]) const override;
 	};
 
 	ImplArray& ImplArray::makeArray(Impl*& var)
diff --git a/indra/llcommon/llsdserialize.h b/indra/llcommon/llsdserialize.h
index b24ef9d9c477605278510a1f5936b9659a85af42..9702eca57336c0079aef237ac3a782197ac2593c 100644
--- a/indra/llcommon/llsdserialize.h
+++ b/indra/llcommon/llsdserialize.h
@@ -34,6 +34,8 @@
 #include "llrefcount.h"
 #include "llsd.h"
 
+#include "absl/strings/str_format.h"
+
 /** 
  * @class LLSDParser
  * @brief Abstract base class for LLSD parsers.
@@ -500,7 +502,7 @@ class LL_COMMON_API LLSDFormatter : public LLRefCount
 	void formatReal(LLSD::Real real, std::ostream& ostr) const;
 
 	bool mBoolAlpha;
-	std::string mRealFormat;
+    std::unique_ptr<absl::ParsedFormat<absl::FormatConversionCharSet::kFloating> > mRealFormat;
 	EFormatterOptions mOptions;
 };
 
diff --git a/indra/llcommon/llsdserialize_xml.cpp b/indra/llcommon/llsdserialize_xml.cpp
index 4a6a4a02fa699904cb6d0cdff347d22b32ffae7b..e61a6000e22b0788bcf7d8d8881b011e87727b17 100644
--- a/indra/llcommon/llsdserialize_xml.cpp
+++ b/indra/llcommon/llsdserialize_xml.cpp
@@ -35,7 +35,7 @@
 
 extern "C"
 {
-#ifdef LL_USESYSTEMLIBS
+#if LL_DARWIN || defined(LL_USESYSTEMLIBS)
 # include <expat.h>
 #else
 # include "expat/expat.h"
@@ -150,7 +150,7 @@ S32 LLSDXMLFormatter::format_impl(const LLSD& data, std::ostream& ostr,
 
 	case LLSD::TypeReal:
 		ostr << pre << "<real>";
-		if(mRealFormat.empty())
+		if(!mRealFormat)
 		{
 			ostr << data.asReal();
 		}
diff --git a/indra/llcommon/llsdutil.cpp b/indra/llcommon/llsdutil.cpp
index 384b6cb8f774b0e7827f61c10c105ccbdbb19d96..f53e7981e2b57ecd3c97c9a9c40dd454b4515e85 100644
--- a/indra/llcommon/llsdutil.cpp
+++ b/indra/llcommon/llsdutil.cpp
@@ -47,7 +47,7 @@
 #include <set>
 #include <boost/range.hpp>
 
-#if LL_GNUC
+#if LL_GNUC && GCC_VERSION >= 80000
 #pragma GCC diagnostic ignored "-Wstringop-truncation"
 #endif
 
diff --git a/indra/llcommon/llsingleton.cpp b/indra/llcommon/llsingleton.cpp
index 3c205e44bb59be1da2749bb778a79a8529c278c6..c196fd33064bccd0e7afced49f618bb2e14cc063 100644
--- a/indra/llcommon/llsingleton.cpp
+++ b/indra/llcommon/llsingleton.cpp
@@ -386,7 +386,7 @@ LLSingletonBase::vec_t LLSingletonBase::dep_sort()
     // extracts just the first (key) element from each sorted_iterator, then
     // uses vec_t's range constructor... but frankly this is more
     // straightforward, as long as we remember the above reserve() call!
-    for (const SingletonDeps::sorted_iterator::value_type& pair : sdeps.sort())
+    for (const SingletonDeps::sorted_iterator::value_type pair : sdeps.sort())
     {
         ret.push_back(pair.first);
     }
diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp
index 4e4ad0fcf41cbb94f44bc3161724d7093a38f3dc..8f40c3c52a5fa7aa56f41cda0d9f3d06112a3b37 100644
--- a/indra/llcommon/llstring.cpp
+++ b/indra/llcommon/llstring.cpp
@@ -199,7 +199,7 @@ S32 utf16chars_to_wchar(const U16* inchars, llwchar* outchar)
 {
 	const U16* base = inchars;
 	U16 cur_char = *inchars++;
-	llwchar char32 = cur_char;
+	llwchar char32;
 	if ((cur_char >= 0xD800) && (cur_char <= 0xDFFF))
 	{
 		// Surrogates
diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h
index b4bc7fbd84419fdb96e4b712bc3faa6e0c4755a5..461e7fd4942342e5e22fd29646b6c56494be204c 100644
--- a/indra/llcommon/llstring.h
+++ b/indra/llcommon/llstring.h
@@ -33,7 +33,7 @@
 #endif
 #include <boost/optional/optional.hpp>
 #include <absl/container/flat_hash_map.h>
-#if LL_GNUC
+#if LL_GNUC && GCC_VERSION >= 90000
 #pragma GCC diagnostic pop
 #endif
 #include <string>
diff --git a/indra/llcommon/llstringtable.cpp b/indra/llcommon/llstringtable.cpp
index d47eb01bd344b29e1ed25e4e0fe19055a797ce4c..83b5a971af4e6c4f39809e7f80e5ee22ebefa422 100644
--- a/indra/llcommon/llstringtable.cpp
+++ b/indra/llcommon/llstringtable.cpp
@@ -49,24 +49,24 @@ LLStringTableEntry::~LLStringTableEntry()
 	mCount = 0;
 }
 
-LLStringTable::LLStringTable(int tablesize)
+LLStringTable::LLStringTable(U32 tablesize)
 : mUniqueEntries(0)
 {
-	S32 i;
+	U32 i;
 	if (!tablesize)
-		tablesize = 4096; // some arbitrary default
+		tablesize = 4096U; // some arbitrary default
 	// Make sure tablesize is power of 2
-	for (i = 31; i>0; i--)
-	{
-		if (tablesize & (1<<i))
-		{
-			if (tablesize >= (3<<(i-1)))
-				tablesize = (1<<(i+1));
-			else
-				tablesize = (1<<i);
-			break;
-		}
-	}
+    for (i = 31U; i > 0U; i--)
+    {
+        if (tablesize & (1U << i))
+        {
+            if (tablesize >= (3U << (i - 1U)))
+                tablesize = (1U << (i + 1U));
+            else
+                tablesize = (1<<i);
+            break;
+        }
+    }
 	mMaxEntries = tablesize;
 
 #if !STRING_TABLE_HASH_MAP
@@ -85,7 +85,7 @@ LLStringTable::~LLStringTable()
 #if !STRING_TABLE_HASH_MAP
 	if (mStringList)
 	{
-		for (S32 i = 0; i < mMaxEntries; i++)
+		for (U32 i = 0; i < mMaxEntries; i++)
 		{
 			if (mStringList[i])
 			{
@@ -106,7 +106,7 @@ LLStringTable::~LLStringTable()
 }
 
 
-static U32 hash_my_string(const char *str, int max_entries)
+static U32 hash_my_string(const char *str, U32 max_entries)
 {
 	U32 retval = 0;
 #if 0
diff --git a/indra/llcommon/llstringtable.h b/indra/llcommon/llstringtable.h
index ff09e7167719e5882ec6321465376b174cecce9b..e17948cf597156c5c7b2587e0b6a33a0d639e412 100644
--- a/indra/llcommon/llstringtable.h
+++ b/indra/llcommon/llstringtable.h
@@ -60,7 +60,7 @@ class LL_COMMON_API LLStringTableEntry
 class LL_COMMON_API LLStringTable
 {
 public:
-	LLStringTable(int tablesize);
+	LLStringTable(U32 tablesize);
 	~LLStringTable();
 
 	char *checkString(const char *str);
@@ -74,7 +74,7 @@ class LL_COMMON_API LLStringTable
 	LLStringTableEntry *addStringEntry(const std::string& str);
 	void  removeString(const char *str);
 
-	S32 mMaxEntries;
+	U32 mMaxEntries;
 	S32 mUniqueEntries;
 	
 #if STRING_TABLE_HASH_MAP
diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp
index 9c6cbe44c7d2d0699d8aa6940ff3fbb155c374f9..edd19149f16ccebe8b66f9d50a3331c69288fbb0 100644
--- a/indra/llcommon/llsys.cpp
+++ b/indra/llcommon/llsys.cpp
@@ -62,6 +62,7 @@ using namespace llsd;
 #   include <psapi.h>               // GetPerformanceInfo() et al.
 #	include <VersionHelpers.h>
 #elif LL_DARWIN
+#   include "llsys_objc.h"
 #	include <errno.h>
 #	include <sys/sysctl.h>
 #	include <sys/utsname.h>
@@ -72,12 +73,6 @@ using namespace llsd;
 #	include <mach/mach_host.h>
 #	include <mach/task.h>
 #	include <mach/task_info.h>
-
-// disable warnings about Gestalt calls being deprecated
-// until Apple get's on the ball and provides an alternative
-//
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-
 #elif LL_LINUX
 #	include <errno.h>
 #	include <sys/utsname.h>
@@ -301,21 +296,18 @@ LLOSInfo::LLOSInfo() :
 #elif LL_DARWIN
 	
 	// Initialize mOSStringSimple to something like:
-	// "Mac OS X 10.6.7"
+	// "macOS 10.6.7"
 	{
-		const char * DARWIN_PRODUCT_NAME = "Mac OS X";
-		
-		SInt32 major_version, minor_version, bugfix_version;
-		OSErr r1 = Gestalt(gestaltSystemVersionMajor, &major_version);
-		OSErr r2 = Gestalt(gestaltSystemVersionMinor, &minor_version);
-		OSErr r3 = Gestalt(gestaltSystemVersionBugFix, &bugfix_version);
+		S32 major_version, minor_version, bugfix_version = 0;
 
-		if((r1 == noErr) && (r2 == noErr) && (r3 == noErr))
+		if (LLSysDarwin::getOperatingSystemInfo(major_version, minor_version, bugfix_version))
 		{
 			mMajorVer = major_version;
 			mMinorVer = minor_version;
 			mBuild = bugfix_version;
 
+            const char * DARWIN_PRODUCT_NAME = "macOS";
+            
 			std::stringstream os_version_string;
 			os_version_string << DARWIN_PRODUCT_NAME << " " << mMajorVer << "." << mMinorVer << "." << mBuild;
 			
@@ -329,7 +321,7 @@ LLOSInfo::LLOSInfo() :
 	}
 	
 	// Initialize mOSString to something like:
-	// "Mac OS X 10.6.7 Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386 i386"
+	// "macOS 10.6.7 Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386 i386"
 	struct utsname un;
 	if(uname(&un) != -1)
 	{		
@@ -988,9 +980,15 @@ LLSD LLMemoryInfo::loadStatsMap()
 	stats.add("PrivateUsage KB",               pmem.PrivateUsage/div);
 
 #elif LL_DARWIN
-
-	const vm_size_t pagekb(vm_page_size / 1024);
+	vm_size_t page_size_kb;
+	if (host_page_size(mach_host_self(), &page_size_kb) != KERN_SUCCESS)
+	{
+		LL_WARNS() << "Unable to get host page size. Using default value." << LL_ENDL;
+		page_size_kb = 4096;
+	}
 	
+	page_size_kb = page_size_kb / 1024;
+
 	//
 	// Collect the vm_stat's
 	//
@@ -1005,10 +1003,10 @@ LLSD LLMemoryInfo::loadStatsMap()
 		}
 		else
 		{
-			stats.add("Pages free KB",		pagekb * vmstat.free_count);
-			stats.add("Pages active KB",	pagekb * vmstat.active_count);
-			stats.add("Pages inactive KB",	pagekb * vmstat.inactive_count);
-			stats.add("Pages wired KB",		pagekb * vmstat.wire_count);
+			stats.add("Pages free KB",		page_size_kb * vmstat.free_count);
+			stats.add("Pages active KB",	page_size_kb * vmstat.active_count);
+			stats.add("Pages inactive KB",	page_size_kb * vmstat.inactive_count);
+			stats.add("Pages wired KB",		page_size_kb * vmstat.wire_count);
 
 			stats.add("Pages zero fill",		vmstat.zero_fill_count);
 			stats.add("Page reactivations",		vmstat.reactivations);
@@ -1073,13 +1071,6 @@ LLSD LLMemoryInfo::loadStatsMap()
 			}
 	}
 
-#elif LL_SOLARIS
-	U64 phys = 0;
-
-	phys = (U64)(sysconf(_SC_PHYS_PAGES)) * (U64)(sysconf(_SC_PAGESIZE)/1024);
-
-	stats.add("Total Physical KB", phys);
-
 #elif LL_LINUX
 	llifstream meminfo(MEMINFO_FILE);
 	if (meminfo.is_open())
@@ -1392,10 +1383,3 @@ BOOL gzip_file(const std::string& srcfile, const std::string& dstfile)
 	if (dst != NULL) gzclose(dst);
 	return retval;
 }
-
-#if LL_DARWIN
-// disable warnings about Gestalt calls being deprecated
-// until Apple get's on the ball and provides an alternative
-//
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#endif
diff --git a/indra/llcommon/llsys_objc.h b/indra/llcommon/llsys_objc.h
new file mode 100644
index 0000000000000000000000000000000000000000..2d12ca7f2b276c6322e23b327e2f87fa0fe1949a
--- /dev/null
+++ b/indra/llcommon/llsys_objc.h
@@ -0,0 +1,46 @@
+/*
+ * @file llsys_objc.h
+ * @brief Some objective-c crap for llcommon
+ *
+ * (C) 2014 Cinder Roxley @ Second Life <cinder@alchemyviewer.org>
+ *
+ * Permission is hereby granted, free of charge, to any person or organization
+ * obtaining a copy of the software and accompanying documentation covered by
+ * this license (the "Software") to use, reproduce, display, distribute,
+ * execute, and transmit the Software, and to prepare derivative works of the
+ * Software, and to permit third-parties to whom the Software is furnished to
+ * do so, all subject to the following:
+ *
+ * The copyright notices in the Software and this entire statement, including
+ * the above license grant, this restriction and the following disclaimer,
+ * must be included in all copies of the Software, in whole or in part, and
+ * all derivative works of the Software, unless such copies or derivative
+ * works are solely in the form of machine-executable object code generated by
+ * a source language processor.
+ *
+ * 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, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+ * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+ * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef LL_SYS_OBJC_H
+#define LL_SYS_OBJC_H
+
+#ifndef LL_DARWIN
+#  error "This file should only be included when building on mac!"
+#else
+
+namespace LLSysDarwin
+{
+
+bool getOperatingSystemInfo(int &major, int &minor, int &patch);
+const char* getPreferredLanguage();
+	
+}
+
+#endif // !LL_DARWIN
+#endif // LL_SYS_OBJC_H
diff --git a/indra/llcommon/llsys_objc.mm b/indra/llcommon/llsys_objc.mm
new file mode 100644
index 0000000000000000000000000000000000000000..46b3337e7fb85f97a8b5d58d115e0861cdb68e56
--- /dev/null
+++ b/indra/llcommon/llsys_objc.mm
@@ -0,0 +1,54 @@
+/*
+ * @file llsys_objc.mm
+ * @brief Some objective-c crap for llcommon
+ *
+ * (C) 2014 Cinder Roxley @ Second Life <cinder@alchemyviewer.org>
+ *
+ * Permission is hereby granted, free of charge, to any person or organization
+ * obtaining a copy of the software and accompanying documentation covered by
+ * this license (the "Software") to use, reproduce, display, distribute,
+ * execute, and transmit the Software, and to prepare derivative works of the
+ * Software, and to permit third-parties to whom the Software is furnished to
+ * do so, all subject to the following:
+ *
+ * The copyright notices in the Software and this entire statement, including
+ * the above license grant, this restriction and the following disclaimer,
+ * must be included in all copies of the Software, in whole or in part, and
+ * all derivative works of the Software, unless such copies or derivative
+ * works are solely in the form of machine-executable object code generated by
+ * a source language processor.
+ *
+ * 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, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+ * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+ * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef LL_DARWIN
+#  error "This file should only be included when building on mac!"
+#else
+
+#import "llsys_objc.h"
+#import <Foundation/Foundation.h>
+#import <AppKit/NSApplication.h>
+
+bool LLSysDarwin::getOperatingSystemInfo(int &major, int &minor, int &patch)
+{
+    NSOperatingSystemVersion osVersion = [[NSProcessInfo processInfo] operatingSystemVersion];
+    major = osVersion.majorVersion;
+    minor = osVersion.minorVersion;
+    patch = osVersion.patchVersion;
+	return true;
+}
+
+const char* LLSysDarwin::getPreferredLanguage()
+{
+	NSString* lang = [[NSLocale preferredLanguages] objectAtIndex:0];
+	const char* ret = [lang cStringUsingEncoding:NSASCIIStringEncoding];
+	return ret;
+}
+
+#endif // !LL_DARWIN
diff --git a/indra/llimage/llpngwrapper.cpp b/indra/llimage/llpngwrapper.cpp
index 1e51e7375e77e4e2b7c1083f8f0c44bd1da937e8..3becd96824eaccaa388fa9a2a51ee564f31dde98 100644
--- a/indra/llimage/llpngwrapper.cpp
+++ b/indra/llimage/llpngwrapper.cpp
@@ -257,11 +257,7 @@ void LLPngWrapper::normalizeImage()
 		png_set_strip_16(mReadPngPtr);
 	}
 
-#if LL_DARWIN
-	const F64 SCREEN_GAMMA = 1.8;
-#else
 	const F64 SCREEN_GAMMA = 2.2;
-#endif
 
 	if (png_get_gAMA(mReadPngPtr, mReadInfoPtr, &mGamma))
 	{
diff --git a/indra/llmessage/llnamevalue.cpp b/indra/llmessage/llnamevalue.cpp
index f7c0517b4c4e338b4a921e9d75634e5c41ea6830..51b3e3efc36faf5a3a8208972b0719d6c10635a4 100644
--- a/indra/llmessage/llnamevalue.cpp
+++ b/indra/llmessage/llnamevalue.cpp
@@ -35,7 +35,7 @@
 #include "llstring.h"
 #include "llstringtable.h"
 
-#if LL_GNUC
+#if LL_GNUC && GCC_VERSION >= 80000
 #pragma GCC diagnostic ignored "-Wstringop-truncation"
 #endif
 
diff --git a/indra/llmessage/net.cpp b/indra/llmessage/net.cpp
index 739cde0d12f2801addc2de865bb704f241e2653d..5dc3e6d72e71daed0cd6314f7d538427c7463082 100644
--- a/indra/llmessage/net.cpp
+++ b/indra/llmessage/net.cpp
@@ -76,14 +76,8 @@ static U32 gsnReceivingIFAddr = INVALID_HOST_IP_ADDRESS; // Address to which dat
 const char* LOOPBACK_ADDRESS_STRING = "127.0.0.1";
 const char* BROADCAST_ADDRESS_STRING = "255.255.255.255";
 
-#if LL_DARWIN
-	// Mac OS X returns an error when trying to set these to 400000.  Smaller values succeed.
-	const int	SEND_BUFFER_SIZE	= 200000;
-	const int	RECEIVE_BUFFER_SIZE	= 200000;
-#else // LL_DARWIN
-	const int	SEND_BUFFER_SIZE	= 400000;
-	const int	RECEIVE_BUFFER_SIZE	= 400000;
-#endif // LL_DARWIN
+const int	SEND_BUFFER_SIZE	= 400000;
+const int	RECEIVE_BUFFER_SIZE	= 400000;
 
 // universal functions (cross-platform)
 
diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp
index f910b0006e767e4a80bc82f934426ce7eb27d5f2..35b82b07e69898a81f0080df01796e180084c1fe 100644
--- a/indra/llplugin/llpluginclassmedia.cpp
+++ b/indra/llplugin/llpluginclassmedia.cpp
@@ -34,9 +34,6 @@
 #include "llcontrol.h"
 
 extern LLControlGroup gSavedSettings;
-#if LL_DARWIN
-extern BOOL gHiDPISupport;
-#endif
 
 static int LOW_PRIORITY_TEXTURE_SIZE_DEFAULT = 256;
 
@@ -368,9 +365,6 @@ void LLPluginClassMedia::setSizeInternal(void)
 		mRequestedMediaHeight = nextPowerOf2(mRequestedMediaHeight);
 	}
 
-#if LL_DARWIN
-    if (!gHiDPISupport)
-#endif
     {
         if (mRequestedMediaWidth > 8192)
             mRequestedMediaWidth = 8192;
diff --git a/indra/llplugin/slplugin/CMakeLists.txt b/indra/llplugin/slplugin/CMakeLists.txt
index 550b67eb09ce576d39381b8f114f58ef244e598a..a4d7d36ca22383f5df2c81fda26ec9902b8b8989 100644
--- a/indra/llplugin/slplugin/CMakeLists.txt
+++ b/indra/llplugin/slplugin/CMakeLists.txt
@@ -55,9 +55,11 @@ set_target_properties(SLPlugin
   PROPERTIES
   LINK_FLAGS_DEBUG "/NODEFAULTLIB:\"LIBCMTD\""
   )
-else ()
+elseif (DARWIN)
 set_target_properties(SLPlugin
   PROPERTIES
+  BUILD_WITH_INSTALL_RPATH 1
+  INSTALL_RPATH "@executable_path/../../../../Frameworks"
   MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/slplugin_info.plist
   )
 endif ()
@@ -71,7 +73,7 @@ target_link_libraries(SLPlugin
 )
 
 if (DARWIN)
-  # Mac version needs to link against Carbon
+  # Mac version needs to link against Cocoa
   target_link_libraries(SLPlugin ${COCOA_LIBRARY})
   # Make sure the app bundle has a Resources directory (it will get populated by viewer-manifest.py later)
   add_custom_command(
diff --git a/indra/llplugin/slplugin/slplugin-objc.mm b/indra/llplugin/slplugin/slplugin-objc.mm
index a5ab1d95c890f6bcbaf95b802c4f5c5eae3ca1d7..b919edac09e37d7fc6a7716f178c8b92848f8658 100644
--- a/indra/llplugin/slplugin/slplugin-objc.mm
+++ b/indra/llplugin/slplugin/slplugin-objc.mm
@@ -49,9 +49,6 @@ void LLCocoaPlugin::setupCocoa()
 		// when init'ing the Cocoa App window.		
 		[[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:@"NSTreatUnknownArgumentsAsOpen"];
 		
-		// This is a bit of voodoo taken from the Apple sample code "CarbonCocoa_PictureCursor":
-		//   http://developer.apple.com/samplecode/CarbonCocoa_PictureCursor/index.html
-		
 		//	Needed for Carbon based applications which call into Cocoa
 		NSApplicationLoad();
 
@@ -95,7 +92,7 @@ void LLCocoaPlugin::processEvents()
 {
      // Some plugins (webkit at least) will want an event loop.  This qualifies.
     NSEvent * event;
-    event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES];
+    event = [NSApp nextEventMatchingMask:NSEventMaskAny untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES];
     [NSApp sendEvent: event];
 }
 
diff --git a/indra/llrender/llfontfreetype.cpp b/indra/llrender/llfontfreetype.cpp
index 31eea6733bfee42c968b00f59be1ed9acb1d0eb4..0b2b6ea972f3e5131a130f5366e0940870aaafa7 100644
--- a/indra/llrender/llfontfreetype.cpp
+++ b/indra/llrender/llfontfreetype.cpp
@@ -448,7 +448,7 @@ LLFontGlyphInfo* LLFontFreetype::addGlyph(llwchar wch) const
 	if (glyph_index == 0)
 	{
 		//LL_INFOS() << "Trying to add glyph from fallback font!" << LL_ENDL;
-		for (const auto fallback_fontp : mFallbackFonts)
+		for (const auto& fallback_fontp : mFallbackFonts)
         {
 			glyph_index = FT_Get_Char_Index(fallback_fontp->mFTFace, wch);
 			if (glyph_index)
diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h
index fa66b66e03e469009b64b40874cda28b126376e2..c773fd62bcef80abe5e4463e5a781355f2fc172a 100644
--- a/indra/llrender/llglheaders.h
+++ b/indra/llrender/llglheaders.h
@@ -54,7 +54,11 @@
 #include "epoxy/glx.h"
 #endif
 
+#if LL_DARWIN
+#include <OpenGL/glu.h>
+#else
 #include <GL/glu.h>
+#endif
 
 #endif // LL_MESA
 
diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp
index 16b831fe02041603599059d2e5198be6d99499c2..ce4f4f013b8d17908828853b8f88327ca5382d42 100644
--- a/indra/llrender/llglslshader.cpp
+++ b/indra/llrender/llglslshader.cpp
@@ -33,10 +33,6 @@
 #include "llrender.h"
 #include "llvertexbuffer.h"
 
-#if LL_DARWIN
-#include "OpenGL/OpenGL.h"
-#endif
-
 // Lots of STL stuff in here, using namespace std to keep things more readable
 using std::vector;
 using std::pair;
diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp
index c62874d5c0e74d066dcf2caf1cf38cc7b94776cd..af0d7726ae27c35b55b11dfea55e63985007caa2 100644
--- a/indra/llrender/llshadermgr.cpp
+++ b/indra/llrender/llshadermgr.cpp
@@ -29,10 +29,6 @@
 #include "llrender.h"
 #include "llfile.h"
 
-#if LL_DARWIN
-#include "OpenGL/OpenGL.h"
-#endif
-
 // Lots of STL stuff in here, using namespace std to keep things more readable
 using std::vector;
 using std::pair;
@@ -1086,7 +1082,7 @@ BOOL LLShaderMgr::linkProgramObject(GLuint obj, BOOL suppress_errors)
 #if LL_DARWIN
 
 	// For some reason this absolutely kills the frame rate when VBO's are enabled
-	if (0)
+	/*if (0)
 	{
 		// Force an evaluation of the gl state so the driver can tell if the shader will run in hardware or software
 		// per Apple's suggestion
@@ -1117,7 +1113,7 @@ BOOL LLShaderMgr::linkProgramObject(GLuint obj, BOOL suppress_errors)
 			success = GL_FALSE;
 			suppress_errors = FALSE;		
 		}
-	}
+	}*/
 
 #else
 	std::string log = get_program_log(obj);
diff --git a/indra/llui/llcombobox.h b/indra/llui/llcombobox.h
index f3b3a6d683b59d6038b529cda365440c8a7bed12..945d58235a8405827a9241de66f071f660c42bda 100644
--- a/indra/llui/llcombobox.h
+++ b/indra/llui/llcombobox.h
@@ -92,7 +92,7 @@ class LLComboBox
 
 
 	virtual ~LLComboBox(); 
-	/*virtual*/ BOOL postBuild();
+	/*virtual*/ BOOL postBuild() override;
 	
 protected:
 	friend class LLUICtrlFactory;
@@ -102,29 +102,29 @@ class LLComboBox
 
 public:
 	// LLView interface
-	virtual void	onFocusLost();
+    void	onFocusLost() override;
 
-	virtual BOOL	handleToolTip(S32 x, S32 y, MASK mask);
-	virtual BOOL	handleKeyHere(KEY key, MASK mask);
-	virtual BOOL	handleUnicodeCharHere(llwchar uni_char);
+    BOOL	handleToolTip(S32 x, S32 y, MASK mask) override;
+    BOOL	handleKeyHere(KEY key, MASK mask) override;
+    BOOL	handleUnicodeCharHere(llwchar uni_char) override;
 	BOOL	handleScrollWheel(S32 x, S32 y, S32 clicks) final override;
 
 	// LLUICtrl interface
-	virtual void	clear();					// select nothing
-	virtual void	onCommit();
-	virtual BOOL	acceptsTextInput() const		{ return mAllowTextEntry; }
-	virtual BOOL	isDirty() const;			// Returns TRUE if the user has modified this control.
-	virtual void	resetDirty();				// Clear dirty state
+    void	clear() override;					// select nothing
+    void	onCommit() override;
+    BOOL	acceptsTextInput() const override { return mAllowTextEntry; }
+    BOOL	isDirty() const override;			// Returns TRUE if the user has modified this control.
+    void	resetDirty() override;				// Clear dirty state
 
-	virtual void	setFocus(BOOL b);
+    void	setFocus(BOOL b) override;
 
 	// Selects item by underlying LLSD value, using LLSD::asString() matching.  
 	// For simple items, this is just the name of the label.
-	virtual void	setValue(const LLSD& value );
+    void	setValue(const LLSD& value) override;
 
 	// Gets underlying LLSD value for currently selected items.  For simple
 	// items, this is just the label.
-	virtual LLSD	getValue() const;
+    LLSD	getValue() const override;
 
 	void			setTextEntry(const LLStringExplicit& text);
 	void			setKeystrokeOnEsc(BOOL enable);
@@ -164,34 +164,34 @@ class LLComboBox
 	void			createLineEditor(const Params&);
 
 	//========================================================================
-	LLCtrlSelectionInterface* getSelectionInterface()	{ return (LLCtrlSelectionInterface*)this; };
-	LLCtrlListInterface* getListInterface()				{ return (LLCtrlListInterface*)this; };
+	LLCtrlSelectionInterface* getSelectionInterface() override	{ return (LLCtrlSelectionInterface*)this; };
+	LLCtrlListInterface* getListInterface()	override			{ return (LLCtrlListInterface*)this; };
 
 	// LLCtrlListInterface functions
 	// See llscrolllistctrl.h
-	virtual S32		getItemCount() const;
+    S32		getItemCount() const override;
 	// Overwrites the default column (See LLScrollListCtrl for format)
-	virtual void 	addColumn(const LLSD& column, EAddPosition pos = ADD_BOTTOM);
-	virtual void 	clearColumns();
-	virtual void	setColumnLabel(const std::string& column, const std::string& label);
-	virtual LLScrollListItem* addElement(const LLSD& value, EAddPosition pos = ADD_BOTTOM, void* userdata = NULL);
-	virtual LLScrollListItem* addSimpleElement(const std::string& value, EAddPosition pos = ADD_BOTTOM, const LLSD& id = LLSD());
-	virtual void 	clearRows();
-	virtual void 	sortByColumn(const std::string& name, BOOL ascending);
+    void 	addColumn(const LLSD& column, EAddPosition pos = ADD_BOTTOM) override;
+    void 	clearColumns() override;
+    void	setColumnLabel(const std::string& column, const std::string& label) override;
+    LLScrollListItem* addElement(const LLSD& value, EAddPosition pos = ADD_BOTTOM, void* userdata = NULL) override;
+    LLScrollListItem* addSimpleElement(const std::string& value, EAddPosition pos = ADD_BOTTOM, const LLSD& id = LLSD()) override;
+    void 	clearRows() override;
+    void 	sortByColumn(const std::string& name, BOOL ascending) override;
 
 	// LLCtrlSelectionInterface functions
-	virtual BOOL	getCanSelect() const				{ return TRUE; }
-	virtual BOOL	selectFirstItem()					{ return setCurrentByIndex(0); }
-	virtual BOOL	selectNthItem( S32 index )			{ return setCurrentByIndex(index); }
-	virtual BOOL	selectItemRange( S32 first, S32 last );
-	virtual S32		getFirstSelectedIndex() const		{ return getCurrentIndex(); }
-	virtual BOOL	setCurrentByID( const LLUUID& id );
-	virtual LLUUID	getCurrentID() const;				// LLUUID::null if no items in menu
-	virtual BOOL	setSelectedByValue(const LLSD& value, BOOL selected);
-	virtual LLSD	getSelectedValue();
-	virtual BOOL	isSelected(const LLSD& value) const;
-	virtual BOOL	operateOnSelection(EOperation op);
-	virtual BOOL	operateOnAll(EOperation op);
+    BOOL	getCanSelect() const override				{ return TRUE; }
+    BOOL	selectFirstItem() override			        { return setCurrentByIndex(0); }
+    BOOL	selectNthItem( S32 index ) override	        { return setCurrentByIndex(index); }
+    BOOL	selectItemRange(S32 first, S32 last) override;
+    S32		getFirstSelectedIndex() const override		{ return getCurrentIndex(); }
+    BOOL	setCurrentByID( const LLUUID& id ) override;
+    LLUUID	getCurrentID() const override;				// LLUUID::null if no items in menu
+    BOOL	setSelectedByValue(const LLSD& value, BOOL selected) override;
+    LLSD	getSelectedValue() override;
+    BOOL	isSelected(const LLSD& value) const override;
+    BOOL	operateOnSelection(EOperation op) override;
+    BOOL	operateOnAll(EOperation op) override;
 
 	//========================================================================
 	
diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp
index 9a959394b1580228cd97add2aa94a431eb63ab74..4e03f3a7a5861ef608993566f48b9c246ae64229 100644
--- a/indra/llui/llfolderview.cpp
+++ b/indra/llui/llfolderview.cpp
@@ -768,7 +768,6 @@ void LLFolderView::removeSelectedItems()
 
 		// iterate through the new container.
 		count = items.size();
-		LLUUID new_selection_id;
 		LLFolderViewItem* item_to_select = getNextUnselectedItem();
 
 		if(count == 1)
diff --git a/indra/llui/llmultislider.cpp b/indra/llui/llmultislider.cpp
index 1ccfc065fb944deb2117386d4f7e159b363f253e..eaee50847dcf0f3020df248b766b44574857ec76 100644
--- a/indra/llui/llmultislider.cpp
+++ b/indra/llui/llmultislider.cpp
@@ -666,8 +666,6 @@ void LLMultiSlider::draw()
 	// drawing solids requires texturing be disabled
 	gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
 
-	LLRect rect(mDragStartThumbRect);
-
 	F32 opacity = getEnabled() ? 1.f : 0.3f;
 
 	// Track
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
index b6c65889b48bebffae6b6b30e479d1736a84db74..840331b770cc73ee1c1c8ada6df4010d86f65a89 100644
--- a/indra/llui/llui.cpp
+++ b/indra/llui/llui.cpp
@@ -222,13 +222,8 @@ void LLUI::setPopupFuncs(const add_popup_t& add_popup, const remove_popup_t& rem
 // static
 void LLUI::setMousePositionScreen(S32 x, S32 y)
 {
-#if defined(LL_DARWIN)
-    S32 screen_x = ll_round(((F32)x * getScaleFactor().mV[VX]) / LLView::getWindow()->getSystemUISize());
-    S32 screen_y = ll_round(((F32)y * getScaleFactor().mV[VY]) / LLView::getWindow()->getSystemUISize());
-#else
     S32 screen_x = ll_round((F32)x * getScaleFactor().mV[VX]);
     S32 screen_y = ll_round((F32)y * getScaleFactor().mV[VY]);
-#endif
 	
 	getWindow()->setCursorPosition(LLCoordGL(screen_x, screen_y).convert());
 }
diff --git a/indra/llui/llxuiparser.cpp b/indra/llui/llxuiparser.cpp
index e7e824f0d72e865ca29bb2fb25dd0e62e7cee408..9803789a1e83e2780cddcfaa53a46ad398113a6c 100644
--- a/indra/llui/llxuiparser.cpp
+++ b/indra/llui/llxuiparser.cpp
@@ -30,10 +30,10 @@
 
 #include "llxmlnode.h"
 #include "llfasttimer.h"
-#ifdef LL_USESYSTEMLIBS
-#include <expat.h>
+#if LL_DARWIN || defined(LL_USESYSTEMLIBS)
+# include <expat.h>
 #else
-#include "expat/expat.h"
+# include "expat/expat.h"
 #endif
 
 #include <fstream>
diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp
index 82831b36e29b9e8664ce2252cb3b464082cf169c..c5292b24ada68e94b94dc40fca17e169877d51d8 100644
--- a/indra/llvfs/lldir.cpp
+++ b/indra/llvfs/lldir.cpp
@@ -76,7 +76,6 @@ const char
 	*LLDir::TEXTURES = "textures",
 	*LLDir::SKINBASE = "";
 
-static const char* const empty = "";
 std::string LLDir::sDumpDir = "";
 
 LLDir::LLDir()
diff --git a/indra/llvfs/lldir.h b/indra/llvfs/lldir.h
index 38e204ef04729a9657a74f45a8540ae4a3083ce0..b6a96dace75d68d6262abe22521c15f23cd9298a 100644
--- a/indra/llvfs/lldir.h
+++ b/indra/llvfs/lldir.h
@@ -85,7 +85,7 @@ class LLDir
 	virtual std::string getLLPluginFilename(std::string base_name) = 0; // full path and name to the plugin DSO for this base_name (i.e. 'FOO' -> '/bar/baz/libFOO.so')
 
 	const std::string &getExecutablePathAndName() const;	// Full pathname of the executable
-	const std::string &getAppName() const;			// install directory under progams/ ie "SecondLife"
+	const std::string &getAppName() const;			// install directory under progams/ ie "Alchemy"
 	const std::string &getExecutableDir() const;	// Directory where the executable is located
 	const std::string &getExecutableFilename() const;// Filename of .exe
 	const std::string &getWorkingDir() const; // Current working directory
diff --git a/indra/llvfs/lldir_mac.cpp b/indra/llvfs/lldir_mac.cpp
index 87dc1b9795f518d4b4e2e0d12cb2ea6c4a2bc646..9a45d75be4a999d23cd1ba0822b3a6f9e336177f 100644
--- a/indra/llvfs/lldir_mac.cpp
+++ b/indra/llvfs/lldir_mac.cpp
@@ -64,27 +64,25 @@ LLDir_Mac::LLDir_Mac()
 {
 	mDirDelimiter = "/";
 
-    const std::string     secondLifeString = "SecondLife";
+    const std::string     secondLifeString = "AlchemyNext";
     
-    std::string *executablepathstr = getSystemExecutableFolder();
+    std::string executablepathstr = getSystemExecutableFolder();
 
     //NOTE:  LLINFOS/LLERRS will not output to log here.  The streams are not initialized.
     
-	if (executablepathstr)
+	if (!executablepathstr.empty())
 	{
 		// mExecutablePathAndName
-		mExecutablePathAndName = *executablepathstr;
+		mExecutablePathAndName = executablepathstr;
         
-        boost::filesystem::path executablepath(*executablepathstr);
+        boost::filesystem::path executablepath(executablepathstr);
         
-# ifndef BOOST_SYSTEM_NO_DEPRECATED
-#endif
         mExecutableFilename = executablepath.filename().string();
         mExecutableDir = executablepath.parent_path().string();
 		
 		// mAppRODataDir
-        std::string *resourcepath = getSystemResourceFolder();
-        mAppRODataDir = *resourcepath;
+        std::string resourcepath = getSystemResourceFolder();
+        mAppRODataDir = resourcepath;
 		
 		// *NOTE: When running in a dev tree, use the copy of
 		// skins in indra/newview/ rather than in the application bundle.  This
@@ -110,11 +108,11 @@ LLDir_Mac::LLDir_Mac()
 		}
 		
 		// mOSUserDir
-        std::string *appdir = getSystemApplicationSupportFolder();
+        std::string appdir = getSystemApplicationSupportFolder();
         std::string rootdir;
 
         //Create root directory
-        if (CreateDirectory(*appdir, secondLifeString, &rootdir))
+        if (CreateDirectory(appdir, secondLifeString, &rootdir))
         {
             
             // Save the full path to the folder
@@ -128,12 +126,12 @@ LLDir_Mac::LLDir_Mac()
         }
     
 		//mOSCacheDir
-        std::string *cachedir =  getSystemCacheFolder();
+        std::string cachedir =  getSystemCacheFolder();
 
-        if (cachedir)
+        if (!cachedir.empty())
 		
 		{
-            mOSCacheDir = *cachedir;
+            mOSCacheDir = cachedir;
             //TODO:  This changes from ~/Library/Cache/Secondlife to ~/Library/Cache/com.app.secondlife/Secondlife.  Last dir level could go away.
             CreateDirectory(mOSCacheDir, secondLifeString, NULL);
 		}
@@ -143,12 +141,10 @@ LLDir_Mac::LLDir_Mac()
 		
 		// mTempDir
         //Aura 120920 boost::filesystem::temp_directory_path() not yet implemented on mac. :(
-        std::string *tmpdir = getSystemTempFolder();
-        if (tmpdir)
+        std::string tmpdir = getSystemTempFolder();
+        if (!tmpdir.empty())
         {
-            
-            CreateDirectory(*tmpdir, secondLifeString, &mTempDir);
-            if (tmpdir) delete tmpdir;
+            CreateDirectory(tmpdir, secondLifeString, &mTempDir);
         }
 		
 		mWorkingDir = getCurPath();
diff --git a/indra/llvfs/llvfs.cpp b/indra/llvfs/llvfs.cpp
index 617056d94d224eeea3d89b26b45063fe469811e4..5c1b457456f1150ce61d780c82163a7ce4d68953 100644
--- a/indra/llvfs/llvfs.cpp
+++ b/indra/llvfs/llvfs.cpp
@@ -2120,9 +2120,10 @@ time_t LLVFS::creationTime()
     int errors = LLFile::stat(mDataFilename, &data_file_stat);
     if (0 == errors)
     {
-        time_t creation_time = data_file_stat.st_ctime;
 #if LL_DARWIN
-        creation_time = data_file_stat.st_birthtime;
+        time_t creation_time = data_file_stat.st_birthtime;
+#else
+        time_t creation_time = data_file_stat.st_ctime;
 #endif
         return creation_time;
     }
diff --git a/indra/llvfs/llvfs_objc.h b/indra/llvfs/llvfs_objc.h
index 56cdbebfc56257cf878c3326d59d64fad7e17cbc..686a082995d5f3818699a248a5fea9e1577f065b 100644
--- a/indra/llvfs/llvfs_objc.h
+++ b/indra/llvfs/llvfs_objc.h
@@ -33,11 +33,11 @@
 
 #include <iostream>
 
-std::string* getSystemTempFolder();
-std::string* getSystemCacheFolder();
-std::string* getSystemApplicationSupportFolder();
-std::string* getSystemResourceFolder();
-std::string* getSystemExecutableFolder();
+std::string getSystemTempFolder();
+std::string getSystemCacheFolder();
+std::string getSystemApplicationSupportFolder();
+std::string getSystemResourceFolder();
+std::string getSystemExecutableFolder();
 
 
 #endif // LL_LLVFS_OBJC_H
diff --git a/indra/llvfs/llvfs_objc.mm b/indra/llvfs/llvfs_objc.mm
index 282ea41339236eaac7b9f2a173a343f9e9857b18..9218b618ea1f56bee8a165874122bf11296df74d 100644
--- a/indra/llvfs/llvfs_objc.mm
+++ b/indra/llvfs/llvfs_objc.mm
@@ -30,75 +30,67 @@
 #include "llvfs_objc.h"
 #import <Cocoa/Cocoa.h>
 
-std::string* getSystemTempFolder()
+std::string getSystemTempFolder()
 {
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-    NSString * tempDir = NSTemporaryDirectory();
-    if (tempDir == nil)
-        tempDir = @"/tmp";
-    std::string *result = ( new std::string([tempDir UTF8String]) );
-    [pool release];
-    
-    return result;
+    @autoreleasepool {
+        NSString * tempDir = NSTemporaryDirectory();
+        if (tempDir == nil)
+            tempDir = @"/tmp";
+        return std::string([tempDir UTF8String]);
+    }
 }
 
 //findSystemDirectory scoped exclusively to this file. 
-std::string* findSystemDirectory(NSSearchPathDirectory searchPathDirectory,
+std::string findSystemDirectory(NSSearchPathDirectory searchPathDirectory,
                                    NSSearchPathDomainMask domainMask)
 {
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-    
-    std::string *result = nil;
-    NSString *path = nil;
-    
-    // Search for the path
-    NSArray* paths = NSSearchPathForDirectoriesInDomains(searchPathDirectory,
-                                                         domainMask,
-                                                         YES);
-    if ([paths count])
-    {
-        path = [paths objectAtIndex:0];
-        //HACK:  Always attempt to create directory, ignore errors.
-        NSError *error = nil;
+    @autoreleasepool {
+        std::string result;
+        NSString *path = nil;
+        
+        // Search for the path
+        NSArray* paths = NSSearchPathForDirectoriesInDomains(searchPathDirectory,
+                                                             domainMask,
+                                                             YES);
+        if ([paths count])
+        {
+            path = [paths objectAtIndex:0];
+            //HACK:  Always attempt to create directory, ignore errors.
+            NSError *error = nil;
 
-        [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&error];
+            [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&error];
 
-        
-        result = new std::string([path UTF8String]);        
+            
+            result = std::string([path UTF8String]);
+        }
+
+        return result;
     }
-    [pool release];
-    return result;
 }
 
-std::string* getSystemExecutableFolder()
+std::string getSystemExecutableFolder()
 {
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-
-    NSString *bundlePath = [[NSBundle mainBundle] executablePath];
-    std::string *result = (new std::string([bundlePath UTF8String]));  
-    [pool release];
-
-    return result;
+    @autoreleasepool {
+        NSString *bundlePath = [[NSBundle mainBundle] executablePath];
+        return std::string([bundlePath UTF8String]);
+    }
 }
 
-std::string* getSystemResourceFolder()
+std::string getSystemResourceFolder()
 {
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-
-    NSString *bundlePath = [[NSBundle mainBundle] resourcePath];
-    std::string *result = (new std::string([bundlePath UTF8String]));
-    [pool release];
-    
-    return result;
+    @autoreleasepool {
+        NSString *bundlePath = [[NSBundle mainBundle] resourcePath];
+        return std::string([bundlePath UTF8String]);
+    }
 }
 
-std::string* getSystemCacheFolder()
+std::string getSystemCacheFolder()
 {
     return findSystemDirectory (NSCachesDirectory,
                                 NSUserDomainMask);
 }
 
-std::string* getSystemApplicationSupportFolder()
+std::string getSystemApplicationSupportFolder()
 {
     return findSystemDirectory (NSApplicationSupportDirectory,
                                 NSUserDomainMask);
diff --git a/indra/llwindow/CMakeLists.txt b/indra/llwindow/CMakeLists.txt
index b058f5f1b688662074b5cf7e82f4830f5ebe4c33..89204cbb147e9e946e12972d2b821583dd958909 100644
--- a/indra/llwindow/CMakeLists.txt
+++ b/indra/llwindow/CMakeLists.txt
@@ -118,14 +118,6 @@ if (DARWIN)
     llopenglview-objc.h
     llappdelegate-objc.h
     )
-
-  # We use a bunch of deprecated system APIs.
-  set_source_files_properties(
-      llkeyboardmacosx.cpp
-      llwindowmacosx.cpp
-      PROPERTIES
-      COMPILE_FLAGS "-Wno-deprecated-declarations -fpascal-strings"
-      )
 endif (DARWIN)
 
 
diff --git a/indra/llwindow/llappdelegate-objc.h b/indra/llwindow/llappdelegate-objc.h
index 0b38647b4a75930691ef41559d43a6e972270555..a3f5f1e20e5d87cfd81b9486aad787662004b82d 100644
--- a/indra/llwindow/llappdelegate-objc.h
+++ b/indra/llwindow/llappdelegate-objc.h
@@ -27,6 +27,9 @@
 #import <Cocoa/Cocoa.h>
 #import "llopenglview-objc.h"
 
+@interface LLApplication : NSApplication
+@end
+
 @interface LLAppDelegate : NSObject <NSApplicationDelegate> {
 	LLNSWindow *window;
 	NSWindow *inputWindow;
@@ -47,5 +50,3 @@
 - (bool) romanScript;
 @end
 
-@interface LLApplication : NSApplication
-@end
diff --git a/indra/llwindow/llopenglview-objc.h b/indra/llwindow/llopenglview-objc.h
index 072d40f7391ec81874f2ce83ce8f2417947fc0cc..8664a5c105bfd4f2361ae7b990668bd4ddf3d182 100644
--- a/indra/llwindow/llopenglview-objc.h
+++ b/indra/llwindow/llopenglview-objc.h
@@ -42,7 +42,6 @@
 	unsigned int mMarkedTextLength;
     bool mMarkedTextAllowed;
     bool mSimulatedRightClick;
-    bool mOldResize;
 }
 - (id) initWithSamples:(NSUInteger)samples;
 - (id) initWithSamples:(NSUInteger)samples andVsync:(BOOL)vsync;
@@ -50,8 +49,6 @@
 
 - (void)commitCurrentPreedit;
 
-- (void) setOldResize:(bool)oldresize;
-
 // rebuildContext
 // Destroys and recreates a context with the view's internal format set via setPixelFormat;
 // Use this in event of needing to rebuild a context for whatever reason, without needing to assign a new pixel format.
@@ -68,7 +65,6 @@
 - (unsigned long) getVramSize;
 
 - (void) allowMarkedTextInput:(bool)allowed;
-- (void) viewDidEndLiveResize;
 
 @end
 
@@ -88,9 +84,6 @@
 
 @interface LLNSWindow : NSWindow
 
-- (NSPoint)convertToScreenFromLocalPoint:(NSPoint)point relativeToView:(NSView *)view;
-- (NSPoint)flipPoint:(NSPoint)aPoint;
-
 @end
 
 @interface NSScreen (PointConversion)
@@ -100,16 +93,6 @@
  */
 + (NSScreen *)currentScreenForMouseLocation;
 
-/*
- Allows you to convert a point from global coordinates to the current screen coordinates.
- */
-- (NSPoint)convertPointToScreenCoordinates:(NSPoint)aPoint;
-
-/*
- Allows to flip the point coordinates, so y is 0 at the top instead of the bottom. x remains the same
- */
-- (NSPoint)flipPoint:(NSPoint)aPoint;
-
 @end
 
 #endif
diff --git a/indra/llwindow/llopenglview-objc.mm b/indra/llwindow/llopenglview-objc.mm
index d2c5b11c3d1899ff7b3db870eba8bb53083ab004..5730e702322024610cd3303b2bab7373df3493b3 100644
--- a/indra/llwindow/llopenglview-objc.mm
+++ b/indra/llwindow/llopenglview-objc.mm
@@ -28,8 +28,6 @@
 #import "llwindowmacosx-objc.h"
 #import "llappdelegate-objc.h"
 
-extern BOOL gHiDPISupport;
-
 #pragma mark local functions
 
 NativeKeyEventData extractKeyDataFromKeyEvent(NSEvent* theEvent)
@@ -104,35 +102,10 @@ attributedStringInfo getSegments(NSAttributedString *str)
     
     return screen;
 }
-
-
-- (NSPoint)convertPointToScreenCoordinates:(NSPoint)aPoint
-{
-    float normalizedX = fabs(fabs(self.frame.origin.x) - fabs(aPoint.x));
-    float normalizedY = aPoint.y - self.frame.origin.y;
-    
-    return NSMakePoint(normalizedX, normalizedY);
-}
-
-- (NSPoint)flipPoint:(NSPoint)aPoint
-{
-    return NSMakePoint(aPoint.x, self.frame.size.height - aPoint.y);
-}
-
 @end
 
 @implementation LLOpenGLView
 
-// Force a high quality update after live resizing
-- (void) viewDidEndLiveResize
-{
-    if (mOldResize)  //Maint-3135
-    {
-        NSSize size = [self frame].size;
-        callResize(size.width, size.height);
-    }
-}
-
 - (unsigned long)getVramSize
 {
     CGLRendererInfoObj info = 0;
@@ -154,46 +127,38 @@ attributedStringInfo getSegments(NSAttributedString *str)
 
 - (void)viewDidMoveToWindow
 {
-	[[NSNotificationCenter defaultCenter] addObserver:self
-											 selector:@selector(windowResized:) name:NSWindowDidResizeNotification
-											   object:[self window]];
+    [[NSNotificationCenter defaultCenter] addObserver:self
+                                             selector:@selector(windowResized:) name:NSWindowDidResizeNotification
+                                               object:[self window]];
     
     [[NSNotificationCenter defaultCenter] addObserver:self
-											 selector:@selector(windowWillMiniaturize:) name:NSWindowWillMiniaturizeNotification
-											   object:[self window]];
+                                             selector:@selector(windowWillMiniaturize:) name:NSWindowWillMiniaturizeNotification
+                                               object:[self window]];
     
     [[NSNotificationCenter defaultCenter] addObserver:self
-											 selector:@selector(windowDidDeminiaturize:) name:NSWindowDidDeminiaturizeNotification
-											   object:[self window]];
+                                             selector:@selector(windowDidDeminiaturize:) name:NSWindowDidDeminiaturizeNotification
+                                               object:[self window]];
     
     [[NSNotificationCenter defaultCenter] addObserver:self
-											 selector:@selector(windowDidBecomeKey:) name:NSWindowDidBecomeKeyNotification
-											   object:[self window]];
-	[[NSNotificationCenter defaultCenter] addObserver:self
-											 selector:@selector(windowDidChangeScreen:) name:NSWindowDidChangeScreenNotification
-											   object:[self window]];
-
-
-    NSRect wnd_rect = [[self window] frame];
-    NSRect dev_rect = [self convertRectToBacking:wnd_rect];
-    if (!NSEqualSizes(wnd_rect.size,dev_rect.size))
+                                             selector:@selector(windowDidBecomeKey:) name:NSWindowDidBecomeKeyNotification
+                                               object:[self window]];
+    [[NSNotificationCenter defaultCenter] addObserver:self
+                                             selector:@selector(windowDidChangeBackingProperties:) name:NSWindowDidChangeBackingPropertiesNotification
+                                               object:[self window]];
+    
+    NSRect rect = [[self window] frame];
+    NSRect scaled_rect = [self convertRectToBacking:rect];
+    if (NSEqualSizes(rect.size, scaled_rect.size))
     {
-        callResize(dev_rect.size.width, dev_rect.size.height);
+        callResize(scaled_rect.size.width, scaled_rect.size.height);
     }
 }
 
-- (void)setOldResize:(bool)oldresize
-{
-    mOldResize = oldresize;
-}
-
 - (void)windowResized:(NSNotification *)notification;
 {
-    if (!mOldResize)  //Maint-3288
-    {
-        NSSize dev_sz = gHiDPISupport ? [self convertSizeToBacking:[self frame].size] : [self frame].size;
-        callResize(dev_sz.width, dev_sz.height);
-    }
+    NSSize size = [self frame].size;
+    NSSize scaled_size = [self convertSizeToBacking:size];
+    callResize(scaled_size.width, scaled_size.height);
 }
 
 - (void)windowWillMiniaturize:(NSNotification *)notification;
@@ -211,9 +176,12 @@ attributedStringInfo getSegments(NSAttributedString *str)
     mModifiers = [NSEvent modifierFlags];
 }
 
--(void)windowDidChangeScreen:(NSNotification *)notification;
+-(void)windowDidChangeBackingProperties:(NSNotification *)notification;
 {
-	callWindowDidChangeScreen();
+    NSSize size = [self frame].size;
+    NSSize scaled_size = [self convertSizeToBacking:size];
+    float scale_factor = [self convertSizeToBacking:NSMakeSize(1, 1)].width;
+    callHandleDPIChanged(scaled_size.width, scaled_size.height, scale_factor);
 }
 
 - (void)dealloc
@@ -239,66 +207,61 @@ attributedStringInfo getSegments(NSAttributedString *str)
 
 - (id) initWithFrame:(NSRect)frame withSamples:(NSUInteger)samples andVsync:(BOOL)vsync
 {
-	[self registerForDraggedTypes:[NSArray arrayWithObject:NSURLPboardType]];
-	[self initWithFrame:frame];
-	
-	// Initialize with a default "safe" pixel format that will work with versions dating back to OS X 10.6.
-	// Any specialized pixel formats, i.e. a core profile pixel format, should be initialized through rebuildContextWithFormat.
-	// 10.7 and 10.8 don't really care if we're defining a profile or not.  If we don't explicitly request a core or legacy profile, it'll always assume a legacy profile (for compatibility reasons).
-	NSOpenGLPixelFormatAttribute attrs[] = {
-        NSOpenGLPFANoRecovery,
-		NSOpenGLPFADoubleBuffer,
-		NSOpenGLPFAClosestPolicy,
-		NSOpenGLPFAAccelerated,
-		NSOpenGLPFASampleBuffers, static_cast<NSOpenGLPixelFormatAttribute>(samples > 0 ? 1 : 0),
-		NSOpenGLPFASamples, static_cast<NSOpenGLPixelFormatAttribute>(samples),
-		NSOpenGLPFAStencilSize, 8,
-		NSOpenGLPFADepthSize, 24,
-		NSOpenGLPFAAlphaSize, 8,
-		NSOpenGLPFAColorSize, 24,
-		0
-    };
-	
-	NSOpenGLPixelFormat *pixelFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:attrs] autorelease];
-	
-	if (pixelFormat == nil)
-	{
-		NSLog(@"Failed to create pixel format!", nil);
-		return nil;
-	}
-	
-	NSOpenGLContext *glContext = [[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:nil];
-	
-	if (glContext == nil)
-	{
-		NSLog(@"Failed to create OpenGL context!", nil);
-		return nil;
-	}
-	
-	[self setPixelFormat:pixelFormat];
+	self = [super initWithFrame:frame];
+	if (!self) { return self; }	// Despite what this may look like, returning nil self is a-ok.
+    @autoreleasepool {
+        [self registerForDraggedTypes:[NSArray arrayWithObject:NSURLPboardType]];
+        
+        // Initialize with a default "safe" pixel format that will work with versions dating back to OS X 10.6.
+        // Any specialized pixel formats, i.e. a core profile pixel format, should be initialized through rebuildContextWithFormat.
+        // 10.7 and 10.8 don't really care if we're defining a profile or not.  If we don't explicitly request a core or legacy profile, it'll always assume a legacy profile (for compatibility reasons).
+        NSOpenGLPixelFormatAttribute attrs[] = {
+            NSOpenGLPFANoRecovery,
+            NSOpenGLPFADoubleBuffer,
+            NSOpenGLPFAClosestPolicy,
+            NSOpenGLPFAAccelerated,
+            NSOpenGLPFAMultisample,
+            NSOpenGLPFASampleBuffers, static_cast<NSOpenGLPixelFormatAttribute>((samples > 0 ? 1 : 0)),
+            NSOpenGLPFASamples, static_cast<NSOpenGLPixelFormatAttribute>(samples),
+            NSOpenGLPFAStencilSize, static_cast<NSOpenGLPixelFormatAttribute>(8),
+            NSOpenGLPFADepthSize, static_cast<NSOpenGLPixelFormatAttribute>(24),
+            NSOpenGLPFAAlphaSize, static_cast<NSOpenGLPixelFormatAttribute>(8),
+            NSOpenGLPFAColorSize, static_cast<NSOpenGLPixelFormatAttribute>(24),
+            0
+        };
+        
+        NSOpenGLPixelFormat *pixelFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:attrs] autorelease];
+        
+        if (pixelFormat == nil)
+        {
+            NSLog(@"Failed to create pixel format!", nil);
+            return nil;
+        }
+        
+        NSOpenGLContext *glContext = [[[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:nil] autorelease];
+        
+        if (glContext == nil)
+        {
+            NSLog(@"Failed to create OpenGL context!", nil);
+            return nil;
+        }
+        
+        //for retina support
+        [self setWantsBestResolutionOpenGLSurface:YES];
+        
+        [self setPixelFormat:pixelFormat];
+        
+        [self setOpenGLContext:glContext];
+        
+        [glContext setView:self];
+        
+        [glContext makeCurrentContext];
+        
+        GLint glVsync = vsync ? 1 : 0;
+        [glContext setValues:&glVsync forParameter:NSOpenGLCPSwapInterval];
 
-	//for retina support
-	[self setWantsBestResolutionOpenGLSurface:gHiDPISupport];
+    }
 
-	[self setOpenGLContext:glContext];
-	
-	[glContext setView:self];
-	
-	[glContext makeCurrentContext];
-	
-	if (vsync)
-	{
-		[glContext setValues:(const GLint*)1 forParameter:NSOpenGLCPSwapInterval];
-	} else {
-		// supress this error after move to Xcode 7:
-		// error: null passed to a callee that requires a non-null argument [-Werror,-Wnonnull]
-		// Tried using ObjC 'nonnull' keyword as per SO article but didn't build
-		GLint swapInterval=0;
-		[glContext setValues:&swapInterval forParameter:NSOpenGLCPSwapInterval];
-	}
-	
-    mOldResize = false;
-    
 	return self;
 }
 
@@ -309,20 +272,23 @@ attributedStringInfo getSegments(NSAttributedString *str)
 
 - (BOOL) rebuildContextWithFormat:(NSOpenGLPixelFormat *)format
 {
-	NSOpenGLContext *ctx = [self openGLContext];
-	
-	[ctx clearDrawable];
-	[ctx initWithFormat:format shareContext:nil];
-	
-	if (ctx == nil)
-	{
-		NSLog(@"Failed to create OpenGL context!", nil);
-		return false;
-	}
-	
-	[self setOpenGLContext:ctx];
-	[ctx setView:self];
-	[ctx makeCurrentContext];
+    @autoreleasepool {
+        NSOpenGLContext *ctx = [self openGLContext];
+        
+        [ctx clearDrawable];
+        ctx = [[[NSOpenGLContext alloc] initWithFormat:format shareContext:nil] autorelease];
+        
+        if (ctx == nil)
+        {
+            NSLog(@"Failed to create OpenGL context!", nil);
+            return false;
+        }
+        
+        [self setOpenGLContext:ctx];
+        [ctx setView:self];
+        [ctx makeCurrentContext];
+    }
+
 	return true;
 }
 
@@ -343,18 +309,14 @@ attributedStringInfo getSegments(NSAttributedString *str)
 
 - (void) mouseDown:(NSEvent *)theEvent
 {
-    NSPoint mPoint = gHiDPISupport ? [self convertPointToBacking:[theEvent locationInWindow]] : [theEvent locationInWindow];
-    mMousePos[0] = mPoint.x;
-    mMousePos[1] = mPoint.y;
-
     // Apparently people still use this?
-    if ([theEvent modifierFlags] & NSCommandKeyMask &&
-        !([theEvent modifierFlags] & NSControlKeyMask) &&
-        !([theEvent modifierFlags] & NSShiftKeyMask) &&
-        !([theEvent modifierFlags] & NSAlternateKeyMask) &&
-        !([theEvent modifierFlags] & NSAlphaShiftKeyMask) &&
-        !([theEvent modifierFlags] & NSFunctionKeyMask) &&
-        !([theEvent modifierFlags] & NSHelpKeyMask))
+    if ([theEvent modifierFlags] & NSEventModifierFlagCommand &&
+        !([theEvent modifierFlags] & NSEventModifierFlagControl) &&
+        !([theEvent modifierFlags] & NSEventModifierFlagShift) &&
+        !([theEvent modifierFlags] & NSEventModifierFlagOption) &&
+        !([theEvent modifierFlags] & NSEventModifierFlagCapsLock) &&
+        !([theEvent modifierFlags] & NSEventModifierFlagFunction) &&
+        !([theEvent modifierFlags] & NSEventModifierFlagHelp))
     {
         callRightMouseDown(mMousePos, [theEvent modifierFlags]);
         mSimulatedRightClick = true;
@@ -375,7 +337,7 @@ attributedStringInfo getSegments(NSAttributedString *str)
         callRightMouseUp(mMousePos, [theEvent modifierFlags]);
         mSimulatedRightClick = false;
     } else {
-        NSPoint mPoint = gHiDPISupport ? [self convertPointToBacking:[theEvent locationInWindow]] : [theEvent locationInWindow];
+        NSPoint mPoint = [self convertPointToBacking:[theEvent locationInWindow]];
         mMousePos[0] = mPoint.x;
         mMousePos[1] = mPoint.y;
         callLeftMouseUp(mMousePos, [theEvent modifierFlags]);
@@ -384,32 +346,28 @@ attributedStringInfo getSegments(NSAttributedString *str)
 
 - (void) rightMouseDown:(NSEvent *)theEvent
 {
-    NSPoint mPoint = gHiDPISupport ? [self convertPointToBacking:[theEvent locationInWindow]] : [theEvent locationInWindow];
-    mMousePos[0] = mPoint.x;
-    mMousePos[1] = mPoint.y;
 	callRightMouseDown(mMousePos, [theEvent modifierFlags]);
 }
 
 - (void) rightMouseUp:(NSEvent *)theEvent
 {
-    NSPoint mPoint = gHiDPISupport ? [self convertPointToBacking:[theEvent locationInWindow]] : [theEvent locationInWindow];
-    mMousePos[0] = mPoint.x;
-    mMousePos[1] = mPoint.y;
 	callRightMouseUp(mMousePos, [theEvent modifierFlags]);
 }
 
 - (void)mouseMoved:(NSEvent *)theEvent
 {
-    NSPoint dev_delta = gHiDPISupport ? [self convertPointToBacking:NSMakePoint([theEvent deltaX], [theEvent deltaY])] : NSMakePoint([theEvent deltaX], [theEvent deltaY]);
+	// We need a point to be able to convert these.
+	NSPoint delta = NSMakePoint([theEvent deltaX], [theEvent deltaY]);
+	NSPoint scaled_delta = [self convertPointToBacking:delta];
 
 	float mouseDeltas[] = {
-		float(dev_delta.x),
-		float(dev_delta.y)
+		float(scaled_delta.x),
+		float(scaled_delta.y)
 	};
-	
+
 	callDeltaUpdate(mouseDeltas, 0);
-	
-    NSPoint mPoint = gHiDPISupport ? [self convertPointToBacking:[theEvent locationInWindow]] : [theEvent locationInWindow];
+    
+	NSPoint mPoint = [self convertPointToBacking:[theEvent locationInWindow]];
 	mMousePos[0] = mPoint.x;
 	mMousePos[1] = mPoint.y;
 	callMouseMoved(mMousePos, 0);
@@ -423,35 +381,30 @@ attributedStringInfo getSegments(NSAttributedString *str)
 	// Trust the deltas supplied by NSEvent.
 	// The old CoreGraphics APIs we previously relied on are now flagged as obsolete.
 	// NSEvent isn't obsolete, and provides us with the correct deltas.
-
-    NSPoint dev_delta = gHiDPISupport ? [self convertPointToBacking:NSMakePoint([theEvent deltaX], [theEvent deltaY])] : NSMakePoint([theEvent deltaX], [theEvent deltaY]);
-
+	// We need a point to be able to convert these.
+	NSPoint delta = NSMakePoint([theEvent deltaX], [theEvent deltaY]);
+	NSPoint scaled_delta = [self convertPointToBacking:delta];
+	
 	float mouseDeltas[] = {
-		float(dev_delta.x),
-		float(dev_delta.y)
+		float(scaled_delta.x),
+		float(scaled_delta.y)
 	};
 	
 	callDeltaUpdate(mouseDeltas, 0);
 	
-	NSPoint mPoint = gHiDPISupport ? [self convertPointToBacking:[theEvent locationInWindow]] : [theEvent locationInWindow];
+	NSPoint mPoint = [self convertPointToBacking:[theEvent locationInWindow]];
 	mMousePos[0] = mPoint.x;
 	mMousePos[1] = mPoint.y;
-	callMouseDragged(mMousePos, 0);
+	callMouseMoved(mMousePos, 0);
 }
 
 - (void) otherMouseDown:(NSEvent *)theEvent
 {
-    NSPoint mPoint = gHiDPISupport ? [self convertPointToBacking:[theEvent locationInWindow]] : [theEvent locationInWindow];
-    mMousePos[0] = mPoint.x;
-    mMousePos[1] = mPoint.y;
     callOtherMouseDown(mMousePos, [theEvent modifierFlags], [theEvent buttonNumber]);
 }
 
 - (void) otherMouseUp:(NSEvent *)theEvent
 {
-    NSPoint mPoint = gHiDPISupport ? [self convertPointToBacking:[theEvent locationInWindow]] : [theEvent locationInWindow];
-    mMousePos[0] = mPoint.x;
-    mMousePos[1] = mPoint.y;
     callOtherMouseUp(mMousePos, [theEvent modifierFlags], [theEvent buttonNumber]);
 }
 
@@ -498,7 +451,7 @@ attributedStringInfo getSegments(NSAttributedString *str)
     unichar ch;
     if (acceptsText &&
         !mMarkedTextAllowed &&
-        !(mModifiers & (NSControlKeyMask | NSCommandKeyMask)) &&  // commands don't invoke InputWindow
+        !(mModifiers & (NSEventModifierFlagControl | NSEventModifierFlagCommand)) &&  // commands don't invoke InputWindow
         ![(LLAppDelegate*)[NSApp delegate] romanScript] &&
         (ch = [[theEvent charactersIgnoringModifiers] characterAtIndex:0]) > ' ' &&
         ch != NSDeleteCharacter &&
@@ -522,13 +475,13 @@ attributedStringInfo getSegments(NSAttributedString *str)
     switch([theEvent keyCode])
     {        
         case 56:
-            mask = NSShiftKeyMask;
+            mask = NSEventModifierFlagShift;
             break;
         case 58:
-            mask = NSAlternateKeyMask;
+            mask = NSEventModifierFlagOption;
             break;
         case 59:
-            mask = NSControlKeyMask;
+            mask = NSEventModifierFlagControl;
             break;
         default:
             return;            
@@ -554,7 +507,7 @@ attributedStringInfo getSegments(NSAttributedString *str)
 - (NSDragOperation) draggingEntered:(id<NSDraggingInfo>)sender
 {
 	NSPasteboard *pboard;
-    NSDragOperation sourceDragMask;
+	NSDragOperation sourceDragMask;
 	
 	sourceDragMask = [sender draggingSourceOperationMask];
 	
@@ -565,8 +518,8 @@ attributedStringInfo getSegments(NSAttributedString *str)
 		if (sourceDragMask & NSDragOperationLink) {
 			NSURL *fileUrl = [[pboard readObjectsForClasses:[NSArray arrayWithObject:[NSURL class]] options:[NSDictionary dictionary]] objectAtIndex:0];
 			mLastDraggedUrl = [[fileUrl absoluteString] UTF8String];
-            return NSDragOperationLink;
-        }
+			return NSDragOperationLink;
+		}
 	}
 	return NSDragOperationNone;
 }
@@ -732,9 +685,9 @@ attributedStringInfo getSegments(NSAttributedString *str)
 
 - (void) insertNewline:(id)sender
 {
-	if (!(mModifiers & NSCommandKeyMask) &&
-		!(mModifiers & NSShiftKeyMask) &&
-		!(mModifiers & NSAlternateKeyMask))
+    if (!(mModifiers & NSEventModifierFlagCommand) &&
+        !(mModifiers & NSEventModifierFlagShift) &&
+        !(mModifiers & NSEventModifierFlagOption))
 	{
 		callUnicodeCallback(13, 0);
 	} else {
@@ -853,27 +806,6 @@ attributedStringInfo getSegments(NSAttributedString *str)
 	return self;
 }
 
-- (NSPoint)convertToScreenFromLocalPoint:(NSPoint)point relativeToView:(NSView *)view
-{
-	NSScreen *currentScreen = [NSScreen currentScreenForMouseLocation];
-	if(currentScreen)
-	{
-		NSPoint windowPoint = [view convertPoint:point toView:nil];
-		NSPoint screenPoint = [[view window] convertBaseToScreen:windowPoint];
-		NSPoint flippedScreenPoint = [currentScreen flipPoint:screenPoint];
-		flippedScreenPoint.y += [currentScreen frame].origin.y;
-		
-		return flippedScreenPoint;
-	}
-	
-	return NSZeroPoint;
-}
-
-- (NSPoint)flipPoint:(NSPoint)aPoint
-{
-    return NSMakePoint(aPoint.x, self.frame.size.height - aPoint.y);
-}
-
 - (BOOL) becomeFirstResponder
 {
 	callFocus();
diff --git a/indra/llwindow/llwindow.h b/indra/llwindow/llwindow.h
index a45c7e2b3174a59165dd3506112b20e8b24299e5..2cbc983f0f415d64c1d20920711d99341b1c486a 100644
--- a/indra/llwindow/llwindow.h
+++ b/indra/llwindow/llwindow.h
@@ -125,7 +125,6 @@ class LLWindow : public LLInstanceTracker<LLWindow>
 	virtual void swapBuffers() = 0;
 	virtual void bringToFront() = 0;
 	virtual void focusClient() { };		// this may not have meaning or be required on other platforms, therefore, it's not abstract
-	virtual void setOldResize(bool oldresize) { };
 	// handy coordinate space conversion routines
 	// NB: screen to window and vice verse won't work on width/height coordinate pairs,
 	// as the conversion must take into account left AND right border widths, etc.
diff --git a/indra/llwindow/llwindowcallbacks.cpp b/indra/llwindow/llwindowcallbacks.cpp
index be61e1e16c62fd4db5b04e67bb92a612fe170f3b..39e9f3a3a263e71c9069890ba1c00834efefe30a 100644
--- a/indra/llwindow/llwindowcallbacks.cpp
+++ b/indra/llwindow/llwindowcallbacks.cpp
@@ -122,10 +122,6 @@ void LLWindowCallbacks::handleMouseMove(LLWindow *window, const LLCoordGL pos, M
 {
 }
 
-void LLWindowCallbacks::handleMouseDragged(LLWindow *window, const LLCoordGL pos, MASK mask)
-{
-}
-
 void LLWindowCallbacks::handleScrollWheel(LLWindow *window, S32 clicks)
 {
 }
@@ -194,11 +190,6 @@ BOOL LLWindowCallbacks::handleDPIChanged(LLWindow *window, F32 ui_scale_factor,
 	return FALSE;
 }
 
-BOOL LLWindowCallbacks::handleWindowDidChangeScreen(LLWindow *window)
-{
-	return FALSE;
-}
-
 void LLWindowCallbacks::handlePingWatchdog(LLWindow *window, const char * msg)
 {
 
diff --git a/indra/llwindow/llwindowcallbacks.h b/indra/llwindow/llwindowcallbacks.h
index 3b186481388cc8d290a5a5a2788665b77a7a5807..e688bf3d471fe076be7c7ec31d467d0a38fca4c2 100644
--- a/indra/llwindow/llwindowcallbacks.h
+++ b/indra/llwindow/llwindowcallbacks.h
@@ -54,7 +54,6 @@ class LLWindowCallbacks
 	virtual BOOL handleActivate(LLWindow *window, BOOL activated);
 	virtual BOOL handleActivateApp(LLWindow *window, BOOL activating);
 	virtual void handleMouseMove(LLWindow *window,  LLCoordGL pos, MASK mask);
-    virtual void handleMouseDragged(LLWindow *window,  LLCoordGL pos, MASK mask);
 	virtual void handleScrollWheel(LLWindow *window,  S32 clicks);
 	virtual void handleScrollHWheel(LLWindow *window,  S32 clicks);
 	virtual void handleResize(LLWindow *window,  S32 width,  S32 height);
@@ -69,7 +68,6 @@ class LLWindowCallbacks
 	virtual BOOL handleTimerEvent(LLWindow *window);
 	virtual BOOL handleDeviceChange(LLWindow *window);
 	virtual BOOL handleDPIChanged(LLWindow *window, F32 ui_scale_factor, S32 window_width, S32 window_height);
-	virtual BOOL handleWindowDidChangeScreen(LLWindow *window);
 
 	enum DragNDropAction {
 		DNDA_START_TRACKING = 0,// Start tracking an incoming drag
diff --git a/indra/llwindow/llwindowmacosx-objc.h b/indra/llwindow/llwindowmacosx-objc.h
index 44fd4127ce5a06b0e1694828b1eb9fe0b00c7f92..84d1858379ab400ebae7e06de2fb542cabcf10ea 100644
--- a/indra/llwindow/llwindowmacosx-objc.h
+++ b/indra/llwindow/llwindowmacosx-objc.h
@@ -31,7 +31,7 @@
 #include <map>
 #include <vector>
 
-//fir CGSize
+//for CGSize
 #include <CoreGraphics/CGGeometry.h>
 
 typedef std::vector<std::pair<int, bool> > segment_t;
@@ -83,7 +83,7 @@ int createNSApp(int argc, const char **argv);
 void setupCocoa();
 bool pasteBoardAvailable();
 bool copyToPBoard(const unsigned short *str, unsigned int len);
-const unsigned short *copyFromPBoard();
+unsigned short *copyFromPBoard();
 CursorRef createImageCursor(const char *fullpath, int hotspotX, int hotspotY);
 short releaseImageCursor(CursorRef ref);
 short setImageCursor(CursorRef ref);
@@ -95,11 +95,9 @@ void setCrossCursor();
 void setNotAllowedCursor();
 void hideNSCursor();
 void showNSCursor();
-bool isCGCursorVisible();
 void hideNSCursorTillMove(bool hide);
 void requestUserAttention();
 long showAlert(std::string title, std::string text, int type);
-void setResizeMode(bool oldresize, void* glview);
 
 NSWindowRef createNSWindow(int x, int y, int width, int height);
 
@@ -110,16 +108,14 @@ void glSwapBuffers(void* context);
 CGLContextObj getCGLContextObj(GLViewRef view);
 unsigned long getVramSize(GLViewRef view);
 float getDeviceUnitSize(GLViewRef view);
-CGPoint getContentViewBoundsPosition(NSWindowRef window);
-CGSize getContentViewBoundsSize(NSWindowRef window);
-CGSize getDeviceContentViewSize(NSWindowRef window, GLViewRef view);
+void getContentViewBounds(NSWindowRef window, float* bounds);
+void getScaledContentViewBounds(NSWindowRef window, GLViewRef view, float* bounds);
 void getWindowSize(NSWindowRef window, float* size);
 void setWindowSize(NSWindowRef window, int width, int height);
 void getCursorPos(NSWindowRef window, float* pos);
 void makeWindowOrderFront(NSWindowRef window);
 void convertScreenToWindow(NSWindowRef window, float *coord);
 void convertWindowToScreen(NSWindowRef window, float *coord);
-void convertScreenToView(NSWindowRef window, float *coord);
 void convertRectToScreen(NSWindowRef window, float *coord);
 void convertRectFromScreen(NSWindowRef window, float *coord);
 void setWindowPos(NSWindowRef window, float* pos);
@@ -141,14 +137,13 @@ void callLeftMouseUp(float *pos, unsigned int mask);
 void callDoubleClick(float *pos, unsigned int mask);
 void callResize(unsigned int width, unsigned int height);
 void callMouseMoved(float *pos, unsigned int mask);
-void callMouseDragged(float *pos, unsigned int mask);
 void callScrollMoved(float deltaX, float deltaY);
 void callMouseExit();
 void callWindowFocus();
 void callWindowUnfocus();
 void callWindowHide();
 void callWindowUnhide();
-void callWindowDidChangeScreen();
+void callHandleDPIChanged(unsigned int width, unsigned int height, float scale_factor);
 void callDeltaUpdate(float *delta, unsigned int mask);
 void callOtherMouseDown(float *pos, unsigned int mask, int button);
 void callOtherMouseUp(float *pos, unsigned int mask, int button);
@@ -181,5 +176,6 @@ NSWindowRef getMainAppWindow();
 GLViewRef getGLView();
 
 unsigned int getModifiers();
+void setTitle(const std::string& title);
 
 #endif // LL_LLWINDOWMACOSX_OBJC_H
diff --git a/indra/llwindow/llwindowmacosx-objc.mm b/indra/llwindow/llwindowmacosx-objc.mm
index f895c1764396b862aa4adf246c3f22e9b7816559..61c2ff71bcf07b030bc86a7e274c0566c3ddb289 100644
--- a/indra/llwindow/llwindowmacosx-objc.mm
+++ b/indra/llwindow/llwindowmacosx-objc.mm
@@ -49,14 +49,12 @@ void setupCocoa()
 	
 	if(!inited)
 	{
-		NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-		
-		// The following prevents the Cocoa command line parser from trying to open 'unknown' arguements as documents.
-		// ie. running './secondlife -set Language fr' would cause a pop-up saying can't open document 'fr'
-		// when init'ing the Cocoa App window.
-		[[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:@"NSTreatUnknownArgumentsAsOpen"];
-		
-		[pool release];
+        @autoreleasepool {
+            // The following prevents the Cocoa command line parser from trying to open 'unknown' arguements as documents.
+            // ie. running './secondlife -set Language fr' would cause a pop-up saying can't open document 'fr'
+            // when init'ing the Cocoa App window.
+            [[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:@"NSTreatUnknownArgumentsAsOpen"];
+        }
 
 		inited = true;
 	}
@@ -64,13 +62,14 @@ void setupCocoa()
 
 bool copyToPBoard(const unsigned short *str, unsigned int len)
 {
-	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
-	NSPasteboard *pboard = [NSPasteboard generalPasteboard];
-	[pboard clearContents];
-	
-	NSArray *contentsToPaste = [[NSArray alloc] initWithObjects:[NSString stringWithCharacters:str length:len], nil];
-	[pool release];
-	return [pboard writeObjects:contentsToPaste];
+    @autoreleasepool {
+        NSPasteboard *pboard = [NSPasteboard generalPasteboard];
+        [pboard clearContents];
+        
+        NSArray *contentsToPaste = [[[NSArray alloc] initWithObjects:[NSString stringWithCharacters:str length:len], nil] autorelease];
+        BOOL ret = [pboard writeObjects:contentsToPaste];
+        return ret;
+    }
 }
 
 bool pasteBoardAvailable()
@@ -79,41 +78,41 @@ bool pasteBoardAvailable()
 	return [[NSPasteboard generalPasteboard] canReadObjectForClasses:classArray options:[NSDictionary dictionary]];
 }
 
-const unsigned short *copyFromPBoard()
+unsigned short *copyFromPBoard()
 {
-	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
-	NSPasteboard *pboard = [NSPasteboard generalPasteboard];
-	NSArray *classArray = [NSArray arrayWithObject:[NSString class]];
-	NSString *str = NULL;
-	BOOL ok = [pboard canReadObjectForClasses:classArray options:[NSDictionary dictionary]];
-	if (ok)
-	{
-		NSArray *objToPaste = [pboard readObjectsForClasses:classArray options:[NSDictionary dictionary]];
-		str = [objToPaste objectAtIndex:0];
-	}
-	unichar* temp = (unichar*)calloc([str length]+1, sizeof(unichar));
-	[str getCharacters:temp];
-	[pool release];
-	return temp;
+    @autoreleasepool {
+        NSPasteboard *pboard = [NSPasteboard generalPasteboard];
+        NSArray *classArray = [NSArray arrayWithObject:[NSString class]];
+        NSString *str = NULL;
+        BOOL ok = [pboard canReadObjectForClasses:classArray options:[NSDictionary dictionary]];
+        if (ok)
+        {
+            NSArray *objToPaste = [pboard readObjectsForClasses:classArray options:[NSDictionary dictionary]];
+            str = [objToPaste objectAtIndex:0];
+        }
+        NSUInteger len = [str length];
+        unichar* temp = (unichar*)calloc(len+1, sizeof(unichar));
+        [str getCharacters:temp range:NSMakeRange(0, len)];
+        
+        return temp;
+    }
 }
 
 CursorRef createImageCursor(const char *fullpath, int hotspotX, int hotspotY)
 {
-	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-	
-	// extra retain on the NSCursor since we want it to live for the lifetime of the app.
-	NSCursor *cursor =
-	[[[NSCursor alloc]
-	  initWithImage:
-	  [[[NSImage alloc] initWithContentsOfFile:
-		[NSString stringWithFormat:@"%s", fullpath]
-		]autorelease]
-	  hotSpot:NSMakePoint(hotspotX, hotspotY)
-	  ]retain];
-	
-	[pool release];
-	
-	return (CursorRef)cursor;
+    @autoreleasepool {
+        // extra retain on the NSCursor since we want it to live for the lifetime of the app.
+        NSCursor *cursor =
+        [[[NSCursor alloc]
+          initWithImage:
+          [[[NSImage alloc] initWithContentsOfFile:
+            [NSString stringWithFormat:@"%s", fullpath]
+            ]autorelease]
+          hotSpot:NSMakePoint(hotspotX, hotspotY)
+          ] retain];
+        
+        return (CursorRef)cursor;
+    }
 }
 
 void setArrowCursor()
@@ -163,11 +162,6 @@ void showNSCursor()
 	[NSCursor unhide];
 }
 
-bool isCGCursorVisible()
-{
-    return CGCursorIsVisible();
-}
-
 void hideNSCursorTillMove(bool hide)
 {
 	[NSCursor setHiddenUntilMouseMoves:hide];
@@ -178,10 +172,10 @@ OSErr releaseImageCursor(CursorRef ref)
 {
 	if( ref != NULL )
 	{
-		NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-		NSCursor *cursor = (NSCursor*)ref;
-		[cursor release];
-		[pool release];
+        @autoreleasepool {
+            NSCursor *cursor = (NSCursor*)ref;
+            [cursor release];
+        }
 	}
 	else
 	{
@@ -195,10 +189,10 @@ OSErr setImageCursor(CursorRef ref)
 {
 	if( ref != NULL )
 	{
-		NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-		NSCursor *cursor = (NSCursor*)ref;
-		[cursor set];
-		[pool release];
+        @autoreleasepool {
+            NSCursor *cursor = (NSCursor*)ref;
+            [cursor set];
+        }
 	}
 	else
 	{
@@ -214,7 +208,7 @@ OSErr setImageCursor(CursorRef ref)
 NSWindowRef createNSWindow(int x, int y, int width, int height)
 {
 	LLNSWindow *window = [[LLNSWindow alloc]initWithContentRect:NSMakeRect(x, y, width, height)
-													  styleMask:NSTitledWindowMask | NSResizableWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSTexturedBackgroundWindowMask backing:NSBackingStoreBuffered defer:NO];
+                                                      styleMask:NSWindowStyleMaskTitled | NSWindowStyleMaskResizable | NSWindowStyleMaskClosable | NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskTexturedBackground backing:NSBackingStoreBuffered defer:NO];
 	[window makeKeyAndOrderFront:nil];
 	[window setAcceptsMouseMovedEvents:TRUE];
 	return window;
@@ -227,11 +221,6 @@ GLViewRef createOpenGLView(NSWindowRef window, unsigned int samples, bool vsync)
 	return glview;
 }
 
-void setResizeMode(bool oldresize, void* glview)
-{
-    [(LLOpenGLView *)glview setOldResize:oldresize];
-}
-
 void glSwapBuffers(void* context)
 {
 	[(NSOpenGLContext*)context flushBuffer];
@@ -258,19 +247,21 @@ float getDeviceUnitSize(GLViewRef view)
 	return [(LLOpenGLView*)view convertSizeToBacking:NSMakeSize(1, 1)].width;
 }
 
-CGPoint getContentViewBoundsPosition(NSWindowRef window)
+void getContentViewBounds(NSWindowRef window, float* bounds)
 {
-	return [[(LLNSWindow*)window contentView] bounds].origin;
+	bounds[0] = [[(LLNSWindow*)window contentView] bounds].origin.x;
+	bounds[1] = [[(LLNSWindow*)window contentView] bounds].origin.y;
+	bounds[2] = [[(LLNSWindow*)window contentView] bounds].size.width;
+	bounds[3] = [[(LLNSWindow*)window contentView] bounds].size.height;
 }
 
-CGSize getContentViewBoundsSize(NSWindowRef window)
+void getScaledContentViewBounds(NSWindowRef window, GLViewRef view, float* bounds)
 {
-	return [[(LLNSWindow*)window contentView] bounds].size;
-}
-
-CGSize getDeviceContentViewSize(NSWindowRef window, GLViewRef view)
-{
-    return [(NSOpenGLView*)view convertRectToBacking:[[(LLNSWindow*)window contentView] bounds]].size;
+    NSRect b = [(NSOpenGLView*)view convertRectToBacking:[[(LLNSWindow*)window contentView] bounds]];
+	bounds[0] = b.origin.x;
+	bounds[1] = b.origin.y;
+	bounds[2] = b.size.width;
+	bounds[3] = b.size.height;
 }
 
 void getWindowSize(NSWindowRef window, float* size)
@@ -313,9 +304,7 @@ void makeWindowOrderFront(NSWindowRef window)
 
 void convertScreenToWindow(NSWindowRef window, float *coord)
 {
-	NSRect point;
-	point.origin.x = coord[0];
-	point.origin.y = coord[1];
+	NSRect point = NSMakeRect(coord[0], coord[1], 0, 0);
 	point = [(LLNSWindow*)window convertRectFromScreen:point];
 	coord[0] = point.origin.x;
 	coord[1] = point.origin.y;
@@ -323,12 +312,7 @@ void convertScreenToWindow(NSWindowRef window, float *coord)
 
 void convertRectToScreen(NSWindowRef window, float *coord)
 {
-	NSRect point;
-	point.origin.x = coord[0];
-	point.origin.y = coord[1];
-	point.size.width = coord[2];
-	point.size.height = coord[3];
-	
+	NSRect point = NSMakeRect(coord[0], coord[1], coord[2], coord[3]);
 	point = [(LLNSWindow*)window convertRectToScreen:point];
 	
 	coord[0] = point.origin.x;
@@ -339,12 +323,7 @@ void convertRectToScreen(NSWindowRef window, float *coord)
 
 void convertRectFromScreen(NSWindowRef window, float *coord)
 {
-	NSRect point;
-	point.origin.x = coord[0];
-	point.origin.y = coord[1];
-	point.size.width = coord[2];
-	point.size.height = coord[3];
-	
+	NSRect point = NSMakeRect(coord[0], coord[1], coord[2], coord[3]);
 	point = [(LLNSWindow*)window convertRectFromScreen:point];
 	
 	coord[0] = point.origin.x;
@@ -353,23 +332,15 @@ void convertRectFromScreen(NSWindowRef window, float *coord)
 	coord[3] = point.size.height;
 }
 
-void convertScreenToView(NSWindowRef window, float *coord)
-{
-	NSRect point;
-	point.origin.x = coord[0];
-	point.origin.y = coord[1];
-	point.origin = [(LLNSWindow*)window convertScreenToBase:point.origin];
-	point.origin = [[(LLNSWindow*)window contentView] convertPoint:point.origin fromView:nil];
-}
-
 void convertWindowToScreen(NSWindowRef window, float *coord)
 {
-	NSPoint point;
-	point.x = coord[0];
-	point.y = coord[1];
-	point = [(LLNSWindow*)window convertToScreenFromLocalPoint:point relativeToView:[(LLNSWindow*)window contentView]];
-	coord[0] = point.x;
-	coord[1] = point.y;
+	LLNSWindow *nsWindow = (LLNSWindow*)window;
+	NSRect rect = NSMakeRect(coord[0], coord[1], 0, 0);
+	rect = [nsWindow convertRectToScreen:rect];
+	NSRect screenRect = [[nsWindow screen] frame];
+	NSPoint retPoint = NSMakePoint(rect.origin.x, screenRect.origin.y + screenRect.size.height - rect.origin.y);
+	coord[0] = retPoint.x;
+	coord[1] = retPoint.y;
 }
 
 void closeWindow(NSWindowRef window)
@@ -382,6 +353,7 @@ void removeGLView(GLViewRef view)
 {
 	[(LLOpenGLView*)view clearGLContext];
 	[(LLOpenGLView*)view removeFromSuperview];
+	[(LLOpenGLView*)view release];
 }
 
 void setupInputWindow(NSWindowRef window, GLViewRef glview)
@@ -401,7 +373,7 @@ void allowDirectMarkedTextInput(bool allow, GLViewRef glView)
 
 NSWindowRef getMainAppWindow()
 {
-	LLNSWindow *winRef = [(LLAppDelegate*)[[NSApplication sharedApplication] delegate] window];
+	LLNSWindow *winRef = [(LLAppDelegate*)[[LLApplication sharedApplication] delegate] window];
 	
 	[winRef setAcceptsMouseMovedEvents:TRUE];
 	return winRef;
@@ -414,61 +386,65 @@ void makeFirstResponder(NSWindowRef window, GLViewRef view)
 
 void requestUserAttention()
 {
-	[[NSApplication sharedApplication] requestUserAttention:NSInformationalRequest];
+	[[LLApplication sharedApplication] requestUserAttention:NSInformationalRequest];
 }
 
 long showAlert(std::string text, std::string title, int type)
 {
-    NSAlert *alert = [[NSAlert alloc] init];
-    
-    [alert setMessageText:[NSString stringWithCString:title.c_str() encoding:[NSString defaultCStringEncoding]]];
-    [alert setInformativeText:[NSString stringWithCString:text.c_str() encoding:[NSString defaultCStringEncoding]]];
-    if (type == 0)
-    {
-        [alert addButtonWithTitle:@"Okay"];
-    } else if (type == 1)
-    {
-        [alert addButtonWithTitle:@"Okay"];
-        [alert addButtonWithTitle:@"Cancel"];
-    } else if (type == 2)
-    {
-        [alert addButtonWithTitle:@"Yes"];
-        [alert addButtonWithTitle:@"No"];
-    }
-    long ret = [alert runModal];
-    [alert dealloc];
-    
-    if (ret == NSAlertFirstButtonReturn)
-    {
-        if (type == 1)
+    @autoreleasepool {
+        NSAlert *alert = [[[NSAlert alloc] init] autorelease];
+        
+        [alert setMessageText:[NSString stringWithCString:title.c_str() encoding:[NSString defaultCStringEncoding]]];
+        [alert setInformativeText:[NSString stringWithCString:text.c_str() encoding:[NSString defaultCStringEncoding]]];
+        if (type == 0)
         {
-            ret = 3;
+            [alert addButtonWithTitle:@"Okay"];
+        } else if (type == 1)
+        {
+            [alert addButtonWithTitle:@"Okay"];
+            [alert addButtonWithTitle:@"Cancel"];
         } else if (type == 2)
         {
-            ret = 0;
+            [alert addButtonWithTitle:@"Yes"];
+            [alert addButtonWithTitle:@"No"];
         }
-    } else if (ret == NSAlertSecondButtonReturn)
-    {
-        if (type == 0 || type == 1)
+        long ret = [alert runModal];
+        
+        if (ret == NSAlertFirstButtonReturn)
         {
-            ret = 2;
-        } else if (type == 2)
+            if (type == 1)
+            {
+                ret = 3;
+            } else if (type == 2)
+            {
+                ret = 0;
+            }
+        } else if (ret == NSAlertSecondButtonReturn)
         {
-            ret = 1;
+            if (type == 0 || type == 1)
+            {
+                ret = 2;
+            } else if (type == 2)
+            {
+                ret = 1;
+            }
         }
+        
+        return ret;
     }
-    
-    return ret;
 }
 
-/*
- GLViewRef getGLView()
- {
- return [(LLAppDelegate*)[[NSApplication sharedApplication] delegate] glview];
- }
- */
-
 unsigned int getModifiers()
 {
 	return [NSEvent modifierFlags];
 }
+
+void setTitle(const std::string& title)
+{
+    @autoreleasepool {
+        LLNSWindow *winRef = [(LLAppDelegate*)[[LLApplication sharedApplication] delegate] window];
+        NSString *nsTitle = [NSString stringWithUTF8String:title.c_str()];
+        [winRef setTitle:nsTitle];
+    }
+}
+
diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp
index 2604a23c85107a5aaffa11373938ec4c547e4275..5f89bf92b0862a3f13385c8a9c51885de5912070 100644
--- a/indra/llwindow/llwindowmacosx.cpp
+++ b/indra/llwindow/llwindowmacosx.cpp
@@ -39,11 +39,9 @@
 #include "indra_constants.h"
 
 #include <OpenGL/OpenGL.h>
-#include <Carbon/Carbon.h>
 #include <CoreServices/CoreServices.h>
 
 extern BOOL gDebugWindowProc;
-BOOL gHiDPISupport = TRUE;
 
 const S32	BITS_PER_PIXEL = 32;
 const S32	MAX_NUM_RESOLUTIONS = 32;
@@ -344,18 +342,6 @@ void callMouseMoved(float *pos, MASK mask)
 	//gWindowImplementation->getCallbacks()->handleScrollWheel(gWindowImplementation, 0);
 }
 
-void callMouseDragged(float *pos, MASK mask)
-{
-    LLCoordGL		outCoords;
-    outCoords.mX = ll_round(pos[0]);
-    outCoords.mY = ll_round(pos[1]);
-    float deltas[2];
-    gWindowImplementation->getMouseDeltas(deltas);
-    outCoords.mX += deltas[0];
-    outCoords.mY += deltas[1];
-    gWindowImplementation->getCallbacks()->handleMouseDragged(gWindowImplementation, outCoords, gKeyboard->currentMask(TRUE));
-}
-
 void callScrollMoved(float deltaX, float deltaY)
 {
 	if ( gWindowImplementation && gWindowImplementation->getCallbacks() )
@@ -408,11 +394,11 @@ void callWindowUnhide()
 	}
 }
 
-void callWindowDidChangeScreen()
+void callHandleDPIChanged(unsigned int width, unsigned int height, float scale_factor)
 {
 	if ( gWindowImplementation && gWindowImplementation->getCallbacks() )
 	{
-		gWindowImplementation->getCallbacks()->handleWindowDidChangeScreen(gWindowImplementation);
+		gWindowImplementation->getCallbacks()->handleDPIChanged(gWindowImplementation, scale_factor, width, height);
 	}
 }
 
@@ -611,8 +597,6 @@ void LLWindowMacOSX::getMouseDeltas(float* delta)
 
 BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits, BOOL fullscreen, BOOL disable_vsync)
 {
-	BOOL			glNeedsInit = FALSE;
-
 	mFullscreen = fullscreen;
 	
 	if (mWindow == NULL)
@@ -626,10 +610,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
 		// Get the view instead.
 		mGLView = createOpenGLView(mWindow, mFSAASamples, !disable_vsync);
 		mContext = getCGLContextObj(mGLView);
-		
-		// Since we just created the context, it needs to be set up.
-		glNeedsInit = TRUE;
-		
+
 		gGLManager.mVRAM = getVramSize(mGLView);
 	}
 	
@@ -642,7 +623,7 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
 	{
 		
 		
-		U32 err = CGLSetCurrentContext(mContext);
+		CGLError err = CGLSetCurrentContext(mContext);
 		if (err != kCGLNoError)
 		{
 			setupFailure("Can't activate GL rendering context", "Error", OSMB_OK);
@@ -661,26 +642,24 @@ BOOL LLWindowMacOSX::createContext(int x, int y, int width, int height, int bits
 		frames_per_swap = 1;
 	}
 	
-	CGLSetParameter(mContext, kCGLCPSwapInterval, &frames_per_swap);
-
-	//enable multi-threaded OpenGL
-	if (sUseMultGL)
-	{
-		CGLError cgl_err;
-		CGLContextObj ctx = CGLGetCurrentContext();
-
-		cgl_err =  CGLEnable( ctx, kCGLCEMPEngine);
-
-		if (cgl_err != kCGLNoError )
-		{
-			LL_DEBUGS("GLInit") << "Multi-threaded OpenGL not available." << LL_ENDL;
-		}
-		else
-		{
-			LL_DEBUGS("GLInit") << "Multi-threaded OpenGL enabled." << LL_ENDL;
-		}
-	}
-	makeFirstResponder(mWindow, mGLView);
+    CGLSetParameter(mContext, kCGLCPSwapInterval, &frames_per_swap);
+    
+    //enable multi-threaded OpenGL
+    CGLError cgl_err;
+    CGLContextObj ctx = CGLGetCurrentContext();
+    
+    cgl_err =  CGLEnable(ctx, kCGLCEMPEngine);
+    
+    if (cgl_err != kCGLNoError )
+    {
+        LL_INFOS("GLInit") << "Multi-threaded OpenGL not available." << LL_ENDL;
+    }
+    else
+    {
+        LL_INFOS("GLInit") << "Multi-threaded OpenGL enabled." << LL_ENDL;
+    }
+    
+    makeFirstResponder(mWindow, mGLView);
     
 	return TRUE;
 }
@@ -717,12 +696,6 @@ void LLWindowMacOSX::destroyContext()
 		mPixelFormat = NULL;
 	}
 
-	// Clean up the GL context
-	if(mContext != NULL)
-	{
-		CGLDestroyContext(mContext);
-	}
-	
 	// Destroy our LLOpenGLView
 	if(mGLView != NULL)
 	{
@@ -730,6 +703,12 @@ void LLWindowMacOSX::destroyContext()
 		mGLView = NULL;
 	}
 	
+	// Clean up the GL context
+	if(mContext != NULL)
+	{
+		CGLDestroyContext(mContext);
+	}
+	
 	// Close the window
 	if(mWindow != NULL)
 	{
@@ -811,7 +790,8 @@ BOOL LLWindowMacOSX::getVisible()
 	if(mFullscreen)
 	{
 		result = TRUE;
-	}if (mWindow)
+	}
+	if (mWindow)
 	{
 			result = TRUE;
 	}
@@ -860,10 +840,11 @@ BOOL LLWindowMacOSX::getPosition(LLCoordScreen *position)
 	}
 	else if(mWindow)
 	{
-		const CGPoint & pos = getContentViewBoundsPosition(mWindow);
+		float rect[4];
+		getContentViewBounds(mWindow, rect);
 
-		position->mX = pos.x;
-		position->mY = pos.y;
+		position->mX = rect[0];
+		position->mY = rect[1];
 
 		err = noErr;
 	}
@@ -887,10 +868,11 @@ BOOL LLWindowMacOSX::getSize(LLCoordScreen *size)
 	}
 	else if(mWindow)
 	{
-		const CGSize & sz = gHiDPISupport ? getDeviceContentViewSize(mWindow, mGLView) : getContentViewBoundsSize(mWindow);
+		float rect[4];
+		getScaledContentViewBounds(mWindow, mGLView, rect);
 
-		size->mX = sz.width;
-		size->mY = sz.height;
+		size->mX = rect[2];
+		size->mY = rect[3];
         err = noErr;
 	}
 	else
@@ -903,6 +885,7 @@ BOOL LLWindowMacOSX::getSize(LLCoordScreen *size)
 
 BOOL LLWindowMacOSX::getSize(LLCoordWindow *size)
 {
+	float rect[4];
 	S32 err = -1;
 	
 	if(mFullscreen)
@@ -913,13 +896,11 @@ BOOL LLWindowMacOSX::getSize(LLCoordWindow *size)
 	}
 	else if(mWindow)
 	{
-		const CGSize & sz = gHiDPISupport ? getDeviceContentViewSize(mWindow, mGLView) : getContentViewBoundsSize(mWindow);
+		getScaledContentViewBounds(mWindow, mGLView, rect);
 		
-		size->mX = sz.width;
-		size->mY = sz.height;
-        err = noErr;
-        
-        
+		size->mX = rect[2];
+		size->mY = rect[3];
+        err = noErr;     
 	}
 	else
 	{
@@ -1251,8 +1232,10 @@ BOOL LLWindowMacOSX::isClipboardTextAvailable()
 }
 
 BOOL LLWindowMacOSX::pasteTextFromClipboard(LLWString &dst)
-{	
-	llutf16string str(copyFromPBoard());
+{
+    unsigned short* temp = copyFromPBoard();
+	llutf16string str(temp);
+    free(temp);
 	dst = utf16str_to_wstring(str);
 	if (dst != L"")
 	{
@@ -1272,6 +1255,10 @@ BOOL LLWindowMacOSX::copyTextToClipboard(const LLWString &s)
 	return result;
 }
 
+void LLWindowMacOSX::setWindowTitle(const std::string& title)
+{
+	setTitle(title);
+}
 
 // protected
 BOOL LLWindowMacOSX::resetDisplayResolution()
@@ -1285,7 +1272,7 @@ LLWindow::LLWindowResolution* LLWindowMacOSX::getSupportedResolutions(S32 &num_r
 {
 	if (!mSupportedResolutions)
 	{
-		CFArrayRef modes = CGDisplayAvailableModes(mDisplay);
+		CFArrayRef modes = CGDisplayCopyAllDisplayModes(mDisplay, NULL);
 
 		if(modes != NULL)
 		{
@@ -1324,6 +1311,7 @@ LLWindow::LLWindowResolution* LLWindowMacOSX::getSupportedResolutions(S32 &num_r
 					}
 				}
 			}
+			CFRelease(modes);
 		}
 	}
 
@@ -1350,14 +1338,14 @@ BOOL LLWindowMacOSX::convertCoords(LLCoordScreen from, LLCoordWindow* to)
 	if(mWindow)
 	{
 		float mouse_point[2];
-
+		float scale_factor = getSystemUISize();
 		mouse_point[0] = from.mX;
 		mouse_point[1] = from.mY;
 		
 		convertScreenToWindow(mWindow, mouse_point);
 
-		to->mX = mouse_point[0];
-		to->mY = mouse_point[1];
+		to->mX = mouse_point[0] * scale_factor;
+		to->mY = mouse_point[1] * scale_factor;
 
 		return TRUE;
 	}
@@ -1369,10 +1357,9 @@ BOOL LLWindowMacOSX::convertCoords(LLCoordWindow from, LLCoordScreen *to)
 	if(mWindow)
 	{
 		float mouse_point[2];
-
-		mouse_point[0] = from.mX;
-		mouse_point[1] = from.mY;
-		
+		float scale_factor = getSystemUISize();
+		mouse_point[0] = from.mX / scale_factor;
+		mouse_point[1] = from.mY / scale_factor;
 		convertWindowToScreen(mWindow, mouse_point);
 
 		to->mX = mouse_point[0];
@@ -1496,11 +1483,6 @@ void LLWindowMacOSX::updateCursor()
 	
     if(mCurrentCursor == mNextCursor)
     {
-        if(mCursorHidden && mHideCursorPermanent && isCGCursorVisible())
-        {
-            hideNSCursor();            
-            adjustCursorDecouple();
-        }
         return;
     }
 
@@ -1715,12 +1697,6 @@ void LLSplashScreenMacOSX::showImpl()
 
 void LLSplashScreenMacOSX::updateImpl(const std::string& mesg)
 {
-	if(mWindow != NULL)
-	{
-		CFStringRef string = NULL;
-
-		string = CFStringCreateWithCString(NULL, mesg.c_str(), kCFStringEncodingUTF8);
-	}
 }
 
 
@@ -1815,30 +1791,7 @@ LLSD LLWindowMacOSX::getNativeKeyData()
 
 BOOL LLWindowMacOSX::dialogColorPicker( F32 *r, F32 *g, F32 *b)
 {
-	BOOL	retval = FALSE;
-	OSErr	error = noErr;
-	NColorPickerInfo	info;
-	
-	memset(&info, 0, sizeof(info));
-	info.theColor.color.rgb.red = (UInt16)(*r * 65535.f);
-	info.theColor.color.rgb.green = (UInt16)(*g * 65535.f);
-	info.theColor.color.rgb.blue = (UInt16)(*b * 65535.f);
-	info.placeWhere = kCenterOnMainScreen;
-
-	error = NPickColor(&info);
-	
-	if (error == noErr)
-	{
-		retval = info.newColorChosen;
-		if (info.newColorChosen)
-		{
-			*r = ((float) info.theColor.color.rgb.red) / 65535.0;
-			*g = ((float) info.theColor.color.rgb.green) / 65535.0;
-			*b = ((float) info.theColor.color.rgb.blue) / 65535.0;
-		}
-	}
-
-	return (retval);
+    return FALSE;
 }
 
 void *LLWindowMacOSX::getPlatformWindow()
@@ -1930,7 +1883,7 @@ MASK LLWindowMacOSX::modifiersToMask(S16 modifiers)
 
 F32 LLWindowMacOSX::getSystemUISize()
 {
-	return gHiDPISupport ? ::getDeviceUnitSize(mGLView) : LLWindow::getSystemUISize();
+	return ::getDeviceUnitSize(mGLView);
 }
 
 #if LL_OS_DRAGDROP_ENABLED
diff --git a/indra/llwindow/llwindowmacosx.h b/indra/llwindow/llwindowmacosx.h
index 24651027e8385f29ff13fe908173d9588fb29694..31fd56dc4b893962bd31fd0e192631a1649d2fa5 100644
--- a/indra/llwindow/llwindowmacosx.h
+++ b/indra/llwindow/llwindowmacosx.h
@@ -77,6 +77,7 @@ class LLWindowMacOSX : public LLWindow
 	/*virtual*/ BOOL isClipboardTextAvailable();
 	/*virtual*/ BOOL pasteTextFromClipboard(LLWString &dst);
 	/*virtual*/ BOOL copyTextToClipboard(const LLWString & src);
+	/*virtual*/ void setWindowTitle(const std::string& title);
 	/*virtual*/ void flashIcon(F32 seconds);
 	/*virtual*/ F32 getGamma();
 	/*virtual*/ BOOL setGamma(const F32 gamma); // Set the gamma
@@ -153,9 +154,6 @@ class LLWindowMacOSX : public LLWindow
 	BOOL	resetDisplayResolution();
 
 	BOOL	shouldPostQuit() { return mPostQuit; }
-    
-    //Satisfy MAINT-3135 and MAINT-3288 with a flag.
-    /*virtual */ void setOldResize(bool oldresize) {setResizeMode(oldresize, mGLView); }
 
 private:
     void restoreGLContext();
diff --git a/indra/llxml/llxmlnode.h b/indra/llxml/llxmlnode.h
index 574dd77b57fbc0979a96d86253432a2e0668e2f6..b6c5845cb013f1af5025888dcf52174ff6ea8275 100644
--- a/indra/llxml/llxmlnode.h
+++ b/indra/llxml/llxmlnode.h
@@ -27,10 +27,10 @@
 #ifndef LL_LLXMLNODE_H
 #define LL_LLXMLNODE_H
 
-#ifdef LL_USESYSTEMLIBS
-#include <expat.h>
+#if LL_DARWIN || defined(LL_USESYSTEMLIBS)
+# include <expat.h>
 #else
-#include "expat/expat.h"
+# include "expat/expat.h"
 #endif
 #include <map>
 
diff --git a/indra/llxml/llxmlparser.h b/indra/llxml/llxmlparser.h
index 54c4a838f38669c82bb36f6e4ce533e255e5156a..73de6acb21a0ba3886b081fa4c7396da6eed3a2c 100644
--- a/indra/llxml/llxmlparser.h
+++ b/indra/llxml/llxmlparser.h
@@ -27,10 +27,10 @@
 #ifndef LL_LLXMLPARSER_H
 #define LL_LLXMLPARSER_H
 
-#ifdef LL_USESYSTEMLIBS
-#include <expat.h>
+#if LL_DARWIN || defined(LL_USESYSTEMLIBS)
+# include <expat.h>
 #else
-#include "expat/expat.h"
+# include "expat/expat.h"
 #endif
 
 class LLXmlParser
diff --git a/indra/media_plugins/base/media_plugin_base.cpp b/indra/media_plugins/base/media_plugin_base.cpp
index 37c498664a636833a60b40571718b8ff9cbf73ea..fc303417a691fd20039c43837c68dfce53408132 100644
--- a/indra/media_plugins/base/media_plugin_base.cpp
+++ b/indra/media_plugins/base/media_plugin_base.cpp
@@ -170,10 +170,8 @@ void MediaPluginBase::sendStatus()
 
 #if LL_WINDOWS
 # define LLSYMEXPORT __declspec(dllexport)
-#elif LL_LINUX
-# define LLSYMEXPORT __attribute__ ((visibility("default")))
 #else
-# define LLSYMEXPORT /**/
+# define LLSYMEXPORT __attribute__ ((visibility("default")))
 #endif
 
 extern "C"
diff --git a/indra/media_plugins/cef/CMakeLists.txt b/indra/media_plugins/cef/CMakeLists.txt
index 3cd17d916da4abd8b6f035d4b3825fa16b191c8a..a632055c38ac57c80d2e77fc18d7a7f83ccccdbf 100644
--- a/indra/media_plugins/cef/CMakeLists.txt
+++ b/indra/media_plugins/cef/CMakeLists.txt
@@ -96,7 +96,7 @@ if (DARWIN)
     media_plugin_cef
     PROPERTIES
     PREFIX ""
-    BUILD_WITH_INSTALL_RPATH 1
+    BUILD_WITH_INSTALL_NAME_DIR 1
     INSTALL_NAME_DIR "@executable_path"
     LINK_FLAGS "-exported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/../base/media_plugin_base.exp"
   )
diff --git a/indra/media_plugins/cef/media_plugin_cef.cpp b/indra/media_plugins/cef/media_plugin_cef.cpp
index a230da1b9b8adc1929ee814f6a33755d4ccd95e6..9772ae292209dfee2767b5d0e6b89cc9c9ad1ea6 100644
--- a/indra/media_plugins/cef/media_plugin_cef.cpp
+++ b/indra/media_plugins/cef/media_plugin_cef.cpp
@@ -556,9 +556,11 @@ void MediaPluginCEF::receiveMessage(const char* message_string)
 				settings.autoplay_without_gesture = true;
 
 				// Set subprocess helper and cef app data paths
+#if !LL_DARWIN
 				settings.browser_subprocess_path = mHelperPath;
 				settings.resources_dir_path = mResourcesPath;
-				settings.locales_dir_path = mLocalesPath;
+#endif
+                settings.locales_dir_path = mLocalesPath;
 
 				std::vector<std::string> custom_schemes(1, "secondlife");
 				mCEFLib->setCustomSchemes(custom_schemes);
diff --git a/indra/media_plugins/example/CMakeLists.txt b/indra/media_plugins/example/CMakeLists.txt
index 89ac23122138fac31c6dd12d565e0b687a79f109..fb1ee65c44b8bf197dfa93eb8e609c0eac023ef7 100644
--- a/indra/media_plugins/example/CMakeLists.txt
+++ b/indra/media_plugins/example/CMakeLists.txt
@@ -65,7 +65,7 @@ if (DARWIN)
     media_plugin_example
     PROPERTIES
     PREFIX ""
-    BUILD_WITH_INSTALL_RPATH 1
+    BUILD_WITH_INSTALL_NAME_DIR 1
     INSTALL_NAME_DIR "@executable_path"
     LINK_FLAGS "-exported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/../base/media_plugin_base.exp"
   )
diff --git a/indra/media_plugins/libvlc/CMakeLists.txt b/indra/media_plugins/libvlc/CMakeLists.txt
index 3f67b6f65ae611398b4364954be2ecf250ba53f4..baa242f814f886c157da365e5aebebe2efe2c65a 100644
--- a/indra/media_plugins/libvlc/CMakeLists.txt
+++ b/indra/media_plugins/libvlc/CMakeLists.txt
@@ -66,7 +66,7 @@ if (DARWIN)
     media_plugin_libvlc
     PROPERTIES
     PREFIX ""
-    BUILD_WITH_INSTALL_RPATH 1
+    BUILD_WITH_INSTALL_NAME_DIR 1
     INSTALL_NAME_DIR "@executable_path"
     LINK_FLAGS "-exported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/../base/media_plugin_base.exp"
   )
diff --git a/indra/newview/Alchemy.xib b/indra/newview/Alchemy.xib
new file mode 100644
index 0000000000000000000000000000000000000000..5ddfc59c057b46b137c48e9e04a453ed8da8bc58
--- /dev/null
+++ b/indra/newview/Alchemy.xib
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="17156" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
+    <dependencies>
+        <deployment version="101300" identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="17156"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="LLApplication">
+            <connections>
+                <outlet property="delegate" destination="824" id="845"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="LLApplication"/>
+        <menu title="Main Menu" systemMenu="main" id="29" userLabel="Main Menu">
+            <items>
+                <menuItem title="Alchemy" id="56">
+                    <modifierMask key="keyEquivalentModifierMask"/>
+                    <menu key="submenu" title="Alchemy" systemMenu="apple" id="57">
+                        <items>
+                            <menuItem title="About Alchemy" id="58">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <connections>
+                                    <action selector="orderFrontStandardAboutPanel:" target="-2" id="142"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem isSeparatorItem="YES" id="236"/>
+                            <menuItem title="Preferences…" keyEquivalent="," id="129"/>
+                            <menuItem isSeparatorItem="YES" id="143"/>
+                            <menuItem title="Services" id="131">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <menu key="submenu" title="Services" systemMenu="services" id="130"/>
+                            </menuItem>
+                            <menuItem isSeparatorItem="YES" id="144"/>
+                            <menuItem title="Hide Alchemy" keyEquivalent="h" id="134">
+                                <connections>
+                                    <action selector="hide:" target="-1" id="369"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Hide Others" keyEquivalent="h" id="145">
+                                <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
+                                <connections>
+                                    <action selector="hideOtherApplications:" target="-1" id="370"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Show All" id="150">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <connections>
+                                    <action selector="unhideAllApplications:" target="-1" id="372"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem isSeparatorItem="YES" id="149"/>
+                            <menuItem title="Quit Alchemy" keyEquivalent="q" id="136">
+                                <connections>
+                                    <action selector="terminate:" target="-3" id="823"/>
+                                </connections>
+                            </menuItem>
+                        </items>
+                    </menu>
+                </menuItem>
+                <menuItem title="Edit" id="711">
+                    <modifierMask key="keyEquivalentModifierMask"/>
+                    <menu key="submenu" title="Edit" id="712">
+                        <items>
+                            <menuItem title="Undo" keyEquivalent="z" id="713">
+                                <connections>
+                                    <action selector="undo:" target="-1" id="776"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Redo" keyEquivalent="Z" id="714"/>
+                            <menuItem isSeparatorItem="YES" id="715"/>
+                            <menuItem title="Cut" keyEquivalent="x" id="716">
+                                <connections>
+                                    <action selector="cut:" target="-1" id="768"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Copy" keyEquivalent="c" id="717">
+                                <connections>
+                                    <action selector="copy:" target="-1" id="782"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Paste" keyEquivalent="v" id="718">
+                                <connections>
+                                    <action selector="paste:" target="-1" id="769"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Select All" keyEquivalent="a" id="721">
+                                <connections>
+                                    <action selector="selectAll:" target="-1" id="785"/>
+                                </connections>
+                            </menuItem>
+                        </items>
+                    </menu>
+                </menuItem>
+                <menuItem title="Window" id="19">
+                    <modifierMask key="keyEquivalentModifierMask"/>
+                    <menu key="submenu" title="Window" systemMenu="window" id="24">
+                        <items>
+                            <menuItem title="Minimize" keyEquivalent="m" id="23">
+                                <connections>
+                                    <action selector="performMiniaturize:" target="-1" id="37"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Zoom" id="239">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <connections>
+                                    <action selector="performZoom:" target="-1" id="240"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Enter Full Screen" keyEquivalent="f" id="841">
+                                <modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
+                                <connections>
+                                    <action selector="toggleFullScreen:" target="-1" id="842"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem isSeparatorItem="YES" id="92"/>
+                            <menuItem title="Bring All to Front" id="5">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <connections>
+                                    <action selector="arrangeInFront:" target="-1" id="39"/>
+                                </connections>
+                            </menuItem>
+                        </items>
+                    </menu>
+                </menuItem>
+                <menuItem title="Help" id="103">
+                    <modifierMask key="keyEquivalentModifierMask"/>
+                </menuItem>
+            </items>
+            <point key="canvasLocation" x="4" y="154"/>
+        </menu>
+        <customObject id="824" customClass="LLAppDelegate">
+            <connections>
+                <outlet property="inputView" destination="944" id="954"/>
+                <outlet property="inputWindow" destination="941" id="953"/>
+                <outlet property="window" destination="828" id="850"/>
+            </connections>
+        </customObject>
+        <window title="Alchemy" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" deferred="NO" frameAutosaveName="Second Life" animationBehavior="default" id="828" customClass="LLNSWindow">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
+            <windowCollectionBehavior key="collectionBehavior" fullScreenPrimary="YES"/>
+            <rect key="contentRect" x="196" y="240" width="1024" height="600"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1440" height="877"/>
+            <view key="contentView" id="829">
+                <rect key="frame" x="0.0" y="0.0" width="1024" height="600"/>
+                <autoresizingMask key="autoresizingMask"/>
+            </view>
+            <point key="canvasLocation" x="4" y="398"/>
+        </window>
+        <window title="Input Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" hidesOnDeactivate="YES" visibleAtLaunch="NO" animationBehavior="default" id="941" customClass="LLUserInputWindow">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES" utility="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="272" y="176" width="938" height="42"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1440" height="877"/>
+            <view key="contentView" id="942">
+                <rect key="frame" x="0.0" y="0.0" width="938" height="42"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <scrollView fixedFrame="YES" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="943">
+                        <rect key="frame" x="-1" y="-1" width="940" height="44"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                        <clipView key="contentView" id="GLt-7x-2XP">
+                            <rect key="frame" x="1" y="1" width="938" height="42"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <textView importsGraphics="NO" verticallyResizable="YES" usesFontPanel="YES" findStyle="panel" continuousSpellChecking="YES" allowsUndo="YES" usesRuler="YES" allowsNonContiguousLayout="YES" spellingCorrection="YES" smartInsertDelete="YES" id="944" customClass="LLNonInlineTextView">
+                                    <rect key="frame" x="0.0" y="0.0" width="938" height="42"/>
+                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                    <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    <size key="minSize" width="938" height="42"/>
+                                    <size key="maxSize" width="940" height="10000000"/>
+                                    <color key="insertionPointColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                                </textView>
+                            </subviews>
+                            <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                        </clipView>
+                        <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" doubleValue="1" horizontal="YES" id="945">
+                            <rect key="frame" x="-100" y="-100" width="87" height="18"/>
+                            <autoresizingMask key="autoresizingMask"/>
+                        </scroller>
+                        <scroller key="verticalScroller" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="946">
+                            <rect key="frame" x="923" y="1" width="16" height="42"/>
+                            <autoresizingMask key="autoresizingMask"/>
+                        </scroller>
+                    </scrollView>
+                </subviews>
+            </view>
+            <point key="canvasLocation" x="4" y="152"/>
+        </window>
+    </objects>
+</document>
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index b75b8f6d8a3bfea3033a60be98a661899b64afd0..439580fb4776fa161a6647cb64829c5577ee7dfa 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -1457,16 +1457,17 @@ if (DARWIN)
     COMPILE_FLAGS "-fmodules -fcxx-modules -Wno-nullability-completeness"
     )
 
-  find_library(AGL_LIBRARY AGL)
   find_library(APPKIT_LIBRARY AppKit)
   find_library(COCOA_LIBRARY Cocoa)
   find_library(IOKIT_LIBRARY IOKit)
+  find_library(COREFOUNDATION_LIBRARY CoreFoundation)
   find_library(COREAUDIO_LIBRARY CoreAudio)
 
   set(viewer_LIBRARIES
     ${COCOA_LIBRARY}
-    ${AGL_LIBRARY}
+    ${APPKIT_LIBRARY}
     ${IOKIT_LIBRARY}
+    ${COREFOUNDATION_LIBRARY}
     ${COREAUDIO_LIBRARY}
     )
 
@@ -1480,8 +1481,8 @@ if (DARWIN)
   set(viewer_RESOURCE_FILES
     alchemy.icns
     macview.r
-    Info-SecondLife.plist
-    SecondLife.xib/
+    Info-Alchemy.plist
+    Alchemy.xib/
     # CMake doesn't seem to support Xcode language variants well just yet
     English.lproj/InfoPlist.strings
     English.lproj/language.txt
@@ -1497,6 +1498,10 @@ if (DARWIN)
     )
   SOURCE_GROUP("Resources" FILES ${viewer_RESOURCE_FILES})
   list(APPEND viewer_SOURCE_FILES ${viewer_RESOURCE_FILES})
+  
+  if (OPENAL)
+    LIST(APPEND viewer_LIBRARIES ${OPENAL_LIBRARIES} ${FREEALUT_LIBRARIES})
+  endif (OPENAL)
 endif (DARWIN)
 
 if (LINUX)
@@ -2219,34 +2224,48 @@ if (DARWIN)
   set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}")
   set(MACOSX_BUNDLE_BUNDLE_VERSION "${VIEWER_SHORT_VERSION}${VIEWER_MACOSX_PHASE}${VIEWER_REVISION}")
   set(MACOSX_BUNDLE_COPYRIGHT "Copyright (C) 2013-2020 Alchemy Development Group")
-  set(MACOSX_BUNDLE_NSMAIN_NIB_FILE "SecondLife.nib")
+  set(MACOSX_BUNDLE_NSMAIN_NIB_FILE "Alchemy.nib")
   set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "LLApplication")
 
   # https://blog.kitware.com/upcoming-in-cmake-2-8-12-osx-rpath-support/
   set(CMAKE_MACOSX_RPATH 1)
   
+  set(VIEWER_APP_BUNDLE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app")
+  set(VIEWER_APP_EXE "${VIEWER_APP_BUNDLE}/Contents/MacOS/${product}")
+  set(VIEWER_APP_DSYM "${VIEWER_APP_EXE}.dSYM")
+  set(VIEWER_APP_XCARCHIVE "${VIEWER_APP_BUNDLE}/../${product}.xcarchive.zip")
+
+  configure_file(
+     "${CMAKE_CURRENT_SOURCE_DIR}/Info-Alchemy.plist"
+     "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/Info-Alchemy.plist"
+    )
+
   set_target_properties(
     ${VIEWER_BINARY_NAME}
     PROPERTIES
     OUTPUT_NAME "${product}"
-    # From Contents/MacOS/SecondLife, look in Contents/Frameworks
+    # From Contents/MacOS/Alchemy, look in Contents/Frameworks
+    BUILD_WITH_INSTALL_RPATH 1
     INSTALL_RPATH "@loader_path/../Frameworks"
-    # SIGH, as of 2018-05-24 (cmake 3.11.1) the INSTALL_RPATH property simply
-    # does not work. Try this:
-    LINK_FLAGS "-rpath @loader_path/../Frameworks"
     MACOSX_BUNDLE_INFO_PLIST
-    "${CMAKE_CURRENT_SOURCE_DIR}/Info-SecondLife.plist"
+    "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/Info-Alchemy.plist"
     )
 
-  set(VIEWER_APP_BUNDLE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app")
-  set(VIEWER_APP_EXE "${VIEWER_APP_BUNDLE}/Contents/MacOS/${product}")
-  set(VIEWER_APP_DSYM "${VIEWER_APP_EXE}.dSYM")
-  set(VIEWER_APP_XCARCHIVE "${VIEWER_APP_BUNDLE}/../${product}.xcarchive.zip")
+  # Make sure we can find the 'ibtool' program. If we can NOT find it we
+  # skip generation of this project
+  find_program(IBTOOL ibtool HINTS "/usr/bin" "${OSX_DEVELOPER_ROOT}/usr/bin")
+  if (${IBTOOL} STREQUAL "IBTOOL-NOTFOUND")
+    message(SEND_ERROR "ibtool can not be found and is needed to compile the .xib files. It should have been installed with
+                      the Apple developer tools. The default system paths were searched in addition to ${OSX_DEVELOPER_ROOT}/usr/bin")
+  endif()
+
+  # Compile the .xib files using the 'ibtool' program with the destination being the app package
+  add_custom_command (TARGET ${VIEWER_BINARY_NAME} POST_BUILD
+                      COMMAND ${IBTOOL} --errors --warnings --notices
+                              --compile ${VIEWER_APP_BUNDLE}/Contents/Resources/Alchemy.nib
+                              ${CMAKE_CURRENT_SOURCE_DIR}/Alchemy.xib
+                      COMMENT "Compiling ${CMAKE_CURRENT_SOURCE_DIR}/Alchemy.xib")
 
-  configure_file(
-     "${CMAKE_CURRENT_SOURCE_DIR}/Info-SecondLife.plist"
-     "${VIEWER_APP_BUNDLE}/Contents/Info.plist"
-    )
 
   add_custom_command(
     TARGET ${VIEWER_BINARY_NAME} POST_BUILD
diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-Alchemy.plist
similarity index 98%
rename from indra/newview/Info-SecondLife.plist
rename to indra/newview/Info-Alchemy.plist
index cfe9d991c5a90c803acca5ce64ea101d47a2c480..af626131b54a4985c5b0b66c200c27685e960415 100644
--- a/indra/newview/Info-SecondLife.plist
+++ b/indra/newview/Info-Alchemy.plist
@@ -28,8 +28,6 @@
 	<string>${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}</string>
 	<key>CSResourcesFileMapped</key>
 	<true/>
-	<key>LSRequiresCarbon</key>
-	<true/>
 	<key>NSHumanReadableCopyright</key>
 	<string>${MACOSX_BUNDLE_COPYRIGHT}</string>
 	<key>NSMicrophoneUsageDescription</key>
diff --git a/indra/newview/SecondLife.nib b/indra/newview/SecondLife.nib
deleted file mode 100644
index c4ddca50dc15061906b29abb4e547aa17d039b45..0000000000000000000000000000000000000000
Binary files a/indra/newview/SecondLife.nib and /dev/null differ
diff --git a/indra/newview/SecondLife.xib b/indra/newview/SecondLife.xib
deleted file mode 100644
index ef25c648a7a6fdaa3478ca004cb3891e13184c53..0000000000000000000000000000000000000000
--- a/indra/newview/SecondLife.xib
+++ /dev/null
@@ -1,1136 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
-	<data>
-		<int key="IBDocument.SystemTarget">1060</int>
-		<string key="IBDocument.SystemVersion">12E55</string>
-		<string key="IBDocument.InterfaceBuilderVersion">4457.6</string>
-		<string key="IBDocument.AppKitVersion">1187.39</string>
-		<string key="IBDocument.HIToolboxVersion">626.00</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">4457.6</string>
-		</object>
-		<array key="IBDocument.IntegratedClassDependencies">
-			<string>NSCustomObject</string>
-			<string>NSMenu</string>
-			<string>NSMenuItem</string>
-			<string>NSScrollView</string>
-			<string>NSScroller</string>
-			<string>NSTextView</string>
-			<string>NSView</string>
-			<string>NSWindowTemplate</string>
-		</array>
-		<array key="IBDocument.PluginDependencies">
-			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-		</array>
-		<object class="NSMutableDictionary" key="IBDocument.Metadata">
-			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
-			<integer value="1" key="NS.object.0"/>
-		</object>
-		<array class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
-			<object class="NSCustomObject" id="1021">
-				<string key="NSClassName">NSApplication</string>
-			</object>
-			<object class="NSCustomObject" id="1014">
-				<string key="NSClassName">FirstResponder</string>
-			</object>
-			<object class="NSCustomObject" id="1050">
-				<string key="NSClassName">NSApplication</string>
-			</object>
-			<object class="NSMenu" id="649796088">
-				<string key="NSTitle">Main Menu</string>
-				<array class="NSMutableArray" key="NSMenuItems">
-					<object class="NSMenuItem" id="694149608">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">Second Life</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<object class="NSCustomResource" key="NSOnImage" id="353210768">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">NSMenuCheckmark</string>
-						</object>
-						<object class="NSCustomResource" key="NSMixedImage" id="549394948">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">NSMenuMixedState</string>
-						</object>
-						<string key="NSAction">submenuAction:</string>
-						<object class="NSMenu" key="NSSubmenu" id="110575045">
-							<string key="NSTitle">Second Life</string>
-							<array class="NSMutableArray" key="NSMenuItems">
-								<object class="NSMenuItem" id="238522557">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">About Second Life</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="304266470">
-									<reference key="NSMenu" ref="110575045"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="609285721">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Preferences…</string>
-									<string key="NSKeyEquiv">,</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="481834944">
-									<reference key="NSMenu" ref="110575045"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="1046388886">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Services</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="752062318">
-										<string key="NSTitle">Services</string>
-										<array class="NSMutableArray" key="NSMenuItems"/>
-										<string key="NSName">_NSServicesMenu</string>
-									</object>
-								</object>
-								<object class="NSMenuItem" id="646227648">
-									<reference key="NSMenu" ref="110575045"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="755159360">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Hide Second Life</string>
-									<string key="NSKeyEquiv">h</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="342932134">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Hide Others</string>
-									<string key="NSKeyEquiv">h</string>
-									<int key="NSKeyEquivModMask">1572864</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="908899353">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Show All</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="1056857174">
-									<reference key="NSMenu" ref="110575045"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="632727374">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Quit Second Life</string>
-									<string key="NSKeyEquiv">q</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-							</array>
-							<string key="NSName">_NSAppleMenu</string>
-						</object>
-					</object>
-					<object class="NSMenuItem" id="725688984">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">Edit</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="353210768"/>
-						<reference key="NSMixedImage" ref="549394948"/>
-						<string key="NSAction">submenuAction:</string>
-						<object class="NSMenu" key="NSSubmenu" id="701759256">
-							<string key="NSTitle">Edit</string>
-							<array class="NSMutableArray" key="NSMenuItems">
-								<object class="NSMenuItem" id="521487141">
-									<reference key="NSMenu" ref="701759256"/>
-									<string key="NSTitle">Undo</string>
-									<string key="NSKeyEquiv">z</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="668936019">
-									<reference key="NSMenu" ref="701759256"/>
-									<string key="NSTitle">Redo</string>
-									<string key="NSKeyEquiv">Z</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="383018193">
-									<reference key="NSMenu" ref="701759256"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="984623395">
-									<reference key="NSMenu" ref="701759256"/>
-									<string key="NSTitle">Cut</string>
-									<string key="NSKeyEquiv">x</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="656529582">
-									<reference key="NSMenu" ref="701759256"/>
-									<string key="NSTitle">Copy</string>
-									<string key="NSKeyEquiv">c</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="1032676691">
-									<reference key="NSMenu" ref="701759256"/>
-									<string key="NSTitle">Paste</string>
-									<string key="NSKeyEquiv">v</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="538907583">
-									<reference key="NSMenu" ref="701759256"/>
-									<string key="NSTitle">Select All</string>
-									<string key="NSKeyEquiv">a</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-							</array>
-						</object>
-					</object>
-					<object class="NSMenuItem" id="713487014">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">Window</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="353210768"/>
-						<reference key="NSMixedImage" ref="549394948"/>
-						<string key="NSAction">submenuAction:</string>
-						<object class="NSMenu" key="NSSubmenu" id="835318025">
-							<string key="NSTitle">Window</string>
-							<array class="NSMutableArray" key="NSMenuItems">
-								<object class="NSMenuItem" id="1011231497">
-									<reference key="NSMenu" ref="835318025"/>
-									<string key="NSTitle">Minimize</string>
-									<string key="NSKeyEquiv">m</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="575023229">
-									<reference key="NSMenu" ref="835318025"/>
-									<string key="NSTitle">Zoom</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="86356408">
-									<reference key="NSMenu" ref="835318025"/>
-									<string key="NSTitle">Enter Full Screen</string>
-									<string key="NSKeyEquiv">f</string>
-									<int key="NSKeyEquivModMask">1310720</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="299356726">
-									<reference key="NSMenu" ref="835318025"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-								<object class="NSMenuItem" id="625202149">
-									<reference key="NSMenu" ref="835318025"/>
-									<string key="NSTitle">Bring All to Front</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="353210768"/>
-									<reference key="NSMixedImage" ref="549394948"/>
-								</object>
-							</array>
-							<string key="NSName">_NSWindowsMenu</string>
-						</object>
-					</object>
-					<object class="NSMenuItem" id="391199113">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">Help</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="353210768"/>
-						<reference key="NSMixedImage" ref="549394948"/>
-					</object>
-				</array>
-				<string key="NSName">_NSMainMenu</string>
-			</object>
-			<object class="NSCustomObject" id="756173070">
-				<string key="NSClassName">LLAppDelegate</string>
-			</object>
-			<object class="NSWindowTemplate" id="110292814">
-				<int key="NSWindowStyleMask">15</int>
-				<int key="NSWindowBacking">2</int>
-				<string key="NSWindowRect">{{196, 240}, {1024, 600}}</string>
-				<int key="NSWTFlags">74974208</int>
-				<string key="NSWindowTitle">Second Life</string>
-				<string key="NSWindowClass">LLNSWindow</string>
-				<nil key="NSViewClass"/>
-				<nil key="NSUserInterfaceItemIdentifier"/>
-				<object class="NSView" key="NSWindowView" id="305280978">
-					<reference key="NSNextResponder"/>
-					<int key="NSvFlags">256</int>
-					<array class="NSMutableArray" key="NSSubviews"/>
-					<string key="NSFrameSize">{1024, 600}</string>
-					<reference key="NSSuperview"/>
-					<reference key="NSWindow"/>
-					<string key="NSReuseIdentifierKey">_NS:20</string>
-				</object>
-				<string key="NSScreenRect">{{0, 0}, {2560, 1418}}</string>
-				<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
-				<string key="NSFrameAutosaveName">Second Life</string>
-				<int key="NSWindowCollectionBehavior">128</int>
-				<bool key="NSWindowIsRestorable">YES</bool>
-			</object>
-			<object class="NSWindowTemplate" id="979091056">
-				<int key="NSWindowStyleMask">31</int>
-				<int key="NSWindowBacking">2</int>
-				<string key="NSWindowRect">{{272, 176}, {938, 42}}</string>
-				<int key="NSWTFlags">-1535638528</int>
-				<string key="NSWindowTitle">Input Window</string>
-				<string key="NSWindowClass">LLUserInputWindow</string>
-				<nil key="NSViewClass"/>
-				<nil key="NSUserInterfaceItemIdentifier"/>
-				<object class="NSView" key="NSWindowView" id="1044753903">
-					<reference key="NSNextResponder"/>
-					<int key="NSvFlags">256</int>
-					<array class="NSMutableArray" key="NSSubviews">
-						<object class="NSScrollView" id="238626476">
-							<reference key="NSNextResponder" ref="1044753903"/>
-							<int key="NSvFlags">256</int>
-							<array class="NSMutableArray" key="NSSubviews">
-								<object class="NSClipView" id="871543330">
-									<reference key="NSNextResponder" ref="238626476"/>
-									<int key="NSvFlags">2322</int>
-									<array class="NSMutableArray" key="NSSubviews">
-										<object class="NSTextView" id="395788163">
-											<reference key="NSNextResponder" ref="871543330"/>
-											<int key="NSvFlags">2322</int>
-											<set class="NSMutableSet" key="NSDragTypes">
-												<string>Apple HTML pasteboard type</string>
-												<string>Apple PDF pasteboard type</string>
-												<string>Apple PICT pasteboard type</string>
-												<string>Apple PNG pasteboard type</string>
-												<string>Apple URL pasteboard type</string>
-												<string>CorePasteboardFlavorType 0x6D6F6F76</string>
-												<string>NSColor pasteboard type</string>
-												<string>NSFilenamesPboardType</string>
-												<string>NSStringPboardType</string>
-												<string>NeXT Encapsulated PostScript v1.2 pasteboard type</string>
-												<string>NeXT RTFD pasteboard type</string>
-												<string>NeXT Rich Text Format v1.0 pasteboard type</string>
-												<string>NeXT TIFF v4.0 pasteboard type</string>
-												<string>NeXT font pasteboard type</string>
-												<string>NeXT ruler pasteboard type</string>
-												<string>WebURLsWithTitlesPboardType</string>
-												<string>public.url</string>
-											</set>
-											<string key="NSFrameSize">{938, 42}</string>
-											<reference key="NSSuperview" ref="871543330"/>
-											<reference key="NSWindow"/>
-											<reference key="NSNextKeyView" ref="339833963"/>
-											<string key="NSReuseIdentifierKey">_NS:13</string>
-											<object class="NSTextContainer" key="NSTextContainer" id="648552009">
-												<object class="NSLayoutManager" key="NSLayoutManager">
-													<object class="NSTextStorage" key="NSTextStorage">
-														<object class="NSMutableString" key="NSString">
-															<characters key="NS.bytes"/>
-														</object>
-														<nil key="NSDelegate"/>
-													</object>
-													<array class="NSMutableArray" key="NSTextContainers">
-														<reference ref="648552009"/>
-													</array>
-													<int key="NSLMFlags">166</int>
-													<nil key="NSDelegate"/>
-												</object>
-												<reference key="NSTextView" ref="395788163"/>
-												<double key="NSWidth">938</double>
-												<int key="NSTCFlags">1</int>
-											</object>
-											<object class="NSTextViewSharedData" key="NSSharedData">
-												<int key="NSFlags">67121127</int>
-												<int key="NSTextCheckingTypes">0</int>
-												<nil key="NSMarkedAttributes"/>
-												<object class="NSColor" key="NSBackgroundColor" id="535647664">
-													<int key="NSColorSpace">3</int>
-													<bytes key="NSWhite">MQA</bytes>
-												</object>
-												<dictionary key="NSSelectedAttributes">
-													<object class="NSColor" key="NSBackgroundColor">
-														<int key="NSColorSpace">6</int>
-														<string key="NSCatalogName">System</string>
-														<string key="NSColorName">selectedTextBackgroundColor</string>
-														<object class="NSColor" key="NSColor">
-															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
-														</object>
-													</object>
-													<object class="NSColor" key="NSColor">
-														<int key="NSColorSpace">6</int>
-														<string key="NSCatalogName">System</string>
-														<string key="NSColorName">selectedTextColor</string>
-														<object class="NSColor" key="NSColor" id="835883401">
-															<int key="NSColorSpace">3</int>
-															<bytes key="NSWhite">MAA</bytes>
-														</object>
-													</object>
-												</dictionary>
-												<reference key="NSInsertionColor" ref="835883401"/>
-												<dictionary key="NSLinkAttributes">
-													<object class="NSColor" key="NSColor">
-														<int key="NSColorSpace">1</int>
-														<bytes key="NSRGB">MCAwIDEAA</bytes>
-													</object>
-													<object class="NSCursor" key="NSCursor">
-														<string key="NSHotSpot">{8, -8}</string>
-														<int key="NSCursorType">13</int>
-													</object>
-													<integer value="1" key="NSUnderline"/>
-												</dictionary>
-												<nil key="NSDefaultParagraphStyle"/>
-												<nil key="NSTextFinder"/>
-												<int key="NSPreferredTextFinderStyle">1</int>
-											</object>
-											<int key="NSTVFlags">6</int>
-											<string key="NSMaxSize">{939, 10000000}</string>
-											<nil key="NSDelegate"/>
-										</object>
-									</array>
-									<string key="NSFrame">{{1, 1}, {938, 42}}</string>
-									<reference key="NSSuperview" ref="238626476"/>
-									<reference key="NSWindow"/>
-									<reference key="NSNextKeyView" ref="395788163"/>
-									<string key="NSReuseIdentifierKey">_NS:11</string>
-									<reference key="NSDocView" ref="395788163"/>
-									<reference key="NSBGColor" ref="535647664"/>
-									<object class="NSCursor" key="NSCursor">
-										<string key="NSHotSpot">{4, 5}</string>
-										<object class="NSImage" key="NSImage">
-											<int key="NSImageFlags">79691776</int>
-											<array key="NSReps">
-												<array>
-													<integer value="5"/>
-													<object class="NSURL">
-														<nil key="NS.base"/>
-														<string key="NS.relative">file://localhost/Applications/Xcode.app/Contents/SharedFrameworks/DVTKit.framework/Resources/DVTIbeamCursor.tiff</string>
-													</object>
-												</array>
-											</array>
-											<object class="NSColor" key="NSColor">
-												<int key="NSColorSpace">3</int>
-												<bytes key="NSWhite">MCAwAA</bytes>
-											</object>
-										</object>
-									</object>
-									<int key="NScvFlags">4</int>
-								</object>
-								<object class="NSScroller" id="339833963">
-									<reference key="NSNextResponder" ref="238626476"/>
-									<int key="NSvFlags">256</int>
-									<string key="NSFrame">{{923, 1}, {16, 42}}</string>
-									<reference key="NSSuperview" ref="238626476"/>
-									<reference key="NSWindow"/>
-									<reference key="NSNextKeyView"/>
-									<string key="NSReuseIdentifierKey">_NS:83</string>
-									<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
-									<reference key="NSTarget" ref="238626476"/>
-									<string key="NSAction">_doScroller:</string>
-									<double key="NSPercent">0.96666666666666667</double>
-								</object>
-								<object class="NSScroller" id="1067057765">
-									<reference key="NSNextResponder" ref="238626476"/>
-									<int key="NSvFlags">-2147483392</int>
-									<string key="NSFrame">{{-100, -100}, {87, 18}}</string>
-									<reference key="NSSuperview" ref="238626476"/>
-									<reference key="NSWindow"/>
-									<reference key="NSNextKeyView" ref="871543330"/>
-									<string key="NSReuseIdentifierKey">_NS:33</string>
-									<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
-									<int key="NSsFlags">1</int>
-									<reference key="NSTarget" ref="238626476"/>
-									<string key="NSAction">_doScroller:</string>
-									<double key="NSCurValue">1</double>
-									<double key="NSPercent">0.94565218687057495</double>
-								</object>
-							</array>
-							<string key="NSFrame">{{-1, -1}, {940, 44}}</string>
-							<reference key="NSSuperview" ref="1044753903"/>
-							<reference key="NSWindow"/>
-							<reference key="NSNextKeyView" ref="1067057765"/>
-							<string key="NSReuseIdentifierKey">_NS:9</string>
-							<int key="NSsFlags">133138</int>
-							<reference key="NSVScroller" ref="339833963"/>
-							<reference key="NSHScroller" ref="1067057765"/>
-							<reference key="NSContentView" ref="871543330"/>
-							<double key="NSMinMagnification">0.25</double>
-							<double key="NSMaxMagnification">4</double>
-							<double key="NSMagnification">1</double>
-						</object>
-					</array>
-					<string key="NSFrameSize">{938, 42}</string>
-					<reference key="NSSuperview"/>
-					<reference key="NSWindow"/>
-					<reference key="NSNextKeyView" ref="238626476"/>
-					<string key="NSReuseIdentifierKey">_NS:21</string>
-				</object>
-				<string key="NSScreenRect">{{0, 0}, {2560, 1418}}</string>
-				<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
-				<bool key="NSWindowIsRestorable">YES</bool>
-			</object>
-		</array>
-		<object class="IBObjectContainer" key="IBDocument.Objects">
-			<array class="NSMutableArray" key="connectionRecords">
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">terminate:</string>
-						<reference key="source" ref="1050"/>
-						<reference key="destination" ref="632727374"/>
-					</object>
-					<int key="connectionID">823</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">orderFrontStandardAboutPanel:</string>
-						<reference key="source" ref="1021"/>
-						<reference key="destination" ref="238522557"/>
-					</object>
-					<int key="connectionID">142</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBOutletConnection" key="connection">
-						<string key="label">delegate</string>
-						<reference key="source" ref="1021"/>
-						<reference key="destination" ref="756173070"/>
-					</object>
-					<int key="connectionID">845</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">performMiniaturize:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="1011231497"/>
-					</object>
-					<int key="connectionID">37</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">arrangeInFront:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="625202149"/>
-					</object>
-					<int key="connectionID">39</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">performZoom:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="575023229"/>
-					</object>
-					<int key="connectionID">240</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">hide:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="755159360"/>
-					</object>
-					<int key="connectionID">369</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">hideOtherApplications:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="342932134"/>
-					</object>
-					<int key="connectionID">370</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">unhideAllApplications:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="908899353"/>
-					</object>
-					<int key="connectionID">372</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">cut:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="984623395"/>
-					</object>
-					<int key="connectionID">768</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">paste:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="1032676691"/>
-					</object>
-					<int key="connectionID">769</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">undo:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="521487141"/>
-					</object>
-					<int key="connectionID">776</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">copy:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="656529582"/>
-					</object>
-					<int key="connectionID">782</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">selectAll:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="538907583"/>
-					</object>
-					<int key="connectionID">785</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleFullScreen:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="86356408"/>
-					</object>
-					<int key="connectionID">842</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBOutletConnection" key="connection">
-						<string key="label">window</string>
-						<reference key="source" ref="756173070"/>
-						<reference key="destination" ref="110292814"/>
-					</object>
-					<int key="connectionID">850</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBOutletConnection" key="connection">
-						<string key="label">inputWindow</string>
-						<reference key="source" ref="756173070"/>
-						<reference key="destination" ref="979091056"/>
-					</object>
-					<int key="connectionID">953</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBOutletConnection" key="connection">
-						<string key="label">inputView</string>
-						<reference key="source" ref="756173070"/>
-						<reference key="destination" ref="395788163"/>
-					</object>
-					<int key="connectionID">954</int>
-				</object>
-			</array>
-			<object class="IBMutableOrderedSet" key="objectRecords">
-				<array key="orderedObjects">
-					<object class="IBObjectRecord">
-						<int key="objectID">0</int>
-						<array key="object" id="0"/>
-						<reference key="children" ref="1048"/>
-						<nil key="parent"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-2</int>
-						<reference key="object" ref="1021"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">File's Owner</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-1</int>
-						<reference key="object" ref="1014"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">First Responder</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-3</int>
-						<reference key="object" ref="1050"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">Application</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">29</int>
-						<reference key="object" ref="649796088"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="713487014"/>
-							<reference ref="694149608"/>
-							<reference ref="391199113"/>
-							<reference ref="725688984"/>
-						</array>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">Main Menu</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">19</int>
-						<reference key="object" ref="713487014"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="835318025"/>
-						</array>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">56</int>
-						<reference key="object" ref="694149608"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="110575045"/>
-						</array>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">103</int>
-						<reference key="object" ref="391199113"/>
-						<array class="NSMutableArray" key="children"/>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">57</int>
-						<reference key="object" ref="110575045"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="238522557"/>
-							<reference ref="755159360"/>
-							<reference ref="908899353"/>
-							<reference ref="632727374"/>
-							<reference ref="646227648"/>
-							<reference ref="609285721"/>
-							<reference ref="481834944"/>
-							<reference ref="304266470"/>
-							<reference ref="1046388886"/>
-							<reference ref="1056857174"/>
-							<reference ref="342932134"/>
-						</array>
-						<reference key="parent" ref="694149608"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">58</int>
-						<reference key="object" ref="238522557"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">134</int>
-						<reference key="object" ref="755159360"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">150</int>
-						<reference key="object" ref="908899353"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">136</int>
-						<reference key="object" ref="632727374"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">144</int>
-						<reference key="object" ref="646227648"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">129</int>
-						<reference key="object" ref="609285721"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">143</int>
-						<reference key="object" ref="481834944"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">236</int>
-						<reference key="object" ref="304266470"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">131</int>
-						<reference key="object" ref="1046388886"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="752062318"/>
-						</array>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">149</int>
-						<reference key="object" ref="1056857174"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">145</int>
-						<reference key="object" ref="342932134"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">130</int>
-						<reference key="object" ref="752062318"/>
-						<reference key="parent" ref="1046388886"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">24</int>
-						<reference key="object" ref="835318025"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="299356726"/>
-							<reference ref="625202149"/>
-							<reference ref="575023229"/>
-							<reference ref="1011231497"/>
-							<reference ref="86356408"/>
-						</array>
-						<reference key="parent" ref="713487014"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">92</int>
-						<reference key="object" ref="299356726"/>
-						<reference key="parent" ref="835318025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">5</int>
-						<reference key="object" ref="625202149"/>
-						<reference key="parent" ref="835318025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">239</int>
-						<reference key="object" ref="575023229"/>
-						<reference key="parent" ref="835318025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">23</int>
-						<reference key="object" ref="1011231497"/>
-						<reference key="parent" ref="835318025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">711</int>
-						<reference key="object" ref="725688984"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="701759256"/>
-						</array>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">712</int>
-						<reference key="object" ref="701759256"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="521487141"/>
-							<reference ref="668936019"/>
-							<reference ref="383018193"/>
-							<reference ref="984623395"/>
-							<reference ref="656529582"/>
-							<reference ref="1032676691"/>
-							<reference ref="538907583"/>
-						</array>
-						<reference key="parent" ref="725688984"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">716</int>
-						<reference key="object" ref="984623395"/>
-						<reference key="parent" ref="701759256"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">717</int>
-						<reference key="object" ref="656529582"/>
-						<reference key="parent" ref="701759256"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">718</int>
-						<reference key="object" ref="1032676691"/>
-						<reference key="parent" ref="701759256"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">721</int>
-						<reference key="object" ref="538907583"/>
-						<reference key="parent" ref="701759256"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">824</int>
-						<reference key="object" ref="756173070"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">841</int>
-						<reference key="object" ref="86356408"/>
-						<reference key="parent" ref="835318025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">828</int>
-						<reference key="object" ref="110292814"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="305280978"/>
-						</array>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">829</int>
-						<reference key="object" ref="305280978"/>
-						<array class="NSMutableArray" key="children"/>
-						<reference key="parent" ref="110292814"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">713</int>
-						<reference key="object" ref="521487141"/>
-						<reference key="parent" ref="701759256"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">714</int>
-						<reference key="object" ref="668936019"/>
-						<reference key="parent" ref="701759256"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">715</int>
-						<reference key="object" ref="383018193"/>
-						<reference key="parent" ref="701759256"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">941</int>
-						<reference key="object" ref="979091056"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="1044753903"/>
-						</array>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">942</int>
-						<reference key="object" ref="1044753903"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="238626476"/>
-						</array>
-						<reference key="parent" ref="979091056"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">943</int>
-						<reference key="object" ref="238626476"/>
-						<array class="NSMutableArray" key="children">
-							<reference ref="395788163"/>
-							<reference ref="1067057765"/>
-							<reference ref="339833963"/>
-						</array>
-						<reference key="parent" ref="1044753903"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">944</int>
-						<reference key="object" ref="395788163"/>
-						<reference key="parent" ref="238626476"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">945</int>
-						<reference key="object" ref="1067057765"/>
-						<reference key="parent" ref="238626476"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">946</int>
-						<reference key="object" ref="339833963"/>
-						<reference key="parent" ref="238626476"/>
-					</object>
-				</array>
-			</object>
-			<dictionary class="NSMutableDictionary" key="flattenedProperties">
-				<string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="103.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="129.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="130.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="131.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="134.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="136.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="143.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="144.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="145.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="149.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="150.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="19.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="23.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="236.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="239.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="24.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="29.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="5.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="56.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="57.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="58.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="711.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="712.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="713.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="714.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="715.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="716.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="717.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="718.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="721.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="824.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<boolean value="YES" key="828.IBNSWindowAutoPositionCentersHorizontal"/>
-				<boolean value="YES" key="828.IBNSWindowAutoPositionCentersVertical"/>
-				<string key="828.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<boolean value="YES" key="828.NSWindowTemplate.visibleAtLaunch"/>
-				<string key="829.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="841.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="92.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="941.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<boolean value="NO" key="941.NSWindowTemplate.visibleAtLaunch"/>
-				<string key="942.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="943.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="944.CustomClassName">LLNonInlineTextView</string>
-				<string key="944.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="945.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-				<string key="946.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			</dictionary>
-			<dictionary class="NSMutableDictionary" key="unlocalizedProperties"/>
-			<nil key="activeLocalization"/>
-			<dictionary class="NSMutableDictionary" key="localizations"/>
-			<nil key="sourceID"/>
-			<int key="maxID">954</int>
-		</object>
-		<object class="IBClassDescriber" key="IBDocument.Classes">
-			<array class="NSMutableArray" key="referencedPartialClassDescriptions">
-				<object class="IBPartialClassDescription">
-					<string key="className">LLAppDelegate</string>
-					<string key="superclassName">NSObject</string>
-					<dictionary class="NSMutableDictionary" key="outlets">
-						<string key="inputView">LLNonInlineTextView</string>
-						<string key="inputWindow">NSWindow</string>
-						<string key="window">LLNSWindow</string>
-					</dictionary>
-					<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<object class="IBToOneOutletInfo" key="inputView">
-							<string key="name">inputView</string>
-							<string key="candidateClassName">LLNonInlineTextView</string>
-						</object>
-						<object class="IBToOneOutletInfo" key="inputWindow">
-							<string key="name">inputWindow</string>
-							<string key="candidateClassName">NSWindow</string>
-						</object>
-						<object class="IBToOneOutletInfo" key="window">
-							<string key="name">window</string>
-							<string key="candidateClassName">LLNSWindow</string>
-						</object>
-					</dictionary>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">./Classes/LLAppDelegate.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">LLNSWindow</string>
-					<string key="superclassName">NSWindow</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">./Classes/LLNSWindow.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">LLNonInlineTextView</string>
-					<string key="superclassName">NSTextView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">./Classes/LLNonInlineTextView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">LLUserInputWindow</string>
-					<string key="superclassName">NSPanel</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">./Classes/LLUserInputWindow.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSTextView</string>
-					<dictionary class="NSMutableDictionary" key="actions">
-						<string key="orderFrontSharingServicePicker:">id</string>
-						<string key="toggleQuickLookPreviewPanel:">id</string>
-					</dictionary>
-					<dictionary class="NSMutableDictionary" key="actionInfosByName">
-						<object class="IBActionInfo" key="orderFrontSharingServicePicker:">
-							<string key="name">orderFrontSharingServicePicker:</string>
-							<string key="candidateClassName">id</string>
-						</object>
-						<object class="IBActionInfo" key="toggleQuickLookPreviewPanel:">
-							<string key="name">toggleQuickLookPreviewPanel:</string>
-							<string key="candidateClassName">id</string>
-						</object>
-					</dictionary>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">./Classes/NSTextView.h</string>
-					</object>
-				</object>
-			</array>
-		</object>
-		<int key="IBDocument.localizationMode">0</int>
-		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
-			<real value="1060" key="NS.object.0"/>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
-			<integer value="4600" key="NS.object.0"/>
-		</object>
-		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
-		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<dictionary class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
-			<string key="NSMenuCheckmark">{11, 11}</string>
-			<string key="NSMenuMixedState">{10, 3}</string>
-		</dictionary>
-	</data>
-</archive>
diff --git a/indra/newview/alaoengine.cpp b/indra/newview/alaoengine.cpp
index e8e803fbc65fdda267cee2b93e734d20e2964112..30b4f7bbd861fee24bf4699784388e718cb33a9e 100644
--- a/indra/newview/alaoengine.cpp
+++ b/indra/newview/alaoengine.cpp
@@ -1891,12 +1891,12 @@ void ALAOEngine::processImport(bool aFromTimer)
 			if (state->mCycleTime)
 			{
 				const std::string oldName = state->mName;
-				state->mName = llformat("%s%d",oldName + ":CT",state->mCycleTime);
+				state->mName = absl::StrFormat("%s%d",oldName + ":CT",state->mCycleTime);
 			}
 			if (state->mCycle)
 			{
 				const std::string oldName = state->mName;
-				state->mName = llformat("%s%s", oldName, ":CY");
+				state->mName = absl::StrFormat("%s%s", oldName, ":CY");
 			}
 			allComplete = false;
 			LL_DEBUGS("AOEngine") << "state " << state->mName << " still has animations to link." << LL_ENDL;
diff --git a/indra/newview/alpanelquicksettings.cpp b/indra/newview/alpanelquicksettings.cpp
index 2dc4d0158199cd00e581316d3dc5cfc6ee5eb221..43b4b26fca98ab386206cd5a55afdd888fe58e16 100644
--- a/indra/newview/alpanelquicksettings.cpp
+++ b/indra/newview/alpanelquicksettings.cpp
@@ -43,7 +43,6 @@ static LLPanelInjector<ALPanelQuickSettings> t_quick_settings("quick_settings");
 
 ALPanelQuickSettings::ALPanelQuickSettings()
 	: LLPanel(),
-	mRegionSettingsCheckBox(nullptr),
 	mHoverSlider(nullptr),
 	mHoverSpinner(nullptr)
 {
diff --git a/indra/newview/alpanelquicksettings.h b/indra/newview/alpanelquicksettings.h
index fca55b8e3b73b590ae8a861b90ea603e30b5cbca..504fc5c28a1b42454b3c4d08872c7795d5b626ee 100644
--- a/indra/newview/alpanelquicksettings.h
+++ b/indra/newview/alpanelquicksettings.h
@@ -52,8 +52,6 @@ class ALPanelQuickSettings final : public LLPanel
 	void onSimulatorFeaturesReceived(const LLUUID &region_id);
 	void updateEditHoverEnabled();
 
-	LLCheckBoxCtrl* mRegionSettingsCheckBox;
-	
 	LLSlider* mHoverSlider;
 	LLSpinCtrl* mHoverSpinner;
 	
diff --git a/indra/newview/altoolalign.h b/indra/newview/altoolalign.h
index 1d5fc552d629cae40f743a79140cac2375fb56df..aece53e8c7fbbb36245d3f8685059a8afb59f091 100644
--- a/indra/newview/altoolalign.h
+++ b/indra/newview/altoolalign.h
@@ -17,7 +17,7 @@ class LLToolSelectRect;
 class ALToolAlign final
 :	public LLTool, public LLSingleton<ALToolAlign>
 {
-	LLSINGLETON(ALToolAlign);
+    LLSINGLETON_C11(ALToolAlign);
 	~ALToolAlign() = default;
     
 public:
diff --git a/indra/newview/llappdelegate-objc.mm b/indra/newview/llappdelegate-objc.mm
index a2b7362608d38c822cf4d5fd28a31b338e5883a7..d88fed859dab2705da43e28a684bfbee4753c321 100644
--- a/indra/newview/llappdelegate-objc.mm
+++ b/indra/newview/llappdelegate-objc.mm
@@ -46,6 +46,7 @@
 
 - (void)dealloc
 {
+    [currentInputLanguage release];
     [super dealloc];
 }
 
@@ -151,7 +152,7 @@
 		// Once pumpMainLoop() reports that we're done, cancel frameTimer:
 		// stop the repetitive calls.
 		[frameTimer release];
-		[[NSApplication sharedApplication] terminate:self];
+		[[LLApplication sharedApplication] terminate:self];
 	}
 }
 
@@ -196,15 +197,18 @@
 
 - (bool) romanScript
 {
-	// How to add support for new languages with the input window:
-	// Simply append this array with the language code (ja for japanese, ko for korean, zh for chinese, etc.)
-	NSArray *nonRomanScript = [[NSArray alloc] initWithObjects:@"ja", @"ko", @"zh-Hant", @"zh-Hans", nil];
-	if ([nonRomanScript containsObject:currentInputLanguage])
+    @autoreleasepool
     {
-        return false;
+        // How to add support for new languages with the input window:
+        // Simply append this array with the language code (ja for japanese, ko for korean, zh for chinese, etc.)
+        NSArray *nonRomanScript = [[NSArray alloc] initWithObjects:@"ja", @"ko", @"zh-Hant", @"zh-Hans", nil];
+        if ([nonRomanScript containsObject:currentInputLanguage])
+        {
+            return false;
+        }
+        
+        return true;
     }
-    
-    return true;
 }
 
 #if defined(LL_BUGSPLAT)
@@ -348,11 +352,14 @@ struct AttachmentInfo
 
 - (void)sendEvent:(NSEvent *)event
 {
-    [super sendEvent:event];
-    if ([event type] == NSKeyUp && ([event modifierFlags] & NSCommandKeyMask))
+    if ([event type] == NSEventTypeKeyUp && ([event modifierFlags] & NSEventModifierFlagCommand))
     {   
         [[self keyWindow] sendEvent:event];
     }
+    else
+    {
+        [super sendEvent:event];
+    }
 }
 
 @end
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
index aea71a99b75ae14e47871ab43f3a8776a7752c7e..8b6e5ab4b24c0f6c5e845fb0df68d04e8177fa29 100644
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -286,10 +286,6 @@ extern BOOL gRandomizeFramerate;
 extern BOOL gPeriodicSlowFrame;
 extern BOOL gDebugGL;
 
-#if LL_DARWIN
-extern BOOL gHiDPISupport;
-#endif
-
 ////////////////////////////////////////////////////////////
 // All from the last globals push...
 
@@ -612,10 +608,6 @@ static void settings_to_globals()
 	gDebugWindowProc = gSavedSettings.getBOOL("DebugWindowProc");
 	gShowObjectUpdates = gSavedSettings.getBOOL("ShowObjectUpdates");
 	LLWorldMapView::sMapScale = gSavedSettings.getF32("MapScale");
-	
-#if LL_DARWIN
-	gHiDPISupport = gSavedSettings.getBOOL("RenderHiDPI");
-#endif
 }
 
 static void settings_modify()
@@ -1225,7 +1217,7 @@ bool LLAppViewer::init()
 		LLSD item(LeapCommand);
 		LeapCommand.append(item);
 	}
-	for (const std::string& leap : llsd::inArray(LeapCommand))
+	for (const LLSD& leap : llsd::inArray(LeapCommand))
 	{
 		LL_INFOS("InitInfo") << "processing --leap \"" << leap << '"' << LL_ENDL;
 		// We don't have any better description of this plugin than the
@@ -1234,7 +1226,7 @@ bool LLAppViewer::init()
 		// Suppress LLLeap::Error exception: trust LLLeap's own logging. We
 		// don't consider any one --leap command mission-critical, so if one
 		// fails, log it, shrug and carry on.
-		LLLeap::create("", leap, false); // exception=false
+		LLLeap::create("", leap.asString(), false); // exception=false
 	}
 
 	if (gSavedSettings.getBOOL("QAMode") && gSavedSettings.getS32("QAModeEventHostPort") > 0)
@@ -3036,17 +3028,6 @@ bool LLAppViewer::initWindow()
 
 	LLNotificationsUI::LLNotificationManager::getInstance();
 
-
-#ifdef LL_DARWIN
-	//Satisfy both MAINT-3135 (OSX 10.6 and earlier) MAINT-3288 (OSX 10.7 and later)
-	LLOSInfo& os_info = LLOSInfo::instance();
-	if (os_info.mMajorVer == 10 && os_info.mMinorVer < 7)
-	{
-		if ( os_info.mMinorVer == 6 && os_info.mBuild < 8 )
-			gViewerWindow->getWindow()->setOldResize(true);
-	}
-#endif
-
 	if (gSavedSettings.getBOOL("WindowMaximized"))
 	{
 		gViewerWindow->getWindow()->maximize();
@@ -3234,7 +3215,7 @@ LLSD LLAppViewer::getViewerInfo() const
     info["VFS_TIME"] = LLTrans::getString("AboutTime", substitution);
 
 #if LL_DARWIN
-    info["HIDPI"] = gHiDPISupport;
+    info["HIDPI"] = TRUE;
 #endif
 
 	// Libraries
@@ -3386,9 +3367,7 @@ std::string LLAppViewer::getViewerInfoString(bool default_string) const
 	}
 	support << "\n" << LLTrans::getString("AboutOGL", args, default_string);
 	support << "\n\n" << LLTrans::getString("AboutSettings", args, default_string);
-#if LL_DARWIN
-	support << "\n" << LLTrans::getString("AboutOSXHiDPI", args, default_string);
-#endif
+
 	support << "\n\n" << LLTrans::getString("AboutLibs", args, default_string);
 	if (info.has("COMPILER"))
 	{
diff --git a/indra/newview/llappviewermacosx-objc.mm b/indra/newview/llappviewermacosx-objc.mm
index 17301847e8bc08ff5e76d11f3db97fe8af20cd60..1d9e8feab5629e868aca300638e83b99fec6fa66 100644
--- a/indra/newview/llappviewermacosx-objc.mm
+++ b/indra/newview/llappviewermacosx-objc.mm
@@ -35,39 +35,35 @@
 
 void launchApplication(const std::string* app_name, const std::vector<std::string>* args)
 {
-
-    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-    
-	if (app_name->empty()) return;
-
-	NSMutableString* app_name_ns = [NSMutableString stringWithString:[[NSBundle mainBundle] resourcePath]];	//Path to resource dir
-	[app_name_ns appendFormat:@"/%@", [NSString stringWithCString:app_name->c_str() 
-								encoding:[NSString defaultCStringEncoding]]];
-
-	NSMutableArray *args_ns = nil;
-	args_ns = [[NSMutableArray alloc] init];
-
-	for (int i=0; i < args->size(); ++i)
-	{
-        NSLog(@"Adding string %s", (*args)[i].c_str());
-		[args_ns addObject:
-			[NSString stringWithCString:(*args)[i].c_str()
-						encoding:[NSString defaultCStringEncoding]]];
-	}
-
-    NSTask *task = [[NSTask alloc] init];
-    NSBundle *bundle = [NSBundle bundleWithPath:[[NSWorkspace sharedWorkspace] fullPathForApplication:app_name_ns]];
-    [task setLaunchPath:[bundle executablePath]];
-    [task setArguments:args_ns];
-    [task launch];
-    
-//	NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
-//	NSURL *url = [NSURL fileURLWithPath:[workspace fullPathForApplication:app_name_ns]];
-//
-//	NSError *error = nil;
-//	[workspace launchApplicationAtURL:url options:0 configuration:[NSDictionary dictionaryWithObject:args_ns forKey:NSWorkspaceLaunchConfigurationArguments] error:&error];
-	//TODO Handle error
-    
-    [pool release];
-	return;
+    @autoreleasepool
+    {
+        if (app_name->empty()) return;
+        
+        NSMutableString* app_name_ns = [NSMutableString stringWithString:[[NSBundle mainBundle] resourcePath]];    //Path to resource dir
+        [app_name_ns appendFormat:@"/%@", [NSString stringWithCString:app_name->c_str()
+                                                             encoding:[NSString defaultCStringEncoding]]];
+        
+        NSMutableArray *args_ns = [[[NSMutableArray alloc] init] autorelease];
+        
+        for (int i=0; i < args->size(); ++i)
+        {
+            NSLog(@"Adding string %s", (*args)[i].c_str());
+            [args_ns addObject:
+             [NSString stringWithCString:(*args)[i].c_str()
+                                encoding:[NSString defaultCStringEncoding]]];
+        }
+        
+        NSTask *task = [[[NSTask alloc] init] autorelease];
+        NSBundle *bundle = [NSBundle bundleWithPath:[[NSWorkspace sharedWorkspace] fullPathForApplication:app_name_ns]];
+        [task setLaunchPath:[bundle executablePath]];
+        [task setArguments:args_ns];
+        [task launch];
+        
+        //    NSWorkspace *workspace = [NSWorkspace sharedWorkspace];
+        //    NSURL *url = [NSURL fileURLWithPath:[workspace fullPathForApplication:app_name_ns]];
+        //
+        //    NSError *error = nil;
+        //    [workspace launchApplicationAtURL:url options:0 configuration:[NSDictionary dictionaryWithObject:args_ns forKey:NSWorkspaceLaunchConfigurationArguments] error:&error];
+        //TODO Handle error
+    }
 }
diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp
index b1a4385a913667c9efb3c7f7ff5849e24452666f..1fbc6b3a0dec1836714bca469c2d8c0c66324542 100644
--- a/indra/newview/llappviewermacosx.cpp
+++ b/indra/newview/llappviewermacosx.cpp
@@ -30,8 +30,6 @@
 	#error "Use only with Mac OS X"
 #endif
 
-#define LL_CARBON_CRASH_HANDLER 1
-
 #include "llwindowmacosx.h"
 #include "llappviewermacosx-objc.h"
 
@@ -49,9 +47,6 @@
 #include "llerrorcontrol.h"
 #include "llvoavatarself.h"         // for gAgentAvatarp->getFullname()
 #include <ApplicationServices/ApplicationServices.h>
-#ifdef LL_CARBON_CRASH_HANDLER
-#include <Carbon/Carbon.h>
-#endif
 #include <vector>
 #include <exception>
 #include <fstream>
diff --git a/indra/newview/llattachmentsmgr.cpp b/indra/newview/llattachmentsmgr.cpp
index 0d51d581dbbb507b906e4acad94316ad46295116..1005ca95295451ae9a5eae718d517762c495ae85 100644
--- a/indra/newview/llattachmentsmgr.cpp
+++ b/indra/newview/llattachmentsmgr.cpp
@@ -43,7 +43,6 @@
 const F32 COF_LINK_BATCH_TIME = 5.0F;
 const F32 MAX_ATTACHMENT_REQUEST_LIFETIME = 30.0F;
 const F32 MIN_RETRY_REQUEST_TIME = 5.0F;
-const F32 MAX_BAD_COF_TIME = 30.0F;
 
 // [SL:KB] - Patch: Appearance-SyncAttach | Checked: Catznip-3.7
 class LLRegisterAttachmentCallback : public LLRequestServerAppearanceUpdateOnDestroy
diff --git a/indra/newview/llfilepicker.cpp b/indra/newview/llfilepicker.cpp
index 8be6f953f0542515e525a41c916496c0dbf797b8..e6304a6076acf0e3eec159f34858a62ae7e57262 100644
--- a/indra/newview/llfilepicker.cpp
+++ b/indra/newview/llfilepicker.cpp
@@ -608,59 +608,59 @@ std::vector<std::string>* LLFilePicker::navOpenFilterProc(ELoadFilter filter) //
     switch(filter)
     {
         case FFLOAD_ALL:
-            allowedv->push_back("wav");
-            allowedv->push_back("bvh");
-            allowedv->push_back("anim");
-            allowedv->push_back("dae");
-            allowedv->push_back("raw");
-            allowedv->push_back("lsl");
-            allowedv->push_back("dic");
-            allowedv->push_back("xcu");
-            allowedv->push_back("gif");
+            allowedv->emplace_back("wav");
+            allowedv->emplace_back("bvh");
+            allowedv->emplace_back("anim");
+            allowedv->emplace_back("dae");
+            allowedv->emplace_back("raw");
+            allowedv->emplace_back("lsl");
+            allowedv->emplace_back("dic");
+            allowedv->emplace_back("xcu");
+            allowedv->emplace_back("gif");
         case FFLOAD_IMAGE:
-            allowedv->push_back("jpg");
-            allowedv->push_back("jpeg");
-            allowedv->push_back("bmp");
-            allowedv->push_back("tga");
-            allowedv->push_back("bmpf");
-            allowedv->push_back("tpic");
-            allowedv->push_back("png");
-			allowedv->push_back("webp");
+            allowedv->emplace_back("jpg");
+            allowedv->emplace_back("jpeg");
+            allowedv->emplace_back("bmp");
+            allowedv->emplace_back("tga");
+            allowedv->emplace_back("bmpf");
+            allowedv->emplace_back("tpic");
+            allowedv->emplace_back("png");
+			allowedv->emplace_back("webp");
             break;
         case FFLOAD_EXE:
-            allowedv->push_back("app");
-            allowedv->push_back("exe");
+            allowedv->emplace_back("app");
+            allowedv->emplace_back("exe");
             break;
         case FFLOAD_WAV:
-            allowedv->push_back("wav");
+            allowedv->emplace_back("wav");
             break;
         case FFLOAD_ANIM:
-            allowedv->push_back("bvh");
-            allowedv->push_back("anim");
+            allowedv->emplace_back("bvh");
+            allowedv->emplace_back("anim");
             break;
         case FFLOAD_COLLADA:
-            allowedv->push_back("dae");
+            allowedv->emplace_back("dae");
             break;
 #ifdef _CORY_TESTING
         case FFLOAD_GEOMETRY:
-            allowedv->push_back("slg");
+            allowedv->emplace_back("slg");
             break;
 #endif
         case FFLOAD_XML:
-            allowedv->push_back("xml");
+            allowedv->emplace_back("xml");
             break;
         case FFLOAD_RAW:
-            allowedv->push_back("raw");
+            allowedv->emplace_back("raw");
             break;
         case FFLOAD_SCRIPT:
-            allowedv->push_back("lsl");
+            allowedv->emplace_back("lsl");
             break;
         case FFLOAD_DICTIONARY:
-            allowedv->push_back("dic");
-            allowedv->push_back("xcu");
+            allowedv->emplace_back("dic");
+            allowedv->emplace_back("xcu");
             break;
         case FFLOAD_ZIP:
-            allowedv.push_back("zip");
+            allowedv->emplace_back("zip");
             break;
         case FFLOAD_DIRECTORY:
             break;
@@ -681,14 +681,14 @@ bool	LLFilePicker::doNavChooseDialog(ELoadFilter filter)
     
 	gViewerWindow->getWindow()->beforeDialog();
     
-    std::vector<std::string> *allowed_types=navOpenFilterProc(filter);
+    std::unique_ptr<std::vector<std::string>> allowed_types;
+    allowed_types.reset(navOpenFilterProc(filter));
     
-    std::vector<std::string> *filev  = doLoadDialog(allowed_types, 
-                                                    mPickOptions);
+    std::unique_ptr<std::vector<std::string>> filev;
+    filev.reset(doLoadDialog(allowed_types.get(), mPickOptions));
 
 	gViewerWindow->getWindow()->afterDialog();
 
-
     if (filev && filev->size() > 0)
     {
         mFiles.insert(mFiles.end(), filev->begin(), filev->end());
@@ -702,93 +702,63 @@ bool	LLFilePicker::doNavSaveDialog(ESaveFilter filter, const std::string& filena
 {
 	
 	// Setup the type, creator, and extension
-    std::string		extension, type, creator;
+    std::string extension;
     
 	switch (filter)
 	{
 		case FFSAVE_WAV:
-			type = "WAVE";
-			creator = "TVOD";
 			extension = "wav";
 			break;
 		case FFSAVE_TGA:
-			type = "TPIC";
-			creator = "prvw";
 			extension = "tga";
 			break;
 		case FFSAVE_TGAPNGWEBP:
-			type = "PNG";
-			creator = "prvw";
 			extension = "png,tga,webp";
 			break;
 		case FFSAVE_BMP:
-			type = "BMPf";
-			creator = "prvw";
 			extension = "bmp";
 			break;
 		case FFSAVE_JPEG:
-			type = "JPEG";
-			creator = "prvw";
 			extension = "jpeg";
 			break;
 		case FFSAVE_PNG:
-			type = "PNG ";
-			creator = "prvw";
 			extension = "png";
 			break;
 		case FFSAVE_WEBP:
-			type = "WebP";
-			creator = "prvw";
 			extension = "webp";
 			break;
 		case FFSAVE_AVI:
-			type = "\?\?\?\?";
-			creator = "\?\?\?\?";
 			extension = "mov";
 			break;
 
 		case FFSAVE_ANIM:
-			type = "\?\?\?\?";
-			creator = "\?\?\?\?";
 			extension = "xaf";
 			break;
 
 #ifdef _CORY_TESTING
 		case FFSAVE_GEOMETRY:
-			type = "\?\?\?\?";
-			creator = "\?\?\?\?";
 			extension = "slg";
 			break;
 #endif	
 			
 		case FFSAVE_XML:
-			type = "\?\?\?\?";
-			creator = "\?\?\?\?";
 			extension = "xml";
 			break;
 			
 		case FFSAVE_RAW:
-			type = "\?\?\?\?";
-			creator = "\?\?\?\?";
 			extension = "raw";
 			break;
 
 		case FFSAVE_J2C:
-			type = "\?\?\?\?";
-			creator = "prvw";
 			extension = "j2c";
 			break;
 		
 		case FFSAVE_SCRIPT:
-			type = "LSL ";
-			creator = "\?\?\?\?";
 			extension = "lsl";
 			break;
 		
 		case FFSAVE_ALL:
 		default:
-			type = "\?\?\?\?";
-			creator = "\?\?\?\?";
 			extension = "";
 			break;
 	}
@@ -805,11 +775,9 @@ bool	LLFilePicker::doNavSaveDialog(ESaveFilter filter, const std::string& filena
 	gViewerWindow->getWindow()->beforeDialog();
 
 	// Run the dialog
-    std::string* filev = doSaveDialog(&namestring, 
-                 &type,
-                 &creator,
+    std::unique_ptr<std::string> filev(doSaveDialog(&namestring,
                  &extension,
-                 mPickOptions);
+                 mPickOptions));
 
 	gViewerWindow->getWindow()->afterDialog();
 
diff --git a/indra/newview/llfilepicker.h b/indra/newview/llfilepicker.h
index 632ca014d16cf879ac834b00aba2b1ad79d6d348..be66a448b9d4bc2ed26e63fdc58681b3d05dfc87 100644
--- a/indra/newview/llfilepicker.h
+++ b/indra/newview/llfilepicker.h
@@ -36,7 +36,6 @@
 #include "stdtypes.h"
 
 #if LL_DARWIN
-#include <Carbon/Carbon.h>
 
 // AssertMacros.h does bad things.
 #undef verify
@@ -55,19 +54,12 @@
 #endif
 
 #if LL_GTK
-#if LL_GNUC
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#endif
 extern "C" {
 // mostly for Linux, possible on others
 #include <gtk/gtk.h>
 #include <gdk/gdk.h>
 #include <gdk/gdkx.h>
 }
-#if LL_GNUC
-#pragma GCC diagnostic pop
-#endif // LL_GNUC
 #endif // LL_GTK
 
 class LLFilePicker
diff --git a/indra/newview/llfilepicker_mac.h b/indra/newview/llfilepicker_mac.h
index e0b7e2e8ce01105c6004824087d46ffc944523d8..18e7f5b8f0e020fb66ae0551e443ae142ba4f571 100644
--- a/indra/newview/llfilepicker_mac.h
+++ b/indra/newview/llfilepicker_mac.h
@@ -42,8 +42,6 @@
 std::vector<std::string>* doLoadDialog(const std::vector<std::string>* allowed_types, 
                  unsigned int flags);
 std::string* doSaveDialog(const std::string* file, 
-                  const std::string* type,
-                  const std::string* creator,
                   const std::string* extension,
                   unsigned int flags);
 enum {
diff --git a/indra/newview/llfilepicker_mac.mm b/indra/newview/llfilepicker_mac.mm
index 1438e4dc0a993c69d23bae424a2b0363a0452bb2..dd0d7386f44528bdf83a84dcb6d198c378e1854c 100644
--- a/indra/newview/llfilepicker_mac.mm
+++ b/indra/newview/llfilepicker_mac.mm
@@ -32,102 +32,104 @@
 std::vector<std::string>* doLoadDialog(const std::vector<std::string>* allowed_types, 
                  unsigned int flags)
 {
-    int i, result;
-    
-    //Aura TODO:  We could init a small window and release it at the end of this routine
-    //for a modeless interface.
-    
-    NSOpenPanel *panel = [NSOpenPanel openPanel];
-    //NSString *fileName = nil;
-    NSMutableArray *fileTypes = nil;
-    
-    
-    if ( allowed_types && !allowed_types->empty()) 
+    @autoreleasepool
     {
-        fileTypes = [[NSMutableArray alloc] init];
+        int i, result;
         
-        for (i=0;i<allowed_types->size();++i)
+        //Aura TODO:  We could init a small window and release it at the end of this routine
+        //for a modeless interface.
+        
+        NSOpenPanel *panel = [NSOpenPanel openPanel];
+        //NSString *fileName = nil;
+        NSMutableArray *fileTypes = nil;
+        
+        
+        if (allowed_types && !allowed_types->empty())
         {
-            [fileTypes addObject: 
-             [NSString stringWithCString:(*allowed_types)[i].c_str() 
-                                encoding:[NSString defaultCStringEncoding]]];
+            fileTypes = [[[NSMutableArray alloc] init] autorelease];
+            
+            for (i=0;i<allowed_types->size();++i)
+            {
+                [fileTypes addObject:
+                 [NSString stringWithCString:(*allowed_types)[i].c_str()
+                                    encoding:[NSString defaultCStringEncoding]]];
+            }
         }
-    }
+            
+        //[panel setMessage:@"Import one or more files or directories."];
+        [panel setAllowsMultipleSelection: ( (flags & F_MULTIPLE)?true:false ) ];
+        [panel setCanChooseDirectories: ( (flags & F_DIRECTORY)?true:false ) ];
+        [panel setCanCreateDirectories: true];
+        [panel setResolvesAliases: true];
+        [panel setCanChooseFiles: ( (flags & F_FILE)?true:false )];
+        [panel setTreatsFilePackagesAsDirectories: ( flags & F_NAV_SUPPORT ) ];
         
-    //[panel setMessage:@"Import one or more files or directories."];
-    [panel setAllowsMultipleSelection: ( (flags & F_MULTIPLE)?true:false ) ];
-    [panel setCanChooseDirectories: ( (flags & F_DIRECTORY)?true:false ) ];
-    [panel setCanCreateDirectories: true];
-    [panel setResolvesAliases: true];
-    [panel setCanChooseFiles: ( (flags & F_FILE)?true:false )];
-    [panel setTreatsFilePackagesAsDirectories: ( flags & F_NAV_SUPPORT ) ];
-    
-    std::vector<std::string>* outfiles = NULL; 
-    
-    if (fileTypes)
-    {
-        [panel setAllowedFileTypes:fileTypes];
-        result = [panel runModal];
-    }
-    else 
-    {
-        // I suggest it's better to open the last path and let this default to home dir as necessary
-        // for consistency with other OS X apps
-        //
-        //[panel setDirectoryURL: fileURLWithPath(NSHomeDirectory()) ];
-        result = [panel runModal];
-    }
-    
-    if (result == NSOKButton) 
-    {
-        NSArray *filesToOpen = [panel URLs];
-        int i, count = [filesToOpen count];
+        std::vector<std::string>* outfiles = NULL;
         
-        if (count > 0)
+        if (fileTypes)
         {
-            outfiles = new std::vector<std::string>;
+            [panel setAllowedFileTypes:fileTypes];
+            result = [panel runModal];
+        }
+        else
+        {
+            // I suggest it's better to open the last path and let this default to home dir as necessary
+            // for consistency with other OS X apps
+            //
+            //[panel setDirectoryURL: fileURLWithPath(NSHomeDirectory()) ];
+            result = [panel runModal];
         }
         
-        for (i=0; i<count; i++) {
-            NSString *aFile = [[filesToOpen objectAtIndex:i] path];
-            std::string *afilestr = new std::string([aFile UTF8String]);
-            outfiles->push_back(*afilestr);
+        if (result == NSModalResponseOK)
+        {
+            NSArray *filesToOpen = [panel URLs];
+            int i, count = [filesToOpen count];
+            
+            if (count > 0)
+            {
+                outfiles = new std::vector<std::string>;
+            }
+            
+            for (i=0; i<count; i++) {
+                NSString *aFile = [[filesToOpen objectAtIndex:i] path];
+                outfiles->emplace_back([aFile UTF8String]);
+            }
         }
-    }
-    return outfiles;
+        return outfiles;
+    };
 }
 
 
 std::string* doSaveDialog(const std::string* file, 
-                  const std::string* type,
-                  const std::string* creator,
                   const std::string* extension,
                   unsigned int flags)
 {
-    NSSavePanel *panel = [NSSavePanel savePanel]; 
-    
-    NSString *extensionns = [NSString stringWithCString:extension->c_str() encoding:[NSString defaultCStringEncoding]];
-    NSArray *fileType = [extensionns componentsSeparatedByString:@","];
-    
-    //[panel setMessage:@"Save Image File"]; 
-    [panel setTreatsFilePackagesAsDirectories: ( flags & F_NAV_SUPPORT ) ];
-    [panel setCanSelectHiddenExtension:true]; 
-    [panel setAllowedFileTypes:fileType];
-    NSString *fileName = [NSString stringWithCString:file->c_str() encoding:[NSString defaultCStringEncoding]];
-    
-    std::string *outfile = NULL;
-    NSURL* url = [NSURL fileURLWithPath:fileName];
-    [panel setNameFieldStringValue: fileName];
-    [panel setDirectoryURL: url];
-    if([panel runModal] == 
-       NSFileHandlingPanelOKButton) 
+    @autoreleasepool
     {
-        NSURL* url = [panel URL];
-        NSString* p = [url path];
-        outfile = new std::string( [p UTF8String] );
-        // write the file 
-    } 
-    return outfile;
+        NSSavePanel *panel = [NSSavePanel savePanel];
+        
+        NSString *extensionns = [NSString stringWithCString:extension->c_str() encoding:[NSString defaultCStringEncoding]];
+        NSArray *fileType = [extensionns componentsSeparatedByString:@","];
+        
+        //[panel setMessage:@"Save Image File"];
+        [panel setTreatsFilePackagesAsDirectories: ( flags & F_NAV_SUPPORT ) ];
+        [panel setCanSelectHiddenExtension:true];
+        [panel setAllowedFileTypes:fileType];
+        NSString *fileName = [NSString stringWithCString:file->c_str() encoding:[NSString defaultCStringEncoding]];
+        
+        std::string *outfile = NULL;
+        NSURL* url = [NSURL fileURLWithPath:fileName];
+        [panel setNameFieldStringValue: fileName];
+        [panel setDirectoryURL: url];
+        if([panel runModal] == NSModalResponseOK)
+        {
+            NSURL* url = [panel URL];
+            NSString* p = [url path];
+            outfile = new std::string( [p UTF8String] );
+            // write the file
+        }
+        return outfile;
+    }
 }
 
 #endif
diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp
index de32af8016b60eadea1c5a9fa27e3f9d5a5e008d..0cd41d509b27ffd5e9ac71851f1f2427b6556565 100644
--- a/indra/newview/llfloatergodtools.cpp
+++ b/indra/newview/llfloatergodtools.cpp
@@ -224,7 +224,6 @@ void LLFloaterGodTools::processRegionInfo(LLMessageSystem* msg)
 	S32 price_per_meter;
 	S32 redirect_grid_x;
 	S32 redirect_grid_y;
-	LLUUID cache_id;
 
 	LLHost host = msg->getSender();
 
diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp
index 57a05b42fcfaada163a224376627b2c7d65393d2..b7c1700526f03a01b50a9b613ea123b3d5ca98f3 100644
--- a/indra/newview/llfloaterinspect.cpp
+++ b/indra/newview/llfloaterinspect.cpp
@@ -279,7 +279,6 @@ LLUUID LLFloaterInspect::getSelectedUUID()
 
 void LLFloaterInspect::refresh()
 {
-	LLUUID creator_id;
 	std::string creator_name;
 	S32 pos = mObjectList->getScrollPos();
 	getChildView("button owner")->setEnabled(false);
diff --git a/indra/newview/llfloateroutfitphotopreview.cpp b/indra/newview/llfloateroutfitphotopreview.cpp
index 6c39db730c33c40b0f86a3d0a2661d6a9c24368f..ade258aef74ee07ffbc8a95c8cfe811ee40139f5 100644
--- a/indra/newview/llfloateroutfitphotopreview.cpp
+++ b/indra/newview/llfloateroutfitphotopreview.cpp
@@ -234,7 +234,6 @@ void LLFloaterOutfitPhotoPreview::updateImageID()
 	if(item)
 	{
 		mImageID = item->getAssetUUID();
-		LLPermissions perm(item->getPermissions());
 	}
 	else
 	{
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
index 20c78abe05a8b70de842d236cf3ebf4eda363a46..ac2fc67e7bff9344fac78663adcc09ba9da58a36 100644
--- a/indra/newview/llfloaterregioninfo.cpp
+++ b/indra/newview/llfloaterregioninfo.cpp
@@ -2463,7 +2463,6 @@ bool LLDispatchSetEstateExperience::operator()(
 	++it; // U32 estate_id = strtol((*it).c_str(), NULL, 10);
 	++it; // U32 send_to_agent_only = strtoul((*(++it)).c_str(), NULL, 10);
 
-	LLUUID id;
 	S32 num_blocked = strtol((*(it++)).c_str(), NULL, 10);
 	S32 num_trusted = strtol((*(it++)).c_str(), NULL, 10);
 	S32 num_allowed = strtol((*(it++)).c_str(), NULL, 10);
diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp
index 6872b2f1f703032def28d8f4add6e30f2ef5569b..0396841521627d417547bff16b2bc9e75f09673f 100644
--- a/indra/newview/llfloateruipreview.cpp
+++ b/indra/newview/llfloateruipreview.cpp
@@ -72,7 +72,7 @@
 #include <map>
 
 #if LL_DARWIN
-#include <CoreFoundation/CFURL.h>
+#include <CoreFoundation/CoreFoundation.h>
 #endif
 
 // Static initialization
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index c3c801f45617c659a4f00b2bd215088524d71995..69a17556a13105c1c104bb1b8f436ba1c019af43 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -3110,7 +3110,7 @@ void LLInventoryModel::removeInventoryItem(LLUUID agent_id, LLMessageSystem* msg
 void LLInventoryModel::processRemoveInventoryItem(LLMessageSystem* msg, void**)
 {
 	LL_DEBUGS(LOG_INV) << "LLInventoryModel::processRemoveInventoryItem()" << LL_ENDL;
-	LLUUID agent_id, item_id;
+	LLUUID agent_id;
 	msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
 	if(agent_id != gAgent.getID())
 	{
@@ -3127,7 +3127,7 @@ void LLInventoryModel::processUpdateInventoryFolder(LLMessageSystem* msg,
 													void**)
 {
 	LL_DEBUGS(LOG_INV) << "LLInventoryModel::processUpdateInventoryFolder()" << LL_ENDL;
-	LLUUID agent_id, folder_id, parent_id;
+	LLUUID agent_id;
 	//char name[DB_INV_ITEM_NAME_BUF_SIZE];
 	msg->getUUIDFast(_PREHASH_FolderData, _PREHASH_AgentID, agent_id);
 	if(agent_id != gAgent.getID())
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
index 844b0053aef58d0ff227d9e26df4faa6872d21a5..1fb7cd80d40100f593cc1348e24870ab010055d7 100644
--- a/indra/newview/llmediactrl.cpp
+++ b/indra/newview/llmediactrl.cpp
@@ -1008,10 +1008,6 @@ void LLMediaCtrl::handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event)
 		case MEDIA_EVENT_NAVIGATE_COMPLETE:
 		{
 			LL_DEBUGS("Media") <<  "Media event:  MEDIA_EVENT_NAVIGATE_COMPLETE, result string is: " << self->getNavigateResultString() << LL_ENDL;
-			if(mHidingInitialLoad)
-			{
-				mHidingInitialLoad = false;
-			}
 		};
 		break;
 
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
index 2cb98b2fada292293450492510b41ff0b7721e5e..9eff0049e6455041fea7fb236ae7ad451b244f45 100644
--- a/indra/newview/llmediactrl.h
+++ b/indra/newview/llmediactrl.h
@@ -198,7 +198,6 @@ class LLMediaCtrl final :
 				mStretchToFill,
 				mMaintainAspectRatio,
 				mHideLoading,
-				mHidingInitialLoad,
 				mClearCache,
 				mHoverTextChanged,
 				mDecoupleTextureSize,
diff --git a/indra/newview/lloutfitobserver.cpp b/indra/newview/lloutfitobserver.cpp
index 5bb69367aac71fd63046a78a3d511c9f8af8f4e1..07bbb9e31e620dd5ba17e58be91374920802a2ee 100644
--- a/indra/newview/lloutfitobserver.cpp
+++ b/indra/newview/lloutfitobserver.cpp
@@ -32,7 +32,8 @@
 #include "llviewerinventory.h"
 
 LLOutfitObserver::LLOutfitObserver() :
-	mCOFLastVersion(LLViewerInventoryCategory::VERSION_UNKNOWN)
+	mCOFLastVersion(LLViewerInventoryCategory::VERSION_UNKNOWN),
+    mLastOutfitDirtiness(false)
 {
 	mItemNameHash.finalize();
 	gInventory.addObserver(this);
diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp
index 375daf60f88ec6f55f661e2a571d1fec0aa84caf..0884fdbc67037ac55ebe824c546e059210b083d0 100644
--- a/indra/newview/llpanelgroupgeneral.cpp
+++ b/indra/newview/llpanelgroupgeneral.cpp
@@ -459,8 +459,6 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
 
 		if (is_member)
 		{
-			LLUUID current_title_role;
-
 			mComboActiveTitle->clear();
 			mComboActiveTitle->removeall();
 			bool has_selected_title = false;
diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp
index 19458f51759c57bc9743d2aefe31d65af85d59a4..615c85586ffe88226d8ce5bcdb5a478d08fb9569 100644
--- a/indra/newview/llpanelobject.cpp
+++ b/indra/newview/llpanelobject.cpp
@@ -1077,9 +1077,6 @@ void LLPanelObject::getState( )
 	// sculpt texture
 	if (selected_item == MI_SCULPT)
 	{
-
-
-		LLUUID id;
 		LLSculptParams *sculpt_params = (LLSculptParams *)objectp->getParameterEntry(LLNetworkData::PARAMS_SCULPT);
 
 		
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index 71c3ea938efee3b1179b75eeda04c822aab69b07..1a327a3778acc0e802abf027dffe1f8704717a19 100644
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -5352,7 +5352,6 @@ void LLSelectMgr::processObjectProperties(LLMessageSystem* msg, void** user_data
 		LLUUID group_id;
 		LLUUID last_owner_id;
 		U64 creation_date;
-		LLUUID extra_id;
 		U32 base_mask, owner_mask, group_mask, everyone_mask, next_owner_mask;
 		LLSaleInfo sale_info;
 		LLCategory category;
@@ -5512,10 +5511,8 @@ void LLSelectMgr::processObjectPropertiesFamily(LLMessageSystem* msg, void** use
 	LLUUID id;
 
 	U32 request_flags;
-	LLUUID creator_id;
 	LLUUID owner_id;
 	LLUUID group_id;
-	LLUUID extra_id;
 	U32 base_mask, owner_mask, group_mask, everyone_mask, next_owner_mask;
 	LLSaleInfo sale_info;
 	LLCategory category;
diff --git a/indra/newview/llsettingsvo.h b/indra/newview/llsettingsvo.h
index e0f3153e27f73d0e1e656b63e87e58d0cee53c02..9a067d9d41ebcb64593ce2512a3d7896bc6d9065 100644
--- a/indra/newview/llsettingsvo.h
+++ b/indra/newview/llsettingsvo.h
@@ -43,7 +43,7 @@ class LLInventoryItem;
 class LLGLSLShader;
 
 //=========================================================================
-class LLSettingsVOBase final : public LLSettingsBase
+class LLSettingsVOBase : public LLSettingsBase
 {
 public:
     typedef std::function<void(LLUUID asset_id, LLSettingsBase::ptr_t settins, S32 status, LLExtStat extstat)>  asset_download_fn;
diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp
index 33517f3c3ba8dd13859e7fb5387812f751522d28..e1bd1892e17ff8ec63a294379537f9dc7d0c890b 100644
--- a/indra/newview/llspeakers.cpp
+++ b/indra/newview/llspeakers.cpp
@@ -458,8 +458,7 @@ void LLSpeakerMgr::update(BOOL resort_ok)
 
 	S32 recent_speaker_count = 0;
 	S32 sort_index = 0;
-	speaker_list_t::iterator sorted_speaker_it;
-	for(LLPointer<LLSpeaker> speakerp : mSpeakersSorted)
+	for(LLPointer<LLSpeaker>& speakerp : mSpeakersSorted)
 	{
 		// color code recent speakers who are not currently speaking
 		if (speakerp->mStatus == LLSpeaker::STATUS_HAS_SPOKEN)
diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h
index d922610d4016718e820ff0b43e17f534edf6b1d8..fc30d43d484867509781fd58a3ac1c2b41cbfdc0 100644
--- a/indra/newview/lltexturefetch.h
+++ b/indra/newview/lltexturefetch.h
@@ -64,7 +64,7 @@ class LLTextureFetch : public LLWorkerThread
 	class TFRequest;
 	
     // Threads:  Tmain
-	/*virtual*/ S32 update(F32 max_time_ms);
+	/*virtual*/ S32 update(F32 max_time_ms) override;
 	
 	// called in the main thread after the TextureCacheThread shuts down.
     // Threads:  Tmain
@@ -247,20 +247,20 @@ class LLTextureFetch : public LLWorkerThread
 	
 	// Overrides from the LLThread tree
 	// Locks:  Ct
-	bool runCondition();
+	bool runCondition() override;
 
 private:
     // Threads:  Tmain
 	void sendRequestListToSimulators();
 	
 	// Threads:  Ttf
-	/*virtual*/ void startThread(void);
+	/*virtual*/ void startThread(void) override;
 	
 	// Threads:  Ttf
-	/*virtual*/ void endThread(void);
+	/*virtual*/ void endThread(void) override;
 	
 	// Threads:  Ttf
-	/*virtual*/ void threadedUpdate(void);
+	/*virtual*/ void threadedUpdate(void) override;
 
 	// Threads:  Ttf
 	void commonUpdate();
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
index 45210a916816d08a7d7fbe3355704809ebc9d975..f65ae6d63785866230bcbf6cf774183a8423d844 100644
--- a/indra/newview/lltooldraganddrop.cpp
+++ b/indra/newview/lltooldraganddrop.cpp
@@ -2176,7 +2176,6 @@ EAcceptance LLToolDragAndDrop::dad3dActivateGesture(
 
 		if( drop )
 		{
-			LLUUID item_id;
 			if(mSource == SOURCE_LIBRARY)
 			{
 				// create item based on that one, and put it on if that
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
index 60f5c87f497b3b392bfbed9e6f8e3c19b7d84759..8429198777bb8da7f851697f8e8045b5dcf41710 100644
--- a/indra/newview/lltoolpie.cpp
+++ b/indra/newview/lltoolpie.cpp
@@ -1880,7 +1880,6 @@ static void handle_click_action_open_media(LLPointer<LLViewerObject> objectp)
 	}
 
 	std::string media_url = std::string ( parcel->getMediaURL () );
-	std::string media_type = std::string ( parcel->getMediaType() );
 	LLStringUtil::trim(media_url);
 
 	LLWeb::loadURL(media_url);
@@ -1897,10 +1896,6 @@ static ECursorType cursor_from_parcel_media(U8 click_action)
 	LLParcel* parcel = LLViewerParcelMgr::getInstance()->getAgentParcel();
 	if (!parcel) return open_cursor;
 
-	std::string media_url = std::string ( parcel->getMediaURL () );
-	std::string media_type = std::string ( parcel->getMediaType() );
-	LLStringUtil::trim(media_url);
-
 	open_cursor = UI_CURSOR_TOOLMEDIAOPEN;
 
 	LLViewerMediaImpl::EMediaStatus status = LLViewerParcelMedia::getInstance()->getStatus();
diff --git a/indra/newview/llurl.cpp b/indra/newview/llurl.cpp
index 64fc0815150d1aa79f947d565d1422986fe95a6b..587beeb1374a63ac2bc3c91c8a2a51dc77e21080 100644
--- a/indra/newview/llurl.cpp
+++ b/indra/newview/llurl.cpp
@@ -28,7 +28,7 @@
 #include "llurl.h"
 #include "llerror.h"
 
-#if LL_GNUC
+#if LL_GNUC && GCC_VERSION >= 80000
 #pragma GCC diagnostic ignored "-Wstringop-truncation"
 #endif
 
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
index c971650ef4ef4f079c2e9f5825beaaaa872fc6e1..8c56da204c1533a4ea39cced6be2b680db4721a0 100644
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -1580,7 +1580,7 @@ void render_ui_2d()
 				last_rect.mTop = LLRect::tCoordType(last_rect.mTop / LLUI::getScaleFactor().mV[1]);
 				last_rect.mBottom = LLRect::tCoordType(last_rect.mBottom / LLUI::getScaleFactor().mV[1]);
 
-				LLRect clip_rect(last_rect);
+				//LLRect clip_rect(last_rect);
 				
 				glClear(GL_COLOR_BUFFER_BIT);
 
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
index 020a3c9494987409632357f173e2ecf9bf081660..4bbcc9674178bb6c3fc117752c8bb3e957d0e438 100644
--- a/indra/newview/llviewerinventory.cpp
+++ b/indra/newview/llviewerinventory.cpp
@@ -81,7 +81,6 @@ void no_op_llsd_func(const LLSD&) {}
 void no_op() {}
 
 static const char * const LOG_INV("Inventory");
-static const char * const LOG_LOCAL("InventoryLocalize");
 static const char * const LOG_NOTECARD("copy_inventory_from_notecard");
 
 static const std::string INV_OWNER_ID("owner_id");
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 682edfd296bfc058a8138545ca47b6b9f6faf83c..2f53a32c60793e9d01911b7244af615627147661 100644
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -2406,7 +2406,6 @@ bool callingcard_offer_callback(const LLSD& notification, const LLSD& response)
 {
 	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
 	LLUUID fid;
-	LLUUID from_id;
 	LLMessageSystem* msg = gMessageSystem;
 	switch(option)
 	{
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 0ce577f6bc36ce3002ca8a7d516a76cfe4201ae8..c3d8fc3002c21ab4902ce5671eff30af2c5b7766 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1091,15 +1091,6 @@ BOOL LLViewerWindow::handleAnyMouseClick(LLWindow *window,  LLCoordGL pos, MASK
 
 BOOL LLViewerWindow::handleMouseDown(LLWindow *window,  LLCoordGL pos, MASK mask)
 {
-    mAllowMouseDragging = FALSE;
-    if (!mMouseDownTimer.getStarted())
-    {
-        mMouseDownTimer.start();
-    }
-    else
-    {
-        mMouseDownTimer.reset();
-    }    
     BOOL down = TRUE;
 	return handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_LEFT,down);
 }
@@ -1119,10 +1110,6 @@ BOOL LLViewerWindow::handleDoubleClick(LLWindow *window,  LLCoordGL pos, MASK ma
 
 BOOL LLViewerWindow::handleMouseUp(LLWindow *window,  LLCoordGL pos, MASK mask)
 {
-    if (mMouseDownTimer.getStarted())
-    {
-        mMouseDownTimer.stop();
-    }
     BOOL down = FALSE;
 	return handleAnyMouseClick(window,pos,mask,LLMouseHandler::CLICK_LEFT,down);
 }
@@ -1387,22 +1374,6 @@ void LLViewerWindow::handleMouseMove(LLWindow *window,  LLCoordGL pos, MASK mask
 	}
 }
 
-void LLViewerWindow::handleMouseDragged(LLWindow *window,  LLCoordGL pos, MASK mask)
-{
-    if (mMouseDownTimer.getStarted())
-    {
-        if (mMouseDownTimer.getElapsedTimeF32() > 0.1)
-        {
-            mAllowMouseDragging = TRUE;
-            mMouseDownTimer.stop();
-        }
-    }
-    if(mAllowMouseDragging || !LLToolCamera::getInstance()->hasMouseCapture())
-    {
-        handleMouseMove(window, pos, mask);
-    }
-}
-
 void LLViewerWindow::handleMouseLeave(LLWindow *window)
 {
 	// Note: we won't get this if we have captured the mouse.
@@ -1701,13 +1672,6 @@ BOOL LLViewerWindow::handleDPIChanged(LLWindow *window, F32 ui_scale_factor, S32
     }
 }
 
-BOOL LLViewerWindow::handleWindowDidChangeScreen(LLWindow *window)
-{
-	LLCoordScreen window_rect;
-	mWindow->getSize(&window_rect);
-	reshape(window_rect.mX, window_rect.mY);
-	return TRUE;
-}
 
 void LLViewerWindow::handlePingWatchdog(LLWindow *window, const char * msg)
 {
@@ -1761,8 +1725,6 @@ LLViewerWindow::LLViewerWindow(const Params& p)
 	mMiddleMouseDown(FALSE),
 	mRightMouseDown(FALSE),
 	mMouseInWindow( FALSE ),
-    mAllowMouseDragging(TRUE),
-    mMouseDownTimer(),
 	mLastMask( MASK_NONE ),
 	mToolStored( NULL ),
 	mHideCursorPermanent( FALSE ),
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index ab65b2a161854fd0f3498cbd9e6c763573ea3838..6e8614e51680d74c6f640f8e69bddf5849632671 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -198,7 +198,6 @@ class LLViewerWindow final : public LLWindowCallbacks
 	BOOL handleOtherMouse(LLWindow *window, LLCoordGL pos, MASK mask, S32 button, bool down);
 	/*virtual*/ LLWindowCallbacks::DragNDropResult handleDragNDrop(LLWindow *window, LLCoordGL pos, MASK mask, LLWindowCallbacks::DragNDropAction action, std::string data);
 				void handleMouseMove(LLWindow *window,  LLCoordGL pos, MASK mask);
-                void handleMouseDragged(LLWindow *window,  LLCoordGL pos, MASK mask);
 	/*virtual*/ void handleMouseLeave(LLWindow *window);
 	/*virtual*/ void handleResize(LLWindow *window,  S32 x,  S32 y);
 	/*virtual*/ void handleFocus(LLWindow *window);
@@ -216,7 +215,6 @@ class LLViewerWindow final : public LLWindowCallbacks
 	/*virtual*/ BOOL handleTimerEvent(LLWindow *window);
 	/*virtual*/ BOOL handleDeviceChange(LLWindow *window);
 	/*virtual*/ BOOL handleDPIChanged(LLWindow *window, F32 ui_scale_factor, S32 window_width, S32 window_height);
-	/*virtual*/ BOOL handleWindowDidChangeScreen(LLWindow *window);
 
 	/*virtual*/ void handlePingWatchdog(LLWindow *window, const char * msg);
 	/*virtual*/ void handlePauseWatchdog(LLWindow *window);
@@ -478,8 +476,6 @@ class LLViewerWindow final : public LLWindowCallbacks
 
 	BOOL			mMouseInWindow;				// True if the mouse is over our window or if we have captured the mouse.
 	BOOL			mFocusCycleMode;
-    BOOL            mAllowMouseDragging;
-    LLFrameTimer    mMouseDownTimer;
 	typedef std::set<LLHandle<LLView> > view_handle_set_t;
 	view_handle_set_t mMouseHoverViews;
 
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 1c0c12e668b4665afac7326962fd784186e1f524..313461e7946a9e78d8f783c6dd940d283ff6447c 100644
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -1,4 +1,4 @@
-/** 
+/** 
  * @File llvoavatar.cpp
  * @brief Implementation of LLVOAvatar class which is a derivation of LLViewerObject
  *
@@ -1969,7 +1969,6 @@ void LLVOAvatar::resetVisualParams()
 {
 	// Skeletal params
 	{
-		LLAvatarXmlInfo::skeletal_distortion_info_list_t::iterator iter;
 		for (LLViewerVisualParamInfo* vparam : sAvatarXmlInfo->mSkeletalDistortionInfoList)
 		{
 			LLPolySkeletalDistortionInfo *info = static_cast<LLPolySkeletalDistortionInfo*>(vparam);
@@ -9171,9 +9170,11 @@ void LLVOAvatar::applyParsedAppearanceMessage(LLAppearanceMessageContents& conte
 				}
 			}
 		}
+        
+#ifdef SHOW_DEBUG
 		const S32 expected_tweakable_count = getVisualParamCountInGroup(VISUAL_PARAM_GROUP_TWEAKABLE) +
 											 getVisualParamCountInGroup(VISUAL_PARAM_GROUP_TRANSMIT_NOT_TWEAKABLE); // don't worry about VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT
-#if SHOW_DEBUG
+
 		if (num_params != expected_tweakable_count)
 		{
 			LL_DEBUGS("Avatar") << "Number of params in AvatarAppearance msg (" << num_params << ") does not match number of tweakable params in avatar xml file (" << expected_tweakable_count << ").  Processing what we can.  object: " << getID() << LL_ENDL;
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
index 2b2e40002dbe3ab4c27a5a90e022770b9658573c..22037f6e7b0d4d28c9d304381ca446a27032189e 100644
--- a/indra/newview/llvoicevivox.cpp
+++ b/indra/newview/llvoicevivox.cpp
@@ -36,8 +36,8 @@
 #include "llbufferstream.h"
 #include "llfile.h"
 #include "llmenugl.h"
-#ifdef LL_USESYSTEMLIBS
-# include "expat.h"
+#if LL_DARWIN || defined(LL_USESYSTEMLIBS)
+# include <expat.h>
 #else
 # include "expat/expat.h"
 #endif
diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h
index 09fc3c5171d0ca5699f0a60050620c53f680c25d..8d83c3d3fdd3a10ee3faec504a28fffa90c92d02 100644
--- a/indra/newview/llvoicevivox.h
+++ b/indra/newview/llvoicevivox.h
@@ -41,8 +41,8 @@ class LLVivoxProtocolParser;
 #include "llcoros.h"
 #include <queue>
 
-#ifdef LL_USESYSTEMLIBS
-# include "expat.h"
+#if LL_DARWIN || defined(LL_USESYSTEMLIBS)
+# include <expat.h>
 #else
 # include "expat/expat.h"
 #endif
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
index 8f20d1b12bbdedd2ba2b6a9d9addb36adfc85777..be718cdfcf3643a2476cd1fefac76dd21dee7c39 100644
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -6291,7 +6291,7 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace
 	U32 geometryBytes = 0;
 	U32 buffer_usage = group->mBufferUsage;
 	
-#if LL_DARWIN
+#if 0
 	// HACK from Leslie:
 	// Disable VBO usage for alpha on Mac OS X because it kills the framerate
 	// due to implicit calls to glTexSubImage that are beyond our control.
diff --git a/indra/newview/llwatchdog.cpp b/indra/newview/llwatchdog.cpp
index 6a67eaedc3076ca299d2c5f8d80c298a65b3bde9..9931cbf66ca76221448301135f793ad4df1cd9aa 100644
--- a/indra/newview/llwatchdog.cpp
+++ b/indra/newview/llwatchdog.cpp
@@ -242,8 +242,8 @@ void LLWatchdog::run()
 	{
 		SuspectsRegistry::iterator result = 
 			std::find_if(mSuspects.begin(), 
-				mSuspects.end(), 
-				std::not1(std::mem_fn(&LLWatchdogEntry::isAlive))
+                mSuspects.end(),
+                [](LLWatchdogEntry* entry){ return !entry->isAlive(); }
 				);
 		if(result != mSuspects.end())
 		{
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 7d3668389a8c24f0ef1830dd9e668f57c12c1b42..07ff7929bd0c76a040e36cd4496f96475c7857da 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -1408,11 +1408,6 @@ void LLPipeline::createLUTBuffers()
 			}
 			
 			U32 pix_format = GL_R16F;
-#if LL_DARWIN
-			// Need to work around limited precision with 10.6.8 and older drivers
-			//
-			pix_format = GL_R32F;
-#endif
 			LLImageGL::generateTextures(1, &mLightFunc);
 			gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mLightFunc);
 			LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, pix_format, lightResX, lightResY, GL_RED, GL_FLOAT, ls, false);
diff --git a/indra/newview/rlvmodifiers.h b/indra/newview/rlvmodifiers.h
index b26c1db0ebdc8aa240c4819f3d36640f24d41e18..c690fb328b067b5a1c877bcdf223424521f1c7a7 100644
--- a/indra/newview/rlvmodifiers.h
+++ b/indra/newview/rlvmodifiers.h
@@ -92,7 +92,7 @@ struct RlvBehaviourModifierTween
 
 class RlvBehaviourModifierAnimator final : public LLSingleton<RlvBehaviourModifierAnimator>
 {
-	LLSINGLETON_EMPTY_CTOR(RlvBehaviourModifierAnimator);
+    LLSINGLETON_EMPTY_CTOR_C11(RlvBehaviourModifierAnimator);
 public:
 	~RlvBehaviourModifierAnimator() override;
 
diff --git a/indra/newview/skins/default/xui/da/language_settings.xml b/indra/newview/skins/default/xui/da/language_settings.xml
index 0e3cbfd2d23c83dd749632d68ddcc51ac2448003..5c22b84bb2ac473f76553fc507341bf0cae628bd 100644
--- a/indra/newview/skins/default/xui/da/language_settings.xml
+++ b/indra/newview/skins/default/xui/da/language_settings.xml
@@ -5,7 +5,8 @@
 	<!-- Locale Information -->
 	<string name="MicrosoftLocale">danish</string>
 	<string name="MacLocale">da_DK.UTF-8</string>
-	<string name="DarwinLocale">da_DK.UTF-8</string>
+	<string name="macOSLocale">da_DK.UTF-8</string>
+    <string name="DarwinLocale">da_DK.UTF-8</string>
 	<string name="LinuxLocale">da_DK.UTF-8</string>
 	
 	<!-- 
diff --git a/indra/newview/skins/default/xui/de/language_settings.xml b/indra/newview/skins/default/xui/de/language_settings.xml
index f9346eef7dae0d132ab19f1343d7af9e388c3c65..da3c3f92aafa888f16465b378078b1aba8685cae 100644
--- a/indra/newview/skins/default/xui/de/language_settings.xml
+++ b/indra/newview/skins/default/xui/de/language_settings.xml
@@ -5,6 +5,7 @@
 	<!-- Locale Information -->
 	<string name="MicrosoftLocale">german</string>
 	<string name="MacLocale">de_DE.UTF-8</string>
+    <string name="macOSLocale">de_DE.UTF-8</string>
 	<string name="DarwinLocale">de_DE.UTF-8</string>
 	<string name="LinuxLocale">de_DE.UTF-8</string>
 	
diff --git a/indra/newview/skins/default/xui/en/language_settings.xml b/indra/newview/skins/default/xui/en/language_settings.xml
index d418fc38e3ace08ffb601f44d6ed96c94caafc3a..cf3c5ccd45c861e7803b8c4e11de0b8a275055d0 100644
--- a/indra/newview/skins/default/xui/en/language_settings.xml
+++ b/indra/newview/skins/default/xui/en/language_settings.xml
@@ -5,6 +5,7 @@
 	<!-- Locale Information -->
 	<string name="MicrosoftLocale">english</string>
 	<string name="MacLocale">C</string>
+    <string name="macOSLocale">C</string>
 	<string name="DarwinLocale">C</string>
 	<string name="LinuxLocale">C</string>
   
diff --git a/indra/newview/skins/default/xui/es/language_settings.xml b/indra/newview/skins/default/xui/es/language_settings.xml
index 997293a741cd37ce9cd63ed5a11c060b35e3ddd3..1d28736d30f6a4c33c0196f2caf9df09b77a9429 100644
--- a/indra/newview/skins/default/xui/es/language_settings.xml
+++ b/indra/newview/skins/default/xui/es/language_settings.xml
@@ -5,6 +5,7 @@
 	<!-- Locale Information -->
 	<string name="MicrosoftLocale">spanish</string>
 	<string name="MacLocale">es_ES.UTF-8</string>
+    <string name="macOSLocale">es_ES.UTF-8</string>
 	<string name="DarwinLocale">es_ES.UTF-8</string>
 	<string name="LinuxLocale">es_ES.UTF-8</string>
 	
diff --git a/indra/newview/skins/default/xui/fr/language_settings.xml b/indra/newview/skins/default/xui/fr/language_settings.xml
index fdac9d65a75b42996d0a86d6262e34eff55d2cce..88ebb132704f3028c43cd1f48b5679f5afce84e7 100644
--- a/indra/newview/skins/default/xui/fr/language_settings.xml
+++ b/indra/newview/skins/default/xui/fr/language_settings.xml
@@ -5,7 +5,8 @@
 	<!-- Locale Information -->
 	<string name="MicrosoftLocale">french</string>
 	<string name="MacLocale">fr_FR.UTF-8</string>
-	<string name="DarwinLocale">fr_FR.UTF-8</string>
+	<string name="macOSLocale">fr_FR.UTF-8</string>
+    <string name="DarwinLocale">fr_FR.UTF-8</string>
 	<string name="LinuxLocale">fr_FR.UTF-8</string>
 	
 	<!-- 
diff --git a/indra/newview/skins/default/xui/it/language_settings.xml b/indra/newview/skins/default/xui/it/language_settings.xml
index 5f448fa82803d4dc436dc93a2302e76050ac6cbe..c69479e06c90e6fb48da3f44c8145718dd066b6a 100644
--- a/indra/newview/skins/default/xui/it/language_settings.xml
+++ b/indra/newview/skins/default/xui/it/language_settings.xml
@@ -5,7 +5,8 @@
 	<!-- Locale Information -->
 	<string name="MicrosoftLocale">italian</string>
 	<string name="MacLocale">it_IT.UTF-8</string>
-	<string name="DarwinLocale">it_IT.UTF-8</string>
+	<string name="macOSLocale">it_IT.UTF-8</string>
+    <string name="DarwinLocale">it_IT.UTF-8</string>
 	<string name="LinuxLocale">it_IT.UTF-8</string>
 	
 	<!-- 
diff --git a/indra/newview/skins/default/xui/ja/language_settings.xml b/indra/newview/skins/default/xui/ja/language_settings.xml
index 91e8f4be7c73157dc58837043d4953ce52b78603..c4a6992ffafb445f9dc8ded6fe64cb48e6c9efc8 100644
--- a/indra/newview/skins/default/xui/ja/language_settings.xml
+++ b/indra/newview/skins/default/xui/ja/language_settings.xml
@@ -5,7 +5,8 @@
 	<!-- Locale Information -->
 	<string name="MicrosoftLocale">japanese</string>
 	<string name="MacLocale">ja_JP.UTF-8</string>
-	<string name="DarwinLocale">ja_JP.UTF-8</string>
+	<string name="macOSLocale">ja_JP.UTF-8</string>
+    <string name="DarwinLocale">ja_JP.UTF-8</string>
 	<string name="LinuxLocale">ja_JP.UTF-8</string>
 	
 	<!-- 
diff --git a/indra/newview/skins/default/xui/pl/language_settings.xml b/indra/newview/skins/default/xui/pl/language_settings.xml
index 0057ca530c8aa9cc54abd3b48be13867e16e630d..c08595eca69538b3085e4d3a2d7a6c75a5256050 100644
--- a/indra/newview/skins/default/xui/pl/language_settings.xml
+++ b/indra/newview/skins/default/xui/pl/language_settings.xml
@@ -2,7 +2,8 @@
 <strings>
 	<string name="MicrosoftLocale">polish</string>
 	<string name="MacLocale">pl_PL.UTF-8</string>
-	<string name="DarwinLocale">pl_PL.UTF-8</string>
+	<string name="macOSLocale">pl_PL.UTF-8</string>
+    <string name="DarwinLocale">pl_PL.UTF-8</string>
 	<string name="LinuxLocale">pl_PL.UTF-8</string>
 	<string name="TimeHour">hour,datetime,slt</string>
 	<string name="TimeMin">min,datetime,slt</string>
diff --git a/indra/newview/skins/default/xui/pt/language_settings.xml b/indra/newview/skins/default/xui/pt/language_settings.xml
index 8799475ace4048e9902965c4e2a1d149877d67e1..b15e3f666ff842d944539a77b562489b683cc812 100644
--- a/indra/newview/skins/default/xui/pt/language_settings.xml
+++ b/indra/newview/skins/default/xui/pt/language_settings.xml
@@ -5,6 +5,7 @@
 	<!-- Locale Information -->
 	<string name="MicrosoftLocale">portuguese</string>
 	<string name="MacLocale">pt_PT.UTF-8</string>
+    <string name="macOSLocale">pt_PT.UTF-8</string>
 	<string name="DarwinLocale">pt_PT.UTF-8</string>
 	<string name="LinuxLocale">pt_PT.UTF-8</string>
 	
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 0219d3390bf8b5052e0b864a39ab0cd03d89aec4..605eb2b26e14fd8f1aea106fdb9b8b0b8b45dce3 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -901,6 +901,7 @@ def construct(self):
         pkgdir = os.path.join(self.args['build'], os.pardir, 'packages')
         relpkgdir = os.path.join(pkgdir, "lib", "release")
         debpkgdir = os.path.join(pkgdir, "lib", "debug")
+        libdir = debpkgdir if self.args['configuration'].lower() == 'debug' else relpkgdir
 
         with self.prefix(src="", dst="Contents"):  # everything goes in Contents
             bugsplat_db = self.args.get('bugsplat')
@@ -918,13 +919,45 @@ def construct(self):
 
             # CEF framework goes inside Contents/Frameworks.
             # Remember where we parked this car.
-            with self.prefix(src="", dst="Frameworks"):
+            with self.prefix(src=libdir, dst="Frameworks"):
                 CEF_framework = "Chromium Embedded Framework.framework"
-                self.path2basename(relpkgdir, CEF_framework)
+                self.path2basename(libdir, CEF_framework)
                 CEF_framework = self.dst_path_of(CEF_framework)
 
+                for libfile in (
+                                'libapr-1.*.dylib',
+                                'libaprutil-1.*.dylib',
+                                'libjpeg.*.dylib',
+                                'libepoxy.*.dylib',
+                                'libGLOD.dylib',
+                                'libhunspell-*.dylib',
+                                'libndofdev.dylib',
+                                'libogg.*.dylib',
+                                'libopenjpeg.*.dylib',
+                                'liburiparser.*.dylib',
+                                'libvorbis.*.dylib',
+                                'libvorbisenc.*.dylib',
+                                'libvorbisfile.*.dylib',
+                                'libwebp.*.dylib',
+                                'libxmlrpc-epi.*.dylib',
+                                ):
+                    self.path(libfile)
+
                 if self.args.get('bugsplat'):
-                    self.path2basename(relpkgdir, "BugsplatMac.framework")
+                    self.path("BugsplatMac.framework")
+
+                if self.args['openal'] == 'ON' or self.args['openal'] == 'TRUE':
+                    for libfile in (
+                                    'libopenal.*.dylib',
+                                    'libalut.*.dylib',
+                                    ):
+                        self.path(libfile)
+
+                if self.args['fmodstudio'] == 'ON' or self.args['fmodstudio'] == 'TRUE':
+                    if self.args['configuration'].lower() == 'debug':
+                        self.path("libfmodL.dylib")
+                    else:
+                        self.path("libfmod.dylib")
 
             with self.prefix(dst="MacOS"):
                 executable = self.dst_path_of(self.channel())
@@ -984,16 +1017,11 @@ def construct(self):
                         self.path("*.png")
                         self.path("*.gif")
 
-                with self.prefix(src=relpkgdir, dst=""):
-                    self.path("libndofdev.dylib")
-                    self.path("libhunspell-*.dylib")   
-
                 with self.prefix(src_dst="cursors_mac"):
                     self.path("*.tif")
 
                 self.path("licenses-mac.txt", dst="licenses.txt")
                 self.path("featuretable_mac.txt")
-                self.path("SecondLife.nib")
 
                 with self.prefix(src=pkgdir,dst=""):
                     self.path("ca-bundle.crt")
@@ -1027,11 +1055,6 @@ def construct(self):
                 libfile_parent = self.get_dst_prefix()
                 dylibs=[]
                 for libfile in (
-                                "libapr-1.0.dylib",
-                                "libaprutil-1.0.dylib",
-                                "libexpat.1.dylib",
-                                "libexception_handler.dylib",
-                                "libGLOD.dylib",
                                 # libnghttp2.dylib is a symlink to
                                 # libnghttp2.major.dylib, which is a symlink to
                                 # libnghttp2.version.dylib. Get all of them.
@@ -1050,18 +1073,6 @@ def construct(self):
                                 ):
                     self.path2basename(relpkgdir, libfile)
 
-                # dylibs that vary based on configuration
-                if self.args['configuration'].lower() == 'debug':
-                    for libfile in (
-                                "libfmodL.dylib",
-                                ):
-                        dylibs += self.path_optional(os.path.join(debpkgdir, libfile), libfile)
-                else:
-                    for libfile in (
-                                "libfmod.dylib",
-                                ):
-                        dylibs += self.path_optional(os.path.join(relpkgdir, libfile), libfile)
-
                 # our apps
                 executable_path = {}
                 for app_bld_dir, app in (