{"version":3,"names":["test","expect","describe","page","goto","waitForLoadState","report","links","buttons","brokenLinks","disabledButtons","step","locator","linkCount","count","console","log","i","link","nth","href","getAttribute","text","textContent","isVisible","catch","push","trim","visible","buttonCount","button","isEnabled","type","enabled","mainLinks","selector","name","linkInfo","first","timeout","toBeVisible","screenshot","path","fullPage","inputs","inputCount","input","placeholder","toBeEnabled","submitButton","buttonText","details","firstItem","click","waitForTimeout","Math","min","startsWith","publicPages","pageInfo","pageReport","status","repeat","table","clickableCount","unclickableCount","enabledCount","disabledCount"],"sources":["links-and-buttons.spec.js"],"sourcesContent":["import { test, expect } from '@playwright/test'\n\n/**\n * E2E Test: 页面链接和按钮完整性检查\n * 检查每个页面的所有链接和按钮是否正常工作\n */\n\ntest.describe('页面链接和按钮检查', () => {\n\n  test('首页 - 检查所有链接和按钮', async ({ page }) => {\n    await page.goto('/')\n    await page.waitForLoadState('networkidle')\n\n    const report = {\n      page: '首页 /',\n      links: [],\n      buttons: [],\n      brokenLinks: [],\n      disabledButtons: []\n    }\n\n    // ========== 检查所有链接 ==========\n    await test.step('检查所有链接', async () => {\n      const links = page.locator('a[href]')\n      const linkCount = await links.count()\n\n      console.log(`\\n📊 首页共找到 ${linkCount} 个链接`)\n\n      for (let i = 0; i < linkCount; i++) {\n        const link = links.nth(i)\n        const href = await link.getAttribute('href')\n        const text = await link.textContent()\n        const isVisible = await link.isVisible().catch(() => false)\n\n        report.links.push({\n          href,\n          text: text?.trim() || '(无文本)',\n          visible: isVisible\n        })\n\n        console.log(`  ${i + 1}. [${isVisible ? '✓' : '✗'}] ${href} - \"${text?.trim()}\"`)\n      }\n    })\n\n    // ========== 检查所有按钮 ==========\n    await test.step('检查所有按钮', async () => {\n      const buttons = page.locator('button')\n      const buttonCount = await buttons.count()\n\n      console.log(`\\n🔘 首页共找到 ${buttonCount} 个按钮`)\n\n      for (let i = 0; i < buttonCount; i++) {\n        const button = buttons.nth(i)\n        const text = await button.textContent()\n        const isVisible = await button.isVisible().catch(() => false)\n        const isEnabled = await button.isEnabled().catch(() => false)\n        const type = await button.getAttribute('type')\n\n        report.buttons.push({\n          text: text?.trim() || '(无文本)',\n          type,\n          visible: isVisible,\n          enabled: isEnabled\n        })\n\n        console.log(`  ${i + 1}. [${isVisible ? '✓' : '✗'}] ${type || 'button'} - \"${text?.trim()}\" ${isEnabled ? '(可点击)' : '(禁用)'})`)\n      }\n    })\n\n    // ========== 测试主要链接是否可点击 ==========\n    await test.step('测试主要导航链接', async () => {\n      const mainLinks = [\n        { selector: 'a[href*=\"login\"]', name: '登录链接' },\n        { selector: 'a[href*=\"register\"]', name: '注册链接' },\n        { selector: 'a[href*=\"faq\"]', name: 'FAQ链接' },\n        { selector: 'a[href*=\"about\"]', name: '关于链接' }\n      ]\n\n      for (const linkInfo of mainLinks) {\n        const link = page.locator(linkInfo.selector).first()\n        if (await link.isVisible({ timeout: 2000 }).catch(() => false)) {\n          await expect(link).toBeVisible()\n          console.log(`  ✓ ${linkInfo.name} 可见且可点击`)\n        } else {\n          console.log(`  ⚠ ${linkInfo.name} 未找到`)\n        }\n      }\n    })\n\n    // ========== 截图记录 ==========\n    await page.screenshot({\n      path: 'test-results/links-buttons-homepage.png',\n      fullPage: true\n    })\n  })\n\n  test('登录页 - 检查表单元素', async ({ page }) => {\n    await page.goto('/login')\n    await page.waitForLoadState('networkidle')\n\n    console.log('\\n📄 登录页面检查')\n\n    // ========== 检查输入框 ==========\n    await test.step('检查输入框', async () => {\n      const inputs = page.locator('input')\n      const inputCount = await inputs.count()\n\n      console.log(`\\n📝 找到 ${inputCount} 个输入框`)\n\n      for (let i = 0; i < inputCount; i++) {\n        const input = inputs.nth(i)\n        const type = await input.getAttribute('type')\n        const placeholder = await input.getAttribute('placeholder')\n        const name = await input.getAttribute('name')\n        const isVisible = await input.isVisible().catch(() => false)\n\n        console.log(`  ${i + 1}. [${isVisible ? '✓' : '✗'}] type=\"${type}\" name=\"${name}\" placeholder=\"${placeholder}\"`)\n\n        // 验证输入框可用\n        if (isVisible) {\n          await expect(input).toBeEnabled()\n        }\n      }\n    })\n\n    // ========== 检查提交按钮 ==========\n    await test.step('检查提交按钮', async () => {\n      const submitButton = page.locator('button[type=\"submit\"]')\n\n      if (await submitButton.isVisible({ timeout: 2000 }).catch(() => false)) {\n        await expect(submitButton).toBeVisible()\n        await expect(submitButton).toBeEnabled()\n\n        const buttonText = await submitButton.textContent()\n        console.log(`\\n✓ 提交按钮可用: \"${buttonText?.trim()}\"`)\n      } else {\n        console.log('\\n⚠ 未找到提交按钮')\n      }\n    })\n\n    // ========== 检查其他链接 ==========\n    await test.step('检查其他链接', async () => {\n      const links = page.locator('a[href]')\n      const linkCount = await links.count()\n\n      console.log(`\\n🔗 找到 ${linkCount} 个链接`)\n\n      for (let i = 0; i < linkCount; i++) {\n        const link = links.nth(i)\n        const href = await link.getAttribute('href')\n        const text = await link.textContent()\n        const isVisible = await link.isVisible().catch(() => false)\n\n        if (isVisible) {\n          console.log(`  ${i + 1}. ✓ ${href} - \"${text?.trim()}\"`)\n        }\n      }\n    })\n\n    await page.screenshot({ path: 'test-results/links-buttons-login.png' })\n  })\n\n  test('FAQ页 - 检查所有可交互元素', async ({ page }) => {\n    await page.goto('/faq')\n    await page.waitForLoadState('networkidle')\n\n    console.log('\\n📄 FAQ页面检查')\n\n    // ========== 检查可折叠元素 ==========\n    await test.step('检查FAQ折叠项', async () => {\n      // 查找所有可能的FAQ项（通常是details、accordion等）\n      const details = page.locator('details, [role=\"button\"], .accordion-item, .faq-item')\n      const count = await details.count()\n\n      console.log(`\\n📋 找到 ${count} 个可交互元素`)\n\n      if (count > 0) {\n        // 测试第一个元素是否可点击\n        const firstItem = details.first()\n        if (await firstItem.isVisible({ timeout: 2000 }).catch(() => false)) {\n          await firstItem.click()\n          await page.waitForTimeout(500)\n          console.log('  ✓ 第一个FAQ项可点击')\n        }\n      }\n    })\n\n    // ========== 检查所有链接 ==========\n    await test.step('检查页面链接', async () => {\n      const links = page.locator('a[href]')\n      const linkCount = await links.count()\n\n      console.log(`\\n🔗 找到 ${linkCount} 个链接`)\n\n      for (let i = 0; i < Math.min(linkCount, 10); i++) {\n        const link = links.nth(i)\n        const href = await link.getAttribute('href')\n        const text = await link.textContent()\n        const isVisible = await link.isVisible().catch(() => false)\n\n        if (isVisible) {\n          console.log(`  ${i + 1}. ✓ ${href} - \"${text?.trim()}\"`)\n        }\n      }\n\n      if (linkCount > 10) {\n        console.log(`  ... 还有 ${linkCount - 10} 个链接`)\n      }\n    })\n\n    await page.screenshot({ path: 'test-results/links-buttons-faq.png', fullPage: true })\n  })\n\n  test('关于页 - 检查所有元素', async ({ page }) => {\n    await page.goto('/about')\n    await page.waitForLoadState('networkidle')\n\n    console.log('\\n📄 关于页面检查')\n\n    await test.step('检查页面元素', async () => {\n      const links = page.locator('a[href]')\n      const buttons = page.locator('button')\n\n      const linkCount = await links.count()\n      const buttonCount = await buttons.count()\n\n      console.log('\\n📊 统计:')\n      console.log(`  - 链接: ${linkCount} 个`)\n      console.log(`  - 按钮: ${buttonCount} 个`)\n\n      // 检查所有链接是否有效\n      for (let i = 0; i < linkCount; i++) {\n        const link = links.nth(i)\n        const href = await link.getAttribute('href')\n        const isVisible = await link.isVisible().catch(() => false)\n\n        if (isVisible && href) {\n          // 检查链接是否有效（不是 # 或 javascript:void(0)）\n          if (href !== '#' && !href.startsWith('javascript:')) {\n            console.log(`  ✓ 有效链接: ${href}`)\n          } else {\n            console.log(`  ⚠ 占位链接: ${href}`)\n          }\n        }\n      }\n    })\n\n    await page.screenshot({ path: 'test-results/links-buttons-about.png', fullPage: true })\n  })\n\n  test('全站链接爬取 - 检查所有公开页面', async ({ page }) => {\n    const publicPages = [\n      { path: '/', name: '首页' },\n      { path: '/login', name: '登录页' },\n      { path: '/register', name: '注册页' },\n      { path: '/faq', name: 'FAQ' },\n      { path: '/about', name: '关于我们' },\n      { path: '/terms', name: '服务条款' },\n      { path: '/support', name: '客服支持' }\n    ]\n\n    const report = []\n\n    for (const pageInfo of publicPages) {\n      await test.step(`检查 ${pageInfo.name}`, async () => {\n        await page.goto(pageInfo.path)\n        await page.waitForLoadState('networkidle')\n\n        const links = page.locator('a[href]')\n        const buttons = page.locator('button')\n        const inputs = page.locator('input')\n\n        const linkCount = await links.count()\n        const buttonCount = await buttons.count()\n        const inputCount = await inputs.count()\n\n        const pageReport = {\n          page: pageInfo.name,\n          path: pageInfo.path,\n          links: linkCount,\n          buttons: buttonCount,\n          inputs: inputCount,\n          status: '✓'\n        }\n\n        report.push(pageReport)\n\n        console.log(`\\n${pageInfo.name} (${pageInfo.path}):`)\n        console.log(`  - 链接: ${linkCount}`)\n        console.log(`  - 按钮: ${buttonCount}`)\n        console.log(`  - 输入框: ${inputCount}`)\n      })\n    }\n\n    // ========== 生成总结报告 ==========\n    console.log('\\n' + '='.repeat(60))\n    console.log('📊 全站元素统计报告')\n    console.log('='.repeat(60))\n    console.table(report)\n  })\n\n  test('测试所有链接的可点击性', async ({ page }) => {\n    await page.goto('/')\n    await page.waitForLoadState('networkidle')\n\n    await test.step('测试首页链接点击', async () => {\n      const links = page.locator('a[href]:visible')\n      const linkCount = await links.count()\n\n      console.log(`\\n🖱️ 测试 ${linkCount} 个可见链接的点击`)\n\n      let clickableCount = 0\n      let unclickableCount = 0\n\n      for (let i = 0; i < Math.min(linkCount, 10); i++) {\n        const link = links.nth(i)\n        const href = await link.getAttribute('href')\n        const text = await link.textContent()\n\n        try {\n          // 检查链接是否可点击（不实际点击）\n          await expect(link).toBeVisible()\n          await expect(link).toBeEnabled()\n\n          clickableCount++\n          console.log(`  ✓ 可点击: ${href} - \"${text?.trim()}\"`)\n        } catch {\n          unclickableCount++\n          console.log(`  ✗ 不可点击: ${href} - \"${text?.trim()}\"`)\n        }\n      }\n\n      console.log(`\\n结果: ${clickableCount} 个可点击, ${unclickableCount} 个不可点击`)\n    })\n  })\n\n  test('测试所有按钮的可点击性', async ({ page }) => {\n    await page.goto('/')\n    await page.waitForLoadState('networkidle')\n\n    await test.step('测试首页按钮点击', async () => {\n      const buttons = page.locator('button:visible')\n      const buttonCount = await buttons.count()\n\n      console.log(`\\n🔘 测试 ${buttonCount} 个可见按钮`)\n\n      let enabledCount = 0\n      let disabledCount = 0\n\n      for (let i = 0; i < buttonCount; i++) {\n        const button = buttons.nth(i)\n        const text = await button.textContent()\n        const isEnabled = await button.isEnabled()\n\n        if (isEnabled) {\n          enabledCount++\n          console.log(`  ✓ 可用: \"${text?.trim()}\"`)\n        } else {\n          disabledCount++\n          console.log(`  ✗ 禁用: \"${text?.trim()}\"`)\n        }\n      }\n\n      console.log(`\\n结果: ${enabledCount} 个可用, ${disabledCount} 个禁用`)\n    })\n  })\n})\n"],"mappings":"AAAA,SAASA,IAAI,EAAEC,MAAM,QAAQ,kBAAkB;;AAE/C;AACA;AACA;AACA;;AAEAD,IAAI,CAACE,QAAQ,CAAC,WAAW,EAAE,MAAM;EAE/BF,IAAI,CAAC,gBAAgB,EAAE,OAAO;IAAEG;EAAK,CAAC,KAAK;IACzC,MAAMA,IAAI,CAACC,IAAI,CAAC,GAAG,CAAC;IACpB,MAAMD,IAAI,CAACE,gBAAgB,CAAC,aAAa,CAAC;IAE1C,MAAMC,MAAM,GAAG;MACbH,IAAI,EAAE,MAAM;MACZI,KAAK,EAAE,EAAE;MACTC,OAAO,EAAE,EAAE;MACXC,WAAW,EAAE,EAAE;MACfC,eAAe,EAAE;IACnB,CAAC;;IAED;IACA,MAAMV,IAAI,CAACW,IAAI,CAAC,QAAQ,EAAE,YAAY;MACpC,MAAMJ,KAAK,GAAGJ,IAAI,CAACS,OAAO,CAAC,SAAS,CAAC;MACrC,MAAMC,SAAS,GAAG,MAAMN,KAAK,CAACO,KAAK,CAAC,CAAC;MAErCC,OAAO,CAACC,GAAG,CAAC,cAAcH,SAAS,MAAM,CAAC;MAE1C,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,SAAS,EAAEI,CAAC,EAAE,EAAE;QAClC,MAAMC,IAAI,GAAGX,KAAK,CAACY,GAAG,CAACF,CAAC,CAAC;QACzB,MAAMG,IAAI,GAAG,MAAMF,IAAI,CAACG,YAAY,CAAC,MAAM,CAAC;QAC5C,MAAMC,IAAI,GAAG,MAAMJ,IAAI,CAACK,WAAW,CAAC,CAAC;QACrC,MAAMC,SAAS,GAAG,MAAMN,IAAI,CAACM,SAAS,CAAC,CAAC,CAACC,KAAK,CAAC,MAAM,KAAK,CAAC;QAE3DnB,MAAM,CAACC,KAAK,CAACmB,IAAI,CAAC;UAChBN,IAAI;UACJE,IAAI,EAAEA,IAAI,EAAEK,IAAI,CAAC,CAAC,IAAI,OAAO;UAC7BC,OAAO,EAAEJ;QACX,CAAC,CAAC;QAEFT,OAAO,CAACC,GAAG,CAAC,KAAKC,CAAC,GAAG,CAAC,MAAMO,SAAS,GAAG,GAAG,GAAG,GAAG,KAAKJ,IAAI,OAAOE,IAAI,EAAEK,IAAI,CAAC,CAAC,GAAG,CAAC;MACnF;IACF,CAAC,CAAC;;IAEF;IACA,MAAM3B,IAAI,CAACW,IAAI,CAAC,QAAQ,EAAE,YAAY;MACpC,MAAMH,OAAO,GAAGL,IAAI,CAACS,OAAO,CAAC,QAAQ,CAAC;MACtC,MAAMiB,WAAW,GAAG,MAAMrB,OAAO,CAACM,KAAK,CAAC,CAAC;MAEzCC,OAAO,CAACC,GAAG,CAAC,cAAca,WAAW,MAAM,CAAC;MAE5C,KAAK,IAAIZ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGY,WAAW,EAAEZ,CAAC,EAAE,EAAE;QACpC,MAAMa,MAAM,GAAGtB,OAAO,CAACW,GAAG,CAACF,CAAC,CAAC;QAC7B,MAAMK,IAAI,GAAG,MAAMQ,MAAM,CAACP,WAAW,CAAC,CAAC;QACvC,MAAMC,SAAS,GAAG,MAAMM,MAAM,CAACN,SAAS,CAAC,CAAC,CAACC,KAAK,CAAC,MAAM,KAAK,CAAC;QAC7D,MAAMM,SAAS,GAAG,MAAMD,MAAM,CAACC,SAAS,CAAC,CAAC,CAACN,KAAK,CAAC,MAAM,KAAK,CAAC;QAC7D,MAAMO,IAAI,GAAG,MAAMF,MAAM,CAACT,YAAY,CAAC,MAAM,CAAC;QAE9Cf,MAAM,CAACE,OAAO,CAACkB,IAAI,CAAC;UAClBJ,IAAI,EAAEA,IAAI,EAAEK,IAAI,CAAC,CAAC,IAAI,OAAO;UAC7BK,IAAI;UACJJ,OAAO,EAAEJ,SAAS;UAClBS,OAAO,EAAEF;QACX,CAAC,CAAC;QAEFhB,OAAO,CAACC,GAAG,CAAC,KAAKC,CAAC,GAAG,CAAC,MAAMO,SAAS,GAAG,GAAG,GAAG,GAAG,KAAKQ,IAAI,IAAI,QAAQ,OAAOV,IAAI,EAAEK,IAAI,CAAC,CAAC,KAAKI,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,CAAC;MAChI;IACF,CAAC,CAAC;;IAEF;IACA,MAAM/B,IAAI,CAACW,IAAI,CAAC,UAAU,EAAE,YAAY;MACtC,MAAMuB,SAAS,GAAG,CAChB;QAAEC,QAAQ,EAAE,kBAAkB;QAAEC,IAAI,EAAE;MAAO,CAAC,EAC9C;QAAED,QAAQ,EAAE,qBAAqB;QAAEC,IAAI,EAAE;MAAO,CAAC,EACjD;QAAED,QAAQ,EAAE,gBAAgB;QAAEC,IAAI,EAAE;MAAQ,CAAC,EAC7C;QAAED,QAAQ,EAAE,kBAAkB;QAAEC,IAAI,EAAE;MAAO,CAAC,CAC/C;MAED,KAAK,MAAMC,QAAQ,IAAIH,SAAS,EAAE;QAChC,MAAMhB,IAAI,GAAGf,IAAI,CAACS,OAAO,CAACyB,QAAQ,CAACF,QAAQ,CAAC,CAACG,KAAK,CAAC,CAAC;QACpD,IAAI,MAAMpB,IAAI,CAACM,SAAS,CAAC;UAAEe,OAAO,EAAE;QAAK,CAAC,CAAC,CAACd,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;UAC9D,MAAMxB,MAAM,CAACiB,IAAI,CAAC,CAACsB,WAAW,CAAC,CAAC;UAChCzB,OAAO,CAACC,GAAG,CAAC,OAAOqB,QAAQ,CAACD,IAAI,SAAS,CAAC;QAC5C,CAAC,MAAM;UACLrB,OAAO,CAACC,GAAG,CAAC,OAAOqB,QAAQ,CAACD,IAAI,MAAM,CAAC;QACzC;MACF;IACF,CAAC,CAAC;;IAEF;IACA,MAAMjC,IAAI,CAACsC,UAAU,CAAC;MACpBC,IAAI,EAAE,yCAAyC;MAC/CC,QAAQ,EAAE;IACZ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF3C,IAAI,CAAC,cAAc,EAAE,OAAO;IAAEG;EAAK,CAAC,KAAK;IACvC,MAAMA,IAAI,CAACC,IAAI,CAAC,QAAQ,CAAC;IACzB,MAAMD,IAAI,CAACE,gBAAgB,CAAC,aAAa,CAAC;IAE1CU,OAAO,CAACC,GAAG,CAAC,aAAa,CAAC;;IAE1B;IACA,MAAMhB,IAAI,CAACW,IAAI,CAAC,OAAO,EAAE,YAAY;MACnC,MAAMiC,MAAM,GAAGzC,IAAI,CAACS,OAAO,CAAC,OAAO,CAAC;MACpC,MAAMiC,UAAU,GAAG,MAAMD,MAAM,CAAC9B,KAAK,CAAC,CAAC;MAEvCC,OAAO,CAACC,GAAG,CAAC,WAAW6B,UAAU,OAAO,CAAC;MAEzC,KAAK,IAAI5B,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4B,UAAU,EAAE5B,CAAC,EAAE,EAAE;QACnC,MAAM6B,KAAK,GAAGF,MAAM,CAACzB,GAAG,CAACF,CAAC,CAAC;QAC3B,MAAMe,IAAI,GAAG,MAAMc,KAAK,CAACzB,YAAY,CAAC,MAAM,CAAC;QAC7C,MAAM0B,WAAW,GAAG,MAAMD,KAAK,CAACzB,YAAY,CAAC,aAAa,CAAC;QAC3D,MAAMe,IAAI,GAAG,MAAMU,KAAK,CAACzB,YAAY,CAAC,MAAM,CAAC;QAC7C,MAAMG,SAAS,GAAG,MAAMsB,KAAK,CAACtB,SAAS,CAAC,CAAC,CAACC,KAAK,CAAC,MAAM,KAAK,CAAC;QAE5DV,OAAO,CAACC,GAAG,CAAC,KAAKC,CAAC,GAAG,CAAC,MAAMO,SAAS,GAAG,GAAG,GAAG,GAAG,WAAWQ,IAAI,WAAWI,IAAI,kBAAkBW,WAAW,GAAG,CAAC;;QAEhH;QACA,IAAIvB,SAAS,EAAE;UACb,MAAMvB,MAAM,CAAC6C,KAAK,CAAC,CAACE,WAAW,CAAC,CAAC;QACnC;MACF;IACF,CAAC,CAAC;;IAEF;IACA,MAAMhD,IAAI,CAACW,IAAI,CAAC,QAAQ,EAAE,YAAY;MACpC,MAAMsC,YAAY,GAAG9C,IAAI,CAACS,OAAO,CAAC,uBAAuB,CAAC;MAE1D,IAAI,MAAMqC,YAAY,CAACzB,SAAS,CAAC;QAAEe,OAAO,EAAE;MAAK,CAAC,CAAC,CAACd,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACtE,MAAMxB,MAAM,CAACgD,YAAY,CAAC,CAACT,WAAW,CAAC,CAAC;QACxC,MAAMvC,MAAM,CAACgD,YAAY,CAAC,CAACD,WAAW,CAAC,CAAC;QAExC,MAAME,UAAU,GAAG,MAAMD,YAAY,CAAC1B,WAAW,CAAC,CAAC;QACnDR,OAAO,CAACC,GAAG,CAAC,gBAAgBkC,UAAU,EAAEvB,IAAI,CAAC,CAAC,GAAG,CAAC;MACpD,CAAC,MAAM;QACLZ,OAAO,CAACC,GAAG,CAAC,aAAa,CAAC;MAC5B;IACF,CAAC,CAAC;;IAEF;IACA,MAAMhB,IAAI,CAACW,IAAI,CAAC,QAAQ,EAAE,YAAY;MACpC,MAAMJ,KAAK,GAAGJ,IAAI,CAACS,OAAO,CAAC,SAAS,CAAC;MACrC,MAAMC,SAAS,GAAG,MAAMN,KAAK,CAACO,KAAK,CAAC,CAAC;MAErCC,OAAO,CAACC,GAAG,CAAC,WAAWH,SAAS,MAAM,CAAC;MAEvC,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,SAAS,EAAEI,CAAC,EAAE,EAAE;QAClC,MAAMC,IAAI,GAAGX,KAAK,CAACY,GAAG,CAACF,CAAC,CAAC;QACzB,MAAMG,IAAI,GAAG,MAAMF,IAAI,CAACG,YAAY,CAAC,MAAM,CAAC;QAC5C,MAAMC,IAAI,GAAG,MAAMJ,IAAI,CAACK,WAAW,CAAC,CAAC;QACrC,MAAMC,SAAS,GAAG,MAAMN,IAAI,CAACM,SAAS,CAAC,CAAC,CAACC,KAAK,CAAC,MAAM,KAAK,CAAC;QAE3D,IAAID,SAAS,EAAE;UACbT,OAAO,CAACC,GAAG,CAAC,KAAKC,CAAC,GAAG,CAAC,OAAOG,IAAI,OAAOE,IAAI,EAAEK,IAAI,CAAC,CAAC,GAAG,CAAC;QAC1D;MACF;IACF,CAAC,CAAC;IAEF,MAAMxB,IAAI,CAACsC,UAAU,CAAC;MAAEC,IAAI,EAAE;IAAuC,CAAC,CAAC;EACzE,CAAC,CAAC;EAEF1C,IAAI,CAAC,kBAAkB,EAAE,OAAO;IAAEG;EAAK,CAAC,KAAK;IAC3C,MAAMA,IAAI,CAACC,IAAI,CAAC,MAAM,CAAC;IACvB,MAAMD,IAAI,CAACE,gBAAgB,CAAC,aAAa,CAAC;IAE1CU,OAAO,CAACC,GAAG,CAAC,cAAc,CAAC;;IAE3B;IACA,MAAMhB,IAAI,CAACW,IAAI,CAAC,UAAU,EAAE,YAAY;MACtC;MACA,MAAMwC,OAAO,GAAGhD,IAAI,CAACS,OAAO,CAAC,sDAAsD,CAAC;MACpF,MAAME,KAAK,GAAG,MAAMqC,OAAO,CAACrC,KAAK,CAAC,CAAC;MAEnCC,OAAO,CAACC,GAAG,CAAC,WAAWF,KAAK,SAAS,CAAC;MAEtC,IAAIA,KAAK,GAAG,CAAC,EAAE;QACb;QACA,MAAMsC,SAAS,GAAGD,OAAO,CAACb,KAAK,CAAC,CAAC;QACjC,IAAI,MAAMc,SAAS,CAAC5B,SAAS,CAAC;UAAEe,OAAO,EAAE;QAAK,CAAC,CAAC,CAACd,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;UACnE,MAAM2B,SAAS,CAACC,KAAK,CAAC,CAAC;UACvB,MAAMlD,IAAI,CAACmD,cAAc,CAAC,GAAG,CAAC;UAC9BvC,OAAO,CAACC,GAAG,CAAC,gBAAgB,CAAC;QAC/B;MACF;IACF,CAAC,CAAC;;IAEF;IACA,MAAMhB,IAAI,CAACW,IAAI,CAAC,QAAQ,EAAE,YAAY;MACpC,MAAMJ,KAAK,GAAGJ,IAAI,CAACS,OAAO,CAAC,SAAS,CAAC;MACrC,MAAMC,SAAS,GAAG,MAAMN,KAAK,CAACO,KAAK,CAAC,CAAC;MAErCC,OAAO,CAACC,GAAG,CAAC,WAAWH,SAAS,MAAM,CAAC;MAEvC,KAAK,IAAII,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGsC,IAAI,CAACC,GAAG,CAAC3C,SAAS,EAAE,EAAE,CAAC,EAAEI,CAAC,EAAE,EAAE;QAChD,MAAMC,IAAI,GAAGX,KAAK,CAACY,GAAG,CAACF,CAAC,CAAC;QACzB,MAAMG,IAAI,GAAG,MAAMF,IAAI,CAACG,YAAY,CAAC,MAAM,CAAC;QAC5C,MAAMC,IAAI,GAAG,MAAMJ,IAAI,CAACK,WAAW,CAAC,CAAC;QACrC,MAAMC,SAAS,GAAG,MAAMN,IAAI,CAACM,SAAS,CAAC,CAAC,CAACC,KAAK,CAAC,MAAM,KAAK,CAAC;QAE3D,IAAID,SAAS,EAAE;UACbT,OAAO,CAACC,GAAG,CAAC,KAAKC,CAAC,GAAG,CAAC,OAAOG,IAAI,OAAOE,IAAI,EAAEK,IAAI,CAAC,CAAC,GAAG,CAAC;QAC1D;MACF;MAEA,IAAId,SAAS,GAAG,EAAE,EAAE;QAClBE,OAAO,CAACC,GAAG,CAAC,YAAYH,SAAS,GAAG,EAAE,MAAM,CAAC;MAC/C;IACF,CAAC,CAAC;IAEF,MAAMV,IAAI,CAACsC,UAAU,CAAC;MAAEC,IAAI,EAAE,oCAAoC;MAAEC,QAAQ,EAAE;IAAK,CAAC,CAAC;EACvF,CAAC,CAAC;EAEF3C,IAAI,CAAC,cAAc,EAAE,OAAO;IAAEG;EAAK,CAAC,KAAK;IACvC,MAAMA,IAAI,CAACC,IAAI,CAAC,QAAQ,CAAC;IACzB,MAAMD,IAAI,CAACE,gBAAgB,CAAC,aAAa,CAAC;IAE1CU,OAAO,CAACC,GAAG,CAAC,aAAa,CAAC;IAE1B,MAAMhB,IAAI,CAACW,IAAI,CAAC,QAAQ,EAAE,YAAY;MACpC,MAAMJ,KAAK,GAAGJ,IAAI,CAACS,OAAO,CAAC,SAAS,CAAC;MACrC,MAAMJ,OAAO,GAAGL,IAAI,CAACS,OAAO,CAAC,QAAQ,CAAC;MAEtC,MAAMC,SAAS,GAAG,MAAMN,KAAK,CAACO,KAAK,CAAC,CAAC;MACrC,MAAMe,WAAW,GAAG,MAAMrB,OAAO,CAACM,KAAK,CAAC,CAAC;MAEzCC,OAAO,CAACC,GAAG,CAAC,UAAU,CAAC;MACvBD,OAAO,CAACC,GAAG,CAAC,WAAWH,SAAS,IAAI,CAAC;MACrCE,OAAO,CAACC,GAAG,CAAC,WAAWa,WAAW,IAAI,CAAC;;MAEvC;MACA,KAAK,IAAIZ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,SAAS,EAAEI,CAAC,EAAE,EAAE;QAClC,MAAMC,IAAI,GAAGX,KAAK,CAACY,GAAG,CAACF,CAAC,CAAC;QACzB,MAAMG,IAAI,GAAG,MAAMF,IAAI,CAACG,YAAY,CAAC,MAAM,CAAC;QAC5C,MAAMG,SAAS,GAAG,MAAMN,IAAI,CAACM,SAAS,CAAC,CAAC,CAACC,KAAK,CAAC,MAAM,KAAK,CAAC;QAE3D,IAAID,SAAS,IAAIJ,IAAI,EAAE;UACrB;UACA,IAAIA,IAAI,KAAK,GAAG,IAAI,CAACA,IAAI,CAACqC,UAAU,CAAC,aAAa,CAAC,EAAE;YACnD1C,OAAO,CAACC,GAAG,CAAC,aAAaI,IAAI,EAAE,CAAC;UAClC,CAAC,MAAM;YACLL,OAAO,CAACC,GAAG,CAAC,aAAaI,IAAI,EAAE,CAAC;UAClC;QACF;MACF;IACF,CAAC,CAAC;IAEF,MAAMjB,IAAI,CAACsC,UAAU,CAAC;MAAEC,IAAI,EAAE,sCAAsC;MAAEC,QAAQ,EAAE;IAAK,CAAC,CAAC;EACzF,CAAC,CAAC;EAEF3C,IAAI,CAAC,mBAAmB,EAAE,OAAO;IAAEG;EAAK,CAAC,KAAK;IAC5C,MAAMuD,WAAW,GAAG,CAClB;MAAEhB,IAAI,EAAE,GAAG;MAAEN,IAAI,EAAE;IAAK,CAAC,EACzB;MAAEM,IAAI,EAAE,QAAQ;MAAEN,IAAI,EAAE;IAAM,CAAC,EAC/B;MAAEM,IAAI,EAAE,WAAW;MAAEN,IAAI,EAAE;IAAM,CAAC,EAClC;MAAEM,IAAI,EAAE,MAAM;MAAEN,IAAI,EAAE;IAAM,CAAC,EAC7B;MAAEM,IAAI,EAAE,QAAQ;MAAEN,IAAI,EAAE;IAAO,CAAC,EAChC;MAAEM,IAAI,EAAE,QAAQ;MAAEN,IAAI,EAAE;IAAO,CAAC,EAChC;MAAEM,IAAI,EAAE,UAAU;MAAEN,IAAI,EAAE;IAAO,CAAC,CACnC;IAED,MAAM9B,MAAM,GAAG,EAAE;IAEjB,KAAK,MAAMqD,QAAQ,IAAID,WAAW,EAAE;MAClC,MAAM1D,IAAI,CAACW,IAAI,CAAC,MAAMgD,QAAQ,CAACvB,IAAI,EAAE,EAAE,YAAY;QACjD,MAAMjC,IAAI,CAACC,IAAI,CAACuD,QAAQ,CAACjB,IAAI,CAAC;QAC9B,MAAMvC,IAAI,CAACE,gBAAgB,CAAC,aAAa,CAAC;QAE1C,MAAME,KAAK,GAAGJ,IAAI,CAACS,OAAO,CAAC,SAAS,CAAC;QACrC,MAAMJ,OAAO,GAAGL,IAAI,CAACS,OAAO,CAAC,QAAQ,CAAC;QACtC,MAAMgC,MAAM,GAAGzC,IAAI,CAACS,OAAO,CAAC,OAAO,CAAC;QAEpC,MAAMC,SAAS,GAAG,MAAMN,KAAK,CAACO,KAAK,CAAC,CAAC;QACrC,MAAMe,WAAW,GAAG,MAAMrB,OAAO,CAACM,KAAK,CAAC,CAAC;QACzC,MAAM+B,UAAU,GAAG,MAAMD,MAAM,CAAC9B,KAAK,CAAC,CAAC;QAEvC,MAAM8C,UAAU,GAAG;UACjBzD,IAAI,EAAEwD,QAAQ,CAACvB,IAAI;UACnBM,IAAI,EAAEiB,QAAQ,CAACjB,IAAI;UACnBnC,KAAK,EAAEM,SAAS;UAChBL,OAAO,EAAEqB,WAAW;UACpBe,MAAM,EAAEC,UAAU;UAClBgB,MAAM,EAAE;QACV,CAAC;QAEDvD,MAAM,CAACoB,IAAI,CAACkC,UAAU,CAAC;QAEvB7C,OAAO,CAACC,GAAG,CAAC,KAAK2C,QAAQ,CAACvB,IAAI,KAAKuB,QAAQ,CAACjB,IAAI,IAAI,CAAC;QACrD3B,OAAO,CAACC,GAAG,CAAC,WAAWH,SAAS,EAAE,CAAC;QACnCE,OAAO,CAACC,GAAG,CAAC,WAAWa,WAAW,EAAE,CAAC;QACrCd,OAAO,CAACC,GAAG,CAAC,YAAY6B,UAAU,EAAE,CAAC;MACvC,CAAC,CAAC;IACJ;;IAEA;IACA9B,OAAO,CAACC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC8C,MAAM,CAAC,EAAE,CAAC,CAAC;IAClC/C,OAAO,CAACC,GAAG,CAAC,aAAa,CAAC;IAC1BD,OAAO,CAACC,GAAG,CAAC,GAAG,CAAC8C,MAAM,CAAC,EAAE,CAAC,CAAC;IAC3B/C,OAAO,CAACgD,KAAK,CAACzD,MAAM,CAAC;EACvB,CAAC,CAAC;EAEFN,IAAI,CAAC,aAAa,EAAE,OAAO;IAAEG;EAAK,CAAC,KAAK;IACtC,MAAMA,IAAI,CAACC,IAAI,CAAC,GAAG,CAAC;IACpB,MAAMD,IAAI,CAACE,gBAAgB,CAAC,aAAa,CAAC;IAE1C,MAAML,IAAI,CAACW,IAAI,CAAC,UAAU,EAAE,YAAY;MACtC,MAAMJ,KAAK,GAAGJ,IAAI,CAACS,OAAO,CAAC,iBAAiB,CAAC;MAC7C,MAAMC,SAAS,GAAG,MAAMN,KAAK,CAACO,KAAK,CAAC,CAAC;MAErCC,OAAO,CAACC,GAAG,CAAC,YAAYH,SAAS,WAAW,CAAC;MAE7C,IAAImD,cAAc,GAAG,CAAC;MACtB,IAAIC,gBAAgB,GAAG,CAAC;MAExB,KAAK,IAAIhD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGsC,IAAI,CAACC,GAAG,CAAC3C,SAAS,EAAE,EAAE,CAAC,EAAEI,CAAC,EAAE,EAAE;QAChD,MAAMC,IAAI,GAAGX,KAAK,CAACY,GAAG,CAACF,CAAC,CAAC;QACzB,MAAMG,IAAI,GAAG,MAAMF,IAAI,CAACG,YAAY,CAAC,MAAM,CAAC;QAC5C,MAAMC,IAAI,GAAG,MAAMJ,IAAI,CAACK,WAAW,CAAC,CAAC;QAErC,IAAI;UACF;UACA,MAAMtB,MAAM,CAACiB,IAAI,CAAC,CAACsB,WAAW,CAAC,CAAC;UAChC,MAAMvC,MAAM,CAACiB,IAAI,CAAC,CAAC8B,WAAW,CAAC,CAAC;UAEhCgB,cAAc,EAAE;UAChBjD,OAAO,CAACC,GAAG,CAAC,YAAYI,IAAI,OAAOE,IAAI,EAAEK,IAAI,CAAC,CAAC,GAAG,CAAC;QACrD,CAAC,CAAC,MAAM;UACNsC,gBAAgB,EAAE;UAClBlD,OAAO,CAACC,GAAG,CAAC,aAAaI,IAAI,OAAOE,IAAI,EAAEK,IAAI,CAAC,CAAC,GAAG,CAAC;QACtD;MACF;MAEAZ,OAAO,CAACC,GAAG,CAAC,SAASgD,cAAc,UAAUC,gBAAgB,QAAQ,CAAC;IACxE,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFjE,IAAI,CAAC,aAAa,EAAE,OAAO;IAAEG;EAAK,CAAC,KAAK;IACtC,MAAMA,IAAI,CAACC,IAAI,CAAC,GAAG,CAAC;IACpB,MAAMD,IAAI,CAACE,gBAAgB,CAAC,aAAa,CAAC;IAE1C,MAAML,IAAI,CAACW,IAAI,CAAC,UAAU,EAAE,YAAY;MACtC,MAAMH,OAAO,GAAGL,IAAI,CAACS,OAAO,CAAC,gBAAgB,CAAC;MAC9C,MAAMiB,WAAW,GAAG,MAAMrB,OAAO,CAACM,KAAK,CAAC,CAAC;MAEzCC,OAAO,CAACC,GAAG,CAAC,WAAWa,WAAW,QAAQ,CAAC;MAE3C,IAAIqC,YAAY,GAAG,CAAC;MACpB,IAAIC,aAAa,GAAG,CAAC;MAErB,KAAK,IAAIlD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGY,WAAW,EAAEZ,CAAC,EAAE,EAAE;QACpC,MAAMa,MAAM,GAAGtB,OAAO,CAACW,GAAG,CAACF,CAAC,CAAC;QAC7B,MAAMK,IAAI,GAAG,MAAMQ,MAAM,CAACP,WAAW,CAAC,CAAC;QACvC,MAAMQ,SAAS,GAAG,MAAMD,MAAM,CAACC,SAAS,CAAC,CAAC;QAE1C,IAAIA,SAAS,EAAE;UACbmC,YAAY,EAAE;UACdnD,OAAO,CAACC,GAAG,CAAC,YAAYM,IAAI,EAAEK,IAAI,CAAC,CAAC,GAAG,CAAC;QAC1C,CAAC,MAAM;UACLwC,aAAa,EAAE;UACfpD,OAAO,CAACC,GAAG,CAAC,YAAYM,IAAI,EAAEK,IAAI,CAAC,CAAC,GAAG,CAAC;QAC1C;MACF;MAEAZ,OAAO,CAACC,GAAG,CAAC,SAASkD,YAAY,SAASC,aAAa,MAAM,CAAC;IAChE,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}