@vreko/cli 3.1.9 → 3.2.0

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.
Files changed (52) hide show
  1. package/dist/{InitApp-XAHILEYM.js → InitApp-YM5CK55D.js} +3 -3
  2. package/dist/{InitApp-XAHILEYM.js.map → InitApp-YM5CK55D.js.map} +1 -1
  3. package/dist/{auth-YUOZ5X5P.js → auth-HP6IY25M.js} +9 -9
  4. package/dist/{auth-YUOZ5X5P.js.map → auth-HP6IY25M.js.map} +1 -1
  5. package/dist/{chunk-3KI4MRVU.js → chunk-3YXBGNHD.js} +3 -3
  6. package/dist/{chunk-3KI4MRVU.js.map → chunk-3YXBGNHD.js.map} +1 -1
  7. package/dist/{chunk-A57QYXVY.js → chunk-53BJRUUT.js} +4 -4
  8. package/dist/{chunk-A57QYXVY.js.map → chunk-53BJRUUT.js.map} +1 -1
  9. package/dist/{chunk-TJMLS25C.js → chunk-FROYVC6U.js} +4 -4
  10. package/dist/{chunk-TJMLS25C.js.map → chunk-FROYVC6U.js.map} +1 -1
  11. package/dist/{chunk-WFE5TEHG.js → chunk-IERTYZXC.js} +2 -2
  12. package/dist/{chunk-WFE5TEHG.js.map → chunk-IERTYZXC.js.map} +1 -1
  13. package/dist/{dist-BEOOZSLV.js → dist-JDTWHZQL.js} +3 -3
  14. package/dist/{dist-BEOOZSLV.js.map → dist-JDTWHZQL.js.map} +1 -1
  15. package/dist/{dist-VE7FA5YB.js → dist-NJCJFUQI.js} +3 -3
  16. package/dist/{dist-VE7FA5YB.js.map → dist-NJCJFUQI.js.map} +1 -1
  17. package/dist/index.js +10 -10
  18. package/dist/index.js.map +1 -1
  19. package/dist/init-command-LXEBDSYX.js +7 -0
  20. package/dist/{init-command-JUVD7TN3.js.map → init-command-LXEBDSYX.js.map} +1 -1
  21. package/dist/{init-core-PNDHWMCD.js → init-core-ETGVVENN.js} +4 -4
  22. package/dist/{init-core-PNDHWMCD.js.map → init-core-ETGVVENN.js.map} +1 -1
  23. package/node_modules/@vreko/auth/.turbo/turbo-build.log +27 -26
  24. package/node_modules/@vreko/auth/.turbo/turbo-test.log +13 -13
  25. package/node_modules/@vreko/auth/CLAUDE.md +7 -7
  26. package/node_modules/@vreko/claims-ledger/.turbo/turbo-build.log +1 -1
  27. package/node_modules/@vreko/claims-ledger/.turbo/turbo-test.log +27 -27
  28. package/node_modules/@vreko/mcp-config/.turbo/turbo-build.log +2 -2
  29. package/node_modules/@vreko/mcp-config/CLAUDE.md +2 -2
  30. package/node_modules/@vreko/sentry-privacy/.turbo/turbo-build.log +2 -2
  31. package/package.json +2 -2
  32. package/dist/init-command-JUVD7TN3.js +0 -7
  33. /package/dist/{._InitApp-XAHILEYM.js → ._InitApp-YM5CK55D.js} +0 -0
  34. /package/dist/{._InitApp-XAHILEYM.js.map → ._InitApp-YM5CK55D.js.map} +0 -0
  35. /package/dist/{._auth-YUOZ5X5P.js → ._auth-HP6IY25M.js} +0 -0
  36. /package/dist/{._auth-YUOZ5X5P.js.map → ._auth-HP6IY25M.js.map} +0 -0
  37. /package/dist/{._chunk-3KI4MRVU.js → ._chunk-3YXBGNHD.js} +0 -0
  38. /package/dist/{._chunk-3KI4MRVU.js.map → ._chunk-3YXBGNHD.js.map} +0 -0
  39. /package/dist/{._chunk-A57QYXVY.js → ._chunk-53BJRUUT.js} +0 -0
  40. /package/dist/{._chunk-A57QYXVY.js.map → ._chunk-53BJRUUT.js.map} +0 -0
  41. /package/dist/{._chunk-TJMLS25C.js → ._chunk-FROYVC6U.js} +0 -0
  42. /package/dist/{._chunk-TJMLS25C.js.map → ._chunk-FROYVC6U.js.map} +0 -0
  43. /package/dist/{._chunk-WFE5TEHG.js → ._chunk-IERTYZXC.js} +0 -0
  44. /package/dist/{._chunk-WFE5TEHG.js.map → ._chunk-IERTYZXC.js.map} +0 -0
  45. /package/dist/{._dist-BEOOZSLV.js → ._dist-JDTWHZQL.js} +0 -0
  46. /package/dist/{._dist-BEOOZSLV.js.map → ._dist-JDTWHZQL.js.map} +0 -0
  47. /package/dist/{._dist-VE7FA5YB.js → ._dist-NJCJFUQI.js} +0 -0
  48. /package/dist/{._dist-VE7FA5YB.js.map → ._dist-NJCJFUQI.js.map} +0 -0
  49. /package/dist/{._init-command-JUVD7TN3.js → ._init-command-LXEBDSYX.js} +0 -0
  50. /package/dist/{._init-command-JUVD7TN3.js.map → ._init-command-LXEBDSYX.js.map} +0 -0
  51. /package/dist/{._init-core-PNDHWMCD.js → ._init-core-ETGVVENN.js} +0 -0
  52. /package/dist/{._init-core-PNDHWMCD.js.map → ._init-core-ETGVVENN.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../packages/config/src/schemas.ts","../../../packages/email/src/resend.ts","../../../packages/integrations/dist/email/handlers/billing-events.js","../../../packages/integrations/dist/email/components/Wrapper.js","../../../packages/integrations/dist/email/components/PrimaryButton.js","../../../packages/integrations/dist/email/templates/auth/magic-link.js","../../../packages/integrations/dist/email/templates/auth/new-device-login.js","../../../packages/integrations/dist/email/templates/auth/reset-password.js","../../../packages/integrations/dist/email/templates/auth/verify-email.js","../../../packages/email/src/theme.ts","../../../packages/email/src/components/layouts/RepoFooter.tsx","../../../packages/email/src/components/layouts/TerminalHeader.tsx","../../../packages/email/src/components/VrekoEmailShell.tsx","../../../packages/email/src/components/layouts/VrekoLayout.tsx","../../../packages/email/src/components/primitives/AlertBox.tsx","../../../packages/email/src/components/primitives/Badge.tsx","../../../packages/email/src/components/primitives/BodyText.tsx","../../../packages/email/src/components/primitives/CodeBlock.tsx","../../../packages/email/src/components/primitives/Headline.tsx","../../../packages/email/src/components/primitives/PrimaryButton.tsx","../../../packages/email/src/components/primitives/StatRow.tsx","../../../packages/email/src/components/primitives/TerminalBlock.tsx","../../../packages/email/src/contexts.ts","../../../packages/email/src/templates/product/CohortInvite.tsx","../../../packages/email/src/registry.ts","../../../packages/email/src/send/cohort-invite.tsx","../../../packages/email/src/templates/auth/MagicLink.tsx","../../../packages/email/src/templates/auth/NewDeviceLogin.tsx","../../../packages/email/src/templates/auth/ResetPassword.tsx","../../../packages/email/src/templates/auth/VerifyEmail.tsx","../../../packages/email/src/templates/product/ActivationNudge.tsx","../../../packages/email/src/templates/product/CliNudge.tsx","../../../packages/email/src/templates/product/ExtensionNudge.tsx","../../../packages/email/src/templates/product/NiceSave.tsx","../../../packages/email/src/templates/product/PioneerIntro.tsx","../../../packages/email/src/templates/product/PioneerMilestone.tsx","../../../packages/email/src/templates/product/SystemAlert.tsx","../../../packages/email/src/templates/product/WeeklyDigest.tsx","../../../packages/email/src/templates/product/Welcome.tsx","../../../packages/email/src/templates/product/WeMissYou.tsx","../../../packages/email/src/templates/triage/IssueResolved.tsx","../../../packages/email/src/templates/triage/MCPTroubleshoot.tsx","../../../packages/email/src/templates/triage/PaymentFailed.tsx","../../../packages/email/src/templates/triage/ReEngagement.tsx","../../../packages/email/src/templates/triage/SupportAutoReply.tsx","../../../packages/email/src/templates/triage/TrialEnding.tsx","../../../packages/integrations/dist/email/templates/product/activation-nudge.js","../../../packages/integrations/dist/email/templates/product/cli-nudge.js","../../../packages/integrations/dist/email/templates/product/extension-nudge.js","../../../packages/integrations/dist/email/templates/product/first-scan-complete.js","../../../packages/integrations/dist/email/templates/product/invite-delivery.js","../../../packages/integrations/dist/email/templates/product/pioneer-confirmation.js","../../../packages/integrations/dist/email/templates/product/pioneer-milestone.js","../../../packages/integrations/dist/email/templates/product/pioneer-update.js","../../../packages/integrations/dist/email/templates/product/queue-update.js","../../../packages/integrations/dist/email/templates/product/re-engagement.js","../../../packages/integrations/dist/email/templates/product/referral-converted.js","../../../packages/integrations/dist/email/templates/product/system-alert.js","../../../packages/integrations/dist/email/templates/product/waitlist-confirmation.js","../../../packages/integrations/dist/email/templates/product/weekly-digest.js","../../../packages/integrations/dist/email/templates/product/welcome.js","../../../packages/integrations/dist/email/templates/product/zeigarnik-unlock.js","../../../packages/integrations/dist/email/service.js","../../../packages/integrations/src/hubspot/provider/hubspot/index.ts","../../../packages/integrations/dist/hubspot/lib/sync.js","../../../packages/integrations/src/email/handlers/billing-events.ts","../../../packages/auth/dist/lib/audit.js","../../../packages/auth/dist/security/api-key-security.js","../../../packages/auth/dist/plugins/api-key-plugin.js","../../../packages/auth/dist/lib/organization.js","../../../packages/auth/dist/auth.js"],"names":["object","getResendClient","apiKey","process","env","RESEND_API_KEY","Error","Resend","_resend","Proxy","get","_target","prop","sendEmail","from","to","subject","html","text","client","emails","send","BillingEmailHandler","emailService","sendWelcome","params","request","email","userId","category","priority","template","id","props","firstName","planName","planFeatures","dashboardUrl","docsUrl","pioneerTier","pioneerPoints","sendCancellationConfirmation","alertType","title","message","cancellationDate","toLocaleDateString","dataRetentionDays","severity","actionRequired","additionalDetails","timestamp","Date","toISOString","sendPaymentFailed","amount","currency","retryDate","actionUrl","updatePaymentUrl","actionLabel","sendSubscriptionUpgraded","oldPlan","newPlan","newFeatures","join","sendTrialEnding","daysRemaining","trialEndDate","upgradeUrl","sendSuspensionNotice","reactivateUrl","brand","background","surface","surfaceElevated","border","primary","primaryDark","textPrimary","textSecondary","textMuted","danger","warning","success","info","EMAIL_HEADER_URL","EMAIL_FOOTER_ICON_URL","preview","children","_jsxs","Html","lang","_jsx","Head","Font","fontFamily","fallbackFontFamily","fontWeight","fontStyle","Tailwind","config","theme","extend","colors","Body","style","backgroundColor","margin","padding","Preview","Section","Container","maxWidth","marginBottom","Img","src","width","height","alt","display","borderRadius","borderTop","marginTop","textAlign","Text","color","fontSize","lineHeight","Hr","borderColor","Link","href","textDecoration","Wrapper","PrimaryButton","Button","DangerButton","GhostButton","z","loginUrl","string","url","expiresInMinutes","number","default","ipAddress","optional","userAgent","MagicLink","Heading","_Fragment","PreviewProps","previewProps","deviceName","location","approveUrl","denyUrl","NewDeviceLogin","textTransform","letterSpacing","borderCollapse","paddingRight","resetUrl","requestedFrom","ResetPassword","verificationUrl","VerifyEmail","emailTheme","backgroundSecondary","surfaceSubtle","textTertiary","textDisabled","divider","error","fonts","sans","mono","fontSizes","xs","sm","base","lg","spacing","md","xl","borderWidth","ascii","checkmark","RepoFooter","currentYear","getFullYear","paddingTop","TerminalHeader","status","statusColors","online","processing","offline","critical","degraded","statusText","borderBottom","paddingBottom","table","tr","td","verticalAlign","span","COLORS","bg","muted","green","footer","FONT_BODY","FONT_MONO","bodyStyle","WebkitFontSmoothing","MozOsxFontSmoothing","containerStyle","sectionStyle","headerStyle","footerStyle","hrStyle","borderRight","borderLeft","footerLinkStyle","VrekoEmailShell","previewText","logoUrl","dir","meta","charSet","name","content","httpEquiv","webFont","format","className","role","cellPadding","cellSpacing","tbody","align","outline","hr","p","a","VREKO_COLORS","VREKO_FONT_BODY","VREKO_FONT_MONO","VrekoLayout","preheader","AlertBox","type","colorMap","iconMap","icon","marginRight","Badge","label","BodyText","mt","mb","CodeBlock","code","copyable","webViewUrl","language","div","justifyContent","alignItems","whiteSpace","wordBreak","Headline","as","cursor","StatRow","value","unit","marginLeft","TERMINAL_BG","wrapStyle","cellStyle","TerminalBlock","int","positive","date","array","nonnegative","oldTier","newTier","pointsEarned","totalPoints","nextTierName","pointsToNextTier","unlockedPerks","description","weekStartDate","weekEndDate","stats","totalSnapshots","testsPassed","regressionsCaught","activeProjects","activeMembers","pioneerPointsEarned","comparisonToPreviousWeek","highlights","tier","enum","repositoryName","min","filePath","score","max","aiSessionCount","riskLevel","invoiceUrl","filesRecovered","linesOfCode","timeSavedMinutes","sessionTime","restoreTime","aiToolDetected","twitterShareUrl","signupDate","extensionUrl","currentTier","currentPoints","sessionsCompleted","restoresCompleted","daysActive","pioneerDashboardUrl","referralUrl","lastActiveDate","daysInactive","totalSessions","totalTimelineRestores","feedbackUrl","CohortInviteContextSchema","cohort","CohortInvite","activationUrl","CohortInviteTemplate","component","schema","TemplateRegistry","templates","Map","register","has","set","list","Array","values","map","previewUrl","listByCategory","filter","validate","size","templateRegistry","sendCohortInviteEmail","input","render","result","toLocaleString","ActivationNudge","_","CliNudge","ExtensionNudge","NiceSave","timeSavedText","Math","floor","toString","strong","PioneerIntro","br","PioneerMilestone","length","perk","index","SystemAlert","scoreLabel","toFixed","WeeklyDigest","highlight","Welcome","greeting","undefined","Boolean","slice","WeMissYou","IssueResolved","issueId","originalSubject","resolutionDescription","changelogUrl","MCPTroubleshoot","userName","PaymentFailed","formattedAmount","Intl","NumberFormat","toUpperCase","formattedDate","month","day","now","ReEngagement","sessionCount","SupportAutoReply","TrialEnding","featuresUsed","feature","recoveryRisk","changeVolatility","workflowFragility","topFinding","topAction","hotspotCount","filesWatched","cliSetupCommand","vscodeMarketplaceUrl","InviteDelivery","jsxs","recipientName","cohortSize","daemonStatus","PioneerConfirmation","progressPct","round","i","overflow","headline","items","tag","ctaLabel","ctaHref","PioneerUpdate","item","previousPosition","currentPosition","actionCompleted","pioneerUrl","daysSinceLastActive","recentCommitCount","newHotspotCount","topChangedFile","referredName","newQueuePosition","totalReferrals","boolean","severityConfig","paddingLeft","websiteUrl","WaitlistConfirmation","snapshotsDelta","regressionsDelta","deltaLabel","delta","statItems","borderSpacing","rowStart","stat","j","h","SETUP_STEPS","step","gap","minWidth","insightTeaser","resolvedObservation","resolvedAction","daysObserved","EmailService","middlewares","providers","defaultFrom","fromAddresses","defaultReplyTo","dryRunMode","setDryRun","enabled","setFromAddresses","addresses","setDefaultFrom","setDefaultReplyTo","replyTo","use","middleware","push","dryRun","handleDryRun","execute","reduceRight","next","executeDelivery","sendFromTemplate","options","templateId","validation","safeParse","context","getPriorityForCategory","provider","data","metadata","sendBatch","requests","results","Promise","allSettled","succeeded","r","total","failed","plainText","selectProvider","tags","split","trackDelivery","recipientEmail","emailId","_subject","_htmlPreview","_textPreview","priorityMap","authentication","billing","onboarding","product","marketing","_data","registerProvider","setTemplateRegistry","registry","hubspotClient","getHubSpotClient","HUBSPOT_API_KEY","accessToken","logger","properties","key","Object","response","contactProperties","updateContact","basicApi","entries","getContact","syncUserToHubSpot","userData","mapUserDataToHubSpotProperties","existingContact","findContactByEmail","updated","updateHubSpotContact","created","createHubSpotContact","crm","contacts","searchApi","doSearch","filterGroups","filters","propertyName","operator","limit","_error","warn","firstname","lastname","lastName","vreko_user_id","extension_installed","extensionInstalled","extension_version","extensionVersion","pioneer_tier","pioneer_points","subscription_plan","subscription_status","subscriptionStatus","total_snapshots","total_recoveries","totalRestores","signup_source","signupSource","onboarding_completed","onboardingCompleted","ai_tool_primary","aiToolPrimary","extensionInstallDate","extension_install_date","getTime","pioneerJoinDate","pioneer_join_date","subscriptionStartDate","subscription_start_date","last_activity_date","lastSnapshotDate","last_snapshot_date","firstSnapshotDate","first_snapshot_date","firstRestoreDate","first_restore_date","mrr","fromEntries","v","stripeClient","db","hash","createApiKeyBodySchema","organizationId","permissions","maxSnapshots","cloudBackup","advancedDetection","customRules","teamSharing","rateLimitEnabled","rateLimitMax","rateLimitTimeWindow","expiresAt","coerce","record","unknown","verifyApiKeyBodySchema","deleteApiKeyBodySchema","keyId","apiKeyPlugin","endpoints","createApiKey","createAuthEndpoint","method","body","openapi","operationId","responses","createdAt","nullable","ctx","sessionData","getSessionFromCtx","user","APIError","plainKey","generateAPIKey","keyHash","hashAPIKey","start","substring","keyPreview","nanoid","insert","apiKeys","prefix","updatedAt","json","verifyApiKey","isValid","candidates","select","where","and","eq","isNull","revokedAt","or","gte","matchedKey","candidate","matches","verifyAPIKeyHash","update","lastUsedAt","catch","err","valid","remaining","lastRefillAt","deleteApiKey","rowCount","organization"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCoCA,OAAO,QAAA,CAAA;;;;;;AChC3C,SAASC,eAAAA,GAAAA;AACR,EAAA,MAAMC,MAAAA,GAASC,QAAQC,GAAAA,CAAIC,cAAAA;AAC3B,EAAA,IAAI,CAACH,MAAAA,EAAQ;AACZ,IAAA,MAAM,IAAII,MAAM,iDAAA,CAAA;AACjB,EAAA;AACA,EAAA,OAAO,IAAIC,OAAOL,MAAAA,CAAAA;AACnB;AANSD,MAAAA,CAAAA,eAAAA,EAAAA,iBAAAA,CAAAA;AAAAA,OAAAA,CAAAA,iBAAAA,iBAAAA,CAAAA;AAQT,IAAIO,OAAAA;AAEkB,IAAIC,KAAAA,CAAM,EAAA,EAAc;AAC7CC,EAAAA,GAAAA,CAAIC,SAASC,IAAAA,EAAI;AAChB,IAAA,IAAI,CAACJ,OAAAA,EAAS;AACbA,MAAAA,OAAAA,GAAUP,eAAAA,EAAAA;AACX,IAAA;AACA,IAAA,OAAQO,QAAwDI,IAAAA,CAAAA;AACjE,EAAA;AACD,CAAA;AAEA,eAAsBC,UAAU,EAC/BC,IAAAA,EACAC,IACAC,OAAAA,EACAC,IAAAA,EACAC,MAAAA,EAOA;AACA,EAAA,MAAMC,SAASlB,eAAAA,EAAAA;AACf,EAAA,OAAOkB,MAAAA,CAAOC,OAAOC,IAAAA,CAAK;AACzBP,IAAAA,IAAAA;AACAC,IAAAA,EAAAA;AACAC,IAAAA,OAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA;AACD,GAAA,CAAA;AACD;AArBsBL,MAAAA,CAAAA,SAAAA,EAAAA,WAAAA,CAAAA;AAAAA,OAAAA,CAAAA,WAAAA,WAAAA,CAAAA;;;CCZf,MAAMS;EATb;;;AAUIC,EAAAA,YAAAA;AACA,EAAA,WAAA,CAAYA,aAAAA,EAAc;AACtB,IAAA,IAAA,CAAKA,YAAAA,GAAeA,aAAAA;AAExB,EAAA;;;;AAIA,EAAA,MAAMC,YAAYC,MAAAA,EAAQ;AACtB,IAAA,MAAMC,OAAAA,GAAU;MACZX,EAAAA,EAAI;AAAEY,QAAAA,KAAAA,EAAOF,MAAAA,CAAOV,EAAAA;AAAIa,QAAAA,MAAAA,EAAQH,MAAAA,CAAOG;AAAO,OAAA;MAC9CC,QAAAA,EAAU,YAAA;MACVC,QAAAA,EAAU,MAAA;MACVC,QAAAA,EAAU;QACNC,EAAAA,EAAI,iBAAA;QACJC,KAAAA,EAAO;AACHC,UAAAA,SAAAA,EAAWT,MAAAA,CAAOS,SAAAA;AAClBC,UAAAA,QAAAA,EAAUV,MAAAA,CAAOU,QAAAA;AACjBC,UAAAA,YAAAA,EAAcX,MAAAA,CAAOW,YAAAA;AACrBC,UAAAA,YAAAA,EAAcZ,MAAAA,CAAOY,YAAAA;AACrBC,UAAAA,OAAAA,EAASb,MAAAA,CAAOa,OAAAA;AAChBC,UAAAA,WAAAA,EAAad,MAAAA,CAAOc,WAAAA;AACpBC,UAAAA,aAAAA,EAAef,MAAAA,CAAOe;AAC1B;AACJ;AACJ,KAAA;AACA,IAAA,MAAM,IAAA,CAAKjB,YAAAA,CAAaF,IAAAA,CAAKK,OAAAA,CAAAA;AACjC,EAAA;;;;AAIA,EAAA,MAAMe,6BAA6BhB,MAAAA,EAAQ;AACvC,IAAA,MAAMC,OAAAA,GAAU;MACZX,EAAAA,EAAI;AAAEY,QAAAA,KAAAA,EAAOF,MAAAA,CAAOV,EAAAA;AAAIa,QAAAA,MAAAA,EAAQH,MAAAA,CAAOG;AAAO,OAAA;MAC9CC,QAAAA,EAAU,SAAA;MACVC,QAAAA,EAAU,MAAA;MACVC,QAAAA,EAAU;QACNC,EAAAA,EAAI,sBAAA;QACJC,KAAAA,EAAO;UACHS,SAAAA,EAAW,wBAAA;UACXC,KAAAA,EAAO,wBAAA;UACPC,OAAAA,EAAS,CAAA,KAAA,EAAQnB,MAAAA,CAAOU,QAAQ,CAAA,8DAAA,EAAiEV,MAAAA,CAAOoB,iBAAiBC,kBAAAA,EAAkB,CAAA,iCAAA,EAAsCrB,MAAAA,CAAOsB,iBAAiB,CAAA,sBAAA,CAAA;UACzMC,QAAAA,EAAU,MAAA;UACVC,cAAAA,EAAgB,KAAA;UAChBC,iBAAAA,EAAmB,oFAAA;UACnBC,SAAAA,EAAAA,iBAAW,IAAIC,IAAAA,EAAAA,EAAOC,WAAAA;AAC1B;AACJ;AACJ,KAAA;AACA,IAAA,MAAM,IAAA,CAAK9B,YAAAA,CAAaF,IAAAA,CAAKK,OAAAA,CAAAA;AACjC,EAAA;;;;AAIA,EAAA,MAAM4B,kBAAkB7B,MAAAA,EAAQ;AAC5B,IAAA,MAAMC,OAAAA,GAAU;MACZX,EAAAA,EAAI;AAAEY,QAAAA,KAAAA,EAAOF,MAAAA,CAAOV,EAAAA;AAAIa,QAAAA,MAAAA,EAAQH,MAAAA,CAAOG;AAAO,OAAA;MAC9CC,QAAAA,EAAU,SAAA;MACVC,QAAAA,EAAU,UAAA;MACVC,QAAAA,EAAU;QACNC,EAAAA,EAAI,sBAAA;QACJC,KAAAA,EAAO;UACHS,SAAAA,EAAW,gBAAA;UACXC,KAAAA,EAAO,gBAAA;AACPC,UAAAA,OAAAA,EAAS,CAAA,0CAAA,EAA6CnB,MAAAA,CAAO8B,MAAM,CAAA,CAAA,EAAI9B,MAAAA,CAAO+B,QAAQ,CAAA,UAAA,EAAa/B,MAAAA,CAAOU,QAAQ,CAAA,4CAAA,EAA+CV,MAAAA,CAAOgC,SAAAA,CAAUX,oBAAkB,CAAA,CAAA,CAAA;UACpME,QAAAA,EAAU,SAAA;UACVC,cAAAA,EAAgB,IAAA;AAChBS,UAAAA,SAAAA,EAAWjC,MAAAA,CAAOkC,gBAAAA;UAClBC,WAAAA,EAAa,uBAAA;UACbV,iBAAAA,EAAmB,4GAAA;UACnBC,SAAAA,EAAAA,iBAAW,IAAIC,IAAAA,EAAAA,EAAOC,WAAAA;AAC1B;AACJ;AACJ,KAAA;AACA,IAAA,MAAM,IAAA,CAAK9B,YAAAA,CAAaF,IAAAA,CAAKK,OAAAA,CAAAA;AACjC,EAAA;;;;AAIA,EAAA,MAAMmC,yBAAyBpC,MAAAA,EAAQ;AACnC,IAAA,MAAMC,OAAAA,GAAU;MACZX,EAAAA,EAAI;AAAEY,QAAAA,KAAAA,EAAOF,MAAAA,CAAOV,EAAAA;AAAIa,QAAAA,MAAAA,EAAQH,MAAAA,CAAOG;AAAO,OAAA;MAC9CC,QAAAA,EAAU,SAAA;MACVC,QAAAA,EAAU,QAAA;MACVC,QAAAA,EAAU;QACNC,EAAAA,EAAI,sBAAA;QACJC,KAAAA,EAAO;UACHS,SAAAA,EAAW,uBAAA;UACXC,KAAAA,EAAO,uBAAA;AACPC,UAAAA,OAAAA,EAAS,CAAA,kCAAA,EAAqCnB,MAAAA,CAAOqC,OAAO,CAAA,IAAA,EAAOrC,OAAOsC,OAAO,CAAA,mCAAA,CAAA;UACjFf,QAAAA,EAAU,MAAA;UACVC,cAAAA,EAAgB,KAAA;AAChBS,UAAAA,SAAAA,EAAWjC,MAAAA,CAAOY,YAAAA;UAClBuB,WAAAA,EAAa,sBAAA;AACbV,UAAAA,iBAAAA,EAAmB,CAAA,cAAA,EAAiBzB,MAAAA,CAAOuC,WAAAA,CAAYC,IAAAA,CAAK,IAAA,CAAA,CAAA,CAAA;UAC5Dd,SAAAA,EAAAA,iBAAW,IAAIC,IAAAA,EAAAA,EAAOC,WAAAA;AAC1B;AACJ;AACJ,KAAA;AACA,IAAA,MAAM,IAAA,CAAK9B,YAAAA,CAAaF,IAAAA,CAAKK,OAAAA,CAAAA;AACjC,EAAA;;;;AAIA,EAAA,MAAMwC,gBAAgBzC,MAAAA,EAAQ;AAC1B,IAAA,MAAMC,OAAAA,GAAU;MACZX,EAAAA,EAAI;AAAEY,QAAAA,KAAAA,EAAOF,MAAAA,CAAOV,EAAAA;AAAIa,QAAAA,MAAAA,EAAQH,MAAAA,CAAOG;AAAO,OAAA;MAC9CC,QAAAA,EAAU,SAAA;MACVC,QAAAA,EAAU,MAAA;MACVC,QAAAA,EAAU;QACNC,EAAAA,EAAI,sBAAA;QACJC,KAAAA,EAAO;UACHS,SAAAA,EAAW,cAAA;UACXC,KAAAA,EAAO,CAAA,KAAA,EAAQlB,OAAOU,QAAQ,CAAA,gBAAA,CAAA;AAC9BS,UAAAA,OAAAA,EAAS,CAAA,wBAAA,EAA2BnB,MAAAA,CAAO0C,aAAa,CAAA,IAAA,EAAO1C,MAAAA,CAAO0C,aAAAA,KAAkB,CAAA,GAAI,GAAA,GAAM,EAAA,CAAA,IAAA,EAAS1C,MAAAA,CAAO2C,YAAAA,CAAatB,oBAAkB,CAAA,yDAAA,CAAA;UACjJE,QAAAA,EAAU,SAAA;UACVC,cAAAA,EAAgB,IAAA;AAChBS,UAAAA,SAAAA,EAAWjC,MAAAA,CAAO4C,UAAAA;UAClBT,WAAAA,EAAa,aAAA;UACbV,iBAAAA,EAAmB,mHAAA;UACnBC,SAAAA,EAAAA,iBAAW,IAAIC,IAAAA,EAAAA,EAAOC,WAAAA;AAC1B;AACJ;AACJ,KAAA;AACA,IAAA,MAAM,IAAA,CAAK9B,YAAAA,CAAaF,IAAAA,CAAKK,OAAAA,CAAAA;AACjC,EAAA;;;;;;;AAOA,EAAA,MAAM4C,qBAAqB7C,MAAAA,EAAQ;AAC/B,IAAA,MAAMC,OAAAA,GAAU;MACZX,EAAAA,EAAI;AAAEY,QAAAA,KAAAA,EAAOF,MAAAA,CAAOV,EAAAA;AAAIa,QAAAA,MAAAA,EAAQH,MAAAA,CAAOG;AAAO,OAAA;MAC9CC,QAAAA,EAAU,SAAA;MACVC,QAAAA,EAAU,UAAA;MACVC,QAAAA,EAAU;QACNC,EAAAA,EAAI,sBAAA;QACJC,KAAAA,EAAO;UACHS,SAAAA,EAAW,wBAAA;UACXC,KAAAA,EAAO,sCAAA;UACPC,OAAAA,EAAS,CAAA,KAAA,EAAQnB,OAAOU,QAAQ,CAAA,4IAAA,CAAA;UAChCa,QAAAA,EAAU,OAAA;UACVC,cAAAA,EAAgB,IAAA;AAChBS,UAAAA,SAAAA,EAAWjC,MAAAA,CAAO8C,aAAAA;UAClBX,WAAAA,EAAa,gBAAA;UACbV,iBAAAA,EAAmB,uJAAA;UACnBC,SAAAA,EAAAA,iBAAW,IAAIC,IAAAA,EAAAA,EAAOC,WAAAA;AAC1B;AACJ;AACJ,KAAA;AACA,IAAA,MAAM,IAAA,CAAK9B,YAAAA,CAAaF,IAAAA,CAAKK,OAAAA,CAAAA;AACjC,EAAA;AACJ;ACjKO,IAAM8C,KAAAA,GAAQ;EACjBC,UAAAA,EAAY,SAAA;EACZC,OAAAA,EAAS,SAAA;EACTC,eAAAA,EAAiB,SAAA;EACjBC,MAAAA,EAAQ,SAAA;EACRC,OAAAA,EAAS,SAAA;EACTC,WAAAA,EAAa,SAAA;EACbC,WAAAA,EAAa,SAAA;EACbC,aAAAA,EAAe,SAAA;EACfC,SAAAA,EAAW,SAAA;EACXC,MAAAA,EAAQ,SAAA;EACRC,OAAAA,EAAS,SAAA;EACTC,OAAAA,EAAS,SAAA;EACTC,IAAAA,EAAM;AACV,CAAA;AAEA,IAAMC,gBAAAA,GAAmB,gDAAA;AACzB,IAAMC,qBAAAA,GAAwB,qDAAA;AACf,SAAf,OAAA,CAAgC,EAAEC,OAAAA,EAASC,QAAAA,EAAQ,EAAE;AACjD,EAAA,OAAQC,KAAMC,IAAAA,EAAM;IAAEC,IAAAA,EAAM,IAAA;IAAMH,QAAAA,EAAU;AAACI,MAAAA,GAAAA,CAAKC,IAAAA,EAAM;AAAEL,QAAAA,QAAAA,EAAUI,IAAKE,IAAAA,EAAM;UAAEC,UAAAA,EAAY,OAAA;UAASC,kBAAAA,EAAoB,OAAA;UAASC,UAAAA,EAAY,GAAA;UAAKC,SAAAA,EAAW;SAAS;OAAG,CAAA;AAAIN,MAAAA,GAAAA,CAAKO,QAAAA,EAAU;QAAEC,MAAAA,EAAQ;UACxLC,KAAAA,EAAO;YACHC,MAAAA,EAAQ;cACJC,MAAAA,EAAQ;AACJ,gBAAA,OAAA,EAAShC,KAAAA,CAAMC,UAAAA;AACf,gBAAA,YAAA,EAAcD,KAAAA,CAAME,OAAAA;AACpB,gBAAA,aAAA,EAAeF,KAAAA,CAAMG,eAAAA;AACrB,gBAAA,WAAA,EAAaH,KAAAA,CAAMI,MAAAA;AACnB,gBAAA,UAAA,EAAYJ,KAAAA,CAAMK,OAAAA;AAClB,gBAAA,eAAA,EAAiBL,KAAAA,CAAMM,WAAAA;AACvB,gBAAA,SAAA,EAAWN,KAAAA,CAAMO,WAAAA;AACjB,gBAAA,UAAA,EAAYP,KAAAA,CAAMQ,aAAAA;AAClB,gBAAA,UAAA,EAAYR,KAAAA,CAAMS,SAAAA;AAClB,gBAAA,WAAA,EAAaT,KAAAA,CAAMU,MAAAA;AACnB,gBAAA,YAAA,EAAcV,KAAAA,CAAMW,OAAAA;AACpB,gBAAA,YAAA,EAAcX,KAAAA,CAAMY,OAAAA;AACpB,gBAAA,SAAA,EAAWZ,KAAAA,CAAMa;AACrB;AACJ;AACJ;AACJ,SAAA;AAAGI,QAAAA,QAAAA,EAAUC,KAAMe,IAAAA,EAAM;UAAEC,KAAAA,EAAO;AAAEC,YAAAA,eAAAA,EAAiBnC,KAAAA,CAAMC,UAAAA;YAAYmC,MAAAA,EAAQ,CAAA;YAAGC,OAAAA,EAAS;AAAE,WAAA;UAAGpB,QAAAA,EAAU;AAACI,YAAAA,GAAAA,CAAKiB,OAAAA,EAAS;cAAErB,QAAAA,EAAUD;aAAQ,CAAA;AAAIK,YAAAA,GAAAA,CAAKkB,OAAAA,EAAS;cAAEL,KAAAA,EAAO;AAAEC,gBAAAA,eAAAA,EAAiBnC,KAAAA,CAAMC,UAAAA;gBAAYoC,OAAAA,EAAS;AAAY,eAAA;AAAGpB,cAAAA,QAAAA,EAAUC,KAAMsB,SAAAA,EAAW;gBAAEN,KAAAA,EAAO;kBAAEO,QAAAA,EAAU,OAAA;kBAASL,MAAAA,EAAQ;AAAS,iBAAA;gBAAGnB,QAAAA,EAAU;AAACI,kBAAAA,GAAAA,CAAKkB,OAAAA,EAAS;oBAAEL,KAAAA,EAAO;sBAAEQ,YAAAA,EAAc;AAAE,qBAAA;AAAGzB,oBAAAA,QAAAA,EAAUI,IAAKsB,GAAAA,EAAK;sBAAEC,GAAAA,EAAK9B,gBAAAA;sBAAkB+B,KAAAA,EAAO,KAAA;sBAAOC,MAAAA,EAAQ,KAAA;sBAAOC,GAAAA,EAAK,OAAA;sBAASb,KAAAA,EAAO;wBAAEW,KAAAA,EAAO,MAAA;wBAAQG,OAAAA,EAAS,OAAA;wBAASC,YAAAA,EAAc;AAAc;qBAAE;mBAAG,CAAA;AAAI5B,kBAAAA,GAAAA,CAAKkB,OAAAA,EAAS;oBAAEL,KAAAA,EAAO;AAC3gBC,sBAAAA,eAAAA,EAAiBnC,KAAAA,CAAME,OAAAA;sBACvB+C,YAAAA,EAAc,aAAA;sBACd7C,MAAAA,EAAQ,CAAA,UAAA,EAAaJ,MAAMI,MAAM,CAAA,CAAA;sBACjC8C,SAAAA,EAAW,MAAA;sBACXb,OAAAA,EAAS;AACb,qBAAA;AAAGpB,oBAAAA;mBAAmB,CAAA;AAAIC,kBAAAA,IAAAA,CAAMqB,OAAAA,EAAS;oBAAEL,KAAAA,EAAO;sBAAEiB,SAAAA,EAAW,MAAA;sBAAQd,OAAAA,EAAS,QAAA;sBAAUe,SAAAA,EAAW;AAAS,qBAAA;oBAAGnC,QAAAA,EAAU;AAACI,sBAAAA,GAAAA,CAAKsB,GAAAA,EAAK;wBAAEC,GAAAA,EAAK7B,qBAAAA;wBAAuB8B,KAAAA,EAAO,IAAA;wBAAMC,MAAAA,EAAQ,IAAA;wBAAMC,GAAAA,EAAK,EAAA;wBAAIb,KAAAA,EAAO;0BAAEc,OAAAA,EAAS,OAAA;0BAASZ,MAAAA,EAAQ;AAAc;uBAAE,CAAA;AAAIf,sBAAAA,GAAAA,CAAKgC,IAAAA,EAAM;wBAAEnB,KAAAA,EAAO;AAAEoB,0BAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;0BAAW8C,QAAAA,EAAU,MAAA;0BAAQC,UAAAA,EAAY,KAAA;0BAAOpB,MAAAA,EAAQ;AAAE,yBAAA;wBAAGnB,QAAAA,EAAU;uBAAmC,CAAA;AAAII,sBAAAA,GAAAA,CAAKoC,EAAAA,EAAI;wBAAEvB,KAAAA,EAAO;AAAEwB,0BAAAA,WAAAA,EAAa1D,KAAAA,CAAMI,MAAAA;0BAAQgC,MAAAA,EAAQ;AAAS;uBAAE,CAAA;AAAIlB,sBAAAA,IAAAA,CAAMmC,IAAAA,EAAM;wBAAEnB,KAAAA,EAAO;AAAEoB,0BAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;0BAAW8C,QAAAA,EAAU,MAAA;0BAAQnB,MAAAA,EAAQ;AAAE,yBAAA;wBAAGnB,QAAAA,EAAU;AAACI,0BAAAA,GAAAA,CAAKsC,IAAAA,EAAM;4BAAEC,IAAAA,EAAM,+BAAA;4BAAiC1B,KAAAA,EAAO;AAAEoB,8BAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;8BAAWoD,cAAAA,EAAgB;AAAY,6BAAA;4BAAG5C,QAAAA,EAAU;2BAAc,CAAA;AAAI,0BAAA,QAAA;AAAOI,0BAAAA,GAAAA,CAAKsC,IAAAA,EAAM;4BAAEC,IAAAA,EAAM,2BAAA;4BAA6B1B,KAAAA,EAAO;AAAEoB,8BAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;8BAAWoD,cAAAA,EAAgB;AAAY,6BAAA;4BAAG5C,QAAAA,EAAU;2BAAiB;;uBAAI;;mBAAI;;eAAI;aAAG;;SAAI;OAAG;;GAAI,CAAA;AACn5B;AA5BwB6C,MAAAA,CAAAA,OAAAA,EAAAA,SAAAA,CAAAA;;;ACjBjB,SAASC,aAAAA,CAAc,EAAEH,IAAAA,EAAM3C,QAAAA,EAAQ,EAAE;AAC5C,EAAA,OAAQI,IAAK2C,MAAAA,EAAQ;AAAEJ,IAAAA,IAAAA;IAAY1B,KAAAA,EAAO;AAClCC,MAAAA,eAAAA,EAAiBnC,KAAAA,CAAMK,OAAAA;AACvBiD,MAAAA,KAAAA,EAAOtD,KAAAA,CAAMC,UAAAA;MACbyB,UAAAA,EAAY,GAAA;MACZuB,YAAAA,EAAc,KAAA;MACdZ,OAAAA,EAAS,WAAA;MACTkB,QAAAA,EAAU,MAAA;MACVM,cAAAA,EAAgB,MAAA;MAChBb,OAAAA,EAAS;AACb,KAAA;AAAG/B,IAAAA;GAAmB,CAAA;AAC9B;AAXgB8C,MAAAA,CAAAA,aAAAA,EAAAA,eAAAA,CAAAA;AAYT,SAASE,YAAAA,CAAa,EAAEL,IAAAA,EAAM3C,QAAAA,EAAQ,EAAE;AAC3C,EAAA,OAAQI,IAAK2C,MAAAA,EAAQ;AAAEJ,IAAAA,IAAAA;IAAY1B,KAAAA,EAAO;AAClCC,MAAAA,eAAAA,EAAiBnC,KAAAA,CAAMU,MAAAA;MACvB4C,KAAAA,EAAO,SAAA;MACP5B,UAAAA,EAAY,GAAA;MACZuB,YAAAA,EAAc,KAAA;MACdZ,OAAAA,EAAS,WAAA;MACTkB,QAAAA,EAAU,MAAA;MACVM,cAAAA,EAAgB,MAAA;MAChBb,OAAAA,EAAS;AACb,KAAA;AAAG/B,IAAAA;GAAmB,CAAA;AAC9B;AAXgBgD,MAAAA,CAAAA,YAAAA,EAAAA,cAAAA,CAAAA;AAYT,SAASC,WAAAA,CAAY,EAAEN,IAAAA,EAAM3C,QAAAA,EAAQ,EAAE;AAC1C,EAAA,OAAQI,IAAK2C,MAAAA,EAAQ;AAAEJ,IAAAA,IAAAA;IAAY1B,KAAAA,EAAO;MAClCC,eAAAA,EAAiB,aAAA;AACjBmB,MAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;MACbmB,UAAAA,EAAY,GAAA;MACZuB,YAAAA,EAAc,KAAA;MACdZ,OAAAA,EAAS,WAAA;MACTkB,QAAAA,EAAU,MAAA;MACVM,cAAAA,EAAgB,MAAA;MAChBb,OAAAA,EAAS,cAAA;MACT5C,MAAAA,EAAQ,CAAA,UAAA,EAAaJ,MAAMI,MAAM,CAAA;AACrC,KAAA;AAAGa,IAAAA;GAAmB,CAAA;AAC9B;AAZgBiD,MAAAA,CAAAA,WAAAA,EAAAA,aAAAA,CAAAA;;;ACvBoBC,EAAE3I,MAAAA,CAAO;EACzC4I,QAAAA,EAAUD,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA,EAAG;AACxBC,EAAAA,gBAAAA,EAAkBJ,CAAAA,CAAEK,MAAAA,EAAM,CAAGC,OAAAA,CAAQ,EAAA,CAAA;EACrCC,SAAAA,EAAWP,CAAAA,CAAEE,MAAAA,EAAM,CAAGM,QAAAA,EAAQ;EAC9BC,SAAAA,EAAWT,CAAAA,CAAEE,MAAAA,EAAM,CAAGM,QAAAA;AAC1B,CAAA;AACA,SAASE,UAAU,EAAET,QAAAA,EAAUG,gBAAAA,EAAkBG,SAAAA,EAAWE,WAAS,EAAE;AACnE,EAAA,OAAQ1D,KAAM4C,OAAAA,EAAS;AAAE9C,IAAAA,OAAAA,EAAS,wCAAwCuD,gBAAAA,CAAAA,QAAAA,CAAAA;IAA4BtD,QAAAA,EAAU;AAACI,MAAAA,GAAAA,CAAKyD,OAAAA,EAAS;QAAE5C,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;UAAagD,QAAAA,EAAU,MAAA;UAAQ7B,UAAAA,EAAY,GAAA;UAAKU,MAAAA,EAAQ;AAAW,SAAA;QAAGnB,QAAAA,EAAU;OAAiC,CAAA;AAAIC,MAAAA,IAAAA,CAAMmC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;UAAe+C,QAAAA,EAAU,MAAA;UAAQC,UAAAA,EAAY,KAAA;UAAOpB,MAAAA,EAAQ;AAAW,SAAA;QAAGnB,QAAAA,EAAU;AAAC,UAAA,mEAAA;AAAqEsD,UAAAA,gBAAAA;AAAkB,UAAA;;OAAuC,CAAA;AAAIlD,MAAAA,GAAAA,CAAK0C,aAAAA,EAAe;QAAEH,IAAAA,EAAMQ,QAAAA;QAAUnD,QAAAA,EAAU;OAAmB,CAAA;OAAKyD,SAAAA,IAAaE,SAAAA,KAAe1D,KAAM6D,QAAAA,EAAW;QAAE9D,QAAAA,EAAU;AAACI,UAAAA,GAAAA,CAAKoC,EAAAA,EAAI;YAAEvB,KAAAA,EAAO;AAAEwB,cAAAA,WAAAA,EAAa1D,KAAAA,CAAMI,MAAAA;cAAQgC,MAAAA,EAAQ;AAAS;WAAE,CAAA;AAAIlB,UAAAA,IAAAA,CAAMqB,OAAAA,EAAS;YAAEL,KAAAA,EAAO;AAC/sBC,cAAAA,eAAAA,EAAiBnC,KAAAA,CAAMG,eAAAA;cACvB8C,YAAAA,EAAc,KAAA;cACdZ,OAAAA,EAAS,MAAA;cACTjC,MAAAA,EAAQ,CAAA,UAAA,EAAaJ,MAAMI,MAAM,CAAA;AACrC,aAAA;YAAGa,QAAAA,EAAU;AAACI,cAAAA,GAAAA,CAAKgC,IAAAA,EAAM;gBAAEnB,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;kBAAe+C,QAAAA,EAAU,MAAA;kBAAQnB,MAAAA,EAAQ,SAAA;kBAAWV,UAAAA,EAAY;AAAI,iBAAA;gBAAGT,QAAAA,EAAU;eAAkB,CAAA;AAAIyD,cAAAA,SAAAA,IAAcxD,KAAMmC,IAAAA,EAAM;gBAAEnB,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;kBAAW8C,QAAAA,EAAU,MAAA;kBAAQnB,MAAAA,EAAQ;AAAU,iBAAA;gBAAGnB,QAAAA,EAAU;AAAC,kBAAA,cAAA;AAAgByD,kBAAAA;;eAAW,CAAA;AAAKE,cAAAA,SAAAA,IAAc1D,KAAMmC,IAAAA,EAAM;gBAAEnB,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;kBAAW8C,QAAAA,EAAU,MAAA;kBAAQnB,MAAAA,EAAQ;AAAE,iBAAA;gBAAGnB,QAAAA,EAAU;AAAC,kBAAA,UAAA;AAAY2D,kBAAAA;;eAAW;;WAAK;;OAAI,CAAA;AAAKvD,MAAAA,GAAAA,CAAKoC,EAAAA,EAAI;QAAEvB,KAAAA,EAAO;AAAEwB,UAAAA,WAAAA,EAAa1D,KAAAA,CAAMI,MAAAA;UAAQgC,MAAAA,EAAQ;AAAS;OAAE,CAAA;AAAIf,MAAAA,GAAAA,CAAKgC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;UAAW8C,QAAAA,EAAU,MAAA;UAAQnB,MAAAA,EAAQ;AAAE,SAAA;QAAGnB,QAAAA,EAAU;OAA6H;;GAAI,CAAA;AACzuB;AAPS4D,MAAAA,CAAAA,SAAAA,EAAAA,WAAAA,CAAAA;AAQTA,SAAAA,CAAUG,YAAAA,GAAe;EACrBZ,QAAAA,EAAU,4CAAA;EACVG,gBAAAA,EAAkB,EAAA;EAClBG,SAAAA,EAAW,cAAA;EACXE,SAAAA,EAAW;AACf,CAAA;CACqC;EAKjCK,YAAAA,EAAcJ,SAAAA,CAAUG,YAE5B;AC3ByCb,EAAE3I,MAAAA,CAAO;AAC9C0J,EAAAA,UAAAA,EAAYf,EAAEE,MAAAA,EAAM;EACpBc,QAAAA,EAAUhB,CAAAA,CAAEE,MAAAA,EAAM,CAAGM,QAAAA,EAAQ;AAC7BD,EAAAA,SAAAA,EAAWP,EAAEE,MAAAA,EAAM;AACnB1F,EAAAA,SAAAA,EAAWwF,EAAEE,MAAAA,EAAM;EACnBe,UAAAA,EAAYjB,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA,EAAG;EAC1Be,OAAAA,EAASlB,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA;AACxB,CAAA;AACA,SAASgB,cAAAA,CAAe,EAAEJ,UAAAA,EAAYC,QAAAA,EAAUT,WAAW/F,SAAAA,EAAWyG,UAAAA,EAAYC,SAAO,EAAE;AACvF,EAAA,OAAQnE,KAAM4C,OAAAA,EAAS;IAAE9C,OAAAA,EAAS,6CAAA;IAA+CC,QAAAA,EAAU;AAACI,MAAAA,GAAAA,CAAKyD,OAAAA,EAAS;QAAE5C,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;UAAagD,QAAAA,EAAU,MAAA;UAAQ7B,UAAAA,EAAY,GAAA;UAAKU,MAAAA,EAAQ;AAAW,SAAA;QAAGnB,QAAAA,EAAU;OAAoC,CAAA;AAAII,MAAAA,GAAAA,CAAKgC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;UAAe+C,QAAAA,EAAU,MAAA;UAAQC,UAAAA,EAAY,KAAA;UAAOpB,MAAAA,EAAQ;AAAW,SAAA;QAAGnB,QAAAA,EAAU;OAA+E,CAAA;AAAIC,MAAAA,IAAAA,CAAMqB,OAAAA,EAAS;QAAEL,KAAAA,EAAO;AAC5cC,UAAAA,eAAAA,EAAiBnC,KAAAA,CAAMG,eAAAA;UACvB8C,YAAAA,EAAc,KAAA;UACdZ,OAAAA,EAAS,MAAA;UACTjC,MAAAA,EAAQ,CAAA,UAAA,EAAaJ,MAAMI,MAAM,CAAA,CAAA;UACjCsC,YAAAA,EAAc;AAClB,SAAA;QAAGzB,QAAAA,EAAU;AAACI,UAAAA,GAAAA,CAAKgC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AACtBoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;cACb+C,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,GAAA;cACZU,MAAAA,EAAQ,UAAA;cACRmD,aAAAA,EAAe,WAAA;cACfC,aAAAA,EAAe;AACnB,aAAA;YAAGvE,QAAAA,EAAU;WAAkB,CAAA;AAAII,UAAAA,GAAAA,CAAK,OAAA,EAAS;YAAEa,KAAAA,EAAO;cAAEW,KAAAA,EAAO,MAAA;cAAQ4C,cAAAA,EAAgB;AAAW,aAAA;AAAGxE,YAAAA,QAAAA,EAAUC,KAAM,OAAA,EAAS;cAAED,QAAAA,EAAU;AAACC,gBAAAA,IAAAA,CAAM,IAAA,EAAM;kBAAED,QAAAA,EAAU;AAACI,oBAAAA,GAAAA,CAAK,IAAA,EAAM;sBAAEa,KAAAA,EAAO;AAAEoB,wBAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;wBAAW8C,QAAAA,EAAU,MAAA;wBAAQlB,OAAAA,EAAS,OAAA;wBAASQ,KAAAA,EAAO;AAAM,uBAAA;sBAAG5B,QAAAA,EAAU;qBAAS,CAAA;AAAII,oBAAAA,GAAAA,CAAK,IAAA,EAAM;sBAAEa,KAAAA,EAAO;AAAEoB,wBAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;wBAAagD,QAAAA,EAAU,MAAA;wBAAQlB,OAAAA,EAAS;AAAQ,uBAAA;sBAAGpB,QAAAA,EAAUiE;qBAAW;;iBAAI,CAAA;AAAIhE,gBAAAA,IAAAA,CAAM,IAAA,EAAM;kBAAED,QAAAA,EAAU;AAACI,oBAAAA,GAAAA,CAAK,IAAA,EAAM;sBAAEa,KAAAA,EAAO;AAAEoB,wBAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;wBAAW8C,QAAAA,EAAU,MAAA;wBAAQlB,OAAAA,EAAS;AAAQ,uBAAA;sBAAGpB,QAAAA,EAAU;qBAAa,CAAA;AAAII,oBAAAA,GAAAA,CAAK,IAAA,EAAM;sBAAEa,KAAAA,EAAO;AAAEoB,wBAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;wBAAagD,QAAAA,EAAU,MAAA;wBAAQlB,OAAAA,EAAS;AAAQ,uBAAA;sBAAGpB,QAAAA,EAAUyD;qBAAU;;iBAAI,CAAA;AAAIS,gBAAAA,QAAAA,IAAajE,KAAM,IAAA,EAAM;kBAAED,QAAAA,EAAU;AAACI,oBAAAA,GAAAA,CAAK,IAAA,EAAM;sBAAEa,KAAAA,EAAO;AAAEoB,wBAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;wBAAW8C,QAAAA,EAAU,MAAA;wBAAQlB,OAAAA,EAAS;AAAQ,uBAAA;sBAAGpB,QAAAA,EAAU;qBAAW,CAAA;AAAII,oBAAAA,GAAAA,CAAK,IAAA,EAAM;sBAAEa,KAAAA,EAAO;AAAEoB,wBAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;wBAAagD,QAAAA,EAAU,MAAA;wBAAQlB,OAAAA,EAAS;AAAQ,uBAAA;sBAAGpB,QAAAA,EAAUkE;qBAAS;;iBAAI,CAAA;AAAKjE,gBAAAA,IAAAA,CAAM,IAAA,EAAM;kBAAED,QAAAA,EAAU;AAACI,oBAAAA,GAAAA,CAAK,IAAA,EAAM;sBAAEa,KAAAA,EAAO;AAAEoB,wBAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;wBAAW8C,QAAAA,EAAU,MAAA;wBAAQlB,OAAAA,EAAS;AAAQ,uBAAA;sBAAGpB,QAAAA,EAAU;qBAAO,CAAA;AAAII,oBAAAA,GAAAA,CAAK,IAAA,EAAM;sBAAEa,KAAAA,EAAO;AAAEoB,wBAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;wBAAagD,QAAAA,EAAU,MAAA;wBAAQlB,OAAAA,EAAS;AAAQ,uBAAA;sBAAGpB,QAAAA,EAAUtC;qBAAU;;iBAAI;;aAAI;WAAG;;OAAI,CAAA;AAAI0C,MAAAA,GAAAA,CAAKgC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;UAAe+C,QAAAA,EAAU,MAAA;UAAQnB,MAAAA,EAAQ;AAAW,SAAA;QAAGnB,QAAAA,EAAU;OAAgB,CAAA;AAAII,MAAAA,GAAAA,CAAK,OAAA,EAAS;QAAEa,KAAAA,EAAO;UAAEuD,cAAAA,EAAgB;AAAW,SAAA;AAAGxE,QAAAA,QAAAA,EAAUI,IAAK,OAAA,EAAS;AAAEJ,UAAAA,QAAAA,EAAUC,KAAM,IAAA,EAAM;YAAED,QAAAA,EAAU;AAACI,cAAAA,GAAAA,CAAK,IAAA,EAAM;gBAAEa,KAAAA,EAAO;kBAAEwD,YAAAA,EAAc;AAAO,iBAAA;AAAGzE,gBAAAA,QAAAA,EAAUI,IAAK0C,aAAAA,EAAe;kBAAEH,IAAAA,EAAMwB,UAAAA;kBAAYnE,QAAAA,EAAU;iBAAmB;eAAG,CAAA;AAAII,cAAAA,GAAAA,CAAK,IAAA,EAAM;AAAEJ,gBAAAA,QAAAA,EAAUI,IAAK4C,YAAAA,EAAc;kBAAEL,IAAAA,EAAMyB,OAAAA;kBAASpE,QAAAA,EAAU;iBAAwB;eAAG;;WAAI;SAAG;OAAG,CAAA;AAAII,MAAAA,GAAAA,CAAKoC,EAAAA,EAAI;QAAEvB,KAAAA,EAAO;AAAEwB,UAAAA,WAAAA,EAAa1D,KAAAA,CAAMI,MAAAA;UAAQgC,MAAAA,EAAQ;AAAS;OAAE,CAAA;AAAIf,MAAAA,GAAAA,CAAKgC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;UAAW8C,QAAAA,EAAU,MAAA;UAAQnB,MAAAA,EAAQ;AAAE,SAAA;QAAGnB,QAAAA,EAAU,CAAA,gJAAA;OAAqJ;;GAAI,CAAA;AAC97D;AAfSqE,MAAAA,CAAAA,cAAAA,EAAAA,gBAAAA,CAAAA;AAgBTA,cAAAA,CAAeN,YAAAA,GAAe;EAC1BE,UAAAA,EAAY,iBAAA;EACZC,QAAAA,EAAU,mBAAA;EACVT,SAAAA,EAAW,cAAA;EACX/F,SAAAA,EAAW,+BAAA;EACXyG,UAAAA,EAAY,+CAAA;EACZC,OAAAA,EAAS;AACb,CAAA;CAC0C;EAKtCJ,YAAAA,EAAcK,cAAAA,CAAeN,YAEjC;ACvCwCb,EAAE3I,MAAAA,CAAO;EAC7CmK,QAAAA,EAAUxB,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA,EAAG;AACxBC,EAAAA,gBAAAA,EAAkBJ,CAAAA,CAAEK,MAAAA,EAAM,CAAGC,OAAAA,CAAQ,EAAA,CAAA;AACrCmB,EAAAA,aAAAA,EAAezB,EACV3I,MAAAA,CAAO;AACRkJ,IAAAA,SAAAA,EAAWP,EAAEE,MAAAA,EAAM;IACnBc,QAAAA,EAAUhB,CAAAA,CAAEE,MAAAA,EAAM,CAAGM,QAAAA;AACzB,GAAA,EACKA,QAAAA;AACT,CAAA;AACA,SAASkB,aAAAA,CAAc,EAAEF,QAAAA,EAAUpB,gBAAAA,EAAkBqB,eAAa,EAAE;AAChE,EAAA,OAAQ1E,KAAM4C,OAAAA,EAAS;IAAE9C,OAAAA,EAAS,iDAAA;IAAmDC,QAAAA,EAAU;AAACI,MAAAA,GAAAA,CAAKyD,OAAAA,EAAS;QAAE5C,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;UAAagD,QAAAA,EAAU,MAAA;UAAQ7B,UAAAA,EAAY,GAAA;UAAKU,MAAAA,EAAQ;AAAW,SAAA;QAAGnB,QAAAA,EAAU;OAAsB,CAAA;AAAIC,MAAAA,IAAAA,CAAMmC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;UAAe+C,QAAAA,EAAU,MAAA;UAAQC,UAAAA,EAAY,KAAA;UAAOpB,MAAAA,EAAQ;AAAW,SAAA;QAAGnB,QAAAA,EAAU;AAAC,UAAA,4IAAA;AAA8IsD,UAAAA,gBAAAA;AAAkB,UAAA;;OAAa,CAAA;AAAIlD,MAAAA,GAAAA,CAAK0C,aAAAA,EAAe;QAAEH,IAAAA,EAAM+B,QAAAA;QAAU1E,QAAAA,EAAU;OAAiB,CAAA;AAAI2E,MAAAA,aAAAA,IAAkB1E,KAAM6D,QAAAA,EAAW;QAAE9D,QAAAA,EAAU;AAACI,UAAAA,GAAAA,CAAKoC,EAAAA,EAAI;YAAEvB,KAAAA,EAAO;AAAEwB,cAAAA,WAAAA,EAAa1D,KAAAA,CAAMI,MAAAA;cAAQgC,MAAAA,EAAQ;AAAS;WAAE,CAAA;AAAIlB,UAAAA,IAAAA,CAAMqB,OAAAA,EAAS;YAAEL,KAAAA,EAAO;AACrtBC,cAAAA,eAAAA,EAAiBnC,KAAAA,CAAMG,eAAAA;cACvB8C,YAAAA,EAAc,KAAA;cACdZ,OAAAA,EAAS,MAAA;cACTjC,MAAAA,EAAQ,CAAA,UAAA,EAAaJ,MAAMI,MAAM,CAAA;AACrC,aAAA;YAAGa,QAAAA,EAAU;AAACI,cAAAA,GAAAA,CAAKgC,IAAAA,EAAM;gBAAEnB,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;kBAAe+C,QAAAA,EAAU,MAAA;kBAAQnB,MAAAA,EAAQ,SAAA;kBAAWV,UAAAA,EAAY;AAAI,iBAAA;gBAAGT,QAAAA,EAAU;eAA0B,CAAA;AAAIC,cAAAA,IAAAA,CAAMmC,IAAAA,EAAM;gBAAEnB,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;kBAAW8C,QAAAA,EAAU,MAAA;kBAAQnB,MAAAA,EAAQ;AAAU,iBAAA;gBAAGnB,QAAAA,EAAU;AAAC,kBAAA,cAAA;kBAAgB2E,aAAAA,CAAclB;;eAAW,CAAA;cAAIkB,aAAAA,CAAcT,QAAAA,IAAajE,KAAMmC,IAAAA,EAAM;gBAAEnB,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;kBAAW8C,QAAAA,EAAU,MAAA;kBAAQnB,MAAAA,EAAQ;AAAE,iBAAA;gBAAGnB,QAAAA,EAAU;AAAC,kBAAA,YAAA;kBAAc2E,aAAAA,CAAcT;;eAAU;;WAAK;;OAAI,CAAA;AAAK9D,MAAAA,GAAAA,CAAKoC,EAAAA,EAAI;QAAEvB,KAAAA,EAAO;AAAEwB,UAAAA,WAAAA,EAAa1D,KAAAA,CAAMI,MAAAA;UAAQgC,MAAAA,EAAQ;AAAS;OAAE,CAAA;AAAIf,MAAAA,GAAAA,CAAKgC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;UAAe+C,QAAAA,EAAU,MAAA;UAAQC,UAAAA,EAAY,KAAA;UAAOpB,MAAAA,EAAQ;AAAW,SAAA;QAAGnB,QAAAA,EAAU;OAAsF,CAAA;AAAII,MAAAA,GAAAA,CAAK4C,YAAAA,EAAc;QAAEL,IAAAA,EAAM,oCAAA;QAAsC3C,QAAAA,EAAU;OAAwB,CAAA;AAAII,MAAAA,GAAAA,CAAKoC,EAAAA,EAAI;QAAEvB,KAAAA,EAAO;AAAEwB,UAAAA,WAAAA,EAAa1D,KAAAA,CAAMI,MAAAA;UAAQgC,MAAAA,EAAQ;AAAS;OAAE,CAAA;AAAIf,MAAAA,GAAAA,CAAKgC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;UAAW8C,QAAAA,EAAU,MAAA;UAAQnB,MAAAA,EAAQ;AAAE,SAAA;QAAGnB,QAAAA,EAAU;OAA+D;;GAAI,CAAA;AAC5kC;AAPS4E,MAAAA,CAAAA,aAAAA,EAAAA,eAAAA,CAAAA;AAQTA,aAAAA,CAAcb,YAAAA,GAAe;EACzBW,QAAAA,EAAU,4CAAA;EACVpB,gBAAAA,EAAkB,EAAA;EAClBqB,aAAAA,EAAe;IACXlB,SAAAA,EAAW,cAAA;IACXS,QAAAA,EAAU;AACd;AACJ,CAAA;CACyC;EAKrCF,YAAAA,EAAcY,aAAAA,CAAcb,YAEhC;ACjCsCb,EAAE3I,MAAAA,CAAO;EAC3CsK,eAAAA,EAAiB3B,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA,EAAG;AAC/BC,EAAAA,gBAAAA,EAAkBJ,CAAAA,CAAEK,MAAAA,EAAM,CAAGC,OAAAA,CAAQ,EAAA;AACzC,CAAA;AACA,SAASsB,WAAAA,CAAY,EAAED,eAAAA,EAAiBvB,gBAAAA,EAAgB,EAAE;AACtD,EAAA,OAAQrD,KAAM4C,OAAAA,EAAS;IAAE9C,OAAAA,EAAS,iCAAA;IAAmCC,QAAAA,EAAU;AAACI,MAAAA,GAAAA,CAAKyD,OAAAA,EAAS;QAAE5C,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;UAAagD,QAAAA,EAAU,MAAA;UAAQ7B,UAAAA,EAAY,GAAA;UAAKU,MAAAA,EAAQ;AAAW,SAAA;QAAGnB,QAAAA,EAAU;OAAoB,CAAA;AAAIC,MAAAA,IAAAA,CAAMmC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;UAAe+C,QAAAA,EAAU,MAAA;UAAQC,UAAAA,EAAY,KAAA;UAAOpB,MAAAA,EAAQ;AAAW,SAAA;QAAGnB,QAAAA,EAAU;AAAC,UAAA,4EAAA;AAA8EsD,UAAAA,gBAAAA;AAAkB,UAAA;;OAAa,CAAA;AAAIlD,MAAAA,GAAAA,CAAK0C,aAAAA,EAAe;QAAEH,IAAAA,EAAMkC,eAAAA;QAAiB7E,QAAAA,EAAU;OAAuB,CAAA;AAAII,MAAAA,GAAAA,CAAKoC,EAAAA,EAAI;QAAEvB,KAAAA,EAAO;AAAEwB,UAAAA,WAAAA,EAAa1D,KAAAA,CAAMI,MAAAA;UAAQgC,MAAAA,EAAQ;AAAS;OAAE,CAAA;AAAIf,MAAAA,GAAAA,CAAKgC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;UAAW8C,QAAAA,EAAU,MAAA;UAAQnB,MAAAA,EAAQ;AAAE,SAAA;QAAGnB,QAAAA,EAAU;OAA0E;;GAAI,CAAA;AACzwB;AAFS8E,MAAAA,CAAAA,WAAAA,EAAAA,aAAAA,CAAAA;AAGTA,WAAAA,CAAYf,YAAAA,GAAe;EACvBc,eAAAA,EAAiB,wCAAA;EACjBvB,gBAAAA,EAAkB;AACtB,CAAA;CACuC;EAKnCU,YAAAA,EAAcc,WAAAA,CAAYf,YAE9B;;;;;;ACjBO,IAAMgB,UAAAA,GAAa;EACzBhE,MAAAA,EAAQ;;IAEP/B,UAAAA,EAAY,SAAA;IACZgG,mBAAAA,EAAqB,SAAA;IACrB/F,OAAAA,EAAS,SAAA;IACTgG,aAAAA,EAAe,SAAA;;IAIf7F,OAAAA,EAAS,SAAA;;IAMT3D,IAAAA,EAAM,SAAA;IACN8D,aAAAA,EAAe,SAAA;IACf2F,YAAAA,EAAc,SAAA;IACd1F,SAAAA,EAAW,SAAA;IACX2F,YAAAA,EAAc,SAAA;;IAGdhG,MAAAA,EAAQ,SAAA;IACRiG,OAAAA,EAAS,SAAA;;IAGTzF,OAAAA,EAAS,SAAA;IACT0F,KAAAA,EAAO,SAAA;IACP3F,OAAAA,EAAS,SAAA;IACTE,IAAAA,EAAM;AACP,GAAA;EAEA0F,KAAAA,EAAO;IAENC,IAAAA,EAAM,4FAAA;IACNC,IAAAA,EAAM;AACP,GAAA;EAEAC,SAAAA,EAAW;IACVC,EAAAA,EAAI,MAAA;IACJC,EAAAA,EAAI,MAAA;IACJC,IAAAA,EAAM,MAAA;IACNC,EAAAA,EAAI,MAAA;IAEJ,KAAA,EAAO,MAER,CAAA;EAEAC,OAAAA,EAAS;IACRJ,EAAAA,EAAI,KAAA;IACJC,EAAAA,EAAI,KAAA;IACJI,EAAAA,EAAI,MAAA;IACJF,EAAAA,EAAI,MAAA;IACJG,EAAAA,EAAI,MAEL,CAAA;EAEAhE,YAAAA,EAAc,KAAA;EACdiE,WAAAA,EAAa,KAAA;;EAMbC,KAAAA,EAAO;IAQNC,SAAAA,EAAW;AACZ;AACD,CAAA;AC3EO,SAASC,UAAAA,GAAAA;AACf,EAAA,MAAMC,WAAAA,mBAAc,iBAAA,IAAI1I,IAAAA,EAAAA,EAAO2I,WAAAA,EAAAA;AAE/B,EAAA,4BACEhF,OAAAA,EAAAA;IACAL,KAAAA,EAAO;AACNgB,MAAAA,SAAAA,EAAW,GAAG8C,UAAAA,CAAWkB,WAAW,CAAA,OAAA,EAAUlB,UAAAA,CAAWhE,OAAO5B,MAAM,CAAA,CAAA;AACtEoH,MAAAA,UAAAA,EAAYxB,WAAWe,OAAAA,CAAQD,EAAAA;AAC/B3D,MAAAA,SAAAA,EAAW6C,WAAWe,OAAAA,CAAQE;AAC/B,KAAA;;AAEA/F,sBAAAA,IAAAA,CAACmC,IAAAA,EAAAA;QACAnB,KAAAA,EAAO;UACNE,MAAAA,EAAQ,CAAA;AACRM,UAAAA,YAAAA,EAAcsD,WAAWe,OAAAA,CAAQH,EAAAA;AACjCrD,UAAAA,QAAAA,EAAUyC,WAAWU,SAAAA,CAAUE,EAAAA;AAC/BtD,UAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOvB,SAAAA;AACzBe,UAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,SAAA;;AACA,UAAA,0BAAA;AACYa,UAAAA;;;AAEbpG,sBAAAA,IAAAA,CAACmC,IAAAA,EAAAA;QACAnB,KAAAA,EAAO;UACNE,MAAAA,EAAQ,CAAA;AACRM,UAAAA,YAAAA,EAAcsD,WAAWe,OAAAA,CAAQH,EAAAA;AACjCrD,UAAAA,QAAAA,EAAUyC,WAAWU,SAAAA,CAAUE,EAAAA;AAC/BtD,UAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOvB;AAC1B,SAAA;;AAEAY,0BAAAA,GAAAA,CAACsC,IAAAA,EAAAA;YACAC,IAAAA,EAAK,mBAAA;YACL1B,KAAAA,EAAO;AACNoB,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B,OAAAA;cACzBwD,cAAAA,EAAgB;AACjB,aAAA;YACA,QAAA,EAAA;;AAGA,UAAA,UAAA;AACDxC,0BAAAA,GAAAA,CAACsC,IAAAA,EAAAA;YACAC,IAAAA,EAAK,wBAAA;YACL1B,KAAAA,EAAO;AACNoB,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;cACzBqD,cAAAA,EAAgB;AACjB,aAAA;YACA,QAAA,EAAA;;AAGA,UAAA,UAAA;AACDxC,0BAAAA,GAAAA,CAACsC,IAAAA,EAAAA;YACAC,IAAAA,EAAK,0BAAA;YACL1B,KAAAA,EAAO;AACNoB,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;cACzBqD,cAAAA,EAAgB;AACjB,aAAA;YACA,QAAA,EAAA;;;;AAIF3C,sBAAAA,IAAAA,CAACmC,IAAAA,EAAAA;QACAnB,KAAAA,EAAO;UACNE,MAAAA,EAAQ,CAAA;AACRmB,UAAAA,QAAAA,EAAUyC,WAAWU,SAAAA,CAAUC,EAAAA;AAC/BrD,UAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOoE;AAC1B,SAAA;;AACA,UAAA,+DAAA;AAC8D,UAAA,GAAA;AAC9D/E,0BAAAA,GAAAA,CAACsC,IAAAA,EAAAA;YACAC,IAAAA,EAAK,oBAAA;YACL1B,KAAAA,EAAO;AACNoB,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOvB,SAAAA;cACzBoD,cAAAA,EAAgB;AACjB,aAAA;YACA,QAAA,EAAA;;;;;;AAML;AAhFgBwD,MAAAA,CAAAA,UAAAA,EAAAA,YAAAA,CAAAA;AAAAA,OAAAA,CAAAA,YAAAA,YAAAA,CAAAA;ACIT,SAASI,cAAAA,CAAe,EAAEC,MAAAA,GAAS,QAAA,EAAA,EAA+B;AACxE,EAAA,MAAMC,YAAAA,GAAe;AACpBC,IAAAA,MAAAA,EAAQ5B,WAAWhE,MAAAA,CAAOpB,OAAAA;AAC1BiH,IAAAA,UAAAA,EAAY7B,WAAWhE,MAAAA,CAAOrB,OAAAA;AAC9BmH,IAAAA,OAAAA,EAAS9B,WAAWhE,MAAAA,CAAOvB,SAAAA;AAC3BsH,IAAAA,QAAAA,EAAU/B,WAAWhE,MAAAA,CAAOsE,KAAAA;AAC5B0B,IAAAA,QAAAA,EAAUhC,WAAWhE,MAAAA,CAAOrB;AAC7B,GAAA;AAEA,EAAA,MAAMsH,UAAAA,GAAa;IAClBL,MAAAA,EAAQ,kBAAA;IACRC,UAAAA,EAAY,mBAAA;IACZC,OAAAA,EAAS,gBAAA;IACTC,QAAAA,EAAU,iBAAA;IACVC,QAAAA,EAAU;AACX,GAAA;AAEA,EAAA,2BACEzF,OAAAA,EAAAA;IACAL,KAAAA,EAAO;AACNgG,MAAAA,YAAAA,EAAc,GAAGlC,UAAAA,CAAWkB,WAAW,CAAA,OAAA,EAAUlB,UAAAA,CAAWhE,OAAO5B,MAAM,CAAA,CAAA;AACzE+H,MAAAA,aAAAA,EAAenC,WAAWe,OAAAA,CAAQD,EAAAA;AAClCpE,MAAAA,YAAAA,EAAcsD,WAAWe,OAAAA,CAAQE;AAClC,KAAA;AAEA,IAAA,QAAA,sBAACmB,OAAAA,EAAAA;MAAMvF,KAAAA,EAAM,MAAA;MAAOX,KAAAA,EAAO;QAAEW,KAAAA,EAAO;AAAO,OAAA;AAC1C,MAAA,QAAA,uBAACwF,IAAAA,EAAAA;;AACAhH,0BAAAA,GAAAA,CAACiH,IAAAA,EAAAA;YAAGpG,KAAAA,EAAO;cAAEqG,aAAAA,EAAe;AAAS,aAAA;AACpC,YAAA,QAAA,uBAACzD,OAAAA,EAAAA;cACA5C,KAAAA,EAAO;gBACNE,MAAAA,EAAQ,CAAA;gBACRmB,QAAAA,EAAUyC,UAAAA,CAAWU,UAAU,KAAA,CAAA;gBAC/BhF,UAAAA,EAAY,GAAA;AACZ4B,gBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,gBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,eAAA;;AAEApF,gCAAAA,GAAAA,CAACmH,MAAAA,EAAAA;kBAAKtG,KAAAA,EAAO;AAAEoB,oBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B;AAAQ,mBAAA;kBAAG,QAAA,EAAA;;AAAQ,gBAAA;;;;AAG7DgB,0BAAAA,GAAAA,CAACiH,IAAAA,EAAAA;YACApG,KAAAA,EAAO;cACNkB,SAAAA,EAAW,OAAA;cACXmF,aAAAA,EAAe;AAChB,aAAA;AAEA,YAAA,QAAA,sBAAClF,IAAAA,EAAAA;cACAnB,KAAAA,EAAO;gBACNE,MAAAA,EAAQ,CAAA;AACRmB,gBAAAA,QAAAA,EAAUyC,WAAWU,SAAAA,CAAUC,EAAAA;AAC/BrD,gBAAAA,KAAAA,EAAOqE,aAAaD,MAAAA,CAAAA;AACpBlG,gBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME,IAAAA;gBAC7BjB,aAAAA,EAAe;AAChB,eAAA;AAECyC,cAAAA,QAAAA,EAAAA,WAAWP,MAAAA;;;;;;;AAOnB;AA9DgBD,MAAAA,CAAAA,cAAAA,EAAAA,gBAAAA,CAAAA;AAAAA,OAAAA,CAAAA,gBAAAA,gBAAAA,CAAAA;ACAhB,IAAMgB,MAAAA,GAAS;EACdC,EAAAA,EAAI,SAAA;EACJhM,IAAAA,EAAM,SAAA;EACNiM,KAAAA,EAAO,SAAA;EACPC,KAAAA,EAAO,SAAA;EACPxI,MAAAA,EAAQ,SAAA;EACRyI,MAAAA,EAAQ;AACT,CAAA;AAEA,IAAMC,SAAAA,GAAY,oFAAA;AAClB,IAAMC,SAAAA,GAAY,0EAAA;AAElB,IAAMC,SAAAA,GAAiC;EACtC5G,MAAAA,EAAQ,CAAA;EACRC,OAAAA,EAAS,CAAA;AACTF,EAAAA,eAAAA,EAAiBsG,MAAAA,CAAOC,EAAAA;AACxBpF,EAAAA,KAAAA,EAAOmF,MAAAA,CAAO/L,IAAAA;EACd8E,UAAAA,EAAYsH,SAAAA;EACZG,mBAAAA,EAAqB,aAAA;EACrBC,mBAAAA,EAAqB;AACtB,CAAA;AAEA,IAAMC,cAAAA,GAAsC;EAC3CtG,KAAAA,EAAO,MAAA;EACPJ,QAAAA,EAAU,OAAA;EACVL,MAAAA,EAAQ,QAAA;AACRD,EAAAA,eAAAA,EAAiBsG,MAAAA,CAAOC;AACzB,CAAA;AAEA,IAAMU,YAAAA,GAAoC;EACzC/G,OAAAA,EAAS;AACV,CAAA;AAEA,IAAMgH,WAAAA,GAAmC;EACxChH,OAAAA,EAAS;AACV,CAAA;AAEA,IAAMiH,WAAAA,GAAmC;EACxCjH,OAAAA,EAAS,qBAAA;EACTb,UAAAA,EAAYsH,SAAAA;EACZvF,QAAAA,EAAU,MAAA;EACVC,UAAAA,EAAY,KAAA;AACZF,EAAAA,KAAAA,EAAOmF,MAAAA,CAAOI;AACf,CAAA;AAEA,IAAMU,OAAAA,GAA+B;EACpCrG,SAAAA,EAAW,CAAA,UAAA,EAAauF,OAAOrI,MAAM,CAAA,CAAA;EACrCoJ,WAAAA,EAAa,MAAA;EACbtB,YAAAA,EAAc,MAAA;EACduB,UAAAA,EAAY,MAAA;EACZrH,MAAAA,EAAQ,QAAA;EACRS,KAAAA,EAAO;AACR,CAAA;AAEA,IAAM6G,eAAAA,GAAuC;AAC5CpG,EAAAA,KAAAA,EAAOmF,MAAAA,CAAOG,KAAAA;EACd/E,cAAAA,EAAgB;AACjB,CAAA;AAEO,SAAS8F,eAAAA,CAAgB,EAC/BxL,KAAAA,GAAQ,OAAA,EACRyL,aACA3I,QAAAA,EACA4I,OAAAA,GAAU,4CAAA,EACY;AACtB,EAAA,4BACE1I,IAAAA,EAAAA;IAAKC,IAAAA,EAAK,IAAA;IAAK0I,GAAAA,EAAI,KAAA;;AACnB5I,sBAAAA,IAAAA,CAACI,IAAAA,EAAAA;;AACAD,0BAAAA,GAAAA,CAAC0I,MAAAA,EAAAA;YAAKC,OAAAA,EAAQ;;AACd3I,0BAAAA,GAAAA,CAAC0I,MAAAA,EAAAA;YAAKE,IAAAA,EAAK,UAAA;YAAWC,OAAAA,EAAQ;;AAC9B7I,0BAAAA,GAAAA,CAAC0I,MAAAA,EAAAA;YAAKI,SAAAA,EAAU,iBAAA;YAAkBD,OAAAA,EAAQ;;AAC1C7I,0BAAAA,GAAAA,CAAC0I,MAAAA,EAAAA;YAAKE,IAAAA,EAAK;;AACX5I,0BAAAA,GAAAA,CAAC0I,MAAAA,EAAAA;YAAKE,IAAAA,EAAK,kBAAA;YAAmBC,OAAAA,EAAQ;;AACtC7I,0BAAAA,GAAAA,CAAC0I,MAAAA,EAAAA;YAAKE,IAAAA,EAAK,cAAA;YAAeC,OAAAA,EAAQ;;AAClC7I,0BAAAA,GAAAA,CAAC0I,MAAAA,EAAAA;YAAKE,IAAAA,EAAK,yBAAA;YAA0BC,OAAAA,EAAQ;;AAC7C7I,0BAAAA,GAAAA,CAAClD,OAAAA,EAAAA;YAAOA,QAAAA,EAAAA;;AACRkD,0BAAAA,GAAAA,CAACE,IAAAA,EAAAA;YACAC,UAAAA,EAAW,OAAA;YACXC,kBAAAA,EAAoB;AAAC,cAAA,WAAA;AAAa,cAAA,OAAA;AAAS,cAAA;;YAC3C2I,OAAAA,EAAS;cACR9F,GAAAA,EAAK,kFAAA;cACL+F,MAAAA,EAAQ;AACT,aAAA;YACA3I,UAAAA,EAAY,GAAA;YACZC,SAAAA,EAAU;;AAEXN,0BAAAA,GAAAA,CAACE,IAAAA,EAAAA;YACAC,UAAAA,EAAW,OAAA;YACXC,kBAAAA,EAAoB;AAAC,cAAA,WAAA;AAAa,cAAA,OAAA;AAAS,cAAA;;YAC3C2I,OAAAA,EAAS;cACR9F,GAAAA,EAAK,kFAAA;cACL+F,MAAAA,EAAQ;AACT,aAAA;YACA3I,UAAAA,EAAY,GAAA;YACZC,SAAAA,EAAU;;AAEXN,0BAAAA,GAAAA,CAACa,OAAAA,EAAAA;YAAO,QAAA,EAAA;;AAEuDuG,iEAAAA,EAAAA,MAAAA,CAAOC,EAAE,CAAA;AACCD,2EAAAA,EAAAA,MAAAA,CAAOC,EAAE,CAAA;AACpBD,gEAAAA,EAAAA,MAAAA,CAAO/L,IAAI,CAAA;AACL+L,sEAAAA,EAAAA,MAAAA,CAAOE,KAAK,CAAA;AACZF,sEAAAA,EAAAA,MAAAA,CAAOG,KAAK,CAAA;;;;;AAGjFvH,sBAAAA,GAAAA,CAACiB,OAAAA,EAAAA;QAASsH,QAAAA,EAAAA;;AACVvI,sBAAAA,GAAAA,CAACY,IAAAA,EAAAA;QAAKC,KAAAA,EAAO8G,SAAAA;QAAWsB,SAAAA,EAAU,UAAA;AACjC,QAAA,QAAA,sBAAClC,OAAAA,EAAAA;UACAmC,IAAAA,EAAK,cAAA;UACL1H,KAAAA,EAAM,MAAA;UACN2H,WAAAA,EAAa,CAAA;UACbC,WAAAA,EAAa,CAAA;UACbrK,MAAAA,EAAQ,CAAA;UACR8B,KAAAA,EAAO;AAAEC,YAAAA,eAAAA,EAAiBsG,MAAAA,CAAOC,EAAAA;YAAI7F,KAAAA,EAAO;AAAO,WAAA;UACnDyH,SAAAA,EAAU,UAAA;AAEV,UAAA,QAAA,sBAACI,OAAAA,EAAAA;AACA,YAAA,QAAA,sBAACrC,IAAAA,EAAAA;AACA,cAAA,QAAA,sBAACC,IAAAA,EAAAA;gBAAGqC,KAAAA,EAAM,QAAA;gBAASzI,KAAAA,EAAO;AAAEC,kBAAAA,eAAAA,EAAiBsG,MAAAA,CAAOC;AAAG,iBAAA;AACtD,gBAAA,QAAA,uBAAClG,SAAAA,EAAAA;kBAAUN,KAAAA,EAAOiH,cAAAA;kBAAgBmB,SAAAA,EAAU,UAAA;;AAC3CjJ,oCAAAA,GAAAA,CAACkB,OAAAA,EAAAA;sBAAQL,KAAAA,EAAOmH,WAAAA;AACf,sBAAA,QAAA,sBAAC1G,GAAAA,EAAAA;wBACAC,GAAAA,EAAKiH,OAAAA;wBACL9G,GAAAA,EAAI,OAAA;wBACJF,KAAAA,EAAM,IAAA;wBACNC,MAAAA,EAAO,IAAA;wBACPZ,KAAAA,EAAO;0BACNc,OAAAA,EAAS,OAAA;0BACTH,KAAAA,EAAO,MAAA;0BACPC,MAAAA,EAAQ,MAAA;0BACR1C,MAAAA,EAAQ,CAAA;0BACRwK,OAAAA,EAAS,MAAA;0BACT/G,cAAAA,EAAgB;AACjB;;;AAGFxC,oCAAAA,GAAAA,CAACkB,OAAAA,EAAAA;sBAAQL,KAAAA,EAAOkH,YAAAA;AACf,sBAAA,QAAA,sBAACyB,IAAAA,EAAAA;wBAAG3I,KAAAA,EAAOqH;;;AAEZlI,oCAAAA,GAAAA,CAACkB,OAAAA,EAAAA;sBAAQL,KAAAA,EAAOkH,YAAAA;;;AAChB/H,oCAAAA,GAAAA,CAACkB,OAAAA,EAAAA;sBAAQL,KAAAA,EAAOkH,YAAAA;AACf,sBAAA,QAAA,sBAACyB,IAAAA,EAAAA;wBAAG3I,KAAAA,EAAOqH;;;AAEZlI,oCAAAA,GAAAA,CAACkB,OAAAA,EAAAA;sBAAQL,KAAAA,EAAOoH,WAAAA;AACf,sBAAA,QAAA,uBAACwB,GAAAA,EAAAA;wBACA5I,KAAAA,EAAO;0BACNE,MAAAA,EAAQ,CAAA;0BACRmB,QAAAA,EAAU,MAAA;0BACVC,UAAAA,EAAY,KAAA;AACZF,0BAAAA,KAAAA,EAAOmF,MAAAA,CAAOI,MAAAA;0BACdrH,UAAAA,EAAYsH;AACb,yBAAA;wBACAwB,SAAAA,EAAU,aAAA;;AACV,0BAAA,0CAAA;AACsC,0BAAA,GAAA;AACtCjJ,0CAAAA,GAAAA,CAAC0J,GAAAA,EAAAA;4BACAnH,IAAAA,EAAK,2BAAA;4BACL1B,KAAAA,EAAOwH,eAAAA;4BACPY,SAAAA,EAAU,aAAA;4BACV,QAAA,EAAA;;AAEI,0BAAA,GAAA;AAAI,0BAAA;;;;;;;;;;;;;AAYpB;AAlHgBX,MAAAA,CAAAA,eAAAA,EAAAA,iBAAAA,CAAAA;AAAAA,OAAAA,CAAAA,iBAAAA,iBAAAA,CAAAA;AAoHT,IAAMqB,YAAAA,GAAevC,MAAAA;AACrB,IAAMwC,eAAAA,GAAkBnC,SAAAA;AACxB,IAAMoC,eAAAA,GAAkBnC,SAAAA;AClLxB,SAASoC,WAAAA,CAAY,EAAEhN,KAAAA,EAAOiN,SAAAA,EAAWnK,UAAAA,EAA4B;AAC3E,EAAA,2BACE0I,eAAAA,EAAAA;AAAgBxL,IAAAA,KAAAA;AAAcyL,IAAAA,WAAAA,EAAawB,SAAAA,IAAajN,KAAAA;;;AAI3D;AANgBgN,MAAAA,CAAAA,WAAAA,EAAAA,aAAAA,CAAAA;AAAAA,OAAAA,CAAAA,aAAAA,aAAAA,CAAAA;ACGT,SAASE,QAAAA,CAAS,EAAEC,IAAAA,EAAMrK,QAAAA,EAAAA,EAAyB;AACzD,EAAA,MAAMsK,QAAAA,GAAW;AAChB1K,IAAAA,IAAAA,EAAMmF,WAAWhE,MAAAA,CAAOnB,IAAAA;AACxBD,IAAAA,OAAAA,EAASoF,WAAWhE,MAAAA,CAAOpB,OAAAA;AAC3BD,IAAAA,OAAAA,EAASqF,WAAWhE,MAAAA,CAAOrB,OAAAA;AAC3B2F,IAAAA,KAAAA,EAAON,WAAWhE,MAAAA,CAAOsE;AAC1B,GAAA;AAEA,EAAA,MAAMkF,OAAAA,GAAU;IACf3K,IAAAA,EAAM,QAAA;IACND,OAAAA,EAAS,QAAA;IACTD,OAAAA,EAAS,QAAA;IACT2F,KAAAA,EAAO;AACR,GAAA;AAEA,EAAA,MAAMnE,eAAAA,GAAkBoJ,SAASD,IAAAA,CAAAA;AACjC,EAAA,MAAMG,IAAAA,GAAOD,QAAQF,IAAAA,CAAAA;AAErB,EAAA,2BACE/I,OAAAA,EAAAA;IACAL,KAAAA,EAAO;AACNC,MAAAA,eAAAA,EAAiB,GAAGA,eAAAA,CAAAA,EAAAA,CAAAA;AACpB/B,MAAAA,MAAAA,EAAQ,CAAA,EAAG4F,UAAAA,CAAWkB,WAAW,CAAA,OAAA,EAAU/E,eAAAA,CAAAA,CAAAA;AAC3Cc,MAAAA,YAAAA,EAAc+C,UAAAA,CAAW/C,YAAAA;AACzBZ,MAAAA,OAAAA,EAAS2D,WAAWe,OAAAA,CAAQC,EAAAA;MAC5B5E,MAAAA,EAAQ,CAAA,EAAG4D,UAAAA,CAAWe,OAAAA,CAAQD,EAAE,CAAA,EAAA;AACjC,KAAA;AAEA,IAAA,QAAA,uBAACzD,IAAAA,EAAAA;MACAnB,KAAAA,EAAO;QACNE,MAAAA,EAAQ,CAAA;AACRkB,QAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB6G,QAAAA,QAAAA,EAAUyC,WAAWU,SAAAA,CAAUG;AAChC,OAAA;;AAEAxF,wBAAAA,GAAAA,CAACmH,MAAAA,EAAAA;UACAtG,KAAAA,EAAO;YACNoB,KAAAA,EAAOnB,eAAAA;AACPuJ,YAAAA,WAAAA,EAAa1F,WAAWe,OAAAA,CAAQH,EAAAA;YAChClF,UAAAA,EAAY;AACb,WAAA;UAEC+J,QAAAA,EAAAA;;AAEDxK,QAAAA;;;;AAIL;AAhDgBoK,MAAAA,CAAAA,QAAAA,EAAAA,UAAAA,CAAAA;AAAAA,OAAAA,CAAAA,UAAAA,UAAAA,CAAAA;ACLT,SAASM,KAAAA,CAAM,EAAEC,KAAAA,EAAAA,EAAmB;AAC1C,EAAA,2BACEvI,IAAAA,EAAAA;IACAnB,KAAAA,EAAO;MACNE,MAAAA,EAAQ,YAAA;MACRZ,UAAAA,EAAY0J,eAAAA;MACZ3H,QAAAA,EAAU,MAAA;MACVC,UAAAA,EAAY,CAAA;AACZF,MAAAA,KAAAA,EAAO0H,YAAAA,CAAapC,KAAAA;MACpBpD,aAAAA,EAAe,QAAA;MACfD,aAAAA,EAAe,WAAA;MACf7D,UAAAA,EAAY;AACb,KAAA;IAECkK,QAAAA,EAAAA;;AAGJ;AAjBgBD,MAAAA,CAAAA,KAAAA,EAAAA,OAAAA,CAAAA;AAAAA,OAAAA,CAAAA,OAAAA,OAAAA,CAAAA;ACGT,SAASE,SAAS,EAAE5K,QAAAA,EAAU6K,KAAK,CAAA,EAAGC,EAAAA,GAAK,IAAA,EAAmB;AACpE,EAAA,2BACE1I,IAAAA,EAAAA;IACAnB,KAAAA,EAAO;MACNE,MAAAA,EAAQ,CAAA,EAAG0J,EAAAA,CAAAA,KAAAA,EAAUC,EAAAA,CAAAA,IAAAA,CAAAA;MACrBvK,UAAAA,EAAYyJ,eAAAA;MACZ1H,QAAAA,EAAU,MAAA;MACVC,UAAAA,EAAY,GAAA;AACZF,MAAAA,KAAAA,EAAO0H,YAAAA,CAAarC,KAAAA;MACpBjH,UAAAA,EAAY;AACb,KAAA;;;AAKH;AAfgBmK,MAAAA,CAAAA,QAAAA,EAAAA,UAAAA,CAAAA;AAAAA,OAAAA,CAAAA,UAAAA,UAAAA,CAAAA;ACIT,SAASG,UAAU,EAAEC,IAAAA,EAAMC,WAAW,KAAA,EAAOC,UAAAA,EAAYC,UAAAA,EAA0B;AACzF,EAAA,4BACE7J,OAAAA,EAAAA;IACAL,KAAAA,EAAO;AACNC,MAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAO9B,OAAAA;AACnCE,MAAAA,MAAAA,EAAQ,GAAG4F,UAAAA,CAAWkB,WAAW,CAAA,OAAA,EAAUlB,UAAAA,CAAWhE,OAAO5B,MAAM,CAAA,CAAA;AACnE6C,MAAAA,YAAAA,EAAc+C,UAAAA,CAAW/C,YAAAA;AACzBZ,MAAAA,OAAAA,EAAS2D,WAAWe,OAAAA,CAAQC,EAAAA;MAC5B5E,MAAAA,EAAQ,CAAA,EAAG4D,UAAAA,CAAWe,OAAAA,CAAQD,EAAE,CAAA,EAAA;AACjC,KAAA;;MAECoF,QAAAA,IAAYC,UAAAA,yBACXE,KAAAA,EAAAA;QACAnK,KAAAA,EAAO;AACNQ,UAAAA,YAAAA,EAAcsD,WAAWe,OAAAA,CAAQH,EAAAA;UACjC5D,OAAAA,EAAS,MAAA;UACTsJ,cAAAA,EAAgB,eAAA;UAChBC,UAAAA,EAAY;AACb,SAAA;;AAEAlL,0BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,CAAA;AACRmB,cAAAA,QAAAA,EAAUyC,WAAWU,SAAAA,CAAUC,EAAAA;AAC/BrD,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOvB,SAAAA;AACzBe,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,aAAA;sBAEC2F,QAAAA,IAAY;;AAEd/K,0BAAAA,GAAAA,CAACsC,IAAAA,EAAAA;YACAC,IAAAA,EAAMuI,UAAAA;YACNjK,KAAAA,EAAO;AACNqB,cAAAA,QAAAA,EAAUyC,WAAWU,SAAAA,CAAUC,EAAAA;AAC/BrD,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B,OAAAA;cACzBwD,cAAAA,EAAgB;AACjB,aAAA;YACA,QAAA,EAAA;;;;AAKHxC,sBAAAA,GAAAA,CAACgC,IAAAA,EAAAA;QACAnB,KAAAA,EAAO;AACNV,UAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME,IAAAA;AAC7BlD,UAAAA,QAAAA,EAAUyC,WAAWU,SAAAA,CAAUE,EAAAA;AAC/BtD,UAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;UACzB8P,UAAAA,EAAY,UAAA;UACZC,SAAAA,EAAW,WAAA;UACXrK,MAAAA,EAAQ;AACT,SAAA;QAEC6J,QAAAA,EAAAA;;;;AAIL;AAxDgBD,MAAAA,CAAAA,SAAAA,EAAAA,WAAAA,CAAAA;AAAAA,OAAAA,CAAAA,WAAAA,WAAAA,CAAAA;ACNT,SAASU,QAAAA,CAAS,EAAEzL,QAAAA,EAAAA,EAAyB;AACnD,EAAA,2BACE6D,OAAAA,EAAAA;IACA6H,EAAAA,EAAG,IAAA;IACHzK,KAAAA,EAAO;MACNE,MAAAA,EAAQ,YAAA;MACRZ,UAAAA,EAAYyJ,eAAAA;MACZ1H,QAAAA,EAAU,MAAA;MACVC,UAAAA,EAAY,MAAA;MACZ9B,UAAAA,EAAY,GAAA;AACZ4B,MAAAA,KAAAA,EAAO0H,YAAAA,CAAatO,IAAAA;MACpB0G,SAAAA,EAAW,MAAA;MACXoC,aAAAA,EAAe;AAChB,KAAA;;;AAKH;AAlBgBkH,MAAAA,CAAAA,QAAAA,EAAAA,UAAAA,CAAAA;AAAAA,OAAAA,CAAAA,UAAAA,UAAAA,CAAAA;ACIT,SAAS3I,cAAAA,CAAc,EAAEH,IAAAA,EAAM3C,QAAAA,EAAAA,EAA8B;AACnE,EAAA,2BACE+C,MAAAA,EAAAA;AACAJ,IAAAA,IAAAA;IACA1B,KAAAA,EAAO;AACNC,MAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAO3B,OAAAA;AACnCiD,MAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO/B,UAAAA;AACzBoC,MAAAA,OAAAA,EAAS,GAAG2D,UAAAA,CAAWe,OAAAA,CAAQC,EAAE,CAAA,CAAA,EAAIhB,UAAAA,CAAWe,QAAQE,EAAE,CAAA,CAAA;AAC1DhE,MAAAA,YAAAA,EAAc+C,UAAAA,CAAW/C,YAAAA;MACzBY,cAAAA,EAAgB,MAAA;MAChBnC,UAAAA,EAAY,GAAA;AACZ6B,MAAAA,QAAAA,EAAUyC,WAAWU,SAAAA,CAAUG,IAAAA;MAC/B7D,OAAAA,EAAS,cAAA;MACTZ,MAAAA,EAAQ,CAAA,EAAG4D,UAAAA,CAAWe,OAAAA,CAAQD,EAAE,CAAA,EAAA,CAAA;MAChC1G,MAAAA,EAAQ,MAAA;MACRwM,MAAAA,EAAQ;AACT,KAAA;;;AAKH;AArBgB7I,MAAAA,CAAAA,cAAAA,EAAAA,eAAAA,CAAAA;AAAAA,OAAAA,CAAAA,gBAAAA,eAAAA,CAAAA;ACCT,SAAS8I,QAAQ,EAAEjB,KAAAA,EAAOkB,KAAAA,EAAOC,IAAAA,EAAMtB,MAAAA,EAAoB;AACjE,EAAA,2BACElJ,OAAAA,EAAAA;IACAL,KAAAA,EAAO;AACNgG,MAAAA,YAAAA,EAAc,GAAGlC,UAAAA,CAAWkB,WAAW,CAAA,OAAA,EAAUlB,UAAAA,CAAWhE,OAAOqE,OAAO,CAAA,CAAA;MAC1EhE,OAAAA,EAAS,CAAA,EAAG2D,UAAAA,CAAWe,OAAAA,CAAQH,EAAE,CAAA,EAAA;AAClC,KAAA;AAEA,IAAA,QAAA,sBAACwB,OAAAA,EAAAA;MAAMvF,KAAAA,EAAM,MAAA;MAAOX,KAAAA,EAAO;QAAEW,KAAAA,EAAO;AAAO,OAAA;AAC1C,MAAA,QAAA,uBAACwF,IAAAA,EAAAA;;AACAhH,0BAAAA,GAAAA,CAACiH,IAAAA,EAAAA;YAAGpG,KAAAA,EAAO;cAAEW,KAAAA,EAAO,KAAA;cAAO0F,aAAAA,EAAe;AAAS,aAAA;AAClD,YAAA,QAAA,uBAAClF,IAAAA,EAAAA;cACAnB,KAAAA,EAAO;gBACNE,MAAAA,EAAQ,CAAA;AACRmB,gBAAAA,QAAAA,EAAUyC,WAAWU,SAAAA,CAAUE,EAAAA;AAC/BtD,gBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,gBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,eAAA;;AAECgF,gBAAAA,IAAAA,wBAASjD,MAAAA,EAAAA;kBAAKtG,KAAAA,EAAO;oBAAEwJ,WAAAA,EAAa;AAAM,mBAAA;kBAAID,QAAAA,EAAAA;;AAC9CG,gBAAAA;;;;AAGHvK,0BAAAA,GAAAA,CAACiH,IAAAA,EAAAA;YACApG,KAAAA,EAAO;cACNW,KAAAA,EAAO,KAAA;cACPO,SAAAA,EAAW,OAAA;cACXmF,aAAAA,EAAe;AAChB,aAAA;AAEA,YAAA,QAAA,uBAAClF,IAAAA,EAAAA;cACAnB,KAAAA,EAAO;gBACNE,MAAAA,EAAQ,CAAA;AACRmB,gBAAAA,QAAAA,EAAUyC,WAAWU,SAAAA,CAAUI,EAAAA;AAC/BxD,gBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B,OAAAA;AACzBmB,gBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME,IAAAA;gBAC7B/E,UAAAA,EAAY;AACb,eAAA;;AAECoL,gBAAAA,KAAAA;AACAC,gBAAAA,IAAAA,wBACCvE,MAAAA,EAAAA;kBACAtG,KAAAA,EAAO;AACNqB,oBAAAA,QAAAA,EAAUyC,WAAWU,SAAAA,CAAUE,EAAAA;AAC/BtD,oBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOvB,SAAAA;AACzBuM,oBAAAA,UAAAA,EAAYhH,WAAWe,OAAAA,CAAQJ;AAChC,mBAAA;kBAECoG,QAAAA,EAAAA;;;;;;;;;AASV;AAzDgBF,MAAAA,CAAAA,OAAAA,EAAAA,SAAAA,CAAAA;AAAAA,OAAAA,CAAAA,SAAAA,SAAAA,CAAAA;ACJhB,IAAMI,WAAAA,GAAc,SAAA;AAEpB,IAAMC,SAAAA,GAAiC;EACtCrK,KAAAA,EAAO,MAAA;EACPT,MAAAA,EAAQ,YAAA;EACRD,eAAAA,EAAiB8K,WAAAA;EACjBhK,YAAAA,EAAc,KAAA;EACd7C,MAAAA,EAAQ,CAAA,UAAA,EAAa4K,aAAa5K,MAAM,CAAA;AACzC,CAAA;AAEA,IAAM+M,SAAAA,GAAiC;EACtC9K,OAAAA,EAAS,WAAA;EACTb,UAAAA,EAAY0J,eAAAA;EACZ3H,QAAAA,EAAU,MAAA;EACVC,UAAAA,EAAY,GAAA;AACZF,EAAAA,KAAAA,EAAO0H,YAAAA,CAAapC,KAAAA;EACpB4D,UAAAA,EAAY;AACb,CAAA;AAEO,SAASY,aAAAA,CAAc,EAAEnM,QAAAA,EAAU2L,MAAAA,GAAS,OAAA,EAA2B;AAC7E,EAAA,2BACErK,OAAAA,EAAAA;IAAQL,KAAAA,EAAOgL,SAAAA;AACf,IAAA,QAAA,uBAAC7J,IAAAA,EAAAA;MAAKnB,KAAAA,EAAOiL,SAAAA;;AACXlM,QAAAA,QAAAA;AACA2L,QAAAA,MAAAA,uBAAUpE,MAAAA,EAAAA;UAAKtG,KAAAA,EAAO;AAAEoB,YAAAA,KAAAA,EAAO0H,YAAAA,CAAapC;AAAM,WAAA;UAAG,QAAA,EAAA;AAAW,SAAA,CAAA,GAAA;;;;AAIrE;AATgBwE,MAAAA,CAAAA,aAAAA,EAAAA,eAAAA,CAAAA;AAAAA,OAAAA,CAAAA,eAAAA,eAAAA,CAAAA;ACpBwBjJ,EAAE3I,MAAAA,CAAO;EAChDsK,eAAAA,EAAiB3B,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA,EAAAA;AAC5BC,EAAAA,gBAAAA,EAAkBJ,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMC,QAAAA;AACpC,CAAA;AAKsCnJ,EAAE3I,MAAAA,CAAO;EAC9C4I,QAAAA,EAAUD,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA,EAAAA;AACrBC,EAAAA,gBAAAA,EAAkBJ,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMC,QAAAA,EAAAA;AACnC5I,EAAAA,SAAAA,EAAWP,EAAEE,MAAAA,EAAAA;AACbO,EAAAA,SAAAA,EAAWT,EAAEE,MAAAA;AACd,CAAA;AAK0CF,EAAE3I,MAAAA,CAAO;EAClDmK,QAAAA,EAAUxB,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA,EAAAA;AACrBC,EAAAA,gBAAAA,EAAkBJ,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMC,QAAAA,EAAAA;AACnC1H,EAAAA,aAAAA,EAAezB,EAAE3I,MAAAA,CAAO;AACvBkJ,IAAAA,SAAAA,EAAWP,EAAEE,MAAAA,EAAAA;IACbc,QAAAA,EAAUhB,CAAAA,CAAEE,MAAAA,EAAAA,CAASM,QAAAA;AACtB,GAAA;AACD,CAAA;AAK2CR,EAAE3I,MAAAA,CAAO;AACnD0J,EAAAA,UAAAA,EAAYf,EAAEE,MAAAA,EAAAA;AACdc,EAAAA,QAAAA,EAAUhB,EAAEE,MAAAA,EAAAA;AACZK,EAAAA,SAAAA,EAAWP,EAAEE,MAAAA,EAAAA;AACb1F,EAAAA,SAAAA,EAAWwF,EAAEoJ,IAAAA,EAAAA;EACbnI,UAAAA,EAAYjB,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA,EAAAA;EACvBe,OAAAA,EAASlB,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA;AACrB,CAAA;AAKoCH,EAAE3I,MAAAA,CAAO;AAC5CkC,EAAAA,SAAAA,EAAWyG,EAAEE,MAAAA,EAAAA;AACb1G,EAAAA,QAAAA,EAAUwG,EAAEE,MAAAA,EAAAA;AACZzG,EAAAA,YAAAA,EAAcuG,CAAAA,CAAEqJ,KAAAA,CAAMrJ,CAAAA,CAAEE,MAAAA,EAAM,CAAA;EAC9BxG,YAAAA,EAAcsG,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA,EAAAA;EACzBxG,OAAAA,EAASqG,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA,EAAAA;EACpBvG,WAAAA,EAAaoG,CAAAA,CAAEE,MAAAA,EAAAA,CAASM,QAAAA,EAAAA;AACxB3G,EAAAA,aAAAA,EAAemG,EAAEK,MAAAA,EAAAA,CAAS6I,KAAAA,CAAMI,WAAAA,GAAc9I,QAAAA;AAC/C,CAAA;AAK6CR,EAAE3I,MAAAA,CAAO;AACrDkC,EAAAA,SAAAA,EAAWyG,EAAEE,MAAAA,EAAAA;AACbqJ,EAAAA,OAAAA,EAASvJ,EAAEE,MAAAA,EAAAA;AACXsJ,EAAAA,OAAAA,EAASxJ,EAAEE,MAAAA,EAAAA;AACXuJ,EAAAA,YAAAA,EAAczJ,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMI,WAAAA,EAAAA;AAC/BI,EAAAA,WAAAA,EAAa1J,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMI,WAAAA,EAAAA;EAC9BK,YAAAA,EAAc3J,CAAAA,CAAEE,MAAAA,EAAAA,CAASM,QAAAA,EAAAA;AACzBoJ,EAAAA,gBAAAA,EAAkB5J,EAAEK,MAAAA,EAAAA,CAAS6I,KAAAA,CAAMI,WAAAA,GAAc9I,QAAAA,EAAAA;EACjDqJ,aAAAA,EAAe7J,CAAAA,CAAEqJ,KAAAA,CAChBrJ,CAAAA,CAAE3I,MAAAA,CAAO;AACRiQ,IAAAA,IAAAA,EAAMtH,EAAEE,MAAAA,EAAAA;AACR4F,IAAAA,IAAAA,EAAM9F,EAAEE,MAAAA,EAAAA;AACR4J,IAAAA,WAAAA,EAAa9J,EAAEE,MAAAA;AAChB,GAAA,CAAA,CAAA;EAEDxG,YAAAA,EAAcsG,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA;AAC1B,CAAA;AAKyCH,EAAE3I,MAAAA,CAAO;AACjDkC,EAAAA,SAAAA,EAAWyG,EAAEE,MAAAA,EAAAA;AACb6J,EAAAA,aAAAA,EAAe/J,EAAEE,MAAAA,EAAAA;AACjB8J,EAAAA,WAAAA,EAAahK,EAAEE,MAAAA,EAAAA;AACf+J,EAAAA,KAAAA,EAAOjK,EAAE3I,MAAAA,CAAO;AACf6S,IAAAA,cAAAA,EAAgBlK,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMI,WAAAA,EAAAA;AACjCa,IAAAA,WAAAA,EAAanK,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMI,WAAAA,EAAAA;AAC9Bc,IAAAA,iBAAAA,EAAmBpK,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMI,WAAAA,EAAAA;AACpCe,IAAAA,cAAAA,EAAgBrK,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMI,WAAAA,EAAAA;AACjCgB,IAAAA,aAAAA,EAAetK,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMI,WAAAA,EAAAA;AAChCiB,IAAAA,mBAAAA,EAAqBvK,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMI,WAAAA,EAAAA;IACtCkB,wBAAAA,EAA0BxK,CAAAA,CAAEK,MAAAA,EAAAA,CAASG,QAAAA;AACtC,GAAA,CAAA;EACAiK,UAAAA,EAAYzK,CAAAA,CAAEqJ,KAAAA,CACbrJ,CAAAA,CAAE3I,MAAAA,CAAO;AACRiQ,IAAAA,IAAAA,EAAMtH,EAAEE,MAAAA,EAAAA;AACRlG,IAAAA,KAAAA,EAAOgG,EAAEE,MAAAA,EAAAA;AACT4J,IAAAA,WAAAA,EAAa9J,EAAEE,MAAAA;AAChB,GAAA,CAAA,CAAA;EAEDxG,YAAAA,EAAcsG,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA;AAC1B,CAAA;AAKwCH,EAAE3I,MAAAA,CAAO;AAChDqT,EAAAA,IAAAA,EAAM1K,EAAE2K,IAAAA,CAAK;AAAC,IAAA,MAAA;AAAQ,IAAA;AAAM,GAAA,CAAA;AAC5BC,EAAAA,cAAAA,EAAgB5K,CAAAA,CAAEE,MAAAA,EAAAA,CAAS2K,GAAAA,CAAI,CAAA,CAAA;AAC/BC,EAAAA,QAAAA,EAAU9K,CAAAA,CAAEE,MAAAA,EAAAA,CAAS2K,GAAAA,CAAI,CAAA,CAAA;AACzBE,EAAAA,KAAAA,EAAO/K,EAAEK,MAAAA,EAAAA,CAASwK,IAAI,CAAA,CAAA,CAAGG,IAAI,CAAA,CAAA;AAC7BC,EAAAA,cAAAA,EAAgBjL,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMI,WAAAA,EAAAA;AACjC4B,EAAAA,SAAAA,EAAWlL,EAAE2K,IAAAA,CAAK;AAAC,IAAA,KAAA;AAAO,IAAA,QAAA;AAAU,IAAA,MAAA;AAAQ,IAAA;AAAW,GAAA,CAAA;AACvD5P,EAAAA,SAAAA,EAAWiF,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA,GAAMK,QAAAA,EAAAA;AAC5BvF,EAAAA,WAAAA,EAAa+E,EAAEE,MAAAA,EAAAA,CAAS2K,GAAAA,CAAI,CAAA,EAAGrK,QAAAA;AAChC,CAAA;AAK2CR,EAAE3I,MAAAA,CAAO;EACnDuD,MAAAA,EAAQoF,CAAAA,CAAEK,MAAAA,EAAAA,CAAS8I,QAAAA,EAAAA;AACnBtO,EAAAA,QAAAA,EAAUmF,EAAEE,MAAAA,EAAAA;AACZkJ,EAAAA,IAAAA,EAAMpJ,EAAEoJ,IAAAA,EAAAA;EACR+B,UAAAA,EAAYnL,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA,EAAAA;AACvB3G,EAAAA,QAAAA,EAAUwG,EAAEE,MAAAA;AACb,CAAA;AAKqCF,EAAE3I,MAAAA,CAAO;AAC7CkC,EAAAA,SAAAA,EAAWyG,EAAEE,MAAAA,EAAAA;AACbkL,EAAAA,cAAAA,EAAgBpL,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMC,QAAAA,EAAAA;AACjCkC,EAAAA,WAAAA,EAAarL,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMI,WAAAA,EAAAA;AAC9BgC,EAAAA,gBAAAA,EAAkBtL,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMI,WAAAA,EAAAA;AACnCiC,EAAAA,WAAAA,EAAavL,EAAEE,MAAAA,EAAAA;AACfsL,EAAAA,WAAAA,EAAaxL,EAAEE,MAAAA,EAAAA;EACfuL,cAAAA,EAAgBzL,CAAAA,CAAEE,MAAAA,EAAAA,CAASM,QAAAA,EAAAA;EAC3B9G,YAAAA,EAAcsG,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA,EAAAA;AACzBuL,EAAAA,eAAAA,EAAiB1L,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA,GAAMK,QAAAA;AACnC,CAAA;AAKyCR,EAAE3I,MAAAA,CAAO;AACjDkC,EAAAA,SAAAA,EAAWyG,EAAEE,MAAAA,EAAAA;AACbyL,EAAAA,UAAAA,EAAY3L,EAAEE,MAAAA,EAAAA;EACd0L,YAAAA,EAAc5L,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA,EAAAA;EACzBxG,OAAAA,EAASqG,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA,EAAAA;EACpBzG,YAAAA,EAAcsG,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA;AAC1B,CAAA;AAKyCH,EAAE3I,MAAAA,CAAO;AACjDkC,EAAAA,SAAAA,EAAWyG,EAAEE,MAAAA,EAAAA;AACb2L,EAAAA,WAAAA,EAAa7L,EAAEE,MAAAA,EAAAA;AACf4L,EAAAA,aAAAA,EAAe9L,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMI,WAAAA,EAAAA;EAChCK,YAAAA,EAAc3J,CAAAA,CAAEE,MAAAA,EAAAA,CAASM,QAAAA,EAAAA;AACzBoJ,EAAAA,gBAAAA,EAAkB5J,EAAEK,MAAAA,EAAAA,CAAS6I,KAAAA,CAAMI,WAAAA,GAAc9I,QAAAA,EAAAA;AACjDuL,EAAAA,iBAAAA,EAAmB/L,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMI,WAAAA,EAAAA;AACpC0C,EAAAA,iBAAAA,EAAmBhM,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMI,WAAAA,EAAAA;AACpC2C,EAAAA,UAAAA,EAAYjM,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMC,QAAAA,EAAAA;EAC7B+C,mBAAAA,EAAqBlM,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA,EAAAA;AAChCgM,EAAAA,WAAAA,EAAanM,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA,GAAMK,QAAAA;AAC/B,CAAA;AAKsCR,EAAE3I,MAAAA,CAAO;AAC9CkC,EAAAA,SAAAA,EAAWyG,EAAEE,MAAAA,EAAAA;AACbkM,EAAAA,cAAAA,EAAgBpM,EAAEE,MAAAA,EAAAA;AAClBmM,EAAAA,YAAAA,EAAcrM,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMC,QAAAA,EAAAA;AAC/BmD,EAAAA,aAAAA,EAAetM,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMI,WAAAA,EAAAA;AAChCiD,EAAAA,qBAAAA,EAAuBvM,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMI,WAAAA,EAAAA;EACxC1P,WAAAA,EAAaoG,CAAAA,CAAEE,MAAAA,EAAAA,CAASM,QAAAA,EAAAA;AACxB3G,EAAAA,aAAAA,EAAemG,EAAEK,MAAAA,EAAAA,CAAS6I,KAAAA,CAAMI,WAAAA,GAAc9I,QAAAA,EAAAA;EAC9C9G,YAAAA,EAAcsG,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA,EAAAA;EACzByL,YAAAA,EAAc5L,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA,EAAAA;EACzBqM,WAAAA,EAAaxM,CAAAA,CAAEE,MAAAA,EAAAA,CAASC,GAAAA;AACzB,CAAA;AAKO,IAAMsM,yBAAAA,GAA4BzM,EAAE3I,MAAAA,CAAO;EACjD2B,KAAAA,EAAOgH,CAAAA,CAAEE,MAAAA,EAAAA,CAASlH,KAAAA,EAAAA;AAClB8O,EAAAA,IAAAA,EAAM9H,CAAAA,CAAEE,MAAAA,EAAAA,CAAS2K,GAAAA,CAAI,CAAA,CAAA;AACrB6B,EAAAA,MAAAA,EAAQ1M,CAAAA,CAAEK,MAAAA,EAAAA,CAAS6I,GAAAA,GAAMC,QAAAA;AAC1B,CAAA,CAAA;AC3LO,SAASwD,YAAAA,CAAa,EAAE3T,KAAAA,EAAO8O,IAAAA,EAAM4E,QAAAA,EAA6B;AACxE,EAAA,MAAME,aAAAA,GAAgB,8BAA8B9E,IAAAA,CAAAA,CAAAA;AACpD,EAAA,MAAMnO,OAAAA,GAAU,oCAAA;AAEhB,EAAA,4BACEqN,WAAAA,EAAAA;IACAhN,KAAAA,EAAM,wDAAA;IACNiN,SAAAA,EAAW,CAAA,0CAAA,EAA6CyF,MAAAA,CAAAA,EAAAA,EAAW5E,IAAAA,CAAAA,CAAAA;;AAEnE5K,sBAAAA,GAAAA,CAACoG,cAAAA,EAAAA;QAAeC,MAAAA,EAAO;;AAEvBxG,sBAAAA,IAAAA,CAACqB,OAAAA,EAAAA;QAAQL,KAAAA,EAAO;UAAEG,OAAAA,EAAS,WAAA;AAAaF,UAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAO/B;AAAW,SAAA;;AACrFoB,0BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;YACA5C,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,KAAA;AACZ4B,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B,OAAAA;AACzBmB,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME,IAAAA;cAC7BrD,SAAAA,EAAW;AACZ,aAAA;YACA,QAAA,EAAA;;AAIDlC,0BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;;AACA,cAAA,iDAAA;AACgDqK,cAAAA,MAAAA;AAAO,cAAA,6CAAA;AAA4C,cAAA,GAAA;AACnGxP,8BAAAA,GAAAA,CAACsC,IAAAA,EAAAA;gBAAKC,IAAAA,EAAK,mBAAA;gBAAoB1B,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B,OAAAA;kBAASwD,cAAAA,EAAgB;AAAO,iBAAA;gBAAG,QAAA,EAAA;;AAE7F,cAAA;;;AAKRxC,0BAAAA,GAAAA,CAAC2K,SAAAA,EAAAA;AAAUC,YAAAA;;AAGX5K,0BAAAA,GAAAA,CAACkB,OAAAA,EAAAA;YACAL,KAAAA,EAAO;cACNkB,SAAAA,EAAW,QAAA;cACXhB,MAAAA,EAAQ,cAAA;AACRD,cAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAO/B;AACpC,aAAA;AAEA,YAAA,QAAA,sBAAC8D,cAAAA,EAAAA;cAAcH,IAAAA,EAAMmN,aAAAA;cAAe,QAAA,EAAA;;;AAIrC7P,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YACAL,KAAAA,EAAO;cACNE,MAAAA,EAAQ,GAAA;cACRC,OAAAA,EAAS,MAAA;AACTF,cAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOkE,aAAAA;cACnC9F,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO5B,MAAM,CAAA,CAAA;cAC7C6C,YAAAA,EAAc;AACf,aAAA;;AAEA5B,8BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;gBACA5C,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACV7B,UAAAA,EAAY,KAAA;AACZ4B,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAIDvF,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;;AACA,kBAAA,2CAAA;AAC0C,kBAAA,GAAA;AAC1CnF,kCAAAA,GAAAA,CAAC4K,MAAAA,EAAAA;oBAAK/J,KAAAA,EAAO;AAAEoB,sBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B,OAAAA;AAASmB,sBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAAK,qBAAA;oBAAG,QAAA,EAAA;;AAE9E,kBAAA,GAAA;AAAI,kBAAA;;;AAIbpF,8BAAAA,GAAAA,CAACkB,OAAAA,EAAAA;gBACAL,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRC,OAAAA,EAAS,WAAA;AACTF,kBAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAO9B,OAAAA;kBACnCE,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO5B,MAAM,CAAA,CAAA;kBAC7C6C,YAAAA,EAAc;AACf,iBAAA;AAEA,gBAAA,QAAA,sBAACI,IAAAA,EAAAA;kBACAnB,KAAAA,EAAO;oBACNE,MAAAA,EAAQ,CAAA;oBACRmB,QAAAA,EAAU,MAAA;oBACVC,UAAAA,EAAY,MAAA;AACZF,oBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B,OAAAA;AACzBmB,oBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,mBAAA;kBACA,QAAA,EAAA;;;AAKFpF,8BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,CAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;AAEA,gBAAA,QAAA,sBAAC7C,IAAAA,EAAAA;kBAAKC,IAAAA,EAAM9F,OAAAA;kBAASoE,KAAAA,EAAO;AAAEoB,oBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B,OAAAA;oBAASwD,cAAAA,EAAgB;AAAO,mBAAA;kBAAG,QAAA,EAAA;;;;;;;sBAO7FxC,GAAAA,CAACgG,UAAAA,EAAAA,EAAAA;;;AAGJ;AAtIgByJ,MAAAA,CAAAA,YAAAA,EAAAA,cAAAA,CAAAA;AAAAA,OAAAA,CAAAA,cAAAA,cAAAA,CAAAA;AAwIT,IAAME,oBAAAA,GAA2D;EACvExT,EAAAA,EAAI,uBAAA;EACJH,QAAAA,EAAU,SAAA;AACVb,EAAAA,OAAAA,kBAAAA,OAAAA,CAAAA,MAAe,wDAAA,EAAN,SAAA,CAAA;EACTyU,SAAAA,EAAWH,YAAAA;EACX7L,YAAAA,EAAc;IACb9H,KAAAA,EAAO,qBAAA;IACP8O,IAAAA,EAAM,UAAA;IACN4E,MAAAA,EAAQ;AACT,GAAA;EACAK,MAAAA,EAAQN;AACT,CAAA;AC/IA,IAAMO,gBAAAA,GAAN,MAAMA,iBAAAA,CAAAA;AAAAA,EAAAA;;;EAAN;;;;AAESC,EAAAA,SAAAA,uBAAgBC,GAAAA,EAAAA;;;;AAKxBC,EAAAA,QAAAA,CAAmB/T,QAAAA,EAAyC;AAC3D,IAAA,IAAI,IAAA,CAAK6T,SAAAA,CAAUG,GAAAA,CAAIhU,QAAAA,CAASC,EAAE,CAAA,EAAG;AAGrC,IAAA,IAAA,CAAK4T,SAAAA,CAAUI,GAAAA,CAAIjU,QAAAA,CAASC,EAAAA,EAAID,QAAAA,CAAAA;AACjC,EAAA;;;;;AAMArB,EAAAA,GAAAA,CAA+BsB,EAAAA,EAAuC;AACrE,IAAA,OAAO,IAAA,CAAK4T,SAAAA,CAAUlV,GAAAA,CAAIsB,EAAAA,CAAAA;AAC3B,EAAA;;;;AAKA+T,EAAAA,GAAAA,CAAI/T,EAAAA,EAA8B;AACjC,IAAA,OAAO,IAAA,CAAK4T,SAAAA,CAAUG,GAAAA,CAAI/T,EAAAA,CAAAA;AAC3B,EAAA;;;;EAKAiU,IAAAA,GAA2B;AAC1B,IAAA,OAAOC,KAAAA,CAAMpV,KAAK,IAAA,CAAK8U,SAAAA,CAAUO,QAAM,CAAA,CAAIC,GAAAA,CAAI,CAACrU,QAAAA,MAAc;AAC7DC,MAAAA,EAAAA,EAAID,QAAAA,CAASC,EAAAA;AACbH,MAAAA,QAAAA,EAAUE,QAAAA,CAASF,QAAAA;MACnB4Q,WAAAA,EAAa,CAAA,EAAG1Q,SAASF,QAAQ,CAAA,eAAA,CAAA;MACjCwU,UAAAA,EAAY,CAAA,eAAA,EAAkBtU,SAASC,EAAE,CAAA;AAC1C,KAAA,CAAA,CAAA;AACD,EAAA;;;;AAKAsU,EAAAA,cAAAA,CAAezU,QAAAA,EAA6C;AAC3D,IAAA,OAAO,IAAA,CAAKoU,MAAAA,CAAOM,MAAAA,CAAO,CAAChI,IAAAA,KAASA,IAAAA,CAAK1M,aAAaA,QAAAA,CAAAA;AACvD,EAAA;;;;AAKA2U,EAAAA,QAAAA,CAASxU,EAAAA,EAA8B;AACtC,IAAA,OAAO,IAAA,CAAK+T,IAAI/T,EAAAA,CAAAA;AACjB,EAAA;;;;AAKA,EAAA,IAAIyU,IAAAA,GAAe;AAClB,IAAA,OAAO,KAAKb,SAAAA,CAAUa,IAAAA;AACvB,EAAA;AACD,CAAA;AAGO,IAAMC,gBAAAA,GAAmB,IAAIf,gBAAAA,EAAAA;AASpCe,gBAAAA,CAAiBZ,SAASN,oBAAAA,CAAAA;AvBrF1B,SAASvV,gBAAAA,GAAAA;AACR,EAAA,MAAMC,MAAAA,GAASC,QAAQC,GAAAA,CAAIC,cAAAA;AAC3B,EAAA,IAAI,CAACH,MAAAA,EAAQ;AACZ,IAAA,MAAM,IAAII,MAAM,iDAAA,CAAA;AACjB,EAAA;AACA,EAAA,OAAO,IAAIC,OAAOL,MAAAA,CAAAA;AACnB;AANSD,MAAAA,CAAAA,gBAAAA,EAAAA,iBAAAA,CAAAA;AAAAA,OAAAA,CAAAA,kBAAAA,iBAAAA,CAAAA;AAQT,IAAIO,QAAAA;AAEkB,IAAIC,KAAAA,CAAM,EAAA,EAAc;AAC7CC,EAAAA,GAAAA,CAAIC,SAASC,IAAAA,EAAI;AAChB,IAAA,IAAI,CAACJ,QAAAA,EAAS;AACbA,MAAAA,WAAUP,gBAAAA,EAAAA;AACX,IAAA;AACA,IAAA,OAAQO,SAAwDI,IAAAA,CAAAA;AACjE,EAAA;AACD,CAAA;AAEA,eAAsBC,WAAU,EAC/BC,IAAAA,EACAC,IACAC,OAAAA,EACAC,IAAAA,EACAC,MAAAA,EAOA;AACA,EAAA,MAAMC,SAASlB,gBAAAA,EAAAA;AACf,EAAA,OAAOkB,MAAAA,CAAOC,OAAOC,IAAAA,CAAK;AACzBP,IAAAA,IAAAA;AACAC,IAAAA,EAAAA;AACAC,IAAAA,OAAAA;AACAC,IAAAA,IAAAA;AACAC,IAAAA;AACD,GAAA,CAAA;AACD;AArBsBL,MAAAA,CAAAA,UAAAA,EAAAA,WAAAA,CAAAA;AAAAA,OAAAA,CAAAA,YAAAA,WAAAA,CAAAA;AwBRtB,eAAsB8V,sBAAsBC,KAAAA,EAAwB;AACnE,EAAA,MAAM3V,IAAAA,GAAO,MAAM4V,MAAAA,iBAAOhR,GAAAA,CAACyP,YAAAA,EAAAA;IAAc,GAAGsB;;AAE5C,EAAA,MAAME,MAAAA,GAAS,MAAMjW,UAAAA,CAAU;IAC9BC,IAAAA,EAAM,qBAAA;AACNC,IAAAA,EAAAA,EAAI6V,KAAAA,CAAMjV,KAAAA;IACVX,OAAAA,EAAS,wDAAA;AACTC,IAAAA;AACD,GAAA,CAAA;AAEA,EAAA,IAAI6V,OAAOhM,KAAAA,EAAO;AACjB,IAAA,MAAM,IAAIxK,MAAM,CAAA,sCAAA,EAAyCsW,KAAAA,CAAMjV,KAAK,CAAA,EAAA,EAAKmV,MAAAA,CAAOhM,KAAAA,CAAMlI,OAAO,CAAA,CAAE,CAAA;AAChG,EAAA;AACD;AAbsB+T,MAAAA,CAAAA,qBAAAA,EAAAA,uBAAAA,CAAAA;AAAAA,OAAAA,CAAAA,uBAAAA,uBAAAA,CAAAA;ACPf,SAAStN,WAAU,EAAET,QAAAA,EAAUG,gBAAAA,EAAkBG,SAAAA,EAAWE,WAAAA,EAA6B;AAC/F,EAAA,4BACEuG,WAAAA,EAAAA;IAAYhN,KAAAA,EAAM,kBAAA;IAAmBiN,SAAAA,EAAU,4BAAA;;AAC/C/J,sBAAAA,GAAAA,CAACoG,cAAAA,EAAAA;QAAeC,MAAAA,EAAO;;AAEvBrG,sBAAAA,GAAAA,CAACgC,IAAAA,EAAAA;QAAKnB,KAAAA,EAAO;UAAEqB,QAAAA,EAAU,MAAA;UAAQb,YAAAA,EAAc,MAAA;UAAQY,KAAAA,EAAO;AAAU,SAAA;QAAG,QAAA,EAAA;;AAE3EjC,sBAAAA,GAAAA,CAACgK,QAAAA,EAAAA;QAASC,IAAAA,EAAK,MAAA;QAAO,QAAA,EAAA;;AAEtBjK,sBAAAA,GAAAA,CAAC0C,cAAAA,EAAAA;QAAcH,IAAAA,EAAMQ,QAAAA;QAAU,QAAA,EAAA;;AAE/BlD,sBAAAA,IAAAA,CAACmC,IAAAA,EAAAA;QAAKnB,KAAAA,EAAO;UAAEoB,KAAAA,EAAO,SAAA;UAAWC,QAAAA,EAAU,MAAA;UAAQJ,SAAAA,EAAW;AAAO,SAAA;;AAAG,UAAA,6BAAA;AAC3CoB,UAAAA,gBAAAA;AAAiB,UAAA;;;AAG9ClD,sBAAAA,GAAAA,CAACgC,IAAAA,EAAAA;QACAnB,KAAAA,EAAO;UACNqB,QAAAA,EAAU,MAAA;UACVJ,SAAAA,EAAW,MAAA;UACXT,YAAAA,EAAc,KAAA;UACdY,KAAAA,EAAO;AACR,SAAA;QACA,QAAA,EAAA;;AAIDjC,sBAAAA,GAAAA,CAAC2K,SAAAA,EAAAA;AAAUC,QAAAA,IAAAA,EAAM,eAAevH,SAAAA;cAA0BE,SAAAA,CAAAA;;AAE1DvD,sBAAAA,GAAAA,CAACgC,IAAAA,EAAAA;QAAKnB,KAAAA,EAAO;UAAEoB,KAAAA,EAAO,SAAA;UAAWC,QAAAA,EAAU,MAAA;UAAQJ,SAAAA,EAAW;AAAO,SAAA;QAAG,QAAA,EAAA;;sBAIxE9B,GAAAA,CAACgG,UAAAA,EAAAA,EAAAA;;;AAGJ;AAnCgBxC,MAAAA,CAAAA,UAAAA,EAAAA,WAAAA,CAAAA;AAAAA,OAAAA,CAAAA,YAAAA,WAAAA,CAAAA;ACAT,SAASS,eAAAA,CAAe,EAC9BJ,UAAAA,EACAC,QAAAA,EACAT,WACA/F,SAAAA,EACAyG,UAAAA,EACAC,SAAAA,EACuB;AACvB,EAAA,4BACE8F,WAAAA,EAAAA;IAAYhN,KAAAA,EAAM,oBAAA;IAAqBiN,SAAAA,EAAU,4CAAA;;AACjD/J,sBAAAA,GAAAA,CAACoG,cAAAA,EAAAA;QAAeC,MAAAA,EAAO;;AAEvBrG,sBAAAA,GAAAA,CAACgC,IAAAA,EAAAA;QAAKnB,KAAAA,EAAO;UAAEqB,QAAAA,EAAU,MAAA;UAAQb,YAAAA,EAAc,MAAA;UAAQY,KAAAA,EAAO;AAAU,SAAA;QAAG,QAAA,EAAA;;AAI3EjC,sBAAAA,GAAAA,CAACgK,QAAAA,EAAAA;QAASC,IAAAA,EAAK,SAAA;QAAU,QAAA,EAAA;;AAEzBjK,sBAAAA,GAAAA,CAACgC,IAAAA,EAAAA;QACAnB,KAAAA,EAAO;UACNqB,QAAAA,EAAU,MAAA;UACVJ,SAAAA,EAAW,MAAA;UACXT,YAAAA,EAAc,KAAA;UACdY,KAAAA,EAAO;AACR,SAAA;QACA,QAAA,EAAA;;AAIDjC,sBAAAA,GAAAA,CAAC2K,SAAAA,EAAAA;AACAC,QAAAA,IAAAA,EAAM,WAAW/G,UAAAA;YAAyBC,QAAAA;cAAyBT,SAAAA;AAAoB/F,MAAAA,EAAAA,SAAAA,CAAU4T,gBAAc,CAAA;;AAGhHlR,sBAAAA,GAAAA,CAACgC,IAAAA,EAAAA;QAAKnB,KAAAA,EAAO;UAAEqB,QAAAA,EAAU,MAAA;UAAQJ,SAAAA,EAAW,MAAA;UAAQG,KAAAA,EAAO;AAAU,SAAA;QAAG,QAAA,EAAA;;AAExEjC,sBAAAA,GAAAA,CAAC0C,cAAAA,EAAAA;QAAcH,IAAAA,EAAMwB,UAAAA;QAAY,QAAA,EAAA;;AAEjClE,sBAAAA,IAAAA,CAACmC,IAAAA,EAAAA;QAAKnB,KAAAA,EAAO;UAAEiB,SAAAA,EAAW,MAAA;UAAQI,QAAAA,EAAU,MAAA;UAAQD,KAAAA,EAAO;AAAU,SAAA;;AAAG,UAAA,qBAAA;AACnD,UAAA,GAAA;AACpBjC,0BAAAA,GAAAA,CAAC0J,GAAAA,EAAAA;YAAEnH,IAAAA,EAAMyB,OAAAA;YAASnD,KAAAA,EAAO;cAAEoB,KAAAA,EAAO,SAAA;cAAWO,cAAAA,EAAgB;AAAY,aAAA;YAAG,QAAA,EAAA;;AAEvE,UAAA,GAAA;AAAI,UAAA;;;sBAIVxC,GAAAA,CAACgG,UAAAA,EAAAA,EAAAA;;;AAGJ;AAhDgB/B,MAAAA,CAAAA,eAAAA,EAAAA,gBAAAA,CAAAA;AAAAA,OAAAA,CAAAA,iBAAAA,gBAAAA,CAAAA;ACAT,SAASO,cAAAA,CAAc,EAAEF,QAAAA,EAAUpB,gBAAAA,EAAkBqB,eAAAA,EAAqC;AAChG,EAAA,4BACEuF,WAAAA,EAAAA;IAAYhN,KAAAA,EAAM,qBAAA;IAAsBiN,SAAAA,EAAU,2BAAA;;AAClD/J,sBAAAA,GAAAA,CAACoG,cAAAA,EAAAA;QAAeC,MAAAA,EAAO;;AAEvBrG,sBAAAA,GAAAA,CAACgC,IAAAA,EAAAA;QAAKnB,KAAAA,EAAO;UAAEqB,QAAAA,EAAU,MAAA;UAAQb,YAAAA,EAAc,MAAA;UAAQY,KAAAA,EAAO;AAAU,SAAA;QAAG,QAAA,EAAA;;AAE3EjC,sBAAAA,GAAAA,CAACgK,QAAAA,EAAAA;QAASC,IAAAA,EAAK,SAAA;QAAU,QAAA,EAAA;;AAIzBjK,sBAAAA,GAAAA,CAAC0C,cAAAA,EAAAA;QAAcH,IAAAA,EAAM+B,QAAAA;QAAU,QAAA,EAAA;;AAE/BzE,sBAAAA,IAAAA,CAACmC,IAAAA,EAAAA;QAAKnB,KAAAA,EAAO;UAAEoB,KAAAA,EAAO,SAAA;UAAWC,QAAAA,EAAU,MAAA;UAAQJ,SAAAA,EAAW;AAAO,SAAA;;AAAG,UAAA,6BAAA;AAC3CoB,UAAAA,gBAAAA;AAAiB,UAAA;;;AAG9ClD,sBAAAA,GAAAA,CAACgC,IAAAA,EAAAA;QACAnB,KAAAA,EAAO;UACNqB,QAAAA,EAAU,MAAA;UACVJ,SAAAA,EAAW,MAAA;UACXT,YAAAA,EAAc,KAAA;UACdY,KAAAA,EAAO;AACR,SAAA;QACA,QAAA,EAAA;;AAIDjC,sBAAAA,GAAAA,CAAC2K,SAAAA,EAAAA;AACAC,QAAAA,IAAAA,EAAM,CAAA,YAAA,EAAerG,aAAAA,CAAclB,SAAS,CAAA,EAAGkB,cAAcT,QAAAA,GAAW;YAAeS,aAAAA,CAAcT,QAAQ,KAAK,EAAA,CAAA;;AAGnH9D,sBAAAA,GAAAA,CAACgC,IAAAA,EAAAA;QAAKnB,KAAAA,EAAO;UAAEoB,KAAAA,EAAO,SAAA;UAAWC,QAAAA,EAAU,MAAA;UAAQJ,SAAAA,EAAW;AAAO,SAAA;QAAG,QAAA,EAAA;;sBAKxE9B,GAAAA,CAACgG,UAAAA,EAAAA,EAAAA;;;AAGJ;AAxCgBxB,MAAAA,CAAAA,cAAAA,EAAAA,eAAAA,CAAAA;AAAAA,OAAAA,CAAAA,gBAAAA,eAAAA,CAAAA;ACAT,SAASE,YAAAA,CAAY,EAAED,eAAAA,EAAiBvB,gBAAAA,EAAAA,EAAsC;AACpF,EAAA,4BACE4G,WAAAA,EAAAA;IAAYhN,KAAAA,EAAM,mBAAA;IAAoBiN,SAAAA,EAAU,oCAAA;;AAChD/J,sBAAAA,GAAAA,CAACoG,cAAAA,EAAAA;QAAeC,MAAAA,EAAO;;AAEvBrG,sBAAAA,GAAAA,CAACgC,IAAAA,EAAAA;QAAKnB,KAAAA,EAAO;UAAEqB,QAAAA,EAAU,MAAA;UAAQb,YAAAA,EAAc,MAAA;UAAQY,KAAAA,EAAO;AAAU,SAAA;QAAG,QAAA,EAAA;;AAE3EjC,sBAAAA,GAAAA,CAACgK,QAAAA,EAAAA;QAASC,IAAAA,EAAK,MAAA;QAAO,QAAA,EAAA;;AAItBjK,sBAAAA,GAAAA,CAAC0C,cAAAA,EAAAA;QAAcH,IAAAA,EAAMkC,eAAAA;QAAiB,QAAA,EAAA;;AAEtC5E,sBAAAA,IAAAA,CAACmC,IAAAA,EAAAA;QAAKnB,KAAAA,EAAO;UAAEoB,KAAAA,EAAO,SAAA;UAAWC,QAAAA,EAAU,MAAA;UAAQJ,SAAAA,EAAW;AAAO,SAAA;;AAAG,UAAA,oCAAA;AACpCoB,UAAAA,gBAAAA;AAAiB,UAAA;;;AAGrDlD,sBAAAA,GAAAA,CAACgC,IAAAA,EAAAA;QAAKnB,KAAAA,EAAO;UAAEoB,KAAAA,EAAO,SAAA;UAAWC,QAAAA,EAAU,MAAA;UAAQJ,SAAAA,EAAW;AAAO,SAAA;QAAG,QAAA,EAAA;;sBAIxE9B,GAAAA,CAACgG,UAAAA,EAAAA,EAAAA;;;AAGJ;AAxBgBtB,MAAAA,CAAAA,YAAAA,EAAAA,aAAAA,CAAAA;AAAAA,OAAAA,CAAAA,cAAAA,aAAAA,CAAAA;ACDT,SAASyM,gBAAgBC,CAAAA,EAAyB;AACxD,EAAA,4BACE9I,eAAAA,EAAAA;IAAgBxL,KAAAA,EAAM,4CAAA;IAA6CyL,WAAAA,EAAY,iBAAA;;AAC/EvI,sBAAAA,GAAAA,CAACsK,KAAAA,EAAAA;QAAMC,KAAAA,EAAM;;AACbvK,sBAAAA,GAAAA,CAACqL,QAAAA,EAAAA;QAAS,QAAA,EAAA;;AACVrL,sBAAAA,GAAAA,CAACwK,QAAAA,EAAAA;QAAS,QAAA,EAAA;;AAGVxK,sBAAAA,GAAAA,CAAC+L,aAAAA,EAAAA;QAAcR,MAAAA,EAAM,IAAA;QAAE,QAAA,EAAA,CAAA;;;;;;AAK1B;AAbgB4F,MAAAA,CAAAA,eAAAA,EAAAA,iBAAAA,CAAAA;AAAAA,OAAAA,CAAAA,iBAAAA,iBAAAA,CAAAA;ACCT,SAASE,SAASD,CAAAA,EAAkB;AAC1C,EAAA,4BACE9I,eAAAA,EAAAA;IAAgBxL,KAAAA,EAAM,mDAAA;IAAoDyL,WAAAA,EAAY,uBAAA;;AACtFvI,sBAAAA,GAAAA,CAACsK,KAAAA,EAAAA;QAAMC,KAAAA,EAAM;;AACbvK,sBAAAA,GAAAA,CAACqL,QAAAA,EAAAA;QAAS,QAAA,EAAA;;AACVrL,sBAAAA,GAAAA,CAACwK,QAAAA,EAAAA;QAAS,QAAA,EAAA;;AAIVxK,sBAAAA,GAAAA,CAAC+L,aAAAA,EAAAA;QAAcR,MAAAA,EAAM,IAAA;QAAE,QAAA,EAAA;;AACvBvL,sBAAAA,GAAAA,CAACgC,IAAAA,EAAAA;QACAnB,KAAAA,EAAO;UACNE,MAAAA,EAAQ,GAAA;UACRZ,UAAAA,EAAY,oFAAA;UACZ+B,QAAAA,EAAU,MAAA;UACVC,UAAAA,EAAY,KAAA;UACZF,KAAAA,EAAO;AACR,SAAA;AAEA,QAAA,QAAA,sBAACyH,GAAAA,EAAAA;UAAEnH,IAAAA,EAAK,gCAAA;UAAiC1B,KAAAA,EAAO;YAAEoB,KAAAA,EAAO,SAAA;YAAWO,cAAAA,EAAgB;AAAO,WAAA;UAAG,QAAA,EAAA;;;;;AAMlG;AAzBgB6O,MAAAA,CAAAA,QAAAA,EAAAA,UAAAA,CAAAA;AAAAA,OAAAA,CAAAA,UAAAA,UAAAA,CAAAA;ACAT,SAASC,eAAeF,CAAAA,EAAwB;AACtD,EAAA,4BACE9I,eAAAA,EAAAA;IACAxL,KAAAA,EAAM,kDAAA;IACNyL,WAAAA,EAAY,2BAAA;;AAEZvI,sBAAAA,GAAAA,CAACsK,KAAAA,EAAAA;QAAMC,KAAAA,EAAM;;AACbvK,sBAAAA,GAAAA,CAACqL,QAAAA,EAAAA;QAAS,QAAA,EAAA;;AACVrL,sBAAAA,GAAAA,CAACwK,QAAAA,EAAAA;QAAS,QAAA,EAAA;;AAIVxK,sBAAAA,GAAAA,CAACgC,IAAAA,EAAAA;QACAnB,KAAAA,EAAO;UACNE,MAAAA,EAAQ,GAAA;UACRZ,UAAAA,EAAY,oFAAA;UACZ+B,QAAAA,EAAU,MAAA;UACVC,UAAAA,EAAY,KAAA;UACZF,KAAAA,EAAO;AACR,SAAA;AAEA,QAAA,QAAA,sBAACyH,GAAAA,EAAAA;UACAnH,IAAAA,EAAK,iEAAA;UACL1B,KAAAA,EAAO;YAAEoB,KAAAA,EAAO,SAAA;YAAWO,cAAAA,EAAgB;AAAO,WAAA;UAClD,QAAA,EAAA;;;;;AAML;AA9BgB8O,MAAAA,CAAAA,cAAAA,EAAAA,gBAAAA,CAAAA;AAAAA,OAAAA,CAAAA,gBAAAA,gBAAAA,CAAAA;ACKT,SAASC,QAAAA,CAAS,EACxBlV,SAAAA,EACA6R,cAAAA,EACAC,WAAAA,EACAC,gBAAAA,EACAC,WAAAA,EACAC,WAAAA,EACAC,cAAAA,EACA/R,YAAAA,EACAgS,eAAAA,EAAAA,EACiB;AACjB,EAAA,MAAMgD,aAAAA,GACLpD,gBAAAA,IAAoB,EAAA,GACjB,CAAA,EAAGqD,KAAKC,KAAAA,CAAMtD,gBAAAA,GAAmB,EAAA,CAAA,CAAA,EAAA,EAAQA,gBAAAA,GAAmB,EAAA,CAAA,CAAA,CAAA,GAC5D,GAAGA,gBAAAA,CAAAA,CAAAA,CAAAA;AAEP,EAAA,4BACEtE,WAAAA,EAAAA;IACAhN,KAAAA,EAAM,8BAAA;AACNiN,IAAAA,SAAAA,EAAW,sBAAsBmE,cAAAA,CAAAA,KAAAA,EAAsBA,cAAAA,KAAmB,CAAA,GAAI,MAAM,EAAA,CAAA,WAAA,CAAA;;AAEpFlO,sBAAAA,GAAAA,CAACoG,cAAAA,EAAAA;QAAeC,MAAAA,EAAO;;AAEvBxG,sBAAAA,IAAAA,CAACqB,OAAAA,EAAAA;QAAQL,KAAAA,EAAO;UAAEG,OAAAA,EAAS;AAAY,SAAA;;AACtChB,0BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;YACA5C,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,KAAA;AACZ4B,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B,OAAAA;AACzBmB,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME,IAAAA;cAC7BrD,SAAAA,EAAW;AACZ,aAAA;YACA,QAAA,EAAA;;AAIDlC,0BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC,IAAAA;cAC7BpD,SAAAA,EAAW;AACZ,aAAA;;AACA,cAAA,MAAA;AACK1F,cAAAA,SAAAA;AAAU,cAAA;;;AAGhB2D,0BAAAA,GAAAA,CAACgK,QAAAA,EAAAA;YAASC,IAAAA,EAAK,SAAA;AACd,YAAA,QAAA,sBAAC9C,MAAAA,EAAAA;cAAK,QAAA,EAAA;;;AAIPtH,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YACAL,KAAAA,EAAO;cACNE,MAAAA,EAAQ,QAAA;cACRC,OAAAA,EAAS,MAAA;AACTF,cAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOkE,aAAAA;cACnC9F,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO5B,MAAM,CAAA,CAAA;cAC7C6C,YAAAA,EAAc;AACf,aAAA;;AAEA5B,8BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;gBACA5C,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACV7B,UAAAA,EAAY,KAAA;AACZ4B,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAIDpF,8BAAAA,GAAAA,CAACwL,OAAAA,EAAAA;gBAAQjB,KAAAA,EAAM,iBAAA;AAAkBkB,gBAAAA,KAAAA,EAAOyC,eAAeyD,QAAAA,EAAAA;gBAAYvH,IAAAA,EAAK;;AACxEpK,8BAAAA,GAAAA,CAACwL,OAAAA,EAAAA;gBAAQjB,KAAAA,EAAM,eAAA;AAAgBkB,gBAAAA,KAAAA,EAAO0C,YAAY+C,cAAAA,EAAAA;gBAAkB9G,IAAAA,EAAK;;AACzEpK,8BAAAA,GAAAA,CAACwL,OAAAA,EAAAA;gBAAQjB,KAAAA,EAAM,YAAA;gBAAakB,KAAAA,EAAO+F,aAAAA;gBAAepH,IAAAA,EAAK;;AACtDmE,cAAAA,cAAAA,wBAAmB/C,OAAAA,EAAAA;gBAAQjB,KAAAA,EAAM,kBAAA;gBAAmBkB,KAAAA,EAAO8C,cAAAA;gBAAgBnE,IAAAA,EAAK;;;;AAIlFvK,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YACAL,KAAAA,EAAO;cACNE,MAAAA,EAAQ,QAAA;cACRC,OAAAA,EAAS,MAAA;AACTF,cAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOiE,mBAAAA;cACnC7F,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO5B,MAAM,CAAA,CAAA;cAC7C6C,YAAAA,EAAc;AACf,aAAA;;AAEA/B,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;AACVD,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,iBAAA;;AACA,kBAAA,6BAAA;AACqBiJ,kBAAAA;;;AAEtBxO,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,CAAA;kBACRmB,QAAAA,EAAU,MAAA;AACVD,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,iBAAA;;AACA,kBAAA,sBAAA;AACgBkJ,kBAAAA;;;;;AAKlBzO,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YAAQL,KAAAA,EAAO;cAAEE,MAAAA,EAAQ;AAAS,aAAA;;AAClCf,8BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;gBACA5C,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACV7B,UAAAA,EAAY,KAAA;AACZ4B,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAIDpF,8BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAKDtF,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,CAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;;AACA,kBAAA,sCAAA;AACqCqM,kBAAAA,aAAAA;AAAc,kBAAA;;;;;AAMrD3R,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YAAQL,KAAAA,EAAO;cAAEkB,SAAAA,EAAW,QAAA;cAAUhB,MAAAA,EAAQ;AAAS,aAAA;;AACvDf,8BAAAA,GAAAA,CAAC0C,cAAAA,EAAAA;gBAAcH,IAAAA,EAAM/F,YAAAA;gBAAc,QAAA,EAAA;;AAElCgS,cAAAA,eAAAA,wBACCxM,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;AACVD,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB;AAC1B,iBAAA;AAEA,gBAAA,QAAA,sBAACmD,IAAAA,EAAAA;kBACAC,IAAAA,EAAMiM,eAAAA;kBACN3N,KAAAA,EAAO;AACNoB,oBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B,OAAAA;oBACzBwD,cAAAA,EAAgB;AACjB,mBAAA;kBACA,QAAA,EAAA;;;;;AAQJxC,0BAAAA,GAAAA,CAACkB,OAAAA,EAAAA;YACAL,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRC,OAAAA,EAAS,MAAA;AACTF,cAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOkE,aAAAA;cACnC9F,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO3B,OAAO,CAAA,CAAA;cAC9C4C,YAAAA,EAAc;AACf,aAAA;AAEA,YAAA,QAAA,uBAACI,IAAAA,EAAAA;cACAnB,KAAAA,EAAO;gBACNE,MAAAA,EAAQ,CAAA;gBACRmB,QAAAA,EAAU,MAAA;gBACVC,UAAAA,EAAY,MAAA;AACZF,gBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,gBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,eAAA;;AAEAnF,gCAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;kBAAO/Q,KAAAA,EAAO;AAAEoB,oBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B;AAAQ,mBAAA;kBAAG,QAAA,EAAA;;AAAoB,gBAAA;;;;;;sBAM5EgB,GAAAA,CAACgG,UAAAA,EAAAA,EAAAA;;;AAGJ;AAhNgBuL,MAAAA,CAAAA,QAAAA,EAAAA,UAAAA,CAAAA;AAAAA,OAAAA,CAAAA,UAAAA,UAAAA,CAAAA;ACAT,SAASM,YAAAA,CAAa,EAC5BxV,SAAAA,EACAsS,WAAAA,EACAC,aAAAA,EACAnC,YAAAA,EACAC,gBAAAA,EACAmC,iBAAAA,EACAC,iBAAAA,EACAC,UAAAA,EACAC,mBAAAA,EACAC,WAAAA,EAAAA,EACqB;AACrB,EAAA,4BACEnF,WAAAA,EAAAA;IACAhN,KAAAA,EAAM,iCAAA;IACNiN,SAAAA,EAAW,CAAA,cAAA,EAAiB6E,aAAAA,CAAAA,iBAAAA,EAAiCvS,SAAAA,CAAAA,CAAAA,CAAAA;;AAE7D2D,sBAAAA,GAAAA,CAACoG,cAAAA,EAAAA;QAAeC,MAAAA,EAAO;;AAEvBxG,sBAAAA,IAAAA,CAACqB,OAAAA,EAAAA;QAAQL,KAAAA,EAAO;UAAEG,OAAAA,EAAS;AAAY,SAAA;;AACtChB,0BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;YACA5C,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,KAAA;AACZ4B,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B,OAAAA;AACzBmB,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME,IAAAA;cAC7BrD,SAAAA,EAAW;AACZ,aAAA;YACA,QAAA,EAAA;;AAIDlC,0BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC,IAAAA;cAC7BpD,SAAAA,EAAW;AACZ,aAAA;;AACA,cAAA,MAAA;AACK1F,cAAAA,SAAAA;AAAU,cAAA;;;AAIhB2D,0BAAAA,GAAAA,CAACgK,QAAAA,EAAAA;YAASC,IAAAA,EAAK,SAAA;AACd,YAAA,QAAA,uBAAC9C,MAAAA,EAAAA;;AAAK,gBAAA,eAAA;AACQnH,gCAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;kBAAQjD,QAAAA,EAAAA;;AAAqB,gBAAA,QAAA;AAAOC,gBAAAA,aAAAA;AAAc,gBAAA;;;;AAKlE/O,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YACAL,KAAAA,EAAO;cACNE,MAAAA,EAAQ,QAAA;cACRC,OAAAA,EAAS,MAAA;AACTF,cAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOkE,aAAAA;cACnC9F,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO5B,MAAM,CAAA,CAAA;cAC7C6C,YAAAA,EAAc;AACf,aAAA;;AAEA5B,8BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;gBACA5C,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACV7B,UAAAA,EAAY,KAAA;AACZ4B,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAIDpF,8BAAAA,GAAAA,CAACwL,OAAAA,EAAAA;gBAAQjB,KAAAA,EAAM,oBAAA;AAAqBkB,gBAAAA,KAAAA,EAAOoD,kBAAkB8C,QAAAA,EAAAA;gBAAYvH,IAAAA,EAAK;;AAC9EpK,8BAAAA,GAAAA,CAACwL,OAAAA,EAAAA;gBAAQjB,KAAAA,EAAM,mBAAA;AAAoBkB,gBAAAA,KAAAA,EAAOqD,kBAAkB6C,QAAAA,EAAAA;gBAAYvH,IAAAA,EAAK;;AAC7EpK,8BAAAA,GAAAA,CAACwL,OAAAA,EAAAA;gBAAQjB,KAAAA,EAAM,aAAA;AAAckB,gBAAAA,KAAAA,EAAOsD,WAAW4C,QAAAA,EAAAA;gBAAYvH,IAAAA,EAAK;;AAChEpK,8BAAAA,GAAAA,CAACwL,OAAAA,EAAAA;gBAAQjB,KAAAA,EAAM,gBAAA;AAAiBkB,gBAAAA,KAAAA,EAAOmD,cAAc+C,QAAAA,EAAAA;gBAAYvH,IAAAA,EAAK;;;;AAIvEvK,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YAAQL,KAAAA,EAAO;cAAEE,MAAAA,EAAQ;AAAS,aAAA;;AAClCf,8BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;gBACA5C,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACV7B,UAAAA,EAAY,KAAA;AACZ4B,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAIDpF,8BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;gBACA,QAAA,EAAA;;cAOAsH,YAAAA,IAAgBC,gBAAAA,wBACfxL,OAAAA,EAAAA;gBACAL,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,QAAA;kBACRC,OAAAA,EAAS,MAAA;AACTF,kBAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOiE,mBAAAA;kBACnC7F,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO3B,OAAO,CAAA,CAAA;kBAC9C4C,YAAAA,EAAc;AACf,iBAAA;AAEA,gBAAA,QAAA,uBAACI,IAAAA,EAAAA;kBACAnB,KAAAA,EAAO;oBACNE,MAAAA,EAAQ,CAAA;oBACRmB,QAAAA,EAAU,MAAA;AACVD,oBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,oBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,mBAAA;;AAEAnF,oCAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;sBAAO/Q,KAAAA,EAAO;AAAEoB,wBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B;AAAQ,uBAAA;sBAAG,QAAA,EAAA;;AAAmB,oBAAA,GAAA;AAAEyN,oBAAAA,YAAAA;oCAC1EzM,GAAAA,CAAC8R,IAAAA,EAAAA,EAAAA,CAAAA;AACDjS,oCAAAA,IAAAA,CAACsH,MAAAA,EAAAA;sBAAKtG,KAAAA,EAAO;AAAEoB,wBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB;AAAc,uBAAA;;AACpDuN,wBAAAA,gBAAAA;AAAiB,wBAAA;;;;;;;;AAQvB7M,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YACAL,KAAAA,EAAO;cACNE,MAAAA,EAAQ,QAAA;cACRC,OAAAA,EAAS,MAAA;AACTF,cAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOkE,aAAAA;cACnC9F,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO5B,MAAM,CAAA,CAAA;cAC7C6C,YAAAA,EAAc;AACf,aAAA;;AAEA5B,8BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;gBACA5C,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACV7B,UAAAA,EAAY,KAAA;AACZ4B,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAIDvF,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,OAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;;AAEAnF,kCAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;oBAAO/Q,KAAAA,EAAO;AAAEoB,sBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B;AAAQ,qBAAA;oBAAG,QAAA,EAAA;;AAAgB,kBAAA;;;AAEtEa,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,OAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;;AAEAnF,kCAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;oBAAO/Q,KAAAA,EAAO;AAAEoB,sBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B;AAAQ,qBAAA;oBAAG,QAAA,EAAA;;AAAgB,kBAAA;;;AAGtEa,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,OAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;;AAEAnF,kCAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;oBAAO/Q,KAAAA,EAAO;AAAEoB,sBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B;AAAQ,qBAAA;oBAAG,QAAA,EAAA;;AAAiB,kBAAA;;;AAGvEa,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,OAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;;AAEAnF,kCAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;oBAAO/Q,KAAAA,EAAO;AAAEoB,sBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B;AAAQ,qBAAA;oBAAG,QAAA,EAAA;;AAAgB,kBAAA;;;AAGtEa,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,OAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;;AAEAnF,kCAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;oBAAO/Q,KAAAA,EAAO;AAAEoB,sBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B;AAAQ,qBAAA;oBAAG,QAAA,EAAA;;AAAiB,kBAAA;;;;;AAMxEa,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YAAQL,KAAAA,EAAO;cAAEkB,SAAAA,EAAW,QAAA;cAAUhB,MAAAA,EAAQ;AAAS,aAAA;;AACvDf,8BAAAA,GAAAA,CAAC0C,cAAAA,EAAAA;gBAAcH,IAAAA,EAAMyM,mBAAAA;gBAAqB,QAAA,EAAA;;AAEzCC,cAAAA,WAAAA,wBACCjN,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;AACVD,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB;AAC1B,iBAAA;AAEA,gBAAA,QAAA,sBAACmD,IAAAA,EAAAA;kBACAC,IAAAA,EAAM0M,WAAAA;kBACNpO,KAAAA,EAAO;AACNoB,oBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B,OAAAA;oBACzBwD,cAAAA,EAAgB;AACjB,mBAAA;kBACA,QAAA,EAAA;;;;;AAQJ3C,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YACAL,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRC,OAAAA,EAAS,MAAA;AACTF,cAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOkE,aAAAA;cACnC9F,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO3B,OAAO,CAAA,CAAA;cAC9C4C,YAAAA,EAAc;AACf,aAAA;;AAEA5B,8BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,CAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC,IAAAA;kBAC7B7E,SAAAA,EAAW;AACZ,iBAAA;gBACA,QAAA,EAAA,CAAA,4KAAA;;AAIDN,8BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;AACVD,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB;AAC1B,iBAAA;gBACA,QAAA,EAAA;;;;;;sBAMHa,GAAAA,CAACgG,UAAAA,EAAAA,EAAAA;;;AAGJ;AA5RgB6L,MAAAA,CAAAA,YAAAA,EAAAA,cAAAA,CAAAA;AAAAA,OAAAA,CAAAA,cAAAA,cAAAA,CAAAA;ACAT,SAASE,gBAAAA,CAAiB,EAChC1V,SAAAA,EACAgQ,OAAAA,EACAC,OAAAA,EACAC,YAAAA,EACAC,WAAAA,EACAC,YAAAA,EACAC,gBAAAA,EACAC,aAAAA,EACAnQ,YAAAA,EAAAA,EACyB;AACzB,EAAA,4BACEsN,WAAAA,EAAAA;IACAhN,KAAAA,EAAM,8BAAA;AACNiN,IAAAA,SAAAA,EAAW,mCAAmCuC,OAAAA,CAAAA,kCAAAA,CAAAA;;AAE9CtM,sBAAAA,GAAAA,CAACoG,cAAAA,EAAAA;QAAeC,MAAAA,EAAO;;AAEvBxG,sBAAAA,IAAAA,CAACqB,OAAAA,EAAAA;QAAQL,KAAAA,EAAO;UAAEG,OAAAA,EAAS;AAAY,SAAA;;AACtChB,0BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;YACA5C,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,KAAA;AACZ4B,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,aAAA;YACA,QAAA,EAAA;;AAIDvF,0BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;;AACA,cAAA,mBAAA;AACkB9I,cAAAA,SAAAA;AAAU,cAAA,8BAAA;AAA4B2D,8BAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;gBAAQvF,QAAAA,EAAAA;;AAAiB,cAAA,KAAA;AAAI,cAAA,GAAA;AACtFrM,8BAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;gBAAQtF,QAAAA,EAAAA;;AAAiB,cAAA;;;AAG3BzM,0BAAAA,IAAAA,CAACmK,QAAAA,EAAAA;YAASC,IAAAA,EAAK,SAAA;;AAAU,cAAA,0BAAA;AACNoC,cAAAA,OAAAA;AAAQ,cAAA,UAAA;AAAIC,cAAAA;;;AAI/BzM,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YACAL,KAAAA,EAAO;cACNE,MAAAA,EAAQ,QAAA;cACRC,OAAAA,EAAS,MAAA;AACTF,cAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOiE,mBAAAA;cACnC7F,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO3B,OAAO,CAAA,CAAA;cAC9C4C,YAAAA,EAAc;AACf,aAAA;;AAEA5B,8BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;gBACA5C,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACV7B,UAAAA,EAAY,KAAA;AACZ4B,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAIDpF,8BAAAA,GAAAA,CAACwL,OAAAA,EAAAA;gBAAQjB,KAAAA,EAAM,cAAA;gBAAekB,KAAAA,EAAOa,OAAAA;gBAASlC,IAAAA,EAAK;;AACnDpK,8BAAAA,GAAAA,CAACwL,OAAAA,EAAAA;gBAAQjB,KAAAA,EAAM,cAAA;AAAekB,gBAAAA,KAAAA,EAAOe,YAAYmF,QAAAA,EAAAA;gBAAYvH,IAAAA,EAAK;;AAClEpK,8BAAAA,GAAAA,CAACwL,OAAAA,EAAAA;gBAAQjB,KAAAA,EAAM,8BAAA;AAA+BkB,gBAAAA,KAAAA,EAAO,IAAIc,YAAAA,CAAAA,CAAAA;gBAAgBnC,IAAAA,EAAK;;cAE7EqC,YAAAA,IAAgBC,gBAAAA,yBACfxL,OAAAA,EAAAA;gBACAL,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,eAAA;kBACRoF,UAAAA,EAAY,MAAA;kBACZtE,SAAAA,EAAW,CAAA,UAAA,EAAa8C,UAAAA,CAAWhE,MAAAA,CAAO5B,MAAM,CAAA;AACjD,iBAAA;;AAEAc,kCAAAA,IAAAA,CAACmC,IAAAA,EAAAA;oBACAnB,KAAAA,EAAO;sBACNE,MAAAA,EAAQ,WAAA;sBACRmB,QAAAA,EAAU,MAAA;sBACV7B,UAAAA,EAAY,KAAA;AACZ4B,sBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,sBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,qBAAA;;AACA,sBAAA,aAAA;AACYsH,sBAAAA;;;AAEb5M,kCAAAA,IAAAA,CAACmC,IAAAA,EAAAA;oBACAnB,KAAAA,EAAO;sBACNE,MAAAA,EAAQ,CAAA;sBACRmB,QAAAA,EAAU,MAAA;sBACVC,UAAAA,EAAY,MAAA;AACZF,sBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOmE,YAAAA;AACzB3E,sBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,qBAAA;;AAECuH,sBAAAA,gBAAAA;AAAiB,sBAAA,oBAAA;AAAmBD,sBAAAA;;;;;;;UAOxCE,aAAAA,CAAcqF,MAAAA,GAAS,CAAA,oBACvBnS,IAAAA,CAACqB,OAAAA,EAAAA;YAAQL,KAAAA,EAAO;cAAEE,MAAAA,EAAQ;AAAa,aAAA;;AACtCf,8BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;gBACA5C,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACV7B,UAAAA,EAAY,KAAA;AACZ4B,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAIAuH,cAAAA,aAAAA,CAAc4D,GAAAA,CAAI,CAAC0B,IAAAA,EAAMC,KAAAA,0BACxBhR,OAAAA,EAAAA;gBAEAL,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRC,OAAAA,EAAS,MAAA;AACTF,kBAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOkE,aAAAA;kBACnC9F,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO5B,MAAM,CAAA,CAAA;kBAC7C6C,YAAAA,EAAc;AACf,iBAAA;;AAEA/B,kCAAAA,IAAAA,CAACmC,IAAAA,EAAAA;oBACAnB,KAAAA,EAAO;sBACNE,MAAAA,EAAQ,WAAA;sBACRmB,QAAAA,EAAU,MAAA;sBACV7B,UAAAA,EAAY,KAAA;AACZ4B,sBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B,OAAAA;AACzBmB,sBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,qBAAA;;sBAEC6M,IAAAA,CAAK7H,IAAAA;AAAK,sBAAA,GAAA;sBAAE6H,IAAAA,CAAKrJ;;;AAEnB5I,kCAAAA,GAAAA,CAACgC,IAAAA,EAAAA;oBACAnB,KAAAA,EAAO;sBACNE,MAAAA,EAAQ,CAAA;sBACRmB,QAAAA,EAAU,MAAA;sBACVC,UAAAA,EAAY,MAAA;AACZF,sBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,sBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,qBAAA;8BAEC8M,IAAAA,CAAKrF;;;AA7BFsF,eAAAA,EAAAA,KAAAA,CAAAA;;;AAqCTrS,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YACAL,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRC,OAAAA,EAAS,MAAA;AACTF,cAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOiE,mBAAAA;cACnC7F,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO5B,MAAM,CAAA,CAAA;cAC7C6C,YAAAA,EAAc;AACf,aAAA;;AAEA5B,8BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;gBACA5C,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACV7B,UAAAA,EAAY,KAAA;AACZ4B,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAIDvF,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,OAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;;AAECR,kBAAAA,UAAAA,CAAWmB,KAAAA,CAAMC,SAAAA;AAAU,kBAAA;;;AAE7BlG,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,OAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;;AAECR,kBAAAA,UAAAA,CAAWmB,KAAAA,CAAMC,SAAAA;AAAU,kBAAA;;;AAE7BlG,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,OAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;;AAECR,kBAAAA,UAAAA,CAAWmB,KAAAA,CAAMC,SAAAA;AAAU,kBAAA;;;AAE7BlG,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,OAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;;AAECR,kBAAAA,UAAAA,CAAWmB,KAAAA,CAAMC,SAAAA;AAAU,kBAAA;;;AAE7BlG,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,OAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;;AAECR,kBAAAA,UAAAA,CAAWmB,KAAAA,CAAMC,SAAAA;AAAU,kBAAA;;;;;AAI9B/F,0BAAAA,GAAAA,CAAC0C,cAAAA,EAAAA;YAAcH,IAAAA,EAAM/F,YAAAA;YAAc,QAAA,EAAA;;AAEnCwD,0BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOmE,YAAAA;AACzB3E,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC,IAAAA;cAC7BpD,SAAAA,EAAW;AACZ,aAAA;YACA,QAAA,EAAA;;;;sBAMF/B,GAAAA,CAACgG,UAAAA,EAAAA,EAAAA;;;AAGJ;AApQgB+L,MAAAA,CAAAA,gBAAAA,EAAAA,kBAAAA,CAAAA;AAAAA,OAAAA,CAAAA,kBAAAA,kBAAAA,CAAAA;ACLT,SAASI,WAAAA,CAAY,EAAE3E,IAAAA,EAAME,cAAAA,EAAgBE,UAAUC,KAAAA,EAAOE,cAAAA,EAAgBC,WAAAA,EAA+B;AACnH,EAAA,MAAMoE,UAAAA,GAAavE,KAAAA,CAAMwE,OAAAA,CAAQ,CAAA,CAAA;AACjC,EAAA,MAAM9J,WAAAA,GACLiF,IAAAA,KAAS,MAAA,GACN,CAAA,EAAGE,cAAAA,CAAAA,+BAAAA,CAAAA,GACH,CAAA,EAAGA,cAAAA,CAAAA,MAAAA,EAAoBE,QAAAA,CAAAA,gBAAAA,EAAwBwE,UAAAA,CAAAA,CAAAA;AAEnD,EAAA,4BACE9J,eAAAA,EAAAA;AAAgBxL,IAAAA,KAAAA,EAAO,0BAA0B4Q,cAAAA,CAAAA,CAAAA;AAAkBnF,IAAAA,WAAAA;;AACnEvI,sBAAAA,GAAAA,CAACsK,KAAAA,EAAAA;QAAMC,KAAAA,EAAM;;AACbvK,sBAAAA,GAAAA,CAACqL,QAAAA,EAAAA;QACCmC,QAAAA,EAAAA,IAAAA,KAAS,SACP,gDAAA,GACA;;AAGJxN,sBAAAA,GAAAA,CAACwK,QAAAA,EAAAA;AACCgD,QAAAA,QAAAA,EAAAA,SAAS,MAAA,GACP,CAAA,qDAAA,EAAwDE,cAAAA,CAAAA,CAAAA,CAAAA,GACxD,wDAAwDA,cAAAA,CAAAA,0CAAAA;;AAG5D1N,sBAAAA,GAAAA,CAACwL,OAAAA,EAAAA;QAAQjB,KAAAA,EAAM,YAAA;QAAakB,KAAAA,EAAOiC;;AACnC1N,sBAAAA,GAAAA,CAACwL,OAAAA,EAAAA;QAAQjB,KAAAA,EAAM,iBAAA;QAAkBkB,KAAAA,EAAO2G,UAAAA;QAAYhI,IAAAA,EAAK;;AACzDpK,sBAAAA,GAAAA,CAACwL,OAAAA,EAAAA;QAAQjB,KAAAA,EAAM,aAAA;QAAckB,KAAAA,EAAOsC;;AACpC/N,sBAAAA,GAAAA,CAACwL,OAAAA,EAAAA;QAAQjB,KAAAA,EAAM,YAAA;QAAakB,KAAAA,EAAOuC;;MAElCR,IAAAA,KAAS,KAAA,uBACRzB,aAAAA,EAAAA;QAAcR,MAAAA,EAAM,IAAA;AACnB,QAAA,QAAA,EAAA,cAAcqC,QAAAA;SAAoBwE,UAAAA;QAAqBpE,SAAAA,CAAAA;OAGzD,CAAA,uBAACxD,QAAAA,EAAAA;QAASC,EAAAA,EAAI,EAAA;QAAI,QAAA,EAAA;;AAKnB5K,sBAAAA,IAAAA,CAAC2K,QAAAA,EAAAA;QAASC,EAAAA,EAAI,CAAA;QAAGC,EAAAA,EAAI,CAAA;;AAAG,UAAA,+BAAA;AACO,UAAA,GAAA;AAC9B1K,0BAAAA,GAAAA,CAAC0J,GAAAA,EAAAA;YAAEnH,IAAAA,EAAK,0BAAA;YAA2B1B,KAAAA,EAAO;cAAEoB,KAAAA,EAAO,SAAA;cAAWO,cAAAA,EAAgB;AAAO,aAAA;YAAG,QAAA,EAAA;;;;AAKzFxC,sBAAAA,GAAAA,CAACgC,IAAAA,EAAAA;QACAnB,KAAAA,EAAO;UACNE,MAAAA,EAAQ,WAAA;UACRZ,UAAAA,EAAY,oFAAA;UACZ+B,QAAAA,EAAU,MAAA;UACVC,UAAAA,EAAY,KAAA;UACZF,KAAAA,EAAO;AACR,SAAA;QAECuL,QAAAA,EAAAA,IAAAA,KAAS,SACP,uCAAA,GACA;;;;AAIP;AA3DgB2E,MAAAA,CAAAA,WAAAA,EAAAA,aAAAA,CAAAA;AAAAA,OAAAA,CAAAA,aAAAA,aAAAA,CAAAA;ACAT,SAASG,YAAAA,CAAa,EAC5BjW,SAAAA,EACAwQ,aAAAA,EACAC,aACAC,KAAAA,EACAQ,UAAAA,EACA/Q,cAAAA,EACqB;AACrB,EAAA,MAAM+L,cAAc,CAAA,EAAGwE,KAAAA,CAAMC,cAAc,CAAA,uBAAA,EAAuBD,MAAMG,iBAAiB,CAAA,mBAAA,CAAA;AAEzF,EAAA,4BACE5E,eAAAA,EAAAA;IAAgBxL,KAAAA,EAAM,2BAAA;AAA4ByL,IAAAA,WAAAA;;AAClDvI,sBAAAA,GAAAA,CAACsK,KAAAA,EAAAA;QAAMC,KAAAA,EAAM;;AACbvK,sBAAAA,GAAAA,CAACqL,QAAAA,EAAAA;QAAS,QAAA,EAAA;;AACVxL,sBAAAA,IAAAA,CAAC2K,QAAAA,EAAAA;;AAAS,UAAA,MAAA;AACJnO,UAAAA,SAAAA;AAAU,UAAA,sCAAA;AAA0CwQ,UAAAA,aAAAA;AAAc,UAAA,MAAA;AAAKC,UAAAA,WAAAA;AAAY,UAAA;;;AAIzF9M,sBAAAA,GAAAA,CAAC+L,aAAAA,EAAAA;QACC,QAAA,EAAA;AACA,UAAA,CAAA,kBAAA,EAAqBgB,MAAMC,cAAc,CAAA,CAAA;AACzC,UAAA,CAAA,cAAA,EAAiBD,MAAME,WAAW,CAAA,CAAA;AAClC,UAAA,CAAA,oBAAA,EAAuBF,MAAMG,iBAAiB,CAAA,CAAA;AAC9C,UAAA,CAAA,iBAAA,EAAoBH,MAAMI,cAAc,CAAA,CAAA;AACxC,UAAA,CAAA,gBAAA,EAAmBJ,MAAMK,aAAa,CAAA;AACrChP,SAAAA,CAAAA,IAAAA,CAAK,IAAA;;AAGRyB,sBAAAA,IAAAA,CAACqB,OAAAA,EAAAA;QAAQL,KAAAA,EAAO;UAAEE,MAAAA,EAAQ;AAAa,SAAA;;AACtCf,0BAAAA,GAAAA,CAACwL,OAAAA,EAAAA;YAAQjB,KAAAA,EAAM,kBAAA;AAAmBkB,YAAAA,KAAAA,EAAOsB,KAAAA,CAAMC,cAAAA;YAAgB5C,IAAAA,EAAK;;AACpEpK,0BAAAA,GAAAA,CAACwL,OAAAA,EAAAA;YAAQjB,KAAAA,EAAM,cAAA;AAAekB,YAAAA,KAAAA,EAAOsB,KAAAA,CAAME,WAAAA;YAAa7C,IAAAA,EAAK;;AAC7DpK,0BAAAA,GAAAA,CAACwL,OAAAA,EAAAA;YAAQjB,KAAAA,EAAM,oBAAA;AAAqBkB,YAAAA,KAAAA,EAAOsB,KAAAA,CAAMG,iBAAAA;YAAmB9C,IAAAA,EAAK;;AACzEpK,0BAAAA,GAAAA,CAACwL,OAAAA,EAAAA;YAAQjB,KAAAA,EAAM,iBAAA;AAAkBkB,YAAAA,KAAAA,EAAOsB,KAAAA,CAAMI,cAAAA;YAAgB/C,IAAAA,EAAK;;AACnEpK,0BAAAA,GAAAA,CAACwL,OAAAA,EAAAA;YAAQjB,KAAAA,EAAM,qBAAA;AAAsBkB,YAAAA,KAAAA,EAAOsB,KAAAA,CAAMK,aAAAA;YAAehD,IAAAA,EAAK;;;;MAGtE2C,KAAAA,CAAMM,mBAAAA,GAAsB,CAAA,mBAC5BxN,IAAAA,CAAC2K,QAAAA,EAAAA;QAASC,EAAAA,EAAI,EAAA;;AAAI,UAAA,oCAAA;UAAmCsC,KAAAA,CAAMM,mBAAAA;AAAoB,UAAA;;AAC5E,OAAA,CAAA,GAAA,IAAA;MAEHE,UAAAA,CAAWyE,MAAAA,GAAS,CAAA,mBACpBnS,IAAAA,CAACqB,OAAAA,EAAAA;QAAQL,KAAAA,EAAO;UAAEiB,SAAAA,EAAW;AAAO,SAAA;;AACnC9B,0BAAAA,GAAAA,CAACqL,QAAAA,EAAAA;YAAS,QAAA,EAAA;;AACTkC,UAAAA,UAAAA,CAAWgD,GAAAA,CAAI,CAACgC,SAAAA,qBAChB1S,IAAAA,CAACqB,OAAAA,EAAAA;YAEAL,KAAAA,EAAO;cACNG,OAAAA,EAAS,QAAA;cACTa,SAAAA,EAAW;AACZ,aAAA;;AAEAhC,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,WAAA;kBACRZ,UAAAA,EACC,oFAAA;kBACD+B,QAAAA,EAAU,MAAA;kBACV7B,UAAAA,EAAY,GAAA;kBACZ4B,KAAAA,EAAO;AACR,iBAAA;;kBAECsQ,SAAAA,CAAUnI,IAAAA;AAAK,kBAAA,GAAA;kBAAEmI,SAAAA,CAAUzV;;;AAE7BkD,8BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,CAAA;kBACRZ,UAAAA,EACC,oFAAA;kBACD+B,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,GAAA;kBACZF,KAAAA,EAAO;AACR,iBAAA;0BAECsQ,SAAAA,CAAU3F;;;AA5BP,WAAA,EAAA,GAAG2F,SAAAA,CAAUzV,KAAK,IAAIyV,SAAAA,CAAUnI,IAAI,EAAE,CAAA;;AAiC3C,OAAA,CAAA,GAAA,IAAA;AAEJpK,sBAAAA,GAAAA,CAAC0C,cAAAA,EAAAA;QAAcH,IAAAA,EAAM/F,YAAAA;QAAc,QAAA,EAAA;;;;AAGtC;AApFgB8V,MAAAA,CAAAA,YAAAA,EAAAA,cAAAA,CAAAA;AAAAA,OAAAA,CAAAA,cAAAA,cAAAA,CAAAA;ACCT,SAASE,OAAAA,CAAQ,EACvBnW,SAAAA,EACAC,QAAAA,EACAC,cACAC,YAAAA,EACAC,OAAAA,EACAC,WAAAA,EACAC,aAAAA,EAAAA,EACgB;AAChB,EAAA,MAAM8V,QAAAA,GAAWpW,SAAAA,GAAY,CAAA,EAAGA,SAAAA,CAAAA,2BAAAA,CAAAA,GAAyC,2BAAA;AACzE,EAAA,MAAMkM,cAAc,CAAA,gBAAA,EAAmB7L,WAAAA,GAAc,CAAA,cAAA,EAAcA,WAAAA,KAAgB,EAAA,CAAA,CAAA;AAEnF,EAAA,4BACE4L,eAAAA,EAAAA;AAAgBxL,IAAAA,KAAAA,EAAO,qBAAqBT,SAAAA,CAAAA,CAAAA;AAAakM,IAAAA,WAAAA;;AACzDvI,sBAAAA,GAAAA,CAACsK,KAAAA,EAAAA;QAAMC,KAAAA,EAAM;;AACbvK,sBAAAA,GAAAA,CAACgC,IAAAA,EAAAA;QACAnB,KAAAA,EAAO;UACNE,MAAAA,EAAQ,YAAA;UACRZ,UAAAA,EAAY,oFAAA;UACZ+B,QAAAA,EAAU,MAAA;UACVC,UAAAA,EAAY,MAAA;UACZ9B,UAAAA,EAAY,GAAA;UACZ4B,KAAAA,EAAO,SAAA;UACPkC,aAAAA,EAAe;AAChB,SAAA;QAECsO,QAAAA,EAAAA;;AAEF5S,sBAAAA,IAAAA,CAAC2K,QAAAA,EAAAA;;AAAS,UAAA,gBAAA;AACKxK,0BAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;YAAQtV,QAAAA,EAAAA;;AAAkB,UAAA;;;AAG1C0D,sBAAAA,GAAAA,CAACwK,QAAAA,EAAAA;QAASE,EAAAA,EAAI,EAAA;QAAI,QAAA,EAAA;;AAIlB1K,sBAAAA,GAAAA,CAAC+L,aAAAA,EAAAA;QAAcR,MAAAA,EAAM,IAAA;QACnB,QAAA,EAAA;AACA,UAAA,CAAA,MAAA,EAASjP,QAAAA,CAAAA,CAAAA;UACTI,WAAAA,GAAc,CAAA,cAAA,EAAiBA,WAAAA,CAAAA,CAAAA,GAAgB,IAAA;UAC/CC,aAAAA,KAAkB+V,MAAAA,GAAY,CAAA,gBAAA,EAAmB/V,aAAAA,CAAAA,CAAAA,GAAkB;UAElE+T,MAAAA,CAAOiC,OAAAA,CAAAA,CACPvU,IAAAA,CAAK,IAAA;;MAEP7B,YAAAA,CAAayV,MAAAA,GAAS,CAAA,mBACtBhS,GAAAA,CAACwK,QAAAA,EAAAA;QAASC,EAAAA,EAAI,EAAA;QAAIC,EAAAA,EAAI,EAAA;AACpBnO,QAAAA,QAAAA,EAAAA,aAAaqW,KAAAA,CAAM,CAAA,EAAG,CAAA,CAAA,CAAGxU,KAAK,QAAA;AAE7B,OAAA,CAAA,GAAA,IAAA;AACJ4B,sBAAAA,GAAAA,CAAC0C,cAAAA,EAAAA;QAAcH,IAAAA,EAAM/F,YAAAA;QAAc,QAAA,EAAA;;AACnCqD,sBAAAA,IAAAA,CAAC2K,QAAAA,EAAAA;QAASC,EAAAA,EAAI,CAAA;QAAGC,EAAAA,EAAI,CAAA;;AAAG,UAAA,uBAAA;AACD,UAAA,GAAA;AACtB1K,0BAAAA,GAAAA,CAAC0J,GAAAA,EAAAA;YAAEnH,IAAAA,EAAM9F,OAAAA;YAASoE,KAAAA,EAAO;cAAEoB,KAAAA,EAAO,SAAA;cAAWO,cAAAA,EAAgB;AAAO,aAAA;YAAG,QAAA,EAAA;;;;;;AAM3E;AA3DgBgQ,MAAAA,CAAAA,OAAAA,EAAAA,SAAAA,CAAAA;AAAAA,OAAAA,CAAAA,SAAAA,SAAAA,CAAAA;ACIT,SAASK,SAAAA,CAAU,EACzBxW,SAAAA,EACA6S,cAAAA,EACAC,YAAAA,EACAC,aAAAA,EACAC,qBAAAA,EACA3S,WAAAA,EACAC,aAAAA,EACAH,YAAAA,EACAkS,YAAAA,EACAY,WAAAA,EAAAA,EACkB;AAClB,EAAA,4BACExF,WAAAA,EAAAA;IAAYhN,KAAAA,EAAM,cAAA;AAAeiN,IAAAA,SAAAA,EAAW,aAAaoF,YAAAA,CAAAA,mCAAAA,CAAAA;;AACzDnP,sBAAAA,GAAAA,CAACoG,cAAAA,EAAAA;QAAeC,MAAAA,EAAO;;AAEvBxG,sBAAAA,IAAAA,CAACqB,OAAAA,EAAAA;QAAQL,KAAAA,EAAO;UAAEG,OAAAA,EAAS;AAAY,SAAA;;AACtChB,0BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;YACA5C,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,KAAA;AACZ4B,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,aAAA;YACA,QAAA,EAAA;;AAIDvF,0BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;;AACA,cAAA,MAAA;AACK9I,cAAAA,SAAAA;AAAU,cAAA,4EAAA;AAA2E,cAAA,GAAA;AACzF6S,cAAAA,cAAAA;AAAe,cAAA,YAAA;AAAWC,cAAAA,YAAAA;AAAa,cAAA;;;AAGzCnP,0BAAAA,GAAAA,CAACgK,QAAAA,EAAAA;YAASC,IAAAA,EAAK,MAAA;AACd,YAAA,QAAA,sBAAC9C,MAAAA,EAAAA;cAAK,QAAA,EAAA;;;AAIPtH,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YACAL,KAAAA,EAAO;cACNE,MAAAA,EAAQ,QAAA;cACRC,OAAAA,EAAS,MAAA;AACTF,cAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOkE,aAAAA;cACnC9F,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO5B,MAAM,CAAA,CAAA;cAC7C6C,YAAAA,EAAc;AACf,aAAA;;AAEA5B,8BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;gBACA5C,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACV7B,UAAAA,EAAY,KAAA;AACZ4B,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAIDpF,8BAAAA,GAAAA,CAACwL,OAAAA,EAAAA;gBAAQjB,KAAAA,EAAM,gBAAA;AAAiBkB,gBAAAA,KAAAA,EAAO2D,cAAcuC,QAAAA,EAAAA;gBAAYvH,IAAAA,EAAK;;AACtEpK,8BAAAA,GAAAA,CAACwL,OAAAA,EAAAA;gBAAQjB,KAAAA,EAAM,mBAAA;AAAoBkB,gBAAAA,KAAAA,EAAO4D,sBAAsBsC,QAAAA,EAAAA;gBAAYvH,IAAAA,EAAK;;AAChF1N,cAAAA,WAAAA,wBAAgB8O,OAAAA,EAAAA;gBAAQjB,KAAAA,EAAM,cAAA;gBAAekB,KAAAA,EAAO/O,WAAAA;gBAAa0N,IAAAA,EAAK;;cACtEzN,aAAAA,KAAkB+V,MAAAA,wBACjBlH,OAAAA,EAAAA;gBAAQjB,KAAAA,EAAM,gBAAA;AAAiBkB,gBAAAA,KAAAA,EAAO9O,cAAcgV,QAAAA,EAAAA;gBAAYvH,IAAAA,EAAK;;;;AAKxEvK,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YAAQL,KAAAA,EAAO;cAAEE,MAAAA,EAAQ;AAAS,aAAA;;AAClCf,8BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;gBACA5C,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACV7B,UAAAA,EAAY,KAAA;AACZ4B,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAIDvF,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,OAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;;AAEAnF,kCAAAA,GAAAA,CAACmH,MAAAA,EAAAA;oBAAKtG,KAAAA,EAAO;AAAEoB,sBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B;AAAQ,qBAAA;oBAAG,QAAA,EAAA;;AAAQ,kBAAA,GAAA;AAACgB,kCAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;oBAAO,QAAA,EAAA;;AAA4B,kBAAA,GAAA;AAAI,kBAAA;;;AAGrG/R,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,OAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;;AAEAnF,kCAAAA,GAAAA,CAACmH,MAAAA,EAAAA;oBAAKtG,KAAAA,EAAO;AAAEoB,sBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B;AAAQ,qBAAA;oBAAG,QAAA,EAAA;;AAAS,kBAAA,GAAA;AAC5DgB,kCAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;oBAAO,QAAA,EAAA;;AAA4B,kBAAA;;;AAErC/R,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,OAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;;AAEAnF,kCAAAA,GAAAA,CAACmH,MAAAA,EAAAA;oBAAKtG,KAAAA,EAAO;AAAEoB,sBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B;AAAQ,qBAAA;oBAAG,QAAA,EAAA;;AAAQ,kBAAA,GAAA;AAACgB,kCAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;oBAAO,QAAA,EAAA;;AAAwB,kBAAA;;;AAG7F/R,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,OAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;;AAEAnF,kCAAAA,GAAAA,CAACmH,MAAAA,EAAAA;oBAAKtG,KAAAA,EAAO;AAAEoB,sBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B;AAAQ,qBAAA;oBAAG,QAAA,EAAA;;AAAS,kBAAA,GAAA;AAC5DgB,kCAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;oBAAO,QAAA,EAAA;;AAA4B,kBAAA;;;;;AAKtC/R,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YAAQL,KAAAA,EAAO;cAAEkB,SAAAA,EAAW,QAAA;cAAUhB,MAAAA,EAAQ;AAAS,aAAA;;AACvDf,8BAAAA,GAAAA,CAAC0C,cAAAA,EAAAA;gBAAcH,IAAAA,EAAM/F,YAAAA;gBAAc,QAAA,EAAA;;AAEnCqD,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;AACVD,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB;AAC1B,iBAAA;;AACA,kBAAA,SAAA;AACQ,kBAAA,GAAA;AACRa,kCAAAA,GAAAA,CAACsC,IAAAA,EAAAA;oBAAKC,IAAAA,EAAMmM,YAAAA;oBAAc7N,KAAAA,EAAO;AAAEoB,sBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B,OAAAA;sBAASwD,cAAAA,EAAgB;AAAO,qBAAA;oBAAG,QAAA,EAAA;;AAExF,kBAAA;;;;;AAMT3C,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YACAL,KAAAA,EAAO;cACNE,MAAAA,EAAQ,QAAA;cACRC,OAAAA,EAAS,MAAA;AACTF,cAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOkE,aAAAA;cACnC9F,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO5B,MAAM,CAAA,CAAA;cAC7C6C,YAAAA,EAAc;AACf,aAAA;;AAEA5B,8BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;gBACA5C,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACV7B,UAAAA,EAAY,KAAA;AACZ4B,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAIDpF,8BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,CAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;gBACA,QAAA,EAAA;;;;AAQFtF,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YACAL,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRC,OAAAA,EAAS,MAAA;AACTF,cAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOiE,mBAAAA;cACnC7F,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO3B,OAAO,CAAA,CAAA;cAC9C4C,YAAAA,EAAc;AACf,aAAA;;AAEA/B,8BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,CAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;;AAEAnF,kCAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;oBAAO/Q,KAAAA,EAAO;AAAEoB,sBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B;AAAQ,qBAAA;oBAAG,QAAA,EAAA;;kCACrDgB,GAAAA,CAAC8R,IAAAA,EAAAA,EAAAA,CAAAA;AACD9R,kCAAAA,GAAAA,CAACmH,MAAAA,EAAAA;oBAAKtG,KAAAA,EAAO;AAAEoB,sBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB;AAAc,qBAAA;oBAAG,QAAA,EAAA;;;;AAI1Da,8BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU;AACX,iBAAA;AAEA,gBAAA,QAAA,sBAACI,IAAAA,EAAAA;kBAAKC,IAAAA,EAAM+M,WAAAA;kBAAazO,KAAAA,EAAO;AAAEoB,oBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B,OAAAA;oBAASwD,cAAAA,EAAgB;AAAO,mBAAA;kBAAG,QAAA,EAAA;;;;;;;sBAOjGxC,GAAAA,CAACgG,UAAAA,EAAAA,EAAAA;;;AAGJ;AA7OgB6M,MAAAA,CAAAA,SAAAA,EAAAA,WAAAA,CAAAA;AAAAA,OAAAA,CAAAA,WAAAA,WAAAA,CAAAA;ACIT,SAASC,cAAc,EAAEC,OAAAA,EAASC,eAAAA,EAAiBC,qBAAAA,EAAuBC,cAAAA,EAAoC;AACpH,EAAA,4BACEpJ,WAAAA,EAAAA;AAAYhN,IAAAA,KAAAA,EAAO,OAAOkW,eAAAA,CAAAA,CAAAA;IAAmBjJ,SAAAA,EAAU,8BAAA;;AACvD/J,sBAAAA,GAAAA,CAACoG,cAAAA,EAAAA;QAAeC,MAAAA,EAAO;;AAEvBxG,sBAAAA,IAAAA,CAACqB,OAAAA,EAAAA;QAAQL,KAAAA,EAAO;UAAEG,OAAAA,EAAS;AAAY,SAAA;;AACtChB,0BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;YACA5C,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,KAAA;AACZ4B,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOpB,OAAAA;AACzBY,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,aAAA;YACA,QAAA,EAAA;;AAIDvF,0BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;;AACA,cAAA,2BAAA;AACyBnF,8BAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;gBAAO/Q,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF;AAAK,iBAAA;gBAAI0X,QAAAA,EAAAA;;AAAiB,cAAA;;;AAI7FE,UAAAA,qBAAAA,wBACCjR,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,QAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOmE,YAAAA;AACzB3E,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC,IAAAA;cAC7BnE,OAAAA,EAAS,MAAA;AACTF,cAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOkE,aAAAA;cACnCjD,YAAAA,EAAc;AACf,aAAA;YAECqR,QAAAA,EAAAA;;AAIHjT,0BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,eAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;YACA,QAAA,EAAA;;AAIA+N,UAAAA,YAAAA,wBAAiBxQ,cAAAA,EAAAA;YAAcH,IAAAA,EAAM2Q,YAAAA;YAAc,QAAA,EAAA;;;;sBAGrDlT,GAAAA,CAACgG,UAAAA,EAAAA,EAAAA;;;AAGJ;AAlEgB8M,MAAAA,CAAAA,aAAAA,EAAAA,eAAAA,CAAAA;AAAAA,OAAAA,CAAAA,eAAAA,eAAAA,CAAAA;ACFT,SAASK,eAAAA,CAAgB,EAAEC,QAAAA,EAAAA,EAAkC;AACnE,EAAA,MAAMX,QAAAA,GAAWW,QAAAA,GAAW,CAAA,GAAA,EAAMA,QAAAA,CAAAA,CAAAA,GAAa,UAAA;AAE/C,EAAA,4BACEtJ,WAAAA,EAAAA;IAAYhN,KAAAA,EAAM,qCAAA;IAAsCiN,SAAAA,EAAU,2CAAA;;AAClE/J,sBAAAA,GAAAA,CAACoG,cAAAA,EAAAA;QAAeC,MAAAA,EAAO;;AAEvBxG,sBAAAA,IAAAA,CAACqB,OAAAA,EAAAA;QAAQL,KAAAA,EAAO;UAAEG,OAAAA,EAAS;AAAY,SAAA;;AACtCnB,0BAAAA,IAAAA,CAAC4D,OAAAA,EAAAA;YACA5C,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,KAAA;AACZ4B,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;;AAECsN,cAAAA,QAAAA;AAAS,cAAA;;;AAGXzS,0BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;YACA,QAAA,EAAA;;AAIDtF,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YACAL,KAAAA,EAAO;cACNE,MAAAA,EAAQ,QAAA;cACRC,OAAAA,EAAS,MAAA;AACTF,cAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOkE,aAAAA;cACnCjD,YAAAA,EAAc,KAAA;cACd7C,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO5B,MAAM,CAAA;AAC9C,aAAA;;AAEAiB,8BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACV7B,UAAAA,EAAY,KAAA;AACZ4B,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAGDnF,8BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAIDnF,8BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACV7B,UAAAA,EAAY,KAAA;AACZ4B,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAGDnF,8BAAAA,GAAAA,CAAC2K,SAAAA,EAAAA;gBAAUC,IAAAA,EAAK;;AAChB5K,8BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,eAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAIDnF,8BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,YAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACV7B,UAAAA,EAAY,KAAA;AACZ4B,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAGDnF,8BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,GAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACVC,UAAAA,EAAY,MAAA;AACZF,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;gBACA,QAAA,EAAA;;;;AAKFnF,0BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,eAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOmE,YAAAA;AACzB3E,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;YACA,QAAA,EAAA;;AAIDnF,0BAAAA,GAAAA,CAAC0C,cAAAA,EAAAA;YAAcH,IAAAA,EAAK,4BAAA;YAA6B,QAAA,EAAA;;;;sBAGlDvC,GAAAA,CAACgG,UAAAA,EAAAA,EAAAA;;;AAGJ;AAlIgBmN,MAAAA,CAAAA,eAAAA,EAAAA,iBAAAA,CAAAA;AAAAA,OAAAA,CAAAA,iBAAAA,iBAAAA,CAAAA;ACCT,SAASE,aAAAA,CAAc,EAAE3V,MAAAA,EAAQC,QAAAA,EAAUC,WAAAA,EAAiC;AAClF,EAAA,MAAM0V,eAAAA,GAAkB,IAAIC,IAAAA,CAAKC,YAAAA,CAAa,OAAA,EAAS;IACtD3S,KAAAA,EAAO,UAAA;AACPlD,IAAAA,QAAAA,EAAUA,SAAS8V,WAAAA;AACpB,GAAA,CAAA,CAAGzK,OAAOtL,MAAAA,CAAAA;AAEV,EAAA,MAAMgW,gBAAgB,IAAInW,IAAAA,CAAKK,SAAAA,CAAAA,CAAWX,mBAAmB,OAAA,EAAS;IACrE0W,KAAAA,EAAO,OAAA;IACPC,GAAAA,EAAK;AACN,GAAA,CAAA;AAEA,EAAA,4BACE9J,WAAAA,EAAAA;IACAhN,KAAAA,EAAM,sCAAA;IACNiN,SAAAA,EAAU,wDAAA;;AAEV/J,sBAAAA,GAAAA,CAACoG,cAAAA,EAAAA;QAAeC,MAAAA,EAAO;;AAEvBxG,sBAAAA,IAAAA,CAACqB,OAAAA,EAAAA;QAAQL,KAAAA,EAAO;UAAEG,OAAAA,EAAS;AAAY,SAAA;;AACtChB,0BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;YACA5C,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,KAAA;AACZ4B,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;YACA,QAAA,EAAA;;AAIDtF,0BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;;AACA,cAAA,yCAAA;AACwCmO,cAAAA,eAAAA;AAAgB,cAAA;;;AAIzDzT,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YACAL,KAAAA,EAAO;cACNE,MAAAA,EAAQ,QAAA;cACRC,OAAAA,EAAS,MAAA;AACTF,cAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOkE,aAAAA;cACnCjD,YAAAA,EAAc,KAAA;cACd7C,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO5B,MAAM,CAAA;AAC9C,aAAA;;AAEAiB,8BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,WAAA;kBACRmB,QAAAA,EAAU,MAAA;AACVD,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOmE,YAAAA;AACzB3E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;gBACA,QAAA,EAAA;;AAGDnF,8BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,GAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACV7B,UAAAA,EAAY,KAAA;AACZ4B,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;gBAECuO,QAAAA,EAAAA;;;;AAIH1T,0BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,eAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOmE,YAAAA;AACzB3E,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;YACA,QAAA,EAAA;;AAIDnF,0BAAAA,GAAAA,CAAC0C,cAAAA,EAAAA;YAAcH,IAAAA,EAAK,mCAAA;YAAoC,QAAA,EAAA;;;;sBAGzDvC,GAAAA,CAACgG,UAAAA,EAAAA,EAAAA;;;AAGJ;AA9FgBqN,MAAAA,CAAAA,aAAAA,EAAAA,eAAAA,CAAAA;AAAAA,OAAAA,CAAAA,eAAAA,eAAAA,CAAAA;AAgG0D,CAAA;EAKzEzP,YAAAA,EAAc;IAGbhG,SAAAA,EAAW,IAAIL,IAAAA,CAAKA,IAAAA,CAAKsW,GAAAA,EAAAA,GAAQ,CAAA,GAAI,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAA,CAAA,CAAMrW,WAAAA;AAC3D;;ACzGM,SAASsW,YAAAA,CAAa,EAAE3E,YAAAA,EAAc4E,YAAAA,EAAcX,UAAAA,EAA+B;AACzF,EAAA,MAAMX,QAAAA,GAAWW,QAAAA,GAAW,CAAA,GAAA,EAAMA,QAAAA,CAAAA,CAAAA,GAAa,UAAA;AAE/C,EAAA,4BACEtJ,WAAAA,EAAAA;IACAhN,KAAAA,EAAM,sCAAA;IACNiN,SAAAA,EAAU,sDAAA;;AAEV/J,sBAAAA,GAAAA,CAACoG,cAAAA,EAAAA;QAAeC,MAAAA,EAAO;;AAEvBxG,sBAAAA,IAAAA,CAACqB,OAAAA,EAAAA;QAAQL,KAAAA,EAAO;UAAEG,OAAAA,EAAS;AAAY,SAAA;;AACtChB,0BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;YACA5C,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,KAAA;AACZ4B,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;YACA,QAAA,EAAA;;AAIDtF,0BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;;AAECsN,cAAAA,QAAAA;AAAS,cAAA;;;AAGX5S,0BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;;AACA,cAAA,4CAAA;AAC2C,cAAA,GAAA;AAC3CtF,8BAAAA,IAAAA,CAAC+R,QAAAA,EAAAA;gBAAO/Q,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOrB;AAAQ,iBAAA;;AAAI6P,kBAAAA,YAAAA;AAAa,kBAAA;;;AAAc,cAAA;;;AAIlFtP,0BAAAA,IAAAA,CAACqB,OAAAA,EAAAA;YACAL,KAAAA,EAAO;cACNE,MAAAA,EAAQ,QAAA;cACRC,OAAAA,EAAS,MAAA;AACTF,cAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOkE,aAAAA;cACnCjD,YAAAA,EAAc,KAAA;cACd7C,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO5B,MAAM,CAAA,CAAA;cAC7CgD,SAAAA,EAAW;AACZ,aAAA;;AAEA/B,8BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,WAAA;kBACRmB,QAAAA,EAAU,MAAA;kBACV7B,UAAAA,EAAY,KAAA;AACZ4B,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B,OAAAA;AACzBmB,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,iBAAA;gBAEC2O,QAAAA,EAAAA;;AAEF/T,8BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;gBACAnB,KAAAA,EAAO;kBACNE,MAAAA,EAAQ,GAAA;kBACRmB,QAAAA,EAAU,MAAA;AACVD,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOmE,YAAAA;AACzB3E,kBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,iBAAA;gBACA,QAAA,EAAA;;;;AAKFnF,0BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,eAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOmE,YAAAA;AACzB3E,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;YACA,QAAA,EAAA;;AAIDnF,0BAAAA,GAAAA,CAAC0C,cAAAA,EAAAA;YAAcH,IAAAA,EAAK,6BAAA;YAA8B,QAAA,EAAA;;;;sBAGnDvC,GAAAA,CAACgG,UAAAA,EAAAA,EAAAA;;;AAGJ;AApGgB8N,MAAAA,CAAAA,YAAAA,EAAAA,cAAAA,CAAAA;AAAAA,OAAAA,CAAAA,cAAAA,cAAAA,CAAAA;ACFT,SAASE,gBAAAA,CAAiB,EAAEjB,OAAAA,EAASC,eAAAA,EAAAA,EAA0C;AACrF,EAAA,4BACElJ,WAAAA,EAAAA;AACAhN,IAAAA,KAAAA,EAAO,OAAOkW,eAAAA,CAAAA,CAAAA;IACdjJ,SAAAA,EAAU,+DAAA;;AAEV/J,sBAAAA,GAAAA,CAACoG,cAAAA,EAAAA;QAAeC,MAAAA,EAAO;;AAEvBxG,sBAAAA,IAAAA,CAACqB,OAAAA,EAAAA;QAAQL,KAAAA,EAAO;UAAEG,OAAAA,EAAS;AAAY,SAAA;;AACtChB,0BAAAA,GAAAA,CAACyD,OAAAA,EAAAA;YACA5C,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,KAAA;AACZ4B,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B,OAAAA;AACzBmB,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAME;AAC9B,aAAA;YACA,QAAA,EAAA;;AAIDvF,0BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;;AACA,cAAA,uBAAA;AACqBnF,8BAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;gBAAO/Q,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF;AAAK,iBAAA;gBAAI0X,QAAAA,EAAAA;;AAAiB,cAAA;;;AAI1FlT,0BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,QAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOmE,YAAAA;AACzB3E,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;;AACA,cAAA,wBAAA;AACuB,cAAA,GAAA;AACvBnF,8BAAAA,GAAAA,CAAC0J,GAAAA,EAAAA;gBACAnH,IAAAA,EAAK,wBAAA;gBACL1B,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B,OAAAA;kBAASwD,cAAAA,EAAgB;AAAO,iBAAA;gBAClE,QAAA,EAAA;;AAEI,cAAA,GAAA;AAAI,cAAA;;;;;sBAKXxC,GAAAA,CAACgG,UAAAA,EAAAA,EAAAA;;;AAGJ;AAzDgBgO,MAAAA,CAAAA,gBAAAA,EAAAA,kBAAAA,CAAAA;AAAAA,OAAAA,CAAAA,kBAAAA,kBAAAA,CAAAA;ACCT,SAASC,WAAAA,CAAY,EAAE3V,aAAAA,EAAe4V,YAAAA,EAAAA,EAAkC;AAC9E,EAAA,4BACEpK,WAAAA,EAAAA;AACAhN,IAAAA,KAAAA,EAAO,4BAA4BwB,aAAAA,CAAAA,KAAAA,CAAAA;IACnCyL,SAAAA,EAAU,8CAAA;;AAEV/J,sBAAAA,GAAAA,CAACoG,cAAAA,EAAAA;QAAeC,MAAAA,EAAO;;AAEvBxG,sBAAAA,IAAAA,CAACqB,OAAAA,EAAAA;QAAQL,KAAAA,EAAO;UAAEG,OAAAA,EAAS;AAAY,SAAA;;AACtCnB,0BAAAA,IAAAA,CAAC4D,OAAAA,EAAAA;YACA5C,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,KAAA;AACZ4B,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;;AACA,cAAA,2BAAA;AAC0B7G,cAAAA,aAAAA;AAAc,cAAA;;;AAGzC0B,0BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,YAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;YACA,QAAA,EAAA;;AAIDnF,0BAAAA,GAAAA,CAACkB,OAAAA,EAAAA;YACAL,KAAAA,EAAO;cACNE,MAAAA,EAAQ,QAAA;cACRC,OAAAA,EAAS,MAAA;AACTF,cAAAA,eAAAA,EAAiB6D,WAAWhE,MAAAA,CAAOkE,aAAAA;cACnCjD,YAAAA,EAAc,KAAA;cACd7C,MAAAA,EAAQ,CAAA,UAAA,EAAa4F,UAAAA,CAAWhE,MAAAA,CAAO5B,MAAM,CAAA;AAC9C,aAAA;AAECmV,YAAAA,QAAAA,EAAAA,aAAa3D,GAAAA,CAAI,CAAC4D,OAAAA,EAASjC,KAAAA,0BAC1BlQ,IAAAA,EAAAA;cAEAnB,KAAAA,EAAO;gBACNE,MAAAA,EAAQ,OAAA;gBACRmB,QAAAA,EAAU,MAAA;gBACVC,UAAAA,EAAY,MAAA;AACZF,gBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,gBAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,eAAA;;AAEAnF,gCAAAA,GAAAA,CAACmH,MAAAA,EAAAA;kBAAKtG,KAAAA,EAAO;AAAEoB,oBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOpB;AAAQ,mBAAA;kBAAG,QAAA,EAAA;;AAAQ,gBAAA,GAAA;AAAE4U,gBAAAA;;AATxDjC,aAAAA,EAAAA,KAAAA,CAAAA;;AAcRrS,0BAAAA,IAAAA,CAACmC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,eAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC;AAC9B,aAAA;;AAEAnF,8BAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;gBAAO/Q,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOtF;AAAK,iBAAA;gBAAG,QAAA,EAAA;;AAAiB,cAAA,uDAAA;8BAEnE2E,GAAAA,CAAC8R,IAAAA,EAAAA,EAAAA,CAAAA;AACD9R,8BAAAA,GAAAA,CAAC4R,QAAAA,EAAAA;gBAAO/Q,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAO3B;AAAQ,iBAAA;gBAAG,QAAA,EAAA;;AAAgB,cAAA;;;AAItEgB,0BAAAA,GAAAA,CAACgC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,eAAA;cACRmB,QAAAA,EAAU,MAAA;cACVC,UAAAA,EAAY,MAAA;AACZF,cAAAA,KAAAA,EAAO0C,WAAWhE,MAAAA,CAAOmE,YAAAA;AACzB3E,cAAAA,UAAAA,EAAYwE,WAAWO,KAAAA,CAAMC,IAAAA;cAC7B7E,SAAAA,EAAW;AACZ,aAAA;YACA,QAAA,EAAA;;AAIDN,0BAAAA,GAAAA,CAAC0C,cAAAA,EAAAA;YAAcH,IAAAA,EAAK,2BAAA;YAA4B,QAAA,EAAA;;;;sBAGjDvC,GAAAA,CAACgG,UAAAA,EAAAA,EAAAA;;;AAGJ;AA7FgBiO,MAAAA,CAAAA,WAAAA,EAAAA,aAAAA,CAAAA;AAAAA,OAAAA,CAAAA,aAAAA,aAAAA,CAAAA;ACX0BnR,CAAAA,CAAE3I,MAAAA,CAAO,EAAC;ACAjB2I,CAAAA,CAAE3I,MAAAA,CAAO,EAAC;ACAJ2I,CAAAA,CAAE3I,MAAAA,CAAO,EAAC;ACUP2I,EAAE3I,MAAAA,CAAO;AACjDkC,EAAAA,SAAAA,EAAWyG,EAAEE,MAAAA,EAAM;AACnBoR,EAAAA,YAAAA,EAActR,EAAEK,MAAAA,EAAM;AACtBkR,EAAAA,gBAAAA,EAAkBvR,EAAEK,MAAAA,EAAM;AAC1BmR,EAAAA,iBAAAA,EAAmBxR,EAAEK,MAAAA,EAAM;AAC3BoR,EAAAA,UAAAA,EAAYzR,EAAEE,MAAAA,EAAM;AACpBwR,EAAAA,SAAAA,EAAW1R,EAAEE,MAAAA,EAAM;AACnByR,EAAAA,YAAAA,EAAc3R,EAAEK,MAAAA,EAAM;AACtBuR,EAAAA,YAAAA,EAAc5R,EAAEK,MAAAA,EAAM;EACtB3G,YAAAA,EAAcsG,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA;AAC7B,CAAA;ACjByCH,EAAE3I,MAAAA,CAAO;EAC9C2B,KAAAA,EAAOgH,CAAAA,CAAEE,MAAAA,EAAM,CAAGlH,KAAAA,EAAK;EACvB4T,aAAAA,EAAe5M,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA,EAAG;AAC7B0R,EAAAA,eAAAA,EAAiB7R,CAAAA,CAAEE,MAAAA,EAAM,CAAGI,OAAAA,CAAQ,6BAAA,CAAA;AACpCwR,EAAAA,oBAAAA,EAAsB9R,EAAEE,MAAAA,EAAM,CAAGC,GAAAA,EAAG,CAAGG,QAAQ,iEAAA;AACnD,CAAA;AACO,SAASyR,eAAe,EAAE/Y,KAAAA,EAAO4T,aAAAA,EAAeiF,eAAAA,EAAiBC,sBAAoB,EAAE;AAC1F,EAAA,OAAQ/U,KAAM4C,OAAAA,EAAS;IAAE9C,OAAAA,EAAS,qEAAA;IAAuEC,QAAAA,EAAU;AAACI,MAAAA,GAAAA,CAAKyD,OAAAA,EAAS;QAAE5C,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;UAAagD,QAAAA,EAAU,MAAA;UAAQ7B,UAAAA,EAAY,GAAA;UAAKU,MAAAA,EAAQ;AAAU,SAAA;QAAGnB,QAAAA,EAAU;OAAyB,CAAA;AAAII,MAAAA,GAAAA,CAAKgC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;UAAe+C,QAAAA,EAAU,MAAA;UAAQC,UAAAA,EAAY,KAAA;UAAOpB,MAAAA,EAAQ;AAAW,SAAA;QAAGnB,QAAAA,EAAU;OAAmE,CAAA;AAAII,MAAAA,GAAAA,CAAK0C,aAAAA,EAAe;QAAEH,IAAAA,EAAMmN,aAAAA;QAAe9P,QAAAA,EAAU;OAAwB,CAAA;AAAIC,MAAAA,IAAAA,CAAMqB,OAAAA,EAAS;QAAEL,KAAAA,EAAO;AAC7hBC,UAAAA,eAAAA,EAAiBnC,KAAAA,CAAMG,eAAAA;UACvB8C,YAAAA,EAAc,KAAA;UACdZ,OAAAA,EAAS,MAAA;UACTjC,MAAAA,EAAQ,CAAA,UAAA,EAAaJ,MAAMI,MAAM,CAAA,CAAA;UACjC+C,SAAAA,EAAW,MAAA;UACXT,YAAAA,EAAc;AAClB,SAAA;QAAGzB,QAAAA,EAAU;AAACI,UAAAA,GAAAA,CAAKgC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AACtBoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;cACb+C,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,GAAA;cACZU,MAAAA,EAAQ,UAAA;cACRmD,aAAAA,EAAe,WAAA;cACfC,aAAAA,EAAe;AACnB,aAAA;YAAGvE,QAAAA,EAAU;WAAiC,CAAA;AAAIC,UAAAA,IAAAA,CAAMmC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AAAEoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;cAAagD,QAAAA,EAAU,MAAA;cAAQnB,MAAAA,EAAQ;AAAU,aAAA;YAAGnB,QAAAA,EAAU;AAACI,cAAAA,GAAAA,CAAK,MAAA,EAAQ;gBAAEa,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAOtD,KAAAA,CAAMK,OAAAA;kBAASqL,WAAAA,EAAa;AAAM,iBAAA;gBAAGzK,QAAAA,EAAU;eAAS,CAAA;AAAI,cAAA;;WAAkD,CAAA;AAAIC,UAAAA,IAAAA,CAAMmC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AAAEoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;cAAagD,QAAAA,EAAU,MAAA;cAAQnB,MAAAA,EAAQ;AAAE,aAAA;YAAGnB,QAAAA,EAAU;AAACI,cAAAA,GAAAA,CAAK,MAAA,EAAQ;gBAAEa,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAOtD,KAAAA,CAAMK,OAAAA;kBAASqL,WAAAA,EAAa;AAAM,iBAAA;gBAAGzK,QAAAA,EAAU;eAAS,CAAA;AAAI,cAAA;;WAAgD;;OAAI,CAAA;AAAIC,MAAAA,IAAAA,CAAMqB,OAAAA,EAAS;QAAEL,KAAAA,EAAO;AAChjBC,UAAAA,eAAAA,EAAiBnC,KAAAA,CAAMG,eAAAA;UACvB8C,YAAAA,EAAc,KAAA;UACdZ,OAAAA,EAAS,MAAA;UACTjC,MAAAA,EAAQ,CAAA,UAAA,EAAaJ,MAAMI,MAAM,CAAA,CAAA;UACjCsC,YAAAA,EAAc;AAClB,SAAA;QAAGzB,QAAAA,EAAU;AAACI,UAAAA,GAAAA,CAAKgC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AACtBoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;cACb+C,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,GAAA;cACZU,MAAAA,EAAQ,UAAA;cACRmD,aAAAA,EAAe,WAAA;cACfC,aAAAA,EAAe;AACnB,aAAA;YAAGvE,QAAAA,EAAU;WAAc,CAAA;AAAIC,UAAAA,IAAAA,CAAMmC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AAAEoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;cAAagD,QAAAA,EAAU,MAAA;cAAQnB,MAAAA,EAAQ;AAAU,aAAA;YAAGnB,QAAAA,EAAU;AAACI,cAAAA,GAAAA,CAAK,QAAA,EAAU;gBAAEa,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ;AAAc,iBAAA;gBAAGS,QAAAA,EAAU;eAAO,CAAA;AAAI,cAAA,GAAA;AAAKI,cAAAA,GAAAA,CAAK,MAAA,EAAQ;gBAAEa,KAAAA,EAAO;AAC9NC,kBAAAA,eAAAA,EAAiBnC,KAAAA,CAAME,OAAAA;kBACvBmC,OAAAA,EAAS,SAAA;kBACTY,YAAAA,EAAc,KAAA;kBACdzB,UAAAA,EAAY,WAAA;kBACZ+B,QAAAA,EAAU;AACd,iBAAA;gBAAGtC,QAAAA,EAAU+U;eAAgB;;WAAI,CAAA;AAAI9U,UAAAA,IAAAA,CAAMmC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AAAEoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;cAAagD,QAAAA,EAAU,MAAA;cAAQnB,MAAAA,EAAQ;AAAE,aAAA;YAAGnB,QAAAA,EAAU;AAACI,cAAAA,GAAAA,CAAK,QAAA,EAAU;gBAAEa,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ;AAAc,iBAAA;gBAAGS,QAAAA,EAAU;eAAW,CAAA;AAAI,cAAA,GAAA;AAAKI,cAAAA,GAAAA,CAAK,GAAA,EAAK;gBAAEuC,IAAAA,EAAMqS,oBAAAA;gBAAsB/T,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAOtD,KAAAA,CAAMK,OAAAA;kBAASwD,cAAAA,EAAgB;AAAO,iBAAA;gBAAG5C,QAAAA,EAAU;eAA2B;;WAAI;;OAAI,CAAA;AAAII,MAAAA,GAAAA,CAAKoC,EAAAA,EAAI;QAAEvB,KAAAA,EAAO;AAAEwB,UAAAA,WAAAA,EAAa1D,KAAAA,CAAMI,MAAAA;UAAQgC,MAAAA,EAAQ;AAAS;OAAE,CAAA;AAAIlB,MAAAA,IAAAA,CAAMmC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;UAAW8C,QAAAA,EAAU,MAAA;UAAQnB,MAAAA,EAAQ;AAAE,SAAA;QAAGnB,QAAAA,EAAU;AAAC,UAAA,sCAAA;UAAwCI,GAAAA,CAAK,IAAA,EAAM,EAAC,CAAA;AAAI,UAAA;;OAAQ;;GAAI,CAAA;AAC3mB;AAnCgB6U,MAAAA,CAAAA,cAAAA,EAAAA,gBAAAA,CAAAA;AAoChBA,cAAAA,CAAelR,YAAAA,GAAe;EAC1B7H,KAAAA,EAAO,iBAAA;EACP4T,aAAAA,EAAe,6CAAA;EACfiF,eAAAA,EAAiB,6BAAA;EACjBC,oBAAAA,EAAsB;AAC1B,CAAA;CACsC;EAKlChR,YAAAA,EAAciR,cAAAA,CAAelR,YAEjC;;;;;;AzCtDO,IAAMgB,WAAAA,GAAa;EACzBhE,MAAAA,EAAQ;;IAEP/B,UAAAA,EAAY,SAAA;IAEZC,OAAAA,EAAS,SAAA;;IAKTG,OAAAA,EAAS,SAAA;;IAMT3D,IAAAA,EAAM,SAAA;IACN8D,aAAAA,EAAe,SAAA;IAEfC,SAAAA,EAAW,SAAA;IACX2F,YAAAA,EAAc,SAAA;;IAGdhG,MAAAA,EAAQ,SAAA;IACRiG,OAAAA,EAAS,SAAA;;IAGTzF,OAAAA,EAAS,SAAA;IACT0F,KAAAA,EAAO,SAAA;IACP3F,OAAAA,EAAS,SAAA;IACTE,IAAAA,EAAM;AACP,GAAA;EAEA0F,KAAAA,EAAO;IAGNE,IAAAA,EAAM;AACP,GAAA;EAEAC,SAAAA,EAAW;IACVC,EAAAA,EAAI,MAAA;IACJC,EAAAA,EAAI,MAAA;IACJC,IAAAA,EAAM,MAAA;IACNC,EAAAA,EAAI,MAAA;IAEJ,KAAA,EAAO;AAER,GAAA;EAEAC,OAAAA,EAAS;IACRJ,EAAAA,EAAI,KAAA;IACJC,EAAAA,EAAI,KAAA;IACJI,EAAAA,EAAI,MAAA;IACJF,EAAAA,EAAI,MAAA;IACJG,EAAAA,EAAI;AAEL,GAAA;EAEAhE,YAAAA,EAAc,KAAA;EACdiE,WAAAA,EAAa;AAgBd,CAAA;AC3EO,SAASG,WAAAA,GAAAA;AACf,EAAA,MAAMC,WAAAA,mBAAc,iBAAA,IAAI1I,IAAAA,EAAAA,EAAO2I,WAAAA,EAAAA;AAE/B,EAAA,uBAAA4O,KACE5T,OAAAA,EAAAA;IACAL,KAAAA,EAAO;AACNgB,MAAAA,SAAAA,EAAW,GAAG8C,WAAAA,CAAWkB,WAAW,CAAA,OAAA,EAAUlB,WAAAA,CAAWhE,OAAO5B,MAAM,CAAA,CAAA;AACtEoH,MAAAA,UAAAA,EAAYxB,YAAWe,OAAAA,CAAQD,EAAAA;AAC/B3D,MAAAA,SAAAA,EAAW6C,YAAWe,OAAAA,CAAQE;AAC/B,KAAA;;AAEA/F,sBAAAA,KAACmC,IAAAA,EAAAA;QACAnB,KAAAA,EAAO;UACNE,MAAAA,EAAQ,CAAA;AACRM,UAAAA,YAAAA,EAAcsD,YAAWe,OAAAA,CAAQH,EAAAA;AACjCrD,UAAAA,QAAAA,EAAUyC,YAAWU,SAAAA,CAAUE,EAAAA;AAC/BtD,UAAAA,KAAAA,EAAO0C,YAAWhE,MAAAA,CAAOvB,SAAAA;AACzBe,UAAAA,UAAAA,EAAYwE,YAAWO,KAAAA,CAAME;AAC9B,SAAA;;AACA,UAAA,0BAAA;AACYa,UAAAA;;;AAEbpG,sBAAAA,KAACmC,IAAAA,EAAAA;QACAnB,KAAAA,EAAO;UACNE,MAAAA,EAAQ,CAAA;AACRM,UAAAA,YAAAA,EAAcsD,YAAWe,OAAAA,CAAQH,EAAAA;AACjCrD,UAAAA,QAAAA,EAAUyC,YAAWU,SAAAA,CAAUE,EAAAA;AAC/BtD,UAAAA,KAAAA,EAAO0C,YAAWhE,MAAAA,CAAOvB;AAC1B,SAAA;;AAEAY,0BAAAA,IAACsC,IAAAA,EAAAA;YACAC,IAAAA,EAAK,mBAAA;YACL1B,KAAAA,EAAO;AACNoB,cAAAA,KAAAA,EAAO0C,YAAWhE,MAAAA,CAAO3B,OAAAA;cACzBwD,cAAAA,EAAgB;AACjB,aAAA;YACA,QAAA,EAAA;;AAGA,UAAA,UAAA;AACDxC,0BAAAA,IAACsC,IAAAA,EAAAA;YACAC,IAAAA,EAAK,wBAAA;YACL1B,KAAAA,EAAO;AACNoB,cAAAA,KAAAA,EAAO0C,YAAWhE,MAAAA,CAAOxB,aAAAA;cACzBqD,cAAAA,EAAgB;AACjB,aAAA;YACA,QAAA,EAAA;;AAGA,UAAA,UAAA;AACDxC,0BAAAA,IAACsC,IAAAA,EAAAA;YACAC,IAAAA,EAAK,0BAAA;YACL1B,KAAAA,EAAO;AACNoB,cAAAA,KAAAA,EAAO0C,YAAWhE,MAAAA,CAAOxB,aAAAA;cACzBqD,cAAAA,EAAgB;AACjB,aAAA;YACA,QAAA,EAAA;;;;AAIF3C,sBAAAA,KAACmC,IAAAA,EAAAA;QACAnB,KAAAA,EAAO;UACNE,MAAAA,EAAQ,CAAA;AACRmB,UAAAA,QAAAA,EAAUyC,YAAWU,SAAAA,CAAUC,EAAAA;AAC/BrD,UAAAA,KAAAA,EAAO0C,YAAWhE,MAAAA,CAAOoE;AAC1B,SAAA;;AACA,UAAA,+DAAA;AAC8D,UAAA,GAAA;AAC9D/E,0BAAAA,IAACsC,IAAAA,EAAAA;YACAC,IAAAA,EAAK,oBAAA;YACL1B,KAAAA,EAAO;AACNoB,cAAAA,KAAAA,EAAO0C,YAAWhE,MAAAA,CAAOvB,SAAAA;cACzBoD,cAAAA,EAAgB;AACjB,aAAA;YACA,QAAA,EAAA;;;;;;AAML;AAhFgBwD,MAAAA,CAAAA,WAAAA,EAAAA,YAAAA,CAAAA;AAAAA,OAAAA,CAAAA,aAAAA,YAAAA,CAAAA;ACIT,SAASI,eAAAA,CAAe,EAAEC,MAAAA,GAAS,QAAA,EAAA,EAA+B;AACxE,EAAA,MAAMC,YAAAA,GAAe;AACpBC,IAAAA,MAAAA,EAAQ5B,YAAWhE,MAAAA,CAAOpB,OAAAA;AAC1BiH,IAAAA,UAAAA,EAAY7B,YAAWhE,MAAAA,CAAOrB,OAAAA;AAC9BmH,IAAAA,OAAAA,EAAS9B,YAAWhE,MAAAA,CAAOvB,SAAAA;AAC3BsH,IAAAA,QAAAA,EAAU/B,YAAWhE,MAAAA,CAAOsE,KAAAA;AAC5B0B,IAAAA,QAAAA,EAAUhC,YAAWhE,MAAAA,CAAOrB;AAC7B,GAAA;AAEA,EAAA,MAAMsH,UAAAA,GAAa;IAClBL,MAAAA,EAAQ,kBAAA;IACRC,UAAAA,EAAY,mBAAA;IACZC,OAAAA,EAAS,gBAAA;IACTC,QAAAA,EAAU,iBAAA;IACVC,QAAAA,EAAU;AACX,GAAA;AAEA,EAAA,uBACC3G,IAACkB,OAAAA,EAAAA;IACAL,KAAAA,EAAO;AACNgG,MAAAA,YAAAA,EAAc,GAAGlC,WAAAA,CAAWkB,WAAW,CAAA,OAAA,EAAUlB,WAAAA,CAAWhE,OAAO5B,MAAM,CAAA,CAAA;AACzE+H,MAAAA,aAAAA,EAAenC,YAAWe,OAAAA,CAAQD,EAAAA;AAClCpE,MAAAA,YAAAA,EAAcsD,YAAWe,OAAAA,CAAQE;AAClC,KAAA;IAEA,QAAA,kBAAA5F,IAAC+G,OAAAA,EAAAA;MAAMvF,KAAAA,EAAM,MAAA;MAAOX,KAAAA,EAAO;QAAEW,KAAAA,EAAO;AAAO,OAAA;MAC1C,QAAA,kBAAA3B,KAACmH,IAAAA,EAAAA;;AACAhH,0BAAAA,IAACiH,IAAAA,EAAAA;YAAGpG,KAAAA,EAAO;cAAEqG,aAAAA,EAAe;AAAS,aAAA;YACpC,QAAA,kBAAArH,KAAC4D,OAAAA,EAAAA;cACA5C,KAAAA,EAAO;gBACNE,MAAAA,EAAQ,CAAA;gBACRmB,QAAAA,EAAUyC,WAAAA,CAAWU,UAAU,KAAA,CAAA;gBAC/BhF,UAAAA,EAAY,GAAA;AACZ4B,gBAAAA,KAAAA,EAAO0C,YAAWhE,MAAAA,CAAOtF,IAAAA;AACzB8E,gBAAAA,UAAAA,EAAYwE,YAAWO,KAAAA,CAAME;AAC9B,eAAA;;AAEApF,gCAAAA,IAACmH,MAAAA,EAAAA;kBAAKtG,KAAAA,EAAO;AAAEoB,oBAAAA,KAAAA,EAAO0C,YAAWhE,MAAAA,CAAO3B;AAAQ,mBAAA;kBAAG,QAAA,EAAA;;AAAQ,gBAAA;;;;AAG7DgB,0BAAAA,IAACiH,IAAAA,EAAAA;YACApG,KAAAA,EAAO;cACNkB,SAAAA,EAAW,OAAA;cACXmF,aAAAA,EAAe;AAChB,aAAA;YAEA,QAAA,kBAAAlH,IAACgC,IAAAA,EAAAA;cACAnB,KAAAA,EAAO;gBACNE,MAAAA,EAAQ,CAAA;AACRmB,gBAAAA,QAAAA,EAAUyC,YAAWU,SAAAA,CAAUC,EAAAA;AAC/BrD,gBAAAA,KAAAA,EAAOqE,aAAaD,MAAAA,CAAAA;AACpBlG,gBAAAA,UAAAA,EAAYwE,YAAWO,KAAAA,CAAME,IAAAA;gBAC7BjB,aAAAA,EAAe;AAChB,eAAA;AAECyC,cAAAA,QAAAA,EAAAA,WAAWP,MAAAA;;;;;;;AAOnB;AA9DgBD,MAAAA,CAAAA,eAAAA,EAAAA,gBAAAA,CAAAA;AAAAA,OAAAA,CAAAA,iBAAAA,gBAAAA,CAAAA;ACAhB,IAAMgB,OAAAA,GAAS;EACdC,EAAAA,EAAI,SAAA;EACJhM,IAAAA,EAAM,SAAA;EACNiM,KAAAA,EAAO,SAAA;EACPC,KAAAA,EAAO,SAAA;EACPxI,MAAAA,EAAQ,SAAA;EACRyI,MAAAA,EAAQ;AACT,CAAA;AAEA,IAAMC,UAAAA,GAAY,oFAAA;AAClB,IAAMC,UAAAA,GAAY,0EAAA;AAElB,IAAMC,UAAAA,GAAiC;EACtC5G,MAAAA,EAAQ,CAAA;EACRC,OAAAA,EAAS,CAAA;AACTF,EAAAA,eAAAA,EAAiBsG,OAAAA,CAAOC,EAAAA;AACxBpF,EAAAA,KAAAA,EAAOmF,OAAAA,CAAO/L,IAAAA;EACd8E,UAAAA,EAAYsH,UAAAA;EACZG,mBAAAA,EAAqB,aAAA;EACrBC,mBAAAA,EAAqB;AACtB,CAAA;AAEA,IAAMC,eAAAA,GAAsC;EAC3CtG,KAAAA,EAAO,MAAA;EACPJ,QAAAA,EAAU,OAAA;EACVL,MAAAA,EAAQ,QAAA;AACRD,EAAAA,eAAAA,EAAiBsG,OAAAA,CAAOC;AACzB,CAAA;AAEA,IAAMU,aAAAA,GAAoC;EACzC/G,OAAAA,EAAS;AACV,CAAA;AAEA,IAAMgH,YAAAA,GAAmC;EACxChH,OAAAA,EAAS;AACV,CAAA;AAEA,IAAMiH,YAAAA,GAAmC;EACxCjH,OAAAA,EAAS,qBAAA;EACTb,UAAAA,EAAYsH,UAAAA;EACZvF,QAAAA,EAAU,MAAA;EACVC,UAAAA,EAAY,KAAA;AACZF,EAAAA,KAAAA,EAAOmF,OAAAA,CAAOI;AACf,CAAA;AAEA,IAAMU,QAAAA,GAA+B;EACpCrG,SAAAA,EAAW,CAAA,UAAA,EAAauF,QAAOrI,MAAM,CAAA,CAAA;EACrCoJ,WAAAA,EAAa,MAAA;EACbtB,YAAAA,EAAc,MAAA;EACduB,UAAAA,EAAY,MAAA;EACZrH,MAAAA,EAAQ,QAAA;EACRS,KAAAA,EAAO;AACR,CAAA;AAEA,IAAM6G,gBAAAA,GAAuC;AAC5CpG,EAAAA,KAAAA,EAAOmF,OAAAA,CAAOG,KAAAA;EACd/E,cAAAA,EAAgB;AACjB,CAAA;AAEO,SAAS8F,gBAAAA,CAAgB,EAC/BxL,KAAAA,GAAQ,OAAA,EACRyL,aACA3I,QAAAA,EACA4I,OAAAA,GAAU,4CAAA,EACY;AACtB,EAAA,uBACC3I,KAACC,IAAAA,EAAAA;IAAKC,IAAAA,EAAK,IAAA;IAAK0I,GAAAA,EAAI,KAAA;;AACnB5I,sBAAAA,KAACI,IAAAA,EAAAA;;AACAD,0BAAAA,IAAC0I,MAAAA,EAAAA;YAAKC,OAAAA,EAAQ;;AACd3I,0BAAAA,IAAC0I,MAAAA,EAAAA;YAAKE,IAAAA,EAAK,UAAA;YAAWC,OAAAA,EAAQ;;AAC9B7I,0BAAAA,IAAC0I,MAAAA,EAAAA;YAAKI,SAAAA,EAAU,iBAAA;YAAkBD,OAAAA,EAAQ;;AAC1C7I,0BAAAA,IAAC0I,MAAAA,EAAAA;YAAKE,IAAAA,EAAK;;AACX5I,0BAAAA,IAAC0I,MAAAA,EAAAA;YAAKE,IAAAA,EAAK,kBAAA;YAAmBC,OAAAA,EAAQ;;AACtC7I,0BAAAA,IAAC0I,MAAAA,EAAAA;YAAKE,IAAAA,EAAK,cAAA;YAAeC,OAAAA,EAAQ;;AAClC7I,0BAAAA,IAAC0I,MAAAA,EAAAA;YAAKE,IAAAA,EAAK,yBAAA;YAA0BC,OAAAA,EAAQ;;AAC7C7I,0BAAAA,IAAClD,OAAAA,EAAAA;YAAOA,QAAAA,EAAAA;;AACRkD,0BAAAA,IAACE,IAAAA,EAAAA;YACAC,UAAAA,EAAW,OAAA;YACXC,kBAAAA,EAAoB;AAAC,cAAA,WAAA;AAAa,cAAA,OAAA;AAAS,cAAA;;YAC3C2I,OAAAA,EAAS;cACR9F,GAAAA,EAAK,kFAAA;cACL+F,MAAAA,EAAQ;AACT,aAAA;YACA3I,UAAAA,EAAY,GAAA;YACZC,SAAAA,EAAU;;AAEXN,0BAAAA,IAACE,IAAAA,EAAAA;YACAC,UAAAA,EAAW,OAAA;YACXC,kBAAAA,EAAoB;AAAC,cAAA,WAAA;AAAa,cAAA,OAAA;AAAS,cAAA;;YAC3C2I,OAAAA,EAAS;cACR9F,GAAAA,EAAK,kFAAA;cACL+F,MAAAA,EAAQ;AACT,aAAA;YACA3I,UAAAA,EAAY,GAAA;YACZC,SAAAA,EAAU;;AAEXN,0BAAAA,IAACa,OAAAA,EAAAA;YAAO,QAAA,EAAA;;AAEuDuG,iEAAAA,EAAAA,OAAAA,CAAOC,EAAE,CAAA;AACCD,2EAAAA,EAAAA,OAAAA,CAAOC,EAAE,CAAA;AACpBD,gEAAAA,EAAAA,OAAAA,CAAO/L,IAAI,CAAA;AACL+L,sEAAAA,EAAAA,OAAAA,CAAOE,KAAK,CAAA;AACZF,sEAAAA,EAAAA,OAAAA,CAAOG,KAAK,CAAA;;;;;AAGjFvH,sBAAAA,IAACiB,OAAAA,EAAAA;QAASsH,QAAAA,EAAAA;;AACVvI,sBAAAA,IAACY,IAAAA,EAAAA;QAAKC,KAAAA,EAAO8G,UAAAA;QAAWsB,SAAAA,EAAU,UAAA;QACjC,QAAA,kBAAAjJ,IAAC+G,OAAAA,EAAAA;UACAmC,IAAAA,EAAK,cAAA;UACL1H,KAAAA,EAAM,MAAA;UACN2H,WAAAA,EAAa,CAAA;UACbC,WAAAA,EAAa,CAAA;UACbrK,MAAAA,EAAQ,CAAA;UACR8B,KAAAA,EAAO;AAAEC,YAAAA,eAAAA,EAAiBsG,OAAAA,CAAOC,EAAAA;YAAI7F,KAAAA,EAAO;AAAO,WAAA;UACnDyH,SAAAA,EAAU,UAAA;UAEV,QAAA,kBAAAjJ,IAACqJ,OAAAA,EAAAA;YACA,QAAA,kBAAArJ,IAACgH,IAAAA,EAAAA;cACA,QAAA,kBAAAhH,IAACiH,IAAAA,EAAAA;gBAAGqC,KAAAA,EAAM,QAAA;gBAASzI,KAAAA,EAAO;AAAEC,kBAAAA,eAAAA,EAAiBsG,OAAAA,CAAOC;AAAG,iBAAA;gBACtD,QAAA,kBAAAxH,KAACsB,SAAAA,EAAAA;kBAAUN,KAAAA,EAAOiH,eAAAA;kBAAgBmB,SAAAA,EAAU,UAAA;;AAC3CjJ,oCAAAA,IAACkB,OAAAA,EAAAA;sBAAQL,KAAAA,EAAOmH,YAAAA;sBACf,QAAA,kBAAAhI,IAACsB,GAAAA,EAAAA;wBACAC,GAAAA,EAAKiH,OAAAA;wBACL9G,GAAAA,EAAI,OAAA;wBACJF,KAAAA,EAAM,IAAA;wBACNC,MAAAA,EAAO,IAAA;wBACPZ,KAAAA,EAAO;0BACNc,OAAAA,EAAS,OAAA;0BACTH,KAAAA,EAAO,MAAA;0BACPC,MAAAA,EAAQ,MAAA;0BACR1C,MAAAA,EAAQ,CAAA;0BACRwK,OAAAA,EAAS,MAAA;0BACT/G,cAAAA,EAAgB;AACjB;;;AAGFxC,oCAAAA,IAACkB,OAAAA,EAAAA;sBAAQL,KAAAA,EAAOkH,aAAAA;sBACf,QAAA,kBAAA/H,IAACwJ,IAAAA,EAAAA;wBAAG3I,KAAAA,EAAOqH;;;AAEZlI,oCAAAA,IAACkB,OAAAA,EAAAA;sBAAQL,KAAAA,EAAOkH,aAAAA;;;AAChB/H,oCAAAA,IAACkB,OAAAA,EAAAA;sBAAQL,KAAAA,EAAOkH,aAAAA;sBACf,QAAA,kBAAA/H,IAACwJ,IAAAA,EAAAA;wBAAG3I,KAAAA,EAAOqH;;;AAEZlI,oCAAAA,IAACkB,OAAAA,EAAAA;sBAAQL,KAAAA,EAAOoH,YAAAA;sBACf,QAAA,kBAAApI,KAAC4J,GAAAA,EAAAA;wBACA5I,KAAAA,EAAO;0BACNE,MAAAA,EAAQ,CAAA;0BACRmB,QAAAA,EAAU,MAAA;0BACVC,UAAAA,EAAY,KAAA;AACZF,0BAAAA,KAAAA,EAAOmF,OAAAA,CAAOI,MAAAA;0BACdrH,UAAAA,EAAYsH;AACb,yBAAA;wBACAwB,SAAAA,EAAU,aAAA;;AACV,0BAAA,0CAAA;AACsC,0BAAA,GAAA;AACtCjJ,0CAAAA,IAAC0J,GAAAA,EAAAA;4BACAnH,IAAAA,EAAK,2BAAA;4BACL1B,KAAAA,EAAOwH,gBAAAA;4BACPY,SAAAA,EAAU,aAAA;4BACV,QAAA,EAAA;;AAEI,0BAAA,GAAA;AAAI,0BAAA;;;;;;;;;;;;;AAYpB;AAlHgBX,MAAAA,CAAAA,gBAAAA,EAAAA,iBAAAA,CAAAA;AAAAA,OAAAA,CAAAA,kBAAAA,iBAAAA,CAAAA;AAoHT,IAAMqB,aAAAA,GAAevC,OAAAA;AACrB,IAAMwC,gBAAAA,GAAkBnC,UAAAA;AACxB,IAAMoC,gBAAAA,GAAkBnC,UAAAA;AClLxB,SAASoC,YAAAA,CAAY,EAAEhN,KAAAA,EAAOiN,SAAAA,EAAWnK,UAAAA,EAA4B;AAC3E,EAAA,uBACCI,IAACsI,gBAAAA,EAAAA;AAAgBxL,IAAAA,KAAAA;AAAcyL,IAAAA,WAAAA,EAAawB,SAAAA,IAAajN,KAAAA;;;AAI3D;AANgBgN,MAAAA,CAAAA,YAAAA,EAAAA,aAAAA,CAAAA;AAAAA,OAAAA,CAAAA,cAAAA,aAAAA,CAAAA;ACGT,SAASE,SAAAA,CAAS,EAAEC,IAAAA,EAAMrK,QAAAA,EAAAA,EAAyB;AACzD,EAAA,MAAMsK,QAAAA,GAAW;AAChB1K,IAAAA,IAAAA,EAAMmF,YAAWhE,MAAAA,CAAOnB,IAAAA;AACxBD,IAAAA,OAAAA,EAASoF,YAAWhE,MAAAA,CAAOpB,OAAAA;AAC3BD,IAAAA,OAAAA,EAASqF,YAAWhE,MAAAA,CAAOrB,OAAAA;AAC3B2F,IAAAA,KAAAA,EAAON,YAAWhE,MAAAA,CAAOsE;AAC1B,GAAA;AAEA,EAAA,MAAMkF,OAAAA,GAAU;IACf3K,IAAAA,EAAM,QAAA;IACND,OAAAA,EAAS,QAAA;IACTD,OAAAA,EAAS,QAAA;IACT2F,KAAAA,EAAO;AACR,GAAA;AAEA,EAAA,MAAMnE,eAAAA,GAAkBoJ,SAASD,IAAAA,CAAAA;AACjC,EAAA,MAAMG,IAAAA,GAAOD,QAAQF,IAAAA,CAAAA;AAErB,EAAA,uBACCjK,IAACkB,OAAAA,EAAAA;IACAL,KAAAA,EAAO;AACNC,MAAAA,eAAAA,EAAiB,GAAGA,eAAAA,CAAAA,EAAAA,CAAAA;AACpB/B,MAAAA,MAAAA,EAAQ,CAAA,EAAG4F,WAAAA,CAAWkB,WAAW,CAAA,OAAA,EAAU/E,eAAAA,CAAAA,CAAAA;AAC3Cc,MAAAA,YAAAA,EAAc+C,WAAAA,CAAW/C,YAAAA;AACzBZ,MAAAA,OAAAA,EAAS2D,YAAWe,OAAAA,CAAQC,EAAAA;MAC5B5E,MAAAA,EAAQ,CAAA,EAAG4D,WAAAA,CAAWe,OAAAA,CAAQD,EAAE,CAAA,EAAA;AACjC,KAAA;IAEA,QAAA,kBAAA5F,KAACmC,IAAAA,EAAAA;MACAnB,KAAAA,EAAO;QACNE,MAAAA,EAAQ,CAAA;AACRkB,QAAAA,KAAAA,EAAO0C,YAAWhE,MAAAA,CAAOtF,IAAAA;AACzB6G,QAAAA,QAAAA,EAAUyC,YAAWU,SAAAA,CAAUG;AAChC,OAAA;;AAEAxF,wBAAAA,IAACmH,MAAAA,EAAAA;UACAtG,KAAAA,EAAO;YACNoB,KAAAA,EAAOnB,eAAAA;AACPuJ,YAAAA,WAAAA,EAAa1F,YAAWe,OAAAA,CAAQH,EAAAA;YAChClF,UAAAA,EAAY;AACb,WAAA;UAEC+J,QAAAA,EAAAA;;AAEDxK,QAAAA;;;;AAIL;AAhDgBoK,MAAAA,CAAAA,SAAAA,EAAAA,UAAAA,CAAAA;AAAAA,OAAAA,CAAAA,WAAAA,UAAAA,CAAAA;ACLT,SAASM,MAAAA,CAAM,EAAEC,KAAAA,EAAAA,EAAmB;AAC1C,EAAA,uBACCvK,IAACgC,IAAAA,EAAAA;IACAnB,KAAAA,EAAO;MACNE,MAAAA,EAAQ,YAAA;MACRZ,UAAAA,EAAY0J,gBAAAA;MACZ3H,QAAAA,EAAU,MAAA;MACVC,UAAAA,EAAY,CAAA;AACZF,MAAAA,KAAAA,EAAO0H,aAAAA,CAAapC,KAAAA;MACpBpD,aAAAA,EAAe,QAAA;MACfD,aAAAA,EAAe,WAAA;MACf7D,UAAAA,EAAY;AACb,KAAA;IAECkK,QAAAA,EAAAA;;AAGJ;AAjBgBD,MAAAA,CAAAA,MAAAA,EAAAA,OAAAA,CAAAA;AAAAA,OAAAA,CAAAA,QAAAA,OAAAA,CAAAA;ACGT,SAASE,UAAS,EAAE5K,QAAAA,EAAU6K,KAAK,CAAA,EAAGC,EAAAA,GAAK,IAAA,EAAmB;AACpE,EAAA,uBACC1K,IAACgC,IAAAA,EAAAA;IACAnB,KAAAA,EAAO;MACNE,MAAAA,EAAQ,CAAA,EAAG0J,EAAAA,CAAAA,KAAAA,EAAUC,EAAAA,CAAAA,IAAAA,CAAAA;MACrBvK,UAAAA,EAAYyJ,gBAAAA;MACZ1H,QAAAA,EAAU,MAAA;MACVC,UAAAA,EAAY,GAAA;AACZF,MAAAA,KAAAA,EAAO0H,aAAAA,CAAarC,KAAAA;MACpBjH,UAAAA,EAAY;AACb,KAAA;;;AAKH;AAfgBmK,MAAAA,CAAAA,SAAAA,EAAAA,UAAAA,CAAAA;AAAAA,OAAAA,CAAAA,WAAAA,UAAAA,CAAAA;ACIT,SAASG,WAAU,EAAEC,IAAAA,EAAMC,WAAW,KAAA,EAAOC,UAAAA,EAAYC,UAAAA,EAA0B;AACzF,EAAA,uBACClL,KAACqB,OAAAA,EAAAA;IACAL,KAAAA,EAAO;AACNC,MAAAA,eAAAA,EAAiB6D,YAAWhE,MAAAA,CAAO9B,OAAAA;AACnCE,MAAAA,MAAAA,EAAQ,GAAG4F,WAAAA,CAAWkB,WAAW,CAAA,OAAA,EAAUlB,WAAAA,CAAWhE,OAAO5B,MAAM,CAAA,CAAA;AACnE6C,MAAAA,YAAAA,EAAc+C,WAAAA,CAAW/C,YAAAA;AACzBZ,MAAAA,OAAAA,EAAS2D,YAAWe,OAAAA,CAAQC,EAAAA;MAC5B5E,MAAAA,EAAQ,CAAA,EAAG4D,WAAAA,CAAWe,OAAAA,CAAQD,EAAE,CAAA,EAAA;AACjC,KAAA;;MAECoF,QAAAA,IAAYC,UAAAA,oBACZjL,IAAAA,CAACmL,KAAAA,EAAAA;QACAnK,KAAAA,EAAO;AACNQ,UAAAA,YAAAA,EAAcsD,YAAWe,OAAAA,CAAQH,EAAAA;UACjC5D,OAAAA,EAAS,MAAA;UACTsJ,cAAAA,EAAgB,eAAA;UAChBC,UAAAA,EAAY;AACb,SAAA;;AAEAlL,0BAAAA,IAACgC,IAAAA,EAAAA;YACAnB,KAAAA,EAAO;cACNE,MAAAA,EAAQ,CAAA;AACRmB,cAAAA,QAAAA,EAAUyC,YAAWU,SAAAA,CAAUC,EAAAA;AAC/BrD,cAAAA,KAAAA,EAAO0C,YAAWhE,MAAAA,CAAOvB,SAAAA;AACzBe,cAAAA,UAAAA,EAAYwE,YAAWO,KAAAA,CAAME;AAC9B,aAAA;sBAEC2F,QAAAA,IAAY;;AAEd/K,0BAAAA,IAACsC,IAAAA,EAAAA;YACAC,IAAAA,EAAMuI,UAAAA;YACNjK,KAAAA,EAAO;AACNqB,cAAAA,QAAAA,EAAUyC,YAAWU,SAAAA,CAAUC,EAAAA;AAC/BrD,cAAAA,KAAAA,EAAO0C,YAAWhE,MAAAA,CAAO3B,OAAAA;cACzBwD,cAAAA,EAAgB;AACjB,aAAA;YACA,QAAA,EAAA;;;;AAKHxC,sBAAAA,IAACgC,IAAAA,EAAAA;QACAnB,KAAAA,EAAO;AACNV,UAAAA,UAAAA,EAAYwE,YAAWO,KAAAA,CAAME,IAAAA;AAC7BlD,UAAAA,QAAAA,EAAUyC,YAAWU,SAAAA,CAAUE,EAAAA;AAC/BtD,UAAAA,KAAAA,EAAO0C,YAAWhE,MAAAA,CAAOtF,IAAAA;UACzB8P,UAAAA,EAAY,UAAA;UACZC,SAAAA,EAAW,WAAA;UACXrK,MAAAA,EAAQ;AACT,SAAA;QAEC6J,QAAAA,EAAAA;;;;AAIL;AAxDgBD,MAAAA,CAAAA,UAAAA,EAAAA,WAAAA,CAAAA;AAAAA,OAAAA,CAAAA,YAAAA,WAAAA,CAAAA;ACNT,SAASU,SAAAA,CAAS,EAAEzL,QAAAA,EAAAA,EAAyB;AACnD,EAAA,uBACCI,IAACyD,OAAAA,EAAAA;IACA6H,EAAAA,EAAG,IAAA;IACHzK,KAAAA,EAAO;MACNE,MAAAA,EAAQ,YAAA;MACRZ,UAAAA,EAAYyJ,gBAAAA;MACZ1H,QAAAA,EAAU,MAAA;MACVC,UAAAA,EAAY,MAAA;MACZ9B,UAAAA,EAAY,GAAA;AACZ4B,MAAAA,KAAAA,EAAO0H,aAAAA,CAAatO,IAAAA;MACpB0G,SAAAA,EAAW,MAAA;MACXoC,aAAAA,EAAe;AAChB,KAAA;;;AAKH;AAlBgBkH,MAAAA,CAAAA,SAAAA,EAAAA,UAAAA,CAAAA;AAAAA,OAAAA,CAAAA,WAAAA,UAAAA,CAAAA;ACIT,SAAS3I,cAAAA,CAAc,EAAEH,IAAAA,EAAM3C,QAAAA,EAAAA,EAA8B;AACnE,EAAA,uBACCI,IAAC2C,MAAAA,EAAAA;AACAJ,IAAAA,IAAAA;IACA1B,KAAAA,EAAO;AACNC,MAAAA,eAAAA,EAAiB6D,YAAWhE,MAAAA,CAAO3B,OAAAA;AACnCiD,MAAAA,KAAAA,EAAO0C,YAAWhE,MAAAA,CAAO/B,UAAAA;AACzBoC,MAAAA,OAAAA,EAAS,GAAG2D,WAAAA,CAAWe,OAAAA,CAAQC,EAAE,CAAA,CAAA,EAAIhB,WAAAA,CAAWe,QAAQE,EAAE,CAAA,CAAA;AAC1DhE,MAAAA,YAAAA,EAAc+C,WAAAA,CAAW/C,YAAAA;MACzBY,cAAAA,EAAgB,MAAA;MAChBnC,UAAAA,EAAY,GAAA;AACZ6B,MAAAA,QAAAA,EAAUyC,YAAWU,SAAAA,CAAUG,IAAAA;MAC/B7D,OAAAA,EAAS,cAAA;MACTZ,MAAAA,EAAQ,CAAA,EAAG4D,WAAAA,CAAWe,OAAAA,CAAQD,EAAE,CAAA,EAAA,CAAA;MAChC1G,MAAAA,EAAQ,MAAA;MACRwM,MAAAA,EAAQ;AACT,KAAA;;;AAKH;AArBgB7I,MAAAA,CAAAA,cAAAA,EAAAA,eAAAA,CAAAA;AAAAA,OAAAA,CAAAA,gBAAAA,eAAAA,CAAAA;ACCT,SAAS8I,SAAQ,EAAEjB,KAAAA,EAAOkB,KAAAA,EAAOC,IAAAA,EAAMtB,MAAAA,EAAoB;AACjE,EAAA,uBACCpK,IAACkB,OAAAA,EAAAA;IACAL,KAAAA,EAAO;AACNgG,MAAAA,YAAAA,EAAc,GAAGlC,WAAAA,CAAWkB,WAAW,CAAA,OAAA,EAAUlB,WAAAA,CAAWhE,OAAOqE,OAAO,CAAA,CAAA;MAC1EhE,OAAAA,EAAS,CAAA,EAAG2D,WAAAA,CAAWe,OAAAA,CAAQH,EAAE,CAAA,EAAA;AAClC,KAAA;IAEA,QAAA,kBAAAvF,IAAC+G,OAAAA,EAAAA;MAAMvF,KAAAA,EAAM,MAAA;MAAOX,KAAAA,EAAO;QAAEW,KAAAA,EAAO;AAAO,OAAA;MAC1C,QAAA,kBAAA3B,KAACmH,IAAAA,EAAAA;;AACAhH,0BAAAA,IAACiH,IAAAA,EAAAA;YAAGpG,KAAAA,EAAO;cAAEW,KAAAA,EAAO,KAAA;cAAO0F,aAAAA,EAAe;AAAS,aAAA;YAClD,QAAA,kBAAArH,KAACmC,IAAAA,EAAAA;cACAnB,KAAAA,EAAO;gBACNE,MAAAA,EAAQ,CAAA;AACRmB,gBAAAA,QAAAA,EAAUyC,YAAWU,SAAAA,CAAUE,EAAAA;AAC/BtD,gBAAAA,KAAAA,EAAO0C,YAAWhE,MAAAA,CAAOxB,aAAAA;AACzBgB,gBAAAA,UAAAA,EAAYwE,YAAWO,KAAAA,CAAME;AAC9B,eAAA;;gBAECgF,IAAAA,oBAAQpK,IAACmH,MAAAA,EAAAA;kBAAKtG,KAAAA,EAAO;oBAAEwJ,WAAAA,EAAa;AAAM,mBAAA;kBAAID,QAAAA,EAAAA;;AAC9CG,gBAAAA;;;;AAGHvK,0BAAAA,IAACiH,IAAAA,EAAAA;YACApG,KAAAA,EAAO;cACNW,KAAAA,EAAO,KAAA;cACPO,SAAAA,EAAW,OAAA;cACXmF,aAAAA,EAAe;AAChB,aAAA;YAEA,QAAA,kBAAArH,KAACmC,IAAAA,EAAAA;cACAnB,KAAAA,EAAO;gBACNE,MAAAA,EAAQ,CAAA;AACRmB,gBAAAA,QAAAA,EAAUyC,YAAWU,SAAAA,CAAUI,EAAAA;AAC/BxD,gBAAAA,KAAAA,EAAO0C,YAAWhE,MAAAA,CAAO3B,OAAAA;AACzBmB,gBAAAA,UAAAA,EAAYwE,YAAWO,KAAAA,CAAME,IAAAA;gBAC7B/E,UAAAA,EAAY;AACb,eAAA;;AAECoL,gBAAAA,KAAAA;gBACAC,IAAAA,oBACA1L,IAACmH,MAAAA,EAAAA;kBACAtG,KAAAA,EAAO;AACNqB,oBAAAA,QAAAA,EAAUyC,YAAWU,SAAAA,CAAUE,EAAAA;AAC/BtD,oBAAAA,KAAAA,EAAO0C,YAAWhE,MAAAA,CAAOvB,SAAAA;AACzBuM,oBAAAA,UAAAA,EAAYhH,YAAWe,OAAAA,CAAQJ;AAChC,mBAAA;kBAECoG,QAAAA,EAAAA;;;;;;;;;AASV;AAzDgBF,MAAAA,CAAAA,QAAAA,EAAAA,SAAAA,CAAAA;AAAAA,OAAAA,CAAAA,UAAAA,SAAAA,CAAAA;ACJhB,IAAMI,YAAAA,GAAc,SAAA;AAEpB,IAAMC,UAAAA,GAAiC;EACtCrK,KAAAA,EAAO,MAAA;EACPT,MAAAA,EAAQ,YAAA;EACRD,eAAAA,EAAiB8K,YAAAA;EACjBhK,YAAAA,EAAc,KAAA;EACd7C,MAAAA,EAAQ,CAAA,UAAA,EAAa4K,cAAa5K,MAAM,CAAA;AACzC,CAAA;AAEA,IAAM+M,UAAAA,GAAiC;EACtC9K,OAAAA,EAAS,WAAA;EACTb,UAAAA,EAAY0J,gBAAAA;EACZ3H,QAAAA,EAAU,MAAA;EACVC,UAAAA,EAAY,GAAA;AACZF,EAAAA,KAAAA,EAAO0H,aAAAA,CAAapC,KAAAA;EACpB4D,UAAAA,EAAY;AACb,CAAA;AAEO,SAASY,cAAAA,CAAc,EAAEnM,QAAAA,EAAU2L,MAAAA,GAAS,OAAA,EAA2B;AAC7E,EAAA,uBACCvL,IAACkB,OAAAA,EAAAA;IAAQL,KAAAA,EAAOgL,UAAAA;IACf,QAAA,kBAAAhM,KAACmC,IAAAA,EAAAA;MAAKnB,KAAAA,EAAOiL,UAAAA;;AACXlM,QAAAA,QAAAA;QACA2L,MAAAA,mBAASvL,IAACmH,MAAAA,EAAAA;UAAKtG,KAAAA,EAAO;AAAEoB,YAAAA,KAAAA,EAAO0H,aAAAA,CAAapC;AAAM,WAAA;UAAG,QAAA,EAAA;AAAW,SAAA,CAAA,GAAA;;;;AAIrE;AATgBwE,MAAAA,CAAAA,cAAAA,EAAAA,eAAAA,CAAAA;AAAAA,OAAAA,CAAAA,gBAAAA,eAAAA,CAAAA;A8BzB8BjJ,EAAE3I,MAAAA,CAAO;EACnD2B,KAAAA,EAAOgH,CAAAA,CAAEE,MAAAA,EAAM,CAAGlH,KAAAA,EAAK;EACvBiZ,aAAAA,EAAejS,CAAAA,CAAEE,MAAAA,EAAM,CAAGM,QAAAA,EAAQ;AAClC0R,EAAAA,UAAAA,EAAYlS,EAAEK,MAAAA,EAAM,CAAG6I,KAAG,CAAGC,QAAAA,GAAW3I,QAAAA,EAAQ;EAChD2R,YAAAA,EAAcnS,CAAAA,CAAEE,MAAAA,EAAM,CAAGM,QAAAA,EAAQ;AACjCkF,EAAAA,OAAAA,EAAS1F,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA,GAAMK,QAAAA;AAC9B,CAAA;AACA,SAAS4R,mBAAAA,CAAoB,EAAEpZ,KAAAA,EAAOiZ,aAAAA,EAAeC,aAAa,EAAA,EAAIC,YAAAA,GAAe,4CAAA,EAA8CzM,OAAAA,EAAO,EAAG;AACzI,EAAA,MAAMiK,QAAAA,GAAWsC,aAAAA,GAAgB,CAAA,EAAGA,aAAAA,CAAAA,2BAAAA,CAAAA,GAA6C,2BAAA;AACjF,EAAA,MAAMxM,cAAc,CAAA,uCAAA,EAA0CzM,KAAAA,GAAQ,CAAA,KAAA,EAAQA,KAAAA,KAAU,EAAA,CAAA,CAAA;AACxF,EAAA,OAAQ+D,KAAMyI,gBAAAA,EAAiB;AAAEC,IAAAA,WAAAA;AAA0BC,IAAAA,OAAAA;IAAkB5I,QAAAA,EAAU;AAACI,MAAAA,GAAAA,CAAKsK,MAAAA,EAAO;QAAEC,KAAAA,EAAO;OAAiB,CAAA;AAAIvK,MAAAA,GAAAA,CAAKqL,SAAAA,EAAU;QAAEzL,QAAAA,EAAU6S;OAAS,CAAA;AAAI5S,MAAAA,IAAAA,CAAM2K,SAAAA,EAAU;QAAE5K,QAAAA,EAAU;AAAC,UAAA,kBAAA;AAAoBoV,UAAAA,UAAAA;AAAY,UAAA;;OAA4G,CAAA;AAAIhV,MAAAA,GAAAA,CAAKwK,SAAAA,EAAU;QAAEE,EAAAA,EAAI,EAAA;QAAI9K,QAAAA,EAAU;OAA4J,CAAA;AAAII,MAAAA,GAAAA,CAAK+L,cAAAA,EAAe;QAAER,MAAAA,EAAQ,IAAA;QAAM3L,QAAAA,EAAUqV;OAAa;;GAAI,CAAA;AAC7lB;AAJSC,MAAAA,CAAAA,mBAAAA,EAAAA,qBAAAA,CAAAA;AAKTA,mBAAAA,CAAoBvR,YAAAA,GAAe;EAC/B7H,KAAAA,EAAO,eAAA;EACPiZ,aAAAA,EAAe,MAAA;EACfC,UAAAA,EAAY,EAAA;EACZC,YAAAA,EAAc;AAClB,CAAA;CAC2C;EAKvCrR,YAAAA,EAAcsR,mBAAAA,CAAoBvR,YAEtC;ACvB2Cb,EAAE3I,MAAAA,CAAO;AAChDkC,EAAAA,SAAAA,EAAWyG,EAAEE,MAAAA,EAAM;AACnBqJ,EAAAA,OAAAA,EAASvJ,EAAEE,MAAAA,EAAM;AACjBsJ,EAAAA,OAAAA,EAASxJ,EAAEE,MAAAA,EAAM;AACjBuJ,EAAAA,YAAAA,EAAczJ,EAAEK,MAAAA,EAAM;AACtBqJ,EAAAA,WAAAA,EAAa1J,EAAEK,MAAAA,EAAM;EACrBsJ,YAAAA,EAAc3J,CAAAA,CAAEE,MAAAA,EAAM,CAAGM,QAAAA,EAAQ;EACjCoJ,gBAAAA,EAAkB5J,CAAAA,CAAEK,MAAAA,EAAM,CAAGG,QAAAA,EAAQ;EACrCqJ,aAAAA,EAAe7J,CAAAA,CAAEqJ,KAAAA,CAAMrJ,CAAAA,CAAE3I,MAAAA,CAAO;AAC5BiQ,IAAAA,IAAAA,EAAMtH,EAAEE,MAAAA,EAAM;AACd4F,IAAAA,IAAAA,EAAM9F,EAAEE,MAAAA,EAAM;AACd4J,IAAAA,WAAAA,EAAa9J,EAAEE,MAAAA;AACnB,GAAA,CAAA,CAAA;EACAxG,YAAAA,EAAcsG,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA;AAC7B,CAAA;AACA,SAAS8O,iBAAAA,CAAiB,EAAE1V,SAAAA,EAAWgQ,OAAAA,EAASC,OAAAA,EAASC,YAAAA,EAAcC,WAAAA,EAAaC,YAAAA,EAAcC,gBAAAA,EAAkBC,aAAAA,EAAenQ,YAAAA,EAAY,EAAG;AAC9I,EAAA,MAAM2Y,WAAAA,GAAc1I,YAAAA,IAAgBC,gBAAAA,GAC9B+E,IAAAA,CAAK9D,GAAAA,CAAI,GAAA,EAAK8D,IAAAA,CAAK2D,KAAAA,CAAO5I,WAAAA,IAAeA,WAAAA,GAAcE,gBAAAA,CAAAA,GAAqB,GAAA,CAAA,CAAA,GAC5E,GAAA;AACN,EAAA,OAAQ7M,KAAM4C,OAAAA,EAAS;IAAE9C,OAAAA,EAAS,+CAAA;IAAiDC,QAAAA,EAAU;AAACI,MAAAA,GAAAA,CAAKyD,OAAAA,EAAS;QAAE5C,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMK,OAAAA;UAASkD,QAAAA,EAAU,MAAA;UAAQ7B,UAAAA,EAAY,GAAA;UAAKU,MAAAA,EAAQ;AAAU,SAAA;QAAGnB,QAAAA,EAAU;OAAsC,CAAA;AAAIC,MAAAA,IAAAA,CAAMmC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;UAAe+C,QAAAA,EAAU,MAAA;UAAQC,UAAAA,EAAY,KAAA;UAAOpB,MAAAA,EAAQ;AAAW,SAAA;QAAGnB,QAAAA,EAAU;AAACvD,UAAAA,SAAAA;AAAW,UAAA,2BAAA;AAA6B2D,UAAAA,GAAAA,CAAK,QAAA,EAAU;YAAEa,KAAAA,EAAO;AAAEoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMO;AAAY,aAAA;YAAGU,QAAAA,EAAUyM;WAAQ,CAAA;AAAI,UAAA,KAAA;AAAO,UAAA,GAAA;AAAKrM,UAAAA,GAAAA,CAAK,QAAA,EAAU;YAAEa,KAAAA,EAAO;AAAEoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMK;AAAQ,aAAA;YAAGY,QAAAA,EAAU0M;WAAQ,CAAA;AAAI,UAAA,2CAAA;AAA6C,UAAA,GAAA;AAAKC,UAAAA,YAAAA;AAAc,UAAA;;OAAyB,CAAA;AAAI1M,MAAAA,IAAAA,CAAMqB,OAAAA,EAAS;QAAEL,KAAAA,EAAO;AAC/pBC,UAAAA,eAAAA,EAAiBnC,KAAAA,CAAMG,eAAAA;UACvB8C,YAAAA,EAAc,KAAA;UACdZ,OAAAA,EAAS,MAAA;UACTjC,MAAAA,EAAQ,CAAA,UAAA,EAAaJ,MAAMK,OAAO,CAAA,CAAA;UAClCqC,YAAAA,EAAc,MAAA;UACdU,SAAAA,EAAW;AACf,SAAA;QAAGnC,QAAAA,EAAU;AAACI,UAAAA,GAAAA,CAAKgC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AAAEoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMK,OAAAA;cAASkD,QAAAA,EAAU,MAAA;cAAQnB,MAAAA,EAAQ;AAAU,aAAA;YAAGnB,QAAAA,EAAU;WAAe,CAAA;AAAIC,UAAAA,IAAAA,CAAMmC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AAAEoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMK,OAAAA;cAASkD,QAAAA,EAAU,MAAA;cAAQ7B,UAAAA,EAAY,GAAA;cAAKU,MAAAA,EAAQ;AAAU,aAAA;YAAGnB,QAAAA,EAAU;AAAC0M,cAAAA,OAAAA;AAAS,cAAA;;WAAY,CAAA;AAAIzM,UAAAA,IAAAA,CAAMmC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AAAEoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;cAAW8C,QAAAA,EAAU,MAAA;cAAQnB,MAAAA,EAAQ;AAAE,aAAA;YAAGnB,QAAAA,EAAU;AAAC4M,cAAAA,WAAAA,CAAY0E,cAAAA,EAAc;AAAI,cAAA;;WAAiB;;OAAI,CAAA;MAAIvE,aAAAA,CAAcqF,MAAAA,GAAS,CAAA,IAAMnS,IAAAA,CAAM6D,QAAAA,EAAW;QAAE9D,QAAAA,EAAU;AAACI,UAAAA,GAAAA,CAAKgC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AAC1doB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;cACb+C,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,GAAA;cACZU,MAAAA,EAAQ,UAAA;cACRmD,aAAAA,EAAe,WAAA;cACfC,aAAAA,EAAe;AACnB,aAAA;YAAGvE,QAAAA,EAAU;WAAiB,CAAA;AAAI+M,UAAAA,aAAAA,CAAc4D,GAAAA,CAAI,CAAC0B,IAAAA,EAAMoD,CAAAA,KAAOrV,IAAKkB,OAAAA,EAAS;YAAEL,KAAAA,EAAO;AACrFC,cAAAA,eAAAA,EAAiBnC,KAAAA,CAAMG,eAAAA;cACvB8C,YAAAA,EAAc,KAAA;cACdZ,OAAAA,EAAS,WAAA;cACTjC,MAAAA,EAAQ,CAAA,UAAA,EAAaJ,MAAMI,MAAM,CAAA,CAAA;cACjCsC,YAAAA,EAAc;AAClB,aAAA;AAAGzB,YAAAA,QAAAA,EAAUI,IAAK,OAAA,EAAS;cAAEa,KAAAA,EAAO;gBAAEW,KAAAA,EAAO,MAAA;gBAAQ4C,cAAAA,EAAgB;AAAW,eAAA;AAAGxE,cAAAA,QAAAA,EAAUI,IAAK,OAAA,EAAS;AAAEJ,gBAAAA,QAAAA,EAAUC,KAAM,IAAA,EAAM;kBAAED,QAAAA,EAAU;AAACI,oBAAAA,GAAAA,CAAK,IAAA,EAAM;sBAAEa,KAAAA,EAAO;wBAC5IW,KAAAA,EAAO,MAAA;wBACP0F,aAAAA,EAAe,KAAA;wBACfhF,QAAAA,EAAU,MAAA;wBACViE,UAAAA,EAAY;AAChB,uBAAA;AAAGvG,sBAAAA,QAAAA,EAAUqS,IAAAA,CAAK7H;qBAAK,CAAA;AAAIvK,oBAAAA,IAAAA,CAAM,IAAA,EAAM;sBAAED,QAAAA,EAAU;AAACI,wBAAAA,GAAAA,CAAKgC,IAAAA,EAAM;0BAAEnB,KAAAA,EAAO;AAC5DoB,4BAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;4BACbgD,QAAAA,EAAU,MAAA;4BACV7B,UAAAA,EAAY,GAAA;4BACZU,MAAAA,EAAQ;AACZ,2BAAA;AAAGnB,0BAAAA,QAAAA,EAAUqS,IAAAA,CAAKrJ;yBAAK,CAAA;AAAI5I,wBAAAA,GAAAA,CAAKgC,IAAAA,EAAM;0BAAEnB,KAAAA,EAAO;AAAEoB,4BAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;4BAAW8C,QAAAA,EAAU,MAAA;4BAAQnB,MAAAA,EAAQ;AAAE,2BAAA;AAAGnB,0BAAAA,QAAAA,EAAUqS,IAAAA,CAAKrF;yBAAY;;qBAAI;;iBAAI;eAAG;aAAG;AAAG,WAAA,EAAGyI,CAAAA,CAAAA;;OAAM,CAAA;MAAK5I,YAAAA,IAAgBC,gBAAAA,IAAqB7M,KAAMqB,OAAAA,EAAS;QAAEL,KAAAA,EAAO;UAAEiB,SAAAA,EAAW,MAAA;UAAQT,YAAAA,EAAc;AAAO,SAAA;QAAGzB,QAAAA,EAAU;AAACI,UAAAA,GAAAA,CAAK,OAAA,EAAS;YAAEa,KAAAA,EAAO;cAAEW,KAAAA,EAAO,MAAA;cAAQ4C,cAAAA,EAAgB,UAAA;cAAY/C,YAAAA,EAAc;AAAM,aAAA;AAAGzB,YAAAA,QAAAA,EAAUI,IAAK,OAAA,EAAS;AAAEJ,cAAAA,QAAAA,EAAUC,KAAM,IAAA,EAAM;gBAAED,QAAAA,EAAU;AAACC,kBAAAA,IAAAA,CAAM,IAAA,EAAM;oBAAEgB,KAAAA,EAAO;AAAEoB,sBAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;sBAAW8C,QAAAA,EAAU;AAAO,qBAAA;oBAAGtC,QAAAA,EAAU;AAAC,sBAAA,cAAA;AAAgB6M,sBAAAA;;mBAAc,CAAA;AAAI5M,kBAAAA,IAAAA,CAAM,IAAA,EAAM;oBAAEgB,KAAAA,EAAO;AAAEoB,sBAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;sBAAW8C,QAAAA,EAAU,MAAA;sBAAQH,SAAAA,EAAW;AAAQ,qBAAA;oBAAGnC,QAAAA,EAAU;AAAC8M,sBAAAA,gBAAAA;AAAkB,sBAAA;;mBAAc;;eAAI;aAAG;WAAG,CAAA;AAAI1M,UAAAA,GAAAA,CAAK,OAAA,EAAS;YAAEa,KAAAA,EAAO;cAAEW,KAAAA,EAAO,MAAA;cAAQ4C,cAAAA,EAAgB;AAAW,aAAA;AAAGxE,YAAAA,QAAAA,EAAUI,IAAK,OAAA,EAAS;AAAEJ,cAAAA,QAAAA,EAAUI,IAAK,IAAA,EAAM;AAAEJ,gBAAAA,QAAAA,EAAUI,IAAK,IAAA,EAAM;AAAEJ,kBAAAA,QAAAA,EAAUI,IAAK,KAAA,EAAO;oBAAEa,KAAAA,EAAO;AACp2BC,sBAAAA,eAAAA,EAAiBnC,KAAAA,CAAMG,eAAAA;sBACvB8C,YAAAA,EAAc,KAAA;sBACdH,MAAAA,EAAQ,KAAA;sBACR6T,QAAAA,EAAU;AACd,qBAAA;AAAG1V,oBAAAA,QAAAA,EAAUI,IAAK,KAAA,EAAO;sBAAEa,KAAAA,EAAO;AAC1BC,wBAAAA,eAAAA,EAAiBnC,KAAAA,CAAMK,OAAAA;wBACvByC,MAAAA,EAAQ,KAAA;AACRD,wBAAAA,KAAAA,EAAO,GAAG2T,WAAAA,CAAAA,CAAAA,CAAAA;wBACVvT,YAAAA,EAAc;AAClB;qBAAE;mBAAG;iBAAG;eAAG;aAAG;WAAG;;OAAI,CAAA;AAAK5B,MAAAA,GAAAA,CAAK0C,aAAAA,EAAe;QAAEH,IAAAA,EAAM/F,YAAAA;QAAcoD,QAAAA,EAAU;OAAyB,CAAA;AAAII,MAAAA,GAAAA,CAAKoC,EAAAA,EAAI;QAAEvB,KAAAA,EAAO;AAAEwB,UAAAA,WAAAA,EAAa1D,KAAAA,CAAMI,MAAAA;UAAQgC,MAAAA,EAAQ;AAAS;OAAE,CAAA;AAAIf,MAAAA,GAAAA,CAAKgC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;UAAW8C,QAAAA,EAAU,MAAA;UAAQnB,MAAAA,EAAQ;AAAE,SAAA;QAAGnB,QAAAA,EAAU;OAA8D;;GAAI,CAAA;AACtX;AA7CSmS,MAAAA,CAAAA,iBAAAA,EAAAA,kBAAAA,CAAAA;AA8CTA,iBAAAA,CAAiBpO,YAAAA,GAAe;EAC5BtH,SAAAA,EAAW,MAAA;EACXgQ,OAAAA,EAAS,QAAA;EACTC,OAAAA,EAAS,MAAA;EACTC,YAAAA,EAAc,GAAA;EACdC,WAAAA,EAAa,GAAA;EACbC,YAAAA,EAAc,UAAA;EACdC,gBAAAA,EAAkB,GAAA;EAClBC,aAAAA,EAAe;AACX,IAAA;MAAEvC,IAAAA,EAAM,QAAA;MAAKxB,IAAAA,EAAM,uBAAA;MAAyBgE,WAAAA,EAAa;AAAwC,KAAA;AACjG,IAAA;MAAExC,IAAAA,EAAM,iBAAA;MAAOxB,IAAAA,EAAM,2BAAA;MAA6BgE,WAAAA,EAAa;AAAyC,KAAA;AACxG,IAAA;MAAExC,IAAAA,EAAM,WAAA;MAAMxB,IAAAA,EAAM,aAAA;MAAegE,WAAAA,EAAa;AAAmC;;EAEvFpQ,YAAAA,EAAc;AAClB,CAAA;CAC+C;EAK3CoH,YAAAA,EAAcmO,iBAAAA,CAAiBpO,YAEnC;ACpFwCb,EAAE3I,MAAAA,CAAO;EAC7Cob,QAAAA,EAAUzS,CAAAA,CAAEE,MAAAA,EAAM,CAAGM,QAAAA,EAAQ;EAC7BkS,KAAAA,EAAO1S,CAAAA,CAAEqJ,KAAAA,CAAMrJ,CAAAA,CAAE3I,MAAAA,CAAO;AACpBsb,IAAAA,GAAAA,EAAK3S,EAAEE,MAAAA,EAAM;AACblG,IAAAA,KAAAA,EAAOgG,EAAEE,MAAAA,EAAM;AACf4J,IAAAA,WAAAA,EAAa9J,EAAEE,MAAAA;AACnB,GAAA,CAAA,CAAA;EACA0S,QAAAA,EAAU5S,CAAAA,CAAEE,MAAAA,EAAM,CAAGM,QAAAA,EAAQ;AAC7BqS,EAAAA,OAAAA,EAAS7S,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA,GAAMK,QAAAA,EAAQ;AAClCkF,EAAAA,OAAAA,EAAS1F,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA,GAAMK,QAAAA;AAC9B,CAAA;AACA,SAASsS,cAAc,EAAEL,QAAAA,EAAUC,OAAOE,QAAAA,EAAUC,OAAAA,EAASnN,SAAO,EAAE;AAClE,EAAA,OAAQ3I,KAAMyI,gBAAAA,EAAiB;IAAEC,WAAAA,EAAa,sDAAA;AAAwDC,IAAAA,OAAAA;IAAkB5I,QAAAA,EAAU;AAACI,MAAAA,GAAAA,CAAKsK,MAAAA,EAAO;QAAEC,KAAAA,EAAO;OAAiB,CAAA;AAAIvK,MAAAA,GAAAA,CAAKqL,SAAAA,EAAU;AAAEzL,QAAAA,QAAAA,EAAU2V,QAAAA,IAAY;OAAkD,CAAA;AAAIvV,MAAAA,GAAAA,CAAKwK,SAAAA,EAAU;QAAEE,EAAAA,EAAI,CAAA;QAAG9K,QAAAA,EAAU;OAA0E,CAAA;AAAII,MAAAA,GAAAA,CAAKkB,OAAAA,EAAS;QAAEL,KAAAA,EAAO;UAAEiB,SAAAA,EAAW,MAAA;UAAQT,YAAAA,EAAc;AAAO,SAAA;AAAGzB,QAAAA,QAAAA,EAAU4V,MAAMjF,GAAAA,CAAI,CAACsF,IAAAA,EAAM3D,KAAAA,KAAWrS,KAAMqB,OAAAA,EAAS;UAAEL,KAAAA,EAAO;YACxeG,OAAAA,EAAS,QAAA;AACT6F,YAAAA,YAAAA,EAAcqL,KAAAA,KAAUsD,KAAAA,CAAMxD,MAAAA,GAAS,CAAA,GAAI,MAAA,GAAS;AACxD,WAAA;UAAGpS,QAAAA,EAAU;AAACI,YAAAA,GAAAA,CAAKgC,IAAAA,EAAM;cAAEnB,KAAAA,EAAO;gBACtBE,MAAAA,EAAQ,WAAA;gBACRZ,UAAAA,EAAY,2BAAA;gBACZ+B,QAAAA,EAAU,MAAA;gBACVD,KAAAA,EAAO,SAAA;gBACPkC,aAAAA,EAAe,OAAA;gBACfD,aAAAA,EAAe,WAAA;gBACf7D,UAAAA,EAAY;AAChB,eAAA;AAAGT,cAAAA,QAAAA,EAAUiW,IAAAA,CAAKJ;aAAI,CAAA;AAAIzV,YAAAA,GAAAA,CAAKgC,IAAAA,EAAM;cAAEnB,KAAAA,EAAO;gBAC1CE,MAAAA,EAAQ,WAAA;gBACRZ,UAAAA,EAAY,oFAAA;gBACZ+B,QAAAA,EAAU,MAAA;gBACV7B,UAAAA,EAAY,GAAA;gBACZ4B,KAAAA,EAAO,SAAA;gBACPE,UAAAA,EAAY;AAChB,eAAA;AAAGvC,cAAAA,QAAAA,EAAUiW,IAAAA,CAAK/Y;aAAM,CAAA;AAAIkD,YAAAA,GAAAA,CAAKgC,IAAAA,EAAM;cAAEnB,KAAAA,EAAO;gBAC5CE,MAAAA,EAAQ,CAAA;gBACRZ,UAAAA,EAAY,oFAAA;gBACZ+B,QAAAA,EAAU,MAAA;gBACVD,KAAAA,EAAO,SAAA;gBACPE,UAAAA,EAAY;AAChB,eAAA;AAAGvC,cAAAA,QAAAA,EAAUiW,IAAAA,CAAKjJ;aAAY;;SAAI,EAAG,CAAA,EAAGiJ,KAAKJ,GAAG,CAAA,CAAA,EAAII,KAAK/Y,KAAK,CAAA,CAAA,EAAIoV,KAAAA,CAAAA,CAAO,CAAA;OAAI,CAAA;AAAIlS,MAAAA,GAAAA,CAAK0C,cAAAA,EAAe;AAAEH,QAAAA,IAAAA,EAAMoT,OAAAA,IAAW,qCAAA;AAAuC/V,QAAAA,QAAAA,EAAU8V,QAAAA,IAAY;OAA0B;;GAAI,CAAA;AAC/O;AA1BSE,MAAAA,CAAAA,aAAAA,EAAAA,eAAAA,CAAAA;AA2BTA,aAAAA,CAAcjS,YAAAA,GAAe;EACzB4R,QAAAA,EAAU,iDAAA;EACVC,KAAAA,EAAO;AACH,IAAA;MACIC,GAAAA,EAAK,KAAA;MACL3Y,KAAAA,EAAO,iDAAA;MACP8P,WAAAA,EAAa;AACjB,KAAA;AACA,IAAA;MACI6I,GAAAA,EAAK,OAAA;MACL3Y,KAAAA,EAAO,oDAAA;MACP8P,WAAAA,EAAa;AACjB;;EAEJ8I,QAAAA,EAAU,yBAAA;EACVC,OAAAA,EAAS;AACb,CAAA;CACqC;EAKjC/R,YAAAA,EAAcgS,aAAAA,CAAcjS,YAEhC;ACtDsCb,EAAE3I,MAAAA,CAAO;AAC3CkC,EAAAA,SAAAA,EAAWyG,EAAEE,MAAAA,EAAM;AACnB8S,EAAAA,gBAAAA,EAAkBhT,EAAEK,MAAAA,EAAM;AAC1B4S,EAAAA,eAAAA,EAAiBjT,EAAEK,MAAAA,EAAM;AACzB6S,EAAAA,eAAAA,EAAiBlT,EAAEE,MAAAA,EAAM;AACzBuJ,EAAAA,YAAAA,EAAczJ,EAAEK,MAAAA,EAAM;AACtBqJ,EAAAA,WAAAA,EAAa1J,EAAEK,MAAAA,EAAM;EACrB8S,UAAAA,EAAYnT,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA;AAC3B,CAAA;ACRuCH,EAAE3I,MAAAA,CAAO;AAC5CkC,EAAAA,SAAAA,EAAWyG,EAAEE,MAAAA,EAAM;AACnBkT,EAAAA,mBAAAA,EAAqBpT,EAAEK,MAAAA,EAAM;AAC7BgT,EAAAA,iBAAAA,EAAmBrT,EAAEK,MAAAA,EAAM;AAC3BiT,EAAAA,eAAAA,EAAiBtT,EAAEK,MAAAA,EAAM;EACzBkT,cAAAA,EAAgBvT,CAAAA,CAAEE,MAAAA,EAAM,CAAGM,QAAAA,EAAQ;EACnC9G,YAAAA,EAAcsG,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA;AAC7B,CAAA;ACP4CH,EAAE3I,MAAAA,CAAO;AACjDkC,EAAAA,SAAAA,EAAWyG,EAAEE,MAAAA,EAAM;EACnBsT,YAAAA,EAAcxT,CAAAA,CAAEE,MAAAA,EAAM,CAAGM,QAAAA,EAAQ;AACjCiJ,EAAAA,YAAAA,EAAczJ,EAAEK,MAAAA,EAAM;AACtBqJ,EAAAA,WAAAA,EAAa1J,EAAEK,MAAAA,EAAM;AACrBoT,EAAAA,gBAAAA,EAAkBzT,EAAEK,MAAAA,EAAM;AAC1BqT,EAAAA,cAAAA,EAAgB1T,EAAEK,MAAAA,EAAM;EACxB8S,UAAAA,EAAYnT,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA;AAC3B,CAAA;ACfsCH,EAAE3I,MAAAA,CAAO;AAC3C2C,EAAAA,KAAAA,EAAOgG,EAAEE,MAAAA,EAAM;AACfjG,EAAAA,OAAAA,EAAS+F,EAAEE,MAAAA,EAAM;AACjB7F,EAAAA,QAAAA,EAAU2F,EAAE2K,IAAAA,CAAK;AAAC,IAAA,UAAA;AAAY,IAAA,SAAA;AAAW,IAAA;AAAO,GAAA,CAAA;AAChDrQ,EAAAA,cAAAA,EAAgB0F,EAAE2T,OAAAA,EAAO;AACzB5Y,EAAAA,SAAAA,EAAWiF,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA,GAAMK,QAAAA,EAAQ;EACpCvF,WAAAA,EAAa+E,CAAAA,CAAEE,MAAAA,EAAM,CAAGM,QAAAA,EAAQ;EAChCjG,iBAAAA,EAAmByF,CAAAA,CAAEE,MAAAA,EAAM,CAAGM,QAAAA,EAAQ;AACtChG,EAAAA,SAAAA,EAAWwF,EAAEE,MAAAA;AACjB,CAAA;AACA,IAAM0T,cAAAA,GAAiB;EACnBhQ,QAAAA,EAAU;AAAEzE,IAAAA,KAAAA,EAAOtD,KAAAA,CAAMU,MAAAA;IAAQkL,KAAAA,EAAO;AAAW,GAAA;EACnDjL,OAAAA,EAAS;AAAE2C,IAAAA,KAAAA,EAAOtD,KAAAA,CAAMW,OAAAA;IAASiL,KAAAA,EAAO;AAAU,GAAA;EAClD/K,IAAAA,EAAM;AAAEyC,IAAAA,KAAAA,EAAOtD,KAAAA,CAAMa,IAAAA;IAAM+K,KAAAA,EAAO;AAAO;AAC7C,CAAA;AACA,SAAS4H,YAAAA,CAAY,EAAErV,KAAAA,EAAOC,OAAAA,EAASI,QAAAA,EAAUC,gBAAgBS,SAAAA,EAAWE,WAAAA,EAAaV,iBAAAA,EAAmBC,SAAAA,EAAS,EAAG;AACpH,EAAA,MAAMkD,OAAAA,GAASkW,eAAevZ,QAAAA,CAAAA;AAC9B,EAAA,OAAQ0C,KAAM4C,OAAAA,EAAS;IAAE9C,OAAAA,EAAS5C,OAAAA,CAAQ6V,KAAAA,CAAM,CAAA,EAAG,EAAA,CAAA;IAAKhT,QAAAA,EAAU;AAACC,MAAAA,IAAAA,CAAMqB,OAAAA,EAAS;QAAEL,KAAAA,EAAO;UAC3EuH,UAAAA,EAAY,CAAA,UAAA,EAAa5H,QAAOyB,KAAK,CAAA,CAAA;UACrC0U,WAAAA,EAAa,MAAA;UACbtV,YAAAA,EAAc;AAClB,SAAA;QAAGzB,QAAAA,EAAU;AAACI,UAAAA,GAAAA,CAAKgC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AACtBoB,cAAAA,KAAAA,EAAOzB,OAAAA,CAAOyB,KAAAA;cACdC,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,GAAA;cACZU,MAAAA,EAAQ,SAAA;cACRmD,aAAAA,EAAe,WAAA;cACfC,aAAAA,EAAe;AACnB,aAAA;AAAGvE,YAAAA,QAAAA,EAAUY,OAAAA,CAAO+J;WAAM,CAAA;AAAIvK,UAAAA,GAAAA,CAAKyD,OAAAA,EAAS;YAAE5C,KAAAA,EAAO;AAAEoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;cAAagD,QAAAA,EAAU,MAAA;cAAQ7B,UAAAA,EAAY,GAAA;cAAKU,MAAAA,EAAQ;AAAU,aAAA;YAAGnB,QAAAA,EAAU9C;WAAM,CAAA;AAAIkD,UAAAA,GAAAA,CAAKgC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AAAEoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;cAAe+C,QAAAA,EAAU,MAAA;cAAQC,UAAAA,EAAY,KAAA;cAAOpB,MAAAA,EAAQ;AAAE,aAAA;YAAGnB,QAAAA,EAAU7C;WAAQ;;OAAI,CAAA;AAAIM,MAAAA,iBAAAA,IAAsB2C,IAAKkB,OAAAA,EAAS;QAAEL,KAAAA,EAAO;AAC5UC,UAAAA,eAAAA,EAAiBnC,KAAAA,CAAMG,eAAAA;UACvB8C,YAAAA,EAAc,KAAA;UACdZ,OAAAA,EAAS,MAAA;UACTjC,MAAAA,EAAQ,CAAA,UAAA,EAAaJ,MAAMI,MAAM,CAAA,CAAA;UACjCsC,YAAAA,EAAc;AAClB,SAAA;AAAGzB,QAAAA,QAAAA,EAAUI,IAAKgC,IAAAA,EAAM;UAAEnB,KAAAA,EAAO;AACzBoB,YAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;YACb+C,QAAAA,EAAU,MAAA;YACVC,UAAAA,EAAY,KAAA;YACZpB,MAAAA,EAAQ,CAAA;YACRZ,UAAAA,EAAY;AAChB,WAAA;UAAGP,QAAAA,EAAUvC;SAAkB;OAAG,CAAA;MAAKD,cAAAA,IAAkBS,SAAAA,IAAaE,WAAAA,IAAgBiC,GAAAA,CAAK0C,aAAAA,EAAe;QAAEH,IAAAA,EAAM1E,SAAAA;QAAW+B,QAAAA,EAAU7B;OAAY,CAAA;AAAKiC,MAAAA,GAAAA,CAAKoC,EAAAA,EAAI;QAAEvB,KAAAA,EAAO;AAAEwB,UAAAA,WAAAA,EAAa1D,KAAAA,CAAMI,MAAAA;UAAQgC,MAAAA,EAAQ;AAAS;OAAE,CAAA;AAAIlB,MAAAA,IAAAA,CAAMmC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;UAAW8C,QAAAA,EAAU,MAAA;UAAQnB,MAAAA,EAAQ;AAAE,SAAA;QAAGnB,QAAAA,EAAU;AAAC,UAAA,UAAA;AAAYtC,UAAAA;;OAAW;;GAAI,CAAA;AACtW;AA1BS6U,MAAAA,CAAAA,YAAAA,EAAAA,aAAAA,CAAAA;AA2BTA,YAAAA,CAAYxO,YAAAA,GAAe;EACvB7G,KAAAA,EAAO,8BAAA;EACPC,OAAAA,EAAS,qHAAA;EACTI,QAAAA,EAAU,UAAA;EACVC,cAAAA,EAAgB,IAAA;EAChBS,SAAAA,EAAW,oCAAA;EACXE,WAAAA,EAAa,qBAAA;EACbV,iBAAAA,EAAmB,2FAAA;EACnBC,SAAAA,EAAW;AACf,CAAA;CAC0C;EAKtCsG,YAAAA,EAAcuO,YAAAA,CAAYxO,YAE9B;AC5D+Cb,EAAE3I,MAAAA,CAAO;EACpD2B,KAAAA,EAAOgH,CAAAA,CAAEE,MAAAA,EAAM,CAAGlH,KAAAA,EAAK;EACvBW,OAAAA,EAASqG,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA,EAAG;EACvB2T,UAAAA,EAAY9T,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA;AAC3B,CAAA;AACO,SAAS4T,oBAAAA,CAAqB,EAAE/a,KAAAA,EAAOW,OAAAA,EAASma,YAAU,EAAE;AAC/D,EAAA,OAAQ/W,KAAM4C,OAAAA,EAAS;IAAE9C,OAAAA,EAAS,uCAAA;IAAyCC,QAAAA,EAAU;AAACI,MAAAA,GAAAA,CAAKyD,OAAAA,EAAS;QAAE5C,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;UAAagD,QAAAA,EAAU,MAAA;UAAQ7B,UAAAA,EAAY,GAAA;UAAKU,MAAAA,EAAQ;AAAU,SAAA;QAAGnB,QAAAA,EAAU;OAAwC,CAAA;AAAII,MAAAA,GAAAA,CAAKgC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;UAAe+C,QAAAA,EAAU,MAAA;UAAQC,UAAAA,EAAY,KAAA;UAAOpB,MAAAA,EAAQ;AAAW,SAAA;QAAGnB,QAAAA,EAAU;OAAuJ,CAAA;AAAIC,MAAAA,IAAAA,CAAMqB,OAAAA,EAAS;QAAEL,KAAAA,EAAO;AACjhBC,UAAAA,eAAAA,EAAiBnC,KAAAA,CAAMG,eAAAA;UACvB8C,YAAAA,EAAc,KAAA;UACdZ,OAAAA,EAAS,MAAA;UACTjC,MAAAA,EAAQ,CAAA,UAAA,EAAaJ,MAAMI,MAAM,CAAA,CAAA;UACjCsC,YAAAA,EAAc;AAClB,SAAA;QAAGzB,QAAAA,EAAU;AAACI,UAAAA,GAAAA,CAAKgC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AACtBoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;cACb+C,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,GAAA;cACZU,MAAAA,EAAQ,UAAA;cACRmD,aAAAA,EAAe,WAAA;cACfC,aAAAA,EAAe;AACnB,aAAA;YAAGvE,QAAAA,EAAU;WAAkB,CAAA;AAAIC,UAAAA,IAAAA,CAAMmC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AAAEoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;cAAagD,QAAAA,EAAU,MAAA;cAAQnB,MAAAA,EAAQ;AAAU,aAAA;YAAGnB,QAAAA,EAAU;AAACI,cAAAA,GAAAA,CAAK,MAAA,EAAQ;gBAAEa,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAOtD,KAAAA,CAAMK,OAAAA;kBAASqL,WAAAA,EAAa;AAAM,iBAAA;gBAAGzK,QAAAA,EAAU;eAAS,CAAA;AAAII,cAAAA,GAAAA,CAAK,GAAA,EAAK;gBAAEuC,IAAAA,EAAM9F,OAAAA;gBAASoE,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAOtD,KAAAA,CAAMK,OAAAA;kBAASwD,cAAAA,EAAgB;AAAO,iBAAA;gBAAG5C,QAAAA,EAAU;eAAgB;;WAAI,CAAA;AAAIC,UAAAA,IAAAA,CAAMmC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AAAEoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;cAAagD,QAAAA,EAAU,MAAA;cAAQnB,MAAAA,EAAQ;AAAE,aAAA;YAAGnB,QAAAA,EAAU;AAACI,cAAAA,GAAAA,CAAK,MAAA,EAAQ;gBAAEa,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAOtD,KAAAA,CAAMK,OAAAA;kBAASqL,WAAAA,EAAa;AAAM,iBAAA;gBAAGzK,QAAAA,EAAU;eAAS,CAAA;AAAII,cAAAA,GAAAA,CAAK,GAAA,EAAK;gBAAEuC,IAAAA,EAAMqU,UAAAA;gBAAY/V,KAAAA,EAAO;AAAEoB,kBAAAA,KAAAA,EAAOtD,KAAAA,CAAMK,OAAAA;kBAASwD,cAAAA,EAAgB;AAAO,iBAAA;gBAAG5C,QAAAA,EAAU;eAAU;;WAAI;;OAAI,CAAA;AAAII,MAAAA,GAAAA,CAAKoC,EAAAA,EAAI;QAAEvB,KAAAA,EAAO;AAAEwB,UAAAA,WAAAA,EAAa1D,KAAAA,CAAMI,MAAAA;UAAQgC,MAAAA,EAAQ;AAAS;OAAE,CAAA;AAAIf,MAAAA,GAAAA,CAAKgC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;UAAW8C,QAAAA,EAAU,MAAA;UAAQnB,MAAAA,EAAQ;AAAE,SAAA;QAAGnB,QAAAA,EAAU;OAAyB;;GAAI,CAAA;AACt1B;AAfgBiX,MAAAA,CAAAA,oBAAAA,EAAAA,sBAAAA,CAAAA;AAgBhBA,oBAAAA,CAAqBlT,YAAAA,GAAe;EAChC7H,KAAAA,EAAO,iBAAA;EACPW,OAAAA,EAAS,wBAAA;EACTma,UAAAA,EAAY;AAChB,CAAA;CAC4C;EAKxChT,YAAAA,EAAciT,oBAAAA,CAAqBlT,YAEvC;AChCuCb,EAAE3I,MAAAA,CAAO;AAC5CkC,EAAAA,SAAAA,EAAWyG,EAAEE,MAAAA,EAAM;AACnB6J,EAAAA,aAAAA,EAAe/J,EAAEE,MAAAA,EAAM;AACvB8J,EAAAA,WAAAA,EAAahK,EAAEE,MAAAA,EAAM;AACrB+J,EAAAA,KAAAA,EAAOjK,EAAE3I,MAAAA,CAAO;AACZ6S,IAAAA,cAAAA,EAAgBlK,EAAEK,MAAAA,EAAM;AACxB8J,IAAAA,WAAAA,EAAanK,EAAEK,MAAAA,EAAM;AACrB+J,IAAAA,iBAAAA,EAAmBpK,EAAEK,MAAAA,EAAM;AAC3BgK,IAAAA,cAAAA,EAAgBrK,EAAEK,MAAAA,EAAM;AACxBkK,IAAAA,mBAAAA,EAAqBvK,EAAEK,MAAAA,EAAM;AAC7BmK,IAAAA,wBAAAA,EAA0BxK,EACrB3I,MAAAA,CAAO;AACR2c,MAAAA,cAAAA,EAAgBhU,EAAEK,MAAAA,EAAM;AACxB4T,MAAAA,gBAAAA,EAAkBjU,EAAEK,MAAAA;AACxB,KAAA,EACKG,QAAAA;GACT,CAAA;EACAiK,UAAAA,EAAYzK,CAAAA,CAAEqJ,KAAAA,CAAMrJ,CAAAA,CAAE3I,MAAAA,CAAO;AACzBiQ,IAAAA,IAAAA,EAAMtH,EAAEE,MAAAA,EAAM;AACdlG,IAAAA,KAAAA,EAAOgG,EAAEE,MAAAA,EAAM;AACf4J,IAAAA,WAAAA,EAAa9J,EAAEE,MAAAA;AACnB,GAAA,CAAA,CAAA;EACAxG,YAAAA,EAAcsG,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA;AAC7B,CAAA;AACA,SAAS+T,WAAWC,KAAAA,EAAK;AACrB,EAAA,IAAIA,QAAQ,CAAA,EAAG;AACX,IAAA,OAAO,IAAIA,KAAAA,CAAAA,eAAAA,CAAAA;AACf,EAAA;AACA,EAAA,IAAIA,QAAQ,CAAA,EAAG;AACX,IAAA,OAAO,GAAGA,KAAAA,CAAAA,eAAAA,CAAAA;AACd,EAAA;AACA,EAAA,OAAO,mBAAA;AACX;AARSD,MAAAA,CAAAA,UAAAA,EAAAA,YAAAA,CAAAA;AAST,SAAS1E,aAAAA,CAAa,EAAEjW,SAAAA,EAAWwQ,aAAAA,EAAeC,aAAaC,KAAAA,EAAOQ,UAAAA,EAAY/Q,cAAY,EAAE;AAC5F,EAAA,MAAM0a,SAAAA,GAAY;AACd,IAAA;MAAE3M,KAAAA,EAAO,WAAA;AAAakB,MAAAA,KAAAA,EAAOsB,KAAAA,CAAMC,cAAAA;AAAgBiK,MAAAA,KAAAA,EAAOlK,MAAMO,wBAAAA,EAA0BwJ;AAAe,KAAA;AACzG,IAAA;MAAEvM,KAAAA,EAAO,cAAA;AAAgBkB,MAAAA,KAAAA,EAAOsB,KAAAA,CAAME,WAAAA;MAAagK,KAAAA,EAAOvE;AAAU,KAAA;AACpE,IAAA;MACInI,KAAAA,EAAO,oBAAA;AACPkB,MAAAA,KAAAA,EAAOsB,KAAAA,CAAMG,iBAAAA;AACb+J,MAAAA,KAAAA,EAAOlK,MAAMO,wBAAAA,EAA0ByJ;AAC3C,KAAA;AACA,IAAA;MAAExM,KAAAA,EAAO,iBAAA;AAAmBkB,MAAAA,KAAAA,EAAOsB,KAAAA,CAAMI,cAAAA;MAAgB8J,KAAAA,EAAOvE;AAAU,KAAA;AAC1E,IAAA;MAAEnI,KAAAA,EAAO,gBAAA;AAAkBkB,MAAAA,KAAAA,EAAOsB,KAAAA,CAAMM,mBAAAA;MAAqB4J,KAAAA,EAAOvE;AAAU;;AAElF,EAAA,OAAQ7S,KAAM4C,OAAAA,EAAS;IAAE9C,OAAAA,EAAS,2CAAA;IAA6CC,QAAAA,EAAU;AAACI,MAAAA,GAAAA,CAAKyD,OAAAA,EAAS;QAAE5C,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;UAAagD,QAAAA,EAAU,MAAA;UAAQ7B,UAAAA,EAAY,GAAA;UAAKU,MAAAA,EAAQ;AAAU,SAAA;QAAGnB,QAAAA,EAAU;OAAmC,CAAA;AAAIC,MAAAA,IAAAA,CAAMmC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;UAAe+C,QAAAA,EAAU,MAAA;UAAQC,UAAAA,EAAY,KAAA;UAAOpB,MAAAA,EAAQ;AAAW,SAAA;QAAGnB,QAAAA,EAAU;AAACvD,UAAAA,SAAAA;AAAW,UAAA,+CAAA;AAAiDwQ,UAAAA,aAAAA;AAAe,UAAA,UAAA;AAAYC,UAAAA,WAAAA;AAAa,UAAA;;OAAK,CAAA;AAAI9M,MAAAA,GAAAA,CAAKkB,OAAAA,EAAS;QAAEL,KAAAA,EAAO;UAAEQ,YAAAA,EAAc;AAAO,SAAA;AAAGzB,QAAAA,QAAAA,EAAUI,IAAK,OAAA,EAAS;UAAEa,KAAAA,EAAO;YAAEW,KAAAA,EAAO,MAAA;YAAQ4C,cAAAA,EAAgB,UAAA;YAAY+S,aAAAA,EAAe;AAAM,WAAA;AAAGvX,UAAAA,QAAAA,EAAUI,IAAK,OAAA,EAAS;YAAEJ,QAAAA,EAAU;AAAC,cAAA,CAAA;AAAG,cAAA,CAAA;AAAG,cAAA;cAAG2Q,GAAAA,CAAI,CAAC6G,QAAAA,KAAcpX,GAAAA,CAAK,IAAA,EAAM;cAAEJ,QAAAA,EAAUsX,SAAAA,CAAUtE,KAAAA,CAAMwE,QAAAA,EAAUA,QAAAA,GAAW,CAAA,CAAA,CAAG7G,GAAAA,CAAI,CAAC8G,IAAAA,EAAMC,CAAAA,KAAOzX,IAAAA,CAAM,IAAA,EAAM;gBAAEgB,KAAAA,EAAO;AAC1vBC,kBAAAA,eAAAA,EAAiBnC,KAAAA,CAAMG,eAAAA;kBACvB8C,YAAAA,EAAc,KAAA;kBACd7C,MAAAA,EAAQ,CAAA,UAAA,EAAaJ,MAAMI,MAAM,CAAA,CAAA;kBACjCiC,OAAAA,EAAS,MAAA;kBACTQ,KAAAA,EAAO,KAAA;kBACP0F,aAAAA,EAAe;AACnB,iBAAA;gBAAGtH,QAAAA,EAAU;AAACI,kBAAAA,GAAAA,CAAKgC,IAAAA,EAAM;oBAAEnB,KAAAA,EAAO;AACtBoB,sBAAAA,KAAAA,EAAOtD,KAAAA,CAAMK,OAAAA;sBACbkD,QAAAA,EAAU,MAAA;sBACV7B,UAAAA,EAAY,GAAA;sBACZU,MAAAA,EAAQ,SAAA;sBACRoB,UAAAA,EAAY;AAChB,qBAAA;oBAAGvC,QAAAA,EAAUyX,IAAAA,CAAK5L,MAAMyF,cAAAA;mBAAiB,CAAA;AAAIlR,kBAAAA,GAAAA,CAAKgC,IAAAA,EAAM;oBAAEnB,KAAAA,EAAO;AAAEoB,sBAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;sBAAW8C,QAAAA,EAAU,MAAA;sBAAQnB,MAAAA,EAAQ;AAAE,qBAAA;AAAGnB,oBAAAA,QAAAA,EAAUyX,IAAAA,CAAK9M;mBAAM,CAAA;kBAAI8M,IAAAA,CAAKJ,KAAAA,KAAUvE,MAAAA,IAAc1S,GAAAA,CAAKgC,IAAAA,EAAM;oBAAEnB,KAAAA,EAAO;AAChMoB,sBAAAA,KAAAA,EAAOoV,IAAAA,CAAKJ,KAAAA,IAAS,CAAA,GAAItY,KAAAA,CAAMY,UAAUZ,KAAAA,CAAMU,MAAAA;sBAC/C6C,QAAAA,EAAU,MAAA;sBACVnB,MAAAA,EAAQ;AACZ,qBAAA;oBAAGnB,QAAAA,EAAUoX,UAAAA,CAAWK,KAAKJ,KAAK;mBAAE;;AAAK,eAAA,EAAGK,CAAAA,CAAAA;AAAK,aAAA,EAAGF,QAAAA,CAAAA;WAAY;SAAG;OAAG,CAAA;MAAI7J,UAAAA,CAAWyE,MAAAA,GAAS,CAAA,IAAMnS,IAAAA,CAAM6D,QAAAA,EAAW;QAAE9D,QAAAA,EAAU;AAACI,UAAAA,GAAAA,CAAKgC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AAClKoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;cACb+C,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,GAAA;cACZU,MAAAA,EAAQ,UAAA;cACRmD,aAAAA,EAAe,WAAA;cACfC,aAAAA,EAAe;AACnB,aAAA;YAAGvE,QAAAA,EAAU;WAAa,CAAA;AAAI2N,UAAAA,UAAAA,CAAWgD,GAAAA,CAAI,CAACgH,CAAAA,EAAGlC,CAAAA,KAAOrV,IAAKkB,OAAAA,EAAS;YAAEL,KAAAA,EAAO;AAC3EC,cAAAA,eAAAA,EAAiBnC,KAAAA,CAAMG,eAAAA;cACvB8C,YAAAA,EAAc,KAAA;cACdZ,OAAAA,EAAS,WAAA;cACTjC,MAAAA,EAAQ,CAAA,UAAA,EAAaJ,MAAMI,MAAM,CAAA,CAAA;cACjCsC,YAAAA,EAAc;AAClB,aAAA;AAAGzB,YAAAA,QAAAA,EAAUI,IAAK,OAAA,EAAS;cAAEa,KAAAA,EAAO;gBAAEuD,cAAAA,EAAgB;AAAW,eAAA;AAAGxE,cAAAA,QAAAA,EAAUI,IAAK,OAAA,EAAS;AAAEJ,gBAAAA,QAAAA,EAAUC,KAAM,IAAA,EAAM;kBAAED,QAAAA,EAAU;AAACI,oBAAAA,GAAAA,CAAK,IAAA,EAAM;sBAAEa,KAAAA,EAAO;wBAC7HW,KAAAA,EAAO,MAAA;wBACP0F,aAAAA,EAAe,KAAA;wBACfhF,QAAAA,EAAU,MAAA;wBACViE,UAAAA,EAAY;AAChB,uBAAA;AAAGvG,sBAAAA,QAAAA,EAAU2X,CAAAA,CAAEnN;qBAAK,CAAA;AAAIvK,oBAAAA,IAAAA,CAAM,IAAA,EAAM;sBAAED,QAAAA,EAAU;AAACI,wBAAAA,GAAAA,CAAKgC,IAAAA,EAAM;0BAAEnB,KAAAA,EAAO;AACzDoB,4BAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;4BACbgD,QAAAA,EAAU,MAAA;4BACV7B,UAAAA,EAAY,GAAA;4BACZU,MAAAA,EAAQ;AACZ,2BAAA;AAAGnB,0BAAAA,QAAAA,EAAU2X,CAAAA,CAAEza;yBAAM,CAAA;AAAIkD,wBAAAA,GAAAA,CAAKgC,IAAAA,EAAM;0BAAEnB,KAAAA,EAAO;AAAEoB,4BAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;4BAAW8C,QAAAA,EAAU,MAAA;4BAAQnB,MAAAA,EAAQ;AAAE,2BAAA;AAAGnB,0BAAAA,QAAAA,EAAU2X,CAAAA,CAAE3K;yBAAY;;qBAAI;;iBAAI;eAAG;aAAG;AAAG,WAAA,EAAGyI,CAAAA,CAAAA;;OAAM,CAAA;AAAKrV,MAAAA,GAAAA,CAAKoC,EAAAA,EAAI;QAAEvB,KAAAA,EAAO;AAAEwB,UAAAA,WAAAA,EAAa1D,KAAAA,CAAMI,MAAAA;UAAQgC,MAAAA,EAAQ;AAAS;OAAE,CAAA;AAAIf,MAAAA,GAAAA,CAAK0C,aAAAA,EAAe;QAAEH,IAAAA,EAAM/F,YAAAA;QAAcoD,QAAAA,EAAU;OAAsB;;GAAI,CAAA;AACrW;AArDS0S,MAAAA,CAAAA,aAAAA,EAAAA,cAAAA,CAAAA;AAsDTA,aAAAA,CAAa3O,YAAAA,GAAe;EACxBtH,SAAAA,EAAW,MAAA;EACXwQ,aAAAA,EAAe,QAAA;EACfC,WAAAA,EAAa,cAAA;EACbC,KAAAA,EAAO;IACHC,cAAAA,EAAgB,EAAA;IAChBC,WAAAA,EAAa,GAAA;IACbC,iBAAAA,EAAmB,CAAA;IACnBC,cAAAA,EAAgB,CAAA;IAChBE,mBAAAA,EAAqB,EAAA;IACrBC,wBAAAA,EAA0B;MACtBwJ,cAAAA,EAAgB,EAAA;MAChBC,gBAAAA,EAAkB;AACtB;AACJ,GAAA;EACAxJ,UAAAA,EAAY;AACR,IAAA;MACInD,IAAAA,EAAM,iBAAA;MACNtN,KAAAA,EAAO,6BAAA;MACP8P,WAAAA,EAAa;AACjB,KAAA;AACA,IAAA;MACIxC,IAAAA,EAAM,QAAA;MACNtN,KAAAA,EAAO,sBAAA;MACP8P,WAAAA,EAAa;AACjB,KAAA;AACA,IAAA;MACIxC,IAAAA,EAAM,WAAA;MACNtN,KAAAA,EAAO,qBAAA;MACP8P,WAAAA,EAAa;AACjB;;EAEJpQ,YAAAA,EAAc;AAClB,CAAA;CAC2C;EAKvCoH,YAAAA,EAAc0O,aAAAA,CAAa3O,YAE/B;AChIkCb,EAAE3I,MAAAA,CAAO;AACvCkC,EAAAA,SAAAA,EAAWyG,EAAEE,MAAAA,EAAM;AACnB1G,EAAAA,QAAAA,EAAUwG,EAAEE,MAAAA,EAAM;AAClBzG,EAAAA,YAAAA,EAAcuG,CAAAA,CAAEqJ,KAAAA,CAAMrJ,CAAAA,CAAEE,MAAAA,EAAM,CAAA;EAC9BxG,YAAAA,EAAcsG,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA,EAAG;EAC5BxG,OAAAA,EAASqG,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA,EAAG;EACvBvG,WAAAA,EAAaoG,CAAAA,CAAEE,MAAAA,EAAM,CAAGM,QAAAA,EAAQ;EAChC3G,aAAAA,EAAemG,CAAAA,CAAEK,MAAAA,EAAM,CAAGG,QAAAA;AAC9B,CAAA;AACA,IAAMkU,WAAAA,GAAc;AAChB,EAAA;IAAErU,MAAAA,EAAQ,GAAA;IAAK9H,IAAAA,EAAM,+BAAA;IAAiCkH,IAAAA,EAAM;AAA6C,GAAA;AACzG,EAAA;IAAEY,MAAAA,EAAQ,GAAA;IAAK9H,IAAAA,EAAM,4CAAA;IAA8CkH,IAAAA,EAAM;AAAK,GAAA;AAC9E,EAAA;IAAEY,MAAAA,EAAQ,GAAA;IAAK9H,IAAAA,EAAM,oEAAA;IAAsEkH,IAAAA,EAAM;AAAK;;AAE1G,SAASiQ,QAAAA,CAAQ,EAAEnW,SAAAA,EAAWC,QAAAA,EAAUC,cAAcC,YAAAA,EAAcC,OAAAA,EAASC,WAAAA,EAAaC,aAAAA,EAAa,EAAG;AACtG,EAAA,OAAQkD,KAAM4C,OAAAA,EAAS;IAAE9C,OAAAA,EAAS,gEAAA;IAAkEC,QAAAA,EAAU;AAACI,MAAAA,GAAAA,CAAKyD,OAAAA,EAAS;QAAE5C,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;UAAagD,QAAAA,EAAU,MAAA;UAAQ7B,UAAAA,EAAY,GAAA;UAAKU,MAAAA,EAAQ;AAAU,SAAA;QAAGnB,QAAAA,EAAU;OAAgC,CAAA;AAAIC,MAAAA,IAAAA,CAAMmC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;UAAe+C,QAAAA,EAAU,MAAA;UAAQC,UAAAA,EAAY,KAAA;UAAOpB,MAAAA,EAAQ;AAAU,SAAA;QAAGnB,QAAAA,EAAU;AAAC,UAAA,MAAA;AAAQvD,UAAAA,SAAAA;AAAW,UAAA,cAAA;AAAgB,UAAA,GAAA;UAAKK,WAAAA,GAClZ,mGAAA,GACA,QAAQJ,QAAAA,CAAAA,gBAAAA;;OAA4B,CAAA;AAAI0D,MAAAA,GAAAA,CAAKgC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;UAAe+C,QAAAA,EAAU,MAAA;UAAQC,UAAAA,EAAY,KAAA;UAAOpB,MAAAA,EAAQ;AAAW,SAAA;QAAGnB,QAAAA,EAAU;OAA2C,CAAA;AAAII,MAAAA,GAAAA,CAAKkB,OAAAA,EAAS;QAAEL,KAAAA,EAAO;AAC3OC,UAAAA,eAAAA,EAAiBnC,KAAAA,CAAMG,eAAAA;UACvB8C,YAAAA,EAAc,KAAA;UACdZ,OAAAA,EAAS,MAAA;UACTjC,MAAAA,EAAQ,CAAA,UAAA,EAAaJ,MAAMI,MAAM,CAAA,CAAA;UACjCsC,YAAAA,EAAc;AAClB,SAAA;AAAGzB,QAAAA,QAAAA,EAAU4X,WAAAA,CAAYjH,GAAAA,CAAI,CAACkH,IAAAA,KAAU5X,KAAMmC,IAAAA,EAAM;UAAEnB,KAAAA,EAAO;AACrDoB,YAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;YACbgD,QAAAA,EAAU,MAAA;YACVnB,MAAAA,EAAQ,UAAA;YACRY,OAAAA,EAAS,MAAA;YACTuJ,UAAAA,EAAY,YAAA;YACZwM,GAAAA,EAAK;AACT,WAAA;UAAG9X,QAAAA,EAAU;AAACC,YAAAA,IAAAA,CAAM,MAAA,EAAQ;cAAEgB,KAAAA,EAAO;AAAEoB,gBAAAA,KAAAA,EAAOtD,KAAAA,CAAMK,OAAAA;gBAASqB,UAAAA,EAAY,GAAA;gBAAKsX,QAAAA,EAAU;AAAO,eAAA;cAAG/X,QAAAA,EAAU;gBAAC6X,IAAAA,CAAKtU,MAAAA;AAAQ,gBAAA;;aAAK,CAAA;YAAIsU,IAAAA,CAAKpc;;SAAM,EAAGoc,IAAAA,CAAKtU,MAAM,CAAA;OAAI,CAAA;AAAInD,MAAAA,GAAAA,CAAKgC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;UAAe+C,QAAAA,EAAU,MAAA;UAAQC,UAAAA,EAAY,KAAA;UAAOpB,MAAAA,EAAQ;AAAW,SAAA;QAAGnB,QAAAA,EAAU;OAAiN,CAAA;AAAIlD,MAAAA,WAAAA,IAAgBmD,KAAMqB,OAAAA,EAAS;QAAEL,KAAAA,EAAO;AACxhBC,UAAAA,eAAAA,EAAiBnC,KAAAA,CAAMG,eAAAA;UACvB8C,YAAAA,EAAc,KAAA;UACdZ,OAAAA,EAAS,MAAA;UACTjC,MAAAA,EAAQ,CAAA,UAAA,EAAaJ,MAAMK,OAAO,CAAA,CAAA;UAClCqC,YAAAA,EAAc;AAClB,SAAA;QAAGzB,QAAAA,EAAU;AAACI,UAAAA,GAAAA,CAAKgC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AACtBoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMK,OAAAA;cACbkD,QAAAA,EAAU,MAAA;cACV7B,UAAAA,EAAY,GAAA;cACZU,MAAAA,EAAQ,SAAA;cACRmD,aAAAA,EAAe,WAAA;cACfC,aAAAA,EAAe;AACnB,aAAA;YAAGvE,QAAAA,EAAU;WAAkB,CAAA;AAAIC,UAAAA,IAAAA,CAAMmC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AAAEoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMO,WAAAA;cAAagD,QAAAA,EAAU,MAAA;cAAQ7B,UAAAA,EAAY,GAAA;cAAKU,MAAAA,EAAQ;AAAU,aAAA;YAAGnB,QAAAA,EAAU;AAAClD,cAAAA,WAAAA;AAAa,cAAA;;WAAyB,CAAA;UAAIC,aAAAA,KAAkB+V,MAAAA,IAAc7S,KAAMmC,IAAAA,EAAM;YAAEnB,KAAAA,EAAO;AAAEoB,cAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;cAAe+C,QAAAA,EAAU,MAAA;cAAQnB,MAAAA,EAAQ;AAAE,aAAA;YAAGnB,QAAAA,EAAU;AAACjD,cAAAA,aAAAA;AAAe,cAAA;;WAAkB;;OAAK,CAAA;AAAKqD,MAAAA,GAAAA,CAAK0C,aAAAA,EAAe;QAAEH,IAAAA,EAAM/F,YAAAA;QAAcoD,QAAAA,EAAU;OAAiB,CAAA;AAAII,MAAAA,GAAAA,CAAK,MAAA,EAAQ;QAAEa,KAAAA,EAAO;UAAEc,OAAAA,EAAS,cAAA;UAAgBH,KAAAA,EAAO;AAAO;OAAE,CAAA;AAAIxB,MAAAA,GAAAA,CAAK6C,WAAAA,EAAa;QAAEN,IAAAA,EAAM9F,OAAAA;QAASmD,QAAAA,EAAU;OAAgB,CAAA;AAAII,MAAAA,GAAAA,CAAKoC,EAAAA,EAAI;QAAEvB,KAAAA,EAAO;AAAEwB,UAAAA,WAAAA,EAAa1D,KAAAA,CAAMI,MAAAA;UAAQgC,MAAAA,EAAQ;AAAS;OAAE,CAAA;AAAIf,MAAAA,GAAAA,CAAKgC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMQ,aAAAA;UAAe+C,QAAAA,EAAU,MAAA;UAAQC,UAAAA,EAAY,KAAA;UAAOpB,MAAAA,EAAQ;AAAW,SAAA;QAAGnB,QAAAA,EAAU;OAA+I,CAAA;AAAII,MAAAA,GAAAA,CAAKgC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;UAAW8C,QAAAA,EAAU,MAAA;UAAQnB,MAAAA,EAAQ;AAAU,SAAA;QAAGnB,QAAAA,EAAU;OAAmC,CAAA;AAAII,MAAAA,GAAAA,CAAKgC,IAAAA,EAAM;QAAEnB,KAAAA,EAAO;AAAEoB,UAAAA,KAAAA,EAAOtD,KAAAA,CAAMS,SAAAA;UAAW8C,QAAAA,EAAU,MAAA;UAAQnB,MAAAA,EAAQ;AAAE,SAAA;QAAGnB,QAAAA,EAAU;OAAyH;;GAAI,CAAA;AAC1vC;AA9BS4S,MAAAA,CAAAA,QAAAA,EAAAA,SAAAA,CAAAA;AA+BTA,QAAAA,CAAQ7O,YAAAA,GAAe;EACnBtH,SAAAA,EAAW,MAAA;EACXC,QAAAA,EAAU,KAAA;EACVC,YAAAA,EAAc;AACV,IAAA,kCAAA;AACA,IAAA,kCAAA;AACA,IAAA,kBAAA;AACA,IAAA;;EAEJC,YAAAA,EAAc,6BAAA;EACdC,OAAAA,EAAS,wBAAA;EACTC,WAAAA,EAAa,MAAA;EACbC,aAAAA,EAAe;AACnB,CAAA;CACsC;EAKlCiH,YAAAA,EAAc4O,QAAAA,CAAQ7O,YAE1B;AC3D0Cb,EAAE3I,MAAAA,CAAO;AAC/CkC,EAAAA,SAAAA,EAAWyG,EAAEE,MAAAA,EAAM;AACnB4U,EAAAA,aAAAA,EAAe9U,EAAEE,MAAAA,EAAM;AACvB6U,EAAAA,mBAAAA,EAAqB/U,EAAEE,MAAAA,EAAM;AAC7B8U,EAAAA,cAAAA,EAAgBhV,EAAEE,MAAAA,EAAM;AACxB+U,EAAAA,YAAAA,EAAcjV,EAAEK,MAAAA,EAAM;EACtB3G,YAAAA,EAAcsG,CAAAA,CAAEE,MAAAA,EAAM,CAAGC,GAAAA;AAC7B,CAAA;CCRO,MAAM+U;EAXb;;;AAYIC,EAAAA,WAAAA,GAAc,EAAA;;AAEdpH,EAAAA,gBAAAA;AACAqH,EAAAA,SAAAA,uBAAgBlI,GAAAA,EAAAA;EAChBmI,WAAAA,GAAc,qBAAA;AACdC,EAAAA,aAAAA,GAAgB,EAAC;AACjBC,EAAAA,cAAAA;EACAC,UAAAA,GAAa,KAAA;;;;;AAKbC,EAAAA,SAAAA,CAAUC,OAAAA,EAAS;AACf,IAAA,IAAA,CAAKF,UAAAA,GAAaE,OAAAA;AAClB,IAAA,OAAO,IAAA;AACX,EAAA;;;;AAIAC,EAAAA,gBAAAA,CAAiBC,SAAAA,EAAW;AACxB,IAAA,IAAA,CAAKN,aAAAA,GAAgBM,SAAAA;AACrB,IAAA,OAAO,IAAA;AACX,EAAA;;;;AAIAC,EAAAA,cAAAA,CAAe1d,IAAAA,EAAM;AACjB,IAAA,IAAA,CAAKkd,WAAAA,GAAcld,IAAAA;AACnB,IAAA,OAAO,IAAA;AACX,EAAA;;;;AAIA2d,EAAAA,iBAAAA,CAAkBC,OAAAA,EAAS;AACvB,IAAA,IAAA,CAAKR,cAAAA,GAAiBQ,OAAAA;AACtB,IAAA,OAAO,IAAA;AACX,EAAA;;;;AAIAC,EAAAA,GAAAA,CAAIC,UAAAA,EAAY;AACZ,IAAA,IAAA,CAAKd,WAAAA,CAAYe,KAAKD,UAAAA,CAAAA;AACtB,IAAA,OAAO,IAAA;AACX,EAAA;;;;AAIA,EAAA,MAAMvd,KAAKK,OAAAA,EAAS;AAEhB,IAAA,IAAI,IAAA,CAAKyc,UAAAA,IAAczc,OAAAA,CAAQod,MAAAA,EAAQ;AACnC,MAAA,OAAO,IAAA,CAAKC,aAAard,OAAAA,CAAAA;AAC7B,IAAA;AAEA,IAAA,MAAMsd,UAAU,IAAA,CAAKlB,WAAAA,CAAYmB,WAAAA,CAAY,CAACC,MAAMN,UAAAA,KAAe,MAAMA,UAAAA,CAAWld,OAAAA,EAASwd,IAAAA,CAAAA,EAAO,MAAM,IAAA,CAAKC,eAAAA,CAAgBzd,OAAAA,CAAAA,CAAAA;AAC/H,IAAA,OAAOsd,OAAAA,EAAAA;AACX,EAAA;;;;AAIA,EAAA,MAAMI,iBAAiBC,OAAAA,EAAS;AAC5B,IAAA,MAAMtd,WAAW,MAAM,IAAA,CAAK2U,gBAAAA,EAAkBhW,GAAAA,CAAI2e,QAAQC,UAAU,CAAA;AACpE,IAAA,IAAI,CAACvd,QAAAA,EAAU;AACX,MAAA,OAAO;QACHqD,OAAAA,EAAS,KAAA;QACT0F,KAAAA,EAAO,CAAA,oBAAA,EAAuBuU,QAAQC,UAAU,CAAA;AACpD,OAAA;AACJ,IAAA;AAEA,IAAA,MAAMC,UAAAA,GAAaxd,QAAAA,CAAS2T,MAAAA,CAAO8J,SAAAA,CAAUH,QAAQI,OAAO,CAAA;AAC5D,IAAA,IAAI,CAACF,WAAWna,OAAAA,EAAS;AACrB,MAAA,OAAO;QACHA,OAAAA,EAAS,KAAA;QACT0F,KAAAA,EAAO,CAAA,0BAAA,EAA6ByU,UAAAA,CAAWzU,KAAAA,CAAMlI,OAAO,CAAA;AAChE,OAAA;AACJ,IAAA;AAEA,IAAA,MAAMf,WAAWE,QAAAA,CAASF,QAAAA;AAC1B,IAAA,MAAMC,QAAAA,GAAW,IAAA,CAAK4d,sBAAAA,CAAuB7d,QAAAA,CAAAA;AAC7C,IAAA,OAAO,KAAKR,IAAAA,CAAK;AACbN,MAAAA,EAAAA,EAAIse,OAAAA,CAAQte,EAAAA;MACZ4e,QAAAA,EAAU,MAAA;AACV9d,MAAAA,QAAAA;AACAC,MAAAA,QAAAA;MACAC,QAAAA,EAAU;AACNC,QAAAA,EAAAA,EAAIqd,OAAAA,CAAQC,UAAAA;AACZrd,QAAAA,KAAAA,EAAOsd,UAAAA,CAAWK;AACtB,OAAA;AACAC,MAAAA,QAAAA,EAAUR,OAAAA,CAAQQ;KACtB,CAAA;AACJ,EAAA;;;;AAIA,EAAA,MAAMC,UAAUC,QAAAA,EAAU;AACtB,IAAA,MAAMC,OAAAA,GAAU,MAAMC,OAAAA,CAAQC,UAAAA,CAAWH,QAAAA,CAAS3J,GAAAA,CAAI,CAAC1U,OAAAA,KAAY,IAAA,CAAKL,IAAAA,CAAKK,OAAAA,CAAAA,CAAAA,CAAAA;AAC7E,IAAA,MAAMye,SAAAA,GAAYH,OAAAA,CAAQzJ,MAAAA,CAAO,CAAC6J,CAAAA,KAAMA,CAAAA,CAAElU,MAAAA,KAAW,WAAA,IAAekU,CAAAA,CAAE9O,KAAAA,CAAMlM,OAAO,CAAA,CAAEyS,MAAAA;AACrF,IAAA,OAAO;AACHwI,MAAAA,KAAAA,EAAON,QAAAA,CAASlI,MAAAA;AAChBsI,MAAAA,SAAAA;AACAG,MAAAA,MAAAA,EAAQP,SAASlI,MAAAA,GAASsI,SAAAA;MAC1BH,OAAAA,EAASA,OAAAA,CAAQ5J,IAAI,CAACgK,CAAAA,KAAMA,EAAElU,MAAAA,KAAW,WAAA,GAAckU,EAAE9O,KAAAA,GAAQ;QAAElM,OAAAA,EAAS,KAAA;QAAO0F,KAAAA,EAAO;OAAmB;AACjH,KAAA;AACJ,EAAA;;;;AAIA,EAAA,MAAMqU,gBAAgBzd,OAAAA,EAAS;AAC3B,IAAA,IAAI;AAEA,MAAA,MAAMK,WAAW,MAAM,IAAA,CAAK2U,kBAAkBhW,GAAAA,CAAIgB,OAAAA,CAAQK,SAASC,EAAE,CAAA;AACrE,MAAA,IAAI,CAACD,QAAAA,EAAU;AACX,QAAA,MAAM,IAAIzB,KAAAA,CAAM,CAAA,oBAAA,EAAuBoB,OAAAA,CAAQK,QAAAA,CAASC,EAAE,CAAA,CAAE,CAAA;AAChE,MAAA;AAEA,MAAA,MAAMf,IAAAA,GAAO,MAAM4V,MAAAA,CAAO9U,QAAAA,CAAS0T,UAAU/T,OAAAA,CAAQK,QAAAA,CAASE,KAAK,CAAA,CAAA;AAEnE,MAAA,MAAMf,IAAAA,GAAO,MAAM2V,MAAAA,CAAO9U,QAAAA,CAAS0T,UAAU/T,OAAAA,CAAQK,QAAAA,CAASE,KAAK,CAAA,EAAG;QAClEse,SAAAA,EAAW;OACf,CAAA;AAEA,MAAA,MAAMzf,OAAO,IAAA,CAAKmd,aAAAA,CAAcvc,OAAAA,CAAQG,QAAQ,KAAK,IAAA,CAAKmc,WAAAA;AAE1D,MAAA,MAAM2B,QAAAA,GAAW,IAAA,CAAKa,cAAAA,CAAe9e,OAAAA,CAAAA;AAErC,MAAA,MAAMoV,MAAAA,GAAS,MAAM6I,QAAAA,CAASte,IAAAA,CAAK;AAC/BP,QAAAA,IAAAA;AACAC,QAAAA,EAAAA,EAAIW,QAAQX,EAAAA,CAAGY,KAAAA;AACfX,QAAAA,OAAAA,EAASe,QAAAA,CAASf,OAAAA,CAAQU,OAAAA,CAAQK,QAAAA,CAASE,KAAK,CAAA;AAChDhB,QAAAA,IAAAA;AACAC,QAAAA,IAAAA;AACAwd,QAAAA,OAAAA,EAAS,IAAA,CAAKR,cAAAA;QACduC,IAAAA,EAAM;AACF,UAAA;YAAEhS,IAAAA,EAAM,UAAA;AAAY6C,YAAAA,KAAAA,EAAO5P,OAAAA,CAAQG;AAAS,WAAA;AAC5C,UAAA;YAAE4M,IAAAA,EAAM,UAAA;YAAY6C,KAAAA,EAAO5P,OAAAA,CAAQK,SAASC,EAAAA,CAAG0e,KAAAA,CAAM,GAAA,CAAA,CAAK,CAAA,CAAA,IAAMhf,OAAAA,CAAQK,QAAAA,CAASC;AAAG;;AAExF6d,QAAAA,QAAAA,EAAUne,OAAAA,CAAQme;OACtB,CAAA;AAEA,MAAA,MAAM,KAAKc,aAAAA,CAAc;AACrB/e,QAAAA,MAAAA,EAAQF,QAAQX,EAAAA,CAAGa,MAAAA;AACnB0d,QAAAA,UAAAA,EAAY5d,QAAQK,QAAAA,CAASC,EAAAA;AAC7BH,QAAAA,QAAAA,EAAUH,OAAAA,CAAQG,QAAAA;AAClB8d,QAAAA,QAAAA,EAAUje,QAAQie,QAAAA,IAAY,QAAA;AAC9BiB,QAAAA,cAAAA,EAAgBlf,QAAQX,EAAAA,CAAGY,KAAAA;AAC3BX,QAAAA,OAAAA,EAASe,QAAAA,CAASf,OAAAA,CAAQU,OAAAA,CAAQK,QAAAA,CAASE,KAAK,CAAA;AAChDiK,QAAAA,MAAAA,EAAQ4K,MAAAA,CAAO5K,MAAAA;AACf2U,QAAAA,OAAAA,EAAS/J,MAAAA,CAAO9U,EAAAA;AAChB6d,QAAAA,QAAAA,EAAUne,OAAAA,CAAQme;OACtB,CAAA;AACA,MAAA,OAAO;AACHza,QAAAA,OAAAA,EAAS0R,OAAO5K,MAAAA,KAAW,MAAA;AAC3B2U,QAAAA,OAAAA,EAAS/J,MAAAA,CAAO9U,EAAAA;AAChB8I,QAAAA,KAAAA,EAAOgM,MAAAA,CAAOhM;AAClB,OAAA;AACJ,IAAA,CAAA,CAAA,OACOA,KAAAA,EAAO;AACV,MAAA,OAAO;QACH1F,OAAAA,EAAS,KAAA;QACT0F,KAAAA,EAAOA,KAAAA,YAAiBxK,KAAAA,GAAQwK,KAAAA,CAAMlI,OAAAA,GAAU;AACpD,OAAA;AACJ,IAAA;AACJ,EAAA;;;;;AAKA,EAAA,MAAMmc,aAAard,OAAAA,EAAS;AACxB,IAAA,MAAMK,WAAW,MAAM,IAAA,CAAK2U,kBAAkBhW,GAAAA,CAAIgB,OAAAA,CAAQK,SAASC,EAAE,CAAA;AACrE,IAAc,IAAA,CAAKic,aAAAA,CAAcvc,OAAAA,CAAQG,QAAQ,KAAK,IAAA,CAAKmc;AAC3D,IAAetc,QAAQK,QAAAA,CAASC;AAGhC,IAAA,IAAID,QAAAA,EAAU;AACV+e,MAAW/e,QAAAA,CAASf,OAAAA,CAAQU,OAAAA,CAAQK,QAAAA,CAASE,KAAK,CAAA;AAClD8e,MAAe,MAAMlK,MAAAA,CAAO9U,QAAAA,CAAS0T,UAAU/T,OAAAA,CAAQK,QAAAA,CAASE,KAAK,CAAA,CAAA;AACrE+e,MAAe,MAAMnK,MAAAA,CAAO9U,QAAAA,CAAS0T,UAAU/T,OAAAA,CAAQK,QAAAA,CAASE,KAAK,CAAA,EAAG;QAAEse,SAAAA,EAAW;OAAK,CAAA;AAC9F,IAAA;AACA,IAAA,OAAO;MACHnb,OAAAA,EAAS,IAAA;MACTyb,OAAAA,EAAS,CAAA,QAAA,EAAWzd,IAAAA,CAAKsW,GAAAA,EAAG,CAAA;AAChC,KAAA;AACJ,EAAA;;;;;AAKA8G,EAAAA,cAAAA,CAAe9e,OAAAA,EAAS;AACpB,IAAA,IAAIA,OAAAA,CAAQie,QAAAA,IAAYje,OAAAA,CAAQie,QAAAA,KAAa,MAAA,EAAQ;AACjD,MAAA,OAAO,IAAA,CAAK5B,SAAAA,CAAUrd,GAAAA,CAAIgB,OAAAA,CAAQie,QAAQ,CAAA;AAC9C,IAAA;AAEA,IAAA,MAAMA,QAAAA,GAAWje,OAAAA,CAAQG,QAAAA,KAAa,WAAA,GAAc,SAAA,GAAY,QAAA;AAChE,IAAA,OAAO,IAAA,CAAKkc,SAAAA,CAAUrd,GAAAA,CAAIif,QAAAA,CAAAA;AAC9B,EAAA;;;;AAIAD,EAAAA,sBAAAA,CAAuB7d,QAAAA,EAAU;AAC7B,IAAA,MAAMof,WAAAA,GAAc;MAChBC,cAAAA,EAAgB,UAAA;MAChBC,OAAAA,EAAS,MAAA;MACTC,UAAAA,EAAY,MAAA;MACZC,OAAAA,EAAS,QAAA;MACTC,SAAAA,EAAW;AACf,KAAA;AACA,IAAA,OAAOL,WAAAA,CAAYpf,QAAAA,CAAAA,IAAa,QAAA;AACpC,EAAA;;;;AAIA,EAAA,MAAM8e,cAAcY,KAAAA,EAAO;AAG3B,EAAA;;;;AAIAC,EAAAA,gBAAAA,CAAiB/S,MAAMkR,QAAAA,EAAU;AAC7B,IAAA,IAAA,CAAK5B,SAAAA,CAAU/H,GAAAA,CAAIvH,IAAAA,EAAMkR,QAAAA,CAAAA;AAC7B,EAAA;;;;AAIA8B,EAAAA,mBAAAA,CAAoBC,QAAAA,EAAU;AAC1B,IAAA,IAAA,CAAKhL,gBAAAA,GAAmBgL,QAAAA;AAC5B,EAAA;AACJ;;ACvNKC,SAAAA,gBAAAA,GADWC;AAEd,EAAA,IAAA,aAAA,EAAOD;AACR,IAAA,OAAA,aAAA;AAEA,EAAA;AACA,EAAA,MAAMzhB,WAAAA,GAASC,QAAY0hB,GAAAA,CAAAA,oBAAAA;AAE3B,EAAA,MAAKC,MAAAA,GAAAA,QAAgB5hB,GAAAA,CAAQ,eAAA;AAC5B,EAAA,IAAA,CAAA,WAAA,IACC,CAAA,MAAA,EAAA;AAEF,IAAA,MAAA,IAAA,MAAA,iIAAA,CAAA;AAGA,EAAA;AAGCmG,EAAAA,MAAAA,UAAOyb,EAAAA;AACR,EAAA,IAAA,WAAA,EAAA;AAEI5hB,IAAAA,QAAQ,WAAA,GAAA,WAAA;AACXmG,EAAAA;AACD,EAAA,IAAA,MAAA,EAAA;AAEAsb,IAAAA,QAAAA,eAAAA,GAA2Btb,MAAAA;AAC3B0b,EAAAA;AAEA,EAAA,aAAA,GAAOJ,IAAAA,OAAAA,OAAAA,CAAAA;AACR,EAAA,MAAA,CAAA,KAAA,yCAAA,CAAA;AA7BgBC,EAAAA,OAAAA,aAAAA;AAoCT;AAnCFD,MAAAA,CAAAA,gBAAAA,EAAAA,kBAAAA,CAAAA;AA4CH,IAAMK,aAAAA,iCAAyC,MAAA,KAAA;AAC/C,EAAA,MAAA,SAAYC,gBAAAA,EAAeC;AAC1B,EAAA,IAAA;AACCF,IAAAA,MAAAA,CAAAA,KAAWC,6BAAAA,EAAqB;AACjC,MAAA,KAAA,EAAA,OAAA,UAAA,CAAA;KACD,CAAA;AAGCD,IAAAA,MAAAA,aAAAA,EAAAA;AACD,IAAA,KAAA,MAAA,CAAA,KAAA,KAAA,CAAA,IAAA,OAAA,OAAA,CAAA,MAAA,CAAA,UAAA,CAAA,EAAA;AAEO3c,MAAAA,IAAK,KAAA,KAAA,KAAA,CAAA,IAAA,KAAA,KAAgC,IAAA,EAAA;AACvC8c,QAAAA,UAAAA,CAASngB,GAAAA,CAAAA,GAAAA,KAAAA,CAAAA,QAAAA,EAAAA;AACbL,MAAAA;AACD,IAAA;AAEA,IAAA,MAAMygB,WAAAA,MAA+C,MAAA,CAAC,GAAA,CAAA,QAAA,CAAA,SAAA,MAAA,CAAA;AACtD,MAAA;KACC,CAAA;AACCA,IAAAA,MAAAA,CAAAA,KAAAA,8BAAAA,EAAuC;AACxC,MAAA,EAAA,EAAA,QAAA,CAAA,EAAA;AACD,MAAA,KAAA,EAAA,OAAA,UAAA,CAAA;KAEA,CAAA;AACCpgB,IAAAA,MAAImgB,oBAASngB,EAAAA;AACb,IAAA,KAAA,MAAGogB,CAAAA,KAAAA,KAAAA,CAAAA,IAAAA,OAAAA,OAAAA,CAAAA,QAAAA,CAAAA,UAAAA,CAAAA,EAAAA;AACJ,MAAA,IAAA,KAAA,KAAA,KAAA,CAAA,IAAA,KAAA,KAAA,IAAA,EAAA;AACQtX,QAAAA,iBAAAA,CAAO,GAAA,CAAA,GAAA,KAAA,CAAA,QAAA,EAAA;AACRA,MAAAA;AACNA,IAAAA;AACAnJ,IAAAA,OAAOF;AACR,MAAA,EAAA,EAAA,QAAA,CAAA,EAAA;MACMqJ,GAAAA;AACP,KAAA;AA1C2C,EAAA,CAAA,CAAA,OAkD/BuX,KAAAA,EAAAA;AACNlhB,IAAAA,MAAAA,CAAAA,MAASygB,0BAAAA,EAAAA;AAEX,MAAA,KAAA;AACIvc,MAAAA,KAAAA,EAAK,OAAA,UAAA,CAAA;KAAiCrD,CAAAA;AAAc,IAAA,MAAA,KAAA;AAG3D,EAAA;AACA,CAAA,EAjD+C,eAAA,CAAA;AAwD9CggB,IAAAA,aAAAA,iCAAAA,MAAAA,KAD0CM;AAE3C,EAAA,MAAA,MAAA,GAAA,gBAAA,EAAA;AAEAP,EAAAA,IAAAA;AAA8C/f,IAAAA,MAAAA,CAAImgB,KAASngB,6BAAAA,EAAAA;AAAAA,MAAAA,EAAAA,EAAAA,MAAAA,CAAAA;KAAAA,CAAAA;AAE3D,IAAA,MAAMogB,aAAAA,EAAAA;AACN,IAAA,KAAA,MAAYH,CAAAA,KAAK3Q,KAAAA,CAAAA,IAAU4Q,OAAOK,OAAAA,CAAQJ,MAAAA,CAASH,UAAU,CAAA,EAAG;AAC3D1Q,MAAAA,IAAAA,KAAAA,KAAUiH,KAAAA,CAAAA,IAAajH,KAAAA,KAAgB,IAAA,EAAA;AAC1C8Q,QAAAA,UAAAA,CAAkBH,GAAAA,CAAAA,GAAO3Q,KAAAA,CAAMkG,QAAAA,EAAQ;AACxC,MAAA;AACD,IAAA;AAEA,IAAA,MAAO,QAAA,GAAA,MAAA,MAAA,CAAA,GAAA,CAAA,SAAA,QAAA,CAAA,MAAA,CAAA,OAAA,EAAA,EAAA;AACF2K,MAAAA;KACDC,CAAAA;AACJ,IAAA,MAAA,CAAA,KAAA,8BAAA,EAAA;AAAA,MAAA,EAAA,EAAA,QAAA,CAAA;KAAA,CAAA;AACD,IAAA,MAAStX,oBAAO,EAAA;AACfiX,IAAAA,KAAAA,MAAa,CAAA,KAAA,KAAA,CAAA,IAAA,OAAA,OAAA,CAA4B,QAAA,CAAA,UAAA,CAAA,EAAA;AAAEjX,MAAAA,IAAAA,KAAAA,KAAAA,KAAAA,CAAAA,IAAAA,KAAAA,KAAAA,IAAAA,EAAAA;AAAWrJ,QAAAA,iBAAAA,CAAOO,GAAAA,CAAAA,GAAAA,KAAAA,CAAAA,QAAAA,EAAAA;AAAG,MAAA;AAChE,IAAA;AACD,IAAA,OAAA;AAlC2C,MAAA,EAAA,EAAA,QAAA,CAAA,EAAA;MA0C/BwgB,GAAAA;AACNrhB,KAAAA;AAEN,EAAA,CAAA,CAAA,OACQkE,KAAAA,EAAK;AAAkCrD,IAAAA,MAAAA,CAAIP,MAAOO,0BAAAA,EAAAA;AAAAA,MAAAA,KAAAA;AAAAA,MAAAA,EAAAA,EAAAA,MAAAA,CAAAA;KAAAA,CAAAA;AAAG,IAAA,MAAA,KAAA;AAE5D,EAAA;AAEA+f,CAAAA,EApCuB5gB,eAAAA,CAAAA;;;AAnGxB,eAAmB,qBAAA,MAAA,EAAA;AAClB,EAAA,OAAOwgB,MAAAA,cAAAA,MAAAA,CAAAA;AACR;AAFmB,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAcnB,eAAqB,qBAAA,MAAA,EAAA;AAErB,EAAA,OAAIG,MAAAA,cAAa,MAAA,CAAA;AAChBzb;AAHoB,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;;;AC1BtB,eAAsBoc,kBAAkBC,QAAAA,EAAQ;AAC5CX,EAAAA,MAAAA,CAAO1c,KAAK,yBAAA,EAA2B;AAAE1D,IAAAA,KAAAA,EAAO+gB,QAAAA,CAAS/gB;GAAM,CAAA;AAC/D,EAAA,MAAMqgB,UAAAA,GAAaW,+BAA+BD,QAAAA,CAAAA;AAClD,EAAA,IAAI;AAEA,IAAA,MAAME,eAAAA,GAAkB,MAAMC,kBAAAA,CAAmBH,QAAAA,CAAS/gB,KAAK,CAAA;AAC/D,IAAA,IAAIihB,iBAAiB5gB,EAAAA,EAAI;AAErB,MAAA,MAAM8gB,OAAAA,GAAU,MAAMC,oBAAAA,CAAqB;AACvC/gB,QAAAA,EAAAA,EAAI4gB,eAAAA,CAAgB5gB,EAAAA;AACpBggB,QAAAA;OACJ,CAAA;AACAD,MAAAA,MAAAA,CAAO1c,KAAK,kCAAA,EAAoC;AAC5CrD,QAAAA,EAAAA,EAAI8gB,OAAAA,CAAQ9gB,EAAAA;AACZL,QAAAA,KAAAA,EAAO+gB,QAAAA,CAAS/gB;OACpB,CAAA;AACA,MAAA,OAAOmhB,OAAAA,CAAQ9gB,EAAAA;AACnB,IAAA;AAEA,IAAA,MAAMghB,OAAAA,GAAU,MAAMC,oBAAAA,CAAqB;AAAEjB,MAAAA;KAAW,CAAA;AACxDD,IAAAA,MAAAA,CAAO1c,KAAK,6BAAA,EAA+B;AACvCrD,MAAAA,EAAAA,EAAIghB,OAAAA,CAAQhhB,EAAAA;AACZL,MAAAA,KAAAA,EAAO+gB,QAAAA,CAAS/gB;KACpB,CAAA;AACA,IAAA,OAAOqhB,OAAAA,CAAQhhB,EAAAA;AACnB,EAAA,CAAA,CAAA,OACO8I,KAAAA,EAAO;AACViX,IAAAA,MAAAA,CAAOjX,MAAM,gCAAA,EAAkC;AAC3CA,MAAAA,KAAAA;AACAnJ,MAAAA,KAAAA,EAAO+gB,QAAAA,CAAS/gB;KACpB,CAAA;AACA,IAAA,MAAMmJ,KAAAA;AACV,EAAA;AACJ;AAjCsB2X,MAAAA,CAAAA,iBAAAA,EAAAA,mBAAAA,CAAAA;AAqCtB,eAAsBI,mBAAmBlhB,KAAAA,EAAK;AAC1C,EAAA,IAAI;AACA,IAAA,MAAMR,SAASygB,gBAAAA,EAAAA;AACf,IAAA,MAAMO,WAAW,MAAMhhB,MAAAA,CAAO+hB,GAAAA,CAAIC,QAAAA,CAASC,UAAUC,QAAAA,CAAS;MAC1DC,YAAAA,EAAc;AACV,QAAA;UACIC,OAAAA,EAAS;AACL,YAAA;cACIC,YAAAA,EAAc,OAAA;;cAEdC,QAAAA,EAAU,IAAA;cACVnS,KAAAA,EAAO3P;AACX;;AAER;;MAEJqgB,UAAAA,EAAY;AAAC,QAAA,OAAA;AAAS,QAAA,WAAA;AAAa,QAAA,UAAA;AAAY,QAAA;;MAC/C0B,KAAAA,EAAO;KACX,CAAA;AACA,IAAA,IAAIvB,QAAAA,CAASnC,OAAAA,IAAWmC,QAAAA,CAASnC,OAAAA,CAAQnI,SAAS,CAAA,EAAG;AACjD,MAAA,MAAMf,MAAAA,GAASqL,QAAAA,CAASnC,OAAAA,CAAQ,CAAA,CAAA;AAChC,MAAA,OAAO;AACHhe,QAAAA,EAAAA,EAAI8U,MAAAA,CAAO9U,EAAAA;AACX,QAAA,GAAG8U,MAAAA,CAAOkL;AACd,OAAA;AACJ,IAAA;AACA,IAAA,OAAO,IAAA;AACX,EAAA,CAAA,CAAA,OACO2B,MAAAA,EAAQ;AACX5B,IAAAA,MAAAA,CAAO6B,KAAK,4BAAA,EAA8B;AAAEjiB,MAAAA;KAAM,CAAA;AAClD,IAAA,OAAO,IAAA;AACX,EAAA;AACJ;AAhCsBkhB,MAAAA,CAAAA,kBAAAA,EAAAA,oBAAAA,CAAAA;AAmHtB,SAASF,+BAA+BD,QAAAA,EAAQ;AAC5C,EAAA,MAAMV,UAAAA,GAAa;AACfrgB,IAAAA,KAAAA,EAAO+gB,QAAAA,CAAS/gB,KAAAA;AAChBkiB,IAAAA,SAAAA,EAAWnB,QAAAA,CAASxgB,SAAAA;AACpB4hB,IAAAA,QAAAA,EAAUpB,QAAAA,CAASqB,QAAAA;;AAEnBC,IAAAA,aAAAA,EAAetB,QAAAA,CAAS9gB,MAAAA;;IAExBqiB,mBAAAA,EAAqBvB,QAAAA,CAASwB,qBAAqB,MAAA,GAAS,OAAA;AAC5DC,IAAAA,iBAAAA,EAAmBzB,QAAAA,CAAS0B,gBAAAA;;AAE5BC,IAAAA,YAAAA,EAAc3B,QAAAA,CAASngB,WAAAA;IACvB+hB,cAAAA,EAAgB5B,QAAAA,CAASlgB,eAAegV,QAAAA,EAAAA;;AAExC+M,IAAAA,iBAAAA,EAAmB7B,QAAAA,CAASvgB,QAAAA;AAC5BqiB,IAAAA,mBAAAA,EAAqB9B,QAAAA,CAAS+B,kBAAAA;;IAE9BC,eAAAA,EAAiBhC,QAAAA,CAAS7P,gBAAgB2E,QAAAA,EAAAA;IAC1CmN,gBAAAA,EAAkBjC,QAAAA,CAASkC,eAAepN,QAAAA,EAAAA;;AAE1CqN,IAAAA,aAAAA,EAAenC,QAAAA,CAASoC,YAAAA;IACxBC,oBAAAA,EAAsBrC,QAAAA,CAASsC,sBAAsB,MAAA,GAAS,OAAA;AAC9DC,IAAAA,eAAAA,EAAiBvC,QAAAA,CAASwC;AAC9B,GAAA;AAEA,EAAA,IAAIxC,SAASyC,oBAAAA,EAAsB;AAC/BnD,IAAAA,UAAAA,CAAWoD,sBAAAA,GAAyB1C,QAAAA,CAASyC,oBAAAA,CAAqBE,OAAAA,GAAU7N,QAAAA,EAAQ;AACxF,EAAA;AACA,EAAA,IAAIkL,SAAS4C,eAAAA,EAAiB;AAC1BtD,IAAAA,UAAAA,CAAWuD,iBAAAA,GAAoB7C,QAAAA,CAAS4C,eAAAA,CAAgBD,OAAAA,GAAU7N,QAAAA,EAAQ;AAC9E,EAAA;AACA,EAAA,IAAIkL,SAAS8C,qBAAAA,EAAuB;AAChCxD,IAAAA,UAAAA,CAAWyD,uBAAAA,GAA0B/C,QAAAA,CAAS8C,qBAAAA,CAAsBH,OAAAA,GAAU7N,QAAAA,EAAQ;AAC1F,EAAA;AACA,EAAA,IAAIkL,SAAS3N,cAAAA,EAAgB;AACzBiN,IAAAA,UAAAA,CAAW0D,kBAAAA,GAAqBhD,QAAAA,CAAS3N,cAAAA,CAAesQ,OAAAA,GAAU7N,QAAAA,EAAQ;AAC9E,EAAA;AACA,EAAA,IAAIkL,SAASiD,gBAAAA,EAAkB;AAC3B3D,IAAAA,UAAAA,CAAW4D,kBAAAA,GAAqBlD,QAAAA,CAASiD,gBAAAA,CAAiBN,OAAAA,GAAU7N,QAAAA,EAAQ;AAChF,EAAA;AACA,EAAA,IAAIkL,SAASmD,iBAAAA,EAAmB;AAC5B7D,IAAAA,UAAAA,CAAW8D,mBAAAA,GAAsBpD,QAAAA,CAASmD,iBAAAA,CAAkBR,OAAAA,GAAU7N,QAAAA,EAAQ;AAClF,EAAA;AACA,EAAA,IAAIkL,SAASqD,gBAAAA,EAAkB;AAC3B/D,IAAAA,UAAAA,CAAWgE,kBAAAA,GAAqBtD,QAAAA,CAASqD,gBAAAA,CAAiBV,OAAAA,GAAU7N,QAAAA,EAAQ;AAChF,EAAA;AACA,EAAA,IAAIkL,QAAAA,CAASuD,QAAQ1N,MAAAA,EAAW;AAC5ByJ,IAAAA,UAAAA,CAAWiE,GAAAA,GAAMvD,QAAAA,CAASuD,GAAAA,CAAIzO,QAAAA,EAAQ;AAC1C,EAAA;AAEA,EAAA,OAAO0K,MAAAA,CAAOgE,WAAAA,CAAYhE,MAAAA,CAAOK,OAAAA,CAAQP,UAAAA,CAAAA,CAAYzL,MAAAA,CAAO,CAAC,CAACU,CAAAA,EAAGkP,CAAAA,CAAAA,KAAOA,CAAAA,KAAM5N,MAAAA,CAAAA,CAAAA;AAClF;AAnDSoK,MAAAA,CAAAA,8BAAAA,EAAAA,gCAAAA,CAAAA;;;;;;ACtJIrhB,EAAAA,IAAAA,EAAAA,QAAAA,GAAAA,CAAAA,4BAAAA;AAVb,EAAA,UAAA,EAAA,QAAA,GAAA,CAAA;;AAkGGO,SAAU,eAAA,GAAA;MACVC,YAAAA,EAAU;AACVC,IAAAA,OAAAA,YAAAA;;AAECE,EAAAA,MAAAA,eAAAA,GAAO,QAAA,GAAA,CAAA,iBAAA;AACK,EAAA,IAAA,CAAA,eAAA,EAAA;AACXU,IAAAA,MAAAA,IAAO,MAAA,wCAAA,CAAA;AACPC,EAAAA;AACAI,EAAAA,YAAAA,GAAAA,IAAU,OAAA,eAAA,CAAA;AACVC,EAAAA,OAAAA,YAAAA;AACAS;AAVQ,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AAsEc9B,IAAAA,oBAAAA,iCAAeA,OAAAA,KAAAA;AAAO,EAAA,MAAAwkB,gBAAA,eAAA,EAAA;AAC9CvkB,EAAAA,MAAAA,YAAAA,GAAU,MAAAukB,aAAAA,CAAA,aAAA,CAAA,QAAA,CAAA,QAAA,EAAA,CAAA;AACVtkB,EAAAA,IAAAA,CAAAA,YAAAA,EAAU;AACVC,IAAAA,MAAAA,IAAU,MAAA,yBAAA,CAAA;;QAETE,aAAAA,CAAO,aAAA,CAAA,MAAA,CAAA,OAAA,CAAA,EAAA,EAAA;AACNS,IAAAA,KAAAA,EAAAA;AACAC,MAAAA;AACAC,QAAAA,EAAAA,EAAS,YAAA,CAAA,KAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAA2BnB,EAAAA;AACpCuB,QAAAA,QAAAA,EAAU,OAAA,CAAA;AACVC;;;AAVqCrB,CAAAA,EAAAA,sBAAAA,CAAAA;;;;;;;;;;;;AChK1C,IAAM,eAAA,GAAkB,OAAA,CAAQ,GAAA,CAAI,eAAA,IAAmB,EAAA;AACvD,IAAM,YAAA,GAAe,OAAA,CAAQ,GAAA,CAAI,YAAA,IAAgB,wBAAA;AACjD,IAAM,eAAA,GAAkB,CAAC,CAAC,eAAA;AAGtB,eAAe,gBAAA,CAAiB,WAAW,QAAA,EAAU;AACrD,EAAA,IAAI,CAAC,eAAA,EAAiB;AAClB,IAAA;AAAA,EACJ;AACA,EAAA,IAAI;AACA,IAAA,MAAM,KAAA,GAAQ;AAAA,MACV,OAAA,EAAS,eAAA;AAAA,MACT,KAAA,EAAO,SAAA;AAAA,MACP,WAAA,EAAa,QAAA,CAAS,MAAA,IAAU,QAAA,CAAS,EAAA,IAAM,WAAA;AAAA,MAC/C,UAAA,EAAY;AAAA,QACR,GAAG,QAAA;AAAA,QACH,KAAK,QAAA,CAAS,EAAA;AAAA,QACd,IAAA,EAAM;AAAA,UACF,OAAO,QAAA,CAAS,MAAA,GAAS,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAA,GAAK,KAAA;AAAA;AACzD,OACJ;AAAA,MACA,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,KACtC;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,YAAY,CAAA,SAAA,CAAA,EAAa;AAAA,MACrD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACL,cAAA,EAAgB;AAAA,OACpB;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,KAAK;AAAA,KAC7B,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,MAAA,MAAA,CAAO,MAAM,8BAAA,EAAgC;AAAA,QACzC,SAAA;AAAA,QACA,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,YAAY,QAAA,CAAS;AAAA,OACxB,CAAA;AAAA,IACL;AAAA,EACJ,SAAS,KAAA,EAAO;AACZ,IAAA,MAAA,CAAO,MAAM,8BAAA,EAAgC;AAAA,MACzC,KAAA;AAAA,MACA;AAAA,KACH,CAAA;AAAA,EACL;AACJ;AAtCmB,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AA2Cf,eAAe,aAAA,CAAc,WAAW,QAAA,EAAU;AAClD,EAAA,IAAI;AAEA,IAAA,MAAM,EAAE,EAAA,EAAAykB,GAAAA,EAAI,aAAY,GAAI,MAAM,OAAO,oBAAiB,CAAA;AAC1D,IAAA,IAAI,CAACA,GAAAA,EAAI;AACL,MAAA,MAAA,CAAO,KAAK,0CAAA,EAA4C;AAAA,QACpD;AAAA,OACH,CAAA;AACD,MAAA;AAAA,IACJ;AACA,IAAA,MAAM,EAAE,iBAAgB,GAAI,WAAA;AAE5B,IAAA,MAAMA,GAAAA,CAAG,MAAA,CAAO,eAAe,CAAA,CAAE,MAAA,CAAO;AAAA,MACpC,SAAA;AAAA,MACA,aAAA,EAAe,OAAA;AAAA,MACf,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,UAAA,EAAY;AAAA,QACR,IAAI,QAAA,CAAS,EAAA;AAAA,QACb,WAAW,QAAA,CAAS,SAAA;AAAA,QACpB,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,MAAM,QAAA,CAAS,IAAA;AAAA,QACf,YAAY,QAAA,CAAS,UAAA;AAAA,QACrB,cAAc,QAAA,CAAS,YAAA;AAAA,QACvB,GAAG;AAAA;AACP,KACH,CAAA;AACD,IAAA,MAAA,CAAO,MAAM,mBAAA,EAAqB;AAAA,MAC9B,SAAA;AAAA,MACA,QAAQ,QAAA,CAAS,MAAA;AAAA,MACjB,OAAO,QAAA,CAAS;AAAA,KACnB,CAAA;AAAA,EACL,SAAS,KAAA,EAAO;AACZ,IAAA,MAAA,CAAO,MAAM,2BAAA,EAA6B;AAAA,MACtC,KAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACH,CAAA;AAAA,EAEL;AACJ;AAvCmB,MAAA,CAAA,aAAA,EAAA,eAAA,CAAA;AA2Cf,eAAsB,UAAA,CAAW,WAAW,QAAA,EAAU;AAEtD,EAAA,MAAA,CAAO,KAAK,aAAA,EAAe;AAAA,IACvB,SAAA;AAAA,IACA,QAAQ,QAAA,CAAS,MAAA;AAAA,IACjB,OAAO,QAAA,CAAS,KAAA;AAAA,IAChB,MAAM,QAAA,CAAS;AAAA,GAClB,CAAA;AAED,EAAA,gBAAA,CAAiB,SAAA,EAAW,QAAQ,CAAA,CAAE,KAAA,CAAM,CAAC,KAAA,KAAQ;AACjD,IAAA,MAAA,CAAO,MAAM,qBAAA,EAAuB;AAAA,MAChC,KAAA;AAAA,MACA;AAAA,KACH,CAAA;AAAA,EACL,CAAC,CAAA;AAED,EAAA,aAAA,CAAc,SAAA,EAAW,QAAQ,CAAA,CAAE,KAAA,CAAM,CAAC,KAAA,KAAQ;AAC9C,IAAA,MAAA,CAAO,MAAM,wBAAA,EAA0B;AAAA,MACnC,KAAA;AAAA,MACA;AAAA,KACH,CAAA;AAAA,EACL,CAAC,CAAA;AACL;AAtB0B,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;AC1Ff,IAAM,2BAAA,GAA8B;AAAA,EAC3C,UAAA,EAAY,UAAA;AAAA,EACZ,UAAA,EAAY,UAAA;AAAA,EACZ,SAAA,EAAW,EAAA;AAAA,EACX,YAAA,EAAc,IAAA;AAAA,EACd,gBAAA,EAAkB,IAAA;AAAA,EAClB,cAAA,EAAgB;AACpB,CAAA;AAGW,IAAM,qBAAA,GAAwB;AAAA,EACrC,WAAA,EAAa,KAAA;AAAA,EACb,UAAA,EAAY,CAAA;AAAA,EACZ,WAAA,EAAa,CAAA;AAAA,EACb,IAAA,EAAM;AACV,CAAA;AAcW,SAAS,cAAA,CAAe,MAAA,EAAQhgB,OAAAA,GAAS,EAAC,EAAG;AACpD,EAAA,MAAM,WAAA,GAAc;AAAA,IAChB,GAAG,2BAAA;AAAA,IACH,GAAGA;AAAA,GACP;AAEA,EAAA,MAAM,YAAA,GAAe,WAAA,CAAY,WAAA,CAAY,SAAS,CAAA;AAEtD,EAAA,MAAM,SAAA,GAAY,YAAA,CAAa,QAAA,CAAS,QAAQ,EAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,QAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AAE1G,EAAA,MAAM,MAAA,GAAS,MAAA,GAAS,WAAA,CAAY,UAAA,GAAa,WAAA,CAAY,UAAA;AAC7D,EAAA,MAAM,SAAS,MAAA,GAAS,SAAA;AACxB,EAAA,MAAA,CAAO,MAAM,mBAAA,EAAqB;AAAA,IAC9B,WAAW,MAAA,CAAO,MAAA;AAAA,IAClB,MAAA;AAAA,IACA,WAAA,EAAa,SAAS,MAAA,GAAS;AAAA,GAClC,CAAA;AACD,EAAA,OAAO,MAAA;AACX;AAlBoB,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAoChB,eAAsB,UAAA,CAAW,QAAA,EAAUA,OAAAA,GAAS,EAAC,EAAG;AACxD,EAAA,MAAM,WAAA,GAAc;AAAA,IAChB,GAAG,qBAAA;AAAA,IACH,GAAGA;AAAA,GACP;AAGA,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,QAAA,EAAU;AAAA,IACpC,YAAY,WAAA,CAAY,WAAA;AAAA,IACxB,UAAU,WAAA,CAAY,UAAA;AAAA,IACtB,aAAa,WAAA,CAAY;AAAA,GAC5B,CAAA;AACD,EAAA,MAAA,CAAO,MAAM,8BAAA,EAAgC;AAAA,IACzC,aAAa,WAAA,CAAY,WAAA;AAAA,IACzB,YAAY,WAAA,CAAY,UAAA;AAAA,IACxB,aAAa,WAAA,CAAY;AAAA,GAC5B,CAAA;AACD,EAAA,OAAO,UAAA;AACX;AAlB0B,MAAA,CAAA,UAAA,EAAA,YAAA,CAAA;AA4BtB,eAAsB,gBAAA,CAAiB,UAAUigB,KAAAA,EAAM;AACvD,EAAA,IAAI;AAGA,IAAA,OAAO,MAAM,MAAA,CAAOA,KAAAA,EAAM,QAAQ,CAAA;AAAA,EACtC,SAAS,KAAA,EAAO;AACZ,IAAA,MAAA,CAAO,KAAK,4BAAA,EAA8B;AAAA,MACtC,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,KAC/D,CAAA;AACD,IAAA,OAAO,KAAA;AAAA,EACX;AACJ;AAX0B,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;;;AClF1B,IAAMC,sBAAAA,GAAyB5d,EAAE3I,MAAAA,CAAO;;AAEpCyO,EAAAA,IAAAA,EAAM9F,EAAEE,MAAAA,EAAM,CAAGM,QAAAA,EAAQ,CAAGF,QAAQ,aAAA,CAAA;;EAEpCud,cAAAA,EAAgB7d,CAAAA,CAAEE,MAAAA,EAAM,CAAGM,QAAAA,EAAQ;;AAEnCsd,EAAAA,WAAAA,EAAa9d,EACR3I,MAAAA,CAAO;IACR0mB,YAAAA,EAAc/d,CAAAA,CAAEK,MAAAA,EAAM,CAAGG,QAAAA,EAAQ;IACjCwd,WAAAA,EAAahe,CAAAA,CAAE2T,OAAAA,EAAO,CAAGnT,QAAAA,EAAQ;IACjCyd,iBAAAA,EAAmBje,CAAAA,CAAE2T,OAAAA,EAAO,CAAGnT,QAAAA,EAAQ;IACvC0d,WAAAA,EAAale,CAAAA,CAAE2T,OAAAA,EAAO,CAAGnT,QAAAA,EAAQ;IACjC2d,WAAAA,EAAane,CAAAA,CAAE2T,OAAAA,EAAO,CAAGnT,QAAAA;AAC7B,GAAA,EACKA,QAAAA,EAAQ;;AAEb4d,EAAAA,gBAAAA,EAAkBpe,EAAE2T,OAAAA,EAAO,CAAGnT,QAAAA,EAAQ,CAAGF,QAAQ,KAAA,CAAA;;AAEjD+d,EAAAA,YAAAA,EAAcre,CAAAA,CAAEK,MAAAA,EAAM,CAAG6I,GAAAA,GAAM1I,QAAAA,EAAQ;;AAEvC8d,EAAAA,mBAAAA,EAAqBte,CAAAA,CAAEK,MAAAA,EAAM,CAAG6I,GAAAA,GAAM1I,QAAAA,EAAQ;;AAE9C+d,EAAAA,SAAAA,EAAWve,CAAAA,CAAEwe,MAAAA,CAAOpV,IAAAA,EAAI,CAAG5I,QAAAA,EAAQ;;EAEnC0W,QAAAA,EAAUlX,CAAAA,CAAEye,OAAOze,CAAAA,CAAEE,MAAAA,IAAUF,CAAAA,CAAE0e,OAAAA,EAAO,CAAA,CAAIle,QAAAA;AAChD,CAAA,CAAA;AACA,IAAMme,sBAAAA,GAAyB3e,EAAE3I,MAAAA,CAAO;;AAEpCiiB,EAAAA,GAAAA,EAAKtZ,EAAEE,MAAAA,EAAM;;AAEb4d,EAAAA,WAAAA,EAAa9d,CAAAA,CAAEye,MAAAA,CAAOze,CAAAA,CAAEE,MAAAA,EAAM,EAAIF,CAAAA,CAAEqJ,KAAAA,CAAMrJ,CAAAA,CAAEE,MAAAA,EAAM,CAAA,CAAA,CAAKM,QAAAA;AAC3D,CAAA,CAAA;AACA,IAAMoe,sBAAAA,GAAyB5e,EAAE3I,MAAAA,CAAO;;AAEpCwnB,EAAAA,KAAAA,EAAO7e,EAAEE,MAAAA;AACb,CAAA,CAAA;AAUO,SAAS4e,YAAAA,GAAAA;AACZ,EAAA,OAAO;IACHzlB,EAAAA,EAAI,eAAA;IACJ0lB,SAAAA,EAAW;AACPC,MAAAA,YAAAA,EAAcC,mBAAmB,iBAAA,EAAmB;QAChDC,MAAAA,EAAQ,MAAA;QACRC,IAAAA,EAAMvB,sBAAAA;QACN1G,QAAAA,EAAU;UACNkI,OAAAA,EAAS;YACLC,WAAAA,EAAa,cAAA;YACbvV,WAAAA,EAAa,yCAAA;YACbwV,SAAAA,EAAW;cACP,GAAA,EAAK;gBACDxV,WAAAA,EAAa,iBAAA;gBACb/D,OAAAA,EAAS;kBACL,kBAAA,EAAoB;oBAChBgH,MAAAA,EAAQ;sBACJ5F,IAAAA,EAAM,QAAA;sBACNkS,UAAAA,EAAY;wBACRhgB,EAAAA,EAAI;0BAAE8N,IAAAA,EAAM;AAAS,yBAAA;wBACrBmS,GAAAA,EAAK;0BAAEnS,IAAAA,EAAM;AAAS,yBAAA;wBACtBrB,IAAAA,EAAM;0BAAEqB,IAAAA,EAAM;AAAS,yBAAA;wBACvBoY,SAAAA,EAAW;0BAAEpY,IAAAA,EAAM,QAAA;0BAAUjB,MAAAA,EAAQ;AAAY,yBAAA;wBACjDqY,SAAAA,EAAW;0BAAEpX,IAAAA,EAAM,QAAA;0BAAUjB,MAAAA,EAAQ,WAAA;0BAAasZ,QAAAA,EAAU;AAAK;AACrE;AACJ;AACJ;AACJ;AACJ;AACJ;AACJ;AACJ;AACJ,OAAA,EAAG,OAAOC,GAAAA,KAAAA;AACN,QAAA,MAAMC,WAAAA,GAAc,MAAMC,iBAAAA,CAAkBF,GAAAA,CAAAA;AAC5C,QAAA,IAAI,CAACC,WAAAA,EAAaE,IAAAA,EAAMvmB,EAAAA,EAAI;AACxB,UAAA,MAAM,IAAIwmB,SAAS,cAAA,EAAgB;YAAE5lB,OAAAA,EAAS;WAAe,CAAA;AACjE,QAAA;AACA,QAAA,MAAMhB,MAAAA,GAASymB,YAAYE,IAAAA,CAAKvmB,EAAAA;AAChC,QAAA,MAAM,EAAEyM,IAAAA,EAAM+X,cAAAA,EAAgBC,WAAAA,EAAaM,gBAAAA,EAAkBC,cAAcC,mBAAAA,EAAqBC,SAAAA,EAAWrH,QAAAA,EAAQ,GAAMuI,GAAAA,CAAIN,IAAAA;AAE7H,QAAA,MAAMW,QAAAA,GAAWC,eAAe,IAAA,CAAA;AAEhC,QAAA,MAAMC,OAAAA,GAAU,MAAMC,UAAAA,CAAWH,QAAAA,CAAAA;AAEjC,QAAA,MAAMI,KAAAA,GAAQJ,QAAAA,CAASK,SAAAA,CAAU,CAAA,EAAG,CAAA,CAAA;AAEpC,QAAA,MAAMC,UAAAA,GAAaN,QAAAA,CAASK,SAAAA,CAAU,CAAA,EAAG,EAAA,CAAA;AACzC,QAAA,MAAM9mB,KAAKgnB,MAAAA,EAAAA;AACX,QAAA,MAAMtP,GAAAA,uBAAUtW,IAAAA,EAAAA;AAChB,QAAA,MAAMijB,EAAAA,CAAG4C,MAAAA,CAAOC,OAAAA,CAAAA,CAAS/S,MAAAA,CAAO;AAC5BnU,UAAAA,EAAAA;AACAJ,UAAAA,MAAAA;AACA4kB,UAAAA,cAAAA,EAAgBA,cAAAA,IAAkB,IAAA;AAClC/X,UAAAA,IAAAA,EAAMA,IAAAA,IAAQ,aAAA;UACdwT,GAAAA,EAAK0G,OAAAA;AACLE,UAAAA,KAAAA;UACAM,MAAAA,EAAQ,UAAA;AACRJ,UAAAA,UAAAA;AACAtC,UAAAA,WAAAA,EAAaA,WAAAA,IAAe,IAAA;UAC5BpI,OAAAA,EAAS,IAAA;AACT0I,UAAAA,gBAAAA,EAAkBA,gBAAAA,IAAoB,KAAA;AACtCC,UAAAA,YAAAA,EAAcA,YAAAA,IAAgB,IAAA;AAC9BC,UAAAA,mBAAAA,EAAqBA,mBAAAA,IAAuB,IAAA;AAC5CC,UAAAA,SAAAA,EAAWA,SAAAA,IAAa,IAAA;AACxBrH,UAAAA,QAAAA,EAAUA,QAAAA,IAAY,IAAA;UACtBqI,SAAAA,EAAWxO,GAAAA;UACX0P,SAAAA,EAAW1P;SACf,CAAA;AACAqI,QAAAA,MAAAA,CAAO1c,KAAK,iBAAA,EAAmB;AAAEzD,UAAAA,MAAAA;UAAQ4lB,KAAAA,EAAOxlB;SAAG,CAAA;AACnD,QAAA,OAAOomB,IAAIiB,IAAAA,CAAK;AACZrnB,UAAAA,EAAAA;UACAigB,GAAAA,EAAKwG,QAAAA;AACLha,UAAAA,IAAAA,EAAMA,IAAAA,IAAQ,aAAA;UACdyZ,SAAAA,EAAWxO,GAAAA;AACXwN,UAAAA,SAAAA,EAAWA,SAAAA,IAAa,IAAA;AACxBT,UAAAA,WAAAA,EAAaA,WAAAA,IAAe;SAChC,CAAA;MACJ,CAAA,CAAA;AACA6C,MAAAA,YAAAA,EAAc1B,mBAAmB,iBAAA,EAAmB;QAChDC,MAAAA,EAAQ,MAAA;QACRC,IAAAA,EAAMR,sBAAAA;QACNzH,QAAAA,EAAU;UACNkI,OAAAA,EAAS;YACLC,WAAAA,EAAa,cAAA;YACbvV,WAAAA,EAAa;AACjB;AACJ;AACJ,OAAA,EAAG,OAAO2V,GAAAA,KAAAA;AACN,QAAA,MAAM,EAAEnG,GAAAA,EAAG,GAAKmG,GAAAA,CAAIN,IAAAA;AACpB,QAAA,IAAI,CAAC7F,GAAAA,EAAK;AACN,UAAA,OAAOmG,IAAIiB,IAAAA,CAAK;YAAEE,OAAAA,EAAS,KAAA;YAAOze,KAAAA,EAAO;cAAElI,OAAAA,EAAS;AAAkB;WAAE,CAAA;AAC5E,QAAA;AAGA,QAAA,MAAMimB,KAAAA,GAAQ5G,GAAAA,CAAI6G,SAAAA,CAAU,CAAA,EAAG,CAAA,CAAA;AAE/B,QAAA,MAAMU,UAAAA,GAAa,MAAMnD,EAAAA,CACpBoD,MAAAA,GACA3oB,IAAAA,CAAKooB,OAAAA,CAAAA,CACLQ,KAAAA,CAAMC,IAAIC,EAAAA,CAAGV,OAAAA,CAAQL,KAAAA,EAAOA,KAAAA,GAAQgB,MAAAA,CAAOX,OAAAA,CAAQY,SAAS,CAAA,EAAGC,GAAGF,MAAAA,CAAOX,OAAAA,CAAQhC,SAAS,CAAA,EAAG8C,IAAId,OAAAA,CAAQhC,SAAAA,kBAAW,IAAI9jB,IAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACxHsgB,MAAM,CAAA,CAAA;AAEX,QAAA,IAAIuG,UAAAA,GAAa,IAAA;AACjB,QAAA,KAAA,MAAWC,aAAaV,UAAAA,EAAY;AAChC,UAAA,MAAMW,OAAAA,GAAU,MAAMC,gBAAAA,CAAiBnI,GAAAA,EAAKiI,UAAUjI,GAAG,CAAA;AACzD,UAAA,IAAIkI,OAAAA,EAAS;AACTF,YAAAA,UAAAA,GAAaC,SAAAA;AACb,YAAA;AACJ,UAAA;AACJ,QAAA;AACA,QAAA,IAAI,CAACD,UAAAA,EAAY;AACb,UAAA,OAAO7B,IAAIiB,IAAAA,CAAK;YAAEE,OAAAA,EAAS,KAAA;YAAOze,KAAAA,EAAO;cAAElI,OAAAA,EAAS;AAAkB;WAAE,CAAA;AAC5E,QAAA;AAEAyjB,QAAAA,EAAAA,CAAGgE,MAAAA,CAAOnB,OAAAA,CAAAA,CACLlT,GAAAA,CAAI;AAAEsU,UAAAA,UAAAA,sBAAgBlnB,IAAAA,EAAAA;AAAQgmB,UAAAA,SAAAA,sBAAehmB,IAAAA;SAAO,CAAA,CACpDsmB,KAAAA,CAAME,EAAAA,CAAGV,OAAAA,CAAQlnB,EAAAA,EAAIioB,UAAAA,CAAWjoB,EAAE,CAAA,CAAA,CAClCuoB,KAAAA,CAAM,CAACC,GAAAA,KAAAA;AACRzI,UAAAA,MAAAA,CAAO6B,KAAK,yCAAA,EAA2C;AACnD4D,YAAAA,KAAAA,EAAOyC,UAAAA,CAAWjoB,EAAAA;AAClB8I,YAAAA,KAAAA,EAAO0f,GAAAA,CAAI5nB;WACf,CAAA;QACJ,CAAA,CAAA;AACA,QAAA,OAAOwlB,IAAIiB,IAAAA,CAAK;UACZE,OAAAA,EAAS,IAAA;UACTkB,KAAAA,EAAO,IAAA;AACP7oB,UAAAA,MAAAA,EAAQqoB,UAAAA,CAAWroB,MAAAA;UACnBqgB,GAAAA,EAAK;AACDjgB,YAAAA,EAAAA,EAAIioB,UAAAA,CAAWjoB,EAAAA;AACfJ,YAAAA,MAAAA,EAAQqoB,UAAAA,CAAWroB,MAAAA;AACnB6M,YAAAA,IAAAA,EAAMwb,UAAAA,CAAWxb,IAAAA;AACjBgY,YAAAA,WAAAA,EAAawD,UAAAA,CAAWxD,WAAAA;AACxBM,YAAAA,gBAAAA,EAAkBkD,UAAAA,CAAWlD,gBAAAA;AAC7BC,YAAAA,YAAAA,EAAciD,UAAAA,CAAWjD,YAAAA;AACzB0D,YAAAA,SAAAA,EAAWT,UAAAA,CAAWS,SAAAA;AACtBC,YAAAA,YAAAA,EAAcV,UAAAA,CAAWU,YAAAA;AACzB9K,YAAAA,QAAAA,EAAUoK,UAAAA,CAAWpK;AACzB;SACJ,CAAA;MACJ,CAAA,CAAA;AACA+K,MAAAA,YAAAA,EAAchD,mBAAmB,iBAAA,EAAmB;QAChDC,MAAAA,EAAQ,MAAA;QACRC,IAAAA,EAAMP,sBAAAA;QACN1H,QAAAA,EAAU;UACNkI,OAAAA,EAAS;YACLC,WAAAA,EAAa,cAAA;YACbvV,WAAAA,EAAa;AACjB;AACJ;AACJ,OAAA,EAAG,OAAO2V,GAAAA,KAAAA;AACN,QAAA,MAAMC,WAAAA,GAAc,MAAMC,iBAAAA,CAAkBF,GAAAA,CAAAA;AAC5C,QAAA,IAAI,CAACC,WAAAA,EAAaE,IAAAA,EAAMvmB,EAAAA,EAAI;AACxB,UAAA,MAAM,IAAIwmB,SAAS,cAAA,EAAgB;YAAE5lB,OAAAA,EAAS;WAAe,CAAA;AACjE,QAAA;AACA,QAAA,MAAM,EAAE4kB,KAAAA,EAAK,GAAKY,GAAAA,CAAIN,IAAAA;AACtB,QAAA,MAAMhR,SAAS,MAAMuP,EAAAA,CAChBgE,MAAAA,CAAOnB,OAAAA,EACPlT,GAAAA,CAAI;AAAE8T,UAAAA,SAAAA,sBAAe1mB,IAAAA,EAAAA;AAAQgmB,UAAAA,SAAAA,sBAAehmB,IAAAA;AAAO,SAAA,CAAA,CACnDsmB,KAAAA,CAAMC,GAAAA,CAAIC,EAAAA,CAAGV,QAAQlnB,EAAAA,EAAIwlB,KAAAA,CAAAA,EAAQoC,EAAAA,CAAGV,QAAQtnB,MAAAA,EAAQymB,WAAAA,CAAYE,IAAAA,CAAKvmB,EAAE,CAAA,CAAA,CAAA;AAE5E,QAAA,IAAI,CAAC8U,OAAO+T,QAAAA,EAAU;AAClB,UAAA,MAAM,IAAIrC,SAAS,WAAA,EAAa;YAAE5lB,OAAAA,EAAS;WAAY,CAAA;AAC3D,QAAA;AACAmf,QAAAA,MAAAA,CAAO1c,KAAK,iBAAA,EAAmB;AAAEmiB,UAAAA,KAAAA;AAAO5lB,UAAAA,MAAAA,EAAQymB,YAAYE,IAAAA,CAAKvmB;SAAG,CAAA;AACpE,QAAA,OAAOomB,IAAIiB,IAAAA,CAAK;UAAEjkB,OAAAA,EAAS;SAAK,CAAA;MACpC,CAAA;AACJ;AACJ,GAAA;AACJ;AAxKgBqiB,MAAAA,CAAAA,YAAAA,EAAAA,cAAAA,CAAAA;;;ACjEhB,eAAsB,sCAAsC,cAAA,EAAgB;AACxE,EAAA,MAAMqD,aAAAA,GAAe,MAAc,2CAAA,CAA4C,cAAc,CAAA;AAC7F,EAAA,IAAI,CAACA,aAAAA,EAAc,SAAA,IAAa,CAAC,KAAA,CAAM,OAAA,CAAQA,aAAAA,CAAa,SAAS,CAAA,IAAKA,aAAAA,CAAa,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG;AAC3G,IAAA;AAAA,EACJ;AACA,EAAA,MAAM,kBAAA,GAAqBA,cAAa,SAAA,CAAU,IAAA,CAAK,CAAC,QAAA,KAAW,QAAA,CAAS,SAAS,cAAc,CAAA;AACnG,EAAA,IAAI,CAAC,oBAAoB,cAAA,EAAgB;AACrC,IAAA;AAAA,EACJ;AACA,EAAA,IAAI;AACA,IAAA,MAAM,oBAAA,CAAqB;AAAA,MACvB,IAAI,kBAAA,CAAmB,cAAA;AAAA,MACvB,OAAOA,aAAAA,CAAa;AAAA,KACvB,CAAA;AAAA,EACL,SAAS,KAAA,EAAO;AACZ,IAAA,MAAA,CAAO,MAAM,qDAAA,EAAuD;AAAA,MAChE,cAAA;AAAA,MACA;AAAA,KACH,CAAA;AAAA,EACL;AACJ;AApBsB,MAAA,CAAA,qCAAA,EAAA,uCAAA,CAAA;;;ACYtB,IAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,OAAA,IAAW,UAAA,EAAW;AAYjD,IAAM,WAAA,GAAc,OAAA,CAAQ,GAAA,CAAI,eAAA,IAAmB,QAAQ,GAAA,CAAI,oBAAA,IAAwB,OAAA,CAAQ,GAAA,CAAI,OAAA,IAAW,CAAA,iBAAA,EAAoB,OAAA,CAAQ,GAAA,CAAI,QAAQ,GAAI,CAAA,CAAA;AAM1J,IAAM,cAAc,OAAA,CAAQ,GAAA,CAAI,eAAA,IAAmB,EAAA,EAAI,SAAS,WAAW,CAAA;AAC3E,IAAM,aAAA,GAAgB,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,IAAgB,UAAA;AAC/D,IAAM,iBAAiB,aAAA,GAAgB;AAAA,EACnC,MAAA;AAAA,EACA,WAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA,uBAAA;AAAA,EACA;AACJ,CAAA,GAAI;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA;AACJ,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,EAAK,KAAA,EAAO,QAAM,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA,KAAM,KAAK,CAAA;AACtD,IAAM,QAAQ,UAAA,CAAW;AAAA;AAAA;AAAA,EAGrB,OAAA,EAAS,WAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAKT,IAAA,EAAM;AAAA,IACF,gBAAA,EAAkB;AAAA,MACd,kBAAA,EAAoB;AAAA,QAChB,IAAA,EAAM,SAAA;AAAA,QACN,QAAA,EAAU,KAAA;AAAA,QACV,YAAA,EAAc;AAAA,OAClB;AAAA,MACA,iBAAA,EAAmB;AAAA,QACf,IAAA,EAAM,QAAA;AAAA,QACN,QAAA,EAAU;AAAA;AACd;AACJ,GACJ;AAAA,EACA,OAAA,EAAS,OAAA;AAAA;AAAA;AAAA,EAGT,aAAA,EAAe;AAAA,IACX,wBAAA;AAAA;AAAA,IAEA;AAAA,GACJ;AAAA,EACA,SAAA,EAAW;AAAA,IACP,GAAA,EAAK;AAAA,MACD,SAAA,EAAW;AAAA,QACP,MAAM,OAAA,GAAW;AACb,UAAA,OAAO,IAAI,SAAS,IAAA,EAAM;AAAA,YACtB,MAAA,EAAQ;AAAA,WACX,CAAA;AAAA,QACL;AAAA;AACJ;AACJ,GACJ;AAAA,EACA,gBAAA,EAAkB;AAAA,IACd,OAAA,EAAS;AAAA,GACb;AAAA,EACA,eAAA,EAAiB;AAAA;AAAA;AAAA;AAAA,IAIb,GAAG,OAAA,CAAQ,GAAA,CAAI,gBAAA,IAAoB,OAAA,CAAQ,IAAI,oBAAA,GAAuB;AAAA,MAClE,MAAA,EAAQ;AAAA,QACJ,QAAA,EAAU,QAAQ,GAAA,CAAI,gBAAA;AAAA,QACtB,YAAA,EAAc,QAAQ,GAAA,CAAI,oBAAA;AAAA;AAAA,QAE1B,qBAAA,EAAuB;AAAA;AAC3B,QACA,EAAC;AAAA,IACL,GAAG,OAAA,CAAQ,GAAA,CAAI,gBAAA,IAAoB,OAAA,CAAQ,IAAI,oBAAA,GAAuB;AAAA,MAClE,MAAA,EAAQ;AAAA,QACJ,QAAA,EAAU,QAAQ,GAAA,CAAI,gBAAA;AAAA,QACtB,YAAA,EAAc,QAAQ,GAAA,CAAI,oBAAA;AAAA;AAAA,QAE1B,qBAAA,EAAuB;AAAA;AAC3B,QACA;AAAC,GACT;AAAA,EACA,QAAA,EAAU,eAAe,EAAA,EAAI;AAAA,IACzB,QAAA,EAAU,IAAA;AAAA,IACV,MAAA,EAAQ;AAAA,GACX,CAAA;AAAA,EACD,OAAA,EAAS;AAAA,IACL,SAAA,EAAW,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,CAAA;AAAA,IAC1B,SAAA,EAAW,KAAK,EAAA,GAAK,EAAA;AAAA;AAAA,IAErB,sBAAA,EAAwB;AAAA,GAC5B;AAAA,EACA,OAAA,EAAS;AAAA,IACL,cAAA,EAAgB;AAAA,MACZ,OAAA,EAAS,IAAA;AAAA,MACT,gBAAA,EAAkB;AAAA,QACd,QAAA;AAAA,QACA;AAAA;AACJ;AACJ,GACJ;AAAA,EACA,cAAA;AAAA;AAAA;AAAA,EAGA,QAAA,EAAU;AAAA;AAAA;AAAA;AAAA,IAIN,kBAAkB,CAAC,aAAA;AAAA,IACnB,uBAAA,EAAyB;AAAA,MACrB,OAAA,EAAS,IAAA;AAAA;AAAA,MAET,WAAA,EAAa;AAAA,KACjB;AAAA;AAAA,IAEA,QAAA,EAAU;AAAA,MACN,UAAA,kBAAY,MAAA,CAAA,MAAI9B,MAAAA,EAAO,EAAX,YAAA,CAAA;AAAA,MACZ,oBAAA,EAAsB;AAAA,KAC1B;AAAA;AAAA,IAEA,SAAA,EAAW;AAAA,MACP,gBAAA,EAAkB;AAAA,QACd,kBAAA;AAAA,QACA,WAAA;AAAA,QACA,iBAAA;AAAA,QACA;AAAA,OACJ;AAAA,MACA,iBAAA,EAAmB;AAAA,KACvB;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,qBAAA,EAAuB;AAAA,MACnB,SAAS,CAAC,aAAA;AAAA,MACV,MAAA,EAAQ,CAAC,aAAA,GAAgB,YAAA,GAAe;AAAA,KAC5C;AAAA,IACA,uBAAA,EAAyB;AAAA,MACrB,QAAA,EAAU,KAAA;AAAA,MACV,QAAQ,CAAC,aAAA;AAAA,MACT,QAAA,EAAU,IAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACV;AAAA;AAAA;AAAA;AAAA,IAIA,OAAA,EAAS;AAAA,MACL,KAAA,EAAO;AAAA,QACH,IAAA,EAAM,aAAA;AAAA,QACN,UAAA,EAAY;AAAA,UACR,QAAA,EAAU,gBAAgB,KAAA,GAAQ,MAAA;AAAA,UAClC,QAAQ,CAAC,aAAA;AAAA,UACT,QAAA,EAAU,IAAA;AAAA,UACV,IAAA,EAAM,GAAA;AAAA,UACN,MAAA,EAAQ;AAAA;AACZ,OACJ;AAAA,MACA,IAAA,EAAM;AAAA,QACF,IAAA,EAAM,YAAA;AAAA,QACN,UAAA,EAAY;AAAA,UACR,QAAA,EAAU,gBAAgB,KAAA,GAAQ,MAAA;AAAA,UAClC,QAAQ,CAAC,aAAA;AAAA,UACT,QAAA,EAAU,IAAA;AAAA,UACV,IAAA,EAAM,GAAA;AAAA,UACN,MAAA,EAAQ;AAAA;AACZ;AACJ,KACJ;AAAA,IACA,YAAA,EAAc;AAAA,GAClB;AAAA;AAAA,EAEA,SAAA,EAAW;AAAA,IACP,MAAA,EAAQ,EAAA;AAAA,IACR,GAAA,EAAK,GAAA;AAAA;AAAA,IAEL,OAAA,EAAS,QAAA;AAAA,IACT,WAAA,EAAa;AAAA,MACT,gBAAA,EAAkB;AAAA,QACd,MAAA,EAAQ,EAAA;AAAA,QACR,GAAA,EAAK;AAAA,OACT;AAAA,MACA,iBAAA,EAAmB;AAAA,QACf,MAAA,EAAQ,EAAA;AAAA,QACR,GAAA,EAAK;AAAA,OACT;AAAA,MACA,UAAA,EAAY;AAAA,QACR,MAAA,EAAQ,EAAA;AAAA,QACR,GAAA,EAAK;AAAA,OACT;AAAA,MACA,SAAA,EAAW,KAAA;AAAA,MACX,eAAA,EAAiB,KAAA;AAAA,MACjB,cAAA,EAAgB;AAAA;AACpB,GACJ;AAAA;AAAA;AAAA,EAGA,aAAA,EAAe;AAAA,IACX,OAAA,EAAS;AAAA,MACL,MAAA,EAAQ;AAAA,QACJ,KAAA,gCAAc,OAAA,KAAU;AACpB,UAAA,MAAM,EAAE,MAAA,EAAQ,EAAA,EAAI,SAAA,EAAU,GAAI,OAAA;AAElC,UAAA,MAAM,WAAW,iBAAA,EAAmB;AAAA,YAChC;AAAA,WACH,CAAA;AAGD,UAAA,MAAM,WAAW,aAAA,EAAe;AAAA,YAC5B,MAAA;AAAA,YACA,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,WACrC,CAAA;AAID,UAAA,IAAI;AAEA,YAAA,MAAM,EAAE,EAAA,EAAA3C,GAAAA,EAAG,GAAI,MAAM,OAAO,oBAAiB,CAAA;AAC7C,YAAA,MAAM,EAAE,GAAA,EAAI,GAAI,MAAM,OAAO,aAAa,CAAA;AAC1C,YAAA,IAAIA,GAAAA,EAAI;AACJ,cAAA,MAAM,MAAA,GAAS,MAAMA,GAAAA,CAAG,OAAA,CAAQ,GAAA;AAAA;AAAA,yBAAA,EAEjC,MAAM;AAAA,kBAAA,EACb,SAAS;AAAA,OAAA,CACrB,CAAA;AACoB,cAAA,MAAM,YAAA,GAAe,OAAO,QAAA,IAAY,CAAA;AACxC,cAAA,IAAI,eAAe,CAAA,EAAG;AAClB,gBAAA,MAAA,CAAO,KAAK,yDAAA,EAA2D;AAAA,kBACnE,MAAA;AAAA,kBACA,SAAA;AAAA,kBACA;AAAA,iBACH,CAAA;AACD,gBAAA,MAAM,WAAW,qBAAA,EAAuB;AAAA,kBACpC,MAAA;AAAA,kBACA,MAAA,EAAQ,OAAA;AAAA,kBACR;AAAA,iBACH,CAAA;AAAA,cACL;AAAA,YACJ;AAAA,UACJ,SAAS,KAAA,EAAO;AAEZ,YAAA,MAAA,CAAO,KAAK,sCAAA,EAAwC;AAAA,cAChD,MAAA;AAAA,cACA,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,aAC/D,CAAA;AAAA,UACL;AAAA,QACJ,CAAA,EA9CO,OAAA;AAAA,OA+CX;AAAA,MACA,MAAA,EAAQ;AAAA,QACJ,KAAA,gCAAc,OAAA,KAAU;AACpB,UAAA,MAAM,EAAE,QAAO,GAAI,OAAA;AAEnB,UAAA,MAAM,WAAW,iBAAA,EAAmB;AAAA,YAChC;AAAA,WACH,CAAA;AAED,UAAA,MAAM,WAAW,cAAA,EAAgB;AAAA,YAC7B,MAAA;AAAA,YACA,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,WACrC,CAAA;AAAA,QACL,CAAA,EAXO,OAAA;AAAA;AAYX,KACJ;AAAA,IACA,IAAA,EAAM;AAAA,MACF,MAAA,EAAQ;AAAA,QACJ,MAAA,gCAAekC,KAAAA,KAAO;AAOlB,UAAA,MAAM,aAAa,MAAM,aAAA,EAAc,CAAE,KAAA,CAAM,MAAI,IAAI,CAAA;AACvD,UAAA,MAAM,UAAA,GAAa,UAAA,EAAY,UAAA,IAAcA,KAAAA,CAAK,YAAA;AAElD,UAAA,IAAI,CAAC,UAAA,IAAcA,KAAAA,CAAK,KAAA,EAAO;AAC3B,YAAA,MAAM,EAAE,gBAAgB,mBAAA,EAAqB,WAAA,EAAa,kBAAkB,cAAA,EAAe,GAAI,MAAM,OAAO,oBAAiB,CAAA;AAC7H,YAAA,MAAM,EAAE,GAAA,EAAAoB,IAAAA,EAAK,EAAA,EAAAC,GAAAA,EAAI,EAAA,EAAI,MAAA,EAAAC,OAAAA,EAAQ,GAAA,EAAI,GAAI,MAAM,OAAO,aAAa,CAAA;AAC/D,YAAA,MAAM,KAAA,GAAQ,MAAM,EAAA,CAAG,MAAA,EAAO,CAAE,IAAA,CAAK,mBAAmB,CAAA,CAAE,KAAA,CAAMF,IAAAA,CAAIC,GAAAA,CAAG,mBAAA,CAAoB,QAAQrB,KAAAA,CAAK,KAAK,CAAA,EAAGqB,GAAAA,CAAG,mBAAA,CAAoB,OAAA,EAAS,qBAAqB,CAAA,EAAG,GAAG,mBAAA,CAAoB,SAAA,kBAAW,IAAI,IAAA,EAAM,CAAC,CAAC,CAAA,CAAE,MAAM,CAAC,CAAA;AAC/N,YAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AAClB,cAAA,MAAM,OAAA,GAAU,MAAM,EAAA,CAAG,MAAA,EAAO,CAAE,IAAA,CAAK,gBAAgB,CAAA,CAAE,KAAA,CAAMD,IAAAA,CAAI,GAAA,CAAA,MAAA,EAAY,gBAAA,CAAiB,YAAY,CAAA,UAAA,EAAapB,KAAAA,CAAK,KAAK,CAAA,CAAA,CAAA,EAAK,GAAA,CAAA,EAAM,gBAAA,CAAiB,WAAW,CAAA,GAAA,EAAM,iBAAiB,OAAO,CAAA,CAAA,EAAIsB,OAAAA,CAAO,gBAAA,CAAiB,SAAS,CAAC,CAAC,CAAA,CAAE,MAAM,CAAC,CAAA;AACxP,cAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AAEpB,gBAAA,MAAM,cAAA,CAAe,EAAA,EAAI,OAAA,CAAQ,CAAC,EAAE,EAAE,CAAA;AACtC,gBAAA,MAAM,EAAA,CAAG,MAAA,CAAO,mBAAmB,CAAA,CAAE,KAAA,CAAMD,IAAG,mBAAA,CAAoB,MAAA,EAAQrB,KAAAA,CAAK,KAAK,CAAC,CAAA;AACrF,gBAAA,OAAO;AAAA,kBACH,IAAA,EAAMA;AAAA,iBACV;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AACA,UAAA,IAAI,CAAC,UAAA,EAAY;AACb,YAAA,MAAM,IAAI,MAAM,mEAAmE,CAAA;AAAA,UACvF;AACA,UAAA,IAAI;AACA,YAAA,MAAM,EAAE,EAAA,EAAAlC,GAAAA,EAAG,GAAI,MAAM,OAAO,oBAAiB,CAAA;AAC7C,YAAA,MAAM,EAAE,WAAA,EAAY,GAAI,MAAM,OAAO,oBAAiB,CAAA;AACtD,YAAA,MAAM,EAAE,KAAAsD,IAAAA,EAAK,EAAA,EAAAC,KAAI,GAAA,EAAI,GAAI,MAAM,OAAO,aAAa,CAAA;AACnD,YAAA,MAAM,OAAO,MAAMvD,GAAAA,CAAG,MAAA,EAAO,CAAE,KAAK,WAAW,CAAA,CAAE,KAAA,CAAMuD,GAAAA,CAAG,YAAY,IAAA,EAAM,UAAU,CAAC,CAAA,CAAE,MAAM,CAAC,CAAA;AAChG,YAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACnB,cAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAAA,YACzC;AAEA,YAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AACpB,YAAA,IAAI,MAAM,SAAA,IAAa,KAAA,CAAM,SAAA,mBAAY,IAAI,MAAK,EAAG;AACjD,cAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAAA,YACzC;AAEA,YAAA,MAAM,SAAS,MAAMvD,GAAAA,CAAG,MAAA,CAAO,WAAW,EAAE,GAAA,CAAI;AAAA,cAC5C,WAAA,EAAa,GAAA,CAAA,EAAM,WAAA,CAAY,WAAW,CAAA,IAAA,CAAA;AAAA,cAC1C,SAAA,sBAAe,IAAA;AAAK,aACvB,CAAA,CAAE,KAAA,CAAMsD,KAAIC,GAAAA,CAAG,WAAA,CAAY,IAAI,KAAA,CAAM,EAAE,GAAG,GAAA,CAAA,EAAM,WAAA,CAAY,WAAW,CAAA,GAAA,EAAM,WAAA,CAAY,OAAO,CAAA,CAAE,CAAC,EAAE,SAAA,EAAU;AAChH,YAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACrB,cAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,YAC3C;AAAA,UACJ,SAAS,KAAA,EAAO;AACZ,YAAA,IAAI,iBAAiB,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC9D,cAAA,MAAM,KAAA;AAAA,YACV;AACA,YAAA,MAAA,CAAO,MAAM,sBAAA,EAAwB;AAAA,cACjC;AAAA,aACH,CAAA;AACD,YAAA,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAAA,UACvC;AACA,UAAA,OAAO;AAAA,YACH,IAAA,EAAMrB;AAAA,WACV;AAAA,QACJ,CAAA,EA9DQ,QAAA,CAAA;AAAA,QA+DR,KAAA,gCAAcA,KAAAA,KAAO;AACjB,UAAA,MAAM,EAAE,EAAA,EAAI,MAAA,EAAQ,KAAA,EAAM,GAAIA,KAAAA;AAE9B,UAAA,MAAM,WAAW,aAAA,EAAe;AAAA,YAC5B,MAAA;AAAA,YACA,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,WACrC,CAAA;AAED,UAAA,iBAAA,CAAkB;AAAA,YACd,MAAA;AAAA,YACA,KAAA;AAAA,YACA,YAAA,EAAc;AAAA,WACjB,CAAA,CAAE,KAAA,CAAM,CAAC,GAAA,KAAM;AACZ,YAAA,MAAA,CAAO,KAAK,2CAAA,EAA6C;AAAA,cACrD,MAAA;AAAA,cACA,OAAO,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG;AAAA,aACzD,CAAA;AAAA,UACL,CAAC,CAAA;AAAA,QAGL,CAAA,EApBO,OAAA;AAAA;AAqBX;AACJ,GACJ;AAAA,EACA,OAAA,EAAS;AAAA,IACL,MAAA,EAAO;AAAA,IACP,mBAAA,CAAoB;AAAA,MAChB,eAAA,EAAiB,GAAG,MAAM,CAAA,KAAA,CAAA;AAAA,MAC1B,QAAQ;AAAC,KACZ,CAAA;AAAA,IACD,KAAA,EAAM;AAAA,IACN,OAAA,EAAQ;AAAA;AAAA,IAER,SAAA,CAAU;AAAA,MACN,aAAA,kBAAe,MAAA,CAAA,OAAO,EAAE,KAAA,EAAO,KAAI,KAAI;AACnC,QAAA,MAAM,SAAA,CAAU;AAAA,UACZ,IAAA,EAAM,2BAAA;AAAA,UACN,EAAA,EAAI,KAAA;AAAA,UACJ,OAAA,EAAS,kBAAA;AAAA,UACT,IAAA,EAAM,qBAAqB,GAAG,CAAA,0DAAA;AAAA,SACjC,CAAA;AAAA,MACL,CAAA,EAPe,eAAA;AAAA,KAQlB,CAAA;AAAA;AAAA,IAED,YAAA,EAAa;AAAA;AAAA;AAAA;AAAA,IAIb,YAAA,EAAa;AAAA;AAAA,IAEb,GAAA,CAAI;AAAA,MACA,uBAAA,EAAyB;AAAA,KAC5B,CAAA;AAAA;AAAA;AAAA,IAGD,YAAA,CAAa;AAAA;AAAA;AAAA;AAAA;AAAA,MAKT,SAAA,EAAW,GAAG,WAAW,CAAA,WAAA;AAAA,KAC5B;AAAA,GACL;AAAA,EACA,UAAA,EAAY;AAAA,IACR,OAAA,CAAS,OAAO,GAAA,EAAK;AAEjB,MAAA,MAAM,YAAA,GAAe;AAAA,QACjB,KAAA;AAAA,QACA,OAAA,EAAS;AAAA,OACb;AAEA,MAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACpC,QAAA,IAAI,UAAU,KAAA,EAAO;AACjB,UAAA,YAAA,CAAa,YAAY,KAAA,CAAM,IAAA;AAAA,QACnC;AACA,QAAA,IAAI,aAAa,KAAA,EAAO;AACpB,UAAA,YAAA,CAAa,eAAe,KAAA,CAAM,OAAA;AAAA,QACtC;AACA,QAAA,IAAI,gBAAgB,KAAA,EAAO;AACvB,UAAA,YAAA,CAAa,aAAa,KAAA,CAAM,UAAA;AAAA,QACpC;AAAA,MACJ;AAEA,MAAA,IAAI,YAAA,GAAe,KAAA;AACnB,MAAA,IAAI,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,EAAU;AAChC,QAAA,IAAI,aAAa,GAAA,EAAK;AAClB,UAAA,MAAM,UAAU,GAAA,CAAI,OAAA;AACpB,UAAA,YAAA,CAAa,aAAa,OAAA,CAAQ,GAAA;AAClC,UAAA,YAAA,CAAa,gBAAgB,OAAA,CAAQ,MAAA;AAErC,UAAA,IAAI,OAAA,CAAQ,GAAA,EAAK,QAAA,CAAS,qBAAqB,CAAA,EAAG;AAC9C,YAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,YAAY,CAAA,CAAE,CAAC,CAAA,EAAG,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA;AACjE,YAAA,YAAA,CAAa,aAAA,GAAgB,QAAA;AAC7B,YAAA,YAAA,CAAa,SAAA,GAAY,sBAAA;AACzB,YAAA,YAAA,GAAe,IAAA;AACf,YAAA,MAAA,CAAO,KAAA,CAAM,wBAAwB,YAAY,CAAA;AAAA,UACrD;AAAA,QACJ;AAAA,MACJ;AAEA,MAAA,IAAI,CAAC,YAAA,EAAc;AACf,QAAA,MAAA,CAAO,KAAA,CAAM,yBAAyB,YAAY,CAAA;AAAA,MACtD;AAEA,MAAA,UAAA,CAAW,oBAAA,EAAsB;AAAA,QAC7B,WAAW,YAAA,CAAa,SAAA;AAAA,QACxB,cAAc,YAAA,CAAa,YAAA;AAAA,QAC3B,MAAM,YAAA,CAAa,UAAA;AAAA,QACnB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,OACrC,CAAA,CAAE,KAAA,CAAM,MAAI;AAAA,MAEb,CAAC,CAAA;AAED,MAAA,OAAO,oBAAuB,CAAA,CAAE,IAAA,CAAK,CAAC,EAAE,cAAa,KAAI;AACrD,QAAA,IAAI,YAAA,IAAgB,iBAAiB,KAAA,EAAO;AACxC,UAAA,YAAA,CAAa,KAAA,EAAO;AAAA,YAChB,IAAA,EAAM;AAAA,cACF,SAAA,EAAW,eAAe,gBAAA,GAAmB,UAAA;AAAA,cAC7C,GAAG,aAAa,SAAA,GAAY;AAAA,gBACxB,SAAA,EAAW,MAAA,CAAO,YAAA,CAAa,SAAS;AAAA,kBACxC;AAAC,aACT;AAAA,YACA,KAAA,EAAO;AAAA,WACV,CAAA;AAAA,QACL;AAAA,MACJ,CAAC,CAAA,CAAE,KAAA,CAAM,MAAI;AAAA,MAEb,CAAC,CAAA;AAAA,IACL;AAAA;AAER,CAAC,CAAA;AACuF,IAAM,IAAA,GAAO","file":"auth-YUOZ5X5P.js","sourcesContent":["/**\n * ConfigStore v2 - Unified Zod Schemas\n *\n * Single source of truth for all configuration across:\n * - VS Code Extension\n * - CLI\n * - MCP Server\n *\n * Type-safe with runtime validation. Zero-config defaults included.\n */\n\nimport { WorkspaceRegistrationSchema } from \"@vreko/contracts/context\";\nimport { z } from \"zod\";\n\n/**\n * Protection levels (canonical)\n */\nexport const ProtectionLevelSchema = z.enum([\"watch\", \"warn\", \"block\"]);\nexport type ProtectionLevel = z.infer<typeof ProtectionLevelSchema>;\n\n/**\n * Single protection rule\n */\nexport const ProtectionRuleSchema = z.object({\n\tpattern: z.string().describe(\"Glob pattern (e.g., '*.env*', 'package.json')\"),\n\tlevel: ProtectionLevelSchema,\n\treason: z.string().optional().describe(\"Why this pattern is protected\"),\n\tprecedence: z.number().int().min(0).max(1000).default(0),\n});\nexport type ProtectionRule = z.infer<typeof ProtectionRuleSchema>;\n\n/**\n * Engine configuration\n */\nexport const EngineConfigSchema = z.object({\n\tmaxDepth: z.number().int().min(0).max(10).default(2).describe(\"Max dependency tree depth for analysis\"),\n\tburstThreshold: z\n\t\t.number()\n\t\t.int()\n\t\t.min(1)\n\t\t.max(100)\n\t\t.default(30)\n\t\t.describe(\"Min simultaneous file changes to trigger burst detection\"),\n\tcooldowns: z\n\t\t.object({\n\t\t\tblock: z.number().int().min(0).default(60000),\n\t\t\twarn: z.number().int().min(0).default(30000),\n\t\t\twatch: z.number().int().min(0).default(0),\n\t\t})\n\t\t.default({ block: 60000, warn: 30000, watch: 0 })\n\t\t.describe(\"Cooldown durations (ms) between alerts per level\"),\n});\nexport type EngineConfig = z.infer<typeof EngineConfigSchema>;\n\n/**\n * Ignore patterns\n */\nexport const IgnorePatternsSchema = z\n\t.array(z.string())\n\t.default([])\n\t.describe(\"Glob patterns to exclude from protection (e.g., node_modules, .git)\");\n\n/**\n * Privacy and consent settings for VS Code Extension\n */\nexport const PrivacySettingsSchema = z\n\t.object({\n\t\tconsent: z.boolean().default(false).describe(\"User has given privacy consent\"),\n\t\tclipboard: z.boolean().default(false).describe(\"Allow clipboard monitoring\"),\n\t\twatcher: z.boolean().default(false).describe(\"Allow file watcher\"),\n\t\tgitWrapper: z.boolean().default(false).describe(\"Allow git wrapper integration\"),\n\t\tlastReminded: z.string().optional().describe(\"ISO timestamp of last consent reminder\"),\n\t})\n\t.default({});\nexport type PrivacySettings = z.infer<typeof PrivacySettingsSchema>;\n\n/**\n * Notification settings\n */\nexport const NotificationsSettingsSchema = z\n\t.object({\n\t\tenabled: z.boolean().default(true),\n\t\tquietHours: z\n\t\t\t.object({\n\t\t\t\tstart: z.string().default(\"22:00\"),\n\t\t\t\tend: z.string().default(\"08:00\"),\n\t\t\t})\n\t\t\t.default({ start: \"22:00\", end: \"08:00\" }),\n\t\trateLimit: z.number().int().min(1).default(5).describe(\"Max notifications per minute\"),\n\t})\n\t.default({});\nexport type NotificationsSettings = z.infer<typeof NotificationsSettingsSchema>;\n\n/**\n * Snapshot settings\n */\nexport const SnapshotSettingsSchema = z\n\t.object({\n\t\tenabled: z.boolean().default(true),\n\t\tautoCreate: z.boolean().default(true),\n\t\tretentionDays: z.number().int().min(1).default(30),\n\t})\n\t.default({});\nexport type SnapshotSettings = z.infer<typeof SnapshotSettingsSchema>;\n\n/**\n * AI features settings\n */\nexport const AISettingsSchema = z\n\t.object({\n\t\tenabled: z.boolean().default(true),\n\t\tcontext: z.boolean().default(true).describe(\"Include code context in AI analysis\"),\n\t\tcopilot: z.boolean().default(true).describe(\"Integrate with GitHub Copilot\"),\n\t})\n\t.default({});\nexport type AISettings = z.infer<typeof AISettingsSchema>;\n\n/**\n * Guardian plugin settings\n */\nexport const GuardianPluginsSchema = z\n\t.object({\n\t\tsecretDetection: z.boolean().default(true),\n\t\tmockReplacement: z.boolean().default(true),\n\t\tphantomDependency: z.boolean().default(true),\n\t})\n\t.default({});\n\nexport const GuardianThresholdsSchema = z\n\t.object({\n\t\twarn: z.number().int().min(0).default(6),\n\t\tblock: z.number().int().min(0).default(8),\n\t})\n\t.default({ warn: 6, block: 8 });\n\nexport const GuardianSettingsSchema = z\n\t.object({\n\t\tenabled: z.boolean().default(true),\n\t\twarnThreshold: z.number().int().min(0).max(100).default(5),\n\t\tblockThreshold: z.number().int().min(0).max(100).default(8),\n\t\tprotectionLevel: ProtectionLevelSchema.default(\"warn\"),\n\t\tplugins: GuardianPluginsSchema,\n\t\tthresholds: GuardianThresholdsSchema,\n\t})\n\t.default({});\nexport type GuardianSettings = z.infer<typeof GuardianSettingsSchema>;\n\n/**\n * Auto-decision engine settings\n */\nexport const AutoDecisionSettingsSchema = z\n\t.object({\n\t\triskThreshold: z\n\t\t\t.number()\n\t\t\t.int()\n\t\t\t.min(0)\n\t\t\t.max(100)\n\t\t\t.default(60)\n\t\t\t.describe(\"Risk score threshold (0-100) for automatic snapshot creation\"),\n\t\tnotifyThreshold: z\n\t\t\t.number()\n\t\t\t.int()\n\t\t\t.min(0)\n\t\t\t.max(100)\n\t\t\t.default(40)\n\t\t\t.describe(\"Risk score threshold (0-100) for user notifications\"),\n\t\tminFilesForBurst: z\n\t\t\t.number()\n\t\t\t.int()\n\t\t\t.min(1)\n\t\t\t.default(3)\n\t\t\t.describe(\"Minimum files changed simultaneously to trigger burst detection\"),\n\t\tmaxSnapshotsPerMinute: z\n\t\t\t.number()\n\t\t\t.int()\n\t\t\t.min(1)\n\t\t\t.default(4)\n\t\t\t.describe(\"Maximum snapshots allowed per minute (rate limiting)\"),\n\t})\n\t.default({});\nexport type AutoDecisionSettings = z.infer<typeof AutoDecisionSettingsSchema>;\n\n/**\n * MCP Server configuration\n */\nexport const MCPSettingsSchema = z\n\t.object({\n\t\tperformanceBudgets: z\n\t\t\t.record(z.number().int().min(0))\n\t\t\t.default({ analyze_risk: 200, create_snapshot: 500 })\n\t\t\t.describe(\"Performance budgets (ms) for MCP operations\"),\n\t\tcontext7: z\n\t\t\t.object({\n\t\t\t\tapiKey: z.string().optional(),\n\t\t\t\tapiUrl: z.string().url().default(\"https://context7.com/api\"),\n\t\t\t\tcacheTtlSearch: z.number().int().min(0).default(3600),\n\t\t\t\tcacheTtlDocs: z.number().int().min(0).default(86400),\n\t\t\t})\n\t\t\t.default({}),\n\t\tapi: z\n\t\t\t.object({\n\t\t\t\tapiKey: z.string().optional(),\n\t\t\t\tbaseUrl: z.string().url().default(\"https://api.vreko.dev\"),\n\t\t\t})\n\t\t\t.default({}),\n\t\thttp: z\n\t\t\t.object({\n\t\t\t\tallowedOrigins: z.array(z.string()).default([\"*\"]),\n\t\t\t\tapiUrl: z.string().url().default(\"http://api:8080\"),\n\t\t\t})\n\t\t\t.default({}),\n\t})\n\t.default({});\nexport type MCPSettings = z.infer<typeof MCPSettingsSchema>;\n\n/**\n * Unified settings for AI detection and behavior\n */\nexport const SettingsSchema = z\n\t.object({\n\t\tdefaultProtectionLevel: ProtectionLevelSchema.default(\"watch\"),\n\t\trequireSnapshotMessage: z.boolean().default(true),\n\t\tmaxSnapshots: z.number().int().min(1).default(100),\n\t\taiDetectionEnabled: z.boolean().default(true),\n\t\tautoRestoreOnDetection: z.boolean().default(false),\n\t\tprivacy: PrivacySettingsSchema,\n\t\tnotifications: NotificationsSettingsSchema,\n\t\tsnapshots: SnapshotSettingsSchema,\n\t\tai: AISettingsSchema,\n\t\tguardian: GuardianSettingsSchema,\n\t\tautoDecision: AutoDecisionSettingsSchema,\n\t\twebBaseUrl: z.string().url().default(\"https://console.vreko.dev\"),\n\t\tapiBaseUrl: z.string().url().optional(),\n\t\tmcp: MCPSettingsSchema,\n\t})\n\t.default({});\nexport type Settings = z.infer<typeof SettingsSchema>;\n\n/**\n * Policy overrides (temporary protection changes)\n */\nexport const PolicyOverrideSchema = z.object({\n\tpattern: z.string(),\n\tlevel: ProtectionLevelSchema,\n\tttl: z.number().optional().describe(\"Expiration timestamp (ms since epoch)\"),\n});\n\nexport const PoliciesSchema = z\n\t.object({\n\t\tenforceProtectionLevels: z.boolean().default(false),\n\t\tallowOverrides: z.boolean().default(true),\n\t\toverrides: z.array(PolicyOverrideSchema).default([]),\n\t})\n\t.default({});\nexport type Policies = z.infer<typeof PoliciesSchema>;\n\n/**\n * Main configuration schema - compatible across all systems\n */\nexport const ConfigStoreV2Schema = z.object({\n\tversion: z.literal(2).default(2),\n\tprotections: z.array(ProtectionRuleSchema).default([]),\n\tignore: IgnorePatternsSchema,\n\tengine: EngineConfigSchema.default({}),\n\tsettings: SettingsSchema,\n\tpolicies: PoliciesSchema,\n\tmcp: MCPSettingsSchema.optional(),\n\t// Phase 2: Workspace registry (SB-CTX-001)\n\tworkspaces: z.array(WorkspaceRegistrationSchema).default([]),\n});\n\nexport type ConfigStoreV2 = z.infer<typeof ConfigStoreV2Schema>;\n\n/**\n * Default empty config (fully populated with schema defaults)\n */\nexport const DEFAULT_CONFIG: ConfigStoreV2 = {\n\tversion: 2,\n\tprotections: [],\n\tignore: [],\n\tworkspaces: [],\n\tengine: {\n\t\tmaxDepth: 2,\n\t\tburstThreshold: 30,\n\t\tcooldowns: { block: 60000, warn: 30000, watch: 0 },\n\t},\n\tsettings: {\n\t\tdefaultProtectionLevel: \"watch\",\n\t\trequireSnapshotMessage: true,\n\t\tmaxSnapshots: 100,\n\t\taiDetectionEnabled: true,\n\t\tautoRestoreOnDetection: false,\n\t\tprivacy: {\n\t\t\tconsent: false,\n\t\t\tclipboard: false,\n\t\t\twatcher: false,\n\t\t\tgitWrapper: false,\n\t\t},\n\t\tnotifications: {\n\t\t\tenabled: true,\n\t\t\tquietHours: { start: \"22:00\", end: \"08:00\" },\n\t\t\trateLimit: 5,\n\t\t},\n\t\tsnapshots: {\n\t\t\tenabled: true,\n\t\t\tautoCreate: true,\n\t\t\tretentionDays: 30,\n\t\t},\n\t\tai: {\n\t\t\tenabled: true,\n\t\t\tcontext: true,\n\t\t\tcopilot: true,\n\t\t},\n\t\tguardian: {\n\t\t\tenabled: true,\n\t\t\twarnThreshold: 5,\n\t\t\tblockThreshold: 8,\n\t\t\tprotectionLevel: \"warn\",\n\t\t\tplugins: {\n\t\t\t\tsecretDetection: true,\n\t\t\t\tmockReplacement: true,\n\t\t\t\tphantomDependency: true,\n\t\t\t},\n\t\t\tthresholds: {\n\t\t\t\twarn: 6,\n\t\t\t\tblock: 8,\n\t\t\t},\n\t\t},\n\t\tautoDecision: {\n\t\t\triskThreshold: 60,\n\t\t\tnotifyThreshold: 40,\n\t\t\tminFilesForBurst: 3,\n\t\t\tmaxSnapshotsPerMinute: 4,\n\t\t},\n\t\twebBaseUrl: \"https://console.vreko.dev\",\n\t\tmcp: {\n\t\t\tperformanceBudgets: { analyze_risk: 200, create_snapshot: 500 },\n\t\t\tcontext7: { apiUrl: \"https://context7.com/api\", cacheTtlSearch: 3600, cacheTtlDocs: 86400 },\n\t\t\tapi: { baseUrl: \"https://api.vreko.dev\" },\n\t\t\thttp: { allowedOrigins: [\"*\"], apiUrl: \"http://api:8080\" },\n\t\t},\n\t},\n\tpolicies: {\n\t\tenforceProtectionLevels: false,\n\t\tallowOverrides: true,\n\t\toverrides: [],\n\t},\n};\n\n/**\n * Zero-config defaults for common patterns\n */\nexport const ZERO_CONFIG_DEFAULTS: ConfigStoreV2 = {\n\t...DEFAULT_CONFIG,\n\tprotections: [\n\t\t{\n\t\t\tpattern: \"*.env*\",\n\t\t\tlevel: \"block\",\n\t\t\treason: \"Environment files contain sensitive credentials\",\n\t\t\tprecedence: 100,\n\t\t},\n\t\t{\n\t\t\tpattern: \".env.local\",\n\t\t\tlevel: \"block\",\n\t\t\treason: \"Local environment overrides\",\n\t\t\tprecedence: 100,\n\t\t},\n\t\t{\n\t\t\tpattern: \"**/*.secret*\",\n\t\t\tlevel: \"block\",\n\t\t\treason: \"Secret files must be protected\",\n\t\t\tprecedence: 100,\n\t\t},\n\t\t{\n\t\t\tpattern: \"**/credentials*\",\n\t\t\tlevel: \"block\",\n\t\t\treason: \"Credential files must be protected\",\n\t\t\tprecedence: 100,\n\t\t},\n\t\t{\n\t\t\tpattern: \"package*.json\",\n\t\t\tlevel: \"warn\",\n\t\t\treason: \"Package files affect dependencies\",\n\t\t\tprecedence: 50,\n\t\t},\n\t\t{\n\t\t\tpattern: \"**/migrations/*\",\n\t\t\tlevel: \"block\",\n\t\t\treason: \"Database migrations are irreversible\",\n\t\t\tprecedence: 100,\n\t\t},\n\t\t{\n\t\t\tpattern: \".env\",\n\t\t\tlevel: \"block\",\n\t\t\treason: \"Environment file\",\n\t\t\tprecedence: 100,\n\t\t},\n\t\t{\n\t\t\tpattern: \".git/**\",\n\t\t\tlevel: \"watch\",\n\t\t\treason: \"Git metadata\",\n\t\t\tprecedence: 10,\n\t\t},\n\t],\n\tignore: [\"node_modules/**\", \".git/**\", \"dist/**\", \"build/**\", \"*.log\"],\n};\n\n/**\n * Validate config against schema\n */\nexport function validateConfig(\n\tdata: unknown,\n): { valid: true; data: ConfigStoreV2 } | { valid: false; errors: string[] } {\n\ttry {\n\t\tconst parsed = ConfigStoreV2Schema.parse(data);\n\t\treturn { valid: true, data: parsed };\n\t} catch (err) {\n\t\tif (err instanceof z.ZodError) {\n\t\t\tconst errors = err.errors.map((e) => `${e.path.join(\".\")}: ${e.message}`);\n\t\t\treturn { valid: false, errors };\n\t\t}\n\t\treturn { valid: false, errors: [\"Unknown validation error\"] };\n\t}\n}\n\n/**\n * Parse and validate config from JSON string\n */\nexport function parseConfig(\n\tjsonString: string,\n): { valid: true; data: ConfigStoreV2 } | { valid: false; errors: string[] } {\n\ttry {\n\t\tconst data = JSON.parse(jsonString);\n\t\treturn validateConfig(data);\n\t} catch (err) {\n\t\treturn { valid: false, errors: [err instanceof Error ? err.message : \"Failed to parse JSON\"] };\n\t}\n}\n\n/**\n * Validate that a JSON string is well-formed and can be parsed back.\n * Catches malformed output before writing to disk.\n *\n * @param jsonString - The JSON string to validate\n * @returns { valid: true } or { valid: false; errors: string[] }\n */\nexport function validateJsonOutput(jsonString: string): { valid: true } | { valid: false; errors: string[] } {\n\tconst errors: string[] = [];\n\n\t// Check for suspicious caret character (possible typo)\n\tif (/\\^/.test(jsonString)) {\n\t\terrors.push(\"Suspicious caret (^) character found - possible typo\");\n\t}\n\n\t// Check for control characters (codes 0-8, 11, 12, 14-31) without regex control chars\n\tconst hasControlChars = Array.from(jsonString).some((ch) => {\n\t\tconst code = ch.charCodeAt(0);\n\t\treturn (code >= 0 && code <= 8) || code === 11 || code === 12 || (code >= 14 && code <= 31);\n\t});\n\tif (hasControlChars) {\n\t\terrors.push(\"Control characters found in output\");\n\t}\n\n\t// Try to parse the JSON to ensure it's valid\n\ttry {\n\t\tJSON.parse(jsonString);\n\t} catch (err) {\n\t\terrors.push(`Invalid JSON: ${err instanceof Error ? err.message : \"Parse error\"}`);\n\t}\n\n\tif (errors.length > 0) {\n\t\treturn { valid: false, errors };\n\t}\n\n\treturn { valid: true };\n}\n\n/**\n * Safely stringify config to JSON with validation.\n * Validates the output string before returning.\n *\n * @param config - Config to stringify\n * @param space - Number of spaces for indentation (default: 2)\n * @returns { success: true; json: string } or { success: false; errors: string[] }\n */\nexport function safeStringifyConfig(\n\tconfig: unknown,\n\tspace = 2,\n): { success: true; json: string } | { success: false; errors: string[] } {\n\ttry {\n\t\tconst jsonString = JSON.stringify(config, null, space);\n\n\t\t// Validate the output\n\t\tconst validation = validateJsonOutput(jsonString);\n\t\tif (!validation.valid) {\n\t\t\treturn { success: false, errors: validation.errors };\n\t\t}\n\n\t\treturn { success: true, json: jsonString };\n\t} catch (err) {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terrors: [`Failed to stringify: ${err instanceof Error ? err.message : \"Unknown error\"}`],\n\t\t};\n\t}\n}\n","import { Resend } from \"resend\";\n\nfunction getResendClient(): Resend {\n\tconst apiKey = process.env.RESEND_API_KEY;\n\tif (!apiKey) {\n\t\tthrow new Error(\"RESEND_API_KEY environment variable is required\");\n\t}\n\treturn new Resend(apiKey);\n}\n\nlet _resend: Resend | undefined;\n\nexport const resend = new Proxy({} as Resend, {\n\tget(_target, prop) {\n\t\tif (!_resend) {\n\t\t\t_resend = getResendClient();\n\t\t}\n\t\treturn (_resend as unknown as Record<string | symbol, unknown>)[prop];\n\t},\n});\n\nexport async function sendEmail({\n\tfrom,\n\tto,\n\tsubject,\n\thtml,\n\ttext,\n}: {\n\tfrom: string;\n\tto: string;\n\tsubject: string;\n\thtml: string;\n\ttext?: string;\n}) {\n\tconst client = getResendClient();\n\treturn client.emails.send({\n\t\tfrom,\n\t\tto,\n\t\tsubject,\n\t\thtml,\n\t\ttext,\n\t});\n}\n","/**\n * Billing Event Handlers\n *\n * Handles email sending for billing and subscription events:\n * - Payment confirmations\n * - Subscription changes\n * - Failed payments\n * - Subscription cancellations\n */\nexport class BillingEmailHandler {\n emailService;\n constructor(emailService) {\n this.emailService = emailService;\n /* intentionally empty */\n }\n /**\n * Send welcome email after successful subscription\n */\n async sendWelcome(params) {\n const request = {\n to: { email: params.to, userId: params.userId },\n category: \"onboarding\",\n priority: \"high\",\n template: {\n id: \"product.welcome\",\n props: {\n firstName: params.firstName,\n planName: params.planName,\n planFeatures: params.planFeatures,\n dashboardUrl: params.dashboardUrl,\n docsUrl: params.docsUrl,\n pioneerTier: params.pioneerTier,\n pioneerPoints: params.pioneerPoints,\n },\n },\n };\n await this.emailService.send(request);\n }\n /**\n * Send subscription cancellation confirmation\n */\n async sendCancellationConfirmation(params) {\n const request = {\n to: { email: params.to, userId: params.userId },\n category: \"billing\",\n priority: \"high\",\n template: {\n id: \"product.system-alert\",\n props: {\n alertType: \"subscription_cancelled\",\n title: \"Subscription Cancelled\",\n message: `Your ${params.planName} subscription has been cancelled and will remain active until ${params.cancellationDate.toLocaleDateString()}. Your data will be retained for ${params.dataRetentionDays} days after that date.`,\n severity: \"info\",\n actionRequired: false,\n additionalDetails: \"You can reactivate your subscription at any time before the retention period ends.\",\n timestamp: new Date().toISOString(),\n },\n },\n };\n await this.emailService.send(request);\n }\n /**\n * Send payment failure alert\n */\n async sendPaymentFailed(params) {\n const request = {\n to: { email: params.to, userId: params.userId },\n category: \"billing\",\n priority: \"critical\",\n template: {\n id: \"product.system-alert\",\n props: {\n alertType: \"payment_failed\",\n title: \"Payment Failed\",\n message: `We were unable to process your payment of ${params.amount} ${params.currency} for your ${params.planName} subscription. We'll automatically retry on ${params.retryDate.toLocaleDateString()}.`,\n severity: \"warning\",\n actionRequired: true,\n actionUrl: params.updatePaymentUrl,\n actionLabel: \"Update Payment Method\",\n additionalDetails: \"To avoid service interruption, please update your payment method or ensure sufficient funds are available.\",\n timestamp: new Date().toISOString(),\n },\n },\n };\n await this.emailService.send(request);\n }\n /**\n * Send subscription upgraded notification\n */\n async sendSubscriptionUpgraded(params) {\n const request = {\n to: { email: params.to, userId: params.userId },\n category: \"billing\",\n priority: \"normal\",\n template: {\n id: \"product.system-alert\",\n props: {\n alertType: \"subscription_upgraded\",\n title: \"Subscription Upgraded\",\n message: `You've successfully upgraded from ${params.oldPlan} to ${params.newPlan}. Your new features are now active!`,\n severity: \"info\",\n actionRequired: false,\n actionUrl: params.dashboardUrl,\n actionLabel: \"Explore New Features\",\n additionalDetails: `New features: ${params.newFeatures.join(\", \")}`,\n timestamp: new Date().toISOString(),\n },\n },\n };\n await this.emailService.send(request);\n }\n /**\n * Send trial ending reminder\n */\n async sendTrialEnding(params) {\n const request = {\n to: { email: params.to, userId: params.userId },\n category: \"billing\",\n priority: \"high\",\n template: {\n id: \"product.system-alert\",\n props: {\n alertType: \"trial_ending\",\n title: `Your ${params.planName} Trial Ends Soon`,\n message: `Your free trial ends in ${params.daysRemaining} day${params.daysRemaining !== 1 ? \"s\" : \"\"} on ${params.trialEndDate.toLocaleDateString()}. Upgrade now to keep your data and continue using Vreko.`,\n severity: \"warning\",\n actionRequired: true,\n actionUrl: params.upgradeUrl,\n actionLabel: \"Upgrade Now\",\n additionalDetails: \"After your trial ends, you can still access your account but snapshot capture will be disabled until you upgrade.\",\n timestamp: new Date().toISOString(),\n },\n },\n };\n await this.emailService.send(request);\n }\n /**\n * Send suspension notice (Day 8 of grace period)\n *\n * Called when subscription transitions from past_due to suspended\n * after 7-day grace period expires without successful payment.\n */\n async sendSuspensionNotice(params) {\n const request = {\n to: { email: params.to, userId: params.userId },\n category: \"billing\",\n priority: \"critical\",\n template: {\n id: \"product.system-alert\",\n props: {\n alertType: \"subscription_suspended\",\n title: \"Your Subscription Has Been Suspended\",\n message: `Your ${params.planName} subscription has been suspended due to payment issues. Cloud features including snapshot sync, pattern library, and history are now paused.`,\n severity: \"error\",\n actionRequired: true,\n actionUrl: params.reactivateUrl,\n actionLabel: \"Reactivate Now\",\n additionalDetails: \"Update your payment method to restore full access. Your local CLI features remain available, but cloud syncing is disabled until payment is resolved.\",\n timestamp: new Date().toISOString(),\n },\n },\n };\n await this.emailService.send(request);\n }\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Body, Container, Font, Head, Hr, Html, Img, Link, Preview, Section, Tailwind, Text, } from \"@react-email/components\";\n// Brand tokens - mirrors brand/colors.json\nexport const brand = {\n background: \"#0A0A0A\",\n surface: \"#111111\",\n surfaceElevated: \"#1A1A1A\",\n border: \"#27272A\",\n primary: \"#4ADE80\",\n primaryDark: \"#22C55E\",\n textPrimary: \"#FAFAFA\",\n textSecondary: \"#A1A1AA\",\n textMuted: \"#52525B\",\n danger: \"#EF4444\",\n warning: \"#FF6B35\",\n success: \"#34D399\",\n info: \"#3B82F6\",\n};\n// Absolute URLs required by email clients\nconst EMAIL_HEADER_URL = \"https://vreko.dev/brand/email/email-header.png\";\nconst EMAIL_FOOTER_ICON_URL = \"https://vreko.dev/brand/email/email-footer-icon.png\";\nexport default function Wrapper({ preview, children }) {\n return (_jsxs(Html, { lang: \"en\", children: [_jsx(Head, { children: _jsx(Font, { fontFamily: \"Inter\", fallbackFontFamily: \"Arial\", fontWeight: 400, fontStyle: \"normal\" }) }), _jsx(Tailwind, { config: {\n theme: {\n extend: {\n colors: {\n \"sb-bg\": brand.background,\n \"sb-surface\": brand.surface,\n \"sb-elevated\": brand.surfaceElevated,\n \"sb-border\": brand.border,\n \"sb-green\": brand.primary,\n \"sb-green-dark\": brand.primaryDark,\n \"sb-text\": brand.textPrimary,\n \"sb-muted\": brand.textSecondary,\n \"sb-faint\": brand.textMuted,\n \"sb-danger\": brand.danger,\n \"sb-warning\": brand.warning,\n \"sb-success\": brand.success,\n \"sb-info\": brand.info,\n },\n },\n },\n }, children: _jsxs(Body, { style: { backgroundColor: brand.background, margin: 0, padding: 0 }, children: [_jsx(Preview, { children: preview }), _jsx(Section, { style: { backgroundColor: brand.background, padding: \"32px 16px\" }, children: _jsxs(Container, { style: { maxWidth: \"600px\", margin: \"0 auto\" }, children: [_jsx(Section, { style: { marginBottom: 0 }, children: _jsx(Img, { src: EMAIL_HEADER_URL, width: \"600\", height: \"200\", alt: \"Vreko\", style: { width: \"100%\", display: \"block\", borderRadius: \"8px 8px 0 0\" } }) }), _jsx(Section, { style: {\n backgroundColor: brand.surface,\n borderRadius: \"0 0 8px 8px\",\n border: `1px solid ${brand.border}`,\n borderTop: \"none\",\n padding: \"32px\",\n }, children: children }), _jsxs(Section, { style: { marginTop: \"24px\", padding: \"0 16px\", textAlign: \"center\" }, children: [_jsx(Img, { src: EMAIL_FOOTER_ICON_URL, width: \"24\", height: \"24\", alt: \"\", style: { display: \"block\", margin: \"0 auto 12px\" } }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", lineHeight: \"1.5\", margin: 0 }, children: \"Vreko - AI-Aware Code Protection\" }), _jsx(Hr, { style: { borderColor: brand.border, margin: \"12px 0\" } }), _jsxs(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: [_jsx(Link, { href: \"https://vreko.dev/unsubscribe\", style: { color: brand.textMuted, textDecoration: \"underline\" }, children: \"Unsubscribe\" }), \" · \", _jsx(Link, { href: \"https://vreko.dev/privacy\", style: { color: brand.textMuted, textDecoration: \"underline\" }, children: \"Privacy Policy\" })] })] })] }) })] }) })] }));\n}\n","// ESM imports fixed for Node.js v22+\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Button } from \"@react-email/components\";\nimport { brand } from \"./Wrapper.js\";\nexport function PrimaryButton({ href, children }) {\n return (_jsx(Button, { href: href, style: {\n backgroundColor: brand.primary,\n color: brand.background,\n fontWeight: 600,\n borderRadius: \"8px\",\n padding: \"12px 24px\",\n fontSize: \"14px\",\n textDecoration: \"none\",\n display: \"inline-block\",\n }, children: children }));\n}\nexport function DangerButton({ href, children }) {\n return (_jsx(Button, { href: href, style: {\n backgroundColor: brand.danger,\n color: \"#FFFFFF\",\n fontWeight: 600,\n borderRadius: \"8px\",\n padding: \"12px 24px\",\n fontSize: \"14px\",\n textDecoration: \"none\",\n display: \"inline-block\",\n }, children: children }));\n}\nexport function GhostButton({ href, children }) {\n return (_jsx(Button, { href: href, style: {\n backgroundColor: \"transparent\",\n color: brand.textPrimary,\n fontWeight: 600,\n borderRadius: \"8px\",\n padding: \"12px 24px\",\n fontSize: \"14px\",\n textDecoration: \"none\",\n display: \"inline-block\",\n border: `1px solid ${brand.border}`,\n }, children: children }));\n}\n// Keep default export for backwards compatibility\nexport default PrimaryButton;\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Heading, Hr, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const MagicLinkPropsSchema = z.object({\n loginUrl: z.string().url(),\n expiresInMinutes: z.number().default(15),\n ipAddress: z.string().optional(),\n userAgent: z.string().optional(),\n});\nfunction MagicLink({ loginUrl, expiresInMinutes, ipAddress, userAgent }) {\n return (_jsxs(Wrapper, { preview: `Click to sign in - link expires in ${expiresInMinutes} minutes`, children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 12px\" }, children: \"\\uD83E\\uDD8E Your sign-in link\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: [\"Click the button below to sign in to Vreko. This link expires in \", expiresInMinutes, \" minutes and can only be used once.\"] }), _jsx(PrimaryButton, { href: loginUrl, children: \"Sign In to Vreko\" }), (ipAddress ?? userAgent) && (_jsxs(_Fragment, { children: [_jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"6px\",\n padding: \"16px\",\n border: `1px solid ${brand.border}`,\n }, children: [_jsx(Text, { style: { color: brand.textSecondary, fontSize: \"12px\", margin: \"0 0 4px\", fontWeight: 600 }, children: \"Request details\" }), ipAddress && (_jsxs(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: \"0 0 2px\" }, children: [\"IP address: \", ipAddress] })), userAgent && (_jsxs(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: [\"Device: \", userAgent] }))] })] })), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: \"If you didn't request this link, you can safely ignore this email. Someone may have entered your email address by mistake.\" })] }));\n}\nMagicLink.PreviewProps = {\n loginUrl: \"https://vreko.dev/auth/magic/preview-token\",\n expiresInMinutes: 15,\n ipAddress: \"203.0.113.42\",\n userAgent: \"Chrome on macOS\",\n};\nexport const authMagicLinkTemplate = {\n id: \"auth.magic-link\",\n category: \"authentication\",\n subject: () => \"Your Vreko sign-in link\",\n component: MagicLink,\n previewProps: MagicLink.PreviewProps,\n schema: MagicLinkPropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Heading, Hr, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { DangerButton, PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const NewDeviceLoginPropsSchema = z.object({\n deviceName: z.string(),\n location: z.string().optional(),\n ipAddress: z.string(),\n timestamp: z.string(),\n approveUrl: z.string().url(),\n denyUrl: z.string().url(),\n});\nfunction NewDeviceLogin({ deviceName, location, ipAddress, timestamp, approveUrl, denyUrl }) {\n return (_jsxs(Wrapper, { preview: \"New device detected - verify this was you\", children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 12px\" }, children: \"\\uD83E\\uDD8E New sign-in detected\" }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: \"We detected a new sign-in to your Vreko account. Please verify this was you.\" }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n border: `1px solid ${brand.border}`,\n marginBottom: \"24px\",\n }, children: [_jsx(Text, { style: {\n color: brand.textSecondary,\n fontSize: \"12px\",\n fontWeight: 600,\n margin: \"0 0 12px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n }, children: \"Sign-in details\" }), _jsx(\"table\", { style: { width: \"100%\", borderCollapse: \"collapse\" }, children: _jsxs(\"tbody\", { children: [_jsxs(\"tr\", { children: [_jsx(\"td\", { style: { color: brand.textMuted, fontSize: \"13px\", padding: \"4px 0\", width: \"40%\" }, children: \"Device\" }), _jsx(\"td\", { style: { color: brand.textPrimary, fontSize: \"13px\", padding: \"4px 0\" }, children: deviceName })] }), _jsxs(\"tr\", { children: [_jsx(\"td\", { style: { color: brand.textMuted, fontSize: \"13px\", padding: \"4px 0\" }, children: \"IP address\" }), _jsx(\"td\", { style: { color: brand.textPrimary, fontSize: \"13px\", padding: \"4px 0\" }, children: ipAddress })] }), location && (_jsxs(\"tr\", { children: [_jsx(\"td\", { style: { color: brand.textMuted, fontSize: \"13px\", padding: \"4px 0\" }, children: \"Location\" }), _jsx(\"td\", { style: { color: brand.textPrimary, fontSize: \"13px\", padding: \"4px 0\" }, children: location })] })), _jsxs(\"tr\", { children: [_jsx(\"td\", { style: { color: brand.textMuted, fontSize: \"13px\", padding: \"4px 0\" }, children: \"Time\" }), _jsx(\"td\", { style: { color: brand.textPrimary, fontSize: \"13px\", padding: \"4px 0\" }, children: timestamp })] })] }) })] }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", margin: \"0 0 16px\" }, children: \"Was this you?\" }), _jsx(\"table\", { style: { borderCollapse: \"collapse\" }, children: _jsx(\"tbody\", { children: _jsxs(\"tr\", { children: [_jsx(\"td\", { style: { paddingRight: \"12px\" }, children: _jsx(PrimaryButton, { href: approveUrl, children: \"Yes, this was me\" }) }), _jsx(\"td\", { children: _jsx(DangerButton, { href: denyUrl, children: \"No, secure my account\" }) })] }) }) }), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: \"If this was you, no action is needed. If you don't recognize this activity, secure your account immediately by clicking \\\"No, secure my account\\\".\" })] }));\n}\nNewDeviceLogin.PreviewProps = {\n deviceName: \"Chrome on macOS\",\n location: \"San Francisco, CA\",\n ipAddress: \"203.0.113.42\",\n timestamp: \"March 29, 2026 at 2:34 PM UTC\",\n approveUrl: \"https://vreko.dev/auth/device/approve/preview\",\n denyUrl: \"https://vreko.dev/auth/device/deny/preview\",\n};\nexport const authNewDeviceLoginTemplate = {\n id: \"auth.new-device-login\",\n category: \"authentication\",\n subject: () => \"🦎 New sign-in to your Vreko account\",\n component: NewDeviceLogin,\n previewProps: NewDeviceLogin.PreviewProps,\n schema: NewDeviceLoginPropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Heading, Hr, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { DangerButton, PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const ResetPasswordPropsSchema = z.object({\n resetUrl: z.string().url(),\n expiresInMinutes: z.number().default(60),\n requestedFrom: z\n .object({\n ipAddress: z.string(),\n location: z.string().optional(),\n })\n .optional(),\n});\nfunction ResetPassword({ resetUrl, expiresInMinutes, requestedFrom }) {\n return (_jsxs(Wrapper, { preview: \"A password reset was requested for your account\", children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 12px\" }, children: \"Reset your password\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: [\"We received a request to reset the password for your Vreko account. Click the button below to choose a new password. This link expires in \", expiresInMinutes, \" minutes.\"] }), _jsx(PrimaryButton, { href: resetUrl, children: \"Reset Password\" }), requestedFrom && (_jsxs(_Fragment, { children: [_jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"6px\",\n padding: \"16px\",\n border: `1px solid ${brand.border}`,\n }, children: [_jsx(Text, { style: { color: brand.textSecondary, fontSize: \"12px\", margin: \"0 0 4px\", fontWeight: 600 }, children: \"Request originated from\" }), _jsxs(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: \"0 0 2px\" }, children: [\"IP address: \", requestedFrom.ipAddress] }), requestedFrom.location && (_jsxs(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: [\"Location: \", requestedFrom.location] }))] })] })), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 16px\" }, children: \"If you didn't request a password reset, your account may be at risk. Secure it now:\" }), _jsx(DangerButton, { href: \"https://vreko.dev/support/security\", children: \"I didn't request this\" }), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: \"If you ignore this email, your password will not be changed.\" })] }));\n}\nResetPassword.PreviewProps = {\n resetUrl: \"https://vreko.dev/auth/reset/preview-token\",\n expiresInMinutes: 60,\n requestedFrom: {\n ipAddress: \"203.0.113.42\",\n location: \"San Francisco, CA\",\n },\n};\nexport const authResetPasswordTemplate = {\n id: \"auth.reset-password\",\n category: \"authentication\",\n subject: () => \"Reset your Vreko password\",\n component: ResetPassword,\n previewProps: ResetPassword.PreviewProps,\n schema: ResetPasswordPropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Heading, Hr, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const VerifyEmailPropsSchema = z.object({\n verificationUrl: z.string().url(),\n expiresInMinutes: z.number().default(15),\n});\nfunction VerifyEmail({ verificationUrl, expiresInMinutes }) {\n return (_jsxs(Wrapper, { preview: \"Verify your Vreko email address\", children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 12px\" }, children: \"Verify your email\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: [\"Click the button below to verify your email address. This link expires in \", expiresInMinutes, \" minutes.\"] }), _jsx(PrimaryButton, { href: verificationUrl, children: \"Verify Email Address\" }), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: \"If you didn't create a Vreko account, you can safely ignore this email.\" })] }));\n}\nVerifyEmail.PreviewProps = {\n verificationUrl: \"https://vreko.dev/verify/preview-token\",\n expiresInMinutes: 15,\n};\nexport const authVerifyEmailTemplate = {\n id: \"auth.verify-email\",\n category: \"authentication\",\n subject: () => \"Verify your Vreko email address\",\n component: VerifyEmail,\n previewProps: VerifyEmail.PreviewProps,\n schema: VerifyEmailPropsSchema,\n};\n","/**\n * Email Design Tokens\n * Based on Vreko brand colors from /brand/colors.json\n * Designed for optimal dark mode email client rendering\n */\n\nexport const emailTheme = {\n\tcolors: {\n\t\t// Backgrounds - Dark mode optimized\n\t\tbackground: \"#0A0A0A\", // From brand neutral.background\n\t\tbackgroundSecondary: \"#141414\", // Secondary background\n\t\tsurface: \"#111111\", // From brand neutral.surface\n\t\tsurfaceSubtle: \"#18181B\", // Subtle surface variation\n\t\tsurfaceElevated: \"#1A1A1A\", // From brand neutral.surfaceElevated\n\n\t\t// Brand - Vreko Green (#4ADE80)\n\t\tprimary: \"#4ADE80\", // From brand primary.green.hex\n\t\tprimaryHover: \"#22C55E\", // From brand primary.greenDark.hex\n\t\tprimaryLight: \"#6EE7A7\", // From brand primary.greenLight.hex\n\t\tprimaryGlow: \"rgba(74, 222, 128, 0.4)\", // From brand primary.greenGlow\n\n\t\t// Text - High contrast for email clients\n\t\ttext: \"#FAFAFA\", // From brand text.primary\n\t\ttextSecondary: \"#A1A1AA\", // From brand text.secondary\n\t\ttextTertiary: \"#71717A\", // Tertiary text\n\t\ttextMuted: \"#71717A\", // From brand text.tertiary\n\t\ttextDisabled: \"#52525B\", // From brand text.muted\n\n\t\t// UI Elements\n\t\tborder: \"#27272A\", // From brand neutral.border\n\t\tdivider: \"#27272A\",\n\n\t\t// Semantic Colors\n\t\tsuccess: \"#34D399\", // From brand semantic.success\n\t\terror: \"#EF4444\", // From brand semantic.error\n\t\twarning: \"#FF6B35\", // From brand semantic.warning\n\t\tinfo: \"#3B82F6\", // From brand semantic.info\n\t},\n\n\tfonts: {\n\t\tbody: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n\t\tsans: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n\t\tmono: '\"JetBrains Mono\", \"Fira Code\", Consolas, Monaco, monospace',\n\t},\n\n\tfontSizes: {\n\t\txs: \"12px\",\n\t\tsm: \"14px\",\n\t\tbase: \"16px\",\n\t\tlg: \"18px\",\n\t\txl: \"20px\",\n\t\t\"2xl\": \"24px\",\n\t\t\"3xl\": \"30px\",\n\t},\n\n\tspacing: {\n\t\txs: \"4px\",\n\t\tsm: \"8px\",\n\t\tmd: \"16px\",\n\t\tlg: \"24px\",\n\t\txl: \"32px\",\n\t\t\"2xl\": \"48px\",\n\t},\n\n\tborderRadius: \"4px\",\n\tborderWidth: \"1px\",\n\n\t// Email-specific constraints\n\tmaxWidth: \"600px\",\n\n\t// ASCII borders for plain text fallback\n\tascii: {\n\t\thorizontalLine: \"─\",\n\t\tverticalLine: \"│\",\n\t\ttopLeft: \"┌\",\n\t\ttopRight: \"┐\",\n\t\tbottomLeft: \"└\",\n\t\tbottomRight: \"┘\",\n\t\tintersection: \"┼\",\n\t\tcheckmark: \"✓\",\n\t},\n} as const;\n\nexport type EmailTheme = typeof emailTheme;\n","import { Link, Section, Text } from \"@react-email/components\";\nimport { emailTheme } from \"../../theme\";\n\n/**\n * RepoFooter - CLI-style footer with links\n */\nexport function RepoFooter() {\n\tconst currentYear = new Date().getFullYear();\n\n\treturn (\n\t\t<Section\n\t\t\tstyle={{\n\t\t\t\tborderTop: `${emailTheme.borderWidth} solid ${emailTheme.colors.border}`,\n\t\t\t\tpaddingTop: emailTheme.spacing.lg,\n\t\t\t\tmarginTop: emailTheme.spacing.xl,\n\t\t\t}}\n\t\t>\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tmarginBottom: emailTheme.spacing.sm,\n\t\t\t\t\tfontSize: emailTheme.fontSizes.sm,\n\t\t\t\t\tcolor: emailTheme.colors.textMuted,\n\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t┌─ Vreko © {currentYear}\n\t\t\t</Text>\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tmarginBottom: emailTheme.spacing.sm,\n\t\t\t\t\tfontSize: emailTheme.fontSizes.sm,\n\t\t\t\t\tcolor: emailTheme.colors.textMuted,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Link\n\t\t\t\t\thref=\"https://vreko.dev\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\ttextDecoration: \"none\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tvreko.dev\n\t\t\t\t</Link>\n\t\t\t\t{\" • \"}\n\t\t\t\t<Link\n\t\t\t\t\thref=\"https://vreko.dev/docs\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\ttextDecoration: \"none\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tDocs\n\t\t\t\t</Link>\n\t\t\t\t{\" • \"}\n\t\t\t\t<Link\n\t\t\t\t\thref=\"https://github.com/vreko\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\ttextDecoration: \"none\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tGitHub\n\t\t\t\t</Link>\n\t\t\t</Text>\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tfontSize: emailTheme.fontSizes.xs,\n\t\t\t\t\tcolor: emailTheme.colors.textDisabled,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\tYou're receiving this email because you have a Vreko account.{\" \"}\n\t\t\t\t<Link\n\t\t\t\t\thref=\"{{unsubscribeUrl}}\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tcolor: emailTheme.colors.textMuted,\n\t\t\t\t\t\ttextDecoration: \"underline\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tUnsubscribe\n\t\t\t\t</Link>\n\t\t\t</Text>\n\t\t</Section>\n\t);\n}\n","import { Heading, Section, Text } from \"@react-email/components\";\nimport { emailTheme } from \"../../theme\";\n\nexport interface TerminalHeaderProps {\n\tstatus?: \"online\" | \"processing\" | \"offline\" | \"critical\" | \"degraded\";\n}\n\n/**\n * TerminalHeader - Logo with terminal-style status indicator\n */\nexport function TerminalHeader({ status = \"online\" }: TerminalHeaderProps) {\n\tconst statusColors = {\n\t\tonline: emailTheme.colors.success,\n\t\tprocessing: emailTheme.colors.warning,\n\t\toffline: emailTheme.colors.textMuted,\n\t\tcritical: emailTheme.colors.error,\n\t\tdegraded: emailTheme.colors.warning,\n\t};\n\n\tconst statusText = {\n\t\tonline: \"● CONNECTED\",\n\t\tprocessing: \"○ PROCESSING\",\n\t\toffline: \"○ OFFLINE\",\n\t\tcritical: \"● CRITICAL\",\n\t\tdegraded: \"○ DEGRADED\",\n\t};\n\n\treturn (\n\t\t<Section\n\t\t\tstyle={{\n\t\t\t\tborderBottom: `${emailTheme.borderWidth} solid ${emailTheme.colors.border}`,\n\t\t\t\tpaddingBottom: emailTheme.spacing.lg,\n\t\t\t\tmarginBottom: emailTheme.spacing.xl,\n\t\t\t}}\n\t\t>\n\t\t\t<table width=\"100%\" style={{ width: \"100%\" }}>\n\t\t\t\t<tr>\n\t\t\t\t\t<td style={{ verticalAlign: \"middle\" }}>\n\t\t\t\t\t\t<Heading\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\tfontSize: emailTheme.fontSizes[\"2xl\"],\n\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span style={{ color: emailTheme.colors.primary }}>$</span> Vreko\n\t\t\t\t\t\t</Heading>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttextAlign: \"right\",\n\t\t\t\t\t\t\tverticalAlign: \"middle\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\tfontSize: emailTheme.fontSizes.xs,\n\t\t\t\t\t\t\t\tcolor: statusColors[status],\n\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.5px\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{statusText[status]}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</Section>\n\t);\n}\n","import { Body, Container, Font, Head, Html, Img, Preview, Section } from \"@react-email/components\";\nimport type React from \"react\";\n\nexport interface VrekoEmailShellProps {\n\ttitle?: string;\n\tpreviewText: string;\n\tchildren: React.ReactNode;\n\tlogoUrl?: string;\n}\n\nconst COLORS = {\n\tbg: \"#0D1117\",\n\ttext: \"#FFFFFF\",\n\tmuted: \"#9CA3AF\",\n\tgreen: \"#4ADE80\",\n\tborder: \"#27272A\",\n\tfooter: \"#6B7280\",\n} as const;\n\nconst FONT_BODY = \"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif\";\nconst FONT_MONO = \"'Geist Mono', 'SF Mono', ui-monospace, 'Courier New', Courier, monospace\";\n\nconst bodyStyle: React.CSSProperties = {\n\tmargin: 0,\n\tpadding: 0,\n\tbackgroundColor: COLORS.bg,\n\tcolor: COLORS.text,\n\tfontFamily: FONT_BODY,\n\tWebkitFontSmoothing: \"antialiased\",\n\tMozOsxFontSmoothing: \"grayscale\",\n};\n\nconst containerStyle: React.CSSProperties = {\n\twidth: \"100%\",\n\tmaxWidth: \"560px\",\n\tmargin: \"0 auto\",\n\tbackgroundColor: COLORS.bg,\n};\n\nconst sectionStyle: React.CSSProperties = {\n\tpadding: \"0 40px\",\n};\n\nconst headerStyle: React.CSSProperties = {\n\tpadding: \"48px 40px 0 40px\",\n};\n\nconst footerStyle: React.CSSProperties = {\n\tpadding: \"24px 40px 48px 40px\",\n\tfontFamily: FONT_BODY,\n\tfontSize: \"11px\",\n\tlineHeight: \"1.6\",\n\tcolor: COLORS.footer,\n};\n\nconst hrStyle: React.CSSProperties = {\n\tborderTop: `1px solid ${COLORS.border}`,\n\tborderRight: \"none\",\n\tborderBottom: \"none\",\n\tborderLeft: \"none\",\n\tmargin: \"24px 0\",\n\twidth: \"100%\",\n};\n\nconst footerLinkStyle: React.CSSProperties = {\n\tcolor: COLORS.green,\n\ttextDecoration: \"none\",\n};\n\nexport function VrekoEmailShell({\n\ttitle = \"Vreko\",\n\tpreviewText,\n\tchildren,\n\tlogoUrl = \"https://vreko.dev/images/gecko-green.png\",\n}: VrekoEmailShellProps) {\n\treturn (\n\t\t<Html lang=\"en\" dir=\"ltr\">\n\t\t\t<Head>\n\t\t\t\t<meta charSet=\"utf-8\" />\n\t\t\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\t\t\t\t<meta httpEquiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n\t\t\t\t<meta name=\"x-apple-disable-message-reformatting\" />\n\t\t\t\t<meta name=\"format-detection\" content=\"telephone=no, date=no, address=no, email=no\" />\n\t\t\t\t<meta name=\"color-scheme\" content=\"dark\" />\n\t\t\t\t<meta name=\"supported-color-schemes\" content=\"dark\" />\n\t\t\t\t<title>{title}</title>\n\t\t\t\t<Font\n\t\t\t\t\tfontFamily=\"Inter\"\n\t\t\t\t\tfallbackFontFamily={[\"Helvetica\", \"Arial\", \"sans-serif\"]}\n\t\t\t\t\twebFont={{\n\t\t\t\t\t\turl: \"https://fonts.gstatic.com/s/inter/v13/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMa1ZL7.woff2\",\n\t\t\t\t\t\tformat: \"woff2\",\n\t\t\t\t\t}}\n\t\t\t\t\tfontWeight={400}\n\t\t\t\t\tfontStyle=\"normal\"\n\t\t\t\t/>\n\t\t\t\t<Font\n\t\t\t\t\tfontFamily=\"Inter\"\n\t\t\t\t\tfallbackFontFamily={[\"Helvetica\", \"Arial\", \"sans-serif\"]}\n\t\t\t\t\twebFont={{\n\t\t\t\t\t\turl: \"https://fonts.gstatic.com/s/inter/v13/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMa05L7.woff2\",\n\t\t\t\t\t\tformat: \"woff2\",\n\t\t\t\t\t}}\n\t\t\t\t\tfontWeight={600}\n\t\t\t\t\tfontStyle=\"normal\"\n\t\t\t\t/>\n\t\t\t\t<style>{`\n :root { color-scheme: dark; supported-color-schemes: dark; }\n [data-ogsc] body, [data-ogsb] body { background-color: ${COLORS.bg} !important; }\n [data-ogsc] .vreko-bg, [data-ogsb] .vreko-bg { background-color: ${COLORS.bg} !important; }\n [data-ogsc] .vreko-fg, [data-ogsb] .vreko-fg { color: ${COLORS.text} !important; }\n [data-ogsc] .vreko-muted, [data-ogsb] .vreko-muted { color: ${COLORS.muted} !important; }\n [data-ogsc] .vreko-green, [data-ogsb] .vreko-green { color: ${COLORS.green} !important; }\n `}</style>\n\t\t\t</Head>\n\t\t\t<Preview>{previewText}</Preview>\n\t\t\t<Body style={bodyStyle} className=\"vreko-bg\">\n\t\t\t\t<table\n\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\tcellPadding={0}\n\t\t\t\t\tcellSpacing={0}\n\t\t\t\t\tborder={0}\n\t\t\t\t\tstyle={{ backgroundColor: COLORS.bg, width: \"100%\" }}\n\t\t\t\t\tclassName=\"vreko-bg\"\n\t\t\t\t>\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td align=\"center\" style={{ backgroundColor: COLORS.bg }}>\n\t\t\t\t\t\t\t\t<Container style={containerStyle} className=\"vreko-bg\">\n\t\t\t\t\t\t\t\t\t<Section style={headerStyle}>\n\t\t\t\t\t\t\t\t\t\t<Img\n\t\t\t\t\t\t\t\t\t\t\tsrc={logoUrl}\n\t\t\t\t\t\t\t\t\t\t\talt=\"Vreko\"\n\t\t\t\t\t\t\t\t\t\t\twidth=\"32\"\n\t\t\t\t\t\t\t\t\t\t\theight=\"32\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"block\",\n\t\t\t\t\t\t\t\t\t\t\t\twidth: \"32px\",\n\t\t\t\t\t\t\t\t\t\t\t\theight: \"32px\",\n\t\t\t\t\t\t\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\t\t\t\t\t\t\toutline: \"none\",\n\t\t\t\t\t\t\t\t\t\t\t\ttextDecoration: \"none\",\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Section>\n\t\t\t\t\t\t\t\t\t<Section style={sectionStyle}>\n\t\t\t\t\t\t\t\t\t\t<hr style={hrStyle} />\n\t\t\t\t\t\t\t\t\t</Section>\n\t\t\t\t\t\t\t\t\t<Section style={sectionStyle}>{children}</Section>\n\t\t\t\t\t\t\t\t\t<Section style={sectionStyle}>\n\t\t\t\t\t\t\t\t\t\t<hr style={hrStyle} />\n\t\t\t\t\t\t\t\t\t</Section>\n\t\t\t\t\t\t\t\t\t<Section style={footerStyle}>\n\t\t\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"11px\",\n\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: \"1.6\",\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: COLORS.footer,\n\t\t\t\t\t\t\t\t\t\t\t\tfontFamily: FONT_BODY,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"vreko-muted\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\tVreko by Marcelle Labs · Built on the{\" \"}\n\t\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\t\thref=\"https://workspacejson.dev\"\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={footerLinkStyle}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"vreko-green\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\tworkspace.json\n\t\t\t\t\t\t\t\t\t\t\t</a>{\" \"}\n\t\t\t\t\t\t\t\t\t\t\topen standard\n\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t</Section>\n\t\t\t\t\t\t\t\t</Container>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t</Body>\n\t\t</Html>\n\t);\n}\n\nexport const VREKO_COLORS = COLORS;\nexport const VREKO_FONT_BODY = FONT_BODY;\nexport const VREKO_FONT_MONO = FONT_MONO;\n\nexport default VrekoEmailShell;\n","import type React from \"react\";\nimport { VrekoEmailShell } from \"../VrekoEmailShell\";\n\nexport interface VrekoLayoutProps {\n\ttitle: string;\n\tpreheader?: string;\n\tchildren: React.ReactNode;\n}\n\nexport function VrekoLayout({ title, preheader, children }: VrekoLayoutProps) {\n\treturn (\n\t\t<VrekoEmailShell title={title} previewText={preheader ?? title}>\n\t\t\t{children}\n\t\t</VrekoEmailShell>\n\t);\n}\n\nexport default VrekoLayout;\n","import { Section, Text } from \"@react-email/components\";\nimport type React from \"react\";\nimport { emailTheme } from \"../../theme\";\n\nexport interface AlertBoxProps {\n\ttype: \"info\" | \"success\" | \"warning\" | \"error\";\n\tchildren: React.ReactNode;\n}\n\n/**\n * AlertBox - Colored message boxes for important information\n */\nexport function AlertBox({ type, children }: AlertBoxProps) {\n\tconst colorMap = {\n\t\tinfo: emailTheme.colors.info,\n\t\tsuccess: emailTheme.colors.success,\n\t\twarning: emailTheme.colors.warning,\n\t\terror: emailTheme.colors.error,\n\t};\n\n\tconst iconMap = {\n\t\tinfo: \"ℹ\",\n\t\tsuccess: \"✓\",\n\t\twarning: \"⚠\",\n\t\terror: \"✕\",\n\t};\n\n\tconst backgroundColor = colorMap[type];\n\tconst icon = iconMap[type];\n\n\treturn (\n\t\t<Section\n\t\t\tstyle={{\n\t\t\t\tbackgroundColor: `${backgroundColor}15`, // 15% opacity\n\t\t\t\tborder: `${emailTheme.borderWidth} solid ${backgroundColor}`,\n\t\t\t\tborderRadius: emailTheme.borderRadius,\n\t\t\t\tpadding: emailTheme.spacing.md,\n\t\t\t\tmargin: `${emailTheme.spacing.lg} 0`,\n\t\t\t}}\n\t\t>\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\tfontSize: emailTheme.fontSizes.base,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tcolor: backgroundColor,\n\t\t\t\t\t\tmarginRight: emailTheme.spacing.sm,\n\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{icon}\n\t\t\t\t</span>\n\t\t\t\t{children}\n\t\t\t</Text>\n\t\t</Section>\n\t);\n}\n","import { Text } from \"@react-email/components\";\nimport { VREKO_COLORS, VREKO_FONT_MONO } from \"../VrekoEmailShell\";\n\nexport interface BadgeProps {\n\tlabel: string;\n}\n\nexport function Badge({ label }: BadgeProps) {\n\treturn (\n\t\t<Text\n\t\t\tstyle={{\n\t\t\t\tmargin: \"0 0 20px 0\",\n\t\t\t\tfontFamily: VREKO_FONT_MONO,\n\t\t\t\tfontSize: \"11px\",\n\t\t\t\tlineHeight: 1,\n\t\t\t\tcolor: VREKO_COLORS.green,\n\t\t\t\tletterSpacing: \"0.12em\",\n\t\t\t\ttextTransform: \"uppercase\",\n\t\t\t\tfontWeight: 600,\n\t\t\t}}\n\t\t>\n\t\t\t{label}\n\t\t</Text>\n\t);\n}\n\nexport default Badge;\n","import { Text } from \"@react-email/components\";\nimport type React from \"react\";\nimport { VREKO_COLORS, VREKO_FONT_BODY } from \"../VrekoEmailShell\";\n\nexport interface BodyTextProps {\n\tchildren: React.ReactNode;\n\tmt?: number;\n\tmb?: number;\n}\n\nexport function BodyText({ children, mt = 0, mb = 16 }: BodyTextProps) {\n\treturn (\n\t\t<Text\n\t\t\tstyle={{\n\t\t\t\tmargin: `${mt}px 0 ${mb}px 0`,\n\t\t\t\tfontFamily: VREKO_FONT_BODY,\n\t\t\t\tfontSize: \"14px\",\n\t\t\t\tlineHeight: 1.6,\n\t\t\t\tcolor: VREKO_COLORS.muted,\n\t\t\t\tfontWeight: 400,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</Text>\n\t);\n}\n\nexport default BodyText;\n","import { Link, Section, Text } from \"@react-email/components\";\nimport { emailTheme } from \"../../theme\";\n\nexport interface CodeBlockProps {\n\tcode: string;\n\tcopyable?: boolean;\n\twebViewUrl?: string;\n\tlanguage?: string;\n}\n\n/**\n * CodeBlock - Monospace code display with optional copyable functionality\n * Includes webViewUrl prop for web preview link (P2 enhancement)\n */\nexport function CodeBlock({ code, copyable = false, webViewUrl, language }: CodeBlockProps) {\n\treturn (\n\t\t<Section\n\t\t\tstyle={{\n\t\t\t\tbackgroundColor: emailTheme.colors.surface,\n\t\t\t\tborder: `${emailTheme.borderWidth} solid ${emailTheme.colors.border}`,\n\t\t\t\tborderRadius: emailTheme.borderRadius,\n\t\t\t\tpadding: emailTheme.spacing.md,\n\t\t\t\tmargin: `${emailTheme.spacing.lg} 0`,\n\t\t\t}}\n\t\t>\n\t\t\t{copyable && webViewUrl && (\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmarginBottom: emailTheme.spacing.sm,\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tjustifyContent: \"space-between\",\n\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\tfontSize: emailTheme.fontSizes.xs,\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textMuted,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{language || \"code\"}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Link\n\t\t\t\t\t\thref={webViewUrl}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontSize: emailTheme.fontSizes.xs,\n\t\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\t\ttextDecoration: \"none\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tView & Copy →\n\t\t\t\t\t</Link>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\tfontSize: emailTheme.fontSizes.sm,\n\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\twhiteSpace: \"pre-wrap\",\n\t\t\t\t\twordBreak: \"break-all\",\n\t\t\t\t\tmargin: 0,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{code}\n\t\t\t</Text>\n\t\t</Section>\n\t);\n}\n","import { Heading } from \"@react-email/components\";\nimport type React from \"react\";\nimport { VREKO_COLORS, VREKO_FONT_BODY } from \"../VrekoEmailShell\";\n\nexport interface HeadlineProps {\n\tchildren: React.ReactNode;\n}\n\nexport function Headline({ children }: HeadlineProps) {\n\treturn (\n\t\t<Heading\n\t\t\tas=\"h1\"\n\t\t\tstyle={{\n\t\t\t\tmargin: \"0 0 20px 0\",\n\t\t\t\tfontFamily: VREKO_FONT_BODY,\n\t\t\t\tfontSize: \"20px\",\n\t\t\t\tlineHeight: \"1.35\",\n\t\t\t\tfontWeight: 600,\n\t\t\t\tcolor: VREKO_COLORS.text,\n\t\t\t\ttextAlign: \"left\",\n\t\t\t\tletterSpacing: \"-0.01em\",\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</Heading>\n\t);\n}\n\nexport default Headline;\n","import { Button } from \"@react-email/components\";\nimport type React from \"react\";\nimport { emailTheme } from \"../../theme\";\n\nexport interface PrimaryButtonProps {\n\thref: string;\n\tchildren: React.ReactNode;\n}\n\n/**\n * PrimaryButton - CTA button with Vreko Green (#4ADE80)\n */\nexport function PrimaryButton({ href, children }: PrimaryButtonProps) {\n\treturn (\n\t\t<Button\n\t\t\thref={href}\n\t\t\tstyle={{\n\t\t\t\tbackgroundColor: emailTheme.colors.primary,\n\t\t\t\tcolor: emailTheme.colors.background,\n\t\t\t\tpadding: `${emailTheme.spacing.md} ${emailTheme.spacing.xl}`,\n\t\t\t\tborderRadius: emailTheme.borderRadius,\n\t\t\t\ttextDecoration: \"none\",\n\t\t\t\tfontWeight: 600,\n\t\t\t\tfontSize: emailTheme.fontSizes.base,\n\t\t\t\tdisplay: \"inline-block\",\n\t\t\t\tmargin: `${emailTheme.spacing.lg} 0`,\n\t\t\t\tborder: \"none\",\n\t\t\t\tcursor: \"pointer\",\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</Button>\n\t);\n}\n","import { Section, Text } from \"@react-email/components\";\nimport { emailTheme } from \"../../theme\";\n\nexport interface StatRowProps {\n\tlabel: string;\n\tvalue: string | number;\n\tunit?: string;\n\ticon?: string;\n}\n\n/**\n * StatRow - Display metrics in a terminal-style format\n */\nexport function StatRow({ label, value, unit, icon }: StatRowProps) {\n\treturn (\n\t\t<Section\n\t\t\tstyle={{\n\t\t\t\tborderBottom: `${emailTheme.borderWidth} solid ${emailTheme.colors.divider}`,\n\t\t\t\tpadding: `${emailTheme.spacing.sm} 0`,\n\t\t\t}}\n\t\t>\n\t\t\t<table width=\"100%\" style={{ width: \"100%\" }}>\n\t\t\t\t<tr>\n\t\t\t\t\t<td style={{ width: \"50%\", verticalAlign: \"middle\" }}>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\tfontSize: emailTheme.fontSizes.sm,\n\t\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{icon && <span style={{ marginRight: \"8px\" }}>{icon}</span>}\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: \"50%\",\n\t\t\t\t\t\t\ttextAlign: \"right\",\n\t\t\t\t\t\t\tverticalAlign: \"middle\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\tfontSize: emailTheme.fontSizes.lg,\n\t\t\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t{unit && (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tfontSize: emailTheme.fontSizes.sm,\n\t\t\t\t\t\t\t\t\t\tcolor: emailTheme.colors.textMuted,\n\t\t\t\t\t\t\t\t\t\tmarginLeft: emailTheme.spacing.xs,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{unit}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</Section>\n\t);\n}\n","import { Section, Text } from \"@react-email/components\";\nimport type React from \"react\";\nimport { VREKO_COLORS, VREKO_FONT_MONO } from \"../VrekoEmailShell\";\n\nexport interface TerminalBlockProps {\n\tchildren: React.ReactNode;\n\tcursor?: boolean;\n}\n\nconst TERMINAL_BG = \"#111827\";\n\nconst wrapStyle: React.CSSProperties = {\n\twidth: \"100%\",\n\tmargin: \"0 0 24px 0\",\n\tbackgroundColor: TERMINAL_BG,\n\tborderRadius: \"8px\",\n\tborder: `1px solid ${VREKO_COLORS.border}`,\n};\n\nconst cellStyle: React.CSSProperties = {\n\tpadding: \"16px 20px\",\n\tfontFamily: VREKO_FONT_MONO,\n\tfontSize: \"12px\",\n\tlineHeight: 1.8,\n\tcolor: VREKO_COLORS.green,\n\twhiteSpace: \"pre-wrap\",\n};\n\nexport function TerminalBlock({ children, cursor = false }: TerminalBlockProps) {\n\treturn (\n\t\t<Section style={wrapStyle}>\n\t\t\t<Text style={cellStyle}>\n\t\t\t\t{children}\n\t\t\t\t{cursor ? <span style={{ color: VREKO_COLORS.green }}>_</span> : null}\n\t\t\t</Text>\n\t\t</Section>\n\t);\n}\n\nexport default TerminalBlock;\n","import { z } from \"zod\";\n\n/**\n * Template Context Types with Zod Schemas\n * Type-safe email template contexts\n */\n\n// Verify Email\nexport const VerifyEmailContextSchema = z.object({\n\tverificationUrl: z.string().url(),\n\texpiresInMinutes: z.number().int().positive(),\n});\n\nexport type VerifyEmailContext = z.infer<typeof VerifyEmailContextSchema>;\n\n// Magic Link\nexport const MagicLinkContextSchema = z.object({\n\tloginUrl: z.string().url(),\n\texpiresInMinutes: z.number().int().positive(),\n\tipAddress: z.string(),\n\tuserAgent: z.string(),\n});\n\nexport type MagicLinkContext = z.infer<typeof MagicLinkContextSchema>;\n\n// Reset Password\nexport const ResetPasswordContextSchema = z.object({\n\tresetUrl: z.string().url(),\n\texpiresInMinutes: z.number().int().positive(),\n\trequestedFrom: z.object({\n\t\tipAddress: z.string(),\n\t\tlocation: z.string().optional(),\n\t}),\n});\n\nexport type ResetPasswordContext = z.infer<typeof ResetPasswordContextSchema>;\n\n// New Device Login\nexport const NewDeviceLoginContextSchema = z.object({\n\tdeviceName: z.string(),\n\tlocation: z.string(),\n\tipAddress: z.string(),\n\ttimestamp: z.date(),\n\tapproveUrl: z.string().url(),\n\tdenyUrl: z.string().url(),\n});\n\nexport type NewDeviceLoginContext = z.infer<typeof NewDeviceLoginContextSchema>;\n\n// Welcome Email\nexport const WelcomeContextSchema = z.object({\n\tfirstName: z.string(),\n\tplanName: z.string(),\n\tplanFeatures: z.array(z.string()),\n\tdashboardUrl: z.string().url(),\n\tdocsUrl: z.string().url(),\n\tpioneerTier: z.string().optional(),\n\tpioneerPoints: z.number().int().nonnegative().optional(),\n});\n\nexport type WelcomeContext = z.infer<typeof WelcomeContextSchema>;\n\n// Pioneer Milestone\nexport const PioneerMilestoneContextSchema = z.object({\n\tfirstName: z.string(),\n\toldTier: z.string(),\n\tnewTier: z.string(),\n\tpointsEarned: z.number().int().nonnegative(),\n\ttotalPoints: z.number().int().nonnegative(),\n\tnextTierName: z.string().optional(),\n\tpointsToNextTier: z.number().int().nonnegative().optional(),\n\tunlockedPerks: z.array(\n\t\tz.object({\n\t\t\ticon: z.string(),\n\t\t\tname: z.string(),\n\t\t\tdescription: z.string(),\n\t\t}),\n\t),\n\tdashboardUrl: z.string().url(),\n});\n\nexport type PioneerMilestoneContext = z.infer<typeof PioneerMilestoneContextSchema>;\n\n// Weekly Digest\nexport const WeeklyDigestContextSchema = z.object({\n\tfirstName: z.string(),\n\tweekStartDate: z.string(),\n\tweekEndDate: z.string(),\n\tstats: z.object({\n\t\ttotalSnapshots: z.number().int().nonnegative(),\n\t\ttestsPassed: z.number().int().nonnegative(),\n\t\tregressionsCaught: z.number().int().nonnegative(),\n\t\tactiveProjects: z.number().int().nonnegative(),\n\t\tactiveMembers: z.number().int().nonnegative(),\n\t\tpioneerPointsEarned: z.number().int().nonnegative(),\n\t\tcomparisonToPreviousWeek: z.number().optional(),\n\t}),\n\thighlights: z.array(\n\t\tz.object({\n\t\t\ticon: z.string(),\n\t\t\ttitle: z.string(),\n\t\t\tdescription: z.string(),\n\t\t}),\n\t),\n\tdashboardUrl: z.string().url(),\n});\n\nexport type WeeklyDigestContext = z.infer<typeof WeeklyDigestContextSchema>;\n\n// System Alert\nexport const SystemAlertContextSchema = z.object({\n\ttier: z.enum([\"free\", \"pro\"]),\n\trepositoryName: z.string().min(1),\n\tfilePath: z.string().min(1),\n\tscore: z.number().min(0).max(1),\n\taiSessionCount: z.number().int().nonnegative(),\n\triskLevel: z.enum([\"LOW\", \"MEDIUM\", \"HIGH\", \"CRITICAL\"]),\n\tactionUrl: z.string().url().optional(),\n\tactionLabel: z.string().min(1).optional(),\n});\n\nexport type SystemAlertContext = z.infer<typeof SystemAlertContextSchema>;\n\n// Invoice Receipt\nexport const InvoiceReceiptContextSchema = z.object({\n\tamount: z.number().positive(),\n\tcurrency: z.string(),\n\tdate: z.date(),\n\tinvoiceUrl: z.string().url(),\n\tplanName: z.string(),\n});\n\nexport type InvoiceReceiptContext = z.infer<typeof InvoiceReceiptContextSchema>;\n\n// Nice Save (First Restore Celebration)\nexport const NiceSaveContextSchema = z.object({\n\tfirstName: z.string(),\n\tfilesRecovered: z.number().int().positive(),\n\tlinesOfCode: z.number().int().nonnegative(),\n\ttimeSavedMinutes: z.number().int().nonnegative(),\n\tsessionTime: z.string(),\n\trestoreTime: z.string(),\n\taiToolDetected: z.string().optional(),\n\tdashboardUrl: z.string().url(),\n\ttwitterShareUrl: z.string().url().optional(),\n});\n\nexport type NiceSaveContext = z.infer<typeof NiceSaveContextSchema>;\n\n// Install Nudge (Day 1 Extension Reminder)\nexport const InstallNudgeContextSchema = z.object({\n\tfirstName: z.string(),\n\tsignupDate: z.string(),\n\textensionUrl: z.string().url(),\n\tdocsUrl: z.string().url(),\n\tdashboardUrl: z.string().url(),\n});\n\nexport type InstallNudgeContext = z.infer<typeof InstallNudgeContextSchema>;\n\n// Pioneer Intro (Day 7 Engaged Users)\nexport const PioneerIntroContextSchema = z.object({\n\tfirstName: z.string(),\n\tcurrentTier: z.string(),\n\tcurrentPoints: z.number().int().nonnegative(),\n\tnextTierName: z.string().optional(),\n\tpointsToNextTier: z.number().int().nonnegative().optional(),\n\tsessionsCompleted: z.number().int().nonnegative(),\n\trestoresCompleted: z.number().int().nonnegative(),\n\tdaysActive: z.number().int().positive(),\n\tpioneerDashboardUrl: z.string().url(),\n\treferralUrl: z.string().url().optional(),\n});\n\nexport type PioneerIntroContext = z.infer<typeof PioneerIntroContextSchema>;\n\n// We Miss You (14 Days Inactive)\nexport const WeMissYouContextSchema = z.object({\n\tfirstName: z.string(),\n\tlastActiveDate: z.string(),\n\tdaysInactive: z.number().int().positive(),\n\ttotalSessions: z.number().int().nonnegative(),\n\ttotalTimelineRestores: z.number().int().nonnegative(),\n\tpioneerTier: z.string().optional(),\n\tpioneerPoints: z.number().int().nonnegative().optional(),\n\tdashboardUrl: z.string().url(),\n\textensionUrl: z.string().url(),\n\tfeedbackUrl: z.string().url(),\n});\n\nexport type WeMissYouContext = z.infer<typeof WeMissYouContextSchema>;\n\n// Cohort Invite (Pioneer accept flow — send invite code to accepted applicant)\nexport const CohortInviteContextSchema = z.object({\n\temail: z.string().email(),\n\tcode: z.string().min(1),\n\tcohort: z.number().int().positive(),\n});\n\nexport type CohortInviteContext = z.infer<typeof CohortInviteContextSchema>;\n","import { Heading, Link, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { CodeBlock } from \"../../components/primitives/CodeBlock\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { type CohortInviteContext, CohortInviteContextSchema } from \"../../contexts\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function CohortInvite({ email, code, cohort }: CohortInviteContext) {\n\tconst activationUrl = `https://vreko.dev/activate/${code}`;\n\tconst docsUrl = \"https://docs.vreko.dev/quick-start\";\n\n\treturn (\n\t\t<VrekoLayout\n\t\t\ttitle=\"You're in — here's your Vreko Pioneer access code\"\n\t\t\tpreheader={`Your Vreko Pioneer access code for Cohort ${cohort}: ${code}`}\n\t\t>\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\", backgroundColor: emailTheme.colors.background }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"28px\",\n\t\t\t\t\t\tfontWeight: \"700\",\n\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tYou're in.\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"26px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tYou've been accepted into Vreko Pioneer Cohort {cohort}. Use this code to activate your account at{\" \"}\n\t\t\t\t\t<Link href=\"https://vreko.dev\" style={{ color: emailTheme.colors.primary, textDecoration: \"none\" }}>\n\t\t\t\t\t\tvreko.dev\n\t\t\t\t\t</Link>\n\t\t\t\t\t.\n\t\t\t\t</Text>\n\n\t\t\t\t{/* Access code */}\n\t\t\t\t<CodeBlock code={code} />\n\n\t\t\t\t{/* Activation CTA */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\tmargin: \"8px 0 32px 0\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.background,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<PrimaryButton href={activationUrl}>Activate your account →</PrimaryButton>\n\t\t\t\t</Section>\n\n\t\t\t\t{/* What's next */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0\",\n\t\t\t\t\t\tpadding: \"24px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 12px 0\",\n\t\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t$ what's next\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tAfter activating, install the CLI and run{\" \"}\n\t\t\t\t\t\t<code style={{ color: emailTheme.colors.primary, fontFamily: emailTheme.fonts.mono }}>\n\t\t\t\t\t\t\tvr start\n\t\t\t\t\t\t</code>{\" \"}\n\t\t\t\t\t\tin any repo:\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t<Section\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tpadding: \"12px 16px\",\n\t\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surface,\n\t\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\t\tborderRadius: \"4px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tnpm install -g @vreko/cli\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</Section>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Link href={docsUrl} style={{ color: emailTheme.colors.primary, textDecoration: \"none\" }}>\n\t\t\t\t\t\t\tQuick-start guide →\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const CohortInviteTemplate: EmailTemplate<CohortInviteContext> = {\n\tid: \"product.cohort-invite\",\n\tcategory: \"product\",\n\tsubject: () => \"You're in — here's your Vreko Pioneer access code\",\n\tcomponent: CohortInvite,\n\tpreviewProps: {\n\t\temail: \"pioneer@example.com\",\n\t\tcode: \"VREKO123\",\n\t\tcohort: 1,\n\t},\n\tschema: CohortInviteContextSchema,\n};\n","import type { EmailCategory, EmailTemplate, EmailTemplateId } from \"./types\";\n\n/**\n * Template Registry\n * Type-safe central registry for all email templates\n */\n\ninterface TemplateMetadata {\n\tid: EmailTemplateId;\n\tcategory: EmailCategory;\n\tdescription: string;\n\tpreviewUrl?: string;\n}\n\nclass TemplateRegistry {\n\t// biome-ignore lint/suspicious/noExplicitAny: heterogeneous template contexts stored in a single map\n\tprivate templates = new Map<EmailTemplateId, EmailTemplate<any>>();\n\n\t/**\n\t * Register a template\n\t */\n\tregister<TContext>(template: EmailTemplate<TContext>): void {\n\t\tif (this.templates.has(template.id)) {\n\t\t\t// intentionally empty\n\t\t}\n\t\tthis.templates.set(template.id, template);\n\t}\n\n\t/**\n\t * Get a template by ID\n\t */\n\t// biome-ignore lint/suspicious/noExplicitAny: heterogeneous template contexts stored in a single map\n\tget<T extends EmailTemplateId>(id: T): EmailTemplate<any> | undefined {\n\t\treturn this.templates.get(id);\n\t}\n\n\t/**\n\t * Check if template exists\n\t */\n\thas(id: EmailTemplateId): boolean {\n\t\treturn this.templates.has(id);\n\t}\n\n\t/**\n\t * List all registered templates\n\t */\n\tlist(): TemplateMetadata[] {\n\t\treturn Array.from(this.templates.values()).map((template) => ({\n\t\t\tid: template.id,\n\t\t\tcategory: template.category,\n\t\t\tdescription: `${template.category} email template`,\n\t\t\tpreviewUrl: `/email/preview/${template.id}`,\n\t\t}));\n\t}\n\n\t/**\n\t * List templates by category\n\t */\n\tlistByCategory(category: EmailCategory): TemplateMetadata[] {\n\t\treturn this.list().filter((meta) => meta.category === category);\n\t}\n\n\t/**\n\t * Validate template ID\n\t */\n\tvalidate(id: EmailTemplateId): boolean {\n\t\treturn this.has(id);\n\t}\n\n\t/**\n\t * Get template count\n\t */\n\tget size(): number {\n\t\treturn this.templates.size;\n\t}\n}\n\n// Export singleton instance\nexport const templateRegistry = new TemplateRegistry();\n\n// Re-export types for convenience\nexport type { EmailTemplate, EmailTemplateId, TemplateMetadata };\n\n// ─── Template Registration ────────────────────────────────────────────────────\n\nimport { CohortInviteTemplate } from \"./templates/product/CohortInvite\";\n\ntemplateRegistry.register(CohortInviteTemplate);\n","import { render } from \"@react-email/render\";\nimport type { CohortInviteContext } from \"../contexts\";\nimport { sendEmail } from \"../resend\";\nimport { CohortInvite } from \"../templates/product/CohortInvite\";\n\nexport type CohortInviteInput = CohortInviteContext;\n\n/**\n * Send a cohort invite email to an accepted pioneer applicant.\n *\n * Renders the CohortInvite template to HTML and sends it via Resend.\n * Throws on Resend error — caller handles it.\n */\nexport async function sendCohortInviteEmail(input: CohortInviteInput): Promise<void> {\n\tconst html = await render(<CohortInvite {...input} />);\n\n\tconst result = await sendEmail({\n\t\tfrom: \"Vreko <q@vreko.dev>\",\n\t\tto: input.email,\n\t\tsubject: \"You're in — here's your Vreko Pioneer access code\",\n\t\thtml,\n\t});\n\n\tif (result.error) {\n\t\tthrow new Error(`Resend error sending cohort invite to ${input.email}: ${result.error.message}`);\n\t}\n}\n","import { Text } from \"@react-email/components\";\nimport { AlertBox, CodeBlock, PrimaryButton, RepoFooter, TerminalHeader, VrekoLayout } from \"../../components\";\nimport type { MagicLinkContext } from \"../../contexts\";\nimport { MagicLinkContextSchema } from \"../../contexts\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function MagicLink({ loginUrl, expiresInMinutes, ipAddress, userAgent }: MagicLinkContext) {\n\treturn (\n\t\t<VrekoLayout title=\"Sign in to Vreko\" preheader=\"Your magic link to sign in\">\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Text style={{ fontSize: \"18px\", marginBottom: \"24px\", color: \"#FAFAFA\" }}>Sign in to Vreko</Text>\n\n\t\t\t<AlertBox type=\"info\">Click the button below to securely sign in to your Vreko account.</AlertBox>\n\n\t\t\t<PrimaryButton href={loginUrl}>Sign In</PrimaryButton>\n\n\t\t\t<Text style={{ color: \"#71717A\", fontSize: \"14px\", marginTop: \"16px\" }}>\n\t\t\t\tThis magic link expires in {expiresInMinutes} minutes.\n\t\t\t</Text>\n\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\tmarginTop: \"32px\",\n\t\t\t\t\tmarginBottom: \"8px\",\n\t\t\t\t\tcolor: \"#A1A1AA\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\tRequest details:\n\t\t\t</Text>\n\n\t\t\t<CodeBlock code={`IP Address: ${ipAddress}\\nUser Agent: ${userAgent}`} />\n\n\t\t\t<Text style={{ color: \"#71717A\", fontSize: \"14px\", marginTop: \"24px\" }}>\n\t\t\t\tIf you didn't request this sign-in link, you can safely ignore this email.\n\t\t\t</Text>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const MagicLinkTemplate: EmailTemplate<MagicLinkContext> = {\n\tid: \"auth.magic-link\",\n\tcategory: \"authentication\",\n\tsubject: () => \"Sign in to Vreko\",\n\tcomponent: MagicLink,\n\tpreviewProps: {\n\t\tloginUrl: \"https://vreko.dev/auth/verify?token=xyz789\",\n\t\texpiresInMinutes: 15,\n\t\tipAddress: \"192.168.1.1\",\n\t\tuserAgent: \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)\",\n\t},\n\tschema: MagicLinkContextSchema,\n};\n","import { Text } from \"@react-email/components\";\nimport { AlertBox, CodeBlock, PrimaryButton, RepoFooter, TerminalHeader, VrekoLayout } from \"../../components\";\nimport type { NewDeviceLoginContext } from \"../../contexts\";\nimport { NewDeviceLoginContextSchema } from \"../../contexts\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function NewDeviceLogin({\n\tdeviceName,\n\tlocation,\n\tipAddress,\n\ttimestamp,\n\tapproveUrl,\n\tdenyUrl,\n}: NewDeviceLoginContext) {\n\treturn (\n\t\t<VrekoLayout title=\"New device sign-in\" preheader=\"New sign-in detected on your Vreko account\">\n\t\t\t<TerminalHeader status=\"processing\" />\n\n\t\t\t<Text style={{ fontSize: \"18px\", marginBottom: \"24px\", color: \"#FAFAFA\" }}>\n\t\t\t\tNew Device Sign-In Detected\n\t\t\t</Text>\n\n\t\t\t<AlertBox type=\"warning\">We detected a sign-in to your Vreko account from a new device.</AlertBox>\n\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\tmarginTop: \"24px\",\n\t\t\t\t\tmarginBottom: \"8px\",\n\t\t\t\t\tcolor: \"#A1A1AA\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\tSign-in details:\n\t\t\t</Text>\n\n\t\t\t<CodeBlock\n\t\t\t\tcode={`Device: ${deviceName}\\nLocation: ${location}\\nIP Address: ${ipAddress}\\nTime: ${timestamp.toLocaleString()}`}\n\t\t\t/>\n\n\t\t\t<Text style={{ fontSize: \"16px\", marginTop: \"32px\", color: \"#FAFAFA\" }}>Was this you?</Text>\n\n\t\t\t<PrimaryButton href={approveUrl}>Yes, this was me</PrimaryButton>\n\n\t\t\t<Text style={{ marginTop: \"16px\", fontSize: \"14px\", color: \"#A1A1AA\" }}>\n\t\t\t\tIf this wasn't you,{\" \"}\n\t\t\t\t<a href={denyUrl} style={{ color: \"#EF4444\", textDecoration: \"underline\" }}>\n\t\t\t\t\tdeny this sign-in\n\t\t\t\t</a>{\" \"}\n\t\t\t\tand secure your account immediately.\n\t\t\t</Text>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const NewDeviceLoginTemplate: EmailTemplate<NewDeviceLoginContext> = {\n\tid: \"auth.new-device-login\",\n\tcategory: \"authentication\",\n\tsubject: () => \"New device sign-in detected\",\n\tcomponent: NewDeviceLogin,\n\tpreviewProps: {\n\t\tdeviceName: \"MacBook Pro (Chrome)\",\n\t\tlocation: \"San Francisco, CA\",\n\t\tipAddress: \"192.168.1.1\",\n\t\ttimestamp: new Date(),\n\t\tapproveUrl: \"https://vreko.dev/security/approve?token=ghi789\",\n\t\tdenyUrl: \"https://vreko.dev/security/deny?token=ghi789\",\n\t},\n\tschema: NewDeviceLoginContextSchema,\n};\n","import { Text } from \"@react-email/components\";\nimport { AlertBox, CodeBlock, PrimaryButton, RepoFooter, TerminalHeader, VrekoLayout } from \"../../components\";\nimport type { ResetPasswordContext } from \"../../contexts\";\nimport { ResetPasswordContextSchema } from \"../../contexts\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function ResetPassword({ resetUrl, expiresInMinutes, requestedFrom }: ResetPasswordContext) {\n\treturn (\n\t\t<VrekoLayout title=\"Reset your password\" preheader=\"Reset your Vreko password\">\n\t\t\t<TerminalHeader status=\"processing\" />\n\n\t\t\t<Text style={{ fontSize: \"18px\", marginBottom: \"24px\", color: \"#FAFAFA\" }}>Reset Your Password</Text>\n\n\t\t\t<AlertBox type=\"warning\">\n\t\t\t\tA password reset was requested for your Vreko account. If this wasn't you, please ignore this email.\n\t\t\t</AlertBox>\n\n\t\t\t<PrimaryButton href={resetUrl}>Reset Password</PrimaryButton>\n\n\t\t\t<Text style={{ color: \"#71717A\", fontSize: \"14px\", marginTop: \"16px\" }}>\n\t\t\t\tThis reset link expires in {expiresInMinutes} minutes.\n\t\t\t</Text>\n\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\tmarginTop: \"32px\",\n\t\t\t\t\tmarginBottom: \"8px\",\n\t\t\t\t\tcolor: \"#A1A1AA\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\tRequest details:\n\t\t\t</Text>\n\n\t\t\t<CodeBlock\n\t\t\t\tcode={`IP Address: ${requestedFrom.ipAddress}${requestedFrom.location ? `\\nLocation: ${requestedFrom.location}` : \"\"}`}\n\t\t\t/>\n\n\t\t\t<Text style={{ color: \"#71717A\", fontSize: \"14px\", marginTop: \"24px\" }}>\n\t\t\t\tIf you didn't request a password reset, your account may be compromised. Please contact support\n\t\t\t\timmediately.\n\t\t\t</Text>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const ResetPasswordTemplate: EmailTemplate<ResetPasswordContext> = {\n\tid: \"auth.reset-password\",\n\tcategory: \"authentication\",\n\tsubject: () => \"Reset your Vreko password\",\n\tcomponent: ResetPassword,\n\tpreviewProps: {\n\t\tresetUrl: \"https://vreko.dev/reset?token=def456\",\n\t\texpiresInMinutes: 30,\n\t\trequestedFrom: {\n\t\t\tipAddress: \"192.168.1.1\",\n\t\t\tlocation: \"San Francisco, CA\",\n\t\t},\n\t},\n\tschema: ResetPasswordContextSchema,\n};\n","import { Text } from \"@react-email/components\";\nimport { AlertBox, PrimaryButton, RepoFooter, TerminalHeader, VrekoLayout } from \"../../components\";\nimport type { VerifyEmailContext } from \"../../contexts\";\nimport { VerifyEmailContextSchema } from \"../../contexts\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function VerifyEmail({ verificationUrl, expiresInMinutes }: VerifyEmailContext) {\n\treturn (\n\t\t<VrekoLayout title=\"Verify your email\" preheader=\"Click to verify your Vreko account\">\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Text style={{ fontSize: \"18px\", marginBottom: \"24px\", color: \"#FAFAFA\" }}>Welcome to Vreko!</Text>\n\n\t\t\t<AlertBox type=\"info\">\n\t\t\t\tPlease verify your email address to activate your account and start using Vreko.\n\t\t\t</AlertBox>\n\n\t\t\t<PrimaryButton href={verificationUrl}>Verify Email Address</PrimaryButton>\n\n\t\t\t<Text style={{ color: \"#71717A\", fontSize: \"14px\", marginTop: \"16px\" }}>\n\t\t\t\tThis verification link expires in {expiresInMinutes} minutes.\n\t\t\t</Text>\n\n\t\t\t<Text style={{ color: \"#71717A\", fontSize: \"14px\", marginTop: \"24px\" }}>\n\t\t\t\tIf you didn't create a Vreko account, you can safely ignore this email.\n\t\t\t</Text>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const VerifyEmailTemplate: EmailTemplate<VerifyEmailContext> = {\n\tid: \"auth.verify-email\",\n\tcategory: \"authentication\",\n\tsubject: () => \"Verify your Vreko account\",\n\tcomponent: VerifyEmail,\n\tpreviewProps: {\n\t\tverificationUrl: \"https://vreko.dev/verify?token=abc123\",\n\t\texpiresInMinutes: 15,\n\t},\n\tschema: VerifyEmailContextSchema,\n};\n","import { Badge, BodyText, Headline, TerminalBlock, VrekoEmailShell } from \"../../components\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport type ActivationNudgeContext = {};\n\nexport function ActivationNudge(_: ActivationNudgeContext) {\n\treturn (\n\t\t<VrekoEmailShell title=\"Your daemon is installed. Run vreko start.\" previewText=\"Run vreko start\">\n\t\t\t<Badge label=\"● AWAITING SESSION\" />\n\t\t\t<Headline>Your daemon is installed. Run `vreko start`.</Headline>\n\t\t\t<BodyText>\n\t\t\t\tIntelligence calibration begins with your first session. The daemon is ready - it is waiting for you.\n\t\t\t</BodyText>\n\t\t\t<TerminalBlock cursor>{`$ vreko start\n● daemon started pid 41288\n● intelligence CALIBRATING_`}</TerminalBlock>\n\t\t</VrekoEmailShell>\n\t);\n}\n\nexport const ActivationNudgeTemplate: EmailTemplate<ActivationNudgeContext> = {\n\tid: \"product.activation-nudge\",\n\tcategory: \"product\",\n\tsubject: () => \"Your daemon is installed. Run vreko start.\",\n\tcomponent: ActivationNudge,\n\tpreviewProps: {},\n};\n\nexport default ActivationNudge;\n","import { Text } from \"@react-email/components\";\nimport { Badge, BodyText, Headline, TerminalBlock, VrekoEmailShell } from \"../../components\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport type CliNudgeContext = {};\n\nexport function CliNudge(_: CliNudgeContext) {\n\treturn (\n\t\t<VrekoEmailShell title=\"Install the Vreko CLI to start your first session\" previewText=\"Install the Vreko CLI\">\n\t\t\t<Badge label=\"● NEXT STEP\" />\n\t\t\t<Headline>Install the Vreko CLI to start your first session.</Headline>\n\t\t\t<BodyText>\n\t\t\t\tThe daemon runs locally. One install, then `vreko start` and your codebase intelligence begins\n\t\t\t\taccumulating.\n\t\t\t</BodyText>\n\t\t\t<TerminalBlock cursor>{\"npm install -g @vreko/cli\"}</TerminalBlock>\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tmargin: \"0\",\n\t\t\t\t\tfontFamily: \"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif\",\n\t\t\t\t\tfontSize: \"13px\",\n\t\t\t\t\tlineHeight: \"1.6\",\n\t\t\t\t\tcolor: \"#9CA3AF\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<a href=\"https://docs.vreko.dev/install\" style={{ color: \"#4ADE80\", textDecoration: \"none\" }}>\n\t\t\t\t\tdocs.vreko.dev/install →\n\t\t\t\t</a>\n\t\t\t</Text>\n\t\t</VrekoEmailShell>\n\t);\n}\n\nexport const CliNudgeTemplate: EmailTemplate<CliNudgeContext> = {\n\tid: \"product.cli-nudge\",\n\tcategory: \"product\",\n\tsubject: () => \"Install the Vreko CLI to start your first session\",\n\tcomponent: CliNudge,\n\tpreviewProps: {},\n};\n\nexport default CliNudge;\n","import { Text } from \"@react-email/components\";\nimport { Badge, BodyText, Headline, VrekoEmailShell } from \"../../components\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport type ExtensionNudgeContext = {};\n\nexport function ExtensionNudge(_: ExtensionNudgeContext) {\n\treturn (\n\t\t<VrekoEmailShell\n\t\t\ttitle=\"Add the VS Code extension to complete your setup\"\n\t\t\tpreviewText=\"Add the VS Code extension\"\n\t\t>\n\t\t\t<Badge label=\"● NEXT STEP\" />\n\t\t\t<Headline>Add the VS Code extension to complete your setup.</Headline>\n\t\t\t<BodyText>\n\t\t\t\tThe extension connects to your local daemon and surfaces fragility signals as you work. Takes 30\n\t\t\t\tseconds.\n\t\t\t</BodyText>\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tmargin: \"0\",\n\t\t\t\t\tfontFamily: \"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif\",\n\t\t\t\t\tfontSize: \"13px\",\n\t\t\t\t\tlineHeight: \"1.6\",\n\t\t\t\t\tcolor: \"#9CA3AF\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<a\n\t\t\t\t\thref=\"https://marketplace.visualstudio.com/items?itemName=vreko.vreko\"\n\t\t\t\t\tstyle={{ color: \"#4ADE80\", textDecoration: \"none\" }}\n\t\t\t\t>\n\t\t\t\t\tVS Code Marketplace →\n\t\t\t\t</a>\n\t\t\t</Text>\n\t\t</VrekoEmailShell>\n\t);\n}\n\nexport const ExtensionNudgeTemplate: EmailTemplate<ExtensionNudgeContext> = {\n\tid: \"product.extension-nudge\",\n\tcategory: \"product\",\n\tsubject: () => \"Add the VS Code extension to complete your setup\",\n\tcomponent: ExtensionNudge,\n\tpreviewProps: {},\n};\n\nexport default ExtensionNudge;\n","import { Heading, Link, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { AlertBox } from \"../../components/primitives/AlertBox\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { StatRow } from \"../../components/primitives/StatRow\";\nimport { type NiceSaveContext, NiceSaveContextSchema } from \"../../contexts\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function NiceSave({\n\tfirstName,\n\tfilesRecovered,\n\tlinesOfCode,\n\ttimeSavedMinutes,\n\tsessionTime,\n\trestoreTime,\n\taiToolDetected,\n\tdashboardUrl,\n\ttwitterShareUrl,\n}: NiceSaveContext) {\n\tconst timeSavedText =\n\t\ttimeSavedMinutes >= 60\n\t\t\t? `${Math.floor(timeSavedMinutes / 60)}h ${timeSavedMinutes % 60}m`\n\t\t\t: `${timeSavedMinutes}m`;\n\n\treturn (\n\t\t<VrekoLayout\n\t\t\ttitle=\"Nice Save! Your Code is Safe\"\n\t\t\tpreheader={`You just recovered ${filesRecovered} file${filesRecovered !== 1 ? \"s\" : \"\"} with Vreko`}\n\t\t>\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"28px\",\n\t\t\t\t\t\tfontWeight: \"700\",\n\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t🎉 Nice Save!\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tHey {firstName}, you just recovered your code with Vreko. That's what we're here for!\n\t\t\t\t</Text>\n\n\t\t\t\t<AlertBox type=\"success\">\n\t\t\t\t\t<span>Your restore completed successfully. Your code is back to its pre-AI state.</span>\n\t\t\t\t</AlertBox>\n\n\t\t\t\t{/* Recovery Stats */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0\",\n\t\t\t\t\t\tpadding: \"24px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tRecovery Summary\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<StatRow label=\"Files Recovered\" value={filesRecovered.toString()} icon=\"📁\" />\n\t\t\t\t\t<StatRow label=\"Lines of Code\" value={linesOfCode.toLocaleString()} icon=\"📝\" />\n\t\t\t\t\t<StatRow label=\"Time Saved\" value={timeSavedText} icon=\"⏱️\" />\n\t\t\t\t\t{aiToolDetected && <StatRow label=\"AI Tool Detected\" value={aiToolDetected} icon=\"🤖\" />}\n\t\t\t\t</Section>\n\n\t\t\t\t{/* Timeline */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0\",\n\t\t\t\t\t\tpadding: \"20px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.backgroundSecondary,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 12px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t📸 Session started: {sessionTime}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t⏪ Restored at: {restoreTime}\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t{/* What Happened */}\n\t\t\t\t<Section style={{ margin: \"32px 0\" }}>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tWhat Just Happened?\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tVreko's AutoDecisionEngine detected changes that needed protection and automatically tracked\n\t\t\t\t\t\tyour session. When you needed to recover, we had your back.\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tWithout Vreko, you might have spent {timeSavedText} manually reconstructing your code or digging\n\t\t\t\t\t\tthrough git history. Instead, one click and you're back.\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t{/* CTA Buttons */}\n\t\t\t\t<Section style={{ textAlign: \"center\", margin: \"32px 0\" }}>\n\t\t\t\t\t<PrimaryButton href={dashboardUrl}>View in Dashboard</PrimaryButton>\n\n\t\t\t\t\t{twitterShareUrl && (\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: \"16px 0 0 0\",\n\t\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\thref={twitterShareUrl}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\t\t\t\ttextDecoration: \"none\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tShare your save on Twitter →\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Section>\n\n\t\t\t\t{/* Pro Tip */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0 0 0\",\n\t\t\t\t\t\tpadding: \"20px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.primary}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<strong style={{ color: emailTheme.colors.primary }}>💡 Pro Tip:</strong> Vreko learns from your\n\t\t\t\t\t\tworkflow. The more you use it, the smarter it gets at predicting when you'll need protection.\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const NiceSaveTemplate: EmailTemplate<NiceSaveContext> = {\n\tid: \"product.nice-save\",\n\tcategory: \"product\",\n\tsubject: (ctx) => `🎉 Nice Save, ${ctx.firstName}! You just recovered ${ctx.filesRecovered} files`,\n\tcomponent: NiceSave,\n\tpreviewProps: {\n\t\tfirstName: \"Alex\",\n\t\tfilesRecovered: 3,\n\t\tlinesOfCode: 247,\n\t\ttimeSavedMinutes: 45,\n\t\tsessionTime: \"Today at 2:34 PM\",\n\t\trestoreTime: \"Today at 3:12 PM\",\n\t\taiToolDetected: \"Claude Code\",\n\t\tdashboardUrl: \"https://vreko.dev/dashboard/restores\",\n\t\ttwitterShareUrl:\n\t\t\t\"https://twitter.com/intent/tweet?text=Just%20recovered%20247%20lines%20of%20code%20with%20@vrekodev%20%F0%9F%8E%89\",\n\t},\n\tschema: NiceSaveContextSchema,\n};\n","import { Heading, Link, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { AlertBox } from \"../../components/primitives/AlertBox\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { StatRow } from \"../../components/primitives/StatRow\";\nimport { type PioneerIntroContext, PioneerIntroContextSchema } from \"../../contexts\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function PioneerIntro({\n\tfirstName,\n\tcurrentTier,\n\tcurrentPoints,\n\tnextTierName,\n\tpointsToNextTier,\n\tsessionsCompleted,\n\trestoresCompleted,\n\tdaysActive,\n\tpioneerDashboardUrl,\n\treferralUrl,\n}: PioneerIntroContext) {\n\treturn (\n\t\t<VrekoLayout\n\t\t\ttitle=\"Welcome to the Pioneer Program!\"\n\t\t\tpreheader={`You've earned ${currentPoints} Pioneer Points, ${firstName}!`}\n\t\t>\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"28px\",\n\t\t\t\t\t\tfontWeight: \"700\",\n\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t🚀 Welcome, Pioneer!\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tHey {firstName}! You've been using Vreko for a week now, and we're excited to officially welcome you\n\t\t\t\t\tto the Pioneer Program.\n\t\t\t\t</Text>\n\n\t\t\t\t<AlertBox type=\"success\">\n\t\t\t\t\t<span>\n\t\t\t\t\t\tYou're now a <strong>{currentTier}</strong> with {currentPoints} Pioneer Points!\n\t\t\t\t\t</span>\n\t\t\t\t</AlertBox>\n\n\t\t\t\t{/* Your Stats */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0\",\n\t\t\t\t\t\tpadding: \"24px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tYour First Week Stats\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<StatRow label=\"Sessions Completed\" value={sessionsCompleted.toString()} icon=\"📸\" />\n\t\t\t\t\t<StatRow label=\"Timeline Restores\" value={restoresCompleted.toString()} icon=\"⏪\" />\n\t\t\t\t\t<StatRow label=\"Days Active\" value={daysActive.toString()} icon=\"📅\" />\n\t\t\t\t\t<StatRow label=\"Pioneer Points\" value={currentPoints.toString()} icon=\"⭐\" />\n\t\t\t\t</Section>\n\n\t\t\t\t{/* What is Pioneer Program */}\n\t\t\t\t<Section style={{ margin: \"32px 0\" }}>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tWhat's the Pioneer Program?\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tThe Pioneer Program rewards our most engaged users with exclusive perks, early access to new\n\t\t\t\t\t\tfeatures, and real influence on Vreko's roadmap. The more you use Vreko, the more points you\n\t\t\t\t\t\tearn.\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t{/* Tier Progress */}\n\t\t\t\t\t{nextTierName && pointsToNextTier && (\n\t\t\t\t\t\t<Section\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: \"16px 0\",\n\t\t\t\t\t\t\t\tpadding: \"16px\",\n\t\t\t\t\t\t\t\tbackgroundColor: emailTheme.colors.backgroundSecondary,\n\t\t\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.primary}`,\n\t\t\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<strong style={{ color: emailTheme.colors.primary }}>Next tier:</strong> {nextTierName}\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t<span style={{ color: emailTheme.colors.textSecondary }}>\n\t\t\t\t\t\t\t\t\t{pointsToNextTier} more points to unlock\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</Section>\n\t\t\t\t\t)}\n\t\t\t\t</Section>\n\n\t\t\t\t{/* Ways to Earn */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0\",\n\t\t\t\t\t\tpadding: \"24px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tWays to Earn Points\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<strong style={{ color: emailTheme.colors.primary }}>+10 pts</strong> - Daily active use\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<strong style={{ color: emailTheme.colors.primary }}>+25 pts</strong> - First restore of the\n\t\t\t\t\t\tweek\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<strong style={{ color: emailTheme.colors.primary }}>+100 pts</strong> - Refer a friend who\n\t\t\t\t\t\tsigns up\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<strong style={{ color: emailTheme.colors.primary }}>+50 pts</strong> - Share feedback or bug\n\t\t\t\t\t\treports\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<strong style={{ color: emailTheme.colors.primary }}>+200 pts</strong> - Write about Vreko\n\t\t\t\t\t\t(tweet, blog)\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t{/* CTA Buttons */}\n\t\t\t\t<Section style={{ textAlign: \"center\", margin: \"32px 0\" }}>\n\t\t\t\t\t<PrimaryButton href={pioneerDashboardUrl}>View Pioneer Dashboard</PrimaryButton>\n\n\t\t\t\t\t{referralUrl && (\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: \"16px 0 0 0\",\n\t\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\thref={referralUrl}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\t\t\t\ttextDecoration: \"none\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tGet your referral link → +100 pts per signup\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Section>\n\n\t\t\t\t{/* Founder Note */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0 0 0\",\n\t\t\t\t\t\tpadding: \"20px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.primary}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t\tfontStyle: \"italic\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t\"Pioneers aren't just users - they're co-builders. Your feedback directly shapes what we build\n\t\t\t\t\t\tnext. We read every message, and top Pioneers get direct access to our team.\"\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"12px 0 0 0\",\n\t\t\t\t\t\t\tfontSize: \"13px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t- The Vreko Team\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const PioneerIntroTemplate: EmailTemplate<PioneerIntroContext> = {\n\tid: \"product.pioneer-intro\",\n\tcategory: \"product\",\n\tsubject: (ctx) => `🚀 Welcome to the Pioneer Program, ${ctx.firstName}!`,\n\tcomponent: PioneerIntro,\n\tpreviewProps: {\n\t\tfirstName: \"Alex\",\n\t\tcurrentTier: \"Explorer\",\n\t\tcurrentPoints: 175,\n\t\tnextTierName: \"Trailblazer\",\n\t\tpointsToNextTier: 325,\n\t\tsessionsCompleted: 23,\n\t\trestoresCompleted: 2,\n\t\tdaysActive: 7,\n\t\tpioneerDashboardUrl: \"https://vreko.dev/dashboard/pioneer\",\n\t\treferralUrl: \"https://vreko.dev/refer/alex123\",\n\t},\n\tschema: PioneerIntroContextSchema,\n};\n","import { Heading, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { AlertBox } from \"../../components/primitives/AlertBox\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { StatRow } from \"../../components/primitives/StatRow\";\nimport { type PioneerMilestoneContext, PioneerMilestoneContextSchema } from \"../../contexts\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function PioneerMilestone({\n\tfirstName,\n\toldTier,\n\tnewTier,\n\tpointsEarned,\n\ttotalPoints,\n\tnextTierName,\n\tpointsToNextTier,\n\tunlockedPerks,\n\tdashboardUrl,\n}: PioneerMilestoneContext) {\n\treturn (\n\t\t<VrekoLayout\n\t\t\ttitle=\"You've Leveled Up! 🎉\"\n\t\t\tpreheader={`Congratulations! You've reached ${newTier} tier in the Vreko Pioneer Program`}\n\t\t>\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"24px\",\n\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t$ vreko pioneer level-up\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tCongratulations, {firstName}! You've just advanced from <strong>{oldTier}</strong> to{\" \"}\n\t\t\t\t\t<strong>{newTier}</strong> in the Vreko Pioneer Program! 🚀\n\t\t\t\t</Text>\n\n\t\t\t\t<AlertBox type=\"success\">\n\t\t\t\t\t🎉 Tier Upgrade: {oldTier} → {newTier}\n\t\t\t\t</AlertBox>\n\n\t\t\t\t{/* Points Progress */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0\",\n\t\t\t\t\t\tpadding: \"24px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.backgroundSecondary,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.primary}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 20px 0\",\n\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tYour Pioneer Stats\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<StatRow label=\"Current Tier\" value={newTier} icon=\"🏆\" />\n\t\t\t\t\t<StatRow label=\"Total Points\" value={totalPoints.toString()} icon=\"⭐\" />\n\t\t\t\t\t<StatRow label=\"Points Earned This Milestone\" value={`+${pointsEarned}`} icon=\"✨\" />\n\n\t\t\t\t\t{nextTierName && pointsToNextTier && (\n\t\t\t\t\t\t<Section\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: \"20px 0 12px 0\",\n\t\t\t\t\t\t\t\tpaddingTop: \"20px\",\n\t\t\t\t\t\t\t\tborderTop: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tmargin: \"0 0 8px 0\",\n\t\t\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tNext Tier: {nextTierName}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\t\tfontSize: \"13px\",\n\t\t\t\t\t\t\t\t\tlineHeight: \"18px\",\n\t\t\t\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{pointsToNextTier} points away from {nextTierName}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</Section>\n\t\t\t\t\t)}\n\t\t\t\t</Section>\n\n\t\t\t\t{/* Unlocked Perks */}\n\t\t\t\t{unlockedPerks.length > 0 && (\n\t\t\t\t\t<Section style={{ margin: \"0 0 32px 0\" }}>\n\t\t\t\t\t\t<Heading\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tNewly Unlocked Perks\n\t\t\t\t\t\t</Heading>\n\n\t\t\t\t\t\t{unlockedPerks.map((perk, index) => (\n\t\t\t\t\t\t\t<Section\n\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tmargin: \"0 0 12px 0\",\n\t\t\t\t\t\t\t\t\tpadding: \"16px\",\n\t\t\t\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\t\t\t\tborderRadius: \"6px\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tmargin: \"0 0 8px 0\",\n\t\t\t\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{perk.icon} {perk.name}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{perk.description}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t</Section>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Section>\n\t\t\t\t)}\n\n\t\t\t\t{/* How to Earn More Points */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 32px 0\",\n\t\t\t\t\t\tpadding: \"20px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.backgroundSecondary,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 12px 0\",\n\t\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tKeep Leveling Up\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{emailTheme.ascii.checkmark} Share Vreko with your team (+50 points per referral)\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{emailTheme.ascii.checkmark} Contribute to our open-source repos (+100 points per merged PR)\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{emailTheme.ascii.checkmark} Write technical content about Vreko (+75 points per article)\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{emailTheme.ascii.checkmark} Build integrations or plugins (+150 points per published plugin)\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{emailTheme.ascii.checkmark} Help others in Discord (+25 points per week of active support)\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t<PrimaryButton href={dashboardUrl}>View Pioneer Dashboard</PrimaryButton>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0 0 0\",\n\t\t\t\t\t\tfontSize: \"13px\",\n\t\t\t\t\t\tlineHeight: \"18px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tThe Vreko Pioneer Program rewards developers who help grow our community. Learn more about tiers and\n\t\t\t\t\tperks in your dashboard.\n\t\t\t\t</Text>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const PioneerMilestoneTemplate: EmailTemplate<PioneerMilestoneContext> = {\n\tid: \"product.pioneer-milestone\",\n\tcategory: \"product\",\n\tsubject: (ctx) => `🎉 You've reached ${ctx.newTier} tier in the Pioneer Program!`,\n\tcomponent: PioneerMilestone,\n\tpreviewProps: {\n\t\tfirstName: \"Alex\",\n\t\toldTier: \"Explorer\",\n\t\tnewTier: \"Trailblazer\",\n\t\tpointsEarned: 125,\n\t\ttotalPoints: 750,\n\t\tnextTierName: \"Pathfinder\",\n\t\tpointsToNextTier: 250,\n\t\tunlockedPerks: [\n\t\t\t{\n\t\t\t\ticon: \"🎨\",\n\t\t\t\tname: \"Custom Themes\",\n\t\t\t\tdescription: \"Create and share custom themes for your Vreko dashboard and CLI.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ticon: \"⚡\",\n\t\t\t\tname: \"Priority Processing\",\n\t\t\t\tdescription: \"Your intelligent sessions get priority queue processing for faster results.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ticon: \"👥\",\n\t\t\t\tname: \"Expanded Team Seats\",\n\t\t\t\tdescription: \"Add up to 10 team members at no additional cost (previously limited to 5).\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ticon: \"🎟️\",\n\t\t\t\tname: \"Early Access\",\n\t\t\t\tdescription: \"Get early access to beta features and provide feedback to shape Vreko.\",\n\t\t\t},\n\t\t],\n\t\tdashboardUrl: \"https://vreko.dev/pioneer\",\n\t},\n\tschema: PioneerMilestoneContextSchema,\n};\n","// @deprecated - replaced by canonical Vreko template.\nimport { Text } from \"@react-email/components\";\nimport { Badge, BodyText, Headline, StatRow, TerminalBlock, VrekoEmailShell } from \"../../components\";\nimport { type SystemAlertContext, SystemAlertContextSchema } from \"../../contexts\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function SystemAlert({ tier, repositoryName, filePath, score, aiSessionCount, riskLevel }: SystemAlertContext) {\n\tconst scoreLabel = score.toFixed(2);\n\tconst previewText =\n\t\ttier === \"free\"\n\t\t\t? `${repositoryName} · Pro unlocks the file path`\n\t\t\t: `${repositoryName} · ${filePath} · fragility ${scoreLabel}`;\n\n\treturn (\n\t\t<VrekoEmailShell title={`Vreko intelligence for ${repositoryName}`} previewText={previewText}>\n\t\t\t<Badge label=\"INTELLIGENCE UPDATE\" />\n\t\t\t<Headline>\n\t\t\t\t{tier === \"free\"\n\t\t\t\t\t? \"A fragile file was detected in your workspace.\"\n\t\t\t\t\t: \"Vreko flagged a high-risk file in your codebase.\"}\n\t\t\t</Headline>\n\n\t\t\t<BodyText>\n\t\t\t\t{tier === \"free\"\n\t\t\t\t\t? `Vreko found repeated change and rollback patterns in ${repositoryName}.`\n\t\t\t\t\t: `Vreko found repeated change and rollback patterns in ${repositoryName}. The exact file path and score are below.`}\n\t\t\t</BodyText>\n\n\t\t\t<StatRow label=\"repository\" value={repositoryName} />\n\t\t\t<StatRow label=\"fragility score\" value={scoreLabel} icon=\"●\" />\n\t\t\t<StatRow label=\"AI sessions\" value={aiSessionCount} />\n\t\t\t<StatRow label=\"risk level\" value={riskLevel} />\n\n\t\t\t{tier === \"pro\" ? (\n\t\t\t\t<TerminalBlock cursor>\n\t\t\t\t\t{`file path: ${filePath}\\nscore: ${scoreLabel}\\nrisk: ${riskLevel}`}\n\t\t\t\t</TerminalBlock>\n\t\t\t) : (\n\t\t\t\t<BodyText mt={24}>\n\t\t\t\t\tUpgrade to Pro to reveal the exact file path and get the full intelligence card for this file.\n\t\t\t\t</BodyText>\n\t\t\t)}\n\n\t\t\t<BodyText mt={8} mb={0}>\n\t\t\t\tQuestions about this finding?{\" \"}\n\t\t\t\t<a href=\"mailto:pioneer@vreko.dev\" style={{ color: \"#4ADE80\", textDecoration: \"none\" }}>\n\t\t\t\t\tReply to this email →\n\t\t\t\t</a>\n\t\t\t</BodyText>\n\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tmargin: \"8px 0 0 0\",\n\t\t\t\t\tfontFamily: \"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif\",\n\t\t\t\t\tfontSize: \"12px\",\n\t\t\t\t\tlineHeight: \"1.6\",\n\t\t\t\t\tcolor: \"#9CA3AF\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{tier === \"free\"\n\t\t\t\t\t? \"Free tier keeps the file path hidden.\"\n\t\t\t\t\t: \"Pro tier includes the full file path and intelligence card.\"}\n\t\t\t</Text>\n\t\t</VrekoEmailShell>\n\t);\n}\n\nexport const SystemAlertTemplate: EmailTemplate<SystemAlertContext> = {\n\tid: \"product.system-alert\",\n\tcategory: \"product\",\n\tsubject: (ctx) =>\n\t\tctx.tier === \"free\"\n\t\t\t? `Vreko found a fragile file in ${ctx.repositoryName}`\n\t\t\t: `Vreko flagged ${ctx.filePath} in ${ctx.repositoryName}`,\n\tcomponent: SystemAlert,\n\tpreviewProps: {\n\t\ttier: \"pro\",\n\t\trepositoryName: \"marcelle/vreko-web\",\n\t\tfilePath: \"apps/console/lib/intelligence/projection.ts\",\n\t\tscore: 0.87,\n\t\taiSessionCount: 12,\n\t\triskLevel: \"HIGH\",\n\t},\n\tschema: SystemAlertContextSchema,\n};\n\nexport default SystemAlert;\n","// @deprecated - replaced by canonical Vreko template.\nimport { Section, Text } from \"@react-email/components\";\nimport { Badge, BodyText, Headline, PrimaryButton, StatRow, TerminalBlock, VrekoEmailShell } from \"../../components\";\nimport { type WeeklyDigestContext, WeeklyDigestContextSchema } from \"../../contexts\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function WeeklyDigest({\n\tfirstName,\n\tweekStartDate,\n\tweekEndDate,\n\tstats,\n\thighlights,\n\tdashboardUrl,\n}: WeeklyDigestContext) {\n\tconst previewText = `${stats.totalSnapshots} sessions tracked · ${stats.regressionsCaught} regressions caught`;\n\n\treturn (\n\t\t<VrekoEmailShell title=\"Your Weekly Vreko Summary\" previewText={previewText}>\n\t\t\t<Badge label=\"PIONEER UPDATE\" />\n\t\t\t<Headline>Here&apos;s what changed since your last pulse.</Headline>\n\t\t\t<BodyText>\n\t\t\t\tHey {firstName}, here&apos;s your testing activity from {weekStartDate} to {weekEndDate}. This is the\n\t\t\t\tweekly pulse from the daemon, not a marketing recap.\n\t\t\t</BodyText>\n\n\t\t\t<TerminalBlock>\n\t\t\t\t{[\n\t\t\t\t\t`sessions tracked: ${stats.totalSnapshots}`,\n\t\t\t\t\t`tests passed: ${stats.testsPassed}`,\n\t\t\t\t\t`regressions caught: ${stats.regressionsCaught}`,\n\t\t\t\t\t`active projects: ${stats.activeProjects}`,\n\t\t\t\t\t`active members: ${stats.activeMembers}`,\n\t\t\t\t].join(\"\\n\")}\n\t\t\t</TerminalBlock>\n\n\t\t\t<Section style={{ margin: \"24px 0 0 0\" }}>\n\t\t\t\t<StatRow label=\"Sessions tracked\" value={stats.totalSnapshots} icon=\"▸\" />\n\t\t\t\t<StatRow label=\"Tests passed\" value={stats.testsPassed} icon=\"✓\" />\n\t\t\t\t<StatRow label=\"Regressions caught\" value={stats.regressionsCaught} icon=\"⚑\" />\n\t\t\t\t<StatRow label=\"Active projects\" value={stats.activeProjects} icon=\"◫\" />\n\t\t\t\t<StatRow label=\"Team members active\" value={stats.activeMembers} icon=\"●\" />\n\t\t\t</Section>\n\n\t\t\t{stats.pioneerPointsEarned > 0 ? (\n\t\t\t\t<BodyText mt={24}>Pioneer points earned this week: +{stats.pioneerPointsEarned}.</BodyText>\n\t\t\t) : null}\n\n\t\t\t{highlights.length > 0 ? (\n\t\t\t\t<Section style={{ marginTop: \"24px\" }}>\n\t\t\t\t\t<Headline>Weekly highlights</Headline>\n\t\t\t\t\t{highlights.map((highlight) => (\n\t\t\t\t\t\t<Section\n\t\t\t\t\t\t\tkey={`${highlight.title}-${highlight.icon}`}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tpadding: \"16px 0\",\n\t\t\t\t\t\t\t\tborderTop: \"1px solid #27272A\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tmargin: \"0 0 6px 0\",\n\t\t\t\t\t\t\t\t\tfontFamily:\n\t\t\t\t\t\t\t\t\t\t\"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif\",\n\t\t\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\t\tcolor: \"#FFFFFF\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{highlight.icon} {highlight.title}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\t\tfontFamily:\n\t\t\t\t\t\t\t\t\t\t\"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif\",\n\t\t\t\t\t\t\t\t\tfontSize: \"13px\",\n\t\t\t\t\t\t\t\t\tlineHeight: 1.6,\n\t\t\t\t\t\t\t\t\tcolor: \"#9CA3AF\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{highlight.description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</Section>\n\t\t\t\t\t))}\n\t\t\t\t</Section>\n\t\t\t) : null}\n\n\t\t\t<PrimaryButton href={dashboardUrl}>View Full Dashboard</PrimaryButton>\n\t\t</VrekoEmailShell>\n\t);\n}\n\nexport const WeeklyDigestTemplate: EmailTemplate<WeeklyDigestContext> = {\n\tid: \"product.weekly-digest\",\n\tcategory: \"product\",\n\tsubject: (ctx) => `Your Vreko Weekly Summary: ${ctx.stats.totalSnapshots} sessions tracked`,\n\tcomponent: WeeklyDigest,\n\tpreviewProps: {\n\t\tfirstName: \"Alex\",\n\t\tweekStartDate: \"Jan 15\",\n\t\tweekEndDate: \"Jan 21\",\n\t\tstats: {\n\t\t\ttotalSnapshots: 42,\n\t\t\ttestsPassed: 38,\n\t\t\tregressionsCaught: 3,\n\t\t\tactiveProjects: 5,\n\t\t\tactiveMembers: 2,\n\t\t\tpioneerPointsEarned: 25,\n\t\t\tcomparisonToPreviousWeek: 18,\n\t\t},\n\t\thighlights: [\n\t\t\t{\n\t\t\t\ticon: \"NEW\",\n\t\t\t\ttitle: \"agents-audit CLI published to npm\",\n\t\t\t\tdescription: \"One command audits any repo for AI-session fragility and emits a workspace.json.\",\n\t\t\t},\n\t\t],\n\t\tdashboardUrl: \"https://vreko.dev/dashboard\",\n\t},\n\tschema: WeeklyDigestContextSchema,\n};\n\nexport default WeeklyDigest;\n","// @deprecated - replaced by canonical Vreko template.\nimport { Text } from \"@react-email/components\";\nimport { Badge, BodyText, PrimaryButton, TerminalBlock, VrekoEmailShell } from \"../../components\";\nimport type { WelcomeContext } from \"../../contexts\";\nimport { WelcomeContextSchema } from \"../../contexts\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function Welcome({\n\tfirstName,\n\tplanName,\n\tplanFeatures,\n\tdashboardUrl,\n\tdocsUrl,\n\tpioneerTier,\n\tpioneerPoints,\n}: WelcomeContext) {\n\tconst greeting = firstName ? `${firstName}, we received your request.` : \"We received your request.\";\n\tconst previewText = `Welcome to Vreko${pioneerTier ? ` · Pioneer ${pioneerTier}` : \"\"}`;\n\n\treturn (\n\t\t<VrekoEmailShell title={`Welcome to Vreko, ${firstName}`} previewText={previewText}>\n\t\t\t<Badge label=\"Pioneer Cohort\" />\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tmargin: \"0 0 20px 0\",\n\t\t\t\t\tfontFamily: \"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif\",\n\t\t\t\t\tfontSize: \"20px\",\n\t\t\t\t\tlineHeight: \"1.35\",\n\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\tcolor: \"#FFFFFF\",\n\t\t\t\t\tletterSpacing: \"-0.01em\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{greeting}\n\t\t\t</Text>\n\t\t\t<BodyText>\n\t\t\t\tYou're on the <strong>{planName}</strong> plan. Vreko is set up to watch your codebase locally, record\n\t\t\t\twhat actually breaks, and write those signals back into AGENTS.md for the next session.\n\t\t\t</BodyText>\n\t\t\t<BodyText mb={24}>\n\t\t\t\tNo code leaves your machine. Intelligence compounds with each session, and your docs stay current as the\n\t\t\t\tdaemon learns your workspace.\n\t\t\t</BodyText>\n\t\t\t<TerminalBlock cursor>\n\t\t\t\t{[\n\t\t\t\t\t`plan: ${planName}`,\n\t\t\t\t\tpioneerTier ? `pioneer tier: ${pioneerTier}` : null,\n\t\t\t\t\tpioneerPoints !== undefined ? `pioneer points: ${pioneerPoints}` : null,\n\t\t\t\t]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join(\"\\n\")}\n\t\t\t</TerminalBlock>\n\t\t\t{planFeatures.length > 0 ? (\n\t\t\t\t<BodyText mt={24} mb={16}>\n\t\t\t\t\t{planFeatures.slice(0, 3).join(\" · \")}\n\t\t\t\t</BodyText>\n\t\t\t) : null}\n\t\t\t<PrimaryButton href={dashboardUrl}>Open Dashboard</PrimaryButton>\n\t\t\t<BodyText mt={8} mb={0}>\n\t\t\t\tNeed the setup guide?{\" \"}\n\t\t\t\t<a href={docsUrl} style={{ color: \"#4ADE80\", textDecoration: \"none\" }}>\n\t\t\t\t\tRead the docs →\n\t\t\t\t</a>\n\t\t\t</BodyText>\n\t\t</VrekoEmailShell>\n\t);\n}\n\nexport const WelcomeTemplate: EmailTemplate<WelcomeContext> = {\n\tid: \"product.welcome\",\n\tcategory: \"product\",\n\tsubject: (ctx) => `Welcome to Vreko, ${ctx.firstName}`,\n\tcomponent: Welcome,\n\tpreviewProps: {\n\t\tfirstName: \"Alex\",\n\t\tplanName: \"Developer\",\n\t\tplanFeatures: [\"Unlimited session history\", \"GitHub integration\", \"Team collaboration\"],\n\t\tdashboardUrl: \"https://vreko.dev/dashboard\",\n\t\tdocsUrl: \"https://docs.vreko.dev/getting-started\",\n\t\tpioneerTier: \"Explorer\",\n\t\tpioneerPoints: 250,\n\t},\n\tschema: WelcomeContextSchema,\n};\n\nexport default Welcome;\n","import { Heading, Link, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { AlertBox } from \"../../components/primitives/AlertBox\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { StatRow } from \"../../components/primitives/StatRow\";\nimport { type WeMissYouContext, WeMissYouContextSchema } from \"../../contexts\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function WeMissYou({\n\tfirstName,\n\tlastActiveDate,\n\tdaysInactive,\n\ttotalSessions,\n\ttotalTimelineRestores,\n\tpioneerTier,\n\tpioneerPoints,\n\tdashboardUrl,\n\textensionUrl,\n\tfeedbackUrl,\n}: WeMissYouContext) {\n\treturn (\n\t\t<VrekoLayout title=\"We Miss You!\" preheader={`It's been ${daysInactive} days since your last Vreko session`}>\n\t\t\t<TerminalHeader status=\"offline\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"24px\",\n\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t$ vreko status --last-seen\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tHey {firstName}, we noticed you haven't been around for a while. Your last session was on{\" \"}\n\t\t\t\t\t{lastActiveDate} - that's {daysInactive} days ago.\n\t\t\t\t</Text>\n\n\t\t\t\t<AlertBox type=\"info\">\n\t\t\t\t\t<span>Your Vreko account is still active and ready whenever you need it.</span>\n\t\t\t\t</AlertBox>\n\n\t\t\t\t{/* Stats Reminder */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0\",\n\t\t\t\t\t\tpadding: \"24px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tYour Vreko History\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<StatRow label=\"Total Sessions\" value={totalSessions.toString()} icon=\"📸\" />\n\t\t\t\t\t<StatRow label=\"Timeline Restores\" value={totalTimelineRestores.toString()} icon=\"⏪\" />\n\t\t\t\t\t{pioneerTier && <StatRow label=\"Pioneer Tier\" value={pioneerTier} icon=\"🚀\" />}\n\t\t\t\t\t{pioneerPoints !== undefined && (\n\t\t\t\t\t\t<StatRow label=\"Pioneer Points\" value={pioneerPoints.toString()} icon=\"⭐\" />\n\t\t\t\t\t)}\n\t\t\t\t</Section>\n\n\t\t\t\t{/* What's New */}\n\t\t\t\t<Section style={{ margin: \"32px 0\" }}>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tWhat's New Since You Left\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span style={{ color: emailTheme.colors.primary }}>✨</span> <strong>AutoDecisionEngine</strong>{\" \"}\n\t\t\t\t\t\t- Zero-config protection that learns your workflow\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span style={{ color: emailTheme.colors.primary }}>✨</span>{\" \"}\n\t\t\t\t\t\t<strong>Session Time-Travel</strong> - Atomic multi-file rollback for AI changes\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span style={{ color: emailTheme.colors.primary }}>✨</span> <strong>Faster Restores</strong> -\n\t\t\t\t\t\tOne-click recovery, even faster than before\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span style={{ color: emailTheme.colors.primary }}>✨</span>{\" \"}\n\t\t\t\t\t\t<strong>Claude Code Support</strong> - Full support for Anthropic's new CLI\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t{/* CTA */}\n\t\t\t\t<Section style={{ textAlign: \"center\", margin: \"32px 0\" }}>\n\t\t\t\t\t<PrimaryButton href={dashboardUrl}>Return to Vreko</PrimaryButton>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"16px 0 0 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tNeed to{\" \"}\n\t\t\t\t\t\t<Link href={extensionUrl} style={{ color: emailTheme.colors.primary, textDecoration: \"none\" }}>\n\t\t\t\t\t\t\treinstall the extension\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t?\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t{/* Quick Reminder */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0\",\n\t\t\t\t\t\tpadding: \"20px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 12px 0\",\n\t\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tQuick Reminder: How Vreko Helps\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tVreko automatically tracks sessions when AI tools edit your code. When Cursor, Copilot, or\n\t\t\t\t\t\tClaude Code makes changes you don't want, one click brings you back. No more manual git stashing\n\t\t\t\t\t\tor undo spam.\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t{/* Feedback Request */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0 0 0\",\n\t\t\t\t\t\tpadding: \"20px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.backgroundSecondary,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.primary}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<strong style={{ color: emailTheme.colors.primary }}>💬 We'd love your feedback</strong>\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\t<span style={{ color: emailTheme.colors.textSecondary }}>\n\t\t\t\t\t\t\tIs there something we could improve? A feature you wish we had? We're always listening.\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"12px 0 0 0\",\n\t\t\t\t\t\t\tfontSize: \"13px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Link href={feedbackUrl} style={{ color: emailTheme.colors.primary, textDecoration: \"none\" }}>\n\t\t\t\t\t\t\tShare your feedback →\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const WeMissYouTemplate: EmailTemplate<WeMissYouContext> = {\n\tid: \"product.we-miss-you\",\n\tcategory: \"product\",\n\tsubject: (ctx) => `We miss you, ${ctx.firstName}! Your code protection is waiting`,\n\tcomponent: WeMissYou,\n\tpreviewProps: {\n\t\tfirstName: \"Alex\",\n\t\tlastActiveDate: \"January 5, 2026\",\n\t\tdaysInactive: 14,\n\t\ttotalSessions: 47,\n\t\ttotalTimelineRestores: 5,\n\t\tpioneerTier: \"Explorer\",\n\t\tpioneerPoints: 175,\n\t\tdashboardUrl: \"https://vreko.dev/dashboard\",\n\t\textensionUrl: \"https://marketplace.visualstudio.com/items?itemName=vreko.vreko\",\n\t\tfeedbackUrl: \"https://vreko.dev/feedback\",\n\t},\n\tschema: WeMissYouContextSchema,\n};\n","import { Heading, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport interface IssueResolvedContext {\n\tissueId: string;\n\toriginalSubject: string;\n\tresolutionDescription?: string;\n\tchangelogUrl?: string;\n}\n\nexport function IssueResolved({ issueId, originalSubject, resolutionDescription, changelogUrl }: IssueResolvedContext) {\n\treturn (\n\t\t<VrekoLayout title={`Re: ${originalSubject}`} preheader=\"Your issue has been resolved\">\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"24px\",\n\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\tcolor: emailTheme.colors.success,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tIssue resolved\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tThe issue you reported ( <strong style={{ color: emailTheme.colors.text }}>{issueId}</strong>) has\n\t\t\t\t\tbeen resolved.\n\t\t\t\t</Text>\n\n\t\t\t\t{resolutionDescription && (\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"16px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t\tpadding: \"16px\",\n\t\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{resolutionDescription}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tThanks for the report - this is exactly the kind of feedback that makes Vreko better for everyone.\n\t\t\t\t</Text>\n\n\t\t\t\t{changelogUrl && <PrimaryButton href={changelogUrl}>View Release Notes</PrimaryButton>}\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const IssueResolvedTemplate: EmailTemplate<IssueResolvedContext> = {\n\tid: \"triage.issue-resolved\",\n\tcategory: \"triage\",\n\tsubject: (ctx) => `Re: ${ctx.originalSubject}`,\n\tcomponent: IssueResolved,\n\tpreviewProps: {\n\t\tissueId: \"VRK-123\",\n\t\toriginalSubject: \"Help with MCP configuration\",\n\t\tresolutionDescription: \"Fixed the MCP handshake timeout issue in the latest release.\",\n\t\tchangelogUrl: \"https://vreko.dev/changelog\",\n\t},\n};\n","import { Heading, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { CodeBlock } from \"../../components/primitives/CodeBlock\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport interface MCPTroubleshootContext {\n\tuserName?: string;\n}\n\nexport function MCPTroubleshoot({ userName }: MCPTroubleshootContext) {\n\tconst greeting = userName ? `Hi ${userName}` : \"Hi there\";\n\n\treturn (\n\t\t<VrekoLayout title=\"Your MCP connection didn't complete\" preheader=\"Quick troubleshooting steps for MCP setup\">\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"20px\",\n\t\t\t\t\t\tfontWeight: \"500\",\n\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{greeting},\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tLooks like your MCP connection didn't complete. Here are the most common fixes:\n\t\t\t\t</Text>\n\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0\",\n\t\t\t\t\t\tpadding: \"20px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 12px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t1. Check MCP Server Configuration\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 20px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tEnsure your IDE has MCP support enabled in settings.\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 12px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t2. Verify API Key\n\t\t\t\t\t</Text>\n\t\t\t\t\t<CodeBlock code=\"$ vreko auth verify\" />\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"12px 0 20px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tRun this to check your API key is valid.\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 12px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t3. Restart Your IDE\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tSometimes a simple restart refreshes the connection.\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tNeed more help? Reply to this email and we'll get you sorted.\n\t\t\t\t</Text>\n\n\t\t\t\t<PrimaryButton href=\"https://docs.vreko.dev/mcp\">MCP Setup Guide</PrimaryButton>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const MCPTroubleshootTemplate: EmailTemplate<MCPTroubleshootContext> = {\n\tid: \"triage.mcp-troubleshoot\",\n\tcategory: \"triage\",\n\tsubject: () => \"Your MCP connection didn't complete\",\n\tcomponent: MCPTroubleshoot,\n\tpreviewProps: {\n\t\tuserName: \"Alex\",\n\t},\n};\n","import { Heading, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport interface PaymentFailedContext {\n\tamount: number;\n\tcurrency: string;\n\tretryDate: string;\n}\n\nexport function PaymentFailed({ amount, currency, retryDate }: PaymentFailedContext) {\n\tconst formattedAmount = new Intl.NumberFormat(\"en-US\", {\n\t\tstyle: \"currency\",\n\t\tcurrency: currency.toUpperCase(),\n\t}).format(amount);\n\n\tconst formattedDate = new Date(retryDate).toLocaleDateString(\"en-US\", {\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t});\n\n\treturn (\n\t\t<VrekoLayout\n\t\t\ttitle=\"Your Vreko payment didn't go through\"\n\t\t\tpreheader=\"Update your payment method to keep Pro features active\"\n\t\t>\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"20px\",\n\t\t\t\t\t\tfontWeight: \"500\",\n\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tYour Vreko payment didn't go through\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tYour card on file couldn't be charged ({formattedAmount}). Update it to keep your Pro features\n\t\t\t\t\tactive.\n\t\t\t\t</Text>\n\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0\",\n\t\t\t\t\t\tpadding: \"20px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tNext retry attempt\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0\",\n\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{formattedDate}\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tNo charges will be attempted until you update your payment method.\n\t\t\t\t</Text>\n\n\t\t\t\t<PrimaryButton href=\"https://console.vreko.dev/billing\">Update Payment Method</PrimaryButton>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const PaymentFailedTemplate: EmailTemplate<PaymentFailedContext> = {\n\tid: \"triage.payment-failed\",\n\tcategory: \"triage\",\n\tsubject: () => \"Your Vreko payment didn't go through\",\n\tcomponent: PaymentFailed,\n\tpreviewProps: {\n\t\tamount: 29.0,\n\t\tcurrency: \"USD\",\n\t\tretryDate: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000).toISOString(),\n\t},\n};\n","import { Heading, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport interface ReEngagementContext {\n\tdaysInactive: number;\n\tsessionCount: number;\n\tuserName?: string;\n}\n\nexport function ReEngagement({ daysInactive, sessionCount, userName }: ReEngagementContext) {\n\tconst greeting = userName ? `Hi ${userName}` : \"Hi there\";\n\n\treturn (\n\t\t<VrekoLayout\n\t\t\ttitle=\"Your codebase intelligence is paused\"\n\t\t\tpreheader=\"Resume sessions to keep your intelligence up to date\"\n\t\t>\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"22px\",\n\t\t\t\t\t\tfontWeight: \"500\",\n\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tYour codebase intelligence is paused\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"26px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{greeting},\n\t\t\t\t</Text>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"26px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tVreko learns from every session. It's been{\" \"}\n\t\t\t\t\t<strong style={{ color: emailTheme.colors.warning }}>{daysInactive} days</strong> since your last\n\t\t\t\t\tone - your intelligence is falling behind your codebase.\n\t\t\t\t</Text>\n\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0\",\n\t\t\t\t\t\tpadding: \"24px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 8px 0\",\n\t\t\t\t\t\t\tfontSize: \"48px\",\n\t\t\t\t\t\t\tfontWeight: \"700\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{sessionCount}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tsessions with Vreko\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tYour patterns and insights are still there, waiting for the next session.\n\t\t\t\t</Text>\n\n\t\t\t\t<PrimaryButton href=\"https://vreko.dev/dashboard\">Resume Sessions</PrimaryButton>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const ReEngagementTemplate: EmailTemplate<ReEngagementContext> = {\n\tid: \"triage.re-engagement\",\n\tcategory: \"triage\",\n\tsubject: () => \"Your codebase intelligence is paused\",\n\tcomponent: ReEngagement,\n\tpreviewProps: {\n\t\tdaysInactive: 7,\n\t\tsessionCount: 23,\n\t\tuserName: \"Alex\",\n\t},\n};\n","import { Heading, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport interface SupportAutoReplyContext {\n\tissueId: string;\n\toriginalSubject: string;\n}\n\nexport function SupportAutoReply({ issueId, originalSubject }: SupportAutoReplyContext) {\n\treturn (\n\t\t<VrekoLayout\n\t\t\ttitle={`Re: ${originalSubject}`}\n\t\t\tpreheader=\"Thanks for reaching out - we've received your support request\"\n\t\t>\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"24px\",\n\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tThanks for reaching out\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tWe've logged this as <strong style={{ color: emailTheme.colors.text }}>{issueId}</strong> and the\n\t\t\t\t\tteam will follow up within 4 hours.\n\t\t\t\t</Text>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"16px 0\",\n\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tIn the meantime, check{\" \"}\n\t\t\t\t\t<a\n\t\t\t\t\t\thref=\"https://docs.vreko.dev\"\n\t\t\t\t\t\tstyle={{ color: emailTheme.colors.primary, textDecoration: \"none\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\tdocs.vreko.dev\n\t\t\t\t\t</a>{\" \"}\n\t\t\t\t\tfor common solutions.\n\t\t\t\t</Text>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const SupportAutoReplyTemplate: EmailTemplate<SupportAutoReplyContext> = {\n\tid: \"triage.support-auto-reply\",\n\tcategory: \"triage\",\n\tsubject: (ctx) => `Re: ${ctx.originalSubject}`,\n\tcomponent: SupportAutoReply,\n\tpreviewProps: {\n\t\tissueId: \"VRK-123\",\n\t\toriginalSubject: \"Help with MCP configuration\",\n\t},\n};\n","import { Heading, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport interface TrialEndingContext {\n\tdaysRemaining: number;\n\tfeaturesUsed: string[];\n}\n\nexport function TrialEnding({ daysRemaining, featuresUsed }: TrialEndingContext) {\n\treturn (\n\t\t<VrekoLayout\n\t\t\ttitle={`Your Vreko trial ends in ${daysRemaining} days`}\n\t\t\tpreheader=\"What you've used and what you'll keep on Pro\"\n\t\t>\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"20px\",\n\t\t\t\t\t\tfontWeight: \"500\",\n\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tYour Vreko trial ends in {daysRemaining} days\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tHere's what you've used during your trial:\n\t\t\t\t</Text>\n\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0\",\n\t\t\t\t\t\tpadding: \"20px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{featuresUsed.map((feature, index) => (\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span style={{ color: emailTheme.colors.success }}>✓</span> {feature}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t))}\n\t\t\t\t</Section>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<strong style={{ color: emailTheme.colors.text }}>On Free:</strong> Keep your patterns and continue\n\t\t\t\t\twith basic features.\n\t\t\t\t\t<br />\n\t\t\t\t\t<strong style={{ color: emailTheme.colors.primary }}>On Pro:</strong> Keep everything plus unlimited\n\t\t\t\t\tsessions, advanced insights, and team collaboration.\n\t\t\t\t</Text>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\tfontStyle: \"italic\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tNo hard sell - just facts. Choose what works for you.\n\t\t\t\t</Text>\n\n\t\t\t\t<PrimaryButton href=\"https://vreko.dev/pricing\">View Plans</PrimaryButton>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const TrialEndingTemplate: EmailTemplate<TrialEndingContext> = {\n\tid: \"triage.trial-ending\",\n\tcategory: \"triage\",\n\tsubject: (ctx) => `Your Vreko trial ends in ${ctx.daysRemaining} days`,\n\tcomponent: TrialEnding,\n\tpreviewProps: {\n\t\tdaysRemaining: 3,\n\t\tfeaturesUsed: [\n\t\t\t\"12 sessions completed\",\n\t\t\t\"47 patterns captured\",\n\t\t\t\"3 GitHub repositories connected\",\n\t\t\t\"Team workspace created\",\n\t\t],\n\t},\n};\n","import { ActivationNudge as ActivationNudgeComponent } from \"@vreko/email\";\nimport { z } from \"zod\";\nexport const ActivationNudgePropsSchema = z.object({});\nexport const activationNudgeTemplate = {\n id: \"pioneer.activation-nudge\",\n category: \"product\",\n subject: () => \"Your daemon is installed. Run vreko start.\",\n component: ActivationNudgeComponent,\n previewProps: {},\n schema: ActivationNudgePropsSchema,\n};\nexport default ActivationNudgeComponent;\n","import { CliNudge as CliNudgeComponent } from \"@vreko/email\";\nimport { z } from \"zod\";\nexport const CliNudgePropsSchema = z.object({});\nexport const cliNudgeTemplate = {\n id: \"pioneer.cli-nudge\",\n category: \"product\",\n subject: () => \"Install the Vreko CLI to start your first session\",\n component: CliNudgeComponent,\n previewProps: {},\n schema: CliNudgePropsSchema,\n};\nexport default CliNudgeComponent;\n","import { ExtensionNudge as ExtensionNudgeComponent } from \"@vreko/email\";\nimport { z } from \"zod\";\nexport const ExtensionNudgePropsSchema = z.object({});\nexport const extensionNudgeTemplate = {\n id: \"pioneer.extension-nudge\",\n category: \"product\",\n subject: () => \"Add the VS Code extension to complete your setup\",\n component: ExtensionNudgeComponent,\n previewProps: {},\n schema: ExtensionNudgePropsSchema,\n};\nexport default ExtensionNudgeComponent;\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * E04: First Scan Complete Email\n *\n * Sent after the first workspace scan completes.\n * Personalized with actual scan results (recovery risk score, findings).\n * Voice: show intelligence, do not announce it.\n */\nimport { Heading, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const FirstScanCompletePropsSchema = z.object({\n firstName: z.string(),\n recoveryRisk: z.number(),\n changeVolatility: z.number(),\n workflowFragility: z.number(),\n topFinding: z.string(),\n topAction: z.string(),\n hotspotCount: z.number(),\n filesWatched: z.number(),\n dashboardUrl: z.string().url(),\n});\nfunction riskLabel(score) {\n if (score <= 30) {\n return \"low\";\n }\n if (score <= 60) {\n return \"moderate\";\n }\n if (score <= 80) {\n return \"elevated\";\n }\n return \"high\";\n}\nexport function FirstScanComplete({ firstName, recoveryRisk, changeVolatility, workflowFragility, topFinding, topAction, hotspotCount, filesWatched, dashboardUrl, }) {\n return (_jsxs(Wrapper, { preview: `recovery risk: ${recoveryRisk} (${riskLabel(recoveryRisk)})`, children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 8px\" }, children: \"your workspace scan is complete\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 20px\" }, children: [firstName, \", here is what we found from your git metadata. No code content was read.\"] }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n margin: \"0 0 20px\",\n fontFamily: \"'JetBrains Mono', monospace\",\n }, children: [_jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: \"0 0 8px\" }, children: [\"RECOVERY RISK \\u00A0\\u00A0\\u00A0\\u00A0\\u00A0\", recoveryRisk, \" \", riskLabel(recoveryRisk)] }), _jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: \"0 0 8px\" }, children: [\"CHANGE VOLATILITY \\u00A0\\u00A0\", changeVolatility, \" \", riskLabel(changeVolatility)] }), _jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: \"0\" }, children: [\"WORKFLOW FRAGILITY \\u00A0\", workflowFragility, \" \", riskLabel(workflowFragility)] })] }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"16px\",\n margin: \"0 0 20px\",\n }, children: [_jsx(Text, { style: {\n color: brand.textSecondary,\n fontSize: \"12px\",\n margin: \"0 0 4px\",\n textTransform: \"uppercase\",\n }, children: \"top finding\" }), _jsx(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: \"0 0 8px\" }, children: topFinding }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"13px\", margin: \"0\" }, children: topAction })] }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"13px\", lineHeight: \"1.6\" }, children: [hotspotCount, \" fragile hotspot\", hotspotCount !== 1 ? \"s\" : \"\", \" identified. Watching \", filesWatched, \" files.\"] }), _jsx(PrimaryButton, { href: dashboardUrl, children: \"view full profile\" })] }));\n}\nexport const firstScanCompleteTemplate = {\n id: \"product.first-scan-complete\",\n category: \"product\",\n subject: () => \"your workspace scan is complete\",\n component: FirstScanComplete,\n previewProps: {\n firstName: \"Alex\",\n recoveryRisk: 45,\n changeVolatility: 60,\n workflowFragility: 30,\n topFinding: \"src/auth/session.ts: 23 reverts in 90 days\",\n topAction: \"Add snapshot before auth changes\",\n hotspotCount: 3,\n filesWatched: 247,\n dashboardUrl: \"https://vreko.dev/dashboard\",\n },\n schema: FirstScanCompletePropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Heading, Hr, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const InviteDeliveryPropsSchema = z.object({\n email: z.string().email(),\n activationUrl: z.string().url(),\n cliSetupCommand: z.string().default(\"vreko auth set-key YOUR_KEY\"),\n vscodeMarketplaceUrl: z.string().url().default(\"https://marketplace.visualstudio.com/items?itemName=Vreko.vreko\"),\n});\nexport function InviteDelivery({ email, activationUrl, cliSetupCommand, vscodeMarketplaceUrl }) {\n return (_jsxs(Wrapper, { preview: \"Your Vreko invite is ready - activate your account to get started\", children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"28px\", fontWeight: 700, margin: \"0 0 8px\" }, children: \"You're in \\uD83C\\uDF89\" }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: \"Click below to activate your Vreko account and get your API key.\" }), _jsx(PrimaryButton, { href: activationUrl, children: \"Activate Your Account\" }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n border: `1px solid ${brand.border}`,\n marginTop: \"24px\",\n marginBottom: \"24px\",\n }, children: [_jsx(Text, { style: {\n color: brand.textSecondary,\n fontSize: \"12px\",\n fontWeight: 600,\n margin: \"0 0 12px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n }, children: \"Once you activate, you'll get:\" }), _jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: \"0 0 8px\" }, children: [_jsx(\"span\", { style: { color: brand.primary, marginRight: \"8px\" }, children: \"\\u2713\" }), \"Your API key for the CLI and VS Code extension\"] }), _jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: 0 }, children: [_jsx(\"span\", { style: { color: brand.primary, marginRight: \"8px\" }, children: \"\\u2713\" }), \"Full access to Vreko's intelligence platform\"] })] }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n border: `1px solid ${brand.border}`,\n marginBottom: \"24px\",\n }, children: [_jsx(Text, { style: {\n color: brand.textSecondary,\n fontSize: \"12px\",\n fontWeight: 600,\n margin: \"0 0 12px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n }, children: \"Quick setup\" }), _jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"13px\", margin: \"0 0 8px\" }, children: [_jsx(\"strong\", { style: { color: brand.textSecondary }, children: \"CLI:\" }), \" \", _jsx(\"code\", { style: {\n backgroundColor: brand.surface,\n padding: \"2px 6px\",\n borderRadius: \"4px\",\n fontFamily: \"monospace\",\n fontSize: \"12px\",\n }, children: cliSetupCommand })] }), _jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"13px\", margin: 0 }, children: [_jsx(\"strong\", { style: { color: brand.textSecondary }, children: \"VS Code:\" }), \" \", _jsx(\"a\", { href: vscodeMarketplaceUrl, style: { color: brand.primary, textDecoration: \"none\" }, children: \"Install from Marketplace\" })] })] }), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsxs(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: [\"Questions? Just reply to this email.\", _jsx(\"br\", {}), \" - Q\"] })] }));\n}\nInviteDelivery.PreviewProps = {\n email: \"dev@example.com\",\n activationUrl: \"https://console.vreko.dev/activate/ABC12XYZ\",\n cliSetupCommand: \"vreko auth set-key YOUR_KEY\",\n vscodeMarketplaceUrl: \"https://marketplace.visualstudio.com/items?itemName=Vreko.vreko\",\n};\nexport const inviteDeliveryTemplate = {\n id: \"product.invite-delivery\",\n category: \"product\",\n subject: () => \"Your Vreko invite is ready\",\n component: InviteDelivery,\n previewProps: InviteDelivery.PreviewProps,\n schema: InviteDeliveryPropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Badge, BodyText, Headline, TerminalBlock, VrekoEmailShell } from \"@vreko/email/components\";\nimport { z } from \"zod\";\nexport const PioneerConfirmationPropsSchema = z.object({\n email: z.string().email(),\n recipientName: z.string().optional(),\n cohortSize: z.number().int().positive().optional(),\n daemonStatus: z.string().optional(),\n logoUrl: z.string().url().optional(),\n});\nfunction PioneerConfirmation({ email, recipientName, cohortSize = 50, daemonStatus = \"intelligence CALIBRATING for your codebase\", logoUrl, }) {\n const greeting = recipientName ? `${recipientName}, we received your request.` : \"We received your request.\";\n const previewText = `We received your Pioneer cohort request${email ? ` for ${email}` : \"\"}`;\n return (_jsxs(VrekoEmailShell, { previewText: previewText, logoUrl: logoUrl, children: [_jsx(Badge, { label: \"Pioneer Cohort\" }), _jsx(Headline, { children: greeting }), _jsxs(BodyText, { children: [\"We're selecting \", cohortSize, \" engineering teams for early access. You'll hear from us directly when we're ready to onboard your team.\"] }), _jsx(BodyText, { mb: 24, children: \"No marketing list. No drip sequence. The next email you receive from this address will either be an onboarding invite or a status update from the daemon.\" }), _jsx(TerminalBlock, { cursor: true, children: daemonStatus })] }));\n}\nPioneerConfirmation.PreviewProps = {\n email: \"alex@acme.dev\",\n recipientName: \"Alex\",\n cohortSize: 50,\n daemonStatus: \"intelligence CALIBRATING for your codebase\",\n};\nexport const pioneerConfirmationTemplate = {\n id: \"pioneer.confirmation\",\n category: \"product\",\n subject: () => \"We received your Pioneer request\",\n component: PioneerConfirmation,\n previewProps: PioneerConfirmation.PreviewProps,\n schema: PioneerConfirmationPropsSchema,\n};\nexport default PioneerConfirmation;\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Heading, Hr, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const PioneerMilestonePropsSchema = z.object({\n firstName: z.string(),\n oldTier: z.string(),\n newTier: z.string(),\n pointsEarned: z.number(),\n totalPoints: z.number(),\n nextTierName: z.string().optional(),\n pointsToNextTier: z.number().optional(),\n unlockedPerks: z.array(z.object({\n icon: z.string(),\n name: z.string(),\n description: z.string(),\n })),\n dashboardUrl: z.string().url(),\n});\nfunction PioneerMilestone({ firstName, oldTier, newTier, pointsEarned, totalPoints, nextTierName, pointsToNextTier, unlockedPerks, dashboardUrl, }) {\n const progressPct = nextTierName && pointsToNextTier\n ? Math.min(100, Math.round((totalPoints / (totalPoints + pointsToNextTier)) * 100))\n : 100;\n return (_jsxs(Wrapper, { preview: \"New perks unlocked - see what you've earned\", children: [_jsx(Heading, { style: { color: brand.primary, fontSize: \"28px\", fontWeight: 700, margin: \"0 0 8px\" }, children: \"\\uD83E\\uDD8E Pioneer tier unlocked!\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: [firstName, \", you've leveled up from \", _jsx(\"strong\", { style: { color: brand.textPrimary }, children: oldTier }), \" to\", \" \", _jsx(\"strong\", { style: { color: brand.primary }, children: newTier }), \" in the Vreko Pioneer Program. You earned\", \" \", pointsEarned, \" points this session.\"] }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n border: `1px solid ${brand.primary}`,\n marginBottom: \"24px\",\n textAlign: \"center\",\n }, children: [_jsx(Text, { style: { color: brand.primary, fontSize: \"32px\", margin: \"0 0 4px\" }, children: \"\\uD83E\\uDD8E\" }), _jsxs(Text, { style: { color: brand.primary, fontSize: \"20px\", fontWeight: 700, margin: \"0 0 4px\" }, children: [newTier, \" Pioneer\"] }), _jsxs(Text, { style: { color: brand.textMuted, fontSize: \"13px\", margin: 0 }, children: [totalPoints.toLocaleString(), \" total points\"] })] }), unlockedPerks.length > 0 && (_jsxs(_Fragment, { children: [_jsx(Text, { style: {\n color: brand.textSecondary,\n fontSize: \"13px\",\n fontWeight: 600,\n margin: \"0 0 12px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n }, children: \"Perks unlocked\" }), unlockedPerks.map((perk, i) => (_jsx(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"6px\",\n padding: \"14px 16px\",\n border: `1px solid ${brand.border}`,\n marginBottom: \"8px\",\n }, children: _jsx(\"table\", { style: { width: \"100%\", borderCollapse: \"collapse\" }, children: _jsx(\"tbody\", { children: _jsxs(\"tr\", { children: [_jsx(\"td\", { style: {\n width: \"36px\",\n verticalAlign: \"top\",\n fontSize: \"20px\",\n paddingTop: \"2px\",\n }, children: perk.icon }), _jsxs(\"td\", { children: [_jsx(Text, { style: {\n color: brand.textPrimary,\n fontSize: \"14px\",\n fontWeight: 600,\n margin: \"0 0 2px\",\n }, children: perk.name }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: perk.description })] })] }) }) }) }, i)))] })), nextTierName && pointsToNextTier && (_jsxs(Section, { style: { marginTop: \"24px\", marginBottom: \"24px\" }, children: [_jsx(\"table\", { style: { width: \"100%\", borderCollapse: \"collapse\", marginBottom: \"6px\" }, children: _jsx(\"tbody\", { children: _jsxs(\"tr\", { children: [_jsxs(\"td\", { style: { color: brand.textMuted, fontSize: \"12px\" }, children: [\"Progress to \", nextTierName] }), _jsxs(\"td\", { style: { color: brand.textMuted, fontSize: \"12px\", textAlign: \"right\" }, children: [pointsToNextTier, \" pts to go\"] })] }) }) }), _jsx(\"table\", { style: { width: \"100%\", borderCollapse: \"collapse\" }, children: _jsx(\"tbody\", { children: _jsx(\"tr\", { children: _jsx(\"td\", { children: _jsx(\"div\", { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"4px\",\n height: \"8px\",\n overflow: \"hidden\",\n }, children: _jsx(\"div\", { style: {\n backgroundColor: brand.primary,\n height: \"8px\",\n width: `${progressPct}%`,\n borderRadius: \"4px\",\n } }) }) }) }) }) })] })), _jsx(PrimaryButton, { href: dashboardUrl, children: \"View Pioneer Dashboard\" }), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: \"Keep shipping to earn more points and unlock the next tier.\" })] }));\n}\nPioneerMilestone.PreviewProps = {\n firstName: \"Alex\",\n oldTier: \"Silver\",\n newTier: \"Gold\",\n pointsEarned: 150,\n totalPoints: 850,\n nextTierName: \"Platinum\",\n pointsToNextTier: 150,\n unlockedPerks: [\n { icon: \"⚡\", name: \"Priority Intelligence\", description: \"Faster AI briefings for every session\" },\n { icon: \"🛡️\", name: \"Extended Snapshot History\", description: \"90-day snapshot retention (up from 30)\" },\n { icon: \"🔑\", name: \"Beta Access\", description: \"Early access to all new features\" },\n ],\n dashboardUrl: \"https://vreko.dev/dashboard/pioneer\",\n};\nexport const productPioneerMilestoneTemplate = {\n id: \"product.pioneer-milestone\",\n category: \"product\",\n subject: (props) => `🦎 You've reached ${props.newTier} in the Vreko Pioneer Program`,\n component: PioneerMilestone,\n previewProps: PioneerMilestone.PreviewProps,\n schema: PioneerMilestonePropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Section, Text } from \"@react-email/components\";\nimport { Badge, BodyText, Headline, PrimaryButton, VrekoEmailShell } from \"@vreko/email/components\";\nimport { z } from \"zod\";\nexport const PioneerUpdatePropsSchema = z.object({\n headline: z.string().optional(),\n items: z.array(z.object({\n tag: z.string(),\n title: z.string(),\n description: z.string(),\n })),\n ctaLabel: z.string().optional(),\n ctaHref: z.string().url().optional(),\n logoUrl: z.string().url().optional(),\n});\nfunction PioneerUpdate({ headline, items, ctaLabel, ctaHref, logoUrl }) {\n return (_jsxs(VrekoEmailShell, { previewText: \"Pioneer cohort update - what we shipped this week.\", logoUrl: logoUrl, children: [_jsx(Badge, { label: \"Pioneer Update\" }), _jsx(Headline, { children: headline ?? \"Here's what changed since you requested access.\" }), _jsx(BodyText, { mb: 8, children: \"A short report from the daemon. We ship in public; this is what landed.\" }), _jsx(Section, { style: { marginTop: \"16px\", marginBottom: \"16px\" }, children: items.map((item, index) => (_jsxs(Section, { style: {\n padding: \"20px 0\",\n borderBottom: index === items.length - 1 ? \"none\" : \"1px solid #27272A\",\n }, children: [_jsx(Text, { style: {\n margin: \"0 0 6px 0\",\n fontFamily: \"JetBrains Mono, monospace\",\n fontSize: \"11px\",\n color: \"#4ADE80\",\n letterSpacing: \"0.1em\",\n textTransform: \"uppercase\",\n fontWeight: 500,\n }, children: item.tag }), _jsx(Text, { style: {\n margin: \"0 0 6px 0\",\n fontFamily: \"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif\",\n fontSize: \"14px\",\n fontWeight: 600,\n color: \"#FFFFFF\",\n lineHeight: 1.4,\n }, children: item.title }), _jsx(Text, { style: {\n margin: 0,\n fontFamily: \"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif\",\n fontSize: \"13px\",\n color: \"#9CA3AF\",\n lineHeight: 1.6,\n }, children: item.description })] }, `${item.tag}-${item.title}-${index}`))) }), _jsx(PrimaryButton, { href: ctaHref ?? \"https://workspacejson.dev/changelog\", children: ctaLabel ?? \"Read the full changelog\" })] }));\n}\nPioneerUpdate.PreviewProps = {\n headline: \"Here's what changed since you requested access.\",\n items: [\n {\n tag: \"NEW\",\n title: \"Canonical Pioneer email templates are now wired\",\n description: \"The cohort now gets the same dark shell and gecko mark across every lifecycle email.\",\n },\n {\n tag: \"FIXED\",\n title: \"Fragile file alerts now hide the file path on Free\",\n description: \"Pro unlocks the full intelligence card while the base tier stays useful and sparse.\",\n },\n ],\n ctaLabel: \"Read the full changelog\",\n ctaHref: \"https://workspacejson.dev/changelog\",\n};\nexport const pioneerUpdateTemplate = {\n id: \"pioneer.update\",\n category: \"product\",\n subject: (ctx) => ctx.headline ?? \"Pioneer update\",\n component: PioneerUpdate,\n previewProps: PioneerUpdate.PreviewProps,\n schema: PioneerUpdatePropsSchema,\n};\nexport default PioneerUpdate;\n","import { jsxs as _jsxs, jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * E02: Queue Update Email\n *\n * Sent when a pioneer completes an accelerator action.\n * Shows new queue position and available actions.\n * Voice: confident peer, no hype.\n */\nimport { Heading, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const QueueUpdatePropsSchema = z.object({\n firstName: z.string(),\n previousPosition: z.number(),\n currentPosition: z.number(),\n actionCompleted: z.string(),\n pointsEarned: z.number(),\n totalPoints: z.number(),\n pioneerUrl: z.string().url(),\n});\nexport function QueueUpdate({ firstName, previousPosition, currentPosition, actionCompleted, pointsEarned, totalPoints, pioneerUrl, }) {\n const positionsGained = previousPosition - currentPosition;\n return (_jsxs(Wrapper, { preview: `you moved up ${positionsGained} spots`, children: [_jsxs(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 8px\" }, children: [\"you moved up \", positionsGained, \" \", positionsGained === 1 ? \"spot\" : \"spots\"] }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n margin: \"20px 0\",\n textAlign: \"center\",\n }, children: [_jsxs(Text, { style: { color: brand.primary, fontSize: \"36px\", fontWeight: 700, margin: \"0\" }, children: [\"#\", currentPosition] }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"13px\", margin: \"4px 0 0\" }, children: \"your position in line\" })] }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\" }, children: [actionCompleted, \" earned you +\", pointsEarned, \" points (\", totalPoints, \" total).\"] }), _jsx(PrimaryButton, { href: pioneerUrl, children: \"see what else moves the line\" })] }));\n}\nexport const queueUpdateTemplate = {\n id: \"product.queue-update\",\n category: \"product\",\n subject: () => \"you moved up in line\",\n component: QueueUpdate,\n previewProps: {\n firstName: \"Alex\",\n previousPosition: 150,\n currentPosition: 100,\n actionCompleted: \"GitHub star\",\n pointsEarned: 10,\n totalPoints: 60,\n pioneerUrl: \"https://vreko.dev/pioneer\",\n },\n schema: QueueUpdatePropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * E07: Re-engagement Email\n *\n * Sent when a user enters CHURNING state (no activity for 7+ days).\n * Hooks them back with specific changes detected in their codebase.\n * Voice: factual, data-driven - never guilt or emotional manipulation.\n */\nimport { Heading, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const ReEngagementPropsSchema = z.object({\n firstName: z.string(),\n daysSinceLastActive: z.number(),\n recentCommitCount: z.number(),\n newHotspotCount: z.number(),\n topChangedFile: z.string().optional(),\n dashboardUrl: z.string().url(),\n});\nexport function ReEngagement({ firstName, daysSinceLastActive, recentCommitCount, newHotspotCount, topChangedFile, dashboardUrl, }) {\n return (_jsxs(Wrapper, { preview: `${recentCommitCount} commits since your last session`, children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 8px\" }, children: \"your codebase kept moving\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 20px\" }, children: [firstName, \", it has been \", daysSinceLastActive, \" days since your last Vreko session. Your repository had\", \" \", recentCommitCount, \" commits in that time.\"] }), (newHotspotCount > 0 || topChangedFile) && (_jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"16px\",\n margin: \"0 0 20px\",\n }, children: [newHotspotCount > 0 && (_jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: \"0 0 8px\" }, children: [newHotspotCount, \" new fragile hotspot\", newHotspotCount !== 1 ? \"s\" : \"\", \" detected.\"] })), topChangedFile && (_jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"13px\", margin: \"0\" }, children: [\"Most changed: \", topChangedFile] }))] })), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: \"0 0 16px\" }, children: \"Snapshots are paused while Vreko is not running. Open your editor to resume protection.\" }), _jsx(PrimaryButton, { href: dashboardUrl, children: \"view changes\" })] }));\n}\nexport const reEngagementTemplate = {\n id: \"product.re-engagement\",\n category: \"product\",\n subject: () => \"your codebase kept moving\",\n component: ReEngagement,\n previewProps: {\n firstName: \"Alex\",\n daysSinceLastActive: 8,\n recentCommitCount: 23,\n newHotspotCount: 2,\n topChangedFile: \"src/auth/session.ts\",\n dashboardUrl: \"https://vreko.dev/dashboard\",\n },\n schema: ReEngagementPropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * E08: Referral Converted Email\n *\n * Sent when an invited friend registers via the pioneer's referral link.\n * Celebrates the viral action and shows the points earned.\n * Voice: factual confirmation, no excessive excitement.\n */\nimport { Heading, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const ReferralConvertedPropsSchema = z.object({\n firstName: z.string(),\n referredName: z.string().optional(),\n pointsEarned: z.number(),\n totalPoints: z.number(),\n newQueuePosition: z.number(),\n totalReferrals: z.number(),\n pioneerUrl: z.string().url(),\n});\nexport function ReferralConverted({ firstName, referredName, pointsEarned, totalPoints, newQueuePosition, totalReferrals, pioneerUrl, }) {\n return (_jsxs(Wrapper, { preview: `referral converted - +${pointsEarned} points`, children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 8px\" }, children: \"referral converted\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 20px\" }, children: [firstName, \", \", referredName ? `${referredName} signed` : \"someone signed\", \" up with your link. +\", pointsEarned, \" points earned.\"] }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n margin: \"0 0 20px\",\n textAlign: \"center\",\n }, children: [_jsxs(Text, { style: { color: brand.primary, fontSize: \"32px\", fontWeight: 700, margin: \"0\" }, children: [\"#\", newQueuePosition] }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"13px\", margin: \"4px 0 0\" }, children: \"your position in line\" })] }), _jsxs(Text, { style: { color: brand.textMuted, fontSize: \"13px\", lineHeight: \"1.6\" }, children: [totalPoints, \" total points from \", totalReferrals, \" referral\", totalReferrals !== 1 ? \"s\" : \"\", \".\"] }), _jsx(PrimaryButton, { href: pioneerUrl, children: \"invite more\" })] }));\n}\nexport const referralConvertedTemplate = {\n id: \"product.referral-converted\",\n category: \"product\",\n subject: () => \"referral converted\",\n component: ReferralConverted,\n previewProps: {\n firstName: \"Alex\",\n referredName: \"Jordan\",\n pointsEarned: 50,\n totalPoints: 150,\n newQueuePosition: 75,\n totalReferrals: 3,\n pioneerUrl: \"https://vreko.dev/pioneer\",\n },\n schema: ReferralConvertedPropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Heading, Hr, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const SystemAlertPropsSchema = z.object({\n title: z.string(),\n message: z.string(),\n severity: z.enum([\"critical\", \"warning\", \"info\"]),\n actionRequired: z.boolean(),\n actionUrl: z.string().url().optional(),\n actionLabel: z.string().optional(),\n additionalDetails: z.string().optional(),\n timestamp: z.string(),\n});\nconst severityConfig = {\n critical: { color: brand.danger, label: \"CRITICAL\" },\n warning: { color: brand.warning, label: \"WARNING\" },\n info: { color: brand.info, label: \"INFO\" },\n};\nfunction SystemAlert({ title, message, severity, actionRequired, actionUrl, actionLabel, additionalDetails, timestamp, }) {\n const config = severityConfig[severity];\n return (_jsxs(Wrapper, { preview: message.slice(0, 90), children: [_jsxs(Section, { style: {\n borderLeft: `4px solid ${config.color}`,\n paddingLeft: \"16px\",\n marginBottom: \"24px\",\n }, children: [_jsx(Text, { style: {\n color: config.color,\n fontSize: \"11px\",\n fontWeight: 700,\n margin: \"0 0 4px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.1em\",\n }, children: config.label }), _jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"22px\", fontWeight: 700, margin: \"0 0 8px\" }, children: title }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: 0 }, children: message })] }), additionalDetails && (_jsx(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"6px\",\n padding: \"16px\",\n border: `1px solid ${brand.border}`,\n marginBottom: \"24px\",\n }, children: _jsx(Text, { style: {\n color: brand.textSecondary,\n fontSize: \"13px\",\n lineHeight: \"1.6\",\n margin: 0,\n fontFamily: \"monospace\",\n }, children: additionalDetails }) })), actionRequired && actionUrl && actionLabel && (_jsx(PrimaryButton, { href: actionUrl, children: actionLabel })), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsxs(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: [\"Sent at \", timestamp] })] }));\n}\nSystemAlert.PreviewProps = {\n title: \"Snapshot Protection Degraded\",\n message: \"The Vreko daemon has not been responding for 5 minutes. Your code changes are not being protected during this time.\",\n severity: \"critical\",\n actionRequired: true,\n actionUrl: \"https://vreko.dev/dashboard/status\",\n actionLabel: \"Check System Status\",\n additionalDetails: \"Last successful heartbeat: 2026-03-29T14:22:00Z\\nAffected workspace: /Users/user1/project\",\n timestamp: \"March 29, 2026 at 2:27 PM UTC\",\n};\nexport const productSystemAlertTemplate = {\n id: \"product.system-alert\",\n category: \"product\",\n subject: (props) => props.title,\n component: SystemAlert,\n previewProps: SystemAlert.PreviewProps,\n schema: SystemAlertPropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Heading, Hr, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const WaitlistConfirmationPropsSchema = z.object({\n email: z.string().email(),\n docsUrl: z.string().url(),\n websiteUrl: z.string().url(),\n});\nexport function WaitlistConfirmation({ email, docsUrl, websiteUrl }) {\n return (_jsxs(Wrapper, { preview: \"You're on the Vreko early access list\", children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"28px\", fontWeight: 700, margin: \"0 0 8px\" }, children: \"Thanks for your interest \\uD83D\\uDE4F\" }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: \"Hey there, you're on the list. We're letting people in gradually to make sure everyone gets a great experience. We'll email you when it's your turn.\" }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n border: `1px solid ${brand.border}`,\n marginBottom: \"24px\",\n }, children: [_jsx(Text, { style: {\n color: brand.textSecondary,\n fontSize: \"12px\",\n fontWeight: 600,\n margin: \"0 0 12px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n }, children: \"In the meantime\" }), _jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: \"0 0 8px\" }, children: [_jsx(\"span\", { style: { color: brand.primary, marginRight: \"8px\" }, children: \"\\u2192\" }), _jsx(\"a\", { href: docsUrl, style: { color: brand.primary, textDecoration: \"none\" }, children: \"Documentation\" })] }), _jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: 0 }, children: [_jsx(\"span\", { style: { color: brand.primary, marginRight: \"8px\" }, children: \"\\u2192\" }), _jsx(\"a\", { href: websiteUrl, style: { color: brand.primary, textDecoration: \"none\" }, children: \"Website\" })] })] }), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: \" - Q, founder of Vreko\" })] }));\n}\nWaitlistConfirmation.PreviewProps = {\n email: \"dev@example.com\",\n docsUrl: \"https://docs.vreko.dev\",\n websiteUrl: \"https://vreko.dev\",\n};\nexport const waitlistConfirmationTemplate = {\n id: \"product.waitlist-confirmation\",\n category: \"product\",\n subject: () => \"You're on the Vreko early access list\",\n component: WaitlistConfirmation,\n previewProps: WaitlistConfirmation.PreviewProps,\n schema: WaitlistConfirmationPropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Heading, Hr, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const WeeklyDigestPropsSchema = z.object({\n firstName: z.string(),\n weekStartDate: z.string(),\n weekEndDate: z.string(),\n stats: z.object({\n totalSnapshots: z.number(),\n testsPassed: z.number(),\n regressionsCaught: z.number(),\n activeProjects: z.number(),\n pioneerPointsEarned: z.number(),\n comparisonToPreviousWeek: z\n .object({\n snapshotsDelta: z.number(),\n regressionsDelta: z.number(),\n })\n .optional(),\n }),\n highlights: z.array(z.object({\n icon: z.string(),\n title: z.string(),\n description: z.string(),\n })),\n dashboardUrl: z.string().url(),\n});\nfunction deltaLabel(delta) {\n if (delta > 0) {\n return `+${delta} from last week`;\n }\n if (delta < 0) {\n return `${delta} from last week`;\n }\n return \"same as last week\";\n}\nfunction WeeklyDigest({ firstName, weekStartDate, weekEndDate, stats, highlights, dashboardUrl }) {\n const statItems = [\n { label: \"Snapshots\", value: stats.totalSnapshots, delta: stats.comparisonToPreviousWeek?.snapshotsDelta },\n { label: \"Tests passed\", value: stats.testsPassed, delta: undefined },\n {\n label: \"Regressions caught\",\n value: stats.regressionsCaught,\n delta: stats.comparisonToPreviousWeek?.regressionsDelta,\n },\n { label: \"Active projects\", value: stats.activeProjects, delta: undefined },\n { label: \"Pioneer points\", value: stats.pioneerPointsEarned, delta: undefined },\n ];\n return (_jsxs(Wrapper, { preview: \"Your weekly intelligence summary is ready\", children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 8px\" }, children: \"\\uD83E\\uDD8E Your week in review\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: [firstName, \", here's your Vreko intelligence summary for \", weekStartDate, \" \\u2013 \", weekEndDate, \".\"] }), _jsx(Section, { style: { marginBottom: \"24px\" }, children: _jsx(\"table\", { style: { width: \"100%\", borderCollapse: \"separate\", borderSpacing: \"8px\" }, children: _jsx(\"tbody\", { children: [0, 2, 4].map((rowStart) => (_jsx(\"tr\", { children: statItems.slice(rowStart, rowStart + 2).map((stat, j) => (_jsxs(\"td\", { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n border: `1px solid ${brand.border}`,\n padding: \"16px\",\n width: \"50%\",\n verticalAlign: \"top\",\n }, children: [_jsx(Text, { style: {\n color: brand.primary,\n fontSize: \"28px\",\n fontWeight: 700,\n margin: \"0 0 4px\",\n lineHeight: 1,\n }, children: stat.value.toLocaleString() }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: stat.label }), stat.delta !== undefined && (_jsx(Text, { style: {\n color: stat.delta >= 0 ? brand.success : brand.danger,\n fontSize: \"11px\",\n margin: \"4px 0 0\",\n }, children: deltaLabel(stat.delta) }))] }, j))) }, rowStart))) }) }) }), highlights.length > 0 && (_jsxs(_Fragment, { children: [_jsx(Text, { style: {\n color: brand.textSecondary,\n fontSize: \"13px\",\n fontWeight: 600,\n margin: \"0 0 12px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n }, children: \"Highlights\" }), highlights.map((h, i) => (_jsx(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"6px\",\n padding: \"14px 16px\",\n border: `1px solid ${brand.border}`,\n marginBottom: \"8px\",\n }, children: _jsx(\"table\", { style: { borderCollapse: \"collapse\" }, children: _jsx(\"tbody\", { children: _jsxs(\"tr\", { children: [_jsx(\"td\", { style: {\n width: \"32px\",\n verticalAlign: \"top\",\n fontSize: \"18px\",\n paddingTop: \"2px\",\n }, children: h.icon }), _jsxs(\"td\", { children: [_jsx(Text, { style: {\n color: brand.textPrimary,\n fontSize: \"14px\",\n fontWeight: 600,\n margin: \"0 0 2px\",\n }, children: h.title }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: h.description })] })] }) }) }) }, i)))] })), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsx(PrimaryButton, { href: dashboardUrl, children: \"View Full Dashboard\" })] }));\n}\nWeeklyDigest.PreviewProps = {\n firstName: \"Alex\",\n weekStartDate: \"Mar 23\",\n weekEndDate: \"Mar 29, 2026\",\n stats: {\n totalSnapshots: 47,\n testsPassed: 312,\n regressionsCaught: 3,\n activeProjects: 2,\n pioneerPointsEarned: 85,\n comparisonToPreviousWeek: {\n snapshotsDelta: 12,\n regressionsDelta: 1,\n },\n },\n highlights: [\n {\n icon: \"🛡️\",\n title: \"Caught a breaking migration\",\n description: \"Snapshot restored auth service before data loss occurred\",\n },\n {\n icon: \"⚡\",\n title: \"Fastest session ever\",\n description: \"Completed refactor in 23 minutes with 0 regressions\",\n },\n {\n icon: \"🧠\",\n title: \"New pattern learned\",\n description: '\"When editing middleware, check that error handling is preserved\"',\n },\n ],\n dashboardUrl: \"https://vreko.dev/dashboard\",\n};\nexport const productWeeklyDigestTemplate = {\n id: \"product.weekly-digest\",\n category: \"product\",\n subject: (props) => `Your Vreko week: ${props.stats.regressionsCaught} regressions caught`,\n component: WeeklyDigest,\n previewProps: WeeklyDigest.PreviewProps,\n schema: WeeklyDigestPropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Heading, Hr, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { GhostButton, PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const WelcomePropsSchema = z.object({\n firstName: z.string(),\n planName: z.string(),\n planFeatures: z.array(z.string()),\n dashboardUrl: z.string().url(),\n docsUrl: z.string().url(),\n pioneerTier: z.string().optional(),\n pioneerPoints: z.number().optional(),\n});\nconst SETUP_STEPS = [\n { number: \"1\", text: \"Install the VS Code extension\", href: \"vscode:extension/MarcelleLabs.vreko-vscode\" },\n { number: \"2\", text: \"Open any project you work on with AI tools\", href: null },\n { number: \"3\", text: \"Run your next AI prompt - Vreko is already informing the context\", href: null },\n];\nfunction Welcome({ firstName, planName, planFeatures, dashboardUrl, docsUrl, pioneerTier, pioneerPoints, }) {\n return (_jsxs(Wrapper, { preview: \"One link to install. Your agent sees Vreko on the next prompt.\", children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"28px\", fontWeight: 700, margin: \"0 0 8px\" }, children: \"Welcome to Vreko \\uD83E\\uDD8E\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 8px\" }, children: [\"Hey \", firstName, \", you're in.\", \" \", pioneerTier\n ? \"Pioneer access means full Pro features free during beta, and a permanent discount when we launch.\"\n : `Your ${planName} plan is active.`] }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: \"Here's what to do in the next 5 minutes:\" }), _jsx(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n border: `1px solid ${brand.border}`,\n marginBottom: \"24px\",\n }, children: SETUP_STEPS.map((step) => (_jsxs(Text, { style: {\n color: brand.textPrimary,\n fontSize: \"14px\",\n margin: \"0 0 12px\",\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: \"8px\",\n }, children: [_jsxs(\"span\", { style: { color: brand.primary, fontWeight: 700, minWidth: \"20px\" }, children: [step.number, \".\"] }), step.text] }, step.number))) }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: \"You don't need to configure anything. Vreko detects your agent setup (Cursor, Claude, Copilot) and writes its intelligence directly into the context files your agent already reads. Your next prompt sees it.\" }), pioneerTier && (_jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n border: `1px solid ${brand.primary}`,\n marginBottom: \"24px\",\n }, children: [_jsx(Text, { style: {\n color: brand.primary,\n fontSize: \"12px\",\n fontWeight: 600,\n margin: \"0 0 4px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n }, children: \"Pioneer Program\" }), _jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"16px\", fontWeight: 700, margin: \"0 0 4px\" }, children: [pioneerTier, \" Pioneer \\uD83E\\uDD8E\"] }), pioneerPoints !== undefined && (_jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"13px\", margin: 0 }, children: [pioneerPoints, \" points earned\"] }))] })), _jsx(PrimaryButton, { href: dashboardUrl, children: \"Open Dashboard\" }), _jsx(\"span\", { style: { display: \"inline-block\", width: \"12px\" } }), _jsx(GhostButton, { href: docsUrl, children: \"Read the Docs\" }), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"13px\", lineHeight: \"1.6\", margin: \"0 0 12px\" }, children: \"If you use Claude Desktop or a custom agent harness, reply to this email and I'll send you the advanced integration guide (MCP, hooks, CLI).\" }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: \"0 0 8px\" }, children: \"- Q, solo founder, Marcelle Labs\" }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: \"P.S. Everything Vreko learns stays on your machine. Only metadata reaches us, and only for features you've opted into.\" })] }));\n}\nWelcome.PreviewProps = {\n firstName: \"Alex\",\n planName: \"Pro\",\n planFeatures: [\n \"Unlimited AI-triggered snapshots\",\n \"Pattern learning across sessions\",\n \"Priority support\",\n \"Advanced intelligence briefings\",\n ],\n dashboardUrl: \"https://vreko.dev/dashboard\",\n docsUrl: \"https://vreko.dev/docs\",\n pioneerTier: \"Gold\",\n pioneerPoints: 420,\n};\nexport const productWelcomeTemplate = {\n id: \"product.welcome\",\n category: \"product\",\n subject: () => \"Welcome to Vreko. One link to install.\",\n component: Welcome,\n previewProps: Welcome.PreviewProps,\n schema: WelcomePropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * E06: Zeigarnik Unlock Email\n *\n * Sent when a locked insight becomes available after N days of observation.\n * Uses the Zeigarnik effect - the teaser from onboarding is now resolved.\n * Voice: confident peer showing data, not selling.\n */\nimport { Heading, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const ZeigarnikUnlockPropsSchema = z.object({\n firstName: z.string(),\n insightTeaser: z.string(),\n resolvedObservation: z.string(),\n resolvedAction: z.string(),\n daysObserved: z.number(),\n dashboardUrl: z.string().url(),\n});\nexport function ZeigarnikUnlock({ firstName, insightTeaser, resolvedObservation, resolvedAction, daysObserved, dashboardUrl, }) {\n return (_jsxs(Wrapper, { preview: `insight unlocked after ${daysObserved} days`, children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 8px\" }, children: \"insight unlocked\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 20px\" }, children: [firstName, \", remember this from your initial scan?\"] }), _jsx(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"16px\",\n margin: \"0 0 16px\",\n borderLeft: `3px solid ${brand.textMuted}`,\n }, children: _jsx(Text, { style: { color: brand.textMuted, fontSize: \"13px\", fontStyle: \"italic\", margin: \"0\" }, children: insightTeaser }) }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"16px\",\n margin: \"0 0 20px\",\n borderLeft: `3px solid ${brand.primary}`,\n }, children: [_jsx(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: \"0 0 8px\" }, children: resolvedObservation }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"13px\", margin: \"0\" }, children: resolvedAction })] }), _jsxs(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: \"0 0 16px\" }, children: [\"Based on \", daysObserved, \" days of metadata observation. No code content was read.\"] }), _jsx(PrimaryButton, { href: dashboardUrl, children: \"view in dashboard\" })] }));\n}\nexport const zeigarnikUnlockTemplate = {\n id: \"product.zeigarnik-unlock\",\n category: \"product\",\n subject: () => \"insight unlocked\",\n component: ZeigarnikUnlock,\n previewProps: {\n firstName: \"Alex\",\n insightTeaser: \"High revert rate detected\",\n resolvedObservation: \"src/auth/session.ts has 23 reverts in 90 days\",\n resolvedAction: \"Add snapshot before auth changes\",\n daysObserved: 7,\n dashboardUrl: \"https://vreko.dev/dashboard\",\n },\n schema: ZeigarnikUnlockPropsSchema,\n};\n","import { render } from \"@react-email/render\";\n/**\n * EmailService - Core email orchestration layer\n *\n * Features:\n * - Middleware pattern for composable email processing\n * - Template rendering with React Email\n * - Provider routing (Resend vs HubSpot)\n * - Dry-run mode support\n * - Retry queue integration\n */\nexport class EmailService {\n middlewares = [];\n // biome-ignore lint/suspicious/noExplicitAny: template registry interface is not yet finalized\n templateRegistry; // Will be replaced with actual registry\n providers = new Map();\n defaultFrom = \"Vreko <q@vreko.dev>\";\n fromAddresses = {};\n defaultReplyTo;\n dryRunMode = false;\n /**\n * Enable or disable service-level dry-run mode.\n * When enabled, emails are rendered but never sent - the full payload is logged instead.\n */\n setDryRun(enabled) {\n this.dryRunMode = enabled;\n return this;\n }\n /**\n * Set per-category from addresses (e.g. { authentication: 'security@...' })\n */\n setFromAddresses(addresses) {\n this.fromAddresses = addresses;\n return this;\n }\n /**\n * Set the default from address used when no category-specific address is configured\n */\n setDefaultFrom(from) {\n this.defaultFrom = from;\n return this;\n }\n /**\n * Set a global reply-to address for all outgoing emails\n */\n setDefaultReplyTo(replyTo) {\n this.defaultReplyTo = replyTo;\n return this;\n }\n /**\n * Add middleware to the processing chain\n */\n use(middleware) {\n this.middlewares.push(middleware);\n return this;\n }\n /**\n * Primary send method with composable middleware\n */\n async send(request) {\n // Service-level dry-run takes precedence over per-request flag\n if (this.dryRunMode || request.dryRun) {\n return this.handleDryRun(request);\n }\n // Compose middleware chain\n const execute = this.middlewares.reduceRight((next, middleware) => () => middleware(request, next), () => this.executeDelivery(request));\n return execute();\n }\n /**\n * Template-based convenience method\n */\n async sendFromTemplate(options) {\n const template = await this.templateRegistry?.get(options.templateId);\n if (!template) {\n return {\n success: false,\n error: `Template not found: ${options.templateId}`,\n };\n }\n // Validate context against schema\n const validation = template.schema.safeParse(options.context);\n if (!validation.success) {\n return {\n success: false,\n error: `Invalid template context: ${validation.error.message}`,\n };\n }\n // Determine category and priority from template\n const category = template.category;\n const priority = this.getPriorityForCategory(category);\n return this.send({\n to: options.to,\n provider: \"auto\",\n category,\n priority,\n template: {\n id: options.templateId,\n props: validation.data,\n },\n metadata: options.metadata,\n });\n }\n /**\n * Batch sending for digests\n */\n async sendBatch(requests) {\n const results = await Promise.allSettled(requests.map((request) => this.send(request)));\n const succeeded = results.filter((r) => r.status === \"fulfilled\" && r.value.success).length;\n return {\n total: requests.length,\n succeeded,\n failed: requests.length - succeeded,\n results: results.map((r) => r.status === \"fulfilled\" ? r.value : { success: false, error: \"Promise rejected\" }),\n };\n }\n /**\n * Execute email delivery (called after middleware chain)\n */\n async executeDelivery(request) {\n try {\n // Get template\n const template = await this.templateRegistry?.get(request.template.id);\n if (!template) {\n throw new Error(`Template not found: ${request.template.id}`);\n }\n // Render HTML\n const html = await render(template.component(request.template.props));\n // Generate plain text fallback (improves deliverability and accessibility)\n const text = await render(template.component(request.template.props), {\n plainText: true,\n });\n // Resolve sender address: category-specific → default\n const from = this.fromAddresses[request.category] ?? this.defaultFrom;\n // Select provider\n const provider = this.selectProvider(request);\n // Send email\n const result = await provider.send({\n from,\n to: request.to.email,\n subject: template.subject(request.template.props),\n html,\n text,\n replyTo: this.defaultReplyTo,\n tags: [\n { name: \"category\", value: request.category },\n { name: \"template\", value: request.template.id.split(\".\")[1] ?? request.template.id },\n ],\n metadata: request.metadata,\n });\n // Track delivery\n await this.trackDelivery({\n userId: request.to.userId,\n templateId: request.template.id,\n category: request.category,\n provider: request.provider || \"resend\",\n recipientEmail: request.to.email,\n subject: template.subject(request.template.props),\n status: result.status,\n emailId: result.id,\n metadata: request.metadata,\n });\n return {\n success: result.status === \"sent\",\n emailId: result.id,\n error: result.error,\n };\n }\n catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }\n /**\n * Handle dry-run mode - renders the template fully and logs the complete payload\n * that would have been sent to the provider, without making any network calls.\n */\n async handleDryRun(request) {\n const template = await this.templateRegistry?.get(request.template.id);\n const _from = this.fromAddresses[request.category] ?? this.defaultFrom;\n let _subject = request.template.id;\n let _htmlPreview = \"(template not found)\";\n let _textPreview = \"(template not found)\";\n if (template) {\n _subject = template.subject(request.template.props);\n _htmlPreview = await render(template.component(request.template.props));\n _textPreview = await render(template.component(request.template.props), { plainText: true });\n }\n return {\n success: true,\n emailId: `dry-run-${Date.now()}`,\n };\n }\n /**\n * Select provider based on category or explicit request\n */\n // biome-ignore lint/suspicious/noExplicitAny: provider map holds heterogeneous provider types\n selectProvider(request) {\n if (request.provider && request.provider !== \"auto\") {\n return this.providers.get(request.provider);\n }\n // Auto-routing: Use Resend for transactional, HubSpot for marketing\n const provider = request.category === \"marketing\" ? \"hubspot\" : \"resend\";\n return this.providers.get(provider);\n }\n /**\n * Get default priority for email category\n */\n getPriorityForCategory(category) {\n const priorityMap = {\n authentication: \"critical\",\n billing: \"high\",\n onboarding: \"high\",\n product: \"normal\",\n marketing: \"low\",\n };\n return priorityMap[category] || \"normal\";\n }\n /**\n * Track email delivery in database\n */\n async trackDelivery(_data) {\n // Will be implemented with database integration\n // Issue: LIN-0000 - Insert into email_deliveries table\n }\n /**\n * Register email provider\n */\n registerProvider(name, provider) {\n this.providers.set(name, provider);\n }\n /**\n * Set template registry\n */\n setTemplateRegistry(registry) {\n this.templateRegistry = registry;\n }\n}\nexport async function sendFromTemplate(options) {\n return emailService.sendFromTemplate(options);\n}\n// Export singleton instance (to be configured in app initialization)\nexport const emailService = new EmailService();\n","import { Client } from \"@hubspot/api-client\";\nimport { logger } from \"@vreko/infrastructure\";\nimport type {\n\tCreateAssociation,\n\tCreateCompany,\n\tCreateContact,\n\tCreateDeal,\n\tGetCompany,\n\tGetContact,\n\tGetDeal,\n\tSearchObjects,\n\tUpdateCompany,\n\tUpdateContact,\n\tUpdateDeal,\n} from \"../../types\";\n\nlet hubspotClient: Client | null = null;\n\n/**\n * Get the HubSpot client instance with caching\n * @returns HubSpot client instance\n */\nexport function getHubSpotClient(): Client {\n\tif (hubspotClient) {\n\t\treturn hubspotClient;\n\t}\n\n\tconst accessToken = process.env.HUBSPOT_ACCESS_TOKEN;\n\tconst apiKey = process.env.HUBSPOT_API_KEY;\n\n\tif (!accessToken && !apiKey) {\n\t\tthrow new Error(\n\t\t\t\"Missing HubSpot authentication credentials. Please provide either HUBSPOT_ACCESS_TOKEN or HUBSPOT_API_KEY environment variable.\",\n\t\t);\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: HubSpot IConfiguration shape varies by version\n\tconst config: any = {};\n\n\tif (accessToken) {\n\t\tconfig.accessToken = accessToken;\n\t}\n\n\tif (apiKey) {\n\t\tconfig.developerApiKey = apiKey;\n\t}\n\n\thubspotClient = new Client(config);\n\tlogger.info(\"HubSpot client initialized successfully\");\n\n\treturn hubspotClient;\n}\n\n/**\n * Create a new contact in HubSpot\n * @param params Contact properties\n * @returns Created contact\n */\nexport const createContact: CreateContact = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Creating contact in HubSpot\", {\n\t\t\temail: params.properties.email,\n\t\t});\n\n\t\t// Filter out undefined properties\n\t\tconst properties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(params.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tproperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\tconst response = await client.crm.contacts.basicApi.create({\n\t\t\tproperties,\n\t\t});\n\n\t\tlogger.info(\"Contact created successfully\", {\n\t\t\tid: response.id,\n\t\t\temail: params.properties.email,\n\t\t});\n\n\t\tconst contactProperties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(response.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tcontactProperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: response.id,\n\t\t\t...contactProperties,\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to create contact\", {\n\t\t\terror,\n\t\t\temail: params.properties.email,\n\t\t});\n\t\tthrow error;\n\t}\n};\n\n/**\n * Update an existing contact in HubSpot\n * @param params Contact ID and properties to update\n * @returns Updated contact\n */\nexport const updateContact: UpdateContact = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Updating contact in HubSpot\", { id: params.id });\n\n\t\t// Filter out undefined properties\n\t\tconst properties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(params.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tproperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\tconst response = await client.crm.contacts.basicApi.update(params.id, {\n\t\t\tproperties,\n\t\t});\n\n\t\tlogger.info(\"Contact updated successfully\", { id: response.id });\n\n\t\tconst contactProperties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(response.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tcontactProperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: response.id,\n\t\t\t...contactProperties,\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to update contact\", { error, id: params.id });\n\t\tthrow error;\n\t}\n};\n\n/**\n * Get a contact by ID from HubSpot\n * @param params Contact ID and optional properties to retrieve\n * @returns Contact details\n */\nexport const getContact: GetContact = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Getting contact from HubSpot\", { id: params.id });\n\n\t\tconst response = await client.crm.contacts.basicApi.getById(params.id, params.properties);\n\n\t\tlogger.info(\"Contact retrieved successfully\", { id: response.id });\n\n\t\tconst contactProperties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(response.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tcontactProperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: response.id,\n\t\t\t...contactProperties,\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to get contact\", { error, id: params.id });\n\t\tthrow error;\n\t}\n};\n\n/**\n * Create a new company in HubSpot\n * @param params Company properties\n * @returns Created company\n */\nexport const createCompany: CreateCompany = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Creating company in HubSpot\", {\n\t\t\tname: params.properties.name,\n\t\t});\n\n\t\t// Filter out undefined properties\n\t\tconst properties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(params.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tproperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\tconst response = await client.crm.companies.basicApi.create({\n\t\t\tproperties,\n\t\t});\n\n\t\tlogger.info(\"Company created successfully\", {\n\t\t\tid: response.id,\n\t\t\tname: params.properties.name,\n\t\t});\n\n\t\tconst companyProperties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(response.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tcompanyProperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: response.id,\n\t\t\t...companyProperties,\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to create company\", {\n\t\t\terror,\n\t\t\tname: params.properties.name,\n\t\t});\n\t\tthrow error;\n\t}\n};\n\n/**\n * Update an existing company in HubSpot\n * @param params Company ID and properties to update\n * @returns Updated company\n */\nexport const updateCompany: UpdateCompany = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Updating company in HubSpot\", { id: params.id });\n\n\t\t// Filter out undefined properties\n\t\tconst properties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(params.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tproperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\tconst response = await client.crm.companies.basicApi.update(params.id, {\n\t\t\tproperties,\n\t\t});\n\n\t\tlogger.info(\"Company updated successfully\", { id: response.id });\n\n\t\tconst companyProperties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(response.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tcompanyProperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: response.id,\n\t\t\t...companyProperties,\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to update company\", { error, id: params.id });\n\t\tthrow error;\n\t}\n};\n\n/**\n * Get a company by ID from HubSpot\n * @param params Company ID and optional properties to retrieve\n * @returns Company details\n */\nexport const getCompany: GetCompany = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Getting company from HubSpot\", { id: params.id });\n\n\t\tconst response = await client.crm.companies.basicApi.getById(params.id, params.properties);\n\n\t\tlogger.info(\"Company retrieved successfully\", { id: response.id });\n\n\t\tconst companyProperties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(response.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tcompanyProperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: response.id,\n\t\t\t...companyProperties,\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to get company\", { error, id: params.id });\n\t\tthrow error;\n\t}\n};\n\n/**\n * Create a new deal in HubSpot\n * @param params Deal properties and optional associations\n * @returns Created deal\n */\nexport const createDeal: CreateDeal = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Creating deal in HubSpot\", {\n\t\t\tname: params.properties.dealname,\n\t\t});\n\n\t\t// Filter out undefined properties\n\t\tconst properties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(params.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tproperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\tconst response = await client.crm.deals.basicApi.create({\n\t\t\tproperties,\n\t\t});\n\n\t\t// Handle associations if provided\n\t\tif (params.associations && params.associations.length > 0) {\n\t\t\tfor (const association of params.associations) {\n\t\t\t\tawait client.crm.associations.v4.basicApi.create(\n\t\t\t\t\t\"deal\",\n\t\t\t\t\tresponse.id,\n\t\t\t\t\tassociation.toType,\n\t\t\t\t\tassociation.toId,\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// @ts-expect-error - Type definitions may not match actual API\n\t\t\t\t\t\t\tassociationCategory: \"HUBSPOT_DEFINED\",\n\t\t\t\t\t\t\t// @ts-expect-error - Type definitions may not match actual API\n\t\t\t\t\t\t\tassociationTypeId:\n\t\t\t\t\t\t\t\tNumber.parseInt(association.associationType, 10) || association.associationType,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tlogger.info(\"Deal created successfully\", {\n\t\t\tid: response.id,\n\t\t\tname: params.properties.dealname,\n\t\t});\n\n\t\tconst dealProperties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(response.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tdealProperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: response.id,\n\t\t\t...dealProperties,\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to create deal\", {\n\t\t\terror,\n\t\t\tname: params.properties.dealname,\n\t\t});\n\t\tthrow error;\n\t}\n};\n\n/**\n * Update an existing deal in HubSpot\n * @param params Deal ID and properties to update\n * @returns Updated deal\n */\nexport const updateDeal: UpdateDeal = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Updating deal in HubSpot\", { id: params.id });\n\n\t\t// Filter out undefined properties\n\t\tconst properties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(params.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tproperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\tconst response = await client.crm.deals.basicApi.update(params.id, {\n\t\t\tproperties,\n\t\t});\n\n\t\tlogger.info(\"Deal updated successfully\", { id: response.id });\n\n\t\tconst dealProperties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(response.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tdealProperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: response.id,\n\t\t\t...dealProperties,\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to update deal\", { error, id: params.id });\n\t\tthrow error;\n\t}\n};\n\n/**\n * Get a deal by ID from HubSpot\n * @param params Deal ID and optional properties to retrieve\n * @returns Deal details\n */\nexport const getDeal: GetDeal = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Getting deal from HubSpot\", { id: params.id });\n\n\t\tconst response = await client.crm.deals.basicApi.getById(params.id, params.properties);\n\n\t\tlogger.info(\"Deal retrieved successfully\", { id: response.id });\n\n\t\tconst dealProperties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(response.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tdealProperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: response.id,\n\t\t\t...dealProperties,\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to get deal\", { error, id: params.id });\n\t\tthrow error;\n\t}\n};\n\n/**\n * Search for objects in HubSpot\n * @param params Search parameters\n * @returns Search results\n */\nexport const searchObjects: SearchObjects = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Searching objects in HubSpot\", {\n\t\t\tobjectType: params.objectType,\n\t\t});\n\n\t\tconst response = await client.crm.objects.searchApi.doSearch(params.objectType, {\n\t\t\tproperties: params.properties,\n\t\t\tlimit: params.limit,\n\t\t\tafter: params.after?.toString(),\n\t\t});\n\n\t\tlogger.info(\"Objects search completed successfully\", {\n\t\t\tobjectType: params.objectType,\n\t\t\tresultsCount: response.results?.length || 0,\n\t\t});\n\n\t\treturn response;\n\t} catch (error) {\n\t\tlogger.error(\"Failed to search objects\", {\n\t\t\terror,\n\t\t\tobjectType: params.objectType,\n\t\t});\n\t\tthrow error;\n\t}\n};\n\n/**\n * Create an association between two objects in HubSpot\n * @param params Association parameters\n */\nexport const createAssociation: CreateAssociation = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Creating association in HubSpot\", {\n\t\t\tfromType: params.fromObjectType,\n\t\t\tfromId: params.fromObjectId,\n\t\t\ttoType: params.toObjectType,\n\t\t\ttoId: params.toObjectId,\n\t\t});\n\n\t\tawait client.crm.associations.v4.basicApi.create(\n\t\t\tparams.fromObjectType,\n\t\t\tparams.fromObjectId,\n\t\t\tparams.toObjectType,\n\t\t\tparams.toObjectId,\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\t// @ts-expect-error - Type definitions may not match actual API\n\t\t\t\t\tassociationCategory: \"HUBSPOT_DEFINED\",\n\t\t\t\t\t// @ts-expect-error - Type definitions may not match actual API\n\t\t\t\t\tassociationTypeId: Number.parseInt(params.associationType, 10) || params.associationType,\n\t\t\t\t},\n\t\t\t],\n\t\t);\n\n\t\tlogger.info(\"Association created successfully\", {\n\t\t\tfromType: params.fromObjectType,\n\t\t\tfromId: params.fromObjectId,\n\t\t\ttoType: params.toObjectType,\n\t\t\ttoId: params.toObjectId,\n\t\t});\n\t} catch (error) {\n\t\tlogger.error(\"Failed to create association\", { error });\n\t\tthrow error;\n\t}\n};\n","// ESM imports fixed for Node.js v22+\nimport { logger } from \"@vreko/infrastructure\";\nimport { getHubSpotClient } from \"../provider/hubspot/index.js\";\nimport { createHubSpotContact, updateHubSpotContact } from \"./contacts.js\";\n/**\n * Sync a Vreko user to HubSpot\n * Creates a new contact or updates existing one based on email\n *\n * @param userData - User data to sync\n * @returns HubSpot contact ID\n */\nexport async function syncUserToHubSpot(userData) {\n logger.info(\"Syncing user to HubSpot\", { email: userData.email });\n const properties = mapUserDataToHubSpotProperties(userData);\n try {\n // Try to find existing contact by email\n const existingContact = await findContactByEmail(userData.email);\n if (existingContact?.id) {\n // Update existing contact\n const updated = await updateHubSpotContact({\n id: existingContact.id,\n properties,\n });\n logger.info(\"Updated existing HubSpot contact\", {\n id: updated.id,\n email: userData.email,\n });\n return updated.id;\n }\n // Create new contact\n const created = await createHubSpotContact({ properties });\n logger.info(\"Created new HubSpot contact\", {\n id: created.id,\n email: userData.email,\n });\n return created.id;\n }\n catch (error) {\n logger.error(\"Failed to sync user to HubSpot\", {\n error,\n email: userData.email,\n });\n throw error;\n }\n}\n/**\n * Find a contact by email address\n */\nexport async function findContactByEmail(email) {\n try {\n const client = getHubSpotClient();\n const response = await client.crm.contacts.searchApi.doSearch({\n filterGroups: [\n {\n filters: [\n {\n propertyName: \"email\",\n // @ts-expect-error - HubSpot SDK type definitions may not match actual API\n operator: \"EQ\",\n value: email,\n },\n ],\n },\n ],\n properties: [\"email\", \"firstname\", \"lastname\", \"vreko_user_id\"],\n limit: 1,\n });\n if (response.results && response.results.length > 0) {\n const result = response.results[0];\n return {\n id: result.id,\n ...result.properties,\n };\n }\n return null;\n }\n catch (_error) {\n logger.warn(\"Contact not found by email\", { email });\n return null;\n }\n}\n/**\n * Update contact properties in HubSpot\n */\nexport async function updateContactProperties(contactId, properties) {\n try {\n await updateHubSpotContact({\n id: contactId,\n properties: properties,\n });\n logger.info(\"Updated HubSpot contact properties\", {\n contactId,\n propertyCount: Object.keys(properties).length,\n });\n }\n catch (error) {\n logger.error(\"Failed to update HubSpot contact properties\", {\n error,\n contactId,\n });\n throw error;\n }\n}\n/**\n * Sync extension installation to HubSpot\n */\nexport async function syncExtensionInstalled(email, version, installDate = new Date()) {\n const contact = await findContactByEmail(email);\n if (!contact?.id) {\n logger.warn(\"Cannot sync extension install - contact not found\", { email });\n return;\n }\n await updateContactProperties(contact.id, {\n extension_installed: true,\n extension_version: version,\n extension_install_date: installDate.getTime(),\n });\n}\n/**\n * Sync pioneer program update to HubSpot\n */\nexport async function syncPioneerUpdate(email, tier, points) {\n const contact = await findContactByEmail(email);\n if (!contact?.id) {\n logger.warn(\"Cannot sync pioneer update - contact not found\", { email });\n return;\n }\n await updateContactProperties(contact.id, {\n pioneer_tier: tier,\n pioneer_points: points,\n });\n}\n/**\n * Sync activity metrics to HubSpot\n */\nexport async function syncActivityMetrics(email, totalSnapshots, totalRestores, lastActiveDate = new Date()) {\n const contact = await findContactByEmail(email);\n if (!contact?.id) {\n logger.warn(\"Cannot sync activity metrics - contact not found\", { email });\n return;\n }\n await updateContactProperties(contact.id, {\n total_snapshots: totalSnapshots,\n total_recoveries: totalRestores,\n last_activity_date: lastActiveDate.getTime(),\n });\n}\n/**\n * Sync first restore milestone to HubSpot\n */\nexport async function syncFirstRestore(email, restoreDate = new Date()) {\n const contact = await findContactByEmail(email);\n if (!contact?.id) {\n logger.warn(\"Cannot sync first restore - contact not found\", { email });\n return;\n }\n await updateContactProperties(contact.id, {\n first_restore_date: restoreDate.getTime(),\n });\n}\n/**\n * Map Vreko user data to HubSpot contact properties\n */\nfunction mapUserDataToHubSpotProperties(userData) {\n const properties = {\n email: userData.email,\n firstname: userData.firstName,\n lastname: userData.lastName,\n // Custom Vreko properties\n vreko_user_id: userData.userId,\n // Extension\n extension_installed: userData.extensionInstalled ? \"true\" : \"false\",\n extension_version: userData.extensionVersion,\n // Pioneer\n pioneer_tier: userData.pioneerTier,\n pioneer_points: userData.pioneerPoints?.toString(),\n // Subscription\n subscription_plan: userData.planName,\n subscription_status: userData.subscriptionStatus,\n // Activity\n total_snapshots: userData.totalSnapshots?.toString(),\n total_recoveries: userData.totalRestores?.toString(),\n // Lifecycle\n signup_source: userData.signupSource,\n onboarding_completed: userData.onboardingCompleted ? \"true\" : \"false\",\n ai_tool_primary: userData.aiToolPrimary,\n };\n // Add date properties (HubSpot expects Unix timestamp in milliseconds)\n if (userData.extensionInstallDate) {\n properties.extension_install_date = userData.extensionInstallDate.getTime().toString();\n }\n if (userData.pioneerJoinDate) {\n properties.pioneer_join_date = userData.pioneerJoinDate.getTime().toString();\n }\n if (userData.subscriptionStartDate) {\n properties.subscription_start_date = userData.subscriptionStartDate.getTime().toString();\n }\n if (userData.lastActiveDate) {\n properties.last_activity_date = userData.lastActiveDate.getTime().toString();\n }\n if (userData.lastSnapshotDate) {\n properties.last_snapshot_date = userData.lastSnapshotDate.getTime().toString();\n }\n if (userData.firstSnapshotDate) {\n properties.first_snapshot_date = userData.firstSnapshotDate.getTime().toString();\n }\n if (userData.firstRestoreDate) {\n properties.first_restore_date = userData.firstRestoreDate.getTime().toString();\n }\n if (userData.mrr !== undefined) {\n properties.mrr = userData.mrr.toString();\n }\n // Filter out undefined values\n return Object.fromEntries(Object.entries(properties).filter(([_, v]) => v !== undefined));\n}\n","import type { EmailService } from \"../service\";\nimport type { EmailSendRequest } from \"../types\";\n\n/**\n * Billing Event Handlers\n *\n * Handles email sending for billing and subscription events:\n * - Payment confirmations\n * - Subscription changes\n * - Failed payments\n * - Subscription cancellations\n */\n\nexport class BillingEmailHandler {\n\tconstructor(private emailService: EmailService) {\n\t\t/* intentionally empty */\n\t}\n\n\t/**\n\t * Send welcome email after successful subscription\n\t */\n\tasync sendWelcome(params: {\n\t\tto: string;\n\t\tuserId: string;\n\t\tfirstName: string;\n\t\tplanName: string;\n\t\tplanFeatures: string[];\n\t\tdashboardUrl: string;\n\t\tdocsUrl: string;\n\t\tpioneerTier?: string;\n\t\tpioneerPoints?: number;\n\t}): Promise<void> {\n\t\tconst request: EmailSendRequest = {\n\t\t\tto: { email: params.to, userId: params.userId },\n\t\t\tcategory: \"onboarding\",\n\t\t\tpriority: \"high\",\n\t\t\ttemplate: {\n\t\t\t\tid: \"product.welcome\",\n\t\t\t\tprops: {\n\t\t\t\t\tfirstName: params.firstName,\n\t\t\t\t\tplanName: params.planName,\n\t\t\t\t\tplanFeatures: params.planFeatures,\n\t\t\t\t\tdashboardUrl: params.dashboardUrl,\n\t\t\t\t\tdocsUrl: params.docsUrl,\n\t\t\t\t\tpioneerTier: params.pioneerTier,\n\t\t\t\t\tpioneerPoints: params.pioneerPoints,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tawait this.emailService.send(request);\n\t}\n\n\t/**\n\t * Send subscription cancellation confirmation\n\t */\n\tasync sendCancellationConfirmation(params: {\n\t\tto: string;\n\t\tuserId: string;\n\t\tfirstName: string;\n\t\tplanName: string;\n\t\tcancellationDate: Date;\n\t\tdataRetentionDays: number;\n\t\treactivateUrl: string;\n\t}): Promise<void> {\n\t\tconst request: EmailSendRequest = {\n\t\t\tto: { email: params.to, userId: params.userId },\n\t\t\tcategory: \"billing\",\n\t\t\tpriority: \"high\",\n\t\t\ttemplate: {\n\t\t\t\tid: \"product.system-alert\",\n\t\t\t\tprops: {\n\t\t\t\t\talertType: \"subscription_cancelled\",\n\t\t\t\t\ttitle: \"Subscription Cancelled\",\n\t\t\t\t\tmessage: `Your ${params.planName} subscription has been cancelled and will remain active until ${params.cancellationDate.toLocaleDateString()}. Your data will be retained for ${params.dataRetentionDays} days after that date.`,\n\t\t\t\t\tseverity: \"info\",\n\t\t\t\t\tactionRequired: false,\n\t\t\t\t\tadditionalDetails:\n\t\t\t\t\t\t\"You can reactivate your subscription at any time before the retention period ends.\",\n\t\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tawait this.emailService.send(request);\n\t}\n\n\t/**\n\t * Send payment failure alert\n\t */\n\tasync sendPaymentFailed(params: {\n\t\tto: string;\n\t\tuserId: string;\n\t\tplanName: string;\n\t\tamount: number;\n\t\tcurrency: string;\n\t\tretryDate: Date;\n\t\tupdatePaymentUrl: string;\n\t}): Promise<void> {\n\t\tconst request: EmailSendRequest = {\n\t\t\tto: { email: params.to, userId: params.userId },\n\t\t\tcategory: \"billing\",\n\t\t\tpriority: \"critical\",\n\t\t\ttemplate: {\n\t\t\t\tid: \"product.system-alert\",\n\t\t\t\tprops: {\n\t\t\t\t\talertType: \"payment_failed\",\n\t\t\t\t\ttitle: \"Payment Failed\",\n\t\t\t\t\tmessage: `We were unable to process your payment of ${params.amount} ${params.currency} for your ${params.planName} subscription. We'll automatically retry on ${params.retryDate.toLocaleDateString()}.`,\n\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\tactionRequired: true,\n\t\t\t\t\tactionUrl: params.updatePaymentUrl,\n\t\t\t\t\tactionLabel: \"Update Payment Method\",\n\t\t\t\t\tadditionalDetails:\n\t\t\t\t\t\t\"To avoid service interruption, please update your payment method or ensure sufficient funds are available.\",\n\t\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tawait this.emailService.send(request);\n\t}\n\n\t/**\n\t * Send subscription upgraded notification\n\t */\n\tasync sendSubscriptionUpgraded(params: {\n\t\tto: string;\n\t\tuserId: string;\n\t\tfirstName: string;\n\t\toldPlan: string;\n\t\tnewPlan: string;\n\t\tnewFeatures: string[];\n\t\tdashboardUrl: string;\n\t}): Promise<void> {\n\t\tconst request: EmailSendRequest = {\n\t\t\tto: { email: params.to, userId: params.userId },\n\t\t\tcategory: \"billing\",\n\t\t\tpriority: \"normal\",\n\t\t\ttemplate: {\n\t\t\t\tid: \"product.system-alert\",\n\t\t\t\tprops: {\n\t\t\t\t\talertType: \"subscription_upgraded\",\n\t\t\t\t\ttitle: \"Subscription Upgraded\",\n\t\t\t\t\tmessage: `You've successfully upgraded from ${params.oldPlan} to ${params.newPlan}. Your new features are now active!`,\n\t\t\t\t\tseverity: \"info\",\n\t\t\t\t\tactionRequired: false,\n\t\t\t\t\tactionUrl: params.dashboardUrl,\n\t\t\t\t\tactionLabel: \"Explore New Features\",\n\t\t\t\t\tadditionalDetails: `New features: ${params.newFeatures.join(\", \")}`,\n\t\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tawait this.emailService.send(request);\n\t}\n\n\t/**\n\t * Send trial ending reminder\n\t */\n\tasync sendTrialEnding(params: {\n\t\tto: string;\n\t\tuserId: string;\n\t\tfirstName: string;\n\t\tplanName: string;\n\t\ttrialEndDate: Date;\n\t\tdaysRemaining: number;\n\t\tupgradeUrl: string;\n\t}): Promise<void> {\n\t\tconst request: EmailSendRequest = {\n\t\t\tto: { email: params.to, userId: params.userId },\n\t\t\tcategory: \"billing\",\n\t\t\tpriority: \"high\",\n\t\t\ttemplate: {\n\t\t\t\tid: \"product.system-alert\",\n\t\t\t\tprops: {\n\t\t\t\t\talertType: \"trial_ending\",\n\t\t\t\t\ttitle: `Your ${params.planName} Trial Ends Soon`,\n\t\t\t\t\tmessage: `Your free trial ends in ${params.daysRemaining} day${params.daysRemaining !== 1 ? \"s\" : \"\"} on ${params.trialEndDate.toLocaleDateString()}. Upgrade now to keep your data and continue using Vreko.`,\n\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\tactionRequired: true,\n\t\t\t\t\tactionUrl: params.upgradeUrl,\n\t\t\t\t\tactionLabel: \"Upgrade Now\",\n\t\t\t\t\tadditionalDetails:\n\t\t\t\t\t\t\"After your trial ends, you can still access your account but snapshot capture will be disabled until you upgrade.\",\n\t\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tawait this.emailService.send(request);\n\t}\n\n\t/**\n\t * Send suspension notice (Day 8 of grace period)\n\t *\n\t * Called when subscription transitions from past_due to suspended\n\t * after 7-day grace period expires without successful payment.\n\t */\n\tasync sendSuspensionNotice(params: {\n\t\tto: string;\n\t\tuserId: string;\n\t\tplanName: string;\n\t\treactivateUrl: string;\n\t}): Promise<void> {\n\t\tconst request: EmailSendRequest = {\n\t\t\tto: { email: params.to, userId: params.userId },\n\t\t\tcategory: \"billing\",\n\t\t\tpriority: \"critical\",\n\t\t\ttemplate: {\n\t\t\t\tid: \"product.system-alert\",\n\t\t\t\tprops: {\n\t\t\t\t\talertType: \"subscription_suspended\",\n\t\t\t\t\ttitle: \"Your Subscription Has Been Suspended\",\n\t\t\t\t\tmessage: `Your ${params.planName} subscription has been suspended due to payment issues. Cloud features including snapshot sync, pattern library, and history are now paused.`,\n\t\t\t\t\tseverity: \"error\",\n\t\t\t\t\tactionRequired: true,\n\t\t\t\t\tactionUrl: params.reactivateUrl,\n\t\t\t\t\tactionLabel: \"Reactivate Now\",\n\t\t\t\t\tadditionalDetails:\n\t\t\t\t\t\t\"Update your payment method to restore full access. Your local CLI features remain available, but cloud syncing is disabled until payment is resolved.\",\n\t\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tawait this.emailService.send(request);\n\t}\n}\n","/**\n * Centralized Audit Logging Module\n * Single implementation used by all services (API, MCP, CLI, etc.)\n * Replaces 371 lines of custom audit logic spread across apps\n *\n * Handles:\n * - PostHog event emission (non-blocking)\n * - Database audit log persistence (non-blocking)\n * - Structured logging (always succeeds)\n */ import { logger } from \"@vreko/infrastructure\";\n// PostHog configuration\nconst POSTHOG_API_KEY = process.env.POSTHOG_API_KEY || \"\";\nconst POSTHOG_HOST = process.env.POSTHOG_HOST || \"https://us.posthog.com\";\nconst POSTHOG_ENABLED = !!POSTHOG_API_KEY;\n/**\n * Emit event to PostHog (non-blocking)\n */ async function emitPostHogEvent(eventType, metadata) {\n if (!POSTHOG_ENABLED) {\n return;\n }\n try {\n const event = {\n api_key: POSTHOG_API_KEY,\n event: eventType,\n distinct_id: metadata.userId || metadata.ip || \"anonymous\",\n properties: {\n ...metadata,\n $ip: metadata.ip,\n $set: {\n email: metadata.userId ? `user_${metadata.userId}` : undefined\n }\n },\n timestamp: new Date().toISOString()\n };\n const response = await fetch(`${POSTHOG_HOST}/capture/`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(event)\n });\n if (!response.ok) {\n logger.error(\"Failed to emit PostHog event\", {\n eventType,\n status: response.status,\n statusText: response.statusText\n });\n }\n } catch (error) {\n logger.error(\"Error emitting PostHog event\", {\n error,\n eventType\n });\n }\n}\n/**\n * Write audit log to database (non-blocking)\n * Stores audit events in telemetry_events table with event_category='audit'\n * Uses @vreko/platform DB connection via lazy import to avoid circular deps\n */ async function writeAuditLog(eventType, metadata) {\n try {\n // Lazy import to avoid circular dependencies\n const { db, vrekoSchema } = await import(\"@vreko/platform\");\n if (!db) {\n logger.warn(\"Database not available for audit logging\", {\n eventType\n });\n return;\n }\n const { telemetryEvents } = vrekoSchema;\n // Write to telemetry_events table with event_category='audit'\n await db.insert(telemetryEvents).values({\n eventType,\n eventCategory: \"audit\",\n userId: metadata.userId,\n properties: {\n ip: metadata.ip,\n userAgent: metadata.userAgent,\n method: metadata.method,\n path: metadata.path,\n statusCode: metadata.statusCode,\n errorMessage: metadata.errorMessage,\n ...metadata\n }\n });\n logger.debug(\"Audit log written\", {\n eventType,\n userId: metadata.userId,\n orgId: metadata.orgId\n });\n } catch (error) {\n logger.error(\"Failed to write audit log\", {\n error,\n eventType,\n metadata\n });\n // Don't throw - audit logging should not break main flow\n }\n}\n/**\n * Track authentication event\n * Emits to PostHog and writes to audit log (both non-blocking)\n */ export async function trackEvent(eventType, metadata) {\n // Log locally (always succeeds)\n logger.info(\"Audit event\", {\n eventType,\n userId: metadata.userId,\n orgId: metadata.orgId,\n path: metadata.path\n });\n // Emit to PostHog (non-blocking)\n emitPostHogEvent(eventType, metadata).catch((error)=>{\n logger.error(\"PostHog emit failed\", {\n error,\n eventType\n });\n });\n // Write to audit log (non-blocking)\n writeAuditLog(eventType, metadata).catch((error)=>{\n logger.error(\"Audit log write failed\", {\n error,\n eventType\n });\n });\n}\n/**\n * Track failed authentication attempt\n */ export async function trackFailedAuth(type, metadata) {\n const eventMap = {\n signin: \"auth.signin_failed\",\n totp: \"mfa.totp_failed\",\n passkey: \"passkey.failed\"\n };\n await trackEvent(eventMap[type], metadata);\n// Could trigger additional actions:\n// - Check for abuse patterns\n// - Rate limit if needed\n// - Alert security team if excessive\n}\n/**\n * Adapter for better-auth database hooks\n * Provides helper function for use in databaseHooks configuration\n */ export function createDatabaseHookHandler(eventType) {\n return async (data)=>{\n const d = data;\n await trackEvent(eventType, {\n userId: d.userId || d.user?.id,\n orgId: d.organizationId || d.organization?.id,\n timestamp: new Date().toISOString(),\n ...d\n });\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQuanMiLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9","/**\n * API Key Security Implementation\n *\n * Provides secure API key generation, hashing, validation, and enumeration prevention.\n * Uses Argon2id with 64MB memory cost (OWASP 2025 standard).\n *\n * OWASP Standards: A02:2021 – Cryptographic Failures, A07:2021 – Identification and Authentication Failures\n */ import { randomBytes } from \"node:crypto\";\nimport { hash, verify } from \"@node-rs/argon2\";\nimport { logger } from \"@vreko/infrastructure\";\n/**\n * Default API key security configuration\n */ export const defaultAPIKeySecurityConfig = {\n livePrefix: \"sk_live_\",\n testPrefix: \"sk_test_\",\n keyLength: 32,\n enableScopes: true,\n enableExpiration: true,\n expirationDays: 365\n};\n/**\n * OWASP 2025 recommended Argon2id configuration\n */ export const defaultArgon2idConfig = {\n memoryLimit: 65536,\n iterations: 3,\n parallelism: 2,\n type: \"argon2id\"\n};\n/**\n * Generate a secure API key with prefix\n *\n * Requirements:\n * - Uses crypto.getRandomValues() (cryptographically secure)\n * - 256-bit entropy minimum\n * - Base64url encoding (URL-safe)\n * - Environment prefix (sk_live_ or sk_test_)\n * - Unique across all time\n *\n * @param isLive Is this a live key (true) or test key (false)\n * @param config API key configuration\n * @returns Base64url-encoded API key with prefix\n */ export function generateAPIKey(isLive, config = {}) {\n const finalConfig = {\n ...defaultAPIKeySecurityConfig,\n ...config\n };\n // Generate cryptographically secure random bytes\n const randomBuffer = randomBytes(finalConfig.keyLength);\n // Convert to base64url (URL-safe: - and _ instead of + and /)\n const base64url = randomBuffer.toString(\"base64\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n // Add environment prefix\n const prefix = isLive ? finalConfig.livePrefix : finalConfig.testPrefix;\n const apiKey = prefix + base64url;\n logger.debug(\"API key generated\", {\n keyLength: apiKey.length,\n prefix,\n environment: isLive ? \"live\" : \"test\"\n });\n return apiKey;\n}\n/**\n * Hash API key using Argon2id\n *\n * Creates a strong hash that prevents rainbow table attacks:\n * - Random salt generated per key\n * - 64MB memory cost prevents GPU/ASIC attacks\n * - Multiple iterations increase time cost\n * - Suitable for password/key storage (NOT passwords themselves)\n *\n * In production, use:\n * - Node.js crypto.pbkdf2 with Argon2\n * - Or @node-rs/argon2 for native performance\n * - Or argon2 package with proper configuration\n *\n * @param plainKey The API key to hash\n * @param config Argon2id configuration\n * @returns Promise<hashed key>\n */ export async function hashAPIKey(plainKey, config = {}) {\n const finalConfig = {\n ...defaultArgon2idConfig,\n ...config\n };\n // ✅ SB-245 FIXED: Real Argon2id implementation using @node-rs/argon2\n // OWASP 2025 compliant with memory-hard protection\n const secureHash = await hash(plainKey, {\n memoryCost: finalConfig.memoryLimit,\n timeCost: finalConfig.iterations,\n parallelism: finalConfig.parallelism\n });\n logger.debug(\"API key hashed with Argon2id\", {\n memoryLimit: finalConfig.memoryLimit,\n iterations: finalConfig.iterations,\n parallelism: finalConfig.parallelism\n });\n return secureHash;\n}\n/**\n * Verify API key hash using constant-time comparison\n *\n * Prevents timing attacks by always taking the same time\n * regardless of where the mismatch occurs\n *\n * @param plainKey Plain key to verify\n * @param hash Stored hash to compare against\n * @returns Promise<true if matches, false otherwise>\n */ export async function verifyAPIKeyHash(plainKey, hash) {\n try {\n // ✅ SB-245 FIXED: Real Argon2id verification using @node-rs/argon2\n // Uses constant-time comparison internally to prevent timing attacks\n return await verify(hash, plainKey);\n } catch (error) {\n logger.warn(\"API key verification error\", {\n error: error instanceof Error ? error.message : String(error)\n });\n return false;\n }\n}\n/**\n * Validate API key format\n *\n * Checks:\n * - Correct prefix (sk_live_ or sk_test_)\n * - Valid base64url characters\n * - Minimum length\n * - No special characters\n *\n * @param key API key to validate\n * @returns Validation result\n */ export function validateAPIKeyFormat(key) {\n // Check prefix\n const isLiveKey = key.startsWith(\"sk_live_\");\n const isTestKey = key.startsWith(\"sk_test_\");\n if (!isLiveKey && !isTestKey) {\n return {\n valid: false,\n reason: \"Invalid API key prefix (expected sk_live_ or sk_test_)\"\n };\n }\n // Get the actual key part (after prefix)\n const prefix = isLiveKey ? \"sk_live_\" : \"sk_test_\";\n const keyPart = key.substring(prefix.length);\n // Check minimum length\n if (keyPart.length < 20) {\n return {\n valid: false,\n reason: \"API key too short\"\n };\n }\n // Check for valid base64url characters (a-z, A-Z, 0-9, -, _)\n const base64urlRegex = /^[A-Za-z0-9_-]+$/;\n if (!base64urlRegex.test(keyPart)) {\n return {\n valid: false,\n reason: \"API key contains invalid characters\"\n };\n }\n return {\n valid: true\n };\n}\n/**\n * Extract public key ID for enumeration prevention\n *\n * Returns only last 4 characters for display purposes\n * This prevents full key enumeration while allowing partial identification\n *\n * @param key Full API key\n * @returns Masked key for display (first 8 chars + ...last 4 chars)\n */ export function maskAPIKeyForDisplay(key) {\n const prefix = key.substring(0, 8); // \"sk_live_\" or \"sk_test_\"\n const lastFour = key.substring(key.length - 4);\n return `${prefix}...${lastFour}`;\n}\n/**\n * Check for API key enumeration attempts\n *\n * Tracks failed validation attempts to detect brute force:\n * - Per IP address\n * - Per key (if partially known)\n * - Global rate limiting\n *\n * @param ipAddress Client IP address\n * @param failureCount Number of failures so far\n * @param timeWindowMs Time window in milliseconds\n * @returns Object with enumeration detection result\n */ export function detectKeyEnumerationAttempt(ipAddress, failureCount, timeWindowMs = 60000) {\n // More than 10 failures per minute = enumeration attempt\n if (failureCount > 10) {\n logger.warn(\"Possible key enumeration detected\", {\n ipAddress,\n failureCount,\n timeWindow: `${timeWindowMs / 1000}s`\n });\n return {\n isEnumeration: true,\n shouldBlock: failureCount > 50,\n reason: \"Excessive key validation failures\"\n };\n }\n return {\n isEnumeration: false,\n shouldBlock: false\n };\n}\n/**\n * Generate constant response time for key validation\n *\n * Helps prevent timing attacks by ensuring similar response times\n * for successful and failed key validations\n *\n * @param baseDelayMs Minimum delay in milliseconds\n * @param variance Variance in milliseconds (±)\n * @returns Actual delay to use\n */ export function getConstantTimeDelay(baseDelayMs = 100, variance = 20) {\n // Add random variance to prevent timing attacks\n const randomVariance = Math.random() * variance - variance / 2;\n return Math.max(1, baseDelayMs + randomVariance);\n}\n/**\n * Validate API key scopes\n *\n * Checks if key has required permissions for action\n *\n * @param keyScopes Scopes on the API key\n * @param requiredScope Scope needed for this action\n * @returns true if key has required scope, false otherwise\n */ export function validateAPIKeyScope(keyScopes, requiredScope) {\n // Admin scope grants all access\n if (keyScopes.includes(\"admin:all\")) {\n return true;\n }\n // Check for exact scope match\n if (keyScopes.includes(requiredScope)) {\n return true;\n }\n // Check for wildcard scopes (e.g., \"snapshots:*\")\n const [resource] = requiredScope.split(\":\");\n if (keyScopes.includes(`${resource}:*`)) {\n return true;\n }\n logger.warn(\"API key scope check failed\", {\n keyScopes,\n requiredScope\n });\n return false;\n}\n/**\n * Log API key security event\n *\n * Records security-relevant events for audit trail\n *\n * @param event Event type\n * @param details Event details\n */ export function logAPIKeyEvent(event, details) {\n const logData = {\n event: `API_KEY_${event.toUpperCase()}`,\n keyId: details.keyId?.substring(0, 8),\n userId: details.userId,\n ipAddress: details.ipAddress,\n reason: details.reason,\n timestamp: new Date().toISOString()\n };\n const severity = event === \"created\" || event === \"used\" ? \"info\" : \"warn\";\n if (severity === \"info\") {\n logger.info(`API key ${event}`, logData);\n } else {\n logger.warn(`API key ${event}`, logData);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWtleS1zZWN1cml0eS5qcyIsInNvdXJjZXMiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=","// ESM imports fixed for Node.js v22+\n/**\n * Custom API Key Plugin for Better Auth v1.6.5\n *\n * better-auth v1.6.5 removed the built-in apiKey() plugin.\n * This plugin re-implements the createApiKey / verifyApiKey / deleteApiKey\n * surface using Better Auth's plugin endpoint API so that\n * `auth.api.createApiKey`, `auth.api.verifyApiKey`, and\n * `auth.api.deleteApiKey` are defined at runtime.\n *\n * Storage: uses @vreko/platform's Drizzle `apiKeys` table directly.\n * Key generation: uses packages/auth/src/security/api-key-security.ts.\n */\nimport { createAuthEndpoint } from \"@better-auth/core/api\";\nimport { APIError } from \"@better-auth/core/error\";\nimport { logger } from \"@vreko/infrastructure\";\nimport { apiKeys, db } from \"@vreko/platform\";\nimport { getSessionFromCtx } from \"better-auth/api\";\nimport { and, eq, gte, isNull, or } from \"drizzle-orm\";\nimport { nanoid } from \"nanoid\";\nimport { z } from \"zod\";\nimport { generateAPIKey, hashAPIKey, verifyAPIKeyHash } from \"../security/api-key-security.js\";\n// ─── Schemas ────────────────────────────────────────────────────────────────\nconst createApiKeyBodySchema = z.object({\n /** User-facing name for this key */\n name: z.string().optional().default(\"Default Key\"),\n /** Optional org scoping */\n organizationId: z.string().optional(),\n /** Structured permissions object — mirrors the apiKeys.permissions column type */\n permissions: z\n .object({\n maxSnapshots: z.number().optional(),\n cloudBackup: z.boolean().optional(),\n advancedDetection: z.boolean().optional(),\n customRules: z.boolean().optional(),\n teamSharing: z.boolean().optional(),\n })\n .optional(),\n /** Whether rate limiting is enabled for this key */\n rateLimitEnabled: z.boolean().optional().default(false),\n /** Max requests per rate-limit window */\n rateLimitMax: z.number().int().optional(),\n /** Rate limit window in milliseconds */\n rateLimitTimeWindow: z.number().int().optional(),\n /** Optional expiry date */\n expiresAt: z.coerce.date().optional(),\n /** Arbitrary metadata */\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\nconst verifyApiKeyBodySchema = z.object({\n /** The plaintext API key to verify */\n key: z.string(),\n /** Optional permissions to check against */\n permissions: z.record(z.string(), z.array(z.string())).optional(),\n});\nconst deleteApiKeyBodySchema = z.object({\n /** The DB id of the key to delete / revoke */\n keyId: z.string(),\n});\n// ─── Plugin ─────────────────────────────────────────────────────────────────\n/**\n * Better Auth plugin that provides API key management endpoints.\n *\n * Registers:\n * POST /api/auth/api-key/create → auth.api.createApiKey\n * POST /api/auth/api-key/verify → auth.api.verifyApiKey\n * POST /api/auth/api-key/delete → auth.api.deleteApiKey\n */\nexport function apiKeyPlugin() {\n return {\n id: \"vreko-api-key\",\n endpoints: {\n createApiKey: createAuthEndpoint(\"/api-key/create\", {\n method: \"POST\",\n body: createApiKeyBodySchema,\n metadata: {\n openapi: {\n operationId: \"createApiKey\",\n description: \"Create a new API key for the given user\",\n responses: {\n 200: {\n description: \"API key created\",\n content: {\n \"application/json\": {\n schema: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n key: { type: \"string\" },\n name: { type: \"string\" },\n createdAt: { type: \"string\", format: \"date-time\" },\n expiresAt: { type: \"string\", format: \"date-time\", nullable: true },\n },\n },\n },\n },\n },\n },\n },\n },\n }, async (ctx) => {\n const sessionData = await getSessionFromCtx(ctx);\n if (!sessionData?.user?.id) {\n throw new APIError(\"UNAUTHORIZED\", { message: \"Unauthorized\" });\n }\n const userId = sessionData.user.id;\n const { name, organizationId, permissions, rateLimitEnabled, rateLimitMax, rateLimitTimeWindow, expiresAt, metadata, } = ctx.body;\n // Generate a plaintext key (only returned once)\n const plainKey = generateAPIKey(true);\n // Hash with Argon2id for storage\n const keyHash = await hashAPIKey(plainKey);\n // \"start\" = first 8 chars of the plaintext key (Better Auth convention for lookup)\n const start = plainKey.substring(0, 8);\n // preview = first 12 chars for display (includes prefix + a few chars)\n const keyPreview = plainKey.substring(0, 12);\n const id = nanoid();\n const now = new Date();\n await db.insert(apiKeys).values({\n id,\n userId,\n organizationId: organizationId ?? null,\n name: name ?? \"Default Key\",\n key: keyHash,\n start,\n prefix: \"sk_live_\",\n keyPreview,\n permissions: permissions ?? null,\n enabled: true,\n rateLimitEnabled: rateLimitEnabled ?? false,\n rateLimitMax: rateLimitMax ?? null,\n rateLimitTimeWindow: rateLimitTimeWindow ?? null,\n expiresAt: expiresAt ?? null,\n metadata: metadata ?? null,\n createdAt: now,\n updatedAt: now,\n });\n logger.info(\"API key created\", { userId, keyId: id });\n return ctx.json({\n id,\n key: plainKey, // plaintext returned only once\n name: name ?? \"Default Key\",\n createdAt: now,\n expiresAt: expiresAt ?? null,\n permissions: permissions ?? null,\n });\n }),\n verifyApiKey: createAuthEndpoint(\"/api-key/verify\", {\n method: \"POST\",\n body: verifyApiKeyBodySchema,\n metadata: {\n openapi: {\n operationId: \"verifyApiKey\",\n description: \"Verify an API key and return its metadata\",\n },\n },\n }, async (ctx) => {\n const { key } = ctx.body;\n if (!key) {\n return ctx.json({ isValid: false, error: { message: \"Key is required\" } });\n }\n // Derive the `start` prefix from the submitted key for fast lookup.\n // Better Auth v1.x convention: `start` = first 8 chars of the plaintext key.\n const start = key.substring(0, 8);\n // Find candidates by prefix + not revoked + not expired\n const candidates = await db\n .select()\n .from(apiKeys)\n .where(and(eq(apiKeys.start, start), isNull(apiKeys.revokedAt), or(isNull(apiKeys.expiresAt), gte(apiKeys.expiresAt, new Date()))))\n .limit(5); // at most a handful of keys share the same 8-char prefix\n // Find the matching key via Argon2id verification\n let matchedKey = null;\n for (const candidate of candidates) {\n const matches = await verifyAPIKeyHash(key, candidate.key);\n if (matches) {\n matchedKey = candidate;\n break;\n }\n }\n if (!matchedKey) {\n return ctx.json({ isValid: false, error: { message: \"Invalid API key\" } });\n }\n // Update lastUsedAt (non-blocking)\n db.update(apiKeys)\n .set({ lastUsedAt: new Date(), updatedAt: new Date() })\n .where(eq(apiKeys.id, matchedKey.id))\n .catch((err) => {\n logger.warn(\"Failed to update lastUsedAt for API key\", {\n keyId: matchedKey.id,\n error: err.message,\n });\n });\n return ctx.json({\n isValid: true,\n valid: true, // legacy alias for consumers checking `.valid`\n userId: matchedKey.userId,\n key: {\n id: matchedKey.id,\n userId: matchedKey.userId,\n name: matchedKey.name,\n permissions: matchedKey.permissions,\n rateLimitEnabled: matchedKey.rateLimitEnabled,\n rateLimitMax: matchedKey.rateLimitMax,\n remaining: matchedKey.remaining,\n lastRefillAt: matchedKey.lastRefillAt,\n metadata: matchedKey.metadata,\n },\n });\n }),\n deleteApiKey: createAuthEndpoint(\"/api-key/delete\", {\n method: \"POST\",\n body: deleteApiKeyBodySchema,\n metadata: {\n openapi: {\n operationId: \"deleteApiKey\",\n description: \"Revoke (soft-delete) an API key by ID\",\n },\n },\n }, async (ctx) => {\n const sessionData = await getSessionFromCtx(ctx);\n if (!sessionData?.user?.id) {\n throw new APIError(\"UNAUTHORIZED\", { message: \"Unauthorized\" });\n }\n const { keyId } = ctx.body;\n const result = await db\n .update(apiKeys)\n .set({ revokedAt: new Date(), updatedAt: new Date() })\n .where(and(eq(apiKeys.id, keyId), eq(apiKeys.userId, sessionData.user.id)));\n // Zero rows affected means the key didn't exist or didn't belong to caller\n if (!result.rowCount) {\n throw new APIError(\"NOT_FOUND\", { message: \"Not found\" });\n }\n logger.info(\"API key revoked\", { keyId, userId: sessionData.user.id });\n return ctx.json({ success: true });\n }),\n },\n };\n}\n","import { logger } from \"@vreko/infrastructure\";\nimport { setSubscriptionSeats } from \"@vreko/integrations/stripe\";\nimport * as drizzle from \"@vreko/platform\";\nexport async function updateSeatsInOrganizationSubscription(organizationId) {\n const organization = await drizzle.getOrganizationWithPurchasesAndMembersCount(organizationId);\n if (!organization?.purchases || !Array.isArray(organization.purchases) || organization.purchases.length === 0) {\n return;\n }\n const activeSubscription = organization.purchases.find((purchase)=>purchase.type === \"SUBSCRIPTION\");\n if (!activeSubscription?.subscriptionId) {\n return;\n }\n try {\n await setSubscriptionSeats({\n id: activeSubscription.subscriptionId,\n seats: organization.membersCount\n });\n } catch (error) {\n logger.error(\"Could not update seats in organization subscription\", {\n organizationId,\n error\n });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uLmpzIiwic291cmNlcyI6W10sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==","// ESM imports fixed for Node.js v22+\nimport { getBaseUrl } from \"@vreko/config/server\";\nimport { sendEmail } from \"@vreko/email/resend\";\nimport { logger } from \"@vreko/infrastructure\";\nimport { syncUserToHubSpot } from \"@vreko/integrations\";\nimport { combinedSchema, db } from \"@vreko/platform\";\nimport { betterAuth } from \"better-auth\";\nimport { drizzleAdapter } from \"better-auth/adapters/drizzle\";\nimport { getOAuthState } from \"better-auth/api\";\nimport { admin, bearer, deviceAuthorization, jwt, magicLink, oidcProvider, openAPI, organization } from \"better-auth/plugins\";\nimport { nanoid } from \"nanoid\";\nimport { trackEvent } from \"./lib/audit.js\";\nimport { apiKeyPlugin } from \"./plugins/api-key-plugin.js\";\n// Frontend app URL (for OAuth redirects and CORS)\n// Access process.env directly for Vercel compatibility (t3-env wrapper issue)\nconst appUrl = process.env.APP_URL || getBaseUrl();\n// Better Auth base URL (where auth endpoints are served)\n// CRITICAL: Auth routes are in the WEB app, NOT the API server!\n// - Web app: Has /api/auth/* routes (this is where Better Auth runs)\n// - API server: Backend API only, no auth routes\n//\n// Priority: BETTER_AUTH_URL (explicit) > APP_URL > fallback\n// In dev: BETTER_AUTH_URL should be :3000 (web app with auth routes)\n// APP_URL might be :3003 (API server - no auth routes)\n//\n// IMPORTANT: This must be set or Better Auth will log warnings\n// Access process.env directly for Vercel compatibility (t3-env wrapper issue)\nconst authBaseUrl = process.env.BETTER_AUTH_URL || process.env.BETTER_AUTH_BASE_URL || process.env.APP_URL || `http://localhost:${process.env.PORT || 3000}`;\n// In development, trust all localhost ports to handle Next.js dynamic port assignment\n// Access process.env directly for Vercel compatibility (t3-env wrapper issue)\n// Detect local development regardless of NODE_ENV.\n// Doppler prd config sets NODE_ENV=production even when running locally,\n// so we also check if BETTER_AUTH_URL is a localhost URL.\nconst isLocalDev = (process.env.BETTER_AUTH_URL || \"\").includes(\"localhost\");\nconst isDevelopment = process.env.NODE_ENV !== \"production\" || isLocalDev;\nconst trustedOrigins = isDevelopment ? [\n appUrl,\n authBaseUrl,\n \"http://localhost:3000\",\n \"http://localhost:3001\",\n \"http://localhost:3002\",\n \"http://localhost:3003\"\n] : [\n appUrl,\n authBaseUrl,\n \"https://console.vreko.dev\"\n].filter((url, index, arr)=>arr.indexOf(url) === index);\nconst _auth = betterAuth({\n // ✅ Base URL for callbacks and redirects (required by Better Auth)\n // Uses BETTER_AUTH_URL env var, falling back to localhost with PORT\n baseURL: authBaseUrl,\n // Custom user fields returned by getSession().\n // Must be under user.additionalFields — schema.user.fields only affects migrations,\n // not the session output path (Better Auth reads options.user.additionalFields in\n // getFields() / parseUserOutput()).\n user: {\n additionalFields: {\n onboardingComplete: {\n type: \"boolean\",\n required: false,\n defaultValue: false\n },\n deviceFingerprint: {\n type: \"string\",\n required: false\n }\n }\n },\n appName: \"Vreko\",\n // ✅ SECURITY: Prevent account enumeration attacks\n // OWASP ASVS 2.2.1 - Don't reveal whether username exists\n disabledPaths: [\n \"/is-username-available\",\n // Disable Better Auth's /token path; OIDC token endpoint lives at /oauth2/token\n \"/token\"\n ],\n endpoints: {\n GET: {\n \"/health\": {\n async handler () {\n return new Response(\"OK\", {\n status: 200\n });\n }\n }\n }\n },\n emailAndPassword: {\n enabled: true\n },\n socialProviders: {\n // Only include social providers if credentials are configured\n // This prevents Better Auth from logging warnings that corrupt MCP stdio\n // Note: Access process.env directly for Vercel compatibility (t3-env wrapper issue)\n ...process.env.GITHUB_CLIENT_ID && process.env.GITHUB_CLIENT_SECRET ? {\n github: {\n clientId: process.env.GITHUB_CLIENT_ID,\n clientSecret: process.env.GITHUB_CLIENT_SECRET,\n // Block OAuth auto-signup - require invite code flow\n disableImplicitSignUp: true\n }\n } : {},\n ...process.env.GOOGLE_CLIENT_ID && process.env.GOOGLE_CLIENT_SECRET ? {\n google: {\n clientId: process.env.GOOGLE_CLIENT_ID,\n clientSecret: process.env.GOOGLE_CLIENT_SECRET,\n // Block OAuth auto-signup - require invite code flow\n disableImplicitSignUp: true\n }\n } : {}\n },\n database: drizzleAdapter(db, {\n provider: \"pg\",\n schema: combinedSchema\n }),\n session: {\n expiresIn: 60 * 60 * 24 * 7,\n updateAge: 60 * 60 * 24,\n // Always persist sessions in DB (no secondary storage)\n storeSessionInDatabase: true\n },\n account: {\n accountLinking: {\n enabled: true,\n trustedProviders: [\n \"google\",\n \"github\"\n ]\n }\n },\n trustedOrigins,\n // ✅ OPTIMIZATION: Redis secondary storage removed for alpha (DB-backed sessions)\n // Re-add if rate-limit distribution becomes a requirement post-launch.\n advanced: {\n // ✅ FIX: Use isDevelopment (not NODE_ENV) so Doppler prd config running locally\n // still gets dev-friendly cookie settings. isDevelopment checks BETTER_AUTH_URL\n // for localhost, which Doppler overrides correctly.\n useSecureCookies: !isDevelopment,\n crossSiteRequestForgery: {\n enabled: true,\n // Verify origin header matches trusted origins\n checkOrigin: true\n },\n // ✅ OPTIMIZATION: Explicit ID generation using nanoid\n database: {\n generateId: ()=>nanoid(),\n defaultFindManyLimit: 100\n },\n // ✅ OPTIMIZATION: IP tracking configuration for security audit\n ipAddress: {\n ipAddressHeaders: [\n \"cf-connecting-ip\",\n \"x-real-ip\",\n \"x-forwarded-for\",\n \"x-client-ip\"\n ],\n disableIpTracking: false\n },\n // ✅ OPTIMIZATION: Enhanced cookie configuration\n // ✅ FIX: Use isDevelopment consistently (not env.NODE_ENV === \"production\")\n // Doppler prd sets NODE_ENV=production even when running locally, which would\n // incorrectly set domain=\".vreko.dev\" on localhost cookies.\n crossSubDomainCookies: {\n enabled: !isDevelopment,\n domain: !isDevelopment ? \".vreko.dev\" : undefined\n },\n defaultCookieAttributes: {\n sameSite: \"lax\",\n secure: !isDevelopment,\n httpOnly: true,\n path: \"/\"\n },\n // ✅ FIX: OAuth state/pkce cookies need SameSite=None for cross-site redirects\n // See: https://github.com/better-auth/better-auth/issues/6483\n // Note: In development (localhost), browsers allow SameSite=None without Secure\n cookies: {\n state: {\n name: \"vreko.state\",\n attributes: {\n sameSite: isDevelopment ? \"lax\" : \"none\",\n secure: !isDevelopment,\n httpOnly: true,\n path: \"/\",\n maxAge: 600\n }\n },\n pkce: {\n name: \"vreko.pkce\",\n attributes: {\n sameSite: isDevelopment ? \"lax\" : \"none\",\n secure: !isDevelopment,\n httpOnly: true,\n path: \"/\",\n maxAge: 600\n }\n }\n },\n cookiePrefix: \"vreko\"\n },\n // Rate limiting configuration (replaces 340+ lines of custom rate limit code)\n rateLimit: {\n window: 60,\n max: 100,\n // In-memory storage - sufficient for alpha single-instance deployment\n storage: \"memory\",\n customRules: {\n \"/sign-in/email\": {\n window: 10,\n max: 3\n },\n \"/sign-in/social\": {\n window: 10,\n max: 5\n },\n \"/sign-up\": {\n window: 60,\n max: 5\n },\n \"/health\": false,\n \"/health/ready\": false,\n \"/health/live\": false\n }\n },\n // Use database hooks for audit logging (replaces 371 lines of custom auth-audit.ts)\n // Also includes rate limiting configuration (replaces 340+ lines of custom rate limit code)\n databaseHooks: {\n session: {\n create: {\n after: async (session)=>{\n const { userId, id: sessionId } = session;\n // Track session creation (indicates successful auth)\n await trackEvent(\"session.created\", {\n userId\n });\n // Also track auth.signin for returning users (session without new user)\n // This fires on every login (new session = successful signin)\n await trackEvent(\"auth.signin\", {\n userId,\n timestamp: new Date().toISOString()\n });\n // ✅ SECURITY: Session regeneration on login (prevents session fixation)\n // Invalidate any old sessions to prevent fixation attacks\n // OWASP A07:2021 - Session Fixation Prevention\n try {\n // Delete all previous sessions for this user EXCEPT the current one\n const { db } = await import(\"@vreko/platform\");\n const { sql } = await import(\"drizzle-orm\");\n if (db) {\n const result = await db.execute(sql`\n\t\t\t\t\t\t\t\tDELETE FROM session\n\t\t\t\t\t\t\t\tWHERE \"userId\" = ${userId}\n\t\t\t\t\t\t\t\tAND id != ${sessionId}\n\t\t\t\t\t\t\t`);\n const rotatedCount = result.rowCount || 0;\n if (rotatedCount > 0) {\n logger.info(\"Session regenerated on login - old sessions invalidated\", {\n userId,\n sessionId,\n rotatedCount\n });\n await trackEvent(\"session.regenerated\", {\n userId,\n reason: \"login\",\n rotatedCount\n });\n }\n }\n } catch (error) {\n // Don't fail login if session rotation fails\n logger.warn(\"Session regeneration failed on login\", {\n userId,\n error: error instanceof Error ? error.message : String(error)\n });\n }\n }\n },\n delete: {\n after: async (session)=>{\n const { userId } = session;\n // Track logout/session revocation\n await trackEvent(\"session.revoked\", {\n userId\n });\n // Also track auth.signout for analytics funnel\n await trackEvent(\"auth.signout\", {\n userId,\n timestamp: new Date().toISOString()\n });\n }\n }\n },\n user: {\n create: {\n before: async (user)=>{\n // ✅ INVITE GATE: Block account creation unless a valid invite code was passed\n // via OAuth additionalData (threaded through OAuth state) or email sign-up.\n // The code is burned atomically - concurrent double-redemption is impossible.\n // For OAuth flows: Better Auth stores additionalData in AsyncLocalStorage via\n // setOAuthState() during parseState(). getOAuthState() reads it back here.\n // For email sign-up: getOAuthState() returns null; fall back to __inviteCode.\n const oauthState = await getOAuthState().catch(()=>null);\n const inviteCode = oauthState?.inviteCode ?? user.__inviteCode;\n // Magic link pioneer path: check pendingApiKeys for a pioneer_magic_claim\n if (!inviteCode && user.email) {\n const { pendingApiKeys: pendingApiKeysTable, inviteCodes: inviteCodesTable, burnInviteCode } = await import(\"@vreko/platform\");\n const { and, eq, gt, isNull, sql } = await import(\"drizzle-orm\");\n const claim = await db.select().from(pendingApiKeysTable).where(and(eq(pendingApiKeysTable.userId, user.email), eq(pendingApiKeysTable.purpose, \"pioneer_magic_claim\"), gt(pendingApiKeysTable.expiresAt, new Date()))).limit(1);\n if (claim.length > 0) {\n const codeRow = await db.select().from(inviteCodesTable).where(and(sql`lower(${inviteCodesTable.invitedEmail}) = lower(${user.email})`, sql`${inviteCodesTable.currentUses} < ${inviteCodesTable.maxUses}`, isNull(inviteCodesTable.revokedAt))).limit(1);\n if (codeRow.length > 0) {\n // biome-ignore lint/style/noNonNullAssertion: length > 0 checked above\n await burnInviteCode(db, codeRow[0].id);\n await db.delete(pendingApiKeysTable).where(eq(pendingApiKeysTable.userId, user.email));\n return {\n data: user\n }; // allow account creation\n }\n }\n }\n if (!inviteCode) {\n throw new Error(\"INVITE_REQUIRED: An invite code is required to create an account.\");\n }\n try {\n const { db } = await import(\"@vreko/platform\");\n const { inviteCodes } = await import(\"@vreko/platform\");\n const { and, eq, sql } = await import(\"drizzle-orm\");\n const code = await db.select().from(inviteCodes).where(eq(inviteCodes.code, inviteCode)).limit(1);\n if (code.length === 0) {\n throw new Error(\"INVALID_INVITE_CODE\");\n }\n // biome-ignore lint/style/noNonNullAssertion: length === 0 checked above\n const entry = code[0];\n if (entry.expiresAt && entry.expiresAt < new Date()) {\n throw new Error(\"INVITE_CODE_EXPIRED\");\n }\n // Atomic burn: UPDATE WHERE currentUses < maxUses RETURNING *\n const burned = await db.update(inviteCodes).set({\n currentUses: sql`${inviteCodes.currentUses} + 1`,\n updatedAt: new Date()\n }).where(and(eq(inviteCodes.id, entry.id), sql`${inviteCodes.currentUses} < ${inviteCodes.maxUses}`)).returning();\n if (burned.length === 0) {\n throw new Error(\"INVITE_CODE_EXHAUSTED\");\n }\n } catch (error) {\n if (error instanceof Error && error.message.startsWith(\"INVITE\")) {\n throw error; // propagate gate errors\n }\n logger.error(\"Invite gate DB error\", {\n error\n });\n throw new Error(\"INVITE_GATE_ERROR\");\n }\n return {\n data: user\n };\n },\n after: async (user)=>{\n const { id: userId, email } = user;\n // Track new user signup\n await trackEvent(\"auth.signup\", {\n userId,\n timestamp: new Date().toISOString()\n });\n // Fire-and-forget HubSpot contact creation - outages must not block signup\n syncUserToHubSpot({\n userId,\n email,\n signupSource: \"app\"\n }).catch((err)=>{\n logger.warn(\"HubSpot signup sync failed (non-blocking)\", {\n userId,\n error: err instanceof Error ? err.message : String(err)\n });\n });\n // API key creation on signup disabled - apiKey plugin removed in better-auth v1.6.5\n // Users can create API keys manually from the dashboard.\n }\n }\n }\n },\n plugins: [\n bearer(),\n deviceAuthorization({\n verificationUri: `${appUrl}/link`,\n schema: {}\n }),\n admin(),\n openAPI(),\n // magicLink() - server-side handler for POST /api/auth/sign-in/magic-link\n magicLink({\n sendMagicLink: async ({ email, url })=>{\n await sendEmail({\n from: \"Vreko <noreply@vreko.dev>\",\n to: email,\n subject: \"Sign in to Vreko\",\n html: `<p>Click <a href=\"${url}\">here</a> to sign in. This link expires in 5 minutes.</p>`\n });\n }\n }),\n // organization() - server-side org endpoints (schema: packages/platform/src/db/schema/postgres.ts)\n organization(),\n // API key management (createApiKey / verifyApiKey / deleteApiKey)\n // better-auth v1.6.5 removed the built-in apiKey() plugin; this custom\n // plugin re-implements the same surface backed by the api_keys DB table.\n apiKeyPlugin(),\n // Asymmetric JWT signing; header injection disabled so oidcProvider owns token issuance\n jwt({\n disableSettingJwtHeader: true\n }),\n // Single fixed issuer (BETTER_AUTH_URL) with standard OIDC endpoints at /oauth2/*\n // Enables MCP server to validate against a standard OAuth surface (D4 follow-on)\n oidcProvider({\n // Absolute URL so the authorize redirect works from api.vreko.dev (Fly.io)\n // as well as vreko.dev (Vercel). authBaseUrl is BETTER_AUTH_URL which is\n // always the web-app origin — the login page lives there regardless of which\n // server is running the OIDC handler.\n loginPage: `${authBaseUrl}/auth/login`\n })\n ],\n onAPIError: {\n onError (error, ctx) {\n // Enhanced error logging with OAuth-specific context\n const errorDetails = {\n error,\n context: ctx\n };\n // Extract additional context from error object\n if (error && typeof error === \"object\") {\n if (\"code\" in error) {\n errorDetails.errorCode = error.code;\n }\n if (\"message\" in error) {\n errorDetails.errorMessage = error.message;\n }\n if (\"statusCode\" in error) {\n errorDetails.statusCode = error.statusCode;\n }\n }\n // Extract context information (e.g., request path, method)\n let isOAuthError = false;\n if (ctx && typeof ctx === \"object\") {\n if (\"request\" in ctx) {\n const request = ctx.request;\n errorDetails.requestUrl = request.url;\n errorDetails.requestMethod = request.method;\n // Check if this is an OAuth callback error\n if (request.url?.includes(\"/api/auth/callback/\")) {\n const provider = request.url.split(\"/callback/\")[1]?.split(\"?\")[0];\n errorDetails.oauthProvider = provider;\n errorDetails.errorType = \"OAuth Callback Error\";\n isOAuthError = true;\n logger.error(\"OAuth Callback Error\", errorDetails);\n }\n }\n }\n // Log auth error\n if (!isOAuthError) {\n logger.error(\"Better Auth API Error\", errorDetails);\n }\n // Track failed auth in PostHog (non-blocking)\n trackEvent(\"auth.signin_failed\", {\n errorCode: errorDetails.errorCode,\n errorMessage: errorDetails.errorMessage,\n path: errorDetails.requestUrl,\n timestamp: new Date().toISOString()\n }).catch(()=>{\n // Ignore tracking errors\n });\n // Send to Sentry for monitoring (lazy import to avoid startup overhead)\n import(\"@vreko/infrastructure\").then(({ captureError })=>{\n if (captureError && error instanceof Error) {\n captureError(error, {\n tags: {\n errorType: isOAuthError ? \"oauth_callback\" : \"auth_api\",\n ...errorDetails.errorCode ? {\n errorCode: String(errorDetails.errorCode)\n } : {}\n },\n extra: errorDetails\n });\n }\n }).catch(()=>{\n // Sentry not available, already logged\n });\n }\n }\n});\n/** Typed auth export with plugin APIs - cast to avoid complex type inference */ export const auth = _auth;\nexport * from \"./lib/organization.js\"; // Type exports moved to appropriate locations:\n // - Session: Use 'better-auth/types' or '@vreko/contracts/auth/session'\n // - Organization types: Use Better Auth organization plugin types\n // Removed dangerous 'any' stub exports (audit finding #1)\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZXMiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0="]}
1
+ {"version":3,"sources":["../../../packages/config/src/schemas.ts","../../../packages/email/src/resend.ts","../../../packages/integrations/dist/email/handlers/billing-events.js","../../../packages/integrations/dist/email/components/Wrapper.js","../../../packages/integrations/dist/email/components/PrimaryButton.js","../../../packages/integrations/dist/email/templates/auth/magic-link.js","../../../packages/integrations/dist/email/templates/auth/new-device-login.js","../../../packages/integrations/dist/email/templates/auth/reset-password.js","../../../packages/integrations/dist/email/templates/auth/verify-email.js","../../../packages/email/src/theme.ts","../../../packages/email/src/components/layouts/RepoFooter.tsx","../../../packages/email/src/components/layouts/TerminalHeader.tsx","../../../packages/email/src/components/VrekoEmailShell.tsx","../../../packages/email/src/components/layouts/VrekoLayout.tsx","../../../packages/email/src/components/primitives/AlertBox.tsx","../../../packages/email/src/components/primitives/Badge.tsx","../../../packages/email/src/components/primitives/BodyText.tsx","../../../packages/email/src/components/primitives/CodeBlock.tsx","../../../packages/email/src/components/primitives/Headline.tsx","../../../packages/email/src/components/primitives/PrimaryButton.tsx","../../../packages/email/src/components/primitives/StatRow.tsx","../../../packages/email/src/components/primitives/TerminalBlock.tsx","../../../packages/email/src/contexts.ts","../../../packages/email/src/templates/product/CohortInvite.tsx","../../../packages/email/src/registry.ts","../../../packages/email/src/send/cohort-invite.tsx","../../../packages/email/src/templates/auth/MagicLink.tsx","../../../packages/email/src/templates/auth/NewDeviceLogin.tsx","../../../packages/email/src/templates/auth/ResetPassword.tsx","../../../packages/email/src/templates/auth/VerifyEmail.tsx","../../../packages/email/src/templates/product/ActivationNudge.tsx","../../../packages/email/src/templates/product/CliNudge.tsx","../../../packages/email/src/templates/product/ExtensionNudge.tsx","../../../packages/email/src/templates/product/NiceSave.tsx","../../../packages/email/src/templates/product/PioneerIntro.tsx","../../../packages/email/src/templates/product/PioneerMilestone.tsx","../../../packages/email/src/templates/product/SystemAlert.tsx","../../../packages/email/src/templates/product/WeeklyDigest.tsx","../../../packages/email/src/templates/product/Welcome.tsx","../../../packages/email/src/templates/product/WeMissYou.tsx","../../../packages/email/src/templates/triage/IssueResolved.tsx","../../../packages/email/src/templates/triage/MCPTroubleshoot.tsx","../../../packages/email/src/templates/triage/PaymentFailed.tsx","../../../packages/email/src/templates/triage/ReEngagement.tsx","../../../packages/email/src/templates/triage/SupportAutoReply.tsx","../../../packages/email/src/templates/triage/TrialEnding.tsx","../../../packages/integrations/dist/email/templates/product/activation-nudge.js","../../../packages/integrations/dist/email/templates/product/cli-nudge.js","../../../packages/integrations/dist/email/templates/product/extension-nudge.js","../../../packages/integrations/dist/email/templates/product/first-scan-complete.js","../../../packages/integrations/dist/email/templates/product/invite-delivery.js","../../../packages/integrations/dist/email/templates/product/pioneer-confirmation.js","../../../packages/integrations/dist/email/templates/product/pioneer-milestone.js","../../../packages/integrations/dist/email/templates/product/pioneer-update.js","../../../packages/integrations/dist/email/templates/product/queue-update.js","../../../packages/integrations/dist/email/templates/product/re-engagement.js","../../../packages/integrations/dist/email/templates/product/referral-converted.js","../../../packages/integrations/dist/email/templates/product/system-alert.js","../../../packages/integrations/dist/email/templates/product/waitlist-confirmation.js","../../../packages/integrations/dist/email/templates/product/weekly-digest.js","../../../packages/integrations/dist/email/templates/product/welcome.js","../../../packages/integrations/dist/email/templates/product/zeigarnik-unlock.js","../../../packages/integrations/dist/email/service.js","../../../packages/integrations/src/hubspot/provider/hubspot/index.ts","../../../packages/integrations/dist/hubspot/lib/sync.js","../../../packages/integrations/src/email/handlers/billing-events.ts","../../../packages/auth/dist/lib/audit.js","../../../packages/auth/dist/security/api-key-security.js","../../../packages/auth/dist/plugins/api-key-plugin.js","../../../packages/auth/dist/lib/organization.js","../../../packages/auth/dist/auth.js"],"names":["object","getResendClient","apiKey","process","env","RESEND_API_KEY","Error","Resend","_resend","Proxy","get","_target","prop","sendEmail","from","to","subject","html","text","client","emails","send","BillingEmailHandler","emailService","sendWelcome","params","request","email","userId","category","priority","template","id","props","firstName","planName","planFeatures","dashboardUrl","docsUrl","pioneerTier","pioneerPoints","sendCancellationConfirmation","alertType","title","message","cancellationDate","toLocaleDateString","dataRetentionDays","severity","actionRequired","additionalDetails","timestamp","Date","toISOString","sendPaymentFailed","amount","currency","retryDate","actionUrl","updatePaymentUrl","actionLabel","sendSubscriptionUpgraded","oldPlan","newPlan","newFeatures","join","sendTrialEnding","daysRemaining","trialEndDate","upgradeUrl","sendSuspensionNotice","reactivateUrl","brand","background","surface","surfaceElevated","border","primary","primaryDark","textPrimary","textSecondary","textMuted","danger","warning","success","info","EMAIL_HEADER_URL","EMAIL_FOOTER_ICON_URL","preview","children","_jsxs","Html","lang","_jsx","Head","Font","fontFamily","fallbackFontFamily","fontWeight","fontStyle","Tailwind","config","theme","extend","colors","Body","style","backgroundColor","margin","padding","Preview","Section","Container","maxWidth","marginBottom","Img","src","width","height","alt","display","borderRadius","borderTop","marginTop","textAlign","Text","color","fontSize","lineHeight","Hr","borderColor","Link","href","textDecoration","Wrapper","PrimaryButton","Button","DangerButton","GhostButton","z","loginUrl","string","url","expiresInMinutes","number","default","ipAddress","optional","userAgent","MagicLink","Heading","_Fragment","PreviewProps","previewProps","deviceName","location","approveUrl","denyUrl","NewDeviceLogin","textTransform","letterSpacing","borderCollapse","paddingRight","resetUrl","requestedFrom","ResetPassword","verificationUrl","VerifyEmail","emailTheme","backgroundSecondary","surfaceSubtle","textTertiary","textDisabled","divider","error","fonts","sans","mono","fontSizes","xs","sm","base","lg","spacing","md","xl","borderWidth","ascii","checkmark","RepoFooter","currentYear","getFullYear","paddingTop","TerminalHeader","status","statusColors","online","processing","offline","critical","degraded","statusText","borderBottom","paddingBottom","table","tr","td","verticalAlign","span","COLORS","bg","muted","green","footer","FONT_BODY","FONT_MONO","bodyStyle","WebkitFontSmoothing","MozOsxFontSmoothing","containerStyle","sectionStyle","headerStyle","footerStyle","hrStyle","borderRight","borderLeft","footerLinkStyle","VrekoEmailShell","previewText","logoUrl","dir","meta","charSet","name","content","httpEquiv","webFont","format","className","role","cellPadding","cellSpacing","tbody","align","outline","hr","p","a","VREKO_COLORS","VREKO_FONT_BODY","VREKO_FONT_MONO","VrekoLayout","preheader","AlertBox","type","colorMap","iconMap","icon","marginRight","Badge","label","BodyText","mt","mb","CodeBlock","code","copyable","webViewUrl","language","div","justifyContent","alignItems","whiteSpace","wordBreak","Headline","as","cursor","StatRow","value","unit","marginLeft","TERMINAL_BG","wrapStyle","cellStyle","TerminalBlock","int","positive","date","array","nonnegative","oldTier","newTier","pointsEarned","totalPoints","nextTierName","pointsToNextTier","unlockedPerks","description","weekStartDate","weekEndDate","stats","totalSnapshots","testsPassed","regressionsCaught","activeProjects","activeMembers","pioneerPointsEarned","comparisonToPreviousWeek","highlights","tier","enum","repositoryName","min","filePath","score","max","aiSessionCount","riskLevel","invoiceUrl","filesRecovered","linesOfCode","timeSavedMinutes","sessionTime","restoreTime","aiToolDetected","twitterShareUrl","signupDate","extensionUrl","currentTier","currentPoints","sessionsCompleted","restoresCompleted","daysActive","pioneerDashboardUrl","referralUrl","lastActiveDate","daysInactive","totalSessions","totalTimelineRestores","feedbackUrl","CohortInviteContextSchema","cohort","CohortInvite","activationUrl","CohortInviteTemplate","component","schema","TemplateRegistry","templates","Map","register","has","set","list","Array","values","map","previewUrl","listByCategory","filter","validate","size","templateRegistry","sendCohortInviteEmail","input","render","result","toLocaleString","ActivationNudge","_","CliNudge","ExtensionNudge","NiceSave","timeSavedText","Math","floor","toString","strong","PioneerIntro","br","PioneerMilestone","length","perk","index","SystemAlert","scoreLabel","toFixed","WeeklyDigest","highlight","Welcome","greeting","undefined","Boolean","slice","WeMissYou","IssueResolved","issueId","originalSubject","resolutionDescription","changelogUrl","MCPTroubleshoot","userName","PaymentFailed","formattedAmount","Intl","NumberFormat","toUpperCase","formattedDate","month","day","now","ReEngagement","sessionCount","SupportAutoReply","TrialEnding","featuresUsed","feature","recoveryRisk","changeVolatility","workflowFragility","topFinding","topAction","hotspotCount","filesWatched","cliSetupCommand","vscodeMarketplaceUrl","InviteDelivery","jsxs","recipientName","cohortSize","daemonStatus","PioneerConfirmation","progressPct","round","i","overflow","headline","items","tag","ctaLabel","ctaHref","PioneerUpdate","item","previousPosition","currentPosition","actionCompleted","pioneerUrl","daysSinceLastActive","recentCommitCount","newHotspotCount","topChangedFile","referredName","newQueuePosition","totalReferrals","boolean","severityConfig","paddingLeft","websiteUrl","WaitlistConfirmation","snapshotsDelta","regressionsDelta","deltaLabel","delta","statItems","borderSpacing","rowStart","stat","j","h","SETUP_STEPS","step","gap","minWidth","insightTeaser","resolvedObservation","resolvedAction","daysObserved","EmailService","middlewares","providers","defaultFrom","fromAddresses","defaultReplyTo","dryRunMode","setDryRun","enabled","setFromAddresses","addresses","setDefaultFrom","setDefaultReplyTo","replyTo","use","middleware","push","dryRun","handleDryRun","execute","reduceRight","next","executeDelivery","sendFromTemplate","options","templateId","validation","safeParse","context","getPriorityForCategory","provider","data","metadata","sendBatch","requests","results","Promise","allSettled","succeeded","r","total","failed","plainText","selectProvider","tags","split","trackDelivery","recipientEmail","emailId","_subject","_htmlPreview","_textPreview","priorityMap","authentication","billing","onboarding","product","marketing","_data","registerProvider","setTemplateRegistry","registry","hubspotClient","getHubSpotClient","HUBSPOT_API_KEY","accessToken","logger","properties","key","Object","response","contactProperties","updateContact","basicApi","entries","getContact","syncUserToHubSpot","userData","mapUserDataToHubSpotProperties","existingContact","findContactByEmail","updated","updateHubSpotContact","created","createHubSpotContact","crm","contacts","searchApi","doSearch","filterGroups","filters","propertyName","operator","limit","_error","warn","firstname","lastname","lastName","vreko_user_id","extension_installed","extensionInstalled","extension_version","extensionVersion","pioneer_tier","pioneer_points","subscription_plan","subscription_status","subscriptionStatus","total_snapshots","total_recoveries","totalRestores","signup_source","signupSource","onboarding_completed","onboardingCompleted","ai_tool_primary","aiToolPrimary","extensionInstallDate","extension_install_date","getTime","pioneerJoinDate","pioneer_join_date","subscriptionStartDate","subscription_start_date","last_activity_date","lastSnapshotDate","last_snapshot_date","firstSnapshotDate","first_snapshot_date","firstRestoreDate","first_restore_date","mrr","fromEntries","v","stripeClient","db","hash","createApiKeyBodySchema","organizationId","permissions","maxSnapshots","cloudBackup","advancedDetection","customRules","teamSharing","rateLimitEnabled","rateLimitMax","rateLimitTimeWindow","expiresAt","coerce","record","unknown","verifyApiKeyBodySchema","deleteApiKeyBodySchema","keyId","apiKeyPlugin","endpoints","createApiKey","createAuthEndpoint","method","body","openapi","operationId","responses","createdAt","nullable","ctx","sessionData","getSessionFromCtx","user","APIError","plainKey","generateAPIKey","keyHash","hashAPIKey","start","substring","keyPreview","nanoid","insert","apiKeys","prefix","updatedAt","json","verifyApiKey","isValid","candidates","select","where","and","eq","isNull","revokedAt","or","gte","matchedKey","candidate","matches","verifyAPIKeyHash","update","lastUsedAt","catch","err","valid","remaining","lastRefillAt","deleteApiKey","rowCount","organization"],"mappings":"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","file":"auth-HP6IY25M.js","sourcesContent":["/**\n * ConfigStore v2 - Unified Zod Schemas\n *\n * Single source of truth for all configuration across:\n * - VS Code Extension\n * - CLI\n * - MCP Server\n *\n * Type-safe with runtime validation. Zero-config defaults included.\n */\n\nimport { WorkspaceRegistrationSchema } from \"@vreko/contracts/context\";\nimport { z } from \"zod\";\n\n/**\n * Protection levels (canonical)\n */\nexport const ProtectionLevelSchema = z.enum([\"watch\", \"warn\", \"block\"]);\nexport type ProtectionLevel = z.infer<typeof ProtectionLevelSchema>;\n\n/**\n * Single protection rule\n */\nexport const ProtectionRuleSchema = z.object({\n\tpattern: z.string().describe(\"Glob pattern (e.g., '*.env*', 'package.json')\"),\n\tlevel: ProtectionLevelSchema,\n\treason: z.string().optional().describe(\"Why this pattern is protected\"),\n\tprecedence: z.number().int().min(0).max(1000).default(0),\n});\nexport type ProtectionRule = z.infer<typeof ProtectionRuleSchema>;\n\n/**\n * Engine configuration\n */\nexport const EngineConfigSchema = z.object({\n\tmaxDepth: z.number().int().min(0).max(10).default(2).describe(\"Max dependency tree depth for analysis\"),\n\tburstThreshold: z\n\t\t.number()\n\t\t.int()\n\t\t.min(1)\n\t\t.max(100)\n\t\t.default(30)\n\t\t.describe(\"Min simultaneous file changes to trigger burst detection\"),\n\tcooldowns: z\n\t\t.object({\n\t\t\tblock: z.number().int().min(0).default(60000),\n\t\t\twarn: z.number().int().min(0).default(30000),\n\t\t\twatch: z.number().int().min(0).default(0),\n\t\t})\n\t\t.default({ block: 60000, warn: 30000, watch: 0 })\n\t\t.describe(\"Cooldown durations (ms) between alerts per level\"),\n});\nexport type EngineConfig = z.infer<typeof EngineConfigSchema>;\n\n/**\n * Ignore patterns\n */\nexport const IgnorePatternsSchema = z\n\t.array(z.string())\n\t.default([])\n\t.describe(\"Glob patterns to exclude from protection (e.g., node_modules, .git)\");\n\n/**\n * Privacy and consent settings for VS Code Extension\n */\nexport const PrivacySettingsSchema = z\n\t.object({\n\t\tconsent: z.boolean().default(false).describe(\"User has given privacy consent\"),\n\t\tclipboard: z.boolean().default(false).describe(\"Allow clipboard monitoring\"),\n\t\twatcher: z.boolean().default(false).describe(\"Allow file watcher\"),\n\t\tgitWrapper: z.boolean().default(false).describe(\"Allow git wrapper integration\"),\n\t\tlastReminded: z.string().optional().describe(\"ISO timestamp of last consent reminder\"),\n\t})\n\t.default({});\nexport type PrivacySettings = z.infer<typeof PrivacySettingsSchema>;\n\n/**\n * Notification settings\n */\nexport const NotificationsSettingsSchema = z\n\t.object({\n\t\tenabled: z.boolean().default(true),\n\t\tquietHours: z\n\t\t\t.object({\n\t\t\t\tstart: z.string().default(\"22:00\"),\n\t\t\t\tend: z.string().default(\"08:00\"),\n\t\t\t})\n\t\t\t.default({ start: \"22:00\", end: \"08:00\" }),\n\t\trateLimit: z.number().int().min(1).default(5).describe(\"Max notifications per minute\"),\n\t})\n\t.default({});\nexport type NotificationsSettings = z.infer<typeof NotificationsSettingsSchema>;\n\n/**\n * Snapshot settings\n */\nexport const SnapshotSettingsSchema = z\n\t.object({\n\t\tenabled: z.boolean().default(true),\n\t\tautoCreate: z.boolean().default(true),\n\t\tretentionDays: z.number().int().min(1).default(30),\n\t})\n\t.default({});\nexport type SnapshotSettings = z.infer<typeof SnapshotSettingsSchema>;\n\n/**\n * AI features settings\n */\nexport const AISettingsSchema = z\n\t.object({\n\t\tenabled: z.boolean().default(true),\n\t\tcontext: z.boolean().default(true).describe(\"Include code context in AI analysis\"),\n\t\tcopilot: z.boolean().default(true).describe(\"Integrate with GitHub Copilot\"),\n\t})\n\t.default({});\nexport type AISettings = z.infer<typeof AISettingsSchema>;\n\n/**\n * Guardian plugin settings\n */\nexport const GuardianPluginsSchema = z\n\t.object({\n\t\tsecretDetection: z.boolean().default(true),\n\t\tmockReplacement: z.boolean().default(true),\n\t\tphantomDependency: z.boolean().default(true),\n\t})\n\t.default({});\n\nexport const GuardianThresholdsSchema = z\n\t.object({\n\t\twarn: z.number().int().min(0).default(6),\n\t\tblock: z.number().int().min(0).default(8),\n\t})\n\t.default({ warn: 6, block: 8 });\n\nexport const GuardianSettingsSchema = z\n\t.object({\n\t\tenabled: z.boolean().default(true),\n\t\twarnThreshold: z.number().int().min(0).max(100).default(5),\n\t\tblockThreshold: z.number().int().min(0).max(100).default(8),\n\t\tprotectionLevel: ProtectionLevelSchema.default(\"warn\"),\n\t\tplugins: GuardianPluginsSchema,\n\t\tthresholds: GuardianThresholdsSchema,\n\t})\n\t.default({});\nexport type GuardianSettings = z.infer<typeof GuardianSettingsSchema>;\n\n/**\n * Auto-decision engine settings\n */\nexport const AutoDecisionSettingsSchema = z\n\t.object({\n\t\triskThreshold: z\n\t\t\t.number()\n\t\t\t.int()\n\t\t\t.min(0)\n\t\t\t.max(100)\n\t\t\t.default(60)\n\t\t\t.describe(\"Risk score threshold (0-100) for automatic snapshot creation\"),\n\t\tnotifyThreshold: z\n\t\t\t.number()\n\t\t\t.int()\n\t\t\t.min(0)\n\t\t\t.max(100)\n\t\t\t.default(40)\n\t\t\t.describe(\"Risk score threshold (0-100) for user notifications\"),\n\t\tminFilesForBurst: z\n\t\t\t.number()\n\t\t\t.int()\n\t\t\t.min(1)\n\t\t\t.default(3)\n\t\t\t.describe(\"Minimum files changed simultaneously to trigger burst detection\"),\n\t\tmaxSnapshotsPerMinute: z\n\t\t\t.number()\n\t\t\t.int()\n\t\t\t.min(1)\n\t\t\t.default(4)\n\t\t\t.describe(\"Maximum snapshots allowed per minute (rate limiting)\"),\n\t})\n\t.default({});\nexport type AutoDecisionSettings = z.infer<typeof AutoDecisionSettingsSchema>;\n\n/**\n * MCP Server configuration\n */\nexport const MCPSettingsSchema = z\n\t.object({\n\t\tperformanceBudgets: z\n\t\t\t.record(z.number().int().min(0))\n\t\t\t.default({ analyze_risk: 200, create_snapshot: 500 })\n\t\t\t.describe(\"Performance budgets (ms) for MCP operations\"),\n\t\tcontext7: z\n\t\t\t.object({\n\t\t\t\tapiKey: z.string().optional(),\n\t\t\t\tapiUrl: z.string().url().default(\"https://context7.com/api\"),\n\t\t\t\tcacheTtlSearch: z.number().int().min(0).default(3600),\n\t\t\t\tcacheTtlDocs: z.number().int().min(0).default(86400),\n\t\t\t})\n\t\t\t.default({}),\n\t\tapi: z\n\t\t\t.object({\n\t\t\t\tapiKey: z.string().optional(),\n\t\t\t\tbaseUrl: z.string().url().default(\"https://api.vreko.dev\"),\n\t\t\t})\n\t\t\t.default({}),\n\t\thttp: z\n\t\t\t.object({\n\t\t\t\tallowedOrigins: z.array(z.string()).default([\"*\"]),\n\t\t\t\tapiUrl: z.string().url().default(\"http://api:8080\"),\n\t\t\t})\n\t\t\t.default({}),\n\t})\n\t.default({});\nexport type MCPSettings = z.infer<typeof MCPSettingsSchema>;\n\n/**\n * Unified settings for AI detection and behavior\n */\nexport const SettingsSchema = z\n\t.object({\n\t\tdefaultProtectionLevel: ProtectionLevelSchema.default(\"watch\"),\n\t\trequireSnapshotMessage: z.boolean().default(true),\n\t\tmaxSnapshots: z.number().int().min(1).default(100),\n\t\taiDetectionEnabled: z.boolean().default(true),\n\t\tautoRestoreOnDetection: z.boolean().default(false),\n\t\tprivacy: PrivacySettingsSchema,\n\t\tnotifications: NotificationsSettingsSchema,\n\t\tsnapshots: SnapshotSettingsSchema,\n\t\tai: AISettingsSchema,\n\t\tguardian: GuardianSettingsSchema,\n\t\tautoDecision: AutoDecisionSettingsSchema,\n\t\twebBaseUrl: z.string().url().default(\"https://console.vreko.dev\"),\n\t\tapiBaseUrl: z.string().url().optional(),\n\t\tmcp: MCPSettingsSchema,\n\t})\n\t.default({});\nexport type Settings = z.infer<typeof SettingsSchema>;\n\n/**\n * Policy overrides (temporary protection changes)\n */\nexport const PolicyOverrideSchema = z.object({\n\tpattern: z.string(),\n\tlevel: ProtectionLevelSchema,\n\tttl: z.number().optional().describe(\"Expiration timestamp (ms since epoch)\"),\n});\n\nexport const PoliciesSchema = z\n\t.object({\n\t\tenforceProtectionLevels: z.boolean().default(false),\n\t\tallowOverrides: z.boolean().default(true),\n\t\toverrides: z.array(PolicyOverrideSchema).default([]),\n\t})\n\t.default({});\nexport type Policies = z.infer<typeof PoliciesSchema>;\n\n/**\n * Main configuration schema - compatible across all systems\n */\nexport const ConfigStoreV2Schema = z.object({\n\tversion: z.literal(2).default(2),\n\tprotections: z.array(ProtectionRuleSchema).default([]),\n\tignore: IgnorePatternsSchema,\n\tengine: EngineConfigSchema.default({}),\n\tsettings: SettingsSchema,\n\tpolicies: PoliciesSchema,\n\tmcp: MCPSettingsSchema.optional(),\n\t// Phase 2: Workspace registry (SB-CTX-001)\n\tworkspaces: z.array(WorkspaceRegistrationSchema).default([]),\n});\n\nexport type ConfigStoreV2 = z.infer<typeof ConfigStoreV2Schema>;\n\n/**\n * Default empty config (fully populated with schema defaults)\n */\nexport const DEFAULT_CONFIG: ConfigStoreV2 = {\n\tversion: 2,\n\tprotections: [],\n\tignore: [],\n\tworkspaces: [],\n\tengine: {\n\t\tmaxDepth: 2,\n\t\tburstThreshold: 30,\n\t\tcooldowns: { block: 60000, warn: 30000, watch: 0 },\n\t},\n\tsettings: {\n\t\tdefaultProtectionLevel: \"watch\",\n\t\trequireSnapshotMessage: true,\n\t\tmaxSnapshots: 100,\n\t\taiDetectionEnabled: true,\n\t\tautoRestoreOnDetection: false,\n\t\tprivacy: {\n\t\t\tconsent: false,\n\t\t\tclipboard: false,\n\t\t\twatcher: false,\n\t\t\tgitWrapper: false,\n\t\t},\n\t\tnotifications: {\n\t\t\tenabled: true,\n\t\t\tquietHours: { start: \"22:00\", end: \"08:00\" },\n\t\t\trateLimit: 5,\n\t\t},\n\t\tsnapshots: {\n\t\t\tenabled: true,\n\t\t\tautoCreate: true,\n\t\t\tretentionDays: 30,\n\t\t},\n\t\tai: {\n\t\t\tenabled: true,\n\t\t\tcontext: true,\n\t\t\tcopilot: true,\n\t\t},\n\t\tguardian: {\n\t\t\tenabled: true,\n\t\t\twarnThreshold: 5,\n\t\t\tblockThreshold: 8,\n\t\t\tprotectionLevel: \"warn\",\n\t\t\tplugins: {\n\t\t\t\tsecretDetection: true,\n\t\t\t\tmockReplacement: true,\n\t\t\t\tphantomDependency: true,\n\t\t\t},\n\t\t\tthresholds: {\n\t\t\t\twarn: 6,\n\t\t\t\tblock: 8,\n\t\t\t},\n\t\t},\n\t\tautoDecision: {\n\t\t\triskThreshold: 60,\n\t\t\tnotifyThreshold: 40,\n\t\t\tminFilesForBurst: 3,\n\t\t\tmaxSnapshotsPerMinute: 4,\n\t\t},\n\t\twebBaseUrl: \"https://console.vreko.dev\",\n\t\tmcp: {\n\t\t\tperformanceBudgets: { analyze_risk: 200, create_snapshot: 500 },\n\t\t\tcontext7: { apiUrl: \"https://context7.com/api\", cacheTtlSearch: 3600, cacheTtlDocs: 86400 },\n\t\t\tapi: { baseUrl: \"https://api.vreko.dev\" },\n\t\t\thttp: { allowedOrigins: [\"*\"], apiUrl: \"http://api:8080\" },\n\t\t},\n\t},\n\tpolicies: {\n\t\tenforceProtectionLevels: false,\n\t\tallowOverrides: true,\n\t\toverrides: [],\n\t},\n};\n\n/**\n * Zero-config defaults for common patterns\n */\nexport const ZERO_CONFIG_DEFAULTS: ConfigStoreV2 = {\n\t...DEFAULT_CONFIG,\n\tprotections: [\n\t\t{\n\t\t\tpattern: \"*.env*\",\n\t\t\tlevel: \"block\",\n\t\t\treason: \"Environment files contain sensitive credentials\",\n\t\t\tprecedence: 100,\n\t\t},\n\t\t{\n\t\t\tpattern: \".env.local\",\n\t\t\tlevel: \"block\",\n\t\t\treason: \"Local environment overrides\",\n\t\t\tprecedence: 100,\n\t\t},\n\t\t{\n\t\t\tpattern: \"**/*.secret*\",\n\t\t\tlevel: \"block\",\n\t\t\treason: \"Secret files must be protected\",\n\t\t\tprecedence: 100,\n\t\t},\n\t\t{\n\t\t\tpattern: \"**/credentials*\",\n\t\t\tlevel: \"block\",\n\t\t\treason: \"Credential files must be protected\",\n\t\t\tprecedence: 100,\n\t\t},\n\t\t{\n\t\t\tpattern: \"package*.json\",\n\t\t\tlevel: \"warn\",\n\t\t\treason: \"Package files affect dependencies\",\n\t\t\tprecedence: 50,\n\t\t},\n\t\t{\n\t\t\tpattern: \"**/migrations/*\",\n\t\t\tlevel: \"block\",\n\t\t\treason: \"Database migrations are irreversible\",\n\t\t\tprecedence: 100,\n\t\t},\n\t\t{\n\t\t\tpattern: \".env\",\n\t\t\tlevel: \"block\",\n\t\t\treason: \"Environment file\",\n\t\t\tprecedence: 100,\n\t\t},\n\t\t{\n\t\t\tpattern: \".git/**\",\n\t\t\tlevel: \"watch\",\n\t\t\treason: \"Git metadata\",\n\t\t\tprecedence: 10,\n\t\t},\n\t],\n\tignore: [\"node_modules/**\", \".git/**\", \"dist/**\", \"build/**\", \"*.log\"],\n};\n\n/**\n * Validate config against schema\n */\nexport function validateConfig(\n\tdata: unknown,\n): { valid: true; data: ConfigStoreV2 } | { valid: false; errors: string[] } {\n\ttry {\n\t\tconst parsed = ConfigStoreV2Schema.parse(data);\n\t\treturn { valid: true, data: parsed };\n\t} catch (err) {\n\t\tif (err instanceof z.ZodError) {\n\t\t\tconst errors = err.errors.map((e) => `${e.path.join(\".\")}: ${e.message}`);\n\t\t\treturn { valid: false, errors };\n\t\t}\n\t\treturn { valid: false, errors: [\"Unknown validation error\"] };\n\t}\n}\n\n/**\n * Parse and validate config from JSON string\n */\nexport function parseConfig(\n\tjsonString: string,\n): { valid: true; data: ConfigStoreV2 } | { valid: false; errors: string[] } {\n\ttry {\n\t\tconst data = JSON.parse(jsonString);\n\t\treturn validateConfig(data);\n\t} catch (err) {\n\t\treturn { valid: false, errors: [err instanceof Error ? err.message : \"Failed to parse JSON\"] };\n\t}\n}\n\n/**\n * Validate that a JSON string is well-formed and can be parsed back.\n * Catches malformed output before writing to disk.\n *\n * @param jsonString - The JSON string to validate\n * @returns { valid: true } or { valid: false; errors: string[] }\n */\nexport function validateJsonOutput(jsonString: string): { valid: true } | { valid: false; errors: string[] } {\n\tconst errors: string[] = [];\n\n\t// Check for suspicious caret character (possible typo)\n\tif (/\\^/.test(jsonString)) {\n\t\terrors.push(\"Suspicious caret (^) character found - possible typo\");\n\t}\n\n\t// Check for control characters (codes 0-8, 11, 12, 14-31) without regex control chars\n\tconst hasControlChars = Array.from(jsonString).some((ch) => {\n\t\tconst code = ch.charCodeAt(0);\n\t\treturn (code >= 0 && code <= 8) || code === 11 || code === 12 || (code >= 14 && code <= 31);\n\t});\n\tif (hasControlChars) {\n\t\terrors.push(\"Control characters found in output\");\n\t}\n\n\t// Try to parse the JSON to ensure it's valid\n\ttry {\n\t\tJSON.parse(jsonString);\n\t} catch (err) {\n\t\terrors.push(`Invalid JSON: ${err instanceof Error ? err.message : \"Parse error\"}`);\n\t}\n\n\tif (errors.length > 0) {\n\t\treturn { valid: false, errors };\n\t}\n\n\treturn { valid: true };\n}\n\n/**\n * Safely stringify config to JSON with validation.\n * Validates the output string before returning.\n *\n * @param config - Config to stringify\n * @param space - Number of spaces for indentation (default: 2)\n * @returns { success: true; json: string } or { success: false; errors: string[] }\n */\nexport function safeStringifyConfig(\n\tconfig: unknown,\n\tspace = 2,\n): { success: true; json: string } | { success: false; errors: string[] } {\n\ttry {\n\t\tconst jsonString = JSON.stringify(config, null, space);\n\n\t\t// Validate the output\n\t\tconst validation = validateJsonOutput(jsonString);\n\t\tif (!validation.valid) {\n\t\t\treturn { success: false, errors: validation.errors };\n\t\t}\n\n\t\treturn { success: true, json: jsonString };\n\t} catch (err) {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terrors: [`Failed to stringify: ${err instanceof Error ? err.message : \"Unknown error\"}`],\n\t\t};\n\t}\n}\n","import { Resend } from \"resend\";\n\nfunction getResendClient(): Resend {\n\tconst apiKey = process.env.RESEND_API_KEY;\n\tif (!apiKey) {\n\t\tthrow new Error(\"RESEND_API_KEY environment variable is required\");\n\t}\n\treturn new Resend(apiKey);\n}\n\nlet _resend: Resend | undefined;\n\nexport const resend = new Proxy({} as Resend, {\n\tget(_target, prop) {\n\t\tif (!_resend) {\n\t\t\t_resend = getResendClient();\n\t\t}\n\t\treturn (_resend as unknown as Record<string | symbol, unknown>)[prop];\n\t},\n});\n\nexport async function sendEmail({\n\tfrom,\n\tto,\n\tsubject,\n\thtml,\n\ttext,\n}: {\n\tfrom: string;\n\tto: string;\n\tsubject: string;\n\thtml: string;\n\ttext?: string;\n}) {\n\tconst client = getResendClient();\n\treturn client.emails.send({\n\t\tfrom,\n\t\tto,\n\t\tsubject,\n\t\thtml,\n\t\ttext,\n\t});\n}\n","/**\n * Billing Event Handlers\n *\n * Handles email sending for billing and subscription events:\n * - Payment confirmations\n * - Subscription changes\n * - Failed payments\n * - Subscription cancellations\n */\nexport class BillingEmailHandler {\n emailService;\n constructor(emailService) {\n this.emailService = emailService;\n /* intentionally empty */\n }\n /**\n * Send welcome email after successful subscription\n */\n async sendWelcome(params) {\n const request = {\n to: { email: params.to, userId: params.userId },\n category: \"onboarding\",\n priority: \"high\",\n template: {\n id: \"product.welcome\",\n props: {\n firstName: params.firstName,\n planName: params.planName,\n planFeatures: params.planFeatures,\n dashboardUrl: params.dashboardUrl,\n docsUrl: params.docsUrl,\n pioneerTier: params.pioneerTier,\n pioneerPoints: params.pioneerPoints,\n },\n },\n };\n await this.emailService.send(request);\n }\n /**\n * Send subscription cancellation confirmation\n */\n async sendCancellationConfirmation(params) {\n const request = {\n to: { email: params.to, userId: params.userId },\n category: \"billing\",\n priority: \"high\",\n template: {\n id: \"product.system-alert\",\n props: {\n alertType: \"subscription_cancelled\",\n title: \"Subscription Cancelled\",\n message: `Your ${params.planName} subscription has been cancelled and will remain active until ${params.cancellationDate.toLocaleDateString()}. Your data will be retained for ${params.dataRetentionDays} days after that date.`,\n severity: \"info\",\n actionRequired: false,\n additionalDetails: \"You can reactivate your subscription at any time before the retention period ends.\",\n timestamp: new Date().toISOString(),\n },\n },\n };\n await this.emailService.send(request);\n }\n /**\n * Send payment failure alert\n */\n async sendPaymentFailed(params) {\n const request = {\n to: { email: params.to, userId: params.userId },\n category: \"billing\",\n priority: \"critical\",\n template: {\n id: \"product.system-alert\",\n props: {\n alertType: \"payment_failed\",\n title: \"Payment Failed\",\n message: `We were unable to process your payment of ${params.amount} ${params.currency} for your ${params.planName} subscription. We'll automatically retry on ${params.retryDate.toLocaleDateString()}.`,\n severity: \"warning\",\n actionRequired: true,\n actionUrl: params.updatePaymentUrl,\n actionLabel: \"Update Payment Method\",\n additionalDetails: \"To avoid service interruption, please update your payment method or ensure sufficient funds are available.\",\n timestamp: new Date().toISOString(),\n },\n },\n };\n await this.emailService.send(request);\n }\n /**\n * Send subscription upgraded notification\n */\n async sendSubscriptionUpgraded(params) {\n const request = {\n to: { email: params.to, userId: params.userId },\n category: \"billing\",\n priority: \"normal\",\n template: {\n id: \"product.system-alert\",\n props: {\n alertType: \"subscription_upgraded\",\n title: \"Subscription Upgraded\",\n message: `You've successfully upgraded from ${params.oldPlan} to ${params.newPlan}. Your new features are now active!`,\n severity: \"info\",\n actionRequired: false,\n actionUrl: params.dashboardUrl,\n actionLabel: \"Explore New Features\",\n additionalDetails: `New features: ${params.newFeatures.join(\", \")}`,\n timestamp: new Date().toISOString(),\n },\n },\n };\n await this.emailService.send(request);\n }\n /**\n * Send trial ending reminder\n */\n async sendTrialEnding(params) {\n const request = {\n to: { email: params.to, userId: params.userId },\n category: \"billing\",\n priority: \"high\",\n template: {\n id: \"product.system-alert\",\n props: {\n alertType: \"trial_ending\",\n title: `Your ${params.planName} Trial Ends Soon`,\n message: `Your free trial ends in ${params.daysRemaining} day${params.daysRemaining !== 1 ? \"s\" : \"\"} on ${params.trialEndDate.toLocaleDateString()}. Upgrade now to keep your data and continue using Vreko.`,\n severity: \"warning\",\n actionRequired: true,\n actionUrl: params.upgradeUrl,\n actionLabel: \"Upgrade Now\",\n additionalDetails: \"After your trial ends, you can still access your account but snapshot capture will be disabled until you upgrade.\",\n timestamp: new Date().toISOString(),\n },\n },\n };\n await this.emailService.send(request);\n }\n /**\n * Send suspension notice (Day 8 of grace period)\n *\n * Called when subscription transitions from past_due to suspended\n * after 7-day grace period expires without successful payment.\n */\n async sendSuspensionNotice(params) {\n const request = {\n to: { email: params.to, userId: params.userId },\n category: \"billing\",\n priority: \"critical\",\n template: {\n id: \"product.system-alert\",\n props: {\n alertType: \"subscription_suspended\",\n title: \"Your Subscription Has Been Suspended\",\n message: `Your ${params.planName} subscription has been suspended due to payment issues. Cloud features including snapshot sync, pattern library, and history are now paused.`,\n severity: \"error\",\n actionRequired: true,\n actionUrl: params.reactivateUrl,\n actionLabel: \"Reactivate Now\",\n additionalDetails: \"Update your payment method to restore full access. Your local CLI features remain available, but cloud syncing is disabled until payment is resolved.\",\n timestamp: new Date().toISOString(),\n },\n },\n };\n await this.emailService.send(request);\n }\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Body, Container, Font, Head, Hr, Html, Img, Link, Preview, Section, Tailwind, Text, } from \"@react-email/components\";\n// Brand tokens - mirrors brand/colors.json\nexport const brand = {\n background: \"#0A0A0A\",\n surface: \"#111111\",\n surfaceElevated: \"#1A1A1A\",\n border: \"#27272A\",\n primary: \"#4ADE80\",\n primaryDark: \"#22C55E\",\n textPrimary: \"#FAFAFA\",\n textSecondary: \"#A1A1AA\",\n textMuted: \"#52525B\",\n danger: \"#EF4444\",\n warning: \"#FF6B35\",\n success: \"#34D399\",\n info: \"#3B82F6\",\n};\n// Absolute URLs required by email clients\nconst EMAIL_HEADER_URL = \"https://vreko.dev/brand/email/email-header.png\";\nconst EMAIL_FOOTER_ICON_URL = \"https://vreko.dev/brand/email/email-footer-icon.png\";\nexport default function Wrapper({ preview, children }) {\n return (_jsxs(Html, { lang: \"en\", children: [_jsx(Head, { children: _jsx(Font, { fontFamily: \"Inter\", fallbackFontFamily: \"Arial\", fontWeight: 400, fontStyle: \"normal\" }) }), _jsx(Tailwind, { config: {\n theme: {\n extend: {\n colors: {\n \"sb-bg\": brand.background,\n \"sb-surface\": brand.surface,\n \"sb-elevated\": brand.surfaceElevated,\n \"sb-border\": brand.border,\n \"sb-green\": brand.primary,\n \"sb-green-dark\": brand.primaryDark,\n \"sb-text\": brand.textPrimary,\n \"sb-muted\": brand.textSecondary,\n \"sb-faint\": brand.textMuted,\n \"sb-danger\": brand.danger,\n \"sb-warning\": brand.warning,\n \"sb-success\": brand.success,\n \"sb-info\": brand.info,\n },\n },\n },\n }, children: _jsxs(Body, { style: { backgroundColor: brand.background, margin: 0, padding: 0 }, children: [_jsx(Preview, { children: preview }), _jsx(Section, { style: { backgroundColor: brand.background, padding: \"32px 16px\" }, children: _jsxs(Container, { style: { maxWidth: \"600px\", margin: \"0 auto\" }, children: [_jsx(Section, { style: { marginBottom: 0 }, children: _jsx(Img, { src: EMAIL_HEADER_URL, width: \"600\", height: \"200\", alt: \"Vreko\", style: { width: \"100%\", display: \"block\", borderRadius: \"8px 8px 0 0\" } }) }), _jsx(Section, { style: {\n backgroundColor: brand.surface,\n borderRadius: \"0 0 8px 8px\",\n border: `1px solid ${brand.border}`,\n borderTop: \"none\",\n padding: \"32px\",\n }, children: children }), _jsxs(Section, { style: { marginTop: \"24px\", padding: \"0 16px\", textAlign: \"center\" }, children: [_jsx(Img, { src: EMAIL_FOOTER_ICON_URL, width: \"24\", height: \"24\", alt: \"\", style: { display: \"block\", margin: \"0 auto 12px\" } }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", lineHeight: \"1.5\", margin: 0 }, children: \"Vreko - AI-Aware Code Protection\" }), _jsx(Hr, { style: { borderColor: brand.border, margin: \"12px 0\" } }), _jsxs(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: [_jsx(Link, { href: \"https://vreko.dev/unsubscribe\", style: { color: brand.textMuted, textDecoration: \"underline\" }, children: \"Unsubscribe\" }), \" · \", _jsx(Link, { href: \"https://vreko.dev/privacy\", style: { color: brand.textMuted, textDecoration: \"underline\" }, children: \"Privacy Policy\" })] })] })] }) })] }) })] }));\n}\n","// ESM imports fixed for Node.js v22+\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Button } from \"@react-email/components\";\nimport { brand } from \"./Wrapper.js\";\nexport function PrimaryButton({ href, children }) {\n return (_jsx(Button, { href: href, style: {\n backgroundColor: brand.primary,\n color: brand.background,\n fontWeight: 600,\n borderRadius: \"8px\",\n padding: \"12px 24px\",\n fontSize: \"14px\",\n textDecoration: \"none\",\n display: \"inline-block\",\n }, children: children }));\n}\nexport function DangerButton({ href, children }) {\n return (_jsx(Button, { href: href, style: {\n backgroundColor: brand.danger,\n color: \"#FFFFFF\",\n fontWeight: 600,\n borderRadius: \"8px\",\n padding: \"12px 24px\",\n fontSize: \"14px\",\n textDecoration: \"none\",\n display: \"inline-block\",\n }, children: children }));\n}\nexport function GhostButton({ href, children }) {\n return (_jsx(Button, { href: href, style: {\n backgroundColor: \"transparent\",\n color: brand.textPrimary,\n fontWeight: 600,\n borderRadius: \"8px\",\n padding: \"12px 24px\",\n fontSize: \"14px\",\n textDecoration: \"none\",\n display: \"inline-block\",\n border: `1px solid ${brand.border}`,\n }, children: children }));\n}\n// Keep default export for backwards compatibility\nexport default PrimaryButton;\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Heading, Hr, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const MagicLinkPropsSchema = z.object({\n loginUrl: z.string().url(),\n expiresInMinutes: z.number().default(15),\n ipAddress: z.string().optional(),\n userAgent: z.string().optional(),\n});\nfunction MagicLink({ loginUrl, expiresInMinutes, ipAddress, userAgent }) {\n return (_jsxs(Wrapper, { preview: `Click to sign in - link expires in ${expiresInMinutes} minutes`, children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 12px\" }, children: \"\\uD83E\\uDD8E Your sign-in link\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: [\"Click the button below to sign in to Vreko. This link expires in \", expiresInMinutes, \" minutes and can only be used once.\"] }), _jsx(PrimaryButton, { href: loginUrl, children: \"Sign In to Vreko\" }), (ipAddress ?? userAgent) && (_jsxs(_Fragment, { children: [_jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"6px\",\n padding: \"16px\",\n border: `1px solid ${brand.border}`,\n }, children: [_jsx(Text, { style: { color: brand.textSecondary, fontSize: \"12px\", margin: \"0 0 4px\", fontWeight: 600 }, children: \"Request details\" }), ipAddress && (_jsxs(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: \"0 0 2px\" }, children: [\"IP address: \", ipAddress] })), userAgent && (_jsxs(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: [\"Device: \", userAgent] }))] })] })), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: \"If you didn't request this link, you can safely ignore this email. Someone may have entered your email address by mistake.\" })] }));\n}\nMagicLink.PreviewProps = {\n loginUrl: \"https://vreko.dev/auth/magic/preview-token\",\n expiresInMinutes: 15,\n ipAddress: \"203.0.113.42\",\n userAgent: \"Chrome on macOS\",\n};\nexport const authMagicLinkTemplate = {\n id: \"auth.magic-link\",\n category: \"authentication\",\n subject: () => \"Your Vreko sign-in link\",\n component: MagicLink,\n previewProps: MagicLink.PreviewProps,\n schema: MagicLinkPropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Heading, Hr, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { DangerButton, PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const NewDeviceLoginPropsSchema = z.object({\n deviceName: z.string(),\n location: z.string().optional(),\n ipAddress: z.string(),\n timestamp: z.string(),\n approveUrl: z.string().url(),\n denyUrl: z.string().url(),\n});\nfunction NewDeviceLogin({ deviceName, location, ipAddress, timestamp, approveUrl, denyUrl }) {\n return (_jsxs(Wrapper, { preview: \"New device detected - verify this was you\", children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 12px\" }, children: \"\\uD83E\\uDD8E New sign-in detected\" }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: \"We detected a new sign-in to your Vreko account. Please verify this was you.\" }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n border: `1px solid ${brand.border}`,\n marginBottom: \"24px\",\n }, children: [_jsx(Text, { style: {\n color: brand.textSecondary,\n fontSize: \"12px\",\n fontWeight: 600,\n margin: \"0 0 12px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n }, children: \"Sign-in details\" }), _jsx(\"table\", { style: { width: \"100%\", borderCollapse: \"collapse\" }, children: _jsxs(\"tbody\", { children: [_jsxs(\"tr\", { children: [_jsx(\"td\", { style: { color: brand.textMuted, fontSize: \"13px\", padding: \"4px 0\", width: \"40%\" }, children: \"Device\" }), _jsx(\"td\", { style: { color: brand.textPrimary, fontSize: \"13px\", padding: \"4px 0\" }, children: deviceName })] }), _jsxs(\"tr\", { children: [_jsx(\"td\", { style: { color: brand.textMuted, fontSize: \"13px\", padding: \"4px 0\" }, children: \"IP address\" }), _jsx(\"td\", { style: { color: brand.textPrimary, fontSize: \"13px\", padding: \"4px 0\" }, children: ipAddress })] }), location && (_jsxs(\"tr\", { children: [_jsx(\"td\", { style: { color: brand.textMuted, fontSize: \"13px\", padding: \"4px 0\" }, children: \"Location\" }), _jsx(\"td\", { style: { color: brand.textPrimary, fontSize: \"13px\", padding: \"4px 0\" }, children: location })] })), _jsxs(\"tr\", { children: [_jsx(\"td\", { style: { color: brand.textMuted, fontSize: \"13px\", padding: \"4px 0\" }, children: \"Time\" }), _jsx(\"td\", { style: { color: brand.textPrimary, fontSize: \"13px\", padding: \"4px 0\" }, children: timestamp })] })] }) })] }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", margin: \"0 0 16px\" }, children: \"Was this you?\" }), _jsx(\"table\", { style: { borderCollapse: \"collapse\" }, children: _jsx(\"tbody\", { children: _jsxs(\"tr\", { children: [_jsx(\"td\", { style: { paddingRight: \"12px\" }, children: _jsx(PrimaryButton, { href: approveUrl, children: \"Yes, this was me\" }) }), _jsx(\"td\", { children: _jsx(DangerButton, { href: denyUrl, children: \"No, secure my account\" }) })] }) }) }), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: \"If this was you, no action is needed. If you don't recognize this activity, secure your account immediately by clicking \\\"No, secure my account\\\".\" })] }));\n}\nNewDeviceLogin.PreviewProps = {\n deviceName: \"Chrome on macOS\",\n location: \"San Francisco, CA\",\n ipAddress: \"203.0.113.42\",\n timestamp: \"March 29, 2026 at 2:34 PM UTC\",\n approveUrl: \"https://vreko.dev/auth/device/approve/preview\",\n denyUrl: \"https://vreko.dev/auth/device/deny/preview\",\n};\nexport const authNewDeviceLoginTemplate = {\n id: \"auth.new-device-login\",\n category: \"authentication\",\n subject: () => \"🦎 New sign-in to your Vreko account\",\n component: NewDeviceLogin,\n previewProps: NewDeviceLogin.PreviewProps,\n schema: NewDeviceLoginPropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Heading, Hr, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { DangerButton, PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const ResetPasswordPropsSchema = z.object({\n resetUrl: z.string().url(),\n expiresInMinutes: z.number().default(60),\n requestedFrom: z\n .object({\n ipAddress: z.string(),\n location: z.string().optional(),\n })\n .optional(),\n});\nfunction ResetPassword({ resetUrl, expiresInMinutes, requestedFrom }) {\n return (_jsxs(Wrapper, { preview: \"A password reset was requested for your account\", children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 12px\" }, children: \"Reset your password\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: [\"We received a request to reset the password for your Vreko account. Click the button below to choose a new password. This link expires in \", expiresInMinutes, \" minutes.\"] }), _jsx(PrimaryButton, { href: resetUrl, children: \"Reset Password\" }), requestedFrom && (_jsxs(_Fragment, { children: [_jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"6px\",\n padding: \"16px\",\n border: `1px solid ${brand.border}`,\n }, children: [_jsx(Text, { style: { color: brand.textSecondary, fontSize: \"12px\", margin: \"0 0 4px\", fontWeight: 600 }, children: \"Request originated from\" }), _jsxs(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: \"0 0 2px\" }, children: [\"IP address: \", requestedFrom.ipAddress] }), requestedFrom.location && (_jsxs(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: [\"Location: \", requestedFrom.location] }))] })] })), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 16px\" }, children: \"If you didn't request a password reset, your account may be at risk. Secure it now:\" }), _jsx(DangerButton, { href: \"https://vreko.dev/support/security\", children: \"I didn't request this\" }), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: \"If you ignore this email, your password will not be changed.\" })] }));\n}\nResetPassword.PreviewProps = {\n resetUrl: \"https://vreko.dev/auth/reset/preview-token\",\n expiresInMinutes: 60,\n requestedFrom: {\n ipAddress: \"203.0.113.42\",\n location: \"San Francisco, CA\",\n },\n};\nexport const authResetPasswordTemplate = {\n id: \"auth.reset-password\",\n category: \"authentication\",\n subject: () => \"Reset your Vreko password\",\n component: ResetPassword,\n previewProps: ResetPassword.PreviewProps,\n schema: ResetPasswordPropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Heading, Hr, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const VerifyEmailPropsSchema = z.object({\n verificationUrl: z.string().url(),\n expiresInMinutes: z.number().default(15),\n});\nfunction VerifyEmail({ verificationUrl, expiresInMinutes }) {\n return (_jsxs(Wrapper, { preview: \"Verify your Vreko email address\", children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 12px\" }, children: \"Verify your email\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: [\"Click the button below to verify your email address. This link expires in \", expiresInMinutes, \" minutes.\"] }), _jsx(PrimaryButton, { href: verificationUrl, children: \"Verify Email Address\" }), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: \"If you didn't create a Vreko account, you can safely ignore this email.\" })] }));\n}\nVerifyEmail.PreviewProps = {\n verificationUrl: \"https://vreko.dev/verify/preview-token\",\n expiresInMinutes: 15,\n};\nexport const authVerifyEmailTemplate = {\n id: \"auth.verify-email\",\n category: \"authentication\",\n subject: () => \"Verify your Vreko email address\",\n component: VerifyEmail,\n previewProps: VerifyEmail.PreviewProps,\n schema: VerifyEmailPropsSchema,\n};\n","/**\n * Email Design Tokens\n * Based on Vreko brand colors from /brand/colors.json\n * Designed for optimal dark mode email client rendering\n */\n\nexport const emailTheme = {\n\tcolors: {\n\t\t// Backgrounds - Dark mode optimized\n\t\tbackground: \"#0A0A0A\", // From brand neutral.background\n\t\tbackgroundSecondary: \"#141414\", // Secondary background\n\t\tsurface: \"#111111\", // From brand neutral.surface\n\t\tsurfaceSubtle: \"#18181B\", // Subtle surface variation\n\t\tsurfaceElevated: \"#1A1A1A\", // From brand neutral.surfaceElevated\n\n\t\t// Brand - Vreko Green (#4ADE80)\n\t\tprimary: \"#4ADE80\", // From brand primary.green.hex\n\t\tprimaryHover: \"#22C55E\", // From brand primary.greenDark.hex\n\t\tprimaryLight: \"#6EE7A7\", // From brand primary.greenLight.hex\n\t\tprimaryGlow: \"rgba(74, 222, 128, 0.4)\", // From brand primary.greenGlow\n\n\t\t// Text - High contrast for email clients\n\t\ttext: \"#FAFAFA\", // From brand text.primary\n\t\ttextSecondary: \"#A1A1AA\", // From brand text.secondary\n\t\ttextTertiary: \"#71717A\", // Tertiary text\n\t\ttextMuted: \"#71717A\", // From brand text.tertiary\n\t\ttextDisabled: \"#52525B\", // From brand text.muted\n\n\t\t// UI Elements\n\t\tborder: \"#27272A\", // From brand neutral.border\n\t\tdivider: \"#27272A\",\n\n\t\t// Semantic Colors\n\t\tsuccess: \"#34D399\", // From brand semantic.success\n\t\terror: \"#EF4444\", // From brand semantic.error\n\t\twarning: \"#FF6B35\", // From brand semantic.warning\n\t\tinfo: \"#3B82F6\", // From brand semantic.info\n\t},\n\n\tfonts: {\n\t\tbody: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n\t\tsans: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif',\n\t\tmono: '\"JetBrains Mono\", \"Fira Code\", Consolas, Monaco, monospace',\n\t},\n\n\tfontSizes: {\n\t\txs: \"12px\",\n\t\tsm: \"14px\",\n\t\tbase: \"16px\",\n\t\tlg: \"18px\",\n\t\txl: \"20px\",\n\t\t\"2xl\": \"24px\",\n\t\t\"3xl\": \"30px\",\n\t},\n\n\tspacing: {\n\t\txs: \"4px\",\n\t\tsm: \"8px\",\n\t\tmd: \"16px\",\n\t\tlg: \"24px\",\n\t\txl: \"32px\",\n\t\t\"2xl\": \"48px\",\n\t},\n\n\tborderRadius: \"4px\",\n\tborderWidth: \"1px\",\n\n\t// Email-specific constraints\n\tmaxWidth: \"600px\",\n\n\t// ASCII borders for plain text fallback\n\tascii: {\n\t\thorizontalLine: \"─\",\n\t\tverticalLine: \"│\",\n\t\ttopLeft: \"┌\",\n\t\ttopRight: \"┐\",\n\t\tbottomLeft: \"└\",\n\t\tbottomRight: \"┘\",\n\t\tintersection: \"┼\",\n\t\tcheckmark: \"✓\",\n\t},\n} as const;\n\nexport type EmailTheme = typeof emailTheme;\n","import { Link, Section, Text } from \"@react-email/components\";\nimport { emailTheme } from \"../../theme\";\n\n/**\n * RepoFooter - CLI-style footer with links\n */\nexport function RepoFooter() {\n\tconst currentYear = new Date().getFullYear();\n\n\treturn (\n\t\t<Section\n\t\t\tstyle={{\n\t\t\t\tborderTop: `${emailTheme.borderWidth} solid ${emailTheme.colors.border}`,\n\t\t\t\tpaddingTop: emailTheme.spacing.lg,\n\t\t\t\tmarginTop: emailTheme.spacing.xl,\n\t\t\t}}\n\t\t>\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tmarginBottom: emailTheme.spacing.sm,\n\t\t\t\t\tfontSize: emailTheme.fontSizes.sm,\n\t\t\t\t\tcolor: emailTheme.colors.textMuted,\n\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t┌─ Vreko © {currentYear}\n\t\t\t</Text>\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tmarginBottom: emailTheme.spacing.sm,\n\t\t\t\t\tfontSize: emailTheme.fontSizes.sm,\n\t\t\t\t\tcolor: emailTheme.colors.textMuted,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Link\n\t\t\t\t\thref=\"https://vreko.dev\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\ttextDecoration: \"none\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tvreko.dev\n\t\t\t\t</Link>\n\t\t\t\t{\" • \"}\n\t\t\t\t<Link\n\t\t\t\t\thref=\"https://vreko.dev/docs\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\ttextDecoration: \"none\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tDocs\n\t\t\t\t</Link>\n\t\t\t\t{\" • \"}\n\t\t\t\t<Link\n\t\t\t\t\thref=\"https://github.com/vreko\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\ttextDecoration: \"none\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tGitHub\n\t\t\t\t</Link>\n\t\t\t</Text>\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tfontSize: emailTheme.fontSizes.xs,\n\t\t\t\t\tcolor: emailTheme.colors.textDisabled,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\tYou're receiving this email because you have a Vreko account.{\" \"}\n\t\t\t\t<Link\n\t\t\t\t\thref=\"{{unsubscribeUrl}}\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tcolor: emailTheme.colors.textMuted,\n\t\t\t\t\t\ttextDecoration: \"underline\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tUnsubscribe\n\t\t\t\t</Link>\n\t\t\t</Text>\n\t\t</Section>\n\t);\n}\n","import { Heading, Section, Text } from \"@react-email/components\";\nimport { emailTheme } from \"../../theme\";\n\nexport interface TerminalHeaderProps {\n\tstatus?: \"online\" | \"processing\" | \"offline\" | \"critical\" | \"degraded\";\n}\n\n/**\n * TerminalHeader - Logo with terminal-style status indicator\n */\nexport function TerminalHeader({ status = \"online\" }: TerminalHeaderProps) {\n\tconst statusColors = {\n\t\tonline: emailTheme.colors.success,\n\t\tprocessing: emailTheme.colors.warning,\n\t\toffline: emailTheme.colors.textMuted,\n\t\tcritical: emailTheme.colors.error,\n\t\tdegraded: emailTheme.colors.warning,\n\t};\n\n\tconst statusText = {\n\t\tonline: \"● CONNECTED\",\n\t\tprocessing: \"○ PROCESSING\",\n\t\toffline: \"○ OFFLINE\",\n\t\tcritical: \"● CRITICAL\",\n\t\tdegraded: \"○ DEGRADED\",\n\t};\n\n\treturn (\n\t\t<Section\n\t\t\tstyle={{\n\t\t\t\tborderBottom: `${emailTheme.borderWidth} solid ${emailTheme.colors.border}`,\n\t\t\t\tpaddingBottom: emailTheme.spacing.lg,\n\t\t\t\tmarginBottom: emailTheme.spacing.xl,\n\t\t\t}}\n\t\t>\n\t\t\t<table width=\"100%\" style={{ width: \"100%\" }}>\n\t\t\t\t<tr>\n\t\t\t\t\t<td style={{ verticalAlign: \"middle\" }}>\n\t\t\t\t\t\t<Heading\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\tfontSize: emailTheme.fontSizes[\"2xl\"],\n\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span style={{ color: emailTheme.colors.primary }}>$</span> Vreko\n\t\t\t\t\t\t</Heading>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\ttextAlign: \"right\",\n\t\t\t\t\t\t\tverticalAlign: \"middle\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\tfontSize: emailTheme.fontSizes.xs,\n\t\t\t\t\t\t\t\tcolor: statusColors[status],\n\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t\t\tletterSpacing: \"0.5px\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{statusText[status]}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</Section>\n\t);\n}\n","import { Body, Container, Font, Head, Html, Img, Preview, Section } from \"@react-email/components\";\nimport type React from \"react\";\n\nexport interface VrekoEmailShellProps {\n\ttitle?: string;\n\tpreviewText: string;\n\tchildren: React.ReactNode;\n\tlogoUrl?: string;\n}\n\nconst COLORS = {\n\tbg: \"#0D1117\",\n\ttext: \"#FFFFFF\",\n\tmuted: \"#9CA3AF\",\n\tgreen: \"#4ADE80\",\n\tborder: \"#27272A\",\n\tfooter: \"#6B7280\",\n} as const;\n\nconst FONT_BODY = \"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif\";\nconst FONT_MONO = \"'Geist Mono', 'SF Mono', ui-monospace, 'Courier New', Courier, monospace\";\n\nconst bodyStyle: React.CSSProperties = {\n\tmargin: 0,\n\tpadding: 0,\n\tbackgroundColor: COLORS.bg,\n\tcolor: COLORS.text,\n\tfontFamily: FONT_BODY,\n\tWebkitFontSmoothing: \"antialiased\",\n\tMozOsxFontSmoothing: \"grayscale\",\n};\n\nconst containerStyle: React.CSSProperties = {\n\twidth: \"100%\",\n\tmaxWidth: \"560px\",\n\tmargin: \"0 auto\",\n\tbackgroundColor: COLORS.bg,\n};\n\nconst sectionStyle: React.CSSProperties = {\n\tpadding: \"0 40px\",\n};\n\nconst headerStyle: React.CSSProperties = {\n\tpadding: \"48px 40px 0 40px\",\n};\n\nconst footerStyle: React.CSSProperties = {\n\tpadding: \"24px 40px 48px 40px\",\n\tfontFamily: FONT_BODY,\n\tfontSize: \"11px\",\n\tlineHeight: \"1.6\",\n\tcolor: COLORS.footer,\n};\n\nconst hrStyle: React.CSSProperties = {\n\tborderTop: `1px solid ${COLORS.border}`,\n\tborderRight: \"none\",\n\tborderBottom: \"none\",\n\tborderLeft: \"none\",\n\tmargin: \"24px 0\",\n\twidth: \"100%\",\n};\n\nconst footerLinkStyle: React.CSSProperties = {\n\tcolor: COLORS.green,\n\ttextDecoration: \"none\",\n};\n\nexport function VrekoEmailShell({\n\ttitle = \"Vreko\",\n\tpreviewText,\n\tchildren,\n\tlogoUrl = \"https://vreko.dev/images/gecko-green.png\",\n}: VrekoEmailShellProps) {\n\treturn (\n\t\t<Html lang=\"en\" dir=\"ltr\">\n\t\t\t<Head>\n\t\t\t\t<meta charSet=\"utf-8\" />\n\t\t\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\t\t\t\t<meta httpEquiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n\t\t\t\t<meta name=\"x-apple-disable-message-reformatting\" />\n\t\t\t\t<meta name=\"format-detection\" content=\"telephone=no, date=no, address=no, email=no\" />\n\t\t\t\t<meta name=\"color-scheme\" content=\"dark\" />\n\t\t\t\t<meta name=\"supported-color-schemes\" content=\"dark\" />\n\t\t\t\t<title>{title}</title>\n\t\t\t\t<Font\n\t\t\t\t\tfontFamily=\"Inter\"\n\t\t\t\t\tfallbackFontFamily={[\"Helvetica\", \"Arial\", \"sans-serif\"]}\n\t\t\t\t\twebFont={{\n\t\t\t\t\t\turl: \"https://fonts.gstatic.com/s/inter/v13/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMa1ZL7.woff2\",\n\t\t\t\t\t\tformat: \"woff2\",\n\t\t\t\t\t}}\n\t\t\t\t\tfontWeight={400}\n\t\t\t\t\tfontStyle=\"normal\"\n\t\t\t\t/>\n\t\t\t\t<Font\n\t\t\t\t\tfontFamily=\"Inter\"\n\t\t\t\t\tfallbackFontFamily={[\"Helvetica\", \"Arial\", \"sans-serif\"]}\n\t\t\t\t\twebFont={{\n\t\t\t\t\t\turl: \"https://fonts.gstatic.com/s/inter/v13/UcCO3FwrK3iLTeHuS_fvQtMwCp50KnMa05L7.woff2\",\n\t\t\t\t\t\tformat: \"woff2\",\n\t\t\t\t\t}}\n\t\t\t\t\tfontWeight={600}\n\t\t\t\t\tfontStyle=\"normal\"\n\t\t\t\t/>\n\t\t\t\t<style>{`\n :root { color-scheme: dark; supported-color-schemes: dark; }\n [data-ogsc] body, [data-ogsb] body { background-color: ${COLORS.bg} !important; }\n [data-ogsc] .vreko-bg, [data-ogsb] .vreko-bg { background-color: ${COLORS.bg} !important; }\n [data-ogsc] .vreko-fg, [data-ogsb] .vreko-fg { color: ${COLORS.text} !important; }\n [data-ogsc] .vreko-muted, [data-ogsb] .vreko-muted { color: ${COLORS.muted} !important; }\n [data-ogsc] .vreko-green, [data-ogsb] .vreko-green { color: ${COLORS.green} !important; }\n `}</style>\n\t\t\t</Head>\n\t\t\t<Preview>{previewText}</Preview>\n\t\t\t<Body style={bodyStyle} className=\"vreko-bg\">\n\t\t\t\t<table\n\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\tcellPadding={0}\n\t\t\t\t\tcellSpacing={0}\n\t\t\t\t\tborder={0}\n\t\t\t\t\tstyle={{ backgroundColor: COLORS.bg, width: \"100%\" }}\n\t\t\t\t\tclassName=\"vreko-bg\"\n\t\t\t\t>\n\t\t\t\t\t<tbody>\n\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t<td align=\"center\" style={{ backgroundColor: COLORS.bg }}>\n\t\t\t\t\t\t\t\t<Container style={containerStyle} className=\"vreko-bg\">\n\t\t\t\t\t\t\t\t\t<Section style={headerStyle}>\n\t\t\t\t\t\t\t\t\t\t<Img\n\t\t\t\t\t\t\t\t\t\t\tsrc={logoUrl}\n\t\t\t\t\t\t\t\t\t\t\talt=\"Vreko\"\n\t\t\t\t\t\t\t\t\t\t\twidth=\"32\"\n\t\t\t\t\t\t\t\t\t\t\theight=\"32\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay: \"block\",\n\t\t\t\t\t\t\t\t\t\t\t\twidth: \"32px\",\n\t\t\t\t\t\t\t\t\t\t\t\theight: \"32px\",\n\t\t\t\t\t\t\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\t\t\t\t\t\t\toutline: \"none\",\n\t\t\t\t\t\t\t\t\t\t\t\ttextDecoration: \"none\",\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Section>\n\t\t\t\t\t\t\t\t\t<Section style={sectionStyle}>\n\t\t\t\t\t\t\t\t\t\t<hr style={hrStyle} />\n\t\t\t\t\t\t\t\t\t</Section>\n\t\t\t\t\t\t\t\t\t<Section style={sectionStyle}>{children}</Section>\n\t\t\t\t\t\t\t\t\t<Section style={sectionStyle}>\n\t\t\t\t\t\t\t\t\t\t<hr style={hrStyle} />\n\t\t\t\t\t\t\t\t\t</Section>\n\t\t\t\t\t\t\t\t\t<Section style={footerStyle}>\n\t\t\t\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\t\t\t\t\tfontSize: \"11px\",\n\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: \"1.6\",\n\t\t\t\t\t\t\t\t\t\t\t\tcolor: COLORS.footer,\n\t\t\t\t\t\t\t\t\t\t\t\tfontFamily: FONT_BODY,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"vreko-muted\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\tVreko by Marcelle Labs · Built on the{\" \"}\n\t\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\t\thref=\"https://workspacejson.dev\"\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={footerLinkStyle}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"vreko-green\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\tworkspace.json\n\t\t\t\t\t\t\t\t\t\t\t</a>{\" \"}\n\t\t\t\t\t\t\t\t\t\t\topen standard\n\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t</Section>\n\t\t\t\t\t\t\t\t</Container>\n\t\t\t\t\t\t\t</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t</Body>\n\t\t</Html>\n\t);\n}\n\nexport const VREKO_COLORS = COLORS;\nexport const VREKO_FONT_BODY = FONT_BODY;\nexport const VREKO_FONT_MONO = FONT_MONO;\n\nexport default VrekoEmailShell;\n","import type React from \"react\";\nimport { VrekoEmailShell } from \"../VrekoEmailShell\";\n\nexport interface VrekoLayoutProps {\n\ttitle: string;\n\tpreheader?: string;\n\tchildren: React.ReactNode;\n}\n\nexport function VrekoLayout({ title, preheader, children }: VrekoLayoutProps) {\n\treturn (\n\t\t<VrekoEmailShell title={title} previewText={preheader ?? title}>\n\t\t\t{children}\n\t\t</VrekoEmailShell>\n\t);\n}\n\nexport default VrekoLayout;\n","import { Section, Text } from \"@react-email/components\";\nimport type React from \"react\";\nimport { emailTheme } from \"../../theme\";\n\nexport interface AlertBoxProps {\n\ttype: \"info\" | \"success\" | \"warning\" | \"error\";\n\tchildren: React.ReactNode;\n}\n\n/**\n * AlertBox - Colored message boxes for important information\n */\nexport function AlertBox({ type, children }: AlertBoxProps) {\n\tconst colorMap = {\n\t\tinfo: emailTheme.colors.info,\n\t\tsuccess: emailTheme.colors.success,\n\t\twarning: emailTheme.colors.warning,\n\t\terror: emailTheme.colors.error,\n\t};\n\n\tconst iconMap = {\n\t\tinfo: \"ℹ\",\n\t\tsuccess: \"✓\",\n\t\twarning: \"⚠\",\n\t\terror: \"✕\",\n\t};\n\n\tconst backgroundColor = colorMap[type];\n\tconst icon = iconMap[type];\n\n\treturn (\n\t\t<Section\n\t\t\tstyle={{\n\t\t\t\tbackgroundColor: `${backgroundColor}15`, // 15% opacity\n\t\t\t\tborder: `${emailTheme.borderWidth} solid ${backgroundColor}`,\n\t\t\t\tborderRadius: emailTheme.borderRadius,\n\t\t\t\tpadding: emailTheme.spacing.md,\n\t\t\t\tmargin: `${emailTheme.spacing.lg} 0`,\n\t\t\t}}\n\t\t>\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tmargin: 0,\n\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\tfontSize: emailTheme.fontSizes.base,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tcolor: backgroundColor,\n\t\t\t\t\t\tmarginRight: emailTheme.spacing.sm,\n\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{icon}\n\t\t\t\t</span>\n\t\t\t\t{children}\n\t\t\t</Text>\n\t\t</Section>\n\t);\n}\n","import { Text } from \"@react-email/components\";\nimport { VREKO_COLORS, VREKO_FONT_MONO } from \"../VrekoEmailShell\";\n\nexport interface BadgeProps {\n\tlabel: string;\n}\n\nexport function Badge({ label }: BadgeProps) {\n\treturn (\n\t\t<Text\n\t\t\tstyle={{\n\t\t\t\tmargin: \"0 0 20px 0\",\n\t\t\t\tfontFamily: VREKO_FONT_MONO,\n\t\t\t\tfontSize: \"11px\",\n\t\t\t\tlineHeight: 1,\n\t\t\t\tcolor: VREKO_COLORS.green,\n\t\t\t\tletterSpacing: \"0.12em\",\n\t\t\t\ttextTransform: \"uppercase\",\n\t\t\t\tfontWeight: 600,\n\t\t\t}}\n\t\t>\n\t\t\t{label}\n\t\t</Text>\n\t);\n}\n\nexport default Badge;\n","import { Text } from \"@react-email/components\";\nimport type React from \"react\";\nimport { VREKO_COLORS, VREKO_FONT_BODY } from \"../VrekoEmailShell\";\n\nexport interface BodyTextProps {\n\tchildren: React.ReactNode;\n\tmt?: number;\n\tmb?: number;\n}\n\nexport function BodyText({ children, mt = 0, mb = 16 }: BodyTextProps) {\n\treturn (\n\t\t<Text\n\t\t\tstyle={{\n\t\t\t\tmargin: `${mt}px 0 ${mb}px 0`,\n\t\t\t\tfontFamily: VREKO_FONT_BODY,\n\t\t\t\tfontSize: \"14px\",\n\t\t\t\tlineHeight: 1.6,\n\t\t\t\tcolor: VREKO_COLORS.muted,\n\t\t\t\tfontWeight: 400,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</Text>\n\t);\n}\n\nexport default BodyText;\n","import { Link, Section, Text } from \"@react-email/components\";\nimport { emailTheme } from \"../../theme\";\n\nexport interface CodeBlockProps {\n\tcode: string;\n\tcopyable?: boolean;\n\twebViewUrl?: string;\n\tlanguage?: string;\n}\n\n/**\n * CodeBlock - Monospace code display with optional copyable functionality\n * Includes webViewUrl prop for web preview link (P2 enhancement)\n */\nexport function CodeBlock({ code, copyable = false, webViewUrl, language }: CodeBlockProps) {\n\treturn (\n\t\t<Section\n\t\t\tstyle={{\n\t\t\t\tbackgroundColor: emailTheme.colors.surface,\n\t\t\t\tborder: `${emailTheme.borderWidth} solid ${emailTheme.colors.border}`,\n\t\t\t\tborderRadius: emailTheme.borderRadius,\n\t\t\t\tpadding: emailTheme.spacing.md,\n\t\t\t\tmargin: `${emailTheme.spacing.lg} 0`,\n\t\t\t}}\n\t\t>\n\t\t\t{copyable && webViewUrl && (\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmarginBottom: emailTheme.spacing.sm,\n\t\t\t\t\t\tdisplay: \"flex\",\n\t\t\t\t\t\tjustifyContent: \"space-between\",\n\t\t\t\t\t\talignItems: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\tfontSize: emailTheme.fontSizes.xs,\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textMuted,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{language || \"code\"}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Link\n\t\t\t\t\t\thref={webViewUrl}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontSize: emailTheme.fontSizes.xs,\n\t\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\t\ttextDecoration: \"none\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tView & Copy →\n\t\t\t\t\t</Link>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\tfontSize: emailTheme.fontSizes.sm,\n\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\twhiteSpace: \"pre-wrap\",\n\t\t\t\t\twordBreak: \"break-all\",\n\t\t\t\t\tmargin: 0,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{code}\n\t\t\t</Text>\n\t\t</Section>\n\t);\n}\n","import { Heading } from \"@react-email/components\";\nimport type React from \"react\";\nimport { VREKO_COLORS, VREKO_FONT_BODY } from \"../VrekoEmailShell\";\n\nexport interface HeadlineProps {\n\tchildren: React.ReactNode;\n}\n\nexport function Headline({ children }: HeadlineProps) {\n\treturn (\n\t\t<Heading\n\t\t\tas=\"h1\"\n\t\t\tstyle={{\n\t\t\t\tmargin: \"0 0 20px 0\",\n\t\t\t\tfontFamily: VREKO_FONT_BODY,\n\t\t\t\tfontSize: \"20px\",\n\t\t\t\tlineHeight: \"1.35\",\n\t\t\t\tfontWeight: 600,\n\t\t\t\tcolor: VREKO_COLORS.text,\n\t\t\t\ttextAlign: \"left\",\n\t\t\t\tletterSpacing: \"-0.01em\",\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</Heading>\n\t);\n}\n\nexport default Headline;\n","import { Button } from \"@react-email/components\";\nimport type React from \"react\";\nimport { emailTheme } from \"../../theme\";\n\nexport interface PrimaryButtonProps {\n\thref: string;\n\tchildren: React.ReactNode;\n}\n\n/**\n * PrimaryButton - CTA button with Vreko Green (#4ADE80)\n */\nexport function PrimaryButton({ href, children }: PrimaryButtonProps) {\n\treturn (\n\t\t<Button\n\t\t\thref={href}\n\t\t\tstyle={{\n\t\t\t\tbackgroundColor: emailTheme.colors.primary,\n\t\t\t\tcolor: emailTheme.colors.background,\n\t\t\t\tpadding: `${emailTheme.spacing.md} ${emailTheme.spacing.xl}`,\n\t\t\t\tborderRadius: emailTheme.borderRadius,\n\t\t\t\ttextDecoration: \"none\",\n\t\t\t\tfontWeight: 600,\n\t\t\t\tfontSize: emailTheme.fontSizes.base,\n\t\t\t\tdisplay: \"inline-block\",\n\t\t\t\tmargin: `${emailTheme.spacing.lg} 0`,\n\t\t\t\tborder: \"none\",\n\t\t\t\tcursor: \"pointer\",\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</Button>\n\t);\n}\n","import { Section, Text } from \"@react-email/components\";\nimport { emailTheme } from \"../../theme\";\n\nexport interface StatRowProps {\n\tlabel: string;\n\tvalue: string | number;\n\tunit?: string;\n\ticon?: string;\n}\n\n/**\n * StatRow - Display metrics in a terminal-style format\n */\nexport function StatRow({ label, value, unit, icon }: StatRowProps) {\n\treturn (\n\t\t<Section\n\t\t\tstyle={{\n\t\t\t\tborderBottom: `${emailTheme.borderWidth} solid ${emailTheme.colors.divider}`,\n\t\t\t\tpadding: `${emailTheme.spacing.sm} 0`,\n\t\t\t}}\n\t\t>\n\t\t\t<table width=\"100%\" style={{ width: \"100%\" }}>\n\t\t\t\t<tr>\n\t\t\t\t\t<td style={{ width: \"50%\", verticalAlign: \"middle\" }}>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\tfontSize: emailTheme.fontSizes.sm,\n\t\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{icon && <span style={{ marginRight: \"8px\" }}>{icon}</span>}\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</td>\n\t\t\t\t\t<td\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: \"50%\",\n\t\t\t\t\t\t\ttextAlign: \"right\",\n\t\t\t\t\t\t\tverticalAlign: \"middle\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\tfontSize: emailTheme.fontSizes.lg,\n\t\t\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t{unit && (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tfontSize: emailTheme.fontSizes.sm,\n\t\t\t\t\t\t\t\t\t\tcolor: emailTheme.colors.textMuted,\n\t\t\t\t\t\t\t\t\t\tmarginLeft: emailTheme.spacing.xs,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{unit}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t</Section>\n\t);\n}\n","import { Section, Text } from \"@react-email/components\";\nimport type React from \"react\";\nimport { VREKO_COLORS, VREKO_FONT_MONO } from \"../VrekoEmailShell\";\n\nexport interface TerminalBlockProps {\n\tchildren: React.ReactNode;\n\tcursor?: boolean;\n}\n\nconst TERMINAL_BG = \"#111827\";\n\nconst wrapStyle: React.CSSProperties = {\n\twidth: \"100%\",\n\tmargin: \"0 0 24px 0\",\n\tbackgroundColor: TERMINAL_BG,\n\tborderRadius: \"8px\",\n\tborder: `1px solid ${VREKO_COLORS.border}`,\n};\n\nconst cellStyle: React.CSSProperties = {\n\tpadding: \"16px 20px\",\n\tfontFamily: VREKO_FONT_MONO,\n\tfontSize: \"12px\",\n\tlineHeight: 1.8,\n\tcolor: VREKO_COLORS.green,\n\twhiteSpace: \"pre-wrap\",\n};\n\nexport function TerminalBlock({ children, cursor = false }: TerminalBlockProps) {\n\treturn (\n\t\t<Section style={wrapStyle}>\n\t\t\t<Text style={cellStyle}>\n\t\t\t\t{children}\n\t\t\t\t{cursor ? <span style={{ color: VREKO_COLORS.green }}>_</span> : null}\n\t\t\t</Text>\n\t\t</Section>\n\t);\n}\n\nexport default TerminalBlock;\n","import { z } from \"zod\";\n\n/**\n * Template Context Types with Zod Schemas\n * Type-safe email template contexts\n */\n\n// Verify Email\nexport const VerifyEmailContextSchema = z.object({\n\tverificationUrl: z.string().url(),\n\texpiresInMinutes: z.number().int().positive(),\n});\n\nexport type VerifyEmailContext = z.infer<typeof VerifyEmailContextSchema>;\n\n// Magic Link\nexport const MagicLinkContextSchema = z.object({\n\tloginUrl: z.string().url(),\n\texpiresInMinutes: z.number().int().positive(),\n\tipAddress: z.string(),\n\tuserAgent: z.string(),\n});\n\nexport type MagicLinkContext = z.infer<typeof MagicLinkContextSchema>;\n\n// Reset Password\nexport const ResetPasswordContextSchema = z.object({\n\tresetUrl: z.string().url(),\n\texpiresInMinutes: z.number().int().positive(),\n\trequestedFrom: z.object({\n\t\tipAddress: z.string(),\n\t\tlocation: z.string().optional(),\n\t}),\n});\n\nexport type ResetPasswordContext = z.infer<typeof ResetPasswordContextSchema>;\n\n// New Device Login\nexport const NewDeviceLoginContextSchema = z.object({\n\tdeviceName: z.string(),\n\tlocation: z.string(),\n\tipAddress: z.string(),\n\ttimestamp: z.date(),\n\tapproveUrl: z.string().url(),\n\tdenyUrl: z.string().url(),\n});\n\nexport type NewDeviceLoginContext = z.infer<typeof NewDeviceLoginContextSchema>;\n\n// Welcome Email\nexport const WelcomeContextSchema = z.object({\n\tfirstName: z.string(),\n\tplanName: z.string(),\n\tplanFeatures: z.array(z.string()),\n\tdashboardUrl: z.string().url(),\n\tdocsUrl: z.string().url(),\n\tpioneerTier: z.string().optional(),\n\tpioneerPoints: z.number().int().nonnegative().optional(),\n});\n\nexport type WelcomeContext = z.infer<typeof WelcomeContextSchema>;\n\n// Pioneer Milestone\nexport const PioneerMilestoneContextSchema = z.object({\n\tfirstName: z.string(),\n\toldTier: z.string(),\n\tnewTier: z.string(),\n\tpointsEarned: z.number().int().nonnegative(),\n\ttotalPoints: z.number().int().nonnegative(),\n\tnextTierName: z.string().optional(),\n\tpointsToNextTier: z.number().int().nonnegative().optional(),\n\tunlockedPerks: z.array(\n\t\tz.object({\n\t\t\ticon: z.string(),\n\t\t\tname: z.string(),\n\t\t\tdescription: z.string(),\n\t\t}),\n\t),\n\tdashboardUrl: z.string().url(),\n});\n\nexport type PioneerMilestoneContext = z.infer<typeof PioneerMilestoneContextSchema>;\n\n// Weekly Digest\nexport const WeeklyDigestContextSchema = z.object({\n\tfirstName: z.string(),\n\tweekStartDate: z.string(),\n\tweekEndDate: z.string(),\n\tstats: z.object({\n\t\ttotalSnapshots: z.number().int().nonnegative(),\n\t\ttestsPassed: z.number().int().nonnegative(),\n\t\tregressionsCaught: z.number().int().nonnegative(),\n\t\tactiveProjects: z.number().int().nonnegative(),\n\t\tactiveMembers: z.number().int().nonnegative(),\n\t\tpioneerPointsEarned: z.number().int().nonnegative(),\n\t\tcomparisonToPreviousWeek: z.number().optional(),\n\t}),\n\thighlights: z.array(\n\t\tz.object({\n\t\t\ticon: z.string(),\n\t\t\ttitle: z.string(),\n\t\t\tdescription: z.string(),\n\t\t}),\n\t),\n\tdashboardUrl: z.string().url(),\n});\n\nexport type WeeklyDigestContext = z.infer<typeof WeeklyDigestContextSchema>;\n\n// System Alert\nexport const SystemAlertContextSchema = z.object({\n\ttier: z.enum([\"free\", \"pro\"]),\n\trepositoryName: z.string().min(1),\n\tfilePath: z.string().min(1),\n\tscore: z.number().min(0).max(1),\n\taiSessionCount: z.number().int().nonnegative(),\n\triskLevel: z.enum([\"LOW\", \"MEDIUM\", \"HIGH\", \"CRITICAL\"]),\n\tactionUrl: z.string().url().optional(),\n\tactionLabel: z.string().min(1).optional(),\n});\n\nexport type SystemAlertContext = z.infer<typeof SystemAlertContextSchema>;\n\n// Invoice Receipt\nexport const InvoiceReceiptContextSchema = z.object({\n\tamount: z.number().positive(),\n\tcurrency: z.string(),\n\tdate: z.date(),\n\tinvoiceUrl: z.string().url(),\n\tplanName: z.string(),\n});\n\nexport type InvoiceReceiptContext = z.infer<typeof InvoiceReceiptContextSchema>;\n\n// Nice Save (First Restore Celebration)\nexport const NiceSaveContextSchema = z.object({\n\tfirstName: z.string(),\n\tfilesRecovered: z.number().int().positive(),\n\tlinesOfCode: z.number().int().nonnegative(),\n\ttimeSavedMinutes: z.number().int().nonnegative(),\n\tsessionTime: z.string(),\n\trestoreTime: z.string(),\n\taiToolDetected: z.string().optional(),\n\tdashboardUrl: z.string().url(),\n\ttwitterShareUrl: z.string().url().optional(),\n});\n\nexport type NiceSaveContext = z.infer<typeof NiceSaveContextSchema>;\n\n// Install Nudge (Day 1 Extension Reminder)\nexport const InstallNudgeContextSchema = z.object({\n\tfirstName: z.string(),\n\tsignupDate: z.string(),\n\textensionUrl: z.string().url(),\n\tdocsUrl: z.string().url(),\n\tdashboardUrl: z.string().url(),\n});\n\nexport type InstallNudgeContext = z.infer<typeof InstallNudgeContextSchema>;\n\n// Pioneer Intro (Day 7 Engaged Users)\nexport const PioneerIntroContextSchema = z.object({\n\tfirstName: z.string(),\n\tcurrentTier: z.string(),\n\tcurrentPoints: z.number().int().nonnegative(),\n\tnextTierName: z.string().optional(),\n\tpointsToNextTier: z.number().int().nonnegative().optional(),\n\tsessionsCompleted: z.number().int().nonnegative(),\n\trestoresCompleted: z.number().int().nonnegative(),\n\tdaysActive: z.number().int().positive(),\n\tpioneerDashboardUrl: z.string().url(),\n\treferralUrl: z.string().url().optional(),\n});\n\nexport type PioneerIntroContext = z.infer<typeof PioneerIntroContextSchema>;\n\n// We Miss You (14 Days Inactive)\nexport const WeMissYouContextSchema = z.object({\n\tfirstName: z.string(),\n\tlastActiveDate: z.string(),\n\tdaysInactive: z.number().int().positive(),\n\ttotalSessions: z.number().int().nonnegative(),\n\ttotalTimelineRestores: z.number().int().nonnegative(),\n\tpioneerTier: z.string().optional(),\n\tpioneerPoints: z.number().int().nonnegative().optional(),\n\tdashboardUrl: z.string().url(),\n\textensionUrl: z.string().url(),\n\tfeedbackUrl: z.string().url(),\n});\n\nexport type WeMissYouContext = z.infer<typeof WeMissYouContextSchema>;\n\n// Cohort Invite (Pioneer accept flow — send invite code to accepted applicant)\nexport const CohortInviteContextSchema = z.object({\n\temail: z.string().email(),\n\tcode: z.string().min(1),\n\tcohort: z.number().int().positive(),\n});\n\nexport type CohortInviteContext = z.infer<typeof CohortInviteContextSchema>;\n","import { Heading, Link, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { CodeBlock } from \"../../components/primitives/CodeBlock\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { type CohortInviteContext, CohortInviteContextSchema } from \"../../contexts\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function CohortInvite({ email, code, cohort }: CohortInviteContext) {\n\tconst activationUrl = `https://vreko.dev/activate/${code}`;\n\tconst docsUrl = \"https://docs.vreko.dev/quick-start\";\n\n\treturn (\n\t\t<VrekoLayout\n\t\t\ttitle=\"You're in — here's your Vreko Pioneer access code\"\n\t\t\tpreheader={`Your Vreko Pioneer access code for Cohort ${cohort}: ${code}`}\n\t\t>\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\", backgroundColor: emailTheme.colors.background }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"28px\",\n\t\t\t\t\t\tfontWeight: \"700\",\n\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tYou're in.\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"26px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tYou've been accepted into Vreko Pioneer Cohort {cohort}. Use this code to activate your account at{\" \"}\n\t\t\t\t\t<Link href=\"https://vreko.dev\" style={{ color: emailTheme.colors.primary, textDecoration: \"none\" }}>\n\t\t\t\t\t\tvreko.dev\n\t\t\t\t\t</Link>\n\t\t\t\t\t.\n\t\t\t\t</Text>\n\n\t\t\t\t{/* Access code */}\n\t\t\t\t<CodeBlock code={code} />\n\n\t\t\t\t{/* Activation CTA */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t\tmargin: \"8px 0 32px 0\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.background,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<PrimaryButton href={activationUrl}>Activate your account →</PrimaryButton>\n\t\t\t\t</Section>\n\n\t\t\t\t{/* What's next */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0\",\n\t\t\t\t\t\tpadding: \"24px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 12px 0\",\n\t\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t$ what's next\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tAfter activating, install the CLI and run{\" \"}\n\t\t\t\t\t\t<code style={{ color: emailTheme.colors.primary, fontFamily: emailTheme.fonts.mono }}>\n\t\t\t\t\t\t\tvr start\n\t\t\t\t\t\t</code>{\" \"}\n\t\t\t\t\t\tin any repo:\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t<Section\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tpadding: \"12px 16px\",\n\t\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surface,\n\t\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\t\tborderRadius: \"4px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tnpm install -g @vreko/cli\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</Section>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Link href={docsUrl} style={{ color: emailTheme.colors.primary, textDecoration: \"none\" }}>\n\t\t\t\t\t\t\tQuick-start guide →\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const CohortInviteTemplate: EmailTemplate<CohortInviteContext> = {\n\tid: \"product.cohort-invite\",\n\tcategory: \"product\",\n\tsubject: () => \"You're in — here's your Vreko Pioneer access code\",\n\tcomponent: CohortInvite,\n\tpreviewProps: {\n\t\temail: \"pioneer@example.com\",\n\t\tcode: \"VREKO123\",\n\t\tcohort: 1,\n\t},\n\tschema: CohortInviteContextSchema,\n};\n","import type { EmailCategory, EmailTemplate, EmailTemplateId } from \"./types\";\n\n/**\n * Template Registry\n * Type-safe central registry for all email templates\n */\n\ninterface TemplateMetadata {\n\tid: EmailTemplateId;\n\tcategory: EmailCategory;\n\tdescription: string;\n\tpreviewUrl?: string;\n}\n\nclass TemplateRegistry {\n\t// biome-ignore lint/suspicious/noExplicitAny: heterogeneous template contexts stored in a single map\n\tprivate templates = new Map<EmailTemplateId, EmailTemplate<any>>();\n\n\t/**\n\t * Register a template\n\t */\n\tregister<TContext>(template: EmailTemplate<TContext>): void {\n\t\tif (this.templates.has(template.id)) {\n\t\t\t// intentionally empty\n\t\t}\n\t\tthis.templates.set(template.id, template);\n\t}\n\n\t/**\n\t * Get a template by ID\n\t */\n\t// biome-ignore lint/suspicious/noExplicitAny: heterogeneous template contexts stored in a single map\n\tget<T extends EmailTemplateId>(id: T): EmailTemplate<any> | undefined {\n\t\treturn this.templates.get(id);\n\t}\n\n\t/**\n\t * Check if template exists\n\t */\n\thas(id: EmailTemplateId): boolean {\n\t\treturn this.templates.has(id);\n\t}\n\n\t/**\n\t * List all registered templates\n\t */\n\tlist(): TemplateMetadata[] {\n\t\treturn Array.from(this.templates.values()).map((template) => ({\n\t\t\tid: template.id,\n\t\t\tcategory: template.category,\n\t\t\tdescription: `${template.category} email template`,\n\t\t\tpreviewUrl: `/email/preview/${template.id}`,\n\t\t}));\n\t}\n\n\t/**\n\t * List templates by category\n\t */\n\tlistByCategory(category: EmailCategory): TemplateMetadata[] {\n\t\treturn this.list().filter((meta) => meta.category === category);\n\t}\n\n\t/**\n\t * Validate template ID\n\t */\n\tvalidate(id: EmailTemplateId): boolean {\n\t\treturn this.has(id);\n\t}\n\n\t/**\n\t * Get template count\n\t */\n\tget size(): number {\n\t\treturn this.templates.size;\n\t}\n}\n\n// Export singleton instance\nexport const templateRegistry = new TemplateRegistry();\n\n// Re-export types for convenience\nexport type { EmailTemplate, EmailTemplateId, TemplateMetadata };\n\n// ─── Template Registration ────────────────────────────────────────────────────\n\nimport { CohortInviteTemplate } from \"./templates/product/CohortInvite\";\n\ntemplateRegistry.register(CohortInviteTemplate);\n","import { render } from \"@react-email/render\";\nimport type { CohortInviteContext } from \"../contexts\";\nimport { sendEmail } from \"../resend\";\nimport { CohortInvite } from \"../templates/product/CohortInvite\";\n\nexport type CohortInviteInput = CohortInviteContext;\n\n/**\n * Send a cohort invite email to an accepted pioneer applicant.\n *\n * Renders the CohortInvite template to HTML and sends it via Resend.\n * Throws on Resend error — caller handles it.\n */\nexport async function sendCohortInviteEmail(input: CohortInviteInput): Promise<void> {\n\tconst html = await render(<CohortInvite {...input} />);\n\n\tconst result = await sendEmail({\n\t\tfrom: \"Vreko <q@vreko.dev>\",\n\t\tto: input.email,\n\t\tsubject: \"You're in — here's your Vreko Pioneer access code\",\n\t\thtml,\n\t});\n\n\tif (result.error) {\n\t\tthrow new Error(`Resend error sending cohort invite to ${input.email}: ${result.error.message}`);\n\t}\n}\n","import { Text } from \"@react-email/components\";\nimport { AlertBox, CodeBlock, PrimaryButton, RepoFooter, TerminalHeader, VrekoLayout } from \"../../components\";\nimport type { MagicLinkContext } from \"../../contexts\";\nimport { MagicLinkContextSchema } from \"../../contexts\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function MagicLink({ loginUrl, expiresInMinutes, ipAddress, userAgent }: MagicLinkContext) {\n\treturn (\n\t\t<VrekoLayout title=\"Sign in to Vreko\" preheader=\"Your magic link to sign in\">\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Text style={{ fontSize: \"18px\", marginBottom: \"24px\", color: \"#FAFAFA\" }}>Sign in to Vreko</Text>\n\n\t\t\t<AlertBox type=\"info\">Click the button below to securely sign in to your Vreko account.</AlertBox>\n\n\t\t\t<PrimaryButton href={loginUrl}>Sign In</PrimaryButton>\n\n\t\t\t<Text style={{ color: \"#71717A\", fontSize: \"14px\", marginTop: \"16px\" }}>\n\t\t\t\tThis magic link expires in {expiresInMinutes} minutes.\n\t\t\t</Text>\n\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\tmarginTop: \"32px\",\n\t\t\t\t\tmarginBottom: \"8px\",\n\t\t\t\t\tcolor: \"#A1A1AA\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\tRequest details:\n\t\t\t</Text>\n\n\t\t\t<CodeBlock code={`IP Address: ${ipAddress}\\nUser Agent: ${userAgent}`} />\n\n\t\t\t<Text style={{ color: \"#71717A\", fontSize: \"14px\", marginTop: \"24px\" }}>\n\t\t\t\tIf you didn't request this sign-in link, you can safely ignore this email.\n\t\t\t</Text>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const MagicLinkTemplate: EmailTemplate<MagicLinkContext> = {\n\tid: \"auth.magic-link\",\n\tcategory: \"authentication\",\n\tsubject: () => \"Sign in to Vreko\",\n\tcomponent: MagicLink,\n\tpreviewProps: {\n\t\tloginUrl: \"https://vreko.dev/auth/verify?token=xyz789\",\n\t\texpiresInMinutes: 15,\n\t\tipAddress: \"192.168.1.1\",\n\t\tuserAgent: \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)\",\n\t},\n\tschema: MagicLinkContextSchema,\n};\n","import { Text } from \"@react-email/components\";\nimport { AlertBox, CodeBlock, PrimaryButton, RepoFooter, TerminalHeader, VrekoLayout } from \"../../components\";\nimport type { NewDeviceLoginContext } from \"../../contexts\";\nimport { NewDeviceLoginContextSchema } from \"../../contexts\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function NewDeviceLogin({\n\tdeviceName,\n\tlocation,\n\tipAddress,\n\ttimestamp,\n\tapproveUrl,\n\tdenyUrl,\n}: NewDeviceLoginContext) {\n\treturn (\n\t\t<VrekoLayout title=\"New device sign-in\" preheader=\"New sign-in detected on your Vreko account\">\n\t\t\t<TerminalHeader status=\"processing\" />\n\n\t\t\t<Text style={{ fontSize: \"18px\", marginBottom: \"24px\", color: \"#FAFAFA\" }}>\n\t\t\t\tNew Device Sign-In Detected\n\t\t\t</Text>\n\n\t\t\t<AlertBox type=\"warning\">We detected a sign-in to your Vreko account from a new device.</AlertBox>\n\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\tmarginTop: \"24px\",\n\t\t\t\t\tmarginBottom: \"8px\",\n\t\t\t\t\tcolor: \"#A1A1AA\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\tSign-in details:\n\t\t\t</Text>\n\n\t\t\t<CodeBlock\n\t\t\t\tcode={`Device: ${deviceName}\\nLocation: ${location}\\nIP Address: ${ipAddress}\\nTime: ${timestamp.toLocaleString()}`}\n\t\t\t/>\n\n\t\t\t<Text style={{ fontSize: \"16px\", marginTop: \"32px\", color: \"#FAFAFA\" }}>Was this you?</Text>\n\n\t\t\t<PrimaryButton href={approveUrl}>Yes, this was me</PrimaryButton>\n\n\t\t\t<Text style={{ marginTop: \"16px\", fontSize: \"14px\", color: \"#A1A1AA\" }}>\n\t\t\t\tIf this wasn't you,{\" \"}\n\t\t\t\t<a href={denyUrl} style={{ color: \"#EF4444\", textDecoration: \"underline\" }}>\n\t\t\t\t\tdeny this sign-in\n\t\t\t\t</a>{\" \"}\n\t\t\t\tand secure your account immediately.\n\t\t\t</Text>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const NewDeviceLoginTemplate: EmailTemplate<NewDeviceLoginContext> = {\n\tid: \"auth.new-device-login\",\n\tcategory: \"authentication\",\n\tsubject: () => \"New device sign-in detected\",\n\tcomponent: NewDeviceLogin,\n\tpreviewProps: {\n\t\tdeviceName: \"MacBook Pro (Chrome)\",\n\t\tlocation: \"San Francisco, CA\",\n\t\tipAddress: \"192.168.1.1\",\n\t\ttimestamp: new Date(),\n\t\tapproveUrl: \"https://vreko.dev/security/approve?token=ghi789\",\n\t\tdenyUrl: \"https://vreko.dev/security/deny?token=ghi789\",\n\t},\n\tschema: NewDeviceLoginContextSchema,\n};\n","import { Text } from \"@react-email/components\";\nimport { AlertBox, CodeBlock, PrimaryButton, RepoFooter, TerminalHeader, VrekoLayout } from \"../../components\";\nimport type { ResetPasswordContext } from \"../../contexts\";\nimport { ResetPasswordContextSchema } from \"../../contexts\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function ResetPassword({ resetUrl, expiresInMinutes, requestedFrom }: ResetPasswordContext) {\n\treturn (\n\t\t<VrekoLayout title=\"Reset your password\" preheader=\"Reset your Vreko password\">\n\t\t\t<TerminalHeader status=\"processing\" />\n\n\t\t\t<Text style={{ fontSize: \"18px\", marginBottom: \"24px\", color: \"#FAFAFA\" }}>Reset Your Password</Text>\n\n\t\t\t<AlertBox type=\"warning\">\n\t\t\t\tA password reset was requested for your Vreko account. If this wasn't you, please ignore this email.\n\t\t\t</AlertBox>\n\n\t\t\t<PrimaryButton href={resetUrl}>Reset Password</PrimaryButton>\n\n\t\t\t<Text style={{ color: \"#71717A\", fontSize: \"14px\", marginTop: \"16px\" }}>\n\t\t\t\tThis reset link expires in {expiresInMinutes} minutes.\n\t\t\t</Text>\n\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\tmarginTop: \"32px\",\n\t\t\t\t\tmarginBottom: \"8px\",\n\t\t\t\t\tcolor: \"#A1A1AA\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\tRequest details:\n\t\t\t</Text>\n\n\t\t\t<CodeBlock\n\t\t\t\tcode={`IP Address: ${requestedFrom.ipAddress}${requestedFrom.location ? `\\nLocation: ${requestedFrom.location}` : \"\"}`}\n\t\t\t/>\n\n\t\t\t<Text style={{ color: \"#71717A\", fontSize: \"14px\", marginTop: \"24px\" }}>\n\t\t\t\tIf you didn't request a password reset, your account may be compromised. Please contact support\n\t\t\t\timmediately.\n\t\t\t</Text>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const ResetPasswordTemplate: EmailTemplate<ResetPasswordContext> = {\n\tid: \"auth.reset-password\",\n\tcategory: \"authentication\",\n\tsubject: () => \"Reset your Vreko password\",\n\tcomponent: ResetPassword,\n\tpreviewProps: {\n\t\tresetUrl: \"https://vreko.dev/reset?token=def456\",\n\t\texpiresInMinutes: 30,\n\t\trequestedFrom: {\n\t\t\tipAddress: \"192.168.1.1\",\n\t\t\tlocation: \"San Francisco, CA\",\n\t\t},\n\t},\n\tschema: ResetPasswordContextSchema,\n};\n","import { Text } from \"@react-email/components\";\nimport { AlertBox, PrimaryButton, RepoFooter, TerminalHeader, VrekoLayout } from \"../../components\";\nimport type { VerifyEmailContext } from \"../../contexts\";\nimport { VerifyEmailContextSchema } from \"../../contexts\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function VerifyEmail({ verificationUrl, expiresInMinutes }: VerifyEmailContext) {\n\treturn (\n\t\t<VrekoLayout title=\"Verify your email\" preheader=\"Click to verify your Vreko account\">\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Text style={{ fontSize: \"18px\", marginBottom: \"24px\", color: \"#FAFAFA\" }}>Welcome to Vreko!</Text>\n\n\t\t\t<AlertBox type=\"info\">\n\t\t\t\tPlease verify your email address to activate your account and start using Vreko.\n\t\t\t</AlertBox>\n\n\t\t\t<PrimaryButton href={verificationUrl}>Verify Email Address</PrimaryButton>\n\n\t\t\t<Text style={{ color: \"#71717A\", fontSize: \"14px\", marginTop: \"16px\" }}>\n\t\t\t\tThis verification link expires in {expiresInMinutes} minutes.\n\t\t\t</Text>\n\n\t\t\t<Text style={{ color: \"#71717A\", fontSize: \"14px\", marginTop: \"24px\" }}>\n\t\t\t\tIf you didn't create a Vreko account, you can safely ignore this email.\n\t\t\t</Text>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const VerifyEmailTemplate: EmailTemplate<VerifyEmailContext> = {\n\tid: \"auth.verify-email\",\n\tcategory: \"authentication\",\n\tsubject: () => \"Verify your Vreko account\",\n\tcomponent: VerifyEmail,\n\tpreviewProps: {\n\t\tverificationUrl: \"https://vreko.dev/verify?token=abc123\",\n\t\texpiresInMinutes: 15,\n\t},\n\tschema: VerifyEmailContextSchema,\n};\n","import { Badge, BodyText, Headline, TerminalBlock, VrekoEmailShell } from \"../../components\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport type ActivationNudgeContext = {};\n\nexport function ActivationNudge(_: ActivationNudgeContext) {\n\treturn (\n\t\t<VrekoEmailShell title=\"Your daemon is installed. Run vreko start.\" previewText=\"Run vreko start\">\n\t\t\t<Badge label=\"● AWAITING SESSION\" />\n\t\t\t<Headline>Your daemon is installed. Run `vreko start`.</Headline>\n\t\t\t<BodyText>\n\t\t\t\tIntelligence calibration begins with your first session. The daemon is ready - it is waiting for you.\n\t\t\t</BodyText>\n\t\t\t<TerminalBlock cursor>{`$ vreko start\n● daemon started pid 41288\n● intelligence CALIBRATING_`}</TerminalBlock>\n\t\t</VrekoEmailShell>\n\t);\n}\n\nexport const ActivationNudgeTemplate: EmailTemplate<ActivationNudgeContext> = {\n\tid: \"product.activation-nudge\",\n\tcategory: \"product\",\n\tsubject: () => \"Your daemon is installed. Run vreko start.\",\n\tcomponent: ActivationNudge,\n\tpreviewProps: {},\n};\n\nexport default ActivationNudge;\n","import { Text } from \"@react-email/components\";\nimport { Badge, BodyText, Headline, TerminalBlock, VrekoEmailShell } from \"../../components\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport type CliNudgeContext = {};\n\nexport function CliNudge(_: CliNudgeContext) {\n\treturn (\n\t\t<VrekoEmailShell title=\"Install the Vreko CLI to start your first session\" previewText=\"Install the Vreko CLI\">\n\t\t\t<Badge label=\"● NEXT STEP\" />\n\t\t\t<Headline>Install the Vreko CLI to start your first session.</Headline>\n\t\t\t<BodyText>\n\t\t\t\tThe daemon runs locally. One install, then `vreko start` and your codebase intelligence begins\n\t\t\t\taccumulating.\n\t\t\t</BodyText>\n\t\t\t<TerminalBlock cursor>{\"npm install -g @vreko/cli\"}</TerminalBlock>\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tmargin: \"0\",\n\t\t\t\t\tfontFamily: \"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif\",\n\t\t\t\t\tfontSize: \"13px\",\n\t\t\t\t\tlineHeight: \"1.6\",\n\t\t\t\t\tcolor: \"#9CA3AF\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<a href=\"https://docs.vreko.dev/install\" style={{ color: \"#4ADE80\", textDecoration: \"none\" }}>\n\t\t\t\t\tdocs.vreko.dev/install →\n\t\t\t\t</a>\n\t\t\t</Text>\n\t\t</VrekoEmailShell>\n\t);\n}\n\nexport const CliNudgeTemplate: EmailTemplate<CliNudgeContext> = {\n\tid: \"product.cli-nudge\",\n\tcategory: \"product\",\n\tsubject: () => \"Install the Vreko CLI to start your first session\",\n\tcomponent: CliNudge,\n\tpreviewProps: {},\n};\n\nexport default CliNudge;\n","import { Text } from \"@react-email/components\";\nimport { Badge, BodyText, Headline, VrekoEmailShell } from \"../../components\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport type ExtensionNudgeContext = {};\n\nexport function ExtensionNudge(_: ExtensionNudgeContext) {\n\treturn (\n\t\t<VrekoEmailShell\n\t\t\ttitle=\"Add the VS Code extension to complete your setup\"\n\t\t\tpreviewText=\"Add the VS Code extension\"\n\t\t>\n\t\t\t<Badge label=\"● NEXT STEP\" />\n\t\t\t<Headline>Add the VS Code extension to complete your setup.</Headline>\n\t\t\t<BodyText>\n\t\t\t\tThe extension connects to your local daemon and surfaces fragility signals as you work. Takes 30\n\t\t\t\tseconds.\n\t\t\t</BodyText>\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tmargin: \"0\",\n\t\t\t\t\tfontFamily: \"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif\",\n\t\t\t\t\tfontSize: \"13px\",\n\t\t\t\t\tlineHeight: \"1.6\",\n\t\t\t\t\tcolor: \"#9CA3AF\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<a\n\t\t\t\t\thref=\"https://marketplace.visualstudio.com/items?itemName=vreko.vreko\"\n\t\t\t\t\tstyle={{ color: \"#4ADE80\", textDecoration: \"none\" }}\n\t\t\t\t>\n\t\t\t\t\tVS Code Marketplace →\n\t\t\t\t</a>\n\t\t\t</Text>\n\t\t</VrekoEmailShell>\n\t);\n}\n\nexport const ExtensionNudgeTemplate: EmailTemplate<ExtensionNudgeContext> = {\n\tid: \"product.extension-nudge\",\n\tcategory: \"product\",\n\tsubject: () => \"Add the VS Code extension to complete your setup\",\n\tcomponent: ExtensionNudge,\n\tpreviewProps: {},\n};\n\nexport default ExtensionNudge;\n","import { Heading, Link, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { AlertBox } from \"../../components/primitives/AlertBox\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { StatRow } from \"../../components/primitives/StatRow\";\nimport { type NiceSaveContext, NiceSaveContextSchema } from \"../../contexts\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function NiceSave({\n\tfirstName,\n\tfilesRecovered,\n\tlinesOfCode,\n\ttimeSavedMinutes,\n\tsessionTime,\n\trestoreTime,\n\taiToolDetected,\n\tdashboardUrl,\n\ttwitterShareUrl,\n}: NiceSaveContext) {\n\tconst timeSavedText =\n\t\ttimeSavedMinutes >= 60\n\t\t\t? `${Math.floor(timeSavedMinutes / 60)}h ${timeSavedMinutes % 60}m`\n\t\t\t: `${timeSavedMinutes}m`;\n\n\treturn (\n\t\t<VrekoLayout\n\t\t\ttitle=\"Nice Save! Your Code is Safe\"\n\t\t\tpreheader={`You just recovered ${filesRecovered} file${filesRecovered !== 1 ? \"s\" : \"\"} with Vreko`}\n\t\t>\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"28px\",\n\t\t\t\t\t\tfontWeight: \"700\",\n\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t🎉 Nice Save!\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tHey {firstName}, you just recovered your code with Vreko. That's what we're here for!\n\t\t\t\t</Text>\n\n\t\t\t\t<AlertBox type=\"success\">\n\t\t\t\t\t<span>Your restore completed successfully. Your code is back to its pre-AI state.</span>\n\t\t\t\t</AlertBox>\n\n\t\t\t\t{/* Recovery Stats */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0\",\n\t\t\t\t\t\tpadding: \"24px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tRecovery Summary\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<StatRow label=\"Files Recovered\" value={filesRecovered.toString()} icon=\"📁\" />\n\t\t\t\t\t<StatRow label=\"Lines of Code\" value={linesOfCode.toLocaleString()} icon=\"📝\" />\n\t\t\t\t\t<StatRow label=\"Time Saved\" value={timeSavedText} icon=\"⏱️\" />\n\t\t\t\t\t{aiToolDetected && <StatRow label=\"AI Tool Detected\" value={aiToolDetected} icon=\"🤖\" />}\n\t\t\t\t</Section>\n\n\t\t\t\t{/* Timeline */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0\",\n\t\t\t\t\t\tpadding: \"20px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.backgroundSecondary,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 12px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t📸 Session started: {sessionTime}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t⏪ Restored at: {restoreTime}\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t{/* What Happened */}\n\t\t\t\t<Section style={{ margin: \"32px 0\" }}>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tWhat Just Happened?\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tVreko's AutoDecisionEngine detected changes that needed protection and automatically tracked\n\t\t\t\t\t\tyour session. When you needed to recover, we had your back.\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tWithout Vreko, you might have spent {timeSavedText} manually reconstructing your code or digging\n\t\t\t\t\t\tthrough git history. Instead, one click and you're back.\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t{/* CTA Buttons */}\n\t\t\t\t<Section style={{ textAlign: \"center\", margin: \"32px 0\" }}>\n\t\t\t\t\t<PrimaryButton href={dashboardUrl}>View in Dashboard</PrimaryButton>\n\n\t\t\t\t\t{twitterShareUrl && (\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: \"16px 0 0 0\",\n\t\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\thref={twitterShareUrl}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\t\t\t\ttextDecoration: \"none\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tShare your save on Twitter →\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Section>\n\n\t\t\t\t{/* Pro Tip */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0 0 0\",\n\t\t\t\t\t\tpadding: \"20px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.primary}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<strong style={{ color: emailTheme.colors.primary }}>💡 Pro Tip:</strong> Vreko learns from your\n\t\t\t\t\t\tworkflow. The more you use it, the smarter it gets at predicting when you'll need protection.\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const NiceSaveTemplate: EmailTemplate<NiceSaveContext> = {\n\tid: \"product.nice-save\",\n\tcategory: \"product\",\n\tsubject: (ctx) => `🎉 Nice Save, ${ctx.firstName}! You just recovered ${ctx.filesRecovered} files`,\n\tcomponent: NiceSave,\n\tpreviewProps: {\n\t\tfirstName: \"Alex\",\n\t\tfilesRecovered: 3,\n\t\tlinesOfCode: 247,\n\t\ttimeSavedMinutes: 45,\n\t\tsessionTime: \"Today at 2:34 PM\",\n\t\trestoreTime: \"Today at 3:12 PM\",\n\t\taiToolDetected: \"Claude Code\",\n\t\tdashboardUrl: \"https://vreko.dev/dashboard/restores\",\n\t\ttwitterShareUrl:\n\t\t\t\"https://twitter.com/intent/tweet?text=Just%20recovered%20247%20lines%20of%20code%20with%20@vrekodev%20%F0%9F%8E%89\",\n\t},\n\tschema: NiceSaveContextSchema,\n};\n","import { Heading, Link, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { AlertBox } from \"../../components/primitives/AlertBox\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { StatRow } from \"../../components/primitives/StatRow\";\nimport { type PioneerIntroContext, PioneerIntroContextSchema } from \"../../contexts\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function PioneerIntro({\n\tfirstName,\n\tcurrentTier,\n\tcurrentPoints,\n\tnextTierName,\n\tpointsToNextTier,\n\tsessionsCompleted,\n\trestoresCompleted,\n\tdaysActive,\n\tpioneerDashboardUrl,\n\treferralUrl,\n}: PioneerIntroContext) {\n\treturn (\n\t\t<VrekoLayout\n\t\t\ttitle=\"Welcome to the Pioneer Program!\"\n\t\t\tpreheader={`You've earned ${currentPoints} Pioneer Points, ${firstName}!`}\n\t\t>\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"28px\",\n\t\t\t\t\t\tfontWeight: \"700\",\n\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t🚀 Welcome, Pioneer!\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tHey {firstName}! You've been using Vreko for a week now, and we're excited to officially welcome you\n\t\t\t\t\tto the Pioneer Program.\n\t\t\t\t</Text>\n\n\t\t\t\t<AlertBox type=\"success\">\n\t\t\t\t\t<span>\n\t\t\t\t\t\tYou're now a <strong>{currentTier}</strong> with {currentPoints} Pioneer Points!\n\t\t\t\t\t</span>\n\t\t\t\t</AlertBox>\n\n\t\t\t\t{/* Your Stats */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0\",\n\t\t\t\t\t\tpadding: \"24px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tYour First Week Stats\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<StatRow label=\"Sessions Completed\" value={sessionsCompleted.toString()} icon=\"📸\" />\n\t\t\t\t\t<StatRow label=\"Timeline Restores\" value={restoresCompleted.toString()} icon=\"⏪\" />\n\t\t\t\t\t<StatRow label=\"Days Active\" value={daysActive.toString()} icon=\"📅\" />\n\t\t\t\t\t<StatRow label=\"Pioneer Points\" value={currentPoints.toString()} icon=\"⭐\" />\n\t\t\t\t</Section>\n\n\t\t\t\t{/* What is Pioneer Program */}\n\t\t\t\t<Section style={{ margin: \"32px 0\" }}>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tWhat's the Pioneer Program?\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tThe Pioneer Program rewards our most engaged users with exclusive perks, early access to new\n\t\t\t\t\t\tfeatures, and real influence on Vreko's roadmap. The more you use Vreko, the more points you\n\t\t\t\t\t\tearn.\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t{/* Tier Progress */}\n\t\t\t\t\t{nextTierName && pointsToNextTier && (\n\t\t\t\t\t\t<Section\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: \"16px 0\",\n\t\t\t\t\t\t\t\tpadding: \"16px\",\n\t\t\t\t\t\t\t\tbackgroundColor: emailTheme.colors.backgroundSecondary,\n\t\t\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.primary}`,\n\t\t\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<strong style={{ color: emailTheme.colors.primary }}>Next tier:</strong> {nextTierName}\n\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t<span style={{ color: emailTheme.colors.textSecondary }}>\n\t\t\t\t\t\t\t\t\t{pointsToNextTier} more points to unlock\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</Section>\n\t\t\t\t\t)}\n\t\t\t\t</Section>\n\n\t\t\t\t{/* Ways to Earn */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0\",\n\t\t\t\t\t\tpadding: \"24px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tWays to Earn Points\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<strong style={{ color: emailTheme.colors.primary }}>+10 pts</strong> - Daily active use\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<strong style={{ color: emailTheme.colors.primary }}>+25 pts</strong> - First restore of the\n\t\t\t\t\t\tweek\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<strong style={{ color: emailTheme.colors.primary }}>+100 pts</strong> - Refer a friend who\n\t\t\t\t\t\tsigns up\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<strong style={{ color: emailTheme.colors.primary }}>+50 pts</strong> - Share feedback or bug\n\t\t\t\t\t\treports\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<strong style={{ color: emailTheme.colors.primary }}>+200 pts</strong> - Write about Vreko\n\t\t\t\t\t\t(tweet, blog)\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t{/* CTA Buttons */}\n\t\t\t\t<Section style={{ textAlign: \"center\", margin: \"32px 0\" }}>\n\t\t\t\t\t<PrimaryButton href={pioneerDashboardUrl}>View Pioneer Dashboard</PrimaryButton>\n\n\t\t\t\t\t{referralUrl && (\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: \"16px 0 0 0\",\n\t\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\thref={referralUrl}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\t\t\t\ttextDecoration: \"none\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tGet your referral link → +100 pts per signup\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t)}\n\t\t\t\t</Section>\n\n\t\t\t\t{/* Founder Note */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0 0 0\",\n\t\t\t\t\t\tpadding: \"20px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.primary}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t\tfontStyle: \"italic\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t\"Pioneers aren't just users - they're co-builders. Your feedback directly shapes what we build\n\t\t\t\t\t\tnext. We read every message, and top Pioneers get direct access to our team.\"\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"12px 0 0 0\",\n\t\t\t\t\t\t\tfontSize: \"13px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t- The Vreko Team\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const PioneerIntroTemplate: EmailTemplate<PioneerIntroContext> = {\n\tid: \"product.pioneer-intro\",\n\tcategory: \"product\",\n\tsubject: (ctx) => `🚀 Welcome to the Pioneer Program, ${ctx.firstName}!`,\n\tcomponent: PioneerIntro,\n\tpreviewProps: {\n\t\tfirstName: \"Alex\",\n\t\tcurrentTier: \"Explorer\",\n\t\tcurrentPoints: 175,\n\t\tnextTierName: \"Trailblazer\",\n\t\tpointsToNextTier: 325,\n\t\tsessionsCompleted: 23,\n\t\trestoresCompleted: 2,\n\t\tdaysActive: 7,\n\t\tpioneerDashboardUrl: \"https://vreko.dev/dashboard/pioneer\",\n\t\treferralUrl: \"https://vreko.dev/refer/alex123\",\n\t},\n\tschema: PioneerIntroContextSchema,\n};\n","import { Heading, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { AlertBox } from \"../../components/primitives/AlertBox\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { StatRow } from \"../../components/primitives/StatRow\";\nimport { type PioneerMilestoneContext, PioneerMilestoneContextSchema } from \"../../contexts\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function PioneerMilestone({\n\tfirstName,\n\toldTier,\n\tnewTier,\n\tpointsEarned,\n\ttotalPoints,\n\tnextTierName,\n\tpointsToNextTier,\n\tunlockedPerks,\n\tdashboardUrl,\n}: PioneerMilestoneContext) {\n\treturn (\n\t\t<VrekoLayout\n\t\t\ttitle=\"You've Leveled Up! 🎉\"\n\t\t\tpreheader={`Congratulations! You've reached ${newTier} tier in the Vreko Pioneer Program`}\n\t\t>\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"24px\",\n\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t$ vreko pioneer level-up\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tCongratulations, {firstName}! You've just advanced from <strong>{oldTier}</strong> to{\" \"}\n\t\t\t\t\t<strong>{newTier}</strong> in the Vreko Pioneer Program! 🚀\n\t\t\t\t</Text>\n\n\t\t\t\t<AlertBox type=\"success\">\n\t\t\t\t\t🎉 Tier Upgrade: {oldTier} → {newTier}\n\t\t\t\t</AlertBox>\n\n\t\t\t\t{/* Points Progress */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0\",\n\t\t\t\t\t\tpadding: \"24px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.backgroundSecondary,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.primary}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 20px 0\",\n\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tYour Pioneer Stats\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<StatRow label=\"Current Tier\" value={newTier} icon=\"🏆\" />\n\t\t\t\t\t<StatRow label=\"Total Points\" value={totalPoints.toString()} icon=\"⭐\" />\n\t\t\t\t\t<StatRow label=\"Points Earned This Milestone\" value={`+${pointsEarned}`} icon=\"✨\" />\n\n\t\t\t\t\t{nextTierName && pointsToNextTier && (\n\t\t\t\t\t\t<Section\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: \"20px 0 12px 0\",\n\t\t\t\t\t\t\t\tpaddingTop: \"20px\",\n\t\t\t\t\t\t\t\tborderTop: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tmargin: \"0 0 8px 0\",\n\t\t\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tNext Tier: {nextTierName}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\t\tfontSize: \"13px\",\n\t\t\t\t\t\t\t\t\tlineHeight: \"18px\",\n\t\t\t\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{pointsToNextTier} points away from {nextTierName}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</Section>\n\t\t\t\t\t)}\n\t\t\t\t</Section>\n\n\t\t\t\t{/* Unlocked Perks */}\n\t\t\t\t{unlockedPerks.length > 0 && (\n\t\t\t\t\t<Section style={{ margin: \"0 0 32px 0\" }}>\n\t\t\t\t\t\t<Heading\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tNewly Unlocked Perks\n\t\t\t\t\t\t</Heading>\n\n\t\t\t\t\t\t{unlockedPerks.map((perk, index) => (\n\t\t\t\t\t\t\t<Section\n\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tmargin: \"0 0 12px 0\",\n\t\t\t\t\t\t\t\t\tpadding: \"16px\",\n\t\t\t\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\t\t\t\tborderRadius: \"6px\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tmargin: \"0 0 8px 0\",\n\t\t\t\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{perk.icon} {perk.name}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{perk.description}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t</Section>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Section>\n\t\t\t\t)}\n\n\t\t\t\t{/* How to Earn More Points */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 32px 0\",\n\t\t\t\t\t\tpadding: \"20px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.backgroundSecondary,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 12px 0\",\n\t\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tKeep Leveling Up\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{emailTheme.ascii.checkmark} Share Vreko with your team (+50 points per referral)\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{emailTheme.ascii.checkmark} Contribute to our open-source repos (+100 points per merged PR)\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{emailTheme.ascii.checkmark} Write technical content about Vreko (+75 points per article)\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{emailTheme.ascii.checkmark} Build integrations or plugins (+150 points per published plugin)\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{emailTheme.ascii.checkmark} Help others in Discord (+25 points per week of active support)\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t<PrimaryButton href={dashboardUrl}>View Pioneer Dashboard</PrimaryButton>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0 0 0\",\n\t\t\t\t\t\tfontSize: \"13px\",\n\t\t\t\t\t\tlineHeight: \"18px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tThe Vreko Pioneer Program rewards developers who help grow our community. Learn more about tiers and\n\t\t\t\t\tperks in your dashboard.\n\t\t\t\t</Text>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const PioneerMilestoneTemplate: EmailTemplate<PioneerMilestoneContext> = {\n\tid: \"product.pioneer-milestone\",\n\tcategory: \"product\",\n\tsubject: (ctx) => `🎉 You've reached ${ctx.newTier} tier in the Pioneer Program!`,\n\tcomponent: PioneerMilestone,\n\tpreviewProps: {\n\t\tfirstName: \"Alex\",\n\t\toldTier: \"Explorer\",\n\t\tnewTier: \"Trailblazer\",\n\t\tpointsEarned: 125,\n\t\ttotalPoints: 750,\n\t\tnextTierName: \"Pathfinder\",\n\t\tpointsToNextTier: 250,\n\t\tunlockedPerks: [\n\t\t\t{\n\t\t\t\ticon: \"🎨\",\n\t\t\t\tname: \"Custom Themes\",\n\t\t\t\tdescription: \"Create and share custom themes for your Vreko dashboard and CLI.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ticon: \"⚡\",\n\t\t\t\tname: \"Priority Processing\",\n\t\t\t\tdescription: \"Your intelligent sessions get priority queue processing for faster results.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ticon: \"👥\",\n\t\t\t\tname: \"Expanded Team Seats\",\n\t\t\t\tdescription: \"Add up to 10 team members at no additional cost (previously limited to 5).\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ticon: \"🎟️\",\n\t\t\t\tname: \"Early Access\",\n\t\t\t\tdescription: \"Get early access to beta features and provide feedback to shape Vreko.\",\n\t\t\t},\n\t\t],\n\t\tdashboardUrl: \"https://vreko.dev/pioneer\",\n\t},\n\tschema: PioneerMilestoneContextSchema,\n};\n","// @deprecated - replaced by canonical Vreko template.\nimport { Text } from \"@react-email/components\";\nimport { Badge, BodyText, Headline, StatRow, TerminalBlock, VrekoEmailShell } from \"../../components\";\nimport { type SystemAlertContext, SystemAlertContextSchema } from \"../../contexts\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function SystemAlert({ tier, repositoryName, filePath, score, aiSessionCount, riskLevel }: SystemAlertContext) {\n\tconst scoreLabel = score.toFixed(2);\n\tconst previewText =\n\t\ttier === \"free\"\n\t\t\t? `${repositoryName} · Pro unlocks the file path`\n\t\t\t: `${repositoryName} · ${filePath} · fragility ${scoreLabel}`;\n\n\treturn (\n\t\t<VrekoEmailShell title={`Vreko intelligence for ${repositoryName}`} previewText={previewText}>\n\t\t\t<Badge label=\"INTELLIGENCE UPDATE\" />\n\t\t\t<Headline>\n\t\t\t\t{tier === \"free\"\n\t\t\t\t\t? \"A fragile file was detected in your workspace.\"\n\t\t\t\t\t: \"Vreko flagged a high-risk file in your codebase.\"}\n\t\t\t</Headline>\n\n\t\t\t<BodyText>\n\t\t\t\t{tier === \"free\"\n\t\t\t\t\t? `Vreko found repeated change and rollback patterns in ${repositoryName}.`\n\t\t\t\t\t: `Vreko found repeated change and rollback patterns in ${repositoryName}. The exact file path and score are below.`}\n\t\t\t</BodyText>\n\n\t\t\t<StatRow label=\"repository\" value={repositoryName} />\n\t\t\t<StatRow label=\"fragility score\" value={scoreLabel} icon=\"●\" />\n\t\t\t<StatRow label=\"AI sessions\" value={aiSessionCount} />\n\t\t\t<StatRow label=\"risk level\" value={riskLevel} />\n\n\t\t\t{tier === \"pro\" ? (\n\t\t\t\t<TerminalBlock cursor>\n\t\t\t\t\t{`file path: ${filePath}\\nscore: ${scoreLabel}\\nrisk: ${riskLevel}`}\n\t\t\t\t</TerminalBlock>\n\t\t\t) : (\n\t\t\t\t<BodyText mt={24}>\n\t\t\t\t\tUpgrade to Pro to reveal the exact file path and get the full intelligence card for this file.\n\t\t\t\t</BodyText>\n\t\t\t)}\n\n\t\t\t<BodyText mt={8} mb={0}>\n\t\t\t\tQuestions about this finding?{\" \"}\n\t\t\t\t<a href=\"mailto:pioneer@vreko.dev\" style={{ color: \"#4ADE80\", textDecoration: \"none\" }}>\n\t\t\t\t\tReply to this email →\n\t\t\t\t</a>\n\t\t\t</BodyText>\n\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tmargin: \"8px 0 0 0\",\n\t\t\t\t\tfontFamily: \"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif\",\n\t\t\t\t\tfontSize: \"12px\",\n\t\t\t\t\tlineHeight: \"1.6\",\n\t\t\t\t\tcolor: \"#9CA3AF\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{tier === \"free\"\n\t\t\t\t\t? \"Free tier keeps the file path hidden.\"\n\t\t\t\t\t: \"Pro tier includes the full file path and intelligence card.\"}\n\t\t\t</Text>\n\t\t</VrekoEmailShell>\n\t);\n}\n\nexport const SystemAlertTemplate: EmailTemplate<SystemAlertContext> = {\n\tid: \"product.system-alert\",\n\tcategory: \"product\",\n\tsubject: (ctx) =>\n\t\tctx.tier === \"free\"\n\t\t\t? `Vreko found a fragile file in ${ctx.repositoryName}`\n\t\t\t: `Vreko flagged ${ctx.filePath} in ${ctx.repositoryName}`,\n\tcomponent: SystemAlert,\n\tpreviewProps: {\n\t\ttier: \"pro\",\n\t\trepositoryName: \"marcelle/vreko-web\",\n\t\tfilePath: \"apps/console/lib/intelligence/projection.ts\",\n\t\tscore: 0.87,\n\t\taiSessionCount: 12,\n\t\triskLevel: \"HIGH\",\n\t},\n\tschema: SystemAlertContextSchema,\n};\n\nexport default SystemAlert;\n","// @deprecated - replaced by canonical Vreko template.\nimport { Section, Text } from \"@react-email/components\";\nimport { Badge, BodyText, Headline, PrimaryButton, StatRow, TerminalBlock, VrekoEmailShell } from \"../../components\";\nimport { type WeeklyDigestContext, WeeklyDigestContextSchema } from \"../../contexts\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function WeeklyDigest({\n\tfirstName,\n\tweekStartDate,\n\tweekEndDate,\n\tstats,\n\thighlights,\n\tdashboardUrl,\n}: WeeklyDigestContext) {\n\tconst previewText = `${stats.totalSnapshots} sessions tracked · ${stats.regressionsCaught} regressions caught`;\n\n\treturn (\n\t\t<VrekoEmailShell title=\"Your Weekly Vreko Summary\" previewText={previewText}>\n\t\t\t<Badge label=\"PIONEER UPDATE\" />\n\t\t\t<Headline>Here&apos;s what changed since your last pulse.</Headline>\n\t\t\t<BodyText>\n\t\t\t\tHey {firstName}, here&apos;s your testing activity from {weekStartDate} to {weekEndDate}. This is the\n\t\t\t\tweekly pulse from the daemon, not a marketing recap.\n\t\t\t</BodyText>\n\n\t\t\t<TerminalBlock>\n\t\t\t\t{[\n\t\t\t\t\t`sessions tracked: ${stats.totalSnapshots}`,\n\t\t\t\t\t`tests passed: ${stats.testsPassed}`,\n\t\t\t\t\t`regressions caught: ${stats.regressionsCaught}`,\n\t\t\t\t\t`active projects: ${stats.activeProjects}`,\n\t\t\t\t\t`active members: ${stats.activeMembers}`,\n\t\t\t\t].join(\"\\n\")}\n\t\t\t</TerminalBlock>\n\n\t\t\t<Section style={{ margin: \"24px 0 0 0\" }}>\n\t\t\t\t<StatRow label=\"Sessions tracked\" value={stats.totalSnapshots} icon=\"▸\" />\n\t\t\t\t<StatRow label=\"Tests passed\" value={stats.testsPassed} icon=\"✓\" />\n\t\t\t\t<StatRow label=\"Regressions caught\" value={stats.regressionsCaught} icon=\"⚑\" />\n\t\t\t\t<StatRow label=\"Active projects\" value={stats.activeProjects} icon=\"◫\" />\n\t\t\t\t<StatRow label=\"Team members active\" value={stats.activeMembers} icon=\"●\" />\n\t\t\t</Section>\n\n\t\t\t{stats.pioneerPointsEarned > 0 ? (\n\t\t\t\t<BodyText mt={24}>Pioneer points earned this week: +{stats.pioneerPointsEarned}.</BodyText>\n\t\t\t) : null}\n\n\t\t\t{highlights.length > 0 ? (\n\t\t\t\t<Section style={{ marginTop: \"24px\" }}>\n\t\t\t\t\t<Headline>Weekly highlights</Headline>\n\t\t\t\t\t{highlights.map((highlight) => (\n\t\t\t\t\t\t<Section\n\t\t\t\t\t\t\tkey={`${highlight.title}-${highlight.icon}`}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tpadding: \"16px 0\",\n\t\t\t\t\t\t\t\tborderTop: \"1px solid #27272A\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tmargin: \"0 0 6px 0\",\n\t\t\t\t\t\t\t\t\tfontFamily:\n\t\t\t\t\t\t\t\t\t\t\"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif\",\n\t\t\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\t\tcolor: \"#FFFFFF\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{highlight.icon} {highlight.title}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\t\t\tfontFamily:\n\t\t\t\t\t\t\t\t\t\t\"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif\",\n\t\t\t\t\t\t\t\t\tfontSize: \"13px\",\n\t\t\t\t\t\t\t\t\tlineHeight: 1.6,\n\t\t\t\t\t\t\t\t\tcolor: \"#9CA3AF\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{highlight.description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</Section>\n\t\t\t\t\t))}\n\t\t\t\t</Section>\n\t\t\t) : null}\n\n\t\t\t<PrimaryButton href={dashboardUrl}>View Full Dashboard</PrimaryButton>\n\t\t</VrekoEmailShell>\n\t);\n}\n\nexport const WeeklyDigestTemplate: EmailTemplate<WeeklyDigestContext> = {\n\tid: \"product.weekly-digest\",\n\tcategory: \"product\",\n\tsubject: (ctx) => `Your Vreko Weekly Summary: ${ctx.stats.totalSnapshots} sessions tracked`,\n\tcomponent: WeeklyDigest,\n\tpreviewProps: {\n\t\tfirstName: \"Alex\",\n\t\tweekStartDate: \"Jan 15\",\n\t\tweekEndDate: \"Jan 21\",\n\t\tstats: {\n\t\t\ttotalSnapshots: 42,\n\t\t\ttestsPassed: 38,\n\t\t\tregressionsCaught: 3,\n\t\t\tactiveProjects: 5,\n\t\t\tactiveMembers: 2,\n\t\t\tpioneerPointsEarned: 25,\n\t\t\tcomparisonToPreviousWeek: 18,\n\t\t},\n\t\thighlights: [\n\t\t\t{\n\t\t\t\ticon: \"NEW\",\n\t\t\t\ttitle: \"agents-audit CLI published to npm\",\n\t\t\t\tdescription: \"One command audits any repo for AI-session fragility and emits a workspace.json.\",\n\t\t\t},\n\t\t],\n\t\tdashboardUrl: \"https://vreko.dev/dashboard\",\n\t},\n\tschema: WeeklyDigestContextSchema,\n};\n\nexport default WeeklyDigest;\n","// @deprecated - replaced by canonical Vreko template.\nimport { Text } from \"@react-email/components\";\nimport { Badge, BodyText, PrimaryButton, TerminalBlock, VrekoEmailShell } from \"../../components\";\nimport type { WelcomeContext } from \"../../contexts\";\nimport { WelcomeContextSchema } from \"../../contexts\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function Welcome({\n\tfirstName,\n\tplanName,\n\tplanFeatures,\n\tdashboardUrl,\n\tdocsUrl,\n\tpioneerTier,\n\tpioneerPoints,\n}: WelcomeContext) {\n\tconst greeting = firstName ? `${firstName}, we received your request.` : \"We received your request.\";\n\tconst previewText = `Welcome to Vreko${pioneerTier ? ` · Pioneer ${pioneerTier}` : \"\"}`;\n\n\treturn (\n\t\t<VrekoEmailShell title={`Welcome to Vreko, ${firstName}`} previewText={previewText}>\n\t\t\t<Badge label=\"Pioneer Cohort\" />\n\t\t\t<Text\n\t\t\t\tstyle={{\n\t\t\t\t\tmargin: \"0 0 20px 0\",\n\t\t\t\t\tfontFamily: \"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif\",\n\t\t\t\t\tfontSize: \"20px\",\n\t\t\t\t\tlineHeight: \"1.35\",\n\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\tcolor: \"#FFFFFF\",\n\t\t\t\t\tletterSpacing: \"-0.01em\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{greeting}\n\t\t\t</Text>\n\t\t\t<BodyText>\n\t\t\t\tYou're on the <strong>{planName}</strong> plan. Vreko is set up to watch your codebase locally, record\n\t\t\t\twhat actually breaks, and write those signals back into AGENTS.md for the next session.\n\t\t\t</BodyText>\n\t\t\t<BodyText mb={24}>\n\t\t\t\tNo code leaves your machine. Intelligence compounds with each session, and your docs stay current as the\n\t\t\t\tdaemon learns your workspace.\n\t\t\t</BodyText>\n\t\t\t<TerminalBlock cursor>\n\t\t\t\t{[\n\t\t\t\t\t`plan: ${planName}`,\n\t\t\t\t\tpioneerTier ? `pioneer tier: ${pioneerTier}` : null,\n\t\t\t\t\tpioneerPoints !== undefined ? `pioneer points: ${pioneerPoints}` : null,\n\t\t\t\t]\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join(\"\\n\")}\n\t\t\t</TerminalBlock>\n\t\t\t{planFeatures.length > 0 ? (\n\t\t\t\t<BodyText mt={24} mb={16}>\n\t\t\t\t\t{planFeatures.slice(0, 3).join(\" · \")}\n\t\t\t\t</BodyText>\n\t\t\t) : null}\n\t\t\t<PrimaryButton href={dashboardUrl}>Open Dashboard</PrimaryButton>\n\t\t\t<BodyText mt={8} mb={0}>\n\t\t\t\tNeed the setup guide?{\" \"}\n\t\t\t\t<a href={docsUrl} style={{ color: \"#4ADE80\", textDecoration: \"none\" }}>\n\t\t\t\t\tRead the docs →\n\t\t\t\t</a>\n\t\t\t</BodyText>\n\t\t</VrekoEmailShell>\n\t);\n}\n\nexport const WelcomeTemplate: EmailTemplate<WelcomeContext> = {\n\tid: \"product.welcome\",\n\tcategory: \"product\",\n\tsubject: (ctx) => `Welcome to Vreko, ${ctx.firstName}`,\n\tcomponent: Welcome,\n\tpreviewProps: {\n\t\tfirstName: \"Alex\",\n\t\tplanName: \"Developer\",\n\t\tplanFeatures: [\"Unlimited session history\", \"GitHub integration\", \"Team collaboration\"],\n\t\tdashboardUrl: \"https://vreko.dev/dashboard\",\n\t\tdocsUrl: \"https://docs.vreko.dev/getting-started\",\n\t\tpioneerTier: \"Explorer\",\n\t\tpioneerPoints: 250,\n\t},\n\tschema: WelcomeContextSchema,\n};\n\nexport default Welcome;\n","import { Heading, Link, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { AlertBox } from \"../../components/primitives/AlertBox\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { StatRow } from \"../../components/primitives/StatRow\";\nimport { type WeMissYouContext, WeMissYouContextSchema } from \"../../contexts\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport function WeMissYou({\n\tfirstName,\n\tlastActiveDate,\n\tdaysInactive,\n\ttotalSessions,\n\ttotalTimelineRestores,\n\tpioneerTier,\n\tpioneerPoints,\n\tdashboardUrl,\n\textensionUrl,\n\tfeedbackUrl,\n}: WeMissYouContext) {\n\treturn (\n\t\t<VrekoLayout title=\"We Miss You!\" preheader={`It's been ${daysInactive} days since your last Vreko session`}>\n\t\t\t<TerminalHeader status=\"offline\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"24px\",\n\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t$ vreko status --last-seen\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tHey {firstName}, we noticed you haven't been around for a while. Your last session was on{\" \"}\n\t\t\t\t\t{lastActiveDate} - that's {daysInactive} days ago.\n\t\t\t\t</Text>\n\n\t\t\t\t<AlertBox type=\"info\">\n\t\t\t\t\t<span>Your Vreko account is still active and ready whenever you need it.</span>\n\t\t\t\t</AlertBox>\n\n\t\t\t\t{/* Stats Reminder */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0\",\n\t\t\t\t\t\tpadding: \"24px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tYour Vreko History\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<StatRow label=\"Total Sessions\" value={totalSessions.toString()} icon=\"📸\" />\n\t\t\t\t\t<StatRow label=\"Timeline Restores\" value={totalTimelineRestores.toString()} icon=\"⏪\" />\n\t\t\t\t\t{pioneerTier && <StatRow label=\"Pioneer Tier\" value={pioneerTier} icon=\"🚀\" />}\n\t\t\t\t\t{pioneerPoints !== undefined && (\n\t\t\t\t\t\t<StatRow label=\"Pioneer Points\" value={pioneerPoints.toString()} icon=\"⭐\" />\n\t\t\t\t\t)}\n\t\t\t\t</Section>\n\n\t\t\t\t{/* What's New */}\n\t\t\t\t<Section style={{ margin: \"32px 0\" }}>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tWhat's New Since You Left\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span style={{ color: emailTheme.colors.primary }}>✨</span> <strong>AutoDecisionEngine</strong>{\" \"}\n\t\t\t\t\t\t- Zero-config protection that learns your workflow\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span style={{ color: emailTheme.colors.primary }}>✨</span>{\" \"}\n\t\t\t\t\t\t<strong>Session Time-Travel</strong> - Atomic multi-file rollback for AI changes\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span style={{ color: emailTheme.colors.primary }}>✨</span> <strong>Faster Restores</strong> -\n\t\t\t\t\t\tOne-click recovery, even faster than before\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span style={{ color: emailTheme.colors.primary }}>✨</span>{\" \"}\n\t\t\t\t\t\t<strong>Claude Code Support</strong> - Full support for Anthropic's new CLI\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t{/* CTA */}\n\t\t\t\t<Section style={{ textAlign: \"center\", margin: \"32px 0\" }}>\n\t\t\t\t\t<PrimaryButton href={dashboardUrl}>Return to Vreko</PrimaryButton>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"16px 0 0 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tNeed to{\" \"}\n\t\t\t\t\t\t<Link href={extensionUrl} style={{ color: emailTheme.colors.primary, textDecoration: \"none\" }}>\n\t\t\t\t\t\t\treinstall the extension\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t?\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t{/* Quick Reminder */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0\",\n\t\t\t\t\t\tpadding: \"20px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Heading\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 12px 0\",\n\t\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tQuick Reminder: How Vreko Helps\n\t\t\t\t\t</Heading>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tVreko automatically tracks sessions when AI tools edit your code. When Cursor, Copilot, or\n\t\t\t\t\t\tClaude Code makes changes you don't want, one click brings you back. No more manual git stashing\n\t\t\t\t\t\tor undo spam.\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t{/* Feedback Request */}\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0 0 0\",\n\t\t\t\t\t\tpadding: \"20px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.backgroundSecondary,\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.primary}`,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<strong style={{ color: emailTheme.colors.primary }}>💬 We'd love your feedback</strong>\n\t\t\t\t\t\t<br />\n\t\t\t\t\t\t<span style={{ color: emailTheme.colors.textSecondary }}>\n\t\t\t\t\t\t\tIs there something we could improve? A feature you wish we had? We're always listening.\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"12px 0 0 0\",\n\t\t\t\t\t\t\tfontSize: \"13px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Link href={feedbackUrl} style={{ color: emailTheme.colors.primary, textDecoration: \"none\" }}>\n\t\t\t\t\t\t\tShare your feedback →\n\t\t\t\t\t\t</Link>\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const WeMissYouTemplate: EmailTemplate<WeMissYouContext> = {\n\tid: \"product.we-miss-you\",\n\tcategory: \"product\",\n\tsubject: (ctx) => `We miss you, ${ctx.firstName}! Your code protection is waiting`,\n\tcomponent: WeMissYou,\n\tpreviewProps: {\n\t\tfirstName: \"Alex\",\n\t\tlastActiveDate: \"January 5, 2026\",\n\t\tdaysInactive: 14,\n\t\ttotalSessions: 47,\n\t\ttotalTimelineRestores: 5,\n\t\tpioneerTier: \"Explorer\",\n\t\tpioneerPoints: 175,\n\t\tdashboardUrl: \"https://vreko.dev/dashboard\",\n\t\textensionUrl: \"https://marketplace.visualstudio.com/items?itemName=vreko.vreko\",\n\t\tfeedbackUrl: \"https://vreko.dev/feedback\",\n\t},\n\tschema: WeMissYouContextSchema,\n};\n","import { Heading, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport interface IssueResolvedContext {\n\tissueId: string;\n\toriginalSubject: string;\n\tresolutionDescription?: string;\n\tchangelogUrl?: string;\n}\n\nexport function IssueResolved({ issueId, originalSubject, resolutionDescription, changelogUrl }: IssueResolvedContext) {\n\treturn (\n\t\t<VrekoLayout title={`Re: ${originalSubject}`} preheader=\"Your issue has been resolved\">\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"24px\",\n\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\tcolor: emailTheme.colors.success,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tIssue resolved\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tThe issue you reported ( <strong style={{ color: emailTheme.colors.text }}>{issueId}</strong>) has\n\t\t\t\t\tbeen resolved.\n\t\t\t\t</Text>\n\n\t\t\t\t{resolutionDescription && (\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"16px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t\tpadding: \"16px\",\n\t\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{resolutionDescription}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tThanks for the report - this is exactly the kind of feedback that makes Vreko better for everyone.\n\t\t\t\t</Text>\n\n\t\t\t\t{changelogUrl && <PrimaryButton href={changelogUrl}>View Release Notes</PrimaryButton>}\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const IssueResolvedTemplate: EmailTemplate<IssueResolvedContext> = {\n\tid: \"triage.issue-resolved\",\n\tcategory: \"triage\",\n\tsubject: (ctx) => `Re: ${ctx.originalSubject}`,\n\tcomponent: IssueResolved,\n\tpreviewProps: {\n\t\tissueId: \"VRK-123\",\n\t\toriginalSubject: \"Help with MCP configuration\",\n\t\tresolutionDescription: \"Fixed the MCP handshake timeout issue in the latest release.\",\n\t\tchangelogUrl: \"https://vreko.dev/changelog\",\n\t},\n};\n","import { Heading, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { CodeBlock } from \"../../components/primitives/CodeBlock\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport interface MCPTroubleshootContext {\n\tuserName?: string;\n}\n\nexport function MCPTroubleshoot({ userName }: MCPTroubleshootContext) {\n\tconst greeting = userName ? `Hi ${userName}` : \"Hi there\";\n\n\treturn (\n\t\t<VrekoLayout title=\"Your MCP connection didn't complete\" preheader=\"Quick troubleshooting steps for MCP setup\">\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"20px\",\n\t\t\t\t\t\tfontWeight: \"500\",\n\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{greeting},\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tLooks like your MCP connection didn't complete. Here are the most common fixes:\n\t\t\t\t</Text>\n\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0\",\n\t\t\t\t\t\tpadding: \"20px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 12px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t1. Check MCP Server Configuration\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 20px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tEnsure your IDE has MCP support enabled in settings.\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 12px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t2. Verify API Key\n\t\t\t\t\t</Text>\n\t\t\t\t\t<CodeBlock code=\"$ vreko auth verify\" />\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"12px 0 20px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tRun this to check your API key is valid.\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 12px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t3. Restart Your IDE\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tSometimes a simple restart refreshes the connection.\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tNeed more help? Reply to this email and we'll get you sorted.\n\t\t\t\t</Text>\n\n\t\t\t\t<PrimaryButton href=\"https://docs.vreko.dev/mcp\">MCP Setup Guide</PrimaryButton>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const MCPTroubleshootTemplate: EmailTemplate<MCPTroubleshootContext> = {\n\tid: \"triage.mcp-troubleshoot\",\n\tcategory: \"triage\",\n\tsubject: () => \"Your MCP connection didn't complete\",\n\tcomponent: MCPTroubleshoot,\n\tpreviewProps: {\n\t\tuserName: \"Alex\",\n\t},\n};\n","import { Heading, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport interface PaymentFailedContext {\n\tamount: number;\n\tcurrency: string;\n\tretryDate: string;\n}\n\nexport function PaymentFailed({ amount, currency, retryDate }: PaymentFailedContext) {\n\tconst formattedAmount = new Intl.NumberFormat(\"en-US\", {\n\t\tstyle: \"currency\",\n\t\tcurrency: currency.toUpperCase(),\n\t}).format(amount);\n\n\tconst formattedDate = new Date(retryDate).toLocaleDateString(\"en-US\", {\n\t\tmonth: \"short\",\n\t\tday: \"numeric\",\n\t});\n\n\treturn (\n\t\t<VrekoLayout\n\t\t\ttitle=\"Your Vreko payment didn't go through\"\n\t\t\tpreheader=\"Update your payment method to keep Pro features active\"\n\t\t>\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"20px\",\n\t\t\t\t\t\tfontWeight: \"500\",\n\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tYour Vreko payment didn't go through\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tYour card on file couldn't be charged ({formattedAmount}). Update it to keep your Pro features\n\t\t\t\t\tactive.\n\t\t\t\t</Text>\n\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0\",\n\t\t\t\t\t\tpadding: \"20px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 8px 0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tNext retry attempt\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0\",\n\t\t\t\t\t\t\tfontSize: \"18px\",\n\t\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{formattedDate}\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tNo charges will be attempted until you update your payment method.\n\t\t\t\t</Text>\n\n\t\t\t\t<PrimaryButton href=\"https://console.vreko.dev/billing\">Update Payment Method</PrimaryButton>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const PaymentFailedTemplate: EmailTemplate<PaymentFailedContext> = {\n\tid: \"triage.payment-failed\",\n\tcategory: \"triage\",\n\tsubject: () => \"Your Vreko payment didn't go through\",\n\tcomponent: PaymentFailed,\n\tpreviewProps: {\n\t\tamount: 29.0,\n\t\tcurrency: \"USD\",\n\t\tretryDate: new Date(Date.now() + 3 * 24 * 60 * 60 * 1000).toISOString(),\n\t},\n};\n","import { Heading, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport interface ReEngagementContext {\n\tdaysInactive: number;\n\tsessionCount: number;\n\tuserName?: string;\n}\n\nexport function ReEngagement({ daysInactive, sessionCount, userName }: ReEngagementContext) {\n\tconst greeting = userName ? `Hi ${userName}` : \"Hi there\";\n\n\treturn (\n\t\t<VrekoLayout\n\t\t\ttitle=\"Your codebase intelligence is paused\"\n\t\t\tpreheader=\"Resume sessions to keep your intelligence up to date\"\n\t\t>\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"22px\",\n\t\t\t\t\t\tfontWeight: \"500\",\n\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tYour codebase intelligence is paused\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"26px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{greeting},\n\t\t\t\t</Text>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"26px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tVreko learns from every session. It's been{\" \"}\n\t\t\t\t\t<strong style={{ color: emailTheme.colors.warning }}>{daysInactive} days</strong> since your last\n\t\t\t\t\tone - your intelligence is falling behind your codebase.\n\t\t\t\t</Text>\n\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"32px 0\",\n\t\t\t\t\t\tpadding: \"24px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t\ttextAlign: \"center\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0 0 8px 0\",\n\t\t\t\t\t\t\tfontSize: \"48px\",\n\t\t\t\t\t\t\tfontWeight: \"700\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{sessionCount}\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmargin: \"0\",\n\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\tsessions with Vreko\n\t\t\t\t\t</Text>\n\t\t\t\t</Section>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tYour patterns and insights are still there, waiting for the next session.\n\t\t\t\t</Text>\n\n\t\t\t\t<PrimaryButton href=\"https://vreko.dev/dashboard\">Resume Sessions</PrimaryButton>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const ReEngagementTemplate: EmailTemplate<ReEngagementContext> = {\n\tid: \"triage.re-engagement\",\n\tcategory: \"triage\",\n\tsubject: () => \"Your codebase intelligence is paused\",\n\tcomponent: ReEngagement,\n\tpreviewProps: {\n\t\tdaysInactive: 7,\n\t\tsessionCount: 23,\n\t\tuserName: \"Alex\",\n\t},\n};\n","import { Heading, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport interface SupportAutoReplyContext {\n\tissueId: string;\n\toriginalSubject: string;\n}\n\nexport function SupportAutoReply({ issueId, originalSubject }: SupportAutoReplyContext) {\n\treturn (\n\t\t<VrekoLayout\n\t\t\ttitle={`Re: ${originalSubject}`}\n\t\t\tpreheader=\"Thanks for reaching out - we've received your support request\"\n\t\t>\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"24px\",\n\t\t\t\t\t\tfontWeight: \"600\",\n\t\t\t\t\t\tcolor: emailTheme.colors.primary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.mono,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tThanks for reaching out\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tWe've logged this as <strong style={{ color: emailTheme.colors.text }}>{issueId}</strong> and the\n\t\t\t\t\tteam will follow up within 4 hours.\n\t\t\t\t</Text>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"16px 0\",\n\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tIn the meantime, check{\" \"}\n\t\t\t\t\t<a\n\t\t\t\t\t\thref=\"https://docs.vreko.dev\"\n\t\t\t\t\t\tstyle={{ color: emailTheme.colors.primary, textDecoration: \"none\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\tdocs.vreko.dev\n\t\t\t\t\t</a>{\" \"}\n\t\t\t\t\tfor common solutions.\n\t\t\t\t</Text>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const SupportAutoReplyTemplate: EmailTemplate<SupportAutoReplyContext> = {\n\tid: \"triage.support-auto-reply\",\n\tcategory: \"triage\",\n\tsubject: (ctx) => `Re: ${ctx.originalSubject}`,\n\tcomponent: SupportAutoReply,\n\tpreviewProps: {\n\t\tissueId: \"VRK-123\",\n\t\toriginalSubject: \"Help with MCP configuration\",\n\t},\n};\n","import { Heading, Section, Text } from \"@react-email/components\";\nimport { RepoFooter } from \"../../components/layouts/RepoFooter\";\nimport { TerminalHeader } from \"../../components/layouts/TerminalHeader\";\nimport { VrekoLayout } from \"../../components/layouts/VrekoLayout\";\nimport { PrimaryButton } from \"../../components/primitives/PrimaryButton\";\nimport { emailTheme } from \"../../theme\";\nimport type { EmailTemplate } from \"../../types\";\n\nexport interface TrialEndingContext {\n\tdaysRemaining: number;\n\tfeaturesUsed: string[];\n}\n\nexport function TrialEnding({ daysRemaining, featuresUsed }: TrialEndingContext) {\n\treturn (\n\t\t<VrekoLayout\n\t\t\ttitle={`Your Vreko trial ends in ${daysRemaining} days`}\n\t\t\tpreheader=\"What you've used and what you'll keep on Pro\"\n\t\t>\n\t\t\t<TerminalHeader status=\"online\" />\n\n\t\t\t<Section style={{ padding: \"32px 24px\" }}>\n\t\t\t\t<Heading\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 24px 0\",\n\t\t\t\t\t\tfontSize: \"20px\",\n\t\t\t\t\t\tfontWeight: \"500\",\n\t\t\t\t\t\tcolor: emailTheme.colors.text,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tYour Vreko trial ends in {daysRemaining} days\n\t\t\t\t</Heading>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"0 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"16px\",\n\t\t\t\t\t\tlineHeight: \"24px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tHere's what you've used during your trial:\n\t\t\t\t</Text>\n\n\t\t\t\t<Section\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0\",\n\t\t\t\t\t\tpadding: \"20px\",\n\t\t\t\t\t\tbackgroundColor: emailTheme.colors.surfaceSubtle,\n\t\t\t\t\t\tborderRadius: \"8px\",\n\t\t\t\t\t\tborder: `1px solid ${emailTheme.colors.border}`,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{featuresUsed.map((feature, index) => (\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tmargin: \"8px 0\",\n\t\t\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\t\t\tlineHeight: \"20px\",\n\t\t\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span style={{ color: emailTheme.colors.success }}>✓</span> {feature}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t))}\n\t\t\t\t</Section>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textSecondary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<strong style={{ color: emailTheme.colors.text }}>On Free:</strong> Keep your patterns and continue\n\t\t\t\t\twith basic features.\n\t\t\t\t\t<br />\n\t\t\t\t\t<strong style={{ color: emailTheme.colors.primary }}>On Pro:</strong> Keep everything plus unlimited\n\t\t\t\t\tsessions, advanced insights, and team collaboration.\n\t\t\t\t</Text>\n\n\t\t\t\t<Text\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmargin: \"24px 0 16px 0\",\n\t\t\t\t\t\tfontSize: \"14px\",\n\t\t\t\t\t\tlineHeight: \"22px\",\n\t\t\t\t\t\tcolor: emailTheme.colors.textTertiary,\n\t\t\t\t\t\tfontFamily: emailTheme.fonts.sans,\n\t\t\t\t\t\tfontStyle: \"italic\",\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tNo hard sell - just facts. Choose what works for you.\n\t\t\t\t</Text>\n\n\t\t\t\t<PrimaryButton href=\"https://vreko.dev/pricing\">View Plans</PrimaryButton>\n\t\t\t</Section>\n\n\t\t\t<RepoFooter />\n\t\t</VrekoLayout>\n\t);\n}\n\nexport const TrialEndingTemplate: EmailTemplate<TrialEndingContext> = {\n\tid: \"triage.trial-ending\",\n\tcategory: \"triage\",\n\tsubject: (ctx) => `Your Vreko trial ends in ${ctx.daysRemaining} days`,\n\tcomponent: TrialEnding,\n\tpreviewProps: {\n\t\tdaysRemaining: 3,\n\t\tfeaturesUsed: [\n\t\t\t\"12 sessions completed\",\n\t\t\t\"47 patterns captured\",\n\t\t\t\"3 GitHub repositories connected\",\n\t\t\t\"Team workspace created\",\n\t\t],\n\t},\n};\n","import { ActivationNudge as ActivationNudgeComponent } from \"@vreko/email\";\nimport { z } from \"zod\";\nexport const ActivationNudgePropsSchema = z.object({});\nexport const activationNudgeTemplate = {\n id: \"pioneer.activation-nudge\",\n category: \"product\",\n subject: () => \"Your daemon is installed. Run vreko start.\",\n component: ActivationNudgeComponent,\n previewProps: {},\n schema: ActivationNudgePropsSchema,\n};\nexport default ActivationNudgeComponent;\n","import { CliNudge as CliNudgeComponent } from \"@vreko/email\";\nimport { z } from \"zod\";\nexport const CliNudgePropsSchema = z.object({});\nexport const cliNudgeTemplate = {\n id: \"pioneer.cli-nudge\",\n category: \"product\",\n subject: () => \"Install the Vreko CLI to start your first session\",\n component: CliNudgeComponent,\n previewProps: {},\n schema: CliNudgePropsSchema,\n};\nexport default CliNudgeComponent;\n","import { ExtensionNudge as ExtensionNudgeComponent } from \"@vreko/email\";\nimport { z } from \"zod\";\nexport const ExtensionNudgePropsSchema = z.object({});\nexport const extensionNudgeTemplate = {\n id: \"pioneer.extension-nudge\",\n category: \"product\",\n subject: () => \"Add the VS Code extension to complete your setup\",\n component: ExtensionNudgeComponent,\n previewProps: {},\n schema: ExtensionNudgePropsSchema,\n};\nexport default ExtensionNudgeComponent;\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * E04: First Scan Complete Email\n *\n * Sent after the first workspace scan completes.\n * Personalized with actual scan results (recovery risk score, findings).\n * Voice: show intelligence, do not announce it.\n */\nimport { Heading, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const FirstScanCompletePropsSchema = z.object({\n firstName: z.string(),\n recoveryRisk: z.number(),\n changeVolatility: z.number(),\n workflowFragility: z.number(),\n topFinding: z.string(),\n topAction: z.string(),\n hotspotCount: z.number(),\n filesWatched: z.number(),\n dashboardUrl: z.string().url(),\n});\nfunction riskLabel(score) {\n if (score <= 30) {\n return \"low\";\n }\n if (score <= 60) {\n return \"moderate\";\n }\n if (score <= 80) {\n return \"elevated\";\n }\n return \"high\";\n}\nexport function FirstScanComplete({ firstName, recoveryRisk, changeVolatility, workflowFragility, topFinding, topAction, hotspotCount, filesWatched, dashboardUrl, }) {\n return (_jsxs(Wrapper, { preview: `recovery risk: ${recoveryRisk} (${riskLabel(recoveryRisk)})`, children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 8px\" }, children: \"your workspace scan is complete\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 20px\" }, children: [firstName, \", here is what we found from your git metadata. No code content was read.\"] }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n margin: \"0 0 20px\",\n fontFamily: \"'JetBrains Mono', monospace\",\n }, children: [_jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: \"0 0 8px\" }, children: [\"RECOVERY RISK \\u00A0\\u00A0\\u00A0\\u00A0\\u00A0\", recoveryRisk, \" \", riskLabel(recoveryRisk)] }), _jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: \"0 0 8px\" }, children: [\"CHANGE VOLATILITY \\u00A0\\u00A0\", changeVolatility, \" \", riskLabel(changeVolatility)] }), _jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: \"0\" }, children: [\"WORKFLOW FRAGILITY \\u00A0\", workflowFragility, \" \", riskLabel(workflowFragility)] })] }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"16px\",\n margin: \"0 0 20px\",\n }, children: [_jsx(Text, { style: {\n color: brand.textSecondary,\n fontSize: \"12px\",\n margin: \"0 0 4px\",\n textTransform: \"uppercase\",\n }, children: \"top finding\" }), _jsx(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: \"0 0 8px\" }, children: topFinding }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"13px\", margin: \"0\" }, children: topAction })] }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"13px\", lineHeight: \"1.6\" }, children: [hotspotCount, \" fragile hotspot\", hotspotCount !== 1 ? \"s\" : \"\", \" identified. Watching \", filesWatched, \" files.\"] }), _jsx(PrimaryButton, { href: dashboardUrl, children: \"view full profile\" })] }));\n}\nexport const firstScanCompleteTemplate = {\n id: \"product.first-scan-complete\",\n category: \"product\",\n subject: () => \"your workspace scan is complete\",\n component: FirstScanComplete,\n previewProps: {\n firstName: \"Alex\",\n recoveryRisk: 45,\n changeVolatility: 60,\n workflowFragility: 30,\n topFinding: \"src/auth/session.ts: 23 reverts in 90 days\",\n topAction: \"Add snapshot before auth changes\",\n hotspotCount: 3,\n filesWatched: 247,\n dashboardUrl: \"https://vreko.dev/dashboard\",\n },\n schema: FirstScanCompletePropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Heading, Hr, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const InviteDeliveryPropsSchema = z.object({\n email: z.string().email(),\n activationUrl: z.string().url(),\n cliSetupCommand: z.string().default(\"vreko auth set-key YOUR_KEY\"),\n vscodeMarketplaceUrl: z.string().url().default(\"https://marketplace.visualstudio.com/items?itemName=Vreko.vreko\"),\n});\nexport function InviteDelivery({ email, activationUrl, cliSetupCommand, vscodeMarketplaceUrl }) {\n return (_jsxs(Wrapper, { preview: \"Your Vreko invite is ready - activate your account to get started\", children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"28px\", fontWeight: 700, margin: \"0 0 8px\" }, children: \"You're in \\uD83C\\uDF89\" }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: \"Click below to activate your Vreko account and get your API key.\" }), _jsx(PrimaryButton, { href: activationUrl, children: \"Activate Your Account\" }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n border: `1px solid ${brand.border}`,\n marginTop: \"24px\",\n marginBottom: \"24px\",\n }, children: [_jsx(Text, { style: {\n color: brand.textSecondary,\n fontSize: \"12px\",\n fontWeight: 600,\n margin: \"0 0 12px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n }, children: \"Once you activate, you'll get:\" }), _jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: \"0 0 8px\" }, children: [_jsx(\"span\", { style: { color: brand.primary, marginRight: \"8px\" }, children: \"\\u2713\" }), \"Your API key for the CLI and VS Code extension\"] }), _jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: 0 }, children: [_jsx(\"span\", { style: { color: brand.primary, marginRight: \"8px\" }, children: \"\\u2713\" }), \"Full access to Vreko's intelligence platform\"] })] }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n border: `1px solid ${brand.border}`,\n marginBottom: \"24px\",\n }, children: [_jsx(Text, { style: {\n color: brand.textSecondary,\n fontSize: \"12px\",\n fontWeight: 600,\n margin: \"0 0 12px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n }, children: \"Quick setup\" }), _jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"13px\", margin: \"0 0 8px\" }, children: [_jsx(\"strong\", { style: { color: brand.textSecondary }, children: \"CLI:\" }), \" \", _jsx(\"code\", { style: {\n backgroundColor: brand.surface,\n padding: \"2px 6px\",\n borderRadius: \"4px\",\n fontFamily: \"monospace\",\n fontSize: \"12px\",\n }, children: cliSetupCommand })] }), _jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"13px\", margin: 0 }, children: [_jsx(\"strong\", { style: { color: brand.textSecondary }, children: \"VS Code:\" }), \" \", _jsx(\"a\", { href: vscodeMarketplaceUrl, style: { color: brand.primary, textDecoration: \"none\" }, children: \"Install from Marketplace\" })] })] }), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsxs(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: [\"Questions? Just reply to this email.\", _jsx(\"br\", {}), \" - Q\"] })] }));\n}\nInviteDelivery.PreviewProps = {\n email: \"dev@example.com\",\n activationUrl: \"https://console.vreko.dev/activate/ABC12XYZ\",\n cliSetupCommand: \"vreko auth set-key YOUR_KEY\",\n vscodeMarketplaceUrl: \"https://marketplace.visualstudio.com/items?itemName=Vreko.vreko\",\n};\nexport const inviteDeliveryTemplate = {\n id: \"product.invite-delivery\",\n category: \"product\",\n subject: () => \"Your Vreko invite is ready\",\n component: InviteDelivery,\n previewProps: InviteDelivery.PreviewProps,\n schema: InviteDeliveryPropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Badge, BodyText, Headline, TerminalBlock, VrekoEmailShell } from \"@vreko/email/components\";\nimport { z } from \"zod\";\nexport const PioneerConfirmationPropsSchema = z.object({\n email: z.string().email(),\n recipientName: z.string().optional(),\n cohortSize: z.number().int().positive().optional(),\n daemonStatus: z.string().optional(),\n logoUrl: z.string().url().optional(),\n});\nfunction PioneerConfirmation({ email, recipientName, cohortSize = 50, daemonStatus = \"intelligence CALIBRATING for your codebase\", logoUrl, }) {\n const greeting = recipientName ? `${recipientName}, we received your request.` : \"We received your request.\";\n const previewText = `We received your Pioneer cohort request${email ? ` for ${email}` : \"\"}`;\n return (_jsxs(VrekoEmailShell, { previewText: previewText, logoUrl: logoUrl, children: [_jsx(Badge, { label: \"Pioneer Cohort\" }), _jsx(Headline, { children: greeting }), _jsxs(BodyText, { children: [\"We're selecting \", cohortSize, \" engineering teams for early access. You'll hear from us directly when we're ready to onboard your team.\"] }), _jsx(BodyText, { mb: 24, children: \"No marketing list. No drip sequence. The next email you receive from this address will either be an onboarding invite or a status update from the daemon.\" }), _jsx(TerminalBlock, { cursor: true, children: daemonStatus })] }));\n}\nPioneerConfirmation.PreviewProps = {\n email: \"alex@acme.dev\",\n recipientName: \"Alex\",\n cohortSize: 50,\n daemonStatus: \"intelligence CALIBRATING for your codebase\",\n};\nexport const pioneerConfirmationTemplate = {\n id: \"pioneer.confirmation\",\n category: \"product\",\n subject: () => \"We received your Pioneer request\",\n component: PioneerConfirmation,\n previewProps: PioneerConfirmation.PreviewProps,\n schema: PioneerConfirmationPropsSchema,\n};\nexport default PioneerConfirmation;\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Heading, Hr, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const PioneerMilestonePropsSchema = z.object({\n firstName: z.string(),\n oldTier: z.string(),\n newTier: z.string(),\n pointsEarned: z.number(),\n totalPoints: z.number(),\n nextTierName: z.string().optional(),\n pointsToNextTier: z.number().optional(),\n unlockedPerks: z.array(z.object({\n icon: z.string(),\n name: z.string(),\n description: z.string(),\n })),\n dashboardUrl: z.string().url(),\n});\nfunction PioneerMilestone({ firstName, oldTier, newTier, pointsEarned, totalPoints, nextTierName, pointsToNextTier, unlockedPerks, dashboardUrl, }) {\n const progressPct = nextTierName && pointsToNextTier\n ? Math.min(100, Math.round((totalPoints / (totalPoints + pointsToNextTier)) * 100))\n : 100;\n return (_jsxs(Wrapper, { preview: \"New perks unlocked - see what you've earned\", children: [_jsx(Heading, { style: { color: brand.primary, fontSize: \"28px\", fontWeight: 700, margin: \"0 0 8px\" }, children: \"\\uD83E\\uDD8E Pioneer tier unlocked!\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: [firstName, \", you've leveled up from \", _jsx(\"strong\", { style: { color: brand.textPrimary }, children: oldTier }), \" to\", \" \", _jsx(\"strong\", { style: { color: brand.primary }, children: newTier }), \" in the Vreko Pioneer Program. You earned\", \" \", pointsEarned, \" points this session.\"] }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n border: `1px solid ${brand.primary}`,\n marginBottom: \"24px\",\n textAlign: \"center\",\n }, children: [_jsx(Text, { style: { color: brand.primary, fontSize: \"32px\", margin: \"0 0 4px\" }, children: \"\\uD83E\\uDD8E\" }), _jsxs(Text, { style: { color: brand.primary, fontSize: \"20px\", fontWeight: 700, margin: \"0 0 4px\" }, children: [newTier, \" Pioneer\"] }), _jsxs(Text, { style: { color: brand.textMuted, fontSize: \"13px\", margin: 0 }, children: [totalPoints.toLocaleString(), \" total points\"] })] }), unlockedPerks.length > 0 && (_jsxs(_Fragment, { children: [_jsx(Text, { style: {\n color: brand.textSecondary,\n fontSize: \"13px\",\n fontWeight: 600,\n margin: \"0 0 12px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n }, children: \"Perks unlocked\" }), unlockedPerks.map((perk, i) => (_jsx(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"6px\",\n padding: \"14px 16px\",\n border: `1px solid ${brand.border}`,\n marginBottom: \"8px\",\n }, children: _jsx(\"table\", { style: { width: \"100%\", borderCollapse: \"collapse\" }, children: _jsx(\"tbody\", { children: _jsxs(\"tr\", { children: [_jsx(\"td\", { style: {\n width: \"36px\",\n verticalAlign: \"top\",\n fontSize: \"20px\",\n paddingTop: \"2px\",\n }, children: perk.icon }), _jsxs(\"td\", { children: [_jsx(Text, { style: {\n color: brand.textPrimary,\n fontSize: \"14px\",\n fontWeight: 600,\n margin: \"0 0 2px\",\n }, children: perk.name }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: perk.description })] })] }) }) }) }, i)))] })), nextTierName && pointsToNextTier && (_jsxs(Section, { style: { marginTop: \"24px\", marginBottom: \"24px\" }, children: [_jsx(\"table\", { style: { width: \"100%\", borderCollapse: \"collapse\", marginBottom: \"6px\" }, children: _jsx(\"tbody\", { children: _jsxs(\"tr\", { children: [_jsxs(\"td\", { style: { color: brand.textMuted, fontSize: \"12px\" }, children: [\"Progress to \", nextTierName] }), _jsxs(\"td\", { style: { color: brand.textMuted, fontSize: \"12px\", textAlign: \"right\" }, children: [pointsToNextTier, \" pts to go\"] })] }) }) }), _jsx(\"table\", { style: { width: \"100%\", borderCollapse: \"collapse\" }, children: _jsx(\"tbody\", { children: _jsx(\"tr\", { children: _jsx(\"td\", { children: _jsx(\"div\", { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"4px\",\n height: \"8px\",\n overflow: \"hidden\",\n }, children: _jsx(\"div\", { style: {\n backgroundColor: brand.primary,\n height: \"8px\",\n width: `${progressPct}%`,\n borderRadius: \"4px\",\n } }) }) }) }) }) })] })), _jsx(PrimaryButton, { href: dashboardUrl, children: \"View Pioneer Dashboard\" }), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: \"Keep shipping to earn more points and unlock the next tier.\" })] }));\n}\nPioneerMilestone.PreviewProps = {\n firstName: \"Alex\",\n oldTier: \"Silver\",\n newTier: \"Gold\",\n pointsEarned: 150,\n totalPoints: 850,\n nextTierName: \"Platinum\",\n pointsToNextTier: 150,\n unlockedPerks: [\n { icon: \"⚡\", name: \"Priority Intelligence\", description: \"Faster AI briefings for every session\" },\n { icon: \"🛡️\", name: \"Extended Snapshot History\", description: \"90-day snapshot retention (up from 30)\" },\n { icon: \"🔑\", name: \"Beta Access\", description: \"Early access to all new features\" },\n ],\n dashboardUrl: \"https://vreko.dev/dashboard/pioneer\",\n};\nexport const productPioneerMilestoneTemplate = {\n id: \"product.pioneer-milestone\",\n category: \"product\",\n subject: (props) => `🦎 You've reached ${props.newTier} in the Vreko Pioneer Program`,\n component: PioneerMilestone,\n previewProps: PioneerMilestone.PreviewProps,\n schema: PioneerMilestonePropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Section, Text } from \"@react-email/components\";\nimport { Badge, BodyText, Headline, PrimaryButton, VrekoEmailShell } from \"@vreko/email/components\";\nimport { z } from \"zod\";\nexport const PioneerUpdatePropsSchema = z.object({\n headline: z.string().optional(),\n items: z.array(z.object({\n tag: z.string(),\n title: z.string(),\n description: z.string(),\n })),\n ctaLabel: z.string().optional(),\n ctaHref: z.string().url().optional(),\n logoUrl: z.string().url().optional(),\n});\nfunction PioneerUpdate({ headline, items, ctaLabel, ctaHref, logoUrl }) {\n return (_jsxs(VrekoEmailShell, { previewText: \"Pioneer cohort update - what we shipped this week.\", logoUrl: logoUrl, children: [_jsx(Badge, { label: \"Pioneer Update\" }), _jsx(Headline, { children: headline ?? \"Here's what changed since you requested access.\" }), _jsx(BodyText, { mb: 8, children: \"A short report from the daemon. We ship in public; this is what landed.\" }), _jsx(Section, { style: { marginTop: \"16px\", marginBottom: \"16px\" }, children: items.map((item, index) => (_jsxs(Section, { style: {\n padding: \"20px 0\",\n borderBottom: index === items.length - 1 ? \"none\" : \"1px solid #27272A\",\n }, children: [_jsx(Text, { style: {\n margin: \"0 0 6px 0\",\n fontFamily: \"JetBrains Mono, monospace\",\n fontSize: \"11px\",\n color: \"#4ADE80\",\n letterSpacing: \"0.1em\",\n textTransform: \"uppercase\",\n fontWeight: 500,\n }, children: item.tag }), _jsx(Text, { style: {\n margin: \"0 0 6px 0\",\n fontFamily: \"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif\",\n fontSize: \"14px\",\n fontWeight: 600,\n color: \"#FFFFFF\",\n lineHeight: 1.4,\n }, children: item.title }), _jsx(Text, { style: {\n margin: 0,\n fontFamily: \"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif\",\n fontSize: \"13px\",\n color: \"#9CA3AF\",\n lineHeight: 1.6,\n }, children: item.description })] }, `${item.tag}-${item.title}-${index}`))) }), _jsx(PrimaryButton, { href: ctaHref ?? \"https://workspacejson.dev/changelog\", children: ctaLabel ?? \"Read the full changelog\" })] }));\n}\nPioneerUpdate.PreviewProps = {\n headline: \"Here's what changed since you requested access.\",\n items: [\n {\n tag: \"NEW\",\n title: \"Canonical Pioneer email templates are now wired\",\n description: \"The cohort now gets the same dark shell and gecko mark across every lifecycle email.\",\n },\n {\n tag: \"FIXED\",\n title: \"Fragile file alerts now hide the file path on Free\",\n description: \"Pro unlocks the full intelligence card while the base tier stays useful and sparse.\",\n },\n ],\n ctaLabel: \"Read the full changelog\",\n ctaHref: \"https://workspacejson.dev/changelog\",\n};\nexport const pioneerUpdateTemplate = {\n id: \"pioneer.update\",\n category: \"product\",\n subject: (ctx) => ctx.headline ?? \"Pioneer update\",\n component: PioneerUpdate,\n previewProps: PioneerUpdate.PreviewProps,\n schema: PioneerUpdatePropsSchema,\n};\nexport default PioneerUpdate;\n","import { jsxs as _jsxs, jsx as _jsx } from \"react/jsx-runtime\";\n/**\n * E02: Queue Update Email\n *\n * Sent when a pioneer completes an accelerator action.\n * Shows new queue position and available actions.\n * Voice: confident peer, no hype.\n */\nimport { Heading, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const QueueUpdatePropsSchema = z.object({\n firstName: z.string(),\n previousPosition: z.number(),\n currentPosition: z.number(),\n actionCompleted: z.string(),\n pointsEarned: z.number(),\n totalPoints: z.number(),\n pioneerUrl: z.string().url(),\n});\nexport function QueueUpdate({ firstName, previousPosition, currentPosition, actionCompleted, pointsEarned, totalPoints, pioneerUrl, }) {\n const positionsGained = previousPosition - currentPosition;\n return (_jsxs(Wrapper, { preview: `you moved up ${positionsGained} spots`, children: [_jsxs(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 8px\" }, children: [\"you moved up \", positionsGained, \" \", positionsGained === 1 ? \"spot\" : \"spots\"] }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n margin: \"20px 0\",\n textAlign: \"center\",\n }, children: [_jsxs(Text, { style: { color: brand.primary, fontSize: \"36px\", fontWeight: 700, margin: \"0\" }, children: [\"#\", currentPosition] }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"13px\", margin: \"4px 0 0\" }, children: \"your position in line\" })] }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\" }, children: [actionCompleted, \" earned you +\", pointsEarned, \" points (\", totalPoints, \" total).\"] }), _jsx(PrimaryButton, { href: pioneerUrl, children: \"see what else moves the line\" })] }));\n}\nexport const queueUpdateTemplate = {\n id: \"product.queue-update\",\n category: \"product\",\n subject: () => \"you moved up in line\",\n component: QueueUpdate,\n previewProps: {\n firstName: \"Alex\",\n previousPosition: 150,\n currentPosition: 100,\n actionCompleted: \"GitHub star\",\n pointsEarned: 10,\n totalPoints: 60,\n pioneerUrl: \"https://vreko.dev/pioneer\",\n },\n schema: QueueUpdatePropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * E07: Re-engagement Email\n *\n * Sent when a user enters CHURNING state (no activity for 7+ days).\n * Hooks them back with specific changes detected in their codebase.\n * Voice: factual, data-driven - never guilt or emotional manipulation.\n */\nimport { Heading, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const ReEngagementPropsSchema = z.object({\n firstName: z.string(),\n daysSinceLastActive: z.number(),\n recentCommitCount: z.number(),\n newHotspotCount: z.number(),\n topChangedFile: z.string().optional(),\n dashboardUrl: z.string().url(),\n});\nexport function ReEngagement({ firstName, daysSinceLastActive, recentCommitCount, newHotspotCount, topChangedFile, dashboardUrl, }) {\n return (_jsxs(Wrapper, { preview: `${recentCommitCount} commits since your last session`, children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 8px\" }, children: \"your codebase kept moving\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 20px\" }, children: [firstName, \", it has been \", daysSinceLastActive, \" days since your last Vreko session. Your repository had\", \" \", recentCommitCount, \" commits in that time.\"] }), (newHotspotCount > 0 || topChangedFile) && (_jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"16px\",\n margin: \"0 0 20px\",\n }, children: [newHotspotCount > 0 && (_jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: \"0 0 8px\" }, children: [newHotspotCount, \" new fragile hotspot\", newHotspotCount !== 1 ? \"s\" : \"\", \" detected.\"] })), topChangedFile && (_jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"13px\", margin: \"0\" }, children: [\"Most changed: \", topChangedFile] }))] })), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: \"0 0 16px\" }, children: \"Snapshots are paused while Vreko is not running. Open your editor to resume protection.\" }), _jsx(PrimaryButton, { href: dashboardUrl, children: \"view changes\" })] }));\n}\nexport const reEngagementTemplate = {\n id: \"product.re-engagement\",\n category: \"product\",\n subject: () => \"your codebase kept moving\",\n component: ReEngagement,\n previewProps: {\n firstName: \"Alex\",\n daysSinceLastActive: 8,\n recentCommitCount: 23,\n newHotspotCount: 2,\n topChangedFile: \"src/auth/session.ts\",\n dashboardUrl: \"https://vreko.dev/dashboard\",\n },\n schema: ReEngagementPropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * E08: Referral Converted Email\n *\n * Sent when an invited friend registers via the pioneer's referral link.\n * Celebrates the viral action and shows the points earned.\n * Voice: factual confirmation, no excessive excitement.\n */\nimport { Heading, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const ReferralConvertedPropsSchema = z.object({\n firstName: z.string(),\n referredName: z.string().optional(),\n pointsEarned: z.number(),\n totalPoints: z.number(),\n newQueuePosition: z.number(),\n totalReferrals: z.number(),\n pioneerUrl: z.string().url(),\n});\nexport function ReferralConverted({ firstName, referredName, pointsEarned, totalPoints, newQueuePosition, totalReferrals, pioneerUrl, }) {\n return (_jsxs(Wrapper, { preview: `referral converted - +${pointsEarned} points`, children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 8px\" }, children: \"referral converted\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 20px\" }, children: [firstName, \", \", referredName ? `${referredName} signed` : \"someone signed\", \" up with your link. +\", pointsEarned, \" points earned.\"] }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n margin: \"0 0 20px\",\n textAlign: \"center\",\n }, children: [_jsxs(Text, { style: { color: brand.primary, fontSize: \"32px\", fontWeight: 700, margin: \"0\" }, children: [\"#\", newQueuePosition] }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"13px\", margin: \"4px 0 0\" }, children: \"your position in line\" })] }), _jsxs(Text, { style: { color: brand.textMuted, fontSize: \"13px\", lineHeight: \"1.6\" }, children: [totalPoints, \" total points from \", totalReferrals, \" referral\", totalReferrals !== 1 ? \"s\" : \"\", \".\"] }), _jsx(PrimaryButton, { href: pioneerUrl, children: \"invite more\" })] }));\n}\nexport const referralConvertedTemplate = {\n id: \"product.referral-converted\",\n category: \"product\",\n subject: () => \"referral converted\",\n component: ReferralConverted,\n previewProps: {\n firstName: \"Alex\",\n referredName: \"Jordan\",\n pointsEarned: 50,\n totalPoints: 150,\n newQueuePosition: 75,\n totalReferrals: 3,\n pioneerUrl: \"https://vreko.dev/pioneer\",\n },\n schema: ReferralConvertedPropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Heading, Hr, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const SystemAlertPropsSchema = z.object({\n title: z.string(),\n message: z.string(),\n severity: z.enum([\"critical\", \"warning\", \"info\"]),\n actionRequired: z.boolean(),\n actionUrl: z.string().url().optional(),\n actionLabel: z.string().optional(),\n additionalDetails: z.string().optional(),\n timestamp: z.string(),\n});\nconst severityConfig = {\n critical: { color: brand.danger, label: \"CRITICAL\" },\n warning: { color: brand.warning, label: \"WARNING\" },\n info: { color: brand.info, label: \"INFO\" },\n};\nfunction SystemAlert({ title, message, severity, actionRequired, actionUrl, actionLabel, additionalDetails, timestamp, }) {\n const config = severityConfig[severity];\n return (_jsxs(Wrapper, { preview: message.slice(0, 90), children: [_jsxs(Section, { style: {\n borderLeft: `4px solid ${config.color}`,\n paddingLeft: \"16px\",\n marginBottom: \"24px\",\n }, children: [_jsx(Text, { style: {\n color: config.color,\n fontSize: \"11px\",\n fontWeight: 700,\n margin: \"0 0 4px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.1em\",\n }, children: config.label }), _jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"22px\", fontWeight: 700, margin: \"0 0 8px\" }, children: title }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: 0 }, children: message })] }), additionalDetails && (_jsx(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"6px\",\n padding: \"16px\",\n border: `1px solid ${brand.border}`,\n marginBottom: \"24px\",\n }, children: _jsx(Text, { style: {\n color: brand.textSecondary,\n fontSize: \"13px\",\n lineHeight: \"1.6\",\n margin: 0,\n fontFamily: \"monospace\",\n }, children: additionalDetails }) })), actionRequired && actionUrl && actionLabel && (_jsx(PrimaryButton, { href: actionUrl, children: actionLabel })), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsxs(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: [\"Sent at \", timestamp] })] }));\n}\nSystemAlert.PreviewProps = {\n title: \"Snapshot Protection Degraded\",\n message: \"The Vreko daemon has not been responding for 5 minutes. Your code changes are not being protected during this time.\",\n severity: \"critical\",\n actionRequired: true,\n actionUrl: \"https://vreko.dev/dashboard/status\",\n actionLabel: \"Check System Status\",\n additionalDetails: \"Last successful heartbeat: 2026-03-29T14:22:00Z\\nAffected workspace: /Users/user1/project\",\n timestamp: \"March 29, 2026 at 2:27 PM UTC\",\n};\nexport const productSystemAlertTemplate = {\n id: \"product.system-alert\",\n category: \"product\",\n subject: (props) => props.title,\n component: SystemAlert,\n previewProps: SystemAlert.PreviewProps,\n schema: SystemAlertPropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Heading, Hr, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const WaitlistConfirmationPropsSchema = z.object({\n email: z.string().email(),\n docsUrl: z.string().url(),\n websiteUrl: z.string().url(),\n});\nexport function WaitlistConfirmation({ email, docsUrl, websiteUrl }) {\n return (_jsxs(Wrapper, { preview: \"You're on the Vreko early access list\", children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"28px\", fontWeight: 700, margin: \"0 0 8px\" }, children: \"Thanks for your interest \\uD83D\\uDE4F\" }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: \"Hey there, you're on the list. We're letting people in gradually to make sure everyone gets a great experience. We'll email you when it's your turn.\" }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n border: `1px solid ${brand.border}`,\n marginBottom: \"24px\",\n }, children: [_jsx(Text, { style: {\n color: brand.textSecondary,\n fontSize: \"12px\",\n fontWeight: 600,\n margin: \"0 0 12px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n }, children: \"In the meantime\" }), _jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: \"0 0 8px\" }, children: [_jsx(\"span\", { style: { color: brand.primary, marginRight: \"8px\" }, children: \"\\u2192\" }), _jsx(\"a\", { href: docsUrl, style: { color: brand.primary, textDecoration: \"none\" }, children: \"Documentation\" })] }), _jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: 0 }, children: [_jsx(\"span\", { style: { color: brand.primary, marginRight: \"8px\" }, children: \"\\u2192\" }), _jsx(\"a\", { href: websiteUrl, style: { color: brand.primary, textDecoration: \"none\" }, children: \"Website\" })] })] }), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: \" - Q, founder of Vreko\" })] }));\n}\nWaitlistConfirmation.PreviewProps = {\n email: \"dev@example.com\",\n docsUrl: \"https://docs.vreko.dev\",\n websiteUrl: \"https://vreko.dev\",\n};\nexport const waitlistConfirmationTemplate = {\n id: \"product.waitlist-confirmation\",\n category: \"product\",\n subject: () => \"You're on the Vreko early access list\",\n component: WaitlistConfirmation,\n previewProps: WaitlistConfirmation.PreviewProps,\n schema: WaitlistConfirmationPropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\nimport { Heading, Hr, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const WeeklyDigestPropsSchema = z.object({\n firstName: z.string(),\n weekStartDate: z.string(),\n weekEndDate: z.string(),\n stats: z.object({\n totalSnapshots: z.number(),\n testsPassed: z.number(),\n regressionsCaught: z.number(),\n activeProjects: z.number(),\n pioneerPointsEarned: z.number(),\n comparisonToPreviousWeek: z\n .object({\n snapshotsDelta: z.number(),\n regressionsDelta: z.number(),\n })\n .optional(),\n }),\n highlights: z.array(z.object({\n icon: z.string(),\n title: z.string(),\n description: z.string(),\n })),\n dashboardUrl: z.string().url(),\n});\nfunction deltaLabel(delta) {\n if (delta > 0) {\n return `+${delta} from last week`;\n }\n if (delta < 0) {\n return `${delta} from last week`;\n }\n return \"same as last week\";\n}\nfunction WeeklyDigest({ firstName, weekStartDate, weekEndDate, stats, highlights, dashboardUrl }) {\n const statItems = [\n { label: \"Snapshots\", value: stats.totalSnapshots, delta: stats.comparisonToPreviousWeek?.snapshotsDelta },\n { label: \"Tests passed\", value: stats.testsPassed, delta: undefined },\n {\n label: \"Regressions caught\",\n value: stats.regressionsCaught,\n delta: stats.comparisonToPreviousWeek?.regressionsDelta,\n },\n { label: \"Active projects\", value: stats.activeProjects, delta: undefined },\n { label: \"Pioneer points\", value: stats.pioneerPointsEarned, delta: undefined },\n ];\n return (_jsxs(Wrapper, { preview: \"Your weekly intelligence summary is ready\", children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 8px\" }, children: \"\\uD83E\\uDD8E Your week in review\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: [firstName, \", here's your Vreko intelligence summary for \", weekStartDate, \" \\u2013 \", weekEndDate, \".\"] }), _jsx(Section, { style: { marginBottom: \"24px\" }, children: _jsx(\"table\", { style: { width: \"100%\", borderCollapse: \"separate\", borderSpacing: \"8px\" }, children: _jsx(\"tbody\", { children: [0, 2, 4].map((rowStart) => (_jsx(\"tr\", { children: statItems.slice(rowStart, rowStart + 2).map((stat, j) => (_jsxs(\"td\", { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n border: `1px solid ${brand.border}`,\n padding: \"16px\",\n width: \"50%\",\n verticalAlign: \"top\",\n }, children: [_jsx(Text, { style: {\n color: brand.primary,\n fontSize: \"28px\",\n fontWeight: 700,\n margin: \"0 0 4px\",\n lineHeight: 1,\n }, children: stat.value.toLocaleString() }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: stat.label }), stat.delta !== undefined && (_jsx(Text, { style: {\n color: stat.delta >= 0 ? brand.success : brand.danger,\n fontSize: \"11px\",\n margin: \"4px 0 0\",\n }, children: deltaLabel(stat.delta) }))] }, j))) }, rowStart))) }) }) }), highlights.length > 0 && (_jsxs(_Fragment, { children: [_jsx(Text, { style: {\n color: brand.textSecondary,\n fontSize: \"13px\",\n fontWeight: 600,\n margin: \"0 0 12px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n }, children: \"Highlights\" }), highlights.map((h, i) => (_jsx(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"6px\",\n padding: \"14px 16px\",\n border: `1px solid ${brand.border}`,\n marginBottom: \"8px\",\n }, children: _jsx(\"table\", { style: { borderCollapse: \"collapse\" }, children: _jsx(\"tbody\", { children: _jsxs(\"tr\", { children: [_jsx(\"td\", { style: {\n width: \"32px\",\n verticalAlign: \"top\",\n fontSize: \"18px\",\n paddingTop: \"2px\",\n }, children: h.icon }), _jsxs(\"td\", { children: [_jsx(Text, { style: {\n color: brand.textPrimary,\n fontSize: \"14px\",\n fontWeight: 600,\n margin: \"0 0 2px\",\n }, children: h.title }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: h.description })] })] }) }) }) }, i)))] })), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsx(PrimaryButton, { href: dashboardUrl, children: \"View Full Dashboard\" })] }));\n}\nWeeklyDigest.PreviewProps = {\n firstName: \"Alex\",\n weekStartDate: \"Mar 23\",\n weekEndDate: \"Mar 29, 2026\",\n stats: {\n totalSnapshots: 47,\n testsPassed: 312,\n regressionsCaught: 3,\n activeProjects: 2,\n pioneerPointsEarned: 85,\n comparisonToPreviousWeek: {\n snapshotsDelta: 12,\n regressionsDelta: 1,\n },\n },\n highlights: [\n {\n icon: \"🛡️\",\n title: \"Caught a breaking migration\",\n description: \"Snapshot restored auth service before data loss occurred\",\n },\n {\n icon: \"⚡\",\n title: \"Fastest session ever\",\n description: \"Completed refactor in 23 minutes with 0 regressions\",\n },\n {\n icon: \"🧠\",\n title: \"New pattern learned\",\n description: '\"When editing middleware, check that error handling is preserved\"',\n },\n ],\n dashboardUrl: \"https://vreko.dev/dashboard\",\n};\nexport const productWeeklyDigestTemplate = {\n id: \"product.weekly-digest\",\n category: \"product\",\n subject: (props) => `Your Vreko week: ${props.stats.regressionsCaught} regressions caught`,\n component: WeeklyDigest,\n previewProps: WeeklyDigest.PreviewProps,\n schema: WeeklyDigestPropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Heading, Hr, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { GhostButton, PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const WelcomePropsSchema = z.object({\n firstName: z.string(),\n planName: z.string(),\n planFeatures: z.array(z.string()),\n dashboardUrl: z.string().url(),\n docsUrl: z.string().url(),\n pioneerTier: z.string().optional(),\n pioneerPoints: z.number().optional(),\n});\nconst SETUP_STEPS = [\n { number: \"1\", text: \"Install the VS Code extension\", href: \"vscode:extension/MarcelleLabs.vreko-vscode\" },\n { number: \"2\", text: \"Open any project you work on with AI tools\", href: null },\n { number: \"3\", text: \"Run your next AI prompt - Vreko is already informing the context\", href: null },\n];\nfunction Welcome({ firstName, planName, planFeatures, dashboardUrl, docsUrl, pioneerTier, pioneerPoints, }) {\n return (_jsxs(Wrapper, { preview: \"One link to install. Your agent sees Vreko on the next prompt.\", children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"28px\", fontWeight: 700, margin: \"0 0 8px\" }, children: \"Welcome to Vreko \\uD83E\\uDD8E\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 8px\" }, children: [\"Hey \", firstName, \", you're in.\", \" \", pioneerTier\n ? \"Pioneer access means full Pro features free during beta, and a permanent discount when we launch.\"\n : `Your ${planName} plan is active.`] }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: \"Here's what to do in the next 5 minutes:\" }), _jsx(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n border: `1px solid ${brand.border}`,\n marginBottom: \"24px\",\n }, children: SETUP_STEPS.map((step) => (_jsxs(Text, { style: {\n color: brand.textPrimary,\n fontSize: \"14px\",\n margin: \"0 0 12px\",\n display: \"flex\",\n alignItems: \"flex-start\",\n gap: \"8px\",\n }, children: [_jsxs(\"span\", { style: { color: brand.primary, fontWeight: 700, minWidth: \"20px\" }, children: [step.number, \".\"] }), step.text] }, step.number))) }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 24px\" }, children: \"You don't need to configure anything. Vreko detects your agent setup (Cursor, Claude, Copilot) and writes its intelligence directly into the context files your agent already reads. Your next prompt sees it.\" }), pioneerTier && (_jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"20px\",\n border: `1px solid ${brand.primary}`,\n marginBottom: \"24px\",\n }, children: [_jsx(Text, { style: {\n color: brand.primary,\n fontSize: \"12px\",\n fontWeight: 600,\n margin: \"0 0 4px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.05em\",\n }, children: \"Pioneer Program\" }), _jsxs(Text, { style: { color: brand.textPrimary, fontSize: \"16px\", fontWeight: 700, margin: \"0 0 4px\" }, children: [pioneerTier, \" Pioneer \\uD83E\\uDD8E\"] }), pioneerPoints !== undefined && (_jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"13px\", margin: 0 }, children: [pioneerPoints, \" points earned\"] }))] })), _jsx(PrimaryButton, { href: dashboardUrl, children: \"Open Dashboard\" }), _jsx(\"span\", { style: { display: \"inline-block\", width: \"12px\" } }), _jsx(GhostButton, { href: docsUrl, children: \"Read the Docs\" }), _jsx(Hr, { style: { borderColor: brand.border, margin: \"24px 0\" } }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"13px\", lineHeight: \"1.6\", margin: \"0 0 12px\" }, children: \"If you use Claude Desktop or a custom agent harness, reply to this email and I'll send you the advanced integration guide (MCP, hooks, CLI).\" }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: \"0 0 8px\" }, children: \"- Q, solo founder, Marcelle Labs\" }), _jsx(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: 0 }, children: \"P.S. Everything Vreko learns stays on your machine. Only metadata reaches us, and only for features you've opted into.\" })] }));\n}\nWelcome.PreviewProps = {\n firstName: \"Alex\",\n planName: \"Pro\",\n planFeatures: [\n \"Unlimited AI-triggered snapshots\",\n \"Pattern learning across sessions\",\n \"Priority support\",\n \"Advanced intelligence briefings\",\n ],\n dashboardUrl: \"https://vreko.dev/dashboard\",\n docsUrl: \"https://vreko.dev/docs\",\n pioneerTier: \"Gold\",\n pioneerPoints: 420,\n};\nexport const productWelcomeTemplate = {\n id: \"product.welcome\",\n category: \"product\",\n subject: () => \"Welcome to Vreko. One link to install.\",\n component: Welcome,\n previewProps: Welcome.PreviewProps,\n schema: WelcomePropsSchema,\n};\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n/**\n * E06: Zeigarnik Unlock Email\n *\n * Sent when a locked insight becomes available after N days of observation.\n * Uses the Zeigarnik effect - the teaser from onboarding is now resolved.\n * Voice: confident peer showing data, not selling.\n */\nimport { Heading, Section, Text } from \"@react-email/components\";\nimport { z } from \"zod\";\nimport { PrimaryButton } from \"../../components/PrimaryButton.js\";\nimport Wrapper, { brand } from \"../../components/Wrapper.js\";\nexport const ZeigarnikUnlockPropsSchema = z.object({\n firstName: z.string(),\n insightTeaser: z.string(),\n resolvedObservation: z.string(),\n resolvedAction: z.string(),\n daysObserved: z.number(),\n dashboardUrl: z.string().url(),\n});\nexport function ZeigarnikUnlock({ firstName, insightTeaser, resolvedObservation, resolvedAction, daysObserved, dashboardUrl, }) {\n return (_jsxs(Wrapper, { preview: `insight unlocked after ${daysObserved} days`, children: [_jsx(Heading, { style: { color: brand.textPrimary, fontSize: \"24px\", fontWeight: 700, margin: \"0 0 8px\" }, children: \"insight unlocked\" }), _jsxs(Text, { style: { color: brand.textSecondary, fontSize: \"14px\", lineHeight: \"1.6\", margin: \"0 0 20px\" }, children: [firstName, \", remember this from your initial scan?\"] }), _jsx(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"16px\",\n margin: \"0 0 16px\",\n borderLeft: `3px solid ${brand.textMuted}`,\n }, children: _jsx(Text, { style: { color: brand.textMuted, fontSize: \"13px\", fontStyle: \"italic\", margin: \"0\" }, children: insightTeaser }) }), _jsxs(Section, { style: {\n backgroundColor: brand.surfaceElevated,\n borderRadius: \"8px\",\n padding: \"16px\",\n margin: \"0 0 20px\",\n borderLeft: `3px solid ${brand.primary}`,\n }, children: [_jsx(Text, { style: { color: brand.textPrimary, fontSize: \"14px\", margin: \"0 0 8px\" }, children: resolvedObservation }), _jsx(Text, { style: { color: brand.textSecondary, fontSize: \"13px\", margin: \"0\" }, children: resolvedAction })] }), _jsxs(Text, { style: { color: brand.textMuted, fontSize: \"12px\", margin: \"0 0 16px\" }, children: [\"Based on \", daysObserved, \" days of metadata observation. No code content was read.\"] }), _jsx(PrimaryButton, { href: dashboardUrl, children: \"view in dashboard\" })] }));\n}\nexport const zeigarnikUnlockTemplate = {\n id: \"product.zeigarnik-unlock\",\n category: \"product\",\n subject: () => \"insight unlocked\",\n component: ZeigarnikUnlock,\n previewProps: {\n firstName: \"Alex\",\n insightTeaser: \"High revert rate detected\",\n resolvedObservation: \"src/auth/session.ts has 23 reverts in 90 days\",\n resolvedAction: \"Add snapshot before auth changes\",\n daysObserved: 7,\n dashboardUrl: \"https://vreko.dev/dashboard\",\n },\n schema: ZeigarnikUnlockPropsSchema,\n};\n","import { render } from \"@react-email/render\";\n/**\n * EmailService - Core email orchestration layer\n *\n * Features:\n * - Middleware pattern for composable email processing\n * - Template rendering with React Email\n * - Provider routing (Resend vs HubSpot)\n * - Dry-run mode support\n * - Retry queue integration\n */\nexport class EmailService {\n middlewares = [];\n // biome-ignore lint/suspicious/noExplicitAny: template registry interface is not yet finalized\n templateRegistry; // Will be replaced with actual registry\n providers = new Map();\n defaultFrom = \"Vreko <q@vreko.dev>\";\n fromAddresses = {};\n defaultReplyTo;\n dryRunMode = false;\n /**\n * Enable or disable service-level dry-run mode.\n * When enabled, emails are rendered but never sent - the full payload is logged instead.\n */\n setDryRun(enabled) {\n this.dryRunMode = enabled;\n return this;\n }\n /**\n * Set per-category from addresses (e.g. { authentication: 'security@...' })\n */\n setFromAddresses(addresses) {\n this.fromAddresses = addresses;\n return this;\n }\n /**\n * Set the default from address used when no category-specific address is configured\n */\n setDefaultFrom(from) {\n this.defaultFrom = from;\n return this;\n }\n /**\n * Set a global reply-to address for all outgoing emails\n */\n setDefaultReplyTo(replyTo) {\n this.defaultReplyTo = replyTo;\n return this;\n }\n /**\n * Add middleware to the processing chain\n */\n use(middleware) {\n this.middlewares.push(middleware);\n return this;\n }\n /**\n * Primary send method with composable middleware\n */\n async send(request) {\n // Service-level dry-run takes precedence over per-request flag\n if (this.dryRunMode || request.dryRun) {\n return this.handleDryRun(request);\n }\n // Compose middleware chain\n const execute = this.middlewares.reduceRight((next, middleware) => () => middleware(request, next), () => this.executeDelivery(request));\n return execute();\n }\n /**\n * Template-based convenience method\n */\n async sendFromTemplate(options) {\n const template = await this.templateRegistry?.get(options.templateId);\n if (!template) {\n return {\n success: false,\n error: `Template not found: ${options.templateId}`,\n };\n }\n // Validate context against schema\n const validation = template.schema.safeParse(options.context);\n if (!validation.success) {\n return {\n success: false,\n error: `Invalid template context: ${validation.error.message}`,\n };\n }\n // Determine category and priority from template\n const category = template.category;\n const priority = this.getPriorityForCategory(category);\n return this.send({\n to: options.to,\n provider: \"auto\",\n category,\n priority,\n template: {\n id: options.templateId,\n props: validation.data,\n },\n metadata: options.metadata,\n });\n }\n /**\n * Batch sending for digests\n */\n async sendBatch(requests) {\n const results = await Promise.allSettled(requests.map((request) => this.send(request)));\n const succeeded = results.filter((r) => r.status === \"fulfilled\" && r.value.success).length;\n return {\n total: requests.length,\n succeeded,\n failed: requests.length - succeeded,\n results: results.map((r) => r.status === \"fulfilled\" ? r.value : { success: false, error: \"Promise rejected\" }),\n };\n }\n /**\n * Execute email delivery (called after middleware chain)\n */\n async executeDelivery(request) {\n try {\n // Get template\n const template = await this.templateRegistry?.get(request.template.id);\n if (!template) {\n throw new Error(`Template not found: ${request.template.id}`);\n }\n // Render HTML\n const html = await render(template.component(request.template.props));\n // Generate plain text fallback (improves deliverability and accessibility)\n const text = await render(template.component(request.template.props), {\n plainText: true,\n });\n // Resolve sender address: category-specific → default\n const from = this.fromAddresses[request.category] ?? this.defaultFrom;\n // Select provider\n const provider = this.selectProvider(request);\n // Send email\n const result = await provider.send({\n from,\n to: request.to.email,\n subject: template.subject(request.template.props),\n html,\n text,\n replyTo: this.defaultReplyTo,\n tags: [\n { name: \"category\", value: request.category },\n { name: \"template\", value: request.template.id.split(\".\")[1] ?? request.template.id },\n ],\n metadata: request.metadata,\n });\n // Track delivery\n await this.trackDelivery({\n userId: request.to.userId,\n templateId: request.template.id,\n category: request.category,\n provider: request.provider || \"resend\",\n recipientEmail: request.to.email,\n subject: template.subject(request.template.props),\n status: result.status,\n emailId: result.id,\n metadata: request.metadata,\n });\n return {\n success: result.status === \"sent\",\n emailId: result.id,\n error: result.error,\n };\n }\n catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n }\n }\n /**\n * Handle dry-run mode - renders the template fully and logs the complete payload\n * that would have been sent to the provider, without making any network calls.\n */\n async handleDryRun(request) {\n const template = await this.templateRegistry?.get(request.template.id);\n const _from = this.fromAddresses[request.category] ?? this.defaultFrom;\n let _subject = request.template.id;\n let _htmlPreview = \"(template not found)\";\n let _textPreview = \"(template not found)\";\n if (template) {\n _subject = template.subject(request.template.props);\n _htmlPreview = await render(template.component(request.template.props));\n _textPreview = await render(template.component(request.template.props), { plainText: true });\n }\n return {\n success: true,\n emailId: `dry-run-${Date.now()}`,\n };\n }\n /**\n * Select provider based on category or explicit request\n */\n // biome-ignore lint/suspicious/noExplicitAny: provider map holds heterogeneous provider types\n selectProvider(request) {\n if (request.provider && request.provider !== \"auto\") {\n return this.providers.get(request.provider);\n }\n // Auto-routing: Use Resend for transactional, HubSpot for marketing\n const provider = request.category === \"marketing\" ? \"hubspot\" : \"resend\";\n return this.providers.get(provider);\n }\n /**\n * Get default priority for email category\n */\n getPriorityForCategory(category) {\n const priorityMap = {\n authentication: \"critical\",\n billing: \"high\",\n onboarding: \"high\",\n product: \"normal\",\n marketing: \"low\",\n };\n return priorityMap[category] || \"normal\";\n }\n /**\n * Track email delivery in database\n */\n async trackDelivery(_data) {\n // Will be implemented with database integration\n // Issue: LIN-0000 - Insert into email_deliveries table\n }\n /**\n * Register email provider\n */\n registerProvider(name, provider) {\n this.providers.set(name, provider);\n }\n /**\n * Set template registry\n */\n setTemplateRegistry(registry) {\n this.templateRegistry = registry;\n }\n}\nexport async function sendFromTemplate(options) {\n return emailService.sendFromTemplate(options);\n}\n// Export singleton instance (to be configured in app initialization)\nexport const emailService = new EmailService();\n","import { Client } from \"@hubspot/api-client\";\nimport { logger } from \"@vreko/infrastructure\";\nimport type {\n\tCreateAssociation,\n\tCreateCompany,\n\tCreateContact,\n\tCreateDeal,\n\tGetCompany,\n\tGetContact,\n\tGetDeal,\n\tSearchObjects,\n\tUpdateCompany,\n\tUpdateContact,\n\tUpdateDeal,\n} from \"../../types\";\n\nlet hubspotClient: Client | null = null;\n\n/**\n * Get the HubSpot client instance with caching\n * @returns HubSpot client instance\n */\nexport function getHubSpotClient(): Client {\n\tif (hubspotClient) {\n\t\treturn hubspotClient;\n\t}\n\n\tconst accessToken = process.env.HUBSPOT_ACCESS_TOKEN;\n\tconst apiKey = process.env.HUBSPOT_API_KEY;\n\n\tif (!accessToken && !apiKey) {\n\t\tthrow new Error(\n\t\t\t\"Missing HubSpot authentication credentials. Please provide either HUBSPOT_ACCESS_TOKEN or HUBSPOT_API_KEY environment variable.\",\n\t\t);\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: HubSpot IConfiguration shape varies by version\n\tconst config: any = {};\n\n\tif (accessToken) {\n\t\tconfig.accessToken = accessToken;\n\t}\n\n\tif (apiKey) {\n\t\tconfig.developerApiKey = apiKey;\n\t}\n\n\thubspotClient = new Client(config);\n\tlogger.info(\"HubSpot client initialized successfully\");\n\n\treturn hubspotClient;\n}\n\n/**\n * Create a new contact in HubSpot\n * @param params Contact properties\n * @returns Created contact\n */\nexport const createContact: CreateContact = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Creating contact in HubSpot\", {\n\t\t\temail: params.properties.email,\n\t\t});\n\n\t\t// Filter out undefined properties\n\t\tconst properties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(params.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tproperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\tconst response = await client.crm.contacts.basicApi.create({\n\t\t\tproperties,\n\t\t});\n\n\t\tlogger.info(\"Contact created successfully\", {\n\t\t\tid: response.id,\n\t\t\temail: params.properties.email,\n\t\t});\n\n\t\tconst contactProperties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(response.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tcontactProperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: response.id,\n\t\t\t...contactProperties,\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to create contact\", {\n\t\t\terror,\n\t\t\temail: params.properties.email,\n\t\t});\n\t\tthrow error;\n\t}\n};\n\n/**\n * Update an existing contact in HubSpot\n * @param params Contact ID and properties to update\n * @returns Updated contact\n */\nexport const updateContact: UpdateContact = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Updating contact in HubSpot\", { id: params.id });\n\n\t\t// Filter out undefined properties\n\t\tconst properties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(params.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tproperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\tconst response = await client.crm.contacts.basicApi.update(params.id, {\n\t\t\tproperties,\n\t\t});\n\n\t\tlogger.info(\"Contact updated successfully\", { id: response.id });\n\n\t\tconst contactProperties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(response.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tcontactProperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: response.id,\n\t\t\t...contactProperties,\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to update contact\", { error, id: params.id });\n\t\tthrow error;\n\t}\n};\n\n/**\n * Get a contact by ID from HubSpot\n * @param params Contact ID and optional properties to retrieve\n * @returns Contact details\n */\nexport const getContact: GetContact = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Getting contact from HubSpot\", { id: params.id });\n\n\t\tconst response = await client.crm.contacts.basicApi.getById(params.id, params.properties);\n\n\t\tlogger.info(\"Contact retrieved successfully\", { id: response.id });\n\n\t\tconst contactProperties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(response.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tcontactProperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: response.id,\n\t\t\t...contactProperties,\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to get contact\", { error, id: params.id });\n\t\tthrow error;\n\t}\n};\n\n/**\n * Create a new company in HubSpot\n * @param params Company properties\n * @returns Created company\n */\nexport const createCompany: CreateCompany = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Creating company in HubSpot\", {\n\t\t\tname: params.properties.name,\n\t\t});\n\n\t\t// Filter out undefined properties\n\t\tconst properties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(params.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tproperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\tconst response = await client.crm.companies.basicApi.create({\n\t\t\tproperties,\n\t\t});\n\n\t\tlogger.info(\"Company created successfully\", {\n\t\t\tid: response.id,\n\t\t\tname: params.properties.name,\n\t\t});\n\n\t\tconst companyProperties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(response.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tcompanyProperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: response.id,\n\t\t\t...companyProperties,\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to create company\", {\n\t\t\terror,\n\t\t\tname: params.properties.name,\n\t\t});\n\t\tthrow error;\n\t}\n};\n\n/**\n * Update an existing company in HubSpot\n * @param params Company ID and properties to update\n * @returns Updated company\n */\nexport const updateCompany: UpdateCompany = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Updating company in HubSpot\", { id: params.id });\n\n\t\t// Filter out undefined properties\n\t\tconst properties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(params.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tproperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\tconst response = await client.crm.companies.basicApi.update(params.id, {\n\t\t\tproperties,\n\t\t});\n\n\t\tlogger.info(\"Company updated successfully\", { id: response.id });\n\n\t\tconst companyProperties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(response.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tcompanyProperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: response.id,\n\t\t\t...companyProperties,\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to update company\", { error, id: params.id });\n\t\tthrow error;\n\t}\n};\n\n/**\n * Get a company by ID from HubSpot\n * @param params Company ID and optional properties to retrieve\n * @returns Company details\n */\nexport const getCompany: GetCompany = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Getting company from HubSpot\", { id: params.id });\n\n\t\tconst response = await client.crm.companies.basicApi.getById(params.id, params.properties);\n\n\t\tlogger.info(\"Company retrieved successfully\", { id: response.id });\n\n\t\tconst companyProperties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(response.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tcompanyProperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: response.id,\n\t\t\t...companyProperties,\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to get company\", { error, id: params.id });\n\t\tthrow error;\n\t}\n};\n\n/**\n * Create a new deal in HubSpot\n * @param params Deal properties and optional associations\n * @returns Created deal\n */\nexport const createDeal: CreateDeal = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Creating deal in HubSpot\", {\n\t\t\tname: params.properties.dealname,\n\t\t});\n\n\t\t// Filter out undefined properties\n\t\tconst properties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(params.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tproperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\tconst response = await client.crm.deals.basicApi.create({\n\t\t\tproperties,\n\t\t});\n\n\t\t// Handle associations if provided\n\t\tif (params.associations && params.associations.length > 0) {\n\t\t\tfor (const association of params.associations) {\n\t\t\t\tawait client.crm.associations.v4.basicApi.create(\n\t\t\t\t\t\"deal\",\n\t\t\t\t\tresponse.id,\n\t\t\t\t\tassociation.toType,\n\t\t\t\t\tassociation.toId,\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// @ts-expect-error - Type definitions may not match actual API\n\t\t\t\t\t\t\tassociationCategory: \"HUBSPOT_DEFINED\",\n\t\t\t\t\t\t\t// @ts-expect-error - Type definitions may not match actual API\n\t\t\t\t\t\t\tassociationTypeId:\n\t\t\t\t\t\t\t\tNumber.parseInt(association.associationType, 10) || association.associationType,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tlogger.info(\"Deal created successfully\", {\n\t\t\tid: response.id,\n\t\t\tname: params.properties.dealname,\n\t\t});\n\n\t\tconst dealProperties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(response.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tdealProperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: response.id,\n\t\t\t...dealProperties,\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to create deal\", {\n\t\t\terror,\n\t\t\tname: params.properties.dealname,\n\t\t});\n\t\tthrow error;\n\t}\n};\n\n/**\n * Update an existing deal in HubSpot\n * @param params Deal ID and properties to update\n * @returns Updated deal\n */\nexport const updateDeal: UpdateDeal = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Updating deal in HubSpot\", { id: params.id });\n\n\t\t// Filter out undefined properties\n\t\tconst properties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(params.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tproperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\tconst response = await client.crm.deals.basicApi.update(params.id, {\n\t\t\tproperties,\n\t\t});\n\n\t\tlogger.info(\"Deal updated successfully\", { id: response.id });\n\n\t\tconst dealProperties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(response.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tdealProperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: response.id,\n\t\t\t...dealProperties,\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to update deal\", { error, id: params.id });\n\t\tthrow error;\n\t}\n};\n\n/**\n * Get a deal by ID from HubSpot\n * @param params Deal ID and optional properties to retrieve\n * @returns Deal details\n */\nexport const getDeal: GetDeal = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Getting deal from HubSpot\", { id: params.id });\n\n\t\tconst response = await client.crm.deals.basicApi.getById(params.id, params.properties);\n\n\t\tlogger.info(\"Deal retrieved successfully\", { id: response.id });\n\n\t\tconst dealProperties: { [key: string]: string } = {};\n\t\tfor (const [key, value] of Object.entries(response.properties)) {\n\t\t\tif (value !== undefined && value !== null) {\n\t\t\t\tdealProperties[key] = value.toString();\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tid: response.id,\n\t\t\t...dealProperties,\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to get deal\", { error, id: params.id });\n\t\tthrow error;\n\t}\n};\n\n/**\n * Search for objects in HubSpot\n * @param params Search parameters\n * @returns Search results\n */\nexport const searchObjects: SearchObjects = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Searching objects in HubSpot\", {\n\t\t\tobjectType: params.objectType,\n\t\t});\n\n\t\tconst response = await client.crm.objects.searchApi.doSearch(params.objectType, {\n\t\t\tproperties: params.properties,\n\t\t\tlimit: params.limit,\n\t\t\tafter: params.after?.toString(),\n\t\t});\n\n\t\tlogger.info(\"Objects search completed successfully\", {\n\t\t\tobjectType: params.objectType,\n\t\t\tresultsCount: response.results?.length || 0,\n\t\t});\n\n\t\treturn response;\n\t} catch (error) {\n\t\tlogger.error(\"Failed to search objects\", {\n\t\t\terror,\n\t\t\tobjectType: params.objectType,\n\t\t});\n\t\tthrow error;\n\t}\n};\n\n/**\n * Create an association between two objects in HubSpot\n * @param params Association parameters\n */\nexport const createAssociation: CreateAssociation = async (params) => {\n\tconst client = getHubSpotClient();\n\n\ttry {\n\t\tlogger.info(\"Creating association in HubSpot\", {\n\t\t\tfromType: params.fromObjectType,\n\t\t\tfromId: params.fromObjectId,\n\t\t\ttoType: params.toObjectType,\n\t\t\ttoId: params.toObjectId,\n\t\t});\n\n\t\tawait client.crm.associations.v4.basicApi.create(\n\t\t\tparams.fromObjectType,\n\t\t\tparams.fromObjectId,\n\t\t\tparams.toObjectType,\n\t\t\tparams.toObjectId,\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\t// @ts-expect-error - Type definitions may not match actual API\n\t\t\t\t\tassociationCategory: \"HUBSPOT_DEFINED\",\n\t\t\t\t\t// @ts-expect-error - Type definitions may not match actual API\n\t\t\t\t\tassociationTypeId: Number.parseInt(params.associationType, 10) || params.associationType,\n\t\t\t\t},\n\t\t\t],\n\t\t);\n\n\t\tlogger.info(\"Association created successfully\", {\n\t\t\tfromType: params.fromObjectType,\n\t\t\tfromId: params.fromObjectId,\n\t\t\ttoType: params.toObjectType,\n\t\t\ttoId: params.toObjectId,\n\t\t});\n\t} catch (error) {\n\t\tlogger.error(\"Failed to create association\", { error });\n\t\tthrow error;\n\t}\n};\n","// ESM imports fixed for Node.js v22+\nimport { logger } from \"@vreko/infrastructure\";\nimport { getHubSpotClient } from \"../provider/hubspot/index.js\";\nimport { createHubSpotContact, updateHubSpotContact } from \"./contacts.js\";\n/**\n * Sync a Vreko user to HubSpot\n * Creates a new contact or updates existing one based on email\n *\n * @param userData - User data to sync\n * @returns HubSpot contact ID\n */\nexport async function syncUserToHubSpot(userData) {\n logger.info(\"Syncing user to HubSpot\", { email: userData.email });\n const properties = mapUserDataToHubSpotProperties(userData);\n try {\n // Try to find existing contact by email\n const existingContact = await findContactByEmail(userData.email);\n if (existingContact?.id) {\n // Update existing contact\n const updated = await updateHubSpotContact({\n id: existingContact.id,\n properties,\n });\n logger.info(\"Updated existing HubSpot contact\", {\n id: updated.id,\n email: userData.email,\n });\n return updated.id;\n }\n // Create new contact\n const created = await createHubSpotContact({ properties });\n logger.info(\"Created new HubSpot contact\", {\n id: created.id,\n email: userData.email,\n });\n return created.id;\n }\n catch (error) {\n logger.error(\"Failed to sync user to HubSpot\", {\n error,\n email: userData.email,\n });\n throw error;\n }\n}\n/**\n * Find a contact by email address\n */\nexport async function findContactByEmail(email) {\n try {\n const client = getHubSpotClient();\n const response = await client.crm.contacts.searchApi.doSearch({\n filterGroups: [\n {\n filters: [\n {\n propertyName: \"email\",\n // @ts-expect-error - HubSpot SDK type definitions may not match actual API\n operator: \"EQ\",\n value: email,\n },\n ],\n },\n ],\n properties: [\"email\", \"firstname\", \"lastname\", \"vreko_user_id\"],\n limit: 1,\n });\n if (response.results && response.results.length > 0) {\n const result = response.results[0];\n return {\n id: result.id,\n ...result.properties,\n };\n }\n return null;\n }\n catch (_error) {\n logger.warn(\"Contact not found by email\", { email });\n return null;\n }\n}\n/**\n * Update contact properties in HubSpot\n */\nexport async function updateContactProperties(contactId, properties) {\n try {\n await updateHubSpotContact({\n id: contactId,\n properties: properties,\n });\n logger.info(\"Updated HubSpot contact properties\", {\n contactId,\n propertyCount: Object.keys(properties).length,\n });\n }\n catch (error) {\n logger.error(\"Failed to update HubSpot contact properties\", {\n error,\n contactId,\n });\n throw error;\n }\n}\n/**\n * Sync extension installation to HubSpot\n */\nexport async function syncExtensionInstalled(email, version, installDate = new Date()) {\n const contact = await findContactByEmail(email);\n if (!contact?.id) {\n logger.warn(\"Cannot sync extension install - contact not found\", { email });\n return;\n }\n await updateContactProperties(contact.id, {\n extension_installed: true,\n extension_version: version,\n extension_install_date: installDate.getTime(),\n });\n}\n/**\n * Sync pioneer program update to HubSpot\n */\nexport async function syncPioneerUpdate(email, tier, points) {\n const contact = await findContactByEmail(email);\n if (!contact?.id) {\n logger.warn(\"Cannot sync pioneer update - contact not found\", { email });\n return;\n }\n await updateContactProperties(contact.id, {\n pioneer_tier: tier,\n pioneer_points: points,\n });\n}\n/**\n * Sync activity metrics to HubSpot\n */\nexport async function syncActivityMetrics(email, totalSnapshots, totalRestores, lastActiveDate = new Date()) {\n const contact = await findContactByEmail(email);\n if (!contact?.id) {\n logger.warn(\"Cannot sync activity metrics - contact not found\", { email });\n return;\n }\n await updateContactProperties(contact.id, {\n total_snapshots: totalSnapshots,\n total_recoveries: totalRestores,\n last_activity_date: lastActiveDate.getTime(),\n });\n}\n/**\n * Sync first restore milestone to HubSpot\n */\nexport async function syncFirstRestore(email, restoreDate = new Date()) {\n const contact = await findContactByEmail(email);\n if (!contact?.id) {\n logger.warn(\"Cannot sync first restore - contact not found\", { email });\n return;\n }\n await updateContactProperties(contact.id, {\n first_restore_date: restoreDate.getTime(),\n });\n}\n/**\n * Map Vreko user data to HubSpot contact properties\n */\nfunction mapUserDataToHubSpotProperties(userData) {\n const properties = {\n email: userData.email,\n firstname: userData.firstName,\n lastname: userData.lastName,\n // Custom Vreko properties\n vreko_user_id: userData.userId,\n // Extension\n extension_installed: userData.extensionInstalled ? \"true\" : \"false\",\n extension_version: userData.extensionVersion,\n // Pioneer\n pioneer_tier: userData.pioneerTier,\n pioneer_points: userData.pioneerPoints?.toString(),\n // Subscription\n subscription_plan: userData.planName,\n subscription_status: userData.subscriptionStatus,\n // Activity\n total_snapshots: userData.totalSnapshots?.toString(),\n total_recoveries: userData.totalRestores?.toString(),\n // Lifecycle\n signup_source: userData.signupSource,\n onboarding_completed: userData.onboardingCompleted ? \"true\" : \"false\",\n ai_tool_primary: userData.aiToolPrimary,\n };\n // Add date properties (HubSpot expects Unix timestamp in milliseconds)\n if (userData.extensionInstallDate) {\n properties.extension_install_date = userData.extensionInstallDate.getTime().toString();\n }\n if (userData.pioneerJoinDate) {\n properties.pioneer_join_date = userData.pioneerJoinDate.getTime().toString();\n }\n if (userData.subscriptionStartDate) {\n properties.subscription_start_date = userData.subscriptionStartDate.getTime().toString();\n }\n if (userData.lastActiveDate) {\n properties.last_activity_date = userData.lastActiveDate.getTime().toString();\n }\n if (userData.lastSnapshotDate) {\n properties.last_snapshot_date = userData.lastSnapshotDate.getTime().toString();\n }\n if (userData.firstSnapshotDate) {\n properties.first_snapshot_date = userData.firstSnapshotDate.getTime().toString();\n }\n if (userData.firstRestoreDate) {\n properties.first_restore_date = userData.firstRestoreDate.getTime().toString();\n }\n if (userData.mrr !== undefined) {\n properties.mrr = userData.mrr.toString();\n }\n // Filter out undefined values\n return Object.fromEntries(Object.entries(properties).filter(([_, v]) => v !== undefined));\n}\n","import type { EmailService } from \"../service\";\nimport type { EmailSendRequest } from \"../types\";\n\n/**\n * Billing Event Handlers\n *\n * Handles email sending for billing and subscription events:\n * - Payment confirmations\n * - Subscription changes\n * - Failed payments\n * - Subscription cancellations\n */\n\nexport class BillingEmailHandler {\n\tconstructor(private emailService: EmailService) {\n\t\t/* intentionally empty */\n\t}\n\n\t/**\n\t * Send welcome email after successful subscription\n\t */\n\tasync sendWelcome(params: {\n\t\tto: string;\n\t\tuserId: string;\n\t\tfirstName: string;\n\t\tplanName: string;\n\t\tplanFeatures: string[];\n\t\tdashboardUrl: string;\n\t\tdocsUrl: string;\n\t\tpioneerTier?: string;\n\t\tpioneerPoints?: number;\n\t}): Promise<void> {\n\t\tconst request: EmailSendRequest = {\n\t\t\tto: { email: params.to, userId: params.userId },\n\t\t\tcategory: \"onboarding\",\n\t\t\tpriority: \"high\",\n\t\t\ttemplate: {\n\t\t\t\tid: \"product.welcome\",\n\t\t\t\tprops: {\n\t\t\t\t\tfirstName: params.firstName,\n\t\t\t\t\tplanName: params.planName,\n\t\t\t\t\tplanFeatures: params.planFeatures,\n\t\t\t\t\tdashboardUrl: params.dashboardUrl,\n\t\t\t\t\tdocsUrl: params.docsUrl,\n\t\t\t\t\tpioneerTier: params.pioneerTier,\n\t\t\t\t\tpioneerPoints: params.pioneerPoints,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tawait this.emailService.send(request);\n\t}\n\n\t/**\n\t * Send subscription cancellation confirmation\n\t */\n\tasync sendCancellationConfirmation(params: {\n\t\tto: string;\n\t\tuserId: string;\n\t\tfirstName: string;\n\t\tplanName: string;\n\t\tcancellationDate: Date;\n\t\tdataRetentionDays: number;\n\t\treactivateUrl: string;\n\t}): Promise<void> {\n\t\tconst request: EmailSendRequest = {\n\t\t\tto: { email: params.to, userId: params.userId },\n\t\t\tcategory: \"billing\",\n\t\t\tpriority: \"high\",\n\t\t\ttemplate: {\n\t\t\t\tid: \"product.system-alert\",\n\t\t\t\tprops: {\n\t\t\t\t\talertType: \"subscription_cancelled\",\n\t\t\t\t\ttitle: \"Subscription Cancelled\",\n\t\t\t\t\tmessage: `Your ${params.planName} subscription has been cancelled and will remain active until ${params.cancellationDate.toLocaleDateString()}. Your data will be retained for ${params.dataRetentionDays} days after that date.`,\n\t\t\t\t\tseverity: \"info\",\n\t\t\t\t\tactionRequired: false,\n\t\t\t\t\tadditionalDetails:\n\t\t\t\t\t\t\"You can reactivate your subscription at any time before the retention period ends.\",\n\t\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tawait this.emailService.send(request);\n\t}\n\n\t/**\n\t * Send payment failure alert\n\t */\n\tasync sendPaymentFailed(params: {\n\t\tto: string;\n\t\tuserId: string;\n\t\tplanName: string;\n\t\tamount: number;\n\t\tcurrency: string;\n\t\tretryDate: Date;\n\t\tupdatePaymentUrl: string;\n\t}): Promise<void> {\n\t\tconst request: EmailSendRequest = {\n\t\t\tto: { email: params.to, userId: params.userId },\n\t\t\tcategory: \"billing\",\n\t\t\tpriority: \"critical\",\n\t\t\ttemplate: {\n\t\t\t\tid: \"product.system-alert\",\n\t\t\t\tprops: {\n\t\t\t\t\talertType: \"payment_failed\",\n\t\t\t\t\ttitle: \"Payment Failed\",\n\t\t\t\t\tmessage: `We were unable to process your payment of ${params.amount} ${params.currency} for your ${params.planName} subscription. We'll automatically retry on ${params.retryDate.toLocaleDateString()}.`,\n\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\tactionRequired: true,\n\t\t\t\t\tactionUrl: params.updatePaymentUrl,\n\t\t\t\t\tactionLabel: \"Update Payment Method\",\n\t\t\t\t\tadditionalDetails:\n\t\t\t\t\t\t\"To avoid service interruption, please update your payment method or ensure sufficient funds are available.\",\n\t\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tawait this.emailService.send(request);\n\t}\n\n\t/**\n\t * Send subscription upgraded notification\n\t */\n\tasync sendSubscriptionUpgraded(params: {\n\t\tto: string;\n\t\tuserId: string;\n\t\tfirstName: string;\n\t\toldPlan: string;\n\t\tnewPlan: string;\n\t\tnewFeatures: string[];\n\t\tdashboardUrl: string;\n\t}): Promise<void> {\n\t\tconst request: EmailSendRequest = {\n\t\t\tto: { email: params.to, userId: params.userId },\n\t\t\tcategory: \"billing\",\n\t\t\tpriority: \"normal\",\n\t\t\ttemplate: {\n\t\t\t\tid: \"product.system-alert\",\n\t\t\t\tprops: {\n\t\t\t\t\talertType: \"subscription_upgraded\",\n\t\t\t\t\ttitle: \"Subscription Upgraded\",\n\t\t\t\t\tmessage: `You've successfully upgraded from ${params.oldPlan} to ${params.newPlan}. Your new features are now active!`,\n\t\t\t\t\tseverity: \"info\",\n\t\t\t\t\tactionRequired: false,\n\t\t\t\t\tactionUrl: params.dashboardUrl,\n\t\t\t\t\tactionLabel: \"Explore New Features\",\n\t\t\t\t\tadditionalDetails: `New features: ${params.newFeatures.join(\", \")}`,\n\t\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tawait this.emailService.send(request);\n\t}\n\n\t/**\n\t * Send trial ending reminder\n\t */\n\tasync sendTrialEnding(params: {\n\t\tto: string;\n\t\tuserId: string;\n\t\tfirstName: string;\n\t\tplanName: string;\n\t\ttrialEndDate: Date;\n\t\tdaysRemaining: number;\n\t\tupgradeUrl: string;\n\t}): Promise<void> {\n\t\tconst request: EmailSendRequest = {\n\t\t\tto: { email: params.to, userId: params.userId },\n\t\t\tcategory: \"billing\",\n\t\t\tpriority: \"high\",\n\t\t\ttemplate: {\n\t\t\t\tid: \"product.system-alert\",\n\t\t\t\tprops: {\n\t\t\t\t\talertType: \"trial_ending\",\n\t\t\t\t\ttitle: `Your ${params.planName} Trial Ends Soon`,\n\t\t\t\t\tmessage: `Your free trial ends in ${params.daysRemaining} day${params.daysRemaining !== 1 ? \"s\" : \"\"} on ${params.trialEndDate.toLocaleDateString()}. Upgrade now to keep your data and continue using Vreko.`,\n\t\t\t\t\tseverity: \"warning\",\n\t\t\t\t\tactionRequired: true,\n\t\t\t\t\tactionUrl: params.upgradeUrl,\n\t\t\t\t\tactionLabel: \"Upgrade Now\",\n\t\t\t\t\tadditionalDetails:\n\t\t\t\t\t\t\"After your trial ends, you can still access your account but snapshot capture will be disabled until you upgrade.\",\n\t\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tawait this.emailService.send(request);\n\t}\n\n\t/**\n\t * Send suspension notice (Day 8 of grace period)\n\t *\n\t * Called when subscription transitions from past_due to suspended\n\t * after 7-day grace period expires without successful payment.\n\t */\n\tasync sendSuspensionNotice(params: {\n\t\tto: string;\n\t\tuserId: string;\n\t\tplanName: string;\n\t\treactivateUrl: string;\n\t}): Promise<void> {\n\t\tconst request: EmailSendRequest = {\n\t\t\tto: { email: params.to, userId: params.userId },\n\t\t\tcategory: \"billing\",\n\t\t\tpriority: \"critical\",\n\t\t\ttemplate: {\n\t\t\t\tid: \"product.system-alert\",\n\t\t\t\tprops: {\n\t\t\t\t\talertType: \"subscription_suspended\",\n\t\t\t\t\ttitle: \"Your Subscription Has Been Suspended\",\n\t\t\t\t\tmessage: `Your ${params.planName} subscription has been suspended due to payment issues. Cloud features including snapshot sync, pattern library, and history are now paused.`,\n\t\t\t\t\tseverity: \"error\",\n\t\t\t\t\tactionRequired: true,\n\t\t\t\t\tactionUrl: params.reactivateUrl,\n\t\t\t\t\tactionLabel: \"Reactivate Now\",\n\t\t\t\t\tadditionalDetails:\n\t\t\t\t\t\t\"Update your payment method to restore full access. Your local CLI features remain available, but cloud syncing is disabled until payment is resolved.\",\n\t\t\t\t\ttimestamp: new Date().toISOString(),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tawait this.emailService.send(request);\n\t}\n}\n","/**\n * Centralized Audit Logging Module\n * Single implementation used by all services (API, MCP, CLI, etc.)\n * Replaces 371 lines of custom audit logic spread across apps\n *\n * Handles:\n * - PostHog event emission (non-blocking)\n * - Database audit log persistence (non-blocking)\n * - Structured logging (always succeeds)\n */ import { logger } from \"@vreko/infrastructure\";\n// PostHog configuration\nconst POSTHOG_API_KEY = process.env.POSTHOG_API_KEY || \"\";\nconst POSTHOG_HOST = process.env.POSTHOG_HOST || \"https://us.posthog.com\";\nconst POSTHOG_ENABLED = !!POSTHOG_API_KEY;\n/**\n * Emit event to PostHog (non-blocking)\n */ async function emitPostHogEvent(eventType, metadata) {\n if (!POSTHOG_ENABLED) {\n return;\n }\n try {\n const event = {\n api_key: POSTHOG_API_KEY,\n event: eventType,\n distinct_id: metadata.userId || metadata.ip || \"anonymous\",\n properties: {\n ...metadata,\n $ip: metadata.ip,\n $set: {\n email: metadata.userId ? `user_${metadata.userId}` : undefined\n }\n },\n timestamp: new Date().toISOString()\n };\n const response = await fetch(`${POSTHOG_HOST}/capture/`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(event)\n });\n if (!response.ok) {\n logger.error(\"Failed to emit PostHog event\", {\n eventType,\n status: response.status,\n statusText: response.statusText\n });\n }\n } catch (error) {\n logger.error(\"Error emitting PostHog event\", {\n error,\n eventType\n });\n }\n}\n/**\n * Write audit log to database (non-blocking)\n * Stores audit events in telemetry_events table with event_category='audit'\n * Uses @vreko/platform DB connection via lazy import to avoid circular deps\n */ async function writeAuditLog(eventType, metadata) {\n try {\n // Lazy import to avoid circular dependencies\n const { db, vrekoSchema } = await import(\"@vreko/platform\");\n if (!db) {\n logger.warn(\"Database not available for audit logging\", {\n eventType\n });\n return;\n }\n const { telemetryEvents } = vrekoSchema;\n // Write to telemetry_events table with event_category='audit'\n await db.insert(telemetryEvents).values({\n eventType,\n eventCategory: \"audit\",\n userId: metadata.userId,\n properties: {\n ip: metadata.ip,\n userAgent: metadata.userAgent,\n method: metadata.method,\n path: metadata.path,\n statusCode: metadata.statusCode,\n errorMessage: metadata.errorMessage,\n ...metadata\n }\n });\n logger.debug(\"Audit log written\", {\n eventType,\n userId: metadata.userId,\n orgId: metadata.orgId\n });\n } catch (error) {\n logger.error(\"Failed to write audit log\", {\n error,\n eventType,\n metadata\n });\n // Don't throw - audit logging should not break main flow\n }\n}\n/**\n * Track authentication event\n * Emits to PostHog and writes to audit log (both non-blocking)\n */ export async function trackEvent(eventType, metadata) {\n // Log locally (always succeeds)\n logger.info(\"Audit event\", {\n eventType,\n userId: metadata.userId,\n orgId: metadata.orgId,\n path: metadata.path\n });\n // Emit to PostHog (non-blocking)\n emitPostHogEvent(eventType, metadata).catch((error)=>{\n logger.error(\"PostHog emit failed\", {\n error,\n eventType\n });\n });\n // Write to audit log (non-blocking)\n writeAuditLog(eventType, metadata).catch((error)=>{\n logger.error(\"Audit log write failed\", {\n error,\n eventType\n });\n });\n}\n/**\n * Track failed authentication attempt\n */ export async function trackFailedAuth(type, metadata) {\n const eventMap = {\n signin: \"auth.signin_failed\",\n totp: \"mfa.totp_failed\",\n passkey: \"passkey.failed\"\n };\n await trackEvent(eventMap[type], metadata);\n// Could trigger additional actions:\n// - Check for abuse patterns\n// - Rate limit if needed\n// - Alert security team if excessive\n}\n/**\n * Adapter for better-auth database hooks\n * Provides helper function for use in databaseHooks configuration\n */ export function createDatabaseHookHandler(eventType) {\n return async (data)=>{\n const d = data;\n await trackEvent(eventType, {\n userId: d.userId || d.user?.id,\n orgId: d.organizationId || d.organization?.id,\n timestamp: new Date().toISOString(),\n ...d\n });\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQuanMiLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9","/**\n * API Key Security Implementation\n *\n * Provides secure API key generation, hashing, validation, and enumeration prevention.\n * Uses Argon2id with 64MB memory cost (OWASP 2025 standard).\n *\n * OWASP Standards: A02:2021 – Cryptographic Failures, A07:2021 – Identification and Authentication Failures\n */ import { randomBytes } from \"node:crypto\";\nimport { hash, verify } from \"@node-rs/argon2\";\nimport { logger } from \"@vreko/infrastructure\";\n/**\n * Default API key security configuration\n */ export const defaultAPIKeySecurityConfig = {\n livePrefix: \"sk_live_\",\n testPrefix: \"sk_test_\",\n keyLength: 32,\n enableScopes: true,\n enableExpiration: true,\n expirationDays: 365\n};\n/**\n * OWASP 2025 recommended Argon2id configuration\n */ export const defaultArgon2idConfig = {\n memoryLimit: 65536,\n iterations: 3,\n parallelism: 2,\n type: \"argon2id\"\n};\n/**\n * Generate a secure API key with prefix\n *\n * Requirements:\n * - Uses crypto.getRandomValues() (cryptographically secure)\n * - 256-bit entropy minimum\n * - Base64url encoding (URL-safe)\n * - Environment prefix (sk_live_ or sk_test_)\n * - Unique across all time\n *\n * @param isLive Is this a live key (true) or test key (false)\n * @param config API key configuration\n * @returns Base64url-encoded API key with prefix\n */ export function generateAPIKey(isLive, config = {}) {\n const finalConfig = {\n ...defaultAPIKeySecurityConfig,\n ...config\n };\n // Generate cryptographically secure random bytes\n const randomBuffer = randomBytes(finalConfig.keyLength);\n // Convert to base64url (URL-safe: - and _ instead of + and /)\n const base64url = randomBuffer.toString(\"base64\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n // Add environment prefix\n const prefix = isLive ? finalConfig.livePrefix : finalConfig.testPrefix;\n const apiKey = prefix + base64url;\n logger.debug(\"API key generated\", {\n keyLength: apiKey.length,\n prefix,\n environment: isLive ? \"live\" : \"test\"\n });\n return apiKey;\n}\n/**\n * Hash API key using Argon2id\n *\n * Creates a strong hash that prevents rainbow table attacks:\n * - Random salt generated per key\n * - 64MB memory cost prevents GPU/ASIC attacks\n * - Multiple iterations increase time cost\n * - Suitable for password/key storage (NOT passwords themselves)\n *\n * In production, use:\n * - Node.js crypto.pbkdf2 with Argon2\n * - Or @node-rs/argon2 for native performance\n * - Or argon2 package with proper configuration\n *\n * @param plainKey The API key to hash\n * @param config Argon2id configuration\n * @returns Promise<hashed key>\n */ export async function hashAPIKey(plainKey, config = {}) {\n const finalConfig = {\n ...defaultArgon2idConfig,\n ...config\n };\n // ✅ SB-245 FIXED: Real Argon2id implementation using @node-rs/argon2\n // OWASP 2025 compliant with memory-hard protection\n const secureHash = await hash(plainKey, {\n memoryCost: finalConfig.memoryLimit,\n timeCost: finalConfig.iterations,\n parallelism: finalConfig.parallelism\n });\n logger.debug(\"API key hashed with Argon2id\", {\n memoryLimit: finalConfig.memoryLimit,\n iterations: finalConfig.iterations,\n parallelism: finalConfig.parallelism\n });\n return secureHash;\n}\n/**\n * Verify API key hash using constant-time comparison\n *\n * Prevents timing attacks by always taking the same time\n * regardless of where the mismatch occurs\n *\n * @param plainKey Plain key to verify\n * @param hash Stored hash to compare against\n * @returns Promise<true if matches, false otherwise>\n */ export async function verifyAPIKeyHash(plainKey, hash) {\n try {\n // ✅ SB-245 FIXED: Real Argon2id verification using @node-rs/argon2\n // Uses constant-time comparison internally to prevent timing attacks\n return await verify(hash, plainKey);\n } catch (error) {\n logger.warn(\"API key verification error\", {\n error: error instanceof Error ? error.message : String(error)\n });\n return false;\n }\n}\n/**\n * Validate API key format\n *\n * Checks:\n * - Correct prefix (sk_live_ or sk_test_)\n * - Valid base64url characters\n * - Minimum length\n * - No special characters\n *\n * @param key API key to validate\n * @returns Validation result\n */ export function validateAPIKeyFormat(key) {\n // Check prefix\n const isLiveKey = key.startsWith(\"sk_live_\");\n const isTestKey = key.startsWith(\"sk_test_\");\n if (!isLiveKey && !isTestKey) {\n return {\n valid: false,\n reason: \"Invalid API key prefix (expected sk_live_ or sk_test_)\"\n };\n }\n // Get the actual key part (after prefix)\n const prefix = isLiveKey ? \"sk_live_\" : \"sk_test_\";\n const keyPart = key.substring(prefix.length);\n // Check minimum length\n if (keyPart.length < 20) {\n return {\n valid: false,\n reason: \"API key too short\"\n };\n }\n // Check for valid base64url characters (a-z, A-Z, 0-9, -, _)\n const base64urlRegex = /^[A-Za-z0-9_-]+$/;\n if (!base64urlRegex.test(keyPart)) {\n return {\n valid: false,\n reason: \"API key contains invalid characters\"\n };\n }\n return {\n valid: true\n };\n}\n/**\n * Extract public key ID for enumeration prevention\n *\n * Returns only last 4 characters for display purposes\n * This prevents full key enumeration while allowing partial identification\n *\n * @param key Full API key\n * @returns Masked key for display (first 8 chars + ...last 4 chars)\n */ export function maskAPIKeyForDisplay(key) {\n const prefix = key.substring(0, 8); // \"sk_live_\" or \"sk_test_\"\n const lastFour = key.substring(key.length - 4);\n return `${prefix}...${lastFour}`;\n}\n/**\n * Check for API key enumeration attempts\n *\n * Tracks failed validation attempts to detect brute force:\n * - Per IP address\n * - Per key (if partially known)\n * - Global rate limiting\n *\n * @param ipAddress Client IP address\n * @param failureCount Number of failures so far\n * @param timeWindowMs Time window in milliseconds\n * @returns Object with enumeration detection result\n */ export function detectKeyEnumerationAttempt(ipAddress, failureCount, timeWindowMs = 60000) {\n // More than 10 failures per minute = enumeration attempt\n if (failureCount > 10) {\n logger.warn(\"Possible key enumeration detected\", {\n ipAddress,\n failureCount,\n timeWindow: `${timeWindowMs / 1000}s`\n });\n return {\n isEnumeration: true,\n shouldBlock: failureCount > 50,\n reason: \"Excessive key validation failures\"\n };\n }\n return {\n isEnumeration: false,\n shouldBlock: false\n };\n}\n/**\n * Generate constant response time for key validation\n *\n * Helps prevent timing attacks by ensuring similar response times\n * for successful and failed key validations\n *\n * @param baseDelayMs Minimum delay in milliseconds\n * @param variance Variance in milliseconds (±)\n * @returns Actual delay to use\n */ export function getConstantTimeDelay(baseDelayMs = 100, variance = 20) {\n // Add random variance to prevent timing attacks\n const randomVariance = Math.random() * variance - variance / 2;\n return Math.max(1, baseDelayMs + randomVariance);\n}\n/**\n * Validate API key scopes\n *\n * Checks if key has required permissions for action\n *\n * @param keyScopes Scopes on the API key\n * @param requiredScope Scope needed for this action\n * @returns true if key has required scope, false otherwise\n */ export function validateAPIKeyScope(keyScopes, requiredScope) {\n // Admin scope grants all access\n if (keyScopes.includes(\"admin:all\")) {\n return true;\n }\n // Check for exact scope match\n if (keyScopes.includes(requiredScope)) {\n return true;\n }\n // Check for wildcard scopes (e.g., \"snapshots:*\")\n const [resource] = requiredScope.split(\":\");\n if (keyScopes.includes(`${resource}:*`)) {\n return true;\n }\n logger.warn(\"API key scope check failed\", {\n keyScopes,\n requiredScope\n });\n return false;\n}\n/**\n * Log API key security event\n *\n * Records security-relevant events for audit trail\n *\n * @param event Event type\n * @param details Event details\n */ export function logAPIKeyEvent(event, details) {\n const logData = {\n event: `API_KEY_${event.toUpperCase()}`,\n keyId: details.keyId?.substring(0, 8),\n userId: details.userId,\n ipAddress: details.ipAddress,\n reason: details.reason,\n timestamp: new Date().toISOString()\n };\n const severity = event === \"created\" || event === \"used\" ? \"info\" : \"warn\";\n if (severity === \"info\") {\n logger.info(`API key ${event}`, logData);\n } else {\n logger.warn(`API key ${event}`, logData);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWtleS1zZWN1cml0eS5qcyIsInNvdXJjZXMiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=","// ESM imports fixed for Node.js v22+\n/**\n * Custom API Key Plugin for Better Auth v1.6.5\n *\n * better-auth v1.6.5 removed the built-in apiKey() plugin.\n * This plugin re-implements the createApiKey / verifyApiKey / deleteApiKey\n * surface using Better Auth's plugin endpoint API so that\n * `auth.api.createApiKey`, `auth.api.verifyApiKey`, and\n * `auth.api.deleteApiKey` are defined at runtime.\n *\n * Storage: uses @vreko/platform's Drizzle `apiKeys` table directly.\n * Key generation: uses packages/auth/src/security/api-key-security.ts.\n */\nimport { createAuthEndpoint } from \"@better-auth/core/api\";\nimport { APIError } from \"@better-auth/core/error\";\nimport { logger } from \"@vreko/infrastructure\";\nimport { apiKeys, db } from \"@vreko/platform\";\nimport { getSessionFromCtx } from \"better-auth/api\";\nimport { and, eq, gte, isNull, or } from \"drizzle-orm\";\nimport { nanoid } from \"nanoid\";\nimport { z } from \"zod\";\nimport { generateAPIKey, hashAPIKey, verifyAPIKeyHash } from \"../security/api-key-security.js\";\n// ─── Schemas ────────────────────────────────────────────────────────────────\nconst createApiKeyBodySchema = z.object({\n /** User-facing name for this key */\n name: z.string().optional().default(\"Default Key\"),\n /** Optional org scoping */\n organizationId: z.string().optional(),\n /** Structured permissions object — mirrors the apiKeys.permissions column type */\n permissions: z\n .object({\n maxSnapshots: z.number().optional(),\n cloudBackup: z.boolean().optional(),\n advancedDetection: z.boolean().optional(),\n customRules: z.boolean().optional(),\n teamSharing: z.boolean().optional(),\n })\n .optional(),\n /** Whether rate limiting is enabled for this key */\n rateLimitEnabled: z.boolean().optional().default(false),\n /** Max requests per rate-limit window */\n rateLimitMax: z.number().int().optional(),\n /** Rate limit window in milliseconds */\n rateLimitTimeWindow: z.number().int().optional(),\n /** Optional expiry date */\n expiresAt: z.coerce.date().optional(),\n /** Arbitrary metadata */\n metadata: z.record(z.string(), z.unknown()).optional(),\n});\nconst verifyApiKeyBodySchema = z.object({\n /** The plaintext API key to verify */\n key: z.string(),\n /** Optional permissions to check against */\n permissions: z.record(z.string(), z.array(z.string())).optional(),\n});\nconst deleteApiKeyBodySchema = z.object({\n /** The DB id of the key to delete / revoke */\n keyId: z.string(),\n});\n// ─── Plugin ─────────────────────────────────────────────────────────────────\n/**\n * Better Auth plugin that provides API key management endpoints.\n *\n * Registers:\n * POST /api/auth/api-key/create → auth.api.createApiKey\n * POST /api/auth/api-key/verify → auth.api.verifyApiKey\n * POST /api/auth/api-key/delete → auth.api.deleteApiKey\n */\nexport function apiKeyPlugin() {\n return {\n id: \"vreko-api-key\",\n endpoints: {\n createApiKey: createAuthEndpoint(\"/api-key/create\", {\n method: \"POST\",\n body: createApiKeyBodySchema,\n metadata: {\n openapi: {\n operationId: \"createApiKey\",\n description: \"Create a new API key for the given user\",\n responses: {\n 200: {\n description: \"API key created\",\n content: {\n \"application/json\": {\n schema: {\n type: \"object\",\n properties: {\n id: { type: \"string\" },\n key: { type: \"string\" },\n name: { type: \"string\" },\n createdAt: { type: \"string\", format: \"date-time\" },\n expiresAt: { type: \"string\", format: \"date-time\", nullable: true },\n },\n },\n },\n },\n },\n },\n },\n },\n }, async (ctx) => {\n const sessionData = await getSessionFromCtx(ctx);\n if (!sessionData?.user?.id) {\n throw new APIError(\"UNAUTHORIZED\", { message: \"Unauthorized\" });\n }\n const userId = sessionData.user.id;\n const { name, organizationId, permissions, rateLimitEnabled, rateLimitMax, rateLimitTimeWindow, expiresAt, metadata, } = ctx.body;\n // Generate a plaintext key (only returned once)\n const plainKey = generateAPIKey(true);\n // Hash with Argon2id for storage\n const keyHash = await hashAPIKey(plainKey);\n // \"start\" = first 8 chars of the plaintext key (Better Auth convention for lookup)\n const start = plainKey.substring(0, 8);\n // preview = first 12 chars for display (includes prefix + a few chars)\n const keyPreview = plainKey.substring(0, 12);\n const id = nanoid();\n const now = new Date();\n await db.insert(apiKeys).values({\n id,\n userId,\n organizationId: organizationId ?? null,\n name: name ?? \"Default Key\",\n key: keyHash,\n start,\n prefix: \"sk_live_\",\n keyPreview,\n permissions: permissions ?? null,\n enabled: true,\n rateLimitEnabled: rateLimitEnabled ?? false,\n rateLimitMax: rateLimitMax ?? null,\n rateLimitTimeWindow: rateLimitTimeWindow ?? null,\n expiresAt: expiresAt ?? null,\n metadata: metadata ?? null,\n createdAt: now,\n updatedAt: now,\n });\n logger.info(\"API key created\", { userId, keyId: id });\n return ctx.json({\n id,\n key: plainKey, // plaintext returned only once\n name: name ?? \"Default Key\",\n createdAt: now,\n expiresAt: expiresAt ?? null,\n permissions: permissions ?? null,\n });\n }),\n verifyApiKey: createAuthEndpoint(\"/api-key/verify\", {\n method: \"POST\",\n body: verifyApiKeyBodySchema,\n metadata: {\n openapi: {\n operationId: \"verifyApiKey\",\n description: \"Verify an API key and return its metadata\",\n },\n },\n }, async (ctx) => {\n const { key } = ctx.body;\n if (!key) {\n return ctx.json({ isValid: false, error: { message: \"Key is required\" } });\n }\n // Derive the `start` prefix from the submitted key for fast lookup.\n // Better Auth v1.x convention: `start` = first 8 chars of the plaintext key.\n const start = key.substring(0, 8);\n // Find candidates by prefix + not revoked + not expired\n const candidates = await db\n .select()\n .from(apiKeys)\n .where(and(eq(apiKeys.start, start), isNull(apiKeys.revokedAt), or(isNull(apiKeys.expiresAt), gte(apiKeys.expiresAt, new Date()))))\n .limit(5); // at most a handful of keys share the same 8-char prefix\n // Find the matching key via Argon2id verification\n let matchedKey = null;\n for (const candidate of candidates) {\n const matches = await verifyAPIKeyHash(key, candidate.key);\n if (matches) {\n matchedKey = candidate;\n break;\n }\n }\n if (!matchedKey) {\n return ctx.json({ isValid: false, error: { message: \"Invalid API key\" } });\n }\n // Update lastUsedAt (non-blocking)\n db.update(apiKeys)\n .set({ lastUsedAt: new Date(), updatedAt: new Date() })\n .where(eq(apiKeys.id, matchedKey.id))\n .catch((err) => {\n logger.warn(\"Failed to update lastUsedAt for API key\", {\n keyId: matchedKey.id,\n error: err.message,\n });\n });\n return ctx.json({\n isValid: true,\n valid: true, // legacy alias for consumers checking `.valid`\n userId: matchedKey.userId,\n key: {\n id: matchedKey.id,\n userId: matchedKey.userId,\n name: matchedKey.name,\n permissions: matchedKey.permissions,\n rateLimitEnabled: matchedKey.rateLimitEnabled,\n rateLimitMax: matchedKey.rateLimitMax,\n remaining: matchedKey.remaining,\n lastRefillAt: matchedKey.lastRefillAt,\n metadata: matchedKey.metadata,\n },\n });\n }),\n deleteApiKey: createAuthEndpoint(\"/api-key/delete\", {\n method: \"POST\",\n body: deleteApiKeyBodySchema,\n metadata: {\n openapi: {\n operationId: \"deleteApiKey\",\n description: \"Revoke (soft-delete) an API key by ID\",\n },\n },\n }, async (ctx) => {\n const sessionData = await getSessionFromCtx(ctx);\n if (!sessionData?.user?.id) {\n throw new APIError(\"UNAUTHORIZED\", { message: \"Unauthorized\" });\n }\n const { keyId } = ctx.body;\n const result = await db\n .update(apiKeys)\n .set({ revokedAt: new Date(), updatedAt: new Date() })\n .where(and(eq(apiKeys.id, keyId), eq(apiKeys.userId, sessionData.user.id)));\n // Zero rows affected means the key didn't exist or didn't belong to caller\n if (!result.rowCount) {\n throw new APIError(\"NOT_FOUND\", { message: \"Not found\" });\n }\n logger.info(\"API key revoked\", { keyId, userId: sessionData.user.id });\n return ctx.json({ success: true });\n }),\n },\n };\n}\n","import { logger } from \"@vreko/infrastructure\";\nimport { setSubscriptionSeats } from \"@vreko/integrations/stripe\";\nimport * as drizzle from \"@vreko/platform\";\nexport async function updateSeatsInOrganizationSubscription(organizationId) {\n const organization = await drizzle.getOrganizationWithPurchasesAndMembersCount(organizationId);\n if (!organization?.purchases || !Array.isArray(organization.purchases) || organization.purchases.length === 0) {\n return;\n }\n const activeSubscription = organization.purchases.find((purchase)=>purchase.type === \"SUBSCRIPTION\");\n if (!activeSubscription?.subscriptionId) {\n return;\n }\n try {\n await setSubscriptionSeats({\n id: activeSubscription.subscriptionId,\n seats: organization.membersCount\n });\n } catch (error) {\n logger.error(\"Could not update seats in organization subscription\", {\n organizationId,\n error\n });\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uLmpzIiwic291cmNlcyI6W10sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==","// ESM imports fixed for Node.js v22+\nimport { getBaseUrl } from \"@vreko/config/server\";\nimport { sendEmail } from \"@vreko/email/resend\";\nimport { logger } from \"@vreko/infrastructure\";\nimport { syncUserToHubSpot } from \"@vreko/integrations\";\nimport { combinedSchema, db } from \"@vreko/platform\";\nimport { betterAuth } from \"better-auth\";\nimport { drizzleAdapter } from \"better-auth/adapters/drizzle\";\nimport { getOAuthState } from \"better-auth/api\";\nimport { admin, bearer, deviceAuthorization, jwt, magicLink, oidcProvider, openAPI, organization } from \"better-auth/plugins\";\nimport { nanoid } from \"nanoid\";\nimport { trackEvent } from \"./lib/audit.js\";\nimport { apiKeyPlugin } from \"./plugins/api-key-plugin.js\";\n// Frontend app URL (for OAuth redirects and CORS)\n// Access process.env directly for Vercel compatibility (t3-env wrapper issue)\nconst appUrl = process.env.APP_URL || getBaseUrl();\n// Better Auth base URL (where auth endpoints are served)\n// CRITICAL: Auth routes are in the WEB app, NOT the API server!\n// - Web app: Has /api/auth/* routes (this is where Better Auth runs)\n// - API server: Backend API only, no auth routes\n//\n// Priority: BETTER_AUTH_URL (explicit) > APP_URL > fallback\n// In dev: BETTER_AUTH_URL should be :3000 (web app with auth routes)\n// APP_URL might be :3003 (API server - no auth routes)\n//\n// IMPORTANT: This must be set or Better Auth will log warnings\n// Access process.env directly for Vercel compatibility (t3-env wrapper issue)\nconst authBaseUrl = process.env.BETTER_AUTH_URL || process.env.BETTER_AUTH_BASE_URL || process.env.APP_URL || `http://localhost:${process.env.PORT || 3000}`;\n// In development, trust all localhost ports to handle Next.js dynamic port assignment\n// Access process.env directly for Vercel compatibility (t3-env wrapper issue)\n// Detect local development regardless of NODE_ENV.\n// Doppler prd config sets NODE_ENV=production even when running locally,\n// so we also check if BETTER_AUTH_URL is a localhost URL.\nconst isLocalDev = (process.env.BETTER_AUTH_URL || \"\").includes(\"localhost\");\nconst isDevelopment = process.env.NODE_ENV !== \"production\" || isLocalDev;\nconst trustedOrigins = isDevelopment ? [\n appUrl,\n authBaseUrl,\n \"http://localhost:3000\",\n \"http://localhost:3001\",\n \"http://localhost:3002\",\n \"http://localhost:3003\"\n] : [\n appUrl,\n authBaseUrl,\n \"https://console.vreko.dev\"\n].filter((url, index, arr)=>arr.indexOf(url) === index);\nconst _auth = betterAuth({\n // ✅ Base URL for callbacks and redirects (required by Better Auth)\n // Uses BETTER_AUTH_URL env var, falling back to localhost with PORT\n baseURL: authBaseUrl,\n // Custom user fields returned by getSession().\n // Must be under user.additionalFields — schema.user.fields only affects migrations,\n // not the session output path (Better Auth reads options.user.additionalFields in\n // getFields() / parseUserOutput()).\n user: {\n additionalFields: {\n onboardingComplete: {\n type: \"boolean\",\n required: false,\n defaultValue: false\n },\n deviceFingerprint: {\n type: \"string\",\n required: false\n }\n }\n },\n appName: \"Vreko\",\n // ✅ SECURITY: Prevent account enumeration attacks\n // OWASP ASVS 2.2.1 - Don't reveal whether username exists\n disabledPaths: [\n \"/is-username-available\",\n // Disable Better Auth's /token path; OIDC token endpoint lives at /oauth2/token\n \"/token\"\n ],\n endpoints: {\n GET: {\n \"/health\": {\n async handler () {\n return new Response(\"OK\", {\n status: 200\n });\n }\n }\n }\n },\n emailAndPassword: {\n enabled: true\n },\n socialProviders: {\n // Only include social providers if credentials are configured\n // This prevents Better Auth from logging warnings that corrupt MCP stdio\n // Note: Access process.env directly for Vercel compatibility (t3-env wrapper issue)\n ...process.env.GITHUB_CLIENT_ID && process.env.GITHUB_CLIENT_SECRET ? {\n github: {\n clientId: process.env.GITHUB_CLIENT_ID,\n clientSecret: process.env.GITHUB_CLIENT_SECRET,\n // Block OAuth auto-signup - require invite code flow\n disableImplicitSignUp: true\n }\n } : {},\n ...process.env.GOOGLE_CLIENT_ID && process.env.GOOGLE_CLIENT_SECRET ? {\n google: {\n clientId: process.env.GOOGLE_CLIENT_ID,\n clientSecret: process.env.GOOGLE_CLIENT_SECRET,\n // Block OAuth auto-signup - require invite code flow\n disableImplicitSignUp: true\n }\n } : {}\n },\n database: drizzleAdapter(db, {\n provider: \"pg\",\n schema: combinedSchema\n }),\n session: {\n expiresIn: 60 * 60 * 24 * 7,\n updateAge: 60 * 60 * 24,\n // Always persist sessions in DB (no secondary storage)\n storeSessionInDatabase: true\n },\n account: {\n accountLinking: {\n enabled: true,\n trustedProviders: [\n \"google\",\n \"github\"\n ]\n }\n },\n trustedOrigins,\n // ✅ OPTIMIZATION: Redis secondary storage removed for alpha (DB-backed sessions)\n // Re-add if rate-limit distribution becomes a requirement post-launch.\n advanced: {\n // ✅ FIX: Use isDevelopment (not NODE_ENV) so Doppler prd config running locally\n // still gets dev-friendly cookie settings. isDevelopment checks BETTER_AUTH_URL\n // for localhost, which Doppler overrides correctly.\n useSecureCookies: !isDevelopment,\n crossSiteRequestForgery: {\n enabled: true,\n // Verify origin header matches trusted origins\n checkOrigin: true\n },\n // ✅ OPTIMIZATION: Explicit ID generation using nanoid\n database: {\n generateId: ()=>nanoid(),\n defaultFindManyLimit: 100\n },\n // ✅ OPTIMIZATION: IP tracking configuration for security audit\n ipAddress: {\n ipAddressHeaders: [\n \"cf-connecting-ip\",\n \"x-real-ip\",\n \"x-forwarded-for\",\n \"x-client-ip\"\n ],\n disableIpTracking: false\n },\n // ✅ OPTIMIZATION: Enhanced cookie configuration\n // ✅ FIX: Use isDevelopment consistently (not env.NODE_ENV === \"production\")\n // Doppler prd sets NODE_ENV=production even when running locally, which would\n // incorrectly set domain=\".vreko.dev\" on localhost cookies.\n crossSubDomainCookies: {\n enabled: !isDevelopment,\n domain: !isDevelopment ? \".vreko.dev\" : undefined\n },\n defaultCookieAttributes: {\n sameSite: \"lax\",\n secure: !isDevelopment,\n httpOnly: true,\n path: \"/\"\n },\n // ✅ FIX: OAuth state/pkce cookies need SameSite=None for cross-site redirects\n // See: https://github.com/better-auth/better-auth/issues/6483\n // Note: In development (localhost), browsers allow SameSite=None without Secure\n cookies: {\n state: {\n name: \"vreko.state\",\n attributes: {\n sameSite: isDevelopment ? \"lax\" : \"none\",\n secure: !isDevelopment,\n httpOnly: true,\n path: \"/\",\n maxAge: 600\n }\n },\n pkce: {\n name: \"vreko.pkce\",\n attributes: {\n sameSite: isDevelopment ? \"lax\" : \"none\",\n secure: !isDevelopment,\n httpOnly: true,\n path: \"/\",\n maxAge: 600\n }\n }\n },\n cookiePrefix: \"vreko\"\n },\n // Rate limiting configuration (replaces 340+ lines of custom rate limit code)\n rateLimit: {\n window: 60,\n max: 100,\n // In-memory storage - sufficient for alpha single-instance deployment\n storage: \"memory\",\n customRules: {\n \"/sign-in/email\": {\n window: 10,\n max: 3\n },\n \"/sign-in/social\": {\n window: 10,\n max: 5\n },\n \"/sign-up\": {\n window: 60,\n max: 5\n },\n \"/health\": false,\n \"/health/ready\": false,\n \"/health/live\": false\n }\n },\n // Use database hooks for audit logging (replaces 371 lines of custom auth-audit.ts)\n // Also includes rate limiting configuration (replaces 340+ lines of custom rate limit code)\n databaseHooks: {\n session: {\n create: {\n after: async (session)=>{\n const { userId, id: sessionId } = session;\n // Track session creation (indicates successful auth)\n await trackEvent(\"session.created\", {\n userId\n });\n // Also track auth.signin for returning users (session without new user)\n // This fires on every login (new session = successful signin)\n await trackEvent(\"auth.signin\", {\n userId,\n timestamp: new Date().toISOString()\n });\n // ✅ SECURITY: Session regeneration on login (prevents session fixation)\n // Invalidate any old sessions to prevent fixation attacks\n // OWASP A07:2021 - Session Fixation Prevention\n try {\n // Delete all previous sessions for this user EXCEPT the current one\n const { db } = await import(\"@vreko/platform\");\n const { sql } = await import(\"drizzle-orm\");\n if (db) {\n const result = await db.execute(sql`\n\t\t\t\t\t\t\t\tDELETE FROM session\n\t\t\t\t\t\t\t\tWHERE \"userId\" = ${userId}\n\t\t\t\t\t\t\t\tAND id != ${sessionId}\n\t\t\t\t\t\t\t`);\n const rotatedCount = result.rowCount || 0;\n if (rotatedCount > 0) {\n logger.info(\"Session regenerated on login - old sessions invalidated\", {\n userId,\n sessionId,\n rotatedCount\n });\n await trackEvent(\"session.regenerated\", {\n userId,\n reason: \"login\",\n rotatedCount\n });\n }\n }\n } catch (error) {\n // Don't fail login if session rotation fails\n logger.warn(\"Session regeneration failed on login\", {\n userId,\n error: error instanceof Error ? error.message : String(error)\n });\n }\n }\n },\n delete: {\n after: async (session)=>{\n const { userId } = session;\n // Track logout/session revocation\n await trackEvent(\"session.revoked\", {\n userId\n });\n // Also track auth.signout for analytics funnel\n await trackEvent(\"auth.signout\", {\n userId,\n timestamp: new Date().toISOString()\n });\n }\n }\n },\n user: {\n create: {\n before: async (user)=>{\n // ✅ INVITE GATE: Block account creation unless a valid invite code was passed\n // via OAuth additionalData (threaded through OAuth state) or email sign-up.\n // The code is burned atomically - concurrent double-redemption is impossible.\n // For OAuth flows: Better Auth stores additionalData in AsyncLocalStorage via\n // setOAuthState() during parseState(). getOAuthState() reads it back here.\n // For email sign-up: getOAuthState() returns null; fall back to __inviteCode.\n const oauthState = await getOAuthState().catch(()=>null);\n const inviteCode = oauthState?.inviteCode ?? user.__inviteCode;\n // Magic link pioneer path: check pendingApiKeys for a pioneer_magic_claim\n if (!inviteCode && user.email) {\n const { pendingApiKeys: pendingApiKeysTable, inviteCodes: inviteCodesTable, burnInviteCode } = await import(\"@vreko/platform\");\n const { and, eq, gt, isNull, sql } = await import(\"drizzle-orm\");\n const claim = await db.select().from(pendingApiKeysTable).where(and(eq(pendingApiKeysTable.userId, user.email), eq(pendingApiKeysTable.purpose, \"pioneer_magic_claim\"), gt(pendingApiKeysTable.expiresAt, new Date()))).limit(1);\n if (claim.length > 0) {\n const codeRow = await db.select().from(inviteCodesTable).where(and(sql`lower(${inviteCodesTable.invitedEmail}) = lower(${user.email})`, sql`${inviteCodesTable.currentUses} < ${inviteCodesTable.maxUses}`, isNull(inviteCodesTable.revokedAt))).limit(1);\n if (codeRow.length > 0) {\n // biome-ignore lint/style/noNonNullAssertion: length > 0 checked above\n await burnInviteCode(db, codeRow[0].id);\n await db.delete(pendingApiKeysTable).where(eq(pendingApiKeysTable.userId, user.email));\n return {\n data: user\n }; // allow account creation\n }\n }\n }\n if (!inviteCode) {\n throw new Error(\"INVITE_REQUIRED: An invite code is required to create an account.\");\n }\n try {\n const { db } = await import(\"@vreko/platform\");\n const { inviteCodes } = await import(\"@vreko/platform\");\n const { and, eq, sql } = await import(\"drizzle-orm\");\n const code = await db.select().from(inviteCodes).where(eq(inviteCodes.code, inviteCode)).limit(1);\n if (code.length === 0) {\n throw new Error(\"INVALID_INVITE_CODE\");\n }\n // biome-ignore lint/style/noNonNullAssertion: length === 0 checked above\n const entry = code[0];\n if (entry.expiresAt && entry.expiresAt < new Date()) {\n throw new Error(\"INVITE_CODE_EXPIRED\");\n }\n // Atomic burn: UPDATE WHERE currentUses < maxUses RETURNING *\n const burned = await db.update(inviteCodes).set({\n currentUses: sql`${inviteCodes.currentUses} + 1`,\n updatedAt: new Date()\n }).where(and(eq(inviteCodes.id, entry.id), sql`${inviteCodes.currentUses} < ${inviteCodes.maxUses}`)).returning();\n if (burned.length === 0) {\n throw new Error(\"INVITE_CODE_EXHAUSTED\");\n }\n } catch (error) {\n if (error instanceof Error && error.message.startsWith(\"INVITE\")) {\n throw error; // propagate gate errors\n }\n logger.error(\"Invite gate DB error\", {\n error\n });\n throw new Error(\"INVITE_GATE_ERROR\");\n }\n return {\n data: user\n };\n },\n after: async (user)=>{\n const { id: userId, email } = user;\n // Track new user signup\n await trackEvent(\"auth.signup\", {\n userId,\n timestamp: new Date().toISOString()\n });\n // Fire-and-forget HubSpot contact creation - outages must not block signup\n syncUserToHubSpot({\n userId,\n email,\n signupSource: \"app\"\n }).catch((err)=>{\n logger.warn(\"HubSpot signup sync failed (non-blocking)\", {\n userId,\n error: err instanceof Error ? err.message : String(err)\n });\n });\n // API key creation on signup disabled - apiKey plugin removed in better-auth v1.6.5\n // Users can create API keys manually from the dashboard.\n }\n }\n }\n },\n plugins: [\n bearer(),\n deviceAuthorization({\n verificationUri: `${appUrl}/link`,\n schema: {}\n }),\n admin(),\n openAPI(),\n // magicLink() - server-side handler for POST /api/auth/sign-in/magic-link\n magicLink({\n sendMagicLink: async ({ email, url })=>{\n await sendEmail({\n from: \"Vreko <noreply@vreko.dev>\",\n to: email,\n subject: \"Sign in to Vreko\",\n html: `<p>Click <a href=\"${url}\">here</a> to sign in. This link expires in 5 minutes.</p>`\n });\n }\n }),\n // organization() - server-side org endpoints (schema: packages/platform/src/db/schema/postgres.ts)\n organization(),\n // API key management (createApiKey / verifyApiKey / deleteApiKey)\n // better-auth v1.6.5 removed the built-in apiKey() plugin; this custom\n // plugin re-implements the same surface backed by the api_keys DB table.\n apiKeyPlugin(),\n // Asymmetric JWT signing; header injection disabled so oidcProvider owns token issuance\n jwt({\n disableSettingJwtHeader: true\n }),\n // Single fixed issuer (BETTER_AUTH_URL) with standard OIDC endpoints at /oauth2/*\n // Enables MCP server to validate against a standard OAuth surface (D4 follow-on)\n oidcProvider({\n // Absolute URL so the authorize redirect works from api.vreko.dev (Fly.io)\n // as well as vreko.dev (Vercel). authBaseUrl is BETTER_AUTH_URL which is\n // always the web-app origin — the login page lives there regardless of which\n // server is running the OIDC handler.\n loginPage: `${authBaseUrl}/auth/login`\n })\n ],\n onAPIError: {\n onError (error, ctx) {\n // Enhanced error logging with OAuth-specific context\n const errorDetails = {\n error,\n context: ctx\n };\n // Extract additional context from error object\n if (error && typeof error === \"object\") {\n if (\"code\" in error) {\n errorDetails.errorCode = error.code;\n }\n if (\"message\" in error) {\n errorDetails.errorMessage = error.message;\n }\n if (\"statusCode\" in error) {\n errorDetails.statusCode = error.statusCode;\n }\n }\n // Extract context information (e.g., request path, method)\n let isOAuthError = false;\n if (ctx && typeof ctx === \"object\") {\n if (\"request\" in ctx) {\n const request = ctx.request;\n errorDetails.requestUrl = request.url;\n errorDetails.requestMethod = request.method;\n // Check if this is an OAuth callback error\n if (request.url?.includes(\"/api/auth/callback/\")) {\n const provider = request.url.split(\"/callback/\")[1]?.split(\"?\")[0];\n errorDetails.oauthProvider = provider;\n errorDetails.errorType = \"OAuth Callback Error\";\n isOAuthError = true;\n logger.error(\"OAuth Callback Error\", errorDetails);\n }\n }\n }\n // Log auth error\n if (!isOAuthError) {\n logger.error(\"Better Auth API Error\", errorDetails);\n }\n // Track failed auth in PostHog (non-blocking)\n trackEvent(\"auth.signin_failed\", {\n errorCode: errorDetails.errorCode,\n errorMessage: errorDetails.errorMessage,\n path: errorDetails.requestUrl,\n timestamp: new Date().toISOString()\n }).catch(()=>{\n // Ignore tracking errors\n });\n // Send to Sentry for monitoring (lazy import to avoid startup overhead)\n import(\"@vreko/infrastructure\").then(({ captureError })=>{\n if (captureError && error instanceof Error) {\n captureError(error, {\n tags: {\n errorType: isOAuthError ? \"oauth_callback\" : \"auth_api\",\n ...errorDetails.errorCode ? {\n errorCode: String(errorDetails.errorCode)\n } : {}\n },\n extra: errorDetails\n });\n }\n }).catch(()=>{\n // Sentry not available, already logged\n });\n }\n }\n});\n/** Typed auth export with plugin APIs - cast to avoid complex type inference */ export const auth = _auth;\nexport * from \"./lib/organization.js\"; // Type exports moved to appropriate locations:\n // - Session: Use 'better-auth/types' or '@vreko/contracts/auth/session'\n // - Organization types: Use Better Auth organization plugin types\n // Removed dangerous 'any' stub exports (audit finding #1)\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZXMiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0="]}