<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.8.5">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2022-07-15T14:07:26-07:00</updated><id>/feed.xml</id><title type="html">DavidJVitale.com</title><subtitle></subtitle><entry><title type="html">Mount Whitney</title><link href="/blog/travel/day-hikes/mt-whitney" rel="alternate" type="text/html" title="Mount Whitney" /><published>2020-08-01T00:00:00-07:00</published><updated>2020-08-01T00:00:00-07:00</updated><id>/blog/travel/day-hikes/mt-whitney</id><content type="html" xml:base="/blog/travel/day-hikes/mt-whitney">&lt;div id=&quot;leaflet-map-33b16506acd4db7d01d062dbcf7b0e0b&quot; class=&quot;leaflet-map&quot;&gt;&lt;/div&gt;
&lt;script&gt;(() =&gt; {
// Specify configuration variables, setup any elements and styling
    var leafletCdn = &quot;https://unpkg.com/leaflet@1.6.0/dist/&quot;;
    var esriLeafletCdn = &quot;https://unpkg.com/esri-leaflet/dist/&quot;;

    // Get tag input arguments &amp; inside block object list
    var tagInputArg = {&quot;zoom&quot; : 13,
                &quot;center&quot;: [36.578457, -118.29237] } ;
    var blockLeafletItems = [
   {id: &quot;354146ff34a263c9a337aba948d11639&quot;,
              type: &quot;LeafletGeoJSON&quot;,
              value: &quot;/assets/personal/geojson/day-hikes/2020-08-01-mt-whitney.geojson&quot; },

];

    // Override the map div id if specified, apply default CSS
    var defaultMapElId = &quot;leaflet-map-33b16506acd4db7d01d062dbcf7b0e0b&quot;;
   var defaultMapElStyle = &quot;height:300px; margin-top:15px; margin-bottom:15px&quot;;
    var mapEl = document.getElementById(defaultMapElId);
    if('divId' in tagInputArg){
        mapEl.id = tagInputArg['divId'];
    }
    var defaultMapCssEl = document.createElement(&quot;style&quot;);
    defaultMapCssEl.innerHTML = 
        &quot;#&quot; + defaultMapElId + &quot;{&quot; + defaultMapElStyle + &quot;}&quot;;
    document.head.appendChild(defaultMapCssEl);

    var newWindowImgSrcBase64 = &quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH4wUVFzAHq2j99AAAAV9JREFUSMdjYKAxYCRHk5ubG9+1a9fm/v//H6cadnb2G/fu3atlIceC379/c3z9+jUEn5q/f/8eYWBgYECxQE5OroqA2Y8ePXq0hJWV9Qc3N/caZB8wMjJKff361QpvEAkKCv4nYMGh9+/f26MLamhoyLx9+3b/nz9/VJCC6MiLFy9sWXCE3xlGRsZvWKQu4DOciYnpCzc396HPnz97weRxWRD/8OHDa4TiAt1wfn5+z79//zoxMDDALWAiN/lhM/zevXtH0NUx0dJwsiwgxXCccUCJ4dzc3DP+//+/gZ2d/duLFy9Is+Djx4+rCbn82rVrrxgYGF6RFUR8fHyZbGxsD7AZLiEhUSAiIrJSUlIyjOw4uHnz5gVHR0d1bC7/8+eP5d+/f8P+/PmjS1Ekr1ix4hcp6ploXVwPfQuwJlMmJiYBLS0tIVIMev36NRvRFnz48OHohw8fhkYQjQKCAAChiL6Pj/LM2QAAAABJRU5ErkJggg==&quot;;

// Actual mapping section; Specify a function to be called later that 
// assembles the correct JS components based on what the user specified in the 
// tag input arg, the block section of features, etc. Actually creates the map
// that is visible on the page

    function _getCenter(){
        var defaultCenter = [0,0];
        if(&quot;center&quot; in tagInputArg){
            return tagInputArg.center;
        } else {
            return defaultCenter;
        }
    }

    function _getZoom(){
        var defaultZoom = 1;
        if(&quot;zoom&quot; in tagInputArg){
            return tagInputArg.zoom
        } else {
            return defaultZoom;
        }
    }

    function _getProviderBasemap(){
        var defaultProviderBasemap = &quot;OpenStreetMap.Mapnik&quot;;
        if(&quot;providerBasemap&quot; in tagInputArg){
            return tagInputArg.providerBasemap;
        } else {
            return defaultProviderBasemap;
        }
    }


    function _addMarkerToMap(leafletItem, map){
        var m = leafletItem.value;
        var result = L.marker([m.latitude, m.longitude]).addTo(map);
        var potentialPopup = &quot;&quot;;
        if('popupContent' in m){
                potentialPopup += m.popupContent;}
        if('href' in m){
            potentialPopup += '&lt;a href=&quot;' + m.href + '&quot;&gt;' + 
                '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            result.bindPopup(potentialPopup);}
        if(!('center' in tagInputArg)){
            // If the user didn't specify a center, infer from marker
            map.panTo(new L.LatLng(m.latitude, m.longitude));
        }
    }

    function _onEachFeature(feature, layer){
        var potentialPopup = &quot;&quot;
        if(feature.properties &amp;&amp; feature.properties.popupContent){
            potentialPopup += feature.properties.popupContent;
        }
        if(feature.properties &amp;&amp; feature.properties.href){
            potentialPopup += 
                '&lt;a href=&quot;' + feature.properties.href + '&quot;&gt;' + 
                    '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            layer.bindPopup(potentialPopup);
        }
    }

    function _addGeoJSONToMap(leafletItem, map){
        if(typeof leafletItem.value === &quot;string&quot;){
            fetch(leafletItem.value).then((resp) =&gt; {
                return resp.json();
            }).then((data) =&gt; {
                leafletItem.value = data;
                _addGeoJSONObjToMap(leafletItem, map);
            }).catch((err) =&gt; {
                console.log(&quot;Encountered err w/ geojson, attempting to fix..&quot;);
                console.log(err);
                _addGeoJSONObjToMap(leafletItem, map);
            });
        } else {
            _addGeoJSONObjToMap(leafletItem, map);
        }
     }

    function _addGeoJSONObjToMap(leafletItem, map){
         var geojson = L.geoJSON(leafletItem.value, { 
            onEachFeature: _onEachFeature 
        });
        layers = geojson.getLayers();
        for(var i=0; i&lt;layers.length; i++){
            try{
                var geom = layers[i].feature.geometry;
                if(!('center' in tagInputArg)){
                    // If the user didn't specify a center, infer from geojson
                    //console.log(&quot;panning to &quot; + geom.coordinates);
                    map.panTo(new L.LatLng(geom.coordinates[1],
                                           geom.coordinates[0]));
                }
            } catch(e){}
        }
       
        geojson.addTo(map);
       
    }

    function _processLeafletItem(leafletItem, map){
        switch(leafletItem.type){
            case &quot;LeafletMarker&quot;:
                _addMarkerToMap(leafletItem, map);
                break;
            case &quot;LeafletGeoJSON&quot;:
                _addGeoJSONToMap(leafletItem, map);
                break;
            case undefined:
                break; 
            default:
                console.log(&quot;Couldn't add item &quot; + leafletItem.id);
                break;
        }
    }

//The actual section that is called that creates a map
    function createMap(){
        console.log(&quot;Creating map 33b16506acd4db7d01d062dbcf7b0e0b with these args:&quot;);
        console.log(tagInputArg);

        //Initialize Map with the correct input arguments
        var map = L.map(mapEl.id, 
            {worldCopyJump: true}).setView(_getCenter(), _getZoom());
        L.tileLayer.provider(_getProviderBasemap()).addTo(map);
        if(&quot;esriBasemap&quot; in tagInputArg){
            L.esri.basemapLayer(tagInputArg.esriBasemap).addTo(map);
        }

        //process each Leaflet Item passed in between the block tag middle
        for(var i=0; i&lt;blockLeafletItems.length; i++){
            var leafletItem = blockLeafletItems[i];
            console.log(&quot;Adding leaflet item &quot; + leafletItem.id + &quot;:&quot;);
            console.log(leafletItem);
            _processLeafletItem(leafletItem, map);
        }
    }

// Load the correct JS libraries/CSS by adding to head: 
// When ready, call createMap() to create the map on the page

    function _createMap(){
        // helper function to draw the map only when everything is loaded,
        // safeguards against multiple calls to window.onload
        var prevOnLoad;
        if(window.onload){
            prevOnLoad = window.onload;
        }
        window.onload = () =&gt; {
            createMap();
            if(prevOnLoad){
                prevOnLoad();
            }
        }
    }

    var leafletCssId = &quot;leaflet-css-head&quot;;
    var leafletJsId = &quot;leaflet-js-head&quot;;
    var esriLeafletJsId = &quot;esri-leaflet-js-head&quot;;
    var leafletProvidersJsId = &quot;leaflet-providers-js-head&quot;;

    // Add the leaflet CSS first, don't worry about when it loads
    var leafletCssEl = document.createElement(&quot;link&quot;);
    leafletCssEl.id = leafletCssId;
    leafletCssEl.rel = &quot;stylesheet&quot;;
    leafletCssEl.href = leafletCdn + &quot;leaflet.css&quot;;
    if(!document.getElementById(leafletCssEl.id)){
        document.head.appendChild(leafletCssEl);
    }

    function addToHeadIfNotLoaded(el) {
        //Add the el to the head if it doesn't exist already. If it does,
        //everything we need is already loaded, so draw the map
        if(!document.getElementById(el.id)){
            document.head.appendChild(el);
        } else {
            _createMap();
        }
    }

    // Load the main leaflet.js code, wait for it to load
    var leafletJsEl = document.createElement(&quot;script&quot;);
    leafletJsEl.id = leafletJsId;
    leafletJsEl.onload = () =&gt; {
        //After loaded, load the esri-leaflet.js code, wait for it to load
        var esriEl = document.createElement(&quot;script&quot;);
        esriEl.id = esriLeafletJsId;
        esriEl.onload = () =&gt; {
            //After loaded, add the inline leaflet-providers &lt;script&gt;
            provEl = document.createElement(&quot;script&quot;);
            provEl.id = leafletProvidersJsId;
            provEl.innerHTML = `//Taken from https://github.com/leaflet-extras/leaflet-providers
(function (root, factory) {
	if (typeof define === 'function' &amp;&amp; define.amd) {
		// AMD. Register as an anonymous module.
		define(['leaflet'], factory);
	} else if (typeof modules === 'object' &amp;&amp; module.exports) {
		// define a Common JS module that relies on 'leaflet'
		module.exports = factory(require('leaflet'));
	} else {
		// Assume Leaflet is loaded into global object L already
		factory(L);
	}
}(this, function (L) {
	'use strict';

	L.TileLayer.Provider = L.TileLayer.extend({
		initialize: function (arg, options) {
			var providers = L.TileLayer.Provider.providers;

			var parts = arg.split('.');

			var providerName = parts[0];
			var variantName = parts[1];

			if (!providers[providerName]) {
				throw 'No such provider (' + providerName + ')';
			}

			var provider = {
				url: providers[providerName].url,
				options: providers[providerName].options
			};

			// overwrite values in provider from variant.
			if (variantName &amp;&amp; 'variants' in providers[providerName]) {
				if (!(variantName in providers[providerName].variants)) {
					throw 'No such variant of ' + providerName + ' (' + variantName + ')';
				}
				var variant = providers[providerName].variants[variantName];
				var variantOptions;
				if (typeof variant === 'string') {
					variantOptions = {
						variant: variant
					};
				} else {
					variantOptions = variant.options;
				}
				provider = {
					url: variant.url || provider.url,
					options: L.Util.extend({}, provider.options, variantOptions)
				};
			}

			// replace attribution placeholders with their values from toplevel provider attribution,
			// recursively
			var attributionReplacer = function (attr) {
				if (attr.indexOf('{attribution.') === -1) {
					return attr;
				}
				return attr.replace(/\{attribution.(\w*)\}/g,
					function (match, attributionName) {
						return attributionReplacer(providers[attributionName].options.attribution);
					}
				);
			};
			provider.options.attribution = attributionReplacer(provider.options.attribution);

			// Compute final options combining provider options with any user overrides
			var layerOpts = L.Util.extend({}, provider.options, options);
			L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts);
		}
	});

	/**
	 * Definition of providers.
	 * see http://leafletjs.com/reference.html#tilelayer for options in the options map.
	 */

	L.TileLayer.Provider.providers = {
		OpenStreetMap: {
			url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution:
					'&amp;copy; &lt;a href=&quot;https://www.openstreetmap.org/copyright&quot;&gt;OpenStreetMap&lt;/a&gt; contributors'
			},
			variants: {
				Mapnik: {},
				DE: {
					url: 'https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18
					}
				},
				CH: {
					url: 'https://tile.osm.ch/switzerland/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18,
						bounds: [[45, 5], [48, 11]]
					}
				},
				France: {
					url: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png',
					options: {
						maxZoom: 20,
						attribution: '&amp;copy; Openstreetmap France | {attribution.OpenStreetMap}'
					}
				},
				HOT: {
					url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',
					options: {
						attribution:
							'{attribution.OpenStreetMap}, ' +
							'Tiles style by &lt;a href=&quot;https://www.hotosm.org/&quot; target=&quot;_blank&quot;&gt;Humanitarian OpenStreetMap Team&lt;/a&gt; ' +
							'hosted by &lt;a href=&quot;https://openstreetmap.fr/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap France&lt;/a&gt;'
					}
				},
				BZH: {
					url: 'https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png',
					options: {
						attribution: '{attribution.OpenStreetMap}, Tiles courtesy of &lt;a href=&quot;http://www.openstreetmap.bzh/&quot; target=&quot;_blank&quot;&gt;Breton OpenStreetMap Team&lt;/a&gt;',
						bounds: [[46.2, -5.5], [50, 0.7]]
					}
				}
			}
		},
		OpenSeaMap: {
			url: 'https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png',
			options: {
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openseamap.org&quot;&gt;OpenSeaMap&lt;/a&gt; contributors'
			}
		},
		OpenPtMap: {
			url: 'http://openptmap.org/tiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openptmap.org&quot;&gt;OpenPtMap&lt;/a&gt; contributors'
			}
		},
		OpenTopoMap: {
			url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: {attribution.OpenStreetMap}, &lt;a href=&quot;http://viewfinderpanoramas.org&quot;&gt;SRTM&lt;/a&gt; | Map style: &amp;copy; &lt;a href=&quot;https://opentopomap.org&quot;&gt;OpenTopoMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenRailwayMap: {
			url: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://www.OpenRailwayMap.org&quot;&gt;OpenRailwayMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenFireMap: {
			url: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;http://www.openfiremap.org&quot;&gt;OpenFireMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		SafeCast: {
			url: 'https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 16,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://blog.safecast.org/about/&quot;&gt;SafeCast&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		Thunderforest: {
			url: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}',
			options: {
				attribution:
					'&amp;copy; &lt;a href=&quot;http://www.thunderforest.com/&quot;&gt;Thunderforest&lt;/a&gt;, {attribution.OpenStreetMap}',
				variant: 'cycle',
				apikey: '&lt;insert your api key here&gt;',
				maxZoom: 22
			},
			variants: {
				OpenCycleMap: 'cycle',
				Transport: {
					options: {
						variant: 'transport'
					}
				},
				TransportDark: {
					options: {
						variant: 'transport-dark'
					}
				},
				SpinalMap: {
					options: {
						variant: 'spinal-map'
					}
				},
				Landscape: 'landscape',
				Outdoors: 'outdoors',
				Pioneer: 'pioneer'
			}
		},
		OpenMapSurfer: {
			url: 'https://maps.heigit.org/openmapsurfer/tiles/{variant}/webmercator/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				variant: 'roads',
				attribution: 'Imagery from &lt;a href=&quot;http://giscience.uni-hd.de/&quot;&gt;GIScience Research Group @ University of Heidelberg&lt;/a&gt; | Map data '
			},
			variants: {
				Roads: {
					options: {
						variant: 'roads',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				Hybrid: {
					options: {
						variant: 'hybrid',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				AdminBounds: {
					options: {
						variant: 'adminb',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				ContourLines: {
					options: {
						variant: 'asterc',
						maxZoom: 18,
						minZoom: 13,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;'
					}
				},
				Hillshade: {
					options: {
						variant: 'asterh',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;, &lt;a href=&quot;http://srtm.csi.cgiar.org/&quot;&gt;SRTM&lt;/a&gt;'
					}
				},
				ElementsAtRisk: {
					options: {
						variant: 'elements_at_risk',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				}
			}
		},
		Hydda: {
			url: 'https://{s}.tile.openstreetmap.se/hydda/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 18,
				variant: 'full',
				attribution: 'Tiles courtesy of &lt;a href=&quot;http://openstreetmap.se/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap Sweden&lt;/a&gt; &amp;mdash; Map data {attribution.OpenStreetMap}'
			},
			variants: {
				Full: 'full',
				Base: 'base',
				RoadsAndLabels: 'roads_and_labels'
			}
		},
		MapBox: {
			url: 'https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}{r}.png?access_token={accessToken}',
			options: {
				attribution:
					'&lt;a href=&quot;https://www.mapbox.com/about/maps/&quot; target=&quot;_blank&quot;&gt;&amp;copy; Mapbox&lt;/a&gt; ' +
					'{attribution.OpenStreetMap} ' +
					'&lt;a href=&quot;https://www.mapbox.com/map-feedback/&quot; target=&quot;_blank&quot;&gt;Improve this map&lt;/a&gt;',
				subdomains: 'abcd',
				id: 'mapbox.streets',
				accessToken: '&lt;insert your access token here&gt;',
			}
		},
		Stamen: {
			url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}{r}.{ext}',
			options: {
				attribution:
					'Map tiles by &lt;a href=&quot;http://stamen.com&quot;&gt;Stamen Design&lt;/a&gt;, ' +
					'&lt;a href=&quot;http://creativecommons.org/licenses/by/3.0&quot;&gt;CC BY 3.0&lt;/a&gt; &amp;mdash; ' +
					'Map data {attribution.OpenStreetMap}',
				subdomains: 'abcd',
				minZoom: 0,
				maxZoom: 20,
				variant: 'toner',
				ext: 'png'
			},
			variants: {
				Toner: 'toner',
				TonerBackground: 'toner-background',
				TonerHybrid: 'toner-hybrid',
				TonerLines: 'toner-lines',
				TonerLabels: 'toner-labels',
				TonerLite: 'toner-lite',
				Watercolor: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'watercolor',
						ext: 'jpg',
						minZoom: 1,
						maxZoom: 16
					}
				},
				Terrain: {
					options: {
						variant: 'terrain',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TerrainBackground: {
					options: {
						variant: 'terrain-background',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TopOSMRelief: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'toposm-color-relief',
						ext: 'jpg',
						bounds: [[22, -132], [51, -56]]
					}
				},
				TopOSMFeatures: {
					options: {
						variant: 'toposm-features',
						bounds: [[22, -132], [51, -56]],
						opacity: 0.9
					}
				}
			}
		},
		Esri: {
			url: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}',
			options: {
				variant: 'World_Street_Map',
				attribution: 'Tiles &amp;copy; Esri'
			},
			variants: {
				WorldStreetMap: {
					options: {
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'
					}
				},
				DeLorme: {
					options: {
						variant: 'Specialty/DeLorme_World_Base_Map',
						minZoom: 1,
						maxZoom: 11,
						attribution: '{attribution.Esri} &amp;mdash; Copyright: &amp;copy;2012 DeLorme'
					}
				},
				WorldTopoMap: {
					options: {
						variant: 'World_Topo_Map',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community'
					}
				},
				WorldImagery: {
					options: {
						variant: 'World_Imagery',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
					}
				},
				WorldTerrain: {
					options: {
						variant: 'World_Terrain_Base',
						maxZoom: 13,
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: USGS, Esri, TANA, DeLorme, and NPS'
					}
				},
				WorldShadedRelief: {
					options: {
						variant: 'World_Shaded_Relief',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Source: Esri'
					}
				},
				WorldPhysical: {
					options: {
						variant: 'World_Physical_Map',
						maxZoom: 8,
						attribution: '{attribution.Esri} &amp;mdash; Source: US National Park Service'
					}
				},
				OceanBasemap: {
					options: {
						variant: 'Ocean_Basemap',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri'
					}
				},
				NatGeoWorldMap: {
					options: {
						variant: 'NatGeo_World_Map',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC'
					}
				},
				WorldGrayCanvas: {
					options: {
						variant: 'Canvas/World_Light_Gray_Base',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; Esri, DeLorme, NAVTEQ'
					}
				}
			}
		},
		OpenWeatherMap: {
			url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}',
			options: {
				maxZoom: 19,
				attribution: 'Map data &amp;copy; &lt;a href=&quot;http://openweathermap.org&quot;&gt;OpenWeatherMap&lt;/a&gt;',
				apiKey:'&lt;insert your api key here&gt;',
				opacity: 0.5
			},
			variants: {
				Clouds: 'clouds',
				CloudsClassic: 'clouds_cls',
				Precipitation: 'precipitation',
				PrecipitationClassic: 'precipitation_cls',
				Rain: 'rain',
				RainClassic: 'rain_cls',
				Pressure: 'pressure',
				PressureContour: 'pressure_cntr',
				Wind: 'wind',
				Temperature: 'temp',
				Snow: 'snow'
			}
		},
		HERE: {
			/*
			 * HERE maps, formerly Nokia maps.
			 * These basemaps are free, but you need an API key. Please sign up at
			 * https://developer.here.com/plans
			 */
			url:
				'https://{s}.{base}.maps.api.here.com/maptile/2.1/' +
				'{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' +
				'app_id={app_id}&amp;app_code={app_code}&amp;lg={language}',
			options: {
				attribution:
					'Map &amp;copy; 1987-' + new Date().getFullYear() + ' &lt;a href=&quot;http://developer.here.com&quot;&gt;HERE&lt;/a&gt;',
				subdomains: '1234',
				mapID: 'newest',
				'app_id': '&lt;insert your app_id here&gt;',
				'app_code': '&lt;insert your app_code here&gt;',
				base: 'base',
				variant: 'normal.day',
				maxZoom: 20,
				type: 'maptile',
				language: 'eng',
				format: 'png8',
				size: '256'
			},
			variants: {
				normalDay: 'normal.day',
				normalDayCustom: 'normal.day.custom',
				normalDayGrey: 'normal.day.grey',
				normalDayMobile: 'normal.day.mobile',
				normalDayGreyMobile: 'normal.day.grey.mobile',
				normalDayTransit: 'normal.day.transit',
				normalDayTransitMobile: 'normal.day.transit.mobile',
				normalNight: 'normal.night',
				normalNightMobile: 'normal.night.mobile',
				normalNightGrey: 'normal.night.grey',
				normalNightGreyMobile: 'normal.night.grey.mobile',
				normalNightTransit: 'normal.night.transit',
				normalNightTransitMobile: 'normal.night.transit.mobile',
				reducedDay: 'reduced.day',
				reducedNight: 'reduced.night',
				basicMap: {
					options: {
						type: 'basetile'
					}
				},
				mapLabels: {
					options: {
						type: 'labeltile',
						format: 'png'
					}
				},
				trafficFlow: {
					options: {
						base: 'traffic',
						type: 'flowtile'
					}
				},
				carnavDayGrey: 'carnav.day.grey',
				hybridDay: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day'
					}
				},
				hybridDayMobile: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.mobile'
					}
				},
				hybridDayTransit: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.transit'
					}
				},
				hybridDayGrey: {
					options: {
						base: 'aerial',
						variant: 'hybrid.grey.day'
					}
				},
				pedestrianDay: 'pedestrian.day',
				pedestrianNight: 'pedestrian.night',
				satelliteDay: {
					options: {
						base: 'aerial',
						variant: 'satellite.day'
					}
				},
				terrainDay: {
					options: {
						base: 'aerial',
						variant: 'terrain.day'
					}
				},
				terrainDayMobile: {
					options: {
						base: 'aerial',
						variant: 'terrain.day.mobile'
					}
				}
			}
		},
		FreeMapSK: {
			url: 'http://t{s}.freemap.sk/T/{z}/{x}/{y}.jpeg',
			options: {
				minZoom: 8,
				maxZoom: 16,
				subdomains: '1234',
				bounds: [[47.204642, 15.996093], [49.830896, 22.576904]],
				attribution:
					'{attribution.OpenStreetMap}, vizualization CC-By-SA 2.0 &lt;a href=&quot;http://freemap.sk&quot;&gt;Freemap.sk&lt;/a&gt;'
			}
		},
		MtbMap: {
			url: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png',
			options: {
				attribution:
					'{attribution.OpenStreetMap} &amp;amp; USGS'
			}
		},
		CartoDB: {
			url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '{attribution.OpenStreetMap} &amp;copy; &lt;a href=&quot;https://carto.com/attributions&quot;&gt;CARTO&lt;/a&gt;',
				subdomains: 'abcd',
				maxZoom: 19,
				variant: 'light_all'
			},
			variants: {
				Positron: 'light_all',
				PositronNoLabels: 'light_nolabels',
				PositronOnlyLabels: 'light_only_labels',
				DarkMatter: 'dark_all',
				DarkMatterNoLabels: 'dark_nolabels',
				DarkMatterOnlyLabels: 'dark_only_labels',
				Voyager: 'rastertiles/voyager',
				VoyagerNoLabels: 'rastertiles/voyager_nolabels',
				VoyagerOnlyLabels: 'rastertiles/voyager_only_labels',
				VoyagerLabelsUnder: 'rastertiles/voyager_labels_under'
			}
		},
		HikeBike: {
			url: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: '{attribution.OpenStreetMap}',
				variant: 'hikebike'
			},
			variants: {
				HikeBike: {},
				HillShading: {
					options: {
						maxZoom: 15,
						variant: 'hillshading'
					}
				}
			}
		},
		BasemapAT: {
			url: 'https://maps{s}.wien.gv.at/basemap/{variant}/normal/google3857/{z}/{y}/{x}.{format}',
			options: {
				maxZoom: 19,
				attribution: 'Datenquelle: &lt;a href=&quot;https://www.basemap.at&quot;&gt;basemap.at&lt;/a&gt;',
				subdomains: ['', '1', '2', '3', '4'],
				format: 'png',
				bounds: [[46.358770, 8.782379], [49.037872, 17.189532]],
				variant: 'geolandbasemap'
			},
			variants: {
				basemap: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'geolandbasemap'
					}
				},
				grau: 'bmapgrau',
				overlay: 'bmapoverlay',
				highdpi: {
					options: {
						variant: 'bmaphidpi',
						format: 'jpeg'
					}
				},
				orthofoto: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'bmaporthofoto30cm',
						format: 'jpeg'
					}
				}
			}
		},
		nlmaps: {
			url: 'https://geodata.nationaalgeoregister.nl/tiles/service/wmts/{variant}/EPSG:3857/{z}/{x}/{y}.png',
			options: {
				minZoom: 6,
				maxZoom: 19,
				bounds: [[50.5, 3.25], [54, 7.6]],
				attribution: 'Kaartgegevens &amp;copy; &lt;a href=&quot;kadaster.nl&quot;&gt;Kadaster&lt;/a&gt;'
			},
			variants: {
				'standaard': 'brtachtergrondkaart',
				'pastel': 'brtachtergrondkaartpastel',
				'grijs': 'brtachtergrondkaartgrijs',
				'luchtfoto': {
					'url': 'https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts/1.0.0/2016_ortho25/EPSG:3857/{z}/{x}/{y}.png',
				}
			}
		},
		NASAGIBS: {
			url: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}',
			options: {
				attribution:
					'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' +
					'(&lt;a href=&quot;https://earthdata.nasa.gov&quot;&gt;ESDIS&lt;/a&gt;) with funding provided by NASA/HQ.',
				bounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]],
				minZoom: 1,
				maxZoom: 9,
				format: 'jpg',
				time: '',
				tilematrixset: 'GoogleMapsCompatible_Level'
			},
			variants: {
				ModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor',
				ModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367',
				ViirsEarthAtNight2012: {
					options: {
						variant: 'VIIRS_CityLights_2012',
						maxZoom: 8
					}
				},
				ModisTerraLSTDay: {
					options: {
						variant: 'MODIS_Terra_Land_Surface_Temp_Day',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				},
				ModisTerraSnowCover: {
					options: {
						variant: 'MODIS_Terra_Snow_Cover',
						format: 'png',
						maxZoom: 8,
						opacity: 0.75
					}
				},
				ModisTerraAOD: {
					options: {
						variant: 'MODIS_Terra_Aerosol',
						format: 'png',
						maxZoom: 6,
						opacity: 0.75
					}
				},
				ModisTerraChlorophyll: {
					options: {
						variant: 'MODIS_Terra_Chlorophyll_A',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				}
			}
		},
		NLS: {
			// NLS maps are copyright National library of Scotland.
			// http://maps.nls.uk/projects/api/index.html
			// Please contact NLS for anything other than non-commercial low volume usage
			//
			// Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s
			//   z0-9  - 1:1m
			//  z10-11 - quarter inch (1:253440)
			//  z12-18 - one inch (1:63360)
			url: 'https://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg',
			options: {
				attribution: '&lt;a href=&quot;http://geo.nls.uk/maps/&quot;&gt;National Library of Scotland Historic Maps&lt;/a&gt;',
				bounds: [[49.6, -12], [61.7, 3]],
				minZoom: 1,
				maxZoom: 18,
				subdomains: '0123',
			}
		},
		JusticeMap: {
			// Justice Map (http://www.justicemap.org/)
			// Visualize race and income data for your community, county and country.
			// Includes tools for data journalists, bloggers and community activists.
			url: 'http://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png',
			options: {
				attribution: '&lt;a href=&quot;http://www.justicemap.org/terms.php&quot;&gt;Justice Map&lt;/a&gt;',
				// one of 'county', 'tract', 'block'
				size: 'county',
				// Bounds for USA, including Alaska and Hawaii
				bounds: [[14, -180], [72, -56]]
			},
			variants: {
				income: 'income',
				americanIndian: 'indian',
				asian: 'asian',
				black: 'black',
				hispanic: 'hispanic',
				multi: 'multi',
				nonWhite: 'nonwhite',
				white: 'white',
				plurality: 'plural'
			}
		},
		Wikimedia: {
			url: 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '&lt;a href=&quot;https://wikimediafoundation.org/wiki/Maps_Terms_of_Use&quot;&gt;Wikimedia&lt;/a&gt;',
				minZoom: 1,
				maxZoom: 19
			}
		},
		GeoportailFrance: {
			url: 'https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&amp;SERVICE=WMTS&amp;VERSION=1.0.0&amp;STYLE={style}&amp;TILEMATRIXSET=PM&amp;FORMAT={format}&amp;LAYER={variant}&amp;TILEMATRIX={z}&amp;TILEROW={y}&amp;TILECOL={x}',
			options: {
				attribution: '&lt;a target=&quot;_blank&quot; href=&quot;https://www.geoportail.gouv.fr/&quot;&gt;Geoportail France&lt;/a&gt;',
				bounds: [[-75, -180], [81, 180]],
				minZoom: 2,
				maxZoom: 18,
				// Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/
				// NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee
				apikey: 'choisirgeoportail',
				format: 'image/jpeg',
				style : 'normal',
				variant: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD'
			},
			variants: {
				parcels: {
					options : {
						variant: 'CADASTRALPARCELS.PARCELS',
						maxZoom: 20,
						style : 'bdparcellaire',
						format: 'image/png'
					}
				},
				ignMaps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS',
				maps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD',
				orthos: {
					options: {
						maxZoom: 19,
						variant: 'ORTHOIMAGERY.ORTHOPHOTOS'
					}
				}
			}
		},
		OneMapSG: {
			url: 'https://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png',
			options: {
				variant: 'Default',
				minZoom: 11,
				maxZoom: 18,
				bounds: [[1.56073, 104.11475], [1.16, 103.502]],
				attribution: '&lt;img src=&quot;https://docs.onemap.sg/maps/images/oneMap64-01.png&quot; style=&quot;height:20px;width:20px;&quot;/&gt; New OneMap | Map data &amp;copy; contributors, &lt;a href=&quot;http://SLA.gov.sg&quot;&gt;Singapore Land Authority&lt;/a&gt;'
			},
			variants: {
				Default: 'Default',
				Night: 'Night',
				Original: 'Original',
				Grey: 'Grey',
				LandLot: 'LandLot'
			}
		}
	};

	L.tileLayer.provider = function (provider, options) {
		return new L.TileLayer.Provider(provider, options);
	};

	return L;
}));
`;
            if(!document.getElementById(provEl.id)){
                 document.head.appendChild(provEl);        
            }
            _createMap();
            }
        esriEl.src = esriLeafletCdn + &quot;esri-leaflet.js&quot;;
        addToHeadIfNotLoaded(esriEl);
        };
    leafletJsEl.src = leafletCdn + &quot;leaflet.js&quot;;
    addToHeadIfNotLoaded(leafletJsEl);
})();
&lt;/script&gt;

&lt;p&gt;After months of planning and training, we have finally summitted the tallest point in the continental United States: Mount Whitney. Much thanks to this awesome group of folks for the epic adventure!!&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-whitney/group.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-whitney/group.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;Left to right: David, Vish, Rebecca, Alex, Sam, Olivia&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;preparation&quot;&gt;Preparation&lt;/h2&gt;

&lt;p&gt;This journey started in February of 2020, when we applied for (and won) day hike &lt;a href=&quot;https://www.recreation.gov/permits/233260&quot;&gt;permits&lt;/a&gt; in the lottery system. A few months later we were starting our physical and mental training by doing various day hikes in the Southern California area (San Bernardino Peak, Ontario Peak, etc), &lt;a href=&quot;/blog/travel/misc/backpacking/cottonwood-pass&quot;&gt;a backpacking journey&lt;/a&gt;, cardio workouts, etc. The two main guiding principles were 1) get into good cardio shape, and 2) spend time above 10,000 feet. Mount Whitney is a grueling 22+ mile hike with a 6000+ foot elevation gain to 14,508 feet – Not exactly a walk in the park.&lt;/p&gt;

&lt;p&gt;2 weeks before our Whitney trip, we did the nearby &lt;a href=&quot;/blog/travel/day-hikes/mt-langley&quot;&gt;Mount Langley&lt;/a&gt; hike (~20 mile, ~5000 feet gain to 14,000 feet). In my opinion, this was probably the best thing we did for our preparation – It is a very similar hike to Mount Whitney, and we were able to get used to elevation effects at 14,000+ feet.&lt;/p&gt;

&lt;h2 id=&quot;mount-whitney&quot;&gt;Mount Whitney&lt;/h2&gt;

&lt;p&gt;Our permit is for Saturday. We arrive to Lone Pine camp on Thursday night, and spend Friday above 10,000 feet in the nearby Onion Valley to help with acclimation. On Friday night I pack my bag with all food and supplies, wear my hiking clothes to sleep, and get in bed at 9PM for our lovely early alarm.&lt;/p&gt;

&lt;h3 id=&quot;130-am&quot;&gt;1:30 AM&lt;/h3&gt;

&lt;p&gt;My alarm goes off. I am groggy but excited. After stumbling out of my tent and shoving some food in my mouth, I double check my gear and we drive up to the trailhead.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-whitney/1am.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-whitney/1am.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h3 id=&quot;245-am&quot;&gt;2:45 AM&lt;/h3&gt;

&lt;p&gt;We reach the trailhead and officially start our hike. My body is confused that is hiking instead of sleeping, so it was a bit of a rough start. But headlamp hiking under the stars was still an awesome experience. The highlight was probably the bats flying around!&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-whitney/2am.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-whitney/2am.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;600-am&quot;&gt;6:00 AM&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/assets/personal/day-hikes/mt-whitney/second-breakfast.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;We take a break to watch the sun rise, drink coffee, and eat our second breakfast. The caffeine, food, and sunlight increase my mood greatly. The sunrise was so beautiful–hard to put into words!&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-whitney/sunrise.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-whitney/sunrise.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-whitney/yoga-1.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-whitney/yoga-1.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;There might have been impromptu mountain yoga&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;730-am&quot;&gt;7:30 AM&lt;/h2&gt;

&lt;p&gt;We are a bit over halfway to the top, and we take a longer break to filter water at this last water source. I am experiencing minor altitude sickness and major mental apprehension looking at this rocky, steep trail ahead of us. We are making good pace, so I just focus on my breathing and continue onward.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-whitney/going-up.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-whitney/going-up.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-whitney/last-water.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-whitney/last-water.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;930-am&quot;&gt;9:30 AM&lt;/h2&gt;

&lt;p&gt;I am feeling the full effects of the altitude, leaning into the silliness and having a great time. We have intense discussions that shall not be repeated (what happens above 12,000 feet stays above 12,000 feet). The human experience and the nature of reality are questioned. We break the ceremonial Pop Tart in communion for our last mile.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-whitney/poptart.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-whitney/poptart.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-whitney/pano.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-whitney/pano.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;1030-am&quot;&gt;10:30 AM&lt;/h2&gt;

&lt;p&gt;We reach the summit. There is no better word to describe how I feel other than “drunk”. We take our photos, explore, and nap. I am euphoric, but a bit sad that this journey is over. I still soak it all in as we break for an hour (which only seems like 10 minutes).&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-whitney/pano-2.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-whitney/pano-2.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-whitney/group.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-whitney/group.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;1200-pm&quot;&gt;12:00 PM&lt;/h2&gt;

&lt;p&gt;We start our descent. The throbbing headache fades away, but is replaced with raw exhaustion. Amazing views going down, including the parts we didn’t see in the dark. I get to use my “wag bag”, which was an experience.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-whitney/descent-1.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-whitney/descent-1.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-whitney/descent-2.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-whitney/descent-2.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;545-pm&quot;&gt;5:45 PM&lt;/h2&gt;

&lt;p&gt;We finish our adventure! We get back to our campsite, celebrate our success with some champagne, and eat a delicious dinner that Scott and Claire made (Much love to these two for manning the camp and hanging out with us!)&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-whitney/after.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-whitney/after.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h1 id=&quot;reflection&quot;&gt;Reflection&lt;/h1&gt;

&lt;p&gt;I feel very blessed after doing this adventure. We used our incredible human minds and bodies to achieve a feat we have tirelessly worked towards for months. We have access to beautiful land, and the ability to respectfully use it. There is nothing but positive vibes associated with this adventure, and I have nothing to share but gratitude. Thank you to Vish, Rebecca, Alex, Sam, Olivia, Scott, Claire, and all others whom I have shared experiences with in the outdoors. I hope there is more to come!! I will leave you with a quote:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Climb the mountains and get their good tidings. Nature’s peace will flow into you as sunshine flows into trees. The winds will blow their own freshness into you, and the storms their energy, while cares will drop away from you like the leaves of Autumn.&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;John Muir&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;</content><author><name>David Vitale</name></author><category term="travel" /><category term="misc" /><category term="day-hikes" /><summary type="html"></summary></entry><entry><title type="html">Mount Langley</title><link href="/blog/travel/day-hikes/mt-langley" rel="alternate" type="text/html" title="Mount Langley" /><published>2020-07-18T00:00:00-07:00</published><updated>2020-07-18T00:00:00-07:00</updated><id>/blog/travel/day-hikes/mt-langley</id><content type="html" xml:base="/blog/travel/day-hikes/mt-langley">&lt;div id=&quot;leaflet-map-9b0e3d48be105599e9469513219fad19&quot; class=&quot;leaflet-map&quot;&gt;&lt;/div&gt;
&lt;script&gt;(() =&gt; {
// Specify configuration variables, setup any elements and styling
    var leafletCdn = &quot;https://unpkg.com/leaflet@1.6.0/dist/&quot;;
    var esriLeafletCdn = &quot;https://unpkg.com/esri-leaflet/dist/&quot;;

    // Get tag input arguments &amp; inside block object list
    var tagInputArg = {&quot;zoom&quot; : 11 } ;
    var blockLeafletItems = [
    {id: &quot;6f3a752a0ebc79871b49b6923d541a61&quot;,
              type: &quot;LeafletMarker&quot;,
              value: {&quot;latitude&quot; : 36.448341,
                       &quot;longitude&quot; : -118.170669,
                       &quot;popupContent&quot;: &quot;Mount Langley&quot; } }, 
    {id: &quot;a5260210e32c8b6bfdfaf36ca4777e5a&quot;,
              type: &quot;LeafletGeoJSON&quot;,
              value: &quot;/assets/personal/geojson/day-hikes/2020-07-18-mt-langley.geojson&quot; },

];

    // Override the map div id if specified, apply default CSS
    var defaultMapElId = &quot;leaflet-map-9b0e3d48be105599e9469513219fad19&quot;;
   var defaultMapElStyle = &quot;height:300px; margin-top:15px; margin-bottom:15px&quot;;
    var mapEl = document.getElementById(defaultMapElId);
    if('divId' in tagInputArg){
        mapEl.id = tagInputArg['divId'];
    }
    var defaultMapCssEl = document.createElement(&quot;style&quot;);
    defaultMapCssEl.innerHTML = 
        &quot;#&quot; + defaultMapElId + &quot;{&quot; + defaultMapElStyle + &quot;}&quot;;
    document.head.appendChild(defaultMapCssEl);

    var newWindowImgSrcBase64 = &quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH4wUVFzAHq2j99AAAAV9JREFUSMdjYKAxYCRHk5ubG9+1a9fm/v//H6cadnb2G/fu3atlIceC379/c3z9+jUEn5q/f/8eYWBgYECxQE5OroqA2Y8ePXq0hJWV9Qc3N/caZB8wMjJKff361QpvEAkKCv4nYMGh9+/f26MLamhoyLx9+3b/nz9/VJCC6MiLFy9sWXCE3xlGRsZvWKQu4DOciYnpCzc396HPnz97weRxWRD/8OHDa4TiAt1wfn5+z79//zoxMDDALWAiN/lhM/zevXtH0NUx0dJwsiwgxXCccUCJ4dzc3DP+//+/gZ2d/duLFy9Is+Djx4+rCbn82rVrrxgYGF6RFUR8fHyZbGxsD7AZLiEhUSAiIrJSUlIyjOw4uHnz5gVHR0d1bC7/8+eP5d+/f8P+/PmjS1Ekr1ix4hcp6ploXVwPfQuwJlMmJiYBLS0tIVIMev36NRvRFnz48OHohw8fhkYQjQKCAAChiL6Pj/LM2QAAAABJRU5ErkJggg==&quot;;

// Actual mapping section; Specify a function to be called later that 
// assembles the correct JS components based on what the user specified in the 
// tag input arg, the block section of features, etc. Actually creates the map
// that is visible on the page

    function _getCenter(){
        var defaultCenter = [0,0];
        if(&quot;center&quot; in tagInputArg){
            return tagInputArg.center;
        } else {
            return defaultCenter;
        }
    }

    function _getZoom(){
        var defaultZoom = 1;
        if(&quot;zoom&quot; in tagInputArg){
            return tagInputArg.zoom
        } else {
            return defaultZoom;
        }
    }

    function _getProviderBasemap(){
        var defaultProviderBasemap = &quot;OpenStreetMap.Mapnik&quot;;
        if(&quot;providerBasemap&quot; in tagInputArg){
            return tagInputArg.providerBasemap;
        } else {
            return defaultProviderBasemap;
        }
    }


    function _addMarkerToMap(leafletItem, map){
        var m = leafletItem.value;
        var result = L.marker([m.latitude, m.longitude]).addTo(map);
        var potentialPopup = &quot;&quot;;
        if('popupContent' in m){
                potentialPopup += m.popupContent;}
        if('href' in m){
            potentialPopup += '&lt;a href=&quot;' + m.href + '&quot;&gt;' + 
                '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            result.bindPopup(potentialPopup);}
        if(!('center' in tagInputArg)){
            // If the user didn't specify a center, infer from marker
            map.panTo(new L.LatLng(m.latitude, m.longitude));
        }
    }

    function _onEachFeature(feature, layer){
        var potentialPopup = &quot;&quot;
        if(feature.properties &amp;&amp; feature.properties.popupContent){
            potentialPopup += feature.properties.popupContent;
        }
        if(feature.properties &amp;&amp; feature.properties.href){
            potentialPopup += 
                '&lt;a href=&quot;' + feature.properties.href + '&quot;&gt;' + 
                    '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            layer.bindPopup(potentialPopup);
        }
    }

    function _addGeoJSONToMap(leafletItem, map){
        if(typeof leafletItem.value === &quot;string&quot;){
            fetch(leafletItem.value).then((resp) =&gt; {
                return resp.json();
            }).then((data) =&gt; {
                leafletItem.value = data;
                _addGeoJSONObjToMap(leafletItem, map);
            }).catch((err) =&gt; {
                console.log(&quot;Encountered err w/ geojson, attempting to fix..&quot;);
                console.log(err);
                _addGeoJSONObjToMap(leafletItem, map);
            });
        } else {
            _addGeoJSONObjToMap(leafletItem, map);
        }
     }

    function _addGeoJSONObjToMap(leafletItem, map){
         var geojson = L.geoJSON(leafletItem.value, { 
            onEachFeature: _onEachFeature 
        });
        layers = geojson.getLayers();
        for(var i=0; i&lt;layers.length; i++){
            try{
                var geom = layers[i].feature.geometry;
                if(!('center' in tagInputArg)){
                    // If the user didn't specify a center, infer from geojson
                    //console.log(&quot;panning to &quot; + geom.coordinates);
                    map.panTo(new L.LatLng(geom.coordinates[1],
                                           geom.coordinates[0]));
                }
            } catch(e){}
        }
       
        geojson.addTo(map);
       
    }

    function _processLeafletItem(leafletItem, map){
        switch(leafletItem.type){
            case &quot;LeafletMarker&quot;:
                _addMarkerToMap(leafletItem, map);
                break;
            case &quot;LeafletGeoJSON&quot;:
                _addGeoJSONToMap(leafletItem, map);
                break;
            case undefined:
                break; 
            default:
                console.log(&quot;Couldn't add item &quot; + leafletItem.id);
                break;
        }
    }

//The actual section that is called that creates a map
    function createMap(){
        console.log(&quot;Creating map 9b0e3d48be105599e9469513219fad19 with these args:&quot;);
        console.log(tagInputArg);

        //Initialize Map with the correct input arguments
        var map = L.map(mapEl.id, 
            {worldCopyJump: true}).setView(_getCenter(), _getZoom());
        L.tileLayer.provider(_getProviderBasemap()).addTo(map);
        if(&quot;esriBasemap&quot; in tagInputArg){
            L.esri.basemapLayer(tagInputArg.esriBasemap).addTo(map);
        }

        //process each Leaflet Item passed in between the block tag middle
        for(var i=0; i&lt;blockLeafletItems.length; i++){
            var leafletItem = blockLeafletItems[i];
            console.log(&quot;Adding leaflet item &quot; + leafletItem.id + &quot;:&quot;);
            console.log(leafletItem);
            _processLeafletItem(leafletItem, map);
        }
    }

// Load the correct JS libraries/CSS by adding to head: 
// When ready, call createMap() to create the map on the page

    function _createMap(){
        // helper function to draw the map only when everything is loaded,
        // safeguards against multiple calls to window.onload
        var prevOnLoad;
        if(window.onload){
            prevOnLoad = window.onload;
        }
        window.onload = () =&gt; {
            createMap();
            if(prevOnLoad){
                prevOnLoad();
            }
        }
    }

    var leafletCssId = &quot;leaflet-css-head&quot;;
    var leafletJsId = &quot;leaflet-js-head&quot;;
    var esriLeafletJsId = &quot;esri-leaflet-js-head&quot;;
    var leafletProvidersJsId = &quot;leaflet-providers-js-head&quot;;

    // Add the leaflet CSS first, don't worry about when it loads
    var leafletCssEl = document.createElement(&quot;link&quot;);
    leafletCssEl.id = leafletCssId;
    leafletCssEl.rel = &quot;stylesheet&quot;;
    leafletCssEl.href = leafletCdn + &quot;leaflet.css&quot;;
    if(!document.getElementById(leafletCssEl.id)){
        document.head.appendChild(leafletCssEl);
    }

    function addToHeadIfNotLoaded(el) {
        //Add the el to the head if it doesn't exist already. If it does,
        //everything we need is already loaded, so draw the map
        if(!document.getElementById(el.id)){
            document.head.appendChild(el);
        } else {
            _createMap();
        }
    }

    // Load the main leaflet.js code, wait for it to load
    var leafletJsEl = document.createElement(&quot;script&quot;);
    leafletJsEl.id = leafletJsId;
    leafletJsEl.onload = () =&gt; {
        //After loaded, load the esri-leaflet.js code, wait for it to load
        var esriEl = document.createElement(&quot;script&quot;);
        esriEl.id = esriLeafletJsId;
        esriEl.onload = () =&gt; {
            //After loaded, add the inline leaflet-providers &lt;script&gt;
            provEl = document.createElement(&quot;script&quot;);
            provEl.id = leafletProvidersJsId;
            provEl.innerHTML = `//Taken from https://github.com/leaflet-extras/leaflet-providers
(function (root, factory) {
	if (typeof define === 'function' &amp;&amp; define.amd) {
		// AMD. Register as an anonymous module.
		define(['leaflet'], factory);
	} else if (typeof modules === 'object' &amp;&amp; module.exports) {
		// define a Common JS module that relies on 'leaflet'
		module.exports = factory(require('leaflet'));
	} else {
		// Assume Leaflet is loaded into global object L already
		factory(L);
	}
}(this, function (L) {
	'use strict';

	L.TileLayer.Provider = L.TileLayer.extend({
		initialize: function (arg, options) {
			var providers = L.TileLayer.Provider.providers;

			var parts = arg.split('.');

			var providerName = parts[0];
			var variantName = parts[1];

			if (!providers[providerName]) {
				throw 'No such provider (' + providerName + ')';
			}

			var provider = {
				url: providers[providerName].url,
				options: providers[providerName].options
			};

			// overwrite values in provider from variant.
			if (variantName &amp;&amp; 'variants' in providers[providerName]) {
				if (!(variantName in providers[providerName].variants)) {
					throw 'No such variant of ' + providerName + ' (' + variantName + ')';
				}
				var variant = providers[providerName].variants[variantName];
				var variantOptions;
				if (typeof variant === 'string') {
					variantOptions = {
						variant: variant
					};
				} else {
					variantOptions = variant.options;
				}
				provider = {
					url: variant.url || provider.url,
					options: L.Util.extend({}, provider.options, variantOptions)
				};
			}

			// replace attribution placeholders with their values from toplevel provider attribution,
			// recursively
			var attributionReplacer = function (attr) {
				if (attr.indexOf('{attribution.') === -1) {
					return attr;
				}
				return attr.replace(/\{attribution.(\w*)\}/g,
					function (match, attributionName) {
						return attributionReplacer(providers[attributionName].options.attribution);
					}
				);
			};
			provider.options.attribution = attributionReplacer(provider.options.attribution);

			// Compute final options combining provider options with any user overrides
			var layerOpts = L.Util.extend({}, provider.options, options);
			L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts);
		}
	});

	/**
	 * Definition of providers.
	 * see http://leafletjs.com/reference.html#tilelayer for options in the options map.
	 */

	L.TileLayer.Provider.providers = {
		OpenStreetMap: {
			url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution:
					'&amp;copy; &lt;a href=&quot;https://www.openstreetmap.org/copyright&quot;&gt;OpenStreetMap&lt;/a&gt; contributors'
			},
			variants: {
				Mapnik: {},
				DE: {
					url: 'https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18
					}
				},
				CH: {
					url: 'https://tile.osm.ch/switzerland/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18,
						bounds: [[45, 5], [48, 11]]
					}
				},
				France: {
					url: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png',
					options: {
						maxZoom: 20,
						attribution: '&amp;copy; Openstreetmap France | {attribution.OpenStreetMap}'
					}
				},
				HOT: {
					url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',
					options: {
						attribution:
							'{attribution.OpenStreetMap}, ' +
							'Tiles style by &lt;a href=&quot;https://www.hotosm.org/&quot; target=&quot;_blank&quot;&gt;Humanitarian OpenStreetMap Team&lt;/a&gt; ' +
							'hosted by &lt;a href=&quot;https://openstreetmap.fr/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap France&lt;/a&gt;'
					}
				},
				BZH: {
					url: 'https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png',
					options: {
						attribution: '{attribution.OpenStreetMap}, Tiles courtesy of &lt;a href=&quot;http://www.openstreetmap.bzh/&quot; target=&quot;_blank&quot;&gt;Breton OpenStreetMap Team&lt;/a&gt;',
						bounds: [[46.2, -5.5], [50, 0.7]]
					}
				}
			}
		},
		OpenSeaMap: {
			url: 'https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png',
			options: {
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openseamap.org&quot;&gt;OpenSeaMap&lt;/a&gt; contributors'
			}
		},
		OpenPtMap: {
			url: 'http://openptmap.org/tiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openptmap.org&quot;&gt;OpenPtMap&lt;/a&gt; contributors'
			}
		},
		OpenTopoMap: {
			url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: {attribution.OpenStreetMap}, &lt;a href=&quot;http://viewfinderpanoramas.org&quot;&gt;SRTM&lt;/a&gt; | Map style: &amp;copy; &lt;a href=&quot;https://opentopomap.org&quot;&gt;OpenTopoMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenRailwayMap: {
			url: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://www.OpenRailwayMap.org&quot;&gt;OpenRailwayMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenFireMap: {
			url: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;http://www.openfiremap.org&quot;&gt;OpenFireMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		SafeCast: {
			url: 'https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 16,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://blog.safecast.org/about/&quot;&gt;SafeCast&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		Thunderforest: {
			url: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}',
			options: {
				attribution:
					'&amp;copy; &lt;a href=&quot;http://www.thunderforest.com/&quot;&gt;Thunderforest&lt;/a&gt;, {attribution.OpenStreetMap}',
				variant: 'cycle',
				apikey: '&lt;insert your api key here&gt;',
				maxZoom: 22
			},
			variants: {
				OpenCycleMap: 'cycle',
				Transport: {
					options: {
						variant: 'transport'
					}
				},
				TransportDark: {
					options: {
						variant: 'transport-dark'
					}
				},
				SpinalMap: {
					options: {
						variant: 'spinal-map'
					}
				},
				Landscape: 'landscape',
				Outdoors: 'outdoors',
				Pioneer: 'pioneer'
			}
		},
		OpenMapSurfer: {
			url: 'https://maps.heigit.org/openmapsurfer/tiles/{variant}/webmercator/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				variant: 'roads',
				attribution: 'Imagery from &lt;a href=&quot;http://giscience.uni-hd.de/&quot;&gt;GIScience Research Group @ University of Heidelberg&lt;/a&gt; | Map data '
			},
			variants: {
				Roads: {
					options: {
						variant: 'roads',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				Hybrid: {
					options: {
						variant: 'hybrid',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				AdminBounds: {
					options: {
						variant: 'adminb',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				ContourLines: {
					options: {
						variant: 'asterc',
						maxZoom: 18,
						minZoom: 13,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;'
					}
				},
				Hillshade: {
					options: {
						variant: 'asterh',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;, &lt;a href=&quot;http://srtm.csi.cgiar.org/&quot;&gt;SRTM&lt;/a&gt;'
					}
				},
				ElementsAtRisk: {
					options: {
						variant: 'elements_at_risk',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				}
			}
		},
		Hydda: {
			url: 'https://{s}.tile.openstreetmap.se/hydda/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 18,
				variant: 'full',
				attribution: 'Tiles courtesy of &lt;a href=&quot;http://openstreetmap.se/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap Sweden&lt;/a&gt; &amp;mdash; Map data {attribution.OpenStreetMap}'
			},
			variants: {
				Full: 'full',
				Base: 'base',
				RoadsAndLabels: 'roads_and_labels'
			}
		},
		MapBox: {
			url: 'https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}{r}.png?access_token={accessToken}',
			options: {
				attribution:
					'&lt;a href=&quot;https://www.mapbox.com/about/maps/&quot; target=&quot;_blank&quot;&gt;&amp;copy; Mapbox&lt;/a&gt; ' +
					'{attribution.OpenStreetMap} ' +
					'&lt;a href=&quot;https://www.mapbox.com/map-feedback/&quot; target=&quot;_blank&quot;&gt;Improve this map&lt;/a&gt;',
				subdomains: 'abcd',
				id: 'mapbox.streets',
				accessToken: '&lt;insert your access token here&gt;',
			}
		},
		Stamen: {
			url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}{r}.{ext}',
			options: {
				attribution:
					'Map tiles by &lt;a href=&quot;http://stamen.com&quot;&gt;Stamen Design&lt;/a&gt;, ' +
					'&lt;a href=&quot;http://creativecommons.org/licenses/by/3.0&quot;&gt;CC BY 3.0&lt;/a&gt; &amp;mdash; ' +
					'Map data {attribution.OpenStreetMap}',
				subdomains: 'abcd',
				minZoom: 0,
				maxZoom: 20,
				variant: 'toner',
				ext: 'png'
			},
			variants: {
				Toner: 'toner',
				TonerBackground: 'toner-background',
				TonerHybrid: 'toner-hybrid',
				TonerLines: 'toner-lines',
				TonerLabels: 'toner-labels',
				TonerLite: 'toner-lite',
				Watercolor: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'watercolor',
						ext: 'jpg',
						minZoom: 1,
						maxZoom: 16
					}
				},
				Terrain: {
					options: {
						variant: 'terrain',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TerrainBackground: {
					options: {
						variant: 'terrain-background',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TopOSMRelief: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'toposm-color-relief',
						ext: 'jpg',
						bounds: [[22, -132], [51, -56]]
					}
				},
				TopOSMFeatures: {
					options: {
						variant: 'toposm-features',
						bounds: [[22, -132], [51, -56]],
						opacity: 0.9
					}
				}
			}
		},
		Esri: {
			url: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}',
			options: {
				variant: 'World_Street_Map',
				attribution: 'Tiles &amp;copy; Esri'
			},
			variants: {
				WorldStreetMap: {
					options: {
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'
					}
				},
				DeLorme: {
					options: {
						variant: 'Specialty/DeLorme_World_Base_Map',
						minZoom: 1,
						maxZoom: 11,
						attribution: '{attribution.Esri} &amp;mdash; Copyright: &amp;copy;2012 DeLorme'
					}
				},
				WorldTopoMap: {
					options: {
						variant: 'World_Topo_Map',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community'
					}
				},
				WorldImagery: {
					options: {
						variant: 'World_Imagery',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
					}
				},
				WorldTerrain: {
					options: {
						variant: 'World_Terrain_Base',
						maxZoom: 13,
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: USGS, Esri, TANA, DeLorme, and NPS'
					}
				},
				WorldShadedRelief: {
					options: {
						variant: 'World_Shaded_Relief',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Source: Esri'
					}
				},
				WorldPhysical: {
					options: {
						variant: 'World_Physical_Map',
						maxZoom: 8,
						attribution: '{attribution.Esri} &amp;mdash; Source: US National Park Service'
					}
				},
				OceanBasemap: {
					options: {
						variant: 'Ocean_Basemap',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri'
					}
				},
				NatGeoWorldMap: {
					options: {
						variant: 'NatGeo_World_Map',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC'
					}
				},
				WorldGrayCanvas: {
					options: {
						variant: 'Canvas/World_Light_Gray_Base',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; Esri, DeLorme, NAVTEQ'
					}
				}
			}
		},
		OpenWeatherMap: {
			url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}',
			options: {
				maxZoom: 19,
				attribution: 'Map data &amp;copy; &lt;a href=&quot;http://openweathermap.org&quot;&gt;OpenWeatherMap&lt;/a&gt;',
				apiKey:'&lt;insert your api key here&gt;',
				opacity: 0.5
			},
			variants: {
				Clouds: 'clouds',
				CloudsClassic: 'clouds_cls',
				Precipitation: 'precipitation',
				PrecipitationClassic: 'precipitation_cls',
				Rain: 'rain',
				RainClassic: 'rain_cls',
				Pressure: 'pressure',
				PressureContour: 'pressure_cntr',
				Wind: 'wind',
				Temperature: 'temp',
				Snow: 'snow'
			}
		},
		HERE: {
			/*
			 * HERE maps, formerly Nokia maps.
			 * These basemaps are free, but you need an API key. Please sign up at
			 * https://developer.here.com/plans
			 */
			url:
				'https://{s}.{base}.maps.api.here.com/maptile/2.1/' +
				'{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' +
				'app_id={app_id}&amp;app_code={app_code}&amp;lg={language}',
			options: {
				attribution:
					'Map &amp;copy; 1987-' + new Date().getFullYear() + ' &lt;a href=&quot;http://developer.here.com&quot;&gt;HERE&lt;/a&gt;',
				subdomains: '1234',
				mapID: 'newest',
				'app_id': '&lt;insert your app_id here&gt;',
				'app_code': '&lt;insert your app_code here&gt;',
				base: 'base',
				variant: 'normal.day',
				maxZoom: 20,
				type: 'maptile',
				language: 'eng',
				format: 'png8',
				size: '256'
			},
			variants: {
				normalDay: 'normal.day',
				normalDayCustom: 'normal.day.custom',
				normalDayGrey: 'normal.day.grey',
				normalDayMobile: 'normal.day.mobile',
				normalDayGreyMobile: 'normal.day.grey.mobile',
				normalDayTransit: 'normal.day.transit',
				normalDayTransitMobile: 'normal.day.transit.mobile',
				normalNight: 'normal.night',
				normalNightMobile: 'normal.night.mobile',
				normalNightGrey: 'normal.night.grey',
				normalNightGreyMobile: 'normal.night.grey.mobile',
				normalNightTransit: 'normal.night.transit',
				normalNightTransitMobile: 'normal.night.transit.mobile',
				reducedDay: 'reduced.day',
				reducedNight: 'reduced.night',
				basicMap: {
					options: {
						type: 'basetile'
					}
				},
				mapLabels: {
					options: {
						type: 'labeltile',
						format: 'png'
					}
				},
				trafficFlow: {
					options: {
						base: 'traffic',
						type: 'flowtile'
					}
				},
				carnavDayGrey: 'carnav.day.grey',
				hybridDay: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day'
					}
				},
				hybridDayMobile: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.mobile'
					}
				},
				hybridDayTransit: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.transit'
					}
				},
				hybridDayGrey: {
					options: {
						base: 'aerial',
						variant: 'hybrid.grey.day'
					}
				},
				pedestrianDay: 'pedestrian.day',
				pedestrianNight: 'pedestrian.night',
				satelliteDay: {
					options: {
						base: 'aerial',
						variant: 'satellite.day'
					}
				},
				terrainDay: {
					options: {
						base: 'aerial',
						variant: 'terrain.day'
					}
				},
				terrainDayMobile: {
					options: {
						base: 'aerial',
						variant: 'terrain.day.mobile'
					}
				}
			}
		},
		FreeMapSK: {
			url: 'http://t{s}.freemap.sk/T/{z}/{x}/{y}.jpeg',
			options: {
				minZoom: 8,
				maxZoom: 16,
				subdomains: '1234',
				bounds: [[47.204642, 15.996093], [49.830896, 22.576904]],
				attribution:
					'{attribution.OpenStreetMap}, vizualization CC-By-SA 2.0 &lt;a href=&quot;http://freemap.sk&quot;&gt;Freemap.sk&lt;/a&gt;'
			}
		},
		MtbMap: {
			url: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png',
			options: {
				attribution:
					'{attribution.OpenStreetMap} &amp;amp; USGS'
			}
		},
		CartoDB: {
			url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '{attribution.OpenStreetMap} &amp;copy; &lt;a href=&quot;https://carto.com/attributions&quot;&gt;CARTO&lt;/a&gt;',
				subdomains: 'abcd',
				maxZoom: 19,
				variant: 'light_all'
			},
			variants: {
				Positron: 'light_all',
				PositronNoLabels: 'light_nolabels',
				PositronOnlyLabels: 'light_only_labels',
				DarkMatter: 'dark_all',
				DarkMatterNoLabels: 'dark_nolabels',
				DarkMatterOnlyLabels: 'dark_only_labels',
				Voyager: 'rastertiles/voyager',
				VoyagerNoLabels: 'rastertiles/voyager_nolabels',
				VoyagerOnlyLabels: 'rastertiles/voyager_only_labels',
				VoyagerLabelsUnder: 'rastertiles/voyager_labels_under'
			}
		},
		HikeBike: {
			url: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: '{attribution.OpenStreetMap}',
				variant: 'hikebike'
			},
			variants: {
				HikeBike: {},
				HillShading: {
					options: {
						maxZoom: 15,
						variant: 'hillshading'
					}
				}
			}
		},
		BasemapAT: {
			url: 'https://maps{s}.wien.gv.at/basemap/{variant}/normal/google3857/{z}/{y}/{x}.{format}',
			options: {
				maxZoom: 19,
				attribution: 'Datenquelle: &lt;a href=&quot;https://www.basemap.at&quot;&gt;basemap.at&lt;/a&gt;',
				subdomains: ['', '1', '2', '3', '4'],
				format: 'png',
				bounds: [[46.358770, 8.782379], [49.037872, 17.189532]],
				variant: 'geolandbasemap'
			},
			variants: {
				basemap: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'geolandbasemap'
					}
				},
				grau: 'bmapgrau',
				overlay: 'bmapoverlay',
				highdpi: {
					options: {
						variant: 'bmaphidpi',
						format: 'jpeg'
					}
				},
				orthofoto: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'bmaporthofoto30cm',
						format: 'jpeg'
					}
				}
			}
		},
		nlmaps: {
			url: 'https://geodata.nationaalgeoregister.nl/tiles/service/wmts/{variant}/EPSG:3857/{z}/{x}/{y}.png',
			options: {
				minZoom: 6,
				maxZoom: 19,
				bounds: [[50.5, 3.25], [54, 7.6]],
				attribution: 'Kaartgegevens &amp;copy; &lt;a href=&quot;kadaster.nl&quot;&gt;Kadaster&lt;/a&gt;'
			},
			variants: {
				'standaard': 'brtachtergrondkaart',
				'pastel': 'brtachtergrondkaartpastel',
				'grijs': 'brtachtergrondkaartgrijs',
				'luchtfoto': {
					'url': 'https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts/1.0.0/2016_ortho25/EPSG:3857/{z}/{x}/{y}.png',
				}
			}
		},
		NASAGIBS: {
			url: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}',
			options: {
				attribution:
					'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' +
					'(&lt;a href=&quot;https://earthdata.nasa.gov&quot;&gt;ESDIS&lt;/a&gt;) with funding provided by NASA/HQ.',
				bounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]],
				minZoom: 1,
				maxZoom: 9,
				format: 'jpg',
				time: '',
				tilematrixset: 'GoogleMapsCompatible_Level'
			},
			variants: {
				ModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor',
				ModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367',
				ViirsEarthAtNight2012: {
					options: {
						variant: 'VIIRS_CityLights_2012',
						maxZoom: 8
					}
				},
				ModisTerraLSTDay: {
					options: {
						variant: 'MODIS_Terra_Land_Surface_Temp_Day',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				},
				ModisTerraSnowCover: {
					options: {
						variant: 'MODIS_Terra_Snow_Cover',
						format: 'png',
						maxZoom: 8,
						opacity: 0.75
					}
				},
				ModisTerraAOD: {
					options: {
						variant: 'MODIS_Terra_Aerosol',
						format: 'png',
						maxZoom: 6,
						opacity: 0.75
					}
				},
				ModisTerraChlorophyll: {
					options: {
						variant: 'MODIS_Terra_Chlorophyll_A',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				}
			}
		},
		NLS: {
			// NLS maps are copyright National library of Scotland.
			// http://maps.nls.uk/projects/api/index.html
			// Please contact NLS for anything other than non-commercial low volume usage
			//
			// Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s
			//   z0-9  - 1:1m
			//  z10-11 - quarter inch (1:253440)
			//  z12-18 - one inch (1:63360)
			url: 'https://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg',
			options: {
				attribution: '&lt;a href=&quot;http://geo.nls.uk/maps/&quot;&gt;National Library of Scotland Historic Maps&lt;/a&gt;',
				bounds: [[49.6, -12], [61.7, 3]],
				minZoom: 1,
				maxZoom: 18,
				subdomains: '0123',
			}
		},
		JusticeMap: {
			// Justice Map (http://www.justicemap.org/)
			// Visualize race and income data for your community, county and country.
			// Includes tools for data journalists, bloggers and community activists.
			url: 'http://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png',
			options: {
				attribution: '&lt;a href=&quot;http://www.justicemap.org/terms.php&quot;&gt;Justice Map&lt;/a&gt;',
				// one of 'county', 'tract', 'block'
				size: 'county',
				// Bounds for USA, including Alaska and Hawaii
				bounds: [[14, -180], [72, -56]]
			},
			variants: {
				income: 'income',
				americanIndian: 'indian',
				asian: 'asian',
				black: 'black',
				hispanic: 'hispanic',
				multi: 'multi',
				nonWhite: 'nonwhite',
				white: 'white',
				plurality: 'plural'
			}
		},
		Wikimedia: {
			url: 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '&lt;a href=&quot;https://wikimediafoundation.org/wiki/Maps_Terms_of_Use&quot;&gt;Wikimedia&lt;/a&gt;',
				minZoom: 1,
				maxZoom: 19
			}
		},
		GeoportailFrance: {
			url: 'https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&amp;SERVICE=WMTS&amp;VERSION=1.0.0&amp;STYLE={style}&amp;TILEMATRIXSET=PM&amp;FORMAT={format}&amp;LAYER={variant}&amp;TILEMATRIX={z}&amp;TILEROW={y}&amp;TILECOL={x}',
			options: {
				attribution: '&lt;a target=&quot;_blank&quot; href=&quot;https://www.geoportail.gouv.fr/&quot;&gt;Geoportail France&lt;/a&gt;',
				bounds: [[-75, -180], [81, 180]],
				minZoom: 2,
				maxZoom: 18,
				// Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/
				// NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee
				apikey: 'choisirgeoportail',
				format: 'image/jpeg',
				style : 'normal',
				variant: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD'
			},
			variants: {
				parcels: {
					options : {
						variant: 'CADASTRALPARCELS.PARCELS',
						maxZoom: 20,
						style : 'bdparcellaire',
						format: 'image/png'
					}
				},
				ignMaps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS',
				maps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD',
				orthos: {
					options: {
						maxZoom: 19,
						variant: 'ORTHOIMAGERY.ORTHOPHOTOS'
					}
				}
			}
		},
		OneMapSG: {
			url: 'https://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png',
			options: {
				variant: 'Default',
				minZoom: 11,
				maxZoom: 18,
				bounds: [[1.56073, 104.11475], [1.16, 103.502]],
				attribution: '&lt;img src=&quot;https://docs.onemap.sg/maps/images/oneMap64-01.png&quot; style=&quot;height:20px;width:20px;&quot;/&gt; New OneMap | Map data &amp;copy; contributors, &lt;a href=&quot;http://SLA.gov.sg&quot;&gt;Singapore Land Authority&lt;/a&gt;'
			},
			variants: {
				Default: 'Default',
				Night: 'Night',
				Original: 'Original',
				Grey: 'Grey',
				LandLot: 'LandLot'
			}
		}
	};

	L.tileLayer.provider = function (provider, options) {
		return new L.TileLayer.Provider(provider, options);
	};

	return L;
}));
`;
            if(!document.getElementById(provEl.id)){
                 document.head.appendChild(provEl);        
            }
            _createMap();
            }
        esriEl.src = esriLeafletCdn + &quot;esri-leaflet.js&quot;;
        addToHeadIfNotLoaded(esriEl);
        };
    leafletJsEl.src = leafletCdn + &quot;leaflet.js&quot;;
    addToHeadIfNotLoaded(leafletJsEl);
})();
&lt;/script&gt;

&lt;p&gt;In preparation for our upcoming Mount Whitney adventure, we hiked our first 14,000+ foot mountain (“fourteener”), Mount Langley.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-langley/group.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-langley/group.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;Left to right: David, Olivia, Kaleb, Sam, Vish&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-langley/sleepy-bois.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-langley/sleepy-bois.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;This was an arduous 20+ mile/~5000 foot elevation gain hike, ending at an elevation of 14,042 feet. Nearby Mount Whitney is a similar distance/elevation hike to the top, making this a perfect training hike. The trail itself goes through Cottonwood Lakes, what was supposed to be the end of my &lt;a href=&quot;/blog/travel/misc/backpacking/cottonwood-pass&quot;&gt;Cottonwood Pass&lt;/a&gt; backpacking journey if not for the snow at the time. Glad I could explore the area now with all snow was cleared!&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-langley/down-1.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-langley/down-1.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-langley/group-2.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-langley/group-2.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The hike itself was absolutely beautiful, even if grueling. The relaxing calm of Cottonwood lakes and the nearby meadows are quickly forgotten as you struggle your way up the steep Old Army Pass. The 12,000 foot height of the pass gives you just enough “altitude silliness” to push through that soul-testing last push to the top of Mount Langley.&lt;/p&gt;

&lt;p&gt;As we said on the trail, what is said above 12,000 feet stays above 12,000 feet! ;)&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/mt-langley/nali.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/mt-langley/nali.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;I had such a fun time completing this hike, and I now feel much more confident for Whitney. We have been training for Whitney all summer, I can’t wait to give it our best shot and reap the rewards of our hard efforts. Wish us luck!&lt;/p&gt;</content><author><name>David Vitale</name></author><category term="travel" /><category term="misc" /><category term="day-hikes" /><summary type="html"></summary></entry><entry><title type="html">Yellowstone &amp;amp; Teton Family Trip</title><link href="/blog/travel/misc/yellowstone-family" rel="alternate" type="text/html" title="Yellowstone &amp; Teton Family Trip" /><published>2020-06-29T00:00:00-07:00</published><updated>2020-06-29T00:00:00-07:00</updated><id>/blog/travel/misc/yellowstone-family</id><content type="html" xml:base="/blog/travel/misc/yellowstone-family">&lt;div id=&quot;leaflet-map-a7298dd66cb21a44b153cf07fe66f538&quot; class=&quot;leaflet-map&quot;&gt;&lt;/div&gt;
&lt;script&gt;(() =&gt; {
// Specify configuration variables, setup any elements and styling
    var leafletCdn = &quot;https://unpkg.com/leaflet@1.6.0/dist/&quot;;
    var esriLeafletCdn = &quot;https://unpkg.com/esri-leaflet/dist/&quot;;

    // Get tag input arguments &amp; inside block object list
    var tagInputArg = {&quot;zoom&quot; : 8 ,
                &quot;center&quot;: [44.210455, -110.624862]} ;
    var blockLeafletItems = [
    {id: &quot;531556505cf4d2c35b22dc0184e286b2&quot;,
              type: &quot;LeafletMarker&quot;,
              value: {&quot;latitude&quot; : 43.902608,
                       &quot;longitude&quot; : -110.643596,
                       &quot;popupContent&quot;: &quot;Grand Teton National Park&quot; } }, 
    {id: &quot;3eace575961f2663a0744313693b4607&quot;,
              type: &quot;LeafletMarker&quot;,
              value: {&quot;latitude&quot; : 44.395135,
                       &quot;longitude&quot; : -110.56282,
                       &quot;popupContent&quot;: &quot;Yellowstone National Park&quot; } }, 

];

    // Override the map div id if specified, apply default CSS
    var defaultMapElId = &quot;leaflet-map-a7298dd66cb21a44b153cf07fe66f538&quot;;
   var defaultMapElStyle = &quot;height:300px; margin-top:15px; margin-bottom:15px&quot;;
    var mapEl = document.getElementById(defaultMapElId);
    if('divId' in tagInputArg){
        mapEl.id = tagInputArg['divId'];
    }
    var defaultMapCssEl = document.createElement(&quot;style&quot;);
    defaultMapCssEl.innerHTML = 
        &quot;#&quot; + defaultMapElId + &quot;{&quot; + defaultMapElStyle + &quot;}&quot;;
    document.head.appendChild(defaultMapCssEl);

    var newWindowImgSrcBase64 = &quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH4wUVFzAHq2j99AAAAV9JREFUSMdjYKAxYCRHk5ubG9+1a9fm/v//H6cadnb2G/fu3atlIceC379/c3z9+jUEn5q/f/8eYWBgYECxQE5OroqA2Y8ePXq0hJWV9Qc3N/caZB8wMjJKff361QpvEAkKCv4nYMGh9+/f26MLamhoyLx9+3b/nz9/VJCC6MiLFy9sWXCE3xlGRsZvWKQu4DOciYnpCzc396HPnz97weRxWRD/8OHDa4TiAt1wfn5+z79//zoxMDDALWAiN/lhM/zevXtH0NUx0dJwsiwgxXCccUCJ4dzc3DP+//+/gZ2d/duLFy9Is+Djx4+rCbn82rVrrxgYGF6RFUR8fHyZbGxsD7AZLiEhUSAiIrJSUlIyjOw4uHnz5gVHR0d1bC7/8+eP5d+/f8P+/PmjS1Ekr1ix4hcp6ploXVwPfQuwJlMmJiYBLS0tIVIMev36NRvRFnz48OHohw8fhkYQjQKCAAChiL6Pj/LM2QAAAABJRU5ErkJggg==&quot;;

// Actual mapping section; Specify a function to be called later that 
// assembles the correct JS components based on what the user specified in the 
// tag input arg, the block section of features, etc. Actually creates the map
// that is visible on the page

    function _getCenter(){
        var defaultCenter = [0,0];
        if(&quot;center&quot; in tagInputArg){
            return tagInputArg.center;
        } else {
            return defaultCenter;
        }
    }

    function _getZoom(){
        var defaultZoom = 1;
        if(&quot;zoom&quot; in tagInputArg){
            return tagInputArg.zoom
        } else {
            return defaultZoom;
        }
    }

    function _getProviderBasemap(){
        var defaultProviderBasemap = &quot;OpenStreetMap.Mapnik&quot;;
        if(&quot;providerBasemap&quot; in tagInputArg){
            return tagInputArg.providerBasemap;
        } else {
            return defaultProviderBasemap;
        }
    }


    function _addMarkerToMap(leafletItem, map){
        var m = leafletItem.value;
        var result = L.marker([m.latitude, m.longitude]).addTo(map);
        var potentialPopup = &quot;&quot;;
        if('popupContent' in m){
                potentialPopup += m.popupContent;}
        if('href' in m){
            potentialPopup += '&lt;a href=&quot;' + m.href + '&quot;&gt;' + 
                '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            result.bindPopup(potentialPopup);}
        if(!('center' in tagInputArg)){
            // If the user didn't specify a center, infer from marker
            map.panTo(new L.LatLng(m.latitude, m.longitude));
        }
    }

    function _onEachFeature(feature, layer){
        var potentialPopup = &quot;&quot;
        if(feature.properties &amp;&amp; feature.properties.popupContent){
            potentialPopup += feature.properties.popupContent;
        }
        if(feature.properties &amp;&amp; feature.properties.href){
            potentialPopup += 
                '&lt;a href=&quot;' + feature.properties.href + '&quot;&gt;' + 
                    '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            layer.bindPopup(potentialPopup);
        }
    }

    function _addGeoJSONToMap(leafletItem, map){
        if(typeof leafletItem.value === &quot;string&quot;){
            fetch(leafletItem.value).then((resp) =&gt; {
                return resp.json();
            }).then((data) =&gt; {
                leafletItem.value = data;
                _addGeoJSONObjToMap(leafletItem, map);
            }).catch((err) =&gt; {
                console.log(&quot;Encountered err w/ geojson, attempting to fix..&quot;);
                console.log(err);
                _addGeoJSONObjToMap(leafletItem, map);
            });
        } else {
            _addGeoJSONObjToMap(leafletItem, map);
        }
     }

    function _addGeoJSONObjToMap(leafletItem, map){
         var geojson = L.geoJSON(leafletItem.value, { 
            onEachFeature: _onEachFeature 
        });
        layers = geojson.getLayers();
        for(var i=0; i&lt;layers.length; i++){
            try{
                var geom = layers[i].feature.geometry;
                if(!('center' in tagInputArg)){
                    // If the user didn't specify a center, infer from geojson
                    //console.log(&quot;panning to &quot; + geom.coordinates);
                    map.panTo(new L.LatLng(geom.coordinates[1],
                                           geom.coordinates[0]));
                }
            } catch(e){}
        }
       
        geojson.addTo(map);
       
    }

    function _processLeafletItem(leafletItem, map){
        switch(leafletItem.type){
            case &quot;LeafletMarker&quot;:
                _addMarkerToMap(leafletItem, map);
                break;
            case &quot;LeafletGeoJSON&quot;:
                _addGeoJSONToMap(leafletItem, map);
                break;
            case undefined:
                break; 
            default:
                console.log(&quot;Couldn't add item &quot; + leafletItem.id);
                break;
        }
    }

//The actual section that is called that creates a map
    function createMap(){
        console.log(&quot;Creating map a7298dd66cb21a44b153cf07fe66f538 with these args:&quot;);
        console.log(tagInputArg);

        //Initialize Map with the correct input arguments
        var map = L.map(mapEl.id, 
            {worldCopyJump: true}).setView(_getCenter(), _getZoom());
        L.tileLayer.provider(_getProviderBasemap()).addTo(map);
        if(&quot;esriBasemap&quot; in tagInputArg){
            L.esri.basemapLayer(tagInputArg.esriBasemap).addTo(map);
        }

        //process each Leaflet Item passed in between the block tag middle
        for(var i=0; i&lt;blockLeafletItems.length; i++){
            var leafletItem = blockLeafletItems[i];
            console.log(&quot;Adding leaflet item &quot; + leafletItem.id + &quot;:&quot;);
            console.log(leafletItem);
            _processLeafletItem(leafletItem, map);
        }
    }

// Load the correct JS libraries/CSS by adding to head: 
// When ready, call createMap() to create the map on the page

    function _createMap(){
        // helper function to draw the map only when everything is loaded,
        // safeguards against multiple calls to window.onload
        var prevOnLoad;
        if(window.onload){
            prevOnLoad = window.onload;
        }
        window.onload = () =&gt; {
            createMap();
            if(prevOnLoad){
                prevOnLoad();
            }
        }
    }

    var leafletCssId = &quot;leaflet-css-head&quot;;
    var leafletJsId = &quot;leaflet-js-head&quot;;
    var esriLeafletJsId = &quot;esri-leaflet-js-head&quot;;
    var leafletProvidersJsId = &quot;leaflet-providers-js-head&quot;;

    // Add the leaflet CSS first, don't worry about when it loads
    var leafletCssEl = document.createElement(&quot;link&quot;);
    leafletCssEl.id = leafletCssId;
    leafletCssEl.rel = &quot;stylesheet&quot;;
    leafletCssEl.href = leafletCdn + &quot;leaflet.css&quot;;
    if(!document.getElementById(leafletCssEl.id)){
        document.head.appendChild(leafletCssEl);
    }

    function addToHeadIfNotLoaded(el) {
        //Add the el to the head if it doesn't exist already. If it does,
        //everything we need is already loaded, so draw the map
        if(!document.getElementById(el.id)){
            document.head.appendChild(el);
        } else {
            _createMap();
        }
    }

    // Load the main leaflet.js code, wait for it to load
    var leafletJsEl = document.createElement(&quot;script&quot;);
    leafletJsEl.id = leafletJsId;
    leafletJsEl.onload = () =&gt; {
        //After loaded, load the esri-leaflet.js code, wait for it to load
        var esriEl = document.createElement(&quot;script&quot;);
        esriEl.id = esriLeafletJsId;
        esriEl.onload = () =&gt; {
            //After loaded, add the inline leaflet-providers &lt;script&gt;
            provEl = document.createElement(&quot;script&quot;);
            provEl.id = leafletProvidersJsId;
            provEl.innerHTML = `//Taken from https://github.com/leaflet-extras/leaflet-providers
(function (root, factory) {
	if (typeof define === 'function' &amp;&amp; define.amd) {
		// AMD. Register as an anonymous module.
		define(['leaflet'], factory);
	} else if (typeof modules === 'object' &amp;&amp; module.exports) {
		// define a Common JS module that relies on 'leaflet'
		module.exports = factory(require('leaflet'));
	} else {
		// Assume Leaflet is loaded into global object L already
		factory(L);
	}
}(this, function (L) {
	'use strict';

	L.TileLayer.Provider = L.TileLayer.extend({
		initialize: function (arg, options) {
			var providers = L.TileLayer.Provider.providers;

			var parts = arg.split('.');

			var providerName = parts[0];
			var variantName = parts[1];

			if (!providers[providerName]) {
				throw 'No such provider (' + providerName + ')';
			}

			var provider = {
				url: providers[providerName].url,
				options: providers[providerName].options
			};

			// overwrite values in provider from variant.
			if (variantName &amp;&amp; 'variants' in providers[providerName]) {
				if (!(variantName in providers[providerName].variants)) {
					throw 'No such variant of ' + providerName + ' (' + variantName + ')';
				}
				var variant = providers[providerName].variants[variantName];
				var variantOptions;
				if (typeof variant === 'string') {
					variantOptions = {
						variant: variant
					};
				} else {
					variantOptions = variant.options;
				}
				provider = {
					url: variant.url || provider.url,
					options: L.Util.extend({}, provider.options, variantOptions)
				};
			}

			// replace attribution placeholders with their values from toplevel provider attribution,
			// recursively
			var attributionReplacer = function (attr) {
				if (attr.indexOf('{attribution.') === -1) {
					return attr;
				}
				return attr.replace(/\{attribution.(\w*)\}/g,
					function (match, attributionName) {
						return attributionReplacer(providers[attributionName].options.attribution);
					}
				);
			};
			provider.options.attribution = attributionReplacer(provider.options.attribution);

			// Compute final options combining provider options with any user overrides
			var layerOpts = L.Util.extend({}, provider.options, options);
			L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts);
		}
	});

	/**
	 * Definition of providers.
	 * see http://leafletjs.com/reference.html#tilelayer for options in the options map.
	 */

	L.TileLayer.Provider.providers = {
		OpenStreetMap: {
			url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution:
					'&amp;copy; &lt;a href=&quot;https://www.openstreetmap.org/copyright&quot;&gt;OpenStreetMap&lt;/a&gt; contributors'
			},
			variants: {
				Mapnik: {},
				DE: {
					url: 'https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18
					}
				},
				CH: {
					url: 'https://tile.osm.ch/switzerland/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18,
						bounds: [[45, 5], [48, 11]]
					}
				},
				France: {
					url: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png',
					options: {
						maxZoom: 20,
						attribution: '&amp;copy; Openstreetmap France | {attribution.OpenStreetMap}'
					}
				},
				HOT: {
					url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',
					options: {
						attribution:
							'{attribution.OpenStreetMap}, ' +
							'Tiles style by &lt;a href=&quot;https://www.hotosm.org/&quot; target=&quot;_blank&quot;&gt;Humanitarian OpenStreetMap Team&lt;/a&gt; ' +
							'hosted by &lt;a href=&quot;https://openstreetmap.fr/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap France&lt;/a&gt;'
					}
				},
				BZH: {
					url: 'https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png',
					options: {
						attribution: '{attribution.OpenStreetMap}, Tiles courtesy of &lt;a href=&quot;http://www.openstreetmap.bzh/&quot; target=&quot;_blank&quot;&gt;Breton OpenStreetMap Team&lt;/a&gt;',
						bounds: [[46.2, -5.5], [50, 0.7]]
					}
				}
			}
		},
		OpenSeaMap: {
			url: 'https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png',
			options: {
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openseamap.org&quot;&gt;OpenSeaMap&lt;/a&gt; contributors'
			}
		},
		OpenPtMap: {
			url: 'http://openptmap.org/tiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openptmap.org&quot;&gt;OpenPtMap&lt;/a&gt; contributors'
			}
		},
		OpenTopoMap: {
			url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: {attribution.OpenStreetMap}, &lt;a href=&quot;http://viewfinderpanoramas.org&quot;&gt;SRTM&lt;/a&gt; | Map style: &amp;copy; &lt;a href=&quot;https://opentopomap.org&quot;&gt;OpenTopoMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenRailwayMap: {
			url: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://www.OpenRailwayMap.org&quot;&gt;OpenRailwayMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenFireMap: {
			url: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;http://www.openfiremap.org&quot;&gt;OpenFireMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		SafeCast: {
			url: 'https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 16,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://blog.safecast.org/about/&quot;&gt;SafeCast&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		Thunderforest: {
			url: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}',
			options: {
				attribution:
					'&amp;copy; &lt;a href=&quot;http://www.thunderforest.com/&quot;&gt;Thunderforest&lt;/a&gt;, {attribution.OpenStreetMap}',
				variant: 'cycle',
				apikey: '&lt;insert your api key here&gt;',
				maxZoom: 22
			},
			variants: {
				OpenCycleMap: 'cycle',
				Transport: {
					options: {
						variant: 'transport'
					}
				},
				TransportDark: {
					options: {
						variant: 'transport-dark'
					}
				},
				SpinalMap: {
					options: {
						variant: 'spinal-map'
					}
				},
				Landscape: 'landscape',
				Outdoors: 'outdoors',
				Pioneer: 'pioneer'
			}
		},
		OpenMapSurfer: {
			url: 'https://maps.heigit.org/openmapsurfer/tiles/{variant}/webmercator/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				variant: 'roads',
				attribution: 'Imagery from &lt;a href=&quot;http://giscience.uni-hd.de/&quot;&gt;GIScience Research Group @ University of Heidelberg&lt;/a&gt; | Map data '
			},
			variants: {
				Roads: {
					options: {
						variant: 'roads',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				Hybrid: {
					options: {
						variant: 'hybrid',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				AdminBounds: {
					options: {
						variant: 'adminb',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				ContourLines: {
					options: {
						variant: 'asterc',
						maxZoom: 18,
						minZoom: 13,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;'
					}
				},
				Hillshade: {
					options: {
						variant: 'asterh',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;, &lt;a href=&quot;http://srtm.csi.cgiar.org/&quot;&gt;SRTM&lt;/a&gt;'
					}
				},
				ElementsAtRisk: {
					options: {
						variant: 'elements_at_risk',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				}
			}
		},
		Hydda: {
			url: 'https://{s}.tile.openstreetmap.se/hydda/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 18,
				variant: 'full',
				attribution: 'Tiles courtesy of &lt;a href=&quot;http://openstreetmap.se/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap Sweden&lt;/a&gt; &amp;mdash; Map data {attribution.OpenStreetMap}'
			},
			variants: {
				Full: 'full',
				Base: 'base',
				RoadsAndLabels: 'roads_and_labels'
			}
		},
		MapBox: {
			url: 'https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}{r}.png?access_token={accessToken}',
			options: {
				attribution:
					'&lt;a href=&quot;https://www.mapbox.com/about/maps/&quot; target=&quot;_blank&quot;&gt;&amp;copy; Mapbox&lt;/a&gt; ' +
					'{attribution.OpenStreetMap} ' +
					'&lt;a href=&quot;https://www.mapbox.com/map-feedback/&quot; target=&quot;_blank&quot;&gt;Improve this map&lt;/a&gt;',
				subdomains: 'abcd',
				id: 'mapbox.streets',
				accessToken: '&lt;insert your access token here&gt;',
			}
		},
		Stamen: {
			url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}{r}.{ext}',
			options: {
				attribution:
					'Map tiles by &lt;a href=&quot;http://stamen.com&quot;&gt;Stamen Design&lt;/a&gt;, ' +
					'&lt;a href=&quot;http://creativecommons.org/licenses/by/3.0&quot;&gt;CC BY 3.0&lt;/a&gt; &amp;mdash; ' +
					'Map data {attribution.OpenStreetMap}',
				subdomains: 'abcd',
				minZoom: 0,
				maxZoom: 20,
				variant: 'toner',
				ext: 'png'
			},
			variants: {
				Toner: 'toner',
				TonerBackground: 'toner-background',
				TonerHybrid: 'toner-hybrid',
				TonerLines: 'toner-lines',
				TonerLabels: 'toner-labels',
				TonerLite: 'toner-lite',
				Watercolor: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'watercolor',
						ext: 'jpg',
						minZoom: 1,
						maxZoom: 16
					}
				},
				Terrain: {
					options: {
						variant: 'terrain',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TerrainBackground: {
					options: {
						variant: 'terrain-background',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TopOSMRelief: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'toposm-color-relief',
						ext: 'jpg',
						bounds: [[22, -132], [51, -56]]
					}
				},
				TopOSMFeatures: {
					options: {
						variant: 'toposm-features',
						bounds: [[22, -132], [51, -56]],
						opacity: 0.9
					}
				}
			}
		},
		Esri: {
			url: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}',
			options: {
				variant: 'World_Street_Map',
				attribution: 'Tiles &amp;copy; Esri'
			},
			variants: {
				WorldStreetMap: {
					options: {
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'
					}
				},
				DeLorme: {
					options: {
						variant: 'Specialty/DeLorme_World_Base_Map',
						minZoom: 1,
						maxZoom: 11,
						attribution: '{attribution.Esri} &amp;mdash; Copyright: &amp;copy;2012 DeLorme'
					}
				},
				WorldTopoMap: {
					options: {
						variant: 'World_Topo_Map',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community'
					}
				},
				WorldImagery: {
					options: {
						variant: 'World_Imagery',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
					}
				},
				WorldTerrain: {
					options: {
						variant: 'World_Terrain_Base',
						maxZoom: 13,
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: USGS, Esri, TANA, DeLorme, and NPS'
					}
				},
				WorldShadedRelief: {
					options: {
						variant: 'World_Shaded_Relief',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Source: Esri'
					}
				},
				WorldPhysical: {
					options: {
						variant: 'World_Physical_Map',
						maxZoom: 8,
						attribution: '{attribution.Esri} &amp;mdash; Source: US National Park Service'
					}
				},
				OceanBasemap: {
					options: {
						variant: 'Ocean_Basemap',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri'
					}
				},
				NatGeoWorldMap: {
					options: {
						variant: 'NatGeo_World_Map',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC'
					}
				},
				WorldGrayCanvas: {
					options: {
						variant: 'Canvas/World_Light_Gray_Base',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; Esri, DeLorme, NAVTEQ'
					}
				}
			}
		},
		OpenWeatherMap: {
			url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}',
			options: {
				maxZoom: 19,
				attribution: 'Map data &amp;copy; &lt;a href=&quot;http://openweathermap.org&quot;&gt;OpenWeatherMap&lt;/a&gt;',
				apiKey:'&lt;insert your api key here&gt;',
				opacity: 0.5
			},
			variants: {
				Clouds: 'clouds',
				CloudsClassic: 'clouds_cls',
				Precipitation: 'precipitation',
				PrecipitationClassic: 'precipitation_cls',
				Rain: 'rain',
				RainClassic: 'rain_cls',
				Pressure: 'pressure',
				PressureContour: 'pressure_cntr',
				Wind: 'wind',
				Temperature: 'temp',
				Snow: 'snow'
			}
		},
		HERE: {
			/*
			 * HERE maps, formerly Nokia maps.
			 * These basemaps are free, but you need an API key. Please sign up at
			 * https://developer.here.com/plans
			 */
			url:
				'https://{s}.{base}.maps.api.here.com/maptile/2.1/' +
				'{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' +
				'app_id={app_id}&amp;app_code={app_code}&amp;lg={language}',
			options: {
				attribution:
					'Map &amp;copy; 1987-' + new Date().getFullYear() + ' &lt;a href=&quot;http://developer.here.com&quot;&gt;HERE&lt;/a&gt;',
				subdomains: '1234',
				mapID: 'newest',
				'app_id': '&lt;insert your app_id here&gt;',
				'app_code': '&lt;insert your app_code here&gt;',
				base: 'base',
				variant: 'normal.day',
				maxZoom: 20,
				type: 'maptile',
				language: 'eng',
				format: 'png8',
				size: '256'
			},
			variants: {
				normalDay: 'normal.day',
				normalDayCustom: 'normal.day.custom',
				normalDayGrey: 'normal.day.grey',
				normalDayMobile: 'normal.day.mobile',
				normalDayGreyMobile: 'normal.day.grey.mobile',
				normalDayTransit: 'normal.day.transit',
				normalDayTransitMobile: 'normal.day.transit.mobile',
				normalNight: 'normal.night',
				normalNightMobile: 'normal.night.mobile',
				normalNightGrey: 'normal.night.grey',
				normalNightGreyMobile: 'normal.night.grey.mobile',
				normalNightTransit: 'normal.night.transit',
				normalNightTransitMobile: 'normal.night.transit.mobile',
				reducedDay: 'reduced.day',
				reducedNight: 'reduced.night',
				basicMap: {
					options: {
						type: 'basetile'
					}
				},
				mapLabels: {
					options: {
						type: 'labeltile',
						format: 'png'
					}
				},
				trafficFlow: {
					options: {
						base: 'traffic',
						type: 'flowtile'
					}
				},
				carnavDayGrey: 'carnav.day.grey',
				hybridDay: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day'
					}
				},
				hybridDayMobile: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.mobile'
					}
				},
				hybridDayTransit: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.transit'
					}
				},
				hybridDayGrey: {
					options: {
						base: 'aerial',
						variant: 'hybrid.grey.day'
					}
				},
				pedestrianDay: 'pedestrian.day',
				pedestrianNight: 'pedestrian.night',
				satelliteDay: {
					options: {
						base: 'aerial',
						variant: 'satellite.day'
					}
				},
				terrainDay: {
					options: {
						base: 'aerial',
						variant: 'terrain.day'
					}
				},
				terrainDayMobile: {
					options: {
						base: 'aerial',
						variant: 'terrain.day.mobile'
					}
				}
			}
		},
		FreeMapSK: {
			url: 'http://t{s}.freemap.sk/T/{z}/{x}/{y}.jpeg',
			options: {
				minZoom: 8,
				maxZoom: 16,
				subdomains: '1234',
				bounds: [[47.204642, 15.996093], [49.830896, 22.576904]],
				attribution:
					'{attribution.OpenStreetMap}, vizualization CC-By-SA 2.0 &lt;a href=&quot;http://freemap.sk&quot;&gt;Freemap.sk&lt;/a&gt;'
			}
		},
		MtbMap: {
			url: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png',
			options: {
				attribution:
					'{attribution.OpenStreetMap} &amp;amp; USGS'
			}
		},
		CartoDB: {
			url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '{attribution.OpenStreetMap} &amp;copy; &lt;a href=&quot;https://carto.com/attributions&quot;&gt;CARTO&lt;/a&gt;',
				subdomains: 'abcd',
				maxZoom: 19,
				variant: 'light_all'
			},
			variants: {
				Positron: 'light_all',
				PositronNoLabels: 'light_nolabels',
				PositronOnlyLabels: 'light_only_labels',
				DarkMatter: 'dark_all',
				DarkMatterNoLabels: 'dark_nolabels',
				DarkMatterOnlyLabels: 'dark_only_labels',
				Voyager: 'rastertiles/voyager',
				VoyagerNoLabels: 'rastertiles/voyager_nolabels',
				VoyagerOnlyLabels: 'rastertiles/voyager_only_labels',
				VoyagerLabelsUnder: 'rastertiles/voyager_labels_under'
			}
		},
		HikeBike: {
			url: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: '{attribution.OpenStreetMap}',
				variant: 'hikebike'
			},
			variants: {
				HikeBike: {},
				HillShading: {
					options: {
						maxZoom: 15,
						variant: 'hillshading'
					}
				}
			}
		},
		BasemapAT: {
			url: 'https://maps{s}.wien.gv.at/basemap/{variant}/normal/google3857/{z}/{y}/{x}.{format}',
			options: {
				maxZoom: 19,
				attribution: 'Datenquelle: &lt;a href=&quot;https://www.basemap.at&quot;&gt;basemap.at&lt;/a&gt;',
				subdomains: ['', '1', '2', '3', '4'],
				format: 'png',
				bounds: [[46.358770, 8.782379], [49.037872, 17.189532]],
				variant: 'geolandbasemap'
			},
			variants: {
				basemap: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'geolandbasemap'
					}
				},
				grau: 'bmapgrau',
				overlay: 'bmapoverlay',
				highdpi: {
					options: {
						variant: 'bmaphidpi',
						format: 'jpeg'
					}
				},
				orthofoto: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'bmaporthofoto30cm',
						format: 'jpeg'
					}
				}
			}
		},
		nlmaps: {
			url: 'https://geodata.nationaalgeoregister.nl/tiles/service/wmts/{variant}/EPSG:3857/{z}/{x}/{y}.png',
			options: {
				minZoom: 6,
				maxZoom: 19,
				bounds: [[50.5, 3.25], [54, 7.6]],
				attribution: 'Kaartgegevens &amp;copy; &lt;a href=&quot;kadaster.nl&quot;&gt;Kadaster&lt;/a&gt;'
			},
			variants: {
				'standaard': 'brtachtergrondkaart',
				'pastel': 'brtachtergrondkaartpastel',
				'grijs': 'brtachtergrondkaartgrijs',
				'luchtfoto': {
					'url': 'https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts/1.0.0/2016_ortho25/EPSG:3857/{z}/{x}/{y}.png',
				}
			}
		},
		NASAGIBS: {
			url: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}',
			options: {
				attribution:
					'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' +
					'(&lt;a href=&quot;https://earthdata.nasa.gov&quot;&gt;ESDIS&lt;/a&gt;) with funding provided by NASA/HQ.',
				bounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]],
				minZoom: 1,
				maxZoom: 9,
				format: 'jpg',
				time: '',
				tilematrixset: 'GoogleMapsCompatible_Level'
			},
			variants: {
				ModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor',
				ModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367',
				ViirsEarthAtNight2012: {
					options: {
						variant: 'VIIRS_CityLights_2012',
						maxZoom: 8
					}
				},
				ModisTerraLSTDay: {
					options: {
						variant: 'MODIS_Terra_Land_Surface_Temp_Day',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				},
				ModisTerraSnowCover: {
					options: {
						variant: 'MODIS_Terra_Snow_Cover',
						format: 'png',
						maxZoom: 8,
						opacity: 0.75
					}
				},
				ModisTerraAOD: {
					options: {
						variant: 'MODIS_Terra_Aerosol',
						format: 'png',
						maxZoom: 6,
						opacity: 0.75
					}
				},
				ModisTerraChlorophyll: {
					options: {
						variant: 'MODIS_Terra_Chlorophyll_A',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				}
			}
		},
		NLS: {
			// NLS maps are copyright National library of Scotland.
			// http://maps.nls.uk/projects/api/index.html
			// Please contact NLS for anything other than non-commercial low volume usage
			//
			// Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s
			//   z0-9  - 1:1m
			//  z10-11 - quarter inch (1:253440)
			//  z12-18 - one inch (1:63360)
			url: 'https://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg',
			options: {
				attribution: '&lt;a href=&quot;http://geo.nls.uk/maps/&quot;&gt;National Library of Scotland Historic Maps&lt;/a&gt;',
				bounds: [[49.6, -12], [61.7, 3]],
				minZoom: 1,
				maxZoom: 18,
				subdomains: '0123',
			}
		},
		JusticeMap: {
			// Justice Map (http://www.justicemap.org/)
			// Visualize race and income data for your community, county and country.
			// Includes tools for data journalists, bloggers and community activists.
			url: 'http://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png',
			options: {
				attribution: '&lt;a href=&quot;http://www.justicemap.org/terms.php&quot;&gt;Justice Map&lt;/a&gt;',
				// one of 'county', 'tract', 'block'
				size: 'county',
				// Bounds for USA, including Alaska and Hawaii
				bounds: [[14, -180], [72, -56]]
			},
			variants: {
				income: 'income',
				americanIndian: 'indian',
				asian: 'asian',
				black: 'black',
				hispanic: 'hispanic',
				multi: 'multi',
				nonWhite: 'nonwhite',
				white: 'white',
				plurality: 'plural'
			}
		},
		Wikimedia: {
			url: 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '&lt;a href=&quot;https://wikimediafoundation.org/wiki/Maps_Terms_of_Use&quot;&gt;Wikimedia&lt;/a&gt;',
				minZoom: 1,
				maxZoom: 19
			}
		},
		GeoportailFrance: {
			url: 'https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&amp;SERVICE=WMTS&amp;VERSION=1.0.0&amp;STYLE={style}&amp;TILEMATRIXSET=PM&amp;FORMAT={format}&amp;LAYER={variant}&amp;TILEMATRIX={z}&amp;TILEROW={y}&amp;TILECOL={x}',
			options: {
				attribution: '&lt;a target=&quot;_blank&quot; href=&quot;https://www.geoportail.gouv.fr/&quot;&gt;Geoportail France&lt;/a&gt;',
				bounds: [[-75, -180], [81, 180]],
				minZoom: 2,
				maxZoom: 18,
				// Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/
				// NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee
				apikey: 'choisirgeoportail',
				format: 'image/jpeg',
				style : 'normal',
				variant: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD'
			},
			variants: {
				parcels: {
					options : {
						variant: 'CADASTRALPARCELS.PARCELS',
						maxZoom: 20,
						style : 'bdparcellaire',
						format: 'image/png'
					}
				},
				ignMaps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS',
				maps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD',
				orthos: {
					options: {
						maxZoom: 19,
						variant: 'ORTHOIMAGERY.ORTHOPHOTOS'
					}
				}
			}
		},
		OneMapSG: {
			url: 'https://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png',
			options: {
				variant: 'Default',
				minZoom: 11,
				maxZoom: 18,
				bounds: [[1.56073, 104.11475], [1.16, 103.502]],
				attribution: '&lt;img src=&quot;https://docs.onemap.sg/maps/images/oneMap64-01.png&quot; style=&quot;height:20px;width:20px;&quot;/&gt; New OneMap | Map data &amp;copy; contributors, &lt;a href=&quot;http://SLA.gov.sg&quot;&gt;Singapore Land Authority&lt;/a&gt;'
			},
			variants: {
				Default: 'Default',
				Night: 'Night',
				Original: 'Original',
				Grey: 'Grey',
				LandLot: 'LandLot'
			}
		}
	};

	L.tileLayer.provider = function (provider, options) {
		return new L.TileLayer.Provider(provider, options);
	};

	return L;
}));
`;
            if(!document.getElementById(provEl.id)){
                 document.head.appendChild(provEl);        
            }
            _createMap();
            }
        esriEl.src = esriLeafletCdn + &quot;esri-leaflet.js&quot;;
        addToHeadIfNotLoaded(esriEl);
        };
    leafletJsEl.src = leafletCdn + &quot;leaflet.js&quot;;
    addToHeadIfNotLoaded(leafletJsEl);
})();
&lt;/script&gt;

&lt;p&gt;This summer I took a week long roadtrip with my family to Yellowstone and Teton National Parks. I had been here &lt;a href=&quot;/blog/travel/alaska-roadtrip/yellowstone&quot;&gt;once before&lt;/a&gt;, but it was Matthew, Olivia, Allison, and Indhu’s first time there. (Plus, Matthew/Olivia/Allison’s first time camping!). I had a great time and made some great memories to last a lifetime, thanks all :)&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/misc-travel/yellowstone-family/yellowstone-4.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/misc-travel/yellowstone-family/yellowstone-4.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/misc-travel/yellowstone-family/camp.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/misc-travel/yellowstone-family/camp.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;grand-tetons&quot;&gt;Grand Tetons&lt;/h2&gt;

&lt;p&gt;We started out our trips in “Tent Cabins” in Colter Bay Village in the Tetons. These structures had bunk beds and wood burning stove, which was very useful for the first few cold and rainy days of our trip.&lt;/p&gt;

&lt;p&gt;We spent most of our time in the Tetons hiking miscellaneous trails, and spent 1 day canoeing around the Colter Bay (one of my favorite days). The Tetons are much less crowded than Yellowstone, which makes this underrated park worth spending a few days in (even if it doesn’t have any thermals).&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/misc-travel/yellowstone-family/teton-1.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/misc-travel/yellowstone-family/teton-1.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/misc-travel/yellowstone-family/teton-2.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/misc-travel/yellowstone-family/teton-2.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/misc-travel/yellowstone-family/teton-3.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/misc-travel/yellowstone-family/teton-3.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;yellowstone&quot;&gt;Yellowstone&lt;/h2&gt;

&lt;p&gt;We stayed in Grant Village in Yellowstone, spending most of our time here looking at the different thermals. Old Faithful and Grand Geyser were two amazing sites that did not disappoint. All around a great experience!&lt;/p&gt;

&lt;p&gt;Our last day in camp was Indhu’s birthday, so we enjoyed a chill day at camp with no hiking. After a long trip like this it was a needed break, also one of my favorite days!&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/misc-travel/yellowstone-family/yellowstone-1.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/misc-travel/yellowstone-family/yellowstone-1.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/misc-travel/yellowstone-family/yellowstone-2.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/misc-travel/yellowstone-family/yellowstone-2.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/misc-travel/yellowstone-family/yellowstone-3.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/misc-travel/yellowstone-family/yellowstone-3.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;</content><author><name>David Vitale</name></author><category term="travel" /><summary type="html"></summary></entry><entry><title type="html">Lake Sabrina</title><link href="/blog/travel/day-hikes/lake-sabrina" rel="alternate" type="text/html" title="Lake Sabrina" /><published>2020-06-20T00:00:00-07:00</published><updated>2020-06-20T00:00:00-07:00</updated><id>/blog/travel/day-hikes/lake-sabrina</id><content type="html" xml:base="/blog/travel/day-hikes/lake-sabrina">&lt;div id=&quot;leaflet-map-9bcda39f6da061cb12ed43a5e0b2841a&quot; class=&quot;leaflet-map&quot;&gt;&lt;/div&gt;
&lt;script&gt;(() =&gt; {
// Specify configuration variables, setup any elements and styling
    var leafletCdn = &quot;https://unpkg.com/leaflet@1.6.0/dist/&quot;;
    var esriLeafletCdn = &quot;https://unpkg.com/esri-leaflet/dist/&quot;;

    // Get tag input arguments &amp; inside block object list
    var tagInputArg = {&quot;zoom&quot; : 13 } ;
    var blockLeafletItems = [
    {id: &quot;373d2b3d2904fc3eb28c9a5a2a55824f&quot;,
              type: &quot;LeafletMarker&quot;,
              value: {&quot;latitude&quot; : 37.213663,
                       &quot;longitude&quot; : -118.6100081,
                       &quot;popupContent&quot;: &quot;Lake Sabrina&quot; } }, 
];

    // Override the map div id if specified, apply default CSS
    var defaultMapElId = &quot;leaflet-map-9bcda39f6da061cb12ed43a5e0b2841a&quot;;
   var defaultMapElStyle = &quot;height:300px; margin-top:15px; margin-bottom:15px&quot;;
    var mapEl = document.getElementById(defaultMapElId);
    if('divId' in tagInputArg){
        mapEl.id = tagInputArg['divId'];
    }
    var defaultMapCssEl = document.createElement(&quot;style&quot;);
    defaultMapCssEl.innerHTML = 
        &quot;#&quot; + defaultMapElId + &quot;{&quot; + defaultMapElStyle + &quot;}&quot;;
    document.head.appendChild(defaultMapCssEl);

    var newWindowImgSrcBase64 = &quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH4wUVFzAHq2j99AAAAV9JREFUSMdjYKAxYCRHk5ubG9+1a9fm/v//H6cadnb2G/fu3atlIceC379/c3z9+jUEn5q/f/8eYWBgYECxQE5OroqA2Y8ePXq0hJWV9Qc3N/caZB8wMjJKff361QpvEAkKCv4nYMGh9+/f26MLamhoyLx9+3b/nz9/VJCC6MiLFy9sWXCE3xlGRsZvWKQu4DOciYnpCzc396HPnz97weRxWRD/8OHDa4TiAt1wfn5+z79//zoxMDDALWAiN/lhM/zevXtH0NUx0dJwsiwgxXCccUCJ4dzc3DP+//+/gZ2d/duLFy9Is+Djx4+rCbn82rVrrxgYGF6RFUR8fHyZbGxsD7AZLiEhUSAiIrJSUlIyjOw4uHnz5gVHR0d1bC7/8+eP5d+/f8P+/PmjS1Ekr1ix4hcp6ploXVwPfQuwJlMmJiYBLS0tIVIMev36NRvRFnz48OHohw8fhkYQjQKCAAChiL6Pj/LM2QAAAABJRU5ErkJggg==&quot;;

// Actual mapping section; Specify a function to be called later that 
// assembles the correct JS components based on what the user specified in the 
// tag input arg, the block section of features, etc. Actually creates the map
// that is visible on the page

    function _getCenter(){
        var defaultCenter = [0,0];
        if(&quot;center&quot; in tagInputArg){
            return tagInputArg.center;
        } else {
            return defaultCenter;
        }
    }

    function _getZoom(){
        var defaultZoom = 1;
        if(&quot;zoom&quot; in tagInputArg){
            return tagInputArg.zoom
        } else {
            return defaultZoom;
        }
    }

    function _getProviderBasemap(){
        var defaultProviderBasemap = &quot;OpenStreetMap.Mapnik&quot;;
        if(&quot;providerBasemap&quot; in tagInputArg){
            return tagInputArg.providerBasemap;
        } else {
            return defaultProviderBasemap;
        }
    }


    function _addMarkerToMap(leafletItem, map){
        var m = leafletItem.value;
        var result = L.marker([m.latitude, m.longitude]).addTo(map);
        var potentialPopup = &quot;&quot;;
        if('popupContent' in m){
                potentialPopup += m.popupContent;}
        if('href' in m){
            potentialPopup += '&lt;a href=&quot;' + m.href + '&quot;&gt;' + 
                '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            result.bindPopup(potentialPopup);}
        if(!('center' in tagInputArg)){
            // If the user didn't specify a center, infer from marker
            map.panTo(new L.LatLng(m.latitude, m.longitude));
        }
    }

    function _onEachFeature(feature, layer){
        var potentialPopup = &quot;&quot;
        if(feature.properties &amp;&amp; feature.properties.popupContent){
            potentialPopup += feature.properties.popupContent;
        }
        if(feature.properties &amp;&amp; feature.properties.href){
            potentialPopup += 
                '&lt;a href=&quot;' + feature.properties.href + '&quot;&gt;' + 
                    '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            layer.bindPopup(potentialPopup);
        }
    }

    function _addGeoJSONToMap(leafletItem, map){
        if(typeof leafletItem.value === &quot;string&quot;){
            fetch(leafletItem.value).then((resp) =&gt; {
                return resp.json();
            }).then((data) =&gt; {
                leafletItem.value = data;
                _addGeoJSONObjToMap(leafletItem, map);
            }).catch((err) =&gt; {
                console.log(&quot;Encountered err w/ geojson, attempting to fix..&quot;);
                console.log(err);
                _addGeoJSONObjToMap(leafletItem, map);
            });
        } else {
            _addGeoJSONObjToMap(leafletItem, map);
        }
     }

    function _addGeoJSONObjToMap(leafletItem, map){
         var geojson = L.geoJSON(leafletItem.value, { 
            onEachFeature: _onEachFeature 
        });
        layers = geojson.getLayers();
        for(var i=0; i&lt;layers.length; i++){
            try{
                var geom = layers[i].feature.geometry;
                if(!('center' in tagInputArg)){
                    // If the user didn't specify a center, infer from geojson
                    //console.log(&quot;panning to &quot; + geom.coordinates);
                    map.panTo(new L.LatLng(geom.coordinates[1],
                                           geom.coordinates[0]));
                }
            } catch(e){}
        }
       
        geojson.addTo(map);
       
    }

    function _processLeafletItem(leafletItem, map){
        switch(leafletItem.type){
            case &quot;LeafletMarker&quot;:
                _addMarkerToMap(leafletItem, map);
                break;
            case &quot;LeafletGeoJSON&quot;:
                _addGeoJSONToMap(leafletItem, map);
                break;
            case undefined:
                break; 
            default:
                console.log(&quot;Couldn't add item &quot; + leafletItem.id);
                break;
        }
    }

//The actual section that is called that creates a map
    function createMap(){
        console.log(&quot;Creating map 9bcda39f6da061cb12ed43a5e0b2841a with these args:&quot;);
        console.log(tagInputArg);

        //Initialize Map with the correct input arguments
        var map = L.map(mapEl.id, 
            {worldCopyJump: true}).setView(_getCenter(), _getZoom());
        L.tileLayer.provider(_getProviderBasemap()).addTo(map);
        if(&quot;esriBasemap&quot; in tagInputArg){
            L.esri.basemapLayer(tagInputArg.esriBasemap).addTo(map);
        }

        //process each Leaflet Item passed in between the block tag middle
        for(var i=0; i&lt;blockLeafletItems.length; i++){
            var leafletItem = blockLeafletItems[i];
            console.log(&quot;Adding leaflet item &quot; + leafletItem.id + &quot;:&quot;);
            console.log(leafletItem);
            _processLeafletItem(leafletItem, map);
        }
    }

// Load the correct JS libraries/CSS by adding to head: 
// When ready, call createMap() to create the map on the page

    function _createMap(){
        // helper function to draw the map only when everything is loaded,
        // safeguards against multiple calls to window.onload
        var prevOnLoad;
        if(window.onload){
            prevOnLoad = window.onload;
        }
        window.onload = () =&gt; {
            createMap();
            if(prevOnLoad){
                prevOnLoad();
            }
        }
    }

    var leafletCssId = &quot;leaflet-css-head&quot;;
    var leafletJsId = &quot;leaflet-js-head&quot;;
    var esriLeafletJsId = &quot;esri-leaflet-js-head&quot;;
    var leafletProvidersJsId = &quot;leaflet-providers-js-head&quot;;

    // Add the leaflet CSS first, don't worry about when it loads
    var leafletCssEl = document.createElement(&quot;link&quot;);
    leafletCssEl.id = leafletCssId;
    leafletCssEl.rel = &quot;stylesheet&quot;;
    leafletCssEl.href = leafletCdn + &quot;leaflet.css&quot;;
    if(!document.getElementById(leafletCssEl.id)){
        document.head.appendChild(leafletCssEl);
    }

    function addToHeadIfNotLoaded(el) {
        //Add the el to the head if it doesn't exist already. If it does,
        //everything we need is already loaded, so draw the map
        if(!document.getElementById(el.id)){
            document.head.appendChild(el);
        } else {
            _createMap();
        }
    }

    // Load the main leaflet.js code, wait for it to load
    var leafletJsEl = document.createElement(&quot;script&quot;);
    leafletJsEl.id = leafletJsId;
    leafletJsEl.onload = () =&gt; {
        //After loaded, load the esri-leaflet.js code, wait for it to load
        var esriEl = document.createElement(&quot;script&quot;);
        esriEl.id = esriLeafletJsId;
        esriEl.onload = () =&gt; {
            //After loaded, add the inline leaflet-providers &lt;script&gt;
            provEl = document.createElement(&quot;script&quot;);
            provEl.id = leafletProvidersJsId;
            provEl.innerHTML = `//Taken from https://github.com/leaflet-extras/leaflet-providers
(function (root, factory) {
	if (typeof define === 'function' &amp;&amp; define.amd) {
		// AMD. Register as an anonymous module.
		define(['leaflet'], factory);
	} else if (typeof modules === 'object' &amp;&amp; module.exports) {
		// define a Common JS module that relies on 'leaflet'
		module.exports = factory(require('leaflet'));
	} else {
		// Assume Leaflet is loaded into global object L already
		factory(L);
	}
}(this, function (L) {
	'use strict';

	L.TileLayer.Provider = L.TileLayer.extend({
		initialize: function (arg, options) {
			var providers = L.TileLayer.Provider.providers;

			var parts = arg.split('.');

			var providerName = parts[0];
			var variantName = parts[1];

			if (!providers[providerName]) {
				throw 'No such provider (' + providerName + ')';
			}

			var provider = {
				url: providers[providerName].url,
				options: providers[providerName].options
			};

			// overwrite values in provider from variant.
			if (variantName &amp;&amp; 'variants' in providers[providerName]) {
				if (!(variantName in providers[providerName].variants)) {
					throw 'No such variant of ' + providerName + ' (' + variantName + ')';
				}
				var variant = providers[providerName].variants[variantName];
				var variantOptions;
				if (typeof variant === 'string') {
					variantOptions = {
						variant: variant
					};
				} else {
					variantOptions = variant.options;
				}
				provider = {
					url: variant.url || provider.url,
					options: L.Util.extend({}, provider.options, variantOptions)
				};
			}

			// replace attribution placeholders with their values from toplevel provider attribution,
			// recursively
			var attributionReplacer = function (attr) {
				if (attr.indexOf('{attribution.') === -1) {
					return attr;
				}
				return attr.replace(/\{attribution.(\w*)\}/g,
					function (match, attributionName) {
						return attributionReplacer(providers[attributionName].options.attribution);
					}
				);
			};
			provider.options.attribution = attributionReplacer(provider.options.attribution);

			// Compute final options combining provider options with any user overrides
			var layerOpts = L.Util.extend({}, provider.options, options);
			L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts);
		}
	});

	/**
	 * Definition of providers.
	 * see http://leafletjs.com/reference.html#tilelayer for options in the options map.
	 */

	L.TileLayer.Provider.providers = {
		OpenStreetMap: {
			url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution:
					'&amp;copy; &lt;a href=&quot;https://www.openstreetmap.org/copyright&quot;&gt;OpenStreetMap&lt;/a&gt; contributors'
			},
			variants: {
				Mapnik: {},
				DE: {
					url: 'https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18
					}
				},
				CH: {
					url: 'https://tile.osm.ch/switzerland/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18,
						bounds: [[45, 5], [48, 11]]
					}
				},
				France: {
					url: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png',
					options: {
						maxZoom: 20,
						attribution: '&amp;copy; Openstreetmap France | {attribution.OpenStreetMap}'
					}
				},
				HOT: {
					url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',
					options: {
						attribution:
							'{attribution.OpenStreetMap}, ' +
							'Tiles style by &lt;a href=&quot;https://www.hotosm.org/&quot; target=&quot;_blank&quot;&gt;Humanitarian OpenStreetMap Team&lt;/a&gt; ' +
							'hosted by &lt;a href=&quot;https://openstreetmap.fr/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap France&lt;/a&gt;'
					}
				},
				BZH: {
					url: 'https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png',
					options: {
						attribution: '{attribution.OpenStreetMap}, Tiles courtesy of &lt;a href=&quot;http://www.openstreetmap.bzh/&quot; target=&quot;_blank&quot;&gt;Breton OpenStreetMap Team&lt;/a&gt;',
						bounds: [[46.2, -5.5], [50, 0.7]]
					}
				}
			}
		},
		OpenSeaMap: {
			url: 'https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png',
			options: {
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openseamap.org&quot;&gt;OpenSeaMap&lt;/a&gt; contributors'
			}
		},
		OpenPtMap: {
			url: 'http://openptmap.org/tiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openptmap.org&quot;&gt;OpenPtMap&lt;/a&gt; contributors'
			}
		},
		OpenTopoMap: {
			url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: {attribution.OpenStreetMap}, &lt;a href=&quot;http://viewfinderpanoramas.org&quot;&gt;SRTM&lt;/a&gt; | Map style: &amp;copy; &lt;a href=&quot;https://opentopomap.org&quot;&gt;OpenTopoMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenRailwayMap: {
			url: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://www.OpenRailwayMap.org&quot;&gt;OpenRailwayMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenFireMap: {
			url: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;http://www.openfiremap.org&quot;&gt;OpenFireMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		SafeCast: {
			url: 'https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 16,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://blog.safecast.org/about/&quot;&gt;SafeCast&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		Thunderforest: {
			url: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}',
			options: {
				attribution:
					'&amp;copy; &lt;a href=&quot;http://www.thunderforest.com/&quot;&gt;Thunderforest&lt;/a&gt;, {attribution.OpenStreetMap}',
				variant: 'cycle',
				apikey: '&lt;insert your api key here&gt;',
				maxZoom: 22
			},
			variants: {
				OpenCycleMap: 'cycle',
				Transport: {
					options: {
						variant: 'transport'
					}
				},
				TransportDark: {
					options: {
						variant: 'transport-dark'
					}
				},
				SpinalMap: {
					options: {
						variant: 'spinal-map'
					}
				},
				Landscape: 'landscape',
				Outdoors: 'outdoors',
				Pioneer: 'pioneer'
			}
		},
		OpenMapSurfer: {
			url: 'https://maps.heigit.org/openmapsurfer/tiles/{variant}/webmercator/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				variant: 'roads',
				attribution: 'Imagery from &lt;a href=&quot;http://giscience.uni-hd.de/&quot;&gt;GIScience Research Group @ University of Heidelberg&lt;/a&gt; | Map data '
			},
			variants: {
				Roads: {
					options: {
						variant: 'roads',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				Hybrid: {
					options: {
						variant: 'hybrid',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				AdminBounds: {
					options: {
						variant: 'adminb',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				ContourLines: {
					options: {
						variant: 'asterc',
						maxZoom: 18,
						minZoom: 13,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;'
					}
				},
				Hillshade: {
					options: {
						variant: 'asterh',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;, &lt;a href=&quot;http://srtm.csi.cgiar.org/&quot;&gt;SRTM&lt;/a&gt;'
					}
				},
				ElementsAtRisk: {
					options: {
						variant: 'elements_at_risk',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				}
			}
		},
		Hydda: {
			url: 'https://{s}.tile.openstreetmap.se/hydda/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 18,
				variant: 'full',
				attribution: 'Tiles courtesy of &lt;a href=&quot;http://openstreetmap.se/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap Sweden&lt;/a&gt; &amp;mdash; Map data {attribution.OpenStreetMap}'
			},
			variants: {
				Full: 'full',
				Base: 'base',
				RoadsAndLabels: 'roads_and_labels'
			}
		},
		MapBox: {
			url: 'https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}{r}.png?access_token={accessToken}',
			options: {
				attribution:
					'&lt;a href=&quot;https://www.mapbox.com/about/maps/&quot; target=&quot;_blank&quot;&gt;&amp;copy; Mapbox&lt;/a&gt; ' +
					'{attribution.OpenStreetMap} ' +
					'&lt;a href=&quot;https://www.mapbox.com/map-feedback/&quot; target=&quot;_blank&quot;&gt;Improve this map&lt;/a&gt;',
				subdomains: 'abcd',
				id: 'mapbox.streets',
				accessToken: '&lt;insert your access token here&gt;',
			}
		},
		Stamen: {
			url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}{r}.{ext}',
			options: {
				attribution:
					'Map tiles by &lt;a href=&quot;http://stamen.com&quot;&gt;Stamen Design&lt;/a&gt;, ' +
					'&lt;a href=&quot;http://creativecommons.org/licenses/by/3.0&quot;&gt;CC BY 3.0&lt;/a&gt; &amp;mdash; ' +
					'Map data {attribution.OpenStreetMap}',
				subdomains: 'abcd',
				minZoom: 0,
				maxZoom: 20,
				variant: 'toner',
				ext: 'png'
			},
			variants: {
				Toner: 'toner',
				TonerBackground: 'toner-background',
				TonerHybrid: 'toner-hybrid',
				TonerLines: 'toner-lines',
				TonerLabels: 'toner-labels',
				TonerLite: 'toner-lite',
				Watercolor: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'watercolor',
						ext: 'jpg',
						minZoom: 1,
						maxZoom: 16
					}
				},
				Terrain: {
					options: {
						variant: 'terrain',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TerrainBackground: {
					options: {
						variant: 'terrain-background',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TopOSMRelief: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'toposm-color-relief',
						ext: 'jpg',
						bounds: [[22, -132], [51, -56]]
					}
				},
				TopOSMFeatures: {
					options: {
						variant: 'toposm-features',
						bounds: [[22, -132], [51, -56]],
						opacity: 0.9
					}
				}
			}
		},
		Esri: {
			url: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}',
			options: {
				variant: 'World_Street_Map',
				attribution: 'Tiles &amp;copy; Esri'
			},
			variants: {
				WorldStreetMap: {
					options: {
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'
					}
				},
				DeLorme: {
					options: {
						variant: 'Specialty/DeLorme_World_Base_Map',
						minZoom: 1,
						maxZoom: 11,
						attribution: '{attribution.Esri} &amp;mdash; Copyright: &amp;copy;2012 DeLorme'
					}
				},
				WorldTopoMap: {
					options: {
						variant: 'World_Topo_Map',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community'
					}
				},
				WorldImagery: {
					options: {
						variant: 'World_Imagery',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
					}
				},
				WorldTerrain: {
					options: {
						variant: 'World_Terrain_Base',
						maxZoom: 13,
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: USGS, Esri, TANA, DeLorme, and NPS'
					}
				},
				WorldShadedRelief: {
					options: {
						variant: 'World_Shaded_Relief',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Source: Esri'
					}
				},
				WorldPhysical: {
					options: {
						variant: 'World_Physical_Map',
						maxZoom: 8,
						attribution: '{attribution.Esri} &amp;mdash; Source: US National Park Service'
					}
				},
				OceanBasemap: {
					options: {
						variant: 'Ocean_Basemap',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri'
					}
				},
				NatGeoWorldMap: {
					options: {
						variant: 'NatGeo_World_Map',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC'
					}
				},
				WorldGrayCanvas: {
					options: {
						variant: 'Canvas/World_Light_Gray_Base',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; Esri, DeLorme, NAVTEQ'
					}
				}
			}
		},
		OpenWeatherMap: {
			url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}',
			options: {
				maxZoom: 19,
				attribution: 'Map data &amp;copy; &lt;a href=&quot;http://openweathermap.org&quot;&gt;OpenWeatherMap&lt;/a&gt;',
				apiKey:'&lt;insert your api key here&gt;',
				opacity: 0.5
			},
			variants: {
				Clouds: 'clouds',
				CloudsClassic: 'clouds_cls',
				Precipitation: 'precipitation',
				PrecipitationClassic: 'precipitation_cls',
				Rain: 'rain',
				RainClassic: 'rain_cls',
				Pressure: 'pressure',
				PressureContour: 'pressure_cntr',
				Wind: 'wind',
				Temperature: 'temp',
				Snow: 'snow'
			}
		},
		HERE: {
			/*
			 * HERE maps, formerly Nokia maps.
			 * These basemaps are free, but you need an API key. Please sign up at
			 * https://developer.here.com/plans
			 */
			url:
				'https://{s}.{base}.maps.api.here.com/maptile/2.1/' +
				'{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' +
				'app_id={app_id}&amp;app_code={app_code}&amp;lg={language}',
			options: {
				attribution:
					'Map &amp;copy; 1987-' + new Date().getFullYear() + ' &lt;a href=&quot;http://developer.here.com&quot;&gt;HERE&lt;/a&gt;',
				subdomains: '1234',
				mapID: 'newest',
				'app_id': '&lt;insert your app_id here&gt;',
				'app_code': '&lt;insert your app_code here&gt;',
				base: 'base',
				variant: 'normal.day',
				maxZoom: 20,
				type: 'maptile',
				language: 'eng',
				format: 'png8',
				size: '256'
			},
			variants: {
				normalDay: 'normal.day',
				normalDayCustom: 'normal.day.custom',
				normalDayGrey: 'normal.day.grey',
				normalDayMobile: 'normal.day.mobile',
				normalDayGreyMobile: 'normal.day.grey.mobile',
				normalDayTransit: 'normal.day.transit',
				normalDayTransitMobile: 'normal.day.transit.mobile',
				normalNight: 'normal.night',
				normalNightMobile: 'normal.night.mobile',
				normalNightGrey: 'normal.night.grey',
				normalNightGreyMobile: 'normal.night.grey.mobile',
				normalNightTransit: 'normal.night.transit',
				normalNightTransitMobile: 'normal.night.transit.mobile',
				reducedDay: 'reduced.day',
				reducedNight: 'reduced.night',
				basicMap: {
					options: {
						type: 'basetile'
					}
				},
				mapLabels: {
					options: {
						type: 'labeltile',
						format: 'png'
					}
				},
				trafficFlow: {
					options: {
						base: 'traffic',
						type: 'flowtile'
					}
				},
				carnavDayGrey: 'carnav.day.grey',
				hybridDay: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day'
					}
				},
				hybridDayMobile: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.mobile'
					}
				},
				hybridDayTransit: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.transit'
					}
				},
				hybridDayGrey: {
					options: {
						base: 'aerial',
						variant: 'hybrid.grey.day'
					}
				},
				pedestrianDay: 'pedestrian.day',
				pedestrianNight: 'pedestrian.night',
				satelliteDay: {
					options: {
						base: 'aerial',
						variant: 'satellite.day'
					}
				},
				terrainDay: {
					options: {
						base: 'aerial',
						variant: 'terrain.day'
					}
				},
				terrainDayMobile: {
					options: {
						base: 'aerial',
						variant: 'terrain.day.mobile'
					}
				}
			}
		},
		FreeMapSK: {
			url: 'http://t{s}.freemap.sk/T/{z}/{x}/{y}.jpeg',
			options: {
				minZoom: 8,
				maxZoom: 16,
				subdomains: '1234',
				bounds: [[47.204642, 15.996093], [49.830896, 22.576904]],
				attribution:
					'{attribution.OpenStreetMap}, vizualization CC-By-SA 2.0 &lt;a href=&quot;http://freemap.sk&quot;&gt;Freemap.sk&lt;/a&gt;'
			}
		},
		MtbMap: {
			url: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png',
			options: {
				attribution:
					'{attribution.OpenStreetMap} &amp;amp; USGS'
			}
		},
		CartoDB: {
			url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '{attribution.OpenStreetMap} &amp;copy; &lt;a href=&quot;https://carto.com/attributions&quot;&gt;CARTO&lt;/a&gt;',
				subdomains: 'abcd',
				maxZoom: 19,
				variant: 'light_all'
			},
			variants: {
				Positron: 'light_all',
				PositronNoLabels: 'light_nolabels',
				PositronOnlyLabels: 'light_only_labels',
				DarkMatter: 'dark_all',
				DarkMatterNoLabels: 'dark_nolabels',
				DarkMatterOnlyLabels: 'dark_only_labels',
				Voyager: 'rastertiles/voyager',
				VoyagerNoLabels: 'rastertiles/voyager_nolabels',
				VoyagerOnlyLabels: 'rastertiles/voyager_only_labels',
				VoyagerLabelsUnder: 'rastertiles/voyager_labels_under'
			}
		},
		HikeBike: {
			url: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: '{attribution.OpenStreetMap}',
				variant: 'hikebike'
			},
			variants: {
				HikeBike: {},
				HillShading: {
					options: {
						maxZoom: 15,
						variant: 'hillshading'
					}
				}
			}
		},
		BasemapAT: {
			url: 'https://maps{s}.wien.gv.at/basemap/{variant}/normal/google3857/{z}/{y}/{x}.{format}',
			options: {
				maxZoom: 19,
				attribution: 'Datenquelle: &lt;a href=&quot;https://www.basemap.at&quot;&gt;basemap.at&lt;/a&gt;',
				subdomains: ['', '1', '2', '3', '4'],
				format: 'png',
				bounds: [[46.358770, 8.782379], [49.037872, 17.189532]],
				variant: 'geolandbasemap'
			},
			variants: {
				basemap: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'geolandbasemap'
					}
				},
				grau: 'bmapgrau',
				overlay: 'bmapoverlay',
				highdpi: {
					options: {
						variant: 'bmaphidpi',
						format: 'jpeg'
					}
				},
				orthofoto: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'bmaporthofoto30cm',
						format: 'jpeg'
					}
				}
			}
		},
		nlmaps: {
			url: 'https://geodata.nationaalgeoregister.nl/tiles/service/wmts/{variant}/EPSG:3857/{z}/{x}/{y}.png',
			options: {
				minZoom: 6,
				maxZoom: 19,
				bounds: [[50.5, 3.25], [54, 7.6]],
				attribution: 'Kaartgegevens &amp;copy; &lt;a href=&quot;kadaster.nl&quot;&gt;Kadaster&lt;/a&gt;'
			},
			variants: {
				'standaard': 'brtachtergrondkaart',
				'pastel': 'brtachtergrondkaartpastel',
				'grijs': 'brtachtergrondkaartgrijs',
				'luchtfoto': {
					'url': 'https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts/1.0.0/2016_ortho25/EPSG:3857/{z}/{x}/{y}.png',
				}
			}
		},
		NASAGIBS: {
			url: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}',
			options: {
				attribution:
					'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' +
					'(&lt;a href=&quot;https://earthdata.nasa.gov&quot;&gt;ESDIS&lt;/a&gt;) with funding provided by NASA/HQ.',
				bounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]],
				minZoom: 1,
				maxZoom: 9,
				format: 'jpg',
				time: '',
				tilematrixset: 'GoogleMapsCompatible_Level'
			},
			variants: {
				ModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor',
				ModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367',
				ViirsEarthAtNight2012: {
					options: {
						variant: 'VIIRS_CityLights_2012',
						maxZoom: 8
					}
				},
				ModisTerraLSTDay: {
					options: {
						variant: 'MODIS_Terra_Land_Surface_Temp_Day',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				},
				ModisTerraSnowCover: {
					options: {
						variant: 'MODIS_Terra_Snow_Cover',
						format: 'png',
						maxZoom: 8,
						opacity: 0.75
					}
				},
				ModisTerraAOD: {
					options: {
						variant: 'MODIS_Terra_Aerosol',
						format: 'png',
						maxZoom: 6,
						opacity: 0.75
					}
				},
				ModisTerraChlorophyll: {
					options: {
						variant: 'MODIS_Terra_Chlorophyll_A',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				}
			}
		},
		NLS: {
			// NLS maps are copyright National library of Scotland.
			// http://maps.nls.uk/projects/api/index.html
			// Please contact NLS for anything other than non-commercial low volume usage
			//
			// Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s
			//   z0-9  - 1:1m
			//  z10-11 - quarter inch (1:253440)
			//  z12-18 - one inch (1:63360)
			url: 'https://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg',
			options: {
				attribution: '&lt;a href=&quot;http://geo.nls.uk/maps/&quot;&gt;National Library of Scotland Historic Maps&lt;/a&gt;',
				bounds: [[49.6, -12], [61.7, 3]],
				minZoom: 1,
				maxZoom: 18,
				subdomains: '0123',
			}
		},
		JusticeMap: {
			// Justice Map (http://www.justicemap.org/)
			// Visualize race and income data for your community, county and country.
			// Includes tools for data journalists, bloggers and community activists.
			url: 'http://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png',
			options: {
				attribution: '&lt;a href=&quot;http://www.justicemap.org/terms.php&quot;&gt;Justice Map&lt;/a&gt;',
				// one of 'county', 'tract', 'block'
				size: 'county',
				// Bounds for USA, including Alaska and Hawaii
				bounds: [[14, -180], [72, -56]]
			},
			variants: {
				income: 'income',
				americanIndian: 'indian',
				asian: 'asian',
				black: 'black',
				hispanic: 'hispanic',
				multi: 'multi',
				nonWhite: 'nonwhite',
				white: 'white',
				plurality: 'plural'
			}
		},
		Wikimedia: {
			url: 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '&lt;a href=&quot;https://wikimediafoundation.org/wiki/Maps_Terms_of_Use&quot;&gt;Wikimedia&lt;/a&gt;',
				minZoom: 1,
				maxZoom: 19
			}
		},
		GeoportailFrance: {
			url: 'https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&amp;SERVICE=WMTS&amp;VERSION=1.0.0&amp;STYLE={style}&amp;TILEMATRIXSET=PM&amp;FORMAT={format}&amp;LAYER={variant}&amp;TILEMATRIX={z}&amp;TILEROW={y}&amp;TILECOL={x}',
			options: {
				attribution: '&lt;a target=&quot;_blank&quot; href=&quot;https://www.geoportail.gouv.fr/&quot;&gt;Geoportail France&lt;/a&gt;',
				bounds: [[-75, -180], [81, 180]],
				minZoom: 2,
				maxZoom: 18,
				// Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/
				// NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee
				apikey: 'choisirgeoportail',
				format: 'image/jpeg',
				style : 'normal',
				variant: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD'
			},
			variants: {
				parcels: {
					options : {
						variant: 'CADASTRALPARCELS.PARCELS',
						maxZoom: 20,
						style : 'bdparcellaire',
						format: 'image/png'
					}
				},
				ignMaps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS',
				maps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD',
				orthos: {
					options: {
						maxZoom: 19,
						variant: 'ORTHOIMAGERY.ORTHOPHOTOS'
					}
				}
			}
		},
		OneMapSG: {
			url: 'https://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png',
			options: {
				variant: 'Default',
				minZoom: 11,
				maxZoom: 18,
				bounds: [[1.56073, 104.11475], [1.16, 103.502]],
				attribution: '&lt;img src=&quot;https://docs.onemap.sg/maps/images/oneMap64-01.png&quot; style=&quot;height:20px;width:20px;&quot;/&gt; New OneMap | Map data &amp;copy; contributors, &lt;a href=&quot;http://SLA.gov.sg&quot;&gt;Singapore Land Authority&lt;/a&gt;'
			},
			variants: {
				Default: 'Default',
				Night: 'Night',
				Original: 'Original',
				Grey: 'Grey',
				LandLot: 'LandLot'
			}
		}
	};

	L.tileLayer.provider = function (provider, options) {
		return new L.TileLayer.Provider(provider, options);
	};

	return L;
}));
`;
            if(!document.getElementById(provEl.id)){
                 document.head.appendChild(provEl);        
            }
            _createMap();
            }
        esriEl.src = esriLeafletCdn + &quot;esri-leaflet.js&quot;;
        addToHeadIfNotLoaded(esriEl);
        };
    leafletJsEl.src = leafletCdn + &quot;leaflet.js&quot;;
    addToHeadIfNotLoaded(leafletJsEl);
})();
&lt;/script&gt;

&lt;p&gt;Random camping trip near Bishop CA with Indhu, Sam, Olivia, Zack, and Vish.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/sabrina/sabrina-3.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/sabrina/sabrina-3.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;This area is beautiful, great for hiking and fishing. We camped nearby at “Four Jeffrey” campground, spend Saturday and Sunday hiking. The only complaint was that we were eaten alive by misquitos.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/sabrina/sabrina-1.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/sabrina/sabrina-1.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/sabrina/sabrina-2.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/sabrina/sabrina-2.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Our hike culminated in a refreshing jump into Donkey Lake. It was so freezing cold, we didn’t stay in for long!&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/sabrina/badass-sam.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/sabrina/badass-sam.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;While Sam and I nervously psyched ourselves into doing a standard dive/jump from the somewhat tall rock, Zack absolutely crushed it with the non-hesitant perfect flip. The stuff of legends, I’m still impressed.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/sabrina/badass-zack.gif&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/sabrina/badass-zack.gif&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;</content><author><name>David Vitale</name></author><category term="travel" /><category term="misc" /><category term="day-hikes" /><summary type="html"></summary></entry><entry><title type="html">Cottonwood Pass</title><link href="/blog/travel/misc/backpacking/cottonwood-pass" rel="alternate" type="text/html" title="Cottonwood Pass" /><published>2020-05-24T00:00:00-07:00</published><updated>2020-05-24T00:00:00-07:00</updated><id>/blog/travel/misc/backpacking/cottonwood-pass</id><content type="html" xml:base="/blog/travel/misc/backpacking/cottonwood-pass">&lt;div id=&quot;leaflet-map-deaa8fe2bc530bd9e6c5a8060184ddbb&quot; class=&quot;leaflet-map&quot;&gt;&lt;/div&gt;
&lt;script&gt;(() =&gt; {
// Specify configuration variables, setup any elements and styling
    var leafletCdn = &quot;https://unpkg.com/leaflet@1.6.0/dist/&quot;;
    var esriLeafletCdn = &quot;https://unpkg.com/esri-leaflet/dist/&quot;;

    // Get tag input arguments &amp; inside block object list
    var tagInputArg = {&quot;zoom&quot; : 11 } ;
    var blockLeafletItems = [
    {id: &quot;afa6c0648e57752549bea3def5184854&quot;,
              type: &quot;LeafletMarker&quot;,
              value: {&quot;latitude&quot; : 36.448329,
                       &quot;longitude&quot; : -118.170717,
                       &quot;popupContent&quot;: &quot;Cottonwood Pass Trail&quot; } }, 
   {id: &quot;00a93beb6afb3b3decab1c855c21bd96&quot;,
              type: &quot;LeafletGeoJSON&quot;,
              value: &quot;/assets/personal/geojson/backpacking/2020-05-22-cottonwood-day1.geojson&quot; },
   {id: &quot;91e38ef648736be31a119fa3e9d51d17&quot;,
              type: &quot;LeafletGeoJSON&quot;,
              value: &quot;/assets/personal/geojson/backpacking/2020-05-23-cottonwood-day2b.geojson&quot; },
   {id: &quot;74cab620a6fdb6dcf7ccca48bc59f3b7&quot;,
              type: &quot;LeafletGeoJSON&quot;,
              value: &quot;/assets/personal/geojson/backpacking/2020-05-24-cottonwood-day3.geojson&quot; },
];

    // Override the map div id if specified, apply default CSS
    var defaultMapElId = &quot;leaflet-map-deaa8fe2bc530bd9e6c5a8060184ddbb&quot;;
   var defaultMapElStyle = &quot;height:300px; margin-top:15px; margin-bottom:15px&quot;;
    var mapEl = document.getElementById(defaultMapElId);
    if('divId' in tagInputArg){
        mapEl.id = tagInputArg['divId'];
    }
    var defaultMapCssEl = document.createElement(&quot;style&quot;);
    defaultMapCssEl.innerHTML = 
        &quot;#&quot; + defaultMapElId + &quot;{&quot; + defaultMapElStyle + &quot;}&quot;;
    document.head.appendChild(defaultMapCssEl);

    var newWindowImgSrcBase64 = &quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH4wUVFzAHq2j99AAAAV9JREFUSMdjYKAxYCRHk5ubG9+1a9fm/v//H6cadnb2G/fu3atlIceC379/c3z9+jUEn5q/f/8eYWBgYECxQE5OroqA2Y8ePXq0hJWV9Qc3N/caZB8wMjJKff361QpvEAkKCv4nYMGh9+/f26MLamhoyLx9+3b/nz9/VJCC6MiLFy9sWXCE3xlGRsZvWKQu4DOciYnpCzc396HPnz97weRxWRD/8OHDa4TiAt1wfn5+z79//zoxMDDALWAiN/lhM/zevXtH0NUx0dJwsiwgxXCccUCJ4dzc3DP+//+/gZ2d/duLFy9Is+Djx4+rCbn82rVrrxgYGF6RFUR8fHyZbGxsD7AZLiEhUSAiIrJSUlIyjOw4uHnz5gVHR0d1bC7/8+eP5d+/f8P+/PmjS1Ekr1ix4hcp6ploXVwPfQuwJlMmJiYBLS0tIVIMev36NRvRFnz48OHohw8fhkYQjQKCAAChiL6Pj/LM2QAAAABJRU5ErkJggg==&quot;;

// Actual mapping section; Specify a function to be called later that 
// assembles the correct JS components based on what the user specified in the 
// tag input arg, the block section of features, etc. Actually creates the map
// that is visible on the page

    function _getCenter(){
        var defaultCenter = [0,0];
        if(&quot;center&quot; in tagInputArg){
            return tagInputArg.center;
        } else {
            return defaultCenter;
        }
    }

    function _getZoom(){
        var defaultZoom = 1;
        if(&quot;zoom&quot; in tagInputArg){
            return tagInputArg.zoom
        } else {
            return defaultZoom;
        }
    }

    function _getProviderBasemap(){
        var defaultProviderBasemap = &quot;OpenStreetMap.Mapnik&quot;;
        if(&quot;providerBasemap&quot; in tagInputArg){
            return tagInputArg.providerBasemap;
        } else {
            return defaultProviderBasemap;
        }
    }


    function _addMarkerToMap(leafletItem, map){
        var m = leafletItem.value;
        var result = L.marker([m.latitude, m.longitude]).addTo(map);
        var potentialPopup = &quot;&quot;;
        if('popupContent' in m){
                potentialPopup += m.popupContent;}
        if('href' in m){
            potentialPopup += '&lt;a href=&quot;' + m.href + '&quot;&gt;' + 
                '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            result.bindPopup(potentialPopup);}
        if(!('center' in tagInputArg)){
            // If the user didn't specify a center, infer from marker
            map.panTo(new L.LatLng(m.latitude, m.longitude));
        }
    }

    function _onEachFeature(feature, layer){
        var potentialPopup = &quot;&quot;
        if(feature.properties &amp;&amp; feature.properties.popupContent){
            potentialPopup += feature.properties.popupContent;
        }
        if(feature.properties &amp;&amp; feature.properties.href){
            potentialPopup += 
                '&lt;a href=&quot;' + feature.properties.href + '&quot;&gt;' + 
                    '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            layer.bindPopup(potentialPopup);
        }
    }

    function _addGeoJSONToMap(leafletItem, map){
        if(typeof leafletItem.value === &quot;string&quot;){
            fetch(leafletItem.value).then((resp) =&gt; {
                return resp.json();
            }).then((data) =&gt; {
                leafletItem.value = data;
                _addGeoJSONObjToMap(leafletItem, map);
            }).catch((err) =&gt; {
                console.log(&quot;Encountered err w/ geojson, attempting to fix..&quot;);
                console.log(err);
                _addGeoJSONObjToMap(leafletItem, map);
            });
        } else {
            _addGeoJSONObjToMap(leafletItem, map);
        }
     }

    function _addGeoJSONObjToMap(leafletItem, map){
         var geojson = L.geoJSON(leafletItem.value, { 
            onEachFeature: _onEachFeature 
        });
        layers = geojson.getLayers();
        for(var i=0; i&lt;layers.length; i++){
            try{
                var geom = layers[i].feature.geometry;
                if(!('center' in tagInputArg)){
                    // If the user didn't specify a center, infer from geojson
                    //console.log(&quot;panning to &quot; + geom.coordinates);
                    map.panTo(new L.LatLng(geom.coordinates[1],
                                           geom.coordinates[0]));
                }
            } catch(e){}
        }
       
        geojson.addTo(map);
       
    }

    function _processLeafletItem(leafletItem, map){
        switch(leafletItem.type){
            case &quot;LeafletMarker&quot;:
                _addMarkerToMap(leafletItem, map);
                break;
            case &quot;LeafletGeoJSON&quot;:
                _addGeoJSONToMap(leafletItem, map);
                break;
            case undefined:
                break; 
            default:
                console.log(&quot;Couldn't add item &quot; + leafletItem.id);
                break;
        }
    }

//The actual section that is called that creates a map
    function createMap(){
        console.log(&quot;Creating map deaa8fe2bc530bd9e6c5a8060184ddbb with these args:&quot;);
        console.log(tagInputArg);

        //Initialize Map with the correct input arguments
        var map = L.map(mapEl.id, 
            {worldCopyJump: true}).setView(_getCenter(), _getZoom());
        L.tileLayer.provider(_getProviderBasemap()).addTo(map);
        if(&quot;esriBasemap&quot; in tagInputArg){
            L.esri.basemapLayer(tagInputArg.esriBasemap).addTo(map);
        }

        //process each Leaflet Item passed in between the block tag middle
        for(var i=0; i&lt;blockLeafletItems.length; i++){
            var leafletItem = blockLeafletItems[i];
            console.log(&quot;Adding leaflet item &quot; + leafletItem.id + &quot;:&quot;);
            console.log(leafletItem);
            _processLeafletItem(leafletItem, map);
        }
    }

// Load the correct JS libraries/CSS by adding to head: 
// When ready, call createMap() to create the map on the page

    function _createMap(){
        // helper function to draw the map only when everything is loaded,
        // safeguards against multiple calls to window.onload
        var prevOnLoad;
        if(window.onload){
            prevOnLoad = window.onload;
        }
        window.onload = () =&gt; {
            createMap();
            if(prevOnLoad){
                prevOnLoad();
            }
        }
    }

    var leafletCssId = &quot;leaflet-css-head&quot;;
    var leafletJsId = &quot;leaflet-js-head&quot;;
    var esriLeafletJsId = &quot;esri-leaflet-js-head&quot;;
    var leafletProvidersJsId = &quot;leaflet-providers-js-head&quot;;

    // Add the leaflet CSS first, don't worry about when it loads
    var leafletCssEl = document.createElement(&quot;link&quot;);
    leafletCssEl.id = leafletCssId;
    leafletCssEl.rel = &quot;stylesheet&quot;;
    leafletCssEl.href = leafletCdn + &quot;leaflet.css&quot;;
    if(!document.getElementById(leafletCssEl.id)){
        document.head.appendChild(leafletCssEl);
    }

    function addToHeadIfNotLoaded(el) {
        //Add the el to the head if it doesn't exist already. If it does,
        //everything we need is already loaded, so draw the map
        if(!document.getElementById(el.id)){
            document.head.appendChild(el);
        } else {
            _createMap();
        }
    }

    // Load the main leaflet.js code, wait for it to load
    var leafletJsEl = document.createElement(&quot;script&quot;);
    leafletJsEl.id = leafletJsId;
    leafletJsEl.onload = () =&gt; {
        //After loaded, load the esri-leaflet.js code, wait for it to load
        var esriEl = document.createElement(&quot;script&quot;);
        esriEl.id = esriLeafletJsId;
        esriEl.onload = () =&gt; {
            //After loaded, add the inline leaflet-providers &lt;script&gt;
            provEl = document.createElement(&quot;script&quot;);
            provEl.id = leafletProvidersJsId;
            provEl.innerHTML = `//Taken from https://github.com/leaflet-extras/leaflet-providers
(function (root, factory) {
	if (typeof define === 'function' &amp;&amp; define.amd) {
		// AMD. Register as an anonymous module.
		define(['leaflet'], factory);
	} else if (typeof modules === 'object' &amp;&amp; module.exports) {
		// define a Common JS module that relies on 'leaflet'
		module.exports = factory(require('leaflet'));
	} else {
		// Assume Leaflet is loaded into global object L already
		factory(L);
	}
}(this, function (L) {
	'use strict';

	L.TileLayer.Provider = L.TileLayer.extend({
		initialize: function (arg, options) {
			var providers = L.TileLayer.Provider.providers;

			var parts = arg.split('.');

			var providerName = parts[0];
			var variantName = parts[1];

			if (!providers[providerName]) {
				throw 'No such provider (' + providerName + ')';
			}

			var provider = {
				url: providers[providerName].url,
				options: providers[providerName].options
			};

			// overwrite values in provider from variant.
			if (variantName &amp;&amp; 'variants' in providers[providerName]) {
				if (!(variantName in providers[providerName].variants)) {
					throw 'No such variant of ' + providerName + ' (' + variantName + ')';
				}
				var variant = providers[providerName].variants[variantName];
				var variantOptions;
				if (typeof variant === 'string') {
					variantOptions = {
						variant: variant
					};
				} else {
					variantOptions = variant.options;
				}
				provider = {
					url: variant.url || provider.url,
					options: L.Util.extend({}, provider.options, variantOptions)
				};
			}

			// replace attribution placeholders with their values from toplevel provider attribution,
			// recursively
			var attributionReplacer = function (attr) {
				if (attr.indexOf('{attribution.') === -1) {
					return attr;
				}
				return attr.replace(/\{attribution.(\w*)\}/g,
					function (match, attributionName) {
						return attributionReplacer(providers[attributionName].options.attribution);
					}
				);
			};
			provider.options.attribution = attributionReplacer(provider.options.attribution);

			// Compute final options combining provider options with any user overrides
			var layerOpts = L.Util.extend({}, provider.options, options);
			L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts);
		}
	});

	/**
	 * Definition of providers.
	 * see http://leafletjs.com/reference.html#tilelayer for options in the options map.
	 */

	L.TileLayer.Provider.providers = {
		OpenStreetMap: {
			url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution:
					'&amp;copy; &lt;a href=&quot;https://www.openstreetmap.org/copyright&quot;&gt;OpenStreetMap&lt;/a&gt; contributors'
			},
			variants: {
				Mapnik: {},
				DE: {
					url: 'https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18
					}
				},
				CH: {
					url: 'https://tile.osm.ch/switzerland/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18,
						bounds: [[45, 5], [48, 11]]
					}
				},
				France: {
					url: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png',
					options: {
						maxZoom: 20,
						attribution: '&amp;copy; Openstreetmap France | {attribution.OpenStreetMap}'
					}
				},
				HOT: {
					url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',
					options: {
						attribution:
							'{attribution.OpenStreetMap}, ' +
							'Tiles style by &lt;a href=&quot;https://www.hotosm.org/&quot; target=&quot;_blank&quot;&gt;Humanitarian OpenStreetMap Team&lt;/a&gt; ' +
							'hosted by &lt;a href=&quot;https://openstreetmap.fr/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap France&lt;/a&gt;'
					}
				},
				BZH: {
					url: 'https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png',
					options: {
						attribution: '{attribution.OpenStreetMap}, Tiles courtesy of &lt;a href=&quot;http://www.openstreetmap.bzh/&quot; target=&quot;_blank&quot;&gt;Breton OpenStreetMap Team&lt;/a&gt;',
						bounds: [[46.2, -5.5], [50, 0.7]]
					}
				}
			}
		},
		OpenSeaMap: {
			url: 'https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png',
			options: {
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openseamap.org&quot;&gt;OpenSeaMap&lt;/a&gt; contributors'
			}
		},
		OpenPtMap: {
			url: 'http://openptmap.org/tiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openptmap.org&quot;&gt;OpenPtMap&lt;/a&gt; contributors'
			}
		},
		OpenTopoMap: {
			url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: {attribution.OpenStreetMap}, &lt;a href=&quot;http://viewfinderpanoramas.org&quot;&gt;SRTM&lt;/a&gt; | Map style: &amp;copy; &lt;a href=&quot;https://opentopomap.org&quot;&gt;OpenTopoMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenRailwayMap: {
			url: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://www.OpenRailwayMap.org&quot;&gt;OpenRailwayMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenFireMap: {
			url: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;http://www.openfiremap.org&quot;&gt;OpenFireMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		SafeCast: {
			url: 'https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 16,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://blog.safecast.org/about/&quot;&gt;SafeCast&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		Thunderforest: {
			url: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}',
			options: {
				attribution:
					'&amp;copy; &lt;a href=&quot;http://www.thunderforest.com/&quot;&gt;Thunderforest&lt;/a&gt;, {attribution.OpenStreetMap}',
				variant: 'cycle',
				apikey: '&lt;insert your api key here&gt;',
				maxZoom: 22
			},
			variants: {
				OpenCycleMap: 'cycle',
				Transport: {
					options: {
						variant: 'transport'
					}
				},
				TransportDark: {
					options: {
						variant: 'transport-dark'
					}
				},
				SpinalMap: {
					options: {
						variant: 'spinal-map'
					}
				},
				Landscape: 'landscape',
				Outdoors: 'outdoors',
				Pioneer: 'pioneer'
			}
		},
		OpenMapSurfer: {
			url: 'https://maps.heigit.org/openmapsurfer/tiles/{variant}/webmercator/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				variant: 'roads',
				attribution: 'Imagery from &lt;a href=&quot;http://giscience.uni-hd.de/&quot;&gt;GIScience Research Group @ University of Heidelberg&lt;/a&gt; | Map data '
			},
			variants: {
				Roads: {
					options: {
						variant: 'roads',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				Hybrid: {
					options: {
						variant: 'hybrid',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				AdminBounds: {
					options: {
						variant: 'adminb',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				ContourLines: {
					options: {
						variant: 'asterc',
						maxZoom: 18,
						minZoom: 13,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;'
					}
				},
				Hillshade: {
					options: {
						variant: 'asterh',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;, &lt;a href=&quot;http://srtm.csi.cgiar.org/&quot;&gt;SRTM&lt;/a&gt;'
					}
				},
				ElementsAtRisk: {
					options: {
						variant: 'elements_at_risk',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				}
			}
		},
		Hydda: {
			url: 'https://{s}.tile.openstreetmap.se/hydda/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 18,
				variant: 'full',
				attribution: 'Tiles courtesy of &lt;a href=&quot;http://openstreetmap.se/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap Sweden&lt;/a&gt; &amp;mdash; Map data {attribution.OpenStreetMap}'
			},
			variants: {
				Full: 'full',
				Base: 'base',
				RoadsAndLabels: 'roads_and_labels'
			}
		},
		MapBox: {
			url: 'https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}{r}.png?access_token={accessToken}',
			options: {
				attribution:
					'&lt;a href=&quot;https://www.mapbox.com/about/maps/&quot; target=&quot;_blank&quot;&gt;&amp;copy; Mapbox&lt;/a&gt; ' +
					'{attribution.OpenStreetMap} ' +
					'&lt;a href=&quot;https://www.mapbox.com/map-feedback/&quot; target=&quot;_blank&quot;&gt;Improve this map&lt;/a&gt;',
				subdomains: 'abcd',
				id: 'mapbox.streets',
				accessToken: '&lt;insert your access token here&gt;',
			}
		},
		Stamen: {
			url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}{r}.{ext}',
			options: {
				attribution:
					'Map tiles by &lt;a href=&quot;http://stamen.com&quot;&gt;Stamen Design&lt;/a&gt;, ' +
					'&lt;a href=&quot;http://creativecommons.org/licenses/by/3.0&quot;&gt;CC BY 3.0&lt;/a&gt; &amp;mdash; ' +
					'Map data {attribution.OpenStreetMap}',
				subdomains: 'abcd',
				minZoom: 0,
				maxZoom: 20,
				variant: 'toner',
				ext: 'png'
			},
			variants: {
				Toner: 'toner',
				TonerBackground: 'toner-background',
				TonerHybrid: 'toner-hybrid',
				TonerLines: 'toner-lines',
				TonerLabels: 'toner-labels',
				TonerLite: 'toner-lite',
				Watercolor: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'watercolor',
						ext: 'jpg',
						minZoom: 1,
						maxZoom: 16
					}
				},
				Terrain: {
					options: {
						variant: 'terrain',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TerrainBackground: {
					options: {
						variant: 'terrain-background',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TopOSMRelief: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'toposm-color-relief',
						ext: 'jpg',
						bounds: [[22, -132], [51, -56]]
					}
				},
				TopOSMFeatures: {
					options: {
						variant: 'toposm-features',
						bounds: [[22, -132], [51, -56]],
						opacity: 0.9
					}
				}
			}
		},
		Esri: {
			url: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}',
			options: {
				variant: 'World_Street_Map',
				attribution: 'Tiles &amp;copy; Esri'
			},
			variants: {
				WorldStreetMap: {
					options: {
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'
					}
				},
				DeLorme: {
					options: {
						variant: 'Specialty/DeLorme_World_Base_Map',
						minZoom: 1,
						maxZoom: 11,
						attribution: '{attribution.Esri} &amp;mdash; Copyright: &amp;copy;2012 DeLorme'
					}
				},
				WorldTopoMap: {
					options: {
						variant: 'World_Topo_Map',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community'
					}
				},
				WorldImagery: {
					options: {
						variant: 'World_Imagery',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
					}
				},
				WorldTerrain: {
					options: {
						variant: 'World_Terrain_Base',
						maxZoom: 13,
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: USGS, Esri, TANA, DeLorme, and NPS'
					}
				},
				WorldShadedRelief: {
					options: {
						variant: 'World_Shaded_Relief',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Source: Esri'
					}
				},
				WorldPhysical: {
					options: {
						variant: 'World_Physical_Map',
						maxZoom: 8,
						attribution: '{attribution.Esri} &amp;mdash; Source: US National Park Service'
					}
				},
				OceanBasemap: {
					options: {
						variant: 'Ocean_Basemap',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri'
					}
				},
				NatGeoWorldMap: {
					options: {
						variant: 'NatGeo_World_Map',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC'
					}
				},
				WorldGrayCanvas: {
					options: {
						variant: 'Canvas/World_Light_Gray_Base',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; Esri, DeLorme, NAVTEQ'
					}
				}
			}
		},
		OpenWeatherMap: {
			url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}',
			options: {
				maxZoom: 19,
				attribution: 'Map data &amp;copy; &lt;a href=&quot;http://openweathermap.org&quot;&gt;OpenWeatherMap&lt;/a&gt;',
				apiKey:'&lt;insert your api key here&gt;',
				opacity: 0.5
			},
			variants: {
				Clouds: 'clouds',
				CloudsClassic: 'clouds_cls',
				Precipitation: 'precipitation',
				PrecipitationClassic: 'precipitation_cls',
				Rain: 'rain',
				RainClassic: 'rain_cls',
				Pressure: 'pressure',
				PressureContour: 'pressure_cntr',
				Wind: 'wind',
				Temperature: 'temp',
				Snow: 'snow'
			}
		},
		HERE: {
			/*
			 * HERE maps, formerly Nokia maps.
			 * These basemaps are free, but you need an API key. Please sign up at
			 * https://developer.here.com/plans
			 */
			url:
				'https://{s}.{base}.maps.api.here.com/maptile/2.1/' +
				'{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' +
				'app_id={app_id}&amp;app_code={app_code}&amp;lg={language}',
			options: {
				attribution:
					'Map &amp;copy; 1987-' + new Date().getFullYear() + ' &lt;a href=&quot;http://developer.here.com&quot;&gt;HERE&lt;/a&gt;',
				subdomains: '1234',
				mapID: 'newest',
				'app_id': '&lt;insert your app_id here&gt;',
				'app_code': '&lt;insert your app_code here&gt;',
				base: 'base',
				variant: 'normal.day',
				maxZoom: 20,
				type: 'maptile',
				language: 'eng',
				format: 'png8',
				size: '256'
			},
			variants: {
				normalDay: 'normal.day',
				normalDayCustom: 'normal.day.custom',
				normalDayGrey: 'normal.day.grey',
				normalDayMobile: 'normal.day.mobile',
				normalDayGreyMobile: 'normal.day.grey.mobile',
				normalDayTransit: 'normal.day.transit',
				normalDayTransitMobile: 'normal.day.transit.mobile',
				normalNight: 'normal.night',
				normalNightMobile: 'normal.night.mobile',
				normalNightGrey: 'normal.night.grey',
				normalNightGreyMobile: 'normal.night.grey.mobile',
				normalNightTransit: 'normal.night.transit',
				normalNightTransitMobile: 'normal.night.transit.mobile',
				reducedDay: 'reduced.day',
				reducedNight: 'reduced.night',
				basicMap: {
					options: {
						type: 'basetile'
					}
				},
				mapLabels: {
					options: {
						type: 'labeltile',
						format: 'png'
					}
				},
				trafficFlow: {
					options: {
						base: 'traffic',
						type: 'flowtile'
					}
				},
				carnavDayGrey: 'carnav.day.grey',
				hybridDay: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day'
					}
				},
				hybridDayMobile: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.mobile'
					}
				},
				hybridDayTransit: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.transit'
					}
				},
				hybridDayGrey: {
					options: {
						base: 'aerial',
						variant: 'hybrid.grey.day'
					}
				},
				pedestrianDay: 'pedestrian.day',
				pedestrianNight: 'pedestrian.night',
				satelliteDay: {
					options: {
						base: 'aerial',
						variant: 'satellite.day'
					}
				},
				terrainDay: {
					options: {
						base: 'aerial',
						variant: 'terrain.day'
					}
				},
				terrainDayMobile: {
					options: {
						base: 'aerial',
						variant: 'terrain.day.mobile'
					}
				}
			}
		},
		FreeMapSK: {
			url: 'http://t{s}.freemap.sk/T/{z}/{x}/{y}.jpeg',
			options: {
				minZoom: 8,
				maxZoom: 16,
				subdomains: '1234',
				bounds: [[47.204642, 15.996093], [49.830896, 22.576904]],
				attribution:
					'{attribution.OpenStreetMap}, vizualization CC-By-SA 2.0 &lt;a href=&quot;http://freemap.sk&quot;&gt;Freemap.sk&lt;/a&gt;'
			}
		},
		MtbMap: {
			url: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png',
			options: {
				attribution:
					'{attribution.OpenStreetMap} &amp;amp; USGS'
			}
		},
		CartoDB: {
			url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '{attribution.OpenStreetMap} &amp;copy; &lt;a href=&quot;https://carto.com/attributions&quot;&gt;CARTO&lt;/a&gt;',
				subdomains: 'abcd',
				maxZoom: 19,
				variant: 'light_all'
			},
			variants: {
				Positron: 'light_all',
				PositronNoLabels: 'light_nolabels',
				PositronOnlyLabels: 'light_only_labels',
				DarkMatter: 'dark_all',
				DarkMatterNoLabels: 'dark_nolabels',
				DarkMatterOnlyLabels: 'dark_only_labels',
				Voyager: 'rastertiles/voyager',
				VoyagerNoLabels: 'rastertiles/voyager_nolabels',
				VoyagerOnlyLabels: 'rastertiles/voyager_only_labels',
				VoyagerLabelsUnder: 'rastertiles/voyager_labels_under'
			}
		},
		HikeBike: {
			url: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: '{attribution.OpenStreetMap}',
				variant: 'hikebike'
			},
			variants: {
				HikeBike: {},
				HillShading: {
					options: {
						maxZoom: 15,
						variant: 'hillshading'
					}
				}
			}
		},
		BasemapAT: {
			url: 'https://maps{s}.wien.gv.at/basemap/{variant}/normal/google3857/{z}/{y}/{x}.{format}',
			options: {
				maxZoom: 19,
				attribution: 'Datenquelle: &lt;a href=&quot;https://www.basemap.at&quot;&gt;basemap.at&lt;/a&gt;',
				subdomains: ['', '1', '2', '3', '4'],
				format: 'png',
				bounds: [[46.358770, 8.782379], [49.037872, 17.189532]],
				variant: 'geolandbasemap'
			},
			variants: {
				basemap: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'geolandbasemap'
					}
				},
				grau: 'bmapgrau',
				overlay: 'bmapoverlay',
				highdpi: {
					options: {
						variant: 'bmaphidpi',
						format: 'jpeg'
					}
				},
				orthofoto: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'bmaporthofoto30cm',
						format: 'jpeg'
					}
				}
			}
		},
		nlmaps: {
			url: 'https://geodata.nationaalgeoregister.nl/tiles/service/wmts/{variant}/EPSG:3857/{z}/{x}/{y}.png',
			options: {
				minZoom: 6,
				maxZoom: 19,
				bounds: [[50.5, 3.25], [54, 7.6]],
				attribution: 'Kaartgegevens &amp;copy; &lt;a href=&quot;kadaster.nl&quot;&gt;Kadaster&lt;/a&gt;'
			},
			variants: {
				'standaard': 'brtachtergrondkaart',
				'pastel': 'brtachtergrondkaartpastel',
				'grijs': 'brtachtergrondkaartgrijs',
				'luchtfoto': {
					'url': 'https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts/1.0.0/2016_ortho25/EPSG:3857/{z}/{x}/{y}.png',
				}
			}
		},
		NASAGIBS: {
			url: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}',
			options: {
				attribution:
					'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' +
					'(&lt;a href=&quot;https://earthdata.nasa.gov&quot;&gt;ESDIS&lt;/a&gt;) with funding provided by NASA/HQ.',
				bounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]],
				minZoom: 1,
				maxZoom: 9,
				format: 'jpg',
				time: '',
				tilematrixset: 'GoogleMapsCompatible_Level'
			},
			variants: {
				ModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor',
				ModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367',
				ViirsEarthAtNight2012: {
					options: {
						variant: 'VIIRS_CityLights_2012',
						maxZoom: 8
					}
				},
				ModisTerraLSTDay: {
					options: {
						variant: 'MODIS_Terra_Land_Surface_Temp_Day',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				},
				ModisTerraSnowCover: {
					options: {
						variant: 'MODIS_Terra_Snow_Cover',
						format: 'png',
						maxZoom: 8,
						opacity: 0.75
					}
				},
				ModisTerraAOD: {
					options: {
						variant: 'MODIS_Terra_Aerosol',
						format: 'png',
						maxZoom: 6,
						opacity: 0.75
					}
				},
				ModisTerraChlorophyll: {
					options: {
						variant: 'MODIS_Terra_Chlorophyll_A',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				}
			}
		},
		NLS: {
			// NLS maps are copyright National library of Scotland.
			// http://maps.nls.uk/projects/api/index.html
			// Please contact NLS for anything other than non-commercial low volume usage
			//
			// Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s
			//   z0-9  - 1:1m
			//  z10-11 - quarter inch (1:253440)
			//  z12-18 - one inch (1:63360)
			url: 'https://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg',
			options: {
				attribution: '&lt;a href=&quot;http://geo.nls.uk/maps/&quot;&gt;National Library of Scotland Historic Maps&lt;/a&gt;',
				bounds: [[49.6, -12], [61.7, 3]],
				minZoom: 1,
				maxZoom: 18,
				subdomains: '0123',
			}
		},
		JusticeMap: {
			// Justice Map (http://www.justicemap.org/)
			// Visualize race and income data for your community, county and country.
			// Includes tools for data journalists, bloggers and community activists.
			url: 'http://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png',
			options: {
				attribution: '&lt;a href=&quot;http://www.justicemap.org/terms.php&quot;&gt;Justice Map&lt;/a&gt;',
				// one of 'county', 'tract', 'block'
				size: 'county',
				// Bounds for USA, including Alaska and Hawaii
				bounds: [[14, -180], [72, -56]]
			},
			variants: {
				income: 'income',
				americanIndian: 'indian',
				asian: 'asian',
				black: 'black',
				hispanic: 'hispanic',
				multi: 'multi',
				nonWhite: 'nonwhite',
				white: 'white',
				plurality: 'plural'
			}
		},
		Wikimedia: {
			url: 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '&lt;a href=&quot;https://wikimediafoundation.org/wiki/Maps_Terms_of_Use&quot;&gt;Wikimedia&lt;/a&gt;',
				minZoom: 1,
				maxZoom: 19
			}
		},
		GeoportailFrance: {
			url: 'https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&amp;SERVICE=WMTS&amp;VERSION=1.0.0&amp;STYLE={style}&amp;TILEMATRIXSET=PM&amp;FORMAT={format}&amp;LAYER={variant}&amp;TILEMATRIX={z}&amp;TILEROW={y}&amp;TILECOL={x}',
			options: {
				attribution: '&lt;a target=&quot;_blank&quot; href=&quot;https://www.geoportail.gouv.fr/&quot;&gt;Geoportail France&lt;/a&gt;',
				bounds: [[-75, -180], [81, 180]],
				minZoom: 2,
				maxZoom: 18,
				// Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/
				// NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee
				apikey: 'choisirgeoportail',
				format: 'image/jpeg',
				style : 'normal',
				variant: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD'
			},
			variants: {
				parcels: {
					options : {
						variant: 'CADASTRALPARCELS.PARCELS',
						maxZoom: 20,
						style : 'bdparcellaire',
						format: 'image/png'
					}
				},
				ignMaps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS',
				maps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD',
				orthos: {
					options: {
						maxZoom: 19,
						variant: 'ORTHOIMAGERY.ORTHOPHOTOS'
					}
				}
			}
		},
		OneMapSG: {
			url: 'https://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png',
			options: {
				variant: 'Default',
				minZoom: 11,
				maxZoom: 18,
				bounds: [[1.56073, 104.11475], [1.16, 103.502]],
				attribution: '&lt;img src=&quot;https://docs.onemap.sg/maps/images/oneMap64-01.png&quot; style=&quot;height:20px;width:20px;&quot;/&gt; New OneMap | Map data &amp;copy; contributors, &lt;a href=&quot;http://SLA.gov.sg&quot;&gt;Singapore Land Authority&lt;/a&gt;'
			},
			variants: {
				Default: 'Default',
				Night: 'Night',
				Original: 'Original',
				Grey: 'Grey',
				LandLot: 'LandLot'
			}
		}
	};

	L.tileLayer.provider = function (provider, options) {
		return new L.TileLayer.Provider(provider, options);
	};

	return L;
}));
`;
            if(!document.getElementById(provEl.id)){
                 document.head.appendChild(provEl);        
            }
            _createMap();
            }
        esriEl.src = esriLeafletCdn + &quot;esri-leaflet.js&quot;;
        addToHeadIfNotLoaded(esriEl);
        };
    leafletJsEl.src = leafletCdn + &quot;leaflet.js&quot;;
    addToHeadIfNotLoaded(leafletJsEl);
})();
&lt;/script&gt;

&lt;p&gt;This long holiday weekend, I spent 2 nights in the Golden Trout Wilderness of Inyo National Forest for my first ever solo (+Nali) backpacking trip. This trip was a such a refreshing change of scenery, I had an amazing time.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/backpacking/cottonwood/cottonwood-5.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/backpacking/cottonwood/cottonwood-5.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/backpacking/cottonwood/cottonwood-7.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/backpacking/cottonwood/cottonwood-7.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The first day on this trail was an exhausting 12 miles on Cottonwood pass trail and the PCT. The weather was beautiful, birds were out chirping, and the flowing streams provided a peaceful ambience – Paradise!&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/backpacking/cottonwood/cottonwood-3.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/backpacking/cottonwood/cottonwood-3.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/backpacking/cottonwood/cottonwood-6.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/backpacking/cottonwood/cottonwood-6.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The second day, I slept in and hung around Soldier Lake for some meditation, solitary yoga, and journaling. In the afternoon, I made my way on Army Pass trail to Cottonwood lakes to see the amazing overlooks shown in the first picture. There was a moderate amount of snow on the way up, but the trail was still accessible. The way down, however, was completely blocked by snow with no safe way to descend. I unfortunately couldn’t complete &lt;a href=&quot;https://www.alltrails.com/explore/trail/us/california/cottonwood-pass-new-army-pass-loop&quot;&gt;the loop I was planning&lt;/a&gt;, I had to turn around and camp back at my previous night spot.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/backpacking/cottonwood/cottonwood-1.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/backpacking/cottonwood/cottonwood-1.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/backpacking/cottonwood/cottonwood-2.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/backpacking/cottonwood/cottonwood-2.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;This meant that my 3rd and final day was retracing my steps on the 12 mile PCT/Cottonwood pass trail. I was sad that I didn’t get to see Cottonwood lakes, but that just gives me an excuse to come back here!&lt;/p&gt;

&lt;p&gt;Needless to say, Nali and I were exhausted both during and after our weekend adventure. Nali loves nothing more than napping in the sun after a long day, so I’ll leave you with this:&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/backpacking/cottonwood/cottonwood-4.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/backpacking/cottonwood/cottonwood-4.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;</content><author><name>David Vitale</name></author><category term="travel" /><category term="misc" /><category term="backpacking" /><summary type="html"></summary></entry><entry><title type="html">Delamar Mountain Trail</title><link href="/blog/travel/day-hikes/delamar-mountain" rel="alternate" type="text/html" title="Delamar Mountain Trail" /><published>2020-05-09T00:00:00-07:00</published><updated>2020-05-09T00:00:00-07:00</updated><id>/blog/travel/day-hikes/delamar-mountain</id><content type="html" xml:base="/blog/travel/day-hikes/delamar-mountain">&lt;div id=&quot;leaflet-map-27d4bf878620afa05872c1ab3ed88811&quot; class=&quot;leaflet-map&quot;&gt;&lt;/div&gt;
&lt;script&gt;(() =&gt; {
// Specify configuration variables, setup any elements and styling
    var leafletCdn = &quot;https://unpkg.com/leaflet@1.6.0/dist/&quot;;
    var esriLeafletCdn = &quot;https://unpkg.com/esri-leaflet/dist/&quot;;

    // Get tag input arguments &amp; inside block object list
    var tagInputArg = {&quot;zoom&quot; : 12 } ;
    var blockLeafletItems = [
    {id: &quot;6248bbec58675a5f813c56dd18a43753&quot;,
              type: &quot;LeafletMarker&quot;,
              value: {&quot;latitude&quot; : 34.263995,
                       &quot;longitude&quot; : -116.910943,
                       &quot;popupContent&quot;: &quot;Deamar Mountain Trail&quot; } }, 
    {id: &quot;d231975c55e89964b9c2111eb4f70091&quot;,
              type: &quot;LeafletGeoJSON&quot;,
              value: &quot;/assets/personal/geojson/day-hikes/2020-05-09-delamar-mountain.geojson&quot; },

];

    // Override the map div id if specified, apply default CSS
    var defaultMapElId = &quot;leaflet-map-27d4bf878620afa05872c1ab3ed88811&quot;;
   var defaultMapElStyle = &quot;height:300px; margin-top:15px; margin-bottom:15px&quot;;
    var mapEl = document.getElementById(defaultMapElId);
    if('divId' in tagInputArg){
        mapEl.id = tagInputArg['divId'];
    }
    var defaultMapCssEl = document.createElement(&quot;style&quot;);
    defaultMapCssEl.innerHTML = 
        &quot;#&quot; + defaultMapElId + &quot;{&quot; + defaultMapElStyle + &quot;}&quot;;
    document.head.appendChild(defaultMapCssEl);

    var newWindowImgSrcBase64 = &quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH4wUVFzAHq2j99AAAAV9JREFUSMdjYKAxYCRHk5ubG9+1a9fm/v//H6cadnb2G/fu3atlIceC379/c3z9+jUEn5q/f/8eYWBgYECxQE5OroqA2Y8ePXq0hJWV9Qc3N/caZB8wMjJKff361QpvEAkKCv4nYMGh9+/f26MLamhoyLx9+3b/nz9/VJCC6MiLFy9sWXCE3xlGRsZvWKQu4DOciYnpCzc396HPnz97weRxWRD/8OHDa4TiAt1wfn5+z79//zoxMDDALWAiN/lhM/zevXtH0NUx0dJwsiwgxXCccUCJ4dzc3DP+//+/gZ2d/duLFy9Is+Djx4+rCbn82rVrrxgYGF6RFUR8fHyZbGxsD7AZLiEhUSAiIrJSUlIyjOw4uHnz5gVHR0d1bC7/8+eP5d+/f8P+/PmjS1Ekr1ix4hcp6ploXVwPfQuwJlMmJiYBLS0tIVIMev36NRvRFnz48OHohw8fhkYQjQKCAAChiL6Pj/LM2QAAAABJRU5ErkJggg==&quot;;

// Actual mapping section; Specify a function to be called later that 
// assembles the correct JS components based on what the user specified in the 
// tag input arg, the block section of features, etc. Actually creates the map
// that is visible on the page

    function _getCenter(){
        var defaultCenter = [0,0];
        if(&quot;center&quot; in tagInputArg){
            return tagInputArg.center;
        } else {
            return defaultCenter;
        }
    }

    function _getZoom(){
        var defaultZoom = 1;
        if(&quot;zoom&quot; in tagInputArg){
            return tagInputArg.zoom
        } else {
            return defaultZoom;
        }
    }

    function _getProviderBasemap(){
        var defaultProviderBasemap = &quot;OpenStreetMap.Mapnik&quot;;
        if(&quot;providerBasemap&quot; in tagInputArg){
            return tagInputArg.providerBasemap;
        } else {
            return defaultProviderBasemap;
        }
    }


    function _addMarkerToMap(leafletItem, map){
        var m = leafletItem.value;
        var result = L.marker([m.latitude, m.longitude]).addTo(map);
        var potentialPopup = &quot;&quot;;
        if('popupContent' in m){
                potentialPopup += m.popupContent;}
        if('href' in m){
            potentialPopup += '&lt;a href=&quot;' + m.href + '&quot;&gt;' + 
                '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            result.bindPopup(potentialPopup);}
        if(!('center' in tagInputArg)){
            // If the user didn't specify a center, infer from marker
            map.panTo(new L.LatLng(m.latitude, m.longitude));
        }
    }

    function _onEachFeature(feature, layer){
        var potentialPopup = &quot;&quot;
        if(feature.properties &amp;&amp; feature.properties.popupContent){
            potentialPopup += feature.properties.popupContent;
        }
        if(feature.properties &amp;&amp; feature.properties.href){
            potentialPopup += 
                '&lt;a href=&quot;' + feature.properties.href + '&quot;&gt;' + 
                    '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            layer.bindPopup(potentialPopup);
        }
    }

    function _addGeoJSONToMap(leafletItem, map){
        if(typeof leafletItem.value === &quot;string&quot;){
            fetch(leafletItem.value).then((resp) =&gt; {
                return resp.json();
            }).then((data) =&gt; {
                leafletItem.value = data;
                _addGeoJSONObjToMap(leafletItem, map);
            }).catch((err) =&gt; {
                console.log(&quot;Encountered err w/ geojson, attempting to fix..&quot;);
                console.log(err);
                _addGeoJSONObjToMap(leafletItem, map);
            });
        } else {
            _addGeoJSONObjToMap(leafletItem, map);
        }
     }

    function _addGeoJSONObjToMap(leafletItem, map){
         var geojson = L.geoJSON(leafletItem.value, { 
            onEachFeature: _onEachFeature 
        });
        layers = geojson.getLayers();
        for(var i=0; i&lt;layers.length; i++){
            try{
                var geom = layers[i].feature.geometry;
                if(!('center' in tagInputArg)){
                    // If the user didn't specify a center, infer from geojson
                    //console.log(&quot;panning to &quot; + geom.coordinates);
                    map.panTo(new L.LatLng(geom.coordinates[1],
                                           geom.coordinates[0]));
                }
            } catch(e){}
        }
       
        geojson.addTo(map);
       
    }

    function _processLeafletItem(leafletItem, map){
        switch(leafletItem.type){
            case &quot;LeafletMarker&quot;:
                _addMarkerToMap(leafletItem, map);
                break;
            case &quot;LeafletGeoJSON&quot;:
                _addGeoJSONToMap(leafletItem, map);
                break;
            case undefined:
                break; 
            default:
                console.log(&quot;Couldn't add item &quot; + leafletItem.id);
                break;
        }
    }

//The actual section that is called that creates a map
    function createMap(){
        console.log(&quot;Creating map 27d4bf878620afa05872c1ab3ed88811 with these args:&quot;);
        console.log(tagInputArg);

        //Initialize Map with the correct input arguments
        var map = L.map(mapEl.id, 
            {worldCopyJump: true}).setView(_getCenter(), _getZoom());
        L.tileLayer.provider(_getProviderBasemap()).addTo(map);
        if(&quot;esriBasemap&quot; in tagInputArg){
            L.esri.basemapLayer(tagInputArg.esriBasemap).addTo(map);
        }

        //process each Leaflet Item passed in between the block tag middle
        for(var i=0; i&lt;blockLeafletItems.length; i++){
            var leafletItem = blockLeafletItems[i];
            console.log(&quot;Adding leaflet item &quot; + leafletItem.id + &quot;:&quot;);
            console.log(leafletItem);
            _processLeafletItem(leafletItem, map);
        }
    }

// Load the correct JS libraries/CSS by adding to head: 
// When ready, call createMap() to create the map on the page

    function _createMap(){
        // helper function to draw the map only when everything is loaded,
        // safeguards against multiple calls to window.onload
        var prevOnLoad;
        if(window.onload){
            prevOnLoad = window.onload;
        }
        window.onload = () =&gt; {
            createMap();
            if(prevOnLoad){
                prevOnLoad();
            }
        }
    }

    var leafletCssId = &quot;leaflet-css-head&quot;;
    var leafletJsId = &quot;leaflet-js-head&quot;;
    var esriLeafletJsId = &quot;esri-leaflet-js-head&quot;;
    var leafletProvidersJsId = &quot;leaflet-providers-js-head&quot;;

    // Add the leaflet CSS first, don't worry about when it loads
    var leafletCssEl = document.createElement(&quot;link&quot;);
    leafletCssEl.id = leafletCssId;
    leafletCssEl.rel = &quot;stylesheet&quot;;
    leafletCssEl.href = leafletCdn + &quot;leaflet.css&quot;;
    if(!document.getElementById(leafletCssEl.id)){
        document.head.appendChild(leafletCssEl);
    }

    function addToHeadIfNotLoaded(el) {
        //Add the el to the head if it doesn't exist already. If it does,
        //everything we need is already loaded, so draw the map
        if(!document.getElementById(el.id)){
            document.head.appendChild(el);
        } else {
            _createMap();
        }
    }

    // Load the main leaflet.js code, wait for it to load
    var leafletJsEl = document.createElement(&quot;script&quot;);
    leafletJsEl.id = leafletJsId;
    leafletJsEl.onload = () =&gt; {
        //After loaded, load the esri-leaflet.js code, wait for it to load
        var esriEl = document.createElement(&quot;script&quot;);
        esriEl.id = esriLeafletJsId;
        esriEl.onload = () =&gt; {
            //After loaded, add the inline leaflet-providers &lt;script&gt;
            provEl = document.createElement(&quot;script&quot;);
            provEl.id = leafletProvidersJsId;
            provEl.innerHTML = `//Taken from https://github.com/leaflet-extras/leaflet-providers
(function (root, factory) {
	if (typeof define === 'function' &amp;&amp; define.amd) {
		// AMD. Register as an anonymous module.
		define(['leaflet'], factory);
	} else if (typeof modules === 'object' &amp;&amp; module.exports) {
		// define a Common JS module that relies on 'leaflet'
		module.exports = factory(require('leaflet'));
	} else {
		// Assume Leaflet is loaded into global object L already
		factory(L);
	}
}(this, function (L) {
	'use strict';

	L.TileLayer.Provider = L.TileLayer.extend({
		initialize: function (arg, options) {
			var providers = L.TileLayer.Provider.providers;

			var parts = arg.split('.');

			var providerName = parts[0];
			var variantName = parts[1];

			if (!providers[providerName]) {
				throw 'No such provider (' + providerName + ')';
			}

			var provider = {
				url: providers[providerName].url,
				options: providers[providerName].options
			};

			// overwrite values in provider from variant.
			if (variantName &amp;&amp; 'variants' in providers[providerName]) {
				if (!(variantName in providers[providerName].variants)) {
					throw 'No such variant of ' + providerName + ' (' + variantName + ')';
				}
				var variant = providers[providerName].variants[variantName];
				var variantOptions;
				if (typeof variant === 'string') {
					variantOptions = {
						variant: variant
					};
				} else {
					variantOptions = variant.options;
				}
				provider = {
					url: variant.url || provider.url,
					options: L.Util.extend({}, provider.options, variantOptions)
				};
			}

			// replace attribution placeholders with their values from toplevel provider attribution,
			// recursively
			var attributionReplacer = function (attr) {
				if (attr.indexOf('{attribution.') === -1) {
					return attr;
				}
				return attr.replace(/\{attribution.(\w*)\}/g,
					function (match, attributionName) {
						return attributionReplacer(providers[attributionName].options.attribution);
					}
				);
			};
			provider.options.attribution = attributionReplacer(provider.options.attribution);

			// Compute final options combining provider options with any user overrides
			var layerOpts = L.Util.extend({}, provider.options, options);
			L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts);
		}
	});

	/**
	 * Definition of providers.
	 * see http://leafletjs.com/reference.html#tilelayer for options in the options map.
	 */

	L.TileLayer.Provider.providers = {
		OpenStreetMap: {
			url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution:
					'&amp;copy; &lt;a href=&quot;https://www.openstreetmap.org/copyright&quot;&gt;OpenStreetMap&lt;/a&gt; contributors'
			},
			variants: {
				Mapnik: {},
				DE: {
					url: 'https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18
					}
				},
				CH: {
					url: 'https://tile.osm.ch/switzerland/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18,
						bounds: [[45, 5], [48, 11]]
					}
				},
				France: {
					url: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png',
					options: {
						maxZoom: 20,
						attribution: '&amp;copy; Openstreetmap France | {attribution.OpenStreetMap}'
					}
				},
				HOT: {
					url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',
					options: {
						attribution:
							'{attribution.OpenStreetMap}, ' +
							'Tiles style by &lt;a href=&quot;https://www.hotosm.org/&quot; target=&quot;_blank&quot;&gt;Humanitarian OpenStreetMap Team&lt;/a&gt; ' +
							'hosted by &lt;a href=&quot;https://openstreetmap.fr/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap France&lt;/a&gt;'
					}
				},
				BZH: {
					url: 'https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png',
					options: {
						attribution: '{attribution.OpenStreetMap}, Tiles courtesy of &lt;a href=&quot;http://www.openstreetmap.bzh/&quot; target=&quot;_blank&quot;&gt;Breton OpenStreetMap Team&lt;/a&gt;',
						bounds: [[46.2, -5.5], [50, 0.7]]
					}
				}
			}
		},
		OpenSeaMap: {
			url: 'https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png',
			options: {
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openseamap.org&quot;&gt;OpenSeaMap&lt;/a&gt; contributors'
			}
		},
		OpenPtMap: {
			url: 'http://openptmap.org/tiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openptmap.org&quot;&gt;OpenPtMap&lt;/a&gt; contributors'
			}
		},
		OpenTopoMap: {
			url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: {attribution.OpenStreetMap}, &lt;a href=&quot;http://viewfinderpanoramas.org&quot;&gt;SRTM&lt;/a&gt; | Map style: &amp;copy; &lt;a href=&quot;https://opentopomap.org&quot;&gt;OpenTopoMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenRailwayMap: {
			url: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://www.OpenRailwayMap.org&quot;&gt;OpenRailwayMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenFireMap: {
			url: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;http://www.openfiremap.org&quot;&gt;OpenFireMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		SafeCast: {
			url: 'https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 16,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://blog.safecast.org/about/&quot;&gt;SafeCast&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		Thunderforest: {
			url: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}',
			options: {
				attribution:
					'&amp;copy; &lt;a href=&quot;http://www.thunderforest.com/&quot;&gt;Thunderforest&lt;/a&gt;, {attribution.OpenStreetMap}',
				variant: 'cycle',
				apikey: '&lt;insert your api key here&gt;',
				maxZoom: 22
			},
			variants: {
				OpenCycleMap: 'cycle',
				Transport: {
					options: {
						variant: 'transport'
					}
				},
				TransportDark: {
					options: {
						variant: 'transport-dark'
					}
				},
				SpinalMap: {
					options: {
						variant: 'spinal-map'
					}
				},
				Landscape: 'landscape',
				Outdoors: 'outdoors',
				Pioneer: 'pioneer'
			}
		},
		OpenMapSurfer: {
			url: 'https://maps.heigit.org/openmapsurfer/tiles/{variant}/webmercator/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				variant: 'roads',
				attribution: 'Imagery from &lt;a href=&quot;http://giscience.uni-hd.de/&quot;&gt;GIScience Research Group @ University of Heidelberg&lt;/a&gt; | Map data '
			},
			variants: {
				Roads: {
					options: {
						variant: 'roads',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				Hybrid: {
					options: {
						variant: 'hybrid',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				AdminBounds: {
					options: {
						variant: 'adminb',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				ContourLines: {
					options: {
						variant: 'asterc',
						maxZoom: 18,
						minZoom: 13,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;'
					}
				},
				Hillshade: {
					options: {
						variant: 'asterh',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;, &lt;a href=&quot;http://srtm.csi.cgiar.org/&quot;&gt;SRTM&lt;/a&gt;'
					}
				},
				ElementsAtRisk: {
					options: {
						variant: 'elements_at_risk',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				}
			}
		},
		Hydda: {
			url: 'https://{s}.tile.openstreetmap.se/hydda/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 18,
				variant: 'full',
				attribution: 'Tiles courtesy of &lt;a href=&quot;http://openstreetmap.se/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap Sweden&lt;/a&gt; &amp;mdash; Map data {attribution.OpenStreetMap}'
			},
			variants: {
				Full: 'full',
				Base: 'base',
				RoadsAndLabels: 'roads_and_labels'
			}
		},
		MapBox: {
			url: 'https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}{r}.png?access_token={accessToken}',
			options: {
				attribution:
					'&lt;a href=&quot;https://www.mapbox.com/about/maps/&quot; target=&quot;_blank&quot;&gt;&amp;copy; Mapbox&lt;/a&gt; ' +
					'{attribution.OpenStreetMap} ' +
					'&lt;a href=&quot;https://www.mapbox.com/map-feedback/&quot; target=&quot;_blank&quot;&gt;Improve this map&lt;/a&gt;',
				subdomains: 'abcd',
				id: 'mapbox.streets',
				accessToken: '&lt;insert your access token here&gt;',
			}
		},
		Stamen: {
			url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}{r}.{ext}',
			options: {
				attribution:
					'Map tiles by &lt;a href=&quot;http://stamen.com&quot;&gt;Stamen Design&lt;/a&gt;, ' +
					'&lt;a href=&quot;http://creativecommons.org/licenses/by/3.0&quot;&gt;CC BY 3.0&lt;/a&gt; &amp;mdash; ' +
					'Map data {attribution.OpenStreetMap}',
				subdomains: 'abcd',
				minZoom: 0,
				maxZoom: 20,
				variant: 'toner',
				ext: 'png'
			},
			variants: {
				Toner: 'toner',
				TonerBackground: 'toner-background',
				TonerHybrid: 'toner-hybrid',
				TonerLines: 'toner-lines',
				TonerLabels: 'toner-labels',
				TonerLite: 'toner-lite',
				Watercolor: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'watercolor',
						ext: 'jpg',
						minZoom: 1,
						maxZoom: 16
					}
				},
				Terrain: {
					options: {
						variant: 'terrain',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TerrainBackground: {
					options: {
						variant: 'terrain-background',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TopOSMRelief: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'toposm-color-relief',
						ext: 'jpg',
						bounds: [[22, -132], [51, -56]]
					}
				},
				TopOSMFeatures: {
					options: {
						variant: 'toposm-features',
						bounds: [[22, -132], [51, -56]],
						opacity: 0.9
					}
				}
			}
		},
		Esri: {
			url: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}',
			options: {
				variant: 'World_Street_Map',
				attribution: 'Tiles &amp;copy; Esri'
			},
			variants: {
				WorldStreetMap: {
					options: {
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'
					}
				},
				DeLorme: {
					options: {
						variant: 'Specialty/DeLorme_World_Base_Map',
						minZoom: 1,
						maxZoom: 11,
						attribution: '{attribution.Esri} &amp;mdash; Copyright: &amp;copy;2012 DeLorme'
					}
				},
				WorldTopoMap: {
					options: {
						variant: 'World_Topo_Map',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community'
					}
				},
				WorldImagery: {
					options: {
						variant: 'World_Imagery',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
					}
				},
				WorldTerrain: {
					options: {
						variant: 'World_Terrain_Base',
						maxZoom: 13,
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: USGS, Esri, TANA, DeLorme, and NPS'
					}
				},
				WorldShadedRelief: {
					options: {
						variant: 'World_Shaded_Relief',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Source: Esri'
					}
				},
				WorldPhysical: {
					options: {
						variant: 'World_Physical_Map',
						maxZoom: 8,
						attribution: '{attribution.Esri} &amp;mdash; Source: US National Park Service'
					}
				},
				OceanBasemap: {
					options: {
						variant: 'Ocean_Basemap',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri'
					}
				},
				NatGeoWorldMap: {
					options: {
						variant: 'NatGeo_World_Map',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC'
					}
				},
				WorldGrayCanvas: {
					options: {
						variant: 'Canvas/World_Light_Gray_Base',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; Esri, DeLorme, NAVTEQ'
					}
				}
			}
		},
		OpenWeatherMap: {
			url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}',
			options: {
				maxZoom: 19,
				attribution: 'Map data &amp;copy; &lt;a href=&quot;http://openweathermap.org&quot;&gt;OpenWeatherMap&lt;/a&gt;',
				apiKey:'&lt;insert your api key here&gt;',
				opacity: 0.5
			},
			variants: {
				Clouds: 'clouds',
				CloudsClassic: 'clouds_cls',
				Precipitation: 'precipitation',
				PrecipitationClassic: 'precipitation_cls',
				Rain: 'rain',
				RainClassic: 'rain_cls',
				Pressure: 'pressure',
				PressureContour: 'pressure_cntr',
				Wind: 'wind',
				Temperature: 'temp',
				Snow: 'snow'
			}
		},
		HERE: {
			/*
			 * HERE maps, formerly Nokia maps.
			 * These basemaps are free, but you need an API key. Please sign up at
			 * https://developer.here.com/plans
			 */
			url:
				'https://{s}.{base}.maps.api.here.com/maptile/2.1/' +
				'{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' +
				'app_id={app_id}&amp;app_code={app_code}&amp;lg={language}',
			options: {
				attribution:
					'Map &amp;copy; 1987-' + new Date().getFullYear() + ' &lt;a href=&quot;http://developer.here.com&quot;&gt;HERE&lt;/a&gt;',
				subdomains: '1234',
				mapID: 'newest',
				'app_id': '&lt;insert your app_id here&gt;',
				'app_code': '&lt;insert your app_code here&gt;',
				base: 'base',
				variant: 'normal.day',
				maxZoom: 20,
				type: 'maptile',
				language: 'eng',
				format: 'png8',
				size: '256'
			},
			variants: {
				normalDay: 'normal.day',
				normalDayCustom: 'normal.day.custom',
				normalDayGrey: 'normal.day.grey',
				normalDayMobile: 'normal.day.mobile',
				normalDayGreyMobile: 'normal.day.grey.mobile',
				normalDayTransit: 'normal.day.transit',
				normalDayTransitMobile: 'normal.day.transit.mobile',
				normalNight: 'normal.night',
				normalNightMobile: 'normal.night.mobile',
				normalNightGrey: 'normal.night.grey',
				normalNightGreyMobile: 'normal.night.grey.mobile',
				normalNightTransit: 'normal.night.transit',
				normalNightTransitMobile: 'normal.night.transit.mobile',
				reducedDay: 'reduced.day',
				reducedNight: 'reduced.night',
				basicMap: {
					options: {
						type: 'basetile'
					}
				},
				mapLabels: {
					options: {
						type: 'labeltile',
						format: 'png'
					}
				},
				trafficFlow: {
					options: {
						base: 'traffic',
						type: 'flowtile'
					}
				},
				carnavDayGrey: 'carnav.day.grey',
				hybridDay: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day'
					}
				},
				hybridDayMobile: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.mobile'
					}
				},
				hybridDayTransit: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.transit'
					}
				},
				hybridDayGrey: {
					options: {
						base: 'aerial',
						variant: 'hybrid.grey.day'
					}
				},
				pedestrianDay: 'pedestrian.day',
				pedestrianNight: 'pedestrian.night',
				satelliteDay: {
					options: {
						base: 'aerial',
						variant: 'satellite.day'
					}
				},
				terrainDay: {
					options: {
						base: 'aerial',
						variant: 'terrain.day'
					}
				},
				terrainDayMobile: {
					options: {
						base: 'aerial',
						variant: 'terrain.day.mobile'
					}
				}
			}
		},
		FreeMapSK: {
			url: 'http://t{s}.freemap.sk/T/{z}/{x}/{y}.jpeg',
			options: {
				minZoom: 8,
				maxZoom: 16,
				subdomains: '1234',
				bounds: [[47.204642, 15.996093], [49.830896, 22.576904]],
				attribution:
					'{attribution.OpenStreetMap}, vizualization CC-By-SA 2.0 &lt;a href=&quot;http://freemap.sk&quot;&gt;Freemap.sk&lt;/a&gt;'
			}
		},
		MtbMap: {
			url: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png',
			options: {
				attribution:
					'{attribution.OpenStreetMap} &amp;amp; USGS'
			}
		},
		CartoDB: {
			url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '{attribution.OpenStreetMap} &amp;copy; &lt;a href=&quot;https://carto.com/attributions&quot;&gt;CARTO&lt;/a&gt;',
				subdomains: 'abcd',
				maxZoom: 19,
				variant: 'light_all'
			},
			variants: {
				Positron: 'light_all',
				PositronNoLabels: 'light_nolabels',
				PositronOnlyLabels: 'light_only_labels',
				DarkMatter: 'dark_all',
				DarkMatterNoLabels: 'dark_nolabels',
				DarkMatterOnlyLabels: 'dark_only_labels',
				Voyager: 'rastertiles/voyager',
				VoyagerNoLabels: 'rastertiles/voyager_nolabels',
				VoyagerOnlyLabels: 'rastertiles/voyager_only_labels',
				VoyagerLabelsUnder: 'rastertiles/voyager_labels_under'
			}
		},
		HikeBike: {
			url: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: '{attribution.OpenStreetMap}',
				variant: 'hikebike'
			},
			variants: {
				HikeBike: {},
				HillShading: {
					options: {
						maxZoom: 15,
						variant: 'hillshading'
					}
				}
			}
		},
		BasemapAT: {
			url: 'https://maps{s}.wien.gv.at/basemap/{variant}/normal/google3857/{z}/{y}/{x}.{format}',
			options: {
				maxZoom: 19,
				attribution: 'Datenquelle: &lt;a href=&quot;https://www.basemap.at&quot;&gt;basemap.at&lt;/a&gt;',
				subdomains: ['', '1', '2', '3', '4'],
				format: 'png',
				bounds: [[46.358770, 8.782379], [49.037872, 17.189532]],
				variant: 'geolandbasemap'
			},
			variants: {
				basemap: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'geolandbasemap'
					}
				},
				grau: 'bmapgrau',
				overlay: 'bmapoverlay',
				highdpi: {
					options: {
						variant: 'bmaphidpi',
						format: 'jpeg'
					}
				},
				orthofoto: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'bmaporthofoto30cm',
						format: 'jpeg'
					}
				}
			}
		},
		nlmaps: {
			url: 'https://geodata.nationaalgeoregister.nl/tiles/service/wmts/{variant}/EPSG:3857/{z}/{x}/{y}.png',
			options: {
				minZoom: 6,
				maxZoom: 19,
				bounds: [[50.5, 3.25], [54, 7.6]],
				attribution: 'Kaartgegevens &amp;copy; &lt;a href=&quot;kadaster.nl&quot;&gt;Kadaster&lt;/a&gt;'
			},
			variants: {
				'standaard': 'brtachtergrondkaart',
				'pastel': 'brtachtergrondkaartpastel',
				'grijs': 'brtachtergrondkaartgrijs',
				'luchtfoto': {
					'url': 'https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts/1.0.0/2016_ortho25/EPSG:3857/{z}/{x}/{y}.png',
				}
			}
		},
		NASAGIBS: {
			url: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}',
			options: {
				attribution:
					'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' +
					'(&lt;a href=&quot;https://earthdata.nasa.gov&quot;&gt;ESDIS&lt;/a&gt;) with funding provided by NASA/HQ.',
				bounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]],
				minZoom: 1,
				maxZoom: 9,
				format: 'jpg',
				time: '',
				tilematrixset: 'GoogleMapsCompatible_Level'
			},
			variants: {
				ModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor',
				ModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367',
				ViirsEarthAtNight2012: {
					options: {
						variant: 'VIIRS_CityLights_2012',
						maxZoom: 8
					}
				},
				ModisTerraLSTDay: {
					options: {
						variant: 'MODIS_Terra_Land_Surface_Temp_Day',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				},
				ModisTerraSnowCover: {
					options: {
						variant: 'MODIS_Terra_Snow_Cover',
						format: 'png',
						maxZoom: 8,
						opacity: 0.75
					}
				},
				ModisTerraAOD: {
					options: {
						variant: 'MODIS_Terra_Aerosol',
						format: 'png',
						maxZoom: 6,
						opacity: 0.75
					}
				},
				ModisTerraChlorophyll: {
					options: {
						variant: 'MODIS_Terra_Chlorophyll_A',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				}
			}
		},
		NLS: {
			// NLS maps are copyright National library of Scotland.
			// http://maps.nls.uk/projects/api/index.html
			// Please contact NLS for anything other than non-commercial low volume usage
			//
			// Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s
			//   z0-9  - 1:1m
			//  z10-11 - quarter inch (1:253440)
			//  z12-18 - one inch (1:63360)
			url: 'https://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg',
			options: {
				attribution: '&lt;a href=&quot;http://geo.nls.uk/maps/&quot;&gt;National Library of Scotland Historic Maps&lt;/a&gt;',
				bounds: [[49.6, -12], [61.7, 3]],
				minZoom: 1,
				maxZoom: 18,
				subdomains: '0123',
			}
		},
		JusticeMap: {
			// Justice Map (http://www.justicemap.org/)
			// Visualize race and income data for your community, county and country.
			// Includes tools for data journalists, bloggers and community activists.
			url: 'http://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png',
			options: {
				attribution: '&lt;a href=&quot;http://www.justicemap.org/terms.php&quot;&gt;Justice Map&lt;/a&gt;',
				// one of 'county', 'tract', 'block'
				size: 'county',
				// Bounds for USA, including Alaska and Hawaii
				bounds: [[14, -180], [72, -56]]
			},
			variants: {
				income: 'income',
				americanIndian: 'indian',
				asian: 'asian',
				black: 'black',
				hispanic: 'hispanic',
				multi: 'multi',
				nonWhite: 'nonwhite',
				white: 'white',
				plurality: 'plural'
			}
		},
		Wikimedia: {
			url: 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '&lt;a href=&quot;https://wikimediafoundation.org/wiki/Maps_Terms_of_Use&quot;&gt;Wikimedia&lt;/a&gt;',
				minZoom: 1,
				maxZoom: 19
			}
		},
		GeoportailFrance: {
			url: 'https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&amp;SERVICE=WMTS&amp;VERSION=1.0.0&amp;STYLE={style}&amp;TILEMATRIXSET=PM&amp;FORMAT={format}&amp;LAYER={variant}&amp;TILEMATRIX={z}&amp;TILEROW={y}&amp;TILECOL={x}',
			options: {
				attribution: '&lt;a target=&quot;_blank&quot; href=&quot;https://www.geoportail.gouv.fr/&quot;&gt;Geoportail France&lt;/a&gt;',
				bounds: [[-75, -180], [81, 180]],
				minZoom: 2,
				maxZoom: 18,
				// Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/
				// NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee
				apikey: 'choisirgeoportail',
				format: 'image/jpeg',
				style : 'normal',
				variant: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD'
			},
			variants: {
				parcels: {
					options : {
						variant: 'CADASTRALPARCELS.PARCELS',
						maxZoom: 20,
						style : 'bdparcellaire',
						format: 'image/png'
					}
				},
				ignMaps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS',
				maps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD',
				orthos: {
					options: {
						maxZoom: 19,
						variant: 'ORTHOIMAGERY.ORTHOPHOTOS'
					}
				}
			}
		},
		OneMapSG: {
			url: 'https://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png',
			options: {
				variant: 'Default',
				minZoom: 11,
				maxZoom: 18,
				bounds: [[1.56073, 104.11475], [1.16, 103.502]],
				attribution: '&lt;img src=&quot;https://docs.onemap.sg/maps/images/oneMap64-01.png&quot; style=&quot;height:20px;width:20px;&quot;/&gt; New OneMap | Map data &amp;copy; contributors, &lt;a href=&quot;http://SLA.gov.sg&quot;&gt;Singapore Land Authority&lt;/a&gt;'
			},
			variants: {
				Default: 'Default',
				Night: 'Night',
				Original: 'Original',
				Grey: 'Grey',
				LandLot: 'LandLot'
			}
		}
	};

	L.tileLayer.provider = function (provider, options) {
		return new L.TileLayer.Provider(provider, options);
	};

	return L;
}));
`;
            if(!document.getElementById(provEl.id)){
                 document.head.appendChild(provEl);        
            }
            _createMap();
            }
        esriEl.src = esriLeafletCdn + &quot;esri-leaflet.js&quot;;
        addToHeadIfNotLoaded(esriEl);
        };
    leafletJsEl.src = leafletCdn + &quot;leaflet.js&quot;;
    addToHeadIfNotLoaded(leafletJsEl);
})();
&lt;/script&gt;

&lt;p&gt;After a week of suffering through a heat wave, we decided to escape the brutal Southern California heat by heading up the mountains to Big Bear lake. I love how close Bear is to me – I spend a lot of my time skiing here in the winter, and hiking here in the spring/summer. Joining us for this hike are great friends Indhu and Vishwanathan (Chitti).&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/delamar/delamar-1.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/delamar/delamar-1.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/delamar/delamar-2.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/delamar/delamar-2.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;This was another sweet spot elevation-wise for the Spring – the snow had just melted for most of this trail, and it was significantly cooler, shadier, and windier. The majority of this hike was spent on the Pacific Crest Trail (PCT), which coincidentally was the part of the trail that provided the best views.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/delamar/delamar-3.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/delamar/delamar-3.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/delamar/delamar-4.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/delamar/delamar-4.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Highlight of the hike for me were these amazing delicate wildflowers on parts of the trail. Apart from feeling guilty stomping along next to them with my clunky feet, it was such a treat to see them in bloom.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/delamar/delamar-6.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/delamar/delamar-6.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;After we finished this hike and drove down the mountain, I unfortunately got a flat tire. As Chitti and I were undoing the wheel bolts on the spare, a friendly bystander named Clarence (our guardian angel?) pulled over to offer his help. As we tried to turn him down and continue to struggle loosening lug nuts with the manufacturer-provided wrench, he laughed and lent us his much nicer lug wrench and jack. What would have been a 30 minute strugglefest turned into a 10 minute job, and we were on our way. Sending all the good vibes in the world your way Clarence – and know that I’ll be buying a legit wrench and jack at the next opportunity!&lt;/p&gt;

&lt;p&gt;I’ll leave you with something fun from the hike. There was 1 patch of snow we crossed by on our long, streneous hike. Nali took this opportunity to cool off by rolling around adorably in the snow  :).&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/delamar/delamar-5.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/delamar/delamar-5.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Till next hike!&lt;/p&gt;</content><author><name>David Vitale</name></author><category term="travel" /><category term="misc" /><category term="day-hikes" /><summary type="html"></summary></entry><entry><title type="html">Momyer Creek Trail</title><link href="/blog/travel/day-hikes/momyer-creek" rel="alternate" type="text/html" title="Momyer Creek Trail" /><published>2020-04-25T00:00:00-07:00</published><updated>2020-04-25T00:00:00-07:00</updated><id>/blog/travel/day-hikes/momyer-creek</id><content type="html" xml:base="/blog/travel/day-hikes/momyer-creek">&lt;div id=&quot;leaflet-map-3d53693c73ae1eabc1b4e4d9a87cddae&quot; class=&quot;leaflet-map&quot;&gt;&lt;/div&gt;
&lt;script&gt;(() =&gt; {
// Specify configuration variables, setup any elements and styling
    var leafletCdn = &quot;https://unpkg.com/leaflet@1.6.0/dist/&quot;;
    var esriLeafletCdn = &quot;https://unpkg.com/esri-leaflet/dist/&quot;;

    // Get tag input arguments &amp; inside block object list
    var tagInputArg = {&quot;zoom&quot; : 13 } ;
    var blockLeafletItems = [
    {id: &quot;e06f7ec033d48a3deceb397d0286417c&quot;,
              type: &quot;LeafletMarker&quot;,
              value: {&quot;latitude&quot; : 34.08750467,
                       &quot;longitude&quot; : -116.91500166,
                       &quot;popupContent&quot;: &quot;Momyer Creek Trail&quot; } }, 
    {id: &quot;c2ae0d350df97dd1cdec3a9bfe37fb8a&quot;,
              type: &quot;LeafletGeoJSON&quot;,
              value: &quot;/assets/personal/geojson/day-hikes/2020-04-25-momyer-creek.geojson&quot; },

];

    // Override the map div id if specified, apply default CSS
    var defaultMapElId = &quot;leaflet-map-3d53693c73ae1eabc1b4e4d9a87cddae&quot;;
   var defaultMapElStyle = &quot;height:300px; margin-top:15px; margin-bottom:15px&quot;;
    var mapEl = document.getElementById(defaultMapElId);
    if('divId' in tagInputArg){
        mapEl.id = tagInputArg['divId'];
    }
    var defaultMapCssEl = document.createElement(&quot;style&quot;);
    defaultMapCssEl.innerHTML = 
        &quot;#&quot; + defaultMapElId + &quot;{&quot; + defaultMapElStyle + &quot;}&quot;;
    document.head.appendChild(defaultMapCssEl);

    var newWindowImgSrcBase64 = &quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH4wUVFzAHq2j99AAAAV9JREFUSMdjYKAxYCRHk5ubG9+1a9fm/v//H6cadnb2G/fu3atlIceC379/c3z9+jUEn5q/f/8eYWBgYECxQE5OroqA2Y8ePXq0hJWV9Qc3N/caZB8wMjJKff361QpvEAkKCv4nYMGh9+/f26MLamhoyLx9+3b/nz9/VJCC6MiLFy9sWXCE3xlGRsZvWKQu4DOciYnpCzc396HPnz97weRxWRD/8OHDa4TiAt1wfn5+z79//zoxMDDALWAiN/lhM/zevXtH0NUx0dJwsiwgxXCccUCJ4dzc3DP+//+/gZ2d/duLFy9Is+Djx4+rCbn82rVrrxgYGF6RFUR8fHyZbGxsD7AZLiEhUSAiIrJSUlIyjOw4uHnz5gVHR0d1bC7/8+eP5d+/f8P+/PmjS1Ekr1ix4hcp6ploXVwPfQuwJlMmJiYBLS0tIVIMev36NRvRFnz48OHohw8fhkYQjQKCAAChiL6Pj/LM2QAAAABJRU5ErkJggg==&quot;;

// Actual mapping section; Specify a function to be called later that 
// assembles the correct JS components based on what the user specified in the 
// tag input arg, the block section of features, etc. Actually creates the map
// that is visible on the page

    function _getCenter(){
        var defaultCenter = [0,0];
        if(&quot;center&quot; in tagInputArg){
            return tagInputArg.center;
        } else {
            return defaultCenter;
        }
    }

    function _getZoom(){
        var defaultZoom = 1;
        if(&quot;zoom&quot; in tagInputArg){
            return tagInputArg.zoom
        } else {
            return defaultZoom;
        }
    }

    function _getProviderBasemap(){
        var defaultProviderBasemap = &quot;OpenStreetMap.Mapnik&quot;;
        if(&quot;providerBasemap&quot; in tagInputArg){
            return tagInputArg.providerBasemap;
        } else {
            return defaultProviderBasemap;
        }
    }


    function _addMarkerToMap(leafletItem, map){
        var m = leafletItem.value;
        var result = L.marker([m.latitude, m.longitude]).addTo(map);
        var potentialPopup = &quot;&quot;;
        if('popupContent' in m){
                potentialPopup += m.popupContent;}
        if('href' in m){
            potentialPopup += '&lt;a href=&quot;' + m.href + '&quot;&gt;' + 
                '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            result.bindPopup(potentialPopup);}
        if(!('center' in tagInputArg)){
            // If the user didn't specify a center, infer from marker
            map.panTo(new L.LatLng(m.latitude, m.longitude));
        }
    }

    function _onEachFeature(feature, layer){
        var potentialPopup = &quot;&quot;
        if(feature.properties &amp;&amp; feature.properties.popupContent){
            potentialPopup += feature.properties.popupContent;
        }
        if(feature.properties &amp;&amp; feature.properties.href){
            potentialPopup += 
                '&lt;a href=&quot;' + feature.properties.href + '&quot;&gt;' + 
                    '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            layer.bindPopup(potentialPopup);
        }
    }

    function _addGeoJSONToMap(leafletItem, map){
        if(typeof leafletItem.value === &quot;string&quot;){
            fetch(leafletItem.value).then((resp) =&gt; {
                return resp.json();
            }).then((data) =&gt; {
                leafletItem.value = data;
                _addGeoJSONObjToMap(leafletItem, map);
            }).catch((err) =&gt; {
                console.log(&quot;Encountered err w/ geojson, attempting to fix..&quot;);
                console.log(err);
                _addGeoJSONObjToMap(leafletItem, map);
            });
        } else {
            _addGeoJSONObjToMap(leafletItem, map);
        }
     }

    function _addGeoJSONObjToMap(leafletItem, map){
         var geojson = L.geoJSON(leafletItem.value, { 
            onEachFeature: _onEachFeature 
        });
        layers = geojson.getLayers();
        for(var i=0; i&lt;layers.length; i++){
            try{
                var geom = layers[i].feature.geometry;
                if(!('center' in tagInputArg)){
                    // If the user didn't specify a center, infer from geojson
                    //console.log(&quot;panning to &quot; + geom.coordinates);
                    map.panTo(new L.LatLng(geom.coordinates[1],
                                           geom.coordinates[0]));
                }
            } catch(e){}
        }
       
        geojson.addTo(map);
       
    }

    function _processLeafletItem(leafletItem, map){
        switch(leafletItem.type){
            case &quot;LeafletMarker&quot;:
                _addMarkerToMap(leafletItem, map);
                break;
            case &quot;LeafletGeoJSON&quot;:
                _addGeoJSONToMap(leafletItem, map);
                break;
            case undefined:
                break; 
            default:
                console.log(&quot;Couldn't add item &quot; + leafletItem.id);
                break;
        }
    }

//The actual section that is called that creates a map
    function createMap(){
        console.log(&quot;Creating map 3d53693c73ae1eabc1b4e4d9a87cddae with these args:&quot;);
        console.log(tagInputArg);

        //Initialize Map with the correct input arguments
        var map = L.map(mapEl.id, 
            {worldCopyJump: true}).setView(_getCenter(), _getZoom());
        L.tileLayer.provider(_getProviderBasemap()).addTo(map);
        if(&quot;esriBasemap&quot; in tagInputArg){
            L.esri.basemapLayer(tagInputArg.esriBasemap).addTo(map);
        }

        //process each Leaflet Item passed in between the block tag middle
        for(var i=0; i&lt;blockLeafletItems.length; i++){
            var leafletItem = blockLeafletItems[i];
            console.log(&quot;Adding leaflet item &quot; + leafletItem.id + &quot;:&quot;);
            console.log(leafletItem);
            _processLeafletItem(leafletItem, map);
        }
    }

// Load the correct JS libraries/CSS by adding to head: 
// When ready, call createMap() to create the map on the page

    function _createMap(){
        // helper function to draw the map only when everything is loaded,
        // safeguards against multiple calls to window.onload
        var prevOnLoad;
        if(window.onload){
            prevOnLoad = window.onload;
        }
        window.onload = () =&gt; {
            createMap();
            if(prevOnLoad){
                prevOnLoad();
            }
        }
    }

    var leafletCssId = &quot;leaflet-css-head&quot;;
    var leafletJsId = &quot;leaflet-js-head&quot;;
    var esriLeafletJsId = &quot;esri-leaflet-js-head&quot;;
    var leafletProvidersJsId = &quot;leaflet-providers-js-head&quot;;

    // Add the leaflet CSS first, don't worry about when it loads
    var leafletCssEl = document.createElement(&quot;link&quot;);
    leafletCssEl.id = leafletCssId;
    leafletCssEl.rel = &quot;stylesheet&quot;;
    leafletCssEl.href = leafletCdn + &quot;leaflet.css&quot;;
    if(!document.getElementById(leafletCssEl.id)){
        document.head.appendChild(leafletCssEl);
    }

    function addToHeadIfNotLoaded(el) {
        //Add the el to the head if it doesn't exist already. If it does,
        //everything we need is already loaded, so draw the map
        if(!document.getElementById(el.id)){
            document.head.appendChild(el);
        } else {
            _createMap();
        }
    }

    // Load the main leaflet.js code, wait for it to load
    var leafletJsEl = document.createElement(&quot;script&quot;);
    leafletJsEl.id = leafletJsId;
    leafletJsEl.onload = () =&gt; {
        //After loaded, load the esri-leaflet.js code, wait for it to load
        var esriEl = document.createElement(&quot;script&quot;);
        esriEl.id = esriLeafletJsId;
        esriEl.onload = () =&gt; {
            //After loaded, add the inline leaflet-providers &lt;script&gt;
            provEl = document.createElement(&quot;script&quot;);
            provEl.id = leafletProvidersJsId;
            provEl.innerHTML = `//Taken from https://github.com/leaflet-extras/leaflet-providers
(function (root, factory) {
	if (typeof define === 'function' &amp;&amp; define.amd) {
		// AMD. Register as an anonymous module.
		define(['leaflet'], factory);
	} else if (typeof modules === 'object' &amp;&amp; module.exports) {
		// define a Common JS module that relies on 'leaflet'
		module.exports = factory(require('leaflet'));
	} else {
		// Assume Leaflet is loaded into global object L already
		factory(L);
	}
}(this, function (L) {
	'use strict';

	L.TileLayer.Provider = L.TileLayer.extend({
		initialize: function (arg, options) {
			var providers = L.TileLayer.Provider.providers;

			var parts = arg.split('.');

			var providerName = parts[0];
			var variantName = parts[1];

			if (!providers[providerName]) {
				throw 'No such provider (' + providerName + ')';
			}

			var provider = {
				url: providers[providerName].url,
				options: providers[providerName].options
			};

			// overwrite values in provider from variant.
			if (variantName &amp;&amp; 'variants' in providers[providerName]) {
				if (!(variantName in providers[providerName].variants)) {
					throw 'No such variant of ' + providerName + ' (' + variantName + ')';
				}
				var variant = providers[providerName].variants[variantName];
				var variantOptions;
				if (typeof variant === 'string') {
					variantOptions = {
						variant: variant
					};
				} else {
					variantOptions = variant.options;
				}
				provider = {
					url: variant.url || provider.url,
					options: L.Util.extend({}, provider.options, variantOptions)
				};
			}

			// replace attribution placeholders with their values from toplevel provider attribution,
			// recursively
			var attributionReplacer = function (attr) {
				if (attr.indexOf('{attribution.') === -1) {
					return attr;
				}
				return attr.replace(/\{attribution.(\w*)\}/g,
					function (match, attributionName) {
						return attributionReplacer(providers[attributionName].options.attribution);
					}
				);
			};
			provider.options.attribution = attributionReplacer(provider.options.attribution);

			// Compute final options combining provider options with any user overrides
			var layerOpts = L.Util.extend({}, provider.options, options);
			L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts);
		}
	});

	/**
	 * Definition of providers.
	 * see http://leafletjs.com/reference.html#tilelayer for options in the options map.
	 */

	L.TileLayer.Provider.providers = {
		OpenStreetMap: {
			url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution:
					'&amp;copy; &lt;a href=&quot;https://www.openstreetmap.org/copyright&quot;&gt;OpenStreetMap&lt;/a&gt; contributors'
			},
			variants: {
				Mapnik: {},
				DE: {
					url: 'https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18
					}
				},
				CH: {
					url: 'https://tile.osm.ch/switzerland/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18,
						bounds: [[45, 5], [48, 11]]
					}
				},
				France: {
					url: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png',
					options: {
						maxZoom: 20,
						attribution: '&amp;copy; Openstreetmap France | {attribution.OpenStreetMap}'
					}
				},
				HOT: {
					url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',
					options: {
						attribution:
							'{attribution.OpenStreetMap}, ' +
							'Tiles style by &lt;a href=&quot;https://www.hotosm.org/&quot; target=&quot;_blank&quot;&gt;Humanitarian OpenStreetMap Team&lt;/a&gt; ' +
							'hosted by &lt;a href=&quot;https://openstreetmap.fr/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap France&lt;/a&gt;'
					}
				},
				BZH: {
					url: 'https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png',
					options: {
						attribution: '{attribution.OpenStreetMap}, Tiles courtesy of &lt;a href=&quot;http://www.openstreetmap.bzh/&quot; target=&quot;_blank&quot;&gt;Breton OpenStreetMap Team&lt;/a&gt;',
						bounds: [[46.2, -5.5], [50, 0.7]]
					}
				}
			}
		},
		OpenSeaMap: {
			url: 'https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png',
			options: {
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openseamap.org&quot;&gt;OpenSeaMap&lt;/a&gt; contributors'
			}
		},
		OpenPtMap: {
			url: 'http://openptmap.org/tiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openptmap.org&quot;&gt;OpenPtMap&lt;/a&gt; contributors'
			}
		},
		OpenTopoMap: {
			url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: {attribution.OpenStreetMap}, &lt;a href=&quot;http://viewfinderpanoramas.org&quot;&gt;SRTM&lt;/a&gt; | Map style: &amp;copy; &lt;a href=&quot;https://opentopomap.org&quot;&gt;OpenTopoMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenRailwayMap: {
			url: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://www.OpenRailwayMap.org&quot;&gt;OpenRailwayMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenFireMap: {
			url: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;http://www.openfiremap.org&quot;&gt;OpenFireMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		SafeCast: {
			url: 'https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 16,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://blog.safecast.org/about/&quot;&gt;SafeCast&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		Thunderforest: {
			url: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}',
			options: {
				attribution:
					'&amp;copy; &lt;a href=&quot;http://www.thunderforest.com/&quot;&gt;Thunderforest&lt;/a&gt;, {attribution.OpenStreetMap}',
				variant: 'cycle',
				apikey: '&lt;insert your api key here&gt;',
				maxZoom: 22
			},
			variants: {
				OpenCycleMap: 'cycle',
				Transport: {
					options: {
						variant: 'transport'
					}
				},
				TransportDark: {
					options: {
						variant: 'transport-dark'
					}
				},
				SpinalMap: {
					options: {
						variant: 'spinal-map'
					}
				},
				Landscape: 'landscape',
				Outdoors: 'outdoors',
				Pioneer: 'pioneer'
			}
		},
		OpenMapSurfer: {
			url: 'https://maps.heigit.org/openmapsurfer/tiles/{variant}/webmercator/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				variant: 'roads',
				attribution: 'Imagery from &lt;a href=&quot;http://giscience.uni-hd.de/&quot;&gt;GIScience Research Group @ University of Heidelberg&lt;/a&gt; | Map data '
			},
			variants: {
				Roads: {
					options: {
						variant: 'roads',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				Hybrid: {
					options: {
						variant: 'hybrid',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				AdminBounds: {
					options: {
						variant: 'adminb',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				ContourLines: {
					options: {
						variant: 'asterc',
						maxZoom: 18,
						minZoom: 13,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;'
					}
				},
				Hillshade: {
					options: {
						variant: 'asterh',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;, &lt;a href=&quot;http://srtm.csi.cgiar.org/&quot;&gt;SRTM&lt;/a&gt;'
					}
				},
				ElementsAtRisk: {
					options: {
						variant: 'elements_at_risk',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				}
			}
		},
		Hydda: {
			url: 'https://{s}.tile.openstreetmap.se/hydda/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 18,
				variant: 'full',
				attribution: 'Tiles courtesy of &lt;a href=&quot;http://openstreetmap.se/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap Sweden&lt;/a&gt; &amp;mdash; Map data {attribution.OpenStreetMap}'
			},
			variants: {
				Full: 'full',
				Base: 'base',
				RoadsAndLabels: 'roads_and_labels'
			}
		},
		MapBox: {
			url: 'https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}{r}.png?access_token={accessToken}',
			options: {
				attribution:
					'&lt;a href=&quot;https://www.mapbox.com/about/maps/&quot; target=&quot;_blank&quot;&gt;&amp;copy; Mapbox&lt;/a&gt; ' +
					'{attribution.OpenStreetMap} ' +
					'&lt;a href=&quot;https://www.mapbox.com/map-feedback/&quot; target=&quot;_blank&quot;&gt;Improve this map&lt;/a&gt;',
				subdomains: 'abcd',
				id: 'mapbox.streets',
				accessToken: '&lt;insert your access token here&gt;',
			}
		},
		Stamen: {
			url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}{r}.{ext}',
			options: {
				attribution:
					'Map tiles by &lt;a href=&quot;http://stamen.com&quot;&gt;Stamen Design&lt;/a&gt;, ' +
					'&lt;a href=&quot;http://creativecommons.org/licenses/by/3.0&quot;&gt;CC BY 3.0&lt;/a&gt; &amp;mdash; ' +
					'Map data {attribution.OpenStreetMap}',
				subdomains: 'abcd',
				minZoom: 0,
				maxZoom: 20,
				variant: 'toner',
				ext: 'png'
			},
			variants: {
				Toner: 'toner',
				TonerBackground: 'toner-background',
				TonerHybrid: 'toner-hybrid',
				TonerLines: 'toner-lines',
				TonerLabels: 'toner-labels',
				TonerLite: 'toner-lite',
				Watercolor: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'watercolor',
						ext: 'jpg',
						minZoom: 1,
						maxZoom: 16
					}
				},
				Terrain: {
					options: {
						variant: 'terrain',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TerrainBackground: {
					options: {
						variant: 'terrain-background',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TopOSMRelief: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'toposm-color-relief',
						ext: 'jpg',
						bounds: [[22, -132], [51, -56]]
					}
				},
				TopOSMFeatures: {
					options: {
						variant: 'toposm-features',
						bounds: [[22, -132], [51, -56]],
						opacity: 0.9
					}
				}
			}
		},
		Esri: {
			url: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}',
			options: {
				variant: 'World_Street_Map',
				attribution: 'Tiles &amp;copy; Esri'
			},
			variants: {
				WorldStreetMap: {
					options: {
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'
					}
				},
				DeLorme: {
					options: {
						variant: 'Specialty/DeLorme_World_Base_Map',
						minZoom: 1,
						maxZoom: 11,
						attribution: '{attribution.Esri} &amp;mdash; Copyright: &amp;copy;2012 DeLorme'
					}
				},
				WorldTopoMap: {
					options: {
						variant: 'World_Topo_Map',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community'
					}
				},
				WorldImagery: {
					options: {
						variant: 'World_Imagery',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
					}
				},
				WorldTerrain: {
					options: {
						variant: 'World_Terrain_Base',
						maxZoom: 13,
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: USGS, Esri, TANA, DeLorme, and NPS'
					}
				},
				WorldShadedRelief: {
					options: {
						variant: 'World_Shaded_Relief',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Source: Esri'
					}
				},
				WorldPhysical: {
					options: {
						variant: 'World_Physical_Map',
						maxZoom: 8,
						attribution: '{attribution.Esri} &amp;mdash; Source: US National Park Service'
					}
				},
				OceanBasemap: {
					options: {
						variant: 'Ocean_Basemap',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri'
					}
				},
				NatGeoWorldMap: {
					options: {
						variant: 'NatGeo_World_Map',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC'
					}
				},
				WorldGrayCanvas: {
					options: {
						variant: 'Canvas/World_Light_Gray_Base',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; Esri, DeLorme, NAVTEQ'
					}
				}
			}
		},
		OpenWeatherMap: {
			url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}',
			options: {
				maxZoom: 19,
				attribution: 'Map data &amp;copy; &lt;a href=&quot;http://openweathermap.org&quot;&gt;OpenWeatherMap&lt;/a&gt;',
				apiKey:'&lt;insert your api key here&gt;',
				opacity: 0.5
			},
			variants: {
				Clouds: 'clouds',
				CloudsClassic: 'clouds_cls',
				Precipitation: 'precipitation',
				PrecipitationClassic: 'precipitation_cls',
				Rain: 'rain',
				RainClassic: 'rain_cls',
				Pressure: 'pressure',
				PressureContour: 'pressure_cntr',
				Wind: 'wind',
				Temperature: 'temp',
				Snow: 'snow'
			}
		},
		HERE: {
			/*
			 * HERE maps, formerly Nokia maps.
			 * These basemaps are free, but you need an API key. Please sign up at
			 * https://developer.here.com/plans
			 */
			url:
				'https://{s}.{base}.maps.api.here.com/maptile/2.1/' +
				'{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' +
				'app_id={app_id}&amp;app_code={app_code}&amp;lg={language}',
			options: {
				attribution:
					'Map &amp;copy; 1987-' + new Date().getFullYear() + ' &lt;a href=&quot;http://developer.here.com&quot;&gt;HERE&lt;/a&gt;',
				subdomains: '1234',
				mapID: 'newest',
				'app_id': '&lt;insert your app_id here&gt;',
				'app_code': '&lt;insert your app_code here&gt;',
				base: 'base',
				variant: 'normal.day',
				maxZoom: 20,
				type: 'maptile',
				language: 'eng',
				format: 'png8',
				size: '256'
			},
			variants: {
				normalDay: 'normal.day',
				normalDayCustom: 'normal.day.custom',
				normalDayGrey: 'normal.day.grey',
				normalDayMobile: 'normal.day.mobile',
				normalDayGreyMobile: 'normal.day.grey.mobile',
				normalDayTransit: 'normal.day.transit',
				normalDayTransitMobile: 'normal.day.transit.mobile',
				normalNight: 'normal.night',
				normalNightMobile: 'normal.night.mobile',
				normalNightGrey: 'normal.night.grey',
				normalNightGreyMobile: 'normal.night.grey.mobile',
				normalNightTransit: 'normal.night.transit',
				normalNightTransitMobile: 'normal.night.transit.mobile',
				reducedDay: 'reduced.day',
				reducedNight: 'reduced.night',
				basicMap: {
					options: {
						type: 'basetile'
					}
				},
				mapLabels: {
					options: {
						type: 'labeltile',
						format: 'png'
					}
				},
				trafficFlow: {
					options: {
						base: 'traffic',
						type: 'flowtile'
					}
				},
				carnavDayGrey: 'carnav.day.grey',
				hybridDay: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day'
					}
				},
				hybridDayMobile: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.mobile'
					}
				},
				hybridDayTransit: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.transit'
					}
				},
				hybridDayGrey: {
					options: {
						base: 'aerial',
						variant: 'hybrid.grey.day'
					}
				},
				pedestrianDay: 'pedestrian.day',
				pedestrianNight: 'pedestrian.night',
				satelliteDay: {
					options: {
						base: 'aerial',
						variant: 'satellite.day'
					}
				},
				terrainDay: {
					options: {
						base: 'aerial',
						variant: 'terrain.day'
					}
				},
				terrainDayMobile: {
					options: {
						base: 'aerial',
						variant: 'terrain.day.mobile'
					}
				}
			}
		},
		FreeMapSK: {
			url: 'http://t{s}.freemap.sk/T/{z}/{x}/{y}.jpeg',
			options: {
				minZoom: 8,
				maxZoom: 16,
				subdomains: '1234',
				bounds: [[47.204642, 15.996093], [49.830896, 22.576904]],
				attribution:
					'{attribution.OpenStreetMap}, vizualization CC-By-SA 2.0 &lt;a href=&quot;http://freemap.sk&quot;&gt;Freemap.sk&lt;/a&gt;'
			}
		},
		MtbMap: {
			url: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png',
			options: {
				attribution:
					'{attribution.OpenStreetMap} &amp;amp; USGS'
			}
		},
		CartoDB: {
			url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '{attribution.OpenStreetMap} &amp;copy; &lt;a href=&quot;https://carto.com/attributions&quot;&gt;CARTO&lt;/a&gt;',
				subdomains: 'abcd',
				maxZoom: 19,
				variant: 'light_all'
			},
			variants: {
				Positron: 'light_all',
				PositronNoLabels: 'light_nolabels',
				PositronOnlyLabels: 'light_only_labels',
				DarkMatter: 'dark_all',
				DarkMatterNoLabels: 'dark_nolabels',
				DarkMatterOnlyLabels: 'dark_only_labels',
				Voyager: 'rastertiles/voyager',
				VoyagerNoLabels: 'rastertiles/voyager_nolabels',
				VoyagerOnlyLabels: 'rastertiles/voyager_only_labels',
				VoyagerLabelsUnder: 'rastertiles/voyager_labels_under'
			}
		},
		HikeBike: {
			url: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: '{attribution.OpenStreetMap}',
				variant: 'hikebike'
			},
			variants: {
				HikeBike: {},
				HillShading: {
					options: {
						maxZoom: 15,
						variant: 'hillshading'
					}
				}
			}
		},
		BasemapAT: {
			url: 'https://maps{s}.wien.gv.at/basemap/{variant}/normal/google3857/{z}/{y}/{x}.{format}',
			options: {
				maxZoom: 19,
				attribution: 'Datenquelle: &lt;a href=&quot;https://www.basemap.at&quot;&gt;basemap.at&lt;/a&gt;',
				subdomains: ['', '1', '2', '3', '4'],
				format: 'png',
				bounds: [[46.358770, 8.782379], [49.037872, 17.189532]],
				variant: 'geolandbasemap'
			},
			variants: {
				basemap: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'geolandbasemap'
					}
				},
				grau: 'bmapgrau',
				overlay: 'bmapoverlay',
				highdpi: {
					options: {
						variant: 'bmaphidpi',
						format: 'jpeg'
					}
				},
				orthofoto: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'bmaporthofoto30cm',
						format: 'jpeg'
					}
				}
			}
		},
		nlmaps: {
			url: 'https://geodata.nationaalgeoregister.nl/tiles/service/wmts/{variant}/EPSG:3857/{z}/{x}/{y}.png',
			options: {
				minZoom: 6,
				maxZoom: 19,
				bounds: [[50.5, 3.25], [54, 7.6]],
				attribution: 'Kaartgegevens &amp;copy; &lt;a href=&quot;kadaster.nl&quot;&gt;Kadaster&lt;/a&gt;'
			},
			variants: {
				'standaard': 'brtachtergrondkaart',
				'pastel': 'brtachtergrondkaartpastel',
				'grijs': 'brtachtergrondkaartgrijs',
				'luchtfoto': {
					'url': 'https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts/1.0.0/2016_ortho25/EPSG:3857/{z}/{x}/{y}.png',
				}
			}
		},
		NASAGIBS: {
			url: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}',
			options: {
				attribution:
					'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' +
					'(&lt;a href=&quot;https://earthdata.nasa.gov&quot;&gt;ESDIS&lt;/a&gt;) with funding provided by NASA/HQ.',
				bounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]],
				minZoom: 1,
				maxZoom: 9,
				format: 'jpg',
				time: '',
				tilematrixset: 'GoogleMapsCompatible_Level'
			},
			variants: {
				ModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor',
				ModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367',
				ViirsEarthAtNight2012: {
					options: {
						variant: 'VIIRS_CityLights_2012',
						maxZoom: 8
					}
				},
				ModisTerraLSTDay: {
					options: {
						variant: 'MODIS_Terra_Land_Surface_Temp_Day',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				},
				ModisTerraSnowCover: {
					options: {
						variant: 'MODIS_Terra_Snow_Cover',
						format: 'png',
						maxZoom: 8,
						opacity: 0.75
					}
				},
				ModisTerraAOD: {
					options: {
						variant: 'MODIS_Terra_Aerosol',
						format: 'png',
						maxZoom: 6,
						opacity: 0.75
					}
				},
				ModisTerraChlorophyll: {
					options: {
						variant: 'MODIS_Terra_Chlorophyll_A',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				}
			}
		},
		NLS: {
			// NLS maps are copyright National library of Scotland.
			// http://maps.nls.uk/projects/api/index.html
			// Please contact NLS for anything other than non-commercial low volume usage
			//
			// Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s
			//   z0-9  - 1:1m
			//  z10-11 - quarter inch (1:253440)
			//  z12-18 - one inch (1:63360)
			url: 'https://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg',
			options: {
				attribution: '&lt;a href=&quot;http://geo.nls.uk/maps/&quot;&gt;National Library of Scotland Historic Maps&lt;/a&gt;',
				bounds: [[49.6, -12], [61.7, 3]],
				minZoom: 1,
				maxZoom: 18,
				subdomains: '0123',
			}
		},
		JusticeMap: {
			// Justice Map (http://www.justicemap.org/)
			// Visualize race and income data for your community, county and country.
			// Includes tools for data journalists, bloggers and community activists.
			url: 'http://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png',
			options: {
				attribution: '&lt;a href=&quot;http://www.justicemap.org/terms.php&quot;&gt;Justice Map&lt;/a&gt;',
				// one of 'county', 'tract', 'block'
				size: 'county',
				// Bounds for USA, including Alaska and Hawaii
				bounds: [[14, -180], [72, -56]]
			},
			variants: {
				income: 'income',
				americanIndian: 'indian',
				asian: 'asian',
				black: 'black',
				hispanic: 'hispanic',
				multi: 'multi',
				nonWhite: 'nonwhite',
				white: 'white',
				plurality: 'plural'
			}
		},
		Wikimedia: {
			url: 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '&lt;a href=&quot;https://wikimediafoundation.org/wiki/Maps_Terms_of_Use&quot;&gt;Wikimedia&lt;/a&gt;',
				minZoom: 1,
				maxZoom: 19
			}
		},
		GeoportailFrance: {
			url: 'https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&amp;SERVICE=WMTS&amp;VERSION=1.0.0&amp;STYLE={style}&amp;TILEMATRIXSET=PM&amp;FORMAT={format}&amp;LAYER={variant}&amp;TILEMATRIX={z}&amp;TILEROW={y}&amp;TILECOL={x}',
			options: {
				attribution: '&lt;a target=&quot;_blank&quot; href=&quot;https://www.geoportail.gouv.fr/&quot;&gt;Geoportail France&lt;/a&gt;',
				bounds: [[-75, -180], [81, 180]],
				minZoom: 2,
				maxZoom: 18,
				// Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/
				// NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee
				apikey: 'choisirgeoportail',
				format: 'image/jpeg',
				style : 'normal',
				variant: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD'
			},
			variants: {
				parcels: {
					options : {
						variant: 'CADASTRALPARCELS.PARCELS',
						maxZoom: 20,
						style : 'bdparcellaire',
						format: 'image/png'
					}
				},
				ignMaps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS',
				maps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD',
				orthos: {
					options: {
						maxZoom: 19,
						variant: 'ORTHOIMAGERY.ORTHOPHOTOS'
					}
				}
			}
		},
		OneMapSG: {
			url: 'https://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png',
			options: {
				variant: 'Default',
				minZoom: 11,
				maxZoom: 18,
				bounds: [[1.56073, 104.11475], [1.16, 103.502]],
				attribution: '&lt;img src=&quot;https://docs.onemap.sg/maps/images/oneMap64-01.png&quot; style=&quot;height:20px;width:20px;&quot;/&gt; New OneMap | Map data &amp;copy; contributors, &lt;a href=&quot;http://SLA.gov.sg&quot;&gt;Singapore Land Authority&lt;/a&gt;'
			},
			variants: {
				Default: 'Default',
				Night: 'Night',
				Original: 'Original',
				Grey: 'Grey',
				LandLot: 'LandLot'
			}
		}
	};

	L.tileLayer.provider = function (provider, options) {
		return new L.TileLayer.Provider(provider, options);
	};

	return L;
}));
`;
            if(!document.getElementById(provEl.id)){
                 document.head.appendChild(provEl);        
            }
            _createMap();
            }
        esriEl.src = esriLeafletCdn + &quot;esri-leaflet.js&quot;;
        addToHeadIfNotLoaded(esriEl);
        };
    leafletJsEl.src = leafletCdn + &quot;leaflet.js&quot;;
    addToHeadIfNotLoaded(leafletJsEl);
})();
&lt;/script&gt;

&lt;p&gt;Joining us for this day hike are great friends Indhu, Zach, Rebecca, and Alex. And ofcourse we can’t forget my dog Nali and our new friend Toast!&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/momyer-creek/creek-1.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/momyer-creek/creek-1.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Highly recommend this hike in the Spring in Southern California. It hovers at ~7k feet elevation – this means a cool escape from the heat, but no snow to deal with. This hike started out as a fun creek crossing, followed by an intense 3 miles uphill. Plenty of shade, beautiful forests, and amazing views. I hope to come back here in the Summer and go all the way up to San Bernadino Peak!&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/momyer-creek/candid.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/momyer-creek/candid.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/momyer-creek/creek-2.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/momyer-creek/creek-2.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;This hike was also a much-needed escape from our lives in quarantine. We practiced social distancing from all other hikers. I am very fortunate to have such great friends to hike with, thanks a bunch guys! :)&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/momyer-creek/selfie.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/momyer-creek/selfie.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;</content><author><name>David Vitale</name></author><category term="travel" /><category term="misc" /><category term="day-hikes" /><summary type="html"></summary></entry><entry><title type="html">Arrowhead Pinacles Trail</title><link href="/blog/travel/day-hikes/arrowhead-pinacles" rel="alternate" type="text/html" title="Arrowhead Pinacles Trail" /><published>2020-03-22T00:00:00-07:00</published><updated>2020-03-22T00:00:00-07:00</updated><id>/blog/travel/day-hikes/arrowhead-pinacles</id><content type="html" xml:base="/blog/travel/day-hikes/arrowhead-pinacles">&lt;div id=&quot;leaflet-map-d291eff9131c9f86b60c2b006c52f14f&quot; class=&quot;leaflet-map&quot;&gt;&lt;/div&gt;
&lt;script&gt;(() =&gt; {
// Specify configuration variables, setup any elements and styling
    var leafletCdn = &quot;https://unpkg.com/leaflet@1.6.0/dist/&quot;;
    var esriLeafletCdn = &quot;https://unpkg.com/esri-leaflet/dist/&quot;;

    // Get tag input arguments &amp; inside block object list
    var tagInputArg = {&quot;zoom&quot; : 13 } ;
    var blockLeafletItems = [
    {id: &quot;a8276db10b6467c460eb4182a45e1964&quot;,
              type: &quot;LeafletMarker&quot;,
              value: {&quot;latitude&quot; : 34.296184,
                       &quot;longitude&quot; : -117.211329,
                       &quot;popupContent&quot;: &quot;Arrowhead Pinacles Trail&quot; } }, 
    {id: &quot;9aaada8d1e751564c0482fe8f701716f&quot;,
              type: &quot;LeafletGeoJSON&quot;,
              value: &quot;/assets/personal/geojson/day-hikes/2020-03-22-arrowhead-pinacles.geojson&quot; },

];

    // Override the map div id if specified, apply default CSS
    var defaultMapElId = &quot;leaflet-map-d291eff9131c9f86b60c2b006c52f14f&quot;;
   var defaultMapElStyle = &quot;height:300px; margin-top:15px; margin-bottom:15px&quot;;
    var mapEl = document.getElementById(defaultMapElId);
    if('divId' in tagInputArg){
        mapEl.id = tagInputArg['divId'];
    }
    var defaultMapCssEl = document.createElement(&quot;style&quot;);
    defaultMapCssEl.innerHTML = 
        &quot;#&quot; + defaultMapElId + &quot;{&quot; + defaultMapElStyle + &quot;}&quot;;
    document.head.appendChild(defaultMapCssEl);

    var newWindowImgSrcBase64 = &quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH4wUVFzAHq2j99AAAAV9JREFUSMdjYKAxYCRHk5ubG9+1a9fm/v//H6cadnb2G/fu3atlIceC379/c3z9+jUEn5q/f/8eYWBgYECxQE5OroqA2Y8ePXq0hJWV9Qc3N/caZB8wMjJKff361QpvEAkKCv4nYMGh9+/f26MLamhoyLx9+3b/nz9/VJCC6MiLFy9sWXCE3xlGRsZvWKQu4DOciYnpCzc396HPnz97weRxWRD/8OHDa4TiAt1wfn5+z79//zoxMDDALWAiN/lhM/zevXtH0NUx0dJwsiwgxXCccUCJ4dzc3DP+//+/gZ2d/duLFy9Is+Djx4+rCbn82rVrrxgYGF6RFUR8fHyZbGxsD7AZLiEhUSAiIrJSUlIyjOw4uHnz5gVHR0d1bC7/8+eP5d+/f8P+/PmjS1Ekr1ix4hcp6ploXVwPfQuwJlMmJiYBLS0tIVIMev36NRvRFnz48OHohw8fhkYQjQKCAAChiL6Pj/LM2QAAAABJRU5ErkJggg==&quot;;

// Actual mapping section; Specify a function to be called later that 
// assembles the correct JS components based on what the user specified in the 
// tag input arg, the block section of features, etc. Actually creates the map
// that is visible on the page

    function _getCenter(){
        var defaultCenter = [0,0];
        if(&quot;center&quot; in tagInputArg){
            return tagInputArg.center;
        } else {
            return defaultCenter;
        }
    }

    function _getZoom(){
        var defaultZoom = 1;
        if(&quot;zoom&quot; in tagInputArg){
            return tagInputArg.zoom
        } else {
            return defaultZoom;
        }
    }

    function _getProviderBasemap(){
        var defaultProviderBasemap = &quot;OpenStreetMap.Mapnik&quot;;
        if(&quot;providerBasemap&quot; in tagInputArg){
            return tagInputArg.providerBasemap;
        } else {
            return defaultProviderBasemap;
        }
    }


    function _addMarkerToMap(leafletItem, map){
        var m = leafletItem.value;
        var result = L.marker([m.latitude, m.longitude]).addTo(map);
        var potentialPopup = &quot;&quot;;
        if('popupContent' in m){
                potentialPopup += m.popupContent;}
        if('href' in m){
            potentialPopup += '&lt;a href=&quot;' + m.href + '&quot;&gt;' + 
                '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            result.bindPopup(potentialPopup);}
        if(!('center' in tagInputArg)){
            // If the user didn't specify a center, infer from marker
            map.panTo(new L.LatLng(m.latitude, m.longitude));
        }
    }

    function _onEachFeature(feature, layer){
        var potentialPopup = &quot;&quot;
        if(feature.properties &amp;&amp; feature.properties.popupContent){
            potentialPopup += feature.properties.popupContent;
        }
        if(feature.properties &amp;&amp; feature.properties.href){
            potentialPopup += 
                '&lt;a href=&quot;' + feature.properties.href + '&quot;&gt;' + 
                    '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            layer.bindPopup(potentialPopup);
        }
    }

    function _addGeoJSONToMap(leafletItem, map){
        if(typeof leafletItem.value === &quot;string&quot;){
            fetch(leafletItem.value).then((resp) =&gt; {
                return resp.json();
            }).then((data) =&gt; {
                leafletItem.value = data;
                _addGeoJSONObjToMap(leafletItem, map);
            }).catch((err) =&gt; {
                console.log(&quot;Encountered err w/ geojson, attempting to fix..&quot;);
                console.log(err);
                _addGeoJSONObjToMap(leafletItem, map);
            });
        } else {
            _addGeoJSONObjToMap(leafletItem, map);
        }
     }

    function _addGeoJSONObjToMap(leafletItem, map){
         var geojson = L.geoJSON(leafletItem.value, { 
            onEachFeature: _onEachFeature 
        });
        layers = geojson.getLayers();
        for(var i=0; i&lt;layers.length; i++){
            try{
                var geom = layers[i].feature.geometry;
                if(!('center' in tagInputArg)){
                    // If the user didn't specify a center, infer from geojson
                    //console.log(&quot;panning to &quot; + geom.coordinates);
                    map.panTo(new L.LatLng(geom.coordinates[1],
                                           geom.coordinates[0]));
                }
            } catch(e){}
        }
       
        geojson.addTo(map);
       
    }

    function _processLeafletItem(leafletItem, map){
        switch(leafletItem.type){
            case &quot;LeafletMarker&quot;:
                _addMarkerToMap(leafletItem, map);
                break;
            case &quot;LeafletGeoJSON&quot;:
                _addGeoJSONToMap(leafletItem, map);
                break;
            case undefined:
                break; 
            default:
                console.log(&quot;Couldn't add item &quot; + leafletItem.id);
                break;
        }
    }

//The actual section that is called that creates a map
    function createMap(){
        console.log(&quot;Creating map d291eff9131c9f86b60c2b006c52f14f with these args:&quot;);
        console.log(tagInputArg);

        //Initialize Map with the correct input arguments
        var map = L.map(mapEl.id, 
            {worldCopyJump: true}).setView(_getCenter(), _getZoom());
        L.tileLayer.provider(_getProviderBasemap()).addTo(map);
        if(&quot;esriBasemap&quot; in tagInputArg){
            L.esri.basemapLayer(tagInputArg.esriBasemap).addTo(map);
        }

        //process each Leaflet Item passed in between the block tag middle
        for(var i=0; i&lt;blockLeafletItems.length; i++){
            var leafletItem = blockLeafletItems[i];
            console.log(&quot;Adding leaflet item &quot; + leafletItem.id + &quot;:&quot;);
            console.log(leafletItem);
            _processLeafletItem(leafletItem, map);
        }
    }

// Load the correct JS libraries/CSS by adding to head: 
// When ready, call createMap() to create the map on the page

    function _createMap(){
        // helper function to draw the map only when everything is loaded,
        // safeguards against multiple calls to window.onload
        var prevOnLoad;
        if(window.onload){
            prevOnLoad = window.onload;
        }
        window.onload = () =&gt; {
            createMap();
            if(prevOnLoad){
                prevOnLoad();
            }
        }
    }

    var leafletCssId = &quot;leaflet-css-head&quot;;
    var leafletJsId = &quot;leaflet-js-head&quot;;
    var esriLeafletJsId = &quot;esri-leaflet-js-head&quot;;
    var leafletProvidersJsId = &quot;leaflet-providers-js-head&quot;;

    // Add the leaflet CSS first, don't worry about when it loads
    var leafletCssEl = document.createElement(&quot;link&quot;);
    leafletCssEl.id = leafletCssId;
    leafletCssEl.rel = &quot;stylesheet&quot;;
    leafletCssEl.href = leafletCdn + &quot;leaflet.css&quot;;
    if(!document.getElementById(leafletCssEl.id)){
        document.head.appendChild(leafletCssEl);
    }

    function addToHeadIfNotLoaded(el) {
        //Add the el to the head if it doesn't exist already. If it does,
        //everything we need is already loaded, so draw the map
        if(!document.getElementById(el.id)){
            document.head.appendChild(el);
        } else {
            _createMap();
        }
    }

    // Load the main leaflet.js code, wait for it to load
    var leafletJsEl = document.createElement(&quot;script&quot;);
    leafletJsEl.id = leafletJsId;
    leafletJsEl.onload = () =&gt; {
        //After loaded, load the esri-leaflet.js code, wait for it to load
        var esriEl = document.createElement(&quot;script&quot;);
        esriEl.id = esriLeafletJsId;
        esriEl.onload = () =&gt; {
            //After loaded, add the inline leaflet-providers &lt;script&gt;
            provEl = document.createElement(&quot;script&quot;);
            provEl.id = leafletProvidersJsId;
            provEl.innerHTML = `//Taken from https://github.com/leaflet-extras/leaflet-providers
(function (root, factory) {
	if (typeof define === 'function' &amp;&amp; define.amd) {
		// AMD. Register as an anonymous module.
		define(['leaflet'], factory);
	} else if (typeof modules === 'object' &amp;&amp; module.exports) {
		// define a Common JS module that relies on 'leaflet'
		module.exports = factory(require('leaflet'));
	} else {
		// Assume Leaflet is loaded into global object L already
		factory(L);
	}
}(this, function (L) {
	'use strict';

	L.TileLayer.Provider = L.TileLayer.extend({
		initialize: function (arg, options) {
			var providers = L.TileLayer.Provider.providers;

			var parts = arg.split('.');

			var providerName = parts[0];
			var variantName = parts[1];

			if (!providers[providerName]) {
				throw 'No such provider (' + providerName + ')';
			}

			var provider = {
				url: providers[providerName].url,
				options: providers[providerName].options
			};

			// overwrite values in provider from variant.
			if (variantName &amp;&amp; 'variants' in providers[providerName]) {
				if (!(variantName in providers[providerName].variants)) {
					throw 'No such variant of ' + providerName + ' (' + variantName + ')';
				}
				var variant = providers[providerName].variants[variantName];
				var variantOptions;
				if (typeof variant === 'string') {
					variantOptions = {
						variant: variant
					};
				} else {
					variantOptions = variant.options;
				}
				provider = {
					url: variant.url || provider.url,
					options: L.Util.extend({}, provider.options, variantOptions)
				};
			}

			// replace attribution placeholders with their values from toplevel provider attribution,
			// recursively
			var attributionReplacer = function (attr) {
				if (attr.indexOf('{attribution.') === -1) {
					return attr;
				}
				return attr.replace(/\{attribution.(\w*)\}/g,
					function (match, attributionName) {
						return attributionReplacer(providers[attributionName].options.attribution);
					}
				);
			};
			provider.options.attribution = attributionReplacer(provider.options.attribution);

			// Compute final options combining provider options with any user overrides
			var layerOpts = L.Util.extend({}, provider.options, options);
			L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts);
		}
	});

	/**
	 * Definition of providers.
	 * see http://leafletjs.com/reference.html#tilelayer for options in the options map.
	 */

	L.TileLayer.Provider.providers = {
		OpenStreetMap: {
			url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution:
					'&amp;copy; &lt;a href=&quot;https://www.openstreetmap.org/copyright&quot;&gt;OpenStreetMap&lt;/a&gt; contributors'
			},
			variants: {
				Mapnik: {},
				DE: {
					url: 'https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18
					}
				},
				CH: {
					url: 'https://tile.osm.ch/switzerland/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18,
						bounds: [[45, 5], [48, 11]]
					}
				},
				France: {
					url: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png',
					options: {
						maxZoom: 20,
						attribution: '&amp;copy; Openstreetmap France | {attribution.OpenStreetMap}'
					}
				},
				HOT: {
					url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',
					options: {
						attribution:
							'{attribution.OpenStreetMap}, ' +
							'Tiles style by &lt;a href=&quot;https://www.hotosm.org/&quot; target=&quot;_blank&quot;&gt;Humanitarian OpenStreetMap Team&lt;/a&gt; ' +
							'hosted by &lt;a href=&quot;https://openstreetmap.fr/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap France&lt;/a&gt;'
					}
				},
				BZH: {
					url: 'https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png',
					options: {
						attribution: '{attribution.OpenStreetMap}, Tiles courtesy of &lt;a href=&quot;http://www.openstreetmap.bzh/&quot; target=&quot;_blank&quot;&gt;Breton OpenStreetMap Team&lt;/a&gt;',
						bounds: [[46.2, -5.5], [50, 0.7]]
					}
				}
			}
		},
		OpenSeaMap: {
			url: 'https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png',
			options: {
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openseamap.org&quot;&gt;OpenSeaMap&lt;/a&gt; contributors'
			}
		},
		OpenPtMap: {
			url: 'http://openptmap.org/tiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openptmap.org&quot;&gt;OpenPtMap&lt;/a&gt; contributors'
			}
		},
		OpenTopoMap: {
			url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: {attribution.OpenStreetMap}, &lt;a href=&quot;http://viewfinderpanoramas.org&quot;&gt;SRTM&lt;/a&gt; | Map style: &amp;copy; &lt;a href=&quot;https://opentopomap.org&quot;&gt;OpenTopoMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenRailwayMap: {
			url: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://www.OpenRailwayMap.org&quot;&gt;OpenRailwayMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenFireMap: {
			url: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;http://www.openfiremap.org&quot;&gt;OpenFireMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		SafeCast: {
			url: 'https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 16,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://blog.safecast.org/about/&quot;&gt;SafeCast&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		Thunderforest: {
			url: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}',
			options: {
				attribution:
					'&amp;copy; &lt;a href=&quot;http://www.thunderforest.com/&quot;&gt;Thunderforest&lt;/a&gt;, {attribution.OpenStreetMap}',
				variant: 'cycle',
				apikey: '&lt;insert your api key here&gt;',
				maxZoom: 22
			},
			variants: {
				OpenCycleMap: 'cycle',
				Transport: {
					options: {
						variant: 'transport'
					}
				},
				TransportDark: {
					options: {
						variant: 'transport-dark'
					}
				},
				SpinalMap: {
					options: {
						variant: 'spinal-map'
					}
				},
				Landscape: 'landscape',
				Outdoors: 'outdoors',
				Pioneer: 'pioneer'
			}
		},
		OpenMapSurfer: {
			url: 'https://maps.heigit.org/openmapsurfer/tiles/{variant}/webmercator/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				variant: 'roads',
				attribution: 'Imagery from &lt;a href=&quot;http://giscience.uni-hd.de/&quot;&gt;GIScience Research Group @ University of Heidelberg&lt;/a&gt; | Map data '
			},
			variants: {
				Roads: {
					options: {
						variant: 'roads',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				Hybrid: {
					options: {
						variant: 'hybrid',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				AdminBounds: {
					options: {
						variant: 'adminb',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				ContourLines: {
					options: {
						variant: 'asterc',
						maxZoom: 18,
						minZoom: 13,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;'
					}
				},
				Hillshade: {
					options: {
						variant: 'asterh',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;, &lt;a href=&quot;http://srtm.csi.cgiar.org/&quot;&gt;SRTM&lt;/a&gt;'
					}
				},
				ElementsAtRisk: {
					options: {
						variant: 'elements_at_risk',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				}
			}
		},
		Hydda: {
			url: 'https://{s}.tile.openstreetmap.se/hydda/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 18,
				variant: 'full',
				attribution: 'Tiles courtesy of &lt;a href=&quot;http://openstreetmap.se/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap Sweden&lt;/a&gt; &amp;mdash; Map data {attribution.OpenStreetMap}'
			},
			variants: {
				Full: 'full',
				Base: 'base',
				RoadsAndLabels: 'roads_and_labels'
			}
		},
		MapBox: {
			url: 'https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}{r}.png?access_token={accessToken}',
			options: {
				attribution:
					'&lt;a href=&quot;https://www.mapbox.com/about/maps/&quot; target=&quot;_blank&quot;&gt;&amp;copy; Mapbox&lt;/a&gt; ' +
					'{attribution.OpenStreetMap} ' +
					'&lt;a href=&quot;https://www.mapbox.com/map-feedback/&quot; target=&quot;_blank&quot;&gt;Improve this map&lt;/a&gt;',
				subdomains: 'abcd',
				id: 'mapbox.streets',
				accessToken: '&lt;insert your access token here&gt;',
			}
		},
		Stamen: {
			url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}{r}.{ext}',
			options: {
				attribution:
					'Map tiles by &lt;a href=&quot;http://stamen.com&quot;&gt;Stamen Design&lt;/a&gt;, ' +
					'&lt;a href=&quot;http://creativecommons.org/licenses/by/3.0&quot;&gt;CC BY 3.0&lt;/a&gt; &amp;mdash; ' +
					'Map data {attribution.OpenStreetMap}',
				subdomains: 'abcd',
				minZoom: 0,
				maxZoom: 20,
				variant: 'toner',
				ext: 'png'
			},
			variants: {
				Toner: 'toner',
				TonerBackground: 'toner-background',
				TonerHybrid: 'toner-hybrid',
				TonerLines: 'toner-lines',
				TonerLabels: 'toner-labels',
				TonerLite: 'toner-lite',
				Watercolor: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'watercolor',
						ext: 'jpg',
						minZoom: 1,
						maxZoom: 16
					}
				},
				Terrain: {
					options: {
						variant: 'terrain',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TerrainBackground: {
					options: {
						variant: 'terrain-background',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TopOSMRelief: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'toposm-color-relief',
						ext: 'jpg',
						bounds: [[22, -132], [51, -56]]
					}
				},
				TopOSMFeatures: {
					options: {
						variant: 'toposm-features',
						bounds: [[22, -132], [51, -56]],
						opacity: 0.9
					}
				}
			}
		},
		Esri: {
			url: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}',
			options: {
				variant: 'World_Street_Map',
				attribution: 'Tiles &amp;copy; Esri'
			},
			variants: {
				WorldStreetMap: {
					options: {
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'
					}
				},
				DeLorme: {
					options: {
						variant: 'Specialty/DeLorme_World_Base_Map',
						minZoom: 1,
						maxZoom: 11,
						attribution: '{attribution.Esri} &amp;mdash; Copyright: &amp;copy;2012 DeLorme'
					}
				},
				WorldTopoMap: {
					options: {
						variant: 'World_Topo_Map',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community'
					}
				},
				WorldImagery: {
					options: {
						variant: 'World_Imagery',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
					}
				},
				WorldTerrain: {
					options: {
						variant: 'World_Terrain_Base',
						maxZoom: 13,
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: USGS, Esri, TANA, DeLorme, and NPS'
					}
				},
				WorldShadedRelief: {
					options: {
						variant: 'World_Shaded_Relief',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Source: Esri'
					}
				},
				WorldPhysical: {
					options: {
						variant: 'World_Physical_Map',
						maxZoom: 8,
						attribution: '{attribution.Esri} &amp;mdash; Source: US National Park Service'
					}
				},
				OceanBasemap: {
					options: {
						variant: 'Ocean_Basemap',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri'
					}
				},
				NatGeoWorldMap: {
					options: {
						variant: 'NatGeo_World_Map',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC'
					}
				},
				WorldGrayCanvas: {
					options: {
						variant: 'Canvas/World_Light_Gray_Base',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; Esri, DeLorme, NAVTEQ'
					}
				}
			}
		},
		OpenWeatherMap: {
			url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}',
			options: {
				maxZoom: 19,
				attribution: 'Map data &amp;copy; &lt;a href=&quot;http://openweathermap.org&quot;&gt;OpenWeatherMap&lt;/a&gt;',
				apiKey:'&lt;insert your api key here&gt;',
				opacity: 0.5
			},
			variants: {
				Clouds: 'clouds',
				CloudsClassic: 'clouds_cls',
				Precipitation: 'precipitation',
				PrecipitationClassic: 'precipitation_cls',
				Rain: 'rain',
				RainClassic: 'rain_cls',
				Pressure: 'pressure',
				PressureContour: 'pressure_cntr',
				Wind: 'wind',
				Temperature: 'temp',
				Snow: 'snow'
			}
		},
		HERE: {
			/*
			 * HERE maps, formerly Nokia maps.
			 * These basemaps are free, but you need an API key. Please sign up at
			 * https://developer.here.com/plans
			 */
			url:
				'https://{s}.{base}.maps.api.here.com/maptile/2.1/' +
				'{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' +
				'app_id={app_id}&amp;app_code={app_code}&amp;lg={language}',
			options: {
				attribution:
					'Map &amp;copy; 1987-' + new Date().getFullYear() + ' &lt;a href=&quot;http://developer.here.com&quot;&gt;HERE&lt;/a&gt;',
				subdomains: '1234',
				mapID: 'newest',
				'app_id': '&lt;insert your app_id here&gt;',
				'app_code': '&lt;insert your app_code here&gt;',
				base: 'base',
				variant: 'normal.day',
				maxZoom: 20,
				type: 'maptile',
				language: 'eng',
				format: 'png8',
				size: '256'
			},
			variants: {
				normalDay: 'normal.day',
				normalDayCustom: 'normal.day.custom',
				normalDayGrey: 'normal.day.grey',
				normalDayMobile: 'normal.day.mobile',
				normalDayGreyMobile: 'normal.day.grey.mobile',
				normalDayTransit: 'normal.day.transit',
				normalDayTransitMobile: 'normal.day.transit.mobile',
				normalNight: 'normal.night',
				normalNightMobile: 'normal.night.mobile',
				normalNightGrey: 'normal.night.grey',
				normalNightGreyMobile: 'normal.night.grey.mobile',
				normalNightTransit: 'normal.night.transit',
				normalNightTransitMobile: 'normal.night.transit.mobile',
				reducedDay: 'reduced.day',
				reducedNight: 'reduced.night',
				basicMap: {
					options: {
						type: 'basetile'
					}
				},
				mapLabels: {
					options: {
						type: 'labeltile',
						format: 'png'
					}
				},
				trafficFlow: {
					options: {
						base: 'traffic',
						type: 'flowtile'
					}
				},
				carnavDayGrey: 'carnav.day.grey',
				hybridDay: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day'
					}
				},
				hybridDayMobile: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.mobile'
					}
				},
				hybridDayTransit: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.transit'
					}
				},
				hybridDayGrey: {
					options: {
						base: 'aerial',
						variant: 'hybrid.grey.day'
					}
				},
				pedestrianDay: 'pedestrian.day',
				pedestrianNight: 'pedestrian.night',
				satelliteDay: {
					options: {
						base: 'aerial',
						variant: 'satellite.day'
					}
				},
				terrainDay: {
					options: {
						base: 'aerial',
						variant: 'terrain.day'
					}
				},
				terrainDayMobile: {
					options: {
						base: 'aerial',
						variant: 'terrain.day.mobile'
					}
				}
			}
		},
		FreeMapSK: {
			url: 'http://t{s}.freemap.sk/T/{z}/{x}/{y}.jpeg',
			options: {
				minZoom: 8,
				maxZoom: 16,
				subdomains: '1234',
				bounds: [[47.204642, 15.996093], [49.830896, 22.576904]],
				attribution:
					'{attribution.OpenStreetMap}, vizualization CC-By-SA 2.0 &lt;a href=&quot;http://freemap.sk&quot;&gt;Freemap.sk&lt;/a&gt;'
			}
		},
		MtbMap: {
			url: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png',
			options: {
				attribution:
					'{attribution.OpenStreetMap} &amp;amp; USGS'
			}
		},
		CartoDB: {
			url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '{attribution.OpenStreetMap} &amp;copy; &lt;a href=&quot;https://carto.com/attributions&quot;&gt;CARTO&lt;/a&gt;',
				subdomains: 'abcd',
				maxZoom: 19,
				variant: 'light_all'
			},
			variants: {
				Positron: 'light_all',
				PositronNoLabels: 'light_nolabels',
				PositronOnlyLabels: 'light_only_labels',
				DarkMatter: 'dark_all',
				DarkMatterNoLabels: 'dark_nolabels',
				DarkMatterOnlyLabels: 'dark_only_labels',
				Voyager: 'rastertiles/voyager',
				VoyagerNoLabels: 'rastertiles/voyager_nolabels',
				VoyagerOnlyLabels: 'rastertiles/voyager_only_labels',
				VoyagerLabelsUnder: 'rastertiles/voyager_labels_under'
			}
		},
		HikeBike: {
			url: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: '{attribution.OpenStreetMap}',
				variant: 'hikebike'
			},
			variants: {
				HikeBike: {},
				HillShading: {
					options: {
						maxZoom: 15,
						variant: 'hillshading'
					}
				}
			}
		},
		BasemapAT: {
			url: 'https://maps{s}.wien.gv.at/basemap/{variant}/normal/google3857/{z}/{y}/{x}.{format}',
			options: {
				maxZoom: 19,
				attribution: 'Datenquelle: &lt;a href=&quot;https://www.basemap.at&quot;&gt;basemap.at&lt;/a&gt;',
				subdomains: ['', '1', '2', '3', '4'],
				format: 'png',
				bounds: [[46.358770, 8.782379], [49.037872, 17.189532]],
				variant: 'geolandbasemap'
			},
			variants: {
				basemap: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'geolandbasemap'
					}
				},
				grau: 'bmapgrau',
				overlay: 'bmapoverlay',
				highdpi: {
					options: {
						variant: 'bmaphidpi',
						format: 'jpeg'
					}
				},
				orthofoto: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'bmaporthofoto30cm',
						format: 'jpeg'
					}
				}
			}
		},
		nlmaps: {
			url: 'https://geodata.nationaalgeoregister.nl/tiles/service/wmts/{variant}/EPSG:3857/{z}/{x}/{y}.png',
			options: {
				minZoom: 6,
				maxZoom: 19,
				bounds: [[50.5, 3.25], [54, 7.6]],
				attribution: 'Kaartgegevens &amp;copy; &lt;a href=&quot;kadaster.nl&quot;&gt;Kadaster&lt;/a&gt;'
			},
			variants: {
				'standaard': 'brtachtergrondkaart',
				'pastel': 'brtachtergrondkaartpastel',
				'grijs': 'brtachtergrondkaartgrijs',
				'luchtfoto': {
					'url': 'https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts/1.0.0/2016_ortho25/EPSG:3857/{z}/{x}/{y}.png',
				}
			}
		},
		NASAGIBS: {
			url: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}',
			options: {
				attribution:
					'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' +
					'(&lt;a href=&quot;https://earthdata.nasa.gov&quot;&gt;ESDIS&lt;/a&gt;) with funding provided by NASA/HQ.',
				bounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]],
				minZoom: 1,
				maxZoom: 9,
				format: 'jpg',
				time: '',
				tilematrixset: 'GoogleMapsCompatible_Level'
			},
			variants: {
				ModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor',
				ModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367',
				ViirsEarthAtNight2012: {
					options: {
						variant: 'VIIRS_CityLights_2012',
						maxZoom: 8
					}
				},
				ModisTerraLSTDay: {
					options: {
						variant: 'MODIS_Terra_Land_Surface_Temp_Day',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				},
				ModisTerraSnowCover: {
					options: {
						variant: 'MODIS_Terra_Snow_Cover',
						format: 'png',
						maxZoom: 8,
						opacity: 0.75
					}
				},
				ModisTerraAOD: {
					options: {
						variant: 'MODIS_Terra_Aerosol',
						format: 'png',
						maxZoom: 6,
						opacity: 0.75
					}
				},
				ModisTerraChlorophyll: {
					options: {
						variant: 'MODIS_Terra_Chlorophyll_A',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				}
			}
		},
		NLS: {
			// NLS maps are copyright National library of Scotland.
			// http://maps.nls.uk/projects/api/index.html
			// Please contact NLS for anything other than non-commercial low volume usage
			//
			// Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s
			//   z0-9  - 1:1m
			//  z10-11 - quarter inch (1:253440)
			//  z12-18 - one inch (1:63360)
			url: 'https://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg',
			options: {
				attribution: '&lt;a href=&quot;http://geo.nls.uk/maps/&quot;&gt;National Library of Scotland Historic Maps&lt;/a&gt;',
				bounds: [[49.6, -12], [61.7, 3]],
				minZoom: 1,
				maxZoom: 18,
				subdomains: '0123',
			}
		},
		JusticeMap: {
			// Justice Map (http://www.justicemap.org/)
			// Visualize race and income data for your community, county and country.
			// Includes tools for data journalists, bloggers and community activists.
			url: 'http://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png',
			options: {
				attribution: '&lt;a href=&quot;http://www.justicemap.org/terms.php&quot;&gt;Justice Map&lt;/a&gt;',
				// one of 'county', 'tract', 'block'
				size: 'county',
				// Bounds for USA, including Alaska and Hawaii
				bounds: [[14, -180], [72, -56]]
			},
			variants: {
				income: 'income',
				americanIndian: 'indian',
				asian: 'asian',
				black: 'black',
				hispanic: 'hispanic',
				multi: 'multi',
				nonWhite: 'nonwhite',
				white: 'white',
				plurality: 'plural'
			}
		},
		Wikimedia: {
			url: 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '&lt;a href=&quot;https://wikimediafoundation.org/wiki/Maps_Terms_of_Use&quot;&gt;Wikimedia&lt;/a&gt;',
				minZoom: 1,
				maxZoom: 19
			}
		},
		GeoportailFrance: {
			url: 'https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&amp;SERVICE=WMTS&amp;VERSION=1.0.0&amp;STYLE={style}&amp;TILEMATRIXSET=PM&amp;FORMAT={format}&amp;LAYER={variant}&amp;TILEMATRIX={z}&amp;TILEROW={y}&amp;TILECOL={x}',
			options: {
				attribution: '&lt;a target=&quot;_blank&quot; href=&quot;https://www.geoportail.gouv.fr/&quot;&gt;Geoportail France&lt;/a&gt;',
				bounds: [[-75, -180], [81, 180]],
				minZoom: 2,
				maxZoom: 18,
				// Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/
				// NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee
				apikey: 'choisirgeoportail',
				format: 'image/jpeg',
				style : 'normal',
				variant: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD'
			},
			variants: {
				parcels: {
					options : {
						variant: 'CADASTRALPARCELS.PARCELS',
						maxZoom: 20,
						style : 'bdparcellaire',
						format: 'image/png'
					}
				},
				ignMaps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS',
				maps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD',
				orthos: {
					options: {
						maxZoom: 19,
						variant: 'ORTHOIMAGERY.ORTHOPHOTOS'
					}
				}
			}
		},
		OneMapSG: {
			url: 'https://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png',
			options: {
				variant: 'Default',
				minZoom: 11,
				maxZoom: 18,
				bounds: [[1.56073, 104.11475], [1.16, 103.502]],
				attribution: '&lt;img src=&quot;https://docs.onemap.sg/maps/images/oneMap64-01.png&quot; style=&quot;height:20px;width:20px;&quot;/&gt; New OneMap | Map data &amp;copy; contributors, &lt;a href=&quot;http://SLA.gov.sg&quot;&gt;Singapore Land Authority&lt;/a&gt;'
			},
			variants: {
				Default: 'Default',
				Night: 'Night',
				Original: 'Original',
				Grey: 'Grey',
				LandLot: 'LandLot'
			}
		}
	};

	L.tileLayer.provider = function (provider, options) {
		return new L.TileLayer.Provider(provider, options);
	};

	return L;
}));
`;
            if(!document.getElementById(provEl.id)){
                 document.head.appendChild(provEl);        
            }
            _createMap();
            }
        esriEl.src = esriLeafletCdn + &quot;esri-leaflet.js&quot;;
        addToHeadIfNotLoaded(esriEl);
        };
    leafletJsEl.src = leafletCdn + &quot;leaflet.js&quot;;
    addToHeadIfNotLoaded(leafletJsEl);
})();
&lt;/script&gt;

&lt;center&gt;&lt;h3&gt;The first hike of the 2020 season!&lt;/h3&gt;&lt;/center&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/arrowhead-pinacles/full-lake.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/arrowhead-pinacles/full-lake.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Like many in the world during March of 2020, I have been anxiously cooped up indoors. Following CDC guidelines and obsessively reading about things beyond human control does not make for a mentally healthy individual. Luckily, Mother Nature has a cure.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/arrowhead-pinacles/nali.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/arrowhead-pinacles/nali.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;I have always loved hiking and camping since I joined the Boy Scouts in my childhood. Being outdoors has always helped me calm down and “see the big picture”. Today, during the first major hike of the 2020 season, I am reminded of the outdoor’s healing power. Hanging out outside with Nali and my great friends Matt and Zack has me feeling rejuvenated and ready to take on another week. Thanks, guys. And thanks, Mother Nature.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/day-hikes/arrowhead-pinacles/matt.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/day-hikes/arrowhead-pinacles/matt.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Stay safe everyone, and consider taking a visit to your local park. You might be suprised how it makes you feel.&lt;/p&gt;</content><author><name>David Vitale</name></author><category term="travel" /><category term="misc" /><category term="day-hikes" /><summary type="html"></summary></entry><entry><title type="html">Twenty Lakes Basin, Inyo National Forest</title><link href="/blog/travel/misc/backpacking/twenty-lakes-basin" rel="alternate" type="text/html" title="Twenty Lakes Basin, Inyo National Forest" /><published>2019-09-01T00:00:00-07:00</published><updated>2019-09-01T00:00:00-07:00</updated><id>/blog/travel/misc/backpacking/twenty-lakes-basin</id><content type="html" xml:base="/blog/travel/misc/backpacking/twenty-lakes-basin">&lt;div id=&quot;leaflet-map-b64391462ff2bd4da1b58a6cc1dfb31e&quot; class=&quot;leaflet-map&quot;&gt;&lt;/div&gt;
&lt;script&gt;(() =&gt; {
// Specify configuration variables, setup any elements and styling
    var leafletCdn = &quot;https://unpkg.com/leaflet@1.6.0/dist/&quot;;
    var esriLeafletCdn = &quot;https://unpkg.com/esri-leaflet/dist/&quot;;

    // Get tag input arguments &amp; inside block object list
    var tagInputArg = { &quot;zoom&quot; : 12,
                 &quot;esriBasemap&quot;: &quot;Topographic&quot;} ;
    var blockLeafletItems = [
    
        
        {id: &quot;8e7f4621a58d8b92a288a23c1621ed7c&quot;,
              type: &quot;LeafletGeoJSON&quot;,
              value: { &quot;type&quot;: &quot;FeatureCollection&quot;, &quot;features&quot;: [{ &quot;type&quot;: &quot;Feature&quot;, &quot;properties&quot;: {&quot;popupContent&quot;: &quot;Twenty Lakes Basin Trailhead at Saddlebag Lake&quot;}, &quot;geometry&quot;: { &quot;type&quot;: &quot;Point&quot;, &quot;coordinates&quot;: [-119.270854, 37.965721] } }] } },
    
];

    // Override the map div id if specified, apply default CSS
    var defaultMapElId = &quot;leaflet-map-b64391462ff2bd4da1b58a6cc1dfb31e&quot;;
   var defaultMapElStyle = &quot;height:300px; margin-top:15px; margin-bottom:15px&quot;;
    var mapEl = document.getElementById(defaultMapElId);
    if('divId' in tagInputArg){
        mapEl.id = tagInputArg['divId'];
    }
    var defaultMapCssEl = document.createElement(&quot;style&quot;);
    defaultMapCssEl.innerHTML = 
        &quot;#&quot; + defaultMapElId + &quot;{&quot; + defaultMapElStyle + &quot;}&quot;;
    document.head.appendChild(defaultMapCssEl);

    var newWindowImgSrcBase64 = &quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH4wUVFzAHq2j99AAAAV9JREFUSMdjYKAxYCRHk5ubG9+1a9fm/v//H6cadnb2G/fu3atlIceC379/c3z9+jUEn5q/f/8eYWBgYECxQE5OroqA2Y8ePXq0hJWV9Qc3N/caZB8wMjJKff361QpvEAkKCv4nYMGh9+/f26MLamhoyLx9+3b/nz9/VJCC6MiLFy9sWXCE3xlGRsZvWKQu4DOciYnpCzc396HPnz97weRxWRD/8OHDa4TiAt1wfn5+z79//zoxMDDALWAiN/lhM/zevXtH0NUx0dJwsiwgxXCccUCJ4dzc3DP+//+/gZ2d/duLFy9Is+Djx4+rCbn82rVrrxgYGF6RFUR8fHyZbGxsD7AZLiEhUSAiIrJSUlIyjOw4uHnz5gVHR0d1bC7/8+eP5d+/f8P+/PmjS1Ekr1ix4hcp6ploXVwPfQuwJlMmJiYBLS0tIVIMev36NRvRFnz48OHohw8fhkYQjQKCAAChiL6Pj/LM2QAAAABJRU5ErkJggg==&quot;;

// Actual mapping section; Specify a function to be called later that 
// assembles the correct JS components based on what the user specified in the 
// tag input arg, the block section of features, etc. Actually creates the map
// that is visible on the page

    function _getCenter(){
        var defaultCenter = [0,0];
        if(&quot;center&quot; in tagInputArg){
            return tagInputArg.center;
        } else {
            return defaultCenter;
        }
    }

    function _getZoom(){
        var defaultZoom = 1;
        if(&quot;zoom&quot; in tagInputArg){
            return tagInputArg.zoom
        } else {
            return defaultZoom;
        }
    }

    function _getProviderBasemap(){
        var defaultProviderBasemap = &quot;OpenStreetMap.Mapnik&quot;;
        if(&quot;providerBasemap&quot; in tagInputArg){
            return tagInputArg.providerBasemap;
        } else {
            return defaultProviderBasemap;
        }
    }


    function _addMarkerToMap(leafletItem, map){
        var m = leafletItem.value;
        var result = L.marker([m.latitude, m.longitude]).addTo(map);
        var potentialPopup = &quot;&quot;;
        if('popupContent' in m){
                potentialPopup += m.popupContent;}
        if('href' in m){
            potentialPopup += '&lt;a href=&quot;' + m.href + '&quot;&gt;' + 
                '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            result.bindPopup(potentialPopup);}
        if(!('center' in tagInputArg)){
            // If the user didn't specify a center, infer from marker
            map.panTo(new L.LatLng(m.latitude, m.longitude));
        }
    }

    function _onEachFeature(feature, layer){
        var potentialPopup = &quot;&quot;
        if(feature.properties &amp;&amp; feature.properties.popupContent){
            potentialPopup += feature.properties.popupContent;
        }
        if(feature.properties &amp;&amp; feature.properties.href){
            potentialPopup += 
                '&lt;a href=&quot;' + feature.properties.href + '&quot;&gt;' + 
                    '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            layer.bindPopup(potentialPopup);
        }
    }

    function _addGeoJSONToMap(leafletItem, map){
        if(typeof leafletItem.value === &quot;string&quot;){
            fetch(leafletItem.value).then((resp) =&gt; {
                return resp.json();
            }).then((data) =&gt; {
                leafletItem.value = data;
                _addGeoJSONObjToMap(leafletItem, map);
            }).catch((err) =&gt; {
                console.log(&quot;Encountered err w/ geojson, attempting to fix..&quot;);
                console.log(err);
                _addGeoJSONObjToMap(leafletItem, map);
            });
        } else {
            _addGeoJSONObjToMap(leafletItem, map);
        }
     }

    function _addGeoJSONObjToMap(leafletItem, map){
         var geojson = L.geoJSON(leafletItem.value, { 
            onEachFeature: _onEachFeature 
        });
        layers = geojson.getLayers();
        for(var i=0; i&lt;layers.length; i++){
            try{
                var geom = layers[i].feature.geometry;
                if(!('center' in tagInputArg)){
                    // If the user didn't specify a center, infer from geojson
                    //console.log(&quot;panning to &quot; + geom.coordinates);
                    map.panTo(new L.LatLng(geom.coordinates[1],
                                           geom.coordinates[0]));
                }
            } catch(e){}
        }
       
        geojson.addTo(map);
       
    }

    function _processLeafletItem(leafletItem, map){
        switch(leafletItem.type){
            case &quot;LeafletMarker&quot;:
                _addMarkerToMap(leafletItem, map);
                break;
            case &quot;LeafletGeoJSON&quot;:
                _addGeoJSONToMap(leafletItem, map);
                break;
            case undefined:
                break; 
            default:
                console.log(&quot;Couldn't add item &quot; + leafletItem.id);
                break;
        }
    }

//The actual section that is called that creates a map
    function createMap(){
        console.log(&quot;Creating map b64391462ff2bd4da1b58a6cc1dfb31e with these args:&quot;);
        console.log(tagInputArg);

        //Initialize Map with the correct input arguments
        var map = L.map(mapEl.id, 
            {worldCopyJump: true}).setView(_getCenter(), _getZoom());
        L.tileLayer.provider(_getProviderBasemap()).addTo(map);
        if(&quot;esriBasemap&quot; in tagInputArg){
            L.esri.basemapLayer(tagInputArg.esriBasemap).addTo(map);
        }

        //process each Leaflet Item passed in between the block tag middle
        for(var i=0; i&lt;blockLeafletItems.length; i++){
            var leafletItem = blockLeafletItems[i];
            console.log(&quot;Adding leaflet item &quot; + leafletItem.id + &quot;:&quot;);
            console.log(leafletItem);
            _processLeafletItem(leafletItem, map);
        }
    }

// Load the correct JS libraries/CSS by adding to head: 
// When ready, call createMap() to create the map on the page

    function _createMap(){
        // helper function to draw the map only when everything is loaded,
        // safeguards against multiple calls to window.onload
        var prevOnLoad;
        if(window.onload){
            prevOnLoad = window.onload;
        }
        window.onload = () =&gt; {
            createMap();
            if(prevOnLoad){
                prevOnLoad();
            }
        }
    }

    var leafletCssId = &quot;leaflet-css-head&quot;;
    var leafletJsId = &quot;leaflet-js-head&quot;;
    var esriLeafletJsId = &quot;esri-leaflet-js-head&quot;;
    var leafletProvidersJsId = &quot;leaflet-providers-js-head&quot;;

    // Add the leaflet CSS first, don't worry about when it loads
    var leafletCssEl = document.createElement(&quot;link&quot;);
    leafletCssEl.id = leafletCssId;
    leafletCssEl.rel = &quot;stylesheet&quot;;
    leafletCssEl.href = leafletCdn + &quot;leaflet.css&quot;;
    if(!document.getElementById(leafletCssEl.id)){
        document.head.appendChild(leafletCssEl);
    }

    function addToHeadIfNotLoaded(el) {
        //Add the el to the head if it doesn't exist already. If it does,
        //everything we need is already loaded, so draw the map
        if(!document.getElementById(el.id)){
            document.head.appendChild(el);
        } else {
            _createMap();
        }
    }

    // Load the main leaflet.js code, wait for it to load
    var leafletJsEl = document.createElement(&quot;script&quot;);
    leafletJsEl.id = leafletJsId;
    leafletJsEl.onload = () =&gt; {
        //After loaded, load the esri-leaflet.js code, wait for it to load
        var esriEl = document.createElement(&quot;script&quot;);
        esriEl.id = esriLeafletJsId;
        esriEl.onload = () =&gt; {
            //After loaded, add the inline leaflet-providers &lt;script&gt;
            provEl = document.createElement(&quot;script&quot;);
            provEl.id = leafletProvidersJsId;
            provEl.innerHTML = `//Taken from https://github.com/leaflet-extras/leaflet-providers
(function (root, factory) {
	if (typeof define === 'function' &amp;&amp; define.amd) {
		// AMD. Register as an anonymous module.
		define(['leaflet'], factory);
	} else if (typeof modules === 'object' &amp;&amp; module.exports) {
		// define a Common JS module that relies on 'leaflet'
		module.exports = factory(require('leaflet'));
	} else {
		// Assume Leaflet is loaded into global object L already
		factory(L);
	}
}(this, function (L) {
	'use strict';

	L.TileLayer.Provider = L.TileLayer.extend({
		initialize: function (arg, options) {
			var providers = L.TileLayer.Provider.providers;

			var parts = arg.split('.');

			var providerName = parts[0];
			var variantName = parts[1];

			if (!providers[providerName]) {
				throw 'No such provider (' + providerName + ')';
			}

			var provider = {
				url: providers[providerName].url,
				options: providers[providerName].options
			};

			// overwrite values in provider from variant.
			if (variantName &amp;&amp; 'variants' in providers[providerName]) {
				if (!(variantName in providers[providerName].variants)) {
					throw 'No such variant of ' + providerName + ' (' + variantName + ')';
				}
				var variant = providers[providerName].variants[variantName];
				var variantOptions;
				if (typeof variant === 'string') {
					variantOptions = {
						variant: variant
					};
				} else {
					variantOptions = variant.options;
				}
				provider = {
					url: variant.url || provider.url,
					options: L.Util.extend({}, provider.options, variantOptions)
				};
			}

			// replace attribution placeholders with their values from toplevel provider attribution,
			// recursively
			var attributionReplacer = function (attr) {
				if (attr.indexOf('{attribution.') === -1) {
					return attr;
				}
				return attr.replace(/\{attribution.(\w*)\}/g,
					function (match, attributionName) {
						return attributionReplacer(providers[attributionName].options.attribution);
					}
				);
			};
			provider.options.attribution = attributionReplacer(provider.options.attribution);

			// Compute final options combining provider options with any user overrides
			var layerOpts = L.Util.extend({}, provider.options, options);
			L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts);
		}
	});

	/**
	 * Definition of providers.
	 * see http://leafletjs.com/reference.html#tilelayer for options in the options map.
	 */

	L.TileLayer.Provider.providers = {
		OpenStreetMap: {
			url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution:
					'&amp;copy; &lt;a href=&quot;https://www.openstreetmap.org/copyright&quot;&gt;OpenStreetMap&lt;/a&gt; contributors'
			},
			variants: {
				Mapnik: {},
				DE: {
					url: 'https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18
					}
				},
				CH: {
					url: 'https://tile.osm.ch/switzerland/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18,
						bounds: [[45, 5], [48, 11]]
					}
				},
				France: {
					url: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png',
					options: {
						maxZoom: 20,
						attribution: '&amp;copy; Openstreetmap France | {attribution.OpenStreetMap}'
					}
				},
				HOT: {
					url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',
					options: {
						attribution:
							'{attribution.OpenStreetMap}, ' +
							'Tiles style by &lt;a href=&quot;https://www.hotosm.org/&quot; target=&quot;_blank&quot;&gt;Humanitarian OpenStreetMap Team&lt;/a&gt; ' +
							'hosted by &lt;a href=&quot;https://openstreetmap.fr/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap France&lt;/a&gt;'
					}
				},
				BZH: {
					url: 'https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png',
					options: {
						attribution: '{attribution.OpenStreetMap}, Tiles courtesy of &lt;a href=&quot;http://www.openstreetmap.bzh/&quot; target=&quot;_blank&quot;&gt;Breton OpenStreetMap Team&lt;/a&gt;',
						bounds: [[46.2, -5.5], [50, 0.7]]
					}
				}
			}
		},
		OpenSeaMap: {
			url: 'https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png',
			options: {
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openseamap.org&quot;&gt;OpenSeaMap&lt;/a&gt; contributors'
			}
		},
		OpenPtMap: {
			url: 'http://openptmap.org/tiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openptmap.org&quot;&gt;OpenPtMap&lt;/a&gt; contributors'
			}
		},
		OpenTopoMap: {
			url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: {attribution.OpenStreetMap}, &lt;a href=&quot;http://viewfinderpanoramas.org&quot;&gt;SRTM&lt;/a&gt; | Map style: &amp;copy; &lt;a href=&quot;https://opentopomap.org&quot;&gt;OpenTopoMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenRailwayMap: {
			url: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://www.OpenRailwayMap.org&quot;&gt;OpenRailwayMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenFireMap: {
			url: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;http://www.openfiremap.org&quot;&gt;OpenFireMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		SafeCast: {
			url: 'https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 16,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://blog.safecast.org/about/&quot;&gt;SafeCast&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		Thunderforest: {
			url: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}',
			options: {
				attribution:
					'&amp;copy; &lt;a href=&quot;http://www.thunderforest.com/&quot;&gt;Thunderforest&lt;/a&gt;, {attribution.OpenStreetMap}',
				variant: 'cycle',
				apikey: '&lt;insert your api key here&gt;',
				maxZoom: 22
			},
			variants: {
				OpenCycleMap: 'cycle',
				Transport: {
					options: {
						variant: 'transport'
					}
				},
				TransportDark: {
					options: {
						variant: 'transport-dark'
					}
				},
				SpinalMap: {
					options: {
						variant: 'spinal-map'
					}
				},
				Landscape: 'landscape',
				Outdoors: 'outdoors',
				Pioneer: 'pioneer'
			}
		},
		OpenMapSurfer: {
			url: 'https://maps.heigit.org/openmapsurfer/tiles/{variant}/webmercator/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				variant: 'roads',
				attribution: 'Imagery from &lt;a href=&quot;http://giscience.uni-hd.de/&quot;&gt;GIScience Research Group @ University of Heidelberg&lt;/a&gt; | Map data '
			},
			variants: {
				Roads: {
					options: {
						variant: 'roads',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				Hybrid: {
					options: {
						variant: 'hybrid',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				AdminBounds: {
					options: {
						variant: 'adminb',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				ContourLines: {
					options: {
						variant: 'asterc',
						maxZoom: 18,
						minZoom: 13,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;'
					}
				},
				Hillshade: {
					options: {
						variant: 'asterh',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;, &lt;a href=&quot;http://srtm.csi.cgiar.org/&quot;&gt;SRTM&lt;/a&gt;'
					}
				},
				ElementsAtRisk: {
					options: {
						variant: 'elements_at_risk',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				}
			}
		},
		Hydda: {
			url: 'https://{s}.tile.openstreetmap.se/hydda/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 18,
				variant: 'full',
				attribution: 'Tiles courtesy of &lt;a href=&quot;http://openstreetmap.se/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap Sweden&lt;/a&gt; &amp;mdash; Map data {attribution.OpenStreetMap}'
			},
			variants: {
				Full: 'full',
				Base: 'base',
				RoadsAndLabels: 'roads_and_labels'
			}
		},
		MapBox: {
			url: 'https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}{r}.png?access_token={accessToken}',
			options: {
				attribution:
					'&lt;a href=&quot;https://www.mapbox.com/about/maps/&quot; target=&quot;_blank&quot;&gt;&amp;copy; Mapbox&lt;/a&gt; ' +
					'{attribution.OpenStreetMap} ' +
					'&lt;a href=&quot;https://www.mapbox.com/map-feedback/&quot; target=&quot;_blank&quot;&gt;Improve this map&lt;/a&gt;',
				subdomains: 'abcd',
				id: 'mapbox.streets',
				accessToken: '&lt;insert your access token here&gt;',
			}
		},
		Stamen: {
			url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}{r}.{ext}',
			options: {
				attribution:
					'Map tiles by &lt;a href=&quot;http://stamen.com&quot;&gt;Stamen Design&lt;/a&gt;, ' +
					'&lt;a href=&quot;http://creativecommons.org/licenses/by/3.0&quot;&gt;CC BY 3.0&lt;/a&gt; &amp;mdash; ' +
					'Map data {attribution.OpenStreetMap}',
				subdomains: 'abcd',
				minZoom: 0,
				maxZoom: 20,
				variant: 'toner',
				ext: 'png'
			},
			variants: {
				Toner: 'toner',
				TonerBackground: 'toner-background',
				TonerHybrid: 'toner-hybrid',
				TonerLines: 'toner-lines',
				TonerLabels: 'toner-labels',
				TonerLite: 'toner-lite',
				Watercolor: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'watercolor',
						ext: 'jpg',
						minZoom: 1,
						maxZoom: 16
					}
				},
				Terrain: {
					options: {
						variant: 'terrain',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TerrainBackground: {
					options: {
						variant: 'terrain-background',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TopOSMRelief: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'toposm-color-relief',
						ext: 'jpg',
						bounds: [[22, -132], [51, -56]]
					}
				},
				TopOSMFeatures: {
					options: {
						variant: 'toposm-features',
						bounds: [[22, -132], [51, -56]],
						opacity: 0.9
					}
				}
			}
		},
		Esri: {
			url: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}',
			options: {
				variant: 'World_Street_Map',
				attribution: 'Tiles &amp;copy; Esri'
			},
			variants: {
				WorldStreetMap: {
					options: {
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'
					}
				},
				DeLorme: {
					options: {
						variant: 'Specialty/DeLorme_World_Base_Map',
						minZoom: 1,
						maxZoom: 11,
						attribution: '{attribution.Esri} &amp;mdash; Copyright: &amp;copy;2012 DeLorme'
					}
				},
				WorldTopoMap: {
					options: {
						variant: 'World_Topo_Map',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community'
					}
				},
				WorldImagery: {
					options: {
						variant: 'World_Imagery',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
					}
				},
				WorldTerrain: {
					options: {
						variant: 'World_Terrain_Base',
						maxZoom: 13,
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: USGS, Esri, TANA, DeLorme, and NPS'
					}
				},
				WorldShadedRelief: {
					options: {
						variant: 'World_Shaded_Relief',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Source: Esri'
					}
				},
				WorldPhysical: {
					options: {
						variant: 'World_Physical_Map',
						maxZoom: 8,
						attribution: '{attribution.Esri} &amp;mdash; Source: US National Park Service'
					}
				},
				OceanBasemap: {
					options: {
						variant: 'Ocean_Basemap',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri'
					}
				},
				NatGeoWorldMap: {
					options: {
						variant: 'NatGeo_World_Map',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC'
					}
				},
				WorldGrayCanvas: {
					options: {
						variant: 'Canvas/World_Light_Gray_Base',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; Esri, DeLorme, NAVTEQ'
					}
				}
			}
		},
		OpenWeatherMap: {
			url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}',
			options: {
				maxZoom: 19,
				attribution: 'Map data &amp;copy; &lt;a href=&quot;http://openweathermap.org&quot;&gt;OpenWeatherMap&lt;/a&gt;',
				apiKey:'&lt;insert your api key here&gt;',
				opacity: 0.5
			},
			variants: {
				Clouds: 'clouds',
				CloudsClassic: 'clouds_cls',
				Precipitation: 'precipitation',
				PrecipitationClassic: 'precipitation_cls',
				Rain: 'rain',
				RainClassic: 'rain_cls',
				Pressure: 'pressure',
				PressureContour: 'pressure_cntr',
				Wind: 'wind',
				Temperature: 'temp',
				Snow: 'snow'
			}
		},
		HERE: {
			/*
			 * HERE maps, formerly Nokia maps.
			 * These basemaps are free, but you need an API key. Please sign up at
			 * https://developer.here.com/plans
			 */
			url:
				'https://{s}.{base}.maps.api.here.com/maptile/2.1/' +
				'{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' +
				'app_id={app_id}&amp;app_code={app_code}&amp;lg={language}',
			options: {
				attribution:
					'Map &amp;copy; 1987-' + new Date().getFullYear() + ' &lt;a href=&quot;http://developer.here.com&quot;&gt;HERE&lt;/a&gt;',
				subdomains: '1234',
				mapID: 'newest',
				'app_id': '&lt;insert your app_id here&gt;',
				'app_code': '&lt;insert your app_code here&gt;',
				base: 'base',
				variant: 'normal.day',
				maxZoom: 20,
				type: 'maptile',
				language: 'eng',
				format: 'png8',
				size: '256'
			},
			variants: {
				normalDay: 'normal.day',
				normalDayCustom: 'normal.day.custom',
				normalDayGrey: 'normal.day.grey',
				normalDayMobile: 'normal.day.mobile',
				normalDayGreyMobile: 'normal.day.grey.mobile',
				normalDayTransit: 'normal.day.transit',
				normalDayTransitMobile: 'normal.day.transit.mobile',
				normalNight: 'normal.night',
				normalNightMobile: 'normal.night.mobile',
				normalNightGrey: 'normal.night.grey',
				normalNightGreyMobile: 'normal.night.grey.mobile',
				normalNightTransit: 'normal.night.transit',
				normalNightTransitMobile: 'normal.night.transit.mobile',
				reducedDay: 'reduced.day',
				reducedNight: 'reduced.night',
				basicMap: {
					options: {
						type: 'basetile'
					}
				},
				mapLabels: {
					options: {
						type: 'labeltile',
						format: 'png'
					}
				},
				trafficFlow: {
					options: {
						base: 'traffic',
						type: 'flowtile'
					}
				},
				carnavDayGrey: 'carnav.day.grey',
				hybridDay: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day'
					}
				},
				hybridDayMobile: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.mobile'
					}
				},
				hybridDayTransit: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.transit'
					}
				},
				hybridDayGrey: {
					options: {
						base: 'aerial',
						variant: 'hybrid.grey.day'
					}
				},
				pedestrianDay: 'pedestrian.day',
				pedestrianNight: 'pedestrian.night',
				satelliteDay: {
					options: {
						base: 'aerial',
						variant: 'satellite.day'
					}
				},
				terrainDay: {
					options: {
						base: 'aerial',
						variant: 'terrain.day'
					}
				},
				terrainDayMobile: {
					options: {
						base: 'aerial',
						variant: 'terrain.day.mobile'
					}
				}
			}
		},
		FreeMapSK: {
			url: 'http://t{s}.freemap.sk/T/{z}/{x}/{y}.jpeg',
			options: {
				minZoom: 8,
				maxZoom: 16,
				subdomains: '1234',
				bounds: [[47.204642, 15.996093], [49.830896, 22.576904]],
				attribution:
					'{attribution.OpenStreetMap}, vizualization CC-By-SA 2.0 &lt;a href=&quot;http://freemap.sk&quot;&gt;Freemap.sk&lt;/a&gt;'
			}
		},
		MtbMap: {
			url: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png',
			options: {
				attribution:
					'{attribution.OpenStreetMap} &amp;amp; USGS'
			}
		},
		CartoDB: {
			url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '{attribution.OpenStreetMap} &amp;copy; &lt;a href=&quot;https://carto.com/attributions&quot;&gt;CARTO&lt;/a&gt;',
				subdomains: 'abcd',
				maxZoom: 19,
				variant: 'light_all'
			},
			variants: {
				Positron: 'light_all',
				PositronNoLabels: 'light_nolabels',
				PositronOnlyLabels: 'light_only_labels',
				DarkMatter: 'dark_all',
				DarkMatterNoLabels: 'dark_nolabels',
				DarkMatterOnlyLabels: 'dark_only_labels',
				Voyager: 'rastertiles/voyager',
				VoyagerNoLabels: 'rastertiles/voyager_nolabels',
				VoyagerOnlyLabels: 'rastertiles/voyager_only_labels',
				VoyagerLabelsUnder: 'rastertiles/voyager_labels_under'
			}
		},
		HikeBike: {
			url: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: '{attribution.OpenStreetMap}',
				variant: 'hikebike'
			},
			variants: {
				HikeBike: {},
				HillShading: {
					options: {
						maxZoom: 15,
						variant: 'hillshading'
					}
				}
			}
		},
		BasemapAT: {
			url: 'https://maps{s}.wien.gv.at/basemap/{variant}/normal/google3857/{z}/{y}/{x}.{format}',
			options: {
				maxZoom: 19,
				attribution: 'Datenquelle: &lt;a href=&quot;https://www.basemap.at&quot;&gt;basemap.at&lt;/a&gt;',
				subdomains: ['', '1', '2', '3', '4'],
				format: 'png',
				bounds: [[46.358770, 8.782379], [49.037872, 17.189532]],
				variant: 'geolandbasemap'
			},
			variants: {
				basemap: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'geolandbasemap'
					}
				},
				grau: 'bmapgrau',
				overlay: 'bmapoverlay',
				highdpi: {
					options: {
						variant: 'bmaphidpi',
						format: 'jpeg'
					}
				},
				orthofoto: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'bmaporthofoto30cm',
						format: 'jpeg'
					}
				}
			}
		},
		nlmaps: {
			url: 'https://geodata.nationaalgeoregister.nl/tiles/service/wmts/{variant}/EPSG:3857/{z}/{x}/{y}.png',
			options: {
				minZoom: 6,
				maxZoom: 19,
				bounds: [[50.5, 3.25], [54, 7.6]],
				attribution: 'Kaartgegevens &amp;copy; &lt;a href=&quot;kadaster.nl&quot;&gt;Kadaster&lt;/a&gt;'
			},
			variants: {
				'standaard': 'brtachtergrondkaart',
				'pastel': 'brtachtergrondkaartpastel',
				'grijs': 'brtachtergrondkaartgrijs',
				'luchtfoto': {
					'url': 'https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts/1.0.0/2016_ortho25/EPSG:3857/{z}/{x}/{y}.png',
				}
			}
		},
		NASAGIBS: {
			url: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}',
			options: {
				attribution:
					'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' +
					'(&lt;a href=&quot;https://earthdata.nasa.gov&quot;&gt;ESDIS&lt;/a&gt;) with funding provided by NASA/HQ.',
				bounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]],
				minZoom: 1,
				maxZoom: 9,
				format: 'jpg',
				time: '',
				tilematrixset: 'GoogleMapsCompatible_Level'
			},
			variants: {
				ModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor',
				ModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367',
				ViirsEarthAtNight2012: {
					options: {
						variant: 'VIIRS_CityLights_2012',
						maxZoom: 8
					}
				},
				ModisTerraLSTDay: {
					options: {
						variant: 'MODIS_Terra_Land_Surface_Temp_Day',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				},
				ModisTerraSnowCover: {
					options: {
						variant: 'MODIS_Terra_Snow_Cover',
						format: 'png',
						maxZoom: 8,
						opacity: 0.75
					}
				},
				ModisTerraAOD: {
					options: {
						variant: 'MODIS_Terra_Aerosol',
						format: 'png',
						maxZoom: 6,
						opacity: 0.75
					}
				},
				ModisTerraChlorophyll: {
					options: {
						variant: 'MODIS_Terra_Chlorophyll_A',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				}
			}
		},
		NLS: {
			// NLS maps are copyright National library of Scotland.
			// http://maps.nls.uk/projects/api/index.html
			// Please contact NLS for anything other than non-commercial low volume usage
			//
			// Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s
			//   z0-9  - 1:1m
			//  z10-11 - quarter inch (1:253440)
			//  z12-18 - one inch (1:63360)
			url: 'https://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg',
			options: {
				attribution: '&lt;a href=&quot;http://geo.nls.uk/maps/&quot;&gt;National Library of Scotland Historic Maps&lt;/a&gt;',
				bounds: [[49.6, -12], [61.7, 3]],
				minZoom: 1,
				maxZoom: 18,
				subdomains: '0123',
			}
		},
		JusticeMap: {
			// Justice Map (http://www.justicemap.org/)
			// Visualize race and income data for your community, county and country.
			// Includes tools for data journalists, bloggers and community activists.
			url: 'http://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png',
			options: {
				attribution: '&lt;a href=&quot;http://www.justicemap.org/terms.php&quot;&gt;Justice Map&lt;/a&gt;',
				// one of 'county', 'tract', 'block'
				size: 'county',
				// Bounds for USA, including Alaska and Hawaii
				bounds: [[14, -180], [72, -56]]
			},
			variants: {
				income: 'income',
				americanIndian: 'indian',
				asian: 'asian',
				black: 'black',
				hispanic: 'hispanic',
				multi: 'multi',
				nonWhite: 'nonwhite',
				white: 'white',
				plurality: 'plural'
			}
		},
		Wikimedia: {
			url: 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '&lt;a href=&quot;https://wikimediafoundation.org/wiki/Maps_Terms_of_Use&quot;&gt;Wikimedia&lt;/a&gt;',
				minZoom: 1,
				maxZoom: 19
			}
		},
		GeoportailFrance: {
			url: 'https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&amp;SERVICE=WMTS&amp;VERSION=1.0.0&amp;STYLE={style}&amp;TILEMATRIXSET=PM&amp;FORMAT={format}&amp;LAYER={variant}&amp;TILEMATRIX={z}&amp;TILEROW={y}&amp;TILECOL={x}',
			options: {
				attribution: '&lt;a target=&quot;_blank&quot; href=&quot;https://www.geoportail.gouv.fr/&quot;&gt;Geoportail France&lt;/a&gt;',
				bounds: [[-75, -180], [81, 180]],
				minZoom: 2,
				maxZoom: 18,
				// Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/
				// NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee
				apikey: 'choisirgeoportail',
				format: 'image/jpeg',
				style : 'normal',
				variant: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD'
			},
			variants: {
				parcels: {
					options : {
						variant: 'CADASTRALPARCELS.PARCELS',
						maxZoom: 20,
						style : 'bdparcellaire',
						format: 'image/png'
					}
				},
				ignMaps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS',
				maps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD',
				orthos: {
					options: {
						maxZoom: 19,
						variant: 'ORTHOIMAGERY.ORTHOPHOTOS'
					}
				}
			}
		},
		OneMapSG: {
			url: 'https://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png',
			options: {
				variant: 'Default',
				minZoom: 11,
				maxZoom: 18,
				bounds: [[1.56073, 104.11475], [1.16, 103.502]],
				attribution: '&lt;img src=&quot;https://docs.onemap.sg/maps/images/oneMap64-01.png&quot; style=&quot;height:20px;width:20px;&quot;/&gt; New OneMap | Map data &amp;copy; contributors, &lt;a href=&quot;http://SLA.gov.sg&quot;&gt;Singapore Land Authority&lt;/a&gt;'
			},
			variants: {
				Default: 'Default',
				Night: 'Night',
				Original: 'Original',
				Grey: 'Grey',
				LandLot: 'LandLot'
			}
		}
	};

	L.tileLayer.provider = function (provider, options) {
		return new L.TileLayer.Provider(provider, options);
	};

	return L;
}));
`;
            if(!document.getElementById(provEl.id)){
                 document.head.appendChild(provEl);        
            }
            _createMap();
            }
        esriEl.src = esriLeafletCdn + &quot;esri-leaflet.js&quot;;
        addToHeadIfNotLoaded(esriEl);
        };
    leafletJsEl.src = leafletCdn + &quot;leaflet.js&quot;;
    addToHeadIfNotLoaded(leafletJsEl);
})();
&lt;/script&gt;

&lt;p&gt;I spent this long holiday weekend in the Inyo National Forest doing an overnight backpacking adventure. This was Indhu’s first time backpacking, and she did great! My dog Nali also came along, who had a blast climbing up rocks and exploring all the smells &amp;amp; open space.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/misc-travel/twenty-lakes/twenty-lakes-1.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/misc-travel/twenty-lakes/twenty-lakes-1.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;This area of Inyo is quota-free, which means you can backpack here last minute even on a busy holiday weekend – you just need a permit from a ranger station. I highly recommend to fallback to this area if your walk up permits don’t work out, it is an amazing trail.&lt;/p&gt;

&lt;p&gt;The loop itself is ~8 miles with little elevation gain, which makes it a great intro loop for backpacking. The trail we did can be found &lt;a href=&quot;https://www.alltrails.com/trail/us/california/twenty-lakes-basin-loop-trail&quot;&gt;here&lt;/a&gt;. You can also extend it by going down and up Lundy Falls, or any of the other connecting trails.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/misc-travel/twenty-lakes/twenty-lakes-2.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/misc-travel/twenty-lakes/twenty-lakes-2.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/misc-travel/twenty-lakes/twenty-lakes-3.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/misc-travel/twenty-lakes/twenty-lakes-3.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;We got to walk in the snow in September, which was pretty cool. The lakes being fed from the snow melt were pristine, with many flowing rivers and waterfalls. We found a really cool spot next to a waterfall to spend the night – Nothing like falling asleep to the sound of running water. All in all, an amazing experience.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/misc-travel/twenty-lakes/twenty-lakes-4.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/misc-travel/twenty-lakes/twenty-lakes-4.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/misc-travel/twenty-lakes/twenty-lakes-5.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/misc-travel/twenty-lakes/twenty-lakes-5.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/misc-travel/twenty-lakes/twenty-lakes-6.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/misc-travel/twenty-lakes/twenty-lakes-6.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;I’ll leave you with something fun. Pillows take up a lot of room in a backpack, so they are often left behind. Luckily I have my own mobile heated pillow!&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/misc-travel/twenty-lakes/twenty-lakes-7.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/misc-travel/twenty-lakes/twenty-lakes-7.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;</content><author><name>David Vitale</name></author><category term="travel" /><category term="misc" /><category term="backpacking" /></entry><entry><title type="html">Seoul</title><link href="/blog/travel/japan-2019/seoul" rel="alternate" type="text/html" title="Seoul" /><published>2019-07-05T00:00:00-07:00</published><updated>2019-07-05T00:00:00-07:00</updated><id>/blog/travel/japan-2019/seoul</id><content type="html" xml:base="/blog/travel/japan-2019/seoul">&lt;div id=&quot;leaflet-map-934ae60514ca01961e11323f45ffc289&quot; class=&quot;leaflet-map&quot;&gt;&lt;/div&gt;
&lt;script&gt;(() =&gt; {
// Specify configuration variables, setup any elements and styling
    var leafletCdn = &quot;https://unpkg.com/leaflet@1.6.0/dist/&quot;;
    var esriLeafletCdn = &quot;https://unpkg.com/esri-leaflet/dist/&quot;;

    // Get tag input arguments &amp; inside block object list
    var tagInputArg = { &quot;zoom&quot; : 7 } ;
    var blockLeafletItems = [
    
        
        {id: &quot;e3e84e65b5279552c5411f26771c09d6&quot;,
              type: &quot;LeafletGeoJSON&quot;,
              value: { &quot;type&quot;: &quot;FeatureCollection&quot;, &quot;features&quot;: [{ &quot;type&quot;: &quot;Feature&quot;, &quot;properties&quot;: {&quot;popupContent&quot;: &quot;광장시장 (Gwangjang Market)&quot;}, &quot;geometry&quot;: { &quot;type&quot;: &quot;Point&quot;, &quot;coordinates&quot;: [126.9993404, 37.5701527] } }, { &quot;type&quot;: &quot;Feature&quot;, &quot;properties&quot;: {&quot;popupContent&quot;: &quot;도라산역 (Dorasan Station)&quot;}, &quot;geometry&quot;: { &quot;type&quot;: &quot;Point&quot;, &quot;coordinates&quot;: [126.7098498, 37.8985962] } }, { &quot;type&quot;: &quot;Feature&quot;, &quot;properties&quot;: {&quot;popupContent&quot;: &quot;경복궁 (Gyeongbokgung Palace)&quot;}, &quot;geometry&quot;: { &quot;type&quot;: &quot;Point&quot;, &quot;coordinates&quot;: [126.977041, 37.579617] } } ] } },
    
];

    // Override the map div id if specified, apply default CSS
    var defaultMapElId = &quot;leaflet-map-934ae60514ca01961e11323f45ffc289&quot;;
   var defaultMapElStyle = &quot;height:300px; margin-top:15px; margin-bottom:15px&quot;;
    var mapEl = document.getElementById(defaultMapElId);
    if('divId' in tagInputArg){
        mapEl.id = tagInputArg['divId'];
    }
    var defaultMapCssEl = document.createElement(&quot;style&quot;);
    defaultMapCssEl.innerHTML = 
        &quot;#&quot; + defaultMapElId + &quot;{&quot; + defaultMapElStyle + &quot;}&quot;;
    document.head.appendChild(defaultMapCssEl);

    var newWindowImgSrcBase64 = &quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH4wUVFzAHq2j99AAAAV9JREFUSMdjYKAxYCRHk5ubG9+1a9fm/v//H6cadnb2G/fu3atlIceC379/c3z9+jUEn5q/f/8eYWBgYECxQE5OroqA2Y8ePXq0hJWV9Qc3N/caZB8wMjJKff361QpvEAkKCv4nYMGh9+/f26MLamhoyLx9+3b/nz9/VJCC6MiLFy9sWXCE3xlGRsZvWKQu4DOciYnpCzc396HPnz97weRxWRD/8OHDa4TiAt1wfn5+z79//zoxMDDALWAiN/lhM/zevXtH0NUx0dJwsiwgxXCccUCJ4dzc3DP+//+/gZ2d/duLFy9Is+Djx4+rCbn82rVrrxgYGF6RFUR8fHyZbGxsD7AZLiEhUSAiIrJSUlIyjOw4uHnz5gVHR0d1bC7/8+eP5d+/f8P+/PmjS1Ekr1ix4hcp6ploXVwPfQuwJlMmJiYBLS0tIVIMev36NRvRFnz48OHohw8fhkYQjQKCAAChiL6Pj/LM2QAAAABJRU5ErkJggg==&quot;;

// Actual mapping section; Specify a function to be called later that 
// assembles the correct JS components based on what the user specified in the 
// tag input arg, the block section of features, etc. Actually creates the map
// that is visible on the page

    function _getCenter(){
        var defaultCenter = [0,0];
        if(&quot;center&quot; in tagInputArg){
            return tagInputArg.center;
        } else {
            return defaultCenter;
        }
    }

    function _getZoom(){
        var defaultZoom = 1;
        if(&quot;zoom&quot; in tagInputArg){
            return tagInputArg.zoom
        } else {
            return defaultZoom;
        }
    }

    function _getProviderBasemap(){
        var defaultProviderBasemap = &quot;OpenStreetMap.Mapnik&quot;;
        if(&quot;providerBasemap&quot; in tagInputArg){
            return tagInputArg.providerBasemap;
        } else {
            return defaultProviderBasemap;
        }
    }


    function _addMarkerToMap(leafletItem, map){
        var m = leafletItem.value;
        var result = L.marker([m.latitude, m.longitude]).addTo(map);
        var potentialPopup = &quot;&quot;;
        if('popupContent' in m){
                potentialPopup += m.popupContent;}
        if('href' in m){
            potentialPopup += '&lt;a href=&quot;' + m.href + '&quot;&gt;' + 
                '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            result.bindPopup(potentialPopup);}
        if(!('center' in tagInputArg)){
            // If the user didn't specify a center, infer from marker
            map.panTo(new L.LatLng(m.latitude, m.longitude));
        }
    }

    function _onEachFeature(feature, layer){
        var potentialPopup = &quot;&quot;
        if(feature.properties &amp;&amp; feature.properties.popupContent){
            potentialPopup += feature.properties.popupContent;
        }
        if(feature.properties &amp;&amp; feature.properties.href){
            potentialPopup += 
                '&lt;a href=&quot;' + feature.properties.href + '&quot;&gt;' + 
                    '&lt;img src=&quot;' + newWindowImgSrcBase64 + '&quot;&gt;&lt;/img&gt;&lt;/a&gt;';}
        if(potentialPopup){
            layer.bindPopup(potentialPopup);
        }
    }

    function _addGeoJSONToMap(leafletItem, map){
        if(typeof leafletItem.value === &quot;string&quot;){
            fetch(leafletItem.value).then((resp) =&gt; {
                return resp.json();
            }).then((data) =&gt; {
                leafletItem.value = data;
                _addGeoJSONObjToMap(leafletItem, map);
            }).catch((err) =&gt; {
                console.log(&quot;Encountered err w/ geojson, attempting to fix..&quot;);
                console.log(err);
                _addGeoJSONObjToMap(leafletItem, map);
            });
        } else {
            _addGeoJSONObjToMap(leafletItem, map);
        }
     }

    function _addGeoJSONObjToMap(leafletItem, map){
         var geojson = L.geoJSON(leafletItem.value, { 
            onEachFeature: _onEachFeature 
        });
        layers = geojson.getLayers();
        for(var i=0; i&lt;layers.length; i++){
            try{
                var geom = layers[i].feature.geometry;
                if(!('center' in tagInputArg)){
                    // If the user didn't specify a center, infer from geojson
                    //console.log(&quot;panning to &quot; + geom.coordinates);
                    map.panTo(new L.LatLng(geom.coordinates[1],
                                           geom.coordinates[0]));
                }
            } catch(e){}
        }
       
        geojson.addTo(map);
       
    }

    function _processLeafletItem(leafletItem, map){
        switch(leafletItem.type){
            case &quot;LeafletMarker&quot;:
                _addMarkerToMap(leafletItem, map);
                break;
            case &quot;LeafletGeoJSON&quot;:
                _addGeoJSONToMap(leafletItem, map);
                break;
            case undefined:
                break; 
            default:
                console.log(&quot;Couldn't add item &quot; + leafletItem.id);
                break;
        }
    }

//The actual section that is called that creates a map
    function createMap(){
        console.log(&quot;Creating map 934ae60514ca01961e11323f45ffc289 with these args:&quot;);
        console.log(tagInputArg);

        //Initialize Map with the correct input arguments
        var map = L.map(mapEl.id, 
            {worldCopyJump: true}).setView(_getCenter(), _getZoom());
        L.tileLayer.provider(_getProviderBasemap()).addTo(map);
        if(&quot;esriBasemap&quot; in tagInputArg){
            L.esri.basemapLayer(tagInputArg.esriBasemap).addTo(map);
        }

        //process each Leaflet Item passed in between the block tag middle
        for(var i=0; i&lt;blockLeafletItems.length; i++){
            var leafletItem = blockLeafletItems[i];
            console.log(&quot;Adding leaflet item &quot; + leafletItem.id + &quot;:&quot;);
            console.log(leafletItem);
            _processLeafletItem(leafletItem, map);
        }
    }

// Load the correct JS libraries/CSS by adding to head: 
// When ready, call createMap() to create the map on the page

    function _createMap(){
        // helper function to draw the map only when everything is loaded,
        // safeguards against multiple calls to window.onload
        var prevOnLoad;
        if(window.onload){
            prevOnLoad = window.onload;
        }
        window.onload = () =&gt; {
            createMap();
            if(prevOnLoad){
                prevOnLoad();
            }
        }
    }

    var leafletCssId = &quot;leaflet-css-head&quot;;
    var leafletJsId = &quot;leaflet-js-head&quot;;
    var esriLeafletJsId = &quot;esri-leaflet-js-head&quot;;
    var leafletProvidersJsId = &quot;leaflet-providers-js-head&quot;;

    // Add the leaflet CSS first, don't worry about when it loads
    var leafletCssEl = document.createElement(&quot;link&quot;);
    leafletCssEl.id = leafletCssId;
    leafletCssEl.rel = &quot;stylesheet&quot;;
    leafletCssEl.href = leafletCdn + &quot;leaflet.css&quot;;
    if(!document.getElementById(leafletCssEl.id)){
        document.head.appendChild(leafletCssEl);
    }

    function addToHeadIfNotLoaded(el) {
        //Add the el to the head if it doesn't exist already. If it does,
        //everything we need is already loaded, so draw the map
        if(!document.getElementById(el.id)){
            document.head.appendChild(el);
        } else {
            _createMap();
        }
    }

    // Load the main leaflet.js code, wait for it to load
    var leafletJsEl = document.createElement(&quot;script&quot;);
    leafletJsEl.id = leafletJsId;
    leafletJsEl.onload = () =&gt; {
        //After loaded, load the esri-leaflet.js code, wait for it to load
        var esriEl = document.createElement(&quot;script&quot;);
        esriEl.id = esriLeafletJsId;
        esriEl.onload = () =&gt; {
            //After loaded, add the inline leaflet-providers &lt;script&gt;
            provEl = document.createElement(&quot;script&quot;);
            provEl.id = leafletProvidersJsId;
            provEl.innerHTML = `//Taken from https://github.com/leaflet-extras/leaflet-providers
(function (root, factory) {
	if (typeof define === 'function' &amp;&amp; define.amd) {
		// AMD. Register as an anonymous module.
		define(['leaflet'], factory);
	} else if (typeof modules === 'object' &amp;&amp; module.exports) {
		// define a Common JS module that relies on 'leaflet'
		module.exports = factory(require('leaflet'));
	} else {
		// Assume Leaflet is loaded into global object L already
		factory(L);
	}
}(this, function (L) {
	'use strict';

	L.TileLayer.Provider = L.TileLayer.extend({
		initialize: function (arg, options) {
			var providers = L.TileLayer.Provider.providers;

			var parts = arg.split('.');

			var providerName = parts[0];
			var variantName = parts[1];

			if (!providers[providerName]) {
				throw 'No such provider (' + providerName + ')';
			}

			var provider = {
				url: providers[providerName].url,
				options: providers[providerName].options
			};

			// overwrite values in provider from variant.
			if (variantName &amp;&amp; 'variants' in providers[providerName]) {
				if (!(variantName in providers[providerName].variants)) {
					throw 'No such variant of ' + providerName + ' (' + variantName + ')';
				}
				var variant = providers[providerName].variants[variantName];
				var variantOptions;
				if (typeof variant === 'string') {
					variantOptions = {
						variant: variant
					};
				} else {
					variantOptions = variant.options;
				}
				provider = {
					url: variant.url || provider.url,
					options: L.Util.extend({}, provider.options, variantOptions)
				};
			}

			// replace attribution placeholders with their values from toplevel provider attribution,
			// recursively
			var attributionReplacer = function (attr) {
				if (attr.indexOf('{attribution.') === -1) {
					return attr;
				}
				return attr.replace(/\{attribution.(\w*)\}/g,
					function (match, attributionName) {
						return attributionReplacer(providers[attributionName].options.attribution);
					}
				);
			};
			provider.options.attribution = attributionReplacer(provider.options.attribution);

			// Compute final options combining provider options with any user overrides
			var layerOpts = L.Util.extend({}, provider.options, options);
			L.TileLayer.prototype.initialize.call(this, provider.url, layerOpts);
		}
	});

	/**
	 * Definition of providers.
	 * see http://leafletjs.com/reference.html#tilelayer for options in the options map.
	 */

	L.TileLayer.Provider.providers = {
		OpenStreetMap: {
			url: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution:
					'&amp;copy; &lt;a href=&quot;https://www.openstreetmap.org/copyright&quot;&gt;OpenStreetMap&lt;/a&gt; contributors'
			},
			variants: {
				Mapnik: {},
				DE: {
					url: 'https://{s}.tile.openstreetmap.de/tiles/osmde/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18
					}
				},
				CH: {
					url: 'https://tile.osm.ch/switzerland/{z}/{x}/{y}.png',
					options: {
						maxZoom: 18,
						bounds: [[45, 5], [48, 11]]
					}
				},
				France: {
					url: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png',
					options: {
						maxZoom: 20,
						attribution: '&amp;copy; Openstreetmap France | {attribution.OpenStreetMap}'
					}
				},
				HOT: {
					url: 'https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',
					options: {
						attribution:
							'{attribution.OpenStreetMap}, ' +
							'Tiles style by &lt;a href=&quot;https://www.hotosm.org/&quot; target=&quot;_blank&quot;&gt;Humanitarian OpenStreetMap Team&lt;/a&gt; ' +
							'hosted by &lt;a href=&quot;https://openstreetmap.fr/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap France&lt;/a&gt;'
					}
				},
				BZH: {
					url: 'https://tile.openstreetmap.bzh/br/{z}/{x}/{y}.png',
					options: {
						attribution: '{attribution.OpenStreetMap}, Tiles courtesy of &lt;a href=&quot;http://www.openstreetmap.bzh/&quot; target=&quot;_blank&quot;&gt;Breton OpenStreetMap Team&lt;/a&gt;',
						bounds: [[46.2, -5.5], [50, 0.7]]
					}
				}
			}
		},
		OpenSeaMap: {
			url: 'https://tiles.openseamap.org/seamark/{z}/{x}/{y}.png',
			options: {
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openseamap.org&quot;&gt;OpenSeaMap&lt;/a&gt; contributors'
			}
		},
		OpenPtMap: {
			url: 'http://openptmap.org/tiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: &amp;copy; &lt;a href=&quot;http://www.openptmap.org&quot;&gt;OpenPtMap&lt;/a&gt; contributors'
			}
		},
		OpenTopoMap: {
			url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 17,
				attribution: 'Map data: {attribution.OpenStreetMap}, &lt;a href=&quot;http://viewfinderpanoramas.org&quot;&gt;SRTM&lt;/a&gt; | Map style: &amp;copy; &lt;a href=&quot;https://opentopomap.org&quot;&gt;OpenTopoMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenRailwayMap: {
			url: 'https://{s}.tiles.openrailwaymap.org/standard/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://www.OpenRailwayMap.org&quot;&gt;OpenRailwayMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		OpenFireMap: {
			url: 'http://openfiremap.org/hytiles/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;http://www.openfiremap.org&quot;&gt;OpenFireMap&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		SafeCast: {
			url: 'https://s3.amazonaws.com/te512.safecast.org/{z}/{x}/{y}.png',
			options: {
				maxZoom: 16,
				attribution: 'Map data: {attribution.OpenStreetMap} | Map style: &amp;copy; &lt;a href=&quot;https://blog.safecast.org/about/&quot;&gt;SafeCast&lt;/a&gt; (&lt;a href=&quot;https://creativecommons.org/licenses/by-sa/3.0/&quot;&gt;CC-BY-SA&lt;/a&gt;)'
			}
		},
		Thunderforest: {
			url: 'https://{s}.tile.thunderforest.com/{variant}/{z}/{x}/{y}.png?apikey={apikey}',
			options: {
				attribution:
					'&amp;copy; &lt;a href=&quot;http://www.thunderforest.com/&quot;&gt;Thunderforest&lt;/a&gt;, {attribution.OpenStreetMap}',
				variant: 'cycle',
				apikey: '&lt;insert your api key here&gt;',
				maxZoom: 22
			},
			variants: {
				OpenCycleMap: 'cycle',
				Transport: {
					options: {
						variant: 'transport'
					}
				},
				TransportDark: {
					options: {
						variant: 'transport-dark'
					}
				},
				SpinalMap: {
					options: {
						variant: 'spinal-map'
					}
				},
				Landscape: 'landscape',
				Outdoors: 'outdoors',
				Pioneer: 'pioneer'
			}
		},
		OpenMapSurfer: {
			url: 'https://maps.heigit.org/openmapsurfer/tiles/{variant}/webmercator/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				variant: 'roads',
				attribution: 'Imagery from &lt;a href=&quot;http://giscience.uni-hd.de/&quot;&gt;GIScience Research Group @ University of Heidelberg&lt;/a&gt; | Map data '
			},
			variants: {
				Roads: {
					options: {
						variant: 'roads',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				Hybrid: {
					options: {
						variant: 'hybrid',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				AdminBounds: {
					options: {
						variant: 'adminb',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				},
				ContourLines: {
					options: {
						variant: 'asterc',
						maxZoom: 18,
						minZoom: 13,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;'
					}
				},
				Hillshade: {
					options: {
						variant: 'asterh',
						maxZoom: 18,
						attribution: '{attribution.OpenMapSurfer} &lt;a href=&quot;https://lpdaac.usgs.gov/products/aster_policies&quot;&gt;ASTER GDEM&lt;/a&gt;, &lt;a href=&quot;http://srtm.csi.cgiar.org/&quot;&gt;SRTM&lt;/a&gt;'
					}
				},
				ElementsAtRisk: {
					options: {
						variant: 'elements_at_risk',
						attribution: '{attribution.OpenMapSurfer}{attribution.OpenStreetMap}'
					}
				}
			}
		},
		Hydda: {
			url: 'https://{s}.tile.openstreetmap.se/hydda/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 18,
				variant: 'full',
				attribution: 'Tiles courtesy of &lt;a href=&quot;http://openstreetmap.se/&quot; target=&quot;_blank&quot;&gt;OpenStreetMap Sweden&lt;/a&gt; &amp;mdash; Map data {attribution.OpenStreetMap}'
			},
			variants: {
				Full: 'full',
				Base: 'base',
				RoadsAndLabels: 'roads_and_labels'
			}
		},
		MapBox: {
			url: 'https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}{r}.png?access_token={accessToken}',
			options: {
				attribution:
					'&lt;a href=&quot;https://www.mapbox.com/about/maps/&quot; target=&quot;_blank&quot;&gt;&amp;copy; Mapbox&lt;/a&gt; ' +
					'{attribution.OpenStreetMap} ' +
					'&lt;a href=&quot;https://www.mapbox.com/map-feedback/&quot; target=&quot;_blank&quot;&gt;Improve this map&lt;/a&gt;',
				subdomains: 'abcd',
				id: 'mapbox.streets',
				accessToken: '&lt;insert your access token here&gt;',
			}
		},
		Stamen: {
			url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}{r}.{ext}',
			options: {
				attribution:
					'Map tiles by &lt;a href=&quot;http://stamen.com&quot;&gt;Stamen Design&lt;/a&gt;, ' +
					'&lt;a href=&quot;http://creativecommons.org/licenses/by/3.0&quot;&gt;CC BY 3.0&lt;/a&gt; &amp;mdash; ' +
					'Map data {attribution.OpenStreetMap}',
				subdomains: 'abcd',
				minZoom: 0,
				maxZoom: 20,
				variant: 'toner',
				ext: 'png'
			},
			variants: {
				Toner: 'toner',
				TonerBackground: 'toner-background',
				TonerHybrid: 'toner-hybrid',
				TonerLines: 'toner-lines',
				TonerLabels: 'toner-labels',
				TonerLite: 'toner-lite',
				Watercolor: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'watercolor',
						ext: 'jpg',
						minZoom: 1,
						maxZoom: 16
					}
				},
				Terrain: {
					options: {
						variant: 'terrain',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TerrainBackground: {
					options: {
						variant: 'terrain-background',
						minZoom: 0,
						maxZoom: 18
					}
				},
				TopOSMRelief: {
					url: 'https://stamen-tiles-{s}.a.ssl.fastly.net/{variant}/{z}/{x}/{y}.{ext}',
					options: {
						variant: 'toposm-color-relief',
						ext: 'jpg',
						bounds: [[22, -132], [51, -56]]
					}
				},
				TopOSMFeatures: {
					options: {
						variant: 'toposm-features',
						bounds: [[22, -132], [51, -56]],
						opacity: 0.9
					}
				}
			}
		},
		Esri: {
			url: 'https://server.arcgisonline.com/ArcGIS/rest/services/{variant}/MapServer/tile/{z}/{y}/{x}',
			options: {
				variant: 'World_Street_Map',
				attribution: 'Tiles &amp;copy; Esri'
			},
			variants: {
				WorldStreetMap: {
					options: {
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, DeLorme, NAVTEQ, USGS, Intermap, iPC, NRCAN, Esri Japan, METI, Esri China (Hong Kong), Esri (Thailand), TomTom, 2012'
					}
				},
				DeLorme: {
					options: {
						variant: 'Specialty/DeLorme_World_Base_Map',
						minZoom: 1,
						maxZoom: 11,
						attribution: '{attribution.Esri} &amp;mdash; Copyright: &amp;copy;2012 DeLorme'
					}
				},
				WorldTopoMap: {
					options: {
						variant: 'World_Topo_Map',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community'
					}
				},
				WorldImagery: {
					options: {
						variant: 'World_Imagery',
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
					}
				},
				WorldTerrain: {
					options: {
						variant: 'World_Terrain_Base',
						maxZoom: 13,
						attribution:
							'{attribution.Esri} &amp;mdash; ' +
							'Source: USGS, Esri, TANA, DeLorme, and NPS'
					}
				},
				WorldShadedRelief: {
					options: {
						variant: 'World_Shaded_Relief',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Source: Esri'
					}
				},
				WorldPhysical: {
					options: {
						variant: 'World_Physical_Map',
						maxZoom: 8,
						attribution: '{attribution.Esri} &amp;mdash; Source: US National Park Service'
					}
				},
				OceanBasemap: {
					options: {
						variant: 'Ocean_Basemap',
						maxZoom: 13,
						attribution: '{attribution.Esri} &amp;mdash; Sources: GEBCO, NOAA, CHS, OSU, UNH, CSUMB, National Geographic, DeLorme, NAVTEQ, and Esri'
					}
				},
				NatGeoWorldMap: {
					options: {
						variant: 'NatGeo_World_Map',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; National Geographic, Esri, DeLorme, NAVTEQ, UNEP-WCMC, USGS, NASA, ESA, METI, NRCAN, GEBCO, NOAA, iPC'
					}
				},
				WorldGrayCanvas: {
					options: {
						variant: 'Canvas/World_Light_Gray_Base',
						maxZoom: 16,
						attribution: '{attribution.Esri} &amp;mdash; Esri, DeLorme, NAVTEQ'
					}
				}
			}
		},
		OpenWeatherMap: {
			url: 'http://{s}.tile.openweathermap.org/map/{variant}/{z}/{x}/{y}.png?appid={apiKey}',
			options: {
				maxZoom: 19,
				attribution: 'Map data &amp;copy; &lt;a href=&quot;http://openweathermap.org&quot;&gt;OpenWeatherMap&lt;/a&gt;',
				apiKey:'&lt;insert your api key here&gt;',
				opacity: 0.5
			},
			variants: {
				Clouds: 'clouds',
				CloudsClassic: 'clouds_cls',
				Precipitation: 'precipitation',
				PrecipitationClassic: 'precipitation_cls',
				Rain: 'rain',
				RainClassic: 'rain_cls',
				Pressure: 'pressure',
				PressureContour: 'pressure_cntr',
				Wind: 'wind',
				Temperature: 'temp',
				Snow: 'snow'
			}
		},
		HERE: {
			/*
			 * HERE maps, formerly Nokia maps.
			 * These basemaps are free, but you need an API key. Please sign up at
			 * https://developer.here.com/plans
			 */
			url:
				'https://{s}.{base}.maps.api.here.com/maptile/2.1/' +
				'{type}/{mapID}/{variant}/{z}/{x}/{y}/{size}/{format}?' +
				'app_id={app_id}&amp;app_code={app_code}&amp;lg={language}',
			options: {
				attribution:
					'Map &amp;copy; 1987-' + new Date().getFullYear() + ' &lt;a href=&quot;http://developer.here.com&quot;&gt;HERE&lt;/a&gt;',
				subdomains: '1234',
				mapID: 'newest',
				'app_id': '&lt;insert your app_id here&gt;',
				'app_code': '&lt;insert your app_code here&gt;',
				base: 'base',
				variant: 'normal.day',
				maxZoom: 20,
				type: 'maptile',
				language: 'eng',
				format: 'png8',
				size: '256'
			},
			variants: {
				normalDay: 'normal.day',
				normalDayCustom: 'normal.day.custom',
				normalDayGrey: 'normal.day.grey',
				normalDayMobile: 'normal.day.mobile',
				normalDayGreyMobile: 'normal.day.grey.mobile',
				normalDayTransit: 'normal.day.transit',
				normalDayTransitMobile: 'normal.day.transit.mobile',
				normalNight: 'normal.night',
				normalNightMobile: 'normal.night.mobile',
				normalNightGrey: 'normal.night.grey',
				normalNightGreyMobile: 'normal.night.grey.mobile',
				normalNightTransit: 'normal.night.transit',
				normalNightTransitMobile: 'normal.night.transit.mobile',
				reducedDay: 'reduced.day',
				reducedNight: 'reduced.night',
				basicMap: {
					options: {
						type: 'basetile'
					}
				},
				mapLabels: {
					options: {
						type: 'labeltile',
						format: 'png'
					}
				},
				trafficFlow: {
					options: {
						base: 'traffic',
						type: 'flowtile'
					}
				},
				carnavDayGrey: 'carnav.day.grey',
				hybridDay: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day'
					}
				},
				hybridDayMobile: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.mobile'
					}
				},
				hybridDayTransit: {
					options: {
						base: 'aerial',
						variant: 'hybrid.day.transit'
					}
				},
				hybridDayGrey: {
					options: {
						base: 'aerial',
						variant: 'hybrid.grey.day'
					}
				},
				pedestrianDay: 'pedestrian.day',
				pedestrianNight: 'pedestrian.night',
				satelliteDay: {
					options: {
						base: 'aerial',
						variant: 'satellite.day'
					}
				},
				terrainDay: {
					options: {
						base: 'aerial',
						variant: 'terrain.day'
					}
				},
				terrainDayMobile: {
					options: {
						base: 'aerial',
						variant: 'terrain.day.mobile'
					}
				}
			}
		},
		FreeMapSK: {
			url: 'http://t{s}.freemap.sk/T/{z}/{x}/{y}.jpeg',
			options: {
				minZoom: 8,
				maxZoom: 16,
				subdomains: '1234',
				bounds: [[47.204642, 15.996093], [49.830896, 22.576904]],
				attribution:
					'{attribution.OpenStreetMap}, vizualization CC-By-SA 2.0 &lt;a href=&quot;http://freemap.sk&quot;&gt;Freemap.sk&lt;/a&gt;'
			}
		},
		MtbMap: {
			url: 'http://tile.mtbmap.cz/mtbmap_tiles/{z}/{x}/{y}.png',
			options: {
				attribution:
					'{attribution.OpenStreetMap} &amp;amp; USGS'
			}
		},
		CartoDB: {
			url: 'https://{s}.basemaps.cartocdn.com/{variant}/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '{attribution.OpenStreetMap} &amp;copy; &lt;a href=&quot;https://carto.com/attributions&quot;&gt;CARTO&lt;/a&gt;',
				subdomains: 'abcd',
				maxZoom: 19,
				variant: 'light_all'
			},
			variants: {
				Positron: 'light_all',
				PositronNoLabels: 'light_nolabels',
				PositronOnlyLabels: 'light_only_labels',
				DarkMatter: 'dark_all',
				DarkMatterNoLabels: 'dark_nolabels',
				DarkMatterOnlyLabels: 'dark_only_labels',
				Voyager: 'rastertiles/voyager',
				VoyagerNoLabels: 'rastertiles/voyager_nolabels',
				VoyagerOnlyLabels: 'rastertiles/voyager_only_labels',
				VoyagerLabelsUnder: 'rastertiles/voyager_labels_under'
			}
		},
		HikeBike: {
			url: 'https://tiles.wmflabs.org/{variant}/{z}/{x}/{y}.png',
			options: {
				maxZoom: 19,
				attribution: '{attribution.OpenStreetMap}',
				variant: 'hikebike'
			},
			variants: {
				HikeBike: {},
				HillShading: {
					options: {
						maxZoom: 15,
						variant: 'hillshading'
					}
				}
			}
		},
		BasemapAT: {
			url: 'https://maps{s}.wien.gv.at/basemap/{variant}/normal/google3857/{z}/{y}/{x}.{format}',
			options: {
				maxZoom: 19,
				attribution: 'Datenquelle: &lt;a href=&quot;https://www.basemap.at&quot;&gt;basemap.at&lt;/a&gt;',
				subdomains: ['', '1', '2', '3', '4'],
				format: 'png',
				bounds: [[46.358770, 8.782379], [49.037872, 17.189532]],
				variant: 'geolandbasemap'
			},
			variants: {
				basemap: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'geolandbasemap'
					}
				},
				grau: 'bmapgrau',
				overlay: 'bmapoverlay',
				highdpi: {
					options: {
						variant: 'bmaphidpi',
						format: 'jpeg'
					}
				},
				orthofoto: {
					options: {
						maxZoom: 20, // currently only in Vienna
						variant: 'bmaporthofoto30cm',
						format: 'jpeg'
					}
				}
			}
		},
		nlmaps: {
			url: 'https://geodata.nationaalgeoregister.nl/tiles/service/wmts/{variant}/EPSG:3857/{z}/{x}/{y}.png',
			options: {
				minZoom: 6,
				maxZoom: 19,
				bounds: [[50.5, 3.25], [54, 7.6]],
				attribution: 'Kaartgegevens &amp;copy; &lt;a href=&quot;kadaster.nl&quot;&gt;Kadaster&lt;/a&gt;'
			},
			variants: {
				'standaard': 'brtachtergrondkaart',
				'pastel': 'brtachtergrondkaartpastel',
				'grijs': 'brtachtergrondkaartgrijs',
				'luchtfoto': {
					'url': 'https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts/1.0.0/2016_ortho25/EPSG:3857/{z}/{x}/{y}.png',
				}
			}
		},
		NASAGIBS: {
			url: 'https://map1.vis.earthdata.nasa.gov/wmts-webmerc/{variant}/default/{time}/{tilematrixset}{maxZoom}/{z}/{y}/{x}.{format}',
			options: {
				attribution:
					'Imagery provided by services from the Global Imagery Browse Services (GIBS), operated by the NASA/GSFC/Earth Science Data and Information System ' +
					'(&lt;a href=&quot;https://earthdata.nasa.gov&quot;&gt;ESDIS&lt;/a&gt;) with funding provided by NASA/HQ.',
				bounds: [[-85.0511287776, -179.999999975], [85.0511287776, 179.999999975]],
				minZoom: 1,
				maxZoom: 9,
				format: 'jpg',
				time: '',
				tilematrixset: 'GoogleMapsCompatible_Level'
			},
			variants: {
				ModisTerraTrueColorCR: 'MODIS_Terra_CorrectedReflectance_TrueColor',
				ModisTerraBands367CR: 'MODIS_Terra_CorrectedReflectance_Bands367',
				ViirsEarthAtNight2012: {
					options: {
						variant: 'VIIRS_CityLights_2012',
						maxZoom: 8
					}
				},
				ModisTerraLSTDay: {
					options: {
						variant: 'MODIS_Terra_Land_Surface_Temp_Day',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				},
				ModisTerraSnowCover: {
					options: {
						variant: 'MODIS_Terra_Snow_Cover',
						format: 'png',
						maxZoom: 8,
						opacity: 0.75
					}
				},
				ModisTerraAOD: {
					options: {
						variant: 'MODIS_Terra_Aerosol',
						format: 'png',
						maxZoom: 6,
						opacity: 0.75
					}
				},
				ModisTerraChlorophyll: {
					options: {
						variant: 'MODIS_Terra_Chlorophyll_A',
						format: 'png',
						maxZoom: 7,
						opacity: 0.75
					}
				}
			}
		},
		NLS: {
			// NLS maps are copyright National library of Scotland.
			// http://maps.nls.uk/projects/api/index.html
			// Please contact NLS for anything other than non-commercial low volume usage
			//
			// Map sources: Ordnance Survey 1:1m to 1:63K, 1920s-1940s
			//   z0-9  - 1:1m
			//  z10-11 - quarter inch (1:253440)
			//  z12-18 - one inch (1:63360)
			url: 'https://nls-{s}.tileserver.com/nls/{z}/{x}/{y}.jpg',
			options: {
				attribution: '&lt;a href=&quot;http://geo.nls.uk/maps/&quot;&gt;National Library of Scotland Historic Maps&lt;/a&gt;',
				bounds: [[49.6, -12], [61.7, 3]],
				minZoom: 1,
				maxZoom: 18,
				subdomains: '0123',
			}
		},
		JusticeMap: {
			// Justice Map (http://www.justicemap.org/)
			// Visualize race and income data for your community, county and country.
			// Includes tools for data journalists, bloggers and community activists.
			url: 'http://www.justicemap.org/tile/{size}/{variant}/{z}/{x}/{y}.png',
			options: {
				attribution: '&lt;a href=&quot;http://www.justicemap.org/terms.php&quot;&gt;Justice Map&lt;/a&gt;',
				// one of 'county', 'tract', 'block'
				size: 'county',
				// Bounds for USA, including Alaska and Hawaii
				bounds: [[14, -180], [72, -56]]
			},
			variants: {
				income: 'income',
				americanIndian: 'indian',
				asian: 'asian',
				black: 'black',
				hispanic: 'hispanic',
				multi: 'multi',
				nonWhite: 'nonwhite',
				white: 'white',
				plurality: 'plural'
			}
		},
		Wikimedia: {
			url: 'https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}{r}.png',
			options: {
				attribution: '&lt;a href=&quot;https://wikimediafoundation.org/wiki/Maps_Terms_of_Use&quot;&gt;Wikimedia&lt;/a&gt;',
				minZoom: 1,
				maxZoom: 19
			}
		},
		GeoportailFrance: {
			url: 'https://wxs.ign.fr/{apikey}/geoportail/wmts?REQUEST=GetTile&amp;SERVICE=WMTS&amp;VERSION=1.0.0&amp;STYLE={style}&amp;TILEMATRIXSET=PM&amp;FORMAT={format}&amp;LAYER={variant}&amp;TILEMATRIX={z}&amp;TILEROW={y}&amp;TILECOL={x}',
			options: {
				attribution: '&lt;a target=&quot;_blank&quot; href=&quot;https://www.geoportail.gouv.fr/&quot;&gt;Geoportail France&lt;/a&gt;',
				bounds: [[-75, -180], [81, 180]],
				minZoom: 2,
				maxZoom: 18,
				// Get your own geoportail apikey here : http://professionnels.ign.fr/ign/contrats/
				// NB : 'choisirgeoportail' is a demonstration key that comes with no guarantee
				apikey: 'choisirgeoportail',
				format: 'image/jpeg',
				style : 'normal',
				variant: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD'
			},
			variants: {
				parcels: {
					options : {
						variant: 'CADASTRALPARCELS.PARCELS',
						maxZoom: 20,
						style : 'bdparcellaire',
						format: 'image/png'
					}
				},
				ignMaps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS',
				maps: 'GEOGRAPHICALGRIDSYSTEMS.MAPS.SCAN-EXPRESS.STANDARD',
				orthos: {
					options: {
						maxZoom: 19,
						variant: 'ORTHOIMAGERY.ORTHOPHOTOS'
					}
				}
			}
		},
		OneMapSG: {
			url: 'https://maps-{s}.onemap.sg/v3/{variant}/{z}/{x}/{y}.png',
			options: {
				variant: 'Default',
				minZoom: 11,
				maxZoom: 18,
				bounds: [[1.56073, 104.11475], [1.16, 103.502]],
				attribution: '&lt;img src=&quot;https://docs.onemap.sg/maps/images/oneMap64-01.png&quot; style=&quot;height:20px;width:20px;&quot;/&gt; New OneMap | Map data &amp;copy; contributors, &lt;a href=&quot;http://SLA.gov.sg&quot;&gt;Singapore Land Authority&lt;/a&gt;'
			},
			variants: {
				Default: 'Default',
				Night: 'Night',
				Original: 'Original',
				Grey: 'Grey',
				LandLot: 'LandLot'
			}
		}
	};

	L.tileLayer.provider = function (provider, options) {
		return new L.TileLayer.Provider(provider, options);
	};

	return L;
}));
`;
            if(!document.getElementById(provEl.id)){
                 document.head.appendChild(provEl);        
            }
            _createMap();
            }
        esriEl.src = esriLeafletCdn + &quot;esri-leaflet.js&quot;;
        addToHeadIfNotLoaded(esriEl);
        };
    leafletJsEl.src = leafletCdn + &quot;leaflet.js&quot;;
    addToHeadIfNotLoaded(leafletJsEl);
})();
&lt;/script&gt;

&lt;p&gt;We spent 3 days in Seoul, South Korea. We ate delicious food, visited the markets and tourist sites, and even went to the DMZ (border between South Korea and North Korea). It was a great end to our trip. Special to thanks to Kyong for again meeting up with us and again showing us around (MVP for amazing hospitality in TWO countries), to my great friend Luke for making the trek to hang out, and to our new friend Ryan.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/japan-2019/group-photo-6.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/japan-2019/group-photo-6.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;dmz&quot;&gt;DMZ&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://en.m.wikipedia.org/wiki/2019_Koreas%E2%80%93United_States_DMZ_Summit&quot;&gt;President Trump visited the DMZ on June 30th&lt;/a&gt;, a few days before we had our reservation to visit the DMZ and the JSA. Since the whole area is under military jurisdiction, our original plan was cancelled because of (unconfirmed reports of) meetings between the Trump admin and NK officials taking place in the JSA.&lt;/p&gt;

&lt;p&gt;We still got to visit the touristy sites they allow you to go to, including Dorasan Station, a lookout tower, and the 3rd tunnel. The Dorasan Station is a now inactivate train station that used to run to small towns just north of the border. It is mostly symbolic as of 2019, with hopes of an eventual Pyongyang/China connection in the future. Very cool to see reunification symbols in person and learn more about the history.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/japan-2019/dmz-1.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/japan-2019/dmz-1.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/japan-2019/dmz-2.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/japan-2019/dmz-2.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;seoul&quot;&gt;Seoul&lt;/h2&gt;

&lt;p&gt;I was excited to visit the 광장시장 (Gwangjang Market) to try the street food I saw on the Netflix show “Street Food”. The 빈대떡 (Mung Bean Panackes) tasted like delicious Korean fried hash browns with cabbage, there was awesome spicy 떡볶이 (Tteok-bokki) in many dishes, and the 칼국수 (Kalguksu) reminded me of Japanese Soba with different broth and flavorings. Other foods eaten include dumplings, Mayak Kimbap, and ofcourse all of the different 김치 (Kimchi). All of the street food and restaurant food was delicious and incredibly different from the Japanese food we’d been eating on the trip. Definitely a highlight to try authentic Korean cuisine.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/japan-2019/street-food-6.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/japan-2019/street-food-6.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/japan-2019/street-food-7.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/japan-2019/street-food-7.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Other locations visited in Seoul: the Gyongbokgung Palace, some bars in Gangnam, Bukkhasan National Park. Very interesting to observe the cultural differences of Korea, even if we were only there for a short time.&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/japan-2019/temple-9.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/japan-2019/temple-9.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/japan-2019/temple-10.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/japan-2019/temple-10.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;end-of-our-trip&quot;&gt;End of Our Trip&lt;/h2&gt;

&lt;p&gt;I am exhausted but had an amazing time making memories on this trip with my family. The culture shock was a lot in the beginning, but near the end I’m very proud of how much we’ve learned and how much we’ve experienced on this trip. I love you all, thanks for making this a trip we’ll talk about for years to come. :).&lt;/p&gt;

&lt;figure&gt;
    &lt;a href=&quot;/assets/personal/japan-2019/group-photo-7.jpg&quot;&gt;&lt;img class=&quot;travel-image&quot; src=&quot;/assets/personal/japan-2019/group-photo-7.jpg&quot; /&gt;&lt;/a&gt;
    &lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Here’s to the next trip!&lt;/p&gt;</content><author><name>David Vitale</name></author><category term="travel" /><category term="japan-2019" /></entry></feed>