reactionview 0.0.1 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE.txt +21 -0
- data/README.md +39 -9
- data/Rakefile +7 -1
- data/app/assets/javascripts/reactionview-dev-tools.esm.js +1786 -0
- data/app/assets/javascripts/reactionview-dev-tools.esm.js.map +1 -0
- data/app/assets/javascripts/reactionview-dev-tools.umd.js +1796 -0
- data/app/assets/javascripts/reactionview-dev-tools.umd.js.map +1 -0
- data/lib/generators/reactionview/install_generator.rb +44 -0
- data/lib/reaction_view.rb +3 -0
- data/lib/reactionview/config.rb +39 -0
- data/lib/reactionview/railtie.rb +25 -0
- data/lib/reactionview/template/handlers/erb.rb +19 -0
- data/lib/reactionview/template/handlers/herb/herb.rb +92 -0
- data/lib/reactionview/template/handlers/herb.rb +44 -0
- data/lib/reactionview/version.rb +1 -1
- data/lib/reactionview.rb +21 -0
- data/reactionview.gemspec +39 -0
- metadata +56 -10
- data/.rubocop.yml +0 -13
- data/CODE_OF_CONDUCT.md +0 -132
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"reactionview-dev-tools.umd.js","sources":["../../../node_modules/@herb-tools/dev-tools/dist/herb-dev-tools.esm.js","../../../javascript/packages/dev-tools/src/index.ts"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar css_248z = \".herb-overlay-label{background:rgba(0,0,0,.8);border-radius:3px;color:#fff;cursor:pointer;display:block;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,monospace;font-size:11px;font-weight:500;left:4px;line-height:1.2;padding:2px 6px;position:absolute;top:-18px;transition:all .2s ease;white-space:nowrap;z-index:1000}.herb-overlay-label:hover{background:rgba(0,0,0,.9);color:#374151;transform:scale(1.02);z-index:1001}[data-herb-debug-outline-type*=view]>.herb-overlay-label{background:#dbeafe;border-color:#93c5fd;color:#1e40af}[data-herb-debug-outline-type*=partial]>.herb-overlay-label{background:#d1fae5;border-color:#6ee7b7;color:#065f46}[data-herb-debug-outline-type*=component]>.herb-overlay-label{background:#fef3c7;border-color:#fcd34d;color:#92400e}[data-herb-debug-outline-type*=erb-output]{transition:all .3s ease}.herb-tooltip{background:#fff;border:1px solid #e5e7eb;border-radius:12px;box-shadow:0 10px 40px rgba(0,0,0,.12),0 2px 8px rgba(0,0,0,.08);display:flex;flex-direction:column;font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;font-size:14px;gap:12px;max-width:calc(100vw - 16px);opacity:0;overflow:visible;padding:16px 20px;pointer-events:none;position:fixed;transition:opacity .2s ease,visibility .2s ease;visibility:hidden;white-space:nowrap;z-index:10001}.herb-tooltip.visible{opacity:1;pointer-events:auto;visibility:visible}.herb-tooltip .herb-location{align-items:center;background:#f8f9fa;border-radius:12px 12px 0 0;color:#6b7280;cursor:pointer;display:flex;font-size:13px;font-weight:500;gap:12px;justify-content:space-between;margin:-16px -20px 0;padding:12px 20px;transition:all .2s ease}.herb-tooltip .herb-location:hover{background:#f1f3f4;color:#374151}.herb-copy-path-btn{background:transparent;border:none;border-radius:4px;color:#6b7280;cursor:pointer;flex-shrink:0;font-size:14px;padding:4px;position:relative;transition:all .2s ease}.herb-copy-path-btn:hover{background:hsla(220,9%,46%,.1);color:#374151}.herb-copy-path-btn:active{transform:scale(.95)}.herb-location:after{background:#1f2937;border-radius:6px;bottom:calc(100% + 8px);color:#fff;content:attr(data-tooltip);font-size:12px;padding:6px 10px;pointer-events:none;white-space:nowrap}.herb-location:after,.herb-location:before{left:50%;opacity:0;position:absolute;transform:translateX(-50%);transition:all .2s ease;visibility:hidden;z-index:10002}.herb-location:before{border:4px solid transparent;border-top-color:#1f2937;bottom:calc(100% + 2px);content:\\\"\\\"}.herb-location:hover:after,.herb-location:hover:before{opacity:1;visibility:visible}.herb-location:has(.herb-copy-path-btn:hover):after,.herb-location:has(.herb-copy-path-btn:hover):before{opacity:0!important;visibility:hidden!important}.herb-copy-path-btn:after{background:#1f2937;border-radius:6px;color:#fff;content:attr(data-tooltip);font-size:12px;padding:6px 10px;pointer-events:none;top:-36px;white-space:nowrap}.herb-copy-path-btn:after,.herb-copy-path-btn:before{left:50%;opacity:0;position:absolute;transform:translateX(-50%);transition:all .2s ease;visibility:hidden;z-index:10003}.herb-copy-path-btn:before{border:4px solid transparent;border-bottom-color:#1f2937;content:\\\"\\\";top:-6px}.herb-copy-path-btn:hover:after,.herb-copy-path-btn:hover:before{opacity:1;visibility:visible}.herb-tooltip .herb-erb-code{color:#111827;cursor:text;font-size:16px;font-weight:600;letter-spacing:-.025em;user-select:text}.herb-tooltip:before{bottom:-8px;content:\\\"\\\";height:8px;left:0;pointer-events:auto;position:absolute;right:0}.herb-tooltip:after{border:6px solid transparent;border-top-color:#e5e7eb;bottom:-6px;content:\\\"\\\";left:50%;pointer-events:none;position:absolute;transform:translateX(-50%);z-index:10000}.herb-floating-menu{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;position:fixed;right:0;top:0;z-index:2147483643}.herb-menu-trigger{align-items:center;background:#fff;border:1px solid silver;border-radius:0 0 0 10px;border-right:none;border-top:none;box-shadow:0 1px 3px rgba(0,0,0,.1);cursor:pointer;display:flex;font-size:12px;gap:4px;justify-content:center;padding:4px 7px;position:relative;transition:all .2s ease;z-index:2147483640}.herb-menu-trigger:hover{background:#f9fafb;border-color:#9ca3af;box-shadow:0 4px 12px rgba(0,0,0,.15)}.herb-menu-trigger:active{transform:scale(.98)}.herb-menu-trigger.has-active-options{background:#dbeafe;border-color:#3b82f6}.herb-menu-trigger.has-active-options:hover{background:#bfdbfe;border-color:#2563eb}.herb-menu-trigger.has-active-options .herb-text{color:#1d4ed8}.herb-icon{display:block;font-size:14px;line-height:1}.herb-text{color:#555;font-size:11px;font-weight:600;letter-spacing:.2px}.herb-menu-panel{background:#fff;border:1px solid silver;border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,.1);min-width:280px;opacity:0;padding:0;position:absolute;right:10px;top:28px;transform:translateY(-10px) scale(.95);transform-origin:top right;transition:all .3s cubic-bezier(.4,0,.2,1);visibility:hidden}.herb-menu-panel.open{opacity:1;transform:translateY(0) scale(1);visibility:visible}.herb-menu-header{background:#f9fafb;border-bottom:1px solid #e5e7eb;border-radius:8px 8px 0 0;color:#374151;font-size:14px;font-weight:600;padding:16px 20px}.herb-toggle-item{border-bottom:1px solid #f3f4f6;padding:12px 20px}.herb-toggle-item:last-child{border-bottom:none;border-radius:0 0 8px 8px}.herb-nested-toggle{border-left:2px solid #f3f4f6;margin-top:8px;padding-left:24px;transition:all .3s ease}.herb-nested-label{opacity:.8}.herb-nested-label .herb-toggle-text{color:#6b7280;font-size:13px}.herb-nested-switch{background:#e5e7eb;height:20px;width:36px}.herb-nested-switch:after{height:14px;left:3px;top:3px;width:14px}.herb-toggle-input:checked+.herb-nested-switch:after{transform:translateX(16px)}.herb-toggle-label{align-items:center;cursor:pointer;display:flex;gap:12px;user-select:none}.herb-toggle-input{display:none}.herb-toggle-switch{background:#cbd5e1;border-radius:12px;flex-shrink:0;height:24px;position:relative;transition:background .3s ease;width:44px}.herb-toggle-switch:after{background:#fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2);content:\\\"\\\";height:18px;left:3px;position:absolute;top:3px;transition:transform .3s ease;width:18px}.herb-toggle-input:checked+.herb-toggle-switch{background:#8b5cf6}.herb-toggle-input:checked+.herb-toggle-switch:after{transform:translateX(20px)}.herb-toggle-text{color:#374151;flex:1;font-size:14px}.herb-toggle-label:hover .herb-toggle-switch{background:#94a3b8}.herb-toggle-label:hover .herb-toggle-input:checked+.herb-toggle-switch{background:#7c3aed}.herb-disable-all-section{background:#f9fafb;border-radius:0 0 8px 8px;border-top:1px solid #f3f4f6;padding:16px 20px}.herb-disable-all-btn{background:#ef4444;border:none;border-radius:6px;color:#fff;cursor:pointer;font-size:13px;font-weight:500;padding:8px 16px;transition:background .2s ease;width:100%}.herb-disable-all-btn:hover{background:#dc2626}.herb-disable-all-btn:active{background:#b91c1c}.herb-validation-overlay{align-items:center;backdrop-filter:blur(4px);background:rgba(0,0,0,.8);bottom:0;color:#e5e5e5;display:flex;font-family:SF Mono,Monaco,Cascadia Code,Roboto Mono,Consolas,Courier New,monospace;justify-content:center;left:0;line-height:1.6;overflow-y:auto;padding:20px;position:fixed;right:0;top:0;z-index:2147483640}.herb-validation-panel{background:#000;border:1px solid #374151;border-radius:12px;box-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04);display:flex;flex-direction:column;max-height:80vh;max-width:1200px;overflow:hidden;width:100%}.herb-validation-header{align-items:flex-start;background:linear-gradient(135deg,#dc2626,#b91c1c);border-bottom:1px solid #374151;border-radius:12px 12px 0 0;color:#fff;display:flex;flex-shrink:0;gap:16px;justify-content:space-between;padding:20px 24px}.herb-validation-title{font-size:18px;font-weight:600;margin:0}.herb-validation-close{align-items:center;background:hsla(0,0%,100%,.1);border:1px solid hsla(0,0%,100%,.2);border-radius:6px;color:#fff;cursor:pointer;display:flex;flex-shrink:0;font-size:16px;height:32px;justify-content:center;padding:0;transition:all .2s;width:32px}.herb-validation-close:hover{background:hsla(0,0%,100%,.2);border-color:hsla(0,0%,100%,.3)}.herb-file-tabs{background:#262626;border-bottom:1px solid #374151;display:flex;flex-shrink:0;overflow-x:auto}.herb-file-tab{background:none;border:none;border-bottom:3px solid transparent;color:#9ca3af;cursor:pointer;font-size:14px;font-weight:500;padding:12px 16px;transition:all .2s ease;white-space:nowrap}.herb-file-tab:hover{background:#2d2d2d;color:#e5e5e5}.herb-file-tab.active{background:#374151;border-bottom-color:#3b82f6;color:#fff}.herb-validation-content{flex:1;overflow-y:auto;padding:24px}.herb-validator-section{margin-bottom:32px}.herb-validator-section:last-child{margin-bottom:0}.herb-validator-section.hidden{display:none}.herb-validator-header{align-items:center;background:#262626;border-bottom:1px solid #374151;border-radius:8px 8px 0 0;color:#e5e5e5;display:flex;font-size:16px;font-weight:600;justify-content:space-between;padding:12px 16px}.herb-validator-count{background:hsla(0,0%,100%,.2);border-radius:12px;font-size:14px;font-weight:500;padding:2px 8px}.herb-validator-items{background:#111;border:1px solid #374151;border-radius:0 0 8px 8px;border-top:none}.herb-validation-item{background:#111;border-bottom:1px solid #374151;padding:20px}.herb-validation-item:last-child{border-bottom:none;border-radius:0 0 8px 8px}.herb-validation-item.hidden{display:none}.herb-validation-item .herb-validation-header{align-items:center;background:#1a1a1a;border:none;border-bottom:1px solid #374151;color:#9ca3af;display:flex;font-size:13px;gap:12px;margin:-20px -20px 16px;padding:12px 16px}.herb-validation-badge{border-radius:4px;color:#fff;font-size:12px;font-weight:600;letter-spacing:.025em;padding:4px 8px;text-transform:uppercase}.herb-validation-location{color:#9ca3af;font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;font-size:13px}.herb-validation-message{background:#1a1a1a;border-bottom:1px solid #374151;color:#fbbf24;font-size:13px;font-weight:500;line-height:1.4;margin:-16px -16px 16px;padding:12px 16px}.herb-code-snippet{background:#1f2937;border-radius:6px;font-family:SF Mono,Monaco,Inconsolata,Fira Code,monospace;margin-bottom:16px;overflow:hidden}.herb-code-line{align-items:stretch;display:flex}.herb-code-line.herb-error-line{background:rgba(239,68,68,.1)}.herb-validation-overlay .herb-line-number{background:#374151;border-right:1px solid #4b5563;color:#9ca3af;flex-shrink:0;font-size:13px;padding:8px 12px;text-align:right;user-select:none;width:40px}.herb-validation-overlay .herb-error-line .herb-line-number{background:#dc2626;color:#fff}.herb-validation-overlay .herb-line-content{color:#e5e7eb;flex:1;font-size:13px;padding:8px 16px;white-space:pre-wrap}.herb-validation-overlay .herb-error-pointer{background:#1f2937;color:#dc2626;font-size:13px;font-weight:700;padding:4px 16px 8px 57px}.herb-validation-suggestion{align-items:flex-start;background:#111;border:1px solid #374151;border-radius:6px;color:#d1d5db;display:flex;font-size:14px;gap:8px;margin-top:16px;padding:12px 16px}.herb-suggestion-icon{color:#10b981;flex-shrink:0;font-size:16px;margin-top:1px}.herb-erb{color:#fbbf24;font-weight:600}.herb-erb-content{color:#34d399}.herb-tag{color:#60a5fa;font-weight:500}.herb-attr{color:#f472b6}.herb-value{color:#a78bfa}.herb-comment{color:#6b7280;font-style:italic}\";\nstyleInject(css_248z);\n\nclass ErrorOverlay {\n constructor() {\n this.overlay = null;\n this.allValidationData = [];\n this.isVisible = false;\n this.init();\n }\n init() {\n this.detectValidationErrors();\n const hasParserErrors = document.querySelector('.herb-parser-error-overlay') !== null;\n if (this.getTotalErrorCount() > 0) {\n this.createOverlay();\n this.setupToggleHandler();\n }\n else if (hasParserErrors) {\n console.log('[ErrorOverlay] Parser error overlay already displayed');\n }\n else {\n console.log('[ErrorOverlay] No errors found, not creating overlay');\n }\n }\n detectValidationErrors() {\n const templatesToRemove = [];\n const validationTemplates = document.querySelectorAll('template[data-herb-validation-error]');\n if (validationTemplates.length > 0) {\n this.processValidationTemplates(validationTemplates, templatesToRemove);\n }\n const jsonTemplates = document.querySelectorAll('template[data-herb-validation-errors]');\n jsonTemplates.forEach((template, _index) => {\n try {\n let jsonData = template.textContent?.trim();\n if (!jsonData) {\n jsonData = template.innerHTML?.trim();\n }\n if (jsonData) {\n const validationData = JSON.parse(jsonData);\n this.allValidationData.push(validationData);\n templatesToRemove.push(template);\n }\n }\n catch (error) {\n console.error('Failed to parse validation errors from template:', error, {\n textContent: template.textContent,\n innerHTML: template.innerHTML\n });\n templatesToRemove.push(template);\n }\n });\n const htmlTemplates = document.querySelectorAll('template[data-herb-parser-error]');\n htmlTemplates.forEach((template, _index) => {\n try {\n let htmlContent = template.innerHTML?.trim() || template.textContent?.trim();\n if (htmlContent) {\n this.displayParserErrorOverlay(htmlContent);\n templatesToRemove.push(template);\n }\n }\n catch (error) {\n console.error('Failed to process parser error template:', error);\n templatesToRemove.push(template);\n }\n });\n templatesToRemove.forEach((template, _index) => template.remove());\n }\n processValidationTemplates(templates, templatesToRemove) {\n const validationFragments = [];\n const errorMap = new Map();\n templates.forEach((template) => {\n try {\n const metadata = {\n severity: template.getAttribute('data-severity') || 'error',\n source: template.getAttribute('data-source') || 'unknown',\n code: template.getAttribute('data-code') || '',\n line: parseInt(template.getAttribute('data-line') || '0'),\n column: parseInt(template.getAttribute('data-column') || '0'),\n filename: template.getAttribute('data-filename') || 'unknown',\n message: template.getAttribute('data-message') || '',\n suggestion: template.getAttribute('data-suggestion') || undefined,\n timestamp: template.getAttribute('data-timestamp') || new Date().toISOString()\n };\n const html = template.innerHTML?.trim() || '';\n if (html) {\n const errorKey = `${metadata.filename}:${metadata.line}:${metadata.column}:${metadata.code}:${metadata.message}`;\n if (errorMap.has(errorKey)) {\n const existing = errorMap.get(errorKey);\n existing.count++;\n }\n else {\n errorMap.set(errorKey, { metadata, html, count: 1 });\n }\n templatesToRemove.push(template);\n }\n }\n catch (error) {\n console.error('Failed to process validation template:', error);\n templatesToRemove.push(template);\n }\n });\n validationFragments.push(...errorMap.values());\n if (validationFragments.length > 0) {\n this.displayValidationOverlay(validationFragments);\n }\n }\n createOverlay() {\n if (this.allValidationData.length === 0)\n return;\n this.overlay = document.createElement('div');\n this.overlay.id = 'herb-error-overlay';\n this.overlay.innerHTML = `\n <style>\n #herb-error-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.8);\n z-index: 10000;\n display: none;\n overflow: auto;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n }\n\n .herb-error-content {\n background: #1a1a1a;\n margin: 20px auto;\n padding: 20px;\n border-radius: 8px;\n max-width: 800px;\n color: #fff;\n }\n\n .herb-error-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 20px;\n border-bottom: 1px solid #333;\n padding-bottom: 10px;\n }\n\n .herb-error-title {\n font-size: 18px;\n font-weight: 600;\n color: #ff6b6b;\n }\n\n .herb-error-close {\n background: none;\n border: none;\n color: #fff;\n font-size: 20px;\n cursor: pointer;\n padding: 5px;\n }\n\n .herb-error-file-section {\n margin-bottom: 20px;\n }\n\n .herb-error-file {\n font-size: 14px;\n color: #888;\n margin-bottom: 10px;\n font-weight: 600;\n }\n\n .herb-error-item {\n background: #2a2a2a;\n border-radius: 6px;\n padding: 15px;\n margin-bottom: 10px;\n border-left: 4px solid #ff6b6b;\n }\n\n .herb-error-item.warning {\n border-left-color: #ffd93d;\n }\n\n .herb-error-item.info {\n border-left-color: #4ecdc4;\n }\n\n .herb-error-item.hint {\n border-left-color: #95a5a6;\n }\n\n .herb-error-message {\n font-size: 14px;\n margin-bottom: 8px;\n line-height: 1.4;\n }\n\n .herb-error-location {\n font-size: 12px;\n color: #888;\n margin-bottom: 8px;\n }\n\n .herb-error-suggestion {\n font-size: 12px;\n color: #4ecdc4;\n font-style: italic;\n }\n\n .herb-error-source {\n font-size: 11px;\n color: #666;\n text-align: right;\n }\n\n .herb-file-separator {\n border-top: 1px solid #444;\n margin: 20px 0;\n }\n </style>\n\n <div class=\"herb-error-content\">\n <div class=\"herb-error-header\">\n <div class=\"herb-error-title\">\n Errors (${this.getTotalErrorCount()})\n </div>\n <button class=\"herb-error-close\">×</button>\n </div>\n\n <div class=\"herb-error-files\">\n ${this.allValidationData.map((validationData, index) => `\n ${index > 0 ? '<div class=\"herb-file-separator\"></div>' : ''}\n <div class=\"herb-error-file-section\">\n <div class=\"herb-error-file\">${validationData.filename} (${this.getErrorSummary(validationData.validationErrors)})</div>\n <div class=\"herb-error-list\">\n ${validationData.validationErrors.map(error => `\n <div class=\"herb-error-item ${error.severity}\">\n <div class=\"herb-error-message\">${this.escapeHtml(error.message)}</div>\n ${error.location ? `<div class=\"herb-error-location\">Line ${error.location.line}, Column ${error.location.column}</div>` : ''}\n ${error.suggestion ? `<div class=\"herb-error-suggestion\">💡 ${this.escapeHtml(error.suggestion)}</div>` : ''}\n <div class=\"herb-error-source\">${error.source}${error.code ? ` (${error.code})` : ''}</div>\n </div>\n `).join('')}\n </div>\n </div>\n `).join('')}\n </div>\n </div>\n `;\n document.body.appendChild(this.overlay);\n const closeBtn = this.overlay.querySelector('.herb-error-close');\n closeBtn?.addEventListener('click', () => this.hide());\n this.overlay.addEventListener('click', (e) => {\n if (e.target === this.overlay) {\n this.hide();\n }\n });\n document.addEventListener('keydown', (e) => {\n if (e.key === 'Escape' && this.isVisible) {\n this.hide();\n }\n });\n }\n setupToggleHandler() {\n document.addEventListener('keydown', (e) => {\n if ((e.ctrlKey || e.metaKey) && e.shiftKey && e.key === 'E') {\n e.preventDefault();\n this.toggle();\n }\n });\n if (this.hasErrorSeverity()) {\n setTimeout(() => this.show(), 100);\n }\n }\n getTotalErrorCount() {\n return this.allValidationData.reduce((total, data) => total + data.validationErrors.length, 0);\n }\n getErrorSummary(errors) {\n if (errors.length === 1) {\n return '1 error';\n }\n const errorsBySource = errors.reduce((acc, error) => {\n const source = error.source || 'Unknown';\n acc[source] = (acc[source] || 0) + 1;\n return acc;\n }, {});\n const sourceKeys = Object.keys(errorsBySource);\n if (sourceKeys.length === 1) {\n const source = sourceKeys[0];\n const count = errorsBySource[source];\n const sourceLabel = this.getSourceLabel(source);\n return `${count} ${sourceLabel} error${count === 1 ? '' : 's'}`;\n }\n else {\n const parts = sourceKeys.map(source => {\n const count = errorsBySource[source];\n const sourceLabel = this.getSourceLabel(source);\n return `${count} ${sourceLabel}`;\n });\n return `${errors.length} errors (${parts.join(', ')})`;\n }\n }\n getSourceLabel(source) {\n switch (source) {\n case 'Parser': return 'parser';\n case 'SecurityValidator': return 'security';\n case 'NestingValidator': return 'nesting';\n case 'AccessibilityValidator': return 'accessibility';\n default: return 'validation';\n }\n }\n hasErrorSeverity() {\n return this.allValidationData.some(data => data.validationErrors.some(error => error.severity === 'error'));\n }\n escapeHtml(unsafe) {\n return unsafe\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n }\n show() {\n if (this.overlay) {\n this.overlay.style.display = 'block';\n this.isVisible = true;\n }\n }\n hide() {\n if (this.overlay) {\n this.overlay.style.display = 'none';\n this.isVisible = false;\n }\n }\n toggle() {\n if (this.isVisible) {\n this.hide();\n }\n else {\n this.show();\n }\n }\n hasErrors() {\n return this.getTotalErrorCount() > 0;\n }\n getErrorCount() {\n return this.getTotalErrorCount();\n }\n displayParserErrorOverlay(htmlContent) {\n const existingOverlay = document.querySelector('.herb-parser-error-overlay');\n if (existingOverlay) {\n existingOverlay.remove();\n }\n const container = document.createElement('div');\n container.innerHTML = htmlContent;\n const overlay = container.querySelector('.herb-parser-error-overlay');\n if (overlay) {\n document.body.appendChild(overlay);\n overlay.style.display = 'flex';\n }\n else {\n console.error('[ErrorOverlay] No parser error overlay found in HTML template');\n }\n }\n displayValidationOverlay(fragments) {\n const existingOverlay = document.querySelector('.herb-validation-overlay');\n if (existingOverlay) {\n existingOverlay.remove();\n }\n const errorsBySource = new Map();\n const errorsByFile = new Map();\n fragments.forEach(fragment => {\n const source = fragment.metadata.source;\n if (!errorsBySource.has(source)) {\n errorsBySource.set(source, []);\n }\n errorsBySource.get(source).push(fragment);\n const file = fragment.metadata.filename;\n if (!errorsByFile.has(file)) {\n errorsByFile.set(file, []);\n }\n errorsByFile.get(file).push(fragment);\n });\n const errorCount = fragments.filter(f => f.metadata.severity === 'error').reduce((sum, f) => sum + f.count, 0);\n const warningCount = fragments.filter(f => f.metadata.severity === 'warning').reduce((sum, f) => sum + f.count, 0);\n const totalCount = fragments.reduce((sum, f) => sum + f.count, 0);\n const uniqueCount = fragments.length;\n const overlayHTML = this.buildValidationOverlayHTML(fragments, errorsBySource, errorsByFile, { errorCount, warningCount, totalCount, uniqueCount });\n const overlay = document.createElement('div');\n overlay.className = 'herb-validation-overlay';\n overlay.innerHTML = overlayHTML;\n document.body.appendChild(overlay);\n this.setupValidationOverlayHandlers(overlay);\n }\n buildValidationOverlayHTML(_fragments, errorsBySource, errorsByFile, counts) {\n let title = counts.uniqueCount === 1 ? 'Validation Issue' : `Validation Issues`;\n if (counts.totalCount !== counts.uniqueCount) {\n title += ` (${counts.uniqueCount} unique, ${counts.totalCount} total)`;\n }\n else {\n title += ` (${counts.totalCount})`;\n }\n const subtitle = [];\n if (counts.errorCount > 0)\n subtitle.push(`${counts.errorCount} error${counts.errorCount !== 1 ? 's' : ''}`);\n if (counts.warningCount > 0)\n subtitle.push(`${counts.warningCount} warning${counts.warningCount !== 1 ? 's' : ''}`);\n let fileTabs = '';\n if (errorsByFile.size > 1) {\n const totalErrors = Array.from(errorsByFile.values()).reduce((sum, errors) => sum + errors.length, 0);\n fileTabs = `\n <div class=\"herb-file-tabs\">\n <button class=\"herb-file-tab active\" data-file=\"*\">\n All (${totalErrors})\n </button>\n ${Array.from(errorsByFile.entries()).map(([file, errors]) => `\n <button class=\"herb-file-tab\" data-file=\"${this.escapeAttr(file)}\">\n ${this.escapeHtml(file)} (${errors.length})\n </button>\n `).join('')}\n </div>\n `;\n }\n const contentSections = Array.from(errorsBySource.entries()).map(([source, sourceFragments]) => `\n <div class=\"herb-validator-section\" data-source=\"${this.escapeAttr(source)}\">\n <div class=\"herb-validator-header\">\n <h3>${this.escapeHtml(source.replace('Validator', ''))} Issues (${sourceFragments.length})</h3>\n </div>\n <div class=\"herb-validator-content\">\n ${sourceFragments.map(f => {\n const fileAttribute = `data-error-file=\"${this.escapeAttr(f.metadata.filename)}\"`;\n if (f.count > 1) {\n return `\n <div class=\"herb-validation-item-wrapper\" ${fileAttribute}>\n ${f.html}\n <div class=\"herb-occurrence-badge\" title=\"This error occurs ${f.count} times in the template\">\n <span class=\"herb-occurrence-icon\">⚠</span>\n <span class=\"herb-occurrence-count\">×${f.count}</span>\n </div>\n </div>\n `;\n }\n return `<div class=\"herb-validation-error-container\" ${fileAttribute}>${f.html}</div>`;\n }).join('')}\n </div>\n </div>\n `).join('');\n return `\n <style>${this.getValidationOverlayStyles()}</style>\n <div class=\"herb-validation-container\">\n <div class=\"herb-validation-header\">\n <div class=\"herb-validation-header-content\">\n <div class=\"herb-validation-title\">\n <span class=\"herb-validation-icon\">⚠️</span>\n ${title}\n </div>\n <div class=\"herb-validation-subtitle\">${subtitle.join(', ')}</div>\n </div>\n <button class=\"herb-close-button\" title=\"Close (Esc)\">×</button>\n </div>\n ${fileTabs}\n <div class=\"herb-validation-content\">\n ${contentSections}\n </div>\n <div class=\"herb-dismiss-hint\" style=\"padding-left: 24px; padding-right: 24px; padding-bottom: 12px;\">\n Click outside, press <kbd style=\"display: inline-block; padding: 2px 6px; font-family: monospace; font-size: 0.9em; color: #333; background: #f7f7f7; border: 1px solid #ccc; border-radius: 4px; box-shadow: 0 2px 0 #ccc, 0 2px 3px rgba(0,0,0,0.2) inset;\">Esc</kbd> key, or fix the code to dismiss.<br>\n\n You can also disable this overlay by passing <code style=\"color: #ffeb3b; font-family: monospace; font-size: 12pt;\">validation_mode: :none</code> to <code style=\"color: #ffeb3b; font-family: monospace; font-size: 12pt;\">Herb::Engine</code>.\n </div>\n </div>\n `;\n }\n getValidationOverlayStyles() {\n return `\n .herb-validation-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.8);\n backdrop-filter: blur(4px);\n z-index: 9999;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px;\n font-family: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, 'Courier New', monospace;\n color: #e5e5e5;\n line-height: 1.6;\n }\n\n .herb-validation-container {\n background: #000000;\n border: 1px solid #374151;\n border-radius: 12px;\n box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n max-width: 1200px;\n max-height: 80vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .herb-validation-header {\n background: linear-gradient(135deg, #f59e0b, #d97706);\n padding: 20px 24px;\n border-bottom: 1px solid #374151;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n }\n\n .herb-validation-title {\n font-size: 18px;\n font-weight: 600;\n color: white;\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .herb-validation-subtitle {\n font-size: 14px;\n color: rgba(255, 255, 255, 0.9);\n margin-top: 4px;\n }\n\n .herb-file-tabs {\n background: #1a1a1a;\n border-bottom: 1px solid #374151;\n padding: 0;\n display: flex;\n overflow-x: auto;\n }\n\n .herb-file-tab {\n background: transparent;\n border: none;\n color: #9ca3af;\n padding: 12px 20px;\n cursor: pointer;\n font-size: 13px;\n white-space: nowrap;\n transition: all 0.2s;\n border-bottom: 2px solid transparent;\n }\n\n .herb-file-tab:hover {\n background: #262626;\n color: #e5e5e5;\n }\n\n .herb-file-tab.active {\n color: #f59e0b;\n border-bottom-color: #f59e0b;\n background: #262626;\n }\n\n .herb-validation-content {\n flex: 1;\n overflow-y: auto;\n padding: 24px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .herb-validator-section {\n background: #0f0f0f;\n border: 1px solid #2d2d2d;\n border-radius: 8px;\n }\n\n .herb-validator-header {\n background: #1a1a1a;\n padding: 12px 16px;\n border-bottom: 1px solid #2d2d2d;\n }\n\n .herb-validator-header h3 {\n margin: 0;\n font-size: 14px;\n font-weight: 500;\n color: #e5e5e5;\n }\n\n .herb-validator-content {\n padding: 16px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n }\n\n .herb-validation-item {\n border-left: 3px solid #4a4a4a;\n padding-left: 16px;\n }\n\n .herb-validation-item[data-severity=\"error\"] {\n border-left-color: #7f1d1d;\n }\n\n .herb-validation-item[data-severity=\"warning\"] {\n border-left-color: #78350f;\n }\n\n .herb-validation-item[data-severity=\"info\"] {\n border-left-color: #1e3a8a;\n }\n\n .herb-validation-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n }\n\n .herb-validation-badge {\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n color: white;\n text-transform: uppercase;\n }\n\n .herb-validation-location {\n font-size: 12px;\n color: #9ca3af;\n }\n\n .herb-validation-message {\n font-size: 14px;\n margin-bottom: 12px;\n line-height: 1.5;\n }\n\n .herb-code-snippet {\n background: #1a1a1a;\n border: 1px solid #2d2d2d;\n border-radius: 4px;\n padding: 12px;\n overflow-x: auto;\n }\n\n .herb-code-line {\n display: flex;\n align-items: flex-start;\n min-height: 20px;\n font-size: 13px;\n line-height: 1.5;\n }\n\n .herb-line-number {\n color: #6b7280;\n width: 40px;\n text-align: right;\n padding-right: 16px;\n user-select: none;\n flex-shrink: 0;\n }\n\n .herb-line-content {\n flex: 1;\n white-space: pre;\n font-family: inherit;\n }\n\n .herb-error-line {\n background: rgba(220, 38, 38, 0.1);\n }\n\n .herb-error-line .herb-line-number {\n color: #dc2626;\n font-weight: 600;\n }\n\n .herb-error-pointer {\n color: #dc2626;\n font-weight: bold;\n margin-left: 56px;\n font-size: 12px;\n }\n\n .herb-validation-suggestion {\n background: #1e3a1e;\n border: 1px solid #10b981;\n border-radius: 4px;\n padding: 8px 12px;\n margin-top: 8px;\n font-size: 13px;\n color: #10b981;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .herb-validation-item-wrapper,\n .herb-validation-error-container {\n position: relative;\n }\n\n .herb-validation-error-container.hidden,\n .herb-validation-item-wrapper.hidden,\n .herb-validator-section.hidden {\n display: none;\n }\n\n .herb-occurrence-badge {\n position: absolute;\n top: 8px;\n right: 8px;\n background: #dc2626;\n color: white;\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 4px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);\n }\n\n .herb-occurrence-icon {\n font-size: 10px;\n }\n\n .herb-occurrence-count {\n font-weight: bold;\n }\n\n .herb-close-button {\n background: rgba(255, 255, 255, 0.1);\n border: 1px solid rgba(255, 255, 255, 0.2);\n color: white;\n width: 32px;\n height: 32px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n font-size: 16px;\n transition: all 0.2s;\n }\n\n .herb-close-button:hover {\n background: rgba(255, 255, 255, 0.2);\n border-color: rgba(255, 255, 255, 0.3);\n }\n\n /* Syntax highlighting */\n .herb-erb { color: #61dafb; }\n .herb-erb-content { color: #c678dd; }\n .herb-tag { color: #e06c75; }\n .herb-attr { color: #d19a66; }\n .herb-value { color: #98c379; }\n .herb-comment { color: #5c6370; font-style: italic; }\n `;\n }\n setupValidationOverlayHandlers(overlay) {\n const closeBtn = overlay.querySelector('.herb-close-button');\n if (closeBtn) {\n closeBtn.addEventListener('click', () => overlay.remove());\n }\n overlay.addEventListener('click', (e) => {\n if (e.target === overlay) {\n overlay.remove();\n }\n });\n const escHandler = (e) => {\n if (e.key === 'Escape') {\n overlay.remove();\n document.removeEventListener('keydown', escHandler);\n }\n };\n document.addEventListener('keydown', escHandler);\n const fileTabs = overlay.querySelectorAll('.herb-file-tab');\n fileTabs.forEach(tab => {\n tab.addEventListener('click', () => {\n const selectedFile = tab.getAttribute('data-file');\n fileTabs.forEach(t => t.classList.remove('active'));\n tab.classList.add('active');\n const errorContainers = overlay.querySelectorAll('[data-error-file]');\n const validatorSections = overlay.querySelectorAll('.herb-validator-section');\n errorContainers.forEach(container => {\n const containerFile = container.getAttribute('data-error-file');\n if (selectedFile === '*' || containerFile === selectedFile) {\n container.classList.remove('hidden');\n }\n else {\n container.classList.add('hidden');\n }\n });\n validatorSections.forEach(section => {\n const sectionContent = section.querySelector('.herb-validator-content');\n const visibleErrors = sectionContent?.querySelectorAll('[data-error-file]:not(.hidden)').length || 0;\n const header = section.querySelector('h3');\n const source = section.getAttribute('data-source')?.replace('Validator', '') || 'Unknown';\n if (header) {\n header.textContent = `${source} Issues (${visibleErrors})`;\n }\n if (visibleErrors === 0) {\n section.classList.add('hidden');\n }\n else {\n section.classList.remove('hidden');\n }\n });\n });\n });\n }\n escapeAttr(text) {\n return this.escapeHtml(text).replace(/\"/g, '"');\n }\n}\n\nclass HerbOverlay {\n constructor(options = {}) {\n this.options = options;\n this.showingERB = false;\n this.showingERBOutlines = false;\n this.showingERBHoverReveal = false;\n this.showingTooltips = true;\n this.showingViewOutlines = false;\n this.showingPartialOutlines = false;\n this.showingComponentOutlines = false;\n this.menuOpen = false;\n this.projectPath = '';\n this.currentlyHoveredERBElement = null;\n this.errorOverlay = null;\n this.handleRevealedERBClick = (event) => {\n event.stopPropagation();\n event.preventDefault();\n const element = event.currentTarget;\n if (!element)\n return;\n const fullPath = element.getAttribute('data-herb-debug-file-full-path');\n const line = element.getAttribute('data-herb-debug-line');\n const column = element.getAttribute('data-herb-debug-column');\n if (fullPath) {\n this.openFileInEditor(fullPath, line ? parseInt(line) : 1, column ? parseInt(column) : 1);\n }\n };\n if (options.autoInit !== false) {\n this.init();\n }\n }\n init() {\n this.loadProjectPath();\n this.loadSettings();\n this.injectMenu();\n this.setupMenuToggle();\n this.setupToggleSwitches();\n this.initializeErrorOverlay();\n this.setupTurboListeners();\n this.applySettings();\n }\n loadProjectPath() {\n if (this.options.projectPath) {\n this.projectPath = this.options.projectPath;\n return;\n }\n const metaTag = document.querySelector('meta[name=\"herb-project-path\"]');\n if (metaTag?.content) {\n this.projectPath = metaTag.content;\n }\n }\n loadSettings() {\n const savedSettings = localStorage.getItem(HerbOverlay.SETTINGS_KEY);\n if (savedSettings) {\n try {\n const settings = JSON.parse(savedSettings);\n this.showingERB = settings.showingERB || false;\n this.showingERBOutlines = settings.showingERBOutlines || false;\n this.showingERBHoverReveal = settings.showingERBHoverReveal || false;\n this.showingTooltips = settings.showingTooltips !== undefined ? settings.showingTooltips : true;\n this.showingViewOutlines = settings.showingViewOutlines || false;\n this.showingPartialOutlines = settings.showingPartialOutlines || false;\n this.showingComponentOutlines = settings.showingComponentOutlines || false;\n this.menuOpen = settings.menuOpen || false;\n }\n catch (e) {\n console.warn('Failed to load Herb dev tools settings:', e);\n }\n }\n }\n saveSettings() {\n const settings = {\n showingERB: this.showingERB,\n showingERBOutlines: this.showingERBOutlines,\n showingERBHoverReveal: this.showingERBHoverReveal,\n showingTooltips: this.showingTooltips,\n showingViewOutlines: this.showingViewOutlines,\n showingPartialOutlines: this.showingPartialOutlines,\n showingComponentOutlines: this.showingComponentOutlines,\n menuOpen: this.menuOpen\n };\n localStorage.setItem(HerbOverlay.SETTINGS_KEY, JSON.stringify(settings));\n this.updateMenuButtonState();\n }\n updateMenuButtonState() {\n const menuTrigger = document.getElementById('herbMenuTrigger');\n if (menuTrigger) {\n const hasActiveOptions = this.showingERB || this.showingERBOutlines || this.showingViewOutlines || this.showingPartialOutlines || this.showingComponentOutlines;\n if (hasActiveOptions) {\n menuTrigger.classList.add('has-active-options');\n }\n else {\n menuTrigger.classList.remove('has-active-options');\n }\n }\n }\n injectMenu() {\n const existingMenu = document.querySelector('.herb-floating-menu');\n if (existingMenu) {\n return;\n }\n const menuHTML = `\n <div class=\"herb-floating-menu\">\n <button class=\"herb-menu-trigger\" id=\"herbMenuTrigger\">\n <span class=\"herb-icon\">🌿</span>\n <span class=\"herb-text\">Herb</span>\n </button>\n\n <div class=\"herb-menu-panel\" id=\"herbMenuPanel\">\n <div class=\"herb-menu-header\">Herb Debug Tools</div>\n\n <div class=\"herb-toggle-item\">\n <label class=\"herb-toggle-label\">\n <input type=\"checkbox\" id=\"herbToggleViewOutlines\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch\"></span>\n <span class=\"herb-toggle-text\">Show View Outlines</span>\n </label>\n </div>\n\n <div class=\"herb-toggle-item\">\n <label class=\"herb-toggle-label\">\n <input type=\"checkbox\" id=\"herbTogglePartialOutlines\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch\"></span>\n <span class=\"herb-toggle-text\">Show Partial Outlines</span>\n </label>\n </div>\n\n <div class=\"herb-toggle-item\">\n <label class=\"herb-toggle-label\">\n <input type=\"checkbox\" id=\"herbToggleComponentOutlines\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch\"></span>\n <span class=\"herb-toggle-text\">Show Component Outlines</span>\n </label>\n </div>\n\n <div class=\"herb-toggle-item\">\n <label class=\"herb-toggle-label\">\n <input type=\"checkbox\" id=\"herbToggleERBOutlines\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch\"></span>\n <span class=\"herb-toggle-text\">Show ERB Output Outlines</span>\n </label>\n\n <div class=\"herb-nested-toggle\" id=\"herbERBHoverRevealNested\" style=\"display: none;\">\n <label class=\"herb-toggle-label herb-nested-label\">\n <input type=\"checkbox\" id=\"herbToggleERBHoverReveal\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch herb-nested-switch\"></span>\n <span class=\"herb-toggle-text\">Reveal ERB Output tag on hover</span>\n </label>\n </div>\n\n <div class=\"herb-nested-toggle\" id=\"herbTooltipsNested\" style=\"display: none;\">\n <label class=\"herb-toggle-label herb-nested-label\">\n <input type=\"checkbox\" id=\"herbToggleTooltips\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch herb-nested-switch\"></span>\n <span class=\"herb-toggle-text\">Show Tooltips</span>\n </label>\n </div>\n </div>\n\n <div class=\"herb-toggle-item\">\n <label class=\"herb-toggle-label\">\n <input type=\"checkbox\" id=\"herbToggleERB\" class=\"herb-toggle-input\">\n <span class=\"herb-toggle-switch\"></span>\n <span class=\"herb-toggle-text\">Show ERB Output Tags</span>\n </label>\n </div>\n\n <div class=\"herb-disable-all-section\">\n <button id=\"herbDisableAll\" class=\"herb-disable-all-btn\">Disable All</button>\n </div>\n </div>\n </div>\n `;\n document.body.insertAdjacentHTML('beforeend', menuHTML);\n }\n applySettings() {\n this.toggleViewOutlines(this.showingViewOutlines);\n this.togglePartialOutlines(this.showingPartialOutlines);\n this.toggleComponentOutlines(this.showingComponentOutlines);\n this.toggleERBTags(this.showingERB);\n this.toggleERBOutlines(this.showingERBOutlines);\n const menuTrigger = document.getElementById('herbMenuTrigger');\n const menuPanel = document.getElementById('herbMenuPanel');\n if (menuTrigger && menuPanel && this.menuOpen) {\n menuTrigger.classList.add('active');\n menuPanel.classList.add('open');\n }\n }\n setupMenuToggle() {\n const menuTrigger = document.getElementById('herbMenuTrigger');\n const menuPanel = document.getElementById('herbMenuPanel');\n if (menuTrigger && menuPanel) {\n menuTrigger.addEventListener('click', () => {\n this.menuOpen = !this.menuOpen;\n if (this.menuOpen) {\n menuTrigger.classList.add('active');\n menuPanel.classList.add('open');\n }\n else {\n menuTrigger.classList.remove('active');\n menuPanel.classList.remove('open');\n }\n this.saveSettings();\n });\n document.addEventListener('click', (e) => {\n const target = e.target;\n const floatingMenu = document.querySelector('.herb-floating-menu');\n if (floatingMenu && !floatingMenu.contains(target) && this.menuOpen) {\n this.menuOpen = false;\n menuTrigger.classList.remove('active');\n menuPanel.classList.remove('open');\n this.saveSettings();\n }\n });\n }\n }\n setupTurboListeners() {\n document.addEventListener('turbo:load', () => {\n this.reinitializeAfterNavigation();\n });\n document.addEventListener('turbo:render', () => {\n this.reinitializeAfterNavigation();\n });\n document.addEventListener('turbo:visit', () => {\n this.reinitializeAfterNavigation();\n });\n }\n reinitializeAfterNavigation() {\n this.injectMenu();\n this.setupMenuToggle();\n this.setupToggleSwitches();\n this.applySettings();\n this.updateMenuButtonState();\n }\n setupToggleSwitches() {\n const toggleViewOutlinesSwitch = document.getElementById('herbToggleViewOutlines');\n if (toggleViewOutlinesSwitch) {\n toggleViewOutlinesSwitch.checked = this.showingViewOutlines;\n toggleViewOutlinesSwitch.addEventListener('change', () => {\n this.toggleViewOutlines(toggleViewOutlinesSwitch.checked);\n });\n }\n const togglePartialOutlinesSwitch = document.getElementById('herbTogglePartialOutlines');\n if (togglePartialOutlinesSwitch) {\n togglePartialOutlinesSwitch.checked = this.showingPartialOutlines;\n togglePartialOutlinesSwitch.addEventListener('change', () => {\n this.togglePartialOutlines(togglePartialOutlinesSwitch.checked);\n });\n }\n const toggleComponentOutlinesSwitch = document.getElementById('herbToggleComponentOutlines');\n if (toggleComponentOutlinesSwitch) {\n toggleComponentOutlinesSwitch.checked = this.showingComponentOutlines;\n toggleComponentOutlinesSwitch.addEventListener('change', () => {\n this.toggleComponentOutlines(toggleComponentOutlinesSwitch.checked);\n });\n }\n const toggleERBSwitch = document.getElementById('herbToggleERB');\n const toggleERBOutlinesSwitch = document.getElementById('herbToggleERBOutlines');\n if (toggleERBSwitch) {\n toggleERBSwitch.checked = this.showingERB;\n toggleERBSwitch.addEventListener('change', () => {\n if (toggleERBSwitch.checked && toggleERBOutlinesSwitch) {\n toggleERBOutlinesSwitch.checked = false;\n this.toggleERBOutlines(false);\n }\n this.toggleERBTags(toggleERBSwitch.checked);\n });\n }\n if (toggleERBOutlinesSwitch) {\n toggleERBOutlinesSwitch.checked = this.showingERBOutlines;\n toggleERBOutlinesSwitch.addEventListener('change', () => {\n if (toggleERBOutlinesSwitch.checked && toggleERBSwitch) {\n toggleERBSwitch.checked = false;\n this.toggleERBTags(false);\n }\n this.toggleERBOutlines(toggleERBOutlinesSwitch.checked);\n this.updateNestedToggleVisibility();\n });\n }\n else {\n console.warn('ERB outlines toggle switch not found');\n }\n const toggleERBHoverRevealSwitch = document.getElementById('herbToggleERBHoverReveal');\n if (toggleERBHoverRevealSwitch) {\n toggleERBHoverRevealSwitch.checked = this.showingERBHoverReveal;\n toggleERBHoverRevealSwitch.addEventListener('change', () => {\n this.toggleERBHoverReveal(toggleERBHoverRevealSwitch.checked);\n });\n }\n const toggleTooltipsSwitch = document.getElementById('herbToggleTooltips');\n if (toggleTooltipsSwitch) {\n toggleTooltipsSwitch.checked = this.showingTooltips;\n toggleTooltipsSwitch.addEventListener('change', () => {\n this.toggleTooltips(toggleTooltipsSwitch.checked);\n });\n }\n this.updateNestedToggleVisibility();\n const disableAllBtn = document.getElementById('herbDisableAll');\n if (disableAllBtn) {\n disableAllBtn.addEventListener('click', () => {\n this.disableAll();\n });\n }\n }\n toggleViewOutlines(show) {\n this.showingViewOutlines = show !== undefined ? show : !this.showingViewOutlines;\n const viewOutlines = document.querySelectorAll('[data-herb-debug-outline-type=\"view\"], [data-herb-debug-outline-type*=\"view\"]');\n viewOutlines.forEach((outline) => {\n const element = outline;\n if (this.showingViewOutlines) {\n element.style.outline = '2px dotted #3b82f6';\n element.style.outlineOffset = element.tagName.toLowerCase() === 'html' ? '-2px' : '2px';\n element.classList.add('show-outline');\n this.createOverlayLabel(element, 'view');\n }\n else {\n element.style.outline = 'none';\n element.style.outlineOffset = '0';\n element.classList.remove('show-outline');\n this.removeOverlayLabel(element);\n }\n });\n this.saveSettings();\n }\n togglePartialOutlines(show) {\n this.showingPartialOutlines = show !== undefined ? show : !this.showingPartialOutlines;\n const partialOutlines = document.querySelectorAll('[data-herb-debug-outline-type=\"partial\"], [data-herb-debug-outline-type*=\"partial\"]');\n partialOutlines.forEach((outline) => {\n const element = outline;\n if (this.showingPartialOutlines) {\n element.style.outline = '2px dotted #10b981';\n element.style.outlineOffset = element.tagName.toLowerCase() === 'html' ? '-2px' : '2px';\n element.classList.add('show-outline');\n this.createOverlayLabel(element, 'partial');\n }\n else {\n element.style.outline = 'none';\n element.style.outlineOffset = '0';\n element.classList.remove('show-outline');\n this.removeOverlayLabel(element);\n }\n });\n this.saveSettings();\n }\n toggleComponentOutlines(show) {\n this.showingComponentOutlines = show !== undefined ? show : !this.showingComponentOutlines;\n const componentOutlines = document.querySelectorAll('[data-herb-debug-outline-type=\"component\"], [data-herb-debug-outline-type*=\"component\"]');\n componentOutlines.forEach((outline) => {\n const element = outline;\n if (this.showingComponentOutlines) {\n element.style.outline = '2px dotted #f59e0b';\n element.style.outlineOffset = element.tagName.toLowerCase() === 'html' ? '-2px' : '2px';\n element.classList.add('show-outline');\n this.createOverlayLabel(element, 'component');\n }\n else {\n element.style.outline = 'none';\n element.style.outlineOffset = '0';\n element.classList.remove('show-outline');\n this.removeOverlayLabel(element);\n }\n });\n this.saveSettings();\n }\n createOverlayLabel(element, type) {\n if (element.querySelector('.herb-overlay-label')) {\n return;\n }\n const shortName = element.getAttribute('data-herb-debug-file-name') || '';\n const relativePath = element.getAttribute('data-herb-debug-file-relative-path') || shortName;\n const fullPath = element.getAttribute('data-herb-debug-file-full-path') || relativePath;\n const label = document.createElement('div');\n label.className = 'herb-overlay-label';\n label.textContent = shortName;\n label.setAttribute('data-label-setup', 'true');\n label.addEventListener('mouseenter', () => {\n label.textContent = relativePath;\n document.querySelectorAll('.herb-overlay-label').forEach(otherLabel => {\n otherLabel.style.zIndex = '1000';\n });\n label.style.zIndex = '1002';\n });\n label.addEventListener('mouseleave', () => {\n label.textContent = shortName;\n label.style.zIndex = '1000';\n });\n label.addEventListener('click', (e) => {\n e.stopPropagation();\n this.openFileInEditor(fullPath, 1, 1);\n });\n const shouldAttachToParent = element.getAttribute('data-herb-debug-attach-to-parent') === 'true';\n if (shouldAttachToParent && element.parentElement) {\n const parent = element.parentElement;\n element.style.outline = 'none';\n element.classList.remove('show-outline');\n const outlineColor = type === 'component' ? '#f59e0b' : type === 'partial' ? '#10b981' : '#3b82f6';\n parent.style.outline = `2px dotted ${outlineColor}`;\n parent.style.outlineOffset = parent.tagName.toLowerCase() === 'html' ? '-2px' : '2px';\n parent.classList.add('show-outline');\n parent.setAttribute('data-herb-debug-attached-outline-type', type);\n parent.style.position = 'relative';\n label.style.position = 'absolute';\n label.style.top = '0';\n label.style.left = '0';\n parent.appendChild(label);\n return;\n }\n element.style.position = 'relative';\n element.appendChild(label);\n }\n removeOverlayLabel(element) {\n const shouldAttachToParent = element.getAttribute('data-herb-debug-attach-to-parent') === 'true';\n if (shouldAttachToParent && element.parentElement) {\n const parent = element.parentElement;\n const label = parent.querySelector('.herb-overlay-label');\n if (label) {\n label.remove();\n }\n parent.style.outline = 'none';\n parent.style.outlineOffset = '0';\n parent.classList.remove('show-outline');\n parent.removeAttribute('data-herb-debug-attached-outline-type');\n }\n else {\n const label = element.querySelector('.herb-overlay-label');\n if (label) {\n label.remove();\n }\n }\n }\n resetShowingERB() {\n const elements = document.querySelectorAll('[data-herb-debug-showing-erb');\n elements.forEach(element => {\n const originalContent = element.getAttribute('data-herb-debug-original') || \"\";\n element.innerHTML = originalContent;\n element.removeAttribute(\"data-herb-debug-showing-erb\");\n });\n }\n toggleERBTags(show) {\n this.showingERB = show !== undefined ? show : !this.showingERB;\n const erbOutputs = document.querySelectorAll('[data-herb-debug-outline-type*=\"erb-output\"]');\n erbOutputs.forEach((element) => {\n const erbCode = element.getAttribute('data-herb-debug-erb');\n if (this.showingERB && erbCode) {\n // this.resetShowingERB()\n if (!element.hasAttribute('data-herb-debug-original')) {\n element.setAttribute('data-herb-debug-original', element.innerHTML);\n }\n element.textContent = erbCode;\n element.setAttribute(\"data-herb-debug-showing-erb\", \"true\");\n element.style.background = '#f3e8ff';\n element.style.color = '#7c3aed';\n if (this.showingTooltips) {\n this.addTooltipHoverHandler(element);\n }\n }\n else {\n const originalContent = element.getAttribute('data-herb-debug-original') || \"\";\n if (element && element.hasAttribute(\"data-herb-debug-showing-erb\")) {\n element.innerHTML = originalContent;\n element.removeAttribute(\"data-herb-debug-showing-erb\");\n }\n element.style.background = 'transparent';\n element.style.color = 'inherit';\n this.removeTooltipHoverHandler(element);\n this.removeHoverTooltip(element);\n }\n });\n this.saveSettings();\n }\n toggleERBOutlines(show) {\n this.showingERBOutlines = show !== undefined ? show : !this.showingERBOutlines;\n this.clearCurrentHoveredERB();\n const erbOutputs = document.querySelectorAll('[data-herb-debug-outline-type*=\"erb-output\"]');\n erbOutputs.forEach(element => {\n const inserted = element.hasAttribute(\"data-herb-debug-inserted\");\n const needsWrapperToggled = (inserted && !element.children[0]);\n const realElement = element.children[0] || element;\n if (this.showingERBOutlines) {\n realElement.style.outline = '2px dotted #a78bfa';\n realElement.style.outlineOffset = '1px';\n if (needsWrapperToggled) {\n element.style.display = 'inline';\n }\n if (this.showingTooltips) {\n this.addTooltipHoverHandler(element);\n }\n if (this.showingERBHoverReveal) {\n this.addERBHoverReveal(element);\n }\n }\n else {\n realElement.style.outline = 'none';\n realElement.style.outlineOffset = '0';\n if (needsWrapperToggled) {\n element.style.display = 'contents';\n }\n this.removeTooltipHoverHandler(element);\n this.removeHoverTooltip(element);\n this.removeERBHoverReveal(element);\n }\n });\n this.saveSettings();\n }\n updateNestedToggleVisibility() {\n const nestedToggle = document.getElementById('herbERBHoverRevealNested');\n const tooltipsNestedToggle = document.getElementById('herbTooltipsNested');\n if (nestedToggle) {\n nestedToggle.style.display = this.showingERBOutlines ? 'block' : 'none';\n }\n if (tooltipsNestedToggle) {\n tooltipsNestedToggle.style.display = this.showingERBOutlines ? 'block' : 'none';\n }\n }\n toggleERBHoverReveal(show) {\n this.showingERBHoverReveal = show !== undefined ? show : !this.showingERBHoverReveal;\n if (this.showingERBHoverReveal && this.showingTooltips) {\n this.toggleTooltips(false);\n const toggleTooltipsSwitch = document.getElementById('herbToggleTooltips');\n if (toggleTooltipsSwitch) {\n toggleTooltipsSwitch.checked = false;\n }\n }\n this.clearCurrentHoveredERB();\n const erbOutputs = document.querySelectorAll('[data-herb-debug-outline-type*=\"erb-output\"]');\n erbOutputs.forEach((el) => {\n const element = el;\n this.removeERBHoverReveal(element);\n if (this.showingERBHoverReveal && this.showingERBOutlines) {\n this.addERBHoverReveal(element);\n }\n });\n this.saveSettings();\n }\n clearCurrentHoveredERB() {\n if (this.currentlyHoveredERBElement) {\n const handlers = this.currentlyHoveredERBElement._erbHoverHandlers;\n if (handlers) {\n handlers.hideERBCode();\n }\n this.currentlyHoveredERBElement = null;\n }\n }\n addERBHoverReveal(element) {\n const erbCode = element.getAttribute('data-herb-debug-erb');\n if (!erbCode)\n return;\n this.removeERBHoverReveal(element);\n if (!element.hasAttribute('data-herb-debug-original')) {\n element.setAttribute('data-herb-debug-original', element.innerHTML);\n }\n const showERBCode = () => {\n if (!this.showingERBHoverReveal || !this.showingERBOutlines) {\n return;\n }\n if (this.currentlyHoveredERBElement === element) {\n return;\n }\n this.clearCurrentHoveredERB();\n this.currentlyHoveredERBElement = element;\n element.style.background = '#f3e8ff';\n element.style.color = '#7c3aed';\n element.style.fontFamily = 'inherit';\n element.style.fontSize = 'inherit';\n element.style.borderRadius = '3px';\n element.style.cursor = 'pointer';\n element.textContent = erbCode;\n element.addEventListener('click', this.handleRevealedERBClick);\n };\n const hideERBCode = () => {\n if (this.currentlyHoveredERBElement === element) {\n this.currentlyHoveredERBElement = null;\n }\n const originalContent = element.getAttribute('data-herb-debug-original');\n if (originalContent) {\n element.innerHTML = originalContent;\n }\n element.style.background = 'transparent';\n element.style.color = 'inherit';\n element.style.fontFamily = 'inherit';\n element.style.fontSize = 'inherit';\n element.style.borderRadius = '0';\n element.style.cursor = 'default';\n element.removeEventListener('click', this.handleRevealedERBClick);\n };\n element._erbHoverHandlers = { showERBCode, hideERBCode };\n element.addEventListener('mouseenter', showERBCode);\n }\n removeERBHoverReveal(element) {\n const handlers = element._erbHoverHandlers;\n if (handlers) {\n element.removeEventListener('mouseenter', handlers.showERBCode);\n delete element._erbHoverHandlers;\n handlers.hideERBCode();\n }\n }\n createHoverTooltip(element, elementForPosition) {\n this.removeHoverTooltip(element);\n const relativePath = element.getAttribute('data-herb-debug-file-relative-path') || element.getAttribute('data-herb-debug-file-name') || '';\n const fullPath = element.getAttribute('data-herb-debug-file-full-path') || relativePath;\n const line = element.getAttribute('data-herb-debug-line') || '';\n const column = element.getAttribute('data-herb-debug-column') || '';\n const erb = element.getAttribute('data-herb-debug-erb') || '';\n if (!relativePath || !erb)\n return;\n const tooltip = document.createElement('div');\n tooltip.className = 'herb-tooltip';\n tooltip.innerHTML = `\n <div class=\"herb-location\" data-tooltip=\"Open in Editor\">\n <span class=\"herb-file-path\">${relativePath}:${line}:${column}</span>\n <button class=\"herb-copy-path-btn\" data-tooltip=\"Copy file path\">📋</button>\n </div>\n <div class=\"herb-erb-code\">${erb}</div>\n `;\n let hideTimeout = null;\n const showTooltip = () => {\n if (hideTimeout) {\n clearTimeout(hideTimeout);\n hideTimeout = null;\n }\n tooltip.classList.add('visible');\n };\n const hideTooltip = () => {\n hideTimeout = window.setTimeout(() => {\n tooltip.classList.remove('visible');\n }, 100);\n };\n element.addEventListener('mouseenter', showTooltip);\n element.addEventListener('mouseleave', hideTooltip);\n tooltip.addEventListener('mouseenter', showTooltip);\n tooltip.addEventListener('mouseleave', hideTooltip);\n const locationElement = tooltip.querySelector('.herb-location');\n const openInEditor = (e) => {\n if (e.target.closest('.herb-copy-path-btn')) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n this.openFileInEditor(fullPath, parseInt(line), parseInt(column));\n };\n locationElement?.addEventListener('click', openInEditor);\n const copyButton = tooltip.querySelector('.herb-copy-path-btn');\n const copyFilePath = (e) => {\n e.preventDefault();\n e.stopPropagation();\n const textToCopy = `${relativePath}:${line}:${column}`;\n navigator.clipboard.writeText(textToCopy).then(() => {\n copyButton.textContent = '✅';\n setTimeout(() => {\n copyButton.textContent = '📋';\n }, 1000);\n }).catch((err) => {\n console.error('Failed to copy file path:', err);\n });\n };\n copyButton?.addEventListener('click', copyFilePath);\n const positionTooltip = () => {\n const elementRect = elementForPosition.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const viewportWidth = window.innerWidth;\n tooltip.style.position = 'fixed';\n tooltip.style.left = '0';\n tooltip.style.top = '0';\n tooltip.style.transform = 'none';\n tooltip.style.bottom = 'auto';\n const actualTooltipRect = tooltip.getBoundingClientRect();\n const tooltipWidth = actualTooltipRect.width;\n const tooltipHeight = actualTooltipRect.height;\n let left = elementRect.left + (elementRect.width / 2) - (tooltipWidth / 2);\n let top = elementRect.top - tooltipHeight - 8;\n if (left < 8) {\n left = 8;\n }\n else if (left + tooltipWidth > viewportWidth - 8) {\n left = viewportWidth - tooltipWidth - 8;\n }\n if (top < 8) {\n top = elementRect.bottom + 8;\n if (top + tooltipHeight > viewportHeight - 8) {\n top = Math.max(8, (viewportHeight - tooltipHeight) / 2);\n }\n }\n if (top + tooltipHeight > viewportHeight - 8) {\n top = viewportHeight - tooltipHeight - 8;\n }\n tooltip.style.position = 'fixed';\n tooltip.style.left = `${left}px`;\n tooltip.style.top = `${top}px`;\n tooltip.style.transform = 'none';\n tooltip.style.bottom = 'auto';\n };\n element._tooltipHandlers = { showTooltip, hideTooltip, openInEditor, copyFilePath, positionTooltip };\n tooltip._tooltipHandlers = { showTooltip, hideTooltip };\n element.appendChild(tooltip);\n setTimeout(positionTooltip, 0);\n window.addEventListener('scroll', positionTooltip, { passive: true });\n window.addEventListener('resize', positionTooltip, { passive: true });\n }\n removeHoverTooltip(element) {\n const tooltip = element.querySelector('.herb-tooltip');\n if (tooltip) {\n const handlers = element._tooltipHandlers;\n const tooltipHandlers = tooltip._tooltipHandlers;\n if (handlers) {\n element.removeEventListener('mouseenter', handlers.showTooltip);\n element.removeEventListener('mouseleave', handlers.hideTooltip);\n const locationElement = tooltip.querySelector('.herb-location');\n locationElement?.removeEventListener('click', handlers.openInEditor);\n const copyButton = tooltip.querySelector('.herb-copy-path-btn');\n copyButton?.removeEventListener('click', handlers.copyFilePath);\n if (handlers.positionTooltip) {\n window.removeEventListener('scroll', handlers.positionTooltip);\n window.removeEventListener('resize', handlers.positionTooltip);\n }\n delete element._tooltipHandlers;\n }\n if (tooltipHandlers) {\n tooltip.removeEventListener('mouseenter', tooltipHandlers.showTooltip);\n tooltip.removeEventListener('mouseleave', tooltipHandlers.hideTooltip);\n delete tooltip._tooltipHandlers;\n }\n tooltip.remove();\n }\n }\n addTooltipHoverHandler(element) {\n this.removeTooltipHoverHandler(element);\n const lazyTooltipHandler = () => {\n if (!this.showingTooltips || !this.showingERBOutlines) {\n return;\n }\n if (element.querySelector('.herb-tooltip')) {\n return;\n }\n this.createHoverTooltip(element, element);\n };\n element._lazyTooltipHandler = lazyTooltipHandler;\n element.addEventListener('mouseenter', lazyTooltipHandler);\n }\n removeTooltipHoverHandler(element) {\n const handler = element._lazyTooltipHandler;\n if (handler) {\n element.removeEventListener('mouseenter', handler);\n delete element._lazyTooltipHandler;\n }\n }\n openFileInEditor(file, line, column) {\n const absolutePath = file.startsWith('/') ? file : (this.projectPath ? `${this.projectPath}/${file}` : file);\n const editors = [\n `vscode://file/${absolutePath}:${line}:${column}`,\n `subl://open?url=file://${absolutePath}&line=${line}&column=${column}`,\n `atom://core/open/file?filename=${absolutePath}&line=${line}&column=${column}`,\n `txmt://open?url=file://${absolutePath}&line=${line}&column=${column}`,\n ];\n try {\n window.open(editors[0], '_self');\n }\n catch (error) {\n console.log(`Open in editor: ${absolutePath}:${line}:${column}`);\n }\n }\n toggleTooltips(show) {\n this.showingTooltips = show !== undefined ? show : !this.showingTooltips;\n if (this.showingTooltips && this.showingERBHoverReveal) {\n this.toggleERBHoverReveal(false);\n const toggleERBHoverRevealSwitch = document.getElementById('herbToggleERBHoverReveal');\n if (toggleERBHoverRevealSwitch) {\n toggleERBHoverRevealSwitch.checked = false;\n }\n }\n const erbOutputs = document.querySelectorAll('[data-herb-debug-outline-type*=\"erb-output\"]');\n erbOutputs.forEach((element) => {\n if (this.showingERBOutlines && this.showingTooltips) {\n this.addTooltipHoverHandler(element);\n }\n else {\n this.removeTooltipHoverHandler(element);\n this.removeHoverTooltip(element);\n }\n });\n this.saveSettings();\n }\n disableAll() {\n this.clearCurrentHoveredERB();\n this.toggleViewOutlines(false);\n this.togglePartialOutlines(false);\n this.toggleComponentOutlines(false);\n this.toggleERBTags(false);\n this.toggleERBOutlines(false);\n this.toggleERBHoverReveal(false);\n this.toggleTooltips(false);\n const toggleViewOutlinesSwitch = document.getElementById('herbToggleViewOutlines');\n const togglePartialOutlinesSwitch = document.getElementById('herbTogglePartialOutlines');\n const toggleComponentOutlinesSwitch = document.getElementById('herbToggleComponentOutlines');\n const toggleERBSwitch = document.getElementById('herbToggleERB');\n const toggleERBOutlinesSwitch = document.getElementById('herbToggleERBOutlines');\n const toggleERBHoverRevealSwitch = document.getElementById('herbToggleERBHoverReveal');\n const toggleTooltipsSwitch = document.getElementById('herbToggleTooltips');\n if (toggleViewOutlinesSwitch)\n toggleViewOutlinesSwitch.checked = false;\n if (togglePartialOutlinesSwitch)\n togglePartialOutlinesSwitch.checked = false;\n if (toggleComponentOutlinesSwitch)\n toggleComponentOutlinesSwitch.checked = false;\n if (toggleERBSwitch)\n toggleERBSwitch.checked = false;\n if (toggleERBOutlinesSwitch)\n toggleERBOutlinesSwitch.checked = false;\n if (toggleERBHoverRevealSwitch)\n toggleERBHoverRevealSwitch.checked = false;\n if (toggleTooltipsSwitch)\n toggleTooltipsSwitch.checked = false;\n }\n initializeErrorOverlay() {\n this.errorOverlay = new ErrorOverlay();\n }\n}\nHerbOverlay.SETTINGS_KEY = 'herb-dev-tools-settings';\n\nfunction initHerbDevTools(options = {}) {\n return new HerbOverlay(options);\n}\nif (typeof window !== 'undefined' && typeof document !== 'undefined') {\n const hasDebugMode = document.querySelector('meta[name=\"herb-debug-mode\"]')?.getAttribute('content') === 'true';\n const hasDebugErb = document.querySelector('[data-herb-debug-erb]') !== null;\n const hasValidationErrors = document.querySelector('template[data-herb-validation-errors]') !== null;\n const hasValidationError = document.querySelector('template[data-herb-validation-error]') !== null;\n const hasParserErrors = document.querySelector('template[data-herb-parser-error]') !== null;\n const shouldAutoInit = hasDebugMode || hasDebugErb || hasValidationErrors || hasValidationError || hasParserErrors;\n if (shouldAutoInit) {\n document.addEventListener('DOMContentLoaded', () => {\n initHerbDevTools();\n });\n }\n}\nif (typeof window !== 'undefined') {\n window.HerbDevTools = {\n init: initHerbDevTools,\n HerbOverlay\n };\n}\n\nexport { HerbOverlay, initHerbDevTools };\n//# sourceMappingURL=herb-dev-tools.esm.js.map\n","import { initHerbDevTools, HerbOverlay, type HerbDevToolsOptions } from \"@herb-tools/dev-tools\"\n\nexport interface ReActionViewDevToolsOptions extends HerbDevToolsOptions {\n projectPath?: string\n autoInit?: boolean\n}\n\nexport class ReActionViewDevTools {\n private herbOverlay: HerbOverlay | null = null\n private static instance: ReActionViewDevTools | null = null\n\n constructor(private options: ReActionViewDevToolsOptions = {}) {\n if (options.autoInit !== false) {\n this.init()\n }\n }\n\n init(): HerbOverlay {\n if (this.herbOverlay) {\n this.destroy()\n }\n\n this.herbOverlay = initHerbDevTools({\n projectPath: this.options.projectPath,\n ...this.options\n })\n\n return this.herbOverlay\n }\n\n destroy(): void {\n if (this.herbOverlay) {\n const existingMenu = document.querySelector(\".herb-floating-menu\")\n\n if (existingMenu) {\n existingMenu.remove()\n }\n }\n\n this.herbOverlay = null\n }\n\n getHerbOverlay(): HerbOverlay | null {\n return this.herbOverlay\n }\n\n static getInstance(): ReActionViewDevTools | null {\n return ReActionViewDevTools.instance\n }\n\n static setInstance(instance: ReActionViewDevTools | null): void {\n ReActionViewDevTools.instance = instance\n }\n}\n\nexport function initReActionViewDevTools(options: ReActionViewDevToolsOptions = {}): ReActionViewDevTools {\n const existingInstance = ReActionViewDevTools.getInstance()\n\n if (existingInstance) {\n existingInstance.destroy()\n }\n\n const instance = new ReActionViewDevTools(options)\n ReActionViewDevTools.setInstance(instance)\n\n return instance\n}\n\nif (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n let isInitializing = false\n\n const initializeDevTools = () => {\n if (isInitializing) {\n console.log(\"ReActionView dev tools initialization already in progress, skipping...\")\n\n return\n }\n\n const shouldAutoInit = document.querySelector(`meta[name=\"herb-debug-mode\"]`)?.getAttribute(\"content\") === \"true\" || document.querySelector(\"[data-herb-debug-erb]\") !== null\n\n if (!shouldAutoInit) {\n console.log(\"ReActionView debug mode not detected, skipping dev tools initialization\")\n return\n }\n\n isInitializing = true\n\n try {\n let projectPath: string | undefined\n const railsRoot = document.querySelector(`meta[name=\"herb-rails-root\"]`)?.getAttribute(\"content\")\n if (railsRoot) {\n projectPath = railsRoot\n }\n\n initReActionViewDevTools({\n projectPath,\n autoInit: true\n })\n\n } catch (error) {\n console.warn(\"Could not initialize ReActionView dev tools:\", error)\n } finally {\n isInitializing = false\n }\n }\n\n if (document.readyState === \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", initializeDevTools, { once: true })\n } else {\n setTimeout(initializeDevTools, 0)\n }\n\n document.addEventListener(\"turbo:load\", initializeDevTools)\n document.addEventListener(\"turbo:render\", initializeDevTools)\n document.addEventListener(\"turbo:visit\", initializeDevTools)\n}\n\ndeclare global {\n interface Window {\n ReActionViewDevTools: {\n init: typeof initReActionViewDevTools\n ReActionViewDevTools: typeof ReActionViewDevTools\n HerbOverlay: typeof HerbOverlay\n }\n }\n}\n\nif (typeof window !== \"undefined\") {\n window.ReActionViewDevTools = {\n init: initReActionViewDevTools,\n ReActionViewDevTools,\n HerbOverlay\n }\n}\n\nexport { HerbOverlay, type HerbDevToolsOptions }\n"],"names":[],"mappings":";;;;;;EAAA,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;EAC/B,EAAE,KAAK,GAAG,KAAK,MAAM,GAAG,GAAG,GAAG,EAAE;EAChC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ;;EAE7B,EAAE,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,CAAC;;EAEjD,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACtE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;EAC7C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU;;EAEzB,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;EAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;EACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;EAC/C,IAAI,CAAC,MAAM;EACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;EAC7B,IAAI;EACJ,EAAE,CAAC,MAAM;EACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;EAC3B,EAAE;;EAEF,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;EACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG;EAClC,EAAE,CAAC,MAAM;EACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;EACnD,EAAE;EACF;;EAEA,IAAI,QAAQ,GAAG,2vWAA2vW;EAC1wW,WAAW,CAAC,QAAQ,CAAC;;EAErB,MAAM,YAAY,CAAC;EACnB,IAAI,WAAW,GAAG;EAClB,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI;EAC3B,QAAQ,IAAI,CAAC,iBAAiB,GAAG,EAAE;EACnC,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK;EAC9B,QAAQ,IAAI,CAAC,IAAI,EAAE;EACnB,IAAI;EACJ,IAAI,IAAI,GAAG;EACX,QAAQ,IAAI,CAAC,sBAAsB,EAAE;EACrC,QAAQ,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,4BAA4B,CAAC,KAAK,IAAI;EAC7F,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,EAAE;EAC3C,YAAY,IAAI,CAAC,aAAa,EAAE;EAChC,YAAY,IAAI,CAAC,kBAAkB,EAAE;EACrC,QAAQ;EACR,aAAa,IAAI,eAAe,EAAE;EAClC,YAAY,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC;EAChF,QAAQ;EACR,aAAa;EACb,YAAY,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC;EAC/E,QAAQ;EACR,IAAI;EACJ,IAAI,sBAAsB,GAAG;EAC7B,QAAQ,MAAM,iBAAiB,GAAG,EAAE;EACpC,QAAQ,MAAM,mBAAmB,GAAG,QAAQ,CAAC,gBAAgB,CAAC,sCAAsC,CAAC;EACrG,QAAQ,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;EAC5C,YAAY,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;EACnF,QAAQ;EACR,QAAQ,MAAM,aAAa,GAAG,QAAQ,CAAC,gBAAgB,CAAC,uCAAuC,CAAC;EAChG,QAAQ,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK;EACpD,YAAY,IAAI;EAChB,gBAAgB,IAAI,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,IAAI,EAAE;EAC3D,gBAAgB,IAAI,CAAC,QAAQ,EAAE;EAC/B,oBAAoB,QAAQ,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE;EACzD,gBAAgB;EAChB,gBAAgB,IAAI,QAAQ,EAAE;EAC9B,oBAAoB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;EAC/D,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC;EAC/D,oBAAoB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;EACpD,gBAAgB;EAChB,YAAY;EACZ,YAAY,OAAO,KAAK,EAAE;EAC1B,gBAAgB,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAK,EAAE;EACzF,oBAAoB,WAAW,EAAE,QAAQ,CAAC,WAAW;EACrD,oBAAoB,SAAS,EAAE,QAAQ,CAAC;EACxC,iBAAiB,CAAC;EAClB,gBAAgB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;EAChD,YAAY;EACZ,QAAQ,CAAC,CAAC;EACV,QAAQ,MAAM,aAAa,GAAG,QAAQ,CAAC,gBAAgB,CAAC,kCAAkC,CAAC;EAC3F,QAAQ,aAAa,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK;EACpD,YAAY,IAAI;EAChB,gBAAgB,IAAI,WAAW,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAC,WAAW,EAAE,IAAI,EAAE;EAC5F,gBAAgB,IAAI,WAAW,EAAE;EACjC,oBAAoB,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC;EAC/D,oBAAoB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;EACpD,gBAAgB;EAChB,YAAY;EACZ,YAAY,OAAO,KAAK,EAAE;EAC1B,gBAAgB,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC;EAChF,gBAAgB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;EAChD,YAAY;EACZ,QAAQ,CAAC,CAAC;EACV,QAAQ,iBAAiB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;EAC1E,IAAI;EACJ,IAAI,0BAA0B,CAAC,SAAS,EAAE,iBAAiB,EAAE;EAC7D,QAAQ,MAAM,mBAAmB,GAAG,EAAE;EACtC,QAAQ,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE;EAClC,QAAQ,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK;EACxC,YAAY,IAAI;EAChB,gBAAgB,MAAM,QAAQ,GAAG;EACjC,oBAAoB,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,OAAO;EAC/E,oBAAoB,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,SAAS;EAC7E,oBAAoB,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE;EAClE,oBAAoB,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC;EAC7E,oBAAoB,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC;EACjF,oBAAoB,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAC,eAAe,CAAC,IAAI,SAAS;EACjF,oBAAoB,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE;EACxE,oBAAoB,UAAU,EAAE,QAAQ,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,SAAS;EACrF,oBAAoB,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW;EAChG,iBAAiB;EACjB,gBAAgB,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE;EAC7D,gBAAgB,IAAI,IAAI,EAAE;EAC1B,oBAAoB,MAAM,QAAQ,GAAG,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;EACpI,oBAAoB,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;EAChD,wBAAwB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;EAC/D,wBAAwB,QAAQ,CAAC,KAAK,EAAE;EACxC,oBAAoB;EACpB,yBAAyB;EACzB,wBAAwB,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;EAC5E,oBAAoB;EACpB,oBAAoB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;EACpD,gBAAgB;EAChB,YAAY;EACZ,YAAY,OAAO,KAAK,EAAE;EAC1B,gBAAgB,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC;EAC9E,gBAAgB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;EAChD,YAAY;EACZ,QAAQ,CAAC,CAAC;EACV,QAAQ,mBAAmB,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;EACtD,QAAQ,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;EAC5C,YAAY,IAAI,CAAC,wBAAwB,CAAC,mBAAmB,CAAC;EAC9D,QAAQ;EACR,IAAI;EACJ,IAAI,aAAa,GAAG;EACpB,QAAQ,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC;EAC/C,YAAY;EACZ,QAAQ,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;EACpD,QAAQ,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,oBAAoB;EAC9C,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAChD;AACA;AACA;;AAEA;AACA,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,KAAK,KAAK;AAClE,YAAY,EAAE,KAAK,GAAG,CAAC,GAAG,yCAAyC,GAAG,EAAE;AACxE;AACA,2CAA2C,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;AAC/H;AACA,gBAAgB,EAAE,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,IAAI;AAC/D,8CAA8C,EAAE,KAAK,CAAC,QAAQ,CAAC;AAC/D,oDAAoD,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACrF,oBAAoB,EAAE,KAAK,CAAC,QAAQ,GAAG,CAAC,sCAAsC,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;AACjJ,oBAAoB,EAAE,KAAK,CAAC,UAAU,GAAG,CAAC,sCAAsC,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;AAChI,mDAAmD,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACzG;AACA,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3B;AACA;AACA,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACrB;AACA;AACA,IAAI,CAAC;EACL,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;EAC/C,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC;EACxE,QAAQ,QAAQ,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;EAC9D,QAAQ,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK;EACtD,YAAY,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,EAAE;EAC3C,gBAAgB,IAAI,CAAC,IAAI,EAAE;EAC3B,YAAY;EACZ,QAAQ,CAAC,CAAC;EACV,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK;EACpD,YAAY,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;EACtD,gBAAgB,IAAI,CAAC,IAAI,EAAE;EAC3B,YAAY;EACZ,QAAQ,CAAC,CAAC;EACV,IAAI;EACJ,IAAI,kBAAkB,GAAG;EACzB,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK;EACpD,YAAY,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;EACzE,gBAAgB,CAAC,CAAC,cAAc,EAAE;EAClC,gBAAgB,IAAI,CAAC,MAAM,EAAE;EAC7B,YAAY;EACZ,QAAQ,CAAC,CAAC;EACV,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE;EACrC,YAAY,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC;EAC9C,QAAQ;EACR,IAAI;EACJ,IAAI,kBAAkB,GAAG;EACzB,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;EACtG,IAAI;EACJ,IAAI,eAAe,CAAC,MAAM,EAAE;EAC5B,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;EACjC,YAAY,OAAO,SAAS;EAC5B,QAAQ;EACR,QAAQ,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK;EAC7D,YAAY,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,SAAS;EACpD,YAAY,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;EAChD,YAAY,OAAO,GAAG;EACtB,QAAQ,CAAC,EAAE,EAAE,CAAC;EACd,QAAQ,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;EACtD,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;EACrC,YAAY,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;EACxC,YAAY,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC;EAChD,YAAY,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;EAC3D,YAAY,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;EAC3E,QAAQ;EACR,aAAa;EACb,YAAY,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,IAAI;EACnD,gBAAgB,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC;EACpD,gBAAgB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;EAC/D,gBAAgB,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;EAChD,YAAY,CAAC,CAAC;EACd,YAAY,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EAClE,QAAQ;EACR,IAAI;EACJ,IAAI,cAAc,CAAC,MAAM,EAAE;EAC3B,QAAQ,QAAQ,MAAM;EACtB,YAAY,KAAK,QAAQ,EAAE,OAAO,QAAQ;EAC1C,YAAY,KAAK,mBAAmB,EAAE,OAAO,UAAU;EACvD,YAAY,KAAK,kBAAkB,EAAE,OAAO,SAAS;EACrD,YAAY,KAAK,wBAAwB,EAAE,OAAO,eAAe;EACjE,YAAY,SAAS,OAAO,YAAY;EACxC;EACA,IAAI;EACJ,IAAI,gBAAgB,GAAG;EACvB,QAAQ,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;EACnH,IAAI;EACJ,IAAI,UAAU,CAAC,MAAM,EAAE;EACvB,QAAQ,OAAO;EACf,aAAa,OAAO,CAAC,IAAI,EAAE,OAAO;EAClC,aAAa,OAAO,CAAC,IAAI,EAAE,MAAM;EACjC,aAAa,OAAO,CAAC,IAAI,EAAE,MAAM;EACjC,aAAa,OAAO,CAAC,IAAI,EAAE,QAAQ;EACnC,aAAa,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;EACpC,IAAI;EACJ,IAAI,IAAI,GAAG;EACX,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;EAC1B,YAAY,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;EAChD,YAAY,IAAI,CAAC,SAAS,GAAG,IAAI;EACjC,QAAQ;EACR,IAAI;EACJ,IAAI,IAAI,GAAG;EACX,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;EAC1B,YAAY,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;EAC/C,YAAY,IAAI,CAAC,SAAS,GAAG,KAAK;EAClC,QAAQ;EACR,IAAI;EACJ,IAAI,MAAM,GAAG;EACb,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;EAC5B,YAAY,IAAI,CAAC,IAAI,EAAE;EACvB,QAAQ;EACR,aAAa;EACb,YAAY,IAAI,CAAC,IAAI,EAAE;EACvB,QAAQ;EACR,IAAI;EACJ,IAAI,SAAS,GAAG;EAChB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC;EAC5C,IAAI;EACJ,IAAI,aAAa,GAAG;EACpB,QAAQ,OAAO,IAAI,CAAC,kBAAkB,EAAE;EACxC,IAAI;EACJ,IAAI,yBAAyB,CAAC,WAAW,EAAE;EAC3C,QAAQ,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,4BAA4B,CAAC;EACpF,QAAQ,IAAI,eAAe,EAAE;EAC7B,YAAY,eAAe,CAAC,MAAM,EAAE;EACpC,QAAQ;EACR,QAAQ,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;EACvD,QAAQ,SAAS,CAAC,SAAS,GAAG,WAAW;EACzC,QAAQ,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,4BAA4B,CAAC;EAC7E,QAAQ,IAAI,OAAO,EAAE;EACrB,YAAY,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;EAC9C,YAAY,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;EAC1C,QAAQ;EACR,aAAa;EACb,YAAY,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC;EAC1F,QAAQ;EACR,IAAI;EACJ,IAAI,wBAAwB,CAAC,SAAS,EAAE;EACxC,QAAQ,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,0BAA0B,CAAC;EAClF,QAAQ,IAAI,eAAe,EAAE;EAC7B,YAAY,eAAe,CAAC,MAAM,EAAE;EACpC,QAAQ;EACR,QAAQ,MAAM,cAAc,GAAG,IAAI,GAAG,EAAE;EACxC,QAAQ,MAAM,YAAY,GAAG,IAAI,GAAG,EAAE;EACtC,QAAQ,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI;EACtC,YAAY,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM;EACnD,YAAY,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;EAC7C,gBAAgB,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;EAC9C,YAAY;EACZ,YAAY,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;EACrD,YAAY,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ;EACnD,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;EACzC,gBAAgB,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;EAC1C,YAAY;EACZ,YAAY,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;EACjD,QAAQ,CAAC,CAAC;EACV,QAAQ,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;EACtH,QAAQ,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;EAC1H,QAAQ,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;EACzE,QAAQ,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM;EAC5C,QAAQ,MAAM,WAAW,GAAG,IAAI,CAAC,0BAA0B,CAAC,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;EAC3J,QAAQ,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;EACrD,QAAQ,OAAO,CAAC,SAAS,GAAG,yBAAyB;EACrD,QAAQ,OAAO,CAAC,SAAS,GAAG,WAAW;EACvC,QAAQ,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;EAC1C,QAAQ,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC;EACpD,IAAI;EACJ,IAAI,0BAA0B,CAAC,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE;EACjF,QAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,WAAW,KAAK,CAAC,GAAG,kBAAkB,GAAG,CAAC,iBAAiB,CAAC;EACvF,QAAQ,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,WAAW,EAAE;EACtD,YAAY,KAAK,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;EAClF,QAAQ;EACR,aAAa;EACb,YAAY,KAAK,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;EAC9C,QAAQ;EACR,QAAQ,MAAM,QAAQ,GAAG,EAAE;EAC3B,QAAQ,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC;EACjC,YAAY,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;EAC5F,QAAQ,IAAI,MAAM,CAAC,YAAY,GAAG,CAAC;EACnC,YAAY,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,YAAY,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;EAClG,QAAQ,IAAI,QAAQ,GAAG,EAAE;EACzB,QAAQ,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE;EACnC,YAAY,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;EACjH,YAAY,QAAQ,GAAG;AACvB;AACA;AACA,iBAAiB,EAAE,WAAW,CAAC;AAC/B;AACA,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK;AACvE,qDAAqD,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC7E,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC;AACxD;AACA,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACrB;AACA,MAAM,CAAC;EACP,QAAQ;EACR,QAAQ,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,KAAK;AACxG,uDAAuD,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACjF;AACA,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC;AACnG;AACA;AACA,UAAU,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI;AACrC,YAAY,MAAM,aAAa,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC7F,YAAY,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE;AAC7B,gBAAgB,OAAO;AACvB,0DAA0D,EAAE,aAAa,CAAC;AAC1E,kBAAkB,EAAE,CAAC,CAAC,IAAI;AAC1B,8EAA8E,EAAE,CAAC,CAAC,KAAK,CAAC;AACxF;AACA,yDAAyD,EAAE,CAAC,CAAC,KAAK,CAAC;AACnE;AACA;AACA,cAAc,CAAC;AACf,YAAY;AACZ,YAAY,OAAO,CAAC,6CAA6C,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;AAClG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACnB;AACA;AACA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;EACf,QAAQ,OAAO;AACf,aAAa,EAAE,IAAI,CAAC,0BAA0B,EAAE,CAAC;AACjD;AACA;AACA;AACA;AACA;AACA,cAAc,EAAE,KAAK;AACrB;AACA,kDAAkD,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACxE;AACA;AACA;AACA,QAAQ,EAAE,QAAQ;AAClB;AACA,UAAU,EAAE,eAAe;AAC3B;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI,CAAC;EACL,IAAI;EACJ,IAAI,0BAA0B,GAAG;EACjC,QAAQ,OAAO;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;EACL,IAAI;EACJ,IAAI,8BAA8B,CAAC,OAAO,EAAE;EAC5C,QAAQ,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,oBAAoB,CAAC;EACpE,QAAQ,IAAI,QAAQ,EAAE;EACtB,YAAY,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;EACtE,QAAQ;EACR,QAAQ,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK;EACjD,YAAY,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,EAAE;EACtC,gBAAgB,OAAO,CAAC,MAAM,EAAE;EAChC,YAAY;EACZ,QAAQ,CAAC,CAAC;EACV,QAAQ,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK;EAClC,YAAY,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;EACpC,gBAAgB,OAAO,CAAC,MAAM,EAAE;EAChC,gBAAgB,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC;EACnE,YAAY;EACZ,QAAQ,CAAC;EACT,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,CAAC;EACxD,QAAQ,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;EACnE,QAAQ,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI;EAChC,YAAY,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM;EAChD,gBAAgB,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,WAAW,CAAC;EAClE,gBAAgB,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;EACnE,gBAAgB,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;EAC3C,gBAAgB,MAAM,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,mBAAmB,CAAC;EACrF,gBAAgB,MAAM,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,yBAAyB,CAAC;EAC7F,gBAAgB,eAAe,CAAC,OAAO,CAAC,SAAS,IAAI;EACrD,oBAAoB,MAAM,aAAa,GAAG,SAAS,CAAC,YAAY,CAAC,iBAAiB,CAAC;EACnF,oBAAoB,IAAI,YAAY,KAAK,GAAG,IAAI,aAAa,KAAK,YAAY,EAAE;EAChF,wBAAwB,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;EAC5D,oBAAoB;EACpB,yBAAyB;EACzB,wBAAwB,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;EACzD,oBAAoB;EACpB,gBAAgB,CAAC,CAAC;EAClB,gBAAgB,iBAAiB,CAAC,OAAO,CAAC,OAAO,IAAI;EACrD,oBAAoB,MAAM,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,yBAAyB,CAAC;EAC3F,oBAAoB,MAAM,aAAa,GAAG,cAAc,EAAE,gBAAgB,CAAC,gCAAgC,CAAC,CAAC,MAAM,IAAI,CAAC;EACxH,oBAAoB,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC;EAC9D,oBAAoB,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,SAAS;EAC7G,oBAAoB,IAAI,MAAM,EAAE;EAChC,wBAAwB,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;EAClF,oBAAoB;EACpB,oBAAoB,IAAI,aAAa,KAAK,CAAC,EAAE;EAC7C,wBAAwB,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;EACvD,oBAAoB;EACpB,yBAAyB;EACzB,wBAAwB,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;EAC1D,oBAAoB;EACpB,gBAAgB,CAAC,CAAC;EAClB,YAAY,CAAC,CAAC;EACd,QAAQ,CAAC,CAAC;EACV,IAAI;EACJ,IAAI,UAAU,CAAC,IAAI,EAAE;EACrB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;EAC5D,IAAI;EACJ;;EAEA,MAAM,WAAW,CAAC;EAClB,IAAI,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE;EAC9B,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;EAC9B,QAAQ,IAAI,CAAC,UAAU,GAAG,KAAK;EAC/B,QAAQ,IAAI,CAAC,kBAAkB,GAAG,KAAK;EACvC,QAAQ,IAAI,CAAC,qBAAqB,GAAG,KAAK;EAC1C,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI;EACnC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,KAAK;EACxC,QAAQ,IAAI,CAAC,sBAAsB,GAAG,KAAK;EAC3C,QAAQ,IAAI,CAAC,wBAAwB,GAAG,KAAK;EAC7C,QAAQ,IAAI,CAAC,QAAQ,GAAG,KAAK;EAC7B,QAAQ,IAAI,CAAC,WAAW,GAAG,EAAE;EAC7B,QAAQ,IAAI,CAAC,0BAA0B,GAAG,IAAI;EAC9C,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI;EAChC,QAAQ,IAAI,CAAC,sBAAsB,GAAG,CAAC,KAAK,KAAK;EACjD,YAAY,KAAK,CAAC,eAAe,EAAE;EACnC,YAAY,KAAK,CAAC,cAAc,EAAE;EAClC,YAAY,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa;EAC/C,YAAY,IAAI,CAAC,OAAO;EACxB,gBAAgB;EAChB,YAAY,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,gCAAgC,CAAC;EACnF,YAAY,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,sBAAsB,CAAC;EACrE,YAAY,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,wBAAwB,CAAC;EACzE,YAAY,IAAI,QAAQ,EAAE;EAC1B,gBAAgB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;EACzG,YAAY;EACZ,QAAQ,CAAC;EACT,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE;EACxC,YAAY,IAAI,CAAC,IAAI,EAAE;EACvB,QAAQ;EACR,IAAI;EACJ,IAAI,IAAI,GAAG;EACX,QAAQ,IAAI,CAAC,eAAe,EAAE;EAC9B,QAAQ,IAAI,CAAC,YAAY,EAAE;EAC3B,QAAQ,IAAI,CAAC,UAAU,EAAE;EACzB,QAAQ,IAAI,CAAC,eAAe,EAAE;EAC9B,QAAQ,IAAI,CAAC,mBAAmB,EAAE;EAClC,QAAQ,IAAI,CAAC,sBAAsB,EAAE;EACrC,QAAQ,IAAI,CAAC,mBAAmB,EAAE;EAClC,QAAQ,IAAI,CAAC,aAAa,EAAE;EAC5B,IAAI;EACJ,IAAI,eAAe,GAAG;EACtB,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;EACtC,YAAY,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW;EACvD,YAAY;EACZ,QAAQ;EACR,QAAQ,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,gCAAgC,CAAC;EAChF,QAAQ,IAAI,OAAO,EAAE,OAAO,EAAE;EAC9B,YAAY,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,OAAO;EAC9C,QAAQ;EACR,IAAI;EACJ,IAAI,YAAY,GAAG;EACnB,QAAQ,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC;EAC5E,QAAQ,IAAI,aAAa,EAAE;EAC3B,YAAY,IAAI;EAChB,gBAAgB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;EAC1D,gBAAgB,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,KAAK;EAC9D,gBAAgB,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,IAAI,KAAK;EAC9E,gBAAgB,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC,qBAAqB,IAAI,KAAK;EACpF,gBAAgB,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,eAAe,KAAK,SAAS,GAAG,QAAQ,CAAC,eAAe,GAAG,IAAI;EAC/G,gBAAgB,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC,mBAAmB,IAAI,KAAK;EAChF,gBAAgB,IAAI,CAAC,sBAAsB,GAAG,QAAQ,CAAC,sBAAsB,IAAI,KAAK;EACtF,gBAAgB,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC,wBAAwB,IAAI,KAAK;EAC1F,gBAAgB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,KAAK;EAC1D,YAAY;EACZ,YAAY,OAAO,CAAC,EAAE;EACtB,gBAAgB,OAAO,CAAC,IAAI,CAAC,yCAAyC,EAAE,CAAC,CAAC;EAC1E,YAAY;EACZ,QAAQ;EACR,IAAI;EACJ,IAAI,YAAY,GAAG;EACnB,QAAQ,MAAM,QAAQ,GAAG;EACzB,YAAY,UAAU,EAAE,IAAI,CAAC,UAAU;EACvC,YAAY,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;EACvD,YAAY,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;EAC7D,YAAY,eAAe,EAAE,IAAI,CAAC,eAAe;EACjD,YAAY,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;EACzD,YAAY,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;EAC/D,YAAY,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;EACnE,YAAY,QAAQ,EAAE,IAAI,CAAC;EAC3B,SAAS;EACT,QAAQ,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;EAChF,QAAQ,IAAI,CAAC,qBAAqB,EAAE;EACpC,IAAI;EACJ,IAAI,qBAAqB,GAAG;EAC5B,QAAQ,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC;EACtE,QAAQ,IAAI,WAAW,EAAE;EACzB,YAAY,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,wBAAwB;EAC3K,YAAY,IAAI,gBAAgB,EAAE;EAClC,gBAAgB,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC;EAC/D,YAAY;EACZ,iBAAiB;EACjB,gBAAgB,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,CAAC;EAClE,YAAY;EACZ,QAAQ;EACR,IAAI;EACJ,IAAI,UAAU,GAAG;EACjB,QAAQ,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC;EAC1E,QAAQ,IAAI,YAAY,EAAE;EAC1B,YAAY;EACZ,QAAQ;EACR,QAAQ,MAAM,QAAQ,GAAG;AACzB;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI,CAAC;EACL,QAAQ,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,QAAQ,CAAC;EAC/D,IAAI;EACJ,IAAI,aAAa,GAAG;EACpB,QAAQ,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,mBAAmB,CAAC;EACzD,QAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,sBAAsB,CAAC;EAC/D,QAAQ,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,wBAAwB,CAAC;EACnE,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;EAC3C,QAAQ,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,kBAAkB,CAAC;EACvD,QAAQ,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC;EACtE,QAAQ,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC;EAClE,QAAQ,IAAI,WAAW,IAAI,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE;EACvD,YAAY,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;EAC/C,YAAY,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;EAC3C,QAAQ;EACR,IAAI;EACJ,IAAI,eAAe,GAAG;EACtB,QAAQ,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC;EACtE,QAAQ,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC;EAClE,QAAQ,IAAI,WAAW,IAAI,SAAS,EAAE;EACtC,YAAY,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM;EACxD,gBAAgB,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;EAC9C,gBAAgB,IAAI,IAAI,CAAC,QAAQ,EAAE;EACnC,oBAAoB,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;EACvD,oBAAoB,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;EACnD,gBAAgB;EAChB,qBAAqB;EACrB,oBAAoB,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;EAC1D,oBAAoB,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;EACtD,gBAAgB;EAChB,gBAAgB,IAAI,CAAC,YAAY,EAAE;EACnC,YAAY,CAAC,CAAC;EACd,YAAY,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK;EACtD,gBAAgB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM;EACvC,gBAAgB,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC;EAClF,gBAAgB,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;EACrF,oBAAoB,IAAI,CAAC,QAAQ,GAAG,KAAK;EACzC,oBAAoB,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;EAC1D,oBAAoB,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;EACtD,oBAAoB,IAAI,CAAC,YAAY,EAAE;EACvC,gBAAgB;EAChB,YAAY,CAAC,CAAC;EACd,QAAQ;EACR,IAAI;EACJ,IAAI,mBAAmB,GAAG;EAC1B,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM;EACtD,YAAY,IAAI,CAAC,2BAA2B,EAAE;EAC9C,QAAQ,CAAC,CAAC;EACV,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,cAAc,EAAE,MAAM;EACxD,YAAY,IAAI,CAAC,2BAA2B,EAAE;EAC9C,QAAQ,CAAC,CAAC;EACV,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM;EACvD,YAAY,IAAI,CAAC,2BAA2B,EAAE;EAC9C,QAAQ,CAAC,CAAC;EACV,IAAI;EACJ,IAAI,2BAA2B,GAAG;EAClC,QAAQ,IAAI,CAAC,UAAU,EAAE;EACzB,QAAQ,IAAI,CAAC,eAAe,EAAE;EAC9B,QAAQ,IAAI,CAAC,mBAAmB,EAAE;EAClC,QAAQ,IAAI,CAAC,aAAa,EAAE;EAC5B,QAAQ,IAAI,CAAC,qBAAqB,EAAE;EACpC,IAAI;EACJ,IAAI,mBAAmB,GAAG;EAC1B,QAAQ,MAAM,wBAAwB,GAAG,QAAQ,CAAC,cAAc,CAAC,wBAAwB,CAAC;EAC1F,QAAQ,IAAI,wBAAwB,EAAE;EACtC,YAAY,wBAAwB,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB;EACvE,YAAY,wBAAwB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM;EACtE,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,OAAO,CAAC;EACzE,YAAY,CAAC,CAAC;EACd,QAAQ;EACR,QAAQ,MAAM,2BAA2B,GAAG,QAAQ,CAAC,cAAc,CAAC,2BAA2B,CAAC;EAChG,QAAQ,IAAI,2BAA2B,EAAE;EACzC,YAAY,2BAA2B,CAAC,OAAO,GAAG,IAAI,CAAC,sBAAsB;EAC7E,YAAY,2BAA2B,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM;EACzE,gBAAgB,IAAI,CAAC,qBAAqB,CAAC,2BAA2B,CAAC,OAAO,CAAC;EAC/E,YAAY,CAAC,CAAC;EACd,QAAQ;EACR,QAAQ,MAAM,6BAA6B,GAAG,QAAQ,CAAC,cAAc,CAAC,6BAA6B,CAAC;EACpG,QAAQ,IAAI,6BAA6B,EAAE;EAC3C,YAAY,6BAA6B,CAAC,OAAO,GAAG,IAAI,CAAC,wBAAwB;EACjF,YAAY,6BAA6B,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM;EAC3E,gBAAgB,IAAI,CAAC,uBAAuB,CAAC,6BAA6B,CAAC,OAAO,CAAC;EACnF,YAAY,CAAC,CAAC;EACd,QAAQ;EACR,QAAQ,MAAM,eAAe,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC;EACxE,QAAQ,MAAM,uBAAuB,GAAG,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC;EACxF,QAAQ,IAAI,eAAe,EAAE;EAC7B,YAAY,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU;EACrD,YAAY,eAAe,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM;EAC7D,gBAAgB,IAAI,eAAe,CAAC,OAAO,IAAI,uBAAuB,EAAE;EACxE,oBAAoB,uBAAuB,CAAC,OAAO,GAAG,KAAK;EAC3D,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;EACjD,gBAAgB;EAChB,gBAAgB,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC;EAC3D,YAAY,CAAC,CAAC;EACd,QAAQ;EACR,QAAQ,IAAI,uBAAuB,EAAE;EACrC,YAAY,uBAAuB,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB;EACrE,YAAY,uBAAuB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM;EACrE,gBAAgB,IAAI,uBAAuB,CAAC,OAAO,IAAI,eAAe,EAAE;EACxE,oBAAoB,eAAe,CAAC,OAAO,GAAG,KAAK;EACnD,oBAAoB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;EAC7C,gBAAgB;EAChB,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,OAAO,CAAC;EACvE,gBAAgB,IAAI,CAAC,4BAA4B,EAAE;EACnD,YAAY,CAAC,CAAC;EACd,QAAQ;EACR,aAAa;EACb,YAAY,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC;EAChE,QAAQ;EACR,QAAQ,MAAM,0BAA0B,GAAG,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC;EAC9F,QAAQ,IAAI,0BAA0B,EAAE;EACxC,YAAY,0BAA0B,CAAC,OAAO,GAAG,IAAI,CAAC,qBAAqB;EAC3E,YAAY,0BAA0B,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM;EACxE,gBAAgB,IAAI,CAAC,oBAAoB,CAAC,0BAA0B,CAAC,OAAO,CAAC;EAC7E,YAAY,CAAC,CAAC;EACd,QAAQ;EACR,QAAQ,MAAM,oBAAoB,GAAG,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC;EAClF,QAAQ,IAAI,oBAAoB,EAAE;EAClC,YAAY,oBAAoB,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe;EAC/D,YAAY,oBAAoB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM;EAClE,gBAAgB,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,OAAO,CAAC;EACjE,YAAY,CAAC,CAAC;EACd,QAAQ;EACR,QAAQ,IAAI,CAAC,4BAA4B,EAAE;EAC3C,QAAQ,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;EACvE,QAAQ,IAAI,aAAa,EAAE;EAC3B,YAAY,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM;EAC1D,gBAAgB,IAAI,CAAC,UAAU,EAAE;EACjC,YAAY,CAAC,CAAC;EACd,QAAQ;EACR,IAAI;EACJ,IAAI,kBAAkB,CAAC,IAAI,EAAE;EAC7B,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,mBAAmB;EACxF,QAAQ,MAAM,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC,+EAA+E,CAAC;EACvI,QAAQ,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK;EAC1C,YAAY,MAAM,OAAO,GAAG,OAAO;EACnC,YAAY,IAAI,IAAI,CAAC,mBAAmB,EAAE;EAC1C,gBAAgB,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,oBAAoB;EAC5D,gBAAgB,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK;EACvG,gBAAgB,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC;EACrD,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC;EACxD,YAAY;EACZ,iBAAiB;EACjB,gBAAgB,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;EAC9C,gBAAgB,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG;EACjD,gBAAgB,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC;EACxD,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;EAChD,YAAY;EACZ,QAAQ,CAAC,CAAC;EACV,QAAQ,IAAI,CAAC,YAAY,EAAE;EAC3B,IAAI;EACJ,IAAI,qBAAqB,CAAC,IAAI,EAAE;EAChC,QAAQ,IAAI,CAAC,sBAAsB,GAAG,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,sBAAsB;EAC9F,QAAQ,MAAM,eAAe,GAAG,QAAQ,CAAC,gBAAgB,CAAC,qFAAqF,CAAC;EAChJ,QAAQ,eAAe,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK;EAC7C,YAAY,MAAM,OAAO,GAAG,OAAO;EACnC,YAAY,IAAI,IAAI,CAAC,sBAAsB,EAAE;EAC7C,gBAAgB,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,oBAAoB;EAC5D,gBAAgB,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK;EACvG,gBAAgB,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC;EACrD,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC;EAC3D,YAAY;EACZ,iBAAiB;EACjB,gBAAgB,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;EAC9C,gBAAgB,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG;EACjD,gBAAgB,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC;EACxD,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;EAChD,YAAY;EACZ,QAAQ,CAAC,CAAC;EACV,QAAQ,IAAI,CAAC,YAAY,EAAE;EAC3B,IAAI;EACJ,IAAI,uBAAuB,CAAC,IAAI,EAAE;EAClC,QAAQ,IAAI,CAAC,wBAAwB,GAAG,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,wBAAwB;EAClG,QAAQ,MAAM,iBAAiB,GAAG,QAAQ,CAAC,gBAAgB,CAAC,yFAAyF,CAAC;EACtJ,QAAQ,iBAAiB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK;EAC/C,YAAY,MAAM,OAAO,GAAG,OAAO;EACnC,YAAY,IAAI,IAAI,CAAC,wBAAwB,EAAE;EAC/C,gBAAgB,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,oBAAoB;EAC5D,gBAAgB,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK;EACvG,gBAAgB,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC;EACrD,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC;EAC7D,YAAY;EACZ,iBAAiB;EACjB,gBAAgB,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;EAC9C,gBAAgB,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG;EACjD,gBAAgB,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC;EACxD,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;EAChD,YAAY;EACZ,QAAQ,CAAC,CAAC;EACV,QAAQ,IAAI,CAAC,YAAY,EAAE;EAC3B,IAAI;EACJ,IAAI,kBAAkB,CAAC,OAAO,EAAE,IAAI,EAAE;EACtC,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE;EAC1D,YAAY;EACZ,QAAQ;EACR,QAAQ,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,2BAA2B,CAAC,IAAI,EAAE;EACjF,QAAQ,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,oCAAoC,CAAC,IAAI,SAAS;EACpG,QAAQ,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,gCAAgC,CAAC,IAAI,YAAY;EAC/F,QAAQ,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;EACnD,QAAQ,KAAK,CAAC,SAAS,GAAG,oBAAoB;EAC9C,QAAQ,KAAK,CAAC,WAAW,GAAG,SAAS;EACrC,QAAQ,KAAK,CAAC,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC;EACtD,QAAQ,KAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM;EACnD,YAAY,KAAK,CAAC,WAAW,GAAG,YAAY;EAC5C,YAAY,QAAQ,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI;EACnF,gBAAgB,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;EAChD,YAAY,CAAC,CAAC;EACd,YAAY,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;EACvC,QAAQ,CAAC,CAAC;EACV,QAAQ,KAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM;EACnD,YAAY,KAAK,CAAC,WAAW,GAAG,SAAS;EACzC,YAAY,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;EACvC,QAAQ,CAAC,CAAC;EACV,QAAQ,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK;EAC/C,YAAY,CAAC,CAAC,eAAe,EAAE;EAC/B,YAAY,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;EACjD,QAAQ,CAAC,CAAC;EACV,QAAQ,MAAM,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,kCAAkC,CAAC,KAAK,MAAM;EACxG,QAAQ,IAAI,oBAAoB,IAAI,OAAO,CAAC,aAAa,EAAE;EAC3D,YAAY,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa;EAChD,YAAY,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;EAC1C,YAAY,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC;EACpD,YAAY,MAAM,YAAY,GAAG,IAAI,KAAK,WAAW,GAAG,SAAS,GAAG,IAAI,KAAK,SAAS,GAAG,SAAS,GAAG,SAAS;EAC9G,YAAY,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;EAC/D,YAAY,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK;EACjG,YAAY,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC;EAChD,YAAY,MAAM,CAAC,YAAY,CAAC,uCAAuC,EAAE,IAAI,CAAC;EAC9E,YAAY,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;EAC9C,YAAY,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;EAC7C,YAAY,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG;EACjC,YAAY,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG;EAClC,YAAY,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;EACrC,YAAY;EACZ,QAAQ;EACR,QAAQ,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;EAC3C,QAAQ,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;EAClC,IAAI;EACJ,IAAI,kBAAkB,CAAC,OAAO,EAAE;EAChC,QAAQ,MAAM,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,kCAAkC,CAAC,KAAK,MAAM;EACxG,QAAQ,IAAI,oBAAoB,IAAI,OAAO,CAAC,aAAa,EAAE;EAC3D,YAAY,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa;EAChD,YAAY,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC;EACrE,YAAY,IAAI,KAAK,EAAE;EACvB,gBAAgB,KAAK,CAAC,MAAM,EAAE;EAC9B,YAAY;EACZ,YAAY,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;EACzC,YAAY,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG;EAC5C,YAAY,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC;EACnD,YAAY,MAAM,CAAC,eAAe,CAAC,uCAAuC,CAAC;EAC3E,QAAQ;EACR,aAAa;EACb,YAAY,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC;EACtE,YAAY,IAAI,KAAK,EAAE;EACvB,gBAAgB,KAAK,CAAC,MAAM,EAAE;EAC9B,YAAY;EACZ,QAAQ;EACR,IAAI;EACJ,IAAI,eAAe,GAAG;EACtB,QAAQ,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,8BAA8B,CAAC;EAClF,QAAQ,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAI;EACpC,YAAY,MAAM,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,0BAA0B,CAAC,IAAI,EAAE;EAC1F,YAAY,OAAO,CAAC,SAAS,GAAG,eAAe;EAC/C,YAAY,OAAO,CAAC,eAAe,CAAC,6BAA6B,CAAC;EAClE,QAAQ,CAAC,CAAC;EACV,IAAI;EACJ,IAAI,aAAa,CAAC,IAAI,EAAE;EACxB,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU;EACtE,QAAQ,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,CAAC,8CAA8C,CAAC;EACpG,QAAQ,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK;EACxC,YAAY,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,qBAAqB,CAAC;EACvE,YAAY,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO,EAAE;EAC5C;EACA,gBAAgB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,0BAA0B,CAAC,EAAE;EACvE,oBAAoB,OAAO,CAAC,YAAY,CAAC,0BAA0B,EAAE,OAAO,CAAC,SAAS,CAAC;EACvF,gBAAgB;EAChB,gBAAgB,OAAO,CAAC,WAAW,GAAG,OAAO;EAC7C,gBAAgB,OAAO,CAAC,YAAY,CAAC,6BAA6B,EAAE,MAAM,CAAC;EAC3E,gBAAgB,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS;EACpD,gBAAgB,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS;EAC/C,gBAAgB,IAAI,IAAI,CAAC,eAAe,EAAE;EAC1C,oBAAoB,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;EACxD,gBAAgB;EAChB,YAAY;EACZ,iBAAiB;EACjB,gBAAgB,MAAM,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,0BAA0B,CAAC,IAAI,EAAE;EAC9F,gBAAgB,IAAI,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,6BAA6B,CAAC,EAAE;EACpF,oBAAoB,OAAO,CAAC,SAAS,GAAG,eAAe;EACvD,oBAAoB,OAAO,CAAC,eAAe,CAAC,6BAA6B,CAAC;EAC1E,gBAAgB;EAChB,gBAAgB,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,aAAa;EACxD,gBAAgB,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS;EAC/C,gBAAgB,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC;EACvD,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;EAChD,YAAY;EACZ,QAAQ,CAAC,CAAC;EACV,QAAQ,IAAI,CAAC,YAAY,EAAE;EAC3B,IAAI;EACJ,IAAI,iBAAiB,CAAC,IAAI,EAAE;EAC5B,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,kBAAkB;EACtF,QAAQ,IAAI,CAAC,sBAAsB,EAAE;EACrC,QAAQ,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,CAAC,8CAA8C,CAAC;EACpG,QAAQ,UAAU,CAAC,OAAO,CAAC,OAAO,IAAI;EACtC,YAAY,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,0BAA0B,CAAC;EAC7E,YAAY,MAAM,mBAAmB,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC1E,YAAY,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,OAAO;EAC9D,YAAY,IAAI,IAAI,CAAC,kBAAkB,EAAE;EACzC,gBAAgB,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,oBAAoB;EAChE,gBAAgB,WAAW,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK;EACvD,gBAAgB,IAAI,mBAAmB,EAAE;EACzC,oBAAoB,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ;EACpD,gBAAgB;EAChB,gBAAgB,IAAI,IAAI,CAAC,eAAe,EAAE;EAC1C,oBAAoB,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;EACxD,gBAAgB;EAChB,gBAAgB,IAAI,IAAI,CAAC,qBAAqB,EAAE;EAChD,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;EACnD,gBAAgB;EAChB,YAAY;EACZ,iBAAiB;EACjB,gBAAgB,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;EAClD,gBAAgB,WAAW,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG;EACrD,gBAAgB,IAAI,mBAAmB,EAAE;EACzC,oBAAoB,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU;EACtD,gBAAgB;EAChB,gBAAgB,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC;EACvD,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;EAChD,gBAAgB,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;EAClD,YAAY;EACZ,QAAQ,CAAC,CAAC;EACV,QAAQ,IAAI,CAAC,YAAY,EAAE;EAC3B,IAAI;EACJ,IAAI,4BAA4B,GAAG;EACnC,QAAQ,MAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC;EAChF,QAAQ,MAAM,oBAAoB,GAAG,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC;EAClF,QAAQ,IAAI,YAAY,EAAE;EAC1B,YAAY,YAAY,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,GAAG,OAAO,GAAG,MAAM;EACnF,QAAQ;EACR,QAAQ,IAAI,oBAAoB,EAAE;EAClC,YAAY,oBAAoB,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,kBAAkB,GAAG,OAAO,GAAG,MAAM;EAC3F,QAAQ;EACR,IAAI;EACJ,IAAI,oBAAoB,CAAC,IAAI,EAAE;EAC/B,QAAQ,IAAI,CAAC,qBAAqB,GAAG,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,qBAAqB;EAC5F,QAAQ,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,eAAe,EAAE;EAChE,YAAY,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;EACtC,YAAY,MAAM,oBAAoB,GAAG,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC;EACtF,YAAY,IAAI,oBAAoB,EAAE;EACtC,gBAAgB,oBAAoB,CAAC,OAAO,GAAG,KAAK;EACpD,YAAY;EACZ,QAAQ;EACR,QAAQ,IAAI,CAAC,sBAAsB,EAAE;EACrC,QAAQ,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,CAAC,8CAA8C,CAAC;EACpG,QAAQ,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK;EACnC,YAAY,MAAM,OAAO,GAAG,EAAE;EAC9B,YAAY,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;EAC9C,YAAY,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,kBAAkB,EAAE;EACvE,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;EAC/C,YAAY;EACZ,QAAQ,CAAC,CAAC;EACV,QAAQ,IAAI,CAAC,YAAY,EAAE;EAC3B,IAAI;EACJ,IAAI,sBAAsB,GAAG;EAC7B,QAAQ,IAAI,IAAI,CAAC,0BAA0B,EAAE;EAC7C,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,0BAA0B,CAAC,iBAAiB;EAC9E,YAAY,IAAI,QAAQ,EAAE;EAC1B,gBAAgB,QAAQ,CAAC,WAAW,EAAE;EACtC,YAAY;EACZ,YAAY,IAAI,CAAC,0BAA0B,GAAG,IAAI;EAClD,QAAQ;EACR,IAAI;EACJ,IAAI,iBAAiB,CAAC,OAAO,EAAE;EAC/B,QAAQ,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,qBAAqB,CAAC;EACnE,QAAQ,IAAI,CAAC,OAAO;EACpB,YAAY;EACZ,QAAQ,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;EAC1C,QAAQ,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,0BAA0B,CAAC,EAAE;EAC/D,YAAY,OAAO,CAAC,YAAY,CAAC,0BAA0B,EAAE,OAAO,CAAC,SAAS,CAAC;EAC/E,QAAQ;EACR,QAAQ,MAAM,WAAW,GAAG,MAAM;EAClC,YAAY,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;EACzE,gBAAgB;EAChB,YAAY;EACZ,YAAY,IAAI,IAAI,CAAC,0BAA0B,KAAK,OAAO,EAAE;EAC7D,gBAAgB;EAChB,YAAY;EACZ,YAAY,IAAI,CAAC,sBAAsB,EAAE;EACzC,YAAY,IAAI,CAAC,0BAA0B,GAAG,OAAO;EACrD,YAAY,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS;EAChD,YAAY,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS;EAC3C,YAAY,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS;EAChD,YAAY,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS;EAC9C,YAAY,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK;EAC9C,YAAY,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS;EAC5C,YAAY,OAAO,CAAC,WAAW,GAAG,OAAO;EACzC,YAAY,OAAO,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,sBAAsB,CAAC;EAC1E,QAAQ,CAAC;EACT,QAAQ,MAAM,WAAW,GAAG,MAAM;EAClC,YAAY,IAAI,IAAI,CAAC,0BAA0B,KAAK,OAAO,EAAE;EAC7D,gBAAgB,IAAI,CAAC,0BAA0B,GAAG,IAAI;EACtD,YAAY;EACZ,YAAY,MAAM,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,0BAA0B,CAAC;EACpF,YAAY,IAAI,eAAe,EAAE;EACjC,gBAAgB,OAAO,CAAC,SAAS,GAAG,eAAe;EACnD,YAAY;EACZ,YAAY,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,aAAa;EACpD,YAAY,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS;EAC3C,YAAY,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS;EAChD,YAAY,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,SAAS;EAC9C,YAAY,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG;EAC5C,YAAY,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS;EAC5C,YAAY,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,sBAAsB,CAAC;EAC7E,QAAQ,CAAC;EACT,QAAQ,OAAO,CAAC,iBAAiB,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE;EAChE,QAAQ,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,CAAC;EAC3D,IAAI;EACJ,IAAI,oBAAoB,CAAC,OAAO,EAAE;EAClC,QAAQ,MAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB;EAClD,QAAQ,IAAI,QAAQ,EAAE;EACtB,YAAY,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC;EAC3E,YAAY,OAAO,OAAO,CAAC,iBAAiB;EAC5C,YAAY,QAAQ,CAAC,WAAW,EAAE;EAClC,QAAQ;EACR,IAAI;EACJ,IAAI,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,EAAE;EACpD,QAAQ,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;EACxC,QAAQ,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,oCAAoC,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,2BAA2B,CAAC,IAAI,EAAE;EAClJ,QAAQ,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,gCAAgC,CAAC,IAAI,YAAY;EAC/F,QAAQ,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,sBAAsB,CAAC,IAAI,EAAE;EACvE,QAAQ,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,wBAAwB,CAAC,IAAI,EAAE;EAC3E,QAAQ,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,EAAE;EACrE,QAAQ,IAAI,CAAC,YAAY,IAAI,CAAC,GAAG;EACjC,YAAY;EACZ,QAAQ,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;EACrD,QAAQ,OAAO,CAAC,SAAS,GAAG,cAAc;EAC1C,QAAQ,OAAO,CAAC,SAAS,GAAG;AAC5B;AACA,qCAAqC,EAAE,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC;AACtE;AACA;AACA,iCAAiC,EAAE,GAAG,CAAC;AACvC,IAAI,CAAC;EACL,QAAQ,IAAI,WAAW,GAAG,IAAI;EAC9B,QAAQ,MAAM,WAAW,GAAG,MAAM;EAClC,YAAY,IAAI,WAAW,EAAE;EAC7B,gBAAgB,YAAY,CAAC,WAAW,CAAC;EACzC,gBAAgB,WAAW,GAAG,IAAI;EAClC,YAAY;EACZ,YAAY,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;EAC5C,QAAQ,CAAC;EACT,QAAQ,MAAM,WAAW,GAAG,MAAM;EAClC,YAAY,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;EAClD,gBAAgB,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;EACnD,YAAY,CAAC,EAAE,GAAG,CAAC;EACnB,QAAQ,CAAC;EACT,QAAQ,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,CAAC;EAC3D,QAAQ,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,CAAC;EAC3D,QAAQ,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,CAAC;EAC3D,QAAQ,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,WAAW,CAAC;EAC3D,QAAQ,MAAM,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC;EACvE,QAAQ,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK;EACpC,YAAY,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE;EACzD,gBAAgB;EAChB,YAAY;EACZ,YAAY,CAAC,CAAC,cAAc,EAAE;EAC9B,YAAY,CAAC,CAAC,eAAe,EAAE;EAC/B,YAAY,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;EAC7E,QAAQ,CAAC;EACT,QAAQ,eAAe,EAAE,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC;EAChE,QAAQ,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC;EACvE,QAAQ,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK;EACpC,YAAY,CAAC,CAAC,cAAc,EAAE;EAC9B,YAAY,CAAC,CAAC,eAAe,EAAE;EAC/B,YAAY,MAAM,UAAU,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;EAClE,YAAY,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM;EACjE,gBAAgB,UAAU,CAAC,WAAW,GAAG,GAAG;EAC5C,gBAAgB,UAAU,CAAC,MAAM;EACjC,oBAAoB,UAAU,CAAC,WAAW,GAAG,IAAI;EACjD,gBAAgB,CAAC,EAAE,IAAI,CAAC;EACxB,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK;EAC9B,gBAAgB,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC;EAC/D,YAAY,CAAC,CAAC;EACd,QAAQ,CAAC;EACT,QAAQ,UAAU,EAAE,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC;EAC3D,QAAQ,MAAM,eAAe,GAAG,MAAM;EACtC,YAAY,MAAM,WAAW,GAAG,kBAAkB,CAAC,qBAAqB,EAAE;EAC1E,YAAY,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW;EACrD,YAAY,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU;EACnD,YAAY,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;EAC5C,YAAY,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG;EACpC,YAAY,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG;EACnC,YAAY,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM;EAC5C,YAAY,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;EACzC,YAAY,MAAM,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,EAAE;EACrE,YAAY,MAAM,YAAY,GAAG,iBAAiB,CAAC,KAAK;EACxD,YAAY,MAAM,aAAa,GAAG,iBAAiB,CAAC,MAAM;EAC1D,YAAY,IAAI,IAAI,GAAG,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;EACtF,YAAY,IAAI,GAAG,GAAG,WAAW,CAAC,GAAG,GAAG,aAAa,GAAG,CAAC;EACzD,YAAY,IAAI,IAAI,GAAG,CAAC,EAAE;EAC1B,gBAAgB,IAAI,GAAG,CAAC;EACxB,YAAY;EACZ,iBAAiB,IAAI,IAAI,GAAG,YAAY,GAAG,aAAa,GAAG,CAAC,EAAE;EAC9D,gBAAgB,IAAI,GAAG,aAAa,GAAG,YAAY,GAAG,CAAC;EACvD,YAAY;EACZ,YAAY,IAAI,GAAG,GAAG,CAAC,EAAE;EACzB,gBAAgB,GAAG,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;EAC5C,gBAAgB,IAAI,GAAG,GAAG,aAAa,GAAG,cAAc,GAAG,CAAC,EAAE;EAC9D,oBAAoB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,cAAc,GAAG,aAAa,IAAI,CAAC,CAAC;EAC3E,gBAAgB;EAChB,YAAY;EACZ,YAAY,IAAI,GAAG,GAAG,aAAa,GAAG,cAAc,GAAG,CAAC,EAAE;EAC1D,gBAAgB,GAAG,GAAG,cAAc,GAAG,aAAa,GAAG,CAAC;EACxD,YAAY;EACZ,YAAY,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO;EAC5C,YAAY,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;EAC5C,YAAY,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;EAC1C,YAAY,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM;EAC5C,YAAY,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;EACzC,QAAQ,CAAC;EACT,QAAQ,OAAO,CAAC,gBAAgB,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE;EAC5G,QAAQ,OAAO,CAAC,gBAAgB,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE;EAC/D,QAAQ,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;EACpC,QAAQ,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;EACtC,QAAQ,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;EAC7E,QAAQ,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;EAC7E,IAAI;EACJ,IAAI,kBAAkB,CAAC,OAAO,EAAE;EAChC,QAAQ,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC;EAC9D,QAAQ,IAAI,OAAO,EAAE;EACrB,YAAY,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB;EACrD,YAAY,MAAM,eAAe,GAAG,OAAO,CAAC,gBAAgB;EAC5D,YAAY,IAAI,QAAQ,EAAE;EAC1B,gBAAgB,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC;EAC/E,gBAAgB,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,QAAQ,CAAC,WAAW,CAAC;EAC/E,gBAAgB,MAAM,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC;EAC/E,gBAAgB,eAAe,EAAE,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC;EACpF,gBAAgB,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC;EAC/E,gBAAgB,UAAU,EAAE,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC;EAC/E,gBAAgB,IAAI,QAAQ,CAAC,eAAe,EAAE;EAC9C,oBAAoB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC;EAClF,oBAAoB,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC;EAClF,gBAAgB;EAChB,gBAAgB,OAAO,OAAO,CAAC,gBAAgB;EAC/C,YAAY;EACZ,YAAY,IAAI,eAAe,EAAE;EACjC,gBAAgB,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,eAAe,CAAC,WAAW,CAAC;EACtF,gBAAgB,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,eAAe,CAAC,WAAW,CAAC;EACtF,gBAAgB,OAAO,OAAO,CAAC,gBAAgB;EAC/C,YAAY;EACZ,YAAY,OAAO,CAAC,MAAM,EAAE;EAC5B,QAAQ;EACR,IAAI;EACJ,IAAI,sBAAsB,CAAC,OAAO,EAAE;EACpC,QAAQ,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC;EAC/C,QAAQ,MAAM,kBAAkB,GAAG,MAAM;EACzC,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;EACnE,gBAAgB;EAChB,YAAY;EACZ,YAAY,IAAI,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,EAAE;EACxD,gBAAgB;EAChB,YAAY;EACZ,YAAY,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC;EACrD,QAAQ,CAAC;EACT,QAAQ,OAAO,CAAC,mBAAmB,GAAG,kBAAkB;EACxD,QAAQ,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,kBAAkB,CAAC;EAClE,IAAI;EACJ,IAAI,yBAAyB,CAAC,OAAO,EAAE;EACvC,QAAQ,MAAM,OAAO,GAAG,OAAO,CAAC,mBAAmB;EACnD,QAAQ,IAAI,OAAO,EAAE;EACrB,YAAY,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC;EAC9D,YAAY,OAAO,OAAO,CAAC,mBAAmB;EAC9C,QAAQ;EACR,IAAI;EACJ,IAAI,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;EACzC,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;EACpH,QAAQ,MAAM,OAAO,GAAG;EACxB,YAAY,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;EAC7D,YAAY,CAAC,uBAAuB,EAAE,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EAClF,YAAY,CAAC,+BAA+B,EAAE,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EAC1F,YAAY,CAAC,uBAAuB,EAAE,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EAClF,SAAS;EACT,QAAQ,IAAI;EACZ,YAAY,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;EAC5C,QAAQ;EACR,QAAQ,OAAO,KAAK,EAAE;EACtB,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;EAC5E,QAAQ;EACR,IAAI;EACJ,IAAI,cAAc,CAAC,IAAI,EAAE;EACzB,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe;EAChF,QAAQ,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,qBAAqB,EAAE;EAChE,YAAY,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;EAC5C,YAAY,MAAM,0BAA0B,GAAG,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC;EAClG,YAAY,IAAI,0BAA0B,EAAE;EAC5C,gBAAgB,0BAA0B,CAAC,OAAO,GAAG,KAAK;EAC1D,YAAY;EACZ,QAAQ;EACR,QAAQ,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,CAAC,8CAA8C,CAAC;EACpG,QAAQ,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,KAAK;EACxC,YAAY,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,eAAe,EAAE;EACjE,gBAAgB,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;EACpD,YAAY;EACZ,iBAAiB;EACjB,gBAAgB,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC;EACvD,gBAAgB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;EAChD,YAAY;EACZ,QAAQ,CAAC,CAAC;EACV,QAAQ,IAAI,CAAC,YAAY,EAAE;EAC3B,IAAI;EACJ,IAAI,UAAU,GAAG;EACjB,QAAQ,IAAI,CAAC,sBAAsB,EAAE;EACrC,QAAQ,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;EACtC,QAAQ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;EACzC,QAAQ,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;EAC3C,QAAQ,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;EACjC,QAAQ,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;EACrC,QAAQ,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;EACxC,QAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;EAClC,QAAQ,MAAM,wBAAwB,GAAG,QAAQ,CAAC,cAAc,CAAC,wBAAwB,CAAC;EAC1F,QAAQ,MAAM,2BAA2B,GAAG,QAAQ,CAAC,cAAc,CAAC,2BAA2B,CAAC;EAChG,QAAQ,MAAM,6BAA6B,GAAG,QAAQ,CAAC,cAAc,CAAC,6BAA6B,CAAC;EACpG,QAAQ,MAAM,eAAe,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC;EACxE,QAAQ,MAAM,uBAAuB,GAAG,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC;EACxF,QAAQ,MAAM,0BAA0B,GAAG,QAAQ,CAAC,cAAc,CAAC,0BAA0B,CAAC;EAC9F,QAAQ,MAAM,oBAAoB,GAAG,QAAQ,CAAC,cAAc,CAAC,oBAAoB,CAAC;EAClF,QAAQ,IAAI,wBAAwB;EACpC,YAAY,wBAAwB,CAAC,OAAO,GAAG,KAAK;EACpD,QAAQ,IAAI,2BAA2B;EACvC,YAAY,2BAA2B,CAAC,OAAO,GAAG,KAAK;EACvD,QAAQ,IAAI,6BAA6B;EACzC,YAAY,6BAA6B,CAAC,OAAO,GAAG,KAAK;EACzD,QAAQ,IAAI,eAAe;EAC3B,YAAY,eAAe,CAAC,OAAO,GAAG,KAAK;EAC3C,QAAQ,IAAI,uBAAuB;EACnC,YAAY,uBAAuB,CAAC,OAAO,GAAG,KAAK;EACnD,QAAQ,IAAI,0BAA0B;EACtC,YAAY,0BAA0B,CAAC,OAAO,GAAG,KAAK;EACtD,QAAQ,IAAI,oBAAoB;EAChC,YAAY,oBAAoB,CAAC,OAAO,GAAG,KAAK;EAChD,IAAI;EACJ,IAAI,sBAAsB,GAAG;EAC7B,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE;EAC9C,IAAI;EACJ;EACA,WAAW,CAAC,YAAY,GAAG,yBAAyB;;EAEpD,SAAS,gBAAgB,CAAC,OAAO,GAAG,EAAE,EAAE;EACxC,IAAI,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC;EACnC;EACA,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;EACtE,IAAI,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,8BAA8B,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,KAAK,MAAM;EACnH,IAAI,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAC,KAAK,IAAI;EAChF,IAAI,MAAM,mBAAmB,GAAG,QAAQ,CAAC,aAAa,CAAC,uCAAuC,CAAC,KAAK,IAAI;EACxG,IAAI,MAAM,kBAAkB,GAAG,QAAQ,CAAC,aAAa,CAAC,sCAAsC,CAAC,KAAK,IAAI;EACtG,IAAI,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,kCAAkC,CAAC,KAAK,IAAI;EAC/F,IAAI,MAAM,cAAc,GAAG,YAAY,IAAI,WAAW,IAAI,mBAAmB,IAAI,kBAAkB,IAAI,eAAe;EACtH,IAAI,IAAI,cAAc,EAAE;EACxB,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,MAAM;EAC5D,YAAY,gBAAgB,EAAE;EAC9B,QAAQ,CAAC,CAAC;EACV,IAAI;EACJ;EACA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;EACnC,IAAI,MAAM,CAAC,YAAY,GAAG;EAC1B,QAAQ,IAAI,EAAE,gBAAgB;EAC9B,QAAQ;EACR,KAAK;EACL;;QC9oDa,oBAAoB,CAAA;EAI/B,IAAA,WAAA,CAAoB,UAAuC,EAAE,EAAA;UAAzC,IAAA,CAAA,OAAO,GAAP,OAAO;UAHnB,IAAA,CAAA,WAAW,GAAuB,IAAI;EAI5C,QAAA,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE;cAC9B,IAAI,CAAC,IAAI,EAAE;UACb;MACF;MAEA,IAAI,GAAA;EACF,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;cACpB,IAAI,CAAC,OAAO,EAAE;UAChB;EAEA,QAAA,IAAI,CAAC,WAAW,GAAG,gBAAgB,CAAC;EAClC,YAAA,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;cACrC,GAAG,IAAI,CAAC;EACT,SAAA,CAAC;UAEF,OAAO,IAAI,CAAC,WAAW;MACzB;MAEA,OAAO,GAAA;EACL,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;cACpB,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,qBAAqB,CAAC;cAElE,IAAI,YAAY,EAAE;kBAChB,YAAY,CAAC,MAAM,EAAE;cACvB;UACF;EAEA,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;MACzB;MAEA,cAAc,GAAA;UACZ,OAAO,IAAI,CAAC,WAAW;MACzB;EAEA,IAAA,OAAO,WAAW,GAAA;UAChB,OAAO,oBAAoB,CAAC,QAAQ;MACtC;MAEA,OAAO,WAAW,CAAC,QAAqC,EAAA;EACtD,QAAA,oBAAoB,CAAC,QAAQ,GAAG,QAAQ;MAC1C;;EA3Ce,oBAAA,CAAA,QAAQ,GAAgC,IAAhC;EA8CnB,SAAU,wBAAwB,CAAC,OAAA,GAAuC,EAAE,EAAA;EAChF,IAAA,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,WAAW,EAAE;MAE3D,IAAI,gBAAgB,EAAE;UACpB,gBAAgB,CAAC,OAAO,EAAE;MAC5B;EAEA,IAAA,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAC,OAAO,CAAC;EAClD,IAAA,oBAAoB,CAAC,WAAW,CAAC,QAAQ,CAAC;EAE1C,IAAA,OAAO,QAAQ;EACjB;EAEA,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;MACpE,IAAI,cAAc,GAAG,KAAK;MAE1B,MAAM,kBAAkB,GAAG,MAAK;;UAC9B,IAAI,cAAc,EAAE;EAClB,YAAA,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC;cAErF;UACF;UAEA,MAAM,cAAc,GAAG,CAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,aAAa,CAAC,CAAA,4BAAA,CAA8B,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,YAAY,CAAC,SAAS,CAAC,MAAK,MAAM,IAAI,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAC,KAAK,IAAI;UAE7K,IAAI,CAAC,cAAc,EAAE;EACnB,YAAA,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC;cACtF;UACF;UAEA,cAAc,GAAG,IAAI;EAErB,QAAA,IAAI;EACF,YAAA,IAAI,WAA+B;EACnC,YAAA,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,QAAQ,CAAC,aAAa,CAAC,CAAA,4BAAA,CAA8B,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,YAAY,CAAC,SAAS,CAAC;cACjG,IAAI,SAAS,EAAE;kBACb,WAAW,GAAG,SAAS;cACzB;EAEA,YAAA,wBAAwB,CAAC;kBACvB,WAAW;EACX,gBAAA,QAAQ,EAAE;EACX,aAAA,CAAC;UAEJ;UAAE,OAAO,KAAK,EAAE;EACd,YAAA,OAAO,CAAC,IAAI,CAAC,8CAA8C,EAAE,KAAK,CAAC;UACrE;kBAAU;cACR,cAAc,GAAG,KAAK;UACxB;EACF,IAAA,CAAC;EAED,IAAA,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE;EACrC,QAAA,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;MACnF;WAAO;EACL,QAAA,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;MACnC;EAEA,IAAA,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,kBAAkB,CAAC;EAC3D,IAAA,QAAQ,CAAC,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,CAAC;EAC7D,IAAA,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,kBAAkB,CAAC;EAC9D;EAYA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;MACjC,MAAM,CAAC,oBAAoB,GAAG;EAC5B,QAAA,IAAI,EAAE,wBAAwB;UAC9B,oBAAoB;UACpB;OACD;EACH;;;;;;;;;;","x_google_ignoreList":[0]}
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/generators/base"
|
4
|
+
|
5
|
+
module ReActionView
|
6
|
+
module Generators
|
7
|
+
class InstallGenerator < Rails::Generators::Base
|
8
|
+
namespace "reactionview:install"
|
9
|
+
desc "Install ReActionView in your Rails application"
|
10
|
+
|
11
|
+
source_root File.expand_path("templates", __dir__)
|
12
|
+
|
13
|
+
def create_initializer
|
14
|
+
say "Creating ReActionView initializer...", :green
|
15
|
+
|
16
|
+
create_file "config/initializers/reactionview.rb", <<~RUBY
|
17
|
+
# frozen_string_literal: true
|
18
|
+
|
19
|
+
ReActionView.configure do |config|
|
20
|
+
# Intercept .html.erb templates and process them with `Herb::Engine` for enhanced features
|
21
|
+
# config.intercept_erb = true
|
22
|
+
|
23
|
+
# Enable debug mode in development (adds debug attributes to HTML)
|
24
|
+
config.debug_mode = Rails.env.development?
|
25
|
+
end
|
26
|
+
RUBY
|
27
|
+
end
|
28
|
+
|
29
|
+
def show_installation_complete
|
30
|
+
say "\nReActionView has been successfully installed! 🎉", :green
|
31
|
+
say "\nNext steps:", :blue
|
32
|
+
say " 1. Review config/initializers/reactionview.rb"
|
33
|
+
say " 2. Enable `config.intercept_erb = true` to process all .html.erb templates using `Herb::Engine`."
|
34
|
+
say " 3. Create .html.herb templates for explicit Herb usage."
|
35
|
+
|
36
|
+
say "\nLearn more:", :yellow
|
37
|
+
say " GitHub: https://github.com/marcoroth/reactionview"
|
38
|
+
say " Website: https://reactionview.dev"
|
39
|
+
|
40
|
+
say "\n✨ Thanks for riding the bleeding edge with Herb 🌿 and ReActionView! 🚀", :cyan
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ReActionView
|
4
|
+
class Config
|
5
|
+
attr_accessor :intercept_erb
|
6
|
+
attr_accessor :debug_mode
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@intercept_erb = false
|
10
|
+
@debug_mode = nil
|
11
|
+
end
|
12
|
+
|
13
|
+
def development?
|
14
|
+
defined?(Rails) && Rails.env.development?
|
15
|
+
end
|
16
|
+
|
17
|
+
def production?
|
18
|
+
defined?(Rails) && Rails.env.production?
|
19
|
+
end
|
20
|
+
|
21
|
+
def test?
|
22
|
+
defined?(Rails) && Rails.env.test?
|
23
|
+
end
|
24
|
+
|
25
|
+
def debug_mode_enabled?
|
26
|
+
return @debug_mode unless @debug_mode.nil?
|
27
|
+
|
28
|
+
development?
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.config
|
33
|
+
@config ||= Config.new
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.configure
|
37
|
+
yield(config)
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ReActionView
|
4
|
+
class Railtie < Rails::Railtie
|
5
|
+
initializer "reactionview.assets" do |app|
|
6
|
+
if ReActionView.config.development? && app.config.respond_to?(:assets)
|
7
|
+
gem_root = Gem::Specification.find_by_name("reactionview").gem_dir
|
8
|
+
|
9
|
+
app.config.assets.paths << File.join(gem_root, "app", "assets", "javascripts")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
initializer "reactionview.register_herb_handler" do
|
14
|
+
ActiveSupport.on_load(:action_view) do
|
15
|
+
ActionView::Template.register_template_handler :herb, ReActionView::Template::Handlers::Herb
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
config.after_initialize do
|
20
|
+
ActiveSupport.on_load(:action_view) do
|
21
|
+
ActionView::Template.register_template_handler :erb, ReActionView::Template::Handlers::Herb if ReActionView.config.intercept_erb
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ReActionView
|
4
|
+
class Template
|
5
|
+
module Handlers
|
6
|
+
class ERB < ActionView::Template::Handlers::ERB
|
7
|
+
autoload :Herb, "reactionview/template/handlers/herb/herb"
|
8
|
+
|
9
|
+
def call(template, source)
|
10
|
+
if template.format == :html && ReActionView.config.intercept_erb
|
11
|
+
::ReActionView::Template::Handlers::Herb.call(template, source)
|
12
|
+
else
|
13
|
+
super
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "herb"
|
4
|
+
|
5
|
+
module ReActionView
|
6
|
+
class Template
|
7
|
+
module Handlers
|
8
|
+
class Herb
|
9
|
+
class Herb < ::Herb::Engine
|
10
|
+
def initialize(input, properties = {})
|
11
|
+
@newline_pending = 0
|
12
|
+
|
13
|
+
# Dup properties so that we don't modify argument
|
14
|
+
properties = properties.to_h
|
15
|
+
|
16
|
+
properties[:bufvar] ||= "@output_buffer"
|
17
|
+
properties[:preamble] ||= ""
|
18
|
+
properties[:postamble] ||= properties[:bufvar].to_s
|
19
|
+
|
20
|
+
# Tell Herb whether the template will be compiled with `frozen_string_literal: true`
|
21
|
+
properties[:freeze_template_literals] = !::ActionView::Template.frozen_string_literal
|
22
|
+
|
23
|
+
properties[:escapefunc] = ""
|
24
|
+
|
25
|
+
super
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def add_text(text)
|
31
|
+
return if text.empty?
|
32
|
+
|
33
|
+
if text == "\n"
|
34
|
+
@newline_pending += 1
|
35
|
+
else
|
36
|
+
with_buffer do
|
37
|
+
@src << ".safe_append='"
|
38
|
+
@src << ("\n" * @newline_pending) if @newline_pending.positive?
|
39
|
+
@src << text.gsub(/['\\]/, '\\\\\&') << @text_end
|
40
|
+
end
|
41
|
+
|
42
|
+
@newline_pending = 0
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def add_expression(indicator, code)
|
47
|
+
add_rails_expression(indicator, code, wrap_parentheses: true)
|
48
|
+
end
|
49
|
+
|
50
|
+
def add_expression_block(indicator, code)
|
51
|
+
add_rails_expression(indicator, code, wrap_parentheses: false)
|
52
|
+
end
|
53
|
+
|
54
|
+
def add_rails_expression(indicator, code, wrap_parentheses:)
|
55
|
+
flush_newline_if_pending(@src)
|
56
|
+
|
57
|
+
with_buffer do
|
58
|
+
@src << if (indicator == "==") || @escape
|
59
|
+
".safe_expr_append="
|
60
|
+
else
|
61
|
+
".append="
|
62
|
+
end
|
63
|
+
|
64
|
+
if wrap_parentheses
|
65
|
+
@src << "(" << code << ")"
|
66
|
+
else
|
67
|
+
@src << " " << code
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def add_code(code)
|
73
|
+
flush_newline_if_pending(@src)
|
74
|
+
super
|
75
|
+
end
|
76
|
+
|
77
|
+
def add_postamble(_)
|
78
|
+
flush_newline_if_pending(@src)
|
79
|
+
super
|
80
|
+
end
|
81
|
+
|
82
|
+
def flush_newline_if_pending(src)
|
83
|
+
return unless @newline_pending.positive?
|
84
|
+
|
85
|
+
with_buffer { src << ".safe_append='#{"\n" * @newline_pending}" << @text_end }
|
86
|
+
@newline_pending = 0
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ReActionView
|
4
|
+
class Template
|
5
|
+
module Handlers
|
6
|
+
class Herb < ActionView::Template::Handlers::ERB
|
7
|
+
autoload :Herb, "reactionview/template/handlers/herb/herb"
|
8
|
+
|
9
|
+
class_attribute :erb_implementation, default: Handlers::Herb::Herb
|
10
|
+
|
11
|
+
def call(template, source)
|
12
|
+
config = {
|
13
|
+
filename: template.identifier,
|
14
|
+
project_path: Rails.root.to_s,
|
15
|
+
validation_mode: :overlay,
|
16
|
+
debug: ::ReActionView.config.debug_mode_enabled?,
|
17
|
+
content_for_head: reactionview_dev_tools_markup(template),
|
18
|
+
}
|
19
|
+
|
20
|
+
erb_implementation.new(source, config).src
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def layout_template?(template)
|
26
|
+
return false unless template.respond_to?(:identifier) && template.identifier
|
27
|
+
|
28
|
+
template.identifier.include?("/layouts/")
|
29
|
+
end
|
30
|
+
|
31
|
+
def reactionview_dev_tools_markup(template)
|
32
|
+
return nil unless layout_template?(template) && ::ReActionView.config.debug_mode_enabled?
|
33
|
+
|
34
|
+
<<~HTML
|
35
|
+
<meta name="herb-debug-mode" content="true">
|
36
|
+
<meta name="herb-rails-root" content="#{Rails.root}">
|
37
|
+
|
38
|
+
#{ActionController::Base.new.view_context.javascript_include_tag "reactionview-dev-tools.umd.js", defer: true}
|
39
|
+
HTML
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/reactionview/version.rb
CHANGED
data/lib/reactionview.rb
CHANGED
@@ -1,6 +1,27 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "reactionview/version"
|
4
|
+
require_relative "reactionview/config"
|
5
|
+
|
6
|
+
# require_relative "reactionview/validation_error"
|
7
|
+
# require_relative "reactionview/syntax_error_handler"
|
8
|
+
# require_relative "reactionview/validator"
|
9
|
+
# require_relative "reactionview/error_injector"
|
10
|
+
# require_relative "reactionview/dependency_tracker"
|
11
|
+
|
12
|
+
# require_relative "reactionview/validations/validation_orchestrator"
|
13
|
+
# require_relative "reactionview/validations/herb_syntax_validation"
|
14
|
+
# require_relative "reactionview/validations/herb_document_validation"
|
15
|
+
# require_relative "reactionview/validations/herb_linter"
|
16
|
+
# require_relative "reactionview/validations/html5_validation"
|
17
|
+
|
18
|
+
# require_relative "reactionview/source_annotation_extractor"
|
19
|
+
|
20
|
+
require_relative "reactionview/template/handlers/erb"
|
21
|
+
require_relative "reactionview/template/handlers/herb"
|
22
|
+
require_relative "reactionview/template/handlers/herb/herb"
|
23
|
+
|
24
|
+
require_relative "reactionview/railtie" if defined?(Rails::Railtie)
|
4
25
|
|
5
26
|
module ReActionView
|
6
27
|
end
|