Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

<!DOCTYPE HTML>
<!-- Pannellum 2.5.6, https://github.com/mpetroff/pannellum -->
<html>
    <head>
        <meta charset=utf-8>
        <meta name=viewport content="width=device-width, initial-scale=1.0">
        <title>Pannellum</title>
        <style type="text/css">
            .pnlm-container {
                margin: 0;
                padding: 0;
                overflow: hidden;
                position: relative;
                cursor: default;
                width: 100%;
                height: 100%;
                font-family: Helvetica,"Nimbus Sans L","Liberation Sans",Arial,sans-serif;
                background: #f4f4f4 url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2267%22%20height%3D%22100%22%20viewBox%3D%220%200%2067%20100%22%3E%0A%3Cpath%20stroke%3D%22%23ccc%22%20fill%3D%22none%22%20d%3D%22M33.5%2C50%2C0%2C63%2C33.5%2C75%2C67%2C63%2C33.5%2C50m-33.5-50%2C67%2C25m-0.5%2C0%2C0%2C75m-66.5-75%2C67-25m-33.5%2C75%2C0%2C25m0-100%2C0%2C50%22%2F%3E%0A%3C%2Fsvg%3E%0A') repeat;
                -webkit-user-select: none;
                -khtml-user-select: none;
                -moz-user-select: none;
                -o-user-select: none;
                -ms-user-select: none;
                user-select: none;
                outline: 0;
                line-height: 1.4;
                contain: content
            }

            .pnlm-container * {
                box-sizing: content-box
            }

            .pnlm-ui {
                position: absolute;
                width: 100%;
                height: 100%;
                z-index: 1
            }

            .pnlm-grab {
                cursor: grab;
                cursor: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2226%22%20width%3D%2226%22%3E%0A%3Cpath%20stroke%3D%22%23000%22%20stroke-width%3D%221px%22%20fill%3D%22%23fff%22%20d%3D%22m15.3%2020.5s6.38-6.73%204.64-8.24-3.47%201.01-3.47%201.01%203.61-5.72%201.41-6.49c-2.2-0.769-3.33%204.36-3.33%204.36s0.873-5.76-1.06-5.76-1.58%205.39-1.58%205.39-0.574-4.59-2.18-4.12c-1.61%200.468-0.572%205.51-0.572%205.51s-1.58-4.89-2.93-3.79c-1.35%201.11%200.258%205.25%200.572%206.62%200.836%202.43%202.03%202.94%202.17%205.55%22%2F%3E%0A%3C%2Fsvg%3E%0A') 12 8,default
            }

            .pnlm-grabbing {
                cursor: grabbing;
                cursor: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2226%22%20width%3D%2226%22%3E%0A%3Cpath%20stroke%3D%22%23000%22%20stroke-width%3D%221px%22%20fill%3D%22%23fff%22%20d%3D%22m15.3%2020.5s5.07-5.29%203.77-6.74c-1.31-1.45-2.53%200.14-2.53%200.14s2.74-3.29%200.535-4.06c-2.2-0.769-2.52%201.3-2.52%201.3s0.81-2.13-1.12-2.13-1.52%201.77-1.52%201.77-0.261-1.59-1.87-1.12c-1.61%200.468-0.874%202.17-0.874%202.17s-0.651-1.55-2-0.445c-1.35%201.11-0.68%202.25-0.365%203.62%200.836%202.43%202.03%202.94%202.17%205.55%22%2F%3E%0A%3C%2Fsvg%3E%0A') 12 8,default
            }

            .pnlm-sprite {
                background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2226%22%20height%3D%22208%22%3E%0A%3Ccircle%20fill-opacity%3D%22.78%22%20cy%3D%22117%22%20cx%3D%2213%22%20r%3D%2211%22%20fill%3D%22%23fff%22%2F%3E%0A%3Ccircle%20fill-opacity%3D%22.78%22%20cy%3D%22143%22%20cx%3D%2213%22%20r%3D%2211%22%20fill%3D%22%23fff%22%2F%3E%0A%3Ccircle%20cy%3D%22169%22%20cx%3D%2213%22%20r%3D%227%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%2F%3E%0A%3Ccircle%20cy%3D%22195%22%20cx%3D%2213%22%20r%3D%227%22%20fill%3D%22none%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%2F%3E%0A%3Ccircle%20cx%3D%2213%22%20cy%3D%22195%22%20r%3D%222.5%22%2F%3E%0A%3Cpath%20d%3D%22m5%2083v6h2v-4h4v-2zm10%200v2h4v4h2v-6zm-5%205v6h6v-6zm-5%205v6h6v-2h-4v-4zm14%200v4h-4v2h6v-6z%22%2F%3E%0A%3Cpath%20d%3D%22m13%20110a7%207%200%200%200%20-7%207%207%207%200%200%200%207%207%207%207%200%200%200%207%20-7%207%207%200%200%200%20-7%20-7zm-1%203h2v2h-2zm0%203h2v5h-2z%22%2F%3E%0A%3Cpath%20d%3D%22m5%2057v6h2v-4h4v-2zm10%200v2h4v4h2v-6zm-10%2010v6h6v-2h-4v-4zm14%200v4h-4v2h6v-6z%22%2F%3E%0A%3Cpath%20d%3D%22m17%2038v2h-8v-2z%22%2F%3E%0A%3Cpath%20d%3D%22m12%209v3h-3v2h3v3h2v-3h3v-2h-3v-3z%22%2F%3E%0A%3Cpath%20d%3D%22m13%20136-6.125%206.125h4.375v7.875h3.5v-7.875h4.375z%22%2F%3E%0A%3Cpath%20d%3D%22m10.428%20173.33v-5.77l5-2.89v5.77zm1-1.73%203-1.73-3.001-1.74z%22%2F%3E%0A%3C%2Fsvg%3E%0A')
            }

            .pnlm-container:-moz-full-screen {
                height: 100%!important;
                width: 100%!important;
                position: static!important
            }

            .pnlm-container:-webkit-full-screen {
                height: 100%!important;
                width: 100%!important;
                position: static!important
            }

            .pnlm-container:-ms-fullscreen {
                height: 100%!important;
                width: 100%!important;
                position: static!important
            }

            .pnlm-container:fullscreen {
                height: 100%!important;
                width: 100%!important;
                position: static!important
            }

            .pnlm-render-container {
                cursor: inherit;
                position: absolute;
                height: 100%;
                width: 100%
            }

            .pnlm-controls {
                margin-top: 4px;
                background-color: #fff;
                border: 1px solid #999;
                border-color: rgba(0,0,0,0.4);
                border-radius: 3px;
                cursor: pointer;
                z-index: 2;
                -webkit-transform: translateZ(9999px);
                transform: translateZ(9999px)
            }

            .pnlm-control:hover {
                background-color: #f8f8f8
            }

            .pnlm-controls-container {
                position: absolute;
                top: 0;
                left: 4px;
                z-index: 1
            }

            .pnlm-zoom-controls {
                width: 26px;
                height: 52px
            }

            .pnlm-zoom-in {
                width: 100%;
                height: 50%;
                position: absolute;
                top: 0;
                border-radius: 3px 3px 0 0
            }

            .pnlm-zoom-out {
                width: 100%;
                height: 50%;
                position: absolute;
                bottom: 0;
                background-position: 0 -26px;
                border-top: 1px solid #ddd;
                border-top-color: rgba(0,0,0,0.10);
                border-radius: 0 0 3px 3px
            }

            .pnlm-fullscreen-toggle-button,.pnlm-orientation-button,.pnlm-hot-spot-debug-indicator {
                width: 26px;
                height: 26px
            }

            .pnlm-hot-spot-debug-indicator {
                position: absolute;
                top: 50%;
                left: 50%;
                width: 26px;
                height: 26px;
                margin: -13px 0 0 -13px;
                background-color: rgba(255,255,255,0.5);
                border-radius: 13px;
                display: none
            }

            .pnlm-orientation-button-inactive {
                background-position: 0 -156px
            }

            .pnlm-orientation-button-active {
                background-position: 0 -182px
            }

            .pnlm-fullscreen-toggle-button-inactive {
                background-position: 0 -52px
            }

            .pnlm-fullscreen-toggle-button-active {
                background-position: 0 -78px
            }

            .pnlm-panorama-info {
                position: absolute;
                bottom: 4px;
                background-color: rgba(0,0,0,0.7);
                border-radius: 0 3px 3px 0;
                padding-right: 10px;
                color: #fff;
                text-align: left;
                display: none;
                z-index: 2;
                -webkit-transform: translateZ(9999px);
                transform: translateZ(9999px)
            }

            .pnlm-title-box {
                position: relative;
                font-size: 20px;
                display: table;
                padding-left: 5px;
                margin-bottom: 3px
            }

            .pnlm-author-box {
                position: relative;
                font-size: 12px;
                display: table;
                padding-left: 5px
            }

            .pnlm-load-box {
                position: absolute;
                top: 50%;
                left: 50%;
                width: 200px;
                height: 150px;
                margin: -75px 0 0 -100px;
                background-color: rgba(0,0,0,0.7);
                border-radius: 3px;
                text-align: center;
                font-size: 20px;
                display: none;
                color: #fff
            }

            .pnlm-load-box p {
                margin: 20px 0
            }

            .pnlm-lbox {
                position: absolute;
                top: 50%;
                left: 50%;
                width: 20px;
                height: 20px;
                margin: -10px 0 0 -10px;
                display: none
            }

            .pnlm-loading {
                animation-duration: 1.5s;
                -webkit-animation-duration: 1.5s;
                animation-name: pnlm-mv;
                -webkit-animation-name: pnlm-mv;
                animation-iteration-count: infinite;
                -webkit-animation-iteration-count: infinite;
                animation-timing-function: linear;
                -webkit-animation-timing-function: linear;
                height: 10px;
                width: 10px;
                background-color: #fff;
                position: relative
            }

            @keyframes pnlm-mv {
                from {
                    left: 0;
                    top: 0
                }

                25% {
                    left: 10px;
                    top: 0
                }

                50% {
                    left: 10px;
                    top: 10px
                }

                75% {
                    left: 0;
                    top: 10px
                }

                to {
                    left: 0;
                    top: 0
                }
            }

            @-webkit-keyframes pnlm-mv {
                from {
                    left: 0;
                    top: 0
                }

                25% {
                    left: 10px;
                    top: 0
                }

                50% {
                    left: 10px;
                    top: 10px
                }

                75% {
                    left: 0;
                    top: 10px
                }

                to {
                    left: 0;
                    top: 0
                }
            }

            .pnlm-load-button {
                position: absolute;
                top: 50%;
                left: 50%;
                width: 200px;
                height: 100px;
                margin: -50px 0 0 -100px;
                background-color: rgba(0,0,0,.7);
                border-radius: 3px;
                text-align: center;
                font-size: 20px;
                display: table;
                color: #fff;
                cursor: pointer
            }

            .pnlm-load-button:hover {
                background-color: rgba(0,0,0,.8)
            }

            .pnlm-load-button p {
                display: table-cell;
                vertical-align: middle
            }

            .pnlm-info-box {
                font-size: 15px;
                position: absolute;
                top: 50%;
                left: 50%;
                width: 200px;
                height: 150px;
                margin: -75px 0 0 -100px;
                background-color: #000;
                border-radius: 3px;
                display: table;
                text-align: center;
                color: #fff;
                table-layout: fixed
            }

            .pnlm-info-box a,.pnlm-author-box a {
                color: #fff;
                word-wrap: break-word;
                overflow-wrap: break-word
            }

            .pnlm-info-box p {
                display: table-cell;
                vertical-align: middle;
                padding: 0 5px 0 5px
            }

            .pnlm-error-msg {
                display: none
            }

            .pnlm-about-msg {
                font-size: 11px;
                line-height: 11px;
                color: #fff;
                padding: 5px 8px 5px 8px;
                background: rgba(0,0,0,0.7);
                border-radius: 3px;
                position: absolute;
                top: 50px;
                left: 50px;
                display: none;
                opacity: 0;
                -moz-transition: opacity .3s ease-in-out;
                -webkit-transition: opacity .3s ease-in-out;
                -o-transition: opacity .3s ease-in-out;
                -ms-transition: opacity .3s ease-in-out;
                transition: opacity .3s ease-in-out;
                z-index: 1
            }

            .pnlm-about-msg a:link,.pnlm-about-msg a:visited {
                color: #fff
            }

            .pnlm-about-msg a:hover,.pnlm-about-msg a:active {
                color: #eee
            }

            .pnlm-hotspot-base {
                position: absolute;
                visibility: hidden;
                cursor: default;
                vertical-align: middle;
                top: 0;
                z-index: 1
            }

            .pnlm-hotspot {
                height: 26px;
                width: 26px;
                border-radius: 13px
            }

            .pnlm-hotspot:hover {
                background-color: rgba(255,255,255,0.2)
            }

            .pnlm-hotspot.pnlm-info {
                background-position: 0 -104px
            }

            .pnlm-hotspot.pnlm-scene {
                background-position: 0 -130px
            }

            div.pnlm-tooltip span {
                visibility: hidden;
                position: absolute;
                border-radius: 3px;
                background-color: rgba(0,0,0,0.7);
                color: #fff;
                text-align: center;
                max-width: 200px;
                padding: 5px 10px;
                margin-left: -220px;
                cursor: default
            }

            div.pnlm-tooltip:hover span {
                visibility: visible
            }

            div.pnlm-tooltip:hover span:after {
                content: '';
                position: absolute;
                width: 0;
                height: 0;
                border-width: 10px;
                border-style: solid;
                border-color: rgba(0,0,0,0.7) transparent transparent transparent;
                bottom: -20px;
                left: -10px;
                margin: 0 50%
            }

            .pnlm-compass {
                position: absolute;
                width: 50px;
                height: 50px;
                right: 4px;
                bottom: 4px;
                border-radius: 25px;
                background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2250%22%20width%3D%2250%22%3E%0A%3Cpath%20d%3D%22m24.5078%206-3.2578%2018h7.5l-3.25781-18h-0.984376zm-3.2578%2020%203.2578%2018h0.9844l3.2578-18h-7.5zm1.19531%200.9941h5.10938l-2.5547%2014.1075-2.5547-14.1075z%22%2F%3E%0A%3C%2Fsvg%3E%0A');
                cursor: default;
                display: none
            }

            .pnlm-world {
                position: absolute;
                left: 50%;
                top: 50%
            }

            .pnlm-face {
                position: absolute;
                -webkit-transform-origin: 0 0;
                transform-origin: 0 0
            }

            .pnlm-dragfix,.pnlm-preview-img {
                position: absolute;
                height: 100%;
                width: 100%
            }

            .pnlm-preview-img {
                background-size: cover;
                background-position: center
            }

            .pnlm-lbar {
                width: 150px;
                margin: 0 auto;
                border: #fff 1px solid;
                height: 6px
            }

            .pnlm-lbar-fill {
                background: #fff;
                height: 100%;
                width: 0
            }

            .pnlm-lmsg {
                font-size: 12px
            }

            .pnlm-fade-img {
                position: absolute;
                top: 0;
                left: 0
            }

            .pnlm-pointer {
                cursor: pointer
            }

            html {
                height: 100%
            }

            body {
                margin: 0;
                padding: 0;
                overflow: hidden;
                position: fixed;
                cursor: default;
                width: 100%;
                height: 100%
            }
        </style>
    </head>
    <body>
        <div id=container>
            <noscript>
                <div class=pnlm-info-box>
                    <p>
                        Javascript is required to view this panorama.<br>(It could be worse; you could need a plugin.)
                    </p>
                </div>
            </noscript>
        </div>
        <script type="text/javascript">
            window.libpannellum = function(y, c, p) {
                function H(L) {
                    function H(a, f) {
                        return 1 == a.level && 1 != f.level ? -1 : 1 == f.level && 1 != a.level ? 1 : f.timestamp - a.timestamp
                    }
                    function Q(a, f) {
                        return a.level != f.level ? a.level - f.level : a.diff - f.diff
                    }
                    function ka(a, f, d, c, m, e) {
                        this.vertices = a;
                        this.side = f;
                        this.level = d;
                        this.x = c;
                        this.y = m;
                        this.path = e.replace("%s", f).replace("%l", d).replace("%x", c).replace("%y", m)
                    }
                    function Ha(a, f, c, p, m) {
                        var e;
                        var g = f.vertices;
                        e = la(a, g.slice(0, 3));
                        var t = la(a, g.slice(3, 6))
                          , x = la(a, g.slice(6, 9))
                          , g = la(a, g.slice(9, 12))
                          , s = e[0] + t[0] + x[0] + g[0];
                        -4 == s || 4 == s ? e = !1 : (s = e[1] + t[1] + x[1] + g[1],
                        e = -4 == s || 4 == s ? !1 : 4 != e[2] + t[2] + x[2] + g[2]);
                        if (e) {
                            e = f.vertices;
                            t = e[0] + e[3] + e[6] + e[9];
                            x = e[1] + e[4] + e[7] + e[10];
                            g = e[2] + e[5] + e[8] + e[11];
                            s = Math.sqrt(t * t + x * x + g * g);
                            g = Math.asin(g / s);
                            t = Math.atan2(x, t) - p;
                            t += t > Math.PI ? -2 * Math.PI : t < -Math.PI ? 2 * Math.PI : 0;
                            t = Math.abs(t);
                            f.diff = Math.acos(Math.sin(c) * Math.sin(g) + Math.cos(c) * Math.cos(g) * Math.cos(t));
                            t = !1;
                            for (x = 0; x < d.nodeCache.length; x++)
                                if (d.nodeCache[x].path == f.path) {
                                    t = !0;
                                    d.nodeCache[x].timestamp = d.nodeCacheTimestamp++;
                                    d.nodeCache[x].diff = f.diff;
                                    d.currentNodes.push(d.nodeCache[x]);
                                    break
                                }
                            t || (f.timestamp = d.nodeCacheTimestamp++,
                            d.currentNodes.push(f),
                            d.nodeCache.push(f));
                            if (f.level < d.level) {
                                var g = n.cubeResolution * Math.pow(2, f.level - n.maxLevel)
                                  , t = Math.ceil(g * n.invTileResolution) - 1
                                  , x = g % n.tileResolution * 2
                                  , k = 2 * g % n.tileResolution;
                                0 === k && (k = n.tileResolution);
                                0 === x && (x = 2 * n.tileResolution);
                                s = 0.5;
                                if (f.x == t || f.y == t)
                                    s = 1 - n.tileResolution / (n.tileResolution + k);
                                var l = 1 - s
                                  , g = []
                                  , z = s
                                  , y = s
                                  , E = s
                                  , J = l
                                  , A = l
                                  , C = l;
                                if (k < n.tileResolution)
                                    if (f.x == t && f.y != t) {
                                        if (A = y = 0.5,
                                        "d" == f.side || "u" == f.side)
                                            C = E = 0.5
                                    } else
                                        f.x != t && f.y == t && (J = z = 0.5,
                                        "l" == f.side || "r" == f.side) && (C = E = 0.5);
                                x <= n.tileResolution && (f.x == t && (z = 0,
                                J = 1,
                                "l" == f.side || "r" == f.side) && (E = 0,
                                C = 1),
                                f.y == t && (y = 0,
                                A = 1,
                                "d" == f.side || "u" == f.side) && (E = 0,
                                C = 1));
                                k = [e[0], e[1], e[2], e[0] * z + e[3] * J, e[1] * s + e[4] * l, e[2] * E + e[5] * C, e[0] * z + e[6] * J, e[1] * y + e[7] * A, e[2] * E + e[8] * C, e[0] * s + e[9] * l, e[1] * y + e[10] * A, e[2] * E + e[11] * C];
                                k = new ka(k,f.side,f.level + 1,2 * f.x,2 * f.y,n.fullpath);
                                g.push(k);
                                f.x == t && x <= n.tileResolution || (k = [e[0] * z + e[3] * J, e[1] * s + e[4] * l, e[2] * E + e[5] * C, e[3], e[4], e[5], e[3] * s + e[6] * l, e[4] * y + e[7] * A, e[5] * E + e[8] * C, e[0] * z + e[6] * J, e[1] * y + e[7] * A, e[2] * E + e[8] * C],
                                k = new ka(k,f.side,f.level + 1,2 * f.x + 1,2 * f.y,n.fullpath),
                                g.push(k));
                                f.x == t && x <= n.tileResolution || f.y == t && x <= n.tileResolution || (k = [e[0] * z + e[6] * J, e[1] * y + e[7] * A, e[2] * E + e[8] * C, e[3] * s + e[6] * l, e[4] * y + e[7] * A, e[5] * E + e[8] * C, e[6], e[7], e[8], e[9] * z + e[6] * J, e[10] * s + e[7] * l, e[11] * E + e[8] * C],
                                k = new ka(k,f.side,f.level + 1,2 * f.x + 1,2 * f.y + 1,n.fullpath),
                                g.push(k));
                                f.y == t && x <= n.tileResolution || (k = [e[0] * s + e[9] * l, e[1] * y + e[10] * A, e[2] * E + e[11] * C, e[0] * z + e[6] * J, e[1] * y + e[7] * A, e[2] * E + e[8] * C, e[9] * z + e[6] * J, e[10] * s + e[7] * l, e[11] * E + e[8] * C, e[9], e[10], e[11]],
                                k = new ka(k,f.side,f.level + 1,2 * f.x,2 * f.y + 1,n.fullpath),
                                g.push(k));
                                for (f = 0; f < g.length; f++)
                                    Ha(a, g[f], c, p, m)
                            }
                        }
                    }
                    function sa() {
                        return [-1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1]
                    }
                    function ta(a, f, d) {
                        var c = Math.sin(f);
                        f = Math.cos(f);
                        if ("x" == d)
                            return [a[0], f * a[1] + c * a[2], f * a[2] - c * a[1], a[3], f * a[4] + c * a[5], f * a[5] - c * a[4], a[6], f * a[7] + c * a[8], f * a[8] - c * a[7]];
                        if ("y" == d)
                            return [f * a[0] - c * a[2], a[1], f * a[2] + c * a[0], f * a[3] - c * a[5], a[4], f * a[5] + c * a[3], f * a[6] - c * a[8], a[7], f * a[8] + c * a[6]];
                        if ("z" == d)
                            return [f * a[0] + c * a[1], f * a[1] - c * a[0], a[2], f * a[3] + c * a[4], f * a[4] - c * a[3], a[5], f * a[6] + c * a[7], f * a[7] - c * a[6], a[8]]
                    }
                    function ma(a) {
                        return [a[0], a[4], a[8], a[12], a[1], a[5], a[9], a[13], a[2], a[6], a[10], a[14], a[3], a[7], a[11], a[15]]
                    }
                    function Ia(a) {
                        Ja(a, a.path + "." + n.extension, function(f, c) {
                            a.texture = f;
                            a.textureLoaded = c ? 2 : 1
                        }, ua.crossOrigin)
                    }
                    function la(a, f) {
                        var c = [a[0] * f[0] + a[1] * f[1] + a[2] * f[2], a[4] * f[0] + a[5] * f[1] + a[6] * f[2], a[11] + a[8] * f[0] + a[9] * f[1] + a[10] * f[2], 1 / (a[12] * f[0] + a[13] * f[1] + a[14] * f[2])]
                          , d = c[0] * c[3]
                          , m = c[1] * c[3]
                          , c = c[2] * c[3]
                          , e = [0, 0, 0];
                        -1 > d && (e[0] = -1);
                        1 < d && (e[0] = 1);
                        -1 > m && (e[1] = -1);
                        1 < m && (e[1] = 1);
                        if (-1 > c || 1 < c)
                            e[2] = 1;
                        return e
                    }
                    function Ca() {
                        console.log("Reducing canvas size due to error 1286!");
                        A.width = Math.round(A.width / 2);
                        A.height = Math.round(A.height / 2)
                    }
                    var A = c.createElement("canvas");
                    A.style.width = A.style.height = "100%";
                    L.appendChild(A);
                    var d, a, V, W, aa, S, va, ha, n, z, F, da, Da, Z, na, ua;
                    this.init = function(M, f, y, I, m, e, g, t) {
                        function x(a) {
                            if (Q) {
                                var f = a * a * 4
                                  , e = new Uint8ClampedArray(f)
                                  , c = t.backgroundColor ? t.backgroundColor : [0, 0, 0];
                                c[0] *= 255;
                                c[1] *= 255;
                                c[2] *= 255;
                                for (var b = 0; b < f; b++)
                                    e[b++] = c[0],
                                    e[b++] = c[1],
                                    e[b++] = c[2];
                                a = new ImageData(e,a,a);
                                for (s = 0; 6 > s; s++)
                                    0 == n[s].width && (n[s] = a)
                            }
                        }
                        f === p && (f = "equirectangular");
                        if ("equirectangular" != f && "cubemap" != f && "multires" != f)
                            throw console.log("Error: invalid image type specified!"),
                            {
                                type: "config error"
                            };
                        z = f;
                        n = M;
                        F = y;
                        ua = t || {};
                        if (d) {
                            V && (a.detachShader(d, V),
                            a.deleteShader(V));
                            W && (a.detachShader(d, W),
                            a.deleteShader(W));
                            a.bindBuffer(a.ARRAY_BUFFER, null);
                            a.bindBuffer(a.ELEMENT_ARRAY_BUFFER, null);
                            d.texture && a.deleteTexture(d.texture);
                            if (d.nodeCache)
                                for (M = 0; M < d.nodeCache.length; M++)
                                    a.deleteTexture(d.nodeCache[M].texture);
                            a.deleteProgram(d);
                            d = p
                        }
                        ha = p;
                        var s, Q = !1, B;
                        if ("cubemap" == z)
                            for (s = 0; 6 > s; s++)
                                0 < n[s].width ? (B === p && (B = n[s].width),
                                B != n[s].width && console.log("Cube faces have inconsistent widths: " + B + " vs. " + n[s].width)) : Q = !0;
                        "cubemap" == z && 0 !== (B & B - 1) && (navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad).* os 8_/) || navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad).* os 9_/) || navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad).* os 10_/) || navigator.userAgent.match(/Trident.*rv[ :]*11\./)) || (a || (a = A.getContext("experimental-webgl", {
                            alpha: !1,
                            depth: !1
                        })),
                        a && 1286 == a.getError() && Ca());
                        if (!a && ("multires" == z && n.hasOwnProperty("fallbackPath") || "cubemap" == z) && ("WebkitAppearance"in c.documentElement.style || navigator.userAgent.match(/Trident.*rv[ :]*11\./) || -1 !== navigator.appVersion.indexOf("MSIE 10"))) {
                            S && L.removeChild(S);
                            S = c.createElement("div");
                            S.className = "pnlm-world";
                            I = n.basePath ? n.basePath + n.fallbackPath : n.fallbackPath;
                            var H = "frblud".split("")
                              , T = 0;
                            m = function() {
                                var a = c.createElement("canvas");
                                a.className = "pnlm-face pnlm-" + H[this.side] + "face";
                                S.appendChild(a);
                                var f = a.getContext("2d");
                                a.style.width = this.width + 4 + "px";
                                a.style.height = this.height + 4 + "px";
                                a.width = this.width + 4;
                                a.height = this.height + 4;
                                f.drawImage(this, 2, 2);
                                var e = f.getImageData(0, 0, a.width, a.height), g = e.data, b, d;
                                for (b = 2; b < a.width - 2; b++)
                                    for (d = 0; 4 > d; d++)
                                        g[4 * (b + a.width) + d] = g[4 * (b + 2 * a.width) + d],
                                        g[4 * (b + a.width * (a.height - 2)) + d] = g[4 * (b + a.width * (a.height - 3)) + d];
                                for (b = 2; b < a.height - 2; b++)
                                    for (d = 0; 4 > d; d++)
                                        g[4 * (b * a.width + 1) + d] = g[4 * (b * a.width + 2) + d],
                                        g[4 * ((b + 1) * a.width - 2) + d] = g[4 * ((b + 1) * a.width - 3) + d];
                                for (d = 0; 4 > d; d++)
                                    g[4 * (a.width + 1) + d] = g[4 * (2 * a.width + 2) + d],
                                    g[4 * (2 * a.width - 2) + d] = g[4 * (3 * a.width - 3) + d],
                                    g[4 * (a.width * (a.height - 2) + 1) + d] = g[4 * (a.width * (a.height - 3) + 2) + d],
                                    g[4 * (a.width * (a.height - 1) - 2) + d] = g[4 * (a.width * (a.height - 2) - 3) + d];
                                for (b = 1; b < a.width - 1; b++)
                                    for (d = 0; 4 > d; d++)
                                        g[4 * b + d] = g[4 * (b + a.width) + d],
                                        g[4 * (b + a.width * (a.height - 1)) + d] = g[4 * (b + a.width * (a.height - 2)) + d];
                                for (b = 1; b < a.height - 1; b++)
                                    for (d = 0; 4 > d; d++)
                                        g[b * a.width * 4 + d] = g[4 * (b * a.width + 1) + d],
                                        g[4 * ((b + 1) * a.width - 1) + d] = g[4 * ((b + 1) * a.width - 2) + d];
                                for (d = 0; 4 > d; d++)
                                    g[d] = g[4 * (a.width + 1) + d],
                                    g[4 * (a.width - 1) + d] = g[4 * (2 * a.width - 2) + d],
                                    g[a.width * (a.height - 1) * 4 + d] = g[4 * (a.width * (a.height - 2) + 1) + d],
                                    g[4 * (a.width * a.height - 1) + d] = g[4 * (a.width * (a.height - 1) - 2) + d];
                                f.putImageData(e, 0, 0);
                                E.call(this)
                            }
                            ;
                            var E = function() {
                                0 < this.width ? (aa === p && (aa = this.width),
                                aa != this.width && console.log("Fallback faces have inconsistent widths: " + aa + " vs. " + this.width)) : Q = !0;
                                T++;
                                6 == T && (aa = this.width,
                                L.appendChild(S),
                                g())
                            }
                              , Q = !1;
                            for (s = 0; 6 > s; s++)
                                e = new Image,
                                e.crossOrigin = ua.crossOrigin ? ua.crossOrigin : "anonymous",
                                e.side = s,
                                e.onload = m,
                                e.onerror = E,
                                e.src = "multires" == z ? I.replace("%s", H[s]) + "." + n.extension : n[s].src;
                            x(aa)
                        } else {
                            if (!a)
                                throw console.log("Error: no WebGL support detected!"),
                                {
                                    type: "no webgl"
                                };
                            "cubemap" == z && x(B);
                            n.fullpath = n.basePath ? n.basePath + n.path : n.path;
                            n.invTileResolution = 1 / n.tileResolution;
                            M = sa();
                            va = [];
                            for (s = 0; 6 > s; s++)
                                va[s] = M.slice(12 * s, 12 * s + 12),
                                M = sa();
                            M = 0;
                            if ("equirectangular" == z) {
                                if (M = a.getParameter(a.MAX_TEXTURE_SIZE),
                                Math.max(n.width / 2, n.height) > M)
                                    throw console.log("Error: The image is too big; it's " + n.width + "px wide, but this device's maximum supported size is " + 2 * M + "px."),
                                    {
                                        type: "webgl size error",
                                        width: n.width,
                                        maxWidth: 2 * M
                                    };
                            } else if ("cubemap" == z && B > a.getParameter(a.MAX_CUBE_MAP_TEXTURE_SIZE))
                                throw console.log("Error: The image is too big; it's " + B + "px wide, but this device's maximum supported size is " + M + "px."),
                                {
                                    type: "webgl size error",
                                    width: B,
                                    maxWidth: M
                                };
                            t === p || t.horizonPitch === p && t.horizonRoll === p || (ha = [t.horizonPitch == p ? 0 : t.horizonPitch, t.horizonRoll == p ? 0 : t.horizonRoll]);
                            B = a.TEXTURE_2D;
                            a.viewport(0, 0, a.drawingBufferWidth, a.drawingBufferHeight);
                            a.getShaderPrecisionFormat && (f = a.getShaderPrecisionFormat(a.FRAGMENT_SHADER, a.HIGH_FLOAT)) && 1 > f.precision && (oa = oa.replace("highp", "mediump"));
                            V = a.createShader(a.VERTEX_SHADER);
                            f = l;
                            "multires" == z && (f = k);
                            a.shaderSource(V, f);
                            a.compileShader(V);
                            W = a.createShader(a.FRAGMENT_SHADER);
                            f = pa;
                            "cubemap" == z ? (B = a.TEXTURE_CUBE_MAP,
                            f = bb) : "multires" == z && (f = Ra);
                            a.shaderSource(W, f);
                            a.compileShader(W);
                            d = a.createProgram();
                            a.attachShader(d, V);
                            a.attachShader(d, W);
                            a.linkProgram(d);
                            a.getShaderParameter(V, a.COMPILE_STATUS) || console.log(a.getShaderInfoLog(V));
                            a.getShaderParameter(W, a.COMPILE_STATUS) || console.log(a.getShaderInfoLog(W));
                            a.getProgramParameter(d, a.LINK_STATUS) || console.log(a.getProgramInfoLog(d));
                            a.useProgram(d);
                            d.drawInProgress = !1;
                            f = t.backgroundColor ? t.backgroundColor : [0, 0, 0];
                            a.clearColor(f[0], f[1], f[2], 1);
                            a.clear(a.COLOR_BUFFER_BIT);
                            d.texCoordLocation = a.getAttribLocation(d, "a_texCoord");
                            a.enableVertexAttribArray(d.texCoordLocation);
                            "multires" != z ? (da || (da = a.createBuffer()),
                            a.bindBuffer(a.ARRAY_BUFFER, da),
                            a.bufferData(a.ARRAY_BUFFER, new Float32Array([-1, 1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1]), a.STATIC_DRAW),
                            a.vertexAttribPointer(d.texCoordLocation, 2, a.FLOAT, !1, 0, 0),
                            d.aspectRatio = a.getUniformLocation(d, "u_aspectRatio"),
                            a.uniform1f(d.aspectRatio, a.drawingBufferWidth / a.drawingBufferHeight),
                            d.psi = a.getUniformLocation(d, "u_psi"),
                            d.theta = a.getUniformLocation(d, "u_theta"),
                            d.f = a.getUniformLocation(d, "u_f"),
                            d.h = a.getUniformLocation(d, "u_h"),
                            d.v = a.getUniformLocation(d, "u_v"),
                            d.vo = a.getUniformLocation(d, "u_vo"),
                            d.rot = a.getUniformLocation(d, "u_rot"),
                            a.uniform1f(d.h, I / (2 * Math.PI)),
                            a.uniform1f(d.v, m / Math.PI),
                            a.uniform1f(d.vo, e / Math.PI * 2),
                            "equirectangular" == z && (d.backgroundColor = a.getUniformLocation(d, "u_backgroundColor"),
                            a.uniform4fv(d.backgroundColor, f.concat([1]))),
                            d.texture = a.createTexture(),
                            a.bindTexture(B, d.texture),
                            "cubemap" == z ? (a.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_X, 0, a.RGB, a.RGB, a.UNSIGNED_BYTE, n[1]),
                            a.texImage2D(a.TEXTURE_CUBE_MAP_NEGATIVE_X, 0, a.RGB, a.RGB, a.UNSIGNED_BYTE, n[3]),
                            a.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_Y, 0, a.RGB, a.RGB, a.UNSIGNED_BYTE, n[4]),
                            a.texImage2D(a.TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, a.RGB, a.RGB, a.UNSIGNED_BYTE, n[5]),
                            a.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_Z, 0, a.RGB, a.RGB, a.UNSIGNED_BYTE, n[0]),
                            a.texImage2D(a.TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, a.RGB, a.RGB, a.UNSIGNED_BYTE, n[2])) : n.width <= M ? (a.uniform1i(a.getUniformLocation(d, "u_splitImage"), 0),
                            a.texImage2D(B, 0, a.RGB, a.RGB, a.UNSIGNED_BYTE, n)) : (a.uniform1i(a.getUniformLocation(d, "u_splitImage"), 1),
                            I = c.createElement("canvas"),
                            I.width = n.width / 2,
                            I.height = n.height,
                            I = I.getContext("2d"),
                            I.drawImage(n, 0, 0),
                            m = I.getImageData(0, 0, n.width / 2, n.height),
                            a.texImage2D(B, 0, a.RGB, a.RGB, a.UNSIGNED_BYTE, m),
                            d.texture2 = a.createTexture(),
                            a.activeTexture(a.TEXTURE1),
                            a.bindTexture(B, d.texture2),
                            a.uniform1i(a.getUniformLocation(d, "u_image1"), 1),
                            I.drawImage(n, -n.width / 2, 0),
                            m = I.getImageData(0, 0, n.width / 2, n.height),
                            a.texImage2D(B, 0, a.RGB, a.RGB, a.UNSIGNED_BYTE, m),
                            a.texParameteri(B, a.TEXTURE_WRAP_S, a.CLAMP_TO_EDGE),
                            a.texParameteri(B, a.TEXTURE_WRAP_T, a.CLAMP_TO_EDGE),
                            a.texParameteri(B, a.TEXTURE_MIN_FILTER, a.LINEAR),
                            a.texParameteri(B, a.TEXTURE_MAG_FILTER, a.LINEAR),
                            a.activeTexture(a.TEXTURE0)),
                            a.texParameteri(B, a.TEXTURE_WRAP_S, a.CLAMP_TO_EDGE),
                            a.texParameteri(B, a.TEXTURE_WRAP_T, a.CLAMP_TO_EDGE),
                            a.texParameteri(B, a.TEXTURE_MIN_FILTER, a.LINEAR),
                            a.texParameteri(B, a.TEXTURE_MAG_FILTER, a.LINEAR)) : (d.vertPosLocation = a.getAttribLocation(d, "a_vertCoord"),
                            a.enableVertexAttribArray(d.vertPosLocation),
                            Da || (Da = a.createBuffer()),
                            Z || (Z = a.createBuffer()),
                            na || (na = a.createBuffer()),
                            a.bindBuffer(a.ARRAY_BUFFER, Z),
                            a.bufferData(a.ARRAY_BUFFER, new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]), a.STATIC_DRAW),
                            a.bindBuffer(a.ELEMENT_ARRAY_BUFFER, na),
                            a.bufferData(a.ELEMENT_ARRAY_BUFFER, new Uint16Array([0, 1, 2, 0, 2, 3]), a.STATIC_DRAW),
                            d.perspUniform = a.getUniformLocation(d, "u_perspMatrix"),
                            d.cubeUniform = a.getUniformLocation(d, "u_cubeMatrix"),
                            d.level = -1,
                            d.currentNodes = [],
                            d.nodeCache = [],
                            d.nodeCacheTimestamp = 0);
                            I = a.getError();
                            if (0 !== I)
                                throw console.log("Error: Something went wrong with WebGL!", I),
                                {
                                    type: "webgl error"
                                };
                            g()
                        }
                    }
                    ;
                    this.destroy = function() {
                        L !== p && (A !== p && L.contains(A) && L.removeChild(A),
                        S !== p && L.contains(S) && L.removeChild(S));
                        if (a) {
                            var d = a.getExtension("WEBGL_lose_context");
                            d && d.loseContext()
                        }
                    }
                    ;
                    this.resize = function() {
                        var c = y.devicePixelRatio || 1;
                        A.width = A.clientWidth * c;
                        A.height = A.clientHeight * c;
                        a && (1286 == a.getError() && Ca(),
                        a.viewport(0, 0, a.drawingBufferWidth, a.drawingBufferHeight),
                        "multires" != z && a.uniform1f(d.aspectRatio, A.clientWidth / A.clientHeight))
                    }
                    ;
                    this.resize();
                    this.setPose = function(a, d) {
                        ha = [a, d]
                    }
                    ;
                    this.render = function(c, f, k, l) {
                        var m, e = 0;
                        l === p && (l = {});
                        l.roll && (e = l.roll);
                        if (ha !== p) {
                            m = ha[0];
                            var g = ha[1]
                              , t = c
                              , x = f
                              , s = Math.cos(g) * Math.sin(c) * Math.sin(m) + Math.cos(c) * (Math.cos(m) * Math.cos(f) + Math.sin(g) * Math.sin(m) * Math.sin(f))
                              , y = -Math.sin(c) * Math.sin(g) + Math.cos(c) * Math.cos(g) * Math.sin(f);
                            c = Math.cos(g) * Math.cos(m) * Math.sin(c) + Math.cos(c) * (-Math.cos(f) * Math.sin(m) + Math.cos(m) * Math.sin(g) * Math.sin(f));
                            c = Math.asin(Math.max(Math.min(c, 1), -1));
                            f = Math.atan2(y, s);
                            m = [Math.cos(t) * (Math.sin(g) * Math.sin(m) * Math.cos(x) - Math.cos(m) * Math.sin(x)), Math.cos(t) * Math.cos(g) * Math.cos(x), Math.cos(t) * (Math.cos(m) * Math.sin(g) * Math.cos(x) + Math.sin(x) * Math.sin(m))];
                            g = [-Math.cos(c) * Math.sin(f), Math.cos(c) * Math.cos(f)];
                            g = Math.acos(Math.max(Math.min((m[0] * g[0] + m[1] * g[1]) / (Math.sqrt(m[0] * m[0] + m[1] * m[1] + m[2] * m[2]) * Math.sqrt(g[0] * g[0] + g[1] * g[1])), 1), -1));
                            0 > m[2] && (g = 2 * Math.PI - g);
                            e += g
                        }
                        if (a || "multires" != z && "cubemap" != z) {
                            if ("multires" != z)
                                k = 2 * Math.atan(Math.tan(0.5 * k) / (a.drawingBufferWidth / a.drawingBufferHeight)),
                                k = 1 / Math.tan(0.5 * k),
                                a.uniform1f(d.psi, f),
                                a.uniform1f(d.theta, c),
                                a.uniform1f(d.rot, e),
                                a.uniform1f(d.f, k),
                                !0 === F && "equirectangular" == z && (a.bindTexture(a.TEXTURE_2D, d.texture),
                                a.texImage2D(a.TEXTURE_2D, 0, a.RGB, a.RGB, a.UNSIGNED_BYTE, n)),
                                a.drawArrays(a.TRIANGLES, 0, 6);
                            else {
                                m = a.drawingBufferWidth / a.drawingBufferHeight;
                                g = 2 * Math.atan(Math.tan(k / 2) * a.drawingBufferHeight / a.drawingBufferWidth);
                                g = 1 / Math.tan(g / 2);
                                m = [g / m, 0, 0, 0, 0, g, 0, 0, 0, 0, 100.1 / -99.9, 20 / -99.9, 0, 0, -1, 0];
                                for (g = 1; g < n.maxLevel && a.drawingBufferWidth > n.tileResolution * Math.pow(2, g - 1) * Math.tan(k / 2) * 0.707; )
                                    g++;
                                d.level = g;
                                g = [1, 0, 0, 0, 1, 0, 0, 0, 1];
                                g = ta(g, -e, "z");
                                g = ta(g, -c, "x");
                                g = ta(g, f, "y");
                                g = [g[0], g[1], g[2], 0, g[3], g[4], g[5], 0, g[6], g[7], g[8], 0, 0, 0, 0, 1];
                                a.uniformMatrix4fv(d.perspUniform, !1, new Float32Array(ma(m)));
                                a.uniformMatrix4fv(d.cubeUniform, !1, new Float32Array(ma(g)));
                                e = [m[0] * g[0], m[0] * g[1], m[0] * g[2], 0, m[5] * g[4], m[5] * g[5], m[5] * g[6], 0, m[10] * g[8], m[10] * g[9], m[10] * g[10], m[11], -g[8], -g[9], -g[10], 0];
                                d.nodeCache.sort(H);
                                if (200 < d.nodeCache.length && d.nodeCache.length > d.currentNodes.length + 50)
                                    for (m = d.nodeCache.splice(200, d.nodeCache.length - 200),
                                    g = 0; g < m.length; g++)
                                        a.deleteTexture(m[g].texture);
                                d.currentNodes = [];
                                g = "fbudlr".split("");
                                for (m = 0; 6 > m; m++)
                                    t = new ka(va[m],g[m],1,0,0,n.fullpath),
                                    Ha(e, t, c, f, k);
                                d.currentNodes.sort(Q);
                                for (c = T.length - 1; 0 <= c; c--)
                                    -1 === d.currentNodes.indexOf(T[c].node) && (T[c].node.textureLoad = !1,
                                    T.splice(c, 1));
                                if (0 === T.length)
                                    for (c = 0; c < d.currentNodes.length; c++)
                                        if (f = d.currentNodes[c],
                                        !f.texture && !f.textureLoad) {
                                            f.textureLoad = !0;
                                            setTimeout(Ia, 0, f);
                                            break
                                        }
                                if (!d.drawInProgress) {
                                    d.drawInProgress = !0;
                                    a.clear(a.COLOR_BUFFER_BIT);
                                    for (c = 0; c < d.currentNodes.length; c++)
                                        1 < d.currentNodes[c].textureLoaded && (a.bindBuffer(a.ARRAY_BUFFER, Da),
                                        a.bufferData(a.ARRAY_BUFFER, new Float32Array(d.currentNodes[c].vertices), a.STATIC_DRAW),
                                        a.vertexAttribPointer(d.vertPosLocation, 3, a.FLOAT, !1, 0, 0),
                                        a.bindBuffer(a.ARRAY_BUFFER, Z),
                                        a.vertexAttribPointer(d.texCoordLocation, 2, a.FLOAT, !1, 0, 0),
                                        a.bindTexture(a.TEXTURE_2D, d.currentNodes[c].texture),
                                        a.drawElements(a.TRIANGLES, 6, a.UNSIGNED_SHORT, 0));
                                    d.drawInProgress = !1
                                }
                            }
                            if (l.returnImage !== p)
                                return A.toDataURL("image/png")
                        } else
                            for (m = aa / 2,
                            l = {
                                f: "translate3d(-" + (m + 2) + "px, -" + (m + 2) + "px, -" + m + "px)",
                                b: "translate3d(" + (m + 2) + "px, -" + (m + 2) + "px, " + m + "px) rotateX(180deg) rotateZ(180deg)",
                                u: "translate3d(-" + (m + 2) + "px, -" + m + "px, " + (m + 2) + "px) rotateX(270deg)",
                                d: "translate3d(-" + (m + 2) + "px, " + m + "px, -" + (m + 2) + "px) rotateX(90deg)",
                                l: "translate3d(-" + m + "px, -" + (m + 2) + "px, " + (m + 2) + "px) rotateX(180deg) rotateY(90deg) rotateZ(180deg)",
                                r: "translate3d(" + m + "px, -" + (m + 2) + "px, -" + (m + 2) + "px) rotateY(270deg)"
                            },
                            k = 1 / Math.tan(k / 2),
                            k = k * A.clientWidth / 2 + "px",
                            f = "perspective(" + k + ") translateZ(" + k + ") rotateX(" + c + "rad) rotateY(" + f + "rad) ",
                            k = Object.keys(l),
                            c = 0; 6 > c; c++)
                                if (e = S.querySelector(".pnlm-" + k[c] + "face"))
                                    e.style.webkitTransform = f + l[k[c]],
                                    e.style.transform = f + l[k[c]]
                    }
                    ;
                    this.isLoading = function() {
                        if (a && "multires" == z)
                            for (var c = 0; c < d.currentNodes.length; c++)
                                if (!d.currentNodes[c].textureLoaded)
                                    return !0;
                        return !1
                    }
                    ;
                    this.getCanvas = function() {
                        return A
                    }
                    ;
                    var T = []
                      , Ja = function() {
                        function c() {
                            var d = this;
                            this.texture = this.callback = null;
                            this.image = new Image;
                            this.image.crossOrigin = m ? m : "anonymous";
                            var f = function() {
                                if (0 < d.image.width && 0 < d.image.height) {
                                    var c = d.image;
                                    a.bindTexture(a.TEXTURE_2D, d.texture);
                                    a.texImage2D(a.TEXTURE_2D, 0, a.RGB, a.RGB, a.UNSIGNED_BYTE, c);
                                    a.texParameteri(a.TEXTURE_2D, a.TEXTURE_MAG_FILTER, a.LINEAR);
                                    a.texParameteri(a.TEXTURE_2D, a.TEXTURE_MIN_FILTER, a.LINEAR);
                                    a.texParameteri(a.TEXTURE_2D, a.TEXTURE_WRAP_S, a.CLAMP_TO_EDGE);
                                    a.texParameteri(a.TEXTURE_2D, a.TEXTURE_WRAP_T, a.CLAMP_TO_EDGE);
                                    a.bindTexture(a.TEXTURE_2D, null);
                                    d.callback(d.texture, !0)
                                } else
                                    d.callback(d.texture, !1);
                                T.length ? (c = T.shift(),
                                d.loadTexture(c.src, c.texture, c.callback)) : p[k++] = d
                            };
                            this.image.addEventListener("load", f);
                            this.image.addEventListener("error", f)
                        }
                        function d(a, c, f, e) {
                            this.node = a;
                            this.src = c;
                            this.texture = f;
                            this.callback = e
                        }
                        var k = 4, p = {}, m;
                        c.prototype.loadTexture = function(a, c, d) {
                            this.texture = c;
                            this.callback = d;
                            this.image.src = a
                        }
                        ;
                        for (var e = 0; e < k; e++)
                            p[e] = new c;
                        return function(c, e, n, l) {
                            m = l;
                            l = a.createTexture();
                            k ? p[--k].loadTexture(e, l, n) : T.push(new d(c,e,l,n));
                            return l
                        }
                    }()
                }
                var l = "attribute vec2 a_texCoord;varying vec2 v_texCoord;void main() {gl_Position = vec4(a_texCoord, 0.0, 1.0);v_texCoord = a_texCoord;}"
                  , k = "attribute vec3 a_vertCoord;attribute vec2 a_texCoord;uniform mat4 u_cubeMatrix;uniform mat4 u_perspMatrix;varying mediump vec2 v_texCoord;void main(void) {gl_Position = u_perspMatrix * u_cubeMatrix * vec4(a_vertCoord, 1.0);v_texCoord = a_texCoord;}"
                  , oa = "precision highp float;\nuniform float u_aspectRatio;\nuniform float u_psi;\nuniform float u_theta;\nuniform float u_f;\nuniform float u_h;\nuniform float u_v;\nuniform float u_vo;\nuniform float u_rot;\nconst float PI = 3.14159265358979323846264;\nuniform sampler2D u_image0;\nuniform sampler2D u_image1;\nuniform bool u_splitImage;\nuniform samplerCube u_imageCube;\nvarying vec2 v_texCoord;\nuniform vec4 u_backgroundColor;\nvoid main() {\nfloat x = v_texCoord.x * u_aspectRatio;\nfloat y = v_texCoord.y;\nfloat sinrot = sin(u_rot);\nfloat cosrot = cos(u_rot);\nfloat rot_x = x * cosrot - y * sinrot;\nfloat rot_y = x * sinrot + y * cosrot;\nfloat sintheta = sin(u_theta);\nfloat costheta = cos(u_theta);\nfloat a = u_f * costheta - rot_y * sintheta;\nfloat root = sqrt(rot_x * rot_x + a * a);\nfloat lambda = atan(rot_x / root, a / root) + u_psi;\nfloat phi = atan((rot_y * costheta + u_f * sintheta) / root);"
                  , bb = oa + "float cosphi = cos(phi);\ngl_FragColor = textureCube(u_imageCube, vec3(cosphi*sin(lambda), sin(phi), cosphi*cos(lambda)));\n}"
                  , pa = oa + "lambda = mod(lambda + PI, PI * 2.0) - PI;\nvec2 coord = vec2(lambda / PI, phi / (PI / 2.0));\nif(coord.x < -u_h || coord.x > u_h || coord.y < -u_v + u_vo || coord.y > u_v + u_vo)\ngl_FragColor = u_backgroundColor;\nelse {\nif(u_splitImage) {\nif(coord.x < 0.0)\ngl_FragColor = texture2D(u_image0, vec2((coord.x + u_h) / u_h, (-coord.y + u_v + u_vo) / (u_v * 2.0)));\nelse\ngl_FragColor = texture2D(u_image1, vec2((coord.x + u_h) / u_h - 1.0, (-coord.y + u_v + u_vo) / (u_v * 2.0)));\n} else {\ngl_FragColor = texture2D(u_image0, vec2((coord.x + u_h) / (u_h * 2.0), (-coord.y + u_v + u_vo) / (u_v * 2.0)));\n}\n}\n}"
                  , Ra = "varying mediump vec2 v_texCoord;uniform sampler2D u_sampler;void main(void) {gl_FragColor = texture2D(u_sampler, v_texCoord);}";
                return {
                    renderer: function(c, k, p, l) {
                        return new H(c,k,p,l)
                    }
                }
            }(window, document);
            window.pannellum = function(y, c, p) {
                function H(l, k) {
                    function oa() {
                        var a = c.createElement("div");
                        a.innerHTML = "\x3c!--[if lte IE 9]><i></i><![endif]--\x3e";
                        if (1 == a.getElementsByTagName("i").length)
                            L();
                        else {
                            qa = b.hfov;
                            Ea = b.pitch;
                            var h;
                            if ("cubemap" == b.type) {
                                R = [];
                                for (a = 0; 6 > a; a++)
                                    R.push(new Image),
                                    R[a].crossOrigin = b.crossOrigin;
                                q.load.lbox.style.display = "block";
                                q.load.lbar.style.display = "none"
                            } else if ("multires" == b.type)
                                a = JSON.parse(JSON.stringify(b.multiRes)),
                                b.basePath && b.multiRes.basePath && !/^(?:[a-z]+:)?\/\//i.test(b.multiRes.basePath) ? a.basePath = b.basePath + b.multiRes.basePath : b.multiRes.basePath ? a.basePath = b.multiRes.basePath : b.basePath && (a.basePath = b.basePath),
                                R = a;
                            else if (!0 === b.dynamic)
                                R = b.panorama;
                            else {
                                if (b.panorama === p) {
                                    L(b.strings.noPanoramaError);
                                    return
                                }
                                R = new Image
                            }
                            if ("cubemap" == b.type)
                                for (var v = 6, d = function() {
                                    v--;
                                    0 === v && pa()
                                }, f = function(a) {
                                    var fa = c.createElement("a");
                                    fa.href = a.target.src;
                                    fa.textContent = fa.href;
                                    L(b.strings.fileAccessError.replace("%s", fa.outerHTML))
                                }, a = 0; a < R.length; a++)
                                    h = b.cubeMap[a],
                                    "null" == h ? (console.log("Will use background instead of missing cubemap face " + a),
                                    d()) : (b.basePath && !H(h) && (h = b.basePath + h),
                                    R[a].onload = d,
                                    R[a].onerror = f,
                                    R[a].src = J(h));
                            else if ("multires" == b.type)
                                pa();
                            else if (h = "",
                            b.basePath && (h = b.basePath),
                            !0 !== b.dynamic) {
                                h = H(b.panorama) ? b.panorama : h + b.panorama;
                                R.onload = function() {
                                    y.URL.revokeObjectURL(this.src);
                                    pa()
                                }
                                ;
                                var e = new XMLHttpRequest;
                                e.onloadend = function() {
                                    if (200 != e.status) {
                                        var a = c.createElement("a");
                                        a.href = h;
                                        a.textContent = a.href;
                                        L(b.strings.fileAccessError.replace("%s", a.outerHTML))
                                    }
                                    Ra(this.response);
                                    q.load.msg.innerHTML = ""
                                }
                                ;
                                e.onprogress = function(a) {
                                    if (a.lengthComputable) {
                                        q.load.lbarFill.style.width = a.loaded / a.total * 100 + "%";
                                        var b, fa;
                                        1E6 < a.total ? (b = "MB",
                                        fa = (a.loaded / 1E6).toFixed(2),
                                        a = (a.total / 1E6).toFixed(2)) : 1E3 < a.total ? (b = "kB",
                                        fa = (a.loaded / 1E3).toFixed(1),
                                        a = (a.total / 1E3).toFixed(1)) : (b = "B",
                                        fa = a.loaded,
                                        a = a.total);
                                        q.load.msg.innerHTML = fa + " / " + a + " " + b
                                    } else
                                        q.load.lbox.style.display = "block",
                                        q.load.lbar.style.display = "none"
                                }
                                ;
                                try {
                                    e.open("GET", h, !0)
                                } catch (g) {
                                    L(b.strings.malformedURLError)
                                }
                                e.responseType = "blob";
                                e.setRequestHeader("Accept", "image/*,*/*;q=0.9");
                                e.withCredentials = "use-credentials" === b.crossOrigin;
                                e.send()
                            }
                            b.draggable && K.classList.add("pnlm-grab");
                            K.classList.remove("pnlm-grabbing");
                            Ka = !0 === b.dynamicUpdate;
                            b.dynamic && Ka && (R = b.panorama,
                            pa())
                        }
                    }
                    function H(a) {
                        return /^(?:[a-z]+:)?\/\//i.test(a) || "/" == a[0] || "blob:" == a.slice(0, 5)
                    }
                    function pa() {
                        D || (D = new libpannellum.renderer(N));
                        Sa || (Sa = !0,
                        X.addEventListener("mousedown", ka, !1),
                        c.addEventListener("mousemove", ta, !1),
                        c.addEventListener("mouseup", ma, !1),
                        b.mouseZoom && (K.addEventListener("mousewheel", V, !1),
                        K.addEventListener("DOMMouseScroll", V, !1)),
                        b.doubleClickZoom && X.addEventListener("dblclick", Ha, !1),
                        l.addEventListener("mozfullscreenchange", g, !1),
                        l.addEventListener("webkitfullscreenchange", g, !1),
                        l.addEventListener("msfullscreenchange", g, !1),
                        l.addEventListener("fullscreenchange", g, !1),
                        y.addEventListener("resize", z, !1),
                        y.addEventListener("orientationchange", z, !1),
                        b.disableKeyboardCtrl || (l.addEventListener("keydown", W, !1),
                        l.addEventListener("keyup", S, !1),
                        l.addEventListener("blur", aa, !1)),
                        c.addEventListener("mouseleave", ma, !1),
                        "" === c.documentElement.style.pointerAction && "" === c.documentElement.style.touchAction ? (X.addEventListener("pointerdown", A, !1),
                        X.addEventListener("pointermove", d, !1),
                        X.addEventListener("pointerup", a, !1),
                        X.addEventListener("pointerleave", a, !1)) : (X.addEventListener("touchstart", Ia, !1),
                        X.addEventListener("touchmove", la, !1),
                        X.addEventListener("touchend", Ca, !1)),
                        y.navigator.pointerEnabled && (l.style.touchAction = "none"));
                        ua();
                        x(b.hfov);
                        setTimeout(function() {}, 500)
                    }
                    function Ra(a) {
                        var h = new FileReader;
                        h.addEventListener("loadend", function() {
                            var v = h.result;
                            if (navigator.userAgent.toLowerCase().match(/(iphone|ipod|ipad).* os 8_/)) {
                                var c = v.indexOf("\u00ff\u00c2");
                                (0 > c || 65536 < c) && L(b.strings.iOS8WebGLError)
                            }
                            c = v.indexOf("<x:xmpmeta");
                            if (-1 < c && !0 !== b.ignoreGPanoXMP) {
                                var d = v.substring(c, v.indexOf("</x:xmpmeta>") + 12)
                                  , e = function(a) {
                                    var b;
                                    0 <= d.indexOf(a + '="') ? (b = d.substring(d.indexOf(a + '="') + a.length + 2),
                                    b = b.substring(0, b.indexOf('"'))) : 0 <= d.indexOf(a + ">") && (b = d.substring(d.indexOf(a + ">") + a.length + 1),
                                    b = b.substring(0, b.indexOf("<")));
                                    return b !== p ? Number(b) : null
                                }
                                  , v = e("GPano:FullPanoWidthPixels")
                                  , c = e("GPano:CroppedAreaImageWidthPixels")
                                  , f = e("GPano:FullPanoHeightPixels")
                                  , g = e("GPano:CroppedAreaImageHeightPixels")
                                  , k = e("GPano:CroppedAreaTopPixels")
                                  , m = e("GPano:PoseHeadingDegrees")
                                  , l = e("GPano:PosePitchDegrees")
                                  , e = e("GPano:PoseRollDegrees");
                                null !== v && null !== c && null !== f && null !== g && null !== k && (0 > ba.indexOf("haov") && (b.haov = c / v * 360),
                                0 > ba.indexOf("vaov") && (b.vaov = g / f * 180),
                                0 > ba.indexOf("vOffset") && (b.vOffset = -180 * ((k + g / 2) / f - 0.5)),
                                null !== m && 0 > ba.indexOf("northOffset") && (b.northOffset = m,
                                !1 !== b.compass && (b.compass = !0)),
                                null !== l && null !== e && (0 > ba.indexOf("horizonPitch") && (b.horizonPitch = l),
                                0 > ba.indexOf("horizonRoll") && (b.horizonRoll = e)))
                            }
                            R.src = y.URL.createObjectURL(a)
                        });
                        h.readAsBinaryString !== p ? h.readAsBinaryString(a) : h.readAsText(a)
                    }
                    function L(a) {
                        a === p && (a = b.strings.genericWebGLError);
                        q.errorMsg.innerHTML = "<p>" + a + "</p>";
                        u.load.style.display = "none";
                        q.load.box.style.display = "none";
                        q.errorMsg.style.display = "table";
                        La = !0;
                        G = p;
                        N.style.display = "none";
                        C("error", a)
                    }
                    function Aa(a) {
                        var b = Q(a);
                        ga.style.left = b.x + "px";
                        ga.style.top = b.y + "px";
                        clearTimeout(Aa.t1);
                        clearTimeout(Aa.t2);
                        ga.style.display = "block";
                        ga.style.opacity = 1;
                        Aa.t1 = setTimeout(function() {
                            ga.style.opacity = 0
                        }, 2E3);
                        Aa.t2 = setTimeout(function() {
                            ga.style.display = "none"
                        }, 2500);
                        a.preventDefault()
                    }
                    function Q(a) {
                        var b = l.getBoundingClientRect()
                          , v = {};
                        v.x = (a.clientX || a.pageX) - b.left;
                        v.y = (a.clientY || a.pageY) - b.top;
                        return v
                    }
                    function ka(a) {
                        a.preventDefault();
                        l.focus();
                        if (G && b.draggable) {
                            var h = Q(a);
                            if (b.hotSpotDebug) {
                                var v = sa(a);
                                console.log("Pitch: " + v[0] + ", Yaw: " + v[1] + ", Center Pitch: " + b.pitch + ", Center Yaw: " + b.yaw + ", HFOV: " + b.hfov)
                            }
                            s();
                            Ba();
                            b.roll = 0;
                            w.hfov = 0;
                            ia = !0;
                            O = Date.now();
                            wa = h.x;
                            xa = h.y;
                            Ma = b.yaw;
                            Na = b.pitch;
                            K.classList.add("pnlm-grabbing");
                            K.classList.remove("pnlm-grab");
                            C("mousedown", a);
                            F()
                        }
                    }
                    function Ha(a) {
                        b.minHfov === b.hfov ? ea.setHfov(qa, 1E3) : (a = sa(a),
                        ea.lookAt(a[0], a[1], b.minHfov, 1E3))
                    }
                    function sa(a) {
                        var h = Q(a);
                        a = D.getCanvas();
                        var v = a.clientWidth
                          , c = a.clientHeight;
                        a = h.x / v * 2 - 1;
                        var c = (1 - h.y / c * 2) * c / v
                          , d = 1 / Math.tan(b.hfov * Math.PI / 360)
                          , e = Math.sin(b.pitch * Math.PI / 180)
                          , f = Math.cos(b.pitch * Math.PI / 180)
                          , h = d * f - c * e
                          , v = Math.sqrt(a * a + h * h)
                          , c = 180 * Math.atan((c * f + d * e) / v) / Math.PI;
                        a = 180 * Math.atan2(a / v, h / v) / Math.PI + b.yaw;
                        -180 > a && (a += 360);
                        180 < a && (a -= 360);
                        return [c, a]
                    }
                    function ta(a) {
                        if (ia && G) {
                            O = Date.now();
                            var h = D.getCanvas()
                              , v = h.clientWidth
                              , h = h.clientHeight;
                            a = Q(a);
                            var c = 180 * (Math.atan(wa / v * 2 - 1) - Math.atan(a.x / v * 2 - 1)) / Math.PI * b.hfov / 90 + Ma;
                            w.yaw = (c - b.yaw) % 360 * 0.2;
                            b.yaw = c;
                            v = 360 * Math.atan(Math.tan(b.hfov / 360 * Math.PI) * h / v) / Math.PI;
                            v = 180 * (Math.atan(a.y / h * 2 - 1) - Math.atan(xa / h * 2 - 1)) / Math.PI * v / 90 + Na;
                            w.pitch = 0.2 * (v - b.pitch);
                            b.pitch = v
                        }
                    }
                    function ma(a) {
                        ia && (ia = !1,
                        15 < Date.now() - O && (w.pitch = w.yaw = 0),
                        K.classList.add("pnlm-grab"),
                        K.classList.remove("pnlm-grabbing"),
                        O = Date.now(),
                        C("mouseup", a))
                    }
                    function Ia(a) {
                        if (G && b.draggable) {
                            s();
                            Ba();
                            b.roll = 0;
                            w.hfov = 0;
                            var h = Q(a.targetTouches[0]);
                            wa = h.x;
                            xa = h.y;
                            if (2 == a.targetTouches.length) {
                                var v = Q(a.targetTouches[1]);
                                wa += 0.5 * (v.x - h.x);
                                xa += 0.5 * (v.y - h.y);
                                Fa = Math.sqrt((h.x - v.x) * (h.x - v.x) + (h.y - v.y) * (h.y - v.y))
                            }
                            ia = !0;
                            O = Date.now();
                            Ma = b.yaw;
                            Na = b.pitch;
                            C("touchstart", a);
                            F()
                        }
                    }
                    function la(a) {
                        if (b.draggable && (a.preventDefault(),
                        G && (O = Date.now()),
                        ia && G)) {
                            var h = Q(a.targetTouches[0])
                              , v = h.x
                              , c = h.y;
                            2 == a.targetTouches.length && -1 != Fa && (a = Q(a.targetTouches[1]),
                            v += 0.5 * (a.x - h.x),
                            c += 0.5 * (a.y - h.y),
                            h = Math.sqrt((h.x - a.x) * (h.x - a.x) + (h.y - a.y) * (h.y - a.y)),
                            x(b.hfov + 0.1 * (Fa - h)),
                            Fa = h);
                            h = b.hfov / 360 * b.touchPanSpeedCoeffFactor;
                            v = (wa - v) * h + Ma;
                            w.yaw = (v - b.yaw) % 360 * 0.2;
                            b.yaw = v;
                            c = (c - xa) * h + Na;
                            w.pitch = 0.2 * (c - b.pitch);
                            b.pitch = c
                        }
                    }
                    function Ca() {
                        ia = !1;
                        150 < Date.now() - O && (w.pitch = w.yaw = 0);
                        Fa = -1;
                        O = Date.now();
                        C("touchend", event)
                    }
                    function A(a) {
                        "touch" == a.pointerType && G && b.draggable && (ja.push(a.pointerId),
                        ya.push({
                            clientX: a.clientX,
                            clientY: a.clientY
                        }),
                        a.targetTouches = ya,
                        Ia(a),
                        a.preventDefault())
                    }
                    function d(a) {
                        if ("touch" == a.pointerType && b.draggable)
                            for (var h = 0; h < ja.length; h++)
                                if (a.pointerId == ja[h]) {
                                    ya[h].clientX = a.clientX;
                                    ya[h].clientY = a.clientY;
                                    a.targetTouches = ya;
                                    la(a);
                                    a.preventDefault();
                                    break
                                }
                    }
                    function a(a) {
                        if ("touch" == a.pointerType) {
                            for (var b = !1, c = 0; c < ja.length; c++)
                                a.pointerId == ja[c] && (ja[c] = p),
                                ja[c] && (b = !0);
                            b || (ja = [],
                            ya = [],
                            Ca());
                            a.preventDefault()
                        }
                    }
                    function V(a) {
                        G && ("fullscreenonly" != b.mouseZoom || za) && (a.preventDefault(),
                        s(),
                        O = Date.now(),
                        a.wheelDeltaY ? (x(b.hfov - 0.05 * a.wheelDeltaY),
                        w.hfov = 0 > a.wheelDelta ? 1 : -1) : a.wheelDelta ? (x(b.hfov - 0.05 * a.wheelDelta),
                        w.hfov = 0 > a.wheelDelta ? 1 : -1) : a.detail && (x(b.hfov + 1.5 * a.detail),
                        w.hfov = 0 < a.detail ? 1 : -1),
                        F())
                    }
                    function W(a) {
                        s();
                        O = Date.now();
                        Ba();
                        b.roll = 0;
                        var h = a.which || a.keycode;
                        0 > b.capturedKeyNumbers.indexOf(h) || (a.preventDefault(),
                        27 == h ? za && e() : va(h, !0))
                    }
                    function aa() {
                        for (var a = 0; 10 > a; a++)
                            r[a] = !1
                    }
                    function S(a) {
                        var h = a.which || a.keycode;
                        0 > b.capturedKeyNumbers.indexOf(h) || (a.preventDefault(),
                        va(h, !1))
                    }
                    function va(a, b) {
                        var c = !1;
                        switch (a) {
                        case 109:
                        case 189:
                        case 17:
                        case 173:
                            r[0] != b && (c = !0);
                            r[0] = b;
                            break;
                        case 107:
                        case 187:
                        case 16:
                        case 61:
                            r[1] != b && (c = !0);
                            r[1] = b;
                            break;
                        case 38:
                            r[2] != b && (c = !0);
                            r[2] = b;
                            break;
                        case 87:
                            r[6] != b && (c = !0);
                            r[6] = b;
                            break;
                        case 40:
                            r[3] != b && (c = !0);
                            r[3] = b;
                            break;
                        case 83:
                            r[7] != b && (c = !0);
                            r[7] = b;
                            break;
                        case 37:
                            r[4] != b && (c = !0);
                            r[4] = b;
                            break;
                        case 65:
                            r[8] != b && (c = !0);
                            r[8] = b;
                            break;
                        case 39:
                            r[5] != b && (c = !0);
                            r[5] = b;
                            break;
                        case 68:
                            r[9] != b && (c = !0),
                            r[9] = b
                        }
                        c && b && (ca = "undefined" !== typeof performance && performance.now() ? performance.now() : Date.now(),
                        F())
                    }
                    function ha() {
                        if (G) {
                            var a = !1, h = b.pitch, c = b.yaw, d = b.hfov, e;
                            e = "undefined" !== typeof performance && performance.now() ? performance.now() : Date.now();
                            ca === p && (ca = e);
                            var f = (e - ca) * b.hfov / 1700
                              , f = Math.min(f, 1);
                            r[0] && !0 === b.keyboardZoom && (x(b.hfov + (0.8 * w.hfov + 0.5) * f),
                            a = !0);
                            r[1] && !0 === b.keyboardZoom && (x(b.hfov + (0.8 * w.hfov - 0.2) * f),
                            a = !0);
                            if (r[2] || r[6])
                                b.pitch += (0.8 * w.pitch + 0.2) * f,
                                a = !0;
                            if (r[3] || r[7])
                                b.pitch += (0.8 * w.pitch - 0.2) * f,
                                a = !0;
                            if (r[4] || r[8])
                                b.yaw += (0.8 * w.yaw - 0.2) * f,
                                a = !0;
                            if (r[5] || r[9])
                                b.yaw += (0.8 * w.yaw + 0.2) * f,
                                a = !0;
                            a && (O = Date.now());
                            if (b.autoRotate) {
                                if (0.001 < e - ca) {
                                    var a = (e - ca) / 1E3
                                      , g = (w.yaw / a * f - 0.2 * b.autoRotate) * a
                                      , g = (0 < -b.autoRotate ? 1 : -1) * Math.min(Math.abs(b.autoRotate * a), Math.abs(g));
                                    b.yaw += g
                                }
                                b.autoRotateStopDelay && (b.autoRotateStopDelay -= e - ca,
                                0 >= b.autoRotateStopDelay && (b.autoRotateStopDelay = !1,
                                $ = b.autoRotate,
                                b.autoRotate = 0))
                            }
                            P.pitch && (n("pitch"),
                            h = b.pitch);
                            P.yaw && (n("yaw"),
                            c = b.yaw);
                            P.hfov && (n("hfov"),
                            d = b.hfov);
                            0 < f && !b.autoRotate && (a = 1 - b.friction,
                            r[4] || r[5] || r[8] || r[9] || P.yaw || (b.yaw += w.yaw * f * a),
                            r[2] || r[3] || r[6] || r[7] || P.pitch || (b.pitch += w.pitch * f * a),
                            r[0] || r[1] || P.hfov || x(b.hfov + w.hfov * f * a));
                            ca = e;
                            0 < f && (w.yaw = 0.8 * w.yaw + (b.yaw - c) / f * 0.2,
                            w.pitch = 0.8 * w.pitch + (b.pitch - h) / f * 0.2,
                            w.hfov = 0.8 * w.hfov + (b.hfov - d) / f * 0.2,
                            h = b.autoRotate ? Math.abs(b.autoRotate) : 5,
                            w.yaw = Math.min(h, Math.max(w.yaw, -h)),
                            w.pitch = Math.min(h, Math.max(w.pitch, -h)),
                            w.hfov = Math.min(h, Math.max(w.hfov, -h)));
                            r[0] && r[1] && (w.hfov = 0);
                            (r[2] || r[6]) && (r[3] || r[7]) && (w.pitch = 0);
                            (r[4] || r[8]) && (r[5] || r[9]) && (w.yaw = 0)
                        }
                    }
                    function n(a) {
                        var h = P[a]
                          , c = Math.min(1, Math.max((Date.now() - h.startTime) / 1E3 / (h.duration / 1E3), 0))
                          , c = h.startPosition + b.animationTimingFunction(c) * (h.endPosition - h.startPosition);
                        if (h.endPosition > h.startPosition && c >= h.endPosition || h.endPosition < h.startPosition && c <= h.endPosition || h.endPosition === h.startPosition)
                            c = h.endPosition,
                            w[a] = 0,
                            delete P[a];
                        b[a] = c
                    }
                    function z() {
                        g("resize")
                    }
                    function F() {
                        Ta || (Ta = !0,
                        da())
                    }
                    function da() {
                        if (!Za)
                            if (Da(),
                            Oa && clearTimeout(Oa),
                            ia || !0 === Y)
                                requestAnimationFrame(da);
                            else if (r[0] || r[1] || r[2] || r[3] || r[4] || r[5] || r[6] || r[7] || r[8] || r[9] || b.autoRotate || P.pitch || P.yaw || P.hfov || 0.01 < Math.abs(w.yaw) || 0.01 < Math.abs(w.pitch) || 0.01 < Math.abs(w.hfov))
                                ha(),
                                0 <= b.autoRotateInactivityDelay && $ && Date.now() - O > b.autoRotateInactivityDelay && !b.autoRotate && (b.autoRotate = $,
                                ea.lookAt(Ea, p, qa, 3E3)),
                                requestAnimationFrame(da);
                            else if (D && (D.isLoading() || !0 === b.dynamic && Ka))
                                requestAnimationFrame(da);
                            else {
                                C("animatefinished", {
                                    pitch: ea.getPitch(),
                                    yaw: ea.getYaw(),
                                    hfov: ea.getHfov()
                                });
                                Ta = !1;
                                ca = p;
                                var a = b.autoRotateInactivityDelay - (Date.now() - O);
                                0 < a ? Oa = setTimeout(function() {
                                    b.autoRotate = $;
                                    ea.lookAt(Ea, p, qa, 3E3);
                                    F()
                                }, a) : 0 <= b.autoRotateInactivityDelay && $ && (b.autoRotate = $,
                                ea.lookAt(Ea, p, qa, 3E3),
                                F())
                            }
                    }
                    function Da() {
                        var a;
                        if (G) {
                            var h = D.getCanvas();
                            !1 !== b.autoRotate && (360 < b.yaw ? b.yaw -= 360 : -360 > b.yaw && (b.yaw += 360));
                            a = b.yaw;
                            var c = 0;
                            if (b.avoidShowingBackground) {
                                var d = b.hfov / 2
                                  , e = 180 * Math.atan2(Math.tan(d / 180 * Math.PI), h.width / h.height) / Math.PI;
                                b.vaov > b.haov ? Math.min(Math.cos((b.pitch - d) / 180 * Math.PI), Math.cos((b.pitch + d) / 180 * Math.PI)) : c = d * (1 - Math.min(Math.cos((b.pitch - e) / 180 * Math.PI), Math.cos((b.pitch + e) / 180 * Math.PI)))
                            }
                            var d = b.maxYaw - b.minYaw
                              , e = -180
                              , f = 180;
                            360 > d && (e = b.minYaw + b.hfov / 2 + c,
                            f = b.maxYaw - b.hfov / 2 - c,
                            d < b.hfov && (e = f = (e + f) / 2),
                            b.yaw = Math.max(e, Math.min(f, b.yaw)));
                            !1 === b.autoRotate && (360 < b.yaw ? b.yaw -= 360 : -360 > b.yaw && (b.yaw += 360));
                            !1 !== b.autoRotate && a != b.yaw && ca !== p && (b.autoRotate *= -1);
                            a = 2 * Math.atan(Math.tan(b.hfov / 180 * Math.PI * 0.5) / (h.width / h.height)) / Math.PI * 180;
                            h = b.minPitch + a / 2;
                            c = b.maxPitch - a / 2;
                            b.maxPitch - b.minPitch < a && (h = c = (h + c) / 2);
                            isNaN(h) && (h = -90);
                            isNaN(c) && (c = 90);
                            b.pitch = Math.max(h, Math.min(c, b.pitch));
                            D.render(b.pitch * Math.PI / 180, b.yaw * Math.PI / 180, b.hfov * Math.PI / 180, {
                                roll: b.roll * Math.PI / 180
                            });
                            b.hotSpots.forEach(Pa);
                            b.compass && (Ga.style.transform = "rotate(" + (-b.yaw - b.northOffset) + "deg)",
                            Ga.style.webkitTransform = "rotate(" + (-b.yaw - b.northOffset) + "deg)")
                        }
                    }
                    function Z(a, b, c, d) {
                        this.w = a;
                        this.x = b;
                        this.y = c;
                        this.z = d
                    }
                    function na(a) {
                        var h;
                        h = a.alpha;
                        var c = a.beta;
                        a = a.gamma;
                        c = [c ? c * Math.PI / 180 / 2 : 0, a ? a * Math.PI / 180 / 2 : 0, h ? h * Math.PI / 180 / 2 : 0];
                        h = [Math.cos(c[0]), Math.cos(c[1]), Math.cos(c[2])];
                        c = [Math.sin(c[0]), Math.sin(c[1]), Math.sin(c[2])];
                        h = new Z(h[0] * h[1] * h[2] - c[0] * c[1] * c[2],c[0] * h[1] * h[2] - h[0] * c[1] * c[2],h[0] * c[1] * h[2] + c[0] * h[1] * c[2],h[0] * h[1] * c[2] + c[0] * c[1] * h[2]);
                        h = h.multiply(new Z(Math.sqrt(0.5),-Math.sqrt(0.5),0,0));
                        c = y.orientation ? -y.orientation * Math.PI / 180 / 2 : 0;
                        h = h.multiply(new Z(Math.cos(c),0,-Math.sin(c),0)).toEulerAngles();
                        "number" == typeof Y && 10 > Y ? Y += 1 : 10 === Y ? ($a = h[2] / Math.PI * 180 + b.yaw,
                        Y = !0,
                        requestAnimationFrame(da)) : (b.pitch = h[0] / Math.PI * 180,
                        b.roll = -h[1] / Math.PI * 180,
                        b.yaw = -h[2] / Math.PI * 180 + $a)
                    }
                    function ua() {
                        try {
                            var a = {};
                            b.horizonPitch !== p && (a.horizonPitch = b.horizonPitch * Math.PI / 180);
                            b.horizonRoll !== p && (a.horizonRoll = b.horizonRoll * Math.PI / 180);
                            b.backgroundColor !== p && (a.backgroundColor = b.backgroundColor);
                            D.init(R, b.type, b.dynamic, b.haov * Math.PI / 180, b.vaov * Math.PI / 180, b.vOffset * Math.PI / 180, T, a);
                            !0 !== b.dynamic && (R = p)
                        } catch (c) {
                            if ("webgl error" == c.type || "no webgl" == c.type)
                                L();
                            else if ("webgl size error" == c.type)
                                L(b.strings.textureSizeError.replace("%s", c.width).replace("%s", c.maxWidth));
                            else
                                throw L(b.strings.unknownError),
                                c;
                        }
                    }
                    function T() {
                        if (b.sceneFadeDuration && D.fadeImg !== p) {
                            D.fadeImg.style.opacity = 0;
                            var a = D.fadeImg;
                            delete D.fadeImg;
                            setTimeout(function() {
                                N.removeChild(a);
                                C("scenechangefadedone")
                            }, b.sceneFadeDuration)
                        }
                        Ga.style.display = b.compass ? "inline" : "none";
                        M();
                        q.load.box.style.display = "none";
                        ra !== p && (N.removeChild(ra),
                        ra = p);
                        G = !0;
                        C("load");
                        F()
                    }
                    function Ja(a) {
                        a.pitch = Number(a.pitch) || 0;
                        a.yaw = Number(a.yaw) || 0;
                        var h = c.createElement("div");
                        h.className = "pnlm-hotspot-base";
                        h.className = a.cssClass ? h.className + (" " + a.cssClass) : h.className + (" pnlm-hotspot pnlm-sprite pnlm-" + E(a.type));
                        var d = c.createElement("span");
                        a.text && (d.innerHTML = E(a.text));
                        var e;
                        if (a.video) {
                            e = c.createElement("video");
                            var f = a.video;
                            b.basePath && !H(f) && (f = b.basePath + f);
                            e.src = J(f);
                            e.controls = !0;
                            e.style.width = a.width + "px";
                            N.appendChild(h);
                            d.appendChild(e)
                        } else if (a.image) {
                            f = a.image;
                            b.basePath && !H(f) && (f = b.basePath + f);
                            e = c.createElement("a");
                            e.href = J(a.URL ? a.URL : f, !0);
                            e.target = "_blank";
                            d.appendChild(e);
                            var g = c.createElement("img");
                            g.src = J(f);
                            g.style.width = a.width + "px";
                            g.style.paddingTop = "5px";
                            N.appendChild(h);
                            e.appendChild(g);
                            d.style.maxWidth = "initial"
                        } else if (a.URL) {
                            e = c.createElement("a");
                            e.href = J(a.URL, !0);
                            if (a.attributes)
                                for (f in a.attributes)
                                    e.setAttribute(f, a.attributes[f]);
                            else
                                e.target = "_blank";
                            N.appendChild(e);
                            h.className += " pnlm-pointer";
                            d.className += " pnlm-pointer";
                            e.appendChild(h)
                        } else
                            a.sceneId && (h.onclick = h.ontouchend = function() {
                                h.clicked || (h.clicked = !0,
                                B(a.sceneId, a.targetPitch, a.targetYaw, a.targetHfov));
                                return !1
                            }
                            ,
                            h.className += " pnlm-pointer",
                            d.className += " pnlm-pointer"),
                            N.appendChild(h);
                        if (a.createTooltipFunc)
                            a.createTooltipFunc(h, a.createTooltipArgs);
                        else if (a.text || a.video || a.image)
                            h.classList.add("pnlm-tooltip"),
                            h.appendChild(d),
                            d.style.width = d.scrollWidth - 20 + "px",
                            d.style.marginLeft = -(d.scrollWidth - h.offsetWidth) / 2 + "px",
                            d.style.marginTop = -d.scrollHeight - 12 + "px";
                        a.clickHandlerFunc && (h.addEventListener("click", function(b) {
                            a.clickHandlerFunc(b, a.clickHandlerArgs)
                        }, "false"),
                        h.className += " pnlm-pointer",
                        d.className += " pnlm-pointer");
                        a.div = h
                    }
                    function M() {
                        Ua || (b.hotSpots ? (b.hotSpots = b.hotSpots.sort(function(a, b) {
                            return a.pitch < b.pitch
                        }),
                        b.hotSpots.forEach(Ja)) : b.hotSpots = [],
                        Ua = !0,
                        b.hotSpots.forEach(Pa))
                    }
                    function f() {
                        var a = b.hotSpots;
                        Ua = !1;
                        delete b.hotSpots;
                        if (a)
                            for (var c = 0; c < a.length; c++) {
                                var d = a[c].div;
                                if (d) {
                                    for (; d.parentNode && d.parentNode != N; )
                                        d = d.parentNode;
                                    N.removeChild(d)
                                }
                                delete a[c].div
                            }
                    }
                    function Pa(a) {
                        var c = Math.sin(a.pitch * Math.PI / 180)
                          , d = Math.cos(a.pitch * Math.PI / 180)
                          , e = Math.sin(b.pitch * Math.PI / 180)
                          , f = Math.cos(b.pitch * Math.PI / 180)
                          , g = Math.cos((-a.yaw + b.yaw) * Math.PI / 180)
                          , k = c * e + d * g * f;
                        if (90 >= a.yaw && -90 < a.yaw && 0 >= k || (90 < a.yaw || -90 >= a.yaw) && 0 >= k)
                            a.div.style.visibility = "hidden";
                        else {
                            var m = Math.sin((-a.yaw + b.yaw) * Math.PI / 180)
                              , p = Math.tan(b.hfov * Math.PI / 360);
                            a.div.style.visibility = "visible";
                            var l = D.getCanvas()
                              , n = l.clientWidth
                              , l = l.clientHeight
                              , c = [-n / p * m * d / k / 2, -n / p * (c * f - d * g * e) / k / 2]
                              , d = Math.sin(b.roll * Math.PI / 180)
                              , e = Math.cos(b.roll * Math.PI / 180)
                              , c = [c[0] * e - c[1] * d, c[0] * d + c[1] * e];
                            c[0] += (n - a.div.offsetWidth) / 2;
                            c[1] += (l - a.div.offsetHeight) / 2;
                            n = "translate(" + c[0] + "px, " + c[1] + "px) translateZ(9999px) rotate(" + b.roll + "deg)";
                            a.scale && (n += " scale(" + qa / b.hfov / k + ")");
                            a.div.style.webkitTransform = n;
                            a.div.style.MozTransform = n;
                            a.div.style.transform = n
                        }
                    }
                    function I(a) {
                        b = {};
                        var c, d, e = "haov vaov vOffset northOffset horizonPitch horizonRoll".split(" ");
                        ba = [];
                        for (c in Va)
                            Va.hasOwnProperty(c) && (b[c] = Va[c]);
                        for (c in k.default)
                            if (k.default.hasOwnProperty(c))
                                if ("strings" == c)
                                    for (d in k.default.strings)
                                        k.default.strings.hasOwnProperty(d) && (b.strings[d] = E(k.default.strings[d]));
                                else
                                    b[c] = k.default[c],
                                    0 <= e.indexOf(c) && ba.push(c);
                        if (null !== a && "" !== a && k.scenes && k.scenes[a]) {
                            var f = k.scenes[a];
                            for (c in f)
                                if (f.hasOwnProperty(c))
                                    if ("strings" == c)
                                        for (d in f.strings)
                                            f.strings.hasOwnProperty(d) && (b.strings[d] = E(f.strings[d]));
                                    else
                                        b[c] = f[c],
                                        0 <= e.indexOf(c) && ba.push(c);
                            b.scene = a
                        }
                        for (c in k)
                            if (k.hasOwnProperty(c))
                                if ("strings" == c)
                                    for (d in k.strings)
                                        k.strings.hasOwnProperty(d) && (b.strings[d] = E(k.strings[d]));
                                else
                                    b[c] = k[c],
                                    0 <= e.indexOf(c) && ba.push(c)
                    }
                    function m(a) {
                        if ((a = a ? a : !1) && "preview"in b) {
                            var d = b.preview;
                            b.basePath && !H(d) && (d = b.basePath + d);
                            ra = c.createElement("div");
                            ra.className = "pnlm-preview-img";
                            ra.style.backgroundImage = "url('" + J(d).replace(/"/g, "%22").replace(/'/g, "%27") + "')";
                            N.appendChild(ra)
                        }
                        var d = b.title
                          , e = b.author;
                        a && ("previewTitle"in b && (b.title = b.previewTitle),
                        "previewAuthor"in b && (b.author = b.previewAuthor));
                        b.hasOwnProperty("title") || (q.title.innerHTML = "");
                        b.hasOwnProperty("author") || (q.author.innerHTML = "");
                        b.hasOwnProperty("title") || b.hasOwnProperty("author") || (q.container.style.display = "none");
                        u.load.innerHTML = "<p>" + b.strings.loadButtonLabel + "</p>";
                        q.load.boxp.innerHTML = b.strings.loadingLabel;
                        for (var f in b)
                            if (b.hasOwnProperty(f))
                                switch (f) {
                                case "title":
                                    q.title.innerHTML = E(b[f]);
                                    q.container.style.display = "inline";
                                    break;
                                case "author":
                                    var g = E(b[f]);
                                    b.authorURL && (g = c.createElement("a"),
                                    g.href = J(b.authorURL, !0),
                                    g.target = "_blank",
                                    g.innerHTML = E(b[f]),
                                    g = g.outerHTML);
                                    q.author.innerHTML = b.strings.bylineLabel.replace("%s", g);
                                    q.container.style.display = "inline";
                                    break;
                                case "fallback":
                                    g = c.createElement("a");
                                    g.href = J(b[f], !0);
                                    g.target = "_blank";
                                    g.textContent = "Click here to view this panorama in an alternative viewer.";
                                    var k = c.createElement("p");
                                    k.textContent = "Your browser does not support WebGL.";
                                    k.appendChild(c.createElement("br"));
                                    k.appendChild(g);
                                    q.errorMsg.innerHTML = "";
                                    q.errorMsg.appendChild(k);
                                    break;
                                case "hfov":
                                    x(Number(b[f]));
                                    break;
                                case "autoLoad":
                                    !0 === b[f] && D === p && (q.load.box.style.display = "inline",
                                    u.load.style.display = "none",
                                    oa());
                                    break;
                                case "showZoomCtrl":
                                    u.zoom.style.display = b[f] && !1 != b.showControls ? "block" : "none";
                                    break;
                                case "showFullscreenCtrl":
                                    u.fullscreen.style.display = b[f] && !1 != b.showControls && ("fullscreen"in c || "mozFullScreen"in c || "webkitIsFullScreen"in c || "msFullscreenElement"in c) ? "block" : "none";
                                    break;
                                case "hotSpotDebug":
                                    Wa.style.display = b[f] ? "block" : "none";
                                    break;
                                case "showControls":
                                    b[f] || (u.orientation.style.display = "none",
                                    u.zoom.style.display = "none",
                                    u.fullscreen.style.display = "none");
                                    break;
                                case "orientationOnByDefault":
                                    b[f] && Qa()
                                }
                        a && (d ? b.title = d : delete b.title,
                        e ? b.author = e : delete b.author)
                    }
                    function e() {
                        if (G && !La)
                            if (za)
                                c.exitFullscreen ? c.exitFullscreen() : c.mozCancelFullScreen ? c.mozCancelFullScreen() : c.webkitCancelFullScreen ? c.webkitCancelFullScreen() : c.msExitFullscreen && c.msExitFullscreen();
                            else
                                try {
                                    l.requestFullscreen ? l.requestFullscreen() : l.mozRequestFullScreen ? l.mozRequestFullScreen() : l.msRequestFullscreen ? l.msRequestFullscreen() : l.webkitRequestFullScreen()
                                } catch (a) {}
                    }
                    function g(a) {
                        c.fullscreenElement || c.fullscreen || c.mozFullScreen || c.webkitIsFullScreen || c.msFullscreenElement ? (u.fullscreen.classList.add("pnlm-fullscreen-toggle-button-active"),
                        za = !0) : (u.fullscreen.classList.remove("pnlm-fullscreen-toggle-button-active"),
                        za = !1);
                        "resize" !== a && C("fullscreenchange", za);
                        D.resize();
                        x(b.hfov);
                        F()
                    }
                    function t(a) {
                        var c = b.minHfov;
                        "multires" == b.type && D && !b.multiResMinHfov && (c = Math.min(c, D.getCanvas().width / (b.multiRes.cubeResolution / 90 * 0.9)));
                        if (c > b.maxHfov)
                            return console.log("HFOV bounds do not make sense (minHfov > maxHfov)."),
                            b.hfov;
                        var d = b.hfov
                          , d = a < c ? c : a > b.maxHfov ? b.maxHfov : a;
                        b.avoidShowingBackground && D && (a = D.getCanvas(),
                        d = Math.min(d, 360 * Math.atan(Math.tan((b.maxPitch - b.minPitch) / 360 * Math.PI) / a.height * a.width) / Math.PI));
                        return d
                    }
                    function x(a) {
                        b.hfov = t(a);
                        C("zoomchange", b.hfov)
                    }
                    function s() {
                        P = {};
                        $ = b.autoRotate ? b.autoRotate : $;
                        b.autoRotate = !1
                    }
                    function Ya() {
                        La && (q.load.box.style.display = "none",
                        q.errorMsg.style.display = "none",
                        La = !1,
                        N.style.display = "block",
                        C("errorcleared"));
                        G = !1;
                        u.load.style.display = "none";
                        q.load.box.style.display = "inline";
                        oa()
                    }
                    function B(a, c, d, e, g) {
                        G || (g = !0);
                        G = !1;
                        P = {};
                        var n, l;
                        if (b.sceneFadeDuration && !g && (n = D.render(b.pitch * Math.PI / 180, b.yaw * Math.PI / 180, b.hfov * Math.PI / 180, {
                            returnImage: !0
                        }),
                        n !== p)) {
                            g = new Image;
                            g.className = "pnlm-fade-img";
                            g.style.transition = "opacity " + b.sceneFadeDuration / 1E3 + "s";
                            g.style.width = "100%";
                            g.style.height = "100%";
                            g.onload = function() {
                                B(a, c, d, e, !0)
                            }
                            ;
                            g.src = n;
                            N.appendChild(g);
                            D.fadeImg = g;
                            return
                        }
                        g = "same" === c ? b.pitch : c;
                        n = "same" === d ? b.yaw : "sameAzimuth" === d ? b.yaw + (b.northOffset || 0) - (k.scenes[a].northOffset || 0) : d;
                        l = "same" === e ? b.hfov : e;
                        f();
                        I(a);
                        w.yaw = w.pitch = w.hfov = 0;
                        m();
                        g !== p && (b.pitch = g);
                        n !== p && (b.yaw = n);
                        l !== p && (b.hfov = l);
                        C("scenechange", a);
                        Ya()
                    }
                    function Ba() {
                        y.removeEventListener("deviceorientation", na);
                        u.orientation.classList.remove("pnlm-orientation-button-active");
                        Y = !1
                    }
                    function Qa() {
                        "function" === typeof DeviceMotionEvent.requestPermission ? DeviceOrientationEvent.requestPermission().then(function(a) {
                            "granted" == a && (Y = 1,
                            y.addEventListener("deviceorientation", na),
                            u.orientation.classList.add("pnlm-orientation-button-active"))
                        }) : (Y = 1,
                        y.addEventListener("deviceorientation", na),
                        u.orientation.classList.add("pnlm-orientation-button-active"))
                    }
                    function E(a) {
                        return k.escapeHTML ? String(a).split(/&/g).join("&amp;").split('"').join("&quot;").split("'").join("&#39;").split("<").join("&lt;").split(">").join("&gt;").split("/").join("&#x2f;").split("\n").join("<br>") : String(a).split("\n").join("<br>")
                    }
                    function J(a, b) {
                        try {
                            var c = decodeURIComponent(ab(a)).replace(/[^\w:]/g, "").toLowerCase()
                        } catch (d) {
                            return "about:blank"
                        }
                        return 0 === c.indexOf("javascript:") || 0 === c.indexOf("vbscript:") ? (console.log("Script URL removed."),
                        "about:blank") : b && 0 === c.indexOf("data:") ? (console.log("Data URI removed from link."),
                        "about:blank") : a
                    }
                    function ab(a) {
                        return a.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig, function(a, b) {
                            b = b.toLowerCase();
                            return "colon" === b ? ":" : "#" === b.charAt(0) ? "x" === b.charAt(1) ? String.fromCharCode(parseInt(b.substring(2), 16)) : String.fromCharCode(+b.substring(1)) : ""
                        })
                    }
                    function C(a) {
                        if (a in U)
                            for (var b = U[a].length; 0 < b; b--)
                                U[a][U[a].length - b].apply(null, [].slice.call(arguments, 1))
                    }
                    var ea = this, b, D, ra, ia = !1, O = Date.now(), wa = 0, xa = 0, Fa = -1, Ma = 0, Na = 0, r = Array(10), za = !1, G, La = !1, Sa = !1, R, ca, w = {
                        yaw: 0,
                        pitch: 0,
                        hfov: 0
                    }, Ta = !1, Y = !1, $a = 0, Oa, $ = 0, qa, Ea, P = {}, U = {}, ba = [], Ka = !1, Ua = !1, Za = !1, Va = {
                        hfov: 100,
                        minHfov: 50,
                        multiResMinHfov: !1,
                        maxHfov: 120,
                        pitch: 0,
                        minPitch: p,
                        maxPitch: p,
                        yaw: 0,
                        minYaw: -180,
                        maxYaw: 180,
                        roll: 0,
                        haov: 360,
                        vaov: 180,
                        vOffset: 0,
                        autoRotate: !1,
                        autoRotateInactivityDelay: -1,
                        autoRotateStopDelay: p,
                        type: "equirectangular",
                        northOffset: 0,
                        showFullscreenCtrl: !0,
                        dynamic: !1,
                        dynamicUpdate: !1,
                        doubleClickZoom: !0,
                        keyboardZoom: !0,
                        mouseZoom: !0,
                        showZoomCtrl: !0,
                        autoLoad: !1,
                        showControls: !0,
                        orientationOnByDefault: !1,
                        hotSpotDebug: !1,
                        backgroundColor: [0, 0, 0],
                        avoidShowingBackground: !1,
                        animationTimingFunction: function(a) {
                            return 0.5 > a ? 2 * a * a : -1 + (4 - 2 * a) * a
                        },
                        draggable: !0,
                        disableKeyboardCtrl: !1,
                        crossOrigin: "anonymous",
                        touchPanSpeedCoeffFactor: 1,
                        capturedKeyNumbers: [16, 17, 27, 37, 38, 39, 40, 61, 65, 68, 83, 87, 107, 109, 173, 187, 189],
                        friction: 0.15,
                        strings: {
                            loadButtonLabel: "Click to<br>Load<br>Panorama",
                            loadingLabel: "Loading...",
                            bylineLabel: "by %s",
                            noPanoramaError: "No panorama image was specified.",
                            fileAccessError: "The file %s could not be accessed.",
                            malformedURLError: "There is something wrong with the panorama URL.",
                            iOS8WebGLError: "Due to iOS 8's broken WebGL implementation, only progressive encoded JPEGs work for your device (this panorama uses standard encoding).",
                            genericWebGLError: "Your browser does not have the necessary WebGL support to display this panorama.",
                            textureSizeError: "This panorama is too big for your device! It's %spx wide, but your device only supports images up to %spx wide. Try another device. (If you're the author, try scaling down the image.)",
                            unknownError: "Unknown error. Check developer console."
                        }
                    };
                    l = "string" === typeof l ? c.getElementById(l) : l;
                    l.classList.add("pnlm-container");
                    l.tabIndex = 0;
                    var K = c.createElement("div");
                    K.className = "pnlm-ui";
                    l.appendChild(K);
                    var N = c.createElement("div");
                    N.className = "pnlm-render-container";
                    l.appendChild(N);
                    var X = c.createElement("div");
                    X.className = "pnlm-dragfix";
                    K.appendChild(X);
                    var ga = c.createElement("span");
                    ga.className = "pnlm-about-msg";
                    ga.innerHTML = '<a href="https://pannellum.org/" target="_blank">Pannellum</a> 2.5.6';
                    K.appendChild(ga);
                    X.addEventListener("contextmenu", Aa);
                    var q = {}
                      , Wa = c.createElement("div");
                    Wa.className = "pnlm-sprite pnlm-hot-spot-debug-indicator";
                    K.appendChild(Wa);
                    q.container = c.createElement("div");
                    q.container.className = "pnlm-panorama-info";
                    q.title = c.createElement("div");
                    q.title.className = "pnlm-title-box";
                    q.container.appendChild(q.title);
                    q.author = c.createElement("div");
                    q.author.className = "pnlm-author-box";
                    q.container.appendChild(q.author);
                    K.appendChild(q.container);
                    q.load = {};
                    q.load.box = c.createElement("div");
                    q.load.box.className = "pnlm-load-box";
                    q.load.boxp = c.createElement("p");
                    q.load.box.appendChild(q.load.boxp);
                    q.load.lbox = c.createElement("div");
                    q.load.lbox.className = "pnlm-lbox";
                    q.load.lbox.innerHTML = '<div class="pnlm-loading"></div>';
                    q.load.box.appendChild(q.load.lbox);
                    q.load.lbar = c.createElement("div");
                    q.load.lbar.className = "pnlm-lbar";
                    q.load.lbarFill = c.createElement("div");
                    q.load.lbarFill.className = "pnlm-lbar-fill";
                    q.load.lbar.appendChild(q.load.lbarFill);
                    q.load.box.appendChild(q.load.lbar);
                    q.load.msg = c.createElement("p");
                    q.load.msg.className = "pnlm-lmsg";
                    q.load.box.appendChild(q.load.msg);
                    K.appendChild(q.load.box);
                    q.errorMsg = c.createElement("div");
                    q.errorMsg.className = "pnlm-error-msg pnlm-info-box";
                    K.appendChild(q.errorMsg);
                    var u = {};
                    u.container = c.createElement("div");
                    u.container.className = "pnlm-controls-container";
                    K.appendChild(u.container);
                    u.load = c.createElement("div");
                    u.load.className = "pnlm-load-button";
                    u.load.addEventListener("click", function() {
                        m();
                        Ya()
                    });
                    K.appendChild(u.load);
                    u.zoom = c.createElement("div");
                    u.zoom.className = "pnlm-zoom-controls pnlm-controls";
                    u.zoomIn = c.createElement("div");
                    u.zoomIn.className = "pnlm-zoom-in pnlm-sprite pnlm-control";
                    u.zoomIn.addEventListener("click", function() {
                        G && (x(b.hfov - 5),
                        F())
                    });
                    u.zoom.appendChild(u.zoomIn);
                    u.zoomOut = c.createElement("div");
                    u.zoomOut.className = "pnlm-zoom-out pnlm-sprite pnlm-control";
                    u.zoomOut.addEventListener("click", function() {
                        G && (x(b.hfov + 5),
                        F())
                    });
                    u.zoom.appendChild(u.zoomOut);
                    u.container.appendChild(u.zoom);
                    u.fullscreen = c.createElement("div");
                    u.fullscreen.addEventListener("click", e);
                    u.fullscreen.className = "pnlm-fullscreen-toggle-button pnlm-sprite pnlm-fullscreen-toggle-button-inactive pnlm-controls pnlm-control";
                    (c.fullscreenEnabled || c.mozFullScreenEnabled || c.webkitFullscreenEnabled || c.msFullscreenEnabled) && u.container.appendChild(u.fullscreen);
                    u.orientation = c.createElement("div");
                    u.orientation.addEventListener("click", function(a) {
                        Y ? Ba() : Qa()
                    });
                    u.orientation.addEventListener("mousedown", function(a) {
                        a.stopPropagation()
                    });
                    u.orientation.addEventListener("touchstart", function(a) {
                        a.stopPropagation()
                    });
                    u.orientation.addEventListener("pointerdown", function(a) {
                        a.stopPropagation()
                    });
                    u.orientation.className = "pnlm-orientation-button pnlm-orientation-button-inactive pnlm-sprite pnlm-controls pnlm-control";
                    var Xa = !1;
                    y.DeviceOrientationEvent && "https:" == location.protocol && 0 <= navigator.userAgent.toLowerCase().indexOf("mobi") && (u.container.appendChild(u.orientation),
                    Xa = !0);
                    var Ga = c.createElement("div");
                    Ga.className = "pnlm-compass pnlm-controls pnlm-control";
                    K.appendChild(Ga);
                    k.firstScene ? I(k.firstScene) : k.default && k.default.firstScene ? I(k.default.firstScene) : I(null);
                    m(!0);
                    var ja = []
                      , ya = [];
                    Z.prototype.multiply = function(a) {
                        return new Z(this.w * a.w - this.x * a.x - this.y * a.y - this.z * a.z,this.x * a.w + this.w * a.x + this.y * a.z - this.z * a.y,this.y * a.w + this.w * a.y + this.z * a.x - this.x * a.z,this.z * a.w + this.w * a.z + this.x * a.y - this.y * a.x)
                    }
                    ;
                    Z.prototype.toEulerAngles = function() {
                        var a = Math.atan2(2 * (this.w * this.x + this.y * this.z), 1 - 2 * (this.x * this.x + this.y * this.y))
                          , b = Math.asin(2 * (this.w * this.y - this.z * this.x))
                          , c = Math.atan2(2 * (this.w * this.z + this.x * this.y), 1 - 2 * (this.y * this.y + this.z * this.z));
                        return [a, b, c]
                    }
                    ;
                    this.isLoaded = function() {
                        return Boolean(G)
                    }
                    ;
                    this.getPitch = function() {
                        return b.pitch
                    }
                    ;
                    this.setPitch = function(a, c, d, e) {
                        O = Date.now();
                        if (1E-6 >= Math.abs(a - b.pitch))
                            return "function" == typeof d && d(e),
                            this;
                        (c = c == p ? 1E3 : Number(c)) ? (P.pitch = {
                            startTime: Date.now(),
                            startPosition: b.pitch,
                            endPosition: a,
                            duration: c
                        },
                        "function" == typeof d && setTimeout(function() {
                            d(e)
                        }, c)) : b.pitch = a;
                        F();
                        return this
                    }
                    ;
                    this.getPitchBounds = function() {
                        return [b.minPitch, b.maxPitch]
                    }
                    ;
                    this.setPitchBounds = function(a) {
                        b.minPitch = Math.max(-90, Math.min(a[0], 90));
                        b.maxPitch = Math.max(-90, Math.min(a[1], 90));
                        return this
                    }
                    ;
                    this.getYaw = function() {
                        return (b.yaw + 540) % 360 - 180
                    }
                    ;
                    this.setYaw = function(a, c, d, e) {
                        O = Date.now();
                        if (1E-6 >= Math.abs(a - b.yaw))
                            return "function" == typeof d && d(e),
                            this;
                        c = c == p ? 1E3 : Number(c);
                        a = (a + 180) % 360 - 180;
                        c ? (180 < b.yaw - a ? a += 360 : 180 < a - b.yaw && (a -= 360),
                        P.yaw = {
                            startTime: Date.now(),
                            startPosition: b.yaw,
                            endPosition: a,
                            duration: c
                        },
                        "function" == typeof d && setTimeout(function() {
                            d(e)
                        }, c)) : b.yaw = a;
                        F();
                        return this
                    }
                    ;
                    this.getYawBounds = function() {
                        return [b.minYaw, b.maxYaw]
                    }
                    ;
                    this.setYawBounds = function(a) {
                        b.minYaw = Math.max(-360, Math.min(a[0], 360));
                        b.maxYaw = Math.max(-360, Math.min(a[1], 360));
                        return this
                    }
                    ;
                    this.getHfov = function() {
                        return b.hfov
                    }
                    ;
                    this.setHfov = function(a, c, d, e) {
                        O = Date.now();
                        if (1E-6 >= Math.abs(a - b.hfov))
                            return "function" == typeof d && d(e),
                            this;
                        (c = c == p ? 1E3 : Number(c)) ? (P.hfov = {
                            startTime: Date.now(),
                            startPosition: b.hfov,
                            endPosition: t(a),
                            duration: c
                        },
                        "function" == typeof d && setTimeout(function() {
                            d(e)
                        }, c)) : x(a);
                        F();
                        return this
                    }
                    ;
                    this.getHfovBounds = function() {
                        return [b.minHfov, b.maxHfov]
                    }
                    ;
                    this.setHfovBounds = function(a) {
                        b.minHfov = Math.max(0, a[0]);
                        b.maxHfov = Math.max(0, a[1]);
                        return this
                    }
                    ;
                    this.lookAt = function(a, c, d, e, f, g) {
                        e = e == p ? 1E3 : Number(e);
                        a !== p && 1E-6 < Math.abs(a - b.pitch) && (this.setPitch(a, e, f, g),
                        f = p);
                        c !== p && 1E-6 < Math.abs(c - b.yaw) && (this.setYaw(c, e, f, g),
                        f = p);
                        d !== p && 1E-6 < Math.abs(d - b.hfov) && (this.setHfov(d, e, f, g),
                        f = p);
                        "function" == typeof f && f(g);
                        return this
                    }
                    ;
                    this.getNorthOffset = function() {
                        return b.northOffset
                    }
                    ;
                    this.setNorthOffset = function(a) {
                        b.northOffset = Math.min(360, Math.max(0, a));
                        F();
                        return this
                    }
                    ;
                    this.getHorizonRoll = function() {
                        return b.horizonRoll
                    }
                    ;
                    this.setHorizonRoll = function(a) {
                        b.horizonRoll = Math.min(90, Math.max(-90, a));
                        D.setPose(b.horizonPitch * Math.PI / 180, b.horizonRoll * Math.PI / 180);
                        F();
                        return this
                    }
                    ;
                    this.getHorizonPitch = function() {
                        return b.horizonPitch
                    }
                    ;
                    this.setHorizonPitch = function(a) {
                        b.horizonPitch = Math.min(90, Math.max(-90, a));
                        D.setPose(b.horizonPitch * Math.PI / 180, b.horizonRoll * Math.PI / 180);
                        F();
                        return this
                    }
                    ;
                    this.startAutoRotate = function(a, c) {
                        a = a || $ || 1;
                        c = c === p ? Ea : c;
                        b.autoRotate = a;
                        ea.lookAt(c, p, qa, 3E3);
                        F();
                        return this
                    }
                    ;
                    this.stopAutoRotate = function() {
                        $ = b.autoRotate ? b.autoRotate : $;
                        b.autoRotate = !1;
                        b.autoRotateInactivityDelay = -1;
                        return this
                    }
                    ;
                    this.stopMovement = function() {
                        s();
                        w = {
                            yaw: 0,
                            pitch: 0,
                            hfov: 0
                        }
                    }
                    ;
                    this.getRenderer = function() {
                        return D
                    }
                    ;
                    this.setUpdate = function(a) {
                        Ka = !0 === a;
                        D === p ? pa() : F();
                        return this
                    }
                    ;
                    this.mouseEventToCoords = function(a) {
                        return sa(a)
                    }
                    ;
                    this.loadScene = function(a, b, c, d) {
                        !1 !== G && B(a, b, c, d);
                        return this
                    }
                    ;
                    this.getScene = function() {
                        return b.scene
                    }
                    ;
                    this.addScene = function(a, b) {
                        k.scenes[a] = b;
                        return this
                    }
                    ;
                    this.removeScene = function(a) {
                        if (b.scene === a || !k.scenes.hasOwnProperty(a))
                            return !1;
                        delete k.scenes[a];
                        return !0
                    }
                    ;
                    this.toggleFullscreen = function() {
                        e();
                        return this
                    }
                    ;
                    this.getConfig = function() {
                        return b
                    }
                    ;
                    this.getContainer = function() {
                        return l
                    }
                    ;
                    this.addHotSpot = function(a, c) {
                        if (c === p && b.scene === p)
                            b.hotSpots.push(a);
                        else {
                            var d = c !== p ? c : b.scene;
                            if (k.scenes.hasOwnProperty(d))
                                k.scenes[d].hasOwnProperty("hotSpots") || (k.scenes[d].hotSpots = [],
                                d == b.scene && (b.hotSpots = k.scenes[d].hotSpots)),
                                k.scenes[d].hotSpots.push(a);
                            else
                                throw "Invalid scene ID!";
                        }
                        if (c === p || b.scene == c)
                            Ja(a),
                            G && Pa(a);
                        return this
                    }
                    ;
                    this.removeHotSpot = function(a, c) {
                        if (c === p || b.scene == c) {
                            if (!b.hotSpots)
                                return !1;
                            for (var d = 0; d < b.hotSpots.length; d++)
                                if (b.hotSpots[d].hasOwnProperty("id") && b.hotSpots[d].id === a) {
                                    for (var e = b.hotSpots[d].div; e.parentNode != N; )
                                        e = e.parentNode;
                                    N.removeChild(e);
                                    delete b.hotSpots[d].div;
                                    b.hotSpots.splice(d, 1);
                                    return !0
                                }
                        } else if (k.scenes.hasOwnProperty(c)) {
                            if (!k.scenes[c].hasOwnProperty("hotSpots"))
                                return !1;
                            for (d = 0; d < k.scenes[c].hotSpots.length; d++)
                                if (k.scenes[c].hotSpots[d].hasOwnProperty("id") && k.scenes[c].hotSpots[d].id === a)
                                    return k.scenes[c].hotSpots.splice(d, 1),
                                    !0
                        } else
                            return !1
                    }
                    ;
                    this.resize = function() {
                        D && z()
                    }
                    ;
                    this.isLoaded = function() {
                        return G
                    }
                    ;
                    this.isOrientationSupported = function() {
                        return Xa || !1
                    }
                    ;
                    this.stopOrientation = function() {
                        Ba()
                    }
                    ;
                    this.startOrientation = function() {
                        Xa && Qa()
                    }
                    ;
                    this.isOrientationActive = function() {
                        return Boolean(Y)
                    }
                    ;
                    this.on = function(a, b) {
                        U[a] = U[a] || [];
                        U[a].push(b);
                        return this
                    }
                    ;
                    this.off = function(a, b) {
                        if (!a)
                            return U = {},
                            this;
                        if (b) {
                            var c = U[a].indexOf(b);
                            0 <= c && U[a].splice(c, 1);
                            0 == U[a].length && delete U[a]
                        } else
                            delete U[a];
                        return this
                    }
                    ;
                    this.destroy = function() {
                        Za = !0;
                        clearTimeout(Oa);
                        D && D.destroy();
                        Sa && (c.removeEventListener("mousemove", ta, !1),
                        c.removeEventListener("mouseup", ma, !1),
                        l.removeEventListener("mozfullscreenchange", g, !1),
                        l.removeEventListener("webkitfullscreenchange", g, !1),
                        l.removeEventListener("msfullscreenchange", g, !1),
                        l.removeEventListener("fullscreenchange", g, !1),
                        y.removeEventListener("resize", z, !1),
                        y.removeEventListener("orientationchange", z, !1),
                        l.removeEventListener("keydown", W, !1),
                        l.removeEventListener("keyup", S, !1),
                        l.removeEventListener("blur", aa, !1),
                        c.removeEventListener("mouseleave", ma, !1));
                        l.innerHTML = "";
                        l.classList.remove("pnlm-container")
                    }
                }
                return {
                    viewer: function(c, k) {
                        return new H(c,k)
                    }
                }
            }(window, document);
            function anError(y) {
                var c = document.createElement("div");
                c.className = "pnlm-info-box";
                var p = document.createElement("p");
                p.textContent = y;
                c.appendChild(p);
                document.getElementById("container").appendChild(c)
            }
            var viewer;
            function parseURLParameters() {
                var y;
                if (y = 0 < window.location.hash.length ? window.location.hash.slice(1) : window.location.search.slice(1)) {
                    y = y.split("&");
                    for (var c = {}, p = 0; p < y.length; p++) {
                        var H = y[p].split("=")[0]
                          , l = y[p].split("=")[1];
                        if ("" != l)
                            switch (H) {
                            case "hfov":
                            case "pitch":
                            case "yaw":
                            case "haov":
                            case "vaov":
                            case "minHfov":
                            case "maxHfov":
                            case "minPitch":
                            case "maxPitch":
                            case "minYaw":
                            case "maxYaw":
                            case "vOffset":
                            case "autoRotate":
                                c[H] = Number(l);
                                break;
                            case "autoLoad":
                            case "ignoreGPanoXMP":
                                c[H] = JSON.parse(l);
                                break;
                            case "author":
                            case "title":
                            case "firstScene":
                            case "fallback":
                            case "preview":
                            case "panorama":
                            case "config":
                                c[H] = decodeURIComponent(l);
                                break;
                            default:
                                anError("An invalid configuration parameter was specified: " + H);
                                return
                            }
                    }
                    var k;
                    c.config ? (k = new XMLHttpRequest,
                    k.onload = function() {
                        if (200 != k.status) {
                            var l = document.createElement("a");
                            l.href = c.config;
                            l.textContent = l.href;
                            anError("The file " + l.outerHTML + " could not be accessed.")
                        } else {
                            l = JSON.parse(k.responseText);
                            void 0 === l.basePath && (l.basePath = c.config.substring(0, c.config.lastIndexOf("/") + 1));
                            for (var p in l)
                                c.hasOwnProperty(p) || (c[p] = l[p]);
                            "title"in c && (document.title = c.title);
                            c.escapeHTML = !0;
                            viewer = pannellum.viewer("container", c)
                        }
                    }
                    ,
                    k.open("GET", c.config),
                    k.send()) : ("title"in c && (document.title = c.title),
                    c.escapeHTML = !0,
                    viewer = pannellum.viewer("container", c))
                } else
                    anError("No configuration options were specified.")
            }
            "file:" == window.location.protocol ? anError("Due to browser security restrictions, Pannellum can't be run from the local filesystem; some sort of web server must be used.") : parseURLParameters();
        </script>
    </body>
</html>

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages